jsl-ui 9.15.1 → 9.15.2

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.
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"mappings":"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","sources":["grid.ts","grid/slick.core.ts","core/jq.ts","grid/slick.creator.ts","grid/slick.grid.ts","interaction/resizable.ts","core/polyfills.ts","interaction/eventhandler.ts","grid/plugins/slick.rowselectionmodel.ts","grid/slick.dataview.ts","grid/slick.groupitemmetadataprovider.ts","grid/plugins/slick.headermenu.ts","grid/plugins/slick.headerbuttons.ts","grid/slick.formatters.ts","core/numeric.ts","core/culture.ts","core/date.ts","grid/filterDialogs/excelFilter.ts","core/lang.ts","core/helper.ts","ui/dialog.ts","components/virtual-render/VirtualRenderComponent.ts","grid/plugins/slick.rowmovemanager.ts","grid/plugins/ext.overlay.ts","interaction/moveable.ts","grid/slick.editors.core.ts","grid/slick.editors.nav.ts","grid/slick.tree.ts","grid/plugins/slick.cellrangedecorator.ts","grid/plugins/slick.cellrangeselector.ts","grid/plugins/slick.cellselectionmodel.ts"],"sourcesContent":["\r\nexport * from \"./grid/slick.core\";\r\nexport * from \"./grid/slick.creator\";\r\nexport * from \"./grid/slick.dataview\";\r\nexport * from \"./grid/slick.editors.core\";\r\nexport * from \"./grid/slick.formatters\";\r\nexport * from \"./grid/slick.grid\";\r\nexport * from \"./grid/slick.groupitemmetadataprovider\";\r\nexport * from \"./grid/slick.tree\";\r\n\r\nexport * from \"./grid/plugins/slick.cellrangedecorator\";\r\nexport * from \"./grid/plugins/slick.cellrangeselector\";\r\nexport * from \"./grid/plugins/slick.cellselectionmodel\";\r\nexport * from \"./grid/plugins/slick.headermenu\";\r\nexport * from \"./grid/plugins/slick.rowselectionmodel\";\r\n","import { jQueryReplacement, IjQueryReplacement } from \"../core/jq\";\r\nimport { ISlickGrid } from \"./slick.grid\";\r\n\r\nexport interface ISlick {\r\n \"Event\": () => void;\r\n \"EventData\": () => void;\r\n \"EventHandler\": () => void;\r\n \"Range\": (fromRow: number, fromCell: number, toRow?: number, toCell?: number) => void;\r\n \"NonDataRow\": () => void;\r\n \"Group\": any;\r\n \"GroupTotals\": any;\r\n \"EditorLock\": () => void;\r\n \"GlobalEditorLock\": any;\r\n // \"TreeColumns\": (treeColumns: any) => void;\r\n \"keyCode\": any;\r\n \"preClickClassName\": string;\r\n $: IjQueryReplacement;\r\n // formatters: { [index:string] : {formatter: ISlickFormatter} }\r\n}\r\n\r\nexport interface ISlickEvent<T> {\r\n subscribe(fnc: (e, args: T) => any);\r\n notify(args: T, e);\r\n countHandlers(): number;\r\n}\r\n\r\nexport interface ISlickFormatterResult {\r\n addClasses?: string[];\r\n toolTip?: string;\r\n text?: string;\r\n}\r\n\r\nexport type ISlickFormatter = (row: number, cell: number, value: any, columnDef: ISlickColumn, dataContext: any, grid?: ISlickGrid<any>) => string | ISlickFormatterResult;\r\n\r\nexport interface ISlickColumn {\r\n id: string;\r\n field?: string;\r\n name?: string;\r\n resizable?: boolean;\r\n sortable?: boolean;\r\n minWidth?: number;\r\n width?: number;\r\n maxWidth?: number;\r\n previousWidth?: number; // only for internal use\r\n rerenderOnResize?: boolean;\r\n headerCssClass?: string;\r\n defaultSortAsc?: boolean;\r\n focusable?: boolean;\r\n selectable?: boolean;\r\n format?: string;\r\n formatter?: ISlickFormatter;\r\n cssClass?: string;\r\n columnGroup?: string; // correct?\r\n editor?: any; // TODO\r\n editorOptions?: any;\r\n readonly?: boolean;\r\n valueList?: string[] | { [key: string]: string } | Array<{text: string, value: any}>;\r\n sortByVisibleValue?: boolean;\r\n comparer?: (a: any, b: any) => 0 | 1 | -1;\r\n header?: {buttons: [{image?: string, html?: string, showOnHover?: boolean, handler: (e:any) => void, cssClass?: string, tooltip?: string, command?: string}]};\r\n filterable?: boolean;\r\n hideMenu?: boolean;\r\n toolTip?: string;\r\n maxLength?: number;\r\n alwaysRenderColumn?: boolean;\r\n asyncPostRender?: (node: HTMLElement, row: number, item: Text, column: ISlickColumn, status: boolean) => void;\r\n asyncPostRenderCleanup?: (node: HTMLElement, row: number, column: ISlickColumn) => void;\r\n cannotTriggerInsert?: boolean;\r\n groupTotalsFormatter?: (item: any, columnDef: ISlickColumn, grid: any) => string | ISlickFormatterResult;\r\n behavior?: string;\r\n}\r\n\r\n\r\nexport let Slick: ISlick = {\r\n \"Event\": Event,\r\n \"EventData\": EventData,\r\n \"EventHandler\": EventHandler,\r\n \"Range\": Range,\r\n \"NonDataRow\": NonDataItem,\r\n \"Group\": Group,\r\n \"GroupTotals\": GroupTotals,\r\n \"EditorLock\": EditorLock,\r\n\r\n /***\r\n * A global singleton editor lock.\r\n * @class GlobalEditorLock\r\n * @static\r\n * @constructor\r\n */\r\n \"GlobalEditorLock\": new EditorLock(),\r\n // \"TreeColumns\": TreeColumns,\r\n\r\n \"keyCode\": {\r\n SPACE: 8,\r\n BACKSPACE: 8,\r\n DELETE: 46,\r\n DOWN: 40,\r\n END: 35,\r\n ENTER: 13,\r\n ESCAPE: 27,\r\n HOME: 36,\r\n INSERT: 45,\r\n LEFT: 37,\r\n PAGE_DOWN: 34,\r\n PAGE_UP: 33,\r\n RIGHT: 39,\r\n TAB: 9,\r\n UP: 38,\r\n A: 65\r\n },\r\n \"preClickClassName\": \"slick-edit-preclick\",\r\n $: jQueryReplacement\r\n // formatters:{}\r\n};\r\n\r\n/***\r\n * An event object for passing data to event handlers and letting them control propagation.\r\n * <p>This is pretty much identical to how W3C and jQuery implement events.</p>\r\n * @class EventData\r\n * @constructor\r\n */\r\nfunction EventData() {\r\n var isPropagationStopped = false;\r\n var isImmediatePropagationStopped = false;\r\n\r\n /***\r\n * Stops event from propagating up the DOM tree.\r\n * @method stopPropagation\r\n */\r\n this.stopPropagation = function () {\r\n isPropagationStopped = true;\r\n };\r\n\r\n /***\r\n * Returns whether stopPropagation was called on this event object.\r\n * @method isPropagationStopped\r\n * @return {Boolean}\r\n */\r\n this.isPropagationStopped = function (): boolean {\r\n return isPropagationStopped;\r\n };\r\n\r\n /***\r\n * Prevents the rest of the handlers from being executed.\r\n * @method stopImmediatePropagation\r\n */\r\n this.stopImmediatePropagation = function () {\r\n isImmediatePropagationStopped = true;\r\n };\r\n\r\n /***\r\n * Returns whether stopImmediatePropagation was called on this event object.\\\r\n * @method isImmediatePropagationStopped\r\n * @return {Boolean}\r\n */\r\n this.isImmediatePropagationStopped = function (): boolean {\r\n return isImmediatePropagationStopped;\r\n };\r\n}\r\n\r\n/***\r\n * A simple publisher-subscriber implementation.\r\n * @class Event\r\n * @constructor\r\n */\r\nfunction Event() {\r\n var handlers: Function[] = [];\r\n\r\n /***\r\n * Adds an event handler to be called when the event is fired.\r\n * <p>Event handler will receive two arguments - an <code>EventData</code> and the <code>data</code>\r\n * object the event was fired with.<p>\r\n * @method subscribe\r\n * @param fn {Function} Event handler.\r\n */\r\n this.subscribe = function (fn: Function) {\r\n handlers.push(fn);\r\n };\r\n\r\n this.countHandlers = function () {\r\n return handlers.length;\r\n };\r\n\r\n /***\r\n * Removes an event handler added with <code>subscribe(fn)</code>.\r\n * @method unsubscribe\r\n * @param fn {Function} Event handler to be removed.\r\n */\r\n this.unsubscribe = function (fn: Function) {\r\n for (var i = handlers.length - 1; i >= 0; i--) {\r\n if (handlers[i] === fn) {\r\n handlers.splice(i, 1);\r\n }\r\n }\r\n };\r\n\r\n /***\r\n * Fires an event notifying all subscribers.\r\n * @method notify\r\n * @param args {Object} Additional data object to be passed to all handlers.\r\n * @param e {EventData}\r\n * Optional.\r\n * An <code>EventData</code> object to be passed to all handlers.\r\n * For DOM events, an existing W3C/jQuery event object can be passed in.\r\n * @param scope {Object}\r\n * Optional.\r\n * The scope (\"this\") within which the handler will be executed.\r\n * If not specified, the scope will be set to the <code>Event</code> instance.\r\n */\r\n this.notify = function (args: any, e, scope: any) {\r\n e = e || new EventData();\r\n scope = scope || this;\r\n\r\n var returnValue;\r\n for (var i = 0; i < handlers.length && !((e.isPropagationStopped && e.isPropagationStopped()) || (e.isImmediatePropagationStopped && e.isImmediatePropagationStopped())); i++) {\r\n returnValue = handlers[i].call(scope, e, args);\r\n }\r\n\r\n return returnValue;\r\n };\r\n}\r\n\r\nfunction EventHandler() {\r\n var handlers = [];\r\n\r\n this.subscribe = function (event, handler) {\r\n handlers.push({\r\n event: event,\r\n handler: handler\r\n });\r\n event.subscribe(handler);\r\n\r\n return this; // allow chaining\r\n };\r\n\r\n this.unsubscribe = function (event, handler) {\r\n var i = handlers.length;\r\n while (i--) {\r\n if (handlers[i].event === event &&\r\n handlers[i].handler === handler) {\r\n handlers.splice(i, 1);\r\n event.unsubscribe(handler);\r\n return;\r\n }\r\n }\r\n\r\n return this; // allow chaining\r\n };\r\n\r\n this.unsubscribeAll = function () {\r\n var i = handlers.length;\r\n while (i--) {\r\n handlers[i].event.unsubscribe(handlers[i].handler);\r\n }\r\n handlers = [];\r\n\r\n return this; // allow chaining\r\n };\r\n}\r\n\r\n/***\r\n * A structure containing a range of cells.\r\n * @class Range\r\n * @constructor\r\n * @param fromRow {Integer} Starting row.\r\n * @param fromCell {Integer} Starting cell.\r\n * @param toRow {Integer} Optional. Ending row. Defaults to <code>fromRow</code>.\r\n * @param toCell {Integer} Optional. Ending cell. Defaults to <code>fromCell</code>.\r\n */\r\nexport function Range(fromRow: number, fromCell: number, toRow?: number, toCell?: number) {\r\n if (toRow === undefined && toCell === undefined) {\r\n toRow = fromRow;\r\n toCell = fromCell;\r\n }\r\n\r\n /***\r\n * @property fromRow\r\n * @type {Integer}\r\n */\r\n this.fromRow = Math.min(fromRow, toRow);\r\n\r\n /***\r\n * @property fromCell\r\n * @type {Integer}\r\n */\r\n this.fromCell = Math.min(fromCell, toCell);\r\n\r\n /***\r\n * @property toRow\r\n * @type {Integer}\r\n */\r\n this.toRow = Math.max(fromRow, toRow);\r\n\r\n /***\r\n * @property toCell\r\n * @type {Integer}\r\n */\r\n this.toCell = Math.max(fromCell, toCell);\r\n\r\n /***\r\n * Returns whether a range represents a single row.\r\n * @method isSingleRow\r\n * @return {Boolean}\r\n */\r\n this.isSingleRow = function (): boolean {\r\n return this.fromRow == this.toRow;\r\n };\r\n\r\n /***\r\n * Returns whether a range represents a single cell.\r\n * @method isSingleCell\r\n * @return {Boolean}\r\n */\r\n this.isSingleCell = function (): boolean {\r\n return this.fromRow == this.toRow && this.fromCell == this.toCell;\r\n };\r\n\r\n /***\r\n * Returns whether a range contains a given cell.\r\n * @method contains\r\n * @param row {Integer}\r\n * @param cell {Integer}\r\n * @return {Boolean}\r\n */\r\n this.contains = function (row, cell) {\r\n return row >= this.fromRow && row <= this.toRow &&\r\n cell >= this.fromCell && cell <= this.toCell;\r\n };\r\n\r\n /***\r\n * Returns a readable representation of a range.\r\n * @method toString\r\n * @return {String}\r\n */\r\n this.toString = function (): string {\r\n if (this.isSingleCell()) {\r\n return \"(\" + this.fromRow + \":\" + this.fromCell + \")\";\r\n } else {\r\n return \"(\" + this.fromRow + \":\" + this.fromCell + \" - \" + this.toRow + \":\" + this.toCell + \")\";\r\n }\r\n };\r\n}\r\n\r\n\r\n/***\r\n * A base class that all special / non-data rows (like Group and GroupTotals) derive from.\r\n * @class NonDataItem\r\n * @constructor\r\n */\r\nfunction NonDataItem() {\r\n this.__nonDataRow = true;\r\n}\r\n\r\n\r\n/***\r\n * Information about a group of rows.\r\n * @class Group\r\n * @extends Slick.NonDataItem\r\n * @constructor\r\n */\r\nfunction Group() {\r\n this.__group = true;\r\n\r\n /**\r\n * Grouping level, starting with 0.\r\n * @property level\r\n * @type {Number}\r\n */\r\n this.level = 0;\r\n\r\n /***\r\n * Number of rows in the group.\r\n * @property count\r\n * @type {Integer}\r\n */\r\n this.count = 0;\r\n\r\n /***\r\n * Grouping value.\r\n * @property value\r\n * @type {Object}\r\n */\r\n this.value = null;\r\n\r\n /***\r\n * Formatted display value of the group.\r\n * @property title\r\n * @type {String}\r\n */\r\n this.title = null;\r\n\r\n /***\r\n * Whether a group is collapsed.\r\n * @property collapsed\r\n * @type {Boolean}\r\n */\r\n this.collapsed = false;\r\n\r\n /***\r\n * Whether a group selection checkbox is checked.\r\n * @property selectChecked\r\n * @type {Boolean}\r\n */\r\n this.selectChecked = false;\r\n\r\n /***\r\n * GroupTotals, if any.\r\n * @property totals\r\n * @type {GroupTotals}\r\n */\r\n this.totals = null;\r\n\r\n /**\r\n * Rows that are part of the group.\r\n * @property rows\r\n * @type {Array}\r\n */\r\n this.rows = [];\r\n\r\n /**\r\n * Sub-groups that are part of the group.\r\n * @property groups\r\n * @type {Array}\r\n */\r\n this.groups = null;\r\n\r\n /**\r\n * A unique key used to identify the group. This key can be used in calls to DataView\r\n * collapseGroup() or expandGroup().\r\n * @property groupingKey\r\n * @type {Object}\r\n */\r\n this.groupingKey = null;\r\n}\r\n\r\nGroup.prototype = new NonDataItem();\r\n\r\n/***\r\n * Compares two Group instances.\r\n * @method equals\r\n * @return {Boolean}\r\n * @param group {Group} Group instance to compare to.\r\n */\r\nGroup.prototype.equals = function (group): boolean {\r\n return this.value === group.value &&\r\n this.count === group.count &&\r\n this.collapsed === group.collapsed &&\r\n this.title === group.title;\r\n};\r\n\r\n/***\r\n * Information about group totals.\r\n * An instance of GroupTotals will be created for each totals row and passed to the aggregators\r\n * so that they can store arbitrary data in it. That data can later be accessed by group totals\r\n * formatters during the display.\r\n * @class GroupTotals\r\n * @extends Slick.NonDataItem\r\n * @constructor\r\n */\r\nfunction GroupTotals() {\r\n this.__groupTotals = true;\r\n\r\n /***\r\n * Parent Group.\r\n * @param group\r\n * @type {Group}\r\n */\r\n this.group = null;\r\n\r\n /***\r\n * Whether the totals have been fully initialized / calculated.\r\n * Will be set to false for lazy-calculated group totals.\r\n * @param initialized\r\n * @type {Boolean}\r\n */\r\n this.initialized = false;\r\n}\r\n\r\nGroupTotals.prototype = new NonDataItem();\r\n\r\n/***\r\n * A locking helper to track the active edit controller and ensure that only a single controller\r\n * can be active at a time. This prevents a whole class of state and validation synchronization\r\n * issues. An edit controller (such as SlickGrid) can query if an active edit is in progress\r\n * and attempt a commit or cancel before proceeding.\r\n * @class EditorLock\r\n * @constructor\r\n */\r\nfunction EditorLock() {\r\n var activeEditController = null;\r\n\r\n /***\r\n * Returns true if a specified edit controller is active (has the edit lock).\r\n * If the parameter is not specified, returns true if any edit controller is active.\r\n * @method isActive\r\n * @param editController {EditController}\r\n * @return {Boolean}\r\n */\r\n this.isActive = function (editController) {\r\n return (editController ? activeEditController === editController : activeEditController !== null);\r\n };\r\n\r\n /***\r\n * Sets the specified edit controller as the active edit controller (acquire edit lock).\r\n * If another edit controller is already active, and exception will be throw new Error(.\r\n * @method activate\r\n * @param editController {EditController} edit controller acquiring the lock\r\n */\r\n this.activate = function (editController) {\r\n if (editController === activeEditController) { // already activated?\r\n return;\r\n }\r\n if (activeEditController !== null) {\r\n throw new Error(\"SlickGrid.EditorLock.activate: an editController is still active, can't activate another editController\");\r\n }\r\n if (!editController.commitCurrentEdit) {\r\n throw new Error(\"SlickGrid.EditorLock.activate: editController must implement .commitCurrentEdit()\");\r\n }\r\n if (!editController.cancelCurrentEdit) {\r\n throw new Error(\"SlickGrid.EditorLock.activate: editController must implement .cancelCurrentEdit()\");\r\n }\r\n activeEditController = editController;\r\n };\r\n\r\n /***\r\n * Unsets the specified edit controller as the active edit controller (release edit lock).\r\n * If the specified edit controller is not the active one, an exception will be throw new Error(.\r\n * @method deactivate\r\n * @param editController {EditController} edit controller releasing the lock\r\n */\r\n this.deactivate = function (editController) {\r\n if (activeEditController !== editController) {\r\n throw new Error(\"SlickGrid.EditorLock.deactivate: specified editController is not the currently active one\");\r\n }\r\n activeEditController = null;\r\n };\r\n\r\n /***\r\n * Attempts to commit the current edit by calling \"commitCurrentEdit\" method on the active edit\r\n * controller and returns whether the commit attempt was successful (commit may fail due to validation\r\n * errors, etc.). Edit controller's \"commitCurrentEdit\" must return true if the commit has succeeded\r\n * and false otherwise. If no edit controller is active, returns true.\r\n * @method commitCurrentEdit\r\n * @return {Boolean}\r\n */\r\n this.commitCurrentEdit = function (): boolean {\r\n return (activeEditController ? activeEditController.commitCurrentEdit() : true);\r\n };\r\n\r\n /***\r\n * Attempts to cancel the current edit by calling \"cancelCurrentEdit\" method on the active edit\r\n * controller and returns whether the edit was successfully cancelled. If no edit controller is\r\n * active, returns true.\r\n * @method cancelCurrentEdit\r\n * @return {Boolean}\r\n */\r\n this.cancelCurrentEdit = function cancelCurrentEdit() {\r\n return (activeEditController ? activeEditController.cancelCurrentEdit() : true);\r\n };\r\n}\r\n\r\n// /**\r\n// *\r\n// * @param {Array} treeColumns Array com levels of columns\r\n// * @returns {{hasDepth: 'hasDepth', getTreeColumns: 'getTreeColumns', extractColumns: 'extractColumns', getDepth: 'getDepth', getColumnsInDepth: 'getColumnsInDepth', getColumnsInGroup: 'getColumnsInGroup', visibleColumns: 'visibleColumns', filter: 'filter', reOrder: reOrder}}\r\n// * @constructor\r\n// */\r\n// function TreeColumns(treeColumns) {\r\n\r\n// var columnsById = {};\r\n\r\n// function init() {\r\n// mapToId(treeColumns);\r\n// }\r\n\r\n// function mapToId(columns) {\r\n// columns\r\n// .forEach(function (column) {\r\n// columnsById[column.id] = column;\r\n\r\n// if (column.columns) {\r\n// mapToId(column.columns);\r\n// }\r\n// });\r\n// }\r\n\r\n// function filter(node, condition) {\r\n\r\n// return node.filter(function (column) {\r\n\r\n// var valid = condition.call(column);\r\n\r\n// if (valid && column.columns) {\r\n// column.columns = filter(column.columns, condition);\r\n// }\r\n\r\n// return valid && (!column.columns || column.columns.length);\r\n// });\r\n\r\n// }\r\n\r\n// function sort(columns, grid) {\r\n// columns\r\n// .sort(function (a, b) {\r\n// var indexA = getOrDefault(grid.getColumnIndex(a.id)),\r\n// indexB = getOrDefault(grid.getColumnIndex(b.id));\r\n\r\n// return indexA - indexB;\r\n// })\r\n// .forEach(function (column) {\r\n// if (column.columns) {\r\n// sort(column.columns, grid);\r\n// }\r\n// });\r\n// }\r\n\r\n// function getOrDefault(value) {\r\n// return typeof value === \"undefined\" ? -1 : value;\r\n// }\r\n\r\n// function getDepth(node) {\r\n// if (node.length) {\r\n// for (var i in node)\r\n// return getDepth(node[i]);\r\n// }\r\n// else if (node.columns) {\r\n// return 1 + getDepth(node.columns);\r\n// }\r\n// else {\r\n// return 1;\r\n// }\r\n// }\r\n\r\n// function getColumnsInDepth(node: any[], depth: number, current?: number) {\r\n// var columns = [];\r\n// current = current || 0;\r\n\r\n// if (depth == current) {\r\n\r\n// if (node.length) {\r\n// node.forEach(function (n) {\r\n// if (n.columns)\r\n// n.extractColumns = function () {\r\n// return extractColumns(n);\r\n// };\r\n// });\r\n// }\r\n\r\n// return node;\r\n// } else {\r\n// for (var i in node) {\r\n// if (node[i].columns) {\r\n// columns = columns.concat(getColumnsInDepth(node[i].columns, depth, current + 1));\r\n// }\r\n// }\r\n// }\r\n\r\n// return columns;\r\n// }\r\n\r\n// function extractColumns(node) {\r\n// var result = [];\r\n\r\n// if (node.hasOwnProperty(\"length\")) {\r\n\r\n// for (var i = 0; i < node.length; i++) {\r\n// result = result.concat(extractColumns(node[i]));\r\n// }\r\n\r\n// } else {\r\n\r\n// if (node.hasOwnProperty(\"columns\")) {\r\n\r\n// result = result.concat(extractColumns(node.columns));\r\n// } else {\r\n// return node;\r\n// }\r\n\r\n// }\r\n\r\n// return result;\r\n// }\r\n\r\n// function cloneTreeColumns() {\r\n// return (<any>window).Slick.$.shallowExtend([], treeColumns);\r\n// }\r\n\r\n// init();\r\n\r\n// this.hasDepth = function () {\r\n\r\n// for (var i in treeColumns) {\r\n// if (treeColumns[i].hasOwnProperty('columns'))\r\n// return true;\r\n// }\r\n\r\n// return false;\r\n// };\r\n\r\n// this.getTreeColumns = function () {\r\n// return treeColumns;\r\n// };\r\n\r\n// this.extractColumns = function () {\r\n// return this.hasDepth() ? extractColumns(treeColumns) : treeColumns;\r\n// };\r\n\r\n// this.getDepth = function () {\r\n// return getDepth(treeColumns);\r\n// };\r\n\r\n// this.getColumnsInDepth = function (depth) {\r\n// return getColumnsInDepth(treeColumns, depth);\r\n// };\r\n\r\n// this.getColumnsInGroup = function (groups) {\r\n// return extractColumns(groups);\r\n// };\r\n\r\n// this.visibleColumns = function () {\r\n// return filter(cloneTreeColumns(), function () {\r\n// return this.visible;\r\n// });\r\n// };\r\n\r\n// this.filter = function (condition) {\r\n// return filter(cloneTreeColumns(), condition);\r\n// };\r\n\r\n// this.reOrder = function (grid) {\r\n// return sort(treeColumns, grid);\r\n// };\r\n\r\n// this.getById = function (id) {\r\n// return columnsById[id];\r\n// };\r\n\r\n// this.getInIds = function (ids) {\r\n// return ids.map(function (id) {\r\n// return columnsById[id];\r\n// });\r\n// };\r\n// }\r\n\r\n// (<any>window).Slick = Slick;\r\n\r\n","export interface IjQueryWrapper {\r\n length: number;\r\n empty: () => IjQueryWrapper;\r\n appendTo: (selector: IjQueryWrapper | HTMLElement) => IjQueryWrapper;\r\n append: (el: HTMLElement) => IjQueryWrapper;\r\n add: (selector: IjQueryWrapper | HTMLElement) => IjQueryWrapper;\r\n css: (key: string, value?: any) => IjQueryWrapper | any;\r\n attr: (key: string, value?: any) => IjQueryWrapper | string;\r\n closestClass: (name: string, stopAt?: string) => IjQueryWrapper;\r\n data: (name: string, value?: any) => any;\r\n remove(): void;\r\n html: (value?: any) => string | IjQueryWrapper;\r\n text: (value: string) => IjQueryWrapper;\r\n addClass: (name: string) => IjQueryWrapper;\r\n hasClass: (name: string) => boolean;\r\n height: (val?: number | string) => number | IjQueryWrapper;\r\n width: (val?: number | string) => number | IjQueryWrapper;\r\n removeClass: (name: string) => IjQueryWrapper;\r\n offset: () => { top: number, left: number };\r\n children: () => IjQueryWrapper;\r\n on: (eventname: string, fnc: Function) => IjQueryWrapper;\r\n toggleClass: (name: string, state?: boolean) => IjQueryWrapper;\r\n find: (selector: string) => IjQueryWrapper;\r\n slideDown: (speed: string, done: Function) => IjQueryWrapper;\r\n slideUp: (speed: string, done: Function) => IjQueryWrapper;\r\n index: () => number;\r\n}\r\n\r\nexport interface IjQueryReplacement {\r\n (selector?: string | HTMLElement | Document): IjQueryWrapper;\r\n deepExtend: (out: any, ...a: any[]) => any;\r\n shallowExtend: (out: any, ...a: any[]) => any;\r\n each: (array: any[] | IjQueryWrapper, fnc: (idx: number, val: any) => void) => void;\r\n}\r\n\r\nfunction deepExtend(out: any, ...a: any[]): any {\r\n out = out || {};\r\n\r\n for (let i = 1; i < arguments.length; i++) {\r\n let obj = arguments[i];\r\n\r\n if (!obj)\r\n continue;\r\n\r\n for (let key in obj) {\r\n if (obj.hasOwnProperty(key)) {\r\n if (obj[key] !== null && typeof obj[key] === 'object')\r\n out[key] = deepExtend((Array.isArray(obj[key]) && out[key] === undefined) ? [] : out[key], obj[key]);\r\n else\r\n out[key] = obj[key];\r\n }\r\n }\r\n }\r\n\r\n return out;\r\n}\r\n\r\nfunction getParentWithClass(el: HTMLElement, c: string, stopAt?: string): HTMLElement {\r\n if (el.classList.contains(c))\r\n return el;\r\n if (stopAt !== undefined && el.classList.contains(stopAt))\r\n return undefined;\r\n if (el.parentElement) {\r\n return getParentWithClass(el.parentElement, c);\r\n }\r\n return undefined;\r\n}\r\n\r\nfunction jQWrapper(elements: HTMLElement[]): IjQueryWrapper {\r\n let _elements: any = elements;\r\n\r\n _elements.empty = function (): IjQueryWrapper {\r\n for (let x of _elements) {\r\n x.innerHTML = '';\r\n }\r\n return this;\r\n };\r\n\r\n _elements.appendTo = function (selector: IjQueryWrapper | HTMLElement | string): IjQueryWrapper {\r\n for (let i = 0; i < _elements.length; i++) {\r\n if (selector instanceof HTMLElement) {\r\n selector.appendChild(_elements[i]);\r\n } else if (typeof (selector) === \"string\") {\r\n const parents = document.querySelectorAll(selector);\r\n for (let i = 0, len = parents.length; i < len; i++) {\r\n parents[i].appendChild(_elements[i]);\r\n }\r\n } else {\r\n for (let j = 0; j < selector.length; j++) {\r\n selector[j].appendChild(_elements[i]);\r\n }\r\n }\r\n }\r\n return this;\r\n };\r\n\r\n _elements.append = function (el: HTMLElement): IjQueryWrapper {\r\n for (let i = 0; i < _elements.length; i++) {\r\n _elements[i].appendChild(el);\r\n }\r\n return this;\r\n };\r\n\r\n _elements.add = function (selector: IjQueryWrapper | HTMLElement): IjQueryWrapper {\r\n if (selector !== undefined) {\r\n if (selector instanceof HTMLElement) {\r\n _elements.push(selector);\r\n } else {\r\n for (let i = 0; i < selector.length; i++) {\r\n _elements.push(selector[i]);\r\n }\r\n }\r\n }\r\n return this;\r\n }\r\n\r\n _elements.css = function (key: string | any, value?: any): IjQueryWrapper | any {\r\n // TODO: support object instead of just simple keys\r\n if (value === undefined) {\r\n if (typeof (key) === \"string\") {\r\n if (!_elements.length) {\r\n return undefined;\r\n }\r\n const computed = [\"borderLeftWidth\", \"borderRightWidth\", \"paddingLeft\", \"paddingRight\",\r\n \"borderTopWidth\", \"borderBottomWidth\", \"paddingTop\", \"paddingBottom\"];\r\n if (computed.indexOf(key) < 0) {\r\n return _elements[0].style[key];\r\n }\r\n return window.getComputedStyle(_elements[0])[key];\r\n } else {\r\n for (const keyEl in key) {\r\n if (!key.hasOwnProperty(keyEl)) {\r\n continue;\r\n }\r\n for (let i = 0; i < _elements.length; i++) {\r\n if ([\"height\", \"width\", \"top\", \"left\", \"bottom\", \"right\"].indexOf(keyEl) >= 0 && typeof key[keyEl] === \"number\") {\r\n _elements[i].style[keyEl] = key[keyEl] + \"px\";\r\n } else {\r\n _elements[i].style[keyEl] = key[keyEl];\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n for (let i = 0; i < _elements.length; i++) {\r\n if ([\"height\", \"width\", \"top\", \"left\", \"bottom\", \"right\"].indexOf(key) >= 0 && typeof value === \"number\") {\r\n _elements[i].style[key] = value + \"px\";\r\n } else {\r\n _elements[i].style[key] = value;\r\n }\r\n }\r\n return this;\r\n }\r\n\r\n _elements.attr = function (key: string, value?: any): IjQueryWrapper | string {\r\n if (value === undefined) {\r\n return _elements.length ? _elements[0][key] : undefined;\r\n }\r\n for (let i = 0; i < _elements.length; i++) {\r\n _elements[i][key] = value;\r\n }\r\n return this;\r\n }\r\n\r\n _elements.closestClass = function (name: string, stopAt?: string): IjQueryWrapper {\r\n let result = jQueryReplacement();\r\n for (let i = 0; i < _elements.length; i++) {\r\n let match = getParentWithClass(_elements[i], name, stopAt);\r\n result.add(match);\r\n }\r\n return result;\r\n }\r\n\r\n _elements.remove = function (): void {\r\n for (let i = 0; i < _elements.length; i++) {\r\n let el = _elements[i];\r\n if (el.parentNode) {\r\n el.parentNode.removeChild(el);\r\n }\r\n }\r\n }\r\n\r\n _elements.data = function (name: string, value?: any): any {\r\n if (_elements.length === 0)\r\n return undefined;\r\n if (value === undefined) {\r\n return _elements[0][name];\r\n }\r\n for (let i = 0; i < _elements.length; i++) {\r\n _elements[i][name] = value;\r\n }\r\n return this;\r\n }\r\n\r\n _elements.html = function (value?: any): string | IjQueryWrapper {\r\n if (value === undefined) {\r\n return _elements.length ? _elements[0].innerHTML : undefined;\r\n }\r\n for (let i = 0; i < _elements.length; i++) {\r\n _elements[i].innerHTML = value;\r\n }\r\n return this;\r\n }\r\n\r\n _elements.text = function (value: string): IjQueryWrapper {\r\n for (let i = 0; i < _elements.length; i++) {\r\n _elements[i].innerText = value;\r\n }\r\n return this;\r\n }\r\n\r\n _elements.height = function (value?: number | string): number | IjQueryWrapper {\r\n if (value === undefined) {\r\n if (!_elements.length) {\r\n return undefined;\r\n }\r\n let cssHeight = parseInt(_elements[0].style.height);\r\n if (isNaN(cssHeight)) {\r\n return _elements[0].offsetHeight;\r\n } else {\r\n return cssHeight;\r\n }\r\n }\r\n for (let i = 0; i < _elements.length; i++) {\r\n if (typeof value === \"string\") {\r\n _elements[i].style.height = value;\r\n } else {\r\n //_elements[i].offsetHeight = value;\r\n _elements[i].style.height = value + \"px\";\r\n }\r\n }\r\n return this;\r\n }\r\n\r\n _elements.width = function (value?: number | string): number | IjQueryWrapper {\r\n if (value === undefined) {\r\n if (!_elements.length) {\r\n return undefined;\r\n }\r\n // let cssHeight = parseInt(_elements[0].style.width);\r\n // if (isNaN(cssHeight)) {\r\n return _elements[0].offsetWidth;\r\n // } else {\r\n // return cssHeight;\r\n // }\r\n }\r\n for (let i = 0; i < _elements.length; i++) {\r\n if (typeof value === \"string\") {\r\n _elements[i].style.width = value;\r\n } else {\r\n //_elements[i].offsetWidth = value;\r\n _elements[i].style.width = value + \"px\";\r\n }\r\n }\r\n return this;\r\n }\r\n\r\n _elements.removeClass = function (name: string): IjQueryWrapper {\r\n for (let i = 0; i < _elements.length; i++) {\r\n if (name.indexOf(' ') > 0) {\r\n let names = name.split(' ');\r\n for (let nIdx = 0; nIdx < names.length; nIdx++) {\r\n _elements[i].classList.remove(names[nIdx]);\r\n }\r\n } else {\r\n _elements[i].classList.remove(name);\r\n }\r\n }\r\n return this;\r\n }\r\n\r\n _elements.offset = function (): { top: number, left: number } {\r\n if (_elements.length === 0)\r\n return undefined;\r\n let el = _elements[0];\r\n let rect = el.getBoundingClientRect();\r\n return {\r\n top: rect.top + document.body.scrollTop,\r\n left: rect.left + document.body.scrollLeft\r\n };\r\n }\r\n\r\n _elements.children = function (): IjQueryWrapper {\r\n let result: HTMLElement[] = [];\r\n for (let i = 0; i < _elements.length; i++) {\r\n for (let cidx = 0; cidx < _elements[i].children.length; cidx++) {\r\n result.push(_elements[i].children[cidx]);\r\n }\r\n }\r\n return jQWrapper(result);\r\n }\r\n\r\n _elements.on = function (eventname: string, fnc: Function): IjQueryWrapper {\r\n for (let i = 0; i < _elements.length; i++) {\r\n _elements[i].addEventListener(eventname, fnc);\r\n }\r\n return this;\r\n }\r\n\r\n _elements.toggleClass = function (name: string, state?: boolean): IjQueryWrapper {\r\n for (let i = 0; i < _elements.length; i++) {\r\n if (state === false || _elements[i].classList.contains(name)) {\r\n _elements[i].classList.remove(name);\r\n } else if (state === true || !_elements[i].classList.contains(name)) {\r\n _elements[i].classList.add(name);\r\n }\r\n }\r\n return this;\r\n }\r\n\r\n _elements.find = function (selector: string): IjQueryWrapper {\r\n var result = jQueryReplacement();\r\n for (let i = 0; i < _elements.length; i++) {\r\n let found = _elements[i].querySelectorAll(selector);\r\n for (let j = 0; j < found.length; j++) {\r\n result.add(found[j]);\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n _elements.slideDown = function (speed: string, done: Function): IjQueryWrapper {\r\n //TODO\r\n for (let i = 0; i < _elements.length; i++) {\r\n _elements[i].style.display = '';\r\n }\r\n return this;\r\n }\r\n\r\n _elements.slideUp = function (speed: string, done: Function): IjQueryWrapper {\r\n //TODO\r\n for (let i = 0; i < _elements.length; i++) {\r\n _elements[i].style.display = 'none';\r\n }\r\n return this;\r\n }\r\n\r\n _elements.addClass = function (name: string): IjQueryWrapper {\r\n if (name) {\r\n {\r\n for (let i = 0; i < _elements.length; i++) {\r\n _elements[i].classList.add(name);\r\n }\r\n }\r\n }\r\n return this;\r\n }\r\n\r\n _elements.hasClass = function (name: string): boolean {\r\n for (let i = 0; i < _elements.length; i++) {\r\n if (_elements[i].classList.contains(name))\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n _elements.index = function (): number {\r\n var index = 0;\r\n let node = _elements[0];\r\n if (!node)\r\n return -1;\r\n while ((node = node.previousElementSibling)) {\r\n index++;\r\n }\r\n return index;\r\n }\r\n\r\n\r\n return _elements;\r\n}\r\n\r\nconst jqueryCreate = function (selector?: string | HTMLElement): IjQueryWrapper {\r\n let elements: HTMLElement[] = [];\r\n if (typeof selector === \"string\") {\r\n if (selector[0] === '<') {\r\n var tmp = document.createElement(\"div\");\r\n tmp.innerHTML = selector;\r\n elements.push(<HTMLElement>tmp.firstElementChild);\r\n } else {\r\n var q = document.querySelectorAll(selector);\r\n\r\n if (q) {\r\n for (let i = 0; i < q.length; i++) {\r\n let node: Node = q[i];\r\n if (node.nodeType === Node.ELEMENT_NODE) {\r\n elements.push(node as HTMLElement);\r\n }\r\n }\r\n }\r\n }\r\n } else {\r\n if (selector !== undefined) {\r\n elements.push(<HTMLElement>selector);\r\n }\r\n }\r\n return jQWrapper(elements);\r\n};\r\n\r\nfunction each(array: any[] | IjQueryWrapper, fnc: (idx: number, val: any) => void): void {\r\n for (let i = 0; i < array.length; i++) {\r\n fnc(i, array[i]);\r\n }\r\n}\r\n\r\nfunction shallowExtend(out, ...rest) {\r\n out = out || {};\r\n\r\n for (var i = 1; i < arguments.length; i++) {\r\n if (!arguments[i])\r\n continue;\r\n\r\n for (var key in arguments[i]) {\r\n if (arguments[i].hasOwnProperty(key))\r\n out[key] = arguments[i][key];\r\n }\r\n }\r\n\r\n return out;\r\n}\r\n\r\njqueryCreate.deepExtend = deepExtend;\r\njqueryCreate.each = each;\r\njqueryCreate.shallowExtend = shallowExtend;\r\n\r\nexport let jQueryReplacement: ((selector?: string | HTMLElement) => IjQueryWrapper) & IjQueryReplacement = jqueryCreate;\r\n","import { ISlickColumn, Slick, ISlickFormatterResult, ISlickEvent } from \"./slick.core\";\r\nimport { SlickGrid, ISlickGridOptions, ISlickGrid } from \"./slick.grid\";\r\nimport { RowSelectionModel } from \"./plugins/slick.rowselectionmodel\";\r\nimport { DataView, ISlickDataView } from \"./slick.dataview\";\r\nimport { GroupItemMetadataProvider } from \"./slick.groupitemmetadataprovider\";\r\nimport { jQueryReplacement, IjQueryWrapper } from \"../core/jq\";\r\nimport { HeaderMenu } from \"./plugins/slick.headermenu\";\r\nimport { HeaderButtons } from \"./plugins/slick.headerbuttons\";\r\nimport { TextFormatter } from \"./slick.formatters\";\r\nimport { ExcelFilter } from \"./filterDialogs/excelFilter\";\r\nimport { UILang } from \"../core/lang\";\r\nimport { RowMoveManager } from \"./plugins/slick.rowmovemanager\";\r\nimport { Overlays } from \"./plugins/ext.overlay\";\r\n\r\nexport interface ISlickCreatorOptions extends ISlickGridOptions {\r\n primaryKey: string;\r\n showHeaderMenu?: boolean;\r\n provideDefaultValues?: (item: any) => boolean | void;\r\n groupItemOptions?: any; // TODO\r\n showColumnGroups?: boolean;\r\n mode?: \"client\" | \"server\";\r\n dataView?: any; // TODO\r\n saveColumnsKey?: string;\r\n groupItemMetadataProvider?: any;\r\n getFilterValues?: (column: ISlickColumn /* TODO: selected values of other columns */) => Promise<{ [key: string]: any[] } | any[]>;\r\n showFilterDialog?: (column: ISlickColumn, grid: IJSLGrid<any>) => void;\r\n allowRowMove?: boolean;\r\n enableFillDown?: boolean;\r\n setDataItemValueForColumn?: (item, columnDef: ISlickColumn, value: any) => void;\r\n}\r\n\r\nexport interface IJSLGrid<T> extends ISlickGrid<T> {\r\n dataView: ISlickDataView<T>;\r\n setHeight: (height: number) => void;\r\n getHeight: () => number;\r\n sort: (column: ISlickColumn, sortAsc?: boolean) => void;\r\n refreshData: () => void;\r\n setData: (newData: T[]) => void;\r\n getData: () => T[];\r\n refresh: () => void;\r\n addFormula: (field: string, fnc: (row: T, grid: IJSLGrid<T>, field: string) => any,\r\n usedColumns: string[]) => void;\r\n getFormattedValue: (column: ISlickColumn, value: any, item?: T) => string;\r\n getContentWidth: (column: ISlickColumn, row: number) => number;\r\n fitToContent: (column: ISlickColumn) => void;\r\n triggerAllFormulas: () => void;\r\n columnHasFilter: (columnId: string) => boolean;\r\n refreshDataItem: (item: T) => void;\r\n addFilter: (filter: {\r\n field: string,\r\n columnId?: string,\r\n match: (item: T, field: string) => boolean, combine?: \"or\" | \"and\"\r\n }, dontrefresh?: boolean) => void;\r\n setFilters: (filters: Array<{\r\n field: string,\r\n columnId?: string,\r\n match: (item: T, field: string) => boolean, combine?: \"or\" | \"and\"\r\n }>, dontrefresh?: boolean) => void;\r\n getFilters: () => Array<{\r\n field: string,\r\n columnId?: string,\r\n match: (item: T, field: string) => boolean, combine?: \"or\" | \"and\"\r\n }>;\r\n clearFilter: (field?: string, dontrefresh?: boolean) => void;\r\n refreshFilters: (refreshFilters?: boolean) => void;\r\n getSelectedItems: () => T[];\r\n onAfterEdit: ISlickEvent<{\r\n grid: IJSLGrid<T>,\r\n oldValue: any,\r\n newValue: any,\r\n column: ISlickColumn,\r\n item: T\r\n }>;\r\n onAfterFillDown: ISlickEvent<{\r\n grid: IJSLGrid<T>,\r\n items: T[],\r\n direction: \"up\" | \"down\",\r\n range: any,\r\n column: ISlickColumn,\r\n value: any\r\n }>;\r\n onFiltersChanged: ISlickEvent<void>;\r\n getHeaderMenu: () => any;\r\n getFilterDialog: () => any;\r\n}\r\n\r\nconst $ = jQueryReplacement;\r\n\r\nexport function createJSLGrid<T>(selector: string | HTMLDivElement, data: T[],\r\n columns: ISlickColumn[], option: ISlickCreatorOptions): IJSLGrid<T> {\r\n\r\n const formulaObjects:\r\n Array<{\r\n column: string;\r\n fnc: (item: any, creator: IJSLGrid<any>, field: string) => any\r\n }> = [];\r\n\r\n let headerMenu;\r\n let headerButtons;\r\n\r\n const formulas = {};\r\n\r\n let container: HTMLDivElement;\r\n\r\n let filters: Array<{ field: string, columnId?: string, match: (item: T, field: string) => boolean, combine?: \"or\" | \"and\" }> = [];\r\n\r\n let customCommandHandler;\r\n\r\n let grid: IJSLGrid<T>;\r\n let dataView: ISlickDataView<T>;\r\n\r\n //let options: ISlickCreatorOptions;\r\n\r\n function createMe() {\r\n\r\n sanitizeColumns(columns);\r\n const options: ISlickCreatorOptions = $.shallowExtend({ explicitInitialization: true, mode: \"client\" }, option);\r\n\r\n container = typeof (selector) === \"string\" ?\r\n document.querySelector(selector) as HTMLDivElement :\r\n selector as HTMLDivElement;\r\n\r\n if (!container) {\r\n throw new Error(\"error: selector for SlickCreator is invalid\");\r\n }\r\n\r\n if (options.showColumnGroups) {\r\n options.createPreHeaderPanel = true;\r\n options.showPreHeaderPanel = true;\r\n }\r\n\r\n customCommandHandler = option.editCommandHandler;\r\n options.editCommandHandler = (a, b, c) => { handleEditCommand(a, b, c); };\r\n\r\n const groupItemMetadataProvider = options.groupItemMetadataProvider || GroupItemMetadataProvider(options.groupItemOptions);\r\n if (options.dataView != null) {\r\n dataView = options.dataView;\r\n } else {\r\n dataView = new DataView({ inlineFilters: true, groupItemMetadataProvider });\r\n dataView.setItems(data, options.primaryKey);\r\n }\r\n grid = new SlickGrid(container, dataView, columns, options);\r\n grid.registerPlugin(groupItemMetadataProvider);\r\n grid.setSelectionModel(new RowSelectionModel());\r\n\r\n grid.onHeaderCellRendered.subscribe((e, args) => {\r\n if (columnHasFilter(args.column.id)) {\r\n //this column is filtered\r\n args.node.classList.add(\"slick-filtered-header\");\r\n }\r\n });\r\n\r\n addCustomEvents();\r\n setupDefaultSort();\r\n setupChangeEvents();\r\n if (options.showHeaderMenu) {\r\n setupHeaderMenu();\r\n }\r\n setupHeaderButtons();\r\n\r\n if (options.allowRowMove) {\r\n\r\n const rowMovePlugin = new RowMoveManager({\r\n cancelEditOnDrag: true,\r\n singleRowMove: true,\r\n disableRowSelection: true,\r\n hideRowMoveShadow: false, // defaults to true\r\n rowMoveShadowScale: 0.7, // defaults to 0.75\r\n rowMoveShadowOpacity: 0.9 // defaults to 0.95\r\n\r\n });\r\n grid.registerPlugin(rowMovePlugin);\r\n\r\n rowMovePlugin.onBeforeMoveRows.subscribe(function (e, args) {\r\n // debugger;\r\n });\r\n\r\n\r\n rowMovePlugin.onMoveRows.subscribe(function (e, args) {\r\n var extractedRows = [], left, right;\r\n var rows = args.rows;\r\n var insertBefore = args.insertBefore;\r\n left = data.slice(0, insertBefore);\r\n right = data.slice(insertBefore, data.length);\r\n\r\n rows.sort(function (a, b) { return a - b; });\r\n\r\n for (var i = 0; i < rows.length; i++) {\r\n extractedRows.push(data[rows[i]]);\r\n }\r\n\r\n rows.reverse();\r\n\r\n for (var i = 0; i < rows.length; i++) {\r\n var row = rows[i];\r\n if (row < insertBefore) {\r\n left.splice(row, 1);\r\n } else {\r\n right.splice(row - insertBefore, 1);\r\n }\r\n }\r\n\r\n data = left.concat(extractedRows.concat(right));\r\n\r\n var selectedRows = [];\r\n for (var i = 0; i < rows.length; i++)\r\n selectedRows.push(left.length + i);\r\n\r\n // grid.resetActiveCell();\r\n dataView.beginUpdate();\r\n dataView.setItems(data);\r\n dataView.endUpdate();\r\n grid.render();\r\n });\r\n\r\n\r\n }\r\n\r\n\r\n if (option.enableFillDown) {\r\n\r\n var overlayPlugin = new Overlays({});\r\n\r\n // Event fires when a range is selected\r\n overlayPlugin.onFillUpDown.subscribe(function (e, args) {\r\n const column = grid.getColumns()[args.range.fromCell];\r\n\r\n // Ensure the column is editable\r\n if (column.editor == null || column.readonly || !grid.getOptions().editable) {\r\n return;\r\n }\r\n\r\n // Find the initial value\r\n\r\n dataView.beginUpdate();\r\n let value;\r\n const items = [];\r\n if (args.direction === \"down\") {\r\n const item = dataView.getItem(args.range.fromRow);\r\n value = grid.getDataItemValueForColumn(item, column); // item[column.field];\r\n // Copy the value down\r\n for (let i = args.range.fromRow + 1; i <= args.range.toRow; i++) {\r\n if (grid.onBeforeEditCell.notify({ row: i, cell: args.range.fromCell, item: dataView.getItem(i), column }, e) !== false) {\r\n const currentItem = dataView.getItem(i);\r\n items.push(currentItem);\r\n // if (options.setDataItemValueForColumn != null) {\r\n // options.setDataItemValueForColumn(currentItem, column, value);\r\n // } else {\r\n // dataView.getItem(i)[column.field] = value;\r\n // }\r\n // grid.invalidateRow(i);\r\n // grid.onAfterEdit.notify({ grid, oldValue, newValue: value, column, item: dataView.getItem(i) }, e);\r\n }\r\n }\r\n } else {\r\n const item = dataView.getItem(args.range.toRow);\r\n items.push(item);\r\n value = grid.getDataItemValueForColumn(item, column); // item[column.field];\r\n // Copy the value up\r\n for (let i = args.range.fromRow; i <= args.range.toRow - 1; i++) {\r\n if (grid.onBeforeEditCell.notify({ row: i, cell: args.range.fromCell, item: dataView.getItem(i), column }, e) !== false) {\r\n const currentItem = dataView.getItem(i);\r\n items.push(currentItem);\r\n // if (options.setDataItemValueForColumn != null) {\r\n // options.setDataItemValueForColumn(currentItem, column, value);\r\n // } else {\r\n // dataView.getItem(i)[column.field] = value;\r\n // }\r\n // grid.invalidateRow(i);\r\n // grid.onAfterEdit.notify({ grid, oldValue, newValue: value, column, item: dataView.getItem(i) }, e);\r\n }\r\n }\r\n }\r\n \r\n grid.onAfterFillDown.notify({grid, value, column, direction: args.direction, range: args.range, items: items}, e);\r\n\r\n dataView.endUpdate();\r\n grid.render();\r\n });\r\n\r\n grid.registerPlugin(overlayPlugin);\r\n }\r\n\r\n\r\n if (!option.explicitInitialization) {\r\n grid.init();\r\n }\r\n\r\n if (options.showColumnGroups) {\r\n setTimeout(() => {\r\n // TODO -> find better solution then timeout\r\n grid.onColumnsResized.subscribe(() => {\r\n CreateColumnGroups();\r\n });\r\n CreateColumnGroups();\r\n }, 1);\r\n }\r\n\r\n if (options.saveColumnsKey) {\r\n grid.onColumnsResized.subscribe(() => {\r\n storeColumnSettings();\r\n });\r\n grid.onColumnsReordered.subscribe(() => {\r\n storeColumnSettings();\r\n });\r\n loadColumnSettings();\r\n }\r\n\r\n }\r\n\r\n function CreateColumnGroups() {\r\n const options = grid.getOptions() as ISlickCreatorOptions;\r\n const columns = grid.getColumns();\r\n if (options.frozenColumn >= 0) {\r\n // Add column groups to left panel\r\n let $preHeaderPanel = $(grid.getPreHeaderPanel());\r\n renderHeaderGroups($preHeaderPanel, 0, options.frozenColumn + 1);\r\n // Add column groups to right panel\r\n $preHeaderPanel = $(grid.getPreHeaderPanelRight());\r\n renderHeaderGroups($preHeaderPanel, options.frozenColumn + 1, columns.length);\r\n } else {\r\n const $preHeaderPanel = $(grid.getPreHeaderPanel());\r\n renderHeaderGroups($preHeaderPanel, 0, columns.length);\r\n }\r\n\r\n function renderHeaderGroups(preHeaderPanel, start, end) {\r\n preHeaderPanel.empty()\r\n .addClass(\"slick-header-columns\")\r\n .css(\"left\", \"-1000px\")\r\n .width(grid.getHeadersWidth());\r\n preHeaderPanel[0].parentElement.classList.add(\"slick-header\");\r\n\r\n const headerColumnWidthDiff = grid.getHeaderColumnWidthDiff();\r\n let header;\r\n let lastColumnGroup = \"\";\r\n let widthTotal = 0;\r\n\r\n for (let i = start; i < end; i++) {\r\n const m = columns[i];\r\n if (lastColumnGroup === m.columnGroup && i > start) {\r\n widthTotal += m.width;\r\n header.width(widthTotal - headerColumnWidthDiff);\r\n } else {\r\n widthTotal = m.width;\r\n header = (($(\"<div class='ui-state-default slick-header-column' />\")\r\n .html(\"<span class='slick-column-name'>\" + (m.columnGroup || '') + \"</span>\") as IjQueryWrapper)\r\n .width(m.width - headerColumnWidthDiff) as IjQueryWrapper)\r\n .appendTo(preHeaderPanel);\r\n }\r\n lastColumnGroup = m.columnGroup;\r\n }\r\n }\r\n\r\n }\r\n\r\n function storeColumnSettings() {\r\n const cols = grid.getColumns();\r\n const options = grid.getOptions() as ISlickCreatorOptions;\r\n const colSettings = cols.map((c) => ({ id: c.id, width: c.width }));\r\n if (window.localStorage) {\r\n localStorage.setItem(\"_grid_col_settings_\" + options.saveColumnsKey, JSON.stringify(colSettings));\r\n }\r\n }\r\n\r\n function loadColumnSettings() {\r\n if (!window.localStorage) {\r\n return;\r\n }\r\n const options = grid.getOptions() as ISlickCreatorOptions;\r\n const key = options.saveColumnsKey;\r\n if (key) {\r\n const cols = grid.getColumns();\r\n const colSettings = JSON.parse(localStorage.getItem(\"_grid_col_settings_\" + key));\r\n if (!colSettings) {\r\n return;\r\n }\r\n for (let i = 0; i < colSettings.length; i++) {\r\n for (let j = 0; j < cols.length; j++) {\r\n if (cols[j].id === colSettings[i].id) {\r\n const c = cols[j];\r\n c.width = colSettings[i].width;\r\n if (i !== j) {\r\n cols.splice(j, 1);\r\n cols.splice(i, 0, c);\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n grid.setColumns(cols);\r\n }\r\n }\r\n\r\n function sanitizeColumns(cols: ISlickColumn[]) {\r\n for (let i = 0; i < cols.length; i++) {\r\n const c = cols[i];\r\n if (c.field === undefined && c.id) {\r\n c.field = c.id;\r\n }\r\n }\r\n }\r\n\r\n function addCustomEvents() {\r\n (grid as any).onAfterEdit = new Slick.Event();\r\n (grid as any).onFiltersChanged = new Slick.Event();\r\n (grid as any).onAfterFillDown = new Slick.Event();\r\n }\r\n\r\n function setupChangeEvents() {\r\n dataView.onRowsChanged.subscribe((e, args) => {\r\n grid.invalidateRows(args.rows);\r\n grid.render();\r\n // for (let idx = 0; idx < args.rows.length; idx++) {\r\n // grid.updateRow(args.rows[idx]);\r\n // }\r\n // grid.invalidate();\r\n });\r\n\r\n dataView.onRowCountChanged.subscribe((e, args) => {\r\n grid.updateRowCount();\r\n grid.render();\r\n });\r\n\r\n grid.onAddNewRow.subscribe((e, args) => {\r\n const options = grid.getOptions() as ISlickCreatorOptions;\r\n if (options.provideDefaultValues != null) {\r\n const result = options.provideDefaultValues(args.item);\r\n if (result === false) {\r\n return;\r\n }\r\n }\r\n dataView.addItem(args.item);\r\n (grid as any).onAfterEdit.notify({\r\n grid,\r\n oldValue: undefined,\r\n newValue: grid.getDataItemValueForColumn(args.item, args.column),\r\n column: args.column,\r\n item: args.item\r\n });\r\n });\r\n }\r\n\r\n function setupDefaultSort() {\r\n const options = grid.getOptions() as ISlickCreatorOptions;\r\n if (options.mode === \"client\") {\r\n grid.onSort.subscribe((e, args) => {\r\n sort(args.sortCol, args.sortAsc);\r\n });\r\n }\r\n // TODO: multi column sort\r\n }\r\n\r\n function setupHeaderButtons() {\r\n headerButtons = new HeaderButtons({});\r\n grid.registerPlugin(headerButtons);\r\n }\r\n\r\n function setupHeaderMenu() {\r\n headerMenu = new HeaderMenu({});\r\n grid.registerPlugin(headerMenu);\r\n headerMenu.onBeforeMenuShow.subscribe((e, args) => {\r\n const column: ISlickColumn = args.column;\r\n const menu = args.menu;\r\n if (column.sortable) {\r\n menu.items.push({\r\n title: UILang.grid.Sort + \" \" + UILang.grid.Asc,\r\n command: \"sort-asc\"\r\n });\r\n menu.items.push({\r\n title: UILang.grid.Sort + \" \" + UILang.grid.Desc,\r\n command: \"sort-desc\"\r\n });\r\n }\r\n if (column.filterable) {\r\n menu.items.push({\r\n title: UILang.grid.Filter,\r\n command: \"filter\"\r\n });\r\n if (filters.filter((f) => f.columnId === column.id).length > 0) {\r\n menu.items.push({\r\n title: UILang.grid.ClearFilter,\r\n command: \"clear-filter\"\r\n });\r\n }\r\n }\r\n });\r\n\r\n headerMenu.onCommand.subscribe((e, args) => {\r\n if (args.command === \"sort-asc\" || args.command === \"sort-desc\") {\r\n grid.onSort.notify({\r\n sortAsc: args.command === \"sort-asc\",\r\n sortCol: args.column,\r\n columnId: args.column.id,\r\n sortCols: [{ columnId: args.column.id, sortCol: args.column, sortAsc: args.command === \"sort-asc\" }],\r\n multiColumnSort: false\r\n }, e);\r\n // sort(args.column, args.command === \"sort-asc\");\r\n } else if (args.command === \"filter\") {\r\n const options = grid.getOptions() as ISlickCreatorOptions;\r\n if (options.showFilterDialog != null) {\r\n options.showFilterDialog(args.column, grid);\r\n } else {\r\n new ExcelFilter(grid).show(args.column);\r\n }\r\n } else if (args.command === \"clear-filter\") {\r\n clearFilter(args.column.id);\r\n }\r\n });\r\n\r\n }\r\n\r\n // refresh formulas depending on the given column\r\n function triggerFormula(column, item): void {\r\n const options = grid.getOptions() as ISlickCreatorOptions;\r\n const f = formulas[column];\r\n if (f) {\r\n for (let i = 0, l = f.length; i < l; i++) {\r\n if (options.setDataItemValueForColumn != null) {\r\n options.setDataItemValueForColumn(item, f[i].column, f[i].fnc(item, column));\r\n } else {\r\n item[f[i].column] = f[i].fnc(item, column);\r\n }\r\n }\r\n }\r\n }\r\n\r\n function handleEditCommand(item, column, editCommand) {\r\n const options = grid.getOptions() as ISlickCreatorOptions;\r\n const oldVal = grid.getDataItemValueForColumn(item, column);\r\n if (customCommandHandler) {\r\n customCommandHandler(item, column, editCommand);\r\n } else {\r\n editCommand.execute();\r\n }\r\n triggerFormula(column.field, item);\r\n dataView.updateItem(item[options.primaryKey], item);\r\n\r\n const afterEditResult = (grid as any).onAfterEdit.notify({\r\n grid,\r\n oldValue: oldVal,\r\n newValue: grid.getDataItemValueForColumn(item, column),\r\n column,\r\n item\r\n });\r\n\r\n if (afterEditResult === false) {\r\n if (options.setDataItemValueForColumn != null) {\r\n options.setDataItemValueForColumn(item, column, oldVal);\r\n } else {\r\n item[column.field] = oldVal;\r\n }\r\n triggerFormula(column.field, item);\r\n dataView.updateItem(item[options.primaryKey], item);\r\n }\r\n }\r\n\r\n function setHeight(height: number): void {\r\n $(container).height(height);\r\n grid.resizeCanvas();\r\n }\r\n\r\n function getHeight(): number {\r\n return $(container).height() as number;\r\n }\r\n\r\n function sort(column: ISlickColumn, sortAsc?: boolean) {\r\n\r\n function _comparer(a, b) {\r\n let x = grid.getDataItemValueForColumn(a, column);\r\n let y = grid.getDataItemValueForColumn(b, column);\r\n if (typeof x === \"string\" && typeof y === \"string\") {\r\n x = x.toLocaleLowerCase();\r\n y = y.toLocaleLowerCase();\r\n }\r\n if (x == null && y != null) {\r\n return -1;\r\n } else if (x != null && y == null) {\r\n return 1;\r\n } else {\r\n return (x === y ? 0 : (x > y ? 1 : -1));\r\n }\r\n }\r\n\r\n function _visibleComparer(a, b) {\r\n const x = column.formatter(0, 0, grid.getDataItemValueForColumn(a, column), column, a);\r\n const y = column.formatter(0, 0, grid.getDataItemValueForColumn(b, column), column, b);\r\n let xStr = (Object.prototype.toString.call(x) !== \"[object Object]\" ? (x as string) : (x as ISlickFormatterResult).text);\r\n let yStr = (Object.prototype.toString.call(y) !== \"[object Object]\" ? (y as string) : (y as ISlickFormatterResult).text);\r\n if (typeof x === \"string\" && typeof y === \"string\") {\r\n xStr = x.toLocaleLowerCase();\r\n yStr = y.toLocaleLowerCase();\r\n }\r\n return (xStr === yStr ? 0 : (xStr > yStr ? 1 : -1));\r\n }\r\n\r\n const comparer = column.comparer || (column.sortByVisibleValue ? _visibleComparer : _comparer);\r\n dataView.sort(comparer, sortAsc ? true : false);\r\n }\r\n\r\n function setData(newData: T[]) {\r\n data = newData;\r\n dataView.setItems(data);\r\n refresh();\r\n }\r\n\r\n function getData(): T[] {\r\n return data;\r\n }\r\n\r\n function refreshData() {\r\n // var selrows = self.getSelectedRows();\r\n dataView.setItems(data);\r\n // self.setSelectedRows(selrows);\r\n refresh();\r\n }\r\n\r\n function refresh() {\r\n grid.invalidate();\r\n }\r\n\r\n function addFormula(field: string, fnc: (row: T, grid: IJSLGrid<T>, field: string) => any,\r\n usedColumns: string[]) {\r\n formulaObjects.push({ fnc, column: field });\r\n for (let i = 0; i < usedColumns.length; i++) {\r\n if (!formulas[usedColumns[i]]) {\r\n formulas[usedColumns[i]] = [];\r\n }\r\n formulas[usedColumns[i]].push({ fnc, column: field });\r\n }\r\n }\r\n\r\n /**\r\n * returns the string representation of a value based on column settings\r\n */\r\n function getFormattedValue(column: ISlickColumn, value: any, item?: T): string {\r\n const formatter = column.formatter || TextFormatter;\r\n const formatterResult = formatter(0, 0, value, column, item, grid);\r\n return (Object.prototype.toString.call(formatterResult) !== \"[object Object]\" ?\r\n (formatterResult as string) :\r\n ((formatterResult as ISlickFormatterResult).text));\r\n }\r\n\r\n function getContentWidth(column: ISlickColumn, row: number): number {\r\n const item = dataView.getItem(row);\r\n const html = getFormattedValue(column, grid.getDataItemValueForColumn(item, column), item);\r\n if (html.indexOf(\"<\") >= 0) {\r\n return calcLengthInternal(html, true) + 12;\r\n } else {\r\n if (convertElement == null) {\r\n convertElement = document.createElement(\"span\");\r\n }\r\n convertElement.innerHTML = html;\r\n return calcTextLength(convertElement.textContent) + 12;\r\n }\r\n }\r\n\r\n let measureElement: HTMLSpanElement;\r\n let convertElement: HTMLSpanElement;\r\n const charWidth = {};\r\n\r\n function calcTextLength(text: string) {\r\n let result = 0;\r\n for (let i = 0; i < text.length; i++) {\r\n const c = text[i];\r\n let w = charWidth[c];\r\n if (w == null) {\r\n charWidth[c] = w = calcLengthInternal(c, false);\r\n }\r\n result += w;\r\n }\r\n return result;\r\n }\r\n\r\n function calcLengthInternal(c: string, isHTML: boolean): number {\r\n if (measureElement == null) {\r\n measureElement = document.createElement(\"span\");\r\n measureElement.style.top = \"-100000px\";\r\n measureElement.style.position = \"absolute\";\r\n measureElement.style.whiteSpace = \"pre\";\r\n document.body.appendChild(measureElement);\r\n grid.onBeforeDestroy.subscribe(() => {\r\n if (measureElement.parentElement != null) {\r\n measureElement.parentElement.removeChild(measureElement);\r\n }\r\n });\r\n }\r\n if (isHTML) {\r\n measureElement.innerHTML = c;\r\n } else {\r\n measureElement.textContent = c;\r\n }\r\n\r\n return measureElement.getBoundingClientRect().width;\r\n }\r\n\r\n function fitToContent(column: ISlickColumn): void {\r\n let width = 10;\r\n for (let idx = 0, len = grid.getDataLength(); idx < len; idx++) {\r\n //const d = grid.getDataItem(idx);\r\n width = Math.max(width, getContentWidth(column, idx));\r\n }\r\n column.width = width;\r\n grid.setColumns(grid.getColumns());\r\n // TODO: raise column resize event\r\n // TODO (2): find more performant way to refresh columns\r\n }\r\n\r\n function triggerAllFormulas(): void {\r\n\r\n if (formulaObjects.length === 0) {\r\n return;\r\n }\r\n for (let j = 0; j < formulaObjects.length; j++) {\r\n for (let i = 0; i < data.length; i++) {\r\n const val = formulaObjects[j].fnc(data[i], grid, formulaObjects[j].column);\r\n data[i][formulaObjects[j].column] = val;\r\n }\r\n }\r\n refreshData();\r\n }\r\n\r\n function columnHasFilter(columnId: string): boolean {\r\n for (let i = 0, l = (filters ? filters.length : 0); i < l; i++) {\r\n if (filters[i].columnId === columnId) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n function refreshDataItem(item: T): void {\r\n const options = grid.getOptions() as ISlickCreatorOptions;\r\n dataView.updateItem(item[options.primaryKey], item);\r\n // formula refresh\r\n for (const f in formulas) {\r\n if (formulas.hasOwnProperty(f)) {\r\n triggerFormula(f, item);\r\n }\r\n }\r\n grid.updateRow(dataView.getRowByItem(item));\r\n }\r\n\r\n function addFilter(filter: {\r\n field: string,\r\n columnId?: string,\r\n match: (item: T, field: string) => boolean, combine?: \"or\" | \"and\"\r\n }, dontrefresh?: boolean): void {\r\n let filterArray;\r\n if (Array.isArray(filter)) {\r\n filterArray = filter;\r\n } else {\r\n filterArray = [filter];\r\n }\r\n for (let idx = 0; idx < filterArray.length; idx++) {\r\n // add filter\r\n filters.push(filterArray[idx]);\r\n }\r\n if (!dontrefresh) {\r\n refreshFilters();\r\n }\r\n }\r\n\r\n function setFilters(f: Array<{\r\n field: string,\r\n columnId?: string,\r\n match: (item: T, field: string) => boolean, combine?: \"or\" | \"and\"\r\n }>,\r\n dontrefresh?: boolean): void {\r\n filters = f;\r\n if (!dontrefresh) {\r\n refreshFilters();\r\n }\r\n }\r\n\r\n function getFilters() {\r\n return filters;\r\n }\r\n\r\n function clearFilter(columnId?: string, dontrefresh?: boolean): void {\r\n if (columnId === undefined) { // clear all filters\r\n filters.length = 0;\r\n } else {\r\n for (let i = 0; i < filters.length; i++) {\r\n if (filters[i].columnId === columnId) {\r\n filters.splice(i, 1);\r\n i--;\r\n }\r\n }\r\n }\r\n if (!dontrefresh) {\r\n refreshFilters();\r\n }\r\n }\r\n\r\n function refreshFilters(noColumnHeaderRefresh?: boolean): void {\r\n const options = grid.getOptions() as ISlickCreatorOptions;\r\n\r\n function client_filter(item, args): boolean {\r\n const filterArray = args;\r\n // no filter present -> show all rows\r\n if (filterArray.length === 0) {\r\n return true;\r\n }\r\n\r\n if (filterArray.length === 1) {\r\n return filterArray[0].match.call(null, item, filterArray[0].field);\r\n } else {\r\n let result = true;\r\n let i = 0;\r\n while (i < filterArray.length) {\r\n let orResult = false;\r\n while (i < filterArray.length) { // combine or(s)\r\n if (orResult || filterArray[i].match.call(null, item, filterArray[i].field)) {\r\n orResult = true;\r\n }\r\n if (filterArray[i].combine !== \"or\") {\r\n break;\r\n } else {\r\n i++;\r\n }\r\n }\r\n if (!orResult) {\r\n result = false;\r\n break;\r\n }\r\n i++;\r\n }\r\n return result;\r\n }\r\n }\r\n\r\n if (options.mode === \"client\") {\r\n dataView.setFilterArgs(filters);\r\n dataView.setFilter(client_filter);\r\n }\r\n // redraw columns\r\n if (!noColumnHeaderRefresh) {\r\n grid.setColumns(grid.getColumns());\r\n }\r\n (grid as any).onFiltersChanged.notify();\r\n }\r\n\r\n function getSelectedItems(): T[] {\r\n const selRows = grid.getSelectedRows();\r\n const rows = [];\r\n for (let i = 0; i < selRows.length; i++) {\r\n const rowIdx = selRows[i];\r\n const toPush = dataView.getItem(rowIdx);\r\n if (toPush !== undefined && !(toPush as any).__group && !(toPush as any).__groupTotals) {\r\n rows.push(toPush);\r\n }\r\n }\r\n return rows;\r\n }\r\n\r\n function getHeaderMenu(): any { // TODO -> type\r\n return headerMenu;\r\n }\r\n\r\n // function setHierachy(o: IGridTreeOptions): GridTree {\r\n // return new GridTree(this, o);\r\n // }\r\n\r\n createMe();\r\n\r\n return $.shallowExtend(grid, {\r\n dataView,\r\n setHeight,\r\n getHeight,\r\n sort,\r\n refreshData,\r\n setData,\r\n getData,\r\n refresh,\r\n addFormula,\r\n getFormattedValue,\r\n getContentWidth,\r\n fitToContent,\r\n triggerAllFormulas,\r\n columnHasFilter,\r\n refreshDataItem,\r\n addFilter,\r\n setFilters,\r\n getFilters,\r\n clearFilter,\r\n refreshFilters,\r\n getSelectedItems,\r\n getHeaderMenu // ,\r\n // setHierachy\r\n });\r\n}\r\n","/**\r\n * @license\r\n * (c) 2009-2016 Michael Leibman\r\n * michael{dot}leibman{at}gmail{dot}com\r\n * http://github.com/mleibman/slickgrid\r\n *\r\n * Distributed under MIT license.\r\n * All rights reserved.\r\n *\r\n * SlickGrid v2.4\r\n */\r\n\r\nimport { jQueryReplacement, IjQueryWrapper, IjQueryReplacement } from \"../core/jq\";\r\nimport { Slick, ISlickColumn, ISlickFormatterResult, ISlickFormatter, ISlickEvent } from \"./slick.core\";\r\nimport \"./slick.grid.css\";\r\nimport \"./slick-default-theme.css\";\r\nimport { Resizable } from \"../interaction/resizable\";\r\nimport { EventHandler } from \"../interaction/eventhandler\";\r\n\r\nexport interface ISlickGridOptions {\r\n syncColumnCellResize?: boolean;\r\n alwaysShowVerticalScroll?: boolean;\r\n alwaysShowHorizontalScroll?: boolean;\r\n alwaysAllowHorizontalScroll?: boolean;\r\n explicitInitialization?: boolean;\r\n rowHeight?: number;\r\n defaultColumnWidth?: number;\r\n enableAddRow?: boolean;\r\n leaveSpaceForNewRows?: boolean;\r\n editable?: boolean;\r\n autoEdit?: boolean;\r\n suppressActiveCellChangeOnEdit?: boolean;\r\n enableCellNavigation?: boolean;\r\n enableColumnReorder?: boolean;\r\n asyncEditorLoading?: boolean;\r\n asyncEditorLoadDelay?: number;\r\n forceFitColumns?: boolean;\r\n enableAsyncPostRender?: boolean;\r\n asyncPostRenderDelay?: number;\r\n enableAsyncPostRenderCleanup?: boolean;\r\n asyncPostRenderCleanupDelay?: number;\r\n autoHeight?: boolean;\r\n editorLock?: any;\r\n showHeaderRow?: boolean;\r\n headerRowHeight?: number;\r\n createFooterRow?: boolean;\r\n showFooterRow?: boolean;\r\n footerRowHeight?: number;\r\n createPreHeaderPanel?: boolean;\r\n showPreHeaderPanel?: boolean;\r\n preHeaderPanelHeight?: number;\r\n showTopPanel?: boolean;\r\n topPanelHeight?: number;\r\n formatterFactory?: { getFormatter: (column: ISlickColumn, row?: number) => ISlickFormatter };\r\n editorFactory?: { getEditor: (column: ISlickColumn, row?: number) => any };\r\n cellFlashingCssClass?: string;\r\n selectedCellCssClass?: string;\r\n multiSelect?: boolean;\r\n enableTextSelectionOnCells?: boolean;\r\n dataItemColumnValueExtractor?: (item: any, columnDef: ISlickColumn) => any;\r\n frozenBottom?: boolean;\r\n frozenColumn?: number;\r\n frozenRow?: number;\r\n fullWidthRows?: boolean;\r\n multiColumnSort?: boolean;\r\n numberedMultiColumnSort?: boolean;\r\n tristateMultiColumnSort?: boolean;\r\n sortColNumberInSeparateSpan?: boolean;\r\n defaultFormatter?: ISlickFormatter;\r\n forceSyncScrolling?: boolean;\r\n addNewRowCssClass?: string;\r\n preserveCopiedSelectionOnPaste?: boolean;\r\n showCellSelection?: boolean;\r\n viewportClass?: string;\r\n minRowBuffer?: number;\r\n emulatePagingWhenScrolling?: boolean;\r\n editorCellNavOnLRKeys?: boolean;\r\n doPaging?: boolean;\r\n resizeHandleWidth?: string;\r\n variableRowHeight?: boolean;\r\n editCommandHandler?: (item: any, column: ISlickColumn, editCommand: any) => void;\r\n resizeDelta?: number;\r\n dragDelta?: number;\r\n}\r\n\r\ninterface ICacheEntry {\r\n rowNode?: HTMLElement[];\r\n\r\n // colSpans of rendered cells (by column idx).\r\n // can also be used for checking whether a cell has been rendered.\r\n cellColSpans: number[];\r\n\r\n // cell nodes (by column idx). Lazy-populated by ensureCellNodesInRowsCache().\r\n cellNodesByColumnIdx: HTMLElement[];\r\n\r\n // column indices of cell nodes that have been rendered, but not yet indexed in\r\n // cellNodesByColumnIdx. These are in the same order as cell nodes added at the\r\n // end of the row.\r\n cellRenderQueue: number[];\r\n}\r\n\r\nexport interface ISlickGrid<T> {\r\n \"slickGridVersion\": string;\r\n\r\n /* events */\r\n \"onScroll\": ISlickEvent<{ scrollLeft: number, scrollTop: number }>;\r\n \"onSort\": ISlickEvent<{\r\n multiColumnSort: boolean,\r\n columnId?: string,\r\n sortCol?: ISlickColumn,\r\n sortAsc?: boolean,\r\n sortCols?: Array<{\r\n columnId?: string,\r\n sortCol?: ISlickColumn\r\n sortAsc?: boolean\r\n }>\r\n }>;\r\n \"onAppendRow\": ISlickEvent<{ row: number, item: T }>;\r\n \"onBeforeRemoveRow\": ISlickEvent<{ row: number, dom: HTMLDivElement }>;\r\n \"onClick\": ISlickEvent<{ row: number, cell: number }>;\r\n \"onDblClick\": ISlickEvent<{ row: number, cell: number }>;\r\n \"onColumnsResized\": ISlickEvent<{cell: number, width: number, previousWidth: number, column: ISlickColumn}[]>;\r\n \"onAppendCell\": ISlickEvent<{ row: number, cell: number, value: any, item: T, column: ISlickColumn, dom: HTMLDivElement }>;\r\n \"onCellChange\": ISlickEvent<{ row: number, cell: number, item: T, value: any }>;\r\n \"onAddNewRow\": ISlickEvent<{ item: T, column: ISlickColumn }>;\r\n \"onHeaderRowCellRendered\": ISlickEvent<{ node: HTMLElement, column: ISlickColumn, grid: ISlickGrid<T> }>;\r\n \"onFooterRowCellRendered\": ISlickEvent<{ node: HTMLElement, column: ISlickColumn, grid: ISlickGrid<T> }>;\r\n \"onHeaderCellRendered\": ISlickEvent<{ node: HTMLElement, column: ISlickColumn, grid: ISlickGrid<T> }>;\r\n \"onBeforeEditCell\": ISlickEvent<{ row: number, cell: number, item: T, column: ISlickColumn }>;\r\n \"onSelectedRowsChanged\": ISlickEvent<{ rows: number[] }>;\r\n \"onBeforeDestroy\": ISlickEvent<any>;\r\n \"onColumnsReordered\": ISlickEvent<any>;\r\n \"onViewportChanged\": ISlickEvent<any>;\r\n \"onActiveCellChanged\": ISlickEvent<{ row: number, cell: number }>;\r\n \"onDragInit\": ISlickEvent<any>;\r\n \"onDragStart\": ISlickEvent<any>;\r\n \"onDrag\": ISlickEvent<any>;\r\n \"onDragEnd\": ISlickEvent<any>;\r\n\r\n\r\n /* methods */\r\n \"registerPlugin\": (plugin) => void;\r\n \"init\": () => void;\r\n \"resizeCanvas\": () => void;\r\n \"invalidate\": () => void;\r\n \"invalidateAllRows\": () => void;\r\n \"updateRow\": (row: number) => void;\r\n \"getColumns\": () => ISlickColumn[];\r\n \"setColumns\": (columns: ISlickColumn[]) => void;\r\n \"getSelectedRows\": () => number[];\r\n \"setSelectedRows\": (rows: number[]) => void;\r\n \"invalidateRows\": (rows: number[]) => void;\r\n \"render\": () => void;\r\n \"updateRowCount\": () => void;\r\n \"getColumnIndex\": (columnId: string) => number;\r\n \"scrollRowIntoView\": (row: number, doPaging?: boolean) => void;\r\n \"flashCell\": (row: number, cell: number, speed?: number, times?: number) => void;\r\n \"getActiveCell\": () => { row: number, cell: number };\r\n \"setActiveCell\": (row: number, cell: number, opt_editMode?: boolean,\r\n preClickModeOn?: boolean, suppressActiveCellChangedEvent?: boolean) => void;\r\n \"gotoCell\": (row: number, cell: number, forceEdit?: boolean, e?: any) => void;\r\n \"destroy\": () => void;\r\n \"getColumnById\": (id: string) => ISlickColumn;\r\n \"getHeaderColumnWidthDiff\": () => number;\r\n \"getPreHeaderPanel\": () => HTMLDivElement;\r\n \"getPreHeaderPanelRight\": () => HTMLDivElement;\r\n \"getHeadersWidth\": () => number;\r\n \"getViewportNode\": () => HTMLDivElement;\r\n \"updateColumnHeader\": (columnId: string, title: string, toolTip: string) => void;\r\n \"setSortColumn\": (columnId: string, ascending?: boolean) => void;\r\n \"setSortColumns\": (columns: Array<{ columnId: string, ascending?: boolean }>) => void;\r\n \"getSortColumns\": () => Array<{ columnId: string, ascending?: boolean }>;\r\n \"autosizeColumns\": () => void;\r\n \"setOptions\": (args: ISlickGridOptions, supressRender?: boolean) => void;\r\n \"getOptions\": () => ISlickGridOptions;\r\n \"scrollRowToTop\": (row: number) => void;\r\n \"scrollCellIntoView\": (row: number, cell: number, doPaging?: boolean) => void;\r\n \"scrollColumnIntoView\": (cell: number) => void;\r\n \"getCellFromPoint\": (x: number, y: number) => { row: number, cell: number };\r\n \"getCellFromEvent\": (e: any, dd: any) => { row: number, cell: number };\r\n \"getActiveCellNode\": () => HTMLElement;\r\n // \"unregisterPlugin\": unregisterPlugin,\r\n // \"getPluginByName\": getPluginByName,\r\n \"getDataLength\": () => number;\r\n \"getDataItem\": (idx: number) => T;\r\n \"getSelectionModel\": () => any; // TODO\r\n \"setSelectionModel\": (model: any) => void; // TODO\r\n \"getContainerNode\": () => HTMLDivElement;\r\n \"getDataItemValueForColumn\": (item: T, columnDef: ISlickColumn) => any;\r\n \"getViewport\": (viewPortTop?: number, viewPortLeft?: number) => { top: number, bottom: number, leftPx: number, rightPx: number };\r\n \"getRenderedRange\": (viewportTop?: number, viewportLeft?: number) => { top: number, bottom: number, leftPx: number, rightPx: number };\r\n \"getEditController\": () => { commitCurrentEdit: () => boolean, cancelCurrentEdit: () => boolean };\r\n\r\n // // Events\r\n // \"onHeaderContextMenu\": new Slick.Event(),\r\n // \"onHeaderClick\": new Slick.Event(),\r\n // ,\r\n // \"onBeforeHeaderCellDestroy\": new Slick.Event(),\r\n // \"onBeforeHeaderRowCellDestroy\": new Slick.Event(),\r\n // \"onBeforeFooterRowCellDestroy\": new Slick.Event(),\r\n // \"onMouseEnter\": new Slick.Event(),\r\n // \"onMouseLeave\": new Slick.Event(),\r\n // \"onContextMenu\": new Slick.Event(),\r\n // \"onKeyDown\": new Slick.Event(),\r\n // \"onValidationError\": new Slick.Event(),\r\n // ,\r\n // \"onBeforeCellEditorDestroy\": new Slick.Event(),\r\n // \r\n // \"onActiveCellPositionChanged\": new Slick.Event(),\r\n // \"onDragInit\": new Slick.Event(),\r\n // \"onDragStart\": new Slick.Event(),\r\n // \"onDrag\": new Slick.Event(),\r\n // \"onDragEnd\": new Slick.Event(),\r\n // \"onCellCssStylesChanged\": new Slick.Event(),\r\n // \"onAutosizeColumns\": new Slick.Event(),\r\n // \"onRendered\": new Slick.Event(),\r\n\r\n // // Methods\r\n // \"setData\": setData,\r\n // \"getData\": getData,\r\n\r\n // \"updatePagingStatusFromView\": updatePagingStatusFromView,\r\n // \"applyFormatResultToCellNode\": applyFormatResultToCellNode,\r\n\r\n \"invalidateRow\": (row: number) => void;\r\n // \"invalidateAllRows\": invalidateAllRows,\r\n // \"updateCell\": updateCell,\r\n // \"updateRow\": updateRow,\r\n\r\n \"getCanvasNode\": (columnIdOrIdx?: number, rowIndex?: number) => HTMLElement;\r\n // \"getUID\": getUID,\r\n //\r\n // \"getScrollbarDimensions\": getScrollbarDimensions,\r\n // ,\r\n // \"getCanvasWidth\": getCanvasWidth,\r\n // \"getCanvases\": getCanvases,\r\n // \"getActiveCanvasNode\": getActiveCanvasNode,\r\n // \"setActiveCanvasNode\": setActiveCanvasNode,\r\n // \"getActiveViewportNode\": getActiveViewportNode,\r\n // \"setActiveViewportNode\": setActiveViewportNode,\r\n \"focus\": () => void;\r\n // \"scrollTo\": scrollTo,\r\n\r\n \"getActiveCellPosition\": () => { top: number,\r\n left: number,\r\n bottom: number,\r\n right: number,\r\n width: number,\r\n height: number,\r\n visible: boolean};\r\n \"resetActiveCell\": () => void;\r\n // \"editActiveCell\": makeActiveCellEditable,\r\n // \"getCellEditor\": getCellEditor,\r\n // \"getCellNode\": getCellNode,\r\n \"getCellNodeBox\": (row: number, cell: number) => {bottom: number, left: number, top: number, right: number, height: number, width: number};\r\n \"canCellBeSelected\": (row: number, cell: number) => boolean;\r\n // \"canCellBeActive\": canCellBeActive,\r\n // \"navigatePrev\": navigatePrev,\r\n // \"navigateNext\": navigateNext,\r\n // \"navigateUp\": navigateUp,\r\n // \"navigateDown\": navigateDown,\r\n // \"navigateLeft\": navigateLeft,\r\n // \"navigateRight\": navigateRight,\r\n // \"navigatePageUp\": navigatePageUp,\r\n // \"navigatePageDown\": navigatePageDown,\r\n // \"navigateTop\": navigateTop,\r\n // \"navigateBottom\": navigateBottom,\r\n // \"navigateRowStart\": navigateRowStart,\r\n // \"navigateRowEnd\": navigateRowEnd,\r\n // \"getTopPanel\": getTopPanel,\r\n // \"setTopPanelVisibility\": setTopPanelVisibility,\r\n //\r\n // \"setPreHeaderPanelVisibility\": setPreHeaderPanelVisibility,\r\n // \"getHeader\": getHeader,\r\n // \"getHeaderColumn\": getHeaderColumn,\r\n // \"setHeaderRowVisibility\": setHeaderRowVisibility,\r\n // \"getHeaderRow\": getHeaderRow,\r\n // \"getHeaderRowColumn\": getHeaderRowColumn,\r\n // \"setFooterRowVisibility\": setFooterRowVisibility,\r\n // \"getFooterRow\": getFooterRow,\r\n // \"getFooterRowColumn\": getFooterRowColumn,\r\n \"getGridPosition\": () => { top: number,\r\n left: number,\r\n bottom: number,\r\n right: number,\r\n width: number,\r\n height: number,\r\n visible: boolean};\r\n // \"addCellCssStyles\": addCellCssStyles,\r\n // \"setCellCssStyles\": setCellCssStyles,\r\n // \"removeCellCssStyles\": removeCellCssStyles,\r\n // \"getCellCssStyles\": getCellCssStyles,\r\n // \"getFrozenRowOffset\": getFrozenRowOffset,\r\n\r\n // // IEditor implementation\r\n // \"getEditorLock\": getEditorLock\r\n}\r\n\r\nlet $: IjQueryReplacement = Slick.$;\r\n\r\n$.deepExtend(Slick, { Grid: SlickGrid });\r\n\r\n// shared across all grids on the page\r\nvar scrollbarDimensions;\r\nvar maxSupportedCssHeight; // = 500000; // browser's breaking point\r\n\r\n\r\nexport function SlickGrid(container: HTMLDivElement | string, data, columns: ISlickColumn[], options: ISlickGridOptions) {\r\n // settings\r\n var defaults: ISlickGridOptions = {\r\n // syncColumnCellResize: true, // TODO: remove this option\r\n alwaysShowVerticalScroll: false,\r\n alwaysShowHorizontalScroll: false,\r\n alwaysAllowHorizontalScroll: false,\r\n explicitInitialization: false,\r\n rowHeight: 28,\r\n defaultColumnWidth: 80,\r\n enableAddRow: false,\r\n leaveSpaceForNewRows: false,\r\n editable: false,\r\n autoEdit: true,\r\n suppressActiveCellChangeOnEdit: false,\r\n enableCellNavigation: true,\r\n enableColumnReorder: true,\r\n asyncEditorLoading: false,\r\n asyncEditorLoadDelay: 100,\r\n forceFitColumns: false,\r\n enableAsyncPostRender: false,\r\n asyncPostRenderDelay: 50,\r\n enableAsyncPostRenderCleanup: false,\r\n asyncPostRenderCleanupDelay: 40,\r\n autoHeight: false,\r\n editorLock: Slick.GlobalEditorLock,\r\n showHeaderRow: false,\r\n headerRowHeight: 28,\r\n createFooterRow: false,\r\n showFooterRow: false,\r\n footerRowHeight: 28,\r\n createPreHeaderPanel: false,\r\n showPreHeaderPanel: false,\r\n preHeaderPanelHeight: 28,\r\n showTopPanel: false,\r\n topPanelHeight: 28,\r\n formatterFactory: null,\r\n editorFactory: null,\r\n cellFlashingCssClass: \"flashing\",\r\n selectedCellCssClass: \"selected\",\r\n multiSelect: true,\r\n enableTextSelectionOnCells: false,\r\n dataItemColumnValueExtractor: null,\r\n frozenBottom: false,\r\n frozenColumn: -1,\r\n frozenRow: -1,\r\n fullWidthRows: false,\r\n multiColumnSort: false,\r\n numberedMultiColumnSort: false,\r\n tristateMultiColumnSort: false,\r\n sortColNumberInSeparateSpan: false,\r\n defaultFormatter: defaultFormatter,\r\n forceSyncScrolling: false,\r\n addNewRowCssClass: \"new-row\",\r\n preserveCopiedSelectionOnPaste: false,\r\n showCellSelection: true,\r\n viewportClass: null,\r\n minRowBuffer: 3,\r\n emulatePagingWhenScrolling: true, // when scrolling off bottom of viewport, place new row at top of viewport\r\n editorCellNavOnLRKeys: false, // TODO: change to true per default?\r\n doPaging: true,\r\n resizeDelta: 2, // NEW\r\n dragDelta: 3, // NEW\r\n };\r\n\r\n var columnDefaults = {\r\n name: \"\",\r\n resizable: true,\r\n sortable: false,\r\n minWidth: 30,\r\n width: undefined,\r\n rerenderOnResize: false,\r\n headerCssClass: null,\r\n defaultSortAsc: true,\r\n focusable: true,\r\n selectable: true\r\n };\r\n\r\n // scroller\r\n var th; // virtual height\r\n var h; // real scrollable height\r\n var ph; // page height\r\n var n; // number of pages\r\n var cj; // \"jumpiness\" coefficient\r\n\r\n var page = 0; // current page\r\n var offset = 0; // current page offset\r\n var vScrollDir = 1;\r\n // var programmaticScrollingTimeout;\r\n\r\n // private\r\n var initialized = false;\r\n var $container: IjQueryWrapper;\r\n var uid = \"slickgrid_\" + Math.round(1000000 * Math.random());\r\n var self = this;\r\n var $focusSink: IjQueryWrapper, $focusSink2: IjQueryWrapper;\r\n var $groupHeaders: IjQueryWrapper = $();\r\n var $headerScroller: IjQueryWrapper;\r\n var $headers: IjQueryWrapper;\r\n var $headerRow: IjQueryWrapper, $headerRowScroller: IjQueryWrapper, $headerRowSpacerL: IjQueryWrapper, $headerRowSpacerR: IjQueryWrapper;\r\n var $footerRow: IjQueryWrapper, $footerRowScroller: IjQueryWrapper, $footerRowSpacerL: IjQueryWrapper, $footerRowSpacerR: IjQueryWrapper;\r\n var $preHeaderPanel: IjQueryWrapper, $preHeaderPanelScroller: IjQueryWrapper, $preHeaderPanelSpacer: IjQueryWrapper;\r\n var $preHeaderPanelR: IjQueryWrapper, $preHeaderPanelScrollerR: IjQueryWrapper, $preHeaderPanelSpacerR: IjQueryWrapper;\r\n var $topPanelScroller: IjQueryWrapper;\r\n var $topPanel: IjQueryWrapper;\r\n var $viewport: IjQueryWrapper;\r\n var $canvas: IjQueryWrapper;\r\n var $style: IjQueryWrapper;\r\n var $boundAncestors: IjQueryWrapper;\r\n // var treeColumns;\r\n var stylesheet, columnCssRulesL, columnCssRulesR;\r\n var viewportH: number, viewportW: number;\r\n var canvasWidth: number, canvasWidthL: number, canvasWidthR: number;\r\n var headersWidth: number, headersWidthL: number, headersWidthR: number;\r\n var viewportHasHScroll: boolean, viewportHasVScroll: boolean;\r\n var headerColumnWidthDiff = 0, headerColumnHeightDiff = 0, // border+padding\r\n cellWidthDiff = 0, cellHeightDiff = 0, jQueryNewWidthBehaviour = false;\r\n var absoluteColumnMinWidth;\r\n var hasFrozenRows = false;\r\n var frozenRowsHeight = 0;\r\n var actualFrozenRow = -1;\r\n var paneTopH = 0;\r\n var paneBottomH = 0;\r\n var viewportTopH = 0;\r\n var viewportBottomH = 0;\r\n var topPanelH = 0;\r\n var headerRowH = 0;\r\n var footerRowH = 0;\r\n\r\n var tabbingDirection = 1;\r\n var $activeCanvasNode: IjQueryWrapper;\r\n var $activeViewportNode: IjQueryWrapper;\r\n var activePosX;\r\n var activeRow, activeCell;\r\n var activeCellNode: HTMLElement = null;\r\n var currentEditor = null;\r\n var serializedEditorValue;\r\n var editController;\r\n\r\n var rowsCache: { [key: string]: ICacheEntry } = {};\r\n var rowPositionCache = [];\r\n\r\n var renderedRows = 0;\r\n var numVisibleRows = 0;\r\n var prevScrollTop = 0;\r\n var scrollTop = 0;\r\n var lastRenderedScrollTop = 0;\r\n var lastRenderedScrollLeft = 0;\r\n var prevScrollLeft = 0;\r\n var scrollLeft = 0;\r\n\r\n var selectionModel;\r\n var selectedRows = [];\r\n\r\n var plugins = [];\r\n var cellCssClasses = {};\r\n\r\n var columnsById = {};\r\n var sortColumns = [];\r\n var columnPosLeft = [];\r\n var columnPosRight = [];\r\n\r\n var pagingActive = false;\r\n var pagingIsLastPage = false;\r\n\r\n var scrollThrottle = ActionThrottle(render, 50);\r\n\r\n // async call handles\r\n var h_editorLoader = null;\r\n var h_render = null;\r\n var h_postrender = null;\r\n var h_postrenderCleanup = null;\r\n var postProcessedRows = {};\r\n var postProcessToRow = null;\r\n var postProcessFromRow = null;\r\n var postProcessedCleanupQueue = [];\r\n var postProcessgroupId = 0;\r\n\r\n var $paneHeaderL: IjQueryWrapper;\r\n var $paneHeaderR: IjQueryWrapper;\r\n var $paneTopL: IjQueryWrapper;\r\n var $paneTopR: IjQueryWrapper;\r\n var $paneBottomL: IjQueryWrapper;\r\n var $paneBottomR: IjQueryWrapper;\r\n\r\n var $headerScrollerL: IjQueryWrapper;\r\n var $headerScrollerR: IjQueryWrapper;\r\n\r\n var $headerL: IjQueryWrapper;\r\n var $headerR: IjQueryWrapper;\r\n\r\n var $groupHeadersL: IjQueryWrapper[];\r\n var $groupHeadersR: IjQueryWrapper[];\r\n\r\n var $headerRowScrollerL: IjQueryWrapper;\r\n var $headerRowScrollerR: IjQueryWrapper;\r\n\r\n var $footerRowScrollerL: IjQueryWrapper;\r\n var $footerRowScrollerR: IjQueryWrapper;\r\n\r\n var $headerRowL: IjQueryWrapper;\r\n var $headerRowR: IjQueryWrapper;\r\n\r\n var $footerRowL: IjQueryWrapper;\r\n var $footerRowR: IjQueryWrapper;\r\n\r\n var $topPanelScrollerL: IjQueryWrapper;\r\n var $topPanelScrollerR: IjQueryWrapper;\r\n\r\n var $topPanelL: IjQueryWrapper;\r\n var $topPanelR: IjQueryWrapper;\r\n\r\n var $viewportTopL: IjQueryWrapper;\r\n var $viewportTopR: IjQueryWrapper;\r\n var $viewportBottomL: IjQueryWrapper;\r\n var $viewportBottomR: IjQueryWrapper;\r\n\r\n var $canvasTopL: IjQueryWrapper;\r\n var $canvasTopR: IjQueryWrapper;\r\n var $canvasBottomL: IjQueryWrapper;\r\n var $canvasBottomR: IjQueryWrapper;\r\n\r\n var $viewportScrollContainerX: IjQueryWrapper;\r\n var $viewportScrollContainerY: IjQueryWrapper;\r\n var $headerScrollContainer: IjQueryWrapper;\r\n var $headerRowScrollContainer: IjQueryWrapper;\r\n var $footerRowScrollContainer: IjQueryWrapper;\r\n\r\n var scrollEventHandler;\r\n\r\n // store css attributes if display:none is active in container or parent\r\n var cssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" };\r\n var $hiddenParents: IjQueryWrapper;\r\n var oldProps = [];\r\n // var columnResizeDragging = false;\r\n // var columnDragging = false;\r\n\r\n //////////////////////////////////////////////////////////////////////////////////////////////\r\n // initialization\r\n\r\n function init() {\r\n $container = $(container);\r\n if ($container.length < 1) {\r\n throw new Error(\"SlickGrid requires a valid container, \" + container + \" does not exist in the DOM.\");\r\n }\r\n\r\n if (options.showFooterRow && !options.createFooterRow) {\r\n throw new Error(\"option showFooterRow requires option createFooterRow to be set\");\r\n }\r\n\r\n cacheCssForHiddenInit();\r\n\r\n // calculate these only once and share between grid instances\r\n maxSupportedCssHeight = maxSupportedCssHeight || getMaxSupportedCssHeight();\r\n\r\n options = $.shallowExtend({}, defaults, options);\r\n validateAndEnforceOptions();\r\n columnDefaults.width = options.defaultColumnWidth;\r\n\r\n // treeColumns = new Slick.TreeColumns(columns);\r\n // columns = treeColumns.extractColumns();\r\n\r\n updateColumnProps();\r\n\r\n //// validate loaded JavaScript modules against requested options\r\n // if (options.enableColumnReorder && !$.fn.sortable) {\r\n // throw new Error(\"SlickGrid's 'enableColumnReorder = true' option requires jquery-ui.sortable module to be loaded\");\r\n // }\r\n\r\n editController = {\r\n \"commitCurrentEdit\": commitCurrentEdit,\r\n \"cancelCurrentEdit\": cancelCurrentEdit\r\n };\r\n\r\n $container\r\n .empty()\r\n .css(\"overflow\", \"hidden\")\r\n .css(\"outline\", 0)\r\n .addClass(uid)\r\n .addClass(\"slickgrid\")\r\n .addClass(\"ui-widget\");\r\n\r\n const isTouch = ((\"ontouchstart\" in window) || ((navigator as any).msMaxTouchPoints > 0));\r\n if (isTouch) {\r\n $container.addClass(\"js-touch\");\r\n }\r\n // $container.addClass(\"js-touch\");\r\n\r\n // set up a positioning container if needed\r\n if (!/relative|absolute|fixed/.test($container.css(\"position\"))) {\r\n $container.css(\"position\", \"relative\");\r\n }\r\n\r\n $focusSink = $(\"<div tabIndex='0' hideFocus style='position:fixed;width:0;height:0;top:0;left:0;outline:0;'></div>\").appendTo($container);\r\n\r\n // containers used for scrolling frozen columns and rows\r\n $paneHeaderL = $(\"<div class='slick-pane slick-pane-header slick-pane-left' tabIndex='0' />\").appendTo($container);\r\n $paneHeaderR = $(\"<div class='slick-pane slick-pane-header slick-pane-right' tabIndex='0' />\").appendTo($container);\r\n $paneTopL = $(\"<div class='slick-pane slick-pane-top slick-pane-left' tabIndex='0' />\").appendTo($container);\r\n $paneTopR = $(\"<div class='slick-pane slick-pane-top slick-pane-right' tabIndex='0' />\").appendTo($container);\r\n $paneBottomL = $(\"<div class='slick-pane slick-pane-bottom slick-pane-left' tabIndex='0' />\").appendTo($container);\r\n $paneBottomR = $(\"<div class='slick-pane slick-pane-bottom slick-pane-right' tabIndex='0' />\").appendTo($container);\r\n\r\n if (options.createPreHeaderPanel) {\r\n $preHeaderPanelScroller = $(\"<div class='slick-preheader-panel ui-state-default' style='overflow:hidden;position:relative;' />\").appendTo($paneHeaderL);\r\n $preHeaderPanel = $(\"<div />\").appendTo($preHeaderPanelScroller);\r\n $preHeaderPanelSpacer = $(\"<div style='display:block;height:1px;position:absolute;top:0;left:0;'></div>\")\r\n .appendTo($preHeaderPanelScroller);\r\n\r\n $preHeaderPanelScrollerR = $(\"<div class='slick-preheader-panel ui-state-default' style='overflow:hidden;position:relative;' />\").appendTo($paneHeaderR);\r\n $preHeaderPanelR = $(\"<div />\").appendTo($preHeaderPanelScrollerR);\r\n $preHeaderPanelSpacerR = $(\"<div style='display:block;height:1px;position:absolute;top:0;left:0;'></div>\")\r\n .appendTo($preHeaderPanelScrollerR);\r\n\r\n if (!options.showPreHeaderPanel) {\r\n $preHeaderPanelScroller[0].style.display = \"none\";\r\n $preHeaderPanelScrollerR[0].style.display = \"none\";\r\n }\r\n }\r\n\r\n // append the header scroller containers\r\n $headerScrollerL = $(\"<div class='slick-header ui-state-default slick-header-left' />\").appendTo($paneHeaderL);\r\n $headerScrollerR = $(\"<div class='slick-header ui-state-default slick-header-right' />\").appendTo($paneHeaderR);\r\n\r\n // cache the header scroller containers\r\n $headerScroller = $().add($headerScrollerL).add($headerScrollerR);\r\n $groupHeaders = $();\r\n // if (treeColumns.hasDepth()) {\r\n // $groupHeadersL = [], $groupHeadersR = [];\r\n // for (var index = 0; index < treeColumns.getDepth() - 1; index++) {\r\n // $groupHeadersL[index] = $(\"<div class='slick-group-header-columns slick-group-header-columns-left' style='left:-1000px' />\").appendTo($headerScrollerL);\r\n // $groupHeadersR[index] = $(\"<div class='slick-group-header-columns slick-group-header-columns-right' style='left:-1000px' />\").appendTo($headerScrollerR);\r\n // $groupHeaders.add($groupHeadersL[index]).add($groupHeadersR[index]);\r\n // }\r\n // }\r\n\r\n // append the columnn containers to the headers\r\n var headerL = document.createElement(\"div\");\r\n headerL.className = \"slick-header-columns slick-header-columns-left\";\r\n headerL.style.left = \"-1000px\";\r\n var headerR = document.createElement(\"div\");\r\n headerR.className = \"slick-header-columns slick-header-columns-right\";\r\n headerR.style.left = \"-1000px\";\r\n $headerL = $(headerL).appendTo($headerScrollerL);\r\n $headerR = $(headerR).appendTo($headerScrollerR);\r\n\r\n // cache the header columns\r\n $headers = $().add($headerL).add($headerR);\r\n\r\n $headers.on(\"selectstart\", function (event) {\r\n event.preventDefault();\r\n });\r\n\r\n var headerRowScrollerL = document.createElement(\"div\");\r\n headerRowScrollerL.className = \"slick-headerrow ui-state-default\";\r\n var headerRowScrollerR = document.createElement(\"div\");\r\n headerRowScrollerR.className = \"slick-headerrow ui-state-default\";\r\n $headerRowScrollerL = $(headerRowScrollerL).appendTo($paneTopL);\r\n $headerRowScrollerR = $(headerRowScrollerR).appendTo($paneTopR);\r\n\r\n $headerRowScroller = $().add($headerRowScrollerL).add($headerRowScrollerR);\r\n\r\n var headerRowSpacerL = document.createElement(\"div\");\r\n headerRowSpacerL.style.display = \"block\";\r\n headerRowSpacerL.style.height = \"1px\";\r\n headerRowSpacerL.style.left = \"0\";\r\n headerRowSpacerL.style.top = \"0\";\r\n headerRowSpacerL.style.position = \"absolute\";\r\n\r\n var headerRowSpacerR = document.createElement(\"div\");\r\n headerRowSpacerR.style.display = \"block\";\r\n headerRowSpacerR.style.height = \"1px\";\r\n headerRowSpacerR.style.left = \"0\";\r\n headerRowSpacerR.style.top = \"0\";\r\n headerRowSpacerR.style.position = \"absolute\";\r\n\r\n $headerRowSpacerL = $(headerRowSpacerL)\r\n .appendTo($headerRowScrollerL);\r\n $headerRowSpacerR = $(headerRowSpacerR)\r\n .appendTo($headerRowScrollerR);\r\n\r\n var headerRowL = document.createElement(\"div\");\r\n headerRowL.className = \"slick-headerrow-columns slick-headerrow-columns-left\";\r\n\r\n var headerRowR = document.createElement(\"div\");\r\n headerRowR.className = \"slick-headerrow-columns slick-headerrow-columns-right\";\r\n\r\n $headerRowL = $(headerRowL).appendTo($headerRowScrollerL);\r\n $headerRowR = $(headerRowR).appendTo($headerRowScrollerR);\r\n\r\n $headerRow = $().add($headerRowL).add($headerRowR);\r\n\r\n // append the top panel scroller\r\n var topPanelScrollerL = document.createElement(\"div\");\r\n topPanelScrollerL.className = \"slick-top-panel-scroller ui-state-default\";\r\n var topPanelScrollerR = document.createElement(\"div\");\r\n topPanelScrollerR.className = \"slick-top-panel-scroller ui-state-default\";\r\n $topPanelScrollerL = $(topPanelScrollerL).appendTo($paneTopL);\r\n $topPanelScrollerR = $(topPanelScrollerR).appendTo($paneTopR);\r\n\r\n $topPanelScroller = $().add($topPanelScrollerL).add($topPanelScrollerR);\r\n\r\n // append the top panel\r\n $topPanelL = $(\"<div class='slick-top-panel' style='width:10000px' />\").appendTo($topPanelScrollerL);\r\n $topPanelR = $(\"<div class='slick-top-panel' style='width:10000px' />\").appendTo($topPanelScrollerR);\r\n\r\n $topPanel = $().add($topPanelL).add($topPanelR);\r\n\r\n if (!options.showTopPanel) {\r\n $.each($topPanelScroller, function (idx, el) { el.style.display = \"none\"; });\r\n }\r\n\r\n if (!options.showHeaderRow) {\r\n $.each($headerRowScroller, function (idx, el) { el.style.display = \"none\"; });\r\n }\r\n\r\n // append the viewport containers\r\n $viewportTopL = $(\"<div class='slick-viewport slick-viewport-top slick-viewport-left' tabIndex='0' hideFocus />\").appendTo($paneTopL);\r\n $viewportTopR = $(\"<div class='slick-viewport slick-viewport-top slick-viewport-right' tabIndex='0' hideFocus />\").appendTo($paneTopR);\r\n $viewportBottomL = $(\"<div class='slick-viewport slick-viewport-bottom slick-viewport-left' tabIndex='0' hideFocus />\").appendTo($paneBottomL);\r\n $viewportBottomR = $(\"<div class='slick-viewport slick-viewport-bottom slick-viewport-right' tabIndex='0' hideFocus />\").appendTo($paneBottomR);\r\n\r\n // cache the viewports\r\n $viewport = $().add($viewportTopL).add($viewportTopR).add($viewportBottomL).add($viewportBottomR);\r\n\r\n\r\n // default the active viewport to the top left\r\n $activeViewportNode = $viewportTopL;\r\n\r\n // append the canvas containers\r\n $canvasTopL = $(\"<div class='grid-canvas grid-canvas-top grid-canvas-left' tabIndex='0' hideFocus />\").appendTo($viewportTopL);\r\n $canvasTopR = $(\"<div class='grid-canvas grid-canvas-top grid-canvas-right' tabIndex='0' hideFocus />\").appendTo($viewportTopR);\r\n $canvasBottomL = $(\"<div class='grid-canvas grid-canvas-bottom grid-canvas-left' tabIndex='0' hideFocus />\").appendTo($viewportBottomL);\r\n $canvasBottomR = $(\"<div class='grid-canvas grid-canvas-bottom grid-canvas-right' tabIndex='0' hideFocus />\").appendTo($viewportBottomR);\r\n if (options.viewportClass) { $viewport.toggleClass(options.viewportClass, true); }\r\n\r\n // cache the canvases\r\n $canvas = $().add($canvasTopL).add($canvasTopR).add($canvasBottomL).add($canvasBottomR);\r\n\r\n scrollbarDimensions = scrollbarDimensions || measureScrollbar();\r\n\r\n // default the active canvas to the top left\r\n $activeCanvasNode = $canvasTopL;\r\n\r\n // pre-header\r\n if ($preHeaderPanelSpacer) { $preHeaderPanelSpacer.css(\"width\", getCanvasWidth() + scrollbarDimensions.width + \"px\"); }\r\n $headers.width(getHeadersWidth());\r\n $headerRowSpacerL.css(\"width\", getCanvasWidth() + scrollbarDimensions.width + \"px\");\r\n $headerRowSpacerR.css(\"width\", getCanvasWidth() + scrollbarDimensions.width + \"px\");\r\n\r\n // footer Row\r\n if (options.createFooterRow) {\r\n $footerRowScrollerR = $(\"<div class='slick-footerrow ui-state-default' />\").appendTo($paneTopR);\r\n $footerRowScrollerL = $(\"<div class='slick-footerrow ui-state-default' />\").appendTo($paneTopL);\r\n\r\n $footerRowScroller = $().add($footerRowScrollerL).add($footerRowScrollerR);\r\n\r\n $footerRowSpacerL = $(\"<div style='display:block;height:1px;position:absolute;top:0;left:0;'></div>\")\r\n .css(\"width\", getCanvasWidth() + scrollbarDimensions.width + \"px\")\r\n .appendTo($footerRowScrollerL);\r\n $footerRowSpacerR = $(\"<div style='display:block;height:1px;position:absolute;top:0;left:0;'></div>\")\r\n .css(\"width\", getCanvasWidth() + scrollbarDimensions.width + \"px\")\r\n .appendTo($footerRowScrollerR);\r\n\r\n\r\n $footerRowL = $(\"<div class='slick-footerrow-columns slick-footerrow-columns-left' />\").appendTo($footerRowScrollerL);\r\n $footerRowR = $(\"<div class='slick-footerrow-columns slick-footerrow-columns-right' />\").appendTo($footerRowScrollerR);\r\n\r\n $footerRow = $().add($footerRowL).add($footerRowR);\r\n\r\n if (!options.showFooterRow) {\r\n $.each($footerRowScroller, function (idx, el) { el.style.display = \"none\"; });\r\n }\r\n }\r\n\r\n $focusSink2 = $($focusSink[0].cloneNode(true)).appendTo($container);\r\n\r\n if (!options.explicitInitialization) {\r\n finishInitialization();\r\n }\r\n }\r\n\r\n function finishInitialization() {\r\n if (!initialized) {\r\n initialized = true;\r\n\r\n getViewportWidth();\r\n getViewportHeight();\r\n\r\n // header columns and cells may have different padding/border skewing width calculations (box-sizing, hello?)\r\n // calculate the diff so we can set consistent sizes\r\n measureCellPaddingAndBorder();\r\n\r\n // for usability reasons, all text selection in SlickGrid is disabled\r\n // with the exception of input and textarea elements (selection must\r\n // be enabled there so that editors work as expected); note that\r\n // selection in grid cells (grid body) is already unavailable in\r\n // all browsers except IE\r\n disableSelection($headers); // disable all text selection in header (including input and textarea)\r\n\r\n if (!options.enableTextSelectionOnCells) {\r\n // disable text selection in grid cells except in input and textarea elements\r\n // (this is IE-specific, because selectstart event will only fire in IE)\r\n $viewport.on(\"selectstart\", function (event) {\r\n if (event.target.tagName !== \"INPUT\" && event.target.tagName !== \"TEXTAREA\") {\r\n event.preventDefault();\r\n }\r\n });\r\n }\r\n\r\n cacheRowPositions();\r\n\r\n setFrozenOptions();\r\n setPaneVisibility();\r\n setScroller();\r\n setOverflow();\r\n\r\n updateColumnCaches();\r\n createColumnHeaders();\r\n // createColumnGroupHeaders();\r\n createColumnFooter();\r\n setupColumnSort();\r\n setupColumnMoveAndResize();\r\n createCssRules();\r\n resizeCanvas();\r\n bindAncestorScrollEvents();\r\n\r\n $container.on(\"resize\", resizeCanvas);\r\n $viewport.on(\"scroll\", handleScroll);\r\n\r\n // tODO !!! TODOFIX\r\n // if (jQuery.fn.mousewheel) {\r\n // $viewport.on(\"mousewheel\", handleMouseWheel);\r\n // }\r\n\r\n $headerScroller\r\n .on(\"scroll\", preventScroll) // .on(\"scroll\", handleHeaderScroll)\r\n .on(\"contextmenu\", handleHeaderContextMenu)\r\n .on(\"click\", handleHeaderClick);\r\n\r\n $headerRowScroller\r\n .on(\"scroll\", preventScroll);\r\n\r\n if (options.createFooterRow) {\r\n $footerRowScroller\r\n .on(\"scroll\", preventScroll);\r\n }\r\n\r\n if (options.createPreHeaderPanel) {\r\n $preHeaderPanelScroller\r\n .on(\"scroll\", preventScroll);\r\n }\r\n\r\n\r\n // $headerRowScroller\r\n // .on(\"scroll\", handleHeaderRowScroll);\r\n\r\n // if (options.createFooterRow) {\r\n // $footerRowScroller\r\n // .on(\"scroll\", handleFooterRowScroll);\r\n // }\r\n\r\n // if (options.createPreHeaderPanel) {\r\n // $preHeaderPanelScroller\r\n // .on(\"scroll\", handlePreHeaderPanelScroll);\r\n // }\r\n\r\n $focusSink.add($focusSink2)\r\n .on(\"keydown\", handleKeyDown);\r\n $canvas\r\n .on(\"keydown\", handleKeyDown)\r\n .on(\"click\", handleClick)\r\n .on(\"dblclick\", handleDblClick)\r\n .on(\"contextmenu\", handleContextMenu);\r\n\r\n\r\n // ---- BEGIN\r\n\r\n\r\n let dragStartX;\r\n let dragStartY;\r\n let isDown;\r\n let dragStartedDD = null;\r\n const delta = 3;\r\n // $canvas.on(\"touchstart\", function (e, dd) {\r\n // handleDragInit(e, dd);\r\n // // TODO\r\n // });\r\n\r\n let _down = function (e, dd) {\r\n handleDragInit(e, dd); // TODO -> do something with result?\r\n dragStartX = e.pageX != null ? e.pageX : ((e as unknown) as TouchEvent).touches[0].pageX;\r\n dragStartY = e.pageY != null ? e.pageY : ((e as unknown) as TouchEvent).touches[0].pageY;\r\n isDown = true;\r\n document.addEventListener(\"mouseup\", handleUp);\r\n document.addEventListener(\"touchend\", handleUp);\r\n }\r\n\r\n $canvas.on(\"mousedown\", _down);\r\n $canvas.on(\"touchstart\", _down);\r\n\r\n let _move = function (e, _dd) {\r\n if (isDown) {\r\n\r\n const pageX = e.pageX != null ? e.pageX : ((e as unknown) as TouchEvent).touches[0].pageX;\r\n const pageY = e.pageY != null ? e.pageY : ((e as unknown) as TouchEvent).touches[0].pageY;\r\n\r\n if (Math.abs(dragStartX - pageX) < delta\r\n && Math.abs(dragStartY - pageY) < delta) {\r\n return;\r\n }\r\n\r\n if (dragStartedDD == null) {\r\n dragStartedDD = {};\r\n dragStartedDD.dragging = null;\r\n dragStartedDD.propagates = 1;\r\n dragStartedDD.target = e.target;\r\n dragStartedDD.pageX = pageX;\r\n dragStartedDD.pageY = pageY;\r\n dragStartedDD.startX = dragStartedDD.pageX;\r\n dragStartedDD.startY = dragStartedDD.pageY;\r\n const res = handleDragStart(e, dragStartedDD); // TODO -> do something with result?\r\n }\r\n dragStartedDD.pageX = pageX;\r\n dragStartedDD.pageY = pageY;\r\n dragStartedDD.startX = dragStartedDD.pageX;\r\n dragStartedDD.startY = dragStartedDD.pageY;\r\n handleDrag(e, dragStartedDD);\r\n // e.stopImmediatePropagation();\r\n // e.stopPropagation();\r\n if (e.isImmediatePropagationStopped && e.isImmediatePropagationStopped()) {\r\n e.preventDefault();\r\n }\r\n }\r\n }\r\n\r\n $canvas.on(\"mousemove\", _move);\r\n $canvas.on(\"touchmove\", _move);\r\n\r\n const handleUp = (e) => {\r\n if (isDown && dragStartedDD != null) {\r\n handleDragEnd(e, dragStartedDD);\r\n }\r\n isDown = false;\r\n dragStartedDD = null;\r\n document.removeEventListener(\"mouseup\", handleUp);\r\n document.removeEventListener(\"touchend\", handleUp);\r\n }\r\n\r\n // .on(\"draginit\", handleDragInit) //TODO TODOFIX\r\n // .on(\"dragstart\", {distance: 3}, handleDragStart) //TODO TODOFIX\r\n // .on(\"drag\", handleDrag) //TODO TODOFIX\r\n // .on(\"dragend\", handleDragEnd); //TODO TODOFIX\r\n // .on(\"mouseenter\", \".slick-cell\", handleMouseEnter) //TODO TODOFIX\r\n // .on(\"mouseleave\", \".slick-cell\", handleMouseLeave); //TODO TODOFIX\r\n\r\n restoreCssFromHiddenInit();\r\n }\r\n }\r\n\r\n function cacheCssForHiddenInit() {\r\n // handle display:none on container or container parents\r\n var all_parents = $().add($container).add($container[0].parentElement);\r\n var hiddenParents = [];\r\n $hiddenParents = $();\r\n for (var i = 0; i < all_parents.length; i++) {\r\n if ((all_parents[i].display || \"\").toLowerCase() === \"none\") {\r\n hiddenParents.push(all_parents[i]);\r\n $hiddenParents.add(all_parents[i]);\r\n }\r\n }\r\n hiddenParents.forEach(function (p) {\r\n var old = {};\r\n for (var name in cssShow) {\r\n old[name] = p.style[name];\r\n p.style[name] = cssShow[name];\r\n }\r\n oldProps.push(old);\r\n });\r\n }\r\n\r\n function restoreCssFromHiddenInit() {\r\n // finish handle display:none on container or container parents\r\n // - put values back the way they were\r\n $.each($hiddenParents, function (i) {\r\n var old = oldProps[i];\r\n for (var name in cssShow) {\r\n this.style[name] = old[name];\r\n }\r\n });\r\n }\r\n\r\n function hasFrozenColumns() {\r\n return options.frozenColumn > -1;\r\n }\r\n\r\n function registerPlugin(plugin) {\r\n plugins.unshift(plugin);\r\n plugin.init(self);\r\n }\r\n\r\n function unregisterPlugin(plugin) {\r\n for (var i = plugins.length; i >= 0; i--) {\r\n if (plugins[i] === plugin) {\r\n if (plugins[i].destroy) {\r\n plugins[i].destroy();\r\n }\r\n plugins.splice(i, 1);\r\n break;\r\n }\r\n }\r\n }\r\n\r\n function getPluginByName(name) {\r\n for (var i = plugins.length - 1; i >= 0; i--) {\r\n if (plugins[i].pluginName === name) {\r\n return plugins[i];\r\n }\r\n }\r\n return undefined;\r\n }\r\n\r\n function setSelectionModel(model) {\r\n if (selectionModel) {\r\n selectionModel.onSelectedRangesChanged.unsubscribe(handleSelectedRangesChanged);\r\n if (selectionModel.destroy) {\r\n selectionModel.destroy();\r\n }\r\n }\r\n\r\n selectionModel = model;\r\n if (selectionModel) {\r\n selectionModel.init(self);\r\n selectionModel.onSelectedRangesChanged.subscribe(handleSelectedRangesChanged);\r\n }\r\n }\r\n\r\n function getSelectionModel() {\r\n return selectionModel;\r\n }\r\n\r\n function getCanvasNode(columnIdOrIdx, rowIndex) {\r\n if (!columnIdOrIdx) { columnIdOrIdx = 0; }\r\n if (!rowIndex) { rowIndex = 0; }\r\n\r\n var idx = (typeof columnIdOrIdx === \"number\" ? columnIdOrIdx : getColumnIndex(columnIdOrIdx));\r\n\r\n return (hasFrozenRows && rowIndex >= actualFrozenRow + (options.frozenBottom ? 0 : 1))\r\n ? ((hasFrozenColumns() && idx > options.frozenColumn) ? $canvasBottomR[0] : $canvasBottomL[0])\r\n : ((hasFrozenColumns() && idx > options.frozenColumn) ? $canvasTopR[0] : $canvasTopL[0])\r\n ;\r\n }\r\n\r\n function getActiveCanvasNode(element) {\r\n setActiveCanvasNode(element);\r\n\r\n return $activeCanvasNode[0];\r\n }\r\n\r\n function getCanvases() {\r\n return $canvas;\r\n }\r\n\r\n function setActiveCanvasNode(element) {\r\n if (element) {\r\n $activeCanvasNode = $(element.target).closestClass(\"grid-canvas\");\r\n }\r\n }\r\n\r\n function getViewportNode() {\r\n return $viewport[0];\r\n }\r\n\r\n function getActiveViewportNode(element) {\r\n setActiveViewportNode(element);\r\n\r\n return $activeViewportNode[0];\r\n }\r\n\r\n function setActiveViewportNode(element) {\r\n if (element) {\r\n $activeViewportNode = $(element.target).closestClass(\"slick-viewport\");\r\n }\r\n }\r\n\r\n function measureScrollbar() {\r\n //var $outerdiv = $(\"<div style=\\\"position:absolute; top:-10000px; left:-10000px; overflow:auto; width:100px; height:100px;\\\"></div>\").appendTo($viewport);\r\n const $outerdiv = $(\"<div style=\\\"position:absolute; top:-10000px; left:-10000px; overflow:auto; width:100px; height:100px;\\\"></div>\").appendTo($(\"body\"));\r\n const $innerdiv = $(\"<div style=\\\"width:200px; height:200px; overflow:auto;\\\"></div>\").appendTo($outerdiv);\r\n const dim = {\r\n width: $outerdiv[0].offsetWidth - $outerdiv[0].clientWidth,\r\n height: $outerdiv[0].offsetHeight - $outerdiv[0].clientHeight\r\n };\r\n $innerdiv.remove();\r\n $outerdiv.remove();\r\n return dim;\r\n }\r\n\r\n function getHeadersWidth() {\r\n headersWidth = headersWidthL = headersWidthR = 0;\r\n var includeScrollbar = !options.autoHeight;\r\n\r\n for (var i = 0, ii = columns.length; i < ii; i++) {\r\n var width = columns[i].width;\r\n\r\n if ((options.frozenColumn) > -1 && (i > options.frozenColumn)) {\r\n headersWidthR += width;\r\n } else {\r\n headersWidthL += width;\r\n }\r\n }\r\n\r\n if (includeScrollbar) {\r\n if ((options.frozenColumn) > -1 && (i > options.frozenColumn)) {\r\n headersWidthR += scrollbarDimensions.width;\r\n } else {\r\n headersWidthL += scrollbarDimensions.width;\r\n }\r\n }\r\n\r\n if (hasFrozenColumns()) {\r\n headersWidthL = headersWidthL + 1000;\r\n\r\n headersWidthR = Math.max(headersWidthR, viewportW) + headersWidthL;\r\n headersWidthR += scrollbarDimensions.width;\r\n } else {\r\n headersWidthL += scrollbarDimensions.width;\r\n headersWidthL = Math.max(headersWidthL, viewportW) + 1000;\r\n }\r\n\r\n headersWidth = headersWidthL + headersWidthR;\r\n return Math.max(headersWidth, viewportW) + 1000;\r\n }\r\n\r\n // function getHeadersWidthL() {\r\n // headersWidthL = 0;\r\n\r\n // columns.forEach(function (column, i) {\r\n // if (!((options.frozenColumn) > -1 && (i > options.frozenColumn))) {\r\n // headersWidthL += column.width;\r\n // }\r\n // });\r\n\r\n // if (hasFrozenColumns()) {\r\n // headersWidthL += 1000;\r\n // } else {\r\n // headersWidthL += scrollbarDimensions.width;\r\n // headersWidthL = Math.max(headersWidthL, viewportW) + 1000;\r\n // }\r\n\r\n // return headersWidthL;\r\n // }\r\n\r\n // function getHeadersWidthR() {\r\n // headersWidthR = 0;\r\n\r\n // columns.forEach(function (column, i) {\r\n // if ((options.frozenColumn) > -1 && (i > options.frozenColumn)) {\r\n // headersWidthR += column.width;\r\n // }\r\n // });\r\n\r\n // if (hasFrozenColumns()) {\r\n // headersWidthR = Math.max(headersWidthR, viewportW) + getHeadersWidthL();\r\n // headersWidthR += scrollbarDimensions.width;\r\n // }\r\n\r\n // return headersWidthR;\r\n // }\r\n\r\n function getCanvasWidth() {\r\n var availableWidth = viewportHasVScroll ? viewportW - scrollbarDimensions.width : viewportW;\r\n var i = columns.length;\r\n\r\n canvasWidthL = canvasWidthR = 0;\r\n\r\n while (i--) {\r\n if (hasFrozenColumns() && (i > options.frozenColumn)) {\r\n canvasWidthR += columns[i].width;\r\n } else {\r\n canvasWidthL += columns[i].width;\r\n }\r\n }\r\n var totalRowWidth = canvasWidthL + canvasWidthR;\r\n return options.fullWidthRows ? Math.max(totalRowWidth, availableWidth) : totalRowWidth;\r\n }\r\n\r\n function updateCanvasWidth(forceColumnWidthsUpdate?: boolean) {\r\n var oldCanvasWidth = canvasWidth;\r\n var oldCanvasWidthL = canvasWidthL;\r\n var oldCanvasWidthR = canvasWidthR;\r\n var widthChanged;\r\n canvasWidth = getCanvasWidth();\r\n\r\n widthChanged = canvasWidth !== oldCanvasWidth || canvasWidthL !== oldCanvasWidthL || canvasWidthR !== oldCanvasWidthR;\r\n\r\n if (widthChanged || hasFrozenColumns() || hasFrozenRows) {\r\n $canvasTopL.width(canvasWidthL);\r\n\r\n getHeadersWidth();\r\n\r\n $headerL.width(headersWidthL);\r\n $headerR.width(headersWidthR);\r\n\r\n if (hasFrozenColumns()) {\r\n $canvasTopR.width(canvasWidthR);\r\n\r\n $paneHeaderL.width(canvasWidthL);\r\n $paneHeaderR.css(\"left\", canvasWidthL);\r\n // $paneHeaderR.css(\"width\", viewportW - canvasWidthL);\r\n $paneHeaderR.css(\"width\", \"calc(100% - \" + canvasWidthL + \"px)\");\r\n\r\n $paneTopL.width(canvasWidthL);\r\n $paneTopR.css(\"left\", canvasWidthL);\r\n //$paneTopR.css(\"width\", viewportW - canvasWidthL);\r\n $paneTopR.css(\"width\", \"calc(100% - \" + canvasWidthL + \"px)\");\r\n\r\n $headerRowScrollerL.width(canvasWidthL);\r\n // $headerRowScrollerR.width(viewportW - canvasWidthL);\r\n $headerRowScrollerR.css(\"width\", \"100%\");\r\n\r\n $headerRowL.width(canvasWidthL);\r\n $headerRowR.width(canvasWidthR);\r\n\r\n if (options.createFooterRow) {\r\n $footerRowScrollerL.width(canvasWidthL);\r\n //$footerRowScrollerR.width(viewportW - canvasWidthL);\r\n $footerRowScrollerR.css(\"width\", \"100%\");\r\n\r\n $footerRowL.width(canvasWidthL);\r\n $footerRowR.width(canvasWidthR);\r\n }\r\n if (options.createPreHeaderPanel) {\r\n $preHeaderPanel.width(canvasWidth);\r\n }\r\n $viewportTopL.width(canvasWidthL);\r\n //$viewportTopR.width(viewportW - canvasWidthL);\r\n $viewportTopR.css(\"width\", \"100%\");\r\n\r\n if (hasFrozenRows) {\r\n $paneBottomL.width(canvasWidthL);\r\n $paneBottomR.css(\"left\", canvasWidthL);\r\n\r\n $viewportBottomL.width(canvasWidthL);\r\n // $viewportBottomR.width(viewportW - canvasWidthL);\r\n $viewportBottomR.width(\"100%\");\r\n\r\n $canvasBottomL.width(canvasWidthL);\r\n $canvasBottomR.width(canvasWidthR);\r\n }\r\n } else {\r\n $paneHeaderL.width(\"100%\");\r\n $paneTopL.width(\"100%\");\r\n $headerRowScrollerL.width(\"100%\");\r\n $headerRowL.width(canvasWidth);\r\n\r\n if (options.createFooterRow) {\r\n $footerRowScrollerL.width(\"100%\");\r\n $footerRowL.width(canvasWidth);\r\n }\r\n\r\n if (options.createPreHeaderPanel) {\r\n $preHeaderPanel.width(\"100%\");\r\n $preHeaderPanel.width(canvasWidth);\r\n }\r\n $viewportTopL.width(\"100%\");\r\n\r\n if (hasFrozenRows) {\r\n $viewportBottomL.width(\"100%\");\r\n $canvasBottomL.width(canvasWidthL);\r\n }\r\n }\r\n\r\n viewportHasHScroll = options.alwaysShowHorizontalScroll || (canvasWidth > viewportW - scrollbarDimensions.width);\r\n }\r\n\r\n $headerRowSpacerL.width(canvasWidth + (viewportHasVScroll ? scrollbarDimensions.width : 0));\r\n $headerRowSpacerR.width(canvasWidth + (viewportHasVScroll ? scrollbarDimensions.width : 0));\r\n\r\n if (options.createFooterRow) {\r\n $footerRowSpacerL.width(canvasWidth + (viewportHasVScroll ? scrollbarDimensions.width : 0));\r\n $footerRowSpacerR.width(canvasWidth + (viewportHasVScroll ? scrollbarDimensions.width : 0));\r\n }\r\n\r\n if (widthChanged || forceColumnWidthsUpdate) {\r\n applyColumnWidths();\r\n }\r\n }\r\n\r\n function disableSelection($target) {\r\n if ($target && $target.jquery) {\r\n $target\r\n .attr(\"unselectable\", \"on\")\r\n .css(\"MozUserSelect\", \"none\")\r\n .on(\"selectstart.ui\", function () {\r\n return false;\r\n }); // from jquery:ui.core.js 1.7.2\r\n }\r\n }\r\n\r\n function getMaxSupportedCssHeight() {\r\n var supportedHeight = 1000000;\r\n // fF reports the height back but still renders blank after ~6M px\r\n var testUpTo = navigator.userAgent.toLowerCase().match(/firefox/) ? 6000000 : 1000000000;\r\n var div: IjQueryWrapper = $(\"<div />\");\r\n div.appendTo(document.body);\r\n\r\n while (true) {\r\n var test = supportedHeight * 2;\r\n div.height(test);\r\n if (test > testUpTo || div.height() !== test) {\r\n break;\r\n } else {\r\n supportedHeight = test;\r\n }\r\n }\r\n\r\n div.remove();\r\n return supportedHeight;\r\n }\r\n\r\n function getUID() {\r\n return uid;\r\n }\r\n\r\n function getHeaderColumnWidthDiff() {\r\n return headerColumnWidthDiff;\r\n }\r\n\r\n function getScrollbarDimensions() {\r\n return scrollbarDimensions;\r\n }\r\n\r\n // tODO: this is static. need to handle page mutation.\r\n function bindAncestorScrollEvents() {\r\n var elem = (hasFrozenRows && !options.frozenBottom) ? $canvasBottomL[0] : $canvasTopL[0];\r\n while ((elem = elem.parentNode) != document.body && elem != null) {\r\n // bind to scroll containers only\r\n if (elem == $viewportTopL[0] || elem.scrollWidth != elem.clientWidth || elem.scrollHeight != elem.clientHeight) {\r\n var $elem = $(elem);\r\n if (!$boundAncestors) {\r\n $boundAncestors = $elem;\r\n } else {\r\n $boundAncestors = $boundAncestors.add($elem);\r\n }\r\n scrollEventHandler = (elem as HTMLDivElement).addEventListener(\"scroll\", handleActiveCellPositionChange);\r\n //$elem.on(\"scroll.\" + uid, handleActiveCellPositionChange); //TODOFIX\r\n }\r\n }\r\n }\r\n\r\n function unbindAncestorScrollEvents() {\r\n if (!$boundAncestors) {\r\n return;\r\n }\r\n // $boundAncestors.off(\"scroll.\" + uid); //TODO TODOFIX\r\n if (scrollEventHandler) {\r\n $boundAncestors[0].removeEventListener(\"scroll\");\r\n }\r\n $boundAncestors = null;\r\n }\r\n\r\n function updateColumnHeader(columnId, title, toolTip) {\r\n if (!initialized) { return; }\r\n var idx = getColumnIndex(columnId);\r\n if (idx == null) {\r\n return;\r\n }\r\n\r\n var columnDef = columns[idx];\r\n var $header = $($headers.children()[idx]);\r\n if ($header) {\r\n if (title !== undefined) {\r\n columns[idx].name = title;\r\n }\r\n if (toolTip !== undefined) {\r\n columns[idx].toolTip = toolTip;\r\n }\r\n\r\n trigger(self.onBeforeHeaderCellDestroy, {\r\n \"node\": $header[0],\r\n \"column\": columnDef,\r\n \"grid\": self\r\n });\r\n\r\n (<IjQueryWrapper>$header\r\n .attr(\"title\", toolTip || \"\"))\r\n .children()[0].innerHTML = title;\r\n\r\n trigger(self.onHeaderCellRendered, {\r\n \"node\": $header[0],\r\n \"column\": columnDef,\r\n \"grid\": self\r\n });\r\n }\r\n }\r\n\r\n function getHeader(columnDef) {\r\n if (!columnDef) {\r\n return hasFrozenColumns() ? $headers : $headerL;\r\n }\r\n var idx = getColumnIndex(columnDef.id);\r\n return hasFrozenColumns() ? ((idx <= options.frozenColumn) ? $headerL : $headerR) : $headerL;\r\n }\r\n\r\n function getHeaderColumn(columnIdOrIdx) {\r\n var idx = (typeof columnIdOrIdx === \"number\" ? columnIdOrIdx : getColumnIndex(columnIdOrIdx));\r\n var targetHeader = hasFrozenColumns() ? ((idx <= options.frozenColumn) ? $headerL : $headerR) : $headerL;\r\n var targetIndex = hasFrozenColumns() ? ((idx <= options.frozenColumn) ? idx : idx - options.frozenColumn - 1) : idx;\r\n var $rtn = targetHeader.children()[targetIndex];\r\n return $rtn && $rtn[0];\r\n }\r\n\r\n function getHeaderRow() {\r\n return hasFrozenColumns() ? $headerRow : $headerRow[0];\r\n }\r\n\r\n function getFooterRow() {\r\n return hasFrozenColumns() ? $footerRow : $footerRow[0];\r\n }\r\n\r\n function getPreHeaderPanel(): Element {\r\n return $preHeaderPanel[0];\r\n }\r\n\r\n function getPreHeaderPanelRight() {\r\n return $preHeaderPanelR[0];\r\n }\r\n\r\n function getHeaderRowColumn(columnIdOrIdx) {\r\n var idx = (typeof columnIdOrIdx === \"number\" ? columnIdOrIdx : getColumnIndex(columnIdOrIdx));\r\n\r\n var $headerRowTarget;\r\n\r\n if (hasFrozenColumns()) {\r\n if (idx <= options.frozenColumn) {\r\n $headerRowTarget = $headerRowL;\r\n } else {\r\n $headerRowTarget = $headerRowR;\r\n idx -= options.frozenColumn + 1;\r\n }\r\n } else {\r\n $headerRowTarget = $headerRowL;\r\n }\r\n\r\n var $header = $headerRowTarget.children().eq(idx);\r\n return $header && $header[0];\r\n }\r\n\r\n function getFooterRowColumn(columnIdOrIdx) {\r\n var idx = (typeof columnIdOrIdx === \"number\" ? columnIdOrIdx : getColumnIndex(columnIdOrIdx));\r\n\r\n var $footerRowTarget;\r\n\r\n if (hasFrozenColumns()) {\r\n if (idx <= options.frozenColumn) {\r\n $footerRowTarget = $footerRowL;\r\n } else {\r\n $footerRowTarget = $footerRowR;\r\n\r\n idx -= options.frozenColumn + 1;\r\n }\r\n } else {\r\n $footerRowTarget = $footerRowL;\r\n }\r\n\r\n var $footer = $footerRowTarget.children().eq(idx);\r\n return $footer && $footer[0];\r\n }\r\n\r\n function createColumnFooter() {\r\n if (options.createFooterRow) {\r\n $.each($footerRow.find(\".slick-footerrow-column\")\r\n , function () {\r\n var columnDef = $(this).data(\"column\");\r\n if (columnDef) {\r\n trigger(self.onBeforeFooterRowCellDestroy, {\r\n \"node\": this,\r\n \"column\": columnDef,\r\n \"grid\": self\r\n });\r\n }\r\n });\r\n\r\n $footerRowL.empty();\r\n $footerRowR.empty();\r\n\r\n for (var i = 0; i < columns.length; i++) {\r\n var m = columns[i];\r\n\r\n var footerRowCell = $(\"<div class='ui-state-default slick-footerrow-column l\" + i + \" r\" + i + \"'></div>\")\r\n .data(\"column\", m)\r\n .addClass(hasFrozenColumns() && i <= options.frozenColumn ? \"frozen\" : \"\")\r\n .appendTo(hasFrozenColumns() && (i > options.frozenColumn) ? $footerRowR : $footerRowL);\r\n\r\n trigger(self.onFooterRowCellRendered, {\r\n \"node\": footerRowCell[0],\r\n \"column\": m,\r\n \"grid\": self\r\n });\r\n }\r\n }\r\n }\r\n\r\n // function createColumnGroupHeaders() {\r\n // var columnsLength = 0;\r\n // var frozenColumnsValid = false;\r\n\r\n // if (!treeColumns.hasDepth()) {\r\n // return;\r\n // }\r\n\r\n // for (var index = 0; index < $groupHeadersL.length; index++) {\r\n\r\n // $groupHeadersL[index].empty();\r\n // $groupHeadersR[index].empty();\r\n\r\n // var groupColumns = treeColumns.getColumnsInDepth(index);\r\n\r\n // for (var indexGroup in groupColumns) {\r\n // var m = groupColumns[indexGroup];\r\n\r\n // columnsLength += m.extractColumns().length;\r\n\r\n // if (hasFrozenColumns() && index == 0 && (columnsLength - 1) === options.frozenColumn) {\r\n // frozenColumnsValid = true;\r\n // }\r\n\r\n // var tmp = document.createElement(\"div\");\r\n // tmp.className = \"ui-state-default slick-group-header-column\";\r\n // tmp.innerHTML = \"<span class='slick-column-name'>\" + m.name + \"</span>\";\r\n // // tmp.innerHTML = m.name;\r\n // tmp.id = \"\" + uid + m.id;\r\n // tmp.title = m.toolTip || \"\";\r\n // if (m.headerCssClass) {\r\n // tmp.classList.add(m.headerCssClass);\r\n // }\r\n // if (hasFrozenColumns() && (columnsLength - 1) > options.frozenColumn) {\r\n // tmp.classList.add(\"frozen\");\r\n // }\r\n // var $tmp = $(tmp);\r\n // $tmp.data(\"column\", m);\r\n // if (hasFrozenColumns() && (columnsLength - 1) > options.frozenColumn) {\r\n // $tmp.appendTo($groupHeadersR[index]);\r\n // } else {\r\n // $tmp.appendTo($groupHeadersL[index]);\r\n // }\r\n // }\r\n\r\n // if (hasFrozenColumns() && index == 0 && !frozenColumnsValid) {\r\n // $groupHeadersL[index].empty();\r\n // $groupHeadersR[index].empty();\r\n // alert(\"All columns of group should to be grouped!\");\r\n // break;\r\n // }\r\n // }\r\n\r\n // applyColumnGroupHeaderWidths();\r\n // }\r\n\r\n function createColumnHeaders() {\r\n function onMouseEnter() {\r\n $(this).addClass(\"ui-state-hover\");\r\n }\r\n\r\n function onMouseLeave() {\r\n $(this).removeClass(\"ui-state-hover\");\r\n }\r\n\r\n $.each($headers.find(\".slick-header-column\"),\r\n function () {\r\n var columnDef = $(this).data(\"column\");\r\n if (columnDef) {\r\n trigger(self.onBeforeHeaderCellDestroy, {\r\n \"node\": this,\r\n \"column\": columnDef,\r\n \"grid\": self\r\n });\r\n }\r\n });\r\n\r\n $headerL.empty();\r\n $headerR.empty();\r\n\r\n getHeadersWidth();\r\n\r\n $headerL.width(headersWidthL);\r\n $headerR.width(headersWidthR);\r\n\r\n $.each($headerRow.find(\".slick-headerrow-column\"),\r\n function () {\r\n var columnDef = $(this).data(\"column\");\r\n if (columnDef) {\r\n trigger(self.onBeforeHeaderRowCellDestroy, {\r\n \"node\": this,\r\n \"column\": columnDef,\r\n \"grid\": self\r\n });\r\n }\r\n });\r\n\r\n $headerRowL.empty();\r\n $headerRowR.empty();\r\n\r\n if (options.createFooterRow) {\r\n $.each($footerRowL.find(\".slick-footerrow-column\"),\r\n function () {\r\n var columnDef = $(this).data(\"column\");\r\n if (columnDef) {\r\n trigger(self.onBeforeFooterRowCellDestroy, {\r\n \"node\": this,\r\n \"column\": columnDef,\r\n \"grid\": self\r\n });\r\n }\r\n });\r\n $footerRowL.empty();\r\n\r\n if (hasFrozenColumns()) {\r\n $.each($footerRowR.find(\".slick-footerrow-column\"),\r\n function () {\r\n var columnDef = $(this).data(\"column\");\r\n if (columnDef) {\r\n trigger(self.onBeforeFooterRowCellDestroy, {\r\n \"node\": this,\r\n \"column\": columnDef,\r\n \"grid\": self\r\n });\r\n }\r\n });\r\n $footerRowR.empty();\r\n }\r\n }\r\n\r\n for (var i = 0; i < columns.length; i++) {\r\n var m = columns[i];\r\n\r\n var $headerTarget = hasFrozenColumns() ? ((i <= options.frozenColumn) ? $headerL : $headerR) : $headerL;\r\n var $headerRowTarget = hasFrozenColumns() ? ((i <= options.frozenColumn) ? $headerRowL : $headerRowR) : $headerRowL;\r\n\r\n\r\n var div = document.createElement(\"div\");\r\n div.className = \"ui-state-default slick-header-column\";\r\n div.style.width = (m.width - headerColumnWidthDiff) + \"px\";\r\n div.id = \"\" + uid + m.id;\r\n div.title = m.toolTip || \"\";\r\n let html = \"<span class='slick-column-name'>\" + m.name + \"</span>\";\r\n if (m.resizable) {\r\n html += \"<span class='rs-r'\" + (options.resizeHandleWidth ? \"style='width:\" + options.resizeHandleWidth + \"'\" : \"\") + \"></span>\";\r\n div.className += \" resizable\";\r\n }\r\n div.innerHTML = html;\r\n if (m.headerCssClass) {\r\n div.className += \" \" + m.headerCssClass;\r\n }\r\n if (hasFrozenColumns() && i <= options.frozenColumn) {\r\n div.classList.add(\"frozen\");\r\n }\r\n var header = $(div);\r\n header.appendTo($headerTarget);\r\n header.data(\"column\", m);\r\n // var header = $(\"<div class='ui-state-default slick-header-column' />\")\r\n // .html(\"<span class='slick-column-name'>\" + m.name + \"</span>\")\r\n // .width(m.width - headerColumnWidthDiff)\r\n // .attr(\"id\", \"\" + uid + m.id)\r\n // .attr(\"title\", m.toolTip || \"\")\r\n // .data(\"column\", m)\r\n // .addClass(m.headerCssClass || \"\")\r\n // .addClass(hasFrozenColumns() && i <= options.frozenColumn? 'frozen': '')\r\n // .appendTo($headerTarget);\r\n\r\n if (options.enableColumnReorder || m.sortable) {\r\n header\r\n .on(\"mouseenter\", onMouseEnter)\r\n .on(\"mouseleave\", onMouseLeave);\r\n }\r\n\r\n if (m.sortable) {\r\n header.addClass(\"slick-header-sortable\");\r\n var sortIndicator = document.createElement(\"span\");\r\n sortIndicator.className = \"slick-sort-indicator\"\r\n + (options.numberedMultiColumnSort && !options.sortColNumberInSeparateSpan ? \" slick-sort-indicator-numbered\" : \"\");\r\n header.append(sortIndicator);\r\n if (options.numberedMultiColumnSort && options.sortColNumberInSeparateSpan) {\r\n var numIndicator = document.createElement(\"span\");\r\n numIndicator.className = \"slick-sort-indicator-numbered\";\r\n header.append(numIndicator);\r\n }\r\n }\r\n\r\n trigger(self.onHeaderCellRendered, {\r\n \"node\": header[0],\r\n \"column\": m,\r\n \"grid\": self\r\n });\r\n\r\n if (options.showHeaderRow) {\r\n var headerRowCell = $(\"<div class='ui-state-default slick-headerrow-column l\" + i + \" r\" + i + \"'></div>\")\r\n .data(\"column\", m)\r\n .addClass(hasFrozenColumns() && i <= options.frozenColumn ? \"frozen\" : \"\")\r\n .appendTo($headerRowTarget);\r\n\r\n trigger(self.onHeaderRowCellRendered, {\r\n \"node\": headerRowCell[0],\r\n \"column\": m,\r\n \"grid\": self\r\n });\r\n }\r\n if (options.createFooterRow && options.showFooterRow) {\r\n var footerRowCell = $(\"<div class='ui-state-default slick-footerrow-column l\" + i + \" r\" + i + \"'></div>\")\r\n .data(\"column\", m)\r\n .appendTo($footerRow);\r\n\r\n trigger(self.onFooterRowCellRendered, {\r\n \"node\": footerRowCell[0],\r\n \"column\": m,\r\n \"grid\": self\r\n });\r\n }\r\n }\r\n\r\n setSortColumns(sortColumns);\r\n // setupColumnResize();\r\n // if (options.enableColumnReorder) {\r\n // if (typeof options.enableColumnReorder == 'function') {\r\n // options.enableColumnReorder(self, $headers, headerColumnWidthDiff, setColumns, setupColumnResize, columns, getColumnIndex, uid, trigger);\r\n // } else {\r\n // setupColumnReorder();\r\n // }\r\n // }\r\n }\r\n\r\n function setupColumnSort() {\r\n $headers.on(\"click\", function (e) {\r\n\r\n let ctrlPressed: boolean = e.metaKey || e.ctrlKey;\r\n if ($(e.target).hasClass(\"rs-r\")) {\r\n return;\r\n }\r\n\r\n var $col = $(e.target).closestClass(\"slick-header-column\");\r\n if (!$col.length) {\r\n return;\r\n }\r\n\r\n var column = $col.data(\"column\");\r\n if (column.sortable) {\r\n if (!getEditorLock().commitCurrentEdit()) {\r\n return;\r\n }\r\n\r\n var sortColumn = null;\r\n var i = 0;\r\n for (; i < sortColumns.length; i++) {\r\n if (sortColumns[i].columnId == column.id) {\r\n sortColumn = sortColumns[i];\r\n sortColumn.sortAsc = !sortColumn.sortAsc;\r\n break;\r\n }\r\n }\r\n var hadSortCol = !!sortColumn;\r\n\r\n if (options.tristateMultiColumnSort) {\r\n if (!sortColumn) {\r\n sortColumn = { columnId: column.id, sortAsc: column.defaultSortAsc };\r\n }\r\n if (hadSortCol && sortColumn.sortAsc) {\r\n // three state: remove sort rather than go back to ASC\r\n sortColumns.splice(i, 1);\r\n sortColumn = null;\r\n }\r\n if (!options.multiColumnSort) { sortColumns = []; }\r\n if (sortColumn && (!hadSortCol || !options.multiColumnSort)) {\r\n sortColumns.push(sortColumn);\r\n }\r\n } else {\r\n // legacy behaviour\r\n if (ctrlPressed && options.multiColumnSort) {\r\n if (sortColumn) {\r\n sortColumns.splice(i, 1);\r\n }\r\n } else {\r\n if ((!e.shiftKey && !ctrlPressed) || !options.multiColumnSort) {\r\n sortColumns = [];\r\n }\r\n\r\n if (!sortColumn) {\r\n sortColumn = { columnId: column.id, sortAsc: column.defaultSortAsc };\r\n sortColumns.push(sortColumn);\r\n } else if (sortColumns.length == 0) {\r\n sortColumns.push(sortColumn);\r\n }\r\n }\r\n }\r\n\r\n setSortColumns(sortColumns);\r\n\r\n if (!options.multiColumnSort) {\r\n trigger(self.onSort, {\r\n multiColumnSort: false,\r\n columnId: (sortColumns.length > 0 ? column.id : null),\r\n sortCol: (sortColumns.length > 0 ? column : null),\r\n sortAsc: (sortColumns.length > 0 ? sortColumns[0].sortAsc : true)\r\n }, e);\r\n } else {\r\n trigger(self.onSort, {\r\n multiColumnSort: true,\r\n sortCols: sortColumns.map(function (col) {\r\n return { columnId: columns[getColumnIndex(col.columnId)].id, sortCol: columns[getColumnIndex(col.columnId)], sortAsc: col.sortAsc };\r\n })\r\n }, e);\r\n }\r\n }\r\n });\r\n }\r\n\r\n function currentPositionInHeader(id) {\r\n var currentPosition = 0;\r\n $.each($headers.find(\".slick-header-column\"), function (i) {\r\n if (this.id == id) {\r\n currentPosition = i;\r\n return false;\r\n }\r\n });\r\n\r\n return currentPosition;\r\n }\r\n\r\n // function limitPositionInGroup(idColumn) {\r\n // var groupColumnOfPreviousPosition,\r\n // startLimit = 0,\r\n // endLimit = 0;\r\n\r\n // treeColumns\r\n // .getColumnsInDepth($groupHeadersL.length - 1)\r\n // .some(function (groupColumn) {\r\n // startLimit = endLimit;\r\n // endLimit += groupColumn.columns.length;\r\n\r\n // groupColumn.columns.some(function (column) {\r\n\r\n // if (column.id === idColumn) {\r\n // groupColumnOfPreviousPosition = groupColumn;\r\n // }\r\n\r\n // return groupColumnOfPreviousPosition;\r\n // });\r\n\r\n // return groupColumnOfPreviousPosition;\r\n // });\r\n\r\n // endLimit--;\r\n\r\n // return {\r\n // start: startLimit,\r\n // end: endLimit,\r\n // group: groupColumnOfPreviousPosition\r\n // };\r\n // }\r\n\r\n function remove(arr, elem) {\r\n var index = arr.lastIndexOf(elem);\r\n if (index > -1) {\r\n arr.splice(index, 1);\r\n remove(arr, elem);\r\n }\r\n }\r\n\r\n // function columnPositionValidInGroup($item: IjQueryWrapper) {\r\n // var currentPosition = currentPositionInHeader($item[0].id);\r\n // var limit = limitPositionInGroup($item.data(\"column\").id);\r\n // var positionValid = limit.start <= currentPosition && currentPosition <= limit.end;\r\n\r\n // return {\r\n // limit: limit,\r\n // valid: positionValid,\r\n // message: positionValid ? \"\" : \"Column \\\"\".concat($item[0].textContent, \"\\\" can be reordered only within the \\\"\", limit.group.name, \"\\\" group!\")\r\n // };\r\n // }\r\n\r\n // function setupColumnReorder() {\r\n // if (1) { return; }\r\n // var columnScrollTimer = null;\r\n\r\n // function scrollColumnsRight() {\r\n // $viewportScrollContainerX[0].scrollLeft = $viewportScrollContainerX[0].scrollLeft + 10;\r\n // }\r\n\r\n // function scrollColumnsLeft() {\r\n // $viewportScrollContainerX[0].scrollLeft = $viewportScrollContainerX[0].scrollLeft - 10;\r\n // }\r\n\r\n // var canDragScroll;\r\n // // $headers.sortable({\r\n // // containment: \"parent\",\r\n // // distance: 3,\r\n // // axis: \"x\",\r\n // // cursor: \"default\",\r\n // // tolerance: \"intersection\",\r\n // // helper: \"clone\",\r\n // // placeholder: \"slick-sortable-placeholder ui-state-default slick-header-column\",\r\n // // start: function (e, ui) {\r\n // // ui.placeholder.width(ui.helper.outerWidth() - headerColumnWidthDiff);\r\n // // canDragScroll = !hasFrozenColumns() ||\r\n // // (ui.placeholder.offset().left + ui.placeholder.width()) > $viewportScrollContainerX.offset().left;\r\n // // $(ui.helper).addClass(\"slick-header-column-active\");\r\n // // },\r\n // // beforeStop: function (e, ui) {\r\n // // $(ui.helper).removeClass(\"slick-header-column-active\");\r\n // // },\r\n // // sort: function (e, ui) {\r\n // // if (canDragScroll && e.originalEvent.pageX > $container[0].clientWidth) {\r\n // // if (!(columnScrollTimer)) {\r\n // // columnScrollTimer = setInterval(\r\n // // scrollColumnsRight, 100);\r\n // // }\r\n // // } else if (canDragScroll && e.originalEvent.pageX < $viewportScrollContainerX.offset().left) {\r\n // // if (!(columnScrollTimer)) {\r\n // // columnScrollTimer = setInterval(\r\n // // scrollColumnsLeft, 100);\r\n // // }\r\n // // } else {\r\n // // clearInterval(columnScrollTimer);\r\n // // columnScrollTimer = null;\r\n // // }\r\n // // },\r\n // // stop: function (e, ui) {\r\n // // var cancel = false;\r\n // // clearInterval(columnScrollTimer);\r\n // // columnScrollTimer = null;\r\n // // var limit = null;\r\n\r\n // // if (treeColumns.hasDepth()) {\r\n // // var validPositionInGroup = columnPositionValidInGroup(ui.item);\r\n // // limit = validPositionInGroup.limit;\r\n\r\n // // cancel = !validPositionInGroup.valid;\r\n\r\n // // if (cancel)\r\n // // alert(validPositionInGroup.message);\r\n // // }\r\n\r\n // // if (cancel || !getEditorLock().commitCurrentEdit()) {\r\n // // //$(this).sortable(\"cancel\");\r\n // // return;\r\n // // }\r\n\r\n // // var reorderedIds = $headerL.sortable(\"toArray\");\r\n // // reorderedIds = reorderedIds.concat($headerR.sortable(\"toArray\"));\r\n\r\n // // var reorderedColumns = [];\r\n // // for (var i = 0; i < reorderedIds.length; i++) {\r\n // // reorderedColumns.push(columns[getColumnIndex(reorderedIds[i].replace(uid, \"\"))]);\r\n // // }\r\n // // setColumns(reorderedColumns);\r\n\r\n // // trigger(self.onColumnsReordered, { impactedColumns : getImpactedColumns( limit ) });\r\n // // e.stopPropagation();\r\n // // setupColumnResize();\r\n // // }\r\n // // });\r\n // }\r\n\r\n function getImpactedColumns(limit) {\r\n var impactedColumns = [];\r\n\r\n if (limit != undefined) {\r\n\r\n for (var i = limit.start; i <= limit.end; i++) {\r\n impactedColumns.push(columns[i]);\r\n }\r\n } else {\r\n\r\n impactedColumns = columns;\r\n }\r\n\r\n return impactedColumns;\r\n }\r\n\r\n function setupColumnMoveAndResize() {\r\n\r\n for (const c of ($container.find(\".slick-header-columns\") as any)) {\r\n Resizable(c, {\r\n resizeDelta: options.resizeDelta,\r\n onResize: new EventHandler((evt) => {\r\n processColumnResize(evt.target, evt.x);\r\n }),\r\n onStart: new EventHandler((evt) => {\r\n startColumnResize(evt.target, evt.x);\r\n }),\r\n onStop: new EventHandler((evt) => {\r\n finishColumnResize();\r\n })\r\n });\r\n // c.addEventListener(\"js-rs-resize\", (evt) => {\r\n // processColumnResize(evt.detail.target, evt.detail.pageX);\r\n // });\r\n // c.addEventListener(\"js-rs-start\", (evt) => {\r\n // startColumnResize(evt.detail.target, evt.detail.pageX);\r\n // });\r\n // c.addEventListener(\"js-rs-stop\", (evt) => {\r\n // finishColumnResize();\r\n // });\r\n }\r\n\r\n const mouseDownFnc = function (e) {\r\n let arg: MouseEvent = e;\r\n let $target: IjQueryWrapper = $(e.target).closestClass(\"slick-header-column\");\r\n if ($target.length === 0) {\r\n // special case for last column\r\n if (e.target.classList.contains(\"slick-header-columns\")) {\r\n $target = $((e.target as HTMLDivElement).lastChild as HTMLElement);\r\n } else {\r\n return;\r\n }\r\n }\r\n\r\n const x: number = arg.pageX != null ? arg.pageX : ((arg as unknown) as TouchEvent).touches[0].pageX;\r\n let columnInfo: ISlickColumn = $target.data(\"column\");\r\n\r\n if (options.enableColumnReorder) {\r\n startColumnDragging($target, x);\r\n } else {\r\n //sort\r\n }\r\n };\r\n\r\n $headers.on(\"mousedown\", mouseDownFnc);\r\n $headers.on(\"touchstart\", mouseDownFnc);\r\n\r\n }\r\n\r\n var dragColStartX = 0;\r\n var dragColCurrentX = 0;\r\n var draggedEl: HTMLElement;\r\n var dragGhost: HTMLElement;\r\n\r\n function startColumnDragging($target: IjQueryWrapper, x: number) {\r\n dragColStartX = x;\r\n dragColCurrentX = x;\r\n draggedEl = $target[0];\r\n dragGhost = document.createElement(\"div\");\r\n dragGhost.className = \"slick-col-ghost\";\r\n dragGhost.style.left = draggedEl.offsetLeft + \"px\";\r\n dragGhost.style.height = draggedEl.clientHeight + \"px\";\r\n dragGhost.style.width = draggedEl.clientWidth + \"px\";\r\n let ghostContent = document.createElement(\"div\");\r\n ghostContent.className = \"slick-ghost-content\";\r\n ghostContent.style.height = draggedEl.clientHeight + \"px\";\r\n dragGhost.appendChild(ghostContent);\r\n draggedEl.classList.add(\"slick-header-column-active\");\r\n draggedEl.parentElement.appendChild(dragGhost);\r\n window.addEventListener(\"mousemove\", processColumnDrag);\r\n window.addEventListener(\"touchmove\", processColumnDrag);\r\n window.addEventListener(\"mouseup\", finishColumnDrag);\r\n window.addEventListener(\"touchend\", finishColumnDrag);\r\n }\r\n\r\n function processColumnDrag(evt: MouseEvent) {\r\n const x: number = evt.pageX != null ? evt.pageX : ((evt as unknown) as TouchEvent).touches[0].pageX;\r\n let prevEl: HTMLElement = draggedEl.previousElementSibling as HTMLElement;\r\n let nextEl: HTMLElement = draggedEl.nextElementSibling as HTMLElement;\r\n\r\n let prevWidth = prevEl != null ? prevEl.offsetWidth : -1;\r\n let nextWidth = nextEl != null ? nextEl.offsetWidth : -1;\r\n let draggedDistance = x - dragColCurrentX;\r\n dragGhost.style.left = (draggedEl.offsetLeft + draggedDistance) + \"px\";\r\n if (prevWidth >= 0 && draggedDistance < -prevWidth) {\r\n if (prevEl != null) {\r\n draggedEl.parentNode.insertBefore(draggedEl, prevEl);\r\n }\r\n } else if (nextWidth >= 0 && draggedDistance > nextWidth) {\r\n if (nextEl != null) {\r\n draggedEl.parentNode.insertBefore(nextEl, draggedEl);\r\n }\r\n } else {\r\n return;\r\n }\r\n dragColCurrentX = x;\r\n }\r\n\r\n function applyColumnResort(arg: any) {\r\n\r\n if (!getEditorLock().commitCurrentEdit()) {\r\n return;\r\n }\r\n\r\n let $colsL = $headerL.find(\".slick-header-column\");\r\n let $colsR = $headerR.find(\".slick-header-column\");\r\n let reorderedIds = (($colsL as unknown) as HTMLElement[]).map((e) => e.id);\r\n reorderedIds = reorderedIds.concat((($colsR as unknown) as HTMLElement[]).map((e) => e.id));\r\n\r\n let reorderedColumns = [];\r\n for (let i = 0; i < reorderedIds.length; i++) {\r\n reorderedColumns.push(columns[getColumnIndex(reorderedIds[i].replace(uid, \"\"))]);\r\n }\r\n setColumns(reorderedColumns);\r\n\r\n trigger(self.onColumnsReordered, { impactedColumns: getImpactedColumns(0 /*limit*/) }); // tODO limit\r\n }\r\n\r\n function finishColumnDrag(arg: any) {\r\n const x: number = arg.pageX != null ? arg.pageX : (arg.touches.length > 0 ? arg.touches : arg.changedTouches)[0].pageX;\r\n window.removeEventListener(\"mousemove\", processColumnDrag);\r\n window.removeEventListener(\"mouseup\", finishColumnDrag);\r\n window.removeEventListener(\"touchmove\", processColumnDrag);\r\n window.removeEventListener(\"touchend\", finishColumnDrag);\r\n $headers.find(\".slick-header-column-active\").removeClass(\"slick-header-column-active\");\r\n if (dragGhost != null) {\r\n dragGhost.parentElement.removeChild(dragGhost);\r\n }\r\n dragGhost = null;\r\n if (Math.abs(dragColStartX - x) > options.dragDelta) {\r\n applyColumnResort(arg);\r\n } else {\r\n //sort\r\n }\r\n }\r\n\r\n\r\n let pageX, minPageX, maxPageX;\r\n\r\n function startColumnResize(target: HTMLElement, x: number) {\r\n const $target = $(target);\r\n // columnResizeDragging = true;\r\n if (!getEditorLock().commitCurrentEdit()) {\r\n return false;\r\n }\r\n pageX = x;\r\n let colIdx = $target.index();\r\n let columnElements = $headers.children();\r\n let shrinkLeewayOnRight = null, stretchLeewayOnRight = null;\r\n $target.addClass(\"slick-header-column-active\");\r\n // lock each column's width option to current width\r\n $.each(columnElements, function (i, e) {\r\n if (i >= columns.length) { return; }\r\n columns[i].previousWidth = $(e).width() as number;\r\n });\r\n if (options.forceFitColumns) {\r\n shrinkLeewayOnRight = 0;\r\n stretchLeewayOnRight = 0;\r\n // colums on right affect maxPageX/minPageX\r\n for (let j = colIdx + 1; j < columns.length; j++) {\r\n let c = columns[j];\r\n if (c.resizable) {\r\n if (stretchLeewayOnRight !== null) {\r\n if (c.maxWidth) {\r\n stretchLeewayOnRight += c.maxWidth - c.previousWidth;\r\n } else {\r\n stretchLeewayOnRight = null;\r\n }\r\n }\r\n shrinkLeewayOnRight += c.previousWidth - Math.max(c.minWidth || 0, absoluteColumnMinWidth);\r\n }\r\n }\r\n }\r\n let shrinkLeewayOnLeft = 0, stretchLeewayOnLeft = 0;\r\n for (let j = 0; j <= colIdx; j++) {\r\n // columns on left only affect minPageX\r\n let c = columns[j];\r\n if (c.resizable) {\r\n if (stretchLeewayOnLeft !== null) {\r\n if (c.maxWidth) {\r\n stretchLeewayOnLeft += c.maxWidth - c.previousWidth;\r\n } else {\r\n stretchLeewayOnLeft = null;\r\n }\r\n }\r\n shrinkLeewayOnLeft += c.previousWidth - Math.max(c.minWidth || 0, absoluteColumnMinWidth);\r\n }\r\n }\r\n if (shrinkLeewayOnRight === null) {\r\n shrinkLeewayOnRight = 100000;\r\n }\r\n if (shrinkLeewayOnLeft === null) {\r\n shrinkLeewayOnLeft = 100000;\r\n }\r\n if (stretchLeewayOnRight === null) {\r\n stretchLeewayOnRight = 100000;\r\n }\r\n if (stretchLeewayOnLeft === null) {\r\n stretchLeewayOnLeft = 100000;\r\n }\r\n maxPageX = pageX + Math.min(shrinkLeewayOnRight, stretchLeewayOnLeft);\r\n minPageX = pageX - Math.min(shrinkLeewayOnLeft, stretchLeewayOnRight);\r\n // $current_resize_target = $target;\r\n }\r\n\r\n\r\n\r\n function processColumnResize(target: HTMLElement, currentX: number) {\r\n // if (options.resizeDelta && Math.abs(oldResizeX - newx) <= options.resizeDelta)\r\n // return;\r\n let $target = $(target);\r\n // const width = $target.width() as number;\r\n // oldResizeX = newx;\r\n let colIdx = $target.index();\r\n if (hasFrozenColumns() && $target.closestClass(\"slick-header-columns\").hasClass(\"slick-header-columns-right\")) {\r\n colIdx += options.frozenColumn + 1;\r\n }\r\n let actualMinWidth, d = Math.min(maxPageX, Math.max(minPageX, currentX)) - pageX, x;\r\n if (d < 0) { // shrink column\r\n x = d;\r\n\r\n var newCanvasWidthL = 0, newCanvasWidthR = 0;\r\n\r\n for (let j = colIdx; j >= 0; j--) {\r\n let c = columns[j];\r\n if (c.resizable) {\r\n actualMinWidth = Math.max(c.minWidth || 0, absoluteColumnMinWidth);\r\n if (x && c.previousWidth + x < actualMinWidth) {\r\n x += c.previousWidth - actualMinWidth;\r\n c.width = actualMinWidth;\r\n } else {\r\n c.width = c.previousWidth + x;\r\n x = 0;\r\n }\r\n }\r\n }\r\n // return;\r\n\r\n for (let k = 0; k <= colIdx; k++) {\r\n let c = columns[k];\r\n\r\n if (hasFrozenColumns() && (k > options.frozenColumn)) {\r\n newCanvasWidthR += c.width;\r\n } else {\r\n newCanvasWidthL += c.width;\r\n }\r\n }\r\n\r\n if (options.forceFitColumns) {\r\n x = -d;\r\n for (let j = colIdx + 1; j < columns.length; j++) {\r\n let c = columns[j];\r\n if (c.resizable) {\r\n if (x && c.maxWidth && (c.maxWidth - c.previousWidth < x)) {\r\n x -= c.maxWidth - c.previousWidth;\r\n c.width = c.maxWidth;\r\n } else {\r\n c.width = c.previousWidth + x;\r\n x = 0;\r\n }\r\n\r\n if (hasFrozenColumns() && (j > options.frozenColumn)) {\r\n newCanvasWidthR += c.width;\r\n } else {\r\n newCanvasWidthL += c.width;\r\n }\r\n }\r\n }\r\n } else {\r\n for (let j = colIdx + 1; j < columns.length; j++) {\r\n let c = columns[j];\r\n\r\n if (hasFrozenColumns() && (j > options.frozenColumn)) {\r\n newCanvasWidthR += c.width;\r\n } else {\r\n newCanvasWidthL += c.width;\r\n }\r\n }\r\n }\r\n\r\n if (options.forceFitColumns) {\r\n x = -d;\r\n for (let j = colIdx + 1; j < columns.length; j++) {\r\n let c = columns[j];\r\n if (c.resizable) {\r\n if (x && c.maxWidth && (c.maxWidth - c.previousWidth < x)) {\r\n x -= c.maxWidth - c.previousWidth;\r\n c.width = c.maxWidth;\r\n } else {\r\n c.width = c.previousWidth + x;\r\n x = 0;\r\n }\r\n }\r\n }\r\n }\r\n } else { // stretch column\r\n x = d;\r\n\r\n var newCanvasWidthL = 0, newCanvasWidthR = 0;\r\n\r\n for (let j = colIdx; j >= 0; j--) {\r\n let c = columns[j];\r\n if (c.resizable) {\r\n if (x && c.maxWidth && (c.maxWidth - c.previousWidth < x)) {\r\n x -= c.maxWidth - c.previousWidth;\r\n c.width = c.maxWidth;\r\n } else {\r\n c.width = c.previousWidth + x;\r\n x = 0;\r\n }\r\n }\r\n }\r\n\r\n for (let k = 0; k <= colIdx; k++) {\r\n let c = columns[k];\r\n\r\n if (hasFrozenColumns() && (k > options.frozenColumn)) {\r\n newCanvasWidthR += c.width;\r\n } else {\r\n newCanvasWidthL += c.width;\r\n }\r\n }\r\n\r\n if (options.forceFitColumns) {\r\n x = -d;\r\n for (let j = colIdx + 1; j < columns.length; j++) {\r\n let c = columns[j];\r\n if (c.resizable) {\r\n actualMinWidth = Math.max(c.minWidth || 0, absoluteColumnMinWidth);\r\n if (x && c.previousWidth + x < actualMinWidth) {\r\n x += c.previousWidth - actualMinWidth;\r\n c.width = actualMinWidth;\r\n } else {\r\n c.width = c.previousWidth + x;\r\n x = 0;\r\n }\r\n\r\n if (hasFrozenColumns() && (j > options.frozenColumn)) {\r\n newCanvasWidthR += c.width;\r\n } else {\r\n newCanvasWidthL += c.width;\r\n }\r\n }\r\n }\r\n } else {\r\n for (let j = colIdx + 1; j < columns.length; j++) {\r\n let c = columns[j];\r\n\r\n if (hasFrozenColumns() && (j > options.frozenColumn)) {\r\n newCanvasWidthR += c.width;\r\n } else {\r\n newCanvasWidthL += c.width;\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (hasFrozenColumns() && newCanvasWidthL != canvasWidthL) {\r\n $headerL.width(newCanvasWidthL + 1000);\r\n $paneHeaderR.css(\"left\", newCanvasWidthL);\r\n }\r\n\r\n applyColumnHeaderWidths();\r\n // applyColumnGroupHeaderWidths();\r\n if (options.syncColumnCellResize) {\r\n applyColumnWidths();\r\n }\r\n\r\n }\r\n\r\n function finishColumnResize() {\r\n const changedColumns = [];\r\n\r\n let newWidth: number;\r\n let columnElements = $headers.children();\r\n $headers.find(\".slick-header-column-active\").removeClass(\"slick-header-column-active\");\r\n for (let j = 0; j < columns.length; j++) {\r\n let c = columns[j];\r\n newWidth = $(columnElements[j]).width() as number;\r\n\r\n if (c.previousWidth !== newWidth) {\r\n changedColumns.push({cell: j,\r\n width: newWidth,\r\n previousWidth: c.previousWidth,\r\n column: c\r\n });\r\n if (c.rerenderOnResize) {\r\n invalidateAllRows();\r\n break;\r\n }\r\n }\r\n }\r\n updateCanvasWidth(true);\r\n resizeCanvas();\r\n handleScroll();\r\n\r\n trigger(self.onColumnsResized, changedColumns);\r\n }\r\n\r\n\r\n // function setupColumnResize() {\r\n // if (1) return;\r\n // var $col, j, k, c, pageX, columnElements: IjQueryWrapper, minPageX, maxPageX, firstResizable, lastResizable;\r\n // columnElements = $headers.children();\r\n // columnElements.find(\".slick-resizable-handle\").remove();\r\n // $.each(columnElements, function (i, e) {\r\n // if (i >= columns.length) { return; }\r\n // if (columns[i].resizable) {\r\n // if (firstResizable === undefined) {\r\n // firstResizable = i;\r\n // }\r\n // lastResizable = i;\r\n // }\r\n // });\r\n // if (firstResizable === undefined) {\r\n // return;\r\n // }\r\n // $.each(columnElements, function (i, e) {\r\n // if (i >= columns.length) { return; }\r\n // if (i < firstResizable || (options.forceFitColumns && i >= lastResizable)) {\r\n // return;\r\n // }\r\n // $col = $(e);\r\n // var resHandle = document.createElement(\"div\");\r\n // resHandle.className = \"slick-resizable-handle\";\r\n // e.appendChild(resHandle);\r\n // $(resHandle).on(\"dragstart\", function (e, dd) {\r\n // if (!getEditorLock().commitCurrentEdit()) {\r\n // return false;\r\n // }\r\n // pageX = e.pageX;\r\n // resHandle.parentElement.classList.add(\"slick-header-column-active\");\r\n // var shrinkLeewayOnRight = null, stretchLeewayOnRight = null;\r\n // // lock each column's width option to current width\r\n // $.each(columnElements, function (i, e) {\r\n // if (i >= columns.length) { return; }\r\n // columns[i].previousWidth = $(e).width(); //.outerWidth();\r\n // });\r\n // if (options.forceFitColumns) {\r\n // shrinkLeewayOnRight = 0;\r\n // stretchLeewayOnRight = 0;\r\n // // colums on right affect maxPageX/minPageX\r\n // for (j = i + 1; j < columns.length; j++) {\r\n // c = columns[j];\r\n // if (c.resizable) {\r\n // if (stretchLeewayOnRight !== null) {\r\n // if (c.maxWidth) {\r\n // stretchLeewayOnRight += c.maxWidth - c.previousWidth;\r\n // } else {\r\n // stretchLeewayOnRight = null;\r\n // }\r\n // }\r\n // shrinkLeewayOnRight += c.previousWidth - Math.max(c.minWidth || 0, absoluteColumnMinWidth);\r\n // }\r\n // }\r\n // }\r\n // var shrinkLeewayOnLeft = 0, stretchLeewayOnLeft = 0;\r\n // for (j = 0; j <= i; j++) {\r\n // // columns on left only affect minPageX\r\n // c = columns[j];\r\n // if (c.resizable) {\r\n // if (stretchLeewayOnLeft !== null) {\r\n // if (c.maxWidth) {\r\n // stretchLeewayOnLeft += c.maxWidth - c.previousWidth;\r\n // } else {\r\n // stretchLeewayOnLeft = null;\r\n // }\r\n // }\r\n // shrinkLeewayOnLeft += c.previousWidth - Math.max(c.minWidth || 0, absoluteColumnMinWidth);\r\n // }\r\n // }\r\n // if (shrinkLeewayOnRight === null) {\r\n // shrinkLeewayOnRight = 100000;\r\n // }\r\n // if (shrinkLeewayOnLeft === null) {\r\n // shrinkLeewayOnLeft = 100000;\r\n // }\r\n // if (stretchLeewayOnRight === null) {\r\n // stretchLeewayOnRight = 100000;\r\n // }\r\n // if (stretchLeewayOnLeft === null) {\r\n // stretchLeewayOnLeft = 100000;\r\n // }\r\n // maxPageX = pageX + Math.min(shrinkLeewayOnRight, stretchLeewayOnLeft);\r\n // minPageX = pageX - Math.min(shrinkLeewayOnLeft, stretchLeewayOnRight);\r\n // })\r\n // .on(\"drag\", function (e, dd) {\r\n // columnResizeDragging = true;\r\n // var actualMinWidth, d = Math.min(maxPageX, Math.max(minPageX, e.pageX)) - pageX, x;\r\n // if (d < 0) { // shrink column\r\n // x = d;\r\n\r\n // var newCanvasWidthL = 0, newCanvasWidthR = 0;\r\n\r\n // for (j = i; j >= 0; j--) {\r\n // c = columns[j];\r\n // if (c.resizable) {\r\n // actualMinWidth = Math.max(c.minWidth || 0, absoluteColumnMinWidth);\r\n // if (x && c.previousWidth + x < actualMinWidth) {\r\n // x += c.previousWidth - actualMinWidth;\r\n // c.width = actualMinWidth;\r\n // } else {\r\n // c.width = c.previousWidth + x;\r\n // x = 0;\r\n // }\r\n // }\r\n // }\r\n\r\n // for (k = 0; k <= i; k++) {\r\n // c = columns[k];\r\n\r\n // if (hasFrozenColumns() && (k > options.frozenColumn)) {\r\n // newCanvasWidthR += c.width;\r\n // } else {\r\n // newCanvasWidthL += c.width;\r\n // }\r\n // }\r\n\r\n // if (options.forceFitColumns) {\r\n // x = -d;\r\n // for (j = i + 1; j < columns.length; j++) {\r\n // c = columns[j];\r\n // if (c.resizable) {\r\n // if (x && c.maxWidth && (c.maxWidth - c.previousWidth < x)) {\r\n // x -= c.maxWidth - c.previousWidth;\r\n // c.width = c.maxWidth;\r\n // } else {\r\n // c.width = c.previousWidth + x;\r\n // x = 0;\r\n // }\r\n\r\n // if (hasFrozenColumns() && (j > options.frozenColumn)) {\r\n // newCanvasWidthR += c.width;\r\n // } else {\r\n // newCanvasWidthL += c.width;\r\n // }\r\n // }\r\n // }\r\n // } else {\r\n // for (j = i + 1; j < columns.length; j++) {\r\n // c = columns[j];\r\n\r\n // if (hasFrozenColumns() && (j > options.frozenColumn)) {\r\n // newCanvasWidthR += c.width;\r\n // } else {\r\n // newCanvasWidthL += c.width;\r\n // }\r\n // }\r\n // }\r\n\r\n // if (options.forceFitColumns) {\r\n // x = -d;\r\n // for (j = i + 1; j < columns.length; j++) {\r\n // c = columns[j];\r\n // if (c.resizable) {\r\n // if (x && c.maxWidth && (c.maxWidth - c.previousWidth < x)) {\r\n // x -= c.maxWidth - c.previousWidth;\r\n // c.width = c.maxWidth;\r\n // } else {\r\n // c.width = c.previousWidth + x;\r\n // x = 0;\r\n // }\r\n // }\r\n // }\r\n // }\r\n // } else { // stretch column\r\n // x = d;\r\n\r\n // var newCanvasWidthL = 0, newCanvasWidthR = 0;\r\n\r\n // for (j = i; j >= 0; j--) {\r\n // c = columns[j];\r\n // if (c.resizable) {\r\n // if (x && c.maxWidth && (c.maxWidth - c.previousWidth < x)) {\r\n // x -= c.maxWidth - c.previousWidth;\r\n // c.width = c.maxWidth;\r\n // } else {\r\n // c.width = c.previousWidth + x;\r\n // x = 0;\r\n // }\r\n // }\r\n // }\r\n\r\n // for (k = 0; k <= i; k++) {\r\n // c = columns[k];\r\n\r\n // if (hasFrozenColumns() && (k > options.frozenColumn)) {\r\n // newCanvasWidthR += c.width;\r\n // } else {\r\n // newCanvasWidthL += c.width;\r\n // }\r\n // }\r\n\r\n // if (options.forceFitColumns) {\r\n // x = -d;\r\n // for (j = i + 1; j < columns.length; j++) {\r\n // c = columns[j];\r\n // if (c.resizable) {\r\n // actualMinWidth = Math.max(c.minWidth || 0, absoluteColumnMinWidth);\r\n // if (x && c.previousWidth + x < actualMinWidth) {\r\n // x += c.previousWidth - actualMinWidth;\r\n // c.width = actualMinWidth;\r\n // } else {\r\n // c.width = c.previousWidth + x;\r\n // x = 0;\r\n // }\r\n\r\n // if (hasFrozenColumns() && (j > options.frozenColumn)) {\r\n // newCanvasWidthR += c.width;\r\n // } else {\r\n // newCanvasWidthL += c.width;\r\n // }\r\n // }\r\n // }\r\n // } else {\r\n // for (j = i + 1; j < columns.length; j++) {\r\n // c = columns[j];\r\n\r\n // if (hasFrozenColumns() && (j > options.frozenColumn)) {\r\n // newCanvasWidthR += c.width;\r\n // } else {\r\n // newCanvasWidthL += c.width;\r\n // }\r\n // }\r\n // }\r\n // }\r\n\r\n // if (hasFrozenColumns() && newCanvasWidthL != canvasWidthL) {\r\n // $headerL.width(newCanvasWidthL + 1000);\r\n // $paneHeaderR.css('left', newCanvasWidthL);\r\n // }\r\n\r\n // applyColumnHeaderWidths();\r\n // applyColumnGroupHeaderWidths();\r\n // if (options.syncColumnCellResize) {\r\n // applyColumnWidths();\r\n // }\r\n // })\r\n // .on(\"dragend\", function (e, dd) {\r\n // var newWidth;\r\n // resHandle.parentElement.classList.remove(\"slick-header-column-active\");\r\n // for (j = 0; j < columns.length; j++) {\r\n // c = columns[j];\r\n // newWidth = $(columnElements[j]).width(); //.outerWidth();\r\n\r\n // if (c.previousWidth !== newWidth && c.rerenderOnResize) {\r\n // invalidateAllRows();\r\n // }\r\n // }\r\n // updateCanvasWidth(true);\r\n // render();\r\n // trigger(self.onColumnsResized, {});\r\n // setTimeout(function () { columnResizeDragging = false; }, 300);\r\n // });\r\n // });\r\n // }\r\n\r\n function getVBoxDelta($el) {\r\n var p = [\"borderTopWidth\", \"borderBottomWidth\", \"paddingTop\", \"paddingBottom\"];\r\n var delta = 0;\r\n $.each(p, function (n, val) {\r\n delta += parseFloat($el.css(val)) || 0;\r\n });\r\n return delta;\r\n }\r\n\r\n function setFrozenOptions() {\r\n options.frozenColumn = (options.frozenColumn >= 0 && options.frozenColumn < columns.length)\r\n ? options.frozenColumn\r\n : -1;\r\n\r\n if (options.frozenRow > -1) {\r\n hasFrozenRows = true;\r\n frozenRowsHeight = getRowTop(options.frozenRow);\r\n\r\n var dataLength = getDataLength();\r\n\r\n actualFrozenRow = (options.frozenBottom)\r\n ? (dataLength - options.frozenRow)\r\n : options.frozenRow;\r\n } else {\r\n hasFrozenRows = false;\r\n }\r\n }\r\n\r\n function setPaneVisibility() {\r\n if (hasFrozenColumns()) {\r\n $.each($paneHeaderR, function (idx, el) { el.style.display = \"\"; });\r\n $.each($paneTopR, function (idx, el) { el.style.display = \"\"; });\r\n\r\n if (hasFrozenRows) {\r\n $.each($paneBottomL, function (idx, el) { el.style.display = \"\"; });\r\n $.each($paneBottomR, function (idx, el) { el.style.display = \"\"; });\r\n } else {\r\n $.each($paneBottomR, function (idx, el) { el.style.display = \"none\"; });\r\n $.each($paneBottomL, function (idx, el) { el.style.display = \"none\"; });\r\n }\r\n } else {\r\n $.each($paneHeaderR, function (idx, el) { el.style.display = \"none\"; });\r\n $.each($paneTopR, function (idx, el) { el.style.display = \"none\"; });\r\n $.each($paneBottomR, function (idx, el) { el.style.display = \"none\"; });\r\n\r\n if (hasFrozenRows) {\r\n $.each($paneBottomL, function (idx, el) { el.style.display = \"\"; });\r\n } else {\r\n $.each($paneBottomR, function (idx, el) { el.style.display = \"none\"; });\r\n $.each($paneBottomL, function (idx, el) { el.style.display = \"none\"; });\r\n }\r\n }\r\n }\r\n\r\n function setOverflow() {\r\n $viewportTopL\r\n .css(\"overflow-x\", options.alwaysShowHorizontalScroll ? \"scroll\" : (hasFrozenColumns()) ? (hasFrozenRows && !options.alwaysAllowHorizontalScroll ? \"hidden\" : \"scroll\") : (hasFrozenRows && !options.alwaysAllowHorizontalScroll ? \"hidden\" : \"auto\"))\r\n .css(\"overflow-y\", options.alwaysShowVerticalScroll ? \"scroll\" : ((hasFrozenColumns()) ? (hasFrozenRows ? \"hidden\" : \"hidden\") : (hasFrozenRows ? \"scroll\" : \"auto\"))\r\n );\r\n\r\n $viewportTopR\r\n .css(\"overflow-x\", options.alwaysShowHorizontalScroll ? \"scroll\" : (hasFrozenColumns()) ? (hasFrozenRows && !options.alwaysAllowHorizontalScroll ? \"hidden\" : \"scroll\") : (hasFrozenRows && !options.alwaysAllowHorizontalScroll ? \"hidden\" : \"auto\"))\r\n .css(\"overflow-y\", options.alwaysShowVerticalScroll ? \"scroll\" : ((hasFrozenColumns()) ? (hasFrozenRows ? \"scroll\" : \"auto\") : (hasFrozenRows ? \"scroll\" : \"auto\"))\r\n );\r\n\r\n $viewportBottomL\r\n .css(\"overflow-x\", options.alwaysShowHorizontalScroll ? \"scroll\" : (hasFrozenColumns()) ? (hasFrozenRows && !options.alwaysAllowHorizontalScroll ? \"scroll\" : \"auto\") : (hasFrozenRows && !options.alwaysAllowHorizontalScroll ? \"auto\" : \"auto\"))\r\n .css(\"overflow-y\", options.alwaysShowVerticalScroll ? \"scroll\" : ((hasFrozenColumns()) ? (hasFrozenRows ? \"hidden\" : \"hidden\") : (hasFrozenRows ? \"scroll\" : \"auto\"))\r\n );\r\n\r\n $viewportBottomR\r\n .css(\"overflow-x\", options.alwaysShowHorizontalScroll ? \"scroll\" : (hasFrozenColumns()) ? (hasFrozenRows && !options.alwaysAllowHorizontalScroll ? \"scroll\" : \"auto\") : (hasFrozenRows && !options.alwaysAllowHorizontalScroll ? \"auto\" : \"auto\"))\r\n .css(\"overflow-y\", options.alwaysShowVerticalScroll ? \"scroll\" : ((hasFrozenColumns()) ? (hasFrozenRows ? \"auto\" : \"auto\") : (hasFrozenRows ? \"auto\" : \"auto\"))\r\n );\r\n if (options.viewportClass) {\r\n $viewportTopL.toggleClass(options.viewportClass, true);\r\n $viewportTopR.toggleClass(options.viewportClass, true);\r\n $viewportBottomL.toggleClass(options.viewportClass, true);\r\n $viewportBottomR.toggleClass(options.viewportClass, true);\r\n }\r\n }\r\n\r\n function setScroller() {\r\n if (hasFrozenColumns()) {\r\n $headerScrollContainer = $headerScrollerR;\r\n $headerRowScrollContainer = $headerRowScrollerR;\r\n $footerRowScrollContainer = $footerRowScrollerR;\r\n\r\n if (hasFrozenRows) {\r\n if (options.frozenBottom) {\r\n $viewportScrollContainerX = $viewportBottomR;\r\n $viewportScrollContainerY = $viewportTopR;\r\n } else {\r\n $viewportScrollContainerX = $viewportScrollContainerY = $viewportBottomR;\r\n }\r\n } else {\r\n $viewportScrollContainerX = $viewportScrollContainerY = $viewportTopR;\r\n }\r\n } else {\r\n $headerScrollContainer = $headerScrollerL;\r\n $headerRowScrollContainer = $headerRowScrollerL;\r\n $footerRowScrollContainer = $footerRowScrollerL;\r\n\r\n if (hasFrozenRows) {\r\n if (options.frozenBottom) {\r\n $viewportScrollContainerX = $viewportBottomL;\r\n $viewportScrollContainerY = $viewportTopL;\r\n } else {\r\n $viewportScrollContainerX = $viewportScrollContainerY = $viewportBottomL;\r\n }\r\n } else {\r\n $viewportScrollContainerX = $viewportScrollContainerY = $viewportTopL;\r\n }\r\n }\r\n }\r\n\r\n function measureCellPaddingAndBorder() {\r\n var el;\r\n var h = [\"borderLeftWidth\", \"borderRightWidth\", \"paddingLeft\", \"paddingRight\"];\r\n var v = [\"borderTopWidth\", \"borderBottomWidth\", \"paddingTop\", \"paddingBottom\"];\r\n\r\n // jquery prior to version 1.8 handles .width setter/getter as a direct css write/read\r\n // jquery 1.8 changed .width to read the true inner element width if box-sizing is set to border-box, and introduced a setter for .outerWidth\r\n // so for equivalent functionality, prior to 1.8 use .width, and after use .outerWidth\r\n // var verArray = $.fn.jquery.split('.');\r\n jQueryNewWidthBehaviour = false; // (verArray[0]==1 && verArray[1]>=8) || verArray[0] >=2;\r\n\r\n el = $(\"<div class='ui-state-default slick-header-column' style='visibility:hidden'>-</div>\").appendTo($headers);\r\n headerColumnWidthDiff = headerColumnHeightDiff = 0;\r\n if (el.css(\"box-sizing\") != \"border-box\" && el.css(\"-moz-box-sizing\") != \"border-box\" && el.css(\"-webkit-box-sizing\") != \"border-box\") {\r\n $.each(h, function (n, val) {\r\n headerColumnWidthDiff += parseFloat(el.css(val)) || 0;\r\n });\r\n $.each(v, function (n, val) {\r\n headerColumnHeightDiff += parseFloat(el.css(val)) || 0;\r\n });\r\n }\r\n el.remove();\r\n\r\n var r = $(\"<div class='slick-row' />\").appendTo($canvas);\r\n el = $(\"<div class='slick-cell' id='' style='visibility:hidden'>-</div>\").appendTo(r);\r\n cellWidthDiff = cellHeightDiff = 0;\r\n if (el.css(\"box-sizing\") != \"border-box\" && el.css(\"-moz-box-sizing\") != \"border-box\" && el.css(\"-webkit-box-sizing\") != \"border-box\") {\r\n $.each(h, function (n, val) {\r\n cellWidthDiff += parseFloat(el.css(val)) || 0;\r\n });\r\n $.each(v, function (n, val) {\r\n cellHeightDiff += parseFloat(el.css(val)) || 0;\r\n });\r\n }\r\n r.remove();\r\n\r\n absoluteColumnMinWidth = Math.max(headerColumnWidthDiff, cellWidthDiff);\r\n }\r\n\r\n function createCssRules() {\r\n let style = document.createElement(\"style\");\r\n style.type = \"text/css\";\r\n $(\"head\").append(style);\r\n $style = $(style);\r\n // $style = $(\"<style type='text/css' rel='stylesheet' />\").appendTo($(\"head\"));\r\n var rowHeight = (options.rowHeight - cellHeightDiff);\r\n var rules = [\r\n \".\" + uid + \" .slick-group-header-column { left: 1000px; }\",\r\n \".\" + uid + \" .slick-header-column { left: 1000px; }\",\r\n \".\" + uid + \" .slick-top-panel { height:\" + options.topPanelHeight + \"px; }\",\r\n \".\" + uid + \" .slick-preheader-panel { height:\" + options.preHeaderPanelHeight + \"px; }\",\r\n \".\" + uid + \" .slick-headerrow-columns { height:\" + options.headerRowHeight + \"px; }\",\r\n \".\" + uid + \" .slick-footerrow-columns { height:\" + options.footerRowHeight + \"px; }\",\r\n \".\" + uid + \" .slick-cell { height:\" + rowHeight + \"px; }\",\r\n \".\" + uid + \" .slick-row { height:\" + options.rowHeight + \"px; }\"\r\n ];\r\n\r\n for (var i = 0; i < columns.length; i++) {\r\n rules.push(\".\" + uid + \" .l\" + i + \" { }\");\r\n rules.push(\".\" + uid + \" .r\" + i + \" { }\");\r\n }\r\n\r\n if ($style[0].styleSheet) { // iE\r\n $style[0].styleSheet.cssText = rules.join(\" \");\r\n } else {\r\n $style[0].appendChild(document.createTextNode(rules.join(\" \")));\r\n }\r\n }\r\n\r\n function getColumnCssRules(idx) {\r\n var i;\r\n if (!stylesheet) {\r\n var sheets = document.styleSheets;\r\n for (i = 0; i < sheets.length; i++) {\r\n if (sheets[i].ownerNode == $style[0]) {\r\n stylesheet = sheets[i];\r\n break;\r\n }\r\n }\r\n\r\n if (!stylesheet) {\r\n throw new Error(\"Cannot find stylesheet.\");\r\n }\r\n\r\n // find and cache column CSS rules\r\n columnCssRulesL = [];\r\n columnCssRulesR = [];\r\n var cssRules = (stylesheet.cssRules || stylesheet.rules);\r\n var matches, columnIdx;\r\n for (i = 0; i < cssRules.length; i++) {\r\n var selector = cssRules[i].selectorText;\r\n if (matches = /\\.l\\d+/.exec(selector)) {\r\n columnIdx = parseInt(matches[0].substr(2, matches[0].length - 2), 10);\r\n columnCssRulesL[columnIdx] = cssRules[i];\r\n } else if (matches = /\\.r\\d+/.exec(selector)) {\r\n columnIdx = parseInt(matches[0].substr(2, matches[0].length - 2), 10);\r\n columnCssRulesR[columnIdx] = cssRules[i];\r\n }\r\n }\r\n }\r\n\r\n return {\r\n \"left\": columnCssRulesL[idx],\r\n \"right\": columnCssRulesR[idx]\r\n };\r\n }\r\n\r\n function removeCssRules() {\r\n $style.remove();\r\n stylesheet = null;\r\n }\r\n\r\n function destroy() {\r\n getEditorLock().cancelCurrentEdit();\r\n\r\n trigger(self.onBeforeDestroy, {});\r\n\r\n var i = plugins.length;\r\n while (i--) {\r\n unregisterPlugin(plugins[i]);\r\n }\r\n\r\n unbindAncestorScrollEvents();\r\n // $container.off(\".slickgrid\"); //TODO TODOFIX\r\n removeCssRules();\r\n\r\n // $canvas.off(\"draginit dragstart dragend drag\"); //TODO TODOFIX\r\n $container.empty().removeClass(uid);\r\n }\r\n\r\n\r\n //////////////////////////////////////////////////////////////////////////////////////////////\r\n // general\r\n\r\n function trigger(evt, args, e?: any) {\r\n // if (evt.countHandlers() === 0) {\r\n // return;\r\n // }\r\n e = e || new Slick.EventData();\r\n if (e.stopImmediatePropagation) {\r\n let tmp_fnc = e.stopImmediatePropagation;\r\n e.stopImmediatePropagation = function () {\r\n tmp_fnc.apply(e);\r\n e._isImmediatePropagationStopped = true;\r\n };\r\n if (!e.isImmediatePropagationStopped) {\r\n e.isImmediatePropagationStopped = function () {\r\n return e._isImmediatePropagationStopped;\r\n };\r\n }\r\n }\r\n if (e.stopPropagation) {\r\n let tmp_fnc = e.stopPropagation;\r\n e.stopPropagation = function () {\r\n tmp_fnc.apply(e);\r\n e._isPropagationStopped = true;\r\n };\r\n if (!e.isPropagationStopped) {\r\n e.isPropagationStopped = function () {\r\n return e._isPropagationStopped;\r\n };\r\n }\r\n }\r\n args = args || {};\r\n args.grid = self;\r\n return evt.notify(args, e, self);\r\n }\r\n\r\n function getEditorLock() {\r\n return options.editorLock;\r\n }\r\n\r\n function getEditController() {\r\n return editController;\r\n }\r\n\r\n function getColumnIndex(id: string): number {\r\n return columnsById[id];\r\n }\r\n\r\n function getColumnById(id: string): ISlickColumn {\r\n return columns[getColumnIndex(id)];\r\n }\r\n\r\n function autosizeColumns() {\r\n var i, c,\r\n widths = [],\r\n shrinkLeeway = 0,\r\n total = 0,\r\n prevTotal,\r\n availWidth = viewportHasVScroll ? viewportW - scrollbarDimensions.width : viewportW;\r\n\r\n for (i = 0; i < columns.length; i++) {\r\n c = columns[i];\r\n widths.push(c.width);\r\n total += c.width;\r\n if (c.resizable) {\r\n shrinkLeeway += c.width - Math.max(c.minWidth, absoluteColumnMinWidth);\r\n }\r\n }\r\n\r\n // shrink\r\n prevTotal = total;\r\n while (total > availWidth && shrinkLeeway) {\r\n var shrinkProportion = (total - availWidth) / shrinkLeeway;\r\n for (i = 0; i < columns.length && total > availWidth; i++) {\r\n c = columns[i];\r\n var width = widths[i];\r\n if (!c.resizable || width <= c.minWidth || width <= absoluteColumnMinWidth) {\r\n continue;\r\n }\r\n var absMinWidth = Math.max(c.minWidth, absoluteColumnMinWidth);\r\n var shrinkSize = Math.floor(shrinkProportion * (width - absMinWidth)) || 1;\r\n shrinkSize = Math.min(shrinkSize, width - absMinWidth);\r\n total -= shrinkSize;\r\n shrinkLeeway -= shrinkSize;\r\n widths[i] -= shrinkSize;\r\n }\r\n if (prevTotal <= total) { // avoid infinite loop\r\n break;\r\n }\r\n prevTotal = total;\r\n }\r\n\r\n // grow\r\n prevTotal = total;\r\n while (total < availWidth) {\r\n var growProportion = availWidth / total;\r\n for (i = 0; i < columns.length && total < availWidth; i++) {\r\n c = columns[i];\r\n var currentWidth = widths[i];\r\n var growSize;\r\n\r\n if (!c.resizable || c.maxWidth <= currentWidth) {\r\n growSize = 0;\r\n } else {\r\n growSize = Math.min(Math.floor(growProportion * currentWidth) - currentWidth, (c.maxWidth - currentWidth) || 1000000) || 1;\r\n }\r\n total += growSize;\r\n widths[i] += (total <= availWidth ? growSize : 0);\r\n }\r\n if (prevTotal >= total) { // avoid infinite loop\r\n break;\r\n }\r\n prevTotal = total;\r\n }\r\n\r\n var reRender = false;\r\n for (i = 0; i < columns.length; i++) {\r\n if (columns[i].rerenderOnResize && columns[i].width != widths[i]) {\r\n reRender = true;\r\n }\r\n columns[i].width = widths[i];\r\n }\r\n\r\n applyColumnHeaderWidths();\r\n // applyColumnGroupHeaderWidths();\r\n updateCanvasWidth(true);\r\n\r\n trigger(self.onAutosizeColumns, { \"columns\": columns });\r\n\r\n if (reRender) {\r\n invalidateAllRows();\r\n render();\r\n }\r\n }\r\n\r\n // function applyColumnGroupHeaderWidths() {\r\n // if (!treeColumns.hasDepth()) {\r\n // return;\r\n // }\r\n\r\n // for (var depth = $groupHeadersL.length - 1; depth >= 0; depth--) {\r\n\r\n // var groupColumns = treeColumns.getColumnsInDepth(depth);\r\n\r\n // $.each($().add($groupHeadersL[depth]).add($groupHeadersR[depth]), function (i, el) {\r\n // var $groupHeader = $(el),\r\n // currentColumnIndex = 0;\r\n\r\n // $groupHeader.width(i == 0 ? getHeadersWidthL() : getHeadersWidthR());\r\n\r\n // $.each($groupHeader.children(), function (idx2, el2) {\r\n // var $groupHeaderColumn = $(el2);\r\n\r\n // var m = $(this).data(\"column\");\r\n\r\n // m.width = 0;\r\n\r\n // m.columns.forEach(function () {\r\n // var headerColumn = <HTMLElement>(<HTMLElement>$groupHeader[0]).nextElementSibling.children[currentColumnIndex++];\r\n // m.width += headerColumn.offsetWidth;\r\n // });\r\n\r\n // $groupHeaderColumn.width(m.width - headerColumnWidthDiff);\r\n\r\n // });\r\n\r\n // });\r\n\r\n // }\r\n // }\r\n\r\n function applyColumnHeaderWidths() {\r\n if (!initialized) { return; }\r\n var h: IjQueryWrapper;\r\n\r\n for (var i = 0, headers = $headers.children(), ii = columns.length; i < ii; i++) {\r\n h = $(headers[i]);\r\n if (jQueryNewWidthBehaviour) {\r\n if (h.width() !== columns[i].width) {\r\n h.width(columns[i].width);\r\n }\r\n } else {\r\n // if (<number>h.width() !== <number>h.width() - headerColumnWidthDiff) {\r\n h.width(columns[i].width - headerColumnWidthDiff);\r\n // }\r\n }\r\n }\r\n\r\n updateColumnCaches();\r\n }\r\n\r\n function applyColumnWidths() {\r\n var x = 0, w, rule;\r\n for (var i = 0; i < columns.length; i++) {\r\n w = columns[i].width;\r\n\r\n rule = getColumnCssRules(i);\r\n rule.left.style.left = x + \"px\";\r\n rule.right.style.right = (((options.frozenColumn != -1 && i > options.frozenColumn) ? canvasWidthR : canvasWidthL) - x - w) + \"px\";\r\n\r\n // if this column is frozen, reset the css left value since the\r\n // column starts in a new viewport.\r\n if (options.frozenColumn == i) {\r\n x = 0;\r\n } else {\r\n x += columns[i].width;\r\n }\r\n }\r\n }\r\n\r\n function setSortColumn(columnId, ascending) {\r\n setSortColumns([{ columnId: columnId, sortAsc: ascending }]);\r\n }\r\n\r\n function setSortColumns(cols) {\r\n sortColumns = cols;\r\n var numberCols = options.numberedMultiColumnSort && sortColumns.length > 1;\r\n var headerColumnEls = $headers.children();\r\n headerColumnEls\r\n .removeClass(\"slick-header-column-sorted\")\r\n .find(\".slick-sort-indicator\")\r\n .removeClass(\"slick-sort-indicator-asc slick-sort-indicator-desc\");\r\n headerColumnEls\r\n .find(\".slick-sort-indicator-numbered\")\r\n .text(\"\");\r\n\r\n $.each(sortColumns, function (i, col) {\r\n if (col.sortAsc == null) {\r\n col.sortAsc = true;\r\n }\r\n var columnIndex = getColumnIndex(col.columnId);\r\n if (columnIndex != null) {\r\n $(headerColumnEls[columnIndex])\r\n .addClass(\"slick-header-column-sorted\")\r\n .find(\".slick-sort-indicator\")\r\n .addClass(col.sortAsc ? \"slick-sort-indicator-asc\" : \"slick-sort-indicator-desc\");\r\n if (numberCols) {\r\n $(headerColumnEls[columnIndex])\r\n .find(\".slick-sort-indicator-numbered\")\r\n .text((i + 1).toString());\r\n }\r\n }\r\n });\r\n }\r\n\r\n function getSortColumns() {\r\n return sortColumns;\r\n }\r\n\r\n function handleSelectedRangesChanged(e, ranges) {\r\n var previousSelectedRows = selectedRows.slice(0); // shallow copy previously selected rows for later comparison\r\n selectedRows = [];\r\n var hash = {};\r\n for (var i = 0; i < ranges.length; i++) {\r\n for (var j = ranges[i].fromRow; j <= ranges[i].toRow; j++) {\r\n if (!hash[j]) { // prevent duplicates\r\n selectedRows.push(j);\r\n hash[j] = {};\r\n }\r\n for (var k = ranges[i].fromCell; k <= ranges[i].toCell; k++) {\r\n if (canCellBeSelected(j, k)) {\r\n hash[j][columns[k].id] = options.selectedCellCssClass;\r\n }\r\n }\r\n }\r\n }\r\n\r\n setCellCssStyles(options.selectedCellCssClass, hash);\r\n\r\n if (simpleArrayEquals(previousSelectedRows, selectedRows)) {\r\n trigger(self.onSelectedRowsChanged, { rows: getSelectedRows() }, e);\r\n }\r\n }\r\n\r\n // compare 2 simple arrays (integers or strings only, do not use to compare object arrays)\r\n function simpleArrayEquals(arr1, arr2) {\r\n return Array.isArray(arr1) && Array.isArray(arr2) && arr2.sort().toString() !== arr1.sort().toString();\r\n }\r\n\r\n function getColumns() {\r\n return columns;\r\n }\r\n\r\n function updateColumnCaches() {\r\n // pre-calculate cell boundaries.\r\n columnPosLeft = [];\r\n columnPosRight = [];\r\n var x = 0;\r\n for (var i = 0, ii = columns.length; i < ii; i++) {\r\n columnPosLeft[i] = x;\r\n columnPosRight[i] = x + columns[i].width;\r\n\r\n if (options.frozenColumn == i) {\r\n x = 0;\r\n } else {\r\n x += columns[i].width;\r\n }\r\n }\r\n }\r\n\r\n function updateColumnProps() {\r\n columnsById = {};\r\n for (var i = 0; i < columns.length; i++) {\r\n if (columns[i].width) { (<any>columns[i]).widthRequest = columns[i].width; }\r\n\r\n var m = columns[i] = $.shallowExtend({}, columnDefaults, columns[i]);\r\n columnsById[m.id] = i;\r\n if (m.minWidth && m.width < m.minWidth) {\r\n m.width = m.minWidth;\r\n }\r\n if (m.maxWidth && m.width > m.maxWidth) {\r\n m.width = m.maxWidth;\r\n }\r\n }\r\n }\r\n\r\n function setColumns(columnDefinitions) {\r\n // var _treeColumns = new Slick.TreeColumns(columnDefinitions);\r\n // if (_treeColumns.hasDepth()) {\r\n // treeColumns = _treeColumns;\r\n // columns = treeColumns.extractColumns();\r\n // } else {\r\n columns = columnDefinitions;\r\n // }\r\n\r\n updateColumnProps();\r\n updateColumnCaches();\r\n if (initialized) {\r\n setPaneVisibility();\r\n setOverflow();\r\n invalidateAllRows();\r\n createColumnHeaders();\r\n // createColumnGroupHeaders();\r\n createColumnFooter();\r\n removeCssRules();\r\n createCssRules();\r\n resizeCanvas(); // does not work when not visible\r\n updateCanvasWidth();\r\n applyColumnWidths();\r\n handleScroll();\r\n }\r\n }\r\n\r\n function getOptions() {\r\n return options;\r\n }\r\n\r\n function setOptions(args, suppressRender) {\r\n if (!getEditorLock().commitCurrentEdit()) {\r\n return;\r\n }\r\n\r\n makeActiveCellNormal();\r\n\r\n if (options.enableAddRow !== args.enableAddRow) {\r\n invalidateRow(getDataLength());\r\n }\r\n\r\n options = $.shallowExtend(options, args);\r\n validateAndEnforceOptions();\r\n\r\n $viewport.css(\"overflow-y\", options.autoHeight ? \"hidden\" : \"auto\");\r\n if (!suppressRender) { render(); }\r\n\r\n setFrozenOptions();\r\n setScroller();\r\n // zombieRowNodeFromLastMouseWheelEvent = null;\r\n\r\n setColumns(columns);\r\n }\r\n\r\n function validateAndEnforceOptions() {\r\n if (options.autoHeight) {\r\n options.leaveSpaceForNewRows = false;\r\n }\r\n }\r\n\r\n function setData(newData, scrollToTop) {\r\n data = newData;\r\n invalidateAllRows();\r\n updateRowCount();\r\n if (scrollToTop) {\r\n scrollTo(0);\r\n }\r\n }\r\n\r\n function getData() {\r\n return data;\r\n }\r\n\r\n function getDataLength(): number {\r\n if (data.getLength) {\r\n return data.getLength();\r\n } else {\r\n return data && data.length || 0;\r\n }\r\n }\r\n\r\n function getDataLengthIncludingAddNew() {\r\n return getDataLength() + (!options.enableAddRow ? 0\r\n : (!pagingActive || pagingIsLastPage ? 1 : 0)\r\n );\r\n }\r\n\r\n function getDataItem(i) {\r\n if (data.getItem) {\r\n return data.getItem(i);\r\n } else {\r\n return data[i];\r\n }\r\n }\r\n\r\n function getTopPanel() {\r\n return $topPanel[0];\r\n }\r\n\r\n function setTopPanelVisibility(visible) {\r\n if (options.showTopPanel != visible) {\r\n options.showTopPanel = visible;\r\n if (visible) {\r\n $topPanelScroller.slideDown(\"fast\", resizeCanvas);\r\n } else {\r\n $topPanelScroller.slideUp(\"fast\", resizeCanvas);\r\n }\r\n }\r\n }\r\n\r\n function setHeaderRowVisibility(visible) {\r\n if (options.showHeaderRow != visible) {\r\n options.showHeaderRow = visible;\r\n if (visible) {\r\n $headerRowScroller.slideDown(\"fast\", resizeCanvas);\r\n } else {\r\n $headerRowScroller.slideUp(\"fast\", resizeCanvas);\r\n }\r\n }\r\n }\r\n\r\n function setFooterRowVisibility(visible) {\r\n if (options.showFooterRow != visible) {\r\n options.showFooterRow = visible;\r\n if (visible) {\r\n $footerRowScroller.slideDown(\"fast\", resizeCanvas);\r\n } else {\r\n $footerRowScroller.slideUp(\"fast\", resizeCanvas);\r\n }\r\n }\r\n }\r\n\r\n function setPreHeaderPanelVisibility(visible) {\r\n if (options.showPreHeaderPanel != visible) {\r\n options.showPreHeaderPanel = visible;\r\n if (visible) {\r\n $preHeaderPanelScroller.slideDown(\"fast\", resizeCanvas);\r\n } else {\r\n $preHeaderPanelScroller.slideUp(\"fast\", resizeCanvas);\r\n }\r\n }\r\n }\r\n\r\n function getContainerNode() {\r\n return $container[0];\r\n }\r\n\r\n //////////////////////////////////////////////////////////////////////////////////////////////\r\n // rendering / Scrolling\r\n\r\n function getRowTop(row) {\r\n let result;\r\n if (options.variableRowHeight) {\r\n result = rowPositionCache[row].top - offset;\r\n } else {\r\n result = options.rowHeight * row - offset;\r\n }\r\n if (hasFrozenRows && row < actualFrozenRow) {\r\n result += offset;\r\n }\r\n return result;\r\n }\r\n\r\n function getRowBottom(row) {\r\n if (options.variableRowHeight) {\r\n return rowPositionCache[row].bottom - offset;\r\n }\r\n return options.rowHeight * (row + 1) - offset;\r\n }\r\n\r\n function getRowFromPosition(y) {\r\n if (!options.variableRowHeight) {\r\n return Math.floor((y + offset) / options.rowHeight);\r\n }\r\n\r\n let rowsInPosCache = getDataLength();\r\n\r\n if (!rowsInPosCache) {\r\n return 0;\r\n }\r\n\r\n // loop through the row position cache and break when\r\n // the row is found\r\n let row = Math.max(0,\r\n binarySearch(rowPositionCache, y + offset, function (pos, cacheEntry) {\r\n if (cacheEntry.top <= pos) {\r\n if (cacheEntry.bottom > pos) {\r\n return 0;\r\n } else {\r\n return 1;\r\n }\r\n } else {\r\n return -1;\r\n }\r\n })\r\n );\r\n\r\n // for ( var i = 0; i < rowsInPosCache; i++ ) {\r\n // if ( rowPositionCache[i].top <= y + offset\r\n // && rowPositionCache[i].bottom >= y + offset\r\n // ) {\r\n // row = i;\r\n // continue;\r\n // }\r\n // }\r\n\r\n // return the last row in the grid\r\n if (y + offset > rowPositionCache[rowsInPosCache - 1].bottom) {\r\n row = rowsInPosCache - 1;\r\n }\r\n\r\n return row;\r\n }\r\n\r\n function binarySearch(ar, el, compare_fn) {\r\n var m = 0;\r\n var n = ar.length - 1;\r\n while (m <= n) {\r\n var k = (n + m) >> 1;\r\n var cmp = compare_fn(el, ar[k]);\r\n if (cmp > 0) {\r\n m = k + 1;\r\n } else if (cmp < 0) {\r\n n = k - 1;\r\n } else {\r\n return k;\r\n }\r\n }\r\n return -m - 1;\r\n }\r\n\r\n function scrollTo(y) {\r\n y = Math.max(y, 0);\r\n y = Math.min(y, th - <number>$viewportScrollContainerY.height() + ((viewportHasHScroll || hasFrozenColumns()) ? scrollbarDimensions.height : 0));\r\n\r\n var oldOffset = offset;\r\n\r\n page = Math.min(n - 1, Math.floor(y / ph));\r\n offset = Math.round(page * cj);\r\n var newScrollTop = y - offset;\r\n\r\n if (offset != oldOffset) {\r\n var range = getVisibleRange(newScrollTop);\r\n cleanupRows(range);\r\n updateRowPositions();\r\n }\r\n\r\n if (prevScrollTop != newScrollTop) {\r\n vScrollDir = (prevScrollTop + oldOffset < newScrollTop + offset) ? 1 : -1;\r\n lastRenderedScrollTop = (scrollTop = prevScrollTop = newScrollTop);\r\n\r\n if (hasFrozenColumns()) {\r\n $viewportTopL[0].scrollTop = newScrollTop;\r\n }\r\n\r\n if (hasFrozenRows) {\r\n $viewportBottomL[0].scrollTop = $viewportBottomR[0].scrollTop = newScrollTop;\r\n }\r\n\r\n $viewportScrollContainerY[0].scrollTop = newScrollTop;\r\n\r\n trigger(self.onViewportChanged, {});\r\n }\r\n }\r\n\r\n function defaultFormatter(row: number, cell: number, value: any, columnDef: ISlickColumn, dataContext: any): string {\r\n if (value == null) {\r\n return \"\";\r\n } else {\r\n return (value + \"\").replace(/&/g, \"&amp;\").replace(/</g, \"&lt;\").replace(/>/g, \"&gt;\");\r\n }\r\n }\r\n\r\n function getFormatter(row, column) {\r\n var rowMetadata = data.getItemMetadata && data.getItemMetadata(row);\r\n\r\n // look up by id, then index\r\n var columnOverrides = rowMetadata &&\r\n rowMetadata.columns &&\r\n (rowMetadata.columns[column.id] || rowMetadata.columns[getColumnIndex(column.id)]);\r\n\r\n return (columnOverrides && columnOverrides.formatter) ||\r\n (rowMetadata && rowMetadata.formatter) ||\r\n column.formatter ||\r\n (options.formatterFactory && options.formatterFactory.getFormatter(column, row)) ||\r\n options.defaultFormatter;\r\n }\r\n\r\n function callFormatter(row, cell, value, m, item, grid) {\r\n\r\n var result;\r\n\r\n // pass metadata to formatter\r\n var metadata = data.getItemMetadata && data.getItemMetadata(row);\r\n metadata = metadata && metadata.columns;\r\n\r\n if (metadata) {\r\n var columnData = metadata[m.id] || metadata[cell];\r\n result = getFormatter(row, m)(row, cell, value, m, item, columnData);\r\n } else {\r\n result = getFormatter(row, m)(row, cell, value, m, item);\r\n }\r\n\r\n return result;\r\n }\r\n\r\n function getEditor(row, cell) {\r\n var column = columns[cell];\r\n var rowMetadata = data.getItemMetadata && data.getItemMetadata(row);\r\n var columnMetadata = rowMetadata && rowMetadata.columns;\r\n\r\n if (columnMetadata && columnMetadata[column.id] && columnMetadata[column.id].editor !== undefined) {\r\n return columnMetadata[column.id].editor;\r\n }\r\n if (columnMetadata && columnMetadata[cell] && columnMetadata[cell].editor !== undefined) {\r\n return columnMetadata[cell].editor;\r\n }\r\n\r\n return column.editor || (options.editorFactory && options.editorFactory.getEditor(column, row));\r\n }\r\n\r\n function getDataItemValueForColumn(item, columnDef) {\r\n if (options.dataItemColumnValueExtractor) {\r\n return options.dataItemColumnValueExtractor(item, columnDef);\r\n }\r\n if (item == null) {\r\n return undefined;\r\n }\r\n if (columnDef.field && columnDef.field.indexOf(\".\") > 0) {\r\n const fields = columnDef.field.split(\".\");\r\n let result = item;\r\n for (let i = 0; i < fields.length; i++) {\r\n result = result[fields[i]];\r\n }\r\n return result;\r\n }\r\n return item[columnDef.field];\r\n }\r\n\r\n function appendRowHtml(html: { L: string, R: string }, row, range, dataLength) {\r\n var d = getDataItem(row);\r\n var dataLoading = row < dataLength && !d;\r\n var rowCss = \"slick-row\" +\r\n (hasFrozenRows && row <= options.frozenRow ? \" frozen\" : \"\") +\r\n (dataLoading ? \" loading\" : \"\") +\r\n (row === activeRow && options.showCellSelection ? \" active\" : \"\") +\r\n (row % 2 === 1 ? \" odd\" : \" even\");\r\n\r\n if (!d && row >= dataLength) {\r\n rowCss += \" \" + options.addNewRowCssClass;\r\n }\r\n\r\n var metadata = data.getItemMetadata && data.getItemMetadata(row);\r\n\r\n if (metadata && metadata.cssClasses) {\r\n rowCss += \" \" + metadata.cssClasses;\r\n }\r\n\r\n rowCss += \" \" + (trigger(self.onAppendRow, { row: row, item: d }) || \"\");\r\n\r\n var frozenRowOffset = getFrozenRowOffset(row);\r\n\r\n var top = getRowTop(row) - frozenRowOffset;\r\n\r\n var rowHtml = \"<div class='ui-widget-content \" + rowCss + \"' style='top:\"\r\n + top + \"px\";\r\n if (getRowHeight(row) !== options.rowHeight) {\r\n rowHtml += \";height:\" + getRowHeight(row) + \"px\";\r\n }\r\n rowHtml += \"'>\";\r\n\r\n html.L += rowHtml;\r\n\r\n if (hasFrozenColumns()) {\r\n html.R += rowHtml;\r\n }\r\n\r\n var colspan, m;\r\n for (var i = 0, ii = columns.length; i < ii; i++) {\r\n m = columns[i];\r\n colspan = 1;\r\n if (metadata && metadata.columns) {\r\n var columnData = metadata.columns[m.id] || metadata.columns[i];\r\n colspan = (columnData && columnData.colspan) || 1;\r\n if (colspan === \"*\") {\r\n colspan = ii - i;\r\n }\r\n }\r\n\r\n // do not render cells outside of the viewport.\r\n if (columnPosRight[Math.min(ii - 1, i + colspan - 1)] > range.leftPx || m.alwaysRenderColumn) {\r\n if (!m.alwaysRenderColumn && columnPosLeft[i] > range.rightPx) {\r\n // all columns to the right are outside the range.\r\n break;\r\n }\r\n\r\n if (hasFrozenColumns() && (i > options.frozenColumn)) {\r\n html.R += appendCellHtml(row, i, colspan, d);\r\n } else {\r\n html.L += appendCellHtml(row, i, colspan, d);\r\n }\r\n }\r\n // else if (m.alwaysRenderColumn || (hasFrozenColumns() && i <= options.frozenColumn)) {\r\n // html.L += appendCellHtml(row, i, colspan, d);\r\n // }\r\n\r\n if (colspan > 1) {\r\n i += (colspan - 1);\r\n }\r\n }\r\n\r\n html.L += \"</div>\";\r\n\r\n if (hasFrozenColumns()) {\r\n html.R += \"</div>\";\r\n }\r\n }\r\n\r\n function appendCellHtml(row: number, cell: number, colspan: number, item: any): string {\r\n // result: string containing the HTML parts\r\n // row, cell: row and column index\r\n // colspan: HTML colspan\r\n // item: grid data for row\r\n var stringResult = \"\";\r\n\r\n var m: ISlickColumn = columns[cell];\r\n var cellCss = \"slick-cell l\" + cell + \" r\" + Math.min(columns.length - 1, cell + colspan - 1) +\r\n (m.cssClass ? \" \" + m.cssClass : \"\");\r\n\r\n if (hasFrozenColumns() && cell <= options.frozenColumn) {\r\n cellCss += (\" frozen\");\r\n }\r\n\r\n if (row === activeRow && cell === activeCell && options.showCellSelection) {\r\n cellCss += (\" active\");\r\n }\r\n\r\n for (var key in cellCssClasses) {\r\n if (cellCssClasses[key][row] && cellCssClasses[key][row][m.id]) {\r\n cellCss += (\" \" + cellCssClasses[key][row][m.id]);\r\n }\r\n }\r\n\r\n var value = null, formatterResult: ISlickFormatterResult | string = \"\";\r\n if (item) {\r\n value = getDataItemValueForColumn(item, m);\r\n formatterResult = getFormatter(row, m)(row, cell, value, m, item, self);\r\n if (formatterResult === null || formatterResult === undefined) { formatterResult = \"\"; }\r\n }\r\n\r\n // get addl css class names from object type formatter return\r\n var addlCssClasses = (formatterResult && (<ISlickFormatterResult>formatterResult).addClasses ? (addlCssClasses ? \" \" : \"\") + (<ISlickFormatterResult>formatterResult).addClasses : \"\");\r\n var toolTip = formatterResult && (<ISlickFormatterResult>formatterResult).toolTip ? \"title='\" + (<ISlickFormatterResult>formatterResult).toolTip + \"'\" : \"\";\r\n\r\n stringResult += \"<div class='\" +\r\n cellCss + (addlCssClasses ? \" \" + addlCssClasses : \"\") + \"' \" +\r\n toolTip +\r\n ((getRowHeight(row) !== options.rowHeight)\r\n ? \"style='height:\" + (getRowHeight(row) - cellHeightDiff) + \"px'>\"\r\n : \">\");\r\n\r\n // if there is a corresponding row (if not, this is the Add New row or this data hasn't been loaded yet)\r\n if (item) {\r\n stringResult += (Object.prototype.toString.call(formatterResult) !== \"[object Object]\" ? (<string>formatterResult) : (<ISlickFormatterResult>formatterResult).text);\r\n }\r\n\r\n stringResult += \"</div>\";\r\n\r\n rowsCache[row].cellRenderQueue.push(cell);\r\n rowsCache[row].cellColSpans[cell] = colspan;\r\n return stringResult;\r\n }\r\n\r\n\r\n function cleanupRows(rangeToKeep: { top: number, bottom: number }) {\r\n for (var i in rowsCache) {\r\n let idx = parseInt(i, 10);\r\n var removeFrozenRow = true;\r\n\r\n if (hasFrozenRows\r\n && ((options.frozenBottom && idx >= actualFrozenRow) // frozen bottom rows\r\n || (!options.frozenBottom && idx <= actualFrozenRow) // frozen top rows\r\n )\r\n ) {\r\n removeFrozenRow = false;\r\n }\r\n\r\n if ((idx !== activeRow)\r\n && (idx < rangeToKeep.top || idx > rangeToKeep.bottom)\r\n && (removeFrozenRow)\r\n ) {\r\n removeRowFromCache(i);\r\n }\r\n }\r\n if (options.enableAsyncPostRenderCleanup) { startPostProcessingCleanup(); }\r\n }\r\n\r\n function invalidate() {\r\n let currentActiveCell = null;\r\n if (currentEditor) {\r\n currentActiveCell = getActiveCell();\r\n }\r\n updateRowCount();\r\n invalidateAllRows();\r\n render();\r\n if (currentActiveCell) {\r\n makeActiveCellEditable(null, null, {});\r\n }\r\n }\r\n\r\n function invalidateAllRows() {\r\n if (currentEditor) {\r\n makeActiveCellNormal();\r\n }\r\n for (var row in rowsCache) {\r\n removeRowFromCache(row);\r\n }\r\n if (options.enableAsyncPostRenderCleanup) { startPostProcessingCleanup(); }\r\n }\r\n\r\n function queuePostProcessedRowForCleanup(cacheEntry, postProcessedRow, rowIdx) {\r\n postProcessgroupId++;\r\n\r\n // store and detach node for later async cleanup\r\n for (var column in postProcessedRow) {\r\n if (postProcessedRow.hasOwnProperty(column)) {\r\n let columnIdx = parseInt(column, 10) | 0;\r\n postProcessedCleanupQueue.push({\r\n actionType: \"C\",\r\n groupId: postProcessgroupId,\r\n node: cacheEntry.cellNodesByColumnIdx[columnIdx],\r\n columnIdx: columnIdx,\r\n rowIdx: rowIdx\r\n });\r\n }\r\n }\r\n postProcessedCleanupQueue.push({\r\n actionType: \"R\",\r\n groupId: postProcessgroupId,\r\n node: cacheEntry.rowNode\r\n });\r\n cacheEntry.rowNode.forEach(x => x.parent.removeChild(x)); // $(cacheEntry.rowNode).detach();\r\n }\r\n\r\n function initializeRowPositions() {\r\n rowPositionCache = [{\r\n top: 0\r\n , height: options.rowHeight\r\n , bottom: options.rowHeight\r\n }];\r\n }\r\n\r\n function cacheRowPositions() {\r\n if (!options.variableRowHeight) {\r\n return;\r\n }\r\n\r\n initializeRowPositions();\r\n\r\n for (var i = 0, l = getDataLength(); i <= l; i++) {\r\n var metadata = data.getItemMetadata && data.getItemMetadata(i);\r\n\r\n rowPositionCache[i] = {\r\n top: (rowPositionCache[i - 1])\r\n ? (rowPositionCache[i - 1].bottom/* - offset */)\r\n : 0\r\n , height: (metadata && metadata.height !== undefined)\r\n ? metadata.height\r\n : options.rowHeight\r\n };\r\n\r\n rowPositionCache[i].bottom = rowPositionCache[i].top + rowPositionCache[i].height;\r\n }\r\n }\r\n\r\n function removeRowFromCache(row) {\r\n var cacheEntry = rowsCache[row];\r\n if (!cacheEntry) {\r\n return;\r\n }\r\n\r\n trigger(self.onBeforeRemoveRow, { row: row, dom: cacheEntry.rowNode });\r\n\r\n cacheEntry.rowNode.forEach(x => {\r\n x.parentElement.removeChild(x);\r\n });\r\n\r\n delete rowsCache[row];\r\n delete postProcessedRows[row];\r\n }\r\n\r\n function invalidateRows(rows) {\r\n var i, rl;\r\n if (!rows || !rows.length) {\r\n return;\r\n }\r\n vScrollDir = 0;\r\n rl = rows.length;\r\n for (i = 0; i < rl; i++) {\r\n if (currentEditor && activeRow === rows[i]) {\r\n makeActiveCellNormal();\r\n }\r\n if (rowsCache[rows[i]]) {\r\n removeRowFromCache(rows[i]);\r\n }\r\n }\r\n if (options.enableAsyncPostRenderCleanup) { startPostProcessingCleanup(); }\r\n }\r\n\r\n function invalidateRow(row) {\r\n if (!row && row !== 0) { return; }\r\n invalidateRows([row]);\r\n }\r\n\r\n function applyFormatResultToCellNode(formatterResult, cellNode, suppressRemove?: boolean) {\r\n if (formatterResult === null || formatterResult === undefined) { formatterResult = \"\"; }\r\n if (Object.prototype.toString.call(formatterResult) !== \"[object Object]\") {\r\n cellNode.innerHTML = formatterResult;\r\n } else {\r\n cellNode.innerHTML = formatterResult.text;\r\n if (formatterResult.removeClasses && !suppressRemove) {\r\n $(cellNode).removeClass(formatterResult.removeClasses);\r\n }\r\n if (formatterResult.addClasses) {\r\n $(cellNode).addClass(formatterResult.addClasses);\r\n }\r\n if (formatterResult.toolTip) {\r\n $(cellNode).attr(\"title\", formatterResult.toolTip);\r\n }\r\n }\r\n }\r\n\r\n function updateCell(row, cell) {\r\n var cellNode = getCellNode(row, cell);\r\n if (!cellNode) {\r\n return;\r\n }\r\n\r\n var m = columns[cell], d = getDataItem(row);\r\n if (currentEditor && activeRow === row && activeCell === cell) {\r\n currentEditor.loadValue(d);\r\n } else {\r\n var formatterResult = d ? getFormatter(row, m)(row, cell, getDataItemValueForColumn(d, m), m, d, self) : \"\";\r\n applyFormatResultToCellNode(formatterResult, cellNode);\r\n if (self.onAppendCell.countHandlers() > 0) {\r\n let item = getDataItem(activeRow);\r\n let value = getDataItemValueForColumn(item, columns[activeCell]);\r\n trigger(self.onAppendCell,\r\n {\r\n row: row, cell: cell,\r\n value: value, item: item,\r\n column: m, dom: cellNode\r\n });\r\n }\r\n invalidatePostProcessingResults(row);\r\n }\r\n }\r\n\r\n function updateRow(row) {\r\n var cacheEntry = rowsCache[row];\r\n if (!cacheEntry) {\r\n return;\r\n }\r\n\r\n ensureCellNodesInRowsCache(row);\r\n\r\n var formatterResult, d = getDataItem(row);\r\n\r\n // if (d) {\r\n // for (let cacheRow of cacheEntry.rowNode) {\r\n // cacheRow.classList.remove(\"loading\");\r\n // }\r\n // }\r\n\r\n for (var column in cacheEntry.cellNodesByColumnIdx) {\r\n if (!cacheEntry.cellNodesByColumnIdx.hasOwnProperty(column)) {\r\n continue;\r\n }\r\n\r\n let columnIdx = parseInt(column, 10) | 0;\r\n var m = columns[columnIdx],\r\n node = cacheEntry.cellNodesByColumnIdx[columnIdx];\r\n\r\n if (row === activeRow && columnIdx === activeCell && currentEditor) {\r\n currentEditor.loadValue(d);\r\n } else if (d) {\r\n formatterResult = getFormatter(row, m)(row, columnIdx, getDataItemValueForColumn(d, m), m, d, self);\r\n applyFormatResultToCellNode(formatterResult, node);\r\n if (self.onAppendCell.countHandlers() > 0) {\r\n let item = getDataItem(row);\r\n let value = getDataItemValueForColumn(item, columns[columnIdx]);\r\n trigger(self.onAppendCell,\r\n {\r\n row: row, cell: columnIdx,\r\n value: value, item: item,\r\n column: columns[columnIdx], dom: node\r\n });\r\n }\r\n } else {\r\n node.innerHTML = \"\";\r\n }\r\n }\r\n\r\n invalidatePostProcessingResults(row);\r\n }\r\n\r\n function getViewportHeight() {\r\n if (options.autoHeight) {\r\n let fullHeight: number = <number>$paneHeaderL.height();\r\n fullHeight += (options.showHeaderRow) ? options.headerRowHeight + getVBoxDelta($headerRowScroller) : 0;\r\n fullHeight += (options.showFooterRow) ? options.footerRowHeight + getVBoxDelta($footerRowScroller) : 0;\r\n fullHeight += (getCanvasWidth() > viewportW) ? scrollbarDimensions.height : 0;\r\n\r\n if (options.variableRowHeight) {\r\n viewportH = rowPositionCache[getDataLengthIncludingAddNew()].bottom; // tODO Test this (also with frozen columns)\r\n } else {\r\n viewportH = options.rowHeight\r\n * getDataLengthIncludingAddNew()\r\n + ((options.frozenColumn == -1) ? <number>fullHeight : 0);\r\n }\r\n\r\n } else {\r\n topPanelH = (options.showTopPanel) ? options.topPanelHeight + getVBoxDelta($topPanelScroller) : 0;\r\n headerRowH = (options.showHeaderRow) ? options.headerRowHeight + getVBoxDelta($headerRowScroller) : 0;\r\n footerRowH = (options.showFooterRow) ? options.footerRowHeight + getVBoxDelta($footerRowScroller) : 0;\r\n let preHeaderH = (options.createPreHeaderPanel && options.showPreHeaderPanel) ? options.preHeaderPanelHeight + getVBoxDelta($preHeaderPanelScroller) : 0;\r\n\r\n viewportH = $container[0].clientHeight\r\n - $headerScroller[0].clientHeight\r\n - getVBoxDelta($headerScroller)\r\n - topPanelH\r\n - headerRowH\r\n - footerRowH\r\n - preHeaderH;\r\n }\r\n\r\n numVisibleRows = Math.ceil(viewportH / options.rowHeight); // tODO -> variable Row height\r\n return viewportH;\r\n }\r\n\r\n function getViewportWidth() {\r\n viewportW = $container.width() as number - 2; // 2 for border\r\n }\r\n\r\n function resizeCanvas() {\r\n if (!initialized) { return; }\r\n paneTopH = 0;\r\n paneBottomH = 0;\r\n viewportTopH = 0;\r\n viewportBottomH = 0;\r\n\r\n getViewportWidth();\r\n getViewportHeight();\r\n\r\n // account for Frozen Rows\r\n if (hasFrozenRows) {\r\n if (options.frozenBottom) {\r\n paneTopH = viewportH - frozenRowsHeight - scrollbarDimensions.height;\r\n paneBottomH = frozenRowsHeight + scrollbarDimensions.height;\r\n } else {\r\n paneTopH = frozenRowsHeight;\r\n paneBottomH = viewportH - frozenRowsHeight;\r\n }\r\n } else {\r\n paneTopH = viewportH;\r\n }\r\n\r\n // the top pane includes the top panel and the header row\r\n paneTopH += topPanelH + headerRowH + footerRowH;\r\n\r\n if (hasFrozenColumns() && options.autoHeight) {\r\n paneTopH += scrollbarDimensions.height;\r\n }\r\n\r\n // the top viewport does not contain the top panel or header row\r\n viewportTopH = paneTopH - topPanelH - headerRowH - footerRowH;\r\n\r\n if (options.autoHeight) {\r\n if (hasFrozenColumns()) {\r\n $container.height(\r\n paneTopH + $headerScrollerL[0].offsetHeight\r\n );\r\n }\r\n\r\n $paneTopL.css(\"position\", \"relative\");\r\n }\r\n\r\n $paneTopL.css(\"top\", $paneHeaderL.height()).css(\"height\", paneTopH);\r\n var paneBottomTop = $paneTopL[0].offsetTop + paneTopH;\r\n\r\n if (!options.autoHeight) {\r\n $viewportTopL.height(viewportTopH);\r\n }\r\n\r\n if (hasFrozenColumns()) {\r\n $paneTopR.css(\"top\", $paneHeaderL.height()).css(\"height\", paneTopH);\r\n\r\n $viewportTopR.height(viewportTopH);\r\n\r\n if (hasFrozenRows) {\r\n $paneBottomL.css(\"top\", paneBottomTop).css(\"height\", paneBottomH);\r\n\r\n $paneBottomR.css(\"top\", paneBottomTop).css(\"height\", paneBottomH);\r\n\r\n $viewportBottomR.height(paneBottomH);\r\n }\r\n } else {\r\n if (hasFrozenRows) {\r\n $paneBottomL.css(\"width\", \"100%\").css(\"height\", paneBottomH);\r\n\r\n $paneBottomL.css(\"top\", paneBottomTop);\r\n }\r\n }\r\n\r\n if (hasFrozenRows) {\r\n $viewportBottomL.height(paneBottomH);\r\n\r\n if (options.frozenBottom) {\r\n $canvasBottomL.height(frozenRowsHeight);\r\n\r\n if (hasFrozenColumns()) {\r\n $canvasBottomR.height(frozenRowsHeight);\r\n }\r\n } else {\r\n $canvasTopL.height(frozenRowsHeight);\r\n\r\n if (hasFrozenColumns()) {\r\n $canvasTopR.height(frozenRowsHeight);\r\n }\r\n }\r\n } else {\r\n $viewportTopR.height(viewportTopH);\r\n }\r\n\r\n if (!scrollbarDimensions || !scrollbarDimensions.width) {\r\n scrollbarDimensions = measureScrollbar();\r\n }\r\n\r\n if (options.forceFitColumns) {\r\n autosizeColumns();\r\n }\r\n\r\n updateRowCount();\r\n handleScroll();\r\n\r\n\r\n // since the width has changed, force the render() to reevaluate virtually rendered cells.\r\n lastRenderedScrollLeft = -1;\r\n render();\r\n }\r\n\r\n function updatePagingStatusFromView(pagingInfo) {\r\n pagingActive = (pagingInfo.pageSize !== 0);\r\n pagingIsLastPage = (pagingInfo.pageNum == pagingInfo.totalPages - 1);\r\n }\r\n\r\n function updateRowCount() {\r\n if (!initialized) { return; }\r\n cacheRowPositions();\r\n\r\n var dataLength = getDataLength();\r\n var dataLengthIncludingAddNew = getDataLengthIncludingAddNew();\r\n var numberOfRows = 0;\r\n var oldH = (hasFrozenRows && !options.frozenBottom) ? parseInt($canvasBottomL[0].style.height) : parseInt($canvasTopL[0].style.height);\r\n if (hasFrozenRows) {\r\n numberOfRows = getDataLength() - options.frozenRow;\r\n } else {\r\n numberOfRows = dataLengthIncludingAddNew + (options.leaveSpaceForNewRows ? numVisibleRows - 1 : 0);\r\n }\r\n\r\n var tempViewportH = <number>$viewportScrollContainerY.height();\r\n var oldViewportHasVScroll = viewportHasVScroll;\r\n // with autoHeight, we do not need to accommodate the vertical scroll bar\r\n viewportHasVScroll = options.alwaysShowVerticalScroll || !options.autoHeight &&\r\n (options.variableRowHeight ?\r\n (rowPositionCache[numberOfRows - 1] && (rowPositionCache[numberOfRows - 1].bottom > viewportH)) :\r\n (numberOfRows * options.rowHeight > tempViewportH));\r\n makeActiveCellNormal();\r\n\r\n // remove the rows that are now outside of the data range\r\n // this helps avoid redundant calls to .removeRow() when the size of the data decreased by thousands of rows\r\n var r1 = dataLength - 1;\r\n for (var i in rowsCache) {\r\n if (parseInt(i, 10) > r1) {\r\n removeRowFromCache(i);\r\n }\r\n }\r\n if (options.enableAsyncPostRenderCleanup) { startPostProcessingCleanup(); }\r\n\r\n if (activeCellNode && activeRow > r1) {\r\n resetActiveCell();\r\n }\r\n\r\n oldH = h;\r\n\r\n var rowH = options.variableRowHeight ? (options.enableAddRow\r\n ? rowPositionCache[getDataLength()].bottom\r\n : rowPositionCache[getDataLength()].top) : options.rowHeight * numberOfRows;\r\n\r\n if (options.autoHeight) {\r\n h = rowH;\r\n } else {\r\n th = Math.max(rowH, tempViewportH - scrollbarDimensions.height);\r\n if (th < maxSupportedCssHeight) {\r\n // just one page\r\n h = ph = th;\r\n n = 1;\r\n cj = 0;\r\n } else {\r\n // break into pages\r\n h = maxSupportedCssHeight;\r\n ph = h / 100;\r\n n = Math.floor(th / ph);\r\n cj = (th - h) / (n - 1);\r\n }\r\n }\r\n\r\n if (h !== oldH) {\r\n if (hasFrozenRows && !options.frozenBottom) {\r\n $canvasBottomL.css(\"height\", h);\r\n\r\n if (hasFrozenColumns()) {\r\n $canvasBottomR.css(\"height\", h);\r\n }\r\n } else {\r\n $canvasTopL.css(\"height\", h);\r\n $canvasTopR.css(\"height\", h);\r\n }\r\n\r\n scrollTop = $viewportScrollContainerY[0].scrollTop;\r\n }\r\n\r\n var oldScrollTopInRange = (scrollTop + offset <= th - tempViewportH);\r\n\r\n if (th == 0 || scrollTop == 0) {\r\n page = offset = 0;\r\n } else if (oldScrollTopInRange) {\r\n // maintain virtual position\r\n scrollTo(scrollTop + offset);\r\n } else {\r\n // scroll to bottom\r\n scrollTo(th - tempViewportH);\r\n }\r\n\r\n if (h != oldH && options.autoHeight) {\r\n resizeCanvas();\r\n }\r\n\r\n if (options.forceFitColumns && oldViewportHasVScroll != viewportHasVScroll) {\r\n autosizeColumns();\r\n }\r\n updateCanvasWidth(false);\r\n }\r\n\r\n function getVisibleRange(viewportTop?: number, viewportLeft?: number) {\r\n if (viewportTop == null) {\r\n viewportTop = scrollTop;\r\n }\r\n if (viewportLeft == null) {\r\n viewportLeft = scrollLeft;\r\n }\r\n\r\n return {\r\n top: getRowFromPosition(viewportTop),\r\n bottom: getRowFromPosition(viewportTop + viewportH) + 1,\r\n leftPx: viewportLeft,\r\n rightPx: viewportLeft + viewportW\r\n };\r\n }\r\n\r\n function getRenderedRangeFromVisibleRange(range) {\r\n var buffer = Math.round(viewportH / options.rowHeight); // TODO -> probably not correct for variableRowHeight\r\n var minBuffer = options.minRowBuffer;\r\n\r\n if (vScrollDir === -1) {\r\n range.top -= buffer;\r\n range.bottom += minBuffer;\r\n } else if (vScrollDir === 1) {\r\n range.top -= minBuffer;\r\n range.bottom += buffer;\r\n } else {\r\n range.top -= minBuffer;\r\n range.bottom += minBuffer;\r\n }\r\n\r\n range.top = Math.max(0, range.top);\r\n range.bottom = Math.min(getDataLengthIncludingAddNew() - 1, range.bottom);\r\n\r\n range.leftPx -= viewportW;\r\n range.rightPx += viewportW;\r\n\r\n range.leftPx = Math.max(0, range.leftPx);\r\n range.rightPx = Math.min(canvasWidth, range.rightPx);\r\n\r\n return range;\r\n }\r\n\r\n function getRenderedRange(viewportTop?: number, viewportLeft?: number) {\r\n var range = getVisibleRange(viewportTop, viewportLeft);\r\n return getRenderedRangeFromVisibleRange(range);\r\n }\r\n\r\n function ensureCellNodesInRowsCache(row) {\r\n var cacheEntry = rowsCache[row];\r\n if (cacheEntry) {\r\n if (cacheEntry.cellRenderQueue.length) {\r\n var lastNode = <HTMLElement>cacheEntry.rowNode[cacheEntry.rowNode.length - 1].lastElementChild;// cacheEntry.rowNode.children().last();\r\n while (lastNode && cacheEntry.cellRenderQueue.length) {\r\n var columnIdx = cacheEntry.cellRenderQueue.pop();\r\n cacheEntry.cellNodesByColumnIdx[columnIdx] = lastNode;\r\n lastNode = <HTMLElement>lastNode.previousElementSibling;\r\n // hack to retrieve the frozen columns because\r\n if (!lastNode) {\r\n lastNode = <HTMLElement>cacheEntry.rowNode[0].lastElementChild;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n function cleanUpCells(range, row) {\r\n // ignore frozen rows\r\n if (hasFrozenRows\r\n && ((options.frozenBottom && row > actualFrozenRow) // frozen bottom rows\r\n || (row <= actualFrozenRow) // frozen top rows\r\n )\r\n ) {\r\n return;\r\n }\r\n\r\n var totalCellsRemoved = 0;\r\n var cacheEntry = rowsCache[row];\r\n\r\n // remove cells outside the range.\r\n var cellsToRemove = [];\r\n for (var idx in cacheEntry.cellNodesByColumnIdx) {\r\n // i really hate it when people mess with Array.prototype.\r\n if (!cacheEntry.cellNodesByColumnIdx.hasOwnProperty(idx)) {\r\n continue;\r\n }\r\n\r\n // this is a string, so it needs to be cast back to a number.\r\n let i = parseInt(idx, 10) | 0;\r\n\r\n // ignore frozen columns\r\n if (i <= options.frozenColumn) {\r\n continue;\r\n }\r\n\r\n // ignore alwaysRenderedColumns\r\n if (Array.isArray(columns) && columns[i] && columns[i].alwaysRenderColumn) {\r\n continue;\r\n }\r\n\r\n var colspan = cacheEntry.cellColSpans[i];\r\n if (columnPosLeft[i] > range.rightPx ||\r\n columnPosRight[Math.min(columns.length - 1, i + colspan - 1)] < range.leftPx) {\r\n if (!(row == activeRow && i == activeCell)) {\r\n cellsToRemove.push(i);\r\n }\r\n }\r\n }\r\n\r\n var cellToRemove;\r\n while ((cellToRemove = cellsToRemove.pop()) != null) {\r\n cacheEntry.cellNodesByColumnIdx[cellToRemove].parentElement.removeChild(cacheEntry.cellNodesByColumnIdx[cellToRemove]);\r\n\r\n delete cacheEntry.cellColSpans[cellToRemove];\r\n delete cacheEntry.cellNodesByColumnIdx[cellToRemove];\r\n if (postProcessedRows[row]) {\r\n delete postProcessedRows[row][cellToRemove];\r\n }\r\n totalCellsRemoved++;\r\n }\r\n }\r\n\r\n function cleanUpAndRenderCells(range) {\r\n\r\n var cacheEntry: ICacheEntry;\r\n var stringArray = \"\";\r\n var processedRows = [];\r\n var cellsAdded;\r\n var totalCellsAdded = 0;\r\n var colspan;\r\n\r\n for (var row = range.top, btm = range.bottom; row <= btm; row++) {\r\n cacheEntry = rowsCache[row];\r\n if (!cacheEntry) {\r\n continue;\r\n }\r\n\r\n // cellRenderQueue populated in renderRows() needs to be cleared first\r\n ensureCellNodesInRowsCache(row);\r\n\r\n cleanUpCells(range, row);\r\n\r\n // render missing cells.\r\n cellsAdded = 0;\r\n\r\n var metadata = data.getItemMetadata && data.getItemMetadata(row);\r\n metadata = metadata && metadata.columns;\r\n\r\n var d = getDataItem(row);\r\n\r\n for (var i = 0, ii = columns.length; i < ii; i++) {\r\n // cells to the right are outside the range.\r\n if (columnPosLeft[i] > range.rightPx) {\r\n break;\r\n }\r\n\r\n // already rendered.\r\n if ((colspan = cacheEntry.cellColSpans[i]) != null) {\r\n i += (colspan > 1 ? colspan - 1 : 0);\r\n continue;\r\n }\r\n\r\n colspan = 1;\r\n if (metadata) {\r\n var columnData = metadata[columns[i].id] || metadata[i];\r\n colspan = (columnData && columnData.colspan) || 1;\r\n if (colspan === \"*\") {\r\n colspan = ii - i;\r\n }\r\n }\r\n\r\n if (columnPosRight[Math.min(ii - 1, i + colspan - 1)] > range.leftPx) {\r\n stringArray += appendCellHtml(row, i, colspan, d);\r\n cellsAdded++;\r\n }\r\n\r\n i += (colspan > 1 ? colspan - 1 : 0);\r\n }\r\n\r\n if (cellsAdded) {\r\n totalCellsAdded += cellsAdded;\r\n processedRows.push(row);\r\n }\r\n }\r\n\r\n if (!stringArray.length) {\r\n return;\r\n }\r\n\r\n var x = document.createElement(\"div\");\r\n x.innerHTML = stringArray;\r\n // tODO TODOFIX -> call var addlCssClasses = trigger(self.onAppendCell, { row: row, cell: cell, value: value, dataContext: item, column: m }) || '';\r\n\r\n var processedRow;\r\n while ((processedRow = processedRows.pop()) != null) {\r\n cacheEntry = rowsCache[processedRow];\r\n var columnIdx;\r\n while ((columnIdx = cacheEntry.cellRenderQueue.pop()) != null) {\r\n var node = <HTMLElement>x.lastElementChild;\r\n\r\n if (hasFrozenColumns() && (columnIdx > options.frozenColumn)) {\r\n cacheEntry.rowNode[1].appendChild(node);\r\n } else {\r\n cacheEntry.rowNode[0].appendChild(node);\r\n }\r\n\r\n if (self.onAppendCell.countHandlers() > 0) {\r\n let item = getDataItem(processedRow);\r\n let value = getDataItemValueForColumn(item, columns[columnIdx]);\r\n trigger(self.onAppendCell,\r\n {\r\n row: processedRow, cell: columnIdx,\r\n value: value, item: item,\r\n column: columns[columnIdx], dom: node\r\n });\r\n }\r\n\r\n cacheEntry.cellNodesByColumnIdx[columnIdx] = node;\r\n }\r\n }\r\n }\r\n\r\n function renderRows(range) {\r\n var html = { L: \"\", R: \"\" },\r\n rows = [],\r\n needToReselectCell = false,\r\n dataLength = getDataLength();\r\n\r\n for (let i = range.top, ii = range.bottom; i <= ii; i++) {\r\n if (rowsCache[i] || (hasFrozenRows && options.frozenBottom && i == getDataLength())) {\r\n continue;\r\n }\r\n renderedRows++;\r\n rows.push(i);\r\n\r\n // create an entry right away so that appendRowHtml() can\r\n // start populatating it.\r\n rowsCache[i] = {\r\n rowNode: null,\r\n\r\n // colSpans of rendered cells (by column idx).\r\n // can also be used for checking whether a cell has been rendered.\r\n cellColSpans: [],\r\n\r\n // cell nodes (by column idx). Lazy-populated by ensureCellNodesInRowsCache().\r\n cellNodesByColumnIdx: [],\r\n\r\n // column indices of cell nodes that have been rendered, but not yet indexed in\r\n // cellNodesByColumnIdx. These are in the same order as cell nodes added at the\r\n // end of the row.\r\n cellRenderQueue: []\r\n };\r\n\r\n appendRowHtml(html, i, range, dataLength);\r\n if (activeCellNode && activeRow === i) {\r\n needToReselectCell = true;\r\n }\r\n }\r\n\r\n if (!rows.length) { return; }\r\n\r\n\r\n let x;\r\n if (html.L.length > 0) {\r\n x = document.createElement(\"div\");\r\n x.innerHTML = html.L;\r\n }\r\n let xRight;\r\n if (html.R.length > 0) {\r\n xRight = document.createElement(\"div\");\r\n xRight.innerHTML = html.R;\r\n }\r\n\r\n\r\n for (let i = 0, ii = rows.length; i < ii; i++) {\r\n let xChild: HTMLDivElement;\r\n let xChildRight: HTMLDivElement;\r\n rowsCache[rows[i]].rowNode = [];\r\n if (x && x.children.length > 0) {\r\n xChild = x.children[0];\r\n rowsCache[rows[i]].rowNode.push(xChild);\r\n }\r\n if (xRight && xRight.children.length > 0) {\r\n xChildRight = xRight.children[0];\r\n rowsCache[rows[i]].rowNode.push(xChildRight);\r\n }\r\n\r\n if ((hasFrozenRows) && (rows[i] >= actualFrozenRow)) {\r\n $canvasBottomL[0].appendChild(xChild);\r\n if (hasFrozenColumns()) {\r\n $canvasBottomR[0].appendChild(xChildRight);\r\n }\r\n } else if (hasFrozenColumns()) {\r\n $canvasTopL[0].appendChild(xChild);\r\n $canvasTopR[0].appendChild(xChildRight);\r\n } else {\r\n $canvasTopL[0].appendChild(xChild);\r\n }\r\n\r\n if (self.onAppendCell.countHandlers() > 0) {\r\n const nodes: HTMLDivElement[] = [];\r\n for (let idx = 0; idx < xChild.childNodes.length; idx++) {\r\n nodes.push(xChild.childNodes[idx] as HTMLDivElement);\r\n }\r\n if (xChildRight) {\r\n for (let idx = 0; idx < xChildRight.childNodes.length; idx++) {\r\n nodes.push(xChildRight.childNodes[idx] as HTMLDivElement);\r\n }\r\n }\r\n for (let cIdx = 0; cIdx < nodes.length; cIdx++) {\r\n let item = getDataItem(rows[i]);\r\n let value = getDataItemValueForColumn(item, columns[cIdx]);\r\n trigger(self.onAppendCell,\r\n {\r\n row: rows[i], cell: cIdx,\r\n value: value, item: item,\r\n column: columns[cIdx], dom: nodes[cIdx]\r\n });\r\n }\r\n }\r\n\r\n }\r\n\r\n if (needToReselectCell) {\r\n activeCellNode = getCellNode(activeRow, activeCell);\r\n }\r\n }\r\n\r\n\r\n function startPostProcessing() {\r\n if (!options.enableAsyncPostRender) {\r\n return;\r\n }\r\n clearTimeout(h_postrender);\r\n h_postrender = setTimeout(asyncPostProcessRows, options.asyncPostRenderDelay);\r\n }\r\n\r\n function startPostProcessingCleanup() {\r\n if (!options.enableAsyncPostRenderCleanup) {\r\n return;\r\n }\r\n clearTimeout(h_postrenderCleanup);\r\n h_postrenderCleanup = setTimeout(asyncPostProcessCleanupRows, options.asyncPostRenderCleanupDelay);\r\n }\r\n\r\n function invalidatePostProcessingResults(row) {\r\n // change status of columns to be re-rendered\r\n for (var columnIdx in postProcessedRows[row]) {\r\n if (postProcessedRows[row].hasOwnProperty(columnIdx)) {\r\n postProcessedRows[row][columnIdx] = \"C\";\r\n }\r\n }\r\n postProcessFromRow = Math.min(postProcessFromRow, row);\r\n postProcessToRow = Math.max(postProcessToRow, row);\r\n startPostProcessing();\r\n }\r\n\r\n function updateRowPositions() {\r\n for (var row in rowsCache) {\r\n rowsCache[row].rowNode.forEach(x => x.style.top = getRowTop(row) + \"px\");\r\n }\r\n }\r\n\r\n function render() {\r\n if (!initialized) { return; }\r\n\r\n scrollThrottle.dequeue();\r\n\r\n var visible = getVisibleRange();\r\n var rendered = getRenderedRangeFromVisibleRange(visible);// getRenderedRange();\r\n\r\n // remove rows no longer in the viewport\r\n cleanupRows(rendered);\r\n\r\n // add new rows & missing cells in existing rows\r\n if (lastRenderedScrollLeft != scrollLeft) {\r\n\r\n if (hasFrozenRows) {\r\n\r\n var renderedFrozenRows = $.deepExtend({}, rendered);\r\n\r\n if (options.frozenBottom) {\r\n\r\n renderedFrozenRows.top = actualFrozenRow;\r\n renderedFrozenRows.bottom = getDataLength();\r\n } else {\r\n\r\n renderedFrozenRows.top = 0;\r\n renderedFrozenRows.bottom = options.frozenRow;\r\n }\r\n\r\n cleanUpAndRenderCells(renderedFrozenRows);\r\n }\r\n\r\n cleanUpAndRenderCells(rendered);\r\n }\r\n\r\n // render missing rows\r\n renderRows(rendered);\r\n\r\n // render frozen rows\r\n if (hasFrozenRows) {\r\n if (options.frozenBottom) {\r\n renderRows({\r\n top: actualFrozenRow, bottom: getDataLength() - 1, leftPx: rendered.leftPx, rightPx: rendered.rightPx\r\n });\r\n } else {\r\n renderRows({\r\n top: 0, bottom: options.frozenRow - 1, leftPx: rendered.leftPx, rightPx: rendered.rightPx\r\n });\r\n }\r\n }\r\n\r\n postProcessFromRow = visible.top;\r\n postProcessToRow = Math.min(getDataLengthIncludingAddNew() - 1, visible.bottom);\r\n startPostProcessing();\r\n\r\n lastRenderedScrollTop = scrollTop;\r\n lastRenderedScrollLeft = scrollLeft;\r\n h_render = null;\r\n trigger(self.onRendered, { startRow: visible.top, endRow: visible.bottom, grid: self });\r\n }\r\n\r\n function preventScroll(e) {\r\n e.preventDefault();\r\n }\r\n\r\n // function handleHeaderScroll() {\r\n // handleElementScroll($headerScrollContainer[0]);\r\n // }\r\n\r\n //function handleHeaderRowScroll() {\r\n // if (programmaticScrollingTimeout) {\r\n // return;\r\n // }\r\n // var scrollLeft = $headerRowScrollContainer[0].scrollLeft;\r\n // if (scrollLeft != $viewportScrollContainerX[0].scrollLeft) {\r\n // $viewportScrollContainerX[0].scrollLeft = scrollLeft;\r\n // }\r\n // }\r\n\r\n // function handleFooterRowScroll(e) {\r\n // if (programmaticScrollingTimeout) {\r\n // return;\r\n // }\r\n // var scrollLeft = $footerRowScrollContainer[0].scrollLeft;\r\n // if (scrollLeft != $viewportScrollContainerX[0].scrollLeft) {\r\n // $viewportScrollContainerX[0].scrollLeft = scrollLeft;\r\n // }\r\n //}\r\n\r\n // function handlePreHeaderPanelScroll() {\r\n // handleElementScroll($preHeaderPanelScroller[0]);\r\n // }\r\n\r\n //function handleElementScroll(element) {\r\n // if (programmaticScrollingTimeout) {\r\n // return;\r\n // }\r\n // var scrollLeft = element.scrollLeft;\r\n // if (scrollLeft != $viewportScrollContainerX[0].scrollLeft) {\r\n // $viewportScrollContainerX[0].scrollLeft = scrollLeft;\r\n // }\r\n // }\r\n\r\n function handleScroll() {\r\n scrollTop = $viewportScrollContainerY[0].scrollTop;\r\n scrollLeft = $viewportScrollContainerX[0].scrollLeft;\r\n return _handleScroll(false);\r\n }\r\n\r\n function _handleScroll(isMouseWheel) {\r\n // if (programmaticScrollingTimeout) {\r\n // clearTimeout(programmaticScrollingTimeout);\r\n // }\r\n // programmaticScrollingTimeout = setTimeout(() => {\r\n // programmaticScrollingTimeout = null;\r\n // }, 600);\r\n\r\n // ceiling the max scroll values\r\n let vScrollDist = 0;\r\n if (!options.autoHeight) {\r\n let maxScrollDistanceY = $viewportScrollContainerY[0].scrollHeight - $viewportScrollContainerY[0].clientHeight;\r\n if (scrollTop > maxScrollDistanceY) {\r\n scrollTop = maxScrollDistanceY;\r\n }\r\n vScrollDist = Math.abs(scrollTop - prevScrollTop);\r\n }\r\n\r\n let maxScrollDistanceX = $viewportScrollContainerY[0].scrollWidth - $viewportScrollContainerY[0].clientWidth;\r\n if (scrollLeft > maxScrollDistanceX) {\r\n scrollLeft = maxScrollDistanceX;\r\n }\r\n let hScrollDist = Math.abs(scrollLeft - prevScrollLeft);\r\n\r\n\r\n if (hScrollDist) {\r\n prevScrollLeft = scrollLeft;\r\n\r\n $viewportScrollContainerX[0].scrollLeft = scrollLeft;\r\n $headerScrollContainer[0].scrollLeft = scrollLeft;\r\n $topPanelScroller[0].scrollLeft = scrollLeft;\r\n $headerRowScrollContainer[0].scrollLeft = scrollLeft;\r\n if (options.createFooterRow) {\r\n $footerRowScrollContainer[0].scrollLeft = scrollLeft;\r\n }\r\n if (options.createPreHeaderPanel) {\r\n if (hasFrozenColumns()) {\r\n $preHeaderPanelScrollerR[0].scrollLeft = scrollLeft;\r\n } else {\r\n $preHeaderPanelScroller[0].scrollLeft = scrollLeft;\r\n }\r\n }\r\n if (hasFrozenColumns()) {\r\n if (hasFrozenRows) {\r\n $viewportTopR[0].scrollLeft = scrollLeft;\r\n }\r\n } else {\r\n if (hasFrozenRows) {\r\n $viewportTopL[0].scrollLeft = scrollLeft;\r\n }\r\n }\r\n }\r\n\r\n if (vScrollDist) {\r\n vScrollDir = prevScrollTop < scrollTop ? 1 : -1;\r\n prevScrollTop = scrollTop;\r\n\r\n if (isMouseWheel) {\r\n $viewportScrollContainerY[0].scrollTop = scrollTop;\r\n }\r\n\r\n if (hasFrozenColumns()) {\r\n if (hasFrozenRows && !options.frozenBottom) {\r\n $viewportBottomL[0].scrollTop = scrollTop;\r\n } else {\r\n $viewportTopL[0].scrollTop = scrollTop;\r\n }\r\n }\r\n\r\n // switch virtual pages if needed\r\n if (vScrollDist < viewportH) {\r\n scrollTo(scrollTop + offset);\r\n } else {\r\n var oldOffset = offset;\r\n if (h == viewportH) {\r\n page = 0;\r\n } else {\r\n page = Math.min(n - 1, Math.floor(scrollTop * ((th - viewportH) / (h - viewportH)) * (1 / ph)));\r\n }\r\n offset = Math.round(page * cj);\r\n if (oldOffset != offset) {\r\n invalidateAllRows();\r\n }\r\n\r\n }\r\n }\r\n\r\n if (hScrollDist || vScrollDist) {\r\n var dx = Math.abs(lastRenderedScrollLeft - scrollLeft);\r\n var dy = Math.abs(lastRenderedScrollTop - scrollTop);\r\n if (dx > 20 || dy > 20) {\r\n // if rendering is forced or scrolling is small enough to be \"easy\", just render\r\n if (options.forceSyncScrolling || (dy < viewportH && dx < viewportW)) {\r\n render();\r\n } else {\r\n // otherwise, perform \"difficult\" renders at a capped frequency\r\n scrollThrottle.enqueue();\r\n }\r\n\r\n trigger(self.onViewportChanged, {});\r\n }\r\n }\r\n\r\n trigger(self.onScroll, { scrollLeft: scrollLeft, scrollTop: scrollTop });\r\n\r\n if (hScrollDist || vScrollDist) { return true; }\r\n return false;\r\n }\r\n\r\n /*\r\n limits the frequency at which the provided action is executed.\r\n call enqueue to execute the action - it will execute either immediately or, if it was executed less than minPeriod_ms in the past, as soon as minPeriod_ms has expired.\r\n call dequeue to cancel any pending action.\r\n */\r\n function ActionThrottle(action, minPeriod_ms) {\r\n\r\n var blocked = false;\r\n var queued = false;\r\n\r\n function enqueue() {\r\n if (!blocked) {\r\n blockAndExecute();\r\n } else {\r\n queued = true;\r\n }\r\n }\r\n\r\n function dequeue() {\r\n queued = false;\r\n }\r\n\r\n function blockAndExecute() {\r\n blocked = true;\r\n setTimeout(unblock, minPeriod_ms);\r\n action();\r\n }\r\n\r\n function unblock() {\r\n if (queued) {\r\n dequeue();\r\n blockAndExecute();\r\n } else {\r\n blocked = false;\r\n }\r\n }\r\n\r\n return {\r\n enqueue: enqueue,\r\n dequeue: dequeue\r\n };\r\n }\r\n\r\n function asyncPostProcessRows() {\r\n var dataLength = getDataLength();\r\n while (postProcessFromRow <= postProcessToRow) {\r\n var row = (vScrollDir >= 0) ? postProcessFromRow++ : postProcessToRow--;\r\n var cacheEntry = rowsCache[row];\r\n if (!cacheEntry || row >= dataLength) {\r\n continue;\r\n }\r\n\r\n if (!postProcessedRows[row]) {\r\n postProcessedRows[row] = {};\r\n }\r\n\r\n ensureCellNodesInRowsCache(row);\r\n for (var column in cacheEntry.cellNodesByColumnIdx) {\r\n if (!cacheEntry.cellNodesByColumnIdx.hasOwnProperty(column)) {\r\n continue;\r\n }\r\n\r\n let columnIdx = parseInt(column, 10) | 0;\r\n\r\n var m = columns[columnIdx];\r\n var processedStatus = postProcessedRows[row][columnIdx]; // c=cleanup and re-render, R=rendered\r\n if (m.asyncPostRender && processedStatus !== \"R\") {\r\n var node = cacheEntry.cellNodesByColumnIdx[columnIdx];\r\n if (node) {\r\n m.asyncPostRender(node, row, getDataItem(row), m, (processedStatus === \"C\"));\r\n }\r\n postProcessedRows[row][columnIdx] = \"R\";\r\n }\r\n }\r\n\r\n h_postrender = setTimeout(asyncPostProcessRows, options.asyncPostRenderDelay);\r\n return;\r\n }\r\n }\r\n\r\n function asyncPostProcessCleanupRows() {\r\n if (postProcessedCleanupQueue.length > 0) {\r\n var groupId = postProcessedCleanupQueue[0].groupId;\r\n\r\n // loop through all queue members with this groupID\r\n while (postProcessedCleanupQueue.length > 0 && postProcessedCleanupQueue[0].groupId == groupId) {\r\n var entry = postProcessedCleanupQueue.shift();\r\n if (entry.actionType == \"R\") {\r\n $(entry.node).remove();\r\n }\r\n if (entry.actionType == \"C\") {\r\n var column = columns[entry.columnIdx];\r\n if (column.asyncPostRenderCleanup && entry.node) {\r\n // cleanup must also remove element\r\n column.asyncPostRenderCleanup(entry.node, entry.rowIdx, column);\r\n }\r\n }\r\n }\r\n\r\n // call this function again after the specified delay\r\n h_postrenderCleanup = setTimeout(asyncPostProcessCleanupRows, options.asyncPostRenderCleanupDelay);\r\n }\r\n }\r\n\r\n function updateCellCssStylesOnRenderedRows(addedHash, removedHash) {\r\n var node, columnId, addedRowHash, removedRowHash;\r\n for (var row in rowsCache) {\r\n removedRowHash = removedHash && removedHash[row];\r\n addedRowHash = addedHash && addedHash[row];\r\n\r\n if (removedRowHash) {\r\n for (columnId in removedRowHash) {\r\n if (!addedRowHash || removedRowHash[columnId] != addedRowHash[columnId]) {\r\n node = getCellNode(row, getColumnIndex(columnId));\r\n if (node) {\r\n $(node).removeClass(removedRowHash[columnId]);\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (addedRowHash) {\r\n for (columnId in addedRowHash) {\r\n if (!removedRowHash || removedRowHash[columnId] != addedRowHash[columnId]) {\r\n node = getCellNode(row, getColumnIndex(columnId));\r\n if (node) {\r\n $(node).addClass(addedRowHash[columnId]);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n function addCellCssStyles(key, hash) {\r\n if (cellCssClasses[key]) {\r\n throw new Error(\"addCellCssStyles: cell CSS hash with key '\" + key + \"' already exists.\");\r\n }\r\n\r\n cellCssClasses[key] = hash;\r\n updateCellCssStylesOnRenderedRows(hash, null);\r\n\r\n trigger(self.onCellCssStylesChanged, { \"key\": key, \"hash\": hash, \"grid\": self });\r\n }\r\n\r\n function removeCellCssStyles(key) {\r\n if (!cellCssClasses[key]) {\r\n return;\r\n }\r\n\r\n updateCellCssStylesOnRenderedRows(null, cellCssClasses[key]);\r\n delete cellCssClasses[key];\r\n\r\n trigger(self.onCellCssStylesChanged, { \"key\": key, \"hash\": null, \"grid\": self });\r\n }\r\n\r\n function setCellCssStyles(key, hash) {\r\n var prevHash = cellCssClasses[key];\r\n\r\n cellCssClasses[key] = hash;\r\n updateCellCssStylesOnRenderedRows(hash, prevHash);\r\n\r\n trigger(self.onCellCssStylesChanged, { \"key\": key, \"hash\": hash, \"grid\": self });\r\n }\r\n\r\n function getCellCssStyles(key) {\r\n return cellCssClasses[key];\r\n }\r\n\r\n function flashCell(row, cell, speed, times) {\r\n speed = speed || 100;\r\n if (rowsCache[row]) {\r\n let $cell = $(getCellNode(row, cell));\r\n\r\n let toggleCellClass = (remaining) => {\r\n if (!remaining) { return; }\r\n $cell.toggleClass(options.cellFlashingCssClass);\r\n setTimeout(() => {\r\n toggleCellClass(remaining - 1);\r\n }, speed);\r\n };\r\n toggleCellClass((times || 4) * 2);\r\n }\r\n\r\n }\r\n\r\n\r\n function handleDragInit(e, dd) {\r\n var cell = getCellFromEvent(e);\r\n if (!cell || !cellExists(cell.row, cell.cell)) {\r\n return false;\r\n }\r\n\r\n // var retval = trigger(self.onDragInit, dd, e);\r\n trigger(self.onDragInit, dd, e);\r\n // if (e.isImmediatePropagationStopped()) {\r\n // return retval;\r\n // }\r\n\r\n // // if nobody claims to be handling drag'n'drop by stopping immediate propagation,\r\n // // cancel out of it\r\n // return false;\r\n }\r\n\r\n function handleDragStart(e, dd) {\r\n var cell = getCellFromEvent(e);\r\n if (!cell || !cellExists(cell.row, cell.cell)) {\r\n return false;\r\n }\r\n\r\n var retval = trigger(self.onDragStart, dd, e);\r\n if (e.isImmediatePropagationStopped()) {\r\n return retval;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n function handleDrag(e, dd) {\r\n return trigger(self.onDrag, dd, e);\r\n }\r\n\r\n function handleDragEnd(e, dd) {\r\n trigger(self.onDragEnd, dd, e);\r\n }\r\n\r\n function handleKeyDown(e) {\r\n trigger(self.onKeyDown, { row: activeRow, cell: activeCell }, e);\r\n var handled = e.isImmediatePropagationStopped();\r\n var keyCode = Slick.keyCode;\r\n\r\n if (!handled) {\r\n if (!e.shiftKey && !e.altKey) {\r\n if (options.editable && currentEditor && currentEditor.keyCaptureList) {\r\n if (typeof currentEditor.keyCaptureList === \"function\") {\r\n if (currentEditor.keyCaptureList(e.which) === false) {\r\n return;\r\n }\r\n } else if (currentEditor.keyCaptureList.indexOf(e.which) > -1) {\r\n return;\r\n }\r\n }\r\n if (e.which == keyCode.HOME) {\r\n handled = (e.ctrlKey) ? navigateTop() : navigateRowStart();\r\n } else if (e.which == keyCode.END) {\r\n handled = (e.ctrlKey) ? navigateBottom() : navigateRowEnd();\r\n }\r\n }\r\n }\r\n if (!handled) {\r\n if (!e.shiftKey && !e.altKey && !e.ctrlKey) {\r\n // editor may specify an array of keys to bubble\r\n if (options.editable && currentEditor && currentEditor.keyCaptureList) {\r\n if (typeof currentEditor.keyCaptureList === \"function\") {\r\n if (currentEditor.keyCaptureList(e.which) === false) {\r\n return;\r\n }\r\n } else if (currentEditor.keyCaptureList.indexOf(e.which) > -1) {\r\n return;\r\n }\r\n }\r\n if (e.which == keyCode.ESCAPE) {\r\n if (!getEditorLock().isActive()) {\r\n return; // no editing mode to cancel, allow bubbling and default processing (exit without cancelling the event)\r\n }\r\n cancelEditAndSetFocus();\r\n } else if (e.which == keyCode.PAGE_DOWN) {\r\n navigatePageDown();\r\n handled = true;\r\n } else if (e.which == keyCode.PAGE_UP) {\r\n navigatePageUp();\r\n handled = true;\r\n } else if (e.which == keyCode.LEFT) {\r\n handled = navigateLeft();\r\n } else if (e.which == keyCode.RIGHT) {\r\n handled = navigateRight();\r\n } else if (e.which == keyCode.UP) {\r\n handled = navigateUp();\r\n } else if (e.which == keyCode.DOWN) {\r\n handled = navigateDown();\r\n } else if (e.which == keyCode.TAB) {\r\n handled = navigateNext();\r\n } else if (e.which == keyCode.ENTER) {\r\n if (options.editable) {\r\n if (currentEditor) {\r\n // adding new row\r\n if (activeRow === getDataLength()) {\r\n navigateDown();\r\n } else {\r\n commitEditAndNavDown();\r\n }\r\n } else {\r\n if (getEditorLock().commitCurrentEdit()) {\r\n makeActiveCellEditable(undefined, undefined, e);\r\n }\r\n }\r\n }\r\n handled = true;\r\n }\r\n } else if (e.which == keyCode.TAB && e.shiftKey && !e.ctrlKey && !e.altKey) {\r\n handled = navigatePrev();\r\n }\r\n }\r\n\r\n if (handled) {\r\n // the event has been handled so don't let parent element (bubbling/propagation) or browser (default) handle it\r\n e.stopPropagation();\r\n e.preventDefault();\r\n try {\r\n e.originalEvent.keyCode = 0; // prevent default behaviour for special keys in IE browsers (F3, F5, etc.)\r\n } catch (error) {\r\n }\r\n }\r\n }\r\n\r\n function handleClick(e) {\r\n if (!currentEditor) {\r\n // if this click resulted in some cell child node getting focus,\r\n // don't steal it back - keyboard events will still bubble up\r\n // iE9+ seems to default DIVs to tabIndex=0 instead of -1, so check for cell clicks directly.\r\n if (e.target != document.activeElement || $(e.target).hasClass(\"slick-cell\")) {\r\n setFocus();\r\n }\r\n }\r\n\r\n var cell = getCellFromEvent(e);\r\n if (!cell || (currentEditor !== null && activeRow == cell.row && activeCell == cell.cell)) {\r\n return;\r\n }\r\n\r\n trigger(self.onClick, { row: cell.row, cell: cell.cell }, e);\r\n if (e.isImmediatePropagationStopped()) {\r\n return;\r\n }\r\n\r\n // this optimisation causes trouble - MLeibman #329\r\n // if ((activeCell != cell.cell || activeRow != cell.row) && canCellBeActive(cell.row, cell.cell)) {\r\n if (canCellBeActive(cell.row, cell.cell)) {\r\n if (!getEditorLock().isActive() || getEditorLock().commitCurrentEdit()) {\r\n scrollRowIntoView(cell.row, false);\r\n\r\n var preClickModeOn = (e.target && e.target.className === Slick.preClickClassName);\r\n var column = columns[cell.cell];\r\n var suppressActiveCellChangedEvent = (options.editable && column && column.editor && options.suppressActiveCellChangeOnEdit) ? true : false;\r\n setActiveCellInternal(getCellNode(cell.row, cell.cell), null, preClickModeOn, suppressActiveCellChangedEvent, e);\r\n }\r\n }\r\n }\r\n\r\n function handleContextMenu(e) {\r\n var $cell = $(e.target).closestClass(\"slick-cell\", \"grid-canvas\");\r\n if ($cell.length === 0) {\r\n return;\r\n }\r\n\r\n // are we editing this cell?\r\n if (activeCellNode === $cell[0] && currentEditor !== null) {\r\n return;\r\n }\r\n\r\n trigger(self.onContextMenu, {}, e);\r\n }\r\n\r\n function handleDblClick(e) {\r\n var cell = getCellFromEvent(e);\r\n if (!cell || (currentEditor !== null && activeRow == cell.row && activeCell == cell.cell)) {\r\n return;\r\n }\r\n trigger(self.onDblClick, { row: cell.row, cell: cell.cell }, e);\r\n if (e.isImmediatePropagationStopped()) {\r\n return;\r\n }\r\n\r\n if (options.editable) {\r\n gotoCell(cell.row, cell.cell, true, e);\r\n }\r\n }\r\n\r\n // function handleHeaderMouseEnter(e) {\r\n // trigger(self.onHeaderMouseEnter, {\r\n // \"column\": $(this).data(\"column\"),\r\n // \"grid\": self\r\n // }, e);\r\n // }\r\n\r\n // function handleHeaderMouseLeave(e) {\r\n // trigger(self.onHeaderMouseLeave, {\r\n // \"column\": $(this).data(\"column\"),\r\n // \"grid\": self\r\n // }, e);\r\n // }\r\n\r\n function handleHeaderContextMenu(e) {\r\n var $header = $(e.target).closestClass(\"slick-header-column\", \"slick-header-columns\");\r\n var column = $header && $header.data(\"column\");\r\n trigger(self.onHeaderContextMenu, { column: column }, e);\r\n }\r\n\r\n function handleHeaderClick(e) {\r\n // if (columnResizeDragging) return;\r\n var $header = $(e.target).closestClass(\"slick-header-column\", \"slick-header-columns\");\r\n var column = $header && $header.data(\"column\");\r\n if (column) {\r\n trigger(self.onHeaderClick, { column: column }, e);\r\n }\r\n }\r\n\r\n function handleMouseEnter(e) {\r\n trigger(self.onMouseEnter, {}, e);\r\n }\r\n\r\n function handleMouseLeave(e) {\r\n trigger(self.onMouseLeave, {}, e);\r\n }\r\n\r\n function cellExists(row, cell) {\r\n return !(row < 0 || row >= getDataLength() || cell < 0 || cell >= columns.length);\r\n }\r\n\r\n function getCellFromPoint(x, y) {\r\n var row = getRowFromPosition(y);\r\n\r\n // tODO TODOFIX -> frozen rows at bottom\r\n if (hasFrozenRows && y <= getFrozenRowOffset(actualFrozenRow)) {\r\n row = getRowFromPosition(y - offset);\r\n }\r\n\r\n var cell = 0;\r\n\r\n var w = 0;\r\n for (var i = 0; i < columns.length && w < x; i++) {\r\n w += columns[i].width;\r\n cell++;\r\n }\r\n\r\n if (cell < 0) {\r\n cell = 0;\r\n }\r\n\r\n return { row: row, cell: cell - 1 };\r\n }\r\n\r\n function getCellFromNode(cellNode) {\r\n // read column number from .l<columnNumber> CSS class\r\n var cls = /l\\d+/.exec(cellNode.className);\r\n if (!cls) {\r\n throw new Error(\"getCellFromNode: cannot get cell - \" + cellNode.className);\r\n }\r\n return parseInt(cls[0].substr(1, cls[0].length - 1), 10);\r\n }\r\n\r\n function getRowFromNode(rowNode) {\r\n for (var row in rowsCache) {\r\n for (var i in rowsCache[row].rowNode) {\r\n if (rowsCache[row].rowNode[i] === rowNode) {\r\n return parseInt(row, 10) | 0;\r\n }\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n function getFrozenRowOffset(row) {\r\n var offset =\r\n (hasFrozenRows)\r\n ? (options.frozenBottom)\r\n ? (row >= actualFrozenRow)\r\n ? (h < viewportTopH)\r\n ? (getRowBottom(actualFrozenRow))// (options.rowHeight * (row+1) - offset)\r\n : h\r\n : 0\r\n : (row >= actualFrozenRow)\r\n ? frozenRowsHeight\r\n : 0\r\n : 0;\r\n\r\n return offset;\r\n }\r\n\r\n function getCellFromEvent(e) {\r\n var row, cell;\r\n var $cell = $(e.target).closestClass(\"slick-cell\", \"grid-canvas\");\r\n if (!$cell.length) {\r\n return null;\r\n }\r\n\r\n row = getRowFromNode($cell[0].parentNode);\r\n\r\n if (hasFrozenRows) {\r\n\r\n var c = $cell.closestClass(\"grid-canvas\").offset();\r\n\r\n var rowOffset = 0;\r\n var isBottom = $cell.closestClass(\"grid-canvas-bottom\").length;\r\n\r\n if (isBottom) {\r\n rowOffset = (options.frozenBottom) ? <number>$canvasTopL.height() : frozenRowsHeight;\r\n }\r\n\r\n row = getCellFromPoint(e.clientX - c.left, e.clientY - c.top + rowOffset /* + document.documentElement.scrollTop*/).row;\r\n }\r\n\r\n cell = getCellFromNode($cell[0]);\r\n\r\n if (row == null || cell == null) {\r\n return null;\r\n } else {\r\n return {\r\n \"row\": row,\r\n \"cell\": cell\r\n };\r\n }\r\n }\r\n\r\n function getCellNodeBox(row, cell) {\r\n if (!cellExists(row, cell)) {\r\n return null;\r\n }\r\n\r\n var frozenRowOffset = getFrozenRowOffset(row);\r\n\r\n\r\n\r\n var y1 = getRowTop(row) - frozenRowOffset;\r\n var y2 = y1 + getRowHeight(row) - 1;\r\n var x1 = 0;\r\n for (var i = 0; i < cell; i++) {\r\n x1 += columns[i].width;\r\n\r\n if (options.frozenColumn == i) {\r\n x1 = 0;\r\n }\r\n }\r\n var x2 = x1 + columns[cell].width;\r\n\r\n return {\r\n top: y1,\r\n left: x1,\r\n bottom: y2,\r\n right: x2\r\n };\r\n }\r\n\r\n //////////////////////////////////////////////////////////////////////////////////////////////\r\n // cell switching\r\n\r\n function getRowHeight(row: number) {\r\n if (!options.variableRowHeight) {\r\n return options.rowHeight;\r\n }\r\n return rowPositionCache[row].height;\r\n }\r\n\r\n function resetActiveCell() {\r\n setActiveCellInternal(null, false);\r\n }\r\n\r\n function setFocus() {\r\n if (tabbingDirection == -1) {\r\n $focusSink[0].focus();\r\n } else {\r\n $focusSink2[0].focus();\r\n }\r\n }\r\n\r\n function scrollCellIntoView(row, cell, doPaging) {\r\n scrollRowIntoView(row, doPaging);\r\n\r\n if (cell <= options.frozenColumn) {\r\n return;\r\n }\r\n\r\n var colspan = getColspan(row, cell);\r\n internalScrollColumnIntoView(columnPosLeft[cell], columnPosRight[cell + (colspan > 1 ? colspan - 1 : 0)]);\r\n }\r\n\r\n function internalScrollColumnIntoView(left, right) {\r\n var scrollRight = scrollLeft + <number>$viewportScrollContainerX.width();\r\n\r\n if (left < scrollLeft) {\r\n $.each($viewportScrollContainerX, function (idx, el) { el.scrollLeft = left; });\r\n handleScroll();\r\n render();\r\n } else if (right > scrollRight) {\r\n $.each($viewportScrollContainerX, function (idx, el) { el.scrollLeft = Math.min(left, right - $viewportScrollContainerX[0].clientWidth); });\r\n handleScroll();\r\n render();\r\n }\r\n }\r\n\r\n function scrollColumnIntoView(cell) {\r\n internalScrollColumnIntoView(columnPosLeft[cell], columnPosRight[cell]);\r\n }\r\n\r\n function setActiveCellInternal(newCell, opt_editMode?, preClickModeOn?, suppressActiveCellChangedEvent?, e?) {\r\n if (activeCellNode !== null) {\r\n makeActiveCellNormal();\r\n $(activeCellNode).removeClass(\"active\");\r\n if (rowsCache[activeRow]) {\r\n rowsCache[activeRow].rowNode.forEach(x => x.classList.remove(\"active\")); // $(rowsCache[activeRow].rowNode).removeClass(\"active\");\r\n }\r\n }\r\n\r\n var activeCellChanged = (activeCellNode !== newCell);\r\n activeCellNode = newCell;\r\n\r\n if (activeCellNode != null) {\r\n var $activeCellNode = $(activeCellNode);\r\n var $activeCellOffset = $activeCellNode.offset();\r\n\r\n var rowOffset = Math.floor($activeCellNode.closestClass(\"grid-canvas\").offset().top);\r\n var isBottom = $activeCellNode.closestClass(\"grid-canvas-bottom\").length;\r\n\r\n if (hasFrozenRows && isBottom) {\r\n rowOffset -= (options.frozenBottom)\r\n ? <number>$canvasTopL.height()\r\n : frozenRowsHeight;\r\n }\r\n\r\n let cell = getCellFromPoint($activeCellOffset.left, Math.ceil($activeCellOffset.top) - rowOffset);\r\n\r\n activeRow = cell.row;\r\n activeCell = activePosX = activeCell = activePosX = getCellFromNode(activeCellNode);\r\n\r\n $activeCellNode.addClass(\"active\");\r\n if (rowsCache[activeRow]) {\r\n rowsCache[activeRow].rowNode.forEach(x => x.classList.add(\"active\"));// $(rowsCache[activeRow].rowNode).addClass('active');\r\n }\r\n\r\n if (opt_editMode == null) {\r\n opt_editMode = (activeRow == getDataLength()) || options.autoEdit;\r\n }\r\n\r\n if (options.showCellSelection) {\r\n $(activeCellNode).addClass(\"active\");\r\n rowsCache[activeRow].rowNode.forEach(x => x.classList.add(\"active\")); // $(rowsCache[activeRow].rowNode).addClass(\"active\");\r\n }\r\n\r\n if (options.editable && opt_editMode && isCellPotentiallyEditable(activeRow, activeCell)) {\r\n clearTimeout(h_editorLoader);\r\n\r\n if (options.asyncEditorLoading) {\r\n h_editorLoader = setTimeout(function () {\r\n makeActiveCellEditable(undefined, preClickModeOn, e);\r\n }, options.asyncEditorLoadDelay);\r\n } else {\r\n makeActiveCellEditable(undefined, preClickModeOn, e);\r\n }\r\n }\r\n } else {\r\n activeRow = activeCell = null;\r\n }\r\n\r\n // this optimisation causes trouble - MLeibman #329\r\n // if (activeCellChanged) {\r\n if (!suppressActiveCellChangedEvent) { trigger(self.onActiveCellChanged, getActiveCell(), e); }\r\n // }\r\n }\r\n\r\n function clearTextSelection() {\r\n if ((<any>document).selection && (<any>document).selection.empty) {\r\n try {\r\n // iE fails here if selected element is not in dom\r\n (<any>document).selection.empty();\r\n } catch (e) { }\r\n } else if (window.getSelection) {\r\n var sel = window.getSelection();\r\n if (sel && sel.removeAllRanges) {\r\n sel.removeAllRanges();\r\n }\r\n }\r\n }\r\n\r\n function isCellPotentiallyEditable(row, cell) {\r\n var dataLength = getDataLength();\r\n // is the data for this row loaded?\r\n if (row < dataLength && !getDataItem(row)) {\r\n return false;\r\n }\r\n\r\n // are we in the Add New row? can we create new from this cell?\r\n if (columns[cell].cannotTriggerInsert && row >= dataLength) {\r\n return false;\r\n }\r\n\r\n // does this cell have an editor?\r\n if (!getEditor(row, cell) || columns[cell].readonly) {\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n function makeActiveCellNormal() {\r\n if (!currentEditor) {\r\n return;\r\n }\r\n trigger(self.onBeforeCellEditorDestroy, { editor: currentEditor });\r\n currentEditor.destroy();\r\n currentEditor = null;\r\n\r\n if (activeCellNode) {\r\n var d = getDataItem(activeRow);\r\n $(activeCellNode).removeClass(\"editable invalid\");\r\n if (d) {\r\n var column = columns[activeCell];\r\n var formatter = getFormatter(activeRow, column);\r\n var formatterResult = formatter(activeRow, activeCell, getDataItemValueForColumn(d, column), column, d, self);\r\n applyFormatResultToCellNode(formatterResult, activeCellNode);\r\n if (self.onAppendCell.countHandlers() > 0) {\r\n let item = getDataItem(activeRow);\r\n let value = getDataItemValueForColumn(item, columns[activeCell]);\r\n trigger(self.onAppendCell,\r\n {\r\n row: activeRow, cell: activeCell,\r\n value: value, item: item,\r\n column: column, dom: activeCellNode\r\n });\r\n }\r\n invalidatePostProcessingResults(activeRow);\r\n }\r\n }\r\n\r\n // if there previously was text selected on a page (such as selected text in the edit cell just removed),\r\n // iE can't set focus to anything else correctly\r\n if (navigator.userAgent.toLowerCase().match(/msie/)) {\r\n clearTextSelection();\r\n }\r\n\r\n getEditorLock().deactivate(editController);\r\n }\r\n\r\n function makeActiveCellEditable(editor, preClickModeOn, e) {\r\n if (!activeCellNode) {\r\n return;\r\n }\r\n if (!options.editable) {\r\n throw new Error(\"Grid : makeActiveCellEditable : should never get called when options.editable is false\");\r\n }\r\n\r\n // cancel pending async call if there is one\r\n clearTimeout(h_editorLoader);\r\n\r\n if (!isCellPotentiallyEditable(activeRow, activeCell)) {\r\n return;\r\n }\r\n\r\n var columnDef = columns[activeCell];\r\n var item = getDataItem(activeRow);\r\n\r\n if (trigger(self.onBeforeEditCell, { row: activeRow, cell: activeCell, item: item, column: columnDef }) === false) {\r\n setFocus();\r\n return;\r\n }\r\n\r\n getEditorLock().activate(editController);\r\n $(activeCellNode).addClass(\"editable\");\r\n\r\n var useEditor = editor || getEditor(activeRow, activeCell);\r\n\r\n // don't clear the cell if a custom editor is passed through\r\n if (!editor && !useEditor.suppressClearOnEdit) {\r\n activeCellNode.innerHTML = \"\";\r\n }\r\n\r\n var metadata = data.getItemMetadata && data.getItemMetadata(activeRow);\r\n metadata = metadata && metadata.columns;\r\n var columnMetaData = metadata && (metadata[columnDef.id] || metadata[activeCell]);\r\n\r\n currentEditor = new useEditor({\r\n grid: self,\r\n gridPosition: absBox($container[0]),\r\n position: absBox(activeCellNode),\r\n container: activeCellNode,\r\n column: columnDef,\r\n columnMetaData: columnMetaData,\r\n item: item || {},\r\n event: e,\r\n commitChanges: commitEditAndNavDown,\r\n commitChangesOnly: commitEditAndSetFocus,\r\n cancelChanges: cancelEditAndSetFocus\r\n });\r\n\r\n if (item) {\r\n currentEditor.loadValue(item);\r\n if (preClickModeOn && currentEditor.preClick) {\r\n currentEditor.preClick();\r\n }\r\n }\r\n\r\n serializedEditorValue = currentEditor.serializeValue();\r\n\r\n if (currentEditor.position) {\r\n handleActiveCellPositionChange();\r\n }\r\n }\r\n\r\n function commitEditAndNavDown() {\r\n // if the commit fails, it would do so due to a validation error\r\n // if so, do not steal the focus from the editor\r\n if (getEditorLock().commitCurrentEdit()) {\r\n setFocus();\r\n if (options.autoEdit) {\r\n navigateDown();\r\n }\r\n }\r\n }\r\n\r\n function commitEditAndSetFocus() {\r\n // if the commit fails, it would do so due to a validation error\r\n // if so, do not steal the focus from the editor\r\n if (getEditorLock().commitCurrentEdit()) {\r\n setFocus();\r\n }\r\n }\r\n\r\n function cancelEditAndSetFocus() {\r\n if (getEditorLock().cancelCurrentEdit()) {\r\n setFocus();\r\n }\r\n }\r\n\r\n function absBox(elem) {\r\n var box = {\r\n top: elem.offsetTop,\r\n left: elem.offsetLeft,\r\n bottom: 0,\r\n right: 0,\r\n width: $(elem).width(), // outerWidth(),\r\n height: $(elem).height(), // outerHeight(),\r\n visible: true\r\n };\r\n box.bottom = box.top + box.height;\r\n box.right = box.left + box.width;\r\n\r\n // walk up the tree\r\n var offsetParent = elem.offsetParent;\r\n while ((elem = elem.parentNode) != document.body) {\r\n if (elem == null) { break; }\r\n\r\n if (box.visible && elem.scrollHeight != elem.offsetHeight && $(elem).css(\"overflowY\") != \"visible\") {\r\n box.visible = box.bottom > elem.scrollTop && box.top < elem.scrollTop + elem.clientHeight;\r\n }\r\n\r\n if (box.visible && elem.scrollWidth != elem.offsetWidth && $(elem).css(\"overflowX\") != \"visible\") {\r\n box.visible = box.right > elem.scrollLeft && box.left < elem.scrollLeft + elem.clientWidth;\r\n }\r\n\r\n box.left -= elem.scrollLeft;\r\n box.top -= elem.scrollTop;\r\n\r\n if (elem === offsetParent) {\r\n box.left += elem.offsetLeft;\r\n box.top += elem.offsetTop;\r\n offsetParent = elem.offsetParent;\r\n }\r\n\r\n box.bottom = box.top + box.height;\r\n box.right = box.left + box.width;\r\n }\r\n\r\n return box;\r\n }\r\n\r\n function getActiveCellPosition() {\r\n return absBox(activeCellNode);\r\n }\r\n\r\n function getGridPosition() {\r\n return absBox($container[0]);\r\n }\r\n\r\n function handleActiveCellPositionChange() {\r\n if (!activeCellNode) {\r\n return;\r\n }\r\n\r\n trigger(self.onActiveCellPositionChanged, {});\r\n\r\n if (currentEditor) {\r\n var cellBox = getActiveCellPosition();\r\n if (currentEditor.show && currentEditor.hide) {\r\n if (!cellBox.visible) {\r\n currentEditor.hide();\r\n } else {\r\n currentEditor.show();\r\n }\r\n }\r\n\r\n if (currentEditor.position) {\r\n currentEditor.position(cellBox);\r\n }\r\n }\r\n }\r\n\r\n function getCellEditor() {\r\n return currentEditor;\r\n }\r\n\r\n function getActiveCell() {\r\n if (!activeCellNode) {\r\n return null;\r\n } else {\r\n return { row: activeRow, cell: activeCell };\r\n }\r\n }\r\n\r\n function getActiveCellNode() {\r\n return activeCellNode;\r\n }\r\n\r\n function scrollRowIntoView(row, doPaging) {\r\n if (!hasFrozenRows ||\r\n (!options.frozenBottom && row > actualFrozenRow - 1) ||\r\n (options.frozenBottom && row < actualFrozenRow - 1)) {\r\n\r\n var viewportScrollH = <number>$viewportScrollContainerY.height();\r\n\r\n // if frozen row on top\r\n // subtract number of frozen row\r\n var rowNumber = (hasFrozenRows && !options.frozenBottom ? row - options.frozenRow : row);\r\n\r\n var rowBottom = options.variableRowHeight ? rowPositionCache[row].bottom : ((rowNumber + 1) * options.rowHeight);\r\n\r\n var rowAtTop = options.variableRowHeight ? rowPositionCache[row].top : (rowNumber * options.rowHeight);\r\n var rowAtBottom = rowBottom - viewportScrollH + (viewportHasHScroll ? scrollbarDimensions.height : 0);\r\n\r\n // need to page down?\r\n if (rowBottom > scrollTop + viewportScrollH + offset) {\r\n scrollTo(doPaging ? rowAtTop : rowAtBottom);\r\n render();\r\n } else if (rowAtTop < scrollTop + offset) {\r\n scrollTo(doPaging ? rowAtBottom : rowAtTop);\r\n render();\r\n }\r\n }\r\n }\r\n\r\n function scrollRowToTop(row: number) {\r\n scrollTo(options.variableRowHeight ? rowPositionCache[row].top : (row * options.rowHeight));\r\n render();\r\n }\r\n\r\n function scrollPage(dir) {\r\n var deltaRows = dir * numVisibleRows;\r\n /// first fully visible row crosses the line with\r\n /// y == bottomOfTopmostFullyVisibleRow\r\n var bottomOfTopmostFullyVisibleRow = scrollTop + options.rowHeight - 1; // tODO\r\n scrollTo((getRowFromPosition(bottomOfTopmostFullyVisibleRow) + deltaRows) * options.rowHeight); // tODO\r\n render();\r\n\r\n if (options.enableCellNavigation && activeRow != null) {\r\n var row = activeRow + deltaRows;\r\n var dataLengthIncludingAddNew = getDataLengthIncludingAddNew();\r\n if (row >= dataLengthIncludingAddNew) {\r\n row = dataLengthIncludingAddNew - 1;\r\n }\r\n if (row < 0) {\r\n row = 0;\r\n }\r\n\r\n var cell = 0, prevCell = null;\r\n var prevActivePosX = activePosX;\r\n while (cell <= activePosX) {\r\n if (canCellBeActive(row, cell)) {\r\n prevCell = cell;\r\n }\r\n cell += getColspan(row, cell);\r\n }\r\n\r\n if (prevCell !== null) {\r\n setActiveCellInternal(getCellNode(row, prevCell));\r\n activePosX = prevActivePosX;\r\n } else {\r\n resetActiveCell();\r\n }\r\n }\r\n }\r\n\r\n function navigatePageDown() {\r\n scrollPage(1);\r\n }\r\n\r\n function navigatePageUp() {\r\n scrollPage(-1);\r\n }\r\n\r\n function navigateTop() {\r\n navigateToRow(0);\r\n }\r\n\r\n function navigateBottom() {\r\n navigateToRow(getDataLength() - 1);\r\n }\r\n\r\n function navigateToRow(row) {\r\n var num_rows = getDataLength();\r\n if (!num_rows) { return true; }\r\n\r\n if (row < 0) { row = 0; } else if (row >= num_rows) { row = num_rows - 1; }\r\n\r\n scrollCellIntoView(row, 0, true);\r\n if (options.enableCellNavigation && activeRow != null) {\r\n var cell = 0, prevCell = null;\r\n var prevActivePosX = activePosX;\r\n while (cell <= activePosX) {\r\n if (canCellBeActive(row, cell)) {\r\n prevCell = cell;\r\n }\r\n cell += getColspan(row, cell);\r\n }\r\n\r\n if (prevCell !== null) {\r\n setActiveCellInternal(getCellNode(row, prevCell));\r\n activePosX = prevActivePosX;\r\n } else {\r\n resetActiveCell();\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n function getColspan(row, cell) {\r\n var metadata = data.getItemMetadata && data.getItemMetadata(row);\r\n if (!metadata || !metadata.columns) {\r\n return 1;\r\n }\r\n\r\n var columnData = metadata.columns[columns[cell].id] || metadata.columns[cell];\r\n var colspan = (columnData && columnData.colspan);\r\n if (colspan === \"*\") {\r\n colspan = columns.length - cell;\r\n } else {\r\n colspan = colspan || 1;\r\n }\r\n\r\n return colspan;\r\n }\r\n\r\n function findFirstFocusableCell(row) {\r\n var cell = 0;\r\n while (cell < columns.length) {\r\n if (canCellBeActive(row, cell)) {\r\n return cell;\r\n }\r\n cell += getColspan(row, cell);\r\n }\r\n return null;\r\n }\r\n\r\n function findLastFocusableCell(row) {\r\n var cell = 0;\r\n var lastFocusableCell = null;\r\n while (cell < columns.length) {\r\n if (canCellBeActive(row, cell)) {\r\n lastFocusableCell = cell;\r\n }\r\n cell += getColspan(row, cell);\r\n }\r\n return lastFocusableCell;\r\n }\r\n\r\n function gotoRight(row, cell, posX) {\r\n if (cell >= columns.length) {\r\n return null;\r\n }\r\n\r\n do {\r\n cell += getColspan(row, cell);\r\n }\r\n while (cell < columns.length && !canCellBeActive(row, cell));\r\n\r\n if (cell < columns.length) {\r\n return {\r\n \"row\": row,\r\n \"cell\": cell,\r\n \"posX\": cell\r\n };\r\n }\r\n return null;\r\n }\r\n\r\n function gotoLeft(row, cell, posX) {\r\n if (cell <= 0) {\r\n return null;\r\n }\r\n\r\n var firstFocusableCell = findFirstFocusableCell(row);\r\n if (firstFocusableCell === null || firstFocusableCell >= cell) {\r\n return null;\r\n }\r\n\r\n var prev = {\r\n \"row\": row,\r\n \"cell\": firstFocusableCell,\r\n \"posX\": firstFocusableCell\r\n };\r\n var pos;\r\n while (true) {\r\n pos = gotoRight(prev.row, prev.cell, prev.posX);\r\n if (!pos) {\r\n return null;\r\n }\r\n if (pos.cell >= cell) {\r\n return prev;\r\n }\r\n prev = pos;\r\n }\r\n }\r\n\r\n function gotoDown(row, cell, posX) {\r\n var prevCell;\r\n var dataLengthIncludingAddNew = getDataLengthIncludingAddNew();\r\n while (true) {\r\n if (++row >= dataLengthIncludingAddNew) {\r\n return null;\r\n }\r\n\r\n prevCell = cell = 0;\r\n while (cell <= posX) {\r\n prevCell = cell;\r\n cell += getColspan(row, cell);\r\n }\r\n\r\n if (canCellBeActive(row, prevCell)) {\r\n return {\r\n \"row\": row,\r\n \"cell\": prevCell,\r\n \"posX\": posX\r\n };\r\n }\r\n }\r\n }\r\n\r\n function gotoUp(row, cell, posX) {\r\n var prevCell;\r\n while (true) {\r\n if (--row < 0) {\r\n return null;\r\n }\r\n\r\n prevCell = cell = 0;\r\n while (cell <= posX) {\r\n prevCell = cell;\r\n cell += getColspan(row, cell);\r\n }\r\n\r\n if (canCellBeActive(row, prevCell)) {\r\n return {\r\n \"row\": row,\r\n \"cell\": prevCell,\r\n \"posX\": posX\r\n };\r\n }\r\n }\r\n }\r\n\r\n function gotoNext(row, cell, posX) {\r\n if (row == null && cell == null) {\r\n row = cell = posX = 0;\r\n if (canCellBeActive(row, cell)) {\r\n return {\r\n \"row\": row,\r\n \"cell\": cell,\r\n \"posX\": cell\r\n };\r\n }\r\n }\r\n\r\n var pos = gotoRight(row, cell, posX);\r\n if (pos) {\r\n return pos;\r\n }\r\n\r\n var firstFocusableCell = null;\r\n var dataLengthIncludingAddNew = getDataLengthIncludingAddNew();\r\n\r\n // if at last row, cycle through columns rather than get stuck in the last one\r\n if (row === dataLengthIncludingAddNew - 1) { row--; }\r\n\r\n while (++row < dataLengthIncludingAddNew) {\r\n firstFocusableCell = findFirstFocusableCell(row);\r\n if (firstFocusableCell !== null) {\r\n return {\r\n \"row\": row,\r\n \"cell\": firstFocusableCell,\r\n \"posX\": firstFocusableCell\r\n };\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n function gotoPrev(row, cell, posX) {\r\n if (row == null && cell == null) {\r\n row = getDataLengthIncludingAddNew() - 1;\r\n cell = posX = columns.length - 1;\r\n if (canCellBeActive(row, cell)) {\r\n return {\r\n \"row\": row,\r\n \"cell\": cell,\r\n \"posX\": cell\r\n };\r\n }\r\n }\r\n\r\n var pos;\r\n var lastSelectableCell;\r\n while (!pos) {\r\n pos = gotoLeft(row, cell, posX);\r\n if (pos) {\r\n break;\r\n }\r\n if (--row < 0) {\r\n return null;\r\n }\r\n\r\n cell = 0;\r\n lastSelectableCell = findLastFocusableCell(row);\r\n if (lastSelectableCell !== null) {\r\n pos = {\r\n \"row\": row,\r\n \"cell\": lastSelectableCell,\r\n \"posX\": lastSelectableCell\r\n };\r\n }\r\n }\r\n return pos;\r\n }\r\n\r\n function gotoRowStart(row, cell, posX) {\r\n var newCell = findFirstFocusableCell(row);\r\n if (newCell === null) { return null; }\r\n\r\n return {\r\n \"row\": row,\r\n \"cell\": newCell,\r\n \"posX\": newCell\r\n };\r\n }\r\n\r\n function gotoRowEnd(row, cell, posX) {\r\n var newCell = findLastFocusableCell(row);\r\n if (newCell === null) { return null; }\r\n\r\n return {\r\n \"row\": row,\r\n \"cell\": newCell,\r\n \"posX\": newCell\r\n };\r\n }\r\n\r\n function navigateRight() {\r\n return navigate(\"right\");\r\n }\r\n\r\n function navigateLeft() {\r\n return navigate(\"left\");\r\n }\r\n\r\n function navigateDown() {\r\n return navigate(\"down\");\r\n }\r\n\r\n function navigateUp() {\r\n return navigate(\"up\");\r\n }\r\n\r\n function navigateNext() {\r\n return navigate(\"next\");\r\n }\r\n\r\n function navigatePrev() {\r\n return navigate(\"prev\");\r\n }\r\n\r\n function navigateRowStart() {\r\n return navigate(\"home\");\r\n }\r\n\r\n function navigateRowEnd() {\r\n return navigate(\"end\");\r\n }\r\n\r\n /**\r\n * @param {string} dir Navigation direction.\r\n * @return {boolean} Whether navigation resulted in a change of active cell.\r\n */\r\n function navigate(dir) {\r\n if (!options.enableCellNavigation) {\r\n return false;\r\n }\r\n\r\n if (!activeCellNode && dir != \"prev\" && dir != \"next\") {\r\n return false;\r\n }\r\n\r\n if (!getEditorLock().commitCurrentEdit()) {\r\n return true;\r\n }\r\n setFocus();\r\n\r\n var tabbingDirections = {\r\n \"up\": -1,\r\n \"down\": 1,\r\n \"left\": -1,\r\n \"right\": 1,\r\n \"prev\": -1,\r\n \"next\": 1,\r\n \"home\": -1,\r\n \"end\": 1\r\n };\r\n tabbingDirection = tabbingDirections[dir];\r\n\r\n var stepFunctions = {\r\n \"up\": gotoUp,\r\n \"down\": gotoDown,\r\n \"left\": gotoLeft,\r\n \"right\": gotoRight,\r\n \"prev\": gotoPrev,\r\n \"next\": gotoNext,\r\n \"home\": gotoRowStart,\r\n \"end\": gotoRowEnd\r\n };\r\n var stepFn = stepFunctions[dir];\r\n var pos = stepFn(activeRow, activeCell, activePosX);\r\n if (pos) {\r\n if (hasFrozenRows && options.frozenBottom && pos.row == getDataLength()) { // tODO correct?\r\n return;\r\n }\r\n\r\n var isAddNewRow = (pos.row == getDataLength());\r\n\r\n if ((!options.frozenBottom && pos.row >= actualFrozenRow)\r\n || (options.frozenBottom && pos.row < actualFrozenRow)\r\n ) {\r\n scrollCellIntoView(pos.row, pos.cell, !isAddNewRow && options.emulatePagingWhenScrolling);\r\n }\r\n setActiveCellInternal(getCellNode(pos.row, pos.cell));\r\n activePosX = pos.posX;\r\n return true;\r\n } else {\r\n setActiveCellInternal(getCellNode(activeRow, activeCell));\r\n return false;\r\n }\r\n }\r\n\r\n function getCellNode(row, cell) {\r\n if (rowsCache[row]) {\r\n ensureCellNodesInRowsCache(row);\r\n // try {\r\n // return rowsCache[row].cellNodesByColumnIdx[cell][0];\r\n // } catch (e) {\r\n return rowsCache[row].cellNodesByColumnIdx[cell];\r\n // }\r\n }\r\n return null;\r\n }\r\n\r\n function setActiveCell(row, cell, opt_editMode, preClickModeOn, suppressActiveCellChangedEvent) {\r\n if (!initialized) { return; }\r\n if (row > getDataLength() || row < 0 || cell >= columns.length || cell < 0) {\r\n return;\r\n }\r\n\r\n if (!options.enableCellNavigation) {\r\n return;\r\n }\r\n\r\n scrollCellIntoView(row, cell, false);\r\n setActiveCellInternal(getCellNode(row, cell), opt_editMode, preClickModeOn, suppressActiveCellChangedEvent);\r\n }\r\n\r\n function canCellBeActive(row, cell) {\r\n if (!options.enableCellNavigation || row >= getDataLengthIncludingAddNew() ||\r\n row < 0 || cell >= columns.length || cell < 0) {\r\n return false;\r\n }\r\n\r\n var rowMetadata = data.getItemMetadata && data.getItemMetadata(row);\r\n if (rowMetadata && typeof rowMetadata.focusable !== \"undefined\") {\r\n return !!rowMetadata.focusable;\r\n }\r\n\r\n var columnMetadata = rowMetadata && rowMetadata.columns;\r\n if (columnMetadata && columnMetadata[columns[cell].id] && typeof columnMetadata[columns[cell].id].focusable !== \"undefined\") {\r\n return !!columnMetadata[columns[cell].id].focusable;\r\n }\r\n if (columnMetadata && columnMetadata[cell] && typeof columnMetadata[cell].focusable !== \"undefined\") {\r\n return !!columnMetadata[cell].focusable;\r\n }\r\n\r\n return !!columns[cell].focusable;\r\n }\r\n\r\n function canCellBeSelected(row, cell) {\r\n if (row >= getDataLength() || row < 0 || cell >= columns.length || cell < 0) {\r\n return false;\r\n }\r\n\r\n var rowMetadata = data.getItemMetadata && data.getItemMetadata(row);\r\n if (rowMetadata && typeof rowMetadata.selectable !== \"undefined\") {\r\n return !!rowMetadata.selectable;\r\n }\r\n\r\n var columnMetadata = rowMetadata && rowMetadata.columns && (rowMetadata.columns[columns[cell].id] || rowMetadata.columns[cell]);\r\n if (columnMetadata && typeof columnMetadata.selectable !== \"undefined\") {\r\n return !!columnMetadata.selectable;\r\n }\r\n\r\n return !!columns[cell].selectable;\r\n }\r\n\r\n function gotoCell(row, cell, forceEdit?, e?) {\r\n if (!initialized) { return; }\r\n if (!canCellBeActive(row, cell)) {\r\n return;\r\n }\r\n\r\n if (!getEditorLock().commitCurrentEdit()) {\r\n return;\r\n }\r\n\r\n scrollCellIntoView(row, cell, false);\r\n\r\n var newCell = getCellNode(row, cell);\r\n\r\n // if selecting the 'add new' row, start editing right away\r\n var column = columns[cell];\r\n var suppressActiveCellChangedEvent = !!(options.editable && column && column.editor && options.suppressActiveCellChangeOnEdit);\r\n setActiveCellInternal(newCell, (forceEdit || (row === getDataLength()) || options.autoEdit), null, suppressActiveCellChangedEvent, e);\r\n\r\n // if no editor was created, set the focus back on the grid\r\n if (!currentEditor) {\r\n setFocus();\r\n }\r\n }\r\n\r\n\r\n //////////////////////////////////////////////////////////////////////////////////////////////\r\n // iEditor implementation for the editor lock\r\n\r\n function commitCurrentEdit() {\r\n var item = getDataItem(activeRow);\r\n var column = columns[activeCell];\r\n\r\n if (currentEditor) {\r\n if (currentEditor.isValueChanged()) {\r\n var validationResults = currentEditor.validate();\r\n\r\n if (validationResults.valid) {\r\n if (activeRow < getDataLength()) {\r\n var editCommand = {\r\n row: activeRow,\r\n cell: activeCell,\r\n editor: currentEditor,\r\n serializedValue: currentEditor.serializeValue(),\r\n prevSerializedValue: serializedEditorValue,\r\n execute: function () {\r\n this.editor.applyValue(item, this.serializedValue);\r\n updateRow(this.row);\r\n trigger(self.onCellChange, {\r\n row: this.row,\r\n cell: this.cell,\r\n item: item,\r\n value: this.serializedValue\r\n });\r\n },\r\n undo: function () {\r\n this.editor.applyValue(item, this.prevSerializedValue);\r\n updateRow(this.row);\r\n trigger(self.onCellChange, {\r\n row: this.row,\r\n cell: this.cell,\r\n item: item,\r\n value: this.prevSerializedValue\r\n });\r\n }\r\n };\r\n\r\n if (options.editCommandHandler) {\r\n makeActiveCellNormal();\r\n options.editCommandHandler(item, column, editCommand);\r\n } else {\r\n editCommand.execute();\r\n makeActiveCellNormal();\r\n }\r\n\r\n } else {\r\n var newItem = {};\r\n currentEditor.applyValue(newItem, currentEditor.serializeValue());\r\n makeActiveCellNormal();\r\n trigger(self.onAddNewRow, { item: newItem, column: column });\r\n }\r\n\r\n // check whether the lock has been re-acquired by event handlers\r\n return !getEditorLock().isActive();\r\n } else {\r\n // re-add the CSS class to trigger transitions, if any.\r\n $(activeCellNode).removeClass(\"invalid\");\r\n $(activeCellNode).width(); // force layout\r\n $(activeCellNode).addClass(\"invalid\");\r\n\r\n trigger(self.onValidationError, {\r\n editor: currentEditor,\r\n cellNode: activeCellNode,\r\n validationResults: validationResults,\r\n row: activeRow,\r\n cell: activeCell,\r\n column: column\r\n });\r\n\r\n currentEditor.focus();\r\n return false;\r\n }\r\n }\r\n\r\n makeActiveCellNormal();\r\n }\r\n return true;\r\n }\r\n\r\n function cancelCurrentEdit() {\r\n makeActiveCellNormal();\r\n return true;\r\n }\r\n\r\n function rowsToRanges(rows) {\r\n var ranges = [];\r\n var lastCell = columns.length - 1;\r\n for (var i = 0; i < rows.length; i++) {\r\n ranges.push(new Slick.Range(rows[i], 0, rows[i], lastCell));\r\n }\r\n return ranges;\r\n }\r\n\r\n function getSelectedRows() {\r\n if (!selectionModel) {\r\n throw new Error(\"Selection model is not set\");\r\n }\r\n return selectedRows;\r\n }\r\n\r\n function setSelectedRows(rows) {\r\n if (!selectionModel) {\r\n throw new Error(\"Selection model is not set\");\r\n }\r\n // if (self && self.getEditorLock && !self.getEditorLock().isActive()) {\r\n selectionModel.setSelectedRanges(rowsToRanges(rows));\r\n // }\r\n }\r\n\r\n\r\n\r\n //////////////////////////////////////////////////////////////////////////////////////////////\r\n // public API\r\n\r\n $.shallowExtend(this, {\r\n \"slickGridVersion\": \"2.4.7\",\r\n\r\n // events\r\n \"onScroll\": new Slick.Event(),\r\n \"onSort\": new Slick.Event(),\r\n // \"onHeaderMouseEnter\": new Slick.Event(),\r\n // \"onHeaderMouseLeave\": new Slick.Event(),\r\n \"onHeaderContextMenu\": new Slick.Event(),\r\n \"onHeaderClick\": new Slick.Event(),\r\n \"onHeaderCellRendered\": new Slick.Event(),\r\n \"onBeforeHeaderCellDestroy\": new Slick.Event(),\r\n \"onHeaderRowCellRendered\": new Slick.Event(),\r\n \"onFooterRowCellRendered\": new Slick.Event(),\r\n \"onBeforeHeaderRowCellDestroy\": new Slick.Event(),\r\n \"onBeforeFooterRowCellDestroy\": new Slick.Event(),\r\n \"onMouseEnter\": new Slick.Event(),\r\n \"onMouseLeave\": new Slick.Event(),\r\n \"onClick\": new Slick.Event(),\r\n \"onDblClick\": new Slick.Event(),\r\n \"onContextMenu\": new Slick.Event(),\r\n \"onKeyDown\": new Slick.Event(),\r\n \"onAddNewRow\": new Slick.Event(),\r\n \"onAppendCell\": new Slick.Event(),\r\n \"onValidationError\": new Slick.Event(),\r\n \"onViewportChanged\": new Slick.Event(),\r\n \"onColumnsReordered\": new Slick.Event(),\r\n \"onColumnsResized\": new Slick.Event(),\r\n \"onCellChange\": new Slick.Event(),\r\n \"onBeforeEditCell\": new Slick.Event(),\r\n \"onBeforeCellEditorDestroy\": new Slick.Event(),\r\n \"onBeforeDestroy\": new Slick.Event(),\r\n \"onActiveCellChanged\": new Slick.Event(),\r\n \"onActiveCellPositionChanged\": new Slick.Event(),\r\n \"onDragInit\": new Slick.Event(),\r\n \"onDragStart\": new Slick.Event(),\r\n \"onDrag\": new Slick.Event(),\r\n \"onDragEnd\": new Slick.Event(),\r\n \"onSelectedRowsChanged\": new Slick.Event(),\r\n \"onCellCssStylesChanged\": new Slick.Event(),\r\n \"onAutosizeColumns\": new Slick.Event(),\r\n \"onRendered\": new Slick.Event(),\r\n \"onAppendRow\": new Slick.Event(), // added NEW\r\n \"onBeforeRemoveRow\": new Slick.Event(), // added NEW\r\n\r\n // methods\r\n \"registerPlugin\": registerPlugin,\r\n \"unregisterPlugin\": unregisterPlugin,\r\n \"getPluginByName\": getPluginByName,\r\n \"getColumns\": getColumns,\r\n \"setColumns\": setColumns,\r\n \"getColumnIndex\": getColumnIndex,\r\n \"getColumnById\": getColumnById,\r\n \"updateColumnHeader\": updateColumnHeader,\r\n \"setSortColumn\": setSortColumn,\r\n \"setSortColumns\": setSortColumns,\r\n \"getSortColumns\": getSortColumns,\r\n \"autosizeColumns\": autosizeColumns,\r\n \"getOptions\": getOptions,\r\n \"setOptions\": setOptions,\r\n \"getData\": getData,\r\n \"getDataLength\": getDataLength,\r\n \"getDataItem\": getDataItem,\r\n \"setData\": setData,\r\n \"getSelectionModel\": getSelectionModel,\r\n \"setSelectionModel\": setSelectionModel,\r\n \"getSelectedRows\": getSelectedRows,\r\n \"setSelectedRows\": setSelectedRows,\r\n \"getContainerNode\": getContainerNode,\r\n \"updatePagingStatusFromView\": updatePagingStatusFromView,\r\n \"applyFormatResultToCellNode\": applyFormatResultToCellNode,\r\n\r\n \"render\": render,\r\n \"invalidate\": invalidate,\r\n \"invalidateRow\": invalidateRow,\r\n \"invalidateRows\": invalidateRows,\r\n \"invalidateAllRows\": invalidateAllRows,\r\n \"updateCell\": updateCell,\r\n \"updateRow\": updateRow,\r\n \"getViewport\": getVisibleRange,\r\n \"getRenderedRange\": getRenderedRange,\r\n \"resizeCanvas\": resizeCanvas,\r\n \"updateRowCount\": updateRowCount,\r\n \"scrollRowIntoView\": scrollRowIntoView,\r\n \"scrollRowToTop\": scrollRowToTop,\r\n \"scrollCellIntoView\": scrollCellIntoView,\r\n \"scrollColumnIntoView\": scrollColumnIntoView,\r\n \"getCanvasNode\": getCanvasNode,\r\n \"getUID\": getUID,\r\n \"getHeaderColumnWidthDiff\": getHeaderColumnWidthDiff,\r\n \"getScrollbarDimensions\": getScrollbarDimensions,\r\n \"getHeadersWidth\": getHeadersWidth,\r\n \"getCanvasWidth\": getCanvasWidth,\r\n \"getCanvases\": getCanvases,\r\n \"getActiveCanvasNode\": getActiveCanvasNode,\r\n \"setActiveCanvasNode\": setActiveCanvasNode,\r\n \"getViewportNode\": getViewportNode,\r\n \"getActiveViewportNode\": getActiveViewportNode,\r\n \"setActiveViewportNode\": setActiveViewportNode,\r\n \"focus\": setFocus,\r\n \"scrollTo\": scrollTo,\r\n\r\n \"getCellFromPoint\": getCellFromPoint,\r\n \"getCellFromEvent\": getCellFromEvent,\r\n \"getActiveCell\": getActiveCell,\r\n \"setActiveCell\": setActiveCell,\r\n \"getActiveCellNode\": getActiveCellNode,\r\n \"getActiveCellPosition\": getActiveCellPosition,\r\n \"resetActiveCell\": resetActiveCell,\r\n \"editActiveCell\": makeActiveCellEditable,\r\n \"getCellEditor\": getCellEditor,\r\n \"getCellNode\": getCellNode,\r\n \"getCellNodeBox\": getCellNodeBox,\r\n \"canCellBeSelected\": canCellBeSelected,\r\n \"canCellBeActive\": canCellBeActive,\r\n \"navigatePrev\": navigatePrev,\r\n \"navigateNext\": navigateNext,\r\n \"navigateUp\": navigateUp,\r\n \"navigateDown\": navigateDown,\r\n \"navigateLeft\": navigateLeft,\r\n \"navigateRight\": navigateRight,\r\n \"navigatePageUp\": navigatePageUp,\r\n \"navigatePageDown\": navigatePageDown,\r\n \"navigateTop\": navigateTop,\r\n \"navigateBottom\": navigateBottom,\r\n \"navigateRowStart\": navigateRowStart,\r\n \"navigateRowEnd\": navigateRowEnd,\r\n \"gotoCell\": gotoCell,\r\n \"getTopPanel\": getTopPanel,\r\n \"setTopPanelVisibility\": setTopPanelVisibility,\r\n \"getPreHeaderPanel\": getPreHeaderPanel,\r\n \"getPreHeaderPanelRight\": getPreHeaderPanelRight,\r\n \"setPreHeaderPanelVisibility\": setPreHeaderPanelVisibility,\r\n \"getHeader\": getHeader,\r\n \"getHeaderColumn\": getHeaderColumn,\r\n \"setHeaderRowVisibility\": setHeaderRowVisibility,\r\n \"getHeaderRow\": getHeaderRow,\r\n \"getHeaderRowColumn\": getHeaderRowColumn,\r\n \"setFooterRowVisibility\": setFooterRowVisibility,\r\n \"getFooterRow\": getFooterRow,\r\n \"getFooterRowColumn\": getFooterRowColumn,\r\n \"getGridPosition\": getGridPosition,\r\n \"flashCell\": flashCell,\r\n \"addCellCssStyles\": addCellCssStyles,\r\n \"setCellCssStyles\": setCellCssStyles,\r\n \"removeCellCssStyles\": removeCellCssStyles,\r\n \"getCellCssStyles\": getCellCssStyles,\r\n \"getFrozenRowOffset\": getFrozenRowOffset,\r\n \"getDataItemValueForColumn\": getDataItemValueForColumn,\r\n\r\n \"init\": finishInitialization,\r\n \"destroy\": destroy,\r\n\r\n // iEditor implementation\r\n \"getEditorLock\": getEditorLock,\r\n \"getEditController\": getEditController\r\n });\r\n\r\n init();\r\n}\r\n","import \"./resizable.css\";\r\nimport \"../core/polyfills\";\r\nimport { EventHandler } from \"./eventhandler\";\r\n\r\nexport interface IResizeEventArg {\r\n x: number;\r\n y: number;\r\n target: HTMLElement;\r\n evt: MouseEvent;\r\n}\r\n\r\nexport interface IResizeOptions {\r\n minWidth?: number;\r\n maxWidth?: number;\r\n minHeight?: number;\r\n maxHeight?: number;\r\n resizeDelta?: number;\r\n resizeHandlePrefix?: string;\r\n onStart?: EventHandler<IResizeEventArg>;\r\n onStop?: EventHandler<IResizeEventArg>;\r\n onResize?: EventHandler<IResizeEventArg>;\r\n gridX?: number;\r\n gridY?: number;\r\n}\r\n\r\nconst defaultOptions: IResizeOptions = {\r\n resizeHandlePrefix: \"rs-\",\r\n onStart: new EventHandler<IResizeEventArg>(),\r\n onStop: new EventHandler<IResizeEventArg>(),\r\n onResize: new EventHandler<IResizeEventArg>(),\r\n resizeDelta: 0\r\n};\r\n\r\nexport class ResizeContainer {\r\n\r\n private element: HTMLElement;\r\n\r\n private resizeX: boolean;\r\n private resizeY: boolean;\r\n\r\n private startSize: { x: number, y: number } = { x: null, y: null };\r\n\r\n constructor(private container: HTMLElement,\r\n private options: IResizeOptions) {\r\n this.init();\r\n }\r\n\r\n private init(): void {\r\n this.container.classList.add(\"resizable\");\r\n this.container.addEventListener(\"mousedown\", this.mouseDownContainer, false);\r\n this.container.addEventListener(\"touchstart\", this.mouseDownContainer, false);\r\n }\r\n\r\n private mouseDownContainer = (evt: MouseEvent) => {\r\n const target: HTMLElement = evt.target as HTMLElement;\r\n if ((\" \" + target.className).indexOf(\" \" + this.options.resizeHandlePrefix) < 0) {\r\n return; // not a resize handle\r\n }\r\n evt.preventDefault();\r\n evt.stopPropagation();\r\n evt.stopImmediatePropagation();\r\n this.resizeX = target.classList.contains(this.options.resizeHandlePrefix + \"r\") ||\r\n target.classList.contains(this.options.resizeHandlePrefix + \"l\");\r\n this.resizeY = target.classList.contains(this.options.resizeHandlePrefix + \"t\") ||\r\n target.classList.contains(this.options.resizeHandlePrefix + \"b\");\r\n\r\n this.element = target.parentElement; // TODO change to closest class\r\n this.options.onStart.notify({evt, target: this.element, x: this.extractArg<number>(evt, \"pageX\"), y: this.extractArg<number>(evt, \"pageY\")});\r\n\r\n // register event listeners\r\n window.addEventListener(\"mousemove\", this.mouseMove, false);\r\n window.addEventListener(\"mouseup\", this.mouseUp, false);\r\n window.addEventListener(\"touchmove\", this.mouseMove, false);\r\n window.addEventListener(\"touchend\", this.mouseUp, false);\r\n }\r\n\r\n private mouseMove = (evt: MouseEvent) => {\r\n let raiseEvt = false;\r\n\r\n if (this.resizeX) {\r\n let val: number = this.extractArg<number>(evt, \"clientX\") - this.element.getBoundingClientRect().left;\r\n if (this.options.minWidth && val < this.options.minWidth) {\r\n val = this.options.minWidth;\r\n } else if (this.options.maxWidth && val > this.options.maxWidth) {\r\n val = this.options.maxWidth;\r\n }\r\n if (this.startSize != null && this.startSize.x == null) {\r\n this.startSize.x = val;\r\n }\r\n if (this.startSize == null || Math.abs(this.startSize.x - val) >= this.options.resizeDelta) {\r\n // if (!this.options.gridX || Math.round(val) % this.options.gridX === 0) {\r\n if (this.options.gridX) {\r\n val = Math.round(val / this.options.gridX) * this.options.gridX;\r\n }\r\n this.element.style.width = Math.round(val) + \"px\";\r\n raiseEvt = true;\r\n this.startSize = null;\r\n // }\r\n }\r\n }\r\n if (this.resizeY) {\r\n let val: number = this.extractArg<number>(evt, \"clientY\") - this.element.getBoundingClientRect().top;\r\n if (this.options.minHeight && val < this.options.minHeight) {\r\n val = this.options.minHeight;\r\n } else if (this.options.maxHeight && val > this.options.maxHeight) {\r\n val = this.options.maxHeight;\r\n }\r\n if (this.startSize != null && this.startSize.y == null) {\r\n this.startSize.y = val;\r\n }\r\n if (this.startSize == null || Math.abs(this.startSize.y - val) >= this.options.resizeDelta) {\r\n // if (!this.options.gridY || Math.round(val) % this.options.gridY === 0) {\r\n if (this.options.gridY) {\r\n val = Math.round(val / this.options.gridY) * this.options.gridY;\r\n }\r\n this.element.style.height = Math.round(val) + \"px\";\r\n raiseEvt = true;\r\n this.startSize = null;\r\n // }\r\n }\r\n }\r\n if (raiseEvt) {\r\n this.options.onResize.notify({evt, target: this.element, x: this.extractArg<number>(evt, \"pageX\"), y: this.extractArg<number>(evt, \"pageY\")});\r\n }\r\n }\r\n\r\n private mouseUp = (evt: MouseEvent) => {\r\n window.removeEventListener(\"mousemove\", this.mouseMove, false);\r\n window.removeEventListener(\"mouseup\", this.mouseUp, false);\r\n window.removeEventListener(\"touchmove\", this.mouseMove, false);\r\n window.removeEventListener(\"touchend\", this.mouseUp, false);\r\n this.options.onStop.notify({evt, target: this.element, x: this.extractArg<number>(evt, \"pageX\"), y: this.extractArg<number>(evt, \"pageY\")});\r\n this.startSize = { x: null, y: null };\r\n }\r\n\r\n private extractArg<T>(evt: any, key: string): T {\r\n return evt[key] != null ? evt[key] : (evt.touches.length > 0 ? evt.touches : evt.changedTouches)[0][key];\r\n }\r\n\r\n}\r\n\r\nexport function Resizable(selector: HTMLElement | string, options?: IResizeOptions): ResizeContainer {\r\n return new ResizeContainer(typeof selector === \"string\" ?\r\n document.querySelector(selector) :\r\n selector,\r\n { ...defaultOptions, ...options });\r\n}\r\n","// source: https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent/CustomEvent\r\n(function () {\r\n if (typeof window.CustomEvent === \"function\") { return false };\r\n\r\n function CustomEvent(event, params) {\r\n params = params || { bubbles: false, cancelable: false, detail: undefined };\r\n var evt = document.createEvent(\"CustomEvent\");\r\n evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\r\n return evt;\r\n }\r\n\r\n CustomEvent.prototype = window.Event.prototype;\r\n\r\n (window as any).CustomEvent = CustomEvent;\r\n\r\n if (!(\"remove\" in Element.prototype)) {\r\n (Element.prototype as any).remove = function() {\r\n if (this.parentNode) {\r\n this.parentNode.removeChild(this);\r\n }\r\n };\r\n }\r\n\r\n})();\r\n","export interface IEvent<T, T2 = void> {\r\n subscribe(fnc: (args?: T, args2?: T2) => any);\r\n notify(val?: T);\r\n}\r\n\r\nexport class EventHandler<T, T2 = void> implements IEvent<T, T2> {\r\n\r\n public static Create(click: (EventHandler<any, any> | ((p?: any, p2?: any) => any))) {\r\n if (click == null) {\r\n return new EventHandler<any, any>();\r\n }\r\n if (typeof click === \"function\") {\r\n const res = new EventHandler<any, any>();\r\n res.subscribe(click);\r\n return res;\r\n }\r\n return click;\r\n }\r\n\r\n private handlers = [];\r\n\r\n constructor(fnc?: (args?: T, args2?: T2) => any) {\r\n if (fnc != null) {\r\n this.handlers.push(fnc);\r\n }\r\n }\r\n\r\n public subscribe(fnc: (args?: T, args2?: T2) => any) {\r\n this.handlers.push(fnc);\r\n }\r\n\r\n public notify(val?: T, val2?: T2) {\r\n for (const h of this.handlers) {\r\n h(val, val2);\r\n }\r\n }\r\n\r\n public count(): number {\r\n return this.handlers.length;\r\n }\r\n\r\n public unSubscribe(fnc: (args?: T, args2?: T2) => any) {\r\n if (this.handlers.indexOf(fnc) >= 0) {\r\n this.handlers.splice(this.handlers.indexOf(fnc), 1);\r\n } else {\r\n // TODO? throw exception?\r\n console.warn(\"handler not found in EventHandler.unSubscribe\");\r\n }\r\n }\r\n}\r\n","import { jQueryReplacement } from '../../core/jq'\r\nimport { Slick } from '../slick.core'\r\n\r\n\r\nlet $ = jQueryReplacement;\r\n\r\n// register namespace\r\n$.deepExtend(window, {\r\n\"Slick\": {\r\n \"RowSelectionModel\": RowSelectionModel\r\n}\r\n});\r\n\r\n export function RowSelectionModel(options?: any) {\r\n var _grid;\r\n var _ranges = [];\r\n var _self = this;\r\n var _handler = new Slick.EventHandler();\r\n var _inHandler;\r\n var _options;\r\n var _defaults = {\r\n selectActiveRow: true\r\n };\r\n\r\n function init(grid) {\r\n _options = $.deepExtend({}, _defaults, options);\r\n _grid = grid;\r\n _handler.subscribe(_grid.onActiveCellChanged,\r\n wrapHandler(handleActiveCellChange));\r\n _handler.subscribe(_grid.onKeyDown,\r\n wrapHandler(handleKeyDown));\r\n _handler.subscribe(_grid.onClick,\r\n wrapHandler(handleClick));\r\n }\r\n\r\n function destroy() {\r\n _handler.unsubscribeAll();\r\n }\r\n\r\n function wrapHandler(handler) {\r\n return function () {\r\n if (!_inHandler) {\r\n _inHandler = true;\r\n handler.apply(this, arguments);\r\n _inHandler = false;\r\n }\r\n };\r\n }\r\n\r\n function rangesToRows(ranges) {\r\n var rows = [];\r\n for (var i = 0; i < ranges.length; i++) {\r\n for (var j = ranges[i].fromRow; j <= ranges[i].toRow; j++) {\r\n rows.push(j);\r\n }\r\n }\r\n return rows;\r\n }\r\n\r\n function rowsToRanges(rows) {\r\n var ranges = [];\r\n var lastCell = _grid.getColumns().length - 1;\r\n for (var i = 0; i < rows.length; i++) {\r\n ranges.push(new Slick.Range(rows[i], 0, rows[i], lastCell));\r\n }\r\n return ranges;\r\n }\r\n\r\n function getRowsRange(from, to) {\r\n var i, rows = [];\r\n for (i = from; i <= to; i++) {\r\n rows.push(i);\r\n }\r\n for (i = to; i < from; i++) {\r\n rows.push(i);\r\n }\r\n return rows;\r\n }\r\n\r\n function getSelectedRows() {\r\n return rangesToRows(_ranges);\r\n }\r\n\r\n function setSelectedRows(rows) {\r\n setSelectedRanges(rowsToRanges(rows));\r\n }\r\n\r\n function setSelectedRanges(ranges) {\r\n // simple check for: empty selection didn't change, prevent firing onSelectedRangesChanged\r\n if ((!_ranges || _ranges.length === 0) && (!ranges || ranges.length === 0)) { return; }\r\n _ranges = ranges;\r\n _self.onSelectedRangesChanged.notify(_ranges);\r\n }\r\n\r\n function getSelectedRanges() {\r\n return _ranges;\r\n }\r\n\r\n function handleActiveCellChange(e, data) {\r\n if (_options.selectActiveRow && data.row != null) {\r\n setSelectedRanges([new Slick.Range(data.row, 0, data.row, _grid.getColumns().length - 1)]);\r\n }\r\n }\r\n\r\n function handleKeyDown(e) {\r\n var activeRow = _grid.getActiveCell();\r\n if (_grid.getOptions().multiSelect && activeRow \r\n && e.shiftKey && !e.ctrlKey && !e.altKey && !e.metaKey \r\n && (e.which == Slick.keyCode.UP || e.which == Slick.keyCode.DOWN)) {\r\n var selectedRows = getSelectedRows();\r\n selectedRows.sort(function (x, y) {\r\n return x - y\r\n });\r\n\r\n if (!selectedRows.length) {\r\n selectedRows = [activeRow.row];\r\n }\r\n\r\n var top = selectedRows[0];\r\n var bottom = selectedRows[selectedRows.length - 1];\r\n var active;\r\n\r\n if (e.which == Slick.keyCode.DOWN) {\r\n active = activeRow.row < bottom || top == bottom ? ++bottom : ++top;\r\n } else {\r\n active = activeRow.row < bottom ? --bottom : --top;\r\n }\r\n\r\n if (active >= 0 && active < _grid.getDataLength()) {\r\n _grid.scrollRowIntoView(active);\r\n var tempRanges = rowsToRanges(getRowsRange(top, bottom));\r\n setSelectedRanges(tempRanges);\r\n }\r\n\r\n e.preventDefault();\r\n e.stopPropagation();\r\n }\r\n }\r\n\r\n function handleClick(e) {\r\n var cell = _grid.getCellFromEvent(e);\r\n if (!cell || !_grid.canCellBeActive(cell.row, cell.cell)) {\r\n return false;\r\n }\r\n\r\n if (!_grid.getOptions().multiSelect || (\r\n !e.ctrlKey && !e.shiftKey && !e.metaKey)) {\r\n return false;\r\n }\r\n\r\n var selection = rangesToRows(_ranges);\r\n var idx = selection.indexOf(cell.row);\r\n //var idx = $.inArray(cell.row, selection);\r\n\r\n if (idx === -1 && (e.ctrlKey || e.metaKey)) {\r\n selection.push(cell.row);\r\n _grid.setActiveCell(cell.row, cell.cell);\r\n } else if (idx !== -1 && (e.ctrlKey || e.metaKey)) {\r\n selection = selection.filter(function (o, i) {\r\n return (o !== cell.row);\r\n });\r\n _grid.setActiveCell(cell.row, cell.cell);\r\n } else if (selection.length && e.shiftKey) {\r\n var last = selection.pop();\r\n var from = Math.min(cell.row, last);\r\n var to = Math.max(cell.row, last);\r\n selection = [];\r\n for (var i = from; i <= to; i++) {\r\n if (i !== last) {\r\n selection.push(i);\r\n }\r\n }\r\n selection.push(last);\r\n _grid.setActiveCell(cell.row, cell.cell);\r\n }\r\n\r\n var tempRanges = rowsToRanges(selection);\r\n setSelectedRanges(tempRanges);\r\n e.stopImmediatePropagation();\r\n\r\n return true;\r\n }\r\n\r\n $.shallowExtend(this, {\r\n \"getSelectedRows\": getSelectedRows,\r\n \"setSelectedRows\": setSelectedRows,\r\n\r\n \"getSelectedRanges\": getSelectedRanges,\r\n \"setSelectedRanges\": setSelectedRanges,\r\n\r\n \"init\": init,\r\n \"destroy\": destroy,\r\n \"pluginName\": \"RowSelectionModel\",\r\n\r\n \"onSelectedRangesChanged\": new Slick.Event()\r\n });\r\n }\r\n","import { jQueryReplacement } from \"../core/jq\";\r\nimport { Slick, ISlickEvent } from \"./slick.core\";\r\n\r\nexport interface IRefreshHint {\r\n isFilterNarrowing?: boolean;\r\n isFilterExpanding?: boolean;\r\n isFilterUnchanged?: boolean;\r\n ignoreDiffsBefore?: number;\r\n ignoreDiffsAfter?: number;\r\n}\r\n\r\nexport interface IGroupInfo {\r\n value: any;\r\n count: number;\r\n rows: any[];\r\n selectChecked: boolean;\r\n groupingKey: string;\r\n level: number;\r\n}\r\n\r\nexport interface IGroupingInfo {\r\n getter: string;\r\n formatter: (g: IGroupInfo) => string;\r\n comparer?: (a, b) => number;\r\n predefinedValues?: any[];\r\n aggregators: any[];\r\n aggregateEmpty?: boolean;\r\n aggregateCollapsed?: boolean;\r\n aggregateChildGroups?: boolean;\r\n collapsed?: boolean;\r\n displayTotalsRow?: boolean;\r\n lazyTotalsCalculation?: boolean;\r\n}\r\n\r\n\r\nconst $ = jQueryReplacement;\r\n\r\nexport interface ISlickDataView<T> {\r\n onRowsChanged: ISlickEvent<any>; // TODO\r\n onRowCountChanged: ISlickEvent<any>;\r\n setGrouping: (groupInfo: IGroupingInfo | IGroupingInfo[]) => void;\r\n getGrouping: () => IGroupingInfo;\r\n refresh: () => void;\r\n sort: (comparer, ascending: boolean) => void;\r\n updateItem: (id: any, item: T) => void;\r\n getRowByItem: (item: T) => number;\r\n getRowById: (id: any) => number;\r\n getItemById: (id: any) => T;\r\n getIdxById: (id: any) => number;\r\n getIdxByItem: (item: T) => number;\r\n getItemByIdx: (idx: number) => T;\r\n getItem: (row: number) => T;\r\n setFilterArgs: (args: any) => void;\r\n setFilter: (filter: (item: T, args: any) => boolean) => void;\r\n beginUpdate(): void;\r\n endUpdate(): void;\r\n setItems(data, objectIdProperty?): void;\r\n\r\n addItem(item: T): void;\r\n collapseAllGroups: (level?: number) => void;\r\n expandAllGroups: (level?: number) => void;\r\n collapseGroup: (...params: string[]) => void;\r\n expandGroup: (...params: string[]) => void;\r\n getFilteredItems: () => T[];\r\n getGroups: () => any; //TODO: type\r\n syncGridSelection: (grid: any, preserveHidden?: boolean, preserveHiddenOnSelectionChange?: boolean) => ISlickEvent<any>;\r\n insertItem: (insertBefore: number, item: T) => void;\r\n deleteItem: (id: any) => void;\r\n\r\n // // methods\r\n // \"setPagingOptions\": setPagingOptions,\r\n // \"getPagingInfo\": getPagingInfo,\r\n // \"getItems\": getItems,\r\n // \"setFilter\": setFilter,\r\n // \"getFilter\": getFilter,\r\n // \"reSort\": reSort,\r\n // \"groupBy\": groupBy,\r\n // \"setAggregators\": setAggregators,\r\n\r\n\r\n // \"mapItemsToRows\": mapItemsToRows,\r\n // \"mapRowsToIds\": mapRowsToIds,\r\n // \"mapIdsToRows\": mapIdsToRows,\r\n // \"setRefreshHints\": setRefreshHints,\r\n // \"setFilterArgs\": setFilterArgs,\r\n // \"refresh\": refresh,\r\n // \"sortedAddItem\": sortedAddItem,\r\n // \"sortedUpdateItem\": sortedUpdateItem,\r\n // \"syncGridSelection\": syncGridSelection,\r\n // \"syncGridCellCssStyles\": syncGridCellCssStyles,\r\n\r\n // // data provider methods\r\n // \"getLength\": getLength,\r\n // \"getItemMetadata\": getItemMetadata,\r\n\r\n // // events\r\n // \"onRowsOrCountChanged\": onRowsOrCountChanged,\r\n // \"onPagingInfoChanged\": onPagingInfoChanged\r\n}\r\n\r\n\r\n/***\r\n * A sample Model implementation.\r\n * Provides a filtered view of the underlying data.\r\n *\r\n * Relies on the data item having an \"id\" property uniquely identifying it.\r\n */\r\nexport function DataView(options?) {\r\n let self = this;\r\n\r\n let defaults = {\r\n groupItemMetadataProvider: null,\r\n inlineFilters: false\r\n };\r\n\r\n\r\n // private\r\n let idProperty = \"id\"; // property holding a unique row id\r\n let items = []; // data by index\r\n let rows = []; // data by row\r\n let idxById = {}; // indexes by id\r\n let rowsById = null; // rows by id; lazy-calculated\r\n let filter = null; // filter function\r\n let updated = null; // updated item ids\r\n let suspend = false; // suspends the recalculation\r\n let sortAsc = true;\r\n // var fastSortField;\r\n let sortComparer;\r\n let refreshHints: IRefreshHint = {};\r\n let prevRefreshHints: IRefreshHint = {};\r\n let filterArgs;\r\n let filteredItems = [];\r\n // let compiledFilter;\r\n // let compiledFilterWithCaching;\r\n let filterCache = [];\r\n\r\n // grouping\r\n let groupingInfoDefaults = {\r\n getter: null,\r\n formatter: null,\r\n comparer (a, b) {\r\n return (a.value === b.value ? 0 :\r\n (a.value > b.value ? 1 : -1)\r\n );\r\n },\r\n predefinedValues: [],\r\n aggregators: [],\r\n aggregateEmpty: false,\r\n aggregateCollapsed: false,\r\n aggregateChildGroups: false,\r\n collapsed: false,\r\n displayTotalsRow: true,\r\n lazyTotalsCalculation: false\r\n };\r\n let groupingInfos = [];\r\n let groups = [];\r\n let toggledGroupsByLevel = [];\r\n let groupingDelimiter = \":|:\";\r\n\r\n let pagesize = 0;\r\n let pagenum = 0;\r\n let totalRows = 0;\r\n\r\n // events\r\n let onRowCountChanged = new Slick.Event();\r\n let onRowsChanged = new Slick.Event();\r\n let onRowsOrCountChanged = new Slick.Event();\r\n let onPagingInfoChanged = new Slick.Event();\r\n\r\n options = $.deepExtend({}, defaults, options);\r\n\r\n\r\n function beginUpdate() {\r\n suspend = true;\r\n }\r\n\r\n function endUpdate() {\r\n suspend = false;\r\n refresh();\r\n }\r\n\r\n function setRefreshHints(hints) {\r\n refreshHints = hints;\r\n }\r\n\r\n function setFilterArgs(args) {\r\n filterArgs = args;\r\n }\r\n\r\n function updateIdxById(startingIndex?: number) {\r\n startingIndex = startingIndex || 0;\r\n let id;\r\n for (let i = startingIndex, l = items.length; i < l; i++) {\r\n id = items[i][idProperty];\r\n if (id === undefined) {\r\n // throw new Error(\"Each data element must implement a unique 'id' property\");\r\n throw new Error(\"Id (\" + idProperty + \") of element at index \" + i + \" was undefined\");\r\n }\r\n idxById[id] = i;\r\n }\r\n }\r\n\r\n function ensureIdUniqueness() {\r\n let id;\r\n for (let i = 0, l = items.length; i < l; i++) {\r\n id = items[i][idProperty];\r\n if (id === undefined) {\r\n throw new Error(\"Id (\" + idProperty + \") of element at index \" + i + \" was undefined\");\r\n } else if (idxById[id] !== i) {\r\n throw new Error(\"Duplicate id (\" + idProperty + \") for \" + id + \" found at index (\" + idxById[id] + \", \" + i + \")\");\r\n }\r\n }\r\n }\r\n\r\n function getItems() {\r\n return items;\r\n }\r\n\r\n function setItems(data, objectIdProperty) {\r\n if (objectIdProperty !== undefined) {\r\n idProperty = objectIdProperty;\r\n }\r\n items = filteredItems = data;\r\n idxById = {};\r\n updateIdxById();\r\n ensureIdUniqueness();\r\n refresh();\r\n }\r\n\r\n function setPagingOptions(args) {\r\n if (args.pageSize != undefined) {\r\n pagesize = args.pageSize;\r\n pagenum = pagesize ? Math.min(pagenum, Math.max(0, Math.ceil(totalRows / pagesize) - 1)) : 0;\r\n }\r\n\r\n if (args.pageNum != undefined) {\r\n pagenum = Math.min(args.pageNum, Math.max(0, Math.ceil(totalRows / pagesize) - 1));\r\n }\r\n\r\n onPagingInfoChanged.notify(getPagingInfo(), null, self);\r\n\r\n refresh();\r\n }\r\n\r\n function getPagingInfo() {\r\n let totalPages = pagesize ? Math.max(1, Math.ceil(totalRows / pagesize)) : 1;\r\n return { pageSize: pagesize, pageNum: pagenum, totalRows, totalPages, dataView: self };\r\n }\r\n\r\n function sort(comparer, ascending) {\r\n sortAsc = ascending;\r\n sortComparer = comparer;\r\n // fastSortField = null;\r\n if (ascending === false) {\r\n items.reverse();\r\n }\r\n items.sort(comparer);\r\n if (ascending === false) {\r\n items.reverse();\r\n }\r\n idxById = {};\r\n updateIdxById();\r\n refresh();\r\n }\r\n\r\n\r\n function reSort() {\r\n if (sortComparer) {\r\n sort(sortComparer, sortAsc);\r\n }\r\n }\r\n\r\n function getFilteredItems() {\r\n return filteredItems;\r\n }\r\n\r\n\r\n function getFilter() {\r\n return filter;\r\n }\r\n\r\n function setFilter(filterFn) {\r\n filter = filterFn;\r\n // if (options.inlineFilters) {\r\n // compiledFilter = compileFilter();\r\n // compiledFilterWithCaching = compileFilterWithCaching();\r\n // }\r\n refresh();\r\n }\r\n\r\n function getGrouping() {\r\n return groupingInfos;\r\n }\r\n\r\n function setGrouping(groupingInfo) {\r\n if (!options.groupItemMetadataProvider) {\r\n options.groupItemMetadataProvider = new ( Slick as any).Data.GroupItemMetadataProvider();\r\n }\r\n\r\n groups = [];\r\n toggledGroupsByLevel = [];\r\n groupingInfo = groupingInfo || [];\r\n groupingInfos = (groupingInfo instanceof Array) ? groupingInfo : [groupingInfo];\r\n\r\n for (let i = 0; i < groupingInfos.length; i++) {\r\n const gi = groupingInfos[i] = $.deepExtend({}, groupingInfoDefaults, groupingInfos[i]);\r\n gi.getterIsAFn = typeof gi.getter === \"function\";\r\n\r\n // pre-compile accumulator loops\r\n gi.compiledAccumulators = [];\r\n let idx = gi.aggregators.length;\r\n while (idx--) {\r\n gi.compiledAccumulators[idx] = compileAccumulatorLoop(gi.aggregators[idx]);\r\n }\r\n\r\n toggledGroupsByLevel[i] = {};\r\n }\r\n\r\n refresh();\r\n }\r\n\r\n /**\r\n * @deprecated Please use {@link setGrouping}.\r\n */\r\n function groupBy(valueGetter, valueFormatter, sortComparer) {\r\n if (valueGetter == null) {\r\n setGrouping([]);\r\n return;\r\n }\r\n\r\n setGrouping({\r\n getter: valueGetter,\r\n formatter: valueFormatter,\r\n comparer: sortComparer\r\n });\r\n }\r\n\r\n /**\r\n * @deprecated Please use {@link setGrouping}.\r\n */\r\n function setAggregators(groupAggregators, includeCollapsed) {\r\n if (!groupingInfos.length) {\r\n throw new Error(\"At least one grouping must be specified before calling setAggregators().\");\r\n }\r\n\r\n groupingInfos[0].aggregators = groupAggregators;\r\n groupingInfos[0].aggregateCollapsed = includeCollapsed;\r\n\r\n setGrouping(groupingInfos);\r\n }\r\n\r\n function getItemByIdx(i) {\r\n return items[i];\r\n }\r\n\r\n function getIdxById(id) {\r\n return idxById[id];\r\n }\r\n\r\n function getIdxByItem(item) {\r\n return idxById[item[idProperty]];\r\n }\r\n\r\n function ensureRowsByIdCache() {\r\n if (!rowsById) {\r\n rowsById = {};\r\n for (let i = 0, l = rows.length; i < l; i++) {\r\n rowsById[rows[i][idProperty]] = i;\r\n }\r\n }\r\n }\r\n\r\n function getRowByItem(item) {\r\n ensureRowsByIdCache();\r\n return rowsById[item[idProperty]];\r\n }\r\n\r\n function getRowById(id) {\r\n ensureRowsByIdCache();\r\n return rowsById[id];\r\n }\r\n\r\n function getItemById(id) {\r\n return items[idxById[id]];\r\n }\r\n\r\n function mapItemsToRows(itemArray) {\r\n let rows = [];\r\n ensureRowsByIdCache();\r\n for (let i = 0, l = itemArray.length; i < l; i++) {\r\n let row = rowsById[itemArray[i][idProperty]];\r\n if (row != null) {\r\n rows[rows.length] = row;\r\n }\r\n }\r\n return rows;\r\n }\r\n\r\n function mapIdsToRows(idArray) {\r\n let rows = [];\r\n ensureRowsByIdCache();\r\n for (let i = 0, l = idArray.length; i < l; i++) {\r\n let row = rowsById[idArray[i]];\r\n if (row != null) {\r\n rows[rows.length] = row;\r\n }\r\n }\r\n return rows;\r\n }\r\n\r\n function mapRowsToIds(rowArray) {\r\n let ids = [];\r\n for (let i = 0, l = rowArray.length; i < l; i++) {\r\n if (rowArray[i] < rows.length) {\r\n ids[ids.length] = rows[rowArray[i]][idProperty];\r\n }\r\n }\r\n return ids;\r\n }\r\n\r\n function updateItem(id, item) {\r\n // see also https://github.com/mleibman/SlickGrid/issues/1082\r\n if (idxById[id] === undefined) {\r\n throw new Error(\"Invalid id\");\r\n }\r\n\r\n // what if the specified item also has an updated idProperty?\r\n // then we'll have to update the index as well, and possibly the `updated` cache too.\r\n if (id !== item[idProperty]) {\r\n // make sure the new id is unique:\r\n let newId = item[idProperty];\r\n if (newId == null) {\r\n throw new Error(\"Cannot update item to associate with a null id\");\r\n }\r\n if (idxById[newId] !== undefined) {\r\n throw new Error(\"Cannot update item to associate with a non-unique id\");\r\n }\r\n idxById[newId] = idxById[id];\r\n delete idxById[id];\r\n\r\n // also update the `updated` hashtable/markercache? Yes, `recalc()` inside `refresh()` needs that one!\r\n if (updated && updated[id]) {\r\n delete updated[id];\r\n }\r\n\r\n // also update the row indexes? no need since the `refresh()`, further down, blows away the `rowsById[]` cache!\r\n\r\n id = newId;\r\n }\r\n items[idxById[id]] = item;\r\n\r\n // also update the rows? no need since the `refresh()`, further down, blows away the `rows[]` cache and recalculates it via `recalc()`!\r\n\r\n if (!updated) {\r\n updated = {};\r\n }\r\n updated[id] = true;\r\n refresh();\r\n }\r\n\r\n function insertItem(insertBefore, item) {\r\n items.splice(insertBefore, 0, item);\r\n updateIdxById(insertBefore);\r\n refresh();\r\n }\r\n\r\n function addItem(item) {\r\n items.push(item);\r\n updateIdxById(items.length - 1);\r\n refresh();\r\n }\r\n\r\n function deleteItem(id) {\r\n let idx = idxById[id];\r\n if (idx === undefined) {\r\n throw new Error(\"Invalid id\");\r\n }\r\n delete idxById[id];\r\n items.splice(idx, 1);\r\n updateIdxById(idx);\r\n refresh();\r\n }\r\n\r\n function sortedAddItem(item) {\r\n if (!sortComparer) {\r\n throw new Error(\"sortedAddItem() requires a sort comparer, use sort()\");\r\n }\r\n insertItem(sortedIndex(item), item);\r\n }\r\n\r\n function sortedUpdateItem(id, item) {\r\n if (idxById[id] === undefined || id !== item[idProperty]) {\r\n throw new Error(\"Invalid or non-matching id \" + idxById[id]);\r\n }\r\n if (!sortComparer) {\r\n throw new Error(\"sortedUpdateItem() requires a sort comparer, use sort()\");\r\n }\r\n let oldItem = getItemById(id);\r\n if (sortComparer(oldItem, item) !== 0) {\r\n // item affects sorting -> must use sorted add\r\n deleteItem(id);\r\n sortedAddItem(item);\r\n } else { // update does not affect sorting -> regular update works fine\r\n updateItem(id, item);\r\n }\r\n }\r\n\r\n function sortedIndex(searchItem) {\r\n let low = 0, high = items.length;\r\n\r\n while (low < high) {\r\n let mid = low + high >>> 1;\r\n if (sortComparer(items[mid], searchItem) === -1) {\r\n low = mid + 1;\r\n } else {\r\n high = mid;\r\n }\r\n }\r\n return low;\r\n }\r\n\r\n function getLength() {\r\n return rows.length;\r\n }\r\n\r\n function getItem(i) {\r\n let item = rows[i];\r\n\r\n // if this is a group row, make sure totals are calculated and update the title\r\n if (item && item.__group && item.totals && !item.totals.initialized) {\r\n let gi = groupingInfos[item.level];\r\n if (!gi.displayTotalsRow) {\r\n calculateTotals(item.totals);\r\n item.title = gi.formatter ? gi.formatter(item) : item.value;\r\n }\r\n } else if (item && item.__groupTotals && !item.initialized) {\r\n calculateTotals(item);\r\n }\r\n\r\n return item;\r\n }\r\n\r\n function getItemMetadata(i) {\r\n let item = rows[i];\r\n if (item === undefined) {\r\n return null;\r\n }\r\n\r\n // overrides for grouping rows\r\n if (item.__group) {\r\n return options.groupItemMetadataProvider.getGroupRowMetadata(item);\r\n }\r\n\r\n // overrides for totals rows\r\n if (item.__groupTotals) {\r\n return options.groupItemMetadataProvider.getTotalsRowMetadata(item);\r\n }\r\n\r\n if (item.__height) {\r\n if (item.getItemMetadata != null) {\r\n return {height: item.__height, ...(item.getItemMetadata || {})};\r\n }\r\n return { height: item.__height };\r\n }\r\n\r\n return item.getItemMetadata != null ? item.getItemMetadata(i, item) : null;\r\n }\r\n\r\n function expandCollapseAllGroups(level, collapse) {\r\n if (level == null) {\r\n for (let i = 0; i < groupingInfos.length; i++) {\r\n toggledGroupsByLevel[i] = {};\r\n groupingInfos[i].collapsed = collapse;\r\n }\r\n } else {\r\n toggledGroupsByLevel[level] = {};\r\n groupingInfos[level].collapsed = collapse;\r\n }\r\n refresh();\r\n }\r\n\r\n /**\r\n * @param level {Number} Optional level to collapse. If not specified, applies to all levels.\r\n */\r\n function collapseAllGroups(level) {\r\n expandCollapseAllGroups(level, true);\r\n }\r\n\r\n /**\r\n * @param level {Number} Optional level to expand. If not specified, applies to all levels.\r\n */\r\n function expandAllGroups(level) {\r\n expandCollapseAllGroups(level, false);\r\n }\r\n\r\n function expandCollapseGroup(level, groupingKey, collapse) {\r\n toggledGroupsByLevel[level][groupingKey] = groupingInfos[level].collapsed ^ collapse;\r\n refresh();\r\n }\r\n\r\n /**\r\n * @param varArgs Either a Slick.Group's \"groupingKey\" property, or a\r\n * variable argument list of grouping values denoting a unique path to the row. For\r\n * example, calling collapseGroup('high', '10%') will collapse the '10%' subgroup of\r\n * the 'high' group.\r\n */\r\n function collapseGroup(varArgs) {\r\n let args = Array.prototype.slice.call(arguments);\r\n let arg0 = args[0];\r\n if (args.length == 1 && arg0.indexOf(groupingDelimiter) != -1) {\r\n expandCollapseGroup(arg0.split(groupingDelimiter).length - 1, arg0, true);\r\n } else {\r\n expandCollapseGroup(args.length - 1, args.join(groupingDelimiter), true);\r\n }\r\n }\r\n\r\n /**\r\n * @param varArgs Either a Slick.Group's \"groupingKey\" property, or a\r\n * variable argument list of grouping values denoting a unique path to the row. For\r\n * example, calling expandGroup('high', '10%') will expand the '10%' subgroup of\r\n * the 'high' group.\r\n */\r\n function expandGroup(varArgs) {\r\n let args = Array.prototype.slice.call(arguments);\r\n let arg0 = args[0];\r\n if (args.length == 1 && arg0.indexOf(groupingDelimiter) != -1) {\r\n expandCollapseGroup(arg0.split(groupingDelimiter).length - 1, arg0, false);\r\n } else {\r\n expandCollapseGroup(args.length - 1, args.join(groupingDelimiter), false);\r\n }\r\n }\r\n\r\n function getGroups() {\r\n return groups;\r\n }\r\n\r\n function extractGroups(rows, parentGroup?) {\r\n let group;\r\n let val;\r\n let groups = [];\r\n let groupsByVal = {};\r\n let r;\r\n let level = parentGroup ? parentGroup.level + 1 : 0;\r\n let gi = groupingInfos[level];\r\n\r\n for (let i = 0, l = gi.predefinedValues.length; i < l; i++) {\r\n val = gi.predefinedValues[i];\r\n group = groupsByVal[val];\r\n if (!group) {\r\n group = new Slick.Group();\r\n group.value = val;\r\n group.level = level;\r\n group.groupingKey = (parentGroup ? parentGroup.groupingKey + groupingDelimiter : \"\") + val;\r\n groups[groups.length] = group;\r\n groupsByVal[val] = group;\r\n }\r\n }\r\n\r\n for (let i = 0, l = rows.length; i < l; i++) {\r\n r = rows[i];\r\n val = gi.getterIsAFn ? gi.getter(r) : r[gi.getter];\r\n group = groupsByVal[val];\r\n if (!group) {\r\n group = new Slick.Group();\r\n group.value = val;\r\n group.level = level;\r\n group.groupingKey = (parentGroup ? parentGroup.groupingKey + groupingDelimiter : \"\") + val;\r\n groups[groups.length] = group;\r\n groupsByVal[val] = group;\r\n }\r\n\r\n group.rows[group.count++] = r;\r\n }\r\n\r\n if (level < groupingInfos.length - 1) {\r\n for (let i = 0; i < groups.length; i++) {\r\n group = groups[i];\r\n group.groups = extractGroups(group.rows, group);\r\n }\r\n }\r\n\r\n groups.sort(groupingInfos[level].comparer);\r\n\r\n return groups;\r\n }\r\n\r\n function calculateTotals(totals) {\r\n let group = totals.group;\r\n let gi = groupingInfos[group.level];\r\n let isLeafLevel = (group.level == groupingInfos.length);\r\n let agg, idx = gi.aggregators.length;\r\n\r\n if (!isLeafLevel && gi.aggregateChildGroups) {\r\n // make sure all the subgroups are calculated\r\n let i = group.groups.length;\r\n while (i--) {\r\n if (!group.groups[i].totals.initialized) {\r\n calculateTotals(group.groups[i].totals);\r\n }\r\n }\r\n }\r\n\r\n while (idx--) {\r\n agg = gi.aggregators[idx];\r\n agg.init();\r\n if (!isLeafLevel && gi.aggregateChildGroups) {\r\n gi.compiledAccumulators[idx].call(agg, group.groups);\r\n } else {\r\n gi.compiledAccumulators[idx].call(agg, group.rows);\r\n }\r\n agg.storeResult(totals);\r\n }\r\n totals.initialized = true;\r\n }\r\n\r\n function addGroupTotals(group) {\r\n let gi = groupingInfos[group.level];\r\n let totals = new Slick.GroupTotals();\r\n totals.group = group;\r\n group.totals = totals;\r\n if (!gi.lazyTotalsCalculation) {\r\n calculateTotals(totals);\r\n }\r\n }\r\n\r\n function addTotals(groups, level?: number) {\r\n level = level || 0;\r\n let gi = groupingInfos[level];\r\n let groupCollapsed = gi.collapsed;\r\n let toggledGroups = toggledGroupsByLevel[level];\r\n let idx = groups.length, g;\r\n while (idx--) {\r\n g = groups[idx];\r\n\r\n if (g.collapsed && !gi.aggregateCollapsed) {\r\n continue;\r\n }\r\n\r\n // do a depth-first aggregation so that parent group aggregators can access subgroup totals.\r\n if (g.groups) {\r\n addTotals(g.groups, level + 1);\r\n }\r\n\r\n if (gi.aggregators.length && (\r\n gi.aggregateEmpty || g.rows.length || (g.groups && g.groups.length))) {\r\n addGroupTotals(g);\r\n }\r\n\r\n g.collapsed = groupCollapsed ^ toggledGroups[g.groupingKey];\r\n g.title = gi.formatter ? gi.formatter(g) : g.value;\r\n }\r\n }\r\n\r\n function flattenGroupedRows(groups, level?: number) {\r\n level = level || 0;\r\n let gi = groupingInfos[level];\r\n let groupedRows = [], rows, gl = 0, g;\r\n for (let i = 0, l = groups.length; i < l; i++) {\r\n g = groups[i];\r\n groupedRows[gl++] = g;\r\n\r\n if (!g.collapsed) {\r\n rows = g.groups ? flattenGroupedRows(g.groups, level + 1) : g.rows;\r\n for (let j = 0, jj = rows.length; j < jj; j++) {\r\n groupedRows[gl++] = rows[j];\r\n }\r\n }\r\n\r\n if (g.totals && gi.displayTotalsRow && (!g.collapsed || gi.aggregateCollapsed)) {\r\n groupedRows[gl++] = g.totals;\r\n }\r\n }\r\n return groupedRows;\r\n }\r\n\r\n function getFunctionInfo(fn) {\r\n let fnRegex = /^function[^(]*\\(([^)]*)\\)\\s*{([\\s\\S]*)}$/;\r\n let matches = fn.toString().match(fnRegex);\r\n return {\r\n params: matches[1].split(\",\"),\r\n body: matches[2]\r\n };\r\n }\r\n\r\n function compileAccumulatorLoop(aggregator) {\r\n let accumulatorInfo = getFunctionInfo(aggregator.accumulate);\r\n let fn: any = new Function(\r\n \"_items\",\r\n \"for (var \" + accumulatorInfo.params[0] + \", _i=0, _il=_items.length; _i<_il; _i++) {\" +\r\n accumulatorInfo.params[0] + \" = _items[_i]; \" +\r\n accumulatorInfo.body +\r\n \"}\"\r\n );\r\n fn.displayName /*= fn.name*/ = \"compiledAccumulatorLoop\";\r\n return fn;\r\n }\r\n\r\n // function compileFilter() {\r\n // let filterInfo = getFunctionInfo(filter);\r\n\r\n // let filterPath1 = \"{ continue _coreloop; }$1\";\r\n // let filterPath2 = \"{ _retval[_idx++] = $item$; continue _coreloop; }$1\";\r\n // // make some allowances for minification - there's only so far we can go with RegEx\r\n // let filterBody = filterInfo.body\r\n // .replace(/return false\\s*([;}]|\\}|$)/gi, filterPath1)\r\n // .replace(/return!1([;}]|\\}|$)/gi, filterPath1)\r\n // .replace(/return true\\s*([;}]|\\}|$)/gi, filterPath2)\r\n // .replace(/return!0([;}]|\\}|$)/gi, filterPath2)\r\n // .replace(/return ([^;}]+?)\\s*([;}]|$)/gi,\r\n // \"{ if ($1) { _retval[_idx++] = $item$; }; continue _coreloop; }$2\");\r\n\r\n // // This preserves the function template code after JS compression,\r\n // // so that replace() commands still work as expected.\r\n // let tpl = [\r\n // // \"function(_items, _args) { \",\r\n // \"var _retval = [], _idx = 0; \",\r\n // \"var $item$, $args$ = _args; \",\r\n // \"_coreloop: \",\r\n // \"for (var _i = 0, _il = _items.length; _i < _il; _i++) { \",\r\n // \"$item$ = _items[_i]; \",\r\n // \"$filter$; \",\r\n // \"} \",\r\n // \"return _retval; \"\r\n // // \"}\"\r\n // ].join(\"\");\r\n // tpl = tpl.replace(/\\$filter\\$/gi, filterBody);\r\n // tpl = tpl.replace(/\\$item\\$/gi, filterInfo.params[0]);\r\n // tpl = tpl.replace(/\\$args\\$/gi, filterInfo.params[1]);\r\n\r\n // let fn: any = new Function(\"_items,_args\", tpl);\r\n // fn.displayName = /*fn.name =*/ \"compiledFilter\";\r\n // return fn;\r\n // }\r\n\r\n // function compileFilterWithCaching() {\r\n // let filterInfo = getFunctionInfo(filter);\r\n\r\n // let filterPath1 = \"{ continue _coreloop; }$1\";\r\n // let filterPath2 = \"{ _cache[_i] = true;_retval[_idx++] = $item$; continue _coreloop; }$1\";\r\n // // make some allowances for minification - there's only so far we can go with RegEx\r\n // let filterBody = filterInfo.body\r\n // .replace(/return false\\s*([;}]|\\}|$)/gi, filterPath1)\r\n // .replace(/return!1([;}]|\\}|$)/gi, filterPath1)\r\n // .replace(/return true\\s*([;}]|\\}|$)/gi, filterPath2)\r\n // .replace(/return!0([;}]|\\}|$)/gi, filterPath2)\r\n // .replace(/return ([^;}]+?)\\s*([;}]|$)/gi,\r\n // \"{ if ((_cache[_i] = $1)) { _retval[_idx++] = $item$; }; continue _coreloop; }$2\");\r\n\r\n // // This preserves the function template code after JS compression,\r\n // // so that replace() commands still work as expected.\r\n // let tpl = [\r\n // // \"function(_items, _args, _cache) { \",\r\n // \"var _retval = [], _idx = 0; \",\r\n // \"var $item$, $args$ = _args; \",\r\n // \"_coreloop: \",\r\n // \"for (var _i = 0, _il = _items.length; _i < _il; _i++) { \",\r\n // \"$item$ = _items[_i]; \",\r\n // \"if (_cache[_i]) { \",\r\n // \"_retval[_idx++] = $item$; \",\r\n // \"continue _coreloop; \",\r\n // \"} \",\r\n // \"$filter$; \",\r\n // \"} \",\r\n // \"return _retval; \"\r\n // // \"}\"\r\n // ].join(\"\");\r\n // tpl = tpl.replace(/\\$filter\\$/gi, filterBody);\r\n // tpl = tpl.replace(/\\$item\\$/gi, filterInfo.params[0]);\r\n // tpl = tpl.replace(/\\$args\\$/gi, filterInfo.params[1]);\r\n\r\n // let fn: any = new Function(\"_items,_args,_cache\", tpl);\r\n // fn.displayName /*= fn.name*/ = \"compiledFilterWithCaching\";\r\n // return fn;\r\n // }\r\n\r\n function uncompiledFilter(items, args) {\r\n let retval = [], idx = 0;\r\n\r\n for (let i = 0, ii = items.length; i < ii; i++) {\r\n if (filter(items[i], args)) {\r\n retval[idx++] = items[i];\r\n }\r\n }\r\n\r\n return retval;\r\n }\r\n\r\n function uncompiledFilterWithCaching(items, args, cache) {\r\n let retval = [], idx = 0, item;\r\n\r\n for (let i = 0, ii = items.length; i < ii; i++) {\r\n item = items[i];\r\n if (cache[i]) {\r\n retval[idx++] = item;\r\n } else if (filter(item, args)) {\r\n retval[idx++] = item;\r\n cache[i] = true;\r\n }\r\n }\r\n\r\n return retval;\r\n }\r\n\r\n function getFilteredAndPagedItems(items) {\r\n if (filter) {\r\n let batchFilter = uncompiledFilter; // options.inlineFilters ? compiledFilter : uncompiledFilter;\r\n let batchFilterWithCaching = uncompiledFilterWithCaching; // options.inlineFilters ? compiledFilterWithCaching : uncompiledFilterWithCaching;\r\n\r\n if (refreshHints.isFilterNarrowing) {\r\n filteredItems = batchFilter(filteredItems, filterArgs);\r\n } else if (refreshHints.isFilterExpanding) {\r\n filteredItems = batchFilterWithCaching(items, filterArgs, filterCache);\r\n } else if (!refreshHints.isFilterUnchanged) {\r\n filteredItems = batchFilter(items, filterArgs);\r\n }\r\n } else {\r\n // special case: if not filtering and not paging, the resulting\r\n // rows collection needs to be a copy so that changes due to sort\r\n // can be caught\r\n filteredItems = pagesize ? items : items.concat();\r\n }\r\n\r\n // get the current page\r\n let paged;\r\n if (pagesize) {\r\n if (filteredItems.length <= pagenum * pagesize) {\r\n if (filteredItems.length === 0) {\r\n pagenum = 0;\r\n } else {\r\n pagenum = Math.floor((filteredItems.length - 1) / pagesize);\r\n }\r\n }\r\n paged = filteredItems.slice(pagesize * pagenum, pagesize * pagenum + pagesize);\r\n } else {\r\n paged = filteredItems;\r\n }\r\n return { totalRows: filteredItems.length, rows: paged };\r\n }\r\n\r\n function getRowDiffs(rows, newRows) {\r\n let item, r, eitherIsNonData, diff = [];\r\n let from = 0, to = newRows.length;\r\n\r\n if (refreshHints && refreshHints.ignoreDiffsBefore) {\r\n from = Math.max(0,\r\n Math.min(newRows.length, refreshHints.ignoreDiffsBefore));\r\n }\r\n\r\n if (refreshHints && refreshHints.ignoreDiffsAfter) {\r\n to = Math.min(newRows.length,\r\n Math.max(0, refreshHints.ignoreDiffsAfter));\r\n }\r\n\r\n for (let i = from, rl = rows.length; i < to; i++) {\r\n if (i >= rl) {\r\n diff[diff.length] = i;\r\n } else {\r\n item = newRows[i];\r\n r = rows[i];\r\n\r\n if ((groupingInfos.length && (eitherIsNonData = (item.__nonDataRow) || (r.__nonDataRow)) &&\r\n item.__group !== r.__group ||\r\n item.__group && !item.equals(r))\r\n || (eitherIsNonData &&\r\n // no good way to compare totals since they are arbitrary DTOs\r\n // deep object comparison is pretty expensive\r\n // always considering them 'dirty' seems easier for the time being\r\n (item.__groupTotals || r.__groupTotals))\r\n || item[idProperty] != r[idProperty]\r\n || (updated && updated[item[idProperty]])\r\n ) {\r\n diff[diff.length] = i;\r\n }\r\n }\r\n }\r\n return diff;\r\n }\r\n\r\n function recalc(_items, second?) {\r\n rowsById = null;\r\n\r\n if (refreshHints.isFilterNarrowing != prevRefreshHints.isFilterNarrowing ||\r\n refreshHints.isFilterExpanding != prevRefreshHints.isFilterExpanding) {\r\n filterCache = [];\r\n }\r\n\r\n let filteredItems = getFilteredAndPagedItems(_items);\r\n totalRows = filteredItems.totalRows;\r\n let newRows = filteredItems.rows;\r\n\r\n groups = [];\r\n if (groupingInfos.length) {\r\n groups = extractGroups(newRows);\r\n if (groups.length) {\r\n addTotals(groups);\r\n newRows = flattenGroupedRows(groups);\r\n }\r\n }\r\n\r\n let diff = getRowDiffs(rows, newRows);\r\n\r\n rows = newRows;\r\n\r\n return diff;\r\n }\r\n\r\n function refresh() {\r\n if (suspend) {\r\n return;\r\n }\r\n\r\n let countBefore = rows.length;\r\n let totalRowsBefore = totalRows;\r\n\r\n let diff = recalc(items, filter); // pass as direct refs to avoid closure perf hit\r\n\r\n // if the current page is no longer valid, go to last page and recalc\r\n // we suffer a performance penalty here, but the main loop (recalc) remains highly optimized\r\n if (pagesize && totalRows < pagenum * pagesize) {\r\n pagenum = Math.max(0, Math.ceil(totalRows / pagesize) - 1);\r\n diff = recalc(items, filter);\r\n }\r\n\r\n updated = null;\r\n prevRefreshHints = refreshHints;\r\n refreshHints = {};\r\n\r\n if (totalRowsBefore !== totalRows) {\r\n onPagingInfoChanged.notify(getPagingInfo(), null, self);\r\n }\r\n if (countBefore !== rows.length) {\r\n onRowCountChanged.notify({ previous: countBefore, current: rows.length, dataView: self, callingOnRowsChanged: (diff.length > 0) }, null, self);\r\n }\r\n if (diff.length > 0) {\r\n onRowsChanged.notify({ rows: diff, dataView: self, calledOnRowCountChanged: (countBefore !== rows.length) }, null, self);\r\n }\r\n if (countBefore !== rows.length || diff.length > 0) {\r\n onRowsOrCountChanged.notify({\r\n rowsDiff: diff, previousRowCount: countBefore, currentRowCount: rows.length,\r\n rowCountChanged: countBefore !== rows.length, rowsChanged: diff.length > 0, dataView: self\r\n }, null, self);\r\n }\r\n }\r\n\r\n /***\r\n * Wires the grid and the DataView together to keep row selection tied to item ids.\r\n * This is useful since, without it, the grid only knows about rows, so if the items\r\n * move around, the same rows stay selected instead of the selection moving along\r\n * with the items.\r\n *\r\n * NOTE: This doesn't work with cell selection model.\r\n *\r\n * @param grid {Slick.Grid} The grid to sync selection with.\r\n * @param preserveHidden {Boolean} Whether to keep selected items that go out of the\r\n * view due to them getting filtered out.\r\n * @param preserveHiddenOnSelectionChange {Boolean} Whether to keep selected items\r\n * that are currently out of the view (see preserveHidden) as selected when selection\r\n * changes.\r\n * @return {Slick.Event} An event that notifies when an internal list of selected row ids\r\n * changes. This is useful since, in combination with the above two options, it allows\r\n * access to the full list selected row ids, and not just the ones visible to the grid.\r\n * @method syncGridSelection\r\n */\r\n function syncGridSelection(grid, preserveHidden, preserveHiddenOnSelectionChange) {\r\n let self = this;\r\n let inHandler;\r\n let selectedRowIds = self.mapRowsToIds(grid.getSelectedRows());\r\n let onSelectedRowIdsChanged = new Slick.Event();\r\n\r\n function setSelectedRowIds(rowIds) {\r\n if (selectedRowIds.join(\",\") == rowIds.join(\",\")) {\r\n return;\r\n }\r\n\r\n selectedRowIds = rowIds;\r\n\r\n onSelectedRowIdsChanged.notify({\r\n grid: grid,\r\n ids: selectedRowIds,\r\n dataView: self\r\n }, new Slick.EventData(), self);\r\n }\r\n\r\n function update() {\r\n if (selectedRowIds.length > 0) {\r\n inHandler = true;\r\n let selectedRows = self.mapIdsToRows(selectedRowIds);\r\n if (!preserveHidden) {\r\n setSelectedRowIds(self.mapRowsToIds(selectedRows));\r\n }\r\n grid.setSelectedRows(selectedRows);\r\n inHandler = false;\r\n }\r\n }\r\n\r\n grid.onSelectedRowsChanged.subscribe(function(e, args) {\r\n if (inHandler) { return; }\r\n let newSelectedRowIds = self.mapRowsToIds(grid.getSelectedRows());\r\n if (!preserveHiddenOnSelectionChange || !grid.getOptions().multiSelect) {\r\n setSelectedRowIds(newSelectedRowIds);\r\n } else {\r\n // keep the ones that are hidden\r\n let existing = [];\r\n for (let i = 0; i < selectedRowIds.length; i++) {\r\n if (self.getRowById(selectedRowIds[i]) === undefined) {\r\n existing.push(selectedRowIds[i]);\r\n }\r\n }\r\n // $.grep(selectedRowIds, function(id) { return self.getRowById(id) === undefined; });\r\n // add the newly selected ones\r\n setSelectedRowIds(existing.concat(newSelectedRowIds));\r\n }\r\n });\r\n\r\n this.onRowsOrCountChanged.subscribe(update);\r\n\r\n return onSelectedRowIdsChanged;\r\n }\r\n\r\n function syncGridCellCssStyles(grid, key) {\r\n let hashById;\r\n let inHandler;\r\n\r\n // since this method can be called after the cell styles have been set,\r\n // get the existing ones right away\r\n storeCellCssStyles(grid.getCellCssStyles(key));\r\n\r\n function storeCellCssStyles(hash) {\r\n hashById = {};\r\n for (let row in hash) {\r\n let id = rows[row][idProperty];\r\n hashById[id] = hash[row];\r\n }\r\n }\r\n\r\n function update() {\r\n if (hashById) {\r\n inHandler = true;\r\n ensureRowsByIdCache();\r\n let newHash = {};\r\n for (let id in hashById) {\r\n let row = rowsById[id];\r\n if (row != undefined) {\r\n newHash[row] = hashById[id];\r\n }\r\n }\r\n grid.setCellCssStyles(key, newHash);\r\n inHandler = false;\r\n }\r\n }\r\n\r\n grid.onCellCssStylesChanged.subscribe(function(e, args) {\r\n if (inHandler) { return; }\r\n if (key != args.key) { return; }\r\n if (args.hash) {\r\n storeCellCssStyles(args.hash);\r\n } else {\r\n // grid.onCellCssStylesChanged.unsubscribe(styleChanged); //styleChanged not declared\r\n self.onRowsOrCountChanged.unsubscribe(update);\r\n }\r\n });\r\n\r\n this.onRowsOrCountChanged.subscribe(update);\r\n }\r\n\r\n $.shallowExtend(this, {\r\n // methods\r\n beginUpdate: beginUpdate,\r\n endUpdate: endUpdate,\r\n setPagingOptions: setPagingOptions,\r\n getPagingInfo: getPagingInfo,\r\n getItems: getItems,\r\n setItems: setItems,\r\n setFilter: setFilter,\r\n getFilter: getFilter,\r\n getFilteredItems: getFilteredItems,\r\n sort: sort,\r\n // \"fastSort\": fastSort,\r\n reSort: reSort,\r\n setGrouping: setGrouping,\r\n getGrouping: getGrouping,\r\n groupBy: groupBy,\r\n setAggregators: setAggregators,\r\n collapseAllGroups: collapseAllGroups,\r\n expandAllGroups: expandAllGroups,\r\n collapseGroup: collapseGroup,\r\n expandGroup: expandGroup,\r\n getGroups: getGroups,\r\n getIdxById: getIdxById,\r\n getIdxByItem: getIdxByItem,\r\n getRowByItem: getRowByItem,\r\n getRowById: getRowById,\r\n getItemById: getItemById,\r\n getItemByIdx: getItemByIdx,\r\n mapItemsToRows: mapItemsToRows,\r\n mapRowsToIds: mapRowsToIds,\r\n mapIdsToRows: mapIdsToRows,\r\n setRefreshHints: setRefreshHints,\r\n setFilterArgs: setFilterArgs,\r\n refresh: refresh,\r\n updateItem: updateItem,\r\n insertItem: insertItem,\r\n addItem: addItem,\r\n deleteItem: deleteItem,\r\n sortedAddItem: sortedAddItem,\r\n sortedUpdateItem: sortedUpdateItem,\r\n syncGridSelection: syncGridSelection,\r\n syncGridCellCssStyles: syncGridCellCssStyles,\r\n\r\n // data provider methods\r\n getLength: getLength,\r\n getItem: getItem,\r\n getItemMetadata: getItemMetadata,\r\n\r\n // events\r\n onRowCountChanged: onRowCountChanged,\r\n onRowsChanged: onRowsChanged,\r\n onRowsOrCountChanged: onRowsOrCountChanged,\r\n onPagingInfoChanged: onPagingInfoChanged\r\n });\r\n}\r\n\r\nexport function AvgAggregator(field) {\r\n this.field_ = field;\r\n\r\n this.init = function() {\r\n this.count_ = 0;\r\n this.nonNullCount_ = 0;\r\n this.sum_ = 0;\r\n };\r\n\r\n this.accumulate = function(item) {\r\n let val = item[this.field_];\r\n this.count_++;\r\n if (val != null && val !== \"\" && !isNaN(val)) {\r\n this.nonNullCount_++;\r\n this.sum_ += parseFloat(val);\r\n }\r\n };\r\n\r\n this.storeResult = function(groupTotals) {\r\n if (!groupTotals.avg) {\r\n groupTotals.avg = {};\r\n }\r\n if (this.nonNullCount_ != 0) {\r\n groupTotals.avg[this.field_] = this.sum_ / this.nonNullCount_;\r\n }\r\n };\r\n}\r\n\r\nexport function MinAggregator(field) {\r\n this.field_ = field;\r\n\r\n this.init = function() {\r\n this.min_ = null;\r\n };\r\n\r\n this.accumulate = function(item) {\r\n let val = item[this.field_];\r\n if (val != null && val !== \"\" && !isNaN(val)) {\r\n if (this.min_ == null || val < this.min_) {\r\n this.min_ = val;\r\n }\r\n }\r\n };\r\n\r\n this.storeResult = function(groupTotals) {\r\n if (!groupTotals.min) {\r\n groupTotals.min = {};\r\n }\r\n groupTotals.min[this.field_] = this.min_;\r\n };\r\n}\r\n\r\nexport function MaxAggregator(field) {\r\n this.field_ = field;\r\n\r\n this.init = function() {\r\n this.max_ = null;\r\n };\r\n\r\n this.accumulate = function(item) {\r\n let val = item[this.field_];\r\n if (val != null && val !== \"\" && !isNaN(val)) {\r\n if (this.max_ == null || val > this.max_) {\r\n this.max_ = val;\r\n }\r\n }\r\n };\r\n\r\n this.storeResult = function(groupTotals) {\r\n if (!groupTotals.max) {\r\n groupTotals.max = {};\r\n }\r\n groupTotals.max[this.field_] = this.max_;\r\n };\r\n}\r\n\r\nexport function SumAggregator(field) {\r\n this.field_ = field;\r\n\r\n this.init = function() {\r\n this.sum_ = null;\r\n };\r\n\r\n this.accumulate = function(item) {\r\n let val = item[this.field_];\r\n if (val != null && val !== \"\" && !isNaN(val)) {\r\n this.sum_ += parseFloat(val);\r\n }\r\n };\r\n\r\n this.storeResult = function(groupTotals) {\r\n if (!groupTotals.sum) {\r\n groupTotals.sum = {};\r\n }\r\n groupTotals.sum[this.field_] = this.sum_;\r\n };\r\n}\r\n\r\n // tODO: add more built-in aggregators\r\n // tODO: merge common aggregators in one to prevent needles iterating\r\n\r\n","import { jQueryReplacement } from \"../core/jq\";\r\nimport { Slick, ISlickColumn, ISlickFormatterResult} from \"./slick.core\";\r\n\r\n\r\nlet $ = jQueryReplacement;\r\n\r\n$.deepExtend(Slick, {\r\n Data: {\r\n GroupItemMetadataProvider: GroupItemMetadataProvider\r\n }\r\n});\r\n\r\n\r\n /***\r\n * Provides item metadata for group (Slick.Group) and totals (Slick.Totals) rows produced by the DataView.\r\n * This metadata overrides the default behavior and formatting of those rows so that they appear and function\r\n * correctly when processed by the grid.\r\n *\r\n * This class also acts as a grid plugin providing event handlers to expand & collapse groups.\r\n * If \"grid.registerPlugin(...)\" is not called, expand & collapse will not work.\r\n *\r\n * @class GroupItemMetadataProvider\r\n * @module Data\r\n * @namespace Slick.Data\r\n * @constructor\r\n * @param options\r\n */\r\n export function GroupItemMetadataProvider(options?) {\r\n var _grid;\r\n var _defaults = {\r\n checkboxSelect: false,\r\n checkboxSelectCssClass: \"slick-group-select-checkbox\",\r\n checkboxSelectPlugin: null,\r\n groupCssClass: \"slick-group\",\r\n groupTitleCssClass: \"slick-group-title\",\r\n totalsCssClass: \"slick-group-totals\",\r\n groupFocusable: true,\r\n totalsFocusable: false,\r\n toggleCssClass: \"slick-group-toggle\",\r\n toggleExpandedCssClass: \"expanded\",\r\n toggleCollapsedCssClass: \"collapsed\",\r\n enableExpandCollapse: true,\r\n groupFormatter: defaultGroupCellFormatter,\r\n totalsFormatter: defaultTotalsCellFormatter\r\n };\r\n\r\n options = $.deepExtend({}, _defaults, options);\r\n\r\n\r\n function defaultGroupCellFormatter(row, cell, value, columnDef, item, grid) {\r\n if (!options.enableExpandCollapse) {\r\n return item.title;\r\n }\r\n\r\n let indentation = item.level * 15 + \"px\";\r\n\r\n return (options.checkboxSelect ? '<span class=\"' + options.checkboxSelectCssClass +\r\n ' ' + (item.selectChecked ? 'checked' : 'unchecked') + '\"></span>' : '') +\r\n \"<span class='\" + options.toggleCssClass + \" \" +\r\n (item.collapsed ? options.toggleCollapsedCssClass : options.toggleExpandedCssClass) +\r\n \"' style='margin-left:\" + indentation +\"'>\" +\r\n \"</span>\" +\r\n \"<span class='\" + options.groupTitleCssClass + \"' level='\" + item.level + \"'>\" +\r\n item.title +\r\n \"</span>\";\r\n }\r\n\r\n function defaultTotalsCellFormatter(row, cell, value, columnDef: ISlickColumn, item, grid) {\r\n let formatter_res;\r\n if (columnDef.groupTotalsFormatter) {\r\n formatter_res = columnDef.groupTotalsFormatter(item, columnDef, grid) || \"\";\r\n } else {\r\n let res = (item.avg && item.avg[columnDef.field]) \r\n || (item.sum && item.sum[columnDef.field])\r\n || (item.max && item.max[columnDef.field])\r\n || (item.min && item.min[columnDef.field]);\r\n\r\n formatter_res = (columnDef.formatter ? columnDef.formatter(row, cell, res, columnDef, item) : \"\");\r\n }\r\n return formatter_res;\r\n //return (Object.prototype.toString.call(formatter_res) !== '[object Object]' ? (<string>formatter_res) : (<ISlickFormatterResult>formatter_res).text);\r\n }\r\n\r\n\r\n function init(grid) {\r\n _grid = grid;\r\n _grid.onClick.subscribe(handleGridClick);\r\n _grid.onKeyDown.subscribe(handleGridKeyDown);\r\n\r\n }\r\n\r\n function destroy() {\r\n if (_grid) {\r\n _grid.onClick.unsubscribe(handleGridClick);\r\n _grid.onKeyDown.unsubscribe(handleGridKeyDown);\r\n }\r\n }\r\n\r\n function handleGridClick(e, args) {\r\n var $target = $(e.target);\r\n var item = this.getDataItem(args.row);\r\n if (item && item instanceof Slick.Group && $target.hasClass(options.toggleCssClass)) {\r\n var range = _grid.getRenderedRange();\r\n this.dataView.setRefreshHints({\r\n ignoreDiffsBefore: range.top,\r\n ignoreDiffsAfter: range.bottom + 1\r\n });\r\n\r\n if ((<any>item).collapsed) {\r\n this.dataView.expandGroup((<any>item).groupingKey);\r\n } else {\r\n this.dataView.collapseGroup((<any>item).groupingKey);\r\n }\r\n\r\n e.stopImmediatePropagation();\r\n e.preventDefault();\r\n }\r\n if (item && item instanceof Slick.Group && $target.hasClass(options.checkboxSelectCssClass)) {\r\n (<any>item).selectChecked = !(<any>item).selectChecked;\r\n $target.removeClass(((<any>item).selectChecked ? \"unchecked\" : \"checked\"));\r\n $target.addClass(((<any>item).selectChecked ? \"checked\" : \"unchecked\"));\r\n // get rowIndexes array\r\n var rowIndexes = _grid.dataView.mapItemsToRows((<any>item).rows);\r\n ((<any>item).selectChecked ? options.checkboxSelectPlugin.selectRows : options.checkboxSelectPlugin.deSelectRows)(rowIndexes);\r\n }\r\n }\r\n\r\n // TODO: add -/+ handling\r\n function handleGridKeyDown(e, args) {\r\n if (options.enableExpandCollapse && (e.which == Slick.keyCode.SPACE)) {\r\n var activeCell = this.getActiveCell();\r\n if (activeCell) {\r\n var item = this.getDataItem(activeCell.row);\r\n if (item && item instanceof Slick.Group) {\r\n var range = _grid.getRenderedRange();\r\n this.dataView.setRefreshHints({\r\n ignoreDiffsBefore: range.top,\r\n ignoreDiffsAfter: range.bottom + 1\r\n });\r\n\r\n if ((<any>item).collapsed) {\r\n this.dataView.expandGroup((<any>item).groupingKey);\r\n } else {\r\n this.dataView.collapseGroup((<any>item).groupingKey);\r\n }\r\n\r\n e.stopImmediatePropagation();\r\n e.preventDefault();\r\n }\r\n }\r\n }\r\n }\r\n\r\n function getGroupRowMetadata(item) {\r\n return {\r\n selectable: false,\r\n focusable: options.groupFocusable,\r\n cssClasses: options.groupCssClass,\r\n columns: {\r\n 0: {\r\n colspan: \"*\",\r\n formatter: options.groupFormatter,\r\n editor: null\r\n }\r\n },\r\n height: options.calcGroupHeight ? options.calcGroupHeight(item) : undefined\r\n };\r\n }\r\n\r\n function getTotalsRowMetadata(item) {\r\n return {\r\n selectable: false,\r\n focusable: options.totalsFocusable,\r\n cssClasses: options.totalsCssClass,\r\n formatter: options.totalsFormatter,\r\n editor: null,\r\n height: options.calcTotalsHeight ? options.calcTotalsHeight(item) : undefined\r\n };\r\n }\r\n\r\n\r\n return {\r\n \"init\": init,\r\n \"destroy\": destroy,\r\n \"getGroupRowMetadata\": getGroupRowMetadata,\r\n \"getTotalsRowMetadata\": getTotalsRowMetadata\r\n };\r\n }\r\n","import { jQueryReplacement, IjQueryWrapper } from \"../../core/jq\";\r\nimport { Slick } from \"../slick.core\";\r\nimport './slick.headermenu.css'\r\n\r\n\r\nlet $ = jQueryReplacement;\r\n\r\n // register namespace\r\n $.deepExtend(window, {\r\n \"Slick\": {\r\n \"Plugins\": {\r\n \"HeaderMenu\": HeaderMenu\r\n }\r\n }\r\n });\r\n\r\n /***\r\n * A plugin to add drop-down menus to column headers.\r\n *\r\n * USAGE:\r\n *\r\n * Add the plugin .js & .css files and register it with the grid.\r\n *\r\n * To specify a menu in a column header, extend the column definition like so:\r\n *\r\n * var columns = [\r\n * {\r\n * id: 'myColumn',\r\n * name: 'My column',\r\n *\r\n * // This is the relevant part\r\n * header: {\r\n * menu: {\r\n * items: [\r\n * {\r\n * // menu item options\r\n * },\r\n * {\r\n * // menu item options\r\n * }\r\n * ]\r\n * }\r\n * }\r\n * }\r\n * ];\r\n *\r\n *\r\n * Available menu options:\r\n * tooltip: Menu button tooltip.\r\n *\r\n *\r\n * Available menu item options:\r\n * title: Menu item text.\r\n * divider: Whether the current item is a divider, not an actual command.\r\n * disabled: Whether the item is disabled.\r\n * tooltip: Item tooltip.\r\n * command: A command identifier to be passed to the onCommand event handlers.\r\n * iconCssClass: A CSS class to be added to the menu item icon.\r\n * iconImage: A url to the icon image.\r\n * minWidth: Minimum width that the drop menu will have\r\n * autoAlign: Auto-align drop menu to the left when not enough viewport space to show on the right\r\n * autoAlignOffset: When drop menu is aligned to the left, it might not be perfectly aligned with the header menu icon, if that is the case you can add an offset (positive/negative number to move right/left)\r\n *\r\n *\r\n * The plugin exposes the following events:\r\n * onBeforeMenuShow: Fired before the menu is shown. You can customize the menu or dismiss it by returning false.\r\n * Event args:\r\n * grid: Reference to the grid.\r\n * column: Column definition.\r\n * menu: Menu options. Note that you can change the menu items here.\r\n *\r\n * onCommand: Fired on menu item click for buttons with 'command' specified.\r\n * Event args:\r\n * grid: Reference to the grid.\r\n * column: Column definition.\r\n * command: Button command identified.\r\n * button: Button options. Note that you can change the button options in your\r\n * event handler, and the column header will be automatically updated to\r\n * reflect them. This is useful if you want to implement something like a\r\n * toggle button.\r\n *\r\n *\r\n * @param options {Object} Options:\r\n * buttonCssClass: an extra CSS class to add to the menu button\r\n * buttonImage: a url to the menu button image (default '../images/down.gif')\r\n * @class Slick.Plugins.HeaderButtons\r\n * @constructor\r\n */\r\n export function HeaderMenu(options) {\r\n var _grid;\r\n var _self = this;\r\n var _handler = new Slick.EventHandler();\r\n var _defaults = {\r\n buttonCssClass: null,\r\n buttonImage: null,\r\n minWidth: 100,\r\n autoAlign: true,\r\n autoAlignOffset: 0\r\n };\r\n var $menu: IjQueryWrapper;\r\n var $activeHeaderColumn: IjQueryWrapper;\r\n\r\n\r\n function init(grid) {\r\n options = $.deepExtend({}, _defaults, options);\r\n _grid = grid;\r\n _handler\r\n .subscribe(_grid.onHeaderCellRendered, handleHeaderCellRendered)\r\n .subscribe(_grid.onBeforeHeaderCellDestroy, handleBeforeHeaderCellDestroy);\r\n\r\n // Force the grid to re-render the header now that the events are hooked up.\r\n //_grid.setColumns(_grid.getColumns()); //TODO TODOFIX try to optimize this\r\n\r\n // Hide the menu on outside click.\r\n $(document.body).on(\"mousedown\", handleBodyMouseDown);\r\n }\r\n\r\n function setOptions(newOptions) {\r\n options = $.deepExtend({}, options, newOptions);\r\n }\r\n\r\n\r\n function destroy() {\r\n _handler.unsubscribeAll();\r\n document.body.removeEventListener(\"mousedown\", handleBodyMouseDown);\r\n //$(document.body).off(\"mousedown\", handleBodyMouseDown);\r\n }\r\n\r\n\r\n function handleBodyMouseDown(e) {\r\n if ($menu && $(e.target).closestClass(\"slick-header-menu\").length === 0) { //!$.contains($menu[0], e.target)) {\r\n hideMenu();\r\n }\r\n }\r\n\r\n\r\n function hideMenu() {\r\n if ($menu) {\r\n $menu.remove();\r\n $menu = null;\r\n $activeHeaderColumn\r\n .removeClass(\"slick-header-column-active\");\r\n }\r\n }\r\n\r\n function handleHeaderCellRendered(e, args) {\r\n var column = args.column;\r\n var menu = $.deepExtend({}, (column.header && column.header.menu) || {items:[]});\r\n\r\n if (!column.hideMenu) {\r\n var $el:IjQueryWrapper = $(\"<div></div>\")\r\n .addClass(\"slick-header-menubutton\")\r\n .data(\"column\", column)\r\n .data(\"menu\", menu);\r\n if (column.resizable) {\r\n $el.addClass(\"resize-offset\");\r\n }\r\n\r\n if (options.buttonCssClass) {\r\n $el.addClass(options.buttonCssClass);\r\n }\r\n\r\n if (options.buttonImage) {\r\n $el.css(\"background-image\", \"url(\" + options.buttonImage + \")\");\r\n }\r\n\r\n if (menu.tooltip) {\r\n $el.attr(\"title\", menu.tooltip);\r\n }\r\n\r\n $el\r\n .on(\"click\", showMenu)\r\n .appendTo(args.node);\r\n }\r\n }\r\n\r\n\r\n function handleBeforeHeaderCellDestroy(e, args) {\r\n var column = args.column;\r\n\r\n if (column.header && column.header.menu) {\r\n $(args.node).find(\".slick-header-menubutton\").remove();\r\n }\r\n }\r\n\r\n\r\n function showMenu(e) {\r\n var $menuButton: IjQueryWrapper = $(e.target);\r\n var menu = $.deepExtend({}, $menuButton.data(\"menu\"));\r\n var columnDef = $menuButton.data(\"column\");\r\n\r\n // Let the user modify the menu or cancel altogether,\r\n // or provide alternative menu implementation.\r\n if (_self.onBeforeMenuShow.notify({\r\n \"grid\": _grid,\r\n \"column\": columnDef,\r\n \"menu\": menu\r\n }, e, _self) == false) {\r\n return;\r\n }\r\n\r\n\r\n if (!$menu) {\r\n $menu = $(\"<div class='slick-header-menu' style='min-width: \" + options.minWidth + \"px'></div>\")\r\n .appendTo(_grid.getContainerNode());\r\n }\r\n $menu.empty();\r\n\r\n\r\n // Construct the menu items.\r\n for (var i = 0; i < menu.items.length; i++) {\r\n var item = menu.items[i];\r\n\r\n var $li = $(\"<div class='slick-header-menuitem'></div>\")\r\n .data(\"command\", item.command || '')\r\n .data(\"column\", columnDef)\r\n .data(\"item\", item)\r\n .on(\"click\", handleMenuItemClick)\r\n .appendTo($menu);\r\n\r\n if (item.disabled) {\r\n $li.addClass(\"slick-header-menuitem-disabled\");\r\n }\r\n\r\n if (item.divider) {\r\n $li.addClass(\"slick-header-menuitem-divider\");\r\n continue;\r\n }\r\n\r\n if (item.tooltip) {\r\n $li.attr(\"title\", item.tooltip);\r\n }\r\n\r\n var $icon = $(\"<div class='slick-header-menuicon'></div>\")\r\n .appendTo($li);\r\n\r\n if (item.iconCssClass) {\r\n $icon.addClass(item.iconCssClass);\r\n }\r\n\r\n if (item.iconImage) {\r\n $icon.css(\"background-image\", \"url(\" + item.iconImage + \")\");\r\n }\r\n\r\n $(\"<span class='slick-header-menucontent'></span>\")\r\n .text(item.title)\r\n .appendTo($li);\r\n }\r\n\r\n var leftPos = $menuButton.offset().left;\r\n\r\n // when auto-align is set, it will calculate whether it has enough space in the viewport to show the drop menu on the right (default)\r\n // if there isn't enough space on the right, it will automatically align the drop menu to the left\r\n // to simulate an align left, we actually need to know the width of the drop menu\r\n if (options.autoAlign) {\r\n var gridPos = _grid.getGridPosition();\r\n if ((leftPos + options.minWidth) >= gridPos.width) {\r\n leftPos = leftPos - options.minWidth + options.autoAlignOffset;\r\n }\r\n }\r\n\r\n //$menu\r\n // .offset({ top: $menuButton.offset().top + $menuButton.height(), left: leftPos });\r\n $menu[0].style.top = (/*$menuButton.offset().top +*/ $menuButton.height() as number) + \"px\";\r\n $menu[0].style.left = (leftPos - $(_grid.getContainerNode()).offset().left) + \"px\";\r\n\r\n // Mark the header as active to keep the highlighting.\r\n $activeHeaderColumn = $menuButton.closestClass(\".slick-header-column\");\r\n $activeHeaderColumn\r\n .addClass(\"slick-header-column-active\");\r\n\r\n // Stop propagation so that it doesn't register as a header click event.\r\n e.preventDefault();\r\n e.stopPropagation();\r\n }\r\n\r\n\r\n function handleMenuItemClick(e) {\r\n var command = $(e.currentTarget).data(\"command\");\r\n var columnDef = $(e.currentTarget).data(\"column\");\r\n var item = $(e.currentTarget).data(\"item\");\r\n\r\n if (item.disabled || item.divider) {\r\n return;\r\n }\r\n\r\n hideMenu();\r\n\r\n if (command != null && command != '') {\r\n _self.onCommand.notify({\r\n \"grid\": _grid,\r\n \"column\": columnDef,\r\n \"command\": command,\r\n \"item\": item\r\n }, e, _self);\r\n }\r\n\r\n // Stop propagation so that it doesn't register as a header click event.\r\n e.preventDefault();\r\n e.stopPropagation();\r\n }\r\n\r\n $.shallowExtend(this, {\r\n \"init\": init,\r\n \"destroy\": destroy,\r\n \"pluginName\": \"HeaderMenu\",\r\n \"setOptions\": setOptions,\r\n\r\n \"onBeforeMenuShow\": new Slick.Event(),\r\n \"onCommand\": new Slick.Event()\r\n });\r\n }\r\n","import \"./slick.headerbuttons.css\";\r\nimport { Slick } from \"../slick.core\";\r\nimport { jQueryReplacement } from \"../../core/jq\";\r\n\r\nlet $ = jQueryReplacement;\r\n\r\n// register namespace\r\n$.deepExtend(window, {\r\n \"Slick\": {\r\n \"Plugins\": {\r\n \"HeaderButtons\": HeaderButtons\r\n }\r\n }\r\n});\r\n\r\n\r\n/***\r\n * A plugin to add custom buttons to column headers.\r\n *\r\n * USAGE:\r\n *\r\n * Add the plugin .js & .css files and register it with the grid.\r\n *\r\n * To specify a custom button in a column header, extend the column definition like so:\r\n *\r\n * var columns = [\r\n * {\r\n * id: 'myColumn',\r\n * name: 'My column',\r\n *\r\n * // This is the relevant part\r\n * header: {\r\n * buttons: [\r\n * {\r\n * // button options\r\n * },\r\n * {\r\n * // button options\r\n * }\r\n * ]\r\n * }\r\n * }\r\n * ];\r\n *\r\n * Available button options:\r\n * cssClass: CSS class to add to the button.\r\n * image: Relative button image path.\r\n * tooltip: Button tooltip.\r\n * showOnHover: Only show the button on hover.\r\n * handler: Button click handler.\r\n * command: A command identifier to be passed to the onCommand event handlers.\r\n *\r\n * The plugin exposes the following events:\r\n * onCommand: Fired on button click for buttons with 'command' specified.\r\n * Event args:\r\n * grid: Reference to the grid.\r\n * column: Column definition.\r\n * command: Button command identified.\r\n * button: Button options. Note that you can change the button options in your\r\n * event handler, and the column header will be automatically updated to\r\n * reflect them. This is useful if you want to implement something like a\r\n * toggle button.\r\n *\r\n *\r\n * @param options {Object} Options:\r\n * buttonCssClass: a CSS class to use for buttons (default 'slick-header-button')\r\n * @class Slick.Plugins.HeaderButtons\r\n * @constructor\r\n */\r\nexport function HeaderButtons(options) {\r\n var _grid;\r\n var _self = this;\r\n var _handler = new Slick.EventHandler();\r\n var _defaults = {\r\n buttonCssClass: \"slick-header-button\"\r\n };\r\n\r\n\r\n function init(grid) {\r\n options = $.deepExtend({}, _defaults, options);\r\n _grid = grid;\r\n _handler\r\n .subscribe(_grid.onHeaderCellRendered, handleHeaderCellRendered)\r\n .subscribe(_grid.onBeforeHeaderCellDestroy, handleBeforeHeaderCellDestroy);\r\n\r\n // Force the grid to re-render the header now that the events are hooked up.\r\n _grid.setColumns(_grid.getColumns());\r\n }\r\n\r\n\r\n function destroy() {\r\n _handler.unsubscribeAll();\r\n }\r\n\r\n\r\n function handleHeaderCellRendered(e, args) {\r\n var column = args.column;\r\n\r\n if (column.header && column.header.buttons) {\r\n // Append buttons in reverse order since they are floated to the right.\r\n var i = column.header.buttons.length;\r\n while (i--) {\r\n var button = column.header.buttons[i];\r\n var btn = $(\"<div></div>\")\r\n .addClass(options.buttonCssClass)\r\n .data(\"column\", column)\r\n .data(\"button\", button);\r\n\r\n if (button.showOnHover) {\r\n btn.addClass(\"slick-header-button-hidden\");\r\n }\r\n\r\n if (button.image) {\r\n btn.css(\"backgroundImage\", \"url(\" + button.image + \")\");\r\n }\r\n if (button.html) {\r\n btn.html(button.html);\r\n }\r\n\r\n if (button.cssClass) {\r\n btn.addClass(button.cssClass);\r\n }\r\n\r\n if (button.tooltip) {\r\n btn.attr(\"title\", button.tooltip);\r\n }\r\n\r\n if (button.command) {\r\n btn.data(\"command\", button.command);\r\n }\r\n\r\n if (button.handler) {\r\n btn.on(\"click\", button.handler);\r\n }\r\n\r\n btn\r\n .on(\"click\", handleButtonClick)\r\n .appendTo(args.node);\r\n }\r\n }\r\n }\r\n\r\n\r\n function handleBeforeHeaderCellDestroy(e, args) {\r\n var column = args.column;\r\n\r\n if (column.header && column.header.buttons) {\r\n // Removing buttons via jQuery will also clean up any event handlers and data.\r\n // NOTE: If you attach event handlers directly or using a different framework,\r\n // you must also clean them up here to avoid memory leaks.\r\n $(args.node).find(\".\" + options.buttonCssClass).remove();\r\n }\r\n }\r\n\r\n\r\n function handleButtonClick(e) {\r\n var command = $(this).data(\"command\");\r\n var columnDef = $(this).data(\"column\");\r\n var button = $(this).data(\"button\");\r\n\r\n if (command != null) {\r\n _self.onCommand.notify({\r\n \"grid\": _grid,\r\n \"column\": columnDef,\r\n \"command\": command,\r\n \"button\": button\r\n }, e, _self);\r\n\r\n // Update the header in case the user updated the button definition in the handler.\r\n _grid.updateColumnHeader(columnDef.id);\r\n }\r\n\r\n // Stop propagation so that it doesn't register as a header click event.\r\n e.preventDefault();\r\n e.stopPropagation();\r\n }\r\n\r\n $.shallowExtend(this, {\r\n \"init\": init,\r\n \"destroy\": destroy,\r\n \"pluginName\": \"HeaderButtons\",\r\n\r\n \"onCommand\": new Slick.Event()\r\n });\r\n}\r\n","/*\r\n * Contains basic SlickGrid formatters.\r\n * \r\n * NOTE: These are merely examples. You will most likely need to implement something more\r\n * robust/extensible/localizable/etc. for your use!\r\n */\r\n\r\nimport { ISlickFormatter, ISlickFormatterResult } from './slick.core'\r\nimport { numeric } from '../core/numeric';\r\nimport { date } from '../core/date';\r\n\r\nfunction escapeHTMLChars(text: string): string {\r\n if (text == null) {\r\n return \"\";\r\n }\r\n if (typeof text.replace !== \"function\") {\r\n return text;\r\n }\r\n return text.replace(/&/g, \"&amp;\").replace(/</g, \"&lt;\").replace(/>/g, \"&gt;\");\r\n}\r\n\r\nexport let EmptyFormatter: ISlickFormatter = function (row, cell, value, columnDef, dataContext): string {\r\n return \"\";\r\n};\r\n\r\nexport let ComponentFormatter = EmptyFormatter;\r\n\r\nexport let YesNoFormatter: ISlickFormatter = function (row, cell, value, columnDef, dataContext): string {\r\n return value ? \"Yes\" : \"No\";\r\n};\r\n\r\nexport let CheckboxFormatter: ISlickFormatter = function (row, cell, value, columnDef, dataContext): string {\r\n return '<div style=\"text-align:center\">' + (value ? \"✔\" : \"-\") + '</div>'; // ❌\r\n};\r\n\r\nexport let CheckmarkFormatter: ISlickFormatter = function (row, cell, value, columnDef, dataContext): string {\r\n return value ? \"✔\" : \"\";\r\n};\r\n\r\nexport let NumericFormatter: ISlickFormatter = function (row, cell, value, columnDef, dataContext): ISlickFormatterResult {\r\n return {\r\n addClasses: [\"right\"],\r\n text: numeric.format(value, columnDef.format)\r\n };\r\n};\r\n\r\nexport let DateFormatter: ISlickFormatter = function (row, cell, value, columnDef, dataContext): string {\r\n return date.format(value, columnDef.format);\r\n};\r\n\r\nexport let HtmlFormatter: ISlickFormatter = function (row, cell, value, columnDef, dataContext): string {\r\n return value || \"\";\r\n};\r\n\r\nexport let LookupFormatter: ISlickFormatter = function (row, cell, value, columnDef, dataContext): string {\r\n let vl = columnDef.valueList;\r\n if (vl) {\r\n if (Array.isArray(vl)) {\r\n if (vl.length > 0) {\r\n if (typeof (vl[0]) === \"string\") {\r\n return escapeHTMLChars(vl.indexOf(value) >= 0 ? value : \"\"); //TODO: desired?\r\n } else {\r\n const vlList = vl as Array<{ text: string, value: any }>;\r\n return escapeHTMLChars(vlList.filter((x) => x.value === value)[0]?.text);\r\n }\r\n } else {\r\n return \"\";\r\n }\r\n } else {\r\n return escapeHTMLChars(vl[value]);\r\n }\r\n } else {\r\n console.warn(\"No values list found for column \" + columnDef.id);\r\n }\r\n return escapeHTMLChars(value);\r\n};\r\n\r\nexport let MultiLookupFormatter: ISlickFormatter = function (row, cell, value, columnDef, dataContext): string {\r\n if (value == null || value.length === 0) {\r\n return \"\";\r\n }\r\n const vl = columnDef.valueList;\r\n let result = \"\";\r\n if (vl == null) {\r\n console.warn(\"No values list found for column \" + columnDef.id);\r\n return result;\r\n }\r\n if (Array.isArray(vl)) {\r\n if (vl.length > 0) {\r\n if (typeof (vl[0]) === \"string\") {\r\n result = value.filter((v) => vl.indexOf(v) >= 0).join(\", \");\r\n } else {\r\n const vlList = vl as Array<{ text: string, value: any }>;\r\n result = vlList.filter((x) => value.indexOf(x.value) >= 0).map((x) => x.text ?? \"\").join(\", \");\r\n }\r\n }\r\n } else {\r\n result = value.map((v) => vl[v]).filter((v) => v != null).join(\", \");\r\n }\r\n return result || \"\";\r\n};\r\n\r\nexport let TextFormatter: ISlickFormatter = function (row, cell, value, columnDef, dataContext): string {\r\n if (value == null) {\r\n return \"\";\r\n } else {\r\n return escapeHTMLChars(value + \"\");\r\n }\r\n};\r\n\r\nexport let TooltipFormatter: ISlickFormatter = function (row, cell, value, columnDef, dataContext): string | ISlickFormatterResult {\r\n if (value == null) {\r\n return \"\";\r\n } else {\r\n const result = escapeHTMLChars(value + \"\");\r\n return {text: result, toolTip: result};\r\n }\r\n};\r\n\r\nexport let MultiLineTextFormatter: ISlickFormatter = function (row, cell, value, columnDef, dataContext): ISlickFormatterResult {\r\n var txt = \"\";\r\n if (value != null) {\r\n txt = escapeHTMLChars(value + \"\");\r\n }\r\n return { text: txt, addClasses: [\"slick-wrap\"] };\r\n};\r\n\r\nfunction pad(nr: number): string {\r\n if (nr < 10) {\r\n return \"0\" + nr.toString();\r\n } else {\r\n return nr.toString();\r\n }\r\n}\r\n\r\nexport let TimeFormatter: ISlickFormatter = function (row, cell, value, columnDef, dataContext): string {\r\n return value ? (pad(value.getHours()) + \":\" + pad(value.getMinutes())) : \"\";\r\n};\r\n\r\nexport let DateTimeFormatter: ISlickFormatter = function (row, cell, value, columnDef, dataContext): string {\r\n return DateFormatter(row, cell, value, columnDef, dataContext) + \" \" +\r\n TimeFormatter(row, cell, value, columnDef, dataContext);\r\n};\r\n\r\nexport let ButtonFormatter: ISlickFormatter = function (row, cell, value, columnDef, dataContext): string {\r\n return \"<button class='grid-btn'>...</button>\";\r\n};\r\n","import culture from \"./culture\";\r\n\r\n/*\r\n * contains function to parse and format numeric values\r\n */\r\n\r\ninterface IFormatInfo {\r\n min_comma_places: number;\r\n max_comma_places: number;\r\n min_length: number;\r\n show_sep: boolean;\r\n prefix: string;\r\n suffix: string;\r\n}\r\n\r\n\r\nexport abstract class numeric {\r\n\r\n public static parse(nrAsString: string): number {\r\n if (nrAsString === \"\" || nrAsString === undefined || nrAsString === null) {\r\n return undefined;\r\n }\r\n if (!nrAsString) {\r\n return undefined;\r\n }\r\n if (culture.info.decimalSep && culture.info.decimalSep.length > 1) {\r\n throw \"DecimalSep cannot be more than one character\";\r\n }\r\n if (culture.info.thousandSep && culture.info.thousandSep.length > 1) {\r\n throw \"ThousandSep cannot be more than one character\";\r\n }\r\n var str = \"\";\r\n var comma_sep = culture.info.decimalSep;\r\n for (var i = 0; i < nrAsString.length; i++) {\r\n var c = nrAsString.charAt(i);\r\n if (c === comma_sep) {\r\n str += '.';\r\n }\r\n else if (c === '0' || c === '1' || c === '2' || c === '3' || c === '4' || c === '5' || c === '6' || c === '7' || c === '8' || c === '9' || (c === '-' && str === \"\")) {\r\n str += c;\r\n }\r\n }\r\n return parseFloat(str);\r\n }\r\n\r\n public static format(nr: number, format?: string): string {\r\n if (isNaN(nr) || nr === null || nr === undefined) {\r\n return \"\";\r\n }\r\n if (culture.info.decimalSep && culture.info.decimalSep.length > 1) {\r\n throw \"DecimalSep cannot be more than one character\";\r\n }\r\n if (culture.info.thousandSep && culture.info.thousandSep.length > 1) {\r\n throw \"ThousandSep cannot be more than one character\";\r\n }\r\n\r\n const f = format || culture.info.numberFormat;\r\n let cacheEntry = numeric.formatCache[f];\r\n if (!cacheEntry) {\r\n numeric.formatCache[f] = cacheEntry = numeric.parseNrFormat(f);\r\n }\r\n return numeric.formatNumber(nr, cacheEntry);\r\n }\r\n\r\n private static formatCache: { [_key: string]: IFormatInfo } = {};\r\n\r\n private static parseNrFormat(format: string): IFormatInfo {\r\n let prefix = \"\";\r\n let suffix = \"\";\r\n let show_sep = format.indexOf(',#') > 0 || format.indexOf(',0') > 0;\r\n let min_length = 0;\r\n for (let i = 0; i < format.length; i++) {\r\n if (format.charAt(i) === '.') {\r\n break;\r\n }\r\n if (format.charAt(i) === '0') {\r\n min_length++;\r\n }\r\n if (min_length === 0 && format.charAt(i) !== ',' && format.charAt(i) !== '0' && format.charAt(i) !== '.' && format.charAt(i) !== '#') {\r\n prefix += format.charAt(i);\r\n }\r\n }\r\n let max_comma_places = 0;\r\n let min_comma_places = 0;\r\n let comma_pos = format.indexOf('.');\r\n if (comma_pos >= 0) {\r\n for (let j = comma_pos + 1; j < format.length; j++) {\r\n if (format.charAt(j) === '0') {\r\n min_comma_places++;\r\n }\r\n else if (format.charAt(j) === '#') {\r\n max_comma_places++;\r\n }\r\n else if (format.charAt(j) !== ',' && format.charAt(j) !== '.') {\r\n suffix += format.charAt(j);\r\n }\r\n }\r\n }\r\n max_comma_places += min_comma_places;\r\n return { max_comma_places, min_comma_places, min_length, prefix, suffix, show_sep };\r\n }\r\n\r\n private static formatNumber(nr, format: IFormatInfo) {\r\n //defaults\r\n let comma_separator = culture.info.decimalSep;\r\n let thousand_separator = culture.info.thousandSep;\r\n let cp_min = format.min_comma_places || 0;\r\n let cp_max = format.max_comma_places || 0;\r\n let ml = format.min_length || 0;\r\n //check if number is negative\r\n let negative = nr < 0;\r\n if (negative) {\r\n nr = -nr;\r\n }\r\n //convert number to a string and round\r\n let nr_str_raw = nr.toFixed(cp_max);\r\n let cp = cp_max;\r\n //remove comma-places which are not necessary\r\n let end = nr_str_raw.indexOf('.') + cp_min;\r\n if (end >= 0) {\r\n let x = nr_str_raw.length - 1;\r\n while (x > end) {\r\n if (nr_str_raw.charAt(x) === '0') {\r\n cp--;\r\n nr_str_raw = nr_str_raw.slice(0, -1);\r\n } else {\r\n break;\r\n }\r\n x--;\r\n }\r\n if (nr_str_raw.charAt(x) === '.') {\r\n nr_str_raw = nr_str_raw.slice(0, -1);\r\n }\r\n }\r\n let nr_str = comma_separator !== \".\" ? nr_str_raw.replace(\".\", comma_separator) : nr_str_raw;\r\n let t = cp ? cp + 1 : 0;\r\n // add \"0\" at the front if necessary\r\n while (nr_str.length < ml + t) {\r\n nr_str = \"0\" + nr_str;\r\n }\r\n // insert thousand-separator if necessary\r\n t += 3;\r\n while (nr_str.length > t && format.show_sep) {\r\n nr_str = nr_str.substr(0, nr_str.length - t) + thousand_separator + nr_str.substr(nr_str.length - t);\r\n t += 4;\r\n }\r\n //remove first 0 if necessary\r\n if (ml === 0 && nr_str.charAt(0) === '0') {\r\n nr_str = nr_str.slice(1);\r\n }\r\n //return number\r\n if (negative && parseFloat(nr_str_raw) !== 0) {\r\n return (format.prefix || \"\") + \"-\" + nr_str + (format.suffix || \"\");\r\n }\r\n else {\r\n return (format.prefix || \"\") + nr_str + (format.suffix || \"\");\r\n }\r\n }\r\n}\r\n","let _w: any = window;\r\n\r\n_w._current_culture = \"\";\r\n\r\nlet culture = _w._culture ?? {\r\n\r\n info: { thousandSep: \",\", decimalSep: \".\", dateFormat: \"yy-mm-dd\", numberFormat: \"#,0.####\" },\r\n\r\n /**\r\n * sets a culture\r\n * @param c culture as string for example 'de' or 'en-us'\r\n */\r\n set: function(c: string): void {\r\n var cult_vals = culture.cultures[c.toLowerCase()];\r\n if (cult_vals === undefined)\r\n throw \"unknown culture '\"+c+\"'\";\r\n culture.info.decimalSep = cult_vals[0];\r\n culture.info.thousandSep = cult_vals[1];\r\n culture.info.dateFormat = cult_vals[2];\r\n _w.current_culture = c;\r\n },\r\n\r\n /**\r\n * returns current culture\r\n */\r\n get: function(): string {\r\n return _w.current_culture;\r\n },\r\n cultures: {\r\n// 'ar':['.',',','dd/mm/y'],\r\n// 'bg':[',',' ','d.m.yy \\'г.\\''],\r\n// 'ca':[',','.','dd/mm/yy'],\r\n// 'zh-hans':['.',',','yy/m/d'],\r\n// 'cs':[',',' ','d.m.yy'],\r\n// 'da':[',','.','dd-mm-yy'],\r\n'de':[',','.','dd.mm.yy'],\r\n// 'el':[',','.','d/m/yy'],\r\n// 'es':[',','.','dd/mm/yy'],\r\n// 'fi':[',',' ','d.m.yy'],\r\n// 'fr':[',',' ','dd/mm/yy'],\r\n// 'he':['.',',','dd/mm/yy'],\r\n// 'hu':[',',' ','yy.mm.dd.'],\r\n// 'is':[',','.','d.m.yy'],\r\n// 'it':[',','.','dd/mm/yy'],\r\n// 'ja':['.',',','yy/mm/dd'],\r\n// 'ko':['.',',','yy-mm-dd'],\r\n// 'nl':[',','.','d-m-yy'],\r\n// 'no':[',',' ','dd.mm.yy'],\r\n// 'pl':[',',' ','yy-mm-dd'],\r\n// 'pt':[',','.','dd/mm/yy'],\r\n// 'rm':['.','\\'','dd/mm/yy'],\r\n// 'ro':[',','.','dd.mm.yy'],\r\n// 'ru':[',',' ','dd.mm.yy'],\r\n// 'hr':[',','.','d.m.yy.'],\r\n// 'sk':[',',' ','d. m. yy'],\r\n// 'sq':[',','.','yy-mm-dd'],\r\n// 'sv':[',',' ','yy-mm-dd'],\r\n// 'th':['.',',','d/m/yy'],\r\n// 'tr':[',','.','dd.mm.yy'],\r\n// 'ur':['.',',','dd/mm/yy'],\r\n// 'id':[',','.','dd/mm/yy'],\r\n// 'uk':[',',' ','dd.mm.yy'],\r\n// 'be':[',',' ','dd.mm.yy'],\r\n// 'sl':[',','.','d.m.yy'],\r\n// 'et':[',',' ','d.mm.yy'],\r\n// 'lv':[',',' ','yy.mm.dd.'],\r\n// 'lt':[',','.','yy.mm.dd'],\r\n// 'tg':[',',' ','dd.mm.y'],\r\n// 'fa':['.',',','mm/dd/yy'],\r\n// 'vi':[',','.','dd/mm/yy'],\r\n// 'hy':['.',',','dd.mm.yy'],\r\n// 'az':[',',' ','dd.mm.yy'],\r\n// 'eu':[',','.','yy/mm/dd'],\r\n// 'hsb':[',','.','d. m. yy'],\r\n// 'mk':[',','.','dd.mm.yy'],\r\n// 'tn':['.',',','yy/mm/dd'],\r\n// 'xh':['.',',','yy/mm/dd'],\r\n// 'zu':['.',',','yy/mm/dd'],\r\n// 'af':['.',',','yy/mm/dd'],\r\n// 'ka':[',',' ','dd.mm.yy'],\r\n// 'fo':[',','.','dd-mm-yy'],\r\n// 'hi':['.',',','dd-mm-yy'],\r\n// 'mt':['.',',','dd/mm/yy'],\r\n// 'se':[',',' ','dd.mm.yy'],\r\n// 'ga':['.',',','dd/mm/yy'],\r\n// 'ms':['.',',','dd/mm/yy'],\r\n// 'kk':[',',' ','dd.mm.yy'],\r\n// 'ky':[',',' ','dd.mm.y'],\r\n// 'sw':['.',',','m/d/yy'],\r\n// 'tk':[',',' ','dd.mm.y'],\r\n// 'uz':[',',' ','dd/mm yy'],\r\n// 'tt':[',',' ','dd.mm.yy'],\r\n// 'bn':['.',',','dd-mm-y'],\r\n// 'pa':['.',',','dd-mm-y'],\r\n// 'gu':['.',',','dd-mm-y'],\r\n// 'or':['.',',','dd-mm-y'],\r\n// 'ta':['.',',','dd-mm-yy'],\r\n// 'te':['.',',','dd-mm-y'],\r\n// 'kn':['.',',','dd-mm-y'],\r\n// 'ml':['.',',','dd-mm-y'],\r\n// 'as':['.',',','dd-mm-yy'],\r\n// 'mr':['.',',','dd-mm-yy'],\r\n// 'sa':['.',',','dd-mm-yy'],\r\n// 'mn':[',',' ','y.mm.dd'],\r\n// 'bo':['.',',','yy/m/d'],\r\n// 'cy':['.',',','dd/mm/yy'],\r\n// 'km':['.',',','yy-mm-dd'],\r\n// 'lo':['.',',','dd/mm/yy'],\r\n// 'gl':[',','.','dd/mm/yy'],\r\n// 'kok':['.',',','dd-mm-yy'],\r\n// 'syr':['.',',','dd/mm/yy'],\r\n// 'si':['.',',','yy-mm-dd'],\r\n// 'iu':['.',',','d/mm/yy'],\r\n// 'am':['.',',','d/m/yy'],\r\n// 'tzm':[',','.','dd-mm-yy'],\r\n// 'ne':['.',',','m/d/yy'],\r\n// 'fy':[',','.','d-m-yy'],\r\n// 'ps':[',','،','dd/mm/y'],\r\n// 'fil':['.',',','m/d/yy'],\r\n// 'dv':['.',',','dd/mm/y'],\r\n// 'ha':['.',',','d/m/yy'],\r\n// 'yo':['.',',','d/m/yy'],\r\n// 'quz':[',','.','dd/mm/yy'],\r\n// 'nso':['.',',','yy/mm/dd'],\r\n// 'ba':[',',' ','dd.mm.y'],\r\n// 'lb':[',',' ','dd/mm/yy'],\r\n// 'kl':[',','.','dd-mm-yy'],\r\n// 'ig':['.',',','d/m/yy'],\r\n// 'ii':['.',',','yy/m/d'],\r\n// 'arn':[',','.','dd-mm-yy'],\r\n// 'moh':['.',',','m/d/yy'],\r\n// 'br':[',',' ','dd/mm/yy'],\r\n// 'ug':['.',',','yy-m-d'],\r\n// 'mi':['.',',','dd/mm/yy'],\r\n// 'oc':[',',' ','dd/mm/yy'],\r\n// 'co':[',',' ','dd/mm/yy'],\r\n// 'gsw':[',',' ','dd/mm/yy'],\r\n// 'sah':[',',' ','mm.dd.yy'],\r\n// 'qut':['.',',','dd/mm/yy'],\r\n// 'rw':[',',' ','m/d/yy'],\r\n// 'wo':[',',' ','dd/mm/yy'],\r\n// 'prs':[',','.','dd/mm/y'],\r\n// 'gd':['.',',','dd/mm/yy'],\r\n// 'ar-sa':['.',',','dd/mm/y'],\r\n// 'bg-bg':[',',' ','d.m.yy \\'г.\\''],\r\n// 'ca-es':[',','.','dd/mm/yy'],\r\n// 'zh-tw':['.',',','yy/m/d'],\r\n// 'cs-cz':[',',' ','d.m.yy'],\r\n// 'da-dk':[',','.','dd-mm-yy'],\r\n// 'de-de':[',','.','dd.mm.yy'],\r\n// 'el-gr':[',','.','d/m/yy'],\r\n'en-us':['.',',','m/d/yy'],\r\n// 'fi-fi':[',',' ','d.m.yy'],\r\n// 'fr-fr':[',',' ','dd/mm/yy'],\r\n// 'he-il':['.',',','dd/mm/yy'],\r\n// 'hu-hu':[',',' ','yy.mm.dd.'],\r\n// 'is-is':[',','.','d.m.yy'],\r\n// 'it-it':[',','.','dd/mm/yy'],\r\n// 'ja-jp':['.',',','yy/mm/dd'],\r\n// 'ko-kr':['.',',','yy-mm-dd'],\r\n// 'nl-nl':[',','.','d-m-yy'],\r\n// 'nb-no':[',',' ','dd.mm.yy'],\r\n// 'pl-pl':[',',' ','yy-mm-dd'],\r\n// 'pt-br':[',','.','dd/mm/yy'],\r\n// 'rm-ch':['.','\\'','dd/mm/yy'],\r\n// 'ro-ro':[',','.','dd.mm.yy'],\r\n// 'ru-ru':[',',' ','dd.mm.yy'],\r\n// 'hr-hr':[',','.','d.m.yy.'],\r\n// 'sk-sk':[',',' ','d. m. yy'],\r\n// 'sq-al':[',','.','yy-mm-dd'],\r\n// 'sv-se':[',',' ','yy-mm-dd'],\r\n// 'th-th':['.',',','d/m/yy'],\r\n// 'tr-tr':[',','.','dd.mm.yy'],\r\n// 'ur-pk':['.',',','dd/mm/yy'],\r\n// 'id-id':[',','.','dd/mm/yy'],\r\n// 'uk-ua':[',',' ','dd.mm.yy'],\r\n// 'be-by':[',',' ','dd.mm.yy'],\r\n// 'sl-si':[',','.','d.m.yy'],\r\n// 'et-ee':[',',' ','d.mm.yy'],\r\n// 'lv-lv':[',',' ','yy.mm.dd.'],\r\n// 'lt-lt':[',','.','yy.mm.dd'],\r\n// 'tg-cyrl-tj':[',',' ','dd.mm.y'],\r\n// 'fa-ir':['.',',','mm/dd/yy'],\r\n// 'vi-vn':[',','.','dd/mm/yy'],\r\n// 'hy-am':['.',',','dd.mm.yy'],\r\n// 'az-latn-az':[',',' ','dd.mm.yy'],\r\n// 'eu-es':[',','.','yy/mm/dd'],\r\n// 'hsb-de':[',','.','d. m. yy'],\r\n// 'mk-mk':[',','.','dd.mm.yy'],\r\n// 'tn-za':['.',',','yy/mm/dd'],\r\n// 'xh-za':['.',',','yy/mm/dd'],\r\n// 'zu-za':['.',',','yy/mm/dd'],\r\n// 'af-za':['.',',','yy/mm/dd'],\r\n// 'ka-ge':[',',' ','dd.mm.yy'],\r\n// 'fo-fo':[',','.','dd-mm-yy'],\r\n// 'hi-in':['.',',','dd-mm-yy'],\r\n// 'mt-mt':['.',',','dd/mm/yy'],\r\n// 'se-no':[',',' ','dd.mm.yy'],\r\n// 'ms-my':['.',',','dd/mm/yy'],\r\n// 'kk-kz':[',',' ','dd.mm.yy'],\r\n// 'ky-kg':[',',' ','dd.mm.y'],\r\n// 'sw-ke':['.',',','m/d/yy'],\r\n// 'tk-tm':[',',' ','dd.mm.y'],\r\n// 'uz-latn-uz':[',',' ','dd/mm yy'],\r\n// 'tt-ru':[',',' ','dd.mm.yy'],\r\n// 'bn-in':['.',',','dd-mm-y'],\r\n// 'pa-in':['.',',','dd-mm-y'],\r\n// 'gu-in':['.',',','dd-mm-y'],\r\n// 'or-in':['.',',','dd-mm-y'],\r\n// 'ta-in':['.',',','dd-mm-yy'],\r\n// 'te-in':['.',',','dd-mm-y'],\r\n// 'kn-in':['.',',','dd-mm-y'],\r\n// 'ml-in':['.',',','dd-mm-y'],\r\n// 'as-in':['.',',','dd-mm-yy'],\r\n// 'mr-in':['.',',','dd-mm-yy'],\r\n// 'sa-in':['.',',','dd-mm-yy'],\r\n// 'mn-mn':[',',' ','y.mm.dd'],\r\n// 'bo-cn':['.',',','yy/m/d'],\r\n// 'cy-gb':['.',',','dd/mm/yy'],\r\n// 'km-kh':['.',',','yy-mm-dd'],\r\n// 'lo-la':['.',',','dd/mm/yy'],\r\n// 'gl-es':[',','.','dd/mm/yy'],\r\n// 'kok-in':['.',',','dd-mm-yy'],\r\n// 'syr-sy':['.',',','dd/mm/yy'],\r\n// 'si-lk':['.',',','yy-mm-dd'],\r\n// 'iu-cans-ca':['.',',','d/m/yy'],\r\n// 'am-et':['.',',','d/m/yy'],\r\n// 'ne-np':['.',',','m/d/yy'],\r\n// 'fy-nl':[',','.','d-m-yy'],\r\n// 'ps-af':[',','،','dd/mm/y'],\r\n// 'fil-ph':['.',',','m/d/yy'],\r\n// 'dv-mv':['.',',','dd/mm/y'],\r\n// 'ha-latn-ng':['.',',','d/m/yy'],\r\n// 'yo-ng':['.',',','d/m/yy'],\r\n// 'quz-bo':[',','.','dd/mm/yy'],\r\n// 'nso-za':['.',',','yy/mm/dd'],\r\n// 'ba-ru':[',',' ','dd.mm.y'],\r\n// 'lb-lu':[',',' ','dd/mm/yy'],\r\n// 'kl-gl':[',','.','dd-mm-yy'],\r\n// 'ig-ng':['.',',','d/m/yy'],\r\n// 'ii-cn':['.',',','yy/m/d'],\r\n// 'arn-cl':[',','.','dd-mm-yy'],\r\n// 'moh-ca':['.',',','m/d/yy'],\r\n// 'br-fr':[',',' ','dd/mm/yy'],\r\n// 'ug-cn':['.',',','yy-m-d'],\r\n// 'mi-nz':['.',',','dd/mm/yy'],\r\n// 'oc-fr':[',',' ','dd/mm/yy'],\r\n// 'co-fr':[',',' ','dd/mm/yy'],\r\n// 'gsw-fr':[',',' ','dd/mm/yy'],\r\n// 'sah-ru':[',',' ','mm.dd.yy'],\r\n// 'qut-gt':['.',',','dd/mm/yy'],\r\n// 'rw-rw':[',',' ','m/d/yy'],\r\n// 'wo-sn':[',',' ','dd/mm/yy'],\r\n// 'prs-af':[',','.','dd/mm/y'],\r\n// 'gd-gb':['.',',','dd/mm/yy'],\r\n// 'ar-iq':['.',',','dd/mm/yy'],\r\n// 'zh-cn':['.',',','yy/m/d'],\r\n// 'de-ch':['.','\\'','dd.mm.yy'],\r\n'en-gb':['.',',','dd/mm/yy'],\r\n// 'es-mx':['.',',','dd/mm/yy'],\r\n// 'fr-be':[',','.','d/mm/yy'],\r\n// 'it-ch':['.','\\'','dd.mm.yy'],\r\n// 'nl-be':[',','.','d/mm/yy'],\r\n// 'nn-no':[',',' ','dd.mm.yy'],\r\n// 'pt-pt':[',','.','dd-mm-yy'],\r\n// 'sr-latn-cs':[',','.','d.m.yy'],\r\n// 'sv-fi':[',',' ','d.m.yy'],\r\n// 'az-cyrl-az':[',',' ','dd.mm.yy'],\r\n// 'dsb-de':[',','.','d. m. yy'],\r\n// 'se-se':[',',' ','yy-mm-dd'],\r\n// 'ga-ie':['.',',','dd/mm/yy'],\r\n// 'ms-bn':[',','.','dd/mm/yy'],\r\n// 'uz-cyrl-uz':[',',' ','dd.mm.yy'],\r\n// 'bn-bd':['.',',','dd-mm-y'],\r\n// 'mn-mong-cn':['.',',','yy/m/d'],\r\n// 'iu-latn-ca':['.',',','d/mm/yy'],\r\n// 'tzm-latn-dz':[',','.','dd-mm-yy'],\r\n// 'quz-ec':[',','.','dd/mm/yy'],\r\n// 'ar-eg':['.',',','dd/mm/yy'],\r\n// 'zh-hk':['.',',','d/m/yy'],\r\n// 'de-at':[',','.','dd.mm.yy'],\r\n// 'en-au':['.',',','d/mm/yy'],\r\n// 'es-es':[',','.','dd/mm/yy'],\r\n// 'fr-ca':[',',' ','yy-mm-dd'],\r\n// 'sr-cyrl-cs':[',','.','d.m.yy'],\r\n// 'se-fi':[',',' ','d.m.yy'],\r\n// 'quz-pe':['.',',','dd/mm/yy'],\r\n// 'ar-ly':['.',',','dd/mm/yy'],\r\n// 'zh-sg':['.',',','d/m/yy'],\r\n// 'de-lu':[',','.','dd.mm.yy'],\r\n// 'en-ca':['.',',','dd/mm/yy'],\r\n// 'es-gt':['.',',','dd/mm/yy'],\r\n// 'fr-ch':['.','\\'','dd.mm.yy'],\r\n// 'hr-ba':[',','.','d.m.yy.'],\r\n// 'smj-no':[',',' ','dd.mm.yy'],\r\n// 'ar-dz':['.',',','dd-mm-yy'],\r\n// 'zh-mo':['.',',','d/m/yy'],\r\n// 'de-li':['.','\\'','dd.mm.yy'],\r\n// 'en-nz':['.',',','d/mm/yy'],\r\n// 'es-cr':[',','.','dd/mm/yy'],\r\n// 'fr-lu':[',',' ','dd/mm/yy'],\r\n// 'bs-latn-ba':[',','.','d.m.yy'],\r\n// 'smj-se':[',',' ','yy-mm-dd'],\r\n// 'ar-ma':['.',',','dd-mm-yy'],\r\n// 'en-ie':['.',',','dd/mm/yy'],\r\n// 'es-pa':['.',',','mm/dd/yy'],\r\n// 'fr-mc':[',',' ','dd/mm/yy'],\r\n// 'sr-latn-ba':[',','.','d.m.yy'],\r\n// 'sma-no':[',',' ','dd.mm.yy'],\r\n// 'ar-tn':['.',',','dd-mm-yy'],\r\n// 'en-za':['.',' ','yy/mm/dd'],\r\n// 'es-do':['.',',','dd/mm/yy'],\r\n// 'sr-cyrl-ba':[',','.','d.m.yy'],\r\n// 'sma-se':[',',' ','yy-mm-dd'],\r\n// 'ar-om':['.',',','dd/mm/yy'],\r\n// 'en-jm':['.',',','dd/mm/yy'],\r\n// 'es-ve':[',','.','dd/mm/yy'],\r\n// 'bs-cyrl-ba':[',','.','d.m.yy'],\r\n// 'sms-fi':[',',' ','d.m.yy'],\r\n// 'ar-ye':['.',',','dd/mm/yy'],\r\n// 'en-029':['.',',','mm/dd/yy'],\r\n// 'es-co':[',','.','dd/mm/yy'],\r\n// 'sr-latn-rs':[',','.','d.m.yy'],\r\n// 'smn-fi':[',',' ','d.m.yy'],\r\n// 'ar-sy':['.',',','dd/mm/yy'],\r\n// 'en-bz':['.',',','dd/mm/yy'],\r\n// 'es-pe':['.',',','dd/mm/yy'],\r\n// 'sr-cyrl-rs':[',','.','d.m.yy'],\r\n// 'ar-jo':['.',',','dd/mm/yy'],\r\n// 'en-tt':['.',',','dd/mm/yy'],\r\n// 'es-ar':[',','.','dd/mm/yy'],\r\n// 'sr-latn-me':[',','.','d.m.yy'],\r\n// 'ar-lb':['.',',','dd/mm/yy'],\r\n// 'en-zw':['.',',','m/d/yy'],\r\n// 'es-ec':[',','.','dd/mm/yy'],\r\n// 'sr-cyrl-me':[',','.','d.m.yy'],\r\n// 'ar-kw':['.',',','dd/mm/yy'],\r\n// 'en-ph':['.',',','m/d/yy'],\r\n// 'es-cl':[',','.','dd-mm-yy'],\r\n// 'ar-ae':['.',',','dd/mm/yy'],\r\n// 'es-uy':[',','.','dd/mm/yy'],\r\n// 'ar-bh':['.',',','dd/mm/yy'],\r\n// 'es-py':[',','.','dd/mm/yy'],\r\n// 'ar-qa':['.',',','dd/mm/yy'],\r\n// 'en-in':['.',',','dd-mm-yy'],\r\n// 'es-bo':[',','.','dd/mm/yy'],\r\n// 'en-my':['.',',','d/m/yy'],\r\n// 'es-sv':['.',',','dd/mm/yy'],\r\n// 'en-sg':['.',',','d/m/yy'],\r\n// 'es-hn':['.',',','dd/mm/yy'],\r\n// 'es-ni':['.',',','dd/mm/yy'],\r\n// 'es-pr':['.',',','dd/mm/yy'],\r\n// 'es-us':['.',',','m/d/yy'],\r\n// 'bs-cyrl':[',','.','d.m.yy'],\r\n// 'bs-latn':[',','.','d.m.yy'],\r\n// 'sr-cyrl':[',','.','d.m.yy'],\r\n// 'sr-latn':[',','.','d.m.yy'],\r\n// 'smn':[',',' ','d.m.yy'],\r\n// 'az-cyrl':[',',' ','dd.mm.yy'],\r\n// 'sms':[',',' ','d.m.yy'],\r\n// 'zh':['.',',','yy/m/d'],\r\n// 'nn':[',',' ','dd.mm.yy'],\r\n// 'bs':[',','.','d.m.yy'],\r\n// 'az-latn':[',',' ','dd.mm.yy'],\r\n// 'sma':[',',' ','yy-mm-dd'],\r\n// 'uz-cyrl':[',',' ','dd.mm.yy'],\r\n// 'mn-cyrl':[',',' ','y.mm.dd'],\r\n// 'iu-cans':['.',',','d/m/yy'],\r\n// 'zh-hant':['.',',','d/m/yy'],\r\n// 'nb':[',',' ','dd.mm.yy'],\r\n// 'sr':[',','.','d.m.yy'],\r\n// 'tg-cyrl':[',',' ','dd.mm.y'],\r\n// 'dsb':[',','.','d. m. yy'],\r\n// 'smj':[',',' ','yy-mm-dd'],\r\n// 'uz-latn':[',',' ','dd/mm yy'],\r\n// 'mn-mong':['.',',','yy/m/d'],\r\n// 'iu-latn':['.',',','d/mm/yy'],\r\n// 'tzm-latn':[',','.','dd-mm-yy'],\r\n// 'ha-latn':['.',',','d/m/yy'],\r\n// 'zh-chs':['.',',','yy/m/d'],\r\n// 'zh-cht':['.',',','d/m/yy'],\r\n'':['.',',','yy-mm-dd'] }\r\n};\r\n\r\n_w._culture = culture;\r\n\r\n/**\r\n * culture info for date and number formatting and parsing\r\n */\r\nexport default culture;\r\n","import culture from \"./culture\";\r\n\r\n/*\r\n * contains function to parse and format numeric values\r\n */\r\n\r\n\r\n//*** all following parts are extracted out of jquery-ui library (GPL/MIT license) ***/\r\n\r\nvar _helper = {\r\n _defaults: { shortYearCutoff: \"+10\", dayNames: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"], monthNames: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"], dayNamesShort: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"], monthNamesShort: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"] },\r\n _ticksTo1970: (((1970 - 1) * 365 + Math.floor(1970 / 4) - Math.floor(1970 / 100) + Math.floor(1970 / 400)) * 24 * 60 * 60 * 10000000),\r\n _daylightSavingAdjust(date) {\r\n if (!date) { return null; }\r\n date.setHours(date.getHours() > 12 ? date.getHours() + 2 : 0);\r\n return date;\r\n },\r\n _getDaysInMonth(year, month) {\r\n return 32 - _helper._daylightSavingAdjust(new Date(year, month, 32)).getDate();\r\n }\r\n};\r\n\r\n\r\n\r\nexport abstract class date {\r\n\r\n\r\n /* Parse a string value into a date object.\r\nSee formatDate below for the possible formats.\r\n\r\n@param format string - the expected format of the date\r\n@param value string - the date in the above format\r\n@param settings Object - attributes include:\r\nshortYearCutoff number - the cutoff year for determining the century (optional)\r\ndayNamesShort string[7] - abbreviated names of the days from Sunday (optional)\r\ndayNames string[7] - names of the days from Sunday (optional)\r\nmonthNamesShort string[12] - abbreviated names of the months (optional)\r\nmonthNames string[12] - names of the months (optional)\r\n@return Date - the extracted date value or null if value is blank */\r\n public static parse(value: string, format?: string, settings?): Date {\r\n if (value === null) {\r\n return null;\r\n }\r\n if (value === undefined) {\r\n return undefined;\r\n }\r\n if (value == \"\") {\r\n return null;\r\n }\r\n format = format || culture.info.dateFormat;\r\n //value = (typeof value == 'object' ? value.toString() : value + '');\r\n let shortYearCutoff = (settings ? settings.shortYearCutoff : null) || _helper._defaults.shortYearCutoff;\r\n shortYearCutoff = (typeof shortYearCutoff != \"string\" ? shortYearCutoff :\r\n new Date().getFullYear() % 100 + parseInt(shortYearCutoff, 10));\r\n let dayNamesShort = (settings ? settings.dayNamesShort : null) || _helper._defaults.dayNamesShort;\r\n let dayNames = (settings ? settings.dayNames : null) || _helper._defaults.dayNames;\r\n let monthNamesShort = (settings ? settings.monthNamesShort : null) || _helper._defaults.monthNamesShort;\r\n let monthNames = (settings ? settings.monthNames : null) || _helper._defaults.monthNames;\r\n let year = -1;\r\n let month = -1;\r\n let day = -1;\r\n let doy = -1;\r\n let literal = false;\r\n // Check whether a format character is doubled\r\n let lookAhead = function (match) {\r\n let matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) == match);\r\n if (matches) {\r\n iFormat++;\r\n }\r\n return matches;\r\n };\r\n // Extract a number from the string value\r\n let getNumber = function (match) {\r\n let isDoubled = lookAhead(match);\r\n let size = (match == \"@\" ? 14 : (match == \"!\" ? 20 :\r\n (match == \"y\" && isDoubled ? 4 : (match == \"o\" ? 3 : 2))));\r\n let digits = new RegExp(\"^\\\\d{1,\" + size + \"}\");\r\n let num = value.substring(iValue).match(digits);\r\n if (!num) {\r\n throw \"Missing number at position \" + iValue;\r\n }\r\n iValue += num[0].length;\r\n return parseInt(num[0], 10);\r\n };\r\n // Extract a name from the string value and convert to an index\r\n let getName = function (match, shortNames, longNames) {\r\n let names = (lookAhead(match) ? longNames : shortNames);\r\n for (let i = 0; i < names.length; i++) {\r\n if (value.substr(iValue, names[i].length).toLowerCase() == names[i].toLowerCase()) {\r\n iValue += names[i].length;\r\n return i + 1;\r\n }\r\n }\r\n throw new Error(\"Unknown name at position \" + iValue);\r\n };\r\n // Confirm that a literal character matches the string value\r\n let checkLiteral = function () {\r\n if (value.charAt(iValue) != format.charAt(iFormat)) {\r\n throw \"Unexpected literal at position \" + iValue;\r\n }\r\n iValue++;\r\n };\r\n let iValue = 0;\r\n for (var iFormat = 0; iFormat < format.length; iFormat++) {\r\n if (literal) {\r\n if (format.charAt(iFormat) == \"'\" && !lookAhead(\"'\")) {\r\n literal = false;\r\n } else {\r\n checkLiteral();\r\n }\r\n } else {\r\n switch (format.charAt(iFormat)) {\r\n case \"d\":\r\n day = getNumber(\"d\");\r\n break;\r\n case \"D\":\r\n getName(\"D\", dayNamesShort, dayNames);\r\n break;\r\n case \"o\":\r\n doy = getNumber(\"o\");\r\n break;\r\n case \"m\":\r\n month = getNumber(\"m\");\r\n break;\r\n case \"M\":\r\n month = getName(\"M\", monthNamesShort, monthNames);\r\n break;\r\n case \"y\":\r\n year = getNumber(\"y\");\r\n break;\r\n case \"@\":\r\n var date = new Date(getNumber(\"@\"));\r\n year = date.getFullYear();\r\n month = date.getMonth() + 1;\r\n day = date.getDate();\r\n break;\r\n case \"!\":\r\n var date = new Date((getNumber(\"!\") - _helper._ticksTo1970) / 10000);\r\n year = date.getFullYear();\r\n month = date.getMonth() + 1;\r\n day = date.getDate();\r\n break;\r\n case \"'\":\r\n if (lookAhead(\"'\")) {\r\n checkLiteral();\r\n } else {\r\n literal = true;\r\n }\r\n break;\r\n default:\r\n checkLiteral();\r\n }\r\n }\r\n }\r\n if (year == -1) {\r\n year = new Date().getFullYear();\r\n } else if (year < 100) {\r\n year += new Date().getFullYear() - new Date().getFullYear() % 100 +\r\n (year <= shortYearCutoff ? 0 : -100);\r\n }\r\n if (doy > -1) {\r\n month = 1;\r\n day = doy;\r\n do {\r\n let dim = _helper._getDaysInMonth(year, month - 1);\r\n if (day <= dim) {\r\n break;\r\n }\r\n month++;\r\n day -= dim;\r\n } while (true);\r\n }\r\n let result = _helper._daylightSavingAdjust(new Date(year, month - 1, day));\r\n if (result.getFullYear() != year || result.getMonth() + 1 != month || result.getDate() != day) {\r\n throw new Error(\"Invalid date\");\r\n } // E.g. 31/02/*\r\n return result;\r\n }\r\n\r\n /* Format a date object into a string value.\r\nThe format can be combinations of the following:\r\nd - day of month (no leading zero)\r\ndd - day of month (two digit)\r\no - day of year (no leading zeros)\r\noo - day of year (three digit)\r\nD - day name short\r\nDD - day name long\r\nm - month of year (no leading zero)\r\nmm - month of year (two digit)\r\nM - month name short\r\nMM - month name long\r\ny - year (two digit)\r\nyy - year (four digit)\r\n@ - Unix timestamp (ms since 01/01/1970)\r\n! - Windows ticks (100ns since 01/01/0001)\r\n'...' - literal text\r\n'' - single quote\r\n\r\n@param format string - the desired format of the date\r\n@param date Date - the date value to format\r\n@param settings Object - attributes include:\r\ndayNamesShort string[7] - abbreviated names of the days from Sunday (optional)\r\ndayNames string[7] - names of the days from Sunday (optional)\r\nmonthNamesShort string[12] - abbreviated names of the months (optional)\r\nmonthNames string[12] - names of the months (optional)\r\n@return string - the date in the above format */\r\n public static format(date: Date, format?: string, settings?): string {\r\n if (!date || isNaN(date as any)) {\r\n return \"\";\r\n }\r\n format = format || culture.info.dateFormat;\r\n let dayNamesShort = (settings ? settings.dayNamesShort : null) || _helper._defaults.dayNamesShort;\r\n let dayNames = (settings ? settings.dayNames : null) || _helper._defaults.dayNames;\r\n let monthNamesShort = (settings ? settings.monthNamesShort : null) || _helper._defaults.monthNamesShort;\r\n let monthNames = (settings ? settings.monthNames : null) || _helper._defaults.monthNames;\r\n // Check whether a format character is doubled\r\n let lookAhead = function (match) {\r\n let matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) == match);\r\n if (matches) {\r\n iFormat++;\r\n }\r\n return matches;\r\n };\r\n // Format a number, with leading zero if necessary\r\n let formatNumber = function (match, value, len) {\r\n let num = \"\" + value;\r\n if (lookAhead(match)) {\r\n while (num.length < len) {\r\n num = \"0\" + num;\r\n }\r\n }\r\n return num;\r\n };\r\n // Format a name, short or long as requested\r\n let formatName = function (match, value, shortNames, longNames) {\r\n return (lookAhead(match) ? longNames[value] : shortNames[value]);\r\n };\r\n let output = \"\";\r\n let literal = false;\r\n if (date) {\r\n for (var iFormat = 0; iFormat < format.length; iFormat++) {\r\n if (literal) {\r\n if (format.charAt(iFormat) == \"'\" && !lookAhead(\"'\")) {\r\n literal = false;\r\n } else {\r\n output += format.charAt(iFormat);\r\n }\r\n } else {\r\n switch (format.charAt(iFormat)) {\r\n case \"d\":\r\n output += formatNumber(\"d\", date.getDate(), 2);\r\n break;\r\n case \"D\":\r\n output += formatName(\"D\", date.getDay(), dayNamesShort, dayNames);\r\n break;\r\n case \"o\":\r\n output += formatNumber(\"o\",\r\n (date.getTime() - new Date(date.getFullYear(), 0, 0).getTime()) / 86400000, 3);\r\n break;\r\n case \"m\":\r\n output += formatNumber(\"m\", date.getMonth() + 1, 2);\r\n break;\r\n case \"M\":\r\n output += formatName(\"M\", date.getMonth(), monthNamesShort, monthNames);\r\n break;\r\n case \"y\":\r\n output += (lookAhead(\"y\") ? date.getFullYear() :\r\n (date.getFullYear() % 100 < 10 ? \"0\" : \"\") + date.getFullYear() % 100);\r\n break;\r\n case \"@\":\r\n output += date.getTime();\r\n break;\r\n case \"!\":\r\n output += date.getTime() * 10000 + _helper._ticksTo1970;\r\n break;\r\n case \"'\":\r\n if (lookAhead(\"'\")) {\r\n output += \"'\";\r\n } else {\r\n literal = true;\r\n }\r\n break;\r\n default:\r\n output += format.charAt(iFormat);\r\n }\r\n }\r\n }\r\n }\r\n return output;\r\n }\r\n\r\n public static formatTime(value: Date, inputMode: \"HourMinute\" | \"HourMinuteSecond\"): string {\r\n if (inputMode === \"HourMinute\") {\r\n return value ? (pad(value.getHours()) + \":\" + pad(value.getMinutes())) : \"\";\r\n } else if (inputMode === \"HourMinuteSecond\") {\r\n return value ? (pad(value.getHours()) + \":\" + pad(value.getMinutes()) + \":\" + pad(value.getSeconds())) : \"\";\r\n }\r\n return \"\";\r\n }\r\n\r\n public static now(): Date {\r\n return new Date();\r\n }\r\n\r\n public static addSeconds(d, seconds): Date {\r\n const future = new Date(d);\r\n future.setSeconds(d.getSeconds() + seconds);\r\n return future;\r\n }\r\n\r\n public static addMinutes(d, minutes): Date {\r\n const future = new Date(d);\r\n future.setMinutes(d.getMinutes() + minutes);\r\n return future;\r\n }\r\n\r\n public static addHours(d, hours): Date {\r\n const future = new Date(d);\r\n future.setHours(d.getHours() + hours);\r\n return future;\r\n }\r\n\r\n public static addDays(d, days) {\r\n const future = new Date(d);\r\n future.setDate(d.getDate() + days);\r\n return future;\r\n }\r\n\r\n public static getDaysBetween(startDate, endDate): number {\r\n return Math.round((endDate - startDate) / (1000.0 * 3600.0 * 24.0));\r\n }\r\n\r\n public static getMsBetween(startDate, endDate): number {\r\n return endDate.getTime() - startDate.getTime();\r\n }\r\n\r\n public static onlyDate(d: Date): Date {\r\n if (d == null) {\r\n return d;\r\n }\r\n const result = new Date(d);\r\n result.setHours(0, 0, 0, 0);\r\n return result;\r\n }\r\n\r\n public static equal(date1: Date, date2: Date): boolean {\r\n return (date1 && date1.getTime()) === (date2 && date2.getTime());\r\n }\r\n\r\n}\r\n\r\nfunction pad(nr: number): string {\r\n if (nr < 10) {\r\n return \"0\" + nr.toString();\r\n } else {\r\n return nr.toString();\r\n }\r\n}\r\n","import { ISlickColumn } from \"../slick.core\";\r\nimport { UILang } from \"../../core/lang\";\r\nimport { helper } from \"../../core/helper\";\r\nimport { Dialog } from \"../../ui/dialog\";\r\nimport { IJSLGrid, ISlickCreatorOptions } from \"../../index\";\r\nimport { VirtualRenderComponent } from \"../../components/virtual-render/VirtualRenderComponent\";\r\nimport { JSLRender } from \"jsl-render\";\r\n\r\nexport class ExcelFilter {\r\n\r\n private static convertRemToPixels(rem: number) {\r\n return rem * parseFloat(getComputedStyle(document.documentElement).fontSize);\r\n }\r\n\r\n public constructor(private grid: IJSLGrid<any>) {\r\n }\r\n\r\n public async show(col: ISlickColumn): Promise<void> {\r\n let values: { [key: string]: any[] } | string[];\r\n const filters = this.grid.getFilters();\r\n const currentFilters = filters.filter((f) => f.columnId === col.id);\r\n const mode = (this.grid.getOptions() as ISlickCreatorOptions).mode;\r\n\r\n const filterOptions = (this.grid.getOptions() as ISlickCreatorOptions).getFilterValues;\r\n if (filterOptions == null) {\r\n if (mode === \"client\") {\r\n // remove any filters for this column\r\n if (currentFilters.length > 0) {\r\n this.grid.clearFilter(col.id);\r\n }\r\n values = this.getDistinctValues(col);\r\n } else {\r\n throw new Error(\"getFilterValues option has to be set when filter mode = server\");\r\n }\r\n } else {\r\n values = await filterOptions(col);\r\n }\r\n\r\n let oldCheckedValues = {};\r\n if (currentFilters.length > 0) {\r\n for (const f of currentFilters) {\r\n if ((f as any)._checkedValues) {\r\n oldCheckedValues = (f as any)._checkedValues;\r\n }\r\n if (mode === \"client\") {\r\n filters.push(f);\r\n }\r\n }\r\n if (mode === \"client\") {\r\n this.grid.refreshFilters();\r\n }\r\n }\r\n\r\n const dlg = document.createElement(\"div\");\r\n dlg.classList.add(\"jsl-dialog-overlay\");\r\n dlg.innerHTML = '<div class=\"jsl-dialog\" style=\"width:50vw;min-height:50vh;\"><div class=\"dlg-header\">' + UILang.grid.Filter + '</div><div class=\"dlg-body\" style=\"max-height:calc(100vh - 7.5rem)\"></div>' +\r\n '<div class=\"dlg-footer\">' +\r\n '<button class=\"jsl-button ok-button\">' + UILang.core.Ok + \"</button>\" +\r\n (currentFilters.length > 0 ? ('<button class=\"jsl-button clear-button\">' + UILang.grid.ClearFilter + '</button>') : \"\") +\r\n '<button class=\"jsl-button close-button\">' + UILang.core.Cancel + \"</button>\" +\r\n \"</div></div>\";\r\n const dlgBody = dlg.querySelector(\".dlg-body\") as HTMLElement;\r\n\r\n const id = helper.newDomGuid();\r\n\r\n const search = document.createElement(\"div\");\r\n search.innerHTML = \"<input type='text' placeholder='\" + UILang.grid.Search + \"' />\";\r\n dlgBody.appendChild(search);\r\n\r\n const cbAllContainer = document.createElement(\"div\");\r\n const cbAll: HTMLInputElement = document.createElement(\"input\");\r\n cbAll.type = \"checkbox\";\r\n cbAll.id = id;\r\n cbAllContainer.appendChild(cbAll);\r\n const cbAllLabel: HTMLLabelElement = document.createElement(\"label\");\r\n cbAllLabel.setAttribute(\"for\", id);\r\n cbAllLabel.textContent = UILang.core.All;\r\n cbAllLabel.style.cursor = \"pointer\";\r\n cbAllLabel.style.marginLeft = \"0.2rem\";\r\n cbAllContainer.appendChild(cbAllLabel);\r\n dlgBody.appendChild(cbAllContainer);\r\n\r\n const sortedValues = [];\r\n if (Array.isArray(values)) {\r\n for (const x of values) {\r\n sortedValues.push({ id: [x], txt: x ?? \"\" });\r\n }\r\n } else {\r\n for (const o in values) {\r\n if (values.hasOwnProperty(o)) {\r\n sortedValues.push({ id: values[o], txt: o ?? \"\" });\r\n }\r\n }\r\n }\r\n // TODO: use custom comparer when available\r\n sortedValues.sort((a, b) => a.txt.toLocaleLowerCase() < b.txt.toLocaleLowerCase() ? -1 : (a.txt.toLocaleLowerCase() > b.txt.toLocaleLowerCase() ? 1 : 0));\r\n\r\n let visibleValues = sortedValues;\r\n const checkedValues = { ...oldCheckedValues };\r\n\r\n const cbContainer = document.createElement(\"div\");\r\n dlgBody.appendChild(cbContainer);\r\n const rowHeight = Math.round(ExcelFilter.convertRemToPixels(1.4));\r\n let height = sortedValues.length * rowHeight;\r\n height = Math.min(height, Math.round(window.innerHeight - ExcelFilter.convertRemToPixels(13)));\r\n const vr = new VirtualRenderComponent({\r\n data: visibleValues,\r\n renderRow: (args) => {\r\n args.container.attr.style[\"padding-left\"] = \"1rem\";\r\n args.container.children.push({\r\n tag: \"input\",\r\n attr: {\r\n id: id + \"_\" + args.index,\r\n checked: checkedValues[args.rowData.id[0]] ? \"checked\" : undefined,\r\n change: (_, node) => {\r\n if (node.dom.checked) {\r\n for (const selId of args.rowData.id) {\r\n checkedValues[selId] = true;\r\n }\r\n } else {\r\n for (const selId of args.rowData.id) {\r\n delete checkedValues[selId];\r\n }\r\n }\r\n // check if all values or none are checked\r\n const allChecked = Object.getOwnPropertyNames(checkedValues).length === sortedValues.length;\r\n const allCb: HTMLInputElement = dlgBody.querySelector(\"#\" + id) as HTMLInputElement;\r\n allCb.checked = allChecked;\r\n },\r\n type: \"checkbox\"\r\n }\r\n });\r\n args.container.children.push({\r\n tag: \"label\",\r\n attr: {\r\n for: id + \"_\" + args.index,\r\n style: \"margin-left:0.2rem;cursor:pointer\"\r\n },\r\n raw: true,\r\n content: args.rowData.txt\r\n });\r\n }\r\n ,\r\n rowHeight,\r\n style: \"height:\" + height + \"px\"\r\n });\r\n\r\n const renderer = new JSLRender(cbContainer, false);\r\n renderer.render(vr);\r\n\r\n search.addEventListener(\"input\", (evt) => {\r\n const term = ((evt.target as HTMLInputElement).value ?? \"\").toLowerCase();\r\n if (term) {\r\n visibleValues = sortedValues.filter((x) =>\r\n (x.txt ?? \"\").toLowerCase().indexOf(term) >= 0);\r\n } else {\r\n visibleValues = sortedValues;\r\n }\r\n vr.setData(visibleValues);\r\n renderer.refresh();\r\n });\r\n\r\n cbAll.addEventListener(\"change\", () => {\r\n for (let i = 0; i < visibleValues.length; i++) {\r\n // if (cbAll.checked) {\r\n // checkedValues[visibleValues[i].id] = true;\r\n // } else {\r\n // delete checkedValues[visibleValues[i].id];\r\n // }\r\n if (cbAll.checked) {\r\n for (const selId of visibleValues[i].id) {\r\n checkedValues[selId] = true;\r\n }\r\n } else {\r\n for (const selId of visibleValues[i].id) {\r\n delete checkedValues[selId];\r\n }\r\n }\r\n }\r\n renderer.refresh();\r\n });\r\n\r\n document.body.appendChild(dlg);\r\n const dlgObj = Dialog(dlg, {\r\n autoOpen: true, onClose: () => {\r\n dlg.innerHTML = \"\";\r\n dlg.parentElement.removeChild(dlg);\r\n }\r\n });\r\n\r\n const dlgOkButton = dlg.querySelector(\".dlg-footer .ok-button\");\r\n dlgOkButton.addEventListener(\"click\", (evt) => {\r\n\r\n const selLength = Object.getOwnPropertyNames(checkedValues).length;\r\n const allChecked = selLength === sortedValues.length;\r\n const anyChecked = selLength > 0;\r\n this.grid.clearFilter(col.id, true);\r\n if (!allChecked && anyChecked) {\r\n // something (but not everything) was selected -> filter\r\n const filterObject = {\r\n field: col.field, columnId: col.id, match: mode === \"server\" ? () => true : (item, field) => {\r\n return !!checkedValues[this.grid.getDataItemValueForColumn(item, col)];\r\n }\r\n };\r\n (filterObject as any)._checkedValues = checkedValues;\r\n this.grid.addFilter(filterObject, true);\r\n }\r\n this.grid.refreshFilters();\r\n dlgObj.close();\r\n });\r\n\r\n const dlgCancelButton = dlg.querySelector(\".dlg-footer .close-button\");\r\n dlgCancelButton.addEventListener(\"click\", (evt) => {\r\n dlgObj.close();\r\n });\r\n\r\n const dlgClearButton = dlg.querySelector(\".dlg-footer .clear-button\");\r\n if (dlgClearButton != null) {\r\n dlgClearButton.addEventListener(\"click\", (evt) => {\r\n this.grid.clearFilter(col.id);\r\n dlgObj.close();\r\n });\r\n }\r\n }\r\n\r\n // private updateStateOfAllCheckebox(dlgBody: HTMLElement, id: string) {\r\n // let counter = 0;\r\n // let el: HTMLInputElement;\r\n // const allCb: HTMLInputElement = dlgBody.querySelector(\"#\" + id) as HTMLInputElement;\r\n // // tslint:disable-next-line: no-conditional-assignment\r\n // while (null != (el = dlgBody.querySelector(\"#\" + id + \"_\" + counter) as HTMLInputElement)) {\r\n // if (el.parentElement.style.display !== \"none\" && !el.checked) {\r\n // allCb.checked = false;\r\n // return;\r\n // }\r\n // counter++;\r\n // }\r\n // allCb.checked = true;\r\n // }\r\n\r\n // private checkAllVisibleBoxes(el: HTMLElement, state: boolean) {\r\n // const checkboxes = el.querySelectorAll(\"input\");\r\n // for (let i = 0; i < checkboxes.length; i++) {\r\n // if (checkboxes[i].type === \"checkbox\" &&\r\n // checkboxes[i].parentElement.style.display !== \"none\") {\r\n // checkboxes[i].checked = state;\r\n // }\r\n // }\r\n // }\r\n\r\n private getDistinctValues(col: ISlickColumn): any {\r\n const textToValues = {};\r\n for (let idx = 0, len = this.grid.getDataLength(); idx < len; idx++) {\r\n const item = this.grid.getDataItem(idx);\r\n const value = this.grid.getDataItemValueForColumn(item, col);\r\n const text = this.grid.getFormattedValue(col, value, item);\r\n let valueList = textToValues[text];\r\n if (valueList == null) {\r\n valueList = textToValues[text] = [];\r\n }\r\n if (valueList.indexOf(value) < 0) {\r\n valueList.push(value);\r\n }\r\n }\r\n return textToValues;\r\n }\r\n\r\n\r\n}\r\n","\r\nexport class UILang {\r\n public static core = {\r\n All: \"All\",\r\n Ok: \"Ok\",\r\n Cancel: \"Cancel\"\r\n };\r\n\r\n public static grid = {\r\n Sort: \"Sort\",\r\n Asc: \"Ascending\",\r\n Desc: \"Descending\",\r\n Filter: \"Filter\",\r\n ClearFilter: \"Clear Filter\",\r\n Search: \"Search\"\r\n };\r\n\r\n public static dropDown = {\r\n SelectOption: \"Select an option...\",\r\n SelectOptionMultiple: \"Enter options...\",\r\n NoResults: \"No results\",\r\n NoOptions: \"No options available\",\r\n MaxSelection: \"A maximum of {max} items can be selected\",\r\n AlreadyInUse: \"That tag is already in use\",\r\n Search: \"Search ...\"\r\n };\r\n}\r\n","export abstract class helper {\r\n\r\n public static emptyGuid = \"00000000-0000-0000-0000-000000000000\";\r\n\r\n public static random() {\r\n return (Math.random() * (new Date().getTime() || 1)) % 1;\r\n }\r\n\r\n public static newGuid() {\r\n return \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g, function (c) { const r = helper.random() * 16 | 0, v = c == \"x\" ? r : r & 0x3 | 0x8; return v.toString(16); });\r\n }\r\n\r\n public static newSeqGuid() {\r\n let d = new Date().getTime().toString(16);\r\n while (d.length < 12) {\r\n d = \"0\" + d;\r\n }\r\n if (d.length > 12) {\r\n d = d.substring(0, 12);\r\n }\r\n return \"xxxxxxxx-xxxx-4xxx-yxxx-\".replace(/[xy]/g, function (c) { var r = helper.random() * 16 | 0, v = c == \"x\" ? r : r & 0x3 | 0x8; return v.toString(16); })\r\n + d;\r\n }\r\n\r\n public static newDomGuid() {\r\n return \"axxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g, function (c) { const r = helper.random() * 16 | 0, v = c == \"x\" ? r : r & 0x3 | 0x8; return v.toString(16); });\r\n }\r\n\r\n public static isObject(obj) {\r\n return obj ? Object.prototype.toString.call(obj) === \"[object Object]\" : false;\r\n }\r\n\r\n public static isGuid(id) {\r\n if (!id) {\r\n return false;\r\n }\r\n return /^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/.test(id);\r\n }\r\n\r\n public static getParams(): any {\r\n var match,\r\n pl = /\\+/g, // Regex for replacing addition symbol with a space\r\n search = /([^&=]+)=?([^&]*)/g,\r\n decode = function (s) { return decodeURIComponent(s.replace(pl, \" \")); },\r\n query = window.location.search.substring(1);\r\n\r\n var urlParams = {};\r\n while (match = search.exec(query))\r\n urlParams[decode(match[1])] = decode(match[2]);\r\n return urlParams;\r\n }\r\n\r\n public static isCyclic(o): boolean {\r\n const seenObjects = [];\r\n\r\n function detect(obj) {\r\n if (obj && typeof obj === 'object') {\r\n if (seenObjects.indexOf(obj) !== -1) {\r\n return true;\r\n }\r\n seenObjects.push(obj);\r\n for (const key in obj) {\r\n if (obj.hasOwnProperty(key) && detect(obj[key])) {\r\n return true;\r\n }\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n return detect(o);\r\n }\r\n\r\n public static correctDates(data: any): any {\r\n for (let key in data) {\r\n if (data[key] && typeof data[key] === \"object\")\r\n data[key] = helper.correctDates(data[key]);\r\n //else if (data[key] && data[key].toString().substring(0, 6) === \"/Date\\(\")\r\n // data[key] = new Date(parseInt(data[key].substr(6))+ timezone_offset);\r\n else if (data[key] && dateISO.test(data[key].toString())) {\r\n let x = (Date as any).fromString(data[key]);\r\n data[key] = new Date(x.getTime() + (x.getTimezoneOffset() * 60000));\r\n }\r\n }\r\n return data;\r\n }\r\n\r\n}\r\n\r\nvar dateISO = /\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}.*/i;\r\n\r\n(function () {\r\n\r\n var d = window.Date as any;\r\n var regexIso8601 = /^(\\d{4})-(\\d{2})-(\\d{2})((T)(\\d{2}):(\\d{2})(:(\\d{2})(\\.\\d*)?)?)?(Z)?$/;\r\n\r\n\r\n d._myparse = function (v) {\r\n\r\n if (v.charAt(v.length - 1) !== \"Z\")\r\n v += \"Z\";\r\n var m = regexIso8601.exec(v);\r\n\r\n if (m) {\r\n return new Date(Date.UTC(+m[1], +m[2] - 1, +m[3], +m[6] || 0, +m[7] || 0, +m[9] || 0, parseInt((+m[10]) * 1000 as any) || 0));\r\n //return Date.UTC(\r\n // m[1],\r\n // (m[2] || 1) - 1,\r\n // m[3] || 1,\r\n // m[4] - (m[8] ? m[8] + m[9] : 0) || 0,\r\n // m[5] - (m[8] ? m[8] + m[10] : 0) || 0,\r\n // m[6] || 0,\r\n // ((m[7] || 0) + '00').substr(0, 3)\r\n //);\r\n }\r\n\r\n return d.parse.apply(this, arguments);\r\n };\r\n\r\n\r\n d.fromString = function (v) {\r\n return d._myparse(v);\r\n };\r\n\r\n})();\r\n","import \"./dialog.css\";\r\n\r\nexport interface IDialogOptions {\r\n autoOpen?: boolean;\r\n autoFocus?: string;\r\n modal?: boolean;\r\n closeOnEscape?: boolean;\r\n OkOnEnter?: boolean;\r\n closeOnOverlayClick?: boolean;\r\n onClose?: () => void | boolean;\r\n onOpen?: () => void;\r\n}\r\n\r\nconst defaultOptions: IDialogOptions = {\r\n autoOpen: false,\r\n autoFocus: \"input,button,textarea\",\r\n closeOnOverlayClick: true,\r\n modal: true,\r\n closeOnEscape: true\r\n};\r\n\r\nexport class JSLDialog {\r\n\r\n private overlay: HTMLElement;\r\n private el: HTMLElement;\r\n\r\n private onKeydownEvent: (args: any) => void;\r\n\r\n constructor(el: HTMLElement, private options: IDialogOptions) {\r\n this.overlay = el;\r\n this.el = el.firstElementChild as HTMLElement;\r\n if (this.options.closeOnOverlayClick) {\r\n this.overlay.addEventListener(\"mousedown\", (evt) => {\r\n if (evt.target === this.overlay) {\r\n this.close();\r\n }\r\n });\r\n this.overlay.addEventListener(\"touchstart\", (evt) => {\r\n if (evt.target === this.overlay) {\r\n this.close();\r\n }\r\n });\r\n }\r\n }\r\n\r\n public open(modal?: boolean) {\r\n\r\n if ((modal !== undefined && !modal) || !this.options.modal) {\r\n this.overlay.style.background = \"transparent\";\r\n this.overlay.style.pointerEvents = \"none\";\r\n }\r\n\r\n this.overlay.style.display = \"block\";\r\n\r\n const $footer = this.el.querySelector(\".dlg-footer\");\r\n const $body = this.el.querySelector(\".dlg-body\");\r\n if ($footer != null && $body != null) {\r\n // TODO ?\r\n }\r\n if (this.options.autoFocus) {\r\n setTimeout(() => {\r\n const firstInput = this.el.querySelector(this.options.autoFocus) as HTMLInputElement;\r\n if (firstInput != null) {\r\n firstInput.focus();\r\n }\r\n }, 0);\r\n }\r\n\r\n if (this.options.closeOnEscape || this.options.OkOnEnter) {\r\n this.onKeydownEvent = (args) => {\r\n if (args.keyCode === 27 && this.options.closeOnEscape) { // escape\r\n this.close();\r\n } else if (args.keyCode === 13 && this.options.OkOnEnter) { // ok\r\n const ok_btn: HTMLButtonElement | HTMLLinkElement = this.el.querySelector(\".dlg-ok-btn\");\r\n if (ok_btn != null) {\r\n ok_btn.click();\r\n }\r\n }\r\n };\r\n document.addEventListener(\"keydown\", this.onKeydownEvent);\r\n }\r\n\r\n if (this.options.onOpen) {\r\n this.options.onOpen();\r\n }\r\n }\r\n\r\n public close() {\r\n if (this.options.onClose) {\r\n if (this.options.onClose() === false) {\r\n return;\r\n }\r\n }\r\n this.overlay.style.display = \"none\";\r\n\r\n if (this.onKeydownEvent != null) {\r\n document.removeEventListener(\"keydown\", this.onKeydownEvent);\r\n }\r\n }\r\n\r\n public getOverlay() {\r\n return this.overlay;\r\n }\r\n\r\n}\r\n\r\nexport function Dialog(input: HTMLElement | string, options?: IDialogOptions): JSLDialog {\r\n\r\n const o = { ...defaultOptions, ...options };\r\n\r\n let el: HTMLElement;\r\n\r\n if (typeof input === \"string\") {\r\n el = document.querySelector(input);\r\n } else {\r\n el = input;\r\n }\r\n\r\n const result = new JSLDialog(el, o);\r\n\r\n if (!o.autoOpen) {\r\n el.style.display = \"none\";\r\n } else {\r\n result.open();\r\n }\r\n return result;\r\n\r\n}\r\n","import \"./VirtualRenderStyle.scss\";\r\nimport { IJSLComponent, IJSLVNode, JSLRender } from \"jsl-render\";\r\n\r\nexport interface IVirtualArg {\r\n index: number;\r\n rowData: any;\r\n container: IJSLVNode;\r\n}\r\n\r\nexport interface IVirtualRenderOptions {\r\n data: any[];\r\n renderRow: (args: IVirtualArg) => string | IJSLVNode | IJSLComponent | void;\r\n rowHeight?: number;\r\n rowTag?: string;\r\n bufferSizeInPx?: number;\r\n viewportSizeInPX?: number;\r\n class?: string;\r\n style?: string;\r\n}\r\n\r\nexport class VirtualRenderComponent implements IJSLComponent {\r\n\r\n public State: {scrollPos: number, renderer?: JSLRender} = { scrollPos: 0};\r\n\r\n private options: IVirtualRenderOptions;\r\n\r\n constructor(options: IVirtualRenderOptions) {\r\n const defaultOptions: IVirtualRenderOptions = {\r\n data: null,\r\n renderRow: null,\r\n bufferSizeInPx: 200,\r\n rowHeight: 20,\r\n rowTag: \"div\",\r\n viewportSizeInPX: window.innerHeight\r\n };\r\n this.options = { ...defaultOptions, ...options };\r\n }\r\n\r\n public isEqual(node: IJSLComponent): boolean {\r\n return (this as any).__proto__ === (node as any).__proto__;\r\n }\r\n\r\n public setData(data: any[]) {\r\n this.options.data = data;\r\n }\r\n\r\n public onInit(renderer: JSLRender) {\r\n this.State.renderer = renderer;\r\n }\r\n\r\n public render(): IJSLVNode {\r\n const o = this.options;\r\n const vrBody = {\r\n tag: \"div\",\r\n attr: { class: \"v-r-child\", style: \"height:\" + (o.data.length * o.rowHeight) + \"px;position:relative\" },\r\n children: this.getChildren()\r\n };\r\n const vrContainer = {\r\n tag: \"div\", attr: {\r\n class: \"v-r-comp \" + (o.class ?? \"\"),\r\n style: \"overflow-y:auto;\" + (o.style ?? \"\"),\r\n scroll: (e, node: IJSLVNode) => {\r\n const newScrollPos = node.dom.scrollTop;\r\n if (Math.abs(this.State.scrollPos - newScrollPos) < o.bufferSizeInPx) {\r\n return false;\r\n }\r\n this.State.scrollPos = newScrollPos;\r\n vrBody.children = this.getChildren();\r\n (node.children[0] as IJSLVNode).children = [{tag: \"dummy\"}];\r\n (this.State.renderer as any).updateNode(node.children[0], vrBody);\r\n return false;\r\n }\r\n }, children: [vrBody]\r\n };\r\n return vrContainer;\r\n }\r\n\r\n // public scrollRowToTop(idx: number) {\r\n\r\n // }\r\n\r\n // public scrollRowToCenter(idx: number) {\r\n\r\n // }\r\n\r\n // public scrollRowToBottom(idx: number) {\r\n\r\n // }\r\n\r\n private getChildren() {\r\n const o = this.options;\r\n const children = [];\r\n const viewport = {\r\n top: Math.floor((this.State.scrollPos - o.bufferSizeInPx) / o.rowHeight),\r\n bottom: Math.ceil((this.State.scrollPos + o.viewportSizeInPX + o.bufferSizeInPx) / o.rowHeight)\r\n };\r\n for (let idx = viewport.top; idx < viewport.bottom; idx++) {\r\n if (idx < 0 || idx >= o.data.length) {\r\n continue;\r\n }\r\n const node: IJSLVNode = {\r\n tag: o.rowTag, attr: {\r\n style: {\r\n top: (idx * o.rowHeight) + \"px\",\r\n height: o.rowHeight + \"px\",\r\n position: \"absolute\",\r\n left: \"0\",\r\n right: \"0\"\r\n }\r\n }, children: []\r\n };\r\n const result = o.renderRow({ index: idx, container: node, rowData: o.data[idx] });\r\n if (typeof result === \"string\") {\r\n node.content = result;\r\n } else if (result != null) {\r\n node.children.push(result as (IJSLVNode | IJSLComponent));\r\n }\r\n\r\n children.push(node);\r\n }\r\n return children;\r\n }\r\n\r\n}\r\n","/**\r\n * Row Move Manager options:\r\n * cssClass: A CSS class to be added to the menu item container.\r\n * columnId: Column definition id (defaults to \"_move\")\r\n * cancelEditOnDrag: Do we want to cancel any Editing while dragging a row (defaults to false)\r\n * disableRowSelection: Do we want to disable the row selection? (defaults to false)\r\n * hideRowMoveShadow: Do we want to hide the row move shadow clone? (defaults to true)\r\n * rowMoveShadowMarginTop: When row move shadow is shown, optional margin-top (defaults to 0)\r\n * rowMoveShadowMarginLeft: When row move shadow is shown, optional margin-left (defaults to 0)\r\n * rowMoveShadowOpacity: When row move shadow is shown, what is its opacity? (defaults to 0.95)\r\n * rowMoveShadowScale: When row move shadow is shown, what is its size scale? (default to 0.75)\r\n * singleRowMove: Do we want a single row move? Setting this to false means that it's a multple row move (defaults to false)\r\n * width: Width of the column\r\n * usabilityOverride: Callback method that user can override the default behavior of the row being moveable or not\r\n *\r\n */\r\nimport \"./slick.rowmovemanager.css\";\r\nimport { jQueryReplacement, IjQueryWrapper } from \"../../core/jq\";\r\nimport { Slick } from \"../slick.core\";\r\n\r\nlet $ = jQueryReplacement;\r\n\r\n// register namespace\r\n$.deepExtend(window, {\r\n \"Slick\": {\r\n \"RowMoveManager\": RowMoveManager\r\n }\r\n});\r\n\r\nexport function RowMoveManager(options) {\r\n var _grid;\r\n var _canvas: HTMLDivElement;\r\n var _dragging;\r\n var _self = this;\r\n var _usabilityOverride = null;\r\n var _handler = new Slick.EventHandler();\r\n var _defaults = {\r\n columnId: \"_move\",\r\n cssClass: null,\r\n cancelEditOnDrag: false,\r\n disableRowSelection: false,\r\n hideRowMoveShadow: true,\r\n rowMoveShadowMarginTop: 0,\r\n rowMoveShadowMarginLeft: 0,\r\n rowMoveShadowOpacity: 0.95,\r\n rowMoveShadowScale: 0.75,\r\n singleRowMove: false,\r\n width: 40,\r\n };\r\n\r\n\r\n // user could override the expandable icon logic from within the options or after instantiating the plugin\r\n if (options && typeof options.usabilityOverride === 'function') {\r\n usabilityOverride(options.usabilityOverride);\r\n }\r\n\r\n function init(grid) {\r\n options = $.deepExtend({}, _defaults, options);\r\n _grid = grid;\r\n _canvas = _grid.getCanvasNode();\r\n _handler\r\n .subscribe(_grid.onDragInit, handleDragInit)\r\n .subscribe(_grid.onDragStart, handleDragStart)\r\n .subscribe(_grid.onDrag, handleDrag)\r\n .subscribe(_grid.onDragEnd, handleDragEnd);\r\n }\r\n\r\n function destroy() {\r\n _handler.unsubscribeAll();\r\n }\r\n\r\n function setOptions(newOptions) {\r\n options = $.shallowExtend({}, options, newOptions);\r\n }\r\n\r\n function handleDragInit(e) {\r\n // // prevent the grid from cancelling drag'n'drop by default\r\n // e.stopImmediatePropagation();\r\n }\r\n\r\n function handleDragStart(e, dd) {\r\n var cell = _grid.getCellFromEvent(e);\r\n var currentRow = cell && cell.row;\r\n var dataContext = _grid.getDataItem(currentRow);\r\n\r\n if (!checkUsabilityOverride(currentRow, dataContext, _grid)) {\r\n return;\r\n }\r\n\r\n if (options.cancelEditOnDrag && _grid.getEditorLock().isActive()) {\r\n _grid.getEditorLock().cancelCurrentEdit();\r\n }\r\n\r\n if (_grid.getEditorLock().isActive() || !isHandlerColumn(cell.cell)) {\r\n return false;\r\n }\r\n\r\n _dragging = true;\r\n e.stopImmediatePropagation();\r\n\r\n // optionally create a shadow element of the row so that we can see all the time which row exactly we're dragging\r\n if (!options.hideRowMoveShadow) {\r\n var $slickRowElm = $(_grid.getCellNode(cell.row, cell.cell)).closestClass('slick-row');\r\n if ($slickRowElm.length) {\r\n dd.clonedSlickRow = $($slickRowElm[0].cloneNode(true))\r\n .addClass('slick-reorder-shadow-row')\r\n .css(\"marginTop\", options.rowMoveShadowMarginTop || 0)\r\n .css(\"marginLeft\", options.rowMoveShadowMarginLeft || 0)\r\n .css(\"opacity\", options.rowMoveShadowOpacity || 0.95)\r\n .css(\"transform\", \"scale(\" + options.rowMoveShadowScale + \")\")\r\n .css(\"display\", \"none\")\r\n .appendTo(_canvas);\r\n }\r\n }\r\n\r\n var selectedRows = options.singleRowMove ? [cell.row] : _grid.getSelectedRows();\r\n\r\n if (selectedRows.length === 0 || selectedRows.indexOf(cell.row) === -1) {\r\n selectedRows = [cell.row];\r\n if (!options.disableRowSelection) {\r\n _grid.setSelectedRows(selectedRows);\r\n }\r\n }\r\n\r\n var rowHeight = _grid.getOptions().rowHeight;\r\n\r\n dd.selectedRows = selectedRows;\r\n\r\n const canvasWidth = _canvas.getBoundingClientRect().width;\r\n\r\n dd.selectionProxy = $(document.createElement(\"div\")) //\"<div class='slick-reorder-proxy'/>\")\r\n .addClass(\"slick-reorder-proxy\")\r\n .css(\"position\", \"absolute\")\r\n .css(\"zIndex\", \"99999\")\r\n .css(\"width\", canvasWidth) // $(_canvas).innerWidth())\r\n .css(\"height\", rowHeight * selectedRows.length)\r\n .css(\"display\", \"none\")\r\n .appendTo(_canvas);\r\n\r\n dd.guide = $(document.createElement(\"div\")) // \"<div class='slick-reorder-guide'/>\")\r\n .addClass(\"slick-reorder-guide\")\r\n .css(\"position\", \"absolute\")\r\n .css(\"zIndex\", \"99998\")\r\n .css(\"width\", canvasWidth)\r\n .css(\"top\", -1000)\r\n .appendTo(_canvas);\r\n\r\n dd.insertBefore = -1;\r\n }\r\n\r\n function handleDrag(e, dd) {\r\n if (!_dragging) {\r\n return;\r\n }\r\n \r\n // e.preventDefault();\r\n e.stopImmediatePropagation();\r\n\r\n var top = dd.pageY - $(_canvas).offset().top;\r\n dd.selectionProxy.css(\"top\", top - 5).css(\"display\", \"\"); //.show();\r\n\r\n // if the row move shadow is enabled, we'll also make it follow the mouse cursor\r\n if (dd.clonedSlickRow) {\r\n var offsetY = dd.pageY - $(_canvas).offset().top;\r\n dd.clonedSlickRow.css(\"top\", offsetY - 6).css(\"display\", \"\"); //.show();\r\n }\r\n\r\n var insertBefore = Math.max(0, Math.min(Math.round(top / _grid.getOptions().rowHeight), _grid.getDataLength()));\r\n if (insertBefore !== dd.insertBefore) {\r\n var eventData = {\r\n \"grid\": _grid,\r\n \"rows\": dd.selectedRows,\r\n \"insertBefore\": insertBefore\r\n };\r\n\r\n if (_self.onBeforeMoveRows.notify(eventData) === false) {\r\n dd.canMove = false;\r\n } else {\r\n dd.canMove = true;\r\n }\r\n\r\n // if there's a UsabilityOverride defined, we also need to verify that the condition is valid\r\n if (_usabilityOverride && dd.canMove) {\r\n var insertBeforeDataContext = _grid.getDataItem(insertBefore);\r\n dd.canMove = checkUsabilityOverride(insertBefore, insertBeforeDataContext, _grid);\r\n }\r\n\r\n // if the new target is possible we'll display the dark blue bar (representin the acceptability) at the target position\r\n // else it won't show up (it will be off the screen)\r\n if (!dd.canMove) {\r\n dd.guide.css(\"top\", -1000);\r\n } else {\r\n dd.guide.css(\"top\", insertBefore * _grid.getOptions().rowHeight);\r\n }\r\n\r\n dd.insertBefore = insertBefore;\r\n }\r\n }\r\n\r\n function handleDragEnd(e, dd) {\r\n if (!_dragging) {\r\n return;\r\n }\r\n _dragging = false;\r\n e.stopImmediatePropagation();\r\n\r\n if (dd.guide == null) {\r\n console.log(\"dd.guide\")\r\n } else\r\n dd.guide.remove();\r\n if (dd.selectionProxy == null) {\r\n console.log(\" dd.selectionProxy\")\r\n } else\r\n dd.selectionProxy.remove();\r\n if (dd.clonedSlickRow) {\r\n dd.clonedSlickRow.remove();\r\n dd.clonedSlickRow = null;\r\n }\r\n\r\n if (dd.canMove) {\r\n var eventData = {\r\n \"grid\": _grid,\r\n \"rows\": dd.selectedRows,\r\n \"insertBefore\": dd.insertBefore\r\n };\r\n // TODO: _grid.remapCellCssClasses ?\r\n _self.onMoveRows.notify(eventData);\r\n }\r\n }\r\n\r\n function getColumnDefinition() {\r\n return {\r\n id: options.columnId || \"_move\",\r\n name: \"\",\r\n field: \"move\",\r\n width: options.width || 40,\r\n behavior: \"selectAndMove\",\r\n selectable: false,\r\n resizable: false,\r\n cssClass: options.cssClass,\r\n formatter: moveIconFormatter\r\n };\r\n }\r\n\r\n function moveIconFormatter(row, cell, value, columnDef, dataContext, grid) {\r\n if (!checkUsabilityOverride(row, dataContext, grid)) {\r\n return null;\r\n } else {\r\n return { addClasses: \"cell-reorder dnd\", text: \"\" };\r\n }\r\n }\r\n\r\n function checkUsabilityOverride(row, dataContext, grid) {\r\n if (typeof _usabilityOverride === 'function') {\r\n return _usabilityOverride(row, dataContext, grid);\r\n }\r\n return true;\r\n }\r\n\r\n /**\r\n * Method that user can pass to override the default behavior or making every row moveable.\r\n * In order word, user can choose which rows to be an available as moveable (or not) by providing his own logic show/hide icon and usability.\r\n * @param overrideFn: override function callback\r\n */\r\n function usabilityOverride(overrideFn) {\r\n _usabilityOverride = overrideFn;\r\n }\r\n\r\n function isHandlerColumn(columnIndex) {\r\n return /move|selectAndMove/.test(_grid.getColumns()[columnIndex].behavior);\r\n }\r\n\r\n $.shallowExtend(this, {\r\n \"onBeforeMoveRows\": new Slick.Event(),\r\n \"onMoveRows\": new Slick.Event(),\r\n\r\n \"init\": init,\r\n \"destroy\": destroy,\r\n \"getColumnDefinition\": getColumnDefinition,\r\n \"setOptions\": setOptions,\r\n \"usabilityOverride\": usabilityOverride,\r\n \"isHandlerColumn\": isHandlerColumn,\r\n \"pluginName\": \"RowMoveManager\"\r\n });\r\n}\r\n// })(jQuery);","import \"./ext.overlay.css\";\r\nimport { jQueryReplacement, IjQueryWrapper } from \"../../core/jq\";\r\nimport { Slick } from \"../slick.core\";\r\nimport { Moveable, IMoveEventArg } from \"../../interaction/moveable\";\r\nimport { EventHandler } from \"../../interaction/eventhandler\";\r\nimport { IJSLGrid } from \"../slick.creator\";\r\n\r\n\r\nconst selectinOverlayWidth = 1;\r\n\r\nlet $ = jQueryReplacement;\r\n\r\n// register namespace\r\n$.deepExtend(window, {\r\n \"Ext\": {\r\n \"Plugins\": {\r\n \"Overlays\": Overlays\r\n }\r\n }\r\n});\r\n\r\n\r\nexport function Overlays(options) {\r\n var $headerOverlay: IjQueryWrapper;\r\n var $rowOverlay: IjQueryWrapper;\r\n var selectionOverlay;\r\n\r\n var currentColumn;\r\n var handleDragging;\r\n var grid: IJSLGrid<any>;\r\n var self = this;\r\n var handler = new Slick.EventHandler();\r\n var dragDecorator;\r\n\r\n var defaults = {\r\n buttonCssClass: null,\r\n buttonImage: \"../images/down.gif\",\r\n decoratorWidth: 2\r\n };\r\n\r\n function init(g) {\r\n options = $.deepExtend({}, defaults, options);\r\n grid = g;\r\n\r\n dragDecorator = overlayRangeDecorator(grid);\r\n\r\n $headerOverlay = createRowHeaderOverlay(100);\r\n $rowOverlay = createRowHeaderOverlay(100);\r\n\r\n selectionOverlay = createSelectionOverlay();\r\n\r\n handler.subscribe(grid.onActiveCellChanged, activeCellChanged)\r\n .subscribe(grid.onColumnsResized, columnResized)\r\n .subscribe(grid.onScroll, gridScrolled);\r\n }\r\n\r\n function destroy() {\r\n handler.unsubscribeAll();\r\n }\r\n\r\n function createRowHeaderOverlay(zIndex) {\r\n return $(document.createElement(\"div\"))\r\n .addClass(\"header-overlay\")\r\n .css(\"position\", \"absolute\")\r\n .css(\"z-index\", zIndex)\r\n .appendTo(grid.getContainerNode());\r\n }\r\n\r\n function createSelectionOverlay() {\r\n var canvas = grid.getCanvasNode();\r\n var overlay = new Overlay(canvas, true);\r\n return overlay;\r\n }\r\n\r\n function activeCellChanged(e, args) {\r\n dragDecorator.hide();\r\n\r\n moveSelectionOverlay(e, args);\r\n moveHeaderRowOverlays(e, args);\r\n }\r\n\r\n function columnResized(e, args) {\r\n moveHeaderRowOverlays(e, args);\r\n moveSelectionOverlay(e, args);\r\n }\r\n\r\n function gridScrolled(e, args) {\r\n moveHeaderRowOverlays(e, args);\r\n moveSelectionOverlay(e, args);\r\n }\r\n\r\n function moveHeaderRowOverlays(e, args) {\r\n if (typeof args.cell != 'undefined') {\r\n currentColumn = args.cell;\r\n } else {\r\n if (!currentColumn) {\r\n return;\r\n }\r\n }\r\n\r\n if (!grid.getActiveCell()) {\r\n $rowOverlay.css(\"display\", \"none\");\r\n return;\r\n }\r\n\r\n $rowOverlay.css(\"display\", \"\");\r\n\r\n var headerHeight: number = grid.getContainerNode().querySelector('.slick-header').getBoundingClientRect().height;\r\n var cellPosition = grid.getActiveCellPosition();\r\n var gridPosition = grid.getGridPosition();\r\n\r\n $rowOverlay.css(\"display\", cellPosition.visible ? \"\" : \"none\");\r\n $headerOverlay.css(\"display\", cellPosition.visible ? \"\" : \"none\");\r\n\r\n var headerWidth = cellPosition.width;\r\n\r\n $headerOverlay.css(\"left\", (cellPosition.left - gridPosition.left) + \"px\").css(\r\n \"top\", (headerHeight - 2) + \"px\").css(\r\n \"width\", headerWidth + \"px\").css(\r\n \"height\", \"2px\");\r\n\r\n $rowOverlay.css(\r\n \"left\", \"0px\").css(\r\n \"top\", (cellPosition.top - gridPosition.top) + \"px\").css(\r\n \"width\", \"2px\").css(\r\n \"height\", cellPosition.height + \"px\");\r\n }\r\n\r\n function moveSelectionOverlay(e, args) {\r\n var activeCell = grid.getActiveCell();\r\n\r\n if (!activeCell) {\r\n selectionOverlay.toggle(false);\r\n return;\r\n }\r\n\r\n var column = grid.getColumns()[activeCell.cell];\r\n selectionOverlay.toggle(true);\r\n\r\n // Only show the handle if the cell is editable\r\n selectionOverlay.handle.style.display = (column.editor != null && !column.readonly && grid.getOptions().editable) ? \"\" : \"none\";\r\n\r\n var position = grid.getCellNodeBox(activeCell.row, activeCell.cell);\r\n\r\n // Not coming through on the property so re-calculated\r\n position.height = position.bottom - position.top;\r\n position.width = position.right - position.left;\r\n\r\n selectionOverlay.$left.css({\r\n left: (position.left - selectinOverlayWidth) + \"px\",\r\n top: position.top + \"px\",\r\n width: selectinOverlayWidth + \"px\",\r\n height: position.height + \"px\"\r\n });\r\n\r\n selectionOverlay.$right.css({\r\n left: (position.left + position.width) + \"px\",\r\n top: position.top + \"px\",\r\n width: selectinOverlayWidth + \"px\",\r\n height: position.height + \"px\"\r\n });\r\n\r\n selectionOverlay.$top.css({\r\n left: (position.left - selectinOverlayWidth) + \"px\",\r\n top: (position.top - selectinOverlayWidth) + \"px\",\r\n width: (position.width + selectinOverlayWidth + 1) + \"px\",\r\n height: selectinOverlayWidth + \"px\"\r\n });\r\n\r\n selectionOverlay.$bottom.css({\r\n left: (position.left - selectinOverlayWidth) + \"px\",\r\n top: (position.top + position.height) + \"px\",\r\n width: (position.width + selectinOverlayWidth + 1) + \"px\",\r\n height: selectinOverlayWidth + \"px\"\r\n });\r\n\r\n selectionOverlay.handle.style.left = (position.left + position.width - 4) + \"px\";\r\n selectionOverlay.handle.style.top = (position.top + position.height - 4) + \"px\";\r\n\r\n // console.log(\"row: \" + activeCell.row + \" - cell: \"+ activeCell.cell);\r\n // console.log(\"container: \" + grid.getCanvasNode(activeCell.row, activeCell.cell).className);\r\n selectionOverlay.moveToContainer(grid.getCanvasNode(activeCell.cell, activeCell.row));\r\n }\r\n\r\n var dd_range;\r\n\r\n function handleOverlayDragStart(e: IMoveEventArg) {\r\n\r\n var cell = grid.getActiveCell();\r\n if (grid.canCellBeSelected(cell.row, cell.cell)) {\r\n handleDragging = true;\r\n }\r\n\r\n if (!handleDragging) {\r\n e.cancelEvent();\r\n return null;\r\n }\r\n\r\n grid.focus();\r\n\r\n dd_range = { start: cell, end: {} };\r\n\r\n return dragDecorator.show(new Slick.Range(cell.row, cell.cell));\r\n }\r\n\r\n function handleOverlayDrag(e: IMoveEventArg) {\r\n\r\n if (!handleDragging) {\r\n return;\r\n }\r\n\r\n var end = {\r\n cell: dd_range.start.cell, row: grid.getCellFromPoint(\r\n 0,\r\n e.y /* + grid.getCanvasNode().scrollTop*/).row - 1\r\n };\r\n\r\n if (!grid.canCellBeSelected(end.row, end.cell)) {\r\n e.cancelEvent(); // ?\r\n return;\r\n }\r\n\r\n dd_range.end = end;\r\n\r\n dragDecorator.show(new Slick.Range(\r\n dd_range.start.row,\r\n dd_range.start.cell,\r\n end.row,\r\n dd_range.start.cell));\r\n }\r\n\r\n function handleOverlayDragEnd(e: IMoveEventArg) {\r\n\r\n if (!handleDragging) {\r\n return;\r\n }\r\n\r\n handleDragging = false;\r\n\r\n selectionOverlay.handle.style.display = \"none\";\r\n\r\n self.onFillUpDown.notify({ \"grid\": grid, \"range\": dragDecorator.getSelectedRange(), direction: dd_range.end.row >= dd_range.start.row ? \"down\" : \"up\" }, e, self);\r\n\r\n }\r\n\r\n function Overlay(target: HTMLElement, withHandel?: boolean, prefix?: string) {\r\n var className = (prefix || '') + 'cell-overlay';\r\n\r\n this.$left = $(document.createElement(\"div\"))\r\n .addClass(className)\r\n .addClass('left')\r\n .appendTo(target);\r\n\r\n this.$right = $(document.createElement(\"div\"))\r\n .addClass(className)\r\n .addClass('right')\r\n .appendTo(target);\r\n\r\n this.$top = $(document.createElement(\"div\"))\r\n .addClass(className)\r\n .addClass('top')\r\n .appendTo(target);\r\n\r\n this.$bottom = $(document.createElement(\"div\"))\r\n .addClass(className)\r\n .addClass('bottom')\r\n .appendTo(target);\r\n\r\n if (withHandel) {\r\n this.handle = document.createElement(\"div\");\r\n this.handle.classList.add(\"handle-overlay\");\r\n target.appendChild(this.handle);\r\n \r\n const gridContainer: HTMLElement = target.closest(\".slickgrid\");\r\n const viewports = gridContainer.querySelectorAll(\".grid-canvas\");\r\n for (let idx = 0; idx < viewports.length; idx++) {\r\n console.log(idx);\r\n Moveable(viewports[idx] as HTMLElement, { // target, {\r\n selector: \".handle-overlay\",\r\n direction: \"y\",\r\n gridY: grid.getOptions().rowHeight,\r\n containInParent: false,\r\n onStart: EventHandler.Create((e: IMoveEventArg) => {\r\n handleOverlayDragStart(e);\r\n }),\r\n onMove: EventHandler.Create((e: IMoveEventArg) => {\r\n handleOverlayDrag(e);\r\n }),\r\n onStop: EventHandler.Create((e: IMoveEventArg) => {\r\n handleOverlayDragEnd(e);\r\n })\r\n });\r\n }\r\n }\r\n\r\n this.moveToContainer = function (container) {\r\n this.$left.appendTo(container);\r\n this.$right.appendTo(container);\r\n this.$top.appendTo(container);\r\n this.$bottom.appendTo(container);\r\n if (this.handle) {\r\n $(this.handle).appendTo(container);\r\n }\r\n };\r\n\r\n this.toggle = function (showOrHide) {\r\n\r\n this.$left.css(\"display\", showOrHide ? \"\" : \"none\");\r\n this.$right.css(\"display\", showOrHide ? \"\" : \"none\");\r\n this.$top.css(\"display\", showOrHide ? \"\" : \"none\");\r\n this.$bottom.css(\"display\", showOrHide ? \"\" : \"none\");\r\n if (this.handle) {\r\n this.handle.style.display = showOrHide ? \"\" : \"none\";\r\n }\r\n };\r\n }\r\n\r\n function overlayRangeDecorator(targetGrid) {\r\n var decorator;\r\n var r;\r\n\r\n function show(range) {\r\n r = range;\r\n if (!decorator) {\r\n decorator = new Overlay(grid.getCanvasNode(range.fromCell, range.fromRow), false, 'selection-');\r\n }\r\n\r\n var from = targetGrid.getCellNodeBox(range.fromRow, range.fromCell);\r\n var to = targetGrid.getCellNodeBox(range.toRow, range.toCell);\r\n\r\n decorator.$left.css({\r\n top: from.top - 2,\r\n left: from.left - 2,\r\n height: to.bottom - from.top + 2,\r\n width: options.decoratorWidth\r\n });\r\n\r\n decorator.$right.css({\r\n top: from.top - 2,\r\n left: to.right - 1,\r\n height: to.bottom - from.top + 2,\r\n width: options.decoratorWidth\r\n });\r\n\r\n decorator.$top.css({\r\n top: from.top - 2,\r\n left: to.left - 1,\r\n height: options.decoratorWidth,\r\n width: to.right - from.left + 2\r\n });\r\n\r\n decorator.$bottom.css({\r\n top: to.bottom - 1,\r\n left: from.left - 2,\r\n height: options.decoratorWidth,\r\n width: to.right - from.left + 3\r\n });\r\n\r\n return decorator;\r\n }\r\n\r\n function getSelectedRange() {\r\n return r;\r\n }\r\n\r\n function hide() {\r\n if (decorator) {\r\n decorator.toggle(false);\r\n decorator = null;\r\n }\r\n }\r\n\r\n return {\r\n hide: hide,\r\n show: show,\r\n getSelectedRange: getSelectedRange\r\n };\r\n }\r\n\r\n $.shallowExtend(this, {\r\n \"init\": init,\r\n \"destroy\": destroy,\r\n \"onFillUpDown\": new Slick.Event()\r\n });\r\n}\r\n","import \"./moveable.css\";\r\nimport \"../core/polyfills\";\r\nimport { EventHandler } from \"./eventhandler\";\r\n\r\nexport interface IMoveEventArg {\r\n x: number;\r\n y: number;\r\n target: HTMLElement;\r\n evt: MouseEvent;\r\n cancelEvent: () => void;\r\n}\r\n\r\nexport interface IMoveableOptions {\r\n moveDelta?: number;\r\n onStart?: EventHandler<IMoveEventArg>;\r\n onStop?: EventHandler<IMoveEventArg>;\r\n onMove?: EventHandler<IMoveEventArg>;\r\n gridX?: number;\r\n gridY?: number;\r\n selector?: string;\r\n handleSelector?: string; // TODO!!!\r\n direction?: \"x\" | \"y\" | \"both\";\r\n containInParent?: boolean;\r\n}\r\n\r\nconst defaultOptions: IMoveableOptions = {\r\n onStart: new EventHandler<IMoveEventArg>(),\r\n onStop: new EventHandler<IMoveEventArg>(),\r\n onMove: new EventHandler<IMoveEventArg>(),\r\n direction: \"both\",\r\n moveDelta: 0,\r\n containInParent: true\r\n};\r\n\r\nexport class MoveableContainer {\r\n\r\n private element: HTMLElement;\r\n\r\n private resizeX: boolean = false;\r\n private resizeY: boolean = false;\r\n\r\n private initialX: number = null;\r\n private initialY: number = null;\r\n\r\n private startSize: { x: number, y: number } = { x: null, y: null };\r\n\r\n constructor(private container: HTMLElement,\r\n private options: IMoveableOptions) {\r\n if (options.direction === \"x\" || options.direction === \"both\") {\r\n this.resizeX = true;\r\n }\r\n if (options.direction === \"y\" || options.direction === \"both\") {\r\n this.resizeY = true;\r\n }\r\n this.init();\r\n }\r\n\r\n private init(): void {\r\n this.container.addEventListener(\"mousedown\", this.mouseDownContainer, false);\r\n this.container.addEventListener(\"touchstart\", this.mouseDownContainer, false);\r\n }\r\n\r\n\r\n private mouseDownContainer = (evt: MouseEvent) => {\r\n\r\n const target: HTMLElement = evt.target as HTMLElement;\r\n let directChild = target;\r\n while (directChild.parentElement != null && directChild.parentElement !== this.container) {\r\n if (this.options.selector != null && directChild.matches(this.options.selector)) {\r\n break;\r\n }\r\n directChild = directChild.parentElement;\r\n }\r\n if (directChild.parentElement == null) {\r\n return;\r\n }\r\n if (this.options.selector != null && !directChild.matches(this.options.selector)) {\r\n return;\r\n }\r\n\r\n this.element = directChild;\r\n let canceled = false;\r\n const args = {\r\n evt,\r\n target: this.element,\r\n x: this.element.offsetLeft,\r\n y: this.element.offsetTop,\r\n cancelEvent: () => { canceled = true; }\r\n };\r\n this.options.onStart.notify(args);\r\n if (canceled) {\r\n return;\r\n }\r\n\r\n evt.preventDefault();\r\n evt.stopPropagation();\r\n evt.stopImmediatePropagation();\r\n\r\n this.initialX = this.extractArg<number>(evt, \"clientX\") - this.element.offsetLeft;\r\n this.initialY = this.extractArg<number>(evt, \"clientY\") - this.element.offsetTop;\r\n\r\n // register event listeners\r\n window.addEventListener(\"mousemove\", this.mouseMove, false);\r\n window.addEventListener(\"mouseup\", this.mouseUp, false);\r\n window.addEventListener(\"touchmove\", this.mouseMove, false);\r\n window.addEventListener(\"touchend\", this.mouseUp, false);\r\n }\r\n\r\n private mouseMove = (evt: MouseEvent) => {\r\n let raiseEvt = false;\r\n\r\n let x = 0;\r\n if (this.resizeX) {\r\n const val: number = this.extractArg<number>(evt, \"clientX\");\r\n\r\n if (this.startSize != null && this.startSize.x == null) {\r\n this.startSize.x = val;\r\n }\r\n if (this.startSize == null || Math.abs(this.startSize.x - val) >= this.options.moveDelta) {\r\n //if (!this.options.gridX || Math.round(val) % this.options.gridX === 0) {\r\n x = val - this.initialX;\r\n if (this.options.gridX) {\r\n x = Math.round(x / this.options.gridX) * this.options.gridX;\r\n }\r\n if (this.options.containInParent) {\r\n if (x < 0) {\r\n x = 0;\r\n }\r\n const maxX = this.container.clientWidth - this.element.offsetWidth;\r\n if (x > maxX) {\r\n x = maxX;\r\n }\r\n }\r\n this.element.style.left = x + \"px\";\r\n raiseEvt = true;\r\n this.startSize = null;\r\n //}\r\n }\r\n }\r\n let y = 0;\r\n if (this.resizeY) {\r\n const val: number = this.extractArg<number>(evt, \"clientY\");\r\n if (this.startSize != null && this.startSize.y == null) {\r\n this.startSize.y = val;\r\n }\r\n if (this.startSize == null || Math.abs(this.startSize.y - val) >= this.options.moveDelta) {\r\n //if (!this.options.gridY || Math.round(val) % this.options.gridY === 0) {\r\n y = val - this.initialY;\r\n if (this.options.gridY) {\r\n y = Math.round(y / this.options.gridY) * this.options.gridY;\r\n }\r\n if (y < 0) {\r\n y = 0;\r\n }\r\n const maxY = this.container.clientHeight - this.element.offsetHeight;\r\n if (y > maxY) {\r\n y = maxY;\r\n }\r\n this.element.style.top = y + \"px\";\r\n raiseEvt = true;\r\n this.startSize = null;\r\n //}\r\n }\r\n }\r\n if (raiseEvt) {\r\n this.options.onMove.notify({\r\n evt,\r\n target: this.element,\r\n x,\r\n y,\r\n cancelEvent: () => { }\r\n });\r\n }\r\n }\r\n\r\n private mouseUp = (evt: MouseEvent) => {\r\n window.removeEventListener(\"mousemove\", this.mouseMove, false);\r\n window.removeEventListener(\"mouseup\", this.mouseUp, false);\r\n window.removeEventListener(\"touchmove\", this.mouseMove, false);\r\n window.removeEventListener(\"touchend\", this.mouseUp, false);\r\n this.options.onStop.notify({\r\n evt,\r\n target: this.element,\r\n x: this.element.offsetLeft,\r\n y: this.element.offsetTop,\r\n cancelEvent: () => { }\r\n });\r\n this.startSize = { x: null, y: null };\r\n }\r\n\r\n private extractArg<T>(evt: any, key: string): T {\r\n return evt[key] != null ? evt[key] : (evt.touches.length > 0 ? evt.touches : evt.changedTouches)[0][key];\r\n }\r\n\r\n}\r\n\r\nexport function Moveable(selector: HTMLElement | string, options?: IMoveableOptions): MoveableContainer {\r\n return new MoveableContainer(typeof selector === \"string\" ?\r\n document.querySelector(selector) :\r\n selector,\r\n { ...defaultOptions, ...options });\r\n}\r\n","/*\r\n * Contains basic SlickGrid editors.\r\n */\r\n\r\nimport { numeric } from \"../core/numeric\";\r\nimport { handleKeydownLRNav, handleKeydownLRNoNav } from \"./slick.editors.nav\";\r\n\r\nexport function TextEditor(args) {\r\n var input: HTMLInputElement;\r\n var defaultValue;\r\n var scope = this;\r\n\r\n this.init = function () {\r\n var navOnLR = args.grid.getOptions().editorCellNavOnLRKeys;\r\n input = document.createElement(\"input\");\r\n input.type = \"text\";\r\n input.className = \"editor-text\";\r\n if (args.column.maxLength > 0) {\r\n input.maxLength = args.column.maxLength;\r\n }\r\n input.addEventListener(\"keydown\", navOnLR ? handleKeydownLRNav : handleKeydownLRNoNav);\r\n args.container.appendChild(input);\r\n input.focus();\r\n input.select();\r\n };\r\n\r\n this.destroy = function () {\r\n input.parentElement.removeChild(input);\r\n };\r\n\r\n this.focus = function () {\r\n input.focus();\r\n };\r\n\r\n this.getValue = function () {\r\n return input.value;\r\n };\r\n\r\n this.setValue = function (val) {\r\n input.value = val;\r\n };\r\n\r\n this.loadValue = function (item) {\r\n defaultValue = item[args.column.field] || \"\";\r\n input.value = defaultValue;\r\n input.defaultValue = defaultValue;\r\n input.select();\r\n };\r\n\r\n this.serializeValue = function () {\r\n return input.value;\r\n };\r\n\r\n this.applyValue = function (item, state) {\r\n item[args.column.field] = state;\r\n };\r\n\r\n this.isValueChanged = function () {\r\n return (!(input.value == \"\" && defaultValue == null)) && (input.value != defaultValue);\r\n };\r\n\r\n this.validate = function () {\r\n if (args.column.validator) {\r\n var validationResults = args.column.validator(input.value);\r\n if (!validationResults.valid) {\r\n return validationResults;\r\n }\r\n }\r\n\r\n return {\r\n valid: true,\r\n msg: null\r\n };\r\n };\r\n\r\n this.init();\r\n}\r\n\r\nexport function MultiLineTextEditor(args) {\r\n var input: HTMLTextAreaElement;\r\n var defaultValue;\r\n var scope = this;\r\n\r\n this.init = function () {\r\n var navOnLR = args.grid.getOptions().editorCellNavOnLRKeys;\r\n input = document.createElement(\"textarea\");\r\n if (args.column.maxLength > 0) {\r\n input.maxLength = args.column.maxLength;\r\n }\r\n input.className = \"editor-text\";\r\n input.addEventListener(\"keydown\", navOnLR ? handleKeydownLRNav : handleKeydownLRNoNav);\r\n args.container.appendChild(input);\r\n input.focus();\r\n input.select();\r\n };\r\n\r\n this.destroy = function () {\r\n input.parentElement.removeChild(input);\r\n };\r\n\r\n this.focus = function () {\r\n input.focus();\r\n };\r\n\r\n this.getValue = function () {\r\n return input.value;\r\n };\r\n\r\n this.setValue = function (val) {\r\n input.value = val;\r\n };\r\n\r\n this.loadValue = function (item) {\r\n defaultValue = item[args.column.field] || \"\";\r\n input.value = defaultValue;\r\n input.defaultValue = defaultValue;\r\n input.select();\r\n };\r\n\r\n this.serializeValue = function () {\r\n return input.value;\r\n };\r\n\r\n this.applyValue = function (item, state) {\r\n item[args.column.field] = state;\r\n };\r\n\r\n this.isValueChanged = function () {\r\n return (!(input.value == \"\" && defaultValue == null)) && (input.value != defaultValue);\r\n };\r\n\r\n this.validate = function () {\r\n if (args.column.validator) {\r\n var validationResults = args.column.validator(input.value);\r\n if (!validationResults.valid) {\r\n return validationResults;\r\n }\r\n }\r\n\r\n return {\r\n valid: true,\r\n msg: null\r\n };\r\n };\r\n\r\n this.init();\r\n}\r\n\r\n\r\nexport function NumericEditor(args) {\r\n var input: HTMLInputElement;\r\n var defaultValue;\r\n var scope = this;\r\n\r\n this.init = function () {\r\n var navOnLR = args.grid.getOptions().editorCellNavOnLRKeys;\r\n input = document.createElement(\"input\");\r\n input.type = \"text\";\r\n input.className = \"editor-text right\";\r\n input.addEventListener(\"keydown\", navOnLR ? handleKeydownLRNav : handleKeydownLRNoNav);\r\n args.container.appendChild(input);\r\n input.focus();\r\n input.select();\r\n };\r\n\r\n this.destroy = function () {\r\n input.parentElement.removeChild(input);\r\n };\r\n\r\n this.focus = function () {\r\n input.focus();\r\n };\r\n\r\n // function getDecimalPlaces() {\r\n // // returns the number of fixed decimal places or null\r\n // var rtn = args.column.editorFixedDecimalPlaces;\r\n // if (typeof rtn == 'undefined') {\r\n // rtn = (<any>FloatEditor).DefaultDecimalPlaces;\r\n // }\r\n // return (!rtn && rtn!==0 ? null : rtn);\r\n // }\r\n\r\n this.loadValue = function (item) {\r\n defaultValue = item[args.column.field];\r\n let val_as_str = numeric.format(defaultValue, args.column.format);\r\n input.value = val_as_str;\r\n input.select();\r\n };\r\n\r\n this.serializeValue = function () {\r\n return numeric.parse(input.value);\r\n };\r\n\r\n this.applyValue = function (item, state) {\r\n item[args.column.field] = state;\r\n };\r\n\r\n this.isValueChanged = function () {\r\n return numeric.parse(input.value) !== defaultValue;\r\n };\r\n\r\n this.validate = function () {\r\n if (input.value !== \"\" && numeric.parse(input.value) === undefined) {\r\n return {\r\n valid: false,\r\n msg: \"Please enter a valid number\"\r\n };\r\n }\r\n\r\n if (args.column.validator) {\r\n var validationResults = args.column.validator(numeric.parse(input.value));\r\n if (!validationResults.valid) {\r\n return validationResults;\r\n }\r\n }\r\n\r\n return {\r\n valid: true,\r\n msg: null\r\n };\r\n };\r\n\r\n this.init();\r\n}\r\n\r\nexport function BooleanEditor(args) {\r\n var $select: HTMLSelectElement;\r\n var defaultValue;\r\n var scope = this;\r\n\r\n this.init = function () {\r\n $select = document.createElement(\"select\");\r\n $select.setAttribute(\"tabIndex\", \"0\");\r\n $select.className = \"editor-yesno\"; // <OPTION value='-'>-</OPTION>\r\n $select.innerHTML = \"<OPTION value='yes'>✔</OPTION><OPTION value='no'>-</OPTION>\";\r\n args.container.appendChild($select);\r\n args.container.style.textAlign = \"center\";\r\n $select.focus();\r\n };\r\n\r\n this.destroy = function () {\r\n $select.parentElement.removeChild($select);\r\n };\r\n\r\n this.focus = function () {\r\n $select.focus();\r\n };\r\n\r\n this.loadValue = function (item) {\r\n defaultValue = item[args.column.field];\r\n $select.value = defaultValue == null ? \"-\" : (defaultValue ? \"yes\" : \"no\");\r\n $select.focus();\r\n //$select.select();\r\n };\r\n\r\n this.serializeValue = function () {\r\n if ($select.value === \"-\") {\r\n return null;\r\n }\r\n return ($select.value === \"yes\");\r\n };\r\n\r\n this.applyValue = function (item, state) {\r\n item[args.column.field] = state;\r\n };\r\n\r\n this.isValueChanged = function () {\r\n if ($select.value === \"-\" && defaultValue == null) {\r\n return false;\r\n }\r\n var v = $select.value === \"yes\";\r\n return (v !== defaultValue);\r\n };\r\n\r\n this.validate = function () {\r\n return {\r\n valid: true,\r\n msg: null\r\n };\r\n };\r\n\r\n this.init();\r\n}\r\n\r\n","\r\n\r\nexport let keyCodes = {\r\n LEFT: 37,\r\n RIGHT: 39\r\n};\r\n\r\n/*\r\n * Depending on the value of Grid option 'editorCellNavOnLRKeys', us \r\n * Navigate to the cell on the left if the cursor is at the beginning of the input string\r\n * and to the right cell if it's at the end. Otherwise, move the cursor within the text\r\n */\r\nexport function handleKeydownLRNav(e) {\r\n var cursorPosition = e.target.selectionStart;\r\n var textLength = e.target.value.length;\r\n if ((e.which === keyCodes.LEFT && cursorPosition > 0) ||\r\n e.which === keyCodes.RIGHT && cursorPosition < textLength) {\r\n e.stopImmediatePropagation();\r\n }\r\n}\r\n\r\nexport function handleKeydownLRNoNav(e) {\r\n if (e.which === keyCodes.LEFT || e.which === keyCodes.RIGHT) {\r\n e.stopImmediatePropagation();\r\n }\r\n}\r\n","import \"./slick.tree.css\";\r\nimport { IJSLGrid, ISlickCreatorOptions } from \"./slick.creator\";\r\nimport { ISlickFormatter } from \"./slick.core\";\r\n\r\nexport interface IGridTreeOptions {\r\n parentColumn: string;\r\n indentInRem?: number;\r\n enableCollapsing?: boolean;\r\n hiddenStateField?: string;\r\n collapsedStateField?: string;\r\n expandIconHTML?: string;\r\n collapseIconHTML?: string;\r\n}\r\n\r\nexport let IndentFormatter: ISlickFormatter = function (row, cell, value, columnDef, dataContext, grid): string {\r\n let result = \"\";\r\n const hierachy: GridTree<any> = (grid as any)._hierachy;\r\n if (hierachy != null) {\r\n const options = hierachy.getOptions();\r\n const level = hierachy.getLevel(dataContext);\r\n if (level > 0) {\r\n result += \"<span class='jsl-indent' style='min-width:\" + (level * hierachy.getOptions().indentInRem) + \"rem;'></span>\";\r\n }\r\n if (options.enableCollapsing) {\r\n const hasChildren = hierachy.hasChildren(dataContext);\r\n if (hasChildren) {\r\n if (dataContext[options.collapsedStateField]) {\r\n result += \"<span class='jsl-toggle'>\" + options.expandIconHTML + \"</span>\";\r\n } else {\r\n result += \"<span class='jsl-toggle'>\" + options.collapseIconHTML + \"</span>\";\r\n }\r\n } else {\r\n result += \"<span class='jsl-toggle-spacer'></span>\";\r\n }\r\n }\r\n }\r\n if (value != null) {\r\n result += (value + \"\").replace(/&/g, \"&amp;\").replace(/</g, \"&lt;\").replace(/>/g, \"&gt;\");\r\n }\r\n return result;\r\n};\r\n\r\nexport class GridTree<T> {\r\n\r\n private primaryKey: string;\r\n\r\n private options: IGridTreeOptions;\r\n\r\n constructor(private grid: IJSLGrid<T>, o: IGridTreeOptions) {\r\n this.options = {\r\n ...{\r\n enableCollapsing: true,\r\n indentInRem: 1,\r\n hiddenStateField: \"_hidden_by_h\",\r\n collapsedStateField: \"_callapsed\",\r\n expandIconHTML: \"▶\", // \"˃\",\r\n collapseIconHTML: \"▼\" // \"˅\"\r\n }, ...o\r\n };\r\n this.primaryKey = (this.grid.getOptions() as ISlickCreatorOptions).primaryKey;\r\n (grid as any)._hierachy = this;\r\n grid.refresh();\r\n this.initEvents();\r\n }\r\n\r\n public getOptions() {\r\n return this.options;\r\n }\r\n\r\n public getLevel(item: T): number {\r\n let level = 0;\r\n let parent = this.getParent(item);\r\n while (parent != null) {\r\n parent = this.getParent(parent);\r\n level++;\r\n }\r\n return level;\r\n }\r\n\r\n public getParent(item: T): T {\r\n return this.grid.dataView.getItemById(item[this.options.parentColumn]);\r\n }\r\n\r\n public hasChildren(item: T): boolean {\r\n return this.rowHasChildren(this.grid.dataView.getIdxByItem(item));\r\n }\r\n\r\n public getDirectChildren(item: T): T[] {\r\n const id = item[this.primaryKey];\r\n const result = [];\r\n const data = this.grid.getData();\r\n for (let i = 0; i < data.length; i++) {\r\n const pid = data[i][this.options.parentColumn];\r\n if (pid === id) {\r\n result.push(data[i]);\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n public getAllChildren(item: T): T[] {\r\n const parentid = item[this.primaryKey];\r\n const result = [];\r\n const data = this.grid.getData();\r\n for (let i = 0; i < data.length; i++) {\r\n if (data[i][this.options.parentColumn] === parentid) {\r\n result.push(data[i]);\r\n result.push(...this.getAllChildren(data[i]));\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n public rowHasChildren(row: number): boolean {\r\n const data = this.grid.getData();\r\n if (data.length > row + 1) {\r\n return data[row + 1][this.options.parentColumn] === data[row][this.primaryKey];\r\n }\r\n return false;\r\n }\r\n\r\n public toggleExpand(item: T): void {\r\n if (item[this.options.collapsedStateField]) {\r\n this.expand(item);\r\n } else {\r\n this.collapse(item);\r\n }\r\n }\r\n\r\n public expand(item: T): void {\r\n item[this.options.collapsedStateField] = false;\r\n const data = this.grid.getData();\r\n let i = this.grid.dataView.getIdxByItem(item);\r\n while (i < data.length) {\r\n data[i][this.options.hiddenStateField] = false;\r\n if (this.rowHasChildren(i)) {\r\n if (data[i][this.options.collapsedStateField]) {\r\n //skip children\r\n i += this.getAllChildren(data[i]).length;\r\n }\r\n }\r\n i++;\r\n }\r\n this.grid.refreshData();\r\n }\r\n\r\n public indent(rows: T[]) {\r\n const realRows = this.filterChildren(rows);\r\n const data = this.grid.getData();\r\n //get indexes of rows\r\n const indexes = [];\r\n for (let i = 0; i < realRows.length; i++) {\r\n indexes.push(this.grid.dataView.getIdxByItem(realRows[i]));\r\n }\r\n //sort indexes\r\n indexes.sort((a, b) => a > b ? 1 : (a < b ? -1 : 0));\r\n //change parents to indent rows\r\n for (let i = 0; i < indexes.length; i++) {\r\n const rowIdx = indexes[i];\r\n const parentID = data[rowIdx][this.options.parentColumn];\r\n for (let tmp = rowIdx - 1; tmp >= 0; tmp--) {\r\n if (data[tmp][this.options.parentColumn] === parentID) {\r\n data[rowIdx][this.options.parentColumn] = data[tmp][this.primaryKey];\r\n break;\r\n }\r\n }\r\n }\r\n this.grid.refreshData();\r\n }\r\n\r\n public outdent(rows: T[]) {\r\n const rows2 = this.filterChildren(rows);\r\n const data = this.grid.getData();\r\n for (let i = 0; i < rows2.length; i++) {\r\n const row = rows2[i];\r\n const oldparent = row[this.options.parentColumn];\r\n if (oldparent) {\r\n const newparent = data[this.grid.dataView.getIdxById(oldparent)][this.options.parentColumn];\r\n row[this.options.parentColumn] = newparent;\r\n //make all subsequent items with same ParentID have current row as new parentid\r\n let idx = this.grid.dataView.getIdxById(row[this.primaryKey]);\r\n while (++idx < data.length) {\r\n if (data[idx][this.options.parentColumn] === oldparent) {\r\n data[idx][this.options.parentColumn] = row[this.primaryKey];\r\n }\r\n //TODO: optimize -> break sooner\r\n }\r\n }\r\n }\r\n this.grid.refreshData();\r\n }\r\n\r\n public filterChildren(rows: T[]): T[] {\r\n const result = [];\r\n\r\n const dict: any = {};\r\n\r\n for (let i = 0; i < rows.length; i++) {\r\n dict[rows[i][this.primaryKey]] = true;\r\n }\r\n\r\n for (let i = 0; i < rows.length; i++) {\r\n const row = rows[i];\r\n const parentid = row[this.options.parentColumn];\r\n if (!parentid || !dict[parentid]) {\r\n result.push(row);\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n public collapse(item: T): void {\r\n item[this.options.collapsedStateField] = true;\r\n const children = this.getAllChildren(item);\r\n for (let i = 0; i < children.length; i++) {\r\n children[i][this.options.hiddenStateField] = true;\r\n }\r\n this.grid.refreshData();\r\n }\r\n\r\n private initEvents() {\r\n // collapse / expand click events\r\n if (this.options.enableCollapsing) {\r\n this.grid.onClick.subscribe((e, args) => {\r\n if (e.target.classList.contains(\"jsl-toggle\")) {\r\n e.stopImmediatePropagation();\r\n this.toggleExpand(this.grid.dataView.getItem(args.row));\r\n }\r\n });\r\n }\r\n\r\n // filters\r\n const hiddenFilter = {\r\n field: this.options.hiddenStateField,\r\n match: (itm, field) => {\r\n return !itm[this.options.hiddenStateField];\r\n }\r\n };\r\n this.grid.addFilter(hiddenFilter);\r\n\r\n }\r\n\r\n}\r\n","import { jQueryReplacement } from '../../core/jq'\r\nimport { Slick } from '../slick.core'\r\n\r\n\r\nlet $ = jQueryReplacement;\r\n\r\n// register namespace\r\n$.deepExtend(Slick, {\r\n \"CellRangeDecorator\": CellRangeDecorator\r\n});\r\n\r\n/***\r\n * Displays an overlay on top of a given cell range.\r\n *\r\n * TODO:\r\n * Currently, it blocks mouse events to DOM nodes behind it.\r\n * Use FF and WebKit-specific \"pointer-events\" CSS style, or some kind of event forwarding.\r\n * Could also construct the borders separately using 4 individual DIVs.\r\n *\r\n * @param {Grid} grid\r\n * @param {Object} options\r\n */\r\nexport function CellRangeDecorator(grid, options) {\r\n var _elem;\r\n var _defaults = {\r\n selectionCssClass: 'slick-range-decorator',\r\n selectionCss: {\r\n \"zIndex\": \"9999\",\r\n \"border\": \"2px dashed red\"\r\n },\r\n offset: {\r\n top: -1,\r\n left: -1,\r\n height: -2,\r\n width: -2\r\n }\r\n };\r\n\r\n options = $.deepExtend({}, _defaults, options);\r\n\r\n\r\n function show(range) {\r\n if (!_elem) {\r\n _elem = $(\"<div></div>\"/*, {css: options.selectionCss}*/)\r\n .addClass(options.selectionCssClass)\r\n .css(\"position\", \"absolute\")\r\n .appendTo(grid.getActiveCanvasNode());\r\n if (options.selectionCss) {\r\n for (let key in options.selectionCss) {\r\n _elem.css(key, options.selectionCss[key]);\r\n }\r\n }\r\n }\r\n\r\n var from = grid.getCellNodeBox(range.fromRow, range.fromCell);\r\n var to = grid.getCellNodeBox(range.toRow, range.toCell);\r\n _elem.css({\r\n top: from.top + options.offset.top,\r\n left: from.left + options.offset.left,\r\n height: to.bottom - from.top + options.offset.height,\r\n width: to.right - from.left + options.offset.width\r\n });\r\n\r\n return _elem;\r\n }\r\n\r\n function hide() {\r\n if (_elem) {\r\n _elem.remove();\r\n _elem = null;\r\n }\r\n }\r\n\r\n $.shallowExtend(this, {\r\n \"pluginName\": \"CellRangeDecorator\",\r\n \"show\": show,\r\n \"hide\": hide\r\n });\r\n}","import { jQueryReplacement } from '../../core/jq'\r\nimport { Slick, Range } from '../slick.core'\r\nimport { CellRangeDecorator } from './slick.cellrangedecorator';\r\n\r\nlet $ = jQueryReplacement;\r\n\r\n// register namespace\r\n$.deepExtend(window, {\r\n \"Slick\": {\r\n \"CellRangeSelector\": CellRangeSelector\r\n }\r\n});\r\n\r\nexport function CellRangeSelector(options) {\r\n var _grid;\r\n var _currentlySelectedRange;\r\n var _canvas;\r\n var _gridOptions;\r\n var _$activeCanvas;\r\n var _dragging;\r\n var _decorator;\r\n var _self = this;\r\n var _handler = new Slick.EventHandler();\r\n var _defaults = {\r\n selectionCss: {\r\n \"border\": \"2px dashed blue\"\r\n }\r\n };\r\n\r\n // Frozen row & column variables\r\n var _rowOffset;\r\n var _columnOffset;\r\n var _isRightCanvas;\r\n var _isBottomCanvas;\r\n\r\n // Scrollings\r\n var _scrollTop = 0;\r\n var _scrollLeft = 0;\r\n\r\n function init(grid) {\r\n options = $.deepExtend({}, _defaults, options);\r\n _decorator = options.cellDecorator || new CellRangeDecorator(grid, options);\r\n _grid = grid;\r\n _canvas = _grid.getCanvasNode();\r\n _gridOptions = _grid.getOptions();\r\n _handler\r\n .subscribe(_grid.onScroll, handleScroll)\r\n .subscribe(_grid.onDragInit, handleDragInit)\r\n .subscribe(_grid.onDragStart, handleDragStart)\r\n .subscribe(_grid.onDrag, handleDrag)\r\n .subscribe(_grid.onDragEnd, handleDragEnd);\r\n }\r\n\r\n function destroy() {\r\n _handler.unsubscribeAll();\r\n }\r\n\r\n function getCellDecorator() {\r\n return _decorator;\r\n }\r\n\r\n function handleScroll(e, args) {\r\n _scrollTop = args.scrollTop;\r\n _scrollLeft = args.scrollLeft;\r\n }\r\n\r\n function handleDragInit(e, dd) {\r\n // Set the active canvas node because the decorator needs to append its\r\n // box to the correct canvas\r\n _$activeCanvas = $(_grid.getActiveCanvasNode(e));\r\n\r\n var c = _$activeCanvas.offset();\r\n\r\n _rowOffset = 0;\r\n _columnOffset = 0;\r\n _isBottomCanvas = _$activeCanvas.hasClass('grid-canvas-bottom');\r\n\r\n if (_gridOptions.frozenRow > -1 && _isBottomCanvas) {\r\n _rowOffset = (_gridOptions.frozenBottom) ? $('.grid-canvas-bottom').height() : $('.grid-canvas-top').height();\r\n }\r\n\r\n _isRightCanvas = _$activeCanvas.hasClass('grid-canvas-right');\r\n\r\n if (_gridOptions.frozenColumn > -1 && _isRightCanvas) {\r\n _columnOffset = $('.grid-canvas-left').width();\r\n }\r\n\r\n // // prevent the grid from cancelling drag'n'drop by default\r\n // e.stopImmediatePropagation();\r\n }\r\n\r\n function handleDragStart(e, dd) {\r\n var cell = _grid.getCellFromEvent(e);\r\n if (_self.onBeforeCellRangeSelected.notify(cell) !== false) {\r\n if (_grid.canCellBeSelected(cell.row, cell.cell)) {\r\n _dragging = true;\r\n e.stopImmediatePropagation();\r\n }\r\n }\r\n if (!_dragging) {\r\n return;\r\n }\r\n\r\n _grid.focus();\r\n\r\n var startX = dd.startX - $(_canvas).offset().left;\r\n if (_gridOptions.frozenColumn >= 0 && _isRightCanvas) {\r\n startX += _scrollLeft;\r\n }\r\n\r\n var startY = dd.startY - $(_canvas).offset().top;\r\n if (_gridOptions.frozenRow >= 0 && _isBottomCanvas) {\r\n startY += _scrollTop;\r\n }\r\n\r\n var start = _grid.getCellFromPoint(startX, startY);\r\n\r\n dd.range = { start: start, end: {} };\r\n _currentlySelectedRange = dd.range;\r\n return _decorator.show(new Range(start.row, start.cell));\r\n }\r\n\r\n function handleDrag(e, dd) {\r\n if (!_dragging) {\r\n return;\r\n }\r\n e.stopImmediatePropagation();\r\n\r\n var end = _grid.getCellFromPoint(\r\n e.pageX - _$activeCanvas.offset().left + _columnOffset,\r\n e.pageY - _$activeCanvas.offset().top + _rowOffset\r\n );\r\n // ... frozen column(s), \r\n if (_gridOptions.frozenColumn >= 0 && (!_isRightCanvas && (end.cell > _gridOptions.frozenColumn)) || (_isRightCanvas && (end.cell <= _gridOptions.frozenColumn))) {\r\n return;\r\n }\r\n\r\n // ... or frozen row(s)\r\n if (_gridOptions.frozenRow >= 0 && (!_isBottomCanvas && (end.row >= _gridOptions.frozenRow)) || (_isBottomCanvas && (end.row < _gridOptions.frozenRow))) {\r\n return;\r\n }\r\n\r\n // ... or regular grid (without any frozen options)\r\n if (!_grid.canCellBeSelected(end.row, end.cell)) {\r\n return;\r\n }\r\n\r\n dd.range.end = end;\r\n\r\n _decorator.show(new Slick.Range(dd.range.start.row, dd.range.start.cell, end.row, end.cell));\r\n }\r\n\r\n function handleDragEnd(e, dd) {\r\n if (!_dragging) {\r\n return;\r\n }\r\n\r\n _dragging = false;\r\n e.stopImmediatePropagation();\r\n\r\n _decorator.hide();\r\n _self.onCellRangeSelected.notify({\r\n range: new Slick.Range(\r\n dd.range.start.row,\r\n dd.range.start.cell,\r\n dd.range.end.row,\r\n dd.range.end.cell\r\n )\r\n });\r\n }\r\n\r\n function getCurrentRange() {\r\n return _currentlySelectedRange;\r\n }\r\n\r\n $.shallowExtend(this, {\r\n \"init\": init,\r\n \"destroy\": destroy,\r\n \"pluginName\": \"CellRangeSelector\",\r\n\r\n \"getCellDecorator\": getCellDecorator,\r\n \"getCurrentRange\": getCurrentRange,\r\n\r\n \"onBeforeCellRangeSelected\": new Slick.Event(),\r\n \"onCellRangeSelected\": new Slick.Event()\r\n });\r\n}\r\n","import { jQueryReplacement } from '../../core/jq'\r\nimport { Slick, Range } from '../slick.core'\r\nimport { CellRangeSelector } from './slick.cellrangeselector';\r\n\r\n\r\nlet $ = jQueryReplacement;\r\n\r\n// register namespace\r\n$.deepExtend(window, {\r\n \"Slick\": {\r\n \"CellSelectionModel\": CellSelectionModel\r\n }\r\n});\r\n\r\nexport function CellSelectionModel(options?) {\r\n var _grid;\r\n var _canvas;\r\n var _ranges = [];\r\n var _self = this;\r\n var _selector;\r\n\r\n if (typeof options === \"undefined\" || typeof options.cellRangeSelector === \"undefined\") {\r\n _selector = new CellRangeSelector({\r\n \"selectionCss\": {\r\n \"border\": \"2px solid black\"\r\n }\r\n });\r\n } else {\r\n _selector = options.cellRangeSelector;\r\n }\r\n\r\n var _options;\r\n var _defaults = {\r\n selectActiveCell: true\r\n };\r\n\r\n function init(grid) {\r\n _options = $.deepExtend({}, _defaults, options);\r\n _grid = grid;\r\n _canvas = _grid.getCanvasNode();\r\n _grid.onActiveCellChanged.subscribe(handleActiveCellChange);\r\n _grid.onKeyDown.subscribe(handleKeyDown);\r\n grid.registerPlugin(_selector);\r\n _selector.onCellRangeSelected.subscribe(handleCellRangeSelected);\r\n _selector.onBeforeCellRangeSelected.subscribe(handleBeforeCellRangeSelected);\r\n }\r\n\r\n function destroy() {\r\n _grid.onActiveCellChanged.unsubscribe(handleActiveCellChange);\r\n _grid.onKeyDown.unsubscribe(handleKeyDown);\r\n _selector.onCellRangeSelected.unsubscribe(handleCellRangeSelected);\r\n _selector.onBeforeCellRangeSelected.unsubscribe(handleBeforeCellRangeSelected);\r\n _grid.unregisterPlugin(_selector);\r\n }\r\n\r\n function removeInvalidRanges(ranges) {\r\n var result = [];\r\n\r\n for (var i = 0; i < ranges.length; i++) {\r\n var r = ranges[i];\r\n if (_grid.canCellBeSelected(r.fromRow, r.fromCell) && _grid.canCellBeSelected(r.toRow, r.toCell)) {\r\n result.push(r);\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n\r\n function rangesAreEqual(range1, range2) {\r\n var areDifferent = (range1.length !== range2.length);\r\n if (!areDifferent) {\r\n for (var i = 0; i < range1.length; i++) {\r\n if (\r\n range1[i].fromCell !== range2[i].fromCell\r\n || range1[i].fromRow !== range2[i].fromRow\r\n || range1[i].toCell !== range2[i].toCell\r\n || range1[i].toRow !== range2[i].toRow\r\n ) {\r\n areDifferent = true;\r\n break;\r\n }\r\n }\r\n }\r\n return !areDifferent;\r\n }\r\n\r\n function setSelectedRanges(ranges) {\r\n // simple check for: empty selection didn't change, prevent firing onSelectedRangesChanged\r\n if ((!_ranges || _ranges.length === 0) && (!ranges || ranges.length === 0)) { return; }\r\n\r\n // if range has not changed, don't fire onSelectedRangesChanged\r\n const rangeHasChanged = !rangesAreEqual(_ranges, ranges);\r\n\r\n _ranges = removeInvalidRanges(ranges);\r\n if (rangeHasChanged) { _self.onSelectedRangesChanged.notify(_ranges); }\r\n }\r\n\r\n function getSelectedRanges() {\r\n return _ranges;\r\n }\r\n\r\n function handleBeforeCellRangeSelected(e, args) {\r\n if (_grid.getEditorLock().isActive()) {\r\n e.stopPropagation();\r\n return false;\r\n }\r\n }\r\n\r\n function handleCellRangeSelected(e, args) {\r\n _grid.setActiveCell(args.range.fromRow, args.range.fromCell, false, false, true);\r\n setSelectedRanges([args.range]);\r\n }\r\n\r\n let lastActiveCell;\r\n\r\n function handleActiveCellChange(e, args) {\r\n if (_options.selectActiveCell && args.row != null && args.cell != null) {\r\n\r\n const metaKey = e.ctrlKey || e.metaKey;\r\n if (metaKey) {\r\n const ranges = getSelectedRanges().slice();\r\n ranges.push(new Range(args.row, args.cell));\r\n setSelectedRanges(ranges);\r\n lastActiveCell = {row: args.row, cell: args.cell};\r\n } else if (e.shiftKey) {\r\n const ranges = getSelectedRanges().slice();\r\n if (ranges.length > 0) {\r\n const currentRange = ranges.pop();\r\n if (lastActiveCell == null) {\r\n lastActiveCell = {row: currentRange.fromRow, cell: currentRange.fromCell};\r\n }\r\n const newRange = new Range(Math.min(lastActiveCell.row, args.row),\r\n Math.min(lastActiveCell.cell, args.cell),\r\n Math.max(lastActiveCell.row, args.row),\r\n Math.max(lastActiveCell.cell, args.cell));\r\n ranges.push(newRange);\r\n } else {\r\n ranges.push(new Range(args.row, args.cell));\r\n lastActiveCell = {row: args.row, cell: args.cell};\r\n }\r\n setSelectedRanges(ranges);\r\n } else {\r\n setSelectedRanges([new Range(args.row, args.cell)]);\r\n lastActiveCell = {row: args.row, cell: args.cell};\r\n }\r\n } else if (!_options.selectActiveCell) {\r\n // clear the previous selection once the cell changes\r\n setSelectedRanges([]);\r\n }\r\n }\r\n\r\n function handleKeyDown(e) {\r\n /***\r\n * Кey codes\r\n * 37 left\r\n * 38 up\r\n * 39 right\r\n * 40 down\r\n */\r\n var ranges, last;\r\n var active = _grid.getActiveCell();\r\n var metaKey = e.ctrlKey || e.metaKey;\r\n if (active && e.shiftKey && !metaKey && !e.altKey &&\r\n (e.which == 37 || e.which == 39 || e.which == 38 || e.which == 40)) {\r\n\r\n ranges = getSelectedRanges().slice();\r\n if (!ranges.length)\r\n ranges.push(new Range(active.row, active.cell));\r\n\r\n // keyboard can work with last range only\r\n last = ranges.pop();\r\n\r\n // can't handle selection out of active cell\r\n if (!last.contains(active.row, active.cell))\r\n last = new Range(active.row, active.cell);\r\n\r\n var dRow = last.toRow - last.fromRow,\r\n dCell = last.toCell - last.fromCell,\r\n // walking direction\r\n dirRow = active.row == last.fromRow ? 1 : -1,\r\n dirCell = active.cell == last.fromCell ? 1 : -1;\r\n\r\n if (e.which == 37) {\r\n dCell -= dirCell;\r\n } else if (e.which == 39) {\r\n dCell += dirCell;\r\n } else if (e.which == 38) {\r\n dRow -= dirRow;\r\n } else if (e.which == 40) {\r\n dRow += dirRow;\r\n }\r\n\r\n // define new selection range\r\n var new_last = new Slick.Range(active.row, active.cell, active.row + dirRow * dRow, active.cell + dirCell * dCell);\r\n if (removeInvalidRanges([new_last]).length) {\r\n ranges.push(new_last);\r\n var viewRow = dirRow > 0 ? new_last.toRow : new_last.fromRow;\r\n var viewCell = dirCell > 0 ? new_last.toCell : new_last.fromCell;\r\n _grid.scrollRowIntoView(viewRow);\r\n _grid.scrollCellIntoView(viewRow, viewCell);\r\n }\r\n else\r\n ranges.push(last);\r\n\r\n setSelectedRanges(ranges);\r\n\r\n e.preventDefault();\r\n e.stopPropagation();\r\n }\r\n }\r\n\r\n $.shallowExtend(this, {\r\n \"getSelectedRanges\": getSelectedRanges,\r\n \"setSelectedRanges\": setSelectedRanges,\r\n\r\n \"init\": init,\r\n \"destroy\": destroy,\r\n \"pluginName\": \"CellSelectionModel\",\r\n\r\n \"onSelectedRangesChanged\": new Slick.Event()\r\n });\r\n} "],"names":[],"version":3,"file":"index.js.map"}
1
+ {"mappings":"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","sources":["grid.ts","grid/slick.core.ts","core/jq.ts","grid/slick.creator.ts","grid/slick.grid.ts","interaction/resizable.ts","core/polyfills.ts","interaction/eventhandler.ts","grid/plugins/slick.rowselectionmodel.ts","grid/slick.dataview.ts","grid/slick.groupitemmetadataprovider.ts","grid/plugins/slick.headermenu.ts","grid/plugins/slick.headerbuttons.ts","grid/slick.formatters.ts","core/numeric.ts","core/culture.ts","core/date.ts","grid/filterDialogs/excelFilter.ts","core/lang.ts","core/helper.ts","ui/dialog.ts","components/virtual-render/VirtualRenderComponent.ts","grid/plugins/slick.rowmovemanager.ts","grid/plugins/ext.overlay.ts","interaction/moveable.ts","grid/slick.editors.core.ts","grid/slick.editors.nav.ts","grid/slick.tree.ts","grid/plugins/slick.cellrangedecorator.ts","grid/plugins/slick.cellrangeselector.ts","grid/plugins/slick.cellselectionmodel.ts"],"sourcesContent":["\r\nexport * from \"./grid/slick.core\";\r\nexport * from \"./grid/slick.creator\";\r\nexport * from \"./grid/slick.dataview\";\r\nexport * from \"./grid/slick.editors.core\";\r\nexport * from \"./grid/slick.formatters\";\r\nexport * from \"./grid/slick.grid\";\r\nexport * from \"./grid/slick.groupitemmetadataprovider\";\r\nexport * from \"./grid/slick.tree\";\r\n\r\nexport * from \"./grid/plugins/slick.cellrangedecorator\";\r\nexport * from \"./grid/plugins/slick.cellrangeselector\";\r\nexport * from \"./grid/plugins/slick.cellselectionmodel\";\r\nexport * from \"./grid/plugins/slick.headermenu\";\r\nexport * from \"./grid/plugins/slick.rowselectionmodel\";\r\n","import { jQueryReplacement, IjQueryReplacement } from \"../core/jq\";\r\nimport { ISlickGrid } from \"./slick.grid\";\r\n\r\nexport interface ISlick {\r\n \"Event\": () => void;\r\n \"EventData\": () => void;\r\n \"EventHandler\": () => void;\r\n \"Range\": (fromRow: number, fromCell: number, toRow?: number, toCell?: number) => void;\r\n \"NonDataRow\": () => void;\r\n \"Group\": any;\r\n \"GroupTotals\": any;\r\n \"EditorLock\": () => void;\r\n \"GlobalEditorLock\": any;\r\n // \"TreeColumns\": (treeColumns: any) => void;\r\n \"keyCode\": any;\r\n \"preClickClassName\": string;\r\n $: IjQueryReplacement;\r\n // formatters: { [index:string] : {formatter: ISlickFormatter} }\r\n}\r\n\r\nexport interface ISlickEvent<T> {\r\n subscribe(fnc: (e, args: T) => any);\r\n notify(args: T, e);\r\n countHandlers(): number;\r\n}\r\n\r\nexport interface ISlickFormatterResult {\r\n addClasses?: string[];\r\n toolTip?: string;\r\n text?: string;\r\n}\r\n\r\nexport type ISlickFormatter = (row: number, cell: number, value: any, columnDef: ISlickColumn, dataContext: any, grid?: ISlickGrid<any>) => string | ISlickFormatterResult;\r\n\r\nexport interface ISlickColumn {\r\n id: string;\r\n field?: string;\r\n name?: string;\r\n resizable?: boolean;\r\n sortable?: boolean;\r\n minWidth?: number;\r\n width?: number;\r\n maxWidth?: number;\r\n previousWidth?: number; // only for internal use\r\n rerenderOnResize?: boolean;\r\n headerCssClass?: string;\r\n defaultSortAsc?: boolean;\r\n focusable?: boolean;\r\n selectable?: boolean;\r\n format?: string;\r\n formatter?: ISlickFormatter;\r\n cssClass?: string;\r\n columnGroup?: string; // correct?\r\n editor?: any; // TODO\r\n editorOptions?: any;\r\n readonly?: boolean;\r\n valueList?: string[] | { [key: string]: string } | Array<{text: string, value: any}>;\r\n sortByVisibleValue?: boolean;\r\n comparer?: (a: any, b: any) => 0 | 1 | -1;\r\n header?: {buttons: [{image?: string, html?: string, showOnHover?: boolean, handler: (e:any) => void, cssClass?: string, tooltip?: string, command?: string}]};\r\n filterable?: boolean;\r\n hideMenu?: boolean;\r\n toolTip?: string;\r\n maxLength?: number;\r\n alwaysRenderColumn?: boolean;\r\n asyncPostRender?: (node: HTMLElement, row: number, item: Text, column: ISlickColumn, status: boolean) => void;\r\n asyncPostRenderCleanup?: (node: HTMLElement, row: number, column: ISlickColumn) => void;\r\n cannotTriggerInsert?: boolean;\r\n groupTotalsFormatter?: (item: any, columnDef: ISlickColumn, grid: any) => string | ISlickFormatterResult;\r\n behavior?: string;\r\n}\r\n\r\n\r\nexport let Slick: ISlick = {\r\n \"Event\": Event,\r\n \"EventData\": EventData,\r\n \"EventHandler\": EventHandler,\r\n \"Range\": Range,\r\n \"NonDataRow\": NonDataItem,\r\n \"Group\": Group,\r\n \"GroupTotals\": GroupTotals,\r\n \"EditorLock\": EditorLock,\r\n\r\n /***\r\n * A global singleton editor lock.\r\n * @class GlobalEditorLock\r\n * @static\r\n * @constructor\r\n */\r\n \"GlobalEditorLock\": new EditorLock(),\r\n // \"TreeColumns\": TreeColumns,\r\n\r\n \"keyCode\": {\r\n SPACE: 8,\r\n BACKSPACE: 8,\r\n DELETE: 46,\r\n DOWN: 40,\r\n END: 35,\r\n ENTER: 13,\r\n ESCAPE: 27,\r\n HOME: 36,\r\n INSERT: 45,\r\n LEFT: 37,\r\n PAGE_DOWN: 34,\r\n PAGE_UP: 33,\r\n RIGHT: 39,\r\n TAB: 9,\r\n UP: 38,\r\n A: 65\r\n },\r\n \"preClickClassName\": \"slick-edit-preclick\",\r\n $: jQueryReplacement\r\n // formatters:{}\r\n};\r\n\r\n/***\r\n * An event object for passing data to event handlers and letting them control propagation.\r\n * <p>This is pretty much identical to how W3C and jQuery implement events.</p>\r\n * @class EventData\r\n * @constructor\r\n */\r\nfunction EventData() {\r\n var isPropagationStopped = false;\r\n var isImmediatePropagationStopped = false;\r\n\r\n /***\r\n * Stops event from propagating up the DOM tree.\r\n * @method stopPropagation\r\n */\r\n this.stopPropagation = function () {\r\n isPropagationStopped = true;\r\n };\r\n\r\n /***\r\n * Returns whether stopPropagation was called on this event object.\r\n * @method isPropagationStopped\r\n * @return {Boolean}\r\n */\r\n this.isPropagationStopped = function (): boolean {\r\n return isPropagationStopped;\r\n };\r\n\r\n /***\r\n * Prevents the rest of the handlers from being executed.\r\n * @method stopImmediatePropagation\r\n */\r\n this.stopImmediatePropagation = function () {\r\n isImmediatePropagationStopped = true;\r\n };\r\n\r\n /***\r\n * Returns whether stopImmediatePropagation was called on this event object.\\\r\n * @method isImmediatePropagationStopped\r\n * @return {Boolean}\r\n */\r\n this.isImmediatePropagationStopped = function (): boolean {\r\n return isImmediatePropagationStopped;\r\n };\r\n}\r\n\r\n/***\r\n * A simple publisher-subscriber implementation.\r\n * @class Event\r\n * @constructor\r\n */\r\nfunction Event() {\r\n var handlers: Function[] = [];\r\n\r\n /***\r\n * Adds an event handler to be called when the event is fired.\r\n * <p>Event handler will receive two arguments - an <code>EventData</code> and the <code>data</code>\r\n * object the event was fired with.<p>\r\n * @method subscribe\r\n * @param fn {Function} Event handler.\r\n */\r\n this.subscribe = function (fn: Function) {\r\n handlers.push(fn);\r\n };\r\n\r\n this.countHandlers = function () {\r\n return handlers.length;\r\n };\r\n\r\n /***\r\n * Removes an event handler added with <code>subscribe(fn)</code>.\r\n * @method unsubscribe\r\n * @param fn {Function} Event handler to be removed.\r\n */\r\n this.unsubscribe = function (fn: Function) {\r\n for (var i = handlers.length - 1; i >= 0; i--) {\r\n if (handlers[i] === fn) {\r\n handlers.splice(i, 1);\r\n }\r\n }\r\n };\r\n\r\n /***\r\n * Fires an event notifying all subscribers.\r\n * @method notify\r\n * @param args {Object} Additional data object to be passed to all handlers.\r\n * @param e {EventData}\r\n * Optional.\r\n * An <code>EventData</code> object to be passed to all handlers.\r\n * For DOM events, an existing W3C/jQuery event object can be passed in.\r\n * @param scope {Object}\r\n * Optional.\r\n * The scope (\"this\") within which the handler will be executed.\r\n * If not specified, the scope will be set to the <code>Event</code> instance.\r\n */\r\n this.notify = function (args: any, e, scope: any) {\r\n e = e || new EventData();\r\n scope = scope || this;\r\n\r\n var returnValue;\r\n for (var i = 0; i < handlers.length && !((e.isPropagationStopped && e.isPropagationStopped()) || (e.isImmediatePropagationStopped && e.isImmediatePropagationStopped())); i++) {\r\n returnValue = handlers[i].call(scope, e, args);\r\n }\r\n\r\n return returnValue;\r\n };\r\n}\r\n\r\nfunction EventHandler() {\r\n var handlers = [];\r\n\r\n this.subscribe = function (event, handler) {\r\n handlers.push({\r\n event: event,\r\n handler: handler\r\n });\r\n event.subscribe(handler);\r\n\r\n return this; // allow chaining\r\n };\r\n\r\n this.unsubscribe = function (event, handler) {\r\n var i = handlers.length;\r\n while (i--) {\r\n if (handlers[i].event === event &&\r\n handlers[i].handler === handler) {\r\n handlers.splice(i, 1);\r\n event.unsubscribe(handler);\r\n return;\r\n }\r\n }\r\n\r\n return this; // allow chaining\r\n };\r\n\r\n this.unsubscribeAll = function () {\r\n var i = handlers.length;\r\n while (i--) {\r\n handlers[i].event.unsubscribe(handlers[i].handler);\r\n }\r\n handlers = [];\r\n\r\n return this; // allow chaining\r\n };\r\n}\r\n\r\n/***\r\n * A structure containing a range of cells.\r\n * @class Range\r\n * @constructor\r\n * @param fromRow {Integer} Starting row.\r\n * @param fromCell {Integer} Starting cell.\r\n * @param toRow {Integer} Optional. Ending row. Defaults to <code>fromRow</code>.\r\n * @param toCell {Integer} Optional. Ending cell. Defaults to <code>fromCell</code>.\r\n */\r\nexport function Range(fromRow: number, fromCell: number, toRow?: number, toCell?: number) {\r\n if (toRow === undefined && toCell === undefined) {\r\n toRow = fromRow;\r\n toCell = fromCell;\r\n }\r\n\r\n /***\r\n * @property fromRow\r\n * @type {Integer}\r\n */\r\n this.fromRow = Math.min(fromRow, toRow);\r\n\r\n /***\r\n * @property fromCell\r\n * @type {Integer}\r\n */\r\n this.fromCell = Math.min(fromCell, toCell);\r\n\r\n /***\r\n * @property toRow\r\n * @type {Integer}\r\n */\r\n this.toRow = Math.max(fromRow, toRow);\r\n\r\n /***\r\n * @property toCell\r\n * @type {Integer}\r\n */\r\n this.toCell = Math.max(fromCell, toCell);\r\n\r\n /***\r\n * Returns whether a range represents a single row.\r\n * @method isSingleRow\r\n * @return {Boolean}\r\n */\r\n this.isSingleRow = function (): boolean {\r\n return this.fromRow == this.toRow;\r\n };\r\n\r\n /***\r\n * Returns whether a range represents a single cell.\r\n * @method isSingleCell\r\n * @return {Boolean}\r\n */\r\n this.isSingleCell = function (): boolean {\r\n return this.fromRow == this.toRow && this.fromCell == this.toCell;\r\n };\r\n\r\n /***\r\n * Returns whether a range contains a given cell.\r\n * @method contains\r\n * @param row {Integer}\r\n * @param cell {Integer}\r\n * @return {Boolean}\r\n */\r\n this.contains = function (row, cell) {\r\n return row >= this.fromRow && row <= this.toRow &&\r\n cell >= this.fromCell && cell <= this.toCell;\r\n };\r\n\r\n /***\r\n * Returns a readable representation of a range.\r\n * @method toString\r\n * @return {String}\r\n */\r\n this.toString = function (): string {\r\n if (this.isSingleCell()) {\r\n return \"(\" + this.fromRow + \":\" + this.fromCell + \")\";\r\n } else {\r\n return \"(\" + this.fromRow + \":\" + this.fromCell + \" - \" + this.toRow + \":\" + this.toCell + \")\";\r\n }\r\n };\r\n}\r\n\r\n\r\n/***\r\n * A base class that all special / non-data rows (like Group and GroupTotals) derive from.\r\n * @class NonDataItem\r\n * @constructor\r\n */\r\nfunction NonDataItem() {\r\n this.__nonDataRow = true;\r\n}\r\n\r\n\r\n/***\r\n * Information about a group of rows.\r\n * @class Group\r\n * @extends Slick.NonDataItem\r\n * @constructor\r\n */\r\nfunction Group() {\r\n this.__group = true;\r\n\r\n /**\r\n * Grouping level, starting with 0.\r\n * @property level\r\n * @type {Number}\r\n */\r\n this.level = 0;\r\n\r\n /***\r\n * Number of rows in the group.\r\n * @property count\r\n * @type {Integer}\r\n */\r\n this.count = 0;\r\n\r\n /***\r\n * Grouping value.\r\n * @property value\r\n * @type {Object}\r\n */\r\n this.value = null;\r\n\r\n /***\r\n * Formatted display value of the group.\r\n * @property title\r\n * @type {String}\r\n */\r\n this.title = null;\r\n\r\n /***\r\n * Whether a group is collapsed.\r\n * @property collapsed\r\n * @type {Boolean}\r\n */\r\n this.collapsed = false;\r\n\r\n /***\r\n * Whether a group selection checkbox is checked.\r\n * @property selectChecked\r\n * @type {Boolean}\r\n */\r\n this.selectChecked = false;\r\n\r\n /***\r\n * GroupTotals, if any.\r\n * @property totals\r\n * @type {GroupTotals}\r\n */\r\n this.totals = null;\r\n\r\n /**\r\n * Rows that are part of the group.\r\n * @property rows\r\n * @type {Array}\r\n */\r\n this.rows = [];\r\n\r\n /**\r\n * Sub-groups that are part of the group.\r\n * @property groups\r\n * @type {Array}\r\n */\r\n this.groups = null;\r\n\r\n /**\r\n * A unique key used to identify the group. This key can be used in calls to DataView\r\n * collapseGroup() or expandGroup().\r\n * @property groupingKey\r\n * @type {Object}\r\n */\r\n this.groupingKey = null;\r\n}\r\n\r\nGroup.prototype = new NonDataItem();\r\n\r\n/***\r\n * Compares two Group instances.\r\n * @method equals\r\n * @return {Boolean}\r\n * @param group {Group} Group instance to compare to.\r\n */\r\nGroup.prototype.equals = function (group): boolean {\r\n return this.value === group.value &&\r\n this.count === group.count &&\r\n this.collapsed === group.collapsed &&\r\n this.title === group.title;\r\n};\r\n\r\n/***\r\n * Information about group totals.\r\n * An instance of GroupTotals will be created for each totals row and passed to the aggregators\r\n * so that they can store arbitrary data in it. That data can later be accessed by group totals\r\n * formatters during the display.\r\n * @class GroupTotals\r\n * @extends Slick.NonDataItem\r\n * @constructor\r\n */\r\nfunction GroupTotals() {\r\n this.__groupTotals = true;\r\n\r\n /***\r\n * Parent Group.\r\n * @param group\r\n * @type {Group}\r\n */\r\n this.group = null;\r\n\r\n /***\r\n * Whether the totals have been fully initialized / calculated.\r\n * Will be set to false for lazy-calculated group totals.\r\n * @param initialized\r\n * @type {Boolean}\r\n */\r\n this.initialized = false;\r\n}\r\n\r\nGroupTotals.prototype = new NonDataItem();\r\n\r\n/***\r\n * A locking helper to track the active edit controller and ensure that only a single controller\r\n * can be active at a time. This prevents a whole class of state and validation synchronization\r\n * issues. An edit controller (such as SlickGrid) can query if an active edit is in progress\r\n * and attempt a commit or cancel before proceeding.\r\n * @class EditorLock\r\n * @constructor\r\n */\r\nfunction EditorLock() {\r\n var activeEditController = null;\r\n\r\n /***\r\n * Returns true if a specified edit controller is active (has the edit lock).\r\n * If the parameter is not specified, returns true if any edit controller is active.\r\n * @method isActive\r\n * @param editController {EditController}\r\n * @return {Boolean}\r\n */\r\n this.isActive = function (editController) {\r\n return (editController ? activeEditController === editController : activeEditController !== null);\r\n };\r\n\r\n /***\r\n * Sets the specified edit controller as the active edit controller (acquire edit lock).\r\n * If another edit controller is already active, and exception will be throw new Error(.\r\n * @method activate\r\n * @param editController {EditController} edit controller acquiring the lock\r\n */\r\n this.activate = function (editController) {\r\n if (editController === activeEditController) { // already activated?\r\n return;\r\n }\r\n if (activeEditController !== null) {\r\n throw new Error(\"SlickGrid.EditorLock.activate: an editController is still active, can't activate another editController\");\r\n }\r\n if (!editController.commitCurrentEdit) {\r\n throw new Error(\"SlickGrid.EditorLock.activate: editController must implement .commitCurrentEdit()\");\r\n }\r\n if (!editController.cancelCurrentEdit) {\r\n throw new Error(\"SlickGrid.EditorLock.activate: editController must implement .cancelCurrentEdit()\");\r\n }\r\n activeEditController = editController;\r\n };\r\n\r\n /***\r\n * Unsets the specified edit controller as the active edit controller (release edit lock).\r\n * If the specified edit controller is not the active one, an exception will be throw new Error(.\r\n * @method deactivate\r\n * @param editController {EditController} edit controller releasing the lock\r\n */\r\n this.deactivate = function (editController) {\r\n if (activeEditController !== editController) {\r\n throw new Error(\"SlickGrid.EditorLock.deactivate: specified editController is not the currently active one\");\r\n }\r\n activeEditController = null;\r\n };\r\n\r\n /***\r\n * Attempts to commit the current edit by calling \"commitCurrentEdit\" method on the active edit\r\n * controller and returns whether the commit attempt was successful (commit may fail due to validation\r\n * errors, etc.). Edit controller's \"commitCurrentEdit\" must return true if the commit has succeeded\r\n * and false otherwise. If no edit controller is active, returns true.\r\n * @method commitCurrentEdit\r\n * @return {Boolean}\r\n */\r\n this.commitCurrentEdit = function (): boolean {\r\n return (activeEditController ? activeEditController.commitCurrentEdit() : true);\r\n };\r\n\r\n /***\r\n * Attempts to cancel the current edit by calling \"cancelCurrentEdit\" method on the active edit\r\n * controller and returns whether the edit was successfully cancelled. If no edit controller is\r\n * active, returns true.\r\n * @method cancelCurrentEdit\r\n * @return {Boolean}\r\n */\r\n this.cancelCurrentEdit = function cancelCurrentEdit() {\r\n return (activeEditController ? activeEditController.cancelCurrentEdit() : true);\r\n };\r\n}\r\n\r\n// /**\r\n// *\r\n// * @param {Array} treeColumns Array com levels of columns\r\n// * @returns {{hasDepth: 'hasDepth', getTreeColumns: 'getTreeColumns', extractColumns: 'extractColumns', getDepth: 'getDepth', getColumnsInDepth: 'getColumnsInDepth', getColumnsInGroup: 'getColumnsInGroup', visibleColumns: 'visibleColumns', filter: 'filter', reOrder: reOrder}}\r\n// * @constructor\r\n// */\r\n// function TreeColumns(treeColumns) {\r\n\r\n// var columnsById = {};\r\n\r\n// function init() {\r\n// mapToId(treeColumns);\r\n// }\r\n\r\n// function mapToId(columns) {\r\n// columns\r\n// .forEach(function (column) {\r\n// columnsById[column.id] = column;\r\n\r\n// if (column.columns) {\r\n// mapToId(column.columns);\r\n// }\r\n// });\r\n// }\r\n\r\n// function filter(node, condition) {\r\n\r\n// return node.filter(function (column) {\r\n\r\n// var valid = condition.call(column);\r\n\r\n// if (valid && column.columns) {\r\n// column.columns = filter(column.columns, condition);\r\n// }\r\n\r\n// return valid && (!column.columns || column.columns.length);\r\n// });\r\n\r\n// }\r\n\r\n// function sort(columns, grid) {\r\n// columns\r\n// .sort(function (a, b) {\r\n// var indexA = getOrDefault(grid.getColumnIndex(a.id)),\r\n// indexB = getOrDefault(grid.getColumnIndex(b.id));\r\n\r\n// return indexA - indexB;\r\n// })\r\n// .forEach(function (column) {\r\n// if (column.columns) {\r\n// sort(column.columns, grid);\r\n// }\r\n// });\r\n// }\r\n\r\n// function getOrDefault(value) {\r\n// return typeof value === \"undefined\" ? -1 : value;\r\n// }\r\n\r\n// function getDepth(node) {\r\n// if (node.length) {\r\n// for (var i in node)\r\n// return getDepth(node[i]);\r\n// }\r\n// else if (node.columns) {\r\n// return 1 + getDepth(node.columns);\r\n// }\r\n// else {\r\n// return 1;\r\n// }\r\n// }\r\n\r\n// function getColumnsInDepth(node: any[], depth: number, current?: number) {\r\n// var columns = [];\r\n// current = current || 0;\r\n\r\n// if (depth == current) {\r\n\r\n// if (node.length) {\r\n// node.forEach(function (n) {\r\n// if (n.columns)\r\n// n.extractColumns = function () {\r\n// return extractColumns(n);\r\n// };\r\n// });\r\n// }\r\n\r\n// return node;\r\n// } else {\r\n// for (var i in node) {\r\n// if (node[i].columns) {\r\n// columns = columns.concat(getColumnsInDepth(node[i].columns, depth, current + 1));\r\n// }\r\n// }\r\n// }\r\n\r\n// return columns;\r\n// }\r\n\r\n// function extractColumns(node) {\r\n// var result = [];\r\n\r\n// if (node.hasOwnProperty(\"length\")) {\r\n\r\n// for (var i = 0; i < node.length; i++) {\r\n// result = result.concat(extractColumns(node[i]));\r\n// }\r\n\r\n// } else {\r\n\r\n// if (node.hasOwnProperty(\"columns\")) {\r\n\r\n// result = result.concat(extractColumns(node.columns));\r\n// } else {\r\n// return node;\r\n// }\r\n\r\n// }\r\n\r\n// return result;\r\n// }\r\n\r\n// function cloneTreeColumns() {\r\n// return (<any>window).Slick.$.shallowExtend([], treeColumns);\r\n// }\r\n\r\n// init();\r\n\r\n// this.hasDepth = function () {\r\n\r\n// for (var i in treeColumns) {\r\n// if (treeColumns[i].hasOwnProperty('columns'))\r\n// return true;\r\n// }\r\n\r\n// return false;\r\n// };\r\n\r\n// this.getTreeColumns = function () {\r\n// return treeColumns;\r\n// };\r\n\r\n// this.extractColumns = function () {\r\n// return this.hasDepth() ? extractColumns(treeColumns) : treeColumns;\r\n// };\r\n\r\n// this.getDepth = function () {\r\n// return getDepth(treeColumns);\r\n// };\r\n\r\n// this.getColumnsInDepth = function (depth) {\r\n// return getColumnsInDepth(treeColumns, depth);\r\n// };\r\n\r\n// this.getColumnsInGroup = function (groups) {\r\n// return extractColumns(groups);\r\n// };\r\n\r\n// this.visibleColumns = function () {\r\n// return filter(cloneTreeColumns(), function () {\r\n// return this.visible;\r\n// });\r\n// };\r\n\r\n// this.filter = function (condition) {\r\n// return filter(cloneTreeColumns(), condition);\r\n// };\r\n\r\n// this.reOrder = function (grid) {\r\n// return sort(treeColumns, grid);\r\n// };\r\n\r\n// this.getById = function (id) {\r\n// return columnsById[id];\r\n// };\r\n\r\n// this.getInIds = function (ids) {\r\n// return ids.map(function (id) {\r\n// return columnsById[id];\r\n// });\r\n// };\r\n// }\r\n\r\n// (<any>window).Slick = Slick;\r\n\r\n","export interface IjQueryWrapper {\r\n length: number;\r\n empty: () => IjQueryWrapper;\r\n appendTo: (selector: IjQueryWrapper | HTMLElement) => IjQueryWrapper;\r\n append: (el: HTMLElement) => IjQueryWrapper;\r\n add: (selector: IjQueryWrapper | HTMLElement) => IjQueryWrapper;\r\n css: (key: string, value?: any) => IjQueryWrapper | any;\r\n attr: (key: string, value?: any) => IjQueryWrapper | string;\r\n closestClass: (name: string, stopAt?: string) => IjQueryWrapper;\r\n data: (name: string, value?: any) => any;\r\n remove(): void;\r\n html: (value?: any) => string | IjQueryWrapper;\r\n text: (value: string) => IjQueryWrapper;\r\n addClass: (name: string) => IjQueryWrapper;\r\n hasClass: (name: string) => boolean;\r\n height: (val?: number | string) => number | IjQueryWrapper;\r\n width: (val?: number | string) => number | IjQueryWrapper;\r\n removeClass: (name: string) => IjQueryWrapper;\r\n offset: () => { top: number, left: number };\r\n children: () => IjQueryWrapper;\r\n on: (eventname: string, fnc: Function) => IjQueryWrapper;\r\n toggleClass: (name: string, state?: boolean) => IjQueryWrapper;\r\n find: (selector: string) => IjQueryWrapper;\r\n slideDown: (speed: string, done: Function) => IjQueryWrapper;\r\n slideUp: (speed: string, done: Function) => IjQueryWrapper;\r\n index: () => number;\r\n}\r\n\r\nexport interface IjQueryReplacement {\r\n (selector?: string | HTMLElement | Document): IjQueryWrapper;\r\n deepExtend: (out: any, ...a: any[]) => any;\r\n shallowExtend: (out: any, ...a: any[]) => any;\r\n each: (array: any[] | IjQueryWrapper, fnc: (idx: number, val: any) => void) => void;\r\n}\r\n\r\nfunction deepExtend(out: any, ...a: any[]): any {\r\n out = out || {};\r\n\r\n for (let i = 1; i < arguments.length; i++) {\r\n let obj = arguments[i];\r\n\r\n if (!obj)\r\n continue;\r\n\r\n for (let key in obj) {\r\n if (obj.hasOwnProperty(key)) {\r\n if (obj[key] !== null && typeof obj[key] === 'object')\r\n out[key] = deepExtend((Array.isArray(obj[key]) && out[key] === undefined) ? [] : out[key], obj[key]);\r\n else\r\n out[key] = obj[key];\r\n }\r\n }\r\n }\r\n\r\n return out;\r\n}\r\n\r\nfunction getParentWithClass(el: HTMLElement, c: string, stopAt?: string): HTMLElement {\r\n if (el.classList.contains(c))\r\n return el;\r\n if (stopAt !== undefined && el.classList.contains(stopAt))\r\n return undefined;\r\n if (el.parentElement) {\r\n return getParentWithClass(el.parentElement, c);\r\n }\r\n return undefined;\r\n}\r\n\r\nfunction jQWrapper(elements: HTMLElement[]): IjQueryWrapper {\r\n let _elements: any = elements;\r\n\r\n _elements.empty = function (): IjQueryWrapper {\r\n for (let x of _elements) {\r\n x.innerHTML = '';\r\n }\r\n return this;\r\n };\r\n\r\n _elements.appendTo = function (selector: IjQueryWrapper | HTMLElement | string): IjQueryWrapper {\r\n for (let i = 0; i < _elements.length; i++) {\r\n if (selector instanceof HTMLElement) {\r\n selector.appendChild(_elements[i]);\r\n } else if (typeof (selector) === \"string\") {\r\n const parents = document.querySelectorAll(selector);\r\n for (let i = 0, len = parents.length; i < len; i++) {\r\n parents[i].appendChild(_elements[i]);\r\n }\r\n } else {\r\n for (let j = 0; j < selector.length; j++) {\r\n selector[j].appendChild(_elements[i]);\r\n }\r\n }\r\n }\r\n return this;\r\n };\r\n\r\n _elements.append = function (el: HTMLElement): IjQueryWrapper {\r\n for (let i = 0; i < _elements.length; i++) {\r\n _elements[i].appendChild(el);\r\n }\r\n return this;\r\n };\r\n\r\n _elements.add = function (selector: IjQueryWrapper | HTMLElement): IjQueryWrapper {\r\n if (selector !== undefined) {\r\n if (selector instanceof HTMLElement) {\r\n _elements.push(selector);\r\n } else {\r\n for (let i = 0; i < selector.length; i++) {\r\n _elements.push(selector[i]);\r\n }\r\n }\r\n }\r\n return this;\r\n }\r\n\r\n _elements.css = function (key: string | any, value?: any): IjQueryWrapper | any {\r\n // TODO: support object instead of just simple keys\r\n if (value === undefined) {\r\n if (typeof (key) === \"string\") {\r\n if (!_elements.length) {\r\n return undefined;\r\n }\r\n const computed = [\"borderLeftWidth\", \"borderRightWidth\", \"paddingLeft\", \"paddingRight\",\r\n \"borderTopWidth\", \"borderBottomWidth\", \"paddingTop\", \"paddingBottom\"];\r\n if (computed.indexOf(key) < 0) {\r\n return _elements[0].style[key];\r\n }\r\n return window.getComputedStyle(_elements[0])[key];\r\n } else {\r\n for (const keyEl in key) {\r\n if (!key.hasOwnProperty(keyEl)) {\r\n continue;\r\n }\r\n for (let i = 0; i < _elements.length; i++) {\r\n if ([\"height\", \"width\", \"top\", \"left\", \"bottom\", \"right\"].indexOf(keyEl) >= 0 && typeof key[keyEl] === \"number\") {\r\n _elements[i].style[keyEl] = key[keyEl] + \"px\";\r\n } else {\r\n _elements[i].style[keyEl] = key[keyEl];\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n for (let i = 0; i < _elements.length; i++) {\r\n if ([\"height\", \"width\", \"top\", \"left\", \"bottom\", \"right\"].indexOf(key) >= 0 && typeof value === \"number\") {\r\n _elements[i].style[key] = value + \"px\";\r\n } else {\r\n _elements[i].style[key] = value;\r\n }\r\n }\r\n return this;\r\n }\r\n\r\n _elements.attr = function (key: string, value?: any): IjQueryWrapper | string {\r\n if (value === undefined) {\r\n return _elements.length ? _elements[0][key] : undefined;\r\n }\r\n for (let i = 0; i < _elements.length; i++) {\r\n _elements[i][key] = value;\r\n }\r\n return this;\r\n }\r\n\r\n _elements.closestClass = function (name: string, stopAt?: string): IjQueryWrapper {\r\n let result = jQueryReplacement();\r\n for (let i = 0; i < _elements.length; i++) {\r\n let match = getParentWithClass(_elements[i], name, stopAt);\r\n result.add(match);\r\n }\r\n return result;\r\n }\r\n\r\n _elements.remove = function (): void {\r\n for (let i = 0; i < _elements.length; i++) {\r\n let el = _elements[i];\r\n if (el.parentNode) {\r\n el.parentNode.removeChild(el);\r\n }\r\n }\r\n }\r\n\r\n _elements.data = function (name: string, value?: any): any {\r\n if (_elements.length === 0)\r\n return undefined;\r\n if (value === undefined) {\r\n return _elements[0][name];\r\n }\r\n for (let i = 0; i < _elements.length; i++) {\r\n _elements[i][name] = value;\r\n }\r\n return this;\r\n }\r\n\r\n _elements.html = function (value?: any): string | IjQueryWrapper {\r\n if (value === undefined) {\r\n return _elements.length ? _elements[0].innerHTML : undefined;\r\n }\r\n for (let i = 0; i < _elements.length; i++) {\r\n _elements[i].innerHTML = value;\r\n }\r\n return this;\r\n }\r\n\r\n _elements.text = function (value: string): IjQueryWrapper {\r\n for (let i = 0; i < _elements.length; i++) {\r\n _elements[i].innerText = value;\r\n }\r\n return this;\r\n }\r\n\r\n _elements.height = function (value?: number | string): number | IjQueryWrapper {\r\n if (value === undefined) {\r\n if (!_elements.length) {\r\n return undefined;\r\n }\r\n let cssHeight = parseInt(_elements[0].style.height);\r\n if (isNaN(cssHeight)) {\r\n return _elements[0].offsetHeight;\r\n } else {\r\n return cssHeight;\r\n }\r\n }\r\n for (let i = 0; i < _elements.length; i++) {\r\n if (typeof value === \"string\") {\r\n _elements[i].style.height = value;\r\n } else {\r\n //_elements[i].offsetHeight = value;\r\n _elements[i].style.height = value + \"px\";\r\n }\r\n }\r\n return this;\r\n }\r\n\r\n _elements.width = function (value?: number | string): number | IjQueryWrapper {\r\n if (value === undefined) {\r\n if (!_elements.length) {\r\n return undefined;\r\n }\r\n // let cssHeight = parseInt(_elements[0].style.width);\r\n // if (isNaN(cssHeight)) {\r\n return _elements[0].offsetWidth;\r\n // } else {\r\n // return cssHeight;\r\n // }\r\n }\r\n for (let i = 0; i < _elements.length; i++) {\r\n if (typeof value === \"string\") {\r\n _elements[i].style.width = value;\r\n } else {\r\n //_elements[i].offsetWidth = value;\r\n _elements[i].style.width = value + \"px\";\r\n }\r\n }\r\n return this;\r\n }\r\n\r\n _elements.removeClass = function (name: string): IjQueryWrapper {\r\n for (let i = 0; i < _elements.length; i++) {\r\n if (name.indexOf(' ') > 0) {\r\n let names = name.split(' ');\r\n for (let nIdx = 0; nIdx < names.length; nIdx++) {\r\n _elements[i].classList.remove(names[nIdx]);\r\n }\r\n } else {\r\n _elements[i].classList.remove(name);\r\n }\r\n }\r\n return this;\r\n }\r\n\r\n _elements.offset = function (): { top: number, left: number } {\r\n if (_elements.length === 0)\r\n return undefined;\r\n let el = _elements[0];\r\n let rect = el.getBoundingClientRect();\r\n return {\r\n top: rect.top + document.body.scrollTop,\r\n left: rect.left + document.body.scrollLeft\r\n };\r\n }\r\n\r\n _elements.children = function (): IjQueryWrapper {\r\n let result: HTMLElement[] = [];\r\n for (let i = 0; i < _elements.length; i++) {\r\n for (let cidx = 0; cidx < _elements[i].children.length; cidx++) {\r\n result.push(_elements[i].children[cidx]);\r\n }\r\n }\r\n return jQWrapper(result);\r\n }\r\n\r\n _elements.on = function (eventname: string, fnc: Function): IjQueryWrapper {\r\n for (let i = 0; i < _elements.length; i++) {\r\n _elements[i].addEventListener(eventname, fnc);\r\n }\r\n return this;\r\n }\r\n\r\n _elements.toggleClass = function (name: string, state?: boolean): IjQueryWrapper {\r\n for (let i = 0; i < _elements.length; i++) {\r\n if (state === false || _elements[i].classList.contains(name)) {\r\n _elements[i].classList.remove(name);\r\n } else if (state === true || !_elements[i].classList.contains(name)) {\r\n _elements[i].classList.add(name);\r\n }\r\n }\r\n return this;\r\n }\r\n\r\n _elements.find = function (selector: string): IjQueryWrapper {\r\n var result = jQueryReplacement();\r\n for (let i = 0; i < _elements.length; i++) {\r\n let found = _elements[i].querySelectorAll(selector);\r\n for (let j = 0; j < found.length; j++) {\r\n result.add(found[j]);\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n _elements.slideDown = function (speed: string, done: Function): IjQueryWrapper {\r\n //TODO\r\n for (let i = 0; i < _elements.length; i++) {\r\n _elements[i].style.display = '';\r\n }\r\n return this;\r\n }\r\n\r\n _elements.slideUp = function (speed: string, done: Function): IjQueryWrapper {\r\n //TODO\r\n for (let i = 0; i < _elements.length; i++) {\r\n _elements[i].style.display = 'none';\r\n }\r\n return this;\r\n }\r\n\r\n _elements.addClass = function (name: string): IjQueryWrapper {\r\n if (name) {\r\n {\r\n for (let i = 0; i < _elements.length; i++) {\r\n _elements[i].classList.add(name);\r\n }\r\n }\r\n }\r\n return this;\r\n }\r\n\r\n _elements.hasClass = function (name: string): boolean {\r\n for (let i = 0; i < _elements.length; i++) {\r\n if (_elements[i].classList.contains(name))\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n _elements.index = function (): number {\r\n var index = 0;\r\n let node = _elements[0];\r\n if (!node)\r\n return -1;\r\n while ((node = node.previousElementSibling)) {\r\n index++;\r\n }\r\n return index;\r\n }\r\n\r\n\r\n return _elements;\r\n}\r\n\r\nconst jqueryCreate = function (selector?: string | HTMLElement): IjQueryWrapper {\r\n let elements: HTMLElement[] = [];\r\n if (typeof selector === \"string\") {\r\n if (selector[0] === '<') {\r\n var tmp = document.createElement(\"div\");\r\n tmp.innerHTML = selector;\r\n elements.push(<HTMLElement>tmp.firstElementChild);\r\n } else {\r\n var q = document.querySelectorAll(selector);\r\n\r\n if (q) {\r\n for (let i = 0; i < q.length; i++) {\r\n let node: Node = q[i];\r\n if (node.nodeType === Node.ELEMENT_NODE) {\r\n elements.push(node as HTMLElement);\r\n }\r\n }\r\n }\r\n }\r\n } else {\r\n if (selector !== undefined) {\r\n elements.push(<HTMLElement>selector);\r\n }\r\n }\r\n return jQWrapper(elements);\r\n};\r\n\r\nfunction each(array: any[] | IjQueryWrapper, fnc: (idx: number, val: any) => void): void {\r\n for (let i = 0; i < array.length; i++) {\r\n fnc(i, array[i]);\r\n }\r\n}\r\n\r\nfunction shallowExtend(out, ...rest) {\r\n out = out || {};\r\n\r\n for (var i = 1; i < arguments.length; i++) {\r\n if (!arguments[i])\r\n continue;\r\n\r\n for (var key in arguments[i]) {\r\n if (arguments[i].hasOwnProperty(key))\r\n out[key] = arguments[i][key];\r\n }\r\n }\r\n\r\n return out;\r\n}\r\n\r\njqueryCreate.deepExtend = deepExtend;\r\njqueryCreate.each = each;\r\njqueryCreate.shallowExtend = shallowExtend;\r\n\r\nexport let jQueryReplacement: ((selector?: string | HTMLElement) => IjQueryWrapper) & IjQueryReplacement = jqueryCreate;\r\n","import { ISlickColumn, Slick, ISlickFormatterResult, ISlickEvent } from \"./slick.core\";\r\nimport { SlickGrid, ISlickGridOptions, ISlickGrid } from \"./slick.grid\";\r\nimport { RowSelectionModel } from \"./plugins/slick.rowselectionmodel\";\r\nimport { DataView, ISlickDataView } from \"./slick.dataview\";\r\nimport { GroupItemMetadataProvider } from \"./slick.groupitemmetadataprovider\";\r\nimport { jQueryReplacement, IjQueryWrapper } from \"../core/jq\";\r\nimport { HeaderMenu } from \"./plugins/slick.headermenu\";\r\nimport { HeaderButtons } from \"./plugins/slick.headerbuttons\";\r\nimport { TextFormatter } from \"./slick.formatters\";\r\nimport { ExcelFilter } from \"./filterDialogs/excelFilter\";\r\nimport { UILang } from \"../core/lang\";\r\nimport { RowMoveManager } from \"./plugins/slick.rowmovemanager\";\r\nimport { Overlays } from \"./plugins/ext.overlay\";\r\n\r\nexport interface ISlickCreatorOptions extends ISlickGridOptions {\r\n primaryKey: string;\r\n showHeaderMenu?: boolean;\r\n provideDefaultValues?: (item: any) => boolean | void;\r\n groupItemOptions?: any; // TODO\r\n showColumnGroups?: boolean;\r\n mode?: \"client\" | \"server\";\r\n dataView?: any; // TODO\r\n saveColumnsKey?: string;\r\n groupItemMetadataProvider?: any;\r\n getFilterValues?: (column: ISlickColumn /* TODO: selected values of other columns */) => Promise<{ [key: string]: any[] } | any[]>;\r\n showFilterDialog?: (column: ISlickColumn, grid: IJSLGrid<any>) => void;\r\n allowRowMove?: boolean;\r\n enableFillDown?: boolean;\r\n setDataItemValueForColumn?: (item, columnDef: ISlickColumn, value: any) => void;\r\n}\r\n\r\nexport interface IJSLGrid<T> extends ISlickGrid<T> {\r\n dataView: ISlickDataView<T>;\r\n setHeight: (height: number) => void;\r\n getHeight: () => number;\r\n sort: (column: ISlickColumn, sortAsc?: boolean) => void;\r\n refreshData: () => void;\r\n setData: (newData: T[]) => void;\r\n getData: () => T[];\r\n refresh: () => void;\r\n addFormula: (field: string, fnc: (row: T, grid: IJSLGrid<T>, field: string) => any,\r\n usedColumns: string[]) => void;\r\n getFormattedValue: (column: ISlickColumn, value: any, item?: T) => string;\r\n getContentWidth: (column: ISlickColumn, row: number) => number;\r\n fitToContent: (column: ISlickColumn) => void;\r\n triggerAllFormulas: () => void;\r\n columnHasFilter: (columnId: string) => boolean;\r\n refreshDataItem: (item: T) => void;\r\n addFilter: (filter: {\r\n field: string,\r\n columnId?: string,\r\n match: (item: T, field: string) => boolean, combine?: \"or\" | \"and\"\r\n }, dontrefresh?: boolean) => void;\r\n setFilters: (filters: Array<{\r\n field: string,\r\n columnId?: string,\r\n match: (item: T, field: string) => boolean, combine?: \"or\" | \"and\"\r\n }>, dontrefresh?: boolean) => void;\r\n getFilters: () => Array<{\r\n field: string,\r\n columnId?: string,\r\n match: (item: T, field: string) => boolean, combine?: \"or\" | \"and\"\r\n }>;\r\n clearFilter: (field?: string, dontrefresh?: boolean) => void;\r\n refreshFilters: (refreshFilters?: boolean) => void;\r\n getSelectedItems: () => T[];\r\n onAfterEdit: ISlickEvent<{\r\n grid: IJSLGrid<T>,\r\n oldValue: any,\r\n newValue: any,\r\n column: ISlickColumn,\r\n item: T\r\n }>;\r\n onAfterFillDown: ISlickEvent<{\r\n grid: IJSLGrid<T>,\r\n items: T[],\r\n direction: \"up\" | \"down\",\r\n range: any,\r\n column: ISlickColumn,\r\n value: any\r\n }>;\r\n onFiltersChanged: ISlickEvent<void>;\r\n getHeaderMenu: () => any;\r\n getFilterDialog: () => any;\r\n}\r\n\r\nconst $ = jQueryReplacement;\r\n\r\nexport function createJSLGrid<T>(selector: string | HTMLDivElement, data: T[],\r\n columns: ISlickColumn[], option: ISlickCreatorOptions): IJSLGrid<T> {\r\n\r\n const formulaObjects:\r\n Array<{\r\n column: string;\r\n fnc: (item: any, creator: IJSLGrid<any>, field: string) => any\r\n }> = [];\r\n\r\n let headerMenu;\r\n let headerButtons;\r\n\r\n const formulas = {};\r\n\r\n let container: HTMLDivElement;\r\n\r\n let filters: Array<{ field: string, columnId?: string, match: (item: T, field: string) => boolean, combine?: \"or\" | \"and\" }> = [];\r\n\r\n let customCommandHandler;\r\n\r\n let grid: IJSLGrid<T>;\r\n let dataView: ISlickDataView<T>;\r\n\r\n //let options: ISlickCreatorOptions;\r\n\r\n function createMe() {\r\n\r\n sanitizeColumns(columns);\r\n const options: ISlickCreatorOptions = $.shallowExtend({ explicitInitialization: true, mode: \"client\" }, option);\r\n\r\n container = typeof (selector) === \"string\" ?\r\n document.querySelector(selector) as HTMLDivElement :\r\n selector as HTMLDivElement;\r\n\r\n if (!container) {\r\n throw new Error(\"error: selector for SlickCreator is invalid\");\r\n }\r\n\r\n if (options.showColumnGroups) {\r\n options.createPreHeaderPanel = true;\r\n options.showPreHeaderPanel = true;\r\n }\r\n\r\n customCommandHandler = option.editCommandHandler;\r\n options.editCommandHandler = (a, b, c) => { handleEditCommand(a, b, c); };\r\n\r\n const groupItemMetadataProvider = options.groupItemMetadataProvider || GroupItemMetadataProvider(options.groupItemOptions);\r\n if (options.dataView != null) {\r\n dataView = options.dataView;\r\n } else {\r\n dataView = new DataView({ inlineFilters: true, groupItemMetadataProvider });\r\n dataView.setItems(data, options.primaryKey);\r\n }\r\n grid = new SlickGrid(container, dataView, columns, options);\r\n grid.registerPlugin(groupItemMetadataProvider);\r\n grid.setSelectionModel(new RowSelectionModel());\r\n\r\n grid.onHeaderCellRendered.subscribe((e, args) => {\r\n if (columnHasFilter(args.column.id)) {\r\n //this column is filtered\r\n args.node.classList.add(\"slick-filtered-header\");\r\n }\r\n });\r\n\r\n addCustomEvents();\r\n setupDefaultSort();\r\n setupChangeEvents();\r\n if (options.showHeaderMenu) {\r\n setupHeaderMenu();\r\n }\r\n setupHeaderButtons();\r\n\r\n if (options.allowRowMove) {\r\n\r\n const rowMovePlugin = new RowMoveManager({\r\n cancelEditOnDrag: true,\r\n singleRowMove: true,\r\n disableRowSelection: true,\r\n hideRowMoveShadow: false, // defaults to true\r\n rowMoveShadowScale: 0.7, // defaults to 0.75\r\n rowMoveShadowOpacity: 0.9 // defaults to 0.95\r\n\r\n });\r\n grid.registerPlugin(rowMovePlugin);\r\n\r\n rowMovePlugin.onBeforeMoveRows.subscribe(function (e, args) {\r\n // debugger;\r\n });\r\n\r\n\r\n rowMovePlugin.onMoveRows.subscribe(function (e, args) {\r\n var extractedRows = [], left, right;\r\n var rows = args.rows;\r\n var insertBefore = args.insertBefore;\r\n left = data.slice(0, insertBefore);\r\n right = data.slice(insertBefore, data.length);\r\n\r\n rows.sort(function (a, b) { return a - b; });\r\n\r\n for (var i = 0; i < rows.length; i++) {\r\n extractedRows.push(data[rows[i]]);\r\n }\r\n\r\n rows.reverse();\r\n\r\n for (var i = 0; i < rows.length; i++) {\r\n var row = rows[i];\r\n if (row < insertBefore) {\r\n left.splice(row, 1);\r\n } else {\r\n right.splice(row - insertBefore, 1);\r\n }\r\n }\r\n\r\n data = left.concat(extractedRows.concat(right));\r\n\r\n var selectedRows = [];\r\n for (var i = 0; i < rows.length; i++)\r\n selectedRows.push(left.length + i);\r\n\r\n // grid.resetActiveCell();\r\n dataView.beginUpdate();\r\n dataView.setItems(data);\r\n dataView.endUpdate();\r\n grid.render();\r\n });\r\n\r\n\r\n }\r\n\r\n\r\n if (option.enableFillDown) {\r\n\r\n var overlayPlugin = new Overlays({});\r\n\r\n // Event fires when a range is selected\r\n overlayPlugin.onFillUpDown.subscribe(function (e, args) {\r\n const column = grid.getColumns()[args.range.fromCell];\r\n\r\n // Ensure the column is editable\r\n if (column.editor == null || column.readonly || !grid.getOptions().editable) {\r\n return;\r\n }\r\n\r\n // Find the initial value\r\n\r\n dataView.beginUpdate();\r\n let value;\r\n const items = [];\r\n if (args.direction === \"down\") {\r\n const item = dataView.getItem(args.range.fromRow);\r\n value = grid.getDataItemValueForColumn(item, column); // item[column.field];\r\n // Copy the value down\r\n for (let i = args.range.fromRow + 1; i <= args.range.toRow; i++) {\r\n if (grid.onBeforeEditCell.notify({ row: i, cell: args.range.fromCell, item: dataView.getItem(i), column }, e) !== false) {\r\n const currentItem = dataView.getItem(i);\r\n items.push(currentItem);\r\n // if (options.setDataItemValueForColumn != null) {\r\n // options.setDataItemValueForColumn(currentItem, column, value);\r\n // } else {\r\n // dataView.getItem(i)[column.field] = value;\r\n // }\r\n // grid.invalidateRow(i);\r\n // grid.onAfterEdit.notify({ grid, oldValue, newValue: value, column, item: dataView.getItem(i) }, e);\r\n }\r\n }\r\n } else {\r\n const item = dataView.getItem(args.range.toRow);\r\n items.push(item);\r\n value = grid.getDataItemValueForColumn(item, column); // item[column.field];\r\n // Copy the value up\r\n for (let i = args.range.fromRow; i <= args.range.toRow - 1; i++) {\r\n if (grid.onBeforeEditCell.notify({ row: i, cell: args.range.fromCell, item: dataView.getItem(i), column }, e) !== false) {\r\n const currentItem = dataView.getItem(i);\r\n items.push(currentItem);\r\n // if (options.setDataItemValueForColumn != null) {\r\n // options.setDataItemValueForColumn(currentItem, column, value);\r\n // } else {\r\n // dataView.getItem(i)[column.field] = value;\r\n // }\r\n // grid.invalidateRow(i);\r\n // grid.onAfterEdit.notify({ grid, oldValue, newValue: value, column, item: dataView.getItem(i) }, e);\r\n }\r\n }\r\n }\r\n \r\n grid.onAfterFillDown.notify({grid, value, column, direction: args.direction, range: args.range, items: items}, e);\r\n\r\n dataView.endUpdate();\r\n grid.render();\r\n });\r\n\r\n grid.registerPlugin(overlayPlugin);\r\n }\r\n\r\n\r\n if (!option.explicitInitialization) {\r\n grid.init();\r\n }\r\n\r\n if (options.showColumnGroups) {\r\n setTimeout(() => {\r\n // TODO -> find better solution then timeout\r\n grid.onColumnsResized.subscribe(() => {\r\n CreateColumnGroups();\r\n });\r\n CreateColumnGroups();\r\n }, 1);\r\n }\r\n\r\n if (options.saveColumnsKey) {\r\n grid.onColumnsResized.subscribe(() => {\r\n storeColumnSettings();\r\n });\r\n grid.onColumnsReordered.subscribe(() => {\r\n storeColumnSettings();\r\n });\r\n loadColumnSettings();\r\n }\r\n\r\n }\r\n\r\n function CreateColumnGroups() {\r\n const options = grid.getOptions() as ISlickCreatorOptions;\r\n const columns = grid.getColumns();\r\n if (options.frozenColumn >= 0) {\r\n // Add column groups to left panel\r\n let $preHeaderPanel = $(grid.getPreHeaderPanel());\r\n renderHeaderGroups($preHeaderPanel, 0, options.frozenColumn + 1);\r\n // Add column groups to right panel\r\n $preHeaderPanel = $(grid.getPreHeaderPanelRight());\r\n renderHeaderGroups($preHeaderPanel, options.frozenColumn + 1, columns.length);\r\n } else {\r\n const $preHeaderPanel = $(grid.getPreHeaderPanel());\r\n renderHeaderGroups($preHeaderPanel, 0, columns.length);\r\n }\r\n\r\n function renderHeaderGroups(preHeaderPanel, start, end) {\r\n preHeaderPanel.empty()\r\n .addClass(\"slick-header-columns\")\r\n .css(\"left\", \"-1000px\")\r\n .width(grid.getHeadersWidth());\r\n preHeaderPanel[0].parentElement.classList.add(\"slick-header\");\r\n\r\n const headerColumnWidthDiff = grid.getHeaderColumnWidthDiff();\r\n let header;\r\n let lastColumnGroup = \"\";\r\n let widthTotal = 0;\r\n\r\n for (let i = start; i < end; i++) {\r\n const m = columns[i];\r\n if (lastColumnGroup === m.columnGroup && i > start) {\r\n widthTotal += m.width;\r\n header.width(widthTotal - headerColumnWidthDiff);\r\n } else {\r\n widthTotal = m.width;\r\n header = (($(\"<div class='ui-state-default slick-header-column' />\")\r\n .html(\"<span class='slick-column-name'>\" + (m.columnGroup || '') + \"</span>\") as IjQueryWrapper)\r\n .width(m.width - headerColumnWidthDiff) as IjQueryWrapper)\r\n .appendTo(preHeaderPanel);\r\n }\r\n lastColumnGroup = m.columnGroup;\r\n }\r\n }\r\n\r\n }\r\n\r\n function storeColumnSettings() {\r\n const cols = grid.getColumns();\r\n const options = grid.getOptions() as ISlickCreatorOptions;\r\n const colSettings = cols.map((c) => ({ id: c.id, width: c.width }));\r\n if (window.localStorage) {\r\n localStorage.setItem(\"_grid_col_settings_\" + options.saveColumnsKey, JSON.stringify(colSettings));\r\n }\r\n }\r\n\r\n function loadColumnSettings() {\r\n if (!window.localStorage) {\r\n return;\r\n }\r\n const options = grid.getOptions() as ISlickCreatorOptions;\r\n const key = options.saveColumnsKey;\r\n if (key) {\r\n const cols = grid.getColumns();\r\n const colSettings = JSON.parse(localStorage.getItem(\"_grid_col_settings_\" + key));\r\n if (!colSettings) {\r\n return;\r\n }\r\n for (let i = 0; i < colSettings.length; i++) {\r\n for (let j = 0; j < cols.length; j++) {\r\n if (cols[j].id === colSettings[i].id) {\r\n const c = cols[j];\r\n c.width = colSettings[i].width;\r\n if (i !== j) {\r\n cols.splice(j, 1);\r\n cols.splice(i, 0, c);\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n grid.setColumns(cols);\r\n }\r\n }\r\n\r\n function sanitizeColumns(cols: ISlickColumn[]) {\r\n for (let i = 0; i < cols.length; i++) {\r\n const c = cols[i];\r\n if (c.field === undefined && c.id) {\r\n c.field = c.id;\r\n }\r\n }\r\n }\r\n\r\n function addCustomEvents() {\r\n (grid as any).onAfterEdit = new Slick.Event();\r\n (grid as any).onFiltersChanged = new Slick.Event();\r\n (grid as any).onAfterFillDown = new Slick.Event();\r\n }\r\n\r\n function setupChangeEvents() {\r\n dataView.onRowsChanged.subscribe((e, args) => {\r\n grid.invalidateRows(args.rows);\r\n grid.render();\r\n // for (let idx = 0; idx < args.rows.length; idx++) {\r\n // grid.updateRow(args.rows[idx]);\r\n // }\r\n // grid.invalidate();\r\n });\r\n\r\n dataView.onRowCountChanged.subscribe((e, args) => {\r\n grid.updateRowCount();\r\n grid.render();\r\n });\r\n\r\n grid.onAddNewRow.subscribe((e, args) => {\r\n const options = grid.getOptions() as ISlickCreatorOptions;\r\n if (options.provideDefaultValues != null) {\r\n const result = options.provideDefaultValues(args.item);\r\n if (result === false) {\r\n return;\r\n }\r\n }\r\n dataView.addItem(args.item);\r\n (grid as any).onAfterEdit.notify({\r\n grid,\r\n oldValue: undefined,\r\n newValue: grid.getDataItemValueForColumn(args.item, args.column),\r\n column: args.column,\r\n item: args.item\r\n });\r\n });\r\n }\r\n\r\n function setupDefaultSort() {\r\n const options = grid.getOptions() as ISlickCreatorOptions;\r\n if (options.mode === \"client\") {\r\n grid.onSort.subscribe((e, args) => {\r\n sort(args.sortCol, args.sortAsc);\r\n });\r\n }\r\n // TODO: multi column sort\r\n }\r\n\r\n function setupHeaderButtons() {\r\n headerButtons = new HeaderButtons({});\r\n grid.registerPlugin(headerButtons);\r\n }\r\n\r\n function setupHeaderMenu() {\r\n headerMenu = new HeaderMenu({});\r\n grid.registerPlugin(headerMenu);\r\n headerMenu.onBeforeMenuShow.subscribe((e, args) => {\r\n const column: ISlickColumn = args.column;\r\n const menu = args.menu;\r\n if (column.sortable) {\r\n menu.items.push({\r\n title: UILang.grid.Sort + \" \" + UILang.grid.Asc,\r\n command: \"sort-asc\"\r\n });\r\n menu.items.push({\r\n title: UILang.grid.Sort + \" \" + UILang.grid.Desc,\r\n command: \"sort-desc\"\r\n });\r\n }\r\n if (column.filterable) {\r\n menu.items.push({\r\n title: UILang.grid.Filter,\r\n command: \"filter\"\r\n });\r\n if (filters.filter((f) => f.columnId === column.id).length > 0) {\r\n menu.items.push({\r\n title: UILang.grid.ClearFilter,\r\n command: \"clear-filter\"\r\n });\r\n }\r\n }\r\n });\r\n\r\n headerMenu.onCommand.subscribe((e, args) => {\r\n if (args.command === \"sort-asc\" || args.command === \"sort-desc\") {\r\n grid.onSort.notify({\r\n sortAsc: args.command === \"sort-asc\",\r\n sortCol: args.column,\r\n columnId: args.column.id,\r\n sortCols: [{ columnId: args.column.id, sortCol: args.column, sortAsc: args.command === \"sort-asc\" }],\r\n multiColumnSort: false\r\n }, e);\r\n // sort(args.column, args.command === \"sort-asc\");\r\n } else if (args.command === \"filter\") {\r\n const options = grid.getOptions() as ISlickCreatorOptions;\r\n if (options.showFilterDialog != null) {\r\n options.showFilterDialog(args.column, grid);\r\n } else {\r\n new ExcelFilter(grid).show(args.column);\r\n }\r\n } else if (args.command === \"clear-filter\") {\r\n clearFilter(args.column.id);\r\n }\r\n });\r\n\r\n }\r\n\r\n // refresh formulas depending on the given column\r\n function triggerFormula(column, item): void {\r\n const options = grid.getOptions() as ISlickCreatorOptions;\r\n const f = formulas[column];\r\n if (f) {\r\n for (let i = 0, l = f.length; i < l; i++) {\r\n if (options.setDataItemValueForColumn != null) {\r\n options.setDataItemValueForColumn(item, f[i].column, f[i].fnc(item, column));\r\n } else {\r\n item[f[i].column] = f[i].fnc(item, column);\r\n }\r\n }\r\n }\r\n }\r\n\r\n function handleEditCommand(item, column, editCommand) {\r\n const options = grid.getOptions() as ISlickCreatorOptions;\r\n const oldVal = grid.getDataItemValueForColumn(item, column);\r\n if (customCommandHandler) {\r\n customCommandHandler(item, column, editCommand);\r\n } else {\r\n editCommand.execute();\r\n }\r\n triggerFormula(column.field, item);\r\n dataView.updateItem(item[options.primaryKey], item);\r\n\r\n const afterEditResult = (grid as any).onAfterEdit.notify({\r\n grid,\r\n oldValue: oldVal,\r\n newValue: grid.getDataItemValueForColumn(item, column),\r\n column,\r\n item\r\n });\r\n\r\n if (afterEditResult === false) {\r\n if (options.setDataItemValueForColumn != null) {\r\n options.setDataItemValueForColumn(item, column, oldVal);\r\n } else {\r\n item[column.field] = oldVal;\r\n }\r\n triggerFormula(column.field, item);\r\n dataView.updateItem(item[options.primaryKey], item);\r\n }\r\n }\r\n\r\n function setHeight(height: number): void {\r\n $(container).height(height);\r\n grid.resizeCanvas();\r\n }\r\n\r\n function getHeight(): number {\r\n return $(container).height() as number;\r\n }\r\n\r\n function sort(column: ISlickColumn, sortAsc?: boolean) {\r\n\r\n function _comparer(a, b) {\r\n let x = grid.getDataItemValueForColumn(a, column);\r\n let y = grid.getDataItemValueForColumn(b, column);\r\n if (typeof x === \"string\" && typeof y === \"string\") {\r\n x = x.toLocaleLowerCase();\r\n y = y.toLocaleLowerCase();\r\n }\r\n if (x == null && y != null) {\r\n return -1;\r\n } else if (x != null && y == null) {\r\n return 1;\r\n } else {\r\n return (x === y ? 0 : (x > y ? 1 : -1));\r\n }\r\n }\r\n\r\n function _visibleComparer(a, b) {\r\n const x = column.formatter(0, 0, grid.getDataItemValueForColumn(a, column), column, a);\r\n const y = column.formatter(0, 0, grid.getDataItemValueForColumn(b, column), column, b);\r\n let xStr = (Object.prototype.toString.call(x) !== \"[object Object]\" ? (x as string) : (x as ISlickFormatterResult).text);\r\n let yStr = (Object.prototype.toString.call(y) !== \"[object Object]\" ? (y as string) : (y as ISlickFormatterResult).text);\r\n if (typeof x === \"string\" && typeof y === \"string\") {\r\n xStr = x.toLocaleLowerCase();\r\n yStr = y.toLocaleLowerCase();\r\n }\r\n return (xStr === yStr ? 0 : (xStr > yStr ? 1 : -1));\r\n }\r\n\r\n const comparer = column.comparer || (column.sortByVisibleValue ? _visibleComparer : _comparer);\r\n dataView.sort(comparer, sortAsc ? true : false);\r\n }\r\n\r\n function setData(newData: T[]) {\r\n data = newData;\r\n dataView.setItems(data);\r\n refresh();\r\n }\r\n\r\n function getData(): T[] {\r\n return data;\r\n }\r\n\r\n function refreshData() {\r\n // var selrows = self.getSelectedRows();\r\n dataView.setItems(data);\r\n // self.setSelectedRows(selrows);\r\n refresh();\r\n }\r\n\r\n function refresh() {\r\n grid.invalidate();\r\n }\r\n\r\n function addFormula(field: string, fnc: (row: T, grid: IJSLGrid<T>, field: string) => any,\r\n usedColumns: string[]) {\r\n formulaObjects.push({ fnc, column: field });\r\n for (let i = 0; i < usedColumns.length; i++) {\r\n if (!formulas[usedColumns[i]]) {\r\n formulas[usedColumns[i]] = [];\r\n }\r\n formulas[usedColumns[i]].push({ fnc, column: field });\r\n }\r\n }\r\n\r\n /**\r\n * returns the string representation of a value based on column settings\r\n */\r\n function getFormattedValue(column: ISlickColumn, value: any, item?: T): string {\r\n const formatter = column.formatter || TextFormatter;\r\n const formatterResult = formatter(0, 0, value, column, item, grid);\r\n return (Object.prototype.toString.call(formatterResult) !== \"[object Object]\" ?\r\n (formatterResult as string) :\r\n ((formatterResult as ISlickFormatterResult).text));\r\n }\r\n\r\n function getContentWidth(column: ISlickColumn, row: number): number {\r\n const item = dataView.getItem(row);\r\n const html = getFormattedValue(column, grid.getDataItemValueForColumn(item, column), item);\r\n if (html.indexOf(\"<\") >= 0) {\r\n return calcLengthInternal(html, true) + 12;\r\n } else {\r\n if (convertElement == null) {\r\n convertElement = document.createElement(\"span\");\r\n }\r\n convertElement.innerHTML = html;\r\n return calcTextLength(convertElement.textContent) + 12;\r\n }\r\n }\r\n\r\n let measureElement: HTMLSpanElement;\r\n let convertElement: HTMLSpanElement;\r\n const charWidth = {};\r\n\r\n function calcTextLength(text: string) {\r\n let result = 0;\r\n for (let i = 0; i < text.length; i++) {\r\n const c = text[i];\r\n let w = charWidth[c];\r\n if (w == null) {\r\n charWidth[c] = w = calcLengthInternal(c, false);\r\n }\r\n result += w;\r\n }\r\n return result;\r\n }\r\n\r\n function calcLengthInternal(c: string, isHTML: boolean): number {\r\n if (measureElement == null) {\r\n measureElement = document.createElement(\"span\");\r\n measureElement.style.top = \"-100000px\";\r\n measureElement.style.position = \"absolute\";\r\n measureElement.style.whiteSpace = \"pre\";\r\n document.body.appendChild(measureElement);\r\n grid.onBeforeDestroy.subscribe(() => {\r\n if (measureElement.parentElement != null) {\r\n measureElement.parentElement.removeChild(measureElement);\r\n }\r\n });\r\n }\r\n if (isHTML) {\r\n measureElement.innerHTML = c;\r\n } else {\r\n measureElement.textContent = c;\r\n }\r\n\r\n return measureElement.getBoundingClientRect().width;\r\n }\r\n\r\n function fitToContent(column: ISlickColumn): void {\r\n let width = 10;\r\n for (let idx = 0, len = grid.getDataLength(); idx < len; idx++) {\r\n //const d = grid.getDataItem(idx);\r\n width = Math.max(width, getContentWidth(column, idx));\r\n }\r\n column.width = width;\r\n grid.setColumns(grid.getColumns());\r\n // TODO: raise column resize event\r\n // TODO (2): find more performant way to refresh columns\r\n }\r\n\r\n function triggerAllFormulas(): void {\r\n\r\n if (formulaObjects.length === 0) {\r\n return;\r\n }\r\n for (let j = 0; j < formulaObjects.length; j++) {\r\n for (let i = 0; i < data.length; i++) {\r\n const val = formulaObjects[j].fnc(data[i], grid, formulaObjects[j].column);\r\n data[i][formulaObjects[j].column] = val;\r\n }\r\n }\r\n refreshData();\r\n }\r\n\r\n function columnHasFilter(columnId: string): boolean {\r\n for (let i = 0, l = (filters ? filters.length : 0); i < l; i++) {\r\n if (filters[i].columnId === columnId) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n function refreshDataItem(item: T): void {\r\n const options = grid.getOptions() as ISlickCreatorOptions;\r\n dataView.updateItem(item[options.primaryKey], item);\r\n // formula refresh\r\n for (const f in formulas) {\r\n if (formulas.hasOwnProperty(f)) {\r\n triggerFormula(f, item);\r\n }\r\n }\r\n grid.updateRow(dataView.getRowByItem(item));\r\n }\r\n\r\n function addFilter(filter: {\r\n field: string,\r\n columnId?: string,\r\n match: (item: T, field: string) => boolean, combine?: \"or\" | \"and\"\r\n }, dontrefresh?: boolean): void {\r\n let filterArray;\r\n if (Array.isArray(filter)) {\r\n filterArray = filter;\r\n } else {\r\n filterArray = [filter];\r\n }\r\n for (let idx = 0; idx < filterArray.length; idx++) {\r\n // add filter\r\n filters.push(filterArray[idx]);\r\n }\r\n if (!dontrefresh) {\r\n refreshFilters();\r\n }\r\n }\r\n\r\n function setFilters(f: Array<{\r\n field: string,\r\n columnId?: string,\r\n match: (item: T, field: string) => boolean, combine?: \"or\" | \"and\"\r\n }>,\r\n dontrefresh?: boolean): void {\r\n filters = f;\r\n if (!dontrefresh) {\r\n refreshFilters();\r\n }\r\n }\r\n\r\n function getFilters() {\r\n return filters;\r\n }\r\n\r\n function clearFilter(columnId?: string, dontrefresh?: boolean): void {\r\n if (columnId === undefined) { // clear all filters\r\n filters.length = 0;\r\n } else {\r\n for (let i = 0; i < filters.length; i++) {\r\n if (filters[i].columnId === columnId) {\r\n filters.splice(i, 1);\r\n i--;\r\n }\r\n }\r\n }\r\n if (!dontrefresh) {\r\n refreshFilters();\r\n }\r\n }\r\n\r\n function refreshFilters(noColumnHeaderRefresh?: boolean): void {\r\n const options = grid.getOptions() as ISlickCreatorOptions;\r\n\r\n function client_filter(item, args): boolean {\r\n const filterArray = args;\r\n // no filter present -> show all rows\r\n if (filterArray.length === 0) {\r\n return true;\r\n }\r\n\r\n if (filterArray.length === 1) {\r\n return filterArray[0].match.call(null, item, filterArray[0].field);\r\n } else {\r\n let result = true;\r\n let i = 0;\r\n while (i < filterArray.length) {\r\n let orResult = false;\r\n while (i < filterArray.length) { // combine or(s)\r\n if (orResult || filterArray[i].match.call(null, item, filterArray[i].field)) {\r\n orResult = true;\r\n }\r\n if (filterArray[i].combine !== \"or\") {\r\n break;\r\n } else {\r\n i++;\r\n }\r\n }\r\n if (!orResult) {\r\n result = false;\r\n break;\r\n }\r\n i++;\r\n }\r\n return result;\r\n }\r\n }\r\n\r\n if (options.mode === \"client\") {\r\n dataView.setFilterArgs(filters);\r\n dataView.setFilter(client_filter);\r\n }\r\n // redraw columns\r\n if (!noColumnHeaderRefresh) {\r\n grid.setColumns(grid.getColumns());\r\n }\r\n (grid as any).onFiltersChanged.notify();\r\n }\r\n\r\n function getSelectedItems(): T[] {\r\n const selRows = grid.getSelectedRows();\r\n const rows = [];\r\n for (let i = 0; i < selRows.length; i++) {\r\n const rowIdx = selRows[i];\r\n const toPush = dataView.getItem(rowIdx);\r\n if (toPush !== undefined && !(toPush as any).__group && !(toPush as any).__groupTotals) {\r\n rows.push(toPush);\r\n }\r\n }\r\n return rows;\r\n }\r\n\r\n function getHeaderMenu(): any { // TODO -> type\r\n return headerMenu;\r\n }\r\n\r\n // function setHierachy(o: IGridTreeOptions): GridTree {\r\n // return new GridTree(this, o);\r\n // }\r\n\r\n createMe();\r\n\r\n return $.shallowExtend(grid, {\r\n dataView,\r\n setHeight,\r\n getHeight,\r\n sort,\r\n refreshData,\r\n setData,\r\n getData,\r\n refresh,\r\n addFormula,\r\n getFormattedValue,\r\n getContentWidth,\r\n fitToContent,\r\n triggerAllFormulas,\r\n columnHasFilter,\r\n refreshDataItem,\r\n addFilter,\r\n setFilters,\r\n getFilters,\r\n clearFilter,\r\n refreshFilters,\r\n getSelectedItems,\r\n getHeaderMenu // ,\r\n // setHierachy\r\n });\r\n}\r\n","/**\r\n * @license\r\n * (c) 2009-2016 Michael Leibman\r\n * michael{dot}leibman{at}gmail{dot}com\r\n * http://github.com/mleibman/slickgrid\r\n *\r\n * Distributed under MIT license.\r\n * All rights reserved.\r\n *\r\n * SlickGrid v2.4\r\n */\r\n\r\nimport { jQueryReplacement, IjQueryWrapper, IjQueryReplacement } from \"../core/jq\";\r\nimport { Slick, ISlickColumn, ISlickFormatterResult, ISlickFormatter, ISlickEvent } from \"./slick.core\";\r\nimport \"./slick.grid.css\";\r\nimport \"./slick-default-theme.css\";\r\nimport { Resizable } from \"../interaction/resizable\";\r\nimport { EventHandler } from \"../interaction/eventhandler\";\r\n\r\nexport interface ISlickGridOptions {\r\n syncColumnCellResize?: boolean;\r\n alwaysShowVerticalScroll?: boolean;\r\n alwaysShowHorizontalScroll?: boolean;\r\n alwaysAllowHorizontalScroll?: boolean;\r\n explicitInitialization?: boolean;\r\n rowHeight?: number;\r\n defaultColumnWidth?: number;\r\n enableAddRow?: boolean;\r\n leaveSpaceForNewRows?: boolean;\r\n editable?: boolean;\r\n autoEdit?: boolean;\r\n suppressActiveCellChangeOnEdit?: boolean;\r\n enableCellNavigation?: boolean;\r\n enableColumnReorder?: boolean;\r\n asyncEditorLoading?: boolean;\r\n asyncEditorLoadDelay?: number;\r\n forceFitColumns?: boolean;\r\n enableAsyncPostRender?: boolean;\r\n asyncPostRenderDelay?: number;\r\n enableAsyncPostRenderCleanup?: boolean;\r\n asyncPostRenderCleanupDelay?: number;\r\n autoHeight?: boolean;\r\n editorLock?: any;\r\n showHeaderRow?: boolean;\r\n headerRowHeight?: number;\r\n createFooterRow?: boolean;\r\n showFooterRow?: boolean;\r\n footerRowHeight?: number;\r\n createPreHeaderPanel?: boolean;\r\n showPreHeaderPanel?: boolean;\r\n preHeaderPanelHeight?: number;\r\n showTopPanel?: boolean;\r\n topPanelHeight?: number;\r\n formatterFactory?: { getFormatter: (column: ISlickColumn, row?: number) => ISlickFormatter };\r\n editorFactory?: { getEditor: (column: ISlickColumn, row?: number) => any };\r\n cellFlashingCssClass?: string;\r\n selectedCellCssClass?: string;\r\n multiSelect?: boolean;\r\n enableTextSelectionOnCells?: boolean;\r\n dataItemColumnValueExtractor?: (item: any, columnDef: ISlickColumn) => any;\r\n frozenBottom?: boolean;\r\n frozenColumn?: number;\r\n frozenRow?: number;\r\n fullWidthRows?: boolean;\r\n multiColumnSort?: boolean;\r\n numberedMultiColumnSort?: boolean;\r\n tristateMultiColumnSort?: boolean;\r\n sortColNumberInSeparateSpan?: boolean;\r\n defaultFormatter?: ISlickFormatter;\r\n forceSyncScrolling?: boolean;\r\n addNewRowCssClass?: string;\r\n preserveCopiedSelectionOnPaste?: boolean;\r\n showCellSelection?: boolean;\r\n viewportClass?: string;\r\n minRowBuffer?: number;\r\n emulatePagingWhenScrolling?: boolean;\r\n editorCellNavOnLRKeys?: boolean;\r\n doPaging?: boolean;\r\n resizeHandleWidth?: string;\r\n variableRowHeight?: boolean;\r\n editCommandHandler?: (item: any, column: ISlickColumn, editCommand: any) => void;\r\n resizeDelta?: number;\r\n dragDelta?: number;\r\n}\r\n\r\ninterface ICacheEntry {\r\n rowNode?: HTMLElement[];\r\n\r\n // colSpans of rendered cells (by column idx).\r\n // can also be used for checking whether a cell has been rendered.\r\n cellColSpans: number[];\r\n\r\n // cell nodes (by column idx). Lazy-populated by ensureCellNodesInRowsCache().\r\n cellNodesByColumnIdx: HTMLElement[];\r\n\r\n // column indices of cell nodes that have been rendered, but not yet indexed in\r\n // cellNodesByColumnIdx. These are in the same order as cell nodes added at the\r\n // end of the row.\r\n cellRenderQueue: number[];\r\n}\r\n\r\nexport interface ISlickGrid<T> {\r\n \"slickGridVersion\": string;\r\n\r\n /* events */\r\n \"onScroll\": ISlickEvent<{ scrollLeft: number, scrollTop: number }>;\r\n \"onSort\": ISlickEvent<{\r\n multiColumnSort: boolean,\r\n columnId?: string,\r\n sortCol?: ISlickColumn,\r\n sortAsc?: boolean,\r\n sortCols?: Array<{\r\n columnId?: string,\r\n sortCol?: ISlickColumn\r\n sortAsc?: boolean\r\n }>\r\n }>;\r\n \"onAppendRow\": ISlickEvent<{ row: number, item: T }>;\r\n \"onBeforeRemoveRow\": ISlickEvent<{ row: number, dom: HTMLDivElement }>;\r\n \"onClick\": ISlickEvent<{ row: number, cell: number }>;\r\n \"onDblClick\": ISlickEvent<{ row: number, cell: number }>;\r\n \"onColumnsResized\": ISlickEvent<{cell: number, width: number, previousWidth: number, column: ISlickColumn}[]>;\r\n \"onAppendCell\": ISlickEvent<{ row: number, cell: number, value: any, item: T, column: ISlickColumn, dom: HTMLDivElement }>;\r\n \"onCellChange\": ISlickEvent<{ row: number, cell: number, item: T, value: any }>;\r\n \"onAddNewRow\": ISlickEvent<{ item: T, column: ISlickColumn }>;\r\n \"onHeaderRowCellRendered\": ISlickEvent<{ node: HTMLElement, column: ISlickColumn, grid: ISlickGrid<T> }>;\r\n \"onFooterRowCellRendered\": ISlickEvent<{ node: HTMLElement, column: ISlickColumn, grid: ISlickGrid<T> }>;\r\n \"onHeaderCellRendered\": ISlickEvent<{ node: HTMLElement, column: ISlickColumn, grid: ISlickGrid<T> }>;\r\n \"onBeforeEditCell\": ISlickEvent<{ row: number, cell: number, item: T, column: ISlickColumn }>;\r\n \"onSelectedRowsChanged\": ISlickEvent<{ rows: number[] }>;\r\n \"onBeforeDestroy\": ISlickEvent<any>;\r\n \"onColumnsReordered\": ISlickEvent<any>;\r\n \"onViewportChanged\": ISlickEvent<any>;\r\n \"onActiveCellChanged\": ISlickEvent<{ row: number, cell: number }>;\r\n \"onDragInit\": ISlickEvent<any>;\r\n \"onDragStart\": ISlickEvent<any>;\r\n \"onDrag\": ISlickEvent<any>;\r\n \"onDragEnd\": ISlickEvent<any>;\r\n\r\n\r\n /* methods */\r\n \"registerPlugin\": (plugin) => void;\r\n \"init\": () => void;\r\n \"resizeCanvas\": () => void;\r\n \"invalidate\": () => void;\r\n \"invalidateAllRows\": () => void;\r\n \"updateRow\": (row: number) => void;\r\n \"getColumns\": () => ISlickColumn[];\r\n \"setColumns\": (columns: ISlickColumn[]) => void;\r\n \"getSelectedRows\": () => number[];\r\n \"setSelectedRows\": (rows: number[]) => void;\r\n \"invalidateRows\": (rows: number[]) => void;\r\n \"render\": () => void;\r\n \"updateRowCount\": () => void;\r\n \"getColumnIndex\": (columnId: string) => number;\r\n \"scrollRowIntoView\": (row: number, doPaging?: boolean) => void;\r\n \"flashCell\": (row: number, cell: number, speed?: number, times?: number) => void;\r\n \"getActiveCell\": () => { row: number, cell: number };\r\n \"setActiveCell\": (row: number, cell: number, opt_editMode?: boolean,\r\n preClickModeOn?: boolean, suppressActiveCellChangedEvent?: boolean) => void;\r\n \"gotoCell\": (row: number, cell: number, forceEdit?: boolean, e?: any) => void;\r\n \"destroy\": () => void;\r\n \"getColumnById\": (id: string) => ISlickColumn;\r\n \"getHeaderColumnWidthDiff\": () => number;\r\n \"getPreHeaderPanel\": () => HTMLDivElement;\r\n \"getPreHeaderPanelRight\": () => HTMLDivElement;\r\n \"getHeadersWidth\": () => number;\r\n \"getViewportNode\": () => HTMLDivElement;\r\n \"updateColumnHeader\": (columnId: string, title: string, toolTip: string) => void;\r\n \"setSortColumn\": (columnId: string, ascending?: boolean) => void;\r\n \"setSortColumns\": (columns: Array<{ columnId: string, ascending?: boolean }>) => void;\r\n \"getSortColumns\": () => Array<{ columnId: string, ascending?: boolean }>;\r\n \"autosizeColumns\": () => void;\r\n \"setOptions\": (args: ISlickGridOptions, supressRender?: boolean) => void;\r\n \"getOptions\": () => ISlickGridOptions;\r\n \"scrollRowToTop\": (row: number) => void;\r\n \"scrollCellIntoView\": (row: number, cell: number, doPaging?: boolean) => void;\r\n \"scrollColumnIntoView\": (cell: number) => void;\r\n \"getCellFromPoint\": (x: number, y: number) => { row: number, cell: number };\r\n \"getCellFromEvent\": (e: any, dd: any) => { row: number, cell: number };\r\n \"getActiveCellNode\": () => HTMLElement;\r\n // \"unregisterPlugin\": unregisterPlugin,\r\n // \"getPluginByName\": getPluginByName,\r\n \"getDataLength\": () => number;\r\n \"getDataItem\": (idx: number) => T;\r\n \"getSelectionModel\": () => any; // TODO\r\n \"setSelectionModel\": (model: any) => void; // TODO\r\n \"getContainerNode\": () => HTMLDivElement;\r\n \"getDataItemValueForColumn\": (item: T, columnDef: ISlickColumn) => any;\r\n \"getViewport\": (viewPortTop?: number, viewPortLeft?: number) => { top: number, bottom: number, leftPx: number, rightPx: number };\r\n \"getRenderedRange\": (viewportTop?: number, viewportLeft?: number) => { top: number, bottom: number, leftPx: number, rightPx: number };\r\n \"getEditController\": () => { commitCurrentEdit: () => boolean, cancelCurrentEdit: () => boolean };\r\n\r\n // // Events\r\n // \"onHeaderContextMenu\": new Slick.Event(),\r\n // \"onHeaderClick\": new Slick.Event(),\r\n // ,\r\n // \"onBeforeHeaderCellDestroy\": new Slick.Event(),\r\n // \"onBeforeHeaderRowCellDestroy\": new Slick.Event(),\r\n // \"onBeforeFooterRowCellDestroy\": new Slick.Event(),\r\n // \"onMouseEnter\": new Slick.Event(),\r\n // \"onMouseLeave\": new Slick.Event(),\r\n // \"onContextMenu\": new Slick.Event(),\r\n // \"onKeyDown\": new Slick.Event(),\r\n // \"onValidationError\": new Slick.Event(),\r\n // ,\r\n // \"onBeforeCellEditorDestroy\": new Slick.Event(),\r\n // \r\n // \"onActiveCellPositionChanged\": new Slick.Event(),\r\n // \"onDragInit\": new Slick.Event(),\r\n // \"onDragStart\": new Slick.Event(),\r\n // \"onDrag\": new Slick.Event(),\r\n // \"onDragEnd\": new Slick.Event(),\r\n // \"onCellCssStylesChanged\": new Slick.Event(),\r\n // \"onAutosizeColumns\": new Slick.Event(),\r\n // \"onRendered\": new Slick.Event(),\r\n\r\n // // Methods\r\n // \"setData\": setData,\r\n // \"getData\": getData,\r\n\r\n // \"updatePagingStatusFromView\": updatePagingStatusFromView,\r\n // \"applyFormatResultToCellNode\": applyFormatResultToCellNode,\r\n\r\n \"invalidateRow\": (row: number) => void;\r\n // \"invalidateAllRows\": invalidateAllRows,\r\n // \"updateCell\": updateCell,\r\n // \"updateRow\": updateRow,\r\n\r\n \"getCanvasNode\": (columnIdOrIdx?: number, rowIndex?: number) => HTMLElement;\r\n // \"getUID\": getUID,\r\n //\r\n // \"getScrollbarDimensions\": getScrollbarDimensions,\r\n // ,\r\n // \"getCanvasWidth\": getCanvasWidth,\r\n // \"getCanvases\": getCanvases,\r\n // \"getActiveCanvasNode\": getActiveCanvasNode,\r\n // \"setActiveCanvasNode\": setActiveCanvasNode,\r\n // \"getActiveViewportNode\": getActiveViewportNode,\r\n // \"setActiveViewportNode\": setActiveViewportNode,\r\n \"focus\": () => void;\r\n // \"scrollTo\": scrollTo,\r\n\r\n \"getActiveCellPosition\": () => { top: number,\r\n left: number,\r\n bottom: number,\r\n right: number,\r\n width: number,\r\n height: number,\r\n visible: boolean};\r\n \"resetActiveCell\": () => void;\r\n // \"editActiveCell\": makeActiveCellEditable,\r\n // \"getCellEditor\": getCellEditor,\r\n // \"getCellNode\": getCellNode,\r\n \"getCellNodeBox\": (row: number, cell: number) => {bottom: number, left: number, top: number, right: number, height: number, width: number};\r\n \"canCellBeSelected\": (row: number, cell: number) => boolean;\r\n // \"canCellBeActive\": canCellBeActive,\r\n // \"navigatePrev\": navigatePrev,\r\n // \"navigateNext\": navigateNext,\r\n // \"navigateUp\": navigateUp,\r\n // \"navigateDown\": navigateDown,\r\n // \"navigateLeft\": navigateLeft,\r\n // \"navigateRight\": navigateRight,\r\n // \"navigatePageUp\": navigatePageUp,\r\n // \"navigatePageDown\": navigatePageDown,\r\n // \"navigateTop\": navigateTop,\r\n // \"navigateBottom\": navigateBottom,\r\n // \"navigateRowStart\": navigateRowStart,\r\n // \"navigateRowEnd\": navigateRowEnd,\r\n // \"getTopPanel\": getTopPanel,\r\n // \"setTopPanelVisibility\": setTopPanelVisibility,\r\n //\r\n // \"setPreHeaderPanelVisibility\": setPreHeaderPanelVisibility,\r\n // \"getHeader\": getHeader,\r\n // \"getHeaderColumn\": getHeaderColumn,\r\n // \"setHeaderRowVisibility\": setHeaderRowVisibility,\r\n // \"getHeaderRow\": getHeaderRow,\r\n // \"getHeaderRowColumn\": getHeaderRowColumn,\r\n // \"setFooterRowVisibility\": setFooterRowVisibility,\r\n // \"getFooterRow\": getFooterRow,\r\n // \"getFooterRowColumn\": getFooterRowColumn,\r\n \"getGridPosition\": () => { top: number,\r\n left: number,\r\n bottom: number,\r\n right: number,\r\n width: number,\r\n height: number,\r\n visible: boolean};\r\n // \"addCellCssStyles\": addCellCssStyles,\r\n // \"setCellCssStyles\": setCellCssStyles,\r\n // \"removeCellCssStyles\": removeCellCssStyles,\r\n // \"getCellCssStyles\": getCellCssStyles,\r\n // \"getFrozenRowOffset\": getFrozenRowOffset,\r\n\r\n // // IEditor implementation\r\n // \"getEditorLock\": getEditorLock\r\n}\r\n\r\nlet $: IjQueryReplacement = Slick.$;\r\n\r\n$.deepExtend(Slick, { Grid: SlickGrid });\r\n\r\n// shared across all grids on the page\r\nvar scrollbarDimensions;\r\nvar maxSupportedCssHeight; // = 500000; // browser's breaking point\r\n\r\n\r\nexport function SlickGrid(container: HTMLDivElement | string, data, columns: ISlickColumn[], options: ISlickGridOptions) {\r\n // settings\r\n var defaults: ISlickGridOptions = {\r\n // syncColumnCellResize: true, // TODO: remove this option\r\n alwaysShowVerticalScroll: false,\r\n alwaysShowHorizontalScroll: false,\r\n alwaysAllowHorizontalScroll: false,\r\n explicitInitialization: false,\r\n rowHeight: 28,\r\n defaultColumnWidth: 80,\r\n enableAddRow: false,\r\n leaveSpaceForNewRows: false,\r\n editable: false,\r\n autoEdit: true,\r\n suppressActiveCellChangeOnEdit: false,\r\n enableCellNavigation: true,\r\n enableColumnReorder: true,\r\n asyncEditorLoading: false,\r\n asyncEditorLoadDelay: 100,\r\n forceFitColumns: false,\r\n enableAsyncPostRender: false,\r\n asyncPostRenderDelay: 50,\r\n enableAsyncPostRenderCleanup: false,\r\n asyncPostRenderCleanupDelay: 40,\r\n autoHeight: false,\r\n editorLock: Slick.GlobalEditorLock,\r\n showHeaderRow: false,\r\n headerRowHeight: 28,\r\n createFooterRow: false,\r\n showFooterRow: false,\r\n footerRowHeight: 28,\r\n createPreHeaderPanel: false,\r\n showPreHeaderPanel: false,\r\n preHeaderPanelHeight: 28,\r\n showTopPanel: false,\r\n topPanelHeight: 28,\r\n formatterFactory: null,\r\n editorFactory: null,\r\n cellFlashingCssClass: \"flashing\",\r\n selectedCellCssClass: \"selected\",\r\n multiSelect: true,\r\n enableTextSelectionOnCells: false,\r\n dataItemColumnValueExtractor: null,\r\n frozenBottom: false,\r\n frozenColumn: -1,\r\n frozenRow: -1,\r\n fullWidthRows: false,\r\n multiColumnSort: false,\r\n numberedMultiColumnSort: false,\r\n tristateMultiColumnSort: false,\r\n sortColNumberInSeparateSpan: false,\r\n defaultFormatter: defaultFormatter,\r\n forceSyncScrolling: false,\r\n addNewRowCssClass: \"new-row\",\r\n preserveCopiedSelectionOnPaste: false,\r\n showCellSelection: true,\r\n viewportClass: null,\r\n minRowBuffer: 3,\r\n emulatePagingWhenScrolling: true, // when scrolling off bottom of viewport, place new row at top of viewport\r\n editorCellNavOnLRKeys: false, // TODO: change to true per default?\r\n doPaging: true,\r\n resizeDelta: 2, // NEW\r\n dragDelta: 3, // NEW\r\n };\r\n\r\n var columnDefaults = {\r\n name: \"\",\r\n resizable: true,\r\n sortable: false,\r\n minWidth: 30,\r\n width: undefined,\r\n rerenderOnResize: false,\r\n headerCssClass: null,\r\n defaultSortAsc: true,\r\n focusable: true,\r\n selectable: true\r\n };\r\n\r\n // scroller\r\n var th; // virtual height\r\n var h; // real scrollable height\r\n var ph; // page height\r\n var n; // number of pages\r\n var cj; // \"jumpiness\" coefficient\r\n\r\n var page = 0; // current page\r\n var offset = 0; // current page offset\r\n var vScrollDir = 1;\r\n // var programmaticScrollingTimeout;\r\n\r\n // private\r\n var initialized = false;\r\n var $container: IjQueryWrapper;\r\n var uid = \"slickgrid_\" + Math.round(1000000 * Math.random());\r\n var self = this;\r\n var $focusSink: IjQueryWrapper, $focusSink2: IjQueryWrapper;\r\n var $groupHeaders: IjQueryWrapper = $();\r\n var $headerScroller: IjQueryWrapper;\r\n var $headers: IjQueryWrapper;\r\n var $headerRow: IjQueryWrapper, $headerRowScroller: IjQueryWrapper, $headerRowSpacerL: IjQueryWrapper, $headerRowSpacerR: IjQueryWrapper;\r\n var $footerRow: IjQueryWrapper, $footerRowScroller: IjQueryWrapper, $footerRowSpacerL: IjQueryWrapper, $footerRowSpacerR: IjQueryWrapper;\r\n var $preHeaderPanel: IjQueryWrapper, $preHeaderPanelScroller: IjQueryWrapper, $preHeaderPanelSpacer: IjQueryWrapper;\r\n var $preHeaderPanelR: IjQueryWrapper, $preHeaderPanelScrollerR: IjQueryWrapper, $preHeaderPanelSpacerR: IjQueryWrapper;\r\n var $topPanelScroller: IjQueryWrapper;\r\n var $topPanel: IjQueryWrapper;\r\n var $viewport: IjQueryWrapper;\r\n var $canvas: IjQueryWrapper;\r\n var $style: IjQueryWrapper;\r\n var $boundAncestors: IjQueryWrapper;\r\n // var treeColumns;\r\n var stylesheet, columnCssRulesL, columnCssRulesR;\r\n var viewportH: number, viewportW: number;\r\n var canvasWidth: number, canvasWidthL: number, canvasWidthR: number;\r\n var headersWidth: number, headersWidthL: number, headersWidthR: number;\r\n var viewportHasHScroll: boolean, viewportHasVScroll: boolean;\r\n var headerColumnWidthDiff = 0, headerColumnHeightDiff = 0, // border+padding\r\n cellWidthDiff = 0, cellHeightDiff = 0, jQueryNewWidthBehaviour = false;\r\n var absoluteColumnMinWidth;\r\n var hasFrozenRows = false;\r\n var frozenRowsHeight = 0;\r\n var actualFrozenRow = -1;\r\n var paneTopH = 0;\r\n var paneBottomH = 0;\r\n var viewportTopH = 0;\r\n var viewportBottomH = 0;\r\n var topPanelH = 0;\r\n var headerRowH = 0;\r\n var footerRowH = 0;\r\n\r\n var tabbingDirection = 1;\r\n var $activeCanvasNode: IjQueryWrapper;\r\n var $activeViewportNode: IjQueryWrapper;\r\n var activePosX;\r\n var activeRow, activeCell;\r\n var activeCellNode: HTMLElement = null;\r\n var currentEditor = null;\r\n var serializedEditorValue;\r\n var editController;\r\n\r\n var rowsCache: { [key: string]: ICacheEntry } = {};\r\n var rowPositionCache = [];\r\n\r\n var renderedRows = 0;\r\n var numVisibleRows = 0;\r\n var prevScrollTop = 0;\r\n var scrollTop = 0;\r\n var lastRenderedScrollTop = 0;\r\n var lastRenderedScrollLeft = 0;\r\n var prevScrollLeft = 0;\r\n var scrollLeft = 0;\r\n\r\n var selectionModel;\r\n var selectedRows = [];\r\n\r\n var plugins = [];\r\n var cellCssClasses = {};\r\n\r\n var columnsById = {};\r\n var sortColumns = [];\r\n var columnPosLeft = [];\r\n var columnPosRight = [];\r\n\r\n var pagingActive = false;\r\n var pagingIsLastPage = false;\r\n\r\n var scrollThrottle = ActionThrottle(render, 50);\r\n\r\n // async call handles\r\n var h_editorLoader = null;\r\n var h_render = null;\r\n var h_postrender = null;\r\n var h_postrenderCleanup = null;\r\n var postProcessedRows = {};\r\n var postProcessToRow = null;\r\n var postProcessFromRow = null;\r\n var postProcessedCleanupQueue = [];\r\n var postProcessgroupId = 0;\r\n\r\n var $paneHeaderL: IjQueryWrapper;\r\n var $paneHeaderR: IjQueryWrapper;\r\n var $paneTopL: IjQueryWrapper;\r\n var $paneTopR: IjQueryWrapper;\r\n var $paneBottomL: IjQueryWrapper;\r\n var $paneBottomR: IjQueryWrapper;\r\n\r\n var $headerScrollerL: IjQueryWrapper;\r\n var $headerScrollerR: IjQueryWrapper;\r\n\r\n var $headerL: IjQueryWrapper;\r\n var $headerR: IjQueryWrapper;\r\n\r\n var $groupHeadersL: IjQueryWrapper[];\r\n var $groupHeadersR: IjQueryWrapper[];\r\n\r\n var $headerRowScrollerL: IjQueryWrapper;\r\n var $headerRowScrollerR: IjQueryWrapper;\r\n\r\n var $footerRowScrollerL: IjQueryWrapper;\r\n var $footerRowScrollerR: IjQueryWrapper;\r\n\r\n var $headerRowL: IjQueryWrapper;\r\n var $headerRowR: IjQueryWrapper;\r\n\r\n var $footerRowL: IjQueryWrapper;\r\n var $footerRowR: IjQueryWrapper;\r\n\r\n var $topPanelScrollerL: IjQueryWrapper;\r\n var $topPanelScrollerR: IjQueryWrapper;\r\n\r\n var $topPanelL: IjQueryWrapper;\r\n var $topPanelR: IjQueryWrapper;\r\n\r\n var $viewportTopL: IjQueryWrapper;\r\n var $viewportTopR: IjQueryWrapper;\r\n var $viewportBottomL: IjQueryWrapper;\r\n var $viewportBottomR: IjQueryWrapper;\r\n\r\n var $canvasTopL: IjQueryWrapper;\r\n var $canvasTopR: IjQueryWrapper;\r\n var $canvasBottomL: IjQueryWrapper;\r\n var $canvasBottomR: IjQueryWrapper;\r\n\r\n var $viewportScrollContainerX: IjQueryWrapper;\r\n var $viewportScrollContainerY: IjQueryWrapper;\r\n var $headerScrollContainer: IjQueryWrapper;\r\n var $headerRowScrollContainer: IjQueryWrapper;\r\n var $footerRowScrollContainer: IjQueryWrapper;\r\n\r\n var scrollEventHandler;\r\n\r\n // store css attributes if display:none is active in container or parent\r\n var cssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" };\r\n var $hiddenParents: IjQueryWrapper;\r\n var oldProps = [];\r\n // var columnResizeDragging = false;\r\n // var columnDragging = false;\r\n\r\n //////////////////////////////////////////////////////////////////////////////////////////////\r\n // initialization\r\n\r\n function init() {\r\n $container = $(container);\r\n if ($container.length < 1) {\r\n throw new Error(\"SlickGrid requires a valid container, \" + container + \" does not exist in the DOM.\");\r\n }\r\n\r\n if (options.showFooterRow && !options.createFooterRow) {\r\n throw new Error(\"option showFooterRow requires option createFooterRow to be set\");\r\n }\r\n\r\n cacheCssForHiddenInit();\r\n\r\n // calculate these only once and share between grid instances\r\n maxSupportedCssHeight = maxSupportedCssHeight || getMaxSupportedCssHeight();\r\n\r\n options = $.shallowExtend({}, defaults, options);\r\n validateAndEnforceOptions();\r\n columnDefaults.width = options.defaultColumnWidth;\r\n\r\n // treeColumns = new Slick.TreeColumns(columns);\r\n // columns = treeColumns.extractColumns();\r\n\r\n updateColumnProps();\r\n\r\n //// validate loaded JavaScript modules against requested options\r\n // if (options.enableColumnReorder && !$.fn.sortable) {\r\n // throw new Error(\"SlickGrid's 'enableColumnReorder = true' option requires jquery-ui.sortable module to be loaded\");\r\n // }\r\n\r\n editController = {\r\n \"commitCurrentEdit\": commitCurrentEdit,\r\n \"cancelCurrentEdit\": cancelCurrentEdit\r\n };\r\n\r\n $container\r\n .empty()\r\n .css(\"overflow\", \"hidden\")\r\n .css(\"outline\", 0)\r\n .addClass(uid)\r\n .addClass(\"slickgrid\")\r\n .addClass(\"ui-widget\");\r\n\r\n const isTouch = ((\"ontouchstart\" in window) || ((navigator as any).msMaxTouchPoints > 0));\r\n if (isTouch) {\r\n $container.addClass(\"js-touch\");\r\n }\r\n // $container.addClass(\"js-touch\");\r\n\r\n // set up a positioning container if needed\r\n if (!/relative|absolute|fixed/.test($container.css(\"position\"))) {\r\n $container.css(\"position\", \"relative\");\r\n }\r\n\r\n $focusSink = $(\"<div tabIndex='0' hideFocus style='position:fixed;width:0;height:0;top:0;left:0;outline:0;'></div>\").appendTo($container);\r\n\r\n // containers used for scrolling frozen columns and rows\r\n $paneHeaderL = $(\"<div class='slick-pane slick-pane-header slick-pane-left' tabIndex='0' />\").appendTo($container);\r\n $paneHeaderR = $(\"<div class='slick-pane slick-pane-header slick-pane-right' tabIndex='0' />\").appendTo($container);\r\n $paneTopL = $(\"<div class='slick-pane slick-pane-top slick-pane-left' tabIndex='0' />\").appendTo($container);\r\n $paneTopR = $(\"<div class='slick-pane slick-pane-top slick-pane-right' tabIndex='0' />\").appendTo($container);\r\n $paneBottomL = $(\"<div class='slick-pane slick-pane-bottom slick-pane-left' tabIndex='0' />\").appendTo($container);\r\n $paneBottomR = $(\"<div class='slick-pane slick-pane-bottom slick-pane-right' tabIndex='0' />\").appendTo($container);\r\n\r\n if (options.createPreHeaderPanel) {\r\n $preHeaderPanelScroller = $(\"<div class='slick-preheader-panel ui-state-default' style='overflow:hidden;position:relative;' />\").appendTo($paneHeaderL);\r\n $preHeaderPanel = $(\"<div />\").appendTo($preHeaderPanelScroller);\r\n $preHeaderPanelSpacer = $(\"<div style='display:block;height:1px;position:absolute;top:0;left:0;'></div>\")\r\n .appendTo($preHeaderPanelScroller);\r\n\r\n $preHeaderPanelScrollerR = $(\"<div class='slick-preheader-panel ui-state-default' style='overflow:hidden;position:relative;' />\").appendTo($paneHeaderR);\r\n $preHeaderPanelR = $(\"<div />\").appendTo($preHeaderPanelScrollerR);\r\n $preHeaderPanelSpacerR = $(\"<div style='display:block;height:1px;position:absolute;top:0;left:0;'></div>\")\r\n .appendTo($preHeaderPanelScrollerR);\r\n\r\n if (!options.showPreHeaderPanel) {\r\n $preHeaderPanelScroller[0].style.display = \"none\";\r\n $preHeaderPanelScrollerR[0].style.display = \"none\";\r\n }\r\n }\r\n\r\n // append the header scroller containers\r\n $headerScrollerL = $(\"<div class='slick-header ui-state-default slick-header-left' />\").appendTo($paneHeaderL);\r\n $headerScrollerR = $(\"<div class='slick-header ui-state-default slick-header-right' />\").appendTo($paneHeaderR);\r\n\r\n // cache the header scroller containers\r\n $headerScroller = $().add($headerScrollerL).add($headerScrollerR);\r\n $groupHeaders = $();\r\n // if (treeColumns.hasDepth()) {\r\n // $groupHeadersL = [], $groupHeadersR = [];\r\n // for (var index = 0; index < treeColumns.getDepth() - 1; index++) {\r\n // $groupHeadersL[index] = $(\"<div class='slick-group-header-columns slick-group-header-columns-left' style='left:-1000px' />\").appendTo($headerScrollerL);\r\n // $groupHeadersR[index] = $(\"<div class='slick-group-header-columns slick-group-header-columns-right' style='left:-1000px' />\").appendTo($headerScrollerR);\r\n // $groupHeaders.add($groupHeadersL[index]).add($groupHeadersR[index]);\r\n // }\r\n // }\r\n\r\n // append the columnn containers to the headers\r\n var headerL = document.createElement(\"div\");\r\n headerL.className = \"slick-header-columns slick-header-columns-left\";\r\n headerL.style.left = \"-1000px\";\r\n var headerR = document.createElement(\"div\");\r\n headerR.className = \"slick-header-columns slick-header-columns-right\";\r\n headerR.style.left = \"-1000px\";\r\n $headerL = $(headerL).appendTo($headerScrollerL);\r\n $headerR = $(headerR).appendTo($headerScrollerR);\r\n\r\n // cache the header columns\r\n $headers = $().add($headerL).add($headerR);\r\n\r\n $headers.on(\"selectstart\", function (event) {\r\n event.preventDefault();\r\n });\r\n\r\n var headerRowScrollerL = document.createElement(\"div\");\r\n headerRowScrollerL.className = \"slick-headerrow ui-state-default\";\r\n var headerRowScrollerR = document.createElement(\"div\");\r\n headerRowScrollerR.className = \"slick-headerrow ui-state-default\";\r\n $headerRowScrollerL = $(headerRowScrollerL).appendTo($paneTopL);\r\n $headerRowScrollerR = $(headerRowScrollerR).appendTo($paneTopR);\r\n\r\n $headerRowScroller = $().add($headerRowScrollerL).add($headerRowScrollerR);\r\n\r\n var headerRowSpacerL = document.createElement(\"div\");\r\n headerRowSpacerL.style.display = \"block\";\r\n headerRowSpacerL.style.height = \"1px\";\r\n headerRowSpacerL.style.left = \"0\";\r\n headerRowSpacerL.style.top = \"0\";\r\n headerRowSpacerL.style.position = \"absolute\";\r\n\r\n var headerRowSpacerR = document.createElement(\"div\");\r\n headerRowSpacerR.style.display = \"block\";\r\n headerRowSpacerR.style.height = \"1px\";\r\n headerRowSpacerR.style.left = \"0\";\r\n headerRowSpacerR.style.top = \"0\";\r\n headerRowSpacerR.style.position = \"absolute\";\r\n\r\n $headerRowSpacerL = $(headerRowSpacerL)\r\n .appendTo($headerRowScrollerL);\r\n $headerRowSpacerR = $(headerRowSpacerR)\r\n .appendTo($headerRowScrollerR);\r\n\r\n var headerRowL = document.createElement(\"div\");\r\n headerRowL.className = \"slick-headerrow-columns slick-headerrow-columns-left\";\r\n\r\n var headerRowR = document.createElement(\"div\");\r\n headerRowR.className = \"slick-headerrow-columns slick-headerrow-columns-right\";\r\n\r\n $headerRowL = $(headerRowL).appendTo($headerRowScrollerL);\r\n $headerRowR = $(headerRowR).appendTo($headerRowScrollerR);\r\n\r\n $headerRow = $().add($headerRowL).add($headerRowR);\r\n\r\n // append the top panel scroller\r\n var topPanelScrollerL = document.createElement(\"div\");\r\n topPanelScrollerL.className = \"slick-top-panel-scroller ui-state-default\";\r\n var topPanelScrollerR = document.createElement(\"div\");\r\n topPanelScrollerR.className = \"slick-top-panel-scroller ui-state-default\";\r\n $topPanelScrollerL = $(topPanelScrollerL).appendTo($paneTopL);\r\n $topPanelScrollerR = $(topPanelScrollerR).appendTo($paneTopR);\r\n\r\n $topPanelScroller = $().add($topPanelScrollerL).add($topPanelScrollerR);\r\n\r\n // append the top panel\r\n $topPanelL = $(\"<div class='slick-top-panel' style='width:10000px' />\").appendTo($topPanelScrollerL);\r\n $topPanelR = $(\"<div class='slick-top-panel' style='width:10000px' />\").appendTo($topPanelScrollerR);\r\n\r\n $topPanel = $().add($topPanelL).add($topPanelR);\r\n\r\n if (!options.showTopPanel) {\r\n $.each($topPanelScroller, function (idx, el) { el.style.display = \"none\"; });\r\n }\r\n\r\n if (!options.showHeaderRow) {\r\n $.each($headerRowScroller, function (idx, el) { el.style.display = \"none\"; });\r\n }\r\n\r\n // append the viewport containers\r\n $viewportTopL = $(\"<div class='slick-viewport slick-viewport-top slick-viewport-left' tabIndex='0' hideFocus />\").appendTo($paneTopL);\r\n $viewportTopR = $(\"<div class='slick-viewport slick-viewport-top slick-viewport-right' tabIndex='0' hideFocus />\").appendTo($paneTopR);\r\n $viewportBottomL = $(\"<div class='slick-viewport slick-viewport-bottom slick-viewport-left' tabIndex='0' hideFocus />\").appendTo($paneBottomL);\r\n $viewportBottomR = $(\"<div class='slick-viewport slick-viewport-bottom slick-viewport-right' tabIndex='0' hideFocus />\").appendTo($paneBottomR);\r\n\r\n // cache the viewports\r\n $viewport = $().add($viewportTopL).add($viewportTopR).add($viewportBottomL).add($viewportBottomR);\r\n\r\n\r\n // default the active viewport to the top left\r\n $activeViewportNode = $viewportTopL;\r\n\r\n // append the canvas containers\r\n $canvasTopL = $(\"<div class='grid-canvas grid-canvas-top grid-canvas-left' tabIndex='0' hideFocus />\").appendTo($viewportTopL);\r\n $canvasTopR = $(\"<div class='grid-canvas grid-canvas-top grid-canvas-right' tabIndex='0' hideFocus />\").appendTo($viewportTopR);\r\n $canvasBottomL = $(\"<div class='grid-canvas grid-canvas-bottom grid-canvas-left' tabIndex='0' hideFocus />\").appendTo($viewportBottomL);\r\n $canvasBottomR = $(\"<div class='grid-canvas grid-canvas-bottom grid-canvas-right' tabIndex='0' hideFocus />\").appendTo($viewportBottomR);\r\n if (options.viewportClass) { $viewport.toggleClass(options.viewportClass, true); }\r\n\r\n // cache the canvases\r\n $canvas = $().add($canvasTopL).add($canvasTopR).add($canvasBottomL).add($canvasBottomR);\r\n\r\n scrollbarDimensions = scrollbarDimensions || measureScrollbar();\r\n\r\n // default the active canvas to the top left\r\n $activeCanvasNode = $canvasTopL;\r\n\r\n // pre-header\r\n if ($preHeaderPanelSpacer) { $preHeaderPanelSpacer.css(\"width\", getCanvasWidth() + scrollbarDimensions.width + \"px\"); }\r\n $headers.width(getHeadersWidth());\r\n $headerRowSpacerL.css(\"width\", getCanvasWidth() + scrollbarDimensions.width + \"px\");\r\n $headerRowSpacerR.css(\"width\", getCanvasWidth() + scrollbarDimensions.width + \"px\");\r\n\r\n // footer Row\r\n if (options.createFooterRow) {\r\n $footerRowScrollerR = $(\"<div class='slick-footerrow ui-state-default' />\").appendTo($paneTopR);\r\n $footerRowScrollerL = $(\"<div class='slick-footerrow ui-state-default' />\").appendTo($paneTopL);\r\n\r\n $footerRowScroller = $().add($footerRowScrollerL).add($footerRowScrollerR);\r\n\r\n $footerRowSpacerL = $(\"<div style='display:block;height:1px;position:absolute;top:0;left:0;'></div>\")\r\n .css(\"width\", getCanvasWidth() + scrollbarDimensions.width + \"px\")\r\n .appendTo($footerRowScrollerL);\r\n $footerRowSpacerR = $(\"<div style='display:block;height:1px;position:absolute;top:0;left:0;'></div>\")\r\n .css(\"width\", getCanvasWidth() + scrollbarDimensions.width + \"px\")\r\n .appendTo($footerRowScrollerR);\r\n\r\n\r\n $footerRowL = $(\"<div class='slick-footerrow-columns slick-footerrow-columns-left' />\").appendTo($footerRowScrollerL);\r\n $footerRowR = $(\"<div class='slick-footerrow-columns slick-footerrow-columns-right' />\").appendTo($footerRowScrollerR);\r\n\r\n $footerRow = $().add($footerRowL).add($footerRowR);\r\n\r\n if (!options.showFooterRow) {\r\n $.each($footerRowScroller, function (idx, el) { el.style.display = \"none\"; });\r\n }\r\n }\r\n\r\n $focusSink2 = $($focusSink[0].cloneNode(true)).appendTo($container);\r\n\r\n if (!options.explicitInitialization) {\r\n finishInitialization();\r\n }\r\n }\r\n\r\n function finishInitialization() {\r\n if (!initialized) {\r\n initialized = true;\r\n\r\n getViewportWidth();\r\n getViewportHeight();\r\n\r\n // header columns and cells may have different padding/border skewing width calculations (box-sizing, hello?)\r\n // calculate the diff so we can set consistent sizes\r\n measureCellPaddingAndBorder();\r\n\r\n // for usability reasons, all text selection in SlickGrid is disabled\r\n // with the exception of input and textarea elements (selection must\r\n // be enabled there so that editors work as expected); note that\r\n // selection in grid cells (grid body) is already unavailable in\r\n // all browsers except IE\r\n disableSelection($headers); // disable all text selection in header (including input and textarea)\r\n\r\n if (!options.enableTextSelectionOnCells) {\r\n // disable text selection in grid cells except in input and textarea elements\r\n // (this is IE-specific, because selectstart event will only fire in IE)\r\n $viewport.on(\"selectstart\", function (event) {\r\n if (event.target.tagName !== \"INPUT\" && event.target.tagName !== \"TEXTAREA\") {\r\n event.preventDefault();\r\n }\r\n });\r\n }\r\n\r\n cacheRowPositions();\r\n\r\n setFrozenOptions();\r\n setPaneVisibility();\r\n setScroller();\r\n setOverflow();\r\n\r\n updateColumnCaches();\r\n createColumnHeaders();\r\n // createColumnGroupHeaders();\r\n createColumnFooter();\r\n setupColumnSort();\r\n setupColumnMoveAndResize();\r\n createCssRules();\r\n resizeCanvas();\r\n bindAncestorScrollEvents();\r\n\r\n $container.on(\"resize\", resizeCanvas);\r\n $viewport.on(\"scroll\", handleScroll);\r\n\r\n // tODO !!! TODOFIX\r\n // if (jQuery.fn.mousewheel) {\r\n // $viewport.on(\"mousewheel\", handleMouseWheel);\r\n // }\r\n\r\n $headerScroller\r\n .on(\"scroll\", preventScroll) // .on(\"scroll\", handleHeaderScroll)\r\n .on(\"contextmenu\", handleHeaderContextMenu)\r\n .on(\"click\", handleHeaderClick);\r\n\r\n $headerRowScroller\r\n .on(\"scroll\", preventScroll);\r\n\r\n if (options.createFooterRow) {\r\n $footerRowScroller\r\n .on(\"scroll\", preventScroll);\r\n }\r\n\r\n if (options.createPreHeaderPanel) {\r\n $preHeaderPanelScroller\r\n .on(\"scroll\", preventScroll);\r\n }\r\n\r\n\r\n // $headerRowScroller\r\n // .on(\"scroll\", handleHeaderRowScroll);\r\n\r\n // if (options.createFooterRow) {\r\n // $footerRowScroller\r\n // .on(\"scroll\", handleFooterRowScroll);\r\n // }\r\n\r\n // if (options.createPreHeaderPanel) {\r\n // $preHeaderPanelScroller\r\n // .on(\"scroll\", handlePreHeaderPanelScroll);\r\n // }\r\n\r\n $focusSink.add($focusSink2)\r\n .on(\"keydown\", handleKeyDown);\r\n $canvas\r\n .on(\"keydown\", handleKeyDown)\r\n .on(\"click\", handleClick)\r\n .on(\"dblclick\", handleDblClick)\r\n .on(\"contextmenu\", handleContextMenu);\r\n\r\n\r\n // ---- BEGIN\r\n\r\n\r\n let dragStartX;\r\n let dragStartY;\r\n let isDown;\r\n let dragStartedDD = null;\r\n const delta = 3;\r\n // $canvas.on(\"touchstart\", function (e, dd) {\r\n // handleDragInit(e, dd);\r\n // // TODO\r\n // });\r\n\r\n let _down = function (e, dd) {\r\n handleDragInit(e, dd); // TODO -> do something with result?\r\n dragStartX = e.pageX != null ? e.pageX : ((e as unknown) as TouchEvent).touches[0].pageX;\r\n dragStartY = e.pageY != null ? e.pageY : ((e as unknown) as TouchEvent).touches[0].pageY;\r\n isDown = true;\r\n document.addEventListener(\"mouseup\", handleUp);\r\n document.addEventListener(\"touchend\", handleUp);\r\n }\r\n\r\n $canvas.on(\"mousedown\", _down);\r\n $canvas.on(\"touchstart\", _down);\r\n\r\n let _move = function (e, _dd) {\r\n if (isDown) {\r\n\r\n const pageX = e.pageX != null ? e.pageX : ((e as unknown) as TouchEvent).touches[0].pageX;\r\n const pageY = e.pageY != null ? e.pageY : ((e as unknown) as TouchEvent).touches[0].pageY;\r\n\r\n if (Math.abs(dragStartX - pageX) < delta\r\n && Math.abs(dragStartY - pageY) < delta) {\r\n return;\r\n }\r\n\r\n if (dragStartedDD == null) {\r\n dragStartedDD = {};\r\n dragStartedDD.dragging = null;\r\n dragStartedDD.propagates = 1;\r\n dragStartedDD.target = e.target;\r\n dragStartedDD.pageX = pageX;\r\n dragStartedDD.pageY = pageY;\r\n dragStartedDD.startX = dragStartedDD.pageX;\r\n dragStartedDD.startY = dragStartedDD.pageY;\r\n const res = handleDragStart(e, dragStartedDD); // TODO -> do something with result?\r\n }\r\n dragStartedDD.pageX = pageX;\r\n dragStartedDD.pageY = pageY;\r\n dragStartedDD.startX = dragStartedDD.pageX;\r\n dragStartedDD.startY = dragStartedDD.pageY;\r\n handleDrag(e, dragStartedDD);\r\n // e.stopImmediatePropagation();\r\n // e.stopPropagation();\r\n if (e.isImmediatePropagationStopped && e.isImmediatePropagationStopped()) {\r\n e.preventDefault();\r\n }\r\n }\r\n }\r\n\r\n $canvas.on(\"mousemove\", _move);\r\n $canvas.on(\"touchmove\", _move);\r\n\r\n const handleUp = (e) => {\r\n if (isDown && dragStartedDD != null) {\r\n handleDragEnd(e, dragStartedDD);\r\n }\r\n isDown = false;\r\n dragStartedDD = null;\r\n document.removeEventListener(\"mouseup\", handleUp);\r\n document.removeEventListener(\"touchend\", handleUp);\r\n }\r\n\r\n // .on(\"draginit\", handleDragInit) //TODO TODOFIX\r\n // .on(\"dragstart\", {distance: 3}, handleDragStart) //TODO TODOFIX\r\n // .on(\"drag\", handleDrag) //TODO TODOFIX\r\n // .on(\"dragend\", handleDragEnd); //TODO TODOFIX\r\n // .on(\"mouseenter\", \".slick-cell\", handleMouseEnter) //TODO TODOFIX\r\n // .on(\"mouseleave\", \".slick-cell\", handleMouseLeave); //TODO TODOFIX\r\n\r\n restoreCssFromHiddenInit();\r\n }\r\n }\r\n\r\n function cacheCssForHiddenInit() {\r\n // handle display:none on container or container parents\r\n var all_parents = $().add($container).add($container[0].parentElement);\r\n var hiddenParents = [];\r\n $hiddenParents = $();\r\n for (var i = 0; i < all_parents.length; i++) {\r\n if ((all_parents[i].display || \"\").toLowerCase() === \"none\") {\r\n hiddenParents.push(all_parents[i]);\r\n $hiddenParents.add(all_parents[i]);\r\n }\r\n }\r\n hiddenParents.forEach(function (p) {\r\n var old = {};\r\n for (var name in cssShow) {\r\n old[name] = p.style[name];\r\n p.style[name] = cssShow[name];\r\n }\r\n oldProps.push(old);\r\n });\r\n }\r\n\r\n function restoreCssFromHiddenInit() {\r\n // finish handle display:none on container or container parents\r\n // - put values back the way they were\r\n $.each($hiddenParents, function (i) {\r\n var old = oldProps[i];\r\n for (var name in cssShow) {\r\n this.style[name] = old[name];\r\n }\r\n });\r\n }\r\n\r\n function hasFrozenColumns() {\r\n return options.frozenColumn > -1;\r\n }\r\n\r\n function registerPlugin(plugin) {\r\n plugins.unshift(plugin);\r\n plugin.init(self);\r\n }\r\n\r\n function unregisterPlugin(plugin) {\r\n for (var i = plugins.length; i >= 0; i--) {\r\n if (plugins[i] === plugin) {\r\n if (plugins[i].destroy) {\r\n plugins[i].destroy();\r\n }\r\n plugins.splice(i, 1);\r\n break;\r\n }\r\n }\r\n }\r\n\r\n function getPluginByName(name) {\r\n for (var i = plugins.length - 1; i >= 0; i--) {\r\n if (plugins[i].pluginName === name) {\r\n return plugins[i];\r\n }\r\n }\r\n return undefined;\r\n }\r\n\r\n function setSelectionModel(model) {\r\n if (selectionModel) {\r\n selectionModel.onSelectedRangesChanged.unsubscribe(handleSelectedRangesChanged);\r\n if (selectionModel.destroy) {\r\n selectionModel.destroy();\r\n }\r\n }\r\n\r\n selectionModel = model;\r\n if (selectionModel) {\r\n selectionModel.init(self);\r\n selectionModel.onSelectedRangesChanged.subscribe(handleSelectedRangesChanged);\r\n }\r\n }\r\n\r\n function getSelectionModel() {\r\n return selectionModel;\r\n }\r\n\r\n function getCanvasNode(columnIdOrIdx, rowIndex) {\r\n if (!columnIdOrIdx) { columnIdOrIdx = 0; }\r\n if (!rowIndex) { rowIndex = 0; }\r\n\r\n var idx = (typeof columnIdOrIdx === \"number\" ? columnIdOrIdx : getColumnIndex(columnIdOrIdx));\r\n\r\n return (hasFrozenRows && rowIndex >= actualFrozenRow + (options.frozenBottom ? 0 : 1))\r\n ? ((hasFrozenColumns() && idx > options.frozenColumn) ? $canvasBottomR[0] : $canvasBottomL[0])\r\n : ((hasFrozenColumns() && idx > options.frozenColumn) ? $canvasTopR[0] : $canvasTopL[0])\r\n ;\r\n }\r\n\r\n function getActiveCanvasNode(element) {\r\n setActiveCanvasNode(element);\r\n\r\n return $activeCanvasNode[0];\r\n }\r\n\r\n function getCanvases() {\r\n return $canvas;\r\n }\r\n\r\n function setActiveCanvasNode(element) {\r\n if (element) {\r\n $activeCanvasNode = $(element.target).closestClass(\"grid-canvas\");\r\n }\r\n }\r\n\r\n function getViewportNode() {\r\n return $viewport[0];\r\n }\r\n\r\n function getActiveViewportNode(element) {\r\n setActiveViewportNode(element);\r\n\r\n return $activeViewportNode[0];\r\n }\r\n\r\n function setActiveViewportNode(element) {\r\n if (element) {\r\n $activeViewportNode = $(element.target).closestClass(\"slick-viewport\");\r\n }\r\n }\r\n\r\n function measureScrollbar() {\r\n //var $outerdiv = $(\"<div style=\\\"position:absolute; top:-10000px; left:-10000px; overflow:auto; width:100px; height:100px;\\\"></div>\").appendTo($viewport);\r\n const $outerdiv = $(\"<div style=\\\"position:absolute; top:-10000px; left:-10000px; overflow:auto; width:100px; height:100px;\\\"></div>\").appendTo($(\"body\"));\r\n const $innerdiv = $(\"<div style=\\\"width:200px; height:200px; overflow:auto;\\\"></div>\").appendTo($outerdiv);\r\n const dim = {\r\n width: $outerdiv[0].offsetWidth - $outerdiv[0].clientWidth,\r\n height: $outerdiv[0].offsetHeight - $outerdiv[0].clientHeight\r\n };\r\n $innerdiv.remove();\r\n $outerdiv.remove();\r\n return dim;\r\n }\r\n\r\n function getHeadersWidth() {\r\n headersWidth = headersWidthL = headersWidthR = 0;\r\n var includeScrollbar = !options.autoHeight;\r\n\r\n for (var i = 0, ii = columns.length; i < ii; i++) {\r\n var width = columns[i].width;\r\n\r\n if ((options.frozenColumn) > -1 && (i > options.frozenColumn)) {\r\n headersWidthR += width;\r\n } else {\r\n headersWidthL += width;\r\n }\r\n }\r\n\r\n if (includeScrollbar) {\r\n if ((options.frozenColumn) > -1 && (i > options.frozenColumn)) {\r\n headersWidthR += scrollbarDimensions.width;\r\n } else {\r\n headersWidthL += scrollbarDimensions.width;\r\n }\r\n }\r\n\r\n if (hasFrozenColumns()) {\r\n headersWidthL = headersWidthL + 1000;\r\n\r\n headersWidthR = Math.max(headersWidthR, viewportW) + headersWidthL;\r\n headersWidthR += scrollbarDimensions.width;\r\n } else {\r\n headersWidthL += scrollbarDimensions.width;\r\n headersWidthL = Math.max(headersWidthL, viewportW) + 1000;\r\n }\r\n\r\n headersWidth = headersWidthL + headersWidthR;\r\n return Math.max(headersWidth, viewportW) + 1000;\r\n }\r\n\r\n // function getHeadersWidthL() {\r\n // headersWidthL = 0;\r\n\r\n // columns.forEach(function (column, i) {\r\n // if (!((options.frozenColumn) > -1 && (i > options.frozenColumn))) {\r\n // headersWidthL += column.width;\r\n // }\r\n // });\r\n\r\n // if (hasFrozenColumns()) {\r\n // headersWidthL += 1000;\r\n // } else {\r\n // headersWidthL += scrollbarDimensions.width;\r\n // headersWidthL = Math.max(headersWidthL, viewportW) + 1000;\r\n // }\r\n\r\n // return headersWidthL;\r\n // }\r\n\r\n // function getHeadersWidthR() {\r\n // headersWidthR = 0;\r\n\r\n // columns.forEach(function (column, i) {\r\n // if ((options.frozenColumn) > -1 && (i > options.frozenColumn)) {\r\n // headersWidthR += column.width;\r\n // }\r\n // });\r\n\r\n // if (hasFrozenColumns()) {\r\n // headersWidthR = Math.max(headersWidthR, viewportW) + getHeadersWidthL();\r\n // headersWidthR += scrollbarDimensions.width;\r\n // }\r\n\r\n // return headersWidthR;\r\n // }\r\n\r\n function getCanvasWidth() {\r\n var availableWidth = viewportHasVScroll ? viewportW - scrollbarDimensions.width : viewportW;\r\n var i = columns.length;\r\n\r\n canvasWidthL = canvasWidthR = 0;\r\n\r\n while (i--) {\r\n if (hasFrozenColumns() && (i > options.frozenColumn)) {\r\n canvasWidthR += columns[i].width;\r\n } else {\r\n canvasWidthL += columns[i].width;\r\n }\r\n }\r\n var totalRowWidth = canvasWidthL + canvasWidthR;\r\n return options.fullWidthRows ? Math.max(totalRowWidth, availableWidth) : totalRowWidth;\r\n }\r\n\r\n function updateCanvasWidth(forceColumnWidthsUpdate?: boolean) {\r\n var oldCanvasWidth = canvasWidth;\r\n var oldCanvasWidthL = canvasWidthL;\r\n var oldCanvasWidthR = canvasWidthR;\r\n var widthChanged;\r\n canvasWidth = getCanvasWidth();\r\n\r\n widthChanged = canvasWidth !== oldCanvasWidth || canvasWidthL !== oldCanvasWidthL || canvasWidthR !== oldCanvasWidthR;\r\n\r\n if (widthChanged || hasFrozenColumns() || hasFrozenRows) {\r\n $canvasTopL.width(canvasWidthL);\r\n\r\n getHeadersWidth();\r\n\r\n $headerL.width(headersWidthL);\r\n $headerR.width(headersWidthR);\r\n\r\n if (hasFrozenColumns()) {\r\n $canvasTopR.width(canvasWidthR);\r\n\r\n $paneHeaderL.width(canvasWidthL);\r\n $paneHeaderR.css(\"left\", canvasWidthL);\r\n // $paneHeaderR.css(\"width\", viewportW - canvasWidthL);\r\n $paneHeaderR.css(\"width\", \"calc(100% - \" + canvasWidthL + \"px)\");\r\n\r\n $paneTopL.width(canvasWidthL);\r\n $paneTopR.css(\"left\", canvasWidthL);\r\n //$paneTopR.css(\"width\", viewportW - canvasWidthL);\r\n $paneTopR.css(\"width\", \"calc(100% - \" + canvasWidthL + \"px)\");\r\n\r\n $headerRowScrollerL.width(canvasWidthL);\r\n // $headerRowScrollerR.width(viewportW - canvasWidthL);\r\n $headerRowScrollerR.css(\"width\", \"100%\");\r\n\r\n $headerRowL.width(canvasWidthL);\r\n $headerRowR.width(canvasWidthR);\r\n\r\n if (options.createFooterRow) {\r\n $footerRowScrollerL.width(canvasWidthL);\r\n //$footerRowScrollerR.width(viewportW - canvasWidthL);\r\n $footerRowScrollerR.css(\"width\", \"100%\");\r\n\r\n $footerRowL.width(canvasWidthL);\r\n $footerRowR.width(canvasWidthR);\r\n }\r\n if (options.createPreHeaderPanel) {\r\n $preHeaderPanel.width(canvasWidth);\r\n }\r\n $viewportTopL.width(canvasWidthL);\r\n //$viewportTopR.width(viewportW - canvasWidthL);\r\n $viewportTopR.css(\"width\", \"100%\");\r\n\r\n if (hasFrozenRows) {\r\n $paneBottomL.width(canvasWidthL);\r\n $paneBottomR.css(\"left\", canvasWidthL);\r\n\r\n $viewportBottomL.width(canvasWidthL);\r\n // $viewportBottomR.width(viewportW - canvasWidthL);\r\n $viewportBottomR.width(\"100%\");\r\n\r\n $canvasBottomL.width(canvasWidthL);\r\n $canvasBottomR.width(canvasWidthR);\r\n }\r\n } else {\r\n $paneHeaderL.width(\"100%\");\r\n $paneTopL.width(\"100%\");\r\n $headerRowScrollerL.width(\"100%\");\r\n $headerRowL.width(canvasWidth);\r\n\r\n if (options.createFooterRow) {\r\n $footerRowScrollerL.width(\"100%\");\r\n $footerRowL.width(canvasWidth);\r\n }\r\n\r\n if (options.createPreHeaderPanel) {\r\n $preHeaderPanel.width(\"100%\");\r\n $preHeaderPanel.width(canvasWidth);\r\n }\r\n $viewportTopL.width(\"100%\");\r\n\r\n if (hasFrozenRows) {\r\n $viewportBottomL.width(\"100%\");\r\n $canvasBottomL.width(canvasWidthL);\r\n }\r\n }\r\n\r\n viewportHasHScroll = options.alwaysShowHorizontalScroll || (canvasWidth > viewportW - scrollbarDimensions.width);\r\n }\r\n\r\n $headerRowSpacerL.width(canvasWidth + (viewportHasVScroll ? scrollbarDimensions.width : 0));\r\n $headerRowSpacerR.width(canvasWidth + (viewportHasVScroll ? scrollbarDimensions.width : 0));\r\n\r\n if (options.createFooterRow) {\r\n $footerRowSpacerL.width(canvasWidth + (viewportHasVScroll ? scrollbarDimensions.width : 0));\r\n $footerRowSpacerR.width(canvasWidth + (viewportHasVScroll ? scrollbarDimensions.width : 0));\r\n }\r\n\r\n if (widthChanged || forceColumnWidthsUpdate) {\r\n applyColumnWidths();\r\n }\r\n }\r\n\r\n function disableSelection($target) {\r\n if ($target && $target.jquery) {\r\n $target\r\n .attr(\"unselectable\", \"on\")\r\n .css(\"MozUserSelect\", \"none\")\r\n .on(\"selectstart.ui\", function () {\r\n return false;\r\n }); // from jquery:ui.core.js 1.7.2\r\n }\r\n }\r\n\r\n function getMaxSupportedCssHeight() {\r\n var supportedHeight = 1000000;\r\n // fF reports the height back but still renders blank after ~6M px\r\n var testUpTo = navigator.userAgent.toLowerCase().match(/firefox/) ? 6000000 : 1000000000;\r\n var div: IjQueryWrapper = $(\"<div />\");\r\n div.appendTo(document.body);\r\n\r\n while (true) {\r\n var test = supportedHeight * 2;\r\n div.height(test);\r\n if (test > testUpTo || div.height() !== test) {\r\n break;\r\n } else {\r\n supportedHeight = test;\r\n }\r\n }\r\n\r\n div.remove();\r\n return supportedHeight;\r\n }\r\n\r\n function getUID() {\r\n return uid;\r\n }\r\n\r\n function getHeaderColumnWidthDiff() {\r\n return headerColumnWidthDiff;\r\n }\r\n\r\n function getScrollbarDimensions() {\r\n return scrollbarDimensions;\r\n }\r\n\r\n // tODO: this is static. need to handle page mutation.\r\n function bindAncestorScrollEvents() {\r\n var elem = (hasFrozenRows && !options.frozenBottom) ? $canvasBottomL[0] : $canvasTopL[0];\r\n while ((elem = elem.parentNode) != document.body && elem != null) {\r\n // bind to scroll containers only\r\n if (elem == $viewportTopL[0] || elem.scrollWidth != elem.clientWidth || elem.scrollHeight != elem.clientHeight) {\r\n var $elem = $(elem);\r\n if (!$boundAncestors) {\r\n $boundAncestors = $elem;\r\n } else {\r\n $boundAncestors = $boundAncestors.add($elem);\r\n }\r\n scrollEventHandler = (elem as HTMLDivElement).addEventListener(\"scroll\", handleActiveCellPositionChange);\r\n //$elem.on(\"scroll.\" + uid, handleActiveCellPositionChange); //TODOFIX\r\n }\r\n }\r\n }\r\n\r\n function unbindAncestorScrollEvents() {\r\n if (!$boundAncestors) {\r\n return;\r\n }\r\n // $boundAncestors.off(\"scroll.\" + uid); //TODO TODOFIX\r\n if (scrollEventHandler) {\r\n $boundAncestors[0].removeEventListener(\"scroll\");\r\n }\r\n $boundAncestors = null;\r\n }\r\n\r\n function updateColumnHeader(columnId, title, toolTip) {\r\n if (!initialized) { return; }\r\n var idx = getColumnIndex(columnId);\r\n if (idx == null) {\r\n return;\r\n }\r\n\r\n var columnDef = columns[idx];\r\n var $header = $($headers.children()[idx]);\r\n if ($header) {\r\n if (title !== undefined) {\r\n columns[idx].name = title;\r\n }\r\n if (toolTip !== undefined) {\r\n columns[idx].toolTip = toolTip;\r\n }\r\n\r\n trigger(self.onBeforeHeaderCellDestroy, {\r\n \"node\": $header[0],\r\n \"column\": columnDef,\r\n \"grid\": self\r\n });\r\n\r\n (<IjQueryWrapper>$header\r\n .attr(\"title\", toolTip || \"\"))\r\n .children()[0].innerHTML = title;\r\n\r\n trigger(self.onHeaderCellRendered, {\r\n \"node\": $header[0],\r\n \"column\": columnDef,\r\n \"grid\": self\r\n });\r\n }\r\n }\r\n\r\n function getHeader(columnDef) {\r\n if (!columnDef) {\r\n return hasFrozenColumns() ? $headers : $headerL;\r\n }\r\n var idx = getColumnIndex(columnDef.id);\r\n return hasFrozenColumns() ? ((idx <= options.frozenColumn) ? $headerL : $headerR) : $headerL;\r\n }\r\n\r\n function getHeaderColumn(columnIdOrIdx) {\r\n var idx = (typeof columnIdOrIdx === \"number\" ? columnIdOrIdx : getColumnIndex(columnIdOrIdx));\r\n var targetHeader = hasFrozenColumns() ? ((idx <= options.frozenColumn) ? $headerL : $headerR) : $headerL;\r\n var targetIndex = hasFrozenColumns() ? ((idx <= options.frozenColumn) ? idx : idx - options.frozenColumn - 1) : idx;\r\n var $rtn = targetHeader.children()[targetIndex];\r\n return $rtn && $rtn[0];\r\n }\r\n\r\n function getHeaderRow() {\r\n return hasFrozenColumns() ? $headerRow : $headerRow[0];\r\n }\r\n\r\n function getFooterRow() {\r\n return hasFrozenColumns() ? $footerRow : $footerRow[0];\r\n }\r\n\r\n function getPreHeaderPanel(): Element {\r\n return $preHeaderPanel[0];\r\n }\r\n\r\n function getPreHeaderPanelRight() {\r\n return $preHeaderPanelR[0];\r\n }\r\n\r\n function getHeaderRowColumn(columnIdOrIdx) {\r\n var idx = (typeof columnIdOrIdx === \"number\" ? columnIdOrIdx : getColumnIndex(columnIdOrIdx));\r\n\r\n var $headerRowTarget;\r\n\r\n if (hasFrozenColumns()) {\r\n if (idx <= options.frozenColumn) {\r\n $headerRowTarget = $headerRowL;\r\n } else {\r\n $headerRowTarget = $headerRowR;\r\n idx -= options.frozenColumn + 1;\r\n }\r\n } else {\r\n $headerRowTarget = $headerRowL;\r\n }\r\n\r\n var $header = $headerRowTarget.children().eq(idx);\r\n return $header && $header[0];\r\n }\r\n\r\n function getFooterRowColumn(columnIdOrIdx) {\r\n var idx = (typeof columnIdOrIdx === \"number\" ? columnIdOrIdx : getColumnIndex(columnIdOrIdx));\r\n\r\n var $footerRowTarget;\r\n\r\n if (hasFrozenColumns()) {\r\n if (idx <= options.frozenColumn) {\r\n $footerRowTarget = $footerRowL;\r\n } else {\r\n $footerRowTarget = $footerRowR;\r\n\r\n idx -= options.frozenColumn + 1;\r\n }\r\n } else {\r\n $footerRowTarget = $footerRowL;\r\n }\r\n\r\n var $footer = $footerRowTarget.children().eq(idx);\r\n return $footer && $footer[0];\r\n }\r\n\r\n function createColumnFooter() {\r\n if (options.createFooterRow) {\r\n $.each($footerRow.find(\".slick-footerrow-column\")\r\n , function () {\r\n var columnDef = $(this).data(\"column\");\r\n if (columnDef) {\r\n trigger(self.onBeforeFooterRowCellDestroy, {\r\n \"node\": this,\r\n \"column\": columnDef,\r\n \"grid\": self\r\n });\r\n }\r\n });\r\n\r\n $footerRowL.empty();\r\n $footerRowR.empty();\r\n\r\n for (var i = 0; i < columns.length; i++) {\r\n var m = columns[i];\r\n\r\n var footerRowCell = $(\"<div class='ui-state-default slick-footerrow-column l\" + i + \" r\" + i + \"'></div>\")\r\n .data(\"column\", m)\r\n .addClass(hasFrozenColumns() && i <= options.frozenColumn ? \"frozen\" : \"\")\r\n .appendTo(hasFrozenColumns() && (i > options.frozenColumn) ? $footerRowR : $footerRowL);\r\n\r\n trigger(self.onFooterRowCellRendered, {\r\n \"node\": footerRowCell[0],\r\n \"column\": m,\r\n \"grid\": self\r\n });\r\n }\r\n }\r\n }\r\n\r\n // function createColumnGroupHeaders() {\r\n // var columnsLength = 0;\r\n // var frozenColumnsValid = false;\r\n\r\n // if (!treeColumns.hasDepth()) {\r\n // return;\r\n // }\r\n\r\n // for (var index = 0; index < $groupHeadersL.length; index++) {\r\n\r\n // $groupHeadersL[index].empty();\r\n // $groupHeadersR[index].empty();\r\n\r\n // var groupColumns = treeColumns.getColumnsInDepth(index);\r\n\r\n // for (var indexGroup in groupColumns) {\r\n // var m = groupColumns[indexGroup];\r\n\r\n // columnsLength += m.extractColumns().length;\r\n\r\n // if (hasFrozenColumns() && index == 0 && (columnsLength - 1) === options.frozenColumn) {\r\n // frozenColumnsValid = true;\r\n // }\r\n\r\n // var tmp = document.createElement(\"div\");\r\n // tmp.className = \"ui-state-default slick-group-header-column\";\r\n // tmp.innerHTML = \"<span class='slick-column-name'>\" + m.name + \"</span>\";\r\n // // tmp.innerHTML = m.name;\r\n // tmp.id = \"\" + uid + m.id;\r\n // tmp.title = m.toolTip || \"\";\r\n // if (m.headerCssClass) {\r\n // tmp.classList.add(m.headerCssClass);\r\n // }\r\n // if (hasFrozenColumns() && (columnsLength - 1) > options.frozenColumn) {\r\n // tmp.classList.add(\"frozen\");\r\n // }\r\n // var $tmp = $(tmp);\r\n // $tmp.data(\"column\", m);\r\n // if (hasFrozenColumns() && (columnsLength - 1) > options.frozenColumn) {\r\n // $tmp.appendTo($groupHeadersR[index]);\r\n // } else {\r\n // $tmp.appendTo($groupHeadersL[index]);\r\n // }\r\n // }\r\n\r\n // if (hasFrozenColumns() && index == 0 && !frozenColumnsValid) {\r\n // $groupHeadersL[index].empty();\r\n // $groupHeadersR[index].empty();\r\n // alert(\"All columns of group should to be grouped!\");\r\n // break;\r\n // }\r\n // }\r\n\r\n // applyColumnGroupHeaderWidths();\r\n // }\r\n\r\n function createColumnHeaders() {\r\n function onMouseEnter() {\r\n $(this).addClass(\"ui-state-hover\");\r\n }\r\n\r\n function onMouseLeave() {\r\n $(this).removeClass(\"ui-state-hover\");\r\n }\r\n\r\n $.each($headers.find(\".slick-header-column\"),\r\n function () {\r\n var columnDef = $(this).data(\"column\");\r\n if (columnDef) {\r\n trigger(self.onBeforeHeaderCellDestroy, {\r\n \"node\": this,\r\n \"column\": columnDef,\r\n \"grid\": self\r\n });\r\n }\r\n });\r\n\r\n $headerL.empty();\r\n $headerR.empty();\r\n\r\n getHeadersWidth();\r\n\r\n $headerL.width(headersWidthL);\r\n $headerR.width(headersWidthR);\r\n\r\n $.each($headerRow.find(\".slick-headerrow-column\"),\r\n function () {\r\n var columnDef = $(this).data(\"column\");\r\n if (columnDef) {\r\n trigger(self.onBeforeHeaderRowCellDestroy, {\r\n \"node\": this,\r\n \"column\": columnDef,\r\n \"grid\": self\r\n });\r\n }\r\n });\r\n\r\n $headerRowL.empty();\r\n $headerRowR.empty();\r\n\r\n if (options.createFooterRow) {\r\n $.each($footerRowL.find(\".slick-footerrow-column\"),\r\n function () {\r\n var columnDef = $(this).data(\"column\");\r\n if (columnDef) {\r\n trigger(self.onBeforeFooterRowCellDestroy, {\r\n \"node\": this,\r\n \"column\": columnDef,\r\n \"grid\": self\r\n });\r\n }\r\n });\r\n $footerRowL.empty();\r\n\r\n if (hasFrozenColumns()) {\r\n $.each($footerRowR.find(\".slick-footerrow-column\"),\r\n function () {\r\n var columnDef = $(this).data(\"column\");\r\n if (columnDef) {\r\n trigger(self.onBeforeFooterRowCellDestroy, {\r\n \"node\": this,\r\n \"column\": columnDef,\r\n \"grid\": self\r\n });\r\n }\r\n });\r\n $footerRowR.empty();\r\n }\r\n }\r\n\r\n for (var i = 0; i < columns.length; i++) {\r\n var m = columns[i];\r\n\r\n var $headerTarget = hasFrozenColumns() ? ((i <= options.frozenColumn) ? $headerL : $headerR) : $headerL;\r\n var $headerRowTarget = hasFrozenColumns() ? ((i <= options.frozenColumn) ? $headerRowL : $headerRowR) : $headerRowL;\r\n\r\n\r\n var div = document.createElement(\"div\");\r\n div.className = \"ui-state-default slick-header-column\";\r\n div.style.width = (m.width - headerColumnWidthDiff) + \"px\";\r\n div.id = \"\" + uid + m.id;\r\n div.title = m.toolTip || \"\";\r\n let html = \"<span class='slick-column-name'>\" + m.name + \"</span>\";\r\n if (m.resizable) {\r\n html += \"<span class='rs-r'\" + (options.resizeHandleWidth ? \"style='width:\" + options.resizeHandleWidth + \"'\" : \"\") + \"></span>\";\r\n div.className += \" resizable\";\r\n }\r\n div.innerHTML = html;\r\n if (m.headerCssClass) {\r\n div.className += \" \" + m.headerCssClass;\r\n }\r\n if (hasFrozenColumns() && i <= options.frozenColumn) {\r\n div.classList.add(\"frozen\");\r\n }\r\n var header = $(div);\r\n header.appendTo($headerTarget);\r\n header.data(\"column\", m);\r\n // var header = $(\"<div class='ui-state-default slick-header-column' />\")\r\n // .html(\"<span class='slick-column-name'>\" + m.name + \"</span>\")\r\n // .width(m.width - headerColumnWidthDiff)\r\n // .attr(\"id\", \"\" + uid + m.id)\r\n // .attr(\"title\", m.toolTip || \"\")\r\n // .data(\"column\", m)\r\n // .addClass(m.headerCssClass || \"\")\r\n // .addClass(hasFrozenColumns() && i <= options.frozenColumn? 'frozen': '')\r\n // .appendTo($headerTarget);\r\n\r\n if (options.enableColumnReorder || m.sortable) {\r\n header\r\n .on(\"mouseenter\", onMouseEnter)\r\n .on(\"mouseleave\", onMouseLeave);\r\n }\r\n\r\n if (m.sortable) {\r\n header.addClass(\"slick-header-sortable\");\r\n var sortIndicator = document.createElement(\"span\");\r\n sortIndicator.className = \"slick-sort-indicator\"\r\n + (options.numberedMultiColumnSort && !options.sortColNumberInSeparateSpan ? \" slick-sort-indicator-numbered\" : \"\");\r\n header.append(sortIndicator);\r\n if (options.numberedMultiColumnSort && options.sortColNumberInSeparateSpan) {\r\n var numIndicator = document.createElement(\"span\");\r\n numIndicator.className = \"slick-sort-indicator-numbered\";\r\n header.append(numIndicator);\r\n }\r\n }\r\n\r\n trigger(self.onHeaderCellRendered, {\r\n \"node\": header[0],\r\n \"column\": m,\r\n \"grid\": self\r\n });\r\n\r\n if (options.showHeaderRow) {\r\n var headerRowCell = $(\"<div class='ui-state-default slick-headerrow-column l\" + i + \" r\" + i + \"'></div>\")\r\n .data(\"column\", m)\r\n .addClass(hasFrozenColumns() && i <= options.frozenColumn ? \"frozen\" : \"\")\r\n .appendTo($headerRowTarget);\r\n\r\n trigger(self.onHeaderRowCellRendered, {\r\n \"node\": headerRowCell[0],\r\n \"column\": m,\r\n \"grid\": self\r\n });\r\n }\r\n if (options.createFooterRow && options.showFooterRow) {\r\n var footerRowCell = $(\"<div class='ui-state-default slick-footerrow-column l\" + i + \" r\" + i + \"'></div>\")\r\n .data(\"column\", m)\r\n .appendTo($footerRow);\r\n\r\n trigger(self.onFooterRowCellRendered, {\r\n \"node\": footerRowCell[0],\r\n \"column\": m,\r\n \"grid\": self\r\n });\r\n }\r\n }\r\n\r\n setSortColumns(sortColumns);\r\n // setupColumnResize();\r\n // if (options.enableColumnReorder) {\r\n // if (typeof options.enableColumnReorder == 'function') {\r\n // options.enableColumnReorder(self, $headers, headerColumnWidthDiff, setColumns, setupColumnResize, columns, getColumnIndex, uid, trigger);\r\n // } else {\r\n // setupColumnReorder();\r\n // }\r\n // }\r\n }\r\n\r\n function setupColumnSort() {\r\n $headers.on(\"click\", function (e) {\r\n\r\n let ctrlPressed: boolean = e.metaKey || e.ctrlKey;\r\n if ($(e.target).hasClass(\"rs-r\")) {\r\n return;\r\n }\r\n\r\n var $col = $(e.target).closestClass(\"slick-header-column\");\r\n if (!$col.length) {\r\n return;\r\n }\r\n\r\n var column = $col.data(\"column\");\r\n if (column.sortable) {\r\n if (!getEditorLock().commitCurrentEdit()) {\r\n return;\r\n }\r\n\r\n var sortColumn = null;\r\n var i = 0;\r\n for (; i < sortColumns.length; i++) {\r\n if (sortColumns[i].columnId == column.id) {\r\n sortColumn = sortColumns[i];\r\n sortColumn.sortAsc = !sortColumn.sortAsc;\r\n break;\r\n }\r\n }\r\n var hadSortCol = !!sortColumn;\r\n\r\n if (options.tristateMultiColumnSort) {\r\n if (!sortColumn) {\r\n sortColumn = { columnId: column.id, sortAsc: column.defaultSortAsc };\r\n }\r\n if (hadSortCol && sortColumn.sortAsc) {\r\n // three state: remove sort rather than go back to ASC\r\n sortColumns.splice(i, 1);\r\n sortColumn = null;\r\n }\r\n if (!options.multiColumnSort) { sortColumns = []; }\r\n if (sortColumn && (!hadSortCol || !options.multiColumnSort)) {\r\n sortColumns.push(sortColumn);\r\n }\r\n } else {\r\n // legacy behaviour\r\n if (ctrlPressed && options.multiColumnSort) {\r\n if (sortColumn) {\r\n sortColumns.splice(i, 1);\r\n }\r\n } else {\r\n if ((!e.shiftKey && !ctrlPressed) || !options.multiColumnSort) {\r\n sortColumns = [];\r\n }\r\n\r\n if (!sortColumn) {\r\n sortColumn = { columnId: column.id, sortAsc: column.defaultSortAsc };\r\n sortColumns.push(sortColumn);\r\n } else if (sortColumns.length == 0) {\r\n sortColumns.push(sortColumn);\r\n }\r\n }\r\n }\r\n\r\n setSortColumns(sortColumns);\r\n\r\n if (!options.multiColumnSort) {\r\n trigger(self.onSort, {\r\n multiColumnSort: false,\r\n columnId: (sortColumns.length > 0 ? column.id : null),\r\n sortCol: (sortColumns.length > 0 ? column : null),\r\n sortAsc: (sortColumns.length > 0 ? sortColumns[0].sortAsc : true)\r\n }, e);\r\n } else {\r\n trigger(self.onSort, {\r\n multiColumnSort: true,\r\n sortCols: sortColumns.map(function (col) {\r\n return { columnId: columns[getColumnIndex(col.columnId)].id, sortCol: columns[getColumnIndex(col.columnId)], sortAsc: col.sortAsc };\r\n })\r\n }, e);\r\n }\r\n }\r\n });\r\n }\r\n\r\n function currentPositionInHeader(id) {\r\n var currentPosition = 0;\r\n $.each($headers.find(\".slick-header-column\"), function (i) {\r\n if (this.id == id) {\r\n currentPosition = i;\r\n return false;\r\n }\r\n });\r\n\r\n return currentPosition;\r\n }\r\n\r\n // function limitPositionInGroup(idColumn) {\r\n // var groupColumnOfPreviousPosition,\r\n // startLimit = 0,\r\n // endLimit = 0;\r\n\r\n // treeColumns\r\n // .getColumnsInDepth($groupHeadersL.length - 1)\r\n // .some(function (groupColumn) {\r\n // startLimit = endLimit;\r\n // endLimit += groupColumn.columns.length;\r\n\r\n // groupColumn.columns.some(function (column) {\r\n\r\n // if (column.id === idColumn) {\r\n // groupColumnOfPreviousPosition = groupColumn;\r\n // }\r\n\r\n // return groupColumnOfPreviousPosition;\r\n // });\r\n\r\n // return groupColumnOfPreviousPosition;\r\n // });\r\n\r\n // endLimit--;\r\n\r\n // return {\r\n // start: startLimit,\r\n // end: endLimit,\r\n // group: groupColumnOfPreviousPosition\r\n // };\r\n // }\r\n\r\n function remove(arr, elem) {\r\n var index = arr.lastIndexOf(elem);\r\n if (index > -1) {\r\n arr.splice(index, 1);\r\n remove(arr, elem);\r\n }\r\n }\r\n\r\n // function columnPositionValidInGroup($item: IjQueryWrapper) {\r\n // var currentPosition = currentPositionInHeader($item[0].id);\r\n // var limit = limitPositionInGroup($item.data(\"column\").id);\r\n // var positionValid = limit.start <= currentPosition && currentPosition <= limit.end;\r\n\r\n // return {\r\n // limit: limit,\r\n // valid: positionValid,\r\n // message: positionValid ? \"\" : \"Column \\\"\".concat($item[0].textContent, \"\\\" can be reordered only within the \\\"\", limit.group.name, \"\\\" group!\")\r\n // };\r\n // }\r\n\r\n // function setupColumnReorder() {\r\n // if (1) { return; }\r\n // var columnScrollTimer = null;\r\n\r\n // function scrollColumnsRight() {\r\n // $viewportScrollContainerX[0].scrollLeft = $viewportScrollContainerX[0].scrollLeft + 10;\r\n // }\r\n\r\n // function scrollColumnsLeft() {\r\n // $viewportScrollContainerX[0].scrollLeft = $viewportScrollContainerX[0].scrollLeft - 10;\r\n // }\r\n\r\n // var canDragScroll;\r\n // // $headers.sortable({\r\n // // containment: \"parent\",\r\n // // distance: 3,\r\n // // axis: \"x\",\r\n // // cursor: \"default\",\r\n // // tolerance: \"intersection\",\r\n // // helper: \"clone\",\r\n // // placeholder: \"slick-sortable-placeholder ui-state-default slick-header-column\",\r\n // // start: function (e, ui) {\r\n // // ui.placeholder.width(ui.helper.outerWidth() - headerColumnWidthDiff);\r\n // // canDragScroll = !hasFrozenColumns() ||\r\n // // (ui.placeholder.offset().left + ui.placeholder.width()) > $viewportScrollContainerX.offset().left;\r\n // // $(ui.helper).addClass(\"slick-header-column-active\");\r\n // // },\r\n // // beforeStop: function (e, ui) {\r\n // // $(ui.helper).removeClass(\"slick-header-column-active\");\r\n // // },\r\n // // sort: function (e, ui) {\r\n // // if (canDragScroll && e.originalEvent.pageX > $container[0].clientWidth) {\r\n // // if (!(columnScrollTimer)) {\r\n // // columnScrollTimer = setInterval(\r\n // // scrollColumnsRight, 100);\r\n // // }\r\n // // } else if (canDragScroll && e.originalEvent.pageX < $viewportScrollContainerX.offset().left) {\r\n // // if (!(columnScrollTimer)) {\r\n // // columnScrollTimer = setInterval(\r\n // // scrollColumnsLeft, 100);\r\n // // }\r\n // // } else {\r\n // // clearInterval(columnScrollTimer);\r\n // // columnScrollTimer = null;\r\n // // }\r\n // // },\r\n // // stop: function (e, ui) {\r\n // // var cancel = false;\r\n // // clearInterval(columnScrollTimer);\r\n // // columnScrollTimer = null;\r\n // // var limit = null;\r\n\r\n // // if (treeColumns.hasDepth()) {\r\n // // var validPositionInGroup = columnPositionValidInGroup(ui.item);\r\n // // limit = validPositionInGroup.limit;\r\n\r\n // // cancel = !validPositionInGroup.valid;\r\n\r\n // // if (cancel)\r\n // // alert(validPositionInGroup.message);\r\n // // }\r\n\r\n // // if (cancel || !getEditorLock().commitCurrentEdit()) {\r\n // // //$(this).sortable(\"cancel\");\r\n // // return;\r\n // // }\r\n\r\n // // var reorderedIds = $headerL.sortable(\"toArray\");\r\n // // reorderedIds = reorderedIds.concat($headerR.sortable(\"toArray\"));\r\n\r\n // // var reorderedColumns = [];\r\n // // for (var i = 0; i < reorderedIds.length; i++) {\r\n // // reorderedColumns.push(columns[getColumnIndex(reorderedIds[i].replace(uid, \"\"))]);\r\n // // }\r\n // // setColumns(reorderedColumns);\r\n\r\n // // trigger(self.onColumnsReordered, { impactedColumns : getImpactedColumns( limit ) });\r\n // // e.stopPropagation();\r\n // // setupColumnResize();\r\n // // }\r\n // // });\r\n // }\r\n\r\n function getImpactedColumns(limit) {\r\n var impactedColumns = [];\r\n\r\n if (limit != undefined) {\r\n\r\n for (var i = limit.start; i <= limit.end; i++) {\r\n impactedColumns.push(columns[i]);\r\n }\r\n } else {\r\n\r\n impactedColumns = columns;\r\n }\r\n\r\n return impactedColumns;\r\n }\r\n\r\n function setupColumnMoveAndResize() {\r\n\r\n for (const c of ($container.find(\".slick-header-columns\") as any)) {\r\n Resizable(c, {\r\n resizeDelta: options.resizeDelta,\r\n onResize: new EventHandler((evt) => {\r\n processColumnResize(evt.target, evt.x);\r\n }),\r\n onStart: new EventHandler((evt) => {\r\n startColumnResize(evt.target, evt.x);\r\n }),\r\n onStop: new EventHandler((evt) => {\r\n finishColumnResize();\r\n })\r\n });\r\n // c.addEventListener(\"js-rs-resize\", (evt) => {\r\n // processColumnResize(evt.detail.target, evt.detail.pageX);\r\n // });\r\n // c.addEventListener(\"js-rs-start\", (evt) => {\r\n // startColumnResize(evt.detail.target, evt.detail.pageX);\r\n // });\r\n // c.addEventListener(\"js-rs-stop\", (evt) => {\r\n // finishColumnResize();\r\n // });\r\n }\r\n\r\n const mouseDownFnc = function (e) {\r\n let arg: MouseEvent = e;\r\n let $target: IjQueryWrapper = $(e.target).closestClass(\"slick-header-column\");\r\n if ($target.length === 0) {\r\n // special case for last column\r\n if (e.target.classList.contains(\"slick-header-columns\")) {\r\n $target = $((e.target as HTMLDivElement).lastChild as HTMLElement);\r\n } else {\r\n return;\r\n }\r\n }\r\n\r\n const x: number = arg.pageX != null ? arg.pageX : ((arg as unknown) as TouchEvent).touches[0].pageX;\r\n let columnInfo: ISlickColumn = $target.data(\"column\");\r\n\r\n if (options.enableColumnReorder) {\r\n startColumnDragging($target, x);\r\n } else {\r\n //sort\r\n }\r\n };\r\n\r\n $headers.on(\"mousedown\", mouseDownFnc);\r\n $headers.on(\"touchstart\", mouseDownFnc);\r\n\r\n }\r\n\r\n var dragColStartX = 0;\r\n var dragColCurrentX = 0;\r\n var draggedEl: HTMLElement;\r\n var dragGhost: HTMLElement;\r\n\r\n function startColumnDragging($target: IjQueryWrapper, x: number) {\r\n dragColStartX = x;\r\n dragColCurrentX = x;\r\n draggedEl = $target[0];\r\n dragGhost = document.createElement(\"div\");\r\n dragGhost.className = \"slick-col-ghost\";\r\n dragGhost.style.left = draggedEl.offsetLeft + \"px\";\r\n dragGhost.style.height = draggedEl.clientHeight + \"px\";\r\n dragGhost.style.width = draggedEl.clientWidth + \"px\";\r\n let ghostContent = document.createElement(\"div\");\r\n ghostContent.className = \"slick-ghost-content\";\r\n ghostContent.style.height = draggedEl.clientHeight + \"px\";\r\n dragGhost.appendChild(ghostContent);\r\n draggedEl.classList.add(\"slick-header-column-active\");\r\n draggedEl.parentElement.appendChild(dragGhost);\r\n window.addEventListener(\"mousemove\", processColumnDrag);\r\n window.addEventListener(\"touchmove\", processColumnDrag);\r\n window.addEventListener(\"mouseup\", finishColumnDrag);\r\n window.addEventListener(\"touchend\", finishColumnDrag);\r\n }\r\n\r\n function processColumnDrag(evt: MouseEvent) {\r\n const x: number = evt.pageX != null ? evt.pageX : ((evt as unknown) as TouchEvent).touches[0].pageX;\r\n let prevEl: HTMLElement = draggedEl.previousElementSibling as HTMLElement;\r\n let nextEl: HTMLElement = draggedEl.nextElementSibling as HTMLElement;\r\n\r\n let prevWidth = prevEl != null ? prevEl.offsetWidth : -1;\r\n let nextWidth = nextEl != null ? nextEl.offsetWidth : -1;\r\n let draggedDistance = x - dragColCurrentX;\r\n dragGhost.style.left = (draggedEl.offsetLeft + draggedDistance) + \"px\";\r\n if (prevWidth >= 0 && draggedDistance < -prevWidth) {\r\n if (prevEl != null) {\r\n draggedEl.parentNode.insertBefore(draggedEl, prevEl);\r\n }\r\n } else if (nextWidth >= 0 && draggedDistance > nextWidth) {\r\n if (nextEl != null) {\r\n draggedEl.parentNode.insertBefore(nextEl, draggedEl);\r\n }\r\n } else {\r\n return;\r\n }\r\n dragColCurrentX = x;\r\n }\r\n\r\n function applyColumnResort(arg: any) {\r\n\r\n if (!getEditorLock().commitCurrentEdit()) {\r\n return;\r\n }\r\n\r\n let $colsL = $headerL.find(\".slick-header-column\");\r\n let $colsR = $headerR.find(\".slick-header-column\");\r\n let reorderedIds = (($colsL as unknown) as HTMLElement[]).map((e) => e.id);\r\n reorderedIds = reorderedIds.concat((($colsR as unknown) as HTMLElement[]).map((e) => e.id));\r\n\r\n let reorderedColumns = [];\r\n for (let i = 0; i < reorderedIds.length; i++) {\r\n reorderedColumns.push(columns[getColumnIndex(reorderedIds[i].replace(uid, \"\"))]);\r\n }\r\n setColumns(reorderedColumns);\r\n\r\n trigger(self.onColumnsReordered, { impactedColumns: getImpactedColumns(0 /*limit*/) }); // tODO limit\r\n }\r\n\r\n function finishColumnDrag(arg: any) {\r\n const x: number = arg.pageX != null ? arg.pageX : (arg.touches.length > 0 ? arg.touches : arg.changedTouches)[0].pageX;\r\n window.removeEventListener(\"mousemove\", processColumnDrag);\r\n window.removeEventListener(\"mouseup\", finishColumnDrag);\r\n window.removeEventListener(\"touchmove\", processColumnDrag);\r\n window.removeEventListener(\"touchend\", finishColumnDrag);\r\n $headers.find(\".slick-header-column-active\").removeClass(\"slick-header-column-active\");\r\n if (dragGhost != null) {\r\n dragGhost.parentElement.removeChild(dragGhost);\r\n }\r\n dragGhost = null;\r\n if (Math.abs(dragColStartX - x) > options.dragDelta) {\r\n applyColumnResort(arg);\r\n } else {\r\n //sort\r\n }\r\n }\r\n\r\n\r\n let pageX, minPageX, maxPageX;\r\n\r\n function startColumnResize(target: HTMLElement, x: number) {\r\n const $target = $(target);\r\n // columnResizeDragging = true;\r\n if (!getEditorLock().commitCurrentEdit()) {\r\n return false;\r\n }\r\n pageX = x;\r\n let colIdx = $target.index();\r\n let columnElements = $headers.children();\r\n let shrinkLeewayOnRight = null, stretchLeewayOnRight = null;\r\n $target.addClass(\"slick-header-column-active\");\r\n // lock each column's width option to current width\r\n $.each(columnElements, function (i, e) {\r\n if (i >= columns.length) { return; }\r\n columns[i].previousWidth = $(e).width() as number;\r\n });\r\n if (options.forceFitColumns) {\r\n shrinkLeewayOnRight = 0;\r\n stretchLeewayOnRight = 0;\r\n // colums on right affect maxPageX/minPageX\r\n for (let j = colIdx + 1; j < columns.length; j++) {\r\n let c = columns[j];\r\n if (c.resizable) {\r\n if (stretchLeewayOnRight !== null) {\r\n if (c.maxWidth) {\r\n stretchLeewayOnRight += c.maxWidth - c.previousWidth;\r\n } else {\r\n stretchLeewayOnRight = null;\r\n }\r\n }\r\n shrinkLeewayOnRight += c.previousWidth - Math.max(c.minWidth || 0, absoluteColumnMinWidth);\r\n }\r\n }\r\n }\r\n let shrinkLeewayOnLeft = 0, stretchLeewayOnLeft = 0;\r\n for (let j = 0; j <= colIdx; j++) {\r\n // columns on left only affect minPageX\r\n let c = columns[j];\r\n if (c.resizable) {\r\n if (stretchLeewayOnLeft !== null) {\r\n if (c.maxWidth) {\r\n stretchLeewayOnLeft += c.maxWidth - c.previousWidth;\r\n } else {\r\n stretchLeewayOnLeft = null;\r\n }\r\n }\r\n shrinkLeewayOnLeft += c.previousWidth - Math.max(c.minWidth || 0, absoluteColumnMinWidth);\r\n }\r\n }\r\n if (shrinkLeewayOnRight === null) {\r\n shrinkLeewayOnRight = 100000;\r\n }\r\n if (shrinkLeewayOnLeft === null) {\r\n shrinkLeewayOnLeft = 100000;\r\n }\r\n if (stretchLeewayOnRight === null) {\r\n stretchLeewayOnRight = 100000;\r\n }\r\n if (stretchLeewayOnLeft === null) {\r\n stretchLeewayOnLeft = 100000;\r\n }\r\n maxPageX = pageX + Math.min(shrinkLeewayOnRight, stretchLeewayOnLeft);\r\n minPageX = pageX - Math.min(shrinkLeewayOnLeft, stretchLeewayOnRight);\r\n // $current_resize_target = $target;\r\n }\r\n\r\n\r\n\r\n function processColumnResize(target: HTMLElement, currentX: number) {\r\n // if (options.resizeDelta && Math.abs(oldResizeX - newx) <= options.resizeDelta)\r\n // return;\r\n let $target = $(target);\r\n // const width = $target.width() as number;\r\n // oldResizeX = newx;\r\n let colIdx = $target.index();\r\n if (hasFrozenColumns() && $target.closestClass(\"slick-header-columns\").hasClass(\"slick-header-columns-right\")) {\r\n colIdx += options.frozenColumn + 1;\r\n }\r\n let actualMinWidth, d = Math.min(maxPageX, Math.max(minPageX, currentX)) - pageX, x;\r\n if (d < 0) { // shrink column\r\n x = d;\r\n\r\n var newCanvasWidthL = 0, newCanvasWidthR = 0;\r\n\r\n for (let j = colIdx; j >= 0; j--) {\r\n let c = columns[j];\r\n if (c.resizable) {\r\n actualMinWidth = Math.max(c.minWidth || 0, absoluteColumnMinWidth);\r\n if (x && c.previousWidth + x < actualMinWidth) {\r\n x += c.previousWidth - actualMinWidth;\r\n c.width = actualMinWidth;\r\n } else {\r\n c.width = c.previousWidth + x;\r\n x = 0;\r\n }\r\n }\r\n }\r\n // return;\r\n\r\n for (let k = 0; k <= colIdx; k++) {\r\n let c = columns[k];\r\n\r\n if (hasFrozenColumns() && (k > options.frozenColumn)) {\r\n newCanvasWidthR += c.width;\r\n } else {\r\n newCanvasWidthL += c.width;\r\n }\r\n }\r\n\r\n if (options.forceFitColumns) {\r\n x = -d;\r\n for (let j = colIdx + 1; j < columns.length; j++) {\r\n let c = columns[j];\r\n if (c.resizable) {\r\n if (x && c.maxWidth && (c.maxWidth - c.previousWidth < x)) {\r\n x -= c.maxWidth - c.previousWidth;\r\n c.width = c.maxWidth;\r\n } else {\r\n c.width = c.previousWidth + x;\r\n x = 0;\r\n }\r\n\r\n if (hasFrozenColumns() && (j > options.frozenColumn)) {\r\n newCanvasWidthR += c.width;\r\n } else {\r\n newCanvasWidthL += c.width;\r\n }\r\n }\r\n }\r\n } else {\r\n for (let j = colIdx + 1; j < columns.length; j++) {\r\n let c = columns[j];\r\n\r\n if (hasFrozenColumns() && (j > options.frozenColumn)) {\r\n newCanvasWidthR += c.width;\r\n } else {\r\n newCanvasWidthL += c.width;\r\n }\r\n }\r\n }\r\n\r\n if (options.forceFitColumns) {\r\n x = -d;\r\n for (let j = colIdx + 1; j < columns.length; j++) {\r\n let c = columns[j];\r\n if (c.resizable) {\r\n if (x && c.maxWidth && (c.maxWidth - c.previousWidth < x)) {\r\n x -= c.maxWidth - c.previousWidth;\r\n c.width = c.maxWidth;\r\n } else {\r\n c.width = c.previousWidth + x;\r\n x = 0;\r\n }\r\n }\r\n }\r\n }\r\n } else { // stretch column\r\n x = d;\r\n\r\n var newCanvasWidthL = 0, newCanvasWidthR = 0;\r\n\r\n for (let j = colIdx; j >= 0; j--) {\r\n let c = columns[j];\r\n if (c.resizable) {\r\n if (x && c.maxWidth && (c.maxWidth - c.previousWidth < x)) {\r\n x -= c.maxWidth - c.previousWidth;\r\n c.width = c.maxWidth;\r\n } else {\r\n c.width = c.previousWidth + x;\r\n x = 0;\r\n }\r\n }\r\n }\r\n\r\n for (let k = 0; k <= colIdx; k++) {\r\n let c = columns[k];\r\n\r\n if (hasFrozenColumns() && (k > options.frozenColumn)) {\r\n newCanvasWidthR += c.width;\r\n } else {\r\n newCanvasWidthL += c.width;\r\n }\r\n }\r\n\r\n if (options.forceFitColumns) {\r\n x = -d;\r\n for (let j = colIdx + 1; j < columns.length; j++) {\r\n let c = columns[j];\r\n if (c.resizable) {\r\n actualMinWidth = Math.max(c.minWidth || 0, absoluteColumnMinWidth);\r\n if (x && c.previousWidth + x < actualMinWidth) {\r\n x += c.previousWidth - actualMinWidth;\r\n c.width = actualMinWidth;\r\n } else {\r\n c.width = c.previousWidth + x;\r\n x = 0;\r\n }\r\n\r\n if (hasFrozenColumns() && (j > options.frozenColumn)) {\r\n newCanvasWidthR += c.width;\r\n } else {\r\n newCanvasWidthL += c.width;\r\n }\r\n }\r\n }\r\n } else {\r\n for (let j = colIdx + 1; j < columns.length; j++) {\r\n let c = columns[j];\r\n\r\n if (hasFrozenColumns() && (j > options.frozenColumn)) {\r\n newCanvasWidthR += c.width;\r\n } else {\r\n newCanvasWidthL += c.width;\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (hasFrozenColumns() && newCanvasWidthL != canvasWidthL) {\r\n $headerL.width(newCanvasWidthL + 1000);\r\n $paneHeaderR.css(\"left\", newCanvasWidthL);\r\n }\r\n\r\n applyColumnHeaderWidths();\r\n // applyColumnGroupHeaderWidths();\r\n if (options.syncColumnCellResize) {\r\n applyColumnWidths();\r\n }\r\n\r\n }\r\n\r\n function finishColumnResize() {\r\n const changedColumns = [];\r\n\r\n let newWidth: number;\r\n let columnElements = $headers.children();\r\n $headers.find(\".slick-header-column-active\").removeClass(\"slick-header-column-active\");\r\n for (let j = 0; j < columns.length; j++) {\r\n let c = columns[j];\r\n newWidth = $(columnElements[j]).width() as number;\r\n\r\n if (c.previousWidth !== newWidth) {\r\n changedColumns.push({cell: j,\r\n width: newWidth,\r\n previousWidth: c.previousWidth,\r\n column: c\r\n });\r\n if (c.rerenderOnResize) {\r\n invalidateAllRows();\r\n break;\r\n }\r\n }\r\n }\r\n updateCanvasWidth(true);\r\n resizeCanvas();\r\n handleScroll();\r\n\r\n trigger(self.onColumnsResized, changedColumns);\r\n }\r\n\r\n\r\n // function setupColumnResize() {\r\n // if (1) return;\r\n // var $col, j, k, c, pageX, columnElements: IjQueryWrapper, minPageX, maxPageX, firstResizable, lastResizable;\r\n // columnElements = $headers.children();\r\n // columnElements.find(\".slick-resizable-handle\").remove();\r\n // $.each(columnElements, function (i, e) {\r\n // if (i >= columns.length) { return; }\r\n // if (columns[i].resizable) {\r\n // if (firstResizable === undefined) {\r\n // firstResizable = i;\r\n // }\r\n // lastResizable = i;\r\n // }\r\n // });\r\n // if (firstResizable === undefined) {\r\n // return;\r\n // }\r\n // $.each(columnElements, function (i, e) {\r\n // if (i >= columns.length) { return; }\r\n // if (i < firstResizable || (options.forceFitColumns && i >= lastResizable)) {\r\n // return;\r\n // }\r\n // $col = $(e);\r\n // var resHandle = document.createElement(\"div\");\r\n // resHandle.className = \"slick-resizable-handle\";\r\n // e.appendChild(resHandle);\r\n // $(resHandle).on(\"dragstart\", function (e, dd) {\r\n // if (!getEditorLock().commitCurrentEdit()) {\r\n // return false;\r\n // }\r\n // pageX = e.pageX;\r\n // resHandle.parentElement.classList.add(\"slick-header-column-active\");\r\n // var shrinkLeewayOnRight = null, stretchLeewayOnRight = null;\r\n // // lock each column's width option to current width\r\n // $.each(columnElements, function (i, e) {\r\n // if (i >= columns.length) { return; }\r\n // columns[i].previousWidth = $(e).width(); //.outerWidth();\r\n // });\r\n // if (options.forceFitColumns) {\r\n // shrinkLeewayOnRight = 0;\r\n // stretchLeewayOnRight = 0;\r\n // // colums on right affect maxPageX/minPageX\r\n // for (j = i + 1; j < columns.length; j++) {\r\n // c = columns[j];\r\n // if (c.resizable) {\r\n // if (stretchLeewayOnRight !== null) {\r\n // if (c.maxWidth) {\r\n // stretchLeewayOnRight += c.maxWidth - c.previousWidth;\r\n // } else {\r\n // stretchLeewayOnRight = null;\r\n // }\r\n // }\r\n // shrinkLeewayOnRight += c.previousWidth - Math.max(c.minWidth || 0, absoluteColumnMinWidth);\r\n // }\r\n // }\r\n // }\r\n // var shrinkLeewayOnLeft = 0, stretchLeewayOnLeft = 0;\r\n // for (j = 0; j <= i; j++) {\r\n // // columns on left only affect minPageX\r\n // c = columns[j];\r\n // if (c.resizable) {\r\n // if (stretchLeewayOnLeft !== null) {\r\n // if (c.maxWidth) {\r\n // stretchLeewayOnLeft += c.maxWidth - c.previousWidth;\r\n // } else {\r\n // stretchLeewayOnLeft = null;\r\n // }\r\n // }\r\n // shrinkLeewayOnLeft += c.previousWidth - Math.max(c.minWidth || 0, absoluteColumnMinWidth);\r\n // }\r\n // }\r\n // if (shrinkLeewayOnRight === null) {\r\n // shrinkLeewayOnRight = 100000;\r\n // }\r\n // if (shrinkLeewayOnLeft === null) {\r\n // shrinkLeewayOnLeft = 100000;\r\n // }\r\n // if (stretchLeewayOnRight === null) {\r\n // stretchLeewayOnRight = 100000;\r\n // }\r\n // if (stretchLeewayOnLeft === null) {\r\n // stretchLeewayOnLeft = 100000;\r\n // }\r\n // maxPageX = pageX + Math.min(shrinkLeewayOnRight, stretchLeewayOnLeft);\r\n // minPageX = pageX - Math.min(shrinkLeewayOnLeft, stretchLeewayOnRight);\r\n // })\r\n // .on(\"drag\", function (e, dd) {\r\n // columnResizeDragging = true;\r\n // var actualMinWidth, d = Math.min(maxPageX, Math.max(minPageX, e.pageX)) - pageX, x;\r\n // if (d < 0) { // shrink column\r\n // x = d;\r\n\r\n // var newCanvasWidthL = 0, newCanvasWidthR = 0;\r\n\r\n // for (j = i; j >= 0; j--) {\r\n // c = columns[j];\r\n // if (c.resizable) {\r\n // actualMinWidth = Math.max(c.minWidth || 0, absoluteColumnMinWidth);\r\n // if (x && c.previousWidth + x < actualMinWidth) {\r\n // x += c.previousWidth - actualMinWidth;\r\n // c.width = actualMinWidth;\r\n // } else {\r\n // c.width = c.previousWidth + x;\r\n // x = 0;\r\n // }\r\n // }\r\n // }\r\n\r\n // for (k = 0; k <= i; k++) {\r\n // c = columns[k];\r\n\r\n // if (hasFrozenColumns() && (k > options.frozenColumn)) {\r\n // newCanvasWidthR += c.width;\r\n // } else {\r\n // newCanvasWidthL += c.width;\r\n // }\r\n // }\r\n\r\n // if (options.forceFitColumns) {\r\n // x = -d;\r\n // for (j = i + 1; j < columns.length; j++) {\r\n // c = columns[j];\r\n // if (c.resizable) {\r\n // if (x && c.maxWidth && (c.maxWidth - c.previousWidth < x)) {\r\n // x -= c.maxWidth - c.previousWidth;\r\n // c.width = c.maxWidth;\r\n // } else {\r\n // c.width = c.previousWidth + x;\r\n // x = 0;\r\n // }\r\n\r\n // if (hasFrozenColumns() && (j > options.frozenColumn)) {\r\n // newCanvasWidthR += c.width;\r\n // } else {\r\n // newCanvasWidthL += c.width;\r\n // }\r\n // }\r\n // }\r\n // } else {\r\n // for (j = i + 1; j < columns.length; j++) {\r\n // c = columns[j];\r\n\r\n // if (hasFrozenColumns() && (j > options.frozenColumn)) {\r\n // newCanvasWidthR += c.width;\r\n // } else {\r\n // newCanvasWidthL += c.width;\r\n // }\r\n // }\r\n // }\r\n\r\n // if (options.forceFitColumns) {\r\n // x = -d;\r\n // for (j = i + 1; j < columns.length; j++) {\r\n // c = columns[j];\r\n // if (c.resizable) {\r\n // if (x && c.maxWidth && (c.maxWidth - c.previousWidth < x)) {\r\n // x -= c.maxWidth - c.previousWidth;\r\n // c.width = c.maxWidth;\r\n // } else {\r\n // c.width = c.previousWidth + x;\r\n // x = 0;\r\n // }\r\n // }\r\n // }\r\n // }\r\n // } else { // stretch column\r\n // x = d;\r\n\r\n // var newCanvasWidthL = 0, newCanvasWidthR = 0;\r\n\r\n // for (j = i; j >= 0; j--) {\r\n // c = columns[j];\r\n // if (c.resizable) {\r\n // if (x && c.maxWidth && (c.maxWidth - c.previousWidth < x)) {\r\n // x -= c.maxWidth - c.previousWidth;\r\n // c.width = c.maxWidth;\r\n // } else {\r\n // c.width = c.previousWidth + x;\r\n // x = 0;\r\n // }\r\n // }\r\n // }\r\n\r\n // for (k = 0; k <= i; k++) {\r\n // c = columns[k];\r\n\r\n // if (hasFrozenColumns() && (k > options.frozenColumn)) {\r\n // newCanvasWidthR += c.width;\r\n // } else {\r\n // newCanvasWidthL += c.width;\r\n // }\r\n // }\r\n\r\n // if (options.forceFitColumns) {\r\n // x = -d;\r\n // for (j = i + 1; j < columns.length; j++) {\r\n // c = columns[j];\r\n // if (c.resizable) {\r\n // actualMinWidth = Math.max(c.minWidth || 0, absoluteColumnMinWidth);\r\n // if (x && c.previousWidth + x < actualMinWidth) {\r\n // x += c.previousWidth - actualMinWidth;\r\n // c.width = actualMinWidth;\r\n // } else {\r\n // c.width = c.previousWidth + x;\r\n // x = 0;\r\n // }\r\n\r\n // if (hasFrozenColumns() && (j > options.frozenColumn)) {\r\n // newCanvasWidthR += c.width;\r\n // } else {\r\n // newCanvasWidthL += c.width;\r\n // }\r\n // }\r\n // }\r\n // } else {\r\n // for (j = i + 1; j < columns.length; j++) {\r\n // c = columns[j];\r\n\r\n // if (hasFrozenColumns() && (j > options.frozenColumn)) {\r\n // newCanvasWidthR += c.width;\r\n // } else {\r\n // newCanvasWidthL += c.width;\r\n // }\r\n // }\r\n // }\r\n // }\r\n\r\n // if (hasFrozenColumns() && newCanvasWidthL != canvasWidthL) {\r\n // $headerL.width(newCanvasWidthL + 1000);\r\n // $paneHeaderR.css('left', newCanvasWidthL);\r\n // }\r\n\r\n // applyColumnHeaderWidths();\r\n // applyColumnGroupHeaderWidths();\r\n // if (options.syncColumnCellResize) {\r\n // applyColumnWidths();\r\n // }\r\n // })\r\n // .on(\"dragend\", function (e, dd) {\r\n // var newWidth;\r\n // resHandle.parentElement.classList.remove(\"slick-header-column-active\");\r\n // for (j = 0; j < columns.length; j++) {\r\n // c = columns[j];\r\n // newWidth = $(columnElements[j]).width(); //.outerWidth();\r\n\r\n // if (c.previousWidth !== newWidth && c.rerenderOnResize) {\r\n // invalidateAllRows();\r\n // }\r\n // }\r\n // updateCanvasWidth(true);\r\n // render();\r\n // trigger(self.onColumnsResized, {});\r\n // setTimeout(function () { columnResizeDragging = false; }, 300);\r\n // });\r\n // });\r\n // }\r\n\r\n function getVBoxDelta($el) {\r\n var p = [\"borderTopWidth\", \"borderBottomWidth\", \"paddingTop\", \"paddingBottom\"];\r\n var delta = 0;\r\n $.each(p, function (n, val) {\r\n delta += parseFloat($el.css(val)) || 0;\r\n });\r\n return delta;\r\n }\r\n\r\n function setFrozenOptions() {\r\n options.frozenColumn = (options.frozenColumn >= 0 && options.frozenColumn < columns.length)\r\n ? options.frozenColumn\r\n : -1;\r\n\r\n if (options.frozenRow > -1) {\r\n hasFrozenRows = true;\r\n frozenRowsHeight = getRowTop(options.frozenRow);\r\n\r\n var dataLength = getDataLength();\r\n\r\n actualFrozenRow = (options.frozenBottom)\r\n ? (dataLength - options.frozenRow)\r\n : options.frozenRow;\r\n } else {\r\n hasFrozenRows = false;\r\n }\r\n }\r\n\r\n function setPaneVisibility() {\r\n if (hasFrozenColumns()) {\r\n $.each($paneHeaderR, function (idx, el) { el.style.display = \"\"; });\r\n $.each($paneTopR, function (idx, el) { el.style.display = \"\"; });\r\n\r\n if (hasFrozenRows) {\r\n $.each($paneBottomL, function (idx, el) { el.style.display = \"\"; });\r\n $.each($paneBottomR, function (idx, el) { el.style.display = \"\"; });\r\n } else {\r\n $.each($paneBottomR, function (idx, el) { el.style.display = \"none\"; });\r\n $.each($paneBottomL, function (idx, el) { el.style.display = \"none\"; });\r\n }\r\n } else {\r\n $.each($paneHeaderR, function (idx, el) { el.style.display = \"none\"; });\r\n $.each($paneTopR, function (idx, el) { el.style.display = \"none\"; });\r\n $.each($paneBottomR, function (idx, el) { el.style.display = \"none\"; });\r\n\r\n if (hasFrozenRows) {\r\n $.each($paneBottomL, function (idx, el) { el.style.display = \"\"; });\r\n } else {\r\n $.each($paneBottomR, function (idx, el) { el.style.display = \"none\"; });\r\n $.each($paneBottomL, function (idx, el) { el.style.display = \"none\"; });\r\n }\r\n }\r\n }\r\n\r\n function setOverflow() {\r\n $viewportTopL\r\n .css(\"overflow-x\", options.alwaysShowHorizontalScroll ? \"scroll\" : (hasFrozenColumns()) ? (hasFrozenRows && !options.alwaysAllowHorizontalScroll ? \"hidden\" : \"scroll\") : (hasFrozenRows && !options.alwaysAllowHorizontalScroll ? \"hidden\" : \"auto\"))\r\n .css(\"overflow-y\", options.alwaysShowVerticalScroll ? \"scroll\" : ((hasFrozenColumns()) ? (hasFrozenRows ? \"hidden\" : \"hidden\") : (hasFrozenRows ? \"scroll\" : \"auto\"))\r\n );\r\n\r\n $viewportTopR\r\n .css(\"overflow-x\", options.alwaysShowHorizontalScroll ? \"scroll\" : (hasFrozenColumns()) ? (hasFrozenRows && !options.alwaysAllowHorizontalScroll ? \"hidden\" : \"scroll\") : (hasFrozenRows && !options.alwaysAllowHorizontalScroll ? \"hidden\" : \"auto\"))\r\n .css(\"overflow-y\", options.alwaysShowVerticalScroll ? \"scroll\" : ((hasFrozenColumns()) ? (hasFrozenRows ? \"scroll\" : \"auto\") : (hasFrozenRows ? \"scroll\" : \"auto\"))\r\n );\r\n\r\n $viewportBottomL\r\n .css(\"overflow-x\", options.alwaysShowHorizontalScroll ? \"scroll\" : (hasFrozenColumns()) ? (hasFrozenRows && !options.alwaysAllowHorizontalScroll ? \"scroll\" : \"auto\") : (hasFrozenRows && !options.alwaysAllowHorizontalScroll ? \"auto\" : \"auto\"))\r\n .css(\"overflow-y\", options.alwaysShowVerticalScroll ? \"scroll\" : ((hasFrozenColumns()) ? (hasFrozenRows ? \"hidden\" : \"hidden\") : (hasFrozenRows ? \"scroll\" : \"auto\"))\r\n );\r\n\r\n $viewportBottomR\r\n .css(\"overflow-x\", options.alwaysShowHorizontalScroll ? \"scroll\" : (hasFrozenColumns()) ? (hasFrozenRows && !options.alwaysAllowHorizontalScroll ? \"scroll\" : \"auto\") : (hasFrozenRows && !options.alwaysAllowHorizontalScroll ? \"auto\" : \"auto\"))\r\n .css(\"overflow-y\", options.alwaysShowVerticalScroll ? \"scroll\" : ((hasFrozenColumns()) ? (hasFrozenRows ? \"auto\" : \"auto\") : (hasFrozenRows ? \"auto\" : \"auto\"))\r\n );\r\n if (options.viewportClass) {\r\n $viewportTopL.toggleClass(options.viewportClass, true);\r\n $viewportTopR.toggleClass(options.viewportClass, true);\r\n $viewportBottomL.toggleClass(options.viewportClass, true);\r\n $viewportBottomR.toggleClass(options.viewportClass, true);\r\n }\r\n }\r\n\r\n function setScroller() {\r\n if (hasFrozenColumns()) {\r\n $headerScrollContainer = $headerScrollerR;\r\n $headerRowScrollContainer = $headerRowScrollerR;\r\n $footerRowScrollContainer = $footerRowScrollerR;\r\n\r\n if (hasFrozenRows) {\r\n if (options.frozenBottom) {\r\n $viewportScrollContainerX = $viewportBottomR;\r\n $viewportScrollContainerY = $viewportTopR;\r\n } else {\r\n $viewportScrollContainerX = $viewportScrollContainerY = $viewportBottomR;\r\n }\r\n } else {\r\n $viewportScrollContainerX = $viewportScrollContainerY = $viewportTopR;\r\n }\r\n } else {\r\n $headerScrollContainer = $headerScrollerL;\r\n $headerRowScrollContainer = $headerRowScrollerL;\r\n $footerRowScrollContainer = $footerRowScrollerL;\r\n\r\n if (hasFrozenRows) {\r\n if (options.frozenBottom) {\r\n $viewportScrollContainerX = $viewportBottomL;\r\n $viewportScrollContainerY = $viewportTopL;\r\n } else {\r\n $viewportScrollContainerX = $viewportScrollContainerY = $viewportBottomL;\r\n }\r\n } else {\r\n $viewportScrollContainerX = $viewportScrollContainerY = $viewportTopL;\r\n }\r\n }\r\n }\r\n\r\n function measureCellPaddingAndBorder() {\r\n var el;\r\n var h = [\"borderLeftWidth\", \"borderRightWidth\", \"paddingLeft\", \"paddingRight\"];\r\n var v = [\"borderTopWidth\", \"borderBottomWidth\", \"paddingTop\", \"paddingBottom\"];\r\n\r\n // jquery prior to version 1.8 handles .width setter/getter as a direct css write/read\r\n // jquery 1.8 changed .width to read the true inner element width if box-sizing is set to border-box, and introduced a setter for .outerWidth\r\n // so for equivalent functionality, prior to 1.8 use .width, and after use .outerWidth\r\n // var verArray = $.fn.jquery.split('.');\r\n jQueryNewWidthBehaviour = false; // (verArray[0]==1 && verArray[1]>=8) || verArray[0] >=2;\r\n\r\n el = $(\"<div class='ui-state-default slick-header-column' style='visibility:hidden'>-</div>\").appendTo($headers);\r\n headerColumnWidthDiff = headerColumnHeightDiff = 0;\r\n if (el.css(\"box-sizing\") != \"border-box\" && el.css(\"-moz-box-sizing\") != \"border-box\" && el.css(\"-webkit-box-sizing\") != \"border-box\") {\r\n $.each(h, function (n, val) {\r\n headerColumnWidthDiff += parseFloat(el.css(val)) || 0;\r\n });\r\n $.each(v, function (n, val) {\r\n headerColumnHeightDiff += parseFloat(el.css(val)) || 0;\r\n });\r\n }\r\n el.remove();\r\n\r\n var r = $(\"<div class='slick-row' />\").appendTo($canvas);\r\n el = $(\"<div class='slick-cell' id='' style='visibility:hidden'>-</div>\").appendTo(r);\r\n cellWidthDiff = cellHeightDiff = 0;\r\n if (el.css(\"box-sizing\") != \"border-box\" && el.css(\"-moz-box-sizing\") != \"border-box\" && el.css(\"-webkit-box-sizing\") != \"border-box\") {\r\n $.each(h, function (n, val) {\r\n cellWidthDiff += parseFloat(el.css(val)) || 0;\r\n });\r\n $.each(v, function (n, val) {\r\n cellHeightDiff += parseFloat(el.css(val)) || 0;\r\n });\r\n }\r\n r.remove();\r\n\r\n absoluteColumnMinWidth = Math.max(headerColumnWidthDiff, cellWidthDiff);\r\n }\r\n\r\n function createCssRules() {\r\n let style = document.createElement(\"style\");\r\n style.type = \"text/css\";\r\n $(\"head\").append(style);\r\n $style = $(style);\r\n // $style = $(\"<style type='text/css' rel='stylesheet' />\").appendTo($(\"head\"));\r\n var rowHeight = (options.rowHeight - cellHeightDiff);\r\n var rules = [\r\n \".\" + uid + \" .slick-group-header-column { left: 1000px; }\",\r\n \".\" + uid + \" .slick-header-column { left: 1000px; }\",\r\n \".\" + uid + \" .slick-top-panel { height:\" + options.topPanelHeight + \"px; }\",\r\n \".\" + uid + \" .slick-preheader-panel { height:\" + options.preHeaderPanelHeight + \"px; }\",\r\n \".\" + uid + \" .slick-headerrow-columns { height:\" + options.headerRowHeight + \"px; }\",\r\n \".\" + uid + \" .slick-footerrow-columns { height:\" + options.footerRowHeight + \"px; }\",\r\n \".\" + uid + \" .slick-cell { height:\" + rowHeight + \"px; }\",\r\n \".\" + uid + \" .slick-row { height:\" + options.rowHeight + \"px; }\"\r\n ];\r\n\r\n for (var i = 0; i < columns.length; i++) {\r\n rules.push(\".\" + uid + \" .l\" + i + \" { }\");\r\n rules.push(\".\" + uid + \" .r\" + i + \" { }\");\r\n }\r\n\r\n if ($style[0].styleSheet) { // iE\r\n $style[0].styleSheet.cssText = rules.join(\" \");\r\n } else {\r\n $style[0].appendChild(document.createTextNode(rules.join(\" \")));\r\n }\r\n }\r\n\r\n function getColumnCssRules(idx) {\r\n var i;\r\n if (!stylesheet) {\r\n var sheets = document.styleSheets;\r\n for (i = 0; i < sheets.length; i++) {\r\n if (sheets[i].ownerNode == $style[0]) {\r\n stylesheet = sheets[i];\r\n break;\r\n }\r\n }\r\n\r\n if (!stylesheet) {\r\n throw new Error(\"Cannot find stylesheet.\");\r\n }\r\n\r\n // find and cache column CSS rules\r\n columnCssRulesL = [];\r\n columnCssRulesR = [];\r\n var cssRules = (stylesheet.cssRules || stylesheet.rules);\r\n var matches, columnIdx;\r\n for (i = 0; i < cssRules.length; i++) {\r\n var selector = cssRules[i].selectorText;\r\n if (matches = /\\.l\\d+/.exec(selector)) {\r\n columnIdx = parseInt(matches[0].substr(2, matches[0].length - 2), 10);\r\n columnCssRulesL[columnIdx] = cssRules[i];\r\n } else if (matches = /\\.r\\d+/.exec(selector)) {\r\n columnIdx = parseInt(matches[0].substr(2, matches[0].length - 2), 10);\r\n columnCssRulesR[columnIdx] = cssRules[i];\r\n }\r\n }\r\n }\r\n\r\n return {\r\n \"left\": columnCssRulesL[idx],\r\n \"right\": columnCssRulesR[idx]\r\n };\r\n }\r\n\r\n function removeCssRules() {\r\n $style.remove();\r\n stylesheet = null;\r\n }\r\n\r\n function destroy() {\r\n getEditorLock().cancelCurrentEdit();\r\n\r\n trigger(self.onBeforeDestroy, {});\r\n\r\n var i = plugins.length;\r\n while (i--) {\r\n unregisterPlugin(plugins[i]);\r\n }\r\n\r\n unbindAncestorScrollEvents();\r\n // $container.off(\".slickgrid\"); //TODO TODOFIX\r\n removeCssRules();\r\n\r\n // $canvas.off(\"draginit dragstart dragend drag\"); //TODO TODOFIX\r\n $container.empty().removeClass(uid);\r\n }\r\n\r\n\r\n //////////////////////////////////////////////////////////////////////////////////////////////\r\n // general\r\n\r\n function trigger(evt, args, e?: any) {\r\n // if (evt.countHandlers() === 0) {\r\n // return;\r\n // }\r\n e = e || new Slick.EventData();\r\n if (e.stopImmediatePropagation) {\r\n let tmp_fnc = e.stopImmediatePropagation;\r\n e.stopImmediatePropagation = function () {\r\n tmp_fnc.apply(e);\r\n e._isImmediatePropagationStopped = true;\r\n };\r\n if (!e.isImmediatePropagationStopped) {\r\n e.isImmediatePropagationStopped = function () {\r\n return e._isImmediatePropagationStopped;\r\n };\r\n }\r\n }\r\n if (e.stopPropagation) {\r\n let tmp_fnc = e.stopPropagation;\r\n e.stopPropagation = function () {\r\n tmp_fnc.apply(e);\r\n e._isPropagationStopped = true;\r\n };\r\n if (!e.isPropagationStopped) {\r\n e.isPropagationStopped = function () {\r\n return e._isPropagationStopped;\r\n };\r\n }\r\n }\r\n args = args || {};\r\n args.grid = self;\r\n return evt.notify(args, e, self);\r\n }\r\n\r\n function getEditorLock() {\r\n return options.editorLock;\r\n }\r\n\r\n function getEditController() {\r\n return editController;\r\n }\r\n\r\n function getColumnIndex(id: string): number {\r\n return columnsById[id];\r\n }\r\n\r\n function getColumnById(id: string): ISlickColumn {\r\n return columns[getColumnIndex(id)];\r\n }\r\n\r\n function autosizeColumns() {\r\n var i, c,\r\n widths = [],\r\n shrinkLeeway = 0,\r\n total = 0,\r\n prevTotal,\r\n availWidth = viewportHasVScroll ? viewportW - scrollbarDimensions.width : viewportW;\r\n\r\n for (i = 0; i < columns.length; i++) {\r\n c = columns[i];\r\n widths.push(c.width);\r\n total += c.width;\r\n if (c.resizable) {\r\n shrinkLeeway += c.width - Math.max(c.minWidth, absoluteColumnMinWidth);\r\n }\r\n }\r\n\r\n // shrink\r\n prevTotal = total;\r\n while (total > availWidth && shrinkLeeway) {\r\n var shrinkProportion = (total - availWidth) / shrinkLeeway;\r\n for (i = 0; i < columns.length && total > availWidth; i++) {\r\n c = columns[i];\r\n var width = widths[i];\r\n if (!c.resizable || width <= c.minWidth || width <= absoluteColumnMinWidth) {\r\n continue;\r\n }\r\n var absMinWidth = Math.max(c.minWidth, absoluteColumnMinWidth);\r\n var shrinkSize = Math.floor(shrinkProportion * (width - absMinWidth)) || 1;\r\n shrinkSize = Math.min(shrinkSize, width - absMinWidth);\r\n total -= shrinkSize;\r\n shrinkLeeway -= shrinkSize;\r\n widths[i] -= shrinkSize;\r\n }\r\n if (prevTotal <= total) { // avoid infinite loop\r\n break;\r\n }\r\n prevTotal = total;\r\n }\r\n\r\n // grow\r\n prevTotal = total;\r\n while (total < availWidth) {\r\n var growProportion = availWidth / total;\r\n for (i = 0; i < columns.length && total < availWidth; i++) {\r\n c = columns[i];\r\n var currentWidth = widths[i];\r\n var growSize;\r\n\r\n if (!c.resizable || c.maxWidth <= currentWidth) {\r\n growSize = 0;\r\n } else {\r\n growSize = Math.min(Math.floor(growProportion * currentWidth) - currentWidth, (c.maxWidth - currentWidth) || 1000000) || 1;\r\n }\r\n total += growSize;\r\n widths[i] += (total <= availWidth ? growSize : 0);\r\n }\r\n if (prevTotal >= total) { // avoid infinite loop\r\n break;\r\n }\r\n prevTotal = total;\r\n }\r\n\r\n var reRender = false;\r\n for (i = 0; i < columns.length; i++) {\r\n if (columns[i].rerenderOnResize && columns[i].width != widths[i]) {\r\n reRender = true;\r\n }\r\n columns[i].width = widths[i];\r\n }\r\n\r\n applyColumnHeaderWidths();\r\n // applyColumnGroupHeaderWidths();\r\n updateCanvasWidth(true);\r\n\r\n trigger(self.onAutosizeColumns, { \"columns\": columns });\r\n\r\n if (reRender) {\r\n invalidateAllRows();\r\n render();\r\n }\r\n }\r\n\r\n // function applyColumnGroupHeaderWidths() {\r\n // if (!treeColumns.hasDepth()) {\r\n // return;\r\n // }\r\n\r\n // for (var depth = $groupHeadersL.length - 1; depth >= 0; depth--) {\r\n\r\n // var groupColumns = treeColumns.getColumnsInDepth(depth);\r\n\r\n // $.each($().add($groupHeadersL[depth]).add($groupHeadersR[depth]), function (i, el) {\r\n // var $groupHeader = $(el),\r\n // currentColumnIndex = 0;\r\n\r\n // $groupHeader.width(i == 0 ? getHeadersWidthL() : getHeadersWidthR());\r\n\r\n // $.each($groupHeader.children(), function (idx2, el2) {\r\n // var $groupHeaderColumn = $(el2);\r\n\r\n // var m = $(this).data(\"column\");\r\n\r\n // m.width = 0;\r\n\r\n // m.columns.forEach(function () {\r\n // var headerColumn = <HTMLElement>(<HTMLElement>$groupHeader[0]).nextElementSibling.children[currentColumnIndex++];\r\n // m.width += headerColumn.offsetWidth;\r\n // });\r\n\r\n // $groupHeaderColumn.width(m.width - headerColumnWidthDiff);\r\n\r\n // });\r\n\r\n // });\r\n\r\n // }\r\n // }\r\n\r\n function applyColumnHeaderWidths() {\r\n if (!initialized) { return; }\r\n var h: IjQueryWrapper;\r\n\r\n for (var i = 0, headers = $headers.children(), ii = columns.length; i < ii; i++) {\r\n h = $(headers[i]);\r\n if (jQueryNewWidthBehaviour) {\r\n if (h.width() !== columns[i].width) {\r\n h.width(columns[i].width);\r\n }\r\n } else {\r\n // if (<number>h.width() !== <number>h.width() - headerColumnWidthDiff) {\r\n h.width(columns[i].width - headerColumnWidthDiff);\r\n // }\r\n }\r\n }\r\n\r\n updateColumnCaches();\r\n }\r\n\r\n function applyColumnWidths() {\r\n var x = 0, w, rule;\r\n for (var i = 0; i < columns.length; i++) {\r\n w = columns[i].width;\r\n\r\n rule = getColumnCssRules(i);\r\n rule.left.style.left = x + \"px\";\r\n rule.right.style.right = (((options.frozenColumn != -1 && i > options.frozenColumn) ? canvasWidthR : canvasWidthL) - x - w) + \"px\";\r\n\r\n // if this column is frozen, reset the css left value since the\r\n // column starts in a new viewport.\r\n if (options.frozenColumn == i) {\r\n x = 0;\r\n } else {\r\n x += columns[i].width;\r\n }\r\n }\r\n }\r\n\r\n function setSortColumn(columnId, ascending) {\r\n setSortColumns([{ columnId: columnId, sortAsc: ascending }]);\r\n }\r\n\r\n function setSortColumns(cols) {\r\n sortColumns = cols;\r\n var numberCols = options.numberedMultiColumnSort && sortColumns.length > 1;\r\n var headerColumnEls = $headers.children();\r\n headerColumnEls\r\n .removeClass(\"slick-header-column-sorted\")\r\n .find(\".slick-sort-indicator\")\r\n .removeClass(\"slick-sort-indicator-asc slick-sort-indicator-desc\");\r\n headerColumnEls\r\n .find(\".slick-sort-indicator-numbered\")\r\n .text(\"\");\r\n\r\n $.each(sortColumns, function (i, col) {\r\n if (col.sortAsc == null) {\r\n col.sortAsc = true;\r\n }\r\n var columnIndex = getColumnIndex(col.columnId);\r\n if (columnIndex != null) {\r\n $(headerColumnEls[columnIndex])\r\n .addClass(\"slick-header-column-sorted\")\r\n .find(\".slick-sort-indicator\")\r\n .addClass(col.sortAsc ? \"slick-sort-indicator-asc\" : \"slick-sort-indicator-desc\");\r\n if (numberCols) {\r\n $(headerColumnEls[columnIndex])\r\n .find(\".slick-sort-indicator-numbered\")\r\n .text((i + 1).toString());\r\n }\r\n }\r\n });\r\n }\r\n\r\n function getSortColumns() {\r\n return sortColumns;\r\n }\r\n\r\n function handleSelectedRangesChanged(e, ranges) {\r\n var previousSelectedRows = selectedRows.slice(0); // shallow copy previously selected rows for later comparison\r\n selectedRows = [];\r\n var hash = {};\r\n for (var i = 0; i < ranges.length; i++) {\r\n for (var j = ranges[i].fromRow; j <= ranges[i].toRow; j++) {\r\n if (!hash[j]) { // prevent duplicates\r\n selectedRows.push(j);\r\n hash[j] = {};\r\n }\r\n for (var k = ranges[i].fromCell; k <= ranges[i].toCell; k++) {\r\n if (canCellBeSelected(j, k)) {\r\n hash[j][columns[k].id] = options.selectedCellCssClass;\r\n }\r\n }\r\n }\r\n }\r\n\r\n setCellCssStyles(options.selectedCellCssClass, hash);\r\n\r\n if (simpleArrayEquals(previousSelectedRows, selectedRows)) {\r\n trigger(self.onSelectedRowsChanged, { rows: getSelectedRows() }, e);\r\n }\r\n }\r\n\r\n // compare 2 simple arrays (integers or strings only, do not use to compare object arrays)\r\n function simpleArrayEquals(arr1, arr2) {\r\n return Array.isArray(arr1) && Array.isArray(arr2) && arr2.sort().toString() !== arr1.sort().toString();\r\n }\r\n\r\n function getColumns() {\r\n return columns;\r\n }\r\n\r\n function updateColumnCaches() {\r\n // pre-calculate cell boundaries.\r\n columnPosLeft = [];\r\n columnPosRight = [];\r\n var x = 0;\r\n for (var i = 0, ii = columns.length; i < ii; i++) {\r\n columnPosLeft[i] = x;\r\n columnPosRight[i] = x + columns[i].width;\r\n\r\n if (options.frozenColumn == i) {\r\n x = 0;\r\n } else {\r\n x += columns[i].width;\r\n }\r\n }\r\n }\r\n\r\n function updateColumnProps() {\r\n columnsById = {};\r\n for (var i = 0; i < columns.length; i++) {\r\n if (columns[i].width) { (<any>columns[i]).widthRequest = columns[i].width; }\r\n\r\n var m = columns[i] = $.shallowExtend({}, columnDefaults, columns[i]);\r\n columnsById[m.id] = i;\r\n if (m.minWidth && m.width < m.minWidth) {\r\n m.width = m.minWidth;\r\n }\r\n if (m.maxWidth && m.width > m.maxWidth) {\r\n m.width = m.maxWidth;\r\n }\r\n }\r\n }\r\n\r\n function setColumns(columnDefinitions) {\r\n // var _treeColumns = new Slick.TreeColumns(columnDefinitions);\r\n // if (_treeColumns.hasDepth()) {\r\n // treeColumns = _treeColumns;\r\n // columns = treeColumns.extractColumns();\r\n // } else {\r\n columns = columnDefinitions;\r\n // }\r\n\r\n updateColumnProps();\r\n updateColumnCaches();\r\n if (initialized) {\r\n setPaneVisibility();\r\n setOverflow();\r\n invalidateAllRows();\r\n createColumnHeaders();\r\n // createColumnGroupHeaders();\r\n createColumnFooter();\r\n removeCssRules();\r\n createCssRules();\r\n resizeCanvas(); // does not work when not visible\r\n updateCanvasWidth();\r\n applyColumnWidths();\r\n handleScroll();\r\n }\r\n }\r\n\r\n function getOptions() {\r\n return options;\r\n }\r\n\r\n function setOptions(args, suppressRender) {\r\n if (!getEditorLock().commitCurrentEdit()) {\r\n return;\r\n }\r\n\r\n makeActiveCellNormal();\r\n\r\n if (options.enableAddRow !== args.enableAddRow) {\r\n invalidateRow(getDataLength());\r\n }\r\n\r\n options = $.shallowExtend(options, args);\r\n validateAndEnforceOptions();\r\n\r\n $viewport.css(\"overflow-y\", options.autoHeight ? \"hidden\" : \"auto\");\r\n if (!suppressRender) { render(); }\r\n\r\n setFrozenOptions();\r\n setScroller();\r\n // zombieRowNodeFromLastMouseWheelEvent = null;\r\n\r\n setColumns(columns);\r\n }\r\n\r\n function validateAndEnforceOptions() {\r\n if (options.autoHeight) {\r\n options.leaveSpaceForNewRows = false;\r\n }\r\n }\r\n\r\n function setData(newData, scrollToTop) {\r\n data = newData;\r\n invalidateAllRows();\r\n updateRowCount();\r\n if (scrollToTop) {\r\n scrollTo(0);\r\n }\r\n }\r\n\r\n function getData() {\r\n return data;\r\n }\r\n\r\n function getDataLength(): number {\r\n if (data.getLength) {\r\n return data.getLength();\r\n } else {\r\n return data && data.length || 0;\r\n }\r\n }\r\n\r\n function getDataLengthIncludingAddNew() {\r\n return getDataLength() + (!options.enableAddRow ? 0\r\n : (!pagingActive || pagingIsLastPage ? 1 : 0)\r\n );\r\n }\r\n\r\n function getDataItem(i) {\r\n if (data.getItem) {\r\n return data.getItem(i);\r\n } else {\r\n return data[i];\r\n }\r\n }\r\n\r\n function getTopPanel() {\r\n return $topPanel[0];\r\n }\r\n\r\n function setTopPanelVisibility(visible) {\r\n if (options.showTopPanel != visible) {\r\n options.showTopPanel = visible;\r\n if (visible) {\r\n $topPanelScroller.slideDown(\"fast\", resizeCanvas);\r\n } else {\r\n $topPanelScroller.slideUp(\"fast\", resizeCanvas);\r\n }\r\n }\r\n }\r\n\r\n function setHeaderRowVisibility(visible) {\r\n if (options.showHeaderRow != visible) {\r\n options.showHeaderRow = visible;\r\n if (visible) {\r\n $headerRowScroller.slideDown(\"fast\", resizeCanvas);\r\n } else {\r\n $headerRowScroller.slideUp(\"fast\", resizeCanvas);\r\n }\r\n }\r\n }\r\n\r\n function setFooterRowVisibility(visible) {\r\n if (options.showFooterRow != visible) {\r\n options.showFooterRow = visible;\r\n if (visible) {\r\n $footerRowScroller.slideDown(\"fast\", resizeCanvas);\r\n } else {\r\n $footerRowScroller.slideUp(\"fast\", resizeCanvas);\r\n }\r\n }\r\n }\r\n\r\n function setPreHeaderPanelVisibility(visible) {\r\n if (options.showPreHeaderPanel != visible) {\r\n options.showPreHeaderPanel = visible;\r\n if (visible) {\r\n $preHeaderPanelScroller.slideDown(\"fast\", resizeCanvas);\r\n } else {\r\n $preHeaderPanelScroller.slideUp(\"fast\", resizeCanvas);\r\n }\r\n }\r\n }\r\n\r\n function getContainerNode() {\r\n return $container[0];\r\n }\r\n\r\n //////////////////////////////////////////////////////////////////////////////////////////////\r\n // rendering / Scrolling\r\n\r\n function getRowTop(row) {\r\n let result;\r\n if (options.variableRowHeight) {\r\n result = rowPositionCache[row].top - offset;\r\n } else {\r\n result = options.rowHeight * row - offset;\r\n }\r\n if (hasFrozenRows && row < actualFrozenRow) {\r\n result += offset;\r\n }\r\n return result;\r\n }\r\n\r\n function getRowBottom(row) {\r\n if (options.variableRowHeight) {\r\n return rowPositionCache[row].bottom - offset;\r\n }\r\n return options.rowHeight * (row + 1) - offset;\r\n }\r\n\r\n function getRowFromPosition(y) {\r\n if (!options.variableRowHeight) {\r\n return Math.floor((y + offset) / options.rowHeight);\r\n }\r\n\r\n let rowsInPosCache = getDataLength();\r\n\r\n if (!rowsInPosCache) {\r\n return 0;\r\n }\r\n\r\n // loop through the row position cache and break when\r\n // the row is found\r\n let row = Math.max(0,\r\n binarySearch(rowPositionCache, y + offset, function (pos, cacheEntry) {\r\n if (cacheEntry.top <= pos) {\r\n if (cacheEntry.bottom > pos) {\r\n return 0;\r\n } else {\r\n return 1;\r\n }\r\n } else {\r\n return -1;\r\n }\r\n })\r\n );\r\n\r\n // for ( var i = 0; i < rowsInPosCache; i++ ) {\r\n // if ( rowPositionCache[i].top <= y + offset\r\n // && rowPositionCache[i].bottom >= y + offset\r\n // ) {\r\n // row = i;\r\n // continue;\r\n // }\r\n // }\r\n\r\n // return the last row in the grid\r\n if (y + offset > rowPositionCache[rowsInPosCache - 1].bottom) {\r\n row = rowsInPosCache - 1;\r\n }\r\n\r\n return row;\r\n }\r\n\r\n function binarySearch(ar, el, compare_fn) {\r\n var m = 0;\r\n var n = ar.length - 1;\r\n while (m <= n) {\r\n var k = (n + m) >> 1;\r\n var cmp = compare_fn(el, ar[k]);\r\n if (cmp > 0) {\r\n m = k + 1;\r\n } else if (cmp < 0) {\r\n n = k - 1;\r\n } else {\r\n return k;\r\n }\r\n }\r\n return -m - 1;\r\n }\r\n\r\n function scrollTo(y) {\r\n y = Math.max(y, 0);\r\n y = Math.min(y, th - <number>$viewportScrollContainerY.height() + ((viewportHasHScroll || hasFrozenColumns()) ? scrollbarDimensions.height : 0));\r\n\r\n var oldOffset = offset;\r\n\r\n page = Math.min(n - 1, Math.floor(y / ph));\r\n offset = Math.round(page * cj);\r\n var newScrollTop = y - offset;\r\n\r\n if (offset != oldOffset) {\r\n var range = getVisibleRange(newScrollTop);\r\n cleanupRows(range);\r\n updateRowPositions();\r\n }\r\n\r\n if (prevScrollTop != newScrollTop) {\r\n vScrollDir = (prevScrollTop + oldOffset < newScrollTop + offset) ? 1 : -1;\r\n lastRenderedScrollTop = (scrollTop = prevScrollTop = newScrollTop);\r\n\r\n if (hasFrozenColumns()) {\r\n $viewportTopL[0].scrollTop = newScrollTop;\r\n }\r\n\r\n if (hasFrozenRows) {\r\n $viewportBottomL[0].scrollTop = $viewportBottomR[0].scrollTop = newScrollTop;\r\n }\r\n\r\n $viewportScrollContainerY[0].scrollTop = newScrollTop;\r\n\r\n trigger(self.onViewportChanged, {});\r\n }\r\n }\r\n\r\n function defaultFormatter(row: number, cell: number, value: any, columnDef: ISlickColumn, dataContext: any): string {\r\n if (value == null) {\r\n return \"\";\r\n } else {\r\n return (value + \"\").replace(/&/g, \"&amp;\").replace(/</g, \"&lt;\").replace(/>/g, \"&gt;\");\r\n }\r\n }\r\n\r\n function getFormatter(row, column) {\r\n var rowMetadata = data.getItemMetadata && data.getItemMetadata(row);\r\n\r\n // look up by id, then index\r\n var columnOverrides = rowMetadata &&\r\n rowMetadata.columns &&\r\n (rowMetadata.columns[column.id] || rowMetadata.columns[getColumnIndex(column.id)]);\r\n\r\n return (columnOverrides && columnOverrides.formatter) ||\r\n (rowMetadata && rowMetadata.formatter) ||\r\n column.formatter ||\r\n (options.formatterFactory && options.formatterFactory.getFormatter(column, row)) ||\r\n options.defaultFormatter;\r\n }\r\n\r\n function callFormatter(row, cell, value, m, item, grid) {\r\n\r\n var result;\r\n\r\n // pass metadata to formatter\r\n var metadata = data.getItemMetadata && data.getItemMetadata(row);\r\n metadata = metadata && metadata.columns;\r\n\r\n if (metadata) {\r\n var columnData = metadata[m.id] || metadata[cell];\r\n result = getFormatter(row, m)(row, cell, value, m, item, columnData);\r\n } else {\r\n result = getFormatter(row, m)(row, cell, value, m, item);\r\n }\r\n\r\n return result;\r\n }\r\n\r\n function getEditor(row, cell) {\r\n var column = columns[cell];\r\n var rowMetadata = data.getItemMetadata && data.getItemMetadata(row);\r\n var columnMetadata = rowMetadata && rowMetadata.columns;\r\n\r\n if (columnMetadata && columnMetadata[column.id] && columnMetadata[column.id].editor !== undefined) {\r\n return columnMetadata[column.id].editor;\r\n }\r\n if (columnMetadata && columnMetadata[cell] && columnMetadata[cell].editor !== undefined) {\r\n return columnMetadata[cell].editor;\r\n }\r\n\r\n return column.editor || (options.editorFactory && options.editorFactory.getEditor(column, row));\r\n }\r\n\r\n function getDataItemValueForColumn(item, columnDef) {\r\n if (options.dataItemColumnValueExtractor) {\r\n return options.dataItemColumnValueExtractor(item, columnDef);\r\n }\r\n if (item == null) {\r\n return undefined;\r\n }\r\n if (columnDef.field && columnDef.field.indexOf(\".\") > 0) {\r\n const fields = columnDef.field.split(\".\");\r\n let result = item;\r\n for (let i = 0; i < fields.length; i++) {\r\n result = result[fields[i]];\r\n }\r\n return result;\r\n }\r\n return item[columnDef.field];\r\n }\r\n\r\n function appendRowHtml(html: { L: string, R: string }, row, range, dataLength) {\r\n var d = getDataItem(row);\r\n var dataLoading = row < dataLength && !d;\r\n var rowCss = \"slick-row\" +\r\n (hasFrozenRows && row <= options.frozenRow ? \" frozen\" : \"\") +\r\n (dataLoading ? \" loading\" : \"\") +\r\n (row === activeRow && options.showCellSelection ? \" active\" : \"\") +\r\n (row % 2 === 1 ? \" odd\" : \" even\");\r\n\r\n if (!d && row >= dataLength) {\r\n rowCss += \" \" + options.addNewRowCssClass;\r\n }\r\n\r\n var metadata = data.getItemMetadata && data.getItemMetadata(row);\r\n\r\n if (metadata && metadata.cssClasses) {\r\n rowCss += \" \" + metadata.cssClasses;\r\n }\r\n\r\n rowCss += \" \" + (trigger(self.onAppendRow, { row: row, item: d }) || \"\");\r\n\r\n var frozenRowOffset = getFrozenRowOffset(row);\r\n\r\n var top = getRowTop(row) - frozenRowOffset;\r\n\r\n var rowHtml = \"<div class='ui-widget-content \" + rowCss + \"' style='top:\"\r\n + top + \"px\";\r\n if (getRowHeight(row) !== options.rowHeight) {\r\n rowHtml += \";height:\" + getRowHeight(row) + \"px\";\r\n }\r\n rowHtml += \"'>\";\r\n\r\n html.L += rowHtml;\r\n\r\n if (hasFrozenColumns()) {\r\n html.R += rowHtml;\r\n }\r\n\r\n var colspan, m;\r\n for (var i = 0, ii = columns.length; i < ii; i++) {\r\n m = columns[i];\r\n colspan = 1;\r\n if (metadata && metadata.columns) {\r\n var columnData = metadata.columns[m.id] || metadata.columns[i];\r\n colspan = (columnData && columnData.colspan) || 1;\r\n if (colspan === \"*\") {\r\n colspan = ii - i;\r\n }\r\n }\r\n\r\n // do not render cells outside of the viewport.\r\n if (columnPosRight[Math.min(ii - 1, i + colspan - 1)] > range.leftPx || m.alwaysRenderColumn) {\r\n if (!m.alwaysRenderColumn && columnPosLeft[i] > range.rightPx) {\r\n // all columns to the right are outside the range.\r\n break;\r\n }\r\n\r\n if (hasFrozenColumns() && (i > options.frozenColumn)) {\r\n html.R += appendCellHtml(row, i, colspan, d);\r\n } else {\r\n html.L += appendCellHtml(row, i, colspan, d);\r\n }\r\n }\r\n // else if (m.alwaysRenderColumn || (hasFrozenColumns() && i <= options.frozenColumn)) {\r\n // html.L += appendCellHtml(row, i, colspan, d);\r\n // }\r\n\r\n if (colspan > 1) {\r\n i += (colspan - 1);\r\n }\r\n }\r\n\r\n html.L += \"</div>\";\r\n\r\n if (hasFrozenColumns()) {\r\n html.R += \"</div>\";\r\n }\r\n }\r\n\r\n function appendCellHtml(row: number, cell: number, colspan: number, item: any): string {\r\n // result: string containing the HTML parts\r\n // row, cell: row and column index\r\n // colspan: HTML colspan\r\n // item: grid data for row\r\n var stringResult = \"\";\r\n\r\n var m: ISlickColumn = columns[cell];\r\n var cellCss = \"slick-cell l\" + cell + \" r\" + Math.min(columns.length - 1, cell + colspan - 1) +\r\n (m.cssClass ? \" \" + m.cssClass : \"\");\r\n\r\n if (hasFrozenColumns() && cell <= options.frozenColumn) {\r\n cellCss += (\" frozen\");\r\n }\r\n\r\n if (row === activeRow && cell === activeCell && options.showCellSelection) {\r\n cellCss += (\" active\");\r\n }\r\n\r\n for (var key in cellCssClasses) {\r\n if (cellCssClasses[key][row] && cellCssClasses[key][row][m.id]) {\r\n cellCss += (\" \" + cellCssClasses[key][row][m.id]);\r\n }\r\n }\r\n\r\n var value = null, formatterResult: ISlickFormatterResult | string = \"\";\r\n if (item) {\r\n value = getDataItemValueForColumn(item, m);\r\n formatterResult = getFormatter(row, m)(row, cell, value, m, item, self);\r\n if (formatterResult === null || formatterResult === undefined) { formatterResult = \"\"; }\r\n }\r\n\r\n // get addl css class names from object type formatter return\r\n var addlCssClasses = (formatterResult && (<ISlickFormatterResult>formatterResult).addClasses ? (addlCssClasses ? \" \" : \"\") + (<ISlickFormatterResult>formatterResult).addClasses : \"\");\r\n var toolTip = formatterResult && (<ISlickFormatterResult>formatterResult).toolTip ? \"title='\" + (<ISlickFormatterResult>formatterResult).toolTip + \"'\" : \"\";\r\n\r\n stringResult += \"<div class='\" +\r\n cellCss + (addlCssClasses ? \" \" + addlCssClasses : \"\") + \"' \" +\r\n toolTip +\r\n ((getRowHeight(row) !== options.rowHeight)\r\n ? \"style='height:\" + (getRowHeight(row) - cellHeightDiff) + \"px'>\"\r\n : \">\");\r\n\r\n // if there is a corresponding row (if not, this is the Add New row or this data hasn't been loaded yet)\r\n if (item) {\r\n stringResult += (Object.prototype.toString.call(formatterResult) !== \"[object Object]\" ? (<string>formatterResult) : (<ISlickFormatterResult>formatterResult).text);\r\n }\r\n\r\n stringResult += \"</div>\";\r\n\r\n rowsCache[row].cellRenderQueue.push(cell);\r\n rowsCache[row].cellColSpans[cell] = colspan;\r\n return stringResult;\r\n }\r\n\r\n\r\n function cleanupRows(rangeToKeep: { top: number, bottom: number }) {\r\n for (var i in rowsCache) {\r\n let idx = parseInt(i, 10);\r\n var removeFrozenRow = true;\r\n\r\n if (hasFrozenRows\r\n && ((options.frozenBottom && idx >= actualFrozenRow) // frozen bottom rows\r\n || (!options.frozenBottom && idx <= actualFrozenRow) // frozen top rows\r\n )\r\n ) {\r\n removeFrozenRow = false;\r\n }\r\n\r\n if ((idx !== activeRow)\r\n && (idx < rangeToKeep.top || idx > rangeToKeep.bottom)\r\n && (removeFrozenRow)\r\n ) {\r\n removeRowFromCache(i);\r\n }\r\n }\r\n if (options.enableAsyncPostRenderCleanup) { startPostProcessingCleanup(); }\r\n }\r\n\r\n function invalidate() {\r\n let currentActiveCell = null;\r\n if (currentEditor) {\r\n currentActiveCell = getActiveCell();\r\n }\r\n updateRowCount();\r\n invalidateAllRows();\r\n render();\r\n if (currentActiveCell) {\r\n makeActiveCellEditable(null, null, {});\r\n }\r\n }\r\n\r\n function invalidateAllRows() {\r\n if (currentEditor) {\r\n makeActiveCellNormal();\r\n }\r\n for (var row in rowsCache) {\r\n removeRowFromCache(row);\r\n }\r\n if (options.enableAsyncPostRenderCleanup) { startPostProcessingCleanup(); }\r\n }\r\n\r\n function queuePostProcessedRowForCleanup(cacheEntry, postProcessedRow, rowIdx) {\r\n postProcessgroupId++;\r\n\r\n // store and detach node for later async cleanup\r\n for (var column in postProcessedRow) {\r\n if (postProcessedRow.hasOwnProperty(column)) {\r\n let columnIdx = parseInt(column, 10) | 0;\r\n postProcessedCleanupQueue.push({\r\n actionType: \"C\",\r\n groupId: postProcessgroupId,\r\n node: cacheEntry.cellNodesByColumnIdx[columnIdx],\r\n columnIdx: columnIdx,\r\n rowIdx: rowIdx\r\n });\r\n }\r\n }\r\n postProcessedCleanupQueue.push({\r\n actionType: \"R\",\r\n groupId: postProcessgroupId,\r\n node: cacheEntry.rowNode\r\n });\r\n cacheEntry.rowNode.forEach(x => x.parent.removeChild(x)); // $(cacheEntry.rowNode).detach();\r\n }\r\n\r\n function initializeRowPositions() {\r\n rowPositionCache = [{\r\n top: 0\r\n , height: options.rowHeight\r\n , bottom: options.rowHeight\r\n }];\r\n }\r\n\r\n function cacheRowPositions() {\r\n if (!options.variableRowHeight) {\r\n return;\r\n }\r\n\r\n initializeRowPositions();\r\n\r\n for (var i = 0, l = getDataLength(); i <= l; i++) {\r\n var metadata = data.getItemMetadata && data.getItemMetadata(i);\r\n\r\n rowPositionCache[i] = {\r\n top: (rowPositionCache[i - 1])\r\n ? (rowPositionCache[i - 1].bottom/* - offset */)\r\n : 0\r\n , height: (metadata && metadata.height !== undefined)\r\n ? metadata.height\r\n : options.rowHeight\r\n };\r\n\r\n rowPositionCache[i].bottom = rowPositionCache[i].top + rowPositionCache[i].height;\r\n }\r\n }\r\n\r\n function removeRowFromCache(row) {\r\n var cacheEntry = rowsCache[row];\r\n if (!cacheEntry) {\r\n return;\r\n }\r\n\r\n trigger(self.onBeforeRemoveRow, { row: row, dom: cacheEntry.rowNode });\r\n\r\n cacheEntry.rowNode.forEach(x => {\r\n x.parentElement.removeChild(x);\r\n });\r\n\r\n delete rowsCache[row];\r\n delete postProcessedRows[row];\r\n }\r\n\r\n function invalidateRows(rows) {\r\n var i, rl;\r\n if (!rows || !rows.length) {\r\n return;\r\n }\r\n vScrollDir = 0;\r\n rl = rows.length;\r\n for (i = 0; i < rl; i++) {\r\n if (currentEditor && activeRow === rows[i]) {\r\n makeActiveCellNormal();\r\n }\r\n if (rowsCache[rows[i]]) {\r\n removeRowFromCache(rows[i]);\r\n }\r\n }\r\n if (options.enableAsyncPostRenderCleanup) { startPostProcessingCleanup(); }\r\n }\r\n\r\n function invalidateRow(row) {\r\n if (!row && row !== 0) { return; }\r\n invalidateRows([row]);\r\n }\r\n\r\n function applyFormatResultToCellNode(formatterResult, cellNode, suppressRemove?: boolean) {\r\n if (formatterResult === null || formatterResult === undefined) { formatterResult = \"\"; }\r\n if (Object.prototype.toString.call(formatterResult) !== \"[object Object]\") {\r\n cellNode.innerHTML = formatterResult;\r\n } else {\r\n cellNode.innerHTML = formatterResult.text;\r\n if (formatterResult.removeClasses && !suppressRemove) {\r\n $(cellNode).removeClass(formatterResult.removeClasses);\r\n }\r\n if (formatterResult.addClasses) {\r\n $(cellNode).addClass(formatterResult.addClasses);\r\n }\r\n if (formatterResult.toolTip) {\r\n $(cellNode).attr(\"title\", formatterResult.toolTip);\r\n }\r\n }\r\n }\r\n\r\n function updateCell(row, cell) {\r\n var cellNode = getCellNode(row, cell);\r\n if (!cellNode) {\r\n return;\r\n }\r\n\r\n var m = columns[cell], d = getDataItem(row);\r\n if (currentEditor && activeRow === row && activeCell === cell) {\r\n currentEditor.loadValue(d);\r\n } else {\r\n var formatterResult = d ? getFormatter(row, m)(row, cell, getDataItemValueForColumn(d, m), m, d, self) : \"\";\r\n applyFormatResultToCellNode(formatterResult, cellNode);\r\n if (self.onAppendCell.countHandlers() > 0) {\r\n let item = getDataItem(activeRow);\r\n let value = getDataItemValueForColumn(item, columns[activeCell]);\r\n trigger(self.onAppendCell,\r\n {\r\n row: row, cell: cell,\r\n value: value, item: item,\r\n column: m, dom: cellNode\r\n });\r\n }\r\n invalidatePostProcessingResults(row);\r\n }\r\n }\r\n\r\n function updateRow(row) {\r\n var cacheEntry = rowsCache[row];\r\n if (!cacheEntry) {\r\n return;\r\n }\r\n\r\n ensureCellNodesInRowsCache(row);\r\n\r\n var formatterResult, d = getDataItem(row);\r\n\r\n // if (d) {\r\n // for (let cacheRow of cacheEntry.rowNode) {\r\n // cacheRow.classList.remove(\"loading\");\r\n // }\r\n // }\r\n\r\n for (var column in cacheEntry.cellNodesByColumnIdx) {\r\n if (!cacheEntry.cellNodesByColumnIdx.hasOwnProperty(column)) {\r\n continue;\r\n }\r\n\r\n let columnIdx = parseInt(column, 10) | 0;\r\n var m = columns[columnIdx],\r\n node = cacheEntry.cellNodesByColumnIdx[columnIdx];\r\n\r\n if (row === activeRow && columnIdx === activeCell && currentEditor) {\r\n currentEditor.loadValue(d);\r\n } else if (d) {\r\n formatterResult = getFormatter(row, m)(row, columnIdx, getDataItemValueForColumn(d, m), m, d, self);\r\n applyFormatResultToCellNode(formatterResult, node);\r\n if (self.onAppendCell.countHandlers() > 0) {\r\n let item = getDataItem(row);\r\n let value = getDataItemValueForColumn(item, columns[columnIdx]);\r\n trigger(self.onAppendCell,\r\n {\r\n row: row, cell: columnIdx,\r\n value: value, item: item,\r\n column: columns[columnIdx], dom: node\r\n });\r\n }\r\n } else {\r\n node.innerHTML = \"\";\r\n }\r\n }\r\n\r\n invalidatePostProcessingResults(row);\r\n }\r\n\r\n function getViewportHeight() {\r\n if (options.autoHeight) {\r\n let fullHeight: number = <number>$paneHeaderL.height();\r\n fullHeight += (options.showHeaderRow) ? options.headerRowHeight + getVBoxDelta($headerRowScroller) : 0;\r\n fullHeight += (options.showFooterRow) ? options.footerRowHeight + getVBoxDelta($footerRowScroller) : 0;\r\n fullHeight += (getCanvasWidth() > viewportW) ? scrollbarDimensions.height : 0;\r\n\r\n if (options.variableRowHeight) {\r\n viewportH = rowPositionCache[getDataLengthIncludingAddNew()].bottom; // tODO Test this (also with frozen columns)\r\n } else {\r\n viewportH = options.rowHeight\r\n * getDataLengthIncludingAddNew()\r\n + ((options.frozenColumn == -1) ? <number>fullHeight : 0);\r\n }\r\n\r\n } else {\r\n topPanelH = (options.showTopPanel) ? options.topPanelHeight + getVBoxDelta($topPanelScroller) : 0;\r\n headerRowH = (options.showHeaderRow) ? options.headerRowHeight + getVBoxDelta($headerRowScroller) : 0;\r\n footerRowH = (options.showFooterRow) ? options.footerRowHeight + getVBoxDelta($footerRowScroller) : 0;\r\n let preHeaderH = (options.createPreHeaderPanel && options.showPreHeaderPanel) ? options.preHeaderPanelHeight + getVBoxDelta($preHeaderPanelScroller) : 0;\r\n\r\n viewportH = $container[0].clientHeight\r\n - $headerScroller[0].clientHeight\r\n - getVBoxDelta($headerScroller)\r\n - topPanelH\r\n - headerRowH\r\n - footerRowH\r\n - preHeaderH;\r\n }\r\n\r\n numVisibleRows = Math.ceil(viewportH / options.rowHeight); // tODO -> variable Row height\r\n return viewportH;\r\n }\r\n\r\n function getViewportWidth() {\r\n viewportW = $container.width() as number - 2; // 2 for border\r\n }\r\n\r\n function resizeCanvas() {\r\n if (!initialized) { return; }\r\n paneTopH = 0;\r\n paneBottomH = 0;\r\n viewportTopH = 0;\r\n viewportBottomH = 0;\r\n\r\n getViewportWidth();\r\n getViewportHeight();\r\n\r\n // account for Frozen Rows\r\n if (hasFrozenRows) {\r\n if (options.frozenBottom) {\r\n paneTopH = viewportH - frozenRowsHeight - scrollbarDimensions.height;\r\n paneBottomH = frozenRowsHeight + scrollbarDimensions.height;\r\n } else {\r\n paneTopH = frozenRowsHeight;\r\n paneBottomH = viewportH - frozenRowsHeight;\r\n }\r\n } else {\r\n paneTopH = viewportH;\r\n }\r\n\r\n // the top pane includes the top panel and the header row\r\n paneTopH += topPanelH + headerRowH + footerRowH;\r\n\r\n if (hasFrozenColumns() && options.autoHeight) {\r\n paneTopH += scrollbarDimensions.height;\r\n }\r\n\r\n // the top viewport does not contain the top panel or header row\r\n viewportTopH = paneTopH - topPanelH - headerRowH - footerRowH;\r\n\r\n if (options.autoHeight) {\r\n if (hasFrozenColumns()) {\r\n $container.height(\r\n paneTopH + $headerScrollerL[0].offsetHeight\r\n );\r\n }\r\n\r\n $paneTopL.css(\"position\", \"relative\");\r\n }\r\n\r\n $paneTopL.css(\"top\", $paneHeaderL.height()).css(\"height\", paneTopH);\r\n var paneBottomTop = $paneTopL[0].offsetTop + paneTopH;\r\n\r\n if (!options.autoHeight) {\r\n $viewportTopL.height(viewportTopH);\r\n }\r\n\r\n if (hasFrozenColumns()) {\r\n $paneTopR.css(\"top\", $paneHeaderL.height()).css(\"height\", paneTopH);\r\n\r\n $viewportTopR.height(viewportTopH);\r\n\r\n if (hasFrozenRows) {\r\n $paneBottomL.css(\"top\", paneBottomTop).css(\"height\", paneBottomH);\r\n\r\n $paneBottomR.css(\"top\", paneBottomTop).css(\"height\", paneBottomH);\r\n\r\n $viewportBottomR.height(paneBottomH);\r\n }\r\n } else {\r\n if (hasFrozenRows) {\r\n $paneBottomL.css(\"width\", \"100%\").css(\"height\", paneBottomH);\r\n\r\n $paneBottomL.css(\"top\", paneBottomTop);\r\n }\r\n }\r\n\r\n if (hasFrozenRows) {\r\n $viewportBottomL.height(paneBottomH);\r\n\r\n if (options.frozenBottom) {\r\n $canvasBottomL.height(frozenRowsHeight);\r\n\r\n if (hasFrozenColumns()) {\r\n $canvasBottomR.height(frozenRowsHeight);\r\n }\r\n } else {\r\n $canvasTopL.height(frozenRowsHeight);\r\n\r\n if (hasFrozenColumns()) {\r\n $canvasTopR.height(frozenRowsHeight);\r\n }\r\n }\r\n } else {\r\n $viewportTopR.height(viewportTopH);\r\n }\r\n\r\n if (!scrollbarDimensions || !scrollbarDimensions.width) {\r\n scrollbarDimensions = measureScrollbar();\r\n }\r\n\r\n if (options.forceFitColumns) {\r\n autosizeColumns();\r\n }\r\n\r\n updateRowCount();\r\n handleScroll();\r\n\r\n\r\n // since the width has changed, force the render() to reevaluate virtually rendered cells.\r\n lastRenderedScrollLeft = -1;\r\n render();\r\n }\r\n\r\n function updatePagingStatusFromView(pagingInfo) {\r\n pagingActive = (pagingInfo.pageSize !== 0);\r\n pagingIsLastPage = (pagingInfo.pageNum == pagingInfo.totalPages - 1);\r\n }\r\n\r\n function updateRowCount() {\r\n if (!initialized) { return; }\r\n cacheRowPositions();\r\n\r\n var dataLength = getDataLength();\r\n var dataLengthIncludingAddNew = getDataLengthIncludingAddNew();\r\n var numberOfRows = 0;\r\n var oldH = (hasFrozenRows && !options.frozenBottom) ? parseInt($canvasBottomL[0].style.height) : parseInt($canvasTopL[0].style.height);\r\n if (hasFrozenRows) {\r\n numberOfRows = getDataLength() - options.frozenRow;\r\n } else {\r\n numberOfRows = dataLengthIncludingAddNew + (options.leaveSpaceForNewRows ? numVisibleRows - 1 : 0);\r\n }\r\n\r\n var tempViewportH = <number>$viewportScrollContainerY.height();\r\n var oldViewportHasVScroll = viewportHasVScroll;\r\n // with autoHeight, we do not need to accommodate the vertical scroll bar\r\n viewportHasVScroll = options.alwaysShowVerticalScroll || !options.autoHeight &&\r\n (options.variableRowHeight ?\r\n (rowPositionCache[numberOfRows - 1] && (rowPositionCache[numberOfRows - 1].bottom > viewportH)) :\r\n (numberOfRows * options.rowHeight > tempViewportH));\r\n makeActiveCellNormal();\r\n\r\n // remove the rows that are now outside of the data range\r\n // this helps avoid redundant calls to .removeRow() when the size of the data decreased by thousands of rows\r\n var r1 = dataLength - 1;\r\n for (var i in rowsCache) {\r\n if (parseInt(i, 10) > r1) {\r\n removeRowFromCache(i);\r\n }\r\n }\r\n if (options.enableAsyncPostRenderCleanup) { startPostProcessingCleanup(); }\r\n\r\n if (activeCellNode && activeRow > r1) {\r\n resetActiveCell();\r\n }\r\n\r\n oldH = h;\r\n\r\n var rowH = options.variableRowHeight ? (options.enableAddRow\r\n ? rowPositionCache[getDataLength()].bottom\r\n : rowPositionCache[getDataLength()].top) : options.rowHeight * numberOfRows;\r\n\r\n if (options.autoHeight) {\r\n h = rowH;\r\n } else {\r\n th = Math.max(rowH, tempViewportH - scrollbarDimensions.height);\r\n if (th < maxSupportedCssHeight) {\r\n // just one page\r\n h = ph = th;\r\n n = 1;\r\n cj = 0;\r\n } else {\r\n // break into pages\r\n h = maxSupportedCssHeight;\r\n ph = h / 100;\r\n n = Math.floor(th / ph);\r\n cj = (th - h) / (n - 1);\r\n }\r\n }\r\n\r\n if (h !== oldH) {\r\n if (hasFrozenRows && !options.frozenBottom) {\r\n $canvasBottomL.css(\"height\", h);\r\n\r\n if (hasFrozenColumns()) {\r\n $canvasBottomR.css(\"height\", h);\r\n }\r\n } else {\r\n $canvasTopL.css(\"height\", h);\r\n $canvasTopR.css(\"height\", h);\r\n }\r\n\r\n scrollTop = $viewportScrollContainerY[0].scrollTop;\r\n }\r\n\r\n var oldScrollTopInRange = (scrollTop + offset <= th - tempViewportH);\r\n\r\n if (th == 0 || scrollTop == 0) {\r\n page = offset = 0;\r\n } else if (oldScrollTopInRange) {\r\n // maintain virtual position\r\n scrollTo(scrollTop + offset);\r\n } else {\r\n // scroll to bottom\r\n scrollTo(th - tempViewportH);\r\n }\r\n\r\n if (h != oldH && options.autoHeight) {\r\n resizeCanvas();\r\n }\r\n\r\n if (options.forceFitColumns && oldViewportHasVScroll != viewportHasVScroll) {\r\n autosizeColumns();\r\n }\r\n updateCanvasWidth(false);\r\n }\r\n\r\n function getVisibleRange(viewportTop?: number, viewportLeft?: number) {\r\n if (viewportTop == null) {\r\n viewportTop = scrollTop;\r\n }\r\n if (viewportLeft == null) {\r\n viewportLeft = scrollLeft;\r\n }\r\n\r\n return {\r\n top: getRowFromPosition(viewportTop),\r\n bottom: getRowFromPosition(viewportTop + viewportH) + 1,\r\n leftPx: viewportLeft,\r\n rightPx: viewportLeft + viewportW\r\n };\r\n }\r\n\r\n function getRenderedRangeFromVisibleRange(range) {\r\n var buffer = Math.round(viewportH / options.rowHeight); // TODO -> probably not correct for variableRowHeight\r\n var minBuffer = options.minRowBuffer;\r\n\r\n if (vScrollDir === -1) {\r\n range.top -= buffer;\r\n range.bottom += minBuffer;\r\n } else if (vScrollDir === 1) {\r\n range.top -= minBuffer;\r\n range.bottom += buffer;\r\n } else {\r\n range.top -= minBuffer;\r\n range.bottom += minBuffer;\r\n }\r\n\r\n range.top = Math.max(0, range.top);\r\n range.bottom = Math.min(getDataLengthIncludingAddNew() - 1, range.bottom);\r\n\r\n range.leftPx -= viewportW;\r\n range.rightPx += viewportW;\r\n\r\n range.leftPx = Math.max(0, range.leftPx);\r\n range.rightPx = Math.min(canvasWidth, range.rightPx);\r\n\r\n return range;\r\n }\r\n\r\n function getRenderedRange(viewportTop?: number, viewportLeft?: number) {\r\n var range = getVisibleRange(viewportTop, viewportLeft);\r\n return getRenderedRangeFromVisibleRange(range);\r\n }\r\n\r\n function ensureCellNodesInRowsCache(row) {\r\n var cacheEntry = rowsCache[row];\r\n if (cacheEntry) {\r\n if (cacheEntry.cellRenderQueue.length) {\r\n var lastNode = <HTMLElement>cacheEntry.rowNode[cacheEntry.rowNode.length - 1].lastElementChild;// cacheEntry.rowNode.children().last();\r\n while (lastNode && cacheEntry.cellRenderQueue.length) {\r\n var columnIdx = cacheEntry.cellRenderQueue.pop();\r\n cacheEntry.cellNodesByColumnIdx[columnIdx] = lastNode;\r\n lastNode = <HTMLElement>lastNode.previousElementSibling;\r\n // hack to retrieve the frozen columns because\r\n if (!lastNode) {\r\n lastNode = <HTMLElement>cacheEntry.rowNode[0].lastElementChild;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n function cleanUpCells(range, row) {\r\n // ignore frozen rows\r\n if (hasFrozenRows\r\n && ((options.frozenBottom && row > actualFrozenRow) // frozen bottom rows\r\n || (row <= actualFrozenRow) // frozen top rows\r\n )\r\n ) {\r\n return;\r\n }\r\n\r\n var totalCellsRemoved = 0;\r\n var cacheEntry = rowsCache[row];\r\n\r\n // remove cells outside the range.\r\n var cellsToRemove = [];\r\n for (var idx in cacheEntry.cellNodesByColumnIdx) {\r\n // i really hate it when people mess with Array.prototype.\r\n if (!cacheEntry.cellNodesByColumnIdx.hasOwnProperty(idx)) {\r\n continue;\r\n }\r\n\r\n // this is a string, so it needs to be cast back to a number.\r\n let i = parseInt(idx, 10) | 0;\r\n\r\n // ignore frozen columns\r\n if (i <= options.frozenColumn) {\r\n continue;\r\n }\r\n\r\n // ignore alwaysRenderedColumns\r\n if (Array.isArray(columns) && columns[i] && columns[i].alwaysRenderColumn) {\r\n continue;\r\n }\r\n\r\n var colspan = cacheEntry.cellColSpans[i];\r\n if (columnPosLeft[i] > range.rightPx ||\r\n columnPosRight[Math.min(columns.length - 1, i + colspan - 1)] < range.leftPx) {\r\n if (!(row == activeRow && i == activeCell)) {\r\n cellsToRemove.push(i);\r\n }\r\n }\r\n }\r\n\r\n var cellToRemove;\r\n while ((cellToRemove = cellsToRemove.pop()) != null) {\r\n cacheEntry.cellNodesByColumnIdx[cellToRemove].parentElement.removeChild(cacheEntry.cellNodesByColumnIdx[cellToRemove]);\r\n\r\n delete cacheEntry.cellColSpans[cellToRemove];\r\n delete cacheEntry.cellNodesByColumnIdx[cellToRemove];\r\n if (postProcessedRows[row]) {\r\n delete postProcessedRows[row][cellToRemove];\r\n }\r\n totalCellsRemoved++;\r\n }\r\n }\r\n\r\n function cleanUpAndRenderCells(range) {\r\n\r\n var cacheEntry: ICacheEntry;\r\n var stringArray = \"\";\r\n var processedRows = [];\r\n var cellsAdded;\r\n var totalCellsAdded = 0;\r\n var colspan;\r\n\r\n for (var row = range.top, btm = range.bottom; row <= btm; row++) {\r\n cacheEntry = rowsCache[row];\r\n if (!cacheEntry) {\r\n continue;\r\n }\r\n\r\n // cellRenderQueue populated in renderRows() needs to be cleared first\r\n ensureCellNodesInRowsCache(row);\r\n\r\n cleanUpCells(range, row);\r\n\r\n // render missing cells.\r\n cellsAdded = 0;\r\n\r\n var metadata = data.getItemMetadata && data.getItemMetadata(row);\r\n metadata = metadata && metadata.columns;\r\n\r\n var d = getDataItem(row);\r\n\r\n for (var i = 0, ii = columns.length; i < ii; i++) {\r\n // cells to the right are outside the range.\r\n if (columnPosLeft[i] > range.rightPx) {\r\n break;\r\n }\r\n\r\n // already rendered.\r\n if ((colspan = cacheEntry.cellColSpans[i]) != null) {\r\n i += (colspan > 1 ? colspan - 1 : 0);\r\n continue;\r\n }\r\n\r\n colspan = 1;\r\n if (metadata) {\r\n var columnData = metadata[columns[i].id] || metadata[i];\r\n colspan = (columnData && columnData.colspan) || 1;\r\n if (colspan === \"*\") {\r\n colspan = ii - i;\r\n }\r\n }\r\n\r\n if (columnPosRight[Math.min(ii - 1, i + colspan - 1)] > range.leftPx) {\r\n stringArray += appendCellHtml(row, i, colspan, d);\r\n cellsAdded++;\r\n }\r\n\r\n i += (colspan > 1 ? colspan - 1 : 0);\r\n }\r\n\r\n if (cellsAdded) {\r\n totalCellsAdded += cellsAdded;\r\n processedRows.push(row);\r\n }\r\n }\r\n\r\n if (!stringArray.length) {\r\n return;\r\n }\r\n\r\n var x = document.createElement(\"div\");\r\n x.innerHTML = stringArray;\r\n // tODO TODOFIX -> call var addlCssClasses = trigger(self.onAppendCell, { row: row, cell: cell, value: value, dataContext: item, column: m }) || '';\r\n\r\n var processedRow;\r\n while ((processedRow = processedRows.pop()) != null) {\r\n cacheEntry = rowsCache[processedRow];\r\n var columnIdx;\r\n while ((columnIdx = cacheEntry.cellRenderQueue.pop()) != null) {\r\n var node = <HTMLElement>x.lastElementChild;\r\n\r\n if (hasFrozenColumns() && (columnIdx > options.frozenColumn)) {\r\n cacheEntry.rowNode[1].appendChild(node);\r\n } else {\r\n cacheEntry.rowNode[0].appendChild(node);\r\n }\r\n\r\n if (self.onAppendCell.countHandlers() > 0) {\r\n let item = getDataItem(processedRow);\r\n let value = getDataItemValueForColumn(item, columns[columnIdx]);\r\n trigger(self.onAppendCell,\r\n {\r\n row: processedRow, cell: columnIdx,\r\n value: value, item: item,\r\n column: columns[columnIdx], dom: node\r\n });\r\n }\r\n\r\n cacheEntry.cellNodesByColumnIdx[columnIdx] = node;\r\n }\r\n }\r\n }\r\n\r\n function renderRows(range) {\r\n var html = { L: \"\", R: \"\" },\r\n rows = [],\r\n needToReselectCell = false,\r\n dataLength = getDataLength();\r\n\r\n for (let i = range.top, ii = range.bottom; i <= ii; i++) {\r\n if (rowsCache[i] || (hasFrozenRows && options.frozenBottom && i == getDataLength())) {\r\n continue;\r\n }\r\n renderedRows++;\r\n rows.push(i);\r\n\r\n // create an entry right away so that appendRowHtml() can\r\n // start populatating it.\r\n rowsCache[i] = {\r\n rowNode: null,\r\n\r\n // colSpans of rendered cells (by column idx).\r\n // can also be used for checking whether a cell has been rendered.\r\n cellColSpans: [],\r\n\r\n // cell nodes (by column idx). Lazy-populated by ensureCellNodesInRowsCache().\r\n cellNodesByColumnIdx: [],\r\n\r\n // column indices of cell nodes that have been rendered, but not yet indexed in\r\n // cellNodesByColumnIdx. These are in the same order as cell nodes added at the\r\n // end of the row.\r\n cellRenderQueue: []\r\n };\r\n\r\n appendRowHtml(html, i, range, dataLength);\r\n if (activeCellNode && activeRow === i) {\r\n needToReselectCell = true;\r\n }\r\n }\r\n\r\n if (!rows.length) { return; }\r\n\r\n\r\n let x;\r\n if (html.L.length > 0) {\r\n x = document.createElement(\"div\");\r\n x.innerHTML = html.L;\r\n }\r\n let xRight;\r\n if (html.R.length > 0) {\r\n xRight = document.createElement(\"div\");\r\n xRight.innerHTML = html.R;\r\n }\r\n\r\n\r\n for (let i = 0, ii = rows.length; i < ii; i++) {\r\n let xChild: HTMLDivElement;\r\n let xChildRight: HTMLDivElement;\r\n rowsCache[rows[i]].rowNode = [];\r\n if (x && x.children.length > 0) {\r\n xChild = x.children[0];\r\n rowsCache[rows[i]].rowNode.push(xChild);\r\n }\r\n if (xRight && xRight.children.length > 0) {\r\n xChildRight = xRight.children[0];\r\n rowsCache[rows[i]].rowNode.push(xChildRight);\r\n }\r\n\r\n if ((hasFrozenRows) && (rows[i] >= actualFrozenRow)) {\r\n $canvasBottomL[0].appendChild(xChild);\r\n if (hasFrozenColumns()) {\r\n $canvasBottomR[0].appendChild(xChildRight);\r\n }\r\n } else if (hasFrozenColumns()) {\r\n $canvasTopL[0].appendChild(xChild);\r\n $canvasTopR[0].appendChild(xChildRight);\r\n } else {\r\n $canvasTopL[0].appendChild(xChild);\r\n }\r\n\r\n if (self.onAppendCell.countHandlers() > 0) {\r\n const nodes: HTMLDivElement[] = [];\r\n for (let idx = 0; idx < xChild.childNodes.length; idx++) {\r\n nodes.push(xChild.childNodes[idx] as HTMLDivElement);\r\n }\r\n if (xChildRight) {\r\n for (let idx = 0; idx < xChildRight.childNodes.length; idx++) {\r\n nodes.push(xChildRight.childNodes[idx] as HTMLDivElement);\r\n }\r\n }\r\n for (let cIdx = 0; cIdx < nodes.length; cIdx++) {\r\n let item = getDataItem(rows[i]);\r\n let value = getDataItemValueForColumn(item, columns[cIdx]);\r\n trigger(self.onAppendCell,\r\n {\r\n row: rows[i], cell: cIdx,\r\n value: value, item: item,\r\n column: columns[cIdx], dom: nodes[cIdx]\r\n });\r\n }\r\n }\r\n\r\n }\r\n\r\n if (needToReselectCell) {\r\n activeCellNode = getCellNode(activeRow, activeCell);\r\n }\r\n }\r\n\r\n\r\n function startPostProcessing() {\r\n if (!options.enableAsyncPostRender) {\r\n return;\r\n }\r\n clearTimeout(h_postrender);\r\n h_postrender = setTimeout(asyncPostProcessRows, options.asyncPostRenderDelay);\r\n }\r\n\r\n function startPostProcessingCleanup() {\r\n if (!options.enableAsyncPostRenderCleanup) {\r\n return;\r\n }\r\n clearTimeout(h_postrenderCleanup);\r\n h_postrenderCleanup = setTimeout(asyncPostProcessCleanupRows, options.asyncPostRenderCleanupDelay);\r\n }\r\n\r\n function invalidatePostProcessingResults(row) {\r\n // change status of columns to be re-rendered\r\n for (var columnIdx in postProcessedRows[row]) {\r\n if (postProcessedRows[row].hasOwnProperty(columnIdx)) {\r\n postProcessedRows[row][columnIdx] = \"C\";\r\n }\r\n }\r\n postProcessFromRow = Math.min(postProcessFromRow, row);\r\n postProcessToRow = Math.max(postProcessToRow, row);\r\n startPostProcessing();\r\n }\r\n\r\n function updateRowPositions() {\r\n for (var row in rowsCache) {\r\n rowsCache[row].rowNode.forEach(x => x.style.top = getRowTop(row) + \"px\");\r\n }\r\n }\r\n\r\n function render() {\r\n if (!initialized) { return; }\r\n\r\n scrollThrottle.dequeue();\r\n\r\n var visible = getVisibleRange();\r\n var rendered = getRenderedRangeFromVisibleRange(visible);// getRenderedRange();\r\n\r\n // remove rows no longer in the viewport\r\n cleanupRows(rendered);\r\n\r\n // add new rows & missing cells in existing rows\r\n if (lastRenderedScrollLeft != scrollLeft) {\r\n\r\n if (hasFrozenRows) {\r\n\r\n var renderedFrozenRows = $.deepExtend({}, rendered);\r\n\r\n if (options.frozenBottom) {\r\n\r\n renderedFrozenRows.top = actualFrozenRow;\r\n renderedFrozenRows.bottom = getDataLength();\r\n } else {\r\n\r\n renderedFrozenRows.top = 0;\r\n renderedFrozenRows.bottom = options.frozenRow;\r\n }\r\n\r\n cleanUpAndRenderCells(renderedFrozenRows);\r\n }\r\n\r\n cleanUpAndRenderCells(rendered);\r\n }\r\n\r\n // render missing rows\r\n renderRows(rendered);\r\n\r\n // render frozen rows\r\n if (hasFrozenRows) {\r\n if (options.frozenBottom) {\r\n renderRows({\r\n top: actualFrozenRow, bottom: getDataLength() - 1, leftPx: rendered.leftPx, rightPx: rendered.rightPx\r\n });\r\n } else {\r\n renderRows({\r\n top: 0, bottom: options.frozenRow - 1, leftPx: rendered.leftPx, rightPx: rendered.rightPx\r\n });\r\n }\r\n }\r\n\r\n postProcessFromRow = visible.top;\r\n postProcessToRow = Math.min(getDataLengthIncludingAddNew() - 1, visible.bottom);\r\n startPostProcessing();\r\n\r\n lastRenderedScrollTop = scrollTop;\r\n lastRenderedScrollLeft = scrollLeft;\r\n h_render = null;\r\n trigger(self.onRendered, { startRow: visible.top, endRow: visible.bottom, grid: self });\r\n }\r\n\r\n function preventScroll(e) {\r\n e.preventDefault();\r\n }\r\n\r\n // function handleHeaderScroll() {\r\n // handleElementScroll($headerScrollContainer[0]);\r\n // }\r\n\r\n //function handleHeaderRowScroll() {\r\n // if (programmaticScrollingTimeout) {\r\n // return;\r\n // }\r\n // var scrollLeft = $headerRowScrollContainer[0].scrollLeft;\r\n // if (scrollLeft != $viewportScrollContainerX[0].scrollLeft) {\r\n // $viewportScrollContainerX[0].scrollLeft = scrollLeft;\r\n // }\r\n // }\r\n\r\n // function handleFooterRowScroll(e) {\r\n // if (programmaticScrollingTimeout) {\r\n // return;\r\n // }\r\n // var scrollLeft = $footerRowScrollContainer[0].scrollLeft;\r\n // if (scrollLeft != $viewportScrollContainerX[0].scrollLeft) {\r\n // $viewportScrollContainerX[0].scrollLeft = scrollLeft;\r\n // }\r\n //}\r\n\r\n // function handlePreHeaderPanelScroll() {\r\n // handleElementScroll($preHeaderPanelScroller[0]);\r\n // }\r\n\r\n //function handleElementScroll(element) {\r\n // if (programmaticScrollingTimeout) {\r\n // return;\r\n // }\r\n // var scrollLeft = element.scrollLeft;\r\n // if (scrollLeft != $viewportScrollContainerX[0].scrollLeft) {\r\n // $viewportScrollContainerX[0].scrollLeft = scrollLeft;\r\n // }\r\n // }\r\n\r\n function handleScroll() {\r\n scrollTop = $viewportScrollContainerY[0].scrollTop;\r\n scrollLeft = $viewportScrollContainerX[0].scrollLeft;\r\n return _handleScroll(false);\r\n }\r\n\r\n function _handleScroll(isMouseWheel) {\r\n // if (programmaticScrollingTimeout) {\r\n // clearTimeout(programmaticScrollingTimeout);\r\n // }\r\n // programmaticScrollingTimeout = setTimeout(() => {\r\n // programmaticScrollingTimeout = null;\r\n // }, 600);\r\n\r\n // ceiling the max scroll values\r\n let vScrollDist = 0;\r\n if (!options.autoHeight) {\r\n let maxScrollDistanceY = $viewportScrollContainerY[0].scrollHeight - $viewportScrollContainerY[0].clientHeight;\r\n if (scrollTop > maxScrollDistanceY) {\r\n scrollTop = maxScrollDistanceY;\r\n }\r\n vScrollDist = Math.abs(scrollTop - prevScrollTop);\r\n }\r\n\r\n let maxScrollDistanceX = $viewportScrollContainerY[0].scrollWidth - $viewportScrollContainerY[0].clientWidth;\r\n if (scrollLeft > maxScrollDistanceX) {\r\n scrollLeft = maxScrollDistanceX;\r\n }\r\n let hScrollDist = Math.abs(scrollLeft - prevScrollLeft);\r\n\r\n\r\n if (hScrollDist) {\r\n prevScrollLeft = scrollLeft;\r\n\r\n $viewportScrollContainerX[0].scrollLeft = scrollLeft;\r\n $headerScrollContainer[0].scrollLeft = scrollLeft;\r\n $topPanelScroller[0].scrollLeft = scrollLeft;\r\n $headerRowScrollContainer[0].scrollLeft = scrollLeft;\r\n if (options.createFooterRow) {\r\n $footerRowScrollContainer[0].scrollLeft = scrollLeft;\r\n }\r\n if (options.createPreHeaderPanel) {\r\n if (hasFrozenColumns()) {\r\n $preHeaderPanelScrollerR[0].scrollLeft = scrollLeft;\r\n } else {\r\n $preHeaderPanelScroller[0].scrollLeft = scrollLeft;\r\n }\r\n }\r\n if (hasFrozenColumns()) {\r\n if (hasFrozenRows) {\r\n $viewportTopR[0].scrollLeft = scrollLeft;\r\n }\r\n } else {\r\n if (hasFrozenRows) {\r\n $viewportTopL[0].scrollLeft = scrollLeft;\r\n }\r\n }\r\n }\r\n\r\n if (vScrollDist) {\r\n vScrollDir = prevScrollTop < scrollTop ? 1 : -1;\r\n prevScrollTop = scrollTop;\r\n\r\n if (isMouseWheel) {\r\n $viewportScrollContainerY[0].scrollTop = scrollTop;\r\n }\r\n\r\n if (hasFrozenColumns()) {\r\n if (hasFrozenRows && !options.frozenBottom) {\r\n $viewportBottomL[0].scrollTop = scrollTop;\r\n } else {\r\n $viewportTopL[0].scrollTop = scrollTop;\r\n }\r\n }\r\n\r\n // switch virtual pages if needed\r\n if (vScrollDist < viewportH) {\r\n scrollTo(scrollTop + offset);\r\n } else {\r\n var oldOffset = offset;\r\n if (h == viewportH) {\r\n page = 0;\r\n } else {\r\n page = Math.min(n - 1, Math.floor(scrollTop * ((th - viewportH) / (h - viewportH)) * (1 / ph)));\r\n }\r\n offset = Math.round(page * cj);\r\n if (oldOffset != offset) {\r\n invalidateAllRows();\r\n }\r\n\r\n }\r\n }\r\n\r\n if (hScrollDist || vScrollDist) {\r\n var dx = Math.abs(lastRenderedScrollLeft - scrollLeft);\r\n var dy = Math.abs(lastRenderedScrollTop - scrollTop);\r\n if (dx > 20 || dy > 20) {\r\n // if rendering is forced or scrolling is small enough to be \"easy\", just render\r\n if (options.forceSyncScrolling || (dy < viewportH && dx < viewportW)) {\r\n render();\r\n } else {\r\n // otherwise, perform \"difficult\" renders at a capped frequency\r\n scrollThrottle.enqueue();\r\n }\r\n\r\n trigger(self.onViewportChanged, {});\r\n }\r\n }\r\n\r\n trigger(self.onScroll, { scrollLeft: scrollLeft, scrollTop: scrollTop });\r\n\r\n if (hScrollDist || vScrollDist) { return true; }\r\n return false;\r\n }\r\n\r\n /*\r\n limits the frequency at which the provided action is executed.\r\n call enqueue to execute the action - it will execute either immediately or, if it was executed less than minPeriod_ms in the past, as soon as minPeriod_ms has expired.\r\n call dequeue to cancel any pending action.\r\n */\r\n function ActionThrottle(action, minPeriod_ms) {\r\n\r\n var blocked = false;\r\n var queued = false;\r\n\r\n function enqueue() {\r\n if (!blocked) {\r\n blockAndExecute();\r\n } else {\r\n queued = true;\r\n }\r\n }\r\n\r\n function dequeue() {\r\n queued = false;\r\n }\r\n\r\n function blockAndExecute() {\r\n blocked = true;\r\n setTimeout(unblock, minPeriod_ms);\r\n action();\r\n }\r\n\r\n function unblock() {\r\n if (queued) {\r\n dequeue();\r\n blockAndExecute();\r\n } else {\r\n blocked = false;\r\n }\r\n }\r\n\r\n return {\r\n enqueue: enqueue,\r\n dequeue: dequeue\r\n };\r\n }\r\n\r\n function asyncPostProcessRows() {\r\n var dataLength = getDataLength();\r\n while (postProcessFromRow <= postProcessToRow) {\r\n var row = (vScrollDir >= 0) ? postProcessFromRow++ : postProcessToRow--;\r\n var cacheEntry = rowsCache[row];\r\n if (!cacheEntry || row >= dataLength) {\r\n continue;\r\n }\r\n\r\n if (!postProcessedRows[row]) {\r\n postProcessedRows[row] = {};\r\n }\r\n\r\n ensureCellNodesInRowsCache(row);\r\n for (var column in cacheEntry.cellNodesByColumnIdx) {\r\n if (!cacheEntry.cellNodesByColumnIdx.hasOwnProperty(column)) {\r\n continue;\r\n }\r\n\r\n let columnIdx = parseInt(column, 10) | 0;\r\n\r\n var m = columns[columnIdx];\r\n var processedStatus = postProcessedRows[row][columnIdx]; // c=cleanup and re-render, R=rendered\r\n if (m.asyncPostRender && processedStatus !== \"R\") {\r\n var node = cacheEntry.cellNodesByColumnIdx[columnIdx];\r\n if (node) {\r\n m.asyncPostRender(node, row, getDataItem(row), m, (processedStatus === \"C\"));\r\n }\r\n postProcessedRows[row][columnIdx] = \"R\";\r\n }\r\n }\r\n\r\n h_postrender = setTimeout(asyncPostProcessRows, options.asyncPostRenderDelay);\r\n return;\r\n }\r\n }\r\n\r\n function asyncPostProcessCleanupRows() {\r\n if (postProcessedCleanupQueue.length > 0) {\r\n var groupId = postProcessedCleanupQueue[0].groupId;\r\n\r\n // loop through all queue members with this groupID\r\n while (postProcessedCleanupQueue.length > 0 && postProcessedCleanupQueue[0].groupId == groupId) {\r\n var entry = postProcessedCleanupQueue.shift();\r\n if (entry.actionType == \"R\") {\r\n $(entry.node).remove();\r\n }\r\n if (entry.actionType == \"C\") {\r\n var column = columns[entry.columnIdx];\r\n if (column.asyncPostRenderCleanup && entry.node) {\r\n // cleanup must also remove element\r\n column.asyncPostRenderCleanup(entry.node, entry.rowIdx, column);\r\n }\r\n }\r\n }\r\n\r\n // call this function again after the specified delay\r\n h_postrenderCleanup = setTimeout(asyncPostProcessCleanupRows, options.asyncPostRenderCleanupDelay);\r\n }\r\n }\r\n\r\n function updateCellCssStylesOnRenderedRows(addedHash, removedHash) {\r\n var node, columnId, addedRowHash, removedRowHash;\r\n for (var row in rowsCache) {\r\n removedRowHash = removedHash && removedHash[row];\r\n addedRowHash = addedHash && addedHash[row];\r\n\r\n if (removedRowHash) {\r\n for (columnId in removedRowHash) {\r\n if (!addedRowHash || removedRowHash[columnId] != addedRowHash[columnId]) {\r\n node = getCellNode(row, getColumnIndex(columnId));\r\n if (node) {\r\n $(node).removeClass(removedRowHash[columnId]);\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (addedRowHash) {\r\n for (columnId in addedRowHash) {\r\n if (!removedRowHash || removedRowHash[columnId] != addedRowHash[columnId]) {\r\n node = getCellNode(row, getColumnIndex(columnId));\r\n if (node) {\r\n $(node).addClass(addedRowHash[columnId]);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n function addCellCssStyles(key, hash) {\r\n if (cellCssClasses[key]) {\r\n throw new Error(\"addCellCssStyles: cell CSS hash with key '\" + key + \"' already exists.\");\r\n }\r\n\r\n cellCssClasses[key] = hash;\r\n updateCellCssStylesOnRenderedRows(hash, null);\r\n\r\n trigger(self.onCellCssStylesChanged, { \"key\": key, \"hash\": hash, \"grid\": self });\r\n }\r\n\r\n function removeCellCssStyles(key) {\r\n if (!cellCssClasses[key]) {\r\n return;\r\n }\r\n\r\n updateCellCssStylesOnRenderedRows(null, cellCssClasses[key]);\r\n delete cellCssClasses[key];\r\n\r\n trigger(self.onCellCssStylesChanged, { \"key\": key, \"hash\": null, \"grid\": self });\r\n }\r\n\r\n function setCellCssStyles(key, hash) {\r\n var prevHash = cellCssClasses[key];\r\n\r\n cellCssClasses[key] = hash;\r\n updateCellCssStylesOnRenderedRows(hash, prevHash);\r\n\r\n trigger(self.onCellCssStylesChanged, { \"key\": key, \"hash\": hash, \"grid\": self });\r\n }\r\n\r\n function getCellCssStyles(key) {\r\n return cellCssClasses[key];\r\n }\r\n\r\n function flashCell(row, cell, speed, times) {\r\n speed = speed || 100;\r\n if (rowsCache[row]) {\r\n let $cell = $(getCellNode(row, cell));\r\n\r\n let toggleCellClass = (remaining) => {\r\n if (!remaining) { return; }\r\n $cell.toggleClass(options.cellFlashingCssClass);\r\n setTimeout(() => {\r\n toggleCellClass(remaining - 1);\r\n }, speed);\r\n };\r\n toggleCellClass((times || 4) * 2);\r\n }\r\n\r\n }\r\n\r\n\r\n function handleDragInit(e, dd) {\r\n var cell = getCellFromEvent(e);\r\n if (!cell || !cellExists(cell.row, cell.cell)) {\r\n return false;\r\n }\r\n\r\n // var retval = trigger(self.onDragInit, dd, e);\r\n trigger(self.onDragInit, dd, e);\r\n // if (e.isImmediatePropagationStopped()) {\r\n // return retval;\r\n // }\r\n\r\n // // if nobody claims to be handling drag'n'drop by stopping immediate propagation,\r\n // // cancel out of it\r\n // return false;\r\n }\r\n\r\n function handleDragStart(e, dd) {\r\n var cell = getCellFromEvent(e);\r\n if (!cell || !cellExists(cell.row, cell.cell)) {\r\n return false;\r\n }\r\n\r\n var retval = trigger(self.onDragStart, dd, e);\r\n if (e.isImmediatePropagationStopped()) {\r\n return retval;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n function handleDrag(e, dd) {\r\n return trigger(self.onDrag, dd, e);\r\n }\r\n\r\n function handleDragEnd(e, dd) {\r\n trigger(self.onDragEnd, dd, e);\r\n }\r\n\r\n function handleKeyDown(e) {\r\n trigger(self.onKeyDown, { row: activeRow, cell: activeCell }, e);\r\n var handled = e.isImmediatePropagationStopped();\r\n var keyCode = Slick.keyCode;\r\n\r\n if (!handled) {\r\n if (!e.shiftKey && !e.altKey) {\r\n if (options.editable && currentEditor && currentEditor.keyCaptureList) {\r\n if (typeof currentEditor.keyCaptureList === \"function\") {\r\n if (currentEditor.keyCaptureList(e.which) === false) {\r\n return;\r\n }\r\n } else if (currentEditor.keyCaptureList.indexOf(e.which) > -1) {\r\n return;\r\n }\r\n }\r\n if (e.which == keyCode.HOME) {\r\n handled = (e.ctrlKey) ? navigateTop() : navigateRowStart();\r\n } else if (e.which == keyCode.END) {\r\n handled = (e.ctrlKey) ? navigateBottom() : navigateRowEnd();\r\n }\r\n }\r\n }\r\n if (!handled) {\r\n if (!e.shiftKey && !e.altKey && !e.ctrlKey) {\r\n // editor may specify an array of keys to bubble\r\n if (options.editable && currentEditor && currentEditor.keyCaptureList) {\r\n if (typeof currentEditor.keyCaptureList === \"function\") {\r\n if (currentEditor.keyCaptureList(e.which) === false) {\r\n return;\r\n }\r\n } else if (currentEditor.keyCaptureList.indexOf(e.which) > -1) {\r\n return;\r\n }\r\n }\r\n if (e.which == keyCode.ESCAPE) {\r\n if (!getEditorLock().isActive()) {\r\n return; // no editing mode to cancel, allow bubbling and default processing (exit without cancelling the event)\r\n }\r\n cancelEditAndSetFocus();\r\n } else if (e.which == keyCode.PAGE_DOWN) {\r\n navigatePageDown();\r\n handled = true;\r\n } else if (e.which == keyCode.PAGE_UP) {\r\n navigatePageUp();\r\n handled = true;\r\n } else if (e.which == keyCode.LEFT) {\r\n handled = navigateLeft();\r\n } else if (e.which == keyCode.RIGHT) {\r\n handled = navigateRight();\r\n } else if (e.which == keyCode.UP) {\r\n handled = navigateUp();\r\n } else if (e.which == keyCode.DOWN) {\r\n handled = navigateDown();\r\n } else if (e.which == keyCode.TAB) {\r\n handled = navigateNext();\r\n } else if (e.which == keyCode.ENTER) {\r\n if (options.editable) {\r\n if (currentEditor) {\r\n // adding new row\r\n if (activeRow === getDataLength()) {\r\n navigateDown();\r\n } else {\r\n commitEditAndNavDown();\r\n }\r\n } else {\r\n if (getEditorLock().commitCurrentEdit()) {\r\n makeActiveCellEditable(undefined, undefined, e);\r\n }\r\n }\r\n }\r\n handled = true;\r\n }\r\n } else if (e.which == keyCode.TAB && e.shiftKey && !e.ctrlKey && !e.altKey) {\r\n handled = navigatePrev();\r\n }\r\n }\r\n\r\n if (handled) {\r\n // the event has been handled so don't let parent element (bubbling/propagation) or browser (default) handle it\r\n e.stopPropagation();\r\n e.preventDefault();\r\n try {\r\n e.originalEvent.keyCode = 0; // prevent default behaviour for special keys in IE browsers (F3, F5, etc.)\r\n } catch (error) {\r\n }\r\n }\r\n }\r\n\r\n function handleClick(e) {\r\n if (!currentEditor) {\r\n // if this click resulted in some cell child node getting focus,\r\n // don't steal it back - keyboard events will still bubble up\r\n // iE9+ seems to default DIVs to tabIndex=0 instead of -1, so check for cell clicks directly.\r\n if (e.target != document.activeElement || $(e.target).hasClass(\"slick-cell\")) {\r\n setFocus();\r\n }\r\n }\r\n\r\n var cell = getCellFromEvent(e);\r\n if (!cell || (currentEditor !== null && activeRow == cell.row && activeCell == cell.cell)) {\r\n return;\r\n }\r\n\r\n trigger(self.onClick, { row: cell.row, cell: cell.cell }, e);\r\n if (e.isImmediatePropagationStopped()) {\r\n return;\r\n }\r\n\r\n // this optimisation causes trouble - MLeibman #329\r\n // if ((activeCell != cell.cell || activeRow != cell.row) && canCellBeActive(cell.row, cell.cell)) {\r\n if (canCellBeActive(cell.row, cell.cell)) {\r\n if (!getEditorLock().isActive() || getEditorLock().commitCurrentEdit()) {\r\n scrollRowIntoView(cell.row, false);\r\n\r\n var preClickModeOn = (e.target && e.target.className === Slick.preClickClassName);\r\n var column = columns[cell.cell];\r\n var suppressActiveCellChangedEvent = (options.editable && column && column.editor && options.suppressActiveCellChangeOnEdit) ? true : false;\r\n setActiveCellInternal(getCellNode(cell.row, cell.cell), null, preClickModeOn, suppressActiveCellChangedEvent, e);\r\n }\r\n }\r\n }\r\n\r\n function handleContextMenu(e) {\r\n var $cell = $(e.target).closestClass(\"slick-cell\", \"grid-canvas\");\r\n if ($cell.length === 0) {\r\n return;\r\n }\r\n\r\n // are we editing this cell?\r\n if (activeCellNode === $cell[0] && currentEditor !== null) {\r\n return;\r\n }\r\n\r\n trigger(self.onContextMenu, {}, e);\r\n }\r\n\r\n function handleDblClick(e) {\r\n var cell = getCellFromEvent(e);\r\n if (!cell || (currentEditor !== null && activeRow == cell.row && activeCell == cell.cell)) {\r\n return;\r\n }\r\n trigger(self.onDblClick, { row: cell.row, cell: cell.cell }, e);\r\n if (e.isImmediatePropagationStopped()) {\r\n return;\r\n }\r\n\r\n if (options.editable) {\r\n gotoCell(cell.row, cell.cell, true, e);\r\n }\r\n }\r\n\r\n // function handleHeaderMouseEnter(e) {\r\n // trigger(self.onHeaderMouseEnter, {\r\n // \"column\": $(this).data(\"column\"),\r\n // \"grid\": self\r\n // }, e);\r\n // }\r\n\r\n // function handleHeaderMouseLeave(e) {\r\n // trigger(self.onHeaderMouseLeave, {\r\n // \"column\": $(this).data(\"column\"),\r\n // \"grid\": self\r\n // }, e);\r\n // }\r\n\r\n function handleHeaderContextMenu(e) {\r\n var $header = $(e.target).closestClass(\"slick-header-column\", \"slick-header-columns\");\r\n var column = $header && $header.data(\"column\");\r\n trigger(self.onHeaderContextMenu, { column: column }, e);\r\n }\r\n\r\n function handleHeaderClick(e) {\r\n // if (columnResizeDragging) return;\r\n var $header = $(e.target).closestClass(\"slick-header-column\", \"slick-header-columns\");\r\n var column = $header && $header.data(\"column\");\r\n if (column) {\r\n trigger(self.onHeaderClick, { column: column }, e);\r\n }\r\n }\r\n\r\n function handleMouseEnter(e) {\r\n trigger(self.onMouseEnter, {}, e);\r\n }\r\n\r\n function handleMouseLeave(e) {\r\n trigger(self.onMouseLeave, {}, e);\r\n }\r\n\r\n function cellExists(row, cell) {\r\n return !(row < 0 || row >= getDataLength() || cell < 0 || cell >= columns.length);\r\n }\r\n\r\n function getCellFromPoint(x, y) {\r\n var row = getRowFromPosition(y);\r\n\r\n // tODO TODOFIX -> frozen rows at bottom\r\n if (hasFrozenRows && y <= getFrozenRowOffset(actualFrozenRow)) {\r\n row = getRowFromPosition(y - offset);\r\n }\r\n\r\n var cell = 0;\r\n\r\n var w = 0;\r\n for (var i = 0; i < columns.length && w < x; i++) {\r\n w += columns[i].width;\r\n cell++;\r\n }\r\n\r\n if (cell < 0) {\r\n cell = 0;\r\n }\r\n\r\n return { row: row, cell: cell - 1 };\r\n }\r\n\r\n function getCellFromNode(cellNode) {\r\n // read column number from .l<columnNumber> CSS class\r\n var cls = /l\\d+/.exec(cellNode.className);\r\n if (!cls) {\r\n throw new Error(\"getCellFromNode: cannot get cell - \" + cellNode.className);\r\n }\r\n return parseInt(cls[0].substr(1, cls[0].length - 1), 10);\r\n }\r\n\r\n function getRowFromNode(rowNode) {\r\n for (var row in rowsCache) {\r\n for (var i in rowsCache[row].rowNode) {\r\n if (rowsCache[row].rowNode[i] === rowNode) {\r\n return parseInt(row, 10) | 0;\r\n }\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n function getFrozenRowOffset(row) {\r\n var offset =\r\n (hasFrozenRows)\r\n ? (options.frozenBottom)\r\n ? (row >= actualFrozenRow)\r\n ? (h < viewportTopH)\r\n ? (getRowBottom(actualFrozenRow))// (options.rowHeight * (row+1) - offset)\r\n : h\r\n : 0\r\n : (row >= actualFrozenRow)\r\n ? frozenRowsHeight\r\n : 0\r\n : 0;\r\n\r\n return offset;\r\n }\r\n\r\n function getCellFromEvent(e) {\r\n var row, cell;\r\n var $cell = $(e.target).closestClass(\"slick-cell\", \"grid-canvas\");\r\n if (!$cell.length) {\r\n return null;\r\n }\r\n\r\n row = getRowFromNode($cell[0].parentNode);\r\n\r\n if (hasFrozenRows) {\r\n\r\n var c = $cell.closestClass(\"grid-canvas\").offset();\r\n\r\n var rowOffset = 0;\r\n var isBottom = $cell.closestClass(\"grid-canvas-bottom\").length;\r\n\r\n if (isBottom) {\r\n rowOffset = (options.frozenBottom) ? <number>$canvasTopL.height() : frozenRowsHeight;\r\n }\r\n\r\n row = getCellFromPoint(e.clientX - c.left, e.clientY - c.top + rowOffset /* + document.documentElement.scrollTop*/).row;\r\n }\r\n\r\n cell = getCellFromNode($cell[0]);\r\n\r\n if (row == null || cell == null) {\r\n return null;\r\n } else {\r\n return {\r\n \"row\": row,\r\n \"cell\": cell\r\n };\r\n }\r\n }\r\n\r\n function getCellNodeBox(row, cell) {\r\n if (!cellExists(row, cell)) {\r\n return null;\r\n }\r\n\r\n var frozenRowOffset = getFrozenRowOffset(row);\r\n\r\n\r\n\r\n var y1 = getRowTop(row) - frozenRowOffset;\r\n var y2 = y1 + getRowHeight(row) - 1;\r\n var x1 = 0;\r\n for (var i = 0; i < cell; i++) {\r\n x1 += columns[i].width;\r\n\r\n if (options.frozenColumn == i) {\r\n x1 = 0;\r\n }\r\n }\r\n var x2 = x1 + columns[cell].width;\r\n\r\n return {\r\n top: y1,\r\n left: x1,\r\n bottom: y2,\r\n right: x2\r\n };\r\n }\r\n\r\n //////////////////////////////////////////////////////////////////////////////////////////////\r\n // cell switching\r\n\r\n function getRowHeight(row: number) {\r\n if (!options.variableRowHeight) {\r\n return options.rowHeight;\r\n }\r\n return rowPositionCache[row].height;\r\n }\r\n\r\n function resetActiveCell() {\r\n setActiveCellInternal(null, false);\r\n }\r\n\r\n function setFocus() {\r\n if (tabbingDirection == -1) {\r\n $focusSink[0].focus();\r\n } else {\r\n $focusSink2[0].focus();\r\n }\r\n }\r\n\r\n function scrollCellIntoView(row, cell, doPaging) {\r\n scrollRowIntoView(row, doPaging);\r\n\r\n if (cell <= options.frozenColumn) {\r\n return;\r\n }\r\n\r\n var colspan = getColspan(row, cell);\r\n internalScrollColumnIntoView(columnPosLeft[cell], columnPosRight[cell + (colspan > 1 ? colspan - 1 : 0)]);\r\n }\r\n\r\n function internalScrollColumnIntoView(left, right) {\r\n var scrollRight = scrollLeft + <number>$viewportScrollContainerX.width();\r\n\r\n if (left < scrollLeft) {\r\n $.each($viewportScrollContainerX, function (idx, el) { el.scrollLeft = left; });\r\n handleScroll();\r\n render();\r\n } else if (right > scrollRight) {\r\n $.each($viewportScrollContainerX, function (idx, el) { el.scrollLeft = Math.min(left, right - $viewportScrollContainerX[0].clientWidth); });\r\n handleScroll();\r\n render();\r\n }\r\n }\r\n\r\n function scrollColumnIntoView(cell) {\r\n internalScrollColumnIntoView(columnPosLeft[cell], columnPosRight[cell]);\r\n }\r\n\r\n function setActiveCellInternal(newCell, opt_editMode?, preClickModeOn?, suppressActiveCellChangedEvent?, e?) {\r\n if (activeCellNode !== null) {\r\n makeActiveCellNormal();\r\n $(activeCellNode).removeClass(\"active\");\r\n if (rowsCache[activeRow]) {\r\n rowsCache[activeRow].rowNode.forEach(x => x.classList.remove(\"active\")); // $(rowsCache[activeRow].rowNode).removeClass(\"active\");\r\n }\r\n }\r\n\r\n var activeCellChanged = (activeCellNode !== newCell);\r\n activeCellNode = newCell;\r\n\r\n if (activeCellNode != null) {\r\n var $activeCellNode = $(activeCellNode);\r\n var $activeCellOffset = $activeCellNode.offset();\r\n\r\n var rowOffset = Math.floor($activeCellNode.closestClass(\"grid-canvas\").offset().top);\r\n var isBottom = $activeCellNode.closestClass(\"grid-canvas-bottom\").length;\r\n\r\n if (hasFrozenRows && isBottom) {\r\n rowOffset -= (options.frozenBottom)\r\n ? <number>$canvasTopL.height()\r\n : frozenRowsHeight;\r\n }\r\n\r\n let cell = getCellFromPoint($activeCellOffset.left, Math.ceil($activeCellOffset.top) - rowOffset);\r\n\r\n activeRow = cell.row;\r\n activeCell = activePosX = activeCell = activePosX = getCellFromNode(activeCellNode);\r\n\r\n $activeCellNode.addClass(\"active\");\r\n if (rowsCache[activeRow]) {\r\n rowsCache[activeRow].rowNode.forEach(x => x.classList.add(\"active\"));// $(rowsCache[activeRow].rowNode).addClass('active');\r\n }\r\n\r\n if (opt_editMode == null) {\r\n opt_editMode = (activeRow == getDataLength()) || options.autoEdit;\r\n }\r\n\r\n if (options.showCellSelection) {\r\n $(activeCellNode).addClass(\"active\");\r\n rowsCache[activeRow].rowNode.forEach(x => x.classList.add(\"active\")); // $(rowsCache[activeRow].rowNode).addClass(\"active\");\r\n }\r\n\r\n if (options.editable && opt_editMode && isCellPotentiallyEditable(activeRow, activeCell)) {\r\n clearTimeout(h_editorLoader);\r\n\r\n if (options.asyncEditorLoading) {\r\n h_editorLoader = setTimeout(function () {\r\n makeActiveCellEditable(undefined, preClickModeOn, e);\r\n }, options.asyncEditorLoadDelay);\r\n } else {\r\n makeActiveCellEditable(undefined, preClickModeOn, e);\r\n }\r\n }\r\n } else {\r\n activeRow = activeCell = null;\r\n }\r\n\r\n // this optimisation causes trouble - MLeibman #329\r\n // if (activeCellChanged) {\r\n if (!suppressActiveCellChangedEvent) { trigger(self.onActiveCellChanged, getActiveCell(), e); }\r\n // }\r\n }\r\n\r\n function clearTextSelection() {\r\n if ((<any>document).selection && (<any>document).selection.empty) {\r\n try {\r\n // iE fails here if selected element is not in dom\r\n (<any>document).selection.empty();\r\n } catch (e) { }\r\n } else if (window.getSelection) {\r\n var sel = window.getSelection();\r\n if (sel && sel.removeAllRanges) {\r\n sel.removeAllRanges();\r\n }\r\n }\r\n }\r\n\r\n function isCellPotentiallyEditable(row, cell) {\r\n var dataLength = getDataLength();\r\n // is the data for this row loaded?\r\n if (row < dataLength && !getDataItem(row)) {\r\n return false;\r\n }\r\n\r\n // are we in the Add New row? can we create new from this cell?\r\n if (columns[cell].cannotTriggerInsert && row >= dataLength) {\r\n return false;\r\n }\r\n\r\n // does this cell have an editor?\r\n if (!getEditor(row, cell) || columns[cell].readonly) {\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n function makeActiveCellNormal() {\r\n if (!currentEditor) {\r\n return;\r\n }\r\n trigger(self.onBeforeCellEditorDestroy, { editor: currentEditor });\r\n currentEditor.destroy();\r\n currentEditor = null;\r\n\r\n if (activeCellNode) {\r\n var d = getDataItem(activeRow);\r\n $(activeCellNode).removeClass(\"editable invalid\");\r\n if (d) {\r\n var column = columns[activeCell];\r\n var formatter = getFormatter(activeRow, column);\r\n var formatterResult = formatter(activeRow, activeCell, getDataItemValueForColumn(d, column), column, d, self);\r\n applyFormatResultToCellNode(formatterResult, activeCellNode);\r\n if (self.onAppendCell.countHandlers() > 0) {\r\n let item = getDataItem(activeRow);\r\n let value = getDataItemValueForColumn(item, columns[activeCell]);\r\n trigger(self.onAppendCell,\r\n {\r\n row: activeRow, cell: activeCell,\r\n value: value, item: item,\r\n column: column, dom: activeCellNode\r\n });\r\n }\r\n invalidatePostProcessingResults(activeRow);\r\n }\r\n }\r\n\r\n // if there previously was text selected on a page (such as selected text in the edit cell just removed),\r\n // iE can't set focus to anything else correctly\r\n if (navigator.userAgent.toLowerCase().match(/msie/)) {\r\n clearTextSelection();\r\n }\r\n\r\n getEditorLock().deactivate(editController);\r\n }\r\n\r\n function makeActiveCellEditable(editor, preClickModeOn, e) {\r\n if (!activeCellNode) {\r\n return;\r\n }\r\n if (!options.editable) {\r\n throw new Error(\"Grid : makeActiveCellEditable : should never get called when options.editable is false\");\r\n }\r\n\r\n // cancel pending async call if there is one\r\n clearTimeout(h_editorLoader);\r\n\r\n if (!isCellPotentiallyEditable(activeRow, activeCell)) {\r\n return;\r\n }\r\n\r\n var columnDef = columns[activeCell];\r\n var item = getDataItem(activeRow);\r\n\r\n if (trigger(self.onBeforeEditCell, { row: activeRow, cell: activeCell, item: item, column: columnDef }) === false) {\r\n setFocus();\r\n return;\r\n }\r\n\r\n getEditorLock().activate(editController);\r\n $(activeCellNode).addClass(\"editable\");\r\n\r\n var useEditor = editor || getEditor(activeRow, activeCell);\r\n\r\n // don't clear the cell if a custom editor is passed through\r\n if (!editor && !useEditor.suppressClearOnEdit) {\r\n activeCellNode.innerHTML = \"\";\r\n }\r\n\r\n var metadata = data.getItemMetadata && data.getItemMetadata(activeRow);\r\n metadata = metadata && metadata.columns;\r\n var columnMetaData = metadata && (metadata[columnDef.id] || metadata[activeCell]);\r\n\r\n currentEditor = new useEditor({\r\n grid: self,\r\n gridPosition: absBox($container[0]),\r\n position: absBox(activeCellNode),\r\n container: activeCellNode,\r\n column: columnDef,\r\n columnMetaData: columnMetaData,\r\n item: item || {},\r\n event: e,\r\n commitChanges: commitEditAndNavDown,\r\n commitChangesOnly: commitEditAndSetFocus,\r\n cancelChanges: cancelEditAndSetFocus\r\n });\r\n\r\n if (item) {\r\n currentEditor.loadValue(item);\r\n if (preClickModeOn && currentEditor.preClick) {\r\n currentEditor.preClick();\r\n }\r\n }\r\n\r\n serializedEditorValue = currentEditor.serializeValue();\r\n\r\n if (currentEditor.position) {\r\n handleActiveCellPositionChange();\r\n }\r\n }\r\n\r\n function commitEditAndNavDown() {\r\n // if the commit fails, it would do so due to a validation error\r\n // if so, do not steal the focus from the editor\r\n if (getEditorLock().commitCurrentEdit()) {\r\n setFocus();\r\n if (options.autoEdit) {\r\n navigateDown();\r\n }\r\n }\r\n }\r\n\r\n function commitEditAndSetFocus() {\r\n // if the commit fails, it would do so due to a validation error\r\n // if so, do not steal the focus from the editor\r\n if (getEditorLock().commitCurrentEdit()) {\r\n setFocus();\r\n }\r\n }\r\n\r\n function cancelEditAndSetFocus() {\r\n if (getEditorLock().cancelCurrentEdit()) {\r\n setFocus();\r\n }\r\n }\r\n\r\n function absBox(elem) {\r\n var box = {\r\n top: elem.offsetTop,\r\n left: elem.offsetLeft,\r\n bottom: 0,\r\n right: 0,\r\n width: $(elem).width(), // outerWidth(),\r\n height: $(elem).height(), // outerHeight(),\r\n visible: true\r\n };\r\n box.bottom = box.top + box.height;\r\n box.right = box.left + box.width;\r\n\r\n // walk up the tree\r\n var offsetParent = elem.offsetParent;\r\n while ((elem = elem.parentNode) != document.body) {\r\n if (elem == null) { break; }\r\n\r\n if (box.visible && elem.scrollHeight != elem.offsetHeight && $(elem).css(\"overflowY\") != \"visible\") {\r\n box.visible = box.bottom > elem.scrollTop && box.top < elem.scrollTop + elem.clientHeight;\r\n }\r\n\r\n if (box.visible && elem.scrollWidth != elem.offsetWidth && $(elem).css(\"overflowX\") != \"visible\") {\r\n box.visible = box.right > elem.scrollLeft && box.left < elem.scrollLeft + elem.clientWidth;\r\n }\r\n\r\n box.left -= elem.scrollLeft;\r\n box.top -= elem.scrollTop;\r\n\r\n if (elem === offsetParent) {\r\n box.left += elem.offsetLeft;\r\n box.top += elem.offsetTop;\r\n offsetParent = elem.offsetParent;\r\n }\r\n\r\n box.bottom = box.top + box.height;\r\n box.right = box.left + box.width;\r\n }\r\n\r\n return box;\r\n }\r\n\r\n function getActiveCellPosition() {\r\n return absBox(activeCellNode);\r\n }\r\n\r\n function getGridPosition() {\r\n return absBox($container[0]);\r\n }\r\n\r\n function handleActiveCellPositionChange() {\r\n if (!activeCellNode) {\r\n return;\r\n }\r\n\r\n trigger(self.onActiveCellPositionChanged, {});\r\n\r\n if (currentEditor) {\r\n var cellBox = getActiveCellPosition();\r\n if (currentEditor.show && currentEditor.hide) {\r\n if (!cellBox.visible) {\r\n currentEditor.hide();\r\n } else {\r\n currentEditor.show();\r\n }\r\n }\r\n\r\n if (currentEditor.position) {\r\n currentEditor.position(cellBox);\r\n }\r\n }\r\n }\r\n\r\n function getCellEditor() {\r\n return currentEditor;\r\n }\r\n\r\n function getActiveCell() {\r\n if (!activeCellNode) {\r\n return null;\r\n } else {\r\n return { row: activeRow, cell: activeCell };\r\n }\r\n }\r\n\r\n function getActiveCellNode() {\r\n return activeCellNode;\r\n }\r\n\r\n function scrollRowIntoView(row, doPaging) {\r\n if (!hasFrozenRows ||\r\n (!options.frozenBottom && row > actualFrozenRow - 1) ||\r\n (options.frozenBottom && row < actualFrozenRow - 1)) {\r\n\r\n var viewportScrollH = <number>$viewportScrollContainerY.height();\r\n\r\n // if frozen row on top\r\n // subtract number of frozen row\r\n var rowNumber = (hasFrozenRows && !options.frozenBottom ? row - options.frozenRow : row);\r\n\r\n var rowBottom = options.variableRowHeight ? rowPositionCache[row].bottom : ((rowNumber + 1) * options.rowHeight);\r\n\r\n var rowAtTop = options.variableRowHeight ? rowPositionCache[row].top : (rowNumber * options.rowHeight);\r\n var rowAtBottom = rowBottom - viewportScrollH + (viewportHasHScroll ? scrollbarDimensions.height : 0);\r\n\r\n // need to page down?\r\n if (rowBottom > scrollTop + viewportScrollH + offset) {\r\n scrollTo(doPaging ? rowAtTop : rowAtBottom);\r\n render();\r\n } else if (rowAtTop < scrollTop + offset) {\r\n scrollTo(doPaging ? rowAtBottom : rowAtTop);\r\n render();\r\n }\r\n }\r\n }\r\n\r\n function scrollRowToTop(row: number) {\r\n scrollTo(options.variableRowHeight ? rowPositionCache[row].top : (row * options.rowHeight));\r\n render();\r\n }\r\n\r\n function scrollPage(dir) {\r\n var deltaRows = dir * numVisibleRows;\r\n /// first fully visible row crosses the line with\r\n /// y == bottomOfTopmostFullyVisibleRow\r\n var bottomOfTopmostFullyVisibleRow = scrollTop + options.rowHeight - 1; // tODO\r\n scrollTo((getRowFromPosition(bottomOfTopmostFullyVisibleRow) + deltaRows) * options.rowHeight); // tODO\r\n render();\r\n\r\n if (options.enableCellNavigation && activeRow != null) {\r\n var row = activeRow + deltaRows;\r\n var dataLengthIncludingAddNew = getDataLengthIncludingAddNew();\r\n if (row >= dataLengthIncludingAddNew) {\r\n row = dataLengthIncludingAddNew - 1;\r\n }\r\n if (row < 0) {\r\n row = 0;\r\n }\r\n\r\n var cell = 0, prevCell = null;\r\n var prevActivePosX = activePosX;\r\n while (cell <= activePosX) {\r\n if (canCellBeActive(row, cell)) {\r\n prevCell = cell;\r\n }\r\n cell += getColspan(row, cell);\r\n }\r\n\r\n if (prevCell !== null) {\r\n setActiveCellInternal(getCellNode(row, prevCell));\r\n activePosX = prevActivePosX;\r\n } else {\r\n resetActiveCell();\r\n }\r\n }\r\n }\r\n\r\n function navigatePageDown() {\r\n scrollPage(1);\r\n }\r\n\r\n function navigatePageUp() {\r\n scrollPage(-1);\r\n }\r\n\r\n function navigateTop() {\r\n navigateToRow(0);\r\n }\r\n\r\n function navigateBottom() {\r\n navigateToRow(getDataLength() - 1);\r\n }\r\n\r\n function navigateToRow(row) {\r\n var num_rows = getDataLength();\r\n if (!num_rows) { return true; }\r\n\r\n if (row < 0) { row = 0; } else if (row >= num_rows) { row = num_rows - 1; }\r\n\r\n scrollCellIntoView(row, 0, true);\r\n if (options.enableCellNavigation && activeRow != null) {\r\n var cell = 0, prevCell = null;\r\n var prevActivePosX = activePosX;\r\n while (cell <= activePosX) {\r\n if (canCellBeActive(row, cell)) {\r\n prevCell = cell;\r\n }\r\n cell += getColspan(row, cell);\r\n }\r\n\r\n if (prevCell !== null) {\r\n setActiveCellInternal(getCellNode(row, prevCell));\r\n activePosX = prevActivePosX;\r\n } else {\r\n resetActiveCell();\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n function getColspan(row, cell) {\r\n var metadata = data.getItemMetadata && data.getItemMetadata(row);\r\n if (!metadata || !metadata.columns) {\r\n return 1;\r\n }\r\n\r\n var columnData = metadata.columns[columns[cell].id] || metadata.columns[cell];\r\n var colspan = (columnData && columnData.colspan);\r\n if (colspan === \"*\") {\r\n colspan = columns.length - cell;\r\n } else {\r\n colspan = colspan || 1;\r\n }\r\n\r\n return colspan;\r\n }\r\n\r\n function findFirstFocusableCell(row) {\r\n var cell = 0;\r\n while (cell < columns.length) {\r\n if (canCellBeActive(row, cell)) {\r\n return cell;\r\n }\r\n cell += getColspan(row, cell);\r\n }\r\n return null;\r\n }\r\n\r\n function findLastFocusableCell(row) {\r\n var cell = 0;\r\n var lastFocusableCell = null;\r\n while (cell < columns.length) {\r\n if (canCellBeActive(row, cell)) {\r\n lastFocusableCell = cell;\r\n }\r\n cell += getColspan(row, cell);\r\n }\r\n return lastFocusableCell;\r\n }\r\n\r\n function gotoRight(row, cell, posX) {\r\n if (cell >= columns.length) {\r\n return null;\r\n }\r\n\r\n do {\r\n cell += getColspan(row, cell);\r\n }\r\n while (cell < columns.length && !canCellBeActive(row, cell));\r\n\r\n if (cell < columns.length) {\r\n return {\r\n \"row\": row,\r\n \"cell\": cell,\r\n \"posX\": cell\r\n };\r\n }\r\n return null;\r\n }\r\n\r\n function gotoLeft(row, cell, posX) {\r\n if (cell <= 0) {\r\n return null;\r\n }\r\n\r\n var firstFocusableCell = findFirstFocusableCell(row);\r\n if (firstFocusableCell === null || firstFocusableCell >= cell) {\r\n return null;\r\n }\r\n\r\n var prev = {\r\n \"row\": row,\r\n \"cell\": firstFocusableCell,\r\n \"posX\": firstFocusableCell\r\n };\r\n var pos;\r\n while (true) {\r\n pos = gotoRight(prev.row, prev.cell, prev.posX);\r\n if (!pos) {\r\n return null;\r\n }\r\n if (pos.cell >= cell) {\r\n return prev;\r\n }\r\n prev = pos;\r\n }\r\n }\r\n\r\n function gotoDown(row, cell, posX) {\r\n var prevCell;\r\n var dataLengthIncludingAddNew = getDataLengthIncludingAddNew();\r\n while (true) {\r\n if (++row >= dataLengthIncludingAddNew) {\r\n return null;\r\n }\r\n\r\n prevCell = cell = 0;\r\n while (cell <= posX) {\r\n prevCell = cell;\r\n cell += getColspan(row, cell);\r\n }\r\n\r\n if (canCellBeActive(row, prevCell)) {\r\n return {\r\n \"row\": row,\r\n \"cell\": prevCell,\r\n \"posX\": posX\r\n };\r\n }\r\n }\r\n }\r\n\r\n function gotoUp(row, cell, posX) {\r\n var prevCell;\r\n while (true) {\r\n if (--row < 0) {\r\n return null;\r\n }\r\n\r\n prevCell = cell = 0;\r\n while (cell <= posX) {\r\n prevCell = cell;\r\n cell += getColspan(row, cell);\r\n }\r\n\r\n if (canCellBeActive(row, prevCell)) {\r\n return {\r\n \"row\": row,\r\n \"cell\": prevCell,\r\n \"posX\": posX\r\n };\r\n }\r\n }\r\n }\r\n\r\n function gotoNext(row, cell, posX) {\r\n if (row == null && cell == null) {\r\n row = cell = posX = 0;\r\n if (canCellBeActive(row, cell)) {\r\n return {\r\n \"row\": row,\r\n \"cell\": cell,\r\n \"posX\": cell\r\n };\r\n }\r\n }\r\n\r\n var pos = gotoRight(row, cell, posX);\r\n if (pos) {\r\n return pos;\r\n }\r\n\r\n var firstFocusableCell = null;\r\n var dataLengthIncludingAddNew = getDataLengthIncludingAddNew();\r\n\r\n // if at last row, cycle through columns rather than get stuck in the last one\r\n if (row === dataLengthIncludingAddNew - 1) { row--; }\r\n\r\n while (++row < dataLengthIncludingAddNew) {\r\n firstFocusableCell = findFirstFocusableCell(row);\r\n if (firstFocusableCell !== null) {\r\n return {\r\n \"row\": row,\r\n \"cell\": firstFocusableCell,\r\n \"posX\": firstFocusableCell\r\n };\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n function gotoPrev(row, cell, posX) {\r\n if (row == null && cell == null) {\r\n row = getDataLengthIncludingAddNew() - 1;\r\n cell = posX = columns.length - 1;\r\n if (canCellBeActive(row, cell)) {\r\n return {\r\n \"row\": row,\r\n \"cell\": cell,\r\n \"posX\": cell\r\n };\r\n }\r\n }\r\n\r\n var pos;\r\n var lastSelectableCell;\r\n while (!pos) {\r\n pos = gotoLeft(row, cell, posX);\r\n if (pos) {\r\n break;\r\n }\r\n if (--row < 0) {\r\n return null;\r\n }\r\n\r\n cell = 0;\r\n lastSelectableCell = findLastFocusableCell(row);\r\n if (lastSelectableCell !== null) {\r\n pos = {\r\n \"row\": row,\r\n \"cell\": lastSelectableCell,\r\n \"posX\": lastSelectableCell\r\n };\r\n }\r\n }\r\n return pos;\r\n }\r\n\r\n function gotoRowStart(row, cell, posX) {\r\n var newCell = findFirstFocusableCell(row);\r\n if (newCell === null) { return null; }\r\n\r\n return {\r\n \"row\": row,\r\n \"cell\": newCell,\r\n \"posX\": newCell\r\n };\r\n }\r\n\r\n function gotoRowEnd(row, cell, posX) {\r\n var newCell = findLastFocusableCell(row);\r\n if (newCell === null) { return null; }\r\n\r\n return {\r\n \"row\": row,\r\n \"cell\": newCell,\r\n \"posX\": newCell\r\n };\r\n }\r\n\r\n function navigateRight() {\r\n return navigate(\"right\");\r\n }\r\n\r\n function navigateLeft() {\r\n return navigate(\"left\");\r\n }\r\n\r\n function navigateDown() {\r\n return navigate(\"down\");\r\n }\r\n\r\n function navigateUp() {\r\n return navigate(\"up\");\r\n }\r\n\r\n function navigateNext() {\r\n return navigate(\"next\");\r\n }\r\n\r\n function navigatePrev() {\r\n return navigate(\"prev\");\r\n }\r\n\r\n function navigateRowStart() {\r\n return navigate(\"home\");\r\n }\r\n\r\n function navigateRowEnd() {\r\n return navigate(\"end\");\r\n }\r\n\r\n /**\r\n * @param {string} dir Navigation direction.\r\n * @return {boolean} Whether navigation resulted in a change of active cell.\r\n */\r\n function navigate(dir) {\r\n if (!options.enableCellNavigation) {\r\n return false;\r\n }\r\n\r\n if (!activeCellNode && dir != \"prev\" && dir != \"next\") {\r\n return false;\r\n }\r\n\r\n if (!getEditorLock().commitCurrentEdit()) {\r\n return true;\r\n }\r\n setFocus();\r\n\r\n var tabbingDirections = {\r\n \"up\": -1,\r\n \"down\": 1,\r\n \"left\": -1,\r\n \"right\": 1,\r\n \"prev\": -1,\r\n \"next\": 1,\r\n \"home\": -1,\r\n \"end\": 1\r\n };\r\n tabbingDirection = tabbingDirections[dir];\r\n\r\n var stepFunctions = {\r\n \"up\": gotoUp,\r\n \"down\": gotoDown,\r\n \"left\": gotoLeft,\r\n \"right\": gotoRight,\r\n \"prev\": gotoPrev,\r\n \"next\": gotoNext,\r\n \"home\": gotoRowStart,\r\n \"end\": gotoRowEnd\r\n };\r\n var stepFn = stepFunctions[dir];\r\n var pos = stepFn(activeRow, activeCell, activePosX);\r\n if (pos) {\r\n if (hasFrozenRows && options.frozenBottom && pos.row == getDataLength()) { // tODO correct?\r\n return;\r\n }\r\n\r\n var isAddNewRow = (pos.row == getDataLength());\r\n\r\n if ((!options.frozenBottom && pos.row >= actualFrozenRow)\r\n || (options.frozenBottom && pos.row < actualFrozenRow)\r\n ) {\r\n scrollCellIntoView(pos.row, pos.cell, !isAddNewRow && options.emulatePagingWhenScrolling);\r\n }\r\n setActiveCellInternal(getCellNode(pos.row, pos.cell));\r\n activePosX = pos.posX;\r\n return true;\r\n } else {\r\n setActiveCellInternal(getCellNode(activeRow, activeCell));\r\n return false;\r\n }\r\n }\r\n\r\n function getCellNode(row, cell) {\r\n if (rowsCache[row]) {\r\n ensureCellNodesInRowsCache(row);\r\n // try {\r\n // return rowsCache[row].cellNodesByColumnIdx[cell][0];\r\n // } catch (e) {\r\n return rowsCache[row].cellNodesByColumnIdx[cell];\r\n // }\r\n }\r\n return null;\r\n }\r\n\r\n function setActiveCell(row, cell, opt_editMode, preClickModeOn, suppressActiveCellChangedEvent) {\r\n if (!initialized) { return; }\r\n if (row > getDataLength() || row < 0 || cell >= columns.length || cell < 0) {\r\n return;\r\n }\r\n\r\n if (!options.enableCellNavigation) {\r\n return;\r\n }\r\n\r\n scrollCellIntoView(row, cell, false);\r\n setActiveCellInternal(getCellNode(row, cell), opt_editMode, preClickModeOn, suppressActiveCellChangedEvent);\r\n }\r\n\r\n function canCellBeActive(row, cell) {\r\n if (!options.enableCellNavigation || row >= getDataLengthIncludingAddNew() ||\r\n row < 0 || cell >= columns.length || cell < 0) {\r\n return false;\r\n }\r\n\r\n var rowMetadata = data.getItemMetadata && data.getItemMetadata(row);\r\n if (rowMetadata && typeof rowMetadata.focusable !== \"undefined\") {\r\n return !!rowMetadata.focusable;\r\n }\r\n\r\n var columnMetadata = rowMetadata && rowMetadata.columns;\r\n if (columnMetadata && columnMetadata[columns[cell].id] && typeof columnMetadata[columns[cell].id].focusable !== \"undefined\") {\r\n return !!columnMetadata[columns[cell].id].focusable;\r\n }\r\n if (columnMetadata && columnMetadata[cell] && typeof columnMetadata[cell].focusable !== \"undefined\") {\r\n return !!columnMetadata[cell].focusable;\r\n }\r\n\r\n return !!columns[cell].focusable;\r\n }\r\n\r\n function canCellBeSelected(row, cell) {\r\n if (row >= getDataLength() || row < 0 || cell >= columns.length || cell < 0) {\r\n return false;\r\n }\r\n\r\n var rowMetadata = data.getItemMetadata && data.getItemMetadata(row);\r\n if (rowMetadata && typeof rowMetadata.selectable !== \"undefined\") {\r\n return !!rowMetadata.selectable;\r\n }\r\n\r\n var columnMetadata = rowMetadata && rowMetadata.columns && (rowMetadata.columns[columns[cell].id] || rowMetadata.columns[cell]);\r\n if (columnMetadata && typeof columnMetadata.selectable !== \"undefined\") {\r\n return !!columnMetadata.selectable;\r\n }\r\n\r\n return !!columns[cell].selectable;\r\n }\r\n\r\n function gotoCell(row, cell, forceEdit?, e?) {\r\n if (!initialized) { return; }\r\n if (!canCellBeActive(row, cell)) {\r\n return;\r\n }\r\n\r\n if (!getEditorLock().commitCurrentEdit()) {\r\n return;\r\n }\r\n\r\n scrollCellIntoView(row, cell, false);\r\n\r\n var newCell = getCellNode(row, cell);\r\n\r\n // if selecting the 'add new' row, start editing right away\r\n var column = columns[cell];\r\n var suppressActiveCellChangedEvent = !!(options.editable && column && column.editor && options.suppressActiveCellChangeOnEdit);\r\n setActiveCellInternal(newCell, (forceEdit || (row === getDataLength()) || options.autoEdit), null, suppressActiveCellChangedEvent, e);\r\n\r\n // if no editor was created, set the focus back on the grid\r\n if (!currentEditor) {\r\n setFocus();\r\n }\r\n }\r\n\r\n\r\n //////////////////////////////////////////////////////////////////////////////////////////////\r\n // iEditor implementation for the editor lock\r\n\r\n function commitCurrentEdit() {\r\n var item = getDataItem(activeRow);\r\n var column = columns[activeCell];\r\n\r\n if (currentEditor) {\r\n if (currentEditor.isValueChanged()) {\r\n var validationResults = currentEditor.validate();\r\n\r\n if (validationResults.valid) {\r\n if (activeRow < getDataLength()) {\r\n var editCommand = {\r\n row: activeRow,\r\n cell: activeCell,\r\n editor: currentEditor,\r\n serializedValue: currentEditor.serializeValue(),\r\n prevSerializedValue: serializedEditorValue,\r\n execute: function () {\r\n this.editor.applyValue(item, this.serializedValue);\r\n updateRow(this.row);\r\n trigger(self.onCellChange, {\r\n row: this.row,\r\n cell: this.cell,\r\n item: item,\r\n value: this.serializedValue\r\n });\r\n },\r\n undo: function () {\r\n this.editor.applyValue(item, this.prevSerializedValue);\r\n updateRow(this.row);\r\n trigger(self.onCellChange, {\r\n row: this.row,\r\n cell: this.cell,\r\n item: item,\r\n value: this.prevSerializedValue\r\n });\r\n }\r\n };\r\n\r\n if (options.editCommandHandler) {\r\n makeActiveCellNormal();\r\n options.editCommandHandler(item, column, editCommand);\r\n } else {\r\n editCommand.execute();\r\n makeActiveCellNormal();\r\n }\r\n\r\n } else {\r\n var newItem = {};\r\n currentEditor.applyValue(newItem, currentEditor.serializeValue());\r\n makeActiveCellNormal();\r\n trigger(self.onAddNewRow, { item: newItem, column: column });\r\n }\r\n\r\n // check whether the lock has been re-acquired by event handlers\r\n return !getEditorLock().isActive();\r\n } else {\r\n // re-add the CSS class to trigger transitions, if any.\r\n $(activeCellNode).removeClass(\"invalid\");\r\n $(activeCellNode).width(); // force layout\r\n $(activeCellNode).addClass(\"invalid\");\r\n\r\n trigger(self.onValidationError, {\r\n editor: currentEditor,\r\n cellNode: activeCellNode,\r\n validationResults: validationResults,\r\n row: activeRow,\r\n cell: activeCell,\r\n column: column\r\n });\r\n\r\n currentEditor.focus();\r\n return false;\r\n }\r\n }\r\n\r\n makeActiveCellNormal();\r\n }\r\n return true;\r\n }\r\n\r\n function cancelCurrentEdit() {\r\n makeActiveCellNormal();\r\n return true;\r\n }\r\n\r\n function rowsToRanges(rows) {\r\n var ranges = [];\r\n var lastCell = columns.length - 1;\r\n for (var i = 0; i < rows.length; i++) {\r\n ranges.push(new Slick.Range(rows[i], 0, rows[i], lastCell));\r\n }\r\n return ranges;\r\n }\r\n\r\n function getSelectedRows() {\r\n if (!selectionModel) {\r\n throw new Error(\"Selection model is not set\");\r\n }\r\n return selectedRows;\r\n }\r\n\r\n function setSelectedRows(rows) {\r\n if (!selectionModel) {\r\n throw new Error(\"Selection model is not set\");\r\n }\r\n // if (self && self.getEditorLock && !self.getEditorLock().isActive()) {\r\n selectionModel.setSelectedRanges(rowsToRanges(rows));\r\n // }\r\n }\r\n\r\n\r\n\r\n //////////////////////////////////////////////////////////////////////////////////////////////\r\n // public API\r\n\r\n $.shallowExtend(this, {\r\n \"slickGridVersion\": \"2.4.7\",\r\n\r\n // events\r\n \"onScroll\": new Slick.Event(),\r\n \"onSort\": new Slick.Event(),\r\n // \"onHeaderMouseEnter\": new Slick.Event(),\r\n // \"onHeaderMouseLeave\": new Slick.Event(),\r\n \"onHeaderContextMenu\": new Slick.Event(),\r\n \"onHeaderClick\": new Slick.Event(),\r\n \"onHeaderCellRendered\": new Slick.Event(),\r\n \"onBeforeHeaderCellDestroy\": new Slick.Event(),\r\n \"onHeaderRowCellRendered\": new Slick.Event(),\r\n \"onFooterRowCellRendered\": new Slick.Event(),\r\n \"onBeforeHeaderRowCellDestroy\": new Slick.Event(),\r\n \"onBeforeFooterRowCellDestroy\": new Slick.Event(),\r\n \"onMouseEnter\": new Slick.Event(),\r\n \"onMouseLeave\": new Slick.Event(),\r\n \"onClick\": new Slick.Event(),\r\n \"onDblClick\": new Slick.Event(),\r\n \"onContextMenu\": new Slick.Event(),\r\n \"onKeyDown\": new Slick.Event(),\r\n \"onAddNewRow\": new Slick.Event(),\r\n \"onAppendCell\": new Slick.Event(),\r\n \"onValidationError\": new Slick.Event(),\r\n \"onViewportChanged\": new Slick.Event(),\r\n \"onColumnsReordered\": new Slick.Event(),\r\n \"onColumnsResized\": new Slick.Event(),\r\n \"onCellChange\": new Slick.Event(),\r\n \"onBeforeEditCell\": new Slick.Event(),\r\n \"onBeforeCellEditorDestroy\": new Slick.Event(),\r\n \"onBeforeDestroy\": new Slick.Event(),\r\n \"onActiveCellChanged\": new Slick.Event(),\r\n \"onActiveCellPositionChanged\": new Slick.Event(),\r\n \"onDragInit\": new Slick.Event(),\r\n \"onDragStart\": new Slick.Event(),\r\n \"onDrag\": new Slick.Event(),\r\n \"onDragEnd\": new Slick.Event(),\r\n \"onSelectedRowsChanged\": new Slick.Event(),\r\n \"onCellCssStylesChanged\": new Slick.Event(),\r\n \"onAutosizeColumns\": new Slick.Event(),\r\n \"onRendered\": new Slick.Event(),\r\n \"onAppendRow\": new Slick.Event(), // added NEW\r\n \"onBeforeRemoveRow\": new Slick.Event(), // added NEW\r\n\r\n // methods\r\n \"registerPlugin\": registerPlugin,\r\n \"unregisterPlugin\": unregisterPlugin,\r\n \"getPluginByName\": getPluginByName,\r\n \"getColumns\": getColumns,\r\n \"setColumns\": setColumns,\r\n \"getColumnIndex\": getColumnIndex,\r\n \"getColumnById\": getColumnById,\r\n \"updateColumnHeader\": updateColumnHeader,\r\n \"setSortColumn\": setSortColumn,\r\n \"setSortColumns\": setSortColumns,\r\n \"getSortColumns\": getSortColumns,\r\n \"autosizeColumns\": autosizeColumns,\r\n \"getOptions\": getOptions,\r\n \"setOptions\": setOptions,\r\n \"getData\": getData,\r\n \"getDataLength\": getDataLength,\r\n \"getDataItem\": getDataItem,\r\n \"setData\": setData,\r\n \"getSelectionModel\": getSelectionModel,\r\n \"setSelectionModel\": setSelectionModel,\r\n \"getSelectedRows\": getSelectedRows,\r\n \"setSelectedRows\": setSelectedRows,\r\n \"getContainerNode\": getContainerNode,\r\n \"updatePagingStatusFromView\": updatePagingStatusFromView,\r\n \"applyFormatResultToCellNode\": applyFormatResultToCellNode,\r\n\r\n \"render\": render,\r\n \"invalidate\": invalidate,\r\n \"invalidateRow\": invalidateRow,\r\n \"invalidateRows\": invalidateRows,\r\n \"invalidateAllRows\": invalidateAllRows,\r\n \"updateCell\": updateCell,\r\n \"updateRow\": updateRow,\r\n \"getViewport\": getVisibleRange,\r\n \"getRenderedRange\": getRenderedRange,\r\n \"resizeCanvas\": resizeCanvas,\r\n \"updateRowCount\": updateRowCount,\r\n \"scrollRowIntoView\": scrollRowIntoView,\r\n \"scrollRowToTop\": scrollRowToTop,\r\n \"scrollCellIntoView\": scrollCellIntoView,\r\n \"scrollColumnIntoView\": scrollColumnIntoView,\r\n \"getCanvasNode\": getCanvasNode,\r\n \"getUID\": getUID,\r\n \"getHeaderColumnWidthDiff\": getHeaderColumnWidthDiff,\r\n \"getScrollbarDimensions\": getScrollbarDimensions,\r\n \"getHeadersWidth\": getHeadersWidth,\r\n \"getCanvasWidth\": getCanvasWidth,\r\n \"getCanvases\": getCanvases,\r\n \"getActiveCanvasNode\": getActiveCanvasNode,\r\n \"setActiveCanvasNode\": setActiveCanvasNode,\r\n \"getViewportNode\": getViewportNode,\r\n \"getActiveViewportNode\": getActiveViewportNode,\r\n \"setActiveViewportNode\": setActiveViewportNode,\r\n \"focus\": setFocus,\r\n \"scrollTo\": scrollTo,\r\n\r\n \"getCellFromPoint\": getCellFromPoint,\r\n \"getCellFromEvent\": getCellFromEvent,\r\n \"getActiveCell\": getActiveCell,\r\n \"setActiveCell\": setActiveCell,\r\n \"getActiveCellNode\": getActiveCellNode,\r\n \"getActiveCellPosition\": getActiveCellPosition,\r\n \"resetActiveCell\": resetActiveCell,\r\n \"editActiveCell\": makeActiveCellEditable,\r\n \"getCellEditor\": getCellEditor,\r\n \"getCellNode\": getCellNode,\r\n \"getCellNodeBox\": getCellNodeBox,\r\n \"canCellBeSelected\": canCellBeSelected,\r\n \"canCellBeActive\": canCellBeActive,\r\n \"navigatePrev\": navigatePrev,\r\n \"navigateNext\": navigateNext,\r\n \"navigateUp\": navigateUp,\r\n \"navigateDown\": navigateDown,\r\n \"navigateLeft\": navigateLeft,\r\n \"navigateRight\": navigateRight,\r\n \"navigatePageUp\": navigatePageUp,\r\n \"navigatePageDown\": navigatePageDown,\r\n \"navigateTop\": navigateTop,\r\n \"navigateBottom\": navigateBottom,\r\n \"navigateRowStart\": navigateRowStart,\r\n \"navigateRowEnd\": navigateRowEnd,\r\n \"gotoCell\": gotoCell,\r\n \"getTopPanel\": getTopPanel,\r\n \"setTopPanelVisibility\": setTopPanelVisibility,\r\n \"getPreHeaderPanel\": getPreHeaderPanel,\r\n \"getPreHeaderPanelRight\": getPreHeaderPanelRight,\r\n \"setPreHeaderPanelVisibility\": setPreHeaderPanelVisibility,\r\n \"getHeader\": getHeader,\r\n \"getHeaderColumn\": getHeaderColumn,\r\n \"setHeaderRowVisibility\": setHeaderRowVisibility,\r\n \"getHeaderRow\": getHeaderRow,\r\n \"getHeaderRowColumn\": getHeaderRowColumn,\r\n \"setFooterRowVisibility\": setFooterRowVisibility,\r\n \"getFooterRow\": getFooterRow,\r\n \"getFooterRowColumn\": getFooterRowColumn,\r\n \"getGridPosition\": getGridPosition,\r\n \"flashCell\": flashCell,\r\n \"addCellCssStyles\": addCellCssStyles,\r\n \"setCellCssStyles\": setCellCssStyles,\r\n \"removeCellCssStyles\": removeCellCssStyles,\r\n \"getCellCssStyles\": getCellCssStyles,\r\n \"getFrozenRowOffset\": getFrozenRowOffset,\r\n \"getDataItemValueForColumn\": getDataItemValueForColumn,\r\n\r\n \"init\": finishInitialization,\r\n \"destroy\": destroy,\r\n\r\n // iEditor implementation\r\n \"getEditorLock\": getEditorLock,\r\n \"getEditController\": getEditController\r\n });\r\n\r\n init();\r\n}\r\n","import \"./resizable.css\";\r\nimport \"../core/polyfills\";\r\nimport { EventHandler } from \"./eventhandler\";\r\n\r\nexport interface IResizeEventArg {\r\n x: number;\r\n y: number;\r\n target: HTMLElement;\r\n evt: MouseEvent;\r\n}\r\n\r\nexport interface IResizeOptions {\r\n minWidth?: number;\r\n maxWidth?: number;\r\n minHeight?: number;\r\n maxHeight?: number;\r\n resizeDelta?: number;\r\n resizeHandlePrefix?: string;\r\n onStart?: EventHandler<IResizeEventArg>;\r\n onStop?: EventHandler<IResizeEventArg>;\r\n onResize?: EventHandler<IResizeEventArg>;\r\n gridX?: number;\r\n gridY?: number;\r\n}\r\n\r\nconst defaultOptions: IResizeOptions = {\r\n resizeHandlePrefix: \"rs-\",\r\n onStart: new EventHandler<IResizeEventArg>(),\r\n onStop: new EventHandler<IResizeEventArg>(),\r\n onResize: new EventHandler<IResizeEventArg>(),\r\n resizeDelta: 0\r\n};\r\n\r\nexport class ResizeContainer {\r\n\r\n private element: HTMLElement;\r\n\r\n private resizeX: boolean;\r\n private resizeY: boolean;\r\n\r\n private startSize: { x: number, y: number } = { x: null, y: null };\r\n\r\n constructor(private container: HTMLElement,\r\n private options: IResizeOptions) {\r\n this.init();\r\n }\r\n\r\n private init(): void {\r\n this.container.classList.add(\"resizable\");\r\n this.container.addEventListener(\"mousedown\", this.mouseDownContainer, false);\r\n this.container.addEventListener(\"touchstart\", this.mouseDownContainer, false);\r\n }\r\n\r\n private mouseDownContainer = (evt: MouseEvent) => {\r\n const target: HTMLElement = evt.target as HTMLElement;\r\n if ((\" \" + target.className).indexOf(\" \" + this.options.resizeHandlePrefix) < 0) {\r\n return; // not a resize handle\r\n }\r\n evt.preventDefault();\r\n evt.stopPropagation();\r\n evt.stopImmediatePropagation();\r\n this.resizeX = target.classList.contains(this.options.resizeHandlePrefix + \"r\") ||\r\n target.classList.contains(this.options.resizeHandlePrefix + \"l\");\r\n this.resizeY = target.classList.contains(this.options.resizeHandlePrefix + \"t\") ||\r\n target.classList.contains(this.options.resizeHandlePrefix + \"b\");\r\n\r\n this.element = target.parentElement; // TODO change to closest class\r\n this.options.onStart.notify({evt, target: this.element, x: this.extractArg<number>(evt, \"pageX\"), y: this.extractArg<number>(evt, \"pageY\")});\r\n\r\n // register event listeners\r\n window.addEventListener(\"mousemove\", this.mouseMove, false);\r\n window.addEventListener(\"mouseup\", this.mouseUp, false);\r\n window.addEventListener(\"touchmove\", this.mouseMove, false);\r\n window.addEventListener(\"touchend\", this.mouseUp, false);\r\n }\r\n\r\n private mouseMove = (evt: MouseEvent) => {\r\n let raiseEvt = false;\r\n\r\n if (this.resizeX) {\r\n let val: number = this.extractArg<number>(evt, \"clientX\") - this.element.getBoundingClientRect().left;\r\n if (this.options.minWidth && val < this.options.minWidth) {\r\n val = this.options.minWidth;\r\n } else if (this.options.maxWidth && val > this.options.maxWidth) {\r\n val = this.options.maxWidth;\r\n }\r\n if (this.startSize != null && this.startSize.x == null) {\r\n this.startSize.x = val;\r\n }\r\n if (this.startSize == null || Math.abs(this.startSize.x - val) >= this.options.resizeDelta) {\r\n // if (!this.options.gridX || Math.round(val) % this.options.gridX === 0) {\r\n if (this.options.gridX) {\r\n val = Math.round(val / this.options.gridX) * this.options.gridX;\r\n }\r\n this.element.style.width = Math.round(val) + \"px\";\r\n raiseEvt = true;\r\n this.startSize = null;\r\n // }\r\n }\r\n }\r\n if (this.resizeY) {\r\n let val: number = this.extractArg<number>(evt, \"clientY\") - this.element.getBoundingClientRect().top;\r\n if (this.options.minHeight && val < this.options.minHeight) {\r\n val = this.options.minHeight;\r\n } else if (this.options.maxHeight && val > this.options.maxHeight) {\r\n val = this.options.maxHeight;\r\n }\r\n if (this.startSize != null && this.startSize.y == null) {\r\n this.startSize.y = val;\r\n }\r\n if (this.startSize == null || Math.abs(this.startSize.y - val) >= this.options.resizeDelta) {\r\n // if (!this.options.gridY || Math.round(val) % this.options.gridY === 0) {\r\n if (this.options.gridY) {\r\n val = Math.round(val / this.options.gridY) * this.options.gridY;\r\n }\r\n this.element.style.height = Math.round(val) + \"px\";\r\n raiseEvt = true;\r\n this.startSize = null;\r\n // }\r\n }\r\n }\r\n if (raiseEvt) {\r\n this.options.onResize.notify({evt, target: this.element, x: this.extractArg<number>(evt, \"pageX\"), y: this.extractArg<number>(evt, \"pageY\")});\r\n }\r\n }\r\n\r\n private mouseUp = (evt: MouseEvent) => {\r\n window.removeEventListener(\"mousemove\", this.mouseMove, false);\r\n window.removeEventListener(\"mouseup\", this.mouseUp, false);\r\n window.removeEventListener(\"touchmove\", this.mouseMove, false);\r\n window.removeEventListener(\"touchend\", this.mouseUp, false);\r\n this.options.onStop.notify({evt, target: this.element, x: this.extractArg<number>(evt, \"pageX\"), y: this.extractArg<number>(evt, \"pageY\")});\r\n this.startSize = { x: null, y: null };\r\n }\r\n\r\n private extractArg<T>(evt: any, key: string): T {\r\n return evt[key] != null ? evt[key] : (evt.touches.length > 0 ? evt.touches : evt.changedTouches)[0][key];\r\n }\r\n\r\n}\r\n\r\nexport function Resizable(selector: HTMLElement | string, options?: IResizeOptions): ResizeContainer {\r\n return new ResizeContainer(typeof selector === \"string\" ?\r\n document.querySelector(selector) :\r\n selector,\r\n { ...defaultOptions, ...options });\r\n}\r\n","// source: https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent/CustomEvent\r\n(function () {\r\n if (typeof window.CustomEvent === \"function\") { return false };\r\n\r\n function CustomEvent(event, params) {\r\n params = params || { bubbles: false, cancelable: false, detail: undefined };\r\n var evt = document.createEvent(\"CustomEvent\");\r\n evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\r\n return evt;\r\n }\r\n\r\n CustomEvent.prototype = window.Event.prototype;\r\n\r\n (window as any).CustomEvent = CustomEvent;\r\n\r\n if (!(\"remove\" in Element.prototype)) {\r\n (Element.prototype as any).remove = function() {\r\n if (this.parentNode) {\r\n this.parentNode.removeChild(this);\r\n }\r\n };\r\n }\r\n\r\n})();\r\n","export interface IEvent<T, T2 = void> {\r\n subscribe(fnc: (args?: T, args2?: T2) => any);\r\n notify(val?: T);\r\n}\r\n\r\nexport class EventHandler<T, T2 = void> implements IEvent<T, T2> {\r\n\r\n public static Create(click: (EventHandler<any, any> | ((p?: any, p2?: any) => any))) {\r\n if (click == null) {\r\n return new EventHandler<any, any>();\r\n }\r\n if (typeof click === \"function\") {\r\n const res = new EventHandler<any, any>();\r\n res.subscribe(click);\r\n return res;\r\n }\r\n return click;\r\n }\r\n\r\n private handlers = [];\r\n\r\n constructor(fnc?: (args?: T, args2?: T2) => any) {\r\n if (fnc != null) {\r\n this.handlers.push(fnc);\r\n }\r\n }\r\n\r\n public subscribe(fnc: (args?: T, args2?: T2) => any) {\r\n this.handlers.push(fnc);\r\n }\r\n\r\n public notify(val?: T, val2?: T2) {\r\n for (const h of this.handlers) {\r\n h(val, val2);\r\n }\r\n }\r\n\r\n public count(): number {\r\n return this.handlers.length;\r\n }\r\n\r\n public unSubscribe(fnc: (args?: T, args2?: T2) => any) {\r\n if (this.handlers.indexOf(fnc) >= 0) {\r\n this.handlers.splice(this.handlers.indexOf(fnc), 1);\r\n } else {\r\n // TODO? throw exception?\r\n console.warn(\"handler not found in EventHandler.unSubscribe\");\r\n }\r\n }\r\n}\r\n","import { jQueryReplacement } from '../../core/jq'\r\nimport { Slick } from '../slick.core'\r\n\r\n\r\nlet $ = jQueryReplacement;\r\n\r\n// register namespace\r\n$.deepExtend(window, {\r\n\"Slick\": {\r\n \"RowSelectionModel\": RowSelectionModel\r\n}\r\n});\r\n\r\n export function RowSelectionModel(options?: any) {\r\n var _grid;\r\n var _ranges = [];\r\n var _self = this;\r\n var _handler = new Slick.EventHandler();\r\n var _inHandler;\r\n var _options;\r\n var _defaults = {\r\n selectActiveRow: true\r\n };\r\n\r\n function init(grid) {\r\n _options = $.deepExtend({}, _defaults, options);\r\n _grid = grid;\r\n _handler.subscribe(_grid.onActiveCellChanged,\r\n wrapHandler(handleActiveCellChange));\r\n _handler.subscribe(_grid.onKeyDown,\r\n wrapHandler(handleKeyDown));\r\n _handler.subscribe(_grid.onClick,\r\n wrapHandler(handleClick));\r\n }\r\n\r\n function destroy() {\r\n _handler.unsubscribeAll();\r\n }\r\n\r\n function wrapHandler(handler) {\r\n return function () {\r\n if (!_inHandler) {\r\n _inHandler = true;\r\n handler.apply(this, arguments);\r\n _inHandler = false;\r\n }\r\n };\r\n }\r\n\r\n function rangesToRows(ranges) {\r\n var rows = [];\r\n for (var i = 0; i < ranges.length; i++) {\r\n for (var j = ranges[i].fromRow; j <= ranges[i].toRow; j++) {\r\n rows.push(j);\r\n }\r\n }\r\n return rows;\r\n }\r\n\r\n function rowsToRanges(rows) {\r\n var ranges = [];\r\n var lastCell = _grid.getColumns().length - 1;\r\n for (var i = 0; i < rows.length; i++) {\r\n ranges.push(new Slick.Range(rows[i], 0, rows[i], lastCell));\r\n }\r\n return ranges;\r\n }\r\n\r\n function getRowsRange(from, to) {\r\n var i, rows = [];\r\n for (i = from; i <= to; i++) {\r\n rows.push(i);\r\n }\r\n for (i = to; i < from; i++) {\r\n rows.push(i);\r\n }\r\n return rows;\r\n }\r\n\r\n function getSelectedRows() {\r\n return rangesToRows(_ranges);\r\n }\r\n\r\n function setSelectedRows(rows) {\r\n setSelectedRanges(rowsToRanges(rows));\r\n }\r\n\r\n function setSelectedRanges(ranges) {\r\n // simple check for: empty selection didn't change, prevent firing onSelectedRangesChanged\r\n if ((!_ranges || _ranges.length === 0) && (!ranges || ranges.length === 0)) { return; }\r\n _ranges = ranges;\r\n _self.onSelectedRangesChanged.notify(_ranges);\r\n }\r\n\r\n function getSelectedRanges() {\r\n return _ranges;\r\n }\r\n\r\n function handleActiveCellChange(e, data) {\r\n if (_options.selectActiveRow && data.row != null) {\r\n setSelectedRanges([new Slick.Range(data.row, 0, data.row, _grid.getColumns().length - 1)]);\r\n }\r\n }\r\n\r\n function handleKeyDown(e) {\r\n var activeRow = _grid.getActiveCell();\r\n if (_grid.getOptions().multiSelect && activeRow \r\n && e.shiftKey && !e.ctrlKey && !e.altKey && !e.metaKey \r\n && (e.which == Slick.keyCode.UP || e.which == Slick.keyCode.DOWN)) {\r\n var selectedRows = getSelectedRows();\r\n selectedRows.sort(function (x, y) {\r\n return x - y\r\n });\r\n\r\n if (!selectedRows.length) {\r\n selectedRows = [activeRow.row];\r\n }\r\n\r\n var top = selectedRows[0];\r\n var bottom = selectedRows[selectedRows.length - 1];\r\n var active;\r\n\r\n if (e.which == Slick.keyCode.DOWN) {\r\n active = activeRow.row < bottom || top == bottom ? ++bottom : ++top;\r\n } else {\r\n active = activeRow.row < bottom ? --bottom : --top;\r\n }\r\n\r\n if (active >= 0 && active < _grid.getDataLength()) {\r\n _grid.scrollRowIntoView(active);\r\n var tempRanges = rowsToRanges(getRowsRange(top, bottom));\r\n setSelectedRanges(tempRanges);\r\n }\r\n\r\n e.preventDefault();\r\n e.stopPropagation();\r\n }\r\n }\r\n\r\n function handleClick(e) {\r\n var cell = _grid.getCellFromEvent(e);\r\n if (!cell || !_grid.canCellBeActive(cell.row, cell.cell)) {\r\n return false;\r\n }\r\n\r\n if (!_grid.getOptions().multiSelect || (\r\n !e.ctrlKey && !e.shiftKey && !e.metaKey)) {\r\n return false;\r\n }\r\n\r\n var selection = rangesToRows(_ranges);\r\n var idx = selection.indexOf(cell.row);\r\n //var idx = $.inArray(cell.row, selection);\r\n\r\n if (idx === -1 && (e.ctrlKey || e.metaKey)) {\r\n selection.push(cell.row);\r\n _grid.setActiveCell(cell.row, cell.cell);\r\n } else if (idx !== -1 && (e.ctrlKey || e.metaKey)) {\r\n selection = selection.filter(function (o, i) {\r\n return (o !== cell.row);\r\n });\r\n _grid.setActiveCell(cell.row, cell.cell);\r\n } else if (selection.length && e.shiftKey) {\r\n var last = selection.pop();\r\n var from = Math.min(cell.row, last);\r\n var to = Math.max(cell.row, last);\r\n selection = [];\r\n for (var i = from; i <= to; i++) {\r\n if (i !== last) {\r\n selection.push(i);\r\n }\r\n }\r\n selection.push(last);\r\n _grid.setActiveCell(cell.row, cell.cell);\r\n }\r\n\r\n var tempRanges = rowsToRanges(selection);\r\n setSelectedRanges(tempRanges);\r\n e.stopImmediatePropagation();\r\n\r\n return true;\r\n }\r\n\r\n $.shallowExtend(this, {\r\n \"getSelectedRows\": getSelectedRows,\r\n \"setSelectedRows\": setSelectedRows,\r\n\r\n \"getSelectedRanges\": getSelectedRanges,\r\n \"setSelectedRanges\": setSelectedRanges,\r\n\r\n \"init\": init,\r\n \"destroy\": destroy,\r\n \"pluginName\": \"RowSelectionModel\",\r\n\r\n \"onSelectedRangesChanged\": new Slick.Event()\r\n });\r\n }\r\n","import { jQueryReplacement } from \"../core/jq\";\r\nimport { Slick, ISlickEvent } from \"./slick.core\";\r\n\r\nexport interface IRefreshHint {\r\n isFilterNarrowing?: boolean;\r\n isFilterExpanding?: boolean;\r\n isFilterUnchanged?: boolean;\r\n ignoreDiffsBefore?: number;\r\n ignoreDiffsAfter?: number;\r\n}\r\n\r\nexport interface IGroupInfo {\r\n value: any;\r\n count: number;\r\n rows: any[];\r\n selectChecked: boolean;\r\n groupingKey: string;\r\n level: number;\r\n}\r\n\r\nexport interface IGroupingInfo {\r\n getter: string;\r\n formatter: (g: IGroupInfo) => string;\r\n comparer?: (a, b) => number;\r\n predefinedValues?: any[];\r\n aggregators: any[];\r\n aggregateEmpty?: boolean;\r\n aggregateCollapsed?: boolean;\r\n aggregateChildGroups?: boolean;\r\n collapsed?: boolean;\r\n displayTotalsRow?: boolean;\r\n lazyTotalsCalculation?: boolean;\r\n}\r\n\r\n\r\nconst $ = jQueryReplacement;\r\n\r\nexport interface ISlickDataView<T> {\r\n onRowsChanged: ISlickEvent<any>; // TODO\r\n onRowCountChanged: ISlickEvent<any>;\r\n setGrouping: (groupInfo: IGroupingInfo | IGroupingInfo[]) => void;\r\n getGrouping: () => IGroupingInfo;\r\n refresh: () => void;\r\n sort: (comparer, ascending: boolean) => void;\r\n updateItem: (id: any, item: T) => void;\r\n getRowByItem: (item: T) => number;\r\n getRowById: (id: any) => number;\r\n getItemById: (id: any) => T;\r\n getIdxById: (id: any) => number;\r\n getIdxByItem: (item: T) => number;\r\n getItemByIdx: (idx: number) => T;\r\n getItem: (row: number) => T;\r\n setFilterArgs: (args: any) => void;\r\n setFilter: (filter: (item: T, args: any) => boolean) => void;\r\n beginUpdate(): void;\r\n endUpdate(): void;\r\n setItems(data, objectIdProperty?): void;\r\n\r\n addItem(item: T): void;\r\n collapseAllGroups: (level?: number) => void;\r\n expandAllGroups: (level?: number) => void;\r\n collapseGroup: (...params: string[]) => void;\r\n expandGroup: (...params: string[]) => void;\r\n getFilteredItems: () => T[];\r\n getGroups: () => any; //TODO: type\r\n syncGridSelection: (grid: any, preserveHidden?: boolean, preserveHiddenOnSelectionChange?: boolean) => ISlickEvent<any>;\r\n insertItem: (insertBefore: number, item: T) => void;\r\n deleteItem: (id: any) => void;\r\n\r\n // // methods\r\n // \"setPagingOptions\": setPagingOptions,\r\n // \"getPagingInfo\": getPagingInfo,\r\n // \"getItems\": getItems,\r\n // \"setFilter\": setFilter,\r\n // \"getFilter\": getFilter,\r\n // \"reSort\": reSort,\r\n // \"groupBy\": groupBy,\r\n // \"setAggregators\": setAggregators,\r\n\r\n\r\n // \"mapItemsToRows\": mapItemsToRows,\r\n // \"mapRowsToIds\": mapRowsToIds,\r\n // \"mapIdsToRows\": mapIdsToRows,\r\n // \"setRefreshHints\": setRefreshHints,\r\n // \"setFilterArgs\": setFilterArgs,\r\n // \"refresh\": refresh,\r\n // \"sortedAddItem\": sortedAddItem,\r\n // \"sortedUpdateItem\": sortedUpdateItem,\r\n // \"syncGridSelection\": syncGridSelection,\r\n // \"syncGridCellCssStyles\": syncGridCellCssStyles,\r\n\r\n // // data provider methods\r\n // \"getLength\": getLength,\r\n // \"getItemMetadata\": getItemMetadata,\r\n\r\n // // events\r\n // \"onRowsOrCountChanged\": onRowsOrCountChanged,\r\n // \"onPagingInfoChanged\": onPagingInfoChanged\r\n}\r\n\r\n\r\n/***\r\n * A sample Model implementation.\r\n * Provides a filtered view of the underlying data.\r\n *\r\n * Relies on the data item having an \"id\" property uniquely identifying it.\r\n */\r\nexport function DataView(options?) {\r\n let self = this;\r\n\r\n let defaults = {\r\n groupItemMetadataProvider: null,\r\n inlineFilters: false\r\n };\r\n\r\n\r\n // private\r\n let idProperty = \"id\"; // property holding a unique row id\r\n let items = []; // data by index\r\n let rows = []; // data by row\r\n let idxById = {}; // indexes by id\r\n let rowsById = null; // rows by id; lazy-calculated\r\n let filter = null; // filter function\r\n let updated = null; // updated item ids\r\n let suspend = false; // suspends the recalculation\r\n let sortAsc = true;\r\n // var fastSortField;\r\n let sortComparer;\r\n let refreshHints: IRefreshHint = {};\r\n let prevRefreshHints: IRefreshHint = {};\r\n let filterArgs;\r\n let filteredItems = [];\r\n // let compiledFilter;\r\n // let compiledFilterWithCaching;\r\n let filterCache = [];\r\n\r\n // grouping\r\n let groupingInfoDefaults = {\r\n getter: null,\r\n formatter: null,\r\n comparer (a, b) {\r\n return (a.value === b.value ? 0 :\r\n (a.value > b.value ? 1 : -1)\r\n );\r\n },\r\n predefinedValues: [],\r\n aggregators: [],\r\n aggregateEmpty: false,\r\n aggregateCollapsed: false,\r\n aggregateChildGroups: false,\r\n collapsed: false,\r\n displayTotalsRow: true,\r\n lazyTotalsCalculation: false\r\n };\r\n let groupingInfos = [];\r\n let groups = [];\r\n let toggledGroupsByLevel = [];\r\n let groupingDelimiter = \":|:\";\r\n\r\n let pagesize = 0;\r\n let pagenum = 0;\r\n let totalRows = 0;\r\n\r\n // events\r\n let onRowCountChanged = new Slick.Event();\r\n let onRowsChanged = new Slick.Event();\r\n let onRowsOrCountChanged = new Slick.Event();\r\n let onPagingInfoChanged = new Slick.Event();\r\n\r\n options = $.deepExtend({}, defaults, options);\r\n\r\n\r\n function beginUpdate() {\r\n suspend = true;\r\n }\r\n\r\n function endUpdate() {\r\n suspend = false;\r\n refresh();\r\n }\r\n\r\n function setRefreshHints(hints) {\r\n refreshHints = hints;\r\n }\r\n\r\n function setFilterArgs(args) {\r\n filterArgs = args;\r\n }\r\n\r\n function updateIdxById(startingIndex?: number) {\r\n startingIndex = startingIndex || 0;\r\n let id;\r\n for (let i = startingIndex, l = items.length; i < l; i++) {\r\n id = items[i][idProperty];\r\n if (id === undefined) {\r\n // throw new Error(\"Each data element must implement a unique 'id' property\");\r\n throw new Error(\"Id (\" + idProperty + \") of element at index \" + i + \" was undefined\");\r\n }\r\n idxById[id] = i;\r\n }\r\n }\r\n\r\n function ensureIdUniqueness() {\r\n let id;\r\n for (let i = 0, l = items.length; i < l; i++) {\r\n id = items[i][idProperty];\r\n if (id === undefined) {\r\n throw new Error(\"Id (\" + idProperty + \") of element at index \" + i + \" was undefined\");\r\n } else if (idxById[id] !== i) {\r\n throw new Error(\"Duplicate id (\" + idProperty + \") for \" + id + \" found at index (\" + idxById[id] + \", \" + i + \")\");\r\n }\r\n }\r\n }\r\n\r\n function getItems() {\r\n return items;\r\n }\r\n\r\n function setItems(data, objectIdProperty) {\r\n if (objectIdProperty !== undefined) {\r\n idProperty = objectIdProperty;\r\n }\r\n items = filteredItems = data;\r\n idxById = {};\r\n updateIdxById();\r\n ensureIdUniqueness();\r\n refresh();\r\n }\r\n\r\n function setPagingOptions(args) {\r\n if (args.pageSize != undefined) {\r\n pagesize = args.pageSize;\r\n pagenum = pagesize ? Math.min(pagenum, Math.max(0, Math.ceil(totalRows / pagesize) - 1)) : 0;\r\n }\r\n\r\n if (args.pageNum != undefined) {\r\n pagenum = Math.min(args.pageNum, Math.max(0, Math.ceil(totalRows / pagesize) - 1));\r\n }\r\n\r\n onPagingInfoChanged.notify(getPagingInfo(), null, self);\r\n\r\n refresh();\r\n }\r\n\r\n function getPagingInfo() {\r\n let totalPages = pagesize ? Math.max(1, Math.ceil(totalRows / pagesize)) : 1;\r\n return { pageSize: pagesize, pageNum: pagenum, totalRows, totalPages, dataView: self };\r\n }\r\n\r\n function sort(comparer, ascending) {\r\n sortAsc = ascending;\r\n sortComparer = comparer;\r\n // fastSortField = null;\r\n if (ascending === false) {\r\n items.reverse();\r\n }\r\n items.sort(comparer);\r\n if (ascending === false) {\r\n items.reverse();\r\n }\r\n idxById = {};\r\n updateIdxById();\r\n refresh();\r\n }\r\n\r\n\r\n function reSort() {\r\n if (sortComparer) {\r\n sort(sortComparer, sortAsc);\r\n }\r\n }\r\n\r\n function getFilteredItems() {\r\n return filteredItems;\r\n }\r\n\r\n\r\n function getFilter() {\r\n return filter;\r\n }\r\n\r\n function setFilter(filterFn) {\r\n filter = filterFn;\r\n // if (options.inlineFilters) {\r\n // compiledFilter = compileFilter();\r\n // compiledFilterWithCaching = compileFilterWithCaching();\r\n // }\r\n refresh();\r\n }\r\n\r\n function getGrouping() {\r\n return groupingInfos;\r\n }\r\n\r\n function setGrouping(groupingInfo) {\r\n if (!options.groupItemMetadataProvider) {\r\n options.groupItemMetadataProvider = new ( Slick as any).Data.GroupItemMetadataProvider();\r\n }\r\n\r\n groups = [];\r\n toggledGroupsByLevel = [];\r\n groupingInfo = groupingInfo || [];\r\n groupingInfos = (groupingInfo instanceof Array) ? groupingInfo : [groupingInfo];\r\n\r\n for (let i = 0; i < groupingInfos.length; i++) {\r\n const gi = groupingInfos[i] = $.deepExtend({}, groupingInfoDefaults, groupingInfos[i]);\r\n gi.getterIsAFn = typeof gi.getter === \"function\";\r\n\r\n // pre-compile accumulator loops\r\n gi.compiledAccumulators = [];\r\n let idx = gi.aggregators.length;\r\n while (idx--) {\r\n gi.compiledAccumulators[idx] = compileAccumulatorLoop(gi.aggregators[idx]);\r\n }\r\n\r\n toggledGroupsByLevel[i] = {};\r\n }\r\n\r\n refresh();\r\n }\r\n\r\n /**\r\n * @deprecated Please use {@link setGrouping}.\r\n */\r\n function groupBy(valueGetter, valueFormatter, sortComparer) {\r\n if (valueGetter == null) {\r\n setGrouping([]);\r\n return;\r\n }\r\n\r\n setGrouping({\r\n getter: valueGetter,\r\n formatter: valueFormatter,\r\n comparer: sortComparer\r\n });\r\n }\r\n\r\n /**\r\n * @deprecated Please use {@link setGrouping}.\r\n */\r\n function setAggregators(groupAggregators, includeCollapsed) {\r\n if (!groupingInfos.length) {\r\n throw new Error(\"At least one grouping must be specified before calling setAggregators().\");\r\n }\r\n\r\n groupingInfos[0].aggregators = groupAggregators;\r\n groupingInfos[0].aggregateCollapsed = includeCollapsed;\r\n\r\n setGrouping(groupingInfos);\r\n }\r\n\r\n function getItemByIdx(i) {\r\n return items[i];\r\n }\r\n\r\n function getIdxById(id) {\r\n return idxById[id];\r\n }\r\n\r\n function getIdxByItem(item) {\r\n return idxById[item[idProperty]];\r\n }\r\n\r\n function ensureRowsByIdCache() {\r\n if (!rowsById) {\r\n rowsById = {};\r\n for (let i = 0, l = rows.length; i < l; i++) {\r\n rowsById[rows[i][idProperty]] = i;\r\n }\r\n }\r\n }\r\n\r\n function getRowByItem(item) {\r\n ensureRowsByIdCache();\r\n return rowsById[item[idProperty]];\r\n }\r\n\r\n function getRowById(id) {\r\n ensureRowsByIdCache();\r\n return rowsById[id];\r\n }\r\n\r\n function getItemById(id) {\r\n return items[idxById[id]];\r\n }\r\n\r\n function mapItemsToRows(itemArray) {\r\n let rows = [];\r\n ensureRowsByIdCache();\r\n for (let i = 0, l = itemArray.length; i < l; i++) {\r\n let row = rowsById[itemArray[i][idProperty]];\r\n if (row != null) {\r\n rows[rows.length] = row;\r\n }\r\n }\r\n return rows;\r\n }\r\n\r\n function mapIdsToRows(idArray) {\r\n let rows = [];\r\n ensureRowsByIdCache();\r\n for (let i = 0, l = idArray.length; i < l; i++) {\r\n let row = rowsById[idArray[i]];\r\n if (row != null) {\r\n rows[rows.length] = row;\r\n }\r\n }\r\n return rows;\r\n }\r\n\r\n function mapRowsToIds(rowArray) {\r\n let ids = [];\r\n for (let i = 0, l = rowArray.length; i < l; i++) {\r\n if (rowArray[i] < rows.length) {\r\n ids[ids.length] = rows[rowArray[i]][idProperty];\r\n }\r\n }\r\n return ids;\r\n }\r\n\r\n function updateItem(id, item) {\r\n // see also https://github.com/mleibman/SlickGrid/issues/1082\r\n if (idxById[id] === undefined) {\r\n throw new Error(\"Invalid id\");\r\n }\r\n\r\n // what if the specified item also has an updated idProperty?\r\n // then we'll have to update the index as well, and possibly the `updated` cache too.\r\n if (id !== item[idProperty]) {\r\n // make sure the new id is unique:\r\n let newId = item[idProperty];\r\n if (newId == null) {\r\n throw new Error(\"Cannot update item to associate with a null id\");\r\n }\r\n if (idxById[newId] !== undefined) {\r\n throw new Error(\"Cannot update item to associate with a non-unique id\");\r\n }\r\n idxById[newId] = idxById[id];\r\n delete idxById[id];\r\n\r\n // also update the `updated` hashtable/markercache? Yes, `recalc()` inside `refresh()` needs that one!\r\n if (updated && updated[id]) {\r\n delete updated[id];\r\n }\r\n\r\n // also update the row indexes? no need since the `refresh()`, further down, blows away the `rowsById[]` cache!\r\n\r\n id = newId;\r\n }\r\n items[idxById[id]] = item;\r\n\r\n // also update the rows? no need since the `refresh()`, further down, blows away the `rows[]` cache and recalculates it via `recalc()`!\r\n\r\n if (!updated) {\r\n updated = {};\r\n }\r\n updated[id] = true;\r\n refresh();\r\n }\r\n\r\n function insertItem(insertBefore, item) {\r\n items.splice(insertBefore, 0, item);\r\n updateIdxById(insertBefore);\r\n refresh();\r\n }\r\n\r\n function addItem(item) {\r\n items.push(item);\r\n updateIdxById(items.length - 1);\r\n refresh();\r\n }\r\n\r\n function deleteItem(id) {\r\n let idx = idxById[id];\r\n if (idx === undefined) {\r\n throw new Error(\"Invalid id\");\r\n }\r\n delete idxById[id];\r\n items.splice(idx, 1);\r\n updateIdxById(idx);\r\n refresh();\r\n }\r\n\r\n function sortedAddItem(item) {\r\n if (!sortComparer) {\r\n throw new Error(\"sortedAddItem() requires a sort comparer, use sort()\");\r\n }\r\n insertItem(sortedIndex(item), item);\r\n }\r\n\r\n function sortedUpdateItem(id, item) {\r\n if (idxById[id] === undefined || id !== item[idProperty]) {\r\n throw new Error(\"Invalid or non-matching id \" + idxById[id]);\r\n }\r\n if (!sortComparer) {\r\n throw new Error(\"sortedUpdateItem() requires a sort comparer, use sort()\");\r\n }\r\n let oldItem = getItemById(id);\r\n if (sortComparer(oldItem, item) !== 0) {\r\n // item affects sorting -> must use sorted add\r\n deleteItem(id);\r\n sortedAddItem(item);\r\n } else { // update does not affect sorting -> regular update works fine\r\n updateItem(id, item);\r\n }\r\n }\r\n\r\n function sortedIndex(searchItem) {\r\n let low = 0, high = items.length;\r\n\r\n while (low < high) {\r\n let mid = low + high >>> 1;\r\n if (sortComparer(items[mid], searchItem) === -1) {\r\n low = mid + 1;\r\n } else {\r\n high = mid;\r\n }\r\n }\r\n return low;\r\n }\r\n\r\n function getLength() {\r\n return rows.length;\r\n }\r\n\r\n function getItem(i) {\r\n let item = rows[i];\r\n\r\n // if this is a group row, make sure totals are calculated and update the title\r\n if (item && item.__group && item.totals && !item.totals.initialized) {\r\n let gi = groupingInfos[item.level];\r\n if (!gi.displayTotalsRow) {\r\n calculateTotals(item.totals);\r\n item.title = gi.formatter ? gi.formatter(item) : item.value;\r\n }\r\n } else if (item && item.__groupTotals && !item.initialized) {\r\n calculateTotals(item);\r\n }\r\n\r\n return item;\r\n }\r\n\r\n function getItemMetadata(i) {\r\n let item = rows[i];\r\n if (item === undefined) {\r\n return null;\r\n }\r\n\r\n // overrides for grouping rows\r\n if (item.__group) {\r\n return options.groupItemMetadataProvider.getGroupRowMetadata(item);\r\n }\r\n\r\n // overrides for totals rows\r\n if (item.__groupTotals) {\r\n return options.groupItemMetadataProvider.getTotalsRowMetadata(item);\r\n }\r\n\r\n if (item.__height) {\r\n if (item.getItemMetadata != null) {\r\n return {height: item.__height, ...(item.getItemMetadata || {})};\r\n }\r\n return { height: item.__height };\r\n }\r\n\r\n return item.getItemMetadata != null ? item.getItemMetadata(i, item) : null;\r\n }\r\n\r\n function expandCollapseAllGroups(level, collapse) {\r\n if (level == null) {\r\n for (let i = 0; i < groupingInfos.length; i++) {\r\n toggledGroupsByLevel[i] = {};\r\n groupingInfos[i].collapsed = collapse;\r\n }\r\n } else {\r\n toggledGroupsByLevel[level] = {};\r\n groupingInfos[level].collapsed = collapse;\r\n }\r\n refresh();\r\n }\r\n\r\n /**\r\n * @param level {Number} Optional level to collapse. If not specified, applies to all levels.\r\n */\r\n function collapseAllGroups(level) {\r\n expandCollapseAllGroups(level, true);\r\n }\r\n\r\n /**\r\n * @param level {Number} Optional level to expand. If not specified, applies to all levels.\r\n */\r\n function expandAllGroups(level) {\r\n expandCollapseAllGroups(level, false);\r\n }\r\n\r\n function expandCollapseGroup(level, groupingKey, collapse) {\r\n toggledGroupsByLevel[level][groupingKey] = groupingInfos[level].collapsed ^ collapse;\r\n refresh();\r\n }\r\n\r\n /**\r\n * @param varArgs Either a Slick.Group's \"groupingKey\" property, or a\r\n * variable argument list of grouping values denoting a unique path to the row. For\r\n * example, calling collapseGroup('high', '10%') will collapse the '10%' subgroup of\r\n * the 'high' group.\r\n */\r\n function collapseGroup(varArgs) {\r\n let args = Array.prototype.slice.call(arguments);\r\n let arg0 = args[0];\r\n if (args.length == 1 && arg0.indexOf(groupingDelimiter) != -1) {\r\n expandCollapseGroup(arg0.split(groupingDelimiter).length - 1, arg0, true);\r\n } else {\r\n expandCollapseGroup(args.length - 1, args.join(groupingDelimiter), true);\r\n }\r\n }\r\n\r\n /**\r\n * @param varArgs Either a Slick.Group's \"groupingKey\" property, or a\r\n * variable argument list of grouping values denoting a unique path to the row. For\r\n * example, calling expandGroup('high', '10%') will expand the '10%' subgroup of\r\n * the 'high' group.\r\n */\r\n function expandGroup(varArgs) {\r\n let args = Array.prototype.slice.call(arguments);\r\n let arg0 = args[0];\r\n if (args.length == 1 && arg0.indexOf(groupingDelimiter) != -1) {\r\n expandCollapseGroup(arg0.split(groupingDelimiter).length - 1, arg0, false);\r\n } else {\r\n expandCollapseGroup(args.length - 1, args.join(groupingDelimiter), false);\r\n }\r\n }\r\n\r\n function getGroups() {\r\n return groups;\r\n }\r\n\r\n function extractGroups(rows, parentGroup?) {\r\n let group;\r\n let val;\r\n let groups = [];\r\n let groupsByVal = {};\r\n let r;\r\n let level = parentGroup ? parentGroup.level + 1 : 0;\r\n let gi = groupingInfos[level];\r\n\r\n for (let i = 0, l = gi.predefinedValues.length; i < l; i++) {\r\n val = gi.predefinedValues[i];\r\n group = groupsByVal[val];\r\n if (!group) {\r\n group = new Slick.Group();\r\n group.value = val;\r\n group.level = level;\r\n group.groupingKey = (parentGroup ? parentGroup.groupingKey + groupingDelimiter : \"\") + val;\r\n groups[groups.length] = group;\r\n groupsByVal[val] = group;\r\n }\r\n }\r\n\r\n for (let i = 0, l = rows.length; i < l; i++) {\r\n r = rows[i];\r\n val = gi.getterIsAFn ? gi.getter(r) : r[gi.getter];\r\n group = groupsByVal[val];\r\n if (!group) {\r\n group = new Slick.Group();\r\n group.value = val;\r\n group.level = level;\r\n group.groupingKey = (parentGroup ? parentGroup.groupingKey + groupingDelimiter : \"\") + val;\r\n groups[groups.length] = group;\r\n groupsByVal[val] = group;\r\n }\r\n\r\n group.rows[group.count++] = r;\r\n }\r\n\r\n if (level < groupingInfos.length - 1) {\r\n for (let i = 0; i < groups.length; i++) {\r\n group = groups[i];\r\n group.groups = extractGroups(group.rows, group);\r\n }\r\n }\r\n\r\n groups.sort(groupingInfos[level].comparer);\r\n\r\n return groups;\r\n }\r\n\r\n function calculateTotals(totals) {\r\n let group = totals.group;\r\n let gi = groupingInfos[group.level];\r\n let isLeafLevel = (group.level == groupingInfos.length);\r\n let agg, idx = gi.aggregators.length;\r\n\r\n if (!isLeafLevel && gi.aggregateChildGroups) {\r\n // make sure all the subgroups are calculated\r\n let i = group.groups.length;\r\n while (i--) {\r\n if (!group.groups[i].totals.initialized) {\r\n calculateTotals(group.groups[i].totals);\r\n }\r\n }\r\n }\r\n\r\n while (idx--) {\r\n agg = gi.aggregators[idx];\r\n agg.init();\r\n if (!isLeafLevel && gi.aggregateChildGroups) {\r\n gi.compiledAccumulators[idx].call(agg, group.groups);\r\n } else {\r\n gi.compiledAccumulators[idx].call(agg, group.rows);\r\n }\r\n agg.storeResult(totals);\r\n }\r\n totals.initialized = true;\r\n }\r\n\r\n function addGroupTotals(group) {\r\n let gi = groupingInfos[group.level];\r\n let totals = new Slick.GroupTotals();\r\n totals.group = group;\r\n group.totals = totals;\r\n if (!gi.lazyTotalsCalculation) {\r\n calculateTotals(totals);\r\n }\r\n }\r\n\r\n function addTotals(groups, level?: number) {\r\n level = level || 0;\r\n let gi = groupingInfos[level];\r\n let groupCollapsed = gi.collapsed;\r\n let toggledGroups = toggledGroupsByLevel[level];\r\n let idx = groups.length, g;\r\n while (idx--) {\r\n g = groups[idx];\r\n\r\n if (g.collapsed && !gi.aggregateCollapsed) {\r\n continue;\r\n }\r\n\r\n // do a depth-first aggregation so that parent group aggregators can access subgroup totals.\r\n if (g.groups) {\r\n addTotals(g.groups, level + 1);\r\n }\r\n\r\n if (gi.aggregators.length && (\r\n gi.aggregateEmpty || g.rows.length || (g.groups && g.groups.length))) {\r\n addGroupTotals(g);\r\n }\r\n\r\n g.collapsed = groupCollapsed ^ toggledGroups[g.groupingKey];\r\n g.title = gi.formatter ? gi.formatter(g) : g.value;\r\n }\r\n }\r\n\r\n function flattenGroupedRows(groups, level?: number) {\r\n level = level || 0;\r\n let gi = groupingInfos[level];\r\n let groupedRows = [], rows, gl = 0, g;\r\n for (let i = 0, l = groups.length; i < l; i++) {\r\n g = groups[i];\r\n groupedRows[gl++] = g;\r\n\r\n if (!g.collapsed) {\r\n rows = g.groups ? flattenGroupedRows(g.groups, level + 1) : g.rows;\r\n for (let j = 0, jj = rows.length; j < jj; j++) {\r\n groupedRows[gl++] = rows[j];\r\n }\r\n }\r\n\r\n if (g.totals && gi.displayTotalsRow && (!g.collapsed || gi.aggregateCollapsed)) {\r\n groupedRows[gl++] = g.totals;\r\n }\r\n }\r\n return groupedRows;\r\n }\r\n\r\n function getFunctionInfo(fn) {\r\n let fnRegex = /^function[^(]*\\(([^)]*)\\)\\s*{([\\s\\S]*)}$/;\r\n let matches = fn.toString().match(fnRegex);\r\n return {\r\n params: matches[1].split(\",\"),\r\n body: matches[2]\r\n };\r\n }\r\n\r\n function compileAccumulatorLoop(aggregator) {\r\n let accumulatorInfo = getFunctionInfo(aggregator.accumulate);\r\n let fn: any = new Function(\r\n \"_items\",\r\n \"for (var \" + accumulatorInfo.params[0] + \", _i=0, _il=_items.length; _i<_il; _i++) {\" +\r\n accumulatorInfo.params[0] + \" = _items[_i]; \" +\r\n accumulatorInfo.body +\r\n \"}\"\r\n );\r\n fn.displayName /*= fn.name*/ = \"compiledAccumulatorLoop\";\r\n return fn;\r\n }\r\n\r\n // function compileFilter() {\r\n // let filterInfo = getFunctionInfo(filter);\r\n\r\n // let filterPath1 = \"{ continue _coreloop; }$1\";\r\n // let filterPath2 = \"{ _retval[_idx++] = $item$; continue _coreloop; }$1\";\r\n // // make some allowances for minification - there's only so far we can go with RegEx\r\n // let filterBody = filterInfo.body\r\n // .replace(/return false\\s*([;}]|\\}|$)/gi, filterPath1)\r\n // .replace(/return!1([;}]|\\}|$)/gi, filterPath1)\r\n // .replace(/return true\\s*([;}]|\\}|$)/gi, filterPath2)\r\n // .replace(/return!0([;}]|\\}|$)/gi, filterPath2)\r\n // .replace(/return ([^;}]+?)\\s*([;}]|$)/gi,\r\n // \"{ if ($1) { _retval[_idx++] = $item$; }; continue _coreloop; }$2\");\r\n\r\n // // This preserves the function template code after JS compression,\r\n // // so that replace() commands still work as expected.\r\n // let tpl = [\r\n // // \"function(_items, _args) { \",\r\n // \"var _retval = [], _idx = 0; \",\r\n // \"var $item$, $args$ = _args; \",\r\n // \"_coreloop: \",\r\n // \"for (var _i = 0, _il = _items.length; _i < _il; _i++) { \",\r\n // \"$item$ = _items[_i]; \",\r\n // \"$filter$; \",\r\n // \"} \",\r\n // \"return _retval; \"\r\n // // \"}\"\r\n // ].join(\"\");\r\n // tpl = tpl.replace(/\\$filter\\$/gi, filterBody);\r\n // tpl = tpl.replace(/\\$item\\$/gi, filterInfo.params[0]);\r\n // tpl = tpl.replace(/\\$args\\$/gi, filterInfo.params[1]);\r\n\r\n // let fn: any = new Function(\"_items,_args\", tpl);\r\n // fn.displayName = /*fn.name =*/ \"compiledFilter\";\r\n // return fn;\r\n // }\r\n\r\n // function compileFilterWithCaching() {\r\n // let filterInfo = getFunctionInfo(filter);\r\n\r\n // let filterPath1 = \"{ continue _coreloop; }$1\";\r\n // let filterPath2 = \"{ _cache[_i] = true;_retval[_idx++] = $item$; continue _coreloop; }$1\";\r\n // // make some allowances for minification - there's only so far we can go with RegEx\r\n // let filterBody = filterInfo.body\r\n // .replace(/return false\\s*([;}]|\\}|$)/gi, filterPath1)\r\n // .replace(/return!1([;}]|\\}|$)/gi, filterPath1)\r\n // .replace(/return true\\s*([;}]|\\}|$)/gi, filterPath2)\r\n // .replace(/return!0([;}]|\\}|$)/gi, filterPath2)\r\n // .replace(/return ([^;}]+?)\\s*([;}]|$)/gi,\r\n // \"{ if ((_cache[_i] = $1)) { _retval[_idx++] = $item$; }; continue _coreloop; }$2\");\r\n\r\n // // This preserves the function template code after JS compression,\r\n // // so that replace() commands still work as expected.\r\n // let tpl = [\r\n // // \"function(_items, _args, _cache) { \",\r\n // \"var _retval = [], _idx = 0; \",\r\n // \"var $item$, $args$ = _args; \",\r\n // \"_coreloop: \",\r\n // \"for (var _i = 0, _il = _items.length; _i < _il; _i++) { \",\r\n // \"$item$ = _items[_i]; \",\r\n // \"if (_cache[_i]) { \",\r\n // \"_retval[_idx++] = $item$; \",\r\n // \"continue _coreloop; \",\r\n // \"} \",\r\n // \"$filter$; \",\r\n // \"} \",\r\n // \"return _retval; \"\r\n // // \"}\"\r\n // ].join(\"\");\r\n // tpl = tpl.replace(/\\$filter\\$/gi, filterBody);\r\n // tpl = tpl.replace(/\\$item\\$/gi, filterInfo.params[0]);\r\n // tpl = tpl.replace(/\\$args\\$/gi, filterInfo.params[1]);\r\n\r\n // let fn: any = new Function(\"_items,_args,_cache\", tpl);\r\n // fn.displayName /*= fn.name*/ = \"compiledFilterWithCaching\";\r\n // return fn;\r\n // }\r\n\r\n function uncompiledFilter(items, args) {\r\n let retval = [], idx = 0;\r\n\r\n for (let i = 0, ii = items.length; i < ii; i++) {\r\n if (filter(items[i], args)) {\r\n retval[idx++] = items[i];\r\n }\r\n }\r\n\r\n return retval;\r\n }\r\n\r\n function uncompiledFilterWithCaching(items, args, cache) {\r\n let retval = [], idx = 0, item;\r\n\r\n for (let i = 0, ii = items.length; i < ii; i++) {\r\n item = items[i];\r\n if (cache[i]) {\r\n retval[idx++] = item;\r\n } else if (filter(item, args)) {\r\n retval[idx++] = item;\r\n cache[i] = true;\r\n }\r\n }\r\n\r\n return retval;\r\n }\r\n\r\n function getFilteredAndPagedItems(items) {\r\n if (filter) {\r\n let batchFilter = uncompiledFilter; // options.inlineFilters ? compiledFilter : uncompiledFilter;\r\n let batchFilterWithCaching = uncompiledFilterWithCaching; // options.inlineFilters ? compiledFilterWithCaching : uncompiledFilterWithCaching;\r\n\r\n if (refreshHints.isFilterNarrowing) {\r\n filteredItems = batchFilter(filteredItems, filterArgs);\r\n } else if (refreshHints.isFilterExpanding) {\r\n filteredItems = batchFilterWithCaching(items, filterArgs, filterCache);\r\n } else if (!refreshHints.isFilterUnchanged) {\r\n filteredItems = batchFilter(items, filterArgs);\r\n }\r\n } else {\r\n // special case: if not filtering and not paging, the resulting\r\n // rows collection needs to be a copy so that changes due to sort\r\n // can be caught\r\n filteredItems = pagesize ? items : items.concat();\r\n }\r\n\r\n // get the current page\r\n let paged;\r\n if (pagesize) {\r\n if (filteredItems.length <= pagenum * pagesize) {\r\n if (filteredItems.length === 0) {\r\n pagenum = 0;\r\n } else {\r\n pagenum = Math.floor((filteredItems.length - 1) / pagesize);\r\n }\r\n }\r\n paged = filteredItems.slice(pagesize * pagenum, pagesize * pagenum + pagesize);\r\n } else {\r\n paged = filteredItems;\r\n }\r\n return { totalRows: filteredItems.length, rows: paged };\r\n }\r\n\r\n function getRowDiffs(rows, newRows) {\r\n let item, r, eitherIsNonData, diff = [];\r\n let from = 0, to = newRows.length;\r\n\r\n if (refreshHints && refreshHints.ignoreDiffsBefore) {\r\n from = Math.max(0,\r\n Math.min(newRows.length, refreshHints.ignoreDiffsBefore));\r\n }\r\n\r\n if (refreshHints && refreshHints.ignoreDiffsAfter) {\r\n to = Math.min(newRows.length,\r\n Math.max(0, refreshHints.ignoreDiffsAfter));\r\n }\r\n\r\n for (let i = from, rl = rows.length; i < to; i++) {\r\n if (i >= rl) {\r\n diff[diff.length] = i;\r\n } else {\r\n item = newRows[i];\r\n r = rows[i];\r\n\r\n if ((groupingInfos.length && (eitherIsNonData = (item.__nonDataRow) || (r.__nonDataRow)) &&\r\n item.__group !== r.__group ||\r\n item.__group && !item.equals(r))\r\n || (eitherIsNonData &&\r\n // no good way to compare totals since they are arbitrary DTOs\r\n // deep object comparison is pretty expensive\r\n // always considering them 'dirty' seems easier for the time being\r\n (item.__groupTotals || r.__groupTotals))\r\n || item[idProperty] != r[idProperty]\r\n || (updated && updated[item[idProperty]])\r\n ) {\r\n diff[diff.length] = i;\r\n }\r\n }\r\n }\r\n return diff;\r\n }\r\n\r\n function recalc(_items, second?) {\r\n rowsById = null;\r\n\r\n if (refreshHints.isFilterNarrowing != prevRefreshHints.isFilterNarrowing ||\r\n refreshHints.isFilterExpanding != prevRefreshHints.isFilterExpanding) {\r\n filterCache = [];\r\n }\r\n\r\n let filteredItems = getFilteredAndPagedItems(_items);\r\n totalRows = filteredItems.totalRows;\r\n let newRows = filteredItems.rows;\r\n\r\n groups = [];\r\n if (groupingInfos.length) {\r\n groups = extractGroups(newRows);\r\n if (groups.length) {\r\n addTotals(groups);\r\n newRows = flattenGroupedRows(groups);\r\n }\r\n }\r\n\r\n let diff = getRowDiffs(rows, newRows);\r\n\r\n rows = newRows;\r\n\r\n return diff;\r\n }\r\n\r\n function refresh() {\r\n if (suspend) {\r\n return;\r\n }\r\n\r\n let countBefore = rows.length;\r\n let totalRowsBefore = totalRows;\r\n\r\n let diff = recalc(items, filter); // pass as direct refs to avoid closure perf hit\r\n\r\n // if the current page is no longer valid, go to last page and recalc\r\n // we suffer a performance penalty here, but the main loop (recalc) remains highly optimized\r\n if (pagesize && totalRows < pagenum * pagesize) {\r\n pagenum = Math.max(0, Math.ceil(totalRows / pagesize) - 1);\r\n diff = recalc(items, filter);\r\n }\r\n\r\n updated = null;\r\n prevRefreshHints = refreshHints;\r\n refreshHints = {};\r\n\r\n if (totalRowsBefore !== totalRows) {\r\n onPagingInfoChanged.notify(getPagingInfo(), null, self);\r\n }\r\n if (countBefore !== rows.length) {\r\n onRowCountChanged.notify({ previous: countBefore, current: rows.length, dataView: self, callingOnRowsChanged: (diff.length > 0) }, null, self);\r\n }\r\n if (diff.length > 0) {\r\n onRowsChanged.notify({ rows: diff, dataView: self, calledOnRowCountChanged: (countBefore !== rows.length) }, null, self);\r\n }\r\n if (countBefore !== rows.length || diff.length > 0) {\r\n onRowsOrCountChanged.notify({\r\n rowsDiff: diff, previousRowCount: countBefore, currentRowCount: rows.length,\r\n rowCountChanged: countBefore !== rows.length, rowsChanged: diff.length > 0, dataView: self\r\n }, null, self);\r\n }\r\n }\r\n\r\n /***\r\n * Wires the grid and the DataView together to keep row selection tied to item ids.\r\n * This is useful since, without it, the grid only knows about rows, so if the items\r\n * move around, the same rows stay selected instead of the selection moving along\r\n * with the items.\r\n *\r\n * NOTE: This doesn't work with cell selection model.\r\n *\r\n * @param grid {Slick.Grid} The grid to sync selection with.\r\n * @param preserveHidden {Boolean} Whether to keep selected items that go out of the\r\n * view due to them getting filtered out.\r\n * @param preserveHiddenOnSelectionChange {Boolean} Whether to keep selected items\r\n * that are currently out of the view (see preserveHidden) as selected when selection\r\n * changes.\r\n * @return {Slick.Event} An event that notifies when an internal list of selected row ids\r\n * changes. This is useful since, in combination with the above two options, it allows\r\n * access to the full list selected row ids, and not just the ones visible to the grid.\r\n * @method syncGridSelection\r\n */\r\n function syncGridSelection(grid, preserveHidden, preserveHiddenOnSelectionChange) {\r\n let self = this;\r\n let inHandler;\r\n let selectedRowIds = self.mapRowsToIds(grid.getSelectedRows());\r\n let onSelectedRowIdsChanged = new Slick.Event();\r\n\r\n function setSelectedRowIds(rowIds) {\r\n if (selectedRowIds.join(\",\") == rowIds.join(\",\")) {\r\n return;\r\n }\r\n\r\n selectedRowIds = rowIds;\r\n\r\n onSelectedRowIdsChanged.notify({\r\n grid: grid,\r\n ids: selectedRowIds,\r\n dataView: self\r\n }, new Slick.EventData(), self);\r\n }\r\n\r\n function update() {\r\n if (selectedRowIds.length > 0) {\r\n inHandler = true;\r\n let selectedRows = self.mapIdsToRows(selectedRowIds);\r\n if (!preserveHidden) {\r\n setSelectedRowIds(self.mapRowsToIds(selectedRows));\r\n }\r\n grid.setSelectedRows(selectedRows);\r\n inHandler = false;\r\n }\r\n }\r\n\r\n grid.onSelectedRowsChanged.subscribe(function(e, args) {\r\n if (inHandler) { return; }\r\n let newSelectedRowIds = self.mapRowsToIds(grid.getSelectedRows());\r\n if (!preserveHiddenOnSelectionChange || !grid.getOptions().multiSelect) {\r\n setSelectedRowIds(newSelectedRowIds);\r\n } else {\r\n // keep the ones that are hidden\r\n let existing = [];\r\n for (let i = 0; i < selectedRowIds.length; i++) {\r\n if (self.getRowById(selectedRowIds[i]) === undefined) {\r\n existing.push(selectedRowIds[i]);\r\n }\r\n }\r\n // $.grep(selectedRowIds, function(id) { return self.getRowById(id) === undefined; });\r\n // add the newly selected ones\r\n setSelectedRowIds(existing.concat(newSelectedRowIds));\r\n }\r\n });\r\n\r\n this.onRowsOrCountChanged.subscribe(update);\r\n\r\n return onSelectedRowIdsChanged;\r\n }\r\n\r\n function syncGridCellCssStyles(grid, key) {\r\n let hashById;\r\n let inHandler;\r\n\r\n // since this method can be called after the cell styles have been set,\r\n // get the existing ones right away\r\n storeCellCssStyles(grid.getCellCssStyles(key));\r\n\r\n function storeCellCssStyles(hash) {\r\n hashById = {};\r\n for (let row in hash) {\r\n let id = rows[row][idProperty];\r\n hashById[id] = hash[row];\r\n }\r\n }\r\n\r\n function update() {\r\n if (hashById) {\r\n inHandler = true;\r\n ensureRowsByIdCache();\r\n let newHash = {};\r\n for (let id in hashById) {\r\n let row = rowsById[id];\r\n if (row != undefined) {\r\n newHash[row] = hashById[id];\r\n }\r\n }\r\n grid.setCellCssStyles(key, newHash);\r\n inHandler = false;\r\n }\r\n }\r\n\r\n grid.onCellCssStylesChanged.subscribe(function(e, args) {\r\n if (inHandler) { return; }\r\n if (key != args.key) { return; }\r\n if (args.hash) {\r\n storeCellCssStyles(args.hash);\r\n } else {\r\n // grid.onCellCssStylesChanged.unsubscribe(styleChanged); //styleChanged not declared\r\n self.onRowsOrCountChanged.unsubscribe(update);\r\n }\r\n });\r\n\r\n this.onRowsOrCountChanged.subscribe(update);\r\n }\r\n\r\n $.shallowExtend(this, {\r\n // methods\r\n beginUpdate: beginUpdate,\r\n endUpdate: endUpdate,\r\n setPagingOptions: setPagingOptions,\r\n getPagingInfo: getPagingInfo,\r\n getItems: getItems,\r\n setItems: setItems,\r\n setFilter: setFilter,\r\n getFilter: getFilter,\r\n getFilteredItems: getFilteredItems,\r\n sort: sort,\r\n // \"fastSort\": fastSort,\r\n reSort: reSort,\r\n setGrouping: setGrouping,\r\n getGrouping: getGrouping,\r\n groupBy: groupBy,\r\n setAggregators: setAggregators,\r\n collapseAllGroups: collapseAllGroups,\r\n expandAllGroups: expandAllGroups,\r\n collapseGroup: collapseGroup,\r\n expandGroup: expandGroup,\r\n getGroups: getGroups,\r\n getIdxById: getIdxById,\r\n getIdxByItem: getIdxByItem,\r\n getRowByItem: getRowByItem,\r\n getRowById: getRowById,\r\n getItemById: getItemById,\r\n getItemByIdx: getItemByIdx,\r\n mapItemsToRows: mapItemsToRows,\r\n mapRowsToIds: mapRowsToIds,\r\n mapIdsToRows: mapIdsToRows,\r\n setRefreshHints: setRefreshHints,\r\n setFilterArgs: setFilterArgs,\r\n refresh: refresh,\r\n updateItem: updateItem,\r\n insertItem: insertItem,\r\n addItem: addItem,\r\n deleteItem: deleteItem,\r\n sortedAddItem: sortedAddItem,\r\n sortedUpdateItem: sortedUpdateItem,\r\n syncGridSelection: syncGridSelection,\r\n syncGridCellCssStyles: syncGridCellCssStyles,\r\n\r\n // data provider methods\r\n getLength: getLength,\r\n getItem: getItem,\r\n getItemMetadata: getItemMetadata,\r\n\r\n // events\r\n onRowCountChanged: onRowCountChanged,\r\n onRowsChanged: onRowsChanged,\r\n onRowsOrCountChanged: onRowsOrCountChanged,\r\n onPagingInfoChanged: onPagingInfoChanged\r\n });\r\n}\r\n\r\nexport function AvgAggregator(field) {\r\n this.field_ = field;\r\n\r\n this.init = function() {\r\n this.count_ = 0;\r\n this.nonNullCount_ = 0;\r\n this.sum_ = 0;\r\n };\r\n\r\n this.accumulate = function(item) {\r\n let val = item[this.field_];\r\n this.count_++;\r\n if (val != null && val !== \"\" && !isNaN(val)) {\r\n this.nonNullCount_++;\r\n this.sum_ += parseFloat(val);\r\n }\r\n };\r\n\r\n this.storeResult = function(groupTotals) {\r\n if (!groupTotals.avg) {\r\n groupTotals.avg = {};\r\n }\r\n if (this.nonNullCount_ != 0) {\r\n groupTotals.avg[this.field_] = this.sum_ / this.nonNullCount_;\r\n }\r\n };\r\n}\r\n\r\nexport function MinAggregator(field) {\r\n this.field_ = field;\r\n\r\n this.init = function() {\r\n this.min_ = null;\r\n };\r\n\r\n this.accumulate = function(item) {\r\n let val = item[this.field_];\r\n if (val != null && val !== \"\" && !isNaN(val)) {\r\n if (this.min_ == null || val < this.min_) {\r\n this.min_ = val;\r\n }\r\n }\r\n };\r\n\r\n this.storeResult = function(groupTotals) {\r\n if (!groupTotals.min) {\r\n groupTotals.min = {};\r\n }\r\n groupTotals.min[this.field_] = this.min_;\r\n };\r\n}\r\n\r\nexport function MaxAggregator(field) {\r\n this.field_ = field;\r\n\r\n this.init = function() {\r\n this.max_ = null;\r\n };\r\n\r\n this.accumulate = function(item) {\r\n let val = item[this.field_];\r\n if (val != null && val !== \"\" && !isNaN(val)) {\r\n if (this.max_ == null || val > this.max_) {\r\n this.max_ = val;\r\n }\r\n }\r\n };\r\n\r\n this.storeResult = function(groupTotals) {\r\n if (!groupTotals.max) {\r\n groupTotals.max = {};\r\n }\r\n groupTotals.max[this.field_] = this.max_;\r\n };\r\n}\r\n\r\nexport function SumAggregator(field) {\r\n this.field_ = field;\r\n\r\n this.init = function() {\r\n this.sum_ = null;\r\n };\r\n\r\n this.accumulate = function(item) {\r\n let val = item[this.field_];\r\n if (val != null && val !== \"\" && !isNaN(val)) {\r\n this.sum_ += parseFloat(val);\r\n }\r\n };\r\n\r\n this.storeResult = function(groupTotals) {\r\n if (!groupTotals.sum) {\r\n groupTotals.sum = {};\r\n }\r\n groupTotals.sum[this.field_] = this.sum_;\r\n };\r\n}\r\n\r\n // tODO: add more built-in aggregators\r\n // tODO: merge common aggregators in one to prevent needles iterating\r\n\r\n","import { jQueryReplacement } from \"../core/jq\";\r\nimport { Slick, ISlickColumn, ISlickFormatterResult} from \"./slick.core\";\r\n\r\n\r\nlet $ = jQueryReplacement;\r\n\r\n$.deepExtend(Slick, {\r\n Data: {\r\n GroupItemMetadataProvider: GroupItemMetadataProvider\r\n }\r\n});\r\n\r\n\r\n /***\r\n * Provides item metadata for group (Slick.Group) and totals (Slick.Totals) rows produced by the DataView.\r\n * This metadata overrides the default behavior and formatting of those rows so that they appear and function\r\n * correctly when processed by the grid.\r\n *\r\n * This class also acts as a grid plugin providing event handlers to expand & collapse groups.\r\n * If \"grid.registerPlugin(...)\" is not called, expand & collapse will not work.\r\n *\r\n * @class GroupItemMetadataProvider\r\n * @module Data\r\n * @namespace Slick.Data\r\n * @constructor\r\n * @param options\r\n */\r\n export function GroupItemMetadataProvider(options?) {\r\n var _grid;\r\n var _defaults = {\r\n checkboxSelect: false,\r\n checkboxSelectCssClass: \"slick-group-select-checkbox\",\r\n checkboxSelectPlugin: null,\r\n groupCssClass: \"slick-group\",\r\n groupTitleCssClass: \"slick-group-title\",\r\n totalsCssClass: \"slick-group-totals\",\r\n groupFocusable: true,\r\n totalsFocusable: false,\r\n toggleCssClass: \"slick-group-toggle\",\r\n toggleExpandedCssClass: \"expanded\",\r\n toggleCollapsedCssClass: \"collapsed\",\r\n enableExpandCollapse: true,\r\n groupFormatter: defaultGroupCellFormatter,\r\n totalsFormatter: defaultTotalsCellFormatter\r\n };\r\n\r\n options = $.deepExtend({}, _defaults, options);\r\n\r\n\r\n function defaultGroupCellFormatter(row, cell, value, columnDef, item, grid) {\r\n if (!options.enableExpandCollapse) {\r\n return item.title;\r\n }\r\n\r\n let indentation = item.level * 15 + \"px\";\r\n\r\n return (options.checkboxSelect ? '<span class=\"' + options.checkboxSelectCssClass +\r\n ' ' + (item.selectChecked ? 'checked' : 'unchecked') + '\"></span>' : '') +\r\n \"<span class='\" + options.toggleCssClass + \" \" +\r\n (item.collapsed ? options.toggleCollapsedCssClass : options.toggleExpandedCssClass) +\r\n \"' style='margin-left:\" + indentation +\"'>\" +\r\n \"</span>\" +\r\n \"<span class='\" + options.groupTitleCssClass + \"' level='\" + item.level + \"'>\" +\r\n item.title +\r\n \"</span>\";\r\n }\r\n\r\n function defaultTotalsCellFormatter(row, cell, value, columnDef: ISlickColumn, item, grid) {\r\n let formatter_res;\r\n if (columnDef.groupTotalsFormatter) {\r\n formatter_res = columnDef.groupTotalsFormatter(item, columnDef, grid) || \"\";\r\n } else {\r\n let res = (item.avg && item.avg[columnDef.field]) \r\n || (item.sum && item.sum[columnDef.field])\r\n || (item.max && item.max[columnDef.field])\r\n || (item.min && item.min[columnDef.field]);\r\n\r\n formatter_res = (columnDef.formatter ? columnDef.formatter(row, cell, res, columnDef, item) : \"\");\r\n }\r\n return formatter_res;\r\n //return (Object.prototype.toString.call(formatter_res) !== '[object Object]' ? (<string>formatter_res) : (<ISlickFormatterResult>formatter_res).text);\r\n }\r\n\r\n\r\n function init(grid) {\r\n _grid = grid;\r\n _grid.onClick.subscribe(handleGridClick);\r\n _grid.onKeyDown.subscribe(handleGridKeyDown);\r\n\r\n }\r\n\r\n function destroy() {\r\n if (_grid) {\r\n _grid.onClick.unsubscribe(handleGridClick);\r\n _grid.onKeyDown.unsubscribe(handleGridKeyDown);\r\n }\r\n }\r\n\r\n function handleGridClick(e, args) {\r\n var $target = $(e.target);\r\n var item = this.getDataItem(args.row);\r\n if (item && item instanceof Slick.Group && $target.hasClass(options.toggleCssClass)) {\r\n var range = _grid.getRenderedRange();\r\n this.dataView.setRefreshHints({\r\n ignoreDiffsBefore: range.top,\r\n ignoreDiffsAfter: range.bottom + 1\r\n });\r\n\r\n if ((<any>item).collapsed) {\r\n this.dataView.expandGroup((<any>item).groupingKey);\r\n } else {\r\n this.dataView.collapseGroup((<any>item).groupingKey);\r\n }\r\n\r\n e.stopImmediatePropagation();\r\n e.preventDefault();\r\n }\r\n if (item && item instanceof Slick.Group && $target.hasClass(options.checkboxSelectCssClass)) {\r\n (<any>item).selectChecked = !(<any>item).selectChecked;\r\n $target.removeClass(((<any>item).selectChecked ? \"unchecked\" : \"checked\"));\r\n $target.addClass(((<any>item).selectChecked ? \"checked\" : \"unchecked\"));\r\n // get rowIndexes array\r\n var rowIndexes = _grid.dataView.mapItemsToRows((<any>item).rows);\r\n ((<any>item).selectChecked ? options.checkboxSelectPlugin.selectRows : options.checkboxSelectPlugin.deSelectRows)(rowIndexes);\r\n }\r\n }\r\n\r\n // TODO: add -/+ handling\r\n function handleGridKeyDown(e, args) {\r\n if (options.enableExpandCollapse && (e.which == Slick.keyCode.SPACE)) {\r\n var activeCell = this.getActiveCell();\r\n if (activeCell) {\r\n var item = this.getDataItem(activeCell.row);\r\n if (item && item instanceof Slick.Group) {\r\n var range = _grid.getRenderedRange();\r\n this.dataView.setRefreshHints({\r\n ignoreDiffsBefore: range.top,\r\n ignoreDiffsAfter: range.bottom + 1\r\n });\r\n\r\n if ((<any>item).collapsed) {\r\n this.dataView.expandGroup((<any>item).groupingKey);\r\n } else {\r\n this.dataView.collapseGroup((<any>item).groupingKey);\r\n }\r\n\r\n e.stopImmediatePropagation();\r\n e.preventDefault();\r\n }\r\n }\r\n }\r\n }\r\n\r\n function getGroupRowMetadata(item) {\r\n return {\r\n selectable: false,\r\n focusable: options.groupFocusable,\r\n cssClasses: options.groupCssClass,\r\n columns: {\r\n 0: {\r\n colspan: \"*\",\r\n formatter: options.groupFormatter,\r\n editor: null\r\n }\r\n },\r\n height: options.calcGroupHeight ? options.calcGroupHeight(item) : undefined\r\n };\r\n }\r\n\r\n function getTotalsRowMetadata(item) {\r\n return {\r\n selectable: false,\r\n focusable: options.totalsFocusable,\r\n cssClasses: options.totalsCssClass,\r\n formatter: options.totalsFormatter,\r\n editor: null,\r\n height: options.calcTotalsHeight ? options.calcTotalsHeight(item) : undefined\r\n };\r\n }\r\n\r\n\r\n return {\r\n \"init\": init,\r\n \"destroy\": destroy,\r\n \"getGroupRowMetadata\": getGroupRowMetadata,\r\n \"getTotalsRowMetadata\": getTotalsRowMetadata\r\n };\r\n }\r\n","import { jQueryReplacement, IjQueryWrapper } from \"../../core/jq\";\r\nimport { Slick } from \"../slick.core\";\r\nimport './slick.headermenu.css'\r\n\r\n\r\nlet $ = jQueryReplacement;\r\n\r\n // register namespace\r\n $.deepExtend(window, {\r\n \"Slick\": {\r\n \"Plugins\": {\r\n \"HeaderMenu\": HeaderMenu\r\n }\r\n }\r\n });\r\n\r\n /***\r\n * A plugin to add drop-down menus to column headers.\r\n *\r\n * USAGE:\r\n *\r\n * Add the plugin .js & .css files and register it with the grid.\r\n *\r\n * To specify a menu in a column header, extend the column definition like so:\r\n *\r\n * var columns = [\r\n * {\r\n * id: 'myColumn',\r\n * name: 'My column',\r\n *\r\n * // This is the relevant part\r\n * header: {\r\n * menu: {\r\n * items: [\r\n * {\r\n * // menu item options\r\n * },\r\n * {\r\n * // menu item options\r\n * }\r\n * ]\r\n * }\r\n * }\r\n * }\r\n * ];\r\n *\r\n *\r\n * Available menu options:\r\n * tooltip: Menu button tooltip.\r\n *\r\n *\r\n * Available menu item options:\r\n * title: Menu item text.\r\n * divider: Whether the current item is a divider, not an actual command.\r\n * disabled: Whether the item is disabled.\r\n * tooltip: Item tooltip.\r\n * command: A command identifier to be passed to the onCommand event handlers.\r\n * iconCssClass: A CSS class to be added to the menu item icon.\r\n * iconImage: A url to the icon image.\r\n * minWidth: Minimum width that the drop menu will have\r\n * autoAlign: Auto-align drop menu to the left when not enough viewport space to show on the right\r\n * autoAlignOffset: When drop menu is aligned to the left, it might not be perfectly aligned with the header menu icon, if that is the case you can add an offset (positive/negative number to move right/left)\r\n *\r\n *\r\n * The plugin exposes the following events:\r\n * onBeforeMenuShow: Fired before the menu is shown. You can customize the menu or dismiss it by returning false.\r\n * Event args:\r\n * grid: Reference to the grid.\r\n * column: Column definition.\r\n * menu: Menu options. Note that you can change the menu items here.\r\n *\r\n * onCommand: Fired on menu item click for buttons with 'command' specified.\r\n * Event args:\r\n * grid: Reference to the grid.\r\n * column: Column definition.\r\n * command: Button command identified.\r\n * button: Button options. Note that you can change the button options in your\r\n * event handler, and the column header will be automatically updated to\r\n * reflect them. This is useful if you want to implement something like a\r\n * toggle button.\r\n *\r\n *\r\n * @param options {Object} Options:\r\n * buttonCssClass: an extra CSS class to add to the menu button\r\n * buttonImage: a url to the menu button image (default '../images/down.gif')\r\n * @class Slick.Plugins.HeaderButtons\r\n * @constructor\r\n */\r\n export function HeaderMenu(options) {\r\n var _grid;\r\n var _self = this;\r\n var _handler = new Slick.EventHandler();\r\n var _defaults = {\r\n buttonCssClass: null,\r\n buttonImage: null,\r\n minWidth: 100,\r\n autoAlign: true,\r\n autoAlignOffset: 0\r\n };\r\n var $menu: IjQueryWrapper;\r\n var $activeHeaderColumn: IjQueryWrapper;\r\n\r\n\r\n function init(grid) {\r\n options = $.deepExtend({}, _defaults, options);\r\n _grid = grid;\r\n _handler\r\n .subscribe(_grid.onHeaderCellRendered, handleHeaderCellRendered)\r\n .subscribe(_grid.onBeforeHeaderCellDestroy, handleBeforeHeaderCellDestroy);\r\n\r\n // Force the grid to re-render the header now that the events are hooked up.\r\n //_grid.setColumns(_grid.getColumns()); //TODO TODOFIX try to optimize this\r\n\r\n // Hide the menu on outside click.\r\n $(document.body).on(\"mousedown\", handleBodyMouseDown);\r\n }\r\n\r\n function setOptions(newOptions) {\r\n options = $.deepExtend({}, options, newOptions);\r\n }\r\n\r\n\r\n function destroy() {\r\n _handler.unsubscribeAll();\r\n document.body.removeEventListener(\"mousedown\", handleBodyMouseDown);\r\n //$(document.body).off(\"mousedown\", handleBodyMouseDown);\r\n }\r\n\r\n\r\n function handleBodyMouseDown(e) {\r\n if ($menu && $(e.target).closestClass(\"slick-header-menu\").length === 0) { //!$.contains($menu[0], e.target)) {\r\n hideMenu();\r\n }\r\n }\r\n\r\n\r\n function hideMenu() {\r\n if ($menu) {\r\n $menu.remove();\r\n $menu = null;\r\n $activeHeaderColumn\r\n .removeClass(\"slick-header-column-active\");\r\n }\r\n }\r\n\r\n function handleHeaderCellRendered(e, args) {\r\n var column = args.column;\r\n var menu = $.deepExtend({}, (column.header && column.header.menu) || {items:[]});\r\n\r\n if (!column.hideMenu) {\r\n var $el:IjQueryWrapper = $(\"<div></div>\")\r\n .addClass(\"slick-header-menubutton\")\r\n .data(\"column\", column)\r\n .data(\"menu\", menu);\r\n if (column.resizable) {\r\n $el.addClass(\"resize-offset\");\r\n }\r\n\r\n if (options.buttonCssClass) {\r\n $el.addClass(options.buttonCssClass);\r\n }\r\n\r\n if (options.buttonImage) {\r\n $el.css(\"background-image\", \"url(\" + options.buttonImage + \")\");\r\n }\r\n\r\n if (menu.tooltip) {\r\n $el.attr(\"title\", menu.tooltip);\r\n }\r\n\r\n $el\r\n .on(\"click\", showMenu)\r\n .appendTo(args.node);\r\n }\r\n }\r\n\r\n\r\n function handleBeforeHeaderCellDestroy(e, args) {\r\n var column = args.column;\r\n\r\n if (column.header && column.header.menu) {\r\n $(args.node).find(\".slick-header-menubutton\").remove();\r\n }\r\n }\r\n\r\n\r\n function showMenu(e) {\r\n var $menuButton: IjQueryWrapper = $(e.target);\r\n var menu = $.deepExtend({}, $menuButton.data(\"menu\"));\r\n var columnDef = $menuButton.data(\"column\");\r\n\r\n // Let the user modify the menu or cancel altogether,\r\n // or provide alternative menu implementation.\r\n if (_self.onBeforeMenuShow.notify({\r\n \"grid\": _grid,\r\n \"column\": columnDef,\r\n \"menu\": menu\r\n }, e, _self) == false) {\r\n return;\r\n }\r\n\r\n\r\n if (!$menu) {\r\n $menu = $(\"<div class='slick-header-menu' style='min-width: \" + options.minWidth + \"px'></div>\")\r\n .appendTo(_grid.getContainerNode());\r\n }\r\n $menu.empty();\r\n\r\n\r\n // Construct the menu items.\r\n for (var i = 0; i < menu.items.length; i++) {\r\n var item = menu.items[i];\r\n\r\n var $li = $(\"<div class='slick-header-menuitem'></div>\")\r\n .data(\"command\", item.command || '')\r\n .data(\"column\", columnDef)\r\n .data(\"item\", item)\r\n .on(\"click\", handleMenuItemClick)\r\n .appendTo($menu);\r\n\r\n if (item.disabled) {\r\n $li.addClass(\"slick-header-menuitem-disabled\");\r\n }\r\n\r\n if (item.divider) {\r\n $li.addClass(\"slick-header-menuitem-divider\");\r\n continue;\r\n }\r\n\r\n if (item.tooltip) {\r\n $li.attr(\"title\", item.tooltip);\r\n }\r\n\r\n var $icon = $(\"<div class='slick-header-menuicon'></div>\")\r\n .appendTo($li);\r\n\r\n if (item.iconCssClass) {\r\n $icon.addClass(item.iconCssClass);\r\n }\r\n\r\n if (item.iconImage) {\r\n $icon.css(\"background-image\", \"url(\" + item.iconImage + \")\");\r\n }\r\n\r\n $(\"<span class='slick-header-menucontent'></span>\")\r\n .text(item.title)\r\n .appendTo($li);\r\n }\r\n\r\n var leftPos = $menuButton.offset().left;\r\n\r\n // when auto-align is set, it will calculate whether it has enough space in the viewport to show the drop menu on the right (default)\r\n // if there isn't enough space on the right, it will automatically align the drop menu to the left\r\n // to simulate an align left, we actually need to know the width of the drop menu\r\n if (options.autoAlign) {\r\n var gridPos = _grid.getGridPosition();\r\n if ((leftPos + options.minWidth) >= gridPos.width) {\r\n leftPos = leftPos - options.minWidth + options.autoAlignOffset;\r\n }\r\n }\r\n\r\n //$menu\r\n // .offset({ top: $menuButton.offset().top + $menuButton.height(), left: leftPos });\r\n $menu[0].style.top = (/*$menuButton.offset().top +*/ $menuButton.height() as number) + \"px\";\r\n $menu[0].style.left = (leftPos - $(_grid.getContainerNode()).offset().left) + \"px\";\r\n\r\n // Mark the header as active to keep the highlighting.\r\n $activeHeaderColumn = $menuButton.closestClass(\".slick-header-column\");\r\n $activeHeaderColumn\r\n .addClass(\"slick-header-column-active\");\r\n\r\n // Stop propagation so that it doesn't register as a header click event.\r\n e.preventDefault();\r\n e.stopPropagation();\r\n }\r\n\r\n\r\n function handleMenuItemClick(e) {\r\n var command = $(e.currentTarget).data(\"command\");\r\n var columnDef = $(e.currentTarget).data(\"column\");\r\n var item = $(e.currentTarget).data(\"item\");\r\n\r\n if (item.disabled || item.divider) {\r\n return;\r\n }\r\n\r\n hideMenu();\r\n\r\n if (command != null && command != '') {\r\n _self.onCommand.notify({\r\n \"grid\": _grid,\r\n \"column\": columnDef,\r\n \"command\": command,\r\n \"item\": item\r\n }, e, _self);\r\n }\r\n\r\n // Stop propagation so that it doesn't register as a header click event.\r\n e.preventDefault();\r\n e.stopPropagation();\r\n }\r\n\r\n $.shallowExtend(this, {\r\n \"init\": init,\r\n \"destroy\": destroy,\r\n \"pluginName\": \"HeaderMenu\",\r\n \"setOptions\": setOptions,\r\n\r\n \"onBeforeMenuShow\": new Slick.Event(),\r\n \"onCommand\": new Slick.Event()\r\n });\r\n }\r\n","import \"./slick.headerbuttons.css\";\r\nimport { Slick } from \"../slick.core\";\r\nimport { jQueryReplacement } from \"../../core/jq\";\r\n\r\nlet $ = jQueryReplacement;\r\n\r\n// register namespace\r\n$.deepExtend(window, {\r\n \"Slick\": {\r\n \"Plugins\": {\r\n \"HeaderButtons\": HeaderButtons\r\n }\r\n }\r\n});\r\n\r\n\r\n/***\r\n * A plugin to add custom buttons to column headers.\r\n *\r\n * USAGE:\r\n *\r\n * Add the plugin .js & .css files and register it with the grid.\r\n *\r\n * To specify a custom button in a column header, extend the column definition like so:\r\n *\r\n * var columns = [\r\n * {\r\n * id: 'myColumn',\r\n * name: 'My column',\r\n *\r\n * // This is the relevant part\r\n * header: {\r\n * buttons: [\r\n * {\r\n * // button options\r\n * },\r\n * {\r\n * // button options\r\n * }\r\n * ]\r\n * }\r\n * }\r\n * ];\r\n *\r\n * Available button options:\r\n * cssClass: CSS class to add to the button.\r\n * image: Relative button image path.\r\n * tooltip: Button tooltip.\r\n * showOnHover: Only show the button on hover.\r\n * handler: Button click handler.\r\n * command: A command identifier to be passed to the onCommand event handlers.\r\n *\r\n * The plugin exposes the following events:\r\n * onCommand: Fired on button click for buttons with 'command' specified.\r\n * Event args:\r\n * grid: Reference to the grid.\r\n * column: Column definition.\r\n * command: Button command identified.\r\n * button: Button options. Note that you can change the button options in your\r\n * event handler, and the column header will be automatically updated to\r\n * reflect them. This is useful if you want to implement something like a\r\n * toggle button.\r\n *\r\n *\r\n * @param options {Object} Options:\r\n * buttonCssClass: a CSS class to use for buttons (default 'slick-header-button')\r\n * @class Slick.Plugins.HeaderButtons\r\n * @constructor\r\n */\r\nexport function HeaderButtons(options) {\r\n var _grid;\r\n var _self = this;\r\n var _handler = new Slick.EventHandler();\r\n var _defaults = {\r\n buttonCssClass: \"slick-header-button\"\r\n };\r\n\r\n\r\n function init(grid) {\r\n options = $.deepExtend({}, _defaults, options);\r\n _grid = grid;\r\n _handler\r\n .subscribe(_grid.onHeaderCellRendered, handleHeaderCellRendered)\r\n .subscribe(_grid.onBeforeHeaderCellDestroy, handleBeforeHeaderCellDestroy);\r\n\r\n // Force the grid to re-render the header now that the events are hooked up.\r\n _grid.setColumns(_grid.getColumns());\r\n }\r\n\r\n\r\n function destroy() {\r\n _handler.unsubscribeAll();\r\n }\r\n\r\n\r\n function handleHeaderCellRendered(e, args) {\r\n var column = args.column;\r\n\r\n if (column.header && column.header.buttons) {\r\n // Append buttons in reverse order since they are floated to the right.\r\n var i = column.header.buttons.length;\r\n while (i--) {\r\n var button = column.header.buttons[i];\r\n var btn = $(\"<div></div>\")\r\n .addClass(options.buttonCssClass)\r\n .data(\"column\", column)\r\n .data(\"button\", button);\r\n\r\n if (button.showOnHover) {\r\n btn.addClass(\"slick-header-button-hidden\");\r\n }\r\n\r\n if (button.image) {\r\n btn.css(\"backgroundImage\", \"url(\" + button.image + \")\");\r\n }\r\n if (button.html) {\r\n btn.html(button.html);\r\n }\r\n\r\n if (button.cssClass) {\r\n btn.addClass(button.cssClass);\r\n }\r\n\r\n if (button.tooltip) {\r\n btn.attr(\"title\", button.tooltip);\r\n }\r\n\r\n if (button.command) {\r\n btn.data(\"command\", button.command);\r\n }\r\n\r\n if (button.handler) {\r\n btn.on(\"click\", button.handler);\r\n }\r\n\r\n btn\r\n .on(\"click\", handleButtonClick)\r\n .appendTo(args.node);\r\n }\r\n }\r\n }\r\n\r\n\r\n function handleBeforeHeaderCellDestroy(e, args) {\r\n var column = args.column;\r\n\r\n if (column.header && column.header.buttons) {\r\n // Removing buttons via jQuery will also clean up any event handlers and data.\r\n // NOTE: If you attach event handlers directly or using a different framework,\r\n // you must also clean them up here to avoid memory leaks.\r\n $(args.node).find(\".\" + options.buttonCssClass).remove();\r\n }\r\n }\r\n\r\n\r\n function handleButtonClick(e) {\r\n var command = $(this).data(\"command\");\r\n var columnDef = $(this).data(\"column\");\r\n var button = $(this).data(\"button\");\r\n\r\n if (command != null) {\r\n _self.onCommand.notify({\r\n \"grid\": _grid,\r\n \"column\": columnDef,\r\n \"command\": command,\r\n \"button\": button\r\n }, e, _self);\r\n\r\n // Update the header in case the user updated the button definition in the handler.\r\n _grid.updateColumnHeader(columnDef.id);\r\n }\r\n\r\n // Stop propagation so that it doesn't register as a header click event.\r\n e.preventDefault();\r\n e.stopPropagation();\r\n }\r\n\r\n $.shallowExtend(this, {\r\n \"init\": init,\r\n \"destroy\": destroy,\r\n \"pluginName\": \"HeaderButtons\",\r\n\r\n \"onCommand\": new Slick.Event()\r\n });\r\n}\r\n","/*\r\n * Contains basic SlickGrid formatters.\r\n * \r\n * NOTE: These are merely examples. You will most likely need to implement something more\r\n * robust/extensible/localizable/etc. for your use!\r\n */\r\n\r\nimport { ISlickFormatter, ISlickFormatterResult } from './slick.core'\r\nimport { numeric } from '../core/numeric';\r\nimport { date } from '../core/date';\r\n\r\nfunction escapeHTMLChars(text: string): string {\r\n if (text == null) {\r\n return \"\";\r\n }\r\n if (typeof text.replace !== \"function\") {\r\n return text;\r\n }\r\n return text.replace(/&/g, \"&amp;\").replace(/</g, \"&lt;\").replace(/>/g, \"&gt;\");\r\n}\r\n\r\nexport let EmptyFormatter: ISlickFormatter = function (row, cell, value, columnDef, dataContext): string {\r\n return \"\";\r\n};\r\n\r\nexport let ComponentFormatter = EmptyFormatter;\r\n\r\nexport let YesNoFormatter: ISlickFormatter = function (row, cell, value, columnDef, dataContext): string {\r\n return value ? \"Yes\" : \"No\";\r\n};\r\n\r\nexport let CheckboxFormatter: ISlickFormatter = function (row, cell, value, columnDef, dataContext): string {\r\n return '<div style=\"text-align:center\">' + (value ? \"✔\" : \"-\") + '</div>'; // ❌\r\n};\r\n\r\nexport let CheckmarkFormatter: ISlickFormatter = function (row, cell, value, columnDef, dataContext): string {\r\n return value ? \"✔\" : \"\";\r\n};\r\n\r\nexport let NumericFormatter: ISlickFormatter = function (row, cell, value, columnDef, dataContext): ISlickFormatterResult {\r\n return {\r\n addClasses: [\"right\"],\r\n text: numeric.format(value, columnDef.format)\r\n };\r\n};\r\n\r\nexport let DateFormatter: ISlickFormatter = function (row, cell, value, columnDef, dataContext): string {\r\n return date.format(value, columnDef.format);\r\n};\r\n\r\nexport let HtmlFormatter: ISlickFormatter = function (row, cell, value, columnDef, dataContext): string {\r\n return value || \"\";\r\n};\r\n\r\nexport let LookupFormatter: ISlickFormatter = function (row, cell, value, columnDef, dataContext): string {\r\n let vl = columnDef.valueList;\r\n if (vl) {\r\n if (Array.isArray(vl)) {\r\n if (vl.length > 0) {\r\n if (typeof (vl[0]) === \"string\") {\r\n return escapeHTMLChars(vl.indexOf(value) >= 0 ? value : \"\"); //TODO: desired?\r\n } else {\r\n const vlList = vl as Array<{ text: string, value: any }>;\r\n return escapeHTMLChars(vlList.filter((x) => x.value === value)[0]?.text);\r\n }\r\n } else {\r\n return \"\";\r\n }\r\n } else {\r\n return escapeHTMLChars(vl[value]);\r\n }\r\n } else {\r\n console.warn(\"No values list found for column \" + columnDef.id);\r\n }\r\n return escapeHTMLChars(value);\r\n};\r\n\r\nexport let MultiLookupFormatter: ISlickFormatter = function (row, cell, value, columnDef, dataContext): string {\r\n if (value == null || value.length === 0) {\r\n return \"\";\r\n }\r\n const vl = columnDef.valueList;\r\n let result = \"\";\r\n if (vl == null) {\r\n console.warn(\"No values list found for column \" + columnDef.id);\r\n return result;\r\n }\r\n if (Array.isArray(vl)) {\r\n if (vl.length > 0) {\r\n if (typeof (vl[0]) === \"string\") {\r\n result = value.filter((v) => vl.indexOf(v) >= 0).join(\", \");\r\n } else {\r\n const vlList = vl as Array<{ text: string, value: any }>;\r\n result = vlList.filter((x) => value.indexOf(x.value) >= 0).map((x) => x.text ?? \"\").join(\", \");\r\n }\r\n }\r\n } else {\r\n result = value.map((v) => vl[v]).filter((v) => v != null).join(\", \");\r\n }\r\n return result || \"\";\r\n};\r\n\r\nexport let TextFormatter: ISlickFormatter = function (row, cell, value, columnDef, dataContext): string {\r\n if (value == null) {\r\n return \"\";\r\n } else {\r\n return escapeHTMLChars(value + \"\");\r\n }\r\n};\r\n\r\nexport let TooltipFormatter: ISlickFormatter = function (row, cell, value, columnDef, dataContext): string | ISlickFormatterResult {\r\n if (value == null) {\r\n return \"\";\r\n } else {\r\n const result = escapeHTMLChars(value + \"\");\r\n return {text: result, toolTip: result};\r\n }\r\n};\r\n\r\nexport let MultiLineTextFormatter: ISlickFormatter = function (row, cell, value, columnDef, dataContext): ISlickFormatterResult {\r\n var txt = \"\";\r\n if (value != null) {\r\n txt = escapeHTMLChars(value + \"\");\r\n }\r\n return { text: txt, addClasses: [\"slick-wrap\"] };\r\n};\r\n\r\nfunction pad(nr: number): string {\r\n if (nr < 10) {\r\n return \"0\" + nr.toString();\r\n } else {\r\n return nr.toString();\r\n }\r\n}\r\n\r\nexport let TimeFormatter: ISlickFormatter = function (row, cell, value, columnDef, dataContext): string {\r\n return value ? (pad(value.getHours()) + \":\" + pad(value.getMinutes())) : \"\";\r\n};\r\n\r\nexport let DateTimeFormatter: ISlickFormatter = function (row, cell, value, columnDef, dataContext): string {\r\n return DateFormatter(row, cell, value, columnDef, dataContext) + \" \" +\r\n TimeFormatter(row, cell, value, columnDef, dataContext);\r\n};\r\n\r\nexport let ButtonFormatter: ISlickFormatter = function (row, cell, value, columnDef, dataContext): string {\r\n return \"<button class='grid-btn'>...</button>\";\r\n};\r\n","import culture from \"./culture\";\r\n\r\n/*\r\n * contains function to parse and format numeric values\r\n */\r\n\r\ninterface IFormatInfo {\r\n min_comma_places: number;\r\n max_comma_places: number;\r\n min_length: number;\r\n show_sep: boolean;\r\n prefix: string;\r\n suffix: string;\r\n}\r\n\r\n\r\nexport abstract class numeric {\r\n\r\n public static parse(nrAsString: string): number {\r\n if (nrAsString === \"\" || nrAsString === undefined || nrAsString === null) {\r\n return undefined;\r\n }\r\n if (!nrAsString) {\r\n return undefined;\r\n }\r\n if (culture.info.decimalSep && culture.info.decimalSep.length > 1) {\r\n throw \"DecimalSep cannot be more than one character\";\r\n }\r\n if (culture.info.thousandSep && culture.info.thousandSep.length > 1) {\r\n throw \"ThousandSep cannot be more than one character\";\r\n }\r\n var str = \"\";\r\n var comma_sep = culture.info.decimalSep;\r\n for (var i = 0; i < nrAsString.length; i++) {\r\n var c = nrAsString.charAt(i);\r\n if (c === comma_sep) {\r\n str += '.';\r\n }\r\n else if (c === '0' || c === '1' || c === '2' || c === '3' || c === '4' || c === '5' || c === '6' || c === '7' || c === '8' || c === '9' || (c === '-' && str === \"\")) {\r\n str += c;\r\n }\r\n }\r\n return parseFloat(str);\r\n }\r\n\r\n public static format(nr: number, format?: string): string {\r\n if (isNaN(nr) || nr === null || nr === undefined) {\r\n return \"\";\r\n }\r\n if (culture.info.decimalSep && culture.info.decimalSep.length > 1) {\r\n throw \"DecimalSep cannot be more than one character\";\r\n }\r\n if (culture.info.thousandSep && culture.info.thousandSep.length > 1) {\r\n throw \"ThousandSep cannot be more than one character\";\r\n }\r\n\r\n const f = format || culture.info.numberFormat;\r\n let cacheEntry = numeric.formatCache[f];\r\n if (!cacheEntry) {\r\n numeric.formatCache[f] = cacheEntry = numeric.parseNrFormat(f);\r\n }\r\n return numeric.formatNumber(nr, cacheEntry);\r\n }\r\n\r\n private static formatCache: { [_key: string]: IFormatInfo } = {};\r\n\r\n private static parseNrFormat(format: string): IFormatInfo {\r\n let prefix = \"\";\r\n let suffix = \"\";\r\n let show_sep = format.indexOf(',#') > 0 || format.indexOf(',0') > 0;\r\n let min_length = 0;\r\n for (let i = 0; i < format.length; i++) {\r\n if (format.charAt(i) === '.') {\r\n break;\r\n }\r\n if (format.charAt(i) === '0') {\r\n min_length++;\r\n }\r\n if (min_length === 0 && format.charAt(i) !== ',' && format.charAt(i) !== '0' && format.charAt(i) !== '.' && format.charAt(i) !== '#') {\r\n prefix += format.charAt(i);\r\n }\r\n }\r\n let max_comma_places = 0;\r\n let min_comma_places = 0;\r\n let comma_pos = format.indexOf('.');\r\n if (comma_pos >= 0) {\r\n for (let j = comma_pos + 1; j < format.length; j++) {\r\n if (format.charAt(j) === '0') {\r\n min_comma_places++;\r\n }\r\n else if (format.charAt(j) === '#') {\r\n max_comma_places++;\r\n }\r\n else if (format.charAt(j) !== ',' && format.charAt(j) !== '.') {\r\n suffix += format.charAt(j);\r\n }\r\n }\r\n }\r\n max_comma_places += min_comma_places;\r\n return { max_comma_places, min_comma_places, min_length, prefix, suffix, show_sep };\r\n }\r\n\r\n private static formatNumber(nr, format: IFormatInfo) {\r\n //defaults\r\n let comma_separator = culture.info.decimalSep;\r\n let thousand_separator = culture.info.thousandSep;\r\n let cp_min = format.min_comma_places || 0;\r\n let cp_max = format.max_comma_places || 0;\r\n let ml = format.min_length || 0;\r\n //check if number is negative\r\n let negative = nr < 0;\r\n if (negative) {\r\n nr = -nr;\r\n }\r\n //convert number to a string and round\r\n let nr_str_raw = nr.toFixed(cp_max);\r\n let cp = cp_max;\r\n //remove comma-places which are not necessary\r\n let end = nr_str_raw.indexOf('.') + cp_min;\r\n if (end >= 0) {\r\n let x = nr_str_raw.length - 1;\r\n while (x > end) {\r\n if (nr_str_raw.charAt(x) === '0') {\r\n cp--;\r\n nr_str_raw = nr_str_raw.slice(0, -1);\r\n } else {\r\n break;\r\n }\r\n x--;\r\n }\r\n if (nr_str_raw.charAt(x) === '.') {\r\n nr_str_raw = nr_str_raw.slice(0, -1);\r\n }\r\n }\r\n let nr_str = comma_separator !== \".\" ? nr_str_raw.replace(\".\", comma_separator) : nr_str_raw;\r\n let t = cp ? cp + 1 : 0;\r\n // add \"0\" at the front if necessary\r\n while (nr_str.length < ml + t) {\r\n nr_str = \"0\" + nr_str;\r\n }\r\n // insert thousand-separator if necessary\r\n t += 3;\r\n while (nr_str.length > t && format.show_sep) {\r\n nr_str = nr_str.substr(0, nr_str.length - t) + thousand_separator + nr_str.substr(nr_str.length - t);\r\n t += 4;\r\n }\r\n //remove first 0 if necessary\r\n if (ml === 0 && nr_str.charAt(0) === '0') {\r\n nr_str = nr_str.slice(1);\r\n }\r\n //return number\r\n if (negative && parseFloat(nr_str_raw) !== 0) {\r\n return (format.prefix || \"\") + \"-\" + nr_str + (format.suffix || \"\");\r\n }\r\n else {\r\n return (format.prefix || \"\") + nr_str + (format.suffix || \"\");\r\n }\r\n }\r\n}\r\n","let _w: any = window;\r\n\r\n_w._current_culture = \"\";\r\n\r\nlet culture = _w._culture ?? {\r\n\r\n info: { thousandSep: \",\", decimalSep: \".\", dateFormat: \"yy-mm-dd\", numberFormat: \"#,0.####\" },\r\n\r\n /**\r\n * sets a culture\r\n * @param c culture as string for example 'de' or 'en-us'\r\n */\r\n set: function(c: string): void {\r\n var cult_vals = culture.cultures[c.toLowerCase()];\r\n if (cult_vals === undefined)\r\n throw \"unknown culture '\"+c+\"'\";\r\n culture.info.decimalSep = cult_vals[0];\r\n culture.info.thousandSep = cult_vals[1];\r\n culture.info.dateFormat = cult_vals[2];\r\n _w.current_culture = c;\r\n },\r\n\r\n /**\r\n * returns current culture\r\n */\r\n get: function(): string {\r\n return _w.current_culture;\r\n },\r\n cultures: {\r\n// 'ar':['.',',','dd/mm/y'],\r\n// 'bg':[',',' ','d.m.yy \\'г.\\''],\r\n// 'ca':[',','.','dd/mm/yy'],\r\n// 'zh-hans':['.',',','yy/m/d'],\r\n// 'cs':[',',' ','d.m.yy'],\r\n// 'da':[',','.','dd-mm-yy'],\r\n'de':[',','.','dd.mm.yy'],\r\n// 'el':[',','.','d/m/yy'],\r\n// 'es':[',','.','dd/mm/yy'],\r\n// 'fi':[',',' ','d.m.yy'],\r\n// 'fr':[',',' ','dd/mm/yy'],\r\n// 'he':['.',',','dd/mm/yy'],\r\n// 'hu':[',',' ','yy.mm.dd.'],\r\n// 'is':[',','.','d.m.yy'],\r\n// 'it':[',','.','dd/mm/yy'],\r\n// 'ja':['.',',','yy/mm/dd'],\r\n// 'ko':['.',',','yy-mm-dd'],\r\n// 'nl':[',','.','d-m-yy'],\r\n// 'no':[',',' ','dd.mm.yy'],\r\n// 'pl':[',',' ','yy-mm-dd'],\r\n// 'pt':[',','.','dd/mm/yy'],\r\n// 'rm':['.','\\'','dd/mm/yy'],\r\n// 'ro':[',','.','dd.mm.yy'],\r\n// 'ru':[',',' ','dd.mm.yy'],\r\n// 'hr':[',','.','d.m.yy.'],\r\n// 'sk':[',',' ','d. m. yy'],\r\n// 'sq':[',','.','yy-mm-dd'],\r\n// 'sv':[',',' ','yy-mm-dd'],\r\n// 'th':['.',',','d/m/yy'],\r\n// 'tr':[',','.','dd.mm.yy'],\r\n// 'ur':['.',',','dd/mm/yy'],\r\n// 'id':[',','.','dd/mm/yy'],\r\n// 'uk':[',',' ','dd.mm.yy'],\r\n// 'be':[',',' ','dd.mm.yy'],\r\n// 'sl':[',','.','d.m.yy'],\r\n// 'et':[',',' ','d.mm.yy'],\r\n// 'lv':[',',' ','yy.mm.dd.'],\r\n// 'lt':[',','.','yy.mm.dd'],\r\n// 'tg':[',',' ','dd.mm.y'],\r\n// 'fa':['.',',','mm/dd/yy'],\r\n// 'vi':[',','.','dd/mm/yy'],\r\n// 'hy':['.',',','dd.mm.yy'],\r\n// 'az':[',',' ','dd.mm.yy'],\r\n// 'eu':[',','.','yy/mm/dd'],\r\n// 'hsb':[',','.','d. m. yy'],\r\n// 'mk':[',','.','dd.mm.yy'],\r\n// 'tn':['.',',','yy/mm/dd'],\r\n// 'xh':['.',',','yy/mm/dd'],\r\n// 'zu':['.',',','yy/mm/dd'],\r\n// 'af':['.',',','yy/mm/dd'],\r\n// 'ka':[',',' ','dd.mm.yy'],\r\n// 'fo':[',','.','dd-mm-yy'],\r\n// 'hi':['.',',','dd-mm-yy'],\r\n// 'mt':['.',',','dd/mm/yy'],\r\n// 'se':[',',' ','dd.mm.yy'],\r\n// 'ga':['.',',','dd/mm/yy'],\r\n// 'ms':['.',',','dd/mm/yy'],\r\n// 'kk':[',',' ','dd.mm.yy'],\r\n// 'ky':[',',' ','dd.mm.y'],\r\n// 'sw':['.',',','m/d/yy'],\r\n// 'tk':[',',' ','dd.mm.y'],\r\n// 'uz':[',',' ','dd/mm yy'],\r\n// 'tt':[',',' ','dd.mm.yy'],\r\n// 'bn':['.',',','dd-mm-y'],\r\n// 'pa':['.',',','dd-mm-y'],\r\n// 'gu':['.',',','dd-mm-y'],\r\n// 'or':['.',',','dd-mm-y'],\r\n// 'ta':['.',',','dd-mm-yy'],\r\n// 'te':['.',',','dd-mm-y'],\r\n// 'kn':['.',',','dd-mm-y'],\r\n// 'ml':['.',',','dd-mm-y'],\r\n// 'as':['.',',','dd-mm-yy'],\r\n// 'mr':['.',',','dd-mm-yy'],\r\n// 'sa':['.',',','dd-mm-yy'],\r\n// 'mn':[',',' ','y.mm.dd'],\r\n// 'bo':['.',',','yy/m/d'],\r\n// 'cy':['.',',','dd/mm/yy'],\r\n// 'km':['.',',','yy-mm-dd'],\r\n// 'lo':['.',',','dd/mm/yy'],\r\n// 'gl':[',','.','dd/mm/yy'],\r\n// 'kok':['.',',','dd-mm-yy'],\r\n// 'syr':['.',',','dd/mm/yy'],\r\n// 'si':['.',',','yy-mm-dd'],\r\n// 'iu':['.',',','d/mm/yy'],\r\n// 'am':['.',',','d/m/yy'],\r\n// 'tzm':[',','.','dd-mm-yy'],\r\n// 'ne':['.',',','m/d/yy'],\r\n// 'fy':[',','.','d-m-yy'],\r\n// 'ps':[',','،','dd/mm/y'],\r\n// 'fil':['.',',','m/d/yy'],\r\n// 'dv':['.',',','dd/mm/y'],\r\n// 'ha':['.',',','d/m/yy'],\r\n// 'yo':['.',',','d/m/yy'],\r\n// 'quz':[',','.','dd/mm/yy'],\r\n// 'nso':['.',',','yy/mm/dd'],\r\n// 'ba':[',',' ','dd.mm.y'],\r\n// 'lb':[',',' ','dd/mm/yy'],\r\n// 'kl':[',','.','dd-mm-yy'],\r\n// 'ig':['.',',','d/m/yy'],\r\n// 'ii':['.',',','yy/m/d'],\r\n// 'arn':[',','.','dd-mm-yy'],\r\n// 'moh':['.',',','m/d/yy'],\r\n// 'br':[',',' ','dd/mm/yy'],\r\n// 'ug':['.',',','yy-m-d'],\r\n// 'mi':['.',',','dd/mm/yy'],\r\n// 'oc':[',',' ','dd/mm/yy'],\r\n// 'co':[',',' ','dd/mm/yy'],\r\n// 'gsw':[',',' ','dd/mm/yy'],\r\n// 'sah':[',',' ','mm.dd.yy'],\r\n// 'qut':['.',',','dd/mm/yy'],\r\n// 'rw':[',',' ','m/d/yy'],\r\n// 'wo':[',',' ','dd/mm/yy'],\r\n// 'prs':[',','.','dd/mm/y'],\r\n// 'gd':['.',',','dd/mm/yy'],\r\n// 'ar-sa':['.',',','dd/mm/y'],\r\n// 'bg-bg':[',',' ','d.m.yy \\'г.\\''],\r\n// 'ca-es':[',','.','dd/mm/yy'],\r\n// 'zh-tw':['.',',','yy/m/d'],\r\n// 'cs-cz':[',',' ','d.m.yy'],\r\n// 'da-dk':[',','.','dd-mm-yy'],\r\n// 'de-de':[',','.','dd.mm.yy'],\r\n// 'el-gr':[',','.','d/m/yy'],\r\n'en-us':['.',',','m/d/yy'],\r\n// 'fi-fi':[',',' ','d.m.yy'],\r\n// 'fr-fr':[',',' ','dd/mm/yy'],\r\n// 'he-il':['.',',','dd/mm/yy'],\r\n// 'hu-hu':[',',' ','yy.mm.dd.'],\r\n// 'is-is':[',','.','d.m.yy'],\r\n// 'it-it':[',','.','dd/mm/yy'],\r\n// 'ja-jp':['.',',','yy/mm/dd'],\r\n// 'ko-kr':['.',',','yy-mm-dd'],\r\n// 'nl-nl':[',','.','d-m-yy'],\r\n// 'nb-no':[',',' ','dd.mm.yy'],\r\n// 'pl-pl':[',',' ','yy-mm-dd'],\r\n// 'pt-br':[',','.','dd/mm/yy'],\r\n// 'rm-ch':['.','\\'','dd/mm/yy'],\r\n// 'ro-ro':[',','.','dd.mm.yy'],\r\n// 'ru-ru':[',',' ','dd.mm.yy'],\r\n// 'hr-hr':[',','.','d.m.yy.'],\r\n// 'sk-sk':[',',' ','d. m. yy'],\r\n// 'sq-al':[',','.','yy-mm-dd'],\r\n// 'sv-se':[',',' ','yy-mm-dd'],\r\n// 'th-th':['.',',','d/m/yy'],\r\n// 'tr-tr':[',','.','dd.mm.yy'],\r\n// 'ur-pk':['.',',','dd/mm/yy'],\r\n// 'id-id':[',','.','dd/mm/yy'],\r\n// 'uk-ua':[',',' ','dd.mm.yy'],\r\n// 'be-by':[',',' ','dd.mm.yy'],\r\n// 'sl-si':[',','.','d.m.yy'],\r\n// 'et-ee':[',',' ','d.mm.yy'],\r\n// 'lv-lv':[',',' ','yy.mm.dd.'],\r\n// 'lt-lt':[',','.','yy.mm.dd'],\r\n// 'tg-cyrl-tj':[',',' ','dd.mm.y'],\r\n// 'fa-ir':['.',',','mm/dd/yy'],\r\n// 'vi-vn':[',','.','dd/mm/yy'],\r\n// 'hy-am':['.',',','dd.mm.yy'],\r\n// 'az-latn-az':[',',' ','dd.mm.yy'],\r\n// 'eu-es':[',','.','yy/mm/dd'],\r\n// 'hsb-de':[',','.','d. m. yy'],\r\n// 'mk-mk':[',','.','dd.mm.yy'],\r\n// 'tn-za':['.',',','yy/mm/dd'],\r\n// 'xh-za':['.',',','yy/mm/dd'],\r\n// 'zu-za':['.',',','yy/mm/dd'],\r\n// 'af-za':['.',',','yy/mm/dd'],\r\n// 'ka-ge':[',',' ','dd.mm.yy'],\r\n// 'fo-fo':[',','.','dd-mm-yy'],\r\n// 'hi-in':['.',',','dd-mm-yy'],\r\n// 'mt-mt':['.',',','dd/mm/yy'],\r\n// 'se-no':[',',' ','dd.mm.yy'],\r\n// 'ms-my':['.',',','dd/mm/yy'],\r\n// 'kk-kz':[',',' ','dd.mm.yy'],\r\n// 'ky-kg':[',',' ','dd.mm.y'],\r\n// 'sw-ke':['.',',','m/d/yy'],\r\n// 'tk-tm':[',',' ','dd.mm.y'],\r\n// 'uz-latn-uz':[',',' ','dd/mm yy'],\r\n// 'tt-ru':[',',' ','dd.mm.yy'],\r\n// 'bn-in':['.',',','dd-mm-y'],\r\n// 'pa-in':['.',',','dd-mm-y'],\r\n// 'gu-in':['.',',','dd-mm-y'],\r\n// 'or-in':['.',',','dd-mm-y'],\r\n// 'ta-in':['.',',','dd-mm-yy'],\r\n// 'te-in':['.',',','dd-mm-y'],\r\n// 'kn-in':['.',',','dd-mm-y'],\r\n// 'ml-in':['.',',','dd-mm-y'],\r\n// 'as-in':['.',',','dd-mm-yy'],\r\n// 'mr-in':['.',',','dd-mm-yy'],\r\n// 'sa-in':['.',',','dd-mm-yy'],\r\n// 'mn-mn':[',',' ','y.mm.dd'],\r\n// 'bo-cn':['.',',','yy/m/d'],\r\n// 'cy-gb':['.',',','dd/mm/yy'],\r\n// 'km-kh':['.',',','yy-mm-dd'],\r\n// 'lo-la':['.',',','dd/mm/yy'],\r\n// 'gl-es':[',','.','dd/mm/yy'],\r\n// 'kok-in':['.',',','dd-mm-yy'],\r\n// 'syr-sy':['.',',','dd/mm/yy'],\r\n// 'si-lk':['.',',','yy-mm-dd'],\r\n// 'iu-cans-ca':['.',',','d/m/yy'],\r\n// 'am-et':['.',',','d/m/yy'],\r\n// 'ne-np':['.',',','m/d/yy'],\r\n// 'fy-nl':[',','.','d-m-yy'],\r\n// 'ps-af':[',','،','dd/mm/y'],\r\n// 'fil-ph':['.',',','m/d/yy'],\r\n// 'dv-mv':['.',',','dd/mm/y'],\r\n// 'ha-latn-ng':['.',',','d/m/yy'],\r\n// 'yo-ng':['.',',','d/m/yy'],\r\n// 'quz-bo':[',','.','dd/mm/yy'],\r\n// 'nso-za':['.',',','yy/mm/dd'],\r\n// 'ba-ru':[',',' ','dd.mm.y'],\r\n// 'lb-lu':[',',' ','dd/mm/yy'],\r\n// 'kl-gl':[',','.','dd-mm-yy'],\r\n// 'ig-ng':['.',',','d/m/yy'],\r\n// 'ii-cn':['.',',','yy/m/d'],\r\n// 'arn-cl':[',','.','dd-mm-yy'],\r\n// 'moh-ca':['.',',','m/d/yy'],\r\n// 'br-fr':[',',' ','dd/mm/yy'],\r\n// 'ug-cn':['.',',','yy-m-d'],\r\n// 'mi-nz':['.',',','dd/mm/yy'],\r\n// 'oc-fr':[',',' ','dd/mm/yy'],\r\n// 'co-fr':[',',' ','dd/mm/yy'],\r\n// 'gsw-fr':[',',' ','dd/mm/yy'],\r\n// 'sah-ru':[',',' ','mm.dd.yy'],\r\n// 'qut-gt':['.',',','dd/mm/yy'],\r\n// 'rw-rw':[',',' ','m/d/yy'],\r\n// 'wo-sn':[',',' ','dd/mm/yy'],\r\n// 'prs-af':[',','.','dd/mm/y'],\r\n// 'gd-gb':['.',',','dd/mm/yy'],\r\n// 'ar-iq':['.',',','dd/mm/yy'],\r\n// 'zh-cn':['.',',','yy/m/d'],\r\n// 'de-ch':['.','\\'','dd.mm.yy'],\r\n'en-gb':['.',',','dd/mm/yy'],\r\n// 'es-mx':['.',',','dd/mm/yy'],\r\n// 'fr-be':[',','.','d/mm/yy'],\r\n// 'it-ch':['.','\\'','dd.mm.yy'],\r\n// 'nl-be':[',','.','d/mm/yy'],\r\n// 'nn-no':[',',' ','dd.mm.yy'],\r\n// 'pt-pt':[',','.','dd-mm-yy'],\r\n// 'sr-latn-cs':[',','.','d.m.yy'],\r\n// 'sv-fi':[',',' ','d.m.yy'],\r\n// 'az-cyrl-az':[',',' ','dd.mm.yy'],\r\n// 'dsb-de':[',','.','d. m. yy'],\r\n// 'se-se':[',',' ','yy-mm-dd'],\r\n// 'ga-ie':['.',',','dd/mm/yy'],\r\n// 'ms-bn':[',','.','dd/mm/yy'],\r\n// 'uz-cyrl-uz':[',',' ','dd.mm.yy'],\r\n// 'bn-bd':['.',',','dd-mm-y'],\r\n// 'mn-mong-cn':['.',',','yy/m/d'],\r\n// 'iu-latn-ca':['.',',','d/mm/yy'],\r\n// 'tzm-latn-dz':[',','.','dd-mm-yy'],\r\n// 'quz-ec':[',','.','dd/mm/yy'],\r\n// 'ar-eg':['.',',','dd/mm/yy'],\r\n// 'zh-hk':['.',',','d/m/yy'],\r\n// 'de-at':[',','.','dd.mm.yy'],\r\n// 'en-au':['.',',','d/mm/yy'],\r\n// 'es-es':[',','.','dd/mm/yy'],\r\n// 'fr-ca':[',',' ','yy-mm-dd'],\r\n// 'sr-cyrl-cs':[',','.','d.m.yy'],\r\n// 'se-fi':[',',' ','d.m.yy'],\r\n// 'quz-pe':['.',',','dd/mm/yy'],\r\n// 'ar-ly':['.',',','dd/mm/yy'],\r\n// 'zh-sg':['.',',','d/m/yy'],\r\n// 'de-lu':[',','.','dd.mm.yy'],\r\n// 'en-ca':['.',',','dd/mm/yy'],\r\n// 'es-gt':['.',',','dd/mm/yy'],\r\n// 'fr-ch':['.','\\'','dd.mm.yy'],\r\n// 'hr-ba':[',','.','d.m.yy.'],\r\n// 'smj-no':[',',' ','dd.mm.yy'],\r\n// 'ar-dz':['.',',','dd-mm-yy'],\r\n// 'zh-mo':['.',',','d/m/yy'],\r\n// 'de-li':['.','\\'','dd.mm.yy'],\r\n// 'en-nz':['.',',','d/mm/yy'],\r\n// 'es-cr':[',','.','dd/mm/yy'],\r\n// 'fr-lu':[',',' ','dd/mm/yy'],\r\n// 'bs-latn-ba':[',','.','d.m.yy'],\r\n// 'smj-se':[',',' ','yy-mm-dd'],\r\n// 'ar-ma':['.',',','dd-mm-yy'],\r\n// 'en-ie':['.',',','dd/mm/yy'],\r\n// 'es-pa':['.',',','mm/dd/yy'],\r\n// 'fr-mc':[',',' ','dd/mm/yy'],\r\n// 'sr-latn-ba':[',','.','d.m.yy'],\r\n// 'sma-no':[',',' ','dd.mm.yy'],\r\n// 'ar-tn':['.',',','dd-mm-yy'],\r\n// 'en-za':['.',' ','yy/mm/dd'],\r\n// 'es-do':['.',',','dd/mm/yy'],\r\n// 'sr-cyrl-ba':[',','.','d.m.yy'],\r\n// 'sma-se':[',',' ','yy-mm-dd'],\r\n// 'ar-om':['.',',','dd/mm/yy'],\r\n// 'en-jm':['.',',','dd/mm/yy'],\r\n// 'es-ve':[',','.','dd/mm/yy'],\r\n// 'bs-cyrl-ba':[',','.','d.m.yy'],\r\n// 'sms-fi':[',',' ','d.m.yy'],\r\n// 'ar-ye':['.',',','dd/mm/yy'],\r\n// 'en-029':['.',',','mm/dd/yy'],\r\n// 'es-co':[',','.','dd/mm/yy'],\r\n// 'sr-latn-rs':[',','.','d.m.yy'],\r\n// 'smn-fi':[',',' ','d.m.yy'],\r\n// 'ar-sy':['.',',','dd/mm/yy'],\r\n// 'en-bz':['.',',','dd/mm/yy'],\r\n// 'es-pe':['.',',','dd/mm/yy'],\r\n// 'sr-cyrl-rs':[',','.','d.m.yy'],\r\n// 'ar-jo':['.',',','dd/mm/yy'],\r\n// 'en-tt':['.',',','dd/mm/yy'],\r\n// 'es-ar':[',','.','dd/mm/yy'],\r\n// 'sr-latn-me':[',','.','d.m.yy'],\r\n// 'ar-lb':['.',',','dd/mm/yy'],\r\n// 'en-zw':['.',',','m/d/yy'],\r\n// 'es-ec':[',','.','dd/mm/yy'],\r\n// 'sr-cyrl-me':[',','.','d.m.yy'],\r\n// 'ar-kw':['.',',','dd/mm/yy'],\r\n// 'en-ph':['.',',','m/d/yy'],\r\n// 'es-cl':[',','.','dd-mm-yy'],\r\n// 'ar-ae':['.',',','dd/mm/yy'],\r\n// 'es-uy':[',','.','dd/mm/yy'],\r\n// 'ar-bh':['.',',','dd/mm/yy'],\r\n// 'es-py':[',','.','dd/mm/yy'],\r\n// 'ar-qa':['.',',','dd/mm/yy'],\r\n// 'en-in':['.',',','dd-mm-yy'],\r\n// 'es-bo':[',','.','dd/mm/yy'],\r\n// 'en-my':['.',',','d/m/yy'],\r\n// 'es-sv':['.',',','dd/mm/yy'],\r\n// 'en-sg':['.',',','d/m/yy'],\r\n// 'es-hn':['.',',','dd/mm/yy'],\r\n// 'es-ni':['.',',','dd/mm/yy'],\r\n// 'es-pr':['.',',','dd/mm/yy'],\r\n// 'es-us':['.',',','m/d/yy'],\r\n// 'bs-cyrl':[',','.','d.m.yy'],\r\n// 'bs-latn':[',','.','d.m.yy'],\r\n// 'sr-cyrl':[',','.','d.m.yy'],\r\n// 'sr-latn':[',','.','d.m.yy'],\r\n// 'smn':[',',' ','d.m.yy'],\r\n// 'az-cyrl':[',',' ','dd.mm.yy'],\r\n// 'sms':[',',' ','d.m.yy'],\r\n// 'zh':['.',',','yy/m/d'],\r\n// 'nn':[',',' ','dd.mm.yy'],\r\n// 'bs':[',','.','d.m.yy'],\r\n// 'az-latn':[',',' ','dd.mm.yy'],\r\n// 'sma':[',',' ','yy-mm-dd'],\r\n// 'uz-cyrl':[',',' ','dd.mm.yy'],\r\n// 'mn-cyrl':[',',' ','y.mm.dd'],\r\n// 'iu-cans':['.',',','d/m/yy'],\r\n// 'zh-hant':['.',',','d/m/yy'],\r\n// 'nb':[',',' ','dd.mm.yy'],\r\n// 'sr':[',','.','d.m.yy'],\r\n// 'tg-cyrl':[',',' ','dd.mm.y'],\r\n// 'dsb':[',','.','d. m. yy'],\r\n// 'smj':[',',' ','yy-mm-dd'],\r\n// 'uz-latn':[',',' ','dd/mm yy'],\r\n// 'mn-mong':['.',',','yy/m/d'],\r\n// 'iu-latn':['.',',','d/mm/yy'],\r\n// 'tzm-latn':[',','.','dd-mm-yy'],\r\n// 'ha-latn':['.',',','d/m/yy'],\r\n// 'zh-chs':['.',',','yy/m/d'],\r\n// 'zh-cht':['.',',','d/m/yy'],\r\n'':['.',',','yy-mm-dd'] }\r\n};\r\n\r\n_w._culture = culture;\r\n\r\n/**\r\n * culture info for date and number formatting and parsing\r\n */\r\nexport default culture;\r\n","import culture from \"./culture\";\r\n\r\n/*\r\n * contains function to parse and format numeric values\r\n */\r\n\r\n\r\n//*** all following parts are extracted out of jquery-ui library (GPL/MIT license) ***/\r\n\r\nvar _helper = {\r\n _defaults: { shortYearCutoff: \"+10\", dayNames: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"], monthNames: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"], dayNamesShort: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"], monthNamesShort: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"] },\r\n _ticksTo1970: (((1970 - 1) * 365 + Math.floor(1970 / 4) - Math.floor(1970 / 100) + Math.floor(1970 / 400)) * 24 * 60 * 60 * 10000000),\r\n _daylightSavingAdjust(date) {\r\n if (!date) { return null; }\r\n date.setHours(date.getHours() > 12 ? date.getHours() + 2 : 0);\r\n return date;\r\n },\r\n _getDaysInMonth(year, month) {\r\n return 32 - _helper._daylightSavingAdjust(new Date(year, month, 32)).getDate();\r\n }\r\n};\r\n\r\n\r\n\r\nexport abstract class date {\r\n\r\n\r\n /* Parse a string value into a date object.\r\nSee formatDate below for the possible formats.\r\n\r\n@param format string - the expected format of the date\r\n@param value string - the date in the above format\r\n@param settings Object - attributes include:\r\nshortYearCutoff number - the cutoff year for determining the century (optional)\r\ndayNamesShort string[7] - abbreviated names of the days from Sunday (optional)\r\ndayNames string[7] - names of the days from Sunday (optional)\r\nmonthNamesShort string[12] - abbreviated names of the months (optional)\r\nmonthNames string[12] - names of the months (optional)\r\n@return Date - the extracted date value or null if value is blank */\r\n public static parse(value: string, format?: string, settings?): Date {\r\n if (value === null) {\r\n return null;\r\n }\r\n if (value === undefined) {\r\n return undefined;\r\n }\r\n if (value == \"\") {\r\n return null;\r\n }\r\n format = format || culture.info.dateFormat;\r\n //value = (typeof value == 'object' ? value.toString() : value + '');\r\n let shortYearCutoff = (settings ? settings.shortYearCutoff : null) || _helper._defaults.shortYearCutoff;\r\n shortYearCutoff = (typeof shortYearCutoff != \"string\" ? shortYearCutoff :\r\n new Date().getFullYear() % 100 + parseInt(shortYearCutoff, 10));\r\n let dayNamesShort = (settings ? settings.dayNamesShort : null) || _helper._defaults.dayNamesShort;\r\n let dayNames = (settings ? settings.dayNames : null) || _helper._defaults.dayNames;\r\n let monthNamesShort = (settings ? settings.monthNamesShort : null) || _helper._defaults.monthNamesShort;\r\n let monthNames = (settings ? settings.monthNames : null) || _helper._defaults.monthNames;\r\n let year = -1;\r\n let month = -1;\r\n let day = -1;\r\n let doy = -1;\r\n let literal = false;\r\n // Check whether a format character is doubled\r\n let lookAhead = function (match) {\r\n let matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) == match);\r\n if (matches) {\r\n iFormat++;\r\n }\r\n return matches;\r\n };\r\n // Extract a number from the string value\r\n let getNumber = function (match) {\r\n let isDoubled = lookAhead(match);\r\n let size = (match == \"@\" ? 14 : (match == \"!\" ? 20 :\r\n (match == \"y\" && isDoubled ? 4 : (match == \"o\" ? 3 : 2))));\r\n let digits = new RegExp(\"^\\\\d{1,\" + size + \"}\");\r\n let num = value.substring(iValue).match(digits);\r\n if (!num) {\r\n throw \"Missing number at position \" + iValue;\r\n }\r\n iValue += num[0].length;\r\n return parseInt(num[0], 10);\r\n };\r\n // Extract a name from the string value and convert to an index\r\n let getName = function (match, shortNames, longNames) {\r\n let names = (lookAhead(match) ? longNames : shortNames);\r\n for (let i = 0; i < names.length; i++) {\r\n if (value.substr(iValue, names[i].length).toLowerCase() == names[i].toLowerCase()) {\r\n iValue += names[i].length;\r\n return i + 1;\r\n }\r\n }\r\n throw new Error(\"Unknown name at position \" + iValue);\r\n };\r\n // Confirm that a literal character matches the string value\r\n let checkLiteral = function () {\r\n if (value.charAt(iValue) != format.charAt(iFormat)) {\r\n throw \"Unexpected literal at position \" + iValue;\r\n }\r\n iValue++;\r\n };\r\n let iValue = 0;\r\n for (var iFormat = 0; iFormat < format.length; iFormat++) {\r\n if (literal) {\r\n if (format.charAt(iFormat) == \"'\" && !lookAhead(\"'\")) {\r\n literal = false;\r\n } else {\r\n checkLiteral();\r\n }\r\n } else {\r\n switch (format.charAt(iFormat)) {\r\n case \"d\":\r\n day = getNumber(\"d\");\r\n break;\r\n case \"D\":\r\n getName(\"D\", dayNamesShort, dayNames);\r\n break;\r\n case \"o\":\r\n doy = getNumber(\"o\");\r\n break;\r\n case \"m\":\r\n month = getNumber(\"m\");\r\n break;\r\n case \"M\":\r\n month = getName(\"M\", monthNamesShort, monthNames);\r\n break;\r\n case \"y\":\r\n year = getNumber(\"y\");\r\n break;\r\n case \"@\":\r\n var date = new Date(getNumber(\"@\"));\r\n year = date.getFullYear();\r\n month = date.getMonth() + 1;\r\n day = date.getDate();\r\n break;\r\n case \"!\":\r\n var date = new Date((getNumber(\"!\") - _helper._ticksTo1970) / 10000);\r\n year = date.getFullYear();\r\n month = date.getMonth() + 1;\r\n day = date.getDate();\r\n break;\r\n case \"'\":\r\n if (lookAhead(\"'\")) {\r\n checkLiteral();\r\n } else {\r\n literal = true;\r\n }\r\n break;\r\n default:\r\n checkLiteral();\r\n }\r\n }\r\n }\r\n if (year == -1) {\r\n year = new Date().getFullYear();\r\n } else if (year < 100) {\r\n year += new Date().getFullYear() - new Date().getFullYear() % 100 +\r\n (year <= shortYearCutoff ? 0 : -100);\r\n }\r\n if (doy > -1) {\r\n month = 1;\r\n day = doy;\r\n do {\r\n let dim = _helper._getDaysInMonth(year, month - 1);\r\n if (day <= dim) {\r\n break;\r\n }\r\n month++;\r\n day -= dim;\r\n } while (true);\r\n }\r\n let result = _helper._daylightSavingAdjust(new Date(year, month - 1, day));\r\n if (result.getFullYear() != year || result.getMonth() + 1 != month || result.getDate() != day) {\r\n throw new Error(\"Invalid date\");\r\n } // E.g. 31/02/*\r\n return result;\r\n }\r\n\r\n /* Format a date object into a string value.\r\nThe format can be combinations of the following:\r\nd - day of month (no leading zero)\r\ndd - day of month (two digit)\r\no - day of year (no leading zeros)\r\noo - day of year (three digit)\r\nD - day name short\r\nDD - day name long\r\nm - month of year (no leading zero)\r\nmm - month of year (two digit)\r\nM - month name short\r\nMM - month name long\r\ny - year (two digit)\r\nyy - year (four digit)\r\n@ - Unix timestamp (ms since 01/01/1970)\r\n! - Windows ticks (100ns since 01/01/0001)\r\n'...' - literal text\r\n'' - single quote\r\n\r\n@param format string - the desired format of the date\r\n@param date Date - the date value to format\r\n@param settings Object - attributes include:\r\ndayNamesShort string[7] - abbreviated names of the days from Sunday (optional)\r\ndayNames string[7] - names of the days from Sunday (optional)\r\nmonthNamesShort string[12] - abbreviated names of the months (optional)\r\nmonthNames string[12] - names of the months (optional)\r\n@return string - the date in the above format */\r\n public static format(date: Date, format?: string, settings?): string {\r\n if (!date || isNaN(date as any)) {\r\n return \"\";\r\n }\r\n format = format || culture.info.dateFormat;\r\n let dayNamesShort = (settings ? settings.dayNamesShort : null) || _helper._defaults.dayNamesShort;\r\n let dayNames = (settings ? settings.dayNames : null) || _helper._defaults.dayNames;\r\n let monthNamesShort = (settings ? settings.monthNamesShort : null) || _helper._defaults.monthNamesShort;\r\n let monthNames = (settings ? settings.monthNames : null) || _helper._defaults.monthNames;\r\n // Check whether a format character is doubled\r\n let lookAhead = function (match) {\r\n let matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) == match);\r\n if (matches) {\r\n iFormat++;\r\n }\r\n return matches;\r\n };\r\n // Format a number, with leading zero if necessary\r\n let formatNumber = function (match, value, len) {\r\n let num = \"\" + value;\r\n if (lookAhead(match)) {\r\n while (num.length < len) {\r\n num = \"0\" + num;\r\n }\r\n }\r\n return num;\r\n };\r\n // Format a name, short or long as requested\r\n let formatName = function (match, value, shortNames, longNames) {\r\n return (lookAhead(match) ? longNames[value] : shortNames[value]);\r\n };\r\n let output = \"\";\r\n let literal = false;\r\n if (date) {\r\n for (var iFormat = 0; iFormat < format.length; iFormat++) {\r\n if (literal) {\r\n if (format.charAt(iFormat) == \"'\" && !lookAhead(\"'\")) {\r\n literal = false;\r\n } else {\r\n output += format.charAt(iFormat);\r\n }\r\n } else {\r\n switch (format.charAt(iFormat)) {\r\n case \"d\":\r\n output += formatNumber(\"d\", date.getDate(), 2);\r\n break;\r\n case \"D\":\r\n output += formatName(\"D\", date.getDay(), dayNamesShort, dayNames);\r\n break;\r\n case \"o\":\r\n output += formatNumber(\"o\",\r\n (date.getTime() - new Date(date.getFullYear(), 0, 0).getTime()) / 86400000, 3);\r\n break;\r\n case \"m\":\r\n output += formatNumber(\"m\", date.getMonth() + 1, 2);\r\n break;\r\n case \"M\":\r\n output += formatName(\"M\", date.getMonth(), monthNamesShort, monthNames);\r\n break;\r\n case \"y\":\r\n output += (lookAhead(\"y\") ? date.getFullYear() :\r\n (date.getFullYear() % 100 < 10 ? \"0\" : \"\") + date.getFullYear() % 100);\r\n break;\r\n case \"@\":\r\n output += date.getTime();\r\n break;\r\n case \"!\":\r\n output += date.getTime() * 10000 + _helper._ticksTo1970;\r\n break;\r\n case \"'\":\r\n if (lookAhead(\"'\")) {\r\n output += \"'\";\r\n } else {\r\n literal = true;\r\n }\r\n break;\r\n default:\r\n output += format.charAt(iFormat);\r\n }\r\n }\r\n }\r\n }\r\n return output;\r\n }\r\n\r\n public static formatTime(value: Date, inputMode: \"HourMinute\" | \"HourMinuteSecond\"): string {\r\n if (inputMode === \"HourMinute\") {\r\n return value ? (pad(value.getHours()) + \":\" + pad(value.getMinutes())) : \"\";\r\n } else if (inputMode === \"HourMinuteSecond\") {\r\n return value ? (pad(value.getHours()) + \":\" + pad(value.getMinutes()) + \":\" + pad(value.getSeconds())) : \"\";\r\n }\r\n return \"\";\r\n }\r\n\r\n public static now(): Date {\r\n return new Date();\r\n }\r\n\r\n public static addSeconds(d, seconds): Date {\r\n const future = new Date(d);\r\n future.setSeconds(d.getSeconds() + seconds);\r\n return future;\r\n }\r\n\r\n public static addMinutes(d, minutes): Date {\r\n const future = new Date(d);\r\n future.setMinutes(d.getMinutes() + minutes);\r\n return future;\r\n }\r\n\r\n public static addHours(d, hours): Date {\r\n const future = new Date(d);\r\n future.setHours(d.getHours() + hours);\r\n return future;\r\n }\r\n\r\n public static addDays(d, days) {\r\n const future = new Date(d);\r\n future.setDate(d.getDate() + days);\r\n return future;\r\n }\r\n\r\n public static getDaysBetween(startDate, endDate): number {\r\n return Math.round((endDate - startDate) / (1000.0 * 3600.0 * 24.0));\r\n }\r\n\r\n public static getMsBetween(startDate, endDate): number {\r\n return endDate.getTime() - startDate.getTime();\r\n }\r\n\r\n public static onlyDate(d: Date): Date {\r\n if (d == null) {\r\n return d;\r\n }\r\n const result = new Date(d);\r\n result.setHours(0, 0, 0, 0);\r\n return result;\r\n }\r\n\r\n public static equal(date1: Date, date2: Date): boolean {\r\n return (date1 && date1.getTime()) === (date2 && date2.getTime());\r\n }\r\n\r\n}\r\n\r\nfunction pad(nr: number): string {\r\n if (nr < 10) {\r\n return \"0\" + nr.toString();\r\n } else {\r\n return nr.toString();\r\n }\r\n}\r\n","import { ISlickColumn } from \"../slick.core\";\r\nimport { UILang } from \"../../core/lang\";\r\nimport { helper } from \"../../core/helper\";\r\nimport { Dialog } from \"../../ui/dialog\";\r\nimport { IJSLGrid, ISlickCreatorOptions } from \"../../index\";\r\nimport { VirtualRenderComponent } from \"../../components/virtual-render/VirtualRenderComponent\";\r\nimport { JSLRender } from \"jsl-render\";\r\n\r\nexport class ExcelFilter {\r\n\r\n private static convertRemToPixels(rem: number) {\r\n return rem * parseFloat(getComputedStyle(document.documentElement).fontSize);\r\n }\r\n\r\n public constructor(private grid: IJSLGrid<any>) {\r\n }\r\n\r\n public async show(col: ISlickColumn): Promise<void> {\r\n let values: { [key: string]: any[] } | string[];\r\n const filters = this.grid.getFilters();\r\n const currentFilters = filters.filter((f) => f.columnId === col.id);\r\n const mode = (this.grid.getOptions() as ISlickCreatorOptions).mode;\r\n\r\n const filterOptions = (this.grid.getOptions() as ISlickCreatorOptions).getFilterValues;\r\n if (filterOptions == null) {\r\n if (mode === \"client\") {\r\n // remove any filters for this column\r\n if (currentFilters.length > 0) {\r\n this.grid.clearFilter(col.id);\r\n }\r\n values = this.getDistinctValues(col);\r\n } else {\r\n throw new Error(\"getFilterValues option has to be set when filter mode = server\");\r\n }\r\n } else {\r\n values = await filterOptions(col);\r\n }\r\n\r\n let oldCheckedValues = {};\r\n if (currentFilters.length > 0) {\r\n for (const f of currentFilters) {\r\n if ((f as any)._checkedValues) {\r\n oldCheckedValues = (f as any)._checkedValues;\r\n }\r\n if (mode === \"client\") {\r\n filters.push(f);\r\n }\r\n }\r\n if (mode === \"client\") {\r\n this.grid.refreshFilters();\r\n }\r\n }\r\n\r\n const dlg = document.createElement(\"div\");\r\n dlg.classList.add(\"jsl-dialog-overlay\");\r\n dlg.innerHTML = '<div class=\"jsl-dialog\" style=\"width:50vw;min-height:50vh;\"><div class=\"dlg-header\">' + UILang.grid.Filter + '</div><div class=\"dlg-body\" style=\"max-height:calc(100vh - 7.5rem)\"></div>' +\r\n '<div class=\"dlg-footer\">' +\r\n '<button class=\"jsl-button ok-button\">' + UILang.core.Ok + \"</button>\" +\r\n (currentFilters.length > 0 ? ('<button class=\"jsl-button clear-button\">' + UILang.grid.ClearFilter + '</button>') : \"\") +\r\n '<button class=\"jsl-button close-button\">' + UILang.core.Cancel + \"</button>\" +\r\n \"</div></div>\";\r\n const dlgBody = dlg.querySelector(\".dlg-body\") as HTMLElement;\r\n\r\n const id = helper.newDomGuid();\r\n\r\n const search = document.createElement(\"div\");\r\n search.innerHTML = \"<input type='text' placeholder='\" + UILang.grid.Search + \"' />\";\r\n dlgBody.appendChild(search);\r\n\r\n const cbAllContainer = document.createElement(\"div\");\r\n const cbAll: HTMLInputElement = document.createElement(\"input\");\r\n cbAll.type = \"checkbox\";\r\n cbAll.id = id;\r\n cbAllContainer.appendChild(cbAll);\r\n const cbAllLabel: HTMLLabelElement = document.createElement(\"label\");\r\n cbAllLabel.setAttribute(\"for\", id);\r\n cbAllLabel.textContent = UILang.core.All;\r\n cbAllLabel.style.cursor = \"pointer\";\r\n cbAllLabel.style.marginLeft = \"0.2rem\";\r\n cbAllContainer.appendChild(cbAllLabel);\r\n dlgBody.appendChild(cbAllContainer);\r\n\r\n const sortedValues = [];\r\n if (Array.isArray(values)) {\r\n for (const x of values) {\r\n sortedValues.push({ id: [x], txt: x ?? \"\" });\r\n }\r\n } else {\r\n for (const o in values) {\r\n if (values.hasOwnProperty(o)) {\r\n sortedValues.push({ id: values[o], txt: o ?? \"\" });\r\n }\r\n }\r\n }\r\n // TODO: use custom comparer when available\r\n sortedValues.sort((a, b) => a.txt.toLocaleLowerCase() < b.txt.toLocaleLowerCase() ? -1 : (a.txt.toLocaleLowerCase() > b.txt.toLocaleLowerCase() ? 1 : 0));\r\n\r\n let visibleValues = sortedValues;\r\n const checkedValues = { ...oldCheckedValues };\r\n\r\n const cbContainer = document.createElement(\"div\");\r\n dlgBody.appendChild(cbContainer);\r\n const rowHeight = Math.round(ExcelFilter.convertRemToPixels(1.4));\r\n let height = sortedValues.length * rowHeight;\r\n height = Math.min(height, Math.round(window.innerHeight - ExcelFilter.convertRemToPixels(13)));\r\n const vr = new VirtualRenderComponent({\r\n data: visibleValues,\r\n renderRow: (args) => {\r\n args.container.attr.style[\"padding-left\"] = \"1rem\";\r\n args.container.children.push({\r\n tag: \"input\",\r\n attr: {\r\n id: id + \"_\" + args.index,\r\n checked: checkedValues[args.rowData.id[0]] ? \"checked\" : undefined,\r\n change: (_, node) => {\r\n if (node.dom.checked) {\r\n for (const selId of args.rowData.id) {\r\n checkedValues[selId] = true;\r\n }\r\n } else {\r\n for (const selId of args.rowData.id) {\r\n delete checkedValues[selId];\r\n }\r\n }\r\n // check if all values or none are checked\r\n const allChecked = Object.getOwnPropertyNames(checkedValues).length === sortedValues.length;\r\n const allCb: HTMLInputElement = dlgBody.querySelector(\"#\" + id) as HTMLInputElement;\r\n allCb.checked = allChecked;\r\n },\r\n type: \"checkbox\"\r\n }\r\n });\r\n args.container.children.push({\r\n tag: \"label\",\r\n attr: {\r\n for: id + \"_\" + args.index,\r\n style: \"margin-left:0.2rem;cursor:pointer\"\r\n },\r\n raw: true,\r\n content: args.rowData.txt\r\n });\r\n }\r\n ,\r\n rowHeight,\r\n style: \"height:\" + height + \"px\"\r\n });\r\n\r\n const renderer = new JSLRender(cbContainer, false);\r\n renderer.render(vr);\r\n\r\n search.addEventListener(\"input\", (evt) => {\r\n const term = ((evt.target as HTMLInputElement).value ?? \"\").toLowerCase();\r\n if (term) {\r\n visibleValues = sortedValues.filter((x) =>\r\n (x.txt ?? \"\").toLowerCase().indexOf(term) >= 0);\r\n } else {\r\n visibleValues = sortedValues;\r\n }\r\n vr.setData(visibleValues);\r\n renderer.refresh();\r\n });\r\n\r\n cbAll.addEventListener(\"change\", () => {\r\n for (let i = 0; i < visibleValues.length; i++) {\r\n // if (cbAll.checked) {\r\n // checkedValues[visibleValues[i].id] = true;\r\n // } else {\r\n // delete checkedValues[visibleValues[i].id];\r\n // }\r\n if (cbAll.checked) {\r\n for (const selId of visibleValues[i].id) {\r\n checkedValues[selId] = true;\r\n }\r\n } else {\r\n for (const selId of visibleValues[i].id) {\r\n delete checkedValues[selId];\r\n }\r\n }\r\n }\r\n renderer.refresh();\r\n });\r\n\r\n document.body.appendChild(dlg);\r\n const dlgObj = Dialog(dlg, {\r\n autoOpen: true, onClose: () => {\r\n dlg.innerHTML = \"\";\r\n dlg.parentElement.removeChild(dlg);\r\n }\r\n });\r\n\r\n const dlgOkButton = dlg.querySelector(\".dlg-footer .ok-button\");\r\n dlgOkButton.addEventListener(\"click\", (evt) => {\r\n\r\n const selLength = Object.getOwnPropertyNames(checkedValues).length;\r\n const allChecked = selLength === sortedValues.length;\r\n const anyChecked = selLength > 0;\r\n this.grid.clearFilter(col.id, true);\r\n if (!allChecked && anyChecked) {\r\n // something (but not everything) was selected -> filter\r\n const filterObject = {\r\n field: col.field, columnId: col.id, match: mode === \"server\" ? () => true : (item, field) => {\r\n return !!checkedValues[this.grid.getDataItemValueForColumn(item, col)];\r\n }\r\n };\r\n (filterObject as any)._checkedValues = checkedValues;\r\n this.grid.addFilter(filterObject, true);\r\n }\r\n this.grid.refreshFilters();\r\n dlgObj.close();\r\n });\r\n\r\n const dlgCancelButton = dlg.querySelector(\".dlg-footer .close-button\");\r\n dlgCancelButton.addEventListener(\"click\", (evt) => {\r\n dlgObj.close();\r\n });\r\n\r\n const dlgClearButton = dlg.querySelector(\".dlg-footer .clear-button\");\r\n if (dlgClearButton != null) {\r\n dlgClearButton.addEventListener(\"click\", (evt) => {\r\n this.grid.clearFilter(col.id);\r\n dlgObj.close();\r\n });\r\n }\r\n }\r\n\r\n // private updateStateOfAllCheckebox(dlgBody: HTMLElement, id: string) {\r\n // let counter = 0;\r\n // let el: HTMLInputElement;\r\n // const allCb: HTMLInputElement = dlgBody.querySelector(\"#\" + id) as HTMLInputElement;\r\n // // tslint:disable-next-line: no-conditional-assignment\r\n // while (null != (el = dlgBody.querySelector(\"#\" + id + \"_\" + counter) as HTMLInputElement)) {\r\n // if (el.parentElement.style.display !== \"none\" && !el.checked) {\r\n // allCb.checked = false;\r\n // return;\r\n // }\r\n // counter++;\r\n // }\r\n // allCb.checked = true;\r\n // }\r\n\r\n // private checkAllVisibleBoxes(el: HTMLElement, state: boolean) {\r\n // const checkboxes = el.querySelectorAll(\"input\");\r\n // for (let i = 0; i < checkboxes.length; i++) {\r\n // if (checkboxes[i].type === \"checkbox\" &&\r\n // checkboxes[i].parentElement.style.display !== \"none\") {\r\n // checkboxes[i].checked = state;\r\n // }\r\n // }\r\n // }\r\n\r\n private getDistinctValues(col: ISlickColumn): any {\r\n const textToValues = {};\r\n for (let idx = 0, len = this.grid.getDataLength(); idx < len; idx++) {\r\n const item = this.grid.getDataItem(idx);\r\n const value = this.grid.getDataItemValueForColumn(item, col);\r\n const text = this.grid.getFormattedValue(col, value, item);\r\n let valueList = textToValues[text];\r\n if (valueList == null) {\r\n valueList = textToValues[text] = [];\r\n }\r\n if (valueList.indexOf(value) < 0) {\r\n valueList.push(value);\r\n }\r\n }\r\n return textToValues;\r\n }\r\n\r\n\r\n}\r\n","\r\nexport class UILang {\r\n public static core = {\r\n All: \"All\",\r\n Ok: \"Ok\",\r\n Cancel: \"Cancel\"\r\n };\r\n\r\n public static grid = {\r\n Sort: \"Sort\",\r\n Asc: \"Ascending\",\r\n Desc: \"Descending\",\r\n Filter: \"Filter\",\r\n ClearFilter: \"Clear Filter\",\r\n Search: \"Search\"\r\n };\r\n\r\n public static dropDown = {\r\n SelectOption: \"Select an option...\",\r\n SelectOptionMultiple: \"Enter options...\",\r\n NoResults: \"No results\",\r\n NoOptions: \"No options available\",\r\n MaxSelection: \"A maximum of {max} items can be selected\",\r\n AlreadyInUse: \"That tag is already in use\",\r\n Search: \"Search ...\"\r\n };\r\n}\r\n","export abstract class helper {\r\n\r\n public static emptyGuid = \"00000000-0000-0000-0000-000000000000\";\r\n\r\n public static random() {\r\n return (Math.random() * (new Date().getTime() || 1)) % 1;\r\n }\r\n\r\n public static newGuid() {\r\n return \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g, function (c) { const r = helper.random() * 16 | 0, v = c == \"x\" ? r : r & 0x3 | 0x8; return v.toString(16); });\r\n }\r\n\r\n public static newSeqGuid() {\r\n let d = new Date().getTime().toString(16);\r\n while (d.length < 12) {\r\n d = \"0\" + d;\r\n }\r\n if (d.length > 12) {\r\n d = d.substring(0, 12);\r\n }\r\n return \"xxxxxxxx-xxxx-4xxx-yxxx-\".replace(/[xy]/g, function (c) { var r = helper.random() * 16 | 0, v = c == \"x\" ? r : r & 0x3 | 0x8; return v.toString(16); })\r\n + d;\r\n }\r\n\r\n public static newDomGuid() {\r\n return \"axxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g, function (c) { const r = helper.random() * 16 | 0, v = c == \"x\" ? r : r & 0x3 | 0x8; return v.toString(16); });\r\n }\r\n\r\n public static isObject(obj) {\r\n return obj ? Object.prototype.toString.call(obj) === \"[object Object]\" : false;\r\n }\r\n\r\n public static isGuid(id) {\r\n if (!id) {\r\n return false;\r\n }\r\n return /^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/.test(id);\r\n }\r\n\r\n public static getParams(): any {\r\n var match,\r\n pl = /\\+/g, // Regex for replacing addition symbol with a space\r\n search = /([^&=]+)=?([^&]*)/g,\r\n decode = function (s) { return decodeURIComponent(s.replace(pl, \" \")); },\r\n query = window.location.search.substring(1);\r\n\r\n var urlParams = {};\r\n while (match = search.exec(query))\r\n urlParams[decode(match[1])] = decode(match[2]);\r\n return urlParams;\r\n }\r\n\r\n public static isCyclic(o): boolean {\r\n const seenObjects = [];\r\n\r\n function detect(obj) {\r\n if (obj && typeof obj === 'object') {\r\n if (seenObjects.indexOf(obj) !== -1) {\r\n return true;\r\n }\r\n seenObjects.push(obj);\r\n for (const key in obj) {\r\n if (obj.hasOwnProperty(key) && detect(obj[key])) {\r\n return true;\r\n }\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n return detect(o);\r\n }\r\n\r\n public static correctDates(data: any): any {\r\n for (let key in data) {\r\n if (data[key] && typeof data[key] === \"object\")\r\n data[key] = helper.correctDates(data[key]);\r\n //else if (data[key] && data[key].toString().substring(0, 6) === \"/Date\\(\")\r\n // data[key] = new Date(parseInt(data[key].substr(6))+ timezone_offset);\r\n else if (data[key] && dateISO.test(data[key].toString())) {\r\n let x = (Date as any).fromString(data[key]);\r\n data[key] = new Date(x.getTime() + (x.getTimezoneOffset() * 60000));\r\n }\r\n }\r\n return data;\r\n }\r\n\r\n}\r\n\r\nvar dateISO = /\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}.*/i;\r\n\r\n(function () {\r\n\r\n var d = window.Date as any;\r\n var regexIso8601 = /^(\\d{4})-(\\d{2})-(\\d{2})((T)(\\d{2}):(\\d{2})(:(\\d{2})(\\.\\d*)?)?)?(Z)?$/;\r\n\r\n\r\n d._myparse = function (v) {\r\n\r\n if (v.charAt(v.length - 1) !== \"Z\")\r\n v += \"Z\";\r\n var m = regexIso8601.exec(v);\r\n\r\n if (m) {\r\n return new Date(Date.UTC(+m[1], +m[2] - 1, +m[3], +m[6] || 0, +m[7] || 0, +m[9] || 0, parseInt((+m[10]) * 1000 as any) || 0));\r\n //return Date.UTC(\r\n // m[1],\r\n // (m[2] || 1) - 1,\r\n // m[3] || 1,\r\n // m[4] - (m[8] ? m[8] + m[9] : 0) || 0,\r\n // m[5] - (m[8] ? m[8] + m[10] : 0) || 0,\r\n // m[6] || 0,\r\n // ((m[7] || 0) + '00').substr(0, 3)\r\n //);\r\n }\r\n\r\n return d.parse.apply(this, arguments);\r\n };\r\n\r\n\r\n d.fromString = function (v) {\r\n return d._myparse(v);\r\n };\r\n\r\n})();\r\n","import \"./dialog.css\";\r\n\r\nexport interface IDialogOptions {\r\n autoOpen?: boolean;\r\n autoFocus?: string;\r\n modal?: boolean;\r\n closeOnEscape?: boolean;\r\n OkOnEnter?: boolean;\r\n closeOnOverlayClick?: boolean;\r\n onClose?: () => void | boolean;\r\n onOpen?: () => void;\r\n}\r\n\r\nconst defaultOptions: IDialogOptions = {\r\n autoOpen: false,\r\n autoFocus: \"input,button,textarea\",\r\n closeOnOverlayClick: true,\r\n modal: true,\r\n closeOnEscape: true\r\n};\r\n\r\nexport class JSLDialog {\r\n\r\n private overlay: HTMLElement;\r\n private el: HTMLElement;\r\n\r\n private onKeydownEvent: (args: any) => void;\r\n\r\n constructor(el: HTMLElement, private options: IDialogOptions) {\r\n this.overlay = el;\r\n this.el = el.firstElementChild as HTMLElement;\r\n if (this.options.closeOnOverlayClick) {\r\n this.overlay.addEventListener(\"mousedown\", (evt) => {\r\n if (evt.target === this.overlay) {\r\n this.close();\r\n }\r\n });\r\n this.overlay.addEventListener(\"touchstart\", (evt) => {\r\n if (evt.target === this.overlay) {\r\n this.close();\r\n }\r\n });\r\n }\r\n }\r\n\r\n public open(modal?: boolean) {\r\n\r\n if ((modal !== undefined && !modal) || !this.options.modal) {\r\n this.overlay.style.background = \"transparent\";\r\n this.overlay.style.pointerEvents = \"none\";\r\n }\r\n\r\n this.overlay.style.display = \"block\";\r\n\r\n const $footer = this.el.querySelector(\".dlg-footer\");\r\n const $body = this.el.querySelector(\".dlg-body\");\r\n if ($footer != null && $body != null) {\r\n // TODO ?\r\n }\r\n if (this.options.autoFocus) {\r\n setTimeout(() => {\r\n const firstInput = this.el.querySelector(this.options.autoFocus) as HTMLInputElement;\r\n if (firstInput != null) {\r\n firstInput.focus();\r\n }\r\n }, 0);\r\n }\r\n\r\n if (this.options.closeOnEscape || this.options.OkOnEnter) {\r\n this.onKeydownEvent = (args) => {\r\n if (args.keyCode === 27 && this.options.closeOnEscape) { // escape\r\n this.close();\r\n } else if (args.keyCode === 13 && this.options.OkOnEnter) { // ok\r\n const ok_btn: HTMLButtonElement | HTMLLinkElement = this.el.querySelector(\".dlg-ok-btn\");\r\n if (ok_btn != null) {\r\n (document.activeElement as HTMLElement)?.blur();\r\n ok_btn.click();\r\n }\r\n }\r\n };\r\n document.addEventListener(\"keydown\", this.onKeydownEvent);\r\n }\r\n\r\n if (this.options.onOpen) {\r\n this.options.onOpen();\r\n }\r\n }\r\n\r\n public close() {\r\n if (this.options.onClose) {\r\n if (this.options.onClose() === false) {\r\n return;\r\n }\r\n }\r\n this.overlay.style.display = \"none\";\r\n\r\n if (this.onKeydownEvent != null) {\r\n document.removeEventListener(\"keydown\", this.onKeydownEvent);\r\n }\r\n }\r\n\r\n public getOverlay() {\r\n return this.overlay;\r\n }\r\n\r\n}\r\n\r\nexport function Dialog(input: HTMLElement | string, options?: IDialogOptions): JSLDialog {\r\n\r\n const o = { ...defaultOptions, ...options };\r\n\r\n let el: HTMLElement;\r\n\r\n if (typeof input === \"string\") {\r\n el = document.querySelector(input);\r\n } else {\r\n el = input;\r\n }\r\n\r\n const result = new JSLDialog(el, o);\r\n\r\n if (!o.autoOpen) {\r\n el.style.display = \"none\";\r\n } else {\r\n result.open();\r\n }\r\n return result;\r\n\r\n}\r\n","import \"./VirtualRenderStyle.scss\";\r\nimport { IJSLComponent, IJSLVNode, JSLRender } from \"jsl-render\";\r\n\r\nexport interface IVirtualArg {\r\n index: number;\r\n rowData: any;\r\n container: IJSLVNode;\r\n}\r\n\r\nexport interface IVirtualRenderOptions {\r\n data: any[];\r\n renderRow: (args: IVirtualArg) => string | IJSLVNode | IJSLComponent | void;\r\n rowHeight?: number;\r\n rowTag?: string;\r\n bufferSizeInPx?: number;\r\n viewportSizeInPX?: number;\r\n class?: string;\r\n style?: string;\r\n}\r\n\r\nexport class VirtualRenderComponent implements IJSLComponent {\r\n\r\n public State: {scrollPos: number, renderer?: JSLRender} = { scrollPos: 0};\r\n\r\n private options: IVirtualRenderOptions;\r\n\r\n constructor(options: IVirtualRenderOptions) {\r\n const defaultOptions: IVirtualRenderOptions = {\r\n data: null,\r\n renderRow: null,\r\n bufferSizeInPx: 200,\r\n rowHeight: 20,\r\n rowTag: \"div\",\r\n viewportSizeInPX: window.innerHeight\r\n };\r\n this.options = { ...defaultOptions, ...options };\r\n }\r\n\r\n public isEqual(node: IJSLComponent): boolean {\r\n return (this as any).__proto__ === (node as any).__proto__;\r\n }\r\n\r\n public setData(data: any[]) {\r\n this.options.data = data;\r\n }\r\n\r\n public onInit(renderer: JSLRender) {\r\n this.State.renderer = renderer;\r\n }\r\n\r\n public render(): IJSLVNode {\r\n const o = this.options;\r\n const vrBody = {\r\n tag: \"div\",\r\n attr: { class: \"v-r-child\", style: \"height:\" + (o.data.length * o.rowHeight) + \"px;position:relative\" },\r\n children: this.getChildren()\r\n };\r\n const vrContainer = {\r\n tag: \"div\", attr: {\r\n class: \"v-r-comp \" + (o.class ?? \"\"),\r\n style: \"overflow-y:auto;\" + (o.style ?? \"\"),\r\n scroll: (e, node: IJSLVNode) => {\r\n const newScrollPos = node.dom.scrollTop;\r\n if (Math.abs(this.State.scrollPos - newScrollPos) < o.bufferSizeInPx) {\r\n return false;\r\n }\r\n this.State.scrollPos = newScrollPos;\r\n vrBody.children = this.getChildren();\r\n (node.children[0] as IJSLVNode).children = [{tag: \"dummy\"}];\r\n (this.State.renderer as any).updateNode(node.children[0], vrBody);\r\n return false;\r\n }\r\n }, children: [vrBody]\r\n };\r\n return vrContainer;\r\n }\r\n\r\n // public scrollRowToTop(idx: number) {\r\n\r\n // }\r\n\r\n // public scrollRowToCenter(idx: number) {\r\n\r\n // }\r\n\r\n // public scrollRowToBottom(idx: number) {\r\n\r\n // }\r\n\r\n private getChildren() {\r\n const o = this.options;\r\n const children = [];\r\n const viewport = {\r\n top: Math.floor((this.State.scrollPos - o.bufferSizeInPx) / o.rowHeight),\r\n bottom: Math.ceil((this.State.scrollPos + o.viewportSizeInPX + o.bufferSizeInPx) / o.rowHeight)\r\n };\r\n for (let idx = viewport.top; idx < viewport.bottom; idx++) {\r\n if (idx < 0 || idx >= o.data.length) {\r\n continue;\r\n }\r\n const node: IJSLVNode = {\r\n tag: o.rowTag, attr: {\r\n style: {\r\n top: (idx * o.rowHeight) + \"px\",\r\n height: o.rowHeight + \"px\",\r\n position: \"absolute\",\r\n left: \"0\",\r\n right: \"0\"\r\n }\r\n }, children: []\r\n };\r\n const result = o.renderRow({ index: idx, container: node, rowData: o.data[idx] });\r\n if (typeof result === \"string\") {\r\n node.content = result;\r\n } else if (result != null) {\r\n node.children.push(result as (IJSLVNode | IJSLComponent));\r\n }\r\n\r\n children.push(node);\r\n }\r\n return children;\r\n }\r\n\r\n}\r\n","/**\r\n * Row Move Manager options:\r\n * cssClass: A CSS class to be added to the menu item container.\r\n * columnId: Column definition id (defaults to \"_move\")\r\n * cancelEditOnDrag: Do we want to cancel any Editing while dragging a row (defaults to false)\r\n * disableRowSelection: Do we want to disable the row selection? (defaults to false)\r\n * hideRowMoveShadow: Do we want to hide the row move shadow clone? (defaults to true)\r\n * rowMoveShadowMarginTop: When row move shadow is shown, optional margin-top (defaults to 0)\r\n * rowMoveShadowMarginLeft: When row move shadow is shown, optional margin-left (defaults to 0)\r\n * rowMoveShadowOpacity: When row move shadow is shown, what is its opacity? (defaults to 0.95)\r\n * rowMoveShadowScale: When row move shadow is shown, what is its size scale? (default to 0.75)\r\n * singleRowMove: Do we want a single row move? Setting this to false means that it's a multple row move (defaults to false)\r\n * width: Width of the column\r\n * usabilityOverride: Callback method that user can override the default behavior of the row being moveable or not\r\n *\r\n */\r\nimport \"./slick.rowmovemanager.css\";\r\nimport { jQueryReplacement, IjQueryWrapper } from \"../../core/jq\";\r\nimport { Slick } from \"../slick.core\";\r\n\r\nlet $ = jQueryReplacement;\r\n\r\n// register namespace\r\n$.deepExtend(window, {\r\n \"Slick\": {\r\n \"RowMoveManager\": RowMoveManager\r\n }\r\n});\r\n\r\nexport function RowMoveManager(options) {\r\n var _grid;\r\n var _canvas: HTMLDivElement;\r\n var _dragging;\r\n var _self = this;\r\n var _usabilityOverride = null;\r\n var _handler = new Slick.EventHandler();\r\n var _defaults = {\r\n columnId: \"_move\",\r\n cssClass: null,\r\n cancelEditOnDrag: false,\r\n disableRowSelection: false,\r\n hideRowMoveShadow: true,\r\n rowMoveShadowMarginTop: 0,\r\n rowMoveShadowMarginLeft: 0,\r\n rowMoveShadowOpacity: 0.95,\r\n rowMoveShadowScale: 0.75,\r\n singleRowMove: false,\r\n width: 40,\r\n };\r\n\r\n\r\n // user could override the expandable icon logic from within the options or after instantiating the plugin\r\n if (options && typeof options.usabilityOverride === 'function') {\r\n usabilityOverride(options.usabilityOverride);\r\n }\r\n\r\n function init(grid) {\r\n options = $.deepExtend({}, _defaults, options);\r\n _grid = grid;\r\n _canvas = _grid.getCanvasNode();\r\n _handler\r\n .subscribe(_grid.onDragInit, handleDragInit)\r\n .subscribe(_grid.onDragStart, handleDragStart)\r\n .subscribe(_grid.onDrag, handleDrag)\r\n .subscribe(_grid.onDragEnd, handleDragEnd);\r\n }\r\n\r\n function destroy() {\r\n _handler.unsubscribeAll();\r\n }\r\n\r\n function setOptions(newOptions) {\r\n options = $.shallowExtend({}, options, newOptions);\r\n }\r\n\r\n function handleDragInit(e) {\r\n // // prevent the grid from cancelling drag'n'drop by default\r\n // e.stopImmediatePropagation();\r\n }\r\n\r\n function handleDragStart(e, dd) {\r\n var cell = _grid.getCellFromEvent(e);\r\n var currentRow = cell && cell.row;\r\n var dataContext = _grid.getDataItem(currentRow);\r\n\r\n if (!checkUsabilityOverride(currentRow, dataContext, _grid)) {\r\n return;\r\n }\r\n\r\n if (options.cancelEditOnDrag && _grid.getEditorLock().isActive()) {\r\n _grid.getEditorLock().cancelCurrentEdit();\r\n }\r\n\r\n if (_grid.getEditorLock().isActive() || !isHandlerColumn(cell.cell)) {\r\n return false;\r\n }\r\n\r\n _dragging = true;\r\n e.stopImmediatePropagation();\r\n\r\n // optionally create a shadow element of the row so that we can see all the time which row exactly we're dragging\r\n if (!options.hideRowMoveShadow) {\r\n var $slickRowElm = $(_grid.getCellNode(cell.row, cell.cell)).closestClass('slick-row');\r\n if ($slickRowElm.length) {\r\n dd.clonedSlickRow = $($slickRowElm[0].cloneNode(true))\r\n .addClass('slick-reorder-shadow-row')\r\n .css(\"marginTop\", options.rowMoveShadowMarginTop || 0)\r\n .css(\"marginLeft\", options.rowMoveShadowMarginLeft || 0)\r\n .css(\"opacity\", options.rowMoveShadowOpacity || 0.95)\r\n .css(\"transform\", \"scale(\" + options.rowMoveShadowScale + \")\")\r\n .css(\"display\", \"none\")\r\n .appendTo(_canvas);\r\n }\r\n }\r\n\r\n var selectedRows = options.singleRowMove ? [cell.row] : _grid.getSelectedRows();\r\n\r\n if (selectedRows.length === 0 || selectedRows.indexOf(cell.row) === -1) {\r\n selectedRows = [cell.row];\r\n if (!options.disableRowSelection) {\r\n _grid.setSelectedRows(selectedRows);\r\n }\r\n }\r\n\r\n var rowHeight = _grid.getOptions().rowHeight;\r\n\r\n dd.selectedRows = selectedRows;\r\n\r\n const canvasWidth = _canvas.getBoundingClientRect().width;\r\n\r\n dd.selectionProxy = $(document.createElement(\"div\")) //\"<div class='slick-reorder-proxy'/>\")\r\n .addClass(\"slick-reorder-proxy\")\r\n .css(\"position\", \"absolute\")\r\n .css(\"zIndex\", \"99999\")\r\n .css(\"width\", canvasWidth) // $(_canvas).innerWidth())\r\n .css(\"height\", rowHeight * selectedRows.length)\r\n .css(\"display\", \"none\")\r\n .appendTo(_canvas);\r\n\r\n dd.guide = $(document.createElement(\"div\")) // \"<div class='slick-reorder-guide'/>\")\r\n .addClass(\"slick-reorder-guide\")\r\n .css(\"position\", \"absolute\")\r\n .css(\"zIndex\", \"99998\")\r\n .css(\"width\", canvasWidth)\r\n .css(\"top\", -1000)\r\n .appendTo(_canvas);\r\n\r\n dd.insertBefore = -1;\r\n }\r\n\r\n function handleDrag(e, dd) {\r\n if (!_dragging) {\r\n return;\r\n }\r\n \r\n // e.preventDefault();\r\n e.stopImmediatePropagation();\r\n\r\n var top = dd.pageY - $(_canvas).offset().top;\r\n dd.selectionProxy.css(\"top\", top - 5).css(\"display\", \"\"); //.show();\r\n\r\n // if the row move shadow is enabled, we'll also make it follow the mouse cursor\r\n if (dd.clonedSlickRow) {\r\n var offsetY = dd.pageY - $(_canvas).offset().top;\r\n dd.clonedSlickRow.css(\"top\", offsetY - 6).css(\"display\", \"\"); //.show();\r\n }\r\n\r\n var insertBefore = Math.max(0, Math.min(Math.round(top / _grid.getOptions().rowHeight), _grid.getDataLength()));\r\n if (insertBefore !== dd.insertBefore) {\r\n var eventData = {\r\n \"grid\": _grid,\r\n \"rows\": dd.selectedRows,\r\n \"insertBefore\": insertBefore\r\n };\r\n\r\n if (_self.onBeforeMoveRows.notify(eventData) === false) {\r\n dd.canMove = false;\r\n } else {\r\n dd.canMove = true;\r\n }\r\n\r\n // if there's a UsabilityOverride defined, we also need to verify that the condition is valid\r\n if (_usabilityOverride && dd.canMove) {\r\n var insertBeforeDataContext = _grid.getDataItem(insertBefore);\r\n dd.canMove = checkUsabilityOverride(insertBefore, insertBeforeDataContext, _grid);\r\n }\r\n\r\n // if the new target is possible we'll display the dark blue bar (representin the acceptability) at the target position\r\n // else it won't show up (it will be off the screen)\r\n if (!dd.canMove) {\r\n dd.guide.css(\"top\", -1000);\r\n } else {\r\n dd.guide.css(\"top\", insertBefore * _grid.getOptions().rowHeight);\r\n }\r\n\r\n dd.insertBefore = insertBefore;\r\n }\r\n }\r\n\r\n function handleDragEnd(e, dd) {\r\n if (!_dragging) {\r\n return;\r\n }\r\n _dragging = false;\r\n e.stopImmediatePropagation();\r\n\r\n if (dd.guide == null) {\r\n console.log(\"dd.guide\")\r\n } else\r\n dd.guide.remove();\r\n if (dd.selectionProxy == null) {\r\n console.log(\" dd.selectionProxy\")\r\n } else\r\n dd.selectionProxy.remove();\r\n if (dd.clonedSlickRow) {\r\n dd.clonedSlickRow.remove();\r\n dd.clonedSlickRow = null;\r\n }\r\n\r\n if (dd.canMove) {\r\n var eventData = {\r\n \"grid\": _grid,\r\n \"rows\": dd.selectedRows,\r\n \"insertBefore\": dd.insertBefore\r\n };\r\n // TODO: _grid.remapCellCssClasses ?\r\n _self.onMoveRows.notify(eventData);\r\n }\r\n }\r\n\r\n function getColumnDefinition() {\r\n return {\r\n id: options.columnId || \"_move\",\r\n name: \"\",\r\n field: \"move\",\r\n width: options.width || 40,\r\n behavior: \"selectAndMove\",\r\n selectable: false,\r\n resizable: false,\r\n cssClass: options.cssClass,\r\n formatter: moveIconFormatter\r\n };\r\n }\r\n\r\n function moveIconFormatter(row, cell, value, columnDef, dataContext, grid) {\r\n if (!checkUsabilityOverride(row, dataContext, grid)) {\r\n return null;\r\n } else {\r\n return { addClasses: \"cell-reorder dnd\", text: \"\" };\r\n }\r\n }\r\n\r\n function checkUsabilityOverride(row, dataContext, grid) {\r\n if (typeof _usabilityOverride === 'function') {\r\n return _usabilityOverride(row, dataContext, grid);\r\n }\r\n return true;\r\n }\r\n\r\n /**\r\n * Method that user can pass to override the default behavior or making every row moveable.\r\n * In order word, user can choose which rows to be an available as moveable (or not) by providing his own logic show/hide icon and usability.\r\n * @param overrideFn: override function callback\r\n */\r\n function usabilityOverride(overrideFn) {\r\n _usabilityOverride = overrideFn;\r\n }\r\n\r\n function isHandlerColumn(columnIndex) {\r\n return /move|selectAndMove/.test(_grid.getColumns()[columnIndex].behavior);\r\n }\r\n\r\n $.shallowExtend(this, {\r\n \"onBeforeMoveRows\": new Slick.Event(),\r\n \"onMoveRows\": new Slick.Event(),\r\n\r\n \"init\": init,\r\n \"destroy\": destroy,\r\n \"getColumnDefinition\": getColumnDefinition,\r\n \"setOptions\": setOptions,\r\n \"usabilityOverride\": usabilityOverride,\r\n \"isHandlerColumn\": isHandlerColumn,\r\n \"pluginName\": \"RowMoveManager\"\r\n });\r\n}\r\n// })(jQuery);","import \"./ext.overlay.css\";\r\nimport { jQueryReplacement, IjQueryWrapper } from \"../../core/jq\";\r\nimport { Slick } from \"../slick.core\";\r\nimport { Moveable, IMoveEventArg } from \"../../interaction/moveable\";\r\nimport { EventHandler } from \"../../interaction/eventhandler\";\r\nimport { IJSLGrid } from \"../slick.creator\";\r\n\r\n\r\nconst selectinOverlayWidth = 1;\r\n\r\nlet $ = jQueryReplacement;\r\n\r\n// register namespace\r\n$.deepExtend(window, {\r\n \"Ext\": {\r\n \"Plugins\": {\r\n \"Overlays\": Overlays\r\n }\r\n }\r\n});\r\n\r\n\r\nexport function Overlays(options) {\r\n var $headerOverlay: IjQueryWrapper;\r\n var $rowOverlay: IjQueryWrapper;\r\n var selectionOverlay;\r\n\r\n var currentColumn;\r\n var handleDragging;\r\n var grid: IJSLGrid<any>;\r\n var self = this;\r\n var handler = new Slick.EventHandler();\r\n var dragDecorator;\r\n\r\n var defaults = {\r\n buttonCssClass: null,\r\n buttonImage: \"../images/down.gif\",\r\n decoratorWidth: 2\r\n };\r\n\r\n function init(g) {\r\n options = $.deepExtend({}, defaults, options);\r\n grid = g;\r\n\r\n dragDecorator = overlayRangeDecorator(grid);\r\n\r\n $headerOverlay = createRowHeaderOverlay(100);\r\n $rowOverlay = createRowHeaderOverlay(100);\r\n\r\n selectionOverlay = createSelectionOverlay();\r\n\r\n handler.subscribe(grid.onActiveCellChanged, activeCellChanged)\r\n .subscribe(grid.onColumnsResized, columnResized)\r\n .subscribe(grid.onScroll, gridScrolled);\r\n }\r\n\r\n function destroy() {\r\n handler.unsubscribeAll();\r\n }\r\n\r\n function createRowHeaderOverlay(zIndex) {\r\n return $(document.createElement(\"div\"))\r\n .addClass(\"header-overlay\")\r\n .css(\"position\", \"absolute\")\r\n .css(\"z-index\", zIndex)\r\n .appendTo(grid.getContainerNode());\r\n }\r\n\r\n function createSelectionOverlay() {\r\n var canvas = grid.getCanvasNode();\r\n var overlay = new Overlay(canvas, true);\r\n return overlay;\r\n }\r\n\r\n function activeCellChanged(e, args) {\r\n dragDecorator.hide();\r\n\r\n moveSelectionOverlay(e, args);\r\n moveHeaderRowOverlays(e, args);\r\n }\r\n\r\n function columnResized(e, args) {\r\n moveHeaderRowOverlays(e, args);\r\n moveSelectionOverlay(e, args);\r\n }\r\n\r\n function gridScrolled(e, args) {\r\n moveHeaderRowOverlays(e, args);\r\n moveSelectionOverlay(e, args);\r\n }\r\n\r\n function moveHeaderRowOverlays(e, args) {\r\n if (typeof args.cell != 'undefined') {\r\n currentColumn = args.cell;\r\n } else {\r\n if (!currentColumn) {\r\n return;\r\n }\r\n }\r\n\r\n if (!grid.getActiveCell()) {\r\n $rowOverlay.css(\"display\", \"none\");\r\n return;\r\n }\r\n\r\n $rowOverlay.css(\"display\", \"\");\r\n\r\n var headerHeight: number = grid.getContainerNode().querySelector('.slick-header').getBoundingClientRect().height;\r\n var cellPosition = grid.getActiveCellPosition();\r\n var gridPosition = grid.getGridPosition();\r\n\r\n $rowOverlay.css(\"display\", cellPosition.visible ? \"\" : \"none\");\r\n $headerOverlay.css(\"display\", cellPosition.visible ? \"\" : \"none\");\r\n\r\n var headerWidth = cellPosition.width;\r\n\r\n $headerOverlay.css(\"left\", (cellPosition.left - gridPosition.left) + \"px\").css(\r\n \"top\", (headerHeight - 2) + \"px\").css(\r\n \"width\", headerWidth + \"px\").css(\r\n \"height\", \"2px\");\r\n\r\n $rowOverlay.css(\r\n \"left\", \"0px\").css(\r\n \"top\", (cellPosition.top - gridPosition.top) + \"px\").css(\r\n \"width\", \"2px\").css(\r\n \"height\", cellPosition.height + \"px\");\r\n }\r\n\r\n function moveSelectionOverlay(e, args) {\r\n var activeCell = grid.getActiveCell();\r\n\r\n if (!activeCell) {\r\n selectionOverlay.toggle(false);\r\n return;\r\n }\r\n\r\n var column = grid.getColumns()[activeCell.cell];\r\n selectionOverlay.toggle(true);\r\n\r\n // Only show the handle if the cell is editable\r\n selectionOverlay.handle.style.display = (column.editor != null && !column.readonly && grid.getOptions().editable) ? \"\" : \"none\";\r\n\r\n var position = grid.getCellNodeBox(activeCell.row, activeCell.cell);\r\n\r\n // Not coming through on the property so re-calculated\r\n position.height = position.bottom - position.top;\r\n position.width = position.right - position.left;\r\n\r\n selectionOverlay.$left.css({\r\n left: (position.left - selectinOverlayWidth) + \"px\",\r\n top: position.top + \"px\",\r\n width: selectinOverlayWidth + \"px\",\r\n height: position.height + \"px\"\r\n });\r\n\r\n selectionOverlay.$right.css({\r\n left: (position.left + position.width) + \"px\",\r\n top: position.top + \"px\",\r\n width: selectinOverlayWidth + \"px\",\r\n height: position.height + \"px\"\r\n });\r\n\r\n selectionOverlay.$top.css({\r\n left: (position.left - selectinOverlayWidth) + \"px\",\r\n top: (position.top - selectinOverlayWidth) + \"px\",\r\n width: (position.width + selectinOverlayWidth + 1) + \"px\",\r\n height: selectinOverlayWidth + \"px\"\r\n });\r\n\r\n selectionOverlay.$bottom.css({\r\n left: (position.left - selectinOverlayWidth) + \"px\",\r\n top: (position.top + position.height) + \"px\",\r\n width: (position.width + selectinOverlayWidth + 1) + \"px\",\r\n height: selectinOverlayWidth + \"px\"\r\n });\r\n\r\n selectionOverlay.handle.style.left = (position.left + position.width - 4) + \"px\";\r\n selectionOverlay.handle.style.top = (position.top + position.height - 4) + \"px\";\r\n\r\n // console.log(\"row: \" + activeCell.row + \" - cell: \"+ activeCell.cell);\r\n // console.log(\"container: \" + grid.getCanvasNode(activeCell.row, activeCell.cell).className);\r\n selectionOverlay.moveToContainer(grid.getCanvasNode(activeCell.cell, activeCell.row));\r\n }\r\n\r\n var dd_range;\r\n\r\n function handleOverlayDragStart(e: IMoveEventArg) {\r\n\r\n var cell = grid.getActiveCell();\r\n if (grid.canCellBeSelected(cell.row, cell.cell)) {\r\n handleDragging = true;\r\n }\r\n\r\n if (!handleDragging) {\r\n e.cancelEvent();\r\n return null;\r\n }\r\n\r\n grid.focus();\r\n\r\n dd_range = { start: cell, end: {} };\r\n\r\n return dragDecorator.show(new Slick.Range(cell.row, cell.cell));\r\n }\r\n\r\n function handleOverlayDrag(e: IMoveEventArg) {\r\n\r\n if (!handleDragging) {\r\n return;\r\n }\r\n\r\n var end = {\r\n cell: dd_range.start.cell, row: grid.getCellFromPoint(\r\n 0,\r\n e.y /* + grid.getCanvasNode().scrollTop*/).row - 1\r\n };\r\n\r\n if (!grid.canCellBeSelected(end.row, end.cell)) {\r\n e.cancelEvent(); // ?\r\n return;\r\n }\r\n\r\n dd_range.end = end;\r\n\r\n dragDecorator.show(new Slick.Range(\r\n dd_range.start.row,\r\n dd_range.start.cell,\r\n end.row,\r\n dd_range.start.cell));\r\n }\r\n\r\n function handleOverlayDragEnd(e: IMoveEventArg) {\r\n\r\n if (!handleDragging) {\r\n return;\r\n }\r\n\r\n handleDragging = false;\r\n\r\n selectionOverlay.handle.style.display = \"none\";\r\n\r\n self.onFillUpDown.notify({ \"grid\": grid, \"range\": dragDecorator.getSelectedRange(), direction: dd_range.end.row >= dd_range.start.row ? \"down\" : \"up\" }, e, self);\r\n\r\n }\r\n\r\n function Overlay(target: HTMLElement, withHandel?: boolean, prefix?: string) {\r\n var className = (prefix || '') + 'cell-overlay';\r\n\r\n this.$left = $(document.createElement(\"div\"))\r\n .addClass(className)\r\n .addClass('left')\r\n .appendTo(target);\r\n\r\n this.$right = $(document.createElement(\"div\"))\r\n .addClass(className)\r\n .addClass('right')\r\n .appendTo(target);\r\n\r\n this.$top = $(document.createElement(\"div\"))\r\n .addClass(className)\r\n .addClass('top')\r\n .appendTo(target);\r\n\r\n this.$bottom = $(document.createElement(\"div\"))\r\n .addClass(className)\r\n .addClass('bottom')\r\n .appendTo(target);\r\n\r\n if (withHandel) {\r\n this.handle = document.createElement(\"div\");\r\n this.handle.classList.add(\"handle-overlay\");\r\n target.appendChild(this.handle);\r\n \r\n const gridContainer: HTMLElement = target.closest(\".slickgrid\");\r\n const viewports = gridContainer.querySelectorAll(\".grid-canvas\");\r\n for (let idx = 0; idx < viewports.length; idx++) {\r\n console.log(idx);\r\n Moveable(viewports[idx] as HTMLElement, { // target, {\r\n selector: \".handle-overlay\",\r\n direction: \"y\",\r\n gridY: grid.getOptions().rowHeight,\r\n containInParent: false,\r\n onStart: EventHandler.Create((e: IMoveEventArg) => {\r\n handleOverlayDragStart(e);\r\n }),\r\n onMove: EventHandler.Create((e: IMoveEventArg) => {\r\n handleOverlayDrag(e);\r\n }),\r\n onStop: EventHandler.Create((e: IMoveEventArg) => {\r\n handleOverlayDragEnd(e);\r\n })\r\n });\r\n }\r\n }\r\n\r\n this.moveToContainer = function (container) {\r\n this.$left.appendTo(container);\r\n this.$right.appendTo(container);\r\n this.$top.appendTo(container);\r\n this.$bottom.appendTo(container);\r\n if (this.handle) {\r\n $(this.handle).appendTo(container);\r\n }\r\n };\r\n\r\n this.toggle = function (showOrHide) {\r\n\r\n this.$left.css(\"display\", showOrHide ? \"\" : \"none\");\r\n this.$right.css(\"display\", showOrHide ? \"\" : \"none\");\r\n this.$top.css(\"display\", showOrHide ? \"\" : \"none\");\r\n this.$bottom.css(\"display\", showOrHide ? \"\" : \"none\");\r\n if (this.handle) {\r\n this.handle.style.display = showOrHide ? \"\" : \"none\";\r\n }\r\n };\r\n }\r\n\r\n function overlayRangeDecorator(targetGrid) {\r\n var decorator;\r\n var r;\r\n\r\n function show(range) {\r\n r = range;\r\n if (!decorator) {\r\n decorator = new Overlay(grid.getCanvasNode(range.fromCell, range.fromRow), false, 'selection-');\r\n }\r\n\r\n var from = targetGrid.getCellNodeBox(range.fromRow, range.fromCell);\r\n var to = targetGrid.getCellNodeBox(range.toRow, range.toCell);\r\n\r\n decorator.$left.css({\r\n top: from.top - 2,\r\n left: from.left - 2,\r\n height: to.bottom - from.top + 2,\r\n width: options.decoratorWidth\r\n });\r\n\r\n decorator.$right.css({\r\n top: from.top - 2,\r\n left: to.right - 1,\r\n height: to.bottom - from.top + 2,\r\n width: options.decoratorWidth\r\n });\r\n\r\n decorator.$top.css({\r\n top: from.top - 2,\r\n left: to.left - 1,\r\n height: options.decoratorWidth,\r\n width: to.right - from.left + 2\r\n });\r\n\r\n decorator.$bottom.css({\r\n top: to.bottom - 1,\r\n left: from.left - 2,\r\n height: options.decoratorWidth,\r\n width: to.right - from.left + 3\r\n });\r\n\r\n return decorator;\r\n }\r\n\r\n function getSelectedRange() {\r\n return r;\r\n }\r\n\r\n function hide() {\r\n if (decorator) {\r\n decorator.toggle(false);\r\n decorator = null;\r\n }\r\n }\r\n\r\n return {\r\n hide: hide,\r\n show: show,\r\n getSelectedRange: getSelectedRange\r\n };\r\n }\r\n\r\n $.shallowExtend(this, {\r\n \"init\": init,\r\n \"destroy\": destroy,\r\n \"onFillUpDown\": new Slick.Event()\r\n });\r\n}\r\n","import \"./moveable.css\";\r\nimport \"../core/polyfills\";\r\nimport { EventHandler } from \"./eventhandler\";\r\n\r\nexport interface IMoveEventArg {\r\n x: number;\r\n y: number;\r\n target: HTMLElement;\r\n evt: MouseEvent;\r\n cancelEvent: () => void;\r\n}\r\n\r\nexport interface IMoveableOptions {\r\n moveDelta?: number;\r\n onStart?: EventHandler<IMoveEventArg>;\r\n onStop?: EventHandler<IMoveEventArg>;\r\n onMove?: EventHandler<IMoveEventArg>;\r\n gridX?: number;\r\n gridY?: number;\r\n selector?: string;\r\n handleSelector?: string; // TODO!!!\r\n direction?: \"x\" | \"y\" | \"both\";\r\n containInParent?: boolean;\r\n}\r\n\r\nconst defaultOptions: IMoveableOptions = {\r\n onStart: new EventHandler<IMoveEventArg>(),\r\n onStop: new EventHandler<IMoveEventArg>(),\r\n onMove: new EventHandler<IMoveEventArg>(),\r\n direction: \"both\",\r\n moveDelta: 0,\r\n containInParent: true\r\n};\r\n\r\nexport class MoveableContainer {\r\n\r\n private element: HTMLElement;\r\n\r\n private resizeX: boolean = false;\r\n private resizeY: boolean = false;\r\n\r\n private initialX: number = null;\r\n private initialY: number = null;\r\n\r\n private startSize: { x: number, y: number } = { x: null, y: null };\r\n\r\n constructor(private container: HTMLElement,\r\n private options: IMoveableOptions) {\r\n if (options.direction === \"x\" || options.direction === \"both\") {\r\n this.resizeX = true;\r\n }\r\n if (options.direction === \"y\" || options.direction === \"both\") {\r\n this.resizeY = true;\r\n }\r\n this.init();\r\n }\r\n\r\n private init(): void {\r\n this.container.addEventListener(\"mousedown\", this.mouseDownContainer, false);\r\n this.container.addEventListener(\"touchstart\", this.mouseDownContainer, false);\r\n }\r\n\r\n\r\n private mouseDownContainer = (evt: MouseEvent) => {\r\n\r\n const target: HTMLElement = evt.target as HTMLElement;\r\n let directChild = target;\r\n while (directChild.parentElement != null && directChild.parentElement !== this.container) {\r\n if (this.options.selector != null && directChild.matches(this.options.selector)) {\r\n break;\r\n }\r\n directChild = directChild.parentElement;\r\n }\r\n if (directChild.parentElement == null) {\r\n return;\r\n }\r\n if (this.options.selector != null && !directChild.matches(this.options.selector)) {\r\n return;\r\n }\r\n\r\n this.element = directChild;\r\n let canceled = false;\r\n const args = {\r\n evt,\r\n target: this.element,\r\n x: this.element.offsetLeft,\r\n y: this.element.offsetTop,\r\n cancelEvent: () => { canceled = true; }\r\n };\r\n this.options.onStart.notify(args);\r\n if (canceled) {\r\n return;\r\n }\r\n\r\n evt.preventDefault();\r\n evt.stopPropagation();\r\n evt.stopImmediatePropagation();\r\n\r\n this.initialX = this.extractArg<number>(evt, \"clientX\") - this.element.offsetLeft;\r\n this.initialY = this.extractArg<number>(evt, \"clientY\") - this.element.offsetTop;\r\n\r\n // register event listeners\r\n window.addEventListener(\"mousemove\", this.mouseMove, false);\r\n window.addEventListener(\"mouseup\", this.mouseUp, false);\r\n window.addEventListener(\"touchmove\", this.mouseMove, false);\r\n window.addEventListener(\"touchend\", this.mouseUp, false);\r\n }\r\n\r\n private mouseMove = (evt: MouseEvent) => {\r\n let raiseEvt = false;\r\n\r\n let x = 0;\r\n if (this.resizeX) {\r\n const val: number = this.extractArg<number>(evt, \"clientX\");\r\n\r\n if (this.startSize != null && this.startSize.x == null) {\r\n this.startSize.x = val;\r\n }\r\n if (this.startSize == null || Math.abs(this.startSize.x - val) >= this.options.moveDelta) {\r\n //if (!this.options.gridX || Math.round(val) % this.options.gridX === 0) {\r\n x = val - this.initialX;\r\n if (this.options.gridX) {\r\n x = Math.round(x / this.options.gridX) * this.options.gridX;\r\n }\r\n if (this.options.containInParent) {\r\n if (x < 0) {\r\n x = 0;\r\n }\r\n const maxX = this.container.clientWidth - this.element.offsetWidth;\r\n if (x > maxX) {\r\n x = maxX;\r\n }\r\n }\r\n this.element.style.left = x + \"px\";\r\n raiseEvt = true;\r\n this.startSize = null;\r\n //}\r\n }\r\n }\r\n let y = 0;\r\n if (this.resizeY) {\r\n const val: number = this.extractArg<number>(evt, \"clientY\");\r\n if (this.startSize != null && this.startSize.y == null) {\r\n this.startSize.y = val;\r\n }\r\n if (this.startSize == null || Math.abs(this.startSize.y - val) >= this.options.moveDelta) {\r\n //if (!this.options.gridY || Math.round(val) % this.options.gridY === 0) {\r\n y = val - this.initialY;\r\n if (this.options.gridY) {\r\n y = Math.round(y / this.options.gridY) * this.options.gridY;\r\n }\r\n if (y < 0) {\r\n y = 0;\r\n }\r\n const maxY = this.container.clientHeight - this.element.offsetHeight;\r\n if (y > maxY) {\r\n y = maxY;\r\n }\r\n this.element.style.top = y + \"px\";\r\n raiseEvt = true;\r\n this.startSize = null;\r\n //}\r\n }\r\n }\r\n if (raiseEvt) {\r\n this.options.onMove.notify({\r\n evt,\r\n target: this.element,\r\n x,\r\n y,\r\n cancelEvent: () => { }\r\n });\r\n }\r\n }\r\n\r\n private mouseUp = (evt: MouseEvent) => {\r\n window.removeEventListener(\"mousemove\", this.mouseMove, false);\r\n window.removeEventListener(\"mouseup\", this.mouseUp, false);\r\n window.removeEventListener(\"touchmove\", this.mouseMove, false);\r\n window.removeEventListener(\"touchend\", this.mouseUp, false);\r\n this.options.onStop.notify({\r\n evt,\r\n target: this.element,\r\n x: this.element.offsetLeft,\r\n y: this.element.offsetTop,\r\n cancelEvent: () => { }\r\n });\r\n this.startSize = { x: null, y: null };\r\n }\r\n\r\n private extractArg<T>(evt: any, key: string): T {\r\n return evt[key] != null ? evt[key] : (evt.touches.length > 0 ? evt.touches : evt.changedTouches)[0][key];\r\n }\r\n\r\n}\r\n\r\nexport function Moveable(selector: HTMLElement | string, options?: IMoveableOptions): MoveableContainer {\r\n return new MoveableContainer(typeof selector === \"string\" ?\r\n document.querySelector(selector) :\r\n selector,\r\n { ...defaultOptions, ...options });\r\n}\r\n","/*\r\n * Contains basic SlickGrid editors.\r\n */\r\n\r\nimport { numeric } from \"../core/numeric\";\r\nimport { handleKeydownLRNav, handleKeydownLRNoNav } from \"./slick.editors.nav\";\r\n\r\nexport function TextEditor(args) {\r\n var input: HTMLInputElement;\r\n var defaultValue;\r\n var scope = this;\r\n\r\n this.init = function () {\r\n var navOnLR = args.grid.getOptions().editorCellNavOnLRKeys;\r\n input = document.createElement(\"input\");\r\n input.type = \"text\";\r\n input.className = \"editor-text\";\r\n if (args.column.maxLength > 0) {\r\n input.maxLength = args.column.maxLength;\r\n }\r\n input.addEventListener(\"keydown\", navOnLR ? handleKeydownLRNav : handleKeydownLRNoNav);\r\n args.container.appendChild(input);\r\n input.focus();\r\n input.select();\r\n };\r\n\r\n this.destroy = function () {\r\n input.parentElement.removeChild(input);\r\n };\r\n\r\n this.focus = function () {\r\n input.focus();\r\n };\r\n\r\n this.getValue = function () {\r\n return input.value;\r\n };\r\n\r\n this.setValue = function (val) {\r\n input.value = val;\r\n };\r\n\r\n this.loadValue = function (item) {\r\n defaultValue = item[args.column.field] || \"\";\r\n input.value = defaultValue;\r\n input.defaultValue = defaultValue;\r\n input.select();\r\n };\r\n\r\n this.serializeValue = function () {\r\n return input.value;\r\n };\r\n\r\n this.applyValue = function (item, state) {\r\n item[args.column.field] = state;\r\n };\r\n\r\n this.isValueChanged = function () {\r\n return (!(input.value == \"\" && defaultValue == null)) && (input.value != defaultValue);\r\n };\r\n\r\n this.validate = function () {\r\n if (args.column.validator) {\r\n var validationResults = args.column.validator(input.value);\r\n if (!validationResults.valid) {\r\n return validationResults;\r\n }\r\n }\r\n\r\n return {\r\n valid: true,\r\n msg: null\r\n };\r\n };\r\n\r\n this.init();\r\n}\r\n\r\nexport function MultiLineTextEditor(args) {\r\n var input: HTMLTextAreaElement;\r\n var defaultValue;\r\n var scope = this;\r\n\r\n this.init = function () {\r\n var navOnLR = args.grid.getOptions().editorCellNavOnLRKeys;\r\n input = document.createElement(\"textarea\");\r\n if (args.column.maxLength > 0) {\r\n input.maxLength = args.column.maxLength;\r\n }\r\n input.className = \"editor-text\";\r\n input.addEventListener(\"keydown\", navOnLR ? handleKeydownLRNav : handleKeydownLRNoNav);\r\n args.container.appendChild(input);\r\n input.focus();\r\n input.select();\r\n };\r\n\r\n this.destroy = function () {\r\n input.parentElement.removeChild(input);\r\n };\r\n\r\n this.focus = function () {\r\n input.focus();\r\n };\r\n\r\n this.getValue = function () {\r\n return input.value;\r\n };\r\n\r\n this.setValue = function (val) {\r\n input.value = val;\r\n };\r\n\r\n this.loadValue = function (item) {\r\n defaultValue = item[args.column.field] || \"\";\r\n input.value = defaultValue;\r\n input.defaultValue = defaultValue;\r\n input.select();\r\n };\r\n\r\n this.serializeValue = function () {\r\n return input.value;\r\n };\r\n\r\n this.applyValue = function (item, state) {\r\n item[args.column.field] = state;\r\n };\r\n\r\n this.isValueChanged = function () {\r\n return (!(input.value == \"\" && defaultValue == null)) && (input.value != defaultValue);\r\n };\r\n\r\n this.validate = function () {\r\n if (args.column.validator) {\r\n var validationResults = args.column.validator(input.value);\r\n if (!validationResults.valid) {\r\n return validationResults;\r\n }\r\n }\r\n\r\n return {\r\n valid: true,\r\n msg: null\r\n };\r\n };\r\n\r\n this.init();\r\n}\r\n\r\n\r\nexport function NumericEditor(args) {\r\n var input: HTMLInputElement;\r\n var defaultValue;\r\n var scope = this;\r\n\r\n this.init = function () {\r\n var navOnLR = args.grid.getOptions().editorCellNavOnLRKeys;\r\n input = document.createElement(\"input\");\r\n input.type = \"text\";\r\n input.className = \"editor-text right\";\r\n input.addEventListener(\"keydown\", navOnLR ? handleKeydownLRNav : handleKeydownLRNoNav);\r\n args.container.appendChild(input);\r\n input.focus();\r\n input.select();\r\n };\r\n\r\n this.destroy = function () {\r\n input.parentElement.removeChild(input);\r\n };\r\n\r\n this.focus = function () {\r\n input.focus();\r\n };\r\n\r\n // function getDecimalPlaces() {\r\n // // returns the number of fixed decimal places or null\r\n // var rtn = args.column.editorFixedDecimalPlaces;\r\n // if (typeof rtn == 'undefined') {\r\n // rtn = (<any>FloatEditor).DefaultDecimalPlaces;\r\n // }\r\n // return (!rtn && rtn!==0 ? null : rtn);\r\n // }\r\n\r\n this.loadValue = function (item) {\r\n defaultValue = item[args.column.field];\r\n let val_as_str = numeric.format(defaultValue, args.column.format);\r\n input.value = val_as_str;\r\n input.select();\r\n };\r\n\r\n this.serializeValue = function () {\r\n return numeric.parse(input.value);\r\n };\r\n\r\n this.applyValue = function (item, state) {\r\n item[args.column.field] = state;\r\n };\r\n\r\n this.isValueChanged = function () {\r\n return numeric.parse(input.value) !== defaultValue;\r\n };\r\n\r\n this.validate = function () {\r\n if (input.value !== \"\" && numeric.parse(input.value) === undefined) {\r\n return {\r\n valid: false,\r\n msg: \"Please enter a valid number\"\r\n };\r\n }\r\n\r\n if (args.column.validator) {\r\n var validationResults = args.column.validator(numeric.parse(input.value));\r\n if (!validationResults.valid) {\r\n return validationResults;\r\n }\r\n }\r\n\r\n return {\r\n valid: true,\r\n msg: null\r\n };\r\n };\r\n\r\n this.init();\r\n}\r\n\r\nexport function BooleanEditor(args) {\r\n var $select: HTMLSelectElement;\r\n var defaultValue;\r\n var scope = this;\r\n\r\n this.init = function () {\r\n $select = document.createElement(\"select\");\r\n $select.setAttribute(\"tabIndex\", \"0\");\r\n $select.className = \"editor-yesno\"; // <OPTION value='-'>-</OPTION>\r\n $select.innerHTML = \"<OPTION value='yes'>✔</OPTION><OPTION value='no'>-</OPTION>\";\r\n args.container.appendChild($select);\r\n args.container.style.textAlign = \"center\";\r\n $select.focus();\r\n };\r\n\r\n this.destroy = function () {\r\n $select.parentElement.removeChild($select);\r\n };\r\n\r\n this.focus = function () {\r\n $select.focus();\r\n };\r\n\r\n this.loadValue = function (item) {\r\n defaultValue = item[args.column.field];\r\n $select.value = defaultValue == null ? \"-\" : (defaultValue ? \"yes\" : \"no\");\r\n $select.focus();\r\n //$select.select();\r\n };\r\n\r\n this.serializeValue = function () {\r\n if ($select.value === \"-\") {\r\n return null;\r\n }\r\n return ($select.value === \"yes\");\r\n };\r\n\r\n this.applyValue = function (item, state) {\r\n item[args.column.field] = state;\r\n };\r\n\r\n this.isValueChanged = function () {\r\n if ($select.value === \"-\" && defaultValue == null) {\r\n return false;\r\n }\r\n var v = $select.value === \"yes\";\r\n return (v !== defaultValue);\r\n };\r\n\r\n this.validate = function () {\r\n return {\r\n valid: true,\r\n msg: null\r\n };\r\n };\r\n\r\n this.init();\r\n}\r\n\r\n","\r\n\r\nexport let keyCodes = {\r\n LEFT: 37,\r\n RIGHT: 39\r\n};\r\n\r\n/*\r\n * Depending on the value of Grid option 'editorCellNavOnLRKeys', us \r\n * Navigate to the cell on the left if the cursor is at the beginning of the input string\r\n * and to the right cell if it's at the end. Otherwise, move the cursor within the text\r\n */\r\nexport function handleKeydownLRNav(e) {\r\n var cursorPosition = e.target.selectionStart;\r\n var textLength = e.target.value.length;\r\n if ((e.which === keyCodes.LEFT && cursorPosition > 0) ||\r\n e.which === keyCodes.RIGHT && cursorPosition < textLength) {\r\n e.stopImmediatePropagation();\r\n }\r\n}\r\n\r\nexport function handleKeydownLRNoNav(e) {\r\n if (e.which === keyCodes.LEFT || e.which === keyCodes.RIGHT) {\r\n e.stopImmediatePropagation();\r\n }\r\n}\r\n","import \"./slick.tree.css\";\r\nimport { IJSLGrid, ISlickCreatorOptions } from \"./slick.creator\";\r\nimport { ISlickFormatter } from \"./slick.core\";\r\n\r\nexport interface IGridTreeOptions {\r\n parentColumn: string;\r\n indentInRem?: number;\r\n enableCollapsing?: boolean;\r\n hiddenStateField?: string;\r\n collapsedStateField?: string;\r\n expandIconHTML?: string;\r\n collapseIconHTML?: string;\r\n}\r\n\r\nexport let IndentFormatter: ISlickFormatter = function (row, cell, value, columnDef, dataContext, grid): string {\r\n let result = \"\";\r\n const hierachy: GridTree<any> = (grid as any)._hierachy;\r\n if (hierachy != null) {\r\n const options = hierachy.getOptions();\r\n const level = hierachy.getLevel(dataContext);\r\n if (level > 0) {\r\n result += \"<span class='jsl-indent' style='min-width:\" + (level * hierachy.getOptions().indentInRem) + \"rem;'></span>\";\r\n }\r\n if (options.enableCollapsing) {\r\n const hasChildren = hierachy.hasChildren(dataContext);\r\n if (hasChildren) {\r\n if (dataContext[options.collapsedStateField]) {\r\n result += \"<span class='jsl-toggle'>\" + options.expandIconHTML + \"</span>\";\r\n } else {\r\n result += \"<span class='jsl-toggle'>\" + options.collapseIconHTML + \"</span>\";\r\n }\r\n } else {\r\n result += \"<span class='jsl-toggle-spacer'></span>\";\r\n }\r\n }\r\n }\r\n if (value != null) {\r\n result += (value + \"\").replace(/&/g, \"&amp;\").replace(/</g, \"&lt;\").replace(/>/g, \"&gt;\");\r\n }\r\n return result;\r\n};\r\n\r\nexport class GridTree<T> {\r\n\r\n private primaryKey: string;\r\n\r\n private options: IGridTreeOptions;\r\n\r\n constructor(private grid: IJSLGrid<T>, o: IGridTreeOptions) {\r\n this.options = {\r\n ...{\r\n enableCollapsing: true,\r\n indentInRem: 1,\r\n hiddenStateField: \"_hidden_by_h\",\r\n collapsedStateField: \"_callapsed\",\r\n expandIconHTML: \"▶\", // \"˃\",\r\n collapseIconHTML: \"▼\" // \"˅\"\r\n }, ...o\r\n };\r\n this.primaryKey = (this.grid.getOptions() as ISlickCreatorOptions).primaryKey;\r\n (grid as any)._hierachy = this;\r\n grid.refresh();\r\n this.initEvents();\r\n }\r\n\r\n public getOptions() {\r\n return this.options;\r\n }\r\n\r\n public getLevel(item: T): number {\r\n let level = 0;\r\n let parent = this.getParent(item);\r\n while (parent != null) {\r\n parent = this.getParent(parent);\r\n level++;\r\n }\r\n return level;\r\n }\r\n\r\n public getParent(item: T): T {\r\n return this.grid.dataView.getItemById(item[this.options.parentColumn]);\r\n }\r\n\r\n public hasChildren(item: T): boolean {\r\n return this.rowHasChildren(this.grid.dataView.getIdxByItem(item));\r\n }\r\n\r\n public getDirectChildren(item: T): T[] {\r\n const id = item[this.primaryKey];\r\n const result = [];\r\n const data = this.grid.getData();\r\n for (let i = 0; i < data.length; i++) {\r\n const pid = data[i][this.options.parentColumn];\r\n if (pid === id) {\r\n result.push(data[i]);\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n public getAllChildren(item: T): T[] {\r\n const parentid = item[this.primaryKey];\r\n const result = [];\r\n const data = this.grid.getData();\r\n for (let i = 0; i < data.length; i++) {\r\n if (data[i][this.options.parentColumn] === parentid) {\r\n result.push(data[i]);\r\n result.push(...this.getAllChildren(data[i]));\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n public rowHasChildren(row: number): boolean {\r\n const data = this.grid.getData();\r\n if (data.length > row + 1) {\r\n return data[row + 1][this.options.parentColumn] === data[row][this.primaryKey];\r\n }\r\n return false;\r\n }\r\n\r\n public toggleExpand(item: T): void {\r\n if (item[this.options.collapsedStateField]) {\r\n this.expand(item);\r\n } else {\r\n this.collapse(item);\r\n }\r\n }\r\n\r\n public expand(item: T): void {\r\n item[this.options.collapsedStateField] = false;\r\n const data = this.grid.getData();\r\n let i = this.grid.dataView.getIdxByItem(item);\r\n while (i < data.length) {\r\n data[i][this.options.hiddenStateField] = false;\r\n if (this.rowHasChildren(i)) {\r\n if (data[i][this.options.collapsedStateField]) {\r\n //skip children\r\n i += this.getAllChildren(data[i]).length;\r\n }\r\n }\r\n i++;\r\n }\r\n this.grid.refreshData();\r\n }\r\n\r\n public indent(rows: T[]) {\r\n const realRows = this.filterChildren(rows);\r\n const data = this.grid.getData();\r\n //get indexes of rows\r\n const indexes = [];\r\n for (let i = 0; i < realRows.length; i++) {\r\n indexes.push(this.grid.dataView.getIdxByItem(realRows[i]));\r\n }\r\n //sort indexes\r\n indexes.sort((a, b) => a > b ? 1 : (a < b ? -1 : 0));\r\n //change parents to indent rows\r\n for (let i = 0; i < indexes.length; i++) {\r\n const rowIdx = indexes[i];\r\n const parentID = data[rowIdx][this.options.parentColumn];\r\n for (let tmp = rowIdx - 1; tmp >= 0; tmp--) {\r\n if (data[tmp][this.options.parentColumn] === parentID) {\r\n data[rowIdx][this.options.parentColumn] = data[tmp][this.primaryKey];\r\n break;\r\n }\r\n }\r\n }\r\n this.grid.refreshData();\r\n }\r\n\r\n public outdent(rows: T[]) {\r\n const rows2 = this.filterChildren(rows);\r\n const data = this.grid.getData();\r\n for (let i = 0; i < rows2.length; i++) {\r\n const row = rows2[i];\r\n const oldparent = row[this.options.parentColumn];\r\n if (oldparent) {\r\n const newparent = data[this.grid.dataView.getIdxById(oldparent)][this.options.parentColumn];\r\n row[this.options.parentColumn] = newparent;\r\n //make all subsequent items with same ParentID have current row as new parentid\r\n let idx = this.grid.dataView.getIdxById(row[this.primaryKey]);\r\n while (++idx < data.length) {\r\n if (data[idx][this.options.parentColumn] === oldparent) {\r\n data[idx][this.options.parentColumn] = row[this.primaryKey];\r\n }\r\n //TODO: optimize -> break sooner\r\n }\r\n }\r\n }\r\n this.grid.refreshData();\r\n }\r\n\r\n public filterChildren(rows: T[]): T[] {\r\n const result = [];\r\n\r\n const dict: any = {};\r\n\r\n for (let i = 0; i < rows.length; i++) {\r\n dict[rows[i][this.primaryKey]] = true;\r\n }\r\n\r\n for (let i = 0; i < rows.length; i++) {\r\n const row = rows[i];\r\n const parentid = row[this.options.parentColumn];\r\n if (!parentid || !dict[parentid]) {\r\n result.push(row);\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n public collapse(item: T): void {\r\n item[this.options.collapsedStateField] = true;\r\n const children = this.getAllChildren(item);\r\n for (let i = 0; i < children.length; i++) {\r\n children[i][this.options.hiddenStateField] = true;\r\n }\r\n this.grid.refreshData();\r\n }\r\n\r\n private initEvents() {\r\n // collapse / expand click events\r\n if (this.options.enableCollapsing) {\r\n this.grid.onClick.subscribe((e, args) => {\r\n if (e.target.classList.contains(\"jsl-toggle\")) {\r\n e.stopImmediatePropagation();\r\n this.toggleExpand(this.grid.dataView.getItem(args.row));\r\n }\r\n });\r\n }\r\n\r\n // filters\r\n const hiddenFilter = {\r\n field: this.options.hiddenStateField,\r\n match: (itm, field) => {\r\n return !itm[this.options.hiddenStateField];\r\n }\r\n };\r\n this.grid.addFilter(hiddenFilter);\r\n\r\n }\r\n\r\n}\r\n","import { jQueryReplacement } from '../../core/jq'\r\nimport { Slick } from '../slick.core'\r\n\r\n\r\nlet $ = jQueryReplacement;\r\n\r\n// register namespace\r\n$.deepExtend(Slick, {\r\n \"CellRangeDecorator\": CellRangeDecorator\r\n});\r\n\r\n/***\r\n * Displays an overlay on top of a given cell range.\r\n *\r\n * TODO:\r\n * Currently, it blocks mouse events to DOM nodes behind it.\r\n * Use FF and WebKit-specific \"pointer-events\" CSS style, or some kind of event forwarding.\r\n * Could also construct the borders separately using 4 individual DIVs.\r\n *\r\n * @param {Grid} grid\r\n * @param {Object} options\r\n */\r\nexport function CellRangeDecorator(grid, options) {\r\n var _elem;\r\n var _defaults = {\r\n selectionCssClass: 'slick-range-decorator',\r\n selectionCss: {\r\n \"zIndex\": \"9999\",\r\n \"border\": \"2px dashed red\"\r\n },\r\n offset: {\r\n top: -1,\r\n left: -1,\r\n height: -2,\r\n width: -2\r\n }\r\n };\r\n\r\n options = $.deepExtend({}, _defaults, options);\r\n\r\n\r\n function show(range) {\r\n if (!_elem) {\r\n _elem = $(\"<div></div>\"/*, {css: options.selectionCss}*/)\r\n .addClass(options.selectionCssClass)\r\n .css(\"position\", \"absolute\")\r\n .appendTo(grid.getActiveCanvasNode());\r\n if (options.selectionCss) {\r\n for (let key in options.selectionCss) {\r\n _elem.css(key, options.selectionCss[key]);\r\n }\r\n }\r\n }\r\n\r\n var from = grid.getCellNodeBox(range.fromRow, range.fromCell);\r\n var to = grid.getCellNodeBox(range.toRow, range.toCell);\r\n _elem.css({\r\n top: from.top + options.offset.top,\r\n left: from.left + options.offset.left,\r\n height: to.bottom - from.top + options.offset.height,\r\n width: to.right - from.left + options.offset.width\r\n });\r\n\r\n return _elem;\r\n }\r\n\r\n function hide() {\r\n if (_elem) {\r\n _elem.remove();\r\n _elem = null;\r\n }\r\n }\r\n\r\n $.shallowExtend(this, {\r\n \"pluginName\": \"CellRangeDecorator\",\r\n \"show\": show,\r\n \"hide\": hide\r\n });\r\n}","import { jQueryReplacement } from '../../core/jq'\r\nimport { Slick, Range } from '../slick.core'\r\nimport { CellRangeDecorator } from './slick.cellrangedecorator';\r\n\r\nlet $ = jQueryReplacement;\r\n\r\n// register namespace\r\n$.deepExtend(window, {\r\n \"Slick\": {\r\n \"CellRangeSelector\": CellRangeSelector\r\n }\r\n});\r\n\r\nexport function CellRangeSelector(options) {\r\n var _grid;\r\n var _currentlySelectedRange;\r\n var _canvas;\r\n var _gridOptions;\r\n var _$activeCanvas;\r\n var _dragging;\r\n var _decorator;\r\n var _self = this;\r\n var _handler = new Slick.EventHandler();\r\n var _defaults = {\r\n selectionCss: {\r\n \"border\": \"2px dashed blue\"\r\n }\r\n };\r\n\r\n // Frozen row & column variables\r\n var _rowOffset;\r\n var _columnOffset;\r\n var _isRightCanvas;\r\n var _isBottomCanvas;\r\n\r\n // Scrollings\r\n var _scrollTop = 0;\r\n var _scrollLeft = 0;\r\n\r\n function init(grid) {\r\n options = $.deepExtend({}, _defaults, options);\r\n _decorator = options.cellDecorator || new CellRangeDecorator(grid, options);\r\n _grid = grid;\r\n _canvas = _grid.getCanvasNode();\r\n _gridOptions = _grid.getOptions();\r\n _handler\r\n .subscribe(_grid.onScroll, handleScroll)\r\n .subscribe(_grid.onDragInit, handleDragInit)\r\n .subscribe(_grid.onDragStart, handleDragStart)\r\n .subscribe(_grid.onDrag, handleDrag)\r\n .subscribe(_grid.onDragEnd, handleDragEnd);\r\n }\r\n\r\n function destroy() {\r\n _handler.unsubscribeAll();\r\n }\r\n\r\n function getCellDecorator() {\r\n return _decorator;\r\n }\r\n\r\n function handleScroll(e, args) {\r\n _scrollTop = args.scrollTop;\r\n _scrollLeft = args.scrollLeft;\r\n }\r\n\r\n function handleDragInit(e, dd) {\r\n // Set the active canvas node because the decorator needs to append its\r\n // box to the correct canvas\r\n _$activeCanvas = $(_grid.getActiveCanvasNode(e));\r\n\r\n var c = _$activeCanvas.offset();\r\n\r\n _rowOffset = 0;\r\n _columnOffset = 0;\r\n _isBottomCanvas = _$activeCanvas.hasClass('grid-canvas-bottom');\r\n\r\n if (_gridOptions.frozenRow > -1 && _isBottomCanvas) {\r\n _rowOffset = (_gridOptions.frozenBottom) ? $('.grid-canvas-bottom').height() : $('.grid-canvas-top').height();\r\n }\r\n\r\n _isRightCanvas = _$activeCanvas.hasClass('grid-canvas-right');\r\n\r\n if (_gridOptions.frozenColumn > -1 && _isRightCanvas) {\r\n _columnOffset = $('.grid-canvas-left').width();\r\n }\r\n\r\n // // prevent the grid from cancelling drag'n'drop by default\r\n // e.stopImmediatePropagation();\r\n }\r\n\r\n function handleDragStart(e, dd) {\r\n var cell = _grid.getCellFromEvent(e);\r\n if (_self.onBeforeCellRangeSelected.notify(cell) !== false) {\r\n if (_grid.canCellBeSelected(cell.row, cell.cell)) {\r\n _dragging = true;\r\n e.stopImmediatePropagation();\r\n }\r\n }\r\n if (!_dragging) {\r\n return;\r\n }\r\n\r\n _grid.focus();\r\n\r\n var startX = dd.startX - $(_canvas).offset().left;\r\n if (_gridOptions.frozenColumn >= 0 && _isRightCanvas) {\r\n startX += _scrollLeft;\r\n }\r\n\r\n var startY = dd.startY - $(_canvas).offset().top;\r\n if (_gridOptions.frozenRow >= 0 && _isBottomCanvas) {\r\n startY += _scrollTop;\r\n }\r\n\r\n var start = _grid.getCellFromPoint(startX, startY);\r\n\r\n dd.range = { start: start, end: {} };\r\n _currentlySelectedRange = dd.range;\r\n return _decorator.show(new Range(start.row, start.cell));\r\n }\r\n\r\n function handleDrag(e, dd) {\r\n if (!_dragging) {\r\n return;\r\n }\r\n e.stopImmediatePropagation();\r\n\r\n var end = _grid.getCellFromPoint(\r\n e.pageX - _$activeCanvas.offset().left + _columnOffset,\r\n e.pageY - _$activeCanvas.offset().top + _rowOffset\r\n );\r\n // ... frozen column(s), \r\n if (_gridOptions.frozenColumn >= 0 && (!_isRightCanvas && (end.cell > _gridOptions.frozenColumn)) || (_isRightCanvas && (end.cell <= _gridOptions.frozenColumn))) {\r\n return;\r\n }\r\n\r\n // ... or frozen row(s)\r\n if (_gridOptions.frozenRow >= 0 && (!_isBottomCanvas && (end.row >= _gridOptions.frozenRow)) || (_isBottomCanvas && (end.row < _gridOptions.frozenRow))) {\r\n return;\r\n }\r\n\r\n // ... or regular grid (without any frozen options)\r\n if (!_grid.canCellBeSelected(end.row, end.cell)) {\r\n return;\r\n }\r\n\r\n dd.range.end = end;\r\n\r\n _decorator.show(new Slick.Range(dd.range.start.row, dd.range.start.cell, end.row, end.cell));\r\n }\r\n\r\n function handleDragEnd(e, dd) {\r\n if (!_dragging) {\r\n return;\r\n }\r\n\r\n _dragging = false;\r\n e.stopImmediatePropagation();\r\n\r\n _decorator.hide();\r\n _self.onCellRangeSelected.notify({\r\n range: new Slick.Range(\r\n dd.range.start.row,\r\n dd.range.start.cell,\r\n dd.range.end.row,\r\n dd.range.end.cell\r\n )\r\n });\r\n }\r\n\r\n function getCurrentRange() {\r\n return _currentlySelectedRange;\r\n }\r\n\r\n $.shallowExtend(this, {\r\n \"init\": init,\r\n \"destroy\": destroy,\r\n \"pluginName\": \"CellRangeSelector\",\r\n\r\n \"getCellDecorator\": getCellDecorator,\r\n \"getCurrentRange\": getCurrentRange,\r\n\r\n \"onBeforeCellRangeSelected\": new Slick.Event(),\r\n \"onCellRangeSelected\": new Slick.Event()\r\n });\r\n}\r\n","import { jQueryReplacement } from '../../core/jq'\r\nimport { Slick, Range } from '../slick.core'\r\nimport { CellRangeSelector } from './slick.cellrangeselector';\r\n\r\n\r\nlet $ = jQueryReplacement;\r\n\r\n// register namespace\r\n$.deepExtend(window, {\r\n \"Slick\": {\r\n \"CellSelectionModel\": CellSelectionModel\r\n }\r\n});\r\n\r\nexport function CellSelectionModel(options?) {\r\n var _grid;\r\n var _canvas;\r\n var _ranges = [];\r\n var _self = this;\r\n var _selector;\r\n\r\n if (typeof options === \"undefined\" || typeof options.cellRangeSelector === \"undefined\") {\r\n _selector = new CellRangeSelector({\r\n \"selectionCss\": {\r\n \"border\": \"2px solid black\"\r\n }\r\n });\r\n } else {\r\n _selector = options.cellRangeSelector;\r\n }\r\n\r\n var _options;\r\n var _defaults = {\r\n selectActiveCell: true\r\n };\r\n\r\n function init(grid) {\r\n _options = $.deepExtend({}, _defaults, options);\r\n _grid = grid;\r\n _canvas = _grid.getCanvasNode();\r\n _grid.onActiveCellChanged.subscribe(handleActiveCellChange);\r\n _grid.onKeyDown.subscribe(handleKeyDown);\r\n grid.registerPlugin(_selector);\r\n _selector.onCellRangeSelected.subscribe(handleCellRangeSelected);\r\n _selector.onBeforeCellRangeSelected.subscribe(handleBeforeCellRangeSelected);\r\n }\r\n\r\n function destroy() {\r\n _grid.onActiveCellChanged.unsubscribe(handleActiveCellChange);\r\n _grid.onKeyDown.unsubscribe(handleKeyDown);\r\n _selector.onCellRangeSelected.unsubscribe(handleCellRangeSelected);\r\n _selector.onBeforeCellRangeSelected.unsubscribe(handleBeforeCellRangeSelected);\r\n _grid.unregisterPlugin(_selector);\r\n }\r\n\r\n function removeInvalidRanges(ranges) {\r\n var result = [];\r\n\r\n for (var i = 0; i < ranges.length; i++) {\r\n var r = ranges[i];\r\n if (_grid.canCellBeSelected(r.fromRow, r.fromCell) && _grid.canCellBeSelected(r.toRow, r.toCell)) {\r\n result.push(r);\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n\r\n function rangesAreEqual(range1, range2) {\r\n var areDifferent = (range1.length !== range2.length);\r\n if (!areDifferent) {\r\n for (var i = 0; i < range1.length; i++) {\r\n if (\r\n range1[i].fromCell !== range2[i].fromCell\r\n || range1[i].fromRow !== range2[i].fromRow\r\n || range1[i].toCell !== range2[i].toCell\r\n || range1[i].toRow !== range2[i].toRow\r\n ) {\r\n areDifferent = true;\r\n break;\r\n }\r\n }\r\n }\r\n return !areDifferent;\r\n }\r\n\r\n function setSelectedRanges(ranges) {\r\n // simple check for: empty selection didn't change, prevent firing onSelectedRangesChanged\r\n if ((!_ranges || _ranges.length === 0) && (!ranges || ranges.length === 0)) { return; }\r\n\r\n // if range has not changed, don't fire onSelectedRangesChanged\r\n const rangeHasChanged = !rangesAreEqual(_ranges, ranges);\r\n\r\n _ranges = removeInvalidRanges(ranges);\r\n if (rangeHasChanged) { _self.onSelectedRangesChanged.notify(_ranges); }\r\n }\r\n\r\n function getSelectedRanges() {\r\n return _ranges;\r\n }\r\n\r\n function handleBeforeCellRangeSelected(e, args) {\r\n if (_grid.getEditorLock().isActive()) {\r\n e.stopPropagation();\r\n return false;\r\n }\r\n }\r\n\r\n function handleCellRangeSelected(e, args) {\r\n _grid.setActiveCell(args.range.fromRow, args.range.fromCell, false, false, true);\r\n setSelectedRanges([args.range]);\r\n }\r\n\r\n let lastActiveCell;\r\n\r\n function handleActiveCellChange(e, args) {\r\n if (_options.selectActiveCell && args.row != null && args.cell != null) {\r\n\r\n const metaKey = e.ctrlKey || e.metaKey;\r\n if (metaKey) {\r\n const ranges = getSelectedRanges().slice();\r\n ranges.push(new Range(args.row, args.cell));\r\n setSelectedRanges(ranges);\r\n lastActiveCell = {row: args.row, cell: args.cell};\r\n } else if (e.shiftKey) {\r\n const ranges = getSelectedRanges().slice();\r\n if (ranges.length > 0) {\r\n const currentRange = ranges.pop();\r\n if (lastActiveCell == null) {\r\n lastActiveCell = {row: currentRange.fromRow, cell: currentRange.fromCell};\r\n }\r\n const newRange = new Range(Math.min(lastActiveCell.row, args.row),\r\n Math.min(lastActiveCell.cell, args.cell),\r\n Math.max(lastActiveCell.row, args.row),\r\n Math.max(lastActiveCell.cell, args.cell));\r\n ranges.push(newRange);\r\n } else {\r\n ranges.push(new Range(args.row, args.cell));\r\n lastActiveCell = {row: args.row, cell: args.cell};\r\n }\r\n setSelectedRanges(ranges);\r\n } else {\r\n setSelectedRanges([new Range(args.row, args.cell)]);\r\n lastActiveCell = {row: args.row, cell: args.cell};\r\n }\r\n } else if (!_options.selectActiveCell) {\r\n // clear the previous selection once the cell changes\r\n setSelectedRanges([]);\r\n }\r\n }\r\n\r\n function handleKeyDown(e) {\r\n /***\r\n * Кey codes\r\n * 37 left\r\n * 38 up\r\n * 39 right\r\n * 40 down\r\n */\r\n var ranges, last;\r\n var active = _grid.getActiveCell();\r\n var metaKey = e.ctrlKey || e.metaKey;\r\n if (active && e.shiftKey && !metaKey && !e.altKey &&\r\n (e.which == 37 || e.which == 39 || e.which == 38 || e.which == 40)) {\r\n\r\n ranges = getSelectedRanges().slice();\r\n if (!ranges.length)\r\n ranges.push(new Range(active.row, active.cell));\r\n\r\n // keyboard can work with last range only\r\n last = ranges.pop();\r\n\r\n // can't handle selection out of active cell\r\n if (!last.contains(active.row, active.cell))\r\n last = new Range(active.row, active.cell);\r\n\r\n var dRow = last.toRow - last.fromRow,\r\n dCell = last.toCell - last.fromCell,\r\n // walking direction\r\n dirRow = active.row == last.fromRow ? 1 : -1,\r\n dirCell = active.cell == last.fromCell ? 1 : -1;\r\n\r\n if (e.which == 37) {\r\n dCell -= dirCell;\r\n } else if (e.which == 39) {\r\n dCell += dirCell;\r\n } else if (e.which == 38) {\r\n dRow -= dirRow;\r\n } else if (e.which == 40) {\r\n dRow += dirRow;\r\n }\r\n\r\n // define new selection range\r\n var new_last = new Slick.Range(active.row, active.cell, active.row + dirRow * dRow, active.cell + dirCell * dCell);\r\n if (removeInvalidRanges([new_last]).length) {\r\n ranges.push(new_last);\r\n var viewRow = dirRow > 0 ? new_last.toRow : new_last.fromRow;\r\n var viewCell = dirCell > 0 ? new_last.toCell : new_last.fromCell;\r\n _grid.scrollRowIntoView(viewRow);\r\n _grid.scrollCellIntoView(viewRow, viewCell);\r\n }\r\n else\r\n ranges.push(last);\r\n\r\n setSelectedRanges(ranges);\r\n\r\n e.preventDefault();\r\n e.stopPropagation();\r\n }\r\n }\r\n\r\n $.shallowExtend(this, {\r\n \"getSelectedRanges\": getSelectedRanges,\r\n \"setSelectedRanges\": setSelectedRanges,\r\n\r\n \"init\": init,\r\n \"destroy\": destroy,\r\n \"pluginName\": \"CellSelectionModel\",\r\n\r\n \"onSelectedRangesChanged\": new Slick.Event()\r\n });\r\n} "],"names":[],"version":3,"file":"index.js.map"}