jquery.dgtable 0.5.52 → 0.5.55

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["node_modules/core-js/internals/global.js","node_modules/core-js/internals/fails.js","node_modules/core-js/internals/descriptors.js","node_modules/core-js/internals/function-call.js","node_modules/core-js/internals/object-property-is-enumerable.js","node_modules/core-js/internals/engine-v8-version.js","node_modules/core-js/internals/create-property-descriptor.js","node_modules/core-js/internals/function-uncurry-this.js","node_modules/core-js/internals/classof-raw.js","node_modules/core-js/internals/indexed-object.js","node_modules/core-js/internals/require-object-coercible.js","node_modules/core-js/internals/to-indexed-object.js","node_modules/core-js/internals/is-callable.js","node_modules/core-js/internals/is-object.js","node_modules/core-js/internals/get-built-in.js","node_modules/core-js/internals/object-is-prototype-of.js","node_modules/core-js/internals/engine-user-agent.js","node_modules/core-js/internals/native-symbol.js","node_modules/core-js/internals/use-symbol-as-uid.js","node_modules/core-js/internals/is-symbol.js","node_modules/core-js/internals/try-to-string.js","node_modules/core-js/internals/a-callable.js","node_modules/core-js/internals/get-method.js","node_modules/core-js/internals/ordinary-to-primitive.js","node_modules/core-js/internals/set-global.js","node_modules/core-js/internals/shared-store.js","node_modules/core-js/internals/shared.js","node_modules/core-js/internals/to-object.js","node_modules/core-js/internals/has-own-property.js","node_modules/core-js/internals/uid.js","node_modules/core-js/internals/well-known-symbol.js","node_modules/core-js/internals/to-primitive.js","node_modules/core-js/internals/to-property-key.js","node_modules/core-js/internals/document-create-element.js","node_modules/core-js/internals/ie8-dom-define.js","node_modules/core-js/internals/object-get-own-property-descriptor.js","node_modules/core-js/internals/v8-prototype-define-bug.js","node_modules/core-js/internals/an-object.js","node_modules/core-js/internals/object-define-property.js","node_modules/core-js/internals/create-non-enumerable-property.js","node_modules/core-js/internals/inspect-source.js","node_modules/core-js/internals/internal-state.js","node_modules/core-js/internals/shared-key.js","node_modules/core-js/internals/native-weak-map.js","node_modules/core-js/internals/hidden-keys.js","node_modules/core-js/internals/function-name.js","node_modules/core-js/internals/redefine.js","node_modules/core-js/internals/to-integer-or-infinity.js","node_modules/core-js/internals/to-absolute-index.js","node_modules/core-js/internals/to-length.js","node_modules/core-js/internals/length-of-array-like.js","node_modules/core-js/internals/array-includes.js","node_modules/core-js/internals/object-keys-internal.js","node_modules/core-js/internals/object-get-own-property-names.js","node_modules/core-js/internals/enum-bug-keys.js","node_modules/core-js/internals/object-get-own-property-symbols.js","node_modules/core-js/internals/own-keys.js","node_modules/core-js/internals/copy-constructor-properties.js","node_modules/core-js/internals/is-forced.js","node_modules/core-js/internals/export.js","node_modules/core-js/internals/to-string-tag-support.js","node_modules/core-js/internals/array-method-is-strict.js","node_modules/core-js/internals/classof.js","node_modules/core-js/internals/to-string.js","node_modules/core-js/internals/create-property.js","node_modules/core-js/internals/array-slice-simple.js","node_modules/core-js/internals/array-sort.js","node_modules/core-js/internals/engine-ff-version.js","node_modules/core-js/internals/engine-is-ie-or-edge.js","node_modules/core-js/internals/engine-webkit-version.js","node_modules/core-js/modules/es.array.sort.js","src/util.js","src/row_collection.js","src/column_collection.js","src/css_util.js","src/SelectionHelper.js","src/by_column_filter.js","src/index.js"],"sourcesContent":["var check = function (it) {\n return it && it.Math == Math && it;\n};\n\n// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nmodule.exports =\n // eslint-disable-next-line es/no-global-this -- safe\n check(typeof globalThis == 'object' && globalThis) ||\n check(typeof window == 'object' && window) ||\n // eslint-disable-next-line no-restricted-globals -- safe\n check(typeof self == 'object' && self) ||\n check(typeof global == 'object' && global) ||\n // eslint-disable-next-line no-new-func -- fallback\n (function () { return this; })() || Function('return this')();\n","module.exports = function (exec) {\n try {\n return !!exec();\n } catch (error) {\n return true;\n }\n};\n","var fails = require('../internals/fails');\n\n// Detect IE8's incomplete defineProperty implementation\nmodule.exports = !fails(function () {\n // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n return Object.defineProperty({}, 1, { get: function () { return 7; } })[1] != 7;\n});\n","var call = Function.prototype.call;\n\nmodule.exports = call.bind ? call.bind(call) : function () {\n return call.apply(call, arguments);\n};\n","'use strict';\nvar $propertyIsEnumerable = {}.propertyIsEnumerable;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// Nashorn ~ JDK8 bug\nvar NASHORN_BUG = getOwnPropertyDescriptor && !$propertyIsEnumerable.call({ 1: 2 }, 1);\n\n// `Object.prototype.propertyIsEnumerable` method implementation\n// https://tc39.es/ecma262/#sec-object.prototype.propertyisenumerable\nexports.f = NASHORN_BUG ? function propertyIsEnumerable(V) {\n var descriptor = getOwnPropertyDescriptor(this, V);\n return !!descriptor && descriptor.enumerable;\n} : $propertyIsEnumerable;\n","var global = require('../internals/global');\nvar userAgent = require('../internals/engine-user-agent');\n\nvar process = global.process;\nvar Deno = global.Deno;\nvar versions = process && process.versions || Deno && Deno.version;\nvar v8 = versions && versions.v8;\nvar match, version;\n\nif (v8) {\n match = v8.split('.');\n // in old Chrome, versions of V8 isn't V8 = Chrome / 10\n // but their correct versions are not interesting for us\n version = match[0] > 0 && match[0] < 4 ? 1 : +(match[0] + match[1]);\n}\n\n// BrowserFS NodeJS `process` polyfill incorrectly set `.v8` to `0.0`\n// so check `userAgent` even if `.v8` exists, but 0\nif (!version && userAgent) {\n match = userAgent.match(/Edge\\/(\\d+)/);\n if (!match || match[1] >= 74) {\n match = userAgent.match(/Chrome\\/(\\d+)/);\n if (match) version = +match[1];\n }\n}\n\nmodule.exports = version;\n","module.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n","var FunctionPrototype = Function.prototype;\nvar bind = FunctionPrototype.bind;\nvar call = FunctionPrototype.call;\nvar uncurryThis = bind && bind.bind(call, call);\n\nmodule.exports = bind ? function (fn) {\n return fn && uncurryThis(fn);\n} : function (fn) {\n return fn && function () {\n return call.apply(fn, arguments);\n };\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\n\nvar toString = uncurryThis({}.toString);\nvar stringSlice = uncurryThis(''.slice);\n\nmodule.exports = function (it) {\n return stringSlice(toString(it), 8, -1);\n};\n","var global = require('../internals/global');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar fails = require('../internals/fails');\nvar classof = require('../internals/classof-raw');\n\nvar Object = global.Object;\nvar split = uncurryThis(''.split);\n\n// fallback for non-array-like ES3 and non-enumerable old V8 strings\nmodule.exports = fails(function () {\n // throws an error in rhino, see https://github.com/mozilla/rhino/issues/346\n // eslint-disable-next-line no-prototype-builtins -- safe\n return !Object('z').propertyIsEnumerable(0);\n}) ? function (it) {\n return classof(it) == 'String' ? split(it, '') : Object(it);\n} : Object;\n","var global = require('../internals/global');\n\nvar TypeError = global.TypeError;\n\n// `RequireObjectCoercible` abstract operation\n// https://tc39.es/ecma262/#sec-requireobjectcoercible\nmodule.exports = function (it) {\n if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n return it;\n};\n","// toObject with fallback for non-array-like ES3 strings\nvar IndexedObject = require('../internals/indexed-object');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nmodule.exports = function (it) {\n return IndexedObject(requireObjectCoercible(it));\n};\n","// `IsCallable` abstract operation\n// https://tc39.es/ecma262/#sec-iscallable\nmodule.exports = function (argument) {\n return typeof argument == 'function';\n};\n","var isCallable = require('../internals/is-callable');\n\nmodule.exports = function (it) {\n return typeof it == 'object' ? it !== null : isCallable(it);\n};\n","var global = require('../internals/global');\nvar isCallable = require('../internals/is-callable');\n\nvar aFunction = function (argument) {\n return isCallable(argument) ? argument : undefined;\n};\n\nmodule.exports = function (namespace, method) {\n return arguments.length < 2 ? aFunction(global[namespace]) : global[namespace] && global[namespace][method];\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\n\nmodule.exports = uncurryThis({}.isPrototypeOf);\n","var getBuiltIn = require('../internals/get-built-in');\n\nmodule.exports = getBuiltIn('navigator', 'userAgent') || '';\n","/* eslint-disable es/no-symbol -- required for testing */\nvar V8_VERSION = require('../internals/engine-v8-version');\nvar fails = require('../internals/fails');\n\n// eslint-disable-next-line es/no-object-getownpropertysymbols -- required for testing\nmodule.exports = !!Object.getOwnPropertySymbols && !fails(function () {\n var symbol = Symbol();\n // Chrome 38 Symbol has incorrect toString conversion\n // `get-own-property-symbols` polyfill symbols converted to object are not Symbol instances\n return !String(symbol) || !(Object(symbol) instanceof Symbol) ||\n // Chrome 38-40 symbols are not inherited from DOM collections prototypes to instances\n !Symbol.sham && V8_VERSION && V8_VERSION < 41;\n});\n","/* eslint-disable es/no-symbol -- required for testing */\nvar NATIVE_SYMBOL = require('../internals/native-symbol');\n\nmodule.exports = NATIVE_SYMBOL\n && !Symbol.sham\n && typeof Symbol.iterator == 'symbol';\n","var global = require('../internals/global');\nvar getBuiltIn = require('../internals/get-built-in');\nvar isCallable = require('../internals/is-callable');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar USE_SYMBOL_AS_UID = require('../internals/use-symbol-as-uid');\n\nvar Object = global.Object;\n\nmodule.exports = USE_SYMBOL_AS_UID ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n var $Symbol = getBuiltIn('Symbol');\n return isCallable($Symbol) && isPrototypeOf($Symbol.prototype, Object(it));\n};\n","var global = require('../internals/global');\n\nvar String = global.String;\n\nmodule.exports = function (argument) {\n try {\n return String(argument);\n } catch (error) {\n return 'Object';\n }\n};\n","var global = require('../internals/global');\nvar isCallable = require('../internals/is-callable');\nvar tryToString = require('../internals/try-to-string');\n\nvar TypeError = global.TypeError;\n\n// `Assert: IsCallable(argument) is true`\nmodule.exports = function (argument) {\n if (isCallable(argument)) return argument;\n throw TypeError(tryToString(argument) + ' is not a function');\n};\n","var aCallable = require('../internals/a-callable');\n\n// `GetMethod` abstract operation\n// https://tc39.es/ecma262/#sec-getmethod\nmodule.exports = function (V, P) {\n var func = V[P];\n return func == null ? undefined : aCallable(func);\n};\n","var global = require('../internals/global');\nvar call = require('../internals/function-call');\nvar isCallable = require('../internals/is-callable');\nvar isObject = require('../internals/is-object');\n\nvar TypeError = global.TypeError;\n\n// `OrdinaryToPrimitive` abstract operation\n// https://tc39.es/ecma262/#sec-ordinarytoprimitive\nmodule.exports = function (input, pref) {\n var fn, val;\n if (pref === 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val;\n if (isCallable(fn = input.valueOf) && !isObject(val = call(fn, input))) return val;\n if (pref !== 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n","var global = require('../internals/global');\n\n// eslint-disable-next-line es/no-object-defineproperty -- safe\nvar defineProperty = Object.defineProperty;\n\nmodule.exports = function (key, value) {\n try {\n defineProperty(global, key, { value: value, configurable: true, writable: true });\n } catch (error) {\n global[key] = value;\n } return value;\n};\n","var global = require('../internals/global');\nvar setGlobal = require('../internals/set-global');\n\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || setGlobal(SHARED, {});\n\nmodule.exports = store;\n","var IS_PURE = require('../internals/is-pure');\nvar store = require('../internals/shared-store');\n\n(module.exports = function (key, value) {\n return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n version: '3.20.2',\n mode: IS_PURE ? 'pure' : 'global',\n copyright: '© 2022 Denis Pushkarev (zloirock.ru)'\n});\n","var global = require('../internals/global');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nvar Object = global.Object;\n\n// `ToObject` abstract operation\n// https://tc39.es/ecma262/#sec-toobject\nmodule.exports = function (argument) {\n return Object(requireObjectCoercible(argument));\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar toObject = require('../internals/to-object');\n\nvar hasOwnProperty = uncurryThis({}.hasOwnProperty);\n\n// `HasOwnProperty` abstract operation\n// https://tc39.es/ecma262/#sec-hasownproperty\nmodule.exports = Object.hasOwn || function hasOwn(it, key) {\n return hasOwnProperty(toObject(it), key);\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\n\nvar id = 0;\nvar postfix = Math.random();\nvar toString = uncurryThis(1.0.toString);\n\nmodule.exports = function (key) {\n return 'Symbol(' + (key === undefined ? '' : key) + ')_' + toString(++id + postfix, 36);\n};\n","var global = require('../internals/global');\nvar shared = require('../internals/shared');\nvar hasOwn = require('../internals/has-own-property');\nvar uid = require('../internals/uid');\nvar NATIVE_SYMBOL = require('../internals/native-symbol');\nvar USE_SYMBOL_AS_UID = require('../internals/use-symbol-as-uid');\n\nvar WellKnownSymbolsStore = shared('wks');\nvar Symbol = global.Symbol;\nvar symbolFor = Symbol && Symbol['for'];\nvar createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol : Symbol && Symbol.withoutSetter || uid;\n\nmodule.exports = function (name) {\n if (!hasOwn(WellKnownSymbolsStore, name) || !(NATIVE_SYMBOL || typeof WellKnownSymbolsStore[name] == 'string')) {\n var description = 'Symbol.' + name;\n if (NATIVE_SYMBOL && hasOwn(Symbol, name)) {\n WellKnownSymbolsStore[name] = Symbol[name];\n } else if (USE_SYMBOL_AS_UID && symbolFor) {\n WellKnownSymbolsStore[name] = symbolFor(description);\n } else {\n WellKnownSymbolsStore[name] = createWellKnownSymbol(description);\n }\n } return WellKnownSymbolsStore[name];\n};\n","var global = require('../internals/global');\nvar call = require('../internals/function-call');\nvar isObject = require('../internals/is-object');\nvar isSymbol = require('../internals/is-symbol');\nvar getMethod = require('../internals/get-method');\nvar ordinaryToPrimitive = require('../internals/ordinary-to-primitive');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TypeError = global.TypeError;\nvar TO_PRIMITIVE = wellKnownSymbol('toPrimitive');\n\n// `ToPrimitive` abstract operation\n// https://tc39.es/ecma262/#sec-toprimitive\nmodule.exports = function (input, pref) {\n if (!isObject(input) || isSymbol(input)) return input;\n var exoticToPrim = getMethod(input, TO_PRIMITIVE);\n var result;\n if (exoticToPrim) {\n if (pref === undefined) pref = 'default';\n result = call(exoticToPrim, input, pref);\n if (!isObject(result) || isSymbol(result)) return result;\n throw TypeError(\"Can't convert object to primitive value\");\n }\n if (pref === undefined) pref = 'number';\n return ordinaryToPrimitive(input, pref);\n};\n","var toPrimitive = require('../internals/to-primitive');\nvar isSymbol = require('../internals/is-symbol');\n\n// `ToPropertyKey` abstract operation\n// https://tc39.es/ecma262/#sec-topropertykey\nmodule.exports = function (argument) {\n var key = toPrimitive(argument, 'string');\n return isSymbol(key) ? key : key + '';\n};\n","var global = require('../internals/global');\nvar isObject = require('../internals/is-object');\n\nvar document = global.document;\n// typeof document.createElement is 'object' in old IE\nvar EXISTS = isObject(document) && isObject(document.createElement);\n\nmodule.exports = function (it) {\n return EXISTS ? document.createElement(it) : {};\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\nvar createElement = require('../internals/document-create-element');\n\n// Thank's IE8 for his funny defineProperty\nmodule.exports = !DESCRIPTORS && !fails(function () {\n // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n return Object.defineProperty(createElement('div'), 'a', {\n get: function () { return 7; }\n }).a != 7;\n});\n","var DESCRIPTORS = require('../internals/descriptors');\nvar call = require('../internals/function-call');\nvar propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar toPropertyKey = require('../internals/to-property-key');\nvar hasOwn = require('../internals/has-own-property');\nvar IE8_DOM_DEFINE = require('../internals/ie8-dom-define');\n\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// `Object.getOwnPropertyDescriptor` method\n// https://tc39.es/ecma262/#sec-object.getownpropertydescriptor\nexports.f = DESCRIPTORS ? $getOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) {\n O = toIndexedObject(O);\n P = toPropertyKey(P);\n if (IE8_DOM_DEFINE) try {\n return $getOwnPropertyDescriptor(O, P);\n } catch (error) { /* empty */ }\n if (hasOwn(O, P)) return createPropertyDescriptor(!call(propertyIsEnumerableModule.f, O, P), O[P]);\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\n\n// V8 ~ Chrome 36-\n// https://bugs.chromium.org/p/v8/issues/detail?id=3334\nmodule.exports = DESCRIPTORS && fails(function () {\n // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n return Object.defineProperty(function () { /* empty */ }, 'prototype', {\n value: 42,\n writable: false\n }).prototype != 42;\n});\n","var global = require('../internals/global');\nvar isObject = require('../internals/is-object');\n\nvar String = global.String;\nvar TypeError = global.TypeError;\n\n// `Assert: Type(argument) is Object`\nmodule.exports = function (argument) {\n if (isObject(argument)) return argument;\n throw TypeError(String(argument) + ' is not an object');\n};\n","var global = require('../internals/global');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar IE8_DOM_DEFINE = require('../internals/ie8-dom-define');\nvar V8_PROTOTYPE_DEFINE_BUG = require('../internals/v8-prototype-define-bug');\nvar anObject = require('../internals/an-object');\nvar toPropertyKey = require('../internals/to-property-key');\n\nvar TypeError = global.TypeError;\n// eslint-disable-next-line es/no-object-defineproperty -- safe\nvar $defineProperty = Object.defineProperty;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nvar ENUMERABLE = 'enumerable';\nvar CONFIGURABLE = 'configurable';\nvar WRITABLE = 'writable';\n\n// `Object.defineProperty` method\n// https://tc39.es/ecma262/#sec-object.defineproperty\nexports.f = DESCRIPTORS ? V8_PROTOTYPE_DEFINE_BUG ? function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPropertyKey(P);\n anObject(Attributes);\n if (typeof O === 'function' && P === 'prototype' && 'value' in Attributes && WRITABLE in Attributes && !Attributes[WRITABLE]) {\n var current = $getOwnPropertyDescriptor(O, P);\n if (current && current[WRITABLE]) {\n O[P] = Attributes.value;\n Attributes = {\n configurable: CONFIGURABLE in Attributes ? Attributes[CONFIGURABLE] : current[CONFIGURABLE],\n enumerable: ENUMERABLE in Attributes ? Attributes[ENUMERABLE] : current[ENUMERABLE],\n writable: false\n };\n }\n } return $defineProperty(O, P, Attributes);\n} : $defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPropertyKey(P);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return $defineProperty(O, P, Attributes);\n } catch (error) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar definePropertyModule = require('../internals/object-define-property');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\n\nmodule.exports = DESCRIPTORS ? function (object, key, value) {\n return definePropertyModule.f(object, key, createPropertyDescriptor(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar isCallable = require('../internals/is-callable');\nvar store = require('../internals/shared-store');\n\nvar functionToString = uncurryThis(Function.toString);\n\n// this helper broken in `core-js@3.4.1-3.4.4`, so we can't use `shared` helper\nif (!isCallable(store.inspectSource)) {\n store.inspectSource = function (it) {\n return functionToString(it);\n };\n}\n\nmodule.exports = store.inspectSource;\n","var NATIVE_WEAK_MAP = require('../internals/native-weak-map');\nvar global = require('../internals/global');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar isObject = require('../internals/is-object');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar hasOwn = require('../internals/has-own-property');\nvar shared = require('../internals/shared-store');\nvar sharedKey = require('../internals/shared-key');\nvar hiddenKeys = require('../internals/hidden-keys');\n\nvar OBJECT_ALREADY_INITIALIZED = 'Object already initialized';\nvar TypeError = global.TypeError;\nvar WeakMap = global.WeakMap;\nvar set, get, has;\n\nvar enforce = function (it) {\n return has(it) ? get(it) : set(it, {});\n};\n\nvar getterFor = function (TYPE) {\n return function (it) {\n var state;\n if (!isObject(it) || (state = get(it)).type !== TYPE) {\n throw TypeError('Incompatible receiver, ' + TYPE + ' required');\n } return state;\n };\n};\n\nif (NATIVE_WEAK_MAP || shared.state) {\n var store = shared.state || (shared.state = new WeakMap());\n var wmget = uncurryThis(store.get);\n var wmhas = uncurryThis(store.has);\n var wmset = uncurryThis(store.set);\n set = function (it, metadata) {\n if (wmhas(store, it)) throw new TypeError(OBJECT_ALREADY_INITIALIZED);\n metadata.facade = it;\n wmset(store, it, metadata);\n return metadata;\n };\n get = function (it) {\n return wmget(store, it) || {};\n };\n has = function (it) {\n return wmhas(store, it);\n };\n} else {\n var STATE = sharedKey('state');\n hiddenKeys[STATE] = true;\n set = function (it, metadata) {\n if (hasOwn(it, STATE)) throw new TypeError(OBJECT_ALREADY_INITIALIZED);\n metadata.facade = it;\n createNonEnumerableProperty(it, STATE, metadata);\n return metadata;\n };\n get = function (it) {\n return hasOwn(it, STATE) ? it[STATE] : {};\n };\n has = function (it) {\n return hasOwn(it, STATE);\n };\n}\n\nmodule.exports = {\n set: set,\n get: get,\n has: has,\n enforce: enforce,\n getterFor: getterFor\n};\n","var shared = require('../internals/shared');\nvar uid = require('../internals/uid');\n\nvar keys = shared('keys');\n\nmodule.exports = function (key) {\n return keys[key] || (keys[key] = uid(key));\n};\n","var global = require('../internals/global');\nvar isCallable = require('../internals/is-callable');\nvar inspectSource = require('../internals/inspect-source');\n\nvar WeakMap = global.WeakMap;\n\nmodule.exports = isCallable(WeakMap) && /native code/.test(inspectSource(WeakMap));\n","module.exports = {};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar hasOwn = require('../internals/has-own-property');\n\nvar FunctionPrototype = Function.prototype;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar getDescriptor = DESCRIPTORS && Object.getOwnPropertyDescriptor;\n\nvar EXISTS = hasOwn(FunctionPrototype, 'name');\n// additional protection from minified / mangled / dropped function names\nvar PROPER = EXISTS && (function something() { /* empty */ }).name === 'something';\nvar CONFIGURABLE = EXISTS && (!DESCRIPTORS || (DESCRIPTORS && getDescriptor(FunctionPrototype, 'name').configurable));\n\nmodule.exports = {\n EXISTS: EXISTS,\n PROPER: PROPER,\n CONFIGURABLE: CONFIGURABLE\n};\n","var global = require('../internals/global');\nvar isCallable = require('../internals/is-callable');\nvar hasOwn = require('../internals/has-own-property');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar setGlobal = require('../internals/set-global');\nvar inspectSource = require('../internals/inspect-source');\nvar InternalStateModule = require('../internals/internal-state');\nvar CONFIGURABLE_FUNCTION_NAME = require('../internals/function-name').CONFIGURABLE;\n\nvar getInternalState = InternalStateModule.get;\nvar enforceInternalState = InternalStateModule.enforce;\nvar TEMPLATE = String(String).split('String');\n\n(module.exports = function (O, key, value, options) {\n var unsafe = options ? !!options.unsafe : false;\n var simple = options ? !!options.enumerable : false;\n var noTargetGet = options ? !!options.noTargetGet : false;\n var name = options && options.name !== undefined ? options.name : key;\n var state;\n if (isCallable(value)) {\n if (String(name).slice(0, 7) === 'Symbol(') {\n name = '[' + String(name).replace(/^Symbol\\(([^)]*)\\)/, '$1') + ']';\n }\n if (!hasOwn(value, 'name') || (CONFIGURABLE_FUNCTION_NAME && value.name !== name)) {\n createNonEnumerableProperty(value, 'name', name);\n }\n state = enforceInternalState(value);\n if (!state.source) {\n state.source = TEMPLATE.join(typeof name == 'string' ? name : '');\n }\n }\n if (O === global) {\n if (simple) O[key] = value;\n else setGlobal(key, value);\n return;\n } else if (!unsafe) {\n delete O[key];\n } else if (!noTargetGet && O[key]) {\n simple = true;\n }\n if (simple) O[key] = value;\n else createNonEnumerableProperty(O, key, value);\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, 'toString', function toString() {\n return isCallable(this) && getInternalState(this).source || inspectSource(this);\n});\n","var ceil = Math.ceil;\nvar floor = Math.floor;\n\n// `ToIntegerOrInfinity` abstract operation\n// https://tc39.es/ecma262/#sec-tointegerorinfinity\nmodule.exports = function (argument) {\n var number = +argument;\n // eslint-disable-next-line no-self-compare -- safe\n return number !== number || number === 0 ? 0 : (number > 0 ? floor : ceil)(number);\n};\n","var toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\n\nvar max = Math.max;\nvar min = Math.min;\n\n// Helper for a popular repeating case of the spec:\n// Let integer be ? ToInteger(index).\n// If integer < 0, let result be max((length + integer), 0); else let result be min(integer, length).\nmodule.exports = function (index, length) {\n var integer = toIntegerOrInfinity(index);\n return integer < 0 ? max(integer + length, 0) : min(integer, length);\n};\n","var toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\n\nvar min = Math.min;\n\n// `ToLength` abstract operation\n// https://tc39.es/ecma262/#sec-tolength\nmodule.exports = function (argument) {\n return argument > 0 ? min(toIntegerOrInfinity(argument), 0x1FFFFFFFFFFFFF) : 0; // 2 ** 53 - 1 == 9007199254740991\n};\n","var toLength = require('../internals/to-length');\n\n// `LengthOfArrayLike` abstract operation\n// https://tc39.es/ecma262/#sec-lengthofarraylike\nmodule.exports = function (obj) {\n return toLength(obj.length);\n};\n","var toIndexedObject = require('../internals/to-indexed-object');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\n\n// `Array.prototype.{ indexOf, includes }` methods implementation\nvar createMethod = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIndexedObject($this);\n var length = lengthOfArrayLike(O);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare -- NaN check\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare -- NaN check\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) {\n if ((IS_INCLUDES || index in O) && O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n\nmodule.exports = {\n // `Array.prototype.includes` method\n // https://tc39.es/ecma262/#sec-array.prototype.includes\n includes: createMethod(true),\n // `Array.prototype.indexOf` method\n // https://tc39.es/ecma262/#sec-array.prototype.indexof\n indexOf: createMethod(false)\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar hasOwn = require('../internals/has-own-property');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar indexOf = require('../internals/array-includes').indexOf;\nvar hiddenKeys = require('../internals/hidden-keys');\n\nvar push = uncurryThis([].push);\n\nmodule.exports = function (object, names) {\n var O = toIndexedObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) !hasOwn(hiddenKeys, key) && hasOwn(O, key) && push(result, key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (hasOwn(O, key = names[i++])) {\n ~indexOf(result, key) || push(result, key);\n }\n return result;\n};\n","var internalObjectKeys = require('../internals/object-keys-internal');\nvar enumBugKeys = require('../internals/enum-bug-keys');\n\nvar hiddenKeys = enumBugKeys.concat('length', 'prototype');\n\n// `Object.getOwnPropertyNames` method\n// https://tc39.es/ecma262/#sec-object.getownpropertynames\n// eslint-disable-next-line es/no-object-getownpropertynames -- safe\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return internalObjectKeys(O, hiddenKeys);\n};\n","// IE8- don't enum bug keys\nmodule.exports = [\n 'constructor',\n 'hasOwnProperty',\n 'isPrototypeOf',\n 'propertyIsEnumerable',\n 'toLocaleString',\n 'toString',\n 'valueOf'\n];\n","// eslint-disable-next-line es/no-object-getownpropertysymbols -- safe\nexports.f = Object.getOwnPropertySymbols;\n","var getBuiltIn = require('../internals/get-built-in');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar getOwnPropertyNamesModule = require('../internals/object-get-own-property-names');\nvar getOwnPropertySymbolsModule = require('../internals/object-get-own-property-symbols');\nvar anObject = require('../internals/an-object');\n\nvar concat = uncurryThis([].concat);\n\n// all object keys, includes non-enumerable and symbols\nmodule.exports = getBuiltIn('Reflect', 'ownKeys') || function ownKeys(it) {\n var keys = getOwnPropertyNamesModule.f(anObject(it));\n var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;\n return getOwnPropertySymbols ? concat(keys, getOwnPropertySymbols(it)) : keys;\n};\n","var hasOwn = require('../internals/has-own-property');\nvar ownKeys = require('../internals/own-keys');\nvar getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor');\nvar definePropertyModule = require('../internals/object-define-property');\n\nmodule.exports = function (target, source, exceptions) {\n var keys = ownKeys(source);\n var defineProperty = definePropertyModule.f;\n var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n if (!hasOwn(target, key) && !(exceptions && hasOwn(exceptions, key))) {\n defineProperty(target, key, getOwnPropertyDescriptor(source, key));\n }\n }\n};\n","var fails = require('../internals/fails');\nvar isCallable = require('../internals/is-callable');\n\nvar replacement = /#|\\.prototype\\./;\n\nvar isForced = function (feature, detection) {\n var value = data[normalize(feature)];\n return value == POLYFILL ? true\n : value == NATIVE ? false\n : isCallable(detection) ? fails(detection)\n : !!detection;\n};\n\nvar normalize = isForced.normalize = function (string) {\n return String(string).replace(replacement, '.').toLowerCase();\n};\n\nvar data = isForced.data = {};\nvar NATIVE = isForced.NATIVE = 'N';\nvar POLYFILL = isForced.POLYFILL = 'P';\n\nmodule.exports = isForced;\n","var global = require('../internals/global');\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar redefine = require('../internals/redefine');\nvar setGlobal = require('../internals/set-global');\nvar copyConstructorProperties = require('../internals/copy-constructor-properties');\nvar isForced = require('../internals/is-forced');\n\n/*\n options.target - name of the target object\n options.global - target is the global object\n options.stat - export as static methods of target\n options.proto - export as prototype methods of target\n options.real - real prototype method for the `pure` version\n options.forced - export even if the native feature is available\n options.bind - bind methods to the target, required for the `pure` version\n options.wrap - wrap constructors to preventing global pollution, required for the `pure` version\n options.unsafe - use the simple assignment of property instead of delete + defineProperty\n options.sham - add a flag to not completely full polyfills\n options.enumerable - export as enumerable property\n options.noTargetGet - prevent calling a getter on target\n options.name - the .name of the function if it does not match the key\n*/\nmodule.exports = function (options, source) {\n var TARGET = options.target;\n var GLOBAL = options.global;\n var STATIC = options.stat;\n var FORCED, target, key, targetProperty, sourceProperty, descriptor;\n if (GLOBAL) {\n target = global;\n } else if (STATIC) {\n target = global[TARGET] || setGlobal(TARGET, {});\n } else {\n target = (global[TARGET] || {}).prototype;\n }\n if (target) for (key in source) {\n sourceProperty = source[key];\n if (options.noTargetGet) {\n descriptor = getOwnPropertyDescriptor(target, key);\n targetProperty = descriptor && descriptor.value;\n } else targetProperty = target[key];\n FORCED = isForced(GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key, options.forced);\n // contained in target\n if (!FORCED && targetProperty !== undefined) {\n if (typeof sourceProperty == typeof targetProperty) continue;\n copyConstructorProperties(sourceProperty, targetProperty);\n }\n // add a flag to not completely full polyfills\n if (options.sham || (targetProperty && targetProperty.sham)) {\n createNonEnumerableProperty(sourceProperty, 'sham', true);\n }\n // extend global\n redefine(target, key, sourceProperty, options);\n }\n};\n","var wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar test = {};\n\ntest[TO_STRING_TAG] = 'z';\n\nmodule.exports = String(test) === '[object z]';\n","'use strict';\nvar fails = require('../internals/fails');\n\nmodule.exports = function (METHOD_NAME, argument) {\n var method = [][METHOD_NAME];\n return !!method && fails(function () {\n // eslint-disable-next-line no-useless-call,no-throw-literal -- required for testing\n method.call(null, argument || function () { throw 1; }, 1);\n });\n};\n","var global = require('../internals/global');\nvar TO_STRING_TAG_SUPPORT = require('../internals/to-string-tag-support');\nvar isCallable = require('../internals/is-callable');\nvar classofRaw = require('../internals/classof-raw');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar Object = global.Object;\n\n// ES3 wrong here\nvar CORRECT_ARGUMENTS = classofRaw(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n try {\n return it[key];\n } catch (error) { /* empty */ }\n};\n\n// getting tag from ES6+ `Object.prototype.toString`\nmodule.exports = TO_STRING_TAG_SUPPORT ? classofRaw : function (it) {\n var O, tag, result;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (tag = tryGet(O = Object(it), TO_STRING_TAG)) == 'string' ? tag\n // builtinTag case\n : CORRECT_ARGUMENTS ? classofRaw(O)\n // ES3 arguments fallback\n : (result = classofRaw(O)) == 'Object' && isCallable(O.callee) ? 'Arguments' : result;\n};\n","var global = require('../internals/global');\nvar classof = require('../internals/classof');\n\nvar String = global.String;\n\nmodule.exports = function (argument) {\n if (classof(argument) === 'Symbol') throw TypeError('Cannot convert a Symbol value to a string');\n return String(argument);\n};\n","'use strict';\nvar toPropertyKey = require('../internals/to-property-key');\nvar definePropertyModule = require('../internals/object-define-property');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\n\nmodule.exports = function (object, key, value) {\n var propertyKey = toPropertyKey(key);\n if (propertyKey in object) definePropertyModule.f(object, propertyKey, createPropertyDescriptor(0, value));\n else object[propertyKey] = value;\n};\n","var global = require('../internals/global');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar createProperty = require('../internals/create-property');\n\nvar Array = global.Array;\nvar max = Math.max;\n\nmodule.exports = function (O, start, end) {\n var length = lengthOfArrayLike(O);\n var k = toAbsoluteIndex(start, length);\n var fin = toAbsoluteIndex(end === undefined ? length : end, length);\n var result = Array(max(fin - k, 0));\n for (var n = 0; k < fin; k++, n++) createProperty(result, n, O[k]);\n result.length = n;\n return result;\n};\n","var arraySlice = require('../internals/array-slice-simple');\n\nvar floor = Math.floor;\n\nvar mergeSort = function (array, comparefn) {\n var length = array.length;\n var middle = floor(length / 2);\n return length < 8 ? insertionSort(array, comparefn) : merge(\n array,\n mergeSort(arraySlice(array, 0, middle), comparefn),\n mergeSort(arraySlice(array, middle), comparefn),\n comparefn\n );\n};\n\nvar insertionSort = function (array, comparefn) {\n var length = array.length;\n var i = 1;\n var element, j;\n\n while (i < length) {\n j = i;\n element = array[i];\n while (j && comparefn(array[j - 1], element) > 0) {\n array[j] = array[--j];\n }\n if (j !== i++) array[j] = element;\n } return array;\n};\n\nvar merge = function (array, left, right, comparefn) {\n var llength = left.length;\n var rlength = right.length;\n var lindex = 0;\n var rindex = 0;\n\n while (lindex < llength || rindex < rlength) {\n array[lindex + rindex] = (lindex < llength && rindex < rlength)\n ? comparefn(left[lindex], right[rindex]) <= 0 ? left[lindex++] : right[rindex++]\n : lindex < llength ? left[lindex++] : right[rindex++];\n } return array;\n};\n\nmodule.exports = mergeSort;\n","var userAgent = require('../internals/engine-user-agent');\n\nvar firefox = userAgent.match(/firefox\\/(\\d+)/i);\n\nmodule.exports = !!firefox && +firefox[1];\n","var UA = require('../internals/engine-user-agent');\n\nmodule.exports = /MSIE|Trident/.test(UA);\n","var userAgent = require('../internals/engine-user-agent');\n\nvar webkit = userAgent.match(/AppleWebKit\\/(\\d+)\\./);\n\nmodule.exports = !!webkit && +webkit[1];\n","'use strict';\nvar $ = require('../internals/export');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar aCallable = require('../internals/a-callable');\nvar toObject = require('../internals/to-object');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar toString = require('../internals/to-string');\nvar fails = require('../internals/fails');\nvar internalSort = require('../internals/array-sort');\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\nvar FF = require('../internals/engine-ff-version');\nvar IE_OR_EDGE = require('../internals/engine-is-ie-or-edge');\nvar V8 = require('../internals/engine-v8-version');\nvar WEBKIT = require('../internals/engine-webkit-version');\n\nvar test = [];\nvar un$Sort = uncurryThis(test.sort);\nvar push = uncurryThis(test.push);\n\n// IE8-\nvar FAILS_ON_UNDEFINED = fails(function () {\n test.sort(undefined);\n});\n// V8 bug\nvar FAILS_ON_NULL = fails(function () {\n test.sort(null);\n});\n// Old WebKit\nvar STRICT_METHOD = arrayMethodIsStrict('sort');\n\nvar STABLE_SORT = !fails(function () {\n // feature detection can be too slow, so check engines versions\n if (V8) return V8 < 70;\n if (FF && FF > 3) return;\n if (IE_OR_EDGE) return true;\n if (WEBKIT) return WEBKIT < 603;\n\n var result = '';\n var code, chr, value, index;\n\n // generate an array with more 512 elements (Chakra and old V8 fails only in this case)\n for (code = 65; code < 76; code++) {\n chr = String.fromCharCode(code);\n\n switch (code) {\n case 66: case 69: case 70: case 72: value = 3; break;\n case 68: case 71: value = 4; break;\n default: value = 2;\n }\n\n for (index = 0; index < 47; index++) {\n test.push({ k: chr + index, v: value });\n }\n }\n\n test.sort(function (a, b) { return b.v - a.v; });\n\n for (index = 0; index < test.length; index++) {\n chr = test[index].k.charAt(0);\n if (result.charAt(result.length - 1) !== chr) result += chr;\n }\n\n return result !== 'DGBEFHACIJK';\n});\n\nvar FORCED = FAILS_ON_UNDEFINED || !FAILS_ON_NULL || !STRICT_METHOD || !STABLE_SORT;\n\nvar getSortCompare = function (comparefn) {\n return function (x, y) {\n if (y === undefined) return -1;\n if (x === undefined) return 1;\n if (comparefn !== undefined) return +comparefn(x, y) || 0;\n return toString(x) > toString(y) ? 1 : -1;\n };\n};\n\n// `Array.prototype.sort` method\n// https://tc39.es/ecma262/#sec-array.prototype.sort\n$({ target: 'Array', proto: true, forced: FORCED }, {\n sort: function sort(comparefn) {\n if (comparefn !== undefined) aCallable(comparefn);\n\n var array = toObject(this);\n\n if (STABLE_SORT) return comparefn === undefined ? un$Sort(array) : un$Sort(array, comparefn);\n\n var items = [];\n var arrayLength = lengthOfArrayLike(array);\n var itemsLength, index;\n\n for (index = 0; index < arrayLength; index++) {\n if (index in array) push(items, array[index]);\n }\n\n internalSort(items, getSortCompare(comparefn));\n\n itemsLength = items.length;\n index = 0;\n\n while (index < itemsLength) array[index] = items[index++];\n while (index < arrayLength) delete array[index++];\n\n return array;\n }\n});\n","'use strict';\r\n\r\nconst indexOf = Array.prototype.indexOf;\r\n\r\nexport const includes = function includes (array, item) {\r\n return indexOf.call(array, item) >= 0;\r\n};\r\n\r\nexport const find = function find (array, predicate) {\r\n for (let i = 0, len = array.length; i >= 0 && i < len; i += 1) {\r\n if (predicate(array[i], i, array))\r\n return array[i];\r\n }\r\n};\r\n\r\nexport const htmlEncode = function htmlEncode (text) {\r\n return text.replace(/&/g, \"&amp;\")\r\n .replace(/</g, \"&lt;\")\r\n .replace(/>/g, \"&gt;\")\r\n .replace(/'/g, \"&#39;\")\r\n .replace(/\"/g, \"&quot;\")\r\n .replace(/\\n/g, '<br />');\r\n};\r\n","'use strict';\r\n\r\n// Define class RowCollection\r\nfunction RowCollection () {\r\n\r\n // Instantiate an Array. Seems like the `.length = ` of an inherited Array does not work well.\r\n // I will not use the IFRAME solution either in fear of memory leaks, and we're supporting large datasets...\r\n let collection = [];\r\n\r\n // Synthetically set the 'prototype'\r\n Object.assign(collection, RowCollection.prototype);\r\n\r\n // Call initializer\r\n collection.initialize.apply(collection, arguments);\r\n\r\n return collection;\r\n}\r\n\r\n// Inherit Array\r\nRowCollection.prototype = [];\r\n\r\nRowCollection.prototype.initialize = function (options) {\r\n\r\n options = options || {};\r\n\r\n /** @field {string} sortColumn */\r\n this.sortColumn = options.sortColumn == null ? [] : options.sortColumn;\r\n};\r\n\r\n/**\r\n * @param {Object|Object[]} rows - row or array of rows to add to this collection\r\n * @param {number?} at - position to insert rows at\r\n */\r\nRowCollection.prototype.add = function (rows, at) {\r\n let isArray = ('splice' in rows && 'length' in rows), i, len;\r\n if (isArray) {\r\n if (typeof at === 'number') {\r\n for (i = 0, len = rows.length; i < len; i++) {\r\n this.splice(at++, 0, rows[i]);\r\n }\r\n } else {\r\n for (i = 0, len = rows.length; i < len; i++) {\r\n this.push(rows[i]);\r\n }\r\n }\r\n } else {\r\n if (typeof at === 'number') {\r\n this.splice(at, 0, rows);\r\n } else {\r\n this.push(rows);\r\n }\r\n }\r\n};\r\n\r\n/**\r\n * @param {Object|Object[]=} rows Row or array of rows to add to this collection\r\n */\r\nRowCollection.prototype.reset = function (rows) {\r\n this.length = 0;\r\n if (rows) {\r\n this.add(rows);\r\n }\r\n};\r\n\r\n/**\r\n * @param {Function} filterFunc - Filtering function\r\n * @param {Object|null} args? - Options to pass to the function\r\n * @returns {RowCollection} success result\r\n */\r\nRowCollection.prototype.filteredCollection = function (filterFunc, args) {\r\n if (filterFunc && args) {\r\n let rows = new RowCollection({ sortColumn: this.sortColumn });\r\n\r\n for (let i = 0, len = this.length, row; i < len; i++) {\r\n row = this[i];\r\n if (filterFunc(row, args)) {\r\n row['__i'] = i;\r\n rows.push(row);\r\n }\r\n }\r\n return rows;\r\n } else {\r\n return null;\r\n }\r\n};\r\n\r\n/**\r\n * @type {function(columnName: string, descending: boolean, defaultComparator: function(a,b):number)|null|undefined}\r\n */\r\nRowCollection.prototype.onComparatorRequired = null;\r\n\r\n/**\r\n * @type {Function|null|undefined}\r\n */\r\nRowCollection.prototype.onSort = null;\r\n\r\nlet nativeSort = RowCollection.prototype.sort;\r\n\r\nfunction getDefaultComparator(column, descending) {\r\n let columnName = column.column;\r\n let comparePath = column.comparePath || columnName;\r\n if (typeof comparePath === 'string') {\r\n comparePath = comparePath.split('.');\r\n }\r\n let pathLength = comparePath.length,\r\n hasPath = pathLength > 1,\r\n i;\r\n\r\n let lessVal = descending ? 1 : -1, moreVal = descending ? -1 : 1;\r\n return function(leftRow, rightRow) {\r\n let leftVal = leftRow[comparePath[0]],\r\n rightVal = rightRow[comparePath[0]];\r\n if (hasPath) {\r\n for (i = 1; i < pathLength; i++) {\r\n leftVal = leftVal && leftVal[comparePath[i]];\r\n rightVal = rightVal && rightVal[comparePath[i]];\r\n }\r\n }\r\n if (leftVal === rightVal) return 0;\r\n if (leftVal == null) return lessVal;\r\n if (rightVal == null) return moreVal;\r\n if (leftVal < rightVal) return lessVal;\r\n return moreVal;\r\n };\r\n}\r\n\r\n/**\r\n * @param {Boolean=false} silent\r\n * @returns {RowCollection} self\r\n */\r\nRowCollection.prototype.sort = function (silent) {\r\n if (this.sortColumn.length) {\r\n let comparators = [], i, comparator;\r\n\r\n for (i = 0; i < this.sortColumn.length; i++) {\r\n comparator = null;\r\n const defaultComparator = getDefaultComparator(this.sortColumn[i], this.sortColumn[i].descending);\r\n if (this.onComparatorRequired) {\r\n comparator = this.onComparatorRequired(this.sortColumn[i].column, this.sortColumn[i].descending, defaultComparator);\r\n }\r\n if (!comparator) {\r\n comparator = defaultComparator;\r\n }\r\n comparators.push(comparator.bind(this));\r\n }\r\n\r\n if (comparators.length === 1) {\r\n nativeSort.call(this, comparators[0]);\r\n } else {\r\n let len = comparators.length,\r\n value;\r\n\r\n comparator = function(leftRow, rightRow) {\r\n for (i = 0; i < len; i++) {\r\n value = comparators[i](leftRow, rightRow);\r\n if (value !== 0) {\r\n return value;\r\n }\r\n }\r\n return value;\r\n };\r\n\r\n nativeSort.call(this, comparator);\r\n }\r\n\r\n if (!silent) {\r\n if (this.onSort) {\r\n this.onSort();\r\n }\r\n }\r\n }\r\n return this;\r\n};\r\n\r\nexport default RowCollection;\r\n","'use strict';\r\n\r\n// Define class RowCollection\r\nfunction ColumnCollection () {\r\n\r\n // Instantiate an Array. Seems like the `.length = ` of an inherited Array does not work well.\r\n // I will not use the IFRAME solution either in fear of memory leaks, and we're supporting large datasets...\r\n let collection = [];\r\n\r\n // Synthetically set the 'prototype'\r\n Object.assign(collection, ColumnCollection.prototype);\r\n\r\n // Call initializer\r\n collection.initialize.apply(collection, arguments);\r\n\r\n return collection;\r\n}\r\n\r\n// Inherit Array\r\nColumnCollection.prototype = [];\r\n\r\nColumnCollection.prototype.initialize = function () {\r\n\r\n};\r\n\r\n/**\r\n * Get the column by this name\r\n * @param {String} column column name\r\n * @returns {Object} the column object\r\n */\r\nColumnCollection.prototype.get = function (column) {\r\n for (let i = 0, len = this.length; i < len; i++) {\r\n if (this[i].name == column) {\r\n return this[i];\r\n }\r\n }\r\n return null;\r\n};\r\n\r\n/**\r\n * Get the index of the column by this name\r\n * @param {String} column column name\r\n * @returns {int} the index of this column\r\n */\r\nColumnCollection.prototype.indexOf = function (column) {\r\n for (let i = 0, len = this.length; i < len; i++) {\r\n if (this[i].name == column) {\r\n return i;\r\n }\r\n }\r\n return -1;\r\n};\r\n\r\n/**\r\n * Get the column by the specified order\r\n * @param {Number} order the column's order\r\n * @returns {Object} the column object\r\n */\r\nColumnCollection.prototype.getByOrder = function (order) {\r\n for (let i = 0, len = this.length; i < len; i++) {\r\n if (this[i].order == order) {\r\n return this[i];\r\n }\r\n }\r\n return null;\r\n};\r\n\r\n/**\r\n * Normalize order\r\n * @returns {ColumnCollection} self\r\n */\r\nColumnCollection.prototype.normalizeOrder = function () {\r\n let ordered = [], i;\r\n for (i = 0; i < this.length; i++) {\r\n ordered.push(this[i]);\r\n }\r\n ordered.sort(function(col1, col2){ return col1.order < col2.order ? -1 : (col1.order > col2.order ? 1 : 0); });\r\n for (i = 0; i < ordered.length; i++) {\r\n ordered[i].order = i;\r\n }\r\n return this;\r\n};\r\n\r\n/**\r\n * Get the array of columns, order by the order property\r\n * @returns {Array<Object>} ordered array of columns\r\n */\r\nColumnCollection.prototype.getColumns = function () {\r\n let cols = [];\r\n for (let i = 0, column; i < this.length; i++) {\r\n column = this[i];\r\n cols.push(column);\r\n }\r\n cols.sort((col1, col2) => col1.order < col2.order ? -1 : (col1.order > col2.order ? 1 : 0));\r\n return cols;\r\n};\r\n\r\n/**\r\n * Get the array of visible columns, order by the order property\r\n * @returns {Array<Object>} ordered array of visible columns\r\n */\r\nColumnCollection.prototype.getVisibleColumns = function () {\r\n let cols = [];\r\n for (let i = 0, column; i < this.length; i++) {\r\n column = this[i];\r\n if (column.visible) {\r\n cols.push(column);\r\n }\r\n }\r\n cols.sort((col1, col2) => col1.order < col2.order ? -1 : (col1.order > col2.order ? 1 : 0));\r\n return cols;\r\n};\r\n\r\n/**\r\n * @returns {int} maximum order currently in the array\r\n */\r\nColumnCollection.prototype.getMaxOrder = function () {\r\n let order = 0;\r\n for (let i = 0, column; i < this.length; i++) {\r\n column = this[i];\r\n if (column.order > order) {\r\n order = column.order;\r\n }\r\n }\r\n return order;\r\n};\r\n\r\n/**\r\n * Move a column to a new spot in the collection\r\n * @param {Object} src the column to move\r\n * @param {Object} dest the destination column\r\n * @returns {ColumnCollection} self\r\n */\r\nColumnCollection.prototype.moveColumn = function (src, dest) {\r\n if (src && dest) {\r\n let srcOrder = src.order, destOrder = dest.order, i, col;\r\n if (srcOrder < destOrder) {\r\n for (i = srcOrder + 1; i <= destOrder; i++) {\r\n col = this.getByOrder(i);\r\n col.order--;\r\n }\r\n } else {\r\n for (i = srcOrder - 1; i >= destOrder; i--) {\r\n col = this.getByOrder(i);\r\n col.order++;\r\n }\r\n }\r\n src.order = destOrder;\r\n }\r\n return this;\r\n};\r\n\r\nexport default ColumnCollection;","/* eslint-env browser */\r\n\r\n'use strict';\r\n\r\nconst CssUtil = {};\r\n\r\nlet _isTransformSupported = null;\r\n\r\nCssUtil.getSupportedTransform = () => {\r\n if (_isTransformSupported === null) {\r\n let prefixes = ['transform', 'WebkitTransform', 'MozTransform', 'OTransform', 'msTransform'];\r\n let div = document.createElement('div');\r\n _isTransformSupported = false;\r\n for (let item of prefixes) {\r\n if (div && div.style[item] !== undefined) {\r\n _isTransformSupported = item;\r\n break;\r\n }\r\n }\r\n }\r\n return _isTransformSupported;\r\n};\r\n\r\nexport default CssUtil;\r\n","/* eslint-env browser */\r\n\r\n'use strict';\r\n\r\n// saveSelection/restoreSelection courtesy of Tim Down, with my improvements\r\n// https://stackoverflow.com/questions/13949059/persisting-the-changes-of-range-objects-after-selection-in-html/13950376#13950376\r\n\r\nfunction isChildOf(child, parent) {\r\n while ((child = child.parentNode) && child !== parent);\r\n return !!child;\r\n}\r\n\r\nclass SelectionHelper {\r\n\r\n static saveSelection(el) {\r\n let range = window.getSelection().getRangeAt(0);\r\n\r\n if (el !== range.commonAncestorContainer && !isChildOf(range.commonAncestorContainer, el))\r\n return null;\r\n\r\n let preSelectionRange = range.cloneRange();\r\n preSelectionRange.selectNodeContents(el);\r\n preSelectionRange.setEnd(range.startContainer, range.startOffset);\r\n let start = preSelectionRange.toString().length;\r\n\r\n return {\r\n start: start,\r\n end: start + range.toString().length,\r\n };\r\n }\r\n\r\n static restoreSelection(el, savedSel) {\r\n let charIndex = 0;\r\n let nodeStack = [el], node, foundStart = false, stop = false;\r\n let range = document.createRange();\r\n range.setStart(el, 0);\r\n range.collapse(true);\r\n\r\n while (!stop && (node = nodeStack.pop())) {\r\n if (node.nodeType === 3) {\r\n let nextCharIndex = charIndex + node.length;\r\n if (!foundStart && savedSel.start >= charIndex && savedSel.start <= nextCharIndex) {\r\n range.setStart(node, savedSel.start - charIndex);\r\n foundStart = true;\r\n }\r\n if (foundStart && savedSel.end >= charIndex && savedSel.end <= nextCharIndex) {\r\n range.setEnd(node, savedSel.end - charIndex);\r\n stop = true;\r\n }\r\n charIndex = nextCharIndex;\r\n } else {\r\n let i = node.childNodes.length;\r\n while (i--) {\r\n nodeStack.push(node.childNodes[i]);\r\n }\r\n }\r\n }\r\n\r\n let sel = window.getSelection();\r\n sel.removeAllRanges();\r\n sel.addRange(range);\r\n }\r\n}\r\n\r\nexport default SelectionHelper;\r\n","'use strict';\r\n\r\nfunction ByColumnFilter (row, args) {\r\n \r\n let column = args.column;\r\n let keyword = args.keyword == null ? '' : args.keyword.toString();\r\n \r\n if (!keyword || !column) return true;\r\n\r\n let actualVal = row[column];\r\n if (actualVal == null) {\r\n return false;\r\n }\r\n \r\n actualVal = actualVal.toString();\r\n \r\n if (!args.caseSensitive) {\r\n actualVal = actualVal.toLowerCase();\r\n keyword = keyword.toLowerCase();\r\n }\r\n \r\n return actualVal.indexOf(keyword) !== -1;\r\n}\r\n\r\nexport default ByColumnFilter;","/* eslint-env browser */\r\n\r\n'use strict';\r\n\r\nimport jQuery from 'jquery';\r\nimport { find, htmlEncode, includes } from './util';\r\nimport RowCollection from './row_collection';\r\nimport ColumnCollection from './column_collection';\r\nimport CssUtil from './css_util';\r\nimport SelectionHelper from './SelectionHelper';\r\nimport {\r\n getScrollHorz,\r\n setScrollHorz,\r\n} from '@danielgindi/dom-utils/lib/ScrollHelper';\r\nimport {\r\n getElementWidth,\r\n getElementHeight,\r\n setElementWidth,\r\n} from '@danielgindi/dom-utils/lib/Css';\r\nimport ByColumnFilter from './by_column_filter';\r\n\r\nconst nativeIndexOf = Array.prototype.indexOf;\r\nconst $ = jQuery;\r\n\r\nlet userAgent = navigator.userAgent;\r\nlet ieVersion = userAgent.indexOf('MSIE ') !== -1 ? parseFloat(userAgent.substr(userAgent.indexOf('MSIE ') + 5)) : null;\r\nlet hasIeDragAndDropBug = ieVersion && ieVersion < 10;\r\nlet createElement = document.createElement.bind(document);\r\nconst hasOwnProperty = Object.prototype.hasOwnProperty;\r\n\r\nconst IsSafeSymbol = ('safe');\r\n\r\nfunction webkitRenderBugfix(el) {\r\n // BUGFIX: WebKit has a bug where it does not relayout, and this affects us because scrollbars\r\n // are still calculated even though they are not there yet. This is the last resort.\r\n let oldDisplay = el.style.display;\r\n el.style.display = 'none';\r\n //noinspection BadExpressionStatementJS\r\n el.offsetHeight; // No need to store this anywhere, the reference is enough\r\n el.style.display = oldDisplay;\r\n return el;\r\n}\r\n\r\nfunction relativizeElement($el) {\r\n if (!includes(['relative', 'absolute', 'fixed'], $el.css('position'))) {\r\n $el.css('position', 'relative');\r\n }\r\n}\r\n\r\nconst isInputElementEvent = event => /^(?:INPUT|TEXTAREA|BUTTON|SELECT)$/.test(event.target.tagName);\r\n\r\n/** @class DGTable */\r\nlet DGTable = function DGTable () {\r\n if (!(this instanceof DGTable)) {\r\n // Allow constructing without `new`\r\n return new (Function.prototype.bind.apply(\r\n DGTable,\r\n [DGTable].concat(Array.prototype.slice.call(arguments, 0))));\r\n }\r\n\r\n this.initialize.apply(this, arguments);\r\n};\r\n\r\n/**\r\n * @public\r\n * @expose\r\n * @type {string}\r\n */\r\nDGTable.VERSION = '@@VERSION';\r\n\r\n/**\r\n * @public\r\n * @expose\r\n * @type {string}\r\n */\r\nDGTable.prototype.VERSION = DGTable.VERSION;\r\n\r\n/**\r\n * @constructs\r\n * @param {DGTable.Options?} options - initialization options\r\n * @returns {DGTable}\r\n */\r\nDGTable.prototype.initialize = function (options) {\r\n let that = this;\r\n\r\n options = options || {};\r\n\r\n /**\r\n * @private\r\n * @type {DGTable.Options}\r\n * */\r\n let o = that.o = {};\r\n\r\n /**\r\n * @private\r\n * This is for encapsulating private data */\r\n let p = that.p = {};\r\n\r\n /** This is for encapsulating event callback */\r\n p.events = {};\r\n\r\n /**\r\n * @public\r\n * @expose\r\n * */\r\n that.el = (options.el && options.el instanceof Element) ? options.el : document.createElement('div');\r\n\r\n /**\r\n * @public\r\n * @expose\r\n * */\r\n let $el = that.$el = $(that.el);\r\n\r\n if (that.el !== options.el) {\r\n $el.addClass(options.className || 'dgtable-wrapper');\r\n }\r\n\r\n // Set control data\r\n $el\r\n .data('control', that)\r\n .data('dgtable', that);\r\n\r\n // For jQuery.UI or jquery.removeevent\r\n $el.on('remove', function () {\r\n that.destroy();\r\n });\r\n\r\n p.onMouseMoveResizeAreaBound = this._onMouseMoveResizeArea.bind(this);\r\n p.onEndDragColumnHeaderBound = this._onEndDragColumnHeader.bind(this);\r\n p.onTableScrolledHorizontallyBound = this._onTableScrolledHorizontally.bind(this);\r\n\r\n this.$el.on('dragend', p.onEndDragColumnHeaderBound);\r\n\r\n /**\r\n * @private\r\n * @field {Boolean} _tableSkeletonNeedsRendering */\r\n p.tableSkeletonNeedsRendering = true;\r\n\r\n /**\r\n * @private\r\n * @field {Boolean} virtualTable */\r\n o.virtualTable = options.virtualTable === undefined ? true : !!options.virtualTable;\r\n\r\n /**\r\n * @private\r\n * @field {Number} rowsBufferSize */\r\n o.rowsBufferSize = options.rowsBufferSize || 3;\r\n\r\n /**\r\n * @private\r\n * @field {Number} minColumnWidth */\r\n o.minColumnWidth = Math.max(options.minColumnWidth || 35, 0);\r\n\r\n /**\r\n * @private\r\n * @field {Number} resizeAreaWidth */\r\n o.resizeAreaWidth = options.resizeAreaWidth || 8;\r\n\r\n /**\r\n * @private\r\n * @field {Boolean} resizableColumns */\r\n o.resizableColumns = options.resizableColumns === undefined ? true : !!options.resizableColumns;\r\n\r\n /**\r\n * @private\r\n * @field {Boolean} movableColumns */\r\n o.movableColumns = options.movableColumns === undefined ? true : !!options.movableColumns;\r\n\r\n /**\r\n * @private\r\n * @field {Number} sortableColumns */\r\n o.sortableColumns = options.sortableColumns === undefined ? 1 : (parseInt(options.sortableColumns, 10) || 1);\r\n\r\n /**\r\n * @private\r\n * @field {Boolean} adjustColumnWidthForSortArrow */\r\n o.adjustColumnWidthForSortArrow = options.adjustColumnWidthForSortArrow === undefined ? true : !!options.adjustColumnWidthForSortArrow;\r\n\r\n /**\r\n * @private\r\n * @field {Boolean} convertColumnWidthsToRelative */\r\n o.convertColumnWidthsToRelative = options.convertColumnWidthsToRelative === undefined ? false : !!options.convertColumnWidthsToRelative;\r\n\r\n /**\r\n * @private\r\n * @field {Boolean} autoFillTableWidth */\r\n o.autoFillTableWidth = options.autoFillTableWidth === undefined ? false : !!options.autoFillTableWidth;\r\n\r\n /**\r\n * @private\r\n * @field {String} cellClasses */\r\n o.cellClasses = options.cellClasses === undefined ? '' : options.cellClasses;\r\n\r\n /**\r\n * @private\r\n * @field {String} resizerClassName */\r\n o.resizerClassName = options.resizerClassName === undefined ? 'dgtable-resize' : options.resizerClassName;\r\n\r\n /**\r\n * @private\r\n * @field {String} tableClassName */\r\n o.tableClassName = options.tableClassName === undefined ? 'dgtable' : options.tableClassName;\r\n\r\n /**\r\n * @private\r\n * @field {Boolean} allowCellPreview */\r\n o.allowCellPreview = options.allowCellPreview === undefined ? true : options.allowCellPreview;\r\n\r\n /**\r\n * @private\r\n * @field {Boolean} allowHeaderCellPreview */\r\n o.allowHeaderCellPreview = options.allowHeaderCellPreview === undefined ? true : options.allowHeaderCellPreview;\r\n\r\n /**\r\n * @private\r\n * @field {String} cellPreviewClassName */\r\n o.cellPreviewClassName = options.cellPreviewClassName === undefined ? 'dgtable-cell-preview' : options.cellPreviewClassName;\r\n\r\n /**\r\n * @private\r\n * @field {Boolean} cellPreviewAutoBackground */\r\n o.cellPreviewAutoBackground = options.cellPreviewAutoBackground === undefined ? true : options.cellPreviewAutoBackground;\r\n\r\n /**\r\n * @private\r\n * @field {function(columnName: string, descending: boolean, defaultComparator: function(a,b):number):(function(a,b):number)} onComparatorRequired */\r\n o.onComparatorRequired = options.onComparatorRequired === undefined ? null : options.onComparatorRequired;\r\n if (!o.onComparatorRequired && typeof options['comparatorCallback'] === 'function') {\r\n o.onComparatorRequired = options['comparatorCallback'];\r\n }\r\n\r\n /**\r\n * @private\r\n * @field {Boolean} width */\r\n o.width = options.width === undefined ? DGTable.Width.NONE : options.width;\r\n\r\n /**\r\n * @private\r\n * @field {Boolean} relativeWidthGrowsToFillWidth */\r\n o.relativeWidthGrowsToFillWidth = options.relativeWidthGrowsToFillWidth === undefined ? true : !!options.relativeWidthGrowsToFillWidth;\r\n\r\n /**\r\n * @private\r\n * @field {Boolean} relativeWidthShrinksToFillWidth */\r\n o.relativeWidthShrinksToFillWidth = options.relativeWidthShrinksToFillWidth === undefined ? false : !!options.relativeWidthShrinksToFillWidth;\r\n\r\n this.setCellFormatter(options.cellFormatter);\r\n this.setHeaderCellFormatter(options.headerCellFormatter);\r\n this.setFilter(options.filter);\r\n\r\n /** @private\r\n * @field {Number} height */\r\n o.height = options.height;\r\n\r\n // Prepare columns\r\n that.setColumns(options.columns || [], false);\r\n\r\n // Set sorting columns\r\n let sortColumns = [];\r\n\r\n if (options.sortColumn) {\r\n\r\n let tmpSortColumns = options.sortColumn;\r\n\r\n if (tmpSortColumns && typeof tmpSortColumns !== 'object') {\r\n tmpSortColumns = [tmpSortColumns];\r\n }\r\n\r\n if (tmpSortColumns instanceof Array ||\r\n typeof tmpSortColumns === 'object') {\r\n\r\n for (let i = 0, len = tmpSortColumns.length; i < len; i++) {\r\n let sortColumn = tmpSortColumns[i];\r\n if (typeof sortColumn === 'string') {\r\n sortColumn = { column: sortColumn, descending: false };\r\n }\r\n let col = p.columns.get(sortColumn.column);\r\n if (!col) continue;\r\n\r\n sortColumns.push({\r\n column: sortColumn.column,\r\n comparePath: col.comparePath || col.dataPath,\r\n descending: sortColumn.descending,\r\n });\r\n }\r\n }\r\n }\r\n\r\n /** @field {RowCollection} _rows */\r\n p.rows = new RowCollection({ sortColumn: sortColumns });\r\n p.rows.onComparatorRequired = (column, descending, defaultComparator) => {\r\n if (o.onComparatorRequired) {\r\n return o.onComparatorRequired(column, descending, defaultComparator);\r\n }\r\n };\r\n\r\n /** @private\r\n * @field {RowCollection} _filteredRows */\r\n p.filteredRows = null;\r\n\r\n /*\r\n Setup hover mechanism.\r\n We need this to be high performance, as there may be MANY cells to call this on, on creation and destruction.\r\n Using native events to spare the overhead of jQuery's event binding, and even just the creation of the jQuery collection object.\r\n */\r\n\r\n /**\r\n * @param {MouseEvent} evt\r\n * @this {HTMLElement}\r\n * */\r\n let hoverMouseOverHandler = function (evt) {\r\n evt = evt || event;\r\n let relatedTarget = evt.fromElement || evt.relatedTarget;\r\n if (relatedTarget === this || $.contains(this, relatedTarget)) return;\r\n if (this['__previewCell'] && (relatedTarget === this['__previewCell'] || $.contains(this['__previewCell'], relatedTarget))) return;\r\n that._cellMouseOverEvent.call(that, this);\r\n };\r\n\r\n /**\r\n * @param {MouseEvent} evt\r\n * @this {HTMLElement}\r\n * */\r\n let hoverMouseOutHandler = function (evt) {\r\n evt = evt || event;\r\n let relatedTarget = evt.toElement || evt.relatedTarget;\r\n if (relatedTarget === this || $.contains(this, relatedTarget)) return;\r\n if (this['__previewCell'] && (relatedTarget === this['__previewCell'] || $.contains(this['__previewCell'], relatedTarget))) return;\r\n that._cellMouseOutEvent.call(that, this);\r\n };\r\n\r\n if ('addEventListener' in window) {\r\n\r\n /**\r\n * @param {HTMLElement} el cell or header-cell\r\n * */\r\n p._bindCellHoverIn = function (el) {\r\n if (!el['__hoverIn']) {\r\n el.addEventListener('mouseover', el['__hoverIn'] = hoverMouseOverHandler.bind(el));\r\n }\r\n };\r\n\r\n /**\r\n * @param {HTMLElement} el cell or header-cell\r\n * */\r\n p._unbindCellHoverIn = function (el) {\r\n if (el['__hoverIn']) {\r\n el.removeEventListener('mouseover', el['__hoverIn']);\r\n el['__hoverIn'] = null;\r\n }\r\n };\r\n\r\n /**\r\n * @param {HTMLElement} el cell or header-cell\r\n * @returns {DGTable} self\r\n * */\r\n p._bindCellHoverOut = function (el) {\r\n if (!el['__hoverOut']) {\r\n el.addEventListener('mouseout', el['__hoverOut'] = hoverMouseOutHandler.bind(el['__cell'] || el));\r\n }\r\n return this;\r\n };\r\n\r\n /**\r\n * @param {HTMLElement} el cell or header-cell\r\n * @returns {DGTable} self\r\n * */\r\n p._unbindCellHoverOut = function (el) {\r\n if (el['__hoverOut']) {\r\n el.removeEventListener('mouseout', el['__hoverOut']);\r\n el['__hoverOut'] = null;\r\n }\r\n return this;\r\n };\r\n\r\n } else {\r\n\r\n /**\r\n * @param {HTMLElement} el cell or header-cell\r\n * */\r\n p._bindCellHoverIn = function (el) {\r\n if (!el['__hoverIn']) {\r\n el.attachEvent('mouseover', el['__hoverIn'] = hoverMouseOverHandler.bind(el));\r\n }\r\n };\r\n\r\n /**\r\n * @param {HTMLElement} el cell or header-cell\r\n * */\r\n p._unbindCellHoverIn = function (el) {\r\n if (el['__hoverIn']) {\r\n el.detachEvent('mouseover', el['__hoverIn']);\r\n el['__hoverIn'] = null;\r\n }\r\n };\r\n\r\n /**\r\n * @param {HTMLElement} el cell or header-cell\r\n * */\r\n p._bindCellHoverOut = function (el) {\r\n if (!el['__hoverOut']) {\r\n el.attachEvent('mouseout', el['__hoverOut'] = hoverMouseOutHandler.bind(el['__cell'] || el));\r\n }\r\n };\r\n\r\n /**\r\n * @param {HTMLElement} el cell or header-cell\r\n * @returns {DGTable} self\r\n * */\r\n p._unbindCellHoverOut = function (el) {\r\n if (el['__hoverOut']) {\r\n el.detachEvent('mouseout', el['__hoverOut']);\r\n el['__hoverOut'] = null;\r\n }\r\n return this;\r\n };\r\n\r\n }\r\n};\r\n\r\n/**\r\n * Add an event listener\r\n * @public\r\n * @expose\r\n * @param {String} eventName\r\n * @param {Function} callback\r\n * @returns {DGTable}\r\n */\r\nDGTable.prototype.on = function (eventName, callback) {\r\n let that = this, events = that.p.events;\r\n\r\n if (typeof callback !== 'function')\r\n return that;\r\n\r\n if (!hasOwnProperty.call(events, eventName))\r\n events[eventName] = [];\r\n\r\n events[eventName].push({\r\n cb: callback,\r\n once: false,\r\n });\r\n\r\n return that;\r\n};\r\n\r\n/**\r\n * Add an event listener for a one shot\r\n * @public\r\n * @expose\r\n * @param {String} eventName\r\n * @param {Function} callback\r\n * @returns {DGTable}\r\n */\r\nDGTable.prototype.once = function (eventName, callback) {\r\n let that = this, events = that.p.events;\r\n\r\n if (typeof callback !== 'function')\r\n return that;\r\n\r\n if (!hasOwnProperty.call(events, eventName))\r\n events[eventName] = [];\r\n\r\n events[eventName].push({\r\n cb: callback,\r\n once: true,\r\n });\r\n\r\n return that;\r\n};\r\n\r\n/**\r\n * Remove an event listener\r\n * @public\r\n * @expose\r\n * @param {String} eventName\r\n * @param {Function} callback\r\n * @returns {DGTable}\r\n */\r\nDGTable.prototype.off = function (eventName, callback) {\r\n let events = this.p.events;\r\n\r\n if (!hasOwnProperty.call(events, eventName))\r\n return this;\r\n\r\n let callbacks = events[eventName];\r\n for (let i = 0; i < callbacks.length; i++) {\r\n let item = callbacks[i];\r\n if (callback && item.cb !== callback) continue;\r\n callbacks.splice(i--, 1);\r\n }\r\n\r\n return this;\r\n};\r\n\r\nDGTable.prototype.trigger = function (eventName) {\r\n let events = this.p.events;\r\n\r\n if (hasOwnProperty.call(events, eventName)) {\r\n let callbacks = events[eventName];\r\n for (let i = 0; i < callbacks.length; i++) {\r\n let item = callbacks[i];\r\n if (item.once) {\r\n callbacks.splice(i--, 1);\r\n }\r\n item.cb.apply(this, Array.prototype.slice.call(arguments, 1));\r\n }\r\n }\r\n\r\n return this;\r\n};\r\n\r\n/**\r\n * Detect column width mode\r\n * @private\r\n * @param {Number|String} width\r\n * @param {Number} minWidth\r\n * @returns {Object} parsed width\r\n */\r\nDGTable.prototype._parseColumnWidth = function (width, minWidth) {\r\n\r\n let widthSize = Math.max(0, parseFloat(width)),\r\n widthMode = ColumnWidthMode.AUTO; // Default\r\n\r\n if (widthSize > 0) {\r\n // Well, it's sure is not AUTO, as we have a value\r\n\r\n if (width === widthSize + '%') {\r\n // It's a percentage!\r\n\r\n widthMode = ColumnWidthMode.RELATIVE;\r\n widthSize /= 100;\r\n } else if (widthSize > 0 && widthSize < 1) {\r\n // It's a decimal value, as a relative value!\r\n\r\n widthMode = ColumnWidthMode.RELATIVE;\r\n } else {\r\n // It's an absolute size!\r\n\r\n if (widthSize < minWidth) {\r\n widthSize = minWidth;\r\n }\r\n widthMode = ColumnWidthMode.ABSOLUTE;\r\n }\r\n }\r\n\r\n return { width: widthSize, mode: widthMode };\r\n};\r\n\r\n/**\r\n * @private\r\n * @param {COLUMN_OPTIONS} columnData\r\n */\r\nDGTable.prototype._initColumnFromData = function(columnData) {\r\n\r\n let parsedWidth = this._parseColumnWidth(columnData.width, columnData.ignoreMin ? 0 : this.o.minColumnWidth);\r\n\r\n let col = {\r\n name: columnData.name,\r\n label: columnData.label === undefined ? columnData.name : columnData.label,\r\n width: parsedWidth.width,\r\n widthMode: parsedWidth.mode,\r\n resizable: columnData.resizable === undefined ? true : columnData.resizable,\r\n sortable: columnData.sortable === undefined ? true : columnData.sortable,\r\n movable: columnData.movable === undefined ? true : columnData.movable,\r\n visible: columnData.visible === undefined ? true : columnData.visible,\r\n cellClasses: columnData.cellClasses === undefined ? this.o.cellClasses : columnData.cellClasses,\r\n ignoreMin: columnData.ignoreMin === undefined ? false : !!columnData.ignoreMin,\r\n };\r\n\r\n col.dataPath = columnData.dataPath === undefined ? col.name : columnData.dataPath;\r\n col.comparePath = columnData.comparePath === undefined ? col.dataPath : columnData.comparePath;\r\n\r\n if (typeof col.dataPath === 'string') {\r\n col.dataPath = col.dataPath.split('.');\r\n }\r\n if (typeof col.comparePath === 'string') {\r\n col.comparePath = col.comparePath.split('.');\r\n }\r\n\r\n return col;\r\n};\r\n\r\n/**\r\n * Destroy, releasing all memory, events and DOM elements\r\n * @public\r\n * @expose\r\n */\r\nDGTable.prototype.close = DGTable.prototype.remove = DGTable.prototype.destroy = function () {\r\n\r\n let that = this,\r\n p = that.p || {},\r\n $el = that.$el;\r\n\r\n if (that.__removed) {\r\n return that;\r\n }\r\n\r\n if (p.$resizer) {\r\n p.$resizer.remove();\r\n p.$resizer = null;\r\n }\r\n\r\n if (p.$tbody) {\r\n let trs = p.$tbody[0].childNodes;\r\n for (let i = 0, len = trs.length; i < len; i++) {\r\n that.trigger('rowdestroy', trs[i]);\r\n }\r\n }\r\n\r\n // Using quotes for __super__ because Google Closure Compiler has a bug...\r\n\r\n this._destroyHeaderCells()._unbindCellEventsForTable();\r\n if (p.$table) {\r\n p.$table.empty();\r\n }\r\n if (p.$tbody) {\r\n p.$tbody.empty();\r\n }\r\n\r\n if (p.workerListeners) {\r\n for (let j = 0; j < p.workerListeners.length; j++) {\r\n let worker = p.workerListeners[j];\r\n worker.worker.removeEventListener('message', worker.listener, false);\r\n }\r\n p.workerListeners.length = 0;\r\n }\r\n\r\n p.rows.length = p.columns.length = 0;\r\n\r\n if (p._deferredRender) {\r\n clearTimeout(p._deferredRender);\r\n }\r\n\r\n // Cleanup\r\n for (let prop in that) {\r\n if (hasOwnProperty.call(that, prop)) {\r\n that[prop] = null;\r\n }\r\n }\r\n\r\n that.__removed = true;\r\n\r\n if ($el) {\r\n $el.remove();\r\n }\r\n\r\n return this;\r\n};\r\n\r\n/**\r\n * @private\r\n * @returns {DGTable} self\r\n */\r\nDGTable.prototype._unbindCellEventsForTable = function() {\r\n const p = this.p;\r\n\r\n if (p.headerRow) {\r\n for (let i = 0, rows = p.headerRow.childNodes, rowCount = rows.length; i < rowCount; i++) {\r\n let rowToClean = rows[i];\r\n for (let j = 0, cells = rowToClean.childNodes, cellCount = cells.length; j < cellCount; j++) {\r\n p._unbindCellHoverIn(cells[j]);\r\n }\r\n }\r\n }\r\n\r\n if (p.tbody) {\r\n for (let i = 0, rows = p.tbody.childNodes, rowCount = rows.length; i < rowCount; i++) {\r\n this._unbindCellEventsForRow(rows[i]);\r\n }\r\n }\r\n\r\n return this;\r\n};\r\n\r\n/**\r\n * @private\r\n * @param {HTMLElement} rowToClean\r\n * @returns {DGTable} self\r\n */\r\nDGTable.prototype._unbindCellEventsForRow = function(rowToClean) {\r\n const p = this.p;\r\n for (let i = 0, cells = rowToClean.childNodes, cellCount = cells.length; i < cellCount; i++) {\r\n p._unbindCellHoverIn(cells[i]);\r\n }\r\n return this;\r\n};\r\n\r\n/**\r\n * @public\r\n * @expose\r\n * @returns {DGTable} self\r\n */\r\nDGTable.prototype.render = function () {\r\n const o = this.o, p = this.p;\r\n\r\n if (!this.el.offsetParent) {\r\n if (!p._deferredRender) {\r\n p._deferredRender = setTimeout(() => {\r\n p._deferredRender = null;\r\n if (!this.__removed && this.el.offsetParent) {\r\n this.render();\r\n }\r\n });\r\n }\r\n\r\n return this;\r\n }\r\n\r\n let renderedRows, rowCount;\r\n\r\n if (p.tableSkeletonNeedsRendering === true) {\r\n p.tableSkeletonNeedsRendering = false;\r\n\r\n if (o.width === DGTable.Width.AUTO) {\r\n // We need to do this to return to the specified widths instead. The arrows added to the column widths...\r\n this._clearSortArrows();\r\n }\r\n\r\n let lastScrollTop = p.table && p.table.parentNode ? p.table.scrollTop : NaN,\r\n lastScrollHorz = p.table && p.table.parentNode ? getScrollHorz(p.table) : NaN;\r\n\r\n this._renderSkeletonBase()\r\n ._renderSkeletonBody()\r\n .tableWidthChanged(true, false) // Take this chance to calculate required column widths\r\n ._renderSkeletonHeaderCells();\r\n\r\n if (!o.virtualTable) {\r\n let rows = p.filteredRows || p.rows;\r\n rowCount = rows.length;\r\n renderedRows = this.renderRows(0, rowCount - 1);\r\n p.$tbody.html('').append(renderedRows);\r\n }\r\n\r\n this._updateLastCellWidthFromScrollbar(true);\r\n\r\n this._updateTableWidth(true);\r\n\r\n // Show sort arrows\r\n for (let i = 0; i < p.rows.sortColumn.length; i++) {\r\n this._showSortArrow(p.rows.sortColumn[i].column, p.rows.sortColumn[i].descending);\r\n }\r\n if (o.adjustColumnWidthForSortArrow && p.rows.sortColumn.length) {\r\n this.tableWidthChanged(true);\r\n } else if (!o.virtualTable) {\r\n this.tableWidthChanged();\r\n }\r\n\r\n if (!isNaN(lastScrollTop))\r\n p.table.scrollTop = lastScrollTop;\r\n\r\n if (!isNaN(lastScrollHorz)) {\r\n setScrollHorz(p.table, lastScrollHorz);\r\n setScrollHorz(p.header, lastScrollHorz);\r\n }\r\n\r\n this.trigger('renderskeleton');\r\n\r\n if (o.virtualTable) {\r\n p.$table.on('scroll', this._onVirtualTableScrolled.bind(this));\r\n this.render();\r\n }\r\n\r\n } else if (o.virtualTable) {\r\n rowCount = (p.filteredRows || p.rows).length;\r\n let scrollTop = p.table.scrollTop;\r\n let firstVisible = Math.floor((scrollTop - p.virtualRowHeightFirst) / p.virtualRowHeight) + 1 - o.rowsBufferSize;\r\n let lastVisible = Math.ceil(((scrollTop - p.virtualRowHeightFirst + p.visibleHeight) / p.virtualRowHeight)) + o.rowsBufferSize;\r\n if (firstVisible < 0) firstVisible = 0;\r\n if (lastVisible >= rowCount) {\r\n lastVisible = rowCount - 1;\r\n }\r\n\r\n let oldFirstVisible = -1, oldLastVisible = -1;\r\n let tbodyChildNodes = p.tbody.childNodes;\r\n if (tbodyChildNodes.length) {\r\n oldFirstVisible = tbodyChildNodes[0]['rowIndex'];\r\n oldLastVisible = tbodyChildNodes[tbodyChildNodes.length - 1]['rowIndex'];\r\n }\r\n\r\n let countToRemove;\r\n\r\n if (oldFirstVisible !== -1 && oldFirstVisible < firstVisible) {\r\n countToRemove = Math.min(oldLastVisible + 1, firstVisible) - oldFirstVisible;\r\n for (let i = 0; i < countToRemove; i++) {\r\n this.trigger('rowdestroy', tbodyChildNodes[0]);\r\n this._unbindCellEventsForRow(tbodyChildNodes[0]);\r\n p.tbody.removeChild(tbodyChildNodes[0]);\r\n }\r\n oldFirstVisible += countToRemove;\r\n if (oldFirstVisible > oldLastVisible) {\r\n oldFirstVisible = oldLastVisible = -1;\r\n }\r\n } else if (oldLastVisible !== -1 && oldLastVisible > lastVisible) {\r\n countToRemove = oldLastVisible - Math.max(oldFirstVisible - 1, lastVisible);\r\n for (let i = 0; i < countToRemove; i++) {\r\n this.trigger('rowdestroy', tbodyChildNodes[tbodyChildNodes.length - 1]);\r\n this._unbindCellEventsForRow(tbodyChildNodes[tbodyChildNodes.length - 1]);\r\n p.tbody.removeChild(tbodyChildNodes[tbodyChildNodes.length - 1]);\r\n }\r\n if (oldLastVisible < oldFirstVisible) {\r\n oldFirstVisible = oldLastVisible = -1;\r\n }\r\n }\r\n\r\n if (firstVisible < oldFirstVisible) {\r\n renderedRows = this.renderRows(firstVisible, Math.min(lastVisible, oldFirstVisible - 1));\r\n p.$tbody.prepend(renderedRows);\r\n }\r\n if (lastVisible > oldLastVisible || oldLastVisible === -1) {\r\n renderedRows = this.renderRows(oldLastVisible === -1 ? firstVisible : oldLastVisible + 1, lastVisible);\r\n p.$tbody.append(renderedRows);\r\n }\r\n }\r\n this.trigger('render');\r\n return this;\r\n};\r\n\r\n/**\r\n * Forces a full render of the table\r\n * @public\r\n * @expose\r\n * @param {Boolean=true} render - Should render now?\r\n * @returns {DGTable} self\r\n */\r\nDGTable.prototype.clearAndRender = function (render) {\r\n let p = this.p;\r\n\r\n p.tableSkeletonNeedsRendering = true;\r\n\r\n if (render === undefined || render) {\r\n this.render();\r\n }\r\n\r\n return this;\r\n};\r\n\r\n/**\r\n * Render rows\r\n * @private\r\n * @param {Number} first first row to render\r\n * @param {Number} last last row to render\r\n * @returns {DocumentFragment} fragment containing all rendered rows\r\n */\r\nDGTable.prototype.renderRows = function (first, last) {\r\n const o = this.o, p = this.p;\r\n\r\n let tableClassName = o.tableClassName,\r\n rowClassName = tableClassName + '-row',\r\n cellClassName = tableClassName + '-cell',\r\n rows = p.filteredRows || p.rows,\r\n isDataFiltered = !!p.filteredRows,\r\n allowCellPreview = o.allowCellPreview,\r\n visibleColumns = p.visibleColumns,\r\n isVirtual = o.virtualTable,\r\n virtualRowHeightFirst = p.virtualRowHeightFirst,\r\n virtualRowHeight = p.virtualRowHeight,\r\n top,\r\n physicalRowIndex;\r\n\r\n let colCount = visibleColumns.length;\r\n for (let colIndex = 0, column; colIndex < colCount; colIndex++) {\r\n column = visibleColumns[colIndex];\r\n column._finalWidth = (column.actualWidthConsideringScrollbarWidth || column.actualWidth);\r\n }\r\n\r\n let bodyFragment = document.createDocumentFragment();\r\n\r\n let isRtl = this._isTableRtl(),\r\n virtualRowXAttr = isRtl ? 'right' : 'left';\r\n\r\n const supportedTransform = CssUtil.getSupportedTransform();\r\n\r\n for (let i = first, rowCount = rows.length;\r\n i < rowCount && i <= last;\r\n i++) {\r\n\r\n let rowData = rows[i];\r\n physicalRowIndex = isDataFiltered ? rowData['__i'] : i;\r\n\r\n let row = createElement('div');\r\n row.className = rowClassName;\r\n row['rowIndex'] = i;\r\n row['physicalRowIndex'] = physicalRowIndex;\r\n\r\n for (let colIndex = 0; colIndex < colCount; colIndex++) {\r\n let column = visibleColumns[colIndex];\r\n let cell = createElement('div');\r\n cell['columnName'] = column.name;\r\n cell.setAttribute('data-column', column.name);\r\n cell.className = cellClassName;\r\n cell.style.width = column._finalWidth + 'px';\r\n if (column.cellClasses) cell.className += ' ' + column.cellClasses;\r\n if (allowCellPreview) {\r\n p._bindCellHoverIn(cell);\r\n }\r\n\r\n let cellInner = cell.appendChild(createElement('div'));\r\n cellInner.innerHTML = this._getHtmlForCell(rowData, column);\r\n\r\n row.appendChild(cell);\r\n }\r\n\r\n if (isVirtual) {\r\n top = i > 0 ? virtualRowHeightFirst + (i - 1) * virtualRowHeight : 0;\r\n row.style.position = 'absolute';\r\n row.style[virtualRowXAttr] = 0;\r\n\r\n if (supportedTransform === false) {\r\n row.style.top = `${top}px`;\r\n } else {\r\n row.style.top = '0px';\r\n row.style[supportedTransform] = `translateY(${top}px)`;\r\n }\r\n }\r\n\r\n bodyFragment.appendChild(row);\r\n\r\n this.trigger('rowcreate', i, physicalRowIndex, row, rowData);\r\n }\r\n\r\n return bodyFragment;\r\n};\r\n\r\n/**\r\n * Calculate virtual table height for scrollbar\r\n * @private\r\n * @returns {DGTable} self\r\n */\r\nDGTable.prototype._calculateVirtualHeight = function () {\r\n let p = this.p;\r\n\r\n if (p.tbody) {\r\n let rowCount = (p.filteredRows || p.rows).length;\r\n let height = p.virtualRowHeight * rowCount;\r\n if (rowCount) {\r\n height += (p.virtualRowHeightFirst - p.virtualRowHeight);\r\n height += (p.virtualRowHeightLast - p.virtualRowHeight);\r\n }\r\n // At least 1 pixel - to show scrollers correctly.\r\n if (height < 1) {\r\n height = 1;\r\n }\r\n p.tbody.style.height = height + 'px';\r\n }\r\n return this;\r\n};\r\n\r\n/**\r\n * Calculate the size required for the table body width (which is the row's width)\r\n * @private\r\n * @returns {Number} calculated width\r\n */\r\nDGTable.prototype._calculateTbodyWidth = function () {\r\n const p = this.p;\r\n\r\n let tableClassName = this.o.tableClassName,\r\n rowClassName = tableClassName + '-row',\r\n cellClassName = tableClassName + '-cell',\r\n visibleColumns = p.visibleColumns,\r\n colCount = visibleColumns.length,\r\n cell,\r\n cellInner,\r\n colIndex,\r\n column;\r\n\r\n let $row = $('<div>').addClass(rowClassName).css('float', 'left');\r\n let sumActualWidth = 0;\r\n\r\n for (colIndex = 0; colIndex < colCount; colIndex++) {\r\n column = visibleColumns[colIndex];\r\n cell = createElement('div');\r\n cell.className = cellClassName;\r\n cell.style.width = column.actualWidth + 'px';\r\n if (column.cellClasses) cell.className += ' ' + column.cellClasses;\r\n cellInner = cell.appendChild(createElement('div'));\r\n $row.append(cell);\r\n sumActualWidth += column.actualWidth;\r\n }\r\n\r\n let $thisWrapper = $('<div>')\r\n .addClass(this.el.className)\r\n .css({ 'z-index': -1, 'position': 'absolute', left: '0', top: '-9999px', 'float': 'left', width: '1px', overflow: 'hidden' })\r\n .append(\r\n $('<div>').addClass(tableClassName).append(\r\n $('<div>').addClass(tableClassName + '-body').css('width', sumActualWidth + 10000).append(\r\n $row,\r\n ),\r\n ),\r\n );\r\n\r\n $thisWrapper.appendTo(document.body);\r\n\r\n let fractionTest = $('<div style=\"border:1.5px solid #000;width:0;height:0;position:absolute;left:0;top:-9999px\">').appendTo(document.body);\r\n let fractionValue = parseFloat(fractionTest.css('border-width'));\r\n let hasFractions = Math.round(fractionValue) !== fractionValue;\r\n fractionTest.remove();\r\n\r\n let width = getElementWidth($row[0], true, true, true);\r\n width -= p.scrollbarWidth || 0;\r\n\r\n if (hasFractions) {\r\n width++;\r\n }\r\n\r\n $thisWrapper.remove();\r\n return width;\r\n};\r\n\r\n/**\r\n * Sets the columns of the table\r\n * @public\r\n * @expose\r\n * @param {COLUMN_OPTIONS[]} columns - Column definitions array\r\n * @param {Boolean=true} render - Should render now?\r\n * @returns {DGTable} self\r\n */\r\nDGTable.prototype.setColumns = function (columns, render) {\r\n const p = this.p;\r\n\r\n columns = columns || [];\r\n\r\n let normalizedCols = new ColumnCollection();\r\n for (let i = 0, order = 0; i < columns.length; i++) {\r\n\r\n let columnData = columns[i];\r\n let normalizedColumn = this._initColumnFromData(columnData);\r\n\r\n if (columnData.order !== undefined) {\r\n if (columnData.order > order) {\r\n order = columnData.order + 1;\r\n }\r\n normalizedColumn.order = columnData.order;\r\n } else {\r\n normalizedColumn.order = order++;\r\n }\r\n\r\n normalizedCols.push(normalizedColumn);\r\n }\r\n normalizedCols.normalizeOrder();\r\n\r\n p.columns = normalizedCols;\r\n p.visibleColumns = normalizedCols.getVisibleColumns();\r\n\r\n this._ensureVisibleColumns().clearAndRender(render);\r\n\r\n return this;\r\n};\r\n\r\n/**\r\n * Add a column to the table\r\n * @public\r\n * @expose\r\n * @param {COLUMN_OPTIONS} columnData column properties\r\n * @param {String|Number} [before=-1] column name or order to be inserted before\r\n * @param {Boolean=true} render - Should render now?\r\n * @returns {DGTable} self\r\n */\r\nDGTable.prototype.addColumn = function (columnData, before, render) {\r\n const p = this.p;\r\n let columns = p.columns;\r\n\r\n if (columnData && !columns.get(columnData.name)) {\r\n let beforeColumn = null;\r\n if (before !== undefined) {\r\n beforeColumn = columns.get(before) || columns.getByOrder(before);\r\n }\r\n\r\n let column = this._initColumnFromData(columnData);\r\n column.order = beforeColumn ? beforeColumn.order : (columns.getMaxOrder() + 1);\r\n\r\n for (let i = columns.getMaxOrder(), to = column.order; i >= to ; i--) {\r\n let col = columns.getByOrder(i);\r\n if (col) {\r\n col.order++;\r\n }\r\n }\r\n\r\n columns.push(column);\r\n columns.normalizeOrder();\r\n\r\n p.visibleColumns = columns.getVisibleColumns();\r\n this._ensureVisibleColumns().clearAndRender(render);\r\n\r\n this.trigger('addcolumn', column.name);\r\n }\r\n return this;\r\n};\r\n\r\n/**\r\n * Remove a column from the table\r\n * @public\r\n * @expose\r\n * @param {String} column column name\r\n * @param {Boolean=true} render - Should render now?\r\n * @returns {DGTable} self\r\n */\r\nDGTable.prototype.removeColumn = function (column, render) {\r\n const p = this.p;\r\n let columns = p.columns;\r\n\r\n let colIdx = columns.indexOf(column);\r\n if (colIdx > -1) {\r\n columns.splice(colIdx, 1);\r\n columns.normalizeOrder();\r\n\r\n p.visibleColumns = columns.getVisibleColumns();\r\n this._ensureVisibleColumns().clearAndRender(render);\r\n\r\n this.trigger('removecolumn', column);\r\n }\r\n return this;\r\n};\r\n\r\n/**\r\n * Sets a new cell formatter.\r\n * @public\r\n * @expose\r\n * @param {function(value: *, columnName: String, row: Object):String|null} [formatter=null] - The cell formatter. Should return an HTML.\r\n * @returns {DGTable} self\r\n */\r\nDGTable.prototype.setCellFormatter = function (formatter) {\r\n if (!formatter) {\r\n formatter = val => (typeof val === 'string') ? htmlEncode(val) : val;\r\n formatter[IsSafeSymbol] = true;\r\n }\r\n\r\n /**\r\n * @private\r\n * @field {Function} cellFormatter */\r\n this.o.cellFormatter = formatter;\r\n\r\n return this;\r\n};\r\n\r\n/**\r\n * Sets a new header cell formatter.\r\n * @public\r\n * @expose\r\n * @param {function(label: String, columnName: String):String|null} [formatter=null] - The cell formatter. Should return an HTML.\r\n * @returns {DGTable} self\r\n */\r\nDGTable.prototype.setHeaderCellFormatter = function (formatter) {\r\n /**\r\n * @private\r\n * @field {Function} headerCellFormatter */\r\n this.o.headerCellFormatter = formatter || function (val) {\r\n return (typeof val === 'string') ? htmlEncode(val) : val;\r\n };\r\n\r\n return this;\r\n};\r\n\r\n/**\r\n * @public\r\n * @expose\r\n * @param {function(row:Object,args:Object):Boolean|null} [filterFunc=null] - The filter function to work with filters. Default is a by-colum filter.\r\n * @returns {DGTable} self\r\n */\r\nDGTable.prototype.setFilter = function (filterFunc) {\r\n /** @private\r\n * @field {Function} filter */\r\n this.o.filter = filterFunc;\r\n return this;\r\n};\r\n\r\n/**\r\n * @public\r\n * @expose\r\n * @param {Object|null} args - Options to pass to the filter function\r\n * @returns {DGTable} self\r\n */\r\nDGTable.prototype.filter = function (args) {\r\n const p = this.p;\r\n\r\n let filterFunc = this.o.filter || ByColumnFilter;\r\n\r\n // Deprecated use of older by-column filter\r\n if (typeof arguments[0] === 'string' && typeof arguments[1] === 'string') {\r\n args = {\r\n column: arguments[0],\r\n keyword: arguments[1],\r\n caseSensitive: arguments[2],\r\n };\r\n }\r\n\r\n let hadFilter = !!p.filteredRows;\r\n if (p.filteredRows) {\r\n p.filteredRows = null; // Allow releasing array memory now\r\n }\r\n\r\n // Shallow-clone the args, as the filter function may want to modify it for keeping state\r\n p.filterArgs = args == null ? null : ((typeof args === 'object' && !Array.isArray(args)) ? $.extend({}, args) : args);\r\n\r\n if (p.filterArgs !== null) {\r\n p.filteredRows = p.rows.filteredCollection(filterFunc, p.filterArgs);\r\n\r\n if (hadFilter || p.filteredRows) {\r\n this.clearAndRender();\r\n this.trigger('filter', args);\r\n }\r\n }\r\n else {\r\n p.filterArgs = null;\r\n p.filteredRows = null;\r\n this.clearAndRender();\r\n this.trigger('filterclear', {});\r\n }\r\n\r\n return this;\r\n};\r\n\r\n/**\r\n * @public\r\n * @expose\r\n * @returns {DGTable} self\r\n */\r\nDGTable.prototype.clearFilter = function () {\r\n const p = this.p;\r\n\r\n if (p.filteredRows) {\r\n p.filterArgs = null;\r\n p.filteredRows = null;\r\n this.clearAndRender();\r\n this.trigger('filterclear', {});\r\n }\r\n\r\n return this;\r\n};\r\n\r\n/**\r\n * @private\r\n * @returns {DGTable} self\r\n */\r\nDGTable.prototype._refilter = function() {\r\n const p = this.p;\r\n\r\n if (p.filteredRows && p.filterArgs) {\r\n let filterFunc = this.o.filter || ByColumnFilter;\r\n p.filteredRows = p.rows.filteredCollection(filterFunc, p.filterArgs);\r\n }\r\n return this;\r\n};\r\n\r\n/**\r\n * Set a new label to a column\r\n * @public\r\n * @expose\r\n * @param {String} column Name of the column\r\n * @param {String} label New label for the column\r\n * @returns {DGTable} self\r\n */\r\nDGTable.prototype.setColumnLabel = function (column, label) {\r\n const p = this.p;\r\n\r\n let col = p.columns.get(column);\r\n if (col) {\r\n col.label = label === undefined ? col.name : label;\r\n\r\n if (col.element) {\r\n for (let i = 0; i < col.element[0].firstChild.childNodes.length; i++) {\r\n let node = col.element[0].firstChild.childNodes[i];\r\n if (node.nodeType === 3) {\r\n node.textContent = col.label;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n return this;\r\n};\r\n\r\n/**\r\n * Move a column to a new position\r\n * @public\r\n * @expose\r\n * @param {string|number} src Name or position of the column to be moved\r\n * @param {string|number} dest Name of the column currently in the desired position, or the position itself\r\n * @param {boolean} [visibleOnly=true] Should consider only visible columns and visible-relative indexes\r\n * @returns {DGTable} self\r\n */\r\nDGTable.prototype.moveColumn = function (src, dest, visibleOnly = true) {\r\n const o = this.o, p = this.p;\r\n\r\n let columns = p.columns,\r\n col, destCol;\r\n\r\n let columnsArray = visibleOnly ? p.visibleColumns : columns.getColumns();\r\n\r\n if (typeof src === 'string') {\r\n col = columns.get(src);\r\n } else if (typeof src === 'number') {\r\n col = columnsArray[src];\r\n }\r\n if (typeof dest === 'string') {\r\n destCol = columns.get(dest);\r\n } else if (typeof dest === 'number') {\r\n destCol = columnsArray[dest];\r\n }\r\n\r\n if (col && destCol && src !== dest) {\r\n let srcOrder = col.order, destOrder = destCol.order;\r\n\r\n let visibleColumns = columns.moveColumn(col, destCol).getVisibleColumns();\r\n\r\n if (p.visibleColumns.length !== visibleColumns.length ||\r\n p.visibleColumns.some((x, i) => x !== visibleColumns[i])) {\r\n\r\n p.visibleColumns = visibleColumns;\r\n this._ensureVisibleColumns();\r\n\r\n if (o.virtualTable) {\r\n this.clearAndRender()\r\n ._updateLastCellWidthFromScrollbar(true);\r\n } else {\r\n let headerCell = p.$headerRow.find('>div.' + o.tableClassName + '-header-cell');\r\n let beforePos = srcOrder < destOrder ? destOrder + 1 : destOrder,\r\n fromPos = srcOrder;\r\n headerCell[0].parentNode.insertBefore(headerCell[fromPos], headerCell[beforePos]);\r\n\r\n let srcWidth = p.visibleColumns[srcOrder];\r\n srcWidth = (srcWidth.actualWidthConsideringScrollbarWidth || srcWidth.actualWidth) + 'px';\r\n let destWidth = p.visibleColumns[destOrder];\r\n destWidth = (destWidth.actualWidthConsideringScrollbarWidth || destWidth.actualWidth) + 'px';\r\n\r\n let tbodyChildren = p.$tbody[0].childNodes;\r\n for (let i = 0, count = tbodyChildren.length; i < count; i++) {\r\n let row = tbodyChildren[i];\r\n if (row.nodeType !== 1) continue;\r\n row.insertBefore(row.childNodes[fromPos], row.childNodes[beforePos]);\r\n row.childNodes[destOrder].firstChild.style.width = destWidth;\r\n row.childNodes[srcOrder].firstChild.style.width = srcWidth;\r\n }\r\n }\r\n }\r\n\r\n this.trigger('movecolumn', col.name, srcOrder, destOrder);\r\n }\r\n return this;\r\n};\r\n\r\n/**\r\n * Sort the table\r\n * @public\r\n * @expose\r\n * @param {String?} column Name of the column to sort on (or null to remove sort arrow)\r\n * @param {Boolean=} descending Sort in descending order\r\n * @param {Boolean} [add=false] Should this sort be on top of the existing sort? (For multiple column sort)\r\n * @returns {DGTable} self\r\n */\r\nDGTable.prototype.sort = function (column, descending, add) {\r\n const o = this.o, p = this.p;\r\n\r\n let columns = p.columns,\r\n col = columns.get(column);\r\n\r\n let currentSort = p.rows.sortColumn;\r\n\r\n if (col) {\r\n\r\n if (currentSort.length && currentSort[currentSort.length - 1].column === column) {\r\n // Recognize current descending mode, if currently sorting by this column\r\n descending = descending === undefined ? !currentSort[currentSort.length - 1].descending : descending;\r\n }\r\n\r\n if (add) { // Add the sort to current sort stack\r\n\r\n for (let i = 0; i < currentSort.length; i++) {\r\n if (currentSort[i].column === col.name) {\r\n if (i < currentSort.length - 1) {\r\n currentSort.length = 0;\r\n } else {\r\n currentSort.splice(currentSort.length - 1, 1);\r\n }\r\n break;\r\n }\r\n }\r\n if ((o.sortableColumns > 0 /* allow manual sort when disabled */ && currentSort.length >= o.sortableColumns) || currentSort.length >= p.visibleColumns.length) {\r\n currentSort.length = 0;\r\n }\r\n\r\n } else { // Sort only by this column\r\n currentSort.length = 0;\r\n }\r\n\r\n // Default to ascending\r\n descending = descending === undefined ? false : descending;\r\n\r\n // Set the required column in the front of the stack\r\n currentSort.push({\r\n column: col.name,\r\n comparePath: col.comparePath || col.dataPath,\r\n descending: !!descending,\r\n });\r\n } else {\r\n currentSort.length = 0;\r\n }\r\n\r\n this._clearSortArrows();\r\n\r\n for (let i = 0; i < currentSort.length; i++) {\r\n this._showSortArrow(currentSort[i].column, currentSort[i].descending);\r\n }\r\n\r\n if (o.adjustColumnWidthForSortArrow && !o._tableSkeletonNeedsRendering) {\r\n this.tableWidthChanged(true);\r\n }\r\n\r\n if (o.virtualTable) {\r\n while (p.tbody && p.tbody.firstChild) {\r\n this.trigger('rowdestroy', p.tbody.firstChild);\r\n this._unbindCellEventsForRow(p.tbody.firstChild);\r\n p.tbody.removeChild(p.tbody.firstChild);\r\n }\r\n } else {\r\n p.tableSkeletonNeedsRendering = true;\r\n }\r\n\r\n p.rows.sortColumn = currentSort;\r\n\r\n if (currentSort.length) {\r\n p.rows.sort(!!p.filteredRows);\r\n if (p.filteredRows) {\r\n p.filteredRows.sort(!!p.filteredRows);\r\n }\r\n }\r\n\r\n // Build output for event, with option names that will survive compilers\r\n let sorts = [];\r\n for (let i = 0; i < currentSort.length; i++) {\r\n sorts.push({ 'column': currentSort[i].column, 'descending': currentSort[i].descending });\r\n }\r\n this.trigger('sort', sorts, true /* direct sort */);\r\n\r\n return this;\r\n};\r\n\r\n/**\r\n * Re-sort the table using current sort specifiers\r\n * @public\r\n * @expose\r\n * @returns {DGTable} self\r\n */\r\nDGTable.prototype.resort = function () {\r\n const p = this.p;\r\n let columns = p.columns;\r\n\r\n let currentSort = p.rows.sortColumn;\r\n if (currentSort.length) {\r\n\r\n for (let i = 0; i < currentSort.length; i++) {\r\n if (!columns.get(currentSort[i].column)) {\r\n currentSort.splice(i--, 1);\r\n }\r\n }\r\n\r\n p.rows.sortColumn = currentSort;\r\n if (currentSort.length) {\r\n p.rows.sort(!!p.filteredRows);\r\n if (p.filteredRows) {\r\n p.filteredRows.sort(!!p.filteredRows);\r\n }\r\n }\r\n\r\n // Build output for event, with option names that will survive compilers\r\n let sorts = [];\r\n for (let i = 0; i < currentSort.length; i++) {\r\n sorts.push({ 'column': currentSort[i].column, 'descending': currentSort[i].descending });\r\n }\r\n this.trigger('sort', sorts, false /* indirect sort */);\r\n }\r\n\r\n\r\n return this;\r\n};\r\n\r\n/**\r\n * Make sure there's at least one column visible\r\n * @private\r\n * @expose\r\n * @returns {DGTable} self\r\n */\r\nDGTable.prototype._ensureVisibleColumns = function () {\r\n const p = this.p;\r\n\r\n if (p.visibleColumns.length === 0 && p.columns.length) {\r\n p.columns[0].visible = true;\r\n p.visibleColumns.push(p.columns[0]);\r\n this.trigger('showcolumn', p.columns[0].name);\r\n }\r\n return this;\r\n};\r\n\r\n/**\r\n * Show or hide a column\r\n * @public\r\n * @expose\r\n * @param {String} column Unique column name\r\n * @param {Boolean} visible New visibility mode for the column\r\n * @returns {DGTable} self\r\n */\r\nDGTable.prototype.setColumnVisible = function (column, visible) {\r\n const p = this.p;\r\n\r\n let col = p.columns.get(column);\r\n\r\n //noinspection PointlessBooleanExpressionJS\r\n visible = !!visible;\r\n\r\n if (col && !!col.visible !== visible) {\r\n col.visible = visible;\r\n p.visibleColumns = p.columns.getVisibleColumns();\r\n this.trigger(visible ? 'showcolumn' : 'hidecolumn', column);\r\n this._ensureVisibleColumns();\r\n this.clearAndRender();\r\n }\r\n return this;\r\n};\r\n\r\n/**\r\n * Get the visibility mode of a column\r\n * @public\r\n * @expose\r\n * @returns {Boolean} true if visible\r\n */\r\nDGTable.prototype.isColumnVisible = function (column) {\r\n const p = this.p;\r\n let col = p.columns.get(column);\r\n if (col) {\r\n return col.visible;\r\n }\r\n return false;\r\n};\r\n\r\n/**\r\n * Globally set the minimum column width\r\n * @public\r\n * @expose\r\n * @param {Number} minColumnWidth Minimum column width\r\n * @returns {DGTable} self\r\n */\r\nDGTable.prototype.setMinColumnWidth = function (minColumnWidth) {\r\n let o = this.o;\r\n minColumnWidth = Math.max(minColumnWidth, 0);\r\n if (o.minColumnWidth !== minColumnWidth) {\r\n o.minColumnWidth = minColumnWidth;\r\n this.tableWidthChanged(true);\r\n }\r\n return this;\r\n};\r\n\r\n/**\r\n * Get the current minimum column width\r\n * @public\r\n * @expose\r\n * @returns {Number} Minimum column width\r\n */\r\nDGTable.prototype.getMinColumnWidth = function () {\r\n return this.o.minColumnWidth;\r\n};\r\n\r\n/**\r\n * Set the limit on concurrent columns sorted\r\n * @public\r\n * @expose\r\n * @param {Number} sortableColumns How many sortable columns to allow?\r\n * @returns {DGTable} self\r\n */\r\nDGTable.prototype.setSortableColumns = function (sortableColumns) {\r\n const p = this.p, o = this.o;\r\n if (o.sortableColumns !== sortableColumns) {\r\n o.sortableColumns = sortableColumns;\r\n if (p.$table) {\r\n let headerCell = p.$headerRow.find('>div.' + o.tableClassName + '-header-cell');\r\n for (let i = 0; i < headerCell.length; i++) {\r\n $(headerCell[0])[(o.sortableColumns > 0 && p.visibleColumns[i].sortable) ? 'addClass' : 'removeClass']('sortable');\r\n }\r\n }\r\n }\r\n return this;\r\n};\r\n\r\n/**\r\n * Get the limit on concurrent columns sorted\r\n * @public\r\n * @expose\r\n * @returns {Number} How many sortable columns are allowed?\r\n */\r\nDGTable.prototype.getSortableColumns = function () {\r\n return this.o.sortableColumns;\r\n};\r\n\r\n/**\r\n * @public\r\n * @expose\r\n * @param {Boolean?} movableColumns=true are the columns movable?\r\n * @returns {DGTable} self\r\n */\r\nDGTable.prototype.setMovableColumns = function (movableColumns) {\r\n let o = this.o;\r\n //noinspection PointlessBooleanExpressionJS\r\n movableColumns = movableColumns === undefined ? true : !!movableColumns;\r\n if (o.movableColumns !== movableColumns) {\r\n o.movableColumns = movableColumns;\r\n }\r\n return this;\r\n};\r\n\r\n/**\r\n * @public\r\n * @expose\r\n * @returns {Boolean} are the columns movable?\r\n */\r\nDGTable.prototype.getMovableColumns = function () {\r\n return this.o.movableColumns;\r\n};\r\n\r\n/**\r\n * @public\r\n * @expose\r\n * @param {Boolean} resizableColumns=true are the columns resizable?\r\n * @returns {DGTable} self\r\n */\r\nDGTable.prototype.setResizableColumns = function (resizableColumns) {\r\n let o = this.o;\r\n //noinspection PointlessBooleanExpressionJS\r\n resizableColumns = resizableColumns === undefined ? true : !!resizableColumns;\r\n if (o.resizableColumns !== resizableColumns) {\r\n o.resizableColumns = resizableColumns;\r\n }\r\n return this;\r\n};\r\n\r\n/**\r\n * @public\r\n * @expose\r\n * @returns {Boolean} are the columns resizable?\r\n */\r\nDGTable.prototype.getResizableColumns = function () {\r\n return this.o.resizableColumns;\r\n};\r\n\r\n/**\r\n * @public\r\n * @expose\r\n * @param {{function(columnName: string, descending: boolean, defaultComparator: function(a,b):number):{function(a,b):number}}} comparatorCallback a callback function that returns the comparator for a specific column\r\n * @returns {DGTable} self\r\n */\r\nDGTable.prototype.setComparatorCallback = function (comparatorCallback) {\r\n let o = this.o;\r\n if (o.onComparatorRequired !== comparatorCallback) {\r\n o.onComparatorRequired = comparatorCallback;\r\n }\r\n return this;\r\n};\r\n\r\n/**\r\n * Set a new width to a column\r\n * @public\r\n * @expose\r\n * @param {String} column name of the column to resize\r\n * @param {Number|String} width new column as pixels, or relative size (0.5, 50%)\r\n * @returns {DGTable} self\r\n */\r\nDGTable.prototype.setColumnWidth = function (column, width) {\r\n\r\n const p = this.p;\r\n\r\n let col = p.columns.get(column);\r\n\r\n let parsedWidth = this._parseColumnWidth(width, col.ignoreMin ? 0 : this.o.minColumnWidth);\r\n\r\n if (col) {\r\n let oldWidth = this._serializeColumnWidth(col);\r\n\r\n col.width = parsedWidth.width;\r\n col.widthMode = parsedWidth.mode;\r\n\r\n let newWidth = this._serializeColumnWidth(col);\r\n\r\n if (oldWidth !== newWidth) {\r\n this.tableWidthChanged(true); // Calculate actual sizes\r\n }\r\n\r\n this.trigger('columnwidth', col.name, oldWidth, newWidth);\r\n }\r\n return this;\r\n};\r\n\r\n/**\r\n * @public\r\n * @expose\r\n * @param {String} column name of the column\r\n * @returns {String|null} the serialized width of the specified column, or null if column not found\r\n */\r\nDGTable.prototype.getColumnWidth = function (column) {\r\n const p = this.p;\r\n\r\n let col = p.columns.get(column);\r\n if (col) {\r\n return this._serializeColumnWidth(col);\r\n }\r\n return null;\r\n};\r\n\r\n/**\r\n * @public\r\n * @expose\r\n * @param {String} column name of the column\r\n * @returns {SERIALIZED_COLUMN|null} configuration for all columns\r\n */\r\nDGTable.prototype.getColumnConfig = function (column) {\r\n const p = this.p;\r\n let col = p.columns.get(column);\r\n if (col) {\r\n return {\r\n 'order': col.order,\r\n 'width': this._serializeColumnWidth(col),\r\n 'visible': col.visible,\r\n 'label': col.label,\r\n };\r\n }\r\n return null;\r\n};\r\n\r\n/**\r\n * Returns a config object for the columns, to allow saving configurations for next time...\r\n * @public\r\n * @expose\r\n * @returns {Object} configuration for all columns\r\n */\r\nDGTable.prototype.getColumnsConfig = function () {\r\n const p = this.p;\r\n\r\n let config = {};\r\n for (let i = 0; i < p.columns.length; i++) {\r\n config[p.columns[i].name] = this.getColumnConfig(p.columns[i].name);\r\n }\r\n return config;\r\n};\r\n\r\n/**\r\n * Returns an array of the currently sorted columns\r\n * @public\r\n * @expose\r\n * @returns {Array.<SERIALIZED_COLUMN_SORT>} configuration for all columns\r\n */\r\nDGTable.prototype.getSortedColumns = function () {\r\n const p = this.p;\r\n\r\n let sorted = [];\r\n for (let i = 0; i < p.rows.sortColumn.length; i++) {\r\n let sort = p.rows.sortColumn[i];\r\n sorted.push({ column: sort.column, descending: sort.descending });\r\n }\r\n return sorted;\r\n};\r\n\r\n/**\r\n * Returns the HTML string for a specific cell. Can be used externally for special cases (i.e. when setting a fresh HTML in the cell preview through the callback).\r\n * @public\r\n * @expose\r\n * @param {number} rowIndex - index of the row\r\n * @param {string} columnName - name of the column\r\n * @returns {string} HTML string for the specified cell\r\n */\r\nDGTable.prototype.getHtmlForRowCell = function (rowIndex, columnName) {\r\n const p = this.p;\r\n\r\n if (rowIndex < 0 || rowIndex > p.rows.length - 1) return null;\r\n let column = p.columns.get(columnName);\r\n if (!column) return null;\r\n let rowData = p.rows[rowIndex];\r\n\r\n return this._getHtmlForCell(rowData, column);\r\n};\r\n\r\n/**\r\n * Returns the HTML string for a specific cell. Can be used externally for special cases (i.e. when setting a fresh HTML in the cell preview through the callback).\r\n * @public\r\n * @expose\r\n * @param {Object} rowData - row data\r\n * @param {Object} columnName - column data\r\n * @returns {string|null} HTML string for the specified cell\r\n */\r\nDGTable.prototype.getHtmlForRowDataCell = function (rowData, columnName) {\r\n const p = this.p;\r\n\r\n let column = p.columns.get(columnName);\r\n if (!column) return null;\r\n\r\n return this._getHtmlForCell(rowData, column);\r\n};\r\n\r\n/**\r\n * Returns the HTML string for a specific cell. Can be used externally for special cases (i.e. when setting a fresh HTML in the cell preview through the callback).\r\n * @private\r\n * @expose\r\n * @param {Object} rowData - row data\r\n * @param {Object} column - column data\r\n * @returns {string} HTML string for the specified cell\r\n */\r\nDGTable.prototype._getHtmlForCell = function (rowData, column) {\r\n let dataPath = column.dataPath;\r\n let colValue = rowData[dataPath[0]];\r\n for (let dataPathIndex = 1; dataPathIndex < dataPath.length; dataPathIndex++) {\r\n if (colValue == null) break;\r\n colValue = colValue && colValue[dataPath[dataPathIndex]];\r\n }\r\n\r\n const formatter = this.o.cellFormatter;\r\n let content;\r\n\r\n if (formatter[IsSafeSymbol]) {\r\n content = formatter(colValue, column.name, rowData);\r\n } else {\r\n try {\r\n content = formatter(colValue, column.name, rowData);\r\n } catch (err) {\r\n content = '[ERROR]';\r\n // eslint-disable-next-line no-console\r\n console.error('Failed to generate content for cell ' + column.name, err);\r\n }\r\n }\r\n\r\n if (content === undefined || content === null) {\r\n content = '';\r\n }\r\n\r\n return content;\r\n};\r\n\r\n/**\r\n * Returns the y pos of a row by index\r\n * @public\r\n * @expose\r\n * @param {Number} rowIndex - index of the row\r\n * @returns {Number|null} Y pos\r\n */\r\nDGTable.prototype.getRowYPos = function (rowIndex) {\r\n const p = this.p;\r\n\r\n if (this.o.virtualTable) {\r\n return rowIndex > 0 ? p.virtualRowHeightFirst + (rowIndex - 1) * p.virtualRowHeight : 0;\r\n } else {\r\n let row = p.tbody.childNodes[rowIndex];\r\n return row ? row.offsetTop : null;\r\n }\r\n};\r\n\r\n/**\r\n * Returns the row data for a specific row\r\n * @public\r\n * @expose\r\n * @param {Number} row index of the row\r\n * @returns {Object} Row data\r\n */\r\nDGTable.prototype.getDataForRow = function (row) {\r\n const p = this.p;\r\n\r\n if (row < 0 || row > p.rows.length - 1) return null;\r\n return p.rows[row];\r\n};\r\n\r\n/**\r\n * Gets the number of rows\r\n * @public\r\n * @expose\r\n * @returns {Number} Row count\r\n */\r\nDGTable.prototype.getRowCount = function () {\r\n const p = this.p;\r\n return p.rows ? p.rows.length : 0;\r\n};\r\n\r\n/**\r\n * Returns the physical row index for specific row\r\n * @public\r\n * @expose\r\n * @param {Object} rowData - Row data to find\r\n * @returns {Number} Row index\r\n */\r\nDGTable.prototype.getIndexForRow = function (rowData) {\r\n const p = this.p;\r\n return p.rows.indexOf(rowData);\r\n};\r\n\r\n/**\r\n * Gets the number of filtered rows\r\n * @public\r\n * @expose\r\n * @returns {Number} Filtered row count\r\n */\r\nDGTable.prototype.getFilteredRowCount = function () {\r\n const p = this.p;\r\n return (p.filteredRows || p.rows).length;\r\n};\r\n\r\n/**\r\n * Returns the filtered row index for specific row\r\n * @public\r\n * @expose\r\n * @param {Object} rowData - Row data to find\r\n * @returns {Number} Row index\r\n */\r\nDGTable.prototype.getIndexForFilteredRow = function (rowData) {\r\n const p = this.p;\r\n return (p.filteredRows || p.rows).indexOf(rowData);\r\n};\r\n\r\n/**\r\n * Returns the row data for a specific row\r\n * @public\r\n * @expose\r\n * @param {Number} row index of the filtered row\r\n * @returns {Object} Row data\r\n */\r\nDGTable.prototype.getDataForFilteredRow = function (row) {\r\n const p = this.p;\r\n if (row < 0 || row > (p.filteredRows || p.rows).length - 1) return null;\r\n return (p.filteredRows || p.rows)[row];\r\n};\r\n\r\n/**\r\n * Returns DOM element of the header row\r\n * @public\r\n * @expose\r\n * @returns {Element} Row element\r\n */\r\nDGTable.prototype.getHeaderRowElement = function () {\r\n return this.p.headerRow;\r\n};\r\n\r\n/**\r\n * @private\r\n * @param {Element} el\r\n * @returns {Number} width\r\n */\r\nDGTable.prototype._horizontalPadding = function(el) {\r\n return ((parseFloat($.css(el, 'padding-left')) || 0) +\r\n (parseFloat($.css(el, 'padding-right')) || 0));\r\n};\r\n\r\n/**\r\n * @private\r\n * @param {Element} el\r\n * @returns {Number} width\r\n */\r\nDGTable.prototype._horizontalBorderWidth = function(el) {\r\n return ((parseFloat($.css(el, 'border-left')) || 0) +\r\n (parseFloat($.css(el, 'border-right')) || 0));\r\n};\r\n\r\n/**\r\n * @private\r\n * @returns {Number} width\r\n */\r\nDGTable.prototype._calculateWidthAvailableForColumns = function() {\r\n const o = this.o, p = this.p;\r\n\r\n // Changing display mode briefly, to prevent taking in account the parent's scrollbar width when we are the cause for it\r\n let oldDisplay, lastScrollTop, lastScrollLeft;\r\n if (p.$table) {\r\n lastScrollTop = p.table ? p.table.scrollTop : 0;\r\n lastScrollLeft = p.table ? p.table.scrollLeft : 0;\r\n\r\n if (o.virtualTable) {\r\n oldDisplay = p.$table[0].style.display;\r\n p.$table[0].style.display = 'none';\r\n }\r\n }\r\n\r\n let detectedWidth = getElementWidth(this.$el[0]);\r\n\r\n if (p.$table) {\r\n if (o.virtualTable) {\r\n p.$table[0].style.display = oldDisplay;\r\n }\r\n\r\n p.table.scrollTop = lastScrollTop;\r\n p.table.scrollLeft = lastScrollLeft;\r\n p.header.scrollLeft = lastScrollLeft;\r\n }\r\n\r\n let tableClassName = o.tableClassName;\r\n\r\n let $thisWrapper = $('<div>').addClass(this.el.className).css({ 'z-index': -1, 'position': 'absolute', left: '0', top: '-9999px' });\r\n let $header = $('<div>').addClass(tableClassName + '-header').appendTo($thisWrapper);\r\n let $headerRow = $('<div>').addClass(tableClassName + '-header-row').appendTo($header);\r\n for (let i = 0; i < p.visibleColumns.length; i++) {\r\n $headerRow.append($('<div><div></div></div>').addClass(tableClassName + '-header-cell').addClass(p.visibleColumns[i].cellClasses || ''));\r\n }\r\n $thisWrapper.appendTo(document.body);\r\n\r\n detectedWidth -= this._horizontalBorderWidth($headerRow[0]);\r\n\r\n let $cells = $headerRow.find('>div.' + tableClassName + '-header-cell');\r\n for (let i = 0; i < $cells.length; i++) {\r\n let $cell = $($cells[i]);\r\n\r\n let isBoxing = $cell.css('boxSizing') === 'border-box';\r\n if (!isBoxing) {\r\n detectedWidth -=\r\n (parseFloat($cell.css('border-right-width')) || 0) +\r\n (parseFloat($cell.css('border-left-width')) || 0) +\r\n (this._horizontalPadding($cell[0])); // CELL's padding\r\n }\r\n }\r\n\r\n if ($thisWrapper) {\r\n $thisWrapper.remove();\r\n }\r\n\r\n return Math.max(0, detectedWidth);\r\n};\r\n\r\n/**\r\n * Notify the table that its width has changed\r\n * @public\r\n * @expose\r\n * @returns {DGTable} self\r\n */\r\nDGTable.prototype.tableWidthChanged = (function () {\r\n\r\n let getTextWidth = function(text) {\r\n let tableClassName = this.o.tableClassName;\r\n\r\n let $cell, $tableWrapper = $('<div>').addClass(this.$el).append(\r\n $('<div>').addClass(tableClassName + '-header').append(\r\n $('<div>').addClass(tableClassName + '-header-row').append(\r\n $cell = $('<div>').addClass(tableClassName + '-header-cell').append(\r\n $('<div>').text(text),\r\n ),\r\n ),\r\n ),\r\n ).css({ 'position': 'absolute', top: '-9999px', 'visibility': 'hidden' });\r\n $tableWrapper.appendTo(document.body);\r\n\r\n let width = getElementWidth($cell[0]);\r\n\r\n $tableWrapper.remove();\r\n\r\n return width;\r\n };\r\n\r\n let lastDetectedWidth = null;\r\n\r\n /**\r\n * @public\r\n * @expose\r\n * @param {Boolean} [forceUpdate=false]\r\n * @param {Boolean} [renderColumns=true]\r\n * @returns {DGTable} self\r\n */\r\n return function(forceUpdate, renderColumns) {\r\n\r\n let that = this,\r\n o = that.o,\r\n p = that.p,\r\n detectedWidth = this._calculateWidthAvailableForColumns(),\r\n sizeLeft = detectedWidth,\r\n relatives = 0;\r\n\r\n if (!p.$table) return this;\r\n\r\n renderColumns = renderColumns === undefined || renderColumns;\r\n\r\n let tableWidthBeforeCalculations = 0;\r\n\r\n if (!p.tbody) {\r\n renderColumns = false;\r\n }\r\n\r\n if (renderColumns) {\r\n tableWidthBeforeCalculations = parseFloat(p.tbody.style.minWidth) || 0;\r\n }\r\n\r\n if (sizeLeft !== lastDetectedWidth || forceUpdate) {\r\n lastDetectedWidth = detectedWidth;\r\n\r\n let absWidthTotal = 0, changedColumnIndexes = [], totalRelativePercentage = 0;\r\n\r\n for (let i = 0; i < p.columns.length; i++) {\r\n p.columns[i].actualWidthConsideringScrollbarWidth = null;\r\n }\r\n\r\n for (let i = 0; i < p.visibleColumns.length; i++) {\r\n let col = p.visibleColumns[i];\r\n if (col.widthMode === ColumnWidthMode.ABSOLUTE) {\r\n let width = col.width;\r\n width += col.arrowProposedWidth || 0; // Sort-arrow width\r\n if (!col.ignoreMin && width < o.minColumnWidth) {\r\n width = o.minColumnWidth;\r\n }\r\n sizeLeft -= width;\r\n absWidthTotal += width;\r\n\r\n // Update actualWidth\r\n if (width !== col.actualWidth) {\r\n col.actualWidth = width;\r\n changedColumnIndexes.push(i);\r\n }\r\n } else if (col.widthMode === ColumnWidthMode.AUTO) {\r\n let width = getTextWidth.call(this, col.label) + 20;\r\n width += col.arrowProposedWidth || 0; // Sort-arrow width\r\n if (!col.ignoreMin && width < o.minColumnWidth) {\r\n width = o.minColumnWidth;\r\n }\r\n sizeLeft -= width;\r\n absWidthTotal += width;\r\n\r\n // Update actualWidth\r\n if (width !== col.actualWidth) {\r\n col.actualWidth = width;\r\n if (!o.convertColumnWidthsToRelative) {\r\n changedColumnIndexes.push(i);\r\n }\r\n }\r\n } else if (col.widthMode === ColumnWidthMode.RELATIVE) {\r\n totalRelativePercentage += col.width;\r\n relatives++;\r\n }\r\n }\r\n\r\n // Normalize relative sizes if needed\r\n if (o.convertColumnWidthsToRelative) {\r\n for (let i = 0; i < p.visibleColumns.length; i++) {\r\n let col = p.visibleColumns[i];\r\n if (col.widthMode === ColumnWidthMode.AUTO) {\r\n col.widthMode = ColumnWidthMode.RELATIVE;\r\n sizeLeft += col.actualWidth;\r\n col.width = col.actualWidth / absWidthTotal;\r\n totalRelativePercentage += col.width;\r\n relatives++;\r\n }\r\n }\r\n }\r\n\r\n // Normalize relative sizes if needed\r\n if (relatives && ((totalRelativePercentage < 1 && o.relativeWidthGrowsToFillWidth) ||\r\n (totalRelativePercentage > 1 && o.relativeWidthShrinksToFillWidth))) {\r\n for (let i = 0; i < p.visibleColumns.length; i++) {\r\n let col = p.visibleColumns[i];\r\n if (col.widthMode === ColumnWidthMode.RELATIVE) {\r\n col.width /= totalRelativePercentage;\r\n }\r\n }\r\n }\r\n\r\n let sizeLeftForRelative = Math.max(0, sizeLeft); // Use this as the space to take the relative widths out of\r\n if (sizeLeftForRelative === 0) {\r\n sizeLeftForRelative = p.table.clientWidth;\r\n }\r\n\r\n let minColumnWidthRelative = (o.minColumnWidth / sizeLeftForRelative);\r\n if (isNaN(minColumnWidthRelative)) {\r\n minColumnWidthRelative = 0;\r\n }\r\n if (minColumnWidthRelative > 0) {\r\n let extraRelative = 0, delta;\r\n\r\n // First pass - make sure they are all constrained to the minimum width\r\n for (let i = 0; i < p.visibleColumns.length; i++) {\r\n let col = p.visibleColumns[i];\r\n if (col.widthMode === ColumnWidthMode.RELATIVE) {\r\n if (!col.ignoreMin && col.width < minColumnWidthRelative) {\r\n extraRelative += minColumnWidthRelative - col.width;\r\n col.width = minColumnWidthRelative;\r\n }\r\n }\r\n }\r\n\r\n // Second pass - try to take the extra width out of the other columns to compensate\r\n for (let i = 0; i < p.visibleColumns.length; i++) {\r\n let col = p.visibleColumns[i];\r\n if (col.widthMode === ColumnWidthMode.RELATIVE) {\r\n if (!col.ignoreMin && col.width > minColumnWidthRelative) {\r\n if (extraRelative > 0) {\r\n delta = Math.min(extraRelative, col.width - minColumnWidthRelative);\r\n col.width -= delta;\r\n extraRelative -= delta;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Try to fill width\r\n if (o.autoFillTableWidth && sizeLeft > 0) {\r\n let nonResizableTotal = 0;\r\n let sizeLeftToFill = sizeLeft;\r\n\r\n for (let i = 0; i < p.visibleColumns.length; i++) {\r\n let col = p.visibleColumns[i];\r\n if (!col.resizable && col.widthMode === ColumnWidthMode.ABSOLUTE)\r\n nonResizableTotal += col.width;\r\n\r\n if (col.widthMode === ColumnWidthMode.RELATIVE)\r\n sizeLeftToFill -= Math.round(sizeLeftForRelative * col.width);\r\n }\r\n\r\n let conv = ((detectedWidth - nonResizableTotal) / (detectedWidth - sizeLeftToFill - nonResizableTotal)) || NaN;\r\n for (let i = 0; i < p.visibleColumns.length && sizeLeftToFill > 0; i++) {\r\n let col = p.visibleColumns[i];\r\n if (!col.resizable && col.widthMode === ColumnWidthMode.ABSOLUTE)\r\n continue;\r\n\r\n if (col.widthMode === ColumnWidthMode.RELATIVE) {\r\n col.width *= conv;\r\n } else {\r\n let width = col.actualWidth * conv;\r\n if (col.actualWidth !== width) {\r\n col.actualWidth = width;\r\n if (changedColumnIndexes.indexOf(i) === -1)\r\n changedColumnIndexes.push(i);\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Materialize relative sizes\r\n for (let i = 0; i < p.visibleColumns.length; i++) {\r\n let col = p.visibleColumns[i];\r\n if (col.widthMode === ColumnWidthMode.RELATIVE) {\r\n let width = Math.round(sizeLeftForRelative * col.width);\r\n sizeLeft -= width;\r\n relatives--;\r\n\r\n // Take care of rounding errors\r\n if (relatives === 0 && sizeLeft === 1) { // Take care of rounding errors\r\n width++;\r\n sizeLeft--;\r\n }\r\n if (sizeLeft === -1) {\r\n width--;\r\n sizeLeft++;\r\n }\r\n\r\n // Update actualWidth\r\n if (width !== col.actualWidth) {\r\n col.actualWidth = width;\r\n changedColumnIndexes.push(i);\r\n }\r\n }\r\n }\r\n\r\n if (p.visibleColumns.length) {\r\n // (There should always be at least 1 column visible, but just in case)\r\n p.visibleColumns[p.visibleColumns.length - 1].actualWidthConsideringScrollbarWidth =\r\n p.visibleColumns[p.visibleColumns.length - 1].actualWidth - (p.scrollbarWidth || 0);\r\n }\r\n\r\n if (renderColumns) {\r\n let tableWidth = this._calculateTbodyWidth();\r\n\r\n if (tableWidthBeforeCalculations < tableWidth) {\r\n this._updateTableWidth(false);\r\n }\r\n\r\n for (let i = 0; i < changedColumnIndexes.length; i++) {\r\n this._resizeColumnElements(changedColumnIndexes[i]);\r\n }\r\n\r\n if (tableWidthBeforeCalculations > tableWidth) {\r\n this._updateTableWidth(false);\r\n }\r\n }\r\n }\r\n\r\n return this;\r\n };\r\n})();\r\n\r\n/**\r\n * Notify the table that its height has changed\r\n * @public\r\n * @expose\r\n * @returns {DGTable} self\r\n */\r\nDGTable.prototype.tableHeightChanged = function () {\r\n let that = this,\r\n o = that.o,\r\n p = that.p;\r\n\r\n if (!p.$table) {\r\n return that;\r\n }\r\n\r\n let height = getElementHeight(that.$el[0], true)\r\n - (parseFloat(p.$table.css('border-top-width')) || 0) // Subtract top border of inner element\r\n - (parseFloat(p.$table.css('border-bottom-width')) || 0); // Subtract bottom border of inner element\r\n\r\n if (height !== o.height) {\r\n\r\n o.height = height;\r\n\r\n if (p.tbody) {\r\n // At least 1 pixel - to show scrollers correctly.\r\n p.tbody.style.height = Math.max(o.height - getElementHeight(p.$headerRow[0], true, true, true), 1) + 'px';\r\n }\r\n\r\n if (o.virtualTable) {\r\n that.clearAndRender();\r\n }\r\n }\r\n\r\n return that;\r\n};\r\n\r\n/**\r\n * Add rows to the table\r\n * @public\r\n * @expose\r\n * @param {Object[]} data - array of rows to add to the table\r\n * @param {Number} [at=-1] - where to add the rows at\r\n * @param {Boolean} [resort=false] - should resort all rows?\r\n * @param {Boolean} [render=true]\r\n * @returns {DGTable} self\r\n */\r\nDGTable.prototype.addRows = function (data, at, resort, render) {\r\n let that = this,\r\n p = that.p;\r\n\r\n if (typeof at === 'boolean') {\r\n render = resort;\r\n resort = at;\r\n at = -1;\r\n }\r\n\r\n if (typeof at !== 'number')\r\n at = -1;\r\n\r\n if (at < 0 || at > p.rows.length)\r\n at = p.rows.length;\r\n\r\n render = (render === undefined) ? true : !!render;\r\n\r\n if (data) {\r\n p.rows.add(data, at);\r\n\r\n if (p.filteredRows || (resort && p.rows.sortColumn.length)) {\r\n\r\n if (resort && p.rows.sortColumn.length) {\r\n this.resort();\r\n } else {\r\n this._refilter();\r\n }\r\n\r\n p.tableSkeletonNeedsRendering = true;\r\n\r\n if (render) {\r\n // Render the skeleton with all rows from scratch\r\n this.render();\r\n }\r\n\r\n } else if (render) {\r\n let childNodes = p.tbody.childNodes;\r\n\r\n if (that.o.virtualTable) {\r\n\r\n while (p.tbody.firstChild) {\r\n this.trigger('rowdestroy', p.tbody.firstChild);\r\n this._unbindCellEventsForRow(p.tbody.firstChild);\r\n p.tbody.removeChild(p.tbody.firstChild);\r\n }\r\n\r\n this._calculateVirtualHeight() // Calculate virtual height\r\n ._updateLastCellWidthFromScrollbar() // Detect vertical scrollbar height\r\n .render()\r\n ._updateTableWidth(false); // Update table width to suit the required width considering vertical scrollbar\r\n\r\n } else if (p.$tbody) {\r\n\r\n let firstRow = at,\r\n lastRow = at + data.length - 1;\r\n\r\n let renderedRows = that.renderRows(firstRow, lastRow);\r\n p.tbody.insertBefore(renderedRows, childNodes[at] || null);\r\n\r\n for (let i = lastRow + 1; i < childNodes.length; i++) {\r\n let row = childNodes[i];\r\n row['rowIndex'] += data.length;\r\n row['physicalRowIndex'] += data.length;\r\n }\r\n\r\n this.render()\r\n ._updateLastCellWidthFromScrollbar() // Detect vertical scrollbar height, and update existing last cells\r\n ._updateTableWidth(true); // Update table width to suit the required width considering vertical scrollbar\r\n\r\n }\r\n }\r\n\r\n this.trigger('addrows', data.length, false);\r\n }\r\n return this;\r\n};\r\n\r\n/**\r\n * Removes a row from the table\r\n * @public\r\n * @expose\r\n * @param {Number} physicalRowIndex - index\r\n * @param {Number} count - how many rows to remove\r\n * @param {Boolean=true} render\r\n * @returns {DGTable} self\r\n */\r\nDGTable.prototype.removeRows = function (physicalRowIndex, count, render) {\r\n let that = this,\r\n p = that.p;\r\n\r\n if (typeof count !== 'number' || count <= 0) return this;\r\n\r\n if (physicalRowIndex < 0 || physicalRowIndex > p.rows.length - 1) return this;\r\n\r\n p.rows.splice(physicalRowIndex, count);\r\n render = (render === undefined) ? true : !!render;\r\n\r\n if (p.filteredRows) {\r\n\r\n this._refilter();\r\n\r\n p.tableSkeletonNeedsRendering = true;\r\n\r\n if (render) {\r\n // Render the skeleton with all rows from scratch\r\n this.render();\r\n }\r\n\r\n } else if (render) {\r\n\r\n let childNodes = p.tbody.childNodes;\r\n\r\n if (this.o.virtualTable) {\r\n\r\n while (p.tbody.firstChild) {\r\n this.trigger('rowdestroy', p.tbody.firstChild);\r\n this._unbindCellEventsForRow(p.tbody.firstChild);\r\n p.tbody.removeChild(p.tbody.firstChild);\r\n }\r\n\r\n this._calculateVirtualHeight()\r\n ._updateLastCellWidthFromScrollbar()\r\n .render()\r\n ._updateTableWidth(false); // Update table width to suit the required width considering vertical scrollbar\r\n\r\n\r\n } else {\r\n\r\n let countRemoved = 0, lastRowIndex = physicalRowIndex + count - 1;\r\n\r\n for (let i = 0; i < childNodes.length; i++) {\r\n let row = childNodes[i];\r\n let index = row['physicalRowIndex'];\r\n\r\n if (index >= physicalRowIndex) {\r\n if (index <= lastRowIndex) {\r\n this.trigger('rowdestroy', row);\r\n this._unbindCellEventsForRow(row);\r\n p.tbody.removeChild(row);\r\n i--;\r\n } else {\r\n row['physicalRowIndex'] -= count;\r\n }\r\n } else {\r\n row['rowIndex'] = i;\r\n }\r\n }\r\n\r\n this.render()\r\n ._updateLastCellWidthFromScrollbar()\r\n ._updateTableWidth(true); // Update table width to suit the required width considering vertical scrollbar\r\n\r\n }\r\n }\r\n\r\n return this;\r\n};\r\n\r\n/**\r\n * Removes a row from the table\r\n * @public\r\n * @expose\r\n * @param {Number} physicalRowIndex - index\r\n * @param {Boolean=true} render\r\n * @returns {DGTable} self\r\n */\r\nDGTable.prototype.removeRow = function (physicalRowIndex, render) {\r\n return this.removeRows(physicalRowIndex, 1, render);\r\n};\r\n\r\n/**\r\n * Refreshes the row specified\r\n * @public\r\n * @expose\r\n * @param {Number} physicalRowIndex index\r\n * @returns {DGTable} self\r\n */\r\nDGTable.prototype.refreshRow = function(physicalRowIndex) {\r\n let that = this,\r\n p = that.p;\r\n\r\n if (physicalRowIndex < 0 || physicalRowIndex > p.rows.length - 1) return this;\r\n\r\n // Find out if the row is in the rendered dataset\r\n let rowIndex = -1;\r\n if (p.filteredRows && (rowIndex = p.filteredRows.indexOf(p.rows[physicalRowIndex])) === -1) return this;\r\n\r\n if (rowIndex === -1) {\r\n rowIndex = physicalRowIndex;\r\n }\r\n\r\n let childNodes = p.tbody.childNodes;\r\n\r\n if (this.o.virtualTable) {\r\n // Now make sure that the row actually rendered, as this is a virtual table\r\n let isRowVisible = false;\r\n let i = 0;\r\n\r\n for (; i < childNodes.length; i++) {\r\n if (childNodes[i]['physicalRowIndex'] === physicalRowIndex) {\r\n isRowVisible = true;\r\n this.trigger('rowdestroy', childNodes[i]);\r\n this._unbindCellEventsForRow(childNodes[i]);\r\n p.tbody.removeChild(childNodes[i]);\r\n break;\r\n }\r\n }\r\n\r\n if (isRowVisible) {\r\n let renderedRow = this.renderRows(rowIndex, rowIndex);\r\n p.tbody.insertBefore(renderedRow, childNodes[i] || null);\r\n }\r\n } else {\r\n this.trigger('rowdestroy', childNodes[rowIndex]);\r\n this._unbindCellEventsForRow(childNodes[rowIndex]);\r\n p.tbody.removeChild(childNodes[rowIndex]);\r\n let renderedRow = this.renderRows(rowIndex, rowIndex);\r\n p.tbody.insertBefore(renderedRow, childNodes[rowIndex] || null);\r\n }\r\n\r\n return this;\r\n};\r\n\r\n/**\r\n * Get the DOM element for the specified row, if it exists\r\n * @public\r\n * @expose\r\n * @param {Number} physicalRowIndex index\r\n * @returns {Element|null} row or null\r\n */\r\nDGTable.prototype.getRowElement = function(physicalRowIndex) {\r\n let that = this,\r\n p = that.p;\r\n\r\n if (physicalRowIndex < 0 || physicalRowIndex > p.rows.length - 1) return null;\r\n\r\n // Find out if the row is in the rendered dataset\r\n let rowIndex = -1;\r\n if (p.filteredRows && (rowIndex = p.filteredRows.indexOf(p.rows[physicalRowIndex])) === -1) return this;\r\n\r\n if (rowIndex === -1) {\r\n rowIndex = physicalRowIndex;\r\n }\r\n\r\n let childNodes = p.tbody.childNodes;\r\n\r\n if (this.o.virtualTable) {\r\n // Now make sure that the row actually rendered, as this is a virtual table\r\n for (let i = 0; i < childNodes.length; i++) {\r\n if (childNodes[i]['physicalRowIndex'] === physicalRowIndex) {\r\n return childNodes[i];\r\n }\r\n }\r\n } else {\r\n return childNodes[rowIndex];\r\n }\r\n\r\n return null;\r\n};\r\n\r\n/**\r\n * Refreshes all virtual rows\r\n * @public\r\n * @expose\r\n * @returns {DGTable} self\r\n */\r\nDGTable.prototype.refreshAllVirtualRows = function () {\r\n\r\n const p = this.p;\r\n\r\n if (this.o.virtualTable) {\r\n // Now make sure that the row actually rendered, as this is a virtual table\r\n let rowsToRender = [];\r\n let childNodes = p.tbody.childNodes;\r\n\r\n for (let i = 0, rowCount = childNodes.length; i < rowCount; i++) {\r\n rowsToRender.push(childNodes[i]['physicalRowIndex']);\r\n this.trigger('rowdestroy', childNodes[i]);\r\n this._unbindCellEventsForRow(childNodes[i]);\r\n p.tbody.removeChild(childNodes[i]);\r\n i--;\r\n rowCount--;\r\n }\r\n\r\n for (let i = 0; i < rowsToRender.length; i++) {\r\n let renderedRow = this.renderRows(rowsToRender[i], rowsToRender[i]);\r\n p.tbody.appendChild(renderedRow);\r\n }\r\n }\r\n\r\n return this;\r\n};\r\n\r\n/**\r\n * Replace the whole dataset\r\n * @public\r\n * @expose\r\n * @param {Object[]} data array of rows to add to the table\r\n * @param {Boolean} [resort=false] should resort all rows?\r\n * @returns {DGTable} self\r\n */\r\nDGTable.prototype.setRows = function (data, resort) {\r\n let that = this,\r\n p = that.p;\r\n\r\n // this.scrollTop = this.$el.find('.table').scrollTop();\r\n p.rows.reset(data);\r\n\r\n if (resort && p.rows.sortColumn.length) {\r\n this.resort();\r\n } else {\r\n this._refilter();\r\n }\r\n\r\n this.clearAndRender().trigger('addrows', data.length, true);\r\n\r\n return this;\r\n};\r\n\r\n/**\r\n * Creates a URL representing the data in the specified element.\r\n * This uses the Blob or BlobBuilder of the modern browsers.\r\n * The url can be used for a Web Worker.\r\n * @public\r\n * @expose\r\n * @param {string} id Id of the element containing your data\r\n * @returns {String|null} the url, or null if not supported\r\n */\r\nDGTable.prototype.getUrlForElementContent = function (id) {\r\n let blob,\r\n el = document.getElementById(id);\r\n if (el) {\r\n let data = el.textContent;\r\n if (typeof Blob === 'function') {\r\n blob = new Blob([data]);\r\n } else {\r\n let BlobBuilder = window.BlobBuilder || window.WebKitBlobBuilder || window.MozBlobBuilder || window.MSBlobBuilder;\r\n if (!BlobBuilder) {\r\n return null;\r\n }\r\n let builder = new BlobBuilder();\r\n builder.append(data);\r\n blob = builder.getBlob();\r\n }\r\n return (window.URL || window.webkitURL).createObjectURL(blob);\r\n }\r\n return null;\r\n};\r\n\r\n/**\r\n * @public\r\n * @expose\r\n * @returns {Boolean} A value indicating whether Web Workers are supported\r\n */\r\nDGTable.prototype.isWorkerSupported = function() {\r\n return window['Worker'] instanceof Function;\r\n};\r\n\r\n/**\r\n * Creates a Web Worker for updating the table.\r\n * @public\r\n * @expose\r\n * @param {string} url Url to the script for the Web Worker\r\n * @param {boolean} [start=true] if true, starts the Worker immediately\r\n * @param {boolean} [resort=false]\r\n * @returns {Worker|null} the Web Worker, or null if not supported\r\n */\r\nDGTable.prototype.createWebWorker = function (url, start, resort) {\r\n if (this.isWorkerSupported()) {\r\n let that = this,\r\n p = that.p;\r\n\r\n let worker = new Worker(url);\r\n let listener = function (evt) {\r\n if (evt.data.append) {\r\n that.addRows(evt.data.rows, resort);\r\n } else {\r\n that.setRows(evt.data.rows, resort);\r\n }\r\n };\r\n worker.addEventListener('message', listener, false);\r\n if (!p.workerListeners) {\r\n p.workerListeners = [];\r\n }\r\n p.workerListeners.push({ worker: worker, listener: listener });\r\n if (start || start === undefined) {\r\n worker.postMessage(null);\r\n }\r\n return worker;\r\n }\r\n return null;\r\n};\r\n\r\n/**\r\n * Unbinds a Web Worker from the table, stopping updates.\r\n * @public\r\n * @expose\r\n * @param {Worker} worker the Web Worker\r\n * @returns {DGTable} self\r\n */\r\nDGTable.prototype.unbindWebWorker = function (worker) {\r\n let that = this,\r\n p = that.p;\r\n\r\n if (p.workerListeners) {\r\n for (let j = 0; j < p.workerListeners.length; j++) {\r\n if (p.workerListeners[j].worker === worker) {\r\n worker.removeEventListener('message', p.workerListeners[j].listener, false);\r\n p.workerListeners.splice(j, 1);\r\n j--;\r\n }\r\n }\r\n }\r\n\r\n return this;\r\n};\r\n\r\n/**\r\n * A synonym for hideCellPreview()\r\n * @public\r\n * @expose\r\n * @returns {DGTable} self\r\n */\r\nDGTable.prototype.abortCellPreview = function() {\r\n this.hideCellPreview();\r\n return this;\r\n};\r\n\r\n/**\r\n * Cancel a resize in progress\r\n * @expose\r\n * @private\r\n * @returns {DGTable} self\r\n */\r\nDGTable.prototype.cancelColumnResize = function() {\r\n const p = this.p;\r\n\r\n if (p.$resizer) {\r\n p.$resizer.remove();\r\n p.$resizer = null;\r\n $(document).off('mousemove.dgtable', p.onMouseMoveResizeAreaBound)\r\n .off('mouseup.dgtable', p.onEndDragColumnHeaderBound);\r\n }\r\n\r\n return this;\r\n};\r\n\r\nDGTable.prototype._onVirtualTableScrolled = function () {\r\n this.render();\r\n};\r\n\r\nDGTable.prototype._onTableScrolledHorizontally = function () {\r\n const p = this.p;\r\n\r\n p.header.scrollLeft = p.table.scrollLeft;\r\n};\r\n\r\n/**previousElementSibling\r\n * Reverse-calculate the column to resize from mouse position\r\n * @private\r\n * @param {jQuery_Event} e jQuery mouse event\r\n * @returns {String} name of the column which the mouse is over, or null if the mouse is not in resize position\r\n */\r\nDGTable.prototype._getColumnByResizePosition = function (e) {\r\n\r\n let that = this,\r\n o = that.o,\r\n rtl = this._isTableRtl();\r\n\r\n let $headerCell = $(e.target).closest('div.' + o.tableClassName + '-header-cell,div.' + o.cellPreviewClassName),\r\n headerCell = $headerCell[0];\r\n if (headerCell['__cell']) {\r\n headerCell = headerCell['__cell'];\r\n $headerCell = $(headerCell);\r\n }\r\n\r\n let previousElementSibling = $headerCell[0].previousSibling;\r\n while (previousElementSibling && previousElementSibling.nodeType !== 1) {\r\n previousElementSibling = previousElementSibling.previousSibling;\r\n }\r\n\r\n let firstCol = !previousElementSibling;\r\n\r\n let mouseX = ((e.pageX != null ? e.pageX : e.originalEvent.pageX) || e.originalEvent.clientX) - $headerCell.offset().left;\r\n\r\n if (rtl) {\r\n if (!firstCol && getElementWidth($headerCell[0], true, true, true) - mouseX <= o.resizeAreaWidth / 2) {\r\n return previousElementSibling['columnName'];\r\n } else if (mouseX <= o.resizeAreaWidth / 2) {\r\n return headerCell['columnName'];\r\n }\r\n } else {\r\n if (!firstCol && mouseX <= o.resizeAreaWidth / 2) {\r\n return previousElementSibling['columnName'];\r\n } else if (getElementWidth($headerCell[0], true, true, true) - mouseX <= o.resizeAreaWidth / 2) {\r\n return headerCell['columnName'];\r\n }\r\n }\r\n\r\n return null;\r\n};\r\n\r\n/**\r\n * @param {jQuery_Event} event\r\n */\r\nDGTable.prototype._onTouchStartColumnHeader = function (event) {\r\n const p = this.p;\r\n\r\n if (p.currentTouchId) return;\r\n\r\n let startTouch = event.originalEvent.changedTouches[0];\r\n p.currentTouchId = startTouch.identifier;\r\n\r\n let $eventTarget = $(event.currentTarget);\r\n\r\n let startPos = { x: startTouch.pageX, y: startTouch.pageY },\r\n currentPos = startPos,\r\n distanceTreshold = 9;\r\n\r\n let tapAndHoldTimeout;\r\n\r\n let unbind = function () {\r\n p.currentTouchId = null;\r\n $eventTarget.off('touchend').off('touchcancel');\r\n clearTimeout(tapAndHoldTimeout);\r\n };\r\n\r\n let fakeEvent = function (name) {\r\n let fakeEvent = $.Event(name);\r\n let extendObjects = Array.prototype.slice.call(arguments, 1);\r\n for (let key of ['target', 'clientX', 'clientY', 'offsetX', 'offsetY', 'screenX', 'screenY', 'pageX', 'pageY', 'which']) {\r\n fakeEvent[key] = event[key];\r\n for (let i = 0; i < extendObjects.length; i++) {\r\n if (extendObjects[i][key] != null) {\r\n fakeEvent[key] = extendObjects[i][key];\r\n }\r\n }\r\n }\r\n return fakeEvent;\r\n };\r\n\r\n $eventTarget.trigger(fakeEvent('mousedown', event.originalEvent.changedTouches[0], { 'which': 1, target: event.target }));\r\n\r\n tapAndHoldTimeout = setTimeout(() => {\r\n unbind();\r\n\r\n $eventTarget\r\n .one('touchend', (event) => {\r\n // Prevent simulated mouse events after touchend\r\n if (!isInputElementEvent(event))\r\n event.preventDefault();\r\n\r\n $eventTarget.off('touchend').off('touchcancel');\r\n })\r\n .one('touchcancel', (_event) => {\r\n $eventTarget.off('touchend').off('touchcancel');\r\n });\r\n\r\n let distanceTravelled = Math.sqrt(Math.pow(Math.abs(currentPos.x - startPos.x), 2) + Math.pow(Math.abs(currentPos.y - startPos.y), 2));\r\n\r\n if (distanceTravelled < distanceTreshold) {\r\n this.cancelColumnResize();\r\n $eventTarget.trigger(fakeEvent('mouseup', event.originalEvent.changedTouches[0], { 'which': 3, target: event.target }));\r\n }\r\n\r\n }, 500);\r\n\r\n $eventTarget\r\n .on('touchend', (event) => {\r\n let touch = find(event.originalEvent.changedTouches, (touch) => touch.identifier === p.currentTouchId);\r\n if (!touch) return;\r\n\r\n unbind();\r\n\r\n // Prevent simulated mouse events after touchend\r\n if (!isInputElementEvent(event))\r\n event.preventDefault();\r\n\r\n currentPos = { x: touch.pageX, y: touch.pageY };\r\n let distanceTravelled = Math.sqrt(Math.pow(Math.abs(currentPos.x - startPos.x), 2) + Math.pow(Math.abs(currentPos.y - startPos.y), 2));\r\n\r\n if (distanceTravelled < distanceTreshold || p.$resizer) {\r\n $eventTarget.trigger(fakeEvent('mouseup', touch, { 'which': 1, target: event.target }));\r\n $eventTarget.trigger(fakeEvent('click', touch, { 'which': 1, target: event.target }));\r\n }\r\n\r\n })\r\n .on('touchcancel', () => {\r\n unbind();\r\n })\r\n .on('touchmove', (event) => {\r\n let touch = find(event.originalEvent.changedTouches, (touch) => touch.identifier === p.currentTouchId);\r\n if (!touch) return;\r\n\r\n // Keep track of current position, so we know if we need to cancel the tap-and-hold\r\n currentPos = { x: touch.pageX, y: touch.pageY };\r\n\r\n if (p.$resizer) {\r\n event.preventDefault();\r\n\r\n $eventTarget.trigger(fakeEvent('mousemove', touch, { target: event.target }));\r\n }\r\n });\r\n};\r\n\r\n/**\r\n * @param {jQuery_Event} event\r\n */\r\nDGTable.prototype._onMouseDownColumnHeader = function (event) {\r\n if (event.which !== 1) return this; // Only treat left-clicks\r\n\r\n let that = this,\r\n o = that.o,\r\n p = that.p,\r\n col = this._getColumnByResizePosition(event);\r\n\r\n if (col) {\r\n let column = p.columns.get(col);\r\n if (!o.resizableColumns || !column || !column.resizable) {\r\n return false;\r\n }\r\n\r\n let rtl = this._isTableRtl();\r\n\r\n if (p.$resizer) {\r\n $(p.$resizer).remove();\r\n }\r\n p.$resizer = $('<div></div>')\r\n .addClass(o.resizerClassName)\r\n .css({\r\n 'position': 'absolute',\r\n 'display': 'block',\r\n 'z-index': -1,\r\n 'visibility': 'hidden',\r\n 'width': '2px',\r\n 'background': '#000',\r\n 'opacity': 0.7,\r\n })\r\n .appendTo(this.$el);\r\n\r\n let selectedHeaderCell = column.element,\r\n commonAncestor = p.$resizer.parent();\r\n\r\n let posCol = selectedHeaderCell.offset(),\r\n posRelative = commonAncestor.offset();\r\n if (ieVersion === 8) {\r\n posCol = selectedHeaderCell.offset(); // IE8 bug, first time it receives zeros...\r\n }\r\n posRelative.left += parseFloat(commonAncestor.css('border-left-width')) || 0;\r\n posRelative.top += parseFloat(commonAncestor.css('border-top-width')) || 0;\r\n posCol.left -= posRelative.left;\r\n posCol.top -= posRelative.top;\r\n posCol.top -= parseFloat(selectedHeaderCell.css('border-top-width')) || 0;\r\n let resizerWidth = getElementWidth(p.$resizer[0], true, true, true);\r\n if (rtl) {\r\n posCol.left -= Math.ceil((parseFloat(selectedHeaderCell.css('border-left-width')) || 0) / 2);\r\n posCol.left -= Math.ceil(resizerWidth / 2);\r\n } else {\r\n posCol.left += getElementWidth(selectedHeaderCell[0], true, true, true);\r\n posCol.left += Math.ceil((parseFloat(selectedHeaderCell.css('border-right-width')) || 0) / 2);\r\n posCol.left -= Math.ceil(resizerWidth / 2);\r\n }\r\n\r\n p.$resizer\r\n .css({\r\n 'z-index': '10',\r\n 'visibility': 'visible',\r\n 'left': posCol.left,\r\n 'top': posCol.top,\r\n 'height': getElementHeight(this.$el[0]),\r\n })[0]['columnName'] = selectedHeaderCell[0]['columnName'];\r\n\r\n try { p.$resizer[0].style.zIndex = ''; }\r\n catch (ignored) { /* we're ok with this */ }\r\n\r\n $(document).on('mousemove.dgtable', p.onMouseMoveResizeAreaBound);\r\n $(document).on('mouseup.dgtable', p.onEndDragColumnHeaderBound);\r\n\r\n event.preventDefault();\r\n }\r\n};\r\n\r\n/**\r\n * @param {jQuery_Event} event event\r\n */\r\nDGTable.prototype._onMouseMoveColumnHeader = function (event) {\r\n\r\n let that = this,\r\n o = that.o,\r\n p = that.p;\r\n\r\n if (o.resizableColumns) {\r\n let col = this._getColumnByResizePosition(event);\r\n let headerCell = $(event.target).closest('div.' + o.tableClassName + '-header-cell,div.' + o.cellPreviewClassName)[0];\r\n if (!col || !p.columns.get(col).resizable) {\r\n headerCell.style.cursor = '';\r\n } else {\r\n headerCell.style.cursor = 'e-resize';\r\n }\r\n }\r\n};\r\n\r\n/**\r\n * @param {jQuery_Event} event\r\n */\r\nDGTable.prototype._onMouseUpColumnHeader = function (event) {\r\n if (event.which === 3) {\r\n let o = this.o;\r\n let $headerCell = $(event.target).closest('div.' + o.tableClassName + '-header-cell,div.' + o.cellPreviewClassName);\r\n let bounds = $headerCell.offset();\r\n bounds['width'] = getElementWidth($headerCell[0], true, true, true);\r\n bounds['height'] = getElementHeight($headerCell[0], true, true, true);\r\n this.trigger('headercontextmenu', $headerCell[0]['columnName'], event.pageX, event.pageY, bounds);\r\n }\r\n return this;\r\n};\r\n\r\n/**\r\n * @private\r\n * @param {jQuery_Event} event event\r\n */\r\nDGTable.prototype._onMouseLeaveColumnHeader = function (event) {\r\n let o = this.o;\r\n let headerCell = $(event.target).closest('div.' + o.tableClassName + '-header-cell,div.' + o.cellPreviewClassName)[0];\r\n headerCell.style.cursor = '';\r\n};\r\n\r\n/**\r\n * @private\r\n * @param {jQuery_Event} event event\r\n */\r\nDGTable.prototype._onClickColumnHeader = function (event) {\r\n if (isInputElementEvent(event))\r\n return;\r\n\r\n if (!this._getColumnByResizePosition(event)) {\r\n\r\n let that = this,\r\n o = that.o,\r\n p = that.p;\r\n\r\n let headerCell = $(event.target).closest('div.' + o.tableClassName + '-header-cell,div.' + o.cellPreviewClassName)[0];\r\n if (o.sortableColumns) {\r\n let column = p.columns.get(headerCell['columnName']);\r\n if (column && column.sortable) {\r\n this.sort(headerCell['columnName'], undefined, true).render();\r\n }\r\n }\r\n }\r\n};\r\n\r\n/**\r\n * @private\r\n * @param {jQuery_Event} event event\r\n */\r\nDGTable.prototype._onStartDragColumnHeader = function (event) {\r\n\r\n let that = this,\r\n o = that.o,\r\n p = that.p;\r\n\r\n if (o.movableColumns) {\r\n\r\n let $headerCell = $(event.target).closest('div.' + o.tableClassName + '-header-cell,div.' + o.cellPreviewClassName);\r\n let column = p.columns.get($headerCell[0]['columnName']);\r\n if (column && column.movable) {\r\n $headerCell[0].style.opacity = 0.35;\r\n p.dragId = Math.random() * 0x9999999; // Recognize this ID on drop\r\n event.originalEvent.dataTransfer.setData('text', JSON.stringify({ dragId: p.dragId, column: column.name }));\r\n } else {\r\n event.preventDefault();\r\n }\r\n\r\n } else {\r\n\r\n event.preventDefault();\r\n\r\n }\r\n\r\n return undefined;\r\n};\r\n\r\n/**\r\n * @private\r\n * @param {MouseEvent} event event\r\n */\r\nDGTable.prototype._onMouseMoveResizeArea = function (event) {\r\n\r\n let that = this,\r\n p = that.p;\r\n\r\n let column = p.columns.get(p.$resizer[0]['columnName']);\r\n let rtl = this._isTableRtl();\r\n\r\n let selectedHeaderCell = column.element,\r\n commonAncestor = p.$resizer.parent();\r\n let posCol = selectedHeaderCell.offset(), posRelative = commonAncestor.offset();\r\n posRelative.left += parseFloat(commonAncestor.css('border-left-width')) || 0;\r\n posCol.left -= posRelative.left;\r\n let resizerWidth = getElementWidth(p.$resizer[0], true, true, true);\r\n\r\n let isBoxing = selectedHeaderCell.css('box-sizing') === 'border-box';\r\n\r\n let actualX = event.pageX - posRelative.left;\r\n let minX = posCol.left;\r\n\r\n minX -= Math.ceil(resizerWidth / 2);\r\n\r\n if (rtl) {\r\n minX += getElementWidth(selectedHeaderCell[0], true, true, true);\r\n minX -= column.ignoreMin ? 0 : this.o.minColumnWidth;\r\n\r\n if (!isBoxing) {\r\n minX -= Math.ceil((parseFloat(selectedHeaderCell.css('border-left-width')) || 0) / 2);\r\n minX -= this._horizontalPadding(selectedHeaderCell[0]);\r\n }\r\n\r\n if (actualX > minX) {\r\n actualX = minX;\r\n }\r\n } else {\r\n minX += column.ignoreMin ? 0 : this.o.minColumnWidth;\r\n\r\n if (!isBoxing) {\r\n minX += Math.ceil((parseFloat(selectedHeaderCell.css('border-right-width')) || 0) / 2);\r\n minX += this._horizontalPadding(selectedHeaderCell[0]);\r\n }\r\n\r\n if (actualX < minX) {\r\n actualX = minX;\r\n }\r\n }\r\n\r\n p.$resizer.css('left', actualX + 'px');\r\n};\r\n\r\n/**\r\n * @private\r\n * @param {Event} event event\r\n */\r\nDGTable.prototype._onEndDragColumnHeader = function (event) {\r\n\r\n let that = this,\r\n o = that.o,\r\n p = that.p;\r\n\r\n if (!p.$resizer) {\r\n event.target.style.opacity = null;\r\n } else {\r\n $(document).off('mousemove.dgtable', p.onMouseMoveResizeAreaBound)\r\n .off('mouseup.dgtable', p.onEndDragColumnHeaderBound);\r\n\r\n let column = p.columns.get(p.$resizer[0]['columnName']);\r\n let rtl = this._isTableRtl();\r\n\r\n let selectedHeaderCell = column.element,\r\n commonAncestor = p.$resizer.parent();\r\n let posCol = selectedHeaderCell.offset(), posRelative = commonAncestor.offset();\r\n posRelative.left += parseFloat(commonAncestor.css('border-left-width')) || 0;\r\n posCol.left -= posRelative.left;\r\n let resizerWidth = getElementWidth(p.$resizer[0], true, true, true);\r\n\r\n let isBoxing = selectedHeaderCell.css('box-sizing') === 'border-box';\r\n\r\n let actualX = event.pageX - posRelative.left;\r\n let baseX = posCol.left, minX = posCol.left;\r\n let width = 0;\r\n\r\n baseX -= Math.ceil(resizerWidth / 2);\r\n\r\n if (rtl) {\r\n\r\n if (!isBoxing) {\r\n actualX += this._horizontalPadding(selectedHeaderCell[0]);\r\n actualX += parseFloat(selectedHeaderCell.css('border-left-width')) || 0;\r\n actualX += parseFloat(selectedHeaderCell.css('border-right-width')) || 0;\r\n }\r\n\r\n baseX += getElementWidth(selectedHeaderCell[0], true, true, true);\r\n\r\n minX = baseX - (column.ignoreMin ? 0 : this.o.minColumnWidth);\r\n if (actualX > minX) {\r\n actualX = minX;\r\n }\r\n\r\n width = baseX - actualX;\r\n } else {\r\n\r\n if (!isBoxing) {\r\n actualX -= this._horizontalPadding(selectedHeaderCell[0]);\r\n actualX -= parseFloat(selectedHeaderCell.css('border-left-width')) || 0;\r\n actualX -= parseFloat(selectedHeaderCell.css('border-right-width')) || 0;\r\n }\r\n\r\n minX = baseX + (column.ignoreMin ? 0 : this.o.minColumnWidth);\r\n if (actualX < minX) {\r\n actualX = minX;\r\n }\r\n\r\n width = actualX - baseX;\r\n }\r\n\r\n p.$resizer.remove();\r\n p.$resizer = null;\r\n\r\n let sizeToSet = width;\r\n\r\n if (column.widthMode === ColumnWidthMode.RELATIVE) {\r\n let sizeLeft = this._calculateWidthAvailableForColumns();\r\n //sizeLeft -= p.table.offsetWidth - p.table.clientWidth;\r\n\r\n let totalRelativePercentage = 0;\r\n let relatives = 0;\r\n\r\n for (let i = 0; i < p.visibleColumns.length; i++) {\r\n let col = p.visibleColumns[i];\r\n if (col.name === column.name) continue;\r\n\r\n if (col.widthMode === ColumnWidthMode.RELATIVE) {\r\n totalRelativePercentage += col.width;\r\n relatives++;\r\n } else {\r\n sizeLeft -= col.actualWidth;\r\n }\r\n }\r\n\r\n sizeLeft = Math.max(1, sizeLeft);\r\n sizeToSet = width / sizeLeft;\r\n\r\n if (relatives > 0) {\r\n // When there's more than one relative overall,\r\n // we can do relative enlarging/shrinking.\r\n // Otherwise, we can end up having a 0 width.\r\n\r\n let unNormalizedSizeToSet = sizeToSet / ((1 - sizeToSet) / totalRelativePercentage);\r\n\r\n totalRelativePercentage += sizeToSet;\r\n\r\n // Account for relative widths scaling later\r\n if ((totalRelativePercentage < 1 && o.relativeWidthGrowsToFillWidth) ||\r\n (totalRelativePercentage > 1 && o.relativeWidthShrinksToFillWidth)) {\r\n sizeToSet = unNormalizedSizeToSet;\r\n }\r\n }\r\n\r\n sizeToSet *= 100;\r\n sizeToSet += '%';\r\n }\r\n\r\n this.setColumnWidth(column.name, sizeToSet);\r\n }\r\n};\r\n\r\n/**\r\n * @private\r\n * @param {jQuery_Event} event event\r\n */\r\nDGTable.prototype._onDragEnterColumnHeader = function (event) {\r\n let that = this,\r\n o = that.o,\r\n p = that.p;\r\n\r\n if (o.movableColumns) {\r\n let dataTransferred = event.originalEvent.dataTransfer.getData('text');\r\n if (dataTransferred) {\r\n dataTransferred = JSON.parse(dataTransferred);\r\n }\r\n else {\r\n dataTransferred = null; // WebKit does not provide the dataTransfer on dragenter?..\r\n }\r\n\r\n let $headerCell = $(event.target).closest('div.' + o.tableClassName + '-header-cell,div.' + o.cellPreviewClassName);\r\n if (!dataTransferred ||\r\n (p.dragId === dataTransferred.dragId && $headerCell['columnName'] !== dataTransferred.column)) {\r\n\r\n let column = p.columns.get($headerCell[0]['columnName']);\r\n if (column && (column.movable || column !== p.visibleColumns[0])) {\r\n $($headerCell).addClass('drag-over');\r\n }\r\n }\r\n }\r\n};\r\n\r\n/**\r\n * @private\r\n * @param {jQuery_Event} event event\r\n */\r\nDGTable.prototype._onDragOverColumnHeader = function (event) {\r\n event.preventDefault();\r\n};\r\n\r\n/**\r\n * @private\r\n * @param {jQuery_Event} event event\r\n */\r\nDGTable.prototype._onDragLeaveColumnHeader = function (event) {\r\n let o = this.o;\r\n let $headerCell = $(event.target).closest('div.' + o.tableClassName + '-header-cell,div.' + o.cellPreviewClassName);\r\n if ( !$($headerCell[0].firstChild)\r\n .has(event.originalEvent.relatedTarget).length ) {\r\n $headerCell.removeClass('drag-over');\r\n }\r\n};\r\n\r\n/**\r\n * @private\r\n * @param {jQuery_Event} event event\r\n */\r\nDGTable.prototype._onDropColumnHeader = function (event) {\r\n event.preventDefault();\r\n\r\n let that = this,\r\n o = that.o,\r\n p = that.p;\r\n\r\n let dataTransferred = JSON.parse(event.originalEvent.dataTransfer.getData('text'));\r\n let $headerCell = $(event.target).closest('div.' + o.tableClassName + '-header-cell,div.' + o.cellPreviewClassName);\r\n if (o.movableColumns && dataTransferred.dragId === p.dragId) {\r\n let srcColName = dataTransferred.column,\r\n destColName = $headerCell[0]['columnName'],\r\n srcCol = p.columns.get(srcColName),\r\n destCol = p.columns.get(destColName);\r\n if (srcCol && destCol && srcCol.movable && (destCol.movable || destCol !== p.visibleColumns[0])) {\r\n this.moveColumn(srcColName, destColName);\r\n }\r\n }\r\n $($headerCell).removeClass('drag-over');\r\n};\r\n\r\n/**\r\n * @private\r\n * @returns {DGTable} self\r\n */\r\nDGTable.prototype._clearSortArrows = function () {\r\n\r\n let that = this,\r\n p = that.p;\r\n\r\n if (p.$table) {\r\n let tableClassName = this.o.tableClassName;\r\n let sortedColumns = p.$headerRow.find('>div.' + tableClassName + '-header-cell.sorted');\r\n let arrows = sortedColumns.find('>div>.sort-arrow');\r\n for (let arrow of arrows) {\r\n let col = p.columns.get(arrow.parentNode.parentNode['columnName']);\r\n if (col) {\r\n col.arrowProposedWidth = 0;\r\n }\r\n }\r\n arrows.remove();\r\n sortedColumns.removeClass('sorted').removeClass('desc');\r\n }\r\n return this;\r\n};\r\n\r\n/**\r\n * @private\r\n * @param {String} column the name of the sort column\r\n * @param {Boolean} descending table is sorted descending\r\n * @returns {DGTable} self\r\n */\r\nDGTable.prototype._showSortArrow = function (column, descending) {\r\n\r\n let that = this,\r\n p = that.p;\r\n\r\n let col = p.columns.get(column);\r\n if (!col) return false;\r\n\r\n let arrow = createElement('span');\r\n arrow.className = 'sort-arrow';\r\n\r\n if (col.element) {\r\n col.element.addClass(descending ? 'sorted desc' : 'sorted');\r\n col.element[0].firstChild.insertBefore(arrow, col.element[0].firstChild.firstChild);\r\n }\r\n\r\n if (col.widthMode !== ColumnWidthMode.RELATIVE && this.o.adjustColumnWidthForSortArrow) {\r\n col.arrowProposedWidth = arrow.scrollWidth + (parseFloat($(arrow).css('margin-right')) || 0) + (parseFloat($(arrow).css('margin-left')) || 0);\r\n }\r\n\r\n return this;\r\n};\r\n\r\n/**\r\n * @private\r\n * @param {Number} cellIndex index of the column in the DOM\r\n * @returns {DGTable} self\r\n */\r\nDGTable.prototype._resizeColumnElements = function (cellIndex) {\r\n\r\n let that = this,\r\n p = that.p;\r\n\r\n let headerCells = p.$headerRow.find('div.' + this.o.tableClassName + '-header-cell');\r\n let col = p.columns.get(headerCells[cellIndex]['columnName']);\r\n\r\n if (col) {\r\n headerCells[cellIndex].style.width = (col.actualWidthConsideringScrollbarWidth || col.actualWidth) + 'px';\r\n\r\n let width = (col.actualWidthConsideringScrollbarWidth || col.actualWidth) + 'px';\r\n let tbodyChildren = p.$tbody[0].childNodes;\r\n for (let i = 0, count = tbodyChildren.length; i < count; i++) {\r\n let headerRow = tbodyChildren[i];\r\n if (headerRow.nodeType !== 1) continue;\r\n headerRow.childNodes[cellIndex].style.width = width;\r\n }\r\n }\r\n\r\n return this;\r\n};\r\n\r\n/**\r\n * @returns {DGTable} self\r\n * */\r\nDGTable.prototype._destroyHeaderCells = function() {\r\n\r\n let that = this,\r\n o = that.o,\r\n p = that.p;\r\n\r\n if (p.$headerRow) {\r\n this.trigger('headerrowdestroy', p.headerRow);\r\n p.$headerRow.find('div.' + o.tableClassName + '-header-cell').remove();\r\n p.$headerRow = null;\r\n p.headerRow = null;\r\n }\r\n return this;\r\n};\r\n\r\n/**\r\n * @private\r\n * @returns {DGTable} self\r\n */\r\nDGTable.prototype._renderSkeletonBase = function () {\r\n let that = this,\r\n p = that.p,\r\n o = that.o;\r\n\r\n // Clean up old elements\r\n\r\n if (p.$table && o.virtualTable) {\r\n p.$table.remove();\r\n if (p.$tbody) {\r\n let rows = p.$tbody[0].childNodes;\r\n for (let i = 0, len = rows.length; i < len; i++) {\r\n that.trigger('rowdestroy', rows[i]);\r\n that._unbindCellEventsForRow(rows[i]);\r\n }\r\n }\r\n p.$table = p.table = p.$tbody = p.tbody = null;\r\n }\r\n\r\n that._destroyHeaderCells();\r\n p.currentTouchId = null;\r\n if (p.$header) {\r\n p.$header.remove();\r\n }\r\n\r\n // Create new base elements\r\n let tableClassName = o.tableClassName,\r\n headerCellClassName = tableClassName + '-header-cell',\r\n header = createElement('div'),\r\n $header = $(header),\r\n headerRow = createElement('div'),\r\n $headerRow = $(headerRow);\r\n\r\n header.className = tableClassName + '-header';\r\n headerRow.className = tableClassName + '-header-row';\r\n\r\n p.$header = $header;\r\n p.header = header;\r\n p.$headerRow = $headerRow;\r\n p.headerRow = headerRow;\r\n $headerRow.appendTo(p.$header);\r\n $header.prependTo(this.$el);\r\n\r\n relativizeElement(that.$el);\r\n\r\n if (o.width === DGTable.Width.SCROLL) {\r\n this.el.style.overflow = 'hidden';\r\n } else {\r\n this.el.style.overflow = '';\r\n }\r\n\r\n if (!o.height && o.virtualTable) {\r\n o.height = getElementHeight(this.$el[0], true);\r\n }\r\n\r\n return this;\r\n};\r\n\r\n/**\r\n * @private\r\n * @returns {DGTable} self\r\n */\r\nDGTable.prototype._renderSkeletonHeaderCells = function () {\r\n let that = this,\r\n p = that.p,\r\n o = that.o;\r\n\r\n let allowCellPreview = o.allowCellPreview,\r\n allowHeaderCellPreview = o.allowHeaderCellPreview;\r\n\r\n let tableClassName = o.tableClassName,\r\n headerCellClassName = tableClassName + '-header-cell',\r\n headerRow = p.headerRow;\r\n\r\n let ieDragDropHandler;\r\n if (hasIeDragAndDropBug) {\r\n ieDragDropHandler = function(evt) {\r\n evt.preventDefault();\r\n this.dragDrop();\r\n return false;\r\n };\r\n }\r\n\r\n let preventDefault = function (event) { event.preventDefault(); };\r\n\r\n // Create header cells\r\n for (let i = 0; i < p.visibleColumns.length; i++) {\r\n let column = p.visibleColumns[i];\r\n if (column.visible) {\r\n let cell = createElement('div');\r\n let $cell = $(cell);\r\n cell.draggable = true;\r\n cell.className = headerCellClassName;\r\n cell.style.width = column.actualWidth + 'px';\r\n if (o.sortableColumns && column.sortable) {\r\n cell.className += ' sortable';\r\n }\r\n cell['columnName'] = column.name;\r\n cell.setAttribute('data-column', column.name);\r\n\r\n let cellInside = createElement('div');\r\n cellInside.innerHTML = o.headerCellFormatter(column.label, column.name);\r\n cell.appendChild(cellInside);\r\n if (allowCellPreview && allowHeaderCellPreview) {\r\n p._bindCellHoverIn(cell);\r\n }\r\n headerRow.appendChild(cell);\r\n\r\n p.visibleColumns[i].element = $cell;\r\n\r\n $cell.on('mousedown.dgtable', that._onMouseDownColumnHeader.bind(that))\r\n .on('mousemove.dgtable', that._onMouseMoveColumnHeader.bind(that))\r\n .on('mouseup.dgtable', that._onMouseUpColumnHeader.bind(that))\r\n .on('mouseleave.dgtable', that._onMouseLeaveColumnHeader.bind(that))\r\n .on('touchstart.dgtable', that._onTouchStartColumnHeader.bind(that))\r\n .on('dragstart.dgtable', that._onStartDragColumnHeader.bind(that))\r\n .on('click.dgtable', that._onClickColumnHeader.bind(that))\r\n .on('contextmenu.dgtable', preventDefault);\r\n $(cellInside)\r\n .on('dragenter.dgtable', that._onDragEnterColumnHeader.bind(that))\r\n .on('dragover.dgtable', that._onDragOverColumnHeader.bind(that))\r\n .on('dragleave.dgtable', that._onDragLeaveColumnHeader.bind(that))\r\n .on('drop.dgtable', that._onDropColumnHeader.bind(that));\r\n\r\n if (hasIeDragAndDropBug) {\r\n $cell.on('selectstart.dgtable', ieDragDropHandler.bind(cell));\r\n }\r\n\r\n // Disable these to allow our own context menu events without interruption\r\n $cell.css({ '-webkit-touch-callout': 'none', '-webkit-user-select': 'none', '-moz-user-select': 'none', '-ms-user-select': 'none', '-o-user-select': 'none', 'user-select': 'none' });\r\n }\r\n }\r\n\r\n this.trigger('headerrowcreate', headerRow);\r\n\r\n return this;\r\n};\r\n\r\n/**\r\n * @private\r\n * @returns {DGTable} self\r\n */\r\nDGTable.prototype._renderSkeletonBody = function () {\r\n let that = this,\r\n p = that.p,\r\n o = that.o;\r\n\r\n let tableClassName = o.tableClassName;\r\n\r\n // Calculate virtual row heights\r\n if (o.virtualTable && !p.virtualRowHeight) {\r\n let createDummyRow = function() {\r\n let row = createElement('div'),\r\n cell = row.appendChild(createElement('div')),\r\n cellInner = cell.appendChild(createElement('div'));\r\n row.className = tableClassName + '-row';\r\n cell.className = tableClassName + '-cell';\r\n cellInner.innerHTML = '0';\r\n row.style.visibility = 'hidden';\r\n row.style.position = 'absolute';\r\n return row;\r\n };\r\n\r\n let $dummyTbody, $dummyWrapper = $('<div>')\r\n .addClass(that.el.className)\r\n .css({ 'z-index': -1, 'position': 'absolute', left: '0', top: '-9999px', width: '1px', overflow: 'hidden' })\r\n .append(\r\n $('<div>').addClass(tableClassName).append(\r\n $dummyTbody = $('<div>').addClass(tableClassName + '-body').css('width', 99999),\r\n ),\r\n );\r\n\r\n $dummyWrapper.appendTo(document.body);\r\n\r\n let row1 = createDummyRow(), row2 = createDummyRow(), row3 = createDummyRow();\r\n $dummyTbody.append(row1, row2, row3);\r\n\r\n p.virtualRowHeightFirst = getElementHeight(row1, true, true, true);\r\n p.virtualRowHeight = getElementHeight(row2, true, true, true);\r\n p.virtualRowHeightLast = getElementHeight(row3, true, true, true);\r\n\r\n p.virtualRowHeightMin = Math.min(Math.min(p.virtualRowHeightFirst, p.virtualRowHeight), p.virtualRowHeightLast);\r\n p.virtualRowHeightMax = Math.max(Math.max(p.virtualRowHeightFirst, p.virtualRowHeight), p.virtualRowHeightLast);\r\n\r\n $dummyWrapper.remove();\r\n }\r\n\r\n // Create inner table and tbody\r\n if (!p.$table) {\r\n\r\n let fragment = document.createDocumentFragment();\r\n\r\n // Create the inner table element\r\n let table = createElement('div');\r\n let $table = $(table);\r\n table.className = tableClassName;\r\n\r\n if (o.virtualTable) {\r\n table.className += ' virtual';\r\n }\r\n\r\n let tableHeight = (o.height - getElementHeight(p.$headerRow[0], true, true, true));\r\n if ($table.css('box-sizing') !== 'border-box') {\r\n tableHeight -= parseFloat($table.css('border-top-width')) || 0;\r\n tableHeight -= parseFloat($table.css('border-bottom-width')) || 0;\r\n tableHeight -= parseFloat($table.css('padding-top')) || 0;\r\n tableHeight -= parseFloat($table.css('padding-bottom')) || 0;\r\n }\r\n p.visibleHeight = tableHeight;\r\n table.style.height = o.height ? tableHeight + 'px' : 'auto';\r\n table.style.display = 'block';\r\n table.style.overflowY = 'auto';\r\n table.style.overflowX = o.width === DGTable.Width.SCROLL ? 'auto' : 'hidden';\r\n fragment.appendChild(table);\r\n\r\n // Create the \"tbody\" element\r\n let tbody = createElement('div');\r\n let $tbody = $(tbody);\r\n tbody.className = o.tableClassName + '-body';\r\n p.table = table;\r\n p.tbody = tbody;\r\n p.$table = $table;\r\n p.$tbody = $tbody;\r\n\r\n if (o.virtualTable) {\r\n p.virtualVisibleRows = Math.ceil(p.visibleHeight / p.virtualRowHeightMin);\r\n }\r\n\r\n that._calculateVirtualHeight();\r\n\r\n relativizeElement($tbody);\r\n relativizeElement($table);\r\n\r\n table.appendChild(tbody);\r\n that.el.appendChild(fragment);\r\n }\r\n\r\n return this;\r\n};\r\n\r\n/**\r\n * @private\r\n * @returns {DGTable} self\r\n * @deprecated\r\n */\r\nDGTable.prototype._renderSkeleton = function () {\r\n return this;\r\n};\r\n\r\n/**\r\n * @private\r\n * @returns {DGTable} self\r\n */\r\nDGTable.prototype._updateLastCellWidthFromScrollbar = function(force) {\r\n\r\n const p = this.p;\r\n\r\n // Calculate scrollbar's width and reduce from lat column's width\r\n let scrollbarWidth = p.table.offsetWidth - p.table.clientWidth;\r\n if (scrollbarWidth !== p.scrollbarWidth || force) {\r\n p.scrollbarWidth = scrollbarWidth;\r\n for (let i = 0; i < p.columns.length; i++) {\r\n p.columns[i].actualWidthConsideringScrollbarWidth = null;\r\n }\r\n\r\n if (p.scrollbarWidth > 0 && p.visibleColumns.length > 0) {\r\n // (There should always be at least 1 column visible, but just in case)\r\n let lastColIndex = p.visibleColumns.length - 1;\r\n\r\n p.visibleColumns[lastColIndex].actualWidthConsideringScrollbarWidth = p.visibleColumns[lastColIndex].actualWidth - p.scrollbarWidth;\r\n let lastColWidth = p.visibleColumns[lastColIndex].actualWidthConsideringScrollbarWidth + 'px';\r\n let tbodyChildren = p.tbody.childNodes;\r\n for (let i = 0, count = tbodyChildren.length; i < count; i++) {\r\n let row = tbodyChildren[i];\r\n if (row.nodeType !== 1) continue;\r\n row.childNodes[lastColIndex].style.width = lastColWidth;\r\n }\r\n\r\n p.headerRow.childNodes[lastColIndex].style.width = lastColWidth;\r\n }\r\n }\r\n return this;\r\n};\r\n\r\n/**\r\n * Explicitly set the width of the table based on the sum of the column widths\r\n * @private\r\n * @param {boolean} parentSizeMayHaveChanged Parent size may have changed, treat rendering accordingly\r\n * @returns {DGTable} self\r\n */\r\nDGTable.prototype._updateTableWidth = function (parentSizeMayHaveChanged) {\r\n const o = this.o, p = this.p;\r\n let width = this._calculateTbodyWidth();\r\n\r\n p.tbody.style.minWidth = width + 'px';\r\n p.headerRow.style.minWidth = (width + (p.scrollbarWidth || 0)) + 'px';\r\n\r\n p.$table.off('scroll', p.onTableScrolledHorizontallyBound);\r\n\r\n if (o.width === DGTable.Width.AUTO) {\r\n // Update wrapper element's size to fully contain the table body\r\n\r\n setElementWidth(p.$table[0], getElementWidth(p.$tbody[0], true, true, true));\r\n setElementWidth(this.$el[0], getElementWidth(p.$table[0], true, true, true));\r\n\r\n } else if (o.width === DGTable.Width.SCROLL) {\r\n\r\n if (parentSizeMayHaveChanged) {\r\n let lastScrollTop = p.table ? p.table.scrollTop : 0,\r\n lastScrollLeft = p.table ? p.table.scrollLeft : 0;\r\n\r\n // BUGFIX: Relayout before recording the widths\r\n webkitRenderBugfix(this.el);\r\n\r\n p.table.scrollTop = lastScrollTop;\r\n p.table.scrollLeft = lastScrollLeft;\r\n p.header.scrollLeft = lastScrollLeft;\r\n }\r\n\r\n p.$table.on('scroll', p.onTableScrolledHorizontallyBound);\r\n }\r\n\r\n return this;\r\n};\r\n\r\n/**\r\n * @private\r\n * @returns {Boolean}\r\n */\r\nDGTable.prototype._isTableRtl = function() {\r\n return this.p.$table.css('direction') === 'rtl';\r\n};\r\n\r\n/**\r\n * @private\r\n * @param {Object} column column object\r\n * @returns {String}\r\n */\r\nDGTable.prototype._serializeColumnWidth = function(column) {\r\n return column.widthMode === ColumnWidthMode.AUTO ? 'auto' :\r\n column.widthMode === ColumnWidthMode.RELATIVE ? column.width * 100 + '%' :\r\n column.width;\r\n};\r\n\r\n/**\r\n * @private\r\n * @param {HTMLElement} el\r\n */\r\nDGTable.prototype._cellMouseOverEvent = function(el) {\r\n const o = this.o, p = this.p;\r\n\r\n let elInner = el.firstChild;\r\n\r\n if ((elInner.scrollWidth - elInner.clientWidth > 1) ||\r\n (elInner.scrollHeight - elInner.clientHeight > 1)) {\r\n\r\n this.hideCellPreview();\r\n p.abortCellPreview = false;\r\n\r\n let $el = $(el), $elInner = $(elInner);\r\n let previewCell = createElement('div'), $previewCell = $(previewCell);\r\n previewCell.innerHTML = el.innerHTML;\r\n previewCell.className = o.cellPreviewClassName;\r\n\r\n let isHeaderCell = $el.hasClass(o.tableClassName + '-header-cell');\r\n if (isHeaderCell) {\r\n previewCell.className += ' header';\r\n if ($el.hasClass('sortable')) {\r\n previewCell.className += ' sortable';\r\n }\r\n\r\n previewCell.draggable = true;\r\n\r\n $(previewCell).on('mousedown', this._onMouseDownColumnHeader.bind(this))\r\n .on('mousemove', this._onMouseMoveColumnHeader.bind(this))\r\n .on('mouseup', this._onMouseUpColumnHeader.bind(this))\r\n .on('mouseleave', this._onMouseLeaveColumnHeader.bind(this))\r\n .on('touchstart', this._onTouchStartColumnHeader.bind(this))\r\n .on('dragstart', this._onStartDragColumnHeader.bind(this))\r\n .on('click', this._onClickColumnHeader.bind(this))\r\n .on('contextmenu.dgtable', function (event) { event.preventDefault(); });\r\n $(previewCell.firstChild)\r\n .on('dragenter', this._onDragEnterColumnHeader.bind(this))\r\n .on('dragover', this._onDragOverColumnHeader.bind(this))\r\n .on('dragleave', this._onDragLeaveColumnHeader.bind(this))\r\n .on('drop', this._onDropColumnHeader.bind(this));\r\n\r\n if (hasIeDragAndDropBug) {\r\n $(previewCell).on('selectstart', (function(evt) {\r\n evt.preventDefault();\r\n this.dragDrop();\r\n return false;\r\n }).bind(previewCell));\r\n }\r\n }\r\n\r\n let paddingL = parseFloat($el.css('padding-left')) || 0,\r\n paddingR = parseFloat($el.css('padding-right')) || 0,\r\n paddingT = parseFloat($el.css('padding-top')) || 0,\r\n paddingB = parseFloat($el.css('padding-bottom')) || 0;\r\n\r\n let requiredWidth = elInner.scrollWidth + (el.clientWidth - elInner.offsetWidth);\r\n\r\n let borderBox = $el.css('box-sizing') === 'border-box';\r\n if (borderBox) {\r\n $previewCell.css('box-sizing', 'border-box');\r\n } else {\r\n requiredWidth -= paddingL + paddingR;\r\n $previewCell.css('margin-top', parseFloat($(el).css('border-top-width')) || 0);\r\n }\r\n\r\n if (!p.transparentBgColor1) {\r\n // Detect browser's transparent spec\r\n let tempDiv = document.createElement('div');\r\n tempDiv.style.backgroundColor = 'transparent';\r\n p.transparentBgColor1 = $(tempDiv).css('background-color');\r\n tempDiv.style.backgroundColor = 'rgba(0,0,0,0)';\r\n p.transparentBgColor2 = $(tempDiv).css('background-color');\r\n }\r\n\r\n let css = {\r\n 'box-sizing': borderBox ? 'border-box' : 'content-box',\r\n 'width': requiredWidth,\r\n 'min-height': getElementHeight($el[0]),\r\n 'padding-left': paddingL,\r\n 'padding-right': paddingR,\r\n 'padding-top': paddingT,\r\n 'padding-bottom': paddingB,\r\n 'overflow': 'hidden',\r\n 'position': 'absolute',\r\n 'z-index': '-1',\r\n 'left': '0',\r\n 'top': '0',\r\n 'cursor': 'default',\r\n };\r\n\r\n if (css) {\r\n let bgColor = $(el).css('background-color');\r\n if (bgColor === p.transparentBgColor1 || bgColor === p.transparentBgColor2) {\r\n bgColor = $(el.parentNode).css('background-color');\r\n }\r\n if (bgColor === p.transparentBgColor1 || bgColor === p.transparentBgColor2) {\r\n bgColor = '#fff';\r\n }\r\n css['background-color'] = bgColor;\r\n }\r\n\r\n $previewCell.css(css);\r\n\r\n this.el.appendChild(previewCell);\r\n\r\n $(previewCell.firstChild).css({\r\n 'direction': $elInner.css('direction'),\r\n 'white-space': $elInner.css('white-space'),\r\n });\r\n\r\n if (isHeaderCell) {\r\n // Disable these to allow our own context menu events without interruption\r\n $previewCell.css({\r\n '-webkit-touch-callout': 'none',\r\n '-webkit-user-select': 'none',\r\n '-moz-user-select': 'none',\r\n '-ms-user-select': 'none',\r\n '-o-user-select': 'none',\r\n 'user-select': 'none',\r\n });\r\n }\r\n\r\n previewCell['rowIndex'] = el.parentNode['rowIndex'];\r\n let physicalRowIndex = previewCell['physicalRowIndex'] = el.parentNode['physicalRowIndex'];\r\n previewCell['columnName'] = p.visibleColumns[nativeIndexOf.call(el.parentNode.childNodes, el)].name;\r\n\r\n try {\r\n let selection = SelectionHelper.saveSelection(el);\r\n if (selection)\r\n SelectionHelper.restoreSelection(previewCell, selection);\r\n } catch (ignored) { /* we're ok with this */ }\r\n\r\n this.trigger(\r\n 'cellpreview',\r\n previewCell.firstChild,\r\n physicalRowIndex == null ? null : physicalRowIndex,\r\n previewCell['columnName'],\r\n physicalRowIndex == null ? null : p.rows[physicalRowIndex],\r\n el,\r\n );\r\n\r\n if (p.abortCellPreview) {\r\n $previewCell.remove();\r\n return;\r\n }\r\n\r\n let $parent = this.$el;\r\n let $scrollParent = $parent[0] === window ? $(document) : $parent;\r\n\r\n let offset = $el.offset();\r\n let parentOffset = $parent.offset();\r\n let rtl = $el.css('float') === 'right';\r\n let prop = rtl ? 'right' : 'left';\r\n\r\n // Handle RTL, go from the other side\r\n if (rtl) {\r\n let windowWidth = $(window).width();\r\n offset.right = windowWidth - (offset.left + getElementWidth($el[0], true, true, true));\r\n parentOffset.right = windowWidth - (parentOffset.left + getElementWidth($parent[0], true, true, true));\r\n }\r\n\r\n // If the parent has borders, then it would offset the offset...\r\n offset.left -= parseFloat($parent.css('border-left-width')) || 0;\r\n offset.right -= parseFloat($parent.css('border-right-width')) || 0;\r\n offset.top -= parseFloat($parent.css('border-top-width')) || 0;\r\n\r\n // Handle border widths of the element being offset\r\n offset[prop] += parseFloat($(el).css('border-' + prop + '-width')) || 0;\r\n offset.top += parseFloat($(el).css('border-top-width')) || parseFloat($(el).css('border-bottom-width')) || 0;\r\n\r\n // Subtract offsets to get offset relative to parent\r\n offset.left -= parentOffset.left;\r\n offset.right -= parentOffset.right;\r\n offset.top -= parentOffset.top;\r\n\r\n // Constrain horizontally\r\n let minHorz = 0,\r\n maxHorz = $parent - getElementWidth($previewCell[0], true, true, true);\r\n offset[prop] = offset[prop] < minHorz ?\r\n minHorz :\r\n (offset[prop] > maxHorz ? maxHorz : offset[prop]);\r\n\r\n // Constrain vertically\r\n let totalHeight = getElementHeight($el[0], true, true, true);\r\n let maxTop = $scrollParent.scrollTop() + getElementHeight($parent[0], true) - totalHeight;\r\n if (offset.top > maxTop) {\r\n offset.top = Math.max(0, maxTop);\r\n }\r\n\r\n // Apply css to preview cell\r\n let previewCss = {\r\n top: offset.top,\r\n 'z-index': 9999,\r\n };\r\n previewCss[prop] = offset[prop];\r\n\r\n $previewCell.css(previewCss);\r\n\r\n previewCell['__cell'] = el;\r\n p.$cellPreviewCell = $previewCell;\r\n el['__previewCell'] = previewCell;\r\n\r\n p._bindCellHoverOut(el);\r\n p._bindCellHoverOut(previewCell);\r\n\r\n // Avoid interfering with wheel scrolling the table\r\n $previewCell.on('wheel', () => {\r\n // Let the table naturally scroll with the wheel\r\n this.hideCellPreview();\r\n });\r\n }\r\n};\r\n\r\n/**\r\n * @private\r\n * @param {HTMLElement} _el\r\n */\r\nDGTable.prototype._cellMouseOutEvent = function(_el) {\r\n this.hideCellPreview();\r\n};\r\n\r\n/**\r\n * Hides the current cell preview,\r\n * or prevents the one that is currently trying to show (in the 'cellpreview' event)\r\n * @public\r\n * @expose\r\n * @returns {DGTable} self\r\n */\r\nDGTable.prototype.hideCellPreview = function() {\r\n const p = this.p;\r\n\r\n if (p.$cellPreviewCell) {\r\n let previewCell = p.$cellPreviewCell[0];\r\n let origCell = previewCell['__cell'];\r\n let selection;\r\n\r\n try {\r\n selection = SelectionHelper.saveSelection(previewCell);\r\n } catch (ignored) { /* we're ok with this */ }\r\n\r\n p.$cellPreviewCell.remove();\r\n p._unbindCellHoverOut(origCell);\r\n p._unbindCellHoverOut(previewCell);\r\n\r\n try {\r\n if (selection)\r\n SelectionHelper.restoreSelection(origCell, selection);\r\n } catch (ignored) { /* we're ok with this */ }\r\n\r\n this.trigger('cellpreviewdestroy', previewCell.firstChild, previewCell['physicalRowIndex'], previewCell['columnName'], origCell);\r\n\r\n origCell['__previewCell'] = null;\r\n previewCell['__cell'] = null;\r\n\r\n p.$cellPreviewCell = null;\r\n p.abortCellPreview = false;\r\n } else {\r\n p.abortCellPreview = true;\r\n }\r\n\r\n return this;\r\n};\r\n\r\n// It's a shame the Google Closure Compiler does not support exposing a nested @param\r\n\r\n/**\r\n * @typedef {Object} SERIALIZED_COLUMN\r\n * @property {Number|null|undefined} [order=0]\r\n * @property {String|null|undefined} [width='auto']\r\n * @property {Boolean|null|undefined} [visible=true]\r\n * */\r\n\r\n/**\r\n * @typedef {Object} SERIALIZED_COLUMN_SORT\r\n * @property {String|null|undefined} [column='']\r\n * @property {Boolean|null|undefined} [descending=false]\r\n * */\r\n\r\n/**\r\n * @enum {ColumnWidthMode|number|undefined}\r\n * @const\r\n * @typedef {ColumnWidthMode}\r\n */\r\nconst ColumnWidthMode = {\r\n /** @const*/ AUTO: 0,\r\n /** @const*/ ABSOLUTE: 1,\r\n /** @const*/ RELATIVE: 2,\r\n};\r\n\r\n/**\r\n * @enum {DGTable.Width|String|undefined}\r\n * @const\r\n * @typedef {DGTable.Width}\r\n */\r\nDGTable.Width = {\r\n /** @const*/ NONE: 'none',\r\n /** @const*/ AUTO: 'auto',\r\n /** @const*/ SCROLL: 'scroll',\r\n};\r\n\r\n/**\r\n * @expose\r\n * @typedef {Object} COLUMN_SORT_OPTIONS\r\n * @property {String|null|undefined} column\r\n * @property {Boolean|null|undefined} [descending=false]\r\n * */\r\n\r\n/**\r\n * @expose\r\n * @typedef {Object} COLUMN_OPTIONS\r\n * @property {String|null|undefined} width\r\n * @property {String|null|undefined} name\r\n * @property {String|null|undefined} label\r\n * @property {String|null|undefined} dataPath - defaults to `name`\r\n * @property {String|null|undefined} comparePath - defaults to `dataPath`\r\n * @property {Number|String|null|undefined} comparePath\r\n * @property {Boolean|null|undefined} [resizable=true]\r\n * @property {Boolean|null|undefined} [movable=true]\r\n * @property {Boolean|null|undefined} [sortable=true]\r\n * @property {Boolean|null|undefined} [visible=true]\r\n * @property {String|null|undefined} [cellClasses]\r\n * @property {Boolean|null|undefined} [ignoreMin=false]\r\n * */\r\n\r\n/**\r\n * @typedef {Object} DGTable.Options\r\n * @property {COLUMN_OPTIONS[]} [columns]\r\n * @property {Number} [height]\r\n * @property {DGTable.Width} [width]\r\n * @property {Boolean|null|undefined} [virtualTable=true]\r\n * @property {Boolean|null|undefined} [resizableColumns=true]\r\n * @property {Boolean|null|undefined} [movableColumns=true]\r\n * @property {Number|null|undefined} [sortableColumns=1]\r\n * @property {Boolean|null|undefined} [adjustColumnWidthForSortArrow=true]\r\n * @property {Boolean|null|undefined} [relativeWidthGrowsToFillWidth=true]\r\n * @property {Boolean|null|undefined} [relativeWidthShrinksToFillWidth=false]\r\n * @property {Boolean|null|undefined} [convertColumnWidthsToRelative=false]\r\n * @property {Boolean|null|undefined} [autoFillTableWidth=false]\r\n * @property {String|null|undefined} [cellClasses]\r\n * @property {String|String[]|COLUMN_SORT_OPTIONS|COLUMN_SORT_OPTIONS[]} [sortColumn]\r\n * @property {Function|null|undefined} [cellFormatter=null]\r\n * @property {Function|null|undefined} [headerCellFormatter=null]\r\n * @property {Number|null|undefined} [rowsBufferSize=10]\r\n * @property {Number|null|undefined} [minColumnWidth=35]\r\n * @property {Number|null|undefined} [resizeAreaWidth=8]\r\n * @property {{function(string,boolean):{function(a:*,b:*):boolean}}} [onComparatorRequired]\r\n * @property {String|null|undefined} [resizerClassName=undefined]\r\n * @property {String|null|undefined} [tableClassName=undefined]\r\n * @property {Boolean|null|undefined} [allowCellPreview=true]\r\n * @property {Boolean|null|undefined} [allowHeaderCellPreview=true]\r\n * @property {String|null|undefined} [cellPreviewClassName=undefined]\r\n * @property {Boolean|null|undefined} [cellPreviewAutoBackground=true]\r\n * @property {Element|null|undefined} [el=undefined]\r\n * @property {String|null|undefined} [className=undefined]\r\n * @property {Function|null|undefined} [filter=undefined]\r\n * */\r\n\r\n/**\r\n * @typedef {{\r\n * currentTarget: Element,\r\n * data: Object.<string, *>,\r\n * delegateTarget: Element,\r\n * isDefaultPrevented: Boolean,\r\n * isImmediatePropagationStopped: Boolean,\r\n * isPropagationStopped: Boolean,\r\n * namespace: string,\r\n * originalEvent: MouseEvent|TouchEvent|Event,\r\n * pageX: Number,\r\n * pageY: Number,\r\n * preventDefault: Function,\r\n * props: Object.<string, *>,\r\n * relatedTarget: Element,\r\n * result: *,\r\n * stopImmediatePropagation: Function,\r\n * stopPropagation: Function,\r\n * target: Element,\r\n * timeStamp: Number,\r\n * type: string,\r\n * which: Number\r\n * }} jQuery_Event\r\n * */\r\n\r\nif (!$.controls) {\r\n $.controls = {};\r\n}\r\n\r\n$.controls.dgtable = DGTable;\r\n\r\nexport default DGTable;\r\n"],"names":["check","it","Math","global","globalThis","window","self","this","Function","fails","exec","error","descriptors","require$$0","Object","defineProperty","get","call","prototype","functionCall","bind","apply","arguments","$propertyIsEnumerable","propertyIsEnumerable","getOwnPropertyDescriptor","NASHORN_BUG","1","V","descriptor","enumerable","match","version","createPropertyDescriptor","bitmap","value","configurable","writable","FunctionPrototype","uncurryThis","functionUncurryThis","fn","toString","stringSlice","slice","classofRaw","require$$1","require$$2","classof","require$$3","split","indexedObject","TypeError","requireObjectCoercible","undefined","IndexedObject","toIndexedObject","isCallable","argument","isObject","aFunction","getBuiltIn","namespace","method","length","objectIsPrototypeOf","isPrototypeOf","engineUserAgent","userAgent","process","Deno","versions","v8","engineV8Version","V8_VERSION","nativeSymbol","getOwnPropertySymbols","symbol","Symbol","String","sham","useSymbolAsUid","iterator","USE_SYMBOL_AS_UID","require$$4","isSymbol","$Symbol","aCallable","tryToString","setGlobal","key","sharedStore","store","sharedModule","push","mode","copyright","toObject","hasOwnProperty","hasOwnProperty_1","hasOwn","id","postfix","random","uid","shared","NATIVE_SYMBOL","require$$5","WellKnownSymbolsStore","symbolFor","createWellKnownSymbol","withoutSetter","wellKnownSymbol","name","description","require$$6","TO_PRIMITIVE","toPrimitive","input","pref","result","func","exoticToPrim","val","valueOf","ordinaryToPrimitive","toPropertyKey","document","EXISTS","createElement","ie8DomDefine","a","DESCRIPTORS","propertyIsEnumerableModule","IE8_DOM_DEFINE","require$$7","$getOwnPropertyDescriptor","O","P","f","v8PrototypeDefineBug","anObject","V8_PROTOTYPE_DEFINE_BUG","$defineProperty","Attributes","current","definePropertyModule","createNonEnumerableProperty","object","functionToString","inspectSource","set","has","WeakMap","nativeWeakMap","test","keys","hiddenKeys","NATIVE_WEAK_MAP","require$$8","state","wmget","wmhas","wmset","metadata","facade","STATE","internalState","enforce","getterFor","TYPE","type","getDescriptor","CONFIGURABLE","CONFIGURABLE_FUNCTION_NAME","getInternalState","enforceInternalState","TEMPLATE","redefineModule","options","unsafe","simple","noTargetGet","replace","source","join","ceil","floor","toIntegerOrInfinity","number","max","min","toAbsoluteIndex","index","integer","lengthOfArrayLike","obj","createMethod","IS_INCLUDES","$this","el","fromIndex","arrayIncludes","includes","indexOf","concat","getOwnPropertyNames","names","i","internalObjectKeys","getOwnPropertyNamesModule","getOwnPropertySymbolsModule","ownKeys","getOwnPropertyDescriptorModule","replacement","isForced","feature","detection","data","normalize","POLYFILL","NATIVE","string","toLowerCase","isForced_1","redefine","copyConstructorProperties","target","exceptions","TO_STRING_TAG_SUPPORT","TO_STRING_TAG","CORRECT_ARGUMENTS","tag","tryGet","callee","createProperty","propertyKey","Array","arraySlice","start","end","k","fin","n","mergeSort","array","comparefn","middle","insertionSort","merge","element","j","left","right","llength","rlength","lindex","rindex","arraySort","firefox","engineFfVersion","engineIsIeOrEdge","webkit","engineWebkitVersion","internalSort","FF","require$$9","IE_OR_EDGE","require$$10","V8","require$$11","WEBKIT","require$$12","un$Sort","sort","FAILS_ON_UNDEFINED","FAILS_ON_NULL","STRICT_METHOD","STABLE_SORT","code","chr","fromCharCode","v","b","charAt","targetProperty","sourceProperty","TARGET","GLOBAL","STATIC","stat","forced","$","proto","itemsLength","items","arrayLength","x","y","getSortCompare","find","predicate","len","htmlEncode","text","RowCollection","collection","assign","initialize","sortColumn","add","rows","at","splice","reset","filteredCollection","filterFunc","args","row","onComparatorRequired","onSort","nativeSort","getDefaultComparator","column","descending","columnName","comparePath","pathLength","hasPath","lessVal","moreVal","leftRow","rightRow","leftVal","rightVal","ColumnCollection","silent","comparator","comparators","defaultComparator","getByOrder","order","normalizeOrder","ordered","col1","col2","getColumns","cols","getVisibleColumns","visible","getMaxOrder","moveColumn","src","dest","col","srcOrder","destOrder","CssUtil","_isTransformSupported","getSupportedTransform","prefixes","div","item","style","SelectionHelper","range","getSelection","getRangeAt","commonAncestorContainer","child","parent","parentNode","isChildOf","preSelectionRange","cloneRange","selectNodeContents","setEnd","startContainer","startOffset","savedSel","node","charIndex","nodeStack","foundStart","stop","createRange","setStart","collapse","pop","nodeType","nextCharIndex","childNodes","sel","removeAllRanges","addRange","ByColumnFilter","keyword","actualVal","caseSensitive","nativeIndexOf","jQuery","navigator","ieVersion","parseFloat","substr","hasIeDragAndDropBug","relativizeElement","$el","css","isInputElementEvent","event","tagName","DGTable","VERSION","that","o","p","events","Element","addClass","className","on","destroy","onMouseMoveResizeAreaBound","_onMouseMoveResizeArea","onEndDragColumnHeaderBound","_onEndDragColumnHeader","onTableScrolledHorizontallyBound","_onTableScrolledHorizontally","tableSkeletonNeedsRendering","virtualTable","rowsBufferSize","minColumnWidth","resizeAreaWidth","resizableColumns","movableColumns","sortableColumns","parseInt","adjustColumnWidthForSortArrow","convertColumnWidthsToRelative","autoFillTableWidth","cellClasses","resizerClassName","tableClassName","allowCellPreview","allowHeaderCellPreview","cellPreviewClassName","cellPreviewAutoBackground","width","Width","NONE","relativeWidthGrowsToFillWidth","relativeWidthShrinksToFillWidth","setCellFormatter","cellFormatter","setHeaderCellFormatter","headerCellFormatter","setFilter","filter","height","setColumns","columns","sortColumns","tmpSortColumns","dataPath","filteredRows","hoverMouseOverHandler","evt","relatedTarget","fromElement","contains","_cellMouseOverEvent","hoverMouseOutHandler","toElement","_cellMouseOutEvent","_bindCellHoverIn","addEventListener","_unbindCellHoverIn","removeEventListener","_bindCellHoverOut","_unbindCellHoverOut","attachEvent","detachEvent","eventName","callback","cb","once","off","callbacks","trigger","_parseColumnWidth","minWidth","widthSize","widthMode","ColumnWidthMode","AUTO","RELATIVE","ABSOLUTE","_initColumnFromData","columnData","parsedWidth","ignoreMin","label","resizable","sortable","movable","close","remove","__removed","$resizer","$tbody","trs","_destroyHeaderCells","_unbindCellEventsForTable","$table","empty","workerListeners","worker","listener","_deferredRender","clearTimeout","prop","headerRow","rowCount","cells","cellCount","tbody","_unbindCellEventsForRow","rowToClean","render","offsetParent","setTimeout","renderedRows","_clearSortArrows","lastScrollTop","table","scrollTop","NaN","lastScrollHorz","getScrollHorz","_renderSkeletonBase","_renderSkeletonBody","tableWidthChanged","_renderSkeletonHeaderCells","renderRows","html","append","_updateLastCellWidthFromScrollbar","_updateTableWidth","_showSortArrow","isNaN","setScrollHorz","header","_onVirtualTableScrolled","firstVisible","virtualRowHeightFirst","virtualRowHeight","lastVisible","visibleHeight","countToRemove","oldFirstVisible","oldLastVisible","tbodyChildNodes","removeChild","prepend","clearAndRender","first","last","top","physicalRowIndex","rowClassName","cellClassName","isDataFiltered","visibleColumns","isVirtual","colCount","colIndex","_finalWidth","actualWidthConsideringScrollbarWidth","actualWidth","bodyFragment","createDocumentFragment","virtualRowXAttr","_isTableRtl","supportedTransform","rowData","cell","setAttribute","appendChild","innerHTML","_getHtmlForCell","position","_calculateVirtualHeight","virtualRowHeightLast","_calculateTbodyWidth","$row","sumActualWidth","$thisWrapper","z-index","float","overflow","appendTo","body","fractionTest","fractionValue","hasFractions","round","getElementWidth","scrollbarWidth","normalizedCols","normalizedColumn","_ensureVisibleColumns","addColumn","before","beforeColumn","to","removeColumn","colIdx","formatter","hadFilter","filterArgs","isArray","extend","clearFilter","_refilter","setColumnLabel","firstChild","textContent","visibleOnly","destCol","columnsArray","some","headerCell","$headerRow","beforePos","fromPos","insertBefore","srcWidth","destWidth","tbodyChildren","count","currentSort","_tableSkeletonNeedsRendering","sorts","resort","setColumnVisible","isColumnVisible","setMinColumnWidth","getMinColumnWidth","setSortableColumns","getSortableColumns","setMovableColumns","getMovableColumns","setResizableColumns","getResizableColumns","setComparatorCallback","comparatorCallback","setColumnWidth","oldWidth","_serializeColumnWidth","newWidth","getColumnWidth","getColumnConfig","getColumnsConfig","config","getSortedColumns","sorted","getHtmlForRowCell","rowIndex","getHtmlForRowDataCell","colValue","dataPathIndex","content","err","console","getRowYPos","offsetTop","getDataForRow","getRowCount","getIndexForRow","getFilteredRowCount","getIndexForFilteredRow","getDataForFilteredRow","getHeaderRowElement","_horizontalPadding","_horizontalBorderWidth","_calculateWidthAvailableForColumns","oldDisplay","lastScrollLeft","scrollLeft","display","detectedWidth","$header","$cells","$cell","getTextWidth","$tableWrapper","visibility","lastDetectedWidth","forceUpdate","renderColumns","sizeLeft","relatives","tableWidthBeforeCalculations","absWidthTotal","changedColumnIndexes","totalRelativePercentage","arrowProposedWidth","sizeLeftForRelative","clientWidth","minColumnWidthRelative","delta","extraRelative","nonResizableTotal","sizeLeftToFill","conv","tableWidth","_resizeColumnElements","tableHeightChanged","getElementHeight","addRows","firstRow","lastRow","removeRows","lastRowIndex","removeRow","refreshRow","isRowVisible","renderedRow","getRowElement","refreshAllVirtualRows","rowsToRender","setRows","getUrlForElementContent","blob","getElementById","Blob","BlobBuilder","WebKitBlobBuilder","MozBlobBuilder","MSBlobBuilder","builder","getBlob","URL","webkitURL","createObjectURL","isWorkerSupported","createWebWorker","url","Worker","postMessage","unbindWebWorker","abortCellPreview","hideCellPreview","cancelColumnResize","_getColumnByResizePosition","e","rtl","$headerCell","closest","previousElementSibling","previousSibling","firstCol","mouseX","pageX","originalEvent","clientX","offset","_onTouchStartColumnHeader","currentTouchId","startTouch","changedTouches","identifier","tapAndHoldTimeout","$eventTarget","currentTarget","startPos","pageY","currentPos","unbind","fakeEvent","Event","extendObjects","which","one","preventDefault","_event","sqrt","pow","abs","touch","_onMouseDownColumnHeader","selectedHeaderCell","commonAncestor","posCol","posRelative","resizerWidth","zIndex","ignored","_onMouseMoveColumnHeader","cursor","_onMouseUpColumnHeader","bounds","_onMouseLeaveColumnHeader","_onClickColumnHeader","_onStartDragColumnHeader","opacity","dragId","dataTransfer","setData","JSON","stringify","isBoxing","actualX","minX","baseX","sizeToSet","unNormalizedSizeToSet","_onDragEnterColumnHeader","dataTransferred","getData","parse","_onDragOverColumnHeader","_onDragLeaveColumnHeader","removeClass","_onDropColumnHeader","srcColName","destColName","srcCol","sortedColumns","arrows","arrow","scrollWidth","cellIndex","headerCells","prependTo","SCROLL","ieDragDropHandler","headerCellClassName","dragDrop","draggable","cellInside","-webkit-touch-callout","-webkit-user-select","-moz-user-select","-ms-user-select","-o-user-select","user-select","$dummyTbody","createDummyRow","cellInner","$dummyWrapper","row1","row2","row3","virtualRowHeightMin","virtualRowHeightMax","fragment","tableHeight","overflowY","overflowX","virtualVisibleRows","_renderSkeleton","force","offsetWidth","lastColIndex","lastColWidth","parentSizeMayHaveChanged","setElementWidth","offsetHeight","webkitRenderBugfix","elInner","scrollHeight","clientHeight","$elInner","previewCell","$previewCell","isHeaderCell","hasClass","paddingL","paddingR","paddingT","paddingB","requiredWidth","borderBox","transparentBgColor1","tempDiv","backgroundColor","transparentBgColor2","bgColor","selection","saveSelection","restoreSelection","$parent","$scrollParent","parentOffset","windowWidth","minHorz","maxHorz","totalHeight","maxTop","previewCss","$cellPreviewCell","_el","origCell","controls","dgtable"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["node_modules/core-js/internals/global.js","node_modules/core-js/internals/fails.js","node_modules/core-js/internals/descriptors.js","node_modules/core-js/internals/function-call.js","node_modules/core-js/internals/object-property-is-enumerable.js","node_modules/core-js/internals/engine-v8-version.js","node_modules/core-js/internals/create-property-descriptor.js","node_modules/core-js/internals/function-uncurry-this.js","node_modules/core-js/internals/classof-raw.js","node_modules/core-js/internals/indexed-object.js","node_modules/core-js/internals/require-object-coercible.js","node_modules/core-js/internals/to-indexed-object.js","node_modules/core-js/internals/is-callable.js","node_modules/core-js/internals/is-object.js","node_modules/core-js/internals/get-built-in.js","node_modules/core-js/internals/object-is-prototype-of.js","node_modules/core-js/internals/engine-user-agent.js","node_modules/core-js/internals/native-symbol.js","node_modules/core-js/internals/use-symbol-as-uid.js","node_modules/core-js/internals/is-symbol.js","node_modules/core-js/internals/try-to-string.js","node_modules/core-js/internals/a-callable.js","node_modules/core-js/internals/get-method.js","node_modules/core-js/internals/ordinary-to-primitive.js","node_modules/core-js/internals/set-global.js","node_modules/core-js/internals/shared-store.js","node_modules/core-js/internals/shared.js","node_modules/core-js/internals/to-object.js","node_modules/core-js/internals/has-own-property.js","node_modules/core-js/internals/uid.js","node_modules/core-js/internals/well-known-symbol.js","node_modules/core-js/internals/to-primitive.js","node_modules/core-js/internals/to-property-key.js","node_modules/core-js/internals/document-create-element.js","node_modules/core-js/internals/ie8-dom-define.js","node_modules/core-js/internals/object-get-own-property-descriptor.js","node_modules/core-js/internals/v8-prototype-define-bug.js","node_modules/core-js/internals/an-object.js","node_modules/core-js/internals/object-define-property.js","node_modules/core-js/internals/create-non-enumerable-property.js","node_modules/core-js/internals/inspect-source.js","node_modules/core-js/internals/internal-state.js","node_modules/core-js/internals/shared-key.js","node_modules/core-js/internals/native-weak-map.js","node_modules/core-js/internals/hidden-keys.js","node_modules/core-js/internals/function-name.js","node_modules/core-js/internals/redefine.js","node_modules/core-js/internals/to-integer-or-infinity.js","node_modules/core-js/internals/to-absolute-index.js","node_modules/core-js/internals/to-length.js","node_modules/core-js/internals/length-of-array-like.js","node_modules/core-js/internals/array-includes.js","node_modules/core-js/internals/object-keys-internal.js","node_modules/core-js/internals/object-get-own-property-names.js","node_modules/core-js/internals/enum-bug-keys.js","node_modules/core-js/internals/object-get-own-property-symbols.js","node_modules/core-js/internals/own-keys.js","node_modules/core-js/internals/copy-constructor-properties.js","node_modules/core-js/internals/is-forced.js","node_modules/core-js/internals/export.js","node_modules/core-js/internals/to-string-tag-support.js","node_modules/core-js/internals/array-method-is-strict.js","node_modules/core-js/internals/classof.js","node_modules/core-js/internals/to-string.js","node_modules/core-js/internals/create-property.js","node_modules/core-js/internals/array-slice-simple.js","node_modules/core-js/internals/array-sort.js","node_modules/core-js/internals/engine-ff-version.js","node_modules/core-js/internals/engine-is-ie-or-edge.js","node_modules/core-js/internals/engine-webkit-version.js","node_modules/core-js/modules/es.array.sort.js","src/util.js","src/row_collection.js","src/column_collection.js","src/css_util.js","src/SelectionHelper.js","src/by_column_filter.js","src/index.js"],"sourcesContent":["var check = function (it) {\n return it && it.Math == Math && it;\n};\n\n// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nmodule.exports =\n // eslint-disable-next-line es/no-global-this -- safe\n check(typeof globalThis == 'object' && globalThis) ||\n check(typeof window == 'object' && window) ||\n // eslint-disable-next-line no-restricted-globals -- safe\n check(typeof self == 'object' && self) ||\n check(typeof global == 'object' && global) ||\n // eslint-disable-next-line no-new-func -- fallback\n (function () { return this; })() || Function('return this')();\n","module.exports = function (exec) {\n try {\n return !!exec();\n } catch (error) {\n return true;\n }\n};\n","var fails = require('../internals/fails');\n\n// Detect IE8's incomplete defineProperty implementation\nmodule.exports = !fails(function () {\n // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n return Object.defineProperty({}, 1, { get: function () { return 7; } })[1] != 7;\n});\n","var call = Function.prototype.call;\n\nmodule.exports = call.bind ? call.bind(call) : function () {\n return call.apply(call, arguments);\n};\n","'use strict';\nvar $propertyIsEnumerable = {}.propertyIsEnumerable;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// Nashorn ~ JDK8 bug\nvar NASHORN_BUG = getOwnPropertyDescriptor && !$propertyIsEnumerable.call({ 1: 2 }, 1);\n\n// `Object.prototype.propertyIsEnumerable` method implementation\n// https://tc39.es/ecma262/#sec-object.prototype.propertyisenumerable\nexports.f = NASHORN_BUG ? function propertyIsEnumerable(V) {\n var descriptor = getOwnPropertyDescriptor(this, V);\n return !!descriptor && descriptor.enumerable;\n} : $propertyIsEnumerable;\n","var global = require('../internals/global');\nvar userAgent = require('../internals/engine-user-agent');\n\nvar process = global.process;\nvar Deno = global.Deno;\nvar versions = process && process.versions || Deno && Deno.version;\nvar v8 = versions && versions.v8;\nvar match, version;\n\nif (v8) {\n match = v8.split('.');\n // in old Chrome, versions of V8 isn't V8 = Chrome / 10\n // but their correct versions are not interesting for us\n version = match[0] > 0 && match[0] < 4 ? 1 : +(match[0] + match[1]);\n}\n\n// BrowserFS NodeJS `process` polyfill incorrectly set `.v8` to `0.0`\n// so check `userAgent` even if `.v8` exists, but 0\nif (!version && userAgent) {\n match = userAgent.match(/Edge\\/(\\d+)/);\n if (!match || match[1] >= 74) {\n match = userAgent.match(/Chrome\\/(\\d+)/);\n if (match) version = +match[1];\n }\n}\n\nmodule.exports = version;\n","module.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n","var FunctionPrototype = Function.prototype;\nvar bind = FunctionPrototype.bind;\nvar call = FunctionPrototype.call;\nvar uncurryThis = bind && bind.bind(call, call);\n\nmodule.exports = bind ? function (fn) {\n return fn && uncurryThis(fn);\n} : function (fn) {\n return fn && function () {\n return call.apply(fn, arguments);\n };\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\n\nvar toString = uncurryThis({}.toString);\nvar stringSlice = uncurryThis(''.slice);\n\nmodule.exports = function (it) {\n return stringSlice(toString(it), 8, -1);\n};\n","var global = require('../internals/global');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar fails = require('../internals/fails');\nvar classof = require('../internals/classof-raw');\n\nvar Object = global.Object;\nvar split = uncurryThis(''.split);\n\n// fallback for non-array-like ES3 and non-enumerable old V8 strings\nmodule.exports = fails(function () {\n // throws an error in rhino, see https://github.com/mozilla/rhino/issues/346\n // eslint-disable-next-line no-prototype-builtins -- safe\n return !Object('z').propertyIsEnumerable(0);\n}) ? function (it) {\n return classof(it) == 'String' ? split(it, '') : Object(it);\n} : Object;\n","var global = require('../internals/global');\n\nvar TypeError = global.TypeError;\n\n// `RequireObjectCoercible` abstract operation\n// https://tc39.es/ecma262/#sec-requireobjectcoercible\nmodule.exports = function (it) {\n if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n return it;\n};\n","// toObject with fallback for non-array-like ES3 strings\nvar IndexedObject = require('../internals/indexed-object');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nmodule.exports = function (it) {\n return IndexedObject(requireObjectCoercible(it));\n};\n","// `IsCallable` abstract operation\n// https://tc39.es/ecma262/#sec-iscallable\nmodule.exports = function (argument) {\n return typeof argument == 'function';\n};\n","var isCallable = require('../internals/is-callable');\n\nmodule.exports = function (it) {\n return typeof it == 'object' ? it !== null : isCallable(it);\n};\n","var global = require('../internals/global');\nvar isCallable = require('../internals/is-callable');\n\nvar aFunction = function (argument) {\n return isCallable(argument) ? argument : undefined;\n};\n\nmodule.exports = function (namespace, method) {\n return arguments.length < 2 ? aFunction(global[namespace]) : global[namespace] && global[namespace][method];\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\n\nmodule.exports = uncurryThis({}.isPrototypeOf);\n","var getBuiltIn = require('../internals/get-built-in');\n\nmodule.exports = getBuiltIn('navigator', 'userAgent') || '';\n","/* eslint-disable es/no-symbol -- required for testing */\nvar V8_VERSION = require('../internals/engine-v8-version');\nvar fails = require('../internals/fails');\n\n// eslint-disable-next-line es/no-object-getownpropertysymbols -- required for testing\nmodule.exports = !!Object.getOwnPropertySymbols && !fails(function () {\n var symbol = Symbol();\n // Chrome 38 Symbol has incorrect toString conversion\n // `get-own-property-symbols` polyfill symbols converted to object are not Symbol instances\n return !String(symbol) || !(Object(symbol) instanceof Symbol) ||\n // Chrome 38-40 symbols are not inherited from DOM collections prototypes to instances\n !Symbol.sham && V8_VERSION && V8_VERSION < 41;\n});\n","/* eslint-disable es/no-symbol -- required for testing */\nvar NATIVE_SYMBOL = require('../internals/native-symbol');\n\nmodule.exports = NATIVE_SYMBOL\n && !Symbol.sham\n && typeof Symbol.iterator == 'symbol';\n","var global = require('../internals/global');\nvar getBuiltIn = require('../internals/get-built-in');\nvar isCallable = require('../internals/is-callable');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar USE_SYMBOL_AS_UID = require('../internals/use-symbol-as-uid');\n\nvar Object = global.Object;\n\nmodule.exports = USE_SYMBOL_AS_UID ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n var $Symbol = getBuiltIn('Symbol');\n return isCallable($Symbol) && isPrototypeOf($Symbol.prototype, Object(it));\n};\n","var global = require('../internals/global');\n\nvar String = global.String;\n\nmodule.exports = function (argument) {\n try {\n return String(argument);\n } catch (error) {\n return 'Object';\n }\n};\n","var global = require('../internals/global');\nvar isCallable = require('../internals/is-callable');\nvar tryToString = require('../internals/try-to-string');\n\nvar TypeError = global.TypeError;\n\n// `Assert: IsCallable(argument) is true`\nmodule.exports = function (argument) {\n if (isCallable(argument)) return argument;\n throw TypeError(tryToString(argument) + ' is not a function');\n};\n","var aCallable = require('../internals/a-callable');\n\n// `GetMethod` abstract operation\n// https://tc39.es/ecma262/#sec-getmethod\nmodule.exports = function (V, P) {\n var func = V[P];\n return func == null ? undefined : aCallable(func);\n};\n","var global = require('../internals/global');\nvar call = require('../internals/function-call');\nvar isCallable = require('../internals/is-callable');\nvar isObject = require('../internals/is-object');\n\nvar TypeError = global.TypeError;\n\n// `OrdinaryToPrimitive` abstract operation\n// https://tc39.es/ecma262/#sec-ordinarytoprimitive\nmodule.exports = function (input, pref) {\n var fn, val;\n if (pref === 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val;\n if (isCallable(fn = input.valueOf) && !isObject(val = call(fn, input))) return val;\n if (pref !== 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n","var global = require('../internals/global');\n\n// eslint-disable-next-line es/no-object-defineproperty -- safe\nvar defineProperty = Object.defineProperty;\n\nmodule.exports = function (key, value) {\n try {\n defineProperty(global, key, { value: value, configurable: true, writable: true });\n } catch (error) {\n global[key] = value;\n } return value;\n};\n","var global = require('../internals/global');\nvar setGlobal = require('../internals/set-global');\n\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || setGlobal(SHARED, {});\n\nmodule.exports = store;\n","var IS_PURE = require('../internals/is-pure');\nvar store = require('../internals/shared-store');\n\n(module.exports = function (key, value) {\n return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n version: '3.20.2',\n mode: IS_PURE ? 'pure' : 'global',\n copyright: '© 2022 Denis Pushkarev (zloirock.ru)'\n});\n","var global = require('../internals/global');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nvar Object = global.Object;\n\n// `ToObject` abstract operation\n// https://tc39.es/ecma262/#sec-toobject\nmodule.exports = function (argument) {\n return Object(requireObjectCoercible(argument));\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar toObject = require('../internals/to-object');\n\nvar hasOwnProperty = uncurryThis({}.hasOwnProperty);\n\n// `HasOwnProperty` abstract operation\n// https://tc39.es/ecma262/#sec-hasownproperty\nmodule.exports = Object.hasOwn || function hasOwn(it, key) {\n return hasOwnProperty(toObject(it), key);\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\n\nvar id = 0;\nvar postfix = Math.random();\nvar toString = uncurryThis(1.0.toString);\n\nmodule.exports = function (key) {\n return 'Symbol(' + (key === undefined ? '' : key) + ')_' + toString(++id + postfix, 36);\n};\n","var global = require('../internals/global');\nvar shared = require('../internals/shared');\nvar hasOwn = require('../internals/has-own-property');\nvar uid = require('../internals/uid');\nvar NATIVE_SYMBOL = require('../internals/native-symbol');\nvar USE_SYMBOL_AS_UID = require('../internals/use-symbol-as-uid');\n\nvar WellKnownSymbolsStore = shared('wks');\nvar Symbol = global.Symbol;\nvar symbolFor = Symbol && Symbol['for'];\nvar createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol : Symbol && Symbol.withoutSetter || uid;\n\nmodule.exports = function (name) {\n if (!hasOwn(WellKnownSymbolsStore, name) || !(NATIVE_SYMBOL || typeof WellKnownSymbolsStore[name] == 'string')) {\n var description = 'Symbol.' + name;\n if (NATIVE_SYMBOL && hasOwn(Symbol, name)) {\n WellKnownSymbolsStore[name] = Symbol[name];\n } else if (USE_SYMBOL_AS_UID && symbolFor) {\n WellKnownSymbolsStore[name] = symbolFor(description);\n } else {\n WellKnownSymbolsStore[name] = createWellKnownSymbol(description);\n }\n } return WellKnownSymbolsStore[name];\n};\n","var global = require('../internals/global');\nvar call = require('../internals/function-call');\nvar isObject = require('../internals/is-object');\nvar isSymbol = require('../internals/is-symbol');\nvar getMethod = require('../internals/get-method');\nvar ordinaryToPrimitive = require('../internals/ordinary-to-primitive');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TypeError = global.TypeError;\nvar TO_PRIMITIVE = wellKnownSymbol('toPrimitive');\n\n// `ToPrimitive` abstract operation\n// https://tc39.es/ecma262/#sec-toprimitive\nmodule.exports = function (input, pref) {\n if (!isObject(input) || isSymbol(input)) return input;\n var exoticToPrim = getMethod(input, TO_PRIMITIVE);\n var result;\n if (exoticToPrim) {\n if (pref === undefined) pref = 'default';\n result = call(exoticToPrim, input, pref);\n if (!isObject(result) || isSymbol(result)) return result;\n throw TypeError(\"Can't convert object to primitive value\");\n }\n if (pref === undefined) pref = 'number';\n return ordinaryToPrimitive(input, pref);\n};\n","var toPrimitive = require('../internals/to-primitive');\nvar isSymbol = require('../internals/is-symbol');\n\n// `ToPropertyKey` abstract operation\n// https://tc39.es/ecma262/#sec-topropertykey\nmodule.exports = function (argument) {\n var key = toPrimitive(argument, 'string');\n return isSymbol(key) ? key : key + '';\n};\n","var global = require('../internals/global');\nvar isObject = require('../internals/is-object');\n\nvar document = global.document;\n// typeof document.createElement is 'object' in old IE\nvar EXISTS = isObject(document) && isObject(document.createElement);\n\nmodule.exports = function (it) {\n return EXISTS ? document.createElement(it) : {};\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\nvar createElement = require('../internals/document-create-element');\n\n// Thank's IE8 for his funny defineProperty\nmodule.exports = !DESCRIPTORS && !fails(function () {\n // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n return Object.defineProperty(createElement('div'), 'a', {\n get: function () { return 7; }\n }).a != 7;\n});\n","var DESCRIPTORS = require('../internals/descriptors');\nvar call = require('../internals/function-call');\nvar propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar toPropertyKey = require('../internals/to-property-key');\nvar hasOwn = require('../internals/has-own-property');\nvar IE8_DOM_DEFINE = require('../internals/ie8-dom-define');\n\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// `Object.getOwnPropertyDescriptor` method\n// https://tc39.es/ecma262/#sec-object.getownpropertydescriptor\nexports.f = DESCRIPTORS ? $getOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) {\n O = toIndexedObject(O);\n P = toPropertyKey(P);\n if (IE8_DOM_DEFINE) try {\n return $getOwnPropertyDescriptor(O, P);\n } catch (error) { /* empty */ }\n if (hasOwn(O, P)) return createPropertyDescriptor(!call(propertyIsEnumerableModule.f, O, P), O[P]);\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\n\n// V8 ~ Chrome 36-\n// https://bugs.chromium.org/p/v8/issues/detail?id=3334\nmodule.exports = DESCRIPTORS && fails(function () {\n // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n return Object.defineProperty(function () { /* empty */ }, 'prototype', {\n value: 42,\n writable: false\n }).prototype != 42;\n});\n","var global = require('../internals/global');\nvar isObject = require('../internals/is-object');\n\nvar String = global.String;\nvar TypeError = global.TypeError;\n\n// `Assert: Type(argument) is Object`\nmodule.exports = function (argument) {\n if (isObject(argument)) return argument;\n throw TypeError(String(argument) + ' is not an object');\n};\n","var global = require('../internals/global');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar IE8_DOM_DEFINE = require('../internals/ie8-dom-define');\nvar V8_PROTOTYPE_DEFINE_BUG = require('../internals/v8-prototype-define-bug');\nvar anObject = require('../internals/an-object');\nvar toPropertyKey = require('../internals/to-property-key');\n\nvar TypeError = global.TypeError;\n// eslint-disable-next-line es/no-object-defineproperty -- safe\nvar $defineProperty = Object.defineProperty;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nvar ENUMERABLE = 'enumerable';\nvar CONFIGURABLE = 'configurable';\nvar WRITABLE = 'writable';\n\n// `Object.defineProperty` method\n// https://tc39.es/ecma262/#sec-object.defineproperty\nexports.f = DESCRIPTORS ? V8_PROTOTYPE_DEFINE_BUG ? function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPropertyKey(P);\n anObject(Attributes);\n if (typeof O === 'function' && P === 'prototype' && 'value' in Attributes && WRITABLE in Attributes && !Attributes[WRITABLE]) {\n var current = $getOwnPropertyDescriptor(O, P);\n if (current && current[WRITABLE]) {\n O[P] = Attributes.value;\n Attributes = {\n configurable: CONFIGURABLE in Attributes ? Attributes[CONFIGURABLE] : current[CONFIGURABLE],\n enumerable: ENUMERABLE in Attributes ? Attributes[ENUMERABLE] : current[ENUMERABLE],\n writable: false\n };\n }\n } return $defineProperty(O, P, Attributes);\n} : $defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPropertyKey(P);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return $defineProperty(O, P, Attributes);\n } catch (error) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar definePropertyModule = require('../internals/object-define-property');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\n\nmodule.exports = DESCRIPTORS ? function (object, key, value) {\n return definePropertyModule.f(object, key, createPropertyDescriptor(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar isCallable = require('../internals/is-callable');\nvar store = require('../internals/shared-store');\n\nvar functionToString = uncurryThis(Function.toString);\n\n// this helper broken in `core-js@3.4.1-3.4.4`, so we can't use `shared` helper\nif (!isCallable(store.inspectSource)) {\n store.inspectSource = function (it) {\n return functionToString(it);\n };\n}\n\nmodule.exports = store.inspectSource;\n","var NATIVE_WEAK_MAP = require('../internals/native-weak-map');\nvar global = require('../internals/global');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar isObject = require('../internals/is-object');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar hasOwn = require('../internals/has-own-property');\nvar shared = require('../internals/shared-store');\nvar sharedKey = require('../internals/shared-key');\nvar hiddenKeys = require('../internals/hidden-keys');\n\nvar OBJECT_ALREADY_INITIALIZED = 'Object already initialized';\nvar TypeError = global.TypeError;\nvar WeakMap = global.WeakMap;\nvar set, get, has;\n\nvar enforce = function (it) {\n return has(it) ? get(it) : set(it, {});\n};\n\nvar getterFor = function (TYPE) {\n return function (it) {\n var state;\n if (!isObject(it) || (state = get(it)).type !== TYPE) {\n throw TypeError('Incompatible receiver, ' + TYPE + ' required');\n } return state;\n };\n};\n\nif (NATIVE_WEAK_MAP || shared.state) {\n var store = shared.state || (shared.state = new WeakMap());\n var wmget = uncurryThis(store.get);\n var wmhas = uncurryThis(store.has);\n var wmset = uncurryThis(store.set);\n set = function (it, metadata) {\n if (wmhas(store, it)) throw new TypeError(OBJECT_ALREADY_INITIALIZED);\n metadata.facade = it;\n wmset(store, it, metadata);\n return metadata;\n };\n get = function (it) {\n return wmget(store, it) || {};\n };\n has = function (it) {\n return wmhas(store, it);\n };\n} else {\n var STATE = sharedKey('state');\n hiddenKeys[STATE] = true;\n set = function (it, metadata) {\n if (hasOwn(it, STATE)) throw new TypeError(OBJECT_ALREADY_INITIALIZED);\n metadata.facade = it;\n createNonEnumerableProperty(it, STATE, metadata);\n return metadata;\n };\n get = function (it) {\n return hasOwn(it, STATE) ? it[STATE] : {};\n };\n has = function (it) {\n return hasOwn(it, STATE);\n };\n}\n\nmodule.exports = {\n set: set,\n get: get,\n has: has,\n enforce: enforce,\n getterFor: getterFor\n};\n","var shared = require('../internals/shared');\nvar uid = require('../internals/uid');\n\nvar keys = shared('keys');\n\nmodule.exports = function (key) {\n return keys[key] || (keys[key] = uid(key));\n};\n","var global = require('../internals/global');\nvar isCallable = require('../internals/is-callable');\nvar inspectSource = require('../internals/inspect-source');\n\nvar WeakMap = global.WeakMap;\n\nmodule.exports = isCallable(WeakMap) && /native code/.test(inspectSource(WeakMap));\n","module.exports = {};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar hasOwn = require('../internals/has-own-property');\n\nvar FunctionPrototype = Function.prototype;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar getDescriptor = DESCRIPTORS && Object.getOwnPropertyDescriptor;\n\nvar EXISTS = hasOwn(FunctionPrototype, 'name');\n// additional protection from minified / mangled / dropped function names\nvar PROPER = EXISTS && (function something() { /* empty */ }).name === 'something';\nvar CONFIGURABLE = EXISTS && (!DESCRIPTORS || (DESCRIPTORS && getDescriptor(FunctionPrototype, 'name').configurable));\n\nmodule.exports = {\n EXISTS: EXISTS,\n PROPER: PROPER,\n CONFIGURABLE: CONFIGURABLE\n};\n","var global = require('../internals/global');\nvar isCallable = require('../internals/is-callable');\nvar hasOwn = require('../internals/has-own-property');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar setGlobal = require('../internals/set-global');\nvar inspectSource = require('../internals/inspect-source');\nvar InternalStateModule = require('../internals/internal-state');\nvar CONFIGURABLE_FUNCTION_NAME = require('../internals/function-name').CONFIGURABLE;\n\nvar getInternalState = InternalStateModule.get;\nvar enforceInternalState = InternalStateModule.enforce;\nvar TEMPLATE = String(String).split('String');\n\n(module.exports = function (O, key, value, options) {\n var unsafe = options ? !!options.unsafe : false;\n var simple = options ? !!options.enumerable : false;\n var noTargetGet = options ? !!options.noTargetGet : false;\n var name = options && options.name !== undefined ? options.name : key;\n var state;\n if (isCallable(value)) {\n if (String(name).slice(0, 7) === 'Symbol(') {\n name = '[' + String(name).replace(/^Symbol\\(([^)]*)\\)/, '$1') + ']';\n }\n if (!hasOwn(value, 'name') || (CONFIGURABLE_FUNCTION_NAME && value.name !== name)) {\n createNonEnumerableProperty(value, 'name', name);\n }\n state = enforceInternalState(value);\n if (!state.source) {\n state.source = TEMPLATE.join(typeof name == 'string' ? name : '');\n }\n }\n if (O === global) {\n if (simple) O[key] = value;\n else setGlobal(key, value);\n return;\n } else if (!unsafe) {\n delete O[key];\n } else if (!noTargetGet && O[key]) {\n simple = true;\n }\n if (simple) O[key] = value;\n else createNonEnumerableProperty(O, key, value);\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, 'toString', function toString() {\n return isCallable(this) && getInternalState(this).source || inspectSource(this);\n});\n","var ceil = Math.ceil;\nvar floor = Math.floor;\n\n// `ToIntegerOrInfinity` abstract operation\n// https://tc39.es/ecma262/#sec-tointegerorinfinity\nmodule.exports = function (argument) {\n var number = +argument;\n // eslint-disable-next-line no-self-compare -- safe\n return number !== number || number === 0 ? 0 : (number > 0 ? floor : ceil)(number);\n};\n","var toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\n\nvar max = Math.max;\nvar min = Math.min;\n\n// Helper for a popular repeating case of the spec:\n// Let integer be ? ToInteger(index).\n// If integer < 0, let result be max((length + integer), 0); else let result be min(integer, length).\nmodule.exports = function (index, length) {\n var integer = toIntegerOrInfinity(index);\n return integer < 0 ? max(integer + length, 0) : min(integer, length);\n};\n","var toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\n\nvar min = Math.min;\n\n// `ToLength` abstract operation\n// https://tc39.es/ecma262/#sec-tolength\nmodule.exports = function (argument) {\n return argument > 0 ? min(toIntegerOrInfinity(argument), 0x1FFFFFFFFFFFFF) : 0; // 2 ** 53 - 1 == 9007199254740991\n};\n","var toLength = require('../internals/to-length');\n\n// `LengthOfArrayLike` abstract operation\n// https://tc39.es/ecma262/#sec-lengthofarraylike\nmodule.exports = function (obj) {\n return toLength(obj.length);\n};\n","var toIndexedObject = require('../internals/to-indexed-object');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\n\n// `Array.prototype.{ indexOf, includes }` methods implementation\nvar createMethod = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIndexedObject($this);\n var length = lengthOfArrayLike(O);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare -- NaN check\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare -- NaN check\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) {\n if ((IS_INCLUDES || index in O) && O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n\nmodule.exports = {\n // `Array.prototype.includes` method\n // https://tc39.es/ecma262/#sec-array.prototype.includes\n includes: createMethod(true),\n // `Array.prototype.indexOf` method\n // https://tc39.es/ecma262/#sec-array.prototype.indexof\n indexOf: createMethod(false)\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar hasOwn = require('../internals/has-own-property');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar indexOf = require('../internals/array-includes').indexOf;\nvar hiddenKeys = require('../internals/hidden-keys');\n\nvar push = uncurryThis([].push);\n\nmodule.exports = function (object, names) {\n var O = toIndexedObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) !hasOwn(hiddenKeys, key) && hasOwn(O, key) && push(result, key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (hasOwn(O, key = names[i++])) {\n ~indexOf(result, key) || push(result, key);\n }\n return result;\n};\n","var internalObjectKeys = require('../internals/object-keys-internal');\nvar enumBugKeys = require('../internals/enum-bug-keys');\n\nvar hiddenKeys = enumBugKeys.concat('length', 'prototype');\n\n// `Object.getOwnPropertyNames` method\n// https://tc39.es/ecma262/#sec-object.getownpropertynames\n// eslint-disable-next-line es/no-object-getownpropertynames -- safe\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return internalObjectKeys(O, hiddenKeys);\n};\n","// IE8- don't enum bug keys\nmodule.exports = [\n 'constructor',\n 'hasOwnProperty',\n 'isPrototypeOf',\n 'propertyIsEnumerable',\n 'toLocaleString',\n 'toString',\n 'valueOf'\n];\n","// eslint-disable-next-line es/no-object-getownpropertysymbols -- safe\nexports.f = Object.getOwnPropertySymbols;\n","var getBuiltIn = require('../internals/get-built-in');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar getOwnPropertyNamesModule = require('../internals/object-get-own-property-names');\nvar getOwnPropertySymbolsModule = require('../internals/object-get-own-property-symbols');\nvar anObject = require('../internals/an-object');\n\nvar concat = uncurryThis([].concat);\n\n// all object keys, includes non-enumerable and symbols\nmodule.exports = getBuiltIn('Reflect', 'ownKeys') || function ownKeys(it) {\n var keys = getOwnPropertyNamesModule.f(anObject(it));\n var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;\n return getOwnPropertySymbols ? concat(keys, getOwnPropertySymbols(it)) : keys;\n};\n","var hasOwn = require('../internals/has-own-property');\nvar ownKeys = require('../internals/own-keys');\nvar getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor');\nvar definePropertyModule = require('../internals/object-define-property');\n\nmodule.exports = function (target, source, exceptions) {\n var keys = ownKeys(source);\n var defineProperty = definePropertyModule.f;\n var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n if (!hasOwn(target, key) && !(exceptions && hasOwn(exceptions, key))) {\n defineProperty(target, key, getOwnPropertyDescriptor(source, key));\n }\n }\n};\n","var fails = require('../internals/fails');\nvar isCallable = require('../internals/is-callable');\n\nvar replacement = /#|\\.prototype\\./;\n\nvar isForced = function (feature, detection) {\n var value = data[normalize(feature)];\n return value == POLYFILL ? true\n : value == NATIVE ? false\n : isCallable(detection) ? fails(detection)\n : !!detection;\n};\n\nvar normalize = isForced.normalize = function (string) {\n return String(string).replace(replacement, '.').toLowerCase();\n};\n\nvar data = isForced.data = {};\nvar NATIVE = isForced.NATIVE = 'N';\nvar POLYFILL = isForced.POLYFILL = 'P';\n\nmodule.exports = isForced;\n","var global = require('../internals/global');\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar redefine = require('../internals/redefine');\nvar setGlobal = require('../internals/set-global');\nvar copyConstructorProperties = require('../internals/copy-constructor-properties');\nvar isForced = require('../internals/is-forced');\n\n/*\n options.target - name of the target object\n options.global - target is the global object\n options.stat - export as static methods of target\n options.proto - export as prototype methods of target\n options.real - real prototype method for the `pure` version\n options.forced - export even if the native feature is available\n options.bind - bind methods to the target, required for the `pure` version\n options.wrap - wrap constructors to preventing global pollution, required for the `pure` version\n options.unsafe - use the simple assignment of property instead of delete + defineProperty\n options.sham - add a flag to not completely full polyfills\n options.enumerable - export as enumerable property\n options.noTargetGet - prevent calling a getter on target\n options.name - the .name of the function if it does not match the key\n*/\nmodule.exports = function (options, source) {\n var TARGET = options.target;\n var GLOBAL = options.global;\n var STATIC = options.stat;\n var FORCED, target, key, targetProperty, sourceProperty, descriptor;\n if (GLOBAL) {\n target = global;\n } else if (STATIC) {\n target = global[TARGET] || setGlobal(TARGET, {});\n } else {\n target = (global[TARGET] || {}).prototype;\n }\n if (target) for (key in source) {\n sourceProperty = source[key];\n if (options.noTargetGet) {\n descriptor = getOwnPropertyDescriptor(target, key);\n targetProperty = descriptor && descriptor.value;\n } else targetProperty = target[key];\n FORCED = isForced(GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key, options.forced);\n // contained in target\n if (!FORCED && targetProperty !== undefined) {\n if (typeof sourceProperty == typeof targetProperty) continue;\n copyConstructorProperties(sourceProperty, targetProperty);\n }\n // add a flag to not completely full polyfills\n if (options.sham || (targetProperty && targetProperty.sham)) {\n createNonEnumerableProperty(sourceProperty, 'sham', true);\n }\n // extend global\n redefine(target, key, sourceProperty, options);\n }\n};\n","var wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar test = {};\n\ntest[TO_STRING_TAG] = 'z';\n\nmodule.exports = String(test) === '[object z]';\n","'use strict';\nvar fails = require('../internals/fails');\n\nmodule.exports = function (METHOD_NAME, argument) {\n var method = [][METHOD_NAME];\n return !!method && fails(function () {\n // eslint-disable-next-line no-useless-call,no-throw-literal -- required for testing\n method.call(null, argument || function () { throw 1; }, 1);\n });\n};\n","var global = require('../internals/global');\nvar TO_STRING_TAG_SUPPORT = require('../internals/to-string-tag-support');\nvar isCallable = require('../internals/is-callable');\nvar classofRaw = require('../internals/classof-raw');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar Object = global.Object;\n\n// ES3 wrong here\nvar CORRECT_ARGUMENTS = classofRaw(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n try {\n return it[key];\n } catch (error) { /* empty */ }\n};\n\n// getting tag from ES6+ `Object.prototype.toString`\nmodule.exports = TO_STRING_TAG_SUPPORT ? classofRaw : function (it) {\n var O, tag, result;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (tag = tryGet(O = Object(it), TO_STRING_TAG)) == 'string' ? tag\n // builtinTag case\n : CORRECT_ARGUMENTS ? classofRaw(O)\n // ES3 arguments fallback\n : (result = classofRaw(O)) == 'Object' && isCallable(O.callee) ? 'Arguments' : result;\n};\n","var global = require('../internals/global');\nvar classof = require('../internals/classof');\n\nvar String = global.String;\n\nmodule.exports = function (argument) {\n if (classof(argument) === 'Symbol') throw TypeError('Cannot convert a Symbol value to a string');\n return String(argument);\n};\n","'use strict';\nvar toPropertyKey = require('../internals/to-property-key');\nvar definePropertyModule = require('../internals/object-define-property');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\n\nmodule.exports = function (object, key, value) {\n var propertyKey = toPropertyKey(key);\n if (propertyKey in object) definePropertyModule.f(object, propertyKey, createPropertyDescriptor(0, value));\n else object[propertyKey] = value;\n};\n","var global = require('../internals/global');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar createProperty = require('../internals/create-property');\n\nvar Array = global.Array;\nvar max = Math.max;\n\nmodule.exports = function (O, start, end) {\n var length = lengthOfArrayLike(O);\n var k = toAbsoluteIndex(start, length);\n var fin = toAbsoluteIndex(end === undefined ? length : end, length);\n var result = Array(max(fin - k, 0));\n for (var n = 0; k < fin; k++, n++) createProperty(result, n, O[k]);\n result.length = n;\n return result;\n};\n","var arraySlice = require('../internals/array-slice-simple');\n\nvar floor = Math.floor;\n\nvar mergeSort = function (array, comparefn) {\n var length = array.length;\n var middle = floor(length / 2);\n return length < 8 ? insertionSort(array, comparefn) : merge(\n array,\n mergeSort(arraySlice(array, 0, middle), comparefn),\n mergeSort(arraySlice(array, middle), comparefn),\n comparefn\n );\n};\n\nvar insertionSort = function (array, comparefn) {\n var length = array.length;\n var i = 1;\n var element, j;\n\n while (i < length) {\n j = i;\n element = array[i];\n while (j && comparefn(array[j - 1], element) > 0) {\n array[j] = array[--j];\n }\n if (j !== i++) array[j] = element;\n } return array;\n};\n\nvar merge = function (array, left, right, comparefn) {\n var llength = left.length;\n var rlength = right.length;\n var lindex = 0;\n var rindex = 0;\n\n while (lindex < llength || rindex < rlength) {\n array[lindex + rindex] = (lindex < llength && rindex < rlength)\n ? comparefn(left[lindex], right[rindex]) <= 0 ? left[lindex++] : right[rindex++]\n : lindex < llength ? left[lindex++] : right[rindex++];\n } return array;\n};\n\nmodule.exports = mergeSort;\n","var userAgent = require('../internals/engine-user-agent');\n\nvar firefox = userAgent.match(/firefox\\/(\\d+)/i);\n\nmodule.exports = !!firefox && +firefox[1];\n","var UA = require('../internals/engine-user-agent');\n\nmodule.exports = /MSIE|Trident/.test(UA);\n","var userAgent = require('../internals/engine-user-agent');\n\nvar webkit = userAgent.match(/AppleWebKit\\/(\\d+)\\./);\n\nmodule.exports = !!webkit && +webkit[1];\n","'use strict';\nvar $ = require('../internals/export');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar aCallable = require('../internals/a-callable');\nvar toObject = require('../internals/to-object');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar toString = require('../internals/to-string');\nvar fails = require('../internals/fails');\nvar internalSort = require('../internals/array-sort');\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\nvar FF = require('../internals/engine-ff-version');\nvar IE_OR_EDGE = require('../internals/engine-is-ie-or-edge');\nvar V8 = require('../internals/engine-v8-version');\nvar WEBKIT = require('../internals/engine-webkit-version');\n\nvar test = [];\nvar un$Sort = uncurryThis(test.sort);\nvar push = uncurryThis(test.push);\n\n// IE8-\nvar FAILS_ON_UNDEFINED = fails(function () {\n test.sort(undefined);\n});\n// V8 bug\nvar FAILS_ON_NULL = fails(function () {\n test.sort(null);\n});\n// Old WebKit\nvar STRICT_METHOD = arrayMethodIsStrict('sort');\n\nvar STABLE_SORT = !fails(function () {\n // feature detection can be too slow, so check engines versions\n if (V8) return V8 < 70;\n if (FF && FF > 3) return;\n if (IE_OR_EDGE) return true;\n if (WEBKIT) return WEBKIT < 603;\n\n var result = '';\n var code, chr, value, index;\n\n // generate an array with more 512 elements (Chakra and old V8 fails only in this case)\n for (code = 65; code < 76; code++) {\n chr = String.fromCharCode(code);\n\n switch (code) {\n case 66: case 69: case 70: case 72: value = 3; break;\n case 68: case 71: value = 4; break;\n default: value = 2;\n }\n\n for (index = 0; index < 47; index++) {\n test.push({ k: chr + index, v: value });\n }\n }\n\n test.sort(function (a, b) { return b.v - a.v; });\n\n for (index = 0; index < test.length; index++) {\n chr = test[index].k.charAt(0);\n if (result.charAt(result.length - 1) !== chr) result += chr;\n }\n\n return result !== 'DGBEFHACIJK';\n});\n\nvar FORCED = FAILS_ON_UNDEFINED || !FAILS_ON_NULL || !STRICT_METHOD || !STABLE_SORT;\n\nvar getSortCompare = function (comparefn) {\n return function (x, y) {\n if (y === undefined) return -1;\n if (x === undefined) return 1;\n if (comparefn !== undefined) return +comparefn(x, y) || 0;\n return toString(x) > toString(y) ? 1 : -1;\n };\n};\n\n// `Array.prototype.sort` method\n// https://tc39.es/ecma262/#sec-array.prototype.sort\n$({ target: 'Array', proto: true, forced: FORCED }, {\n sort: function sort(comparefn) {\n if (comparefn !== undefined) aCallable(comparefn);\n\n var array = toObject(this);\n\n if (STABLE_SORT) return comparefn === undefined ? un$Sort(array) : un$Sort(array, comparefn);\n\n var items = [];\n var arrayLength = lengthOfArrayLike(array);\n var itemsLength, index;\n\n for (index = 0; index < arrayLength; index++) {\n if (index in array) push(items, array[index]);\n }\n\n internalSort(items, getSortCompare(comparefn));\n\n itemsLength = items.length;\n index = 0;\n\n while (index < itemsLength) array[index] = items[index++];\n while (index < arrayLength) delete array[index++];\n\n return array;\n }\n});\n","'use strict';\r\n\r\nconst indexOf = Array.prototype.indexOf;\r\n\r\nexport const includes = function includes (array, item) {\r\n return indexOf.call(array, item) >= 0;\r\n};\r\n\r\nexport const find = function find (array, predicate) {\r\n for (let i = 0, len = array.length; i >= 0 && i < len; i += 1) {\r\n if (predicate(array[i], i, array))\r\n return array[i];\r\n }\r\n};\r\n\r\nexport const htmlEncode = function htmlEncode (text) {\r\n return text.replace(/&/g, \"&amp;\")\r\n .replace(/</g, \"&lt;\")\r\n .replace(/>/g, \"&gt;\")\r\n .replace(/'/g, \"&#39;\")\r\n .replace(/\"/g, \"&quot;\")\r\n .replace(/\\n/g, '<br />');\r\n};\r\n","'use strict';\r\n\r\n// Define class RowCollection\r\nfunction RowCollection () {\r\n\r\n // Instantiate an Array. Seems like the `.length = ` of an inherited Array does not work well.\r\n // I will not use the IFRAME solution either in fear of memory leaks, and we're supporting large datasets...\r\n let collection = [];\r\n\r\n // Synthetically set the 'prototype'\r\n Object.assign(collection, RowCollection.prototype);\r\n\r\n // Call initializer\r\n collection.initialize.apply(collection, arguments);\r\n\r\n return collection;\r\n}\r\n\r\n// Inherit Array\r\nRowCollection.prototype = [];\r\n\r\nRowCollection.prototype.initialize = function (options) {\r\n\r\n options = options || {};\r\n\r\n /** @field {string} sortColumn */\r\n this.sortColumn = options.sortColumn == null ? [] : options.sortColumn;\r\n};\r\n\r\n/**\r\n * @param {Object|Object[]} rows - row or array of rows to add to this collection\r\n * @param {number?} at - position to insert rows at\r\n */\r\nRowCollection.prototype.add = function (rows, at) {\r\n let isArray = ('splice' in rows && 'length' in rows), i, len;\r\n if (isArray) {\r\n if (typeof at === 'number') {\r\n for (i = 0, len = rows.length; i < len; i++) {\r\n this.splice(at++, 0, rows[i]);\r\n }\r\n } else {\r\n for (i = 0, len = rows.length; i < len; i++) {\r\n this.push(rows[i]);\r\n }\r\n }\r\n } else {\r\n if (typeof at === 'number') {\r\n this.splice(at, 0, rows);\r\n } else {\r\n this.push(rows);\r\n }\r\n }\r\n};\r\n\r\n/**\r\n * @param {Object|Object[]=} rows Row or array of rows to add to this collection\r\n */\r\nRowCollection.prototype.reset = function (rows) {\r\n this.length = 0;\r\n if (rows) {\r\n this.add(rows);\r\n }\r\n};\r\n\r\n/**\r\n * @param {Function} filterFunc - Filtering function\r\n * @param {Object|null} args? - Options to pass to the function\r\n * @returns {RowCollection} success result\r\n */\r\nRowCollection.prototype.filteredCollection = function (filterFunc, args) {\r\n if (filterFunc && args) {\r\n let rows = new RowCollection({ sortColumn: this.sortColumn });\r\n\r\n for (let i = 0, len = this.length, row; i < len; i++) {\r\n row = this[i];\r\n if (filterFunc(row, args)) {\r\n row['__i'] = i;\r\n rows.push(row);\r\n }\r\n }\r\n return rows;\r\n } else {\r\n return null;\r\n }\r\n};\r\n\r\n/**\r\n * @type {function(columnName: string, descending: boolean, defaultComparator: function(a,b):number)|null|undefined}\r\n */\r\nRowCollection.prototype.onComparatorRequired = null;\r\n\r\n/**\r\n * @type {Function|null|undefined}\r\n */\r\nRowCollection.prototype.onSort = null;\r\n\r\nlet nativeSort = RowCollection.prototype.sort;\r\n\r\nfunction getDefaultComparator(column, descending) {\r\n let columnName = column.column;\r\n let comparePath = column.comparePath || columnName;\r\n if (typeof comparePath === 'string') {\r\n comparePath = comparePath.split('.');\r\n }\r\n let pathLength = comparePath.length,\r\n hasPath = pathLength > 1,\r\n i;\r\n\r\n let lessVal = descending ? 1 : -1, moreVal = descending ? -1 : 1;\r\n return function(leftRow, rightRow) {\r\n let leftVal = leftRow[comparePath[0]],\r\n rightVal = rightRow[comparePath[0]];\r\n if (hasPath) {\r\n for (i = 1; i < pathLength; i++) {\r\n leftVal = leftVal && leftVal[comparePath[i]];\r\n rightVal = rightVal && rightVal[comparePath[i]];\r\n }\r\n }\r\n if (leftVal === rightVal) return 0;\r\n if (leftVal == null) return lessVal;\r\n if (rightVal == null) return moreVal;\r\n if (leftVal < rightVal) return lessVal;\r\n return moreVal;\r\n };\r\n}\r\n\r\n/**\r\n * @param {Boolean=false} silent\r\n * @returns {Function|undefined} the comparator that was used\r\n */\r\nRowCollection.prototype.sort = function (silent) {\r\n let comparator;\r\n\r\n if (this.sortColumn.length) {\r\n let comparators = [];\r\n\r\n for (let i = 0; i < this.sortColumn.length; i++) {\r\n comparator = null;\r\n const defaultComparator = getDefaultComparator(this.sortColumn[i], this.sortColumn[i].descending);\r\n if (this.onComparatorRequired) {\r\n comparator = this.onComparatorRequired(this.sortColumn[i].column, this.sortColumn[i].descending, defaultComparator);\r\n }\r\n if (!comparator) {\r\n comparator = defaultComparator;\r\n }\r\n comparators.push(comparator.bind(this));\r\n }\r\n\r\n if (comparators.length === 1) {\r\n comparator = comparators[0];\r\n nativeSort.call(this, comparator);\r\n } else {\r\n let len = comparators.length,\r\n value;\r\n\r\n comparator = function(leftRow, rightRow) {\r\n for (let i = 0; i < len; i++) {\r\n value = comparators[i](leftRow, rightRow);\r\n if (value !== 0) {\r\n return value;\r\n }\r\n }\r\n return value;\r\n };\r\n\r\n nativeSort.call(this, comparator);\r\n }\r\n\r\n if (!silent) {\r\n if (this.onSort) {\r\n this.onSort(comparator);\r\n }\r\n }\r\n }\r\n\r\n return comparator;\r\n};\r\n\r\nexport default RowCollection;\r\n","'use strict';\r\n\r\n// Define class RowCollection\r\nfunction ColumnCollection () {\r\n\r\n // Instantiate an Array. Seems like the `.length = ` of an inherited Array does not work well.\r\n // I will not use the IFRAME solution either in fear of memory leaks, and we're supporting large datasets...\r\n let collection = [];\r\n\r\n // Synthetically set the 'prototype'\r\n Object.assign(collection, ColumnCollection.prototype);\r\n\r\n // Call initializer\r\n collection.initialize.apply(collection, arguments);\r\n\r\n return collection;\r\n}\r\n\r\n// Inherit Array\r\nColumnCollection.prototype = [];\r\n\r\nColumnCollection.prototype.initialize = function () {\r\n\r\n};\r\n\r\n/**\r\n * Get the column by this name\r\n * @param {String} column column name\r\n * @returns {Object} the column object\r\n */\r\nColumnCollection.prototype.get = function (column) {\r\n for (let i = 0, len = this.length; i < len; i++) {\r\n if (this[i].name == column) {\r\n return this[i];\r\n }\r\n }\r\n return null;\r\n};\r\n\r\n/**\r\n * Get the index of the column by this name\r\n * @param {String} column column name\r\n * @returns {int} the index of this column\r\n */\r\nColumnCollection.prototype.indexOf = function (column) {\r\n for (let i = 0, len = this.length; i < len; i++) {\r\n if (this[i].name == column) {\r\n return i;\r\n }\r\n }\r\n return -1;\r\n};\r\n\r\n/**\r\n * Get the column by the specified order\r\n * @param {Number} order the column's order\r\n * @returns {Object} the column object\r\n */\r\nColumnCollection.prototype.getByOrder = function (order) {\r\n for (let i = 0, len = this.length; i < len; i++) {\r\n if (this[i].order == order) {\r\n return this[i];\r\n }\r\n }\r\n return null;\r\n};\r\n\r\n/**\r\n * Normalize order\r\n * @returns {ColumnCollection} self\r\n */\r\nColumnCollection.prototype.normalizeOrder = function () {\r\n let ordered = [], i;\r\n for (i = 0; i < this.length; i++) {\r\n ordered.push(this[i]);\r\n }\r\n ordered.sort(function(col1, col2){ return col1.order < col2.order ? -1 : (col1.order > col2.order ? 1 : 0); });\r\n for (i = 0; i < ordered.length; i++) {\r\n ordered[i].order = i;\r\n }\r\n return this;\r\n};\r\n\r\n/**\r\n * Get the array of columns, order by the order property\r\n * @returns {Array<Object>} ordered array of columns\r\n */\r\nColumnCollection.prototype.getColumns = function () {\r\n let cols = [];\r\n for (let i = 0, column; i < this.length; i++) {\r\n column = this[i];\r\n cols.push(column);\r\n }\r\n cols.sort((col1, col2) => col1.order < col2.order ? -1 : (col1.order > col2.order ? 1 : 0));\r\n return cols;\r\n};\r\n\r\n/**\r\n * Get the array of visible columns, order by the order property\r\n * @returns {Array<Object>} ordered array of visible columns\r\n */\r\nColumnCollection.prototype.getVisibleColumns = function () {\r\n let cols = [];\r\n for (let i = 0, column; i < this.length; i++) {\r\n column = this[i];\r\n if (column.visible) {\r\n cols.push(column);\r\n }\r\n }\r\n cols.sort((col1, col2) => col1.order < col2.order ? -1 : (col1.order > col2.order ? 1 : 0));\r\n return cols;\r\n};\r\n\r\n/**\r\n * @returns {int} maximum order currently in the array\r\n */\r\nColumnCollection.prototype.getMaxOrder = function () {\r\n let order = 0;\r\n for (let i = 0, column; i < this.length; i++) {\r\n column = this[i];\r\n if (column.order > order) {\r\n order = column.order;\r\n }\r\n }\r\n return order;\r\n};\r\n\r\n/**\r\n * Move a column to a new spot in the collection\r\n * @param {Object} src the column to move\r\n * @param {Object} dest the destination column\r\n * @returns {ColumnCollection} self\r\n */\r\nColumnCollection.prototype.moveColumn = function (src, dest) {\r\n if (src && dest) {\r\n let srcOrder = src.order, destOrder = dest.order, i, col;\r\n if (srcOrder < destOrder) {\r\n for (i = srcOrder + 1; i <= destOrder; i++) {\r\n col = this.getByOrder(i);\r\n col.order--;\r\n }\r\n } else {\r\n for (i = srcOrder - 1; i >= destOrder; i--) {\r\n col = this.getByOrder(i);\r\n col.order++;\r\n }\r\n }\r\n src.order = destOrder;\r\n }\r\n return this;\r\n};\r\n\r\nexport default ColumnCollection;","/* eslint-env browser */\r\n\r\n'use strict';\r\n\r\nconst CssUtil = {};\r\n\r\nlet _isTransformSupported = null;\r\n\r\nCssUtil.getSupportedTransform = () => {\r\n if (_isTransformSupported === null) {\r\n let prefixes = ['transform', 'WebkitTransform', 'MozTransform', 'OTransform', 'msTransform'];\r\n let div = document.createElement('div');\r\n _isTransformSupported = false;\r\n for (let item of prefixes) {\r\n if (div && div.style[item] !== undefined) {\r\n _isTransformSupported = item;\r\n break;\r\n }\r\n }\r\n }\r\n return _isTransformSupported;\r\n};\r\n\r\nexport default CssUtil;\r\n","/* eslint-env browser */\r\n\r\n'use strict';\r\n\r\n// saveSelection/restoreSelection courtesy of Tim Down, with my improvements\r\n// https://stackoverflow.com/questions/13949059/persisting-the-changes-of-range-objects-after-selection-in-html/13950376#13950376\r\n\r\nfunction isChildOf(child, parent) {\r\n while ((child = child.parentNode) && child !== parent);\r\n return !!child;\r\n}\r\n\r\nclass SelectionHelper {\r\n\r\n static saveSelection(el) {\r\n let range = window.getSelection().getRangeAt(0);\r\n\r\n if (el !== range.commonAncestorContainer && !isChildOf(range.commonAncestorContainer, el))\r\n return null;\r\n\r\n let preSelectionRange = range.cloneRange();\r\n preSelectionRange.selectNodeContents(el);\r\n preSelectionRange.setEnd(range.startContainer, range.startOffset);\r\n let start = preSelectionRange.toString().length;\r\n\r\n return {\r\n start: start,\r\n end: start + range.toString().length,\r\n };\r\n }\r\n\r\n static restoreSelection(el, savedSel) {\r\n let charIndex = 0;\r\n let nodeStack = [el], node, foundStart = false, stop = false;\r\n let range = document.createRange();\r\n range.setStart(el, 0);\r\n range.collapse(true);\r\n\r\n while (!stop && (node = nodeStack.pop())) {\r\n if (node.nodeType === 3) {\r\n let nextCharIndex = charIndex + node.length;\r\n if (!foundStart && savedSel.start >= charIndex && savedSel.start <= nextCharIndex) {\r\n range.setStart(node, savedSel.start - charIndex);\r\n foundStart = true;\r\n }\r\n if (foundStart && savedSel.end >= charIndex && savedSel.end <= nextCharIndex) {\r\n range.setEnd(node, savedSel.end - charIndex);\r\n stop = true;\r\n }\r\n charIndex = nextCharIndex;\r\n } else {\r\n let i = node.childNodes.length;\r\n while (i--) {\r\n nodeStack.push(node.childNodes[i]);\r\n }\r\n }\r\n }\r\n\r\n let sel = window.getSelection();\r\n sel.removeAllRanges();\r\n sel.addRange(range);\r\n }\r\n}\r\n\r\nexport default SelectionHelper;\r\n","'use strict';\r\n\r\nfunction ByColumnFilter (row, args) {\r\n \r\n let column = args.column;\r\n let keyword = args.keyword == null ? '' : args.keyword.toString();\r\n \r\n if (!keyword || !column) return true;\r\n\r\n let actualVal = row[column];\r\n if (actualVal == null) {\r\n return false;\r\n }\r\n \r\n actualVal = actualVal.toString();\r\n \r\n if (!args.caseSensitive) {\r\n actualVal = actualVal.toLowerCase();\r\n keyword = keyword.toLowerCase();\r\n }\r\n \r\n return actualVal.indexOf(keyword) !== -1;\r\n}\r\n\r\nexport default ByColumnFilter;","/* eslint-env browser */\r\n\r\n'use strict';\r\n\r\nimport jQuery from 'jquery';\r\nimport { find, htmlEncode, includes } from './util';\r\nimport RowCollection from './row_collection';\r\nimport ColumnCollection from './column_collection';\r\nimport CssUtil from './css_util';\r\nimport SelectionHelper from './SelectionHelper';\r\nimport {\r\n getScrollHorz,\r\n setScrollHorz,\r\n} from '@danielgindi/dom-utils/lib/ScrollHelper';\r\nimport {\r\n getElementWidth,\r\n getElementHeight,\r\n setElementWidth,\r\n} from '@danielgindi/dom-utils/lib/Css';\r\nimport ByColumnFilter from './by_column_filter';\r\n\r\nconst nativeIndexOf = Array.prototype.indexOf;\r\nconst $ = jQuery;\r\n\r\nlet userAgent = navigator.userAgent;\r\nlet ieVersion = userAgent.indexOf('MSIE ') !== -1 ? parseFloat(userAgent.substr(userAgent.indexOf('MSIE ') + 5)) : null;\r\nlet hasIeDragAndDropBug = ieVersion && ieVersion < 10;\r\nlet createElement = document.createElement.bind(document);\r\nconst hasOwnProperty = Object.prototype.hasOwnProperty;\r\n\r\nconst IsSafeSymbol = ('safe');\r\n\r\nfunction webkitRenderBugfix(el) {\r\n // BUGFIX: WebKit has a bug where it does not relayout, and this affects us because scrollbars\r\n // are still calculated even though they are not there yet. This is the last resort.\r\n let oldDisplay = el.style.display;\r\n el.style.display = 'none';\r\n //noinspection BadExpressionStatementJS\r\n el.offsetHeight; // No need to store this anywhere, the reference is enough\r\n el.style.display = oldDisplay;\r\n return el;\r\n}\r\n\r\nfunction relativizeElement($el) {\r\n if (!includes(['relative', 'absolute', 'fixed'], $el.css('position'))) {\r\n $el.css('position', 'relative');\r\n }\r\n}\r\n\r\nconst isInputElementEvent = event => /^(?:INPUT|TEXTAREA|BUTTON|SELECT)$/.test(event.target.tagName);\r\n\r\n/** @class DGTable */\r\nlet DGTable = function DGTable () {\r\n if (!(this instanceof DGTable)) {\r\n // Allow constructing without `new`\r\n return new (Function.prototype.bind.apply(\r\n DGTable,\r\n [DGTable].concat(Array.prototype.slice.call(arguments, 0))));\r\n }\r\n\r\n this.initialize.apply(this, arguments);\r\n};\r\n\r\n/**\r\n * @public\r\n * @expose\r\n * @type {string}\r\n */\r\nDGTable.VERSION = '@@VERSION';\r\n\r\n/**\r\n * @public\r\n * @expose\r\n * @type {string}\r\n */\r\nDGTable.prototype.VERSION = DGTable.VERSION;\r\n\r\n/**\r\n * @constructs\r\n * @param {DGTable.Options?} options - initialization options\r\n * @returns {DGTable}\r\n */\r\nDGTable.prototype.initialize = function (options) {\r\n let that = this;\r\n\r\n options = options || {};\r\n\r\n /**\r\n * @private\r\n * @type {DGTable.Options}\r\n * */\r\n let o = that.o = {};\r\n\r\n /**\r\n * @private\r\n * This is for encapsulating private data */\r\n let p = that.p = {};\r\n\r\n /** This is for encapsulating event callback */\r\n p.events = {};\r\n\r\n /**\r\n * @public\r\n * @expose\r\n * */\r\n that.el = (options.el && options.el instanceof Element) ? options.el : document.createElement('div');\r\n\r\n /**\r\n * @public\r\n * @expose\r\n * */\r\n let $el = that.$el = $(that.el);\r\n\r\n if (that.el !== options.el) {\r\n $el.addClass(options.className || 'dgtable-wrapper');\r\n }\r\n\r\n // Set control data\r\n $el\r\n .data('control', that)\r\n .data('dgtable', that);\r\n\r\n // For jQuery.UI or jquery.removeevent\r\n $el.on('remove', function () {\r\n that.destroy();\r\n });\r\n\r\n p.onMouseMoveResizeAreaBound = this._onMouseMoveResizeArea.bind(this);\r\n p.onEndDragColumnHeaderBound = this._onEndDragColumnHeader.bind(this);\r\n p.onTableScrolledHorizontallyBound = this._onTableScrolledHorizontally.bind(this);\r\n\r\n this.$el.on('dragend', p.onEndDragColumnHeaderBound);\r\n\r\n /**\r\n * @private\r\n * @field {Boolean} _tableSkeletonNeedsRendering */\r\n p.tableSkeletonNeedsRendering = true;\r\n\r\n /**\r\n * @private\r\n * @field {Boolean} virtualTable */\r\n o.virtualTable = options.virtualTable === undefined ? true : !!options.virtualTable;\r\n\r\n /**\r\n * @private\r\n * @field {Number} rowsBufferSize */\r\n o.rowsBufferSize = options.rowsBufferSize || 3;\r\n\r\n /**\r\n * @private\r\n * @field {Number} minColumnWidth */\r\n o.minColumnWidth = Math.max(options.minColumnWidth || 35, 0);\r\n\r\n /**\r\n * @private\r\n * @field {Number} resizeAreaWidth */\r\n o.resizeAreaWidth = options.resizeAreaWidth || 8;\r\n\r\n /**\r\n * @private\r\n * @field {Boolean} resizableColumns */\r\n o.resizableColumns = options.resizableColumns === undefined ? true : !!options.resizableColumns;\r\n\r\n /**\r\n * @private\r\n * @field {Boolean} movableColumns */\r\n o.movableColumns = options.movableColumns === undefined ? true : !!options.movableColumns;\r\n\r\n /**\r\n * @private\r\n * @field {Number} sortableColumns */\r\n o.sortableColumns = options.sortableColumns === undefined ? 1 : (parseInt(options.sortableColumns, 10) || 1);\r\n\r\n /**\r\n * @private\r\n * @field {Boolean} adjustColumnWidthForSortArrow */\r\n o.adjustColumnWidthForSortArrow = options.adjustColumnWidthForSortArrow === undefined ? true : !!options.adjustColumnWidthForSortArrow;\r\n\r\n /**\r\n * @private\r\n * @field {Boolean} convertColumnWidthsToRelative */\r\n o.convertColumnWidthsToRelative = options.convertColumnWidthsToRelative === undefined ? false : !!options.convertColumnWidthsToRelative;\r\n\r\n /**\r\n * @private\r\n * @field {Boolean} autoFillTableWidth */\r\n o.autoFillTableWidth = options.autoFillTableWidth === undefined ? false : !!options.autoFillTableWidth;\r\n\r\n /**\r\n * @private\r\n * @field {String} cellClasses */\r\n o.cellClasses = options.cellClasses === undefined ? '' : options.cellClasses;\r\n\r\n /**\r\n * @private\r\n * @field {String} resizerClassName */\r\n o.resizerClassName = options.resizerClassName === undefined ? 'dgtable-resize' : options.resizerClassName;\r\n\r\n /**\r\n * @private\r\n * @field {String} tableClassName */\r\n o.tableClassName = options.tableClassName === undefined ? 'dgtable' : options.tableClassName;\r\n\r\n /**\r\n * @private\r\n * @field {Boolean} allowCellPreview */\r\n o.allowCellPreview = options.allowCellPreview === undefined ? true : options.allowCellPreview;\r\n\r\n /**\r\n * @private\r\n * @field {Boolean} allowHeaderCellPreview */\r\n o.allowHeaderCellPreview = options.allowHeaderCellPreview === undefined ? true : options.allowHeaderCellPreview;\r\n\r\n /**\r\n * @private\r\n * @field {String} cellPreviewClassName */\r\n o.cellPreviewClassName = options.cellPreviewClassName === undefined ? 'dgtable-cell-preview' : options.cellPreviewClassName;\r\n\r\n /**\r\n * @private\r\n * @field {Boolean} cellPreviewAutoBackground */\r\n o.cellPreviewAutoBackground = options.cellPreviewAutoBackground === undefined ? true : options.cellPreviewAutoBackground;\r\n\r\n /**\r\n * @private\r\n * @field {function(columnName: string, descending: boolean, defaultComparator: function(a,b):number):(function(a,b):number)} onComparatorRequired */\r\n o.onComparatorRequired = options.onComparatorRequired === undefined ? null : options.onComparatorRequired;\r\n if (!o.onComparatorRequired && typeof options['comparatorCallback'] === 'function') {\r\n o.onComparatorRequired = options['comparatorCallback'];\r\n }\r\n\r\n /**\r\n * @private\r\n * @field {Boolean} width */\r\n o.width = options.width === undefined ? DGTable.Width.NONE : options.width;\r\n\r\n /**\r\n * @private\r\n * @field {Boolean} relativeWidthGrowsToFillWidth */\r\n o.relativeWidthGrowsToFillWidth = options.relativeWidthGrowsToFillWidth === undefined ? true : !!options.relativeWidthGrowsToFillWidth;\r\n\r\n /**\r\n * @private\r\n * @field {Boolean} relativeWidthShrinksToFillWidth */\r\n o.relativeWidthShrinksToFillWidth = options.relativeWidthShrinksToFillWidth === undefined ? false : !!options.relativeWidthShrinksToFillWidth;\r\n\r\n this.setCellFormatter(options.cellFormatter);\r\n this.setHeaderCellFormatter(options.headerCellFormatter);\r\n this.setFilter(options.filter);\r\n\r\n /** @private\r\n * @field {Number} height */\r\n o.height = options.height;\r\n\r\n // Prepare columns\r\n that.setColumns(options.columns || [], false);\r\n\r\n // Set sorting columns\r\n let sortColumns = [];\r\n\r\n if (options.sortColumn) {\r\n\r\n let tmpSortColumns = options.sortColumn;\r\n\r\n if (tmpSortColumns && typeof tmpSortColumns !== 'object') {\r\n tmpSortColumns = [tmpSortColumns];\r\n }\r\n\r\n if (tmpSortColumns instanceof Array ||\r\n typeof tmpSortColumns === 'object') {\r\n\r\n for (let i = 0, len = tmpSortColumns.length; i < len; i++) {\r\n let sortColumn = tmpSortColumns[i];\r\n if (typeof sortColumn === 'string') {\r\n sortColumn = { column: sortColumn, descending: false };\r\n }\r\n let col = p.columns.get(sortColumn.column);\r\n if (!col) continue;\r\n\r\n sortColumns.push({\r\n column: sortColumn.column,\r\n comparePath: col.comparePath || col.dataPath,\r\n descending: sortColumn.descending,\r\n });\r\n }\r\n }\r\n }\r\n\r\n /** @field {RowCollection} _rows */\r\n p.rows = new RowCollection({ sortColumn: sortColumns });\r\n p.rows.onComparatorRequired = (column, descending, defaultComparator) => {\r\n if (o.onComparatorRequired) {\r\n return o.onComparatorRequired(column, descending, defaultComparator);\r\n }\r\n };\r\n\r\n /** @private\r\n * @field {RowCollection} _filteredRows */\r\n p.filteredRows = null;\r\n\r\n /*\r\n Setup hover mechanism.\r\n We need this to be high performance, as there may be MANY cells to call this on, on creation and destruction.\r\n Using native events to spare the overhead of jQuery's event binding, and even just the creation of the jQuery collection object.\r\n */\r\n\r\n /**\r\n * @param {MouseEvent} evt\r\n * @this {HTMLElement}\r\n * */\r\n let hoverMouseOverHandler = function (evt) {\r\n evt = evt || event;\r\n let relatedTarget = evt.fromElement || evt.relatedTarget;\r\n if (relatedTarget === this || $.contains(this, relatedTarget)) return;\r\n if (this['__previewCell'] && (relatedTarget === this['__previewCell'] || $.contains(this['__previewCell'], relatedTarget))) return;\r\n that._cellMouseOverEvent.call(that, this);\r\n };\r\n\r\n /**\r\n * @param {MouseEvent} evt\r\n * @this {HTMLElement}\r\n * */\r\n let hoverMouseOutHandler = function (evt) {\r\n evt = evt || event;\r\n let relatedTarget = evt.toElement || evt.relatedTarget;\r\n if (relatedTarget === this || $.contains(this, relatedTarget)) return;\r\n if (this['__previewCell'] && (relatedTarget === this['__previewCell'] || $.contains(this['__previewCell'], relatedTarget))) return;\r\n that._cellMouseOutEvent.call(that, this);\r\n };\r\n\r\n if ('addEventListener' in window) {\r\n\r\n /**\r\n * @param {HTMLElement} el cell or header-cell\r\n * */\r\n p._bindCellHoverIn = function (el) {\r\n if (!el['__hoverIn']) {\r\n el.addEventListener('mouseover', el['__hoverIn'] = hoverMouseOverHandler.bind(el));\r\n }\r\n };\r\n\r\n /**\r\n * @param {HTMLElement} el cell or header-cell\r\n * */\r\n p._unbindCellHoverIn = function (el) {\r\n if (el['__hoverIn']) {\r\n el.removeEventListener('mouseover', el['__hoverIn']);\r\n el['__hoverIn'] = null;\r\n }\r\n };\r\n\r\n /**\r\n * @param {HTMLElement} el cell or header-cell\r\n * @returns {DGTable} self\r\n * */\r\n p._bindCellHoverOut = function (el) {\r\n if (!el['__hoverOut']) {\r\n el.addEventListener('mouseout', el['__hoverOut'] = hoverMouseOutHandler.bind(el['__cell'] || el));\r\n }\r\n return this;\r\n };\r\n\r\n /**\r\n * @param {HTMLElement} el cell or header-cell\r\n * @returns {DGTable} self\r\n * */\r\n p._unbindCellHoverOut = function (el) {\r\n if (el['__hoverOut']) {\r\n el.removeEventListener('mouseout', el['__hoverOut']);\r\n el['__hoverOut'] = null;\r\n }\r\n return this;\r\n };\r\n\r\n } else {\r\n\r\n /**\r\n * @param {HTMLElement} el cell or header-cell\r\n * */\r\n p._bindCellHoverIn = function (el) {\r\n if (!el['__hoverIn']) {\r\n el.attachEvent('mouseover', el['__hoverIn'] = hoverMouseOverHandler.bind(el));\r\n }\r\n };\r\n\r\n /**\r\n * @param {HTMLElement} el cell or header-cell\r\n * */\r\n p._unbindCellHoverIn = function (el) {\r\n if (el['__hoverIn']) {\r\n el.detachEvent('mouseover', el['__hoverIn']);\r\n el['__hoverIn'] = null;\r\n }\r\n };\r\n\r\n /**\r\n * @param {HTMLElement} el cell or header-cell\r\n * */\r\n p._bindCellHoverOut = function (el) {\r\n if (!el['__hoverOut']) {\r\n el.attachEvent('mouseout', el['__hoverOut'] = hoverMouseOutHandler.bind(el['__cell'] || el));\r\n }\r\n };\r\n\r\n /**\r\n * @param {HTMLElement} el cell or header-cell\r\n * @returns {DGTable} self\r\n * */\r\n p._unbindCellHoverOut = function (el) {\r\n if (el['__hoverOut']) {\r\n el.detachEvent('mouseout', el['__hoverOut']);\r\n el['__hoverOut'] = null;\r\n }\r\n return this;\r\n };\r\n\r\n }\r\n};\r\n\r\n/**\r\n * Add an event listener\r\n * @public\r\n * @expose\r\n * @param {String} eventName\r\n * @param {Function} callback\r\n * @returns {DGTable}\r\n */\r\nDGTable.prototype.on = function (eventName, callback) {\r\n let that = this, events = that.p.events;\r\n\r\n if (typeof callback !== 'function')\r\n return that;\r\n\r\n if (!hasOwnProperty.call(events, eventName))\r\n events[eventName] = [];\r\n\r\n events[eventName].push({\r\n cb: callback,\r\n once: false,\r\n });\r\n\r\n return that;\r\n};\r\n\r\n/**\r\n * Add an event listener for a one shot\r\n * @public\r\n * @expose\r\n * @param {String} eventName\r\n * @param {Function} callback\r\n * @returns {DGTable}\r\n */\r\nDGTable.prototype.once = function (eventName, callback) {\r\n let that = this, events = that.p.events;\r\n\r\n if (typeof callback !== 'function')\r\n return that;\r\n\r\n if (!hasOwnProperty.call(events, eventName))\r\n events[eventName] = [];\r\n\r\n events[eventName].push({\r\n cb: callback,\r\n once: true,\r\n });\r\n\r\n return that;\r\n};\r\n\r\n/**\r\n * Remove an event listener\r\n * @public\r\n * @expose\r\n * @param {String} eventName\r\n * @param {Function} callback\r\n * @returns {DGTable}\r\n */\r\nDGTable.prototype.off = function (eventName, callback) {\r\n let events = this.p.events;\r\n\r\n if (!hasOwnProperty.call(events, eventName))\r\n return this;\r\n\r\n let callbacks = events[eventName];\r\n for (let i = 0; i < callbacks.length; i++) {\r\n let item = callbacks[i];\r\n if (callback && item.cb !== callback) continue;\r\n callbacks.splice(i--, 1);\r\n }\r\n\r\n return this;\r\n};\r\n\r\nDGTable.prototype.trigger = function (eventName) {\r\n let events = this.p.events;\r\n\r\n if (hasOwnProperty.call(events, eventName)) {\r\n let callbacks = events[eventName];\r\n for (let i = 0; i < callbacks.length; i++) {\r\n let item = callbacks[i];\r\n if (item.once) {\r\n callbacks.splice(i--, 1);\r\n }\r\n item.cb.apply(this, Array.prototype.slice.call(arguments, 1));\r\n }\r\n }\r\n\r\n return this;\r\n};\r\n\r\n/**\r\n * Detect column width mode\r\n * @private\r\n * @param {Number|String} width\r\n * @param {Number} minWidth\r\n * @returns {Object} parsed width\r\n */\r\nDGTable.prototype._parseColumnWidth = function (width, minWidth) {\r\n\r\n let widthSize = Math.max(0, parseFloat(width)),\r\n widthMode = ColumnWidthMode.AUTO; // Default\r\n\r\n if (widthSize > 0) {\r\n // Well, it's sure is not AUTO, as we have a value\r\n\r\n if (width === widthSize + '%') {\r\n // It's a percentage!\r\n\r\n widthMode = ColumnWidthMode.RELATIVE;\r\n widthSize /= 100;\r\n } else if (widthSize > 0 && widthSize < 1) {\r\n // It's a decimal value, as a relative value!\r\n\r\n widthMode = ColumnWidthMode.RELATIVE;\r\n } else {\r\n // It's an absolute size!\r\n\r\n if (widthSize < minWidth) {\r\n widthSize = minWidth;\r\n }\r\n widthMode = ColumnWidthMode.ABSOLUTE;\r\n }\r\n }\r\n\r\n return { width: widthSize, mode: widthMode };\r\n};\r\n\r\n/**\r\n * @private\r\n * @param {COLUMN_OPTIONS} columnData\r\n */\r\nDGTable.prototype._initColumnFromData = function(columnData) {\r\n\r\n let parsedWidth = this._parseColumnWidth(columnData.width, columnData.ignoreMin ? 0 : this.o.minColumnWidth);\r\n\r\n let col = {\r\n name: columnData.name,\r\n label: columnData.label === undefined ? columnData.name : columnData.label,\r\n width: parsedWidth.width,\r\n widthMode: parsedWidth.mode,\r\n resizable: columnData.resizable === undefined ? true : columnData.resizable,\r\n sortable: columnData.sortable === undefined ? true : columnData.sortable,\r\n movable: columnData.movable === undefined ? true : columnData.movable,\r\n visible: columnData.visible === undefined ? true : columnData.visible,\r\n cellClasses: columnData.cellClasses === undefined ? this.o.cellClasses : columnData.cellClasses,\r\n ignoreMin: columnData.ignoreMin === undefined ? false : !!columnData.ignoreMin,\r\n };\r\n\r\n col.dataPath = columnData.dataPath === undefined ? col.name : columnData.dataPath;\r\n col.comparePath = columnData.comparePath === undefined ? col.dataPath : columnData.comparePath;\r\n\r\n if (typeof col.dataPath === 'string') {\r\n col.dataPath = col.dataPath.split('.');\r\n }\r\n if (typeof col.comparePath === 'string') {\r\n col.comparePath = col.comparePath.split('.');\r\n }\r\n\r\n return col;\r\n};\r\n\r\n/**\r\n * Destroy, releasing all memory, events and DOM elements\r\n * @public\r\n * @expose\r\n */\r\nDGTable.prototype.close = DGTable.prototype.remove = DGTable.prototype.destroy = function () {\r\n\r\n let that = this,\r\n p = that.p || {},\r\n $el = that.$el;\r\n\r\n if (that.__removed) {\r\n return that;\r\n }\r\n\r\n if (p.$resizer) {\r\n p.$resizer.remove();\r\n p.$resizer = null;\r\n }\r\n\r\n if (p.$tbody) {\r\n let trs = p.$tbody[0].childNodes;\r\n for (let i = 0, len = trs.length; i < len; i++) {\r\n that.trigger('rowdestroy', trs[i]);\r\n }\r\n }\r\n\r\n // Using quotes for __super__ because Google Closure Compiler has a bug...\r\n\r\n this._destroyHeaderCells()._unbindCellEventsForTable();\r\n if (p.$table) {\r\n p.$table.empty();\r\n }\r\n if (p.$tbody) {\r\n p.$tbody.empty();\r\n }\r\n\r\n if (p.workerListeners) {\r\n for (let j = 0; j < p.workerListeners.length; j++) {\r\n let worker = p.workerListeners[j];\r\n worker.worker.removeEventListener('message', worker.listener, false);\r\n }\r\n p.workerListeners.length = 0;\r\n }\r\n\r\n p.rows.length = p.columns.length = 0;\r\n\r\n if (p._deferredRender) {\r\n clearTimeout(p._deferredRender);\r\n }\r\n\r\n // Cleanup\r\n for (let prop in that) {\r\n if (hasOwnProperty.call(that, prop)) {\r\n that[prop] = null;\r\n }\r\n }\r\n\r\n that.__removed = true;\r\n\r\n if ($el) {\r\n $el.remove();\r\n }\r\n\r\n return this;\r\n};\r\n\r\n/**\r\n * @private\r\n * @returns {DGTable} self\r\n */\r\nDGTable.prototype._unbindCellEventsForTable = function() {\r\n const p = this.p;\r\n\r\n if (p.headerRow) {\r\n for (let i = 0, rows = p.headerRow.childNodes, rowCount = rows.length; i < rowCount; i++) {\r\n let rowToClean = rows[i];\r\n for (let j = 0, cells = rowToClean.childNodes, cellCount = cells.length; j < cellCount; j++) {\r\n p._unbindCellHoverIn(cells[j]);\r\n }\r\n }\r\n }\r\n\r\n if (p.tbody) {\r\n for (let i = 0, rows = p.tbody.childNodes, rowCount = rows.length; i < rowCount; i++) {\r\n this._unbindCellEventsForRow(rows[i]);\r\n }\r\n }\r\n\r\n return this;\r\n};\r\n\r\n/**\r\n * @private\r\n * @param {HTMLElement} rowToClean\r\n * @returns {DGTable} self\r\n */\r\nDGTable.prototype._unbindCellEventsForRow = function(rowToClean) {\r\n const p = this.p;\r\n for (let i = 0, cells = rowToClean.childNodes, cellCount = cells.length; i < cellCount; i++) {\r\n p._unbindCellHoverIn(cells[i]);\r\n }\r\n return this;\r\n};\r\n\r\n/**\r\n * @public\r\n * @expose\r\n * @returns {DGTable} self\r\n */\r\nDGTable.prototype.render = function () {\r\n const o = this.o, p = this.p;\r\n\r\n if (!this.el.offsetParent) {\r\n if (!p._deferredRender) {\r\n p._deferredRender = setTimeout(() => {\r\n p._deferredRender = null;\r\n if (!this.__removed && this.el.offsetParent) {\r\n this.render();\r\n }\r\n });\r\n }\r\n\r\n return this;\r\n }\r\n\r\n let renderedRows, rowCount;\r\n\r\n if (p.tableSkeletonNeedsRendering === true) {\r\n p.tableSkeletonNeedsRendering = false;\r\n\r\n if (o.width === DGTable.Width.AUTO) {\r\n // We need to do this to return to the specified widths instead. The arrows added to the column widths...\r\n this._clearSortArrows();\r\n }\r\n\r\n let lastScrollTop = p.table && p.table.parentNode ? p.table.scrollTop : NaN,\r\n lastScrollHorz = p.table && p.table.parentNode ? getScrollHorz(p.table) : NaN;\r\n\r\n this._renderSkeletonBase()\r\n ._renderSkeletonBody()\r\n .tableWidthChanged(true, false) // Take this chance to calculate required column widths\r\n ._renderSkeletonHeaderCells();\r\n\r\n if (!o.virtualTable) {\r\n let rows = p.filteredRows || p.rows;\r\n rowCount = rows.length;\r\n renderedRows = this.renderRows(0, rowCount - 1);\r\n p.$tbody.html('').append(renderedRows);\r\n }\r\n\r\n this._updateLastCellWidthFromScrollbar(true);\r\n\r\n this._updateTableWidth(true);\r\n\r\n // Show sort arrows\r\n for (let i = 0; i < p.rows.sortColumn.length; i++) {\r\n this._showSortArrow(p.rows.sortColumn[i].column, p.rows.sortColumn[i].descending);\r\n }\r\n if (o.adjustColumnWidthForSortArrow && p.rows.sortColumn.length) {\r\n this.tableWidthChanged(true);\r\n } else if (!o.virtualTable) {\r\n this.tableWidthChanged();\r\n }\r\n\r\n if (!isNaN(lastScrollTop))\r\n p.table.scrollTop = lastScrollTop;\r\n\r\n if (!isNaN(lastScrollHorz)) {\r\n setScrollHorz(p.table, lastScrollHorz);\r\n setScrollHorz(p.header, lastScrollHorz);\r\n }\r\n\r\n this.trigger('renderskeleton');\r\n\r\n if (o.virtualTable) {\r\n p.$table.on('scroll', this._onVirtualTableScrolled.bind(this));\r\n this.render();\r\n }\r\n\r\n } else if (o.virtualTable) {\r\n rowCount = (p.filteredRows || p.rows).length;\r\n let scrollTop = p.table.scrollTop;\r\n let firstVisible = Math.floor((scrollTop - p.virtualRowHeightFirst) / p.virtualRowHeight) + 1 - o.rowsBufferSize;\r\n let lastVisible = Math.ceil(((scrollTop - p.virtualRowHeightFirst + p.visibleHeight) / p.virtualRowHeight)) + o.rowsBufferSize;\r\n if (firstVisible < 0) firstVisible = 0;\r\n if (lastVisible >= rowCount) {\r\n lastVisible = rowCount - 1;\r\n }\r\n\r\n let oldFirstVisible = -1, oldLastVisible = -1;\r\n let tbodyChildNodes = p.tbody.childNodes;\r\n if (tbodyChildNodes.length) {\r\n oldFirstVisible = tbodyChildNodes[0]['rowIndex'];\r\n oldLastVisible = tbodyChildNodes[tbodyChildNodes.length - 1]['rowIndex'];\r\n }\r\n\r\n let countToRemove;\r\n\r\n if (oldFirstVisible !== -1 && oldFirstVisible < firstVisible) {\r\n countToRemove = Math.min(oldLastVisible + 1, firstVisible) - oldFirstVisible;\r\n for (let i = 0; i < countToRemove; i++) {\r\n this.trigger('rowdestroy', tbodyChildNodes[0]);\r\n this._unbindCellEventsForRow(tbodyChildNodes[0]);\r\n p.tbody.removeChild(tbodyChildNodes[0]);\r\n }\r\n oldFirstVisible += countToRemove;\r\n if (oldFirstVisible > oldLastVisible) {\r\n oldFirstVisible = oldLastVisible = -1;\r\n }\r\n } else if (oldLastVisible !== -1 && oldLastVisible > lastVisible) {\r\n countToRemove = oldLastVisible - Math.max(oldFirstVisible - 1, lastVisible);\r\n for (let i = 0; i < countToRemove; i++) {\r\n this.trigger('rowdestroy', tbodyChildNodes[tbodyChildNodes.length - 1]);\r\n this._unbindCellEventsForRow(tbodyChildNodes[tbodyChildNodes.length - 1]);\r\n p.tbody.removeChild(tbodyChildNodes[tbodyChildNodes.length - 1]);\r\n }\r\n if (oldLastVisible < oldFirstVisible) {\r\n oldFirstVisible = oldLastVisible = -1;\r\n }\r\n }\r\n\r\n if (firstVisible < oldFirstVisible) {\r\n renderedRows = this.renderRows(firstVisible, Math.min(lastVisible, oldFirstVisible - 1));\r\n p.$tbody.prepend(renderedRows);\r\n }\r\n if (lastVisible > oldLastVisible || oldLastVisible === -1) {\r\n renderedRows = this.renderRows(oldLastVisible === -1 ? firstVisible : oldLastVisible + 1, lastVisible);\r\n p.$tbody.append(renderedRows);\r\n }\r\n }\r\n this.trigger('render');\r\n return this;\r\n};\r\n\r\n/**\r\n * Forces a full render of the table\r\n * @public\r\n * @expose\r\n * @param {Boolean=true} render - Should render now?\r\n * @returns {DGTable} self\r\n */\r\nDGTable.prototype.clearAndRender = function (render) {\r\n let p = this.p;\r\n\r\n p.tableSkeletonNeedsRendering = true;\r\n\r\n if (render === undefined || render) {\r\n this.render();\r\n }\r\n\r\n return this;\r\n};\r\n\r\n/**\r\n * Render rows\r\n * @private\r\n * @param {Number} first first row to render\r\n * @param {Number} last last row to render\r\n * @returns {DocumentFragment} fragment containing all rendered rows\r\n */\r\nDGTable.prototype.renderRows = function (first, last) {\r\n const o = this.o, p = this.p;\r\n\r\n let tableClassName = o.tableClassName,\r\n rowClassName = tableClassName + '-row',\r\n altRowClassName = tableClassName + '-row-alt',\r\n cellClassName = tableClassName + '-cell',\r\n rows = p.filteredRows || p.rows,\r\n isDataFiltered = !!p.filteredRows,\r\n allowCellPreview = o.allowCellPreview,\r\n visibleColumns = p.visibleColumns,\r\n isVirtual = o.virtualTable,\r\n virtualRowHeightFirst = p.virtualRowHeightFirst,\r\n virtualRowHeight = p.virtualRowHeight,\r\n top;\r\n\r\n let colCount = visibleColumns.length;\r\n for (let colIndex = 0, column; colIndex < colCount; colIndex++) {\r\n column = visibleColumns[colIndex];\r\n column._finalWidth = (column.actualWidthConsideringScrollbarWidth || column.actualWidth);\r\n }\r\n\r\n let bodyFragment = document.createDocumentFragment();\r\n\r\n let isRtl = this._isTableRtl(),\r\n virtualRowXAttr = isRtl ? 'right' : 'left';\r\n\r\n const supportedTransform = CssUtil.getSupportedTransform();\r\n\r\n for (let i = first, rowCount = rows.length;\r\n i < rowCount && i <= last;\r\n i++) {\r\n\r\n let rowData = rows[i];\r\n let physicalRowIndex = isDataFiltered ? rowData['__i'] : i;\r\n\r\n let row = createElement('div');\r\n row.className = rowClassName;\r\n if (i % 2 === 1)\r\n row.className += ' ' + altRowClassName;\r\n\r\n row['rowIndex'] = i;\r\n row['physicalRowIndex'] = physicalRowIndex;\r\n\r\n for (let colIndex = 0; colIndex < colCount; colIndex++) {\r\n let column = visibleColumns[colIndex];\r\n let cell = createElement('div');\r\n cell['columnName'] = column.name;\r\n cell.setAttribute('data-column', column.name);\r\n cell.className = cellClassName;\r\n cell.style.width = column._finalWidth + 'px';\r\n if (column.cellClasses) cell.className += ' ' + column.cellClasses;\r\n if (allowCellPreview) {\r\n p._bindCellHoverIn(cell);\r\n }\r\n\r\n let cellInner = cell.appendChild(createElement('div'));\r\n cellInner.innerHTML = this._getHtmlForCell(rowData, column);\r\n\r\n row.appendChild(cell);\r\n }\r\n\r\n if (isVirtual) {\r\n top = i > 0 ? virtualRowHeightFirst + (i - 1) * virtualRowHeight : 0;\r\n row.style.position = 'absolute';\r\n row.style[virtualRowXAttr] = 0;\r\n\r\n if (supportedTransform === false) {\r\n row.style.top = `${top}px`;\r\n } else {\r\n row.style.top = '0px';\r\n row.style[supportedTransform] = `translateY(${top}px)`;\r\n }\r\n }\r\n\r\n bodyFragment.appendChild(row);\r\n\r\n this.trigger('rowcreate', i, physicalRowIndex, row, rowData);\r\n\r\n let rowIndex = i;\r\n row.addEventListener('click', event => {\r\n this.trigger('rowclick', event, rowIndex, physicalRowIndex, row, rowData);\r\n });\r\n }\r\n\r\n return bodyFragment;\r\n};\r\n\r\n/**\r\n * Calculate virtual table height for scrollbar\r\n * @private\r\n * @returns {DGTable} self\r\n */\r\nDGTable.prototype._calculateVirtualHeight = function () {\r\n let p = this.p;\r\n\r\n if (p.tbody) {\r\n let rowCount = (p.filteredRows || p.rows).length;\r\n let height = p.virtualRowHeight * rowCount;\r\n if (rowCount) {\r\n height += (p.virtualRowHeightFirst - p.virtualRowHeight);\r\n height += (p.virtualRowHeightLast - p.virtualRowHeight);\r\n }\r\n // At least 1 pixel - to show scrollers correctly.\r\n if (height < 1) {\r\n height = 1;\r\n }\r\n p.tbody.style.height = height + 'px';\r\n }\r\n return this;\r\n};\r\n\r\n/**\r\n * Calculate the size required for the table body width (which is the row's width)\r\n * @private\r\n * @returns {Number} calculated width\r\n */\r\nDGTable.prototype._calculateTbodyWidth = function () {\r\n const p = this.p;\r\n\r\n let tableClassName = this.o.tableClassName,\r\n rowClassName = tableClassName + '-row',\r\n cellClassName = tableClassName + '-cell',\r\n visibleColumns = p.visibleColumns,\r\n colCount = visibleColumns.length,\r\n cell,\r\n cellInner,\r\n colIndex,\r\n column;\r\n\r\n let $row = $('<div>').addClass(rowClassName).css('float', 'left');\r\n let sumActualWidth = 0;\r\n\r\n for (colIndex = 0; colIndex < colCount; colIndex++) {\r\n column = visibleColumns[colIndex];\r\n cell = createElement('div');\r\n cell.className = cellClassName;\r\n cell.style.width = column.actualWidth + 'px';\r\n if (column.cellClasses) cell.className += ' ' + column.cellClasses;\r\n cellInner = cell.appendChild(createElement('div'));\r\n $row.append(cell);\r\n sumActualWidth += column.actualWidth;\r\n }\r\n\r\n let $thisWrapper = $('<div>')\r\n .addClass(this.el.className)\r\n .css({ 'z-index': -1, 'position': 'absolute', left: '0', top: '-9999px', 'float': 'left', width: '1px', overflow: 'hidden' })\r\n .append(\r\n $('<div>').addClass(tableClassName).append(\r\n $('<div>').addClass(tableClassName + '-body').css('width', sumActualWidth + 10000).append(\r\n $row,\r\n ),\r\n ),\r\n );\r\n\r\n $thisWrapper.appendTo(document.body);\r\n\r\n let fractionTest = $('<div style=\"border:1.5px solid #000;width:0;height:0;position:absolute;left:0;top:-9999px\">').appendTo(document.body);\r\n let fractionValue = parseFloat(fractionTest.css('border-width'));\r\n let hasFractions = Math.round(fractionValue) !== fractionValue;\r\n fractionTest.remove();\r\n\r\n let width = getElementWidth($row[0], true, true, true);\r\n width -= p.scrollbarWidth || 0;\r\n\r\n if (hasFractions) {\r\n width++;\r\n }\r\n\r\n $thisWrapper.remove();\r\n return width;\r\n};\r\n\r\n/**\r\n * Sets the columns of the table\r\n * @public\r\n * @expose\r\n * @param {COLUMN_OPTIONS[]} columns - Column definitions array\r\n * @param {Boolean=true} render - Should render now?\r\n * @returns {DGTable} self\r\n */\r\nDGTable.prototype.setColumns = function (columns, render) {\r\n const p = this.p;\r\n\r\n columns = columns || [];\r\n\r\n let normalizedCols = new ColumnCollection();\r\n for (let i = 0, order = 0; i < columns.length; i++) {\r\n\r\n let columnData = columns[i];\r\n let normalizedColumn = this._initColumnFromData(columnData);\r\n\r\n if (columnData.order !== undefined) {\r\n if (columnData.order > order) {\r\n order = columnData.order + 1;\r\n }\r\n normalizedColumn.order = columnData.order;\r\n } else {\r\n normalizedColumn.order = order++;\r\n }\r\n\r\n normalizedCols.push(normalizedColumn);\r\n }\r\n normalizedCols.normalizeOrder();\r\n\r\n p.columns = normalizedCols;\r\n p.visibleColumns = normalizedCols.getVisibleColumns();\r\n\r\n this._ensureVisibleColumns().clearAndRender(render);\r\n\r\n return this;\r\n};\r\n\r\n/**\r\n * Add a column to the table\r\n * @public\r\n * @expose\r\n * @param {COLUMN_OPTIONS} columnData column properties\r\n * @param {String|Number} [before=-1] column name or order to be inserted before\r\n * @param {Boolean=true} render - Should render now?\r\n * @returns {DGTable} self\r\n */\r\nDGTable.prototype.addColumn = function (columnData, before, render) {\r\n const p = this.p;\r\n let columns = p.columns;\r\n\r\n if (columnData && !columns.get(columnData.name)) {\r\n let beforeColumn = null;\r\n if (before !== undefined) {\r\n beforeColumn = columns.get(before) || columns.getByOrder(before);\r\n }\r\n\r\n let column = this._initColumnFromData(columnData);\r\n column.order = beforeColumn ? beforeColumn.order : (columns.getMaxOrder() + 1);\r\n\r\n for (let i = columns.getMaxOrder(), to = column.order; i >= to ; i--) {\r\n let col = columns.getByOrder(i);\r\n if (col) {\r\n col.order++;\r\n }\r\n }\r\n\r\n columns.push(column);\r\n columns.normalizeOrder();\r\n\r\n p.visibleColumns = columns.getVisibleColumns();\r\n this._ensureVisibleColumns().clearAndRender(render);\r\n\r\n this.trigger('addcolumn', column.name);\r\n }\r\n return this;\r\n};\r\n\r\n/**\r\n * Remove a column from the table\r\n * @public\r\n * @expose\r\n * @param {String} column column name\r\n * @param {Boolean=true} render - Should render now?\r\n * @returns {DGTable} self\r\n */\r\nDGTable.prototype.removeColumn = function (column, render) {\r\n const p = this.p;\r\n let columns = p.columns;\r\n\r\n let colIdx = columns.indexOf(column);\r\n if (colIdx > -1) {\r\n columns.splice(colIdx, 1);\r\n columns.normalizeOrder();\r\n\r\n p.visibleColumns = columns.getVisibleColumns();\r\n this._ensureVisibleColumns().clearAndRender(render);\r\n\r\n this.trigger('removecolumn', column);\r\n }\r\n return this;\r\n};\r\n\r\n/**\r\n * Sets a new cell formatter.\r\n * @public\r\n * @expose\r\n * @param {function(value: *, columnName: String, row: Object):String|null} [formatter=null] - The cell formatter. Should return an HTML.\r\n * @returns {DGTable} self\r\n */\r\nDGTable.prototype.setCellFormatter = function (formatter) {\r\n if (!formatter) {\r\n formatter = val => (typeof val === 'string') ? htmlEncode(val) : val;\r\n formatter[IsSafeSymbol] = true;\r\n }\r\n\r\n /**\r\n * @private\r\n * @field {Function} cellFormatter */\r\n this.o.cellFormatter = formatter;\r\n\r\n return this;\r\n};\r\n\r\n/**\r\n * Sets a new header cell formatter.\r\n * @public\r\n * @expose\r\n * @param {function(label: String, columnName: String):String|null} [formatter=null] - The cell formatter. Should return an HTML.\r\n * @returns {DGTable} self\r\n */\r\nDGTable.prototype.setHeaderCellFormatter = function (formatter) {\r\n /**\r\n * @private\r\n * @field {Function} headerCellFormatter */\r\n this.o.headerCellFormatter = formatter || function (val) {\r\n return (typeof val === 'string') ? htmlEncode(val) : val;\r\n };\r\n\r\n return this;\r\n};\r\n\r\n/**\r\n * @public\r\n * @expose\r\n * @param {function(row:Object,args:Object):Boolean|null} [filterFunc=null] - The filter function to work with filters. Default is a by-colum filter.\r\n * @returns {DGTable} self\r\n */\r\nDGTable.prototype.setFilter = function (filterFunc) {\r\n /** @private\r\n * @field {Function} filter */\r\n this.o.filter = filterFunc;\r\n return this;\r\n};\r\n\r\n/**\r\n * @public\r\n * @expose\r\n * @param {Object|null} args - Options to pass to the filter function\r\n * @returns {DGTable} self\r\n */\r\nDGTable.prototype.filter = function (args) {\r\n const p = this.p;\r\n\r\n let filterFunc = this.o.filter || ByColumnFilter;\r\n\r\n // Deprecated use of older by-column filter\r\n if (typeof arguments[0] === 'string' && typeof arguments[1] === 'string') {\r\n args = {\r\n column: arguments[0],\r\n keyword: arguments[1],\r\n caseSensitive: arguments[2],\r\n };\r\n }\r\n\r\n let hadFilter = !!p.filteredRows;\r\n if (p.filteredRows) {\r\n p.filteredRows = null; // Allow releasing array memory now\r\n }\r\n\r\n // Shallow-clone the args, as the filter function may want to modify it for keeping state\r\n p.filterArgs = args == null ? null : ((typeof args === 'object' && !Array.isArray(args)) ? $.extend({}, args) : args);\r\n\r\n if (p.filterArgs !== null) {\r\n p.filteredRows = p.rows.filteredCollection(filterFunc, p.filterArgs);\r\n\r\n if (hadFilter || p.filteredRows) {\r\n this.clearAndRender();\r\n this.trigger('filter', args);\r\n }\r\n }\r\n else {\r\n p.filterArgs = null;\r\n p.filteredRows = null;\r\n this.clearAndRender();\r\n this.trigger('filterclear', {});\r\n }\r\n\r\n return this;\r\n};\r\n\r\n/**\r\n * @public\r\n * @expose\r\n * @returns {DGTable} self\r\n */\r\nDGTable.prototype.clearFilter = function () {\r\n const p = this.p;\r\n\r\n if (p.filteredRows) {\r\n p.filterArgs = null;\r\n p.filteredRows = null;\r\n this.clearAndRender();\r\n this.trigger('filterclear', {});\r\n }\r\n\r\n return this;\r\n};\r\n\r\n/**\r\n * @private\r\n * @returns {DGTable} self\r\n */\r\nDGTable.prototype._refilter = function() {\r\n const p = this.p;\r\n\r\n if (p.filteredRows && p.filterArgs) {\r\n let filterFunc = this.o.filter || ByColumnFilter;\r\n p.filteredRows = p.rows.filteredCollection(filterFunc, p.filterArgs);\r\n }\r\n return this;\r\n};\r\n\r\n/**\r\n * Set a new label to a column\r\n * @public\r\n * @expose\r\n * @param {String} column Name of the column\r\n * @param {String} label New label for the column\r\n * @returns {DGTable} self\r\n */\r\nDGTable.prototype.setColumnLabel = function (column, label) {\r\n const p = this.p;\r\n\r\n let col = p.columns.get(column);\r\n if (col) {\r\n col.label = label === undefined ? col.name : label;\r\n\r\n if (col.element) {\r\n for (let i = 0; i < col.element[0].firstChild.childNodes.length; i++) {\r\n let node = col.element[0].firstChild.childNodes[i];\r\n if (node.nodeType === 3) {\r\n node.textContent = col.label;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n return this;\r\n};\r\n\r\n/**\r\n * Move a column to a new position\r\n * @public\r\n * @expose\r\n * @param {string|number} src Name or position of the column to be moved\r\n * @param {string|number} dest Name of the column currently in the desired position, or the position itself\r\n * @param {boolean} [visibleOnly=true] Should consider only visible columns and visible-relative indexes\r\n * @returns {DGTable} self\r\n */\r\nDGTable.prototype.moveColumn = function (src, dest, visibleOnly = true) {\r\n const o = this.o, p = this.p;\r\n\r\n let columns = p.columns,\r\n col, destCol;\r\n\r\n let columnsArray = visibleOnly ? p.visibleColumns : columns.getColumns();\r\n\r\n if (typeof src === 'string') {\r\n col = columns.get(src);\r\n } else if (typeof src === 'number') {\r\n col = columnsArray[src];\r\n }\r\n if (typeof dest === 'string') {\r\n destCol = columns.get(dest);\r\n } else if (typeof dest === 'number') {\r\n destCol = columnsArray[dest];\r\n }\r\n\r\n if (col && destCol && src !== dest) {\r\n let srcOrder = col.order, destOrder = destCol.order;\r\n\r\n let visibleColumns = columns.moveColumn(col, destCol).getVisibleColumns();\r\n\r\n if (p.visibleColumns.length !== visibleColumns.length ||\r\n p.visibleColumns.some((x, i) => x !== visibleColumns[i])) {\r\n\r\n p.visibleColumns = visibleColumns;\r\n this._ensureVisibleColumns();\r\n\r\n if (o.virtualTable) {\r\n this.clearAndRender()\r\n ._updateLastCellWidthFromScrollbar(true);\r\n } else {\r\n let headerCell = p.$headerRow.find('>div.' + o.tableClassName + '-header-cell');\r\n let beforePos = srcOrder < destOrder ? destOrder + 1 : destOrder,\r\n fromPos = srcOrder;\r\n headerCell[0].parentNode.insertBefore(headerCell[fromPos], headerCell[beforePos]);\r\n\r\n let srcWidth = p.visibleColumns[srcOrder];\r\n srcWidth = (srcWidth.actualWidthConsideringScrollbarWidth || srcWidth.actualWidth) + 'px';\r\n let destWidth = p.visibleColumns[destOrder];\r\n destWidth = (destWidth.actualWidthConsideringScrollbarWidth || destWidth.actualWidth) + 'px';\r\n\r\n let tbodyChildren = p.$tbody[0].childNodes;\r\n for (let i = 0, count = tbodyChildren.length; i < count; i++) {\r\n let row = tbodyChildren[i];\r\n if (row.nodeType !== 1) continue;\r\n row.insertBefore(row.childNodes[fromPos], row.childNodes[beforePos]);\r\n row.childNodes[destOrder].firstChild.style.width = destWidth;\r\n row.childNodes[srcOrder].firstChild.style.width = srcWidth;\r\n }\r\n }\r\n }\r\n\r\n this.trigger('movecolumn', col.name, srcOrder, destOrder);\r\n }\r\n return this;\r\n};\r\n\r\n/**\r\n * Sort the table\r\n * @public\r\n * @expose\r\n * @param {String?} column Name of the column to sort on (or null to remove sort arrow)\r\n * @param {Boolean=} descending Sort in descending order\r\n * @param {Boolean} [add=false] Should this sort be on top of the existing sort? (For multiple column sort)\r\n * @returns {DGTable} self\r\n */\r\nDGTable.prototype.sort = function (column, descending, add) {\r\n const o = this.o, p = this.p;\r\n\r\n let columns = p.columns,\r\n col = columns.get(column);\r\n\r\n let currentSort = p.rows.sortColumn;\r\n\r\n if (col) {\r\n\r\n if (currentSort.length && currentSort[currentSort.length - 1].column === column) {\r\n // Recognize current descending mode, if currently sorting by this column\r\n descending = descending === undefined ? !currentSort[currentSort.length - 1].descending : descending;\r\n }\r\n\r\n if (add) { // Add the sort to current sort stack\r\n\r\n for (let i = 0; i < currentSort.length; i++) {\r\n if (currentSort[i].column === col.name) {\r\n if (i < currentSort.length - 1) {\r\n currentSort.length = 0;\r\n } else {\r\n currentSort.splice(currentSort.length - 1, 1);\r\n }\r\n break;\r\n }\r\n }\r\n if ((o.sortableColumns > 0 /* allow manual sort when disabled */ && currentSort.length >= o.sortableColumns) || currentSort.length >= p.visibleColumns.length) {\r\n currentSort.length = 0;\r\n }\r\n\r\n } else { // Sort only by this column\r\n currentSort.length = 0;\r\n }\r\n\r\n // Default to ascending\r\n descending = descending === undefined ? false : descending;\r\n\r\n // Set the required column in the front of the stack\r\n currentSort.push({\r\n column: col.name,\r\n comparePath: col.comparePath || col.dataPath,\r\n descending: !!descending,\r\n });\r\n } else {\r\n currentSort.length = 0;\r\n }\r\n\r\n this._clearSortArrows();\r\n\r\n for (let i = 0; i < currentSort.length; i++) {\r\n this._showSortArrow(currentSort[i].column, currentSort[i].descending);\r\n }\r\n\r\n if (o.adjustColumnWidthForSortArrow && !o._tableSkeletonNeedsRendering) {\r\n this.tableWidthChanged(true);\r\n }\r\n\r\n if (o.virtualTable) {\r\n while (p.tbody && p.tbody.firstChild) {\r\n this.trigger('rowdestroy', p.tbody.firstChild);\r\n this._unbindCellEventsForRow(p.tbody.firstChild);\r\n p.tbody.removeChild(p.tbody.firstChild);\r\n }\r\n } else {\r\n p.tableSkeletonNeedsRendering = true;\r\n }\r\n\r\n p.rows.sortColumn = currentSort;\r\n\r\n let comparator;\r\n if (currentSort.length) {\r\n comparator = p.rows.sort(!!p.filteredRows);\r\n if (p.filteredRows) {\r\n p.filteredRows.sort(!!p.filteredRows);\r\n }\r\n }\r\n\r\n // Build output for event, with option names that will survive compilers\r\n let sorts = [];\r\n for (let i = 0; i < currentSort.length; i++) {\r\n sorts.push({ 'column': currentSort[i].column, 'descending': currentSort[i].descending });\r\n }\r\n this.trigger('sort', sorts, true /* direct sort */, comparator);\r\n\r\n return this;\r\n};\r\n\r\n/**\r\n * Re-sort the table using current sort specifiers\r\n * @public\r\n * @expose\r\n * @returns {DGTable} self\r\n */\r\nDGTable.prototype.resort = function () {\r\n const p = this.p;\r\n let columns = p.columns;\r\n\r\n let currentSort = p.rows.sortColumn;\r\n if (currentSort.length) {\r\n\r\n for (let i = 0; i < currentSort.length; i++) {\r\n if (!columns.get(currentSort[i].column)) {\r\n currentSort.splice(i--, 1);\r\n }\r\n }\r\n\r\n let comparator;\r\n p.rows.sortColumn = currentSort;\r\n if (currentSort.length) {\r\n comparator = p.rows.sort(!!p.filteredRows);\r\n if (p.filteredRows) {\r\n p.filteredRows.sort(!!p.filteredRows);\r\n }\r\n }\r\n\r\n // Build output for event, with option names that will survive compilers\r\n let sorts = [];\r\n for (let i = 0; i < currentSort.length; i++) {\r\n sorts.push({ 'column': currentSort[i].column, 'descending': currentSort[i].descending });\r\n }\r\n this.trigger('sort', sorts, false /* indirect sort */, comparator);\r\n }\r\n\r\n return this;\r\n};\r\n\r\n/**\r\n * Make sure there's at least one column visible\r\n * @private\r\n * @expose\r\n * @returns {DGTable} self\r\n */\r\nDGTable.prototype._ensureVisibleColumns = function () {\r\n const p = this.p;\r\n\r\n if (p.visibleColumns.length === 0 && p.columns.length) {\r\n p.columns[0].visible = true;\r\n p.visibleColumns.push(p.columns[0]);\r\n this.trigger('showcolumn', p.columns[0].name);\r\n }\r\n return this;\r\n};\r\n\r\n/**\r\n * Show or hide a column\r\n * @public\r\n * @expose\r\n * @param {String} column Unique column name\r\n * @param {Boolean} visible New visibility mode for the column\r\n * @returns {DGTable} self\r\n */\r\nDGTable.prototype.setColumnVisible = function (column, visible) {\r\n const p = this.p;\r\n\r\n let col = p.columns.get(column);\r\n\r\n //noinspection PointlessBooleanExpressionJS\r\n visible = !!visible;\r\n\r\n if (col && !!col.visible !== visible) {\r\n col.visible = visible;\r\n p.visibleColumns = p.columns.getVisibleColumns();\r\n this.trigger(visible ? 'showcolumn' : 'hidecolumn', column);\r\n this._ensureVisibleColumns();\r\n this.clearAndRender();\r\n }\r\n return this;\r\n};\r\n\r\n/**\r\n * Get the visibility mode of a column\r\n * @public\r\n * @expose\r\n * @returns {Boolean} true if visible\r\n */\r\nDGTable.prototype.isColumnVisible = function (column) {\r\n const p = this.p;\r\n let col = p.columns.get(column);\r\n if (col) {\r\n return col.visible;\r\n }\r\n return false;\r\n};\r\n\r\n/**\r\n * Globally set the minimum column width\r\n * @public\r\n * @expose\r\n * @param {Number} minColumnWidth Minimum column width\r\n * @returns {DGTable} self\r\n */\r\nDGTable.prototype.setMinColumnWidth = function (minColumnWidth) {\r\n let o = this.o;\r\n minColumnWidth = Math.max(minColumnWidth, 0);\r\n if (o.minColumnWidth !== minColumnWidth) {\r\n o.minColumnWidth = minColumnWidth;\r\n this.tableWidthChanged(true);\r\n }\r\n return this;\r\n};\r\n\r\n/**\r\n * Get the current minimum column width\r\n * @public\r\n * @expose\r\n * @returns {Number} Minimum column width\r\n */\r\nDGTable.prototype.getMinColumnWidth = function () {\r\n return this.o.minColumnWidth;\r\n};\r\n\r\n/**\r\n * Set the limit on concurrent columns sorted\r\n * @public\r\n * @expose\r\n * @param {Number} sortableColumns How many sortable columns to allow?\r\n * @returns {DGTable} self\r\n */\r\nDGTable.prototype.setSortableColumns = function (sortableColumns) {\r\n const p = this.p, o = this.o;\r\n if (o.sortableColumns !== sortableColumns) {\r\n o.sortableColumns = sortableColumns;\r\n if (p.$table) {\r\n let headerCell = p.$headerRow.find('>div.' + o.tableClassName + '-header-cell');\r\n for (let i = 0; i < headerCell.length; i++) {\r\n $(headerCell[0])[(o.sortableColumns > 0 && p.visibleColumns[i].sortable) ? 'addClass' : 'removeClass']('sortable');\r\n }\r\n }\r\n }\r\n return this;\r\n};\r\n\r\n/**\r\n * Get the limit on concurrent columns sorted\r\n * @public\r\n * @expose\r\n * @returns {Number} How many sortable columns are allowed?\r\n */\r\nDGTable.prototype.getSortableColumns = function () {\r\n return this.o.sortableColumns;\r\n};\r\n\r\n/**\r\n * @public\r\n * @expose\r\n * @param {Boolean?} movableColumns=true are the columns movable?\r\n * @returns {DGTable} self\r\n */\r\nDGTable.prototype.setMovableColumns = function (movableColumns) {\r\n let o = this.o;\r\n //noinspection PointlessBooleanExpressionJS\r\n movableColumns = movableColumns === undefined ? true : !!movableColumns;\r\n if (o.movableColumns !== movableColumns) {\r\n o.movableColumns = movableColumns;\r\n }\r\n return this;\r\n};\r\n\r\n/**\r\n * @public\r\n * @expose\r\n * @returns {Boolean} are the columns movable?\r\n */\r\nDGTable.prototype.getMovableColumns = function () {\r\n return this.o.movableColumns;\r\n};\r\n\r\n/**\r\n * @public\r\n * @expose\r\n * @param {Boolean} resizableColumns=true are the columns resizable?\r\n * @returns {DGTable} self\r\n */\r\nDGTable.prototype.setResizableColumns = function (resizableColumns) {\r\n let o = this.o;\r\n //noinspection PointlessBooleanExpressionJS\r\n resizableColumns = resizableColumns === undefined ? true : !!resizableColumns;\r\n if (o.resizableColumns !== resizableColumns) {\r\n o.resizableColumns = resizableColumns;\r\n }\r\n return this;\r\n};\r\n\r\n/**\r\n * @public\r\n * @expose\r\n * @returns {Boolean} are the columns resizable?\r\n */\r\nDGTable.prototype.getResizableColumns = function () {\r\n return this.o.resizableColumns;\r\n};\r\n\r\n/**\r\n * @public\r\n * @expose\r\n * @param {{function(columnName: string, descending: boolean, defaultComparator: function(a,b):number):{function(a,b):number}}} comparatorCallback a callback function that returns the comparator for a specific column\r\n * @returns {DGTable} self\r\n */\r\nDGTable.prototype.setComparatorCallback = function (comparatorCallback) {\r\n let o = this.o;\r\n if (o.onComparatorRequired !== comparatorCallback) {\r\n o.onComparatorRequired = comparatorCallback;\r\n }\r\n return this;\r\n};\r\n\r\n/**\r\n * Set a new width to a column\r\n * @public\r\n * @expose\r\n * @param {String} column name of the column to resize\r\n * @param {Number|String} width new column as pixels, or relative size (0.5, 50%)\r\n * @returns {DGTable} self\r\n */\r\nDGTable.prototype.setColumnWidth = function (column, width) {\r\n\r\n const p = this.p;\r\n\r\n let col = p.columns.get(column);\r\n\r\n let parsedWidth = this._parseColumnWidth(width, col.ignoreMin ? 0 : this.o.minColumnWidth);\r\n\r\n if (col) {\r\n let oldWidth = this._serializeColumnWidth(col);\r\n\r\n col.width = parsedWidth.width;\r\n col.widthMode = parsedWidth.mode;\r\n\r\n let newWidth = this._serializeColumnWidth(col);\r\n\r\n if (oldWidth !== newWidth) {\r\n this.tableWidthChanged(true); // Calculate actual sizes\r\n }\r\n\r\n this.trigger('columnwidth', col.name, oldWidth, newWidth);\r\n }\r\n return this;\r\n};\r\n\r\n/**\r\n * @public\r\n * @expose\r\n * @param {String} column name of the column\r\n * @returns {String|null} the serialized width of the specified column, or null if column not found\r\n */\r\nDGTable.prototype.getColumnWidth = function (column) {\r\n const p = this.p;\r\n\r\n let col = p.columns.get(column);\r\n if (col) {\r\n return this._serializeColumnWidth(col);\r\n }\r\n return null;\r\n};\r\n\r\n/**\r\n * @public\r\n * @expose\r\n * @param {String} column name of the column\r\n * @returns {SERIALIZED_COLUMN|null} configuration for all columns\r\n */\r\nDGTable.prototype.getColumnConfig = function (column) {\r\n const p = this.p;\r\n let col = p.columns.get(column);\r\n if (col) {\r\n return {\r\n 'order': col.order,\r\n 'width': this._serializeColumnWidth(col),\r\n 'visible': col.visible,\r\n 'label': col.label,\r\n };\r\n }\r\n return null;\r\n};\r\n\r\n/**\r\n * Returns a config object for the columns, to allow saving configurations for next time...\r\n * @public\r\n * @expose\r\n * @returns {Object} configuration for all columns\r\n */\r\nDGTable.prototype.getColumnsConfig = function () {\r\n const p = this.p;\r\n\r\n let config = {};\r\n for (let i = 0; i < p.columns.length; i++) {\r\n config[p.columns[i].name] = this.getColumnConfig(p.columns[i].name);\r\n }\r\n return config;\r\n};\r\n\r\n/**\r\n * Returns an array of the currently sorted columns\r\n * @public\r\n * @expose\r\n * @returns {Array.<SERIALIZED_COLUMN_SORT>} configuration for all columns\r\n */\r\nDGTable.prototype.getSortedColumns = function () {\r\n const p = this.p;\r\n\r\n let sorted = [];\r\n for (let i = 0; i < p.rows.sortColumn.length; i++) {\r\n let sort = p.rows.sortColumn[i];\r\n sorted.push({ column: sort.column, descending: sort.descending });\r\n }\r\n return sorted;\r\n};\r\n\r\n/**\r\n * Returns the HTML string for a specific cell. Can be used externally for special cases (i.e. when setting a fresh HTML in the cell preview through the callback).\r\n * @public\r\n * @expose\r\n * @param {number} rowIndex - index of the row\r\n * @param {string} columnName - name of the column\r\n * @returns {string} HTML string for the specified cell\r\n */\r\nDGTable.prototype.getHtmlForRowCell = function (rowIndex, columnName) {\r\n const p = this.p;\r\n\r\n if (rowIndex < 0 || rowIndex > p.rows.length - 1) return null;\r\n let column = p.columns.get(columnName);\r\n if (!column) return null;\r\n let rowData = p.rows[rowIndex];\r\n\r\n return this._getHtmlForCell(rowData, column);\r\n};\r\n\r\n/**\r\n * Returns the HTML string for a specific cell. Can be used externally for special cases (i.e. when setting a fresh HTML in the cell preview through the callback).\r\n * @public\r\n * @expose\r\n * @param {Object} rowData - row data\r\n * @param {Object} columnName - column data\r\n * @returns {string|null} HTML string for the specified cell\r\n */\r\nDGTable.prototype.getHtmlForRowDataCell = function (rowData, columnName) {\r\n const p = this.p;\r\n\r\n let column = p.columns.get(columnName);\r\n if (!column) return null;\r\n\r\n return this._getHtmlForCell(rowData, column);\r\n};\r\n\r\n/**\r\n * Returns the HTML string for a specific cell. Can be used externally for special cases (i.e. when setting a fresh HTML in the cell preview through the callback).\r\n * @private\r\n * @expose\r\n * @param {Object} rowData - row data\r\n * @param {Object} column - column data\r\n * @returns {string} HTML string for the specified cell\r\n */\r\nDGTable.prototype._getHtmlForCell = function (rowData, column) {\r\n let dataPath = column.dataPath;\r\n let colValue = rowData[dataPath[0]];\r\n for (let dataPathIndex = 1; dataPathIndex < dataPath.length; dataPathIndex++) {\r\n if (colValue == null) break;\r\n colValue = colValue && colValue[dataPath[dataPathIndex]];\r\n }\r\n\r\n const formatter = this.o.cellFormatter;\r\n let content;\r\n\r\n if (formatter[IsSafeSymbol]) {\r\n content = formatter(colValue, column.name, rowData);\r\n } else {\r\n try {\r\n content = formatter(colValue, column.name, rowData);\r\n } catch (err) {\r\n content = '[ERROR]';\r\n // eslint-disable-next-line no-console\r\n console.error('Failed to generate content for cell ' + column.name, err);\r\n }\r\n }\r\n\r\n if (content === undefined || content === null) {\r\n content = '';\r\n }\r\n\r\n return content;\r\n};\r\n\r\n/**\r\n * Returns the y pos of a row by index\r\n * @public\r\n * @expose\r\n * @param {Number} rowIndex - index of the row\r\n * @returns {Number|null} Y pos\r\n */\r\nDGTable.prototype.getRowYPos = function (rowIndex) {\r\n const p = this.p;\r\n\r\n if (this.o.virtualTable) {\r\n return rowIndex > 0 ? p.virtualRowHeightFirst + (rowIndex - 1) * p.virtualRowHeight : 0;\r\n } else {\r\n let row = p.tbody.childNodes[rowIndex];\r\n return row ? row.offsetTop : null;\r\n }\r\n};\r\n\r\n/**\r\n * Returns the row data for a specific row\r\n * @public\r\n * @expose\r\n * @param {Number} row index of the row\r\n * @returns {Object} Row data\r\n */\r\nDGTable.prototype.getDataForRow = function (row) {\r\n const p = this.p;\r\n\r\n if (row < 0 || row > p.rows.length - 1) return null;\r\n return p.rows[row];\r\n};\r\n\r\n/**\r\n * Gets the number of rows\r\n * @public\r\n * @expose\r\n * @returns {Number} Row count\r\n */\r\nDGTable.prototype.getRowCount = function () {\r\n const p = this.p;\r\n return p.rows ? p.rows.length : 0;\r\n};\r\n\r\n/**\r\n * Returns the physical row index for specific row\r\n * @public\r\n * @expose\r\n * @param {Object} rowData - Row data to find\r\n * @returns {Number} Row index\r\n */\r\nDGTable.prototype.getIndexForRow = function (rowData) {\r\n const p = this.p;\r\n return p.rows.indexOf(rowData);\r\n};\r\n\r\n/**\r\n * Gets the number of filtered rows\r\n * @public\r\n * @expose\r\n * @returns {Number} Filtered row count\r\n */\r\nDGTable.prototype.getFilteredRowCount = function () {\r\n const p = this.p;\r\n return (p.filteredRows || p.rows).length;\r\n};\r\n\r\n/**\r\n * Returns the filtered row index for specific row\r\n * @public\r\n * @expose\r\n * @param {Object} rowData - Row data to find\r\n * @returns {Number} Row index\r\n */\r\nDGTable.prototype.getIndexForFilteredRow = function (rowData) {\r\n const p = this.p;\r\n return (p.filteredRows || p.rows).indexOf(rowData);\r\n};\r\n\r\n/**\r\n * Returns the row data for a specific row\r\n * @public\r\n * @expose\r\n * @param {Number} row index of the filtered row\r\n * @returns {Object} Row data\r\n */\r\nDGTable.prototype.getDataForFilteredRow = function (row) {\r\n const p = this.p;\r\n if (row < 0 || row > (p.filteredRows || p.rows).length - 1) return null;\r\n return (p.filteredRows || p.rows)[row];\r\n};\r\n\r\n/**\r\n * Returns DOM element of the header row\r\n * @public\r\n * @expose\r\n * @returns {Element} Row element\r\n */\r\nDGTable.prototype.getHeaderRowElement = function () {\r\n return this.p.headerRow;\r\n};\r\n\r\n/**\r\n * @private\r\n * @param {Element} el\r\n * @returns {Number} width\r\n */\r\nDGTable.prototype._horizontalPadding = function(el) {\r\n return ((parseFloat($.css(el, 'padding-left')) || 0) +\r\n (parseFloat($.css(el, 'padding-right')) || 0));\r\n};\r\n\r\n/**\r\n * @private\r\n * @param {Element} el\r\n * @returns {Number} width\r\n */\r\nDGTable.prototype._horizontalBorderWidth = function(el) {\r\n return ((parseFloat($.css(el, 'border-left')) || 0) +\r\n (parseFloat($.css(el, 'border-right')) || 0));\r\n};\r\n\r\n/**\r\n * @private\r\n * @returns {Number} width\r\n */\r\nDGTable.prototype._calculateWidthAvailableForColumns = function() {\r\n const o = this.o, p = this.p;\r\n\r\n // Changing display mode briefly, to prevent taking in account the parent's scrollbar width when we are the cause for it\r\n let oldDisplay, lastScrollTop, lastScrollLeft;\r\n if (p.$table) {\r\n lastScrollTop = p.table ? p.table.scrollTop : 0;\r\n lastScrollLeft = p.table ? p.table.scrollLeft : 0;\r\n\r\n if (o.virtualTable) {\r\n oldDisplay = p.$table[0].style.display;\r\n p.$table[0].style.display = 'none';\r\n }\r\n }\r\n\r\n let detectedWidth = getElementWidth(this.$el[0]);\r\n\r\n if (p.$table) {\r\n if (o.virtualTable) {\r\n p.$table[0].style.display = oldDisplay;\r\n }\r\n\r\n p.table.scrollTop = lastScrollTop;\r\n p.table.scrollLeft = lastScrollLeft;\r\n p.header.scrollLeft = lastScrollLeft;\r\n }\r\n\r\n let tableClassName = o.tableClassName;\r\n\r\n let $thisWrapper = $('<div>').addClass(this.el.className).css({ 'z-index': -1, 'position': 'absolute', left: '0', top: '-9999px' });\r\n let $header = $('<div>').addClass(tableClassName + '-header').appendTo($thisWrapper);\r\n let $headerRow = $('<div>').addClass(tableClassName + '-header-row').appendTo($header);\r\n for (let i = 0; i < p.visibleColumns.length; i++) {\r\n $headerRow.append($('<div><div></div></div>').addClass(tableClassName + '-header-cell').addClass(p.visibleColumns[i].cellClasses || ''));\r\n }\r\n $thisWrapper.appendTo(document.body);\r\n\r\n detectedWidth -= this._horizontalBorderWidth($headerRow[0]);\r\n\r\n let $cells = $headerRow.find('>div.' + tableClassName + '-header-cell');\r\n for (let i = 0; i < $cells.length; i++) {\r\n let $cell = $($cells[i]);\r\n\r\n let isBoxing = $cell.css('boxSizing') === 'border-box';\r\n if (!isBoxing) {\r\n detectedWidth -=\r\n (parseFloat($cell.css('border-right-width')) || 0) +\r\n (parseFloat($cell.css('border-left-width')) || 0) +\r\n (this._horizontalPadding($cell[0])); // CELL's padding\r\n }\r\n }\r\n\r\n if ($thisWrapper) {\r\n $thisWrapper.remove();\r\n }\r\n\r\n return Math.max(0, detectedWidth);\r\n};\r\n\r\n/**\r\n * Notify the table that its width has changed\r\n * @public\r\n * @expose\r\n * @returns {DGTable} self\r\n */\r\nDGTable.prototype.tableWidthChanged = (function () {\r\n\r\n let getTextWidth = function(text) {\r\n let tableClassName = this.o.tableClassName;\r\n\r\n let $cell, $tableWrapper = $('<div>').addClass(this.$el).append(\r\n $('<div>').addClass(tableClassName + '-header').append(\r\n $('<div>').addClass(tableClassName + '-header-row').append(\r\n $cell = $('<div>').addClass(tableClassName + '-header-cell').append(\r\n $('<div>').text(text),\r\n ),\r\n ),\r\n ),\r\n ).css({ 'position': 'absolute', top: '-9999px', 'visibility': 'hidden' });\r\n $tableWrapper.appendTo(document.body);\r\n\r\n let width = getElementWidth($cell[0]);\r\n\r\n $tableWrapper.remove();\r\n\r\n return width;\r\n };\r\n\r\n let lastDetectedWidth = null;\r\n\r\n /**\r\n * @public\r\n * @expose\r\n * @param {Boolean} [forceUpdate=false]\r\n * @param {Boolean} [renderColumns=true]\r\n * @returns {DGTable} self\r\n */\r\n return function(forceUpdate, renderColumns) {\r\n\r\n let that = this,\r\n o = that.o,\r\n p = that.p,\r\n detectedWidth = this._calculateWidthAvailableForColumns(),\r\n sizeLeft = detectedWidth,\r\n relatives = 0;\r\n\r\n if (!p.$table) return this;\r\n\r\n renderColumns = renderColumns === undefined || renderColumns;\r\n\r\n let tableWidthBeforeCalculations = 0;\r\n\r\n if (!p.tbody) {\r\n renderColumns = false;\r\n }\r\n\r\n if (renderColumns) {\r\n tableWidthBeforeCalculations = parseFloat(p.tbody.style.minWidth) || 0;\r\n }\r\n\r\n if (sizeLeft !== lastDetectedWidth || forceUpdate) {\r\n lastDetectedWidth = detectedWidth;\r\n\r\n let absWidthTotal = 0, changedColumnIndexes = [], totalRelativePercentage = 0;\r\n\r\n for (let i = 0; i < p.columns.length; i++) {\r\n p.columns[i].actualWidthConsideringScrollbarWidth = null;\r\n }\r\n\r\n for (let i = 0; i < p.visibleColumns.length; i++) {\r\n let col = p.visibleColumns[i];\r\n if (col.widthMode === ColumnWidthMode.ABSOLUTE) {\r\n let width = col.width;\r\n width += col.arrowProposedWidth || 0; // Sort-arrow width\r\n if (!col.ignoreMin && width < o.minColumnWidth) {\r\n width = o.minColumnWidth;\r\n }\r\n sizeLeft -= width;\r\n absWidthTotal += width;\r\n\r\n // Update actualWidth\r\n if (width !== col.actualWidth) {\r\n col.actualWidth = width;\r\n changedColumnIndexes.push(i);\r\n }\r\n } else if (col.widthMode === ColumnWidthMode.AUTO) {\r\n let width = getTextWidth.call(this, col.label) + 20;\r\n width += col.arrowProposedWidth || 0; // Sort-arrow width\r\n if (!col.ignoreMin && width < o.minColumnWidth) {\r\n width = o.minColumnWidth;\r\n }\r\n sizeLeft -= width;\r\n absWidthTotal += width;\r\n\r\n // Update actualWidth\r\n if (width !== col.actualWidth) {\r\n col.actualWidth = width;\r\n if (!o.convertColumnWidthsToRelative) {\r\n changedColumnIndexes.push(i);\r\n }\r\n }\r\n } else if (col.widthMode === ColumnWidthMode.RELATIVE) {\r\n totalRelativePercentage += col.width;\r\n relatives++;\r\n }\r\n }\r\n\r\n // Normalize relative sizes if needed\r\n if (o.convertColumnWidthsToRelative) {\r\n for (let i = 0; i < p.visibleColumns.length; i++) {\r\n let col = p.visibleColumns[i];\r\n if (col.widthMode === ColumnWidthMode.AUTO) {\r\n col.widthMode = ColumnWidthMode.RELATIVE;\r\n sizeLeft += col.actualWidth;\r\n col.width = col.actualWidth / absWidthTotal;\r\n totalRelativePercentage += col.width;\r\n relatives++;\r\n }\r\n }\r\n }\r\n\r\n // Normalize relative sizes if needed\r\n if (relatives && ((totalRelativePercentage < 1 && o.relativeWidthGrowsToFillWidth) ||\r\n (totalRelativePercentage > 1 && o.relativeWidthShrinksToFillWidth))) {\r\n for (let i = 0; i < p.visibleColumns.length; i++) {\r\n let col = p.visibleColumns[i];\r\n if (col.widthMode === ColumnWidthMode.RELATIVE) {\r\n col.width /= totalRelativePercentage;\r\n }\r\n }\r\n }\r\n\r\n let sizeLeftForRelative = Math.max(0, sizeLeft); // Use this as the space to take the relative widths out of\r\n if (sizeLeftForRelative === 0) {\r\n sizeLeftForRelative = p.table.clientWidth;\r\n }\r\n\r\n let minColumnWidthRelative = (o.minColumnWidth / sizeLeftForRelative);\r\n if (isNaN(minColumnWidthRelative)) {\r\n minColumnWidthRelative = 0;\r\n }\r\n if (minColumnWidthRelative > 0) {\r\n let extraRelative = 0, delta;\r\n\r\n // First pass - make sure they are all constrained to the minimum width\r\n for (let i = 0; i < p.visibleColumns.length; i++) {\r\n let col = p.visibleColumns[i];\r\n if (col.widthMode === ColumnWidthMode.RELATIVE) {\r\n if (!col.ignoreMin && col.width < minColumnWidthRelative) {\r\n extraRelative += minColumnWidthRelative - col.width;\r\n col.width = minColumnWidthRelative;\r\n }\r\n }\r\n }\r\n\r\n // Second pass - try to take the extra width out of the other columns to compensate\r\n for (let i = 0; i < p.visibleColumns.length; i++) {\r\n let col = p.visibleColumns[i];\r\n if (col.widthMode === ColumnWidthMode.RELATIVE) {\r\n if (!col.ignoreMin && col.width > minColumnWidthRelative) {\r\n if (extraRelative > 0) {\r\n delta = Math.min(extraRelative, col.width - minColumnWidthRelative);\r\n col.width -= delta;\r\n extraRelative -= delta;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Try to fill width\r\n if (o.autoFillTableWidth && sizeLeft > 0) {\r\n let nonResizableTotal = 0;\r\n let sizeLeftToFill = sizeLeft;\r\n\r\n for (let i = 0; i < p.visibleColumns.length; i++) {\r\n let col = p.visibleColumns[i];\r\n if (!col.resizable && col.widthMode === ColumnWidthMode.ABSOLUTE)\r\n nonResizableTotal += col.width;\r\n\r\n if (col.widthMode === ColumnWidthMode.RELATIVE)\r\n sizeLeftToFill -= Math.round(sizeLeftForRelative * col.width);\r\n }\r\n\r\n let conv = ((detectedWidth - nonResizableTotal) / (detectedWidth - sizeLeftToFill - nonResizableTotal)) || NaN;\r\n for (let i = 0; i < p.visibleColumns.length && sizeLeftToFill > 0; i++) {\r\n let col = p.visibleColumns[i];\r\n if (!col.resizable && col.widthMode === ColumnWidthMode.ABSOLUTE)\r\n continue;\r\n\r\n if (col.widthMode === ColumnWidthMode.RELATIVE) {\r\n col.width *= conv;\r\n } else {\r\n let width = col.actualWidth * conv;\r\n if (col.actualWidth !== width) {\r\n col.actualWidth = width;\r\n if (changedColumnIndexes.indexOf(i) === -1)\r\n changedColumnIndexes.push(i);\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Materialize relative sizes\r\n for (let i = 0; i < p.visibleColumns.length; i++) {\r\n let col = p.visibleColumns[i];\r\n if (col.widthMode === ColumnWidthMode.RELATIVE) {\r\n let width = Math.round(sizeLeftForRelative * col.width);\r\n sizeLeft -= width;\r\n relatives--;\r\n\r\n // Take care of rounding errors\r\n if (relatives === 0 && sizeLeft === 1) { // Take care of rounding errors\r\n width++;\r\n sizeLeft--;\r\n }\r\n if (sizeLeft === -1) {\r\n width--;\r\n sizeLeft++;\r\n }\r\n\r\n // Update actualWidth\r\n if (width !== col.actualWidth) {\r\n col.actualWidth = width;\r\n changedColumnIndexes.push(i);\r\n }\r\n }\r\n }\r\n\r\n if (p.visibleColumns.length) {\r\n // (There should always be at least 1 column visible, but just in case)\r\n p.visibleColumns[p.visibleColumns.length - 1].actualWidthConsideringScrollbarWidth =\r\n p.visibleColumns[p.visibleColumns.length - 1].actualWidth - (p.scrollbarWidth || 0);\r\n }\r\n\r\n if (renderColumns) {\r\n let tableWidth = this._calculateTbodyWidth();\r\n\r\n if (tableWidthBeforeCalculations < tableWidth) {\r\n this._updateTableWidth(false);\r\n }\r\n\r\n for (let i = 0; i < changedColumnIndexes.length; i++) {\r\n this._resizeColumnElements(changedColumnIndexes[i]);\r\n }\r\n\r\n if (tableWidthBeforeCalculations > tableWidth) {\r\n this._updateTableWidth(false);\r\n }\r\n }\r\n }\r\n\r\n return this;\r\n };\r\n})();\r\n\r\n/**\r\n * Notify the table that its height has changed\r\n * @public\r\n * @expose\r\n * @returns {DGTable} self\r\n */\r\nDGTable.prototype.tableHeightChanged = function () {\r\n let that = this,\r\n o = that.o,\r\n p = that.p;\r\n\r\n if (!p.$table) {\r\n return that;\r\n }\r\n\r\n let height = getElementHeight(that.$el[0], true)\r\n - (parseFloat(p.$table.css('border-top-width')) || 0) // Subtract top border of inner element\r\n - (parseFloat(p.$table.css('border-bottom-width')) || 0); // Subtract bottom border of inner element\r\n\r\n if (height !== o.height) {\r\n\r\n o.height = height;\r\n\r\n if (p.tbody) {\r\n // At least 1 pixel - to show scrollers correctly.\r\n p.tbody.style.height = Math.max(o.height - getElementHeight(p.$headerRow[0], true, true, true), 1) + 'px';\r\n }\r\n\r\n if (o.virtualTable) {\r\n that.clearAndRender();\r\n }\r\n }\r\n\r\n return that;\r\n};\r\n\r\n/**\r\n * Add rows to the table\r\n * @public\r\n * @expose\r\n * @param {Object[]} data - array of rows to add to the table\r\n * @param {Number} [at=-1] - where to add the rows at\r\n * @param {Boolean} [resort=false] - should resort all rows?\r\n * @param {Boolean} [render=true]\r\n * @returns {DGTable} self\r\n */\r\nDGTable.prototype.addRows = function (data, at, resort, render) {\r\n let that = this,\r\n p = that.p;\r\n\r\n if (typeof at === 'boolean') {\r\n render = resort;\r\n resort = at;\r\n at = -1;\r\n }\r\n\r\n if (typeof at !== 'number')\r\n at = -1;\r\n\r\n if (at < 0 || at > p.rows.length)\r\n at = p.rows.length;\r\n\r\n render = (render === undefined) ? true : !!render;\r\n\r\n if (data) {\r\n p.rows.add(data, at);\r\n\r\n if (p.filteredRows || (resort && p.rows.sortColumn.length)) {\r\n\r\n if (resort && p.rows.sortColumn.length) {\r\n this.resort();\r\n } else {\r\n this._refilter();\r\n }\r\n\r\n p.tableSkeletonNeedsRendering = true;\r\n\r\n if (render) {\r\n // Render the skeleton with all rows from scratch\r\n this.render();\r\n }\r\n\r\n } else if (render) {\r\n let childNodes = p.tbody.childNodes;\r\n\r\n if (that.o.virtualTable) {\r\n\r\n while (p.tbody.firstChild) {\r\n this.trigger('rowdestroy', p.tbody.firstChild);\r\n this._unbindCellEventsForRow(p.tbody.firstChild);\r\n p.tbody.removeChild(p.tbody.firstChild);\r\n }\r\n\r\n this._calculateVirtualHeight() // Calculate virtual height\r\n ._updateLastCellWidthFromScrollbar() // Detect vertical scrollbar height\r\n .render()\r\n ._updateTableWidth(false); // Update table width to suit the required width considering vertical scrollbar\r\n\r\n } else if (p.$tbody) {\r\n\r\n let firstRow = at,\r\n lastRow = at + data.length - 1;\r\n\r\n let renderedRows = that.renderRows(firstRow, lastRow);\r\n p.tbody.insertBefore(renderedRows, childNodes[at] || null);\r\n\r\n for (let i = lastRow + 1; i < childNodes.length; i++) {\r\n let row = childNodes[i];\r\n row['rowIndex'] += data.length;\r\n row['physicalRowIndex'] += data.length;\r\n }\r\n\r\n this.render()\r\n ._updateLastCellWidthFromScrollbar() // Detect vertical scrollbar height, and update existing last cells\r\n ._updateTableWidth(true); // Update table width to suit the required width considering vertical scrollbar\r\n\r\n }\r\n }\r\n\r\n this.trigger('addrows', data.length, false);\r\n }\r\n return this;\r\n};\r\n\r\n/**\r\n * Removes a row from the table\r\n * @public\r\n * @expose\r\n * @param {Number} physicalRowIndex - index\r\n * @param {Number} count - how many rows to remove\r\n * @param {Boolean=true} render\r\n * @returns {DGTable} self\r\n */\r\nDGTable.prototype.removeRows = function (physicalRowIndex, count, render) {\r\n let that = this,\r\n p = that.p;\r\n\r\n if (typeof count !== 'number' || count <= 0) return this;\r\n\r\n if (physicalRowIndex < 0 || physicalRowIndex > p.rows.length - 1) return this;\r\n\r\n p.rows.splice(physicalRowIndex, count);\r\n render = (render === undefined) ? true : !!render;\r\n\r\n if (p.filteredRows) {\r\n\r\n this._refilter();\r\n\r\n p.tableSkeletonNeedsRendering = true;\r\n\r\n if (render) {\r\n // Render the skeleton with all rows from scratch\r\n this.render();\r\n }\r\n\r\n } else if (render) {\r\n\r\n let childNodes = p.tbody.childNodes;\r\n\r\n if (this.o.virtualTable) {\r\n\r\n while (p.tbody.firstChild) {\r\n this.trigger('rowdestroy', p.tbody.firstChild);\r\n this._unbindCellEventsForRow(p.tbody.firstChild);\r\n p.tbody.removeChild(p.tbody.firstChild);\r\n }\r\n\r\n this._calculateVirtualHeight()\r\n ._updateLastCellWidthFromScrollbar()\r\n .render()\r\n ._updateTableWidth(false); // Update table width to suit the required width considering vertical scrollbar\r\n\r\n\r\n } else {\r\n\r\n let countRemoved = 0, lastRowIndex = physicalRowIndex + count - 1;\r\n\r\n for (let i = 0; i < childNodes.length; i++) {\r\n let row = childNodes[i];\r\n let index = row['physicalRowIndex'];\r\n\r\n if (index >= physicalRowIndex) {\r\n if (index <= lastRowIndex) {\r\n this.trigger('rowdestroy', row);\r\n this._unbindCellEventsForRow(row);\r\n p.tbody.removeChild(row);\r\n i--;\r\n } else {\r\n row['physicalRowIndex'] -= count;\r\n }\r\n } else {\r\n row['rowIndex'] = i;\r\n }\r\n }\r\n\r\n this.render()\r\n ._updateLastCellWidthFromScrollbar()\r\n ._updateTableWidth(true); // Update table width to suit the required width considering vertical scrollbar\r\n\r\n }\r\n }\r\n\r\n return this;\r\n};\r\n\r\n/**\r\n * Removes a row from the table\r\n * @public\r\n * @expose\r\n * @param {Number} physicalRowIndex - index\r\n * @param {Boolean=true} render\r\n * @returns {DGTable} self\r\n */\r\nDGTable.prototype.removeRow = function (physicalRowIndex, render) {\r\n return this.removeRows(physicalRowIndex, 1, render);\r\n};\r\n\r\n/**\r\n * Refreshes the row specified\r\n * @public\r\n * @expose\r\n * @param {Number} physicalRowIndex index\r\n * @returns {DGTable} self\r\n */\r\nDGTable.prototype.refreshRow = function(physicalRowIndex) {\r\n let that = this,\r\n p = that.p;\r\n\r\n if (physicalRowIndex < 0 || physicalRowIndex > p.rows.length - 1) return this;\r\n\r\n // Find out if the row is in the rendered dataset\r\n let rowIndex = -1;\r\n if (p.filteredRows && (rowIndex = p.filteredRows.indexOf(p.rows[physicalRowIndex])) === -1) return this;\r\n\r\n if (rowIndex === -1) {\r\n rowIndex = physicalRowIndex;\r\n }\r\n\r\n let childNodes = p.tbody.childNodes;\r\n\r\n if (this.o.virtualTable) {\r\n // Now make sure that the row actually rendered, as this is a virtual table\r\n let isRowVisible = false;\r\n let i = 0;\r\n\r\n for (; i < childNodes.length; i++) {\r\n if (childNodes[i]['physicalRowIndex'] === physicalRowIndex) {\r\n isRowVisible = true;\r\n this.trigger('rowdestroy', childNodes[i]);\r\n this._unbindCellEventsForRow(childNodes[i]);\r\n p.tbody.removeChild(childNodes[i]);\r\n break;\r\n }\r\n }\r\n\r\n if (isRowVisible) {\r\n let renderedRow = this.renderRows(rowIndex, rowIndex);\r\n p.tbody.insertBefore(renderedRow, childNodes[i] || null);\r\n }\r\n } else {\r\n this.trigger('rowdestroy', childNodes[rowIndex]);\r\n this._unbindCellEventsForRow(childNodes[rowIndex]);\r\n p.tbody.removeChild(childNodes[rowIndex]);\r\n let renderedRow = this.renderRows(rowIndex, rowIndex);\r\n p.tbody.insertBefore(renderedRow, childNodes[rowIndex] || null);\r\n }\r\n\r\n return this;\r\n};\r\n\r\n/**\r\n * Get the DOM element for the specified row, if it exists\r\n * @public\r\n * @expose\r\n * @param {Number} physicalRowIndex index\r\n * @returns {Element|null} row or null\r\n */\r\nDGTable.prototype.getRowElement = function(physicalRowIndex) {\r\n let that = this,\r\n p = that.p;\r\n\r\n if (physicalRowIndex < 0 || physicalRowIndex > p.rows.length - 1) return null;\r\n\r\n // Find out if the row is in the rendered dataset\r\n let rowIndex = -1;\r\n if (p.filteredRows && (rowIndex = p.filteredRows.indexOf(p.rows[physicalRowIndex])) === -1) return this;\r\n\r\n if (rowIndex === -1) {\r\n rowIndex = physicalRowIndex;\r\n }\r\n\r\n let childNodes = p.tbody.childNodes;\r\n\r\n if (this.o.virtualTable) {\r\n // Now make sure that the row actually rendered, as this is a virtual table\r\n for (let i = 0; i < childNodes.length; i++) {\r\n if (childNodes[i]['physicalRowIndex'] === physicalRowIndex) {\r\n return childNodes[i];\r\n }\r\n }\r\n } else {\r\n return childNodes[rowIndex];\r\n }\r\n\r\n return null;\r\n};\r\n\r\n/**\r\n * Refreshes all virtual rows\r\n * @public\r\n * @expose\r\n * @returns {DGTable} self\r\n */\r\nDGTable.prototype.refreshAllVirtualRows = function () {\r\n\r\n const p = this.p;\r\n\r\n if (this.o.virtualTable) {\r\n // Now make sure that the row actually rendered, as this is a virtual table\r\n let rowsToRender = [];\r\n let childNodes = p.tbody.childNodes;\r\n\r\n for (let i = 0, rowCount = childNodes.length; i < rowCount; i++) {\r\n rowsToRender.push(childNodes[i]['physicalRowIndex']);\r\n this.trigger('rowdestroy', childNodes[i]);\r\n this._unbindCellEventsForRow(childNodes[i]);\r\n p.tbody.removeChild(childNodes[i]);\r\n i--;\r\n rowCount--;\r\n }\r\n\r\n for (let i = 0; i < rowsToRender.length; i++) {\r\n let renderedRow = this.renderRows(rowsToRender[i], rowsToRender[i]);\r\n p.tbody.appendChild(renderedRow);\r\n }\r\n }\r\n\r\n return this;\r\n};\r\n\r\n/**\r\n * Replace the whole dataset\r\n * @public\r\n * @expose\r\n * @param {Object[]} data array of rows to add to the table\r\n * @param {Boolean} [resort=false] should resort all rows?\r\n * @returns {DGTable} self\r\n */\r\nDGTable.prototype.setRows = function (data, resort) {\r\n let that = this,\r\n p = that.p;\r\n\r\n // this.scrollTop = this.$el.find('.table').scrollTop();\r\n p.rows.reset(data);\r\n\r\n if (resort && p.rows.sortColumn.length) {\r\n this.resort();\r\n } else {\r\n this._refilter();\r\n }\r\n\r\n this.clearAndRender().trigger('addrows', data.length, true);\r\n\r\n return this;\r\n};\r\n\r\n/**\r\n * Creates a URL representing the data in the specified element.\r\n * This uses the Blob or BlobBuilder of the modern browsers.\r\n * The url can be used for a Web Worker.\r\n * @public\r\n * @expose\r\n * @param {string} id Id of the element containing your data\r\n * @returns {String|null} the url, or null if not supported\r\n */\r\nDGTable.prototype.getUrlForElementContent = function (id) {\r\n let blob,\r\n el = document.getElementById(id);\r\n if (el) {\r\n let data = el.textContent;\r\n if (typeof Blob === 'function') {\r\n blob = new Blob([data]);\r\n } else {\r\n let BlobBuilder = window.BlobBuilder || window.WebKitBlobBuilder || window.MozBlobBuilder || window.MSBlobBuilder;\r\n if (!BlobBuilder) {\r\n return null;\r\n }\r\n let builder = new BlobBuilder();\r\n builder.append(data);\r\n blob = builder.getBlob();\r\n }\r\n return (window.URL || window.webkitURL).createObjectURL(blob);\r\n }\r\n return null;\r\n};\r\n\r\n/**\r\n * @public\r\n * @expose\r\n * @returns {Boolean} A value indicating whether Web Workers are supported\r\n */\r\nDGTable.prototype.isWorkerSupported = function() {\r\n return window['Worker'] instanceof Function;\r\n};\r\n\r\n/**\r\n * Creates a Web Worker for updating the table.\r\n * @public\r\n * @expose\r\n * @param {string} url Url to the script for the Web Worker\r\n * @param {boolean} [start=true] if true, starts the Worker immediately\r\n * @param {boolean} [resort=false]\r\n * @returns {Worker|null} the Web Worker, or null if not supported\r\n */\r\nDGTable.prototype.createWebWorker = function (url, start, resort) {\r\n if (this.isWorkerSupported()) {\r\n let that = this,\r\n p = that.p;\r\n\r\n let worker = new Worker(url);\r\n let listener = function (evt) {\r\n if (evt.data.append) {\r\n that.addRows(evt.data.rows, resort);\r\n } else {\r\n that.setRows(evt.data.rows, resort);\r\n }\r\n };\r\n worker.addEventListener('message', listener, false);\r\n if (!p.workerListeners) {\r\n p.workerListeners = [];\r\n }\r\n p.workerListeners.push({ worker: worker, listener: listener });\r\n if (start || start === undefined) {\r\n worker.postMessage(null);\r\n }\r\n return worker;\r\n }\r\n return null;\r\n};\r\n\r\n/**\r\n * Unbinds a Web Worker from the table, stopping updates.\r\n * @public\r\n * @expose\r\n * @param {Worker} worker the Web Worker\r\n * @returns {DGTable} self\r\n */\r\nDGTable.prototype.unbindWebWorker = function (worker) {\r\n let that = this,\r\n p = that.p;\r\n\r\n if (p.workerListeners) {\r\n for (let j = 0; j < p.workerListeners.length; j++) {\r\n if (p.workerListeners[j].worker === worker) {\r\n worker.removeEventListener('message', p.workerListeners[j].listener, false);\r\n p.workerListeners.splice(j, 1);\r\n j--;\r\n }\r\n }\r\n }\r\n\r\n return this;\r\n};\r\n\r\n/**\r\n * A synonym for hideCellPreview()\r\n * @public\r\n * @expose\r\n * @returns {DGTable} self\r\n */\r\nDGTable.prototype.abortCellPreview = function() {\r\n this.hideCellPreview();\r\n return this;\r\n};\r\n\r\n/**\r\n * Cancel a resize in progress\r\n * @expose\r\n * @private\r\n * @returns {DGTable} self\r\n */\r\nDGTable.prototype.cancelColumnResize = function() {\r\n const p = this.p;\r\n\r\n if (p.$resizer) {\r\n p.$resizer.remove();\r\n p.$resizer = null;\r\n $(document).off('mousemove.dgtable', p.onMouseMoveResizeAreaBound)\r\n .off('mouseup.dgtable', p.onEndDragColumnHeaderBound);\r\n }\r\n\r\n return this;\r\n};\r\n\r\nDGTable.prototype._onVirtualTableScrolled = function () {\r\n this.render();\r\n};\r\n\r\nDGTable.prototype._onTableScrolledHorizontally = function () {\r\n const p = this.p;\r\n\r\n p.header.scrollLeft = p.table.scrollLeft;\r\n};\r\n\r\n/**previousElementSibling\r\n * Reverse-calculate the column to resize from mouse position\r\n * @private\r\n * @param {jQuery_Event} e jQuery mouse event\r\n * @returns {String} name of the column which the mouse is over, or null if the mouse is not in resize position\r\n */\r\nDGTable.prototype._getColumnByResizePosition = function (e) {\r\n\r\n let that = this,\r\n o = that.o,\r\n rtl = this._isTableRtl();\r\n\r\n let $headerCell = $(e.target).closest('div.' + o.tableClassName + '-header-cell,div.' + o.cellPreviewClassName),\r\n headerCell = $headerCell[0];\r\n if (headerCell['__cell']) {\r\n headerCell = headerCell['__cell'];\r\n $headerCell = $(headerCell);\r\n }\r\n\r\n let previousElementSibling = $headerCell[0].previousSibling;\r\n while (previousElementSibling && previousElementSibling.nodeType !== 1) {\r\n previousElementSibling = previousElementSibling.previousSibling;\r\n }\r\n\r\n let firstCol = !previousElementSibling;\r\n\r\n let mouseX = ((e.pageX != null ? e.pageX : e.originalEvent.pageX) || e.originalEvent.clientX) - $headerCell.offset().left;\r\n\r\n if (rtl) {\r\n if (!firstCol && getElementWidth($headerCell[0], true, true, true) - mouseX <= o.resizeAreaWidth / 2) {\r\n return previousElementSibling['columnName'];\r\n } else if (mouseX <= o.resizeAreaWidth / 2) {\r\n return headerCell['columnName'];\r\n }\r\n } else {\r\n if (!firstCol && mouseX <= o.resizeAreaWidth / 2) {\r\n return previousElementSibling['columnName'];\r\n } else if (getElementWidth($headerCell[0], true, true, true) - mouseX <= o.resizeAreaWidth / 2) {\r\n return headerCell['columnName'];\r\n }\r\n }\r\n\r\n return null;\r\n};\r\n\r\n/**\r\n * @param {jQuery_Event} event\r\n */\r\nDGTable.prototype._onTouchStartColumnHeader = function (event) {\r\n const p = this.p;\r\n\r\n if (p.currentTouchId) return;\r\n\r\n let startTouch = event.originalEvent.changedTouches[0];\r\n p.currentTouchId = startTouch.identifier;\r\n\r\n let $eventTarget = $(event.currentTarget);\r\n\r\n let startPos = { x: startTouch.pageX, y: startTouch.pageY },\r\n currentPos = startPos,\r\n distanceTreshold = 9;\r\n\r\n let tapAndHoldTimeout;\r\n\r\n let unbind = function () {\r\n p.currentTouchId = null;\r\n $eventTarget.off('touchend').off('touchcancel');\r\n clearTimeout(tapAndHoldTimeout);\r\n };\r\n\r\n let fakeEvent = function (name) {\r\n let fakeEvent = $.Event(name);\r\n let extendObjects = Array.prototype.slice.call(arguments, 1);\r\n for (let key of ['target', 'clientX', 'clientY', 'offsetX', 'offsetY', 'screenX', 'screenY', 'pageX', 'pageY', 'which']) {\r\n fakeEvent[key] = event[key];\r\n for (let i = 0; i < extendObjects.length; i++) {\r\n if (extendObjects[i][key] != null) {\r\n fakeEvent[key] = extendObjects[i][key];\r\n }\r\n }\r\n }\r\n return fakeEvent;\r\n };\r\n\r\n $eventTarget.trigger(fakeEvent('mousedown', event.originalEvent.changedTouches[0], { 'which': 1, target: event.target }));\r\n\r\n tapAndHoldTimeout = setTimeout(() => {\r\n unbind();\r\n\r\n $eventTarget\r\n .one('touchend', (event) => {\r\n // Prevent simulated mouse events after touchend\r\n if (!isInputElementEvent(event))\r\n event.preventDefault();\r\n\r\n $eventTarget.off('touchend').off('touchcancel');\r\n })\r\n .one('touchcancel', (_event) => {\r\n $eventTarget.off('touchend').off('touchcancel');\r\n });\r\n\r\n let distanceTravelled = Math.sqrt(Math.pow(Math.abs(currentPos.x - startPos.x), 2) + Math.pow(Math.abs(currentPos.y - startPos.y), 2));\r\n\r\n if (distanceTravelled < distanceTreshold) {\r\n this.cancelColumnResize();\r\n $eventTarget.trigger(fakeEvent('mouseup', event.originalEvent.changedTouches[0], { 'which': 3, target: event.target }));\r\n }\r\n\r\n }, 500);\r\n\r\n $eventTarget\r\n .on('touchend', (event) => {\r\n let touch = find(event.originalEvent.changedTouches, (touch) => touch.identifier === p.currentTouchId);\r\n if (!touch) return;\r\n\r\n unbind();\r\n\r\n // Prevent simulated mouse events after touchend\r\n if (!isInputElementEvent(event))\r\n event.preventDefault();\r\n\r\n currentPos = { x: touch.pageX, y: touch.pageY };\r\n let distanceTravelled = Math.sqrt(Math.pow(Math.abs(currentPos.x - startPos.x), 2) + Math.pow(Math.abs(currentPos.y - startPos.y), 2));\r\n\r\n if (distanceTravelled < distanceTreshold || p.$resizer) {\r\n $eventTarget.trigger(fakeEvent('mouseup', touch, { 'which': 1, target: event.target }));\r\n $eventTarget.trigger(fakeEvent('click', touch, { 'which': 1, target: event.target }));\r\n }\r\n\r\n })\r\n .on('touchcancel', () => {\r\n unbind();\r\n })\r\n .on('touchmove', (event) => {\r\n let touch = find(event.originalEvent.changedTouches, (touch) => touch.identifier === p.currentTouchId);\r\n if (!touch) return;\r\n\r\n // Keep track of current position, so we know if we need to cancel the tap-and-hold\r\n currentPos = { x: touch.pageX, y: touch.pageY };\r\n\r\n if (p.$resizer) {\r\n event.preventDefault();\r\n\r\n $eventTarget.trigger(fakeEvent('mousemove', touch, { target: event.target }));\r\n }\r\n });\r\n};\r\n\r\n/**\r\n * @param {jQuery_Event} event\r\n */\r\nDGTable.prototype._onMouseDownColumnHeader = function (event) {\r\n if (event.which !== 1) return this; // Only treat left-clicks\r\n\r\n let that = this,\r\n o = that.o,\r\n p = that.p,\r\n col = this._getColumnByResizePosition(event);\r\n\r\n if (col) {\r\n let column = p.columns.get(col);\r\n if (!o.resizableColumns || !column || !column.resizable) {\r\n return false;\r\n }\r\n\r\n let rtl = this._isTableRtl();\r\n\r\n if (p.$resizer) {\r\n $(p.$resizer).remove();\r\n }\r\n p.$resizer = $('<div></div>')\r\n .addClass(o.resizerClassName)\r\n .css({\r\n 'position': 'absolute',\r\n 'display': 'block',\r\n 'z-index': -1,\r\n 'visibility': 'hidden',\r\n 'width': '2px',\r\n 'background': '#000',\r\n 'opacity': 0.7,\r\n })\r\n .appendTo(this.$el);\r\n\r\n let selectedHeaderCell = column.element,\r\n commonAncestor = p.$resizer.parent();\r\n\r\n let posCol = selectedHeaderCell.offset(),\r\n posRelative = commonAncestor.offset();\r\n if (ieVersion === 8) {\r\n posCol = selectedHeaderCell.offset(); // IE8 bug, first time it receives zeros...\r\n }\r\n posRelative.left += parseFloat(commonAncestor.css('border-left-width')) || 0;\r\n posRelative.top += parseFloat(commonAncestor.css('border-top-width')) || 0;\r\n posCol.left -= posRelative.left;\r\n posCol.top -= posRelative.top;\r\n posCol.top -= parseFloat(selectedHeaderCell.css('border-top-width')) || 0;\r\n let resizerWidth = getElementWidth(p.$resizer[0], true, true, true);\r\n if (rtl) {\r\n posCol.left -= Math.ceil((parseFloat(selectedHeaderCell.css('border-left-width')) || 0) / 2);\r\n posCol.left -= Math.ceil(resizerWidth / 2);\r\n } else {\r\n posCol.left += getElementWidth(selectedHeaderCell[0], true, true, true);\r\n posCol.left += Math.ceil((parseFloat(selectedHeaderCell.css('border-right-width')) || 0) / 2);\r\n posCol.left -= Math.ceil(resizerWidth / 2);\r\n }\r\n\r\n p.$resizer\r\n .css({\r\n 'z-index': '10',\r\n 'visibility': 'visible',\r\n 'left': posCol.left,\r\n 'top': posCol.top,\r\n 'height': getElementHeight(this.$el[0]),\r\n })[0]['columnName'] = selectedHeaderCell[0]['columnName'];\r\n\r\n try { p.$resizer[0].style.zIndex = ''; }\r\n catch (ignored) { /* we're ok with this */ }\r\n\r\n $(document).on('mousemove.dgtable', p.onMouseMoveResizeAreaBound);\r\n $(document).on('mouseup.dgtable', p.onEndDragColumnHeaderBound);\r\n\r\n event.preventDefault();\r\n }\r\n};\r\n\r\n/**\r\n * @param {jQuery_Event} event event\r\n */\r\nDGTable.prototype._onMouseMoveColumnHeader = function (event) {\r\n\r\n let that = this,\r\n o = that.o,\r\n p = that.p;\r\n\r\n if (o.resizableColumns) {\r\n let col = this._getColumnByResizePosition(event);\r\n let headerCell = $(event.target).closest('div.' + o.tableClassName + '-header-cell,div.' + o.cellPreviewClassName)[0];\r\n if (!col || !p.columns.get(col).resizable) {\r\n headerCell.style.cursor = '';\r\n } else {\r\n headerCell.style.cursor = 'e-resize';\r\n }\r\n }\r\n};\r\n\r\n/**\r\n * @param {jQuery_Event} event\r\n */\r\nDGTable.prototype._onMouseUpColumnHeader = function (event) {\r\n if (event.which === 3) {\r\n let o = this.o;\r\n let $headerCell = $(event.target).closest('div.' + o.tableClassName + '-header-cell,div.' + o.cellPreviewClassName);\r\n let bounds = $headerCell.offset();\r\n bounds['width'] = getElementWidth($headerCell[0], true, true, true);\r\n bounds['height'] = getElementHeight($headerCell[0], true, true, true);\r\n this.trigger('headercontextmenu', $headerCell[0]['columnName'], event.pageX, event.pageY, bounds);\r\n }\r\n return this;\r\n};\r\n\r\n/**\r\n * @private\r\n * @param {jQuery_Event} event event\r\n */\r\nDGTable.prototype._onMouseLeaveColumnHeader = function (event) {\r\n let o = this.o;\r\n let headerCell = $(event.target).closest('div.' + o.tableClassName + '-header-cell,div.' + o.cellPreviewClassName)[0];\r\n headerCell.style.cursor = '';\r\n};\r\n\r\n/**\r\n * @private\r\n * @param {jQuery_Event} event event\r\n */\r\nDGTable.prototype._onClickColumnHeader = function (event) {\r\n if (isInputElementEvent(event))\r\n return;\r\n\r\n if (!this._getColumnByResizePosition(event)) {\r\n\r\n let that = this,\r\n o = that.o,\r\n p = that.p;\r\n\r\n let headerCell = $(event.target).closest('div.' + o.tableClassName + '-header-cell,div.' + o.cellPreviewClassName)[0];\r\n if (o.sortableColumns) {\r\n let column = p.columns.get(headerCell['columnName']);\r\n if (column && column.sortable) {\r\n this.sort(headerCell['columnName'], undefined, true).render();\r\n }\r\n }\r\n }\r\n};\r\n\r\n/**\r\n * @private\r\n * @param {jQuery_Event} event event\r\n */\r\nDGTable.prototype._onStartDragColumnHeader = function (event) {\r\n\r\n let that = this,\r\n o = that.o,\r\n p = that.p;\r\n\r\n if (o.movableColumns) {\r\n\r\n let $headerCell = $(event.target).closest('div.' + o.tableClassName + '-header-cell,div.' + o.cellPreviewClassName);\r\n let column = p.columns.get($headerCell[0]['columnName']);\r\n if (column && column.movable) {\r\n $headerCell[0].style.opacity = 0.35;\r\n p.dragId = Math.random() * 0x9999999; // Recognize this ID on drop\r\n event.originalEvent.dataTransfer.setData('text', JSON.stringify({ dragId: p.dragId, column: column.name }));\r\n } else {\r\n event.preventDefault();\r\n }\r\n\r\n } else {\r\n\r\n event.preventDefault();\r\n\r\n }\r\n\r\n return undefined;\r\n};\r\n\r\n/**\r\n * @private\r\n * @param {MouseEvent} event event\r\n */\r\nDGTable.prototype._onMouseMoveResizeArea = function (event) {\r\n\r\n let that = this,\r\n p = that.p;\r\n\r\n let column = p.columns.get(p.$resizer[0]['columnName']);\r\n let rtl = this._isTableRtl();\r\n\r\n let selectedHeaderCell = column.element,\r\n commonAncestor = p.$resizer.parent();\r\n let posCol = selectedHeaderCell.offset(), posRelative = commonAncestor.offset();\r\n posRelative.left += parseFloat(commonAncestor.css('border-left-width')) || 0;\r\n posCol.left -= posRelative.left;\r\n let resizerWidth = getElementWidth(p.$resizer[0], true, true, true);\r\n\r\n let isBoxing = selectedHeaderCell.css('box-sizing') === 'border-box';\r\n\r\n let actualX = event.pageX - posRelative.left;\r\n let minX = posCol.left;\r\n\r\n minX -= Math.ceil(resizerWidth / 2);\r\n\r\n if (rtl) {\r\n minX += getElementWidth(selectedHeaderCell[0], true, true, true);\r\n minX -= column.ignoreMin ? 0 : this.o.minColumnWidth;\r\n\r\n if (!isBoxing) {\r\n minX -= Math.ceil((parseFloat(selectedHeaderCell.css('border-left-width')) || 0) / 2);\r\n minX -= this._horizontalPadding(selectedHeaderCell[0]);\r\n }\r\n\r\n if (actualX > minX) {\r\n actualX = minX;\r\n }\r\n } else {\r\n minX += column.ignoreMin ? 0 : this.o.minColumnWidth;\r\n\r\n if (!isBoxing) {\r\n minX += Math.ceil((parseFloat(selectedHeaderCell.css('border-right-width')) || 0) / 2);\r\n minX += this._horizontalPadding(selectedHeaderCell[0]);\r\n }\r\n\r\n if (actualX < minX) {\r\n actualX = minX;\r\n }\r\n }\r\n\r\n p.$resizer.css('left', actualX + 'px');\r\n};\r\n\r\n/**\r\n * @private\r\n * @param {Event} event event\r\n */\r\nDGTable.prototype._onEndDragColumnHeader = function (event) {\r\n\r\n let that = this,\r\n o = that.o,\r\n p = that.p;\r\n\r\n if (!p.$resizer) {\r\n event.target.style.opacity = null;\r\n } else {\r\n $(document).off('mousemove.dgtable', p.onMouseMoveResizeAreaBound)\r\n .off('mouseup.dgtable', p.onEndDragColumnHeaderBound);\r\n\r\n let column = p.columns.get(p.$resizer[0]['columnName']);\r\n let rtl = this._isTableRtl();\r\n\r\n let selectedHeaderCell = column.element,\r\n commonAncestor = p.$resizer.parent();\r\n let posCol = selectedHeaderCell.offset(), posRelative = commonAncestor.offset();\r\n posRelative.left += parseFloat(commonAncestor.css('border-left-width')) || 0;\r\n posCol.left -= posRelative.left;\r\n let resizerWidth = getElementWidth(p.$resizer[0], true, true, true);\r\n\r\n let isBoxing = selectedHeaderCell.css('box-sizing') === 'border-box';\r\n\r\n let actualX = event.pageX - posRelative.left;\r\n let baseX = posCol.left, minX = posCol.left;\r\n let width = 0;\r\n\r\n baseX -= Math.ceil(resizerWidth / 2);\r\n\r\n if (rtl) {\r\n\r\n if (!isBoxing) {\r\n actualX += this._horizontalPadding(selectedHeaderCell[0]);\r\n actualX += parseFloat(selectedHeaderCell.css('border-left-width')) || 0;\r\n actualX += parseFloat(selectedHeaderCell.css('border-right-width')) || 0;\r\n }\r\n\r\n baseX += getElementWidth(selectedHeaderCell[0], true, true, true);\r\n\r\n minX = baseX - (column.ignoreMin ? 0 : this.o.minColumnWidth);\r\n if (actualX > minX) {\r\n actualX = minX;\r\n }\r\n\r\n width = baseX - actualX;\r\n } else {\r\n\r\n if (!isBoxing) {\r\n actualX -= this._horizontalPadding(selectedHeaderCell[0]);\r\n actualX -= parseFloat(selectedHeaderCell.css('border-left-width')) || 0;\r\n actualX -= parseFloat(selectedHeaderCell.css('border-right-width')) || 0;\r\n }\r\n\r\n minX = baseX + (column.ignoreMin ? 0 : this.o.minColumnWidth);\r\n if (actualX < minX) {\r\n actualX = minX;\r\n }\r\n\r\n width = actualX - baseX;\r\n }\r\n\r\n p.$resizer.remove();\r\n p.$resizer = null;\r\n\r\n let sizeToSet = width;\r\n\r\n if (column.widthMode === ColumnWidthMode.RELATIVE) {\r\n let sizeLeft = this._calculateWidthAvailableForColumns();\r\n //sizeLeft -= p.table.offsetWidth - p.table.clientWidth;\r\n\r\n let totalRelativePercentage = 0;\r\n let relatives = 0;\r\n\r\n for (let i = 0; i < p.visibleColumns.length; i++) {\r\n let col = p.visibleColumns[i];\r\n if (col.name === column.name) continue;\r\n\r\n if (col.widthMode === ColumnWidthMode.RELATIVE) {\r\n totalRelativePercentage += col.width;\r\n relatives++;\r\n } else {\r\n sizeLeft -= col.actualWidth;\r\n }\r\n }\r\n\r\n sizeLeft = Math.max(1, sizeLeft);\r\n sizeToSet = width / sizeLeft;\r\n\r\n if (relatives > 0) {\r\n // When there's more than one relative overall,\r\n // we can do relative enlarging/shrinking.\r\n // Otherwise, we can end up having a 0 width.\r\n\r\n let unNormalizedSizeToSet = sizeToSet / ((1 - sizeToSet) / totalRelativePercentage);\r\n\r\n totalRelativePercentage += sizeToSet;\r\n\r\n // Account for relative widths scaling later\r\n if ((totalRelativePercentage < 1 && o.relativeWidthGrowsToFillWidth) ||\r\n (totalRelativePercentage > 1 && o.relativeWidthShrinksToFillWidth)) {\r\n sizeToSet = unNormalizedSizeToSet;\r\n }\r\n }\r\n\r\n sizeToSet *= 100;\r\n sizeToSet += '%';\r\n }\r\n\r\n this.setColumnWidth(column.name, sizeToSet);\r\n }\r\n};\r\n\r\n/**\r\n * @private\r\n * @param {jQuery_Event} event event\r\n */\r\nDGTable.prototype._onDragEnterColumnHeader = function (event) {\r\n let that = this,\r\n o = that.o,\r\n p = that.p;\r\n\r\n if (o.movableColumns) {\r\n let dataTransferred = event.originalEvent.dataTransfer.getData('text');\r\n if (dataTransferred) {\r\n dataTransferred = JSON.parse(dataTransferred);\r\n }\r\n else {\r\n dataTransferred = null; // WebKit does not provide the dataTransfer on dragenter?..\r\n }\r\n\r\n let $headerCell = $(event.target).closest('div.' + o.tableClassName + '-header-cell,div.' + o.cellPreviewClassName);\r\n if (!dataTransferred ||\r\n (p.dragId === dataTransferred.dragId && $headerCell['columnName'] !== dataTransferred.column)) {\r\n\r\n let column = p.columns.get($headerCell[0]['columnName']);\r\n if (column && (column.movable || column !== p.visibleColumns[0])) {\r\n $($headerCell).addClass('drag-over');\r\n }\r\n }\r\n }\r\n};\r\n\r\n/**\r\n * @private\r\n * @param {jQuery_Event} event event\r\n */\r\nDGTable.prototype._onDragOverColumnHeader = function (event) {\r\n event.preventDefault();\r\n};\r\n\r\n/**\r\n * @private\r\n * @param {jQuery_Event} event event\r\n */\r\nDGTable.prototype._onDragLeaveColumnHeader = function (event) {\r\n let o = this.o;\r\n let $headerCell = $(event.target).closest('div.' + o.tableClassName + '-header-cell,div.' + o.cellPreviewClassName);\r\n if ( !$($headerCell[0].firstChild)\r\n .has(event.originalEvent.relatedTarget).length ) {\r\n $headerCell.removeClass('drag-over');\r\n }\r\n};\r\n\r\n/**\r\n * @private\r\n * @param {jQuery_Event} event event\r\n */\r\nDGTable.prototype._onDropColumnHeader = function (event) {\r\n event.preventDefault();\r\n\r\n let that = this,\r\n o = that.o,\r\n p = that.p;\r\n\r\n let dataTransferred = JSON.parse(event.originalEvent.dataTransfer.getData('text'));\r\n let $headerCell = $(event.target).closest('div.' + o.tableClassName + '-header-cell,div.' + o.cellPreviewClassName);\r\n if (o.movableColumns && dataTransferred.dragId === p.dragId) {\r\n let srcColName = dataTransferred.column,\r\n destColName = $headerCell[0]['columnName'],\r\n srcCol = p.columns.get(srcColName),\r\n destCol = p.columns.get(destColName);\r\n if (srcCol && destCol && srcCol.movable && (destCol.movable || destCol !== p.visibleColumns[0])) {\r\n this.moveColumn(srcColName, destColName);\r\n }\r\n }\r\n $($headerCell).removeClass('drag-over');\r\n};\r\n\r\n/**\r\n * @private\r\n * @returns {DGTable} self\r\n */\r\nDGTable.prototype._clearSortArrows = function () {\r\n\r\n let that = this,\r\n p = that.p;\r\n\r\n if (p.$table) {\r\n let tableClassName = this.o.tableClassName;\r\n let sortedColumns = p.$headerRow.find('>div.' + tableClassName + '-header-cell.sorted');\r\n let arrows = sortedColumns.find('>div>.sort-arrow');\r\n for (let arrow of arrows) {\r\n let col = p.columns.get(arrow.parentNode.parentNode['columnName']);\r\n if (col) {\r\n col.arrowProposedWidth = 0;\r\n }\r\n }\r\n arrows.remove();\r\n sortedColumns.removeClass('sorted').removeClass('desc');\r\n }\r\n return this;\r\n};\r\n\r\n/**\r\n * @private\r\n * @param {String} column the name of the sort column\r\n * @param {Boolean} descending table is sorted descending\r\n * @returns {DGTable} self\r\n */\r\nDGTable.prototype._showSortArrow = function (column, descending) {\r\n\r\n let that = this,\r\n p = that.p;\r\n\r\n let col = p.columns.get(column);\r\n if (!col) return false;\r\n\r\n let arrow = createElement('span');\r\n arrow.className = 'sort-arrow';\r\n\r\n if (col.element) {\r\n col.element.addClass(descending ? 'sorted desc' : 'sorted');\r\n col.element[0].firstChild.insertBefore(arrow, col.element[0].firstChild.firstChild);\r\n }\r\n\r\n if (col.widthMode !== ColumnWidthMode.RELATIVE && this.o.adjustColumnWidthForSortArrow) {\r\n col.arrowProposedWidth = arrow.scrollWidth + (parseFloat($(arrow).css('margin-right')) || 0) + (parseFloat($(arrow).css('margin-left')) || 0);\r\n }\r\n\r\n return this;\r\n};\r\n\r\n/**\r\n * @private\r\n * @param {Number} cellIndex index of the column in the DOM\r\n * @returns {DGTable} self\r\n */\r\nDGTable.prototype._resizeColumnElements = function (cellIndex) {\r\n\r\n let that = this,\r\n p = that.p;\r\n\r\n let headerCells = p.$headerRow.find('div.' + this.o.tableClassName + '-header-cell');\r\n let col = p.columns.get(headerCells[cellIndex]['columnName']);\r\n\r\n if (col) {\r\n headerCells[cellIndex].style.width = (col.actualWidthConsideringScrollbarWidth || col.actualWidth) + 'px';\r\n\r\n let width = (col.actualWidthConsideringScrollbarWidth || col.actualWidth) + 'px';\r\n let tbodyChildren = p.$tbody[0].childNodes;\r\n for (let i = 0, count = tbodyChildren.length; i < count; i++) {\r\n let headerRow = tbodyChildren[i];\r\n if (headerRow.nodeType !== 1) continue;\r\n headerRow.childNodes[cellIndex].style.width = width;\r\n }\r\n }\r\n\r\n return this;\r\n};\r\n\r\n/**\r\n * @returns {DGTable} self\r\n * */\r\nDGTable.prototype._destroyHeaderCells = function() {\r\n\r\n let that = this,\r\n o = that.o,\r\n p = that.p;\r\n\r\n if (p.$headerRow) {\r\n this.trigger('headerrowdestroy', p.headerRow);\r\n p.$headerRow.find('div.' + o.tableClassName + '-header-cell').remove();\r\n p.$headerRow = null;\r\n p.headerRow = null;\r\n }\r\n return this;\r\n};\r\n\r\n/**\r\n * @private\r\n * @returns {DGTable} self\r\n */\r\nDGTable.prototype._renderSkeletonBase = function () {\r\n let that = this,\r\n p = that.p,\r\n o = that.o;\r\n\r\n // Clean up old elements\r\n\r\n if (p.$table && o.virtualTable) {\r\n p.$table.remove();\r\n if (p.$tbody) {\r\n let rows = p.$tbody[0].childNodes;\r\n for (let i = 0, len = rows.length; i < len; i++) {\r\n that.trigger('rowdestroy', rows[i]);\r\n that._unbindCellEventsForRow(rows[i]);\r\n }\r\n }\r\n p.$table = p.table = p.$tbody = p.tbody = null;\r\n }\r\n\r\n that._destroyHeaderCells();\r\n p.currentTouchId = null;\r\n if (p.$header) {\r\n p.$header.remove();\r\n }\r\n\r\n // Create new base elements\r\n let tableClassName = o.tableClassName,\r\n headerCellClassName = tableClassName + '-header-cell',\r\n header = createElement('div'),\r\n $header = $(header),\r\n headerRow = createElement('div'),\r\n $headerRow = $(headerRow);\r\n\r\n header.className = tableClassName + '-header';\r\n headerRow.className = tableClassName + '-header-row';\r\n\r\n p.$header = $header;\r\n p.header = header;\r\n p.$headerRow = $headerRow;\r\n p.headerRow = headerRow;\r\n $headerRow.appendTo(p.$header);\r\n $header.prependTo(this.$el);\r\n\r\n relativizeElement(that.$el);\r\n\r\n if (o.width === DGTable.Width.SCROLL) {\r\n this.el.style.overflow = 'hidden';\r\n } else {\r\n this.el.style.overflow = '';\r\n }\r\n\r\n if (!o.height && o.virtualTable) {\r\n o.height = getElementHeight(this.$el[0], true);\r\n }\r\n\r\n return this;\r\n};\r\n\r\n/**\r\n * @private\r\n * @returns {DGTable} self\r\n */\r\nDGTable.prototype._renderSkeletonHeaderCells = function () {\r\n let that = this,\r\n p = that.p,\r\n o = that.o;\r\n\r\n let allowCellPreview = o.allowCellPreview,\r\n allowHeaderCellPreview = o.allowHeaderCellPreview;\r\n\r\n let tableClassName = o.tableClassName,\r\n headerCellClassName = tableClassName + '-header-cell',\r\n headerRow = p.headerRow;\r\n\r\n let ieDragDropHandler;\r\n if (hasIeDragAndDropBug) {\r\n ieDragDropHandler = function(evt) {\r\n evt.preventDefault();\r\n this.dragDrop();\r\n return false;\r\n };\r\n }\r\n\r\n let preventDefault = function (event) { event.preventDefault(); };\r\n\r\n // Create header cells\r\n for (let i = 0; i < p.visibleColumns.length; i++) {\r\n let column = p.visibleColumns[i];\r\n if (column.visible) {\r\n let cell = createElement('div');\r\n let $cell = $(cell);\r\n cell.draggable = true;\r\n cell.className = headerCellClassName;\r\n cell.style.width = column.actualWidth + 'px';\r\n if (o.sortableColumns && column.sortable) {\r\n cell.className += ' sortable';\r\n }\r\n cell['columnName'] = column.name;\r\n cell.setAttribute('data-column', column.name);\r\n\r\n let cellInside = createElement('div');\r\n cellInside.innerHTML = o.headerCellFormatter(column.label, column.name);\r\n cell.appendChild(cellInside);\r\n if (allowCellPreview && allowHeaderCellPreview) {\r\n p._bindCellHoverIn(cell);\r\n }\r\n headerRow.appendChild(cell);\r\n\r\n p.visibleColumns[i].element = $cell;\r\n\r\n $cell.on('mousedown.dgtable', that._onMouseDownColumnHeader.bind(that))\r\n .on('mousemove.dgtable', that._onMouseMoveColumnHeader.bind(that))\r\n .on('mouseup.dgtable', that._onMouseUpColumnHeader.bind(that))\r\n .on('mouseleave.dgtable', that._onMouseLeaveColumnHeader.bind(that))\r\n .on('touchstart.dgtable', that._onTouchStartColumnHeader.bind(that))\r\n .on('dragstart.dgtable', that._onStartDragColumnHeader.bind(that))\r\n .on('click.dgtable', that._onClickColumnHeader.bind(that))\r\n .on('contextmenu.dgtable', preventDefault);\r\n $(cellInside)\r\n .on('dragenter.dgtable', that._onDragEnterColumnHeader.bind(that))\r\n .on('dragover.dgtable', that._onDragOverColumnHeader.bind(that))\r\n .on('dragleave.dgtable', that._onDragLeaveColumnHeader.bind(that))\r\n .on('drop.dgtable', that._onDropColumnHeader.bind(that));\r\n\r\n if (hasIeDragAndDropBug) {\r\n $cell.on('selectstart.dgtable', ieDragDropHandler.bind(cell));\r\n }\r\n\r\n // Disable these to allow our own context menu events without interruption\r\n $cell.css({ '-webkit-touch-callout': 'none', '-webkit-user-select': 'none', '-moz-user-select': 'none', '-ms-user-select': 'none', '-o-user-select': 'none', 'user-select': 'none' });\r\n }\r\n }\r\n\r\n this.trigger('headerrowcreate', headerRow);\r\n\r\n return this;\r\n};\r\n\r\n/**\r\n * @private\r\n * @returns {DGTable} self\r\n */\r\nDGTable.prototype._renderSkeletonBody = function () {\r\n let that = this,\r\n p = that.p,\r\n o = that.o;\r\n\r\n let tableClassName = o.tableClassName;\r\n\r\n // Calculate virtual row heights\r\n if (o.virtualTable && !p.virtualRowHeight) {\r\n let createDummyRow = function() {\r\n let row = createElement('div'),\r\n cell = row.appendChild(createElement('div')),\r\n cellInner = cell.appendChild(createElement('div'));\r\n row.className = tableClassName + '-row';\r\n cell.className = tableClassName + '-cell';\r\n cellInner.innerHTML = '0';\r\n row.style.visibility = 'hidden';\r\n row.style.position = 'absolute';\r\n return row;\r\n };\r\n\r\n let $dummyTbody, $dummyWrapper = $('<div>')\r\n .addClass(that.el.className)\r\n .css({ 'z-index': -1, 'position': 'absolute', left: '0', top: '-9999px', width: '1px', overflow: 'hidden' })\r\n .append(\r\n $('<div>').addClass(tableClassName).append(\r\n $dummyTbody = $('<div>').addClass(tableClassName + '-body').css('width', 99999),\r\n ),\r\n );\r\n\r\n $dummyWrapper.appendTo(document.body);\r\n\r\n let row1 = createDummyRow(), row2 = createDummyRow(), row3 = createDummyRow();\r\n $dummyTbody.append(row1, row2, row3);\r\n\r\n p.virtualRowHeightFirst = getElementHeight(row1, true, true, true);\r\n p.virtualRowHeight = getElementHeight(row2, true, true, true);\r\n p.virtualRowHeightLast = getElementHeight(row3, true, true, true);\r\n\r\n p.virtualRowHeightMin = Math.min(Math.min(p.virtualRowHeightFirst, p.virtualRowHeight), p.virtualRowHeightLast);\r\n p.virtualRowHeightMax = Math.max(Math.max(p.virtualRowHeightFirst, p.virtualRowHeight), p.virtualRowHeightLast);\r\n\r\n $dummyWrapper.remove();\r\n }\r\n\r\n // Create inner table and tbody\r\n if (!p.$table) {\r\n\r\n let fragment = document.createDocumentFragment();\r\n\r\n // Create the inner table element\r\n let table = createElement('div');\r\n let $table = $(table);\r\n table.className = tableClassName;\r\n\r\n if (o.virtualTable) {\r\n table.className += ' virtual';\r\n }\r\n\r\n let tableHeight = (o.height - getElementHeight(p.$headerRow[0], true, true, true));\r\n if ($table.css('box-sizing') !== 'border-box') {\r\n tableHeight -= parseFloat($table.css('border-top-width')) || 0;\r\n tableHeight -= parseFloat($table.css('border-bottom-width')) || 0;\r\n tableHeight -= parseFloat($table.css('padding-top')) || 0;\r\n tableHeight -= parseFloat($table.css('padding-bottom')) || 0;\r\n }\r\n p.visibleHeight = tableHeight;\r\n table.style.height = o.height ? tableHeight + 'px' : 'auto';\r\n table.style.display = 'block';\r\n table.style.overflowY = 'auto';\r\n table.style.overflowX = o.width === DGTable.Width.SCROLL ? 'auto' : 'hidden';\r\n fragment.appendChild(table);\r\n\r\n // Create the \"tbody\" element\r\n let tbody = createElement('div');\r\n let $tbody = $(tbody);\r\n tbody.className = o.tableClassName + '-body';\r\n p.table = table;\r\n p.tbody = tbody;\r\n p.$table = $table;\r\n p.$tbody = $tbody;\r\n\r\n if (o.virtualTable) {\r\n p.virtualVisibleRows = Math.ceil(p.visibleHeight / p.virtualRowHeightMin);\r\n }\r\n\r\n that._calculateVirtualHeight();\r\n\r\n relativizeElement($tbody);\r\n relativizeElement($table);\r\n\r\n table.appendChild(tbody);\r\n that.el.appendChild(fragment);\r\n }\r\n\r\n return this;\r\n};\r\n\r\n/**\r\n * @private\r\n * @returns {DGTable} self\r\n * @deprecated\r\n */\r\nDGTable.prototype._renderSkeleton = function () {\r\n return this;\r\n};\r\n\r\n/**\r\n * @private\r\n * @returns {DGTable} self\r\n */\r\nDGTable.prototype._updateLastCellWidthFromScrollbar = function(force) {\r\n\r\n const p = this.p;\r\n\r\n // Calculate scrollbar's width and reduce from lat column's width\r\n let scrollbarWidth = p.table.offsetWidth - p.table.clientWidth;\r\n if (scrollbarWidth !== p.scrollbarWidth || force) {\r\n p.scrollbarWidth = scrollbarWidth;\r\n for (let i = 0; i < p.columns.length; i++) {\r\n p.columns[i].actualWidthConsideringScrollbarWidth = null;\r\n }\r\n\r\n if (p.scrollbarWidth > 0 && p.visibleColumns.length > 0) {\r\n // (There should always be at least 1 column visible, but just in case)\r\n let lastColIndex = p.visibleColumns.length - 1;\r\n\r\n p.visibleColumns[lastColIndex].actualWidthConsideringScrollbarWidth = p.visibleColumns[lastColIndex].actualWidth - p.scrollbarWidth;\r\n let lastColWidth = p.visibleColumns[lastColIndex].actualWidthConsideringScrollbarWidth + 'px';\r\n let tbodyChildren = p.tbody.childNodes;\r\n for (let i = 0, count = tbodyChildren.length; i < count; i++) {\r\n let row = tbodyChildren[i];\r\n if (row.nodeType !== 1) continue;\r\n row.childNodes[lastColIndex].style.width = lastColWidth;\r\n }\r\n\r\n p.headerRow.childNodes[lastColIndex].style.width = lastColWidth;\r\n }\r\n }\r\n return this;\r\n};\r\n\r\n/**\r\n * Explicitly set the width of the table based on the sum of the column widths\r\n * @private\r\n * @param {boolean} parentSizeMayHaveChanged Parent size may have changed, treat rendering accordingly\r\n * @returns {DGTable} self\r\n */\r\nDGTable.prototype._updateTableWidth = function (parentSizeMayHaveChanged) {\r\n const o = this.o, p = this.p;\r\n let width = this._calculateTbodyWidth();\r\n\r\n p.tbody.style.minWidth = width + 'px';\r\n p.headerRow.style.minWidth = (width + (p.scrollbarWidth || 0)) + 'px';\r\n\r\n p.$table.off('scroll', p.onTableScrolledHorizontallyBound);\r\n\r\n if (o.width === DGTable.Width.AUTO) {\r\n // Update wrapper element's size to fully contain the table body\r\n\r\n setElementWidth(p.$table[0], getElementWidth(p.$tbody[0], true, true, true));\r\n setElementWidth(this.$el[0], getElementWidth(p.$table[0], true, true, true));\r\n\r\n } else if (o.width === DGTable.Width.SCROLL) {\r\n\r\n if (parentSizeMayHaveChanged) {\r\n let lastScrollTop = p.table ? p.table.scrollTop : 0,\r\n lastScrollLeft = p.table ? p.table.scrollLeft : 0;\r\n\r\n // BUGFIX: Relayout before recording the widths\r\n webkitRenderBugfix(this.el);\r\n\r\n p.table.scrollTop = lastScrollTop;\r\n p.table.scrollLeft = lastScrollLeft;\r\n p.header.scrollLeft = lastScrollLeft;\r\n }\r\n\r\n p.$table.on('scroll', p.onTableScrolledHorizontallyBound);\r\n }\r\n\r\n return this;\r\n};\r\n\r\n/**\r\n * @private\r\n * @returns {Boolean}\r\n */\r\nDGTable.prototype._isTableRtl = function() {\r\n return this.p.$table.css('direction') === 'rtl';\r\n};\r\n\r\n/**\r\n * @private\r\n * @param {Object} column column object\r\n * @returns {String}\r\n */\r\nDGTable.prototype._serializeColumnWidth = function(column) {\r\n return column.widthMode === ColumnWidthMode.AUTO ? 'auto' :\r\n column.widthMode === ColumnWidthMode.RELATIVE ? column.width * 100 + '%' :\r\n column.width;\r\n};\r\n\r\n/**\r\n * @private\r\n * @param {HTMLElement} el\r\n */\r\nDGTable.prototype._cellMouseOverEvent = function(el) {\r\n const o = this.o, p = this.p;\r\n\r\n let elInner = el.firstChild;\r\n\r\n if ((elInner.scrollWidth - elInner.clientWidth > 1) ||\r\n (elInner.scrollHeight - elInner.clientHeight > 1)) {\r\n\r\n this.hideCellPreview();\r\n p.abortCellPreview = false;\r\n\r\n let $el = $(el), $elInner = $(elInner);\r\n let previewCell = createElement('div'), $previewCell = $(previewCell);\r\n previewCell.innerHTML = el.innerHTML;\r\n previewCell.className = o.cellPreviewClassName;\r\n\r\n let isHeaderCell = $el.hasClass(o.tableClassName + '-header-cell');\r\n if (isHeaderCell) {\r\n previewCell.className += ' header';\r\n if ($el.hasClass('sortable')) {\r\n previewCell.className += ' sortable';\r\n }\r\n\r\n previewCell.draggable = true;\r\n\r\n $(previewCell).on('mousedown', this._onMouseDownColumnHeader.bind(this))\r\n .on('mousemove', this._onMouseMoveColumnHeader.bind(this))\r\n .on('mouseup', this._onMouseUpColumnHeader.bind(this))\r\n .on('mouseleave', this._onMouseLeaveColumnHeader.bind(this))\r\n .on('touchstart', this._onTouchStartColumnHeader.bind(this))\r\n .on('dragstart', this._onStartDragColumnHeader.bind(this))\r\n .on('click', this._onClickColumnHeader.bind(this))\r\n .on('contextmenu.dgtable', function (event) { event.preventDefault(); });\r\n $(previewCell.firstChild)\r\n .on('dragenter', this._onDragEnterColumnHeader.bind(this))\r\n .on('dragover', this._onDragOverColumnHeader.bind(this))\r\n .on('dragleave', this._onDragLeaveColumnHeader.bind(this))\r\n .on('drop', this._onDropColumnHeader.bind(this));\r\n\r\n if (hasIeDragAndDropBug) {\r\n $(previewCell).on('selectstart', (function(evt) {\r\n evt.preventDefault();\r\n this.dragDrop();\r\n return false;\r\n }).bind(previewCell));\r\n }\r\n }\r\n\r\n let paddingL = parseFloat($el.css('padding-left')) || 0,\r\n paddingR = parseFloat($el.css('padding-right')) || 0,\r\n paddingT = parseFloat($el.css('padding-top')) || 0,\r\n paddingB = parseFloat($el.css('padding-bottom')) || 0;\r\n\r\n let requiredWidth = elInner.scrollWidth + (el.clientWidth - elInner.offsetWidth);\r\n\r\n let borderBox = $el.css('box-sizing') === 'border-box';\r\n if (borderBox) {\r\n $previewCell.css('box-sizing', 'border-box');\r\n } else {\r\n requiredWidth -= paddingL + paddingR;\r\n $previewCell.css('margin-top', parseFloat($(el).css('border-top-width')) || 0);\r\n }\r\n\r\n if (!p.transparentBgColor1) {\r\n // Detect browser's transparent spec\r\n let tempDiv = document.createElement('div');\r\n tempDiv.style.backgroundColor = 'transparent';\r\n p.transparentBgColor1 = $(tempDiv).css('background-color');\r\n tempDiv.style.backgroundColor = 'rgba(0,0,0,0)';\r\n p.transparentBgColor2 = $(tempDiv).css('background-color');\r\n }\r\n\r\n let css = {\r\n 'box-sizing': borderBox ? 'border-box' : 'content-box',\r\n 'width': requiredWidth,\r\n 'min-height': getElementHeight($el[0]),\r\n 'padding-left': paddingL,\r\n 'padding-right': paddingR,\r\n 'padding-top': paddingT,\r\n 'padding-bottom': paddingB,\r\n 'overflow': 'hidden',\r\n 'position': 'absolute',\r\n 'z-index': '-1',\r\n 'left': '0',\r\n 'top': '0',\r\n 'cursor': 'default',\r\n };\r\n\r\n if (css) {\r\n let bgColor = $(el).css('background-color');\r\n if (bgColor === p.transparentBgColor1 || bgColor === p.transparentBgColor2) {\r\n bgColor = $(el.parentNode).css('background-color');\r\n }\r\n if (bgColor === p.transparentBgColor1 || bgColor === p.transparentBgColor2) {\r\n bgColor = '#fff';\r\n }\r\n css['background-color'] = bgColor;\r\n }\r\n\r\n $previewCell.css(css);\r\n\r\n this.el.appendChild(previewCell);\r\n\r\n $(previewCell.firstChild).css({\r\n 'direction': $elInner.css('direction'),\r\n 'white-space': $elInner.css('white-space'),\r\n });\r\n\r\n if (isHeaderCell) {\r\n // Disable these to allow our own context menu events without interruption\r\n $previewCell.css({\r\n '-webkit-touch-callout': 'none',\r\n '-webkit-user-select': 'none',\r\n '-moz-user-select': 'none',\r\n '-ms-user-select': 'none',\r\n '-o-user-select': 'none',\r\n 'user-select': 'none',\r\n });\r\n }\r\n\r\n previewCell['rowIndex'] = el.parentNode['rowIndex'];\r\n let physicalRowIndex = previewCell['physicalRowIndex'] = el.parentNode['physicalRowIndex'];\r\n previewCell['columnName'] = p.visibleColumns[nativeIndexOf.call(el.parentNode.childNodes, el)].name;\r\n\r\n try {\r\n let selection = SelectionHelper.saveSelection(el);\r\n if (selection)\r\n SelectionHelper.restoreSelection(previewCell, selection);\r\n } catch (ignored) { /* we're ok with this */ }\r\n\r\n this.trigger(\r\n 'cellpreview',\r\n previewCell.firstChild,\r\n physicalRowIndex == null ? null : physicalRowIndex,\r\n previewCell['columnName'],\r\n physicalRowIndex == null ? null : p.rows[physicalRowIndex],\r\n el,\r\n );\r\n\r\n if (p.abortCellPreview) {\r\n $previewCell.remove();\r\n return;\r\n }\r\n\r\n let $parent = this.$el;\r\n let $scrollParent = $parent[0] === window ? $(document) : $parent;\r\n\r\n let offset = $el.offset();\r\n let parentOffset = $parent.offset();\r\n let rtl = $el.css('float') === 'right';\r\n let prop = rtl ? 'right' : 'left';\r\n\r\n // Handle RTL, go from the other side\r\n if (rtl) {\r\n let windowWidth = $(window).width();\r\n offset.right = windowWidth - (offset.left + getElementWidth($el[0], true, true, true));\r\n parentOffset.right = windowWidth - (parentOffset.left + getElementWidth($parent[0], true, true, true));\r\n }\r\n\r\n // If the parent has borders, then it would offset the offset...\r\n offset.left -= parseFloat($parent.css('border-left-width')) || 0;\r\n offset.right -= parseFloat($parent.css('border-right-width')) || 0;\r\n offset.top -= parseFloat($parent.css('border-top-width')) || 0;\r\n\r\n // Handle border widths of the element being offset\r\n offset[prop] += parseFloat($(el).css('border-' + prop + '-width')) || 0;\r\n offset.top += parseFloat($(el).css('border-top-width')) || parseFloat($(el).css('border-bottom-width')) || 0;\r\n\r\n // Subtract offsets to get offset relative to parent\r\n offset.left -= parentOffset.left;\r\n offset.right -= parentOffset.right;\r\n offset.top -= parentOffset.top;\r\n\r\n // Constrain horizontally\r\n let minHorz = 0,\r\n maxHorz = $parent - getElementWidth($previewCell[0], true, true, true);\r\n offset[prop] = offset[prop] < minHorz ?\r\n minHorz :\r\n (offset[prop] > maxHorz ? maxHorz : offset[prop]);\r\n\r\n // Constrain vertically\r\n let totalHeight = getElementHeight($el[0], true, true, true);\r\n let maxTop = $scrollParent.scrollTop() + getElementHeight($parent[0], true) - totalHeight;\r\n if (offset.top > maxTop) {\r\n offset.top = Math.max(0, maxTop);\r\n }\r\n\r\n // Apply css to preview cell\r\n let previewCss = {\r\n top: offset.top,\r\n 'z-index': 9999,\r\n };\r\n previewCss[prop] = offset[prop];\r\n\r\n $previewCell.css(previewCss);\r\n\r\n previewCell['__cell'] = el;\r\n p.$cellPreviewCell = $previewCell;\r\n el['__previewCell'] = previewCell;\r\n\r\n p._bindCellHoverOut(el);\r\n p._bindCellHoverOut(previewCell);\r\n\r\n // Avoid interfering with wheel scrolling the table\r\n $previewCell.on('wheel', () => {\r\n // Let the table naturally scroll with the wheel\r\n this.hideCellPreview();\r\n });\r\n }\r\n};\r\n\r\n/**\r\n * @private\r\n * @param {HTMLElement} _el\r\n */\r\nDGTable.prototype._cellMouseOutEvent = function(_el) {\r\n this.hideCellPreview();\r\n};\r\n\r\n/**\r\n * Hides the current cell preview,\r\n * or prevents the one that is currently trying to show (in the 'cellpreview' event)\r\n * @public\r\n * @expose\r\n * @returns {DGTable} self\r\n */\r\nDGTable.prototype.hideCellPreview = function() {\r\n const p = this.p;\r\n\r\n if (p.$cellPreviewCell) {\r\n let previewCell = p.$cellPreviewCell[0];\r\n let origCell = previewCell['__cell'];\r\n let selection;\r\n\r\n try {\r\n selection = SelectionHelper.saveSelection(previewCell);\r\n } catch (ignored) { /* we're ok with this */ }\r\n\r\n p.$cellPreviewCell.remove();\r\n p._unbindCellHoverOut(origCell);\r\n p._unbindCellHoverOut(previewCell);\r\n\r\n try {\r\n if (selection)\r\n SelectionHelper.restoreSelection(origCell, selection);\r\n } catch (ignored) { /* we're ok with this */ }\r\n\r\n this.trigger('cellpreviewdestroy', previewCell.firstChild, previewCell['physicalRowIndex'], previewCell['columnName'], origCell);\r\n\r\n origCell['__previewCell'] = null;\r\n previewCell['__cell'] = null;\r\n\r\n p.$cellPreviewCell = null;\r\n p.abortCellPreview = false;\r\n } else {\r\n p.abortCellPreview = true;\r\n }\r\n\r\n return this;\r\n};\r\n\r\n// It's a shame the Google Closure Compiler does not support exposing a nested @param\r\n\r\n/**\r\n * @typedef {Object} SERIALIZED_COLUMN\r\n * @property {Number|null|undefined} [order=0]\r\n * @property {String|null|undefined} [width='auto']\r\n * @property {Boolean|null|undefined} [visible=true]\r\n * */\r\n\r\n/**\r\n * @typedef {Object} SERIALIZED_COLUMN_SORT\r\n * @property {String|null|undefined} [column='']\r\n * @property {Boolean|null|undefined} [descending=false]\r\n * */\r\n\r\n/**\r\n * @enum {ColumnWidthMode|number|undefined}\r\n * @const\r\n * @typedef {ColumnWidthMode}\r\n */\r\nconst ColumnWidthMode = {\r\n /** @const*/ AUTO: 0,\r\n /** @const*/ ABSOLUTE: 1,\r\n /** @const*/ RELATIVE: 2,\r\n};\r\n\r\n/**\r\n * @enum {DGTable.Width|String|undefined}\r\n * @const\r\n * @typedef {DGTable.Width}\r\n */\r\nDGTable.Width = {\r\n /** @const*/ NONE: 'none',\r\n /** @const*/ AUTO: 'auto',\r\n /** @const*/ SCROLL: 'scroll',\r\n};\r\n\r\n/**\r\n * @expose\r\n * @typedef {Object} COLUMN_SORT_OPTIONS\r\n * @property {String|null|undefined} column\r\n * @property {Boolean|null|undefined} [descending=false]\r\n * */\r\n\r\n/**\r\n * @expose\r\n * @typedef {Object} COLUMN_OPTIONS\r\n * @property {String|null|undefined} width\r\n * @property {String|null|undefined} name\r\n * @property {String|null|undefined} label\r\n * @property {String|null|undefined} dataPath - defaults to `name`\r\n * @property {String|null|undefined} comparePath - defaults to `dataPath`\r\n * @property {Number|String|null|undefined} comparePath\r\n * @property {Boolean|null|undefined} [resizable=true]\r\n * @property {Boolean|null|undefined} [movable=true]\r\n * @property {Boolean|null|undefined} [sortable=true]\r\n * @property {Boolean|null|undefined} [visible=true]\r\n * @property {String|null|undefined} [cellClasses]\r\n * @property {Boolean|null|undefined} [ignoreMin=false]\r\n * */\r\n\r\n/**\r\n * @typedef {Object} DGTable.Options\r\n * @property {COLUMN_OPTIONS[]} [columns]\r\n * @property {Number} [height]\r\n * @property {DGTable.Width} [width]\r\n * @property {Boolean|null|undefined} [virtualTable=true]\r\n * @property {Boolean|null|undefined} [resizableColumns=true]\r\n * @property {Boolean|null|undefined} [movableColumns=true]\r\n * @property {Number|null|undefined} [sortableColumns=1]\r\n * @property {Boolean|null|undefined} [adjustColumnWidthForSortArrow=true]\r\n * @property {Boolean|null|undefined} [relativeWidthGrowsToFillWidth=true]\r\n * @property {Boolean|null|undefined} [relativeWidthShrinksToFillWidth=false]\r\n * @property {Boolean|null|undefined} [convertColumnWidthsToRelative=false]\r\n * @property {Boolean|null|undefined} [autoFillTableWidth=false]\r\n * @property {String|null|undefined} [cellClasses]\r\n * @property {String|String[]|COLUMN_SORT_OPTIONS|COLUMN_SORT_OPTIONS[]} [sortColumn]\r\n * @property {Function|null|undefined} [cellFormatter=null]\r\n * @property {Function|null|undefined} [headerCellFormatter=null]\r\n * @property {Number|null|undefined} [rowsBufferSize=10]\r\n * @property {Number|null|undefined} [minColumnWidth=35]\r\n * @property {Number|null|undefined} [resizeAreaWidth=8]\r\n * @property {{function(string,boolean):{function(a:*,b:*):boolean}}} [onComparatorRequired]\r\n * @property {String|null|undefined} [resizerClassName=undefined]\r\n * @property {String|null|undefined} [tableClassName=undefined]\r\n * @property {Boolean|null|undefined} [allowCellPreview=true]\r\n * @property {Boolean|null|undefined} [allowHeaderCellPreview=true]\r\n * @property {String|null|undefined} [cellPreviewClassName=undefined]\r\n * @property {Boolean|null|undefined} [cellPreviewAutoBackground=true]\r\n * @property {Element|null|undefined} [el=undefined]\r\n * @property {String|null|undefined} [className=undefined]\r\n * @property {Function|null|undefined} [filter=undefined]\r\n * */\r\n\r\n/**\r\n * @typedef {{\r\n * currentTarget: Element,\r\n * data: Object.<string, *>,\r\n * delegateTarget: Element,\r\n * isDefaultPrevented: Boolean,\r\n * isImmediatePropagationStopped: Boolean,\r\n * isPropagationStopped: Boolean,\r\n * namespace: string,\r\n * originalEvent: MouseEvent|TouchEvent|Event,\r\n * pageX: Number,\r\n * pageY: Number,\r\n * preventDefault: Function,\r\n * props: Object.<string, *>,\r\n * relatedTarget: Element,\r\n * result: *,\r\n * stopImmediatePropagation: Function,\r\n * stopPropagation: Function,\r\n * target: Element,\r\n * timeStamp: Number,\r\n * type: string,\r\n * which: Number\r\n * }} jQuery_Event\r\n * */\r\n\r\nif (!$.controls) {\r\n $.controls = {};\r\n}\r\n\r\n$.controls.dgtable = DGTable;\r\n\r\nexport default DGTable;\r\n"],"names":["check","it","Math","global","globalThis","window","self","this","Function","fails","exec","error","descriptors","require$$0","Object","defineProperty","get","call","prototype","functionCall","bind","apply","arguments","$propertyIsEnumerable","propertyIsEnumerable","getOwnPropertyDescriptor","NASHORN_BUG","1","V","descriptor","enumerable","match","version","createPropertyDescriptor","bitmap","value","configurable","writable","FunctionPrototype","uncurryThis","functionUncurryThis","fn","toString","stringSlice","slice","classofRaw","require$$1","require$$2","classof","require$$3","split","indexedObject","TypeError","requireObjectCoercible","undefined","IndexedObject","toIndexedObject","isCallable","argument","isObject","aFunction","getBuiltIn","namespace","method","length","objectIsPrototypeOf","isPrototypeOf","engineUserAgent","userAgent","process","Deno","versions","v8","engineV8Version","V8_VERSION","nativeSymbol","getOwnPropertySymbols","symbol","Symbol","String","sham","useSymbolAsUid","iterator","USE_SYMBOL_AS_UID","require$$4","isSymbol","$Symbol","aCallable","tryToString","setGlobal","key","sharedStore","store","sharedModule","push","mode","copyright","toObject","hasOwnProperty","hasOwnProperty_1","hasOwn","id","postfix","random","uid","shared","NATIVE_SYMBOL","require$$5","WellKnownSymbolsStore","symbolFor","createWellKnownSymbol","withoutSetter","wellKnownSymbol","name","description","require$$6","TO_PRIMITIVE","toPrimitive","input","pref","result","func","exoticToPrim","val","valueOf","ordinaryToPrimitive","toPropertyKey","document","EXISTS","createElement","ie8DomDefine","a","DESCRIPTORS","propertyIsEnumerableModule","IE8_DOM_DEFINE","require$$7","$getOwnPropertyDescriptor","O","P","f","v8PrototypeDefineBug","anObject","V8_PROTOTYPE_DEFINE_BUG","$defineProperty","Attributes","current","definePropertyModule","createNonEnumerableProperty","object","functionToString","inspectSource","set","has","WeakMap","nativeWeakMap","test","keys","hiddenKeys","NATIVE_WEAK_MAP","require$$8","state","wmget","wmhas","wmset","metadata","facade","STATE","internalState","enforce","getterFor","TYPE","type","getDescriptor","CONFIGURABLE","CONFIGURABLE_FUNCTION_NAME","getInternalState","enforceInternalState","TEMPLATE","redefineModule","options","unsafe","simple","noTargetGet","replace","source","join","ceil","floor","toIntegerOrInfinity","number","max","min","toAbsoluteIndex","index","integer","lengthOfArrayLike","obj","createMethod","IS_INCLUDES","$this","el","fromIndex","arrayIncludes","includes","indexOf","concat","getOwnPropertyNames","names","i","internalObjectKeys","getOwnPropertyNamesModule","getOwnPropertySymbolsModule","ownKeys","getOwnPropertyDescriptorModule","replacement","isForced","feature","detection","data","normalize","POLYFILL","NATIVE","string","toLowerCase","isForced_1","redefine","copyConstructorProperties","target","exceptions","TO_STRING_TAG_SUPPORT","TO_STRING_TAG","CORRECT_ARGUMENTS","tag","tryGet","callee","createProperty","propertyKey","Array","arraySlice","start","end","k","fin","n","mergeSort","array","comparefn","middle","insertionSort","merge","element","j","left","right","llength","rlength","lindex","rindex","arraySort","firefox","engineFfVersion","engineIsIeOrEdge","webkit","engineWebkitVersion","internalSort","FF","require$$9","IE_OR_EDGE","require$$10","V8","require$$11","WEBKIT","require$$12","un$Sort","sort","FAILS_ON_UNDEFINED","FAILS_ON_NULL","STRICT_METHOD","STABLE_SORT","code","chr","fromCharCode","v","b","charAt","targetProperty","sourceProperty","TARGET","GLOBAL","STATIC","stat","forced","$","proto","itemsLength","items","arrayLength","x","y","getSortCompare","find","predicate","len","htmlEncode","text","RowCollection","collection","assign","initialize","sortColumn","add","rows","at","splice","reset","filteredCollection","filterFunc","args","row","onComparatorRequired","onSort","nativeSort","getDefaultComparator","column","descending","columnName","comparePath","pathLength","hasPath","lessVal","moreVal","leftRow","rightRow","leftVal","rightVal","ColumnCollection","silent","comparator","comparators","defaultComparator","getByOrder","order","normalizeOrder","ordered","col1","col2","getColumns","cols","getVisibleColumns","visible","getMaxOrder","moveColumn","src","dest","col","srcOrder","destOrder","CssUtil","_isTransformSupported","getSupportedTransform","prefixes","div","item","style","SelectionHelper","range","getSelection","getRangeAt","commonAncestorContainer","child","parent","parentNode","isChildOf","preSelectionRange","cloneRange","selectNodeContents","setEnd","startContainer","startOffset","savedSel","node","charIndex","nodeStack","foundStart","stop","createRange","setStart","collapse","pop","nodeType","nextCharIndex","childNodes","sel","removeAllRanges","addRange","ByColumnFilter","keyword","actualVal","caseSensitive","nativeIndexOf","jQuery","navigator","ieVersion","parseFloat","substr","hasIeDragAndDropBug","relativizeElement","$el","css","isInputElementEvent","event","tagName","DGTable","VERSION","that","o","p","events","Element","addClass","className","on","destroy","onMouseMoveResizeAreaBound","_onMouseMoveResizeArea","onEndDragColumnHeaderBound","_onEndDragColumnHeader","onTableScrolledHorizontallyBound","_onTableScrolledHorizontally","tableSkeletonNeedsRendering","virtualTable","rowsBufferSize","minColumnWidth","resizeAreaWidth","resizableColumns","movableColumns","sortableColumns","parseInt","adjustColumnWidthForSortArrow","convertColumnWidthsToRelative","autoFillTableWidth","cellClasses","resizerClassName","tableClassName","allowCellPreview","allowHeaderCellPreview","cellPreviewClassName","cellPreviewAutoBackground","width","Width","NONE","relativeWidthGrowsToFillWidth","relativeWidthShrinksToFillWidth","setCellFormatter","cellFormatter","setHeaderCellFormatter","headerCellFormatter","setFilter","filter","height","setColumns","columns","sortColumns","tmpSortColumns","dataPath","filteredRows","hoverMouseOverHandler","evt","relatedTarget","fromElement","contains","_cellMouseOverEvent","hoverMouseOutHandler","toElement","_cellMouseOutEvent","_bindCellHoverIn","addEventListener","_unbindCellHoverIn","removeEventListener","_bindCellHoverOut","_unbindCellHoverOut","attachEvent","detachEvent","eventName","callback","cb","once","off","callbacks","trigger","_parseColumnWidth","minWidth","widthSize","widthMode","ColumnWidthMode","AUTO","RELATIVE","ABSOLUTE","_initColumnFromData","columnData","parsedWidth","ignoreMin","label","resizable","sortable","movable","close","remove","__removed","$resizer","$tbody","trs","_destroyHeaderCells","_unbindCellEventsForTable","$table","empty","workerListeners","worker","listener","_deferredRender","clearTimeout","prop","headerRow","rowCount","cells","cellCount","tbody","_unbindCellEventsForRow","rowToClean","render","offsetParent","setTimeout","renderedRows","_clearSortArrows","lastScrollTop","table","scrollTop","NaN","lastScrollHorz","getScrollHorz","_renderSkeletonBase","_renderSkeletonBody","tableWidthChanged","_renderSkeletonHeaderCells","renderRows","html","append","_updateLastCellWidthFromScrollbar","_updateTableWidth","_showSortArrow","isNaN","setScrollHorz","header","_onVirtualTableScrolled","firstVisible","virtualRowHeightFirst","virtualRowHeight","lastVisible","visibleHeight","countToRemove","oldFirstVisible","oldLastVisible","tbodyChildNodes","removeChild","prepend","clearAndRender","first","last","top","rowClassName","altRowClassName","cellClassName","isDataFiltered","visibleColumns","isVirtual","colCount","colIndex","_finalWidth","actualWidthConsideringScrollbarWidth","actualWidth","bodyFragment","createDocumentFragment","virtualRowXAttr","_isTableRtl","supportedTransform","rowData","physicalRowIndex","cell","setAttribute","appendChild","innerHTML","_getHtmlForCell","position","rowIndex","_calculateVirtualHeight","virtualRowHeightLast","_calculateTbodyWidth","$row","sumActualWidth","$thisWrapper","z-index","float","overflow","appendTo","body","fractionTest","fractionValue","hasFractions","round","getElementWidth","scrollbarWidth","normalizedCols","normalizedColumn","_ensureVisibleColumns","addColumn","before","beforeColumn","to","removeColumn","colIdx","formatter","hadFilter","filterArgs","isArray","extend","clearFilter","_refilter","setColumnLabel","firstChild","textContent","visibleOnly","destCol","columnsArray","some","headerCell","$headerRow","beforePos","fromPos","insertBefore","srcWidth","destWidth","tbodyChildren","count","currentSort","_tableSkeletonNeedsRendering","sorts","resort","setColumnVisible","isColumnVisible","setMinColumnWidth","getMinColumnWidth","setSortableColumns","getSortableColumns","setMovableColumns","getMovableColumns","setResizableColumns","getResizableColumns","setComparatorCallback","comparatorCallback","setColumnWidth","oldWidth","_serializeColumnWidth","newWidth","getColumnWidth","getColumnConfig","getColumnsConfig","config","getSortedColumns","sorted","getHtmlForRowCell","getHtmlForRowDataCell","colValue","dataPathIndex","content","err","console","getRowYPos","offsetTop","getDataForRow","getRowCount","getIndexForRow","getFilteredRowCount","getIndexForFilteredRow","getDataForFilteredRow","getHeaderRowElement","_horizontalPadding","_horizontalBorderWidth","_calculateWidthAvailableForColumns","oldDisplay","lastScrollLeft","scrollLeft","display","detectedWidth","$header","$cells","$cell","getTextWidth","$tableWrapper","visibility","lastDetectedWidth","forceUpdate","renderColumns","sizeLeft","relatives","tableWidthBeforeCalculations","absWidthTotal","changedColumnIndexes","totalRelativePercentage","arrowProposedWidth","sizeLeftForRelative","clientWidth","minColumnWidthRelative","delta","extraRelative","nonResizableTotal","sizeLeftToFill","conv","tableWidth","_resizeColumnElements","tableHeightChanged","getElementHeight","addRows","firstRow","lastRow","removeRows","lastRowIndex","removeRow","refreshRow","isRowVisible","renderedRow","getRowElement","refreshAllVirtualRows","rowsToRender","setRows","getUrlForElementContent","blob","getElementById","Blob","BlobBuilder","WebKitBlobBuilder","MozBlobBuilder","MSBlobBuilder","builder","getBlob","URL","webkitURL","createObjectURL","isWorkerSupported","createWebWorker","url","Worker","postMessage","unbindWebWorker","abortCellPreview","hideCellPreview","cancelColumnResize","_getColumnByResizePosition","e","rtl","$headerCell","closest","previousElementSibling","previousSibling","firstCol","mouseX","pageX","originalEvent","clientX","offset","_onTouchStartColumnHeader","currentTouchId","startTouch","changedTouches","identifier","tapAndHoldTimeout","$eventTarget","currentTarget","startPos","pageY","currentPos","unbind","fakeEvent","Event","extendObjects","which","one","preventDefault","_event","sqrt","pow","abs","touch","_onMouseDownColumnHeader","selectedHeaderCell","commonAncestor","posCol","posRelative","resizerWidth","zIndex","ignored","_onMouseMoveColumnHeader","cursor","_onMouseUpColumnHeader","bounds","_onMouseLeaveColumnHeader","_onClickColumnHeader","_onStartDragColumnHeader","opacity","dragId","dataTransfer","setData","JSON","stringify","isBoxing","actualX","minX","baseX","sizeToSet","unNormalizedSizeToSet","_onDragEnterColumnHeader","dataTransferred","getData","parse","_onDragOverColumnHeader","_onDragLeaveColumnHeader","removeClass","_onDropColumnHeader","srcColName","destColName","srcCol","sortedColumns","arrows","arrow","scrollWidth","cellIndex","headerCells","prependTo","SCROLL","ieDragDropHandler","headerCellClassName","dragDrop","draggable","cellInside","-webkit-touch-callout","-webkit-user-select","-moz-user-select","-ms-user-select","-o-user-select","user-select","$dummyTbody","createDummyRow","cellInner","$dummyWrapper","row1","row2","row3","virtualRowHeightMin","virtualRowHeightMax","fragment","tableHeight","overflowY","overflowX","virtualVisibleRows","_renderSkeleton","force","offsetWidth","lastColIndex","lastColWidth","parentSizeMayHaveChanged","setElementWidth","offsetHeight","webkitRenderBugfix","elInner","scrollHeight","clientHeight","$elInner","previewCell","$previewCell","isHeaderCell","hasClass","paddingL","paddingR","paddingT","paddingB","requiredWidth","borderBox","transparentBgColor1","tempDiv","backgroundColor","transparentBgColor2","bgColor","selection","saveSelection","restoreSelection","$parent","$scrollParent","parentOffset","windowWidth","minHorz","maxHorz","totalHeight","maxTop","previewCss","$cellPreviewCell","_el","origCell","controls","dgtable"],"mappings":"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"}