23347 lines
1.1 MiB
23347 lines
1.1 MiB
/*!
|
||
* TOAST UI Grid
|
||
* @version 4.20.3 | Thu Feb 17 2022
|
||
* @author NHN. FE Development Lab
|
||
* @license MIT
|
||
*/
|
||
(function webpackUniversalModuleDefinition(root, factory) {
|
||
if(typeof exports === 'object' && typeof module === 'object')
|
||
module.exports = factory(require("tui-date-picker"), require("tui-pagination"), require("xlsx"));
|
||
else if(typeof define === 'function' && define.amd)
|
||
define(["tui-date-picker", "tui-pagination", "xlsx"], factory);
|
||
else if(typeof exports === 'object')
|
||
exports["Grid"] = factory(require("tui-date-picker"), require("tui-pagination"), require("xlsx"));
|
||
else
|
||
root["tui"] = root["tui"] || {}, root["tui"]["Grid"] = factory(root["tui"]["DatePicker"], root["tui"]["Pagination"], root["XLSX"]);
|
||
})(window, function(__WEBPACK_EXTERNAL_MODULE__43__, __WEBPACK_EXTERNAL_MODULE__120__, __WEBPACK_EXTERNAL_MODULE__127__) {
|
||
return /******/ (function(modules) { // webpackBootstrap
|
||
/******/ // The module cache
|
||
/******/ var installedModules = {};
|
||
/******/
|
||
/******/ // The require function
|
||
/******/ function __webpack_require__(moduleId) {
|
||
/******/
|
||
/******/ // Check if module is in cache
|
||
/******/ if(installedModules[moduleId]) {
|
||
/******/ return installedModules[moduleId].exports;
|
||
/******/ }
|
||
/******/ // Create a new module (and put it into the cache)
|
||
/******/ var module = installedModules[moduleId] = {
|
||
/******/ i: moduleId,
|
||
/******/ l: false,
|
||
/******/ exports: {}
|
||
/******/ };
|
||
/******/
|
||
/******/ // Execute the module function
|
||
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
|
||
/******/
|
||
/******/ // Flag the module as loaded
|
||
/******/ module.l = true;
|
||
/******/
|
||
/******/ // Return the exports of the module
|
||
/******/ return module.exports;
|
||
/******/ }
|
||
/******/
|
||
/******/
|
||
/******/ // expose the modules object (__webpack_modules__)
|
||
/******/ __webpack_require__.m = modules;
|
||
/******/
|
||
/******/ // expose the module cache
|
||
/******/ __webpack_require__.c = installedModules;
|
||
/******/
|
||
/******/ // define getter function for harmony exports
|
||
/******/ __webpack_require__.d = function(exports, name, getter) {
|
||
/******/ if(!__webpack_require__.o(exports, name)) {
|
||
/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
|
||
/******/ }
|
||
/******/ };
|
||
/******/
|
||
/******/ // define __esModule on exports
|
||
/******/ __webpack_require__.r = function(exports) {
|
||
/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
|
||
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
||
/******/ }
|
||
/******/ Object.defineProperty(exports, '__esModule', { value: true });
|
||
/******/ };
|
||
/******/
|
||
/******/ // create a fake namespace object
|
||
/******/ // mode & 1: value is a module id, require it
|
||
/******/ // mode & 2: merge all properties of value into the ns
|
||
/******/ // mode & 4: return value when already ns object
|
||
/******/ // mode & 8|1: behave like require
|
||
/******/ __webpack_require__.t = function(value, mode) {
|
||
/******/ if(mode & 1) value = __webpack_require__(value);
|
||
/******/ if(mode & 8) return value;
|
||
/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
|
||
/******/ var ns = Object.create(null);
|
||
/******/ __webpack_require__.r(ns);
|
||
/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
|
||
/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
|
||
/******/ return ns;
|
||
/******/ };
|
||
/******/
|
||
/******/ // getDefaultExport function for compatibility with non-harmony modules
|
||
/******/ __webpack_require__.n = function(module) {
|
||
/******/ var getter = module && module.__esModule ?
|
||
/******/ function getDefault() { return module['default']; } :
|
||
/******/ function getModuleExports() { return module; };
|
||
/******/ __webpack_require__.d(getter, 'a', getter);
|
||
/******/ return getter;
|
||
/******/ };
|
||
/******/
|
||
/******/ // Object.prototype.hasOwnProperty.call
|
||
/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
|
||
/******/
|
||
/******/ // __webpack_public_path__
|
||
/******/ __webpack_require__.p = "/dist";
|
||
/******/
|
||
/******/
|
||
/******/ // Load entry module and return exports
|
||
/******/ return __webpack_require__(__webpack_require__.s = 62);
|
||
/******/ })
|
||
/************************************************************************/
|
||
/******/ ([
|
||
/* 0 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.pixelToNumber = exports.isBetween = exports.silentSplice = exports.convertDataToText = exports.convertTextToData = exports.endsWith = exports.startsWith = exports.uniqByProp = exports.uniq = exports.pick = exports.omit = exports.pruneObject = exports.debounce = exports.convertToNumber = exports.fromArray = exports.isEmpty = exports.isNil = exports.isString = exports.isNumber = exports.isBoolean = exports.isNull = exports.isUndefined = exports.isBlank = exports.last = exports.range = exports.clamp = exports.setDefaultProp = exports.encodeHTMLEntity = exports.hasOwnProp = exports.forEachObject = exports.isObject = exports.isFunction = exports.createMapFromArray = exports.removeArrayItem = exports.assign = exports.deepCopy = exports.deepCopyArray = exports.deepMergedCopy = exports.mapProp = exports.findOffsetIndex = exports.findPrevIndex = exports.findIndexes = exports.findPropIndex = exports.findIndex = exports.someProp = exports.some = exports.findProp = exports.find = exports.includes = exports.pipe = exports.sum = exports.arrayEqual = exports.shallowEqual = void 0;
|
||
var tslib_1 = __webpack_require__(1);
|
||
var CUSTOM_LF_SUBCHAR = '___tui_grid_lf___';
|
||
var CUSTOM_CR_SUBCHAR = '___tui_grid_cr___';
|
||
var LF = '\n';
|
||
var CR = '\r';
|
||
var CUSTOM_LF_REGEXP = new RegExp(CUSTOM_LF_SUBCHAR, 'g');
|
||
var CUSTOM_CR_REGEXP = new RegExp(CUSTOM_CR_SUBCHAR, 'g');
|
||
function shallowEqual(o1, o2) {
|
||
for (var key in o1) {
|
||
if (o1[key] !== o2[key]) {
|
||
return false;
|
||
}
|
||
}
|
||
for (var key in o2) {
|
||
if (!(key in o1)) {
|
||
return false;
|
||
}
|
||
}
|
||
return true;
|
||
}
|
||
exports.shallowEqual = shallowEqual;
|
||
function arrayEqual(a1, a2) {
|
||
if (a1.length !== a2.length) {
|
||
return false;
|
||
}
|
||
for (var i = 0, len = a1.length; i < len; i += 1) {
|
||
if (a1[i] !== a2[i]) {
|
||
return false;
|
||
}
|
||
}
|
||
return true;
|
||
}
|
||
exports.arrayEqual = arrayEqual;
|
||
function sum(nums) {
|
||
return nums.reduce(function (acc, num) { return acc + num; }, 0);
|
||
}
|
||
exports.sum = sum;
|
||
function pipe(initVal) {
|
||
var args = [];
|
||
for (var _i = 1; _i < arguments.length; _i++) {
|
||
args[_i - 1] = arguments[_i];
|
||
}
|
||
return args.reduce(function (acc, fn) { return fn(acc); }, initVal);
|
||
}
|
||
exports.pipe = pipe;
|
||
function includes(arr, searchItem, searchIndex) {
|
||
if (typeof searchIndex === 'number' && arr[searchIndex] !== searchItem) {
|
||
return false;
|
||
}
|
||
for (var _i = 0, arr_1 = arr; _i < arr_1.length; _i++) {
|
||
var item = arr_1[_i];
|
||
if (item === searchItem) {
|
||
return true;
|
||
}
|
||
}
|
||
return false;
|
||
}
|
||
exports.includes = includes;
|
||
// eslint-disable-next-line consistent-return
|
||
function find(predicate, arr) {
|
||
for (var _i = 0, arr_2 = arr; _i < arr_2.length; _i++) {
|
||
var item = arr_2[_i];
|
||
if (predicate(item)) {
|
||
return item;
|
||
}
|
||
}
|
||
}
|
||
exports.find = find;
|
||
function findProp(propName, value, arr) {
|
||
return find(function (item) { return item[propName] === value; }, arr);
|
||
}
|
||
exports.findProp = findProp;
|
||
function some(predicate, arr) {
|
||
return !!find(predicate, arr);
|
||
}
|
||
exports.some = some;
|
||
function someProp(propName, value, arr) {
|
||
return !!findProp(propName, value, arr);
|
||
}
|
||
exports.someProp = someProp;
|
||
function findIndex(predicate, arr) {
|
||
for (var i = 0, len = arr.length; i < len; i += 1) {
|
||
if (predicate(arr[i])) {
|
||
return i;
|
||
}
|
||
}
|
||
return -1;
|
||
}
|
||
exports.findIndex = findIndex;
|
||
function findPropIndex(propName, value, arr) {
|
||
return findIndex(function (item) { return item[propName] === value; }, arr);
|
||
}
|
||
exports.findPropIndex = findPropIndex;
|
||
function findIndexes(predicate, arr) {
|
||
return arr.reduce(function (acc, v, idx) { return (predicate(v) ? tslib_1.__spreadArrays(acc, [idx]) : acc); }, []);
|
||
}
|
||
exports.findIndexes = findIndexes;
|
||
function findPrevIndex(arr, predicate) {
|
||
var index = findIndex(predicate, arr);
|
||
var positiveIndex = index <= 0 ? 0 : index - 1;
|
||
return index >= 0 ? positiveIndex : arr.length - 1;
|
||
}
|
||
exports.findPrevIndex = findPrevIndex;
|
||
function findOffsetIndex(offsets, targetOffset) {
|
||
return findPrevIndex(offsets, function (offset) { return offset > targetOffset; });
|
||
}
|
||
exports.findOffsetIndex = findOffsetIndex;
|
||
function mapProp(propName, arr) {
|
||
return arr.map(function (item) { return item[propName]; });
|
||
}
|
||
exports.mapProp = mapProp;
|
||
function deepMergedCopy(targetObj, obj) {
|
||
var resultObj = tslib_1.__assign({}, targetObj);
|
||
Object.keys(obj).forEach(function (prop) {
|
||
if (isObject(resultObj[prop])) {
|
||
if (Array.isArray(obj[prop])) {
|
||
resultObj[prop] = deepCopyArray(obj[prop]);
|
||
}
|
||
else if (resultObj.hasOwnProperty(prop)) {
|
||
resultObj[prop] = deepMergedCopy(resultObj[prop], obj[prop]);
|
||
}
|
||
else {
|
||
resultObj[prop] = deepCopy(obj[prop]);
|
||
}
|
||
}
|
||
else {
|
||
resultObj[prop] = obj[prop];
|
||
}
|
||
});
|
||
return resultObj;
|
||
}
|
||
exports.deepMergedCopy = deepMergedCopy;
|
||
function deepCopyArray(items) {
|
||
return items.map(function (item) {
|
||
if (isObject(item)) {
|
||
return Array.isArray(item) ? deepCopyArray(item) : deepCopy(item);
|
||
}
|
||
return item;
|
||
});
|
||
}
|
||
exports.deepCopyArray = deepCopyArray;
|
||
function deepCopy(obj) {
|
||
var resultObj = {};
|
||
var keys = Object.keys(obj);
|
||
if (!keys.length) {
|
||
return obj;
|
||
}
|
||
keys.forEach(function (prop) {
|
||
if (isObject(obj[prop])) {
|
||
resultObj[prop] = Array.isArray(obj[prop]) ? deepCopyArray(obj[prop]) : deepCopy(obj[prop]);
|
||
}
|
||
else {
|
||
resultObj[prop] = obj[prop];
|
||
}
|
||
});
|
||
return resultObj;
|
||
}
|
||
exports.deepCopy = deepCopy;
|
||
function assign(targetObj, obj) {
|
||
Object.keys(obj).forEach(function (prop) {
|
||
if (targetObj.hasOwnProperty(prop) && typeof targetObj[prop] === 'object') {
|
||
if (Array.isArray(obj[prop])) {
|
||
targetObj[prop] = obj[prop];
|
||
}
|
||
else {
|
||
assign(targetObj[prop], obj[prop]);
|
||
}
|
||
}
|
||
else {
|
||
targetObj[prop] = obj[prop];
|
||
}
|
||
});
|
||
}
|
||
exports.assign = assign;
|
||
function removeArrayItem(targetItem, arr) {
|
||
var targetIdx = findIndex(function (item) { return item === targetItem; }, arr);
|
||
if (targetIdx !== -1) {
|
||
arr.splice(targetIdx, 1);
|
||
}
|
||
return arr;
|
||
}
|
||
exports.removeArrayItem = removeArrayItem;
|
||
function createMapFromArray(arr, propName) {
|
||
var resultMap = {};
|
||
arr.forEach(function (item) {
|
||
var key = String(item[propName]);
|
||
resultMap[key] = item;
|
||
});
|
||
return resultMap;
|
||
}
|
||
exports.createMapFromArray = createMapFromArray;
|
||
function isFunction(obj) {
|
||
return typeof obj === 'function';
|
||
}
|
||
exports.isFunction = isFunction;
|
||
function isObject(obj) {
|
||
return typeof obj === 'object' && obj !== null;
|
||
}
|
||
exports.isObject = isObject;
|
||
function forEachObject(fn, obj) {
|
||
for (var key in obj) {
|
||
if (obj.hasOwnProperty(key)) {
|
||
fn(obj[key], key, obj);
|
||
}
|
||
}
|
||
}
|
||
exports.forEachObject = forEachObject;
|
||
function hasOwnProp(obj, key) {
|
||
return obj.hasOwnProperty(key);
|
||
}
|
||
exports.hasOwnProp = hasOwnProp;
|
||
function encodeHTMLEntity(html) {
|
||
var entities = {
|
||
'"': 'quot',
|
||
'&': 'amp',
|
||
'<': 'lt',
|
||
'>': 'gt',
|
||
"'": '#39',
|
||
};
|
||
return html.replace(/[<>&"']/g, function (match) { return "&" + entities[match] + ";"; });
|
||
}
|
||
exports.encodeHTMLEntity = encodeHTMLEntity;
|
||
function setDefaultProp(obj, key, defValue) {
|
||
if (isUndefined(obj[key]) || isNull(obj[key])) {
|
||
obj[key] = defValue;
|
||
}
|
||
}
|
||
exports.setDefaultProp = setDefaultProp;
|
||
/**
|
||
* Returns a number whose value is limited to the given range.
|
||
* @param value - A number to force within given min-max range
|
||
* @param min - The lower boundary of the output range
|
||
* @param max - The upper boundary of the output range
|
||
* @returns A number in the range [min, max]
|
||
* @example
|
||
* // limit the output of this computation to between 0 and 255
|
||
* value = clamp(value, 0, 255);
|
||
*/
|
||
function clamp(value, min, max) {
|
||
var _a;
|
||
if (min > max) {
|
||
_a = [min, max], max = _a[0], min = _a[1];
|
||
}
|
||
return Math.max(min, Math.min(value, max));
|
||
}
|
||
exports.clamp = clamp;
|
||
function range(end) {
|
||
var arr = [];
|
||
for (var i = 0; i < end; i += 1) {
|
||
arr.push(i);
|
||
}
|
||
return arr;
|
||
}
|
||
exports.range = range;
|
||
function last(arr) {
|
||
return arr[arr.length - 1];
|
||
}
|
||
exports.last = last;
|
||
function isBlank(value) {
|
||
if (typeof value === 'string') {
|
||
return !value.length;
|
||
}
|
||
return typeof value === 'undefined' || value === null;
|
||
}
|
||
exports.isBlank = isBlank;
|
||
function isUndefined(value) {
|
||
return typeof value === 'undefined';
|
||
}
|
||
exports.isUndefined = isUndefined;
|
||
function isNull(value) {
|
||
return value === null;
|
||
}
|
||
exports.isNull = isNull;
|
||
function isBoolean(value) {
|
||
return typeof value === 'boolean';
|
||
}
|
||
exports.isBoolean = isBoolean;
|
||
function isNumber(value) {
|
||
return typeof value === 'number';
|
||
}
|
||
exports.isNumber = isNumber;
|
||
function isString(value) {
|
||
return typeof value === 'string';
|
||
}
|
||
exports.isString = isString;
|
||
function isNil(value) {
|
||
return isUndefined(value) || isNull(value);
|
||
}
|
||
exports.isNil = isNil;
|
||
/**
|
||
* check the emptiness(included null) of object or array. if obj parameter is null or undefind, return true
|
||
* @param obj - target object or array
|
||
* @returns the emptiness of obj
|
||
*/
|
||
function isEmpty(obj) {
|
||
return (isNull(obj) ||
|
||
isUndefined(obj) ||
|
||
(!isUndefined(obj.length) && obj.length === 0) ||
|
||
Object.keys(obj).length === 0);
|
||
}
|
||
exports.isEmpty = isEmpty;
|
||
function fromArray(value) {
|
||
return Array.prototype.slice.call(value);
|
||
}
|
||
exports.fromArray = fromArray;
|
||
function convertToNumber(value) {
|
||
if (typeof value === 'number' || isNaN(value) || isBlank(value)) {
|
||
return value;
|
||
}
|
||
return Number(value);
|
||
}
|
||
exports.convertToNumber = convertToNumber;
|
||
function debounce(fn, wait, immediate) {
|
||
if (immediate === void 0) { immediate = false; }
|
||
var timeout = null;
|
||
return function () {
|
||
var args = [];
|
||
for (var _i = 0; _i < arguments.length; _i++) {
|
||
args[_i] = arguments[_i];
|
||
}
|
||
var later = function () {
|
||
timeout = -1;
|
||
if (!immediate) {
|
||
fn.apply(void 0, args);
|
||
}
|
||
};
|
||
var callNow = immediate && !timeout;
|
||
if (timeout) {
|
||
clearTimeout(timeout);
|
||
}
|
||
timeout = window.setTimeout(later, wait);
|
||
if (callNow) {
|
||
fn.apply(void 0, args);
|
||
}
|
||
};
|
||
}
|
||
exports.debounce = debounce;
|
||
function pruneObject(obj) {
|
||
var pruned = {};
|
||
forEachObject(function (value, key) {
|
||
if (!isUndefined(value) && !isNull(value)) {
|
||
pruned[key] = value;
|
||
}
|
||
}, obj);
|
||
return pruned;
|
||
}
|
||
exports.pruneObject = pruneObject;
|
||
function omit(obj) {
|
||
var propNames = [];
|
||
for (var _i = 1; _i < arguments.length; _i++) {
|
||
propNames[_i - 1] = arguments[_i];
|
||
}
|
||
var resultMap = {};
|
||
Object.keys(obj).forEach(function (key) {
|
||
if (!includes(propNames, key)) {
|
||
resultMap[key] = obj[key];
|
||
}
|
||
});
|
||
return resultMap;
|
||
}
|
||
exports.omit = omit;
|
||
function pick(obj) {
|
||
var propNames = [];
|
||
for (var _i = 1; _i < arguments.length; _i++) {
|
||
propNames[_i - 1] = arguments[_i];
|
||
}
|
||
var resultMap = {};
|
||
Object.keys(obj).forEach(function (key) {
|
||
if (includes(propNames, key)) {
|
||
resultMap[key] = obj[key];
|
||
}
|
||
});
|
||
return resultMap;
|
||
}
|
||
exports.pick = pick;
|
||
function uniq(arr) {
|
||
return arr.filter(function (name, index) { return arr.indexOf(name) === index; });
|
||
}
|
||
exports.uniq = uniq;
|
||
function uniqByProp(propName, arr) {
|
||
return arr.filter(function (obj, index) { return findPropIndex(propName, obj[propName], arr) === index; });
|
||
}
|
||
exports.uniqByProp = uniqByProp;
|
||
function startsWith(str, targetStr) {
|
||
return targetStr.slice(0, str.length) === str;
|
||
}
|
||
exports.startsWith = startsWith;
|
||
function endsWith(str, targetStr) {
|
||
var index = targetStr.lastIndexOf(str);
|
||
return index !== -1 && index + str.length === targetStr.length;
|
||
}
|
||
exports.endsWith = endsWith;
|
||
function removeDoubleQuotes(text) {
|
||
if (text.match(CUSTOM_LF_REGEXP)) {
|
||
return text.substring(1, text.length - 1).replace(/""/g, '"');
|
||
}
|
||
return text;
|
||
}
|
||
function replaceNewlineToSubchar(text) {
|
||
return text.replace(/"([^"]|"")*"/g, function (value) {
|
||
return value.replace(LF, CUSTOM_LF_SUBCHAR).replace(CR, CUSTOM_CR_SUBCHAR);
|
||
});
|
||
}
|
||
function convertTextToData(text) {
|
||
// Each newline cell data is wrapping double quotes in the text and
|
||
// newline characters should be replaced with substitution characters temporarily
|
||
// before spliting the text by newline characters.
|
||
text = replaceNewlineToSubchar(text);
|
||
return text
|
||
.split(/\r?\n/)
|
||
.map(function (row) {
|
||
return row
|
||
.split('\t')
|
||
.map(function (column) {
|
||
return removeDoubleQuotes(column).replace(CUSTOM_LF_REGEXP, LF).replace(CUSTOM_CR_REGEXP, CR);
|
||
});
|
||
});
|
||
}
|
||
exports.convertTextToData = convertTextToData;
|
||
function convertDataToText(data, delimiter) {
|
||
return data.map(function (row) { return "\"" + row.join("\"" + delimiter + "\"") + "\""; }).join('\n');
|
||
}
|
||
exports.convertDataToText = convertDataToText;
|
||
function silentSplice(arr, start, deleteCount) {
|
||
var _a;
|
||
var items = [];
|
||
for (var _i = 3; _i < arguments.length; _i++) {
|
||
items[_i - 3] = arguments[_i];
|
||
}
|
||
return (_a = Array.prototype.splice).call.apply(_a, tslib_1.__spreadArrays([arr, start, deleteCount], items));
|
||
}
|
||
exports.silentSplice = silentSplice;
|
||
function isBetween(value, start, end) {
|
||
return start <= value && value <= end;
|
||
}
|
||
exports.isBetween = isBetween;
|
||
function pixelToNumber(pixelString) {
|
||
var regExp = new RegExp(/[0-9]+px/);
|
||
return regExp.test(pixelString) ? parseInt(pixelString.replace('px', ''), 10) : 0;
|
||
}
|
||
exports.pixelToNumber = pixelToNumber;
|
||
|
||
|
||
/***/ }),
|
||
/* 1 */
|
||
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
||
|
||
"use strict";
|
||
__webpack_require__.r(__webpack_exports__);
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__extends", function() { return __extends; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__assign", function() { return __assign; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__rest", function() { return __rest; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__decorate", function() { return __decorate; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__param", function() { return __param; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__metadata", function() { return __metadata; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__awaiter", function() { return __awaiter; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__generator", function() { return __generator; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__exportStar", function() { return __exportStar; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__values", function() { return __values; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__read", function() { return __read; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__spread", function() { return __spread; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__spreadArrays", function() { return __spreadArrays; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__await", function() { return __await; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__asyncGenerator", function() { return __asyncGenerator; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__asyncDelegator", function() { return __asyncDelegator; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__asyncValues", function() { return __asyncValues; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__makeTemplateObject", function() { return __makeTemplateObject; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__importStar", function() { return __importStar; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__importDefault", function() { return __importDefault; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__classPrivateFieldGet", function() { return __classPrivateFieldGet; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__classPrivateFieldSet", function() { return __classPrivateFieldSet; });
|
||
/*! *****************************************************************************
|
||
Copyright (c) Microsoft Corporation. All rights reserved.
|
||
Licensed under the Apache License, Version 2.0 (the "License"); you may not use
|
||
this file except in compliance with the License. You may obtain a copy of the
|
||
License at http://www.apache.org/licenses/LICENSE-2.0
|
||
|
||
THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||
KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED
|
||
WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,
|
||
MERCHANTABLITY OR NON-INFRINGEMENT.
|
||
|
||
See the Apache Version 2.0 License for specific language governing permissions
|
||
and limitations under the License.
|
||
***************************************************************************** */
|
||
/* global Reflect, Promise */
|
||
|
||
var extendStatics = function(d, b) {
|
||
extendStatics = Object.setPrototypeOf ||
|
||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
|
||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
|
||
return extendStatics(d, b);
|
||
};
|
||
|
||
function __extends(d, b) {
|
||
extendStatics(d, b);
|
||
function __() { this.constructor = d; }
|
||
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
||
}
|
||
|
||
var __assign = function() {
|
||
__assign = Object.assign || function __assign(t) {
|
||
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
||
s = arguments[i];
|
||
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
|
||
}
|
||
return t;
|
||
}
|
||
return __assign.apply(this, arguments);
|
||
}
|
||
|
||
function __rest(s, e) {
|
||
var t = {};
|
||
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
||
t[p] = s[p];
|
||
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
||
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
||
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
||
t[p[i]] = s[p[i]];
|
||
}
|
||
return t;
|
||
}
|
||
|
||
function __decorate(decorators, target, key, desc) {
|
||
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
||
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
||
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
||
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
||
}
|
||
|
||
function __param(paramIndex, decorator) {
|
||
return function (target, key) { decorator(target, key, paramIndex); }
|
||
}
|
||
|
||
function __metadata(metadataKey, metadataValue) {
|
||
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(metadataKey, metadataValue);
|
||
}
|
||
|
||
function __awaiter(thisArg, _arguments, P, generator) {
|
||
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
||
return new (P || (P = Promise))(function (resolve, reject) {
|
||
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
||
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
||
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
||
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
||
});
|
||
}
|
||
|
||
function __generator(thisArg, body) {
|
||
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
||
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
||
function verb(n) { return function (v) { return step([n, v]); }; }
|
||
function step(op) {
|
||
if (f) throw new TypeError("Generator is already executing.");
|
||
while (_) try {
|
||
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
||
if (y = 0, t) op = [op[0] & 2, t.value];
|
||
switch (op[0]) {
|
||
case 0: case 1: t = op; break;
|
||
case 4: _.label++; return { value: op[1], done: false };
|
||
case 5: _.label++; y = op[1]; op = [0]; continue;
|
||
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
||
default:
|
||
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
||
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
||
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
||
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
||
if (t[2]) _.ops.pop();
|
||
_.trys.pop(); continue;
|
||
}
|
||
op = body.call(thisArg, _);
|
||
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
||
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
||
}
|
||
}
|
||
|
||
function __exportStar(m, exports) {
|
||
for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];
|
||
}
|
||
|
||
function __values(o) {
|
||
var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
|
||
if (m) return m.call(o);
|
||
if (o && typeof o.length === "number") return {
|
||
next: function () {
|
||
if (o && i >= o.length) o = void 0;
|
||
return { value: o && o[i++], done: !o };
|
||
}
|
||
};
|
||
throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
|
||
}
|
||
|
||
function __read(o, n) {
|
||
var m = typeof Symbol === "function" && o[Symbol.iterator];
|
||
if (!m) return o;
|
||
var i = m.call(o), r, ar = [], e;
|
||
try {
|
||
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
|
||
}
|
||
catch (error) { e = { error: error }; }
|
||
finally {
|
||
try {
|
||
if (r && !r.done && (m = i["return"])) m.call(i);
|
||
}
|
||
finally { if (e) throw e.error; }
|
||
}
|
||
return ar;
|
||
}
|
||
|
||
function __spread() {
|
||
for (var ar = [], i = 0; i < arguments.length; i++)
|
||
ar = ar.concat(__read(arguments[i]));
|
||
return ar;
|
||
}
|
||
|
||
function __spreadArrays() {
|
||
for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
|
||
for (var r = Array(s), k = 0, i = 0; i < il; i++)
|
||
for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
|
||
r[k] = a[j];
|
||
return r;
|
||
};
|
||
|
||
function __await(v) {
|
||
return this instanceof __await ? (this.v = v, this) : new __await(v);
|
||
}
|
||
|
||
function __asyncGenerator(thisArg, _arguments, generator) {
|
||
if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
|
||
var g = generator.apply(thisArg, _arguments || []), i, q = [];
|
||
return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i;
|
||
function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }
|
||
function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }
|
||
function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }
|
||
function fulfill(value) { resume("next", value); }
|
||
function reject(value) { resume("throw", value); }
|
||
function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }
|
||
}
|
||
|
||
function __asyncDelegator(o) {
|
||
var i, p;
|
||
return i = {}, verb("next"), verb("throw", function (e) { throw e; }), verb("return"), i[Symbol.iterator] = function () { return this; }, i;
|
||
function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : f ? f(v) : v; } : f; }
|
||
}
|
||
|
||
function __asyncValues(o) {
|
||
if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
|
||
var m = o[Symbol.asyncIterator], i;
|
||
return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i);
|
||
function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }
|
||
function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }
|
||
}
|
||
|
||
function __makeTemplateObject(cooked, raw) {
|
||
if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; }
|
||
return cooked;
|
||
};
|
||
|
||
function __importStar(mod) {
|
||
if (mod && mod.__esModule) return mod;
|
||
var result = {};
|
||
if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
|
||
result.default = mod;
|
||
return result;
|
||
}
|
||
|
||
function __importDefault(mod) {
|
||
return (mod && mod.__esModule) ? mod : { default: mod };
|
||
}
|
||
|
||
function __classPrivateFieldGet(receiver, privateMap) {
|
||
if (!privateMap.has(receiver)) {
|
||
throw new TypeError("attempted to get private field on non-instance");
|
||
}
|
||
return privateMap.get(receiver);
|
||
}
|
||
|
||
function __classPrivateFieldSet(receiver, privateMap, value) {
|
||
if (!privateMap.has(receiver)) {
|
||
throw new TypeError("attempted to set private field on non-instance");
|
||
}
|
||
privateMap.set(receiver, value);
|
||
return value;
|
||
}
|
||
|
||
|
||
/***/ }),
|
||
/* 2 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.getComputedFontStyle = exports.getTextWidth = exports.setClipboardSelection = exports.isSupportWindowClipboardData = exports.convertTableToData = exports.getCoordinateWithOffset = exports.setCursorStyle = exports.appendStyleElement = exports.getCellAddress = exports.isParentExistWithClassNames = exports.findParentByClassName = exports.findParentByTagName = exports.hasClass = exports.isDatePickerElement = exports.cls = exports.dataAttr = void 0;
|
||
var common_1 = __webpack_require__(0);
|
||
var CLS_PREFIX = 'tui-grid-';
|
||
exports.dataAttr = {
|
||
ROW_KEY: 'data-row-key',
|
||
COLUMN_NAME: 'data-column-name',
|
||
COLUMN_INDEX: 'data-column-index',
|
||
GRID_ID: 'data-grid-id',
|
||
};
|
||
function cls() {
|
||
var names = [];
|
||
for (var _i = 0; _i < arguments.length; _i++) {
|
||
names[_i] = arguments[_i];
|
||
}
|
||
var result = [];
|
||
for (var _a = 0, names_1 = names; _a < names_1.length; _a++) {
|
||
var name = names_1[_a];
|
||
var className = void 0;
|
||
if (Array.isArray(name)) {
|
||
className = name[0] ? name[1] : null;
|
||
}
|
||
else {
|
||
className = name;
|
||
}
|
||
if (className) {
|
||
result.push("" + CLS_PREFIX + className);
|
||
}
|
||
}
|
||
return result.join(' ');
|
||
}
|
||
exports.cls = cls;
|
||
function isSvgElement(el) {
|
||
var _a;
|
||
return ((_a = el.namespaceURI) === null || _a === void 0 ? void 0 : _a.indexOf('svg')) !== -1;
|
||
}
|
||
function isDatePickerElement(el) {
|
||
var currentEl = el;
|
||
if (isSvgElement(el)) {
|
||
return false;
|
||
}
|
||
while (currentEl && currentEl.className.split(' ').indexOf('tui-datepicker') === -1) {
|
||
currentEl = currentEl.parentElement;
|
||
}
|
||
return !!currentEl;
|
||
}
|
||
exports.isDatePickerElement = isDatePickerElement;
|
||
function hasClass(el, className) {
|
||
return !isSvgElement(el) && el.className.split(' ').indexOf(cls(className)) !== -1;
|
||
}
|
||
exports.hasClass = hasClass;
|
||
function findParentByTagName(el, tagName) {
|
||
var currentEl = el;
|
||
while (currentEl && currentEl.tagName.toLowerCase() !== tagName) {
|
||
currentEl = currentEl.parentElement;
|
||
}
|
||
return currentEl;
|
||
}
|
||
exports.findParentByTagName = findParentByTagName;
|
||
function findParentByClassName(el, className) {
|
||
var currentEl = el;
|
||
while (currentEl && !hasClass(currentEl, className)) {
|
||
currentEl = currentEl.parentElement;
|
||
}
|
||
return currentEl;
|
||
}
|
||
exports.findParentByClassName = findParentByClassName;
|
||
function isParentExistWithClassNames(el, classNames) {
|
||
return classNames.some(function (className) { return !common_1.isNull(findParentByClassName(el, className)); });
|
||
}
|
||
exports.isParentExistWithClassNames = isParentExistWithClassNames;
|
||
function getCellAddress(el) {
|
||
var cellElement = findParentByTagName(el, 'td');
|
||
if (!cellElement) {
|
||
return null;
|
||
}
|
||
var rowKey = cellElement.getAttribute(exports.dataAttr.ROW_KEY);
|
||
var columnName = cellElement.getAttribute(exports.dataAttr.COLUMN_NAME);
|
||
if (common_1.isNull(rowKey)) {
|
||
return null;
|
||
}
|
||
return {
|
||
rowKey: Number(rowKey),
|
||
columnName: columnName,
|
||
};
|
||
}
|
||
exports.getCellAddress = getCellAddress;
|
||
/**
|
||
* create style element and append it into the head element.
|
||
* @param {String} id - element id
|
||
* @param {String} cssString - css string
|
||
*/
|
||
function appendStyleElement(id, cssString) {
|
||
var style = document.createElement('style');
|
||
style.type = 'text/css';
|
||
style.id = id;
|
||
style.appendChild(document.createTextNode(cssString));
|
||
document.getElementsByTagName('head')[0].appendChild(style);
|
||
}
|
||
exports.appendStyleElement = appendStyleElement;
|
||
function setCursorStyle(type) {
|
||
document.body.style.cursor = type;
|
||
}
|
||
exports.setCursorStyle = setCursorStyle;
|
||
function getCoordinateWithOffset(pageX, pageY) {
|
||
var pageXWithOffset = pageX - window.pageXOffset;
|
||
var pageYWithOffset = pageY - window.pageYOffset;
|
||
return [pageXWithOffset, pageYWithOffset];
|
||
}
|
||
exports.getCoordinateWithOffset = getCoordinateWithOffset;
|
||
function setDataInSpanRange(value, data, colspanRange, rowspanRange) {
|
||
var startColspan = colspanRange[0], endColspan = colspanRange[1];
|
||
var startRowspan = rowspanRange[0], endRowspan = rowspanRange[1];
|
||
for (var rowIdx = startRowspan; rowIdx < endRowspan; rowIdx += 1) {
|
||
for (var columnIdx = startColspan; columnIdx < endColspan; columnIdx += 1) {
|
||
data[rowIdx][columnIdx] = startRowspan === rowIdx && startColspan === columnIdx ? value : ' ';
|
||
}
|
||
}
|
||
}
|
||
function convertTableToData(rows) {
|
||
var data = [];
|
||
var colspanRange, rowspanRange;
|
||
for (var index = 0; index < rows.length; index += 1) {
|
||
data[index] = [];
|
||
}
|
||
common_1.fromArray(rows).forEach(function (tr, rowIndex) {
|
||
var columnIndex = 0;
|
||
common_1.fromArray(tr.cells).forEach(function (td) {
|
||
var text = td.textContent || td.innerText;
|
||
while (data[rowIndex][columnIndex]) {
|
||
columnIndex += 1;
|
||
}
|
||
colspanRange = [columnIndex, columnIndex + (td.colSpan || 1)];
|
||
rowspanRange = [rowIndex, rowIndex + (td.rowSpan || 1)];
|
||
setDataInSpanRange(text, data, colspanRange, rowspanRange);
|
||
columnIndex = colspanRange[1];
|
||
});
|
||
});
|
||
return data;
|
||
}
|
||
exports.convertTableToData = convertTableToData;
|
||
function isSupportWindowClipboardData() {
|
||
return !!window.clipboardData;
|
||
}
|
||
exports.isSupportWindowClipboardData = isSupportWindowClipboardData;
|
||
function setClipboardSelection(node) {
|
||
if (node) {
|
||
var range = document.createRange();
|
||
var selection = window.getSelection();
|
||
selection.removeAllRanges();
|
||
range.selectNodeContents(node);
|
||
selection.addRange(range);
|
||
}
|
||
}
|
||
exports.setClipboardSelection = setClipboardSelection;
|
||
function getTextWidth(text, font) {
|
||
var context = document.createElement('canvas').getContext('2d');
|
||
context.font = font;
|
||
var width = context.measureText(String(text)).width;
|
||
return Math.ceil(width);
|
||
}
|
||
exports.getTextWidth = getTextWidth;
|
||
function getComputedFontStyle(selector) {
|
||
var firstCellNode = document.querySelector("." + cls(selector));
|
||
var walker = document.createTreeWalker(firstCellNode, 4);
|
||
var node = firstCellNode;
|
||
while (walker.nextNode()) {
|
||
node = walker.currentNode;
|
||
if (node.nodeType === 3) {
|
||
node = node.parentElement;
|
||
break;
|
||
}
|
||
}
|
||
var compStyle = getComputedStyle(node);
|
||
var fontSize = compStyle.getPropertyValue('font-size');
|
||
var fontWeight = compStyle.getPropertyValue('font-weight');
|
||
var fontFamily = compStyle.getPropertyValue('font-family');
|
||
return fontWeight + " " + fontSize + " " + fontFamily;
|
||
}
|
||
exports.getComputedFontStyle = getComputedFontStyle;
|
||
|
||
|
||
/***/ }),
|
||
/* 3 */
|
||
/***/ (function(__webpack_module__, __webpack_exports__, __webpack_require__) {
|
||
|
||
"use strict";
|
||
__webpack_require__.r(__webpack_exports__);
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "h", function() { return h; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createElement", function() { return h; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "cloneElement", function() { return cloneElement; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createRef", function() { return createRef; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Component", function() { return Component; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "rerender", function() { return rerender; });
|
||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "options", function() { return options; });
|
||
var VNode = function VNode() {};
|
||
|
||
var options = {};
|
||
|
||
var stack = [];
|
||
|
||
var EMPTY_CHILDREN = [];
|
||
|
||
function h(nodeName, attributes) {
|
||
var children = EMPTY_CHILDREN,
|
||
lastSimple,
|
||
child,
|
||
simple,
|
||
i;
|
||
for (i = arguments.length; i-- > 2;) {
|
||
stack.push(arguments[i]);
|
||
}
|
||
if (attributes && attributes.children != null) {
|
||
if (!stack.length) stack.push(attributes.children);
|
||
delete attributes.children;
|
||
}
|
||
while (stack.length) {
|
||
if ((child = stack.pop()) && child.pop !== undefined) {
|
||
for (i = child.length; i--;) {
|
||
stack.push(child[i]);
|
||
}
|
||
} else {
|
||
if (typeof child === 'boolean') child = null;
|
||
|
||
if (simple = typeof nodeName !== 'function') {
|
||
if (child == null) child = '';else if (typeof child === 'number') child = String(child);else if (typeof child !== 'string') simple = false;
|
||
}
|
||
|
||
if (simple && lastSimple) {
|
||
children[children.length - 1] += child;
|
||
} else if (children === EMPTY_CHILDREN) {
|
||
children = [child];
|
||
} else {
|
||
children.push(child);
|
||
}
|
||
|
||
lastSimple = simple;
|
||
}
|
||
}
|
||
|
||
var p = new VNode();
|
||
p.nodeName = nodeName;
|
||
p.children = children;
|
||
p.attributes = attributes == null ? undefined : attributes;
|
||
p.key = attributes == null ? undefined : attributes.key;
|
||
|
||
if (options.vnode !== undefined) options.vnode(p);
|
||
|
||
return p;
|
||
}
|
||
|
||
function extend(obj, props) {
|
||
for (var i in props) {
|
||
obj[i] = props[i];
|
||
}return obj;
|
||
}
|
||
|
||
function applyRef(ref, value) {
|
||
if (ref != null) {
|
||
if (typeof ref == 'function') ref(value);else ref.current = value;
|
||
}
|
||
}
|
||
|
||
var defer = typeof Promise == 'function' ? Promise.resolve().then.bind(Promise.resolve()) : setTimeout;
|
||
|
||
function cloneElement(vnode, props) {
|
||
return h(vnode.nodeName, extend(extend({}, vnode.attributes), props), arguments.length > 2 ? [].slice.call(arguments, 2) : vnode.children);
|
||
}
|
||
|
||
var IS_NON_DIMENSIONAL = /acit|ex(?:s|g|n|p|$)|rph|ows|mnc|ntw|ine[ch]|zoo|^ord/i;
|
||
|
||
var items = [];
|
||
|
||
function enqueueRender(component) {
|
||
if (!component._dirty && (component._dirty = true) && items.push(component) == 1) {
|
||
(options.debounceRendering || defer)(rerender);
|
||
}
|
||
}
|
||
|
||
function rerender() {
|
||
var p;
|
||
while (p = items.pop()) {
|
||
if (p._dirty) renderComponent(p);
|
||
}
|
||
}
|
||
|
||
function isSameNodeType(node, vnode, hydrating) {
|
||
if (typeof vnode === 'string' || typeof vnode === 'number') {
|
||
return node.splitText !== undefined;
|
||
}
|
||
if (typeof vnode.nodeName === 'string') {
|
||
return !node._componentConstructor && isNamedNode(node, vnode.nodeName);
|
||
}
|
||
return hydrating || node._componentConstructor === vnode.nodeName;
|
||
}
|
||
|
||
function isNamedNode(node, nodeName) {
|
||
return node.normalizedNodeName === nodeName || node.nodeName.toLowerCase() === nodeName.toLowerCase();
|
||
}
|
||
|
||
function getNodeProps(vnode) {
|
||
var props = extend({}, vnode.attributes);
|
||
props.children = vnode.children;
|
||
|
||
var defaultProps = vnode.nodeName.defaultProps;
|
||
if (defaultProps !== undefined) {
|
||
for (var i in defaultProps) {
|
||
if (props[i] === undefined) {
|
||
props[i] = defaultProps[i];
|
||
}
|
||
}
|
||
}
|
||
|
||
return props;
|
||
}
|
||
|
||
function createNode(nodeName, isSvg) {
|
||
var node = isSvg ? document.createElementNS('http://www.w3.org/2000/svg', nodeName) : document.createElement(nodeName);
|
||
node.normalizedNodeName = nodeName;
|
||
return node;
|
||
}
|
||
|
||
function removeNode(node) {
|
||
var parentNode = node.parentNode;
|
||
if (parentNode) parentNode.removeChild(node);
|
||
}
|
||
|
||
function setAccessor(node, name, old, value, isSvg) {
|
||
if (name === 'className') name = 'class';
|
||
|
||
if (name === 'key') {} else if (name === 'ref') {
|
||
applyRef(old, null);
|
||
applyRef(value, node);
|
||
} else if (name === 'class' && !isSvg) {
|
||
node.className = value || '';
|
||
} else if (name === 'style') {
|
||
if (!value || typeof value === 'string' || typeof old === 'string') {
|
||
node.style.cssText = value || '';
|
||
}
|
||
if (value && typeof value === 'object') {
|
||
if (typeof old !== 'string') {
|
||
for (var i in old) {
|
||
if (!(i in value)) node.style[i] = '';
|
||
}
|
||
}
|
||
for (var i in value) {
|
||
node.style[i] = typeof value[i] === 'number' && IS_NON_DIMENSIONAL.test(i) === false ? value[i] + 'px' : value[i];
|
||
}
|
||
}
|
||
} else if (name === 'dangerouslySetInnerHTML') {
|
||
if (value) node.innerHTML = value.__html || '';
|
||
} else if (name[0] == 'o' && name[1] == 'n') {
|
||
var useCapture = name !== (name = name.replace(/Capture$/, ''));
|
||
name = name.toLowerCase().substring(2);
|
||
if (value) {
|
||
if (!old) node.addEventListener(name, eventProxy, useCapture);
|
||
} else {
|
||
node.removeEventListener(name, eventProxy, useCapture);
|
||
}
|
||
(node._listeners || (node._listeners = {}))[name] = value;
|
||
} else if (name !== 'list' && name !== 'type' && !isSvg && name in node) {
|
||
try {
|
||
node[name] = value == null ? '' : value;
|
||
} catch (e) {}
|
||
if ((value == null || value === false) && name != 'spellcheck') node.removeAttribute(name);
|
||
} else {
|
||
var ns = isSvg && name !== (name = name.replace(/^xlink:?/, ''));
|
||
|
||
if (value == null || value === false) {
|
||
if (ns) node.removeAttributeNS('http://www.w3.org/1999/xlink', name.toLowerCase());else node.removeAttribute(name);
|
||
} else if (typeof value !== 'function') {
|
||
if (ns) node.setAttributeNS('http://www.w3.org/1999/xlink', name.toLowerCase(), value);else node.setAttribute(name, value);
|
||
}
|
||
}
|
||
}
|
||
|
||
function eventProxy(e) {
|
||
return this._listeners[e.type](options.event && options.event(e) || e);
|
||
}
|
||
|
||
var mounts = [];
|
||
|
||
var diffLevel = 0;
|
||
|
||
var isSvgMode = false;
|
||
|
||
var hydrating = false;
|
||
|
||
function flushMounts() {
|
||
var c;
|
||
while (c = mounts.shift()) {
|
||
if (options.afterMount) options.afterMount(c);
|
||
if (c.componentDidMount) c.componentDidMount();
|
||
}
|
||
}
|
||
|
||
function diff(dom, vnode, context, mountAll, parent, componentRoot) {
|
||
if (!diffLevel++) {
|
||
isSvgMode = parent != null && parent.ownerSVGElement !== undefined;
|
||
|
||
hydrating = dom != null && !('__preactattr_' in dom);
|
||
}
|
||
|
||
var ret = idiff(dom, vnode, context, mountAll, componentRoot);
|
||
|
||
if (parent && ret.parentNode !== parent) parent.appendChild(ret);
|
||
|
||
if (! --diffLevel) {
|
||
hydrating = false;
|
||
|
||
if (!componentRoot) flushMounts();
|
||
}
|
||
|
||
return ret;
|
||
}
|
||
|
||
function idiff(dom, vnode, context, mountAll, componentRoot) {
|
||
var out = dom,
|
||
prevSvgMode = isSvgMode;
|
||
|
||
if (vnode == null || typeof vnode === 'boolean') vnode = '';
|
||
|
||
if (typeof vnode === 'string' || typeof vnode === 'number') {
|
||
if (dom && dom.splitText !== undefined && dom.parentNode && (!dom._component || componentRoot)) {
|
||
if (dom.nodeValue != vnode) {
|
||
dom.nodeValue = vnode;
|
||
}
|
||
} else {
|
||
out = document.createTextNode(vnode);
|
||
if (dom) {
|
||
if (dom.parentNode) dom.parentNode.replaceChild(out, dom);
|
||
recollectNodeTree(dom, true);
|
||
}
|
||
}
|
||
|
||
out['__preactattr_'] = true;
|
||
|
||
return out;
|
||
}
|
||
|
||
var vnodeName = vnode.nodeName;
|
||
if (typeof vnodeName === 'function') {
|
||
return buildComponentFromVNode(dom, vnode, context, mountAll);
|
||
}
|
||
|
||
isSvgMode = vnodeName === 'svg' ? true : vnodeName === 'foreignObject' ? false : isSvgMode;
|
||
|
||
vnodeName = String(vnodeName);
|
||
if (!dom || !isNamedNode(dom, vnodeName)) {
|
||
out = createNode(vnodeName, isSvgMode);
|
||
|
||
if (dom) {
|
||
while (dom.firstChild) {
|
||
out.appendChild(dom.firstChild);
|
||
}
|
||
if (dom.parentNode) dom.parentNode.replaceChild(out, dom);
|
||
|
||
recollectNodeTree(dom, true);
|
||
}
|
||
}
|
||
|
||
var fc = out.firstChild,
|
||
props = out['__preactattr_'],
|
||
vchildren = vnode.children;
|
||
|
||
if (props == null) {
|
||
props = out['__preactattr_'] = {};
|
||
for (var a = out.attributes, i = a.length; i--;) {
|
||
props[a[i].name] = a[i].value;
|
||
}
|
||
}
|
||
|
||
if (!hydrating && vchildren && vchildren.length === 1 && typeof vchildren[0] === 'string' && fc != null && fc.splitText !== undefined && fc.nextSibling == null) {
|
||
if (fc.nodeValue != vchildren[0]) {
|
||
fc.nodeValue = vchildren[0];
|
||
}
|
||
} else if (vchildren && vchildren.length || fc != null) {
|
||
innerDiffNode(out, vchildren, context, mountAll, hydrating || props.dangerouslySetInnerHTML != null);
|
||
}
|
||
|
||
diffAttributes(out, vnode.attributes, props);
|
||
|
||
isSvgMode = prevSvgMode;
|
||
|
||
return out;
|
||
}
|
||
|
||
function innerDiffNode(dom, vchildren, context, mountAll, isHydrating) {
|
||
var originalChildren = dom.childNodes,
|
||
children = [],
|
||
keyed = {},
|
||
keyedLen = 0,
|
||
min = 0,
|
||
len = originalChildren.length,
|
||
childrenLen = 0,
|
||
vlen = vchildren ? vchildren.length : 0,
|
||
j,
|
||
c,
|
||
f,
|
||
vchild,
|
||
child;
|
||
|
||
if (len !== 0) {
|
||
for (var i = 0; i < len; i++) {
|
||
var _child = originalChildren[i],
|
||
props = _child['__preactattr_'],
|
||
key = vlen && props ? _child._component ? _child._component.__key : props.key : null;
|
||
if (key != null) {
|
||
keyedLen++;
|
||
keyed[key] = _child;
|
||
} else if (props || (_child.splitText !== undefined ? isHydrating ? _child.nodeValue.trim() : true : isHydrating)) {
|
||
children[childrenLen++] = _child;
|
||
}
|
||
}
|
||
}
|
||
|
||
if (vlen !== 0) {
|
||
for (var i = 0; i < vlen; i++) {
|
||
vchild = vchildren[i];
|
||
child = null;
|
||
|
||
var key = vchild.key;
|
||
if (key != null) {
|
||
if (keyedLen && keyed[key] !== undefined) {
|
||
child = keyed[key];
|
||
keyed[key] = undefined;
|
||
keyedLen--;
|
||
}
|
||
} else if (min < childrenLen) {
|
||
for (j = min; j < childrenLen; j++) {
|
||
if (children[j] !== undefined && isSameNodeType(c = children[j], vchild, isHydrating)) {
|
||
child = c;
|
||
children[j] = undefined;
|
||
if (j === childrenLen - 1) childrenLen--;
|
||
if (j === min) min++;
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
|
||
child = idiff(child, vchild, context, mountAll);
|
||
|
||
f = originalChildren[i];
|
||
if (child && child !== dom && child !== f) {
|
||
if (f == null) {
|
||
dom.appendChild(child);
|
||
} else if (child === f.nextSibling) {
|
||
removeNode(f);
|
||
} else {
|
||
dom.insertBefore(child, f);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
if (keyedLen) {
|
||
for (var i in keyed) {
|
||
if (keyed[i] !== undefined) recollectNodeTree(keyed[i], false);
|
||
}
|
||
}
|
||
|
||
while (min <= childrenLen) {
|
||
if ((child = children[childrenLen--]) !== undefined) recollectNodeTree(child, false);
|
||
}
|
||
}
|
||
|
||
function recollectNodeTree(node, unmountOnly) {
|
||
var component = node._component;
|
||
if (component) {
|
||
unmountComponent(component);
|
||
} else {
|
||
if (node['__preactattr_'] != null) applyRef(node['__preactattr_'].ref, null);
|
||
|
||
if (unmountOnly === false || node['__preactattr_'] == null) {
|
||
removeNode(node);
|
||
}
|
||
|
||
removeChildren(node);
|
||
}
|
||
}
|
||
|
||
function removeChildren(node) {
|
||
node = node.lastChild;
|
||
while (node) {
|
||
var next = node.previousSibling;
|
||
recollectNodeTree(node, true);
|
||
node = next;
|
||
}
|
||
}
|
||
|
||
function diffAttributes(dom, attrs, old) {
|
||
var name;
|
||
|
||
for (name in old) {
|
||
if (!(attrs && attrs[name] != null) && old[name] != null) {
|
||
setAccessor(dom, name, old[name], old[name] = undefined, isSvgMode);
|
||
}
|
||
}
|
||
|
||
for (name in attrs) {
|
||
if (name !== 'children' && name !== 'innerHTML' && (!(name in old) || attrs[name] !== (name === 'value' || name === 'checked' ? dom[name] : old[name]))) {
|
||
setAccessor(dom, name, old[name], old[name] = attrs[name], isSvgMode);
|
||
}
|
||
}
|
||
}
|
||
|
||
var recyclerComponents = [];
|
||
|
||
function createComponent(Ctor, props, context) {
|
||
var inst,
|
||
i = recyclerComponents.length;
|
||
|
||
if (Ctor.prototype && Ctor.prototype.render) {
|
||
inst = new Ctor(props, context);
|
||
Component.call(inst, props, context);
|
||
} else {
|
||
inst = new Component(props, context);
|
||
inst.constructor = Ctor;
|
||
inst.render = doRender;
|
||
}
|
||
|
||
while (i--) {
|
||
if (recyclerComponents[i].constructor === Ctor) {
|
||
inst.nextBase = recyclerComponents[i].nextBase;
|
||
recyclerComponents.splice(i, 1);
|
||
return inst;
|
||
}
|
||
}
|
||
|
||
return inst;
|
||
}
|
||
|
||
function doRender(props, state, context) {
|
||
return this.constructor(props, context);
|
||
}
|
||
|
||
function setComponentProps(component, props, renderMode, context, mountAll) {
|
||
if (component._disable) return;
|
||
component._disable = true;
|
||
|
||
component.__ref = props.ref;
|
||
component.__key = props.key;
|
||
delete props.ref;
|
||
delete props.key;
|
||
|
||
if (typeof component.constructor.getDerivedStateFromProps === 'undefined') {
|
||
if (!component.base || mountAll) {
|
||
if (component.componentWillMount) component.componentWillMount();
|
||
} else if (component.componentWillReceiveProps) {
|
||
component.componentWillReceiveProps(props, context);
|
||
}
|
||
}
|
||
|
||
if (context && context !== component.context) {
|
||
if (!component.prevContext) component.prevContext = component.context;
|
||
component.context = context;
|
||
}
|
||
|
||
if (!component.prevProps) component.prevProps = component.props;
|
||
component.props = props;
|
||
|
||
component._disable = false;
|
||
|
||
if (renderMode !== 0) {
|
||
if (renderMode === 1 || options.syncComponentUpdates !== false || !component.base) {
|
||
renderComponent(component, 1, mountAll);
|
||
} else {
|
||
enqueueRender(component);
|
||
}
|
||
}
|
||
|
||
applyRef(component.__ref, component);
|
||
}
|
||
|
||
function renderComponent(component, renderMode, mountAll, isChild) {
|
||
if (component._disable) return;
|
||
|
||
var props = component.props,
|
||
state = component.state,
|
||
context = component.context,
|
||
previousProps = component.prevProps || props,
|
||
previousState = component.prevState || state,
|
||
previousContext = component.prevContext || context,
|
||
isUpdate = component.base,
|
||
nextBase = component.nextBase,
|
||
initialBase = isUpdate || nextBase,
|
||
initialChildComponent = component._component,
|
||
skip = false,
|
||
snapshot = previousContext,
|
||
rendered,
|
||
inst,
|
||
cbase;
|
||
|
||
if (component.constructor.getDerivedStateFromProps) {
|
||
state = extend(extend({}, state), component.constructor.getDerivedStateFromProps(props, state));
|
||
component.state = state;
|
||
}
|
||
|
||
if (isUpdate) {
|
||
component.props = previousProps;
|
||
component.state = previousState;
|
||
component.context = previousContext;
|
||
if (renderMode !== 2 && component.shouldComponentUpdate && component.shouldComponentUpdate(props, state, context) === false) {
|
||
skip = true;
|
||
} else if (component.componentWillUpdate) {
|
||
component.componentWillUpdate(props, state, context);
|
||
}
|
||
component.props = props;
|
||
component.state = state;
|
||
component.context = context;
|
||
}
|
||
|
||
component.prevProps = component.prevState = component.prevContext = component.nextBase = null;
|
||
component._dirty = false;
|
||
|
||
if (!skip) {
|
||
rendered = component.render(props, state, context);
|
||
|
||
if (component.getChildContext) {
|
||
context = extend(extend({}, context), component.getChildContext());
|
||
}
|
||
|
||
if (isUpdate && component.getSnapshotBeforeUpdate) {
|
||
snapshot = component.getSnapshotBeforeUpdate(previousProps, previousState);
|
||
}
|
||
|
||
var childComponent = rendered && rendered.nodeName,
|
||
toUnmount,
|
||
base;
|
||
|
||
if (typeof childComponent === 'function') {
|
||
|
||
var childProps = getNodeProps(rendered);
|
||
inst = initialChildComponent;
|
||
|
||
if (inst && inst.constructor === childComponent && childProps.key == inst.__key) {
|
||
setComponentProps(inst, childProps, 1, context, false);
|
||
} else {
|
||
toUnmount = inst;
|
||
|
||
component._component = inst = createComponent(childComponent, childProps, context);
|
||
inst.nextBase = inst.nextBase || nextBase;
|
||
inst._parentComponent = component;
|
||
setComponentProps(inst, childProps, 0, context, false);
|
||
renderComponent(inst, 1, mountAll, true);
|
||
}
|
||
|
||
base = inst.base;
|
||
} else {
|
||
cbase = initialBase;
|
||
|
||
toUnmount = initialChildComponent;
|
||
if (toUnmount) {
|
||
cbase = component._component = null;
|
||
}
|
||
|
||
if (initialBase || renderMode === 1) {
|
||
if (cbase) cbase._component = null;
|
||
base = diff(cbase, rendered, context, mountAll || !isUpdate, initialBase && initialBase.parentNode, true);
|
||
}
|
||
}
|
||
|
||
if (initialBase && base !== initialBase && inst !== initialChildComponent) {
|
||
var baseParent = initialBase.parentNode;
|
||
if (baseParent && base !== baseParent) {
|
||
baseParent.replaceChild(base, initialBase);
|
||
|
||
if (!toUnmount) {
|
||
initialBase._component = null;
|
||
recollectNodeTree(initialBase, false);
|
||
}
|
||
}
|
||
}
|
||
|
||
if (toUnmount) {
|
||
unmountComponent(toUnmount);
|
||
}
|
||
|
||
component.base = base;
|
||
if (base && !isChild) {
|
||
var componentRef = component,
|
||
t = component;
|
||
while (t = t._parentComponent) {
|
||
(componentRef = t).base = base;
|
||
}
|
||
base._component = componentRef;
|
||
base._componentConstructor = componentRef.constructor;
|
||
}
|
||
}
|
||
|
||
if (!isUpdate || mountAll) {
|
||
mounts.push(component);
|
||
} else if (!skip) {
|
||
|
||
if (component.componentDidUpdate) {
|
||
component.componentDidUpdate(previousProps, previousState, snapshot);
|
||
}
|
||
if (options.afterUpdate) options.afterUpdate(component);
|
||
}
|
||
|
||
while (component._renderCallbacks.length) {
|
||
component._renderCallbacks.pop().call(component);
|
||
}if (!diffLevel && !isChild) flushMounts();
|
||
}
|
||
|
||
function buildComponentFromVNode(dom, vnode, context, mountAll) {
|
||
var c = dom && dom._component,
|
||
originalComponent = c,
|
||
oldDom = dom,
|
||
isDirectOwner = c && dom._componentConstructor === vnode.nodeName,
|
||
isOwner = isDirectOwner,
|
||
props = getNodeProps(vnode);
|
||
while (c && !isOwner && (c = c._parentComponent)) {
|
||
isOwner = c.constructor === vnode.nodeName;
|
||
}
|
||
|
||
if (c && isOwner && (!mountAll || c._component)) {
|
||
setComponentProps(c, props, 3, context, mountAll);
|
||
dom = c.base;
|
||
} else {
|
||
if (originalComponent && !isDirectOwner) {
|
||
unmountComponent(originalComponent);
|
||
dom = oldDom = null;
|
||
}
|
||
|
||
c = createComponent(vnode.nodeName, props, context);
|
||
if (dom && !c.nextBase) {
|
||
c.nextBase = dom;
|
||
|
||
oldDom = null;
|
||
}
|
||
setComponentProps(c, props, 1, context, mountAll);
|
||
dom = c.base;
|
||
|
||
if (oldDom && dom !== oldDom) {
|
||
oldDom._component = null;
|
||
recollectNodeTree(oldDom, false);
|
||
}
|
||
}
|
||
|
||
return dom;
|
||
}
|
||
|
||
function unmountComponent(component) {
|
||
if (options.beforeUnmount) options.beforeUnmount(component);
|
||
|
||
var base = component.base;
|
||
|
||
component._disable = true;
|
||
|
||
if (component.componentWillUnmount) component.componentWillUnmount();
|
||
|
||
component.base = null;
|
||
|
||
var inner = component._component;
|
||
if (inner) {
|
||
unmountComponent(inner);
|
||
} else if (base) {
|
||
if (base['__preactattr_'] != null) applyRef(base['__preactattr_'].ref, null);
|
||
|
||
component.nextBase = base;
|
||
|
||
removeNode(base);
|
||
recyclerComponents.push(component);
|
||
|
||
removeChildren(base);
|
||
}
|
||
|
||
applyRef(component.__ref, null);
|
||
}
|
||
|
||
function Component(props, context) {
|
||
this._dirty = true;
|
||
|
||
this.context = context;
|
||
|
||
this.props = props;
|
||
|
||
this.state = this.state || {};
|
||
|
||
this._renderCallbacks = [];
|
||
}
|
||
|
||
extend(Component.prototype, {
|
||
setState: function setState(state, callback) {
|
||
if (!this.prevState) this.prevState = this.state;
|
||
this.state = extend(extend({}, this.state), typeof state === 'function' ? state(this.state, this.props) : state);
|
||
if (callback) this._renderCallbacks.push(callback);
|
||
enqueueRender(this);
|
||
},
|
||
forceUpdate: function forceUpdate(callback) {
|
||
if (callback) this._renderCallbacks.push(callback);
|
||
renderComponent(this, 2);
|
||
},
|
||
render: function render() {}
|
||
});
|
||
|
||
function render(vnode, parent, merge) {
|
||
return diff(merge, vnode, {}, false, parent, false);
|
||
}
|
||
|
||
function createRef() {
|
||
return {};
|
||
}
|
||
|
||
var preact = {
|
||
h: h,
|
||
createElement: h,
|
||
cloneElement: cloneElement,
|
||
createRef: createRef,
|
||
Component: Component,
|
||
render: render,
|
||
rerender: rerender,
|
||
options: options
|
||
};
|
||
|
||
/* harmony default export */ __webpack_exports__["default"] = (preact);
|
||
|
||
//# sourceMappingURL=preact.mjs.map
|
||
|
||
|
||
/***/ }),
|
||
/* 4 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.connect = void 0;
|
||
var tslib_1 = __webpack_require__(1);
|
||
var preact_1 = __webpack_require__(3);
|
||
var observable_1 = __webpack_require__(5);
|
||
function connect(selector, forceUpdate) {
|
||
return function (WrappedComponent) {
|
||
var _a;
|
||
return _a = /** @class */ (function (_super) {
|
||
tslib_1.__extends(class_1, _super);
|
||
function class_1() {
|
||
return _super !== null && _super.apply(this, arguments) || this;
|
||
}
|
||
class_1.prototype.setStateUsingSelector = function (ownProps) {
|
||
if (selector) {
|
||
this.setState(selector(this.context.store, ownProps));
|
||
if (forceUpdate) {
|
||
this.forceUpdate();
|
||
}
|
||
}
|
||
};
|
||
class_1.prototype.componentWillMount = function () {
|
||
var _this = this;
|
||
if (selector) {
|
||
this.unobserve = observable_1.observe(function () {
|
||
_this.setStateUsingSelector(_this.props);
|
||
});
|
||
}
|
||
};
|
||
class_1.prototype.componentWillReceiveProps = function (nextProps) {
|
||
this.setStateUsingSelector(nextProps);
|
||
};
|
||
class_1.prototype.componentWillUnmount = function () {
|
||
if (this.unobserve) {
|
||
this.unobserve();
|
||
}
|
||
};
|
||
class_1.prototype.render = function () {
|
||
var _a = this, props = _a.props, state = _a.state;
|
||
var dispatch = this.context.dispatch;
|
||
return preact_1.h(WrappedComponent, tslib_1.__assign({}, props, state, { dispatch: dispatch }));
|
||
};
|
||
return class_1;
|
||
}(preact_1.Component)),
|
||
_a.displayName = "Connect:" + WrappedComponent.name,
|
||
_a;
|
||
};
|
||
}
|
||
exports.connect = connect;
|
||
|
||
|
||
/***/ }),
|
||
/* 5 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.asyncInvokeObserver = exports.batchObserver = exports.unobservedInvoke = exports.getOriginObject = exports.notify = exports.observable = exports.partialObservable = exports.observe = exports.isObservable = exports.getRunningObservers = exports.observerInfoMap = void 0;
|
||
var common_1 = __webpack_require__(0);
|
||
var array_1 = __webpack_require__(65);
|
||
var generateObserverId = (function () {
|
||
var lastId = 0;
|
||
return function () {
|
||
lastId += 1;
|
||
return "@observer" + lastId;
|
||
};
|
||
})();
|
||
// store all observer info
|
||
exports.observerInfoMap = {};
|
||
// observerId stack for managing recursive observing calls
|
||
var observerIdStack = [];
|
||
var queue = [];
|
||
var observerIdMap = {};
|
||
var pending = false;
|
||
var paused = false;
|
||
function batchUpdate(observerId) {
|
||
if (!observerIdMap[observerId]) {
|
||
observerIdMap[observerId] = true;
|
||
queue.push(observerId);
|
||
}
|
||
if (!pending) {
|
||
flush();
|
||
}
|
||
}
|
||
function clearQueue() {
|
||
queue = [];
|
||
observerIdMap = {};
|
||
pending = false;
|
||
}
|
||
function getRunningObservers() {
|
||
return queue.map(function (id) { return exports.observerInfoMap[id].name; }).filter(function (name) { return name; });
|
||
}
|
||
exports.getRunningObservers = getRunningObservers;
|
||
function callObserver(observerId) {
|
||
observerIdStack.push(observerId);
|
||
exports.observerInfoMap[observerId].fn(exports.observerInfoMap[observerId].key);
|
||
observerIdStack.pop();
|
||
delete exports.observerInfoMap[observerId].key;
|
||
}
|
||
function flush() {
|
||
pending = true;
|
||
for (var index = 0; index < queue.length; index += 1) {
|
||
var observerId = queue[index];
|
||
observerIdMap[observerId] = false;
|
||
callObserver(observerId);
|
||
}
|
||
clearQueue();
|
||
}
|
||
function run(observerId, key) {
|
||
var sync = exports.observerInfoMap[observerId].sync;
|
||
exports.observerInfoMap[observerId].key = key;
|
||
if (sync) {
|
||
callObserver(observerId);
|
||
}
|
||
else {
|
||
batchUpdate(observerId);
|
||
}
|
||
}
|
||
function setValue(storage, resultObj, observerIdSet, key, value) {
|
||
if (storage[key] !== value) {
|
||
if (Array.isArray(value)) {
|
||
array_1.patchArrayMethods(value, resultObj, key);
|
||
}
|
||
storage[key] = value;
|
||
Object.keys(observerIdSet).forEach(function (observerId) {
|
||
run(observerId, 'setValue');
|
||
});
|
||
}
|
||
}
|
||
function isObservable(resultObj) {
|
||
return common_1.isObject(resultObj) && common_1.hasOwnProp(resultObj, '__storage__');
|
||
}
|
||
exports.isObservable = isObservable;
|
||
function observe(fn, sync, name) {
|
||
if (sync === void 0) { sync = false; }
|
||
if (name === void 0) { name = ''; }
|
||
var observerId = generateObserverId();
|
||
exports.observerInfoMap[observerId] = { fn: fn, targetObserverIdSets: [], sync: sync, name: name };
|
||
run(observerId, 'observe');
|
||
// return unobserve function
|
||
return function () {
|
||
exports.observerInfoMap[observerId].targetObserverIdSets.forEach(function (idSet) {
|
||
delete idSet[observerId];
|
||
});
|
||
delete exports.observerInfoMap[observerId];
|
||
};
|
||
}
|
||
exports.observe = observe;
|
||
// eslint-disable-next-line max-params
|
||
function makeObservableData(obj, resultObj, key, storage, propObserverIdSetMap, sync) {
|
||
var getter = (Object.getOwnPropertyDescriptor(obj, key) || {}).get;
|
||
var observerIdSet = (propObserverIdSetMap[key] = {});
|
||
Object.defineProperty(resultObj, key, {
|
||
configurable: true,
|
||
enumerable: true,
|
||
get: function () {
|
||
var observerId = common_1.last(observerIdStack);
|
||
if (!paused && observerId && !observerIdSet[observerId]) {
|
||
observerIdSet[observerId] = true;
|
||
exports.observerInfoMap[observerId].targetObserverIdSets.push(observerIdSet);
|
||
}
|
||
return storage[key];
|
||
},
|
||
});
|
||
if (common_1.isFunction(getter)) {
|
||
observe(function () {
|
||
var value = getter.call(resultObj);
|
||
setValue(storage, resultObj, observerIdSet, key, value);
|
||
}, sync);
|
||
}
|
||
else {
|
||
// has to add 'as' type assertion and refer the below typescript issue
|
||
// In general, the constraint Record<string, XXX> doesn't actually ensure that an argument has a string index signature,
|
||
// it merely ensures that the properties of the argument are assignable to type XXX.
|
||
// So, in the example above you could effectively pass any object and the function could write to any property without any checks.
|
||
// https://github.com/microsoft/TypeScript/issues/31661
|
||
storage[key] = obj[key];
|
||
if (Array.isArray(storage[key])) {
|
||
array_1.patchArrayMethods(storage[key], resultObj, key);
|
||
}
|
||
Object.defineProperty(resultObj, key, {
|
||
set: function (value) {
|
||
setValue(storage, resultObj, observerIdSet, key, value);
|
||
},
|
||
});
|
||
}
|
||
}
|
||
function partialObservable(obj, key) {
|
||
var storage = obj.__storage__;
|
||
var propObserverIdSetMap = obj.__propObserverIdSetMap__;
|
||
makeObservableData(obj, obj, key, storage, propObserverIdSetMap);
|
||
}
|
||
exports.partialObservable = partialObservable;
|
||
function observable(obj, sync) {
|
||
if (sync === void 0) { sync = false; }
|
||
if (Array.isArray(obj)) {
|
||
throw new Error('Array object cannot be Reactive');
|
||
}
|
||
if (isObservable(obj)) {
|
||
return obj;
|
||
}
|
||
var storage = {};
|
||
var propObserverIdSetMap = {};
|
||
var resultObj = {};
|
||
Object.defineProperties(resultObj, {
|
||
__storage__: { value: storage },
|
||
__propObserverIdSetMap__: { value: propObserverIdSetMap },
|
||
});
|
||
Object.keys(obj).forEach(function (key) {
|
||
makeObservableData(obj, resultObj, key, storage, propObserverIdSetMap, sync);
|
||
});
|
||
return resultObj;
|
||
}
|
||
exports.observable = observable;
|
||
function notifyUnit(obj, key) {
|
||
Object.keys(obj.__propObserverIdSetMap__[key]).forEach(function (observerId) {
|
||
run(observerId, key.toString());
|
||
});
|
||
}
|
||
function notify(obj) {
|
||
var keys = [];
|
||
for (var _i = 1; _i < arguments.length; _i++) {
|
||
keys[_i - 1] = arguments[_i];
|
||
}
|
||
if (isObservable(obj)) {
|
||
keys.forEach(function (key) { return notifyUnit(obj, key); });
|
||
}
|
||
}
|
||
exports.notify = notify;
|
||
function getOriginObject(obj) {
|
||
var result = {};
|
||
common_1.forEachObject(function (value, key) {
|
||
result[key] = isObservable(value) ? getOriginObject(value) : value;
|
||
}, obj.__storage__);
|
||
return common_1.isEmpty(result) ? obj : result;
|
||
}
|
||
exports.getOriginObject = getOriginObject;
|
||
function unobservedInvoke(fn) {
|
||
paused = true;
|
||
fn();
|
||
paused = false;
|
||
}
|
||
exports.unobservedInvoke = unobservedInvoke;
|
||
function batchObserver(fn) {
|
||
pending = true;
|
||
fn();
|
||
pending = false;
|
||
}
|
||
exports.batchObserver = batchObserver;
|
||
var asyncTimer = null;
|
||
function asyncInvokeObserver(fn) {
|
||
if (common_1.isNull(asyncTimer)) {
|
||
asyncTimer = setTimeout(function () {
|
||
fn();
|
||
asyncTimer = null;
|
||
});
|
||
}
|
||
}
|
||
exports.asyncInvokeObserver = asyncInvokeObserver;
|
||
|
||
|
||
/***/ }),
|
||
/* 6 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.changeRawDataToOriginDataForTree = exports.getOmittedInternalProp = exports.createChangeInfo = exports.getFormattedValue = exports.getRowKeyByIndexWithPageRange = exports.getRowIndexPerPage = exports.isClientPagination = exports.isScrollPagination = exports.getMaxRowKey = exports.isFiltered = exports.isSorted = exports.getCreatedRowInfo = exports.getRemovedClassName = exports.getAddedClassName = exports.getLoadingState = exports.getRowHeight = exports.isInitialSortState = exports.isSortable = exports.getUniqColumnData = exports.findRowByRowKey = exports.findIndexByRowKey = exports.getConditionalRows = exports.getCheckedRowInfoList = exports.isEditableCell = exports.getCellAddressByIndex = void 0;
|
||
var tslib_1 = __webpack_require__(1);
|
||
var common_1 = __webpack_require__(0);
|
||
var instance_1 = __webpack_require__(8);
|
||
var column_1 = __webpack_require__(12);
|
||
var data_1 = __webpack_require__(15);
|
||
var data_2 = __webpack_require__(23);
|
||
var data_3 = __webpack_require__(14);
|
||
var validation_1 = __webpack_require__(27);
|
||
var observable_1 = __webpack_require__(5);
|
||
function getCellAddressByIndex(_a, rowIndex, columnIndex) {
|
||
var data = _a.data, column = _a.column;
|
||
return {
|
||
rowKey: data.filteredViewData[rowIndex].rowKey,
|
||
columnName: column.visibleColumns[columnIndex].name,
|
||
};
|
||
}
|
||
exports.getCellAddressByIndex = getCellAddressByIndex;
|
||
function isEditableCell(store, rowIndex, columnName) {
|
||
var data = store.data, column = store.column;
|
||
var filteredIndex = data.filteredIndex, filteredViewData = data.filteredViewData;
|
||
if (filteredIndex && common_1.isNil(filteredIndex[rowIndex])) {
|
||
return false;
|
||
}
|
||
// get index based on whole data(not filtered data)
|
||
var index = filteredIndex ? filteredIndex[rowIndex] : rowIndex;
|
||
data_3.makeObservable(store, index, true);
|
||
var _a = filteredViewData[rowIndex].valueMap[columnName], disabled = _a.disabled, editable = _a.editable;
|
||
return !column_1.isHiddenColumn(column, columnName) && editable && !disabled;
|
||
}
|
||
exports.isEditableCell = isEditableCell;
|
||
function getCheckedRowInfoList(_a) {
|
||
var data = _a.data;
|
||
var targetRows = {
|
||
rowIndexes: [],
|
||
rows: [],
|
||
nextRows: [],
|
||
};
|
||
data.rawData.reduce(function (acc, row, index) {
|
||
if (row._attributes.checked) {
|
||
acc.rowIndexes.push(index);
|
||
acc.rows.push(row);
|
||
acc.nextRows.push(data.rawData[index + 1]);
|
||
}
|
||
return acc;
|
||
}, targetRows);
|
||
return targetRows;
|
||
}
|
||
exports.getCheckedRowInfoList = getCheckedRowInfoList;
|
||
function getConditionalRows(_a, conditions) {
|
||
var data = _a.data;
|
||
var rawData = data.rawData;
|
||
if (common_1.isFunction(conditions)) {
|
||
return rawData.filter(conditions);
|
||
}
|
||
var result = rawData;
|
||
Object.keys(conditions).forEach(function (key) {
|
||
result = result.filter(function (row) { return row[key] === conditions[key]; });
|
||
});
|
||
return result;
|
||
}
|
||
exports.getConditionalRows = getConditionalRows;
|
||
function findIndexByRowKey(data, column, id, rowKey, filtered) {
|
||
if (filtered === void 0) { filtered = true; }
|
||
if (common_1.isNil(rowKey)) {
|
||
return -1;
|
||
}
|
||
var filteredRawData = data.filteredRawData, rawData = data.rawData;
|
||
var targetData = filtered ? filteredRawData : rawData;
|
||
var dataManager = instance_1.getDataManager(id);
|
||
var modified = dataManager ? dataManager.isMixedOrder() : false;
|
||
if (isSorted(data) || column.keyColumnName || modified) {
|
||
return common_1.findPropIndex('rowKey', rowKey, targetData);
|
||
}
|
||
var start = 0;
|
||
var end = targetData.length - 1;
|
||
while (start <= end) {
|
||
var mid = Math.floor((start + end) / 2);
|
||
var comparedRowKey = targetData[mid].rowKey;
|
||
if (rowKey > comparedRowKey) {
|
||
start = mid + 1;
|
||
}
|
||
else if (rowKey < comparedRowKey) {
|
||
end = mid - 1;
|
||
}
|
||
else {
|
||
return mid;
|
||
}
|
||
}
|
||
return -1;
|
||
}
|
||
exports.findIndexByRowKey = findIndexByRowKey;
|
||
function findRowByRowKey(data, column, id, rowKey, filtered) {
|
||
if (filtered === void 0) { filtered = true; }
|
||
var targetData = filtered ? data.filteredRawData : data.rawData;
|
||
return targetData[findIndexByRowKey(data, column, id, rowKey, filtered)];
|
||
}
|
||
exports.findRowByRowKey = findRowByRowKey;
|
||
function getUniqColumnData(targetData, column, columnName) {
|
||
var columnInfo = column.allColumnMap[columnName];
|
||
var uniqColumnData = common_1.uniqByProp(columnName, targetData.map(function (data) {
|
||
var _a;
|
||
return (tslib_1.__assign(tslib_1.__assign({}, data), (_a = {}, _a[columnName] = common_1.isNil(data[columnName]) ? '' : data[columnName], _a)));
|
||
}));
|
||
return uniqColumnData.map(function (row) {
|
||
var value = row[columnName];
|
||
var formatterProps = {
|
||
row: row,
|
||
value: value,
|
||
column: columnInfo,
|
||
};
|
||
var relationListItems = row._relationListItemMap[columnName];
|
||
return data_2.getFormattedValue(formatterProps, columnInfo.formatter, value, relationListItems);
|
||
});
|
||
}
|
||
exports.getUniqColumnData = getUniqColumnData;
|
||
function isSortable(sortState, column, columnName) {
|
||
if (columnName === 'sortKey') {
|
||
return true;
|
||
}
|
||
var _a = column.allColumnMap[columnName], sortable = _a.sortable, hidden = _a.hidden;
|
||
return sortState.useClient && !hidden && sortable;
|
||
}
|
||
exports.isSortable = isSortable;
|
||
function isInitialSortState(_a) {
|
||
var columns = _a.columns;
|
||
return columns.length === 1 && columns[0].columnName === 'sortKey';
|
||
}
|
||
exports.isInitialSortState = isInitialSortState;
|
||
function getRowHeight(row, defaultRowHeight) {
|
||
var _a = row._attributes, height = _a.height, tree = _a.tree;
|
||
var rowHeight = tree && tree.hidden ? 0 : height;
|
||
return common_1.isNumber(rowHeight) ? rowHeight : defaultRowHeight;
|
||
}
|
||
exports.getRowHeight = getRowHeight;
|
||
function getLoadingState(rawData) {
|
||
return rawData.length ? 'DONE' : 'EMPTY';
|
||
}
|
||
exports.getLoadingState = getLoadingState;
|
||
function getAddedClassName(className, prevClassNames) {
|
||
var classNames = className.split(' ');
|
||
var columnClassNames = prevClassNames ? prevClassNames : [];
|
||
return common_1.uniq(tslib_1.__spreadArrays(classNames, columnClassNames));
|
||
}
|
||
exports.getAddedClassName = getAddedClassName;
|
||
function getRemovedClassName(className, prevClassNames) {
|
||
var classNames = className.split(' ');
|
||
var removedClassNames = prevClassNames;
|
||
classNames.forEach(function (clsName) {
|
||
common_1.removeArrayItem(clsName, removedClassNames);
|
||
});
|
||
return removedClassNames;
|
||
}
|
||
exports.getRemovedClassName = getRemovedClassName;
|
||
function getCreatedRowInfo(store, rowIndex, row, rowKey) {
|
||
data_1.generateDataCreationKey();
|
||
var data = store.data, column = store.column, id = store.id;
|
||
var rawData = data.rawData;
|
||
var prevRow = rawData[rowIndex - 1];
|
||
var options = { prevRow: prevRow, lazyObservable: true };
|
||
if (!common_1.isUndefined(rowKey)) {
|
||
row.rowKey = rowKey;
|
||
}
|
||
var index = getMaxRowKey(data);
|
||
var rawRow = data_1.createRawRow(id, tslib_1.__assign(tslib_1.__assign({}, column.emptyRow), row), index, column, options);
|
||
var viewRow = { rowKey: row.rowKey, sortKey: row.sortKey, uniqueKey: row.uniqueKey };
|
||
return { rawRow: rawRow, viewRow: viewRow, prevRow: prevRow };
|
||
}
|
||
exports.getCreatedRowInfo = getCreatedRowInfo;
|
||
function isSorted(data) {
|
||
return data.sortState.columns[0].columnName !== 'sortKey';
|
||
}
|
||
exports.isSorted = isSorted;
|
||
function isFiltered(data) {
|
||
return !common_1.isNull(data.filters);
|
||
}
|
||
exports.isFiltered = isFiltered;
|
||
function getMaxRowKey(data) {
|
||
return Math.max.apply(Math, tslib_1.__spreadArrays([-1], common_1.mapProp('rowKey', data.rawData))) + 1;
|
||
}
|
||
exports.getMaxRowKey = getMaxRowKey;
|
||
function isScrollPagination(_a, useClient) {
|
||
var pageOptions = _a.pageOptions;
|
||
if (common_1.isUndefined(useClient)) {
|
||
return pageOptions.type === 'scroll';
|
||
}
|
||
return useClient && pageOptions.type === 'scroll';
|
||
}
|
||
exports.isScrollPagination = isScrollPagination;
|
||
function isClientPagination(_a) {
|
||
var pageOptions = _a.pageOptions;
|
||
return !common_1.isEmpty(pageOptions) && pageOptions.useClient && pageOptions.type === 'pagination';
|
||
}
|
||
exports.isClientPagination = isClientPagination;
|
||
function getRowIndexPerPage(data, rowIndex) {
|
||
return isClientPagination(data) ? rowIndex % data.pageOptions.perPage : rowIndex;
|
||
}
|
||
exports.getRowIndexPerPage = getRowIndexPerPage;
|
||
function getRowKeyByIndexWithPageRange(data, rowIndex) {
|
||
if (isClientPagination(data)) {
|
||
rowIndex += data.pageRowRange[0];
|
||
}
|
||
return data.filteredRawData[rowIndex].rowKey;
|
||
}
|
||
exports.getRowKeyByIndexWithPageRange = getRowKeyByIndexWithPageRange;
|
||
function getFormattedValue(store, rowKey, columnName) {
|
||
var data = store.data, column = store.column, id = store.id;
|
||
var rowIndex = findIndexByRowKey(data, column, id, rowKey, false);
|
||
var viewData = data.viewData;
|
||
if (rowIndex !== -1) {
|
||
data_3.makeObservable(store, rowIndex);
|
||
var viewCell = viewData[rowIndex].valueMap[columnName];
|
||
return viewCell ? viewCell.formattedValue : null;
|
||
}
|
||
return null;
|
||
}
|
||
exports.getFormattedValue = getFormattedValue;
|
||
function createChangeInfo(store, row, columnName, pastingValue, index) {
|
||
var id = store.id, column = store.column;
|
||
var rowKey = row.rowKey;
|
||
var prevChange = { rowKey: rowKey, columnName: columnName, value: row[columnName], nextValue: pastingValue };
|
||
var nextChange = { rowKey: rowKey, columnName: columnName, prevValue: row[columnName], value: pastingValue };
|
||
var changeValue = function () {
|
||
var value = prevChange.value, nextValue = prevChange.nextValue;
|
||
validation_1.replaceColumnUniqueInfoMap(id, column, {
|
||
rowKey: rowKey,
|
||
columnName: columnName,
|
||
prevValue: value,
|
||
value: nextValue,
|
||
});
|
||
nextChange.value = nextValue;
|
||
row[columnName] = nextValue;
|
||
return index;
|
||
};
|
||
return { prevChange: prevChange, nextChange: nextChange, changeValue: changeValue };
|
||
}
|
||
exports.createChangeInfo = createChangeInfo;
|
||
function getOmittedInternalProp(row) {
|
||
var additaional = [];
|
||
for (var _i = 1; _i < arguments.length; _i++) {
|
||
additaional[_i - 1] = arguments[_i];
|
||
}
|
||
return common_1.omit.apply(void 0, tslib_1.__spreadArrays([observable_1.getOriginObject(row), 'sortKey',
|
||
'uniqueKey',
|
||
'rowSpanMap',
|
||
'_relationListItemMap',
|
||
'_disabledPriority'], additaional));
|
||
}
|
||
exports.getOmittedInternalProp = getOmittedInternalProp;
|
||
function changeRowToOriginRowForTree(row) {
|
||
var originRow = getOmittedInternalProp(row, 'rowKey', '_attributes');
|
||
if (originRow._children) {
|
||
originRow._children = originRow._children.map(function (childRow) {
|
||
return changeRowToOriginRowForTree(childRow);
|
||
});
|
||
}
|
||
return originRow;
|
||
}
|
||
function changeRawDataToOriginDataForTree(rawData) {
|
||
return rawData
|
||
.filter(function (row) { var _a, _b; return common_1.isNil((_b = (_a = row._attributes) === null || _a === void 0 ? void 0 : _a.tree) === null || _b === void 0 ? void 0 : _b.parentRowKey); })
|
||
.map(function (row) { return changeRowToOriginRowForTree(row); });
|
||
}
|
||
exports.changeRawDataToOriginDataForTree = changeRawDataToOriginDataForTree;
|
||
|
||
|
||
/***/ }),
|
||
/* 7 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.getEventBus = exports.createEventBus = void 0;
|
||
var tslib_1 = __webpack_require__(1);
|
||
var common_1 = __webpack_require__(0);
|
||
var instance_1 = __webpack_require__(8);
|
||
var eventBusMap = {};
|
||
function createEventBus(id) {
|
||
var listenersMap = {};
|
||
eventBusMap[id] = {
|
||
on: function (eventName, func) {
|
||
var listeners = listenersMap[eventName];
|
||
listenersMap[eventName] = listeners ? tslib_1.__spreadArrays(listeners, [func]) : [func];
|
||
},
|
||
off: function (eventName, func) {
|
||
var listeners = listenersMap[eventName];
|
||
if (listeners) {
|
||
if (func) {
|
||
listenersMap[eventName] = common_1.removeArrayItem(func, listeners);
|
||
}
|
||
else {
|
||
delete listenersMap[eventName];
|
||
}
|
||
}
|
||
},
|
||
trigger: function (eventName, gridEvent) {
|
||
if (listenersMap[eventName]) {
|
||
var instance = instance_1.getInstance(id);
|
||
gridEvent.setInstance(instance);
|
||
listenersMap[eventName].forEach(function (func) {
|
||
func(gridEvent);
|
||
});
|
||
}
|
||
},
|
||
};
|
||
return eventBusMap[id];
|
||
}
|
||
exports.createEventBus = createEventBus;
|
||
function getEventBus(id) {
|
||
return eventBusMap[id];
|
||
}
|
||
exports.getEventBus = getEventBus;
|
||
|
||
|
||
/***/ }),
|
||
/* 8 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.getPaginationManager = exports.getDataManager = exports.getDataProvider = exports.getInstance = exports.registerDataSources = exports.register = void 0;
|
||
var common_1 = __webpack_require__(0);
|
||
var currentId = 0;
|
||
var instanceMap = {};
|
||
function generateId() {
|
||
currentId += 1;
|
||
return currentId;
|
||
}
|
||
function register(instance) {
|
||
var id = generateId();
|
||
if (!common_1.isObject(instanceMap[id])) {
|
||
instanceMap[id] = {};
|
||
}
|
||
instanceMap[id].grid = instance;
|
||
return id;
|
||
}
|
||
exports.register = register;
|
||
function registerDataSources(id, dataProvider, dataManager, paginationManager) {
|
||
instanceMap[id].dataProvider = dataProvider;
|
||
instanceMap[id].dataManager = dataManager;
|
||
instanceMap[id].paginationManager = paginationManager;
|
||
}
|
||
exports.registerDataSources = registerDataSources;
|
||
function getInstance(id) {
|
||
return instanceMap[id].grid;
|
||
}
|
||
exports.getInstance = getInstance;
|
||
function getDataProvider(id) {
|
||
return instanceMap[id].dataProvider;
|
||
}
|
||
exports.getDataProvider = getDataProvider;
|
||
function getDataManager(id) {
|
||
return instanceMap[id].dataManager;
|
||
}
|
||
exports.getDataManager = getDataManager;
|
||
function getPaginationManager(id) {
|
||
return instanceMap[id].paginationManager;
|
||
}
|
||
exports.getPaginationManager = getPaginationManager;
|
||
|
||
|
||
/***/ }),
|
||
/* 9 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
var tslib_1 = __webpack_require__(1);
|
||
var dom_1 = __webpack_require__(2);
|
||
var common_1 = __webpack_require__(0);
|
||
var column_1 = __webpack_require__(10);
|
||
function getTargetInfo(nativeEvent) {
|
||
var targetType = 'etc';
|
||
var target = nativeEvent.target;
|
||
var cell = dom_1.findParentByTagName(target, 'td');
|
||
var rowKey, columnName;
|
||
if (cell) {
|
||
var address = dom_1.getCellAddress(cell);
|
||
if (address) {
|
||
rowKey = address.rowKey;
|
||
columnName = address.columnName;
|
||
targetType = column_1.isRowHeader(address.columnName) ? 'rowHeader' : 'cell';
|
||
}
|
||
else {
|
||
targetType = 'dummy';
|
||
}
|
||
}
|
||
else {
|
||
cell = dom_1.findParentByTagName(target, 'th');
|
||
if (cell) {
|
||
columnName = cell.getAttribute(dom_1.dataAttr.COLUMN_NAME);
|
||
targetType = 'columnHeader';
|
||
}
|
||
}
|
||
return common_1.pruneObject({
|
||
nativeEvent: nativeEvent,
|
||
targetType: targetType,
|
||
rowKey: rowKey,
|
||
columnName: columnName,
|
||
});
|
||
}
|
||
/**
|
||
* Event class for public event of Grid
|
||
* @module event/gridEvent
|
||
* @param {Object} data - Event data for handler
|
||
*/
|
||
var GridEvent = /** @class */ (function () {
|
||
function GridEvent(_a) {
|
||
if (_a === void 0) { _a = {}; }
|
||
var event = _a.event, props = tslib_1.__rest(_a, ["event"]);
|
||
this.stopped = false;
|
||
if (event) {
|
||
this.assignData(getTargetInfo(event));
|
||
}
|
||
if (props) {
|
||
this.assignData(props);
|
||
}
|
||
}
|
||
/**
|
||
* Stops propogation of this event.
|
||
* @memberof event/gridEvent
|
||
*/
|
||
GridEvent.prototype.stop = function () {
|
||
this.stopped = true;
|
||
};
|
||
GridEvent.prototype.isStopped = function () {
|
||
return this.stopped;
|
||
};
|
||
GridEvent.prototype.assignData = function (data) {
|
||
common_1.assign(this, data);
|
||
};
|
||
GridEvent.prototype.setInstance = function (instance) {
|
||
common_1.assign(this, { instance: instance });
|
||
};
|
||
return GridEvent;
|
||
}());
|
||
exports.default = GridEvent;
|
||
|
||
|
||
/***/ }),
|
||
/* 10 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.isDragColumn = exports.isCheckboxColumn = exports.isRowNumColumn = exports.isRowHeader = void 0;
|
||
var common_1 = __webpack_require__(0);
|
||
function isRowHeader(columnName) {
|
||
return common_1.includes(['_number', '_checked', '_draggable'], columnName);
|
||
}
|
||
exports.isRowHeader = isRowHeader;
|
||
function isRowNumColumn(columnName) {
|
||
return columnName === '_number';
|
||
}
|
||
exports.isRowNumColumn = isRowNumColumn;
|
||
function isCheckboxColumn(columnName) {
|
||
return columnName === '_checked';
|
||
}
|
||
exports.isCheckboxColumn = isCheckboxColumn;
|
||
function isDragColumn(columnName) {
|
||
return columnName === '_draggable';
|
||
}
|
||
exports.isDragColumn = isDragColumn;
|
||
|
||
|
||
/***/ }),
|
||
/* 11 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.DISABLED_PRIORITY_COLUMN = exports.DISABLED_PRIORITY_ROW = exports.DISABLED_PRIORITY_CELL = exports.DISABLED_PRIORITY_NONE = exports.DEFAULT_PER_PAGE = exports.RIGHT_MOUSE_BUTTON = exports.TREE_CELL_HORIZONTAL_PADDING = exports.TREE_INDENT_WIDTH = exports.FILTER_DEBOUNCE_TIME = void 0;
|
||
exports.FILTER_DEBOUNCE_TIME = 50;
|
||
exports.TREE_INDENT_WIDTH = 22;
|
||
exports.TREE_CELL_HORIZONTAL_PADDING = 19;
|
||
exports.RIGHT_MOUSE_BUTTON = 2;
|
||
exports.DEFAULT_PER_PAGE = 20;
|
||
exports.DISABLED_PRIORITY_NONE = 'NONE';
|
||
exports.DISABLED_PRIORITY_CELL = 'CELL';
|
||
exports.DISABLED_PRIORITY_ROW = 'ROW';
|
||
exports.DISABLED_PRIORITY_COLUMN = 'COLUMN';
|
||
|
||
|
||
/***/ }),
|
||
/* 12 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.isDraggableColumn = exports.isDisabledColumn = exports.isAllColumnsVisible = exports.getColumnSide = exports.getChildHeaderCount = exports.getHierarchyMaxRowCount = exports.convertHierarchyToData = exports.getComplexColumnsHierarchy = exports.getRemovedHiddenChildColumns = exports.getColumnHierarchy = exports.isComplexHeader = exports.isHiddenColumn = exports.isParentColumnHeader = void 0;
|
||
var tslib_1 = __webpack_require__(1);
|
||
var common_1 = __webpack_require__(0);
|
||
var tree_1 = __webpack_require__(21);
|
||
function isParentColumnHeader(complexColumnHeaders, name) {
|
||
return !!complexColumnHeaders.length && common_1.some(function (item) { return item.name === name; }, complexColumnHeaders);
|
||
}
|
||
exports.isParentColumnHeader = isParentColumnHeader;
|
||
function isHiddenColumn(column, columnName) {
|
||
return column.allColumnMap[columnName].hidden;
|
||
}
|
||
exports.isHiddenColumn = isHiddenColumn;
|
||
function isComplexHeader(column, columnName) {
|
||
return common_1.some(function (_a) {
|
||
var name = _a.name, hideChildHeaders = _a.hideChildHeaders, childNames = _a.childNames;
|
||
return !!(name === columnName || (hideChildHeaders && common_1.includes(childNames, columnName)));
|
||
}, column.complexColumnHeaders);
|
||
}
|
||
exports.isComplexHeader = isComplexHeader;
|
||
function getColumnHierarchy(column, complexColumnHeaders, mergedComplexColumns) {
|
||
var complexColumns = mergedComplexColumns || [];
|
||
if (column) {
|
||
complexColumns.push(column);
|
||
if (complexColumnHeaders) {
|
||
complexColumnHeaders.forEach(function (complexColumnHeader) {
|
||
if (common_1.includes(complexColumnHeader.childNames, column.name)) {
|
||
getColumnHierarchy(complexColumnHeader, complexColumnHeaders, complexColumns);
|
||
}
|
||
});
|
||
}
|
||
}
|
||
return complexColumns;
|
||
}
|
||
exports.getColumnHierarchy = getColumnHierarchy;
|
||
function getRemovedHiddenChildColumns(hierarchies) {
|
||
return hierarchies.map(function (columns) {
|
||
if (columns.length > 1) {
|
||
// The hideChildHeaders option always exists in the second column to last.
|
||
var hideChildHeaders = columns[columns.length - 2].hideChildHeaders;
|
||
if (hideChildHeaders) {
|
||
columns.pop();
|
||
}
|
||
}
|
||
return columns;
|
||
});
|
||
}
|
||
exports.getRemovedHiddenChildColumns = getRemovedHiddenChildColumns;
|
||
function getComplexColumnsHierarchy(columns, complexColumnHeaders) {
|
||
return getRemovedHiddenChildColumns(columns.map(function (column) { return getColumnHierarchy(column, complexColumnHeaders).reverse(); }));
|
||
}
|
||
exports.getComplexColumnsHierarchy = getComplexColumnsHierarchy;
|
||
function convertHierarchyToData(hierarchy) {
|
||
var maxRowCount = getHierarchyMaxRowCount(hierarchy);
|
||
var data = [];
|
||
hierarchy.forEach(function (colunms) {
|
||
for (var i = 0; i < maxRowCount; i += 1) {
|
||
if (!Array.isArray(data[i])) {
|
||
data.push([]);
|
||
}
|
||
var colInfo = colunms[i < colunms.length ? i : colunms.length - 1];
|
||
data[i].push(colInfo.header);
|
||
}
|
||
});
|
||
return data;
|
||
}
|
||
exports.convertHierarchyToData = convertHierarchyToData;
|
||
function getHierarchyMaxRowCount(hierarchies) {
|
||
return Math.max.apply(Math, tslib_1.__spreadArrays([0], common_1.mapProp('length', hierarchies)));
|
||
}
|
||
exports.getHierarchyMaxRowCount = getHierarchyMaxRowCount;
|
||
function getChildHeaderCount(columns, complexColumns, name) {
|
||
var count = 0;
|
||
var leafColumn = common_1.someProp('name', name, columns);
|
||
if (!leafColumn) {
|
||
var complexColumn = common_1.findProp('name', name, complexColumns);
|
||
if (complexColumn) {
|
||
complexColumn.childNames.forEach(function (childName) {
|
||
var leafChildColumn = common_1.someProp('name', childName, columns);
|
||
count += leafChildColumn ? 1 : getChildHeaderCount(columns, complexColumns, childName);
|
||
});
|
||
}
|
||
}
|
||
return count;
|
||
}
|
||
exports.getChildHeaderCount = getChildHeaderCount;
|
||
function getColumnSide(column, columnName) {
|
||
return common_1.someProp('name', columnName, column.visibleColumnsBySideWithRowHeader.R) ? 'R' : 'L';
|
||
}
|
||
exports.getColumnSide = getColumnSide;
|
||
function isAllColumnsVisible(column) {
|
||
var columnsWithoutRowHeader = column.columnsWithoutRowHeader, visibleColumns = column.visibleColumns;
|
||
return columnsWithoutRowHeader.length === visibleColumns.length;
|
||
}
|
||
exports.isAllColumnsVisible = isAllColumnsVisible;
|
||
function isDisabledColumn(column, columnName) {
|
||
var targetColumn = common_1.find(function (_a) {
|
||
var name = _a.name;
|
||
return name === columnName;
|
||
}, column.allColumns);
|
||
return !!(targetColumn === null || targetColumn === void 0 ? void 0 : targetColumn.disabled);
|
||
}
|
||
exports.isDisabledColumn = isDisabledColumn;
|
||
function isDraggableColumn(store, columnName) {
|
||
var column = store.column;
|
||
return (column.draggable &&
|
||
isAllColumnsVisible(column) &&
|
||
column.complexColumnHeaders.length === 0 &&
|
||
!tree_1.isTreeColumnName(column, columnName) &&
|
||
!isDisabledColumn(column, columnName));
|
||
}
|
||
exports.isDraggableColumn = isDraggableColumn;
|
||
|
||
|
||
/***/ }),
|
||
/* 13 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.getRowSpanOfColumn = exports.isRowSpanEnabled = exports.getMaxRowSpanCount = exports.getRowSpanByRowKey = exports.getRowSpanBottomIndex = exports.getRowSpanTopIndex = exports.getRowSpan = exports.getVerticalPosWithRowSpan = exports.getRowRangeWithRowSpan = exports.getMaxRowSpanRange = void 0;
|
||
var common_1 = __webpack_require__(0);
|
||
var selection_1 = __webpack_require__(22);
|
||
function getMainRowSpan(columnName, rowSpan, data) {
|
||
var mainRow = rowSpan.mainRow, mainRowKey = rowSpan.mainRowKey;
|
||
if (mainRow) {
|
||
return rowSpan;
|
||
}
|
||
var mainRowIndex = common_1.findPropIndex('rowKey', mainRowKey, data);
|
||
return data[mainRowIndex].rowSpanMap[columnName];
|
||
}
|
||
function getRowSpanRange(rowRange, colRange, visibleColumns, data) {
|
||
var startColumnIndex = colRange[0], endColumnIndex = colRange[1];
|
||
var startRowIndex = rowRange[0], endRowIndex = rowRange[1];
|
||
for (var index = startColumnIndex; index <= endColumnIndex; index += 1) {
|
||
var filteredRawData = data.filteredRawData;
|
||
var startRowSpanMap = filteredRawData[startRowIndex].rowSpanMap;
|
||
var endRowSpanMap = filteredRawData[endRowIndex].rowSpanMap;
|
||
var columnName = visibleColumns[index].name;
|
||
// get top row index of topmost rowSpan
|
||
if (startRowSpanMap[columnName]) {
|
||
var mainRowKey = startRowSpanMap[columnName].mainRowKey;
|
||
var topRowSpanIndex = common_1.findPropIndex('rowKey', mainRowKey, filteredRawData);
|
||
startRowIndex = startRowIndex > topRowSpanIndex ? topRowSpanIndex : startRowIndex;
|
||
}
|
||
// get bottom row index of bottommost rowSpan
|
||
if (endRowSpanMap[columnName]) {
|
||
var _a = endRowSpanMap[columnName], mainRowKey = _a.mainRowKey, spanCount = _a.spanCount;
|
||
var bottomRowSpanIndex = common_1.findPropIndex('rowKey', mainRowKey, filteredRawData) + spanCount - 1;
|
||
endRowIndex = endRowIndex < bottomRowSpanIndex ? bottomRowSpanIndex : endRowIndex;
|
||
}
|
||
}
|
||
return startRowIndex !== rowRange[0] || endRowIndex !== rowRange[1]
|
||
? getRowSpanRange([startRowIndex, endRowIndex], colRange, visibleColumns, data)
|
||
: [startRowIndex, endRowIndex];
|
||
}
|
||
function getMaxRowSpanRange(rowRange, colRange, visibleColumns, focusRowIndex, data) {
|
||
var sortedColRange = selection_1.getSortedRange(colRange);
|
||
var endRowIndex = rowRange[1];
|
||
var startRowIndex = rowRange[0];
|
||
// if start row index is different from focused index,
|
||
// change start row index to focused row index for getting proper row range
|
||
startRowIndex =
|
||
!common_1.isNull(focusRowIndex) && startRowIndex !== focusRowIndex ? focusRowIndex : startRowIndex;
|
||
var sortedRowRange = selection_1.getSortedRange([startRowIndex, endRowIndex]);
|
||
var _a = getRowSpanRange(sortedRowRange, sortedColRange, visibleColumns, data), startRowSpanIndex = _a[0], endRowSpanIndex = _a[1];
|
||
return startRowIndex > endRowIndex
|
||
? [endRowSpanIndex, startRowSpanIndex]
|
||
: [startRowSpanIndex, endRowSpanIndex];
|
||
}
|
||
exports.getMaxRowSpanRange = getMaxRowSpanRange;
|
||
function getRowRangeWithRowSpan(rowRange, colRange, column, rowIndex, data) {
|
||
if (isRowSpanEnabled(data.sortState, column)) {
|
||
return getMaxRowSpanRange(rowRange, colRange, column.visibleColumnsWithRowHeader, rowIndex, data);
|
||
}
|
||
return rowRange;
|
||
}
|
||
exports.getRowRangeWithRowSpan = getRowRangeWithRowSpan;
|
||
function getVerticalPosWithRowSpan(columnName, rowSpan, rowCoords, data) {
|
||
var mainRowSpan = getMainRowSpan(columnName, rowSpan, data);
|
||
var mainRowIndex = common_1.findPropIndex('rowKey', mainRowSpan.mainRowKey, data);
|
||
var spanCount = mainRowSpan.spanCount;
|
||
var top = rowCoords.offsets[mainRowIndex];
|
||
var bottom = top;
|
||
for (var count = 0; count < spanCount; count += 1) {
|
||
bottom += rowCoords.heights[mainRowIndex + count];
|
||
}
|
||
return [top, bottom];
|
||
}
|
||
exports.getVerticalPosWithRowSpan = getVerticalPosWithRowSpan;
|
||
function getRowSpan(rowIndex, columnName, data) {
|
||
var rowSpanMap = data[rowIndex].rowSpanMap;
|
||
return rowSpanMap[columnName];
|
||
}
|
||
exports.getRowSpan = getRowSpan;
|
||
/*
|
||
* get top row index of specific rowSpan cell
|
||
*/
|
||
function getRowSpanTopIndex(rowIndex, columnName, data) {
|
||
var rowSpan = getRowSpan(rowIndex, columnName, data);
|
||
if (!rowSpan) {
|
||
return rowIndex;
|
||
}
|
||
return common_1.findPropIndex('rowKey', rowSpan.mainRowKey, data);
|
||
}
|
||
exports.getRowSpanTopIndex = getRowSpanTopIndex;
|
||
/*
|
||
* get bottom row index of specific rowSpan cell
|
||
*/
|
||
function getRowSpanBottomIndex(rowIndex, columnName, data) {
|
||
var rowSpan = getRowSpan(rowIndex, columnName, data);
|
||
if (!rowSpan) {
|
||
return rowIndex;
|
||
}
|
||
var mainRowIndex = common_1.findPropIndex('rowKey', rowSpan.mainRowKey, data);
|
||
return mainRowIndex + rowSpan.spanCount - 1;
|
||
}
|
||
exports.getRowSpanBottomIndex = getRowSpanBottomIndex;
|
||
function getRowSpanByRowKey(rowKey, columnName, data) {
|
||
var rowIndex = common_1.findPropIndex('rowKey', rowKey, data);
|
||
if (rowIndex === -1) {
|
||
return null;
|
||
}
|
||
return getRowSpan(rowIndex, columnName, data) || null;
|
||
}
|
||
exports.getRowSpanByRowKey = getRowSpanByRowKey;
|
||
/*
|
||
* get max rowSpan count in all columns that have rowSpan
|
||
*/
|
||
function getMaxRowSpanCount(rowIndex, data) {
|
||
var _a;
|
||
var rowSpanMap = (_a = data[rowIndex]) === null || _a === void 0 ? void 0 : _a.rowSpanMap;
|
||
if (common_1.isEmpty(rowSpanMap)) {
|
||
return 0;
|
||
}
|
||
return Object.keys(rowSpanMap).reduce(function (acc, columnName) { return Math.max(acc, rowSpanMap[columnName].spanCount); }, 0);
|
||
}
|
||
exports.getMaxRowSpanCount = getMaxRowSpanCount;
|
||
function isRowSpanEnabled(sortState, column) {
|
||
return (sortState.columns[0].columnName === 'sortKey' || !!(column === null || column === void 0 ? void 0 : column.visibleRowSpanEnabledColumns.length));
|
||
}
|
||
exports.isRowSpanEnabled = isRowSpanEnabled;
|
||
function getRowSpanOfColumn(data, columnName, perPage) {
|
||
var rowSpanOfColumn = {};
|
||
var rowSpan = {};
|
||
var mainRowKey = null;
|
||
var mainRowValue = null;
|
||
data.forEach(function (_a, index) {
|
||
var rowKey = _a.rowKey, _b = columnName, value = _a[_b];
|
||
var isRowInNextPage = perPage && index !== 0 && index % perPage === 0;
|
||
if (mainRowValue !== value || isRowInNextPage) {
|
||
if (!common_1.isNull(mainRowKey) && rowSpan[columnName] !== 1) {
|
||
rowSpanOfColumn[mainRowKey] = rowSpan;
|
||
}
|
||
rowSpan = {};
|
||
rowSpan[columnName] = 1;
|
||
mainRowKey = rowKey;
|
||
mainRowValue = value;
|
||
}
|
||
else {
|
||
rowSpan[columnName] += 1;
|
||
}
|
||
});
|
||
if (!common_1.isNull(mainRowKey) && rowSpan[columnName] !== 1) {
|
||
rowSpanOfColumn[mainRowKey] = rowSpan;
|
||
}
|
||
return rowSpanOfColumn;
|
||
}
|
||
exports.getRowSpanOfColumn = getRowSpanOfColumn;
|
||
|
||
|
||
/***/ }),
|
||
/* 14 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.removeRows = exports.appendRows = exports.scrollToNext = exports.moveRow = exports.setRow = exports.updateRowNumber = exports.setCheckedAllRows = exports.setLoadingState = exports.removeColumnClassName = exports.addColumnClassName = exports.removeCellClassName = exports.addCellClassName = exports.removeRowClassName = exports.addRowClassName = exports.resetData = exports.clearData = exports.removeRow = exports.appendRow = exports.setRowCheckDisabled = exports.setCellDisabled = exports.setColumnDisabled = exports.setRowDisabled = exports.setDisabled = exports.setDisabledAllCheckbox = exports.uncheckAll = exports.checkAll = exports.setCheckboxBetween = exports.uncheck = exports.check = exports.setColumnValues = exports.setAllRowAttribute = exports.setRowsAttributeInRange = exports.setRowAttribute = exports.isUpdatableRowAttr = exports.setValue = exports.makeObservable = exports.updateHeights = void 0;
|
||
var tslib_1 = __webpack_require__(1);
|
||
var common_1 = __webpack_require__(0);
|
||
var data_1 = __webpack_require__(15);
|
||
var observable_1 = __webpack_require__(5);
|
||
var selection_1 = __webpack_require__(16);
|
||
var eventBus_1 = __webpack_require__(7);
|
||
var gridEvent_1 = tslib_1.__importDefault(__webpack_require__(9));
|
||
var instance_1 = __webpack_require__(8);
|
||
var tree_1 = __webpack_require__(31);
|
||
var rowSpan_1 = __webpack_require__(13);
|
||
var focus_1 = __webpack_require__(18);
|
||
var tree_2 = __webpack_require__(20);
|
||
var sort_1 = __webpack_require__(29);
|
||
var data_2 = __webpack_require__(6);
|
||
var summary_1 = __webpack_require__(26);
|
||
var filter_1 = __webpack_require__(35);
|
||
var viewport_1 = __webpack_require__(25);
|
||
var column_1 = __webpack_require__(10);
|
||
var pagination_1 = __webpack_require__(36);
|
||
var rowSpan_2 = __webpack_require__(24);
|
||
var lazyObservable_1 = __webpack_require__(28);
|
||
var validation_1 = __webpack_require__(27);
|
||
var column_2 = __webpack_require__(32);
|
||
var renderState_1 = __webpack_require__(49);
|
||
var constant_1 = __webpack_require__(11);
|
||
function getIndexRangeOfCheckbox(_a, startRowKey, targetRowKey) {
|
||
var data = _a.data, column = _a.column, id = _a.id;
|
||
var filtered = data_2.isFiltered(data);
|
||
var from = data_2.findIndexByRowKey(data, column, id, startRowKey, filtered);
|
||
var to = data_2.findIndexByRowKey(data, column, id, targetRowKey, filtered);
|
||
return from < to ? [from, to + 1] : [to, from + 1];
|
||
}
|
||
function updateHeightsWithFilteredData(store) {
|
||
var data = store.data, focus = store.focus;
|
||
var filteredRawData = data.filteredRawData;
|
||
var rowKey = focus.rowKey;
|
||
if (!filteredRawData.some(function (row) { return row.rowKey === rowKey; })) {
|
||
focus_1.initFocus(store);
|
||
}
|
||
updateHeights(store);
|
||
}
|
||
function updateHeights(store) {
|
||
var data = store.data, rowCoords = store.rowCoords, dimension = store.dimension;
|
||
var pageOptions = data.pageOptions, pageRowRange = data.pageRowRange, filteredRawData = data.filteredRawData;
|
||
var rowHeight = dimension.rowHeight;
|
||
rowCoords.heights = pageOptions.useClient
|
||
? filteredRawData.slice.apply(filteredRawData, pageRowRange).map(function (row) { return data_2.getRowHeight(row, rowHeight); })
|
||
: filteredRawData.map(function (row) { return data_2.getRowHeight(row, rowHeight); });
|
||
}
|
||
exports.updateHeights = updateHeights;
|
||
function makeObservable(store, rowIndex, silent) {
|
||
if (silent === void 0) { silent = false; }
|
||
var data = store.data, column = store.column, id = store.id;
|
||
var rawData = data.rawData, viewData = data.viewData;
|
||
var treeColumnName = column.treeColumnName;
|
||
var rawRow = rawData[rowIndex];
|
||
if (observable_1.isObservable(rawRow)) {
|
||
return;
|
||
}
|
||
if (treeColumnName) {
|
||
var parentRow = data_2.findRowByRowKey(data, column, id, rawRow._attributes.tree.parentRowKey);
|
||
rawData[rowIndex] = tree_2.createTreeRawRow(id, rawRow, parentRow || null, column);
|
||
}
|
||
else {
|
||
rawData[rowIndex] = data_1.createRawRow(id, rawRow, rowIndex, column);
|
||
}
|
||
viewData[rowIndex] = data_1.createViewRow(id, rawData[rowIndex], rawData, column);
|
||
if (!silent) {
|
||
observable_1.notify(data, 'rawData', 'filteredRawData', 'viewData', 'filteredViewData');
|
||
}
|
||
}
|
||
exports.makeObservable = makeObservable;
|
||
function setValue(store, rowKey, columnName, value, checkCellState) {
|
||
if (checkCellState === void 0) { checkCellState = false; }
|
||
var gridEvent;
|
||
var column = store.column, data = store.data, id = store.id;
|
||
var eventBus = eventBus_1.getEventBus(id);
|
||
var rawData = data.rawData, viewData = data.viewData, sortState = data.sortState;
|
||
var allColumnMap = column.allColumnMap, columnsWithoutRowHeader = column.columnsWithoutRowHeader;
|
||
var rowIndex = data_2.findIndexByRowKey(data, column, id, rowKey, false);
|
||
var targetRow = rawData[rowIndex];
|
||
if (!targetRow || targetRow[columnName] === value) {
|
||
return;
|
||
}
|
||
if (checkCellState) {
|
||
makeObservable(store, rowIndex);
|
||
var _a = viewData[rowIndex].valueMap[columnName], disabled = _a.disabled, editable = _a.editable;
|
||
if (disabled || !editable) {
|
||
return;
|
||
}
|
||
}
|
||
rowSpan_2.resetRowSpan(store);
|
||
var targetColumn = common_1.findProp('name', columnName, columnsWithoutRowHeader);
|
||
var orgValue = targetRow[columnName];
|
||
// @TODO: 'onBeforeChange' event is deprecated. This event will be replaced with 'beforeChange' event
|
||
if (targetColumn && targetColumn.onBeforeChange) {
|
||
gridEvent = new gridEvent_1.default({ rowKey: rowKey, columnName: columnName, value: orgValue, nextValue: value });
|
||
targetColumn.onBeforeChange(gridEvent);
|
||
if (gridEvent.isStopped()) {
|
||
rowSpan_2.updateRowSpan(store);
|
||
return;
|
||
}
|
||
}
|
||
var change = { rowKey: rowKey, columnName: columnName, value: orgValue, nextValue: value };
|
||
gridEvent = new gridEvent_1.default({ origin: 'cell', changes: [change] });
|
||
/**
|
||
* Occurs before one or more cells is changed
|
||
* @event Grid#beforeChange
|
||
* @property {string} origin - The type of change('paste', 'delete', 'cell')
|
||
* @property {Array.<object>} changes - rowKey, column name, original values and next values before changing the values
|
||
* @property {Grid} instance - Current grid instance
|
||
*/
|
||
eventBus.trigger('beforeChange', gridEvent);
|
||
if (gridEvent.isStopped()) {
|
||
rowSpan_2.updateRowSpan(store);
|
||
return;
|
||
}
|
||
value = change.nextValue;
|
||
var rowSpanMap = targetRow.rowSpanMap;
|
||
var columns = sortState.columns;
|
||
var index = common_1.findPropIndex('columnName', columnName, columns);
|
||
validation_1.replaceColumnUniqueInfoMap(id, column, { rowKey: rowKey, columnName: columnName, prevValue: orgValue, value: value });
|
||
targetRow[columnName] = value;
|
||
data_1.setRowRelationListItems(targetRow, allColumnMap);
|
||
if (index !== -1) {
|
||
sort_1.sort(store, columnName, columns[index].ascending, true, false);
|
||
}
|
||
setTimeout(function () {
|
||
updateHeightsWithFilteredData(store);
|
||
});
|
||
summary_1.updateSummaryValueByCell(store, columnName, { orgValue: orgValue, value: value });
|
||
instance_1.getDataManager(id).push('UPDATE', targetRow);
|
||
if (!common_1.isEmpty(rowSpanMap) && rowSpanMap[columnName] && rowSpan_1.isRowSpanEnabled(sortState, column)) {
|
||
var spanCount = rowSpanMap[columnName].spanCount;
|
||
// update sub rows value
|
||
for (var count = 1; count < spanCount; count += 1) {
|
||
rawData[rowIndex + count][columnName] = value;
|
||
summary_1.updateSummaryValueByCell(store, columnName, { orgValue: orgValue, value: value });
|
||
instance_1.getDataManager(id).push('UPDATE', rawData[rowIndex + count]);
|
||
}
|
||
}
|
||
column_2.setAutoResizingColumnWidths(store);
|
||
// @TODO: 'onAfterChange' event is deprecated. This event will be replaced with 'afterChange' event
|
||
if (targetColumn && targetColumn.onAfterChange) {
|
||
gridEvent = new gridEvent_1.default({ rowKey: rowKey, columnName: columnName, value: value, prevValue: orgValue });
|
||
targetColumn.onAfterChange(gridEvent);
|
||
}
|
||
gridEvent = new gridEvent_1.default({
|
||
origin: 'cell',
|
||
changes: [{ rowKey: rowKey, columnName: columnName, value: value, prevValue: orgValue }],
|
||
});
|
||
/**
|
||
* Occurs after one or more cells is changed
|
||
* @event Grid#afterChange
|
||
* @property {string} origin - The type of change('paste', 'delete', 'cell')
|
||
* @property {Array.<object>} changes - rowKey, column name, previous values and changed values after changing the values
|
||
* @property {Grid} instance - Current grid instance
|
||
*/
|
||
eventBus.trigger('afterChange', gridEvent);
|
||
rowSpan_2.updateRowSpan(store);
|
||
}
|
||
exports.setValue = setValue;
|
||
function isUpdatableRowAttr(name, checkDisabled) {
|
||
return !(name === 'checked' && checkDisabled);
|
||
}
|
||
exports.isUpdatableRowAttr = isUpdatableRowAttr;
|
||
function setRowAttribute(_a, rowKey, attrName, value) {
|
||
var data = _a.data, column = _a.column, id = _a.id;
|
||
var targetRow = data_2.findRowByRowKey(data, column, id, rowKey, false);
|
||
// https://github.com/microsoft/TypeScript/issues/34293
|
||
if (targetRow && isUpdatableRowAttr(attrName, targetRow._attributes.checkDisabled)) {
|
||
targetRow._attributes[attrName] = value;
|
||
}
|
||
}
|
||
exports.setRowAttribute = setRowAttribute;
|
||
function setRowsAttributeInRange(store, attrName, value, range) {
|
||
var _a;
|
||
(_a = store.data.filteredRawData).slice.apply(_a, range).forEach(function (row) {
|
||
if (isUpdatableRowAttr(attrName, row._attributes.checkDisabled)) {
|
||
row._attributes[attrName] = value;
|
||
}
|
||
});
|
||
}
|
||
exports.setRowsAttributeInRange = setRowsAttributeInRange;
|
||
function setAllRowAttribute(_a, attrName, value, allPage) {
|
||
var data = _a.data;
|
||
if (allPage === void 0) { allPage = true; }
|
||
var filteredRawData = data.filteredRawData;
|
||
var range = allPage ? [0, filteredRawData.length] : data.pageRowRange;
|
||
filteredRawData.slice.apply(filteredRawData, range).forEach(function (row) {
|
||
if (isUpdatableRowAttr(attrName, row._attributes.checkDisabled)) {
|
||
// https://github.com/microsoft/TypeScript/issues/34293
|
||
row._attributes[attrName] = value;
|
||
}
|
||
});
|
||
}
|
||
exports.setAllRowAttribute = setAllRowAttribute;
|
||
function setColumnValues(store, columnName, value, checkCellState) {
|
||
if (checkCellState === void 0) { checkCellState = false; }
|
||
if (checkCellState) {
|
||
// @TODO: find more practical way to make observable
|
||
lazyObservable_1.createObservableData(store, true);
|
||
}
|
||
var id = store.id, data = store.data, column = store.column;
|
||
data.rawData.forEach(function (targetRow, index) {
|
||
var valid = true;
|
||
if (checkCellState) {
|
||
var _a = data.viewData[index].valueMap[columnName], disabled = _a.disabled, editable = _a.editable;
|
||
valid = !disabled && editable;
|
||
}
|
||
if (targetRow[columnName] !== value && valid) {
|
||
validation_1.replaceColumnUniqueInfoMap(id, column, {
|
||
rowKey: targetRow.rowKey,
|
||
columnName: columnName,
|
||
prevValue: targetRow[columnName],
|
||
value: value,
|
||
});
|
||
targetRow[columnName] = value;
|
||
instance_1.getDataManager(id).push('UPDATE', targetRow);
|
||
}
|
||
});
|
||
summary_1.updateSummaryValueByColumn(store, columnName, { value: value });
|
||
validation_1.forceValidateUniquenessOfColumn(data.rawData, column, columnName);
|
||
column_2.setAutoResizingColumnWidths(store);
|
||
rowSpan_2.updateRowSpan(store);
|
||
}
|
||
exports.setColumnValues = setColumnValues;
|
||
function check(store, rowKey) {
|
||
var id = store.id, column = store.column, data = store.data;
|
||
var allColumnMap = column.allColumnMap, _a = column.treeColumnName, treeColumnName = _a === void 0 ? '' : _a;
|
||
var eventBus = eventBus_1.getEventBus(id);
|
||
var gridEvent = new gridEvent_1.default({ rowKey: rowKey });
|
||
data.clickedCheckboxRowkey = rowKey;
|
||
setRowAttribute(store, rowKey, 'checked', true);
|
||
if (allColumnMap[treeColumnName]) {
|
||
tree_1.changeTreeRowsCheckedState(store, rowKey, true);
|
||
}
|
||
observable_1.asyncInvokeObserver(function () {
|
||
setCheckedAllRows(store);
|
||
});
|
||
/**
|
||
* Occurs when a checkbox in row header is checked
|
||
* @event Grid#check
|
||
* @property {number | string} rowKey - rowKey of the checked row
|
||
* @property {Grid} instance - Current grid instance
|
||
*/
|
||
eventBus.trigger('check', gridEvent);
|
||
}
|
||
exports.check = check;
|
||
function uncheck(store, rowKey) {
|
||
var id = store.id, column = store.column, data = store.data;
|
||
var allColumnMap = column.allColumnMap, _a = column.treeColumnName, treeColumnName = _a === void 0 ? '' : _a;
|
||
var eventBus = eventBus_1.getEventBus(id);
|
||
var gridEvent = new gridEvent_1.default({ rowKey: rowKey });
|
||
data.clickedCheckboxRowkey = rowKey;
|
||
setRowAttribute(store, rowKey, 'checked', false);
|
||
if (allColumnMap[treeColumnName]) {
|
||
tree_1.changeTreeRowsCheckedState(store, rowKey, false);
|
||
}
|
||
observable_1.asyncInvokeObserver(function () {
|
||
setCheckedAllRows(store);
|
||
});
|
||
/**
|
||
* Occurs when a checkbox in row header is unchecked
|
||
* @event Grid#uncheck
|
||
* @property {number | string} rowKey - rowKey of the unchecked row
|
||
* @property {Grid} instance - Current grid instance
|
||
*/
|
||
eventBus.trigger('uncheck', gridEvent);
|
||
}
|
||
exports.uncheck = uncheck;
|
||
function setCheckboxBetween(store, value, startRowKey, endRowKey) {
|
||
var data = store.data;
|
||
var clickedCheckboxRowkey = data.clickedCheckboxRowkey;
|
||
var targetRowKey = endRowKey || clickedCheckboxRowkey;
|
||
data.clickedCheckboxRowkey = startRowKey;
|
||
if (common_1.isNil(targetRowKey)) {
|
||
if (value) {
|
||
check(store, startRowKey);
|
||
}
|
||
else {
|
||
uncheck(store, startRowKey);
|
||
}
|
||
return;
|
||
}
|
||
var range = getIndexRangeOfCheckbox(store, startRowKey, targetRowKey);
|
||
setRowsAttributeInRange(store, 'checked', value, range);
|
||
setCheckedAllRows(store);
|
||
}
|
||
exports.setCheckboxBetween = setCheckboxBetween;
|
||
function checkAll(store, allPage) {
|
||
var id = store.id;
|
||
setAllRowAttribute(store, 'checked', true, allPage);
|
||
setCheckedAllRows(store);
|
||
var eventBus = eventBus_1.getEventBus(id);
|
||
var gridEvent = new gridEvent_1.default();
|
||
/**
|
||
* Occurs when a checkbox in header is checked(checked all checkbox in row header)
|
||
* @event Grid#checkAll
|
||
* @property {Grid} instance - Current grid instance
|
||
*/
|
||
eventBus.trigger('checkAll', gridEvent);
|
||
}
|
||
exports.checkAll = checkAll;
|
||
function uncheckAll(store, allPage) {
|
||
var id = store.id;
|
||
setAllRowAttribute(store, 'checked', false, allPage);
|
||
setCheckedAllRows(store);
|
||
var eventBus = eventBus_1.getEventBus(id);
|
||
var gridEvent = new gridEvent_1.default();
|
||
/**
|
||
* Occurs when a checkbox in header is unchecked(unchecked all checkbox in row header)
|
||
* @event Grid#uncheckAll
|
||
* @property {Grid} instance - Current grid instance
|
||
*/
|
||
eventBus.trigger('uncheckAll', gridEvent);
|
||
}
|
||
exports.uncheckAll = uncheckAll;
|
||
function setDisabledAllCheckbox(_a) {
|
||
var data = _a.data;
|
||
var rawData = data.rawData;
|
||
data.disabledAllCheckbox =
|
||
!!rawData.length && rawData.every(function (row) { return row._attributes.checkDisabled; });
|
||
}
|
||
exports.setDisabledAllCheckbox = setDisabledAllCheckbox;
|
||
function setRowOrColumnDisabled(target, disabled) {
|
||
if (target.disabled === disabled) {
|
||
observable_1.notify(target, 'disabled');
|
||
}
|
||
else {
|
||
target.disabled = disabled;
|
||
}
|
||
}
|
||
// @TODO consider the client pagination with disabled
|
||
function setDisabled(store, disabled) {
|
||
var data = store.data, column = store.column;
|
||
data.rawData.forEach(function (row) {
|
||
row._disabledPriority = {};
|
||
setAllRowAttribute(store, 'disabled', disabled);
|
||
setAllRowAttribute(store, 'checkDisabled', disabled);
|
||
});
|
||
column.columnsWithoutRowHeader.forEach(function (columnInfo) {
|
||
columnInfo.disabled = disabled;
|
||
});
|
||
data.disabledAllCheckbox = disabled;
|
||
}
|
||
exports.setDisabled = setDisabled;
|
||
function setRowDisabled(store, disabled, rowKey, withCheckbox) {
|
||
var data = store.data, column = store.column, id = store.id;
|
||
var row = data_2.findRowByRowKey(data, column, id, rowKey, false);
|
||
if (row) {
|
||
var _attributes = row._attributes, _disabledPriority_1 = row._disabledPriority;
|
||
column.allColumns.forEach(function (columnInfo) {
|
||
_disabledPriority_1[columnInfo.name] = constant_1.DISABLED_PRIORITY_ROW;
|
||
});
|
||
if (withCheckbox) {
|
||
_attributes.checkDisabled = disabled;
|
||
setDisabledAllCheckbox(store);
|
||
}
|
||
setRowOrColumnDisabled(_attributes, disabled);
|
||
}
|
||
}
|
||
exports.setRowDisabled = setRowDisabled;
|
||
function setColumnDisabled(_a, disabled, columnName) {
|
||
var data = _a.data, column = _a.column;
|
||
if (column_1.isRowHeader(columnName)) {
|
||
return;
|
||
}
|
||
data.rawData.forEach(function (row) {
|
||
row._disabledPriority[columnName] = constant_1.DISABLED_PRIORITY_COLUMN;
|
||
});
|
||
setRowOrColumnDisabled(column.allColumnMap[columnName], disabled);
|
||
}
|
||
exports.setColumnDisabled = setColumnDisabled;
|
||
function setCellDisabled(store, disabled, rowKey, columnName) {
|
||
var data = store.data, column = store.column, id = store.id;
|
||
if (column_1.isRowNumColumn(columnName) || column_1.isDragColumn(columnName)) {
|
||
return;
|
||
}
|
||
var row = data_2.findRowByRowKey(data, column, id, rowKey, false);
|
||
if (row) {
|
||
var _attributes = row._attributes, _disabledPriority = row._disabledPriority;
|
||
_disabledPriority[columnName] = disabled ? constant_1.DISABLED_PRIORITY_CELL : constant_1.DISABLED_PRIORITY_NONE;
|
||
if (column_1.isCheckboxColumn(columnName)) {
|
||
_attributes.checkDisabled = disabled;
|
||
setDisabledAllCheckbox(store);
|
||
}
|
||
observable_1.notify(row, '_disabledPriority');
|
||
}
|
||
}
|
||
exports.setCellDisabled = setCellDisabled;
|
||
function setRowCheckDisabled(store, disabled, rowKey) {
|
||
var data = store.data, column = store.column, id = store.id;
|
||
var row = data_2.findRowByRowKey(data, column, id, rowKey, false);
|
||
if (row) {
|
||
row._attributes.checkDisabled = disabled;
|
||
setDisabledAllCheckbox(store);
|
||
}
|
||
}
|
||
exports.setRowCheckDisabled = setRowCheckDisabled;
|
||
function appendRow(store, row, options) {
|
||
var data = store.data, column = store.column, id = store.id;
|
||
var rawData = data.rawData, viewData = data.viewData, sortState = data.sortState, pageOptions = data.pageOptions;
|
||
var _a = options.at, at = _a === void 0 ? rawData.length : _a, extendPrevRowSpan = options.extendPrevRowSpan;
|
||
var _b = data_2.getCreatedRowInfo(store, at, row), rawRow = _b.rawRow, viewRow = _b.viewRow, prevRow = _b.prevRow;
|
||
var inserted = at !== rawData.length;
|
||
common_1.silentSplice(rawData, at, 0, rawRow);
|
||
common_1.silentSplice(viewData, at, 0, viewRow);
|
||
makeObservable(store, at);
|
||
pagination_1.updatePageOptions(store, { totalCount: pageOptions.totalCount + 1 });
|
||
updateHeights(store);
|
||
if (inserted) {
|
||
sort_1.updateSortKey(data, at);
|
||
}
|
||
sort_1.sortByCurrentState(store);
|
||
if (rowSpan_1.isRowSpanEnabled(sortState, column)) {
|
||
if (prevRow) {
|
||
rowSpan_2.updateRowSpanWhenAppending(rawData, prevRow, extendPrevRowSpan || false);
|
||
}
|
||
rowSpan_2.updateRowSpan(store);
|
||
}
|
||
instance_1.getDataManager(id).push('CREATE', rawRow, inserted);
|
||
summary_1.updateSummaryValueByRow(store, rawRow, { type: 'APPEND' });
|
||
postUpdateAfterManipulation(store, at, 'DONE', [rawRow]);
|
||
}
|
||
exports.appendRow = appendRow;
|
||
function removeRow(store, rowKey, options) {
|
||
var data = store.data, id = store.id, focus = store.focus, column = store.column;
|
||
var rawData = data.rawData, viewData = data.viewData, sortState = data.sortState;
|
||
var rowIndex = data_2.findIndexByRowKey(data, column, id, rowKey, false);
|
||
if (rowIndex === -1) {
|
||
return;
|
||
}
|
||
var removedRow = {};
|
||
var nextRow = rawData[rowIndex + 1];
|
||
pagination_1.updatePageWhenRemovingRow(store, 1);
|
||
validation_1.removeUniqueInfoMap(id, rawData[rowIndex], column);
|
||
observable_1.batchObserver(function () {
|
||
removedRow = rawData.splice(rowIndex, 1)[0];
|
||
});
|
||
viewData.splice(rowIndex, 1);
|
||
updateHeights(store);
|
||
if (!common_1.someProp('rowKey', focus.rowKey, rawData)) {
|
||
focus_1.initFocus(store);
|
||
}
|
||
selection_1.initSelection(store);
|
||
if (nextRow && rowSpan_1.isRowSpanEnabled(sortState, column)) {
|
||
rowSpan_2.updateRowSpanWhenRemoving(rawData, removedRow, nextRow, options.keepRowSpanData || false);
|
||
}
|
||
if (rowIndex !== rawData.length) {
|
||
sort_1.updateSortKey(data, removedRow.sortKey + 1, false);
|
||
}
|
||
instance_1.getDataManager(id).push('DELETE', removedRow);
|
||
summary_1.updateSummaryValueByRow(store, removedRow, { type: 'REMOVE' });
|
||
postUpdateAfterManipulation(store, rowIndex, data_2.getLoadingState(rawData));
|
||
}
|
||
exports.removeRow = removeRow;
|
||
function clearData(store) {
|
||
var data = store.data, id = store.id, rowCoords = store.rowCoords;
|
||
validation_1.createNewValidationMap(id);
|
||
viewport_1.initScrollPosition(store);
|
||
focus_1.initFocus(store);
|
||
selection_1.initSelection(store);
|
||
sort_1.initSortState(data);
|
||
filter_1.initFilter(store);
|
||
rowCoords.heights = [];
|
||
data.rawData = [];
|
||
data.viewData = [];
|
||
pagination_1.updatePageOptions(store, { totalCount: 0, page: 1 }, true);
|
||
summary_1.updateAllSummaryValues(store);
|
||
setLoadingState(store, 'EMPTY');
|
||
setCheckedAllRows(store);
|
||
instance_1.getDataManager(id).clearAll();
|
||
}
|
||
exports.clearData = clearData;
|
||
function resetData(store, inputData, options) {
|
||
var data = store.data, column = store.column, id = store.id;
|
||
var sortState = options.sortState, filterState = options.filterState, pageState = options.pageState;
|
||
validation_1.createNewValidationMap(id);
|
||
var _a = data_1.createData(id, inputData, column, { lazyObservable: true }), rawData = _a.rawData, viewData = _a.viewData;
|
||
var eventBus = eventBus_1.getEventBus(id);
|
||
var gridEvent = new gridEvent_1.default();
|
||
viewport_1.initScrollPosition(store);
|
||
focus_1.initFocus(store);
|
||
selection_1.initSelection(store);
|
||
sort_1.resetSortState(store, sortState);
|
||
filter_1.resetFilterState(store, filterState);
|
||
pagination_1.resetPageState(store, rawData.length, pageState);
|
||
data.rawData = rawData;
|
||
data.viewData = viewData;
|
||
updateHeights(store);
|
||
summary_1.updateAllSummaryValues(store);
|
||
setLoadingState(store, data_2.getLoadingState(rawData));
|
||
setCheckedAllRows(store);
|
||
instance_1.getDataManager(id).setOriginData(inputData);
|
||
instance_1.getDataManager(id).clearAll();
|
||
column_2.setColumnWidthsByText(store);
|
||
rowSpan_2.updateRowSpan(store);
|
||
setTimeout(function () {
|
||
/**
|
||
* Occurs when the grid data is updated and the grid is rendered onto the DOM
|
||
* The event occurs only in the following API as below.
|
||
* 'resetData', 'restore', 'reloadData', 'readData', 'setPerPage' with 'dataSource', using 'dataSource'
|
||
* @event Grid#onGridUpdated
|
||
* @property {Grid} instance - Current grid instance
|
||
*/
|
||
eventBus.trigger('onGridUpdated', gridEvent);
|
||
});
|
||
}
|
||
exports.resetData = resetData;
|
||
function addRowClassName(store, rowKey, className) {
|
||
var data = store.data, column = store.column, id = store.id;
|
||
var row = data_2.findRowByRowKey(data, column, id, rowKey, false);
|
||
if (row) {
|
||
var rowClassMap = row._attributes.className.row;
|
||
var isExist = common_1.includes(rowClassMap, className);
|
||
if (!isExist) {
|
||
rowClassMap.push(className);
|
||
observable_1.notify(row._attributes, 'className');
|
||
}
|
||
}
|
||
}
|
||
exports.addRowClassName = addRowClassName;
|
||
function removeRowClassName(store, rowKey, className) {
|
||
var data = store.data, column = store.column, id = store.id;
|
||
var row = data_2.findRowByRowKey(data, column, id, rowKey, false);
|
||
if (row) {
|
||
common_1.removeArrayItem(className, row._attributes.className.row);
|
||
observable_1.notify(row._attributes, 'className');
|
||
}
|
||
}
|
||
exports.removeRowClassName = removeRowClassName;
|
||
function addClassNameToAttribute(row, columnName, className) {
|
||
var columnClassNames = row._attributes.className.column[columnName];
|
||
row._attributes.className.column[columnName] = data_2.getAddedClassName(className, columnClassNames);
|
||
observable_1.notify(row._attributes, 'className');
|
||
}
|
||
function removeClassNameToAttribute(row, columnName, className) {
|
||
var columnClassNames = row._attributes.className.column[columnName];
|
||
if (columnClassNames) {
|
||
row._attributes.className.column[columnName] = data_2.getRemovedClassName(className, columnClassNames);
|
||
}
|
||
observable_1.notify(row._attributes, 'className');
|
||
}
|
||
function addCellClassName(store, rowKey, columnName, className) {
|
||
var data = store.data, column = store.column, id = store.id;
|
||
var row = data_2.findRowByRowKey(data, column, id, rowKey, false);
|
||
if (row) {
|
||
addClassNameToAttribute(row, columnName, className);
|
||
}
|
||
}
|
||
exports.addCellClassName = addCellClassName;
|
||
function removeCellClassName(store, rowKey, columnName, className) {
|
||
var data = store.data, column = store.column, id = store.id;
|
||
var row = data_2.findRowByRowKey(data, column, id, rowKey);
|
||
if (row) {
|
||
removeClassNameToAttribute(row, columnName, className);
|
||
}
|
||
}
|
||
exports.removeCellClassName = removeCellClassName;
|
||
function addColumnClassName(_a, columnName, className) {
|
||
var data = _a.data;
|
||
var rawData = data.rawData;
|
||
rawData.forEach(function (row) {
|
||
addClassNameToAttribute(row, columnName, className);
|
||
});
|
||
}
|
||
exports.addColumnClassName = addColumnClassName;
|
||
function removeColumnClassName(_a, columnName, className) {
|
||
var data = _a.data;
|
||
var rawData = data.rawData;
|
||
rawData.forEach(function (row) {
|
||
removeClassNameToAttribute(row, columnName, className);
|
||
});
|
||
}
|
||
exports.removeColumnClassName = removeColumnClassName;
|
||
function setLoadingState(_a, state) {
|
||
var data = _a.data;
|
||
data.loadingState = state;
|
||
}
|
||
exports.setLoadingState = setLoadingState;
|
||
function setCheckedAllRows(_a) {
|
||
var data = _a.data;
|
||
var filteredRawData = data.filteredRawData, pageRowRange = data.pageRowRange;
|
||
var result = false;
|
||
if (filteredRawData.length) {
|
||
var enableCheckRows = filteredRawData
|
||
.slice.apply(filteredRawData, pageRowRange).filter(function (row) { return !row._attributes.checkDisabled; });
|
||
result = !!enableCheckRows.length && enableCheckRows.every(function (row) { return row._attributes.checked; });
|
||
}
|
||
data.checkedAllRows = result;
|
||
}
|
||
exports.setCheckedAllRows = setCheckedAllRows;
|
||
function updateRowNumber(_a, startIndex) {
|
||
var data = _a.data;
|
||
var rawData = data.rawData;
|
||
for (var idx = startIndex; idx < rawData.length; idx += 1) {
|
||
rawData[idx]._attributes.rowNum = idx + 1;
|
||
}
|
||
}
|
||
exports.updateRowNumber = updateRowNumber;
|
||
function setRow(store, rowIndex, row) {
|
||
var data = store.data, id = store.id, column = store.column;
|
||
var rawData = data.rawData, viewData = data.viewData, sortState = data.sortState;
|
||
var orgRow = rawData[rowIndex];
|
||
if (!orgRow) {
|
||
return;
|
||
}
|
||
validation_1.removeUniqueInfoMap(id, orgRow, column);
|
||
row.sortKey = orgRow.sortKey;
|
||
var _a = data_2.getCreatedRowInfo(store, rowIndex, row, orgRow.rowKey), rawRow = _a.rawRow, viewRow = _a.viewRow, prevRow = _a.prevRow;
|
||
common_1.silentSplice(rawData, rowIndex, 1, rawRow);
|
||
common_1.silentSplice(viewData, rowIndex, 1, viewRow);
|
||
makeObservable(store, rowIndex);
|
||
sort_1.sortByCurrentState(store);
|
||
if (prevRow && rowSpan_1.isRowSpanEnabled(sortState, column)) {
|
||
rowSpan_2.updateRowSpanWhenAppending(rawData, prevRow, false);
|
||
}
|
||
instance_1.getDataManager(id).push('UPDATE', rawRow);
|
||
setTimeout(function () {
|
||
updateHeightsWithFilteredData(store);
|
||
});
|
||
summary_1.updateSummaryValueByRow(store, rawRow, { type: 'SET', orgRow: orgRow });
|
||
postUpdateAfterManipulation(store, rowIndex, 'DONE');
|
||
rowSpan_2.updateRowSpan(store);
|
||
}
|
||
exports.setRow = setRow;
|
||
function moveRow(store, rowKey, targetIndex) {
|
||
var data = store.data, column = store.column, id = store.id;
|
||
var rawData = data.rawData, viewData = data.viewData;
|
||
if (!rawData[targetIndex] || data_2.isSorted(data) || data_2.isFiltered(data)) {
|
||
return;
|
||
}
|
||
var currentIndex = data_2.findIndexByRowKey(data, column, id, rowKey, false);
|
||
if (currentIndex === -1) {
|
||
return;
|
||
}
|
||
var minIndex = Math.min(currentIndex, targetIndex);
|
||
var rawRow = common_1.silentSplice(rawData, currentIndex, 1)[0];
|
||
var viewRow = common_1.silentSplice(viewData, currentIndex, 1)[0];
|
||
observable_1.batchObserver(function () {
|
||
rawData.splice(targetIndex, 0, rawRow);
|
||
});
|
||
viewData.splice(targetIndex, 0, viewRow);
|
||
renderState_1.fitRowHeightWhenMovingRow(store, currentIndex, targetIndex);
|
||
sort_1.resetSortKey(data, minIndex);
|
||
updateRowNumber(store, minIndex);
|
||
instance_1.getDataManager(id).push('UPDATE', rawRow, true);
|
||
}
|
||
exports.moveRow = moveRow;
|
||
function scrollToNext(store) {
|
||
var data = store.data, id = store.id;
|
||
var _a = data.pageOptions, page = _a.page, totalCount = _a.totalCount, perPage = _a.perPage, useClient = _a.useClient;
|
||
if (data_2.isScrollPagination(data)) {
|
||
if (useClient) {
|
||
data.pageOptions.page += 1;
|
||
observable_1.notify(data, 'pageOptions');
|
||
sort_1.sortByCurrentState(store);
|
||
updateHeights(store);
|
||
setCheckedAllRows(store);
|
||
}
|
||
else if (page * perPage < totalCount) {
|
||
data.pageOptions.page += 1;
|
||
instance_1.getDataProvider(id).readData(data.pageOptions.page);
|
||
}
|
||
}
|
||
}
|
||
exports.scrollToNext = scrollToNext;
|
||
function appendRows(store, inputData) {
|
||
var data = store.data, column = store.column, id = store.id;
|
||
var startIndex = data.rawData.length;
|
||
var _a = data_1.createData(id, inputData, column, { lazyObservable: true }), rawData = _a.rawData, viewData = _a.viewData;
|
||
if (!column.keyColumnName) {
|
||
var rowKey_1 = data_2.getMaxRowKey(data);
|
||
rawData.forEach(function (row, index) {
|
||
row.rowKey = rowKey_1 + index;
|
||
});
|
||
viewData.forEach(function (row, index) {
|
||
row.rowKey = rowKey_1 + index;
|
||
});
|
||
}
|
||
var newRawData = data.rawData.concat(rawData);
|
||
var newViewData = data.viewData.concat(viewData);
|
||
data.rawData = newRawData;
|
||
data.viewData = newViewData;
|
||
sort_1.resetSortKey(data, startIndex);
|
||
sort_1.sortByCurrentState(store);
|
||
updateHeights(store);
|
||
postUpdateAfterManipulation(store, startIndex, 'DONE', rawData);
|
||
rowSpan_2.updateRowSpan(store);
|
||
}
|
||
exports.appendRows = appendRows;
|
||
function removeRows(store, targetRows) {
|
||
var data = store.data, id = store.id, focus = store.focus, column = store.column;
|
||
var sortState = data.sortState, viewData = data.viewData, rawData = data.rawData;
|
||
var rowIndexes = targetRows.rowIndexes, rows = targetRows.rows, nextRows = targetRows.nextRows;
|
||
var deletedCount = rowIndexes.length;
|
||
pagination_1.updatePageWhenRemovingRow(store, deletedCount);
|
||
rowIndexes.forEach(function (rowIndex, i) {
|
||
var nextRow = nextRows[i];
|
||
var removedRow = common_1.silentSplice(rawData, rowIndex - i, 1)[0];
|
||
common_1.silentSplice(viewData, rowIndex - i, 1);
|
||
validation_1.removeUniqueInfoMap(id, removedRow, column);
|
||
if (nextRow) {
|
||
if (rowSpan_1.isRowSpanEnabled(sortState, column)) {
|
||
rowSpan_2.updateRowSpanWhenRemoving(rawData, removedRow, nextRow, false);
|
||
}
|
||
}
|
||
instance_1.getDataManager(id).push('DELETE', removedRow);
|
||
sort_1.updateSortKey(data, removedRow.sortKey + 1, false);
|
||
});
|
||
observable_1.notify(data, 'rawData', 'filteredRawData', 'viewData', 'filteredViewData');
|
||
updateHeights(store);
|
||
if (common_1.someProp('rowKey', focus.rowKey, rows)) {
|
||
focus_1.initFocus(store);
|
||
}
|
||
selection_1.initSelection(store);
|
||
summary_1.updateAllSummaryValues(store);
|
||
postUpdateAfterManipulation(store, rowIndexes[0], data_2.getLoadingState(rawData));
|
||
}
|
||
exports.removeRows = removeRows;
|
||
function postUpdateAfterManipulation(store, rowIndex, state, rows) {
|
||
setLoadingState(store, state);
|
||
updateRowNumber(store, rowIndex);
|
||
setDisabledAllCheckbox(store);
|
||
setCheckedAllRows(store);
|
||
validation_1.forceValidateUniquenessOfColumns(store.data.rawData, store.column);
|
||
column_2.setAutoResizingColumnWidths(store, rows);
|
||
}
|
||
|
||
|
||
/***/ }),
|
||
/* 15 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.create = exports.createData = exports.createRawRow = exports.setRowRelationListItems = exports.createViewRow = exports.createRowSpan = exports.generateDataCreationKey = void 0;
|
||
var tslib_1 = __webpack_require__(1);
|
||
var observable_1 = __webpack_require__(5);
|
||
var column_1 = __webpack_require__(10);
|
||
var common_1 = __webpack_require__(0);
|
||
var tree_1 = __webpack_require__(20);
|
||
var validation_1 = __webpack_require__(27);
|
||
var data_1 = __webpack_require__(6);
|
||
var data_2 = __webpack_require__(23);
|
||
var constant_1 = __webpack_require__(11);
|
||
var dataCreationKey = '';
|
||
function generateDataCreationKey() {
|
||
dataCreationKey = "@dataKey" + Date.now();
|
||
return dataCreationKey;
|
||
}
|
||
exports.generateDataCreationKey = generateDataCreationKey;
|
||
function getRelationCbResult(fn, relationParams) {
|
||
var result = common_1.isFunction(fn) ? fn(relationParams) : null;
|
||
return common_1.isUndefined(result) ? null : result;
|
||
}
|
||
function getEditable(fn, relationParams) {
|
||
var result = getRelationCbResult(fn, relationParams);
|
||
return result === null ? true : result;
|
||
}
|
||
function getDisabled(fn, relationParams) {
|
||
var result = getRelationCbResult(fn, relationParams);
|
||
return result === null ? false : result;
|
||
}
|
||
function getListItems(fn, relationParams) {
|
||
return getRelationCbResult(fn, relationParams) || [];
|
||
}
|
||
function getRowHeaderValue(row, columnName) {
|
||
if (column_1.isRowNumColumn(columnName)) {
|
||
return row._attributes.rowNum;
|
||
}
|
||
if (column_1.isCheckboxColumn(columnName)) {
|
||
return row._attributes.checked;
|
||
}
|
||
return '';
|
||
}
|
||
function createRowSpan(mainRow, rowKey, count, spanCount) {
|
||
return { mainRow: mainRow, mainRowKey: rowKey, count: count, spanCount: spanCount };
|
||
}
|
||
exports.createRowSpan = createRowSpan;
|
||
function createViewCell(id, row, column, _a) {
|
||
var _b = _a.isDataModified, isDataModified = _b === void 0 ? false : _b, prevInvalidStates = _a.prevInvalidStates, _c = _a.relationInfo, relationInfo = _c === void 0 ? {} : _c;
|
||
var _d = relationInfo.relationMatched, relationMatched = _d === void 0 ? true : _d, relationListItems = relationInfo.relationListItems;
|
||
var name = column.name, formatter = column.formatter, editor = column.editor, validation = column.validation, defaultValue = column.defaultValue;
|
||
var value = column_1.isRowHeader(name) ? getRowHeaderValue(row, name) : row[name];
|
||
if (common_1.isNil(value) && !common_1.isNil(defaultValue)) {
|
||
value = defaultValue;
|
||
}
|
||
if (!relationMatched) {
|
||
value = '';
|
||
}
|
||
var formatterProps = { row: row, column: column, value: value };
|
||
var _e = row._attributes, disabled = _e.disabled, checkDisabled = _e.checkDisabled, classNameAttr = _e.className;
|
||
var columnDisabled = !!column.disabled;
|
||
var rowDisabled = column_1.isCheckboxColumn(name) ? checkDisabled : disabled;
|
||
var columnClassName = common_1.isUndefined(classNameAttr.column[name]) ? [] : classNameAttr.column[name];
|
||
var className = tslib_1.__spreadArrays(classNameAttr.row, columnClassName).join(' ');
|
||
var _disabledPriority = row._disabledPriority[name];
|
||
var cellDisabled = rowDisabled || columnDisabled;
|
||
if (_disabledPriority === constant_1.DISABLED_PRIORITY_CELL) {
|
||
cellDisabled = true;
|
||
}
|
||
else if (_disabledPriority === constant_1.DISABLED_PRIORITY_NONE) {
|
||
cellDisabled = false;
|
||
}
|
||
else if (_disabledPriority === constant_1.DISABLED_PRIORITY_COLUMN) {
|
||
cellDisabled = columnDisabled;
|
||
}
|
||
else if (_disabledPriority === constant_1.DISABLED_PRIORITY_ROW) {
|
||
cellDisabled = rowDisabled;
|
||
}
|
||
var usePrevInvalidStates = !isDataModified && !common_1.isNil(prevInvalidStates);
|
||
var invalidStates = usePrevInvalidStates
|
||
? prevInvalidStates
|
||
: validation_1.getValidationCode({ id: id, value: row[name], row: row, validation: validation, columnName: name });
|
||
return {
|
||
editable: !!editor,
|
||
className: className,
|
||
disabled: cellDisabled,
|
||
invalidStates: invalidStates,
|
||
formattedValue: data_2.getFormattedValue(formatterProps, formatter, value, relationListItems),
|
||
value: value,
|
||
};
|
||
}
|
||
function createRelationViewCell(id, name, row, _a) {
|
||
var columnMap = _a.columnMap, valueMap = _a.valueMap;
|
||
var _b = valueMap[name], editable = _b.editable, disabled = _b.disabled, value = _b.value;
|
||
var _c = columnMap[name].relationMap, relationMap = _c === void 0 ? {} : _c;
|
||
Object.keys(relationMap).forEach(function (targetName) {
|
||
var _a = relationMap[targetName], editableCallback = _a.editable, disabledCallback = _a.disabled, listItemsCallback = _a.listItems;
|
||
var relationCbParams = { value: value, editable: editable, disabled: disabled, row: row };
|
||
var targetEditable = getEditable(editableCallback, relationCbParams);
|
||
var targetDisabled = getDisabled(disabledCallback, relationCbParams);
|
||
var targetListItems = getListItems(listItemsCallback, relationCbParams);
|
||
var targetValue = row[targetName];
|
||
var targetEditor = columnMap[targetName].editor;
|
||
var targetEditorOptions = targetEditor === null || targetEditor === void 0 ? void 0 : targetEditor.options;
|
||
var relationMatched = common_1.isFunction(listItemsCallback)
|
||
? common_1.someProp('value', targetValue, targetListItems)
|
||
: true;
|
||
var cellData = createViewCell(id, row, columnMap[targetName], {
|
||
relationInfo: {
|
||
relationMatched: relationMatched,
|
||
relationListItems: targetListItems,
|
||
},
|
||
});
|
||
if (!targetEditable) {
|
||
cellData.editable = false;
|
||
}
|
||
if (targetDisabled) {
|
||
cellData.disabled = true;
|
||
}
|
||
// should set the relation list to relationListItemMap for preventing to share relation list in other rows
|
||
if (targetEditorOptions) {
|
||
targetEditorOptions.relationListItemMap = targetEditorOptions.relationListItemMap || {};
|
||
targetEditorOptions.relationListItemMap[row.rowKey] = targetListItems;
|
||
}
|
||
valueMap[targetName] = cellData;
|
||
});
|
||
}
|
||
function createViewRow(id, row, rawData, column) {
|
||
var rowKey = row.rowKey, sortKey = row.sortKey, rowSpanMap = row.rowSpanMap, uniqueKey = row.uniqueKey;
|
||
var columnMap = column.columnMapWithRelation;
|
||
var treeColumnName = column.treeColumnName, _a = column.treeIcon, treeIcon = _a === void 0 ? true : _a, treeIndentWidth = column.treeIndentWidth;
|
||
var initValueMap = {};
|
||
Object.keys(columnMap).forEach(function (name) {
|
||
initValueMap[name] = null;
|
||
});
|
||
var cachedValueMap = {};
|
||
var valueMap = observable_1.observable(initValueMap);
|
||
var __unobserveFns__ = [];
|
||
Object.keys(columnMap).forEach(function (name) {
|
||
var _a = columnMap[name], related = _a.related, relationMap = _a.relationMap, className = _a.className;
|
||
if (className) {
|
||
row._attributes.className.column[name] = className.split(' ');
|
||
}
|
||
// add condition expression to prevent to call watch function recursively
|
||
if (!related) {
|
||
__unobserveFns__.push(observable_1.observe(function (calledBy) {
|
||
var _a;
|
||
var isDataModified = calledBy !== 'className';
|
||
cachedValueMap[name] = createViewCell(id, row, columnMap[name], {
|
||
isDataModified: isDataModified,
|
||
prevInvalidStates: (_a = cachedValueMap[name]) === null || _a === void 0 ? void 0 : _a.invalidStates,
|
||
});
|
||
valueMap[name] = cachedValueMap[name];
|
||
}));
|
||
}
|
||
if (relationMap && Object.keys(relationMap).length) {
|
||
__unobserveFns__.push(observable_1.observe(function () {
|
||
createRelationViewCell(id, name, row, { columnMap: columnMap, valueMap: valueMap });
|
||
}));
|
||
}
|
||
});
|
||
return tslib_1.__assign({ rowKey: rowKey,
|
||
sortKey: sortKey,
|
||
uniqueKey: uniqueKey,
|
||
rowSpanMap: rowSpanMap,
|
||
valueMap: valueMap,
|
||
__unobserveFns__: __unobserveFns__ }, (treeColumnName && {
|
||
treeInfo: tree_1.createTreeCellInfo(rawData, row, treeIndentWidth, treeIcon),
|
||
}));
|
||
}
|
||
exports.createViewRow = createViewRow;
|
||
function getAttributes(row, index, lazyObservable, disabled) {
|
||
var defaultAttr = {
|
||
rowNum: index + 1,
|
||
checked: false,
|
||
disabled: disabled,
|
||
checkDisabled: disabled,
|
||
className: {
|
||
row: [],
|
||
column: {},
|
||
},
|
||
};
|
||
if (row._attributes) {
|
||
if (common_1.isBoolean(row._attributes.disabled) && common_1.isUndefined(row._attributes.checkDisabled)) {
|
||
row._attributes.checkDisabled = row._attributes.disabled;
|
||
}
|
||
if (!common_1.isUndefined(row._attributes.className)) {
|
||
row._attributes.className = tslib_1.__assign({ row: [], column: {} }, row._attributes.className);
|
||
}
|
||
}
|
||
var attributes = tslib_1.__assign(tslib_1.__assign({}, defaultAttr), row._attributes);
|
||
return lazyObservable ? attributes : observable_1.observable(attributes);
|
||
}
|
||
function createRelationListItems(name, row, columnMap) {
|
||
var _a = columnMap[name], _b = _a.relationMap, relationMap = _b === void 0 ? {} : _b, editor = _a.editor;
|
||
var _c = row._attributes, checkDisabled = _c.checkDisabled, rowDisabled = _c.disabled;
|
||
var editable = !!editor;
|
||
var disabled = column_1.isCheckboxColumn(name) ? checkDisabled : rowDisabled;
|
||
var value = row[name];
|
||
var relationCbParams = { value: value, editable: editable, disabled: disabled, row: row };
|
||
var relationListItemMap = {};
|
||
Object.keys(relationMap).forEach(function (targetName) {
|
||
relationListItemMap[targetName] = getListItems(relationMap[targetName].listItems, relationCbParams);
|
||
});
|
||
return relationListItemMap;
|
||
}
|
||
function setRowRelationListItems(row, columnMap) {
|
||
var relationListItemMap = tslib_1.__assign({}, row._relationListItemMap);
|
||
Object.keys(columnMap).forEach(function (name) {
|
||
common_1.assign(relationListItemMap, createRelationListItems(name, row, columnMap));
|
||
});
|
||
row._relationListItemMap = relationListItemMap;
|
||
}
|
||
exports.setRowRelationListItems = setRowRelationListItems;
|
||
function createMainRowSpanMap(rowSpan, rowKey) {
|
||
var mainRowSpanMap = {};
|
||
if (!rowSpan) {
|
||
return mainRowSpanMap;
|
||
}
|
||
Object.keys(rowSpan).forEach(function (columnName) {
|
||
var spanCount = rowSpan[columnName];
|
||
mainRowSpanMap[columnName] = createRowSpan(true, rowKey, spanCount, spanCount);
|
||
});
|
||
return mainRowSpanMap;
|
||
}
|
||
function createSubRowSpan(prevRowSpanMap) {
|
||
var subRowSpanMap = {};
|
||
Object.keys(prevRowSpanMap).forEach(function (columnName) {
|
||
var prevRowSpan = prevRowSpanMap[columnName];
|
||
var mainRowKey = prevRowSpan.mainRowKey, count = prevRowSpan.count, spanCount = prevRowSpan.spanCount;
|
||
if (spanCount > 1 - count) {
|
||
var subRowCount = count >= 0 ? -1 : count - 1;
|
||
subRowSpanMap[columnName] = createRowSpan(false, mainRowKey, subRowCount, spanCount);
|
||
}
|
||
});
|
||
return subRowSpanMap;
|
||
}
|
||
function createRowSpanMap(row, rowSpan, prevRow) {
|
||
var rowKey = row.rowKey;
|
||
var mainRowSpanMap = {};
|
||
var subRowSpanMap = {};
|
||
if (!common_1.isEmpty(rowSpan)) {
|
||
mainRowSpanMap = createMainRowSpanMap(rowSpan, rowKey);
|
||
}
|
||
if (prevRow) {
|
||
var prevRowSpanMap = prevRow.rowSpanMap;
|
||
if (!common_1.isEmpty(prevRowSpanMap)) {
|
||
subRowSpanMap = createSubRowSpan(prevRowSpanMap);
|
||
}
|
||
}
|
||
return tslib_1.__assign(tslib_1.__assign({}, mainRowSpanMap), subRowSpanMap);
|
||
}
|
||
function createRawRow(id, row, index, column, options) {
|
||
var _a;
|
||
if (options === void 0) { options = {}; }
|
||
// this rowSpan variable is attribute option before creating rowSpanDataMap
|
||
var rowSpan = (_a = row._attributes) === null || _a === void 0 ? void 0 : _a.rowSpan;
|
||
var keyColumnName = options.keyColumnName, prevRow = options.prevRow, _b = options.lazyObservable, lazyObservable = _b === void 0 ? false : _b, _c = options.disabled, disabled = _c === void 0 ? false : _c;
|
||
if (keyColumnName) {
|
||
row.rowKey = row[keyColumnName];
|
||
}
|
||
else if (common_1.isUndefined(row.rowKey)) {
|
||
row.rowKey = index;
|
||
}
|
||
row.sortKey = common_1.isNumber(row.sortKey) ? row.sortKey : index;
|
||
row.uniqueKey = dataCreationKey + "-" + row.rowKey;
|
||
row._attributes = getAttributes(row, index, lazyObservable, disabled);
|
||
row._attributes.rowSpan = rowSpan;
|
||
row._disabledPriority = row._disabledPriority || {};
|
||
row.rowSpanMap = createRowSpanMap(row, rowSpan, prevRow);
|
||
setRowRelationListItems(row, column.columnMapWithRelation);
|
||
if (column.autoResizingColumn.length) {
|
||
data_2.setMaxTextMap(column, row);
|
||
}
|
||
if (lazyObservable) {
|
||
validation_1.addUniqueInfoMap(id, row, column);
|
||
}
|
||
return (lazyObservable ? row : observable_1.observable(row));
|
||
}
|
||
exports.createRawRow = createRawRow;
|
||
function createData(id, data, column, _a) {
|
||
var _b = _a.lazyObservable, lazyObservable = _b === void 0 ? false : _b, prevRows = _a.prevRows, _c = _a.disabled, disabled = _c === void 0 ? false : _c;
|
||
generateDataCreationKey();
|
||
var keyColumnName = column.keyColumnName, _d = column.treeColumnName, treeColumnName = _d === void 0 ? '' : _d;
|
||
var rawData;
|
||
// Notify when using deprecated option "_attribute.rowSpan".
|
||
var isUseRowSpanOption = data.some(function (row) { var _a; return (_a = row._attributes) === null || _a === void 0 ? void 0 : _a.rowSpan; });
|
||
if (isUseRowSpanOption) {
|
||
// eslint-disable-next-line no-console
|
||
console.warn('The option "_attribute.rowSpan" is deprecated. Please use rowSpan option of column.\nFollow example: http://nhn.github.io/tui.grid/latest/tutorial-example29-dynamic-row-span');
|
||
}
|
||
if (treeColumnName) {
|
||
rawData = tree_1.createTreeRawData({
|
||
id: id,
|
||
data: data,
|
||
column: column,
|
||
keyColumnName: keyColumnName,
|
||
lazyObservable: lazyObservable,
|
||
disabled: disabled,
|
||
});
|
||
}
|
||
else {
|
||
rawData = data.map(function (row, index, rows) {
|
||
return createRawRow(id, row, index, column, {
|
||
keyColumnName: keyColumnName,
|
||
prevRow: prevRows ? prevRows[index] : rows[index - 1],
|
||
lazyObservable: lazyObservable,
|
||
disabled: disabled,
|
||
});
|
||
});
|
||
}
|
||
var viewData = rawData.map(function (row) {
|
||
return lazyObservable
|
||
? { rowKey: row.rowKey, sortKey: row.sortKey, uniqueKey: row.uniqueKey }
|
||
: createViewRow(id, row, rawData, column);
|
||
});
|
||
return { rawData: rawData, viewData: viewData };
|
||
}
|
||
exports.createData = createData;
|
||
var cachedFilteredIndex = {};
|
||
function applyFilterToRawData(rawData, filters, columnMap) {
|
||
var data = rawData;
|
||
cachedFilteredIndex = {};
|
||
if (filters) {
|
||
data = filters.reduce(function (acc, filter) {
|
||
var conditionFn = filter.conditionFn, columnName = filter.columnName;
|
||
var formatter = columnMap[columnName].formatter;
|
||
return acc.filter(function (row, index) {
|
||
var value = row[columnName];
|
||
var relationListItems = row._relationListItemMap[columnName];
|
||
var formatterProps = { row: row, column: columnMap[columnName], value: value };
|
||
var filtered = conditionFn(data_2.getFormattedValue(formatterProps, formatter, value, relationListItems));
|
||
// cache the filtered index for performance
|
||
if (acc === rawData && filtered) {
|
||
cachedFilteredIndex[row.rowKey] = index;
|
||
}
|
||
else if (!filtered) {
|
||
cachedFilteredIndex[row.rowKey] = null;
|
||
}
|
||
return filtered;
|
||
});
|
||
}, rawData);
|
||
}
|
||
return data;
|
||
}
|
||
function createPageOptions(userPageOptions, rawData) {
|
||
var pageOptions = (common_1.isEmpty(userPageOptions)
|
||
? {}
|
||
: tslib_1.__assign(tslib_1.__assign({ useClient: false, page: 1, perPage: constant_1.DEFAULT_PER_PAGE, type: 'pagination' }, userPageOptions), { totalCount: userPageOptions.useClient ? rawData.length : userPageOptions.totalCount }));
|
||
if (pageOptions.type === 'pagination') {
|
||
pageOptions.position = pageOptions.position || 'bottom';
|
||
pageOptions.visiblePages = pageOptions.visiblePages || 10;
|
||
}
|
||
return pageOptions;
|
||
}
|
||
function create(_a) {
|
||
var data = _a.data, column = _a.column, userPageOptions = _a.pageOptions, useClientSort = _a.useClientSort, disabled = _a.disabled, id = _a.id;
|
||
var _b = createData(id, data, column, { lazyObservable: true, disabled: disabled }), rawData = _b.rawData, viewData = _b.viewData;
|
||
var sortState = {
|
||
useClient: useClientSort,
|
||
columns: [
|
||
{
|
||
columnName: 'sortKey',
|
||
ascending: true,
|
||
},
|
||
],
|
||
};
|
||
var pageOptions = createPageOptions(userPageOptions, rawData);
|
||
return observable_1.observable({
|
||
rawData: rawData,
|
||
viewData: viewData,
|
||
sortState: sortState,
|
||
pageOptions: pageOptions,
|
||
checkedAllRows: rawData.length ? !rawData.some(function (row) { return !row._attributes.checked; }) : false,
|
||
disabledAllCheckbox: disabled,
|
||
filters: null,
|
||
loadingState: rawData.length ? 'DONE' : 'EMPTY',
|
||
clickedCheckboxRowkey: null,
|
||
get filteredRawData() {
|
||
var _a;
|
||
if (this.filters) {
|
||
// should filter the sliced data which is displayed in viewport in case of client infinite scrolling
|
||
var targetData = data_1.isScrollPagination(this, true)
|
||
? (_a = this.rawData).slice.apply(_a, this.pageRowRange) : this.rawData;
|
||
return applyFilterToRawData(targetData, this.filters, column.allColumnMap);
|
||
}
|
||
return this.rawData;
|
||
},
|
||
get filteredIndex() {
|
||
var _a = this, filteredRawData = _a.filteredRawData, filters = _a.filters;
|
||
return filters
|
||
? filteredRawData
|
||
.filter(function (row) { return !common_1.isNull(cachedFilteredIndex[row.rowKey]); })
|
||
.map(function (row) { return cachedFilteredIndex[row.rowKey]; })
|
||
: null;
|
||
},
|
||
get filteredViewData() {
|
||
var _this = this;
|
||
return this.filters
|
||
? this.filteredIndex.map(function (index) { return _this.viewData[index]; })
|
||
: this.viewData;
|
||
},
|
||
get pageRowRange() {
|
||
var _a = this.pageOptions, useClient = _a.useClient, type = _a.type, page = _a.page, perPage = _a.perPage;
|
||
var start = 0;
|
||
// should calculate the range through all rawData in case of client infinite scrolling
|
||
var end = data_1.isScrollPagination(this, true) ? this.rawData.length : this.filteredViewData.length;
|
||
if (useClient) {
|
||
var pageRowLastIndex = page * perPage;
|
||
if (type === 'pagination') {
|
||
start = (page - 1) * perPage;
|
||
}
|
||
end = pageRowLastIndex > 0 && pageRowLastIndex < end ? pageRowLastIndex : end;
|
||
}
|
||
return [start, end];
|
||
},
|
||
});
|
||
}
|
||
exports.create = create;
|
||
|
||
|
||
/***/ }),
|
||
/* 16 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.initSelection = exports.setSelection = exports.changeSelectionRange = void 0;
|
||
var tslib_1 = __webpack_require__(1);
|
||
var common_1 = __webpack_require__(0);
|
||
var eventBus_1 = __webpack_require__(7);
|
||
var selection_1 = __webpack_require__(22);
|
||
var gridEvent_1 = tslib_1.__importDefault(__webpack_require__(9));
|
||
var rowSpan_1 = __webpack_require__(13);
|
||
function changeSelectionRange(selection, inputRange, id) {
|
||
if (!selection_1.isSameInputRange(selection.inputRange, inputRange)) {
|
||
selection.inputRange = inputRange;
|
||
var eventBus = eventBus_1.getEventBus(id);
|
||
var gridEvent = new gridEvent_1.default({ range: selection.rangeWithRowHeader });
|
||
/**
|
||
* Occurs when selecting cells
|
||
* @event Grid#selection
|
||
* @property {Object} range - Range of selection
|
||
* @property {Array} range.start - Info of start cell (ex: [rowKey, columnName])
|
||
* @property {Array} range.end - Info of end cell (ex: [rowKey, columnName])
|
||
* @property {Grid} instance - Current grid instance
|
||
*/
|
||
eventBus.trigger('selection', gridEvent);
|
||
}
|
||
}
|
||
exports.changeSelectionRange = changeSelectionRange;
|
||
function setSelection(store, range) {
|
||
var _a;
|
||
var selection = store.selection, data = store.data, column = store.column, id = store.id;
|
||
var visibleColumnsWithRowHeader = column.visibleColumnsWithRowHeader, rowHeaderCount = column.rowHeaderCount;
|
||
var viewData = data.viewData;
|
||
var rowLength = viewData.length;
|
||
var columnLength = visibleColumnsWithRowHeader.length;
|
||
var startRowIndex = common_1.clamp(range.start[0], 0, rowLength - 1);
|
||
var endRowIndex = common_1.clamp(range.end[0], 0, rowLength - 1);
|
||
var startColumnIndex = common_1.clamp(range.start[1] + rowHeaderCount, rowHeaderCount, columnLength - 1);
|
||
var endColumnIndex = common_1.clamp(range.end[1] + rowHeaderCount, rowHeaderCount, columnLength - 1);
|
||
_a = rowSpan_1.getRowRangeWithRowSpan([startRowIndex, endRowIndex], [startColumnIndex, endColumnIndex], column, null, data), startRowIndex = _a[0], endRowIndex = _a[1];
|
||
var inputRange = {
|
||
row: [startRowIndex, endRowIndex],
|
||
column: [startColumnIndex, endColumnIndex],
|
||
};
|
||
changeSelectionRange(selection, inputRange, id);
|
||
}
|
||
exports.setSelection = setSelection;
|
||
function initSelection(store) {
|
||
store.selection.inputRange = null;
|
||
}
|
||
exports.initSelection = initSelection;
|
||
|
||
|
||
/***/ }),
|
||
/* 17 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.isArrowKey = exports.isNonPrintableKey = exports.keyEventGenerate = exports.getKeyStrokeString = exports.keyStrokeCommandMap = exports.keyboardEventCommandMap = exports.keyboardEventTypeMap = exports.keyNameMap = void 0;
|
||
var common_1 = __webpack_require__(0);
|
||
exports.keyNameMap = {
|
||
8: 'backspace',
|
||
9: 'tab',
|
||
13: 'enter',
|
||
16: 'shift',
|
||
17: 'ctrl',
|
||
27: 'esc',
|
||
37: 'left',
|
||
38: 'up',
|
||
39: 'right',
|
||
40: 'down',
|
||
65: 'a',
|
||
67: 'c',
|
||
86: 'v',
|
||
32: 'space',
|
||
33: 'pageUp',
|
||
34: 'pageDown',
|
||
36: 'home',
|
||
35: 'end',
|
||
46: 'del',
|
||
};
|
||
exports.keyboardEventTypeMap = {
|
||
move: 'move',
|
||
edit: 'edit',
|
||
remove: 'remove',
|
||
select: 'select',
|
||
clipboard: 'clipboard',
|
||
};
|
||
exports.keyboardEventCommandMap = {
|
||
up: 'up',
|
||
down: 'down',
|
||
left: 'left',
|
||
right: 'right',
|
||
pageUp: 'pageUp',
|
||
pageDown: 'pageDown',
|
||
firstColumn: 'firstColumn',
|
||
lastColumn: 'lastColumn',
|
||
currentCell: 'currentCell',
|
||
nextCell: 'nextCell',
|
||
prevCell: 'prevCell',
|
||
firstCell: 'firstCell',
|
||
lastCell: 'lastCell',
|
||
all: 'all',
|
||
copy: 'copy',
|
||
paste: 'paste',
|
||
};
|
||
/**
|
||
* K-V object for matching keystroke and event command
|
||
* K: keystroke (order : ctrl -> shift -> keyName)
|
||
* V: [key event type, command]
|
||
* @type {Object}
|
||
* @ignore
|
||
*/
|
||
exports.keyStrokeCommandMap = {
|
||
up: ['move', 'up'],
|
||
down: ['move', 'down'],
|
||
left: ['move', 'left'],
|
||
right: ['move', 'right'],
|
||
pageUp: ['move', 'pageUp'],
|
||
pageDown: ['move', 'pageDown'],
|
||
home: ['move', 'firstColumn'],
|
||
end: ['move', 'lastColumn'],
|
||
enter: ['edit', 'currentCell'],
|
||
space: ['edit', 'currentCell'],
|
||
tab: ['edit', 'nextCell'],
|
||
backspace: ['remove'],
|
||
del: ['remove'],
|
||
'shift-tab': ['edit', 'prevCell'],
|
||
'shift-up': ['select', 'up'],
|
||
'shift-down': ['select', 'down'],
|
||
'shift-left': ['select', 'left'],
|
||
'shift-right': ['select', 'right'],
|
||
'shift-pageUp': ['select', 'pageUp'],
|
||
'shift-pageDown': ['select', 'pageDown'],
|
||
'shift-home': ['select', 'firstColumn'],
|
||
'shift-end': ['select', 'lastColumn'],
|
||
'ctrl-a': ['select', 'all'],
|
||
'ctrl-c': ['clipboard', 'copy'],
|
||
'ctrl-v': ['clipboard', 'paste'],
|
||
'ctrl-home': ['move', 'firstCell'],
|
||
'ctrl-end': ['move', 'lastCell'],
|
||
'ctrl-shift-home': ['select', 'firstCell'],
|
||
'ctrl-shift-end': ['select', 'lastCell'],
|
||
};
|
||
/**
|
||
* Returns the keyStroke string
|
||
* @param {Event} ev - Keyboard event
|
||
* @returns {String}
|
||
* @ignore
|
||
*/
|
||
function getKeyStrokeString(ev) {
|
||
var keys = [];
|
||
var keyCode = ev.keyCode, ctrlKey = ev.ctrlKey, metaKey = ev.metaKey, shiftKey = ev.shiftKey;
|
||
if (ctrlKey || metaKey) {
|
||
keys.push('ctrl');
|
||
}
|
||
if (shiftKey) {
|
||
keys.push('shift');
|
||
}
|
||
if (keyCode in exports.keyNameMap) {
|
||
keys.push(exports.keyNameMap[keyCode]);
|
||
}
|
||
return keys.join('-');
|
||
}
|
||
exports.getKeyStrokeString = getKeyStrokeString;
|
||
function keyEventGenerate(ev) {
|
||
var keyStroke = getKeyStrokeString(ev);
|
||
var commandInfo = exports.keyStrokeCommandMap[keyStroke];
|
||
return commandInfo
|
||
? {
|
||
type: commandInfo[0],
|
||
command: commandInfo[1],
|
||
}
|
||
: {};
|
||
}
|
||
exports.keyEventGenerate = keyEventGenerate;
|
||
function isNonPrintableKey(keyCode) {
|
||
var keys = [
|
||
'shift',
|
||
'ctrl',
|
||
'esc',
|
||
'left',
|
||
'up',
|
||
'right',
|
||
'down',
|
||
'pageUp',
|
||
'pageDown',
|
||
'end',
|
||
'home',
|
||
];
|
||
var key = exports.keyNameMap[keyCode];
|
||
return common_1.includes(keys, key);
|
||
}
|
||
exports.isNonPrintableKey = isNonPrintableKey;
|
||
function isArrowKey(keyName) {
|
||
return common_1.includes(['up', 'down', 'left', 'right'], keyName);
|
||
}
|
||
exports.isArrowKey = isArrowKey;
|
||
|
||
|
||
/***/ }),
|
||
/* 18 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.setFocusInfo = exports.saveAndFinishEditing = exports.initFocus = exports.changeFocus = exports.finishEditing = exports.startEditing = void 0;
|
||
var tslib_1 = __webpack_require__(1);
|
||
var gridEvent_1 = tslib_1.__importDefault(__webpack_require__(9));
|
||
var eventBus_1 = __webpack_require__(7);
|
||
var data_1 = __webpack_require__(6);
|
||
var focus_1 = __webpack_require__(44);
|
||
var rowSpan_1 = __webpack_require__(13);
|
||
var data_2 = __webpack_require__(14);
|
||
var common_1 = __webpack_require__(0);
|
||
var column_1 = __webpack_require__(12);
|
||
function startEditing(store, rowKey, columnName) {
|
||
var data = store.data, focus = store.focus, column = store.column, id = store.id;
|
||
var filteredRawData = data.filteredRawData;
|
||
var foundIndex = data_1.findIndexByRowKey(data, column, id, rowKey);
|
||
if (foundIndex === -1) {
|
||
return;
|
||
}
|
||
// makes the data observable to judge editable, disable of the cell
|
||
data_2.makeObservable(store, data_1.findIndexByRowKey(data, column, id, rowKey, false));
|
||
if (!data_1.isEditableCell(store, foundIndex, columnName)) {
|
||
return;
|
||
}
|
||
var eventBus = eventBus_1.getEventBus(id);
|
||
var gridEvent = new gridEvent_1.default({
|
||
rowKey: rowKey,
|
||
columnName: columnName,
|
||
value: filteredRawData[foundIndex][columnName],
|
||
});
|
||
/**
|
||
* Occurs when editing the cell is started
|
||
* @event Grid#editingStart
|
||
* @property {number} rowKey - rowKey of the target cell
|
||
* @property {number} columnName - columnName of the target cell
|
||
* @property {number | string | boolean | null | undefined} value - value of the editing cell
|
||
* @property {Grid} instance - Current grid instance
|
||
*/
|
||
eventBus.trigger('editingStart', gridEvent);
|
||
if (!gridEvent.isStopped()) {
|
||
focus.forcedDestroyEditing = false;
|
||
focus.navigating = false;
|
||
focus.editingAddress = { rowKey: rowKey, columnName: columnName };
|
||
}
|
||
}
|
||
exports.startEditing = startEditing;
|
||
// @TODO: Events should be separated(ex.'editingFinish', 'editingCanceled')
|
||
function finishEditing(_a, rowKey, columnName, value, editingInfo) {
|
||
var focus = _a.focus, id = _a.id;
|
||
if (focus_1.isEditingCell(focus, rowKey, columnName)) {
|
||
focus.editingAddress = null;
|
||
focus.navigating = true;
|
||
}
|
||
var eventBus = eventBus_1.getEventBus(id);
|
||
var gridEvent = new gridEvent_1.default(tslib_1.__assign({ rowKey: rowKey, columnName: columnName, value: value }, editingInfo));
|
||
/**
|
||
* Occurs when editing the cell is finished
|
||
* @event Grid#editingFinish
|
||
* @property {number} rowKey - rowKey of the target cell
|
||
* @property {number} columnName - columnName of the target cell
|
||
* @property {number | string | boolean | null | undefined} value - value of the editing cell
|
||
* @property {Grid} instance - Current grid instance
|
||
* @property {boolean} save - Whether to save the value
|
||
* @property {boolean} triggeredByKey - Whether to trigger the event by key
|
||
*/
|
||
eventBus.trigger('editingFinish', gridEvent);
|
||
}
|
||
exports.finishEditing = finishEditing;
|
||
function changeFocus(store, rowKey, columnName, id) {
|
||
var data = store.data, focus = store.focus, column = store.column;
|
||
if (focus_1.isFocusedCell(focus, rowKey, columnName) ||
|
||
(columnName && column_1.isHiddenColumn(column, columnName))) {
|
||
return;
|
||
}
|
||
var rawData = data.rawData, sortState = data.sortState;
|
||
var eventBus = eventBus_1.getEventBus(id);
|
||
var gridEvent = new gridEvent_1.default({
|
||
rowKey: rowKey,
|
||
columnName: columnName,
|
||
prevColumnName: focus.columnName,
|
||
prevRowKey: focus.rowKey,
|
||
});
|
||
/**
|
||
* Occurs when focused cell is about to change
|
||
* @event Grid#focusChange
|
||
* @property {number} rowKey - rowKey of the target cell
|
||
* @property {number} columnName - columnName of the target cell
|
||
* @property {number} prevRowKey - rowKey of the currently focused cell
|
||
* @property {number} prevColumnName - columnName of the currently focused cell
|
||
* @property {Grid} instance - Current grid instance
|
||
*/
|
||
eventBus.trigger('focusChange', gridEvent);
|
||
if (!gridEvent.isStopped()) {
|
||
var focusRowKey = rowKey;
|
||
if (rowKey && columnName && rowSpan_1.isRowSpanEnabled(sortState, column)) {
|
||
var rowSpan = rowSpan_1.getRowSpanByRowKey(rowKey, columnName, rawData);
|
||
if (rowSpan) {
|
||
focusRowKey = rowSpan.mainRowKey;
|
||
}
|
||
}
|
||
focus.prevColumnName = focus.columnName;
|
||
focus.prevRowKey = focus.rowKey;
|
||
focus.columnName = columnName;
|
||
focus.rowKey = focusRowKey;
|
||
}
|
||
}
|
||
exports.changeFocus = changeFocus;
|
||
function initFocus(_a) {
|
||
var focus = _a.focus;
|
||
focus.editingAddress = null;
|
||
focus.navigating = false;
|
||
focus.rowKey = null;
|
||
focus.columnName = null;
|
||
focus.prevRowKey = null;
|
||
focus.prevColumnName = null;
|
||
}
|
||
exports.initFocus = initFocus;
|
||
function saveAndFinishEditing(store, value) {
|
||
// @TODO: remove 'value' paramter
|
||
// saveAndFinishEditing(store: Store)
|
||
var focus = store.focus, data = store.data, column = store.column, id = store.id;
|
||
var editingAddress = focus.editingAddress;
|
||
if (!editingAddress) {
|
||
return;
|
||
}
|
||
var rowKey = editingAddress.rowKey, columnName = editingAddress.columnName;
|
||
// makes the data observable to judge editable, disable of the cell.
|
||
data_2.makeObservable(store, data_1.findIndexByRowKey(data, column, id, rowKey, false));
|
||
// if value is 'undefined', editing result is saved and finished.
|
||
if (common_1.isUndefined(value)) {
|
||
focus.forcedDestroyEditing = true;
|
||
focus.editingAddress = null;
|
||
focus.navigating = true;
|
||
return;
|
||
}
|
||
data_2.setValue(store, rowKey, columnName, value);
|
||
finishEditing(store, rowKey, columnName, value, { save: true });
|
||
}
|
||
exports.saveAndFinishEditing = saveAndFinishEditing;
|
||
function setFocusInfo(store, rowKey, columnName, navigating) {
|
||
var focus = store.focus, id = store.id;
|
||
focus.navigating = navigating;
|
||
changeFocus(store, rowKey, columnName, id);
|
||
}
|
||
exports.setFocusInfo = setFocusInfo;
|
||
|
||
|
||
/***/ }),
|
||
/* 19 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
var tslib_1 = __webpack_require__(1);
|
||
var messages = {
|
||
en: {
|
||
display: {
|
||
noData: 'No data.',
|
||
loadingData: 'Loading data.',
|
||
resizeHandleGuide: 'You can change the width of the column by mouse drag, and initialize the width by double-clicking.',
|
||
},
|
||
net: {
|
||
confirmCreate: 'Are you sure you want to create {{count}} data?',
|
||
confirmUpdate: 'Are you sure you want to update {{count}} data?',
|
||
confirmDelete: 'Are you sure you want to delete {{count}} data?',
|
||
confirmModify: 'Are you sure you want to modify {{count}} data?',
|
||
noDataToCreate: 'No data to create.',
|
||
noDataToUpdate: 'No data to update.',
|
||
noDataToDelete: 'No data to delete.',
|
||
noDataToModify: 'No data to modify.',
|
||
failResponse: 'An error occurred while requesting data.\nPlease try again.',
|
||
},
|
||
filter: {
|
||
contains: 'Contains',
|
||
eq: 'Equals',
|
||
ne: 'Not equals',
|
||
start: 'Starts with',
|
||
end: 'Ends with',
|
||
after: 'After',
|
||
afterEq: 'After or Equal',
|
||
before: 'Before',
|
||
beforeEq: 'Before or Equal',
|
||
apply: 'Apply',
|
||
clear: 'Clear',
|
||
selectAll: 'Select All',
|
||
emptyValue: 'Empty Value',
|
||
},
|
||
contextMenu: {
|
||
copy: 'Copy',
|
||
copyColumns: 'Copy Columns',
|
||
copyRows: 'Copy Rows',
|
||
export: 'Export',
|
||
csvExport: 'CSV Export',
|
||
excelExport: 'Excel Export',
|
||
},
|
||
},
|
||
es: {
|
||
display: {
|
||
noData: 'No hay información.',
|
||
loadingData: 'Cargando información.',
|
||
resizeHandleGuide: 'Puedes cambiar el ancho de la columna arrastrando el ratón e inicializar el ancho haciendo doble clic.',
|
||
},
|
||
net: {
|
||
confirmCreate: '¿Estás seguro que quieres crear {{count}} filas?',
|
||
confirmUpdate: '¿Estás seguro que quieres actualizar {{count}} filas?',
|
||
confirmDelete: '¿Estás seguro que quieres eliminar {{count}} filas?',
|
||
confirmModify: '¿Estás seguro que quieres modificar {{count}} filas?',
|
||
noDataToCreate: 'No hay información para crear.',
|
||
noDataToUpdate: 'No hay información para actualizar.',
|
||
noDataToDelete: 'No hay información para eliminar.',
|
||
noDataToModify: 'No hay información para modificar.',
|
||
failResponse: 'Se produjo un error al solicitar datos. \nVuelve a intentarlo.',
|
||
},
|
||
filter: {
|
||
contains: 'Contiene',
|
||
eq: 'Igual',
|
||
ne: 'Distinto',
|
||
start: 'Empieza con',
|
||
end: 'Termina en',
|
||
after: 'Después',
|
||
afterEq: 'Después o Igual',
|
||
before: 'Antes',
|
||
beforeEq: 'Antes o Igual',
|
||
apply: 'Aplicar',
|
||
clear: 'Limpiar',
|
||
selectAll: 'Seleccionar Todo',
|
||
emptyValue: 'Vaciar Valor',
|
||
},
|
||
contextMenu: {
|
||
copy: 'Copiar',
|
||
copyColumns: 'Copiar Columnas',
|
||
copyRows: 'Copiar Filas',
|
||
export: 'exportar',
|
||
csvExport: 'CSV exportar',
|
||
excelExport: 'Excel exportar',
|
||
},
|
||
},
|
||
ko: {
|
||
display: {
|
||
noData: '데이터가 존재하지 않습니다.',
|
||
loadingData: '데이터를 불러오는 중입니다.',
|
||
resizeHandleGuide: '마우스 드래그하여 컬럼 너비를 조정할 수 있고, 더블 클릭으로 컬럼 너비를 초기화할 수 있습니다.',
|
||
},
|
||
net: {
|
||
confirmCreate: '{{count}}건의 데이터를 생성하겠습니까?',
|
||
confirmUpdate: '{{count}}건의 데이터를 수정하겠습니까?',
|
||
confirmDelete: '{{count}}건의 데이터를 삭제하겠습니까?',
|
||
confirmModify: '{{count}}건의 데이터를 처리하겠습니까?',
|
||
noDataToCreate: '생성할 데이터가 없습니다.',
|
||
noDataToUpdate: '수정할 데이터가 없습니다.',
|
||
noDataToDelete: '삭제할 데이터가 없습니다.',
|
||
noDataToModify: '처리할 데이터가 없습니다.',
|
||
failResponse: '데이터 요청 중에 에러가 발생하였습니다.\n다시 시도하여 주시기 바랍니다.',
|
||
},
|
||
filter: {
|
||
contains: 'Contains',
|
||
eq: 'Equals',
|
||
ne: 'Not equals',
|
||
start: 'Starts with',
|
||
end: 'Ends with',
|
||
after: 'After',
|
||
afterEq: 'After or Equal',
|
||
before: 'Before',
|
||
beforeEq: 'Before or Equal',
|
||
apply: 'Apply',
|
||
clear: 'Clear',
|
||
selectAll: 'Select All',
|
||
emptyValue: 'Empty Value',
|
||
},
|
||
contextMenu: {
|
||
copy: '복사',
|
||
copyColumns: '열 복사',
|
||
copyRows: '행 복사',
|
||
export: '내보내기',
|
||
csvExport: 'CSV로 내보내기',
|
||
excelExport: '엑셀로 내보내기',
|
||
},
|
||
},
|
||
};
|
||
var messageMap = {};
|
||
/**
|
||
* Flatten message map
|
||
* @param {object} data - Messages
|
||
* @returns {object} Flatten message object (key format is 'key.subKey')
|
||
* @ignore
|
||
*/
|
||
function flattenMessageMap(data) {
|
||
if (data === void 0) { data = {}; }
|
||
var obj = {};
|
||
var newKey;
|
||
Object.keys(data).forEach(function (key) {
|
||
var keyWithType = key;
|
||
var groupMessages = data[keyWithType];
|
||
Object.keys(groupMessages).forEach(function (subKey) {
|
||
newKey = key + "." + subKey;
|
||
obj[newKey] = groupMessages[subKey];
|
||
});
|
||
});
|
||
return obj;
|
||
}
|
||
/**
|
||
* Replace text
|
||
* @param {string} text - Text including handlebar expression
|
||
* @param {Object} values - Replaced values
|
||
* @returns {string} Replaced text
|
||
*/
|
||
function replaceText(text, values) {
|
||
return text
|
||
? text.replace(/\{\{(\w*)\}\}/g, function (_, prop) { return (values.hasOwnProperty(prop) ? values[prop] : ''); })
|
||
: '';
|
||
}
|
||
exports.default = {
|
||
/**
|
||
* Set messages
|
||
* @param {string} localeCode - Code to set locale messages and
|
||
* this is the language or language-region combination. (ex: en-US)
|
||
* @param {object} [data] - Messages using in Grid
|
||
*/
|
||
setLanguage: function (localeCode, data) {
|
||
var localeMessages = messages[localeCode];
|
||
if (!localeMessages && !data) {
|
||
throw new Error('You should set messages to map the locale code.');
|
||
}
|
||
var newData = flattenMessageMap(data);
|
||
if (localeMessages) {
|
||
var originData = flattenMessageMap(localeMessages);
|
||
messageMap = tslib_1.__assign(tslib_1.__assign({}, originData), newData);
|
||
}
|
||
else {
|
||
messageMap = newData;
|
||
}
|
||
},
|
||
/**
|
||
* Get message
|
||
* @param {string} key - Key to find message (ex: 'net.confirmCreate')
|
||
* @param {object} [replacements] - Values to replace string
|
||
* @returns {string} Message
|
||
*/
|
||
get: function (key, replacements) {
|
||
if (replacements === void 0) { replacements = {}; }
|
||
var message = messageMap[key];
|
||
return replaceText(message, replacements);
|
||
},
|
||
};
|
||
|
||
|
||
/***/ }),
|
||
/* 20 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.getTreeIndentWidth = exports.createTreeCellInfo = exports.createTreeRawData = exports.flattenTreeData = exports.createTreeRawRow = exports.clearTreeRowKeyMap = void 0;
|
||
var tslib_1 = __webpack_require__(1);
|
||
var data_1 = __webpack_require__(15);
|
||
var tree_1 = __webpack_require__(21);
|
||
var observable_1 = __webpack_require__(5);
|
||
var common_1 = __webpack_require__(0);
|
||
var constant_1 = __webpack_require__(11);
|
||
var treeRowKeyMap = {};
|
||
function clearTreeRowKeyMap(id) {
|
||
delete treeRowKeyMap[id];
|
||
}
|
||
exports.clearTreeRowKeyMap = clearTreeRowKeyMap;
|
||
function generateTreeRowKey(id) {
|
||
var _a;
|
||
treeRowKeyMap[id] = (_a = treeRowKeyMap[id]) !== null && _a !== void 0 ? _a : -1;
|
||
treeRowKeyMap[id] += 1;
|
||
return treeRowKeyMap[id];
|
||
}
|
||
function addChildRowKey(row, childRow) {
|
||
var tree = row._attributes.tree;
|
||
var rowKey = childRow.rowKey;
|
||
if (tree && !common_1.includes(tree.childRowKeys, rowKey)) {
|
||
tree.childRowKeys.push(rowKey);
|
||
}
|
||
if (!common_1.someProp('rowKey', rowKey, row._children)) {
|
||
row._children.push(childRow);
|
||
}
|
||
row._leaf = false;
|
||
}
|
||
function insertChildRowKey(row, childRow, offset) {
|
||
var tree = row._attributes.tree;
|
||
var rowKey = childRow.rowKey;
|
||
if (tree && !common_1.includes(tree.childRowKeys, rowKey)) {
|
||
tree.childRowKeys.splice(offset, 0, rowKey);
|
||
}
|
||
if (!common_1.someProp('rowKey', rowKey, row._children)) {
|
||
row._children.splice(offset, 0, childRow);
|
||
}
|
||
row._leaf = false;
|
||
}
|
||
function getTreeCellInfo(rawData, row, treeIndentWidth, useIcon) {
|
||
var depth = tree_1.getDepth(rawData, row);
|
||
var indentWidth = getTreeIndentWidth(depth, treeIndentWidth, useIcon);
|
||
return {
|
||
depth: depth,
|
||
indentWidth: indentWidth,
|
||
leaf: tree_1.isLeaf(row),
|
||
expanded: tree_1.isExpanded(row),
|
||
};
|
||
}
|
||
function createTreeRawRow(id, row, parentRow, column, options) {
|
||
if (options === void 0) { options = {}; }
|
||
var childRowKeys = [];
|
||
if (row._attributes && row._attributes.tree) {
|
||
childRowKeys = row._attributes.tree.childRowKeys;
|
||
}
|
||
var keyColumnName = options.keyColumnName, offset = options.offset, _a = options.lazyObservable, lazyObservable = _a === void 0 ? false : _a, _b = options.disabled, disabled = _b === void 0 ? false : _b;
|
||
if (!row._children) {
|
||
row._children = [];
|
||
row._leaf = true;
|
||
}
|
||
// generate new tree rowKey when row doesn't have rowKey
|
||
var targetTreeRowKey = common_1.isUndefined(row.rowKey) ? generateTreeRowKey(id) : Number(row.rowKey);
|
||
var rawRow = data_1.createRawRow(id, row, targetTreeRowKey, column, {
|
||
keyColumnName: keyColumnName,
|
||
lazyObservable: lazyObservable,
|
||
disabled: disabled,
|
||
});
|
||
var defaultAttributes = {
|
||
parentRowKey: parentRow ? parentRow.rowKey : null,
|
||
childRowKeys: childRowKeys,
|
||
hidden: parentRow ? !tree_1.isExpanded(parentRow) || tree_1.isHidden(parentRow) : false,
|
||
};
|
||
if (parentRow) {
|
||
if (!common_1.isUndefined(offset)) {
|
||
insertChildRowKey(parentRow, rawRow, offset);
|
||
}
|
||
else {
|
||
addChildRowKey(parentRow, rawRow);
|
||
}
|
||
}
|
||
var tree = tslib_1.__assign(tslib_1.__assign({}, defaultAttributes), { expanded: row._attributes.expanded });
|
||
rawRow._attributes.tree = lazyObservable ? tree : observable_1.observable(tree);
|
||
return rawRow;
|
||
}
|
||
exports.createTreeRawRow = createTreeRawRow;
|
||
function flattenTreeData(id, data, parentRow, column, options) {
|
||
var flattenedRows = [];
|
||
data.forEach(function (row) {
|
||
var rawRow = createTreeRawRow(id, row, parentRow, column, options);
|
||
flattenedRows.push(rawRow);
|
||
if (Array.isArray(row._children)) {
|
||
if (row._children.length) {
|
||
flattenedRows.push.apply(flattenedRows, flattenTreeData(id, row._children, rawRow, column, options));
|
||
}
|
||
}
|
||
});
|
||
return flattenedRows;
|
||
}
|
||
exports.flattenTreeData = flattenTreeData;
|
||
function createTreeRawData(_a) {
|
||
var id = _a.id, data = _a.data, column = _a.column, keyColumnName = _a.keyColumnName, _b = _a.lazyObservable, lazyObservable = _b === void 0 ? false : _b, _c = _a.disabled, disabled = _c === void 0 ? false : _c;
|
||
// only reset the rowKey on lazy observable data
|
||
if (lazyObservable) {
|
||
treeRowKeyMap[id] = -1;
|
||
}
|
||
return flattenTreeData(id, data, null, column, {
|
||
keyColumnName: keyColumnName,
|
||
lazyObservable: lazyObservable,
|
||
disabled: disabled,
|
||
});
|
||
}
|
||
exports.createTreeRawData = createTreeRawData;
|
||
function createTreeCellInfo(rawData, row, treeIndentWidth, useIcon, lazyObservable) {
|
||
if (lazyObservable === void 0) { lazyObservable = false; }
|
||
var treeCellInfo = getTreeCellInfo(rawData, row, treeIndentWidth, useIcon);
|
||
var treeInfo = lazyObservable ? treeCellInfo : observable_1.observable(treeCellInfo);
|
||
if (!lazyObservable) {
|
||
observable_1.observe(function () {
|
||
treeInfo.expanded = tree_1.isExpanded(row);
|
||
treeInfo.leaf = tree_1.isLeaf(row);
|
||
});
|
||
}
|
||
return treeInfo;
|
||
}
|
||
exports.createTreeCellInfo = createTreeCellInfo;
|
||
function getTreeIndentWidth(depth, treeIndentWidth, showIcon) {
|
||
var indentWidth = treeIndentWidth !== null && treeIndentWidth !== void 0 ? treeIndentWidth : constant_1.TREE_INDENT_WIDTH;
|
||
return constant_1.TREE_INDENT_WIDTH + (depth - 1) * indentWidth + (showIcon ? constant_1.TREE_INDENT_WIDTH : 0);
|
||
}
|
||
exports.getTreeIndentWidth = getTreeIndentWidth;
|
||
|
||
|
||
/***/ }),
|
||
/* 21 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.getRootParentRow = exports.traverseDescendantRows = exports.traverseAncestorRows = exports.getDepth = exports.isRootChildRow = exports.isExpanded = exports.isLeaf = exports.isHidden = exports.isTreeColumnName = exports.getChildRowKeys = exports.getParentRowKey = exports.getStartIndexToAppendRow = exports.getDescendantRows = exports.getAncestorRows = exports.getChildRows = exports.getParentRow = void 0;
|
||
var observable_1 = __webpack_require__(5);
|
||
var data_1 = __webpack_require__(6);
|
||
var common_1 = __webpack_require__(0);
|
||
function getParentRow(store, rowKey, plainObj) {
|
||
var data = store.data, column = store.column, id = store.id;
|
||
var row = data_1.findRowByRowKey(data, column, id, rowKey);
|
||
if (row) {
|
||
var parentRowKey = getParentRowKey(row);
|
||
var parentRow = data_1.findRowByRowKey(data, column, id, parentRowKey);
|
||
if (parentRow) {
|
||
return plainObj ? observable_1.getOriginObject(parentRow) : parentRow;
|
||
}
|
||
}
|
||
return null;
|
||
}
|
||
exports.getParentRow = getParentRow;
|
||
function getChildRows(store, rowKey, plainObj) {
|
||
var data = store.data, column = store.column, id = store.id;
|
||
var row = data_1.findRowByRowKey(data, column, id, rowKey);
|
||
if (row) {
|
||
var childRowKeys = getChildRowKeys(row);
|
||
return childRowKeys.map(function (childRowKey) {
|
||
var childRow = data_1.findRowByRowKey(data, column, id, childRowKey);
|
||
return plainObj ? observable_1.getOriginObject(childRow) : childRow;
|
||
});
|
||
}
|
||
return [];
|
||
}
|
||
exports.getChildRows = getChildRows;
|
||
function getAncestorRows(store, rowKey) {
|
||
var data = store.data, column = store.column, id = store.id;
|
||
var rawData = data.rawData;
|
||
var row = data_1.findRowByRowKey(data, column, id, rowKey);
|
||
var ancestorRows = [];
|
||
if (row) {
|
||
traverseAncestorRows(rawData, row, function (parentRow) {
|
||
ancestorRows.unshift(observable_1.getOriginObject(parentRow));
|
||
});
|
||
}
|
||
return ancestorRows;
|
||
}
|
||
exports.getAncestorRows = getAncestorRows;
|
||
function getDescendantRows(store, rowKey) {
|
||
var data = store.data, column = store.column, id = store.id;
|
||
var rawData = data.rawData;
|
||
var row = data_1.findRowByRowKey(data, column, id, rowKey);
|
||
var childRows = [];
|
||
if (row) {
|
||
traverseDescendantRows(rawData, row, function (childRow) {
|
||
childRows.push(observable_1.getOriginObject(childRow));
|
||
});
|
||
}
|
||
return childRows;
|
||
}
|
||
exports.getDescendantRows = getDescendantRows;
|
||
function getStartIndexToAppendRow(store, parentRow, offset) {
|
||
var data = store.data, column = store.column, id = store.id;
|
||
var rawData = data.rawData;
|
||
var startIdx;
|
||
if (parentRow) {
|
||
if (offset) {
|
||
var childRowKeys = getChildRowKeys(parentRow);
|
||
var prevChildRowKey = childRowKeys[offset - 1];
|
||
var prevChildRowIdx = data_1.findIndexByRowKey(data, column, id, prevChildRowKey);
|
||
var descendantRowsCount = getDescendantRows(store, prevChildRowKey).length;
|
||
startIdx = prevChildRowIdx + descendantRowsCount + 1;
|
||
}
|
||
else {
|
||
startIdx = data_1.findIndexByRowKey(data, column, id, parentRow.rowKey) + 1;
|
||
if (common_1.isUndefined(offset)) {
|
||
startIdx += getDescendantRows(store, parentRow.rowKey).length;
|
||
}
|
||
}
|
||
}
|
||
else {
|
||
startIdx = common_1.isUndefined(offset) ? rawData.length : offset;
|
||
}
|
||
return startIdx;
|
||
}
|
||
exports.getStartIndexToAppendRow = getStartIndexToAppendRow;
|
||
function getParentRowKey(row) {
|
||
var tree = row._attributes.tree;
|
||
return tree && tree.parentRowKey !== row.rowKey ? tree.parentRowKey : null;
|
||
}
|
||
exports.getParentRowKey = getParentRowKey;
|
||
function getChildRowKeys(row) {
|
||
var tree = row._attributes.tree;
|
||
return tree ? tree.childRowKeys.slice() : [];
|
||
}
|
||
exports.getChildRowKeys = getChildRowKeys;
|
||
function isTreeColumnName(column, columnName) {
|
||
return column.treeColumnName === columnName;
|
||
}
|
||
exports.isTreeColumnName = isTreeColumnName;
|
||
function isHidden(_a) {
|
||
var _attributes = _a._attributes;
|
||
var tree = _attributes.tree;
|
||
return !!(tree && tree.hidden);
|
||
}
|
||
exports.isHidden = isHidden;
|
||
function isLeaf(_a) {
|
||
var _attributes = _a._attributes, _leaf = _a._leaf;
|
||
var tree = _attributes.tree;
|
||
return !!tree && !tree.childRowKeys.length && !!_leaf;
|
||
}
|
||
exports.isLeaf = isLeaf;
|
||
function isExpanded(row) {
|
||
var tree = row._attributes.tree;
|
||
return !!(tree && tree.expanded);
|
||
}
|
||
exports.isExpanded = isExpanded;
|
||
function isRootChildRow(row) {
|
||
var tree = row._attributes.tree;
|
||
return !!tree && common_1.isNull(tree.parentRowKey);
|
||
}
|
||
exports.isRootChildRow = isRootChildRow;
|
||
function getDepth(rawData, row) {
|
||
var parentRow = row;
|
||
var depth = 0;
|
||
do {
|
||
depth += 1;
|
||
parentRow = common_1.findProp('rowKey', getParentRowKey(parentRow), rawData);
|
||
} while (parentRow);
|
||
return depth;
|
||
}
|
||
exports.getDepth = getDepth;
|
||
function traverseAncestorRows(rawData, row, iteratee) {
|
||
var parentRowKey = getParentRowKey(row);
|
||
var parentRow;
|
||
while (!common_1.isNull(parentRowKey)) {
|
||
parentRow = common_1.findProp('rowKey', parentRowKey, rawData);
|
||
iteratee(parentRow);
|
||
parentRowKey = parentRow ? getParentRowKey(parentRow) : null;
|
||
}
|
||
}
|
||
exports.traverseAncestorRows = traverseAncestorRows;
|
||
function traverseDescendantRows(rawData, row, iteratee) {
|
||
var childRowKeys = getChildRowKeys(row);
|
||
var rowKey, childRow;
|
||
while (childRowKeys.length) {
|
||
rowKey = childRowKeys.shift();
|
||
childRow = common_1.findProp('rowKey', rowKey, rawData);
|
||
iteratee(childRow);
|
||
if (childRow) {
|
||
childRowKeys = childRowKeys.concat(getChildRowKeys(childRow));
|
||
}
|
||
}
|
||
}
|
||
exports.traverseDescendantRows = traverseDescendantRows;
|
||
function getRootParentRow(rawData, row) {
|
||
var rootParentRow = row;
|
||
do {
|
||
var parentRow = common_1.findProp('rowKey', getParentRowKey(rootParentRow), rawData);
|
||
if (!parentRow) {
|
||
break;
|
||
}
|
||
rootParentRow = parentRow;
|
||
} while (rootParentRow);
|
||
return rootParentRow;
|
||
}
|
||
exports.getRootParentRow = getRootParentRow;
|
||
|
||
|
||
/***/ }),
|
||
/* 22 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.getSelectionRange = exports.isSameInputRange = exports.getSortedRange = exports.getChildColumnRange = exports.getLeafChildColumnNames = void 0;
|
||
var tslib_1 = __webpack_require__(1);
|
||
var common_1 = __webpack_require__(0);
|
||
var column_1 = __webpack_require__(12);
|
||
function sortByVisibleColumns(visibleColumnsWithRowHeader, childNames) {
|
||
var result = [];
|
||
visibleColumnsWithRowHeader.forEach(function (column) {
|
||
if (common_1.includes(childNames, column.name)) {
|
||
result.push(column.name);
|
||
}
|
||
});
|
||
return result;
|
||
}
|
||
function getLeafChildColumnNames(complexColumnHeaders, name) {
|
||
var column = common_1.findProp('name', name, complexColumnHeaders);
|
||
if (!column) {
|
||
return [name];
|
||
}
|
||
var result = [];
|
||
column.childNames.forEach(function (childName) {
|
||
if (column_1.isParentColumnHeader(complexColumnHeaders, childName)) {
|
||
result = tslib_1.__spreadArrays(result, getLeafChildColumnNames(complexColumnHeaders, childName));
|
||
}
|
||
else {
|
||
result = tslib_1.__spreadArrays(result, [childName]);
|
||
}
|
||
});
|
||
return result;
|
||
}
|
||
exports.getLeafChildColumnNames = getLeafChildColumnNames;
|
||
function getChildColumnRange(visibleColumnsWithRowHeader, complexColumnHeaders, name) {
|
||
var unsortedChildNames = getLeafChildColumnNames(complexColumnHeaders, name);
|
||
var childNames = sortByVisibleColumns(visibleColumnsWithRowHeader, unsortedChildNames);
|
||
var startIndex = common_1.findPropIndex('name', childNames[0], visibleColumnsWithRowHeader);
|
||
var endIndex = common_1.findPropIndex('name', childNames[childNames.length - 1], visibleColumnsWithRowHeader);
|
||
return [startIndex, endIndex];
|
||
}
|
||
exports.getChildColumnRange = getChildColumnRange;
|
||
function getSortedRange(range) {
|
||
return range[0] > range[1] ? [range[1], range[0]] : range;
|
||
}
|
||
exports.getSortedRange = getSortedRange;
|
||
function isSameInputRange(inp1, inp2) {
|
||
if (common_1.isNull(inp1) || common_1.isNull(inp2)) {
|
||
return inp1 === inp2;
|
||
}
|
||
return (inp1.column[0] === inp2.column[0] &&
|
||
inp1.column[1] === inp2.column[1] &&
|
||
inp1.row[0] === inp2.row[0] &&
|
||
inp1.row[1] === inp2.row[1]);
|
||
}
|
||
exports.isSameInputRange = isSameInputRange;
|
||
function getSelectionRange(range, pageOptions) {
|
||
if (!common_1.isEmpty(pageOptions)) {
|
||
var row = range.row, column = range.column;
|
||
var perPage = pageOptions.perPage, page = pageOptions.page;
|
||
var prevPageRowCount = (page - 1) * perPage;
|
||
return {
|
||
row: [row[0] - prevPageRowCount, row[1] - prevPageRowCount],
|
||
column: column,
|
||
};
|
||
}
|
||
return range;
|
||
}
|
||
exports.getSelectionRange = getSelectionRange;
|
||
|
||
|
||
/***/ }),
|
||
/* 23 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.getFormattedValue = exports.createFormattedValue = exports.getMaxTextMap = exports.setMaxColumnTextMap = exports.setMaxTextMap = exports.initMaxTextMap = void 0;
|
||
var listItemText_1 = __webpack_require__(66);
|
||
var common_1 = __webpack_require__(0);
|
||
var maxTextMap = {};
|
||
function initMaxTextMap() {
|
||
maxTextMap = {};
|
||
}
|
||
exports.initMaxTextMap = initMaxTextMap;
|
||
function setMaxTextMap(column, row) {
|
||
column.autoResizingColumn.forEach(function (columnInfo) {
|
||
var name = columnInfo.name;
|
||
var formattedValue = createFormattedValue(row, columnInfo);
|
||
if (!maxTextMap[name] || maxTextMap[name].formattedValue.length < formattedValue.length) {
|
||
setMaxColumnTextMap(name, formattedValue, row);
|
||
}
|
||
});
|
||
}
|
||
exports.setMaxTextMap = setMaxTextMap;
|
||
function setMaxColumnTextMap(columnName, formattedValue, row) {
|
||
maxTextMap[columnName] = { formattedValue: formattedValue, row: row };
|
||
}
|
||
exports.setMaxColumnTextMap = setMaxColumnTextMap;
|
||
function getMaxTextMap() {
|
||
return maxTextMap;
|
||
}
|
||
exports.getMaxTextMap = getMaxTextMap;
|
||
function createFormattedValue(row, columnInfo) {
|
||
var name = columnInfo.name, formatter = columnInfo.formatter, defaultValue = columnInfo.defaultValue;
|
||
var formatterProps = { row: row, column: columnInfo, value: row[name] };
|
||
return getFormattedValue(formatterProps, formatter, row[name] || defaultValue, row._relationListItemMap[name]);
|
||
}
|
||
exports.createFormattedValue = createFormattedValue;
|
||
function getFormattedValue(props, formatter, defaultValue, relationListItems) {
|
||
var value;
|
||
if (formatter === 'listItemText') {
|
||
value = listItemText_1.listItemText(props, relationListItems);
|
||
}
|
||
else if (common_1.isFunction(formatter)) {
|
||
value = formatter(props);
|
||
}
|
||
else if (common_1.isString(formatter)) {
|
||
value = formatter;
|
||
}
|
||
else {
|
||
value = defaultValue;
|
||
}
|
||
var strValue = getCellDisplayValue(value);
|
||
if (strValue && props.column.escapeHTML) {
|
||
return common_1.encodeHTMLEntity(strValue);
|
||
}
|
||
return strValue;
|
||
}
|
||
exports.getFormattedValue = getFormattedValue;
|
||
function getCellDisplayValue(value) {
|
||
if (common_1.isNil(value)) {
|
||
return '';
|
||
}
|
||
return String(value);
|
||
}
|
||
|
||
|
||
/***/ }),
|
||
/* 24 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.resetRowSpan = exports.updateMainRowSpan = exports.updateRowSpan = exports.updateRowSpanWhenRemoving = exports.updateRowSpanWhenAppending = void 0;
|
||
var data_1 = __webpack_require__(15);
|
||
var common_1 = __webpack_require__(0);
|
||
var observable_1 = __webpack_require__(5);
|
||
var rowSpan_1 = __webpack_require__(13);
|
||
var constant_1 = __webpack_require__(11);
|
||
function updateRowSpanWhenAppending(data, prevRow, extendPrevRowSpan) {
|
||
var prevRowSpanMap = prevRow.rowSpanMap;
|
||
if (common_1.isEmpty(prevRowSpanMap)) {
|
||
return;
|
||
}
|
||
Object.keys(prevRowSpanMap).forEach(function (columnName) {
|
||
var prevRowSpan = prevRowSpanMap[columnName];
|
||
if (prevRowSpan) {
|
||
var count = prevRowSpan.count, keyRow = prevRowSpan.mainRow, mainRowKey = prevRowSpan.mainRowKey;
|
||
var mainRow = keyRow ? prevRow : common_1.findProp('rowKey', mainRowKey, data);
|
||
var mainRowSpan = mainRow.rowSpanMap[columnName];
|
||
var startOffset = keyRow || extendPrevRowSpan ? 1 : -count + 1;
|
||
// keep rowSpan state when appends row in the middle of rowSpan
|
||
if (mainRowSpan.spanCount > startOffset) {
|
||
mainRowSpan.count += 1;
|
||
mainRowSpan.spanCount += 1;
|
||
updateSubRowSpan(data, mainRow, columnName, 1, mainRowSpan.spanCount);
|
||
}
|
||
}
|
||
});
|
||
}
|
||
exports.updateRowSpanWhenAppending = updateRowSpanWhenAppending;
|
||
function updateRowSpanWhenRemoving(data, removedRow, nextRow, keepRowSpanData) {
|
||
var removedRowSpanMap = removedRow.rowSpanMap;
|
||
if (common_1.isEmpty(removedRowSpanMap)) {
|
||
return;
|
||
}
|
||
Object.keys(removedRowSpanMap).forEach(function (columnName) {
|
||
var removedRowSpan = removedRowSpanMap[columnName];
|
||
var count = removedRowSpan.count, keyRow = removedRowSpan.mainRow, mainRowKey = removedRowSpan.mainRowKey;
|
||
var mainRow, spanCount;
|
||
if (keyRow) {
|
||
mainRow = nextRow;
|
||
spanCount = count - 1;
|
||
if (spanCount > 1) {
|
||
var mainRowSpan = mainRow.rowSpanMap[columnName];
|
||
mainRowSpan.mainRowKey = mainRow.rowKey;
|
||
mainRowSpan.mainRow = true;
|
||
}
|
||
if (keepRowSpanData) {
|
||
mainRow[columnName] = removedRow[columnName];
|
||
}
|
||
}
|
||
else {
|
||
mainRow = common_1.findProp('rowKey', mainRowKey, data);
|
||
spanCount = mainRow.rowSpanMap[columnName].spanCount - 1;
|
||
}
|
||
if (spanCount > 1) {
|
||
var mainRowSpan = mainRow.rowSpanMap[columnName];
|
||
mainRowSpan.count = spanCount;
|
||
mainRowSpan.spanCount = spanCount;
|
||
updateSubRowSpan(data, mainRow, columnName, 1, spanCount);
|
||
}
|
||
else {
|
||
delete mainRow.rowSpanMap[columnName];
|
||
}
|
||
});
|
||
}
|
||
exports.updateRowSpanWhenRemoving = updateRowSpanWhenRemoving;
|
||
function updateRowSpan(store) {
|
||
var data = store.data, column = store.column;
|
||
var filteredRawData = data.filteredRawData, pageOptions = data.pageOptions;
|
||
var perPageOption = pageOptions.perPage;
|
||
var rowSpans = {};
|
||
var perPage = !common_1.isEmpty(pageOptions) && !perPageOption ? constant_1.DEFAULT_PER_PAGE : perPageOption;
|
||
if (column.visibleRowSpanEnabledColumns.length > 0) {
|
||
resetRowSpan(store, true);
|
||
column.visibleRowSpanEnabledColumns.forEach(function (_a) {
|
||
var name = _a.name;
|
||
var rowSpanOfColumn = rowSpan_1.getRowSpanOfColumn(filteredRawData, name, perPage);
|
||
Object.keys(rowSpanOfColumn).forEach(function (rowKey) {
|
||
if (rowSpans[rowKey]) {
|
||
rowSpans[rowKey][name] = rowSpanOfColumn[rowKey][name];
|
||
}
|
||
else {
|
||
rowSpans[rowKey] = rowSpanOfColumn[rowKey];
|
||
}
|
||
});
|
||
});
|
||
Object.keys(rowSpans).forEach(function (rowKey) {
|
||
var row = common_1.find(function (_a) {
|
||
var key = _a.rowKey;
|
||
return "" + key === rowKey;
|
||
}, filteredRawData);
|
||
updateMainRowSpan(filteredRawData, row, rowSpans[rowKey]);
|
||
});
|
||
observable_1.notify(data, 'rawData', 'filteredRawData', 'viewData', 'filteredViewData');
|
||
}
|
||
}
|
||
exports.updateRowSpan = updateRowSpan;
|
||
function updateMainRowSpan(data, mainRow, rowSpan) {
|
||
if (rowSpan) {
|
||
var rowKey_1 = mainRow.rowKey, rowSpanMap_1 = mainRow.rowSpanMap;
|
||
Object.keys(rowSpan).forEach(function (columnName) {
|
||
var spanCount = rowSpan[columnName];
|
||
rowSpanMap_1[columnName] = data_1.createRowSpan(true, rowKey_1, spanCount, spanCount);
|
||
updateSubRowSpan(data, mainRow, columnName, 1, spanCount);
|
||
});
|
||
}
|
||
}
|
||
exports.updateMainRowSpan = updateMainRowSpan;
|
||
function updateSubRowSpan(data, mainRow, columnName, startOffset, spanCount) {
|
||
var mainRowIndex = common_1.findPropIndex('rowKey', mainRow.rowKey, data);
|
||
for (var offset = startOffset; offset < spanCount; offset += 1) {
|
||
var row = data[mainRowIndex + offset];
|
||
row.rowSpanMap[columnName] = data_1.createRowSpan(false, mainRow.rowKey, -offset, spanCount);
|
||
}
|
||
}
|
||
function resetRowSpan(_a, slient) {
|
||
var data = _a.data;
|
||
if (slient === void 0) { slient = false; }
|
||
data.rawData.forEach(function (_a) {
|
||
var rowSpanMap = _a.rowSpanMap;
|
||
Object.keys(rowSpanMap).forEach(function (columnName) {
|
||
delete rowSpanMap[columnName];
|
||
});
|
||
});
|
||
if (!slient) {
|
||
observable_1.notify(data, 'rawData', 'filteredRawData', 'viewData', 'filteredViewData');
|
||
}
|
||
}
|
||
exports.resetRowSpan = resetRowSpan;
|
||
|
||
|
||
/***/ }),
|
||
/* 25 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.initScrollPosition = exports.setScrollTop = exports.setScrollLeft = exports.setScrollToSelection = exports.setScrollToFocus = void 0;
|
||
var viewport_1 = __webpack_require__(78);
|
||
function setScrollPosition(viewport, changedScrollTop, changedScrollLeft) {
|
||
if (changedScrollLeft !== null) {
|
||
viewport.scrollLeft = changedScrollLeft;
|
||
}
|
||
if (changedScrollTop !== null) {
|
||
viewport.scrollTop = changedScrollTop;
|
||
}
|
||
}
|
||
function setScrollToFocus(store) {
|
||
var _a = store.focus, cellPosRect = _a.cellPosRect, side = _a.side, viewport = store.viewport;
|
||
if (cellPosRect === null || side === null) {
|
||
return;
|
||
}
|
||
var _b = viewport_1.getChangedScrollPosition(store, side), changedScrollLeft = _b[0], changedScrollTop = _b[1];
|
||
setScrollPosition(viewport, changedScrollTop, changedScrollLeft);
|
||
}
|
||
exports.setScrollToFocus = setScrollToFocus;
|
||
function setScrollToSelection(store) {
|
||
var _a = store.columnCoords, widths = _a.widths, columnOffsets = _a.offsets, _b = store.rowCoords, heights = _b.heights, rowOffsets = _b.offsets, inputRange = store.selection.inputRange, viewport = store.viewport;
|
||
if (!inputRange) {
|
||
return;
|
||
}
|
||
var rowIndex = inputRange.row[1];
|
||
var columnIndex = inputRange.column[1];
|
||
var cellSide = columnIndex > widths.L.length - 1 ? 'R' : 'L';
|
||
var rightSideColumnIndex = columnIndex < widths.L.length ? widths.L.length : columnIndex - widths.L.length;
|
||
var left = columnOffsets[cellSide][rightSideColumnIndex];
|
||
var right = left + widths[cellSide][rightSideColumnIndex];
|
||
var top = rowOffsets[rowIndex];
|
||
var bottom = top + heights[rowIndex];
|
||
var cellPosRect = { left: left, right: right, top: top, bottom: bottom };
|
||
var _c = viewport_1.getChangedScrollPosition(store, cellSide, cellPosRect), changedScrollLeft = _c[0], changedScrollTop = _c[1];
|
||
setScrollPosition(viewport, changedScrollTop, changedScrollLeft);
|
||
}
|
||
exports.setScrollToSelection = setScrollToSelection;
|
||
function setScrollLeft(_a, scrollLeft) {
|
||
var viewport = _a.viewport;
|
||
viewport.scrollLeft = scrollLeft;
|
||
}
|
||
exports.setScrollLeft = setScrollLeft;
|
||
function setScrollTop(_a, scrollTop) {
|
||
var viewport = _a.viewport;
|
||
viewport.scrollTop = scrollTop;
|
||
}
|
||
exports.setScrollTop = setScrollTop;
|
||
function initScrollPosition(_a) {
|
||
var viewport = _a.viewport;
|
||
viewport.scrollLeft = 0;
|
||
viewport.scrollTop = 0;
|
||
}
|
||
exports.initScrollPosition = initScrollPosition;
|
||
|
||
|
||
/***/ }),
|
||
/* 26 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.updateAllSummaryValues = exports.updateSummaryValueByRow = exports.updateSummaryValueByColumn = exports.updateSummaryValueByCell = exports.setSummaryColumnContent = void 0;
|
||
var summary_1 = __webpack_require__(46);
|
||
var common_1 = __webpack_require__(0);
|
||
var summary_2 = __webpack_require__(47);
|
||
var observable_1 = __webpack_require__(5);
|
||
function setSummaryColumnContent(_a, columnName, columnContent) {
|
||
var summary = _a.summary, data = _a.data;
|
||
var castedColumnContent = summary_1.castToSummaryColumnContent(columnContent);
|
||
var content = summary_1.extractSummaryColumnContent(castedColumnContent, null);
|
||
summary.summaryColumnContents[columnName] = content;
|
||
summary.summaryValues[columnName] = summary_2.createSummaryValue(content, columnName, data);
|
||
observable_1.notify(summary, 'summaryValues');
|
||
}
|
||
exports.setSummaryColumnContent = setSummaryColumnContent;
|
||
function updateSummaryValue(_a, columnName, type, options) {
|
||
var summary = _a.summary, data = _a.data;
|
||
var content = summary.summaryColumnContents[columnName];
|
||
if (!content || !content.useAutoSummary) {
|
||
return;
|
||
}
|
||
var summaryValue = summary.summaryValues[columnName];
|
||
var orgValue = Number(options.orgValue) || 0;
|
||
var value = Number(options.value) || 0;
|
||
var cntVariation = options.type === 'APPEND' ? 1 : -1;
|
||
var columnFilter = common_1.findProp('columnName', columnName, data.filters || []);
|
||
var hasColumnFilter = !!(columnFilter && common_1.isFunction(columnFilter.conditionFn));
|
||
var included = hasColumnFilter && columnFilter.conditionFn(value);
|
||
var sum = summaryValue.sum, min = summaryValue.min, max = summaryValue.max, cnt = summaryValue.cnt;
|
||
var _b = summaryValue.filtered, filteredSum = _b.sum, filteredMin = _b.min, filteredMax = _b.max, filteredCnt = _b.cnt;
|
||
switch (type) {
|
||
case 'UPDATE_COLUMN':
|
||
sum = value * cnt;
|
||
min = value;
|
||
max = value;
|
||
if (hasColumnFilter) {
|
||
filteredCnt = included ? filteredCnt : 0;
|
||
filteredSum = included ? value * filteredCnt : 0;
|
||
filteredMin = included ? value : 0;
|
||
filteredMax = included ? value : 0;
|
||
}
|
||
break;
|
||
case 'UPDATE_CELL':
|
||
sum = sum - orgValue + value;
|
||
if (hasColumnFilter) {
|
||
var orgIncluded = columnFilter.conditionFn(orgValue);
|
||
if (!orgIncluded && included) {
|
||
filteredSum = filteredSum + value;
|
||
filteredCnt += 1;
|
||
}
|
||
else if (orgIncluded && !included) {
|
||
filteredSum = filteredSum - orgValue;
|
||
filteredCnt -= 1;
|
||
}
|
||
else if (orgIncluded && included) {
|
||
filteredSum = filteredSum - orgValue + value;
|
||
}
|
||
}
|
||
break;
|
||
case 'UPDATE_ROW':
|
||
cnt += cntVariation;
|
||
sum = sum + cntVariation * value;
|
||
if (hasColumnFilter && included) {
|
||
filteredSum = filteredSum + cntVariation * value;
|
||
filteredCnt += cntVariation;
|
||
}
|
||
break;
|
||
default:
|
||
// do nothing;
|
||
}
|
||
var avg = sum / cnt;
|
||
var filteredAvg = filteredSum / filteredCnt;
|
||
min = Math.min(value, min);
|
||
max = Math.max(value, max);
|
||
filteredMin = Math.min(value, filteredMin);
|
||
filteredMax = Math.max(value, filteredMax);
|
||
summary.summaryValues[columnName] = {
|
||
sum: sum,
|
||
min: min,
|
||
max: max,
|
||
avg: avg,
|
||
cnt: cnt,
|
||
filtered: {
|
||
sum: filteredSum,
|
||
min: filteredMin,
|
||
max: filteredMax,
|
||
avg: filteredAvg,
|
||
cnt: filteredCnt,
|
||
},
|
||
};
|
||
observable_1.notify(summary, 'summaryValues');
|
||
}
|
||
function updateSummaryValueByCell(store, columnName, options) {
|
||
updateSummaryValue(store, columnName, 'UPDATE_CELL', options);
|
||
}
|
||
exports.updateSummaryValueByCell = updateSummaryValueByCell;
|
||
function updateSummaryValueByColumn(store, columnName, options) {
|
||
updateSummaryValue(store, columnName, 'UPDATE_COLUMN', options);
|
||
}
|
||
exports.updateSummaryValueByColumn = updateSummaryValueByColumn;
|
||
function updateSummaryValueByRow(store, row, options) {
|
||
var summary = store.summary, column = store.column;
|
||
var type = options.type, orgRow = options.orgRow;
|
||
var summaryColumns = column.allColumns.filter(function (_a) {
|
||
var name = _a.name;
|
||
return !!summary.summaryColumnContents[name];
|
||
});
|
||
summaryColumns.forEach(function (_a) {
|
||
var name = _a.name;
|
||
if (type === 'SET') {
|
||
updateSummaryValue(store, name, 'UPDATE_CELL', { orgValue: orgRow[name], value: row[name] });
|
||
}
|
||
else {
|
||
updateSummaryValue(store, name, 'UPDATE_ROW', { type: type, value: row[name] });
|
||
}
|
||
});
|
||
}
|
||
exports.updateSummaryValueByRow = updateSummaryValueByRow;
|
||
function updateAllSummaryValues(_a) {
|
||
var summary = _a.summary, data = _a.data, column = _a.column;
|
||
var summaryColumns = column.allColumns.filter(function (_a) {
|
||
var name = _a.name;
|
||
return !!summary.summaryColumnContents[name];
|
||
});
|
||
summaryColumns.forEach(function (_a) {
|
||
var name = _a.name;
|
||
var content = summary.summaryColumnContents[name];
|
||
summary.summaryValues[name] = summary_2.createSummaryValue(content, name, data);
|
||
});
|
||
observable_1.notify(summary, 'summaryValues');
|
||
}
|
||
exports.updateAllSummaryValues = updateAllSummaryValues;
|
||
|
||
|
||
/***/ }),
|
||
/* 27 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.getValidationCode = exports.forceValidateUniquenessOfColumn = exports.forceValidateUniquenessOfColumns = exports.replaceColumnUniqueInfoMap = exports.removeUniqueInfoMap = exports.addUniqueInfoMap = exports.invokeWithUniqueValidationColumn = exports.createNewValidationMap = void 0;
|
||
var tslib_1 = __webpack_require__(1);
|
||
var common_1 = __webpack_require__(0);
|
||
var observable_1 = __webpack_require__(5);
|
||
var instance_1 = __webpack_require__(8);
|
||
var data_1 = __webpack_require__(6);
|
||
var instanceValidationMap = {};
|
||
var isValidatingUniquenessMap = {};
|
||
function createNewValidationMap(id) {
|
||
instanceValidationMap[id] = {};
|
||
}
|
||
exports.createNewValidationMap = createNewValidationMap;
|
||
function invokeWithUniqueValidationColumn(column, fn) {
|
||
column.validationColumns.forEach(function (_a) {
|
||
var name = _a.name, validation = _a.validation;
|
||
if (validation.unique) {
|
||
fn(name);
|
||
}
|
||
});
|
||
}
|
||
exports.invokeWithUniqueValidationColumn = invokeWithUniqueValidationColumn;
|
||
function addUniqueInfoMap(id, row, column) {
|
||
invokeWithUniqueValidationColumn(column, function (name) {
|
||
return addColumnUniqueInfoMap(id, row.rowKey, name, row[name]);
|
||
});
|
||
}
|
||
exports.addUniqueInfoMap = addUniqueInfoMap;
|
||
function removeUniqueInfoMap(id, row, column) {
|
||
invokeWithUniqueValidationColumn(column, function (name) {
|
||
return removeColumnUniqueInfoMap(id, row.rowKey, name, row[name]);
|
||
});
|
||
}
|
||
exports.removeUniqueInfoMap = removeUniqueInfoMap;
|
||
function removeColumnUniqueInfoMap(id, rowKey, columnName, cellValue) {
|
||
var value = String(cellValue);
|
||
var uniqueInfoMap = instanceValidationMap[id];
|
||
if (uniqueInfoMap && uniqueInfoMap[value] && uniqueInfoMap[value][columnName]) {
|
||
uniqueInfoMap[value][columnName] = uniqueInfoMap[value][columnName].filter(function (targetRowKey) { return targetRowKey !== rowKey; });
|
||
}
|
||
}
|
||
function addColumnUniqueInfoMap(id, rowKey, columnName, cellValue) {
|
||
var value = String(cellValue);
|
||
var uniqueInfoMap = instanceValidationMap[id];
|
||
uniqueInfoMap[value] = uniqueInfoMap[value] || {};
|
||
uniqueInfoMap[value][columnName] = uniqueInfoMap[value][columnName] || [];
|
||
uniqueInfoMap[value][columnName].push(rowKey);
|
||
}
|
||
function replaceColumnUniqueInfoMap(id, column, _a) {
|
||
var rowKey = _a.rowKey, columnName = _a.columnName, prevValue = _a.prevValue, value = _a.value;
|
||
if (common_1.some(function (_a) {
|
||
var name = _a.name;
|
||
return name === columnName;
|
||
}, column.validationColumns)) {
|
||
removeColumnUniqueInfoMap(id, rowKey, columnName, prevValue);
|
||
addColumnUniqueInfoMap(id, rowKey, columnName, value);
|
||
}
|
||
}
|
||
exports.replaceColumnUniqueInfoMap = replaceColumnUniqueInfoMap;
|
||
function forceValidateUniquenessOfColumns(rawData, column) {
|
||
if (rawData.length) {
|
||
// trick for forcing to validate the uniqueness
|
||
invokeWithUniqueValidationColumn(column, function (name) { return observable_1.notify(rawData[0], name); });
|
||
}
|
||
}
|
||
exports.forceValidateUniquenessOfColumns = forceValidateUniquenessOfColumns;
|
||
function forceValidateUniquenessOfColumn(rawData, column, columnName) {
|
||
if (common_1.some(function (_a) {
|
||
var name = _a.name;
|
||
return name === columnName;
|
||
}, column.validationColumns) && rawData.length) {
|
||
// trick for forcing to validate the uniqueness
|
||
observable_1.notify(rawData[0], columnName);
|
||
}
|
||
}
|
||
exports.forceValidateUniquenessOfColumn = forceValidateUniquenessOfColumn;
|
||
function hasDuplicateValue(id, columnName, cellValue) {
|
||
var _a;
|
||
var value = String(cellValue);
|
||
var uniqueInfoMap = instanceValidationMap[id];
|
||
return !!(uniqueInfoMap && uniqueInfoMap[value] && ((_a = uniqueInfoMap[value][columnName]) === null || _a === void 0 ? void 0 : _a.length) > 1);
|
||
}
|
||
function validateDataUniqueness(id, value, columnName, invalidStates) {
|
||
if (hasDuplicateValue(id, columnName, value)) {
|
||
invalidStates.push({ code: 'UNIQUE' });
|
||
}
|
||
// prevent recursive call of 'validateDataUniqueness' when scrolling or manipulating the data
|
||
if (!isValidatingUniquenessMap[columnName] &&
|
||
!common_1.includes(observable_1.getRunningObservers(), 'lazyObservable')) {
|
||
var rawData_1 = [];
|
||
observable_1.unobservedInvoke(function () {
|
||
// @TODO: should get the latest rawData through function(not private field of the grid instance)
|
||
// @ts-ignore
|
||
rawData_1 = instance_1.getInstance(id).store.data.rawData;
|
||
});
|
||
isValidatingUniquenessMap[columnName] = true;
|
||
rawData_1.forEach(function (row) {
|
||
if (observable_1.isObservable(row)) {
|
||
observable_1.notify(row, columnName);
|
||
}
|
||
});
|
||
setTimeout(function () {
|
||
isValidatingUniquenessMap[columnName] = false;
|
||
});
|
||
}
|
||
}
|
||
function validateCustomValidator(row, value, columnName, validatorFn, invalidStates) {
|
||
var originRow = data_1.getOmittedInternalProp(row);
|
||
observable_1.unobservedInvoke(function () {
|
||
var result = validatorFn(value, originRow, columnName);
|
||
var _a = (common_1.isBoolean(result)
|
||
? { valid: result }
|
||
: result), valid = _a.valid, meta = _a.meta;
|
||
if (!valid) {
|
||
invalidStates.push(tslib_1.__assign({ code: 'VALIDATOR_FN' }, meta));
|
||
}
|
||
});
|
||
}
|
||
function getValidationCode(_a) {
|
||
var id = _a.id, value = _a.value, row = _a.row, columnName = _a.columnName, validation = _a.validation;
|
||
var invalidStates = [];
|
||
if (!validation) {
|
||
return invalidStates;
|
||
}
|
||
var required = validation.required, dataType = validation.dataType, min = validation.min, max = validation.max, regExp = validation.regExp, unique = validation.unique, validatorFn = validation.validatorFn;
|
||
if (required && common_1.isBlank(value)) {
|
||
invalidStates.push({ code: 'REQUIRED' });
|
||
}
|
||
if (unique) {
|
||
validateDataUniqueness(id, value, columnName, invalidStates);
|
||
}
|
||
if (common_1.isFunction(validatorFn)) {
|
||
validateCustomValidator(row, value, columnName, validatorFn, invalidStates);
|
||
}
|
||
if (dataType === 'string' && !common_1.isString(value)) {
|
||
invalidStates.push({ code: 'TYPE_STRING' });
|
||
}
|
||
if (regExp && common_1.isString(value) && !regExp.test(value)) {
|
||
invalidStates.push({ code: 'REGEXP', regExp: regExp });
|
||
}
|
||
var numberValue = common_1.convertToNumber(value);
|
||
if (dataType === 'number' && !common_1.isNumber(numberValue)) {
|
||
invalidStates.push({ code: 'TYPE_NUMBER' });
|
||
}
|
||
if (common_1.isNumber(min) && common_1.isNumber(numberValue) && numberValue < min) {
|
||
invalidStates.push({ code: 'MIN', min: min });
|
||
}
|
||
if (common_1.isNumber(max) && common_1.isNumber(numberValue) && numberValue > max) {
|
||
invalidStates.push({ code: 'MAX', max: max });
|
||
}
|
||
return invalidStates;
|
||
}
|
||
exports.getValidationCode = getValidationCode;
|
||
|
||
|
||
/***/ }),
|
||
/* 28 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.createObservableData = exports.fillMissingColumnData = void 0;
|
||
var tslib_1 = __webpack_require__(1);
|
||
var observable_1 = __webpack_require__(5);
|
||
var data_1 = __webpack_require__(15);
|
||
var data_2 = __webpack_require__(6);
|
||
var tree_1 = __webpack_require__(20);
|
||
var common_1 = __webpack_require__(0);
|
||
function getDataToBeObservable(acc, row, viewRow, index, treeColumnName) {
|
||
if (treeColumnName && row._attributes.tree.hidden) {
|
||
return acc;
|
||
}
|
||
if (!observable_1.isObservable(row) ||
|
||
(viewRow && row.rowKey === viewRow.rowKey && !observable_1.isObservable(viewRow.valueMap))) {
|
||
acc.rows.push(row);
|
||
acc.targetIndexes.push(index);
|
||
}
|
||
return acc;
|
||
}
|
||
function createOriginData(data, rowRange, treeColumnName) {
|
||
var start = rowRange[0], end = rowRange[1];
|
||
var viewData = data.viewData.slice(start, end);
|
||
return data.rawData
|
||
.slice(start, end)
|
||
.reduce(function (acc, row, index) {
|
||
return getDataToBeObservable(acc, row, viewData[index], index + start, treeColumnName);
|
||
}, {
|
||
rows: [],
|
||
targetIndexes: [],
|
||
});
|
||
}
|
||
function createFilteredOriginData(data, rowRange, treeColumnName) {
|
||
var start = rowRange[0], end = rowRange[1];
|
||
var rawData = data.rawData, viewData = data.viewData;
|
||
return data
|
||
.filteredIndex.slice(start, end)
|
||
.reduce(function (acc, rowIndex) {
|
||
return getDataToBeObservable(acc, rawData[rowIndex], viewData[rowIndex], rowIndex, treeColumnName);
|
||
}, { rows: [], targetIndexes: [] });
|
||
}
|
||
function changeToObservableData(id, column, data, originData) {
|
||
var targetIndexes = originData.targetIndexes, rows = originData.rows;
|
||
var rawData = data.rawData;
|
||
fillMissingColumnData(column, rows);
|
||
// prevRows is needed to create rowSpan
|
||
var prevRows = targetIndexes.map(function (targetIndex) { return data.rawData[targetIndex - 1]; });
|
||
for (var index = 0, end = rows.length; index < end; index += 1) {
|
||
var targetIndex = targetIndexes[index];
|
||
var rawRow = data_1.createRawRow(id, rows[index], index, column, {
|
||
lazyObservable: false,
|
||
prevRow: prevRows[index],
|
||
keyColumnName: column.keyColumnName,
|
||
});
|
||
var viewRow = data_1.createViewRow(id, rawRow, rawData, column);
|
||
common_1.silentSplice(data.rawData, targetIndex, 1, rawRow);
|
||
common_1.silentSplice(data.viewData, targetIndex, 1, viewRow);
|
||
}
|
||
observable_1.notify(data, 'rawData', 'filteredRawData', 'viewData', 'filteredViewData');
|
||
}
|
||
function changeToObservableTreeData(id, column, data, originData) {
|
||
var rows = originData.rows;
|
||
var rawData = data.rawData, viewData = data.viewData;
|
||
fillMissingColumnData(column, rows);
|
||
// create new creation key for updating the observe function of hoc component
|
||
data_1.generateDataCreationKey();
|
||
rows.forEach(function (row) {
|
||
var parentRow = data_2.findRowByRowKey(data, column, id, row._attributes.tree.parentRowKey);
|
||
var rawRow = tree_1.createTreeRawRow(id, row, parentRow || null, column);
|
||
var viewRow = data_1.createViewRow(id, rawRow, rawData, column);
|
||
var foundIndex = data_2.findIndexByRowKey(data, column, id, rawRow.rowKey);
|
||
common_1.silentSplice(rawData, foundIndex, 1, rawRow);
|
||
common_1.silentSplice(viewData, foundIndex, 1, viewRow);
|
||
});
|
||
observable_1.notify(data, 'rawData', 'filteredRawData', 'viewData', 'filteredViewData');
|
||
}
|
||
function fillMissingColumnData(column, rawData) {
|
||
for (var i = 0; i < rawData.length; i += 1) {
|
||
rawData[i] = tslib_1.__assign(tslib_1.__assign({}, column.emptyRow), rawData[i]);
|
||
}
|
||
}
|
||
exports.fillMissingColumnData = fillMissingColumnData;
|
||
function createObservableData(_a, allRowRange) {
|
||
var column = _a.column, data = _a.data, viewport = _a.viewport, id = _a.id;
|
||
if (allRowRange === void 0) { allRowRange = false; }
|
||
var rowRange = allRowRange ? [0, data.rawData.length] : viewport.rowRange;
|
||
var treeColumnName = column.treeColumnName;
|
||
var originData = data.filters && !allRowRange
|
||
? createFilteredOriginData(data, rowRange, treeColumnName)
|
||
: createOriginData(data, rowRange, treeColumnName);
|
||
if (!originData.rows.length) {
|
||
return;
|
||
}
|
||
if (treeColumnName) {
|
||
changeToObservableTreeData(id, column, data, originData);
|
||
}
|
||
else {
|
||
changeToObservableData(id, column, data, originData);
|
||
}
|
||
}
|
||
exports.createObservableData = createObservableData;
|
||
|
||
|
||
/***/ }),
|
||
/* 29 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.resetSortState = exports.sortByCurrentState = exports.resetSortKey = exports.updateSortKey = exports.emitAfterSort = exports.emitBeforeSort = exports.initSortState = exports.unsort = exports.sort = exports.changeSortState = void 0;
|
||
var tslib_1 = __webpack_require__(1);
|
||
var common_1 = __webpack_require__(0);
|
||
var observable_1 = __webpack_require__(5);
|
||
var sort_1 = __webpack_require__(77);
|
||
var eventBus_1 = __webpack_require__(7);
|
||
var data_1 = __webpack_require__(14);
|
||
var data_2 = __webpack_require__(6);
|
||
var column_1 = __webpack_require__(12);
|
||
var sort_2 = __webpack_require__(45);
|
||
var rowSpan_1 = __webpack_require__(24);
|
||
function createSoretedViewData(rawData) {
|
||
return rawData.map(function (_a) {
|
||
var rowKey = _a.rowKey, sortKey = _a.sortKey, uniqueKey = _a.uniqueKey;
|
||
return ({ rowKey: rowKey, sortKey: sortKey, uniqueKey: uniqueKey });
|
||
});
|
||
}
|
||
function sortData(store) {
|
||
var data = store.data, column = store.column;
|
||
var sortState = data.sortState, rawData = data.rawData, viewData = data.viewData, pageRowRange = data.pageRowRange;
|
||
var columns = sortState.columns;
|
||
var sortedColumns = columns.map(function (sortedColumn) {
|
||
var _a;
|
||
return (tslib_1.__assign(tslib_1.__assign({}, sortedColumn), { comparator: (_a = column.allColumnMap[sortedColumn.columnName]) === null || _a === void 0 ? void 0 : _a.comparator }));
|
||
});
|
||
if (data_2.isScrollPagination(data, true)) {
|
||
// should sort the sliced data which is displayed in viewport in case of client infinite scrolling
|
||
var targetRawData = rawData.slice.apply(rawData, pageRowRange);
|
||
targetRawData.sort(sort_1.sortRawData(sortedColumns));
|
||
var targetViewData = createSoretedViewData(targetRawData);
|
||
data.rawData = targetRawData.concat(rawData.slice(pageRowRange[1]));
|
||
data.viewData = targetViewData.concat(viewData.slice(pageRowRange[1]));
|
||
}
|
||
else {
|
||
rawData.sort(sort_1.sortRawData(sortedColumns));
|
||
data.viewData = createSoretedViewData(rawData);
|
||
}
|
||
}
|
||
function setInitialSortState(data) {
|
||
data.sortState.columns = [{ columnName: 'sortKey', ascending: true }];
|
||
}
|
||
function setSortStateForEmptyState(data) {
|
||
if (!data.sortState.columns.length) {
|
||
setInitialSortState(data);
|
||
}
|
||
}
|
||
function toggleSortAscending(data, index, ascending, sortingType, cancelable) {
|
||
var defaultAscending = sortingType === 'asc';
|
||
if (defaultAscending === ascending && cancelable) {
|
||
data.sortState.columns.splice(index, 1);
|
||
}
|
||
else {
|
||
data.sortState.columns[index].ascending = ascending;
|
||
}
|
||
}
|
||
function changeSingleSortState(data, columnName, ascending, sortingType, cancelable) {
|
||
var sortState = data.sortState;
|
||
var columns = sortState.columns;
|
||
var sortedColumn = { columnName: columnName, ascending: ascending };
|
||
if (columns.length === 1 && columns[0].columnName === columnName) {
|
||
var columnIndex = common_1.findPropIndex('columnName', columnName, sortState.columns);
|
||
toggleSortAscending(data, columnIndex, ascending, sortingType, cancelable);
|
||
}
|
||
else {
|
||
data.sortState.columns = [sortedColumn];
|
||
}
|
||
}
|
||
function changeMultiSortState(data, columnName, ascending, sortingType, cancelable) {
|
||
var sortedColumn = { columnName: columnName, ascending: ascending };
|
||
var sortState = data.sortState;
|
||
var columns = sortState.columns;
|
||
var columnIndex = common_1.findPropIndex('columnName', columnName, columns);
|
||
if (columnIndex === -1) {
|
||
data.sortState.columns = data_2.isInitialSortState(sortState)
|
||
? [sortedColumn]
|
||
: tslib_1.__spreadArrays(columns, [sortedColumn]);
|
||
}
|
||
else {
|
||
toggleSortAscending(data, columnIndex, ascending, sortingType, cancelable);
|
||
}
|
||
}
|
||
function changeSortState(_a, columnName, ascending, multiple, cancelable) {
|
||
var data = _a.data, column = _a.column;
|
||
if (cancelable === void 0) { cancelable = true; }
|
||
if (columnName === 'sortKey') {
|
||
setInitialSortState(data);
|
||
}
|
||
else {
|
||
var sortingType = column.allColumnMap[columnName].sortingType;
|
||
if (multiple) {
|
||
changeMultiSortState(data, columnName, ascending, sortingType, cancelable);
|
||
}
|
||
else {
|
||
changeSingleSortState(data, columnName, ascending, sortingType, cancelable);
|
||
}
|
||
setSortStateForEmptyState(data);
|
||
}
|
||
if (!data.sortState.useClient) {
|
||
observable_1.notify(data, 'sortState');
|
||
}
|
||
}
|
||
exports.changeSortState = changeSortState;
|
||
function applySortedData(store) {
|
||
sortData(store);
|
||
observable_1.notify(store.data, 'sortState');
|
||
data_1.updateRowNumber(store, 0);
|
||
data_1.setCheckedAllRows(store);
|
||
}
|
||
function sort(store, columnName, ascending, multiple, cancelable) {
|
||
if (multiple === void 0) { multiple = false; }
|
||
if (cancelable === void 0) { cancelable = true; }
|
||
var data = store.data, column = store.column;
|
||
var sortState = data.sortState;
|
||
if (column_1.isComplexHeader(column, columnName) || !data_2.isSortable(sortState, column, columnName)) {
|
||
return;
|
||
}
|
||
var cancelSort = sort_2.isCancelSort(store, columnName, ascending, cancelable);
|
||
var gridEvent = emitBeforeSort(store, cancelSort, { columnName: columnName, ascending: ascending, multiple: multiple });
|
||
if (gridEvent.isStopped()) {
|
||
return;
|
||
}
|
||
changeSortState(store, columnName, ascending, multiple, cancelable);
|
||
applySortedData(store);
|
||
emitAfterSort(store, cancelSort, columnName);
|
||
rowSpan_1.updateRowSpan(store);
|
||
}
|
||
exports.sort = sort;
|
||
function unsort(store, columnName) {
|
||
if (columnName === void 0) { columnName = 'sortKey'; }
|
||
var data = store.data, column = store.column;
|
||
var sortState = data.sortState;
|
||
if (column_1.isComplexHeader(column, columnName) || !data_2.isSortable(sortState, column, columnName)) {
|
||
return;
|
||
}
|
||
emitBeforeSort(store, true, { columnName: columnName, multiple: true });
|
||
if (columnName === 'sortKey') {
|
||
setInitialSortState(data);
|
||
}
|
||
else {
|
||
var index = common_1.findPropIndex('columnName', columnName, data.sortState.columns);
|
||
if (index !== -1) {
|
||
data.sortState.columns.splice(index, 1);
|
||
setSortStateForEmptyState(data);
|
||
}
|
||
}
|
||
applySortedData(store);
|
||
emitAfterSort(store, true, columnName);
|
||
rowSpan_1.updateRowSpan(store);
|
||
}
|
||
exports.unsort = unsort;
|
||
function initSortState(data) {
|
||
setInitialSortState(data);
|
||
observable_1.notify(data, 'sortState');
|
||
}
|
||
exports.initSortState = initSortState;
|
||
function emitBeforeSort(store, cancelSort, eventParams) {
|
||
var id = store.id, data = store.data;
|
||
var eventBus = eventBus_1.getEventBus(id);
|
||
var eventType = cancelSort ? 'beforeUnsort' : 'beforeSort';
|
||
var gridEvent = sort_2.createSortEvent(eventType, tslib_1.__assign(tslib_1.__assign({}, eventParams), { sortState: data.sortState }));
|
||
eventBus.trigger(eventType, gridEvent);
|
||
return gridEvent;
|
||
}
|
||
exports.emitBeforeSort = emitBeforeSort;
|
||
function emitAfterSort(store, cancelSort, columnName) {
|
||
var id = store.id, data = store.data;
|
||
var eventBus = eventBus_1.getEventBus(id);
|
||
// @TODO: `sort` event will be deprecated. This event is replaced with `afterSort` event
|
||
var eventTypes = (cancelSort ? ['afterUnsort'] : ['afterSort', 'sort']);
|
||
eventTypes.forEach(function (eventType) {
|
||
var gridEvent = sort_2.createSortEvent(eventType, { columnName: columnName, sortState: data.sortState });
|
||
eventBus.trigger(eventType, gridEvent);
|
||
});
|
||
}
|
||
exports.emitAfterSort = emitAfterSort;
|
||
function updateSortKey(data, sortKey, appended) {
|
||
if (appended === void 0) { appended = true; }
|
||
var incremental = appended ? 1 : -1;
|
||
var rawData = data.rawData, viewData = data.viewData;
|
||
for (var idx = 0; idx < rawData.length; idx += 1) {
|
||
if (rawData[idx].sortKey >= sortKey) {
|
||
rawData[idx].sortKey += incremental;
|
||
viewData[idx].sortKey += incremental;
|
||
}
|
||
}
|
||
if (appended) {
|
||
rawData[sortKey].sortKey = sortKey;
|
||
viewData[sortKey].sortKey = sortKey;
|
||
}
|
||
}
|
||
exports.updateSortKey = updateSortKey;
|
||
function resetSortKey(data, start) {
|
||
var rawData = data.rawData, viewData = data.viewData;
|
||
for (var idx = start; idx < rawData.length; idx += 1) {
|
||
rawData[idx].sortKey = idx;
|
||
viewData[idx].sortKey = idx;
|
||
}
|
||
}
|
||
exports.resetSortKey = resetSortKey;
|
||
function sortByCurrentState(store) {
|
||
var data = store.data;
|
||
if (data_2.isSorted(data)) {
|
||
var _a = data.sortState.columns[0], columnName = _a.columnName, ascending = _a.ascending;
|
||
sort(store, columnName, ascending, true, false);
|
||
}
|
||
}
|
||
exports.sortByCurrentState = sortByCurrentState;
|
||
function resetSortState(store, sortState) {
|
||
var data = store.data, column = store.column;
|
||
if (sortState) {
|
||
var columnName = sortState.columnName, ascending = sortState.ascending, multiple = sortState.multiple;
|
||
var _a = column.allColumnMap[columnName], sortingType = _a.sortingType, sortable = _a.sortable;
|
||
if (sortable) {
|
||
var cancelable = common_1.isUndefined(ascending);
|
||
var nextAscending = cancelable ? sortingType === 'asc' : ascending;
|
||
changeSortState(store, columnName, nextAscending, multiple, cancelable);
|
||
observable_1.notify(data, 'sortState');
|
||
}
|
||
}
|
||
else {
|
||
initSortState(data);
|
||
}
|
||
}
|
||
exports.resetSortState = resetSortState;
|
||
|
||
|
||
/***/ }),
|
||
/* 30 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.composeConditionFn = exports.getFilterConditionFn = exports.getUnixTime = exports.createFilterSelectOption = void 0;
|
||
var tslib_1 = __webpack_require__(1);
|
||
var common_1 = __webpack_require__(0);
|
||
var i18n_1 = tslib_1.__importDefault(__webpack_require__(19));
|
||
var filterSelectOption;
|
||
function createFilterSelectOption() {
|
||
if (!filterSelectOption) {
|
||
filterSelectOption = {
|
||
number: {
|
||
eq: '=',
|
||
lt: '<',
|
||
gt: '>',
|
||
lte: '<=',
|
||
gte: '>=',
|
||
ne: '!=',
|
||
},
|
||
text: {
|
||
contain: i18n_1.default.get('filter.contains'),
|
||
eq: i18n_1.default.get('filter.eq'),
|
||
ne: i18n_1.default.get('filter.ne'),
|
||
start: i18n_1.default.get('filter.start'),
|
||
end: i18n_1.default.get('filter.end'),
|
||
},
|
||
date: {
|
||
eq: i18n_1.default.get('filter.eq'),
|
||
ne: i18n_1.default.get('filter.ne'),
|
||
after: i18n_1.default.get('filter.after'),
|
||
afterEq: i18n_1.default.get('filter.afterEq'),
|
||
before: i18n_1.default.get('filter.before'),
|
||
beforeEq: i18n_1.default.get('filter.beforeEq'),
|
||
},
|
||
};
|
||
}
|
||
return filterSelectOption;
|
||
}
|
||
exports.createFilterSelectOption = createFilterSelectOption;
|
||
function getUnixTime(value) {
|
||
return parseInt((new Date(String(value)).getTime() / 1000).toFixed(0), 10);
|
||
}
|
||
exports.getUnixTime = getUnixTime;
|
||
function getPredicateWithType(code, type, inputValue) {
|
||
var convertFn = {
|
||
number: Number,
|
||
text: String,
|
||
select: String,
|
||
date: getUnixTime,
|
||
}[type];
|
||
return code === 'eq'
|
||
? function (cellValue) { return convertFn(cellValue) === convertFn(inputValue); }
|
||
: function (cellValue) { return convertFn(cellValue) !== convertFn(inputValue); };
|
||
}
|
||
function getFilterConditionFn(code, inputValue, type) {
|
||
switch (code) {
|
||
case 'eq':
|
||
case 'ne':
|
||
return getPredicateWithType(code, type, inputValue);
|
||
case 'lt':
|
||
return function (cellValue) { return Number(cellValue) < Number(inputValue); };
|
||
case 'gt':
|
||
return function (cellValue) { return Number(cellValue) > Number(inputValue); };
|
||
case 'lte':
|
||
return function (cellValue) { return Number(cellValue) <= Number(inputValue); };
|
||
case 'gte':
|
||
return function (cellValue) { return Number(cellValue) >= Number(inputValue); };
|
||
case 'contain':
|
||
return function (cellValue) {
|
||
return common_1.isString(cellValue) && common_1.isString(inputValue) && cellValue.indexOf(inputValue) !== -1;
|
||
};
|
||
case 'start':
|
||
return function (cellValue) {
|
||
return common_1.isString(cellValue) && common_1.isString(inputValue) && common_1.startsWith(inputValue, cellValue);
|
||
};
|
||
case 'end':
|
||
return function (cellValue) {
|
||
return common_1.isString(cellValue) && common_1.isString(inputValue) && common_1.endsWith(inputValue, cellValue);
|
||
};
|
||
case 'after':
|
||
return function (cellValue) { return getUnixTime(cellValue) > getUnixTime(inputValue); };
|
||
case 'afterEq':
|
||
return function (cellValue) { return getUnixTime(cellValue) >= getUnixTime(inputValue); };
|
||
case 'before':
|
||
return function (cellValue) { return getUnixTime(cellValue) < getUnixTime(inputValue); };
|
||
case 'beforeEq':
|
||
return function (cellValue) { return getUnixTime(cellValue) <= getUnixTime(inputValue); };
|
||
default:
|
||
throw new Error('code not available.');
|
||
}
|
||
}
|
||
exports.getFilterConditionFn = getFilterConditionFn;
|
||
function composeConditionFn(fns, operator) {
|
||
return function (value) {
|
||
return fns.reduce(function (acc, fn) {
|
||
return operator === 'OR' ? acc || fn(value) : acc && fn(value);
|
||
}, operator !== 'OR');
|
||
};
|
||
}
|
||
exports.composeConditionFn = composeConditionFn;
|
||
|
||
|
||
/***/ }),
|
||
/* 31 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.moveTreeRow = exports.removeTreeRow = exports.appendTreeRow = exports.changeTreeRowsCheckedState = exports.collapseAll = exports.collapseByRowKey = exports.expandAll = exports.expandByRowKey = exports.removeExpandedAttr = void 0;
|
||
var tslib_1 = __webpack_require__(1);
|
||
var data_1 = __webpack_require__(15);
|
||
var data_2 = __webpack_require__(6);
|
||
var observable_1 = __webpack_require__(5);
|
||
var instance_1 = __webpack_require__(8);
|
||
var data_3 = __webpack_require__(14);
|
||
var tree_1 = __webpack_require__(21);
|
||
var eventBus_1 = __webpack_require__(7);
|
||
var gridEvent_1 = tslib_1.__importDefault(__webpack_require__(9));
|
||
var tree_2 = __webpack_require__(20);
|
||
var common_1 = __webpack_require__(0);
|
||
var dom_1 = __webpack_require__(2);
|
||
var lazyObservable_1 = __webpack_require__(28);
|
||
var column_1 = __webpack_require__(12);
|
||
var data_4 = __webpack_require__(23);
|
||
var constant_1 = __webpack_require__(11);
|
||
var column_2 = __webpack_require__(32);
|
||
var computedFontStyle = '';
|
||
function changeExpandedAttr(row, expanded) {
|
||
var tree = row._attributes.tree;
|
||
if (tree) {
|
||
row._attributes.expanded = expanded;
|
||
tree.expanded = expanded;
|
||
}
|
||
}
|
||
function changeHiddenAttr(row, hidden) {
|
||
var tree = row._attributes.tree;
|
||
if (tree) {
|
||
tree.hidden = hidden;
|
||
}
|
||
}
|
||
function expand(store, row, recursive) {
|
||
var rowKey = row.rowKey;
|
||
var eventBus = eventBus_1.getEventBus(store.id);
|
||
var gridEvent = new gridEvent_1.default({ rowKey: rowKey });
|
||
/**
|
||
* Occurs when the row having child rows is expanded
|
||
* @event Grid#expand
|
||
* @type {module:event/gridEvent}
|
||
* @property {number|string} rowKey - rowKey of the expanded row
|
||
* @property {Grid} instance - Current grid instance
|
||
*/
|
||
eventBus.trigger('expand', gridEvent);
|
||
if (gridEvent.isStopped()) {
|
||
return;
|
||
}
|
||
var data = store.data, rowCoords = store.rowCoords, dimension = store.dimension, column = store.column, id = store.id, viewport = store.viewport, columnCoords = store.columnCoords;
|
||
var heights = rowCoords.heights;
|
||
changeExpandedAttr(row, true);
|
||
var childRowKeys = tree_1.getChildRowKeys(row);
|
||
updateTreeColumnWidth(childRowKeys, column, columnCoords, dimension, data.rawData);
|
||
childRowKeys.forEach(function (childRowKey) {
|
||
var childRow = data_2.findRowByRowKey(data, column, id, childRowKey);
|
||
if (!childRow) {
|
||
return;
|
||
}
|
||
changeHiddenAttr(childRow, false);
|
||
if (!tree_1.isLeaf(childRow) && (tree_1.isExpanded(childRow) || recursive)) {
|
||
expand(store, childRow, recursive);
|
||
}
|
||
var index = data_2.findIndexByRowKey(data, column, id, childRowKey);
|
||
heights[index] = data_2.getRowHeight(childRow, dimension.rowHeight);
|
||
});
|
||
if (childRowKeys.length) {
|
||
observable_1.notify(rowCoords, 'heights');
|
||
observable_1.notify(viewport, 'rowRange');
|
||
}
|
||
}
|
||
function updateTreeColumnWidth(childRowKeys, column, columnCoords, dimension, rawData) {
|
||
var visibleColumnsBySideWithRowHeader = column.visibleColumnsBySideWithRowHeader, treeIcon = column.treeIcon, allColumnMap = column.allColumnMap, treeIndentWidth = column.treeIndentWidth;
|
||
var treeColumnName = column.treeColumnName;
|
||
var treeColumnSide = column_1.getColumnSide(column, treeColumnName);
|
||
var treeColumnIndex = common_1.findPropIndex('name', treeColumnName, column.visibleColumnsBySide[treeColumnSide]);
|
||
var columnInfo = visibleColumnsBySideWithRowHeader[treeColumnSide][treeColumnIndex];
|
||
// @TODO: auto resizing is operated with 'autoResizing' option
|
||
// 'resizable' condition should be deprecated in next version
|
||
if (columnInfo.resizable || columnInfo.autoResizing) {
|
||
var maxWidth = getChildTreeNodeMaxWidth(childRowKeys, rawData, columnInfo, treeIndentWidth, treeIcon);
|
||
var prevWidth = columnCoords.widths[treeColumnSide][treeColumnIndex] + dimension.cellBorderWidth;
|
||
allColumnMap[treeColumnName].baseWidth = Math.max(prevWidth, maxWidth);
|
||
allColumnMap[treeColumnName].fixedWidth = true;
|
||
}
|
||
}
|
||
function getChildTreeNodeMaxWidth(childRowKeys, rawData, column, treeIndentWidth, useIcon) {
|
||
var maxLength = 0;
|
||
computedFontStyle = computedFontStyle || dom_1.getComputedFontStyle('tree-wrapper-relative');
|
||
var getMaxWidth = childRowKeys.reduce(function (acc, rowKey) {
|
||
var row = common_1.findProp('rowKey', rowKey, rawData);
|
||
var formattedValue = data_4.createFormattedValue(row, column);
|
||
if (formattedValue.length > maxLength) {
|
||
maxLength = formattedValue.length;
|
||
acc = function () {
|
||
return dom_1.getTextWidth(formattedValue, computedFontStyle) +
|
||
tree_2.getTreeIndentWidth(tree_1.getDepth(rawData, row), treeIndentWidth, useIcon) +
|
||
constant_1.TREE_CELL_HORIZONTAL_PADDING;
|
||
};
|
||
}
|
||
return acc;
|
||
}, function () { return 0; });
|
||
return getMaxWidth();
|
||
}
|
||
function collapse(store, row, recursive) {
|
||
var rowKey = row.rowKey;
|
||
var eventBus = eventBus_1.getEventBus(store.id);
|
||
var gridEvent = new gridEvent_1.default({ rowKey: rowKey });
|
||
/**
|
||
* Occurs when the row having child rows is collapsed
|
||
* @event Grid#collapse
|
||
* @type {module:event/gridEvent}
|
||
* @property {number|string} rowKey - rowKey of the collapsed row
|
||
* @property {Grid} instance - Current grid instance
|
||
*/
|
||
eventBus.trigger('collapse', gridEvent);
|
||
if (gridEvent.isStopped()) {
|
||
return;
|
||
}
|
||
var data = store.data, rowCoords = store.rowCoords, column = store.column, id = store.id;
|
||
var heights = rowCoords.heights;
|
||
changeExpandedAttr(row, false);
|
||
var childRowKeys = tree_1.getChildRowKeys(row);
|
||
childRowKeys.forEach(function (childRowKey) {
|
||
var childRow = data_2.findRowByRowKey(data, column, id, childRowKey);
|
||
if (!childRow) {
|
||
return;
|
||
}
|
||
changeHiddenAttr(childRow, true);
|
||
if (!tree_1.isLeaf(childRow)) {
|
||
if (recursive) {
|
||
collapse(store, childRow, recursive);
|
||
}
|
||
else {
|
||
tree_1.getDescendantRows(store, childRowKey).forEach(function (_a) {
|
||
var descendantRowKey = _a.rowKey;
|
||
var index = data_2.findIndexByRowKey(data, column, id, descendantRowKey);
|
||
changeHiddenAttr(data.filteredRawData[index], true);
|
||
heights[index] = 0;
|
||
});
|
||
}
|
||
}
|
||
var index = data_2.findIndexByRowKey(data, column, id, childRowKey);
|
||
heights[index] = 0;
|
||
});
|
||
observable_1.notify(rowCoords, 'heights');
|
||
}
|
||
function setCheckedState(row, state) {
|
||
if (row && data_3.isUpdatableRowAttr('checked', row._attributes.checkDisabled)) {
|
||
row._attributes.checked = state;
|
||
}
|
||
}
|
||
function changeAncestorRowsCheckedState(store, rowKey) {
|
||
var data = store.data, column = store.column, id = store.id;
|
||
var rawData = data.rawData;
|
||
var row = data_2.findRowByRowKey(data, column, id, rowKey);
|
||
if (row) {
|
||
tree_1.traverseAncestorRows(rawData, row, function (parentRow) {
|
||
var childRowKeys = tree_1.getChildRowKeys(parentRow);
|
||
var checkedChildRows = childRowKeys.filter(function (childRowKey) {
|
||
var childRow = data_2.findRowByRowKey(data, column, id, childRowKey);
|
||
return !!childRow && childRow._attributes.checked;
|
||
});
|
||
var checked = childRowKeys.length === checkedChildRows.length;
|
||
setCheckedState(parentRow, checked);
|
||
});
|
||
}
|
||
}
|
||
function changeDescendantRowsCheckedState(store, rowKey, state) {
|
||
var data = store.data, column = store.column, id = store.id;
|
||
var rawData = data.rawData;
|
||
var row = data_2.findRowByRowKey(data, column, id, rowKey);
|
||
if (row) {
|
||
tree_1.traverseDescendantRows(rawData, row, function (childRow) {
|
||
setCheckedState(childRow, state);
|
||
});
|
||
}
|
||
}
|
||
function removeChildRowKey(row, rowKey) {
|
||
var tree = row._attributes.tree;
|
||
if (tree) {
|
||
common_1.removeArrayItem(rowKey, tree.childRowKeys);
|
||
if (row._children) {
|
||
var index = common_1.findPropIndex('rowKey', rowKey, row._children);
|
||
if (index !== -1) {
|
||
row._children.splice(index, 1);
|
||
}
|
||
}
|
||
if (!tree.childRowKeys.length) {
|
||
row._leaf = true;
|
||
}
|
||
observable_1.notify(tree, 'childRowKeys');
|
||
}
|
||
}
|
||
function removeExpandedAttr(row) {
|
||
var tree = row._attributes.tree;
|
||
if (tree) {
|
||
tree.expanded = false;
|
||
}
|
||
}
|
||
exports.removeExpandedAttr = removeExpandedAttr;
|
||
function expandByRowKey(store, rowKey, recursive) {
|
||
var data = store.data, column = store.column, id = store.id;
|
||
var row = data_2.findRowByRowKey(data, column, id, rowKey);
|
||
if (row) {
|
||
expand(store, row, recursive);
|
||
}
|
||
}
|
||
exports.expandByRowKey = expandByRowKey;
|
||
function expandAll(store) {
|
||
store.data.rawData.forEach(function (row) {
|
||
if (tree_1.isRootChildRow(row) && !tree_1.isLeaf(row)) {
|
||
expand(store, row, true);
|
||
}
|
||
});
|
||
}
|
||
exports.expandAll = expandAll;
|
||
function collapseByRowKey(store, rowKey, recursive) {
|
||
var data = store.data, column = store.column, id = store.id;
|
||
var row = data_2.findRowByRowKey(data, column, id, rowKey);
|
||
if (row) {
|
||
collapse(store, row, recursive);
|
||
}
|
||
}
|
||
exports.collapseByRowKey = collapseByRowKey;
|
||
function collapseAll(store) {
|
||
store.data.rawData.forEach(function (row) {
|
||
if (tree_1.isRootChildRow(row) && !tree_1.isLeaf(row)) {
|
||
collapse(store, row, true);
|
||
}
|
||
});
|
||
}
|
||
exports.collapseAll = collapseAll;
|
||
function changeTreeRowsCheckedState(store, rowKey, state) {
|
||
var _a = store.column, treeColumnName = _a.treeColumnName, treeCascadingCheckbox = _a.treeCascadingCheckbox;
|
||
if (treeColumnName && treeCascadingCheckbox) {
|
||
changeDescendantRowsCheckedState(store, rowKey, state);
|
||
changeAncestorRowsCheckedState(store, rowKey);
|
||
}
|
||
}
|
||
exports.changeTreeRowsCheckedState = changeTreeRowsCheckedState;
|
||
// @TODO: consider tree disabled state with cascading
|
||
function appendTreeRow(store, row, options) {
|
||
var data = store.data, column = store.column, rowCoords = store.rowCoords, dimension = store.dimension, id = store.id;
|
||
var rawData = data.rawData, viewData = data.viewData;
|
||
var heights = rowCoords.heights;
|
||
var parentRowKey = options.parentRowKey, offset = options.offset, movingRow = options.movingRow;
|
||
var parentRow = data_2.findRowByRowKey(data, column, id, parentRowKey);
|
||
var startIdx = tree_1.getStartIndexToAppendRow(store, parentRow, offset);
|
||
var rawRows = tree_2.flattenTreeData(id, [row], parentRow, column, {
|
||
keyColumnName: column.keyColumnName,
|
||
offset: offset,
|
||
});
|
||
var modificationType = movingRow ? 'UPDATE' : 'CREATE';
|
||
lazyObservable_1.fillMissingColumnData(column, rawRows);
|
||
var viewRows = rawRows.map(function (rawRow) { return data_1.createViewRow(id, rawRow, rawData, column); });
|
||
common_1.silentSplice.apply(void 0, tslib_1.__spreadArrays([rawData, startIdx, 0], rawRows));
|
||
common_1.silentSplice.apply(void 0, tslib_1.__spreadArrays([viewData, startIdx, 0], viewRows));
|
||
var rowHeights = rawRows.map(function (rawRow) {
|
||
changeTreeRowsCheckedState(store, rawRow.rowKey, rawRow._attributes.checked);
|
||
instance_1.getDataManager(id).push(modificationType, rawRow, true);
|
||
return data_2.getRowHeight(rawRow, dimension.rowHeight);
|
||
});
|
||
observable_1.notify(data, 'rawData', 'filteredRawData', 'viewData', 'filteredViewData');
|
||
heights.splice.apply(heights, tslib_1.__spreadArrays([startIdx, 0], rowHeights));
|
||
postUpdateAfterManipulation(store, startIdx, rawRows);
|
||
}
|
||
exports.appendTreeRow = appendTreeRow;
|
||
// @TODO: consider tree disabled state with cascading
|
||
function removeTreeRow(store, rowKey, movingRow) {
|
||
var data = store.data, rowCoords = store.rowCoords, id = store.id, column = store.column;
|
||
var rawData = data.rawData, viewData = data.viewData;
|
||
var heights = rowCoords.heights;
|
||
var parentRow = tree_1.getParentRow(store, rowKey);
|
||
var modificationType = movingRow ? 'UPDATE' : 'DELETE';
|
||
data_3.uncheck(store, rowKey);
|
||
if (parentRow) {
|
||
removeChildRowKey(parentRow, rowKey);
|
||
if (!tree_1.getChildRowKeys(parentRow).length) {
|
||
removeExpandedAttr(parentRow);
|
||
}
|
||
}
|
||
var startIdx = data_2.findIndexByRowKey(data, column, id, rowKey);
|
||
var deleteCount = tree_1.getDescendantRows(store, rowKey).length + 1;
|
||
var removedRows = [];
|
||
observable_1.batchObserver(function () {
|
||
removedRows = rawData.splice(startIdx, deleteCount);
|
||
});
|
||
viewData.splice(startIdx, deleteCount);
|
||
heights.splice(startIdx, deleteCount);
|
||
for (var i = removedRows.length - 1; i >= 0; i -= 1) {
|
||
instance_1.getDataManager(id).push(modificationType, removedRows[i]);
|
||
}
|
||
postUpdateAfterManipulation(store, startIdx, rawData);
|
||
}
|
||
exports.removeTreeRow = removeTreeRow;
|
||
function postUpdateAfterManipulation(store, rowIndex, rows) {
|
||
data_3.setLoadingState(store, data_2.getLoadingState(store.data.rawData));
|
||
data_3.updateRowNumber(store, rowIndex);
|
||
data_3.setCheckedAllRows(store);
|
||
column_2.setAutoResizingColumnWidths(store, rows);
|
||
}
|
||
function moveTreeRow(store, rowKey, targetIndex, options) {
|
||
var data = store.data, column = store.column, id = store.id;
|
||
var rawData = data.rawData;
|
||
var targetRow = rawData[targetIndex];
|
||
if (!targetRow || data_2.isSorted(data) || data_2.isFiltered(data)) {
|
||
return;
|
||
}
|
||
var currentIndex = data_2.findIndexByRowKey(data, column, id, rowKey, false);
|
||
var row = rawData[currentIndex];
|
||
if (currentIndex === -1 ||
|
||
currentIndex === targetIndex ||
|
||
row._attributes.disabled ||
|
||
(targetRow._attributes.disabled && options.appended)) {
|
||
return;
|
||
}
|
||
var childRows = tree_1.getDescendantRows(store, rowKey);
|
||
var minIndex = Math.min(currentIndex, targetIndex);
|
||
var moveToChild = common_1.some(function (childRow) { return childRow.rowKey === targetRow.rowKey; }, childRows);
|
||
if (!moveToChild) {
|
||
removeTreeRow(store, rowKey, true);
|
||
var originRow = observable_1.getOriginObject(row);
|
||
instance_1.getDataManager(id).push('UPDATE', targetRow, true);
|
||
instance_1.getDataManager(id).push('UPDATE', row, true);
|
||
if (options.appended) {
|
||
appendTreeRow(store, originRow, { parentRowKey: targetRow.rowKey, movingRow: true });
|
||
}
|
||
else {
|
||
var parentRowKey = targetRow._attributes.tree.parentRowKey;
|
||
var parentIndex = data_2.findIndexByRowKey(data, column, id, parentRowKey);
|
||
var offset = targetIndex > currentIndex ? targetIndex - (childRows.length + 1) : targetIndex;
|
||
// calculate the offset based on parent row
|
||
if (parentIndex !== -1) {
|
||
var parentRow = rawData[parentIndex];
|
||
offset = parentRow._attributes.tree.childRowKeys.indexOf(targetRow.rowKey);
|
||
}
|
||
// to resolve the index for moving last index
|
||
if (options.moveToLast) {
|
||
parentRowKey = null;
|
||
offset = rawData.length;
|
||
}
|
||
appendTreeRow(store, originRow, { parentRowKey: parentRowKey, offset: offset, movingRow: true });
|
||
}
|
||
postUpdateAfterManipulation(store, minIndex);
|
||
}
|
||
}
|
||
exports.moveTreeRow = moveTreeRow;
|
||
|
||
|
||
/***/ }),
|
||
/* 32 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.moveColumn = exports.setColumnWidthsByText = exports.setAutoResizingColumnWidths = exports.changeColumnHeadersByName = exports.setComplexColumnHeaders = exports.showColumn = exports.hideColumn = exports.resetColumnWidths = exports.setColumns = exports.setColumnWidth = exports.setFrozenColumnCount = void 0;
|
||
var tslib_1 = __webpack_require__(1);
|
||
var column_1 = __webpack_require__(33);
|
||
var data_1 = __webpack_require__(15);
|
||
var gridEvent_1 = tslib_1.__importDefault(__webpack_require__(9));
|
||
var eventBus_1 = __webpack_require__(7);
|
||
var focus_1 = __webpack_require__(18);
|
||
var observable_1 = __webpack_require__(5);
|
||
var sort_1 = __webpack_require__(29);
|
||
var filter_1 = __webpack_require__(35);
|
||
var selection_1 = __webpack_require__(16);
|
||
var common_1 = __webpack_require__(0);
|
||
var viewport_1 = __webpack_require__(25);
|
||
var dom_1 = __webpack_require__(2);
|
||
var data_2 = __webpack_require__(23);
|
||
var tree_1 = __webpack_require__(20);
|
||
var tree_2 = __webpack_require__(21);
|
||
var constant_1 = __webpack_require__(11);
|
||
var rowSpan_1 = __webpack_require__(24);
|
||
var column_2 = __webpack_require__(10);
|
||
var column_3 = __webpack_require__(12);
|
||
function setFrozenColumnCount(_a, count) {
|
||
var column = _a.column;
|
||
column.frozenCount = count;
|
||
}
|
||
exports.setFrozenColumnCount = setFrozenColumnCount;
|
||
function getCellWidthToBeResized(columns, range, resizeAmount, startWidths) {
|
||
var widths = [];
|
||
var startIdx = range[0], endIdx = range[1];
|
||
var rangeLength = endIdx - startIdx + 1;
|
||
var delta = resizeAmount / rangeLength;
|
||
for (var idx = 0; idx < rangeLength; idx += 1) {
|
||
var columnIdx = startIdx + idx;
|
||
var minWidth = columns[columnIdx].minWidth;
|
||
var width = Math.max(startWidths[idx] + delta, minWidth);
|
||
widths.push(width);
|
||
}
|
||
return widths;
|
||
}
|
||
function setColumnWidth(_a, side, range, resizeAmount, startWidths) {
|
||
var column = _a.column, id = _a.id;
|
||
var eventBus = eventBus_1.getEventBus(id);
|
||
var columns = column.visibleColumnsBySideWithRowHeader[side];
|
||
var startIdx = range[0], endIdx = range[1];
|
||
var resizedColumns = [];
|
||
var widths = getCellWidthToBeResized(columns, range, resizeAmount, startWidths);
|
||
for (var idx = startIdx; idx <= endIdx; idx += 1) {
|
||
resizedColumns.push({
|
||
columnName: columns[idx].name,
|
||
width: widths[idx - startIdx],
|
||
});
|
||
}
|
||
var gridEvent = new gridEvent_1.default({ resizedColumns: resizedColumns });
|
||
/**
|
||
* Occurs when column is resized
|
||
* @event Grid#columnResize
|
||
* @property {Array} resizedColumns - state about resized columns
|
||
* @property {number} resizedColumns.columnName - columnName of the target cell
|
||
* @property {number} resizedColumns.width - width of the resized column
|
||
* @property {Grid} instance - Current grid instance
|
||
*/
|
||
eventBus.trigger('columnResize', gridEvent);
|
||
if (!gridEvent.isStopped()) {
|
||
widths.forEach(function (width, idx) {
|
||
var columnIdx = startIdx + idx;
|
||
var item = columns[columnIdx];
|
||
item.baseWidth = width;
|
||
item.fixedWidth = true;
|
||
});
|
||
}
|
||
}
|
||
exports.setColumnWidth = setColumnWidth;
|
||
function setColumns(store, optColumns) {
|
||
var column = store.column, data = store.data, id = store.id;
|
||
var _a = column.dataForColumnCreation, columnOptions = _a.columnOptions, copyOptions = _a.copyOptions, treeColumnOptions = _a.treeColumnOptions, rowHeaders = _a.rowHeaders;
|
||
var relationColumns = optColumns.reduce(function (acc, _a) {
|
||
var _b = _a.relations, relations = _b === void 0 ? [] : _b;
|
||
return acc.concat(column_1.createRelationColumns(relations)).filter(function (columnName, index) {
|
||
var foundIndex = acc.indexOf(columnName);
|
||
return foundIndex === -1 || foundIndex === index;
|
||
});
|
||
}, []);
|
||
var columnInfos = optColumns.map(function (optColumn) {
|
||
return column_1.createColumn(optColumn, columnOptions, relationColumns, copyOptions, treeColumnOptions, column.columnHeaderInfo, !!optColumn.disabled);
|
||
});
|
||
var dataCreationKey = data_1.generateDataCreationKey();
|
||
viewport_1.initScrollPosition(store);
|
||
focus_1.initFocus(store);
|
||
selection_1.initSelection(store);
|
||
column.allColumns = tslib_1.__spreadArrays(rowHeaders, columnInfos);
|
||
data.viewData.forEach(function (viewRow) {
|
||
if (Array.isArray(viewRow.__unobserveFns__)) {
|
||
viewRow.__unobserveFns__.forEach(function (fn) { return fn(); });
|
||
}
|
||
});
|
||
data.rawData = data.rawData.map(function (row) {
|
||
var newRow = tslib_1.__assign(tslib_1.__assign({}, column.emptyRow), row);
|
||
newRow.uniqueKey = dataCreationKey + "-" + row.rowKey;
|
||
return newRow;
|
||
});
|
||
data.viewData = data.rawData.map(function (row) {
|
||
return observable_1.isObservable(row)
|
||
? data_1.createViewRow(id, row, data.rawData, column)
|
||
: { rowKey: row.rowKey, sortKey: row.sortKey, uniqueKey: row.uniqueKey };
|
||
});
|
||
filter_1.initFilter(store);
|
||
sort_1.unsort(store);
|
||
setColumnWidthsByText(store);
|
||
}
|
||
exports.setColumns = setColumns;
|
||
function resetColumnWidths(_a, widths) {
|
||
var column = _a.column;
|
||
column.visibleColumns.forEach(function (columnInfo, idx) {
|
||
columnInfo.baseWidth = widths[idx];
|
||
columnInfo.autoResizing = false;
|
||
});
|
||
}
|
||
exports.resetColumnWidths = resetColumnWidths;
|
||
function setColumnsHiddenValue(column, columnName, hidden) {
|
||
var allColumnMap = column.allColumnMap, complexColumnHeaders = column.complexColumnHeaders;
|
||
if (complexColumnHeaders.length) {
|
||
var complexColumn = common_1.findProp('name', columnName, complexColumnHeaders);
|
||
if (complexColumn) {
|
||
complexColumn.childNames.forEach(function (childName) {
|
||
allColumnMap[childName].hidden = hidden;
|
||
});
|
||
return;
|
||
}
|
||
}
|
||
allColumnMap[columnName].hidden = hidden;
|
||
}
|
||
function hideColumn(store, columnName) {
|
||
var column = store.column, focus = store.focus;
|
||
if (focus.columnName === columnName) {
|
||
focus_1.initFocus(store);
|
||
}
|
||
selection_1.initSelection(store);
|
||
filter_1.unfilter(store, columnName);
|
||
sort_1.unsort(store, columnName);
|
||
setColumnsHiddenValue(column, columnName, true);
|
||
}
|
||
exports.hideColumn = hideColumn;
|
||
function showColumn(store, columnName) {
|
||
setColumnsHiddenValue(store.column, columnName, false);
|
||
rowSpan_1.updateRowSpan(store);
|
||
}
|
||
exports.showColumn = showColumn;
|
||
function setComplexColumnHeaders(store, complexColumnHeaders) {
|
||
store.column.complexColumnHeaders = complexColumnHeaders;
|
||
}
|
||
exports.setComplexColumnHeaders = setComplexColumnHeaders;
|
||
function changeColumnHeadersByName(_a, columnsMap) {
|
||
var column = _a.column;
|
||
var complexColumnHeaders = column.complexColumnHeaders, allColumnMap = column.allColumnMap;
|
||
Object.keys(columnsMap).forEach(function (columnName) {
|
||
var col = allColumnMap[columnName];
|
||
if (col) {
|
||
col.header = columnsMap[columnName];
|
||
}
|
||
if (complexColumnHeaders.length) {
|
||
var complexCol = common_1.findProp('name', columnName, complexColumnHeaders);
|
||
if (complexCol) {
|
||
complexCol.header = columnsMap[columnName];
|
||
}
|
||
}
|
||
});
|
||
observable_1.notify(column, 'allColumns');
|
||
}
|
||
exports.changeColumnHeadersByName = changeColumnHeadersByName;
|
||
function setAutoResizingColumnWidths(store, targetData) {
|
||
var autoResizingColumn = store.column.autoResizingColumn;
|
||
var rawData = targetData || store.data.rawData;
|
||
if (!rawData.length || !autoResizingColumn.length) {
|
||
return;
|
||
}
|
||
data_2.initMaxTextMap();
|
||
var maxTextMap = data_2.getMaxTextMap();
|
||
rawData.forEach(function (row) {
|
||
autoResizingColumn.forEach(function (columnInfo) {
|
||
var name = columnInfo.name;
|
||
var formattedValue = data_2.createFormattedValue(row, columnInfo);
|
||
if (!maxTextMap[name] || maxTextMap[name].formattedValue.length < formattedValue.length) {
|
||
data_2.setMaxColumnTextMap(name, formattedValue, row);
|
||
}
|
||
});
|
||
});
|
||
setColumnWidthsByText(store);
|
||
}
|
||
exports.setAutoResizingColumnWidths = setAutoResizingColumnWidths;
|
||
function setColumnWidthsByText(store) {
|
||
var autoResizingColumn = store.column.autoResizingColumn;
|
||
if (store.data.rawData.length && autoResizingColumn.length) {
|
||
autoResizingColumn.forEach(function (_a) {
|
||
var name = _a.name;
|
||
setColumnWidthByText(store, name);
|
||
});
|
||
}
|
||
}
|
||
exports.setColumnWidthsByText = setColumnWidthsByText;
|
||
function setColumnWidthByText(_a, columnName) {
|
||
var data = _a.data, column = _a.column;
|
||
var allColumnMap = column.allColumnMap, treeColumnName = column.treeColumnName, treeIcon = column.treeIcon, treeIndentWidth = column.treeIndentWidth;
|
||
var maxTextMap = data_2.getMaxTextMap();
|
||
var _b = maxTextMap[columnName], formattedValue = _b.formattedValue, row = _b.row;
|
||
var width = dom_1.getTextWidth(formattedValue, dom_1.getComputedFontStyle(treeColumnName ? 'tree-wrapper-relative' : 'cell'));
|
||
if (treeColumnName) {
|
||
width +=
|
||
tree_1.getTreeIndentWidth(tree_2.getDepth(data.rawData, row), treeIndentWidth, treeIcon) +
|
||
constant_1.TREE_CELL_HORIZONTAL_PADDING;
|
||
}
|
||
allColumnMap[columnName].baseWidth = Math.max(allColumnMap[columnName].minWidth, width);
|
||
allColumnMap[columnName].fixedWidth = true;
|
||
}
|
||
function moveColumn(store, columnName, targetIndex) {
|
||
var column = store.column;
|
||
var allColumns = column.allColumns;
|
||
if (!column_3.isAllColumnsVisible(column) || column.complexColumnHeaders.length > 0) {
|
||
return;
|
||
}
|
||
var originIndex = common_1.findIndex(function (_a) {
|
||
var name = _a.name;
|
||
return name === columnName;
|
||
}, allColumns);
|
||
var columnToMove = allColumns[originIndex];
|
||
var targetColumnName = allColumns[targetIndex].name;
|
||
if (columnName === targetColumnName ||
|
||
column_2.isRowHeader(targetColumnName) ||
|
||
tree_2.isTreeColumnName(column, targetColumnName)) {
|
||
return;
|
||
}
|
||
focus_1.setFocusInfo(store, null, null, false);
|
||
selection_1.initSelection(store);
|
||
allColumns.splice(originIndex, 1);
|
||
allColumns.splice(targetIndex, 0, columnToMove);
|
||
}
|
||
exports.moveColumn = moveColumn;
|
||
|
||
|
||
/***/ }),
|
||
/* 33 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.create = exports.createColumn = exports.createRelationColumns = exports.createColumnFilterOption = exports.validateRelationColumn = void 0;
|
||
var tslib_1 = __webpack_require__(1);
|
||
var observable_1 = __webpack_require__(5);
|
||
var column_1 = __webpack_require__(10);
|
||
var common_1 = __webpack_require__(0);
|
||
var default_1 = __webpack_require__(67);
|
||
var manager_1 = __webpack_require__(68);
|
||
var rowHeaderInput_1 = __webpack_require__(75);
|
||
var rowHeaderDraggable_1 = __webpack_require__(76);
|
||
var constant_1 = __webpack_require__(11);
|
||
var DEF_ROW_HEADER_INPUT = '<input type="checkbox" name="_checked" />';
|
||
var ROW_HEADER = 40;
|
||
var COLUMN = 50;
|
||
var rowHeadersMap = {
|
||
rowNum: '_number',
|
||
checkbox: '_checked',
|
||
draggable: '_draggable',
|
||
};
|
||
function validateRelationColumn(columnInfos) {
|
||
var checked = {};
|
||
function checkCircularRelation(column, relations) {
|
||
var name = column.name, relationMap = column.relationMap;
|
||
relations.push(name);
|
||
checked[name] = true;
|
||
if (common_1.uniq(relations).length !== relations.length) {
|
||
throw new Error('Cannot create circular reference between relation columns');
|
||
}
|
||
if (!common_1.isUndefined(relationMap)) {
|
||
Object.keys(relationMap).forEach(function (targetName) {
|
||
var targetColumn = common_1.findProp('name', targetName, columnInfos);
|
||
// copy the 'relation' array to prevent to push all relation column into same array
|
||
checkCircularRelation(targetColumn, tslib_1.__spreadArrays(relations));
|
||
});
|
||
}
|
||
}
|
||
columnInfos.forEach(function (column) {
|
||
if (!checked[column.name]) {
|
||
checkCircularRelation(column, []);
|
||
}
|
||
});
|
||
}
|
||
exports.validateRelationColumn = validateRelationColumn;
|
||
function createBuiltInEditorOptions(editorType, options) {
|
||
var editInfo = manager_1.editorMap[editorType];
|
||
return {
|
||
type: editInfo[0],
|
||
options: tslib_1.__assign(tslib_1.__assign({}, editInfo[1]), options),
|
||
};
|
||
}
|
||
function createEditorOptions(editor) {
|
||
if (common_1.isFunction(editor)) {
|
||
return { type: editor };
|
||
}
|
||
if (common_1.isString(editor)) {
|
||
return createBuiltInEditorOptions(editor);
|
||
}
|
||
if (common_1.isObject(editor)) {
|
||
return common_1.isString(editor.type)
|
||
? createBuiltInEditorOptions(editor.type, editor.options)
|
||
: editor;
|
||
}
|
||
return null;
|
||
}
|
||
function createRendererOptions(renderer) {
|
||
if (common_1.isFunction(renderer)) {
|
||
return { type: renderer };
|
||
}
|
||
if (common_1.isObject(renderer) && !common_1.isFunction(renderer) && common_1.isFunction(renderer.type)) {
|
||
return renderer;
|
||
}
|
||
var defaultRenderer = { type: default_1.DefaultRenderer };
|
||
return common_1.isObject(renderer)
|
||
? tslib_1.__assign(tslib_1.__assign({}, defaultRenderer), renderer)
|
||
: defaultRenderer;
|
||
}
|
||
function createTreeInfo(treeColumnOptions, name) {
|
||
if (treeColumnOptions && treeColumnOptions.name === name) {
|
||
var _a = treeColumnOptions.useIcon, useIcon = _a === void 0 ? true : _a;
|
||
return { tree: { useIcon: useIcon } };
|
||
}
|
||
return null;
|
||
}
|
||
function createRelationMap(relations) {
|
||
var relationMap = {};
|
||
relations.forEach(function (relation) {
|
||
var editable = relation.editable, disabled = relation.disabled, listItems = relation.listItems, _a = relation.targetNames, targetNames = _a === void 0 ? [] : _a;
|
||
targetNames.forEach(function (targetName) {
|
||
relationMap[targetName] = {
|
||
editable: editable,
|
||
disabled: disabled,
|
||
listItems: listItems,
|
||
};
|
||
});
|
||
});
|
||
return relationMap;
|
||
}
|
||
function createColumnHeaderInfo(name, columnHeaderInfo) {
|
||
var columnHeaders = columnHeaderInfo.columnHeaders, defaultAlign = columnHeaderInfo.align, defaultVAlign = columnHeaderInfo.valign;
|
||
var columnOption = common_1.findProp('name', name, columnHeaders);
|
||
var headerAlign = columnOption && columnOption.align ? columnOption.align : defaultAlign;
|
||
var headerVAlign = columnOption && columnOption.valign ? columnOption.valign : defaultVAlign;
|
||
var headerRenderer = columnOption && columnOption.renderer ? columnOption.renderer : null;
|
||
return {
|
||
headerAlign: headerAlign,
|
||
headerVAlign: headerVAlign,
|
||
headerRenderer: headerRenderer,
|
||
};
|
||
}
|
||
function createColumnFilterOption(filter) {
|
||
var defaultOption = {
|
||
type: common_1.isObject(filter) ? filter.type : filter,
|
||
showApplyBtn: false,
|
||
showClearBtn: false,
|
||
};
|
||
if (common_1.isString(filter)) {
|
||
if (filter === 'select') {
|
||
return tslib_1.__assign(tslib_1.__assign({}, defaultOption), { operator: 'OR' });
|
||
}
|
||
}
|
||
if (common_1.isObject(filter)) {
|
||
return tslib_1.__assign(tslib_1.__assign({}, defaultOption), (filter.type === 'select'
|
||
? common_1.omit(filter, 'showApplyBtn', 'showClearBtn', 'operator', 'options')
|
||
: filter));
|
||
}
|
||
return defaultOption;
|
||
}
|
||
exports.createColumnFilterOption = createColumnFilterOption;
|
||
function createRelationColumns(relations) {
|
||
var relationColumns = [];
|
||
relations.forEach(function (relation) {
|
||
var _a = relation.targetNames, targetNames = _a === void 0 ? [] : _a;
|
||
targetNames.forEach(function (targetName) {
|
||
relationColumns.push(targetName);
|
||
});
|
||
});
|
||
return relationColumns;
|
||
}
|
||
exports.createRelationColumns = createRelationColumns;
|
||
// eslint-disable-next-line max-params
|
||
function createColumn(column, columnOptions, relationColumns, gridCopyOptions, treeColumnOptions, columnHeaderInfo, disabled) {
|
||
var name = column.name, header = column.header, width = column.width, minWidth = column.minWidth, align = column.align, hidden = column.hidden, resizable = column.resizable, editor = column.editor, renderer = column.renderer, relations = column.relations, sortable = column.sortable, sortingType = column.sortingType, copyOptions = column.copyOptions, validation = column.validation, formatter = column.formatter, onBeforeChange = column.onBeforeChange, onAfterChange = column.onAfterChange, whiteSpace = column.whiteSpace, ellipsis = column.ellipsis, valign = column.valign, defaultValue = column.defaultValue, escapeHTML = column.escapeHTML, ignored = column.ignored, filter = column.filter, className = column.className, comparator = column.comparator;
|
||
var editorOptions = createEditorOptions(editor);
|
||
var rendererOptions = createRendererOptions(renderer);
|
||
var filterOptions = filter ? createColumnFilterOption(filter) : null;
|
||
var _a = createColumnHeaderInfo(name, columnHeaderInfo), headerAlign = _a.headerAlign, headerVAlign = _a.headerVAlign, headerRenderer = _a.headerRenderer;
|
||
var useRowSpanOption = column.rowSpan && !treeColumnOptions.name && !common_1.includes(relationColumns, column.name);
|
||
var rowSpan = useRowSpanOption ? column.rowSpan : false;
|
||
return observable_1.observable(tslib_1.__assign(tslib_1.__assign(tslib_1.__assign({ name: name,
|
||
escapeHTML: escapeHTML, header: header || name, hidden: Boolean(hidden), resizable: common_1.isUndefined(resizable) ? Boolean(columnOptions.resizable) : Boolean(resizable), align: align || 'left', fixedWidth: typeof width === 'number', copyOptions: tslib_1.__assign(tslib_1.__assign({}, gridCopyOptions), copyOptions), baseWidth: (width === 'auto' ? 0 : width) || 0, minWidth: minWidth || columnOptions.minWidth || COLUMN, relationMap: createRelationMap(relations || []), related: common_1.includes(relationColumns, name), sortable: sortable, sortingType: sortingType || 'asc', validation: validation ? tslib_1.__assign({}, validation) : {}, renderer: rendererOptions, formatter: formatter,
|
||
onBeforeChange: onBeforeChange,
|
||
onAfterChange: onAfterChange,
|
||
whiteSpace: whiteSpace,
|
||
ellipsis: ellipsis, valign: valign || 'middle', defaultValue: defaultValue,
|
||
ignored: ignored }, (!!editorOptions && { editor: editorOptions })), createTreeInfo(treeColumnOptions, name)), { headerAlign: headerAlign,
|
||
headerVAlign: headerVAlign, filter: filterOptions, headerRenderer: headerRenderer,
|
||
className: className,
|
||
disabled: disabled,
|
||
comparator: comparator, autoResizing: width === 'auto', rowSpan: rowSpan }));
|
||
}
|
||
exports.createColumn = createColumn;
|
||
function createRowHeader(data, columnHeaderInfo) {
|
||
var rowHeader = common_1.isString(data)
|
||
? { name: rowHeadersMap[data] }
|
||
: tslib_1.__assign({ name: rowHeadersMap[data.type] }, common_1.omit(data, 'type'));
|
||
var name = rowHeader.name, header = rowHeader.header, align = rowHeader.align, valign = rowHeader.valign, renderer = rowHeader.renderer, width = rowHeader.width, minWidth = rowHeader.minWidth;
|
||
var baseMinWith = common_1.isNumber(minWidth) ? minWidth : ROW_HEADER;
|
||
var baseWidth = (width === 'auto' ? baseMinWith : width) || baseMinWith;
|
||
var rowNumColumn = column_1.isRowNumColumn(name);
|
||
var defaultHeader = rowNumColumn ? 'No. ' : DEF_ROW_HEADER_INPUT;
|
||
var rendererOptions = renderer || {
|
||
type: rowNumColumn ? default_1.DefaultRenderer : rowHeaderInput_1.RowHeaderInputRenderer,
|
||
};
|
||
var _a = createColumnHeaderInfo(name, columnHeaderInfo), headerAlign = _a.headerAlign, headerVAlign = _a.headerVAlign, headerRenderer = _a.headerRenderer;
|
||
return observable_1.observable({
|
||
name: name,
|
||
header: header || defaultHeader,
|
||
hidden: false,
|
||
resizable: false,
|
||
align: align || 'center',
|
||
valign: valign || 'middle',
|
||
renderer: createRendererOptions(rendererOptions),
|
||
fixedWidth: true,
|
||
baseWidth: baseWidth,
|
||
escapeHTML: false,
|
||
minWidth: baseMinWith,
|
||
headerAlign: headerAlign,
|
||
headerVAlign: headerVAlign,
|
||
headerRenderer: headerRenderer,
|
||
autoResizing: false,
|
||
});
|
||
}
|
||
function createComplexColumnHeaders(column, columnHeaderInfo) {
|
||
var header = column.header, name = column.name, childNames = column.childNames, renderer = column.renderer, hideChildHeaders = column.hideChildHeaders, _a = column.resizable, resizable = _a === void 0 ? false : _a;
|
||
var headerAlign = column.headerAlign || columnHeaderInfo.align;
|
||
var headerVAlign = column.headerVAlign || columnHeaderInfo.valign;
|
||
return observable_1.observable({
|
||
header: header,
|
||
name: name,
|
||
childNames: childNames,
|
||
headerAlign: headerAlign,
|
||
headerVAlign: headerVAlign,
|
||
headerRenderer: renderer || null,
|
||
hideChildHeaders: hideChildHeaders,
|
||
resizable: resizable,
|
||
});
|
||
}
|
||
function createDraggableRowHeader(rowHeaderColumn) {
|
||
var renderer = common_1.isObject(rowHeaderColumn)
|
||
? rowHeaderColumn.renderer
|
||
: { type: rowHeaderDraggable_1.RowHeaderDraggableRenderer };
|
||
var draggableColumn = {
|
||
name: '_draggable',
|
||
header: '',
|
||
hidden: false,
|
||
resizable: false,
|
||
align: 'center',
|
||
valign: 'middle',
|
||
renderer: createRendererOptions(renderer),
|
||
baseWidth: ROW_HEADER,
|
||
minWidth: ROW_HEADER,
|
||
fixedWidth: true,
|
||
autoResizing: false,
|
||
escapeHTML: false,
|
||
headerAlign: 'center',
|
||
headerVAlign: 'middle',
|
||
};
|
||
return draggableColumn;
|
||
}
|
||
function create(_a) {
|
||
var columns = _a.columns, columnOptions = _a.columnOptions, rowHeaders = _a.rowHeaders, copyOptions = _a.copyOptions, keyColumnName = _a.keyColumnName, treeColumnOptions = _a.treeColumnOptions, complexColumns = _a.complexColumns, align = _a.align, valign = _a.valign, columnHeaders = _a.columnHeaders, disabled = _a.disabled, draggable = _a.draggable;
|
||
var relationColumns = columns.reduce(function (acc, _a) {
|
||
var relations = _a.relations;
|
||
acc = acc.concat(createRelationColumns(relations || []));
|
||
return acc.filter(function (columnName, idx) { return acc.indexOf(columnName) === idx; });
|
||
}, []);
|
||
var columnHeaderInfo = { columnHeaders: columnHeaders, align: align, valign: valign };
|
||
var rowHeaderInfos = [];
|
||
if (draggable) {
|
||
var rowHeaderColumn = null;
|
||
var index = common_1.findIndex(function (rowHeader) {
|
||
return (common_1.isString(rowHeader) && rowHeader === 'draggable') ||
|
||
rowHeader.type === 'draggable';
|
||
}, rowHeaders);
|
||
if (index !== -1) {
|
||
rowHeaderColumn = rowHeaders.splice(index, 1)[0];
|
||
}
|
||
rowHeaderInfos.push(createDraggableRowHeader(rowHeaderColumn));
|
||
}
|
||
rowHeaders.forEach(function (rowHeader) {
|
||
return rowHeaderInfos.push(createRowHeader(rowHeader, columnHeaderInfo));
|
||
});
|
||
var columnInfos = columns.map(function (column) {
|
||
return createColumn(column, columnOptions, relationColumns, copyOptions, treeColumnOptions, columnHeaderInfo, !!(disabled || column.disabled));
|
||
});
|
||
validateRelationColumn(columnInfos);
|
||
var allColumns = rowHeaderInfos.concat(columnInfos);
|
||
var treeColumnName = treeColumnOptions.name, _b = treeColumnOptions.useIcon, treeIcon = _b === void 0 ? true : _b, _c = treeColumnOptions.useCascadingCheckbox, treeCascadingCheckbox = _c === void 0 ? true : _c, _d = treeColumnOptions.indentWidth, treeIndentWidth = _d === void 0 ? constant_1.TREE_INDENT_WIDTH : _d;
|
||
var complexColumnHeaders = complexColumns.map(function (column) {
|
||
return createComplexColumnHeaders(column, columnHeaderInfo);
|
||
});
|
||
return observable_1.observable(tslib_1.__assign({ keyColumnName: keyColumnName,
|
||
allColumns: allColumns,
|
||
complexColumnHeaders: complexColumnHeaders,
|
||
columnHeaderInfo: columnHeaderInfo, frozenCount: columnOptions.frozenCount || 0, draggable: draggable, dataForColumnCreation: {
|
||
copyOptions: copyOptions,
|
||
columnOptions: columnOptions,
|
||
treeColumnOptions: treeColumnOptions,
|
||
relationColumns: relationColumns,
|
||
rowHeaders: rowHeaderInfos,
|
||
}, get allColumnMap() {
|
||
return common_1.createMapFromArray(this.allColumns, 'name');
|
||
}, get rowHeaderCount() {
|
||
return rowHeaderInfos.length;
|
||
}, get visibleColumns() {
|
||
return this.allColumns.slice(this.rowHeaderCount).filter(function (_a) {
|
||
var hidden = _a.hidden;
|
||
return !hidden;
|
||
});
|
||
},
|
||
get visibleColumnsWithRowHeader() {
|
||
return this.allColumns.filter(function (_a) {
|
||
var hidden = _a.hidden;
|
||
return !hidden;
|
||
});
|
||
}, get visibleColumnsBySide() {
|
||
return {
|
||
L: this.visibleColumns.slice(0, this.frozenCount),
|
||
R: this.visibleColumns.slice(this.frozenCount),
|
||
};
|
||
}, get visibleColumnsBySideWithRowHeader() {
|
||
var frozenLastIndex = this.rowHeaderCount + this.frozenCount;
|
||
return {
|
||
L: this.visibleColumnsWithRowHeader.slice(0, frozenLastIndex),
|
||
R: this.visibleColumnsWithRowHeader.slice(frozenLastIndex),
|
||
};
|
||
},
|
||
get visibleRowSpanEnabledColumns() {
|
||
return this.visibleColumns.filter(function (_a) {
|
||
var rowSpan = _a.rowSpan;
|
||
return rowSpan;
|
||
});
|
||
},
|
||
get defaultValues() {
|
||
return this.allColumns
|
||
.filter(function (_a) {
|
||
var defaultValue = _a.defaultValue;
|
||
return Boolean(defaultValue);
|
||
})
|
||
.map(function (_a) {
|
||
var name = _a.name, defaultValue = _a.defaultValue;
|
||
return ({ name: name, value: defaultValue });
|
||
});
|
||
}, get visibleFrozenCount() {
|
||
return this.visibleColumnsBySideWithRowHeader.L.length;
|
||
}, get validationColumns() {
|
||
return this.allColumns.filter(function (_a) {
|
||
var validation = _a.validation;
|
||
return !common_1.isEmpty(validation);
|
||
});
|
||
},
|
||
get ignoredColumns() {
|
||
return this.allColumns.filter(function (_a) {
|
||
var ignored = _a.ignored;
|
||
return ignored;
|
||
}).map(function (_a) {
|
||
var name = _a.name;
|
||
return name;
|
||
});
|
||
},
|
||
get columnMapWithRelation() {
|
||
// copy the array to prevent to affect allColumns property
|
||
var copiedColumns = tslib_1.__spreadArrays(this.allColumns);
|
||
copiedColumns.sort(function (columnA, columnB) {
|
||
var _a, _b;
|
||
var hasRelationMapA = !common_1.isEmpty(columnA.relationMap);
|
||
var hasRelationMapB = !common_1.isEmpty(columnB.relationMap);
|
||
if (hasRelationMapA && hasRelationMapB) {
|
||
if ((_a = columnA.relationMap) === null || _a === void 0 ? void 0 : _a[columnB.name]) {
|
||
return -1;
|
||
}
|
||
return ((_b = columnB.relationMap) === null || _b === void 0 ? void 0 : _b[columnA.name]) ? 1 : 0;
|
||
}
|
||
if (hasRelationMapA) {
|
||
return -1;
|
||
}
|
||
return hasRelationMapB ? 1 : 0;
|
||
});
|
||
return common_1.createMapFromArray(copiedColumns, 'name');
|
||
}, get columnsWithoutRowHeader() {
|
||
return this.allColumns.slice(this.rowHeaderCount);
|
||
}, get emptyRow() {
|
||
return this.columnsWithoutRowHeader.reduce(function (acc, _a) {
|
||
var _b;
|
||
var name = _a.name;
|
||
return (tslib_1.__assign(tslib_1.__assign({}, acc), (_b = {}, _b[name] = null, _b)));
|
||
}, {});
|
||
},
|
||
get autoResizingColumn() {
|
||
return this.columnsWithoutRowHeader.filter(function (_a) {
|
||
var autoResizing = _a.autoResizing;
|
||
return autoResizing;
|
||
});
|
||
} }, (treeColumnName && { treeColumnName: treeColumnName, treeIcon: treeIcon, treeCascadingCheckbox: treeCascadingCheckbox, treeIndentWidth: treeIndentWidth })));
|
||
}
|
||
exports.create = create;
|
||
|
||
|
||
/***/ }),
|
||
/* 34 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.setLayerPosition = exports.moveLayer = exports.getContainerElement = exports.setOpacity = void 0;
|
||
var common_1 = __webpack_require__(0);
|
||
var dom_1 = __webpack_require__(2);
|
||
var INDENT = 5;
|
||
var SCROLL_BAR_WIDTH = 17;
|
||
var SCROLL_BAR_HEIGHT = 17;
|
||
function exceedGridViewport(top, left, _a) {
|
||
var bodyHeight = _a.bodyHeight, bodyWidth = _a.bodyWidth, headerHeight = _a.headerHeight, leftSideWidth = _a.leftSideWidth;
|
||
return !(common_1.isBetween(top, headerHeight, bodyHeight + headerHeight) &&
|
||
common_1.isBetween(left, leftSideWidth, bodyWidth));
|
||
}
|
||
function setOpacity(el, opacity) {
|
||
el.style.opacity = String(opacity);
|
||
}
|
||
exports.setOpacity = setOpacity;
|
||
function getContainerElement(el) {
|
||
return dom_1.findParentByClassName(el, 'container');
|
||
}
|
||
exports.getContainerElement = getContainerElement;
|
||
function moveLayer(layerEl, initLayerPos, gridRect) {
|
||
var top = initLayerPos.top, left = initLayerPos.left;
|
||
var initBodyScrollTop = gridRect.initBodyScrollTop, initBodyScrollLeft = gridRect.initBodyScrollLeft, bodyScrollTop = gridRect.bodyScrollTop, bodyScrollLeft = gridRect.bodyScrollLeft;
|
||
var newTop = top + initBodyScrollTop - bodyScrollTop;
|
||
var newLeft = left + initBodyScrollLeft - bodyScrollLeft;
|
||
if (exceedGridViewport(newTop, newLeft, gridRect)) {
|
||
layerEl.style.zIndex = '-100';
|
||
layerEl.style.top = '0px';
|
||
layerEl.style.left = '0px';
|
||
}
|
||
else {
|
||
layerEl.style.zIndex = '';
|
||
layerEl.style.top = newTop + "px";
|
||
layerEl.style.left = newLeft + "px";
|
||
}
|
||
}
|
||
exports.moveLayer = moveLayer;
|
||
function setLayerPosition(innerEl, layerEl, childEl, startBottom) {
|
||
if (startBottom === void 0) { startBottom = false; }
|
||
var containerRect = getContainerElement(innerEl).getBoundingClientRect();
|
||
var innerHeight = window.innerHeight, innerWidth = window.innerWidth;
|
||
var _a = innerEl.getBoundingClientRect(), left = _a.left, top = _a.top, bottom = _a.bottom;
|
||
var _b = layerEl.getBoundingClientRect(), layerHeight = _b.height, layerWidth = _b.width;
|
||
var layerTop = startBottom ? bottom : top + INDENT;
|
||
var childElHeight = 0;
|
||
var childElWidth = 0;
|
||
if (childEl) {
|
||
var _c = childEl.getBoundingClientRect(), height = _c.height, width = _c.width;
|
||
childElHeight = height;
|
||
childElWidth = width;
|
||
}
|
||
var totalHeight = layerHeight + childElHeight;
|
||
var totalWidth = layerWidth || childElWidth;
|
||
layerEl.style.top = (layerTop + totalHeight > innerHeight - SCROLL_BAR_WIDTH
|
||
? innerHeight - totalHeight - INDENT - SCROLL_BAR_WIDTH
|
||
: layerTop) - containerRect.top + "px";
|
||
layerEl.style.left = (left + totalWidth > innerWidth - SCROLL_BAR_HEIGHT
|
||
? innerWidth - totalWidth - INDENT - SCROLL_BAR_HEIGHT
|
||
: left) - containerRect.left + "px";
|
||
}
|
||
exports.setLayerPosition = setLayerPosition;
|
||
|
||
|
||
/***/ }),
|
||
/* 35 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.resetFilterState = exports.emitAfterFilter = exports.initFilter = exports.setFilter = exports.unfilter = exports.clearFilter = exports.updateFilters = exports.filter = exports.setActiveFilterState = exports.clearActiveFilterState = exports.applyActiveFilterState = exports.setActiveColumnAddress = exports.setActiveSelectFilterState = exports.toggleSelectAllCheckbox = exports.setActiveFilterOperator = void 0;
|
||
var observable_1 = __webpack_require__(5);
|
||
var common_1 = __webpack_require__(0);
|
||
var filter_1 = __webpack_require__(30);
|
||
var data_1 = __webpack_require__(6);
|
||
var column_1 = __webpack_require__(33);
|
||
var viewport_1 = __webpack_require__(25);
|
||
var selection_1 = __webpack_require__(16);
|
||
var focus_1 = __webpack_require__(18);
|
||
var eventBus_1 = __webpack_require__(7);
|
||
var column_2 = __webpack_require__(12);
|
||
var data_2 = __webpack_require__(14);
|
||
var summary_1 = __webpack_require__(26);
|
||
var filter_2 = __webpack_require__(48);
|
||
var pagination_1 = __webpack_require__(36);
|
||
var rowSpan_1 = __webpack_require__(24);
|
||
function initLayerAndScrollAfterFiltering(store) {
|
||
var data = store.data;
|
||
viewport_1.initScrollPosition(store);
|
||
selection_1.initSelection(store);
|
||
focus_1.initFocus(store);
|
||
pagination_1.updatePageOptions(store, { totalCount: data.filteredRawData.length, page: 1 });
|
||
data_2.updateHeights(store);
|
||
data_2.setCheckedAllRows(store);
|
||
}
|
||
function setActiveFilterOperator(store, operator) {
|
||
var column = store.column, filterLayerState = store.filterLayerState;
|
||
var activeFilterState = filterLayerState.activeFilterState;
|
||
var columnInfo = column.allColumnMap[activeFilterState.columnName];
|
||
var columnFilterOption = columnInfo.filter;
|
||
activeFilterState.operator = operator;
|
||
if (!columnFilterOption.showApplyBtn) {
|
||
columnFilterOption.operator = operator;
|
||
applyActiveFilterState(store);
|
||
}
|
||
}
|
||
exports.setActiveFilterOperator = setActiveFilterOperator;
|
||
function toggleSelectAllCheckbox(store, checked) {
|
||
var column = store.column, filterLayerState = store.filterLayerState, data = store.data;
|
||
var activeFilterState = filterLayerState.activeFilterState;
|
||
var columnName = activeFilterState.columnName;
|
||
var columnInfo = column.allColumnMap[columnName];
|
||
if (checked) {
|
||
var columnData = data_1.getUniqColumnData(data.rawData, column, columnName);
|
||
activeFilterState.state = columnData.map(function (value) { return ({ code: 'eq', value: value }); });
|
||
}
|
||
else {
|
||
activeFilterState.state = [];
|
||
}
|
||
if (!columnInfo.filter.showApplyBtn) {
|
||
applyActiveFilterState(store);
|
||
}
|
||
}
|
||
exports.toggleSelectAllCheckbox = toggleSelectAllCheckbox;
|
||
function setActiveSelectFilterState(store, value, checked) {
|
||
var column = store.column, filterLayerState = store.filterLayerState;
|
||
var activeFilterState = filterLayerState.activeFilterState;
|
||
var columnName = filterLayerState.activeColumnAddress.name;
|
||
var columnInfo = column.allColumnMap[columnName];
|
||
if (checked) {
|
||
activeFilterState.state.push({ value: value, code: 'eq' });
|
||
}
|
||
else {
|
||
var index = common_1.findPropIndex('value', value, activeFilterState.state);
|
||
activeFilterState.state.splice(index, 1);
|
||
}
|
||
if (!columnInfo.filter.showApplyBtn) {
|
||
applyActiveFilterState(store);
|
||
}
|
||
else {
|
||
observable_1.notify(filterLayerState, 'activeFilterState');
|
||
}
|
||
}
|
||
exports.setActiveSelectFilterState = setActiveSelectFilterState;
|
||
function setActiveColumnAddress(store, address) {
|
||
var data = store.data, column = store.column, filterLayerState = store.filterLayerState;
|
||
var filters = data.filters, filteredRawData = data.filteredRawData;
|
||
filterLayerState.activeColumnAddress = address;
|
||
if (!address) {
|
||
filterLayerState.activeFilterState = null;
|
||
return;
|
||
}
|
||
var columnName = address.name;
|
||
var _a = column.allColumnMap[columnName].filter, type = _a.type, operator = _a.operator;
|
||
var initialState = [];
|
||
if (filters) {
|
||
var prevFilter = common_1.findProp('columnName', columnName, filters);
|
||
if (prevFilter) {
|
||
initialState = prevFilter.state;
|
||
}
|
||
}
|
||
if (type === 'select' && !initialState.length) {
|
||
var columnData = data_1.getUniqColumnData(filteredRawData, column, columnName);
|
||
initialState = columnData.map(function (value) { return ({ code: 'eq', value: value }); });
|
||
}
|
||
filterLayerState.activeFilterState = {
|
||
columnName: columnName,
|
||
type: type,
|
||
operator: operator,
|
||
state: initialState,
|
||
};
|
||
}
|
||
exports.setActiveColumnAddress = setActiveColumnAddress;
|
||
function applyActiveFilterState(store) {
|
||
var filterLayerState = store.filterLayerState, data = store.data, column = store.column;
|
||
var columnName = filterLayerState.activeColumnAddress.name;
|
||
var _a = filterLayerState.activeFilterState, state = _a.state, type = _a.type, operator = _a.operator;
|
||
var validState = state.filter(function (item) { return String(item.value).length; });
|
||
if (type !== 'select' && !validState.length) {
|
||
unfilter(store, columnName);
|
||
return;
|
||
}
|
||
filterLayerState.activeFilterState.state = state;
|
||
if (type === 'select') {
|
||
var columnData = data_1.getUniqColumnData(data.rawData, column, columnName);
|
||
if (columnData.length === state.length) {
|
||
unfilter(store, columnName);
|
||
return;
|
||
}
|
||
}
|
||
var fns = state.map(function (_a) {
|
||
var code = _a.code, value = _a.value;
|
||
return filter_1.getFilterConditionFn(code, value, type);
|
||
});
|
||
filter(store, columnName, filter_1.composeConditionFn(fns, operator), state);
|
||
}
|
||
exports.applyActiveFilterState = applyActiveFilterState;
|
||
function clearActiveFilterState(store) {
|
||
var filterLayerState = store.filterLayerState;
|
||
var activeFilterState = filterLayerState.activeFilterState;
|
||
activeFilterState.state = [];
|
||
unfilter(store, activeFilterState.columnName);
|
||
}
|
||
exports.clearActiveFilterState = clearActiveFilterState;
|
||
function setActiveFilterState(store, state, filterIndex) {
|
||
var column = store.column, filterLayerState = store.filterLayerState;
|
||
var columnName = filterLayerState.activeColumnAddress.name;
|
||
var columnInfo = column.allColumnMap[columnName];
|
||
filterLayerState.activeFilterState.state[filterIndex] = state;
|
||
if (!columnInfo.filter.showApplyBtn) {
|
||
applyActiveFilterState(store);
|
||
}
|
||
else {
|
||
observable_1.notify(filterLayerState, 'activeFilterState');
|
||
}
|
||
}
|
||
exports.setActiveFilterState = setActiveFilterState;
|
||
function filter(store, columnName, conditionFn, state) {
|
||
var column = store.column;
|
||
var columnFilterInfo = column.allColumnMap[columnName].filter;
|
||
if (column_2.isComplexHeader(column, columnName) ||
|
||
!columnFilterInfo ||
|
||
column_2.isHiddenColumn(column, columnName)) {
|
||
return;
|
||
}
|
||
var type = columnFilterInfo.type, operator = columnFilterInfo.operator;
|
||
var nextColumnFilterState = { columnName: columnName, type: type, conditionFn: conditionFn, state: state, operator: operator };
|
||
var gridEvent = emitBeforeFilter(store, 'beforeFilter', nextColumnFilterState);
|
||
if (gridEvent.isStopped()) {
|
||
return;
|
||
}
|
||
pagination_1.updatePageOptions(store, { page: 1 });
|
||
updateFilters(store, columnName, nextColumnFilterState);
|
||
initLayerAndScrollAfterFiltering(store);
|
||
summary_1.updateAllSummaryValues(store);
|
||
emitAfterFilter(store, 'afterFilter', columnName);
|
||
rowSpan_1.updateRowSpan(store);
|
||
}
|
||
exports.filter = filter;
|
||
function updateFilters(_a, columnName, nextColumnFilterState) {
|
||
var data = _a.data;
|
||
var filters = data.filters || [];
|
||
var filterIndex = common_1.findPropIndex('columnName', columnName, filters);
|
||
if (filterIndex >= 0) {
|
||
filters.splice(filterIndex, 1, nextColumnFilterState);
|
||
}
|
||
else {
|
||
data.filters = filters.concat(nextColumnFilterState);
|
||
}
|
||
}
|
||
exports.updateFilters = updateFilters;
|
||
function clearFilter(_a, columnName) {
|
||
var data = _a.data;
|
||
var filters = data.filters || [];
|
||
var filterIndex = common_1.findPropIndex('columnName', columnName, filters);
|
||
if (filterIndex >= 0) {
|
||
if (filters.length === 1) {
|
||
data.filters = null;
|
||
}
|
||
else {
|
||
filters.splice(filterIndex, 1);
|
||
}
|
||
}
|
||
}
|
||
exports.clearFilter = clearFilter;
|
||
function clearAll(store) {
|
||
var gridEvent = emitBeforeFilter(store, 'beforeUnfilter', { columnName: null });
|
||
if (gridEvent.isStopped()) {
|
||
return;
|
||
}
|
||
initFilter(store);
|
||
initLayerAndScrollAfterFiltering(store);
|
||
summary_1.updateAllSummaryValues(store);
|
||
emitAfterFilter(store, 'afterUnfilter', null);
|
||
}
|
||
function unfilter(store, columnName) {
|
||
var data = store.data, column = store.column;
|
||
var filters = data.filters;
|
||
if (!columnName) {
|
||
clearAll(store);
|
||
return;
|
||
}
|
||
if (column_2.isComplexHeader(column, columnName) || column_2.isHiddenColumn(column, columnName)) {
|
||
return;
|
||
}
|
||
if (filters) {
|
||
var gridEvent = emitBeforeFilter(store, 'beforeUnfilter', { columnName: columnName });
|
||
if (gridEvent.isStopped()) {
|
||
return;
|
||
}
|
||
clearFilter(store, columnName);
|
||
initLayerAndScrollAfterFiltering(store);
|
||
summary_1.updateAllSummaryValues(store);
|
||
emitAfterFilter(store, 'afterUnfilter', columnName);
|
||
}
|
||
rowSpan_1.updateRowSpan(store);
|
||
}
|
||
exports.unfilter = unfilter;
|
||
function setFilter(store, columnName, filterOpt) {
|
||
var column = store.column;
|
||
var filterOptions = column_1.createColumnFilterOption(filterOpt);
|
||
var index = common_1.findPropIndex('name', columnName, column.allColumns);
|
||
if (index !== -1) {
|
||
if (column.allColumns[index].filter) {
|
||
unfilter(store, columnName);
|
||
}
|
||
column.allColumns[index].filter = filterOptions;
|
||
observable_1.notify(column, 'allColumns');
|
||
}
|
||
}
|
||
exports.setFilter = setFilter;
|
||
function initFilter(store) {
|
||
var filterLayerState = store.filterLayerState, data = store.data;
|
||
filterLayerState.activeFilterState = null;
|
||
filterLayerState.activeColumnAddress = null;
|
||
data.filters = null;
|
||
}
|
||
exports.initFilter = initFilter;
|
||
function emitBeforeFilter(store, eventType, eventParams) {
|
||
var eventBus = eventBus_1.getEventBus(store.id);
|
||
var gridEvent = filter_2.createFilterEvent(store, eventType, eventParams);
|
||
eventBus.trigger(eventType, gridEvent);
|
||
return gridEvent;
|
||
}
|
||
function emitAfterFilter(store, eventType, columnName) {
|
||
var id = store.id;
|
||
var eventBus = eventBus_1.getEventBus(id);
|
||
// @TODO: `filter` event will be deprecated. This event is replaced with `afterFilter` event
|
||
var eventTypes = (eventType === 'afterFilter'
|
||
? ['afterFilter', 'filter']
|
||
: ['afterUnfilter']);
|
||
eventTypes.forEach(function (type) {
|
||
var gridEvent = filter_2.createFilterEvent(store, type, { columnName: columnName });
|
||
eventBus.trigger(type, gridEvent);
|
||
});
|
||
}
|
||
exports.emitAfterFilter = emitAfterFilter;
|
||
function resetFilterState(store, filterState) {
|
||
if (filterState) {
|
||
var columnFilterState = filterState.columnFilterState, columnName = filterState.columnName;
|
||
var columnFilterOption = store.column.allColumnMap[columnName].filter;
|
||
if (columnFilterOption) {
|
||
if (columnFilterState) {
|
||
var nextState = {
|
||
conditionFn: function () { return true; },
|
||
type: columnFilterOption.type,
|
||
state: columnFilterState,
|
||
columnName: columnName,
|
||
operator: columnFilterOption.operator,
|
||
};
|
||
updateFilters(store, columnName, nextState);
|
||
}
|
||
else {
|
||
clearFilter(store, columnName);
|
||
}
|
||
}
|
||
}
|
||
else {
|
||
initFilter(store);
|
||
}
|
||
}
|
||
exports.resetFilterState = resetFilterState;
|
||
|
||
|
||
/***/ }),
|
||
/* 36 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.resetPageState = exports.updatePageWhenRemovingRow = exports.movePage = exports.updatePageOptions = void 0;
|
||
var tslib_1 = __webpack_require__(1);
|
||
var common_1 = __webpack_require__(0);
|
||
var data_1 = __webpack_require__(6);
|
||
var viewport_1 = __webpack_require__(25);
|
||
var selection_1 = __webpack_require__(16);
|
||
var focus_1 = __webpack_require__(18);
|
||
var data_2 = __webpack_require__(14);
|
||
var summary_1 = __webpack_require__(26);
|
||
var observable_1 = __webpack_require__(5);
|
||
function updatePageOptions(_a, pageOptions, forceUpdatePage) {
|
||
var data = _a.data;
|
||
if (forceUpdatePage === void 0) { forceUpdatePage = false; }
|
||
var orgPageOptions = data.pageOptions;
|
||
if (!common_1.isEmpty(orgPageOptions)) {
|
||
// if infinite scrolling is applied, page number should be not reset to know the last loaded page
|
||
if (!forceUpdatePage && data_1.isScrollPagination(data)) {
|
||
delete pageOptions.page;
|
||
}
|
||
var newPageOptions = tslib_1.__assign(tslib_1.__assign({}, orgPageOptions), pageOptions);
|
||
if (!common_1.shallowEqual(newPageOptions, orgPageOptions)) {
|
||
data.pageOptions = newPageOptions;
|
||
}
|
||
}
|
||
}
|
||
exports.updatePageOptions = updatePageOptions;
|
||
function movePage(store, page) {
|
||
var data = store.data;
|
||
viewport_1.initScrollPosition(store);
|
||
data.pageOptions.page = page;
|
||
observable_1.notify(data, 'pageOptions');
|
||
data_2.updateHeights(store);
|
||
selection_1.initSelection(store);
|
||
focus_1.initFocus(store);
|
||
data_2.setCheckedAllRows(store);
|
||
summary_1.updateAllSummaryValues(store);
|
||
}
|
||
exports.movePage = movePage;
|
||
function updatePageWhenRemovingRow(store, deletedCount) {
|
||
var pageOptions = store.data.pageOptions;
|
||
if (!common_1.isEmpty(pageOptions)) {
|
||
var perPage = pageOptions.perPage, totalCount = pageOptions.totalCount, page = pageOptions.page;
|
||
var modifiedLastPage = Math.floor((totalCount - deletedCount) / perPage);
|
||
if ((totalCount - deletedCount) % perPage) {
|
||
modifiedLastPage += 1;
|
||
}
|
||
updatePageOptions(store, {
|
||
totalCount: totalCount - deletedCount,
|
||
page: (modifiedLastPage < page ? modifiedLastPage : page) || 1,
|
||
}, true);
|
||
}
|
||
}
|
||
exports.updatePageWhenRemovingRow = updatePageWhenRemovingRow;
|
||
function resetPageState(store, totalCount, pageState) {
|
||
var pageOptions = pageState ? common_1.pruneObject(pageState) : { page: 1, totalCount: totalCount };
|
||
updatePageOptions(store, pageOptions, true);
|
||
}
|
||
exports.resetPageState = resetPageState;
|
||
|
||
|
||
/***/ }),
|
||
/* 37 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.findRowIndexByPosition = exports.findColumnIndexByPosition = exports.getColumnNameRange = exports.getOverflowFromMousePosition = void 0;
|
||
var tslib_1 = __webpack_require__(1);
|
||
var common_1 = __webpack_require__(0);
|
||
function getTotalColumnOffsets(widths, cellBorderWidth) {
|
||
var totalWidths = tslib_1.__spreadArrays(widths.L, widths.R);
|
||
var offsets = [0];
|
||
for (var i = 1, len = totalWidths.length; i < len; i += 1) {
|
||
offsets.push(offsets[i - 1] + totalWidths[i - 1] + cellBorderWidth);
|
||
}
|
||
return offsets;
|
||
}
|
||
function getScrolledPosition(_a, dimension, leftSideWidth) {
|
||
var pageX = _a.pageX, pageY = _a.pageY, scrollLeft = _a.scrollLeft, scrollTop = _a.scrollTop;
|
||
var _b = getPositionFromBodyArea(pageX, pageY, dimension), bodyPositionX = _b.x, bodyPositionY = _b.y;
|
||
var scrollX = bodyPositionX > leftSideWidth ? scrollLeft : 0;
|
||
var scrolledPositionX = bodyPositionX + scrollX;
|
||
var scrolledPositionY = bodyPositionY + scrollTop;
|
||
return {
|
||
x: scrolledPositionX,
|
||
y: scrolledPositionY,
|
||
};
|
||
}
|
||
function judgeOverflow(_a, _b) {
|
||
var containerX = _a.x, containerY = _a.y;
|
||
var bodyHeight = _b.bodyHeight, bodyWidth = _b.bodyWidth;
|
||
var overflowY = 0;
|
||
var overflowX = 0;
|
||
if (containerY < 0) {
|
||
overflowY = -1;
|
||
}
|
||
else if (containerY > bodyHeight) {
|
||
overflowY = 1;
|
||
}
|
||
if (containerX < 0) {
|
||
overflowX = -1;
|
||
}
|
||
else if (containerX > bodyWidth) {
|
||
overflowX = 1;
|
||
}
|
||
return {
|
||
x: overflowX,
|
||
y: overflowY,
|
||
};
|
||
}
|
||
function getPositionFromBodyArea(pageX, pageY, dimension) {
|
||
var offsetLeft = dimension.offsetLeft, offsetTop = dimension.offsetTop, tableBorderWidth = dimension.tableBorderWidth, cellBorderWidth = dimension.cellBorderWidth, headerHeight = dimension.headerHeight, summaryHeight = dimension.summaryHeight, summaryPosition = dimension.summaryPosition;
|
||
var adjustedSummaryHeight = summaryPosition === 'top' ? summaryHeight : 0;
|
||
return {
|
||
x: pageX - offsetLeft,
|
||
y: pageY -
|
||
(offsetTop + headerHeight + adjustedSummaryHeight + cellBorderWidth + tableBorderWidth),
|
||
};
|
||
}
|
||
function getOverflowFromMousePosition(pageX, pageY, bodyWidth, dimension) {
|
||
var bodyHeight = dimension.bodyHeight;
|
||
var _a = getPositionFromBodyArea(pageX, pageY, dimension), x = _a.x, y = _a.y;
|
||
return judgeOverflow({ x: x, y: y }, { bodyWidth: bodyWidth, bodyHeight: bodyHeight });
|
||
}
|
||
exports.getOverflowFromMousePosition = getOverflowFromMousePosition;
|
||
function getColumnNameRange(store, dragStartData, dragData, elementInfo) {
|
||
var allColumns = store.column.allColumns;
|
||
var scrollTop = elementInfo.scrollTop, scrollLeft = elementInfo.scrollLeft;
|
||
var startPageX = dragStartData.pageX, startPageY = dragStartData.pageY;
|
||
var endPageX = dragData.pageX, endPageY = dragData.pageY;
|
||
var startViewInfo = { pageX: startPageX, pageY: startPageY, scrollTop: scrollTop, scrollLeft: scrollLeft };
|
||
var endViewInfo = { pageX: endPageX, pageY: endPageY, scrollTop: scrollTop, scrollLeft: scrollLeft };
|
||
var startColumnIndex = findColumnIndexByPosition(store, startViewInfo);
|
||
var endColumnIndex = findColumnIndexByPosition(store, endViewInfo);
|
||
var startColumnName = allColumns[startColumnIndex].name;
|
||
var endColumnName = allColumns[endColumnIndex].name;
|
||
return [startColumnName, endColumnName];
|
||
}
|
||
exports.getColumnNameRange = getColumnNameRange;
|
||
function findColumnIndexByPosition(store, viewInfo) {
|
||
var dimension = store.dimension, columnCoords = store.columnCoords;
|
||
var widths = columnCoords.widths, areaWidth = columnCoords.areaWidth;
|
||
var totalColumnOffsets = getTotalColumnOffsets(widths, dimension.cellBorderWidth);
|
||
var scrolledPosition = getScrolledPosition(viewInfo, dimension, areaWidth.L);
|
||
return common_1.findOffsetIndex(totalColumnOffsets, scrolledPosition.x);
|
||
}
|
||
exports.findColumnIndexByPosition = findColumnIndexByPosition;
|
||
function findRowIndexByPosition(store, viewInfo) {
|
||
var dimension = store.dimension, columnCoords = store.columnCoords, rowCoords = store.rowCoords;
|
||
var areaWidth = columnCoords.areaWidth;
|
||
var scrolledPosition = getScrolledPosition(viewInfo, dimension, areaWidth.L);
|
||
return common_1.findOffsetIndex(rowCoords.offsets, scrolledPosition.y);
|
||
}
|
||
exports.findRowIndexByPosition = findRowIndexByPosition;
|
||
|
||
|
||
/***/ }),
|
||
/* 38 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.ColGroup = void 0;
|
||
var tslib_1 = __webpack_require__(1);
|
||
var preact_1 = __webpack_require__(3);
|
||
var hoc_1 = __webpack_require__(4);
|
||
var dom_1 = __webpack_require__(2);
|
||
var ColGroupComp = /** @class */ (function (_super) {
|
||
tslib_1.__extends(ColGroupComp, _super);
|
||
function ColGroupComp() {
|
||
return _super !== null && _super.apply(this, arguments) || this;
|
||
}
|
||
ColGroupComp.prototype.render = function (_a) {
|
||
var _b;
|
||
var columns = _a.columns, widths = _a.widths, borderWidth = _a.borderWidth;
|
||
var attrs = (_b = {}, _b[dom_1.dataAttr.COLUMN_NAME] = name, _b);
|
||
return (preact_1.h("colgroup", null, columns.map(function (_a, idx) {
|
||
var name = _a.name;
|
||
return (preact_1.h("col", tslib_1.__assign({ key: name }, attrs, { style: { width: widths[idx] + borderWidth } })));
|
||
})));
|
||
};
|
||
return ColGroupComp;
|
||
}(preact_1.Component));
|
||
exports.ColGroup = hoc_1.connect(function (_a, _b) {
|
||
var _c;
|
||
var columnCoords = _a.columnCoords, viewport = _a.viewport, dimension = _a.dimension, column = _a.column;
|
||
var side = _b.side, useViewport = _b.useViewport;
|
||
return ({
|
||
widths: useViewport && side === 'R'
|
||
? (_c = columnCoords.widths[side]).slice.apply(_c, viewport.colRange) : columnCoords.widths[side],
|
||
columns: useViewport && side === 'R'
|
||
? viewport.columns
|
||
: column.visibleColumnsBySideWithRowHeader[side],
|
||
borderWidth: dimension.cellBorderWidth,
|
||
});
|
||
})(ColGroupComp);
|
||
|
||
|
||
/***/ }),
|
||
/* 39 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.downloadBlob = exports.isSupportMsSaveOrOpenBlob = exports.isMobile = exports.isEdge = void 0;
|
||
function isEdge() {
|
||
var rEdge = /Edge\/(\d+)\./;
|
||
return rEdge.exec(window.navigator.userAgent);
|
||
}
|
||
exports.isEdge = isEdge;
|
||
function isMobile() {
|
||
return /Android|BlackBerry|iPhone|iPad|iPod|Opera Mini|IEMobile|WPDesktop/i.test(navigator.userAgent);
|
||
}
|
||
exports.isMobile = isMobile;
|
||
function isSupportMsSaveOrOpenBlob() {
|
||
return !!window.navigator.msSaveOrOpenBlob;
|
||
}
|
||
exports.isSupportMsSaveOrOpenBlob = isSupportMsSaveOrOpenBlob;
|
||
function downloadBlob(blob, fileName) {
|
||
if (isSupportMsSaveOrOpenBlob()) {
|
||
window.navigator.msSaveOrOpenBlob(blob, fileName + ".csv");
|
||
}
|
||
else {
|
||
var targetLink = document.createElement('a');
|
||
targetLink.download = fileName + ".csv";
|
||
if (typeof targetLink.download === 'undefined') {
|
||
targetLink.setAttribute('target', '_blank');
|
||
}
|
||
targetLink.href = window.URL.createObjectURL(blob);
|
||
targetLink.click();
|
||
}
|
||
}
|
||
exports.downloadBlob = downloadBlob;
|
||
|
||
|
||
/***/ }),
|
||
/* 40 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.getText = exports.copyDataToRange = exports.getRangeToPaste = void 0;
|
||
var tslib_1 = __webpack_require__(1);
|
||
var common_1 = __webpack_require__(0);
|
||
var data_1 = __webpack_require__(14);
|
||
var observable_1 = __webpack_require__(5);
|
||
function getCustomValue(customValue, value, rowAttrs, column) {
|
||
return typeof customValue === 'function' ? customValue(value, rowAttrs, column) : customValue;
|
||
}
|
||
function getTextWithCopyOptionsApplied(valueMap, rawData, column) {
|
||
var text = valueMap.value;
|
||
var copyOptions = column.copyOptions, editor = column.editor;
|
||
var editorOptions = editor && editor.options;
|
||
// priority: customValue > useListItemText > useFormattedValue > original Data
|
||
if (copyOptions) {
|
||
if (copyOptions.customValue) {
|
||
text = getCustomValue(copyOptions.customValue, valueMap.value, rawData, column);
|
||
}
|
||
else if (copyOptions.useListItemText && (editorOptions === null || editorOptions === void 0 ? void 0 : editorOptions.listItems)) {
|
||
var listItems_1 = editorOptions.listItems;
|
||
var value = valueMap.value;
|
||
var valueList = [value];
|
||
var result_1 = [];
|
||
if (typeof value === 'string') {
|
||
valueList = value.split(',');
|
||
}
|
||
valueList.forEach(function (val) {
|
||
var listItem = common_1.find(function (item) { return item.value === val; }, listItems_1);
|
||
result_1.push(listItem ? listItem.text : val);
|
||
});
|
||
text = result_1.join(',');
|
||
}
|
||
else if (copyOptions.useFormattedValue) {
|
||
text = "" + valueMap.formattedValue;
|
||
}
|
||
}
|
||
if (typeof text === 'undefined' || text === null) {
|
||
return '';
|
||
}
|
||
return String(text);
|
||
}
|
||
function getObservableList(store, filteredViewData, start, end) {
|
||
var rowList = [];
|
||
for (var i = start; i <= end; i += 1) {
|
||
if (!observable_1.isObservable(filteredViewData[i].valueMap)) {
|
||
data_1.makeObservable(store, i, true);
|
||
if (i === end) {
|
||
observable_1.notify(store.data, 'rawData', 'filteredRawData', 'viewData', 'filteredViewData');
|
||
}
|
||
}
|
||
rowList.push(filteredViewData[i]);
|
||
}
|
||
return rowList;
|
||
}
|
||
function getValuesToString(store, ranges) {
|
||
var visibleColumnsWithRowHeader = store.column.visibleColumnsWithRowHeader, _a = store.data, filteredViewData = _a.filteredViewData, filteredRawData = _a.filteredRawData;
|
||
var rowRange = ranges.rowRange, columnRange = ranges.columnRange;
|
||
if (!rowRange || !columnRange) {
|
||
return '';
|
||
}
|
||
var rowList = getObservableList.apply(void 0, tslib_1.__spreadArrays([store, filteredViewData], rowRange));
|
||
var columnInRange = visibleColumnsWithRowHeader.slice(columnRange[0], columnRange[1] + 1);
|
||
return rowList
|
||
.map(function (_a) {
|
||
var valueMap = _a.valueMap;
|
||
return columnInRange
|
||
.map(function (targetColumn) {
|
||
return getTextWithCopyOptionsApplied(valueMap[targetColumn.name], filteredRawData, targetColumn);
|
||
})
|
||
.join('\t');
|
||
})
|
||
.join('\n');
|
||
}
|
||
function getRangeToPaste(store, pasteData) {
|
||
var originalRange = store.selection.originalRange, _a = store.focus, totalColumnIndex = _a.totalColumnIndex, originalRowIndex = _a.originalRowIndex, visibleColumnsWithRowHeader = store.column.visibleColumnsWithRowHeader, viewData = store.data.viewData;
|
||
var startRowIndex, startColumnIndex;
|
||
if (originalRange) {
|
||
startRowIndex = originalRange.row[0];
|
||
startColumnIndex = originalRange.column[0];
|
||
}
|
||
else {
|
||
startRowIndex = originalRowIndex;
|
||
startColumnIndex = totalColumnIndex;
|
||
}
|
||
var endRowIndex = Math.min(pasteData.length + startRowIndex, viewData.length) - 1;
|
||
var endColumnIndex = Math.min(pasteData[0].length + startColumnIndex, visibleColumnsWithRowHeader.length) - 1;
|
||
return {
|
||
row: [startRowIndex, endRowIndex],
|
||
column: [startColumnIndex, endColumnIndex],
|
||
};
|
||
}
|
||
exports.getRangeToPaste = getRangeToPaste;
|
||
function copyDataToRange(range, pasteData) {
|
||
var rowLength = range.row[1] - range.row[0] + 1;
|
||
var colLength = range.column[1] - range.column[0] + 1;
|
||
var dataRowLength = pasteData.length;
|
||
var dataColLength = pasteData[0].length;
|
||
var rowDupCount = Math.floor(rowLength / dataRowLength) - 1;
|
||
var colDupCount = Math.floor(colLength / dataColLength) - 1;
|
||
var result = tslib_1.__spreadArrays(pasteData);
|
||
for (var i = 0; i < rowDupCount; i += 1) {
|
||
pasteData.forEach(function (row) {
|
||
result.push(row.slice(0));
|
||
});
|
||
}
|
||
result.forEach(function (row) {
|
||
var rowData = row.slice(0);
|
||
for (var i = 0; i < colDupCount; i += 1) {
|
||
row.push.apply(row, rowData);
|
||
}
|
||
});
|
||
return result;
|
||
}
|
||
exports.copyDataToRange = copyDataToRange;
|
||
function getText(store, ranges) {
|
||
var _a, _b;
|
||
var originalRange = store.selection.originalRange, _c = store.focus, originalRowIndex = _c.originalRowIndex, totalColumnIndex = _c.totalColumnIndex;
|
||
var rowRange = (_a = ranges === null || ranges === void 0 ? void 0 : ranges.rowRange) !== null && _a !== void 0 ? _a : originalRange === null || originalRange === void 0 ? void 0 : originalRange.row;
|
||
var columnRange = (_b = ranges === null || ranges === void 0 ? void 0 : ranges.columnRange) !== null && _b !== void 0 ? _b : originalRange === null || originalRange === void 0 ? void 0 : originalRange.column;
|
||
// set focus index when there is no selection area
|
||
if (common_1.isNil(rowRange) && !common_1.isNull(originalRowIndex)) {
|
||
rowRange = [originalRowIndex, originalRowIndex];
|
||
}
|
||
if (common_1.isNil(columnRange) && !common_1.isNull(totalColumnIndex)) {
|
||
columnRange = [totalColumnIndex, totalColumnIndex];
|
||
}
|
||
return getValuesToString(store, { rowRange: rowRange, columnRange: columnRange });
|
||
}
|
||
exports.getText = getText;
|
||
|
||
|
||
/***/ }),
|
||
/* 41 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.createAjaxConfig = void 0;
|
||
var tslib_1 = __webpack_require__(1);
|
||
var common_1 = __webpack_require__(0);
|
||
function createAjaxConfig(target) {
|
||
var configKeys = [
|
||
'contentType',
|
||
'withCredentials',
|
||
'mimeType',
|
||
'headers',
|
||
'serializer',
|
||
];
|
||
return common_1.pick.apply(void 0, tslib_1.__spreadArrays([target], configKeys));
|
||
}
|
||
exports.createAjaxConfig = createAjaxConfig;
|
||
|
||
|
||
/***/ }),
|
||
/* 42 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.getListItems = void 0;
|
||
var common_1 = __webpack_require__(0);
|
||
function getListItems(props) {
|
||
var _a = props.columnInfo.editor.options, listItems = _a.listItems, relationListItemMap = _a.relationListItemMap;
|
||
if (!common_1.isEmpty(relationListItemMap) && Array.isArray(relationListItemMap[props.rowKey])) {
|
||
return relationListItemMap[props.rowKey];
|
||
}
|
||
return listItems;
|
||
}
|
||
exports.getListItems = getListItems;
|
||
|
||
|
||
/***/ }),
|
||
/* 43 */
|
||
/***/ (function(module, exports) {
|
||
|
||
module.exports = __WEBPACK_EXTERNAL_MODULE__43__;
|
||
|
||
/***/ }),
|
||
/* 44 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.isEditingCell = exports.isFocusedCell = void 0;
|
||
function isFocusedCell(focus, rowKey, columnName) {
|
||
return rowKey === focus.rowKey && columnName === focus.columnName;
|
||
}
|
||
exports.isFocusedCell = isFocusedCell;
|
||
function isEditingCell(focus, rowKey, columnName) {
|
||
var editingAddress = focus.editingAddress;
|
||
return !!(editingAddress &&
|
||
editingAddress.rowKey === rowKey &&
|
||
editingAddress.columnName === columnName);
|
||
}
|
||
exports.isEditingCell = isEditingCell;
|
||
|
||
|
||
/***/ }),
|
||
/* 45 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.createSortEvent = exports.isCancelSort = void 0;
|
||
var tslib_1 = __webpack_require__(1);
|
||
var gridEvent_1 = tslib_1.__importDefault(__webpack_require__(9));
|
||
var common_1 = __webpack_require__(0);
|
||
function isCancelSort(_a, columnName, ascending, cancelable) {
|
||
var data = _a.data, column = _a.column;
|
||
var index = common_1.findPropIndex('columnName', columnName, data.sortState.columns);
|
||
var defaultAscending = column.allColumnMap[columnName].sortingType === 'asc';
|
||
return cancelable && ascending === defaultAscending && index !== -1;
|
||
}
|
||
exports.isCancelSort = isCancelSort;
|
||
function createSortEvent(eventType, eventParams) {
|
||
var columnName = eventParams.columnName, multiple = eventParams.multiple, ascending = eventParams.ascending;
|
||
var sortState = common_1.deepCopy(eventParams.sortState);
|
||
var props = {};
|
||
/* eslint-disable no-fallthrough */
|
||
switch (eventType) {
|
||
/**
|
||
* Occurs before sorting.
|
||
* @event Grid#beforeSort
|
||
* @property {Object} sortState - Current sort state
|
||
* @property {string} columnName - Target column name
|
||
* @property {boolean} ascending - Next ascending state of a column.
|
||
* If the event is not stopped this ascending state will be applied to grid.
|
||
* @property {boolean} multiple - Whether to use multiple sort
|
||
* @property {Grid} instance - Current grid instance
|
||
*/
|
||
case 'beforeSort':
|
||
props = {
|
||
sortState: sortState,
|
||
columnName: columnName,
|
||
ascending: ascending,
|
||
multiple: multiple,
|
||
};
|
||
break;
|
||
/**
|
||
* Occurs before unsorting.
|
||
* @event Grid#beforeUnsort
|
||
* @property {Object} sortState - Current sort state of the grid
|
||
* @property {string} columnName - Target column name
|
||
* @property {boolean} multiple - Whether to use multiple sort
|
||
* @property {Grid} instance - Current grid instance
|
||
*/
|
||
case 'beforeUnsort':
|
||
props = {
|
||
sortState: sortState,
|
||
columnName: columnName,
|
||
multiple: multiple,
|
||
};
|
||
break;
|
||
/**
|
||
* Occurs after sorting.
|
||
* @deprecated
|
||
* @event Grid#sort
|
||
* @property {Object} sortState - sort state
|
||
* @property {string} columnName - Target column name
|
||
* @property {Grid} instance - Current grid instance
|
||
*/
|
||
case 'sort':
|
||
/**
|
||
* Occurs after sorting.
|
||
* @event Grid#afterSort
|
||
* @property {Object} sortState - sort state
|
||
* @property {string} columnName - Target column name
|
||
* @property {Grid} instance - Current grid instance
|
||
*/
|
||
case 'afterSort':
|
||
/**
|
||
* Occurs after unsorting.
|
||
* @event Grid#afterUnsort
|
||
* @property {Object} sortState - sort state
|
||
* @property {string} columnName - Target column name
|
||
* @property {Grid} instance - Current grid instance
|
||
*/
|
||
case 'afterUnsort':
|
||
props = {
|
||
sortState: sortState,
|
||
columnName: columnName,
|
||
};
|
||
break;
|
||
default: // do nothing
|
||
}
|
||
/* eslint-disable no-fallthrough */
|
||
return new gridEvent_1.default(props);
|
||
}
|
||
exports.createSortEvent = createSortEvent;
|
||
|
||
|
||
/***/ }),
|
||
/* 46 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.extractSummaryColumnContent = exports.castToSummaryColumnContent = exports.calculate = exports.getSummaryValue = void 0;
|
||
var tslib_1 = __webpack_require__(1);
|
||
function assignFilteredSummaryValue(summaryValue) {
|
||
var sum = summaryValue.sum, min = summaryValue.min, max = summaryValue.max, avg = summaryValue.avg, cnt = summaryValue.cnt;
|
||
return {
|
||
filtered: {
|
||
sum: sum,
|
||
min: min,
|
||
max: max,
|
||
avg: avg,
|
||
cnt: cnt,
|
||
},
|
||
};
|
||
}
|
||
function getSummaryValue(columnName, rawData, filteredRawData) {
|
||
var columnValues = rawData.map(function (row) { return row[columnName]; });
|
||
var summaryValue = calculate(columnValues);
|
||
if (rawData.length === filteredRawData.length) {
|
||
return tslib_1.__assign(tslib_1.__assign({}, summaryValue), assignFilteredSummaryValue(summaryValue));
|
||
}
|
||
var filteredColumnValues = filteredRawData.map(function (row) { return row[columnName]; });
|
||
return tslib_1.__assign(tslib_1.__assign({}, summaryValue), assignFilteredSummaryValue(calculate(filteredColumnValues)));
|
||
}
|
||
exports.getSummaryValue = getSummaryValue;
|
||
function calculate(values) {
|
||
var cnt = values.length;
|
||
var min = Number.MAX_VALUE;
|
||
var max = Number.MIN_VALUE;
|
||
var sum = 0;
|
||
var avg = 0;
|
||
for (var i = 0; i < cnt; i += 1) {
|
||
var value = Number(values[i]);
|
||
if (isNaN(value)) {
|
||
value = 0;
|
||
}
|
||
sum += value;
|
||
if (min > value) {
|
||
min = value;
|
||
}
|
||
if (max < value) {
|
||
max = value;
|
||
}
|
||
}
|
||
if (!cnt) {
|
||
max = min = avg = 0;
|
||
}
|
||
else {
|
||
avg = sum / cnt;
|
||
}
|
||
return { sum: sum, min: min, max: max, avg: avg, cnt: cnt };
|
||
}
|
||
exports.calculate = calculate;
|
||
function castToSummaryColumnContent(content) {
|
||
if (!content) {
|
||
return null;
|
||
}
|
||
return typeof content === 'string'
|
||
? { template: content, useAutoSummary: false }
|
||
: {
|
||
template: content.template,
|
||
useAutoSummary: typeof content.useAutoSummary === 'undefined' ? true : content.useAutoSummary,
|
||
};
|
||
}
|
||
exports.castToSummaryColumnContent = castToSummaryColumnContent;
|
||
function extractSummaryColumnContent(content, defaultContent) {
|
||
var summaryColumnContent = null;
|
||
if (content) {
|
||
summaryColumnContent = content;
|
||
}
|
||
else if (!content && defaultContent) {
|
||
summaryColumnContent = defaultContent;
|
||
}
|
||
return summaryColumnContent;
|
||
}
|
||
exports.extractSummaryColumnContent = extractSummaryColumnContent;
|
||
|
||
|
||
/***/ }),
|
||
/* 47 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.create = exports.createSummaryValue = void 0;
|
||
var observable_1 = __webpack_require__(5);
|
||
var summary_1 = __webpack_require__(46);
|
||
var common_1 = __webpack_require__(0);
|
||
function createSummaryValue(content, columnName, data) {
|
||
if (content && content.useAutoSummary) {
|
||
return summary_1.getSummaryValue(columnName, data.rawData, data.filteredRawData);
|
||
}
|
||
return {
|
||
sum: 0,
|
||
min: 0,
|
||
max: 0,
|
||
avg: 0,
|
||
cnt: 0,
|
||
filtered: {
|
||
sum: 0,
|
||
min: 0,
|
||
max: 0,
|
||
avg: 0,
|
||
cnt: 0,
|
||
},
|
||
};
|
||
}
|
||
exports.createSummaryValue = createSummaryValue;
|
||
function create(_a) {
|
||
var column = _a.column, data = _a.data, summary = _a.summary;
|
||
var summaryColumnContents = {};
|
||
var summaryValues = {};
|
||
var orgColumnContent = summary.columnContent, defaultContent = summary.defaultContent;
|
||
if (Object.keys(summary).length) {
|
||
var castedDefaultContent_1 = summary_1.castToSummaryColumnContent(defaultContent || '');
|
||
var columnContent_1 = orgColumnContent || {};
|
||
var summaryColumns = Object.keys(columnContent_1);
|
||
var filteredSummaryColumns = summaryColumns.filter(function (columnName) { return !common_1.someProp('name', columnName, column.allColumns); });
|
||
var targetColumns = castedDefaultContent_1
|
||
? column.allColumns.map(function (_a) {
|
||
var name = _a.name;
|
||
return name;
|
||
}).concat(filteredSummaryColumns)
|
||
: summaryColumns;
|
||
targetColumns.forEach(function (columnName) {
|
||
var castedColumnContent = summary_1.castToSummaryColumnContent(columnContent_1[columnName]);
|
||
var content = summary_1.extractSummaryColumnContent(castedColumnContent, castedDefaultContent_1);
|
||
summaryColumnContents[columnName] = content;
|
||
summaryValues[columnName] = createSummaryValue(content, columnName, data);
|
||
});
|
||
}
|
||
return observable_1.observable({ summaryColumnContents: summaryColumnContents, summaryValues: summaryValues, defaultContent: defaultContent });
|
||
}
|
||
exports.create = create;
|
||
|
||
|
||
/***/ }),
|
||
/* 48 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.createFilterEvent = exports.getFilterState = void 0;
|
||
var tslib_1 = __webpack_require__(1);
|
||
var common_1 = __webpack_require__(0);
|
||
var gridEvent_1 = tslib_1.__importDefault(__webpack_require__(9));
|
||
function getFilterState(store) {
|
||
var filters = store.data.filters;
|
||
if (filters) {
|
||
common_1.deepCopyArray(filters);
|
||
}
|
||
return filters;
|
||
}
|
||
exports.getFilterState = getFilterState;
|
||
function createFilterEvent(_a, eventType, eventParams) {
|
||
var data = _a.data;
|
||
var columnName = eventParams.columnName, type = eventParams.type, conditionFn = eventParams.conditionFn, state = eventParams.state, operator = eventParams.operator;
|
||
var filterState = data.filters ? common_1.deepCopyArray(data.filters) : null;
|
||
var props = {};
|
||
/* eslint-disable no-fallthrough */
|
||
switch (eventType) {
|
||
/**
|
||
* Occurs before filtering.
|
||
* @event Grid#beforeFilter
|
||
* @property {Grid} instance - Current grid instance
|
||
* @property {Object} filterState - Current filter state
|
||
* @property {string} columnName - Target column name
|
||
* @property {string} type - Column Filter type
|
||
* @property {string} operator - Column filter Operator('AND' | 'OR')
|
||
* @property {function} conditionFn - Original function to filter the data in grid.
|
||
* @property {Array} columnFilterState - Next filter state of column which triggers the event.
|
||
* If the event is not stopped this state will be applied to grid.
|
||
*/
|
||
case 'beforeFilter':
|
||
props = {
|
||
filterState: filterState,
|
||
columnFilterState: common_1.deepCopyArray(state),
|
||
conditionFn: conditionFn,
|
||
type: type,
|
||
columnName: columnName,
|
||
operator: operator,
|
||
};
|
||
break;
|
||
/**
|
||
* Occurs before unfiltering
|
||
* @event Grid#beforeUnfilter
|
||
* @property {Grid} instance - Current grid instance
|
||
* @property {string} columnName - Target column name
|
||
* @property {Object} filterState - Current filter state
|
||
*/
|
||
case 'beforeUnfilter':
|
||
/**
|
||
* Occurs after filtering
|
||
* @deprecated
|
||
* @event Grid#filter
|
||
* @property {Grid} instance - Current grid instance
|
||
* @property {string} columnName - Target column name
|
||
* @property {Object} filterState - Current filter state
|
||
*/
|
||
case 'filter':
|
||
/**
|
||
* Occurs after filtering
|
||
* @event Grid#afterFilter
|
||
* @property {Grid} instance - Current grid instance
|
||
* @property {string} columnName - Target column name
|
||
* @property {Object} filterState - Current filter state
|
||
*/
|
||
case 'afterFilter':
|
||
/**
|
||
* Occurs after unfiltering
|
||
* @event Grid#afterUnfilter
|
||
* @property {Grid} instance - Current grid instance
|
||
* @property {string} columnName - Target column name
|
||
* @property {Object} filterState - Current filter state
|
||
*/
|
||
case 'afterUnfilter':
|
||
props = {
|
||
filterState: filterState,
|
||
columnName: columnName,
|
||
};
|
||
break;
|
||
default: // do nothing
|
||
}
|
||
/* eslint-disable no-fallthrough */
|
||
return new gridEvent_1.default(props);
|
||
}
|
||
exports.createFilterEvent = createFilterEvent;
|
||
|
||
|
||
/***/ }),
|
||
/* 49 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.fitRowHeightWhenMovingRow = exports.refreshRowHeight = exports.removeRowHeight = exports.setCellHeight = exports.setHoveredRowKeyByPosition = exports.setHoveredRowKey = void 0;
|
||
var tslib_1 = __webpack_require__(1);
|
||
var observable_1 = __webpack_require__(5);
|
||
var mouse_1 = __webpack_require__(37);
|
||
var common_1 = __webpack_require__(0);
|
||
function setHoveredRowKey(_a, rowKey) {
|
||
var renderState = _a.renderState;
|
||
renderState.hoveredRowKey = rowKey;
|
||
}
|
||
exports.setHoveredRowKey = setHoveredRowKey;
|
||
function setHoveredRowKeyByPosition(store, viewInfo) {
|
||
var renderState = store.renderState, data = store.data, viewport = store.viewport;
|
||
var scrollLeft = viewport.scrollLeft, scrollTop = viewport.scrollTop;
|
||
var rowIndex = mouse_1.findRowIndexByPosition(store, tslib_1.__assign(tslib_1.__assign({}, viewInfo), { scrollLeft: scrollLeft, scrollTop: scrollTop }));
|
||
var rowKey = data.filteredRawData[rowIndex].rowKey;
|
||
if (renderState.hoveredRowKey !== rowKey) {
|
||
setHoveredRowKey(store, rowKey);
|
||
}
|
||
}
|
||
exports.setHoveredRowKeyByPosition = setHoveredRowKeyByPosition;
|
||
function setCellHeight(_a, columnName, rowIndex, height, defaultRowHeight) {
|
||
var renderState = _a.renderState;
|
||
var cellHeightMap = renderState.cellHeightMap;
|
||
if (!cellHeightMap[rowIndex]) {
|
||
cellHeightMap[rowIndex] = {};
|
||
}
|
||
cellHeightMap[rowIndex][columnName] = Math.max(height, defaultRowHeight);
|
||
}
|
||
exports.setCellHeight = setCellHeight;
|
||
function removeRowHeight(_a, rowIndex) {
|
||
var renderState = _a.renderState;
|
||
var cellHeightMap = renderState.cellHeightMap;
|
||
delete cellHeightMap[rowIndex];
|
||
}
|
||
exports.removeRowHeight = removeRowHeight;
|
||
function refreshRowHeight(store, rowIndex, rowHeight) {
|
||
var data = store.data, rowCoords = store.rowCoords, renderState = store.renderState;
|
||
var cellHeightMap = renderState.cellHeightMap;
|
||
var cellHeights = cellHeightMap[rowIndex];
|
||
if (common_1.isUndefined(cellHeights)) {
|
||
return;
|
||
}
|
||
var highestHeight = Object.keys(cellHeights).reduce(function (acc, columnName) { return Math.max(acc, cellHeights[columnName]); }, -1);
|
||
if (rowHeight !== highestHeight) {
|
||
data.rawData[rowIndex]._attributes.height = highestHeight;
|
||
rowCoords.heights[rowIndex] = highestHeight;
|
||
observable_1.notify(rowCoords, 'heights');
|
||
}
|
||
}
|
||
exports.refreshRowHeight = refreshRowHeight;
|
||
function fitRowHeightWhenMovingRow(store, currentIndex, targetIndex) {
|
||
var rowCoords = store.rowCoords, renderState = store.renderState;
|
||
var cellHeightMap = renderState.cellHeightMap;
|
||
if (Object.keys(cellHeightMap).length === 0) {
|
||
return;
|
||
}
|
||
var direction = targetIndex > currentIndex ? 1 : -1;
|
||
var _loop_1 = function (i) {
|
||
var target = i + direction;
|
||
var temp = cellHeightMap[i];
|
||
cellHeightMap[i] = cellHeightMap[target];
|
||
cellHeightMap[target] = temp;
|
||
var highestHeight = Object.keys(cellHeightMap[i]).reduce(function (acc, columnName) { return Math.max(acc, cellHeightMap[i][columnName]); }, -1);
|
||
var targetHighestHeight = Object.keys(cellHeightMap[target]).reduce(function (acc, columnName) { return Math.max(acc, cellHeightMap[target][columnName]); }, -1);
|
||
if (highestHeight !== targetHighestHeight) {
|
||
rowCoords.heights[i] = highestHeight;
|
||
rowCoords.heights[target] = targetHighestHeight;
|
||
}
|
||
};
|
||
for (var i = currentIndex; i !== targetIndex; i += direction) {
|
||
_loop_1(i);
|
||
}
|
||
observable_1.notify(rowCoords, 'heights');
|
||
}
|
||
exports.fitRowHeightWhenMovingRow = fitRowHeightWhenMovingRow;
|
||
|
||
|
||
/***/ }),
|
||
/* 50 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.setAutoBodyHeight = exports.refreshLayout = exports.setHeaderHeight = exports.setOffsetLeft = exports.setOffsetTop = exports.setBodyHeight = exports.setHeight = exports.setWidth = void 0;
|
||
function setWidth(_a, width, autoWidth) {
|
||
var dimension = _a.dimension;
|
||
dimension.autoWidth = autoWidth;
|
||
dimension.width = width;
|
||
}
|
||
exports.setWidth = setWidth;
|
||
function setHeight(_a, height) {
|
||
var dimension = _a.dimension;
|
||
var headerHeight = dimension.headerHeight, summaryHeight = dimension.summaryHeight, tableBorderWidth = dimension.tableBorderWidth;
|
||
dimension.bodyHeight = height - headerHeight - summaryHeight - tableBorderWidth;
|
||
}
|
||
exports.setHeight = setHeight;
|
||
function setBodyHeight(_a, bodyHeight) {
|
||
var dimension = _a.dimension;
|
||
dimension.autoHeight = false;
|
||
dimension.bodyHeight = Math.max(bodyHeight, dimension.minBodyHeight);
|
||
}
|
||
exports.setBodyHeight = setBodyHeight;
|
||
function setOffsetTop(store, offsetTop) {
|
||
store.dimension.offsetTop = offsetTop;
|
||
}
|
||
exports.setOffsetTop = setOffsetTop;
|
||
function setOffsetLeft(store, offsetLeft) {
|
||
store.dimension.offsetLeft = offsetLeft;
|
||
}
|
||
exports.setOffsetLeft = setOffsetLeft;
|
||
function setHeaderHeight(store, height) {
|
||
store.dimension.headerHeight = height;
|
||
}
|
||
exports.setHeaderHeight = setHeaderHeight;
|
||
function refreshLayout(store, containerEl, parentEl) {
|
||
var dimension = store.dimension;
|
||
var autoWidth = dimension.autoWidth, fitToParentHeight = dimension.fitToParentHeight;
|
||
var clientHeight = containerEl.clientHeight, clientWidth = containerEl.clientWidth, scrollTop = containerEl.scrollTop, scrollLeft = containerEl.scrollLeft;
|
||
var _a = containerEl.getBoundingClientRect(), top = _a.top, left = _a.left;
|
||
setOffsetTop(store, top + scrollTop);
|
||
setOffsetLeft(store, left + scrollLeft);
|
||
setWidth(store, clientWidth, autoWidth);
|
||
if (fitToParentHeight && parentEl && parentEl.clientHeight !== clientHeight) {
|
||
setHeight(store, parentEl.clientHeight);
|
||
}
|
||
}
|
||
exports.refreshLayout = refreshLayout;
|
||
function setAutoBodyHeight(_a) {
|
||
var dimension = _a.dimension, rowCoords = _a.rowCoords;
|
||
var totalRowHeight = rowCoords.totalRowHeight;
|
||
var autoHeight = dimension.autoHeight, scrollXHeight = dimension.scrollXHeight, minBodyHeight = dimension.minBodyHeight;
|
||
if (autoHeight) {
|
||
dimension.bodyHeight = Math.max(totalRowHeight + scrollXHeight, minBodyHeight);
|
||
}
|
||
}
|
||
exports.setAutoBodyHeight = setAutoBodyHeight;
|
||
|
||
|
||
/***/ }),
|
||
/* 51 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.HeaderArea = void 0;
|
||
var tslib_1 = __webpack_require__(1);
|
||
var preact_1 = __webpack_require__(3);
|
||
var colGroup_1 = __webpack_require__(38);
|
||
var dom_1 = __webpack_require__(2);
|
||
var hoc_1 = __webpack_require__(4);
|
||
var columnResizer_1 = __webpack_require__(91);
|
||
var instance_1 = __webpack_require__(8);
|
||
var column_1 = __webpack_require__(12);
|
||
var complexHeader_1 = __webpack_require__(92);
|
||
var columnHeader_1 = __webpack_require__(52);
|
||
var constant_1 = __webpack_require__(11);
|
||
var draggable_1 = __webpack_require__(53);
|
||
var common_1 = __webpack_require__(0);
|
||
var gridEvent_1 = tslib_1.__importDefault(__webpack_require__(9));
|
||
var eventBus_1 = __webpack_require__(7);
|
||
var DRAGGING_CLASS = 'dragging';
|
||
var HeaderAreaComp = /** @class */ (function (_super) {
|
||
tslib_1.__extends(HeaderAreaComp, _super);
|
||
function HeaderAreaComp() {
|
||
var _this = _super !== null && _super.apply(this, arguments) || this;
|
||
_this.container = null;
|
||
_this.dragColumnInfo = null;
|
||
_this.floatingColumnWidth = null;
|
||
_this.startSelectedName = null;
|
||
_this.offsetLeft = null;
|
||
_this.movedIndexInfo = null;
|
||
_this.handleDblClick = function (ev) {
|
||
ev.stopPropagation();
|
||
};
|
||
_this.handleMouseMove = function (ev) {
|
||
var store = _this.context.store;
|
||
_this.offsetLeft = ev.offsetX;
|
||
var posInfo = _this.getPosInfo(ev, _this.el);
|
||
var pageX = posInfo.pageX, pageY = posInfo.pageY, scrollTop = posInfo.scrollTop, top = posInfo.top;
|
||
var currentColumnName = draggable_1.getMovedPosAndIndexOfColumn(store, posInfo, _this.offsetLeft).targetColumn.name;
|
||
if (currentColumnName === _this.startSelectedName &&
|
||
column_1.isDraggableColumn(store, currentColumnName) &&
|
||
common_1.findOffsetIndex(store.rowCoords.offsets, pageY - top + scrollTop) > 0) {
|
||
_this.startToDragColumn(posInfo);
|
||
return;
|
||
}
|
||
_this.props.dispatch('dragMoveHeader', { pageX: pageX, pageY: pageY }, _this.startSelectedName);
|
||
};
|
||
_this.handleMouseDown = function (ev) {
|
||
var _a = _this.props, dispatch = _a.dispatch, complexColumnHeaders = _a.complexColumnHeaders;
|
||
var target = ev.target;
|
||
if (dom_1.findParentByClassName(target, 'cell-row-header') ||
|
||
dom_1.hasClass(target, 'btn-sorting') ||
|
||
dom_1.hasClass(target, 'btn-filter') ||
|
||
ev.button === constant_1.RIGHT_MOUSE_BUTTON) {
|
||
return;
|
||
}
|
||
var name = target.getAttribute('data-column-name');
|
||
if (!name) {
|
||
var parent = dom_1.findParentByClassName(target, 'cell-header');
|
||
if (parent) {
|
||
name = parent.getAttribute('data-column-name');
|
||
}
|
||
}
|
||
var parentHeader = column_1.isParentColumnHeader(complexColumnHeaders, name);
|
||
_this.startSelectedName = name;
|
||
dispatch('mouseDownHeader', name, parentHeader);
|
||
document.addEventListener('mousemove', _this.handleMouseMove);
|
||
document.addEventListener('mouseup', _this.clearDocumentEvents);
|
||
document.addEventListener('selectstart', _this.handleSelectStart);
|
||
};
|
||
_this.clearDocumentEvents = function () {
|
||
_this.props.dispatch('dragEnd');
|
||
dom_1.setCursorStyle('');
|
||
document.removeEventListener('mousemove', _this.handleMouseMove);
|
||
document.removeEventListener('mouseup', _this.clearDocumentEvents);
|
||
document.removeEventListener('selectstart', _this.handleSelectStart);
|
||
};
|
||
_this.handleSelectStart = function (ev) {
|
||
ev.preventDefault();
|
||
};
|
||
_this.startToDragColumn = function (posInfo) {
|
||
var _a, _b;
|
||
var dispatch = _this.props.dispatch;
|
||
_this.container = (_b = (_a = _this.el) === null || _a === void 0 ? void 0 : _a.parentElement) === null || _b === void 0 ? void 0 : _b.parentElement;
|
||
posInfo.container = _this.container;
|
||
var draggableInfo = draggable_1.createDraggableColumnInfo(_this.context.store, posInfo);
|
||
var column = draggableInfo.column, columnName = draggableInfo.columnName;
|
||
var gridEvent = new gridEvent_1.default({ columnName: columnName, floatingColumn: column });
|
||
/**
|
||
* Occurs when starting to drag the column
|
||
* @event Grid#dragStart
|
||
* @property {Grid} instance - Current grid instance
|
||
* @property {string} columnName - The column name of the column to drag
|
||
* @property {HTMLElement} floatingColumn - The floating column DOM element
|
||
*/
|
||
_this.props.eventBus.trigger('dragStart', gridEvent);
|
||
if (!gridEvent.isStopped()) {
|
||
_this.container.appendChild(column);
|
||
_this.floatingColumnWidth = column.clientWidth;
|
||
_this.dragColumnInfo = draggableInfo;
|
||
dispatch('addColumnClassName', columnName, DRAGGING_CLASS);
|
||
dispatch('setFocusInfo', null, null, false);
|
||
dispatch('initSelection');
|
||
document.removeEventListener('mousemove', _this.handleMouseMove);
|
||
document.addEventListener('mousemove', _this.dragColumn);
|
||
document.addEventListener('mouseup', _this.dropColumn);
|
||
}
|
||
};
|
||
_this.dragColumn = function (ev) {
|
||
var posInfo = _this.getPosInfo(ev, _this.el);
|
||
var _a = draggable_1.getMovedPosAndIndexOfColumn(_this.context.store, posInfo, _this.offsetLeft, _this.floatingColumnWidth), index = _a.index, offsetLeft = _a.offsetLeft, targetColumn = _a.targetColumn;
|
||
var _b = _this.dragColumnInfo, column = _b.column, columnName = _b.columnName;
|
||
column.style.left = offsetLeft + "px";
|
||
_this.movedIndexInfo = { index: index, columnName: targetColumn.name };
|
||
_this.props.dispatch('moveColumn', columnName, index);
|
||
var gridEvent = new gridEvent_1.default({
|
||
columnName: columnName,
|
||
targetColumnName: targetColumn.name,
|
||
});
|
||
/**
|
||
* Occurs when dragging the column
|
||
* @event Grid#drag
|
||
* @property {Grid} instance - Current grid instance
|
||
* @property {string} columnName - The column name of the dragging column
|
||
* @property {string} targetColumnName - The column name of the column at current dragging position
|
||
*/
|
||
_this.props.eventBus.trigger('drag', gridEvent);
|
||
};
|
||
_this.dropColumn = function () {
|
||
var columnName = _this.dragColumnInfo.columnName;
|
||
if (_this.movedIndexInfo) {
|
||
var _a = _this.movedIndexInfo, index = _a.index, targetColumnName = _a.columnName;
|
||
var gridEvent = new gridEvent_1.default({
|
||
columnName: columnName,
|
||
targetColumnName: targetColumnName,
|
||
});
|
||
/**
|
||
* Occurs when dropping the column
|
||
* @event Grid#drop
|
||
* @property {Grid} instance - Current grid instance
|
||
* @property {string} columnName - The column name of the dragging column
|
||
* @property {string} targetColumnName - The column name of the column at current dragging position
|
||
*/
|
||
_this.props.eventBus.trigger('drop', gridEvent);
|
||
if (!gridEvent.isStopped()) {
|
||
_this.props.dispatch('moveColumn', columnName, index);
|
||
}
|
||
}
|
||
_this.props.dispatch('removeColumnClassName', _this.dragColumnInfo.columnName, DRAGGING_CLASS);
|
||
_this.clearDraggableInfo();
|
||
};
|
||
_this.clearDraggableInfo = function () {
|
||
_this.container.removeChild(_this.dragColumnInfo.column);
|
||
_this.dragColumnInfo = null;
|
||
_this.container = null;
|
||
_this.floatingColumnWidth = null;
|
||
_this.offsetLeft = null;
|
||
_this.movedIndexInfo = null;
|
||
document.removeEventListener('mousemove', _this.dragColumn);
|
||
document.removeEventListener('mouseup', _this.dropColumn);
|
||
};
|
||
return _this;
|
||
}
|
||
HeaderAreaComp.prototype.getPosInfo = function (ev, el) {
|
||
var _a = dom_1.getCoordinateWithOffset(ev.pageX, ev.pageY), pageX = _a[0], pageY = _a[1];
|
||
var scrollTop = el.scrollTop, scrollLeft = el.scrollLeft;
|
||
var _b = el.getBoundingClientRect(), top = _b.top, left = _b.left;
|
||
return { pageX: pageX, pageY: pageY, left: left, top: top, scrollLeft: scrollLeft, scrollTop: scrollTop };
|
||
};
|
||
HeaderAreaComp.prototype.isSelected = function (index) {
|
||
var columnSelectionRange = this.props.columnSelectionRange;
|
||
if (!columnSelectionRange) {
|
||
return false;
|
||
}
|
||
var start = columnSelectionRange[0], end = columnSelectionRange[1];
|
||
return index >= start && index <= end;
|
||
};
|
||
HeaderAreaComp.prototype.componentDidUpdate = function () {
|
||
this.el.scrollLeft = this.props.scrollLeft;
|
||
};
|
||
HeaderAreaComp.prototype.render = function () {
|
||
var _this = this;
|
||
var _a = this.props, columns = _a.columns, headerHeight = _a.headerHeight, side = _a.side, complexColumnHeaders = _a.complexColumnHeaders, grid = _a.grid;
|
||
var headerHeightStyle = { height: headerHeight };
|
||
return (preact_1.h("div", { class: dom_1.cls('header-area'), style: headerHeightStyle, ref: function (el) {
|
||
_this.el = el;
|
||
} },
|
||
preact_1.h("table", { class: dom_1.cls('table'), onMouseDown: this.handleMouseDown },
|
||
preact_1.h(colGroup_1.ColGroup, { side: side, useViewport: false }),
|
||
complexColumnHeaders.length ? (preact_1.h(complexHeader_1.ComplexHeader, { side: side, grid: grid })) : (preact_1.h("tbody", null,
|
||
preact_1.h("tr", { style: headerHeightStyle, onDblClick: this.handleDblClick }, columns.map(function (columnInfo, index) { return (preact_1.h(columnHeader_1.ColumnHeader, { key: columnInfo.name, columnInfo: columnInfo, selected: _this.isSelected(index), grid: grid })); }))))),
|
||
preact_1.h(columnResizer_1.ColumnResizer, { side: side })));
|
||
};
|
||
return HeaderAreaComp;
|
||
}(preact_1.Component));
|
||
exports.HeaderArea = hoc_1.connect(function (store, _a) {
|
||
var side = _a.side;
|
||
var _b = store.column, visibleColumnsBySideWithRowHeader = _b.visibleColumnsBySideWithRowHeader, complexColumnHeaders = _b.complexColumnHeaders, _c = store.dimension, headerHeight = _c.headerHeight, cellBorderWidth = _c.cellBorderWidth, rangeBySide = store.selection.rangeBySide, viewport = store.viewport, id = store.id;
|
||
return {
|
||
headerHeight: headerHeight,
|
||
cellBorderWidth: cellBorderWidth,
|
||
columns: visibleColumnsBySideWithRowHeader[side],
|
||
scrollLeft: side === 'L' ? 0 : viewport.scrollLeft,
|
||
grid: instance_1.getInstance(id),
|
||
columnSelectionRange: rangeBySide && rangeBySide[side].column ? rangeBySide[side].column : null,
|
||
complexColumnHeaders: complexColumnHeaders,
|
||
eventBus: eventBus_1.getEventBus(id),
|
||
};
|
||
})(HeaderAreaComp);
|
||
|
||
|
||
/***/ }),
|
||
/* 52 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.ColumnHeader = void 0;
|
||
var tslib_1 = __webpack_require__(1);
|
||
var preact_1 = __webpack_require__(3);
|
||
var dom_1 = __webpack_require__(2);
|
||
var headerCheckbox_1 = __webpack_require__(93);
|
||
var sortingButton_1 = __webpack_require__(94);
|
||
var sortingOrder_1 = __webpack_require__(95);
|
||
var filterButton_1 = __webpack_require__(96);
|
||
var column_1 = __webpack_require__(10);
|
||
var common_1 = __webpack_require__(0);
|
||
var column_2 = __webpack_require__(12);
|
||
var ColumnHeader = /** @class */ (function (_super) {
|
||
tslib_1.__extends(ColumnHeader, _super);
|
||
function ColumnHeader() {
|
||
return _super !== null && _super.apply(this, arguments) || this;
|
||
}
|
||
ColumnHeader.prototype.getElement = function (type) {
|
||
var columnInfo = this.props.columnInfo;
|
||
var name = columnInfo.name, sortable = columnInfo.sortable, sortingType = columnInfo.sortingType, filter = columnInfo.filter, headerRenderer = columnInfo.headerRenderer, header = columnInfo.header;
|
||
if (headerRenderer) {
|
||
return null;
|
||
}
|
||
switch (type) {
|
||
case 'checkbox':
|
||
return column_1.isCheckboxColumn(name) ? preact_1.h(headerCheckbox_1.HeaderCheckbox, null) : header;
|
||
case 'sortingBtn':
|
||
return sortable && preact_1.h(sortingButton_1.SortingButton, { columnName: name, sortingType: sortingType });
|
||
case 'sortingOrder':
|
||
return sortable && preact_1.h(sortingOrder_1.SortingOrder, { columnName: name });
|
||
case 'filter':
|
||
return filter && preact_1.h(filterButton_1.FilterButton, { columnName: name });
|
||
default:
|
||
return null;
|
||
}
|
||
};
|
||
ColumnHeader.prototype.componentDidMount = function () {
|
||
var _a = this.props, columnInfo = _a.columnInfo, grid = _a.grid;
|
||
var headerRenderer = columnInfo.headerRenderer;
|
||
if (!headerRenderer || !this.el) {
|
||
return;
|
||
}
|
||
var HeaderRendererClass = headerRenderer;
|
||
var renderer = new HeaderRendererClass({ grid: grid, columnInfo: columnInfo });
|
||
var rendererEl = renderer.getElement();
|
||
this.el.appendChild(rendererEl);
|
||
this.renderer = renderer;
|
||
if (common_1.isFunction(renderer.mounted)) {
|
||
renderer.mounted(this.el);
|
||
}
|
||
};
|
||
ColumnHeader.prototype.componentWillReceiveProps = function (nextProps) {
|
||
if (this.renderer) {
|
||
this.renderer.render({ columnInfo: nextProps.columnInfo, grid: nextProps.grid });
|
||
}
|
||
};
|
||
ColumnHeader.prototype.componentWillUnmount = function () {
|
||
if (this.renderer && common_1.isFunction(this.renderer.beforeDestroy)) {
|
||
this.renderer.beforeDestroy();
|
||
}
|
||
};
|
||
ColumnHeader.prototype.render = function () {
|
||
var _this = this;
|
||
var _a = this.props, columnInfo = _a.columnInfo, colspan = _a.colspan, rowspan = _a.rowspan, selected = _a.selected, _b = _a.height, height = _b === void 0 ? null : _b;
|
||
var name = columnInfo.name, textAlign = columnInfo.headerAlign, verticalAlign = columnInfo.headerVAlign, headerRenderer = columnInfo.headerRenderer;
|
||
return (preact_1.h("th", tslib_1.__assign({ ref: function (el) {
|
||
_this.el = el;
|
||
}, "data-column-name": name, style: { textAlign: textAlign, verticalAlign: verticalAlign, padding: headerRenderer ? 0 : null, height: height }, class: dom_1.cls('cell', 'cell-header', [!column_1.isRowHeader(name) && selected, 'cell-selected'], [column_1.isRowHeader(name), 'cell-row-header'], [column_2.isDraggableColumn(this.context.store, name) && !column_1.isRowHeader(name), 'header-draggable']) }, (!!colspan && { colspan: colspan }), (!!rowspan && { rowspan: rowspan })), ['checkbox', 'sortingBtn', 'sortingOrder', 'filter'].map(function (type) { return _this.getElement(type); })));
|
||
};
|
||
return ColumnHeader;
|
||
}(preact_1.Component));
|
||
exports.ColumnHeader = ColumnHeader;
|
||
|
||
|
||
/***/ }),
|
||
/* 53 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.getResolvedOffsets = exports.createFloatingLine = exports.getMovedPosAndIndexOfColumn = exports.getMovedPosAndIndexOfRow = exports.createDraggableColumnInfo = exports.createDraggableRowInfo = exports.createCells = void 0;
|
||
var common_1 = __webpack_require__(0);
|
||
var dom_1 = __webpack_require__(2);
|
||
var data_1 = __webpack_require__(6);
|
||
var mouse_1 = __webpack_require__(37);
|
||
var EXCEED_RATIO = 0.8;
|
||
var ADDITIONAL_HEIGHT = 10;
|
||
function createRow(height) {
|
||
var row = document.createElement('div');
|
||
row.className = dom_1.cls('floating-row');
|
||
row.style.height = height;
|
||
row.style.lineHeight = height;
|
||
row.style.width = 'auto';
|
||
return row;
|
||
}
|
||
function createColumn(height, width) {
|
||
var column = document.createElement('div');
|
||
column.className = dom_1.cls('floating-column');
|
||
column.style.width = width + "px";
|
||
column.style.lineHeight = height + "px";
|
||
return column;
|
||
}
|
||
function createCells(cell) {
|
||
var childLen = cell.childNodes.length;
|
||
var el = document.createElement('div');
|
||
el.className = dom_1.cls('floating-cell', 'cell-header');
|
||
el.style.width = window.getComputedStyle(cell).width;
|
||
for (var i = 0; i < childLen; i += 1) {
|
||
// the cell is not complex structure, so there is no the performance problem
|
||
el.appendChild(cell.childNodes[i].cloneNode(true));
|
||
}
|
||
return el;
|
||
}
|
||
exports.createCells = createCells;
|
||
function createTreeCell(treeColumnName, viewRow) {
|
||
var cell = document.createElement('div');
|
||
var iconStyle = viewRow.treeInfo.leaf ? '' : 'background-position: -39px -35px';
|
||
var span = document.createElement('span');
|
||
span.className = dom_1.cls('floating-tree-cell-content');
|
||
span.textContent = String(viewRow.valueMap[treeColumnName].value);
|
||
cell.className = dom_1.cls('floating-tree-cell');
|
||
cell.innerHTML = "\n <span class=\"" + dom_1.cls('tree-icon') + "\">\n <i style=\"" + iconStyle + "\"></i>\n </span>\n ";
|
||
cell.appendChild(span);
|
||
return cell;
|
||
}
|
||
function createFloatingDraggableRow(store, rowKey, offsetLeft, offsetTop, posInfo) {
|
||
var data = store.data, column = store.column, id = store.id;
|
||
var treeColumnName = column.treeColumnName;
|
||
var cells = common_1.fromArray(posInfo.container.querySelectorAll("[data-row-key=\"" + rowKey + "\"]"));
|
||
// get original table row height
|
||
var height = cells[0].parentElement.clientHeight + "px";
|
||
var row = createRow(height);
|
||
row.style.left = offsetLeft + "px";
|
||
row.style.top = offsetTop + "px";
|
||
if (treeColumnName) {
|
||
var index = data_1.findIndexByRowKey(data, column, id, rowKey);
|
||
var viewRow = data.viewData[index];
|
||
row.appendChild(createTreeCell(treeColumnName, viewRow));
|
||
}
|
||
else {
|
||
cells.forEach(function (cell) {
|
||
row.appendChild(createCells(cell));
|
||
});
|
||
}
|
||
return row;
|
||
}
|
||
function createFloatingDraggableColumn(store, colunmName, posInfo) {
|
||
var cell = posInfo.container.querySelector("[data-column-name=\"" + colunmName + "\"]");
|
||
var clientHeight = cell.clientHeight, clientWidth = cell.clientWidth;
|
||
var left = cell.getBoundingClientRect().left;
|
||
var column = createColumn(clientHeight, clientWidth);
|
||
column.className = dom_1.cls('floating-column');
|
||
column.style.left = left - store.dimension.offsetLeft + "px";
|
||
column.appendChild(createCells(cell));
|
||
return column;
|
||
}
|
||
function createDraggableRowInfo(store, posInfo) {
|
||
var data = store.data, dimension = store.dimension;
|
||
var rawData = data.rawData, filters = data.filters;
|
||
// if there is any filter condition, cannot drag the row
|
||
if (!rawData.length || (filters === null || filters === void 0 ? void 0 : filters.length)) {
|
||
return null;
|
||
}
|
||
var _a = getMovedPosAndIndexOfRow(store, posInfo), offsetLeft = _a.offsetLeft, offsetTop = _a.offsetTop, index = _a.index;
|
||
var _b = rawData[index], rowKey = _b.rowKey, _attributes = _b._attributes;
|
||
var row = createFloatingDraggableRow(store, rowKey, offsetLeft, offsetTop, posInfo);
|
||
return _attributes.disabled
|
||
? null
|
||
: {
|
||
row: row,
|
||
rowKey: rowKey,
|
||
line: createFloatingLine(dimension.scrollYWidth),
|
||
};
|
||
}
|
||
exports.createDraggableRowInfo = createDraggableRowInfo;
|
||
function createDraggableColumnInfo(store, posInfo) {
|
||
var targetColumn = getMovedPosAndIndexOfColumn(store, posInfo).targetColumn;
|
||
var columnName = targetColumn.name;
|
||
var column = createFloatingDraggableColumn(store, columnName, posInfo);
|
||
return { column: column, columnName: columnName, targetColumn: targetColumn };
|
||
}
|
||
exports.createDraggableColumnInfo = createDraggableColumnInfo;
|
||
function getMovedPosAndIndexOfRow(store, _a) {
|
||
var pageX = _a.pageX, pageY = _a.pageY, left = _a.left, top = _a.top, scrollTop = _a.scrollTop;
|
||
var rowCoords = store.rowCoords, dimension = store.dimension, column = store.column, data = store.data;
|
||
var heights = rowCoords.heights, offsets = rowCoords.offsets;
|
||
var rawData = data.rawData;
|
||
var headerHeight = dimension.headerHeight;
|
||
var offsetLeft = pageX - left;
|
||
var offsetTop = pageY - top + scrollTop;
|
||
var index = common_1.findOffsetIndex(rowCoords.offsets, offsetTop);
|
||
// move to next index when exceeding the height with ratio
|
||
if (!column.treeColumnName) {
|
||
if (index < rawData.length - 1 && offsetTop - offsets[index] > heights[index] * EXCEED_RATIO) {
|
||
index += 1;
|
||
}
|
||
}
|
||
var height = offsets[index] - scrollTop + headerHeight;
|
||
var moveToLast = false;
|
||
// resolve the height for moving to last index with tree data
|
||
if (column.treeColumnName) {
|
||
if (rawData.length - 1 === index && offsetTop > offsets[index] + heights[index]) {
|
||
height += heights[index];
|
||
moveToLast = true;
|
||
}
|
||
}
|
||
return {
|
||
index: index,
|
||
height: height,
|
||
offsetLeft: offsetLeft,
|
||
offsetTop: offsetTop - scrollTop + headerHeight,
|
||
targetRow: rawData[index],
|
||
moveToLast: moveToLast,
|
||
};
|
||
}
|
||
exports.getMovedPosAndIndexOfRow = getMovedPosAndIndexOfRow;
|
||
function getMovedPosAndIndexOfColumn(store, _a, offsetLeftOfDragColumn, floatingColumnWidth) {
|
||
var pageX = _a.pageX, pageY = _a.pageY, scrollTop = _a.scrollTop, scrollLeft = _a.scrollLeft;
|
||
var dimension = store.dimension, column = store.column;
|
||
var containerLeft = dimension.offsetLeft, containerWidth = dimension.width;
|
||
var floatingWidth = floatingColumnWidth || 0;
|
||
var offsetLeftOfFloatingColumn = offsetLeftOfDragColumn || 0;
|
||
var viewInfo = { pageX: pageX, pageY: pageY, scrollTop: scrollTop, scrollLeft: scrollLeft };
|
||
var index = mouse_1.findColumnIndexByPosition(store, viewInfo);
|
||
var targetColumn = column.allColumns[index];
|
||
var offsetLeft = pageX - offsetLeftOfFloatingColumn - containerLeft;
|
||
if (offsetLeft < 0) {
|
||
offsetLeft = 0;
|
||
}
|
||
else if (offsetLeft + floatingWidth > containerWidth) {
|
||
offsetLeft = containerWidth - floatingWidth;
|
||
}
|
||
return {
|
||
index: index,
|
||
offsetLeft: offsetLeft,
|
||
targetColumn: targetColumn,
|
||
};
|
||
}
|
||
exports.getMovedPosAndIndexOfColumn = getMovedPosAndIndexOfColumn;
|
||
function createFloatingLine(scrollYWidth) {
|
||
var line = document.createElement('div');
|
||
line.className = dom_1.cls('floating-line');
|
||
line.style.width = "calc(100% - " + scrollYWidth + "px)";
|
||
return line;
|
||
}
|
||
exports.createFloatingLine = createFloatingLine;
|
||
function getResolvedOffsets(_a, _b, _c) {
|
||
var dimension = _a.dimension;
|
||
var offsetLeft = _b.offsetLeft, offsetTop = _b.offsetTop;
|
||
var width = _c.width;
|
||
var bodyWidth = dimension.width, bodyHeight = dimension.bodyHeight, scrollXHeight = dimension.scrollXHeight;
|
||
return {
|
||
offsetLeft: common_1.clamp(offsetLeft, 0, bodyWidth - width),
|
||
offsetTop: common_1.clamp(offsetTop, 0, bodyHeight + scrollXHeight + ADDITIONAL_HEIGHT),
|
||
};
|
||
}
|
||
exports.getResolvedOffsets = getResolvedOffsets;
|
||
|
||
|
||
/***/ }),
|
||
/* 54 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.BodyArea = void 0;
|
||
var tslib_1 = __webpack_require__(1);
|
||
var preact_1 = __webpack_require__(3);
|
||
var draggable_1 = __webpack_require__(53);
|
||
var bodyRows_1 = __webpack_require__(97);
|
||
var colGroup_1 = __webpack_require__(38);
|
||
var dom_1 = __webpack_require__(2);
|
||
var hoc_1 = __webpack_require__(4);
|
||
var focusLayer_1 = __webpack_require__(103);
|
||
var selectionLayer_1 = __webpack_require__(104);
|
||
var common_1 = __webpack_require__(0);
|
||
var editingLayer_1 = __webpack_require__(105);
|
||
var gridEvent_1 = tslib_1.__importDefault(__webpack_require__(9));
|
||
var eventBus_1 = __webpack_require__(7);
|
||
var constant_1 = __webpack_require__(11);
|
||
var focus_1 = __webpack_require__(44);
|
||
// only updates when these props are changed
|
||
// for preventing unnecessary rendering when scroll changes
|
||
var PROPS_FOR_UPDATE = [
|
||
'bodyHeight',
|
||
'totalRowHeight',
|
||
'offsetLeft',
|
||
'offsetTop',
|
||
'totalColumnWidth',
|
||
'visibleTotalWidth',
|
||
];
|
||
// Minimum distance (pixel) to detect if user wants to drag when moving mouse with button pressed.
|
||
var MIN_DISTANCE_FOR_DRAG = 10;
|
||
var ADDITIONAL_RANGE = 3;
|
||
var DRAGGING_CLASS = 'dragging';
|
||
var PARENT_CELL_CLASS = 'parent-cell';
|
||
var DRAGGABLE_COLUMN_NAME = '_draggable';
|
||
var BodyAreaComp = /** @class */ (function (_super) {
|
||
tslib_1.__extends(BodyAreaComp, _super);
|
||
function BodyAreaComp() {
|
||
var _this = _super !== null && _super.apply(this, arguments) || this;
|
||
_this.dragStartData = {
|
||
pageX: null,
|
||
pageY: null,
|
||
};
|
||
_this.prevScrollLeft = 0;
|
||
// draggable info when start to move the row
|
||
_this.draggableInfo = null;
|
||
// floating row width and height for dragging
|
||
_this.floatingRowSize = null;
|
||
// the index info to move row through drag
|
||
_this.movedIndexInfo = null;
|
||
_this.scrollToNextDebounced = common_1.debounce(function () {
|
||
_this.props.dispatch('scrollToNext');
|
||
}, 200);
|
||
_this.handleScroll = function (ev) {
|
||
var _a = ev.target, scrollLeft = _a.scrollLeft, scrollTop = _a.scrollTop, scrollHeight = _a.scrollHeight, clientHeight = _a.clientHeight;
|
||
var _b = _this.props, dispatch = _b.dispatch, eventBus = _b.eventBus, side = _b.side;
|
||
dispatch('setScrollTop', scrollTop);
|
||
if (side === 'R') {
|
||
dispatch('setScrollLeft', scrollLeft);
|
||
if (scrollTop > 0 &&
|
||
scrollHeight - scrollTop === clientHeight &&
|
||
_this.prevScrollLeft === scrollLeft) {
|
||
var gridEvent = new gridEvent_1.default();
|
||
/**
|
||
* Occurs when scroll at the bottommost
|
||
* @event Grid#scrollEnd
|
||
* @property {Grid} instance - Current grid instance
|
||
*/
|
||
eventBus.trigger('scrollEnd', gridEvent);
|
||
_this.scrollToNextDebounced();
|
||
}
|
||
_this.prevScrollLeft = scrollLeft;
|
||
}
|
||
};
|
||
_this.dragRow = function (ev) {
|
||
var _a = dom_1.getCoordinateWithOffset(ev.pageX, ev.pageY), pageX = _a[0], pageY = _a[1];
|
||
if (_this.moveEnoughToTriggerDragEvent({ pageX: pageX, pageY: pageY })) {
|
||
var _b = _this, el = _b.el, boundingRect = _b.boundingRect, props = _b.props;
|
||
var _c = el, scrollTop = _c.scrollTop, scrollLeft = _c.scrollLeft;
|
||
var movedPosAndIndex = draggable_1.getMovedPosAndIndexOfRow(_this.context.store, {
|
||
scrollLeft: scrollLeft,
|
||
scrollTop: scrollTop,
|
||
left: boundingRect.left,
|
||
top: boundingRect.top,
|
||
pageX: pageX,
|
||
pageY: pageY,
|
||
});
|
||
var index = movedPosAndIndex.index, targetRow = movedPosAndIndex.targetRow;
|
||
var rowKeyToMove = targetRow.rowKey;
|
||
var _d = _this.draggableInfo, row = _d.row, rowKey = _d.rowKey;
|
||
var _e = draggable_1.getResolvedOffsets(_this.context.store, movedPosAndIndex, _this.floatingRowSize), offsetLeft = _e.offsetLeft, offsetTop = _e.offsetTop;
|
||
row.style.left = offsetLeft + "px";
|
||
row.style.top = offsetTop + "px";
|
||
if (props.hasTreeColumn) {
|
||
_this.setTreeMovedIndexInfo(movedPosAndIndex);
|
||
}
|
||
else {
|
||
// move the row to next index
|
||
_this.movedIndexInfo = { index: index, rowKey: rowKeyToMove, appended: false };
|
||
_this.props.dispatch('moveRow', rowKey, index);
|
||
}
|
||
var gridEvent = new gridEvent_1.default({
|
||
rowKey: rowKey,
|
||
targetRowKey: _this.movedIndexInfo.rowKey,
|
||
appended: _this.movedIndexInfo.appended,
|
||
});
|
||
/**
|
||
* Occurs when dragging the row
|
||
* @event Grid#drag
|
||
* @property {Grid} instance - Current grid instance
|
||
* @property {RowKey} rowKey - The rowKey of the dragging row
|
||
* @property {RowKey} targetRowKey - The rowKey of the row at current dragging position
|
||
* @property {boolean} appended - Whether the row is appended to other row as the child in tree data.
|
||
*/
|
||
_this.props.eventBus.trigger('drag', gridEvent);
|
||
}
|
||
};
|
||
_this.startToDragRow = function (posInfo) {
|
||
var container = _this.el.parentElement.parentElement;
|
||
posInfo.container = container;
|
||
_this.props.dispatch('resetRowSpan');
|
||
var draggableInfo = draggable_1.createDraggableRowInfo(_this.context.store, posInfo);
|
||
if (draggableInfo) {
|
||
var row = draggableInfo.row, rowKey = draggableInfo.rowKey, line = draggableInfo.line;
|
||
var gridEvent = new gridEvent_1.default({ rowKey: rowKey, floatingRow: row });
|
||
/**
|
||
* Occurs when starting to drag the row
|
||
* @event Grid#dragStart
|
||
* @property {Grid} instance - Current grid instance
|
||
* @property {RowKey} rowKey - The rowKey of the row to drag
|
||
* @property {HTMLElement} floatingRow - The floating row DOM element
|
||
*/
|
||
_this.props.eventBus.trigger('dragStart', gridEvent);
|
||
if (!gridEvent.isStopped()) {
|
||
container.appendChild(row);
|
||
var clientWidth = row.clientWidth, clientHeight = row.clientHeight;
|
||
_this.floatingRowSize = { width: clientWidth, height: clientHeight };
|
||
_this.draggableInfo = draggableInfo;
|
||
if (_this.props.hasTreeColumn) {
|
||
container.appendChild(line);
|
||
}
|
||
_this.props.dispatch('addRowClassName', rowKey, DRAGGING_CLASS);
|
||
_this.props.dispatch('setFocusInfo', null, null, false);
|
||
_this.props.dispatch('initSelection');
|
||
document.addEventListener('mousemove', _this.dragRow);
|
||
document.addEventListener('mouseup', _this.dropRow);
|
||
document.addEventListener('selectstart', _this.handleSelectStart);
|
||
}
|
||
}
|
||
};
|
||
_this.handleMouseDown = function (ev) {
|
||
var _a;
|
||
var targetElement = ev.target;
|
||
if (!_this.el ||
|
||
targetElement === _this.el ||
|
||
(ev.button === constant_1.RIGHT_MOUSE_BUTTON && _this.isSelectedCell(targetElement))) {
|
||
return;
|
||
}
|
||
var _b = _this.props, side = _b.side, dispatch = _b.dispatch;
|
||
if (dom_1.hasClass(targetElement, 'cell-dummy')) {
|
||
dispatch('saveAndFinishEditing');
|
||
dispatch('initFocus');
|
||
dispatch('initSelection');
|
||
return;
|
||
}
|
||
var el = _this.el;
|
||
var shiftKey = ev.shiftKey;
|
||
var _c = dom_1.getCoordinateWithOffset(ev.pageX, ev.pageY), pageX = _c[0], pageY = _c[1];
|
||
var scrollTop = el.scrollTop, scrollLeft = el.scrollLeft;
|
||
var _d = el.getBoundingClientRect(), top = _d.top, left = _d.left;
|
||
_this.boundingRect = { top: top, left: left };
|
||
if (((_a = dom_1.getCellAddress(targetElement)) === null || _a === void 0 ? void 0 : _a.columnName) === DRAGGABLE_COLUMN_NAME) {
|
||
_this.startToDragRow({ pageX: pageX, pageY: pageY, left: left, top: top, scrollLeft: scrollLeft, scrollTop: scrollTop });
|
||
return;
|
||
}
|
||
if (!dom_1.isDatePickerElement(targetElement) &&
|
||
!dom_1.findParentByClassName(targetElement, 'layer-editing')) {
|
||
dispatch('mouseDownBody', tslib_1.__assign({ scrollTop: scrollTop, scrollLeft: scrollLeft, side: side }, _this.boundingRect), { pageX: pageX, pageY: pageY, shiftKey: shiftKey });
|
||
}
|
||
_this.dragStartData = { pageX: pageX, pageY: pageY };
|
||
dom_1.setCursorStyle('default');
|
||
document.addEventListener('mousemove', _this.handleMouseMove);
|
||
document.addEventListener('mouseup', _this.clearDocumentEvents);
|
||
document.addEventListener('selectstart', _this.handleSelectStart);
|
||
};
|
||
_this.moveEnoughToTriggerDragEvent = function (current) {
|
||
var dx = Math.abs(_this.dragStartData.pageX - current.pageX);
|
||
var dy = Math.abs(_this.dragStartData.pageY - current.pageY);
|
||
var movedDistance = Math.round(Math.sqrt(Math.pow(dx, 2) + Math.pow(dy, 2)));
|
||
return movedDistance >= MIN_DISTANCE_FOR_DRAG;
|
||
};
|
||
_this.handleSelectStart = function (ev) {
|
||
ev.preventDefault();
|
||
};
|
||
_this.handleMouseMove = function (ev) {
|
||
var _a = dom_1.getCoordinateWithOffset(ev.pageX, ev.pageY), pageX = _a[0], pageY = _a[1];
|
||
if (_this.moveEnoughToTriggerDragEvent({ pageX: pageX, pageY: pageY })) {
|
||
var _b = _this, el = _b.el, boundingRect = _b.boundingRect, props = _b.props;
|
||
var _c = el, scrollTop = _c.scrollTop, scrollLeft = _c.scrollLeft;
|
||
var side = props.side, dispatch = props.dispatch;
|
||
dispatch('dragMoveBody', _this.dragStartData, { pageX: pageX, pageY: pageY }, tslib_1.__assign({ scrollTop: scrollTop, scrollLeft: scrollLeft, side: side }, boundingRect));
|
||
}
|
||
};
|
||
_this.dropRow = function () {
|
||
var _a;
|
||
var hasTreeColumn = _this.props.hasTreeColumn;
|
||
var rowKey = _this.draggableInfo.rowKey;
|
||
if (_this.movedIndexInfo) {
|
||
var _b = _this.movedIndexInfo, index = _b.index, targetRowKey = _b.rowKey, appended = _b.appended, _c = _b.moveToLast, moveToLast = _c === void 0 ? false : _c;
|
||
var gridEvent = new gridEvent_1.default({ rowKey: rowKey, targetRowKey: targetRowKey, appended: appended });
|
||
/**
|
||
* Occurs when dropping the row
|
||
* @event Grid#drop
|
||
* @property {Grid} instance - Current grid instance
|
||
* @property {RowKey} rowKey - The rowKey of the dragging row
|
||
* @property {RowKey} targetRowKey - The rowKey of the row at current dragging position
|
||
* @property {boolean} appended - Whether the row is appended to other row as the child in tree data.
|
||
*/
|
||
_this.props.eventBus.trigger('drop', gridEvent);
|
||
if (!gridEvent.isStopped()) {
|
||
if (hasTreeColumn) {
|
||
_this.props.dispatch('moveTreeRow', rowKey, index, { appended: appended, moveToLast: moveToLast });
|
||
}
|
||
else {
|
||
_this.props.dispatch('moveRow', rowKey, index);
|
||
}
|
||
}
|
||
}
|
||
_this.props.dispatch('removeRowClassName', rowKey, DRAGGING_CLASS);
|
||
if (!common_1.isNil((_a = _this.movedIndexInfo) === null || _a === void 0 ? void 0 : _a.rowKey)) {
|
||
_this.props.dispatch('removeRowClassName', _this.movedIndexInfo.rowKey, PARENT_CELL_CLASS);
|
||
}
|
||
// clear floating element and draggable info
|
||
_this.clearDraggableInfo();
|
||
_this.props.dispatch('updateRowSpan');
|
||
};
|
||
_this.clearDocumentEvents = function () {
|
||
_this.dragStartData = { pageX: null, pageY: null };
|
||
_this.props.dispatch('dragEnd');
|
||
dom_1.setCursorStyle('');
|
||
document.removeEventListener('mousemove', _this.handleMouseMove);
|
||
document.removeEventListener('mouseup', _this.clearDocumentEvents);
|
||
document.removeEventListener('selectstart', _this.handleSelectStart);
|
||
};
|
||
return _this;
|
||
}
|
||
BodyAreaComp.prototype.setTreeMovedIndexInfo = function (movedPosAndIndex) {
|
||
var _a;
|
||
var line = this.draggableInfo.line;
|
||
var index = movedPosAndIndex.index, offsetTop = movedPosAndIndex.offsetTop, height = movedPosAndIndex.height, targetRow = movedPosAndIndex.targetRow, moveToLast = movedPosAndIndex.moveToLast;
|
||
var rowKey = targetRow.rowKey;
|
||
if (!common_1.isNil((_a = this.movedIndexInfo) === null || _a === void 0 ? void 0 : _a.rowKey)) {
|
||
this.props.dispatch('removeRowClassName', this.movedIndexInfo.rowKey, PARENT_CELL_CLASS);
|
||
}
|
||
var targetRowKey = moveToLast ? null : rowKey;
|
||
// display line border to mark the index to move
|
||
if (Math.abs(height - offsetTop) < ADDITIONAL_RANGE || moveToLast) {
|
||
line.style.top = height + "px";
|
||
line.style.display = 'block';
|
||
this.movedIndexInfo = { index: index, rowKey: targetRowKey, moveToLast: moveToLast, appended: false };
|
||
// show the background color to mark parent row
|
||
}
|
||
else {
|
||
line.style.display = 'none';
|
||
this.movedIndexInfo = { index: index, rowKey: targetRowKey, appended: true };
|
||
this.props.dispatch('addRowClassName', rowKey, PARENT_CELL_CLASS);
|
||
}
|
||
};
|
||
BodyAreaComp.prototype.isSelectedCell = function (element) {
|
||
var cellAddress = dom_1.getCellAddress(element);
|
||
if (cellAddress) {
|
||
var rowKey = cellAddress.rowKey, columnName = cellAddress.columnName;
|
||
return focus_1.isFocusedCell(this.context.store.focus, rowKey, columnName);
|
||
}
|
||
return !!dom_1.findParentByClassName(element, 'layer-selection');
|
||
};
|
||
BodyAreaComp.prototype.clearDraggableInfo = function () {
|
||
var _a = this.draggableInfo, row = _a.row, line = _a.line;
|
||
row.parentElement.removeChild(row);
|
||
if (this.props.hasTreeColumn) {
|
||
line.parentElement.removeChild(line);
|
||
}
|
||
this.draggableInfo = null;
|
||
this.movedIndexInfo = null;
|
||
document.removeEventListener('mousemove', this.dragRow);
|
||
document.removeEventListener('mouseup', this.dropRow);
|
||
document.removeEventListener('selectstart', this.handleSelectStart);
|
||
};
|
||
BodyAreaComp.prototype.shouldComponentUpdate = function (nextProps) {
|
||
var currProps = this.props;
|
||
return common_1.some(function (propName) { return nextProps[propName] !== currProps[propName]; }, PROPS_FOR_UPDATE);
|
||
};
|
||
BodyAreaComp.prototype.componentWillReceiveProps = function (nextProps) {
|
||
var scrollTop = nextProps.scrollTop, scrollLeft = nextProps.scrollLeft;
|
||
this.el.scrollTop = scrollTop;
|
||
this.el.scrollLeft = scrollLeft;
|
||
};
|
||
BodyAreaComp.prototype.render = function (_a) {
|
||
var _this = this;
|
||
var side = _a.side, bodyHeight = _a.bodyHeight, totalRowHeight = _a.totalRowHeight, totalColumnWidth = _a.totalColumnWidth, scrollXHeight = _a.scrollXHeight, offsetTop = _a.offsetTop, offsetLeft = _a.offsetLeft, dummyRowCount = _a.dummyRowCount, scrollX = _a.scrollX, scrollY = _a.scrollY, cellBorderWidth = _a.cellBorderWidth, visibleTotalWidth = _a.visibleTotalWidth;
|
||
var areaStyle = { height: bodyHeight };
|
||
if (!scrollX) {
|
||
areaStyle.overflowX = 'hidden';
|
||
}
|
||
if (!scrollY && side === 'R') {
|
||
areaStyle.overflowY = 'hidden';
|
||
}
|
||
var tableContainerStyle = {
|
||
width: visibleTotalWidth,
|
||
top: offsetTop,
|
||
left: offsetLeft,
|
||
height: dummyRowCount ? bodyHeight - scrollXHeight : '',
|
||
overflow: dummyRowCount ? 'hidden' : 'visible',
|
||
};
|
||
var containerStyle = {
|
||
width: totalColumnWidth + (side === 'R' ? 0 : cellBorderWidth),
|
||
height: totalRowHeight ? totalRowHeight + cellBorderWidth : '100%',
|
||
};
|
||
return (preact_1.h("div", { class: dom_1.cls('body-area'), style: areaStyle, onScroll: this.handleScroll, onMouseDown: this.handleMouseDown, ref: function (el) {
|
||
_this.el = el;
|
||
} },
|
||
preact_1.h("div", { class: dom_1.cls('body-container'), style: containerStyle },
|
||
preact_1.h("div", { class: dom_1.cls('table-container'), style: tableContainerStyle },
|
||
preact_1.h("table", { class: dom_1.cls('table') },
|
||
preact_1.h(colGroup_1.ColGroup, { side: side, useViewport: true }),
|
||
preact_1.h(bodyRows_1.BodyRows, { side: side }))),
|
||
preact_1.h(focusLayer_1.FocusLayer, { side: side }),
|
||
preact_1.h(selectionLayer_1.SelectionLayer, { side: side }),
|
||
preact_1.h(editingLayer_1.EditingLayer, { side: side }))));
|
||
};
|
||
return BodyAreaComp;
|
||
}(preact_1.Component));
|
||
exports.BodyArea = hoc_1.connect(function (store, _a) {
|
||
var _b;
|
||
var side = _a.side;
|
||
var columnCoords = store.columnCoords, rowCoords = store.rowCoords, dimension = store.dimension, viewport = store.viewport, id = store.id, column = store.column;
|
||
var totalRowHeight = rowCoords.totalRowHeight;
|
||
var totalColumnWidth = columnCoords.totalColumnWidth, widths = columnCoords.widths;
|
||
var bodyHeight = dimension.bodyHeight, scrollXHeight = dimension.scrollXHeight, scrollX = dimension.scrollX, scrollY = dimension.scrollY, cellBorderWidth = dimension.cellBorderWidth;
|
||
var offsetLeft = viewport.offsetLeft, offsetTop = viewport.offsetTop, scrollTop = viewport.scrollTop, scrollLeft = viewport.scrollLeft, dummyRowCount = viewport.dummyRowCount, colRange = viewport.colRange, columns = viewport.columns;
|
||
var visibleWidths = side === 'R' ? (_b = widths[side]).slice.apply(_b, colRange) : widths[side];
|
||
var visibleColumns = side === 'R' ? columns : column.visibleColumnsBySideWithRowHeader[side];
|
||
var visibleTotalWidth = visibleColumns.reduce(function (acc, _, idx) { return acc + visibleWidths[idx] + cellBorderWidth; }, 0);
|
||
return {
|
||
bodyHeight: bodyHeight,
|
||
totalRowHeight: totalRowHeight,
|
||
offsetTop: offsetTop,
|
||
scrollTop: scrollTop,
|
||
totalColumnWidth: totalColumnWidth[side],
|
||
offsetLeft: side === 'L' ? 0 : offsetLeft,
|
||
scrollLeft: side === 'L' ? 0 : scrollLeft,
|
||
scrollXHeight: scrollXHeight,
|
||
dummyRowCount: dummyRowCount,
|
||
scrollX: scrollX,
|
||
scrollY: scrollY,
|
||
cellBorderWidth: cellBorderWidth,
|
||
eventBus: eventBus_1.getEventBus(id),
|
||
hasTreeColumn: !!column.treeColumnName,
|
||
visibleTotalWidth: visibleTotalWidth,
|
||
};
|
||
})(BodyAreaComp);
|
||
|
||
|
||
/***/ }),
|
||
/* 55 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.SummaryArea = void 0;
|
||
var tslib_1 = __webpack_require__(1);
|
||
var preact_1 = __webpack_require__(3);
|
||
var colGroup_1 = __webpack_require__(38);
|
||
var summaryBodyRow_1 = __webpack_require__(106);
|
||
var dom_1 = __webpack_require__(2);
|
||
var hoc_1 = __webpack_require__(4);
|
||
var SummaryAreaComp = /** @class */ (function (_super) {
|
||
tslib_1.__extends(SummaryAreaComp, _super);
|
||
function SummaryAreaComp() {
|
||
var _this = _super !== null && _super.apply(this, arguments) || this;
|
||
_this.handleScroll = function (ev) {
|
||
var scrollLeft = ev.target.scrollLeft;
|
||
var _a = _this.props, dispatch = _a.dispatch, side = _a.side;
|
||
if (side === 'R') {
|
||
dispatch('setScrollLeft', scrollLeft);
|
||
}
|
||
};
|
||
return _this;
|
||
}
|
||
SummaryAreaComp.prototype.componentWillReceiveProps = function (nextProps) {
|
||
if (this.el) {
|
||
this.el.scrollLeft = nextProps.scrollLeft;
|
||
}
|
||
};
|
||
SummaryAreaComp.prototype.render = function (_a) {
|
||
var _this = this;
|
||
var height = _a.height, columns = _a.columns, side = _a.side;
|
||
var tableStyle = { height: height };
|
||
return (height > 0 && (preact_1.h("div", { class: dom_1.cls('summary-area'), onScroll: this.handleScroll, ref: function (el) {
|
||
_this.el = el;
|
||
} },
|
||
preact_1.h("table", { class: dom_1.cls('table'), style: tableStyle },
|
||
preact_1.h(colGroup_1.ColGroup, { side: side, useViewport: false }),
|
||
preact_1.h(summaryBodyRow_1.SummaryBodyRow, { columns: columns })))));
|
||
};
|
||
return SummaryAreaComp;
|
||
}(preact_1.Component));
|
||
exports.SummaryArea = hoc_1.connect(function (store, _a) {
|
||
var side = _a.side;
|
||
var column = store.column, dimension = store.dimension, viewport = store.viewport;
|
||
var summaryHeight = dimension.summaryHeight;
|
||
var scrollLeft = viewport.scrollLeft;
|
||
return {
|
||
height: summaryHeight,
|
||
columns: column.visibleColumnsBySideWithRowHeader[side],
|
||
scrollLeft: scrollLeft,
|
||
};
|
||
})(SummaryAreaComp);
|
||
|
||
|
||
/***/ }),
|
||
/* 56 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.ContextMenu = exports.ContextMenuComp = void 0;
|
||
var tslib_1 = __webpack_require__(1);
|
||
var preact_1 = __webpack_require__(3);
|
||
var hoc_1 = __webpack_require__(4);
|
||
var dom_1 = __webpack_require__(2);
|
||
var contextMenuItem_1 = __webpack_require__(116);
|
||
var ContextMenuComp = /** @class */ (function (_super) {
|
||
tslib_1.__extends(ContextMenuComp, _super);
|
||
function ContextMenuComp() {
|
||
return _super !== null && _super.apply(this, arguments) || this;
|
||
}
|
||
ContextMenuComp.prototype.render = function () {
|
||
var _a = this.props, pos = _a.pos, menuItems = _a.menuItems;
|
||
if (pos) {
|
||
return (preact_1.h("ul", { class: dom_1.cls('context-menu'), style: pos }, menuItems.map(function (menuItem) { return (preact_1.h(contextMenuItem_1.ContextMenuItem, { key: menuItem.name, menuItem: menuItem })); })));
|
||
}
|
||
return null;
|
||
};
|
||
return ContextMenuComp;
|
||
}(preact_1.Component));
|
||
exports.ContextMenuComp = ContextMenuComp;
|
||
exports.ContextMenu = hoc_1.connect(function (_a, _b) {
|
||
var _c, _d;
|
||
var contextMenu = _a.contextMenu;
|
||
var menuItems = _b.menuItems, pos = _b.pos;
|
||
return ({
|
||
pos: pos || ((_d = (_c = contextMenu === null || contextMenu === void 0 ? void 0 : contextMenu.posInfo) === null || _c === void 0 ? void 0 : _c.pos) !== null && _d !== void 0 ? _d : null),
|
||
menuItems: menuItems || (contextMenu === null || contextMenu === void 0 ? void 0 : contextMenu.flattenTopMenuItems),
|
||
});
|
||
})(ContextMenuComp);
|
||
|
||
|
||
/***/ }),
|
||
/* 57 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.execCopy = void 0;
|
||
var dom_1 = __webpack_require__(2);
|
||
var clipboard_1 = __webpack_require__(40);
|
||
var instance_1 = __webpack_require__(8);
|
||
function execCopy(store, ranges) {
|
||
var el = instance_1.getInstance(store.id).el;
|
||
var targetText = clipboard_1.getText(store, ranges);
|
||
var clipboard = el.querySelector("." + dom_1.cls('clipboard'));
|
||
clipboard.innerHTML = targetText;
|
||
if (dom_1.isSupportWindowClipboardData()) {
|
||
dom_1.setClipboardSelection(clipboard.childNodes[0]);
|
||
}
|
||
// Accessing the clipboard is a security concern on chrome
|
||
document.execCommand('copy');
|
||
}
|
||
exports.execCopy = execCopy;
|
||
|
||
|
||
/***/ }),
|
||
/* 58 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.execExport = void 0;
|
||
var tslib_1 = __webpack_require__(1);
|
||
var XLSX = tslib_1.__importStar(__webpack_require__(127));
|
||
var common_1 = __webpack_require__(0);
|
||
var export_1 = __webpack_require__(128);
|
||
var eventBus_1 = __webpack_require__(7);
|
||
var browser_1 = __webpack_require__(39);
|
||
function getExportDataAndColumnsAndOptions(store, options) {
|
||
var _a = options || {}, _b = _a.includeHeader, includeHeader = _b === void 0 ? true : _b, _c = _a.includeHiddenColumns, includeHiddenColumns = _c === void 0 ? false : _c, _d = _a.onlySelected, onlySelected = _d === void 0 ? false : _d, _e = _a.onlyFiltered, onlyFiltered = _e === void 0 ? true : _e, _f = _a.delimiter, delimiter = _f === void 0 ? ',' : _f, _g = _a.fileName, fileName = _g === void 0 ? 'grid-export' : _g, _h = _a.useFormattedValue, useFormattedValue = _h === void 0 ? false : _h;
|
||
var _j = store.data, rawData = _j.rawData, filteredRawData = _j.filteredRawData, column = store.column, originalRange = store.selection.originalRange;
|
||
var _k = export_1.getNamesAndHeadersOfColumnsByOptions(column, (options === null || options === void 0 ? void 0 : options.columnNames) || [], includeHiddenColumns, onlySelected, originalRange), columnHeaders = _k.targetColumnHeaders, columnNames = _k.targetColumnNames;
|
||
var data = export_1.getTargetData(store, onlyFiltered ? filteredRawData : rawData, columnNames, onlySelected, useFormattedValue);
|
||
var exportOptions = {
|
||
includeHeader: includeHeader,
|
||
includeHiddenColumns: includeHiddenColumns,
|
||
onlySelected: onlySelected,
|
||
onlyFiltered: onlyFiltered,
|
||
delimiter: delimiter,
|
||
fileName: fileName,
|
||
columnNames: columnNames,
|
||
};
|
||
return { data: data, columnHeaders: columnHeaders, columnNames: columnNames, exportOptions: exportOptions };
|
||
}
|
||
function emitExportEvent(store, eventType, eventParams) {
|
||
var eventBus = eventBus_1.getEventBus(store.id);
|
||
var gridEvent = export_1.createExportEvent(eventType, eventParams);
|
||
eventBus.trigger(eventType, gridEvent);
|
||
return gridEvent;
|
||
}
|
||
function getMergeRelationship(complexColumnHeaderData) {
|
||
var merges = [];
|
||
var numOfRow = complexColumnHeaderData.length;
|
||
var numOfColumn = complexColumnHeaderData[0].length;
|
||
complexColumnHeaderData.forEach(function (row, rowIndex) {
|
||
row.forEach(function (currentName, colIndex) {
|
||
if (currentName) {
|
||
var merge = { s: { r: rowIndex, c: colIndex }, e: { r: rowIndex, c: colIndex } };
|
||
var mergeRowNum = void 0, mergeColNum = void 0;
|
||
for (mergeRowNum = rowIndex + 1; mergeRowNum < numOfRow; mergeRowNum += 1) {
|
||
if (complexColumnHeaderData[mergeRowNum][colIndex] === currentName) {
|
||
complexColumnHeaderData[mergeRowNum][colIndex] = '';
|
||
merge.e.r += 1;
|
||
}
|
||
else {
|
||
break;
|
||
}
|
||
}
|
||
for (mergeColNum = colIndex + 1; mergeColNum < numOfColumn; mergeColNum += 1) {
|
||
if (complexColumnHeaderData[mergeRowNum - 1][mergeColNum] === currentName) {
|
||
complexColumnHeaderData[mergeRowNum - 1][mergeColNum] = '';
|
||
merge.e.c += 1;
|
||
}
|
||
else {
|
||
break;
|
||
}
|
||
}
|
||
complexColumnHeaderData[rowIndex][colIndex] = '';
|
||
if (merge.s.r !== merge.e.r || merge.s.c !== merge.e.c) {
|
||
merges.push(merge);
|
||
}
|
||
}
|
||
});
|
||
});
|
||
return merges;
|
||
}
|
||
function exportCSV(fileName, targetText) {
|
||
var targetBlob = new Blob(["\uFEFF" + targetText], { type: 'text/csv;charset=utf-8;' });
|
||
browser_1.downloadBlob(targetBlob, fileName);
|
||
}
|
||
function exportExcel(fileName, targetArray, complexColumnHeaderData) {
|
||
var wb = XLSX.utils.book_new();
|
||
var ws = XLSX.utils.aoa_to_sheet(targetArray);
|
||
if (complexColumnHeaderData) {
|
||
ws['!merges'] = getMergeRelationship(complexColumnHeaderData);
|
||
}
|
||
XLSX.utils.book_append_sheet(wb, ws);
|
||
XLSX.writeFile(wb, fileName + ".xlsx");
|
||
}
|
||
function exportCallback(data, format, options, complexHeaderData) {
|
||
var _a = options || {}, _b = _a.delimiter, delimiter = _b === void 0 ? ',' : _b, _c = _a.fileName, fileName = _c === void 0 ? 'grid-export' : _c;
|
||
if (format === 'csv') {
|
||
var targetText = common_1.convertDataToText(data, delimiter);
|
||
exportCSV(fileName, targetText);
|
||
}
|
||
else {
|
||
if (!(XLSX === null || XLSX === void 0 ? void 0 : XLSX.writeFile)) {
|
||
// eslint-disable-next-line no-console
|
||
console.error('[tui/grid] - Not found the dependency "xlsx". You should install the "xlsx" to export the data as Excel format');
|
||
return;
|
||
}
|
||
exportExcel(fileName, data, complexHeaderData);
|
||
}
|
||
}
|
||
function execExport(store, format, options) {
|
||
var _a = getExportDataAndColumnsAndOptions(store, options), data = _a.data, columnHeaders = _a.columnHeaders, columnNames = _a.columnNames, exportOptions = _a.exportOptions;
|
||
var includeHeader = exportOptions.includeHeader, delimiter = exportOptions.delimiter, fileName = exportOptions.fileName;
|
||
var column = store.column;
|
||
var targetData = data.slice(0);
|
||
if (format === 'csv') {
|
||
if (includeHeader && column.complexColumnHeaders.length === 0) {
|
||
targetData.unshift(columnHeaders);
|
||
}
|
||
var exportFn = function (exportingData) {
|
||
return exportCallback(exportingData, 'csv', exportOptions);
|
||
};
|
||
var gridEvent = emitExportEvent(store, 'beforeExport', {
|
||
exportFormat: format,
|
||
exportOptions: exportOptions,
|
||
data: targetData,
|
||
exportFn: exportFn,
|
||
});
|
||
if (gridEvent.isStopped()) {
|
||
return;
|
||
}
|
||
var targetText = common_1.convertDataToText(targetData, delimiter);
|
||
exportCSV(fileName, targetText);
|
||
}
|
||
else {
|
||
if (!(XLSX === null || XLSX === void 0 ? void 0 : XLSX.writeFile)) {
|
||
// eslint-disable-next-line no-console
|
||
console.error('[tui/grid] - Not found the dependency "xlsx". You should install the "xlsx" to export the data as Excel format');
|
||
return;
|
||
}
|
||
var complexHeaderData_1 = null;
|
||
if (includeHeader) {
|
||
if (column.complexColumnHeaders.length > 0) {
|
||
complexHeaderData_1 = export_1.getHeaderDataFromComplexColumn(column, columnNames);
|
||
targetData = complexHeaderData_1.concat(targetData);
|
||
}
|
||
else {
|
||
targetData.unshift(columnHeaders);
|
||
}
|
||
}
|
||
var exportFn = function (exportingData) {
|
||
return exportCallback(exportingData, 'xlsx', exportOptions, complexHeaderData_1);
|
||
};
|
||
var gridEvent = emitExportEvent(store, 'beforeExport', {
|
||
exportFormat: format,
|
||
exportOptions: exportOptions,
|
||
data: targetData,
|
||
exportFn: exportFn,
|
||
});
|
||
if (gridEvent.isStopped()) {
|
||
return;
|
||
}
|
||
exportExcel(fileName, targetData, complexHeaderData_1);
|
||
}
|
||
emitExportEvent(store, 'afterExport', {
|
||
exportFormat: format,
|
||
exportOptions: exportOptions,
|
||
data: targetData,
|
||
});
|
||
}
|
||
exports.execExport = execExport;
|
||
|
||
|
||
/***/ }),
|
||
/* 59 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.gridAjax = void 0;
|
||
var tslib_1 = __webpack_require__(1);
|
||
var serializer_1 = __webpack_require__(136);
|
||
var gridEvent_1 = tslib_1.__importDefault(__webpack_require__(9));
|
||
var common_1 = __webpack_require__(0);
|
||
var ENCODED_SPACE_REGEXP = /%20/g;
|
||
var QS_DELIM_REGEXP = /\?/;
|
||
function hasRequestBody(method) {
|
||
return /^(?:POST|PUT|PATCH)$/.test(method.toUpperCase());
|
||
}
|
||
function getSerialized(params, serializer) {
|
||
return common_1.isFunction(serializer) ? serializer(params) : serializer_1.serialize(params);
|
||
}
|
||
function handleReadyStateChange(xhr, options) {
|
||
var eventBus = options.eventBus, success = options.success, preCallback = options.preCallback, postCallback = options.postCallback;
|
||
// eslint-disable-next-line eqeqeq
|
||
if (xhr.readyState != XMLHttpRequest.DONE) {
|
||
return;
|
||
}
|
||
preCallback();
|
||
var gridEvent = new gridEvent_1.default({ xhr: xhr });
|
||
/**
|
||
* Occurs when the response is received from the server
|
||
* @event Grid#response
|
||
* @type {module:event/gridEvent}
|
||
* @property {XmlHttpRequest} xhr - XmlHttpRequest
|
||
* @property {Grid} instance - Current grid instance
|
||
*/
|
||
eventBus.trigger('response', gridEvent);
|
||
if (gridEvent.isStopped()) {
|
||
return;
|
||
}
|
||
if (xhr.status === 200) {
|
||
var response = JSON.parse(xhr.responseText);
|
||
if (response.result) {
|
||
/**
|
||
* Occurs after the response event, if the result is true
|
||
* @event Grid#successResponse
|
||
* @type {module:event/gridEvent}
|
||
* @property {XmlHttpRequest} xhr - XmlHttpRequest
|
||
* @property {Grid} instance - Current grid instance
|
||
*/
|
||
eventBus.trigger('successResponse', gridEvent);
|
||
if (gridEvent.isStopped()) {
|
||
return;
|
||
}
|
||
success(response);
|
||
}
|
||
else if (!response.result) {
|
||
/**
|
||
* Occurs after the response event, if the result is false
|
||
* @event Grid#failResponse
|
||
* @type {module:event/gridEvent}
|
||
* @property {XmlHttpRequest} xhr - XmlHttpRequest
|
||
* @property {Grid} instance - Current grid instance
|
||
*/
|
||
eventBus.trigger('failResponse', gridEvent);
|
||
if (gridEvent.isStopped()) {
|
||
return;
|
||
}
|
||
}
|
||
}
|
||
else {
|
||
/**
|
||
* Occurs after the response event, if the response is Error
|
||
* @event Grid#errorResponse
|
||
* @type {module:event/gridEvent}
|
||
* @property {XmlHttpRequest} xhr - XmlHttpRequest
|
||
* @property {Grid} instance - Current grid instance
|
||
*/
|
||
eventBus.trigger('errorResponse', gridEvent);
|
||
if (gridEvent.isStopped()) {
|
||
return;
|
||
}
|
||
}
|
||
postCallback();
|
||
}
|
||
function open(xhr, options) {
|
||
var url = options.url, method = options.method, serializer = options.serializer, _a = options.params, params = _a === void 0 ? {} : _a;
|
||
var requestUrl = url;
|
||
if (!hasRequestBody(method)) {
|
||
// serialize query string
|
||
var qs = (QS_DELIM_REGEXP.test(url) ? '&' : '?') + getSerialized(params, serializer);
|
||
requestUrl = "" + url + qs;
|
||
}
|
||
xhr.open(method, requestUrl);
|
||
}
|
||
function applyConfig(xhr, options) {
|
||
var method = options.method, contentType = options.contentType, mimeType = options.mimeType, headers = options.headers, _a = options.withCredentials, withCredentials = _a === void 0 ? false : _a;
|
||
// set withCredentials
|
||
xhr.withCredentials = withCredentials;
|
||
// overide MIME type
|
||
if (mimeType) {
|
||
xhr.overrideMimeType(mimeType);
|
||
}
|
||
// set user defined request headers
|
||
if (common_1.isObject(headers)) {
|
||
Object.keys(headers).forEach(function (name) {
|
||
if (headers[name]) {
|
||
xhr.setRequestHeader(name, headers[name]);
|
||
}
|
||
});
|
||
}
|
||
// set 'Content-Type' when request has body
|
||
if (hasRequestBody(method)) {
|
||
xhr.setRequestHeader('Content-Type', contentType + "; charset=UTF-8");
|
||
}
|
||
// set 'x-requested-with' header to prevent CSRF in old browser
|
||
xhr.setRequestHeader('x-requested-with', 'XMLHttpRequest');
|
||
}
|
||
function send(xhr, options) {
|
||
var method = options.method, eventBus = options.eventBus, serializer = options.serializer, preCallback = options.preCallback, _a = options.params, params = _a === void 0 ? {} : _a, _b = options.contentType, contentType = _b === void 0 ? 'application/x-www-form-urlencoded' : _b;
|
||
var body = null;
|
||
if (hasRequestBody(method)) {
|
||
// The space character '%20' is replaced to '+', because application/x-www-form-urlencoded follows rfc-1866
|
||
body =
|
||
contentType.indexOf('application/x-www-form-urlencoded') !== -1
|
||
? getSerialized(params, serializer).replace(ENCODED_SPACE_REGEXP, '+')
|
||
: JSON.stringify(params);
|
||
}
|
||
xhr.onreadystatechange = function () { return handleReadyStateChange(xhr, options); };
|
||
var gridEvent = new gridEvent_1.default({ xhr: xhr });
|
||
/**
|
||
* Occurs before the http request is sent
|
||
* @event Grid#beforeRequest
|
||
* @type {module:event/gridEvent}
|
||
* @property {XMLHttpRequest} xhr - Current XMLHttpRequest instance
|
||
* @property {Grid} instance - Current grid instance
|
||
*/
|
||
eventBus.trigger('beforeRequest', gridEvent);
|
||
if (gridEvent.isStopped()) {
|
||
preCallback();
|
||
return;
|
||
}
|
||
xhr.send(body);
|
||
}
|
||
function gridAjax(options) {
|
||
var xhr = new XMLHttpRequest();
|
||
[open, applyConfig, send].forEach(function (fn) { return fn(xhr, options); });
|
||
}
|
||
exports.gridAjax = gridAjax;
|
||
|
||
|
||
/***/ }),
|
||
/* 60 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.createManager = exports.getDataWithOptions = void 0;
|
||
var tslib_1 = __webpack_require__(1);
|
||
var common_1 = __webpack_require__(0);
|
||
var observable_1 = __webpack_require__(5);
|
||
var data_1 = __webpack_require__(6);
|
||
var paramNameMap = {
|
||
CREATE: 'createdRows',
|
||
UPDATE: 'updatedRows',
|
||
DELETE: 'deletedRows',
|
||
};
|
||
// @TODO: fix 'Row' type with record(Dictionary) type to use negate type or other type utility
|
||
function getDataWithOptions(targetRows, options) {
|
||
if (options === void 0) { options = {}; }
|
||
var _a = options.checkedOnly, checkedOnly = _a === void 0 ? false : _a, _b = options.withRawData, withRawData = _b === void 0 ? false : _b, _c = options.rowKeyOnly, rowKeyOnly = _c === void 0 ? false : _c, _d = options.ignoredColumns, ignoredColumns = _d === void 0 ? [] : _d;
|
||
var rows = targetRows.map(function (row) { return observable_1.getOriginObject(row); });
|
||
if (checkedOnly) {
|
||
rows = rows.filter(function (row) { return row._attributes.checked; });
|
||
}
|
||
if (ignoredColumns.length) {
|
||
// @ts-ignore
|
||
rows = rows.map(function (row) { return common_1.omit.apply(void 0, tslib_1.__spreadArrays([row], ignoredColumns)); });
|
||
}
|
||
if (!withRawData) {
|
||
rows = rows.map(function (row) { return data_1.getOmittedInternalProp(row); });
|
||
}
|
||
if (rowKeyOnly) {
|
||
return rows.map(function (row) { return row.rowKey; });
|
||
}
|
||
return rows;
|
||
}
|
||
exports.getDataWithOptions = getDataWithOptions;
|
||
function createManager() {
|
||
var originData = [];
|
||
var mixedOrder = false;
|
||
var dataMap = {
|
||
CREATE: [],
|
||
UPDATE: [],
|
||
DELETE: [],
|
||
};
|
||
var splice = function (type, rowKey, row) {
|
||
var index = common_1.findIndex(function (createdRow) { return createdRow.rowKey === rowKey; }, dataMap[type]);
|
||
if (index !== -1) {
|
||
if (common_1.isUndefined(row)) {
|
||
dataMap[type].splice(index, 1);
|
||
}
|
||
else {
|
||
dataMap[type].splice(index, 1, row);
|
||
}
|
||
}
|
||
};
|
||
var spliceAll = function (rowKey, row) {
|
||
splice('CREATE', rowKey, row);
|
||
splice('UPDATE', rowKey, row);
|
||
splice('DELETE', rowKey, row);
|
||
};
|
||
return {
|
||
// only for restore
|
||
setOriginData: function (data) {
|
||
originData = data_1.changeRawDataToOriginDataForTree(data);
|
||
},
|
||
getOriginData: function () {
|
||
return originData;
|
||
},
|
||
getModifiedData: function (type, options) {
|
||
var _a;
|
||
return _a = {}, _a[paramNameMap[type]] = getDataWithOptions(dataMap[type], options), _a;
|
||
},
|
||
getAllModifiedData: function (options) {
|
||
var _this = this;
|
||
return Object.keys(dataMap)
|
||
.map(function (key) { return _this.getModifiedData(key, options); })
|
||
.reduce(function (acc, data) { return (tslib_1.__assign(tslib_1.__assign({}, acc), data)); }, {});
|
||
},
|
||
isModified: function () {
|
||
return !!(dataMap.CREATE.length || dataMap.UPDATE.length || dataMap.DELETE.length);
|
||
},
|
||
isModifiedByType: function (type) {
|
||
return !!dataMap[type].length;
|
||
},
|
||
push: function (type, row, mixed) {
|
||
if (mixed === void 0) { mixed = false; }
|
||
var rowKey = row.rowKey;
|
||
mixedOrder = mixedOrder || mixed;
|
||
if (type === 'UPDATE' || type === 'DELETE') {
|
||
splice('UPDATE', rowKey);
|
||
// if the row was already registered in createdRows,
|
||
// would update it in createdRows and not add it to updatedRows or deletedRows
|
||
if (common_1.someProp('rowKey', rowKey, dataMap.CREATE)) {
|
||
if (type === 'UPDATE') {
|
||
splice('CREATE', rowKey, row);
|
||
}
|
||
else {
|
||
splice('CREATE', rowKey);
|
||
}
|
||
return;
|
||
}
|
||
}
|
||
if (!common_1.someProp('rowKey', rowKey, dataMap[type])) {
|
||
dataMap[type].push(row);
|
||
}
|
||
},
|
||
clearSpecificRows: function (rowsMap) {
|
||
common_1.forEachObject(function (_, key) {
|
||
rowsMap[key].forEach(function (row) {
|
||
spliceAll(common_1.isObject(row) ? row.rowKey : row);
|
||
});
|
||
}, rowsMap);
|
||
},
|
||
clear: function (requestTypeCode) {
|
||
if (requestTypeCode === 'MODIFY') {
|
||
this.clearAll();
|
||
return;
|
||
}
|
||
dataMap[requestTypeCode] = [];
|
||
},
|
||
clearAll: function () {
|
||
dataMap.CREATE = [];
|
||
dataMap.UPDATE = [];
|
||
dataMap.DELETE = [];
|
||
},
|
||
isMixedOrder: function () {
|
||
return mixedOrder;
|
||
},
|
||
};
|
||
}
|
||
exports.createManager = createManager;
|
||
|
||
|
||
/***/ }),
|
||
/* 61 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.getAlertMessage = exports.getConfirmMessage = void 0;
|
||
var tslib_1 = __webpack_require__(1);
|
||
var _1 = tslib_1.__importDefault(__webpack_require__(19));
|
||
var confirmMessageMap = {
|
||
CREATE: 'net.confirmCreate',
|
||
UPDATE: 'net.confirmUpdate',
|
||
DELETE: 'net.confirmDelete',
|
||
MODIFY: 'net.confirmModify',
|
||
};
|
||
var alertMessageMap = {
|
||
CREATE: 'net.noDataToCreate',
|
||
UPDATE: 'net.noDataToUpdate',
|
||
DELETE: 'net.noDataToDelete',
|
||
MODIFY: 'net.noDataToModify',
|
||
};
|
||
function getConfirmMessage(type, count) {
|
||
return _1.default.get(confirmMessageMap[type], { count: String(count) });
|
||
}
|
||
exports.getConfirmMessage = getConfirmMessage;
|
||
function getAlertMessage(type) {
|
||
return _1.default.get(alertMessageMap[type]);
|
||
}
|
||
exports.getAlertMessage = getAlertMessage;
|
||
|
||
|
||
/***/ }),
|
||
/* 62 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
var tslib_1 = __webpack_require__(1);
|
||
var grid_1 = tslib_1.__importDefault(__webpack_require__(63));
|
||
__webpack_require__(141);
|
||
grid_1.default.setLanguage('en');
|
||
module.exports = grid_1.default;
|
||
|
||
|
||
/***/ }),
|
||
/* 63 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
var tslib_1 = __webpack_require__(1);
|
||
var preact_1 = __webpack_require__(3);
|
||
var create_1 = __webpack_require__(64);
|
||
var root_1 = __webpack_require__(88);
|
||
var create_2 = __webpack_require__(122);
|
||
var manager_1 = tslib_1.__importDefault(__webpack_require__(129));
|
||
var instance_1 = __webpack_require__(8);
|
||
var i18n_1 = tslib_1.__importDefault(__webpack_require__(19));
|
||
var validation_1 = __webpack_require__(133);
|
||
var dom_1 = __webpack_require__(2);
|
||
var common_1 = __webpack_require__(0);
|
||
var observable_1 = __webpack_require__(5);
|
||
var eventBus_1 = __webpack_require__(7);
|
||
var data_1 = __webpack_require__(6);
|
||
var column_1 = __webpack_require__(10);
|
||
var serverSideDataProvider_1 = __webpack_require__(134);
|
||
var modifiedDataManager_1 = __webpack_require__(60);
|
||
var message_1 = __webpack_require__(61);
|
||
var paginationManager_1 = __webpack_require__(139);
|
||
var tree_1 = __webpack_require__(21);
|
||
var rowSpan_1 = __webpack_require__(13);
|
||
var googleAnalytics_1 = __webpack_require__(140);
|
||
var filter_1 = __webpack_require__(30);
|
||
var filter_2 = __webpack_require__(48);
|
||
var clipboard_1 = __webpack_require__(57);
|
||
var tree_2 = __webpack_require__(20);
|
||
/* eslint-disable global-require */
|
||
if (false) {}
|
||
/**
|
||
* Grid public API
|
||
* @param {Object} options
|
||
* @param {HTMLElement} el - The target element to create grid.
|
||
* @param {Array|Object} [options.data] - Grid data for making rows. When using the data source, sets to object.
|
||
* @param {Object} [options.pageOptions={}] The object for the pagination options.
|
||
* @param {Object} [options.header] - Options object for header.
|
||
* @param {number} [options.header.height=40] - The height of the header area.
|
||
* @param {number} [options.header.align=center] - Horizontal alignment of the header content.
|
||
* Available values are 'left', 'center', 'right'.
|
||
* @param {number} [options.header.valign=middle] - Vertical alignment of the row header content.
|
||
* Available values are 'top', 'middle', 'bottom'.
|
||
* @param {Array} [options.header.complexColumns] - This options creates new parent headers of the multiple columns
|
||
* which includes the headers of specified columns, and sets up the hierarchy.
|
||
* @param {string} [options.header.complexColumns.header] - The header of the complex column to be shown on the header.
|
||
* @param {string} [options.header.complexColumns.name] - The name of column that makes tree column.
|
||
* @param {Array} [options.header.complexColumns.childNames] - The name of the child header(subheader).
|
||
* @param {function} [options.header.complexColumns.renderer] - Sets the custom renderer to customize the header content.
|
||
* @param {string} [options.header.complexColumns.headerAlign=center] - Horizontal alignment of the header content.
|
||
* Available values are 'left', 'center', 'right'.
|
||
* @param {string} [options.header.complexColumns.headerVAlign=middle] - Vertical alignment of the row header content.
|
||
* Available values are 'top', 'middle', 'bottom'.
|
||
* @param {boolean} [options.header.complexColumns.hideChildHeaders=false] - If set to true, the child columns header are hidden.
|
||
* @param {boolean} [options.header.complexColumns.resizable=false] - If set to true, resize-handles of each complex columns will be shown.
|
||
* @param {string|number} [options.width='auto'] - Options for grid width.
|
||
* @param {string|number} [options.rowHeight=40] - The height of each rows.
|
||
* the height of each rows expands to dom's height. If set to number, the height is fixed.
|
||
* @param {number} [options.minRowHeight=40] - The minimum height of each rows. When this value is larger than
|
||
* the row's height, it set to the row's height.
|
||
* @param {string|number} [options.bodyHeight] - The height of body area. The default value is 'auto',
|
||
* the height of body area expands to total height of rows. If set to 'fitToParent', the height of the grid
|
||
* will expand to fit the height of parent element. If set to number, the height is fixed.
|
||
* @param {number} [options.minBodyHeight=130] - The minimum height of body area. When this value
|
||
* is larger than the body's height, it set to the body's height.
|
||
* @param {Object} [options.columnOptions] - Option object for all columns
|
||
* @param {number} [options.columnOptions.minWidth=50] - Minimum width of each columns
|
||
* @param {boolean} [options.columnOptions.resizable=false] - If set to true, resize-handles of each columns
|
||
* will be shown.
|
||
* @param {number} [options.columnOptions.frozenCount=0] - The number of frozen columns.
|
||
* The columns indexed from 0 to this value will always be shown on the left side.
|
||
* {@link Grid#setFrozenColumnCount} can be used for setting this value dynamically.
|
||
* @param {number} [options.columnOptions.frozenBorderWidth=1] - The value of frozen border width.
|
||
* When the frozen columns are created by "frozenCount" option, the frozen border width set.
|
||
* @param {Object} [options.treeColumnOptions] - Option object for the tree column.
|
||
* @param {string} [options.treeColumnOptions.name] - The name of column that makes tree column.
|
||
* @param {boolean} [options.treeColumnOptions.useIcon=true] - If set to true, the folder or file icon is created on
|
||
* the left side of the tree cell data.
|
||
* @param {boolean} [options.treeColumnOptions.useCascadingCheckbox] - If set to true, a cascading relationship is
|
||
* created in the checkbox between parent and child rows.
|
||
* @param {boolean} [options.treeColumnOptions.indentWidth=22] - Base indent width to set for child nodes
|
||
* @param {Object} [options.copyOptions] - Option object for clipboard copying
|
||
* @param {boolean} [options.copyOptions.useFormattedValue] - Whether to use formatted values or original values
|
||
* as a string to be copied to the clipboard
|
||
* @param {boolean} [options.copyOptions.useListItemText] - Copy select or checkbox cell values to 'text'
|
||
* rather than 'value' of the listItem option.
|
||
* @param {string|function} [options.copyOptions.customValue] - Copy text with 'formatter' in cell.
|
||
* @param {boolean} [options.useClientSort=true] - If set to true, sorting will be executed by client itself
|
||
* without server.
|
||
* @param {string} [options.editingEvent='dblclick'] - If set to 'click', editable cell in the view-mode will be
|
||
* changed to edit-mode by a single click.
|
||
* @param {boolean} [options.scrollX=true] - Specifies whether to show horizontal scrollbar.
|
||
* @param {boolean} [options.scrollY=true] - Specifies whether to show vertical scrollbar.
|
||
* @param {boolean} [options.showDummyRows=false] - If set to true, empty area will be filled with dummy rows.
|
||
* @param {string} [options.keyColumnName] - The name of the column to be used to identify each rows.
|
||
* If not specified, unique value for each rows will be created internally.
|
||
* @param {boolean} [options.heightResizable=false] - If set to true, a handle for resizing height will be shown.
|
||
* @param {string} [options.selectionUnit='cell'] - The unit of selection on Grid. ('cell', 'row')
|
||
* @param {Array} [options.rowHeaders] - Options for making the row header. The row header content is number of
|
||
* each row or input element. The value of each item is enable to set string type. (ex: ['rowNum', 'checkbox'])
|
||
* @param {string} [options.rowHeaders.type] - The type of the row header. ('rowNum', 'checkbox')
|
||
* @param {string} [options.rowHeaders.header] - The header of the row header.
|
||
* @param {number} [options.rowHeaders.width] - The width of the row header column. The unit is pixel.
|
||
* If this value isn't set, the column's width sets to default value.
|
||
* @param {string} [options.rowHeaders.align=left] - Horizontal alignment of the row header content.
|
||
* Available values are 'left', 'center', 'right'.
|
||
* @param {string} [options.rowHeaders.valign=middle] - Vertical alignment of the row header content.
|
||
* Available values are 'top', 'middle', 'bottom'.
|
||
* @param {function} [options.rowHeaders.renderer] - Sets the custom renderer to customize the header content.
|
||
* @param {Array} options.columns - The configuration of the grid columns.
|
||
* @param {string} options.columns.name - The name of the column.
|
||
* @param {boolean} [options.columns.ellipsis=false] - If set to true, ellipsis will be used
|
||
* for overflowing content.(This option will be deprecated)
|
||
* @param {string} [options.columns.align=left] - Horizontal alignment of the column content.
|
||
* Available values are 'left', 'center', 'right'.
|
||
* @param {string} [options.columns.valign=middle] - Vertical alignment of the column content.
|
||
* Available values are 'top', 'middle', 'bottom'.
|
||
* @param {string} [options.columns.className] - The name of the class to be used for all cells of
|
||
* the column.
|
||
* @param {string} [options.columns.header] - The header of the column to be shown on the header.
|
||
* @param {number} [options.columns.width] - The width of the column. The unit is pixel. If this value
|
||
* isn't set, the column's width is automatically resized.
|
||
* @param {number} [options.columns.minWidth=50] - The minimum width of the column. The unit is pixel.
|
||
* @param {boolean} [options.columns.hidden] - If set to true, the column will not be shown.
|
||
* @param {boolean} [options.columns.resizable] - If set to false, the width of the column
|
||
* will not be changed.
|
||
* @param {Object} [options.columns.validation] - The options to be used for validation.
|
||
* Validation is executed whenever data is changed or the {@link Grid#validate} is called.
|
||
* @param {boolean} [options.columns.validation.required=false] - If set to true, the data of the column
|
||
* will be checked to be not empty.
|
||
* @param {number|string} [options.columns.validation.dataType='string'] - Specifies the type of the cell value.
|
||
* Available types are 'string' and 'number'.
|
||
* @param {number} [options.columns.validation.min] - If set to numeric value, the data of the column
|
||
* will be checked to be greater than 'min' value.
|
||
* Available types are 'string' and 'number'.
|
||
* @param {number} [options.columns.validation.max] - If set to numeric value, the data of the column
|
||
* will be checked to be less than 'max' value.
|
||
* @param {RegExp} [options.columns.validation.regExp] - If set to regular expression, the data of the column
|
||
* will be checked using the regular expression.
|
||
* @param {function} [options.columns.validation.validatorFn] - If set to function, the data of the column
|
||
* will be checked using the result of the custom validator.
|
||
* @param {boolean} [options.columns.validation.unique] - If set to true, check the uniqueness on the data of the column.
|
||
* @param {string} [options.columns.defaultValue] - The default value to be shown when the column
|
||
* doesn't have a value.
|
||
* @param {function|string} [options.columns.formatter] - The function that formats the value of the cell.
|
||
* The return value of the function will be shown as the value of the cell. If set to 'listItemText',
|
||
* the value will be shown the text.
|
||
* @param {boolean} [options.columns.escapeHTML=false] - If set to true, the value of the cell
|
||
* will be encoded as HTML entities.
|
||
* @param {boolean} [options.columns.ignored=false] - If set to true, the value of the column will be
|
||
* ignored when setting up the list of modified rows.
|
||
* @param {boolean} [options.columns.sortable=false] - If set to true, sort button will be shown on
|
||
* the right side of the column header, which executes the sort action when clicked.
|
||
* @param {string} [options.columns.sortingType='asc'] - If set to 'desc', will execute descending sort initially
|
||
* when sort button is clicked.
|
||
* @param {function} [options.columns.comparator] - The custom comparator that sorts the data of the column.
|
||
* The return value should be same as the result of general 'compareFunction'.
|
||
* @param {function} [options.columns.onBeforeChange] - The function that will be
|
||
* called before changing the value of the cell. If stop() method in event object is called,
|
||
* the changing will be canceled.
|
||
* @param {function} [options.columns.onAfterChange] - The function that will be
|
||
* called after changing the value of the cell.
|
||
* @param {Object} [options.columns.editor] - The object for configuring editing UI.
|
||
* @param {string|function} [options.columns.editor.type='text'] - The string value that specifies
|
||
* the type of the editing UI. Available values are 'text', 'password', 'select', 'radio', 'checkbox'.
|
||
* When using the custom editor, sets to the customized renderer constructor.
|
||
* @param {Object} [options.columns.editor.options] - Option object using editor
|
||
* @param {Array} [options.columns.editor.options.listItems] - Specifies the option items for the
|
||
* 'select', 'radio', 'checkbox' type. The item of the array must contain properties named
|
||
* 'text' and 'value'. (e.g. [{text: 'option1', value: 1}, {...}])
|
||
* @param {Object} [options.columns.copyOptions] - Option object for clipboard copying.
|
||
* This option is column specific, and overrides the global copyOptions.
|
||
* @param {boolean} [options.columns.copyOptions.useFormattedValue] - Whether to use
|
||
* formatted values or original values as a string to be copied to the clipboard
|
||
* @param {boolean} [options.columns.copyOptions.useListItemText] - Whether to use
|
||
* concatenated text or original values as a string to be copied to the clipboard
|
||
* @param {function} [options.columns.copyOptions.customValue] - Whether to use
|
||
* customized value from "customValue" callback or original values as a string to be copied to the clipboard
|
||
* @param {Array} [options.columns.relations] - Specifies relation between this and other column.
|
||
* @param {Array} [options.columns.relations.targetNames] - Array of the names of target columns.
|
||
* @param {function} [options.columns.relations.disabled] - If returns true, target columns
|
||
* will be disabled.
|
||
* @param {function} [options.columns.relations.editable] - If returns true, target columns
|
||
* will be editable.
|
||
* @param {function} [options.columns.relations.listItems] - The function whose return
|
||
* value specifies the option list for the 'select', 'radio', 'checkbox' type.
|
||
* The options list of target columns will be replaced with the return value of this function.
|
||
* @param {string} [options.columns.whiteSpace='nowrap'] - If set to 'normal', the text line is broken
|
||
* by fitting to the column's width. If set to 'pre', spaces are preserved and the text is braken by
|
||
* new line characters. If set to 'pre-wrap', spaces are preserved, the text line is broken by
|
||
* fitting to the column's width and new line characters. If set to 'pre-line', spaces are merged,
|
||
* the text line is broken by fitting to the column's width and new line characters.(This option will be deprecated)
|
||
* @param {boolean} [options.columns.rowSpan=false] - If set to true, apply dynamic rowspan to column data.
|
||
* If it is not a top-level relational column of a column relationship or the grid has tree data, dynamic rowspan is not applied.
|
||
* @param {Object} [options.summary] - The object for configuring summary area.
|
||
* @param {number} [options.summary.height] - The height of the summary area.
|
||
* @param {string} [options.summary.position='bottom'] - The position of the summary area. ('bottom', 'top')
|
||
* @param {(string|Object)} [options.summary.defaultContent]
|
||
* The configuring of summary cell for every column.
|
||
* This options can be overriden for each column by columnContent options.
|
||
* If type is string, the value is used as HTML of summary cell for every columns
|
||
* without auto-calculation.
|
||
* @param {boolean} [options.summary.defaultContent.useAutoSummary=true]
|
||
* If set to true, the summary value of every column is served as a parameter to the template
|
||
* function whenever data is changed.
|
||
* @param {function} [options.summary.defaultContent.template] - Template function which returns the
|
||
* content(HTML) of the column of the summary. This function takes an K-V object as a parameter
|
||
* which contains a summary values keyed by 'sum', 'avg', 'min', 'max' and 'cnt'.
|
||
* @param {Object} [options.summary.columnContent]
|
||
* The configuring of summary cell for each column.
|
||
* Sub options below are keyed by each column name.
|
||
* If type of value of this object is string, the value is used as HTML of summary cell for
|
||
* the column without auto-calculation.
|
||
* @param {boolean} [options.summary.columnContent.useAutoSummary=true]
|
||
* If set to true, the summary value of each column is served as a parameter to the template
|
||
* function whenever data is changed.
|
||
* @param {function} [options.summary.columnContent.template] - Template function which returns the
|
||
* content(HTML) of the column of the summary. This function takes an K-V object as a parameter
|
||
* which contains a summary values keyed by 'sum', 'avg', 'min', 'max' and 'cnt'.
|
||
* @param {boolean} [options.usageStatistics=true] Send the hostname to google analytics.
|
||
* If you do not want to send the hostname, this option set to false.
|
||
* @param {function} [options.onGridMounted] - The function that will be called after rendering the grid.
|
||
* @param {function} [options.onGridUpdated] - The function that will be called after updating the all data of the grid and rendering the grid.
|
||
* @param {function} [options.onGridBeforeDestroy] - The function that will be called before destroying the grid.
|
||
* @param {boolean} [options.draggable] - Whether to enable to drag the row for changing the order of rows.
|
||
* @param {Array} [options.contextMenu] - Option array for the context menu.
|
||
*/
|
||
var Grid = /** @class */ (function () {
|
||
function Grid(options) {
|
||
var _this = this;
|
||
var el = options.el, _a = options.usageStatistics, usageStatistics = _a === void 0 ? true : _a;
|
||
var id = instance_1.register(this);
|
||
var store = create_1.createStore(id, options);
|
||
var dispatch = create_2.createDispatcher(store);
|
||
var eventBus = eventBus_1.createEventBus(id);
|
||
var dataProvider = serverSideDataProvider_1.createProvider(store, dispatch, options.data);
|
||
var dataManager = modifiedDataManager_1.createManager();
|
||
var paginationManager = paginationManager_1.createPaginationManager();
|
||
this.el = el;
|
||
this.store = store;
|
||
this.dispatch = dispatch;
|
||
this.eventBus = eventBus;
|
||
this.dataProvider = dataProvider;
|
||
this.dataManager = dataManager;
|
||
this.paginationManager = paginationManager;
|
||
this.usageStatistics = usageStatistics;
|
||
if (this.usageStatistics) {
|
||
googleAnalytics_1.sendHostname();
|
||
}
|
||
instance_1.registerDataSources(id, dataProvider, dataManager, paginationManager);
|
||
if (!manager_1.default.isApplied()) {
|
||
manager_1.default.apply('default');
|
||
}
|
||
if (Array.isArray(options.data)) {
|
||
this.dataManager.setOriginData(options.data);
|
||
}
|
||
var lifeCycleEvent = common_1.pick(options, 'onGridMounted', 'onGridBeforeDestroy', 'onGridUpdated');
|
||
Object.keys(lifeCycleEvent).forEach(function (eventName) {
|
||
_this.eventBus.on(eventName, lifeCycleEvent[eventName]);
|
||
});
|
||
this.gridEl = preact_1.render(preact_1.h(root_1.Root, { store: store, dispatch: dispatch, rootElement: el }), el);
|
||
this.dispatch('setColumnWidthsByText');
|
||
this.dispatch('updateRowSpan');
|
||
}
|
||
/**
|
||
* Apply theme to all grid instances with the preset options of a given name.
|
||
* @static
|
||
* @param {string} presetName - preset theme name. Available values are 'default', 'striped' and 'clean'.
|
||
* @param {Object} [extOptions] - if exist, extend preset options with this object.
|
||
* @param {Object} [extOptions.outline] - Styles for the table outline.
|
||
* @param {string} [extOptions.outline.border] - Color of the table outline.
|
||
* @param {boolean} [extOptions.outline.showVerticalBorder] - Whether vertical outlines of
|
||
* the table are visible.
|
||
* @param {Object} [extOptions.selection] - Styles for a selection layer.
|
||
* @param {string} [extOptions.selection.background] - Background color of a selection layer.
|
||
* @param {string} [extOptions.selection.border] - Border color of a selection layer.
|
||
* @param {Object} [extOptions.scrollbar] - Styles for scrollbars.
|
||
* @param {string} [extOptions.scrollbar.border] - Border color of scrollbars.
|
||
* @param {string} [extOptions.scrollbar.background] - Background color of scrollbars.
|
||
* @param {string} [extOptions.scrollbar.emptySpace] - Color of extra spaces except scrollbar.
|
||
* @param {string} [extOptions.scrollbar.thumb] - Color of thumbs in scrollbars.
|
||
* @param {string} [extOptions.scrollbar.active] - Color of arrows(for IE) or
|
||
* thumb:hover(for other browsers) in scrollbars.
|
||
* @param {Object} [extOptions.frozenBorder] - Styles for a frozen border.
|
||
* @param {string} [extOptions.frozenBorder.border] - Border color of a frozen border.
|
||
* @param {Object} [extOptions.area] - Styles for the table areas.
|
||
* @param {Object} [extOptions.area.header] - Styles for the header area in the table.
|
||
* @param {string} [extOptions.area.header.background] - Background color of the header area
|
||
* in the table.
|
||
* @param {string} [extOptions.area.header.border] - Border color of the header area
|
||
* in the table.
|
||
* @param {Object} [extOptions.area.body] - Styles for the body area in the table.
|
||
* @param {string} [extOptions.area.body.background] - Background color of the body area
|
||
* in the table.
|
||
* @param {Object} [extOptions.area.summary] - Styles for the summary area in the table.
|
||
* @param {string} [extOptions.area.summary.background] - Background color of the summary area
|
||
* in the table.
|
||
* @param {string} [extOptions.area.summary.border] - Border color of the summary area
|
||
* in the table.
|
||
* @param {Object} [extOptions.row] - Styles for the table rows.
|
||
* @param {Object} [extOptions.row.even] - Styles for even row.
|
||
* @param {string} [extOptions.row.even.background] - background color of even row.
|
||
* @param {string} [extOptions.row.even.text] - text color of even row.
|
||
* @param {Object} [extOptions.row.odd] - Styles for odd row.
|
||
* @param {string} [extOptions.row.odd.background] - background color of cells in odd row.
|
||
* @param {string} [extOptions.row.odd.text] - text color of odd row.
|
||
* @param {Object} [extOptions.row.dummy] - Styles of dummy row.
|
||
* @param {string} [extOptions.row.dummy.background] - background color of dummy row.
|
||
* @param {Object} [extOptions.row.hover] - Styles of hovered row.
|
||
* @param {string} [extOptions.row.hover.background] - background color of hovered row.
|
||
* @param {Object} [extOptions.cell] - Styles for the table cells.
|
||
* @param {Object} [extOptions.cell.normal] - Styles for normal cells.
|
||
* @param {string} [extOptions.cell.normal.background] - Background color of normal cells.
|
||
* @param {string} [extOptions.cell.normal.border] - Border color of normal cells.
|
||
* @param {string} [extOptions.cell.normal.text] - Text color of normal cells.
|
||
* @param {boolean} [extOptions.cell.normal.showVerticalBorder] - Whether vertical borders of
|
||
* normal cells are visible.
|
||
* @param {boolean} [extOptions.cell.normal.showHorizontalBorder] - Whether horizontal borders of
|
||
* normal cells are visible.
|
||
* @param {Object} [extOptions.cell.header] - Styles for header cells.
|
||
* @param {string} [extOptions.cell.header.background] - Background color of header cells.
|
||
* @param {string} [extOptions.cell.header.border] - border color of header cells.
|
||
* @param {string} [extOptions.cell.header.text] - text color of header cells.
|
||
* @param {boolean} [extOptions.cell.header.showVerticalBorder] - Whether vertical borders of
|
||
* header cells are visible.
|
||
* @param {boolean} [extOptions.cell.header.showHorizontalBorder] - Whether horizontal borders of
|
||
* header cells are visible.
|
||
* @param {Object} [extOptions.cell.selectedHeader] - Styles for selected header cells.
|
||
* @param {string} [extOptions.cell.selectedHeader.background] - background color of selected header cells.
|
||
* @param {Object} [extOptions.cell.rowHeader] - Styles for row's header cells.
|
||
* @param {string} [extOptions.cell.rowHeader.background] - Background color of row's header cells.
|
||
* @param {string} [extOptions.cell.rowHeader.border] - border color of row's header cells.
|
||
* @param {string} [extOptions.cell.rowHeader.text] - text color of row's header cells.
|
||
* @param {boolean} [extOptions.cell.rowHeader.showVerticalBorder] - Whether vertical borders of
|
||
* row's header cells are visible.
|
||
* @param {boolean} [extOptions.cell.rowHeader.showHorizontalBorder] - Whether horizontal borders of
|
||
* row's header cells are visible.
|
||
* @param {Object} [extOptions.cell.selectedRowHeader] - Styles for selected row's header cells.
|
||
* @param {string} [extOptions.cell.selectedRowHeader.background] - background color of selected row's haed cells.
|
||
* @param {Object} [extOptions.cell.summary] - Styles for cells in the summary area.
|
||
* @param {string} [extOptions.cell.summary.background] - Background color of cells in the summary area.
|
||
* @param {string} [extOptions.cell.summary.border] - border color of cells in the summary area.
|
||
* @param {string} [extOptions.cell.summary.text] - text color of cells in the summary area.
|
||
* @param {boolean} [extOptions.cell.summary.showVerticalBorder] - Whether vertical borders of
|
||
* cells in the summary area are visible.
|
||
* @param {boolean} [extOptions.cell.summary.showHorizontalBorder] - Whether horizontal borders of
|
||
* cells in the summary area are visible.
|
||
* @param {Object} [extOptions.cell.focused] - Styles for a focused cell.
|
||
* @param {string} [extOptions.cell.focused.background] - background color of a focused cell.
|
||
* @param {string} [extOptions.cell.focused.border] - border color of a focused cell.
|
||
* @param {Object} [extOptions.cell.focusedInactive] - Styles for a inactive focus cell.
|
||
* @param {string} [extOptions.cell.focusedInactive.border] - border color of a inactive focus cell.
|
||
* @param {Object} [extOptions.cell.required] - Styles for required cells.
|
||
* @param {string} [extOptions.cell.required.background] - background color of required cells.
|
||
* @param {string} [extOptions.cell.required.text] - text color of required cells.
|
||
* @param {Object} [extOptions.cell.editable] - Styles for editable cells.
|
||
* @param {string} [extOptions.cell.editable.background] - background color of the editable cells.
|
||
* @param {string} [extOptions.cell.editable.text] - text color of the selected editable cells.
|
||
* @param {Object} [extOptions.cell.disabled] - Styles for disabled cells.
|
||
* @param {string} [extOptions.cell.disabled.background] - background color of disabled cells.
|
||
* @param {string} [extOptions.cell.disabled.text] - text color of disabled cells.
|
||
* @param {Object} [extOptions.cell.invalid] - Styles for invalid cells.
|
||
* @param {string} [extOptions.cell.invalid.background] - background color of invalid cells.
|
||
* @param {string} [extOptions.cell.invalid.text] - text color of invalid cells.
|
||
* @param {Object} [extOptions.cell.currentRow] - Styles for cells in a current row.(deprecated since version 4.4.0)
|
||
* @param {string} [extOptions.cell.currentRow.background] - background color of cells in a current row.
|
||
* @param {string} [extOptions.cell.currentRow.text] - text color of cells in a current row.
|
||
* @param {Object} [extOptions.cell.evenRow] - Styles for cells in even rows.(deprecated since version 4.4.0)
|
||
* @param {string} [extOptions.cell.evenRow.background] - background color of cells in even rows.
|
||
* @param {string} [extOptions.cell.evenRow.text] - text color of cells in even rows.
|
||
* @param {Object} [extOptions.cell.oddRow] - Styles for cells in even rows.(deprecated since version 4.4.0)
|
||
* @param {string} [extOptions.cell.oddRow.background] - background color of cells in odd rows.
|
||
* @param {string} [extOptions.cell.oddRow.text] - text color of cells in odd rows.
|
||
* @param {Object} [extOptions.cell.dummy] - Styles for dummy cells.(deprecated since version 4.4.0)
|
||
* @param {string} [extOptions.cell.dummy.background] - background color of dummy cells.
|
||
* @example
|
||
* var Grid = tui.Grid; // or require('tui-grid')
|
||
*
|
||
* Grid.applyTheme('striped', {
|
||
* grid: {
|
||
* border: '#aaa',
|
||
* text: '#333'
|
||
* },
|
||
* cell: {
|
||
* disabled: {
|
||
* text: '#999'
|
||
* }
|
||
* }
|
||
* });
|
||
*/
|
||
Grid.applyTheme = function (presetName, extOptions) {
|
||
manager_1.default.apply(presetName, extOptions);
|
||
};
|
||
/**
|
||
* Set language
|
||
* @static
|
||
* @param {string} localeCode - Code to set locale messages and
|
||
* this is the language or language-region combination (ex: en-US)
|
||
* @param {Object} [data] - Messages using in Grid
|
||
* @example
|
||
* var Grid = tui.Grid; // or require('tui-grid')
|
||
*
|
||
* Grid.setLanguage('en'); // default and set English
|
||
* Grid.setLanguage('ko'); // set Korean
|
||
* Grid.setLanguage('en-US', { // set new language
|
||
* display: {
|
||
* noData: 'No data.',
|
||
* loadingData: 'Loading data.',
|
||
* resizeHandleGuide: 'You can change the width of the column by mouse drag, ' +
|
||
* 'and initialize the width by double-clicking.'
|
||
* },
|
||
* net: {
|
||
* confirmCreate: 'Are you sure you want to create {{count}} data?',
|
||
* confirmUpdate: 'Are you sure you want to update {{count}} data?',
|
||
* confirmDelete: 'Are you sure you want to delete {{count}} data?',
|
||
* confirmModify: 'Are you sure you want to modify {{count}} data?',
|
||
* noDataToCreate: 'No data to create.',
|
||
* noDataToUpdate: 'No data to update.',
|
||
* noDataToDelete: 'No data to delete.',
|
||
* noDataToModify: 'No data to modify.',
|
||
* failResponse: 'An error occurred while requesting data.\nPlease try again.'
|
||
* }
|
||
* });
|
||
*/
|
||
Grid.setLanguage = function (localeCode, data) {
|
||
i18n_1.default.setLanguage(localeCode, data);
|
||
};
|
||
/**
|
||
* Set the width of the dimension.
|
||
* @param {number} width - The width of the dimension
|
||
*/
|
||
Grid.prototype.setWidth = function (width) {
|
||
this.dispatch('setWidth', width, false);
|
||
};
|
||
/**
|
||
* Set the height of the dimension.
|
||
* @param {number} height - The height of the dimension
|
||
*/
|
||
Grid.prototype.setHeight = function (height) {
|
||
this.dispatch('setHeight', height);
|
||
};
|
||
/**
|
||
* Set the height of body-area.
|
||
* @param {number} bodyHeight - The number of pixel
|
||
*/
|
||
Grid.prototype.setBodyHeight = function (bodyHeight) {
|
||
this.dispatch('setBodyHeight', bodyHeight);
|
||
};
|
||
/**
|
||
* Set options for header.
|
||
* @param {Object} options - Options for header
|
||
* @param {number} [options.height] - The height value
|
||
* @param {Array} [options.complexColumns] - The complex columns info
|
||
*/
|
||
Grid.prototype.setHeader = function (_a) {
|
||
var height = _a.height, complexColumns = _a.complexColumns;
|
||
if (height) {
|
||
this.dispatch('setHeaderHeight', height);
|
||
}
|
||
if (complexColumns) {
|
||
this.dispatch('setComplexColumnHeaders', complexColumns);
|
||
}
|
||
};
|
||
/**
|
||
* Set the count of frozen columns.
|
||
* @param {number} count - The count of columns to be frozen
|
||
*/
|
||
Grid.prototype.setFrozenColumnCount = function (count) {
|
||
this.dispatch('setFrozenColumnCount', count);
|
||
};
|
||
/**
|
||
* Hide columns
|
||
* @param {...string} arguments - Column names to hide
|
||
*/
|
||
Grid.prototype.hideColumn = function (columnName) {
|
||
this.dispatch('hideColumn', columnName);
|
||
};
|
||
/**
|
||
* Show columns
|
||
* @param {...string} arguments - Column names to show
|
||
*/
|
||
Grid.prototype.showColumn = function (columnName) {
|
||
this.dispatch('showColumn', columnName);
|
||
};
|
||
/**
|
||
* Select cells or rows by range
|
||
* @param {Object} range - Selection range
|
||
* @param {Array} [range.start] - Index info of start selection (ex: [rowIndex, columnIndex])
|
||
* @param {Array} [range.end] - Index info of end selection (ex: [rowIndex, columnIndex])
|
||
*/
|
||
Grid.prototype.setSelectionRange = function (range) {
|
||
this.dispatch('setSelection', range);
|
||
};
|
||
/**
|
||
* get Selection range
|
||
* @returns {Object | null} range - Selection range
|
||
* @returns {Array} [range.start] - Index info of start selection (ex: [rowIndex, columnIndex])
|
||
* @returns {Array} [range.end] - Index info of end selection (ex: [rowIndex, columnIndex])
|
||
*/
|
||
Grid.prototype.getSelectionRange = function () {
|
||
var rangeWithRowHeader = this.store.selection.rangeWithRowHeader;
|
||
if (rangeWithRowHeader) {
|
||
var column = rangeWithRowHeader.column, row = rangeWithRowHeader.row;
|
||
return {
|
||
start: [row[0], column[0]],
|
||
end: [row[1], column[1]],
|
||
};
|
||
}
|
||
return null;
|
||
};
|
||
/**
|
||
* Return data of currently focused cell
|
||
* @returns {number|string} rowKey - The unique key of the row
|
||
* @returns {string} columnName - The name of the column
|
||
* @returns {string} value - The value of the cell
|
||
*/
|
||
Grid.prototype.getFocusedCell = function () {
|
||
var _a = this.store.focus, columnName = _a.columnName, rowKey = _a.rowKey;
|
||
var value = null;
|
||
if (rowKey !== null && columnName !== null) {
|
||
value = this.getValue(rowKey, columnName);
|
||
}
|
||
return { rowKey: rowKey, columnName: columnName, value: value };
|
||
};
|
||
/**
|
||
* Remove focus from the focused cell.
|
||
*/
|
||
Grid.prototype.blur = function () {
|
||
this.dispatch('setFocusInfo', null, null, false);
|
||
};
|
||
/**
|
||
* Focus to the cell identified by given rowKey and columnName.
|
||
* @param {Number|String} rowKey - rowKey
|
||
* @param {String} columnName - columnName
|
||
* @param {Boolean} [setScroll=true] - if set to true, move scroll position to focused position
|
||
* @returns {Boolean} true if focused cell is changed
|
||
*/
|
||
Grid.prototype.focus = function (rowKey, columnName, setScroll) {
|
||
var _this = this;
|
||
if (setScroll === void 0) { setScroll = true; }
|
||
var row = this.getRow(rowKey);
|
||
if (!row || !data_1.getRowHeight(row, this.store.dimension.rowHeight)) {
|
||
return false;
|
||
}
|
||
this.dispatch('setFocusInfo', rowKey, columnName, true);
|
||
if (setScroll) {
|
||
// Use setTimeout to wait until the DOM element is actually mounted or updated.
|
||
// For example, when expands the tree row at bottom of the grid area with scroll,
|
||
// grid needs to wait for mounting the expanded tree DOM element to detect the accurate scrolling position.
|
||
setTimeout(function () {
|
||
_this.dispatch('setScrollToFocus');
|
||
});
|
||
}
|
||
return true;
|
||
};
|
||
/**
|
||
* Focus to the cell identified by given rowIndex and columnIndex.
|
||
* @param {Number} rowIndex - rowIndex
|
||
* @param {Number} columnIndex - columnIndex
|
||
* @param {boolean} [setScroll=true] - if set to true, scroll to focused cell
|
||
* @returns {Boolean} true if success
|
||
*/
|
||
Grid.prototype.focusAt = function (rowIndex, columnIndex, setScroll) {
|
||
var _a = data_1.getCellAddressByIndex(this.store, rowIndex, columnIndex), rowKey = _a.rowKey, columnName = _a.columnName;
|
||
if (!common_1.isUndefined(rowKey) && columnName) {
|
||
return this.focus(rowKey, columnName, setScroll);
|
||
}
|
||
return false;
|
||
};
|
||
/**
|
||
* Make view ready to get keyboard input.
|
||
*/
|
||
Grid.prototype.activateFocus = function () {
|
||
this.dispatch('setNavigating', true);
|
||
};
|
||
/**
|
||
* Set focus on the cell at the specified index of row and column and starts to edit.
|
||
* @param {number|string} rowKey - The unique key of the row
|
||
* @param {string} columnName - The name of the column
|
||
* @param {boolean} [setScroll=true] - If set to true, the view will scroll to the cell element.
|
||
*/
|
||
Grid.prototype.startEditing = function (rowKey, columnName, setScroll) {
|
||
if (this.focus(rowKey, columnName, setScroll)) {
|
||
if (this.store.focus.rowKey === rowKey && this.store.focus.columnName === columnName) {
|
||
this.dispatch('startEditing', rowKey, columnName);
|
||
}
|
||
}
|
||
};
|
||
/**
|
||
* Set focus on the cell at the specified index of row and column and starts to edit.
|
||
* @param {number|string} rowIndex - The index of the row
|
||
* @param {string} columnIndex - The index of the column
|
||
* @param {boolean} [setScroll=true] - If set to true, the view will scroll to the cell element.
|
||
*/
|
||
Grid.prototype.startEditingAt = function (rowIndex, columnIndex, setScroll) {
|
||
var _a = data_1.getCellAddressByIndex(this.store, rowIndex, columnIndex), rowKey = _a.rowKey, columnName = _a.columnName;
|
||
this.startEditing(rowKey, columnName, setScroll);
|
||
};
|
||
/**
|
||
* Save editing value and finishes to edit.
|
||
*/
|
||
Grid.prototype.finishEditing = function (rowKey, columnName, value) {
|
||
// @TODO: should change the function signature as removing all current paramaters.
|
||
// The signature will be as below.
|
||
// ex) finishEditing()
|
||
this.dispatch('saveAndFinishEditing', value);
|
||
};
|
||
/**
|
||
* Cancel the editing.
|
||
*/
|
||
Grid.prototype.cancelEditing = function () {
|
||
var editingAddress = this.store.focus.editingAddress;
|
||
if (editingAddress) {
|
||
var rowKey = editingAddress.rowKey, columnName = editingAddress.columnName;
|
||
var value = this.getValue(rowKey, columnName);
|
||
this.dispatch('finishEditing', rowKey, columnName, value, { save: false });
|
||
}
|
||
};
|
||
/**
|
||
* Set the value of the cell identified by the specified rowKey and columnName.
|
||
* @param {number|string} rowKey - The unique key of the row
|
||
* @param {string} columnName - The name of the column
|
||
* @param {number|string} value - The value to be set
|
||
* @param {boolean} [checkCellState=false] - If set to true, only editable and not disabled cells will be affected.
|
||
*/
|
||
Grid.prototype.setValue = function (rowKey, columnName, value, checkCellState) {
|
||
this.dispatch('setValue', rowKey, columnName, value, checkCellState);
|
||
};
|
||
/**
|
||
* Return the value of the cell identified by the rowKey and columnName.
|
||
* @param {number|string} rowKey - The unique key of the target row.
|
||
* @param {string} columnName - The name of the column
|
||
* @returns {number|string|boolean|null} - The value of the cell
|
||
*/
|
||
Grid.prototype.getValue = function (rowKey, columnName) {
|
||
var _a;
|
||
var _b = this.store, data = _b.data, column = _b.column, id = _b.id;
|
||
var targetRow = data_1.findRowByRowKey(data, column, id, rowKey, false);
|
||
if (targetRow) {
|
||
return (_a = targetRow[columnName]) !== null && _a !== void 0 ? _a : null;
|
||
}
|
||
return null;
|
||
};
|
||
/**
|
||
* Set the all values in the specified column.
|
||
* @param {string} columnName - The name of the column
|
||
* @param {number|string} columnValue - The value to be set
|
||
* @param {boolean} [checkCellState=false] - If set to true, only editable and not disabled cells will be affected.
|
||
*/
|
||
Grid.prototype.setColumnValues = function (columnName, columnValue, checkCellState) {
|
||
this.dispatch('setColumnValues', columnName, columnValue, checkCellState);
|
||
};
|
||
/**
|
||
* Return the HTMLElement of the cell identified by the rowKey and columnName.
|
||
* @param {number|string} rowKey - The unique key of the row
|
||
* @param {string} columnName - The name of the column
|
||
* @returns {HTMLElement} - The HTMLElement of the cell element
|
||
*/
|
||
Grid.prototype.getElement = function (rowKey, columnName) {
|
||
return this.el.querySelector("." + dom_1.cls('cell') + "[" + dom_1.dataAttr.ROW_KEY + "=\"" + rowKey + "\"][" + dom_1.dataAttr.COLUMN_NAME + "=\"" + columnName + "\"]");
|
||
};
|
||
/**
|
||
* Set the HTML string of given column summary.
|
||
* The type of content is the same as the options.summary.columnContent of the constructor.
|
||
* @param {string} columnName - column name
|
||
* @param {string|object} columnContent - HTML string or options object.
|
||
*/
|
||
Grid.prototype.setSummaryColumnContent = function (columnName, columnContent) {
|
||
this.dispatch('setSummaryColumnContent', columnName, columnContent);
|
||
};
|
||
/**
|
||
* Return the values of given column summary.
|
||
* If the column name is not specified, all values of available columns are returned.
|
||
* The shape of returning object looks like the example below.
|
||
* @param {string} [columnName] - column name
|
||
* @returns {Object}
|
||
* @example
|
||
* {
|
||
* sum: 1000,
|
||
* avg: 200,
|
||
* max: 300,
|
||
* min: 50,
|
||
* cnt: 5,
|
||
* filtered: {
|
||
* sum: 1000,
|
||
* avg: 200,
|
||
* max: 300,
|
||
* min: 50,
|
||
* cnt: 5
|
||
* }
|
||
* }
|
||
*/
|
||
Grid.prototype.getSummaryValues = function (columnName) {
|
||
var summary = this.store.summary;
|
||
var content = summary.summaryColumnContents[columnName];
|
||
if (content && content.useAutoSummary) {
|
||
return summary.summaryValues[columnName];
|
||
}
|
||
return null;
|
||
};
|
||
/**
|
||
* Return a specific column model.
|
||
* @param {string} columnName - The name of the column
|
||
* @returns {Object|null} - A column model.
|
||
*/
|
||
Grid.prototype.getColumn = function (columnName) {
|
||
var column = common_1.find(function (_a) {
|
||
var name = _a.name;
|
||
return name === columnName;
|
||
}, this.store.column.allColumns);
|
||
return column ? observable_1.getOriginObject(column) : null;
|
||
};
|
||
/**
|
||
* Return a list of the column model.
|
||
* @returns {Array} - A list of the column model.
|
||
*/
|
||
Grid.prototype.getColumns = function () {
|
||
return this.store.column.allColumns
|
||
.filter(function (_a) {
|
||
var name = _a.name;
|
||
return !column_1.isRowHeader(name);
|
||
})
|
||
.map(function (column) { return observable_1.getOriginObject(column); });
|
||
};
|
||
/**
|
||
* Set the list of column model.
|
||
* @param {Array} columns - A new list of column model
|
||
*/
|
||
Grid.prototype.setColumns = function (columns) {
|
||
this.dispatch('setColumns', columns);
|
||
};
|
||
/**
|
||
* Set columns title
|
||
* @param {Object} columnsMap - columns map to be change
|
||
* @example
|
||
* {
|
||
* columnName1: 'title1',
|
||
* columnName2: 'title2',
|
||
* columnName3: 'title3'
|
||
* }
|
||
*/
|
||
Grid.prototype.setColumnHeaders = function (columnsMap) {
|
||
this.dispatch('changeColumnHeadersByName', columnsMap);
|
||
};
|
||
/**
|
||
* Reset the width of each column by using initial setting of column models.
|
||
*/
|
||
Grid.prototype.resetColumnWidths = function (widths) {
|
||
this.dispatch('resetColumnWidths', widths);
|
||
};
|
||
/**
|
||
* Return a list of all values in the specified column.
|
||
* @param {string} columnName - The name of the column
|
||
* @returns {(Array|string)} - A List of all values in the specified column. (or JSON string of the list)
|
||
*/
|
||
Grid.prototype.getColumnValues = function (columnName) {
|
||
return common_1.mapProp(columnName, this.store.data.rawData);
|
||
};
|
||
/**
|
||
* Return the index of the column indentified by the column name.
|
||
* @param {string} columnName - The unique key of the column
|
||
* @returns {number} - The index of the column
|
||
*/
|
||
Grid.prototype.getIndexOfColumn = function (columnName) {
|
||
return common_1.findPropIndex('name', columnName, this.store.column.allColumns.filter(function (_a) {
|
||
var name = _a.name;
|
||
return !column_1.isRowHeader(name);
|
||
}));
|
||
};
|
||
/**
|
||
* Check the row identified by the specified rowKey.
|
||
* @param {number|string} rowKey - The unique key of the row
|
||
*/
|
||
Grid.prototype.check = function (rowKey) {
|
||
this.dispatch('check', rowKey);
|
||
};
|
||
/**
|
||
* Uncheck the row identified by the specified rowKey.
|
||
* @param {number|string} rowKey - The unique key of the row
|
||
*/
|
||
Grid.prototype.uncheck = function (rowKey) {
|
||
this.dispatch('uncheck', rowKey);
|
||
};
|
||
/**
|
||
* Check the rows between the specified rowKeys. If endRowKey is not passed, perform 'check' on the row of startRowKey.
|
||
* @param {number|string} startRowKey - The unique key of the row
|
||
* @param {number|string} [endRowKey] - The unique key of the row
|
||
*/
|
||
Grid.prototype.checkBetween = function (startRowKey, endRowKey) {
|
||
this.dispatch('setCheckboxBetween', true, startRowKey, endRowKey);
|
||
};
|
||
/**
|
||
* Uncheck the rows between the specified rowKeys. If endRowKey is not passed, perform 'uncheck' on the row of startRowKey.
|
||
* @param {number|string} startRowKey - The unique key of the row
|
||
* @param {number|string} [endRowKey] - The unique key of the row
|
||
*/
|
||
Grid.prototype.uncheckBetween = function (startRowKey, endRowKey) {
|
||
this.dispatch('setCheckboxBetween', false, startRowKey, endRowKey);
|
||
};
|
||
/**
|
||
* Check all rows.
|
||
* @param {boolean} [allPage] - check all rows when using pagination. The default value is 'true'.
|
||
*/
|
||
Grid.prototype.checkAll = function (allPage) {
|
||
this.dispatch('checkAll', allPage);
|
||
};
|
||
/**
|
||
* Uncheck all rows.
|
||
* @param {boolean} [allPage] - Uncheck all rows when using pagination. The default value is 'true'.
|
||
*/
|
||
Grid.prototype.uncheckAll = function (allPage) {
|
||
this.dispatch('uncheckAll', allPage);
|
||
};
|
||
/**
|
||
* Return a list of the rowKey of checked rows.
|
||
* @returns {Array.<string|number>} - A list of the rowKey.
|
||
*/
|
||
Grid.prototype.getCheckedRowKeys = function () {
|
||
var rows = data_1.getCheckedRowInfoList(this.store).rows;
|
||
return rows.map(function (_a) {
|
||
var rowKey = _a.rowKey;
|
||
return rowKey;
|
||
});
|
||
};
|
||
/**
|
||
* Return a list of the checked rows.
|
||
* @returns {Array.<object>} - A list of the checked rows.
|
||
*/
|
||
Grid.prototype.getCheckedRows = function () {
|
||
var rows = data_1.getCheckedRowInfoList(this.store).rows;
|
||
return rows.map(function (row) { return observable_1.getOriginObject(row); });
|
||
};
|
||
/**
|
||
* Find rows by conditions
|
||
* @param {Object|Function} conditions - object (key: column name, value: column value) or
|
||
* function that check the value and returns true/false result to find rows
|
||
* @returns {Array} Row list
|
||
* @example <caption>Conditions type is object.</caption>
|
||
* grid.findRows({
|
||
* artist: 'Birdy',
|
||
* price: 10000
|
||
* });
|
||
* @example <caption>Conditions type is function.</caption>
|
||
* grid.findRows((row) => {
|
||
* return (/b/ig.test(row.artist) && row.price > 10000);
|
||
* });
|
||
*/
|
||
Grid.prototype.findRows = function (conditions) {
|
||
return data_1.getConditionalRows(this.store, conditions);
|
||
};
|
||
/**
|
||
* Sort all rows by the specified column.
|
||
* @param {string} columnName - The name of the column to be used to compare the rows
|
||
* @param {boolean} [ascending] - Whether the sort order is ascending.
|
||
* If not specified, use the negative value of the current order.
|
||
* @param {boolean} [multiple] - Whether using multiple sort
|
||
*/
|
||
Grid.prototype.sort = function (columnName, ascending, multiple) {
|
||
if (this.store.data.sortState.useClient) {
|
||
this.dispatch('sort', columnName, ascending, multiple, false);
|
||
}
|
||
else {
|
||
// @TODO: apply multi sort to dataSource
|
||
this.dataProvider.sort(columnName, ascending, false);
|
||
}
|
||
};
|
||
/**
|
||
* If the parameter exists, unsort only column with columnName. If not exist, unsort all rows
|
||
* @param {string} [columnName] - The name of the column to be used to compare the rows
|
||
*/
|
||
Grid.prototype.unsort = function (columnName) {
|
||
if (this.store.data.sortState.useClient) {
|
||
this.dispatch('unsort', columnName);
|
||
}
|
||
else {
|
||
this.dataProvider.unsort(columnName);
|
||
}
|
||
};
|
||
/**
|
||
* Get state of the sorted column in rows
|
||
* @returns {{columns: [{columnName: string, ascending: boolean}], useClient: boolean}} Sorted column's state
|
||
*/
|
||
Grid.prototype.getSortState = function () {
|
||
return common_1.deepCopy(this.store.data.sortState);
|
||
};
|
||
/**
|
||
* Copy to clipboard
|
||
*/
|
||
Grid.prototype.copyToClipboard = function () {
|
||
clipboard_1.execCopy(this.store);
|
||
};
|
||
/**
|
||
* Validate all data and returns the result.
|
||
* Return value is an array which contains only rows which have invalid cell data.
|
||
* @returns {Array.<Object>} An array of error object
|
||
* @example
|
||
* // return value example
|
||
* [
|
||
* {
|
||
* rowKey: 1,
|
||
* errors: [
|
||
* {
|
||
* columnName: 'c1',
|
||
* errorCode: ['REQUIRED'],
|
||
* errorInfo: [{ code: 'REQUIRED' }]
|
||
* },
|
||
* {
|
||
* columnName: 'c2',
|
||
* errorCode: ['VALIDATOR_FN'],
|
||
* errorInfo: [{ code: 'VALIDATOR_FN', customCode: 'CUSTOM_CODE' }]
|
||
* }
|
||
* ]
|
||
* },
|
||
* {
|
||
* rowKey: 3,
|
||
* errors: [
|
||
* {
|
||
* columnName: 'c2',
|
||
* errorCode: ['MIN'],
|
||
* errorInfo: [{ code: 'MIN', min: 1000 }]
|
||
* }
|
||
* ]
|
||
* }
|
||
* ]
|
||
*/
|
||
Grid.prototype.validate = function () {
|
||
return validation_1.getInvalidRows(this.store);
|
||
};
|
||
/**
|
||
* Enable all rows.
|
||
*/
|
||
Grid.prototype.enable = function () {
|
||
this.dispatch('setDisabled', false);
|
||
};
|
||
/**
|
||
* Disable all rows.
|
||
*/
|
||
Grid.prototype.disable = function () {
|
||
this.dispatch('setDisabled', true);
|
||
};
|
||
/**
|
||
* Disable the row identified by the rowkey.
|
||
* @param {number|string} rowKey - The unique key of the target row
|
||
* @param {boolean} [withCheckbox] - change including checkbox. The default value is 'true'
|
||
*/
|
||
Grid.prototype.disableRow = function (rowKey, withCheckbox) {
|
||
if (withCheckbox === void 0) { withCheckbox = true; }
|
||
this.dispatch('setRowDisabled', true, rowKey, withCheckbox);
|
||
};
|
||
/**
|
||
* Enable the row identified by the rowKey.
|
||
* @param {number|string} rowKey - The unique key of the target row
|
||
* @param {boolean} [withCheckbox] - change including checkbox. The default value is 'true'
|
||
*/
|
||
Grid.prototype.enableRow = function (rowKey, withCheckbox) {
|
||
if (withCheckbox === void 0) { withCheckbox = true; }
|
||
this.dispatch('setRowDisabled', false, rowKey, withCheckbox);
|
||
};
|
||
/**
|
||
* Disable the row identified by the specified rowKey to not be able to check.
|
||
* @param {number|string} rowKey - The unique key of the row.
|
||
*/
|
||
Grid.prototype.disableRowCheck = function (rowKey) {
|
||
this.dispatch('setRowCheckDisabled', true, rowKey);
|
||
};
|
||
/**
|
||
* Enable the row identified by the rowKey to be able to check.
|
||
* @param {number|string} rowKey - The unique key of the row
|
||
*/
|
||
Grid.prototype.enableRowCheck = function (rowKey) {
|
||
this.dispatch('setRowCheckDisabled', false, rowKey);
|
||
};
|
||
/**
|
||
* Disable the column identified by the column name.
|
||
* @param {string} columnName - column name
|
||
*/
|
||
Grid.prototype.disableColumn = function (columnName) {
|
||
this.dispatch('setColumnDisabled', true, columnName);
|
||
};
|
||
/**
|
||
* Enable the column identified by the column name.
|
||
* @param {string} columnName - column name
|
||
*/
|
||
Grid.prototype.enableColumn = function (columnName) {
|
||
this.dispatch('setColumnDisabled', false, columnName);
|
||
};
|
||
/**
|
||
* Disable the cell identified by the row key and column name.
|
||
* @param {number|string} rowKey - The unique key of the row.
|
||
* @param {string} columnName - column name
|
||
*/
|
||
Grid.prototype.disableCell = function (rowKey, columnName) {
|
||
this.dispatch('setCellDisabled', true, rowKey, columnName);
|
||
};
|
||
/**
|
||
* Enable the cell identified by the row key and column name.
|
||
* @param {number|string} rowKey - The unique key of the row.
|
||
* @param {string} columnName - column name
|
||
*/
|
||
Grid.prototype.enableCell = function (rowKey, columnName) {
|
||
this.dispatch('setCellDisabled', false, rowKey, columnName);
|
||
};
|
||
/**
|
||
* Insert the new row with specified data to the end of table.
|
||
* @param {Object} [row] - The data for the new row
|
||
* @param {Object} [options] - Options
|
||
* @param {number} [options.at] - The index at which new row will be inserted
|
||
* @param {boolean} [options.extendPrevRowSpan] - If set to true and the previous row at target index
|
||
* has a rowspan data, the new row will extend the existing rowspan data.
|
||
* @param {boolean} [options.focus] - If set to true, move focus to the new row after appending
|
||
* @param {number|string} [options.parentRowKey] - Deprecated: Tree row key of the parent which appends given rows
|
||
*/
|
||
Grid.prototype.appendRow = function (row, options) {
|
||
if (row === void 0) { row = {}; }
|
||
if (options === void 0) { options = {}; }
|
||
var treeColumnName = this.store.column.treeColumnName;
|
||
if (treeColumnName) {
|
||
var offset = options.at, focus = options.focus, parentRowKey = options.parentRowKey;
|
||
this.dispatch('appendTreeRow', row, { offset: offset, focus: focus, parentRowKey: parentRowKey });
|
||
}
|
||
else {
|
||
this.dispatch('appendRow', row, options);
|
||
}
|
||
if (options.focus) {
|
||
var rowIdx = common_1.isUndefined(options.at) ? this.getRowCount() - 1 : options.at;
|
||
this.focusAt(rowIdx, 0);
|
||
}
|
||
};
|
||
/**
|
||
* Insert the new row with specified data to the beginning of table.
|
||
* @param {Object} [row] - The data for the new row
|
||
* @param {Object} [options] - Options
|
||
* @param {boolean} [options.focus] - If set to true, move focus to the new row after appending
|
||
*/
|
||
Grid.prototype.prependRow = function (row, options) {
|
||
if (options === void 0) { options = {}; }
|
||
this.appendRow(row, tslib_1.__assign(tslib_1.__assign({}, options), { at: 0 }));
|
||
};
|
||
/**
|
||
* Remove the row identified by the specified rowKey.
|
||
* @param {number|string} rowKey - The unique key of the row
|
||
* @param {boolean} [options.removeOriginalData] - If set to true, the original data will be removed.
|
||
* @param {boolean} [options.keepRowSpanData] - If set to true, the value of the merged cells will not be
|
||
* removed although the target is first cell of them.
|
||
*/
|
||
Grid.prototype.removeRow = function (rowKey, options) {
|
||
if (options === void 0) { options = {}; }
|
||
var treeColumnName = this.store.column.treeColumnName;
|
||
if (treeColumnName) {
|
||
this.removeTreeRow(rowKey);
|
||
}
|
||
else {
|
||
this.dispatch('removeRow', rowKey, options);
|
||
}
|
||
};
|
||
/**
|
||
* Return the object that contains all values in the specified row.
|
||
* @param {number|string} rowKey - The unique key of the target row
|
||
* @returns {Object} - The object that contains all values in the row.
|
||
*/
|
||
Grid.prototype.getRow = function (rowKey) {
|
||
return this.getRowAt(this.getIndexOfRow(rowKey));
|
||
};
|
||
/**
|
||
* Return the object that contains all values in the row at specified index.
|
||
* @param {number} rowIdx - The index of the row
|
||
* @returns {Object} - The object that contains all values in the row.
|
||
*/
|
||
Grid.prototype.getRowAt = function (rowIdx) {
|
||
var row = this.store.data.rawData[rowIdx];
|
||
return row ? observable_1.getOriginObject(row) : null;
|
||
};
|
||
/**
|
||
* Return the index of the row indentified by the rowKey.
|
||
* @param {number|string} rowKey - The unique key of the row
|
||
* @returns {number} - The index of the row
|
||
*/
|
||
Grid.prototype.getIndexOfRow = function (rowKey) {
|
||
var _a = this.store, data = _a.data, column = _a.column, id = _a.id;
|
||
return data_1.findIndexByRowKey(data, column, id, rowKey, false);
|
||
};
|
||
/**
|
||
* Return a list of all rows.
|
||
* @returns {Array} - A list of all rows
|
||
*/
|
||
Grid.prototype.getData = function () {
|
||
return this.store.data.rawData.map(function (row) { return data_1.getOmittedInternalProp(row); });
|
||
};
|
||
/**
|
||
* Return a list of filtered rows.
|
||
* @returns {Array} - A list of filtered rows
|
||
*/
|
||
Grid.prototype.getFilteredData = function () {
|
||
return this.store.data.filteredRawData.map(function (row) { return data_1.getOmittedInternalProp(row); });
|
||
};
|
||
/**
|
||
* Return the total number of the rows.
|
||
* @returns {number} - The total number of the rows
|
||
*/
|
||
Grid.prototype.getRowCount = function () {
|
||
return this.store.data.rawData.length;
|
||
};
|
||
/**
|
||
* Remove all rows.
|
||
*/
|
||
Grid.prototype.clear = function () {
|
||
this.dispatch('clearData');
|
||
};
|
||
/**
|
||
* Replace all rows with the specified list. This will not change the original data.
|
||
* @param {Array} data - A list of new rows
|
||
* @param {Object} [options] - Options
|
||
* @param {Object} [options.sortState] - If set the sortState, the sort state will be applied when the new rows are set.
|
||
* It is recommended that you do not use it unless you are getting the sorted data by communicating with the server without DataSource.
|
||
* @param {string} [options.sortState.columnName] - Target column name.
|
||
* @param {boolean} [options.sortState.ascending] - The ascending state of specific column which will apply to the grid.
|
||
* @param {boolean} [options.sortState.multiple] - Whether to use multiple sorting.
|
||
* @param {Object} [options.filterState] - If set the filterState, the filter state will be applied when the new rows are set.
|
||
* It is recommended that you do not use it unless you are getting the filtered data by communicating with the server without DataSource.
|
||
* @param {string} [options.filterState.columnName] - Target column name.
|
||
* @param {Object} [options.filterState.columnFilterState] - The column filter state of column which will apply to the grid.
|
||
* @param {string} [options.filterState.columnFilterState.code] - Code for column filter(ex. 'eq', 'gt').
|
||
* @param {string} [options.filterState.columnFilterState.value] - Input value for column filter.
|
||
* @param {Object} [options.pageState] - If set the pageState, the pagination state will be applied when the new rows are set.
|
||
* It is recommended that you do not use it unless you are getting the paginated data by communicating with the server without DataSource.
|
||
* @param {number} [options.pageState.page] - Target page number.
|
||
* @param {number} [options.pageState.totalCount] - The total pagination count.
|
||
* @param {number} [options.pageState.perPage] - Number of rows per page.
|
||
*/
|
||
Grid.prototype.resetData = function (data, options) {
|
||
if (options === void 0) { options = {}; }
|
||
this.dispatch('resetData', data, options);
|
||
};
|
||
/**
|
||
* Add the specified css class to cell element identified by the rowKey and className
|
||
* @param {number|string} rowKey - The unique key of the row
|
||
* @param {string} columnName - The name of the column
|
||
* @param {string} className - The css class name to add
|
||
*/
|
||
Grid.prototype.addCellClassName = function (rowKey, columnName, className) {
|
||
this.dispatch('addCellClassName', rowKey, columnName, className);
|
||
};
|
||
/**
|
||
* Add the specified css class to all cell elements in the row identified by the rowKey
|
||
* @param {number|string} rowKey - The unique key of the row
|
||
* @param {string} className - The css class name to add
|
||
*/
|
||
Grid.prototype.addRowClassName = function (rowKey, className) {
|
||
this.dispatch('addRowClassName', rowKey, className);
|
||
};
|
||
/**
|
||
* Remove the specified css class from the cell element indentified by the rowKey and columnName.
|
||
* @param {number|string} rowKey - The unique key of the row
|
||
* @param {string} columnName - The name of the column
|
||
* @param {string} className - The css class name to be removed
|
||
*/
|
||
Grid.prototype.removeCellClassName = function (rowKey, columnName, className) {
|
||
this.dispatch('removeCellClassName', rowKey, columnName, className);
|
||
};
|
||
/**
|
||
* Remove the specified css class from all cell elements in the row identified by the rowKey.
|
||
* @param {number|string} rowKey - The unique key of the row
|
||
* @param {string} className - The css class name to be removed
|
||
*/
|
||
Grid.prototype.removeRowClassName = function (rowKey, className) {
|
||
this.dispatch('removeRowClassName', rowKey, className);
|
||
};
|
||
/**
|
||
* Return a list of class names of specific cell.
|
||
* @param {number|string} rowKey - The unique key of the row
|
||
* @param {string} columnName - The name of the column
|
||
* @returns {Array} - A list of class names
|
||
*/
|
||
Grid.prototype.getCellClassName = function (rowKey, columnName) {
|
||
var _a;
|
||
var targetRow = this.getRow(rowKey);
|
||
var isExistColumnName = this.store.column.allColumns.some(function (_a) {
|
||
var name = _a.name;
|
||
return name === columnName;
|
||
});
|
||
if (!common_1.isNil(targetRow) && isExistColumnName) {
|
||
var _b = targetRow._attributes.className, row = _b.row, column = _b.column;
|
||
return tslib_1.__spreadArrays(row, ((_a = column[columnName]) !== null && _a !== void 0 ? _a : []));
|
||
}
|
||
return [];
|
||
};
|
||
/**
|
||
* Return a list of class names of specific row.
|
||
* @param {number|string} rowKey - The unique key of the row
|
||
* @returns {Array} - A list of class names
|
||
*/
|
||
Grid.prototype.getRowClassName = function (rowKey) {
|
||
var targetRow = this.getRow(rowKey);
|
||
return common_1.isNil(targetRow) ? [] : targetRow._attributes.className.row;
|
||
};
|
||
/**
|
||
* Add custom event to grid.
|
||
* @param {string} eventName - custom event name
|
||
* @param {function} fn - event handler
|
||
*/
|
||
Grid.prototype.on = function (eventName, fn) {
|
||
this.eventBus.on(eventName, fn);
|
||
};
|
||
/**
|
||
* Remove custom event to grid.
|
||
* @param {string} eventName - custom event name
|
||
* @param {function} fn - event handler
|
||
*/
|
||
Grid.prototype.off = function (eventName, fn) {
|
||
this.eventBus.off(eventName, fn);
|
||
};
|
||
/**
|
||
* Return an instance of tui.Pagination.
|
||
* @deprecated
|
||
* @returns {tui.Pagination}
|
||
*/
|
||
Grid.prototype.getPagination = function () {
|
||
return this.paginationManager.getPagination();
|
||
};
|
||
/**
|
||
* Set number of rows per page and reload current page
|
||
* @param {number} perPage - Number of rows per page
|
||
* @param {Params} data - Data(parameters) to send to the server
|
||
*/
|
||
Grid.prototype.setPerPage = function (perPage, data) {
|
||
var pagination = this.getPagination();
|
||
if (pagination) {
|
||
var pageOptions = this.store.data.pageOptions;
|
||
if (pageOptions.useClient) {
|
||
this.dispatch('updatePageOptions', { perPage: perPage, page: 1 });
|
||
this.dispatch('updateHeights');
|
||
}
|
||
else {
|
||
this.readData(1, tslib_1.__assign(tslib_1.__assign({}, data), { perPage: perPage }));
|
||
}
|
||
}
|
||
};
|
||
/**
|
||
* Return true if there are at least one row modified.
|
||
* @returns {boolean} - True if there are at least one row modified.
|
||
*/
|
||
Grid.prototype.isModified = function () {
|
||
return this.dataManager.isModified();
|
||
};
|
||
/**
|
||
* Return the object that contains the lists of changed data compared to the original data.
|
||
* The object has properties 'createdRows', 'updatedRows', 'deletedRows'.
|
||
* @param {Object} [options] Options
|
||
* @param {boolean} [options.checkedOnly=false] - If set to true, only checked rows will be considered.
|
||
* @param {boolean} [options.withRawData=false] - If set to true, the data will contains
|
||
* the row data for internal use.
|
||
* @param {boolean} [options.rowKeyOnly=false] - If set to true, only keys of the changed
|
||
* rows will be returned.
|
||
* @param {Array} [options.ignoredColumns] - A list of column name to be excluded.
|
||
* @returns {{createdRows: Array, updatedRows: Array, deletedRows: Array}} - Object that contains the result list.
|
||
*/
|
||
Grid.prototype.getModifiedRows = function (options) {
|
||
if (options === void 0) { options = {}; }
|
||
var ignoredColumns = options.ignoredColumns;
|
||
var originIgnoredColumns = this.store.column.ignoredColumns;
|
||
options.ignoredColumns = Array.isArray(ignoredColumns)
|
||
? ignoredColumns.concat(originIgnoredColumns)
|
||
: originIgnoredColumns;
|
||
return this.dataManager.getAllModifiedData(options);
|
||
};
|
||
/**
|
||
* Request 'readData' to the server. The last requested data will be extended with new data.
|
||
* @param {Number} page - Page number
|
||
* @param {Object} data - Data(parameters) to send to the server
|
||
* @param {Boolean} resetData - If set to true, last requested data will be ignored.
|
||
*/
|
||
Grid.prototype.readData = function (page, data, resetData) {
|
||
if (data && data.sortColumn) {
|
||
this.dataProvider.sort(data.sortColumn, data.sortAscending, false);
|
||
}
|
||
else {
|
||
this.dataProvider.readData(page, data, resetData);
|
||
}
|
||
};
|
||
/**
|
||
* Send request to server to sync data
|
||
* @param {String} requestType - 'createData|updateData|deleteData|modifyData'
|
||
* @param {object} options - Options
|
||
* @param {String} [options.url] - URL to send the request
|
||
* @param {String} [options.method] - method to send the request
|
||
* @param {boolean} [options.checkedOnly=false] - Whether the request param only contains checked rows
|
||
* @param {boolean} [options.modifiedOnly=true] - Whether the request param only contains modified rows
|
||
* @param {boolean} [options.showConfirm=true] - Whether to show confirm dialog before sending request
|
||
* @param {boolean} [options.withCredentials=false] - Use withCredentials flag of XMLHttpRequest for ajax requests if true
|
||
*/
|
||
Grid.prototype.request = function (requestType, options) {
|
||
if (options === void 0) { options = {}; }
|
||
this.dataProvider.request(requestType, options);
|
||
};
|
||
/**
|
||
* Request 'readData' with last requested data.
|
||
*/
|
||
Grid.prototype.reloadData = function () {
|
||
this.dataProvider.reloadData();
|
||
};
|
||
/**
|
||
* Restore the data to the original data.
|
||
* (Original data is set by {@link Grid#resetData|resetData}
|
||
*/
|
||
Grid.prototype.restore = function () {
|
||
this.resetData(this.dataManager.getOriginData());
|
||
};
|
||
/**
|
||
* Insert the new tree row with specified data.
|
||
* @param {Object} [row] - The tree data for the new row
|
||
* @param {Object} [options] - Options
|
||
* @param {number|string} [options.parentRowKey] - Tree row key of the parent which appends given rows
|
||
* @param {number} [options.offset] - The offset value to insert new tree row
|
||
* @param {boolean} [options.focus] - If set to true, move focus to the new tree row after appending
|
||
*/
|
||
Grid.prototype.appendTreeRow = function (row, options) {
|
||
if (row === void 0) { row = {}; }
|
||
if (options === void 0) { options = {}; }
|
||
var treeColumnName = this.store.column.treeColumnName;
|
||
var parentRowKey = options.parentRowKey;
|
||
if (!treeColumnName || common_1.isUndefined(parentRowKey)) {
|
||
return;
|
||
}
|
||
this.dispatch('appendTreeRow', row, options);
|
||
if (options.focus) {
|
||
var offset = options.offset;
|
||
var childRows = tree_1.getChildRows(this.store, parentRowKey);
|
||
if (childRows.length) {
|
||
var rowKey = (common_1.isUndefined(offset)
|
||
? childRows[childRows.length - 1]
|
||
: childRows[offset]).rowKey;
|
||
var rowIdx = this.getIndexOfRow(rowKey);
|
||
this.focusAt(rowIdx, 0);
|
||
}
|
||
}
|
||
};
|
||
/**
|
||
* Remove the tree row identified by the specified rowKey.
|
||
* @param {number|string} rowKey - The unique key of the row
|
||
*/
|
||
Grid.prototype.removeTreeRow = function (rowKey) {
|
||
var treeColumnName = this.store.column.treeColumnName;
|
||
if (treeColumnName) {
|
||
this.dispatch('removeTreeRow', rowKey);
|
||
}
|
||
};
|
||
/**
|
||
* Expand tree row.
|
||
* @param {number|string} rowKey - The unique key of the row
|
||
* @param {boolean} recursive - true for recursively expand all descendant
|
||
*/
|
||
Grid.prototype.expand = function (rowKey, recursive) {
|
||
this.dispatch('expandByRowKey', rowKey, recursive);
|
||
};
|
||
/**
|
||
* Expand all tree row.
|
||
*/
|
||
Grid.prototype.expandAll = function () {
|
||
this.dispatch('expandAll');
|
||
};
|
||
/**
|
||
* Expand tree row.
|
||
* @param {number|string} rowKey - The unique key of the row
|
||
* @param {boolean} recursive - true for recursively expand all descendant
|
||
*/
|
||
Grid.prototype.collapse = function (rowKey, recursive) {
|
||
this.dispatch('collapseByRowKey', rowKey, recursive);
|
||
};
|
||
/**
|
||
* Collapse all tree row.
|
||
*/
|
||
Grid.prototype.collapseAll = function () {
|
||
this.dispatch('collapseAll');
|
||
};
|
||
/**
|
||
* Get the parent of the row which has the given row key.
|
||
* @param {number|string} rowKey - The unique key of the row
|
||
* @returns {Object} - the parent row
|
||
*/
|
||
Grid.prototype.getParentRow = function (rowKey) {
|
||
return tree_1.getParentRow(this.store, rowKey, true);
|
||
};
|
||
/**
|
||
* Get the children of the row which has the given row key.
|
||
* @param {number|string} rowKey - The unique key of the row
|
||
* @returns {Array.<Object>} - the children rows
|
||
*/
|
||
Grid.prototype.getChildRows = function (rowKey) {
|
||
return tree_1.getChildRows(this.store, rowKey, true);
|
||
};
|
||
/**
|
||
* Get the ancestors of the row which has the given row key.
|
||
* @param {number|string} rowKey - The unique key of the row
|
||
* @returns {Array.<TreeRow>} - the ancestor rows
|
||
*/
|
||
Grid.prototype.getAncestorRows = function (rowKey) {
|
||
return tree_1.getAncestorRows(this.store, rowKey);
|
||
};
|
||
/**
|
||
* Get the descendants of the row which has the given row key.
|
||
* @param {number|string} rowKey - The unique key of the row
|
||
* @returns {Array.<Object>} - the descendant rows
|
||
*/
|
||
Grid.prototype.getDescendantRows = function (rowKey) {
|
||
return tree_1.getDescendantRows(this.store, rowKey);
|
||
};
|
||
/**
|
||
* Get the depth of the row which has the given row key.
|
||
* @param {number|string} rowKey - The unique key of the row
|
||
* @returns {number} - the depth
|
||
*/
|
||
Grid.prototype.getDepth = function (rowKey) {
|
||
var _a = this.store, data = _a.data, column = _a.column, id = _a.id;
|
||
var rawData = data.rawData;
|
||
var row = data_1.findRowByRowKey(data, column, id, rowKey);
|
||
return row ? tree_1.getDepth(rawData, row) : 0;
|
||
};
|
||
/**
|
||
* Return the rowspan data of the cell identified by the rowKey and columnName.
|
||
* @param {number|string} rowKey - The unique key of the row
|
||
* @param {string} columnName - The name of the column
|
||
* @returns {Object} - Row span data
|
||
*/
|
||
Grid.prototype.getRowSpanData = function (rowKey, columnName) {
|
||
return rowSpan_1.getRowSpanByRowKey(rowKey, columnName, this.store.data.rawData);
|
||
};
|
||
/**
|
||
* reset original data to current data.
|
||
* (Original data is set by {@link Grid#resetData|resetData}
|
||
*/
|
||
Grid.prototype.resetOriginData = function () {
|
||
this.dataManager.setOriginData(this.store.data.rawData);
|
||
};
|
||
/** Remove all checked rows.
|
||
* @param {boolean} [showConfirm] - If set to true, confirm message will be shown before remove.
|
||
* @returns {boolean} - True if there's at least one row removed.
|
||
*/
|
||
Grid.prototype.removeCheckedRows = function (showConfirm) {
|
||
var checkedRowInfoList = data_1.getCheckedRowInfoList(this.store);
|
||
var deletedCount = checkedRowInfoList.rows.length;
|
||
var confirmMessage = message_1.getConfirmMessage('DELETE', deletedCount);
|
||
if (deletedCount > 0 && (!showConfirm || confirm(confirmMessage))) {
|
||
this.dispatch('removeRows', checkedRowInfoList);
|
||
return true;
|
||
}
|
||
return false;
|
||
};
|
||
/**
|
||
* Refresh the layout view. Use this method when the view was rendered while hidden.
|
||
*/
|
||
Grid.prototype.refreshLayout = function () {
|
||
var containerEl = this.el.querySelector("." + dom_1.cls('container'));
|
||
var parentElement = this.el.parentElement;
|
||
this.dispatch('refreshLayout', containerEl, parentElement);
|
||
};
|
||
/**
|
||
* Destroy the instance.
|
||
*/
|
||
Grid.prototype.destroy = function () {
|
||
preact_1.render('', this.el, this.gridEl);
|
||
tree_2.clearTreeRowKeyMap(this.store.id);
|
||
for (var key in this) {
|
||
if (common_1.hasOwnProp(this, key)) {
|
||
delete this[key];
|
||
}
|
||
}
|
||
};
|
||
/**
|
||
* Set the option of column filter.
|
||
* @param {string} columnName - columnName
|
||
* @param {string | FilterOpt} filterOpt - filter type
|
||
*/
|
||
Grid.prototype.setFilter = function (columnName, filterOpt) {
|
||
this.dispatch('setFilter', columnName, filterOpt);
|
||
};
|
||
/**
|
||
* Get filter state.
|
||
* @returns {Array.<FilterState>} - filter state
|
||
*/
|
||
Grid.prototype.getFilterState = function () {
|
||
// @TODO: unify the structure to ResetOptions.filterState type definition
|
||
return filter_2.getFilterState(this.store);
|
||
};
|
||
/**
|
||
* Filter the data.
|
||
* @param {string} columnName - column name to filter
|
||
* @param {Array.<FilterState>} state - filter state
|
||
* @example
|
||
* grid.filter('name', [{code: 'eq', value: 3}, {code: 'eq', value: 4}]);
|
||
*/
|
||
Grid.prototype.filter = function (columnName, state) {
|
||
var filter = this.store.column.allColumnMap[columnName].filter;
|
||
if (filter) {
|
||
var type_1 = filter.type, operator = filter.operator;
|
||
var conditionFn = state.map(function (_a) {
|
||
var code = _a.code, value = _a.value;
|
||
return filter_1.getFilterConditionFn(code, value, type_1);
|
||
});
|
||
this.dispatch('filter', columnName, filter_1.composeConditionFn(conditionFn, operator), state);
|
||
}
|
||
};
|
||
/**
|
||
* Remove filter state of specific column.
|
||
* @param {string} columnName - column name to unfilter
|
||
*/
|
||
Grid.prototype.unfilter = function (columnName) {
|
||
this.dispatch('unfilter', columnName);
|
||
};
|
||
/**
|
||
* Add class name to all cell data of specific column.
|
||
* @param {string} columnName - column name to add className
|
||
* @param {string} className - class name
|
||
*/
|
||
Grid.prototype.addColumnClassName = function (columnName, className) {
|
||
this.dispatch('addColumnClassName', columnName, className);
|
||
};
|
||
/**
|
||
* Remove class name to all cell data of specific column.
|
||
* @param {string} columnName - column name to add className
|
||
* @param {string} className - class name
|
||
*/
|
||
Grid.prototype.removeColumnClassName = function (columnName, className) {
|
||
this.dispatch('removeColumnClassName', columnName, className);
|
||
};
|
||
/**
|
||
* Return a list of class names of specific column.
|
||
* @param {string} columnName - The name of the column
|
||
* @returns {Array} - A list of class names
|
||
*/
|
||
Grid.prototype.getColumnClassName = function (columnName) {
|
||
var rawData = this.store.data.rawData;
|
||
var classNamesOfFirstRow = rawData[0]._attributes.className.column[columnName];
|
||
if (common_1.isEmpty(classNamesOfFirstRow)) {
|
||
return [];
|
||
}
|
||
return rawData.slice(1).reduce(function (acc, row, _, arr) {
|
||
var classNames = row._attributes.className.column[columnName];
|
||
if (common_1.isEmpty(classNames) || common_1.isEmpty(acc)) {
|
||
arr.splice(0);
|
||
return [];
|
||
}
|
||
return acc.filter(function (className) { return common_1.includes(classNames, className); });
|
||
}, classNamesOfFirstRow);
|
||
};
|
||
/**
|
||
* Set new data to the row identified by the specified rowKey.
|
||
* @param {number|string} rowKey - The unique key of the row
|
||
* @param {object} row - The object that contains all values in the row.
|
||
*/
|
||
Grid.prototype.setRow = function (rowKey, row) {
|
||
var _a = this.store, data = _a.data, column = _a.column, id = _a.id;
|
||
var rowIndex = data_1.findIndexByRowKey(data, column, id, rowKey, false);
|
||
this.dispatch('setRow', rowIndex, row);
|
||
};
|
||
/**
|
||
* Move the row identified by the specified rowKey to target index.
|
||
* If data is sorted or filtered, this couldn't be used.
|
||
* @param {number|string} rowKey - The unique key of the row
|
||
* @param {number} targetIndex - Target index for moving
|
||
* @param {Object} [options] - Options
|
||
* @param {number} [options.appended] - This option for only tree data. Whether the row is appended to other row as the child.
|
||
*/
|
||
Grid.prototype.moveRow = function (rowKey, targetIndex, options) {
|
||
if (options === void 0) { options = { appended: false }; }
|
||
var _a = this.store, column = _a.column, data = _a.data;
|
||
if (column.treeColumnName) {
|
||
var moveToLast = false;
|
||
if (!options.appended) {
|
||
if (targetIndex === data.rawData.length - 1) {
|
||
moveToLast = true;
|
||
}
|
||
else if (this.getIndexOfRow(rowKey) < targetIndex) {
|
||
targetIndex += 1;
|
||
}
|
||
}
|
||
this.dispatch('moveTreeRow', rowKey, targetIndex, tslib_1.__assign(tslib_1.__assign({}, options), { moveToLast: moveToLast }));
|
||
}
|
||
else {
|
||
this.dispatch('moveRow', rowKey, targetIndex);
|
||
}
|
||
this.dispatch('updateRowSpan');
|
||
};
|
||
/**
|
||
* Set parameters to be sent with the request to communicate with the server.
|
||
* @param {Object} params - parameters to send to the server
|
||
*/
|
||
Grid.prototype.setRequestParams = function (params) {
|
||
this.dataProvider.setRequestParams(params);
|
||
};
|
||
/**
|
||
* clear the modified data that is returned as the result of 'getModifiedRows' method.
|
||
* If the 'type' parameter is undefined, all modified data is cleared.
|
||
* @param {string} type - The modified type
|
||
*/
|
||
Grid.prototype.clearModifiedData = function (type) {
|
||
if (type) {
|
||
this.dataManager.clear(type);
|
||
}
|
||
else {
|
||
this.dataManager.clearAll();
|
||
}
|
||
};
|
||
/**
|
||
* append rows.
|
||
* @param {Array} data - A list of new rows
|
||
*/
|
||
Grid.prototype.appendRows = function (data) {
|
||
this.dispatch('appendRows', data);
|
||
};
|
||
/**
|
||
* Return the formatted value of the cell identified by the rowKey and columnName.
|
||
* @param {number|string} rowKey - The unique key of the target row.
|
||
* @param {string} columnName - The name of the column
|
||
* @returns {string|null} - The formatted value of the cell
|
||
*/
|
||
Grid.prototype.getFormattedValue = function (rowKey, columnName) {
|
||
return data_1.getFormattedValue(this.store, rowKey, columnName);
|
||
};
|
||
/**
|
||
* Set total count of items for calculating the pagination.
|
||
* @param {number} totalCount - total count
|
||
*/
|
||
Grid.prototype.setPaginationTotalCount = function (totalCount) {
|
||
this.dispatch('updatePageOptions', { totalCount: totalCount });
|
||
};
|
||
/**
|
||
* Get total count of items with the current pagination
|
||
* @returns {number} - total count
|
||
*/
|
||
Grid.prototype.getPaginationTotalCount = function () {
|
||
return this.store.data.pageOptions.totalCount;
|
||
};
|
||
/**
|
||
* Export a file in the specified format
|
||
* @param {string} format - Format of export file
|
||
* @param {Object} [options] - Options for export
|
||
* @param {boolean} [options.includeHeader=true] - Whether to include headers
|
||
* @param {boolean} [options.includeHiddenColumns=false] - Whether to include hidden columns
|
||
* @param {string[]} [options.columnNames=[...allVisibleColumnNames]] - Columns names to export
|
||
* @param {boolean} [options.onlySelected=false] - Whether to export only the selected range
|
||
* @param {boolean} [options.onlyFiltered=true] - Whether to export only the filtered data
|
||
* @param {boolean} [options.useFormattedValue=false] - Whether to export formatted values or original values
|
||
* @param {','|';'|'\\t'|'|'} [options.delimiter=','] - Delimiter to export CSV
|
||
* @param {string} [options.fileName='grid-export'] - File name to export
|
||
*/
|
||
Grid.prototype.export = function (format, options) {
|
||
this.dispatch('execExport', format, options);
|
||
};
|
||
/**
|
||
* Move the column identified by the specified column name to target index.
|
||
* If there is hidden columns or use complex columns, this couldn't be used.
|
||
* If the column of column name is row header column or tree column, this couldn't be used.
|
||
* @param {string} columnName - The column name of the column
|
||
* @param {number} targetIndex - Target index for moving
|
||
*/
|
||
Grid.prototype.moveColumn = function (columnName, targetIndex) {
|
||
var allColumns = this.store.column.allColumns;
|
||
var column = common_1.find(function (_a) {
|
||
var name = _a.name;
|
||
return name === columnName;
|
||
}, allColumns);
|
||
if (!column ||
|
||
targetIndex < 0 ||
|
||
targetIndex >= allColumns.length ||
|
||
column_1.isRowHeader(columnName) ||
|
||
tree_1.isTreeColumnName(this.store.column, columnName)) {
|
||
return;
|
||
}
|
||
this.dispatch('moveColumn', columnName, targetIndex);
|
||
};
|
||
return Grid;
|
||
}());
|
||
exports.default = Grid;
|
||
|
||
|
||
/***/ }),
|
||
/* 64 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.createStore = void 0;
|
||
var observable_1 = __webpack_require__(5);
|
||
var data_1 = __webpack_require__(15);
|
||
var column_1 = __webpack_require__(33);
|
||
var dimension_1 = __webpack_require__(79);
|
||
var viewport_1 = __webpack_require__(80);
|
||
var columnCoords_1 = __webpack_require__(81);
|
||
var rowCoords_1 = __webpack_require__(82);
|
||
var focus_1 = __webpack_require__(83);
|
||
var summary_1 = __webpack_require__(47);
|
||
var selection_1 = __webpack_require__(84);
|
||
var renderState_1 = __webpack_require__(85);
|
||
var filterLayerState_1 = __webpack_require__(86);
|
||
var contextMenu_1 = __webpack_require__(87);
|
||
var dimension_2 = __webpack_require__(50);
|
||
var lazyObservable_1 = __webpack_require__(28);
|
||
var validation_1 = __webpack_require__(27);
|
||
function createStore(id, options) {
|
||
validation_1.createNewValidationMap(id);
|
||
var el = options.el, width = options.width, rowHeight = options.rowHeight, bodyHeight = options.bodyHeight, heightResizable = options.heightResizable, minRowHeight = options.minRowHeight, minBodyHeight = options.minBodyHeight, _a = options.columnOptions, columnOptions = _a === void 0 ? {} : _a, keyColumnName = options.keyColumnName, _b = options.rowHeaders, rowHeaders = _b === void 0 ? [] : _b, _c = options.copyOptions, copyOptions = _c === void 0 ? {} : _c, _d = options.summary, summaryOptions = _d === void 0 ? {} : _d, _e = options.selectionUnit, selectionUnit = _e === void 0 ? 'cell' : _e, _f = options.showDummyRows, showDummyRows = _f === void 0 ? false : _f, _g = options.editingEvent, editingEvent = _g === void 0 ? 'dblclick' : _g, _h = options.tabMode, tabMode = _h === void 0 ? 'moveAndEdit' : _h, scrollX = options.scrollX, scrollY = options.scrollY, _j = options.useClientSort, useClientSort = _j === void 0 ? true : _j, _k = options.pageOptions, pageOptions = _k === void 0 ? {} : _k, _l = options.treeColumnOptions, treeColumnOptions = _l === void 0 ? { name: '' } : _l, _m = options.header, header = _m === void 0 ? {} : _m, _o = options.disabled, disabled = _o === void 0 ? false : _o, _p = options.draggable, draggable = _p === void 0 ? false : _p, createMenuGroups = options.contextMenu;
|
||
var frozenBorderWidth = columnOptions.frozenBorderWidth;
|
||
var summaryHeight = summaryOptions.height, summaryPosition = summaryOptions.position;
|
||
var _q = header.height, headerHeight = _q === void 0 ? 40 : _q, _r = header.complexColumns, complexColumns = _r === void 0 ? [] : _r, _s = header.align, align = _s === void 0 ? 'center' : _s, _t = header.valign, valign = _t === void 0 ? 'middle' : _t, _u = header.columns, columnHeaders = _u === void 0 ? [] : _u;
|
||
var column = column_1.create({
|
||
columns: options.columns,
|
||
columnOptions: columnOptions,
|
||
rowHeaders: rowHeaders,
|
||
copyOptions: copyOptions,
|
||
keyColumnName: keyColumnName,
|
||
treeColumnOptions: treeColumnOptions,
|
||
complexColumns: complexColumns,
|
||
align: align,
|
||
valign: valign,
|
||
columnHeaders: columnHeaders,
|
||
disabled: disabled,
|
||
draggable: draggable,
|
||
});
|
||
var data = data_1.create({
|
||
data: Array.isArray(options.data) ? options.data : [],
|
||
column: column,
|
||
pageOptions: pageOptions,
|
||
useClientSort: useClientSort,
|
||
id: id,
|
||
disabled: disabled,
|
||
});
|
||
var dimension = dimension_1.create({
|
||
column: column,
|
||
width: width,
|
||
domWidth: el.clientWidth,
|
||
rowHeight: rowHeight,
|
||
bodyHeight: bodyHeight,
|
||
minBodyHeight: minBodyHeight,
|
||
minRowHeight: minRowHeight,
|
||
heightResizable: heightResizable,
|
||
frozenBorderWidth: frozenBorderWidth,
|
||
summaryHeight: summaryHeight,
|
||
summaryPosition: summaryPosition,
|
||
scrollX: scrollX,
|
||
scrollY: scrollY,
|
||
headerHeight: headerHeight,
|
||
});
|
||
var columnCoords = columnCoords_1.create({ column: column, dimension: dimension });
|
||
var rowCoords = rowCoords_1.create({ data: data, dimension: dimension });
|
||
var viewport = viewport_1.create({
|
||
data: data,
|
||
column: column,
|
||
dimension: dimension,
|
||
rowCoords: rowCoords,
|
||
columnCoords: columnCoords,
|
||
showDummyRows: showDummyRows,
|
||
});
|
||
var focus = focus_1.create({
|
||
data: data,
|
||
column: column,
|
||
dimension: dimension,
|
||
columnCoords: columnCoords,
|
||
rowCoords: rowCoords,
|
||
editingEvent: editingEvent,
|
||
tabMode: tabMode,
|
||
id: id,
|
||
});
|
||
var summary = summary_1.create({ column: column, data: data, summary: summaryOptions });
|
||
var selection = selection_1.create({
|
||
selectionUnit: selectionUnit,
|
||
columnCoords: columnCoords,
|
||
column: column,
|
||
dimension: dimension,
|
||
rowCoords: rowCoords,
|
||
data: data,
|
||
});
|
||
var filterLayerState = filterLayerState_1.create();
|
||
var renderState = renderState_1.create();
|
||
var contextMenu = contextMenu_1.create({ createMenuGroups: createMenuGroups });
|
||
var store = observable_1.observable({
|
||
id: id,
|
||
data: data,
|
||
column: column,
|
||
dimension: dimension,
|
||
columnCoords: columnCoords,
|
||
rowCoords: rowCoords,
|
||
viewport: viewport,
|
||
focus: focus,
|
||
summary: summary,
|
||
selection: selection,
|
||
renderState: renderState,
|
||
filterLayerState: filterLayerState,
|
||
contextMenu: contextMenu,
|
||
});
|
||
// manual observe to resolve circular references
|
||
observable_1.observe(function () {
|
||
dimension_2.setAutoBodyHeight(store);
|
||
});
|
||
// makes the data observable as changes viewport
|
||
observable_1.observe(function () {
|
||
lazyObservable_1.createObservableData(store);
|
||
}, false, 'lazyObservable');
|
||
return store;
|
||
}
|
||
exports.createStore = createStore;
|
||
|
||
|
||
/***/ }),
|
||
/* 65 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.patchArrayMethods = void 0;
|
||
var observable_1 = __webpack_require__(5);
|
||
var common_1 = __webpack_require__(0);
|
||
var methods = ['splice', 'push', 'pop', 'shift', 'unshift'];
|
||
function patchArrayMethods(arr, obj, key) {
|
||
methods.forEach(function (method) {
|
||
var patchedMethod = common_1.hasOwnProp(arr, method) ? arr[method] : Array.prototype[method];
|
||
var derivedPatchedMethod = !patchedMethod.registered && common_1.hasOwnProp(arr, method);
|
||
// To prevent to stack the patched method recursively
|
||
if (derivedPatchedMethod || !common_1.hasOwnProp(arr, method)) {
|
||
arr[method] = function patch() {
|
||
var args = [];
|
||
for (var _i = 0; _i < arguments.length; _i++) {
|
||
args[_i] = arguments[_i];
|
||
}
|
||
var result = patchedMethod.apply(this, args);
|
||
observable_1.notify(obj, key);
|
||
return result;
|
||
};
|
||
if (derivedPatchedMethod) {
|
||
arr[method].registered = true;
|
||
}
|
||
}
|
||
});
|
||
return arr;
|
||
}
|
||
exports.patchArrayMethods = patchArrayMethods;
|
||
|
||
|
||
/***/ }),
|
||
/* 66 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.listItemText = void 0;
|
||
var common_1 = __webpack_require__(0);
|
||
function getListItemText(listItems, value) {
|
||
var item = common_1.findProp('value', value, listItems);
|
||
return item ? item.text : '';
|
||
}
|
||
function listItemText(_a, relationListItems) {
|
||
var column = _a.column, value = _a.value;
|
||
var type = column.editor.options.type;
|
||
var listItems = column.editor.options.listItems;
|
||
if (Array.isArray(relationListItems)) {
|
||
listItems = relationListItems;
|
||
}
|
||
if (type === 'checkbox') {
|
||
return String(value)
|
||
.split(',')
|
||
.map(getListItemText.bind(null, listItems))
|
||
.filter(function (text) { return Boolean(text); })
|
||
.join(',');
|
||
}
|
||
return getListItemText(listItems, value);
|
||
}
|
||
exports.listItemText = listItemText;
|
||
|
||
|
||
/***/ }),
|
||
/* 67 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.DefaultRenderer = void 0;
|
||
var dom_1 = __webpack_require__(2);
|
||
var common_1 = __webpack_require__(0);
|
||
var DefaultRenderer = /** @class */ (function () {
|
||
function DefaultRenderer(props) {
|
||
var el = document.createElement('div');
|
||
var _a = props.columnInfo, ellipsis = _a.ellipsis, whiteSpace = _a.whiteSpace, renderer = _a.renderer;
|
||
var className = '';
|
||
this.props = props;
|
||
this.el = el;
|
||
if (renderer) {
|
||
var attributes = renderer.attributes, styles = renderer.styles, classNames = renderer.classNames;
|
||
if (attributes) {
|
||
this.setAttrsOrStyles('attrs', attributes);
|
||
}
|
||
if (styles) {
|
||
this.setAttrsOrStyles('styles', styles);
|
||
}
|
||
if (classNames) {
|
||
className = " " + classNames.join(' ');
|
||
}
|
||
}
|
||
el.className = dom_1.cls('cell-content') + className;
|
||
// @TODO: we should remove below options and consider common the renderer option for style, attribute and class names
|
||
if (ellipsis) {
|
||
el.style.textOverflow = 'ellipsis';
|
||
}
|
||
if (whiteSpace) {
|
||
el.style.whiteSpace = whiteSpace;
|
||
}
|
||
this.render(props);
|
||
}
|
||
DefaultRenderer.prototype.setAttrsOrStyles = function (type, targets) {
|
||
var _this = this;
|
||
Object.keys(targets).forEach(function (name) {
|
||
var value = common_1.isFunction(targets[name]) ? targets[name](_this.props) : targets[name];
|
||
if (type === 'attrs') {
|
||
_this.el.setAttribute(name, value);
|
||
}
|
||
else {
|
||
_this.el.style[name] = value;
|
||
}
|
||
});
|
||
};
|
||
DefaultRenderer.prototype.getElement = function () {
|
||
return this.el;
|
||
};
|
||
DefaultRenderer.prototype.render = function (props) {
|
||
this.el.innerHTML = "" + props.formattedValue;
|
||
};
|
||
return DefaultRenderer;
|
||
}());
|
||
exports.DefaultRenderer = DefaultRenderer;
|
||
|
||
|
||
/***/ }),
|
||
/* 68 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.editorMap = void 0;
|
||
var text_1 = __webpack_require__(69);
|
||
var checkbox_1 = __webpack_require__(70);
|
||
var select_1 = __webpack_require__(71);
|
||
var datePicker_1 = __webpack_require__(74);
|
||
exports.editorMap = {
|
||
text: [text_1.TextEditor, { type: 'text' }],
|
||
password: [text_1.TextEditor, { type: 'password' }],
|
||
checkbox: [checkbox_1.CheckboxEditor, { type: 'checkbox' }],
|
||
radio: [checkbox_1.CheckboxEditor, { type: 'radio' }],
|
||
select: [select_1.SelectEditor],
|
||
datePicker: [datePicker_1.DatePickerEditor],
|
||
};
|
||
|
||
|
||
/***/ }),
|
||
/* 69 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.TextEditor = void 0;
|
||
var dom_1 = __webpack_require__(2);
|
||
var common_1 = __webpack_require__(0);
|
||
var TextEditor = /** @class */ (function () {
|
||
function TextEditor(props) {
|
||
var el = document.createElement('input');
|
||
var options = props.columnInfo.editor.options;
|
||
el.className = dom_1.cls('content-text');
|
||
el.type = options.type;
|
||
el.value = String(common_1.isNil(props.value) ? '' : props.value);
|
||
this.el = el;
|
||
}
|
||
TextEditor.prototype.getElement = function () {
|
||
return this.el;
|
||
};
|
||
TextEditor.prototype.getValue = function () {
|
||
return this.el.value;
|
||
};
|
||
TextEditor.prototype.mounted = function () {
|
||
this.el.select();
|
||
};
|
||
return TextEditor;
|
||
}());
|
||
exports.TextEditor = TextEditor;
|
||
|
||
|
||
/***/ }),
|
||
/* 70 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.CheckboxEditor = void 0;
|
||
var editor_1 = __webpack_require__(42);
|
||
var dom_1 = __webpack_require__(2);
|
||
var keyboard_1 = __webpack_require__(17);
|
||
var common_1 = __webpack_require__(0);
|
||
var dom_2 = __webpack_require__(34);
|
||
var LAYER_CLASSNAME = dom_1.cls('editor-checkbox-list-layer');
|
||
var LIST_ITEM_CLASSNAME = dom_1.cls('editor-checkbox');
|
||
var HOVERED_LIST_ITEM_CLASSNAME = dom_1.cls('editor-checkbox-hovered') + " " + LIST_ITEM_CLASSNAME;
|
||
var UNCHECKED_RADIO_LABEL_CLASSNAME = dom_1.cls('editor-label-icon-radio');
|
||
var CHECKED_RADIO_LABEL_CLASSNAME = dom_1.cls('editor-label-icon-radio-checked');
|
||
var UNCHECKED_CHECKBOX_LABEL_CLASSNAME = dom_1.cls('editor-label-icon-checkbox');
|
||
var CHECKED_CHECKBOX_LABEL_CLASSNAME = dom_1.cls('editor-label-icon-checkbox-checked');
|
||
var CheckboxEditor = /** @class */ (function () {
|
||
function CheckboxEditor(props) {
|
||
var _this = this;
|
||
this.hoveredItemId = '';
|
||
this.elementIds = [];
|
||
this.initLayerPos = null;
|
||
this.onMouseover = function (ev) {
|
||
var targetId = _this.getItemId(ev.target);
|
||
if (targetId && targetId !== _this.hoveredItemId) {
|
||
_this.highlightItem(targetId);
|
||
}
|
||
};
|
||
this.onChange = function (ev) {
|
||
var value = ev.target.value;
|
||
_this.setLabelClass(value);
|
||
};
|
||
this.onKeydown = function (ev) {
|
||
var keyName = keyboard_1.getKeyStrokeString(ev);
|
||
if (keyboard_1.isArrowKey(keyName)) {
|
||
ev.preventDefault();
|
||
var elementIdx = common_1.findIndex(function (id) { return id === _this.hoveredItemId; }, _this.elementIds);
|
||
var totalCount = _this.elementIds.length;
|
||
var offset = totalCount + (keyName === 'down' || keyName === 'right' ? 1 : -1);
|
||
var id = _this.elementIds[(elementIdx + offset) % totalCount];
|
||
_this.highlightItem(id);
|
||
}
|
||
else {
|
||
// except arrow key, pass the event to editing layer for using existing editing keyMap
|
||
_this.portalEditingKeydown(ev);
|
||
}
|
||
};
|
||
var columnInfo = props.columnInfo, width = props.width, formattedValue = props.formattedValue, portalEditingKeydown = props.portalEditingKeydown;
|
||
var el = document.createElement('div');
|
||
var value = String(common_1.isNil(props.value) ? '' : props.value);
|
||
el.className = dom_1.cls('layer-editing-inner');
|
||
el.innerText = formattedValue;
|
||
this.inputType = columnInfo.editor.options.type;
|
||
var listItems = editor_1.getListItems(props);
|
||
var layer = this.createLayer(listItems, width);
|
||
this.portalEditingKeydown = portalEditingKeydown;
|
||
this.el = el;
|
||
this.layer = layer;
|
||
this.setValue(value);
|
||
}
|
||
CheckboxEditor.prototype.createLayer = function (listItems, width) {
|
||
var _this = this;
|
||
var layer = document.createElement('ul');
|
||
layer.className = LAYER_CLASSNAME;
|
||
layer.style.minWidth = width - 10 + "px";
|
||
// To hide the initial layer which is having the position which is not calculated properly
|
||
dom_2.setOpacity(layer, 0);
|
||
listItems.forEach(function (_a) {
|
||
var text = _a.text, value = _a.value;
|
||
var id = "checkbox-" + value;
|
||
var listItemEl = document.createElement('li');
|
||
listItemEl.id = id;
|
||
listItemEl.className = LIST_ITEM_CLASSNAME;
|
||
listItemEl.appendChild(_this.createCheckboxLabel(value, text));
|
||
_this.elementIds.push(id);
|
||
layer.appendChild(listItemEl);
|
||
});
|
||
layer.addEventListener('change', this.onChange);
|
||
layer.addEventListener('mouseover', this.onMouseover);
|
||
layer.addEventListener('keydown', this.onKeydown);
|
||
return layer;
|
||
};
|
||
CheckboxEditor.prototype.createCheckboxLabel = function (value, text) {
|
||
var input = document.createElement('input');
|
||
var label = document.createElement('label');
|
||
var span = document.createElement('span');
|
||
label.className =
|
||
this.inputType === 'radio'
|
||
? UNCHECKED_RADIO_LABEL_CLASSNAME
|
||
: UNCHECKED_CHECKBOX_LABEL_CLASSNAME;
|
||
input.type = this.inputType;
|
||
input.name = 'checkbox';
|
||
input.value = String(value);
|
||
span.innerText = text;
|
||
label.appendChild(input);
|
||
label.appendChild(span);
|
||
return label;
|
||
};
|
||
CheckboxEditor.prototype.getItemId = function (target) {
|
||
return target.id || target.parentElement.id;
|
||
};
|
||
CheckboxEditor.prototype.highlightItem = function (targetId) {
|
||
if (this.hoveredItemId) {
|
||
this.layer.querySelector("#" + this.hoveredItemId).className = LIST_ITEM_CLASSNAME;
|
||
}
|
||
this.hoveredItemId = targetId;
|
||
var item = this.layer.querySelector("#" + targetId);
|
||
item.className = HOVERED_LIST_ITEM_CLASSNAME;
|
||
item.querySelector('input').focus();
|
||
};
|
||
CheckboxEditor.prototype.setLabelClass = function (inputValue) {
|
||
var label = this.layer.querySelector("#checkbox-" + inputValue + " label");
|
||
if (this.inputType === 'checkbox') {
|
||
label.className = dom_1.hasClass(label, 'editor-label-icon-checkbox-checked')
|
||
? UNCHECKED_CHECKBOX_LABEL_CLASSNAME
|
||
: CHECKED_CHECKBOX_LABEL_CLASSNAME;
|
||
}
|
||
else {
|
||
var checkedLabel = this.layer.querySelector("." + CHECKED_RADIO_LABEL_CLASSNAME);
|
||
if (checkedLabel) {
|
||
checkedLabel.className = UNCHECKED_RADIO_LABEL_CLASSNAME;
|
||
}
|
||
label.className = CHECKED_RADIO_LABEL_CLASSNAME;
|
||
}
|
||
};
|
||
CheckboxEditor.prototype.getCheckedInput = function () {
|
||
return (this.layer.querySelector('input:checked') ||
|
||
this.layer.querySelector('input'));
|
||
};
|
||
CheckboxEditor.prototype.moveDropdownLayer = function (gridRect) {
|
||
if (this.initLayerPos) {
|
||
dom_2.moveLayer(this.layer, this.initLayerPos, gridRect);
|
||
}
|
||
};
|
||
CheckboxEditor.prototype.getElement = function () {
|
||
return this.el;
|
||
};
|
||
CheckboxEditor.prototype.setValue = function (value) {
|
||
var _this = this;
|
||
String(value)
|
||
.split(',')
|
||
.forEach(function (inputValue) {
|
||
var input = _this.layer.querySelector("input[value=\"" + inputValue + "\"]");
|
||
if (input) {
|
||
input.checked = true;
|
||
_this.setLabelClass(inputValue);
|
||
}
|
||
});
|
||
};
|
||
CheckboxEditor.prototype.getValue = function () {
|
||
var checkedInputs = this.layer.querySelectorAll('input:checked');
|
||
var checkedValues = [];
|
||
for (var i = 0, len = checkedInputs.length; i < len; i += 1) {
|
||
checkedValues.push(checkedInputs[i].value);
|
||
}
|
||
return checkedValues.join(',');
|
||
};
|
||
CheckboxEditor.prototype.mounted = function () {
|
||
// To prevent wrong stacked z-index context, layer append to grid container
|
||
dom_2.getContainerElement(this.el).appendChild(this.layer);
|
||
// @ts-ignore
|
||
dom_2.setLayerPosition(this.el, this.layer);
|
||
this.initLayerPos = {
|
||
top: common_1.pixelToNumber(this.layer.style.top),
|
||
left: common_1.pixelToNumber(this.layer.style.left),
|
||
};
|
||
var checkedInput = this.getCheckedInput();
|
||
if (checkedInput) {
|
||
this.highlightItem("checkbox-" + checkedInput.value);
|
||
}
|
||
// To show the layer which has appropriate position
|
||
dom_2.setOpacity(this.layer, 1);
|
||
};
|
||
CheckboxEditor.prototype.beforeDestroy = function () {
|
||
this.layer.removeEventListener('change', this.onChange);
|
||
this.layer.removeEventListener('mouseover', this.onMouseover);
|
||
this.layer.removeEventListener('keydown', this.onKeydown);
|
||
dom_2.getContainerElement(this.el).removeChild(this.layer);
|
||
this.initLayerPos = null;
|
||
};
|
||
return CheckboxEditor;
|
||
}());
|
||
exports.CheckboxEditor = CheckboxEditor;
|
||
|
||
|
||
/***/ }),
|
||
/* 71 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.SelectEditor = void 0;
|
||
var tslib_1 = __webpack_require__(1);
|
||
var select_box_1 = tslib_1.__importDefault(__webpack_require__(72));
|
||
__webpack_require__(73);
|
||
var editor_1 = __webpack_require__(42);
|
||
var dom_1 = __webpack_require__(2);
|
||
var dom_2 = __webpack_require__(34);
|
||
var keyboard_1 = __webpack_require__(17);
|
||
var common_1 = __webpack_require__(0);
|
||
var SelectEditor = /** @class */ (function () {
|
||
function SelectEditor(props) {
|
||
var _this = this;
|
||
this.selectFinish = false;
|
||
this.isMounted = false;
|
||
this.initLayerPos = null;
|
||
this.onKeydown = function (ev) {
|
||
var passingKeyNames = ['esc', 'shift-tab', 'tab'];
|
||
var keyName = keyboard_1.getKeyStrokeString(ev);
|
||
if (_this.selectFinish || common_1.includes(passingKeyNames, keyName)) {
|
||
// with passingKeyNames, pass the event to editing layer for using existing editing keyMap
|
||
_this.portalEditingKeydown(ev);
|
||
}
|
||
else {
|
||
ev.preventDefault();
|
||
}
|
||
};
|
||
var width = props.width, formattedValue = props.formattedValue, portalEditingKeydown = props.portalEditingKeydown;
|
||
var el = document.createElement('div');
|
||
var value = String(common_1.isNil(props.value) ? '' : props.value);
|
||
el.className = dom_1.cls('layer-editing-inner');
|
||
el.innerText = formattedValue;
|
||
var listItems = editor_1.getListItems(props);
|
||
var layer = this.createLayer(listItems, width, value);
|
||
this.portalEditingKeydown = portalEditingKeydown;
|
||
this.el = el;
|
||
this.layer = layer;
|
||
this.layer.addEventListener('keydown', this.onKeydown);
|
||
}
|
||
SelectEditor.prototype.setSelectFinish = function (selectFinish) {
|
||
var _this = this;
|
||
setTimeout(function () {
|
||
_this.selectFinish = selectFinish;
|
||
});
|
||
};
|
||
SelectEditor.prototype.createLayer = function (listItems, width, value) {
|
||
var _this = this;
|
||
var layer = document.createElement('div');
|
||
layer.className = dom_1.cls('editor-select-box-layer');
|
||
layer.style.minWidth = width - 10 + "px";
|
||
// To hide the initial layer which is having the position which is not calculated properly
|
||
dom_2.setOpacity(layer, 0);
|
||
var data = listItems.map(function (item) { return ({ value: String(item.value), label: item.text }); });
|
||
this.selectBoxEl = new select_box_1.default(layer, { data: data });
|
||
this.selectBoxEl.on('close', function () {
|
||
_this.focusSelectBox();
|
||
_this.setSelectFinish(true);
|
||
// @ts-ignore
|
||
dom_2.setLayerPosition(_this.el, _this.layer, _this.selectBoxEl.dropdown.el);
|
||
});
|
||
this.selectBoxEl.on('open', function () {
|
||
_this.setSelectFinish(false);
|
||
if (_this.isMounted) {
|
||
// @ts-ignore
|
||
dom_2.setLayerPosition(_this.el, _this.layer, _this.selectBoxEl.dropdown.el);
|
||
}
|
||
});
|
||
if (value) {
|
||
this.selectBoxEl.select(value);
|
||
}
|
||
return layer;
|
||
};
|
||
SelectEditor.prototype.focusSelectBox = function () {
|
||
// https://github.com/nhn/toast-ui.select-box/issues/3
|
||
// @TODO: need to change after apply this issue
|
||
// @ts-ignore
|
||
this.selectBoxEl.input.focus();
|
||
};
|
||
SelectEditor.prototype.moveDropdownLayer = function (gridRect) {
|
||
if (this.initLayerPos) {
|
||
dom_2.moveLayer(this.layer, this.initLayerPos, gridRect);
|
||
}
|
||
};
|
||
SelectEditor.prototype.getElement = function () {
|
||
return this.el;
|
||
};
|
||
SelectEditor.prototype.getValue = function () {
|
||
var _a, _b;
|
||
return (_b = (_a = this.selectBoxEl.getSelectedItem()) === null || _a === void 0 ? void 0 : _a.getValue()) !== null && _b !== void 0 ? _b : '';
|
||
};
|
||
SelectEditor.prototype.mounted = function () {
|
||
this.selectBoxEl.open();
|
||
// To prevent wrong stacked z-index context, layer append to grid container
|
||
dom_2.getContainerElement(this.el).appendChild(this.layer);
|
||
// @ts-ignore
|
||
dom_2.setLayerPosition(this.el, this.layer, this.selectBoxEl.dropdown.el);
|
||
this.initLayerPos = {
|
||
top: common_1.pixelToNumber(this.layer.style.top),
|
||
left: common_1.pixelToNumber(this.layer.style.left),
|
||
};
|
||
this.focusSelectBox();
|
||
this.isMounted = true;
|
||
// To show the layer which has appropriate position
|
||
dom_2.setOpacity(this.layer, 1);
|
||
};
|
||
SelectEditor.prototype.beforeDestroy = function () {
|
||
this.selectBoxEl.destroy();
|
||
this.layer.removeEventListener('keydown', this.onKeydown);
|
||
dom_2.getContainerElement(this.el).removeChild(this.layer);
|
||
this.initLayerPos = null;
|
||
};
|
||
return SelectEditor;
|
||
}());
|
||
exports.SelectEditor = SelectEditor;
|
||
|
||
|
||
/***/ }),
|
||
/* 72 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
/*!
|
||
* TOAST UI Select Box
|
||
* @version 1.0.0 | Thu Oct 24 2019
|
||
* @author NHN FE Development Lab <dl_javascript@nhn.com>
|
||
* @license MIT
|
||
*/
|
||
(function webpackUniversalModuleDefinition(root, factory) {
|
||
if(true)
|
||
module.exports = factory();
|
||
else {}
|
||
})(window, function() {
|
||
return /******/ (function(modules) { // webpackBootstrap
|
||
/******/ function hotDisposeChunk(chunkId) {
|
||
/******/ delete installedChunks[chunkId];
|
||
/******/ }
|
||
/******/ var parentHotUpdateCallback = window["webpackHotUpdate"];
|
||
/******/ window["webpackHotUpdate"] = // eslint-disable-next-line no-unused-vars
|
||
/******/ function webpackHotUpdateCallback(chunkId, moreModules) {
|
||
/******/ hotAddUpdateChunk(chunkId, moreModules);
|
||
/******/ if (parentHotUpdateCallback) parentHotUpdateCallback(chunkId, moreModules);
|
||
/******/ } ;
|
||
/******/
|
||
/******/ // eslint-disable-next-line no-unused-vars
|
||
/******/ function hotDownloadUpdateChunk(chunkId) {
|
||
/******/ var script = document.createElement("script");
|
||
/******/ script.charset = "utf-8";
|
||
/******/ script.src = __webpack_require__.p + "" + chunkId + "." + hotCurrentHash + ".hot-update.js";
|
||
/******/ if (null) {}
|
||
/******/ document.head.appendChild(script);
|
||
/******/ }
|
||
/******/
|
||
/******/ // eslint-disable-next-line no-unused-vars
|
||
/******/ function hotDownloadManifest(requestTimeout) {
|
||
/******/ requestTimeout = requestTimeout || 10000;
|
||
/******/ return new Promise(function(resolve, reject) {
|
||
/******/ if (typeof XMLHttpRequest === "undefined") {
|
||
/******/ return reject(new Error("No browser support"));
|
||
/******/ }
|
||
/******/ try {
|
||
/******/ var request = new XMLHttpRequest();
|
||
/******/ var requestPath = __webpack_require__.p + "" + hotCurrentHash + ".hot-update.json";
|
||
/******/ request.open("GET", requestPath, true);
|
||
/******/ request.timeout = requestTimeout;
|
||
/******/ request.send(null);
|
||
/******/ } catch (err) {
|
||
/******/ return reject(err);
|
||
/******/ }
|
||
/******/ request.onreadystatechange = function() {
|
||
/******/ if (request.readyState !== 4) return;
|
||
/******/ if (request.status === 0) {
|
||
/******/ // timeout
|
||
/******/ reject(
|
||
/******/ new Error("Manifest request to " + requestPath + " timed out.")
|
||
/******/ );
|
||
/******/ } else if (request.status === 404) {
|
||
/******/ // no update available
|
||
/******/ resolve();
|
||
/******/ } else if (request.status !== 200 && request.status !== 304) {
|
||
/******/ // other failure
|
||
/******/ reject(new Error("Manifest request to " + requestPath + " failed."));
|
||
/******/ } else {
|
||
/******/ // success
|
||
/******/ try {
|
||
/******/ var update = JSON.parse(request.responseText);
|
||
/******/ } catch (e) {
|
||
/******/ reject(e);
|
||
/******/ return;
|
||
/******/ }
|
||
/******/ resolve(update);
|
||
/******/ }
|
||
/******/ };
|
||
/******/ });
|
||
/******/ }
|
||
/******/
|
||
/******/ var hotApplyOnUpdate = true;
|
||
/******/ // eslint-disable-next-line no-unused-vars
|
||
/******/ var hotCurrentHash = "fbd02ae0ea88b9f7e886";
|
||
/******/ var hotRequestTimeout = 10000;
|
||
/******/ var hotCurrentModuleData = {};
|
||
/******/ var hotCurrentChildModule;
|
||
/******/ // eslint-disable-next-line no-unused-vars
|
||
/******/ var hotCurrentParents = [];
|
||
/******/ // eslint-disable-next-line no-unused-vars
|
||
/******/ var hotCurrentParentsTemp = [];
|
||
/******/
|
||
/******/ // eslint-disable-next-line no-unused-vars
|
||
/******/ function hotCreateRequire(moduleId) {
|
||
/******/ var me = installedModules[moduleId];
|
||
/******/ if (!me) return __webpack_require__;
|
||
/******/ var fn = function(request) {
|
||
/******/ if (me.hot.active) {
|
||
/******/ if (installedModules[request]) {
|
||
/******/ if (installedModules[request].parents.indexOf(moduleId) === -1) {
|
||
/******/ installedModules[request].parents.push(moduleId);
|
||
/******/ }
|
||
/******/ } else {
|
||
/******/ hotCurrentParents = [moduleId];
|
||
/******/ hotCurrentChildModule = request;
|
||
/******/ }
|
||
/******/ if (me.children.indexOf(request) === -1) {
|
||
/******/ me.children.push(request);
|
||
/******/ }
|
||
/******/ } else {
|
||
/******/ console.warn(
|
||
/******/ "[HMR] unexpected require(" +
|
||
/******/ request +
|
||
/******/ ") from disposed module " +
|
||
/******/ moduleId
|
||
/******/ );
|
||
/******/ hotCurrentParents = [];
|
||
/******/ }
|
||
/******/ return __webpack_require__(request);
|
||
/******/ };
|
||
/******/ var ObjectFactory = function ObjectFactory(name) {
|
||
/******/ return {
|
||
/******/ configurable: true,
|
||
/******/ enumerable: true,
|
||
/******/ get: function() {
|
||
/******/ return __webpack_require__[name];
|
||
/******/ },
|
||
/******/ set: function(value) {
|
||
/******/ __webpack_require__[name] = value;
|
||
/******/ }
|
||
/******/ };
|
||
/******/ };
|
||
/******/ for (var name in __webpack_require__) {
|
||
/******/ if (
|
||
/******/ Object.prototype.hasOwnProperty.call(__webpack_require__, name) &&
|
||
/******/ name !== "e" &&
|
||
/******/ name !== "t"
|
||
/******/ ) {
|
||
/******/ Object.defineProperty(fn, name, ObjectFactory(name));
|
||
/******/ }
|
||
/******/ }
|
||
/******/ fn.e = function(chunkId) {
|
||
/******/ if (hotStatus === "ready") hotSetStatus("prepare");
|
||
/******/ hotChunksLoading++;
|
||
/******/ return __webpack_require__.e(chunkId).then(finishChunkLoading, function(err) {
|
||
/******/ finishChunkLoading();
|
||
/******/ throw err;
|
||
/******/ });
|
||
/******/
|
||
/******/ function finishChunkLoading() {
|
||
/******/ hotChunksLoading--;
|
||
/******/ if (hotStatus === "prepare") {
|
||
/******/ if (!hotWaitingFilesMap[chunkId]) {
|
||
/******/ hotEnsureUpdateChunk(chunkId);
|
||
/******/ }
|
||
/******/ if (hotChunksLoading === 0 && hotWaitingFiles === 0) {
|
||
/******/ hotUpdateDownloaded();
|
||
/******/ }
|
||
/******/ }
|
||
/******/ }
|
||
/******/ };
|
||
/******/ fn.t = function(value, mode) {
|
||
/******/ if (mode & 1) value = fn(value);
|
||
/******/ return __webpack_require__.t(value, mode & ~1);
|
||
/******/ };
|
||
/******/ return fn;
|
||
/******/ }
|
||
/******/
|
||
/******/ // eslint-disable-next-line no-unused-vars
|
||
/******/ function hotCreateModule(moduleId) {
|
||
/******/ var hot = {
|
||
/******/ // private stuff
|
||
/******/ _acceptedDependencies: {},
|
||
/******/ _declinedDependencies: {},
|
||
/******/ _selfAccepted: false,
|
||
/******/ _selfDeclined: false,
|
||
/******/ _disposeHandlers: [],
|
||
/******/ _main: hotCurrentChildModule !== moduleId,
|
||
/******/
|
||
/******/ // Module API
|
||
/******/ active: true,
|
||
/******/ accept: function(dep, callback) {
|
||
/******/ if (dep === undefined) hot._selfAccepted = true;
|
||
/******/ else if (typeof dep === "function") hot._selfAccepted = dep;
|
||
/******/ else if (typeof dep === "object")
|
||
/******/ for (var i = 0; i < dep.length; i++)
|
||
/******/ hot._acceptedDependencies[dep[i]] = callback || function() {};
|
||
/******/ else hot._acceptedDependencies[dep] = callback || function() {};
|
||
/******/ },
|
||
/******/ decline: function(dep) {
|
||
/******/ if (dep === undefined) hot._selfDeclined = true;
|
||
/******/ else if (typeof dep === "object")
|
||
/******/ for (var i = 0; i < dep.length; i++)
|
||
/******/ hot._declinedDependencies[dep[i]] = true;
|
||
/******/ else hot._declinedDependencies[dep] = true;
|
||
/******/ },
|
||
/******/ dispose: function(callback) {
|
||
/******/ hot._disposeHandlers.push(callback);
|
||
/******/ },
|
||
/******/ addDisposeHandler: function(callback) {
|
||
/******/ hot._disposeHandlers.push(callback);
|
||
/******/ },
|
||
/******/ removeDisposeHandler: function(callback) {
|
||
/******/ var idx = hot._disposeHandlers.indexOf(callback);
|
||
/******/ if (idx >= 0) hot._disposeHandlers.splice(idx, 1);
|
||
/******/ },
|
||
/******/
|
||
/******/ // Management API
|
||
/******/ check: hotCheck,
|
||
/******/ apply: hotApply,
|
||
/******/ status: function(l) {
|
||
/******/ if (!l) return hotStatus;
|
||
/******/ hotStatusHandlers.push(l);
|
||
/******/ },
|
||
/******/ addStatusHandler: function(l) {
|
||
/******/ hotStatusHandlers.push(l);
|
||
/******/ },
|
||
/******/ removeStatusHandler: function(l) {
|
||
/******/ var idx = hotStatusHandlers.indexOf(l);
|
||
/******/ if (idx >= 0) hotStatusHandlers.splice(idx, 1);
|
||
/******/ },
|
||
/******/
|
||
/******/ //inherit from previous dispose call
|
||
/******/ data: hotCurrentModuleData[moduleId]
|
||
/******/ };
|
||
/******/ hotCurrentChildModule = undefined;
|
||
/******/ return hot;
|
||
/******/ }
|
||
/******/
|
||
/******/ var hotStatusHandlers = [];
|
||
/******/ var hotStatus = "idle";
|
||
/******/
|
||
/******/ function hotSetStatus(newStatus) {
|
||
/******/ hotStatus = newStatus;
|
||
/******/ for (var i = 0; i < hotStatusHandlers.length; i++)
|
||
/******/ hotStatusHandlers[i].call(null, newStatus);
|
||
/******/ }
|
||
/******/
|
||
/******/ // while downloading
|
||
/******/ var hotWaitingFiles = 0;
|
||
/******/ var hotChunksLoading = 0;
|
||
/******/ var hotWaitingFilesMap = {};
|
||
/******/ var hotRequestedFilesMap = {};
|
||
/******/ var hotAvailableFilesMap = {};
|
||
/******/ var hotDeferred;
|
||
/******/
|
||
/******/ // The update info
|
||
/******/ var hotUpdate, hotUpdateNewHash;
|
||
/******/
|
||
/******/ function toModuleId(id) {
|
||
/******/ var isNumber = +id + "" === id;
|
||
/******/ return isNumber ? +id : id;
|
||
/******/ }
|
||
/******/
|
||
/******/ function hotCheck(apply) {
|
||
/******/ if (hotStatus !== "idle") {
|
||
/******/ throw new Error("check() is only allowed in idle status");
|
||
/******/ }
|
||
/******/ hotApplyOnUpdate = apply;
|
||
/******/ hotSetStatus("check");
|
||
/******/ return hotDownloadManifest(hotRequestTimeout).then(function(update) {
|
||
/******/ if (!update) {
|
||
/******/ hotSetStatus("idle");
|
||
/******/ return null;
|
||
/******/ }
|
||
/******/ hotRequestedFilesMap = {};
|
||
/******/ hotWaitingFilesMap = {};
|
||
/******/ hotAvailableFilesMap = update.c;
|
||
/******/ hotUpdateNewHash = update.h;
|
||
/******/
|
||
/******/ hotSetStatus("prepare");
|
||
/******/ var promise = new Promise(function(resolve, reject) {
|
||
/******/ hotDeferred = {
|
||
/******/ resolve: resolve,
|
||
/******/ reject: reject
|
||
/******/ };
|
||
/******/ });
|
||
/******/ hotUpdate = {};
|
||
/******/ var chunkId = "main";
|
||
/******/ // eslint-disable-next-line no-lone-blocks
|
||
/******/ {
|
||
/******/ /*globals chunkId */
|
||
/******/ hotEnsureUpdateChunk(chunkId);
|
||
/******/ }
|
||
/******/ if (
|
||
/******/ hotStatus === "prepare" &&
|
||
/******/ hotChunksLoading === 0 &&
|
||
/******/ hotWaitingFiles === 0
|
||
/******/ ) {
|
||
/******/ hotUpdateDownloaded();
|
||
/******/ }
|
||
/******/ return promise;
|
||
/******/ });
|
||
/******/ }
|
||
/******/
|
||
/******/ // eslint-disable-next-line no-unused-vars
|
||
/******/ function hotAddUpdateChunk(chunkId, moreModules) {
|
||
/******/ if (!hotAvailableFilesMap[chunkId] || !hotRequestedFilesMap[chunkId])
|
||
/******/ return;
|
||
/******/ hotRequestedFilesMap[chunkId] = false;
|
||
/******/ for (var moduleId in moreModules) {
|
||
/******/ if (Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {
|
||
/******/ hotUpdate[moduleId] = moreModules[moduleId];
|
||
/******/ }
|
||
/******/ }
|
||
/******/ if (--hotWaitingFiles === 0 && hotChunksLoading === 0) {
|
||
/******/ hotUpdateDownloaded();
|
||
/******/ }
|
||
/******/ }
|
||
/******/
|
||
/******/ function hotEnsureUpdateChunk(chunkId) {
|
||
/******/ if (!hotAvailableFilesMap[chunkId]) {
|
||
/******/ hotWaitingFilesMap[chunkId] = true;
|
||
/******/ } else {
|
||
/******/ hotRequestedFilesMap[chunkId] = true;
|
||
/******/ hotWaitingFiles++;
|
||
/******/ hotDownloadUpdateChunk(chunkId);
|
||
/******/ }
|
||
/******/ }
|
||
/******/
|
||
/******/ function hotUpdateDownloaded() {
|
||
/******/ hotSetStatus("ready");
|
||
/******/ var deferred = hotDeferred;
|
||
/******/ hotDeferred = null;
|
||
/******/ if (!deferred) return;
|
||
/******/ if (hotApplyOnUpdate) {
|
||
/******/ // Wrap deferred object in Promise to mark it as a well-handled Promise to
|
||
/******/ // avoid triggering uncaught exception warning in Chrome.
|
||
/******/ // See https://bugs.chromium.org/p/chromium/issues/detail?id=465666
|
||
/******/ Promise.resolve()
|
||
/******/ .then(function() {
|
||
/******/ return hotApply(hotApplyOnUpdate);
|
||
/******/ })
|
||
/******/ .then(
|
||
/******/ function(result) {
|
||
/******/ deferred.resolve(result);
|
||
/******/ },
|
||
/******/ function(err) {
|
||
/******/ deferred.reject(err);
|
||
/******/ }
|
||
/******/ );
|
||
/******/ } else {
|
||
/******/ var outdatedModules = [];
|
||
/******/ for (var id in hotUpdate) {
|
||
/******/ if (Object.prototype.hasOwnProperty.call(hotUpdate, id)) {
|
||
/******/ outdatedModules.push(toModuleId(id));
|
||
/******/ }
|
||
/******/ }
|
||
/******/ deferred.resolve(outdatedModules);
|
||
/******/ }
|
||
/******/ }
|
||
/******/
|
||
/******/ function hotApply(options) {
|
||
/******/ if (hotStatus !== "ready")
|
||
/******/ throw new Error("apply() is only allowed in ready status");
|
||
/******/ options = options || {};
|
||
/******/
|
||
/******/ var cb;
|
||
/******/ var i;
|
||
/******/ var j;
|
||
/******/ var module;
|
||
/******/ var moduleId;
|
||
/******/
|
||
/******/ function getAffectedStuff(updateModuleId) {
|
||
/******/ var outdatedModules = [updateModuleId];
|
||
/******/ var outdatedDependencies = {};
|
||
/******/
|
||
/******/ var queue = outdatedModules.map(function(id) {
|
||
/******/ return {
|
||
/******/ chain: [id],
|
||
/******/ id: id
|
||
/******/ };
|
||
/******/ });
|
||
/******/ while (queue.length > 0) {
|
||
/******/ var queueItem = queue.pop();
|
||
/******/ var moduleId = queueItem.id;
|
||
/******/ var chain = queueItem.chain;
|
||
/******/ module = installedModules[moduleId];
|
||
/******/ if (!module || module.hot._selfAccepted) continue;
|
||
/******/ if (module.hot._selfDeclined) {
|
||
/******/ return {
|
||
/******/ type: "self-declined",
|
||
/******/ chain: chain,
|
||
/******/ moduleId: moduleId
|
||
/******/ };
|
||
/******/ }
|
||
/******/ if (module.hot._main) {
|
||
/******/ return {
|
||
/******/ type: "unaccepted",
|
||
/******/ chain: chain,
|
||
/******/ moduleId: moduleId
|
||
/******/ };
|
||
/******/ }
|
||
/******/ for (var i = 0; i < module.parents.length; i++) {
|
||
/******/ var parentId = module.parents[i];
|
||
/******/ var parent = installedModules[parentId];
|
||
/******/ if (!parent) continue;
|
||
/******/ if (parent.hot._declinedDependencies[moduleId]) {
|
||
/******/ return {
|
||
/******/ type: "declined",
|
||
/******/ chain: chain.concat([parentId]),
|
||
/******/ moduleId: moduleId,
|
||
/******/ parentId: parentId
|
||
/******/ };
|
||
/******/ }
|
||
/******/ if (outdatedModules.indexOf(parentId) !== -1) continue;
|
||
/******/ if (parent.hot._acceptedDependencies[moduleId]) {
|
||
/******/ if (!outdatedDependencies[parentId])
|
||
/******/ outdatedDependencies[parentId] = [];
|
||
/******/ addAllToSet(outdatedDependencies[parentId], [moduleId]);
|
||
/******/ continue;
|
||
/******/ }
|
||
/******/ delete outdatedDependencies[parentId];
|
||
/******/ outdatedModules.push(parentId);
|
||
/******/ queue.push({
|
||
/******/ chain: chain.concat([parentId]),
|
||
/******/ id: parentId
|
||
/******/ });
|
||
/******/ }
|
||
/******/ }
|
||
/******/
|
||
/******/ return {
|
||
/******/ type: "accepted",
|
||
/******/ moduleId: updateModuleId,
|
||
/******/ outdatedModules: outdatedModules,
|
||
/******/ outdatedDependencies: outdatedDependencies
|
||
/******/ };
|
||
/******/ }
|
||
/******/
|
||
/******/ function addAllToSet(a, b) {
|
||
/******/ for (var i = 0; i < b.length; i++) {
|
||
/******/ var item = b[i];
|
||
/******/ if (a.indexOf(item) === -1) a.push(item);
|
||
/******/ }
|
||
/******/ }
|
||
/******/
|
||
/******/ // at begin all updates modules are outdated
|
||
/******/ // the "outdated" status can propagate to parents if they don't accept the children
|
||
/******/ var outdatedDependencies = {};
|
||
/******/ var outdatedModules = [];
|
||
/******/ var appliedUpdate = {};
|
||
/******/
|
||
/******/ var warnUnexpectedRequire = function warnUnexpectedRequire() {
|
||
/******/ console.warn(
|
||
/******/ "[HMR] unexpected require(" + result.moduleId + ") to disposed module"
|
||
/******/ );
|
||
/******/ };
|
||
/******/
|
||
/******/ for (var id in hotUpdate) {
|
||
/******/ if (Object.prototype.hasOwnProperty.call(hotUpdate, id)) {
|
||
/******/ moduleId = toModuleId(id);
|
||
/******/ /** @type {TODO} */
|
||
/******/ var result;
|
||
/******/ if (hotUpdate[id]) {
|
||
/******/ result = getAffectedStuff(moduleId);
|
||
/******/ } else {
|
||
/******/ result = {
|
||
/******/ type: "disposed",
|
||
/******/ moduleId: id
|
||
/******/ };
|
||
/******/ }
|
||
/******/ /** @type {Error|false} */
|
||
/******/ var abortError = false;
|
||
/******/ var doApply = false;
|
||
/******/ var doDispose = false;
|
||
/******/ var chainInfo = "";
|
||
/******/ if (result.chain) {
|
||
/******/ chainInfo = "\nUpdate propagation: " + result.chain.join(" -> ");
|
||
/******/ }
|
||
/******/ switch (result.type) {
|
||
/******/ case "self-declined":
|
||
/******/ if (options.onDeclined) options.onDeclined(result);
|
||
/******/ if (!options.ignoreDeclined)
|
||
/******/ abortError = new Error(
|
||
/******/ "Aborted because of self decline: " +
|
||
/******/ result.moduleId +
|
||
/******/ chainInfo
|
||
/******/ );
|
||
/******/ break;
|
||
/******/ case "declined":
|
||
/******/ if (options.onDeclined) options.onDeclined(result);
|
||
/******/ if (!options.ignoreDeclined)
|
||
/******/ abortError = new Error(
|
||
/******/ "Aborted because of declined dependency: " +
|
||
/******/ result.moduleId +
|
||
/******/ " in " +
|
||
/******/ result.parentId +
|
||
/******/ chainInfo
|
||
/******/ );
|
||
/******/ break;
|
||
/******/ case "unaccepted":
|
||
/******/ if (options.onUnaccepted) options.onUnaccepted(result);
|
||
/******/ if (!options.ignoreUnaccepted)
|
||
/******/ abortError = new Error(
|
||
/******/ "Aborted because " + moduleId + " is not accepted" + chainInfo
|
||
/******/ );
|
||
/******/ break;
|
||
/******/ case "accepted":
|
||
/******/ if (options.onAccepted) options.onAccepted(result);
|
||
/******/ doApply = true;
|
||
/******/ break;
|
||
/******/ case "disposed":
|
||
/******/ if (options.onDisposed) options.onDisposed(result);
|
||
/******/ doDispose = true;
|
||
/******/ break;
|
||
/******/ default:
|
||
/******/ throw new Error("Unexception type " + result.type);
|
||
/******/ }
|
||
/******/ if (abortError) {
|
||
/******/ hotSetStatus("abort");
|
||
/******/ return Promise.reject(abortError);
|
||
/******/ }
|
||
/******/ if (doApply) {
|
||
/******/ appliedUpdate[moduleId] = hotUpdate[moduleId];
|
||
/******/ addAllToSet(outdatedModules, result.outdatedModules);
|
||
/******/ for (moduleId in result.outdatedDependencies) {
|
||
/******/ if (
|
||
/******/ Object.prototype.hasOwnProperty.call(
|
||
/******/ result.outdatedDependencies,
|
||
/******/ moduleId
|
||
/******/ )
|
||
/******/ ) {
|
||
/******/ if (!outdatedDependencies[moduleId])
|
||
/******/ outdatedDependencies[moduleId] = [];
|
||
/******/ addAllToSet(
|
||
/******/ outdatedDependencies[moduleId],
|
||
/******/ result.outdatedDependencies[moduleId]
|
||
/******/ );
|
||
/******/ }
|
||
/******/ }
|
||
/******/ }
|
||
/******/ if (doDispose) {
|
||
/******/ addAllToSet(outdatedModules, [result.moduleId]);
|
||
/******/ appliedUpdate[moduleId] = warnUnexpectedRequire;
|
||
/******/ }
|
||
/******/ }
|
||
/******/ }
|
||
/******/
|
||
/******/ // Store self accepted outdated modules to require them later by the module system
|
||
/******/ var outdatedSelfAcceptedModules = [];
|
||
/******/ for (i = 0; i < outdatedModules.length; i++) {
|
||
/******/ moduleId = outdatedModules[i];
|
||
/******/ if (
|
||
/******/ installedModules[moduleId] &&
|
||
/******/ installedModules[moduleId].hot._selfAccepted &&
|
||
/******/ // removed self-accepted modules should not be required
|
||
/******/ appliedUpdate[moduleId] !== warnUnexpectedRequire
|
||
/******/ ) {
|
||
/******/ outdatedSelfAcceptedModules.push({
|
||
/******/ module: moduleId,
|
||
/******/ errorHandler: installedModules[moduleId].hot._selfAccepted
|
||
/******/ });
|
||
/******/ }
|
||
/******/ }
|
||
/******/
|
||
/******/ // Now in "dispose" phase
|
||
/******/ hotSetStatus("dispose");
|
||
/******/ Object.keys(hotAvailableFilesMap).forEach(function(chunkId) {
|
||
/******/ if (hotAvailableFilesMap[chunkId] === false) {
|
||
/******/ hotDisposeChunk(chunkId);
|
||
/******/ }
|
||
/******/ });
|
||
/******/
|
||
/******/ var idx;
|
||
/******/ var queue = outdatedModules.slice();
|
||
/******/ while (queue.length > 0) {
|
||
/******/ moduleId = queue.pop();
|
||
/******/ module = installedModules[moduleId];
|
||
/******/ if (!module) continue;
|
||
/******/
|
||
/******/ var data = {};
|
||
/******/
|
||
/******/ // Call dispose handlers
|
||
/******/ var disposeHandlers = module.hot._disposeHandlers;
|
||
/******/ for (j = 0; j < disposeHandlers.length; j++) {
|
||
/******/ cb = disposeHandlers[j];
|
||
/******/ cb(data);
|
||
/******/ }
|
||
/******/ hotCurrentModuleData[moduleId] = data;
|
||
/******/
|
||
/******/ // disable module (this disables requires from this module)
|
||
/******/ module.hot.active = false;
|
||
/******/
|
||
/******/ // remove module from cache
|
||
/******/ delete installedModules[moduleId];
|
||
/******/
|
||
/******/ // when disposing there is no need to call dispose handler
|
||
/******/ delete outdatedDependencies[moduleId];
|
||
/******/
|
||
/******/ // remove "parents" references from all children
|
||
/******/ for (j = 0; j < module.children.length; j++) {
|
||
/******/ var child = installedModules[module.children[j]];
|
||
/******/ if (!child) continue;
|
||
/******/ idx = child.parents.indexOf(moduleId);
|
||
/******/ if (idx >= 0) {
|
||
/******/ child.parents.splice(idx, 1);
|
||
/******/ }
|
||
/******/ }
|
||
/******/ }
|
||
/******/
|
||
/******/ // remove outdated dependency from module children
|
||
/******/ var dependency;
|
||
/******/ var moduleOutdatedDependencies;
|
||
/******/ for (moduleId in outdatedDependencies) {
|
||
/******/ if (
|
||
/******/ Object.prototype.hasOwnProperty.call(outdatedDependencies, moduleId)
|
||
/******/ ) {
|
||
/******/ module = installedModules[moduleId];
|
||
/******/ if (module) {
|
||
/******/ moduleOutdatedDependencies = outdatedDependencies[moduleId];
|
||
/******/ for (j = 0; j < moduleOutdatedDependencies.length; j++) {
|
||
/******/ dependency = moduleOutdatedDependencies[j];
|
||
/******/ idx = module.children.indexOf(dependency);
|
||
/******/ if (idx >= 0) module.children.splice(idx, 1);
|
||
/******/ }
|
||
/******/ }
|
||
/******/ }
|
||
/******/ }
|
||
/******/
|
||
/******/ // Now in "apply" phase
|
||
/******/ hotSetStatus("apply");
|
||
/******/
|
||
/******/ hotCurrentHash = hotUpdateNewHash;
|
||
/******/
|
||
/******/ // insert new code
|
||
/******/ for (moduleId in appliedUpdate) {
|
||
/******/ if (Object.prototype.hasOwnProperty.call(appliedUpdate, moduleId)) {
|
||
/******/ modules[moduleId] = appliedUpdate[moduleId];
|
||
/******/ }
|
||
/******/ }
|
||
/******/
|
||
/******/ // call accept handlers
|
||
/******/ var error = null;
|
||
/******/ for (moduleId in outdatedDependencies) {
|
||
/******/ if (
|
||
/******/ Object.prototype.hasOwnProperty.call(outdatedDependencies, moduleId)
|
||
/******/ ) {
|
||
/******/ module = installedModules[moduleId];
|
||
/******/ if (module) {
|
||
/******/ moduleOutdatedDependencies = outdatedDependencies[moduleId];
|
||
/******/ var callbacks = [];
|
||
/******/ for (i = 0; i < moduleOutdatedDependencies.length; i++) {
|
||
/******/ dependency = moduleOutdatedDependencies[i];
|
||
/******/ cb = module.hot._acceptedDependencies[dependency];
|
||
/******/ if (cb) {
|
||
/******/ if (callbacks.indexOf(cb) !== -1) continue;
|
||
/******/ callbacks.push(cb);
|
||
/******/ }
|
||
/******/ }
|
||
/******/ for (i = 0; i < callbacks.length; i++) {
|
||
/******/ cb = callbacks[i];
|
||
/******/ try {
|
||
/******/ cb(moduleOutdatedDependencies);
|
||
/******/ } catch (err) {
|
||
/******/ if (options.onErrored) {
|
||
/******/ options.onErrored({
|
||
/******/ type: "accept-errored",
|
||
/******/ moduleId: moduleId,
|
||
/******/ dependencyId: moduleOutdatedDependencies[i],
|
||
/******/ error: err
|
||
/******/ });
|
||
/******/ }
|
||
/******/ if (!options.ignoreErrored) {
|
||
/******/ if (!error) error = err;
|
||
/******/ }
|
||
/******/ }
|
||
/******/ }
|
||
/******/ }
|
||
/******/ }
|
||
/******/ }
|
||
/******/
|
||
/******/ // Load self accepted modules
|
||
/******/ for (i = 0; i < outdatedSelfAcceptedModules.length; i++) {
|
||
/******/ var item = outdatedSelfAcceptedModules[i];
|
||
/******/ moduleId = item.module;
|
||
/******/ hotCurrentParents = [moduleId];
|
||
/******/ try {
|
||
/******/ __webpack_require__(moduleId);
|
||
/******/ } catch (err) {
|
||
/******/ if (typeof item.errorHandler === "function") {
|
||
/******/ try {
|
||
/******/ item.errorHandler(err);
|
||
/******/ } catch (err2) {
|
||
/******/ if (options.onErrored) {
|
||
/******/ options.onErrored({
|
||
/******/ type: "self-accept-error-handler-errored",
|
||
/******/ moduleId: moduleId,
|
||
/******/ error: err2,
|
||
/******/ originalError: err
|
||
/******/ });
|
||
/******/ }
|
||
/******/ if (!options.ignoreErrored) {
|
||
/******/ if (!error) error = err2;
|
||
/******/ }
|
||
/******/ if (!error) error = err;
|
||
/******/ }
|
||
/******/ } else {
|
||
/******/ if (options.onErrored) {
|
||
/******/ options.onErrored({
|
||
/******/ type: "self-accept-errored",
|
||
/******/ moduleId: moduleId,
|
||
/******/ error: err
|
||
/******/ });
|
||
/******/ }
|
||
/******/ if (!options.ignoreErrored) {
|
||
/******/ if (!error) error = err;
|
||
/******/ }
|
||
/******/ }
|
||
/******/ }
|
||
/******/ }
|
||
/******/
|
||
/******/ // handle errors in accept handlers and self accepted module load
|
||
/******/ if (error) {
|
||
/******/ hotSetStatus("fail");
|
||
/******/ return Promise.reject(error);
|
||
/******/ }
|
||
/******/
|
||
/******/ hotSetStatus("idle");
|
||
/******/ return new Promise(function(resolve) {
|
||
/******/ resolve(outdatedModules);
|
||
/******/ });
|
||
/******/ }
|
||
/******/
|
||
/******/ // The module cache
|
||
/******/ var installedModules = {};
|
||
/******/
|
||
/******/ // The require function
|
||
/******/ function __webpack_require__(moduleId) {
|
||
/******/
|
||
/******/ // Check if module is in cache
|
||
/******/ if(installedModules[moduleId]) {
|
||
/******/ return installedModules[moduleId].exports;
|
||
/******/ }
|
||
/******/ // Create a new module (and put it into the cache)
|
||
/******/ var module = installedModules[moduleId] = {
|
||
/******/ i: moduleId,
|
||
/******/ l: false,
|
||
/******/ exports: {},
|
||
/******/ hot: hotCreateModule(moduleId),
|
||
/******/ parents: (hotCurrentParentsTemp = hotCurrentParents, hotCurrentParents = [], hotCurrentParentsTemp),
|
||
/******/ children: []
|
||
/******/ };
|
||
/******/
|
||
/******/ // Execute the module function
|
||
/******/ modules[moduleId].call(module.exports, module, module.exports, hotCreateRequire(moduleId));
|
||
/******/
|
||
/******/ // Flag the module as loaded
|
||
/******/ module.l = true;
|
||
/******/
|
||
/******/ // Return the exports of the module
|
||
/******/ return module.exports;
|
||
/******/ }
|
||
/******/
|
||
/******/
|
||
/******/ // expose the modules object (__webpack_modules__)
|
||
/******/ __webpack_require__.m = modules;
|
||
/******/
|
||
/******/ // expose the module cache
|
||
/******/ __webpack_require__.c = installedModules;
|
||
/******/
|
||
/******/ // define getter function for harmony exports
|
||
/******/ __webpack_require__.d = function(exports, name, getter) {
|
||
/******/ if(!__webpack_require__.o(exports, name)) {
|
||
/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
|
||
/******/ }
|
||
/******/ };
|
||
/******/
|
||
/******/ // define __esModule on exports
|
||
/******/ __webpack_require__.r = function(exports) {
|
||
/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
|
||
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
||
/******/ }
|
||
/******/ Object.defineProperty(exports, '__esModule', { value: true });
|
||
/******/ };
|
||
/******/
|
||
/******/ // create a fake namespace object
|
||
/******/ // mode & 1: value is a module id, require it
|
||
/******/ // mode & 2: merge all properties of value into the ns
|
||
/******/ // mode & 4: return value when already ns object
|
||
/******/ // mode & 8|1: behave like require
|
||
/******/ __webpack_require__.t = function(value, mode) {
|
||
/******/ if(mode & 1) value = __webpack_require__(value);
|
||
/******/ if(mode & 8) return value;
|
||
/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
|
||
/******/ var ns = Object.create(null);
|
||
/******/ __webpack_require__.r(ns);
|
||
/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
|
||
/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
|
||
/******/ return ns;
|
||
/******/ };
|
||
/******/
|
||
/******/ // getDefaultExport function for compatibility with non-harmony modules
|
||
/******/ __webpack_require__.n = function(module) {
|
||
/******/ var getter = module && module.__esModule ?
|
||
/******/ function getDefault() { return module['default']; } :
|
||
/******/ function getModuleExports() { return module; };
|
||
/******/ __webpack_require__.d(getter, 'a', getter);
|
||
/******/ return getter;
|
||
/******/ };
|
||
/******/
|
||
/******/ // Object.prototype.hasOwnProperty.call
|
||
/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
|
||
/******/
|
||
/******/ // __webpack_public_path__
|
||
/******/ __webpack_require__.p = "dist";
|
||
/******/
|
||
/******/ // __webpack_hash__
|
||
/******/ __webpack_require__.h = function() { return hotCurrentHash; };
|
||
/******/
|
||
/******/
|
||
/******/ // Load entry module and return exports
|
||
/******/ return hotCreateRequire("./src/js/index.js")(__webpack_require__.s = "./src/js/index.js");
|
||
/******/ })
|
||
/************************************************************************/
|
||
/******/ ({
|
||
|
||
/***/ "./node_modules/tui-code-snippet/array/inArray.js":
|
||
/*!********************************************************!*\
|
||
!*** ./node_modules/tui-code-snippet/array/inArray.js ***!
|
||
\********************************************************/
|
||
/*! no static exports found */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
/* eslint-disable complexity */
|
||
/**
|
||
* @fileoverview Returns the first index at which a given element can be found in the array.
|
||
* @author NHN FE Development Lab <dl_javascript@nhn.com>
|
||
*/
|
||
|
||
|
||
|
||
var isArray = __webpack_require__(/*! ../type/isArray */ "./node_modules/tui-code-snippet/type/isArray.js");
|
||
|
||
/**
|
||
* @module array
|
||
*/
|
||
|
||
/**
|
||
* Returns the first index at which a given element can be found in the array
|
||
* from start index(default 0), or -1 if it is not present.
|
||
* It compares searchElement to elements of the Array using strict equality
|
||
* (the same method used by the ===, or triple-equals, operator).
|
||
* @param {*} searchElement Element to locate in the array
|
||
* @param {Array} array Array that will be traversed.
|
||
* @param {number} startIndex Start index in array for searching (default 0)
|
||
* @returns {number} the First index at which a given element, or -1 if it is not present
|
||
* @memberof module:array
|
||
* @example
|
||
* var inArray = require('tui-code-snippet/array/inArray'); // node, commonjs
|
||
*
|
||
* var arr = ['one', 'two', 'three', 'four'];
|
||
* var idx1 = inArray('one', arr, 3); // -1
|
||
* var idx2 = inArray('one', arr); // 0
|
||
*/
|
||
function inArray(searchElement, array, startIndex) {
|
||
var i;
|
||
var length;
|
||
startIndex = startIndex || 0;
|
||
|
||
if (!isArray(array)) {
|
||
return -1;
|
||
}
|
||
|
||
if (Array.prototype.indexOf) {
|
||
return Array.prototype.indexOf.call(array, searchElement, startIndex);
|
||
}
|
||
|
||
length = array.length;
|
||
for (i = startIndex; startIndex >= 0 && i < length; i += 1) {
|
||
if (array[i] === searchElement) {
|
||
return i;
|
||
}
|
||
}
|
||
|
||
return -1;
|
||
}
|
||
|
||
module.exports = inArray;
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/tui-code-snippet/collection/forEach.js":
|
||
/*!*************************************************************!*\
|
||
!*** ./node_modules/tui-code-snippet/collection/forEach.js ***!
|
||
\*************************************************************/
|
||
/*! no static exports found */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
/**
|
||
* @fileoverview Execute the provided callback once for each property of object(or element of array) which actually exist.
|
||
* @author NHN FE Development Lab <dl_javascript@nhn.com>
|
||
*/
|
||
|
||
|
||
|
||
var isArray = __webpack_require__(/*! ../type/isArray */ "./node_modules/tui-code-snippet/type/isArray.js");
|
||
var forEachArray = __webpack_require__(/*! ../collection/forEachArray */ "./node_modules/tui-code-snippet/collection/forEachArray.js");
|
||
var forEachOwnProperties = __webpack_require__(/*! ../collection/forEachOwnProperties */ "./node_modules/tui-code-snippet/collection/forEachOwnProperties.js");
|
||
|
||
/**
|
||
* @module collection
|
||
*/
|
||
|
||
/**
|
||
* Execute the provided callback once for each property of object(or element of array) which actually exist.
|
||
* If the object is Array-like object(ex-arguments object), It needs to transform to Array.(see 'ex2' of example).
|
||
* If the callback function returns false, the loop will be stopped.
|
||
* Callback function(iteratee) is invoked with three arguments:
|
||
* - The value of the property(or The value of the element)
|
||
* - The name of the property(or The index of the element)
|
||
* - The object being traversed
|
||
* @param {Object} obj The object that will be traversed
|
||
* @param {function} iteratee Callback function
|
||
* @param {Object} [context] Context(this) of callback function
|
||
* @memberof module:collection
|
||
* @example
|
||
* var forEach = require('tui-code-snippet/collection/forEach'); // node, commonjs
|
||
*
|
||
* var sum = 0;
|
||
*
|
||
* forEach([1,2,3], function(value){
|
||
* sum += value;
|
||
* });
|
||
* alert(sum); // 6
|
||
*
|
||
* // In case of Array-like object
|
||
* var array = Array.prototype.slice.call(arrayLike); // change to array
|
||
* forEach(array, function(value){
|
||
* sum += value;
|
||
* });
|
||
*/
|
||
function forEach(obj, iteratee, context) {
|
||
if (isArray(obj)) {
|
||
forEachArray(obj, iteratee, context);
|
||
} else {
|
||
forEachOwnProperties(obj, iteratee, context);
|
||
}
|
||
}
|
||
|
||
module.exports = forEach;
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/tui-code-snippet/collection/forEachArray.js":
|
||
/*!******************************************************************!*\
|
||
!*** ./node_modules/tui-code-snippet/collection/forEachArray.js ***!
|
||
\******************************************************************/
|
||
/*! no static exports found */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
/**
|
||
* @fileoverview Execute the provided callback once for each element present in the array(or Array-like object) in ascending order.
|
||
* @author NHN FE Development Lab <dl_javascript@nhn.com>
|
||
*/
|
||
|
||
|
||
|
||
/**
|
||
* Execute the provided callback once for each element present
|
||
* in the array(or Array-like object) in ascending order.
|
||
* If the callback function returns false, the loop will be stopped.
|
||
* Callback function(iteratee) is invoked with three arguments:
|
||
* - The value of the element
|
||
* - The index of the element
|
||
* - The array(or Array-like object) being traversed
|
||
* @param {Array} arr The array(or Array-like object) that will be traversed
|
||
* @param {function} iteratee Callback function
|
||
* @param {Object} [context] Context(this) of callback function
|
||
* @memberof module:collection
|
||
* @example
|
||
* var forEachArray = require('tui-code-snippet/collection/forEachArray'); // node, commonjs
|
||
*
|
||
* var sum = 0;
|
||
*
|
||
* forEachArray([1,2,3], function(value){
|
||
* sum += value;
|
||
* });
|
||
* alert(sum); // 6
|
||
*/
|
||
function forEachArray(arr, iteratee, context) {
|
||
var index = 0;
|
||
var len = arr.length;
|
||
|
||
context = context || null;
|
||
|
||
for (; index < len; index += 1) {
|
||
if (iteratee.call(context, arr[index], index, arr) === false) {
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
|
||
module.exports = forEachArray;
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/tui-code-snippet/collection/forEachOwnProperties.js":
|
||
/*!**************************************************************************!*\
|
||
!*** ./node_modules/tui-code-snippet/collection/forEachOwnProperties.js ***!
|
||
\**************************************************************************/
|
||
/*! no static exports found */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
/**
|
||
* @fileoverview Execute the provided callback once for each property of object which actually exist.
|
||
* @author NHN FE Development Lab <dl_javascript@nhn.com>
|
||
*/
|
||
|
||
|
||
|
||
/**
|
||
* Execute the provided callback once for each property of object which actually exist.
|
||
* If the callback function returns false, the loop will be stopped.
|
||
* Callback function(iteratee) is invoked with three arguments:
|
||
* - The value of the property
|
||
* - The name of the property
|
||
* - The object being traversed
|
||
* @param {Object} obj The object that will be traversed
|
||
* @param {function} iteratee Callback function
|
||
* @param {Object} [context] Context(this) of callback function
|
||
* @memberof module:collection
|
||
* @example
|
||
* var forEachOwnProperties = require('tui-code-snippet/collection/forEachOwnProperties'); // node, commonjs
|
||
*
|
||
* var sum = 0;
|
||
*
|
||
* forEachOwnProperties({a:1,b:2,c:3}, function(value){
|
||
* sum += value;
|
||
* });
|
||
* alert(sum); // 6
|
||
*/
|
||
function forEachOwnProperties(obj, iteratee, context) {
|
||
var key;
|
||
|
||
context = context || null;
|
||
|
||
for (key in obj) {
|
||
if (obj.hasOwnProperty(key)) {
|
||
if (iteratee.call(context, obj[key], key, obj) === false) {
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
module.exports = forEachOwnProperties;
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/tui-code-snippet/collection/toArray.js":
|
||
/*!*************************************************************!*\
|
||
!*** ./node_modules/tui-code-snippet/collection/toArray.js ***!
|
||
\*************************************************************/
|
||
/*! no static exports found */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
/**
|
||
* @fileoverview Transform the Array-like object to Array.
|
||
* @author NHN FE Development Lab <dl_javascript@nhn.com>
|
||
*/
|
||
|
||
|
||
|
||
var forEachArray = __webpack_require__(/*! ./forEachArray */ "./node_modules/tui-code-snippet/collection/forEachArray.js");
|
||
|
||
/**
|
||
* Transform the Array-like object to Array.
|
||
* In low IE (below 8), Array.prototype.slice.call is not perfect. So, try-catch statement is used.
|
||
* @param {*} arrayLike Array-like object
|
||
* @returns {Array} Array
|
||
* @memberof module:collection
|
||
* @example
|
||
* var toArray = require('tui-code-snippet/collection/toArray'); // node, commonjs
|
||
*
|
||
* var arrayLike = {
|
||
* 0: 'one',
|
||
* 1: 'two',
|
||
* 2: 'three',
|
||
* 3: 'four',
|
||
* length: 4
|
||
* };
|
||
* var result = toArray(arrayLike);
|
||
*
|
||
* alert(result instanceof Array); // true
|
||
* alert(result); // one,two,three,four
|
||
*/
|
||
function toArray(arrayLike) {
|
||
var arr;
|
||
try {
|
||
arr = Array.prototype.slice.call(arrayLike);
|
||
} catch (e) {
|
||
arr = [];
|
||
forEachArray(arrayLike, function(value) {
|
||
arr.push(value);
|
||
});
|
||
}
|
||
|
||
return arr;
|
||
}
|
||
|
||
module.exports = toArray;
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/tui-code-snippet/customEvents/customEvents.js":
|
||
/*!********************************************************************!*\
|
||
!*** ./node_modules/tui-code-snippet/customEvents/customEvents.js ***!
|
||
\********************************************************************/
|
||
/*! no static exports found */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
/**
|
||
* @fileoverview This module provides some functions for custom events. And it is implemented in the observer design pattern.
|
||
* @author NHN FE Development Lab <dl_javascript@nhn.com>
|
||
*/
|
||
|
||
|
||
|
||
var extend = __webpack_require__(/*! ../object/extend */ "./node_modules/tui-code-snippet/object/extend.js");
|
||
var isExisty = __webpack_require__(/*! ../type/isExisty */ "./node_modules/tui-code-snippet/type/isExisty.js");
|
||
var isString = __webpack_require__(/*! ../type/isString */ "./node_modules/tui-code-snippet/type/isString.js");
|
||
var isObject = __webpack_require__(/*! ../type/isObject */ "./node_modules/tui-code-snippet/type/isObject.js");
|
||
var isArray = __webpack_require__(/*! ../type/isArray */ "./node_modules/tui-code-snippet/type/isArray.js");
|
||
var isFunction = __webpack_require__(/*! ../type/isFunction */ "./node_modules/tui-code-snippet/type/isFunction.js");
|
||
var forEach = __webpack_require__(/*! ../collection/forEach */ "./node_modules/tui-code-snippet/collection/forEach.js");
|
||
|
||
var R_EVENTNAME_SPLIT = /\s+/g;
|
||
|
||
/**
|
||
* @class
|
||
* @example
|
||
* // node, commonjs
|
||
* var CustomEvents = require('tui-code-snippet/customEvents/customEvents');
|
||
*/
|
||
function CustomEvents() {
|
||
/**
|
||
* @type {HandlerItem[]}
|
||
*/
|
||
this.events = null;
|
||
|
||
/**
|
||
* only for checking specific context event was binded
|
||
* @type {object[]}
|
||
*/
|
||
this.contexts = null;
|
||
}
|
||
|
||
/**
|
||
* Mixin custom events feature to specific constructor
|
||
* @param {function} func - constructor
|
||
* @example
|
||
* var CustomEvents = require('tui-code-snippet/customEvents/customEvents'); // node, commonjs
|
||
*
|
||
* var model;
|
||
* function Model() {
|
||
* this.name = '';
|
||
* }
|
||
* CustomEvents.mixin(Model);
|
||
*
|
||
* model = new Model();
|
||
* model.on('change', function() { this.name = 'model'; }, this);
|
||
* model.fire('change');
|
||
* alert(model.name); // 'model';
|
||
*/
|
||
CustomEvents.mixin = function(func) {
|
||
extend(func.prototype, CustomEvents.prototype);
|
||
};
|
||
|
||
/**
|
||
* Get HandlerItem object
|
||
* @param {function} handler - handler function
|
||
* @param {object} [context] - context for handler
|
||
* @returns {HandlerItem} HandlerItem object
|
||
* @private
|
||
*/
|
||
CustomEvents.prototype._getHandlerItem = function(handler, context) {
|
||
var item = {handler: handler};
|
||
|
||
if (context) {
|
||
item.context = context;
|
||
}
|
||
|
||
return item;
|
||
};
|
||
|
||
/**
|
||
* Get event object safely
|
||
* @param {string} [eventName] - create sub event map if not exist.
|
||
* @returns {(object|array)} event object. if you supplied `eventName`
|
||
* parameter then make new array and return it
|
||
* @private
|
||
*/
|
||
CustomEvents.prototype._safeEvent = function(eventName) {
|
||
var events = this.events;
|
||
var byName;
|
||
|
||
if (!events) {
|
||
events = this.events = {};
|
||
}
|
||
|
||
if (eventName) {
|
||
byName = events[eventName];
|
||
|
||
if (!byName) {
|
||
byName = [];
|
||
events[eventName] = byName;
|
||
}
|
||
|
||
events = byName;
|
||
}
|
||
|
||
return events;
|
||
};
|
||
|
||
/**
|
||
* Get context array safely
|
||
* @returns {array} context array
|
||
* @private
|
||
*/
|
||
CustomEvents.prototype._safeContext = function() {
|
||
var context = this.contexts;
|
||
|
||
if (!context) {
|
||
context = this.contexts = [];
|
||
}
|
||
|
||
return context;
|
||
};
|
||
|
||
/**
|
||
* Get index of context
|
||
* @param {object} ctx - context that used for bind custom event
|
||
* @returns {number} index of context
|
||
* @private
|
||
*/
|
||
CustomEvents.prototype._indexOfContext = function(ctx) {
|
||
var context = this._safeContext();
|
||
var index = 0;
|
||
|
||
while (context[index]) {
|
||
if (ctx === context[index][0]) {
|
||
return index;
|
||
}
|
||
|
||
index += 1;
|
||
}
|
||
|
||
return -1;
|
||
};
|
||
|
||
/**
|
||
* Memorize supplied context for recognize supplied object is context or
|
||
* name: handler pair object when off()
|
||
* @param {object} ctx - context object to memorize
|
||
* @private
|
||
*/
|
||
CustomEvents.prototype._memorizeContext = function(ctx) {
|
||
var context, index;
|
||
|
||
if (!isExisty(ctx)) {
|
||
return;
|
||
}
|
||
|
||
context = this._safeContext();
|
||
index = this._indexOfContext(ctx);
|
||
|
||
if (index > -1) {
|
||
context[index][1] += 1;
|
||
} else {
|
||
context.push([ctx, 1]);
|
||
}
|
||
};
|
||
|
||
/**
|
||
* Forget supplied context object
|
||
* @param {object} ctx - context object to forget
|
||
* @private
|
||
*/
|
||
CustomEvents.prototype._forgetContext = function(ctx) {
|
||
var context, contextIndex;
|
||
|
||
if (!isExisty(ctx)) {
|
||
return;
|
||
}
|
||
|
||
context = this._safeContext();
|
||
contextIndex = this._indexOfContext(ctx);
|
||
|
||
if (contextIndex > -1) {
|
||
context[contextIndex][1] -= 1;
|
||
|
||
if (context[contextIndex][1] <= 0) {
|
||
context.splice(contextIndex, 1);
|
||
}
|
||
}
|
||
};
|
||
|
||
/**
|
||
* Bind event handler
|
||
* @param {(string|{name:string, handler:function})} eventName - custom
|
||
* event name or an object {eventName: handler}
|
||
* @param {(function|object)} [handler] - handler function or context
|
||
* @param {object} [context] - context for binding
|
||
* @private
|
||
*/
|
||
CustomEvents.prototype._bindEvent = function(eventName, handler, context) {
|
||
var events = this._safeEvent(eventName);
|
||
this._memorizeContext(context);
|
||
events.push(this._getHandlerItem(handler, context));
|
||
};
|
||
|
||
/**
|
||
* Bind event handlers
|
||
* @param {(string|{name:string, handler:function})} eventName - custom
|
||
* event name or an object {eventName: handler}
|
||
* @param {(function|object)} [handler] - handler function or context
|
||
* @param {object} [context] - context for binding
|
||
* //-- #1. Get Module --//
|
||
* var CustomEvents = require('tui-code-snippet/customEvents/customEvents'); // node, commonjs
|
||
*
|
||
* //-- #2. Use method --//
|
||
* // # 2.1 Basic Usage
|
||
* CustomEvents.on('onload', handler);
|
||
*
|
||
* // # 2.2 With context
|
||
* CustomEvents.on('onload', handler, myObj);
|
||
*
|
||
* // # 2.3 Bind by object that name, handler pairs
|
||
* CustomEvents.on({
|
||
* 'play': handler,
|
||
* 'pause': handler2
|
||
* });
|
||
*
|
||
* // # 2.4 Bind by object that name, handler pairs with context object
|
||
* CustomEvents.on({
|
||
* 'play': handler
|
||
* }, myObj);
|
||
*/
|
||
CustomEvents.prototype.on = function(eventName, handler, context) {
|
||
var self = this;
|
||
|
||
if (isString(eventName)) {
|
||
// [syntax 1, 2]
|
||
eventName = eventName.split(R_EVENTNAME_SPLIT);
|
||
forEach(eventName, function(name) {
|
||
self._bindEvent(name, handler, context);
|
||
});
|
||
} else if (isObject(eventName)) {
|
||
// [syntax 3, 4]
|
||
context = handler;
|
||
forEach(eventName, function(func, name) {
|
||
self.on(name, func, context);
|
||
});
|
||
}
|
||
};
|
||
|
||
/**
|
||
* Bind one-shot event handlers
|
||
* @param {(string|{name:string,handler:function})} eventName - custom
|
||
* event name or an object {eventName: handler}
|
||
* @param {function|object} [handler] - handler function or context
|
||
* @param {object} [context] - context for binding
|
||
*/
|
||
CustomEvents.prototype.once = function(eventName, handler, context) {
|
||
var self = this;
|
||
|
||
if (isObject(eventName)) {
|
||
context = handler;
|
||
forEach(eventName, function(func, name) {
|
||
self.once(name, func, context);
|
||
});
|
||
|
||
return;
|
||
}
|
||
|
||
function onceHandler() { // eslint-disable-line require-jsdoc
|
||
handler.apply(context, arguments);
|
||
self.off(eventName, onceHandler, context);
|
||
}
|
||
|
||
this.on(eventName, onceHandler, context);
|
||
};
|
||
|
||
/**
|
||
* Splice supplied array by callback result
|
||
* @param {array} arr - array to splice
|
||
* @param {function} predicate - function return boolean
|
||
* @private
|
||
*/
|
||
CustomEvents.prototype._spliceMatches = function(arr, predicate) {
|
||
var i = 0;
|
||
var len;
|
||
|
||
if (!isArray(arr)) {
|
||
return;
|
||
}
|
||
|
||
for (len = arr.length; i < len; i += 1) {
|
||
if (predicate(arr[i]) === true) {
|
||
arr.splice(i, 1);
|
||
len -= 1;
|
||
i -= 1;
|
||
}
|
||
}
|
||
};
|
||
|
||
/**
|
||
* Get matcher for unbind specific handler events
|
||
* @param {function} handler - handler function
|
||
* @returns {function} handler matcher
|
||
* @private
|
||
*/
|
||
CustomEvents.prototype._matchHandler = function(handler) {
|
||
var self = this;
|
||
|
||
return function(item) {
|
||
var needRemove = handler === item.handler;
|
||
|
||
if (needRemove) {
|
||
self._forgetContext(item.context);
|
||
}
|
||
|
||
return needRemove;
|
||
};
|
||
};
|
||
|
||
/**
|
||
* Get matcher for unbind specific context events
|
||
* @param {object} context - context
|
||
* @returns {function} object matcher
|
||
* @private
|
||
*/
|
||
CustomEvents.prototype._matchContext = function(context) {
|
||
var self = this;
|
||
|
||
return function(item) {
|
||
var needRemove = context === item.context;
|
||
|
||
if (needRemove) {
|
||
self._forgetContext(item.context);
|
||
}
|
||
|
||
return needRemove;
|
||
};
|
||
};
|
||
|
||
/**
|
||
* Get matcher for unbind specific hander, context pair events
|
||
* @param {function} handler - handler function
|
||
* @param {object} context - context
|
||
* @returns {function} handler, context matcher
|
||
* @private
|
||
*/
|
||
CustomEvents.prototype._matchHandlerAndContext = function(handler, context) {
|
||
var self = this;
|
||
|
||
return function(item) {
|
||
var matchHandler = (handler === item.handler);
|
||
var matchContext = (context === item.context);
|
||
var needRemove = (matchHandler && matchContext);
|
||
|
||
if (needRemove) {
|
||
self._forgetContext(item.context);
|
||
}
|
||
|
||
return needRemove;
|
||
};
|
||
};
|
||
|
||
/**
|
||
* Unbind event by event name
|
||
* @param {string} eventName - custom event name to unbind
|
||
* @param {function} [handler] - handler function
|
||
* @private
|
||
*/
|
||
CustomEvents.prototype._offByEventName = function(eventName, handler) {
|
||
var self = this;
|
||
var andByHandler = isFunction(handler);
|
||
var matchHandler = self._matchHandler(handler);
|
||
|
||
eventName = eventName.split(R_EVENTNAME_SPLIT);
|
||
|
||
forEach(eventName, function(name) {
|
||
var handlerItems = self._safeEvent(name);
|
||
|
||
if (andByHandler) {
|
||
self._spliceMatches(handlerItems, matchHandler);
|
||
} else {
|
||
forEach(handlerItems, function(item) {
|
||
self._forgetContext(item.context);
|
||
});
|
||
|
||
self.events[name] = [];
|
||
}
|
||
});
|
||
};
|
||
|
||
/**
|
||
* Unbind event by handler function
|
||
* @param {function} handler - handler function
|
||
* @private
|
||
*/
|
||
CustomEvents.prototype._offByHandler = function(handler) {
|
||
var self = this;
|
||
var matchHandler = this._matchHandler(handler);
|
||
|
||
forEach(this._safeEvent(), function(handlerItems) {
|
||
self._spliceMatches(handlerItems, matchHandler);
|
||
});
|
||
};
|
||
|
||
/**
|
||
* Unbind event by object(name: handler pair object or context object)
|
||
* @param {object} obj - context or {name: handler} pair object
|
||
* @param {function} handler - handler function
|
||
* @private
|
||
*/
|
||
CustomEvents.prototype._offByObject = function(obj, handler) {
|
||
var self = this;
|
||
var matchFunc;
|
||
|
||
if (this._indexOfContext(obj) < 0) {
|
||
forEach(obj, function(func, name) {
|
||
self.off(name, func);
|
||
});
|
||
} else if (isString(handler)) {
|
||
matchFunc = this._matchContext(obj);
|
||
|
||
self._spliceMatches(this._safeEvent(handler), matchFunc);
|
||
} else if (isFunction(handler)) {
|
||
matchFunc = this._matchHandlerAndContext(handler, obj);
|
||
|
||
forEach(this._safeEvent(), function(handlerItems) {
|
||
self._spliceMatches(handlerItems, matchFunc);
|
||
});
|
||
} else {
|
||
matchFunc = this._matchContext(obj);
|
||
|
||
forEach(this._safeEvent(), function(handlerItems) {
|
||
self._spliceMatches(handlerItems, matchFunc);
|
||
});
|
||
}
|
||
};
|
||
|
||
/**
|
||
* Unbind custom events
|
||
* @param {(string|object|function)} eventName - event name or context or
|
||
* {name: handler} pair object or handler function
|
||
* @param {(function)} handler - handler function
|
||
* @example
|
||
* //-- #1. Get Module --//
|
||
* var CustomEvents = require('tui-code-snippet/customEvents/customEvents'); // node, commonjs
|
||
*
|
||
* //-- #2. Use method --//
|
||
* // # 2.1 off by event name
|
||
* CustomEvents.off('onload');
|
||
*
|
||
* // # 2.2 off by event name and handler
|
||
* CustomEvents.off('play', handler);
|
||
*
|
||
* // # 2.3 off by handler
|
||
* CustomEvents.off(handler);
|
||
*
|
||
* // # 2.4 off by context
|
||
* CustomEvents.off(myObj);
|
||
*
|
||
* // # 2.5 off by context and handler
|
||
* CustomEvents.off(myObj, handler);
|
||
*
|
||
* // # 2.6 off by context and event name
|
||
* CustomEvents.off(myObj, 'onload');
|
||
*
|
||
* // # 2.7 off by an Object.<string, function> that is {eventName: handler}
|
||
* CustomEvents.off({
|
||
* 'play': handler,
|
||
* 'pause': handler2
|
||
* });
|
||
*
|
||
* // # 2.8 off the all events
|
||
* CustomEvents.off();
|
||
*/
|
||
CustomEvents.prototype.off = function(eventName, handler) {
|
||
if (isString(eventName)) {
|
||
// [syntax 1, 2]
|
||
this._offByEventName(eventName, handler);
|
||
} else if (!arguments.length) {
|
||
// [syntax 8]
|
||
this.events = {};
|
||
this.contexts = [];
|
||
} else if (isFunction(eventName)) {
|
||
// [syntax 3]
|
||
this._offByHandler(eventName);
|
||
} else if (isObject(eventName)) {
|
||
// [syntax 4, 5, 6]
|
||
this._offByObject(eventName, handler);
|
||
}
|
||
};
|
||
|
||
/**
|
||
* Fire custom event
|
||
* @param {string} eventName - name of custom event
|
||
*/
|
||
CustomEvents.prototype.fire = function(eventName) { // eslint-disable-line
|
||
this.invoke.apply(this, arguments);
|
||
};
|
||
|
||
/**
|
||
* Fire a event and returns the result of operation 'boolean AND' with all
|
||
* listener's results.
|
||
*
|
||
* So, It is different from {@link CustomEvents#fire}.
|
||
*
|
||
* In service code, use this as a before event in component level usually
|
||
* for notifying that the event is cancelable.
|
||
* @param {string} eventName - Custom event name
|
||
* @param {...*} data - Data for event
|
||
* @returns {boolean} The result of operation 'boolean AND'
|
||
* @example
|
||
* var map = new Map();
|
||
* map.on({
|
||
* 'beforeZoom': function() {
|
||
* // It should cancel the 'zoom' event by some conditions.
|
||
* if (that.disabled && this.getState()) {
|
||
* return false;
|
||
* }
|
||
* return true;
|
||
* }
|
||
* });
|
||
*
|
||
* if (this.invoke('beforeZoom')) { // check the result of 'beforeZoom'
|
||
* // if true,
|
||
* // doSomething
|
||
* }
|
||
*/
|
||
CustomEvents.prototype.invoke = function(eventName) {
|
||
var events, args, index, item;
|
||
|
||
if (!this.hasListener(eventName)) {
|
||
return true;
|
||
}
|
||
|
||
events = this._safeEvent(eventName);
|
||
args = Array.prototype.slice.call(arguments, 1);
|
||
index = 0;
|
||
|
||
while (events[index]) {
|
||
item = events[index];
|
||
|
||
if (item.handler.apply(item.context, args) === false) {
|
||
return false;
|
||
}
|
||
|
||
index += 1;
|
||
}
|
||
|
||
return true;
|
||
};
|
||
|
||
/**
|
||
* Return whether at least one of the handlers is registered in the given
|
||
* event name.
|
||
* @param {string} eventName - Custom event name
|
||
* @returns {boolean} Is there at least one handler in event name?
|
||
*/
|
||
CustomEvents.prototype.hasListener = function(eventName) {
|
||
return this.getListenerLength(eventName) > 0;
|
||
};
|
||
|
||
/**
|
||
* Return a count of events registered.
|
||
* @param {string} eventName - Custom event name
|
||
* @returns {number} number of event
|
||
*/
|
||
CustomEvents.prototype.getListenerLength = function(eventName) {
|
||
var events = this._safeEvent(eventName);
|
||
|
||
return events.length;
|
||
};
|
||
|
||
module.exports = CustomEvents;
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/tui-code-snippet/domEvent/_safeEvent.js":
|
||
/*!**************************************************************!*\
|
||
!*** ./node_modules/tui-code-snippet/domEvent/_safeEvent.js ***!
|
||
\**************************************************************/
|
||
/*! no static exports found */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
/**
|
||
* @fileoverview Get event collection for specific HTML element
|
||
* @author NHN FE Development Lab <dl_javascript@nhn.com>
|
||
*/
|
||
|
||
|
||
|
||
var EVENT_KEY = '_feEventKey';
|
||
|
||
/**
|
||
* Get event collection for specific HTML element
|
||
* @param {HTMLElement} element - HTML element
|
||
* @param {string} type - event type
|
||
* @returns {array}
|
||
* @private
|
||
*/
|
||
function safeEvent(element, type) {
|
||
var events = element[EVENT_KEY];
|
||
var handlers;
|
||
|
||
if (!events) {
|
||
events = element[EVENT_KEY] = {};
|
||
}
|
||
|
||
handlers = events[type];
|
||
if (!handlers) {
|
||
handlers = events[type] = [];
|
||
}
|
||
|
||
return handlers;
|
||
}
|
||
|
||
module.exports = safeEvent;
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/tui-code-snippet/domEvent/getTarget.js":
|
||
/*!*************************************************************!*\
|
||
!*** ./node_modules/tui-code-snippet/domEvent/getTarget.js ***!
|
||
\*************************************************************/
|
||
/*! no static exports found */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
/**
|
||
* @fileoverview Get a target element from an event object.
|
||
* @author NHN FE Development Lab <dl_javascript@nhn.com>
|
||
*/
|
||
|
||
|
||
|
||
/**
|
||
* Get a target element from an event object.
|
||
* @param {Event} e - event object
|
||
* @returns {HTMLElement} - target element
|
||
* @memberof module:domEvent
|
||
*/
|
||
function getTarget(e) {
|
||
return e.target || e.srcElement;
|
||
}
|
||
|
||
module.exports = getTarget;
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/tui-code-snippet/domEvent/off.js":
|
||
/*!*******************************************************!*\
|
||
!*** ./node_modules/tui-code-snippet/domEvent/off.js ***!
|
||
\*******************************************************/
|
||
/*! no static exports found */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
/**
|
||
* @fileoverview Unbind DOM events
|
||
* @author NHN FE Development Lab <dl_javascript@nhn.com>
|
||
*/
|
||
|
||
|
||
|
||
var isString = __webpack_require__(/*! ../type/isString */ "./node_modules/tui-code-snippet/type/isString.js");
|
||
var forEach = __webpack_require__(/*! ../collection/forEach */ "./node_modules/tui-code-snippet/collection/forEach.js");
|
||
|
||
var safeEvent = __webpack_require__(/*! ./_safeEvent */ "./node_modules/tui-code-snippet/domEvent/_safeEvent.js");
|
||
|
||
/**
|
||
* Unbind DOM events
|
||
* If a handler function is not passed, remove all events of that type.
|
||
* @param {HTMLElement} element - element to unbindbind events
|
||
* @param {(string|object)} types - Space splitted events names or
|
||
* eventName:handler object
|
||
* @param {function} [handler] - handler function
|
||
* @memberof module:domEvent
|
||
*/
|
||
function off(element, types, handler) {
|
||
if (isString(types)) {
|
||
forEach(types.split(/\s+/g), function(type) {
|
||
unbindEvent(element, type, handler);
|
||
});
|
||
|
||
return;
|
||
}
|
||
|
||
forEach(types, function(func, type) {
|
||
unbindEvent(element, type, func);
|
||
});
|
||
}
|
||
|
||
/**
|
||
* Unbind DOM events
|
||
* If a handler function is not passed, remove all events of that type.
|
||
* @param {HTMLElement} element - element to unbind events
|
||
* @param {string} type - events name
|
||
* @param {function} [handler] - handler function
|
||
* @private
|
||
*/
|
||
function unbindEvent(element, type, handler) {
|
||
var events = safeEvent(element, type);
|
||
var index;
|
||
|
||
if (!handler) {
|
||
forEach(events, function(item) {
|
||
removeHandler(element, type, item.wrappedHandler);
|
||
});
|
||
events.splice(0, events.length);
|
||
} else {
|
||
forEach(events, function(item, idx) {
|
||
if (handler === item.handler) {
|
||
removeHandler(element, type, item.wrappedHandler);
|
||
index = idx;
|
||
|
||
return false;
|
||
}
|
||
|
||
return true;
|
||
});
|
||
events.splice(index, 1);
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Remove an event handler
|
||
* @param {HTMLElement} element - An element to remove an event
|
||
* @param {string} type - event type
|
||
* @param {function} handler - event handler
|
||
* @private
|
||
*/
|
||
function removeHandler(element, type, handler) {
|
||
if ('removeEventListener' in element) {
|
||
element.removeEventListener(type, handler);
|
||
} else if ('detachEvent' in element) {
|
||
element.detachEvent('on' + type, handler);
|
||
}
|
||
}
|
||
|
||
module.exports = off;
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/tui-code-snippet/domEvent/on.js":
|
||
/*!******************************************************!*\
|
||
!*** ./node_modules/tui-code-snippet/domEvent/on.js ***!
|
||
\******************************************************/
|
||
/*! no static exports found */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
/**
|
||
* @fileoverview Bind DOM events
|
||
* @author NHN FE Development Lab <dl_javascript@nhn.com>
|
||
*/
|
||
|
||
|
||
|
||
var isString = __webpack_require__(/*! ../type/isString */ "./node_modules/tui-code-snippet/type/isString.js");
|
||
var forEach = __webpack_require__(/*! ../collection/forEach */ "./node_modules/tui-code-snippet/collection/forEach.js");
|
||
|
||
var safeEvent = __webpack_require__(/*! ./_safeEvent */ "./node_modules/tui-code-snippet/domEvent/_safeEvent.js");
|
||
|
||
/**
|
||
* Bind DOM events
|
||
* @param {HTMLElement} element - element to bind events
|
||
* @param {(string|object)} types - Space splitted events names or
|
||
* eventName:handler object
|
||
* @param {(function|object)} handler - handler function or context for handler
|
||
* method
|
||
* @param {object} [context] context - context for handler method.
|
||
* @memberof module:domEvent
|
||
*/
|
||
function on(element, types, handler, context) {
|
||
if (isString(types)) {
|
||
forEach(types.split(/\s+/g), function(type) {
|
||
bindEvent(element, type, handler, context);
|
||
});
|
||
|
||
return;
|
||
}
|
||
|
||
forEach(types, function(func, type) {
|
||
bindEvent(element, type, func, handler);
|
||
});
|
||
}
|
||
|
||
/**
|
||
* Bind DOM events
|
||
* @param {HTMLElement} element - element to bind events
|
||
* @param {string} type - events name
|
||
* @param {function} handler - handler function or context for handler
|
||
* method
|
||
* @param {object} [context] context - context for handler method.
|
||
* @private
|
||
*/
|
||
function bindEvent(element, type, handler, context) {
|
||
/**
|
||
* Event handler
|
||
* @param {Event} e - event object
|
||
*/
|
||
function eventHandler(e) {
|
||
handler.call(context || element, e || window.event);
|
||
}
|
||
|
||
if ('addEventListener' in element) {
|
||
element.addEventListener(type, eventHandler);
|
||
} else if ('attachEvent' in element) {
|
||
element.attachEvent('on' + type, eventHandler);
|
||
}
|
||
memorizeHandler(element, type, handler, eventHandler);
|
||
}
|
||
|
||
/**
|
||
* Memorize DOM event handler for unbinding.
|
||
* @param {HTMLElement} element - element to bind events
|
||
* @param {string} type - events name
|
||
* @param {function} handler - handler function that user passed at on() use
|
||
* @param {function} wrappedHandler - handler function that wrapped by domevent for implementing some features
|
||
* @private
|
||
*/
|
||
function memorizeHandler(element, type, handler, wrappedHandler) {
|
||
var events = safeEvent(element, type);
|
||
var existInEvents = false;
|
||
|
||
forEach(events, function(obj) {
|
||
if (obj.handler === handler) {
|
||
existInEvents = true;
|
||
|
||
return false;
|
||
}
|
||
|
||
return true;
|
||
});
|
||
|
||
if (!existInEvents) {
|
||
events.push({
|
||
handler: handler,
|
||
wrappedHandler: wrappedHandler
|
||
});
|
||
}
|
||
}
|
||
|
||
module.exports = on;
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/tui-code-snippet/domEvent/preventDefault.js":
|
||
/*!******************************************************************!*\
|
||
!*** ./node_modules/tui-code-snippet/domEvent/preventDefault.js ***!
|
||
\******************************************************************/
|
||
/*! no static exports found */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
/**
|
||
* @fileoverview Prevent default action
|
||
* @author NHN FE Development Lab <dl_javascript@nhn.com>
|
||
*/
|
||
|
||
|
||
|
||
/**
|
||
* Prevent default action
|
||
* @param {Event} e - event object
|
||
* @memberof module:domEvent
|
||
*/
|
||
function preventDefault(e) {
|
||
if (e.preventDefault) {
|
||
e.preventDefault();
|
||
|
||
return;
|
||
}
|
||
|
||
e.returnValue = false;
|
||
}
|
||
|
||
module.exports = preventDefault;
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/tui-code-snippet/domUtil/_setClassName.js":
|
||
/*!****************************************************************!*\
|
||
!*** ./node_modules/tui-code-snippet/domUtil/_setClassName.js ***!
|
||
\****************************************************************/
|
||
/*! no static exports found */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
/**
|
||
* @fileoverview Set className value
|
||
* @author NHN FE Development Lab <dl_javascript@nhn.com>
|
||
*/
|
||
|
||
|
||
|
||
var isArray = __webpack_require__(/*! ../type/isArray */ "./node_modules/tui-code-snippet/type/isArray.js");
|
||
var isUndefined = __webpack_require__(/*! ../type/isUndefined */ "./node_modules/tui-code-snippet/type/isUndefined.js");
|
||
|
||
/**
|
||
* Set className value
|
||
* @param {(HTMLElement|SVGElement)} element - target element
|
||
* @param {(string|string[])} cssClass - class names
|
||
* @private
|
||
*/
|
||
function setClassName(element, cssClass) {
|
||
cssClass = isArray(cssClass) ? cssClass.join(' ') : cssClass;
|
||
|
||
cssClass = cssClass.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, '');
|
||
|
||
if (isUndefined(element.className.baseVal)) {
|
||
element.className = cssClass;
|
||
|
||
return;
|
||
}
|
||
|
||
element.className.baseVal = cssClass;
|
||
}
|
||
|
||
module.exports = setClassName;
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/tui-code-snippet/domUtil/addClass.js":
|
||
/*!***********************************************************!*\
|
||
!*** ./node_modules/tui-code-snippet/domUtil/addClass.js ***!
|
||
\***********************************************************/
|
||
/*! no static exports found */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
/**
|
||
* @fileoverview Add css class to element
|
||
* @author NHN FE Development Lab <dl_javascript@nhn.com>
|
||
*/
|
||
|
||
|
||
|
||
var forEach = __webpack_require__(/*! ../collection/forEach */ "./node_modules/tui-code-snippet/collection/forEach.js");
|
||
var inArray = __webpack_require__(/*! ../array/inArray */ "./node_modules/tui-code-snippet/array/inArray.js");
|
||
var getClass = __webpack_require__(/*! ./getClass */ "./node_modules/tui-code-snippet/domUtil/getClass.js");
|
||
var setClassName = __webpack_require__(/*! ./_setClassName */ "./node_modules/tui-code-snippet/domUtil/_setClassName.js");
|
||
|
||
/**
|
||
* domUtil module
|
||
* @module domUtil
|
||
*/
|
||
|
||
/**
|
||
* Add css class to element
|
||
* @param {(HTMLElement|SVGElement)} element - target element
|
||
* @param {...string} cssClass - css classes to add
|
||
* @memberof module:domUtil
|
||
*/
|
||
function addClass(element) {
|
||
var cssClass = Array.prototype.slice.call(arguments, 1);
|
||
var classList = element.classList;
|
||
var newClass = [];
|
||
var origin;
|
||
|
||
if (classList) {
|
||
forEach(cssClass, function(name) {
|
||
element.classList.add(name);
|
||
});
|
||
|
||
return;
|
||
}
|
||
|
||
origin = getClass(element);
|
||
|
||
if (origin) {
|
||
cssClass = [].concat(origin.split(/\s+/), cssClass);
|
||
}
|
||
|
||
forEach(cssClass, function(cls) {
|
||
if (inArray(cls, newClass) < 0) {
|
||
newClass.push(cls);
|
||
}
|
||
});
|
||
|
||
setClassName(element, newClass);
|
||
}
|
||
|
||
module.exports = addClass;
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/tui-code-snippet/domUtil/closest.js":
|
||
/*!**********************************************************!*\
|
||
!*** ./node_modules/tui-code-snippet/domUtil/closest.js ***!
|
||
\**********************************************************/
|
||
/*! no static exports found */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
/**
|
||
* @fileoverview Find parent element recursively
|
||
* @author NHN FE Development Lab <dl_javascript@nhn.com>
|
||
*/
|
||
|
||
|
||
|
||
var matches = __webpack_require__(/*! ./matches */ "./node_modules/tui-code-snippet/domUtil/matches.js");
|
||
|
||
/**
|
||
* Find parent element recursively
|
||
* @param {HTMLElement} element - base element to start find
|
||
* @param {string} selector - selector string for find
|
||
* @returns {HTMLElement} - element finded or null
|
||
* @memberof module:domUtil
|
||
*/
|
||
function closest(element, selector) {
|
||
var parent = element.parentNode;
|
||
|
||
if (matches(element, selector)) {
|
||
return element;
|
||
}
|
||
|
||
while (parent && parent !== document) {
|
||
if (matches(parent, selector)) {
|
||
return parent;
|
||
}
|
||
|
||
parent = parent.parentNode;
|
||
}
|
||
|
||
return null;
|
||
}
|
||
|
||
module.exports = closest;
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/tui-code-snippet/domUtil/getClass.js":
|
||
/*!***********************************************************!*\
|
||
!*** ./node_modules/tui-code-snippet/domUtil/getClass.js ***!
|
||
\***********************************************************/
|
||
/*! no static exports found */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
/**
|
||
* @fileoverview Get HTML element's design classes.
|
||
* @author NHN FE Development Lab <dl_javascript@nhn.com>
|
||
*/
|
||
|
||
|
||
|
||
var isUndefined = __webpack_require__(/*! ../type/isUndefined */ "./node_modules/tui-code-snippet/type/isUndefined.js");
|
||
|
||
/**
|
||
* Get HTML element's design classes.
|
||
* @param {(HTMLElement|SVGElement)} element target element
|
||
* @returns {string} element css class name
|
||
* @memberof module:domUtil
|
||
*/
|
||
function getClass(element) {
|
||
if (!element || !element.className) {
|
||
return '';
|
||
}
|
||
|
||
if (isUndefined(element.className.baseVal)) {
|
||
return element.className;
|
||
}
|
||
|
||
return element.className.baseVal;
|
||
}
|
||
|
||
module.exports = getClass;
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/tui-code-snippet/domUtil/matches.js":
|
||
/*!**********************************************************!*\
|
||
!*** ./node_modules/tui-code-snippet/domUtil/matches.js ***!
|
||
\**********************************************************/
|
||
/*! no static exports found */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
/**
|
||
* @fileoverview Check element match selector
|
||
* @author NHN FE Development Lab <dl_javascript@nhn.com>
|
||
*/
|
||
|
||
|
||
|
||
var inArray = __webpack_require__(/*! ../array/inArray */ "./node_modules/tui-code-snippet/array/inArray.js");
|
||
var toArray = __webpack_require__(/*! ../collection/toArray */ "./node_modules/tui-code-snippet/collection/toArray.js");
|
||
|
||
var elProto = Element.prototype;
|
||
var matchSelector = elProto.matches ||
|
||
elProto.webkitMatchesSelector ||
|
||
elProto.mozMatchesSelector ||
|
||
elProto.msMatchesSelector ||
|
||
function(selector) {
|
||
var doc = this.document || this.ownerDocument;
|
||
|
||
return inArray(this, toArray(doc.querySelectorAll(selector))) > -1;
|
||
};
|
||
|
||
/**
|
||
* Check element match selector
|
||
* @param {HTMLElement} element - element to check
|
||
* @param {string} selector - selector to check
|
||
* @returns {boolean} is selector matched to element?
|
||
* @memberof module:domUtil
|
||
*/
|
||
function matches(element, selector) {
|
||
return matchSelector.call(element, selector);
|
||
}
|
||
|
||
module.exports = matches;
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/tui-code-snippet/domUtil/removeClass.js":
|
||
/*!**************************************************************!*\
|
||
!*** ./node_modules/tui-code-snippet/domUtil/removeClass.js ***!
|
||
\**************************************************************/
|
||
/*! no static exports found */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
/**
|
||
* @fileoverview Remove css class from element
|
||
* @author NHN FE Development Lab <dl_javascript@nhn.com>
|
||
*/
|
||
|
||
|
||
|
||
var forEachArray = __webpack_require__(/*! ../collection/forEachArray */ "./node_modules/tui-code-snippet/collection/forEachArray.js");
|
||
var inArray = __webpack_require__(/*! ../array/inArray */ "./node_modules/tui-code-snippet/array/inArray.js");
|
||
var getClass = __webpack_require__(/*! ./getClass */ "./node_modules/tui-code-snippet/domUtil/getClass.js");
|
||
var setClassName = __webpack_require__(/*! ./_setClassName */ "./node_modules/tui-code-snippet/domUtil/_setClassName.js");
|
||
|
||
/**
|
||
* Remove css class from element
|
||
* @param {(HTMLElement|SVGElement)} element - target element
|
||
* @param {...string} cssClass - css classes to remove
|
||
* @memberof module:domUtil
|
||
*/
|
||
function removeClass(element) {
|
||
var cssClass = Array.prototype.slice.call(arguments, 1);
|
||
var classList = element.classList;
|
||
var origin, newClass;
|
||
|
||
if (classList) {
|
||
forEachArray(cssClass, function(name) {
|
||
classList.remove(name);
|
||
});
|
||
|
||
return;
|
||
}
|
||
|
||
origin = getClass(element).split(/\s+/);
|
||
newClass = [];
|
||
forEachArray(origin, function(name) {
|
||
if (inArray(name, cssClass) < 0) {
|
||
newClass.push(name);
|
||
}
|
||
});
|
||
|
||
setClassName(element, newClass);
|
||
}
|
||
|
||
module.exports = removeClass;
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/tui-code-snippet/domUtil/removeElement.js":
|
||
/*!****************************************************************!*\
|
||
!*** ./node_modules/tui-code-snippet/domUtil/removeElement.js ***!
|
||
\****************************************************************/
|
||
/*! no static exports found */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
/**
|
||
* @fileoverview Remove element from parent node.
|
||
* @author NHN FE Development Lab <dl_javascript@nhn.com>
|
||
*/
|
||
|
||
|
||
|
||
/**
|
||
* Remove element from parent node.
|
||
* @param {HTMLElement} element - element to remove.
|
||
* @memberof module:domUtil
|
||
*/
|
||
function removeElement(element) {
|
||
if (element && element.parentNode) {
|
||
element.parentNode.removeChild(element);
|
||
}
|
||
}
|
||
|
||
module.exports = removeElement;
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/tui-code-snippet/object/extend.js":
|
||
/*!********************************************************!*\
|
||
!*** ./node_modules/tui-code-snippet/object/extend.js ***!
|
||
\********************************************************/
|
||
/*! no static exports found */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
/**
|
||
* @fileoverview Extend the target object from other objects.
|
||
* @author NHN FE Development Lab <dl_javascript@nhn.com>
|
||
*/
|
||
|
||
|
||
|
||
/**
|
||
* @module object
|
||
*/
|
||
|
||
/**
|
||
* Extend the target object from other objects.
|
||
* @param {object} target - Object that will be extended
|
||
* @param {...object} objects - Objects as sources
|
||
* @returns {object} Extended object
|
||
* @memberof module:object
|
||
*/
|
||
function extend(target, objects) { // eslint-disable-line no-unused-vars
|
||
var hasOwnProp = Object.prototype.hasOwnProperty;
|
||
var source, prop, i, len;
|
||
|
||
for (i = 1, len = arguments.length; i < len; i += 1) {
|
||
source = arguments[i];
|
||
for (prop in source) {
|
||
if (hasOwnProp.call(source, prop)) {
|
||
target[prop] = source[prop];
|
||
}
|
||
}
|
||
}
|
||
|
||
return target;
|
||
}
|
||
|
||
module.exports = extend;
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/tui-code-snippet/request/imagePing.js":
|
||
/*!************************************************************!*\
|
||
!*** ./node_modules/tui-code-snippet/request/imagePing.js ***!
|
||
\************************************************************/
|
||
/*! no static exports found */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
/**
|
||
* @fileoverview Request image ping.
|
||
* @author NHN FE Development Lab <dl_javascript@nhn.com>
|
||
*/
|
||
|
||
|
||
|
||
var forEachOwnProperties = __webpack_require__(/*! ../collection/forEachOwnProperties */ "./node_modules/tui-code-snippet/collection/forEachOwnProperties.js");
|
||
|
||
/**
|
||
* @module request
|
||
*/
|
||
|
||
/**
|
||
* Request image ping.
|
||
* @param {String} url url for ping request
|
||
* @param {Object} trackingInfo infos for make query string
|
||
* @returns {HTMLElement}
|
||
* @memberof module:request
|
||
* @example
|
||
* var imagePing = require('tui-code-snippet/request/imagePing'); // node, commonjs
|
||
*
|
||
* imagePing('https://www.google-analytics.com/collect', {
|
||
* v: 1,
|
||
* t: 'event',
|
||
* tid: 'trackingid',
|
||
* cid: 'cid',
|
||
* dp: 'dp',
|
||
* dh: 'dh'
|
||
* });
|
||
*/
|
||
function imagePing(url, trackingInfo) {
|
||
var trackingElement = document.createElement('img');
|
||
var queryString = '';
|
||
forEachOwnProperties(trackingInfo, function(value, key) {
|
||
queryString += '&' + key + '=' + value;
|
||
});
|
||
queryString = queryString.substring(1);
|
||
|
||
trackingElement.src = url + '?' + queryString;
|
||
|
||
trackingElement.style.display = 'none';
|
||
document.body.appendChild(trackingElement);
|
||
document.body.removeChild(trackingElement);
|
||
|
||
return trackingElement;
|
||
}
|
||
|
||
module.exports = imagePing;
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/tui-code-snippet/request/sendHostname.js":
|
||
/*!***************************************************************!*\
|
||
!*** ./node_modules/tui-code-snippet/request/sendHostname.js ***!
|
||
\***************************************************************/
|
||
/*! no static exports found */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
/**
|
||
* @fileoverview Send hostname on DOMContentLoaded.
|
||
* @author NHN FE Development Lab <dl_javascript@nhn.com>
|
||
*/
|
||
|
||
|
||
|
||
var isUndefined = __webpack_require__(/*! ../type/isUndefined */ "./node_modules/tui-code-snippet/type/isUndefined.js");
|
||
var imagePing = __webpack_require__(/*! ./imagePing */ "./node_modules/tui-code-snippet/request/imagePing.js");
|
||
|
||
var ms7days = 7 * 24 * 60 * 60 * 1000;
|
||
|
||
/**
|
||
* Check if the date has passed 7 days
|
||
* @param {number} date - milliseconds
|
||
* @returns {boolean}
|
||
* @private
|
||
*/
|
||
function isExpired(date) {
|
||
var now = new Date().getTime();
|
||
|
||
return now - date > ms7days;
|
||
}
|
||
|
||
/**
|
||
* Send hostname on DOMContentLoaded.
|
||
* To prevent hostname set tui.usageStatistics to false.
|
||
* @param {string} appName - application name
|
||
* @param {string} trackingId - GA tracking ID
|
||
* @ignore
|
||
*/
|
||
function sendHostname(appName, trackingId) {
|
||
var url = 'https://www.google-analytics.com/collect';
|
||
var hostname = location.hostname;
|
||
var hitType = 'event';
|
||
var eventCategory = 'use';
|
||
var applicationKeyForStorage = 'TOAST UI ' + appName + ' for ' + hostname + ': Statistics';
|
||
var date = window.localStorage.getItem(applicationKeyForStorage);
|
||
|
||
// skip if the flag is defined and is set to false explicitly
|
||
if (!isUndefined(window.tui) && window.tui.usageStatistics === false) {
|
||
return;
|
||
}
|
||
|
||
// skip if not pass seven days old
|
||
if (date && !isExpired(date)) {
|
||
return;
|
||
}
|
||
|
||
window.localStorage.setItem(applicationKeyForStorage, new Date().getTime());
|
||
|
||
setTimeout(function() {
|
||
if (document.readyState === 'interactive' || document.readyState === 'complete') {
|
||
imagePing(url, {
|
||
v: 1,
|
||
t: hitType,
|
||
tid: trackingId,
|
||
cid: hostname,
|
||
dp: hostname,
|
||
dh: appName,
|
||
el: appName,
|
||
ec: eventCategory
|
||
});
|
||
}
|
||
}, 1000);
|
||
}
|
||
|
||
module.exports = sendHostname;
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/tui-code-snippet/type/isArray.js":
|
||
/*!*******************************************************!*\
|
||
!*** ./node_modules/tui-code-snippet/type/isArray.js ***!
|
||
\*******************************************************/
|
||
/*! no static exports found */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
/**
|
||
* @fileoverview Check whether the given variable is an instance of Array or not.
|
||
* @author NHN FE Development Lab <dl_javascript@nhn.com>
|
||
*/
|
||
|
||
|
||
|
||
/**
|
||
* Check whether the given variable is an instance of Array or not.
|
||
* If the given variable is an instance of Array, return true.
|
||
* @param {*} obj - Target for checking
|
||
* @returns {boolean} Is array instance?
|
||
* @memberof module:type
|
||
*/
|
||
function isArray(obj) {
|
||
return obj instanceof Array;
|
||
}
|
||
|
||
module.exports = isArray;
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/tui-code-snippet/type/isBoolean.js":
|
||
/*!*********************************************************!*\
|
||
!*** ./node_modules/tui-code-snippet/type/isBoolean.js ***!
|
||
\*********************************************************/
|
||
/*! no static exports found */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
/**
|
||
* @fileoverview Check whether the given variable is a string or not.
|
||
* @author NHN FE Development Lab <dl_javascript@nhn.com>
|
||
*/
|
||
|
||
|
||
|
||
/**
|
||
* Check whether the given variable is a boolean or not.
|
||
* If the given variable is a boolean, return true.
|
||
* @param {*} obj - Target for checking
|
||
* @returns {boolean} Is boolean?
|
||
* @memberof module:type
|
||
*/
|
||
function isBoolean(obj) {
|
||
return typeof obj === 'boolean' || obj instanceof Boolean;
|
||
}
|
||
|
||
module.exports = isBoolean;
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/tui-code-snippet/type/isExisty.js":
|
||
/*!********************************************************!*\
|
||
!*** ./node_modules/tui-code-snippet/type/isExisty.js ***!
|
||
\********************************************************/
|
||
/*! no static exports found */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
/**
|
||
* @fileoverview Check whether the given variable is existing or not.
|
||
* @author NHN FE Development Lab <dl_javascript@nhn.com>
|
||
*/
|
||
|
||
|
||
|
||
var isUndefined = __webpack_require__(/*! ./isUndefined */ "./node_modules/tui-code-snippet/type/isUndefined.js");
|
||
var isNull = __webpack_require__(/*! ./isNull */ "./node_modules/tui-code-snippet/type/isNull.js");
|
||
|
||
/**
|
||
* Check whether the given variable is existing or not.
|
||
* If the given variable is not null and not undefined, returns true.
|
||
* @param {*} param - Target for checking
|
||
* @returns {boolean} Is existy?
|
||
* @memberof module:type
|
||
* @example
|
||
* var isExisty = require('tui-code-snippet/type/isExisty'); // node, commonjs
|
||
*
|
||
* isExisty(''); //true
|
||
* isExisty(0); //true
|
||
* isExisty([]); //true
|
||
* isExisty({}); //true
|
||
* isExisty(null); //false
|
||
* isExisty(undefined); //false
|
||
*/
|
||
function isExisty(param) {
|
||
return !isUndefined(param) && !isNull(param);
|
||
}
|
||
|
||
module.exports = isExisty;
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/tui-code-snippet/type/isFunction.js":
|
||
/*!**********************************************************!*\
|
||
!*** ./node_modules/tui-code-snippet/type/isFunction.js ***!
|
||
\**********************************************************/
|
||
/*! no static exports found */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
/**
|
||
* @fileoverview Check whether the given variable is a function or not.
|
||
* @author NHN FE Development Lab <dl_javascript@nhn.com>
|
||
*/
|
||
|
||
|
||
|
||
/**
|
||
* Check whether the given variable is a function or not.
|
||
* If the given variable is a function, return true.
|
||
* @param {*} obj - Target for checking
|
||
* @returns {boolean} Is function?
|
||
* @memberof module:type
|
||
*/
|
||
function isFunction(obj) {
|
||
return obj instanceof Function;
|
||
}
|
||
|
||
module.exports = isFunction;
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/tui-code-snippet/type/isHTMLNode.js":
|
||
/*!**********************************************************!*\
|
||
!*** ./node_modules/tui-code-snippet/type/isHTMLNode.js ***!
|
||
\**********************************************************/
|
||
/*! no static exports found */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
/**
|
||
* @fileoverview Check whether the given variable is a instance of HTMLNode or not.
|
||
* @author NHN FE Development Lab <dl_javascript@nhn.com>
|
||
*/
|
||
|
||
|
||
|
||
/**
|
||
* Check whether the given variable is a instance of HTMLNode or not.
|
||
* If the given variables is a instance of HTMLNode, return true.
|
||
* @param {*} html - Target for checking
|
||
* @returns {boolean} Is HTMLNode ?
|
||
* @memberof module:type
|
||
*/
|
||
function isHTMLNode(html) {
|
||
if (typeof HTMLElement === 'object') {
|
||
return (html && (html instanceof HTMLElement || !!html.nodeType));
|
||
}
|
||
|
||
return !!(html && html.nodeType);
|
||
}
|
||
|
||
module.exports = isHTMLNode;
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/tui-code-snippet/type/isNull.js":
|
||
/*!******************************************************!*\
|
||
!*** ./node_modules/tui-code-snippet/type/isNull.js ***!
|
||
\******************************************************/
|
||
/*! no static exports found */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
/**
|
||
* @fileoverview Check whether the given variable is null or not.
|
||
* @author NHN FE Development Lab <dl_javascript@nhn.com>
|
||
*/
|
||
|
||
|
||
|
||
/**
|
||
* Check whether the given variable is null or not.
|
||
* If the given variable(arguments[0]) is null, returns true.
|
||
* @param {*} obj - Target for checking
|
||
* @returns {boolean} Is null?
|
||
* @memberof module:type
|
||
*/
|
||
function isNull(obj) {
|
||
return obj === null;
|
||
}
|
||
|
||
module.exports = isNull;
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/tui-code-snippet/type/isNumber.js":
|
||
/*!********************************************************!*\
|
||
!*** ./node_modules/tui-code-snippet/type/isNumber.js ***!
|
||
\********************************************************/
|
||
/*! no static exports found */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
/**
|
||
* @fileoverview Check whether the given variable is a number or not.
|
||
* @author NHN FE Development Lab <dl_javascript@nhn.com>
|
||
*/
|
||
|
||
|
||
|
||
/**
|
||
* Check whether the given variable is a number or not.
|
||
* If the given variable is a number, return true.
|
||
* @param {*} obj - Target for checking
|
||
* @returns {boolean} Is number?
|
||
* @memberof module:type
|
||
*/
|
||
function isNumber(obj) {
|
||
return typeof obj === 'number' || obj instanceof Number;
|
||
}
|
||
|
||
module.exports = isNumber;
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/tui-code-snippet/type/isObject.js":
|
||
/*!********************************************************!*\
|
||
!*** ./node_modules/tui-code-snippet/type/isObject.js ***!
|
||
\********************************************************/
|
||
/*! no static exports found */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
/**
|
||
* @fileoverview Check whether the given variable is an object or not.
|
||
* @author NHN FE Development Lab <dl_javascript@nhn.com>
|
||
*/
|
||
|
||
|
||
|
||
/**
|
||
* Check whether the given variable is an object or not.
|
||
* If the given variable is an object, return true.
|
||
* @param {*} obj - Target for checking
|
||
* @returns {boolean} Is object?
|
||
* @memberof module:type
|
||
*/
|
||
function isObject(obj) {
|
||
return obj === Object(obj);
|
||
}
|
||
|
||
module.exports = isObject;
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/tui-code-snippet/type/isString.js":
|
||
/*!********************************************************!*\
|
||
!*** ./node_modules/tui-code-snippet/type/isString.js ***!
|
||
\********************************************************/
|
||
/*! no static exports found */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
/**
|
||
* @fileoverview Check whether the given variable is a string or not.
|
||
* @author NHN FE Development Lab <dl_javascript@nhn.com>
|
||
*/
|
||
|
||
|
||
|
||
/**
|
||
* Check whether the given variable is a string or not.
|
||
* If the given variable is a string, return true.
|
||
* @param {*} obj - Target for checking
|
||
* @returns {boolean} Is string?
|
||
* @memberof module:type
|
||
*/
|
||
function isString(obj) {
|
||
return typeof obj === 'string' || obj instanceof String;
|
||
}
|
||
|
||
module.exports = isString;
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/tui-code-snippet/type/isUndefined.js":
|
||
/*!***********************************************************!*\
|
||
!*** ./node_modules/tui-code-snippet/type/isUndefined.js ***!
|
||
\***********************************************************/
|
||
/*! no static exports found */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
/**
|
||
* @fileoverview Check whether the given variable is undefined or not.
|
||
* @author NHN FE Development Lab <dl_javascript@nhn.com>
|
||
*/
|
||
|
||
|
||
|
||
/**
|
||
* Check whether the given variable is undefined or not.
|
||
* If the given variable is undefined, returns true.
|
||
* @param {*} obj - Target for checking
|
||
* @returns {boolean} Is undefined?
|
||
* @memberof module:type
|
||
*/
|
||
function isUndefined(obj) {
|
||
return obj === undefined; // eslint-disable-line no-undefined
|
||
}
|
||
|
||
module.exports = isUndefined;
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./src/css/selectBox.css":
|
||
/*!*******************************!*\
|
||
!*** ./src/css/selectBox.css ***!
|
||
\*******************************/
|
||
/*! no static exports found */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
// extracted by mini-css-extract-plugin
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./src/js/constants.js":
|
||
/*!*****************************!*\
|
||
!*** ./src/js/constants.js ***!
|
||
\*****************************/
|
||
/*! no static exports found */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function (global, factory) {
|
||
if (true) {
|
||
!(__WEBPACK_AMD_DEFINE_ARRAY__ = [exports, __webpack_require__(/*! tui-code-snippet/collection/forEachOwnProperties */ "./node_modules/tui-code-snippet/collection/forEachOwnProperties.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
|
||
__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
|
||
(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
|
||
__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
|
||
} else { var mod; }
|
||
})(this, function (_exports, _forEachOwnProperties) {
|
||
"use strict";
|
||
|
||
_exports.__esModule = true;
|
||
_exports.cls = void 0;
|
||
_forEachOwnProperties = _interopRequireDefault(_forEachOwnProperties);
|
||
|
||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
|
||
|
||
/**
|
||
* @fileoverview The static values
|
||
* @author NHN. FE dev team.<dl_javascript@nhn.com>
|
||
*/
|
||
var CSS_PREFIX = 'tui-select-box';
|
||
var classNames = {
|
||
SELECT_BOX: '',
|
||
ITEM: 'item',
|
||
ITEM_GROUP: 'item-group',
|
||
ITEM_GROUP_LABEL: 'item-group-label',
|
||
DROPDOWN: 'dropdown',
|
||
INPUT: 'input',
|
||
PLACEHOLDER: 'placeholder',
|
||
ICON: 'icon',
|
||
OPEN: 'open',
|
||
HIDDEN: 'hidden',
|
||
DISABLED: 'disabled',
|
||
SELECTED: 'selected',
|
||
HIGHLIGHT: 'highlight'
|
||
};
|
||
|
||
var cls = function () {
|
||
(0, _forEachOwnProperties["default"])(classNames, function (value, key) {
|
||
if (value) {
|
||
classNames[key] = CSS_PREFIX + "-" + value;
|
||
} else {
|
||
classNames[key] = CSS_PREFIX;
|
||
}
|
||
});
|
||
return classNames;
|
||
}();
|
||
|
||
_exports.cls = cls;
|
||
});
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./src/js/dropdown.js":
|
||
/*!****************************!*\
|
||
!*** ./src/js/dropdown.js ***!
|
||
\****************************/
|
||
/*! no static exports found */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function (global, factory) {
|
||
if (true) {
|
||
!(__WEBPACK_AMD_DEFINE_ARRAY__ = [exports, __webpack_require__(/*! tui-code-snippet/collection/forEachArray */ "./node_modules/tui-code-snippet/collection/forEachArray.js"), __webpack_require__(/*! tui-code-snippet/type/isExisty */ "./node_modules/tui-code-snippet/type/isExisty.js"), __webpack_require__(/*! tui-code-snippet/type/isNumber */ "./node_modules/tui-code-snippet/type/isNumber.js"), __webpack_require__(/*! tui-code-snippet/domUtil/addClass */ "./node_modules/tui-code-snippet/domUtil/addClass.js"), __webpack_require__(/*! tui-code-snippet/domUtil/removeClass */ "./node_modules/tui-code-snippet/domUtil/removeClass.js"), __webpack_require__(/*! tui-code-snippet/domUtil/removeElement */ "./node_modules/tui-code-snippet/domUtil/removeElement.js"), __webpack_require__(/*! ./utils */ "./src/js/utils.js"), __webpack_require__(/*! ./constants */ "./src/js/constants.js"), __webpack_require__(/*! ./itemGroup */ "./src/js/itemGroup.js"), __webpack_require__(/*! ./item */ "./src/js/item.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
|
||
__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
|
||
(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
|
||
__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
|
||
} else { var mod; }
|
||
})(this, function (_exports, _forEachArray, _isExisty, _isNumber, _addClass, _removeClass, _removeElement, _utils, _constants, _itemGroup, _item) {
|
||
"use strict";
|
||
|
||
_exports.__esModule = true;
|
||
_exports["default"] = void 0;
|
||
_forEachArray = _interopRequireDefault(_forEachArray);
|
||
_isExisty = _interopRequireDefault(_isExisty);
|
||
_isNumber = _interopRequireDefault(_isNumber);
|
||
_addClass = _interopRequireDefault(_addClass);
|
||
_removeClass = _interopRequireDefault(_removeClass);
|
||
_removeElement = _interopRequireDefault(_removeElement);
|
||
_itemGroup = _interopRequireDefault(_itemGroup);
|
||
_item = _interopRequireDefault(_item);
|
||
|
||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
|
||
|
||
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
|
||
|
||
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(source, true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(source).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
|
||
|
||
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
||
|
||
/**
|
||
* @class
|
||
* @ignore
|
||
* @param {object} options - options
|
||
* @param {string} [options.placeholder] - placeholder for an input
|
||
* @param {array<itemData|itemGroupData>} options.data - data for ItemGroups and Items
|
||
* @param {boolean} [options.disabled=false] - whether a dropdown should be disabled or not
|
||
*/
|
||
var Dropdown =
|
||
/*#__PURE__*/
|
||
function () {
|
||
function Dropdown(_ref) {
|
||
var placeholder = _ref.placeholder,
|
||
data = _ref.data,
|
||
_ref$disabled = _ref.disabled,
|
||
disabled = _ref$disabled === void 0 ? false : _ref$disabled;
|
||
|
||
/**
|
||
* @type {HTMLElement}
|
||
* @private
|
||
*/
|
||
this.el = (0, _utils.createElement)('ul', '', {
|
||
className: _constants.cls.DROPDOWN + " " + _constants.cls.HIDDEN
|
||
});
|
||
/**
|
||
* @type {HTMLElement}
|
||
* @private
|
||
*/
|
||
|
||
this.nativeEl = (0, _utils.createElement)('select', '', {
|
||
className: _constants.cls.HIDDEN,
|
||
tabIndex: -1
|
||
});
|
||
/**
|
||
* Items and ItemGroups
|
||
* @type {Array.<Item|ItemGroup>}
|
||
* @private
|
||
*/
|
||
|
||
this.items = [];
|
||
/**
|
||
* the number of Item
|
||
* @type {number}
|
||
* @private
|
||
*/
|
||
|
||
this.itemLength = 0;
|
||
/**
|
||
* @type {Item}
|
||
* @private
|
||
*/
|
||
|
||
this.selectedItem = null;
|
||
/**
|
||
* @type {Item}
|
||
* @private
|
||
*/
|
||
|
||
this.highlightedItem = null;
|
||
this.initialize(data, disabled, placeholder);
|
||
}
|
||
/**
|
||
* Create Items and ItemGroups and calculate the number of Items
|
||
* @return {array<Item|ItemGroup>}
|
||
* @private
|
||
*/
|
||
|
||
|
||
var _proto = Dropdown.prototype;
|
||
|
||
_proto.initializeItems = function initializeItems(data) {
|
||
var _this = this;
|
||
|
||
var item;
|
||
var itemIndex = 0;
|
||
var itemGroupIndex = 0;
|
||
data.forEach(function (datum) {
|
||
if (datum.data) {
|
||
item = new _itemGroup["default"](_objectSpread({
|
||
index: itemIndex,
|
||
itemGroupIndex: itemGroupIndex
|
||
}, datum));
|
||
itemIndex += datum.data.length - 1;
|
||
itemGroupIndex += 1;
|
||
} else {
|
||
item = new _item["default"](_objectSpread({
|
||
index: itemIndex
|
||
}, datum));
|
||
}
|
||
|
||
_this.items.push(item);
|
||
|
||
item.appendToContainer(_this.el, _this.nativeEl);
|
||
itemIndex += 1;
|
||
});
|
||
this.itemLength = itemIndex;
|
||
}
|
||
/**
|
||
* Initialize
|
||
* @private
|
||
*/
|
||
;
|
||
|
||
_proto.initialize = function initialize(data, disabled, placeholder) {
|
||
var _this2 = this;
|
||
|
||
if (placeholder) {
|
||
(0, _utils.createElement)('option', '', {
|
||
label: placeholder,
|
||
value: ''
|
||
}, this.nativeEl);
|
||
}
|
||
|
||
this.initializeItems(data);
|
||
this.iterateItems(function (item) {
|
||
if (!_this2.selectedItem && item.isSelected()) {
|
||
_this2.selectedItem = item;
|
||
} else if (_this2.selectedItem && item.isSelected()) {
|
||
item.deselect();
|
||
}
|
||
});
|
||
|
||
if (disabled) {
|
||
this.disable();
|
||
}
|
||
}
|
||
/**
|
||
* Execute a function while iterating items
|
||
* @param {function} callback - function to execute
|
||
* @param {...any} args - arguments
|
||
* @private
|
||
*/
|
||
;
|
||
|
||
_proto.iterateItems = function iterateItems(callback) {
|
||
var _this3 = this;
|
||
|
||
for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
|
||
args[_key - 1] = arguments[_key];
|
||
}
|
||
|
||
var index = 0;
|
||
(0, _forEachArray["default"])(this.items, function (item) {
|
||
var result = true;
|
||
|
||
if (item instanceof _itemGroup["default"]) {
|
||
(0, _forEachArray["default"])(item.getItems(), function (itemInGroup) {
|
||
result = callback.apply(_this3, [itemInGroup, index].concat(args)) || false;
|
||
index += 1;
|
||
return result;
|
||
});
|
||
return result;
|
||
}
|
||
|
||
result = callback.apply(_this3, [item, index].concat(args));
|
||
index += 1;
|
||
return result;
|
||
});
|
||
}
|
||
/**
|
||
* Open a dropdown list
|
||
*/
|
||
;
|
||
|
||
_proto.open = function open() {
|
||
(0, _removeClass["default"])(this.el, _constants.cls.HIDDEN);
|
||
var highlightedItem = !this.selectedItem || this.selectedItem.isDisabled() ? this.getItems(function (item) {
|
||
return !item.isDisabled();
|
||
})[0] : this.selectedItem;
|
||
this.highlight(highlightedItem);
|
||
}
|
||
/**
|
||
* Close a dropdown list
|
||
*/
|
||
;
|
||
|
||
_proto.close = function close() {
|
||
(0, _addClass["default"])(this.el, _constants.cls.HIDDEN);
|
||
this.dehighlight();
|
||
}
|
||
/**
|
||
* Disable an dropdown
|
||
*/
|
||
;
|
||
|
||
_proto.disable = function disable() {
|
||
this.nativeEl.disabled = true;
|
||
(0, _addClass["default"])(this.el, _constants.cls.DISABLED);
|
||
}
|
||
/**
|
||
* Enable an dropdown
|
||
*/
|
||
;
|
||
|
||
_proto.enable = function enable() {
|
||
this.nativeEl.disabled = false;
|
||
(0, _removeClass["default"])(this.el, _constants.cls.DISABLED);
|
||
}
|
||
/**
|
||
* Select an Item
|
||
* @param {string|number|Item} value - if string, find an Item by its value. if number, find an Item by its index.
|
||
* @return {Item} result of selection
|
||
*/
|
||
;
|
||
|
||
_proto.select = function select(value) {
|
||
var selectedItem = value instanceof _item["default"] ? value : this.getItem(value);
|
||
this.deselect();
|
||
|
||
if (!selectedItem || selectedItem && selectedItem.isDisabled()) {
|
||
return null;
|
||
}
|
||
|
||
selectedItem.select();
|
||
this.selectedItem = selectedItem;
|
||
return selectedItem;
|
||
}
|
||
/**
|
||
* Deselect an Item
|
||
*/
|
||
;
|
||
|
||
_proto.deselect = function deselect() {
|
||
if (this.selectedItem) {
|
||
this.selectedItem.deselect();
|
||
this.selectedItem = null;
|
||
}
|
||
}
|
||
/**
|
||
* Highlight an Item
|
||
* @param {number|string|Item} value - if string, find an Item by its value. if number, find an Item by its index.
|
||
*/
|
||
;
|
||
|
||
_proto.highlight = function highlight(value) {
|
||
var highlightedItem;
|
||
|
||
if (value instanceof _item["default"]) {
|
||
highlightedItem = value;
|
||
} else if ((0, _isExisty["default"])(value)) {
|
||
highlightedItem = this.getItem(value);
|
||
}
|
||
|
||
if (highlightedItem && highlightedItem !== this.highlightedItem) {
|
||
this.dehighlight();
|
||
highlightedItem.highlight();
|
||
this.highlightedItem = highlightedItem;
|
||
}
|
||
}
|
||
/**
|
||
* Dehighlight an Item
|
||
*/
|
||
;
|
||
|
||
_proto.dehighlight = function dehighlight() {
|
||
if (this.highlightedItem) {
|
||
this.highlightedItem.dehighlight();
|
||
this.highlightedItem = null;
|
||
}
|
||
}
|
||
/**
|
||
* Move a highlighted Item
|
||
* @param {number} direction - direction to move
|
||
*/
|
||
;
|
||
|
||
_proto.moveHighlightedItem = function moveHighlightedItem(direction) {
|
||
var highlightedItem = this.getHighlightedItem();
|
||
var items = this.getItems();
|
||
var index = items.indexOf(highlightedItem);
|
||
|
||
if (index > -1) {
|
||
index += direction;
|
||
|
||
for (; index < items.length && index >= 0; index += direction) {
|
||
if (!items[index].isDisabled()) {
|
||
this.highlight(items[index]);
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
/**
|
||
* Get all Items that pass the test implemented by the provided function
|
||
* If filter function is not passed, it returns all Items
|
||
* @param {function} callback - callback function to filter items
|
||
* @param {number} number - the number of items to find. -1 means all items.
|
||
* @return {array<Item>}
|
||
*/
|
||
;
|
||
|
||
_proto.getItems = function getItems(callback, number) {
|
||
if (callback === void 0) {
|
||
callback = function callback() {
|
||
return true;
|
||
};
|
||
}
|
||
|
||
if (number === void 0) {
|
||
number = -1;
|
||
}
|
||
|
||
var items = [];
|
||
this.iterateItems(function (item) {
|
||
if (callback(item)) {
|
||
items.push(item);
|
||
number -= 1;
|
||
return number !== 0;
|
||
}
|
||
|
||
return true;
|
||
});
|
||
return items;
|
||
}
|
||
/**
|
||
* Get an Item by its index or value
|
||
* @param {number|string} value - if string, the Item's value. if number, the Item's index.
|
||
* @return {Item}
|
||
*/
|
||
;
|
||
|
||
_proto.getItem = function getItem(value) {
|
||
var isValidItem = (0, _isNumber["default"])(value) ? function (comparedItem) {
|
||
return comparedItem.getIndex() === value;
|
||
} : function (comparedItem) {
|
||
return comparedItem.getValue() === value;
|
||
};
|
||
return this.getItems(isValidItem, 1)[0];
|
||
}
|
||
/**
|
||
* Get all ItemGroups that pass the test implemented by the provided function
|
||
* If filter function is not passed, it returns all ItemGroups
|
||
* @param {function} callback - callback function to filter item groups
|
||
* @param {number} number - the number of item groups to find. -1 means all item groups.
|
||
* @return {array<ItemGroup>}
|
||
*/
|
||
;
|
||
|
||
_proto.getItemGroups = function getItemGroups(callback, number) {
|
||
if (callback === void 0) {
|
||
callback = function callback() {
|
||
return true;
|
||
};
|
||
}
|
||
|
||
if (number === void 0) {
|
||
number = -1;
|
||
}
|
||
|
||
var itemGroups = [];
|
||
(0, _forEachArray["default"])(this.items, function (itemGroup) {
|
||
if (itemGroup instanceof _itemGroup["default"] && callback(itemGroup)) {
|
||
itemGroups.push(itemGroup);
|
||
number -= 1;
|
||
return number !== 0;
|
||
}
|
||
|
||
return true;
|
||
});
|
||
return itemGroups;
|
||
}
|
||
/**
|
||
* Get an ItemGroup by its index
|
||
* @param {number} index - groupIndex of the ItemGroup
|
||
* @return {ItemGroup}
|
||
*/
|
||
;
|
||
|
||
_proto.getItemGroup = function getItemGroup(index) {
|
||
return this.getItemGroups(function (itemGroup) {
|
||
return itemGroup.getIndex() === index;
|
||
}, 1)[0];
|
||
}
|
||
/**
|
||
* Return the number of Items
|
||
* @return {number}
|
||
*/
|
||
;
|
||
|
||
_proto.getItemLength = function getItemLength() {
|
||
return this.itemLength;
|
||
}
|
||
/**
|
||
* Return the selected Item
|
||
* @return {Item}
|
||
*/
|
||
;
|
||
|
||
_proto.getSelectedItem = function getSelectedItem() {
|
||
return this.selectedItem;
|
||
}
|
||
/**
|
||
* Return the highlighted Item
|
||
* @return {Item}
|
||
*/
|
||
;
|
||
|
||
_proto.getHighlightedItem = function getHighlightedItem() {
|
||
return this.highlightedItem;
|
||
}
|
||
/**
|
||
* Append the element and native element to the container
|
||
* @param {HTMLElement} container - container element
|
||
*/
|
||
;
|
||
|
||
_proto.appendToContainer = function appendToContainer(container) {
|
||
container.appendChild(this.el);
|
||
container.appendChild(this.nativeEl);
|
||
}
|
||
/**
|
||
* Destory a dropdown
|
||
*/
|
||
;
|
||
|
||
_proto.destroy = function destroy() {
|
||
this.items.forEach(function (item) {
|
||
return item.destroy();
|
||
});
|
||
(0, _removeElement["default"])(this.el);
|
||
(0, _removeElement["default"])(this.nativeEl);
|
||
this.el = this.nativeEl = this.items = this.selectedItem = this.highlightedItem = null;
|
||
};
|
||
|
||
return Dropdown;
|
||
}();
|
||
|
||
_exports["default"] = Dropdown;
|
||
});
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./src/js/index.js":
|
||
/*!*************************!*\
|
||
!*** ./src/js/index.js ***!
|
||
\*************************/
|
||
/*! no static exports found */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function (global, factory) {
|
||
if (true) {
|
||
!(__WEBPACK_AMD_DEFINE_ARRAY__ = [exports, __webpack_require__(/*! ./selectBox */ "./src/js/selectBox.js"), __webpack_require__(/*! ../css/selectBox.css */ "./src/css/selectBox.css")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
|
||
__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
|
||
(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
|
||
__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
|
||
} else { var mod; }
|
||
})(this, function (_exports, _selectBox, _selectBox2) {
|
||
"use strict";
|
||
|
||
_exports.__esModule = true;
|
||
_exports["default"] = void 0;
|
||
_selectBox = _interopRequireDefault(_selectBox);
|
||
|
||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
|
||
|
||
/**
|
||
* @fileoverview
|
||
* @author NHN FE Development Lab <dl_javascript@nhn.com>
|
||
*/
|
||
var _default = _selectBox["default"];
|
||
_exports["default"] = _default;
|
||
});
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./src/js/input.js":
|
||
/*!*************************!*\
|
||
!*** ./src/js/input.js ***!
|
||
\*************************/
|
||
/*! no static exports found */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function (global, factory) {
|
||
if (true) {
|
||
!(__WEBPACK_AMD_DEFINE_ARRAY__ = [exports, __webpack_require__(/*! tui-code-snippet/domUtil/addClass */ "./node_modules/tui-code-snippet/domUtil/addClass.js"), __webpack_require__(/*! tui-code-snippet/domUtil/removeClass */ "./node_modules/tui-code-snippet/domUtil/removeClass.js"), __webpack_require__(/*! tui-code-snippet/domUtil/removeElement */ "./node_modules/tui-code-snippet/domUtil/removeElement.js"), __webpack_require__(/*! ./utils */ "./src/js/utils.js"), __webpack_require__(/*! ./constants */ "./src/js/constants.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
|
||
__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
|
||
(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
|
||
__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
|
||
} else { var mod; }
|
||
})(this, function (_exports, _addClass, _removeClass, _removeElement, _utils, _constants) {
|
||
"use strict";
|
||
|
||
_exports.__esModule = true;
|
||
_exports["default"] = void 0;
|
||
_addClass = _interopRequireDefault(_addClass);
|
||
_removeClass = _interopRequireDefault(_removeClass);
|
||
_removeElement = _interopRequireDefault(_removeElement);
|
||
|
||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
|
||
|
||
/**
|
||
* @fileoverview Input
|
||
* @author NHN FE Development Lab <dl_javascript@nhn.com>
|
||
*/
|
||
|
||
/**
|
||
* @class
|
||
* @ignore
|
||
* @param {object} options - options
|
||
* @param {string} [options.placeholder] - placeholder for a select box
|
||
* @param {string} [options.disabled] - whether an input should be disabled or not
|
||
* @param {boolean} [options.showIcon] - whether an arrow icon in the input should be shown
|
||
*/
|
||
var Input =
|
||
/*#__PURE__*/
|
||
function () {
|
||
function Input(_ref) {
|
||
var placeholder = _ref.placeholder,
|
||
disabled = _ref.disabled,
|
||
showIcon = _ref.showIcon;
|
||
|
||
/**
|
||
* text for a placeholder
|
||
* @type {string}
|
||
* @private
|
||
*/
|
||
this.placeholderText = placeholder;
|
||
/**
|
||
* @type {HTMLElement}
|
||
* @private
|
||
*/
|
||
|
||
this.el = (0, _utils.createElement)('div', '', {
|
||
className: _constants.cls.INPUT,
|
||
tabIndex: 0
|
||
});
|
||
/**
|
||
* @type {HTMLElement}
|
||
* @private
|
||
*/
|
||
|
||
this.placeholderEl = (0, _utils.createElement)('p', this.placeholderText, {
|
||
className: _constants.cls.PLACEHOLDER
|
||
}, this.el);
|
||
this.initialize(disabled, showIcon);
|
||
}
|
||
/**
|
||
* Initialize
|
||
* @private
|
||
*/
|
||
|
||
|
||
var _proto = Input.prototype;
|
||
|
||
_proto.initialize = function initialize(disabled, showIcon) {
|
||
if (showIcon) {
|
||
(0, _utils.createElement)('span', 'select', {
|
||
className: _constants.cls.ICON
|
||
}, this.el);
|
||
} else {
|
||
this.placeholderEl.width = '100%';
|
||
}
|
||
|
||
if (disabled) {
|
||
this.disable();
|
||
}
|
||
}
|
||
/**
|
||
* Disable an input
|
||
*/
|
||
;
|
||
|
||
_proto.disable = function disable() {
|
||
(0, _addClass["default"])(this.el, _constants.cls.DISABLED);
|
||
}
|
||
/**
|
||
* Enable an input
|
||
*/
|
||
;
|
||
|
||
_proto.enable = function enable() {
|
||
(0, _removeClass["default"])(this.el, _constants.cls.DISABLED);
|
||
}
|
||
/**
|
||
* Open an input
|
||
*/
|
||
;
|
||
|
||
_proto.open = function open() {
|
||
(0, _addClass["default"])(this.el, _constants.cls.OPEN);
|
||
}
|
||
/**
|
||
* Close an input
|
||
*/
|
||
;
|
||
|
||
_proto.close = function close() {
|
||
(0, _removeClass["default"])(this.el, _constants.cls.OPEN);
|
||
}
|
||
/**
|
||
* Focus
|
||
*/
|
||
;
|
||
|
||
_proto.focus = function focus() {
|
||
this.el.focus();
|
||
}
|
||
/**
|
||
* Change the text in the placeholder
|
||
* @param {Item} item - selected Item
|
||
*/
|
||
;
|
||
|
||
_proto.changeText = function changeText(item) {
|
||
if (item) {
|
||
this.placeholderEl.innerText = item.getLabel();
|
||
} else {
|
||
this.placeholderEl.innerText = this.placeholderText;
|
||
}
|
||
}
|
||
/**
|
||
* Append the element to the container
|
||
* @param {HTMLElement} container - container element
|
||
*/
|
||
;
|
||
|
||
_proto.appendToContainer = function appendToContainer(container) {
|
||
container.appendChild(this.el);
|
||
}
|
||
/**
|
||
* Destroy an input
|
||
*/
|
||
;
|
||
|
||
_proto.destroy = function destroy() {
|
||
(0, _removeElement["default"])(this.el);
|
||
this.el = this.placeholderEl = null;
|
||
};
|
||
|
||
return Input;
|
||
}();
|
||
|
||
_exports["default"] = Input;
|
||
});
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./src/js/item.js":
|
||
/*!************************!*\
|
||
!*** ./src/js/item.js ***!
|
||
\************************/
|
||
/*! no static exports found */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function (global, factory) {
|
||
if (true) {
|
||
!(__WEBPACK_AMD_DEFINE_ARRAY__ = [exports, __webpack_require__(/*! tui-code-snippet/domUtil/addClass */ "./node_modules/tui-code-snippet/domUtil/addClass.js"), __webpack_require__(/*! tui-code-snippet/domUtil/removeClass */ "./node_modules/tui-code-snippet/domUtil/removeClass.js"), __webpack_require__(/*! tui-code-snippet/domUtil/removeElement */ "./node_modules/tui-code-snippet/domUtil/removeElement.js"), __webpack_require__(/*! ./utils */ "./src/js/utils.js"), __webpack_require__(/*! ./constants */ "./src/js/constants.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
|
||
__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
|
||
(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
|
||
__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
|
||
} else { var mod; }
|
||
})(this, function (_exports, _addClass, _removeClass, _removeElement, _utils, _constants) {
|
||
"use strict";
|
||
|
||
_exports.__esModule = true;
|
||
_exports["default"] = void 0;
|
||
_addClass = _interopRequireDefault(_addClass);
|
||
_removeClass = _interopRequireDefault(_removeClass);
|
||
_removeElement = _interopRequireDefault(_removeElement);
|
||
|
||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
|
||
|
||
/**
|
||
* @fileoverview Item
|
||
* @author NHN FE Development Lab <dl_javascript@nhn.com>
|
||
*/
|
||
|
||
/**
|
||
* @class
|
||
* @description
|
||
* An item.
|
||
* You can get Item by {@link SelectBox#getItem SelectBox.getItem()} and {@link SelectBox#getItems SelectBox.getItems()}.
|
||
*/
|
||
var Item =
|
||
/*#__PURE__*/
|
||
function () {
|
||
/**
|
||
* @hideconstructor
|
||
* @param {object} options - options
|
||
* @param {string} [options.label] - label to be displayed in the drop-down list
|
||
* @param {string} options.value - value of an item
|
||
* @param {boolean} [options.disabled=false] - whether an Item should be disabled or not
|
||
* @param {boolean} [options.selected=false] - whether an Item should be pre-selected or not
|
||
* @param {number} options.index - Item's index
|
||
*/
|
||
function Item(_ref) {
|
||
var value = _ref.value,
|
||
label = _ref.label,
|
||
disabled = _ref.disabled,
|
||
selected = _ref.selected,
|
||
index = _ref.index;
|
||
|
||
/**
|
||
* value of an item
|
||
* @type {string}
|
||
* @private
|
||
*/
|
||
this.value = "" + value;
|
||
/**
|
||
* label to be displayed in the drop-down list
|
||
* if label is an empty string, it should be same as its value
|
||
* @type {string}
|
||
* @private
|
||
*/
|
||
|
||
this.label = label || this.value;
|
||
/**
|
||
* @type {number}
|
||
* @private
|
||
*/
|
||
|
||
this.index = index;
|
||
/**
|
||
* whether an ItemGroup of the Item is disabled or not
|
||
* @type {boolean}
|
||
* @private
|
||
*/
|
||
|
||
this.itemGroupDisabled = false;
|
||
/**
|
||
* whether an Item is disabled or not
|
||
* @type {boolean}
|
||
* @private
|
||
*/
|
||
|
||
this.itemDisabled = false;
|
||
/**
|
||
* @type {boolean}
|
||
* @private
|
||
*/
|
||
|
||
this.selected = false;
|
||
/**
|
||
* <li> element for a custom dropdown item
|
||
* @type {HTMLElement}
|
||
* @private
|
||
*/
|
||
|
||
this.el = (0, _utils.createElement)('li', this.label, {
|
||
className: _constants.cls.ITEM,
|
||
tabIndex: -1,
|
||
'data-value': this.value,
|
||
'data-index': this.index
|
||
});
|
||
/**
|
||
* <option> element for a select element
|
||
* @type {HTMLElement}
|
||
* @private
|
||
*/
|
||
|
||
this.nativeEl = (0, _utils.createElement)('option', '', {
|
||
value: this.value,
|
||
label: this.label
|
||
});
|
||
this.initialize(disabled, selected);
|
||
}
|
||
/**
|
||
* Initialize
|
||
* @private
|
||
*/
|
||
|
||
|
||
var _proto = Item.prototype;
|
||
|
||
_proto.initialize = function initialize(disabled, selected) {
|
||
if (selected) {
|
||
this.select();
|
||
}
|
||
|
||
if (disabled) {
|
||
this.disable();
|
||
}
|
||
}
|
||
/**
|
||
* Make an Item disable
|
||
* @private
|
||
*/
|
||
;
|
||
|
||
_proto.makeDisable = function makeDisable() {
|
||
this.nativeEl.disabled = true;
|
||
(0, _addClass["default"])(this.el, _constants.cls.DISABLED);
|
||
}
|
||
/**
|
||
* Make an Item enable
|
||
* @private
|
||
*/
|
||
;
|
||
|
||
_proto.makeEnable = function makeEnable() {
|
||
this.nativeEl.disabled = false;
|
||
(0, _removeClass["default"])(this.el, _constants.cls.DISABLED);
|
||
}
|
||
/**
|
||
* Disable an Item due to an ItemGroup
|
||
* @ignore
|
||
*/
|
||
;
|
||
|
||
_proto.disableItemGroup = function disableItemGroup() {
|
||
this.itemGroupDisabled = true;
|
||
this.makeDisable();
|
||
}
|
||
/**
|
||
* Enable an Item due to an ItemGroup
|
||
* @ignore
|
||
*/
|
||
;
|
||
|
||
_proto.enableItemGroup = function enableItemGroup() {
|
||
this.itemGroupDisabled = false;
|
||
|
||
if (!this.isDisabled()) {
|
||
this.makeEnable();
|
||
}
|
||
}
|
||
/**
|
||
* Disable an Item
|
||
* @ignore
|
||
*/
|
||
;
|
||
|
||
_proto.disable = function disable() {
|
||
this.itemDisabled = true;
|
||
this.makeDisable();
|
||
}
|
||
/**
|
||
* Enable an Item
|
||
* @ignore
|
||
*/
|
||
;
|
||
|
||
_proto.enable = function enable() {
|
||
this.itemDisabled = false;
|
||
|
||
if (!this.isDisabled()) {
|
||
this.makeEnable();
|
||
}
|
||
}
|
||
/**
|
||
* Select an Item
|
||
* @ignore
|
||
*/
|
||
;
|
||
|
||
_proto.select = function select() {
|
||
if (!this.isDisabled()) {
|
||
this.selected = this.nativeEl.selected = true;
|
||
(0, _addClass["default"])(this.el, _constants.cls.SELECTED);
|
||
}
|
||
}
|
||
/**
|
||
* Deselect an Item
|
||
* @ignore
|
||
*/
|
||
;
|
||
|
||
_proto.deselect = function deselect() {
|
||
this.selected = this.nativeEl.selected = false;
|
||
(0, _removeClass["default"])(this.el, _constants.cls.SELECTED);
|
||
}
|
||
/**
|
||
* Highlight an Item
|
||
* @ignore
|
||
*/
|
||
;
|
||
|
||
_proto.highlight = function highlight() {
|
||
if (!this.isDisabled()) {
|
||
(0, _addClass["default"])(this.el, _constants.cls.HIGHLIGHT);
|
||
this.el.focus();
|
||
}
|
||
}
|
||
/**
|
||
* Remove a highlight from an Item
|
||
* @ignore
|
||
*/
|
||
;
|
||
|
||
_proto.dehighlight = function dehighlight() {
|
||
(0, _removeClass["default"])(this.el, _constants.cls.HIGHLIGHT);
|
||
this.el.blur();
|
||
}
|
||
/**
|
||
* Return an item's value.
|
||
* @return {string}
|
||
*/
|
||
;
|
||
|
||
_proto.getValue = function getValue() {
|
||
return this.value;
|
||
}
|
||
/**
|
||
* Return an item's label.
|
||
* @return {string}
|
||
*/
|
||
;
|
||
|
||
_proto.getLabel = function getLabel() {
|
||
return this.label;
|
||
}
|
||
/**
|
||
* Return an item's index.
|
||
* @return {number}
|
||
*/
|
||
;
|
||
|
||
_proto.getIndex = function getIndex() {
|
||
return this.index;
|
||
}
|
||
/**
|
||
* Return whether an item is selected or not.
|
||
* @return {boolean}
|
||
*/
|
||
;
|
||
|
||
_proto.isSelected = function isSelected() {
|
||
return this.selected;
|
||
}
|
||
/**
|
||
* Return whether an item is disabled or not.
|
||
* The result is true if any of the items and item groups are disabled.
|
||
* @return {boolean}
|
||
*/
|
||
;
|
||
|
||
_proto.isDisabled = function isDisabled() {
|
||
return this.itemDisabled || this.itemGroupDisabled;
|
||
}
|
||
/**
|
||
* Append the element and native element to the containers
|
||
* @param {HTMLElement} container - container element
|
||
* @param {HTMLElement} nativeContainer - native container element
|
||
* @ignore
|
||
*/
|
||
;
|
||
|
||
_proto.appendToContainer = function appendToContainer(container, nativeContainer) {
|
||
container.appendChild(this.el);
|
||
nativeContainer.appendChild(this.nativeEl);
|
||
}
|
||
/**
|
||
* Destroy an Item
|
||
* @ignore
|
||
*/
|
||
;
|
||
|
||
_proto.destroy = function destroy() {
|
||
(0, _removeElement["default"])(this.el);
|
||
(0, _removeElement["default"])(this.nativeEl);
|
||
this.el = this.nativeEl = null;
|
||
};
|
||
|
||
return Item;
|
||
}();
|
||
|
||
_exports["default"] = Item;
|
||
});
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./src/js/itemGroup.js":
|
||
/*!*****************************!*\
|
||
!*** ./src/js/itemGroup.js ***!
|
||
\*****************************/
|
||
/*! no static exports found */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function (global, factory) {
|
||
if (true) {
|
||
!(__WEBPACK_AMD_DEFINE_ARRAY__ = [exports, __webpack_require__(/*! tui-code-snippet/domUtil/addClass */ "./node_modules/tui-code-snippet/domUtil/addClass.js"), __webpack_require__(/*! tui-code-snippet/domUtil/removeClass */ "./node_modules/tui-code-snippet/domUtil/removeClass.js"), __webpack_require__(/*! tui-code-snippet/domUtil/removeElement */ "./node_modules/tui-code-snippet/domUtil/removeElement.js"), __webpack_require__(/*! ./utils */ "./src/js/utils.js"), __webpack_require__(/*! ./constants */ "./src/js/constants.js"), __webpack_require__(/*! ./item */ "./src/js/item.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
|
||
__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
|
||
(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
|
||
__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
|
||
} else { var mod; }
|
||
})(this, function (_exports, _addClass, _removeClass, _removeElement, _utils, _constants, _item) {
|
||
"use strict";
|
||
|
||
_exports.__esModule = true;
|
||
_exports["default"] = void 0;
|
||
_addClass = _interopRequireDefault(_addClass);
|
||
_removeClass = _interopRequireDefault(_removeClass);
|
||
_removeElement = _interopRequireDefault(_removeElement);
|
||
_item = _interopRequireDefault(_item);
|
||
|
||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
|
||
|
||
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
|
||
|
||
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(source, true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(source).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
|
||
|
||
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
||
|
||
/**
|
||
* @class
|
||
* @description
|
||
* A group of items.
|
||
* You can get ItemGroup by {@link SelectBox#getItemGroup SelectBox.getItemGroup()} and {@link SelectBox#getItemGroups SelectBox.getItemGroups()}.
|
||
*/
|
||
var ItemGroup =
|
||
/*#__PURE__*/
|
||
function () {
|
||
/**
|
||
* @hideconstructor
|
||
* @param {object} options - options
|
||
* @param {string} [options.label] - label to be displayed in the dropdown list
|
||
* @param {array<itemData>} options.data - data for Items to be included in the ItemGroup
|
||
* @param {boolean} [options.disabled=false] - whether an ItemGroup should be disabled or not
|
||
* @param {number} options.index - index of the first Item in the ItemGroup
|
||
* @param {number} options.itemGroupIndex - index of the ItemGroup
|
||
*/
|
||
function ItemGroup(_ref) {
|
||
var _ref$label = _ref.label,
|
||
label = _ref$label === void 0 ? '' : _ref$label,
|
||
data = _ref.data,
|
||
_ref$disabled = _ref.disabled,
|
||
disabled = _ref$disabled === void 0 ? false : _ref$disabled,
|
||
index = _ref.index,
|
||
itemGroupIndex = _ref.itemGroupIndex;
|
||
|
||
/**
|
||
* @type {HTMLElement}
|
||
* @private
|
||
*/
|
||
this.el = (0, _utils.createElement)('li', '', {
|
||
'data-group-index': itemGroupIndex
|
||
});
|
||
/**
|
||
* @type {HTMLElement}
|
||
* @private
|
||
*/
|
||
|
||
this.labelEl = (0, _utils.createElement)('span', label, {
|
||
className: _constants.cls.ITEM_GROUP_LABEL
|
||
}, this.el);
|
||
/**
|
||
* @type {HTMLElement}
|
||
* @private
|
||
*/
|
||
|
||
this.itemContainerEl = (0, _utils.createElement)('ul', '', {
|
||
className: _constants.cls.ITEM_GROUP
|
||
}, this.el);
|
||
/**
|
||
* @type {HTMLElement}
|
||
* @private
|
||
*/
|
||
|
||
this.nativeEl = (0, _utils.createElement)('optgroup', label);
|
||
/**
|
||
* @type {array<Item>}
|
||
* @private
|
||
*/
|
||
|
||
this.items = this.createItems(data, index);
|
||
/**
|
||
* @type {number}
|
||
* @private
|
||
*/
|
||
|
||
this.index = itemGroupIndex;
|
||
/**
|
||
* @type {string}
|
||
* @private
|
||
*/
|
||
|
||
this.label = label;
|
||
/**
|
||
* whether an ItemGroup is disabled or not
|
||
* @type {boolean}
|
||
* @private
|
||
*/
|
||
|
||
this.disabled = false;
|
||
this.initialize(disabled);
|
||
}
|
||
/**
|
||
* Create Items to be included in the ItemGroup
|
||
* @return {array<Item>}
|
||
* @private
|
||
*/
|
||
|
||
|
||
var _proto = ItemGroup.prototype;
|
||
|
||
_proto.createItems = function createItems(data, index) {
|
||
var _this = this;
|
||
|
||
return data.map(function (datum, itemIndex) {
|
||
var item = new _item["default"](_objectSpread({
|
||
index: index + itemIndex
|
||
}, datum));
|
||
item.appendToContainer(_this.itemContainerEl, _this.nativeEl);
|
||
return item;
|
||
});
|
||
}
|
||
/**
|
||
* Initialize
|
||
* @private
|
||
*/
|
||
;
|
||
|
||
_proto.initialize = function initialize(disabled) {
|
||
if (disabled) {
|
||
this.disable();
|
||
}
|
||
}
|
||
/**
|
||
* Disable an ItemGroup
|
||
* @ignore
|
||
*/
|
||
;
|
||
|
||
_proto.disable = function disable() {
|
||
this.disabled = this.nativeEl.disabled = true;
|
||
(0, _addClass["default"])(this.labelEl, _constants.cls.DISABLED);
|
||
this.items.forEach(function (item) {
|
||
return item.disableItemGroup();
|
||
});
|
||
}
|
||
/**
|
||
* Enable an ItemGroup
|
||
* @ignore
|
||
*/
|
||
;
|
||
|
||
_proto.enable = function enable() {
|
||
this.disabled = this.nativeEl.disabled = false;
|
||
(0, _removeClass["default"])(this.labelEl, _constants.cls.DISABLED);
|
||
this.items.forEach(function (item) {
|
||
return item.enableItemGroup();
|
||
});
|
||
}
|
||
/**
|
||
* Get {@link Item items} in the item group.
|
||
* @return {array<Item>}
|
||
* @example
|
||
* const items = itemGroup.getItems();
|
||
* console.log(items[0]); // first item in the item group
|
||
* console.log(items.length); // the number of items in the item group
|
||
*/
|
||
;
|
||
|
||
_proto.getItems = function getItems() {
|
||
return this.items;
|
||
}
|
||
/**
|
||
* Return an item group's index.
|
||
* @return {number}
|
||
*/
|
||
;
|
||
|
||
_proto.getIndex = function getIndex() {
|
||
return this.index;
|
||
}
|
||
/**
|
||
* Return an item group's label.
|
||
* @return {string}
|
||
*/
|
||
;
|
||
|
||
_proto.getLabel = function getLabel() {
|
||
return this.label;
|
||
}
|
||
/**
|
||
* Return whether an ItemGroup is disabled or not.
|
||
* @return {boolean}
|
||
*/
|
||
;
|
||
|
||
_proto.isDisabled = function isDisabled() {
|
||
return this.disabled;
|
||
}
|
||
/**
|
||
* Append the element and native element to the containers
|
||
* @param {HTMLElement} container - container element
|
||
* @param {HTMLElement} nativeContainer - native container element
|
||
* @ignore
|
||
*/
|
||
;
|
||
|
||
_proto.appendToContainer = function appendToContainer(container, nativeContainer) {
|
||
container.appendChild(this.el);
|
||
nativeContainer.appendChild(this.nativeEl);
|
||
}
|
||
/**
|
||
* Destory an ItemGroup
|
||
* @ignore
|
||
*/
|
||
;
|
||
|
||
_proto.destroy = function destroy() {
|
||
this.items.forEach(function (item) {
|
||
return item.destroy();
|
||
});
|
||
(0, _removeElement["default"])(this.el);
|
||
(0, _removeElement["default"])(this.nativeEl);
|
||
this.el = this.labelEl = this.itemContainerEl = this.nativeEl = this.items = null;
|
||
};
|
||
|
||
return ItemGroup;
|
||
}();
|
||
|
||
_exports["default"] = ItemGroup;
|
||
});
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./src/js/keyEventUtils.js":
|
||
/*!*********************************!*\
|
||
!*** ./src/js/keyEventUtils.js ***!
|
||
\*********************************/
|
||
/*! no static exports found */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function (global, factory) {
|
||
if (true) {
|
||
!(__WEBPACK_AMD_DEFINE_ARRAY__ = [exports], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
|
||
__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
|
||
(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
|
||
__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
|
||
} else { var mod; }
|
||
})(this, function (_exports) {
|
||
"use strict";
|
||
|
||
_exports.__esModule = true;
|
||
_exports.identifyKey = void 0;
|
||
|
||
/**
|
||
* @fileoverview Utility functions related to key events
|
||
* @author NHN. FE dev team.<dl_javascript@nhn.com>
|
||
*/
|
||
var keyCodeMap = {
|
||
38: 'arrowUp',
|
||
40: 'arrowDown',
|
||
32: 'space',
|
||
13: 'enter',
|
||
27: 'escape',
|
||
61: 'tab'
|
||
};
|
||
var keyMap = {
|
||
ArrowUp: 'arrowUp',
|
||
Up: 'arrowUp',
|
||
ArrowDown: 'arrowDown',
|
||
Down: 'arrowDown',
|
||
' ': 'space',
|
||
Spacebar: 'space',
|
||
Enter: 'enter',
|
||
Escape: 'escape',
|
||
Esc: 'escape',
|
||
Tab: 'tab'
|
||
};
|
||
/**
|
||
* Identify the key (polyfill for IE)
|
||
* @param {string} ev - keyboard event
|
||
* @return {string} - key
|
||
*/
|
||
|
||
var identifyKey = function identifyKey(ev) {
|
||
var key = ev.key,
|
||
keyCode = ev.keyCode;
|
||
|
||
if (key) {
|
||
return keyMap[key] || key;
|
||
}
|
||
|
||
return keyCodeMap[keyCode] || keyCode;
|
||
};
|
||
|
||
_exports.identifyKey = identifyKey;
|
||
});
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./src/js/selectBox.js":
|
||
/*!*****************************!*\
|
||
!*** ./src/js/selectBox.js ***!
|
||
\*****************************/
|
||
/*! no static exports found */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function (global, factory) {
|
||
if (true) {
|
||
!(__WEBPACK_AMD_DEFINE_ARRAY__ = [exports, __webpack_require__(/*! tui-code-snippet/customEvents/customEvents */ "./node_modules/tui-code-snippet/customEvents/customEvents.js"), __webpack_require__(/*! tui-code-snippet/domEvent/on */ "./node_modules/tui-code-snippet/domEvent/on.js"), __webpack_require__(/*! tui-code-snippet/domEvent/off */ "./node_modules/tui-code-snippet/domEvent/off.js"), __webpack_require__(/*! tui-code-snippet/domEvent/preventDefault */ "./node_modules/tui-code-snippet/domEvent/preventDefault.js"), __webpack_require__(/*! tui-code-snippet/domEvent/getTarget */ "./node_modules/tui-code-snippet/domEvent/getTarget.js"), __webpack_require__(/*! tui-code-snippet/domUtil/closest */ "./node_modules/tui-code-snippet/domUtil/closest.js"), __webpack_require__(/*! tui-code-snippet/domUtil/removeElement */ "./node_modules/tui-code-snippet/domUtil/removeElement.js"), __webpack_require__(/*! tui-code-snippet/type/isObject */ "./node_modules/tui-code-snippet/type/isObject.js"), __webpack_require__(/*! tui-code-snippet/type/isExisty */ "./node_modules/tui-code-snippet/type/isExisty.js"), __webpack_require__(/*! tui-code-snippet/type/isHTMLNode */ "./node_modules/tui-code-snippet/type/isHTMLNode.js"), __webpack_require__(/*! tui-code-snippet/request/sendHostname */ "./node_modules/tui-code-snippet/request/sendHostname.js"), __webpack_require__(/*! ./utils */ "./src/js/utils.js"), __webpack_require__(/*! ./keyEventUtils */ "./src/js/keyEventUtils.js"), __webpack_require__(/*! ./constants */ "./src/js/constants.js"), __webpack_require__(/*! ./input */ "./src/js/input.js"), __webpack_require__(/*! ./dropdown */ "./src/js/dropdown.js"), __webpack_require__(/*! ./itemGroup */ "./src/js/itemGroup.js"), __webpack_require__(/*! ./item */ "./src/js/item.js"), __webpack_require__(/*! ./theme */ "./src/js/theme.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
|
||
__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
|
||
(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
|
||
__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
|
||
} else { var mod; }
|
||
})(this, function (_exports, _customEvents, _on, _off, _preventDefault, _getTarget, _closest, _removeElement, _isObject, _isExisty, _isHTMLNode, _sendHostname, _utils, _keyEventUtils, _constants, _input, _dropdown, _itemGroup, _item, _theme) {
|
||
"use strict";
|
||
|
||
_exports.__esModule = true;
|
||
_exports["default"] = void 0;
|
||
_customEvents = _interopRequireDefault(_customEvents);
|
||
_on = _interopRequireDefault(_on);
|
||
_off = _interopRequireDefault(_off);
|
||
_preventDefault = _interopRequireDefault(_preventDefault);
|
||
_getTarget = _interopRequireDefault(_getTarget);
|
||
_closest = _interopRequireDefault(_closest);
|
||
_removeElement = _interopRequireDefault(_removeElement);
|
||
_isObject = _interopRequireDefault(_isObject);
|
||
_isExisty = _interopRequireDefault(_isExisty);
|
||
_isHTMLNode = _interopRequireDefault(_isHTMLNode);
|
||
_sendHostname = _interopRequireDefault(_sendHostname);
|
||
_input = _interopRequireDefault(_input);
|
||
_dropdown = _interopRequireDefault(_dropdown);
|
||
_itemGroup = _interopRequireDefault(_itemGroup);
|
||
_item = _interopRequireDefault(_item);
|
||
_theme = _interopRequireDefault(_theme);
|
||
|
||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
|
||
|
||
/**
|
||
* @fileoverview SelectBox
|
||
* @author NHN FE Development Lab <dl_javascript@nhn.com>
|
||
*/
|
||
|
||
/**
|
||
* @class
|
||
* @param {HTMLElement|string} container - container element or selector
|
||
* @mixes CustomEvents
|
||
* @param {object} options
|
||
* @param {array<itemData|itemGroupData>} options.data - array of {@link itemData} and {@link itemGroupData}
|
||
* @param {string} [options.placeholder] - placeholder for an input
|
||
* @param {boolean} [options.disabled] - whether an Item should be disabled or not
|
||
* @param {boolean} [options.autofocus] - whether a selectbox should get focus when the select box appends to the container
|
||
* @param {boolean} [options.autoclose] - whether a selectbox should close after selection
|
||
* @param {boolean} [options.showIcon] - whether an arrow icon in the input should be shown
|
||
* @param {object} [options.theme] - {@link themeConfig} for custom style
|
||
* @param {boolean} [options.usageStatistics] - whether send hostname to google analytics. If you don't want to send the hostname, please set to false.
|
||
* @example
|
||
* import SelectBox from '@toast-ui/select-box';
|
||
* // or const SelectBox = require('@toast-ui/select-box');
|
||
* // or const SelectBox = tui.SelectBox;
|
||
*
|
||
* const selectBox = new SelectBox('#select-box', {
|
||
* placeholder: 'Please select an option.',
|
||
* data: [
|
||
* {
|
||
* label: 'Fruits',
|
||
* data: [ { label: 'Apple', value: 'apple' }, { label: 'Banana', value: 'banana' } ]
|
||
* },
|
||
* { label: 'The quick brown fox jumps over the lazy dog.', value: 'none' },
|
||
* {
|
||
* label: 'Colors',
|
||
* data: [
|
||
* { label: 'Red', value: 'red' },
|
||
* { label: 'Yellow', value: 'yellow' },
|
||
* { label: 'Green', value: 'green', disabled: true },
|
||
* { label: 'Blue', value: 'blue', disabled: true },
|
||
* { label: 'Purple', value: 'purple' }
|
||
* ]
|
||
* }
|
||
* ],
|
||
* autofocus: true,
|
||
* showIcon: false,
|
||
* theme: {
|
||
* 'common.border': '1px solid black',
|
||
* 'common.color': 'black',
|
||
* 'item.highlighted.background': 'yellow'
|
||
* }
|
||
* });
|
||
*/
|
||
|
||
/**
|
||
* SelectBox provides some custom events: ({@link SelectBox#event-open open}, {@link SelectBox#event-close close}, {@link SelectBox#event-disable disable}, {@link SelectBox#event-enable enable}, {@link SelectBox#event-change change}).
|
||
* You can bind event handlers by {@link https://nhn.github.io/tui.code-snippet/latest/CustomEvents#on selectBox.on(eventName, handler)} and unbind by {@link https://nhn.github.io/tui.code-snippet/latest/CustomEvents#off selectBox.off(eventName, handler)}.
|
||
* Refer to the {@link https://nhn.github.io/tui.code-snippet/latest/CustomEvents CustomEvents} document at {@link https://github.com/nhn/tui.code-snippet tui-code-snippet} to know how to bind, and unbind custom events.
|
||
* The example using custom events can be found {@link tutorial-example03-custom-events here}.
|
||
* @typedef {class} CustomEvents
|
||
* @example
|
||
* // bind 'change' event
|
||
* selectBox.on('change', ev => {
|
||
* console.log(`selected item is changed from ${ev.prev.getLabel()} to ${ev.curr.getLabel()}.`);
|
||
* });
|
||
*
|
||
* // bind 'disable' and enable event
|
||
* const print = ev => {
|
||
* let target = '';
|
||
* if (ev.target instanceof SelectBox) {
|
||
* target = 'Select box';
|
||
* } else {
|
||
* target = ev.target.getLabel();
|
||
* }
|
||
* console.log(`${target} is ${ev.type}.`);
|
||
* }
|
||
* selectBox.on({
|
||
* disable: print,
|
||
* enable: print
|
||
* });
|
||
*
|
||
* // unbind change event
|
||
* selectBox.off('change');
|
||
*
|
||
* // unbind disable event
|
||
* selectBox.off(disable, print);
|
||
*
|
||
* // unbind all events
|
||
* selectBox.off();
|
||
*/
|
||
|
||
/**
|
||
* Data of an {@link Item item}.
|
||
* It is used for creating a {@link SelectBox}.
|
||
* @typedef {object} itemData - data for {@link Item item}
|
||
* @property {string} label - label to be displayed
|
||
* @property {string} value - value of an item
|
||
* @property {boolean} [disabled=false] - whether an item should be disabled or not
|
||
* @property {boolean} [selected=false] - whether an item should be pre-selected or not
|
||
* @example
|
||
* const itemData = {
|
||
* label: 'disabled item',
|
||
* value: '0',
|
||
* disabled: true,
|
||
* selected: false
|
||
* };
|
||
*/
|
||
|
||
/**
|
||
* Data of an {@link ItemGroup item group}.
|
||
* It is used for creating a {@link SelectBox}.
|
||
* ItemGroup supports only 1 level choices, so it does not work to add item groups in the item group.
|
||
* The example using item groups can be found {@link tutorial-example01-basic here}.
|
||
* @typedef {object} itemGroupData - data for {@link ItemGroup item group}
|
||
* @property {string} label - label to be displayed
|
||
* @property {array} data - {@link itemData data for item}
|
||
* @property {boolean} [disabled=false] - whether an item group should be disabled or not
|
||
* @example
|
||
* const itemGroupData = {
|
||
* label: 'disabled items',
|
||
* data: [
|
||
* { label: 'disable', value: 'disable' },
|
||
* { label: 'none', value: '0' }
|
||
* ],
|
||
* disabled: true
|
||
* };
|
||
*/
|
||
var SelectBox =
|
||
/*#__PURE__*/
|
||
function () {
|
||
function SelectBox(container, _ref) {
|
||
var data = _ref.data,
|
||
_ref$placeholder = _ref.placeholder,
|
||
placeholder = _ref$placeholder === void 0 ? '' : _ref$placeholder,
|
||
_ref$disabled = _ref.disabled,
|
||
disabled = _ref$disabled === void 0 ? false : _ref$disabled,
|
||
_ref$autofocus = _ref.autofocus,
|
||
autofocus = _ref$autofocus === void 0 ? false : _ref$autofocus,
|
||
_ref$autoclose = _ref.autoclose,
|
||
autoclose = _ref$autoclose === void 0 ? true : _ref$autoclose,
|
||
_ref$showIcon = _ref.showIcon,
|
||
showIcon = _ref$showIcon === void 0 ? true : _ref$showIcon,
|
||
theme = _ref.theme,
|
||
_ref$usageStatistics = _ref.usageStatistics,
|
||
usageStatistics = _ref$usageStatistics === void 0 ? true : _ref$usageStatistics;
|
||
|
||
/**
|
||
* @type {HTMLElement}
|
||
* @private
|
||
*/
|
||
this.el = (0, _utils.createElement)('div', '', {
|
||
className: _constants.cls.SELECT_BOX
|
||
});
|
||
/**
|
||
* @type {Input}
|
||
* @private
|
||
*/
|
||
|
||
this.input = new _input["default"]({
|
||
placeholder: placeholder,
|
||
disabled: disabled,
|
||
showIcon: showIcon
|
||
});
|
||
/**
|
||
* @type {Dropdown}
|
||
* @private
|
||
*/
|
||
|
||
this.dropdown = new _dropdown["default"]({
|
||
placeholder: placeholder,
|
||
disabled: disabled,
|
||
data: data
|
||
});
|
||
/**
|
||
* @type {boolean}
|
||
* @private
|
||
*/
|
||
|
||
this.opened = false;
|
||
/**
|
||
* @type {boolean}
|
||
* @private
|
||
*/
|
||
|
||
this.diabled = false;
|
||
/**
|
||
* @type {boolean}
|
||
*/
|
||
|
||
this.autoclose = autoclose;
|
||
/**
|
||
* @type {Theme}
|
||
* @private
|
||
*/
|
||
|
||
this.theme = (0, _isObject["default"])(theme) ? new _theme["default"](theme, container) : null;
|
||
this.initialize({
|
||
placeholder: placeholder,
|
||
disabled: disabled
|
||
});
|
||
this.appendToContainer(container);
|
||
|
||
if (autofocus) {
|
||
this.input.focus();
|
||
}
|
||
|
||
if (usageStatistics) {
|
||
(0, _sendHostname["default"])('select-box', 'UA-129987462-1');
|
||
}
|
||
}
|
||
/**
|
||
* Append the select box element to the container
|
||
* @param {HTMLElement|string} container - container element or selector
|
||
* @private
|
||
*/
|
||
|
||
|
||
var _proto = SelectBox.prototype;
|
||
|
||
_proto.appendToContainer = function appendToContainer(container) {
|
||
var containerEl = (0, _isHTMLNode["default"])(container) ? container : document.querySelector(container);
|
||
containerEl.appendChild(this.el);
|
||
}
|
||
/**
|
||
* Initialize
|
||
* @param {object} options - options
|
||
* @private
|
||
*/
|
||
;
|
||
|
||
_proto.initialize = function initialize(options) {
|
||
var selectedItem = this.getSelectedItem();
|
||
|
||
if (selectedItem) {
|
||
this.input.changeText(selectedItem);
|
||
} else if (!options.placeholder) {
|
||
this.select(0);
|
||
}
|
||
|
||
if (options.disabled) {
|
||
this.disable();
|
||
}
|
||
|
||
this.bindEvents();
|
||
this.input.appendToContainer(this.el);
|
||
this.dropdown.appendToContainer(this.el);
|
||
}
|
||
/**
|
||
* Bind events
|
||
* @private
|
||
*/
|
||
;
|
||
|
||
_proto.bindEvents = function bindEvents() {
|
||
var _this = this;
|
||
|
||
(0, _on["default"])(document, 'click', function (ev) {
|
||
var target = (0, _getTarget["default"])(ev);
|
||
|
||
if (!(0, _closest["default"])(target, "." + _constants.cls.SELECT_BOX) && _this.opened) {
|
||
_this.close();
|
||
}
|
||
}, this);
|
||
(0, _on["default"])(this.el, 'click', function (ev) {
|
||
return _this.handleClick(ev, _constants.cls);
|
||
});
|
||
(0, _on["default"])(this.el, 'mouseover', function (ev) {
|
||
return _this.handleMouseover(ev, _constants.cls);
|
||
});
|
||
(0, _on["default"])(this.el, 'keydown', function (ev) {
|
||
return _this.handleKeydown(ev, _constants.cls);
|
||
});
|
||
}
|
||
/**
|
||
* Unbind events
|
||
* @private
|
||
*/
|
||
;
|
||
|
||
_proto.unbindEvents = function unbindEvents() {
|
||
(0, _off["default"])(document, 'click');
|
||
(0, _off["default"])(this.el, 'click mouseover keydown');
|
||
}
|
||
/**
|
||
* Handle click events
|
||
* @param {Event} ev - an event
|
||
* @param {object} cls - cls
|
||
* @private
|
||
*/
|
||
;
|
||
|
||
_proto.handleClick = function handleClick(ev, _ref2) {
|
||
var INPUT = _ref2.INPUT,
|
||
ITEM = _ref2.ITEM;
|
||
var target = (0, _getTarget["default"])(ev);
|
||
var itemEl = (0, _closest["default"])(target, "." + ITEM);
|
||
|
||
if (itemEl) {
|
||
this.select(itemEl.getAttribute('data-value'));
|
||
} else if ((0, _closest["default"])(target, "." + INPUT)) {
|
||
this.toggle();
|
||
}
|
||
}
|
||
/**
|
||
* Handle mouseover events
|
||
* @param {Event} ev - an event
|
||
* @param {object} cls - cls
|
||
* @private
|
||
*/
|
||
;
|
||
|
||
_proto.handleMouseover = function handleMouseover(ev, _ref3) {
|
||
var ITEM = _ref3.ITEM;
|
||
|
||
if (this.checkMousemove(ev.clientX, ev.clientY)) {
|
||
var target = (0, _getTarget["default"])(ev);
|
||
var itemEl = (0, _closest["default"])(target, "." + ITEM);
|
||
|
||
if (itemEl) {
|
||
this.dropdown.highlight(itemEl.getAttribute('data-value'));
|
||
}
|
||
}
|
||
}
|
||
/**
|
||
* Check if a pointer is moved
|
||
* @param {number} x - mouseEvent.clientX
|
||
* @param {number} y - mouseEvent.clientY
|
||
* @return {boolean}
|
||
* @private
|
||
*/
|
||
;
|
||
|
||
_proto.checkMousemove = function checkMousemove(x, y) {
|
||
if (this.prevX !== x || this.prevY !== y) {
|
||
this.prevX = x;
|
||
this.prevY = y;
|
||
return true;
|
||
}
|
||
|
||
return false;
|
||
}
|
||
/**
|
||
* Handle keydown events
|
||
* @param {Event} ev - an event
|
||
* @param {object} classNames - cls
|
||
* @private
|
||
*/
|
||
;
|
||
|
||
_proto.handleKeydown = function handleKeydown(ev, classNames) {
|
||
var key = (0, _keyEventUtils.identifyKey)(ev);
|
||
var closeKeys = ['tab', 'escape'];
|
||
var activeKeys = ['arrowUp', 'arrowDown', 'space', 'enter'];
|
||
|
||
if (closeKeys.indexOf(key) > -1 && this.opened) {
|
||
this.close();
|
||
|
||
if (key === 'escape') {
|
||
this.input.focus();
|
||
}
|
||
} else if (activeKeys.indexOf(key) > -1) {
|
||
(0, _preventDefault["default"])(ev);
|
||
this.activateKeydown(ev, key, classNames);
|
||
}
|
||
}
|
||
/**
|
||
* Activate keydown events
|
||
* @param {Event} ev - an event
|
||
* @param {string} key - key pressed
|
||
* @param {object} classNames - cls
|
||
* @private
|
||
*/
|
||
;
|
||
|
||
_proto.activateKeydown = function activateKeydown(ev, key, _ref4) {
|
||
var ITEM = _ref4.ITEM,
|
||
INPUT = _ref4.INPUT;
|
||
var target = (0, _getTarget["default"])(ev);
|
||
var itemEl = (0, _closest["default"])(target, "." + ITEM);
|
||
|
||
if (key === 'escape' && this.opened) {
|
||
this.close();
|
||
this.input.focus();
|
||
} else if (itemEl) {
|
||
this.pressKeyOnItem(key, itemEl);
|
||
} else if ((0, _closest["default"])(target, "." + INPUT)) {
|
||
this.pressKeyOnInput(key);
|
||
}
|
||
}
|
||
/**
|
||
* Handle keydown events when it occurs on the Input
|
||
* @param {string} key - key
|
||
* @private
|
||
*/
|
||
;
|
||
|
||
_proto.pressKeyOnInput = function pressKeyOnInput(key) {
|
||
if (!this.opened) {
|
||
this.open();
|
||
} else if (key === 'arrowUp' || key === 'arrowDown') {
|
||
this.dropdown.moveHighlightedItem(key === 'arrowUp' ? -1 : 1);
|
||
}
|
||
}
|
||
/**
|
||
* Handle keydown events when it occurs on the Item
|
||
* @param {string} key - key
|
||
* @param {HTMLElement} itemEl - Item.el
|
||
* @private
|
||
*/
|
||
;
|
||
|
||
_proto.pressKeyOnItem = function pressKeyOnItem(key, itemEl) {
|
||
if (key === 'enter' || key === 'space') {
|
||
this.selectByKeydown(itemEl);
|
||
} else if (key === 'arrowUp' || key === 'arrowDown') {
|
||
this.dropdown.moveHighlightedItem(key === 'arrowUp' ? -1 : 1);
|
||
}
|
||
}
|
||
/**
|
||
* Select an Item by space or enter
|
||
* @param {HTMLElement} itemEl - Item.el
|
||
* @private
|
||
*/
|
||
;
|
||
|
||
_proto.selectByKeydown = function selectByKeydown(itemEl) {
|
||
this.select(itemEl.getAttribute('data-value'));
|
||
this.close();
|
||
this.input.focus();
|
||
}
|
||
/**
|
||
* Disable a select box, {@link ItemGroup item group} or {@link Item item}.
|
||
* If it takes no arguments, a select box is disabled.
|
||
* If it takes string, an item with the same value as the argument is disabled.
|
||
* If it takes number, an item with the same index as the argument is disabled.
|
||
* If it takes Item or ItemGroup, an argument itself is disabled.
|
||
* @param {string|number|Item|ItemGroup} value - if string, find an Item by its value. if number, find an Item by its index.
|
||
* @example
|
||
* selectBox.disable(); // select box is disabled.
|
||
* selectBox.disable(1); // second item is disabled.
|
||
* selectBox.disable('value') // item which of value is 'value' is disabled.
|
||
* selectBox.disable(selectBox.getSelectedItem()); // selected item is disabled.
|
||
*/
|
||
;
|
||
|
||
_proto.disable = function disable(value) {
|
||
if (!(0, _isExisty["default"])(value)) {
|
||
this.disabled = true;
|
||
this.input.disable();
|
||
this.dropdown.disable();
|
||
/**
|
||
* Occurs when a select box, {@link ItemGroup item group} or {@link Item item} is disabled.
|
||
* @event SelectBox#disable
|
||
* @type {object} ev
|
||
* @property {string} type - event name ('disable')
|
||
* @property {SelectBox|ItemGroup|Item} target - disabled target
|
||
* @example
|
||
* selectBox.on('disable', ev => {
|
||
* console.log(ev.target);
|
||
* });
|
||
*/
|
||
|
||
this.fire('disable', {
|
||
type: 'disable',
|
||
target: this
|
||
});
|
||
} else if (value instanceof _item["default"] || value instanceof _itemGroup["default"]) {
|
||
value.disable();
|
||
this.fire('disable', {
|
||
type: 'disable',
|
||
target: value
|
||
});
|
||
} else {
|
||
var disabledItem = this.dropdown.getItem(value);
|
||
|
||
if (disabledItem) {
|
||
disabledItem.disable();
|
||
this.fire('disable', {
|
||
type: 'disable',
|
||
target: disabledItem
|
||
});
|
||
}
|
||
}
|
||
}
|
||
/**
|
||
* Enable a select box, {@link ItemGroup item group} or {@link Item item}.
|
||
* If it takes no arguments, a select box is enabled.
|
||
* If it takes string, an item with the same value as the argument is enabled.
|
||
* If it takes number, an item with the same index as the argument is enabled.
|
||
* If it takes Item or ItemGroup, an argument itself is enabled.
|
||
* @param {string|number|Item|ItemGroup} value - if string, find an Item by its value. if number, find an Item by its index.
|
||
* @example
|
||
* selectBox.enable(); // select box is enabled.
|
||
* selectBox.enable(1); // second item is enabled.
|
||
* selectBox.enable('value') // item which of value is 'value' is enabled.
|
||
* selectBox.enable(selectBox.getSelectedItem()); // selected item is enabled.
|
||
*/
|
||
;
|
||
|
||
_proto.enable = function enable(value) {
|
||
if (!(0, _isExisty["default"])(value)) {
|
||
this.disabled = false;
|
||
this.input.enable();
|
||
this.dropdown.enable();
|
||
/**
|
||
* Occurs when a select box, {@link ItemGroup item group} or {@link Item item} is enabled.
|
||
* @event SelectBox#enable
|
||
* @type {object} ev
|
||
* @property {string} type - event name ('enable')
|
||
* @property {SelectBox|ItemGroup|Item} target - enable target
|
||
* @example
|
||
* selectBox.on('enable', ev => {
|
||
* console.log(ev.target);
|
||
* });
|
||
*/
|
||
|
||
this.fire('enable', {
|
||
type: 'enable',
|
||
target: this
|
||
});
|
||
} else if (value instanceof _item["default"] || value instanceof _itemGroup["default"]) {
|
||
value.enable();
|
||
this.fire('enable', {
|
||
type: 'enable',
|
||
target: value
|
||
});
|
||
} else {
|
||
var disabledItem = this.dropdown.getItem(value);
|
||
|
||
if (disabledItem) {
|
||
disabledItem.enable();
|
||
this.fire('enable', {
|
||
type: 'enable',
|
||
target: disabledItem
|
||
});
|
||
}
|
||
}
|
||
}
|
||
/**
|
||
* Open a dropdown list.
|
||
* @example
|
||
* selectBox.open();
|
||
*/
|
||
;
|
||
|
||
_proto.open = function open() {
|
||
if (!this.disabled) {
|
||
this.opened = true;
|
||
this.dropdown.open();
|
||
this.input.open();
|
||
/**
|
||
* Occurs when a select box opens.
|
||
* @event SelectBox#open
|
||
* @property {string} type - event name ('open')
|
||
* @example
|
||
* selectBox.on('open', ev => {
|
||
* console.log('open');
|
||
* });
|
||
*/
|
||
|
||
this.fire('open', {
|
||
type: 'open'
|
||
});
|
||
}
|
||
}
|
||
/**
|
||
* Close a dropdown list.
|
||
* @example
|
||
* selectBox.close();
|
||
*/
|
||
;
|
||
|
||
_proto.close = function close() {
|
||
this.opened = false;
|
||
this.dropdown.close();
|
||
this.input.close();
|
||
/**
|
||
* Occurs when a select box closes.
|
||
* @event SelectBox#close
|
||
* @property {string} type - event name ('close')
|
||
* @example
|
||
* selectBox.on('close', ev => {
|
||
* console.log('close');
|
||
* });
|
||
*/
|
||
|
||
this.fire('close', {
|
||
type: 'close'
|
||
});
|
||
}
|
||
/**
|
||
* Toggle a dropdown list.
|
||
* @example
|
||
* selectBox.toggle();
|
||
*/
|
||
;
|
||
|
||
_proto.toggle = function toggle() {
|
||
if (this.opened) {
|
||
this.close();
|
||
} else {
|
||
this.open();
|
||
}
|
||
}
|
||
/**
|
||
* Select an {@link Item item}.
|
||
* If it takes string, an item with the same value as the argument is selected.
|
||
* If it takes number, an item with the same index as the argument is selected.
|
||
* If it takes Item, an argument itself is selected.
|
||
* @param {string|number|Item} value - if string, find an Item by its value. if number, find an Item by its index.
|
||
* @return {Item} - selected Item.
|
||
* @example
|
||
* selectBox.select(1); // second item is selected.
|
||
* selectBox.select('value') // item which of value is 'value' is selected.
|
||
*/
|
||
;
|
||
|
||
_proto.select = function select(value) {
|
||
var selectedItem = null;
|
||
var prevSelectedItem = this.getSelectedItem();
|
||
|
||
if (!this.disabled) {
|
||
selectedItem = this.dropdown.select(value);
|
||
|
||
if (selectedItem) {
|
||
this.input.changeText(selectedItem);
|
||
/**
|
||
* Occurs when an {@link Item item} is selected.
|
||
* @event SelectBox#select
|
||
* @type {object} ev
|
||
* @property {string} type - event name ('select')
|
||
* @property {Item} target - selected item
|
||
* @ignore
|
||
* @example
|
||
* selectBox.on('select', ev => {
|
||
* console.log(`${ev.target.getLabel()} is selected.`);
|
||
* });
|
||
*/
|
||
|
||
this.fire('select', {
|
||
type: 'select',
|
||
target: selectedItem
|
||
});
|
||
|
||
if (prevSelectedItem !== selectedItem) {
|
||
/**
|
||
* Occurs when a selected {@link Item item} is changed.
|
||
* @event SelectBox#change
|
||
* @type {object} ev
|
||
* @property {string} type - event name ('change')
|
||
* @property {Item} prev - previous selected item
|
||
* @property {Item} curr - current selected item
|
||
* @example
|
||
* selectBox.on('change', ev => {
|
||
* console.log(`selected item is changed from ${ev.prev.getLabel()} to ${ev.curr.getLabel()}.`);
|
||
* });
|
||
*/
|
||
this.fire('change', {
|
||
type: 'change',
|
||
prev: prevSelectedItem,
|
||
curr: selectedItem
|
||
});
|
||
}
|
||
|
||
if (this.autoclose && this.opened) {
|
||
this.close();
|
||
}
|
||
}
|
||
}
|
||
|
||
return selectedItem;
|
||
}
|
||
/**
|
||
* Deselect an item.
|
||
* If selectBox has a placeholder, the input's text is a placeholder.
|
||
* If no placeholder, ths input is empty.
|
||
* @example
|
||
* selectBox.deselect();
|
||
*/
|
||
;
|
||
|
||
_proto.deselect = function deselect() {
|
||
if (!this.disabled) {
|
||
this.dropdown.deselect();
|
||
this.input.changeText();
|
||
}
|
||
}
|
||
/**
|
||
* Return the selected {@link Item item}.
|
||
* @return {Item}
|
||
*/
|
||
;
|
||
|
||
_proto.getSelectedItem = function getSelectedItem() {
|
||
return this.dropdown.getSelectedItem();
|
||
}
|
||
/**
|
||
* Get all {@link Item items} that pass the test implemented by the provided function.
|
||
* If filter function is not passed, it returns all items.
|
||
* @param {function} callback - callback function to filter items
|
||
* @param {number} number - the number of items to find. If it is not passed, iterate all items.
|
||
* @return {array<Item>}
|
||
* @example
|
||
* selectBox.getItems(); // all items
|
||
* selectBox.getItems(item => {
|
||
* return !item.isDisabled();
|
||
* }); // all enabled items
|
||
*/
|
||
;
|
||
|
||
_proto.getItems = function getItems(callback, number) {
|
||
return this.dropdown.getItems(callback, number);
|
||
}
|
||
/**
|
||
* Get an {@link Item item} by its index or value.
|
||
* @param {number|string} value - if string, the Item's value. if number, the Item's index.
|
||
* @return {Item}
|
||
* @example
|
||
* selectBox.getItem(0); // first item
|
||
* selectBox.getItem('value') // item which of value is 'value'
|
||
*/
|
||
;
|
||
|
||
_proto.getItem = function getItem(value) {
|
||
return this.dropdown.getItem(value);
|
||
}
|
||
/**
|
||
* Get all {@link ItemGroup item groups} that pass the test implemented by the provided function.
|
||
* If filter function is not passed, it returns all item groups.
|
||
* @param {function} callback - callback function to filter item groups
|
||
* @param {number} number - the number of items to find. If it is not passed, iterate all item groups.
|
||
* @return {array<ItemGroup>}
|
||
* @example
|
||
* selectBox.getItemGroups(); // all item groups
|
||
* selectBox.getItemGroups(itemGroup => {
|
||
* return !itemGroup.isDisabled();
|
||
* }); // all enabled item groups
|
||
*/
|
||
;
|
||
|
||
_proto.getItemGroups = function getItemGroups(callback, number) {
|
||
return this.dropdown.getItemGroups(callback, number);
|
||
}
|
||
/**
|
||
* Get an {@link ItemGroup item group} by its index.
|
||
* @param {number} index - groupIndex of the ItemGroup
|
||
* @return {ItemGroup}
|
||
* @example
|
||
* selectBox.getItemGroup(0); // first item group
|
||
*/
|
||
;
|
||
|
||
_proto.getItemGroup = function getItemGroup(index) {
|
||
return this.dropdown.getItemGroup(index);
|
||
}
|
||
/**
|
||
* Destory a select box.
|
||
* @example
|
||
* selectBox.destroy();
|
||
*/
|
||
;
|
||
|
||
_proto.destroy = function destroy() {
|
||
this.unbindEvents();
|
||
this.input.destroy();
|
||
this.dropdown.destroy();
|
||
|
||
if (this.theme) {
|
||
this.theme.destroy();
|
||
}
|
||
|
||
(0, _removeElement["default"])(this.el);
|
||
this.container = this.el = this.input = this.dropdown = this.theme = null;
|
||
};
|
||
|
||
return SelectBox;
|
||
}();
|
||
|
||
_customEvents["default"].mixin(SelectBox);
|
||
|
||
var _default = SelectBox;
|
||
_exports["default"] = _default;
|
||
});
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./src/js/theme.js":
|
||
/*!*************************!*\
|
||
!*** ./src/js/theme.js ***!
|
||
\*************************/
|
||
/*! no static exports found */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function (global, factory) {
|
||
if (true) {
|
||
!(__WEBPACK_AMD_DEFINE_ARRAY__ = [exports, __webpack_require__(/*! tui-code-snippet/collection/forEachOwnProperties */ "./node_modules/tui-code-snippet/collection/forEachOwnProperties.js"), __webpack_require__(/*! tui-code-snippet/domUtil/removeElement */ "./node_modules/tui-code-snippet/domUtil/removeElement.js"), __webpack_require__(/*! tui-code-snippet/type/isArray */ "./node_modules/tui-code-snippet/type/isArray.js"), __webpack_require__(/*! tui-code-snippet/type/isBoolean */ "./node_modules/tui-code-snippet/type/isBoolean.js"), __webpack_require__(/*! tui-code-snippet/type/isString */ "./node_modules/tui-code-snippet/type/isString.js"), __webpack_require__(/*! ./utils */ "./src/js/utils.js"), __webpack_require__(/*! ./constants */ "./src/js/constants.js"), __webpack_require__(/*! ./themeConfig */ "./src/js/themeConfig.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
|
||
__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
|
||
(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
|
||
__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
|
||
} else { var mod; }
|
||
})(this, function (_exports, _forEachOwnProperties, _removeElement, _isArray, _isBoolean, _isString, _utils, _constants, _themeConfig) {
|
||
"use strict";
|
||
|
||
_exports.__esModule = true;
|
||
_exports["default"] = void 0;
|
||
_forEachOwnProperties = _interopRequireDefault(_forEachOwnProperties);
|
||
_removeElement = _interopRequireDefault(_removeElement);
|
||
_isArray = _interopRequireDefault(_isArray);
|
||
_isBoolean = _interopRequireDefault(_isBoolean);
|
||
_isString = _interopRequireDefault(_isString);
|
||
_themeConfig = _interopRequireDefault(_themeConfig);
|
||
|
||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
|
||
|
||
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
|
||
|
||
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(source, true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(source).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
|
||
|
||
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
||
|
||
/**
|
||
* @class
|
||
* @ignore
|
||
* @param {object} customTheme - theme object for custom style
|
||
* @param {HTMLElement|string} container - container element or selector
|
||
*/
|
||
var Theme =
|
||
/*#__PURE__*/
|
||
function () {
|
||
function Theme(customTheme, container) {
|
||
this.containerSelector = (0, _utils.getSelector)(container);
|
||
this.cssString = this.buildAll((0, _utils.transform)(customTheme));
|
||
this.styleEl = this.createStyleElement();
|
||
document.getElementsByTagName('head')[0].appendChild(this.styleEl);
|
||
}
|
||
/**
|
||
* Create a style element
|
||
* @return {HTMLElement}
|
||
* @private
|
||
*/
|
||
|
||
|
||
var _proto = Theme.prototype;
|
||
|
||
_proto.createStyleElement = function createStyleElement() {
|
||
var styleEl = document.createElement('style');
|
||
styleEl.type = 'text/css';
|
||
|
||
if (styleEl.styleSheet) {
|
||
styleEl.styleSheet.cssText = this.cssString;
|
||
} else {
|
||
styleEl.appendChild(document.createTextNode(this.cssString));
|
||
}
|
||
|
||
return styleEl;
|
||
}
|
||
/**
|
||
* Build css strings for Input, Dropdown, ItemGroup, and Item.
|
||
* @param {object} theme - theme object
|
||
* @return {string}
|
||
* @private
|
||
*/
|
||
;
|
||
|
||
_proto.buildAll = function buildAll(theme) {
|
||
var exclude = {
|
||
border: '',
|
||
background: ''
|
||
};
|
||
return this.buildInput(_objectSpread({}, theme.common, {}, theme.input)) + this.buildDropdown(_objectSpread({}, theme.common, {
|
||
borderTop: '0'
|
||
}, theme.dropdown, {
|
||
height: ''
|
||
})) + this.buildItemGroup(theme.itemGroup ? _objectSpread({}, theme.common, {}, exclude, {}, theme.itemGroup.label) : _objectSpread({}, theme.common, {}, exclude)) + this.buildItem(theme.itemGroup ? _objectSpread({}, theme.common, {}, exclude, {}, theme.item, {
|
||
inItemGroup: theme.itemGroup.items
|
||
}) : _objectSpread({}, theme.common, {}, exclude, {}, theme.item));
|
||
}
|
||
/**
|
||
* Build css strings for Input
|
||
* @param {object} theme - theme object
|
||
* @return {string}
|
||
* @private
|
||
*/
|
||
;
|
||
|
||
_proto.buildInput = function buildInput(theme) {
|
||
theme.placeholder = {};
|
||
|
||
if (theme.height) {
|
||
theme.placeholder.lineHeight = theme.height;
|
||
}
|
||
|
||
if ((0, _isBoolean["default"])(theme.showIcon) && !theme.showIcon) {
|
||
theme.icon = {
|
||
display: 'none'
|
||
};
|
||
theme.placeholder.width = '100%';
|
||
}
|
||
|
||
return this.buildCssString(_constants.cls.INPUT, theme) + this.buildCssString([_constants.cls.INPUT, _constants.cls.OPEN], theme.open) + this.buildCssString([_constants.cls.INPUT, _constants.cls.DISABLED], theme.disabled) + this.buildCssString(_constants.cls.PLACEHOLDER, theme.placeholder) + this.buildCssString(_constants.cls.ICON, theme.icon);
|
||
}
|
||
/**
|
||
* Build css strings for Dropdown
|
||
* @param {object} theme - theme object
|
||
* @return {string}
|
||
* @private
|
||
*/
|
||
;
|
||
|
||
_proto.buildDropdown = function buildDropdown(theme) {
|
||
return this.buildCssString(_constants.cls.DROPDOWN, theme);
|
||
}
|
||
/**
|
||
* Build css strings for ItemGroup
|
||
* @param {object} theme - theme object
|
||
* @return {string}
|
||
* @private
|
||
*/
|
||
;
|
||
|
||
_proto.buildItemGroup = function buildItemGroup(theme) {
|
||
if (theme.height) {
|
||
theme.lineHeight = theme.height;
|
||
}
|
||
|
||
return this.buildCssString(_constants.cls.ITEM_GROUP_LABEL, theme) + this.buildCssString([_constants.cls.ITEM_GROUP_LABEL, _constants.cls.DISABLED], theme.disabled);
|
||
}
|
||
/**
|
||
* Build css strings for Item
|
||
* @param {object} theme - theme object
|
||
* @return {string}
|
||
* @private
|
||
*/
|
||
;
|
||
|
||
_proto.buildItem = function buildItem(theme) {
|
||
if (theme.height) {
|
||
theme.lineHeight = theme.height;
|
||
}
|
||
|
||
if (theme.selected) {
|
||
var base = (0, _utils.transform)(_themeConfig["default"]);
|
||
theme.selected = _objectSpread({}, base.item.selected, {}, theme.selected);
|
||
theme.disabled = _objectSpread({}, base.item.disabled, {}, theme.disabled);
|
||
theme.highlighted = _objectSpread({}, base.item.highlighted, {}, theme.highlighted);
|
||
}
|
||
|
||
return this.buildCssString(_constants.cls.ITEM, theme) + this.buildCssString([_constants.cls.ITEM, _constants.cls.SELECTED], theme.selected) + this.buildCssString([_constants.cls.ITEM, _constants.cls.DISABLED], theme.disabled) + this.buildCssString([_constants.cls.ITEM, _constants.cls.HIGHLIGHT], theme.highlighted) + this.buildCssString(_constants.cls.ITEM_GROUP + ">." + _constants.cls.ITEM, theme.inItemGroup);
|
||
}
|
||
/**
|
||
* Build css strings
|
||
* @param {string} className - className
|
||
* @param {object} theme - theme object
|
||
* @return {string}
|
||
* @private
|
||
*/
|
||
;
|
||
|
||
_proto.buildCssString = function buildCssString(className, theme) {
|
||
if ((0, _isArray["default"])(className)) {
|
||
className = className.join('.');
|
||
}
|
||
|
||
className = "." + className;
|
||
var cssString = '';
|
||
(0, _forEachOwnProperties["default"])(theme, function (value, key) {
|
||
if ((0, _isString["default"])(value) && value) {
|
||
key = key.replace(/([a-z0-9])([A-Z])/g, '$1-$2').toLowerCase();
|
||
cssString += key + ":" + value + ";";
|
||
}
|
||
});
|
||
return cssString ? this.containerSelector + " " + className + "{" + cssString + "}" : '';
|
||
}
|
||
/**
|
||
* Destory a theme
|
||
*/
|
||
;
|
||
|
||
_proto.destroy = function destroy() {
|
||
(0, _removeElement["default"])(this.styleEl);
|
||
this.styleEl = null;
|
||
};
|
||
|
||
return Theme;
|
||
}();
|
||
|
||
_exports["default"] = Theme;
|
||
});
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./src/js/themeConfig.js":
|
||
/*!*******************************!*\
|
||
!*** ./src/js/themeConfig.js ***!
|
||
\*******************************/
|
||
/*! no static exports found */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function (global, factory) {
|
||
if (true) {
|
||
!(__WEBPACK_AMD_DEFINE_ARRAY__ = [exports], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
|
||
__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
|
||
(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
|
||
__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
|
||
} else { var mod; }
|
||
})(this, function (_exports) {
|
||
"use strict";
|
||
|
||
_exports.__esModule = true;
|
||
_exports["default"] = void 0;
|
||
|
||
/**
|
||
* @fileoverview Theme configuration
|
||
* @author NHN FE Development Lab <dl_javascript@nhn.com>
|
||
*/
|
||
|
||
/**
|
||
* Theme configuration.
|
||
* "common" prefix is for the entire select box. Its properties are overriden by "input", "dropdown", "itemGroup", and "item".
|
||
* The example using theme can be found {@link tutorial-example02-theme here}.
|
||
* @typedef {object} themeConfig
|
||
* @example
|
||
* const themeConfig = {
|
||
* 'common.border': '1px solid #ddd', // border for input and dropdown (not itemGroup and item)
|
||
* 'common.background': '#fff',
|
||
* 'common.color': '#333',
|
||
* 'common.width': '100%',
|
||
* 'common.height': '29px', // height for item and itemGroup label (not entire select box)
|
||
*
|
||
* 'common.disabled.background': '#f9f9f9',
|
||
* 'common.disabled.color': 'c8c8c8',
|
||
*
|
||
* // Input
|
||
* 'input.border': '1px solid #ddd',
|
||
* 'input.borderBottom': '',
|
||
* 'input.background': 'inherit',
|
||
* 'input.color': '#333',
|
||
* 'input.width': '100%',
|
||
* 'input.height': '29px',
|
||
*
|
||
* // Input when dropdown is open
|
||
* 'input.open.border': '1px solid #aaa',
|
||
* 'input.open.background': 'inherit',
|
||
* 'input.open.color': '#333',
|
||
*
|
||
* // Input when selectbox is disabled
|
||
* 'input.disabled.border': '1px solid #aaa',
|
||
* 'input.disabled.background': '#f9f9f9',
|
||
* 'input.disabled.color': '#c8c8c8',
|
||
*
|
||
* // Dropdown
|
||
* 'dropdown.border': '1px solid #aaa',
|
||
* 'dropdown.borderTop': '0',
|
||
* 'dropdown.background': 'inherit',
|
||
* 'dropdown.width': '100%',
|
||
* 'dropdown.maxHeight': '',
|
||
*
|
||
* // ItemGroup's items
|
||
* // if you want to set the same padding value as the itemGroup.label, set to '8px'.
|
||
* 'itemGroup.items.paddingLeft': '20px',
|
||
*
|
||
* // ItemGroup's label
|
||
* 'itemGroup.label.border': '0',
|
||
* 'itemGroup.label.background': 'inherit',
|
||
* 'itemGroup.label.color': '#333',
|
||
* 'itemGroup.label.fontWeight': 'bold',
|
||
* 'itemGroup.label.height': '29px',
|
||
*
|
||
* // disabled ItemGroup's label
|
||
* 'itemGroup.label.disabled.border': '0',
|
||
* 'itemGroup.label.disabled.background': 'inherit',
|
||
* 'itemGroup.label.disabled.color': '#333',
|
||
*
|
||
* // Item
|
||
* 'item.border': '0',
|
||
* 'item.background': 'inherit',
|
||
* 'item.color': '#333',
|
||
* 'item.height': '29px',
|
||
*
|
||
* // selected Item
|
||
* 'item.selected.border': '0',
|
||
* 'item.selected.background': '#f4f4f4',
|
||
* 'item.selected.color': '#333',
|
||
*
|
||
* // disabled Item
|
||
* 'item.disabled.border': '0',
|
||
* 'item.disabled.background': '#f9f9f9',
|
||
* 'item.disabled.color': '#c8c8c8',
|
||
*
|
||
* // highlighted Item
|
||
* 'item.highlighted.border': '0',
|
||
* 'item.highlighted.background': '#e5f6ff',
|
||
* 'item.highlighted.color': '#333'
|
||
* };
|
||
*/
|
||
var _default = {
|
||
'common.border': '1px solid #ddd',
|
||
// border for input and dropdown (not itemGroup and item)
|
||
'common.background': '#fff',
|
||
'common.color': '#333',
|
||
'common.width': '100%',
|
||
'common.height': '29px',
|
||
// height for item and itemGroup label (not entire select box)
|
||
'common.disabled.background': '#f9f9f9',
|
||
'common.disabled.color': 'c8c8c8',
|
||
// Input
|
||
'input.border': '1px solid #ddd',
|
||
'input.borderBottom': '',
|
||
'input.background': 'inherit',
|
||
'input.color': '#333',
|
||
'input.width': '100%',
|
||
'input.height': '29px',
|
||
// Input when dropdown is open
|
||
'input.open.border': '1px solid #aaa',
|
||
'input.open.background': 'inherit',
|
||
'input.open.color': '#333',
|
||
// Input when selectbox is disabled
|
||
'input.disabled.border': '1px solid #aaa',
|
||
'input.disabled.background': '#f9f9f9',
|
||
'input.disabled.color': '#c8c8c8',
|
||
// Dropdown
|
||
'dropdown.border': '1px solid #aaa',
|
||
'dropdown.borderTop': '0',
|
||
'dropdown.background': 'inherit',
|
||
'dropdown.width': '100%',
|
||
'dropdown.maxHeight': '',
|
||
// ItemGroup's items
|
||
'itemGroup.items.paddingLeft': '20px',
|
||
// ItemGroup's label
|
||
'itemGroup.label.border': '0',
|
||
'itemGroup.label.background': 'inherit',
|
||
'itemGroup.label.color': '#333',
|
||
'itemGroup.label.fontWeight': 'bold',
|
||
'itemGroup.label.height': '29px',
|
||
// disabled ItemGroup's label
|
||
'itemGroup.label.disabled.border': '0',
|
||
'itemGroup.label.disabled.background': 'inherit',
|
||
'itemGroup.label.disabled.color': '#333',
|
||
// Item
|
||
'item.border': '0',
|
||
'item.background': 'inherit',
|
||
'item.color': '#333',
|
||
'item.height': '29px',
|
||
// selected Item
|
||
'item.selected.border': '0',
|
||
'item.selected.background': '#f4f4f4',
|
||
'item.selected.color': '#333',
|
||
// disabled Item
|
||
'item.disabled.border': '0',
|
||
'item.disabled.background': '#f9f9f9',
|
||
'item.disabled.color': '#c8c8c8',
|
||
// highlighted Item
|
||
'item.highlighted.border': '0',
|
||
'item.highlighted.background': '#e5f6ff',
|
||
'item.highlighted.color': '#333'
|
||
};
|
||
_exports["default"] = _default;
|
||
});
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./src/js/utils.js":
|
||
/*!*************************!*\
|
||
!*** ./src/js/utils.js ***!
|
||
\*************************/
|
||
/*! no static exports found */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function (global, factory) {
|
||
if (true) {
|
||
!(__WEBPACK_AMD_DEFINE_ARRAY__ = [exports, __webpack_require__(/*! tui-code-snippet/collection/forEachOwnProperties */ "./node_modules/tui-code-snippet/collection/forEachOwnProperties.js"), __webpack_require__(/*! tui-code-snippet/type/isString */ "./node_modules/tui-code-snippet/type/isString.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
|
||
__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
|
||
(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
|
||
__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
|
||
} else { var mod; }
|
||
})(this, function (_exports, _forEachOwnProperties, _isString) {
|
||
"use strict";
|
||
|
||
_exports.__esModule = true;
|
||
_exports.getSelector = _exports.createElement = _exports.transform = void 0;
|
||
_forEachOwnProperties = _interopRequireDefault(_forEachOwnProperties);
|
||
_isString = _interopRequireDefault(_isString);
|
||
|
||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
|
||
|
||
/**
|
||
* @fileoverview Utility functions
|
||
* @author NHN. FE dev team.<dl_javascript@nhn.com>
|
||
*/
|
||
|
||
/**
|
||
* Transform an object using dot notation
|
||
* @param {object} obj - object to transform
|
||
* @return {object}
|
||
*/
|
||
var transform = function transform(obj) {
|
||
var result = {};
|
||
(0, _forEachOwnProperties["default"])(obj, function (value, prop) {
|
||
var keys = prop.split('.');
|
||
var curr = result;
|
||
keys.forEach(function (key, index) {
|
||
if (index === keys.length - 1) {
|
||
curr[key] = value;
|
||
} else if (!curr[key]) {
|
||
curr[key] = {};
|
||
}
|
||
|
||
curr = curr[key];
|
||
});
|
||
});
|
||
return result;
|
||
};
|
||
/**
|
||
* Create a HTML element
|
||
* @param {string} tagName - tag name
|
||
* @param {string} content - content in the element
|
||
* @param {object} options - other properties for the element
|
||
* @param {HTMLElement} container - parent element for the element
|
||
* @return {HTMLElement}
|
||
*/
|
||
|
||
|
||
_exports.transform = transform;
|
||
|
||
var createElement = function createElement(tagName, content, options, container) {
|
||
var el = document.createElement(tagName);
|
||
|
||
if (content) {
|
||
el.innerText = content;
|
||
}
|
||
|
||
(0, _forEachOwnProperties["default"])(options, function (value, key) {
|
||
if (key.indexOf('data-') > -1) {
|
||
el.setAttribute(key, value);
|
||
} else {
|
||
el[key] = value;
|
||
}
|
||
});
|
||
|
||
if (container) {
|
||
container.appendChild(el);
|
||
}
|
||
|
||
return el;
|
||
};
|
||
/**
|
||
* Get selectors for an element
|
||
* @param {HTMLElement} el - element
|
||
* @return {string}
|
||
*/
|
||
|
||
|
||
_exports.createElement = createElement;
|
||
|
||
var getSelector = function getSelector(el) {
|
||
if ((0, _isString["default"])(el)) {
|
||
return el;
|
||
}
|
||
|
||
if (el.id) {
|
||
return "#" + el.id;
|
||
}
|
||
|
||
var className = "." + el.className.replace(/\s+/g, '.');
|
||
|
||
if (className) {
|
||
var elems = document.querySelectorAll(className);
|
||
|
||
if (elems.length === 1) {
|
||
return className;
|
||
}
|
||
}
|
||
|
||
var tagName = el.tagName.toLowerCase();
|
||
return "" + tagName + className;
|
||
};
|
||
|
||
_exports.getSelector = getSelector;
|
||
});
|
||
|
||
/***/ })
|
||
|
||
/******/ })["default"];
|
||
});
|
||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly90dWkuU2VsZWN0Qm94L3dlYnBhY2svdW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbiIsIndlYnBhY2s6Ly90dWkuU2VsZWN0Qm94L3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL3R1aS5TZWxlY3RCb3gvLi9ub2RlX21vZHVsZXMvdHVpLWNvZGUtc25pcHBldC9hcnJheS9pbkFycmF5LmpzIiwid2VicGFjazovL3R1aS5TZWxlY3RCb3gvLi9ub2RlX21vZHVsZXMvdHVpLWNvZGUtc25pcHBldC9jb2xsZWN0aW9uL2ZvckVhY2guanMiLCJ3ZWJwYWNrOi8vdHVpLlNlbGVjdEJveC8uL25vZGVfbW9kdWxlcy90dWktY29kZS1zbmlwcGV0L2NvbGxlY3Rpb24vZm9yRWFjaEFycmF5LmpzIiwid2VicGFjazovL3R1aS5TZWxlY3RCb3gvLi9ub2RlX21vZHVsZXMvdHVpLWNvZGUtc25pcHBldC9jb2xsZWN0aW9uL2ZvckVhY2hPd25Qcm9wZXJ0aWVzLmpzIiwid2VicGFjazovL3R1aS5TZWxlY3RCb3gvLi9ub2RlX21vZHVsZXMvdHVpLWNvZGUtc25pcHBldC9jb2xsZWN0aW9uL3RvQXJyYXkuanMiLCJ3ZWJwYWNrOi8vdHVpLlNlbGVjdEJveC8uL25vZGVfbW9kdWxlcy90dWktY29kZS1zbmlwcGV0L2N1c3RvbUV2ZW50cy9jdXN0b21FdmVudHMuanMiLCJ3ZWJwYWNrOi8vdHVpLlNlbGVjdEJveC8uL25vZGVfbW9kdWxlcy90dWktY29kZS1zbmlwcGV0L2RvbUV2ZW50L19zYWZlRXZlbnQuanMiLCJ3ZWJwYWNrOi8vdHVpLlNlbGVjdEJveC8uL25vZGVfbW9kdWxlcy90dWktY29kZS1zbmlwcGV0L2RvbUV2ZW50L2dldFRhcmdldC5qcyIsIndlYnBhY2s6Ly90dWkuU2VsZWN0Qm94Ly4vbm9kZV9tb2R1bGVzL3R1aS1jb2RlLXNuaXBwZXQvZG9tRXZlbnQvb2ZmLmpzIiwid2VicGFjazovL3R1aS5TZWxlY3RCb3gvLi9ub2RlX21vZHVsZXMvdHVpLWNvZGUtc25pcHBldC9kb21FdmVudC9vbi5qcyIsIndlYnBhY2s6Ly90dWkuU2VsZWN0Qm94Ly4vbm9kZV9tb2R1bGVzL3R1aS1jb2RlLXNuaXBwZXQvZG9tRXZlbnQvcHJldmVudERlZmF1bHQuanMiLCJ3ZWJwYWNrOi8vdHVpLlNlbGVjdEJveC8uL25vZGVfbW9kdWxlcy90dWktY29kZS1zbmlwcGV0L2RvbVV0aWwvX3NldENsYXNzTmFtZS5qcyIsIndlYnBhY2s6Ly90dWkuU2VsZWN0Qm94Ly4vbm9kZV9tb2R1bGVzL3R1aS1jb2RlLXNuaXBwZXQvZG9tVXRpbC9hZGRDbGFzcy5qcyIsIndlYnBhY2s6Ly90dWkuU2VsZWN0Qm94Ly4vbm9kZV9tb2R1bGVzL3R1aS1jb2RlLXNuaXBwZXQvZG9tVXRpbC9jbG9zZXN0LmpzIiwid2VicGFjazovL3R1aS5TZWxlY3RCb3gvLi9ub2RlX21vZHVsZXMvdHVpLWNvZGUtc25pcHBldC9kb21VdGlsL2dldENsYXNzLmpzIiwid2VicGFjazovL3R1aS5TZWxlY3RCb3gvLi9ub2RlX21vZHVsZXMvdHVpLWNvZGUtc25pcHBldC9kb21VdGlsL21hdGNoZXMuanMiLCJ3ZWJwYWNrOi8vdHVpLlNlbGVjdEJveC8uL25vZGVfbW9kdWxlcy90dWktY29kZS1zbmlwcGV0L2RvbVV0aWwvcmVtb3ZlQ2xhc3MuanMiLCJ3ZWJwYWNrOi8vdHVpLlNlbGVjdEJveC8uL25vZGVfbW9kdWxlcy90dWktY29kZS1zbmlwcGV0L2RvbVV0aWwvcmVtb3ZlRWxlbWVudC5qcyIsIndlYnBhY2s6Ly90dWkuU2VsZWN0Qm94Ly4vbm9kZV9tb2R1bGVzL3R1aS1jb2RlLXNuaXBwZXQvb2JqZWN0L2V4dGVuZC5qcyIsIndlYnBhY2s6Ly90dWkuU2VsZWN0Qm94Ly4vbm9kZV9tb2R1bGVzL3R1aS1jb2RlLXNuaXBwZXQvcmVxdWVzdC9pbWFnZVBpbmcuanMiLCJ3ZWJwYWNrOi8vdHVpLlNlbGVjdEJveC8uL25vZGVfbW9kdWxlcy90dWktY29kZS1zbmlwcGV0L3JlcXVlc3Qvc2VuZEhvc3RuYW1lLmpzIiwid2VicGFjazovL3R1aS5TZWxlY3RCb3gvLi9ub2RlX21vZHVsZXMvdHVpLWNvZGUtc25pcHBldC90eXBlL2lzQXJyYXkuanMiLCJ3ZWJwYWNrOi8vdHVpLlNlbGVjdEJveC8uL25vZGVfbW9kdWxlcy90dWktY29kZS1zbmlwcGV0L3R5cGUvaXNCb29sZWFuLmpzIiwid2VicGFjazovL3R1aS5TZWxlY3RCb3gvLi9ub2RlX21vZHVsZXMvdHVpLWNvZGUtc25pcHBldC90eXBlL2lzRXhpc3R5LmpzIiwid2VicGFjazovL3R1aS5TZWxlY3RCb3gvLi9ub2RlX21vZHVsZXMvdHVpLWNvZGUtc25pcHBldC90eXBlL2lzRnVuY3Rpb24uanMiLCJ3ZWJwYWNrOi8vdHVpLlNlbGVjdEJveC8uL25vZGVfbW9kdWxlcy90dWktY29kZS1zbmlwcGV0L3R5cGUvaXNIVE1MTm9kZS5qcyIsIndlYnBhY2s6Ly90dWkuU2VsZWN0Qm94Ly4vbm9kZV9tb2R1bGVzL3R1aS1jb2RlLXNuaXBwZXQvdHlwZS9pc051bGwuanMiLCJ3ZWJwYWNrOi8vdHVpLlNlbGVjdEJveC8uL25vZGVfbW9kdWxlcy90dWktY29kZS1zbmlwcGV0L3R5cGUvaXNOdW1iZXIuanMiLCJ3ZWJwYWNrOi8vdHVpLlNlbGVjdEJveC8uL25vZGVfbW9kdWxlcy90dWktY29kZS1zbmlwcGV0L3R5cGUvaXNPYmplY3QuanMiLCJ3ZWJwYWNrOi8vdHVpLlNlbGVjdEJveC8uL25vZGVfbW9kdWxlcy90dWktY29kZS1zbmlwcGV0L3R5cGUvaXNTdHJpbmcuanMiLCJ3ZWJwYWNrOi8vdHVpLlNlbGVjdEJveC8uL25vZGVfbW9kdWxlcy90dWktY29kZS1zbmlwcGV0L3R5cGUvaXNVbmRlZmluZWQuanMiLCJ3ZWJwYWNrOi8vdHVpLlNlbGVjdEJveC8uL3NyYy9jc3Mvc2VsZWN0Qm94LmNzcz83ZWJkIiwid2VicGFjazovL3R1aS5TZWxlY3RCb3gvLi9zcmMvanMvY29uc3RhbnRzLmpzIiwid2VicGFjazovL3R1aS5TZWxlY3RCb3gvLi9zcmMvanMvZHJvcGRvd24uanMiLCJ3ZWJwYWNrOi8vdHVpLlNlbGVjdEJveC8uL3NyYy9qcy9pbmRleC5qcyIsIndlYnBhY2s6Ly90dWkuU2VsZWN0Qm94Ly4vc3JjL2pzL2lucHV0LmpzIiwid2VicGFjazovL3R1aS5TZWxlY3RCb3gvLi9zcmMvanMvaXRlbS5qcyIsIndlYnBhY2s6Ly90dWkuU2VsZWN0Qm94Ly4vc3JjL2pzL2l0ZW1Hcm91cC5qcyIsIndlYnBhY2s6Ly90dWkuU2VsZWN0Qm94Ly4vc3JjL2pzL2tleUV2ZW50VXRpbHMuanMiLCJ3ZWJwYWNrOi8vdHVpLlNlbGVjdEJveC8uL3NyYy9qcy9zZWxlY3RCb3guanMiLCJ3ZWJwYWNrOi8vdHVpLlNlbGVjdEJveC8uL3NyYy9qcy90aGVtZS5qcyIsIndlYnBhY2s6Ly90dWkuU2VsZWN0Qm94Ly4vc3JjL2pzL3RoZW1lQ29uZmlnLmpzIiwid2VicGFjazovL3R1aS5TZWxlY3RCb3gvLi9zcmMvanMvdXRpbHMuanMiXSwibmFtZXMiOlsiQ1NTX1BSRUZJWCIsImNsYXNzTmFtZXMiLCJTRUxFQ1RfQk9YIiwiSVRFTSIsIklURU1fR1JPVVAiLCJJVEVNX0dST1VQX0xBQkVMIiwiRFJPUERPV04iLCJJTlBVVCIsIlBMQUNFSE9MREVSIiwiSUNPTiIsIk9QRU4iLCJISURERU4iLCJESVNBQkxFRCIsIlNFTEVDVEVEIiwiSElHSExJR0hUIiwiY2xzIiwidmFsdWUiLCJrZXkiLCJEcm9wZG93biIsInBsYWNlaG9sZGVyIiwiZGF0YSIsImRpc2FibGVkIiwiZWwiLCJjbGFzc05hbWUiLCJuYXRpdmVFbCIsInRhYkluZGV4IiwiaXRlbXMiLCJpdGVtTGVuZ3RoIiwic2VsZWN0ZWRJdGVtIiwiaGlnaGxpZ2h0ZWRJdGVtIiwiaW5pdGlhbGl6ZSIsImluaXRpYWxpemVJdGVtcyIsIml0ZW0iLCJpdGVtSW5kZXgiLCJpdGVtR3JvdXBJbmRleCIsImZvckVhY2giLCJkYXR1bSIsIkl0ZW1Hcm91cCIsImluZGV4IiwibGVuZ3RoIiwiSXRlbSIsInB1c2giLCJhcHBlbmRUb0NvbnRhaW5lciIsImxhYmVsIiwiaXRlcmF0ZUl0ZW1zIiwiaXNTZWxlY3RlZCIsImRlc2VsZWN0IiwiZGlzYWJsZSIsImNhbGxiYWNrIiwiYXJncyIsInJlc3VsdCIsImdldEl0ZW1zIiwiaXRlbUluR3JvdXAiLCJhcHBseSIsIm9wZW4iLCJpc0Rpc2FibGVkIiwiaGlnaGxpZ2h0IiwiY2xvc2UiLCJkZWhpZ2hsaWdodCIsImVuYWJsZSIsInNlbGVjdCIsImdldEl0ZW0iLCJtb3ZlSGlnaGxpZ2h0ZWRJdGVtIiwiZGlyZWN0aW9uIiwiZ2V0SGlnaGxpZ2h0ZWRJdGVtIiwiaW5kZXhPZiIsIm51bWJlciIsImlzVmFsaWRJdGVtIiwiY29tcGFyZWRJdGVtIiwiZ2V0SW5kZXgiLCJnZXRWYWx1ZSIsImdldEl0ZW1Hcm91cHMiLCJpdGVtR3JvdXBzIiwiaXRlbUdyb3VwIiwiZ2V0SXRlbUdyb3VwIiwiZ2V0SXRlbUxlbmd0aCIsImdldFNlbGVjdGVkSXRlbSIsImNvbnRhaW5lciIsImFwcGVuZENoaWxkIiwiZGVzdHJveSIsIlNlbGVjdEJveCIsIklucHV0Iiwic2hvd0ljb24iLCJwbGFjZWhvbGRlclRleHQiLCJwbGFjZWhvbGRlckVsIiwid2lkdGgiLCJmb2N1cyIsImNoYW5nZVRleHQiLCJpbm5lclRleHQiLCJnZXRMYWJlbCIsInNlbGVjdGVkIiwiaXRlbUdyb3VwRGlzYWJsZWQiLCJpdGVtRGlzYWJsZWQiLCJtYWtlRGlzYWJsZSIsIm1ha2VFbmFibGUiLCJkaXNhYmxlSXRlbUdyb3VwIiwiZW5hYmxlSXRlbUdyb3VwIiwiYmx1ciIsIm5hdGl2ZUNvbnRhaW5lciIsImxhYmVsRWwiLCJpdGVtQ29udGFpbmVyRWwiLCJjcmVhdGVJdGVtcyIsIm1hcCIsImtleUNvZGVNYXAiLCJrZXlNYXAiLCJBcnJvd1VwIiwiVXAiLCJBcnJvd0Rvd24iLCJEb3duIiwiU3BhY2ViYXIiLCJFbnRlciIsIkVzY2FwZSIsIkVzYyIsIlRhYiIsImlkZW50aWZ5S2V5IiwiZXYiLCJrZXlDb2RlIiwiYXV0b2ZvY3VzIiwiYXV0b2Nsb3NlIiwidGhlbWUiLCJ1c2FnZVN0YXRpc3RpY3MiLCJpbnB1dCIsImRyb3Bkb3duIiwib3BlbmVkIiwiZGlhYmxlZCIsIlRoZW1lIiwiY29udGFpbmVyRWwiLCJkb2N1bWVudCIsInF1ZXJ5U2VsZWN0b3IiLCJvcHRpb25zIiwiYmluZEV2ZW50cyIsInRhcmdldCIsImhhbmRsZUNsaWNrIiwiaGFuZGxlTW91c2VvdmVyIiwiaGFuZGxlS2V5ZG93biIsInVuYmluZEV2ZW50cyIsIml0ZW1FbCIsImdldEF0dHJpYnV0ZSIsInRvZ2dsZSIsImNoZWNrTW91c2Vtb3ZlIiwiY2xpZW50WCIsImNsaWVudFkiLCJ4IiwieSIsInByZXZYIiwicHJldlkiLCJjbG9zZUtleXMiLCJhY3RpdmVLZXlzIiwiYWN0aXZhdGVLZXlkb3duIiwicHJlc3NLZXlPbkl0ZW0iLCJwcmVzc0tleU9uSW5wdXQiLCJzZWxlY3RCeUtleWRvd24iLCJmaXJlIiwidHlwZSIsImRpc2FibGVkSXRlbSIsInByZXZTZWxlY3RlZEl0ZW0iLCJwcmV2IiwiY3VyciIsIkN1c3RvbUV2ZW50cyIsIm1peGluIiwiY3VzdG9tVGhlbWUiLCJjb250YWluZXJTZWxlY3RvciIsImNzc1N0cmluZyIsImJ1aWxkQWxsIiwic3R5bGVFbCIsImNyZWF0ZVN0eWxlRWxlbWVudCIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwiY3JlYXRlRWxlbWVudCIsInN0eWxlU2hlZXQiLCJjc3NUZXh0IiwiY3JlYXRlVGV4dE5vZGUiLCJleGNsdWRlIiwiYm9yZGVyIiwiYmFja2dyb3VuZCIsImJ1aWxkSW5wdXQiLCJjb21tb24iLCJidWlsZERyb3Bkb3duIiwiYm9yZGVyVG9wIiwiaGVpZ2h0IiwiYnVpbGRJdGVtR3JvdXAiLCJidWlsZEl0ZW0iLCJpbkl0ZW1Hcm91cCIsImxpbmVIZWlnaHQiLCJpY29uIiwiZGlzcGxheSIsImJ1aWxkQ3NzU3RyaW5nIiwiYmFzZSIsImJhc2VUaGVtZSIsImhpZ2hsaWdodGVkIiwiam9pbiIsInJlcGxhY2UiLCJ0b0xvd2VyQ2FzZSIsInRyYW5zZm9ybSIsIm9iaiIsInByb3AiLCJrZXlzIiwic3BsaXQiLCJ0YWdOYW1lIiwiY29udGVudCIsInNldEF0dHJpYnV0ZSIsImdldFNlbGVjdG9yIiwiaWQiLCJlbGVtcyIsInF1ZXJ5U2VsZWN0b3JBbGwiXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQ0FBaUM7QUFDakMsQ0FBQztBQUNELE87UUNWQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0EsR0FBRzs7UUFFSDtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0EsS0FBSztRQUNMO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBLE1BQU07UUFDTjtRQUNBO1FBQ0EsTUFBTTtRQUNOO1FBQ0E7UUFDQSxNQUFNO1FBQ047UUFDQTtRQUNBO1FBQ0EsT0FBTztRQUNQO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBLElBQUk7UUFDSjs7UUFFQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBLE1BQU07UUFDTjtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQSxLQUFLO1FBQ0w7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQSxNQUFNO1FBQ047UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBLEtBQUs7O1FBRUw7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0EsNkJBQTZCO1FBQzdCLDZCQUE2QjtRQUM3QjtRQUNBO1FBQ0E7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQSxxQkFBcUIsZ0JBQWdCO1FBQ3JDO1FBQ0E7UUFDQSxLQUFLO1FBQ0w7UUFDQTtRQUNBO1FBQ0EscUJBQXFCLGdCQUFnQjtRQUNyQztRQUNBO1FBQ0EsS0FBSztRQUNMO1FBQ0E7UUFDQSxLQUFLO1FBQ0w7UUFDQTtRQUNBLEtBQUs7UUFDTDtRQUNBO1FBQ0E7UUFDQSxLQUFLOztRQUVMO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBLEtBQUs7UUFDTDtRQUNBO1FBQ0EsS0FBSztRQUNMO1FBQ0E7UUFDQTtRQUNBLEtBQUs7O1FBRUw7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBLGtCQUFrQiw4QkFBOEI7UUFDaEQ7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQSxLQUFLO1FBQ0w7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0EsSUFBSTtRQUNKOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0EsSUFBSTtRQUNKO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0EsTUFBTTtRQUNOO1FBQ0E7UUFDQTtRQUNBLE9BQU87UUFDUDtRQUNBO1FBQ0E7UUFDQTtRQUNBLElBQUk7UUFDSjtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0E7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBLEtBQUs7UUFDTDtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0Esb0JBQW9CLDJCQUEyQjtRQUMvQztRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0EsT0FBTztRQUNQO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7O1FBRUE7UUFDQSxtQkFBbUIsY0FBYztRQUNqQztRQUNBO1FBQ0E7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0EsZ0JBQWdCLEtBQUs7UUFDckI7UUFDQTtRQUNBO1FBQ0EsTUFBTTtRQUNOO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQSxnQkFBZ0IsWUFBWTtRQUM1QjtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7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QUFPQSxFQUFQO0FBQ0QsR0FwQk07QUFzQlA7Ozs7Ozs7OztBQUtPLE1BQU1rTCxXQUFXLEdBQUcsU0FBZEEsV0FBYyxDQUFBbEwsRUFBRSxFQUFJO0FBQy9CLFFBQUksMEJBQVNBLEVBQVQsQ0FBSixFQUFrQjtBQUNoQixhQUFPQSxFQUFQO0FBQ0Q7O0FBRUQsUUFBSUEsRUFBRSxDQUFDbUwsRUFBUCxFQUFXO0FBQ1QsbUJBQVduTCxFQUFFLENBQUNtTCxFQUFkO0FBQ0Q7O0FBRUQsUUFBTWxMLFNBQVMsU0FBT0QsRUFBRSxDQUFDQyxTQUFILENBQWF1SyxPQUFiLENBQXFCLE1BQXJCLEVBQTZCLEdBQTdCLENBQXRCOztBQUNBLFFBQUl2SyxTQUFKLEVBQWU7QUFDYixVQUFNbUwsS0FBSyxHQUFHM0UsUUFBUSxDQUFDNEUsZ0JBQVQsQ0FBMEJwTCxTQUExQixDQUFkOztBQUVBLFVBQUltTCxLQUFLLENBQUNuSyxNQUFOLEtBQWlCLENBQXJCLEVBQXdCO0FBQ3RCLGVBQU9oQixTQUFQO0FBQ0Q7QUFDRjs7QUFFRCxRQUFNOEssT0FBTyxHQUFHL0ssRUFBRSxDQUFDK0ssT0FBSCxDQUFXTixXQUFYLEVBQWhCO0FBRUEsZ0JBQVVNLE9BQVYsR0FBb0I5SyxTQUFwQjtBQUNELEdBckJNIiwiZmlsZSI6InRvYXN0dWktc2VsZWN0LWJveC5qcyIsInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiB3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbihyb290LCBmYWN0b3J5KSB7XG5cdGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0Jylcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKTtcblx0ZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG5cdFx0ZGVmaW5lKFtdLCBmYWN0b3J5KTtcblx0ZWxzZSBpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpXG5cdFx0ZXhwb3J0c1tcIlNlbGVjdEJveFwiXSA9IGZhY3RvcnkoKTtcblx0ZWxzZVxuXHRcdHJvb3RbXCJ0dWlcIl0gPSByb290W1widHVpXCJdIHx8IHt9LCByb290W1widHVpXCJdW1wiU2VsZWN0Qm94XCJdID0gZmFjdG9yeSgpO1xufSkod2luZG93LCBmdW5jdGlvbigpIHtcbnJldHVybiAiLCIgXHRmdW5jdGlvbiBob3REaXNwb3NlQ2h1bmsoY2h1bmtJZCkge1xuIFx0XHRkZWxldGUgaW5zdGFsbGVkQ2h1bmtzW2NodW5rSWRdO1xuIFx0fVxuIFx0dmFyIHBhcmVudEhvdFVwZGF0ZUNhbGxiYWNrID0gd2luZG93W1wid2VicGFja0hvdFVwZGF0ZVwiXTtcbiBcdHdpbmRvd1tcIndlYnBhY2tIb3RVcGRhdGVcIl0gPSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbiBcdGZ1bmN0aW9uIHdlYnBhY2tIb3RVcGRhdGVDYWxsYmFjayhjaHVua0lkLCBtb3JlTW9kdWxlcykge1xuIFx0XHRob3RBZGRVcGRhdGVDaHVuayhjaHVua0lkLCBtb3JlTW9kdWxlcyk7XG4gXHRcdGlmIChwYXJlbnRIb3RVcGRhdGVDYWxsYmFjaykgcGFyZW50SG90VXBkYXRlQ2FsbGJhY2soY2h1bmtJZCwgbW9yZU1vZHVsZXMpO1xuIFx0fSA7XG5cbiBcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuIFx0ZnVuY3Rpb24gaG90RG93bmxvYWRVcGRhdGVDaHVuayhjaHVua0lkKSB7XG4gXHRcdHZhciBzY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpO1xuIFx0XHRzY3JpcHQuY2hhcnNldCA9IFwidXRmLThcIjtcbiBcdFx0c2NyaXB0LnNyYyA9IF9fd2VicGFja19yZXF1aXJlX18ucCArIFwiXCIgKyBjaHVua0lkICsgXCIuXCIgKyBob3RDdXJyZW50SGFzaCArIFwiLmhvdC11cGRhdGUuanNcIjtcbiBcdFx0aWYgKG51bGwpIHNjcmlwdC5jcm9zc09yaWdpbiA9IG51bGw7XG4gXHRcdGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoc2NyaXB0KTtcbiBcdH1cblxuIFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gXHRmdW5jdGlvbiBob3REb3dubG9hZE1hbmlmZXN0KHJlcXVlc3RUaW1lb3V0KSB7XG4gXHRcdHJlcXVlc3RUaW1lb3V0ID0gcmVxdWVzdFRpbWVvdXQgfHwgMTAwMDA7XG4gXHRcdHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiBcdFx0XHRpZiAodHlwZW9mIFhNTEh0dHBSZXF1ZXN0ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gXHRcdFx0XHRyZXR1cm4gcmVqZWN0KG5ldyBFcnJvcihcIk5vIGJyb3dzZXIgc3VwcG9ydFwiKSk7XG4gXHRcdFx0fVxuIFx0XHRcdHRyeSB7XG4gXHRcdFx0XHR2YXIgcmVxdWVzdCA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuIFx0XHRcdFx0dmFyIHJlcXVlc3RQYXRoID0gX193ZWJwYWNrX3JlcXVpcmVfXy5wICsgXCJcIiArIGhvdEN1cnJlbnRIYXNoICsgXCIuaG90LXVwZGF0ZS5qc29uXCI7XG4gXHRcdFx0XHRyZXF1ZXN0Lm9wZW4oXCJHRVRcIiwgcmVxdWVzdFBhdGgsIHRydWUpO1xuIFx0XHRcdFx0cmVxdWVzdC50aW1lb3V0ID0gcmVxdWVzdFRpbWVvdXQ7XG4gXHRcdFx0XHRyZXF1ZXN0LnNlbmQobnVsbCk7XG4gXHRcdFx0fSBjYXRjaCAoZXJyKSB7XG4gXHRcdFx0XHRyZXR1cm4gcmVqZWN0KGVycik7XG4gXHRcdFx0fVxuIFx0XHRcdHJlcXVlc3Qub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKSB7XG4gXHRcdFx0XHRpZiAocmVxdWVzdC5yZWFkeVN0YXRlICE9PSA0KSByZXR1cm47XG4gXHRcdFx0XHRpZiAocmVxdWVzdC5zdGF0dXMgPT09IDApIHtcbiBcdFx0XHRcdFx0Ly8gdGltZW91dFxuIFx0XHRcdFx0XHRyZWplY3QoXG4gXHRcdFx0XHRcdFx0bmV3IEVycm9yKFwiTWFuaWZlc3QgcmVxdWVzdCB0byBcIiArIHJlcXVlc3RQYXRoICsgXCIgdGltZWQgb3V0LlwiKVxuIFx0XHRcdFx0XHQpO1xuIFx0XHRcdFx0fSBlbHNlIGlmIChyZXF1ZXN0LnN0YXR1cyA9PT0gNDA0KSB7XG4gXHRcdFx0XHRcdC8vIG5vIHVwZGF0ZSBhdmFpbGFibGVcbiBcdFx0XHRcdFx0cmVzb2x2ZSgpO1xuIFx0XHRcdFx0fSBlbHNlIGlmIChyZXF1ZXN0LnN0YXR1cyAhPT0gMjAwICYmIHJlcXVlc3Quc3RhdHVzICE9PSAzMDQpIHtcbiBcdFx0XHRcdFx0Ly8gb3RoZXIgZmFpbHVyZVxuIFx0XHRcdFx0XHRyZWplY3QobmV3IEVycm9yKFwiTWFuaWZlc3QgcmVxdWVzdCB0byBcIiArIHJlcXVlc3RQYXRoICsgXCIgZmFpbGVkLlwiKSk7XG4gXHRcdFx0XHR9IGVsc2Uge1xuIFx0XHRcdFx0XHQvLyBzdWNjZXNzXG4gXHRcdFx0XHRcdHRyeSB7XG4gXHRcdFx0XHRcdFx0dmFyIHVwZGF0ZSA9IEpTT04ucGFyc2UocmVxdWVzdC5yZXNwb25zZVRleHQpO1xuIFx0XHRcdFx0XHR9IGNhdGNoIChlKSB7XG4gXHRcdFx0XHRcdFx0cmVqZWN0KGUpO1xuIFx0XHRcdFx0XHRcdHJldHVybjtcbiBcdFx0XHRcdFx0fVxuIFx0XHRcdFx0XHRyZXNvbHZlKHVwZGF0ZSk7XG4gXHRcdFx0XHR9XG4gXHRcdFx0fTtcbiBcdFx0fSk7XG4gXHR9XG5cbiBcdHZhciBob3RBcHBseU9uVXBkYXRlID0gdHJ1ZTtcbiBcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuIFx0dmFyIGhvdEN1cnJlbnRIYXNoID0gXCJmYmQwMmFlMGVhODhiOWY3ZTg4NlwiO1xuIFx0dmFyIGhvdFJlcXVlc3RUaW1lb3V0ID0gMTAwMDA7XG4gXHR2YXIgaG90Q3VycmVudE1vZHVsZURhdGEgPSB7fTtcbiBcdHZhciBob3RDdXJyZW50Q2hpbGRNb2R1bGU7XG4gXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbiBcdHZhciBob3RDdXJyZW50UGFyZW50cyA9IFtdO1xuIFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gXHR2YXIgaG90Q3VycmVudFBhcmVudHNUZW1wID0gW107XG5cbiBcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuIFx0ZnVuY3Rpb24gaG90Q3JlYXRlUmVxdWlyZShtb2R1bGVJZCkge1xuIFx0XHR2YXIgbWUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXTtcbiBcdFx0aWYgKCFtZSkgcmV0dXJuIF9fd2VicGFja19yZXF1aXJlX187XG4gXHRcdHZhciBmbiA9IGZ1bmN0aW9uKHJlcXVlc3QpIHtcbiBcdFx0XHRpZiAobWUuaG90LmFjdGl2ZSkge1xuIFx0XHRcdFx0aWYgKGluc3RhbGxlZE1vZHVsZXNbcmVxdWVzdF0pIHtcbiBcdFx0XHRcdFx0aWYgKGluc3RhbGxlZE1vZHVsZXNbcmVxdWVzdF0ucGFyZW50cy5pbmRleE9mKG1vZHVsZUlkKSA9PT0gLTEpIHtcbiBcdFx0XHRcdFx0XHRpbnN0YWxsZWRNb2R1bGVzW3JlcXVlc3RdLnBhcmVudHMucHVzaChtb2R1bGVJZCk7XG4gXHRcdFx0XHRcdH1cbiBcdFx0XHRcdH0gZWxzZSB7XG4gXHRcdFx0XHRcdGhvdEN1cnJlbnRQYXJlbnRzID0gW21vZHVsZUlkXTtcbiBcdFx0XHRcdFx0aG90Q3VycmVudENoaWxkTW9kdWxlID0gcmVxdWVzdDtcbiBcdFx0XHRcdH1cbiBcdFx0XHRcdGlmIChtZS5jaGlsZHJlbi5pbmRleE9mKHJlcXVlc3QpID09PSAtMSkge1xuIFx0XHRcdFx0XHRtZS5jaGlsZHJlbi5wdXNoKHJlcXVlc3QpO1xuIFx0XHRcdFx0fVxuIFx0XHRcdH0gZWxzZSB7XG4gXHRcdFx0XHRjb25zb2xlLndhcm4oXG4gXHRcdFx0XHRcdFwiW0hNUl0gdW5leHBlY3RlZCByZXF1aXJlKFwiICtcbiBcdFx0XHRcdFx0XHRyZXF1ZXN0ICtcbiBcdFx0XHRcdFx0XHRcIikgZnJvbSBkaXNwb3NlZCBtb2R1bGUgXCIgK1xuIFx0XHRcdFx0XHRcdG1vZHVsZUlkXG4gXHRcdFx0XHQpO1xuIFx0XHRcdFx0aG90Q3VycmVudFBhcmVudHMgPSBbXTtcbiBcdFx0XHR9XG4gXHRcdFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18ocmVxdWVzdCk7XG4gXHRcdH07XG4gXHRcdHZhciBPYmplY3RGYWN0b3J5ID0gZnVuY3Rpb24gT2JqZWN0RmFjdG9yeShuYW1lKSB7XG4gXHRcdFx0cmV0dXJuIHtcbiBcdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiBcdFx0XHRcdGVudW1lcmFibGU6IHRydWUsXG4gXHRcdFx0XHRnZXQ6IGZ1bmN0aW9uKCkge1xuIFx0XHRcdFx0XHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfX1tuYW1lXTtcbiBcdFx0XHRcdH0sXG4gXHRcdFx0XHRzZXQ6IGZ1bmN0aW9uKHZhbHVlKSB7XG4gXHRcdFx0XHRcdF9fd2VicGFja19yZXF1aXJlX19bbmFtZV0gPSB2YWx1ZTtcbiBcdFx0XHRcdH1cbiBcdFx0XHR9O1xuIFx0XHR9O1xuIFx0XHRmb3IgKHZhciBuYW1lIGluIF9fd2VicGFja19yZXF1aXJlX18pIHtcbiBcdFx0XHRpZiAoXG4gXHRcdFx0XHRPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoX193ZWJwYWNrX3JlcXVpcmVfXywgbmFtZSkgJiZcbiBcdFx0XHRcdG5hbWUgIT09IFwiZVwiICYmXG4gXHRcdFx0XHRuYW1lICE9PSBcInRcIlxuIFx0XHRcdCkge1xuIFx0XHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGZuLCBuYW1lLCBPYmplY3RGYWN0b3J5KG5hbWUpKTtcbiBcdFx0XHR9XG4gXHRcdH1cbiBcdFx0Zm4uZSA9IGZ1bmN0aW9uKGNodW5rSWQpIHtcbiBcdFx0XHRpZiAoaG90U3RhdHVzID09PSBcInJlYWR5XCIpIGhvdFNldFN0YXR1cyhcInByZXBhcmVcIik7XG4gXHRcdFx0aG90Q2h1bmtzTG9hZGluZysrO1xuIFx0XHRcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fLmUoY2h1bmtJZCkudGhlbihmaW5pc2hDaHVua0xvYWRpbmcsIGZ1bmN0aW9uKGVycikge1xuIFx0XHRcdFx0ZmluaXNoQ2h1bmtMb2FkaW5nKCk7XG4gXHRcdFx0XHR0aHJvdyBlcnI7XG4gXHRcdFx0fSk7XG5cbiBcdFx0XHRmdW5jdGlvbiBmaW5pc2hDaHVua0xvYWRpbmcoKSB7XG4gXHRcdFx0XHRob3RDaHVua3NMb2FkaW5nLS07XG4gXHRcdFx0XHRpZiAoaG90U3RhdHVzID09PSBcInByZXBhcmVcIikge1xuIFx0XHRcdFx0XHRpZiAoIWhvdFdhaXRpbmdGaWxlc01hcFtjaHVua0lkXSkge1xuIFx0XHRcdFx0XHRcdGhvdEVuc3VyZVVwZGF0ZUNodW5rKGNodW5rSWQpO1xuIFx0XHRcdFx0XHR9XG4gXHRcdFx0XHRcdGlmIChob3RDaHVua3NMb2FkaW5nID09PSAwICYmIGhvdFdhaXRpbmdGaWxlcyA9PT0gMCkge1xuIFx0XHRcdFx0XHRcdGhvdFVwZGF0ZURvd25sb2FkZWQoKTtcbiBcdFx0XHRcdFx0fVxuIFx0XHRcdFx0fVxuIFx0XHRcdH1cbiBcdFx0fTtcbiBcdFx0Zm4udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4gXHRcdFx0aWYgKG1vZGUgJiAxKSB2YWx1ZSA9IGZuKHZhbHVlKTtcbiBcdFx0XHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXy50KHZhbHVlLCBtb2RlICYgfjEpO1xuIFx0XHR9O1xuIFx0XHRyZXR1cm4gZm47XG4gXHR9XG5cbiBcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuIFx0ZnVuY3Rpb24gaG90Q3JlYXRlTW9kdWxlKG1vZHVsZUlkKSB7XG4gXHRcdHZhciBob3QgPSB7XG4gXHRcdFx0Ly8gcHJpdmF0ZSBzdHVmZlxuIFx0XHRcdF9hY2NlcHRlZERlcGVuZGVuY2llczoge30sXG4gXHRcdFx0X2RlY2xpbmVkRGVwZW5kZW5jaWVzOiB7fSxcbiBcdFx0XHRfc2VsZkFjY2VwdGVkOiBmYWxzZSxcbiBcdFx0XHRfc2VsZkRlY2xpbmVkOiBmYWxzZSxcbiBcdFx0XHRfZGlzcG9zZUhhbmRsZXJzOiBbXSxcbiBcdFx0XHRfbWFpbjogaG90Q3VycmVudENoaWxkTW9kdWxlICE9PSBtb2R1bGVJZCxcblxuIFx0XHRcdC8vIE1vZHVsZSBBUElcbiBcdFx0XHRhY3RpdmU6IHRydWUsXG4gXHRcdFx0YWNjZXB0OiBmdW5jdGlvbihkZXAsIGNhbGxiYWNrKSB7XG4gXHRcdFx0XHRpZiAoZGVwID09PSB1bmRlZmluZWQpIGhvdC5fc2VsZkFjY2VwdGVkID0gdHJ1ZTtcbiBcdFx0XHRcdGVsc2UgaWYgKHR5cGVvZiBkZXAgPT09IFwiZnVuY3Rpb25cIikgaG90Ll9zZWxmQWNjZXB0ZWQgPSBkZXA7XG4gXHRcdFx0XHRlbHNlIGlmICh0eXBlb2YgZGVwID09PSBcIm9iamVjdFwiKVxuIFx0XHRcdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGRlcC5sZW5ndGg7IGkrKylcbiBcdFx0XHRcdFx0XHRob3QuX2FjY2VwdGVkRGVwZW5kZW5jaWVzW2RlcFtpXV0gPSBjYWxsYmFjayB8fCBmdW5jdGlvbigpIHt9O1xuIFx0XHRcdFx0ZWxzZSBob3QuX2FjY2VwdGVkRGVwZW5kZW5jaWVzW2RlcF0gPSBjYWxsYmFjayB8fCBmdW5jdGlvbigpIHt9O1xuIFx0XHRcdH0sXG4gXHRcdFx0ZGVjbGluZTogZnVuY3Rpb24oZGVwKSB7XG4gXHRcdFx0XHRpZiAoZGVwID09PSB1bmRlZmluZWQpIGhvdC5fc2VsZkRlY2xpbmVkID0gdHJ1ZTtcbiBcdFx0XHRcdGVsc2UgaWYgKHR5cGVvZiBkZXAgPT09IFwib2JqZWN0XCIpXG4gXHRcdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgZGVwLmxlbmd0aDsgaSsrKVxuIFx0XHRcdFx0XHRcdGhvdC5fZGVjbGluZWREZXBlbmRlbmNpZXNbZGVwW2ldXSA9IHRydWU7XG4gXHRcdFx0XHRlbHNlIGhvdC5fZGVjbGluZWREZXBlbmRlbmNpZXNbZGVwXSA9IHRydWU7XG4gXHRcdFx0fSxcbiBcdFx0XHRkaXNwb3NlOiBmdW5jdGlvbihjYWxsYmFjaykge1xuIFx0XHRcdFx0aG90Ll9kaXNwb3NlSGFuZGxlcnMucHVzaChjYWxsYmFjayk7XG4gXHRcdFx0fSxcbiBcdFx0XHRhZGREaXNwb3NlSGFuZGxlcjogZnVuY3Rpb24oY2FsbGJhY2spIHtcbiBcdFx0XHRcdGhvdC5fZGlzcG9zZUhhbmRsZXJzLnB1c2goY2FsbGJhY2spO1xuIFx0XHRcdH0sXG4gXHRcdFx0cmVtb3ZlRGlzcG9zZUhhbmRsZXI6IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gXHRcdFx0XHR2YXIgaWR4ID0gaG90Ll9kaXNwb3NlSGFuZGxlcnMuaW5kZXhPZihjYWxsYmFjayk7XG4gXHRcdFx0XHRpZiAoaWR4ID49IDApIGhvdC5fZGlzcG9zZUhhbmRsZXJzLnNwbGljZShpZHgsIDEpO1xuIFx0XHRcdH0sXG5cbiBcdFx0XHQvLyBNYW5hZ2VtZW50IEFQSVxuIFx0XHRcdGNoZWNrOiBob3RDaGVjayxcbiBcdFx0XHRhcHBseTogaG90QXBwbHksXG4gXHRcdFx0c3RhdHVzOiBmdW5jdGlvbihsKSB7XG4gXHRcdFx0XHRpZiAoIWwpIHJldHVybiBob3RTdGF0dXM7XG4gXHRcdFx0XHRob3RTdGF0dXNIYW5kbGVycy5wdXNoKGwpO1xuIFx0XHRcdH0sXG4gXHRcdFx0YWRkU3RhdHVzSGFuZGxlcjogZnVuY3Rpb24obCkge1xuIFx0XHRcdFx0aG90U3RhdHVzSGFuZGxlcnMucHVzaChsKTtcbiBcdFx0XHR9LFxuIFx0XHRcdHJlbW92ZVN0YXR1c0hhbmRsZXI6IGZ1bmN0aW9uKGwpIHtcbiBcdFx0XHRcdHZhciBpZHggPSBob3RTdGF0dXNIYW5kbGVycy5pbmRleE9mKGwpO1xuIFx0XHRcdFx0aWYgKGlkeCA+PSAwKSBob3RTdGF0dXNIYW5kbGVycy5zcGxpY2UoaWR4LCAxKTtcbiBcdFx0XHR9LFxuXG4gXHRcdFx0Ly9pbmhlcml0IGZyb20gcHJldmlvdXMgZGlzcG9zZSBjYWxsXG4gXHRcdFx0ZGF0YTogaG90Q3VycmVudE1vZHVsZURhdGFbbW9kdWxlSWRdXG4gXHRcdH07XG4gXHRcdGhvdEN1cnJlbnRDaGlsZE1vZHVsZSA9IHVuZGVmaW5lZDtcbiBcdFx0cmV0dXJuIGhvdDtcbiBcdH1cblxuIFx0dmFyIGhvdFN0YXR1c0hhbmRsZXJzID0gW107XG4gXHR2YXIgaG90U3RhdHVzID0gXCJpZGxlXCI7XG5cbiBcdGZ1bmN0aW9uIGhvdFNldFN0YXR1cyhuZXdTdGF0dXMpIHtcbiBcdFx0aG90U3RhdHVzID0gbmV3U3RhdHVzO1xuIFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGhvdFN0YXR1c0hhbmRsZXJzLmxlbmd0aDsgaSsrKVxuIFx0XHRcdGhvdFN0YXR1c0hhbmRsZXJzW2ldLmNhbGwobnVsbCwgbmV3U3RhdHVzKTtcbiBcdH1cblxuIFx0Ly8gd2hpbGUgZG93bmxvYWRpbmdcbiBcdHZhciBob3RXYWl0aW5nRmlsZXMgPSAwO1xuIFx0dmFyIGhvdENodW5rc0xvYWRpbmcgPSAwO1xuIFx0dmFyIGhvdFdhaXRpbmdGaWxlc01hcCA9IHt9O1xuIFx0dmFyIGhvdFJlcXVlc3RlZEZpbGVzTWFwID0ge307XG4gXHR2YXIgaG90QXZhaWxhYmxlRmlsZXNNYXAgPSB7fTtcbiBcdHZhciBob3REZWZlcnJlZDtcblxuIFx0Ly8gVGhlIHVwZGF0ZSBpbmZvXG4gXHR2YXIgaG90VXBkYXRlLCBob3RVcGRhdGVOZXdIYXNoO1xuXG4gXHRmdW5jdGlvbiB0b01vZHVsZUlkKGlkKSB7XG4gXHRcdHZhciBpc051bWJlciA9ICtpZCArIFwiXCIgPT09IGlkO1xuIFx0XHRyZXR1cm4gaXNOdW1iZXIgPyAraWQgOiBpZDtcbiBcdH1cblxuIFx0ZnVuY3Rpb24gaG90Q2hlY2soYXBwbHkpIHtcbiBcdFx0aWYgKGhvdFN0YXR1cyAhPT0gXCJpZGxlXCIpIHtcbiBcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJjaGVjaygpIGlzIG9ubHkgYWxsb3dlZCBpbiBpZGxlIHN0YXR1c1wiKTtcbiBcdFx0fVxuIFx0XHRob3RBcHBseU9uVXBkYXRlID0gYXBwbHk7XG4gXHRcdGhvdFNldFN0YXR1cyhcImNoZWNrXCIpO1xuIFx0XHRyZXR1cm4gaG90RG93bmxvYWRNYW5pZmVzdChob3RSZXF1ZXN0VGltZW91dCkudGhlbihmdW5jdGlvbih1cGRhdGUpIHtcbiBcdFx0XHRpZiAoIXVwZGF0ZSkge1xuIFx0XHRcdFx0aG90U2V0U3RhdHVzKFwiaWRsZVwiKTtcbiBcdFx0XHRcdHJldHVybiBudWxsO1xuIFx0XHRcdH1cbiBcdFx0XHRob3RSZXF1ZXN0ZWRGaWxlc01hcCA9IHt9O1xuIFx0XHRcdGhvdFdhaXRpbmdGaWxlc01hcCA9IHt9O1xuIFx0XHRcdGhvdEF2YWlsYWJsZUZpbGVzTWFwID0gdXBkYXRlLmM7XG4gXHRcdFx0aG90VXBkYXRlTmV3SGFzaCA9IHVwZGF0ZS5oO1xuXG4gXHRcdFx0aG90U2V0U3RhdHVzKFwicHJlcGFyZVwiKTtcbiBcdFx0XHR2YXIgcHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuIFx0XHRcdFx0aG90RGVmZXJyZWQgPSB7XG4gXHRcdFx0XHRcdHJlc29sdmU6IHJlc29sdmUsXG4gXHRcdFx0XHRcdHJlamVjdDogcmVqZWN0XG4gXHRcdFx0XHR9O1xuIFx0XHRcdH0pO1xuIFx0XHRcdGhvdFVwZGF0ZSA9IHt9O1xuIFx0XHRcdHZhciBjaHVua0lkID0gXCJtYWluXCI7XG4gXHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWxvbmUtYmxvY2tzXG4gXHRcdFx0e1xuIFx0XHRcdFx0LypnbG9iYWxzIGNodW5rSWQgKi9cbiBcdFx0XHRcdGhvdEVuc3VyZVVwZGF0ZUNodW5rKGNodW5rSWQpO1xuIFx0XHRcdH1cbiBcdFx0XHRpZiAoXG4gXHRcdFx0XHRob3RTdGF0dXMgPT09IFwicHJlcGFyZVwiICYmXG4gXHRcdFx0XHRob3RDaHVua3NMb2FkaW5nID09PSAwICYmXG4gXHRcdFx0XHRob3RXYWl0aW5nRmlsZXMgPT09IDBcbiBcdFx0XHQpIHtcbiBcdFx0XHRcdGhvdFVwZGF0ZURvd25sb2FkZWQoKTtcbiBcdFx0XHR9XG4gXHRcdFx0cmV0dXJuIHByb21pc2U7XG4gXHRcdH0pO1xuIFx0fVxuXG4gXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbiBcdGZ1bmN0aW9uIGhvdEFkZFVwZGF0ZUNodW5rKGNodW5rSWQsIG1vcmVNb2R1bGVzKSB7XG4gXHRcdGlmICghaG90QXZhaWxhYmxlRmlsZXNNYXBbY2h1bmtJZF0gfHwgIWhvdFJlcXVlc3RlZEZpbGVzTWFwW2NodW5rSWRdKVxuIFx0XHRcdHJldHVybjtcbiBcdFx0aG90UmVxdWVzdGVkRmlsZXNNYXBbY2h1bmtJZF0gPSBmYWxzZTtcbiBcdFx0Zm9yICh2YXIgbW9kdWxlSWQgaW4gbW9yZU1vZHVsZXMpIHtcbiBcdFx0XHRpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vcmVNb2R1bGVzLCBtb2R1bGVJZCkpIHtcbiBcdFx0XHRcdGhvdFVwZGF0ZVttb2R1bGVJZF0gPSBtb3JlTW9kdWxlc1ttb2R1bGVJZF07XG4gXHRcdFx0fVxuIFx0XHR9XG4gXHRcdGlmICgtLWhvdFdhaXRpbmdGaWxlcyA9PT0gMCAmJiBob3RDaHVua3NMb2FkaW5nID09PSAwKSB7XG4gXHRcdFx0aG90VXBkYXRlRG93bmxvYWRlZCgpO1xuIFx0XHR9XG4gXHR9XG5cbiBcdGZ1bmN0aW9uIGhvdEVuc3VyZVVwZGF0ZUNodW5rKGNodW5rSWQpIHtcbiBcdFx0aWYgKCFob3RBdmFpbGFibGVGaWxlc01hcFtjaHVua0lkXSkge1xuIFx0XHRcdGhvdFdhaXRpbmdGaWxlc01hcFtjaHVua0lkXSA9IHRydWU7XG4gXHRcdH0gZWxzZSB7XG4gXHRcdFx0aG90UmVxdWVzdGVkRmlsZXNNYXBbY2h1bmtJZF0gPSB0cnVlO1xuIFx0XHRcdGhvdFdhaXRpbmdGaWxlcysrO1xuIFx0XHRcdGhvdERvd25sb2FkVXBkYXRlQ2h1bmsoY2h1bmtJZCk7XG4gXHRcdH1cbiBcdH1cblxuIFx0ZnVuY3Rpb24gaG90VXBkYXRlRG93bmxvYWRlZCgpIHtcbiBcdFx0aG90U2V0U3RhdHVzKFwicmVhZHlcIik7XG4gXHRcdHZhciBkZWZlcnJlZCA9IGhvdERlZmVycmVkO1xuIFx0XHRob3REZWZlcnJlZCA9IG51bGw7XG4gXHRcdGlmICghZGVmZXJyZWQpIHJldHVybjtcbiBcdFx0aWYgKGhvdEFwcGx5T25VcGRhdGUpIHtcbiBcdFx0XHQvLyBXcmFwIGRlZmVycmVkIG9iamVjdCBpbiBQcm9taXNlIHRvIG1hcmsgaXQgYXMgYSB3ZWxsLWhhbmRsZWQgUHJvbWlzZSB0b1xuIFx0XHRcdC8vIGF2b2lkIHRyaWdnZXJpbmcgdW5jYXVnaHQgZXhjZXB0aW9uIHdhcm5pbmcgaW4gQ2hyb21lLlxuIFx0XHRcdC8vIFNlZSBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD00NjU2NjZcbiBcdFx0XHRQcm9taXNlLnJlc29sdmUoKVxuIFx0XHRcdFx0LnRoZW4oZnVuY3Rpb24oKSB7XG4gXHRcdFx0XHRcdHJldHVybiBob3RBcHBseShob3RBcHBseU9uVXBkYXRlKTtcbiBcdFx0XHRcdH0pXG4gXHRcdFx0XHQudGhlbihcbiBcdFx0XHRcdFx0ZnVuY3Rpb24ocmVzdWx0KSB7XG4gXHRcdFx0XHRcdFx0ZGVmZXJyZWQucmVzb2x2ZShyZXN1bHQpO1xuIFx0XHRcdFx0XHR9LFxuIFx0XHRcdFx0XHRmdW5jdGlvbihlcnIpIHtcbiBcdFx0XHRcdFx0XHRkZWZlcnJlZC5yZWplY3QoZXJyKTtcbiBcdFx0XHRcdFx0fVxuIFx0XHRcdFx0KTtcbiBcdFx0fSBlbHNlIHtcbiBcdFx0XHR2YXIgb3V0ZGF0ZWRNb2R1bGVzID0gW107XG4gXHRcdFx0Zm9yICh2YXIgaWQgaW4gaG90VXBkYXRlKSB7XG4gXHRcdFx0XHRpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGhvdFVwZGF0ZSwgaWQpKSB7XG4gXHRcdFx0XHRcdG91dGRhdGVkTW9kdWxlcy5wdXNoKHRvTW9kdWxlSWQoaWQpKTtcbiBcdFx0XHRcdH1cbiBcdFx0XHR9XG4gXHRcdFx0ZGVmZXJyZWQucmVzb2x2ZShvdXRkYXRlZE1vZHVsZXMpO1xuIFx0XHR9XG4gXHR9XG5cbiBcdGZ1bmN0aW9uIGhvdEFwcGx5KG9wdGlvbnMpIHtcbiBcdFx0aWYgKGhvdFN0YXR1cyAhPT0gXCJyZWFkeVwiKVxuIFx0XHRcdHRocm93IG5ldyBFcnJvcihcImFwcGx5KCkgaXMgb25seSBhbGxvd2VkIGluIHJlYWR5IHN0YXR1c1wiKTtcbiBcdFx0b3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiBcdFx0dmFyIGNiO1xuIFx0XHR2YXIgaTtcbiBcdFx0dmFyIGo7XG4gXHRcdHZhciBtb2R1bGU7XG4gXHRcdHZhciBtb2R1bGVJZDtcblxuIFx0XHRmdW5jdGlvbiBnZXRBZmZlY3RlZFN0dWZmKHVwZGF0ZU1vZHVsZUlkKSB7XG4gXHRcdFx0dmFyIG91dGRhdGVkTW9kdWxlcyA9IFt1cGRhdGVNb2R1bGVJZF07XG4gXHRcdFx0dmFyIG91dGRhdGVkRGVwZW5kZW5jaWVzID0ge307XG5cbiBcdFx0XHR2YXIgcXVldWUgPSBvdXRkYXRlZE1vZHVsZXMubWFwKGZ1bmN0aW9uKGlkKSB7XG4gXHRcdFx0XHRyZXR1cm4ge1xuIFx0XHRcdFx0XHRjaGFpbjogW2lkXSxcbiBcdFx0XHRcdFx0aWQ6IGlkXG4gXHRcdFx0XHR9O1xuIFx0XHRcdH0pO1xuIFx0XHRcdHdoaWxlIChxdWV1ZS5sZW5ndGggPiAwKSB7XG4gXHRcdFx0XHR2YXIgcXVldWVJdGVtID0gcXVldWUucG9wKCk7XG4gXHRcdFx0XHR2YXIgbW9kdWxlSWQgPSBxdWV1ZUl0ZW0uaWQ7XG4gXHRcdFx0XHR2YXIgY2hhaW4gPSBxdWV1ZUl0ZW0uY2hhaW47XG4gXHRcdFx0XHRtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXTtcbiBcdFx0XHRcdGlmICghbW9kdWxlIHx8IG1vZHVsZS5ob3QuX3NlbGZBY2NlcHRlZCkgY29udGludWU7XG4gXHRcdFx0XHRpZiAobW9kdWxlLmhvdC5fc2VsZkRlY2xpbmVkKSB7XG4gXHRcdFx0XHRcdHJldHVybiB7XG4gXHRcdFx0XHRcdFx0dHlwZTogXCJzZWxmLWRlY2xpbmVkXCIsXG4gXHRcdFx0XHRcdFx0Y2hhaW46IGNoYWluLFxuIFx0XHRcdFx0XHRcdG1vZHVsZUlkOiBtb2R1bGVJZFxuIFx0XHRcdFx0XHR9O1xuIFx0XHRcdFx0fVxuIFx0XHRcdFx0aWYgKG1vZHVsZS5ob3QuX21haW4pIHtcbiBcdFx0XHRcdFx0cmV0dXJuIHtcbiBcdFx0XHRcdFx0XHR0eXBlOiBcInVuYWNjZXB0ZWRcIixcbiBcdFx0XHRcdFx0XHRjaGFpbjogY2hhaW4sXG4gXHRcdFx0XHRcdFx0bW9kdWxlSWQ6IG1vZHVsZUlkXG4gXHRcdFx0XHRcdH07XG4gXHRcdFx0XHR9XG4gXHRcdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IG1vZHVsZS5wYXJlbnRzLmxlbmd0aDsgaSsrKSB7XG4gXHRcdFx0XHRcdHZhciBwYXJlbnRJZCA9IG1vZHVsZS5wYXJlbnRzW2ldO1xuIFx0XHRcdFx0XHR2YXIgcGFyZW50ID0gaW5zdGFsbGVkTW9kdWxlc1twYXJlbnRJZF07XG4gXHRcdFx0XHRcdGlmICghcGFyZW50KSBjb250aW51ZTtcbiBcdFx0XHRcdFx0aWYgKHBhcmVudC5ob3QuX2RlY2xpbmVkRGVwZW5kZW5jaWVzW21vZHVsZUlkXSkge1xuIFx0XHRcdFx0XHRcdHJldHVybiB7XG4gXHRcdFx0XHRcdFx0XHR0eXBlOiBcImRlY2xpbmVkXCIsXG4gXHRcdFx0XHRcdFx0XHRjaGFpbjogY2hhaW4uY29uY2F0KFtwYXJlbnRJZF0pLFxuIFx0XHRcdFx0XHRcdFx0bW9kdWxlSWQ6IG1vZHVsZUlkLFxuIFx0XHRcdFx0XHRcdFx0cGFyZW50SWQ6IHBhcmVudElkXG4gXHRcdFx0XHRcdFx0fTtcbiBcdFx0XHRcdFx0fVxuIFx0XHRcdFx0XHRpZiAob3V0ZGF0ZWRNb2R1bGVzLmluZGV4T2YocGFyZW50SWQpICE9PSAtMSkgY29udGludWU7XG4gXHRcdFx0XHRcdGlmIChwYXJlbnQuaG90Ll9hY2NlcHRlZERlcGVuZGVuY2llc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRcdFx0XHRpZiAoIW91dGRhdGVkRGVwZW5kZW5jaWVzW3BhcmVudElkXSlcbiBcdFx0XHRcdFx0XHRcdG91dGRhdGVkRGVwZW5kZW5jaWVzW3BhcmVudElkXSA9IFtdO1xuIFx0XHRcdFx0XHRcdGFkZEFsbFRvU2V0KG91dGRhdGVkRGVwZW5kZW5jaWVzW3BhcmVudElkXSwgW21vZHVsZUlkXSk7XG4gXHRcdFx0XHRcdFx0Y29udGludWU7XG4gXHRcdFx0XHRcdH1cbiBcdFx0XHRcdFx0ZGVsZXRlIG91dGRhdGVkRGVwZW5kZW5jaWVzW3BhcmVudElkXTtcbiBcdFx0XHRcdFx0b3V0ZGF0ZWRNb2R1bGVzLnB1c2gocGFyZW50SWQpO1xuIFx0XHRcdFx0XHRxdWV1ZS5wdXNoKHtcbiBcdFx0XHRcdFx0XHRjaGFpbjogY2hhaW4uY29uY2F0KFtwYXJlbnRJZF0pLFxuIFx0XHRcdFx0XHRcdGlkOiBwYXJlbnRJZFxuIFx0XHRcdFx0XHR9KTtcbiBcdFx0XHRcdH1cbiBcdFx0XHR9XG5cbiBcdFx0XHRyZXR1cm4ge1xuIFx0XHRcdFx0dHlwZTogXCJhY2NlcHRlZFwiLFxuIFx0XHRcdFx0bW9kdWxlSWQ6IHVwZGF0ZU1vZHVsZUlkLFxuIFx0XHRcdFx0b3V0ZGF0ZWRNb2R1bGVzOiBvdXRkYXRlZE1vZHVsZXMsXG4gXHRcdFx0XHRvdXRkYXRlZERlcGVuZGVuY2llczogb3V0ZGF0ZWREZXBlbmRlbmNpZXNcbiBcdFx0XHR9O1xuIFx0XHR9XG5cbiBcdFx0ZnVuY3Rpb24gYWRkQWxsVG9TZXQoYSwgYikge1xuIFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgYi5sZW5ndGg7IGkrKykge1xuIFx0XHRcdFx0dmFyIGl0ZW0gPSBiW2ldO1xuIFx0XHRcdFx0aWYgKGEuaW5kZXhPZihpdGVtKSA9PT0gLTEpIGEucHVzaChpdGVtKTtcbiBcdFx0XHR9XG4gXHRcdH1cblxuIFx0XHQvLyBhdCBiZWdpbiBhbGwgdXBkYXRlcyBtb2R1bGVzIGFyZSBvdXRkYXRlZFxuIFx0XHQvLyB0aGUgXCJvdXRkYXRlZFwiIHN0YXR1cyBjYW4gcHJvcGFnYXRlIHRvIHBhcmVudHMgaWYgdGhleSBkb24ndCBhY2NlcHQgdGhlIGNoaWxkcmVuXG4gXHRcdHZhciBvdXRkYXRlZERlcGVuZGVuY2llcyA9IHt9O1xuIFx0XHR2YXIgb3V0ZGF0ZWRNb2R1bGVzID0gW107XG4gXHRcdHZhciBhcHBsaWVkVXBkYXRlID0ge307XG5cbiBcdFx0dmFyIHdhcm5VbmV4cGVjdGVkUmVxdWlyZSA9IGZ1bmN0aW9uIHdhcm5VbmV4cGVjdGVkUmVxdWlyZSgpIHtcbiBcdFx0XHRjb25zb2xlLndhcm4oXG4gXHRcdFx0XHRcIltITVJdIHVuZXhwZWN0ZWQgcmVxdWlyZShcIiArIHJlc3VsdC5tb2R1bGVJZCArIFwiKSB0byBkaXNwb3NlZCBtb2R1bGVcIlxuIFx0XHRcdCk7XG4gXHRcdH07XG5cbiBcdFx0Zm9yICh2YXIgaWQgaW4gaG90VXBkYXRlKSB7XG4gXHRcdFx0aWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChob3RVcGRhdGUsIGlkKSkge1xuIFx0XHRcdFx0bW9kdWxlSWQgPSB0b01vZHVsZUlkKGlkKTtcbiBcdFx0XHRcdC8qKiBAdHlwZSB7VE9ET30gKi9cbiBcdFx0XHRcdHZhciByZXN1bHQ7XG4gXHRcdFx0XHRpZiAoaG90VXBkYXRlW2lkXSkge1xuIFx0XHRcdFx0XHRyZXN1bHQgPSBnZXRBZmZlY3RlZFN0dWZmKG1vZHVsZUlkKTtcbiBcdFx0XHRcdH0gZWxzZSB7XG4gXHRcdFx0XHRcdHJlc3VsdCA9IHtcbiBcdFx0XHRcdFx0XHR0eXBlOiBcImRpc3Bvc2VkXCIsXG4gXHRcdFx0XHRcdFx0bW9kdWxlSWQ6IGlkXG4gXHRcdFx0XHRcdH07XG4gXHRcdFx0XHR9XG4gXHRcdFx0XHQvKiogQHR5cGUge0Vycm9yfGZhbHNlfSAqL1xuIFx0XHRcdFx0dmFyIGFib3J0RXJyb3IgPSBmYWxzZTtcbiBcdFx0XHRcdHZhciBkb0FwcGx5ID0gZmFsc2U7XG4gXHRcdFx0XHR2YXIgZG9EaXNwb3NlID0gZmFsc2U7XG4gXHRcdFx0XHR2YXIgY2hhaW5JbmZvID0gXCJcIjtcbiBcdFx0XHRcdGlmIChyZXN1bHQuY2hhaW4pIHtcbiBcdFx0XHRcdFx0Y2hhaW5JbmZvID0gXCJcXG5VcGRhdGUgcHJvcGFnYXRpb246IFwiICsgcmVzdWx0LmNoYWluLmpvaW4oXCIgLT4gXCIpO1xuIFx0XHRcdFx0fVxuIFx0XHRcdFx0c3dpdGNoIChyZXN1bHQudHlwZSkge1xuIFx0XHRcdFx0XHRjYXNlIFwic2VsZi1kZWNsaW5lZFwiOlxuIFx0XHRcdFx0XHRcdGlmIChvcHRpb25zLm9uRGVjbGluZWQpIG9wdGlvbnMub25EZWNsaW5lZChyZXN1bHQpO1xuIFx0XHRcdFx0XHRcdGlmICghb3B0aW9ucy5pZ25vcmVEZWNsaW5lZClcbiBcdFx0XHRcdFx0XHRcdGFib3J0RXJyb3IgPSBuZXcgRXJyb3IoXG4gXHRcdFx0XHRcdFx0XHRcdFwiQWJvcnRlZCBiZWNhdXNlIG9mIHNlbGYgZGVjbGluZTogXCIgK1xuIFx0XHRcdFx0XHRcdFx0XHRcdHJlc3VsdC5tb2R1bGVJZCArXG4gXHRcdFx0XHRcdFx0XHRcdFx0Y2hhaW5JbmZvXG4gXHRcdFx0XHRcdFx0XHQpO1xuIFx0XHRcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdFx0XHRjYXNlIFwiZGVjbGluZWRcIjpcbiBcdFx0XHRcdFx0XHRpZiAob3B0aW9ucy5vbkRlY2xpbmVkKSBvcHRpb25zLm9uRGVjbGluZWQocmVzdWx0KTtcbiBcdFx0XHRcdFx0XHRpZiAoIW9wdGlvbnMuaWdub3JlRGVjbGluZWQpXG4gXHRcdFx0XHRcdFx0XHRhYm9ydEVycm9yID0gbmV3IEVycm9yKFxuIFx0XHRcdFx0XHRcdFx0XHRcIkFib3J0ZWQgYmVjYXVzZSBvZiBkZWNsaW5lZCBkZXBlbmRlbmN5OiBcIiArXG4gXHRcdFx0XHRcdFx0XHRcdFx0cmVzdWx0Lm1vZHVsZUlkICtcbiBcdFx0XHRcdFx0XHRcdFx0XHRcIiBpbiBcIiArXG4gXHRcdFx0XHRcdFx0XHRcdFx0cmVzdWx0LnBhcmVudElkICtcbiBcdFx0XHRcdFx0XHRcdFx0XHRjaGFpbkluZm9cbiBcdFx0XHRcdFx0XHRcdCk7XG4gXHRcdFx0XHRcdFx0YnJlYWs7XG4gXHRcdFx0XHRcdGNhc2UgXCJ1bmFjY2VwdGVkXCI6XG4gXHRcdFx0XHRcdFx0aWYgKG9wdGlvbnMub25VbmFjY2VwdGVkKSBvcHRpb25zLm9uVW5hY2NlcHRlZChyZXN1bHQpO1xuIFx0XHRcdFx0XHRcdGlmICghb3B0aW9ucy5pZ25vcmVVbmFjY2VwdGVkKVxuIFx0XHRcdFx0XHRcdFx0YWJvcnRFcnJvciA9IG5ldyBFcnJvcihcbiBcdFx0XHRcdFx0XHRcdFx0XCJBYm9ydGVkIGJlY2F1c2UgXCIgKyBtb2R1bGVJZCArIFwiIGlzIG5vdCBhY2NlcHRlZFwiICsgY2hhaW5JbmZvXG4gXHRcdFx0XHRcdFx0XHQpO1xuIFx0XHRcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdFx0XHRjYXNlIFwiYWNjZXB0ZWRcIjpcbiBcdFx0XHRcdFx0XHRpZiAob3B0aW9ucy5vbkFjY2VwdGVkKSBvcHRpb25zLm9uQWNjZXB0ZWQocmVzdWx0KTtcbiBcdFx0XHRcdFx0XHRkb0FwcGx5ID0gdHJ1ZTtcbiBcdFx0XHRcdFx0XHRicmVhaztcbiBcdFx0XHRcdFx0Y2FzZSBcImRpc3Bvc2VkXCI6XG4gXHRcdFx0XHRcdFx0aWYgKG9wdGlvbnMub25EaXNwb3NlZCkgb3B0aW9ucy5vbkRpc3Bvc2VkKHJlc3VsdCk7XG4gXHRcdFx0XHRcdFx0ZG9EaXNwb3NlID0gdHJ1ZTtcbiBcdFx0XHRcdFx0XHRicmVhaztcbiBcdFx0XHRcdFx0ZGVmYXVsdDpcbiBcdFx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJVbmV4Y2VwdGlvbiB0eXBlIFwiICsgcmVzdWx0LnR5cGUpO1xuIFx0XHRcdFx0fVxuIFx0XHRcdFx0aWYgKGFib3J0RXJyb3IpIHtcbiBcdFx0XHRcdFx0aG90U2V0U3RhdHVzKFwiYWJvcnRcIik7XG4gXHRcdFx0XHRcdHJldHVybiBQcm9taXNlLnJlamVjdChhYm9ydEVycm9yKTtcbiBcdFx0XHRcdH1cbiBcdFx0XHRcdGlmIChkb0FwcGx5KSB7XG4gXHRcdFx0XHRcdGFwcGxpZWRVcGRhdGVbbW9kdWxlSWRdID0gaG90VXBkYXRlW21vZHVsZUlkXTtcbiBcdFx0XHRcdFx0YWRkQWxsVG9TZXQob3V0ZGF0ZWRNb2R1bGVzLCByZXN1bHQub3V0ZGF0ZWRNb2R1bGVzKTtcbiBcdFx0XHRcdFx0Zm9yIChtb2R1bGVJZCBpbiByZXN1bHQub3V0ZGF0ZWREZXBlbmRlbmNpZXMpIHtcbiBcdFx0XHRcdFx0XHRpZiAoXG4gXHRcdFx0XHRcdFx0XHRPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoXG4gXHRcdFx0XHRcdFx0XHRcdHJlc3VsdC5vdXRkYXRlZERlcGVuZGVuY2llcyxcbiBcdFx0XHRcdFx0XHRcdFx0bW9kdWxlSWRcbiBcdFx0XHRcdFx0XHRcdClcbiBcdFx0XHRcdFx0XHQpIHtcbiBcdFx0XHRcdFx0XHRcdGlmICghb3V0ZGF0ZWREZXBlbmRlbmNpZXNbbW9kdWxlSWRdKVxuIFx0XHRcdFx0XHRcdFx0XHRvdXRkYXRlZERlcGVuZGVuY2llc1ttb2R1bGVJZF0gPSBbXTtcbiBcdFx0XHRcdFx0XHRcdGFkZEFsbFRvU2V0KFxuIFx0XHRcdFx0XHRcdFx0XHRvdXRkYXRlZERlcGVuZGVuY2llc1ttb2R1bGVJZF0sXG4gXHRcdFx0XHRcdFx0XHRcdHJlc3VsdC5vdXRkYXRlZERlcGVuZGVuY2llc1ttb2R1bGVJZF1cbiBcdFx0XHRcdFx0XHRcdCk7XG4gXHRcdFx0XHRcdFx0fVxuIFx0XHRcdFx0XHR9XG4gXHRcdFx0XHR9XG4gXHRcdFx0XHRpZiAoZG9EaXNwb3NlKSB7XG4gXHRcdFx0XHRcdGFkZEFsbFRvU2V0KG91dGRhdGVkTW9kdWxlcywgW3Jlc3VsdC5tb2R1bGVJZF0pO1xuIFx0XHRcdFx0XHRhcHBsaWVkVXBkYXRlW21vZHVsZUlkXSA9IHdhcm5VbmV4cGVjdGVkUmVxdWlyZTtcbiBcdFx0XHRcdH1cbiBcdFx0XHR9XG4gXHRcdH1cblxuIFx0XHQvLyBTdG9yZSBzZWxmIGFjY2VwdGVkIG91dGRhdGVkIG1vZHVsZXMgdG8gcmVxdWlyZSB0aGVtIGxhdGVyIGJ5IHRoZSBtb2R1bGUgc3lzdGVtXG4gXHRcdHZhciBvdXRkYXRlZFNlbGZBY2NlcHRlZE1vZHVsZXMgPSBbXTtcbiBcdFx0Zm9yIChpID0gMDsgaSA8IG91dGRhdGVkTW9kdWxlcy5sZW5ndGg7IGkrKykge1xuIFx0XHRcdG1vZHVsZUlkID0gb3V0ZGF0ZWRNb2R1bGVzW2ldO1xuIFx0XHRcdGlmIChcbiBcdFx0XHRcdGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdICYmXG4gXHRcdFx0XHRpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5ob3QuX3NlbGZBY2NlcHRlZCAmJlxuIFx0XHRcdFx0Ly8gcmVtb3ZlZCBzZWxmLWFjY2VwdGVkIG1vZHVsZXMgc2hvdWxkIG5vdCBiZSByZXF1aXJlZFxuIFx0XHRcdFx0YXBwbGllZFVwZGF0ZVttb2R1bGVJZF0gIT09IHdhcm5VbmV4cGVjdGVkUmVxdWlyZVxuIFx0XHRcdCkge1xuIFx0XHRcdFx0b3V0ZGF0ZWRTZWxmQWNjZXB0ZWRNb2R1bGVzLnB1c2goe1xuIFx0XHRcdFx0XHRtb2R1bGU6IG1vZHVsZUlkLFxuIFx0XHRcdFx0XHRlcnJvckhhbmRsZXI6IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmhvdC5fc2VsZkFjY2VwdGVkXG4gXHRcdFx0XHR9KTtcbiBcdFx0XHR9XG4gXHRcdH1cblxuIFx0XHQvLyBOb3cgaW4gXCJkaXNwb3NlXCIgcGhhc2VcbiBcdFx0aG90U2V0U3RhdHVzKFwiZGlzcG9zZVwiKTtcbiBcdFx0T2JqZWN0LmtleXMoaG90QXZhaWxhYmxlRmlsZXNNYXApLmZvckVhY2goZnVuY3Rpb24oY2h1bmtJZCkge1xuIFx0XHRcdGlmIChob3RBdmFpbGFibGVGaWxlc01hcFtjaHVua0lkXSA9PT0gZmFsc2UpIHtcbiBcdFx0XHRcdGhvdERpc3Bvc2VDaHVuayhjaHVua0lkKTtcbiBcdFx0XHR9XG4gXHRcdH0pO1xuXG4gXHRcdHZhciBpZHg7XG4gXHRcdHZhciBxdWV1ZSA9IG91dGRhdGVkTW9kdWxlcy5zbGljZSgpO1xuIFx0XHR3aGlsZSAocXVldWUubGVuZ3RoID4gMCkge1xuIFx0XHRcdG1vZHVsZUlkID0gcXVldWUucG9wKCk7XG4gXHRcdFx0bW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF07XG4gXHRcdFx0aWYgKCFtb2R1bGUpIGNvbnRpbnVlO1xuXG4gXHRcdFx0dmFyIGRhdGEgPSB7fTtcblxuIFx0XHRcdC8vIENhbGwgZGlzcG9zZSBoYW5kbGVyc1xuIFx0XHRcdHZhciBkaXNwb3NlSGFuZGxlcnMgPSBtb2R1bGUuaG90Ll9kaXNwb3NlSGFuZGxlcnM7XG4gXHRcdFx0Zm9yIChqID0gMDsgaiA8IGRpc3Bvc2VIYW5kbGVycy5sZW5ndGg7IGorKykge1xuIFx0XHRcdFx0Y2IgPSBkaXNwb3NlSGFuZGxlcnNbal07XG4gXHRcdFx0XHRjYihkYXRhKTtcbiBcdFx0XHR9XG4gXHRcdFx0aG90Q3VycmVudE1vZHVsZURhdGFbbW9kdWxlSWRdID0gZGF0YTtcblxuIFx0XHRcdC8vIGRpc2FibGUgbW9kdWxlICh0aGlzIGRpc2FibGVzIHJlcXVpcmVzIGZyb20gdGhpcyBtb2R1bGUpXG4gXHRcdFx0bW9kdWxlLmhvdC5hY3RpdmUgPSBmYWxzZTtcblxuIFx0XHRcdC8vIHJlbW92ZSBtb2R1bGUgZnJvbSBjYWNoZVxuIFx0XHRcdGRlbGV0ZSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXTtcblxuIFx0XHRcdC8vIHdoZW4gZGlzcG9zaW5nIHRoZXJlIGlzIG5vIG5lZWQgdG8gY2FsbCBkaXNwb3NlIGhhbmRsZXJcbiBcdFx0XHRkZWxldGUgb3V0ZGF0ZWREZXBlbmRlbmNpZXNbbW9kdWxlSWRdO1xuXG4gXHRcdFx0Ly8gcmVtb3ZlIFwicGFyZW50c1wiIHJlZmVyZW5jZXMgZnJvbSBhbGwgY2hpbGRyZW5cbiBcdFx0XHRmb3IgKGogPSAwOyBqIDwgbW9kdWxlLmNoaWxkcmVuLmxlbmd0aDsgaisrKSB7XG4gXHRcdFx0XHR2YXIgY2hpbGQgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZS5jaGlsZHJlbltqXV07XG4gXHRcdFx0XHRpZiAoIWNoaWxkKSBjb250aW51ZTtcbiBcdFx0XHRcdGlkeCA9IGNoaWxkLnBhcmVudHMuaW5kZXhPZihtb2R1bGVJZCk7XG4gXHRcdFx0XHRpZiAoaWR4ID49IDApIHtcbiBcdFx0XHRcdFx0Y2hpbGQucGFyZW50cy5zcGxpY2UoaWR4LCAxKTtcbiBcdFx0XHRcdH1cbiBcdFx0XHR9XG4gXHRcdH1cblxuIFx0XHQvLyByZW1vdmUgb3V0ZGF0ZWQgZGVwZW5kZW5jeSBmcm9tIG1vZHVsZSBjaGlsZHJlblxuIFx0XHR2YXIgZGVwZW5kZW5jeTtcbiBcdFx0dmFyIG1vZHVsZU91dGRhdGVkRGVwZW5kZW5jaWVzO1xuIFx0XHRmb3IgKG1vZHVsZUlkIGluIG91dGRhdGVkRGVwZW5kZW5jaWVzKSB7XG4gXHRcdFx0aWYgKFxuIFx0XHRcdFx0T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG91dGRhdGVkRGVwZW5kZW5jaWVzLCBtb2R1bGVJZClcbiBcdFx0XHQpIHtcbiBcdFx0XHRcdG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdO1xuIFx0XHRcdFx0aWYgKG1vZHVsZSkge1xuIFx0XHRcdFx0XHRtb2R1bGVPdXRkYXRlZERlcGVuZGVuY2llcyA9IG91dGRhdGVkRGVwZW5kZW5jaWVzW21vZHVsZUlkXTtcbiBcdFx0XHRcdFx0Zm9yIChqID0gMDsgaiA8IG1vZHVsZU91dGRhdGVkRGVwZW5kZW5jaWVzLmxlbmd0aDsgaisrKSB7XG4gXHRcdFx0XHRcdFx0ZGVwZW5kZW5jeSA9IG1vZHVsZU91dGRhdGVkRGVwZW5kZW5jaWVzW2pdO1xuIFx0XHRcdFx0XHRcdGlkeCA9IG1vZHVsZS5jaGlsZHJlbi5pbmRleE9mKGRlcGVuZGVuY3kpO1xuIFx0XHRcdFx0XHRcdGlmIChpZHggPj0gMCkgbW9kdWxlLmNoaWxkcmVuLnNwbGljZShpZHgsIDEpO1xuIFx0XHRcdFx0XHR9XG4gXHRcdFx0XHR9XG4gXHRcdFx0fVxuIFx0XHR9XG5cbiBcdFx0Ly8gTm93IGluIFwiYXBwbHlcIiBwaGFzZVxuIFx0XHRob3RTZXRTdGF0dXMoXCJhcHBseVwiKTtcblxuIFx0XHRob3RDdXJyZW50SGFzaCA9IGhvdFVwZGF0ZU5ld0hhc2g7XG5cbiBcdFx0Ly8gaW5zZXJ0IG5ldyBjb2RlXG4gXHRcdGZvciAobW9kdWxlSWQgaW4gYXBwbGllZFVwZGF0ZSkge1xuIFx0XHRcdGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYXBwbGllZFVwZGF0ZSwgbW9kdWxlSWQpKSB7XG4gXHRcdFx0XHRtb2R1bGVzW21vZHVsZUlkXSA9IGFwcGxpZWRVcGRhdGVbbW9kdWxlSWRdO1xuIFx0XHRcdH1cbiBcdFx0fVxuXG4gXHRcdC8vIGNhbGwgYWNjZXB0IGhhbmRsZXJzXG4gXHRcdHZhciBlcnJvciA9IG51bGw7XG4gXHRcdGZvciAobW9kdWxlSWQgaW4gb3V0ZGF0ZWREZXBlbmRlbmNpZXMpIHtcbiBcdFx0XHRpZiAoXG4gXHRcdFx0XHRPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob3V0ZGF0ZWREZXBlbmRlbmNpZXMsIG1vZHVsZUlkKVxuIFx0XHRcdCkge1xuIFx0XHRcdFx0bW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF07XG4gXHRcdFx0XHRpZiAobW9kdWxlKSB7XG4gXHRcdFx0XHRcdG1vZHVsZU91dGRhdGVkRGVwZW5kZW5jaWVzID0gb3V0ZGF0ZWREZXBlbmRlbmNpZXNbbW9kdWxlSWRdO1xuIFx0XHRcdFx0XHR2YXIgY2FsbGJhY2tzID0gW107XG4gXHRcdFx0XHRcdGZvciAoaSA9IDA7IGkgPCBtb2R1bGVPdXRkYXRlZERlcGVuZGVuY2llcy5sZW5ndGg7IGkrKykge1xuIFx0XHRcdFx0XHRcdGRlcGVuZGVuY3kgPSBtb2R1bGVPdXRkYXRlZERlcGVuZGVuY2llc1tpXTtcbiBcdFx0XHRcdFx0XHRjYiA9IG1vZHVsZS5ob3QuX2FjY2VwdGVkRGVwZW5kZW5jaWVzW2RlcGVuZGVuY3ldO1xuIFx0XHRcdFx0XHRcdGlmIChjYikge1xuIFx0XHRcdFx0XHRcdFx0aWYgKGNhbGxiYWNrcy5pbmRleE9mKGNiKSAhPT0gLTEpIGNvbnRpbnVlO1xuIFx0XHRcdFx0XHRcdFx0Y2FsbGJhY2tzLnB1c2goY2IpO1xuIFx0XHRcdFx0XHRcdH1cbiBcdFx0XHRcdFx0fVxuIFx0XHRcdFx0XHRmb3IgKGkgPSAwOyBpIDwgY2FsbGJhY2tzLmxlbmd0aDsgaSsrKSB7XG4gXHRcdFx0XHRcdFx0Y2IgPSBjYWxsYmFja3NbaV07XG4gXHRcdFx0XHRcdFx0dHJ5IHtcbiBcdFx0XHRcdFx0XHRcdGNiKG1vZHVsZU91dGRhdGVkRGVwZW5kZW5jaWVzKTtcbiBcdFx0XHRcdFx0XHR9IGNhdGNoIChlcnIpIHtcbiBcdFx0XHRcdFx0XHRcdGlmIChvcHRpb25zLm9uRXJyb3JlZCkge1xuIFx0XHRcdFx0XHRcdFx0XHRvcHRpb25zLm9uRXJyb3JlZCh7XG4gXHRcdFx0XHRcdFx0XHRcdFx0dHlwZTogXCJhY2NlcHQtZXJyb3JlZFwiLFxuIFx0XHRcdFx0XHRcdFx0XHRcdG1vZHVsZUlkOiBtb2R1bGVJZCxcbiBcdFx0XHRcdFx0XHRcdFx0XHRkZXBlbmRlbmN5SWQ6IG1vZHVsZU91dGRhdGVkRGVwZW5kZW5jaWVzW2ldLFxuIFx0XHRcdFx0XHRcdFx0XHRcdGVycm9yOiBlcnJcbiBcdFx0XHRcdFx0XHRcdFx0fSk7XG4gXHRcdFx0XHRcdFx0XHR9XG4gXHRcdFx0XHRcdFx0XHRpZiAoIW9wdGlvbnMuaWdub3JlRXJyb3JlZCkge1xuIFx0XHRcdFx0XHRcdFx0XHRpZiAoIWVycm9yKSBlcnJvciA9IGVycjtcbiBcdFx0XHRcdFx0XHRcdH1cbiBcdFx0XHRcdFx0XHR9XG4gXHRcdFx0XHRcdH1cbiBcdFx0XHRcdH1cbiBcdFx0XHR9XG4gXHRcdH1cblxuIFx0XHQvLyBMb2FkIHNlbGYgYWNjZXB0ZWQgbW9kdWxlc1xuIFx0XHRmb3IgKGkgPSAwOyBpIDwgb3V0ZGF0ZWRTZWxmQWNjZXB0ZWRNb2R1bGVzLmxlbmd0aDsgaSsrKSB7XG4gXHRcdFx0dmFyIGl0ZW0gPSBvdXRkYXRlZFNlbGZBY2NlcHRlZE1vZHVsZXNbaV07XG4gXHRcdFx0bW9kdWxlSWQgPSBpdGVtLm1vZHVsZTtcbiBcdFx0XHRob3RDdXJyZW50UGFyZW50cyA9IFttb2R1bGVJZF07XG4gXHRcdFx0dHJ5IHtcbiBcdFx0XHRcdF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpO1xuIFx0XHRcdH0gY2F0Y2ggKGVycikge1xuIFx0XHRcdFx0aWYgKHR5cGVvZiBpdGVtLmVycm9ySGFuZGxlciA9PT0gXCJmdW5jdGlvblwiKSB7XG4gXHRcdFx0XHRcdHRyeSB7XG4gXHRcdFx0XHRcdFx0aXRlbS5lcnJvckhhbmRsZXIoZXJyKTtcbiBcdFx0XHRcdFx0fSBjYXRjaCAoZXJyMikge1xuIFx0XHRcdFx0XHRcdGlmIChvcHRpb25zLm9uRXJyb3JlZCkge1xuIFx0XHRcdFx0XHRcdFx0b3B0aW9ucy5vbkVycm9yZWQoe1xuIFx0XHRcdFx0XHRcdFx0XHR0eXBlOiBcInNlbGYtYWNjZXB0LWVycm9yLWhhbmRsZXItZXJyb3JlZFwiLFxuIFx0XHRcdFx0XHRcdFx0XHRtb2R1bGVJZDogbW9kdWxlSWQsXG4gXHRcdFx0XHRcdFx0XHRcdGVycm9yOiBlcnIyLFxuIFx0XHRcdFx0XHRcdFx0XHRvcmlnaW5hbEVycm9yOiBlcnJcbiBcdFx0XHRcdFx0XHRcdH0pO1xuIFx0XHRcdFx0XHRcdH1cbiBcdFx0XHRcdFx0XHRpZiAoIW9wdGlvbnMuaWdub3JlRXJyb3JlZCkge1xuIFx0XHRcdFx0XHRcdFx0aWYgKCFlcnJvcikgZXJyb3IgPSBlcnIyO1xuIFx0XHRcdFx0XHRcdH1cbiBcdFx0XHRcdFx0XHRpZiAoIWVycm9yKSBlcnJvciA9IGVycjtcbiBcdFx0XHRcdFx0fVxuIFx0XHRcdFx0fSBlbHNlIHtcbiBcdFx0XHRcdFx0aWYgKG9wdGlvbnMub25FcnJvcmVkKSB7XG4gXHRcdFx0XHRcdFx0b3B0aW9ucy5vbkVycm9yZWQoe1xuIFx0XHRcdFx0XHRcdFx0dHlwZTogXCJzZWxmLWFjY2VwdC1lcnJvcmVkXCIsXG4gXHRcdFx0XHRcdFx0XHRtb2R1bGVJZDogbW9kdWxlSWQsXG4gXHRcdFx0XHRcdFx0XHRlcnJvcjogZXJyXG4gXHRcdFx0XHRcdFx0fSk7XG4gXHRcdFx0XHRcdH1cbiBcdFx0XHRcdFx0aWYgKCFvcHRpb25zLmlnbm9yZUVycm9yZWQpIHtcbiBcdFx0XHRcdFx0XHRpZiAoIWVycm9yKSBlcnJvciA9IGVycjtcbiBcdFx0XHRcdFx0fVxuIFx0XHRcdFx0fVxuIFx0XHRcdH1cbiBcdFx0fVxuXG4gXHRcdC8vIGhhbmRsZSBlcnJvcnMgaW4gYWNjZXB0IGhhbmRsZXJzIGFuZCBzZWxmIGFjY2VwdGVkIG1vZHVsZSBsb2FkXG4gXHRcdGlmIChlcnJvcikge1xuIFx0XHRcdGhvdFNldFN0YXR1cyhcImZhaWxcIik7XG4gXHRcdFx0cmV0dXJuIFByb21pc2UucmVqZWN0KGVycm9yKTtcbiBcdFx0fVxuXG4gXHRcdGhvdFNldFN0YXR1cyhcImlkbGVcIik7XG4gXHRcdHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlKSB7XG4gXHRcdFx0cmVzb2x2ZShvdXRkYXRlZE1vZHVsZXMpO1xuIFx0XHR9KTtcbiBcdH1cblxuIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge30sXG4gXHRcdFx0aG90OiBob3RDcmVhdGVNb2R1bGUobW9kdWxlSWQpLFxuIFx0XHRcdHBhcmVudHM6IChob3RDdXJyZW50UGFyZW50c1RlbXAgPSBob3RDdXJyZW50UGFyZW50cywgaG90Q3VycmVudFBhcmVudHMgPSBbXSwgaG90Q3VycmVudFBhcmVudHNUZW1wKSxcbiBcdFx0XHRjaGlsZHJlbjogW11cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgaG90Q3JlYXRlUmVxdWlyZShtb2R1bGVJZCkpO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbiBcdFx0fVxuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuIFx0fTtcblxuIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbiBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbiBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbiBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbiBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4gXHRcdHJldHVybiBucztcbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiZGlzdFwiO1xuXG4gXHQvLyBfX3dlYnBhY2tfaGFzaF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmggPSBmdW5jdGlvbigpIHsgcmV0dXJuIGhvdEN1cnJlbnRIYXNoOyB9O1xuXG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIGhvdENyZWF0ZVJlcXVpcmUoXCIuL3NyYy9qcy9pbmRleC5qc1wiKShfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSBcIi4vc3JjL2pzL2luZGV4LmpzXCIpO1xuIiwiLyogZXNsaW50LWRpc2FibGUgY29tcGxleGl0eSAqL1xuLyoqXG4gKiBAZmlsZW92ZXJ2aWV3IFJldHVybnMgdGhlIGZpcnN0IGluZGV4IGF0IHdoaWNoIGEgZ2l2ZW4gZWxlbWVudCBjYW4gYmUgZm91bmQgaW4gdGhlIGFycmF5LlxuICogQGF1dGhvciBOSE4gRkUgRGV2ZWxvcG1lbnQgTGFiIDxkbF9qYXZhc2NyaXB0QG5obi5jb20+XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4uL3R5cGUvaXNBcnJheScpO1xuXG4vKipcbiAqIEBtb2R1bGUgYXJyYXlcbiAqL1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGZpcnN0IGluZGV4IGF0IHdoaWNoIGEgZ2l2ZW4gZWxlbWVudCBjYW4gYmUgZm91bmQgaW4gdGhlIGFycmF5XG4gKiBmcm9tIHN0YXJ0IGluZGV4KGRlZmF1bHQgMCksIG9yIC0xIGlmIGl0IGlzIG5vdCBwcmVzZW50LlxuICogSXQgY29tcGFyZXMgc2VhcmNoRWxlbWVudCB0byBlbGVtZW50cyBvZiB0aGUgQXJyYXkgdXNpbmcgc3RyaWN0IGVxdWFsaXR5XG4gKiAodGhlIHNhbWUgbWV0aG9kIHVzZWQgYnkgdGhlID09PSwgb3IgdHJpcGxlLWVxdWFscywgb3BlcmF0b3IpLlxuICogQHBhcmFtIHsqfSBzZWFyY2hFbGVtZW50IEVsZW1lbnQgdG8gbG9jYXRlIGluIHRoZSBhcnJheVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgQXJyYXkgdGhhdCB3aWxsIGJlIHRyYXZlcnNlZC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydEluZGV4IFN0YXJ0IGluZGV4IGluIGFycmF5IGZvciBzZWFyY2hpbmcgKGRlZmF1bHQgMClcbiAqIEByZXR1cm5zIHtudW1iZXJ9IHRoZSBGaXJzdCBpbmRleCBhdCB3aGljaCBhIGdpdmVuIGVsZW1lbnQsIG9yIC0xIGlmIGl0IGlzIG5vdCBwcmVzZW50XG4gKiBAbWVtYmVyb2YgbW9kdWxlOmFycmF5XG4gKiBAZXhhbXBsZVxuICogdmFyIGluQXJyYXkgPSByZXF1aXJlKCd0dWktY29kZS1zbmlwcGV0L2FycmF5L2luQXJyYXknKTsgLy8gbm9kZSwgY29tbW9uanNcbiAqXG4gKiB2YXIgYXJyID0gWydvbmUnLCAndHdvJywgJ3RocmVlJywgJ2ZvdXInXTtcbiAqIHZhciBpZHgxID0gaW5BcnJheSgnb25lJywgYXJyLCAzKTsgLy8gLTFcbiAqIHZhciBpZHgyID0gaW5BcnJheSgnb25lJywgYXJyKTsgLy8gMFxuICovXG5mdW5jdGlvbiBpbkFycmF5KHNlYXJjaEVsZW1lbnQsIGFycmF5LCBzdGFydEluZGV4KSB7XG4gICAgdmFyIGk7XG4gICAgdmFyIGxlbmd0aDtcbiAgICBzdGFydEluZGV4ID0gc3RhcnRJbmRleCB8fCAwO1xuXG4gICAgaWYgKCFpc0FycmF5KGFycmF5KSkge1xuICAgICAgICByZXR1cm4gLTE7XG4gICAgfVxuXG4gICAgaWYgKEFycmF5LnByb3RvdHlwZS5pbmRleE9mKSB7XG4gICAgICAgIHJldHVybiBBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKGFycmF5LCBzZWFyY2hFbGVtZW50LCBzdGFydEluZGV4KTtcbiAgICB9XG5cbiAgICBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG4gICAgZm9yIChpID0gc3RhcnRJbmRleDsgc3RhcnRJbmRleCA+PSAwICYmIGkgPCBsZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICBpZiAoYXJyYXlbaV0gPT09IHNlYXJjaEVsZW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIC0xO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGluQXJyYXk7XG4iLCIvKipcbiAqIEBmaWxlb3ZlcnZpZXcgRXhlY3V0ZSB0aGUgcHJvdmlkZWQgY2FsbGJhY2sgb25jZSBmb3IgZWFjaCBwcm9wZXJ0eSBvZiBvYmplY3Qob3IgZWxlbWVudCBvZiBhcnJheSkgd2hpY2ggYWN0dWFsbHkgZXhpc3QuXG4gKiBAYXV0aG9yIE5ITiBGRSBEZXZlbG9wbWVudCBMYWIgPGRsX2phdmFzY3JpcHRAbmhuLmNvbT5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi4vdHlwZS9pc0FycmF5Jyk7XG52YXIgZm9yRWFjaEFycmF5ID0gcmVxdWlyZSgnLi4vY29sbGVjdGlvbi9mb3JFYWNoQXJyYXknKTtcbnZhciBmb3JFYWNoT3duUHJvcGVydGllcyA9IHJlcXVpcmUoJy4uL2NvbGxlY3Rpb24vZm9yRWFjaE93blByb3BlcnRpZXMnKTtcblxuLyoqXG4gKiBAbW9kdWxlIGNvbGxlY3Rpb25cbiAqL1xuXG4vKipcbiAqIEV4ZWN1dGUgdGhlIHByb3ZpZGVkIGNhbGxiYWNrIG9uY2UgZm9yIGVhY2ggcHJvcGVydHkgb2Ygb2JqZWN0KG9yIGVsZW1lbnQgb2YgYXJyYXkpIHdoaWNoIGFjdHVhbGx5IGV4aXN0LlxuICogSWYgdGhlIG9iamVjdCBpcyBBcnJheS1saWtlIG9iamVjdChleC1hcmd1bWVudHMgb2JqZWN0KSwgSXQgbmVlZHMgdG8gdHJhbnNmb3JtIHRvIEFycmF5LihzZWUgJ2V4Micgb2YgZXhhbXBsZSkuXG4gKiBJZiB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gcmV0dXJucyBmYWxzZSwgdGhlIGxvb3Agd2lsbCBiZSBzdG9wcGVkLlxuICogQ2FsbGJhY2sgZnVuY3Rpb24oaXRlcmF0ZWUpIGlzIGludm9rZWQgd2l0aCB0aHJlZSBhcmd1bWVudHM6XG4gKiAgLSBUaGUgdmFsdWUgb2YgdGhlIHByb3BlcnR5KG9yIFRoZSB2YWx1ZSBvZiB0aGUgZWxlbWVudClcbiAqICAtIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eShvciBUaGUgaW5kZXggb2YgdGhlIGVsZW1lbnQpXG4gKiAgLSBUaGUgb2JqZWN0IGJlaW5nIHRyYXZlcnNlZFxuICogQHBhcmFtIHtPYmplY3R9IG9iaiBUaGUgb2JqZWN0IHRoYXQgd2lsbCBiZSB0cmF2ZXJzZWRcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGl0ZXJhdGVlIENhbGxiYWNrIGZ1bmN0aW9uXG4gKiBAcGFyYW0ge09iamVjdH0gW2NvbnRleHRdIENvbnRleHQodGhpcykgb2YgY2FsbGJhY2sgZnVuY3Rpb25cbiAqIEBtZW1iZXJvZiBtb2R1bGU6Y29sbGVjdGlvblxuICogQGV4YW1wbGVcbiAqIHZhciBmb3JFYWNoID0gcmVxdWlyZSgndHVpLWNvZGUtc25pcHBldC9jb2xsZWN0aW9uL2ZvckVhY2gnKTsgLy8gbm9kZSwgY29tbW9uanNcbiAqXG4gKiB2YXIgc3VtID0gMDtcbiAqXG4gKiBmb3JFYWNoKFsxLDIsM10sIGZ1bmN0aW9uKHZhbHVlKXtcbiAqICAgICBzdW0gKz0gdmFsdWU7XG4gKiB9KTtcbiAqIGFsZXJ0KHN1bSk7IC8vIDZcbiAqXG4gKiAvLyBJbiBjYXNlIG9mIEFycmF5LWxpa2Ugb2JqZWN0XG4gKiB2YXIgYXJyYXkgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcnJheUxpa2UpOyAvLyBjaGFuZ2UgdG8gYXJyYXlcbiAqIGZvckVhY2goYXJyYXksIGZ1bmN0aW9uKHZhbHVlKXtcbiAqICAgICBzdW0gKz0gdmFsdWU7XG4gKiB9KTtcbiAqL1xuZnVuY3Rpb24gZm9yRWFjaChvYmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgaWYgKGlzQXJyYXkob2JqKSkge1xuICAgICAgICBmb3JFYWNoQXJyYXkob2JqLCBpdGVyYXRlZSwgY29udGV4dCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZm9yRWFjaE93blByb3BlcnRpZXMob2JqLCBpdGVyYXRlZSwgY29udGV4dCk7XG4gICAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZvckVhY2g7XG4iLCIvKipcbiAqIEBmaWxlb3ZlcnZpZXcgRXhlY3V0ZSB0aGUgcHJvdmlkZWQgY2FsbGJhY2sgb25jZSBmb3IgZWFjaCBlbGVtZW50IHByZXNlbnQgaW4gdGhlIGFycmF5KG9yIEFycmF5LWxpa2Ugb2JqZWN0KSBpbiBhc2NlbmRpbmcgb3JkZXIuXG4gKiBAYXV0aG9yIE5ITiBGRSBEZXZlbG9wbWVudCBMYWIgPGRsX2phdmFzY3JpcHRAbmhuLmNvbT5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbi8qKlxuICogRXhlY3V0ZSB0aGUgcHJvdmlkZWQgY2FsbGJhY2sgb25jZSBmb3IgZWFjaCBlbGVtZW50IHByZXNlbnRcbiAqIGluIHRoZSBhcnJheShvciBBcnJheS1saWtlIG9iamVjdCkgaW4gYXNjZW5kaW5nIG9yZGVyLlxuICogSWYgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHJldHVybnMgZmFsc2UsIHRoZSBsb29wIHdpbGwgYmUgc3RvcHBlZC5cbiAqIENhbGxiYWNrIGZ1bmN0aW9uKGl0ZXJhdGVlKSBpcyBpbnZva2VkIHdpdGggdGhyZWUgYXJndW1lbnRzOlxuICogIC0gVGhlIHZhbHVlIG9mIHRoZSBlbGVtZW50XG4gKiAgLSBUaGUgaW5kZXggb2YgdGhlIGVsZW1lbnRcbiAqICAtIFRoZSBhcnJheShvciBBcnJheS1saWtlIG9iamVjdCkgYmVpbmcgdHJhdmVyc2VkXG4gKiBAcGFyYW0ge0FycmF5fSBhcnIgVGhlIGFycmF5KG9yIEFycmF5LWxpa2Ugb2JqZWN0KSB0aGF0IHdpbGwgYmUgdHJhdmVyc2VkXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBpdGVyYXRlZSBDYWxsYmFjayBmdW5jdGlvblxuICogQHBhcmFtIHtPYmplY3R9IFtjb250ZXh0XSBDb250ZXh0KHRoaXMpIG9mIGNhbGxiYWNrIGZ1bmN0aW9uXG4gKiBAbWVtYmVyb2YgbW9kdWxlOmNvbGxlY3Rpb25cbiAqIEBleGFtcGxlXG4gKiB2YXIgZm9yRWFjaEFycmF5ID0gcmVxdWlyZSgndHVpLWNvZGUtc25pcHBldC9jb2xsZWN0aW9uL2ZvckVhY2hBcnJheScpOyAvLyBub2RlLCBjb21tb25qc1xuICpcbiAqIHZhciBzdW0gPSAwO1xuICpcbiAqIGZvckVhY2hBcnJheShbMSwyLDNdLCBmdW5jdGlvbih2YWx1ZSl7XG4gKiAgICAgc3VtICs9IHZhbHVlO1xuICogfSk7XG4gKiBhbGVydChzdW0pOyAvLyA2XG4gKi9cbmZ1bmN0aW9uIGZvckVhY2hBcnJheShhcnIsIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgbGVuID0gYXJyLmxlbmd0aDtcblxuICAgIGNvbnRleHQgPSBjb250ZXh0IHx8IG51bGw7XG5cbiAgICBmb3IgKDsgaW5kZXggPCBsZW47IGluZGV4ICs9IDEpIHtcbiAgICAgICAgaWYgKGl0ZXJhdGVlLmNhbGwoY29udGV4dCwgYXJyW2luZGV4XSwgaW5kZXgsIGFycikgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmb3JFYWNoQXJyYXk7XG4iLCIvKipcbiAqIEBmaWxlb3ZlcnZpZXcgRXhlY3V0ZSB0aGUgcHJvdmlkZWQgY2FsbGJhY2sgb25jZSBmb3IgZWFjaCBwcm9wZXJ0eSBvZiBvYmplY3Qgd2hpY2ggYWN0dWFsbHkgZXhpc3QuXG4gKiBAYXV0aG9yIE5ITiBGRSBEZXZlbG9wbWVudCBMYWIgPGRsX2phdmFzY3JpcHRAbmhuLmNvbT5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbi8qKlxuICogRXhlY3V0ZSB0aGUgcHJvdmlkZWQgY2FsbGJhY2sgb25jZSBmb3IgZWFjaCBwcm9wZXJ0eSBvZiBvYmplY3Qgd2hpY2ggYWN0dWFsbHkgZXhpc3QuXG4gKiBJZiB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gcmV0dXJucyBmYWxzZSwgdGhlIGxvb3Agd2lsbCBiZSBzdG9wcGVkLlxuICogQ2FsbGJhY2sgZnVuY3Rpb24oaXRlcmF0ZWUpIGlzIGludm9rZWQgd2l0aCB0aHJlZSBhcmd1bWVudHM6XG4gKiAgLSBUaGUgdmFsdWUgb2YgdGhlIHByb3BlcnR5XG4gKiAgLSBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHlcbiAqICAtIFRoZSBvYmplY3QgYmVpbmcgdHJhdmVyc2VkXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqIFRoZSBvYmplY3QgdGhhdCB3aWxsIGJlIHRyYXZlcnNlZFxuICogQHBhcmFtIHtmdW5jdGlvbn0gaXRlcmF0ZWUgIENhbGxiYWNrIGZ1bmN0aW9uXG4gKiBAcGFyYW0ge09iamVjdH0gW2NvbnRleHRdIENvbnRleHQodGhpcykgb2YgY2FsbGJhY2sgZnVuY3Rpb25cbiAqIEBtZW1iZXJvZiBtb2R1bGU6Y29sbGVjdGlvblxuICogQGV4YW1wbGVcbiAqIHZhciBmb3JFYWNoT3duUHJvcGVydGllcyA9IHJlcXVpcmUoJ3R1aS1jb2RlLXNuaXBwZXQvY29sbGVjdGlvbi9mb3JFYWNoT3duUHJvcGVydGllcycpOyAvLyBub2RlLCBjb21tb25qc1xuICpcbiAqIHZhciBzdW0gPSAwO1xuICpcbiAqIGZvckVhY2hPd25Qcm9wZXJ0aWVzKHthOjEsYjoyLGM6M30sIGZ1bmN0aW9uKHZhbHVlKXtcbiAqICAgICBzdW0gKz0gdmFsdWU7XG4gKiB9KTtcbiAqIGFsZXJ0KHN1bSk7IC8vIDZcbiAqL1xuZnVuY3Rpb24gZm9yRWFjaE93blByb3BlcnRpZXMob2JqLCBpdGVyYXRlZSwgY29udGV4dCkge1xuICAgIHZhciBrZXk7XG5cbiAgICBjb250ZXh0ID0gY29udGV4dCB8fCBudWxsO1xuXG4gICAgZm9yIChrZXkgaW4gb2JqKSB7XG4gICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICAgICAgaWYgKGl0ZXJhdGVlLmNhbGwoY29udGV4dCwgb2JqW2tleV0sIGtleSwgb2JqKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmb3JFYWNoT3duUHJvcGVydGllcztcbiIsIi8qKlxuICogQGZpbGVvdmVydmlldyBUcmFuc2Zvcm0gdGhlIEFycmF5LWxpa2Ugb2JqZWN0IHRvIEFycmF5LlxuICogQGF1dGhvciBOSE4gRkUgRGV2ZWxvcG1lbnQgTGFiIDxkbF9qYXZhc2NyaXB0QG5obi5jb20+XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgZm9yRWFjaEFycmF5ID0gcmVxdWlyZSgnLi9mb3JFYWNoQXJyYXknKTtcblxuLyoqXG4gKiBUcmFuc2Zvcm0gdGhlIEFycmF5LWxpa2Ugb2JqZWN0IHRvIEFycmF5LlxuICogSW4gbG93IElFIChiZWxvdyA4KSwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwgaXMgbm90IHBlcmZlY3QuIFNvLCB0cnktY2F0Y2ggc3RhdGVtZW50IGlzIHVzZWQuXG4gKiBAcGFyYW0geyp9IGFycmF5TGlrZSBBcnJheS1saWtlIG9iamVjdFxuICogQHJldHVybnMge0FycmF5fSBBcnJheVxuICogQG1lbWJlcm9mIG1vZHVsZTpjb2xsZWN0aW9uXG4gKiBAZXhhbXBsZVxuICogdmFyIHRvQXJyYXkgPSByZXF1aXJlKCd0dWktY29kZS1zbmlwcGV0L2NvbGxlY3Rpb24vdG9BcnJheScpOyAvLyBub2RlLCBjb21tb25qc1xuICpcbiAqIHZhciBhcnJheUxpa2UgPSB7XG4gKiAgICAgMDogJ29uZScsXG4gKiAgICAgMTogJ3R3bycsXG4gKiAgICAgMjogJ3RocmVlJyxcbiAqICAgICAzOiAnZm91cicsXG4gKiAgICAgbGVuZ3RoOiA0XG4gKiB9O1xuICogdmFyIHJlc3VsdCA9IHRvQXJyYXkoYXJyYXlMaWtlKTtcbiAqXG4gKiBhbGVydChyZXN1bHQgaW5zdGFuY2VvZiBBcnJheSk7IC8vIHRydWVcbiAqIGFsZXJ0KHJlc3VsdCk7IC8vIG9uZSx0d28sdGhyZWUsZm91clxuICovXG5mdW5jdGlvbiB0b0FycmF5KGFycmF5TGlrZSkge1xuICAgIHZhciBhcnI7XG4gICAgdHJ5IHtcbiAgICAgICAgYXJyID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJyYXlMaWtlKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGFyciA9IFtdO1xuICAgICAgICBmb3JFYWNoQXJyYXkoYXJyYXlMaWtlLCBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICAgICAgYXJyLnB1c2godmFsdWUpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXJyO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHRvQXJyYXk7XG4iLCIvKipcbiAqIEBmaWxlb3ZlcnZpZXcgVGhpcyBtb2R1bGUgcHJvdmlkZXMgc29tZSBmdW5jdGlvbnMgZm9yIGN1c3RvbSBldmVudHMuIEFuZCBpdCBpcyBpbXBsZW1lbnRlZCBpbiB0aGUgb2JzZXJ2ZXIgZGVzaWduIHBhdHRlcm4uXG4gKiBAYXV0aG9yIE5ITiBGRSBEZXZlbG9wbWVudCBMYWIgPGRsX2phdmFzY3JpcHRAbmhuLmNvbT5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBleHRlbmQgPSByZXF1aXJlKCcuLi9vYmplY3QvZXh0ZW5kJyk7XG52YXIgaXNFeGlzdHkgPSByZXF1aXJlKCcuLi90eXBlL2lzRXhpc3R5Jyk7XG52YXIgaXNTdHJpbmcgPSByZXF1aXJlKCcuLi90eXBlL2lzU3RyaW5nJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi90eXBlL2lzT2JqZWN0Jyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4uL3R5cGUvaXNBcnJheScpO1xudmFyIGlzRnVuY3Rpb24gPSByZXF1aXJlKCcuLi90eXBlL2lzRnVuY3Rpb24nKTtcbnZhciBmb3JFYWNoID0gcmVxdWlyZSgnLi4vY29sbGVjdGlvbi9mb3JFYWNoJyk7XG5cbnZhciBSX0VWRU5UTkFNRV9TUExJVCA9IC9cXHMrL2c7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAZXhhbXBsZVxuICogLy8gbm9kZSwgY29tbW9uanNcbiAqIHZhciBDdXN0b21FdmVudHMgPSByZXF1aXJlKCd0dWktY29kZS1zbmlwcGV0L2N1c3RvbUV2ZW50cy9jdXN0b21FdmVudHMnKTtcbiAqL1xuZnVuY3Rpb24gQ3VzdG9tRXZlbnRzKCkge1xuICAgIC8qKlxuICAgICAqIEB0eXBlIHtIYW5kbGVySXRlbVtdfVxuICAgICAqL1xuICAgIHRoaXMuZXZlbnRzID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIG9ubHkgZm9yIGNoZWNraW5nIHNwZWNpZmljIGNvbnRleHQgZXZlbnQgd2FzIGJpbmRlZFxuICAgICAqIEB0eXBlIHtvYmplY3RbXX1cbiAgICAgKi9cbiAgICB0aGlzLmNvbnRleHRzID0gbnVsbDtcbn1cblxuLyoqXG4gKiBNaXhpbiBjdXN0b20gZXZlbnRzIGZlYXR1cmUgdG8gc3BlY2lmaWMgY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGZ1bmMgLSBjb25zdHJ1Y3RvclxuICogQGV4YW1wbGVcbiAqIHZhciBDdXN0b21FdmVudHMgPSByZXF1aXJlKCd0dWktY29kZS1zbmlwcGV0L2N1c3RvbUV2ZW50cy9jdXN0b21FdmVudHMnKTsgLy8gbm9kZSwgY29tbW9uanNcbiAqXG4gKiB2YXIgbW9kZWw7XG4gKiBmdW5jdGlvbiBNb2RlbCgpIHtcbiAqICAgICB0aGlzLm5hbWUgPSAnJztcbiAqIH1cbiAqIEN1c3RvbUV2ZW50cy5taXhpbihNb2RlbCk7XG4gKlxuICogbW9kZWwgPSBuZXcgTW9kZWwoKTtcbiAqIG1vZGVsLm9uKCdjaGFuZ2UnLCBmdW5jdGlvbigpIHsgdGhpcy5uYW1lID0gJ21vZGVsJzsgfSwgdGhpcyk7XG4gKiBtb2RlbC5maXJlKCdjaGFuZ2UnKTtcbiAqIGFsZXJ0KG1vZGVsLm5hbWUpOyAvLyAnbW9kZWwnO1xuICovXG5DdXN0b21FdmVudHMubWl4aW4gPSBmdW5jdGlvbihmdW5jKSB7XG4gICAgZXh0ZW5kKGZ1bmMucHJvdG90eXBlLCBDdXN0b21FdmVudHMucHJvdG90eXBlKTtcbn07XG5cbi8qKlxuICogR2V0IEhhbmRsZXJJdGVtIG9iamVjdFxuICogQHBhcmFtIHtmdW5jdGlvbn0gaGFuZGxlciAtIGhhbmRsZXIgZnVuY3Rpb25cbiAqIEBwYXJhbSB7b2JqZWN0fSBbY29udGV4dF0gLSBjb250ZXh0IGZvciBoYW5kbGVyXG4gKiBAcmV0dXJucyB7SGFuZGxlckl0ZW19IEhhbmRsZXJJdGVtIG9iamVjdFxuICogQHByaXZhdGVcbiAqL1xuQ3VzdG9tRXZlbnRzLnByb3RvdHlwZS5fZ2V0SGFuZGxlckl0ZW0gPSBmdW5jdGlvbihoYW5kbGVyLCBjb250ZXh0KSB7XG4gICAgdmFyIGl0ZW0gPSB7aGFuZGxlcjogaGFuZGxlcn07XG5cbiAgICBpZiAoY29udGV4dCkge1xuICAgICAgICBpdGVtLmNvbnRleHQgPSBjb250ZXh0O1xuICAgIH1cblxuICAgIHJldHVybiBpdGVtO1xufTtcblxuLyoqXG4gKiBHZXQgZXZlbnQgb2JqZWN0IHNhZmVseVxuICogQHBhcmFtIHtzdHJpbmd9IFtldmVudE5hbWVdIC0gY3JlYXRlIHN1YiBldmVudCBtYXAgaWYgbm90IGV4aXN0LlxuICogQHJldHVybnMgeyhvYmplY3R8YXJyYXkpfSBldmVudCBvYmplY3QuIGlmIHlvdSBzdXBwbGllZCBgZXZlbnROYW1lYFxuICogIHBhcmFtZXRlciB0aGVuIG1ha2UgbmV3IGFycmF5IGFuZCByZXR1cm4gaXRcbiAqIEBwcml2YXRlXG4gKi9cbkN1c3RvbUV2ZW50cy5wcm90b3R5cGUuX3NhZmVFdmVudCA9IGZ1bmN0aW9uKGV2ZW50TmFtZSkge1xuICAgIHZhciBldmVudHMgPSB0aGlzLmV2ZW50cztcbiAgICB2YXIgYnlOYW1lO1xuXG4gICAgaWYgKCFldmVudHMpIHtcbiAgICAgICAgZXZlbnRzID0gdGhpcy5ldmVudHMgPSB7fTtcbiAgICB9XG5cbiAgICBpZiAoZXZlbnROYW1lKSB7XG4gICAgICAgIGJ5TmFtZSA9IGV2ZW50c1tldmVudE5hbWVdO1xuXG4gICAgICAgIGlmICghYnlOYW1lKSB7XG4gICAgICAgICAgICBieU5hbWUgPSBbXTtcbiAgICAgICAgICAgIGV2ZW50c1tldmVudE5hbWVdID0gYnlOYW1lO1xuICAgICAgICB9XG5cbiAgICAgICAgZXZlbnRzID0gYnlOYW1lO1xuICAgIH1cblxuICAgIHJldHVybiBldmVudHM7XG59O1xuXG4vKipcbiAqIEdldCBjb250ZXh0IGFycmF5IHNhZmVseVxuICogQHJldHVybnMge2FycmF5fSBjb250ZXh0IGFycmF5XG4gKiBAcHJpdmF0ZVxuICovXG5DdXN0b21FdmVudHMucHJvdG90eXBlLl9zYWZlQ29udGV4dCA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBjb250ZXh0ID0gdGhpcy5jb250ZXh0cztcblxuICAgIGlmICghY29udGV4dCkge1xuICAgICAgICBjb250ZXh0ID0gdGhpcy5jb250ZXh0cyA9IFtdO1xuICAgIH1cblxuICAgIHJldHVybiBjb250ZXh0O1xufTtcblxuLyoqXG4gKiBHZXQgaW5kZXggb2YgY29udGV4dFxuICogQHBhcmFtIHtvYmplY3R9IGN0eCAtIGNvbnRleHQgdGhhdCB1c2VkIGZvciBiaW5kIGN1c3RvbSBldmVudFxuICogQHJldHVybnMge251bWJlcn0gaW5kZXggb2YgY29udGV4dFxuICogQHByaXZhdGVcbiAqL1xuQ3VzdG9tRXZlbnRzLnByb3RvdHlwZS5faW5kZXhPZkNvbnRleHQgPSBmdW5jdGlvbihjdHgpIHtcbiAgICB2YXIgY29udGV4dCA9IHRoaXMuX3NhZmVDb250ZXh0KCk7XG4gICAgdmFyIGluZGV4ID0gMDtcblxuICAgIHdoaWxlIChjb250ZXh0W2luZGV4XSkge1xuICAgICAgICBpZiAoY3R4ID09PSBjb250ZXh0W2luZGV4XVswXSkge1xuICAgICAgICAgICAgcmV0dXJuIGluZGV4O1xuICAgICAgICB9XG5cbiAgICAgICAgaW5kZXggKz0gMTtcbiAgICB9XG5cbiAgICByZXR1cm4gLTE7XG59O1xuXG4vKipcbiAqIE1lbW9yaXplIHN1cHBsaWVkIGNvbnRleHQgZm9yIHJlY29nbml6ZSBzdXBwbGllZCBvYmplY3QgaXMgY29udGV4dCBvclxuICogIG5hbWU6IGhhbmRsZXIgcGFpciBvYmplY3Qgd2hlbiBvZmYoKVxuICogQHBhcmFtIHtvYmplY3R9IGN0eCAtIGNvbnRleHQgb2JqZWN0IHRvIG1lbW9yaXplXG4gKiBAcHJpdmF0ZVxuICovXG5DdXN0b21FdmVudHMucHJvdG90eXBlLl9tZW1vcml6ZUNvbnRleHQgPSBmdW5jdGlvbihjdHgpIHtcbiAgICB2YXIgY29udGV4dCwgaW5kZXg7XG5cbiAgICBpZiAoIWlzRXhpc3R5KGN0eCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnRleHQgPSB0aGlzLl9zYWZlQ29udGV4dCgpO1xuICAgIGluZGV4ID0gdGhpcy5faW5kZXhPZkNvbnRleHQoY3R4KTtcblxuICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICAgIGNvbnRleHRbaW5kZXhdWzFdICs9IDE7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgY29udGV4dC5wdXNoKFtjdHgsIDFdKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIEZvcmdldCBzdXBwbGllZCBjb250ZXh0IG9iamVjdFxuICogQHBhcmFtIHtvYmplY3R9IGN0eCAtIGNvbnRleHQgb2JqZWN0IHRvIGZvcmdldFxuICogQHByaXZhdGVcbiAqL1xuQ3VzdG9tRXZlbnRzLnByb3RvdHlwZS5fZm9yZ2V0Q29udGV4dCA9IGZ1bmN0aW9uKGN0eCkge1xuICAgIHZhciBjb250ZXh0LCBjb250ZXh0SW5kZXg7XG5cbiAgICBpZiAoIWlzRXhpc3R5KGN0eCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnRleHQgPSB0aGlzLl9zYWZlQ29udGV4dCgpO1xuICAgIGNvbnRleHRJbmRleCA9IHRoaXMuX2luZGV4T2ZDb250ZXh0KGN0eCk7XG5cbiAgICBpZiAoY29udGV4dEluZGV4ID4gLTEpIHtcbiAgICAgICAgY29udGV4dFtjb250ZXh0SW5kZXhdWzFdIC09IDE7XG5cbiAgICAgICAgaWYgKGNvbnRleHRbY29udGV4dEluZGV4XVsxXSA8PSAwKSB7XG4gICAgICAgICAgICBjb250ZXh0LnNwbGljZShjb250ZXh0SW5kZXgsIDEpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBCaW5kIGV2ZW50IGhhbmRsZXJcbiAqIEBwYXJhbSB7KHN0cmluZ3x7bmFtZTpzdHJpbmcsIGhhbmRsZXI6ZnVuY3Rpb259KX0gZXZlbnROYW1lIC0gY3VzdG9tXG4gKiAgZXZlbnQgbmFtZSBvciBhbiBvYmplY3Qge2V2ZW50TmFtZTogaGFuZGxlcn1cbiAqIEBwYXJhbSB7KGZ1bmN0aW9ufG9iamVjdCl9IFtoYW5kbGVyXSAtIGhhbmRsZXIgZnVuY3Rpb24gb3IgY29udGV4dFxuICogQHBhcmFtIHtvYmplY3R9IFtjb250ZXh0XSAtIGNvbnRleHQgZm9yIGJpbmRpbmdcbiAqIEBwcml2YXRlXG4gKi9cbkN1c3RvbUV2ZW50cy5wcm90b3R5cGUuX2JpbmRFdmVudCA9IGZ1bmN0aW9uKGV2ZW50TmFtZSwgaGFuZGxlciwgY29udGV4dCkge1xuICAgIHZhciBldmVudHMgPSB0aGlzLl9zYWZlRXZlbnQoZXZlbnROYW1lKTtcbiAgICB0aGlzLl9tZW1vcml6ZUNvbnRleHQoY29udGV4dCk7XG4gICAgZXZlbnRzLnB1c2godGhpcy5fZ2V0SGFuZGxlckl0ZW0oaGFuZGxlciwgY29udGV4dCkpO1xufTtcblxuLyoqXG4gKiBCaW5kIGV2ZW50IGhhbmRsZXJzXG4gKiBAcGFyYW0geyhzdHJpbmd8e25hbWU6c3RyaW5nLCBoYW5kbGVyOmZ1bmN0aW9ufSl9IGV2ZW50TmFtZSAtIGN1c3RvbVxuICogIGV2ZW50IG5hbWUgb3IgYW4gb2JqZWN0IHtldmVudE5hbWU6IGhhbmRsZXJ9XG4gKiBAcGFyYW0geyhmdW5jdGlvbnxvYmplY3QpfSBbaGFuZGxlcl0gLSBoYW5kbGVyIGZ1bmN0aW9uIG9yIGNvbnRleHRcbiAqIEBwYXJhbSB7b2JqZWN0fSBbY29udGV4dF0gLSBjb250ZXh0IGZvciBiaW5kaW5nXG4gKiAvLy0tICMxLiBHZXQgTW9kdWxlIC0tLy9cbiAqIHZhciBDdXN0b21FdmVudHMgPSByZXF1aXJlKCd0dWktY29kZS1zbmlwcGV0L2N1c3RvbUV2ZW50cy9jdXN0b21FdmVudHMnKTsgLy8gbm9kZSwgY29tbW9uanNcbiAqXG4gKiAvLy0tICMyLiBVc2UgbWV0aG9kIC0tLy9cbiAqIC8vICMgMi4xIEJhc2ljIFVzYWdlXG4gKiBDdXN0b21FdmVudHMub24oJ29ubG9hZCcsIGhhbmRsZXIpO1xuICpcbiAqIC8vICMgMi4yIFdpdGggY29udGV4dFxuICogQ3VzdG9tRXZlbnRzLm9uKCdvbmxvYWQnLCBoYW5kbGVyLCBteU9iaik7XG4gKlxuICogLy8gIyAyLjMgQmluZCBieSBvYmplY3QgdGhhdCBuYW1lLCBoYW5kbGVyIHBhaXJzXG4gKiBDdXN0b21FdmVudHMub24oe1xuICogICAgICdwbGF5JzogaGFuZGxlcixcbiAqICAgICAncGF1c2UnOiBoYW5kbGVyMlxuICogfSk7XG4gKlxuICogLy8gIyAyLjQgQmluZCBieSBvYmplY3QgdGhhdCBuYW1lLCBoYW5kbGVyIHBhaXJzIHdpdGggY29udGV4dCBvYmplY3RcbiAqIEN1c3RvbUV2ZW50cy5vbih7XG4gKiAgICAgJ3BsYXknOiBoYW5kbGVyXG4gKiB9LCBteU9iaik7XG4gKi9cbkN1c3RvbUV2ZW50cy5wcm90b3R5cGUub24gPSBmdW5jdGlvbihldmVudE5hbWUsIGhhbmRsZXIsIGNvbnRleHQpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICBpZiAoaXNTdHJpbmcoZXZlbnROYW1lKSkge1xuICAgICAgICAvLyBbc3ludGF4IDEsIDJdXG4gICAgICAgIGV2ZW50TmFtZSA9IGV2ZW50TmFtZS5zcGxpdChSX0VWRU5UTkFNRV9TUExJVCk7XG4gICAgICAgIGZvckVhY2goZXZlbnROYW1lLCBmdW5jdGlvbihuYW1lKSB7XG4gICAgICAgICAgICBzZWxmLl9iaW5kRXZlbnQobmFtZSwgaGFuZGxlciwgY29udGV4dCk7XG4gICAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoaXNPYmplY3QoZXZlbnROYW1lKSkge1xuICAgICAgICAvLyBbc3ludGF4IDMsIDRdXG4gICAgICAgIGNvbnRleHQgPSBoYW5kbGVyO1xuICAgICAgICBmb3JFYWNoKGV2ZW50TmFtZSwgZnVuY3Rpb24oZnVuYywgbmFtZSkge1xuICAgICAgICAgICAgc2VsZi5vbihuYW1lLCBmdW5jLCBjb250ZXh0KTtcbiAgICAgICAgfSk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBCaW5kIG9uZS1zaG90IGV2ZW50IGhhbmRsZXJzXG4gKiBAcGFyYW0geyhzdHJpbmd8e25hbWU6c3RyaW5nLGhhbmRsZXI6ZnVuY3Rpb259KX0gZXZlbnROYW1lIC0gY3VzdG9tXG4gKiAgZXZlbnQgbmFtZSBvciBhbiBvYmplY3Qge2V2ZW50TmFtZTogaGFuZGxlcn1cbiAqIEBwYXJhbSB7ZnVuY3Rpb258b2JqZWN0fSBbaGFuZGxlcl0gLSBoYW5kbGVyIGZ1bmN0aW9uIG9yIGNvbnRleHRcbiAqIEBwYXJhbSB7b2JqZWN0fSBbY29udGV4dF0gLSBjb250ZXh0IGZvciBiaW5kaW5nXG4gKi9cbkN1c3RvbUV2ZW50cy5wcm90b3R5cGUub25jZSA9IGZ1bmN0aW9uKGV2ZW50TmFtZSwgaGFuZGxlciwgY29udGV4dCkge1xuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIGlmIChpc09iamVjdChldmVudE5hbWUpKSB7XG4gICAgICAgIGNvbnRleHQgPSBoYW5kbGVyO1xuICAgICAgICBmb3JFYWNoKGV2ZW50TmFtZSwgZnVuY3Rpb24oZnVuYywgbmFtZSkge1xuICAgICAgICAgICAgc2VsZi5vbmNlKG5hbWUsIGZ1bmMsIGNvbnRleHQpO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gb25jZUhhbmRsZXIoKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgcmVxdWlyZS1qc2RvY1xuICAgICAgICBoYW5kbGVyLmFwcGx5KGNvbnRleHQsIGFyZ3VtZW50cyk7XG4gICAgICAgIHNlbGYub2ZmKGV2ZW50TmFtZSwgb25jZUhhbmRsZXIsIGNvbnRleHQpO1xuICAgIH1cblxuICAgIHRoaXMub24oZXZlbnROYW1lLCBvbmNlSGFuZGxlciwgY29udGV4dCk7XG59O1xuXG4vKipcbiAqIFNwbGljZSBzdXBwbGllZCBhcnJheSBieSBjYWxsYmFjayByZXN1bHRcbiAqIEBwYXJhbSB7YXJyYXl9IGFyciAtIGFycmF5IHRvIHNwbGljZVxuICogQHBhcmFtIHtmdW5jdGlvbn0gcHJlZGljYXRlIC0gZnVuY3Rpb24gcmV0dXJuIGJvb2xlYW5cbiAqIEBwcml2YXRlXG4gKi9cbkN1c3RvbUV2ZW50cy5wcm90b3R5cGUuX3NwbGljZU1hdGNoZXMgPSBmdW5jdGlvbihhcnIsIHByZWRpY2F0ZSkge1xuICAgIHZhciBpID0gMDtcbiAgICB2YXIgbGVuO1xuXG4gICAgaWYgKCFpc0FycmF5KGFycikpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGZvciAobGVuID0gYXJyLmxlbmd0aDsgaSA8IGxlbjsgaSArPSAxKSB7XG4gICAgICAgIGlmIChwcmVkaWNhdGUoYXJyW2ldKSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgYXJyLnNwbGljZShpLCAxKTtcbiAgICAgICAgICAgIGxlbiAtPSAxO1xuICAgICAgICAgICAgaSAtPSAxO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBHZXQgbWF0Y2hlciBmb3IgdW5iaW5kIHNwZWNpZmljIGhhbmRsZXIgZXZlbnRzXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBoYW5kbGVyIC0gaGFuZGxlciBmdW5jdGlvblxuICogQHJldHVybnMge2Z1bmN0aW9ufSBoYW5kbGVyIG1hdGNoZXJcbiAqIEBwcml2YXRlXG4gKi9cbkN1c3RvbUV2ZW50cy5wcm90b3R5cGUuX21hdGNoSGFuZGxlciA9IGZ1bmN0aW9uKGhhbmRsZXIpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICByZXR1cm4gZnVuY3Rpb24oaXRlbSkge1xuICAgICAgICB2YXIgbmVlZFJlbW92ZSA9IGhhbmRsZXIgPT09IGl0ZW0uaGFuZGxlcjtcblxuICAgICAgICBpZiAobmVlZFJlbW92ZSkge1xuICAgICAgICAgICAgc2VsZi5fZm9yZ2V0Q29udGV4dChpdGVtLmNvbnRleHQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5lZWRSZW1vdmU7XG4gICAgfTtcbn07XG5cbi8qKlxuICogR2V0IG1hdGNoZXIgZm9yIHVuYmluZCBzcGVjaWZpYyBjb250ZXh0IGV2ZW50c1xuICogQHBhcmFtIHtvYmplY3R9IGNvbnRleHQgLSBjb250ZXh0XG4gKiBAcmV0dXJucyB7ZnVuY3Rpb259IG9iamVjdCBtYXRjaGVyXG4gKiBAcHJpdmF0ZVxuICovXG5DdXN0b21FdmVudHMucHJvdG90eXBlLl9tYXRjaENvbnRleHQgPSBmdW5jdGlvbihjb250ZXh0KSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAgcmV0dXJuIGZ1bmN0aW9uKGl0ZW0pIHtcbiAgICAgICAgdmFyIG5lZWRSZW1vdmUgPSBjb250ZXh0ID09PSBpdGVtLmNvbnRleHQ7XG5cbiAgICAgICAgaWYgKG5lZWRSZW1vdmUpIHtcbiAgICAgICAgICAgIHNlbGYuX2ZvcmdldENvbnRleHQoaXRlbS5jb250ZXh0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZWVkUmVtb3ZlO1xuICAgIH07XG59O1xuXG4vKipcbiAqIEdldCBtYXRjaGVyIGZvciB1bmJpbmQgc3BlY2lmaWMgaGFuZGVyLCBjb250ZXh0IHBhaXIgZXZlbnRzXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBoYW5kbGVyIC0gaGFuZGxlciBmdW5jdGlvblxuICogQHBhcmFtIHtvYmplY3R9IGNvbnRleHQgLSBjb250ZXh0XG4gKiBAcmV0dXJucyB7ZnVuY3Rpb259IGhhbmRsZXIsIGNvbnRleHQgbWF0Y2hlclxuICogQHByaXZhdGVcbiAqL1xuQ3VzdG9tRXZlbnRzLnByb3RvdHlwZS5fbWF0Y2hIYW5kbGVyQW5kQ29udGV4dCA9IGZ1bmN0aW9uKGhhbmRsZXIsIGNvbnRleHQpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICByZXR1cm4gZnVuY3Rpb24oaXRlbSkge1xuICAgICAgICB2YXIgbWF0Y2hIYW5kbGVyID0gKGhhbmRsZXIgPT09IGl0ZW0uaGFuZGxlcik7XG4gICAgICAgIHZhciBtYXRjaENvbnRleHQgPSAoY29udGV4dCA9PT0gaXRlbS5jb250ZXh0KTtcbiAgICAgICAgdmFyIG5lZWRSZW1vdmUgPSAobWF0Y2hIYW5kbGVyICYmIG1hdGNoQ29udGV4dCk7XG5cbiAgICAgICAgaWYgKG5lZWRSZW1vdmUpIHtcbiAgICAgICAgICAgIHNlbGYuX2ZvcmdldENvbnRleHQoaXRlbS5jb250ZXh0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZWVkUmVtb3ZlO1xuICAgIH07XG59O1xuXG4vKipcbiAqIFVuYmluZCBldmVudCBieSBldmVudCBuYW1lXG4gKiBAcGFyYW0ge3N0cmluZ30gZXZlbnROYW1lIC0gY3VzdG9tIGV2ZW50IG5hbWUgdG8gdW5iaW5kXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBbaGFuZGxlcl0gLSBoYW5kbGVyIGZ1bmN0aW9uXG4gKiBAcHJpdmF0ZVxuICovXG5DdXN0b21FdmVudHMucHJvdG90eXBlLl9vZmZCeUV2ZW50TmFtZSA9IGZ1bmN0aW9uKGV2ZW50TmFtZSwgaGFuZGxlcikge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB2YXIgYW5kQnlIYW5kbGVyID0gaXNGdW5jdGlvbihoYW5kbGVyKTtcbiAgICB2YXIgbWF0Y2hIYW5kbGVyID0gc2VsZi5fbWF0Y2hIYW5kbGVyKGhhbmRsZXIpO1xuXG4gICAgZXZlbnROYW1lID0gZXZlbnROYW1lLnNwbGl0KFJfRVZFTlROQU1FX1NQTElUKTtcblxuICAgIGZvckVhY2goZXZlbnROYW1lLCBmdW5jdGlvbihuYW1lKSB7XG4gICAgICAgIHZhciBoYW5kbGVySXRlbXMgPSBzZWxmLl9zYWZlRXZlbnQobmFtZSk7XG5cbiAgICAgICAgaWYgKGFuZEJ5SGFuZGxlcikge1xuICAgICAgICAgICAgc2VsZi5fc3BsaWNlTWF0Y2hlcyhoYW5kbGVySXRlbXMsIG1hdGNoSGFuZGxlcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmb3JFYWNoKGhhbmRsZXJJdGVtcywgZnVuY3Rpb24oaXRlbSkge1xuICAgICAgICAgICAgICAgIHNlbGYuX2ZvcmdldENvbnRleHQoaXRlbS5jb250ZXh0KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBzZWxmLmV2ZW50c1tuYW1lXSA9IFtdO1xuICAgICAgICB9XG4gICAgfSk7XG59O1xuXG4vKipcbiAqIFVuYmluZCBldmVudCBieSBoYW5kbGVyIGZ1bmN0aW9uXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBoYW5kbGVyIC0gaGFuZGxlciBmdW5jdGlvblxuICogQHByaXZhdGVcbiAqL1xuQ3VzdG9tRXZlbnRzLnByb3RvdHlwZS5fb2ZmQnlIYW5kbGVyID0gZnVuY3Rpb24oaGFuZGxlcikge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB2YXIgbWF0Y2hIYW5kbGVyID0gdGhpcy5fbWF0Y2hIYW5kbGVyKGhhbmRsZXIpO1xuXG4gICAgZm9yRWFjaCh0aGlzLl9zYWZlRXZlbnQoKSwgZnVuY3Rpb24oaGFuZGxlckl0ZW1zKSB7XG4gICAgICAgIHNlbGYuX3NwbGljZU1hdGNoZXMoaGFuZGxlckl0ZW1zLCBtYXRjaEhhbmRsZXIpO1xuICAgIH0pO1xufTtcblxuLyoqXG4gKiBVbmJpbmQgZXZlbnQgYnkgb2JqZWN0KG5hbWU6IGhhbmRsZXIgcGFpciBvYmplY3Qgb3IgY29udGV4dCBvYmplY3QpXG4gKiBAcGFyYW0ge29iamVjdH0gb2JqIC0gY29udGV4dCBvciB7bmFtZTogaGFuZGxlcn0gcGFpciBvYmplY3RcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGhhbmRsZXIgLSBoYW5kbGVyIGZ1bmN0aW9uXG4gKiBAcHJpdmF0ZVxuICovXG5DdXN0b21FdmVudHMucHJvdG90eXBlLl9vZmZCeU9iamVjdCA9IGZ1bmN0aW9uKG9iaiwgaGFuZGxlcikge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB2YXIgbWF0Y2hGdW5jO1xuXG4gICAgaWYgKHRoaXMuX2luZGV4T2ZDb250ZXh0KG9iaikgPCAwKSB7XG4gICAgICAgIGZvckVhY2gob2JqLCBmdW5jdGlvbihmdW5jLCBuYW1lKSB7XG4gICAgICAgICAgICBzZWxmLm9mZihuYW1lLCBmdW5jKTtcbiAgICAgICAgfSk7XG4gICAgfSBlbHNlIGlmIChpc1N0cmluZyhoYW5kbGVyKSkge1xuICAgICAgICBtYXRjaEZ1bmMgPSB0aGlzLl9tYXRjaENvbnRleHQob2JqKTtcblxuICAgICAgICBzZWxmLl9zcGxpY2VNYXRjaGVzKHRoaXMuX3NhZmVFdmVudChoYW5kbGVyKSwgbWF0Y2hGdW5jKTtcbiAgICB9IGVsc2UgaWYgKGlzRnVuY3Rpb24oaGFuZGxlcikpIHtcbiAgICAgICAgbWF0Y2hGdW5jID0gdGhpcy5fbWF0Y2hIYW5kbGVyQW5kQ29udGV4dChoYW5kbGVyLCBvYmopO1xuXG4gICAgICAgIGZvckVhY2godGhpcy5fc2FmZUV2ZW50KCksIGZ1bmN0aW9uKGhhbmRsZXJJdGVtcykge1xuICAgICAgICAgICAgc2VsZi5fc3BsaWNlTWF0Y2hlcyhoYW5kbGVySXRlbXMsIG1hdGNoRnVuYyk7XG4gICAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIG1hdGNoRnVuYyA9IHRoaXMuX21hdGNoQ29udGV4dChvYmopO1xuXG4gICAgICAgIGZvckVhY2godGhpcy5fc2FmZUV2ZW50KCksIGZ1bmN0aW9uKGhhbmRsZXJJdGVtcykge1xuICAgICAgICAgICAgc2VsZi5fc3BsaWNlTWF0Y2hlcyhoYW5kbGVySXRlbXMsIG1hdGNoRnVuYyk7XG4gICAgICAgIH0pO1xuICAgIH1cbn07XG5cbi8qKlxuICogVW5iaW5kIGN1c3RvbSBldmVudHNcbiAqIEBwYXJhbSB7KHN0cmluZ3xvYmplY3R8ZnVuY3Rpb24pfSBldmVudE5hbWUgLSBldmVudCBuYW1lIG9yIGNvbnRleHQgb3JcbiAqICB7bmFtZTogaGFuZGxlcn0gcGFpciBvYmplY3Qgb3IgaGFuZGxlciBmdW5jdGlvblxuICogQHBhcmFtIHsoZnVuY3Rpb24pfSBoYW5kbGVyIC0gaGFuZGxlciBmdW5jdGlvblxuICogQGV4YW1wbGVcbiAqIC8vLS0gIzEuIEdldCBNb2R1bGUgLS0vL1xuICogdmFyIEN1c3RvbUV2ZW50cyA9IHJlcXVpcmUoJ3R1aS1jb2RlLXNuaXBwZXQvY3VzdG9tRXZlbnRzL2N1c3RvbUV2ZW50cycpOyAvLyBub2RlLCBjb21tb25qc1xuICpcbiAqIC8vLS0gIzIuIFVzZSBtZXRob2QgLS0vL1xuICogLy8gIyAyLjEgb2ZmIGJ5IGV2ZW50IG5hbWVcbiAqIEN1c3RvbUV2ZW50cy5vZmYoJ29ubG9hZCcpO1xuICpcbiAqIC8vICMgMi4yIG9mZiBieSBldmVudCBuYW1lIGFuZCBoYW5kbGVyXG4gKiBDdXN0b21FdmVudHMub2ZmKCdwbGF5JywgaGFuZGxlcik7XG4gKlxuICogLy8gIyAyLjMgb2ZmIGJ5IGhhbmRsZXJcbiAqIEN1c3RvbUV2ZW50cy5vZmYoaGFuZGxlcik7XG4gKlxuICogLy8gIyAyLjQgb2ZmIGJ5IGNvbnRleHRcbiAqIEN1c3RvbUV2ZW50cy5vZmYobXlPYmopO1xuICpcbiAqIC8vICMgMi41IG9mZiBieSBjb250ZXh0IGFuZCBoYW5kbGVyXG4gKiBDdXN0b21FdmVudHMub2ZmKG15T2JqLCBoYW5kbGVyKTtcbiAqXG4gKiAvLyAjIDIuNiBvZmYgYnkgY29udGV4dCBhbmQgZXZlbnQgbmFtZVxuICogQ3VzdG9tRXZlbnRzLm9mZihteU9iaiwgJ29ubG9hZCcpO1xuICpcbiAqIC8vICMgMi43IG9mZiBieSBhbiBPYmplY3QuPHN0cmluZywgZnVuY3Rpb24+IHRoYXQgaXMge2V2ZW50TmFtZTogaGFuZGxlcn1cbiAqIEN1c3RvbUV2ZW50cy5vZmYoe1xuICogICAncGxheSc6IGhhbmRsZXIsXG4gKiAgICdwYXVzZSc6IGhhbmRsZXIyXG4gKiB9KTtcbiAqXG4gKiAvLyAjIDIuOCBvZmYgdGhlIGFsbCBldmVudHNcbiAqIEN1c3RvbUV2ZW50cy5vZmYoKTtcbiAqL1xuQ3VzdG9tRXZlbnRzLnByb3RvdHlwZS5vZmYgPSBmdW5jdGlvbihldmVudE5hbWUsIGhhbmRsZXIpIHtcbiAgICBpZiAoaXNTdHJpbmcoZXZlbnROYW1lKSkge1xuICAgICAgICAvLyBbc3ludGF4IDEsIDJdXG4gICAgICAgIHRoaXMuX29mZkJ5RXZlbnROYW1lKGV2ZW50TmFtZSwgaGFuZGxlcik7XG4gICAgfSBlbHNlIGlmICghYXJndW1lbnRzLmxlbmd0aCkge1xuICAgICAgICAvLyBbc3ludGF4IDhdXG4gICAgICAgIHRoaXMuZXZlbnRzID0ge307XG4gICAgICAgIHRoaXMuY29udGV4dHMgPSBbXTtcbiAgICB9IGVsc2UgaWYgKGlzRnVuY3Rpb24oZXZlbnROYW1lKSkge1xuICAgICAgICAvLyBbc3ludGF4IDNdXG4gICAgICAgIHRoaXMuX29mZkJ5SGFuZGxlcihldmVudE5hbWUpO1xuICAgIH0gZWxzZSBpZiAoaXNPYmplY3QoZXZlbnROYW1lKSkge1xuICAgICAgICAvLyBbc3ludGF4IDQsIDUsIDZdXG4gICAgICAgIHRoaXMuX29mZkJ5T2JqZWN0KGV2ZW50TmFtZSwgaGFuZGxlcik7XG4gICAgfVxufTtcblxuLyoqXG4gKiBGaXJlIGN1c3RvbSBldmVudFxuICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50TmFtZSAtIG5hbWUgb2YgY3VzdG9tIGV2ZW50XG4gKi9cbkN1c3RvbUV2ZW50cy5wcm90b3R5cGUuZmlyZSA9IGZ1bmN0aW9uKGV2ZW50TmFtZSkgeyAgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICAgIHRoaXMuaW52b2tlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59O1xuXG4vKipcbiAqIEZpcmUgYSBldmVudCBhbmQgcmV0dXJucyB0aGUgcmVzdWx0IG9mIG9wZXJhdGlvbiAnYm9vbGVhbiBBTkQnIHdpdGggYWxsXG4gKiAgbGlzdGVuZXIncyByZXN1bHRzLlxuICpcbiAqIFNvLCBJdCBpcyBkaWZmZXJlbnQgZnJvbSB7QGxpbmsgQ3VzdG9tRXZlbnRzI2ZpcmV9LlxuICpcbiAqIEluIHNlcnZpY2UgY29kZSwgdXNlIHRoaXMgYXMgYSBiZWZvcmUgZXZlbnQgaW4gY29tcG9uZW50IGxldmVsIHVzdWFsbHlcbiAqICBmb3Igbm90aWZ5aW5nIHRoYXQgdGhlIGV2ZW50IGlzIGNhbmNlbGFibGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gZXZlbnROYW1lIC0gQ3VzdG9tIGV2ZW50IG5hbWVcbiAqIEBwYXJhbSB7Li4uKn0gZGF0YSAtIERhdGEgZm9yIGV2ZW50XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVGhlIHJlc3VsdCBvZiBvcGVyYXRpb24gJ2Jvb2xlYW4gQU5EJ1xuICogQGV4YW1wbGVcbiAqIHZhciBtYXAgPSBuZXcgTWFwKCk7XG4gKiBtYXAub24oe1xuICogICAgICdiZWZvcmVab29tJzogZnVuY3Rpb24oKSB7XG4gKiAgICAgICAgIC8vIEl0IHNob3VsZCBjYW5jZWwgdGhlICd6b29tJyBldmVudCBieSBzb21lIGNvbmRpdGlvbnMuXG4gKiAgICAgICAgIGlmICh0aGF0LmRpc2FibGVkICYmIHRoaXMuZ2V0U3RhdGUoKSkge1xuICogICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICogICAgICAgICB9XG4gKiAgICAgICAgIHJldHVybiB0cnVlO1xuICogICAgIH1cbiAqIH0pO1xuICpcbiAqIGlmICh0aGlzLmludm9rZSgnYmVmb3JlWm9vbScpKSB7ICAgIC8vIGNoZWNrIHRoZSByZXN1bHQgb2YgJ2JlZm9yZVpvb20nXG4gKiAgICAgLy8gaWYgdHJ1ZSxcbiAqICAgICAvLyBkb1NvbWV0aGluZ1xuICogfVxuICovXG5DdXN0b21FdmVudHMucHJvdG90eXBlLmludm9rZSA9IGZ1bmN0aW9uKGV2ZW50TmFtZSkge1xuICAgIHZhciBldmVudHMsIGFyZ3MsIGluZGV4LCBpdGVtO1xuXG4gICAgaWYgKCF0aGlzLmhhc0xpc3RlbmVyKGV2ZW50TmFtZSkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgZXZlbnRzID0gdGhpcy5fc2FmZUV2ZW50KGV2ZW50TmFtZSk7XG4gICAgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgaW5kZXggPSAwO1xuXG4gICAgd2hpbGUgKGV2ZW50c1tpbmRleF0pIHtcbiAgICAgICAgaXRlbSA9IGV2ZW50c1tpbmRleF07XG5cbiAgICAgICAgaWYgKGl0ZW0uaGFuZGxlci5hcHBseShpdGVtLmNvbnRleHQsIGFyZ3MpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaW5kZXggKz0gMTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn07XG5cbi8qKlxuICogUmV0dXJuIHdoZXRoZXIgYXQgbGVhc3Qgb25lIG9mIHRoZSBoYW5kbGVycyBpcyByZWdpc3RlcmVkIGluIHRoZSBnaXZlblxuICogIGV2ZW50IG5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gZXZlbnROYW1lIC0gQ3VzdG9tIGV2ZW50IG5hbWVcbiAqIEByZXR1cm5zIHtib29sZWFufSBJcyB0aGVyZSBhdCBsZWFzdCBvbmUgaGFuZGxlciBpbiBldmVudCBuYW1lP1xuICovXG5DdXN0b21FdmVudHMucHJvdG90eXBlLmhhc0xpc3RlbmVyID0gZnVuY3Rpb24oZXZlbnROYW1lKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TGlzdGVuZXJMZW5ndGgoZXZlbnROYW1lKSA+IDA7XG59O1xuXG4vKipcbiAqIFJldHVybiBhIGNvdW50IG9mIGV2ZW50cyByZWdpc3RlcmVkLlxuICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50TmFtZSAtIEN1c3RvbSBldmVudCBuYW1lXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBudW1iZXIgb2YgZXZlbnRcbiAqL1xuQ3VzdG9tRXZlbnRzLnByb3RvdHlwZS5nZXRMaXN0ZW5lckxlbmd0aCA9IGZ1bmN0aW9uKGV2ZW50TmFtZSkge1xuICAgIHZhciBldmVudHMgPSB0aGlzLl9zYWZlRXZlbnQoZXZlbnROYW1lKTtcblxuICAgIHJldHVybiBldmVudHMubGVuZ3RoO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBDdXN0b21FdmVudHM7XG4iLCIvKipcbiAqIEBmaWxlb3ZlcnZpZXcgR2V0IGV2ZW50IGNvbGxlY3Rpb24gZm9yIHNwZWNpZmljIEhUTUwgZWxlbWVudFxuICogQGF1dGhvciBOSE4gRkUgRGV2ZWxvcG1lbnQgTGFiIDxkbF9qYXZhc2NyaXB0QG5obi5jb20+XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgRVZFTlRfS0VZID0gJ19mZUV2ZW50S2V5JztcblxuLyoqXG4gKiBHZXQgZXZlbnQgY29sbGVjdGlvbiBmb3Igc3BlY2lmaWMgSFRNTCBlbGVtZW50XG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50IC0gSFRNTCBlbGVtZW50XG4gKiBAcGFyYW0ge3N0cmluZ30gdHlwZSAtIGV2ZW50IHR5cGVcbiAqIEByZXR1cm5zIHthcnJheX1cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHNhZmVFdmVudChlbGVtZW50LCB0eXBlKSB7XG4gICAgdmFyIGV2ZW50cyA9IGVsZW1lbnRbRVZFTlRfS0VZXTtcbiAgICB2YXIgaGFuZGxlcnM7XG5cbiAgICBpZiAoIWV2ZW50cykge1xuICAgICAgICBldmVudHMgPSBlbGVtZW50W0VWRU5UX0tFWV0gPSB7fTtcbiAgICB9XG5cbiAgICBoYW5kbGVycyA9IGV2ZW50c1t0eXBlXTtcbiAgICBpZiAoIWhhbmRsZXJzKSB7XG4gICAgICAgIGhhbmRsZXJzID0gZXZlbnRzW3R5cGVdID0gW107XG4gICAgfVxuXG4gICAgcmV0dXJuIGhhbmRsZXJzO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNhZmVFdmVudDtcbiIsIi8qKlxuICogQGZpbGVvdmVydmlldyBHZXQgYSB0YXJnZXQgZWxlbWVudCBmcm9tIGFuIGV2ZW50IG9iamVjdC5cbiAqIEBhdXRob3IgTkhOIEZFIERldmVsb3BtZW50IExhYiA8ZGxfamF2YXNjcmlwdEBuaG4uY29tPlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBHZXQgYSB0YXJnZXQgZWxlbWVudCBmcm9tIGFuIGV2ZW50IG9iamVjdC5cbiAqIEBwYXJhbSB7RXZlbnR9IGUgLSBldmVudCBvYmplY3RcbiAqIEByZXR1cm5zIHtIVE1MRWxlbWVudH0gLSB0YXJnZXQgZWxlbWVudFxuICogQG1lbWJlcm9mIG1vZHVsZTpkb21FdmVudFxuICovXG5mdW5jdGlvbiBnZXRUYXJnZXQoZSkge1xuICAgIHJldHVybiBlLnRhcmdldCB8fCBlLnNyY0VsZW1lbnQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0VGFyZ2V0O1xuIiwiLyoqXG4gKiBAZmlsZW92ZXJ2aWV3IFVuYmluZCBET00gZXZlbnRzXG4gKiBAYXV0aG9yIE5ITiBGRSBEZXZlbG9wbWVudCBMYWIgPGRsX2phdmFzY3JpcHRAbmhuLmNvbT5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBpc1N0cmluZyA9IHJlcXVpcmUoJy4uL3R5cGUvaXNTdHJpbmcnKTtcbnZhciBmb3JFYWNoID0gcmVxdWlyZSgnLi4vY29sbGVjdGlvbi9mb3JFYWNoJyk7XG5cbnZhciBzYWZlRXZlbnQgPSByZXF1aXJlKCcuL19zYWZlRXZlbnQnKTtcblxuLyoqXG4gKiBVbmJpbmQgRE9NIGV2ZW50c1xuICogSWYgYSBoYW5kbGVyIGZ1bmN0aW9uIGlzIG5vdCBwYXNzZWQsIHJlbW92ZSBhbGwgZXZlbnRzIG9mIHRoYXQgdHlwZS5cbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnQgLSBlbGVtZW50IHRvIHVuYmluZGJpbmQgZXZlbnRzXG4gKiBAcGFyYW0geyhzdHJpbmd8b2JqZWN0KX0gdHlwZXMgLSBTcGFjZSBzcGxpdHRlZCBldmVudHMgbmFtZXMgb3JcbiAqICBldmVudE5hbWU6aGFuZGxlciBvYmplY3RcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IFtoYW5kbGVyXSAtIGhhbmRsZXIgZnVuY3Rpb25cbiAqIEBtZW1iZXJvZiBtb2R1bGU6ZG9tRXZlbnRcbiAqL1xuZnVuY3Rpb24gb2ZmKGVsZW1lbnQsIHR5cGVzLCBoYW5kbGVyKSB7XG4gICAgaWYgKGlzU3RyaW5nKHR5cGVzKSkge1xuICAgICAgICBmb3JFYWNoKHR5cGVzLnNwbGl0KC9cXHMrL2cpLCBmdW5jdGlvbih0eXBlKSB7XG4gICAgICAgICAgICB1bmJpbmRFdmVudChlbGVtZW50LCB0eXBlLCBoYW5kbGVyKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGZvckVhY2godHlwZXMsIGZ1bmN0aW9uKGZ1bmMsIHR5cGUpIHtcbiAgICAgICAgdW5iaW5kRXZlbnQoZWxlbWVudCwgdHlwZSwgZnVuYyk7XG4gICAgfSk7XG59XG5cbi8qKlxuICogVW5iaW5kIERPTSBldmVudHNcbiAqIElmIGEgaGFuZGxlciBmdW5jdGlvbiBpcyBub3QgcGFzc2VkLCByZW1vdmUgYWxsIGV2ZW50cyBvZiB0aGF0IHR5cGUuXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50IC0gZWxlbWVudCB0byB1bmJpbmQgZXZlbnRzXG4gKiBAcGFyYW0ge3N0cmluZ30gdHlwZSAtIGV2ZW50cyBuYW1lXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBbaGFuZGxlcl0gLSBoYW5kbGVyIGZ1bmN0aW9uXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiB1bmJpbmRFdmVudChlbGVtZW50LCB0eXBlLCBoYW5kbGVyKSB7XG4gICAgdmFyIGV2ZW50cyA9IHNhZmVFdmVudChlbGVtZW50LCB0eXBlKTtcbiAgICB2YXIgaW5kZXg7XG5cbiAgICBpZiAoIWhhbmRsZXIpIHtcbiAgICAgICAgZm9yRWFjaChldmVudHMsIGZ1bmN0aW9uKGl0ZW0pIHtcbiAgICAgICAgICAgIHJlbW92ZUhhbmRsZXIoZWxlbWVudCwgdHlwZSwgaXRlbS53cmFwcGVkSGFuZGxlcik7XG4gICAgICAgIH0pO1xuICAgICAgICBldmVudHMuc3BsaWNlKDAsIGV2ZW50cy5sZW5ndGgpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGZvckVhY2goZXZlbnRzLCBmdW5jdGlvbihpdGVtLCBpZHgpIHtcbiAgICAgICAgICAgIGlmIChoYW5kbGVyID09PSBpdGVtLmhhbmRsZXIpIHtcbiAgICAgICAgICAgICAgICByZW1vdmVIYW5kbGVyKGVsZW1lbnQsIHR5cGUsIGl0ZW0ud3JhcHBlZEhhbmRsZXIpO1xuICAgICAgICAgICAgICAgIGluZGV4ID0gaWR4O1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSk7XG4gICAgICAgIGV2ZW50cy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH1cbn1cblxuLyoqXG4gKiBSZW1vdmUgYW4gZXZlbnQgaGFuZGxlclxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudCAtIEFuIGVsZW1lbnQgdG8gcmVtb3ZlIGFuIGV2ZW50XG4gKiBAcGFyYW0ge3N0cmluZ30gdHlwZSAtIGV2ZW50IHR5cGVcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGhhbmRsZXIgLSBldmVudCBoYW5kbGVyXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiByZW1vdmVIYW5kbGVyKGVsZW1lbnQsIHR5cGUsIGhhbmRsZXIpIHtcbiAgICBpZiAoJ3JlbW92ZUV2ZW50TGlzdGVuZXInIGluIGVsZW1lbnQpIHtcbiAgICAgICAgZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGhhbmRsZXIpO1xuICAgIH0gZWxzZSBpZiAoJ2RldGFjaEV2ZW50JyBpbiBlbGVtZW50KSB7XG4gICAgICAgIGVsZW1lbnQuZGV0YWNoRXZlbnQoJ29uJyArIHR5cGUsIGhhbmRsZXIpO1xuICAgIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBvZmY7XG4iLCIvKipcbiAqIEBmaWxlb3ZlcnZpZXcgQmluZCBET00gZXZlbnRzXG4gKiBAYXV0aG9yIE5ITiBGRSBEZXZlbG9wbWVudCBMYWIgPGRsX2phdmFzY3JpcHRAbmhuLmNvbT5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBpc1N0cmluZyA9IHJlcXVpcmUoJy4uL3R5cGUvaXNTdHJpbmcnKTtcbnZhciBmb3JFYWNoID0gcmVxdWlyZSgnLi4vY29sbGVjdGlvbi9mb3JFYWNoJyk7XG5cbnZhciBzYWZlRXZlbnQgPSByZXF1aXJlKCcuL19zYWZlRXZlbnQnKTtcblxuLyoqXG4gKiBCaW5kIERPTSBldmVudHNcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnQgLSBlbGVtZW50IHRvIGJpbmQgZXZlbnRzXG4gKiBAcGFyYW0geyhzdHJpbmd8b2JqZWN0KX0gdHlwZXMgLSBTcGFjZSBzcGxpdHRlZCBldmVudHMgbmFtZXMgb3JcbiAqICBldmVudE5hbWU6aGFuZGxlciBvYmplY3RcbiAqIEBwYXJhbSB7KGZ1bmN0aW9ufG9iamVjdCl9IGhhbmRsZXIgLSBoYW5kbGVyIGZ1bmN0aW9uIG9yIGNvbnRleHQgZm9yIGhhbmRsZXJcbiAqICBtZXRob2RcbiAqIEBwYXJhbSB7b2JqZWN0fSBbY29udGV4dF0gY29udGV4dCAtIGNvbnRleHQgZm9yIGhhbmRsZXIgbWV0aG9kLlxuICogQG1lbWJlcm9mIG1vZHVsZTpkb21FdmVudFxuICovXG5mdW5jdGlvbiBvbihlbGVtZW50LCB0eXBlcywgaGFuZGxlciwgY29udGV4dCkge1xuICAgIGlmIChpc1N0cmluZyh0eXBlcykpIHtcbiAgICAgICAgZm9yRWFjaCh0eXBlcy5zcGxpdCgvXFxzKy9nKSwgZnVuY3Rpb24odHlwZSkge1xuICAgICAgICAgICAgYmluZEV2ZW50KGVsZW1lbnQsIHR5cGUsIGhhbmRsZXIsIGNvbnRleHQpO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZm9yRWFjaCh0eXBlcywgZnVuY3Rpb24oZnVuYywgdHlwZSkge1xuICAgICAgICBiaW5kRXZlbnQoZWxlbWVudCwgdHlwZSwgZnVuYywgaGFuZGxlcik7XG4gICAgfSk7XG59XG5cbi8qKlxuICogQmluZCBET00gZXZlbnRzXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50IC0gZWxlbWVudCB0byBiaW5kIGV2ZW50c1xuICogQHBhcmFtIHtzdHJpbmd9IHR5cGUgLSBldmVudHMgbmFtZVxuICogQHBhcmFtIHtmdW5jdGlvbn0gaGFuZGxlciAtIGhhbmRsZXIgZnVuY3Rpb24gb3IgY29udGV4dCBmb3IgaGFuZGxlclxuICogIG1ldGhvZFxuICogQHBhcmFtIHtvYmplY3R9IFtjb250ZXh0XSBjb250ZXh0IC0gY29udGV4dCBmb3IgaGFuZGxlciBtZXRob2QuXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBiaW5kRXZlbnQoZWxlbWVudCwgdHlwZSwgaGFuZGxlciwgY29udGV4dCkge1xuICAgIC8qKlxuICAgICAqIEV2ZW50IGhhbmRsZXJcbiAgICAgKiBAcGFyYW0ge0V2ZW50fSBlIC0gZXZlbnQgb2JqZWN0XG4gICAgICovXG4gICAgZnVuY3Rpb24gZXZlbnRIYW5kbGVyKGUpIHtcbiAgICAgICAgaGFuZGxlci5jYWxsKGNvbnRleHQgfHwgZWxlbWVudCwgZSB8fCB3aW5kb3cuZXZlbnQpO1xuICAgIH1cblxuICAgIGlmICgnYWRkRXZlbnRMaXN0ZW5lcicgaW4gZWxlbWVudCkge1xuICAgICAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgZXZlbnRIYW5kbGVyKTtcbiAgICB9IGVsc2UgaWYgKCdhdHRhY2hFdmVudCcgaW4gZWxlbWVudCkge1xuICAgICAgICBlbGVtZW50LmF0dGFjaEV2ZW50KCdvbicgKyB0eXBlLCBldmVudEhhbmRsZXIpO1xuICAgIH1cbiAgICBtZW1vcml6ZUhhbmRsZXIoZWxlbWVudCwgdHlwZSwgaGFuZGxlciwgZXZlbnRIYW5kbGVyKTtcbn1cblxuLyoqXG4gKiBNZW1vcml6ZSBET00gZXZlbnQgaGFuZGxlciBmb3IgdW5iaW5kaW5nLlxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudCAtIGVsZW1lbnQgdG8gYmluZCBldmVudHNcbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlIC0gZXZlbnRzIG5hbWVcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGhhbmRsZXIgLSBoYW5kbGVyIGZ1bmN0aW9uIHRoYXQgdXNlciBwYXNzZWQgYXQgb24oKSB1c2VcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IHdyYXBwZWRIYW5kbGVyIC0gaGFuZGxlciBmdW5jdGlvbiB0aGF0IHdyYXBwZWQgYnkgZG9tZXZlbnQgZm9yIGltcGxlbWVudGluZyBzb21lIGZlYXR1cmVzXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBtZW1vcml6ZUhhbmRsZXIoZWxlbWVudCwgdHlwZSwgaGFuZGxlciwgd3JhcHBlZEhhbmRsZXIpIHtcbiAgICB2YXIgZXZlbnRzID0gc2FmZUV2ZW50KGVsZW1lbnQsIHR5cGUpO1xuICAgIHZhciBleGlzdEluRXZlbnRzID0gZmFsc2U7XG5cbiAgICBmb3JFYWNoKGV2ZW50cywgZnVuY3Rpb24ob2JqKSB7XG4gICAgICAgIGlmIChvYmouaGFuZGxlciA9PT0gaGFuZGxlcikge1xuICAgICAgICAgICAgZXhpc3RJbkV2ZW50cyA9IHRydWU7XG5cbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0pO1xuXG4gICAgaWYgKCFleGlzdEluRXZlbnRzKSB7XG4gICAgICAgIGV2ZW50cy5wdXNoKHtcbiAgICAgICAgICAgIGhhbmRsZXI6IGhhbmRsZXIsXG4gICAgICAgICAgICB3cmFwcGVkSGFuZGxlcjogd3JhcHBlZEhhbmRsZXJcbiAgICAgICAgfSk7XG4gICAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG9uO1xuIiwiLyoqXG4gKiBAZmlsZW92ZXJ2aWV3IFByZXZlbnQgZGVmYXVsdCBhY3Rpb25cbiAqIEBhdXRob3IgTkhOIEZFIERldmVsb3BtZW50IExhYiA8ZGxfamF2YXNjcmlwdEBuaG4uY29tPlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBQcmV2ZW50IGRlZmF1bHQgYWN0aW9uXG4gKiBAcGFyYW0ge0V2ZW50fSBlIC0gZXZlbnQgb2JqZWN0XG4gKiBAbWVtYmVyb2YgbW9kdWxlOmRvbUV2ZW50XG4gKi9cbmZ1bmN0aW9uIHByZXZlbnREZWZhdWx0KGUpIHtcbiAgICBpZiAoZS5wcmV2ZW50RGVmYXVsdCkge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGUucmV0dXJuVmFsdWUgPSBmYWxzZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBwcmV2ZW50RGVmYXVsdDtcbiIsIi8qKlxuICogQGZpbGVvdmVydmlldyBTZXQgY2xhc3NOYW1lIHZhbHVlXG4gKiBAYXV0aG9yIE5ITiBGRSBEZXZlbG9wbWVudCBMYWIgPGRsX2phdmFzY3JpcHRAbmhuLmNvbT5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi4vdHlwZS9pc0FycmF5Jyk7XG52YXIgaXNVbmRlZmluZWQgPSByZXF1aXJlKCcuLi90eXBlL2lzVW5kZWZpbmVkJyk7XG5cbi8qKlxuICogU2V0IGNsYXNzTmFtZSB2YWx1ZVxuICogQHBhcmFtIHsoSFRNTEVsZW1lbnR8U1ZHRWxlbWVudCl9IGVsZW1lbnQgLSB0YXJnZXQgZWxlbWVudFxuICogQHBhcmFtIHsoc3RyaW5nfHN0cmluZ1tdKX0gY3NzQ2xhc3MgLSBjbGFzcyBuYW1lc1xuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gc2V0Q2xhc3NOYW1lKGVsZW1lbnQsIGNzc0NsYXNzKSB7XG4gICAgY3NzQ2xhc3MgPSBpc0FycmF5KGNzc0NsYXNzKSA/IGNzc0NsYXNzLmpvaW4oJyAnKSA6IGNzc0NsYXNzO1xuXG4gICAgY3NzQ2xhc3MgPSBjc3NDbGFzcy5yZXBsYWNlKC9eW1xcc1xcdUZFRkZcXHhBMF0rfFtcXHNcXHVGRUZGXFx4QTBdKyQvZywgJycpO1xuXG4gICAgaWYgKGlzVW5kZWZpbmVkKGVsZW1lbnQuY2xhc3NOYW1lLmJhc2VWYWwpKSB7XG4gICAgICAgIGVsZW1lbnQuY2xhc3NOYW1lID0gY3NzQ2xhc3M7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGVsZW1lbnQuY2xhc3NOYW1lLmJhc2VWYWwgPSBjc3NDbGFzcztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzZXRDbGFzc05hbWU7XG4iLCIvKipcbiAqIEBmaWxlb3ZlcnZpZXcgQWRkIGNzcyBjbGFzcyB0byBlbGVtZW50XG4gKiBAYXV0aG9yIE5ITiBGRSBEZXZlbG9wbWVudCBMYWIgPGRsX2phdmFzY3JpcHRAbmhuLmNvbT5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBmb3JFYWNoID0gcmVxdWlyZSgnLi4vY29sbGVjdGlvbi9mb3JFYWNoJyk7XG52YXIgaW5BcnJheSA9IHJlcXVpcmUoJy4uL2FycmF5L2luQXJyYXknKTtcbnZhciBnZXRDbGFzcyA9IHJlcXVpcmUoJy4vZ2V0Q2xhc3MnKTtcbnZhciBzZXRDbGFzc05hbWUgPSByZXF1aXJlKCcuL19zZXRDbGFzc05hbWUnKTtcblxuLyoqXG4gKiBkb21VdGlsIG1vZHVsZVxuICogQG1vZHVsZSBkb21VdGlsXG4gKi9cblxuLyoqXG4gKiBBZGQgY3NzIGNsYXNzIHRvIGVsZW1lbnRcbiAqIEBwYXJhbSB7KEhUTUxFbGVtZW50fFNWR0VsZW1lbnQpfSBlbGVtZW50IC0gdGFyZ2V0IGVsZW1lbnRcbiAqIEBwYXJhbSB7Li4uc3RyaW5nfSBjc3NDbGFzcyAtIGNzcyBjbGFzc2VzIHRvIGFkZFxuICogQG1lbWJlcm9mIG1vZHVsZTpkb21VdGlsXG4gKi9cbmZ1bmN0aW9uIGFkZENsYXNzKGVsZW1lbnQpIHtcbiAgICB2YXIgY3NzQ2xhc3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgIHZhciBjbGFzc0xpc3QgPSBlbGVtZW50LmNsYXNzTGlzdDtcbiAgICB2YXIgbmV3Q2xhc3MgPSBbXTtcbiAgICB2YXIgb3JpZ2luO1xuXG4gICAgaWYgKGNsYXNzTGlzdCkge1xuICAgICAgICBmb3JFYWNoKGNzc0NsYXNzLCBmdW5jdGlvbihuYW1lKSB7XG4gICAgICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5hZGQobmFtZSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBvcmlnaW4gPSBnZXRDbGFzcyhlbGVtZW50KTtcblxuICAgIGlmIChvcmlnaW4pIHtcbiAgICAgICAgY3NzQ2xhc3MgPSBbXS5jb25jYXQob3JpZ2luLnNwbGl0KC9cXHMrLyksIGNzc0NsYXNzKTtcbiAgICB9XG5cbiAgICBmb3JFYWNoKGNzc0NsYXNzLCBmdW5jdGlvbihjbHMpIHtcbiAgICAgICAgaWYgKGluQXJyYXkoY2xzLCBuZXdDbGFzcykgPCAwKSB7XG4gICAgICAgICAgICBuZXdDbGFzcy5wdXNoKGNscyk7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHNldENsYXNzTmFtZShlbGVtZW50LCBuZXdDbGFzcyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYWRkQ2xhc3M7XG4iLCIvKipcbiAqIEBmaWxlb3ZlcnZpZXcgRmluZCBwYXJlbnQgZWxlbWVudCByZWN1cnNpdmVseVxuICogQGF1dGhvciBOSE4gRkUgRGV2ZWxvcG1lbnQgTGFiIDxkbF9qYXZhc2NyaXB0QG5obi5jb20+XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgbWF0Y2hlcyA9IHJlcXVpcmUoJy4vbWF0Y2hlcycpO1xuXG4vKipcbiAqIEZpbmQgcGFyZW50IGVsZW1lbnQgcmVjdXJzaXZlbHlcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnQgLSBiYXNlIGVsZW1lbnQgdG8gc3RhcnQgZmluZFxuICogQHBhcmFtIHtzdHJpbmd9IHNlbGVjdG9yIC0gc2VsZWN0b3Igc3RyaW5nIGZvciBmaW5kXG4gKiBAcmV0dXJucyB7SFRNTEVsZW1lbnR9IC0gZWxlbWVudCBmaW5kZWQgb3IgbnVsbFxuICogQG1lbWJlcm9mIG1vZHVsZTpkb21VdGlsXG4gKi9cbmZ1bmN0aW9uIGNsb3Nlc3QoZWxlbWVudCwgc2VsZWN0b3IpIHtcbiAgICB2YXIgcGFyZW50ID0gZWxlbWVudC5wYXJlbnROb2RlO1xuXG4gICAgaWYgKG1hdGNoZXMoZWxlbWVudCwgc2VsZWN0b3IpKSB7XG4gICAgICAgIHJldHVybiBlbGVtZW50O1xuICAgIH1cblxuICAgIHdoaWxlIChwYXJlbnQgJiYgcGFyZW50ICE9PSBkb2N1bWVudCkge1xuICAgICAgICBpZiAobWF0Y2hlcyhwYXJlbnQsIHNlbGVjdG9yKSkge1xuICAgICAgICAgICAgcmV0dXJuIHBhcmVudDtcbiAgICAgICAgfVxuXG4gICAgICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnROb2RlO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNsb3Nlc3Q7XG4iLCIvKipcbiAqIEBmaWxlb3ZlcnZpZXcgR2V0IEhUTUwgZWxlbWVudCdzIGRlc2lnbiBjbGFzc2VzLlxuICogQGF1dGhvciBOSE4gRkUgRGV2ZWxvcG1lbnQgTGFiIDxkbF9qYXZhc2NyaXB0QG5obi5jb20+XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgaXNVbmRlZmluZWQgPSByZXF1aXJlKCcuLi90eXBlL2lzVW5kZWZpbmVkJyk7XG5cbi8qKlxuICogR2V0IEhUTUwgZWxlbWVudCdzIGRlc2lnbiBjbGFzc2VzLlxuICogQHBhcmFtIHsoSFRNTEVsZW1lbnR8U1ZHRWxlbWVudCl9IGVsZW1lbnQgdGFyZ2V0IGVsZW1lbnRcbiAqIEByZXR1cm5zIHtzdHJpbmd9IGVsZW1lbnQgY3NzIGNsYXNzIG5hbWVcbiAqIEBtZW1iZXJvZiBtb2R1bGU6ZG9tVXRpbFxuICovXG5mdW5jdGlvbiBnZXRDbGFzcyhlbGVtZW50KSB7XG4gICAgaWYgKCFlbGVtZW50IHx8ICFlbGVtZW50LmNsYXNzTmFtZSkge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgaWYgKGlzVW5kZWZpbmVkKGVsZW1lbnQuY2xhc3NOYW1lLmJhc2VWYWwpKSB7XG4gICAgICAgIHJldHVybiBlbGVtZW50LmNsYXNzTmFtZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZWxlbWVudC5jbGFzc05hbWUuYmFzZVZhbDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRDbGFzcztcbiIsIi8qKlxuICogQGZpbGVvdmVydmlldyBDaGVjayBlbGVtZW50IG1hdGNoIHNlbGVjdG9yXG4gKiBAYXV0aG9yIE5ITiBGRSBEZXZlbG9wbWVudCBMYWIgPGRsX2phdmFzY3JpcHRAbmhuLmNvbT5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBpbkFycmF5ID0gcmVxdWlyZSgnLi4vYXJyYXkvaW5BcnJheScpO1xudmFyIHRvQXJyYXkgPSByZXF1aXJlKCcuLi9jb2xsZWN0aW9uL3RvQXJyYXknKTtcblxudmFyIGVsUHJvdG8gPSBFbGVtZW50LnByb3RvdHlwZTtcbnZhciBtYXRjaFNlbGVjdG9yID0gZWxQcm90by5tYXRjaGVzIHx8XG4gICAgZWxQcm90by53ZWJraXRNYXRjaGVzU2VsZWN0b3IgfHxcbiAgICBlbFByb3RvLm1vek1hdGNoZXNTZWxlY3RvciB8fFxuICAgIGVsUHJvdG8ubXNNYXRjaGVzU2VsZWN0b3IgfHxcbiAgICBmdW5jdGlvbihzZWxlY3Rvcikge1xuICAgICAgICB2YXIgZG9jID0gdGhpcy5kb2N1bWVudCB8fCB0aGlzLm93bmVyRG9jdW1lbnQ7XG5cbiAgICAgICAgcmV0dXJuIGluQXJyYXkodGhpcywgdG9BcnJheShkb2MucXVlcnlTZWxlY3RvckFsbChzZWxlY3RvcikpKSA+IC0xO1xuICAgIH07XG5cbi8qKlxuICogQ2hlY2sgZWxlbWVudCBtYXRjaCBzZWxlY3RvclxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudCAtIGVsZW1lbnQgdG8gY2hlY2tcbiAqIEBwYXJhbSB7c3RyaW5nfSBzZWxlY3RvciAtIHNlbGVjdG9yIHRvIGNoZWNrXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gaXMgc2VsZWN0b3IgbWF0Y2hlZCB0byBlbGVtZW50P1xuICogQG1lbWJlcm9mIG1vZHVsZTpkb21VdGlsXG4gKi9cbmZ1bmN0aW9uIG1hdGNoZXMoZWxlbWVudCwgc2VsZWN0b3IpIHtcbiAgICByZXR1cm4gbWF0Y2hTZWxlY3Rvci5jYWxsKGVsZW1lbnQsIHNlbGVjdG9yKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXRjaGVzO1xuIiwiLyoqXG4gKiBAZmlsZW92ZXJ2aWV3IFJlbW92ZSBjc3MgY2xhc3MgZnJvbSBlbGVtZW50XG4gKiBAYXV0aG9yIE5ITiBGRSBEZXZlbG9wbWVudCBMYWIgPGRsX2phdmFzY3JpcHRAbmhuLmNvbT5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBmb3JFYWNoQXJyYXkgPSByZXF1aXJlKCcuLi9jb2xsZWN0aW9uL2ZvckVhY2hBcnJheScpO1xudmFyIGluQXJyYXkgPSByZXF1aXJlKCcuLi9hcnJheS9pbkFycmF5Jyk7XG52YXIgZ2V0Q2xhc3MgPSByZXF1aXJlKCcuL2dldENsYXNzJyk7XG52YXIgc2V0Q2xhc3NOYW1lID0gcmVxdWlyZSgnLi9fc2V0Q2xhc3NOYW1lJyk7XG5cbi8qKlxuICogUmVtb3ZlIGNzcyBjbGFzcyBmcm9tIGVsZW1lbnRcbiAqIEBwYXJhbSB7KEhUTUxFbGVtZW50fFNWR0VsZW1lbnQpfSBlbGVtZW50IC0gdGFyZ2V0IGVsZW1lbnRcbiAqIEBwYXJhbSB7Li4uc3RyaW5nfSBjc3NDbGFzcyAtIGNzcyBjbGFzc2VzIHRvIHJlbW92ZVxuICogQG1lbWJlcm9mIG1vZHVsZTpkb21VdGlsXG4gKi9cbmZ1bmN0aW9uIHJlbW92ZUNsYXNzKGVsZW1lbnQpIHtcbiAgICB2YXIgY3NzQ2xhc3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgIHZhciBjbGFzc0xpc3QgPSBlbGVtZW50LmNsYXNzTGlzdDtcbiAgICB2YXIgb3JpZ2luLCBuZXdDbGFzcztcblxuICAgIGlmIChjbGFzc0xpc3QpIHtcbiAgICAgICAgZm9yRWFjaEFycmF5KGNzc0NsYXNzLCBmdW5jdGlvbihuYW1lKSB7XG4gICAgICAgICAgICBjbGFzc0xpc3QucmVtb3ZlKG5hbWUpO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgb3JpZ2luID0gZ2V0Q2xhc3MoZWxlbWVudCkuc3BsaXQoL1xccysvKTtcbiAgICBuZXdDbGFzcyA9IFtdO1xuICAgIGZvckVhY2hBcnJheShvcmlnaW4sIGZ1bmN0aW9uKG5hbWUpIHtcbiAgICAgICAgaWYgKGluQXJyYXkobmFtZSwgY3NzQ2xhc3MpIDwgMCkge1xuICAgICAgICAgICAgbmV3Q2xhc3MucHVzaChuYW1lKTtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgc2V0Q2xhc3NOYW1lKGVsZW1lbnQsIG5ld0NsYXNzKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSByZW1vdmVDbGFzcztcbiIsIi8qKlxuICogQGZpbGVvdmVydmlldyBSZW1vdmUgZWxlbWVudCBmcm9tIHBhcmVudCBub2RlLlxuICogQGF1dGhvciBOSE4gRkUgRGV2ZWxvcG1lbnQgTGFiIDxkbF9qYXZhc2NyaXB0QG5obi5jb20+XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIFJlbW92ZSBlbGVtZW50IGZyb20gcGFyZW50IG5vZGUuXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50IC0gZWxlbWVudCB0byByZW1vdmUuXG4gKiBAbWVtYmVyb2YgbW9kdWxlOmRvbVV0aWxcbiAqL1xuZnVuY3Rpb24gcmVtb3ZlRWxlbWVudChlbGVtZW50KSB7XG4gICAgaWYgKGVsZW1lbnQgJiYgZWxlbWVudC5wYXJlbnROb2RlKSB7XG4gICAgICAgIGVsZW1lbnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlbGVtZW50KTtcbiAgICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcmVtb3ZlRWxlbWVudDtcbiIsIi8qKlxuICogQGZpbGVvdmVydmlldyBFeHRlbmQgdGhlIHRhcmdldCBvYmplY3QgZnJvbSBvdGhlciBvYmplY3RzLlxuICogQGF1dGhvciBOSE4gRkUgRGV2ZWxvcG1lbnQgTGFiIDxkbF9qYXZhc2NyaXB0QG5obi5jb20+XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIEBtb2R1bGUgb2JqZWN0XG4gKi9cblxuLyoqXG4gKiBFeHRlbmQgdGhlIHRhcmdldCBvYmplY3QgZnJvbSBvdGhlciBvYmplY3RzLlxuICogQHBhcmFtIHtvYmplY3R9IHRhcmdldCAtIE9iamVjdCB0aGF0IHdpbGwgYmUgZXh0ZW5kZWRcbiAqIEBwYXJhbSB7Li4ub2JqZWN0fSBvYmplY3RzIC0gT2JqZWN0cyBhcyBzb3VyY2VzXG4gKiBAcmV0dXJucyB7b2JqZWN0fSBFeHRlbmRlZCBvYmplY3RcbiAqIEBtZW1iZXJvZiBtb2R1bGU6b2JqZWN0XG4gKi9cbmZ1bmN0aW9uIGV4dGVuZCh0YXJnZXQsIG9iamVjdHMpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICAgIHZhciBoYXNPd25Qcm9wID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbiAgICB2YXIgc291cmNlLCBwcm9wLCBpLCBsZW47XG5cbiAgICBmb3IgKGkgPSAxLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbGVuOyBpICs9IDEpIHtcbiAgICAgICAgc291cmNlID0gYXJndW1lbnRzW2ldO1xuICAgICAgICBmb3IgKHByb3AgaW4gc291cmNlKSB7XG4gICAgICAgICAgICBpZiAoaGFzT3duUHJvcC5jYWxsKHNvdXJjZSwgcHJvcCkpIHtcbiAgICAgICAgICAgICAgICB0YXJnZXRbcHJvcF0gPSBzb3VyY2VbcHJvcF07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGFyZ2V0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGV4dGVuZDtcbiIsIi8qKlxuICogQGZpbGVvdmVydmlldyBSZXF1ZXN0IGltYWdlIHBpbmcuXG4gKiBAYXV0aG9yIE5ITiBGRSBEZXZlbG9wbWVudCBMYWIgPGRsX2phdmFzY3JpcHRAbmhuLmNvbT5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBmb3JFYWNoT3duUHJvcGVydGllcyA9IHJlcXVpcmUoJy4uL2NvbGxlY3Rpb24vZm9yRWFjaE93blByb3BlcnRpZXMnKTtcblxuLyoqXG4gKiBAbW9kdWxlIHJlcXVlc3RcbiAqL1xuXG4vKipcbiAqIFJlcXVlc3QgaW1hZ2UgcGluZy5cbiAqIEBwYXJhbSB7U3RyaW5nfSB1cmwgdXJsIGZvciBwaW5nIHJlcXVlc3RcbiAqIEBwYXJhbSB7T2JqZWN0fSB0cmFja2luZ0luZm8gaW5mb3MgZm9yIG1ha2UgcXVlcnkgc3RyaW5nXG4gKiBAcmV0dXJucyB7SFRNTEVsZW1lbnR9XG4gKiBAbWVtYmVyb2YgbW9kdWxlOnJlcXVlc3RcbiAqIEBleGFtcGxlXG4gKiB2YXIgaW1hZ2VQaW5nID0gcmVxdWlyZSgndHVpLWNvZGUtc25pcHBldC9yZXF1ZXN0L2ltYWdlUGluZycpOyAvLyBub2RlLCBjb21tb25qc1xuICpcbiAqIGltYWdlUGluZygnaHR0cHM6Ly93d3cuZ29vZ2xlLWFuYWx5dGljcy5jb20vY29sbGVjdCcsIHtcbiAqICAgICB2OiAxLFxuICogICAgIHQ6ICdldmVudCcsXG4gKiAgICAgdGlkOiAndHJhY2tpbmdpZCcsXG4gKiAgICAgY2lkOiAnY2lkJyxcbiAqICAgICBkcDogJ2RwJyxcbiAqICAgICBkaDogJ2RoJ1xuICogfSk7XG4gKi9cbmZ1bmN0aW9uIGltYWdlUGluZyh1cmwsIHRyYWNraW5nSW5mbykge1xuICAgIHZhciB0cmFja2luZ0VsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbWcnKTtcbiAgICB2YXIgcXVlcnlTdHJpbmcgPSAnJztcbiAgICBmb3JFYWNoT3duUHJvcGVydGllcyh0cmFja2luZ0luZm8sIGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHtcbiAgICAgICAgcXVlcnlTdHJpbmcgKz0gJyYnICsga2V5ICsgJz0nICsgdmFsdWU7XG4gICAgfSk7XG4gICAgcXVlcnlTdHJpbmcgPSBxdWVyeVN0cmluZy5zdWJzdHJpbmcoMSk7XG5cbiAgICB0cmFja2luZ0VsZW1lbnQuc3JjID0gdXJsICsgJz8nICsgcXVlcnlTdHJpbmc7XG5cbiAgICB0cmFja2luZ0VsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRyYWNraW5nRWxlbWVudCk7XG4gICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZCh0cmFja2luZ0VsZW1lbnQpO1xuXG4gICAgcmV0dXJuIHRyYWNraW5nRWxlbWVudDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpbWFnZVBpbmc7XG4iLCIvKipcbiAqIEBmaWxlb3ZlcnZpZXcgU2VuZCBob3N0bmFtZSBvbiBET01Db250ZW50TG9hZGVkLlxuICogQGF1dGhvciBOSE4gRkUgRGV2ZWxvcG1lbnQgTGFiIDxkbF9qYXZhc2NyaXB0QG5obi5jb20+XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgaXNVbmRlZmluZWQgPSByZXF1aXJlKCcuLi90eXBlL2lzVW5kZWZpbmVkJyk7XG52YXIgaW1hZ2VQaW5nID0gcmVxdWlyZSgnLi9pbWFnZVBpbmcnKTtcblxudmFyIG1zN2RheXMgPSA3ICogMjQgKiA2MCAqIDYwICogMTAwMDtcblxuLyoqXG4gKiBDaGVjayBpZiB0aGUgZGF0ZSBoYXMgcGFzc2VkIDcgZGF5c1xuICogQHBhcmFtIHtudW1iZXJ9IGRhdGUgLSBtaWxsaXNlY29uZHNcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gaXNFeHBpcmVkKGRhdGUpIHtcbiAgICB2YXIgbm93ID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG5cbiAgICByZXR1cm4gbm93IC0gZGF0ZSA+IG1zN2RheXM7XG59XG5cbi8qKlxuICogU2VuZCBob3N0bmFtZSBvbiBET01Db250ZW50TG9hZGVkLlxuICogVG8gcHJldmVudCBob3N0bmFtZSBzZXQgdHVpLnVzYWdlU3RhdGlzdGljcyB0byBmYWxzZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBhcHBOYW1lIC0gYXBwbGljYXRpb24gbmFtZVxuICogQHBhcmFtIHtzdHJpbmd9IHRyYWNraW5nSWQgLSBHQSB0cmFja2luZyBJRFxuICogQGlnbm9yZVxuICovXG5mdW5jdGlvbiBzZW5kSG9zdG5hbWUoYXBwTmFtZSwgdHJhY2tpbmdJZCkge1xuICAgIHZhciB1cmwgPSAnaHR0cHM6Ly93d3cuZ29vZ2xlLWFuYWx5dGljcy5jb20vY29sbGVjdCc7XG4gICAgdmFyIGhvc3RuYW1lID0gbG9jYXRpb24uaG9zdG5hbWU7XG4gICAgdmFyIGhpdFR5cGUgPSAnZXZlbnQnO1xuICAgIHZhciBldmVudENhdGVnb3J5ID0gJ3VzZSc7XG4gICAgdmFyIGFwcGxpY2F0aW9uS2V5Rm9yU3RvcmFnZSA9ICdUT0FTVCBVSSAnICsgYXBwTmFtZSArICcgZm9yICcgKyBob3N0bmFtZSArICc6IFN0YXRpc3RpY3MnO1xuICAgIHZhciBkYXRlID0gd2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKGFwcGxpY2F0aW9uS2V5Rm9yU3RvcmFnZSk7XG5cbiAgICAvLyBza2lwIGlmIHRoZSBmbGFnIGlzIGRlZmluZWQgYW5kIGlzIHNldCB0byBmYWxzZSBleHBsaWNpdGx5XG4gICAgaWYgKCFpc1VuZGVmaW5lZCh3aW5kb3cudHVpKSAmJiB3aW5kb3cudHVpLnVzYWdlU3RhdGlzdGljcyA9PT0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIHNraXAgaWYgbm90IHBhc3Mgc2V2ZW4gZGF5cyBvbGRcbiAgICBpZiAoZGF0ZSAmJiAhaXNFeHBpcmVkKGRhdGUpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oYXBwbGljYXRpb25LZXlGb3JTdG9yYWdlLCBuZXcgRGF0ZSgpLmdldFRpbWUoKSk7XG5cbiAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAoZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gJ2ludGVyYWN0aXZlJyB8fCBkb2N1bWVudC5yZWFkeVN0YXRlID09PSAnY29tcGxldGUnKSB7XG4gICAgICAgICAgICBpbWFnZVBpbmcodXJsLCB7XG4gICAgICAgICAgICAgICAgdjogMSxcbiAgICAgICAgICAgICAgICB0OiBoaXRUeXBlLFxuICAgICAgICAgICAgICAgIHRpZDogdHJhY2tpbmdJZCxcbiAgICAgICAgICAgICAgICBjaWQ6IGhvc3RuYW1lLFxuICAgICAgICAgICAgICAgIGRwOiBob3N0bmFtZSxcbiAgICAgICAgICAgICAgICBkaDogYXBwTmFtZSxcbiAgICAgICAgICAgICAgICBlbDogYXBwTmFtZSxcbiAgICAgICAgICAgICAgICBlYzogZXZlbnRDYXRlZ29yeVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9LCAxMDAwKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzZW5kSG9zdG5hbWU7XG4iLCIvKipcbiAqIEBmaWxlb3ZlcnZpZXcgQ2hlY2sgd2hldGhlciB0aGUgZ2l2ZW4gdmFyaWFibGUgaXMgYW4gaW5zdGFuY2Ugb2YgQXJyYXkgb3Igbm90LlxuICogQGF1dGhvciBOSE4gRkUgRGV2ZWxvcG1lbnQgTGFiIDxkbF9qYXZhc2NyaXB0QG5obi5jb20+XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIENoZWNrIHdoZXRoZXIgdGhlIGdpdmVuIHZhcmlhYmxlIGlzIGFuIGluc3RhbmNlIG9mIEFycmF5IG9yIG5vdC5cbiAqIElmIHRoZSBnaXZlbiB2YXJpYWJsZSBpcyBhbiBpbnN0YW5jZSBvZiBBcnJheSwgcmV0dXJuIHRydWUuXG4gKiBAcGFyYW0geyp9IG9iaiAtIFRhcmdldCBmb3IgY2hlY2tpbmdcbiAqIEByZXR1cm5zIHtib29sZWFufSBJcyBhcnJheSBpbnN0YW5jZT9cbiAqIEBtZW1iZXJvZiBtb2R1bGU6dHlwZVxuICovXG5mdW5jdGlvbiBpc0FycmF5KG9iaikge1xuICAgIHJldHVybiBvYmogaW5zdGFuY2VvZiBBcnJheTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0FycmF5O1xuIiwiLyoqXG4gKiBAZmlsZW92ZXJ2aWV3IENoZWNrIHdoZXRoZXIgdGhlIGdpdmVuIHZhcmlhYmxlIGlzIGEgc3RyaW5nIG9yIG5vdC5cbiAqIEBhdXRob3IgTkhOIEZFIERldmVsb3BtZW50IExhYiA8ZGxfamF2YXNjcmlwdEBuaG4uY29tPlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBDaGVjayB3aGV0aGVyIHRoZSBnaXZlbiB2YXJpYWJsZSBpcyBhIGJvb2xlYW4gb3Igbm90LlxuICogIElmIHRoZSBnaXZlbiB2YXJpYWJsZSBpcyBhIGJvb2xlYW4sIHJldHVybiB0cnVlLlxuICogQHBhcmFtIHsqfSBvYmogLSBUYXJnZXQgZm9yIGNoZWNraW5nXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gSXMgYm9vbGVhbj9cbiAqIEBtZW1iZXJvZiBtb2R1bGU6dHlwZVxuICovXG5mdW5jdGlvbiBpc0Jvb2xlYW4ob2JqKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBvYmogPT09ICdib29sZWFuJyB8fCBvYmogaW5zdGFuY2VvZiBCb29sZWFuO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQm9vbGVhbjtcbiIsIi8qKlxuICogQGZpbGVvdmVydmlldyBDaGVjayB3aGV0aGVyIHRoZSBnaXZlbiB2YXJpYWJsZSBpcyBleGlzdGluZyBvciBub3QuXG4gKiBAYXV0aG9yIE5ITiBGRSBEZXZlbG9wbWVudCBMYWIgPGRsX2phdmFzY3JpcHRAbmhuLmNvbT5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBpc1VuZGVmaW5lZCA9IHJlcXVpcmUoJy4vaXNVbmRlZmluZWQnKTtcbnZhciBpc051bGwgPSByZXF1aXJlKCcuL2lzTnVsbCcpO1xuXG4vKipcbiAqIENoZWNrIHdoZXRoZXIgdGhlIGdpdmVuIHZhcmlhYmxlIGlzIGV4aXN0aW5nIG9yIG5vdC5cbiAqIElmIHRoZSBnaXZlbiB2YXJpYWJsZSBpcyBub3QgbnVsbCBhbmQgbm90IHVuZGVmaW5lZCwgcmV0dXJucyB0cnVlLlxuICogQHBhcmFtIHsqfSBwYXJhbSAtIFRhcmdldCBmb3IgY2hlY2tpbmdcbiAqIEByZXR1cm5zIHtib29sZWFufSBJcyBleGlzdHk/XG4gKiBAbWVtYmVyb2YgbW9kdWxlOnR5cGVcbiAqIEBleGFtcGxlXG4gKiB2YXIgaXNFeGlzdHkgPSByZXF1aXJlKCd0dWktY29kZS1zbmlwcGV0L3R5cGUvaXNFeGlzdHknKTsgLy8gbm9kZSwgY29tbW9uanNcbiAqXG4gKiBpc0V4aXN0eSgnJyk7IC8vdHJ1ZVxuICogaXNFeGlzdHkoMCk7IC8vdHJ1ZVxuICogaXNFeGlzdHkoW10pOyAvL3RydWVcbiAqIGlzRXhpc3R5KHt9KTsgLy90cnVlXG4gKiBpc0V4aXN0eShudWxsKTsgLy9mYWxzZVxuICogaXNFeGlzdHkodW5kZWZpbmVkKTsgLy9mYWxzZVxuKi9cbmZ1bmN0aW9uIGlzRXhpc3R5KHBhcmFtKSB7XG4gICAgcmV0dXJuICFpc1VuZGVmaW5lZChwYXJhbSkgJiYgIWlzTnVsbChwYXJhbSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNFeGlzdHk7XG4iLCIvKipcbiAqIEBmaWxlb3ZlcnZpZXcgQ2hlY2sgd2hldGhlciB0aGUgZ2l2ZW4gdmFyaWFibGUgaXMgYSBmdW5jdGlvbiBvciBub3QuXG4gKiBAYXV0aG9yIE5ITiBGRSBEZXZlbG9wbWVudCBMYWIgPGRsX2phdmFzY3JpcHRAbmhuLmNvbT5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbi8qKlxuICogQ2hlY2sgd2hldGhlciB0aGUgZ2l2ZW4gdmFyaWFibGUgaXMgYSBmdW5jdGlvbiBvciBub3QuXG4gKiBJZiB0aGUgZ2l2ZW4gdmFyaWFibGUgaXMgYSBmdW5jdGlvbiwgcmV0dXJuIHRydWUuXG4gKiBAcGFyYW0geyp9IG9iaiAtIFRhcmdldCBmb3IgY2hlY2tpbmdcbiAqIEByZXR1cm5zIHtib29sZWFufSBJcyBmdW5jdGlvbj9cbiAqIEBtZW1iZXJvZiBtb2R1bGU6dHlwZVxuICovXG5mdW5jdGlvbiBpc0Z1bmN0aW9uKG9iaikge1xuICAgIHJldHVybiBvYmogaW5zdGFuY2VvZiBGdW5jdGlvbjtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0Z1bmN0aW9uO1xuIiwiLyoqXG4gKiBAZmlsZW92ZXJ2aWV3IENoZWNrIHdoZXRoZXIgdGhlIGdpdmVuIHZhcmlhYmxlIGlzIGEgaW5zdGFuY2Ugb2YgSFRNTE5vZGUgb3Igbm90LlxuICogQGF1dGhvciBOSE4gRkUgRGV2ZWxvcG1lbnQgTGFiIDxkbF9qYXZhc2NyaXB0QG5obi5jb20+XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIENoZWNrIHdoZXRoZXIgdGhlIGdpdmVuIHZhcmlhYmxlIGlzIGEgaW5zdGFuY2Ugb2YgSFRNTE5vZGUgb3Igbm90LlxuICogSWYgdGhlIGdpdmVuIHZhcmlhYmxlcyBpcyBhIGluc3RhbmNlIG9mIEhUTUxOb2RlLCByZXR1cm4gdHJ1ZS5cbiAqIEBwYXJhbSB7Kn0gaHRtbCAtIFRhcmdldCBmb3IgY2hlY2tpbmdcbiAqIEByZXR1cm5zIHtib29sZWFufSBJcyBIVE1MTm9kZSA/XG4gKiBAbWVtYmVyb2YgbW9kdWxlOnR5cGVcbiAqL1xuZnVuY3Rpb24gaXNIVE1MTm9kZShodG1sKSB7XG4gICAgaWYgKHR5cGVvZiBIVE1MRWxlbWVudCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIChodG1sICYmIChodG1sIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgfHwgISFodG1sLm5vZGVUeXBlKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuICEhKGh0bWwgJiYgaHRtbC5ub2RlVHlwZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNIVE1MTm9kZTtcbiIsIi8qKlxuICogQGZpbGVvdmVydmlldyBDaGVjayB3aGV0aGVyIHRoZSBnaXZlbiB2YXJpYWJsZSBpcyBudWxsIG9yIG5vdC5cbiAqIEBhdXRob3IgTkhOIEZFIERldmVsb3BtZW50IExhYiA8ZGxfamF2YXNjcmlwdEBuaG4uY29tPlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBDaGVjayB3aGV0aGVyIHRoZSBnaXZlbiB2YXJpYWJsZSBpcyBudWxsIG9yIG5vdC5cbiAqIElmIHRoZSBnaXZlbiB2YXJpYWJsZShhcmd1bWVudHNbMF0pIGlzIG51bGwsIHJldHVybnMgdHJ1ZS5cbiAqIEBwYXJhbSB7Kn0gb2JqIC0gVGFyZ2V0IGZvciBjaGVja2luZ1xuICogQHJldHVybnMge2Jvb2xlYW59IElzIG51bGw/XG4gKiBAbWVtYmVyb2YgbW9kdWxlOnR5cGVcbiAqL1xuZnVuY3Rpb24gaXNOdWxsKG9iaikge1xuICAgIHJldHVybiBvYmogPT09IG51bGw7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNOdWxsO1xuIiwiLyoqXG4gKiBAZmlsZW92ZXJ2aWV3IENoZWNrIHdoZXRoZXIgdGhlIGdpdmVuIHZhcmlhYmxlIGlzIGEgbnVtYmVyIG9yIG5vdC5cbiAqIEBhdXRob3IgTkhOIEZFIERldmVsb3BtZW50IExhYiA8ZGxfamF2YXNjcmlwdEBuaG4uY29tPlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBDaGVjayB3aGV0aGVyIHRoZSBnaXZlbiB2YXJpYWJsZSBpcyBhIG51bWJlciBvciBub3QuXG4gKiBJZiB0aGUgZ2l2ZW4gdmFyaWFibGUgaXMgYSBudW1iZXIsIHJldHVybiB0cnVlLlxuICogQHBhcmFtIHsqfSBvYmogLSBUYXJnZXQgZm9yIGNoZWNraW5nXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gSXMgbnVtYmVyP1xuICogQG1lbWJlcm9mIG1vZHVsZTp0eXBlXG4gKi9cbmZ1bmN0aW9uIGlzTnVtYmVyKG9iaikge1xuICAgIHJldHVybiB0eXBlb2Ygb2JqID09PSAnbnVtYmVyJyB8fCBvYmogaW5zdGFuY2VvZiBOdW1iZXI7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNOdW1iZXI7XG4iLCIvKipcbiAqIEBmaWxlb3ZlcnZpZXcgQ2hlY2sgd2hldGhlciB0aGUgZ2l2ZW4gdmFyaWFibGUgaXMgYW4gb2JqZWN0IG9yIG5vdC5cbiAqIEBhdXRob3IgTkhOIEZFIERldmVsb3BtZW50IExhYiA8ZGxfamF2YXNjcmlwdEBuaG4uY29tPlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBDaGVjayB3aGV0aGVyIHRoZSBnaXZlbiB2YXJpYWJsZSBpcyBhbiBvYmplY3Qgb3Igbm90LlxuICogSWYgdGhlIGdpdmVuIHZhcmlhYmxlIGlzIGFuIG9iamVjdCwgcmV0dXJuIHRydWUuXG4gKiBAcGFyYW0geyp9IG9iaiAtIFRhcmdldCBmb3IgY2hlY2tpbmdcbiAqIEByZXR1cm5zIHtib29sZWFufSBJcyBvYmplY3Q/XG4gKiBAbWVtYmVyb2YgbW9kdWxlOnR5cGVcbiAqL1xuZnVuY3Rpb24gaXNPYmplY3Qob2JqKSB7XG4gICAgcmV0dXJuIG9iaiA9PT0gT2JqZWN0KG9iaik7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNPYmplY3Q7XG4iLCIvKipcbiAqIEBmaWxlb3ZlcnZpZXcgQ2hlY2sgd2hldGhlciB0aGUgZ2l2ZW4gdmFyaWFibGUgaXMgYSBzdHJpbmcgb3Igbm90LlxuICogQGF1dGhvciBOSE4gRkUgRGV2ZWxvcG1lbnQgTGFiIDxkbF9qYXZhc2NyaXB0QG5obi5jb20+XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIENoZWNrIHdoZXRoZXIgdGhlIGdpdmVuIHZhcmlhYmxlIGlzIGEgc3RyaW5nIG9yIG5vdC5cbiAqIElmIHRoZSBnaXZlbiB2YXJpYWJsZSBpcyBhIHN0cmluZywgcmV0dXJuIHRydWUuXG4gKiBAcGFyYW0geyp9IG9iaiAtIFRhcmdldCBmb3IgY2hlY2tpbmdcbiAqIEByZXR1cm5zIHtib29sZWFufSBJcyBzdHJpbmc/XG4gKiBAbWVtYmVyb2YgbW9kdWxlOnR5cGVcbiAqL1xuZnVuY3Rpb24gaXNTdHJpbmcob2JqKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBvYmogPT09ICdzdHJpbmcnIHx8IG9iaiBpbnN0YW5jZW9mIFN0cmluZztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc1N0cmluZztcbiIsIi8qKlxuICogQGZpbGVvdmVydmlldyBDaGVjayB3aGV0aGVyIHRoZSBnaXZlbiB2YXJpYWJsZSBpcyB1bmRlZmluZWQgb3Igbm90LlxuICogQGF1dGhvciBOSE4gRkUgRGV2ZWxvcG1lbnQgTGFiIDxkbF9qYXZhc2NyaXB0QG5obi5jb20+XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIENoZWNrIHdoZXRoZXIgdGhlIGdpdmVuIHZhcmlhYmxlIGlzIHVuZGVmaW5lZCBvciBub3QuXG4gKiBJZiB0aGUgZ2l2ZW4gdmFyaWFibGUgaXMgdW5kZWZpbmVkLCByZXR1cm5zIHRydWUuXG4gKiBAcGFyYW0geyp9IG9iaiAtIFRhcmdldCBmb3IgY2hlY2tpbmdcbiAqIEByZXR1cm5zIHtib29sZWFufSBJcyB1bmRlZmluZWQ/XG4gKiBAbWVtYmVyb2YgbW9kdWxlOnR5cGVcbiAqL1xuZnVuY3Rpb24gaXNVbmRlZmluZWQob2JqKSB7XG4gICAgcmV0dXJuIG9iaiA9PT0gdW5kZWZpbmVkOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVuZGVmaW5lZFxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzVW5kZWZpbmVkO1xuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luIiwiLyoqXG4gKiBAZmlsZW92ZXJ2aWV3IFRoZSBzdGF0aWMgdmFsdWVzXG4gKiBAYXV0aG9yIE5ITi4gRkUgZGV2IHRlYW0uPGRsX2phdmFzY3JpcHRAbmhuLmNvbT5cbiAqL1xuXG5pbXBvcnQgZm9yRWFjaE93blByb3BlcnRpZXMgZnJvbSAndHVpLWNvZGUtc25pcHBldC9jb2xsZWN0aW9uL2ZvckVhY2hPd25Qcm9wZXJ0aWVzJztcblxuY29uc3QgQ1NTX1BSRUZJWCA9ICd0dWktc2VsZWN0LWJveCc7XG5cbmNvbnN0IGNsYXNzTmFtZXMgPSB7XG4gIFNFTEVDVF9CT1g6ICcnLFxuICBJVEVNOiAnaXRlbScsXG4gIElURU1fR1JPVVA6ICdpdGVtLWdyb3VwJyxcbiAgSVRFTV9HUk9VUF9MQUJFTDogJ2l0ZW0tZ3JvdXAtbGFiZWwnLFxuICBEUk9QRE9XTjogJ2Ryb3Bkb3duJyxcbiAgSU5QVVQ6ICdpbnB1dCcsXG4gIFBMQUNFSE9MREVSOiAncGxhY2Vob2xkZXInLFxuICBJQ09OOiAnaWNvbicsXG4gIE9QRU46ICdvcGVuJyxcbiAgSElEREVOOiAnaGlkZGVuJyxcbiAgRElTQUJMRUQ6ICdkaXNhYmxlZCcsXG4gIFNFTEVDVEVEOiAnc2VsZWN0ZWQnLFxuICBISUdITElHSFQ6ICdoaWdobGlnaHQnXG59O1xuXG5leHBvcnQgY29uc3QgY2xzID0gKGZ1bmN0aW9uKCkge1xuICBmb3JFYWNoT3duUHJvcGVydGllcyhjbGFzc05hbWVzLCAodmFsdWUsIGtleSkgPT4ge1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgY2xhc3NOYW1lc1trZXldID0gYCR7Q1NTX1BSRUZJWH0tJHt2YWx1ZX1gO1xuICAgIH0gZWxzZSB7XG4gICAgICBjbGFzc05hbWVzW2tleV0gPSBDU1NfUFJFRklYO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIGNsYXNzTmFtZXM7XG59KSgpO1xuIiwiLyoqXG4gKiBAZmlsZW92ZXJ2aWV3IERyb3Bkb3duXG4gKiBAYXV0aG9yIE5ITiBGRSBEZXZlbG9wbWVudCBMYWIgPGRsX2phdmFzY3JpcHRAbmhuLmNvbT5cbiAqL1xuXG5pbXBvcnQgZm9yRWFjaEFycmF5IGZyb20gJ3R1aS1jb2RlLXNuaXBwZXQvY29sbGVjdGlvbi9mb3JFYWNoQXJyYXknO1xuaW1wb3J0IGlzRXhpc3R5IGZyb20gJ3R1aS1jb2RlLXNuaXBwZXQvdHlwZS9pc0V4aXN0eSc7XG5pbXBvcnQgaXNOdW1iZXIgZnJvbSAndHVpLWNvZGUtc25pcHBldC90eXBlL2lzTnVtYmVyJztcbmltcG9ydCBhZGRDbGFzcyBmcm9tICd0dWktY29kZS1zbmlwcGV0L2RvbVV0aWwvYWRkQ2xhc3MnO1xuaW1wb3J0IHJlbW92ZUNsYXNzIGZyb20gJ3R1aS1jb2RlLXNuaXBwZXQvZG9tVXRpbC9yZW1vdmVDbGFzcyc7XG5pbXBvcnQgcmVtb3ZlRWxlbWVudCBmcm9tICd0dWktY29kZS1zbmlwcGV0L2RvbVV0aWwvcmVtb3ZlRWxlbWVudCc7XG5pbXBvcnQgeyBjcmVhdGVFbGVtZW50IH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBjbHMgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgSXRlbUdyb3VwIGZyb20gJy4vaXRlbUdyb3VwJztcbmltcG9ydCBJdGVtIGZyb20gJy4vaXRlbSc7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAaWdub3JlXG4gKiBAcGFyYW0ge29iamVjdH0gb3B0aW9ucyAtIG9wdGlvbnNcbiAqICAgQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLnBsYWNlaG9sZGVyXSAtIHBsYWNlaG9sZGVyIGZvciBhbiBpbnB1dFxuICogICBAcGFyYW0ge2FycmF5PGl0ZW1EYXRhfGl0ZW1Hcm91cERhdGE+fSBvcHRpb25zLmRhdGEgLSBkYXRhIGZvciBJdGVtR3JvdXBzIGFuZCBJdGVtc1xuICogICBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmRpc2FibGVkPWZhbHNlXSAtIHdoZXRoZXIgYSBkcm9wZG93biBzaG91bGQgYmUgZGlzYWJsZWQgb3Igbm90XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERyb3Bkb3duIHtcbiAgY29uc3RydWN0b3IoeyBwbGFjZWhvbGRlciwgZGF0YSwgZGlzYWJsZWQgPSBmYWxzZSB9KSB7XG4gICAgLyoqXG4gICAgICogQHR5cGUge0hUTUxFbGVtZW50fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5lbCA9IGNyZWF0ZUVsZW1lbnQoJ3VsJywgJycsIHsgY2xhc3NOYW1lOiBgJHtjbHMuRFJPUERPV059ICR7Y2xzLkhJRERFTn1gIH0pO1xuXG4gICAgLyoqXG4gICAgICogQHR5cGUge0hUTUxFbGVtZW50fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5uYXRpdmVFbCA9IGNyZWF0ZUVsZW1lbnQoJ3NlbGVjdCcsICcnLCB7IGNsYXNzTmFtZTogY2xzLkhJRERFTiwgdGFiSW5kZXg6IC0xIH0pO1xuXG4gICAgLyoqXG4gICAgICogSXRlbXMgYW5kIEl0ZW1Hcm91cHNcbiAgICAgKiBAdHlwZSB7QXJyYXkuPEl0ZW18SXRlbUdyb3VwPn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuaXRlbXMgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIHRoZSBudW1iZXIgb2YgSXRlbVxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLml0ZW1MZW5ndGggPSAwO1xuXG4gICAgLyoqXG4gICAgICogQHR5cGUge0l0ZW19XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLnNlbGVjdGVkSXRlbSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBAdHlwZSB7SXRlbX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuaGlnaGxpZ2h0ZWRJdGVtID0gbnVsbDtcblxuICAgIHRoaXMuaW5pdGlhbGl6ZShkYXRhLCBkaXNhYmxlZCwgcGxhY2Vob2xkZXIpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBJdGVtcyBhbmQgSXRlbUdyb3VwcyBhbmQgY2FsY3VsYXRlIHRoZSBudW1iZXIgb2YgSXRlbXNcbiAgICogQHJldHVybiB7YXJyYXk8SXRlbXxJdGVtR3JvdXA+fVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgaW5pdGlhbGl6ZUl0ZW1zKGRhdGEpIHtcbiAgICBsZXQgaXRlbTtcbiAgICBsZXQgaXRlbUluZGV4ID0gMDtcbiAgICBsZXQgaXRlbUdyb3VwSW5kZXggPSAwO1xuICAgIGRhdGEuZm9yRWFjaChkYXR1bSA9PiB7XG4gICAgICBpZiAoZGF0dW0uZGF0YSkge1xuICAgICAgICBpdGVtID0gbmV3IEl0ZW1Hcm91cCh7IGluZGV4OiBpdGVtSW5kZXgsIGl0ZW1Hcm91cEluZGV4LCAuLi5kYXR1bSB9KTtcbiAgICAgICAgaXRlbUluZGV4ICs9IGRhdHVtLmRhdGEubGVuZ3RoIC0gMTtcbiAgICAgICAgaXRlbUdyb3VwSW5kZXggKz0gMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGl0ZW0gPSBuZXcgSXRlbSh7IGluZGV4OiBpdGVtSW5kZXgsIC4uLmRhdHVtIH0pO1xuICAgICAgfVxuXG4gICAgICB0aGlzLml0ZW1zLnB1c2goaXRlbSk7XG4gICAgICBpdGVtLmFwcGVuZFRvQ29udGFpbmVyKHRoaXMuZWwsIHRoaXMubmF0aXZlRWwpO1xuICAgICAgaXRlbUluZGV4ICs9IDE7XG4gICAgfSk7XG5cbiAgICB0aGlzLml0ZW1MZW5ndGggPSBpdGVtSW5kZXg7XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgaW5pdGlhbGl6ZShkYXRhLCBkaXNhYmxlZCwgcGxhY2Vob2xkZXIpIHtcbiAgICBpZiAocGxhY2Vob2xkZXIpIHtcbiAgICAgIGNyZWF0ZUVsZW1lbnQoJ29wdGlvbicsICcnLCB7IGxhYmVsOiBwbGFjZWhvbGRlciwgdmFsdWU6ICcnIH0sIHRoaXMubmF0aXZlRWwpO1xuICAgIH1cblxuICAgIHRoaXMuaW5pdGlhbGl6ZUl0ZW1zKGRhdGEpO1xuXG4gICAgdGhpcy5pdGVyYXRlSXRlbXMoaXRlbSA9PiB7XG4gICAgICBpZiAoIXRoaXMuc2VsZWN0ZWRJdGVtICYmIGl0ZW0uaXNTZWxlY3RlZCgpKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtID0gaXRlbTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3RlZEl0ZW0gJiYgaXRlbS5pc1NlbGVjdGVkKCkpIHtcbiAgICAgICAgaXRlbS5kZXNlbGVjdCgpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKGRpc2FibGVkKSB7XG4gICAgICB0aGlzLmRpc2FibGUoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRXhlY3V0ZSBhIGZ1bmN0aW9uIHdoaWxlIGl0ZXJhdGluZyBpdGVtc1xuICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFjayAtIGZ1bmN0aW9uIHRvIGV4ZWN1dGVcbiAgICogQHBhcmFtICB7Li4uYW55fSBhcmdzIC0gYXJndW1lbnRzXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBpdGVyYXRlSXRlbXMoY2FsbGJhY2ssIC4uLmFyZ3MpIHtcbiAgICBsZXQgaW5kZXggPSAwO1xuXG4gICAgZm9yRWFjaEFycmF5KHRoaXMuaXRlbXMsIGl0ZW0gPT4ge1xuICAgICAgbGV0IHJlc3VsdCA9IHRydWU7XG4gICAgICBpZiAoaXRlbSBpbnN0YW5jZW9mIEl0ZW1Hcm91cCkge1xuICAgICAgICBmb3JFYWNoQXJyYXkoaXRlbS5nZXRJdGVtcygpLCBpdGVtSW5Hcm91cCA9PiB7XG4gICAgICAgICAgcmVzdWx0ID0gY2FsbGJhY2suYXBwbHkodGhpcywgW2l0ZW1Jbkdyb3VwLCBpbmRleCwgLi4uYXJnc10pIHx8IGZhbHNlO1xuICAgICAgICAgIGluZGV4ICs9IDE7XG5cbiAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfVxuXG4gICAgICByZXN1bHQgPSBjYWxsYmFjay5hcHBseSh0aGlzLCBbaXRlbSwgaW5kZXgsIC4uLmFyZ3NdKTtcbiAgICAgIGluZGV4ICs9IDE7XG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogT3BlbiBhIGRyb3Bkb3duIGxpc3RcbiAgICovXG4gIG9wZW4oKSB7XG4gICAgcmVtb3ZlQ2xhc3ModGhpcy5lbCwgY2xzLkhJRERFTik7XG4gICAgY29uc3QgaGlnaGxpZ2h0ZWRJdGVtID1cbiAgICAgICF0aGlzLnNlbGVjdGVkSXRlbSB8fCB0aGlzLnNlbGVjdGVkSXRlbS5pc0Rpc2FibGVkKClcbiAgICAgICAgPyB0aGlzLmdldEl0ZW1zKGl0ZW0gPT4gIWl0ZW0uaXNEaXNhYmxlZCgpKVswXVxuICAgICAgICA6IHRoaXMuc2VsZWN0ZWRJdGVtO1xuICAgIHRoaXMuaGlnaGxpZ2h0KGhpZ2hsaWdodGVkSXRlbSk7XG4gIH1cblxuICAvKipcbiAgICogQ2xvc2UgYSBkcm9wZG93biBsaXN0XG4gICAqL1xuICBjbG9zZSgpIHtcbiAgICBhZGRDbGFzcyh0aGlzLmVsLCBjbHMuSElEREVOKTtcbiAgICB0aGlzLmRlaGlnaGxpZ2h0KCk7XG4gIH1cblxuICAvKipcbiAgICogRGlzYWJsZSBhbiBkcm9wZG93blxuICAgKi9cbiAgZGlzYWJsZSgpIHtcbiAgICB0aGlzLm5hdGl2ZUVsLmRpc2FibGVkID0gdHJ1ZTtcbiAgICBhZGRDbGFzcyh0aGlzLmVsLCBjbHMuRElTQUJMRUQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEVuYWJsZSBhbiBkcm9wZG93blxuICAgKi9cbiAgZW5hYmxlKCkge1xuICAgIHRoaXMubmF0aXZlRWwuZGlzYWJsZWQgPSBmYWxzZTtcbiAgICByZW1vdmVDbGFzcyh0aGlzLmVsLCBjbHMuRElTQUJMRUQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlbGVjdCBhbiBJdGVtXG4gICAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcnxJdGVtfSB2YWx1ZSAtIGlmIHN0cmluZywgZmluZCBhbiBJdGVtIGJ5IGl0cyB2YWx1ZS4gaWYgbnVtYmVyLCBmaW5kIGFuIEl0ZW0gYnkgaXRzIGluZGV4LlxuICAgKiBAcmV0dXJuIHtJdGVtfSByZXN1bHQgb2Ygc2VsZWN0aW9uXG4gICAqL1xuICBzZWxlY3QodmFsdWUpIHtcbiAgICBjb25zdCBzZWxlY3RlZEl0ZW0gPSB2YWx1ZSBpbnN0YW5jZW9mIEl0ZW0gPyB2YWx1ZSA6IHRoaXMuZ2V0SXRlbSh2YWx1ZSk7XG4gICAgdGhpcy5kZXNlbGVjdCgpO1xuXG4gICAgaWYgKCFzZWxlY3RlZEl0ZW0gfHwgKHNlbGVjdGVkSXRlbSAmJiBzZWxlY3RlZEl0ZW0uaXNEaXNhYmxlZCgpKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgc2VsZWN0ZWRJdGVtLnNlbGVjdCgpO1xuICAgIHRoaXMuc2VsZWN0ZWRJdGVtID0gc2VsZWN0ZWRJdGVtO1xuXG4gICAgcmV0dXJuIHNlbGVjdGVkSXRlbTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXNlbGVjdCBhbiBJdGVtXG4gICAqL1xuICBkZXNlbGVjdCgpIHtcbiAgICBpZiAodGhpcy5zZWxlY3RlZEl0ZW0pIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtLmRlc2VsZWN0KCk7XG4gICAgICB0aGlzLnNlbGVjdGVkSXRlbSA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEhpZ2hsaWdodCBhbiBJdGVtXG4gICAqIEBwYXJhbSB7bnVtYmVyfHN0cmluZ3xJdGVtfSB2YWx1ZSAtIGlmIHN0cmluZywgZmluZCBhbiBJdGVtIGJ5IGl0cyB2YWx1ZS4gaWYgbnVtYmVyLCBmaW5kIGFuIEl0ZW0gYnkgaXRzIGluZGV4LlxuICAgKi9cbiAgaGlnaGxpZ2h0KHZhbHVlKSB7XG4gICAgbGV0IGhpZ2hsaWdodGVkSXRlbTtcbiAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBJdGVtKSB7XG4gICAgICBoaWdobGlnaHRlZEl0ZW0gPSB2YWx1ZTtcbiAgICB9IGVsc2UgaWYgKGlzRXhpc3R5KHZhbHVlKSkge1xuICAgICAgaGlnaGxpZ2h0ZWRJdGVtID0gdGhpcy5nZXRJdGVtKHZhbHVlKTtcbiAgICB9XG5cbiAgICBpZiAoaGlnaGxpZ2h0ZWRJdGVtICYmIGhpZ2hsaWdodGVkSXRlbSAhPT0gdGhpcy5oaWdobGlnaHRlZEl0ZW0pIHtcbiAgICAgIHRoaXMuZGVoaWdobGlnaHQoKTtcbiAgICAgIGhpZ2hsaWdodGVkSXRlbS5oaWdobGlnaHQoKTtcbiAgICAgIHRoaXMuaGlnaGxpZ2h0ZWRJdGVtID0gaGlnaGxpZ2h0ZWRJdGVtO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEZWhpZ2hsaWdodCBhbiBJdGVtXG4gICAqL1xuICBkZWhpZ2hsaWdodCgpIHtcbiAgICBpZiAodGhpcy5oaWdobGlnaHRlZEl0ZW0pIHtcbiAgICAgIHRoaXMuaGlnaGxpZ2h0ZWRJdGVtLmRlaGlnaGxpZ2h0KCk7XG4gICAgICB0aGlzLmhpZ2hsaWdodGVkSXRlbSA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE1vdmUgYSBoaWdobGlnaHRlZCBJdGVtXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBkaXJlY3Rpb24gLSBkaXJlY3Rpb24gdG8gbW92ZVxuICAgKi9cbiAgbW92ZUhpZ2hsaWdodGVkSXRlbShkaXJlY3Rpb24pIHtcbiAgICBjb25zdCBoaWdobGlnaHRlZEl0ZW0gPSB0aGlzLmdldEhpZ2hsaWdodGVkSXRlbSgpO1xuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5nZXRJdGVtcygpO1xuXG4gICAgbGV0IGluZGV4ID0gaXRlbXMuaW5kZXhPZihoaWdobGlnaHRlZEl0ZW0pO1xuICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICBpbmRleCArPSBkaXJlY3Rpb247XG4gICAgICBmb3IgKDsgaW5kZXggPCBpdGVtcy5sZW5ndGggJiYgaW5kZXggPj0gMDsgaW5kZXggKz0gZGlyZWN0aW9uKSB7XG4gICAgICAgIGlmICghaXRlbXNbaW5kZXhdLmlzRGlzYWJsZWQoKSkge1xuICAgICAgICAgIHRoaXMuaGlnaGxpZ2h0KGl0ZW1zW2luZGV4XSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IGFsbCBJdGVtcyB0aGF0IHBhc3MgdGhlIHRlc3QgaW1wbGVtZW50ZWQgYnkgdGhlIHByb3ZpZGVkIGZ1bmN0aW9uXG4gICAqIElmIGZpbHRlciBmdW5jdGlvbiBpcyBub3QgcGFzc2VkLCBpdCByZXR1cm5zIGFsbCBJdGVtc1xuICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFjayAtIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGZpbHRlciBpdGVtc1xuICAgKiBAcGFyYW0ge251bWJlcn0gbnVtYmVyIC0gdGhlIG51bWJlciBvZiBpdGVtcyB0byBmaW5kLiAtMSBtZWFucyBhbGwgaXRlbXMuXG4gICAqIEByZXR1cm4ge2FycmF5PEl0ZW0+fVxuICAgKi9cbiAgZ2V0SXRlbXMoY2FsbGJhY2sgPSAoKSA9PiB0cnVlLCBudW1iZXIgPSAtMSkge1xuICAgIGNvbnN0IGl0ZW1zID0gW107XG4gICAgdGhpcy5pdGVyYXRlSXRlbXMoaXRlbSA9PiB7XG4gICAgICBpZiAoY2FsbGJhY2soaXRlbSkpIHtcbiAgICAgICAgaXRlbXMucHVzaChpdGVtKTtcbiAgICAgICAgbnVtYmVyIC09IDE7XG5cbiAgICAgICAgcmV0dXJuIG51bWJlciAhPT0gMDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gaXRlbXM7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGFuIEl0ZW0gYnkgaXRzIGluZGV4IG9yIHZhbHVlXG4gICAqIEBwYXJhbSB7bnVtYmVyfHN0cmluZ30gdmFsdWUgLSBpZiBzdHJpbmcsIHRoZSBJdGVtJ3MgdmFsdWUuIGlmIG51bWJlciwgdGhlIEl0ZW0ncyBpbmRleC5cbiAgICogQHJldHVybiB7SXRlbX1cbiAgICovXG4gIGdldEl0ZW0odmFsdWUpIHtcbiAgICBjb25zdCBpc1ZhbGlkSXRlbSA9IGlzTnVtYmVyKHZhbHVlKVxuICAgICAgPyBjb21wYXJlZEl0ZW0gPT4gY29tcGFyZWRJdGVtLmdldEluZGV4KCkgPT09IHZhbHVlXG4gICAgICA6IGNvbXBhcmVkSXRlbSA9PiBjb21wYXJlZEl0ZW0uZ2V0VmFsdWUoKSA9PT0gdmFsdWU7XG5cbiAgICByZXR1cm4gdGhpcy5nZXRJdGVtcyhpc1ZhbGlkSXRlbSwgMSlbMF07XG4gIH1cblxuICAvKipcbiAgICogR2V0IGFsbCBJdGVtR3JvdXBzIHRoYXQgcGFzcyB0aGUgdGVzdCBpbXBsZW1lbnRlZCBieSB0aGUgcHJvdmlkZWQgZnVuY3Rpb25cbiAgICogSWYgZmlsdGVyIGZ1bmN0aW9uIGlzIG5vdCBwYXNzZWQsIGl0IHJldHVybnMgYWxsIEl0ZW1Hcm91cHNcbiAgICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2sgLSBjYWxsYmFjayBmdW5jdGlvbiB0byBmaWx0ZXIgaXRlbSBncm91cHNcbiAgICogQHBhcmFtIHtudW1iZXJ9IG51bWJlciAtIHRoZSBudW1iZXIgb2YgaXRlbSBncm91cHMgdG8gZmluZC4gLTEgbWVhbnMgYWxsIGl0ZW0gZ3JvdXBzLlxuICAgKiBAcmV0dXJuIHthcnJheTxJdGVtR3JvdXA+fVxuICAgKi9cbiAgZ2V0SXRlbUdyb3VwcyhjYWxsYmFjayA9ICgpID0+IHRydWUsIG51bWJlciA9IC0xKSB7XG4gICAgY29uc3QgaXRlbUdyb3VwcyA9IFtdO1xuICAgIGZvckVhY2hBcnJheSh0aGlzLml0ZW1zLCBpdGVtR3JvdXAgPT4ge1xuICAgICAgaWYgKGl0ZW1Hcm91cCBpbnN0YW5jZW9mIEl0ZW1Hcm91cCAmJiBjYWxsYmFjayhpdGVtR3JvdXApKSB7XG4gICAgICAgIGl0ZW1Hcm91cHMucHVzaChpdGVtR3JvdXApO1xuICAgICAgICBudW1iZXIgLT0gMTtcblxuICAgICAgICByZXR1cm4gbnVtYmVyICE9PSAwO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9KTtcblxuICAgIHJldHVybiBpdGVtR3JvdXBzO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhbiBJdGVtR3JvdXAgYnkgaXRzIGluZGV4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleCAtIGdyb3VwSW5kZXggb2YgdGhlIEl0ZW1Hcm91cFxuICAgKiBAcmV0dXJuIHtJdGVtR3JvdXB9XG4gICAqL1xuICBnZXRJdGVtR3JvdXAoaW5kZXgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRJdGVtR3JvdXBzKGl0ZW1Hcm91cCA9PiBpdGVtR3JvdXAuZ2V0SW5kZXgoKSA9PT0gaW5kZXgsIDEpWzBdO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgbnVtYmVyIG9mIEl0ZW1zXG4gICAqIEByZXR1cm4ge251bWJlcn1cbiAgICovXG4gIGdldEl0ZW1MZW5ndGgoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXRlbUxlbmd0aDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIHNlbGVjdGVkIEl0ZW1cbiAgICogQHJldHVybiB7SXRlbX1cbiAgICovXG4gIGdldFNlbGVjdGVkSXRlbSgpIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZEl0ZW07XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHRoZSBoaWdobGlnaHRlZCBJdGVtXG4gICAqIEByZXR1cm4ge0l0ZW19XG4gICAqL1xuICBnZXRIaWdobGlnaHRlZEl0ZW0oKSB7XG4gICAgcmV0dXJuIHRoaXMuaGlnaGxpZ2h0ZWRJdGVtO1xuICB9XG5cbiAgLyoqXG4gICAqIEFwcGVuZCB0aGUgZWxlbWVudCBhbmQgbmF0aXZlIGVsZW1lbnQgdG8gdGhlIGNvbnRhaW5lclxuICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBjb250YWluZXIgLSBjb250YWluZXIgZWxlbWVudFxuICAgKi9cbiAgYXBwZW5kVG9Db250YWluZXIoY29udGFpbmVyKSB7XG4gICAgY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMuZWwpO1xuICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLm5hdGl2ZUVsKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXN0b3J5IGEgZHJvcGRvd25cbiAgICovXG4gIGRlc3Ryb3koKSB7XG4gICAgdGhpcy5pdGVtcy5mb3JFYWNoKGl0ZW0gPT4gaXRlbS5kZXN0cm95KCkpO1xuICAgIHJlbW92ZUVsZW1lbnQodGhpcy5lbCk7XG4gICAgcmVtb3ZlRWxlbWVudCh0aGlzLm5hdGl2ZUVsKTtcbiAgICB0aGlzLmVsID0gdGhpcy5uYXRpdmVFbCA9IHRoaXMuaXRlbXMgPSB0aGlzLnNlbGVjdGVkSXRlbSA9IHRoaXMuaGlnaGxpZ2h0ZWRJdGVtID0gbnVsbDtcbiAgfVxufVxuIiwiLyoqXG4gKiBAZmlsZW92ZXJ2aWV3XG4gKiBAYXV0aG9yIE5ITiBGRSBEZXZlbG9wbWVudCBMYWIgPGRsX2phdmFzY3JpcHRAbmhuLmNvbT5cbiAqL1xuXG5pbXBvcnQgU2VsZWN0Qm94IGZyb20gJy4vc2VsZWN0Qm94JztcbmltcG9ydCAnLi4vY3NzL3NlbGVjdEJveC5jc3MnO1xuXG5leHBvcnQgZGVmYXVsdCBTZWxlY3RCb3g7XG4iLCIvKipcbiAqIEBmaWxlb3ZlcnZpZXcgSW5wdXRcbiAqIEBhdXRob3IgTkhOIEZFIERldmVsb3BtZW50IExhYiA8ZGxfamF2YXNjcmlwdEBuaG4uY29tPlxuICovXG5cbmltcG9ydCBhZGRDbGFzcyBmcm9tICd0dWktY29kZS1zbmlwcGV0L2RvbVV0aWwvYWRkQ2xhc3MnO1xuaW1wb3J0IHJlbW92ZUNsYXNzIGZyb20gJ3R1aS1jb2RlLXNuaXBwZXQvZG9tVXRpbC9yZW1vdmVDbGFzcyc7XG5pbXBvcnQgcmVtb3ZlRWxlbWVudCBmcm9tICd0dWktY29kZS1zbmlwcGV0L2RvbVV0aWwvcmVtb3ZlRWxlbWVudCc7XG5pbXBvcnQgeyBjcmVhdGVFbGVtZW50IH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBjbHMgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAaWdub3JlXG4gKiBAcGFyYW0ge29iamVjdH0gb3B0aW9ucyAtIG9wdGlvbnNcbiAqICAgQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLnBsYWNlaG9sZGVyXSAtIHBsYWNlaG9sZGVyIGZvciBhIHNlbGVjdCBib3hcbiAqICAgQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmRpc2FibGVkXSAtIHdoZXRoZXIgYW4gaW5wdXQgc2hvdWxkIGJlIGRpc2FibGVkIG9yIG5vdFxuICogICBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLnNob3dJY29uXSAtIHdoZXRoZXIgYW4gYXJyb3cgaWNvbiBpbiB0aGUgaW5wdXQgc2hvdWxkIGJlIHNob3duXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIElucHV0IHtcbiAgY29uc3RydWN0b3IoeyBwbGFjZWhvbGRlciwgZGlzYWJsZWQsIHNob3dJY29uIH0pIHtcbiAgICAvKipcbiAgICAgKiB0ZXh0IGZvciBhIHBsYWNlaG9sZGVyXG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMucGxhY2Vob2xkZXJUZXh0ID0gcGxhY2Vob2xkZXI7XG5cbiAgICAvKipcbiAgICAgKiBAdHlwZSB7SFRNTEVsZW1lbnR9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmVsID0gY3JlYXRlRWxlbWVudCgnZGl2JywgJycsIHsgY2xhc3NOYW1lOiBjbHMuSU5QVVQsIHRhYkluZGV4OiAwIH0pO1xuXG4gICAgLyoqXG4gICAgICogQHR5cGUge0hUTUxFbGVtZW50fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5wbGFjZWhvbGRlckVsID0gY3JlYXRlRWxlbWVudChcbiAgICAgICdwJyxcbiAgICAgIHRoaXMucGxhY2Vob2xkZXJUZXh0LFxuICAgICAgeyBjbGFzc05hbWU6IGNscy5QTEFDRUhPTERFUiB9LFxuICAgICAgdGhpcy5lbFxuICAgICk7XG5cbiAgICB0aGlzLmluaXRpYWxpemUoZGlzYWJsZWQsIHNob3dJY29uKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBpbml0aWFsaXplKGRpc2FibGVkLCBzaG93SWNvbikge1xuICAgIGlmIChzaG93SWNvbikge1xuICAgICAgY3JlYXRlRWxlbWVudCgnc3BhbicsICdzZWxlY3QnLCB7IGNsYXNzTmFtZTogY2xzLklDT04gfSwgdGhpcy5lbCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucGxhY2Vob2xkZXJFbC53aWR0aCA9ICcxMDAlJztcbiAgICB9XG5cbiAgICBpZiAoZGlzYWJsZWQpIHtcbiAgICAgIHRoaXMuZGlzYWJsZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNhYmxlIGFuIGlucHV0XG4gICAqL1xuICBkaXNhYmxlKCkge1xuICAgIGFkZENsYXNzKHRoaXMuZWwsIGNscy5ESVNBQkxFRCk7XG4gIH1cblxuICAvKipcbiAgICogRW5hYmxlIGFuIGlucHV0XG4gICAqL1xuICBlbmFibGUoKSB7XG4gICAgcmVtb3ZlQ2xhc3ModGhpcy5lbCwgY2xzLkRJU0FCTEVEKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPcGVuIGFuIGlucHV0XG4gICAqL1xuICBvcGVuKCkge1xuICAgIGFkZENsYXNzKHRoaXMuZWwsIGNscy5PUEVOKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbG9zZSBhbiBpbnB1dFxuICAgKi9cbiAgY2xvc2UoKSB7XG4gICAgcmVtb3ZlQ2xhc3ModGhpcy5lbCwgY2xzLk9QRU4pO1xuICB9XG5cbiAgLyoqXG4gICAqIEZvY3VzXG4gICAqL1xuICBmb2N1cygpIHtcbiAgICB0aGlzLmVsLmZvY3VzKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2hhbmdlIHRoZSB0ZXh0IGluIHRoZSBwbGFjZWhvbGRlclxuICAgKiBAcGFyYW0ge0l0ZW19IGl0ZW0gLSBzZWxlY3RlZCBJdGVtXG4gICAqL1xuICBjaGFuZ2VUZXh0KGl0ZW0pIHtcbiAgICBpZiAoaXRlbSkge1xuICAgICAgdGhpcy5wbGFjZWhvbGRlckVsLmlubmVyVGV4dCA9IGl0ZW0uZ2V0TGFiZWwoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wbGFjZWhvbGRlckVsLmlubmVyVGV4dCA9IHRoaXMucGxhY2Vob2xkZXJUZXh0O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBcHBlbmQgdGhlIGVsZW1lbnQgdG8gdGhlIGNvbnRhaW5lclxuICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBjb250YWluZXIgLSBjb250YWluZXIgZWxlbWVudFxuICAgKi9cbiAgYXBwZW5kVG9Db250YWluZXIoY29udGFpbmVyKSB7XG4gICAgY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMuZWwpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlc3Ryb3kgYW4gaW5wdXRcbiAgICovXG4gIGRlc3Ryb3koKSB7XG4gICAgcmVtb3ZlRWxlbWVudCh0aGlzLmVsKTtcbiAgICB0aGlzLmVsID0gdGhpcy5wbGFjZWhvbGRlckVsID0gbnVsbDtcbiAgfVxufVxuIiwiLyoqXG4gKiBAZmlsZW92ZXJ2aWV3IEl0ZW1cbiAqIEBhdXRob3IgTkhOIEZFIERldmVsb3BtZW50IExhYiA8ZGxfamF2YXNjcmlwdEBuaG4uY29tPlxuICovXG5cbmltcG9ydCBhZGRDbGFzcyBmcm9tICd0dWktY29kZS1zbmlwcGV0L2RvbVV0aWwvYWRkQ2xhc3MnO1xuaW1wb3J0IHJlbW92ZUNsYXNzIGZyb20gJ3R1aS1jb2RlLXNuaXBwZXQvZG9tVXRpbC9yZW1vdmVDbGFzcyc7XG5pbXBvcnQgcmVtb3ZlRWxlbWVudCBmcm9tICd0dWktY29kZS1zbmlwcGV0L2RvbVV0aWwvcmVtb3ZlRWxlbWVudCc7XG5pbXBvcnQgeyBjcmVhdGVFbGVtZW50IH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBjbHMgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAZGVzY3JpcHRpb25cbiAqIEFuIGl0ZW0uXG4gKiBZb3UgY2FuIGdldCBJdGVtIGJ5IHtAbGluayBTZWxlY3RCb3gjZ2V0SXRlbSBTZWxlY3RCb3guZ2V0SXRlbSgpfSBhbmQge0BsaW5rIFNlbGVjdEJveCNnZXRJdGVtcyBTZWxlY3RCb3guZ2V0SXRlbXMoKX0uXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEl0ZW0ge1xuICAvKipcbiAgICogQGhpZGVjb25zdHJ1Y3RvclxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9ucyAtIG9wdGlvbnNcbiAgICogICBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMubGFiZWxdIC0gbGFiZWwgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBkcm9wLWRvd24gbGlzdFxuICAgKiAgIEBwYXJhbSB7c3RyaW5nfSBvcHRpb25zLnZhbHVlIC0gdmFsdWUgb2YgYW4gaXRlbVxuICAgKiAgIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMuZGlzYWJsZWQ9ZmFsc2VdIC0gd2hldGhlciBhbiBJdGVtIHNob3VsZCBiZSBkaXNhYmxlZCBvciBub3RcbiAgICogICBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLnNlbGVjdGVkPWZhbHNlXSAtIHdoZXRoZXIgYW4gSXRlbSBzaG91bGQgYmUgcHJlLXNlbGVjdGVkIG9yIG5vdFxuICAgKiAgIEBwYXJhbSB7bnVtYmVyfSBvcHRpb25zLmluZGV4IC0gSXRlbSdzIGluZGV4XG4gICAqL1xuICBjb25zdHJ1Y3Rvcih7IHZhbHVlLCBsYWJlbCwgZGlzYWJsZWQsIHNlbGVjdGVkLCBpbmRleCB9KSB7XG4gICAgLyoqXG4gICAgICogdmFsdWUgb2YgYW4gaXRlbVxuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLnZhbHVlID0gYCR7dmFsdWV9YDtcblxuICAgIC8qKlxuICAgICAqIGxhYmVsIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgZHJvcC1kb3duIGxpc3RcbiAgICAgKiBpZiBsYWJlbCBpcyBhbiBlbXB0eSBzdHJpbmcsIGl0IHNob3VsZCBiZSBzYW1lIGFzIGl0cyB2YWx1ZVxuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmxhYmVsID0gbGFiZWwgfHwgdGhpcy52YWx1ZTtcblxuICAgIC8qKlxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmluZGV4ID0gaW5kZXg7XG5cbiAgICAvKipcbiAgICAgKiB3aGV0aGVyIGFuIEl0ZW1Hcm91cCBvZiB0aGUgSXRlbSBpcyBkaXNhYmxlZCBvciBub3RcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuaXRlbUdyb3VwRGlzYWJsZWQgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIHdoZXRoZXIgYW4gSXRlbSBpcyBkaXNhYmxlZCBvciBub3RcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuaXRlbURpc2FibGVkID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuc2VsZWN0ZWQgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIDxsaT4gZWxlbWVudCBmb3IgYSBjdXN0b20gZHJvcGRvd24gaXRlbVxuICAgICAqIEB0eXBlIHtIVE1MRWxlbWVudH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuZWwgPSBjcmVhdGVFbGVtZW50KCdsaScsIHRoaXMubGFiZWwsIHtcbiAgICAgIGNsYXNzTmFtZTogY2xzLklURU0sXG4gICAgICB0YWJJbmRleDogLTEsXG4gICAgICAnZGF0YS12YWx1ZSc6IHRoaXMudmFsdWUsXG4gICAgICAnZGF0YS1pbmRleCc6IHRoaXMuaW5kZXhcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIDxvcHRpb24+IGVsZW1lbnQgZm9yIGEgc2VsZWN0IGVsZW1lbnRcbiAgICAgKiBAdHlwZSB7SFRNTEVsZW1lbnR9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLm5hdGl2ZUVsID0gY3JlYXRlRWxlbWVudCgnb3B0aW9uJywgJycsIHtcbiAgICAgIHZhbHVlOiB0aGlzLnZhbHVlLFxuICAgICAgbGFiZWw6IHRoaXMubGFiZWxcbiAgICB9KTtcblxuICAgIHRoaXMuaW5pdGlhbGl6ZShkaXNhYmxlZCwgc2VsZWN0ZWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemVcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGluaXRpYWxpemUoZGlzYWJsZWQsIHNlbGVjdGVkKSB7XG4gICAgaWYgKHNlbGVjdGVkKSB7XG4gICAgICB0aGlzLnNlbGVjdCgpO1xuICAgIH1cblxuICAgIGlmIChkaXNhYmxlZCkge1xuICAgICAgdGhpcy5kaXNhYmxlKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE1ha2UgYW4gSXRlbSBkaXNhYmxlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBtYWtlRGlzYWJsZSgpIHtcbiAgICB0aGlzLm5hdGl2ZUVsLmRpc2FibGVkID0gdHJ1ZTtcbiAgICBhZGRDbGFzcyh0aGlzLmVsLCBjbHMuRElTQUJMRUQpO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ha2UgYW4gSXRlbSBlbmFibGVcbiAgICogQHByaXZhdGVcbiAgICovXG4gIG1ha2VFbmFibGUoKSB7XG4gICAgdGhpcy5uYXRpdmVFbC5kaXNhYmxlZCA9IGZhbHNlO1xuICAgIHJlbW92ZUNsYXNzKHRoaXMuZWwsIGNscy5ESVNBQkxFRCk7XG4gIH1cblxuICAvKipcbiAgICogRGlzYWJsZSBhbiBJdGVtIGR1ZSB0byBhbiBJdGVtR3JvdXBcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgZGlzYWJsZUl0ZW1Hcm91cCgpIHtcbiAgICB0aGlzLml0ZW1Hcm91cERpc2FibGVkID0gdHJ1ZTtcbiAgICB0aGlzLm1ha2VEaXNhYmxlKCk7XG4gIH1cblxuICAvKipcbiAgICogRW5hYmxlIGFuIEl0ZW0gZHVlIHRvIGFuIEl0ZW1Hcm91cFxuICAgKiBAaWdub3JlXG4gICAqL1xuICBlbmFibGVJdGVtR3JvdXAoKSB7XG4gICAgdGhpcy5pdGVtR3JvdXBEaXNhYmxlZCA9IGZhbHNlO1xuICAgIGlmICghdGhpcy5pc0Rpc2FibGVkKCkpIHtcbiAgICAgIHRoaXMubWFrZUVuYWJsZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNhYmxlIGFuIEl0ZW1cbiAgICogQGlnbm9yZVxuICAgKi9cbiAgZGlzYWJsZSgpIHtcbiAgICB0aGlzLml0ZW1EaXNhYmxlZCA9IHRydWU7XG4gICAgdGhpcy5tYWtlRGlzYWJsZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEVuYWJsZSBhbiBJdGVtXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGVuYWJsZSgpIHtcbiAgICB0aGlzLml0ZW1EaXNhYmxlZCA9IGZhbHNlO1xuICAgIGlmICghdGhpcy5pc0Rpc2FibGVkKCkpIHtcbiAgICAgIHRoaXMubWFrZUVuYWJsZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZWxlY3QgYW4gSXRlbVxuICAgKiBAaWdub3JlXG4gICAqL1xuICBzZWxlY3QoKSB7XG4gICAgaWYgKCF0aGlzLmlzRGlzYWJsZWQoKSkge1xuICAgICAgdGhpcy5zZWxlY3RlZCA9IHRoaXMubmF0aXZlRWwuc2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgYWRkQ2xhc3ModGhpcy5lbCwgY2xzLlNFTEVDVEVEKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRGVzZWxlY3QgYW4gSXRlbVxuICAgKiBAaWdub3JlXG4gICAqL1xuICBkZXNlbGVjdCgpIHtcbiAgICB0aGlzLnNlbGVjdGVkID0gdGhpcy5uYXRpdmVFbC5zZWxlY3RlZCA9IGZhbHNlO1xuICAgIHJlbW92ZUNsYXNzKHRoaXMuZWwsIGNscy5TRUxFQ1RFRCk7XG4gIH1cblxuICAvKipcbiAgICogSGlnaGxpZ2h0IGFuIEl0ZW1cbiAgICogQGlnbm9yZVxuICAgKi9cbiAgaGlnaGxpZ2h0KCkge1xuICAgIGlmICghdGhpcy5pc0Rpc2FibGVkKCkpIHtcbiAgICAgIGFkZENsYXNzKHRoaXMuZWwsIGNscy5ISUdITElHSFQpO1xuICAgICAgdGhpcy5lbC5mb2N1cygpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgYSBoaWdobGlnaHQgZnJvbSBhbiBJdGVtXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGRlaGlnaGxpZ2h0KCkge1xuICAgIHJlbW92ZUNsYXNzKHRoaXMuZWwsIGNscy5ISUdITElHSFQpO1xuICAgIHRoaXMuZWwuYmx1cigpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhbiBpdGVtJ3MgdmFsdWUuXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG4gIGdldFZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLnZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhbiBpdGVtJ3MgbGFiZWwuXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG4gIGdldExhYmVsKCkge1xuICAgIHJldHVybiB0aGlzLmxhYmVsO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhbiBpdGVtJ3MgaW5kZXguXG4gICAqIEByZXR1cm4ge251bWJlcn1cbiAgICovXG4gIGdldEluZGV4KCkge1xuICAgIHJldHVybiB0aGlzLmluZGV4O1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB3aGV0aGVyIGFuIGl0ZW0gaXMgc2VsZWN0ZWQgb3Igbm90LlxuICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgKi9cbiAgaXNTZWxlY3RlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gd2hldGhlciBhbiBpdGVtIGlzIGRpc2FibGVkIG9yIG5vdC5cbiAgICogVGhlIHJlc3VsdCBpcyB0cnVlIGlmIGFueSBvZiB0aGUgaXRlbXMgYW5kIGl0ZW0gZ3JvdXBzIGFyZSBkaXNhYmxlZC5cbiAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICovXG4gIGlzRGlzYWJsZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXRlbURpc2FibGVkIHx8IHRoaXMuaXRlbUdyb3VwRGlzYWJsZWQ7XG4gIH1cblxuICAvKipcbiAgICogQXBwZW5kIHRoZSBlbGVtZW50IGFuZCBuYXRpdmUgZWxlbWVudCB0byB0aGUgY29udGFpbmVyc1xuICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBjb250YWluZXIgLSBjb250YWluZXIgZWxlbWVudFxuICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBuYXRpdmVDb250YWluZXIgLSBuYXRpdmUgY29udGFpbmVyIGVsZW1lbnRcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgYXBwZW5kVG9Db250YWluZXIoY29udGFpbmVyLCBuYXRpdmVDb250YWluZXIpIHtcbiAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5lbCk7XG4gICAgbmF0aXZlQ29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMubmF0aXZlRWwpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlc3Ryb3kgYW4gSXRlbVxuICAgKiBAaWdub3JlXG4gICAqL1xuICBkZXN0cm95KCkge1xuICAgIHJlbW92ZUVsZW1lbnQodGhpcy5lbCk7XG4gICAgcmVtb3ZlRWxlbWVudCh0aGlzLm5hdGl2ZUVsKTtcbiAgICB0aGlzLmVsID0gdGhpcy5uYXRpdmVFbCA9IG51bGw7XG4gIH1cbn1cbiIsIi8qKlxuICogQGZpbGVvdmVydmlldyBJdGVtR3JvdXBcbiAqIEBhdXRob3IgTkhOIEZFIERldmVsb3BtZW50IExhYiA8ZGxfamF2YXNjcmlwdEBuaG4uY29tPlxuICovXG5cbmltcG9ydCBhZGRDbGFzcyBmcm9tICd0dWktY29kZS1zbmlwcGV0L2RvbVV0aWwvYWRkQ2xhc3MnO1xuaW1wb3J0IHJlbW92ZUNsYXNzIGZyb20gJ3R1aS1jb2RlLXNuaXBwZXQvZG9tVXRpbC9yZW1vdmVDbGFzcyc7XG5pbXBvcnQgcmVtb3ZlRWxlbWVudCBmcm9tICd0dWktY29kZS1zbmlwcGV0L2RvbVV0aWwvcmVtb3ZlRWxlbWVudCc7XG5pbXBvcnQgeyBjcmVhdGVFbGVtZW50IH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBjbHMgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgSXRlbSBmcm9tICcuL2l0ZW0nO1xuXG4vKipcbiAqIEBjbGFzc1xuICogQGRlc2NyaXB0aW9uXG4gKiBBIGdyb3VwIG9mIGl0ZW1zLlxuICogWW91IGNhbiBnZXQgSXRlbUdyb3VwIGJ5IHtAbGluayBTZWxlY3RCb3gjZ2V0SXRlbUdyb3VwIFNlbGVjdEJveC5nZXRJdGVtR3JvdXAoKX0gYW5kIHtAbGluayBTZWxlY3RCb3gjZ2V0SXRlbUdyb3VwcyBTZWxlY3RCb3guZ2V0SXRlbUdyb3VwcygpfS5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSXRlbUdyb3VwIHtcbiAgLyoqXG4gICAqIEBoaWRlY29uc3RydWN0b3JcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnMgLSBvcHRpb25zXG4gICAqICAgQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmxhYmVsXSAtIGxhYmVsIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgZHJvcGRvd24gbGlzdFxuICAgKiAgIEBwYXJhbSB7YXJyYXk8aXRlbURhdGE+fSBvcHRpb25zLmRhdGEgLSBkYXRhIGZvciBJdGVtcyB0byBiZSBpbmNsdWRlZCBpbiB0aGUgSXRlbUdyb3VwXG4gICAqICAgQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5kaXNhYmxlZD1mYWxzZV0gLSB3aGV0aGVyIGFuIEl0ZW1Hcm91cCBzaG91bGQgYmUgZGlzYWJsZWQgb3Igbm90XG4gICAqICAgQHBhcmFtIHtudW1iZXJ9IG9wdGlvbnMuaW5kZXggLSBpbmRleCBvZiB0aGUgZmlyc3QgSXRlbSBpbiB0aGUgSXRlbUdyb3VwXG4gICAqICAgQHBhcmFtIHtudW1iZXJ9IG9wdGlvbnMuaXRlbUdyb3VwSW5kZXggLSBpbmRleCBvZiB0aGUgSXRlbUdyb3VwXG4gICAqL1xuICBjb25zdHJ1Y3Rvcih7IGxhYmVsID0gJycsIGRhdGEsIGRpc2FibGVkID0gZmFsc2UsIGluZGV4LCBpdGVtR3JvdXBJbmRleCB9KSB7XG4gICAgLyoqXG4gICAgICogQHR5cGUge0hUTUxFbGVtZW50fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5lbCA9IGNyZWF0ZUVsZW1lbnQoJ2xpJywgJycsIHsgJ2RhdGEtZ3JvdXAtaW5kZXgnOiBpdGVtR3JvdXBJbmRleCB9KTtcblxuICAgIC8qKlxuICAgICAqIEB0eXBlIHtIVE1MRWxlbWVudH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMubGFiZWxFbCA9IGNyZWF0ZUVsZW1lbnQoJ3NwYW4nLCBsYWJlbCwgeyBjbGFzc05hbWU6IGNscy5JVEVNX0dST1VQX0xBQkVMIH0sIHRoaXMuZWwpO1xuXG4gICAgLyoqXG4gICAgICogQHR5cGUge0hUTUxFbGVtZW50fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5pdGVtQ29udGFpbmVyRWwgPSBjcmVhdGVFbGVtZW50KCd1bCcsICcnLCB7IGNsYXNzTmFtZTogY2xzLklURU1fR1JPVVAgfSwgdGhpcy5lbCk7XG5cbiAgICAvKipcbiAgICAgKiBAdHlwZSB7SFRNTEVsZW1lbnR9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLm5hdGl2ZUVsID0gY3JlYXRlRWxlbWVudCgnb3B0Z3JvdXAnLCBsYWJlbCk7XG5cbiAgICAvKipcbiAgICAgKiBAdHlwZSB7YXJyYXk8SXRlbT59XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLml0ZW1zID0gdGhpcy5jcmVhdGVJdGVtcyhkYXRhLCBpbmRleCk7XG5cbiAgICAvKipcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5pbmRleCA9IGl0ZW1Hcm91cEluZGV4O1xuXG4gICAgLyoqXG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMubGFiZWwgPSBsYWJlbDtcblxuICAgIC8qKlxuICAgICAqIHdoZXRoZXIgYW4gSXRlbUdyb3VwIGlzIGRpc2FibGVkIG9yIG5vdFxuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5kaXNhYmxlZCA9IGZhbHNlO1xuXG4gICAgdGhpcy5pbml0aWFsaXplKGRpc2FibGVkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgSXRlbXMgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIEl0ZW1Hcm91cFxuICAgKiBAcmV0dXJuIHthcnJheTxJdGVtPn1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIGNyZWF0ZUl0ZW1zKGRhdGEsIGluZGV4KSB7XG4gICAgcmV0dXJuIGRhdGEubWFwKChkYXR1bSwgaXRlbUluZGV4KSA9PiB7XG4gICAgICBjb25zdCBpdGVtID0gbmV3IEl0ZW0oeyBpbmRleDogaW5kZXggKyBpdGVtSW5kZXgsIC4uLmRhdHVtIH0pO1xuICAgICAgaXRlbS5hcHBlbmRUb0NvbnRhaW5lcih0aGlzLml0ZW1Db250YWluZXJFbCwgdGhpcy5uYXRpdmVFbCk7XG5cbiAgICAgIHJldHVybiBpdGVtO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemVcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGluaXRpYWxpemUoZGlzYWJsZWQpIHtcbiAgICBpZiAoZGlzYWJsZWQpIHtcbiAgICAgIHRoaXMuZGlzYWJsZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNhYmxlIGFuIEl0ZW1Hcm91cFxuICAgKiBAaWdub3JlXG4gICAqL1xuICBkaXNhYmxlKCkge1xuICAgIHRoaXMuZGlzYWJsZWQgPSB0aGlzLm5hdGl2ZUVsLmRpc2FibGVkID0gdHJ1ZTtcbiAgICBhZGRDbGFzcyh0aGlzLmxhYmVsRWwsIGNscy5ESVNBQkxFRCk7XG4gICAgdGhpcy5pdGVtcy5mb3JFYWNoKGl0ZW0gPT4gaXRlbS5kaXNhYmxlSXRlbUdyb3VwKCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEVuYWJsZSBhbiBJdGVtR3JvdXBcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgZW5hYmxlKCkge1xuICAgIHRoaXMuZGlzYWJsZWQgPSB0aGlzLm5hdGl2ZUVsLmRpc2FibGVkID0gZmFsc2U7XG4gICAgcmVtb3ZlQ2xhc3ModGhpcy5sYWJlbEVsLCBjbHMuRElTQUJMRUQpO1xuICAgIHRoaXMuaXRlbXMuZm9yRWFjaChpdGVtID0+IGl0ZW0uZW5hYmxlSXRlbUdyb3VwKCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB7QGxpbmsgSXRlbSBpdGVtc30gaW4gdGhlIGl0ZW0gZ3JvdXAuXG4gICAqIEByZXR1cm4ge2FycmF5PEl0ZW0+fVxuICAgKiBAZXhhbXBsZVxuICAgKiBjb25zdCBpdGVtcyA9IGl0ZW1Hcm91cC5nZXRJdGVtcygpO1xuICAgKiBjb25zb2xlLmxvZyhpdGVtc1swXSk7IC8vIGZpcnN0IGl0ZW0gaW4gdGhlIGl0ZW0gZ3JvdXBcbiAgICogY29uc29sZS5sb2coaXRlbXMubGVuZ3RoKTsgLy8gdGhlIG51bWJlciBvZiBpdGVtcyBpbiB0aGUgaXRlbSBncm91cFxuICAgKi9cbiAgZ2V0SXRlbXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXRlbXM7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGFuIGl0ZW0gZ3JvdXAncyBpbmRleC5cbiAgICogQHJldHVybiB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0SW5kZXgoKSB7XG4gICAgcmV0dXJuIHRoaXMuaW5kZXg7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGFuIGl0ZW0gZ3JvdXAncyBsYWJlbC5cbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cbiAgZ2V0TGFiZWwoKSB7XG4gICAgcmV0dXJuIHRoaXMubGFiZWw7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHdoZXRoZXIgYW4gSXRlbUdyb3VwIGlzIGRpc2FibGVkIG9yIG5vdC5cbiAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICovXG4gIGlzRGlzYWJsZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGlzYWJsZWQ7XG4gIH1cblxuICAvKipcbiAgICogQXBwZW5kIHRoZSBlbGVtZW50IGFuZCBuYXRpdmUgZWxlbWVudCB0byB0aGUgY29udGFpbmVyc1xuICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBjb250YWluZXIgLSBjb250YWluZXIgZWxlbWVudFxuICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBuYXRpdmVDb250YWluZXIgLSBuYXRpdmUgY29udGFpbmVyIGVsZW1lbnRcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgYXBwZW5kVG9Db250YWluZXIoY29udGFpbmVyLCBuYXRpdmVDb250YWluZXIpIHtcbiAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5lbCk7XG4gICAgbmF0aXZlQ29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMubmF0aXZlRWwpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlc3RvcnkgYW4gSXRlbUdyb3VwXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGRlc3Ryb3koKSB7XG4gICAgdGhpcy5pdGVtcy5mb3JFYWNoKGl0ZW0gPT4gaXRlbS5kZXN0cm95KCkpO1xuICAgIHJlbW92ZUVsZW1lbnQodGhpcy5lbCk7XG4gICAgcmVtb3ZlRWxlbWVudCh0aGlzLm5hdGl2ZUVsKTtcbiAgICB0aGlzLmVsID0gdGhpcy5sYWJlbEVsID0gdGhpcy5pdGVtQ29udGFpbmVyRWwgPSB0aGlzLm5hdGl2ZUVsID0gdGhpcy5pdGVtcyA9IG51bGw7XG4gIH1cbn1cbiIsIi8qKlxuICogQGZpbGVvdmVydmlldyBVdGlsaXR5IGZ1bmN0aW9ucyByZWxhdGVkIHRvIGtleSBldmVudHNcbiAqIEBhdXRob3IgTkhOLiBGRSBkZXYgdGVhbS48ZGxfamF2YXNjcmlwdEBuaG4uY29tPlxuICovXG5cbmNvbnN0IGtleUNvZGVNYXAgPSB7XG4gIDM4OiAnYXJyb3dVcCcsXG4gIDQwOiAnYXJyb3dEb3duJyxcbiAgMzI6ICdzcGFjZScsXG4gIDEzOiAnZW50ZXInLFxuICAyNzogJ2VzY2FwZScsXG4gIDYxOiAndGFiJ1xufTtcblxuY29uc3Qga2V5TWFwID0ge1xuICBBcnJvd1VwOiAnYXJyb3dVcCcsXG4gIFVwOiAnYXJyb3dVcCcsXG4gIEFycm93RG93bjogJ2Fycm93RG93bicsXG4gIERvd246ICdhcnJvd0Rvd24nLFxuICAnICc6ICdzcGFjZScsXG4gIFNwYWNlYmFyOiAnc3BhY2UnLFxuICBFbnRlcjogJ2VudGVyJyxcbiAgRXNjYXBlOiAnZXNjYXBlJyxcbiAgRXNjOiAnZXNjYXBlJyxcbiAgVGFiOiAndGFiJ1xufTtcblxuLyoqXG4gKiBJZGVudGlmeSB0aGUga2V5IChwb2x5ZmlsbCBmb3IgSUUpXG4gKiBAcGFyYW0ge3N0cmluZ30gZXYgLSBrZXlib2FyZCBldmVudFxuICogQHJldHVybiB7c3RyaW5nfSAtIGtleVxuICovXG5leHBvcnQgY29uc3QgaWRlbnRpZnlLZXkgPSBldiA9PiB7XG4gIGNvbnN0IHsga2V5LCBrZXlDb2RlIH0gPSBldjtcblxuICBpZiAoa2V5KSB7XG4gICAgcmV0dXJuIGtleU1hcFtrZXldIHx8IGtleTtcbiAgfVxuXG4gIHJldHVybiBrZXlDb2RlTWFwW2tleUNvZGVdIHx8IGtleUNvZGU7XG59O1xuIiwiLyoqXG4gKiBAZmlsZW92ZXJ2aWV3IFNlbGVjdEJveFxuICogQGF1dGhvciBOSE4gRkUgRGV2ZWxvcG1lbnQgTGFiIDxkbF9qYXZhc2NyaXB0QG5obi5jb20+XG4gKi9cblxuaW1wb3J0IEN1c3RvbUV2ZW50cyBmcm9tICd0dWktY29kZS1zbmlwcGV0L2N1c3RvbUV2ZW50cy9jdXN0b21FdmVudHMnO1xuaW1wb3J0IG9uIGZyb20gJ3R1aS1jb2RlLXNuaXBwZXQvZG9tRXZlbnQvb24nO1xuaW1wb3J0IG9mZiBmcm9tICd0dWktY29kZS1zbmlwcGV0L2RvbUV2ZW50L29mZic7XG5pbXBvcnQgcHJldmVudERlZmF1bHQgZnJvbSAndHVpLWNvZGUtc25pcHBldC9kb21FdmVudC9wcmV2ZW50RGVmYXVsdCc7XG5pbXBvcnQgZ2V0VGFyZ2V0IGZyb20gJ3R1aS1jb2RlLXNuaXBwZXQvZG9tRXZlbnQvZ2V0VGFyZ2V0JztcbmltcG9ydCBjbG9zZXN0IGZyb20gJ3R1aS1jb2RlLXNuaXBwZXQvZG9tVXRpbC9jbG9zZXN0JztcbmltcG9ydCByZW1vdmVFbGVtZW50IGZyb20gJ3R1aS1jb2RlLXNuaXBwZXQvZG9tVXRpbC9yZW1vdmVFbGVtZW50JztcbmltcG9ydCBpc09iamVjdCBmcm9tICd0dWktY29kZS1zbmlwcGV0L3R5cGUvaXNPYmplY3QnO1xuaW1wb3J0IGlzRXhpc3R5IGZyb20gJ3R1aS1jb2RlLXNuaXBwZXQvdHlwZS9pc0V4aXN0eSc7XG5pbXBvcnQgaXNIVE1MTm9kZSBmcm9tICd0dWktY29kZS1zbmlwcGV0L3R5cGUvaXNIVE1MTm9kZSc7XG5pbXBvcnQgc2VuZEhvc3RuYW1lIGZyb20gJ3R1aS1jb2RlLXNuaXBwZXQvcmVxdWVzdC9zZW5kSG9zdG5hbWUnO1xuaW1wb3J0IHsgY3JlYXRlRWxlbWVudCB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgaWRlbnRpZnlLZXkgfSBmcm9tICcuL2tleUV2ZW50VXRpbHMnO1xuaW1wb3J0IHsgY2xzIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0IElucHV0IGZyb20gJy4vaW5wdXQnO1xuaW1wb3J0IERyb3Bkb3duIGZyb20gJy4vZHJvcGRvd24nO1xuaW1wb3J0IEl0ZW1Hcm91cCBmcm9tICcuL2l0ZW1Hcm91cCc7XG5pbXBvcnQgSXRlbSBmcm9tICcuL2l0ZW0nO1xuaW1wb3J0IFRoZW1lIGZyb20gJy4vdGhlbWUnO1xuXG4vKipcbiAqIEBjbGFzc1xuICogQHBhcmFtIHtIVE1MRWxlbWVudHxzdHJpbmd9IGNvbnRhaW5lciAtIGNvbnRhaW5lciBlbGVtZW50IG9yIHNlbGVjdG9yXG4gKiBAbWl4ZXMgQ3VzdG9tRXZlbnRzXG4gKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICogICBAcGFyYW0ge2FycmF5PGl0ZW1EYXRhfGl0ZW1Hcm91cERhdGE+fSBvcHRpb25zLmRhdGEgLSBhcnJheSBvZiB7QGxpbmsgaXRlbURhdGF9IGFuZCB7QGxpbmsgaXRlbUdyb3VwRGF0YX1cbiAqICAgQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLnBsYWNlaG9sZGVyXSAtIHBsYWNlaG9sZGVyIGZvciBhbiBpbnB1dFxuICogICBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmRpc2FibGVkXSAtIHdoZXRoZXIgYW4gSXRlbSBzaG91bGQgYmUgZGlzYWJsZWQgb3Igbm90XG4gKiAgIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMuYXV0b2ZvY3VzXSAtIHdoZXRoZXIgYSBzZWxlY3Rib3ggc2hvdWxkIGdldCBmb2N1cyB3aGVuIHRoZSBzZWxlY3QgYm94IGFwcGVuZHMgdG8gdGhlIGNvbnRhaW5lclxuICogICBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmF1dG9jbG9zZV0gLSB3aGV0aGVyIGEgc2VsZWN0Ym94IHNob3VsZCBjbG9zZSBhZnRlciBzZWxlY3Rpb25cbiAqICAgQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5zaG93SWNvbl0gLSB3aGV0aGVyIGFuIGFycm93IGljb24gaW4gdGhlIGlucHV0IHNob3VsZCBiZSBzaG93blxuICogICBAcGFyYW0ge29iamVjdH0gW29wdGlvbnMudGhlbWVdIC0ge0BsaW5rIHRoZW1lQ29uZmlnfSBmb3IgY3VzdG9tIHN0eWxlXG4gKiAgIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMudXNhZ2VTdGF0aXN0aWNzXSAtIHdoZXRoZXIgc2VuZCBob3N0bmFtZSB0byBnb29nbGUgYW5hbHl0aWNzLiBJZiB5b3UgZG9uJ3Qgd2FudCB0byBzZW5kIHRoZSBob3N0bmFtZSwgcGxlYXNlIHNldCB0byBmYWxzZS5cbiAqIEBleGFtcGxlXG4gKiBpbXBvcnQgU2VsZWN0Qm94IGZyb20gJ0B0b2FzdC11aS9zZWxlY3QtYm94JztcbiAqIC8vIG9yIGNvbnN0IFNlbGVjdEJveCA9IHJlcXVpcmUoJ0B0b2FzdC11aS9zZWxlY3QtYm94Jyk7XG4gKiAvLyBvciBjb25zdCBTZWxlY3RCb3ggPSB0dWkuU2VsZWN0Qm94O1xuICpcbiAqIGNvbnN0IHNlbGVjdEJveCA9IG5ldyBTZWxlY3RCb3goJyNzZWxlY3QtYm94Jywge1xuICogICBwbGFjZWhvbGRlcjogJ1BsZWFzZSBzZWxlY3QgYW4gb3B0aW9uLicsXG4gKiAgIGRhdGE6IFtcbiAqICAgICB7XG4gKiAgICAgICBsYWJlbDogJ0ZydWl0cycsXG4gKiAgICAgICBkYXRhOiBbIHsgbGFiZWw6ICdBcHBsZScsIHZhbHVlOiAnYXBwbGUnIH0sIHsgbGFiZWw6ICdCYW5hbmEnLCB2YWx1ZTogJ2JhbmFuYScgfSBdXG4gKiAgICAgfSxcbiAqICAgICB7IGxhYmVsOiAnVGhlIHF1aWNrIGJyb3duIGZveCBqdW1wcyBvdmVyIHRoZSBsYXp5IGRvZy4nLCB2YWx1ZTogJ25vbmUnIH0sXG4gKiAgICAge1xuICogICAgICAgbGFiZWw6ICdDb2xvcnMnLFxuICogICAgICAgZGF0YTogW1xuICogICAgICAgICB7IGxhYmVsOiAnUmVkJywgdmFsdWU6ICdyZWQnIH0sXG4gKiAgICAgICAgIHsgbGFiZWw6ICdZZWxsb3cnLCB2YWx1ZTogJ3llbGxvdycgfSxcbiAqICAgICAgICAgeyBsYWJlbDogJ0dyZWVuJywgdmFsdWU6ICdncmVlbicsIGRpc2FibGVkOiB0cnVlIH0sXG4gKiAgICAgICAgIHsgbGFiZWw6ICdCbHVlJywgdmFsdWU6ICdibHVlJywgZGlzYWJsZWQ6IHRydWUgfSxcbiAqICAgICAgICAgeyBsYWJlbDogJ1B1cnBsZScsIHZhbHVlOiAncHVycGxlJyB9XG4gKiAgICAgICBdXG4gKiAgICAgfVxuICogICBdLFxuICogICBhdXRvZm9jdXM6IHRydWUsXG4gKiAgIHNob3dJY29uOiBmYWxzZSxcbiAqICAgdGhlbWU6IHtcbiAqICAgICAnY29tbW9uLmJvcmRlcic6ICcxcHggc29saWQgYmxhY2snLFxuICogICAgICdjb21tb24uY29sb3InOiAnYmxhY2snLFxuICogICAgICdpdGVtLmhpZ2hsaWdodGVkLmJhY2tncm91bmQnOiAneWVsbG93J1xuICogICB9XG4gKiB9KTtcbiAqL1xuXG4vKipcbiAqIFNlbGVjdEJveCBwcm92aWRlcyBzb21lIGN1c3RvbSBldmVudHM6ICh7QGxpbmsgU2VsZWN0Qm94I2V2ZW50LW9wZW4gb3Blbn0sIHtAbGluayBTZWxlY3RCb3gjZXZlbnQtY2xvc2UgY2xvc2V9LCB7QGxpbmsgU2VsZWN0Qm94I2V2ZW50LWRpc2FibGUgZGlzYWJsZX0sIHtAbGluayBTZWxlY3RCb3gjZXZlbnQtZW5hYmxlIGVuYWJsZX0sIHtAbGluayBTZWxlY3RCb3gjZXZlbnQtY2hhbmdlIGNoYW5nZX0pLlxuICogWW91IGNhbiBiaW5kIGV2ZW50IGhhbmRsZXJzIGJ5IHtAbGluayBodHRwczovL25obi5naXRodWIuaW8vdHVpLmNvZGUtc25pcHBldC9sYXRlc3QvQ3VzdG9tRXZlbnRzI29uIHNlbGVjdEJveC5vbihldmVudE5hbWUsIGhhbmRsZXIpfSBhbmQgdW5iaW5kIGJ5IHtAbGluayBodHRwczovL25obi5naXRodWIuaW8vdHVpLmNvZGUtc25pcHBldC9sYXRlc3QvQ3VzdG9tRXZlbnRzI29mZiBzZWxlY3RCb3gub2ZmKGV2ZW50TmFtZSwgaGFuZGxlcil9LlxuICogUmVmZXIgdG8gdGhlIHtAbGluayBodHRwczovL25obi5naXRodWIuaW8vdHVpLmNvZGUtc25pcHBldC9sYXRlc3QvQ3VzdG9tRXZlbnRzIEN1c3RvbUV2ZW50c30gZG9jdW1lbnQgYXQge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9uaG4vdHVpLmNvZGUtc25pcHBldCB0dWktY29kZS1zbmlwcGV0fSB0byBrbm93IGhvdyB0byBiaW5kLCBhbmQgdW5iaW5kIGN1c3RvbSBldmVudHMuXG4gKiBUaGUgZXhhbXBsZSB1c2luZyBjdXN0b20gZXZlbnRzIGNhbiBiZSBmb3VuZCB7QGxpbmsgdHV0b3JpYWwtZXhhbXBsZTAzLWN1c3RvbS1ldmVudHMgaGVyZX0uXG4gKiBAdHlwZWRlZiB7Y2xhc3N9IEN1c3RvbUV2ZW50c1xuICogQGV4YW1wbGVcbiAqIC8vIGJpbmQgJ2NoYW5nZScgZXZlbnRcbiAqIHNlbGVjdEJveC5vbignY2hhbmdlJywgZXYgPT4ge1xuICogICBjb25zb2xlLmxvZyhgc2VsZWN0ZWQgaXRlbSBpcyBjaGFuZ2VkIGZyb20gJHtldi5wcmV2LmdldExhYmVsKCl9IHRvICR7ZXYuY3Vyci5nZXRMYWJlbCgpfS5gKTtcbiAqIH0pO1xuICpcbiAqIC8vIGJpbmQgJ2Rpc2FibGUnIGFuZCBlbmFibGUgZXZlbnRcbiAqIGNvbnN0IHByaW50ID0gZXYgPT4ge1xuICogICBsZXQgdGFyZ2V0ID0gJyc7XG4gKiAgIGlmIChldi50YXJnZXQgaW5zdGFuY2VvZiBTZWxlY3RCb3gpIHtcbiAqICAgICB0YXJnZXQgPSAnU2VsZWN0IGJveCc7XG4gKiAgIH0gZWxzZSB7XG4gKiAgICAgdGFyZ2V0ID0gZXYudGFyZ2V0LmdldExhYmVsKCk7XG4gKiAgIH1cbiAqICAgY29uc29sZS5sb2coYCR7dGFyZ2V0fSBpcyAke2V2LnR5cGV9LmApO1xuICogfVxuICogc2VsZWN0Qm94Lm9uKHtcbiAqICAgZGlzYWJsZTogcHJpbnQsXG4gKiAgIGVuYWJsZTogcHJpbnRcbiAqIH0pO1xuICpcbiAqIC8vIHVuYmluZCBjaGFuZ2UgZXZlbnRcbiAqIHNlbGVjdEJveC5vZmYoJ2NoYW5nZScpO1xuICpcbiAqIC8vIHVuYmluZCBkaXNhYmxlIGV2ZW50XG4gKiBzZWxlY3RCb3gub2ZmKGRpc2FibGUsIHByaW50KTtcbiAqXG4gKiAvLyB1bmJpbmQgYWxsIGV2ZW50c1xuICogc2VsZWN0Qm94Lm9mZigpO1xuICovXG5cbi8qKlxuICogRGF0YSBvZiBhbiB7QGxpbmsgSXRlbSBpdGVtfS5cbiAqIEl0IGlzIHVzZWQgZm9yIGNyZWF0aW5nIGEge0BsaW5rIFNlbGVjdEJveH0uXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBpdGVtRGF0YSAtIGRhdGEgZm9yIHtAbGluayBJdGVtIGl0ZW19XG4gKiBAcHJvcGVydHkge3N0cmluZ30gbGFiZWwgLSBsYWJlbCB0byBiZSBkaXNwbGF5ZWRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB2YWx1ZSAtIHZhbHVlIG9mIGFuIGl0ZW1cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW2Rpc2FibGVkPWZhbHNlXSAtIHdoZXRoZXIgYW4gaXRlbSBzaG91bGQgYmUgZGlzYWJsZWQgb3Igbm90XG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtzZWxlY3RlZD1mYWxzZV0gLSB3aGV0aGVyIGFuIGl0ZW0gc2hvdWxkIGJlIHByZS1zZWxlY3RlZCBvciBub3RcbiAqIEBleGFtcGxlXG4gKiBjb25zdCBpdGVtRGF0YSA9IHtcbiAqICAgbGFiZWw6ICdkaXNhYmxlZCBpdGVtJyxcbiAqICAgdmFsdWU6ICcwJyxcbiAqICAgZGlzYWJsZWQ6IHRydWUsXG4gKiAgIHNlbGVjdGVkOiBmYWxzZVxuICogfTtcbiAqL1xuXG4vKipcbiAqIERhdGEgb2YgYW4ge0BsaW5rIEl0ZW1Hcm91cCBpdGVtIGdyb3VwfS5cbiAqIEl0IGlzIHVzZWQgZm9yIGNyZWF0aW5nIGEge0BsaW5rIFNlbGVjdEJveH0uXG4gKiBJdGVtR3JvdXAgc3VwcG9ydHMgb25seSAxIGxldmVsIGNob2ljZXMsIHNvIGl0IGRvZXMgbm90IHdvcmsgdG8gYWRkIGl0ZW0gZ3JvdXBzIGluIHRoZSBpdGVtIGdyb3VwLlxuICogVGhlIGV4YW1wbGUgdXNpbmcgaXRlbSBncm91cHMgY2FuIGJlIGZvdW5kIHtAbGluayB0dXRvcmlhbC1leGFtcGxlMDEtYmFzaWMgaGVyZX0uXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBpdGVtR3JvdXBEYXRhIC0gZGF0YSBmb3Ige0BsaW5rIEl0ZW1Hcm91cCBpdGVtIGdyb3VwfVxuICogQHByb3BlcnR5IHtzdHJpbmd9IGxhYmVsIC0gbGFiZWwgdG8gYmUgZGlzcGxheWVkXG4gKiBAcHJvcGVydHkge2FycmF5fSBkYXRhIC0ge0BsaW5rIGl0ZW1EYXRhIGRhdGEgZm9yIGl0ZW19XG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtkaXNhYmxlZD1mYWxzZV0gLSB3aGV0aGVyIGFuIGl0ZW0gZ3JvdXAgc2hvdWxkIGJlIGRpc2FibGVkIG9yIG5vdFxuICogQGV4YW1wbGVcbiAqIGNvbnN0IGl0ZW1Hcm91cERhdGEgPSB7XG4gKiAgIGxhYmVsOiAnZGlzYWJsZWQgaXRlbXMnLFxuICogICBkYXRhOiBbXG4gKiAgICAgeyBsYWJlbDogJ2Rpc2FibGUnLCB2YWx1ZTogJ2Rpc2FibGUnIH0sXG4gKiAgICAgeyBsYWJlbDogJ25vbmUnLCB2YWx1ZTogJzAnIH1cbiAqICAgXSxcbiAqICAgZGlzYWJsZWQ6IHRydWVcbiAqIH07XG4gKi9cbmNsYXNzIFNlbGVjdEJveCB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIGNvbnRhaW5lcixcbiAgICB7XG4gICAgICBkYXRhLFxuICAgICAgcGxhY2Vob2xkZXIgPSAnJyxcbiAgICAgIGRpc2FibGVkID0gZmFsc2UsXG4gICAgICBhdXRvZm9jdXMgPSBmYWxzZSxcbiAgICAgIGF1dG9jbG9zZSA9IHRydWUsXG4gICAgICBzaG93SWNvbiA9IHRydWUsXG4gICAgICB0aGVtZSxcbiAgICAgIHVzYWdlU3RhdGlzdGljcyA9IHRydWVcbiAgICB9XG4gICkge1xuICAgIC8qKlxuICAgICAqIEB0eXBlIHtIVE1MRWxlbWVudH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuZWwgPSBjcmVhdGVFbGVtZW50KCdkaXYnLCAnJywgeyBjbGFzc05hbWU6IGNscy5TRUxFQ1RfQk9YIH0pO1xuXG4gICAgLyoqXG4gICAgICogQHR5cGUge0lucHV0fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5pbnB1dCA9IG5ldyBJbnB1dCh7IHBsYWNlaG9sZGVyLCBkaXNhYmxlZCwgc2hvd0ljb24gfSk7XG5cbiAgICAvKipcbiAgICAgKiBAdHlwZSB7RHJvcGRvd259XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmRyb3Bkb3duID0gbmV3IERyb3Bkb3duKHsgcGxhY2Vob2xkZXIsIGRpc2FibGVkLCBkYXRhIH0pO1xuXG4gICAgLyoqXG4gICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLm9wZW5lZCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmRpYWJsZWQgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuYXV0b2Nsb3NlID0gYXV0b2Nsb3NlO1xuXG4gICAgLyoqXG4gICAgICogQHR5cGUge1RoZW1lfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy50aGVtZSA9IGlzT2JqZWN0KHRoZW1lKSA/IG5ldyBUaGVtZSh0aGVtZSwgY29udGFpbmVyKSA6IG51bGw7XG5cbiAgICB0aGlzLmluaXRpYWxpemUoeyBwbGFjZWhvbGRlciwgZGlzYWJsZWQgfSk7XG4gICAgdGhpcy5hcHBlbmRUb0NvbnRhaW5lcihjb250YWluZXIpO1xuXG4gICAgaWYgKGF1dG9mb2N1cykge1xuICAgICAgdGhpcy5pbnB1dC5mb2N1cygpO1xuICAgIH1cblxuICAgIGlmICh1c2FnZVN0YXRpc3RpY3MpIHtcbiAgICAgIHNlbmRIb3N0bmFtZSgnc2VsZWN0LWJveCcsICdVQS0xMjk5ODc0NjItMScpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBcHBlbmQgdGhlIHNlbGVjdCBib3ggZWxlbWVudCB0byB0aGUgY29udGFpbmVyXG4gICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR8c3RyaW5nfSBjb250YWluZXIgLSBjb250YWluZXIgZWxlbWVudCBvciBzZWxlY3RvclxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgYXBwZW5kVG9Db250YWluZXIoY29udGFpbmVyKSB7XG4gICAgY29uc3QgY29udGFpbmVyRWwgPSBpc0hUTUxOb2RlKGNvbnRhaW5lcikgPyBjb250YWluZXIgOiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGNvbnRhaW5lcik7XG4gICAgY29udGFpbmVyRWwuYXBwZW5kQ2hpbGQodGhpcy5lbCk7XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZVxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9ucyAtIG9wdGlvbnNcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGluaXRpYWxpemUob3B0aW9ucykge1xuICAgIGNvbnN0IHNlbGVjdGVkSXRlbSA9IHRoaXMuZ2V0U2VsZWN0ZWRJdGVtKCk7XG4gICAgaWYgKHNlbGVjdGVkSXRlbSkge1xuICAgICAgdGhpcy5pbnB1dC5jaGFuZ2VUZXh0KHNlbGVjdGVkSXRlbSk7XG4gICAgfSBlbHNlIGlmICghb3B0aW9ucy5wbGFjZWhvbGRlcikge1xuICAgICAgdGhpcy5zZWxlY3QoMCk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMuZGlzYWJsZWQpIHtcbiAgICAgIHRoaXMuZGlzYWJsZSgpO1xuICAgIH1cblxuICAgIHRoaXMuYmluZEV2ZW50cygpO1xuXG4gICAgdGhpcy5pbnB1dC5hcHBlbmRUb0NvbnRhaW5lcih0aGlzLmVsKTtcbiAgICB0aGlzLmRyb3Bkb3duLmFwcGVuZFRvQ29udGFpbmVyKHRoaXMuZWwpO1xuICB9XG5cbiAgLyoqXG4gICAqIEJpbmQgZXZlbnRzXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBiaW5kRXZlbnRzKCkge1xuICAgIG9uKFxuICAgICAgZG9jdW1lbnQsXG4gICAgICAnY2xpY2snLFxuICAgICAgZXYgPT4ge1xuICAgICAgICBjb25zdCB0YXJnZXQgPSBnZXRUYXJnZXQoZXYpO1xuICAgICAgICBpZiAoIWNsb3Nlc3QodGFyZ2V0LCBgLiR7Y2xzLlNFTEVDVF9CT1h9YCkgJiYgdGhpcy5vcGVuZWQpIHtcbiAgICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB0aGlzXG4gICAgKTtcbiAgICBvbih0aGlzLmVsLCAnY2xpY2snLCBldiA9PiB0aGlzLmhhbmRsZUNsaWNrKGV2LCBjbHMpKTtcbiAgICBvbih0aGlzLmVsLCAnbW91c2VvdmVyJywgZXYgPT4gdGhpcy5oYW5kbGVNb3VzZW92ZXIoZXYsIGNscykpO1xuICAgIG9uKHRoaXMuZWwsICdrZXlkb3duJywgZXYgPT4gdGhpcy5oYW5kbGVLZXlkb3duKGV2LCBjbHMpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVbmJpbmQgZXZlbnRzXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICB1bmJpbmRFdmVudHMoKSB7XG4gICAgb2ZmKGRvY3VtZW50LCAnY2xpY2snKTtcbiAgICBvZmYodGhpcy5lbCwgJ2NsaWNrIG1vdXNlb3ZlciBrZXlkb3duJyk7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIGNsaWNrIGV2ZW50c1xuICAgKiBAcGFyYW0ge0V2ZW50fSBldiAtIGFuIGV2ZW50XG4gICAqIEBwYXJhbSB7b2JqZWN0fSBjbHMgLSBjbHNcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGhhbmRsZUNsaWNrKGV2LCB7IElOUFVULCBJVEVNIH0pIHtcbiAgICBjb25zdCB0YXJnZXQgPSBnZXRUYXJnZXQoZXYpO1xuICAgIGNvbnN0IGl0ZW1FbCA9IGNsb3Nlc3QodGFyZ2V0LCBgLiR7SVRFTX1gKTtcblxuICAgIGlmIChpdGVtRWwpIHtcbiAgICAgIHRoaXMuc2VsZWN0KGl0ZW1FbC5nZXRBdHRyaWJ1dGUoJ2RhdGEtdmFsdWUnKSk7XG4gICAgfSBlbHNlIGlmIChjbG9zZXN0KHRhcmdldCwgYC4ke0lOUFVUfWApKSB7XG4gICAgICB0aGlzLnRvZ2dsZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGUgbW91c2VvdmVyIGV2ZW50c1xuICAgKiBAcGFyYW0ge0V2ZW50fSBldiAtIGFuIGV2ZW50XG4gICAqIEBwYXJhbSB7b2JqZWN0fSBjbHMgLSBjbHNcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGhhbmRsZU1vdXNlb3ZlcihldiwgeyBJVEVNIH0pIHtcbiAgICBpZiAodGhpcy5jaGVja01vdXNlbW92ZShldi5jbGllbnRYLCBldi5jbGllbnRZKSkge1xuICAgICAgY29uc3QgdGFyZ2V0ID0gZ2V0VGFyZ2V0KGV2KTtcbiAgICAgIGNvbnN0IGl0ZW1FbCA9IGNsb3Nlc3QodGFyZ2V0LCBgLiR7SVRFTX1gKTtcblxuICAgICAgaWYgKGl0ZW1FbCkge1xuICAgICAgICB0aGlzLmRyb3Bkb3duLmhpZ2hsaWdodChpdGVtRWwuZ2V0QXR0cmlidXRlKCdkYXRhLXZhbHVlJykpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhIHBvaW50ZXIgaXMgbW92ZWRcbiAgICogQHBhcmFtIHtudW1iZXJ9IHggLSBtb3VzZUV2ZW50LmNsaWVudFhcbiAgICogQHBhcmFtIHtudW1iZXJ9IHkgLSBtb3VzZUV2ZW50LmNsaWVudFlcbiAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIGNoZWNrTW91c2Vtb3ZlKHgsIHkpIHtcbiAgICBpZiAodGhpcy5wcmV2WCAhPT0geCB8fCB0aGlzLnByZXZZICE9PSB5KSB7XG4gICAgICB0aGlzLnByZXZYID0geDtcbiAgICAgIHRoaXMucHJldlkgPSB5O1xuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIGtleWRvd24gZXZlbnRzXG4gICAqIEBwYXJhbSB7RXZlbnR9IGV2IC0gYW4gZXZlbnRcbiAgICogQHBhcmFtIHtvYmplY3R9IGNsYXNzTmFtZXMgLSBjbHNcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGhhbmRsZUtleWRvd24oZXYsIGNsYXNzTmFtZXMpIHtcbiAgICBjb25zdCBrZXkgPSBpZGVudGlmeUtleShldik7XG4gICAgY29uc3QgY2xvc2VLZXlzID0gWyd0YWInLCAnZXNjYXBlJ107XG4gICAgY29uc3QgYWN0aXZlS2V5cyA9IFsnYXJyb3dVcCcsICdhcnJvd0Rvd24nLCAnc3BhY2UnLCAnZW50ZXInXTtcblxuICAgIGlmIChjbG9zZUtleXMuaW5kZXhPZihrZXkpID4gLTEgJiYgdGhpcy5vcGVuZWQpIHtcbiAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgIGlmIChrZXkgPT09ICdlc2NhcGUnKSB7XG4gICAgICAgIHRoaXMuaW5wdXQuZm9jdXMoKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGFjdGl2ZUtleXMuaW5kZXhPZihrZXkpID4gLTEpIHtcbiAgICAgIHByZXZlbnREZWZhdWx0KGV2KTtcbiAgICAgIHRoaXMuYWN0aXZhdGVLZXlkb3duKGV2LCBrZXksIGNsYXNzTmFtZXMpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBY3RpdmF0ZSBrZXlkb3duIGV2ZW50c1xuICAgKiBAcGFyYW0ge0V2ZW50fSBldiAtIGFuIGV2ZW50XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBrZXkgcHJlc3NlZFxuICAgKiBAcGFyYW0ge29iamVjdH0gY2xhc3NOYW1lcyAtIGNsc1xuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgYWN0aXZhdGVLZXlkb3duKGV2LCBrZXksIHsgSVRFTSwgSU5QVVQgfSkge1xuICAgIGNvbnN0IHRhcmdldCA9IGdldFRhcmdldChldik7XG4gICAgY29uc3QgaXRlbUVsID0gY2xvc2VzdCh0YXJnZXQsIGAuJHtJVEVNfWApO1xuXG4gICAgaWYgKGtleSA9PT0gJ2VzY2FwZScgJiYgdGhpcy5vcGVuZWQpIHtcbiAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgIHRoaXMuaW5wdXQuZm9jdXMoKTtcbiAgICB9IGVsc2UgaWYgKGl0ZW1FbCkge1xuICAgICAgdGhpcy5wcmVzc0tleU9uSXRlbShrZXksIGl0ZW1FbCk7XG4gICAgfSBlbHNlIGlmIChjbG9zZXN0KHRhcmdldCwgYC4ke0lOUFVUfWApKSB7XG4gICAgICB0aGlzLnByZXNzS2V5T25JbnB1dChrZXkpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGUga2V5ZG93biBldmVudHMgd2hlbiBpdCBvY2N1cnMgb24gdGhlIElucHV0XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBrZXlcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByZXNzS2V5T25JbnB1dChrZXkpIHtcbiAgICBpZiAoIXRoaXMub3BlbmVkKSB7XG4gICAgICB0aGlzLm9wZW4oKTtcbiAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ2Fycm93VXAnIHx8IGtleSA9PT0gJ2Fycm93RG93bicpIHtcbiAgICAgIHRoaXMuZHJvcGRvd24ubW92ZUhpZ2hsaWdodGVkSXRlbShrZXkgPT09ICdhcnJvd1VwJyA/IC0xIDogMSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSBrZXlkb3duIGV2ZW50cyB3aGVuIGl0IG9jY3VycyBvbiB0aGUgSXRlbVxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0ga2V5XG4gICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGl0ZW1FbCAtIEl0ZW0uZWxcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByZXNzS2V5T25JdGVtKGtleSwgaXRlbUVsKSB7XG4gICAgaWYgKGtleSA9PT0gJ2VudGVyJyB8fCBrZXkgPT09ICdzcGFjZScpIHtcbiAgICAgIHRoaXMuc2VsZWN0QnlLZXlkb3duKGl0ZW1FbCk7XG4gICAgfSBlbHNlIGlmIChrZXkgPT09ICdhcnJvd1VwJyB8fCBrZXkgPT09ICdhcnJvd0Rvd24nKSB7XG4gICAgICB0aGlzLmRyb3Bkb3duLm1vdmVIaWdobGlnaHRlZEl0ZW0oa2V5ID09PSAnYXJyb3dVcCcgPyAtMSA6IDEpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZWxlY3QgYW4gSXRlbSBieSBzcGFjZSBvciBlbnRlclxuICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBpdGVtRWwgLSBJdGVtLmVsXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBzZWxlY3RCeUtleWRvd24oaXRlbUVsKSB7XG4gICAgdGhpcy5zZWxlY3QoaXRlbUVsLmdldEF0dHJpYnV0ZSgnZGF0YS12YWx1ZScpKTtcbiAgICB0aGlzLmNsb3NlKCk7XG4gICAgdGhpcy5pbnB1dC5mb2N1cygpO1xuICB9XG5cbiAgLyoqXG4gICAqIERpc2FibGUgYSBzZWxlY3QgYm94LCB7QGxpbmsgSXRlbUdyb3VwIGl0ZW0gZ3JvdXB9IG9yIHtAbGluayBJdGVtIGl0ZW19LlxuICAgKiBJZiBpdCB0YWtlcyBubyBhcmd1bWVudHMsIGEgc2VsZWN0IGJveCBpcyBkaXNhYmxlZC5cbiAgICogSWYgaXQgdGFrZXMgc3RyaW5nLCBhbiBpdGVtIHdpdGggdGhlIHNhbWUgdmFsdWUgYXMgdGhlIGFyZ3VtZW50IGlzIGRpc2FibGVkLlxuICAgKiBJZiBpdCB0YWtlcyBudW1iZXIsIGFuIGl0ZW0gd2l0aCB0aGUgc2FtZSBpbmRleCBhcyB0aGUgYXJndW1lbnQgaXMgZGlzYWJsZWQuXG4gICAqIElmIGl0IHRha2VzIEl0ZW0gb3IgSXRlbUdyb3VwLCBhbiBhcmd1bWVudCBpdHNlbGYgaXMgZGlzYWJsZWQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcnxJdGVtfEl0ZW1Hcm91cH0gdmFsdWUgLSBpZiBzdHJpbmcsIGZpbmQgYW4gSXRlbSBieSBpdHMgdmFsdWUuIGlmIG51bWJlciwgZmluZCBhbiBJdGVtIGJ5IGl0cyBpbmRleC5cbiAgICogQGV4YW1wbGVcbiAgICogc2VsZWN0Qm94LmRpc2FibGUoKTsgLy8gc2VsZWN0IGJveCBpcyBkaXNhYmxlZC5cbiAgICogc2VsZWN0Qm94LmRpc2FibGUoMSk7IC8vIHNlY29uZCBpdGVtIGlzIGRpc2FibGVkLlxuICAgKiBzZWxlY3RCb3guZGlzYWJsZSgndmFsdWUnKSAvLyBpdGVtIHdoaWNoIG9mIHZhbHVlIGlzICd2YWx1ZScgaXMgZGlzYWJsZWQuXG4gICAqIHNlbGVjdEJveC5kaXNhYmxlKHNlbGVjdEJveC5nZXRTZWxlY3RlZEl0ZW0oKSk7IC8vIHNlbGVjdGVkIGl0ZW0gaXMgZGlzYWJsZWQuXG4gICAqL1xuICBkaXNhYmxlKHZhbHVlKSB7XG4gICAgaWYgKCFpc0V4aXN0eSh2YWx1ZSkpIHtcbiAgICAgIHRoaXMuZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgdGhpcy5pbnB1dC5kaXNhYmxlKCk7XG4gICAgICB0aGlzLmRyb3Bkb3duLmRpc2FibGUoKTtcblxuICAgICAgLyoqXG4gICAgICAgKiBPY2N1cnMgd2hlbiBhIHNlbGVjdCBib3gsIHtAbGluayBJdGVtR3JvdXAgaXRlbSBncm91cH0gb3Ige0BsaW5rIEl0ZW0gaXRlbX0gaXMgZGlzYWJsZWQuXG4gICAgICAgKiBAZXZlbnQgU2VsZWN0Qm94I2Rpc2FibGVcbiAgICAgICAqIEB0eXBlIHtvYmplY3R9IGV2XG4gICAgICAgKiBAcHJvcGVydHkge3N0cmluZ30gdHlwZSAtIGV2ZW50IG5hbWUgKCdkaXNhYmxlJylcbiAgICAgICAqIEBwcm9wZXJ0eSB7U2VsZWN0Qm94fEl0ZW1Hcm91cHxJdGVtfSB0YXJnZXQgLSBkaXNhYmxlZCB0YXJnZXRcbiAgICAgICAqIEBleGFtcGxlXG4gICAgICAgKiBzZWxlY3RCb3gub24oJ2Rpc2FibGUnLCBldiA9PiB7XG4gICAgICAgKiAgIGNvbnNvbGUubG9nKGV2LnRhcmdldCk7XG4gICAgICAgKiB9KTtcbiAgICAgICAqL1xuICAgICAgdGhpcy5maXJlKCdkaXNhYmxlJywgeyB0eXBlOiAnZGlzYWJsZScsIHRhcmdldDogdGhpcyB9KTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgSXRlbSB8fCB2YWx1ZSBpbnN0YW5jZW9mIEl0ZW1Hcm91cCkge1xuICAgICAgdmFsdWUuZGlzYWJsZSgpO1xuICAgICAgdGhpcy5maXJlKCdkaXNhYmxlJywgeyB0eXBlOiAnZGlzYWJsZScsIHRhcmdldDogdmFsdWUgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGRpc2FibGVkSXRlbSA9IHRoaXMuZHJvcGRvd24uZ2V0SXRlbSh2YWx1ZSk7XG4gICAgICBpZiAoZGlzYWJsZWRJdGVtKSB7XG4gICAgICAgIGRpc2FibGVkSXRlbS5kaXNhYmxlKCk7XG4gICAgICAgIHRoaXMuZmlyZSgnZGlzYWJsZScsIHsgdHlwZTogJ2Rpc2FibGUnLCB0YXJnZXQ6IGRpc2FibGVkSXRlbSB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRW5hYmxlIGEgc2VsZWN0IGJveCwge0BsaW5rIEl0ZW1Hcm91cCBpdGVtIGdyb3VwfSBvciB7QGxpbmsgSXRlbSBpdGVtfS5cbiAgICogSWYgaXQgdGFrZXMgbm8gYXJndW1lbnRzLCBhIHNlbGVjdCBib3ggaXMgZW5hYmxlZC5cbiAgICogSWYgaXQgdGFrZXMgc3RyaW5nLCBhbiBpdGVtIHdpdGggdGhlIHNhbWUgdmFsdWUgYXMgdGhlIGFyZ3VtZW50IGlzIGVuYWJsZWQuXG4gICAqIElmIGl0IHRha2VzIG51bWJlciwgYW4gaXRlbSB3aXRoIHRoZSBzYW1lIGluZGV4IGFzIHRoZSBhcmd1bWVudCBpcyBlbmFibGVkLlxuICAgKiBJZiBpdCB0YWtlcyBJdGVtIG9yIEl0ZW1Hcm91cCwgYW4gYXJndW1lbnQgaXRzZWxmIGlzIGVuYWJsZWQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcnxJdGVtfEl0ZW1Hcm91cH0gdmFsdWUgLSBpZiBzdHJpbmcsIGZpbmQgYW4gSXRlbSBieSBpdHMgdmFsdWUuIGlmIG51bWJlciwgZmluZCBhbiBJdGVtIGJ5IGl0cyBpbmRleC5cbiAgICogQGV4YW1wbGVcbiAgICogc2VsZWN0Qm94LmVuYWJsZSgpOyAvLyBzZWxlY3QgYm94IGlzIGVuYWJsZWQuXG4gICAqIHNlbGVjdEJveC5lbmFibGUoMSk7IC8vIHNlY29uZCBpdGVtIGlzIGVuYWJsZWQuXG4gICAqIHNlbGVjdEJveC5lbmFibGUoJ3ZhbHVlJykgLy8gaXRlbSB3aGljaCBvZiB2YWx1ZSBpcyAndmFsdWUnIGlzIGVuYWJsZWQuXG4gICAqIHNlbGVjdEJveC5lbmFibGUoc2VsZWN0Qm94LmdldFNlbGVjdGVkSXRlbSgpKTsgLy8gc2VsZWN0ZWQgaXRlbSBpcyBlbmFibGVkLlxuICAgKi9cbiAgZW5hYmxlKHZhbHVlKSB7XG4gICAgaWYgKCFpc0V4aXN0eSh2YWx1ZSkpIHtcbiAgICAgIHRoaXMuZGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgIHRoaXMuaW5wdXQuZW5hYmxlKCk7XG4gICAgICB0aGlzLmRyb3Bkb3duLmVuYWJsZSgpO1xuXG4gICAgICAvKipcbiAgICAgICAqIE9jY3VycyB3aGVuIGEgc2VsZWN0IGJveCwge0BsaW5rIEl0ZW1Hcm91cCBpdGVtIGdyb3VwfSBvciB7QGxpbmsgSXRlbSBpdGVtfSBpcyBlbmFibGVkLlxuICAgICAgICogQGV2ZW50IFNlbGVjdEJveCNlbmFibGVcbiAgICAgICAqIEB0eXBlIHtvYmplY3R9IGV2XG4gICAgICAgKiBAcHJvcGVydHkge3N0cmluZ30gdHlwZSAtIGV2ZW50IG5hbWUgKCdlbmFibGUnKVxuICAgICAgICogQHByb3BlcnR5IHtTZWxlY3RCb3h8SXRlbUdyb3VwfEl0ZW19IHRhcmdldCAtIGVuYWJsZSB0YXJnZXRcbiAgICAgICAqIEBleGFtcGxlXG4gICAgICAgKiBzZWxlY3RCb3gub24oJ2VuYWJsZScsIGV2ID0+IHtcbiAgICAgICAqICAgY29uc29sZS5sb2coZXYudGFyZ2V0KTtcbiAgICAgICAqIH0pO1xuICAgICAgICovXG4gICAgICB0aGlzLmZpcmUoJ2VuYWJsZScsIHsgdHlwZTogJ2VuYWJsZScsIHRhcmdldDogdGhpcyB9KTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgSXRlbSB8fCB2YWx1ZSBpbnN0YW5jZW9mIEl0ZW1Hcm91cCkge1xuICAgICAgdmFsdWUuZW5hYmxlKCk7XG4gICAgICB0aGlzLmZpcmUoJ2VuYWJsZScsIHsgdHlwZTogJ2VuYWJsZScsIHRhcmdldDogdmFsdWUgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGRpc2FibGVkSXRlbSA9IHRoaXMuZHJvcGRvd24uZ2V0SXRlbSh2YWx1ZSk7XG4gICAgICBpZiAoZGlzYWJsZWRJdGVtKSB7XG4gICAgICAgIGRpc2FibGVkSXRlbS5lbmFibGUoKTtcbiAgICAgICAgdGhpcy5maXJlKCdlbmFibGUnLCB7IHR5cGU6ICdlbmFibGUnLCB0YXJnZXQ6IGRpc2FibGVkSXRlbSB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogT3BlbiBhIGRyb3Bkb3duIGxpc3QuXG4gICAqIEBleGFtcGxlXG4gICAqIHNlbGVjdEJveC5vcGVuKCk7XG4gICAqL1xuICBvcGVuKCkge1xuICAgIGlmICghdGhpcy5kaXNhYmxlZCkge1xuICAgICAgdGhpcy5vcGVuZWQgPSB0cnVlO1xuICAgICAgdGhpcy5kcm9wZG93bi5vcGVuKCk7XG4gICAgICB0aGlzLmlucHV0Lm9wZW4oKTtcblxuICAgICAgLyoqXG4gICAgICAgKiBPY2N1cnMgd2hlbiBhIHNlbGVjdCBib3ggb3BlbnMuXG4gICAgICAgKiBAZXZlbnQgU2VsZWN0Qm94I29wZW5cbiAgICAgICAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0eXBlIC0gZXZlbnQgbmFtZSAoJ29wZW4nKVxuICAgICAgICogQGV4YW1wbGVcbiAgICAgICAqIHNlbGVjdEJveC5vbignb3BlbicsIGV2ID0+IHtcbiAgICAgICAqICAgY29uc29sZS5sb2coJ29wZW4nKTtcbiAgICAgICAqIH0pO1xuICAgICAgICovXG4gICAgICB0aGlzLmZpcmUoJ29wZW4nLCB7IHR5cGU6ICdvcGVuJyB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2xvc2UgYSBkcm9wZG93biBsaXN0LlxuICAgKiBAZXhhbXBsZVxuICAgKiBzZWxlY3RCb3guY2xvc2UoKTtcbiAgICovXG4gIGNsb3NlKCkge1xuICAgIHRoaXMub3BlbmVkID0gZmFsc2U7XG4gICAgdGhpcy5kcm9wZG93bi5jbG9zZSgpO1xuICAgIHRoaXMuaW5wdXQuY2xvc2UoKTtcblxuICAgIC8qKlxuICAgICAqIE9jY3VycyB3aGVuIGEgc2VsZWN0IGJveCBjbG9zZXMuXG4gICAgICogQGV2ZW50IFNlbGVjdEJveCNjbG9zZVxuICAgICAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0eXBlIC0gZXZlbnQgbmFtZSAoJ2Nsb3NlJylcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIHNlbGVjdEJveC5vbignY2xvc2UnLCBldiA9PiB7XG4gICAgICogICBjb25zb2xlLmxvZygnY2xvc2UnKTtcbiAgICAgKiB9KTtcbiAgICAgKi9cbiAgICB0aGlzLmZpcmUoJ2Nsb3NlJywgeyB0eXBlOiAnY2xvc2UnIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRvZ2dsZSBhIGRyb3Bkb3duIGxpc3QuXG4gICAqIEBleGFtcGxlXG4gICAqIHNlbGVjdEJveC50b2dnbGUoKTtcbiAgICovXG4gIHRvZ2dsZSgpIHtcbiAgICBpZiAodGhpcy5vcGVuZWQpIHtcbiAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5vcGVuKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNlbGVjdCBhbiB7QGxpbmsgSXRlbSBpdGVtfS5cbiAgICogSWYgaXQgdGFrZXMgc3RyaW5nLCBhbiBpdGVtIHdpdGggdGhlIHNhbWUgdmFsdWUgYXMgdGhlIGFyZ3VtZW50IGlzIHNlbGVjdGVkLlxuICAgKiBJZiBpdCB0YWtlcyBudW1iZXIsIGFuIGl0ZW0gd2l0aCB0aGUgc2FtZSBpbmRleCBhcyB0aGUgYXJndW1lbnQgaXMgc2VsZWN0ZWQuXG4gICAqIElmIGl0IHRha2VzIEl0ZW0sIGFuIGFyZ3VtZW50IGl0c2VsZiBpcyBzZWxlY3RlZC5cbiAgICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfEl0ZW19IHZhbHVlIC0gaWYgc3RyaW5nLCBmaW5kIGFuIEl0ZW0gYnkgaXRzIHZhbHVlLiBpZiBudW1iZXIsIGZpbmQgYW4gSXRlbSBieSBpdHMgaW5kZXguXG4gICAqIEByZXR1cm4ge0l0ZW19IC0gc2VsZWN0ZWQgSXRlbS5cbiAgICogQGV4YW1wbGVcbiAgICogc2VsZWN0Qm94LnNlbGVjdCgxKTsgLy8gc2Vjb25kIGl0ZW0gaXMgc2VsZWN0ZWQuXG4gICAqIHNlbGVjdEJveC5zZWxlY3QoJ3ZhbHVlJykgLy8gaXRlbSB3aGljaCBvZiB2YWx1ZSBpcyAndmFsdWUnIGlzIHNlbGVjdGVkLlxuICAgKi9cbiAgc2VsZWN0KHZhbHVlKSB7XG4gICAgbGV0IHNlbGVjdGVkSXRlbSA9IG51bGw7XG4gICAgY29uc3QgcHJldlNlbGVjdGVkSXRlbSA9IHRoaXMuZ2V0U2VsZWN0ZWRJdGVtKCk7XG5cbiAgICBpZiAoIXRoaXMuZGlzYWJsZWQpIHtcbiAgICAgIHNlbGVjdGVkSXRlbSA9IHRoaXMuZHJvcGRvd24uc2VsZWN0KHZhbHVlKTtcblxuICAgICAgaWYgKHNlbGVjdGVkSXRlbSkge1xuICAgICAgICB0aGlzLmlucHV0LmNoYW5nZVRleHQoc2VsZWN0ZWRJdGVtKTtcblxuICAgICAgICAvKipcbiAgICAgICAgICogT2NjdXJzIHdoZW4gYW4ge0BsaW5rIEl0ZW0gaXRlbX0gaXMgc2VsZWN0ZWQuXG4gICAgICAgICAqIEBldmVudCBTZWxlY3RCb3gjc2VsZWN0XG4gICAgICAgICAqIEB0eXBlIHtvYmplY3R9IGV2XG4gICAgICAgICAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0eXBlIC0gZXZlbnQgbmFtZSAoJ3NlbGVjdCcpXG4gICAgICAgICAqIEBwcm9wZXJ0eSB7SXRlbX0gdGFyZ2V0IC0gc2VsZWN0ZWQgaXRlbVxuICAgICAgICAgKiBAaWdub3JlXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqIHNlbGVjdEJveC5vbignc2VsZWN0JywgZXYgPT4ge1xuICAgICAgICAgKiAgIGNvbnNvbGUubG9nKGAke2V2LnRhcmdldC5nZXRMYWJlbCgpfSBpcyBzZWxlY3RlZC5gKTtcbiAgICAgICAgICogfSk7XG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmZpcmUoJ3NlbGVjdCcsIHsgdHlwZTogJ3NlbGVjdCcsIHRhcmdldDogc2VsZWN0ZWRJdGVtIH0pO1xuXG4gICAgICAgIGlmIChwcmV2U2VsZWN0ZWRJdGVtICE9PSBzZWxlY3RlZEl0ZW0pIHtcbiAgICAgICAgICAvKipcbiAgICAgICAgICAgKiBPY2N1cnMgd2hlbiBhIHNlbGVjdGVkIHtAbGluayBJdGVtIGl0ZW19IGlzIGNoYW5nZWQuXG4gICAgICAgICAgICogQGV2ZW50IFNlbGVjdEJveCNjaGFuZ2VcbiAgICAgICAgICAgKiBAdHlwZSB7b2JqZWN0fSBldlxuICAgICAgICAgICAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0eXBlIC0gZXZlbnQgbmFtZSAoJ2NoYW5nZScpXG4gICAgICAgICAgICogQHByb3BlcnR5IHtJdGVtfSBwcmV2IC0gcHJldmlvdXMgc2VsZWN0ZWQgaXRlbVxuICAgICAgICAgICAqIEBwcm9wZXJ0eSB7SXRlbX0gY3VyciAtIGN1cnJlbnQgc2VsZWN0ZWQgaXRlbVxuICAgICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAgICogc2VsZWN0Qm94Lm9uKCdjaGFuZ2UnLCBldiA9PiB7XG4gICAgICAgICAgICogICBjb25zb2xlLmxvZyhgc2VsZWN0ZWQgaXRlbSBpcyBjaGFuZ2VkIGZyb20gJHtldi5wcmV2LmdldExhYmVsKCl9IHRvICR7ZXYuY3Vyci5nZXRMYWJlbCgpfS5gKTtcbiAgICAgICAgICAgKiB9KTtcbiAgICAgICAgICAgKi9cbiAgICAgICAgICB0aGlzLmZpcmUoJ2NoYW5nZScsIHtcbiAgICAgICAgICAgIHR5cGU6ICdjaGFuZ2UnLFxuICAgICAgICAgICAgcHJldjogcHJldlNlbGVjdGVkSXRlbSxcbiAgICAgICAgICAgIGN1cnI6IHNlbGVjdGVkSXRlbVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuYXV0b2Nsb3NlICYmIHRoaXMub3BlbmVkKSB7XG4gICAgICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHNlbGVjdGVkSXRlbTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXNlbGVjdCBhbiBpdGVtLlxuICAgKiBJZiBzZWxlY3RCb3ggaGFzIGEgcGxhY2Vob2xkZXIsIHRoZSBpbnB1dCdzIHRleHQgaXMgYSBwbGFjZWhvbGRlci5cbiAgICogSWYgbm8gcGxhY2Vob2xkZXIsIHRocyBpbnB1dCBpcyBlbXB0eS5cbiAgICogQGV4YW1wbGVcbiAgICogc2VsZWN0Qm94LmRlc2VsZWN0KCk7XG4gICAqL1xuICBkZXNlbGVjdCgpIHtcbiAgICBpZiAoIXRoaXMuZGlzYWJsZWQpIHtcbiAgICAgIHRoaXMuZHJvcGRvd24uZGVzZWxlY3QoKTtcbiAgICAgIHRoaXMuaW5wdXQuY2hhbmdlVGV4dCgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIHNlbGVjdGVkIHtAbGluayBJdGVtIGl0ZW19LlxuICAgKiBAcmV0dXJuIHtJdGVtfVxuICAgKi9cbiAgZ2V0U2VsZWN0ZWRJdGVtKCkge1xuICAgIHJldHVybiB0aGlzLmRyb3Bkb3duLmdldFNlbGVjdGVkSXRlbSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhbGwge0BsaW5rIEl0ZW0gaXRlbXN9IHRoYXQgcGFzcyB0aGUgdGVzdCBpbXBsZW1lbnRlZCBieSB0aGUgcHJvdmlkZWQgZnVuY3Rpb24uXG4gICAqIElmIGZpbHRlciBmdW5jdGlvbiBpcyBub3QgcGFzc2VkLCBpdCByZXR1cm5zIGFsbCBpdGVtcy5cbiAgICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2sgLSBjYWxsYmFjayBmdW5jdGlvbiB0byBmaWx0ZXIgaXRlbXNcbiAgICogQHBhcmFtIHtudW1iZXJ9IG51bWJlciAtIHRoZSBudW1iZXIgb2YgaXRlbXMgdG8gZmluZC4gSWYgaXQgaXMgbm90IHBhc3NlZCwgaXRlcmF0ZSBhbGwgaXRlbXMuXG4gICAqIEByZXR1cm4ge2FycmF5PEl0ZW0+fVxuICAgKiBAZXhhbXBsZVxuICAgKiBzZWxlY3RCb3guZ2V0SXRlbXMoKTsgLy8gYWxsIGl0ZW1zXG4gICAqIHNlbGVjdEJveC5nZXRJdGVtcyhpdGVtID0+IHtcbiAgICogIHJldHVybiAhaXRlbS5pc0Rpc2FibGVkKCk7XG4gICAqIH0pOyAvLyBhbGwgZW5hYmxlZCBpdGVtc1xuICAgKi9cbiAgZ2V0SXRlbXMoY2FsbGJhY2ssIG51bWJlcikge1xuICAgIHJldHVybiB0aGlzLmRyb3Bkb3duLmdldEl0ZW1zKGNhbGxiYWNrLCBudW1iZXIpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhbiB7QGxpbmsgSXRlbSBpdGVtfSBieSBpdHMgaW5kZXggb3IgdmFsdWUuXG4gICAqIEBwYXJhbSB7bnVtYmVyfHN0cmluZ30gdmFsdWUgLSBpZiBzdHJpbmcsIHRoZSBJdGVtJ3MgdmFsdWUuIGlmIG51bWJlciwgdGhlIEl0ZW0ncyBpbmRleC5cbiAgICogQHJldHVybiB7SXRlbX1cbiAgICogQGV4YW1wbGVcbiAgICogc2VsZWN0Qm94LmdldEl0ZW0oMCk7IC8vIGZpcnN0IGl0ZW1cbiAgICogc2VsZWN0Qm94LmdldEl0ZW0oJ3ZhbHVlJykgLy8gaXRlbSB3aGljaCBvZiB2YWx1ZSBpcyAndmFsdWUnXG4gICAqL1xuICBnZXRJdGVtKHZhbHVlKSB7XG4gICAgcmV0dXJuIHRoaXMuZHJvcGRvd24uZ2V0SXRlbSh2YWx1ZSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGFsbCB7QGxpbmsgSXRlbUdyb3VwIGl0ZW0gZ3JvdXBzfSB0aGF0IHBhc3MgdGhlIHRlc3QgaW1wbGVtZW50ZWQgYnkgdGhlIHByb3ZpZGVkIGZ1bmN0aW9uLlxuICAgKiBJZiBmaWx0ZXIgZnVuY3Rpb24gaXMgbm90IHBhc3NlZCwgaXQgcmV0dXJucyBhbGwgaXRlbSBncm91cHMuXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrIC0gY2FsbGJhY2sgZnVuY3Rpb24gdG8gZmlsdGVyIGl0ZW0gZ3JvdXBzXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBudW1iZXIgLSB0aGUgbnVtYmVyIG9mIGl0ZW1zIHRvIGZpbmQuIElmIGl0IGlzIG5vdCBwYXNzZWQsIGl0ZXJhdGUgYWxsIGl0ZW0gZ3JvdXBzLlxuICAgKiBAcmV0dXJuIHthcnJheTxJdGVtR3JvdXA+fVxuICAgKiBAZXhhbXBsZVxuICAgKiBzZWxlY3RCb3guZ2V0SXRlbUdyb3VwcygpOyAvLyBhbGwgaXRlbSBncm91cHNcbiAgICogc2VsZWN0Qm94LmdldEl0ZW1Hcm91cHMoaXRlbUdyb3VwID0+IHtcbiAgICogIHJldHVybiAhaXRlbUdyb3VwLmlzRGlzYWJsZWQoKTtcbiAgICogfSk7IC8vIGFsbCBlbmFibGVkIGl0ZW0gZ3JvdXBzXG4gICAqL1xuICBnZXRJdGVtR3JvdXBzKGNhbGxiYWNrLCBudW1iZXIpIHtcbiAgICByZXR1cm4gdGhpcy5kcm9wZG93bi5nZXRJdGVtR3JvdXBzKGNhbGxiYWNrLCBudW1iZXIpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhbiB7QGxpbmsgSXRlbUdyb3VwIGl0ZW0gZ3JvdXB9IGJ5IGl0cyBpbmRleC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGluZGV4IC0gZ3JvdXBJbmRleCBvZiB0aGUgSXRlbUdyb3VwXG4gICAqIEByZXR1cm4ge0l0ZW1Hcm91cH1cbiAgICogQGV4YW1wbGVcbiAgICogc2VsZWN0Qm94LmdldEl0ZW1Hcm91cCgwKTsgLy8gZmlyc3QgaXRlbSBncm91cFxuICAgKi9cbiAgZ2V0SXRlbUdyb3VwKGluZGV4KSB7XG4gICAgcmV0dXJuIHRoaXMuZHJvcGRvd24uZ2V0SXRlbUdyb3VwKGluZGV4KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXN0b3J5IGEgc2VsZWN0IGJveC5cbiAgICogQGV4YW1wbGVcbiAgICogc2VsZWN0Qm94LmRlc3Ryb3koKTtcbiAgICovXG4gIGRlc3Ryb3koKSB7XG4gICAgdGhpcy51bmJpbmRFdmVudHMoKTtcblxuICAgIHRoaXMuaW5wdXQuZGVzdHJveSgpO1xuICAgIHRoaXMuZHJvcGRvd24uZGVzdHJveSgpO1xuICAgIGlmICh0aGlzLnRoZW1lKSB7XG4gICAgICB0aGlzLnRoZW1lLmRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICByZW1vdmVFbGVtZW50KHRoaXMuZWwpO1xuICAgIHRoaXMuY29udGFpbmVyID0gdGhpcy5lbCA9IHRoaXMuaW5wdXQgPSB0aGlzLmRyb3Bkb3duID0gdGhpcy50aGVtZSA9IG51bGw7XG4gIH1cbn1cblxuQ3VzdG9tRXZlbnRzLm1peGluKFNlbGVjdEJveCk7XG5cbmV4cG9ydCBkZWZhdWx0IFNlbGVjdEJveDtcbiIsIi8qKlxuICogQGZpbGVvdmVydmlldyBUaGVtZVxuICogQGF1dGhvciBOSE4gRkUgRGV2ZWxvcG1lbnQgTGFiIDxkbF9qYXZhc2NyaXB0QG5obi5jb20+XG4gKi9cblxuaW1wb3J0IGZvckVhY2hPd25Qcm9wZXJ0aWVzIGZyb20gJ3R1aS1jb2RlLXNuaXBwZXQvY29sbGVjdGlvbi9mb3JFYWNoT3duUHJvcGVydGllcyc7XG5pbXBvcnQgcmVtb3ZlRWxlbWVudCBmcm9tICd0dWktY29kZS1zbmlwcGV0L2RvbVV0aWwvcmVtb3ZlRWxlbWVudCc7XG5pbXBvcnQgaXNBcnJheSBmcm9tICd0dWktY29kZS1zbmlwcGV0L3R5cGUvaXNBcnJheSc7XG5pbXBvcnQgaXNCb29sZWFuIGZyb20gJ3R1aS1jb2RlLXNuaXBwZXQvdHlwZS9pc0Jvb2xlYW4nO1xuaW1wb3J0IGlzU3RyaW5nIGZyb20gJ3R1aS1jb2RlLXNuaXBwZXQvdHlwZS9pc1N0cmluZyc7XG5pbXBvcnQgeyB0cmFuc2Zvcm0sIGdldFNlbGVjdG9yIH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBjbHMgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgYmFzZVRoZW1lIGZyb20gJy4vdGhlbWVDb25maWcnO1xuXG4vKipcbiAqIEBjbGFzc1xuICogQGlnbm9yZVxuICogQHBhcmFtIHtvYmplY3R9IGN1c3RvbVRoZW1lIC0gdGhlbWUgb2JqZWN0IGZvciBjdXN0b20gc3R5bGVcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR8c3RyaW5nfSBjb250YWluZXIgLSBjb250YWluZXIgZWxlbWVudCBvciBzZWxlY3RvclxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUaGVtZSB7XG4gIGNvbnN0cnVjdG9yKGN1c3RvbVRoZW1lLCBjb250YWluZXIpIHtcbiAgICB0aGlzLmNvbnRhaW5lclNlbGVjdG9yID0gZ2V0U2VsZWN0b3IoY29udGFpbmVyKTtcbiAgICB0aGlzLmNzc1N0cmluZyA9IHRoaXMuYnVpbGRBbGwodHJhbnNmb3JtKGN1c3RvbVRoZW1lKSk7XG4gICAgdGhpcy5zdHlsZUVsID0gdGhpcy5jcmVhdGVTdHlsZUVsZW1lbnQoKTtcblxuICAgIGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF0uYXBwZW5kQ2hpbGQodGhpcy5zdHlsZUVsKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBzdHlsZSBlbGVtZW50XG4gICAqIEByZXR1cm4ge0hUTUxFbGVtZW50fVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgY3JlYXRlU3R5bGVFbGVtZW50KCkge1xuICAgIGNvbnN0IHN0eWxlRWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xuICAgIHN0eWxlRWwudHlwZSA9ICd0ZXh0L2Nzcyc7XG5cbiAgICBpZiAoc3R5bGVFbC5zdHlsZVNoZWV0KSB7XG4gICAgICBzdHlsZUVsLnN0eWxlU2hlZXQuY3NzVGV4dCA9IHRoaXMuY3NzU3RyaW5nO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdHlsZUVsLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHRoaXMuY3NzU3RyaW5nKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0eWxlRWw7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGQgY3NzIHN0cmluZ3MgZm9yIElucHV0LCBEcm9wZG93biwgSXRlbUdyb3VwLCBhbmQgSXRlbS5cbiAgICogQHBhcmFtIHtvYmplY3R9IHRoZW1lIC0gdGhlbWUgb2JqZWN0XG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICogQHByaXZhdGVcbiAgICovXG4gIGJ1aWxkQWxsKHRoZW1lKSB7XG4gICAgY29uc3QgZXhjbHVkZSA9IHsgYm9yZGVyOiAnJywgYmFja2dyb3VuZDogJycgfTtcblxuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmJ1aWxkSW5wdXQoeyAuLi50aGVtZS5jb21tb24sIC4uLnRoZW1lLmlucHV0IH0pICtcbiAgICAgIHRoaXMuYnVpbGREcm9wZG93bih7IC4uLnRoZW1lLmNvbW1vbiwgYm9yZGVyVG9wOiAnMCcsIC4uLnRoZW1lLmRyb3Bkb3duLCBoZWlnaHQ6ICcnIH0pICtcbiAgICAgIHRoaXMuYnVpbGRJdGVtR3JvdXAoXG4gICAgICAgIHRoZW1lLml0ZW1Hcm91cFxuICAgICAgICAgID8geyAuLi50aGVtZS5jb21tb24sIC4uLmV4Y2x1ZGUsIC4uLnRoZW1lLml0ZW1Hcm91cC5sYWJlbCB9XG4gICAgICAgICAgOiB7IC4uLnRoZW1lLmNvbW1vbiwgLi4uZXhjbHVkZSB9XG4gICAgICApICtcbiAgICAgIHRoaXMuYnVpbGRJdGVtKFxuICAgICAgICB0aGVtZS5pdGVtR3JvdXBcbiAgICAgICAgICA/IHsgLi4udGhlbWUuY29tbW9uLCAuLi5leGNsdWRlLCAuLi50aGVtZS5pdGVtLCBpbkl0ZW1Hcm91cDogdGhlbWUuaXRlbUdyb3VwLml0ZW1zIH1cbiAgICAgICAgICA6IHsgLi4udGhlbWUuY29tbW9uLCAuLi5leGNsdWRlLCAuLi50aGVtZS5pdGVtIH1cbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIGNzcyBzdHJpbmdzIGZvciBJbnB1dFxuICAgKiBAcGFyYW0ge29iamVjdH0gdGhlbWUgLSB0aGVtZSBvYmplY3RcbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgYnVpbGRJbnB1dCh0aGVtZSkge1xuICAgIHRoZW1lLnBsYWNlaG9sZGVyID0ge307XG4gICAgaWYgKHRoZW1lLmhlaWdodCkge1xuICAgICAgdGhlbWUucGxhY2Vob2xkZXIubGluZUhlaWdodCA9IHRoZW1lLmhlaWdodDtcbiAgICB9XG4gICAgaWYgKGlzQm9vbGVhbih0aGVtZS5zaG93SWNvbikgJiYgIXRoZW1lLnNob3dJY29uKSB7XG4gICAgICB0aGVtZS5pY29uID0geyBkaXNwbGF5OiAnbm9uZScgfTtcbiAgICAgIHRoZW1lLnBsYWNlaG9sZGVyLndpZHRoID0gJzEwMCUnO1xuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmJ1aWxkQ3NzU3RyaW5nKGNscy5JTlBVVCwgdGhlbWUpICtcbiAgICAgIHRoaXMuYnVpbGRDc3NTdHJpbmcoW2Nscy5JTlBVVCwgY2xzLk9QRU5dLCB0aGVtZS5vcGVuKSArXG4gICAgICB0aGlzLmJ1aWxkQ3NzU3RyaW5nKFtjbHMuSU5QVVQsIGNscy5ESVNBQkxFRF0sIHRoZW1lLmRpc2FibGVkKSArXG4gICAgICB0aGlzLmJ1aWxkQ3NzU3RyaW5nKGNscy5QTEFDRUhPTERFUiwgdGhlbWUucGxhY2Vob2xkZXIpICtcbiAgICAgIHRoaXMuYnVpbGRDc3NTdHJpbmcoY2xzLklDT04sIHRoZW1lLmljb24pXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCBjc3Mgc3RyaW5ncyBmb3IgRHJvcGRvd25cbiAgICogQHBhcmFtIHtvYmplY3R9IHRoZW1lIC0gdGhlbWUgb2JqZWN0XG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICogQHByaXZhdGVcbiAgICovXG4gIGJ1aWxkRHJvcGRvd24odGhlbWUpIHtcbiAgICByZXR1cm4gdGhpcy5idWlsZENzc1N0cmluZyhjbHMuRFJPUERPV04sIHRoZW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCBjc3Mgc3RyaW5ncyBmb3IgSXRlbUdyb3VwXG4gICAqIEBwYXJhbSB7b2JqZWN0fSB0aGVtZSAtIHRoZW1lIG9iamVjdFxuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBidWlsZEl0ZW1Hcm91cCh0aGVtZSkge1xuICAgIGlmICh0aGVtZS5oZWlnaHQpIHtcbiAgICAgIHRoZW1lLmxpbmVIZWlnaHQgPSB0aGVtZS5oZWlnaHQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuYnVpbGRDc3NTdHJpbmcoY2xzLklURU1fR1JPVVBfTEFCRUwsIHRoZW1lKSArXG4gICAgICB0aGlzLmJ1aWxkQ3NzU3RyaW5nKFtjbHMuSVRFTV9HUk9VUF9MQUJFTCwgY2xzLkRJU0FCTEVEXSwgdGhlbWUuZGlzYWJsZWQpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCBjc3Mgc3RyaW5ncyBmb3IgSXRlbVxuICAgKiBAcGFyYW0ge29iamVjdH0gdGhlbWUgLSB0aGVtZSBvYmplY3RcbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgYnVpbGRJdGVtKHRoZW1lKSB7XG4gICAgaWYgKHRoZW1lLmhlaWdodCkge1xuICAgICAgdGhlbWUubGluZUhlaWdodCA9IHRoZW1lLmhlaWdodDtcbiAgICB9XG4gICAgaWYgKHRoZW1lLnNlbGVjdGVkKSB7XG4gICAgICBjb25zdCBiYXNlID0gdHJhbnNmb3JtKGJhc2VUaGVtZSk7XG5cbiAgICAgIHRoZW1lLnNlbGVjdGVkID0geyAuLi5iYXNlLml0ZW0uc2VsZWN0ZWQsIC4uLnRoZW1lLnNlbGVjdGVkIH07XG4gICAgICB0aGVtZS5kaXNhYmxlZCA9IHsgLi4uYmFzZS5pdGVtLmRpc2FibGVkLCAuLi50aGVtZS5kaXNhYmxlZCB9O1xuICAgICAgdGhlbWUuaGlnaGxpZ2h0ZWQgPSB7IC4uLmJhc2UuaXRlbS5oaWdobGlnaHRlZCwgLi4udGhlbWUuaGlnaGxpZ2h0ZWQgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5idWlsZENzc1N0cmluZyhjbHMuSVRFTSwgdGhlbWUpICtcbiAgICAgIHRoaXMuYnVpbGRDc3NTdHJpbmcoW2Nscy5JVEVNLCBjbHMuU0VMRUNURURdLCB0aGVtZS5zZWxlY3RlZCkgK1xuICAgICAgdGhpcy5idWlsZENzc1N0cmluZyhbY2xzLklURU0sIGNscy5ESVNBQkxFRF0sIHRoZW1lLmRpc2FibGVkKSArXG4gICAgICB0aGlzLmJ1aWxkQ3NzU3RyaW5nKFtjbHMuSVRFTSwgY2xzLkhJR0hMSUdIVF0sIHRoZW1lLmhpZ2hsaWdodGVkKSArXG4gICAgICB0aGlzLmJ1aWxkQ3NzU3RyaW5nKGAke2Nscy5JVEVNX0dST1VQfT4uJHtjbHMuSVRFTX1gLCB0aGVtZS5pbkl0ZW1Hcm91cClcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIGNzcyBzdHJpbmdzXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjbGFzc05hbWUgLSBjbGFzc05hbWVcbiAgICogQHBhcmFtIHtvYmplY3R9IHRoZW1lIC0gdGhlbWUgb2JqZWN0XG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICogQHByaXZhdGVcbiAgICovXG4gIGJ1aWxkQ3NzU3RyaW5nKGNsYXNzTmFtZSwgdGhlbWUpIHtcbiAgICBpZiAoaXNBcnJheShjbGFzc05hbWUpKSB7XG4gICAgICBjbGFzc05hbWUgPSBjbGFzc05hbWUuam9pbignLicpO1xuICAgIH1cbiAgICBjbGFzc05hbWUgPSBgLiR7Y2xhc3NOYW1lfWA7XG5cbiAgICBsZXQgY3NzU3RyaW5nID0gJyc7XG4gICAgZm9yRWFjaE93blByb3BlcnRpZXModGhlbWUsICh2YWx1ZSwga2V5KSA9PiB7XG4gICAgICBpZiAoaXNTdHJpbmcodmFsdWUpICYmIHZhbHVlKSB7XG4gICAgICAgIGtleSA9IGtleS5yZXBsYWNlKC8oW2EtejAtOV0pKFtBLVpdKS9nLCAnJDEtJDInKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBjc3NTdHJpbmcgKz0gYCR7a2V5fToke3ZhbHVlfTtgO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGNzc1N0cmluZyA/IGAke3RoaXMuY29udGFpbmVyU2VsZWN0b3J9ICR7Y2xhc3NOYW1lfXske2Nzc1N0cmluZ319YCA6ICcnO1xuICB9XG5cbiAgLyoqXG4gICAqIERlc3RvcnkgYSB0aGVtZVxuICAgKi9cbiAgZGVzdHJveSgpIHtcbiAgICByZW1vdmVFbGVtZW50KHRoaXMuc3R5bGVFbCk7XG4gICAgdGhpcy5zdHlsZUVsID0gbnVsbDtcbiAgfVxufVxuIiwiLyoqXG4gKiBAZmlsZW92ZXJ2aWV3IFRoZW1lIGNvbmZpZ3VyYXRpb25cbiAqIEBhdXRob3IgTkhOIEZFIERldmVsb3BtZW50IExhYiA8ZGxfamF2YXNjcmlwdEBuaG4uY29tPlxuICovXG5cbi8qKlxuICogVGhlbWUgY29uZmlndXJhdGlvbi5cbiAqIFwiY29tbW9uXCIgcHJlZml4IGlzIGZvciB0aGUgZW50aXJlIHNlbGVjdCBib3guIEl0cyBwcm9wZXJ0aWVzIGFyZSBvdmVycmlkZW4gYnkgXCJpbnB1dFwiLCBcImRyb3Bkb3duXCIsIFwiaXRlbUdyb3VwXCIsIGFuZCBcIml0ZW1cIi5cbiAqIFRoZSBleGFtcGxlIHVzaW5nIHRoZW1lIGNhbiBiZSBmb3VuZCB7QGxpbmsgdHV0b3JpYWwtZXhhbXBsZTAyLXRoZW1lIGhlcmV9LlxuICogQHR5cGVkZWYge29iamVjdH0gdGhlbWVDb25maWdcbiAqIEBleGFtcGxlXG4gKiBjb25zdCB0aGVtZUNvbmZpZyA9IHtcbiAqICAgJ2NvbW1vbi5ib3JkZXInOiAnMXB4IHNvbGlkICNkZGQnLCAvLyBib3JkZXIgZm9yIGlucHV0IGFuZCBkcm9wZG93biAobm90IGl0ZW1Hcm91cCBhbmQgaXRlbSlcbiAqICAgJ2NvbW1vbi5iYWNrZ3JvdW5kJzogJyNmZmYnLFxuICogICAnY29tbW9uLmNvbG9yJzogJyMzMzMnLFxuICogICAnY29tbW9uLndpZHRoJzogJzEwMCUnLFxuICogICAnY29tbW9uLmhlaWdodCc6ICcyOXB4JywgLy8gaGVpZ2h0IGZvciBpdGVtIGFuZCBpdGVtR3JvdXAgbGFiZWwgKG5vdCBlbnRpcmUgc2VsZWN0IGJveClcbiAqXG4gKiAgICdjb21tb24uZGlzYWJsZWQuYmFja2dyb3VuZCc6ICcjZjlmOWY5JyxcbiAqICAgJ2NvbW1vbi5kaXNhYmxlZC5jb2xvcic6ICdjOGM4YzgnLFxuICpcbiAqICAgLy8gSW5wdXRcbiAqICAgJ2lucHV0LmJvcmRlcic6ICcxcHggc29saWQgI2RkZCcsXG4gKiAgICdpbnB1dC5ib3JkZXJCb3R0b20nOiAnJyxcbiAqICAgJ2lucHV0LmJhY2tncm91bmQnOiAnaW5oZXJpdCcsXG4gKiAgICdpbnB1dC5jb2xvcic6ICcjMzMzJyxcbiAqICAgJ2lucHV0LndpZHRoJzogJzEwMCUnLFxuICogICAnaW5wdXQuaGVpZ2h0JzogJzI5cHgnLFxuICpcbiAqICAgLy8gSW5wdXQgd2hlbiBkcm9wZG93biBpcyBvcGVuXG4gKiAgICdpbnB1dC5vcGVuLmJvcmRlcic6ICcxcHggc29saWQgI2FhYScsXG4gKiAgICdpbnB1dC5vcGVuLmJhY2tncm91bmQnOiAnaW5oZXJpdCcsXG4gKiAgICdpbnB1dC5vcGVuLmNvbG9yJzogJyMzMzMnLFxuICpcbiAqICAgLy8gSW5wdXQgd2hlbiBzZWxlY3Rib3ggaXMgZGlzYWJsZWRcbiAqICAgJ2lucHV0LmRpc2FibGVkLmJvcmRlcic6ICcxcHggc29saWQgI2FhYScsXG4gKiAgICdpbnB1dC5kaXNhYmxlZC5iYWNrZ3JvdW5kJzogJyNmOWY5ZjknLFxuICogICAnaW5wdXQuZGlzYWJsZWQuY29sb3InOiAnI2M4YzhjOCcsXG4gKlxuICogICAvLyBEcm9wZG93blxuICogICAnZHJvcGRvd24uYm9yZGVyJzogJzFweCBzb2xpZCAjYWFhJyxcbiAqICAgJ2Ryb3Bkb3duLmJvcmRlclRvcCc6ICcwJyxcbiAqICAgJ2Ryb3Bkb3duLmJhY2tncm91bmQnOiAnaW5oZXJpdCcsXG4gKiAgICdkcm9wZG93bi53aWR0aCc6ICcxMDAlJyxcbiAqICAgJ2Ryb3Bkb3duLm1heEhlaWdodCc6ICcnLFxuICpcbiAqICAgLy8gSXRlbUdyb3VwJ3MgaXRlbXNcbiAqICAgLy8gaWYgeW91IHdhbnQgdG8gc2V0IHRoZSBzYW1lIHBhZGRpbmcgdmFsdWUgYXMgdGhlIGl0ZW1Hcm91cC5sYWJlbCwgc2V0IHRvICc4cHgnLlxuICogICAnaXRlbUdyb3VwLml0ZW1zLnBhZGRpbmdMZWZ0JzogJzIwcHgnLFxuICpcbiAqICAgLy8gSXRlbUdyb3VwJ3MgbGFiZWxcbiAqICAgJ2l0ZW1Hcm91cC5sYWJlbC5ib3JkZXInOiAnMCcsXG4gKiAgICdpdGVtR3JvdXAubGFiZWwuYmFja2dyb3VuZCc6ICdpbmhlcml0JyxcbiAqICAgJ2l0ZW1Hcm91cC5sYWJlbC5jb2xvcic6ICcjMzMzJyxcbiAqICAgJ2l0ZW1Hcm91cC5sYWJlbC5mb250V2VpZ2h0JzogJ2JvbGQnLFxuICogICAnaXRlbUdyb3VwLmxhYmVsLmhlaWdodCc6ICcyOXB4JyxcbiAqXG4gKiAgIC8vIGRpc2FibGVkIEl0ZW1Hcm91cCdzIGxhYmVsXG4gKiAgICdpdGVtR3JvdXAubGFiZWwuZGlzYWJsZWQuYm9yZGVyJzogJzAnLFxuICogICAnaXRlbUdyb3VwLmxhYmVsLmRpc2FibGVkLmJhY2tncm91bmQnOiAnaW5oZXJpdCcsXG4gKiAgICdpdGVtR3JvdXAubGFiZWwuZGlzYWJsZWQuY29sb3InOiAnIzMzMycsXG4gKlxuICogICAvLyBJdGVtXG4gKiAgICdpdGVtLmJvcmRlcic6ICcwJyxcbiAqICAgJ2l0ZW0uYmFja2dyb3VuZCc6ICdpbmhlcml0JyxcbiAqICAgJ2l0ZW0uY29sb3InOiAnIzMzMycsXG4gKiAgICdpdGVtLmhlaWdodCc6ICcyOXB4JyxcbiAqXG4gKiAgIC8vIHNlbGVjdGVkIEl0ZW1cbiAqICAgJ2l0ZW0uc2VsZWN0ZWQuYm9yZGVyJzogJzAnLFxuICogICAnaXRlbS5zZWxlY3RlZC5iYWNrZ3JvdW5kJzogJyNmNGY0ZjQnLFxuICogICAnaXRlbS5zZWxlY3RlZC5jb2xvcic6ICcjMzMzJyxcbiAqXG4gKiAgIC8vIGRpc2FibGVkIEl0ZW1cbiAqICAgJ2l0ZW0uZGlzYWJsZWQuYm9yZGVyJzogJzAnLFxuICogICAnaXRlbS5kaXNhYmxlZC5iYWNrZ3JvdW5kJzogJyNmOWY5ZjknLFxuICogICAnaXRlbS5kaXNhYmxlZC5jb2xvcic6ICcjYzhjOGM4JyxcbiAqXG4gKiAgIC8vIGhpZ2hsaWdodGVkIEl0ZW1cbiAqICAgJ2l0ZW0uaGlnaGxpZ2h0ZWQuYm9yZGVyJzogJzAnLFxuICogICAnaXRlbS5oaWdobGlnaHRlZC5iYWNrZ3JvdW5kJzogJyNlNWY2ZmYnLFxuICogICAnaXRlbS5oaWdobGlnaHRlZC5jb2xvcic6ICcjMzMzJ1xuICogfTtcbiAqL1xuZXhwb3J0IGRlZmF1bHQge1xuICAnY29tbW9uLmJvcmRlcic6ICcxcHggc29saWQgI2RkZCcsIC8vIGJvcmRlciBmb3IgaW5wdXQgYW5kIGRyb3Bkb3duIChub3QgaXRlbUdyb3VwIGFuZCBpdGVtKVxuICAnY29tbW9uLmJhY2tncm91bmQnOiAnI2ZmZicsXG4gICdjb21tb24uY29sb3InOiAnIzMzMycsXG4gICdjb21tb24ud2lkdGgnOiAnMTAwJScsXG4gICdjb21tb24uaGVpZ2h0JzogJzI5cHgnLCAvLyBoZWlnaHQgZm9yIGl0ZW0gYW5kIGl0ZW1Hcm91cCBsYWJlbCAobm90IGVudGlyZSBzZWxlY3QgYm94KVxuXG4gICdjb21tb24uZGlzYWJsZWQuYmFja2dyb3VuZCc6ICcjZjlmOWY5JyxcbiAgJ2NvbW1vbi5kaXNhYmxlZC5jb2xvcic6ICdjOGM4YzgnLFxuXG4gIC8vIElucHV0XG4gICdpbnB1dC5ib3JkZXInOiAnMXB4IHNvbGlkICNkZGQnLFxuICAnaW5wdXQuYm9yZGVyQm90dG9tJzogJycsXG4gICdpbnB1dC5iYWNrZ3JvdW5kJzogJ2luaGVyaXQnLFxuICAnaW5wdXQuY29sb3InOiAnIzMzMycsXG4gICdpbnB1dC53aWR0aCc6ICcxMDAlJyxcbiAgJ2lucHV0LmhlaWdodCc6ICcyOXB4JyxcblxuICAvLyBJbnB1dCB3aGVuIGRyb3Bkb3duIGlzIG9wZW5cbiAgJ2lucHV0Lm9wZW4uYm9yZGVyJzogJzFweCBzb2xpZCAjYWFhJyxcbiAgJ2lucHV0Lm9wZW4uYmFja2dyb3VuZCc6ICdpbmhlcml0JyxcbiAgJ2lucHV0Lm9wZW4uY29sb3InOiAnIzMzMycsXG5cbiAgLy8gSW5wdXQgd2hlbiBzZWxlY3Rib3ggaXMgZGlzYWJsZWRcbiAgJ2lucHV0LmRpc2FibGVkLmJvcmRlcic6ICcxcHggc29saWQgI2FhYScsXG4gICdpbnB1dC5kaXNhYmxlZC5iYWNrZ3JvdW5kJzogJyNmOWY5ZjknLFxuICAnaW5wdXQuZGlzYWJsZWQuY29sb3InOiAnI2M4YzhjOCcsXG5cbiAgLy8gRHJvcGRvd25cbiAgJ2Ryb3Bkb3duLmJvcmRlcic6ICcxcHggc29saWQgI2FhYScsXG4gICdkcm9wZG93bi5ib3JkZXJUb3AnOiAnMCcsXG4gICdkcm9wZG93bi5iYWNrZ3JvdW5kJzogJ2luaGVyaXQnLFxuICAnZHJvcGRvd24ud2lkdGgnOiAnMTAwJScsXG4gICdkcm9wZG93bi5tYXhIZWlnaHQnOiAnJyxcblxuICAvLyBJdGVtR3JvdXAncyBpdGVtc1xuICAnaXRlbUdyb3VwLml0ZW1zLnBhZGRpbmdMZWZ0JzogJzIwcHgnLFxuXG4gIC8vIEl0ZW1Hcm91cCdzIGxhYmVsXG4gICdpdGVtR3JvdXAubGFiZWwuYm9yZGVyJzogJzAnLFxuICAnaXRlbUdyb3VwLmxhYmVsLmJhY2tncm91bmQnOiAnaW5oZXJpdCcsXG4gICdpdGVtR3JvdXAubGFiZWwuY29sb3InOiAnIzMzMycsXG4gICdpdGVtR3JvdXAubGFiZWwuZm9udFdlaWdodCc6ICdib2xkJyxcbiAgJ2l0ZW1Hcm91cC5sYWJlbC5oZWlnaHQnOiAnMjlweCcsXG5cbiAgLy8gZGlzYWJsZWQgSXRlbUdyb3VwJ3MgbGFiZWxcbiAgJ2l0ZW1Hcm91cC5sYWJlbC5kaXNhYmxlZC5ib3JkZXInOiAnMCcsXG4gICdpdGVtR3JvdXAubGFiZWwuZGlzYWJsZWQuYmFja2dyb3VuZCc6ICdpbmhlcml0JyxcbiAgJ2l0ZW1Hcm91cC5sYWJlbC5kaXNhYmxlZC5jb2xvcic6ICcjMzMzJyxcblxuICAvLyBJdGVtXG4gICdpdGVtLmJvcmRlcic6ICcwJyxcbiAgJ2l0ZW0uYmFja2dyb3VuZCc6ICdpbmhlcml0JyxcbiAgJ2l0ZW0uY29sb3InOiAnIzMzMycsXG4gICdpdGVtLmhlaWdodCc6ICcyOXB4JyxcblxuICAvLyBzZWxlY3RlZCBJdGVtXG4gICdpdGVtLnNlbGVjdGVkLmJvcmRlcic6ICcwJyxcbiAgJ2l0ZW0uc2VsZWN0ZWQuYmFja2dyb3VuZCc6ICcjZjRmNGY0JyxcbiAgJ2l0ZW0uc2VsZWN0ZWQuY29sb3InOiAnIzMzMycsXG5cbiAgLy8gZGlzYWJsZWQgSXRlbVxuICAnaXRlbS5kaXNhYmxlZC5ib3JkZXInOiAnMCcsXG4gICdpdGVtLmRpc2FibGVkLmJhY2tncm91bmQnOiAnI2Y5ZjlmOScsXG4gICdpdGVtLmRpc2FibGVkLmNvbG9yJzogJyNjOGM4YzgnLFxuXG4gIC8vIGhpZ2hsaWdodGVkIEl0ZW1cbiAgJ2l0ZW0uaGlnaGxpZ2h0ZWQuYm9yZGVyJzogJzAnLFxuICAnaXRlbS5oaWdobGlnaHRlZC5iYWNrZ3JvdW5kJzogJyNlNWY2ZmYnLFxuICAnaXRlbS5oaWdobGlnaHRlZC5jb2xvcic6ICcjMzMzJ1xufTtcbiIsIi8qKlxuICogQGZpbGVvdmVydmlldyBVdGlsaXR5IGZ1bmN0aW9uc1xuICogQGF1dGhvciBOSE4uIEZFIGRldiB0ZWFtLjxkbF9qYXZhc2NyaXB0QG5obi5jb20+XG4gKi9cblxuaW1wb3J0IGZvckVhY2hPd25Qcm9wZXJ0aWVzIGZyb20gJ3R1aS1jb2RlLXNuaXBwZXQvY29sbGVjdGlvbi9mb3JFYWNoT3duUHJvcGVydGllcyc7XG5pbXBvcnQgaXNTdHJpbmcgZnJvbSAndHVpLWNvZGUtc25pcHBldC90eXBlL2lzU3RyaW5nJztcblxuLyoqXG4gKiBUcmFuc2Zvcm0gYW4gb2JqZWN0IHVzaW5nIGRvdCBub3RhdGlvblxuICogQHBhcmFtIHtvYmplY3R9IG9iaiAtIG9iamVjdCB0byB0cmFuc2Zvcm1cbiAqIEByZXR1cm4ge29iamVjdH1cbiAqL1xuZXhwb3J0IGNvbnN0IHRyYW5zZm9ybSA9IG9iaiA9PiB7XG4gIGNvbnN0IHJlc3VsdCA9IHt9O1xuXG4gIGZvckVhY2hPd25Qcm9wZXJ0aWVzKG9iaiwgKHZhbHVlLCBwcm9wKSA9PiB7XG4gICAgY29uc3Qga2V5cyA9IHByb3Auc3BsaXQoJy4nKTtcbiAgICBsZXQgY3VyciA9IHJlc3VsdDtcblxuICAgIGtleXMuZm9yRWFjaCgoa2V5LCBpbmRleCkgPT4ge1xuICAgICAgaWYgKGluZGV4ID09PSBrZXlzLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgY3VycltrZXldID0gdmFsdWU7XG4gICAgICB9IGVsc2UgaWYgKCFjdXJyW2tleV0pIHtcbiAgICAgICAgY3VycltrZXldID0ge307XG4gICAgICB9XG4gICAgICBjdXJyID0gY3VycltrZXldO1xuICAgIH0pO1xuICB9KTtcblxuICByZXR1cm4gcmVzdWx0O1xufTtcblxuLyoqXG4gKiBDcmVhdGUgYSBIVE1MIGVsZW1lbnRcbiAqIEBwYXJhbSB7c3RyaW5nfSB0YWdOYW1lIC0gdGFnIG5hbWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb250ZW50IC0gY29udGVudCBpbiB0aGUgZWxlbWVudFxuICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnMgLSBvdGhlciBwcm9wZXJ0aWVzIGZvciB0aGUgZWxlbWVudFxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gY29udGFpbmVyIC0gcGFyZW50IGVsZW1lbnQgZm9yIHRoZSBlbGVtZW50XG4gKiBAcmV0dXJuIHtIVE1MRWxlbWVudH1cbiAqL1xuZXhwb3J0IGNvbnN0IGNyZWF0ZUVsZW1lbnQgPSAodGFnTmFtZSwgY29udGVudCwgb3B0aW9ucywgY29udGFpbmVyKSA9PiB7XG4gIGNvbnN0IGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWdOYW1lKTtcblxuICBpZiAoY29udGVudCkge1xuICAgIGVsLmlubmVyVGV4dCA9IGNvbnRlbnQ7XG4gIH1cblxuICBmb3JFYWNoT3duUHJvcGVydGllcyhvcHRpb25zLCAodmFsdWUsIGtleSkgPT4ge1xuICAgIGlmIChrZXkuaW5kZXhPZignZGF0YS0nKSA+IC0xKSB7XG4gICAgICBlbC5zZXRBdHRyaWJ1dGUoa2V5LCB2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVsW2tleV0gPSB2YWx1ZTtcbiAgICB9XG4gIH0pO1xuXG4gIGlmIChjb250YWluZXIpIHtcbiAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQoZWwpO1xuICB9XG5cbiAgcmV0dXJuIGVsO1xufTtcblxuLyoqXG4gKiBHZXQgc2VsZWN0b3JzIGZvciBhbiBlbGVtZW50XG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbCAtIGVsZW1lbnRcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGNvbnN0IGdldFNlbGVjdG9yID0gZWwgPT4ge1xuICBpZiAoaXNTdHJpbmcoZWwpKSB7XG4gICAgcmV0dXJuIGVsO1xuICB9XG5cbiAgaWYgKGVsLmlkKSB7XG4gICAgcmV0dXJuIGAjJHtlbC5pZH1gO1xuICB9XG5cbiAgY29uc3QgY2xhc3NOYW1lID0gYC4ke2VsLmNsYXNzTmFtZS5yZXBsYWNlKC9cXHMrL2csICcuJyl9YDtcbiAgaWYgKGNsYXNzTmFtZSkge1xuICAgIGNvbnN0IGVsZW1zID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChjbGFzc05hbWUpO1xuXG4gICAgaWYgKGVsZW1zLmxlbmd0aCA9PT0gMSkge1xuICAgICAgcmV0dXJuIGNsYXNzTmFtZTtcbiAgICB9XG4gIH1cblxuICBjb25zdCB0YWdOYW1lID0gZWwudGFnTmFtZS50b0xvd2VyQ2FzZSgpO1xuXG4gIHJldHVybiBgJHt0YWdOYW1lfSR7Y2xhc3NOYW1lfWA7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==
|
||
|
||
/***/ }),
|
||
/* 73 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
// extracted by mini-css-extract-plugin
|
||
|
||
/***/ }),
|
||
/* 74 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.DatePickerEditor = void 0;
|
||
var tslib_1 = __webpack_require__(1);
|
||
var tui_date_picker_1 = tslib_1.__importDefault(__webpack_require__(43));
|
||
var dom_1 = __webpack_require__(2);
|
||
var common_1 = __webpack_require__(0);
|
||
var dom_2 = __webpack_require__(34);
|
||
var DatePickerEditor = /** @class */ (function () {
|
||
function DatePickerEditor(props) {
|
||
var _this = this;
|
||
this.initLayerPos = null;
|
||
var usageStatistics = props.grid.usageStatistics, columnInfo = props.columnInfo;
|
||
var value = String(common_1.isNil(props.value) ? '' : props.value);
|
||
var el = document.createElement('div');
|
||
el.className = dom_1.cls('layer-editing-inner');
|
||
this.el = el;
|
||
this.inputEl = this.createInputElement();
|
||
var datepickerInputContainer = document.createElement('div');
|
||
datepickerInputContainer.className = dom_1.cls('datepicker-input-container');
|
||
datepickerInputContainer.appendChild(this.inputEl);
|
||
this.el.appendChild(datepickerInputContainer);
|
||
var layer = this.createLayer();
|
||
this.layer = layer;
|
||
var options = tslib_1.__assign({ showIcon: true }, columnInfo.editor.options);
|
||
if (options.showIcon) {
|
||
var icon = this.createIcon();
|
||
this.iconEl = icon;
|
||
this.inputEl.className = dom_1.cls('datepicker-input');
|
||
datepickerInputContainer.appendChild(icon);
|
||
}
|
||
var date;
|
||
if (!options.format) {
|
||
options.format = 'yyyy-MM-dd';
|
||
}
|
||
if (common_1.isNumber(value) || common_1.isString(value)) {
|
||
date = new Date(value);
|
||
}
|
||
var defaultOptions = {
|
||
date: date,
|
||
type: 'date',
|
||
input: {
|
||
element: this.inputEl,
|
||
format: options.format,
|
||
},
|
||
usageStatistics: usageStatistics,
|
||
};
|
||
this.datePickerEl = new tui_date_picker_1.default(layer, common_1.deepMergedCopy(defaultOptions, options));
|
||
this.datePickerEl.on('close', function () { return _this.focus(); });
|
||
}
|
||
DatePickerEditor.prototype.createInputElement = function () {
|
||
var inputEl = document.createElement('input');
|
||
inputEl.className = dom_1.cls('content-text');
|
||
inputEl.type = 'text';
|
||
return inputEl;
|
||
};
|
||
DatePickerEditor.prototype.createLayer = function () {
|
||
var layer = document.createElement('div');
|
||
layer.className = dom_1.cls('editor-datepicker-layer');
|
||
// To hide the initial layer which is having the position which is not calculated properly
|
||
dom_2.setOpacity(layer, 0);
|
||
return layer;
|
||
};
|
||
DatePickerEditor.prototype.openDatePicker = function () {
|
||
this.datePickerEl.open();
|
||
};
|
||
DatePickerEditor.prototype.createIcon = function () {
|
||
var _this = this;
|
||
var icon = document.createElement('i');
|
||
icon.className = dom_1.cls('date-icon');
|
||
icon.addEventListener('click', function () { return _this.openDatePicker(); });
|
||
return icon;
|
||
};
|
||
DatePickerEditor.prototype.focus = function () {
|
||
this.inputEl.focus();
|
||
};
|
||
DatePickerEditor.prototype.moveDropdownLayer = function (gridRect) {
|
||
if (this.initLayerPos) {
|
||
dom_2.moveLayer(this.layer, this.initLayerPos, gridRect);
|
||
}
|
||
};
|
||
DatePickerEditor.prototype.getElement = function () {
|
||
return this.el;
|
||
};
|
||
DatePickerEditor.prototype.getValue = function () {
|
||
return this.inputEl.value;
|
||
};
|
||
DatePickerEditor.prototype.mounted = function () {
|
||
// To prevent wrong stacked z-index context, layer append to grid container
|
||
dom_2.getContainerElement(this.el).appendChild(this.layer);
|
||
this.inputEl.select();
|
||
this.datePickerEl.open();
|
||
// `this.layer.firstElementChild` is real datePicker layer(it is need to get total height)
|
||
dom_2.setLayerPosition(this.el, this.layer, this.layer.firstElementChild, true);
|
||
this.initLayerPos = {
|
||
top: common_1.pixelToNumber(this.layer.style.top),
|
||
left: common_1.pixelToNumber(this.layer.style.left),
|
||
};
|
||
// To show the layer which has appropriate position
|
||
dom_2.setOpacity(this.layer, 1);
|
||
};
|
||
DatePickerEditor.prototype.beforeDestroy = function () {
|
||
if (this.iconEl) {
|
||
this.iconEl.removeEventListener('click', this.openDatePicker);
|
||
}
|
||
this.datePickerEl.destroy();
|
||
dom_2.getContainerElement(this.el).removeChild(this.layer);
|
||
this.initLayerPos = null;
|
||
};
|
||
return DatePickerEditor;
|
||
}());
|
||
exports.DatePickerEditor = DatePickerEditor;
|
||
|
||
|
||
/***/ }),
|
||
/* 75 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.RowHeaderInputRenderer = void 0;
|
||
var dom_1 = __webpack_require__(2);
|
||
var RowHeaderInputRenderer = /** @class */ (function () {
|
||
function RowHeaderInputRenderer(props) {
|
||
var el = document.createElement('div');
|
||
var input = document.createElement('input');
|
||
var grid = props.grid, rowKey = props.rowKey, disabled = props.disabled;
|
||
el.className = dom_1.cls('row-header-checkbox');
|
||
input.type = 'checkbox';
|
||
input.name = '_checked';
|
||
input.disabled = disabled;
|
||
input.addEventListener('click', function (ev) {
|
||
if (ev.shiftKey) {
|
||
grid[input.checked ? 'checkBetween' : 'uncheckBetween'](rowKey);
|
||
return;
|
||
}
|
||
grid[input.checked ? 'check' : 'uncheck'](rowKey);
|
||
});
|
||
el.appendChild(input);
|
||
this.el = el;
|
||
this.input = input;
|
||
this.render(props);
|
||
}
|
||
RowHeaderInputRenderer.prototype.getElement = function () {
|
||
return this.el;
|
||
};
|
||
RowHeaderInputRenderer.prototype.render = function (props) {
|
||
var value = props.value, disabled = props.disabled;
|
||
this.input.checked = Boolean(value);
|
||
this.input.disabled = disabled;
|
||
};
|
||
return RowHeaderInputRenderer;
|
||
}());
|
||
exports.RowHeaderInputRenderer = RowHeaderInputRenderer;
|
||
|
||
|
||
/***/ }),
|
||
/* 76 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.RowHeaderDraggableRenderer = void 0;
|
||
var dom_1 = __webpack_require__(2);
|
||
var ROW_COUNT = 3;
|
||
var COL_COUNT = 3;
|
||
var RowHeaderDraggableRenderer = /** @class */ (function () {
|
||
function RowHeaderDraggableRenderer() {
|
||
var el = document.createElement('div');
|
||
el.className = dom_1.cls('row-header-draggable');
|
||
this.el = el;
|
||
this.renderDraggableIcon();
|
||
}
|
||
RowHeaderDraggableRenderer.prototype.getElement = function () {
|
||
return this.el;
|
||
};
|
||
RowHeaderDraggableRenderer.prototype.renderDraggableIcon = function () {
|
||
for (var i = 0; i < ROW_COUNT; i += 1) {
|
||
var wrapper = document.createElement('div');
|
||
wrapper.style.lineHeight = '0';
|
||
for (var j = 0; j < COL_COUNT; j += 1) {
|
||
var square = document.createElement('span');
|
||
wrapper.appendChild(square);
|
||
}
|
||
this.el.appendChild(wrapper);
|
||
}
|
||
};
|
||
return RowHeaderDraggableRenderer;
|
||
}());
|
||
exports.RowHeaderDraggableRenderer = RowHeaderDraggableRenderer;
|
||
|
||
|
||
/***/ }),
|
||
/* 77 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.sortRawData = exports.compare = void 0;
|
||
var common_1 = __webpack_require__(0);
|
||
function compare(valueA, valueB) {
|
||
var isBlankA = common_1.isBlank(valueA);
|
||
var isBlankB = common_1.isBlank(valueB);
|
||
var convertedA = common_1.convertToNumber(valueA);
|
||
var convertedB = common_1.convertToNumber(valueB);
|
||
if (!common_1.isNumber(convertedA) || !common_1.isNumber(convertedB)) {
|
||
convertedA = String(valueA);
|
||
convertedB = String(valueB);
|
||
}
|
||
var result = 0;
|
||
if (isBlankA && !isBlankB) {
|
||
result = -1;
|
||
}
|
||
else if (!isBlankA && isBlankB) {
|
||
result = 1;
|
||
}
|
||
else if (convertedA < convertedB) {
|
||
result = -1;
|
||
}
|
||
else if (convertedA > convertedB) {
|
||
result = 1;
|
||
}
|
||
return result;
|
||
}
|
||
exports.compare = compare;
|
||
function getComparators(columns) {
|
||
var comparators = [];
|
||
columns.forEach(function (column) {
|
||
var columnName = column.columnName, ascending = column.ascending, customComparator = column.comparator;
|
||
var comparator = customComparator || compare;
|
||
comparators.push({
|
||
name: columnName,
|
||
comparator: ascending
|
||
? comparator
|
||
: function (valueA, valueB, rowA, rowB) {
|
||
return -comparator(valueA, valueB, rowA, rowB);
|
||
},
|
||
});
|
||
});
|
||
return comparators;
|
||
}
|
||
function sortRawData(columns) {
|
||
var comparators = getComparators(columns);
|
||
return function (rowA, rowB) {
|
||
for (var _i = 0, comparators_1 = comparators; _i < comparators_1.length; _i++) {
|
||
var _a = comparators_1[_i], columnName = _a.name, comparator = _a.comparator;
|
||
var result = comparator(rowA[columnName], rowB[columnName], rowA, rowB);
|
||
if (result) {
|
||
return result;
|
||
}
|
||
}
|
||
return 0;
|
||
};
|
||
}
|
||
exports.sortRawData = sortRawData;
|
||
|
||
|
||
/***/ }),
|
||
/* 78 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.getChangedScrollPosition = void 0;
|
||
function getHorizontalScrollPosition(rightSideWidth, cellPosRect, scrollLeft, tableBorderWidth) {
|
||
var left = cellPosRect.left, right = cellPosRect.right;
|
||
if (left < scrollLeft) {
|
||
return left;
|
||
}
|
||
if (right > scrollLeft + rightSideWidth - tableBorderWidth) {
|
||
return right - rightSideWidth + tableBorderWidth;
|
||
}
|
||
return null;
|
||
}
|
||
function getVerticalScrollPosition(height, cellPosRect, scrollTop, tableBorderWidth) {
|
||
var top = cellPosRect.top, bottom = cellPosRect.bottom;
|
||
if (top < scrollTop) {
|
||
return top + tableBorderWidth;
|
||
}
|
||
if (bottom > scrollTop + height) {
|
||
return bottom - height + tableBorderWidth;
|
||
}
|
||
return null;
|
||
}
|
||
function getChangedScrollPosition(store, side, changedCellPosRect) {
|
||
var _a = store.dimension, bodyHeight = _a.bodyHeight, scrollXHeight = _a.scrollXHeight, scrollYWidth = _a.scrollYWidth, tableBorderWidth = _a.tableBorderWidth, areaWidth = store.columnCoords.areaWidth, focusedCellPostRect = store.focus.cellPosRect, viewport = store.viewport;
|
||
var scrollLeft = viewport.scrollLeft, scrollTop = viewport.scrollTop;
|
||
var cellPosRect = changedCellPosRect || focusedCellPostRect;
|
||
var changedScrollLeft = side === 'R'
|
||
? getHorizontalScrollPosition(areaWidth.R - scrollYWidth, cellPosRect, scrollLeft, tableBorderWidth)
|
||
: null;
|
||
var changedScrollTop = getVerticalScrollPosition(bodyHeight - scrollXHeight, cellPosRect, scrollTop, tableBorderWidth);
|
||
return [changedScrollLeft, changedScrollTop];
|
||
}
|
||
exports.getChangedScrollPosition = getChangedScrollPosition;
|
||
|
||
|
||
/***/ }),
|
||
/* 79 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.create = void 0;
|
||
var observable_1 = __webpack_require__(5);
|
||
var common_1 = __webpack_require__(0);
|
||
function create(_a) {
|
||
var column = _a.column, _b = _a.width, width = _b === void 0 ? 'auto' : _b, domWidth = _a.domWidth, _c = _a.rowHeight, rowHeight = _c === void 0 ? 40 : _c, _d = _a.bodyHeight, bodyHeight = _d === void 0 ? 'auto' : _d, _e = _a.minRowHeight, minRowHeight = _e === void 0 ? 40 : _e, _f = _a.minBodyHeight, minBodyHeight = _f === void 0 ? 130 : _f, _g = _a.frozenBorderWidth, frozenBorderWidth = _g === void 0 ? 1 : _g, _h = _a.heightResizable, heightResizable = _h === void 0 ? false : _h, _j = _a.scrollX, scrollX = _j === void 0 ? true : _j, _k = _a.scrollY, scrollY = _k === void 0 ? true : _k, _l = _a.summaryHeight, summaryHeight = _l === void 0 ? 0 : _l, _m = _a.summaryPosition, summaryPosition = _m === void 0 ? 'bottom' : _m, _o = _a.headerHeight, headerHeight = _o === void 0 ? 40 : _o;
|
||
var bodyHeightVal = typeof bodyHeight === 'number' ? bodyHeight : 0;
|
||
return observable_1.observable({
|
||
offsetLeft: 0,
|
||
offsetTop: 0,
|
||
width: width === 'auto' ? domWidth : width,
|
||
autoWidth: width === 'auto',
|
||
minBodyHeight: minBodyHeight,
|
||
bodyHeight: Math.max(bodyHeightVal, minBodyHeight),
|
||
autoHeight: bodyHeight === 'auto',
|
||
heightResizable: heightResizable,
|
||
fitToParentHeight: bodyHeight === 'fitToParent',
|
||
minRowHeight: minRowHeight,
|
||
rowHeight: common_1.isNumber(rowHeight) ? Math.max(rowHeight, minRowHeight) : minRowHeight,
|
||
autoRowHeight: rowHeight === 'auto',
|
||
scrollX: scrollX,
|
||
scrollY: scrollY,
|
||
summaryHeight: summaryHeight,
|
||
summaryPosition: summaryPosition,
|
||
headerHeight: headerHeight,
|
||
scrollbarWidth: 17,
|
||
tableBorderWidth: 1,
|
||
cellBorderWidth: 1,
|
||
get scrollYWidth() {
|
||
return this.scrollY ? this.scrollbarWidth : 0;
|
||
},
|
||
get scrollXHeight() {
|
||
return this.scrollX ? this.scrollbarWidth : 0;
|
||
},
|
||
get frozenBorderWidth() {
|
||
var visibleColumnsBySide = column.visibleColumnsBySide;
|
||
var visibleLeftColumnCount = visibleColumnsBySide.L.length;
|
||
return visibleLeftColumnCount > 0 ? frozenBorderWidth : 0;
|
||
},
|
||
get contentsWidth() {
|
||
var columnLen = column.visibleColumnsWithRowHeader.length;
|
||
var totalBorderWidth = columnLen * this.cellBorderWidth;
|
||
return this.width - this.scrollYWidth - this.frozenBorderWidth - totalBorderWidth;
|
||
},
|
||
});
|
||
}
|
||
exports.create = create;
|
||
|
||
|
||
/***/ }),
|
||
/* 80 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.create = void 0;
|
||
var observable_1 = __webpack_require__(5);
|
||
var common_1 = __webpack_require__(0);
|
||
var rowSpan_1 = __webpack_require__(13);
|
||
var data_1 = __webpack_require__(6);
|
||
function findIndexByPosition(offsets, position) {
|
||
var rowOffset = common_1.findIndex(function (offset) { return offset > position; }, offsets);
|
||
return rowOffset === -1 ? offsets.length - 1 : rowOffset - 1;
|
||
}
|
||
function calculateRange(_a) {
|
||
var scrollPos = _a.scrollPos, totalSize = _a.totalSize, offsets = _a.offsets, data = _a.data, column = _a.column, rowCalculation = _a.rowCalculation;
|
||
// safari uses negative scroll position for bouncing effect
|
||
scrollPos = Math.max(scrollPos, 0);
|
||
var start = findIndexByPosition(offsets, scrollPos);
|
||
var end = findIndexByPosition(offsets, scrollPos + totalSize) + 1;
|
||
var filteredRawData = data.filteredRawData, sortState = data.sortState, pageRowRange = data.pageRowRange;
|
||
var dataLength = filteredRawData.length;
|
||
if (rowCalculation && data_1.isClientPagination(data)) {
|
||
start = pageRowRange[0], end = pageRowRange[1];
|
||
}
|
||
if (dataLength && dataLength >= start && rowCalculation && rowSpan_1.isRowSpanEnabled(sortState, column)) {
|
||
var maxRowSpanCount = rowSpan_1.getMaxRowSpanCount(start, filteredRawData);
|
||
var topRowSpanIndex = start - maxRowSpanCount;
|
||
return [topRowSpanIndex >= 0 ? topRowSpanIndex : 0, end];
|
||
}
|
||
return [start, end];
|
||
}
|
||
function getCachedRange(cachedRange, newRange) {
|
||
if (cachedRange && common_1.arrayEqual(cachedRange, newRange)) {
|
||
return cachedRange;
|
||
}
|
||
return newRange;
|
||
}
|
||
function create(_a) {
|
||
var data = _a.data, column = _a.column, dimension = _a.dimension, rowCoords = _a.rowCoords, columnCoords = _a.columnCoords, showDummyRows = _a.showDummyRows;
|
||
return observable_1.observable({
|
||
scrollLeft: 0,
|
||
scrollTop: 0,
|
||
scrollPixelScale: 40,
|
||
get maxScrollLeft() {
|
||
var scrollbarWidth = dimension.scrollbarWidth, cellBorderWidth = dimension.cellBorderWidth;
|
||
var areaWidth = columnCoords.areaWidth, widths = columnCoords.widths;
|
||
var totalRWidth = 0;
|
||
widths.R.forEach(function (width) {
|
||
totalRWidth += width + cellBorderWidth;
|
||
});
|
||
return totalRWidth - areaWidth.R + scrollbarWidth;
|
||
},
|
||
get maxScrollTop() {
|
||
var bodyHeight = dimension.bodyHeight, scrollbarWidth = dimension.scrollbarWidth;
|
||
var totalRowHeight = rowCoords.totalRowHeight;
|
||
return totalRowHeight - bodyHeight + scrollbarWidth;
|
||
},
|
||
// only for right side columns
|
||
get colRange() {
|
||
var range = calculateRange({
|
||
scrollPos: this.scrollLeft,
|
||
totalSize: columnCoords.areaWidth.R,
|
||
offsets: columnCoords.offsets.R,
|
||
data: data,
|
||
column: column,
|
||
});
|
||
return getCachedRange(this.__storage__.colRange, range);
|
||
},
|
||
// only for right side columns
|
||
get columns() {
|
||
var _a;
|
||
return (_a = column.visibleColumnsBySideWithRowHeader.R).slice.apply(_a, this.colRange);
|
||
},
|
||
get offsetLeft() {
|
||
return columnCoords.offsets.R[this.colRange[0]];
|
||
},
|
||
get rowRange() {
|
||
var range = calculateRange({
|
||
scrollPos: this.scrollTop,
|
||
totalSize: dimension.bodyHeight,
|
||
offsets: rowCoords.offsets,
|
||
data: data,
|
||
column: column,
|
||
rowCalculation: true,
|
||
});
|
||
return getCachedRange(this.__storage__.rowRange, range);
|
||
},
|
||
get rows() {
|
||
var _a;
|
||
return (_a = data.filteredViewData).slice.apply(_a, this.rowRange);
|
||
},
|
||
get offsetTop() {
|
||
return rowCoords.offsets[this.rowRange[0] - data.pageRowRange[0]];
|
||
},
|
||
get dummyRowCount() {
|
||
var rowHeight = dimension.rowHeight, bodyHeight = dimension.bodyHeight, scrollXHeight = dimension.scrollXHeight, cellBorderWidth = dimension.cellBorderWidth;
|
||
var totalRowHeight = rowCoords.totalRowHeight;
|
||
var adjustedRowHeight = rowHeight + cellBorderWidth;
|
||
var adjustedBodyHeight = bodyHeight - scrollXHeight;
|
||
if (showDummyRows && totalRowHeight < adjustedBodyHeight) {
|
||
return Math.ceil((adjustedBodyHeight - totalRowHeight) / adjustedRowHeight) + 1;
|
||
}
|
||
return 0;
|
||
},
|
||
});
|
||
}
|
||
exports.create = create;
|
||
|
||
|
||
/***/ }),
|
||
/* 81 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.create = void 0;
|
||
var tslib_1 = __webpack_require__(1);
|
||
var observable_1 = __webpack_require__(5);
|
||
var common_1 = __webpack_require__(0);
|
||
function distributeExtraWidthEqually(extraWidth, targetIdxes, widths) {
|
||
var targetLen = targetIdxes.length;
|
||
var avgValue = Math.round(extraWidth / targetLen);
|
||
var errorValue = avgValue * targetLen - extraWidth; // to correct total width
|
||
var result = tslib_1.__spreadArrays(widths);
|
||
targetIdxes.forEach(function (idx) {
|
||
result[idx] += avgValue;
|
||
});
|
||
if (targetLen) {
|
||
result[targetIdxes[targetLen - 1]] -= errorValue;
|
||
}
|
||
return result;
|
||
}
|
||
function fillEmptyWidth(contentWidth, widths) {
|
||
var remainTotalWidth = contentWidth - common_1.sum(widths);
|
||
var emptyIndexes = common_1.findIndexes(function (width) { return !width; }, widths);
|
||
return distributeExtraWidthEqually(remainTotalWidth, emptyIndexes, widths);
|
||
}
|
||
function applyMinimumWidth(minWidths, widths) {
|
||
return widths.map(function (width, index) { return Math.max(width, minWidths[index]); });
|
||
}
|
||
function reduceExcessColumnWidthSub(totalRemainWidth, availableList, widths) {
|
||
var avgValue = Math.round(totalRemainWidth / availableList.length);
|
||
var newAvailableList = [];
|
||
availableList.forEach(function (_a) {
|
||
var index = _a[0], width = _a[1];
|
||
// note that totalRemainWidth and avgValue are negative number.
|
||
if (width < Math.abs(avgValue)) {
|
||
totalRemainWidth += width;
|
||
widths[index] -= width;
|
||
}
|
||
else {
|
||
newAvailableList.push([index, width]);
|
||
}
|
||
});
|
||
// call recursively until all available width are less than average
|
||
if (availableList.length > newAvailableList.length) {
|
||
return reduceExcessColumnWidthSub(totalRemainWidth, newAvailableList, widths);
|
||
}
|
||
var columnIndexes = availableList.map(function (_a) {
|
||
var index = _a[0];
|
||
return index;
|
||
});
|
||
return distributeExtraWidthEqually(totalRemainWidth, columnIndexes, widths);
|
||
}
|
||
function adjustWidths(minWidths, fixedFlags, availableWidth, fitToReducedTotal, widths) {
|
||
var columnLength = widths.length;
|
||
var totalExtraWidth = availableWidth - common_1.sum(widths);
|
||
var fixedCount = fixedFlags.filter(Boolean).length;
|
||
var fixedIndexes = common_1.findIndexes(function (v) { return !v; }, fixedFlags);
|
||
if (totalExtraWidth > 0 && columnLength > fixedCount) {
|
||
return distributeExtraWidthEqually(totalExtraWidth, fixedIndexes, widths);
|
||
}
|
||
if (fitToReducedTotal && totalExtraWidth < 0) {
|
||
var availableWidthInfos = fixedIndexes.map(function (index) { return [index, widths[index] - minWidths[index]]; });
|
||
return reduceExcessColumnWidthSub(totalExtraWidth, availableWidthInfos, widths);
|
||
}
|
||
return widths;
|
||
}
|
||
function calculateWidths(columns, cellBorderWidth, contentsWidth) {
|
||
var baseWidths = columns.map(function (_a) {
|
||
var baseWidth = _a.baseWidth;
|
||
return (baseWidth ? baseWidth - cellBorderWidth : 0);
|
||
});
|
||
var minWidths = columns.map(function (_a) {
|
||
var minWidth = _a.minWidth;
|
||
return minWidth - cellBorderWidth;
|
||
});
|
||
var fixedFlags = common_1.mapProp('fixedWidth', columns);
|
||
return common_1.pipe(baseWidths, fillEmptyWidth.bind(null, contentsWidth), applyMinimumWidth.bind(null, minWidths), adjustWidths.bind(null, minWidths, fixedFlags, contentsWidth, true));
|
||
}
|
||
function calculateOffsets(widths, borderWidth) {
|
||
var offsets = [0];
|
||
for (var i = 1, len = widths.length; i < len; i += 1) {
|
||
offsets[i] = offsets[i - 1] + widths[i - 1] + borderWidth;
|
||
}
|
||
return offsets;
|
||
}
|
||
function create(_a) {
|
||
var column = _a.column, dimension = _a.dimension;
|
||
return observable_1.observable({
|
||
get widths() {
|
||
var visibleColumnsWithRowHeader = column.visibleColumnsWithRowHeader, visibleFrozenCount = column.visibleFrozenCount;
|
||
var widths = calculateWidths(visibleColumnsWithRowHeader, dimension.cellBorderWidth, dimension.contentsWidth);
|
||
return {
|
||
L: widths.slice(0, visibleFrozenCount),
|
||
R: widths.slice(visibleFrozenCount),
|
||
};
|
||
},
|
||
get offsets() {
|
||
return {
|
||
L: calculateOffsets(this.widths.L, dimension.cellBorderWidth),
|
||
R: calculateOffsets(this.widths.R, dimension.cellBorderWidth),
|
||
};
|
||
},
|
||
get areaWidth() {
|
||
var visibleFrozenCount = column.visibleFrozenCount;
|
||
var width = dimension.width, frozenBorderWidth = dimension.frozenBorderWidth, cellBorderWidth = dimension.cellBorderWidth;
|
||
var leftAreaWidth = 0;
|
||
if (visibleFrozenCount) {
|
||
var leftBorderWidth = (visibleFrozenCount + 1) * cellBorderWidth;
|
||
leftAreaWidth = common_1.sum(this.widths.L) + leftBorderWidth;
|
||
}
|
||
return {
|
||
L: leftAreaWidth - frozenBorderWidth,
|
||
R: width - leftAreaWidth,
|
||
};
|
||
},
|
||
get totalColumnWidth() {
|
||
return {
|
||
L: common_1.last(this.offsets.L) + common_1.last(this.widths.L),
|
||
R: common_1.last(this.offsets.R) + common_1.last(this.widths.R),
|
||
};
|
||
},
|
||
});
|
||
}
|
||
exports.create = create;
|
||
|
||
|
||
/***/ }),
|
||
/* 82 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.create = void 0;
|
||
var observable_1 = __webpack_require__(5);
|
||
var common_1 = __webpack_require__(0);
|
||
var data_1 = __webpack_require__(6);
|
||
function create(_a) {
|
||
var _b;
|
||
var data = _a.data, dimension = _a.dimension;
|
||
var rowHeight = dimension.rowHeight;
|
||
var pageOptions = data.pageOptions, pageRowRange = data.pageRowRange;
|
||
return observable_1.observable({
|
||
heights: pageOptions.useClient
|
||
? (_b = data.filteredRawData).slice.apply(_b, pageRowRange).map(function (row) { return data_1.getRowHeight(row, rowHeight); })
|
||
: data.filteredRawData.map(function (row) { return data_1.getRowHeight(row, rowHeight); }),
|
||
get offsets() {
|
||
var offsets = [0];
|
||
var heights = this.heights;
|
||
for (var i = 1, len = heights.length; i < len; i += 1) {
|
||
offsets[i] = offsets[i - 1] + heights[i - 1];
|
||
}
|
||
return offsets;
|
||
},
|
||
get totalRowHeight() {
|
||
return this.heights.length ? common_1.last(this.offsets) + common_1.last(this.heights) : 0;
|
||
},
|
||
});
|
||
}
|
||
exports.create = create;
|
||
|
||
|
||
/***/ }),
|
||
/* 83 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.create = void 0;
|
||
var observable_1 = __webpack_require__(5);
|
||
var common_1 = __webpack_require__(0);
|
||
var rowSpan_1 = __webpack_require__(13);
|
||
var data_1 = __webpack_require__(6);
|
||
function create(_a) {
|
||
var column = _a.column, data = _a.data, dimension = _a.dimension, rowCoords = _a.rowCoords, columnCoords = _a.columnCoords, editingEvent = _a.editingEvent, tabMode = _a.tabMode, id = _a.id;
|
||
return observable_1.observable({
|
||
rowKey: null,
|
||
columnName: null,
|
||
prevRowKey: null,
|
||
prevColumnName: null,
|
||
editingAddress: null,
|
||
editingEvent: editingEvent,
|
||
navigating: false,
|
||
forcedDestroyEditing: false,
|
||
tabMode: tabMode,
|
||
get side() {
|
||
if (this.columnName === null) {
|
||
return null;
|
||
}
|
||
return common_1.someProp('name', this.columnName, column.visibleColumnsBySideWithRowHeader.R)
|
||
? 'R'
|
||
: 'L';
|
||
},
|
||
get columnIndex() {
|
||
var _a = this, columnName = _a.columnName, side = _a.side;
|
||
return columnName === null || side === null
|
||
? null
|
||
: common_1.findPropIndex('name', columnName, column.visibleColumnsBySideWithRowHeader[side]);
|
||
},
|
||
get totalColumnIndex() {
|
||
var visibleColumnsBySideWithRowHeader = column.visibleColumnsBySideWithRowHeader;
|
||
var _a = this, columnIndex = _a.columnIndex, side = _a.side;
|
||
if (columnIndex === null) {
|
||
return columnIndex;
|
||
}
|
||
return side === 'R' ? columnIndex + visibleColumnsBySideWithRowHeader.L.length : columnIndex;
|
||
},
|
||
get rowIndex() {
|
||
var rowKey = this.rowKey;
|
||
if (common_1.isNull(rowKey)) {
|
||
return null;
|
||
}
|
||
var index = data_1.findIndexByRowKey(data, column, id, rowKey);
|
||
return data_1.isClientPagination(data) ? index - data.pageRowRange[0] : index;
|
||
},
|
||
get originalRowIndex() {
|
||
var rowIndex = this.rowIndex;
|
||
if (common_1.isNull(rowIndex)) {
|
||
return null;
|
||
}
|
||
if (data_1.isClientPagination(data)) {
|
||
return rowIndex + data.pageRowRange[0];
|
||
}
|
||
return rowIndex;
|
||
},
|
||
get cellPosRect() {
|
||
var _a = this, columnIndex = _a.columnIndex, rowIndex = _a.rowIndex, side = _a.side, columnName = _a.columnName, rowKey = _a.rowKey;
|
||
var filteredRawData = data.filteredRawData, sortState = data.sortState;
|
||
var cellBorderWidth = dimension.cellBorderWidth;
|
||
if (columnIndex === null || rowIndex === null || side === null || columnName === null) {
|
||
return null;
|
||
}
|
||
var widths = columnCoords.widths, offsets = columnCoords.offsets;
|
||
var borderWidth = widths[side].length - 1 === columnIndex ? 0 : cellBorderWidth;
|
||
var left = offsets[side][columnIndex];
|
||
var right = left + widths[side][columnIndex] + borderWidth;
|
||
var top = rowCoords.offsets[rowIndex];
|
||
var bottom = top + rowCoords.heights[rowIndex];
|
||
var rowSpan = rowSpan_1.getRowSpanByRowKey(rowKey, columnName, filteredRawData);
|
||
if (rowSpan_1.isRowSpanEnabled(sortState, column) && rowSpan) {
|
||
var verticalPos = rowSpan_1.getVerticalPosWithRowSpan(columnName, rowSpan, rowCoords, filteredRawData);
|
||
return { left: left, right: right, top: verticalPos[0], bottom: verticalPos[1] };
|
||
}
|
||
return { left: left, right: right, top: top, bottom: bottom };
|
||
},
|
||
});
|
||
}
|
||
exports.create = create;
|
||
|
||
|
||
/***/ }),
|
||
/* 84 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.create = void 0;
|
||
var tslib_1 = __webpack_require__(1);
|
||
var observable_1 = __webpack_require__(5);
|
||
var selection_1 = __webpack_require__(22);
|
||
var data_1 = __webpack_require__(6);
|
||
function getOwnSideColumnRange(columnRange, side, visibleFrozenCount) {
|
||
var _a = columnRange.map(function (columnIdx) { return columnIdx; }), start = _a[0], end = _a[1];
|
||
if (side === 'L' && start < visibleFrozenCount) {
|
||
return [start, Math.min(end, visibleFrozenCount - 1)];
|
||
}
|
||
if (side === 'R' && end >= visibleFrozenCount) {
|
||
return [Math.max(start, visibleFrozenCount) - visibleFrozenCount, end - visibleFrozenCount];
|
||
}
|
||
return null;
|
||
}
|
||
function getVerticalStyles(rowRange, rowOffsets, rowHeights, cellBorderWidth) {
|
||
var top = rowOffsets[rowRange[0]];
|
||
var bottom = rowOffsets[rowRange[1]] + rowHeights[rowRange[1]];
|
||
return { top: top, height: bottom - top - cellBorderWidth };
|
||
}
|
||
function getHorizontalStyles(columnRange, columnWidths, side, cellBorderWidth) {
|
||
var left = 0;
|
||
var width = 0;
|
||
if (!columnRange) {
|
||
return { left: left, width: width };
|
||
}
|
||
var widths = columnWidths[side];
|
||
var startIndex = columnRange[0];
|
||
var endIndex = Math.min(columnRange[1], widths.length - 1);
|
||
for (var i = 0; i <= endIndex; i += 1) {
|
||
if (i < startIndex) {
|
||
left += widths[i] + cellBorderWidth;
|
||
}
|
||
else {
|
||
width += widths[i] + cellBorderWidth;
|
||
}
|
||
}
|
||
width -= cellBorderWidth;
|
||
if (side === 'R' && endIndex === widths.length - 1) {
|
||
width -= cellBorderWidth;
|
||
}
|
||
return { left: left, width: width };
|
||
}
|
||
function create(_a) {
|
||
var selectionUnit = _a.selectionUnit, rowCoords = _a.rowCoords, columnCoords = _a.columnCoords, columnInfo = _a.column, dimension = _a.dimension, data = _a.data;
|
||
return observable_1.observable({
|
||
inputRange: null,
|
||
unit: selectionUnit,
|
||
type: 'cell',
|
||
intervalIdForAutoScroll: null,
|
||
get range() {
|
||
if (!this.inputRange) {
|
||
return null;
|
||
}
|
||
var columnWidths = columnCoords.widths;
|
||
var row = selection_1.getSortedRange(this.inputRange.row);
|
||
var column = selection_1.getSortedRange(this.inputRange.column);
|
||
if (this.unit === 'row') {
|
||
var endColumnIndex = columnWidths.L.length + columnWidths.R.length - 1;
|
||
column = [0, endColumnIndex];
|
||
}
|
||
return { row: row, column: column };
|
||
},
|
||
get rangeBySide() {
|
||
if (!this.range) {
|
||
return null;
|
||
}
|
||
var visibleFrozenCount = columnInfo.visibleFrozenCount;
|
||
var _a = this.range, column = _a.column, row = _a.row;
|
||
return {
|
||
L: { row: row, column: getOwnSideColumnRange(column, 'L', visibleFrozenCount) },
|
||
R: { row: row, column: getOwnSideColumnRange(column, 'R', visibleFrozenCount) },
|
||
};
|
||
},
|
||
get rangeAreaInfo() {
|
||
if (!this.rangeBySide) {
|
||
return null;
|
||
}
|
||
var cellBorderWidth = dimension.cellBorderWidth;
|
||
var rowOffsets = rowCoords.offsets, rowHeights = rowCoords.heights;
|
||
var columnWidths = columnCoords.widths;
|
||
var _a = this.rangeBySide, leftRange = _a.L, rightRange = _a.R;
|
||
var leftSideStyles = null;
|
||
var rightSideStyles = null;
|
||
if (leftRange.column) {
|
||
leftSideStyles = tslib_1.__assign(tslib_1.__assign({}, getVerticalStyles(leftRange.row, rowOffsets, rowHeights, cellBorderWidth)), getHorizontalStyles(leftRange.column, columnWidths, 'L', cellBorderWidth));
|
||
}
|
||
if (rightRange.column) {
|
||
rightSideStyles = tslib_1.__assign(tslib_1.__assign({}, getVerticalStyles(rightRange.row, rowOffsets, rowHeights, cellBorderWidth)), getHorizontalStyles(rightRange.column, columnWidths, 'R', cellBorderWidth));
|
||
}
|
||
return {
|
||
L: leftSideStyles,
|
||
R: rightSideStyles,
|
||
};
|
||
},
|
||
get rangeWithRowHeader() {
|
||
if (!this.range) {
|
||
return null;
|
||
}
|
||
var rowHeaderCount = columnInfo.rowHeaderCount;
|
||
var _a = this.range, row = _a.row, column = _a.column;
|
||
var columnStartIndex = Math.max(column[0] - rowHeaderCount, 0);
|
||
var columnEndIndex = Math.max(column[1] - rowHeaderCount, 0);
|
||
return {
|
||
row: row,
|
||
column: [columnStartIndex, columnEndIndex],
|
||
};
|
||
},
|
||
get originalRange() {
|
||
if (!this.range) {
|
||
return null;
|
||
}
|
||
var pageOptions = data.pageOptions;
|
||
var _a = this.range, row = _a.row, column = _a.column;
|
||
if (data_1.isClientPagination(data)) {
|
||
var perPage = pageOptions.perPage, page = pageOptions.page;
|
||
var prevPageRowCount = perPage * (page - 1);
|
||
return {
|
||
row: [row[0] + prevPageRowCount, row[1] + prevPageRowCount],
|
||
column: column,
|
||
};
|
||
}
|
||
return this.range;
|
||
},
|
||
});
|
||
}
|
||
exports.create = create;
|
||
|
||
|
||
/***/ }),
|
||
/* 85 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.create = void 0;
|
||
var observable_1 = __webpack_require__(5);
|
||
function create() {
|
||
return observable_1.observable({ hoveredRowKey: null, cellHeightMap: {} });
|
||
}
|
||
exports.create = create;
|
||
|
||
|
||
/***/ }),
|
||
/* 86 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.create = void 0;
|
||
var observable_1 = __webpack_require__(5);
|
||
function create() {
|
||
return observable_1.observable({ activeColumnAddress: null, activeFilterState: null });
|
||
}
|
||
exports.create = create;
|
||
|
||
|
||
/***/ }),
|
||
/* 87 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.create = void 0;
|
||
var tslib_1 = __webpack_require__(1);
|
||
var common_1 = __webpack_require__(0);
|
||
var observable_1 = __webpack_require__(5);
|
||
var i18n_1 = tslib_1.__importDefault(__webpack_require__(19));
|
||
function createDefaultContextMenu() {
|
||
return [
|
||
[
|
||
{
|
||
name: 'copy',
|
||
label: i18n_1.default.get('contextMenu.copy'),
|
||
action: 'copy',
|
||
},
|
||
{
|
||
name: 'copyColumns',
|
||
label: i18n_1.default.get('contextMenu.copyColumns'),
|
||
action: 'copyColumns',
|
||
},
|
||
{
|
||
name: 'copyRows',
|
||
label: i18n_1.default.get('contextMenu.copyRows'),
|
||
action: 'copyRows',
|
||
},
|
||
{
|
||
name: 'export',
|
||
label: i18n_1.default.get('contextMenu.export'),
|
||
subMenu: [
|
||
{
|
||
name: 'csvExport',
|
||
label: i18n_1.default.get('contextMenu.csvExport'),
|
||
action: 'csvExport',
|
||
},
|
||
{
|
||
name: 'excelExport',
|
||
label: i18n_1.default.get('contextMenu.excelExport'),
|
||
action: 'excelExport',
|
||
},
|
||
],
|
||
},
|
||
],
|
||
];
|
||
}
|
||
function create(_a) {
|
||
var createMenuGroups = _a.createMenuGroups;
|
||
return observable_1.observable({
|
||
posInfo: null,
|
||
createMenuGroups: common_1.isNull(createMenuGroups)
|
||
? null
|
||
: createMenuGroups || createDefaultContextMenu,
|
||
get flattenTopMenuItems() {
|
||
var _a;
|
||
if (!this.posInfo) {
|
||
return [];
|
||
}
|
||
var _b = this.posInfo, rowKey = _b.rowKey, columnName = _b.columnName;
|
||
var menuGroups = (_a = this.createMenuGroups) === null || _a === void 0 ? void 0 : _a.call(this, { rowKey: rowKey, columnName: columnName });
|
||
return menuGroups === null || menuGroups === void 0 ? void 0 : menuGroups.reduce(function (acc, group, groupIndex) {
|
||
var menuItems = [];
|
||
group.forEach(function (menuItem, itemIndex) {
|
||
menuItems.push(menuItem);
|
||
if (groupIndex < menuGroups.length - 1 && itemIndex === group.length - 1) {
|
||
menuItems.push({ name: 'separator' });
|
||
}
|
||
});
|
||
return acc.concat(menuItems);
|
||
}, []);
|
||
},
|
||
});
|
||
}
|
||
exports.create = create;
|
||
|
||
|
||
/***/ }),
|
||
/* 88 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.Root = void 0;
|
||
var tslib_1 = __webpack_require__(1);
|
||
var preact_1 = __webpack_require__(3);
|
||
var container_1 = __webpack_require__(89);
|
||
var gridEvent_1 = tslib_1.__importDefault(__webpack_require__(9));
|
||
var eventBus_1 = __webpack_require__(7);
|
||
var Root = /** @class */ (function (_super) {
|
||
tslib_1.__extends(Root, _super);
|
||
function Root() {
|
||
return _super !== null && _super.apply(this, arguments) || this;
|
||
}
|
||
Root.prototype.getChildContext = function () {
|
||
return {
|
||
store: this.props.store,
|
||
dispatch: this.props.dispatch,
|
||
};
|
||
};
|
||
Root.prototype.componentDidMount = function () {
|
||
var eventBus = eventBus_1.getEventBus(this.props.store.id);
|
||
var gridEvent = new gridEvent_1.default();
|
||
setTimeout(function () {
|
||
/**
|
||
* Occurs when the grid is mounted on DOM
|
||
* @event Grid#onGridMounted
|
||
* @property {Grid} instance - Current grid instance
|
||
*/
|
||
eventBus.trigger('onGridMounted', gridEvent);
|
||
});
|
||
};
|
||
Root.prototype.componentWillUnmount = function () {
|
||
var eventBus = eventBus_1.getEventBus(this.props.store.id);
|
||
var gridEvent = new gridEvent_1.default();
|
||
/**
|
||
* Occurs before the grid is detached from DOM
|
||
* @event Grid#onGridBeforeDestroy
|
||
* @property {Grid} instance - Current grid instance
|
||
*/
|
||
eventBus.trigger('onGridBeforeDestroy', gridEvent);
|
||
};
|
||
Root.prototype.render = function () {
|
||
return preact_1.h(container_1.Container, { rootElement: this.props.rootElement });
|
||
};
|
||
return Root;
|
||
}(preact_1.Component));
|
||
exports.Root = Root;
|
||
|
||
|
||
/***/ }),
|
||
/* 89 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.Container = exports.ContainerComp = void 0;
|
||
var tslib_1 = __webpack_require__(1);
|
||
var preact_1 = __webpack_require__(3);
|
||
var leftSide_1 = __webpack_require__(90);
|
||
var rightSide_1 = __webpack_require__(108);
|
||
var stateLayer_1 = __webpack_require__(109);
|
||
var filterLayer_1 = __webpack_require__(110);
|
||
var contextMenu_1 = __webpack_require__(56);
|
||
var heightResizeHandle_1 = __webpack_require__(117);
|
||
var clipboard_1 = __webpack_require__(118);
|
||
var pagination_1 = __webpack_require__(119);
|
||
var dom_1 = __webpack_require__(2);
|
||
var hoc_1 = __webpack_require__(4);
|
||
var eventBus_1 = __webpack_require__(7);
|
||
var gridEvent_1 = tslib_1.__importDefault(__webpack_require__(9));
|
||
var browser_1 = __webpack_require__(39);
|
||
var common_1 = __webpack_require__(0);
|
||
var keyboard_1 = __webpack_require__(17);
|
||
var mouse_1 = __webpack_require__(121);
|
||
var DOUBLE_TAP_DURATION = 200;
|
||
var TAP_THRESHOLD = 10;
|
||
var ContainerComp = /** @class */ (function (_super) {
|
||
tslib_1.__extends(ContainerComp, _super);
|
||
function ContainerComp() {
|
||
var _this = _super !== null && _super.apply(this, arguments) || this;
|
||
_this.touchEvent = {
|
||
start: false,
|
||
move: false,
|
||
eventInfo: {
|
||
pageX: -1,
|
||
pageY: -1,
|
||
timestamp: 0,
|
||
},
|
||
};
|
||
_this.handleTouchStart = function () {
|
||
if (!_this.el || !browser_1.isMobile()) {
|
||
return;
|
||
}
|
||
_this.touchEvent.start = true;
|
||
};
|
||
_this.handleTouchMove = function () {
|
||
if (!_this.el || !browser_1.isMobile() || !_this.touchEvent.start) {
|
||
return;
|
||
}
|
||
_this.touchEvent.move = true;
|
||
};
|
||
_this.getCellRowKey = function (elem) {
|
||
var address = dom_1.getCellAddress(elem);
|
||
if (address) {
|
||
return address.rowKey;
|
||
}
|
||
return null;
|
||
};
|
||
_this.handleTouchEnd = function (event) {
|
||
if (!_this.el || !browser_1.isMobile()) {
|
||
return;
|
||
}
|
||
var timeStamp = event.timeStamp;
|
||
var _a = event.changedTouches[0], pageX = _a.pageX, pageY = _a.pageY;
|
||
var _b = _this.touchEvent, eventInfo = _b.eventInfo, start = _b.start, move = _b.move;
|
||
if (start && !move) {
|
||
var prevPageX = eventInfo.pageX, prevPageY = eventInfo.pageY, prevTimestamp = eventInfo.timestamp;
|
||
if (timeStamp - prevTimestamp <= DOUBLE_TAP_DURATION) {
|
||
if (Math.abs(prevPageX - pageX) <= TAP_THRESHOLD &&
|
||
Math.abs(prevPageY - pageY) <= TAP_THRESHOLD) {
|
||
_this.startEditing(event.target);
|
||
}
|
||
}
|
||
else {
|
||
eventInfo.pageX = pageX;
|
||
eventInfo.pageY = pageY;
|
||
eventInfo.timestamp = timeStamp;
|
||
}
|
||
}
|
||
_this.touchEvent.start = false;
|
||
_this.touchEvent.move = false;
|
||
};
|
||
_this.handleMouseover = function (event) {
|
||
var _a = _this.props, eventBus = _a.eventBus, dispatch = _a.dispatch, renderState = _a.renderState;
|
||
var hoveredRowKey = renderState.hoveredRowKey;
|
||
var gridEvent = new gridEvent_1.default({ event: event });
|
||
var rowKey = _this.getCellRowKey(event.target);
|
||
if (!common_1.isNull(rowKey)) {
|
||
if (hoveredRowKey !== rowKey) {
|
||
dispatch('setHoveredRowKey', rowKey);
|
||
}
|
||
}
|
||
/**
|
||
* Occurs when a mouse pointer is moved onto the Grid.
|
||
* The properties of the event object include the native MouseEvent object.
|
||
* @event Grid#mouseover
|
||
* @property {Event} nativeEvent - Event object
|
||
* @property {string} targetType - Type of event target
|
||
* @property {number} rowKey - rowKey of the target cell
|
||
* @property {string} columnName - columnName of the target cell
|
||
* @property {Grid} instance - Current grid instance
|
||
*/
|
||
eventBus.trigger('mouseover', gridEvent);
|
||
};
|
||
_this.handleClick = function (event) {
|
||
var _a = _this.props, eventBus = _a.eventBus, editingEvent = _a.editingEvent;
|
||
var gridEvent = new gridEvent_1.default({ event: event });
|
||
/**
|
||
* Occurs when a mouse button is clicked on the Grid.
|
||
* The properties of the event object include the native event object.
|
||
* @event Grid#click
|
||
* @property {Event} nativeEvent - Event object
|
||
* @property {string} targetType - Type of event target
|
||
* @property {number} rowKey - rowKey of the target cell
|
||
* @property {string} columnName - columnName of the target cell
|
||
* @property {Grid} instance - Current grid instance
|
||
*/
|
||
eventBus.trigger('click', gridEvent);
|
||
if (!gridEvent.isStopped() && editingEvent === 'click') {
|
||
_this.startEditing(event.target);
|
||
}
|
||
};
|
||
_this.handleMouseout = function (event) {
|
||
var _a = _this.props, eventBus = _a.eventBus, dispatch = _a.dispatch, renderState = _a.renderState;
|
||
var hoveredRowKey = renderState.hoveredRowKey;
|
||
var gridEvent = new gridEvent_1.default({ event: event });
|
||
if (!common_1.isNull(hoveredRowKey)) {
|
||
dispatch('setHoveredRowKey', null);
|
||
}
|
||
/**
|
||
* Occurs when a mouse pointer is moved off from the Grid.
|
||
* The event object has all properties copied from the native MouseEvent.
|
||
* @event Grid#mouseout
|
||
* @property {Event} nativeEvent - Event object
|
||
* @property {string} targetType - Type of event target
|
||
* @property {number | string} rowKey - rowKey of the target cell
|
||
* @property {string} columnName - columnName of the target cell
|
||
* @property {Grid} instance - Current grid instance
|
||
*/
|
||
eventBus.trigger('mouseout', gridEvent);
|
||
};
|
||
_this.handleMouseDown = function (event) {
|
||
if (!_this.el) {
|
||
return;
|
||
}
|
||
var _a = _this.props, dispatch = _a.dispatch, editing = _a.editing, eventBus = _a.eventBus, filtering = _a.filtering;
|
||
var el = _this.el;
|
||
var gridEvent = new gridEvent_1.default({ event: event });
|
||
/**
|
||
* Occurs when a mouse button is downed on the Grid.
|
||
* The event object has all properties copied from the native MouseEvent.
|
||
* @event Grid#mousedown
|
||
* @property {Event} nativeEvent - Event object
|
||
* @property {string} targetType - Type of event target
|
||
* @property {number | string} rowKey - rowKey of the target cell
|
||
* @property {string} columnName - columnName of the target cell
|
||
* @property {Grid} instance - Current grid instance
|
||
*/
|
||
eventBus.trigger('mousedown', gridEvent);
|
||
if (!gridEvent.isStopped()) {
|
||
dispatch('setNavigating', true);
|
||
if (!editing && !filtering) {
|
||
event.preventDefault();
|
||
}
|
||
var _b = el.getBoundingClientRect(), top = _b.top, left = _b.left;
|
||
dispatch('setOffsetTop', top + el.scrollTop);
|
||
dispatch('setOffsetLeft', left + el.scrollLeft);
|
||
}
|
||
};
|
||
_this.handleDblClick = function (event) {
|
||
if (!_this.el || browser_1.isMobile()) {
|
||
return;
|
||
}
|
||
var _a = _this.props, eventBus = _a.eventBus, editingEvent = _a.editingEvent;
|
||
var gridEvent = new gridEvent_1.default({ event: event });
|
||
/**
|
||
* Occurs when a mouse button is double clicked on the Grid.
|
||
* The properties of the event object include the native event object.
|
||
* @event Grid#dblclick
|
||
* @property {Event} nativeEvent - Event object
|
||
* @property {string} targetType - Type of event target
|
||
* @property {number} rowKey - rowKey of the target cell
|
||
* @property {string} columnName - columnName of the target cell
|
||
* @property {Grid} instance - Current grid instance
|
||
*/
|
||
eventBus.trigger('dblclick', gridEvent);
|
||
if (!gridEvent.isStopped() && editingEvent === 'dblclick') {
|
||
_this.startEditing(event.target);
|
||
}
|
||
};
|
||
_this.handleDocumentKeyDown = function (ev) {
|
||
var keyName = keyboard_1.keyNameMap[ev.keyCode];
|
||
if (keyName === 'esc') {
|
||
_this.props.dispatch('setActiveColumnAddress', null);
|
||
_this.props.dispatch('hideContextMenu');
|
||
}
|
||
};
|
||
_this.handleDocumentMouseDown = function (ev) {
|
||
var _a = _this.props, dispatch = _a.dispatch, filtering = _a.filtering;
|
||
var target = ev.target;
|
||
if (filtering &&
|
||
!dom_1.findParentByClassName(target, 'btn-filter') &&
|
||
!dom_1.findParentByClassName(target, 'filter-container')) {
|
||
dispatch('setActiveColumnAddress', null);
|
||
}
|
||
if (!dom_1.findParentByClassName(target, 'context-menu')) {
|
||
_this.props.dispatch('hideContextMenu');
|
||
}
|
||
};
|
||
_this.syncWithDOMWidth = function () {
|
||
_this.props.dispatch('refreshLayout', _this.el, _this.props.rootElement.parentElement);
|
||
};
|
||
_this.handleContextMenu = function (ev) {
|
||
if (dom_1.isParentExistWithClassNames(ev.target, ['cell-header', 'cell-dummy']) ||
|
||
!_this.context.store.contextMenu.createMenuGroups) {
|
||
mouse_1.emitMouseup(_this.el);
|
||
return;
|
||
}
|
||
ev.preventDefault();
|
||
var _a = _this.props, offsetLeft = _a.offsetLeft, offsetTop = _a.offsetTop;
|
||
var pos = { left: ev.clientX - offsetLeft, top: ev.clientY - offsetTop };
|
||
var _b = dom_1.getCoordinateWithOffset(ev.pageX, ev.pageY), pageX = _b[0], pageY = _b[1];
|
||
var bodyArea = dom_1.findParentByClassName(ev.target, 'body-area');
|
||
var side = dom_1.findParentByClassName(bodyArea, 'lside-area') ? 'L' : 'R';
|
||
var scrollTop = bodyArea.scrollTop, scrollLeft = bodyArea.scrollLeft;
|
||
var _c = bodyArea.getBoundingClientRect(), top = _c.top, left = _c.left;
|
||
var elementInfo = { scrollTop: scrollTop, scrollLeft: scrollLeft, side: side, top: top, left: left };
|
||
var eventInfo = { pageX: pageX, pageY: pageY };
|
||
_this.props.dispatch('showContextMenu', pos, elementInfo, eventInfo);
|
||
};
|
||
return _this;
|
||
}
|
||
ContainerComp.prototype.startEditing = function (eventTarget) {
|
||
var _a = this.props, dispatch = _a.dispatch, focusedRowKey = _a.focusedRowKey, focusedColumnName = _a.focusedColumnName;
|
||
var address = dom_1.getCellAddress(eventTarget);
|
||
if (address) {
|
||
var rowKey = address.rowKey, columnName = address.columnName;
|
||
if (focusedRowKey === rowKey && focusedColumnName === columnName) {
|
||
dispatch('startEditing', rowKey, columnName);
|
||
}
|
||
}
|
||
};
|
||
ContainerComp.prototype.componentDidMount = function () {
|
||
if (this.props.autoWidth) {
|
||
window.addEventListener('resize', this.syncWithDOMWidth);
|
||
// In Preact, the componentDidMount is called before the DOM elements are actually mounted.
|
||
// https://github.com/preactjs/preact/issues/648
|
||
// Use setTimeout to wait until the DOM element is actually mounted
|
||
window.setTimeout(this.syncWithDOMWidth, 0);
|
||
}
|
||
document.addEventListener('mousedown', this.handleDocumentMouseDown);
|
||
document.addEventListener('keydown', this.handleDocumentKeyDown);
|
||
};
|
||
ContainerComp.prototype.componentWillUnmount = function () {
|
||
if (this.props.autoWidth) {
|
||
window.removeEventListener('resize', this.syncWithDOMWidth);
|
||
}
|
||
};
|
||
ContainerComp.prototype.shouldComponentUpdate = function (nextProps) {
|
||
if (this.props.autoWidth && nextProps.autoWidth) {
|
||
return false;
|
||
}
|
||
return true;
|
||
};
|
||
ContainerComp.prototype.render = function () {
|
||
var _a;
|
||
var _this = this;
|
||
var _b = this.props, summaryHeight = _b.summaryHeight, summaryPosition = _b.summaryPosition, heightResizable = _b.heightResizable, gridId = _b.gridId, width = _b.width, autoWidth = _b.autoWidth, scrollXHeight = _b.scrollXHeight, showLeftSide = _b.showLeftSide, scrollX = _b.scrollX, scrollY = _b.scrollY, pageOptions = _b.pageOptions;
|
||
var style = { width: autoWidth ? '100%' : width };
|
||
var attrs = (_a = {}, _a[dom_1.dataAttr.GRID_ID] = gridId, _a);
|
||
return (preact_1.h("div", tslib_1.__assign({}, attrs, { style: style, class: dom_1.cls('container', [showLeftSide, 'show-lside-area']), onMouseDown: this.handleMouseDown, onDblClick: this.handleDblClick, onClick: this.handleClick, onMouseOut: this.handleMouseout, onMouseOver: this.handleMouseover, onTouchStart: this.handleTouchStart, onTouchMove: this.handleTouchMove, onTouchEnd: this.handleTouchEnd, onContextMenu: this.handleContextMenu, ref: function (el) {
|
||
_this.el = el;
|
||
} }),
|
||
pageOptions.position === 'top' && preact_1.h(pagination_1.Pagination, null),
|
||
preact_1.h("div", { class: dom_1.cls('content-area', [!!summaryHeight, summaryPosition === 'top' ? 'has-summary-top' : 'has-summary-bottom'], [!scrollX, 'no-scroll-x'], [!scrollY, 'no-scroll-y']) },
|
||
preact_1.h(leftSide_1.LeftSide, null),
|
||
preact_1.h(rightSide_1.RightSide, null),
|
||
preact_1.h("div", { class: dom_1.cls('border-line', 'border-line-top') }),
|
||
preact_1.h("div", { class: dom_1.cls('border-line', 'border-line-left') }),
|
||
preact_1.h("div", { class: dom_1.cls('border-line', 'border-line-right') }),
|
||
preact_1.h("div", { class: dom_1.cls('border-line', 'border-line-bottom'), style: { bottom: scrollXHeight } })),
|
||
heightResizable && preact_1.h(heightResizeHandle_1.HeightResizeHandle, null),
|
||
preact_1.h(stateLayer_1.StateLayer, null),
|
||
preact_1.h(clipboard_1.Clipboard, null),
|
||
pageOptions.position === 'bottom' && preact_1.h(pagination_1.Pagination, null),
|
||
preact_1.h(filterLayer_1.FilterLayer, null),
|
||
preact_1.h(contextMenu_1.ContextMenu, null)));
|
||
};
|
||
return ContainerComp;
|
||
}(preact_1.Component));
|
||
exports.ContainerComp = ContainerComp;
|
||
exports.Container = hoc_1.connect(function (_a) {
|
||
var id = _a.id, dimension = _a.dimension, focus = _a.focus, columnCoords = _a.columnCoords, data = _a.data, filterLayerState = _a.filterLayerState, renderState = _a.renderState;
|
||
return ({
|
||
gridId: id,
|
||
width: dimension.width,
|
||
autoWidth: dimension.autoWidth,
|
||
editing: !!focus.editingAddress,
|
||
filtering: !!filterLayerState.activeColumnAddress,
|
||
scrollXHeight: dimension.scrollX ? dimension.scrollbarWidth : 0,
|
||
fitToParentHeight: dimension.fitToParentHeight,
|
||
summaryHeight: dimension.summaryHeight,
|
||
summaryPosition: dimension.summaryPosition,
|
||
heightResizable: dimension.heightResizable,
|
||
showLeftSide: !!columnCoords.areaWidth.L,
|
||
editingEvent: focus.editingEvent,
|
||
viewData: data.viewData,
|
||
pageOptions: data.pageOptions,
|
||
eventBus: eventBus_1.getEventBus(id),
|
||
scrollX: dimension.scrollX,
|
||
scrollY: dimension.scrollY,
|
||
renderState: renderState,
|
||
focusedRowKey: focus.rowKey,
|
||
focusedColumnName: focus.columnName,
|
||
offsetLeft: dimension.offsetLeft,
|
||
offsetTop: dimension.offsetTop,
|
||
});
|
||
})(ContainerComp);
|
||
|
||
|
||
/***/ }),
|
||
/* 90 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.LeftSide = void 0;
|
||
var tslib_1 = __webpack_require__(1);
|
||
var preact_1 = __webpack_require__(3);
|
||
var headerArea_1 = __webpack_require__(51);
|
||
var bodyArea_1 = __webpack_require__(54);
|
||
var summaryArea_1 = __webpack_require__(55);
|
||
var dom_1 = __webpack_require__(2);
|
||
var hoc_1 = __webpack_require__(4);
|
||
var LeftSideComp = /** @class */ (function (_super) {
|
||
tslib_1.__extends(LeftSideComp, _super);
|
||
function LeftSideComp() {
|
||
return _super !== null && _super.apply(this, arguments) || this;
|
||
}
|
||
LeftSideComp.prototype.render = function (_a) {
|
||
var width = _a.width, scrollX = _a.scrollX;
|
||
var style = { width: width, display: 'block' };
|
||
var summaryPosition = this.props.summaryPosition;
|
||
return (preact_1.h("div", { class: dom_1.cls('lside-area'), style: style },
|
||
preact_1.h(headerArea_1.HeaderArea, { side: "L" }),
|
||
summaryPosition === 'top' && preact_1.h(summaryArea_1.SummaryArea, { side: "L" }),
|
||
preact_1.h(bodyArea_1.BodyArea, { side: "L" }),
|
||
summaryPosition === 'bottom' && preact_1.h(summaryArea_1.SummaryArea, { side: "L" }),
|
||
scrollX && preact_1.h("div", { class: dom_1.cls('scrollbar-left-bottom') })));
|
||
};
|
||
return LeftSideComp;
|
||
}(preact_1.Component));
|
||
exports.LeftSide = hoc_1.connect(function (_a) {
|
||
var columnCoords = _a.columnCoords, dimension = _a.dimension;
|
||
return ({
|
||
width: columnCoords.areaWidth.L,
|
||
scrollX: dimension.scrollX,
|
||
summaryPosition: dimension.summaryPosition,
|
||
});
|
||
})(LeftSideComp);
|
||
|
||
|
||
/***/ }),
|
||
/* 91 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.ColumnResizer = void 0;
|
||
var tslib_1 = __webpack_require__(1);
|
||
var preact_1 = __webpack_require__(3);
|
||
var dom_1 = __webpack_require__(2);
|
||
var hoc_1 = __webpack_require__(4);
|
||
var common_1 = __webpack_require__(0);
|
||
var column_1 = __webpack_require__(12);
|
||
var WIDTH = 7;
|
||
var HALF_WIDTH = 3;
|
||
var ColumnResizerComp = /** @class */ (function (_super) {
|
||
tslib_1.__extends(ColumnResizerComp, _super);
|
||
function ColumnResizerComp() {
|
||
var _this = _super !== null && _super.apply(this, arguments) || this;
|
||
_this.dragStartX = -1;
|
||
_this.draggingRange = [-1, -1];
|
||
_this.draggingWidths = [];
|
||
_this.handleMouseDown = function (ev, name) {
|
||
var range = _this.getComplexHeaderRange(name);
|
||
_this.draggingRange = range;
|
||
_this.dragStartX = ev.pageX;
|
||
_this.draggingWidths = _this.props.widths.slice(range[0], range[1] + 1);
|
||
dom_1.setCursorStyle('col-resize');
|
||
document.addEventListener('mousemove', _this.handleMouseMove);
|
||
document.addEventListener('mouseup', _this.clearDocumentEvents);
|
||
document.addEventListener('selectstart', _this.handleSelectStart);
|
||
};
|
||
_this.handleSelectStart = function (ev) {
|
||
ev.preventDefault();
|
||
};
|
||
_this.handleMouseMove = function (ev) {
|
||
var _a = _this.props, side = _a.side, dispatch = _a.dispatch;
|
||
var resizeAmount = ev.pageX - _this.dragStartX;
|
||
dispatch('setColumnWidth', side, _this.draggingRange, resizeAmount, _this.draggingWidths);
|
||
};
|
||
_this.clearDocumentEvents = function () {
|
||
dom_1.setCursorStyle('');
|
||
document.removeEventListener('mousemove', _this.handleMouseMove);
|
||
document.removeEventListener('mouseup', _this.clearDocumentEvents);
|
||
document.removeEventListener('selectstart', _this.handleSelectStart);
|
||
};
|
||
return _this;
|
||
}
|
||
ColumnResizerComp.prototype.componentWillUnmount = function () {
|
||
this.clearDocumentEvents();
|
||
};
|
||
ColumnResizerComp.prototype.renderHandle = function (info, index) {
|
||
var _a;
|
||
var _this = this;
|
||
var name = info.name, height = info.height, offsetX = info.offsetX, offsetY = info.offsetY, width = info.width, header = info.header;
|
||
var attrs = (_a = {},
|
||
_a[dom_1.dataAttr.COLUMN_INDEX] = index,
|
||
_a[dom_1.dataAttr.COLUMN_NAME] = name,
|
||
_a);
|
||
return (preact_1.h("div", tslib_1.__assign({ class: dom_1.cls('column-resize-handle'), title: header }, attrs, { style: {
|
||
height: height,
|
||
width: WIDTH,
|
||
left: offsetX + width - HALF_WIDTH,
|
||
bottom: offsetY,
|
||
}, onMouseDown: function (ev) { return _this.handleMouseDown(ev, name); } })));
|
||
};
|
||
ColumnResizerComp.prototype.isHideChildColumns = function (name) {
|
||
return common_1.some(function (item) { return common_1.includes(item.childNames, name) && !!item.hideChildHeaders; }, this.props.complexColumns);
|
||
};
|
||
ColumnResizerComp.prototype.findComplexColumnStartIndex = function (name) {
|
||
var _a = this.props, columns = _a.columns, complexColumns = _a.complexColumns, allColumnMap = _a.allColumnMap;
|
||
var idx = common_1.findPropIndex('name', name, columns);
|
||
if (idx === -1 && !allColumnMap[name].hidden) {
|
||
var complexColumn = common_1.findProp('name', name, complexColumns);
|
||
return this.findComplexColumnStartIndex(complexColumn.childNames[0]);
|
||
}
|
||
return idx;
|
||
};
|
||
ColumnResizerComp.prototype.findComplexColumnEndIndex = function (name) {
|
||
var _a = this.props, columns = _a.columns, complexColumns = _a.complexColumns, allColumnMap = _a.allColumnMap;
|
||
var idx = common_1.findPropIndex('name', name, columns);
|
||
if (idx === -1 && !allColumnMap[name].hidden) {
|
||
var childNames = common_1.findProp('name', name, complexColumns).childNames;
|
||
return this.findComplexColumnEndIndex(childNames[childNames.length - 1]);
|
||
}
|
||
return idx;
|
||
};
|
||
ColumnResizerComp.prototype.getComplexHeaderRange = function (name) {
|
||
var _this = this;
|
||
var _a = this.props, columns = _a.columns, complexColumns = _a.complexColumns;
|
||
var index = common_1.findPropIndex('name', name, columns);
|
||
if (index === -1) {
|
||
var startIndex_1 = Number.MAX_VALUE;
|
||
var endIndex_1 = Number.MIN_VALUE;
|
||
var childNames = common_1.findProp('name', name, complexColumns).childNames;
|
||
childNames.forEach(function (childName) {
|
||
startIndex_1 = Math.min(startIndex_1, _this.findComplexColumnStartIndex(childName));
|
||
endIndex_1 = Math.max(startIndex_1, _this.findComplexColumnEndIndex(childName));
|
||
});
|
||
return [startIndex_1, endIndex_1];
|
||
}
|
||
return [index, index];
|
||
};
|
||
ColumnResizerComp.prototype.getResizerCoords = function (name) {
|
||
var _a = this.props, offsets = _a.offsets, widths = _a.widths, columns = _a.columns, cellBorderWidth = _a.cellBorderWidth, complexColumns = _a.complexColumns;
|
||
var _b = this.getComplexHeaderRange(name), startIndex = _b[0], endIndex = _b[1];
|
||
var count = column_1.getChildHeaderCount(columns, complexColumns, name);
|
||
var cellBorder = count ? count * cellBorderWidth : cellBorderWidth;
|
||
return {
|
||
width: common_1.sum(widths.slice(startIndex, endIndex + 1)),
|
||
offsetX: offsets[startIndex] + cellBorder,
|
||
};
|
||
};
|
||
ColumnResizerComp.prototype.getResizableColumnsInfo = function () {
|
||
var _this = this;
|
||
var _a = this.props, columns = _a.columns, complexColumns = _a.complexColumns, headerHeight = _a.headerHeight;
|
||
var hierarchies = column_1.getComplexColumnsHierarchy(columns, complexColumns);
|
||
var maxLen = column_1.getHierarchyMaxRowCount(hierarchies);
|
||
var defaultHeight = headerHeight / maxLen;
|
||
var nameMap = {};
|
||
var resizerInfo = [];
|
||
hierarchies.forEach(function (cols) {
|
||
var len = cols.length;
|
||
var offsetY = headerHeight;
|
||
cols.forEach(function (col, idx) {
|
||
var resizable = col.resizable, name = col.name, header = col.header;
|
||
var height = idx === len - 1 ? defaultHeight * (maxLen - len + 1) : defaultHeight;
|
||
offsetY -= height;
|
||
if (resizable && !_this.isHideChildColumns(name) && !nameMap[name]) {
|
||
resizerInfo.push(tslib_1.__assign({ name: name,
|
||
header: header,
|
||
height: height,
|
||
offsetY: offsetY }, _this.getResizerCoords(name)));
|
||
nameMap[name] = true;
|
||
}
|
||
});
|
||
});
|
||
return resizerInfo;
|
||
};
|
||
ColumnResizerComp.prototype.render = function () {
|
||
var _this = this;
|
||
return (preact_1.h("div", { class: dom_1.cls('column-resize-container'), style: "display: block; margin-top: -35px; height: 35px;" }, this.getResizableColumnsInfo().map(function (info, index) { return _this.renderHandle(info, index); })));
|
||
};
|
||
return ColumnResizerComp;
|
||
}(preact_1.Component));
|
||
exports.ColumnResizer = hoc_1.connect(function (_a, _b) {
|
||
var column = _a.column, columnCoords = _a.columnCoords, dimension = _a.dimension;
|
||
var side = _b.side;
|
||
return ({
|
||
widths: columnCoords.widths[side],
|
||
offsets: columnCoords.offsets[side],
|
||
headerHeight: dimension.headerHeight,
|
||
cellBorderWidth: dimension.cellBorderWidth,
|
||
columns: column.visibleColumnsBySideWithRowHeader[side],
|
||
complexColumns: column.complexColumnHeaders,
|
||
allColumnMap: column.allColumnMap,
|
||
});
|
||
})(ColumnResizerComp);
|
||
|
||
|
||
/***/ }),
|
||
/* 92 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.ComplexHeader = void 0;
|
||
var tslib_1 = __webpack_require__(1);
|
||
var preact_1 = __webpack_require__(3);
|
||
var hoc_1 = __webpack_require__(4);
|
||
var selection_1 = __webpack_require__(22);
|
||
var columnHeader_1 = __webpack_require__(52);
|
||
var column_1 = __webpack_require__(12);
|
||
var ComplexHeaderComp = /** @class */ (function (_super) {
|
||
tslib_1.__extends(ComplexHeaderComp, _super);
|
||
function ComplexHeaderComp() {
|
||
return _super !== null && _super.apply(this, arguments) || this;
|
||
}
|
||
ComplexHeaderComp.prototype.isSelected = function (name) {
|
||
var _a = this.props, columnSelectionRange = _a.columnSelectionRange, columns = _a.columns, complexColumnHeaders = _a.complexColumnHeaders;
|
||
if (!columnSelectionRange) {
|
||
return false;
|
||
}
|
||
var selectionStart = columnSelectionRange[0], selectionEnd = columnSelectionRange[1];
|
||
var _b = selection_1.getChildColumnRange(columns, complexColumnHeaders, name), columnStart = _b[0], columnEnd = _b[1];
|
||
return (columnStart >= selectionStart &&
|
||
columnStart <= selectionEnd &&
|
||
columnEnd >= selectionStart &&
|
||
columnEnd <= selectionEnd);
|
||
};
|
||
ComplexHeaderComp.prototype.createTableHeaderComponent = function (column, height, colspan, rowspan) {
|
||
var name = column.name;
|
||
return (preact_1.h(columnHeader_1.ColumnHeader, { key: name, height: height, colspan: colspan, rowspan: rowspan, columnInfo: column, selected: this.isSelected(name), grid: this.props.grid }));
|
||
};
|
||
ComplexHeaderComp.prototype.render = function () {
|
||
var _this = this;
|
||
var _a = this.props, columns = _a.columns, headerHeight = _a.headerHeight, cellBorderWidth = _a.cellBorderWidth, complexColumnHeaders = _a.complexColumnHeaders;
|
||
var hierarchies = column_1.getComplexColumnsHierarchy(columns, complexColumnHeaders);
|
||
var maxRowCount = column_1.getHierarchyMaxRowCount(hierarchies);
|
||
var rows = new Array(maxRowCount);
|
||
var columnNames = new Array(maxRowCount);
|
||
var colspans = [];
|
||
var rowHeight = (maxRowCount ? Math.floor((headerHeight - 1) / maxRowCount) : 0) - 1;
|
||
var rowspan = 1;
|
||
var height;
|
||
hierarchies.forEach(function (hierarchy, i) {
|
||
var length = hierarchies[i].length;
|
||
var curHeight = 0;
|
||
hierarchy.forEach(function (column, j) {
|
||
var columnName = column.name;
|
||
rowspan = length - 1 === j && maxRowCount - length + 1 > 1 ? maxRowCount - length + 1 : 1;
|
||
height = rowHeight * rowspan;
|
||
if (j === length - 1) {
|
||
height = headerHeight - curHeight - cellBorderWidth;
|
||
}
|
||
else {
|
||
curHeight += height + cellBorderWidth;
|
||
}
|
||
if (columnNames[j] === columnName) {
|
||
rows[j].pop();
|
||
colspans[j] += 1;
|
||
}
|
||
else {
|
||
colspans[j] = 1;
|
||
}
|
||
columnNames[j] = columnName;
|
||
rows[j] = rows[j] || [];
|
||
rows[j].push(_this.createTableHeaderComponent(column, height + cellBorderWidth, colspans[j], rowspan));
|
||
});
|
||
});
|
||
return (preact_1.h("tbody", null, rows.map(function (row, index) { return (preact_1.h("tr", { key: "complex-header-" + index }, row)); })));
|
||
};
|
||
return ComplexHeaderComp;
|
||
}(preact_1.Component));
|
||
exports.ComplexHeader = hoc_1.connect(function (store, _a) {
|
||
var side = _a.side;
|
||
var _b = store.column, rowHeaderCount = _b.rowHeaderCount, visibleColumnsBySideWithRowHeader = _b.visibleColumnsBySideWithRowHeader, complexColumnHeaders = _b.complexColumnHeaders, _c = store.dimension, headerHeight = _c.headerHeight, cellBorderWidth = _c.cellBorderWidth, rangeBySide = store.selection.rangeBySide;
|
||
return {
|
||
headerHeight: headerHeight,
|
||
cellBorderWidth: cellBorderWidth,
|
||
columns: visibleColumnsBySideWithRowHeader[side],
|
||
complexColumnHeaders: complexColumnHeaders,
|
||
columnSelectionRange: rangeBySide && rangeBySide[side].column ? rangeBySide[side].column : null,
|
||
rowHeaderCount: rowHeaderCount,
|
||
};
|
||
})(ComplexHeaderComp);
|
||
|
||
|
||
/***/ }),
|
||
/* 93 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.HeaderCheckbox = void 0;
|
||
var tslib_1 = __webpack_require__(1);
|
||
var preact_1 = __webpack_require__(3);
|
||
var hoc_1 = __webpack_require__(4);
|
||
var HeaderCheckboxComp = /** @class */ (function (_super) {
|
||
tslib_1.__extends(HeaderCheckboxComp, _super);
|
||
function HeaderCheckboxComp() {
|
||
var _this = _super !== null && _super.apply(this, arguments) || this;
|
||
_this.handleChange = function (ev) {
|
||
var target = ev.target;
|
||
var dispatch = _this.props.dispatch;
|
||
if (target.checked) {
|
||
dispatch('checkAll', false);
|
||
}
|
||
else {
|
||
dispatch('uncheckAll', false);
|
||
}
|
||
};
|
||
return _this;
|
||
}
|
||
HeaderCheckboxComp.prototype.componentDidMount = function () {
|
||
this.setCheckboxState();
|
||
};
|
||
HeaderCheckboxComp.prototype.componentDidUpdate = function () {
|
||
this.setCheckboxState();
|
||
};
|
||
HeaderCheckboxComp.prototype.setCheckboxState = function () {
|
||
var _a = this.props, checkedAllRows = _a.checkedAllRows, disabled = _a.disabled;
|
||
var input = this.el.querySelector('input[name=_checked]');
|
||
if (input) {
|
||
input.checked = checkedAllRows;
|
||
input.disabled = disabled;
|
||
}
|
||
};
|
||
HeaderCheckboxComp.prototype.render = function () {
|
||
var _this = this;
|
||
return (preact_1.h("span", { ref: function (el) {
|
||
_this.el = el;
|
||
}, dangerouslySetInnerHTML: { __html: this.props.header }, onChange: this.handleChange }));
|
||
};
|
||
return HeaderCheckboxComp;
|
||
}(preact_1.Component));
|
||
exports.HeaderCheckbox = hoc_1.connect(function (store) {
|
||
var _a = store.data, checkedAllRows = _a.checkedAllRows, disabledAllCheckbox = _a.disabledAllCheckbox, allColumnMap = store.column.allColumnMap;
|
||
return {
|
||
header: allColumnMap._checked.header,
|
||
checkedAllRows: checkedAllRows,
|
||
disabled: disabledAllCheckbox,
|
||
};
|
||
})(HeaderCheckboxComp);
|
||
|
||
|
||
/***/ }),
|
||
/* 94 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.SortingButton = void 0;
|
||
var tslib_1 = __webpack_require__(1);
|
||
var preact_1 = __webpack_require__(3);
|
||
var dom_1 = __webpack_require__(2);
|
||
var hoc_1 = __webpack_require__(4);
|
||
var instance_1 = __webpack_require__(8);
|
||
var common_1 = __webpack_require__(0);
|
||
var SortingButtonComp = /** @class */ (function (_super) {
|
||
tslib_1.__extends(SortingButtonComp, _super);
|
||
function SortingButtonComp() {
|
||
var _this = _super !== null && _super.apply(this, arguments) || this;
|
||
_this.handleClick = function (ev) {
|
||
var target = ev.target;
|
||
var multiple = ev.ctrlKey || ev.metaKey;
|
||
if (!dom_1.hasClass(target, 'btn-sorting')) {
|
||
return;
|
||
}
|
||
var _a = _this.props, dispatch = _a.dispatch, sortState = _a.sortState, dataProvider = _a.dataProvider, defaultAscending = _a.defaultAscending;
|
||
var columns = sortState.columns;
|
||
var th = dom_1.findParentByClassName(target, 'cell');
|
||
var columnName = th.getAttribute('data-column-name');
|
||
var index = common_1.findPropIndex('columnName', columnName, columns);
|
||
var ascending = index !== -1 ? !columns[index].ascending : defaultAscending;
|
||
if (sortState.useClient) {
|
||
dispatch('sort', columnName, ascending, multiple);
|
||
}
|
||
else {
|
||
// @TODO: apply multi sort to dataSource
|
||
dataProvider.sort(columnName, ascending, true);
|
||
}
|
||
};
|
||
return _this;
|
||
}
|
||
SortingButtonComp.prototype.render = function () {
|
||
var _a = this.props, active = _a.active, ascending = _a.ascending;
|
||
return (preact_1.h("a", { class: dom_1.cls('btn-sorting', [active, ascending ? 'btn-sorting-up' : 'btn-sorting-down']), onClick: this.handleClick }));
|
||
};
|
||
return SortingButtonComp;
|
||
}(preact_1.Component));
|
||
exports.SortingButton = hoc_1.connect(function (store, props) {
|
||
var sortState = store.data.sortState, id = store.id;
|
||
var columnName = props.columnName, _a = props.sortingType, sortingType = _a === void 0 ? 'asc' : _a;
|
||
var columns = sortState.columns;
|
||
var index = common_1.findPropIndex('columnName', columnName, columns);
|
||
var ascending = index !== -1 ? columns[index].ascending : true;
|
||
return {
|
||
sortState: sortState,
|
||
ascending: ascending,
|
||
dataProvider: instance_1.getDataProvider(id),
|
||
defaultAscending: sortingType === 'asc',
|
||
active: index !== -1,
|
||
};
|
||
})(SortingButtonComp);
|
||
|
||
|
||
/***/ }),
|
||
/* 95 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.SortingOrder = void 0;
|
||
var tslib_1 = __webpack_require__(1);
|
||
var preact_1 = __webpack_require__(3);
|
||
var hoc_1 = __webpack_require__(4);
|
||
var common_1 = __webpack_require__(0);
|
||
var SortingOrderComp = /** @class */ (function (_super) {
|
||
tslib_1.__extends(SortingOrderComp, _super);
|
||
function SortingOrderComp() {
|
||
return _super !== null && _super.apply(this, arguments) || this;
|
||
}
|
||
SortingOrderComp.prototype.render = function () {
|
||
var _a = this.props, order = _a.order, showOrder = _a.showOrder;
|
||
return showOrder && preact_1.h("span", { style: { color: '#bbb', fontWeight: 100 } }, order);
|
||
};
|
||
return SortingOrderComp;
|
||
}(preact_1.Component));
|
||
exports.SortingOrder = hoc_1.connect(function (store, props) {
|
||
var columns = store.data.sortState.columns;
|
||
var columnName = props.columnName;
|
||
var order = common_1.findPropIndex('columnName', columnName, columns) + 1;
|
||
var showOrder = !!order && columns.length > 1;
|
||
return {
|
||
order: order,
|
||
showOrder: showOrder,
|
||
};
|
||
})(SortingOrderComp);
|
||
|
||
|
||
/***/ }),
|
||
/* 96 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.FilterButton = void 0;
|
||
var tslib_1 = __webpack_require__(1);
|
||
var preact_1 = __webpack_require__(3);
|
||
var dom_1 = __webpack_require__(2);
|
||
var hoc_1 = __webpack_require__(4);
|
||
var common_1 = __webpack_require__(0);
|
||
var DISTANCE_FROM_ICON_TO_LAYER = 9;
|
||
var FilterButtonComp = /** @class */ (function (_super) {
|
||
tslib_1.__extends(FilterButtonComp, _super);
|
||
function FilterButtonComp() {
|
||
var _this = _super !== null && _super.apply(this, arguments) || this;
|
||
_this.isActiveFilter = function () {
|
||
var _a = _this.props, filters = _a.filters, columnName = _a.columnName;
|
||
return filters ? common_1.someProp('columnName', columnName, filters) : false;
|
||
};
|
||
_this.handleClick = function (ev) {
|
||
var target = ev.target;
|
||
if (!dom_1.hasClass(target, 'btn-filter')) {
|
||
return;
|
||
}
|
||
var _a = _this.props, activeColumnAddress = _a.activeColumnAddress, columnName = _a.columnName, dispatch = _a.dispatch, offsetLeft = _a.offsetLeft;
|
||
if (!activeColumnAddress || activeColumnAddress.name !== columnName) {
|
||
var left = target.getBoundingClientRect().left - offsetLeft - DISTANCE_FROM_ICON_TO_LAYER;
|
||
dispatch('saveAndFinishEditing');
|
||
dispatch('setActiveColumnAddress', { name: columnName, left: left });
|
||
}
|
||
};
|
||
return _this;
|
||
}
|
||
FilterButtonComp.prototype.render = function () {
|
||
return (preact_1.h("a", { class: dom_1.cls('btn-filter', [this.isActiveFilter(), 'btn-filter-active']), onClick: this.handleClick }));
|
||
};
|
||
return FilterButtonComp;
|
||
}(preact_1.Component));
|
||
exports.FilterButton = hoc_1.connect(function (store, _a) {
|
||
var columnName = _a.columnName;
|
||
return ({
|
||
activeColumnAddress: store.filterLayerState.activeColumnAddress,
|
||
filters: store.data.filters,
|
||
columnName: columnName,
|
||
offsetLeft: store.dimension.offsetLeft,
|
||
});
|
||
})(FilterButtonComp);
|
||
|
||
|
||
/***/ }),
|
||
/* 97 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.BodyRows = void 0;
|
||
var tslib_1 = __webpack_require__(1);
|
||
var preact_1 = __webpack_require__(3);
|
||
var bodyRow_1 = __webpack_require__(98);
|
||
var bodyDummyRow_1 = __webpack_require__(102);
|
||
var common_1 = __webpack_require__(0);
|
||
var hoc_1 = __webpack_require__(4);
|
||
var BodyRowsComp = /** @class */ (function (_super) {
|
||
tslib_1.__extends(BodyRowsComp, _super);
|
||
function BodyRowsComp() {
|
||
return _super !== null && _super.apply(this, arguments) || this;
|
||
}
|
||
BodyRowsComp.prototype.shouldComponentUpdate = function (nextProps) {
|
||
return !common_1.shallowEqual(nextProps, this.props);
|
||
};
|
||
BodyRowsComp.prototype.render = function (_a) {
|
||
var rows = _a.rows, rowIndexOffset = _a.rowIndexOffset, columns = _a.columns, dummyRowCount = _a.dummyRowCount;
|
||
var columnNames = columns.map(function (_a) {
|
||
var name = _a.name;
|
||
return name;
|
||
});
|
||
return (preact_1.h("tbody", null,
|
||
rows.map(function (row, index) { return (preact_1.h(bodyRow_1.BodyRow, { key: row.uniqueKey, rowIndex: index + rowIndexOffset, viewRow: row, columns: columns })); }),
|
||
common_1.range(dummyRowCount).map(function (index) { return (preact_1.h(bodyDummyRow_1.BodyDummyRow, { key: "dummy-" + index, index: rows.length + index, columnNames: columnNames })); })));
|
||
};
|
||
return BodyRowsComp;
|
||
}(preact_1.Component));
|
||
exports.BodyRows = hoc_1.connect(function (_a, _b) {
|
||
var viewport = _a.viewport, column = _a.column, data = _a.data;
|
||
var side = _b.side;
|
||
return ({
|
||
rowIndexOffset: viewport.rowRange[0] - data.pageRowRange[0],
|
||
rows: viewport.rows,
|
||
columns: side === 'L' ? column.visibleColumnsBySideWithRowHeader.L : viewport.columns,
|
||
dummyRowCount: viewport.dummyRowCount,
|
||
});
|
||
})(BodyRowsComp);
|
||
|
||
|
||
/***/ }),
|
||
/* 98 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.BodyRow = void 0;
|
||
var tslib_1 = __webpack_require__(1);
|
||
var preact_1 = __webpack_require__(3);
|
||
var hoc_1 = __webpack_require__(4);
|
||
var dom_1 = __webpack_require__(2);
|
||
var common_1 = __webpack_require__(0);
|
||
var rowSpanCell_1 = __webpack_require__(99);
|
||
var ROW_HEIGHT_DEBOUNCE_TIME = 10;
|
||
var BodyRowComp = /** @class */ (function (_super) {
|
||
tslib_1.__extends(BodyRowComp, _super);
|
||
function BodyRowComp() {
|
||
var _this = _super !== null && _super.apply(this, arguments) || this;
|
||
// This debounced function is aimed to wait until setTimeout(.., 0) calls
|
||
// from the all child BodyCell components is made.
|
||
// 10ms is just an approximate number. (smaller than 10ms might be safe enough)
|
||
_this.updateRowHeightDebounced = common_1.debounce(function () {
|
||
var _a = _this.props, dispatch = _a.dispatch, rowIndex = _a.rowIndex, rowHeight = _a.rowHeight;
|
||
dispatch('refreshRowHeight', rowIndex, rowHeight);
|
||
}, ROW_HEIGHT_DEBOUNCE_TIME);
|
||
return _this;
|
||
}
|
||
BodyRowComp.prototype.componentWillUnmount = function () {
|
||
var _a = this.props, rowIndex = _a.rowIndex, autoRowHeight = _a.autoRowHeight, dispatch = _a.dispatch;
|
||
if (autoRowHeight) {
|
||
dispatch('removeRowHeight', rowIndex);
|
||
}
|
||
};
|
||
BodyRowComp.prototype.render = function (_a) {
|
||
var _this = this;
|
||
var rowIndex = _a.rowIndex, viewRow = _a.viewRow, columns = _a.columns, rowHeight = _a.rowHeight, autoRowHeight = _a.autoRowHeight, hoveredRowKey = _a.hoveredRowKey, focusedRowKey = _a.focusedRowKey;
|
||
var isOddRow = rowIndex % 2 === 0;
|
||
return (rowHeight > 0 && (preact_1.h("tr", { style: { height: rowHeight }, class: dom_1.cls([isOddRow, 'row-odd'], [!isOddRow, 'row-even'], [!common_1.isNull(hoveredRowKey) && hoveredRowKey === viewRow.rowKey, 'row-hover'], [!common_1.isNull(focusedRowKey) && focusedRowKey === viewRow.rowKey, 'cell-current-row']) }, columns.map(function (columnInfo) {
|
||
// Pass row object directly instead of passing value of it only,
|
||
// so that BodyCell component can watch the change of value using selector function.
|
||
return (preact_1.h(rowSpanCell_1.RowSpanCell, { key: columnInfo.name, viewRow: viewRow, columnInfo: columnInfo, refreshRowHeight: autoRowHeight ? _this.updateRowHeightDebounced : null, rowIndex: rowIndex }));
|
||
}))));
|
||
};
|
||
return BodyRowComp;
|
||
}(preact_1.Component));
|
||
exports.BodyRow = hoc_1.connect(function (_a, _b) {
|
||
var rowCoords = _a.rowCoords, dimension = _a.dimension, renderState = _a.renderState, focus = _a.focus;
|
||
var rowIndex = _b.rowIndex;
|
||
return ({
|
||
rowHeight: rowCoords.heights[rowIndex],
|
||
autoRowHeight: dimension.autoRowHeight,
|
||
cellBorderWidth: dimension.cellBorderWidth,
|
||
hoveredRowKey: renderState.hoveredRowKey,
|
||
focusedRowKey: focus.rowKey,
|
||
});
|
||
})(BodyRowComp);
|
||
|
||
|
||
/***/ }),
|
||
/* 99 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.RowSpanCell = exports.RowSpanCellComp = void 0;
|
||
var tslib_1 = __webpack_require__(1);
|
||
var preact_1 = __webpack_require__(3);
|
||
var hoc_1 = __webpack_require__(4);
|
||
var bodyCell_1 = __webpack_require__(100);
|
||
var rowSpan_1 = __webpack_require__(13);
|
||
var RowSpanCellComp = /** @class */ (function (_super) {
|
||
tslib_1.__extends(RowSpanCellComp, _super);
|
||
function RowSpanCellComp() {
|
||
return _super !== null && _super.apply(this, arguments) || this;
|
||
}
|
||
RowSpanCellComp.prototype.render = function () {
|
||
var _a = this.props, columnInfo = _a.columnInfo, refreshRowHeight = _a.refreshRowHeight, rowSpan = _a.rowSpan, enableRowSpan = _a.enableRowSpan, viewRow = _a.viewRow, rowIndex = _a.rowIndex;
|
||
var rowSpanAttr = null;
|
||
if (enableRowSpan && rowSpan) {
|
||
if (!rowSpan.mainRow) {
|
||
return null;
|
||
}
|
||
rowSpanAttr = { rowSpan: rowSpan.spanCount };
|
||
}
|
||
return (preact_1.h(bodyCell_1.BodyCell, { viewRow: viewRow, columnInfo: columnInfo, refreshRowHeight: refreshRowHeight, rowSpanAttr: rowSpanAttr, rowIndex: rowIndex }));
|
||
};
|
||
return RowSpanCellComp;
|
||
}(preact_1.Component));
|
||
exports.RowSpanCellComp = RowSpanCellComp;
|
||
exports.RowSpanCell = hoc_1.connect(function (_a, _b) {
|
||
var data = _a.data, column = _a.column;
|
||
var viewRow = _b.viewRow, columnInfo = _b.columnInfo;
|
||
var sortState = data.sortState;
|
||
var rowSpan = (viewRow.rowSpanMap && viewRow.rowSpanMap[columnInfo.name]) || null;
|
||
var enableRowSpan = rowSpan_1.isRowSpanEnabled(sortState, column);
|
||
return { rowSpan: rowSpan, enableRowSpan: enableRowSpan };
|
||
})(RowSpanCellComp);
|
||
|
||
|
||
/***/ }),
|
||
/* 100 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.BodyCell = exports.BodyCellComp = void 0;
|
||
var tslib_1 = __webpack_require__(1);
|
||
var preact_1 = __webpack_require__(3);
|
||
var treeCellContents_1 = __webpack_require__(101);
|
||
var dom_1 = __webpack_require__(2);
|
||
var hoc_1 = __webpack_require__(4);
|
||
var instance_1 = __webpack_require__(8);
|
||
var column_1 = __webpack_require__(10);
|
||
var common_1 = __webpack_require__(0);
|
||
var BodyCellComp = /** @class */ (function (_super) {
|
||
tslib_1.__extends(BodyCellComp, _super);
|
||
function BodyCellComp() {
|
||
var _this = _super !== null && _super.apply(this, arguments) || this;
|
||
_this.handleMouseMove = function (ev) {
|
||
var _a = dom_1.getCoordinateWithOffset(ev.pageX, ev.pageY), pageX = _a[0], pageY = _a[1];
|
||
_this.props.dispatch('dragMoveRowHeader', { pageX: pageX, pageY: pageY });
|
||
};
|
||
_this.handleMouseDown = function (name, rowKey) {
|
||
if (!column_1.isRowNumColumn(name)) {
|
||
return;
|
||
}
|
||
_this.props.dispatch('mouseDownRowHeader', rowKey);
|
||
document.addEventListener('mousemove', _this.handleMouseMove);
|
||
document.addEventListener('mouseup', _this.clearDocumentEvents);
|
||
document.addEventListener('selectstart', _this.handleSelectStart);
|
||
};
|
||
_this.clearDocumentEvents = function () {
|
||
_this.props.dispatch('dragEnd');
|
||
dom_1.setCursorStyle('');
|
||
document.removeEventListener('mousemove', _this.handleMouseMove);
|
||
document.removeEventListener('mouseup', _this.clearDocumentEvents);
|
||
document.removeEventListener('selectstart', _this.handleSelectStart);
|
||
};
|
||
_this.handleSelectStart = function (ev) {
|
||
ev.preventDefault();
|
||
};
|
||
return _this;
|
||
}
|
||
BodyCellComp.prototype.componentDidMount = function () {
|
||
var _a = this.props, grid = _a.grid, rowKey = _a.rowKey, renderData = _a.renderData, columnInfo = _a.columnInfo;
|
||
// eslint-disable-next-line new-cap
|
||
this.renderer = new columnInfo.renderer.type(tslib_1.__assign({ grid: grid,
|
||
rowKey: rowKey,
|
||
columnInfo: columnInfo }, renderData));
|
||
var rendererEl = this.renderer.getElement();
|
||
this.el.appendChild(rendererEl);
|
||
if (this.renderer.mounted) {
|
||
this.renderer.mounted(this.el);
|
||
}
|
||
this.calculateRowHeight(this.props);
|
||
};
|
||
BodyCellComp.prototype.shouldComponentUpdate = function (nextProps) {
|
||
return !common_1.shallowEqual(this.props, nextProps);
|
||
};
|
||
BodyCellComp.prototype.componentWillReceiveProps = function (nextProps) {
|
||
var viewRow = nextProps.viewRow, renderData = nextProps.renderData, columnInfo = nextProps.columnInfo, rowKey = nextProps.rowKey, grid = nextProps.grid, columnWidths = nextProps.columnWidths;
|
||
var _a = this.props, prevViewRow = _a.viewRow, prevRenderData = _a.renderData, prevColumnWidth = _a.columnWidths;
|
||
if ((prevRenderData !== renderData ||
|
||
viewRow.uniqueKey !== prevViewRow.uniqueKey ||
|
||
columnWidths !== prevColumnWidth) &&
|
||
this.renderer &&
|
||
common_1.isFunction(this.renderer.render)) {
|
||
this.renderer.render(tslib_1.__assign({ grid: grid,
|
||
rowKey: rowKey,
|
||
columnInfo: columnInfo }, renderData));
|
||
this.calculateRowHeight(nextProps);
|
||
}
|
||
};
|
||
BodyCellComp.prototype.componentWillUnmount = function () {
|
||
if (this.renderer && common_1.isFunction(this.renderer.beforeDestroy)) {
|
||
this.renderer.beforeDestroy();
|
||
}
|
||
};
|
||
BodyCellComp.prototype.calculateRowHeight = function (props) {
|
||
var _this = this;
|
||
var rowIndex = props.rowIndex, columnInfo = props.columnInfo, refreshRowHeight = props.refreshRowHeight, defaultRowHeight = props.defaultRowHeight, dispatch = props.dispatch, cellBorderWidth = props.cellBorderWidth;
|
||
if (refreshRowHeight) {
|
||
// In Preact, the componentDidMount is called before the DOM elements are actually mounted.
|
||
// https://github.com/preactjs/preact/issues/648
|
||
// Use setTimeout to wait until the DOM element is actually mounted
|
||
// - If the width of grid is 'auto' actual width of grid is calculated from the
|
||
// Container component using setTimeout(fn, 0)
|
||
// - Delay 16ms for defer the function call later than the Container component.
|
||
window.setTimeout(function () {
|
||
var height = _this.renderer.getElement().clientHeight + cellBorderWidth;
|
||
dispatch('setCellHeight', columnInfo.name, rowIndex, height, defaultRowHeight);
|
||
refreshRowHeight(height);
|
||
}, 16);
|
||
}
|
||
};
|
||
BodyCellComp.prototype.render = function () {
|
||
var _a;
|
||
var _this = this;
|
||
var _b = this.props, rowKey = _b.rowKey, _c = _b.renderData, disabled = _c.disabled, editable = _c.editable, invalidStates = _c.invalidStates, className = _c.className, _d = _b.columnInfo, align = _d.align, valign = _d.valign, name = _d.name, _e = _d.validation, validation = _e === void 0 ? {} : _e, treeInfo = _b.treeInfo, selectedRow = _b.selectedRow, rowSpanAttr = _b.rowSpanAttr;
|
||
var style = {
|
||
textAlign: align,
|
||
verticalAlign: valign,
|
||
};
|
||
var attrs = (_a = {},
|
||
_a[dom_1.dataAttr.ROW_KEY] = String(rowKey),
|
||
_a[dom_1.dataAttr.COLUMN_NAME] = name,
|
||
_a);
|
||
var classNames = dom_1.cls('cell', 'cell-has-input', [editable, 'cell-editable'], [column_1.isRowHeader(name), 'cell-row-header'], [validation.required || false, 'cell-required'], [!!invalidStates.length, 'cell-invalid'], [disabled, 'cell-disabled'], [!!treeInfo, 'cell-has-tree'], [column_1.isRowHeader(name) && selectedRow, 'cell-selected']) + " " + className;
|
||
return treeInfo ? (preact_1.h("td", tslib_1.__assign({}, attrs, { style: style, class: classNames }),
|
||
preact_1.h("div", { class: dom_1.cls('tree-wrapper-relative') },
|
||
preact_1.h("div", { class: dom_1.cls('tree-wrapper-valign-center'), style: { paddingLeft: treeInfo.indentWidth }, ref: function (el) {
|
||
_this.el = el;
|
||
} },
|
||
preact_1.h(treeCellContents_1.TreeCellContents, { treeInfo: treeInfo, rowKey: rowKey }))))) : (preact_1.h("td", tslib_1.__assign({}, attrs, rowSpanAttr, { style: style, class: classNames, ref: function (el) {
|
||
_this.el = el;
|
||
}, onMouseDown: function () { return _this.handleMouseDown(name, rowKey); } })));
|
||
};
|
||
return BodyCellComp;
|
||
}(preact_1.Component));
|
||
exports.BodyCellComp = BodyCellComp;
|
||
exports.BodyCell = hoc_1.connect(function (_a, _b) {
|
||
var id = _a.id, column = _a.column, selection = _a.selection, dimension = _a.dimension, columnCoords = _a.columnCoords;
|
||
var viewRow = _b.viewRow, columnInfo = _b.columnInfo, rowIndex = _b.rowIndex;
|
||
var rowKey = viewRow.rowKey, valueMap = viewRow.valueMap, treeInfo = viewRow.treeInfo;
|
||
var treeColumnName = column.treeColumnName;
|
||
var grid = instance_1.getInstance(id);
|
||
var range = selection.range;
|
||
var columnName = columnInfo.name;
|
||
var defaultRowHeight = dimension.rowHeight, cellBorderWidth = dimension.cellBorderWidth;
|
||
return tslib_1.__assign(tslib_1.__assign({ grid: grid,
|
||
rowKey: rowKey,
|
||
columnInfo: columnInfo, columnWidths: columnCoords.widths, defaultRowHeight: defaultRowHeight, renderData: (valueMap && valueMap[columnName]) || { invalidStates: [] } }, (columnName === treeColumnName ? { treeInfo: treeInfo } : null)), { selectedRow: range ? rowIndex >= range.row[0] && rowIndex <= range.row[1] : false, cellBorderWidth: cellBorderWidth });
|
||
})(BodyCellComp);
|
||
|
||
|
||
/***/ }),
|
||
/* 101 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.TreeCellContents = exports.TreeCellContentsComp = void 0;
|
||
var tslib_1 = __webpack_require__(1);
|
||
var preact_1 = __webpack_require__(3);
|
||
var dom_1 = __webpack_require__(2);
|
||
var hoc_1 = __webpack_require__(4);
|
||
var constant_1 = __webpack_require__(11);
|
||
var TreeCellContentsComp = /** @class */ (function (_super) {
|
||
tslib_1.__extends(TreeCellContentsComp, _super);
|
||
function TreeCellContentsComp() {
|
||
var _this = _super !== null && _super.apply(this, arguments) || this;
|
||
_this.handleClick = function (ev) {
|
||
ev.stopPropagation();
|
||
var _a = _this.props, dispatch = _a.dispatch, rowKey = _a.rowKey;
|
||
var target = ev.target;
|
||
if (dom_1.findParentByClassName(target, 'tree-button-collapse')) {
|
||
dispatch('expandByRowKey', rowKey, false);
|
||
}
|
||
else if (dom_1.findParentByClassName(target, 'tree-button-expand')) {
|
||
dispatch('collapseByRowKey', rowKey, false);
|
||
}
|
||
};
|
||
return _this;
|
||
}
|
||
TreeCellContentsComp.prototype.getIndentComponent = function (depth, leaf) {
|
||
var indentItem = [];
|
||
for (var i = 0, len = depth; i < len; i += 1) {
|
||
indentItem.push(preact_1.h("span", { class: dom_1.cls('tree-depth') }, i === len - 1 && !leaf && (preact_1.h("button", { class: dom_1.cls('btn-tree'), style: { left: i * this.props.treeIndentWidth }, onClick: this.handleClick, type: "button" },
|
||
preact_1.h("i", null)))));
|
||
}
|
||
return indentItem;
|
||
};
|
||
TreeCellContentsComp.prototype.render = function () {
|
||
var _a = this.props, depth = _a.depth, indentWidth = _a.indentWidth, leaf = _a.leaf, expanded = _a.expanded, useIcon = _a.useIcon;
|
||
return (preact_1.h("div", { class: dom_1.cls('tree-extra-content', [!leaf && expanded, 'tree-button-expand'], [!leaf && !expanded, 'tree-button-collapse']) },
|
||
this.getIndentComponent(depth, leaf),
|
||
useIcon && (preact_1.h("span", { class: dom_1.cls('tree-icon'), style: { left: indentWidth - constant_1.TREE_INDENT_WIDTH } },
|
||
preact_1.h("i", null)))));
|
||
};
|
||
return TreeCellContentsComp;
|
||
}(preact_1.Component));
|
||
exports.TreeCellContentsComp = TreeCellContentsComp;
|
||
exports.TreeCellContents = hoc_1.connect(function (_a, _b) {
|
||
var column = _a.column;
|
||
var treeInfo = _b.treeInfo, rowKey = _b.rowKey;
|
||
var _c = column.treeIcon, useIcon = _c === void 0 ? true : _c, _d = column.treeIndentWidth, treeIndentWidth = _d === void 0 ? constant_1.TREE_INDENT_WIDTH : _d;
|
||
var depth = treeInfo.depth, indentWidth = treeInfo.indentWidth, leaf = treeInfo.leaf, _e = treeInfo.expanded, expanded = _e === void 0 ? false : _e;
|
||
return {
|
||
rowKey: rowKey,
|
||
depth: depth,
|
||
indentWidth: indentWidth,
|
||
leaf: leaf,
|
||
expanded: expanded,
|
||
useIcon: useIcon,
|
||
treeIndentWidth: treeIndentWidth,
|
||
};
|
||
})(TreeCellContentsComp);
|
||
|
||
|
||
/***/ }),
|
||
/* 102 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.BodyDummyRow = void 0;
|
||
var tslib_1 = __webpack_require__(1);
|
||
var preact_1 = __webpack_require__(3);
|
||
var hoc_1 = __webpack_require__(4);
|
||
var dom_1 = __webpack_require__(2);
|
||
var column_1 = __webpack_require__(10);
|
||
var BodyDummyRowComp = function (_a) {
|
||
var columnNames = _a.columnNames, rowHeight = _a.rowHeight, index = _a.index;
|
||
var isOddRow = index % 2 === 0;
|
||
return (preact_1.h("tr", { style: { height: rowHeight }, class: dom_1.cls([isOddRow, 'row-odd'], [!isOddRow, 'row-even']) }, columnNames.map(function (name) {
|
||
var _a;
|
||
var attrs = (_a = {}, _a[dom_1.dataAttr.COLUMN_NAME] = name, _a);
|
||
return (preact_1.h("td", tslib_1.__assign({}, attrs, { key: name + "-" + index, class: dom_1.cls('cell', 'cell-dummy', [column_1.isRowHeader(name), 'cell-row-header']) })));
|
||
})));
|
||
};
|
||
exports.BodyDummyRow = hoc_1.connect(function (_a) {
|
||
var rowHeight = _a.dimension.rowHeight;
|
||
return ({
|
||
rowHeight: rowHeight,
|
||
});
|
||
})(BodyDummyRowComp);
|
||
|
||
|
||
/***/ }),
|
||
/* 103 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.FocusLayer = void 0;
|
||
var tslib_1 = __webpack_require__(1);
|
||
var preact_1 = __webpack_require__(3);
|
||
var dom_1 = __webpack_require__(2);
|
||
var hoc_1 = __webpack_require__(4);
|
||
var FocusLayerComp = /** @class */ (function (_super) {
|
||
tslib_1.__extends(FocusLayerComp, _super);
|
||
function FocusLayerComp() {
|
||
return _super !== null && _super.apply(this, arguments) || this;
|
||
}
|
||
FocusLayerComp.prototype.render = function () {
|
||
var _a = this.props, active = _a.active, cellPosRect = _a.cellPosRect, cellBorderWidth = _a.cellBorderWidth;
|
||
if (cellPosRect === null) {
|
||
return null;
|
||
}
|
||
var top = cellPosRect.top, left = cellPosRect.left, right = cellPosRect.right, bottom = cellPosRect.bottom;
|
||
var height = bottom - top;
|
||
var width = right - left;
|
||
var leftStyle = {
|
||
top: top,
|
||
left: left,
|
||
width: cellBorderWidth,
|
||
height: height + cellBorderWidth,
|
||
};
|
||
var topStyle = {
|
||
top: top === 0 ? cellBorderWidth : top,
|
||
left: left,
|
||
width: width + cellBorderWidth,
|
||
height: cellBorderWidth,
|
||
};
|
||
var rightStyle = {
|
||
top: top,
|
||
left: left + width,
|
||
width: cellBorderWidth,
|
||
height: height + cellBorderWidth,
|
||
};
|
||
var bottomStyle = {
|
||
top: top + height,
|
||
left: left,
|
||
width: width + cellBorderWidth,
|
||
height: cellBorderWidth,
|
||
};
|
||
return (preact_1.h("div", { class: dom_1.cls('layer-focus', [!active, 'layer-focus-deactive']) },
|
||
preact_1.h("div", { class: dom_1.cls('layer-focus-border'), style: leftStyle }),
|
||
preact_1.h("div", { class: dom_1.cls('layer-focus-border'), style: topStyle }),
|
||
preact_1.h("div", { class: dom_1.cls('layer-focus-border'), style: rightStyle }),
|
||
preact_1.h("div", { class: dom_1.cls('layer-focus-border'), style: bottomStyle })));
|
||
};
|
||
return FocusLayerComp;
|
||
}(preact_1.Component));
|
||
exports.FocusLayer = hoc_1.connect(function (_a, _b) {
|
||
var focus = _a.focus, dimension = _a.dimension;
|
||
var side = _b.side;
|
||
var cellPosRect = focus.cellPosRect, editingAddress = focus.editingAddress, navigating = focus.navigating;
|
||
return {
|
||
active: !!editingAddress || navigating,
|
||
cellPosRect: side === focus.side ? cellPosRect : null,
|
||
cellBorderWidth: dimension.cellBorderWidth,
|
||
};
|
||
})(FocusLayerComp);
|
||
|
||
|
||
/***/ }),
|
||
/* 104 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.SelectionLayer = void 0;
|
||
var tslib_1 = __webpack_require__(1);
|
||
var preact_1 = __webpack_require__(3);
|
||
var dom_1 = __webpack_require__(2);
|
||
var hoc_1 = __webpack_require__(4);
|
||
var SelectionLayerComp = /** @class */ (function (_super) {
|
||
tslib_1.__extends(SelectionLayerComp, _super);
|
||
function SelectionLayerComp() {
|
||
var _this = _super !== null && _super.apply(this, arguments) || this;
|
||
_this.handleMouseMove = function (ev) {
|
||
var dispatch = _this.props.dispatch;
|
||
var pageX = ev.pageX, pageY = ev.pageY;
|
||
dispatch('setHoveredRowKeyByPosition', { pageX: pageX, pageY: pageY });
|
||
};
|
||
return _this;
|
||
}
|
||
SelectionLayerComp.prototype.render = function () {
|
||
var styles = this.props.styles;
|
||
return (preact_1.h("div", { onMouseMove: this.handleMouseMove }, !!styles && preact_1.h("div", { class: dom_1.cls('layer-selection'), style: styles })));
|
||
};
|
||
return SelectionLayerComp;
|
||
}(preact_1.Component));
|
||
exports.SelectionLayer = hoc_1.connect(function (_a, _b) {
|
||
var rangeAreaInfo = _a.selection.rangeAreaInfo;
|
||
var side = _b.side;
|
||
var styles = rangeAreaInfo && rangeAreaInfo[side];
|
||
return { styles: styles };
|
||
})(SelectionLayerComp);
|
||
|
||
|
||
/***/ }),
|
||
/* 105 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.EditingLayer = exports.EditingLayerComp = void 0;
|
||
var tslib_1 = __webpack_require__(1);
|
||
var preact_1 = __webpack_require__(3);
|
||
var hoc_1 = __webpack_require__(4);
|
||
var dom_1 = __webpack_require__(2);
|
||
var keyboard_1 = __webpack_require__(17);
|
||
var common_1 = __webpack_require__(0);
|
||
var instance_1 = __webpack_require__(8);
|
||
var EditingLayerComp = /** @class */ (function (_super) {
|
||
tslib_1.__extends(EditingLayerComp, _super);
|
||
function EditingLayerComp() {
|
||
var _this = _super !== null && _super.apply(this, arguments) || this;
|
||
_this.initBodyScrollPos = { initBodyScrollTop: 0, initBodyScrollLeft: 0 };
|
||
_this.handleKeyDown = function (ev) {
|
||
var keyName = keyboard_1.getKeyStrokeString(ev);
|
||
switch (keyName) {
|
||
case 'enter':
|
||
_this.saveAndFinishEditing(true);
|
||
break;
|
||
case 'esc':
|
||
_this.cancelEditing();
|
||
break;
|
||
case 'tab':
|
||
_this.moveTabFocus(ev, 'nextCell');
|
||
break;
|
||
case 'shift-tab':
|
||
_this.moveTabFocus(ev, 'prevCell');
|
||
break;
|
||
default:
|
||
// do nothing;
|
||
}
|
||
};
|
||
return _this;
|
||
}
|
||
EditingLayerComp.prototype.moveTabFocus = function (ev, command) {
|
||
var dispatch = this.props.dispatch;
|
||
ev.preventDefault();
|
||
dispatch('moveTabFocus', command);
|
||
dispatch('setScrollToFocus');
|
||
};
|
||
EditingLayerComp.prototype.getEditingCellInfo = function () {
|
||
var _a = this.props.editingAddress, rowKey = _a.rowKey, columnName = _a.columnName;
|
||
var value = this.editor.getValue();
|
||
return { rowKey: rowKey, columnName: columnName, value: value };
|
||
};
|
||
EditingLayerComp.prototype.cancelEditing = function () {
|
||
var _a = this.getEditingCellInfo(), rowKey = _a.rowKey, columnName = _a.columnName, value = _a.value;
|
||
this.props.dispatch('finishEditing', rowKey, columnName, value, {
|
||
save: false,
|
||
triggeredByKey: true,
|
||
});
|
||
};
|
||
EditingLayerComp.prototype.saveAndFinishEditing = function (triggeredByKey) {
|
||
if (triggeredByKey === void 0) { triggeredByKey = false; }
|
||
var _a = this.props, dispatch = _a.dispatch, active = _a.active;
|
||
if (this.editor && active) {
|
||
var _b = this.getEditingCellInfo(), rowKey = _b.rowKey, columnName = _b.columnName, value = _b.value;
|
||
dispatch('setValue', rowKey, columnName, value);
|
||
dispatch('finishEditing', rowKey, columnName, value, { save: true, triggeredByKey: triggeredByKey });
|
||
}
|
||
};
|
||
EditingLayerComp.prototype.setInitScrollPos = function () {
|
||
var _a = this.props, bodyScrollTop = _a.bodyScrollTop, bodyScrollLeft = _a.bodyScrollLeft;
|
||
this.initBodyScrollPos = {
|
||
initBodyScrollTop: bodyScrollTop,
|
||
initBodyScrollLeft: bodyScrollLeft,
|
||
};
|
||
};
|
||
EditingLayerComp.prototype.createEditor = function () {
|
||
var _this = this;
|
||
var _a = this.props, allColumnMap = _a.allColumnMap, filteredViewData = _a.filteredViewData, editingAddress = _a.editingAddress, grid = _a.grid, cellPosRect = _a.cellPosRect;
|
||
var _b = editingAddress, rowKey = _b.rowKey, columnName = _b.columnName;
|
||
var _c = cellPosRect, right = _c.right, left = _c.left;
|
||
var columnInfo = allColumnMap[columnName];
|
||
var _d = common_1.findProp('rowKey', rowKey, filteredViewData).valueMap[columnName], value = _d.value, formattedValue = _d.formattedValue;
|
||
var EditorClass = columnInfo.editor.type;
|
||
var editorProps = {
|
||
grid: grid,
|
||
rowKey: rowKey,
|
||
columnInfo: columnInfo,
|
||
value: value,
|
||
formattedValue: formattedValue,
|
||
width: right - left,
|
||
portalEditingKeydown: this.handleKeyDown,
|
||
};
|
||
var cellEditor = new EditorClass(editorProps);
|
||
var editorEl = cellEditor.getElement();
|
||
if (editorEl && this.contentEl) {
|
||
this.contentEl.appendChild(editorEl);
|
||
this.editor = cellEditor;
|
||
if (cellEditor.mounted) {
|
||
// To access the actual mounted DOM elements
|
||
setTimeout(function () {
|
||
cellEditor.mounted();
|
||
_this.setInitScrollPos();
|
||
});
|
||
}
|
||
}
|
||
};
|
||
EditingLayerComp.prototype.componentDidUpdate = function (prevProps) {
|
||
var _a;
|
||
var _b = this.props, active = _b.active, editingAddress = _b.editingAddress, focusedColumnName = _b.focusedColumnName, bodyHeight = _b.bodyHeight, bodyWidth = _b.bodyWidth, bodyScrollTop = _b.bodyScrollTop, bodyScrollLeft = _b.bodyScrollLeft, headerHeight = _b.headerHeight, leftSideWidth = _b.leftSideWidth;
|
||
if (!prevProps.active && active && (editingAddress === null || editingAddress === void 0 ? void 0 : editingAddress.columnName) === focusedColumnName) {
|
||
this.createEditor();
|
||
}
|
||
if ((_a = this.editor) === null || _a === void 0 ? void 0 : _a.moveDropdownLayer) {
|
||
this.editor.moveDropdownLayer(tslib_1.__assign({ bodyHeight: bodyHeight,
|
||
bodyWidth: bodyWidth,
|
||
bodyScrollTop: bodyScrollTop,
|
||
bodyScrollLeft: bodyScrollLeft,
|
||
headerHeight: headerHeight,
|
||
leftSideWidth: leftSideWidth }, this.initBodyScrollPos));
|
||
}
|
||
};
|
||
EditingLayerComp.prototype.componentWillReceiveProps = function (nextProps) {
|
||
var _a, _b;
|
||
var _c = this.props, prevFocusedColumnName = _c.focusedColumnName, prevFocusedRowKey = _c.focusedRowKey, prevActive = _c.active;
|
||
var focusedColumnName = nextProps.focusedColumnName, focusedRowKey = nextProps.focusedRowKey, active = nextProps.active, forcedDestroyEditing = nextProps.forcedDestroyEditing;
|
||
if ((prevActive && !active && forcedDestroyEditing) ||
|
||
(prevActive &&
|
||
(focusedColumnName !== prevFocusedColumnName || focusedRowKey !== prevFocusedRowKey))) {
|
||
this.saveAndFinishEditing();
|
||
}
|
||
if (prevActive && !active) {
|
||
// eslint-disable-next-line no-unused-expressions
|
||
(_b = (_a = this.editor) === null || _a === void 0 ? void 0 : _a.beforeDestroy) === null || _b === void 0 ? void 0 : _b.call(_a);
|
||
}
|
||
};
|
||
EditingLayerComp.prototype.render = function (_a) {
|
||
var _this = this;
|
||
var active = _a.active, cellPosRect = _a.cellPosRect, cellBorderWidth = _a.cellBorderWidth;
|
||
if (!active) {
|
||
return null;
|
||
}
|
||
var _b = cellPosRect, top = _b.top, left = _b.left, right = _b.right, bottom = _b.bottom;
|
||
var height = bottom - top;
|
||
var width = right - left;
|
||
var editorStyles = {
|
||
top: top ? top : cellBorderWidth,
|
||
left: left,
|
||
width: width + cellBorderWidth,
|
||
height: top ? height + cellBorderWidth : height,
|
||
lineHeight: top ? height - cellBorderWidth + "px" : height - cellBorderWidth * 2 + "px",
|
||
};
|
||
return (preact_1.h("div", { style: editorStyles, className: dom_1.cls('layer-editing', 'cell-content', 'cell-content-editor'), onKeyDown: this.handleKeyDown, ref: function (el) {
|
||
_this.contentEl = el;
|
||
} }));
|
||
};
|
||
return EditingLayerComp;
|
||
}(preact_1.Component));
|
||
exports.EditingLayerComp = EditingLayerComp;
|
||
exports.EditingLayer = hoc_1.connect(function (store, _a) {
|
||
var side = _a.side;
|
||
var data = store.data, column = store.column, id = store.id, focus = store.focus, dimension = store.dimension, viewport = store.viewport, columnCoords = store.columnCoords;
|
||
var editingAddress = focus.editingAddress, focusSide = focus.side, focusedRowKey = focus.rowKey, focusedColumnName = focus.columnName, forcedDestroyEditing = focus.forcedDestroyEditing, cellPosRect = focus.cellPosRect;
|
||
var scrollTop = viewport.scrollTop, scrollLeft = viewport.scrollLeft;
|
||
var cellBorderWidth = dimension.cellBorderWidth, bodyHeight = dimension.bodyHeight, width = dimension.width, scrollXHeight = dimension.scrollXHeight, scrollYWidth = dimension.scrollYWidth, headerHeight = dimension.headerHeight;
|
||
return {
|
||
grid: instance_1.getInstance(id),
|
||
active: side === focusSide && !common_1.isNull(editingAddress),
|
||
focusedRowKey: focusedRowKey,
|
||
focusedColumnName: focusedColumnName,
|
||
forcedDestroyEditing: forcedDestroyEditing,
|
||
cellPosRect: cellPosRect,
|
||
cellBorderWidth: cellBorderWidth,
|
||
editingAddress: editingAddress,
|
||
filteredViewData: data.filteredViewData,
|
||
allColumnMap: column.allColumnMap,
|
||
bodyScrollTop: scrollTop,
|
||
bodyScrollLeft: scrollLeft,
|
||
bodyHeight: bodyHeight - scrollXHeight,
|
||
bodyWidth: width - scrollYWidth,
|
||
headerHeight: headerHeight,
|
||
leftSideWidth: side === 'L' ? 0 : columnCoords.areaWidth.L,
|
||
};
|
||
}, true)(EditingLayerComp);
|
||
|
||
|
||
/***/ }),
|
||
/* 106 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.SummaryBodyRow = void 0;
|
||
var tslib_1 = __webpack_require__(1);
|
||
var preact_1 = __webpack_require__(3);
|
||
var summaryBodyCell_1 = __webpack_require__(107);
|
||
var common_1 = __webpack_require__(0);
|
||
var SummaryBodyRow = /** @class */ (function (_super) {
|
||
tslib_1.__extends(SummaryBodyRow, _super);
|
||
function SummaryBodyRow() {
|
||
return _super !== null && _super.apply(this, arguments) || this;
|
||
}
|
||
SummaryBodyRow.prototype.shouldComponentUpdate = function (nextProps) {
|
||
return !common_1.shallowEqual(nextProps, this.props);
|
||
};
|
||
SummaryBodyRow.prototype.render = function (_a) {
|
||
var columns = _a.columns;
|
||
var columnNames = columns.map(function (_a) {
|
||
var name = _a.name;
|
||
return name;
|
||
});
|
||
return (preact_1.h("tbody", null,
|
||
preact_1.h("tr", null, columnNames.map(function (name) { return (preact_1.h(summaryBodyCell_1.SummaryBodyCell, { key: name, columnName: name })); }))));
|
||
};
|
||
return SummaryBodyRow;
|
||
}(preact_1.Component));
|
||
exports.SummaryBodyRow = SummaryBodyRow;
|
||
|
||
|
||
/***/ }),
|
||
/* 107 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.SummaryBodyCell = exports.SummaryBodyCellComp = void 0;
|
||
var tslib_1 = __webpack_require__(1);
|
||
var preact_1 = __webpack_require__(3);
|
||
var dom_1 = __webpack_require__(2);
|
||
var common_1 = __webpack_require__(0);
|
||
var hoc_1 = __webpack_require__(4);
|
||
var column_1 = __webpack_require__(10);
|
||
var SummaryBodyCellComp = /** @class */ (function (_super) {
|
||
tslib_1.__extends(SummaryBodyCellComp, _super);
|
||
function SummaryBodyCellComp() {
|
||
var _this = _super !== null && _super.apply(this, arguments) || this;
|
||
_this.getTemplate = function () {
|
||
var _a = _this.props, content = _a.content, summaryValue = _a.summaryValue, columnName = _a.columnName;
|
||
if (!content || column_1.isRowHeader(columnName)) {
|
||
return '';
|
||
}
|
||
var template = content.template;
|
||
return typeof template === 'string' ? template : template(summaryValue);
|
||
};
|
||
return _this;
|
||
}
|
||
SummaryBodyCellComp.prototype.shouldComponentUpdate = function (nextProps) {
|
||
return !common_1.shallowEqual(nextProps, this.props);
|
||
};
|
||
SummaryBodyCellComp.prototype.render = function () {
|
||
var _a;
|
||
var columnName = this.props.columnName;
|
||
var attrs = (_a = {}, _a[dom_1.dataAttr.COLUMN_NAME] = columnName, _a);
|
||
var template = this.getTemplate();
|
||
return (preact_1.h("td", tslib_1.__assign({ class: dom_1.cls('cell', 'cell-summary'), dangerouslySetInnerHTML: { __html: template } }, attrs)));
|
||
};
|
||
return SummaryBodyCellComp;
|
||
}(preact_1.Component));
|
||
exports.SummaryBodyCellComp = SummaryBodyCellComp;
|
||
exports.SummaryBodyCell = hoc_1.connect(function (_a, _b) {
|
||
var summary = _a.summary;
|
||
var columnName = _b.columnName;
|
||
var summaryColumnContents = summary.summaryColumnContents, summaryValues = summary.summaryValues;
|
||
var content = summaryColumnContents[columnName];
|
||
var summaryValue = summaryValues[columnName];
|
||
return { content: content, summaryValue: summaryValue };
|
||
})(SummaryBodyCellComp);
|
||
|
||
|
||
/***/ }),
|
||
/* 108 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.RightSide = void 0;
|
||
var tslib_1 = __webpack_require__(1);
|
||
var preact_1 = __webpack_require__(3);
|
||
var dom_1 = __webpack_require__(2);
|
||
var bodyArea_1 = __webpack_require__(54);
|
||
var headerArea_1 = __webpack_require__(51);
|
||
var summaryArea_1 = __webpack_require__(55);
|
||
var hoc_1 = __webpack_require__(4);
|
||
var RightSideComp = /** @class */ (function (_super) {
|
||
tslib_1.__extends(RightSideComp, _super);
|
||
function RightSideComp() {
|
||
return _super !== null && _super.apply(this, arguments) || this;
|
||
}
|
||
RightSideComp.prototype.renderScrollbarYInnerBorder = function () {
|
||
var _a = this.props, cornerTopHeight = _a.cornerTopHeight, bodyHeight = _a.bodyHeight, scrollXHeight = _a.scrollXHeight;
|
||
var style = {
|
||
top: cornerTopHeight,
|
||
height: bodyHeight - scrollXHeight,
|
||
};
|
||
return preact_1.h("div", { class: dom_1.cls('scrollbar-y-inner-border'), style: style });
|
||
};
|
||
RightSideComp.prototype.renderScrollbarRightTop = function () {
|
||
var style = { height: this.props.cornerTopHeight };
|
||
return preact_1.h("div", { class: dom_1.cls('scrollbar-right-top'), style: style });
|
||
};
|
||
RightSideComp.prototype.renderScrollbarYOuterBorder = function () {
|
||
return preact_1.h("div", { class: dom_1.cls('scrollbar-y-outer-border') });
|
||
};
|
||
RightSideComp.prototype.renderScrollbarRightBottom = function () {
|
||
var style = { height: this.props.cornerBottomHeight };
|
||
return preact_1.h("div", { class: dom_1.cls('scrollbar-right-bottom'), style: style });
|
||
};
|
||
RightSideComp.prototype.renderScrollbarFrozenBorder = function () {
|
||
var _a = this.props, scrollXHeight = _a.scrollXHeight, frozenBorderWidth = _a.frozenBorderWidth, cellBorderWidth = _a.cellBorderWidth;
|
||
var style = {
|
||
height: scrollXHeight,
|
||
width: frozenBorderWidth,
|
||
marginLeft: frozenBorderWidth ? -(frozenBorderWidth + cellBorderWidth) : 0,
|
||
};
|
||
return preact_1.h("div", { class: dom_1.cls('scrollbar-frozen-border'), style: style });
|
||
};
|
||
RightSideComp.prototype.renderFrozenBorder = function () {
|
||
var frozenBorderWidth = this.props.frozenBorderWidth;
|
||
var style = {
|
||
marginLeft: -frozenBorderWidth,
|
||
width: frozenBorderWidth,
|
||
};
|
||
return preact_1.h("div", { class: dom_1.cls('frozen-border'), style: style });
|
||
};
|
||
RightSideComp.prototype.render = function () {
|
||
var _a = this.props, marginLeft = _a.marginLeft, width = _a.width, summaryPosition = _a.summaryPosition, scrollY = _a.scrollY, scrollX = _a.scrollX, frozenBorderWidth = _a.frozenBorderWidth;
|
||
var style = {
|
||
display: 'block',
|
||
marginLeft: marginLeft,
|
||
width: width,
|
||
};
|
||
return (preact_1.h("div", { class: dom_1.cls('rside-area'), style: style },
|
||
preact_1.h(headerArea_1.HeaderArea, { side: "R" }),
|
||
summaryPosition === 'top' && preact_1.h(summaryArea_1.SummaryArea, { side: "R" }),
|
||
preact_1.h(bodyArea_1.BodyArea, { side: "R" }),
|
||
summaryPosition === 'bottom' && preact_1.h(summaryArea_1.SummaryArea, { side: "R" }),
|
||
scrollY && this.renderScrollbarYInnerBorder(),
|
||
scrollY && this.renderScrollbarYOuterBorder(),
|
||
scrollY && this.renderScrollbarRightTop(),
|
||
scrollX && this.renderScrollbarFrozenBorder(),
|
||
(scrollX || scrollY) && this.renderScrollbarRightBottom(),
|
||
!!frozenBorderWidth && this.renderFrozenBorder()));
|
||
};
|
||
return RightSideComp;
|
||
}(preact_1.Component));
|
||
exports.RightSide = hoc_1.connect(function (_a) {
|
||
var dimension = _a.dimension, columnCoords = _a.columnCoords;
|
||
var scrollbarWidth = dimension.scrollbarWidth, scrollX = dimension.scrollX, scrollY = dimension.scrollY, summaryHeight = dimension.summaryHeight, headerHeight = dimension.headerHeight, cellBorderWidth = dimension.cellBorderWidth, tableBorderWidth = dimension.tableBorderWidth, bodyHeight = dimension.bodyHeight, summaryPosition = dimension.summaryPosition, frozenBorderWidth = dimension.frozenBorderWidth;
|
||
var cornerTopHeight = headerHeight;
|
||
var cornerBottomHeight = scrollX ? scrollbarWidth : 0;
|
||
if (scrollY && summaryHeight) {
|
||
if (summaryPosition === 'top') {
|
||
cornerTopHeight += summaryHeight + tableBorderWidth;
|
||
}
|
||
else {
|
||
cornerBottomHeight += summaryHeight;
|
||
}
|
||
}
|
||
var scrollXHeight = scrollX ? scrollbarWidth : 0;
|
||
var width = columnCoords.areaWidth.R;
|
||
var marginLeft = columnCoords.areaWidth.L + frozenBorderWidth;
|
||
if (marginLeft && !frozenBorderWidth) {
|
||
marginLeft -= cellBorderWidth;
|
||
width += cellBorderWidth;
|
||
}
|
||
return {
|
||
width: width,
|
||
marginLeft: marginLeft,
|
||
cornerTopHeight: cornerTopHeight,
|
||
cornerBottomHeight: cornerBottomHeight,
|
||
scrollXHeight: scrollXHeight,
|
||
bodyHeight: bodyHeight,
|
||
cellBorderWidth: cellBorderWidth,
|
||
frozenBorderWidth: frozenBorderWidth,
|
||
summaryPosition: summaryPosition,
|
||
scrollX: scrollX,
|
||
scrollY: scrollY,
|
||
};
|
||
})(RightSideComp);
|
||
|
||
|
||
/***/ }),
|
||
/* 109 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.StateLayer = void 0;
|
||
var tslib_1 = __webpack_require__(1);
|
||
var preact_1 = __webpack_require__(3);
|
||
var dom_1 = __webpack_require__(2);
|
||
var hoc_1 = __webpack_require__(4);
|
||
var i18n_1 = tslib_1.__importDefault(__webpack_require__(19));
|
||
var StateLayerComp = /** @class */ (function (_super) {
|
||
tslib_1.__extends(StateLayerComp, _super);
|
||
function StateLayerComp() {
|
||
return _super !== null && _super.apply(this, arguments) || this;
|
||
}
|
||
StateLayerComp.prototype.render = function (_a) {
|
||
var loadingState = _a.loadingState, top = _a.top, height = _a.height, left = _a.left, right = _a.right;
|
||
var display = loadingState === 'DONE' ? 'none' : 'block';
|
||
var layerStyle = { display: display, top: top, height: height, left: left, right: right };
|
||
var message = null;
|
||
if (loadingState === 'EMPTY') {
|
||
message = i18n_1.default.get('display.noData');
|
||
}
|
||
else if (loadingState === 'LOADING') {
|
||
message = i18n_1.default.get('display.loadingData');
|
||
}
|
||
return (preact_1.h("div", { class: dom_1.cls('layer-state'), style: layerStyle },
|
||
preact_1.h("div", { class: dom_1.cls('layer-state-content') },
|
||
preact_1.h("p", null, message),
|
||
loadingState === 'LOADING' && preact_1.h("div", { class: dom_1.cls('layer-state-loading') }))));
|
||
};
|
||
return StateLayerComp;
|
||
}(preact_1.Component));
|
||
exports.StateLayer = hoc_1.connect(function (_a) {
|
||
var data = _a.data, dimension = _a.dimension;
|
||
var headerHeight = dimension.headerHeight, bodyHeight = dimension.bodyHeight, cellBorderWidth = dimension.cellBorderWidth, tableBorderWidth = dimension.tableBorderWidth, scrollXHeight = dimension.scrollXHeight, scrollYWidth = dimension.scrollYWidth;
|
||
return {
|
||
loadingState: data.loadingState,
|
||
top: headerHeight + cellBorderWidth,
|
||
height: bodyHeight - scrollXHeight - tableBorderWidth,
|
||
left: 0,
|
||
right: scrollYWidth + tableBorderWidth,
|
||
};
|
||
})(StateLayerComp);
|
||
|
||
|
||
/***/ }),
|
||
/* 110 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.FilterLayer = exports.FilterLayerComp = void 0;
|
||
var tslib_1 = __webpack_require__(1);
|
||
var preact_1 = __webpack_require__(3);
|
||
var hoc_1 = __webpack_require__(4);
|
||
var filterLayerInner_1 = __webpack_require__(111);
|
||
var FilterLayerComp = /** @class */ (function (_super) {
|
||
tslib_1.__extends(FilterLayerComp, _super);
|
||
function FilterLayerComp() {
|
||
return _super !== null && _super.apply(this, arguments) || this;
|
||
}
|
||
FilterLayerComp.prototype.render = function (_a) {
|
||
var activeColumnAddress = _a.activeColumnAddress, activeFilterState = _a.activeFilterState;
|
||
return (activeColumnAddress &&
|
||
activeFilterState && (preact_1.h(filterLayerInner_1.FilterLayerInner, { columnAddress: activeColumnAddress, filterState: activeFilterState })));
|
||
};
|
||
return FilterLayerComp;
|
||
}(preact_1.Component));
|
||
exports.FilterLayerComp = FilterLayerComp;
|
||
exports.FilterLayer = hoc_1.connect(function (_a) {
|
||
var filterLayerState = _a.filterLayerState;
|
||
var activeColumnAddress = filterLayerState.activeColumnAddress, activeFilterState = filterLayerState.activeFilterState;
|
||
return { activeColumnAddress: activeColumnAddress, activeFilterState: activeFilterState };
|
||
})(FilterLayerComp);
|
||
|
||
|
||
/***/ }),
|
||
/* 111 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.FilterLayerInner = exports.FilterLayerInnerComp = void 0;
|
||
var tslib_1 = __webpack_require__(1);
|
||
var preact_1 = __webpack_require__(3);
|
||
var hoc_1 = __webpack_require__(4);
|
||
var dom_1 = __webpack_require__(2);
|
||
var textFilter_1 = __webpack_require__(112);
|
||
var datePickerFilter_1 = __webpack_require__(113);
|
||
var filterOperator_1 = __webpack_require__(114);
|
||
var selectFilter_1 = __webpack_require__(115);
|
||
var common_1 = __webpack_require__(0);
|
||
var i18n_1 = tslib_1.__importDefault(__webpack_require__(19));
|
||
var FilterLayerInnerComp = /** @class */ (function (_super) {
|
||
tslib_1.__extends(FilterLayerInnerComp, _super);
|
||
function FilterLayerInnerComp() {
|
||
var _this = _super !== null && _super.apply(this, arguments) || this;
|
||
_this.state = { left: _this.props.columnAddress.left };
|
||
_this.renderFilter = function (index) {
|
||
var _a = _this.props, columnAddress = _a.columnAddress, filterState = _a.filterState, columnInfo = _a.columnInfo;
|
||
var type = columnInfo.filter.type;
|
||
switch (type) {
|
||
case 'text':
|
||
case 'number':
|
||
return (preact_1.h(textFilter_1.TextFilter, { columnAddress: columnAddress, filterState: filterState, filterIndex: index }));
|
||
case 'date':
|
||
return (preact_1.h(datePickerFilter_1.DatePickerFilter, { columnAddress: columnAddress, filterState: filterState, filterIndex: index }));
|
||
case 'select':
|
||
return preact_1.h(selectFilter_1.SelectFilter, { columnAddress: columnAddress, filterState: filterState });
|
||
default:
|
||
return null;
|
||
}
|
||
};
|
||
return _this;
|
||
}
|
||
FilterLayerInnerComp.prototype.componentDidMount = function () {
|
||
var left = this.el.getBoundingClientRect().left;
|
||
var clientWidth = this.el.clientWidth;
|
||
var innerWidth = window.innerWidth;
|
||
if (innerWidth < left + clientWidth) {
|
||
var orgLeft = this.state.left;
|
||
this.setState({ left: orgLeft - (left + clientWidth - innerWidth) });
|
||
}
|
||
};
|
||
FilterLayerInnerComp.prototype.componentDidUpdate = function (prevProp) {
|
||
var _a = this.props.columnAddress, currentColName = _a.name, currentLeft = _a.left;
|
||
if (currentColName !== prevProp.columnAddress.name) {
|
||
var left = this.el.getBoundingClientRect().left;
|
||
var clientWidth = this.el.clientWidth;
|
||
var innerWidth = window.innerWidth;
|
||
var diff = currentLeft - this.state.left;
|
||
var resultLeft = currentLeft;
|
||
// Positioning the filter layer inside the viewport when it is out of the viewport
|
||
if (innerWidth < left + diff + clientWidth) {
|
||
resultLeft = currentLeft - (left + diff + clientWidth - innerWidth);
|
||
}
|
||
this.setState({ left: resultLeft });
|
||
}
|
||
};
|
||
FilterLayerInnerComp.prototype.render = function () {
|
||
var _this = this;
|
||
var _a = this.props, columnInfo = _a.columnInfo, renderSecondFilter = _a.renderSecondFilter, dispatch = _a.dispatch, currentColumnActive = _a.currentColumnActive, filterState = _a.filterState;
|
||
var _b = columnInfo.filter, showApplyBtn = _b.showApplyBtn, showClearBtn = _b.showClearBtn;
|
||
var left = this.state.left;
|
||
return (preact_1.h("div", { className: dom_1.cls('filter-container'), style: { left: left }, ref: function (el) {
|
||
_this.el = el;
|
||
} },
|
||
preact_1.h("div", null,
|
||
preact_1.h("span", { className: dom_1.cls('btn-filter', [currentColumnActive, 'btn-filter-active'], 'filter-icon') }),
|
||
preact_1.h("a", { className: dom_1.cls('btn-close'), onClick: function () {
|
||
dispatch('setActiveColumnAddress', null);
|
||
} })),
|
||
this.renderFilter(0),
|
||
renderSecondFilter && preact_1.h(filterOperator_1.FilterOperator, { filterState: filterState }),
|
||
renderSecondFilter && this.renderFilter(1),
|
||
preact_1.h("div", { className: dom_1.cls('filter-btn-container') },
|
||
showClearBtn && (preact_1.h("button", { className: dom_1.cls('filter-btn', 'filter-btn-clear'), onClick: function () {
|
||
dispatch('clearActiveFilterState');
|
||
}, type: "button" }, i18n_1.default.get('filter.clear'))),
|
||
showApplyBtn && (preact_1.h("button", { className: dom_1.cls('filter-btn', 'filter-btn-apply'), onClick: function () {
|
||
dispatch('applyActiveFilterState');
|
||
}, type: "button" }, i18n_1.default.get('filter.apply'))))));
|
||
};
|
||
return FilterLayerInnerComp;
|
||
}(preact_1.Component));
|
||
exports.FilterLayerInnerComp = FilterLayerInnerComp;
|
||
exports.FilterLayerInner = hoc_1.connect(function (store, _a) {
|
||
var columnAddress = _a.columnAddress, filterState = _a.filterState;
|
||
var data = store.data, column = store.column;
|
||
var filters = data.filters;
|
||
var allColumnMap = column.allColumnMap;
|
||
var currentColumnActive = !!filters && common_1.some(function (item) { return item.columnName === columnAddress.name; }, filters);
|
||
var renderSecondFilter = !!(filterState.type !== 'select' &&
|
||
filterState.operator &&
|
||
filterState.state[0] &&
|
||
filterState.state[0].value.length);
|
||
return {
|
||
columnInfo: allColumnMap[columnAddress.name],
|
||
columnAddress: columnAddress,
|
||
filters: filters,
|
||
renderSecondFilter: renderSecondFilter,
|
||
currentColumnActive: currentColumnActive,
|
||
};
|
||
})(FilterLayerInnerComp);
|
||
|
||
|
||
/***/ }),
|
||
/* 112 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.TextFilter = void 0;
|
||
var tslib_1 = __webpack_require__(1);
|
||
var preact_1 = __webpack_require__(3);
|
||
var hoc_1 = __webpack_require__(4);
|
||
var dom_1 = __webpack_require__(2);
|
||
var filter_1 = __webpack_require__(30);
|
||
var common_1 = __webpack_require__(0);
|
||
var keyboard_1 = __webpack_require__(17);
|
||
var constant_1 = __webpack_require__(11);
|
||
var TextFilterComp = /** @class */ (function (_super) {
|
||
tslib_1.__extends(TextFilterComp, _super);
|
||
function TextFilterComp() {
|
||
var _this = _super !== null && _super.apply(this, arguments) || this;
|
||
_this.getPreviousValue = function () {
|
||
var _a = _this.props, filterIndex = _a.filterIndex, filterState = _a.filterState;
|
||
var state = filterState.state;
|
||
var code = 'eq';
|
||
var value = '';
|
||
if (state.length && state[filterIndex]) {
|
||
var _b = state[filterIndex], prevCode = _b.code, prevValue = _b.value;
|
||
code = prevCode;
|
||
value = String(prevValue);
|
||
}
|
||
return { value: value, code: code };
|
||
};
|
||
_this.handleChange = common_1.debounce(function (ev) {
|
||
var dispatch = _this.props.dispatch;
|
||
var keyCode = ev.keyCode;
|
||
if (keyboard_1.isNonPrintableKey(keyCode)) {
|
||
return;
|
||
}
|
||
var keyName = keyboard_1.keyNameMap[keyCode];
|
||
if (keyName === 'enter') {
|
||
dispatch('applyActiveFilterState');
|
||
}
|
||
else {
|
||
var filterIndex = _this.props.filterIndex;
|
||
var value = _this.inputEl.value;
|
||
var code = _this.selectEl.value;
|
||
dispatch('setActiveFilterState', { value: value, code: code }, filterIndex);
|
||
}
|
||
}, constant_1.FILTER_DEBOUNCE_TIME);
|
||
return _this;
|
||
}
|
||
TextFilterComp.prototype.render = function () {
|
||
var _this = this;
|
||
var columnInfo = this.props.columnInfo;
|
||
var _a = this.getPreviousValue(), code = _a.code, value = _a.value;
|
||
var filterSelectOptions = filter_1.createFilterSelectOption();
|
||
var selectOption = filterSelectOptions[columnInfo.filter.type];
|
||
return (preact_1.h("div", null,
|
||
preact_1.h("div", { className: dom_1.cls('filter-dropdown') },
|
||
preact_1.h("select", { ref: function (ref) {
|
||
_this.selectEl = ref;
|
||
}, onChange: this.handleChange }, Object.keys(selectOption).map(function (key) {
|
||
return (preact_1.h("option", { value: key, key: key, selected: code === key }, selectOption[key]));
|
||
}))),
|
||
preact_1.h("input", { ref: function (ref) {
|
||
_this.inputEl = ref;
|
||
}, type: "text", className: dom_1.cls('filter-input'), onInput: this.handleChange, value: value })));
|
||
};
|
||
return TextFilterComp;
|
||
}(preact_1.Component));
|
||
exports.TextFilter = hoc_1.connect(function (store, _a) {
|
||
var filterIndex = _a.filterIndex, columnAddress = _a.columnAddress, filterState = _a.filterState;
|
||
var column = store.column, data = store.data;
|
||
var allColumnMap = column.allColumnMap;
|
||
var filters = data.filters;
|
||
return {
|
||
columnInfo: allColumnMap[columnAddress.name],
|
||
columnAddress: columnAddress,
|
||
filterIndex: filterIndex,
|
||
filters: filters,
|
||
filterState: filterState,
|
||
};
|
||
})(TextFilterComp);
|
||
|
||
|
||
/***/ }),
|
||
/* 113 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.DatePickerFilter = void 0;
|
||
var tslib_1 = __webpack_require__(1);
|
||
var preact_1 = __webpack_require__(3);
|
||
var tui_date_picker_1 = tslib_1.__importDefault(__webpack_require__(43));
|
||
var hoc_1 = __webpack_require__(4);
|
||
var instance_1 = __webpack_require__(8);
|
||
var dom_1 = __webpack_require__(2);
|
||
var filter_1 = __webpack_require__(30);
|
||
var common_1 = __webpack_require__(0);
|
||
var keyboard_1 = __webpack_require__(17);
|
||
var constant_1 = __webpack_require__(11);
|
||
var DatePickerFilterComp = /** @class */ (function (_super) {
|
||
tslib_1.__extends(DatePickerFilterComp, _super);
|
||
function DatePickerFilterComp() {
|
||
var _this = _super !== null && _super.apply(this, arguments) || this;
|
||
_this.createDatePicker = function () {
|
||
var _a = _this.props, columnInfo = _a.columnInfo, grid = _a.grid;
|
||
var _b = columnInfo.filter.options, options = _b === void 0 ? {} : _b;
|
||
var usageStatistics = grid.usageStatistics;
|
||
var value = _this.getPreviousValue().value;
|
||
var date;
|
||
if (!options.format) {
|
||
options.format = 'yyyy/MM/dd';
|
||
}
|
||
if (common_1.isString(value) && value.length) {
|
||
date = new Date(value);
|
||
}
|
||
var defaultOptions = {
|
||
date: date,
|
||
type: 'date',
|
||
input: {
|
||
element: _this.inputEl,
|
||
format: options.format,
|
||
},
|
||
usageStatistics: usageStatistics,
|
||
};
|
||
_this.datePickerEl = new tui_date_picker_1.default(_this.calendarWrapper, common_1.deepMergedCopy(defaultOptions, options || {}));
|
||
_this.datePickerEl.on('change', _this.handleChange);
|
||
};
|
||
_this.handleKeyUp = common_1.debounce(function (ev) {
|
||
var keyCode = ev.keyCode;
|
||
var keyName = keyboard_1.keyNameMap[keyCode];
|
||
var dispatch = _this.props.dispatch;
|
||
if (keyboard_1.isNonPrintableKey(keyCode)) {
|
||
return;
|
||
}
|
||
if (keyName === 'enter') {
|
||
dispatch('applyActiveFilterState');
|
||
}
|
||
else {
|
||
_this.handleChange();
|
||
}
|
||
}, constant_1.FILTER_DEBOUNCE_TIME);
|
||
_this.handleChange = function () {
|
||
var dispatch = _this.props.dispatch;
|
||
var filterIndex = _this.props.filterIndex;
|
||
var value = _this.inputEl.value;
|
||
var code = _this.selectEl.value;
|
||
dispatch('setActiveFilterState', { value: value, code: code }, filterIndex);
|
||
};
|
||
_this.getPreviousValue = function () {
|
||
var _a = _this.props, filterIndex = _a.filterIndex, filterState = _a.filterState;
|
||
var state = filterState.state;
|
||
var code = 'eq';
|
||
var value = '';
|
||
if (state.length && state[filterIndex]) {
|
||
var _b = state[filterIndex], prevCode = _b.code, prevValue = _b.value;
|
||
code = prevCode;
|
||
value = String(prevValue);
|
||
}
|
||
return { value: value, code: code };
|
||
};
|
||
_this.openDatePicker = function () {
|
||
_this.datePickerEl.open();
|
||
};
|
||
return _this;
|
||
}
|
||
DatePickerFilterComp.prototype.componentDidMount = function () {
|
||
this.createDatePicker();
|
||
};
|
||
DatePickerFilterComp.prototype.componentWillUnmount = function () {
|
||
this.datePickerEl.destroy();
|
||
};
|
||
DatePickerFilterComp.prototype.render = function () {
|
||
var _this = this;
|
||
var columnInfo = this.props.columnInfo;
|
||
var options = columnInfo.filter.options;
|
||
var showIcon = !(options && options.showIcon === false);
|
||
var filterSelectOptions = filter_1.createFilterSelectOption();
|
||
var selectOption = filterSelectOptions.date;
|
||
var _a = this.getPreviousValue(), value = _a.value, code = _a.code;
|
||
return (preact_1.h("div", null,
|
||
preact_1.h("div", { className: dom_1.cls('filter-dropdown') },
|
||
preact_1.h("select", { ref: function (ref) {
|
||
_this.selectEl = ref;
|
||
}, onChange: this.handleChange }, Object.keys(selectOption).map(function (key) {
|
||
return (preact_1.h("option", { value: key, key: key, selected: code === key }, selectOption[key]));
|
||
}))),
|
||
preact_1.h("div", { className: dom_1.cls('datepicker-input-container') },
|
||
preact_1.h("input", { ref: function (ref) {
|
||
_this.inputEl = ref;
|
||
}, type: "text", className: dom_1.cls('filter-input', [showIcon, 'datepicker-input']), onKeyUp: this.handleKeyUp, value: value }),
|
||
showIcon && preact_1.h("i", { className: dom_1.cls('date-icon'), onClick: this.openDatePicker })),
|
||
preact_1.h("div", { ref: function (ref) {
|
||
_this.calendarWrapper = ref;
|
||
}, style: { marginTop: '-4px' } })));
|
||
};
|
||
return DatePickerFilterComp;
|
||
}(preact_1.Component));
|
||
exports.DatePickerFilter = hoc_1.connect(function (store, _a) {
|
||
var filterIndex = _a.filterIndex, columnAddress = _a.columnAddress, filterState = _a.filterState;
|
||
var column = store.column, id = store.id, data = store.data;
|
||
var allColumnMap = column.allColumnMap;
|
||
var filters = data.filters;
|
||
return {
|
||
grid: instance_1.getInstance(id),
|
||
columnInfo: allColumnMap[columnAddress.name],
|
||
columnAddress: columnAddress,
|
||
filterIndex: filterIndex,
|
||
filters: filters,
|
||
filterState: filterState,
|
||
};
|
||
})(DatePickerFilterComp);
|
||
|
||
|
||
/***/ }),
|
||
/* 114 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.FilterOperator = void 0;
|
||
var tslib_1 = __webpack_require__(1);
|
||
var preact_1 = __webpack_require__(3);
|
||
var hoc_1 = __webpack_require__(4);
|
||
var dom_1 = __webpack_require__(2);
|
||
var FilterOperatorComp = /** @class */ (function (_super) {
|
||
tslib_1.__extends(FilterOperatorComp, _super);
|
||
function FilterOperatorComp() {
|
||
var _this = _super !== null && _super.apply(this, arguments) || this;
|
||
_this.handleChangeOperator = function (ev) {
|
||
var value = ev.target.value;
|
||
_this.props.dispatch('setActiveFilterOperator', value);
|
||
};
|
||
return _this;
|
||
}
|
||
FilterOperatorComp.prototype.render = function () {
|
||
var _this = this;
|
||
var operator = this.props.operator;
|
||
return (preact_1.h("div", { className: dom_1.cls('filter-comparator-container') }, ['AND', 'OR'].map(function (operatorType) {
|
||
var checked = operator === operatorType;
|
||
return (preact_1.h("div", { key: operatorType, className: dom_1.cls('filter-comparator', [checked, 'filter-comparator-checked']) },
|
||
preact_1.h("label", null,
|
||
preact_1.h("input", { type: "radio", name: "filterOperator", value: operatorType, checked: checked, onChange: _this.handleChangeOperator }),
|
||
preact_1.h("span", null, operatorType))));
|
||
})));
|
||
};
|
||
return FilterOperatorComp;
|
||
}(preact_1.Component));
|
||
exports.FilterOperator = hoc_1.connect(function (_, _a) {
|
||
var filterState = _a.filterState;
|
||
return ({
|
||
operator: filterState.operator || 'AND',
|
||
});
|
||
})(FilterOperatorComp);
|
||
|
||
|
||
/***/ }),
|
||
/* 115 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.SelectFilter = void 0;
|
||
var tslib_1 = __webpack_require__(1);
|
||
var preact_1 = __webpack_require__(3);
|
||
var hoc_1 = __webpack_require__(4);
|
||
var instance_1 = __webpack_require__(8);
|
||
var dom_1 = __webpack_require__(2);
|
||
var common_1 = __webpack_require__(0);
|
||
var data_1 = __webpack_require__(6);
|
||
var constant_1 = __webpack_require__(11);
|
||
var i18n_1 = tslib_1.__importDefault(__webpack_require__(19));
|
||
var SelectFilterComp = /** @class */ (function (_super) {
|
||
tslib_1.__extends(SelectFilterComp, _super);
|
||
function SelectFilterComp() {
|
||
var _this = _super !== null && _super.apply(this, arguments) || this;
|
||
_this.state = {
|
||
searchInput: '',
|
||
};
|
||
_this.handleChange = common_1.debounce(function (ev, value) {
|
||
var dispatch = _this.props.dispatch;
|
||
var checked = ev.target.checked;
|
||
dispatch('setActiveSelectFilterState', value, checked);
|
||
}, constant_1.FILTER_DEBOUNCE_TIME);
|
||
_this.toggleAllColumnCheckbox = common_1.debounce(function (ev) {
|
||
var checked = ev.target.checked;
|
||
_this.props.dispatch('toggleSelectAllCheckbox', checked);
|
||
}, constant_1.FILTER_DEBOUNCE_TIME);
|
||
_this.searchColumnData = common_1.debounce(function (ev) {
|
||
var value = ev.target.value;
|
||
_this.setState({ searchInput: value });
|
||
}, constant_1.FILTER_DEBOUNCE_TIME);
|
||
return _this;
|
||
}
|
||
SelectFilterComp.prototype.render = function () {
|
||
var _this = this;
|
||
var _a = this.props, columnData = _a.columnData, isAllSelected = _a.isAllSelected;
|
||
var searchInput = this.state.searchInput;
|
||
var data = searchInput.length
|
||
? columnData.filter(function (item) { return String(item.value).indexOf(searchInput) !== -1; })
|
||
: columnData;
|
||
return (preact_1.h("div", { className: dom_1.cls('filter-list-container') },
|
||
preact_1.h("input", { type: "text", className: dom_1.cls('filter-input'), placeholder: "Search...", onKeyUp: this.searchColumnData, value: searchInput ? String(searchInput) : '' }),
|
||
preact_1.h("li", { className: dom_1.cls('filter-list-item', [isAllSelected, 'filter-list-item-checked']) },
|
||
preact_1.h("label", null,
|
||
preact_1.h("input", { type: "checkbox", onChange: this.toggleAllColumnCheckbox, checked: isAllSelected }),
|
||
preact_1.h("span", null, i18n_1.default.get('filter.selectAll')))),
|
||
preact_1.h("ul", { className: dom_1.cls('filter-list') }, data.map(function (item) {
|
||
var value = item.value, text = item.text, checked = item.checked;
|
||
return (preact_1.h("li", { className: dom_1.cls('filter-list-item', [checked, 'filter-list-item-checked']), key: text },
|
||
preact_1.h("label", null,
|
||
preact_1.h("input", { type: "checkbox", checked: checked, onChange: function (ev) { return _this.handleChange(ev, value); } }),
|
||
preact_1.h("span", null, text))));
|
||
}))));
|
||
};
|
||
return SelectFilterComp;
|
||
}(preact_1.Component));
|
||
exports.SelectFilter = hoc_1.connect(function (store, _a) {
|
||
var columnAddress = _a.columnAddress, filterState = _a.filterState;
|
||
var column = store.column, id = store.id, data = store.data;
|
||
var filters = data.filters, rawData = data.rawData;
|
||
var allColumnMap = column.allColumnMap;
|
||
var state = filterState.state;
|
||
var columnName = columnAddress.name;
|
||
var uniqueColumnData = data_1.getUniqColumnData(rawData, column, columnName);
|
||
var columnData = uniqueColumnData
|
||
.filter(function (value) { return value; })
|
||
.map(function (value) { return ({
|
||
value: value,
|
||
text: String(value),
|
||
checked: common_1.some(function (item) { return value === item.value; }, state),
|
||
}); });
|
||
var isExistEmptyValue = uniqueColumnData.some(function (value) { return common_1.isBlank(value); });
|
||
if (isExistEmptyValue) {
|
||
columnData.push({
|
||
value: '',
|
||
text: i18n_1.default.get('filter.emptyValue'),
|
||
checked: common_1.some(function (_a) {
|
||
var value = _a.value;
|
||
return common_1.isBlank(value);
|
||
}, state),
|
||
});
|
||
}
|
||
return {
|
||
grid: instance_1.getInstance(id),
|
||
columnData: columnData,
|
||
columnInfo: allColumnMap[columnName],
|
||
columnAddress: columnAddress,
|
||
filters: filters,
|
||
isAllSelected: state.length === uniqueColumnData.length,
|
||
};
|
||
})(SelectFilterComp);
|
||
|
||
|
||
/***/ }),
|
||
/* 116 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.ContextMenuItem = void 0;
|
||
var tslib_1 = __webpack_require__(1);
|
||
var preact_1 = __webpack_require__(3);
|
||
var hoc_1 = __webpack_require__(4);
|
||
var common_1 = __webpack_require__(0);
|
||
var contextMenu_1 = __webpack_require__(56);
|
||
var ContextMenuItemComp = /** @class */ (function (_super) {
|
||
tslib_1.__extends(ContextMenuItemComp, _super);
|
||
function ContextMenuItemComp() {
|
||
var _this = _super !== null && _super.apply(this, arguments) || this;
|
||
_this.showSubMenu = function (ev) {
|
||
var _a;
|
||
var menuItem = _this.props.menuItem;
|
||
if ((_a = menuItem.subMenu) === null || _a === void 0 ? void 0 : _a.length) {
|
||
var offsetWidth = ev.target.offsetWidth;
|
||
var pos = { top: -6, left: offsetWidth };
|
||
var subMenuInfo = { menuItems: menuItem.subMenu, pos: pos };
|
||
_this.setState({ subMenuInfo: subMenuInfo });
|
||
}
|
||
};
|
||
_this.hideSubMenu = function () {
|
||
_this.setState({ subMenuInfo: null });
|
||
};
|
||
_this.execAction = function (ev) {
|
||
var _a = _this.props, menuItem = _a.menuItem, dispatch = _a.dispatch;
|
||
var action = menuItem.action;
|
||
if (common_1.isString(action)) {
|
||
_this.props.dispatch(action);
|
||
}
|
||
else if (action) {
|
||
action();
|
||
}
|
||
ev.stopPropagation();
|
||
dispatch('hideContextMenu');
|
||
};
|
||
return _this;
|
||
}
|
||
ContextMenuItemComp.prototype.createClassNames = function () {
|
||
var _a = this.props.menuItem, subMenu = _a.subMenu, disabled = _a.disabled, _b = _a.classNames, classNames = _b === void 0 ? [] : _b;
|
||
var classList = classNames.concat('menu-item');
|
||
if (subMenu) {
|
||
classList.push('has-submenu');
|
||
}
|
||
if (disabled) {
|
||
classList.push('disabled');
|
||
}
|
||
return classList.join(' ');
|
||
};
|
||
ContextMenuItemComp.prototype.render = function (_a) {
|
||
var menuItem = _a.menuItem;
|
||
var name = menuItem.name, _b = menuItem.label, label = _b === void 0 ? '' : _b, disabled = menuItem.disabled;
|
||
if (name === 'separator') {
|
||
return preact_1.h("li", { class: "menu-item separator" });
|
||
}
|
||
// eslint-disable-next-line no-undefined
|
||
var getListener = function (listener) { return (disabled ? undefined : listener); };
|
||
var classNames = this.createClassNames();
|
||
var subMenuInfo = this.state.subMenuInfo;
|
||
return (preact_1.h("li", { class: classNames, onClick: getListener(this.execAction), onMouseEnter: getListener(this.showSubMenu), onMouseLeave: getListener(this.hideSubMenu) },
|
||
preact_1.h("span", { dangerouslySetInnerHTML: { __html: label } }),
|
||
subMenuInfo && preact_1.h(contextMenu_1.ContextMenu, { menuItems: subMenuInfo.menuItems, pos: subMenuInfo.pos })));
|
||
};
|
||
return ContextMenuItemComp;
|
||
}(preact_1.Component));
|
||
exports.ContextMenuItem = hoc_1.connect()(ContextMenuItemComp);
|
||
|
||
|
||
/***/ }),
|
||
/* 117 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.HeightResizeHandle = void 0;
|
||
var tslib_1 = __webpack_require__(1);
|
||
var preact_1 = __webpack_require__(3);
|
||
var hoc_1 = __webpack_require__(4);
|
||
var dom_1 = __webpack_require__(2);
|
||
var HeightResizeHandleComp = /** @class */ (function (_super) {
|
||
tslib_1.__extends(HeightResizeHandleComp, _super);
|
||
function HeightResizeHandleComp() {
|
||
var _this = _super !== null && _super.apply(this, arguments) || this;
|
||
_this.dragStartY = -1;
|
||
_this.dragStartBodyHeight = -1;
|
||
_this.handleMouseDown = function (ev) {
|
||
_this.dragStartY = ev.pageY;
|
||
_this.dragStartBodyHeight = _this.props.bodyHeight;
|
||
dom_1.setCursorStyle('row-resize');
|
||
document.addEventListener('mousemove', _this.handleMouseMove);
|
||
document.addEventListener('mouseup', _this.clearDocumentEvents);
|
||
document.addEventListener('selectstart', _this.handleSelectStart);
|
||
};
|
||
_this.handleSelectStart = function (ev) {
|
||
ev.preventDefault();
|
||
};
|
||
_this.handleMouseMove = function (ev) {
|
||
var distance = ev.pageY - _this.dragStartY;
|
||
_this.props.dispatch('setBodyHeight', _this.dragStartBodyHeight + distance);
|
||
};
|
||
_this.clearDocumentEvents = function () {
|
||
dom_1.setCursorStyle('');
|
||
document.removeEventListener('mousemove', _this.handleMouseMove);
|
||
document.removeEventListener('mouseup', _this.clearDocumentEvents);
|
||
document.removeEventListener('selectstart', _this.handleSelectStart);
|
||
};
|
||
return _this;
|
||
}
|
||
HeightResizeHandleComp.prototype.render = function () {
|
||
return (preact_1.h("div", { class: dom_1.cls('height-resize-handle'), onMouseDown: this.handleMouseDown },
|
||
preact_1.h("button", { type: "button" },
|
||
preact_1.h("span", null))));
|
||
};
|
||
return HeightResizeHandleComp;
|
||
}(preact_1.Component));
|
||
exports.HeightResizeHandle = hoc_1.connect(function (_a) {
|
||
var dimension = _a.dimension;
|
||
return ({
|
||
bodyHeight: dimension.bodyHeight,
|
||
});
|
||
})(HeightResizeHandleComp);
|
||
|
||
|
||
/***/ }),
|
||
/* 118 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.Clipboard = void 0;
|
||
var tslib_1 = __webpack_require__(1);
|
||
var preact_1 = __webpack_require__(3);
|
||
var hoc_1 = __webpack_require__(4);
|
||
var dom_1 = __webpack_require__(2);
|
||
var keyboard_1 = __webpack_require__(17);
|
||
var browser_1 = __webpack_require__(39);
|
||
var clipboard_1 = __webpack_require__(40);
|
||
var common_1 = __webpack_require__(0);
|
||
var gridEvent_1 = tslib_1.__importDefault(__webpack_require__(9));
|
||
var eventBus_1 = __webpack_require__(7);
|
||
var KEYDOWN_LOCK_TIME = 10;
|
||
var ClipboardComp = /** @class */ (function (_super) {
|
||
tslib_1.__extends(ClipboardComp, _super);
|
||
function ClipboardComp() {
|
||
var _this = _super !== null && _super.apply(this, arguments) || this;
|
||
_this.isLocked = false;
|
||
_this.lock = function () {
|
||
_this.isLocked = true;
|
||
setTimeout(_this.unlock.bind(_this), KEYDOWN_LOCK_TIME);
|
||
};
|
||
/**
|
||
* Unlock
|
||
* @private
|
||
*/
|
||
_this.unlock = function () {
|
||
_this.isLocked = false;
|
||
};
|
||
_this.onBlur = function () {
|
||
_this.props.dispatch('setNavigating', false);
|
||
};
|
||
_this.dispatchKeyboardEvent = function (type, command) {
|
||
var dispatch = _this.props.dispatch;
|
||
switch (type) {
|
||
case 'move':
|
||
dispatch('selectionEnd');
|
||
dispatch('moveFocus', command);
|
||
dispatch('setScrollToFocus');
|
||
break;
|
||
case 'edit':
|
||
dispatch('editFocus', command);
|
||
dispatch('setScrollToFocus');
|
||
break;
|
||
case 'select':
|
||
dispatch('moveSelection', command);
|
||
dispatch('setScrollToSelection');
|
||
break;
|
||
case 'remove':
|
||
dispatch('removeContent');
|
||
break;
|
||
/*
|
||
* Call directly because of timing issues
|
||
* - Step 1: When the keys(ctrl+c) are downed on grid, 'clipboard' is triggered.
|
||
* - Step 2: When 'clipboard' event is fired,
|
||
* all browsers append copied data and focus to contenteditable element and
|
||
* IE browsers set selection for triggering 'copy' event.
|
||
* - Step 3: Finally, when 'copy' event is fired on browsers,
|
||
* setting copied data to ClipboardEvent.clipboardData or window.clipboardData(IE).
|
||
*/
|
||
case 'clipboard': {
|
||
if (!_this.el) {
|
||
return;
|
||
}
|
||
var store = _this.context.store;
|
||
_this.el.textContent = clipboard_1.getText(store);
|
||
if (dom_1.isSupportWindowClipboardData()) {
|
||
dom_1.setClipboardSelection(_this.el.childNodes[0]);
|
||
}
|
||
break;
|
||
}
|
||
default:
|
||
break;
|
||
}
|
||
};
|
||
/**
|
||
* Event handler for the keydown event
|
||
* @param {Event} ev - Event
|
||
* @private
|
||
*/
|
||
_this.onKeyDown = function (ev) {
|
||
if (_this.isLocked) {
|
||
ev.preventDefault();
|
||
return;
|
||
}
|
||
var _a = keyboard_1.keyEventGenerate(ev), type = _a.type, command = _a.command;
|
||
if (!type) {
|
||
return;
|
||
}
|
||
_this.lock();
|
||
if (type !== 'clipboard') {
|
||
ev.preventDefault();
|
||
}
|
||
if (!(type === 'clipboard' && command === 'paste')) {
|
||
var _b = _this.props, rowKey = _b.rowKey, columnName = _b.columnName;
|
||
var gridEvent = new gridEvent_1.default({ keyboardEvent: ev, rowKey: rowKey, columnName: columnName });
|
||
/**
|
||
* Occurs when key down event is triggered.
|
||
* @event Grid#keydown
|
||
* @property {Grid} instance - Current grid instance
|
||
* @property {Object} keyboardEvent - Keyboard Event
|
||
* @property {Object} rowKey - Focused rowKey
|
||
* @property {Object} columnName - Focused column name
|
||
*/
|
||
_this.props.eventBus.trigger('keydown', gridEvent);
|
||
if (!gridEvent.isStopped()) {
|
||
_this.dispatchKeyboardEvent(type, command);
|
||
}
|
||
}
|
||
};
|
||
_this.onCopy = function (ev) {
|
||
if (!_this.el) {
|
||
return;
|
||
}
|
||
var text = _this.el.textContent;
|
||
if (dom_1.isSupportWindowClipboardData()) {
|
||
window.clipboardData.setData('Text', text);
|
||
}
|
||
else if (ev.clipboardData) {
|
||
ev.clipboardData.setData('text/plain', text);
|
||
}
|
||
ev.preventDefault();
|
||
};
|
||
_this.onPaste = function (ev) {
|
||
var clipboardData = ev.clipboardData || window.clipboardData;
|
||
if (!clipboardData) {
|
||
return;
|
||
}
|
||
if (!browser_1.isEdge() && !dom_1.isSupportWindowClipboardData()) {
|
||
ev.preventDefault();
|
||
_this.pasteInOtherBrowsers(clipboardData);
|
||
}
|
||
else {
|
||
_this.pasteInMSBrowser(clipboardData);
|
||
}
|
||
};
|
||
return _this;
|
||
}
|
||
ClipboardComp.prototype.isClipboardFocused = function () {
|
||
return document.hasFocus() && document.activeElement === this.el;
|
||
};
|
||
/**
|
||
* Paste copied data in other browsers (chrome, safari, firefox)
|
||
* [if] condition is copying from ms-excel,
|
||
* [else] condition is copying from the grid or the copied data is plain text.
|
||
*/
|
||
ClipboardComp.prototype.pasteInOtherBrowsers = function (clipboardData) {
|
||
if (!this.el) {
|
||
return;
|
||
}
|
||
var el = this.el;
|
||
var html = clipboardData.getData('text/html');
|
||
var data;
|
||
if (html && html.indexOf('table') !== -1) {
|
||
// step 1: Append copied data on contenteditable element to parsing correctly table data.
|
||
el.innerHTML = html;
|
||
// step 2: Make grid data from cell data of appended table element.
|
||
var rows = el.querySelector('tbody').rows;
|
||
data = dom_1.convertTableToData(rows);
|
||
// step 3: Empty contenteditable element to reset.
|
||
el.innerHTML = '';
|
||
}
|
||
else {
|
||
data = common_1.convertTextToData(clipboardData.getData('text/plain'));
|
||
}
|
||
this.props.dispatch('paste', data);
|
||
};
|
||
/**
|
||
* Paste copied data in MS-browsers (IE, edge)
|
||
*/
|
||
ClipboardComp.prototype.pasteInMSBrowser = function (clipboardData) {
|
||
var _this = this;
|
||
var data = common_1.convertTextToData(clipboardData.getData('Text'));
|
||
setTimeout(function () {
|
||
if (!_this.el) {
|
||
return;
|
||
}
|
||
var el = _this.el;
|
||
if (el.querySelector('table')) {
|
||
var rows = el.querySelector('tbody').rows;
|
||
data = dom_1.convertTableToData(rows);
|
||
}
|
||
_this.props.dispatch('paste', data);
|
||
el.innerHTML = '';
|
||
}, 0);
|
||
};
|
||
ClipboardComp.prototype.componentDidUpdate = function () {
|
||
var _this = this;
|
||
setTimeout(function () {
|
||
var _a = _this.props, navigating = _a.navigating, editing = _a.editing, filtering = _a.filtering;
|
||
if (_this.el &&
|
||
navigating &&
|
||
!filtering &&
|
||
!editing &&
|
||
!_this.isClipboardFocused() &&
|
||
!browser_1.isMobile()) {
|
||
// @TODO: apply polifyll or alternative for IE, safari
|
||
_this.el.focus({ preventScroll: true });
|
||
}
|
||
});
|
||
};
|
||
ClipboardComp.prototype.render = function () {
|
||
var _this = this;
|
||
return (preact_1.h("div", { class: dom_1.cls('clipboard'), onBlur: this.onBlur, onKeyDown: this.onKeyDown, onCopy: this.onCopy, onPaste: this.onPaste, contentEditable: true, ref: function (el) {
|
||
_this.el = el;
|
||
} }));
|
||
};
|
||
return ClipboardComp;
|
||
}(preact_1.Component));
|
||
exports.Clipboard = hoc_1.connect(function (_a) {
|
||
var focus = _a.focus, filterLayerState = _a.filterLayerState, id = _a.id;
|
||
return ({
|
||
navigating: focus.navigating,
|
||
rowKey: focus.rowKey,
|
||
columnName: focus.columnName,
|
||
editing: !!focus.editingAddress,
|
||
filtering: !!filterLayerState.activeColumnAddress,
|
||
eventBus: eventBus_1.getEventBus(id),
|
||
});
|
||
})(ClipboardComp);
|
||
|
||
|
||
/***/ }),
|
||
/* 119 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.Pagination = void 0;
|
||
var tslib_1 = __webpack_require__(1);
|
||
var preact_1 = __webpack_require__(3);
|
||
var tui_pagination_1 = tslib_1.__importDefault(__webpack_require__(120));
|
||
var hoc_1 = __webpack_require__(4);
|
||
var dom_1 = __webpack_require__(2);
|
||
var common_1 = __webpack_require__(0);
|
||
var instance_1 = __webpack_require__(8);
|
||
var eventBus_1 = __webpack_require__(7);
|
||
var gridEvent_1 = tslib_1.__importDefault(__webpack_require__(9));
|
||
var PaginationComp = /** @class */ (function (_super) {
|
||
tslib_1.__extends(PaginationComp, _super);
|
||
function PaginationComp() {
|
||
return _super !== null && _super.apply(this, arguments) || this;
|
||
}
|
||
PaginationComp.prototype.shouldComponentUpdate = function (nextProps) {
|
||
return !common_1.shallowEqual(this.props.pageOptions, nextProps.pageOptions);
|
||
};
|
||
PaginationComp.prototype.componentDidMount = function () {
|
||
this.createPagination();
|
||
};
|
||
PaginationComp.prototype.componentWillReceiveProps = function (nextProps) {
|
||
if (!this.el || !this.tuiPagination) {
|
||
return;
|
||
}
|
||
var pageOptions = nextProps.pageOptions;
|
||
var totalCount = pageOptions.totalCount, page = pageOptions.page, perPage = pageOptions.perPage;
|
||
if (!common_1.isNumber(totalCount) || !common_1.isNumber(page) || !common_1.isNumber(perPage)) {
|
||
return;
|
||
}
|
||
if (this.props.pageOptions.perPage !== perPage ||
|
||
this.props.pageOptions.totalCount !== totalCount) {
|
||
this.tuiPagination.setItemsPerPage(perPage);
|
||
this.tuiPagination.reset(totalCount);
|
||
}
|
||
if (this.tuiPagination.getCurrentPage() !== page) {
|
||
this.removeEventListener();
|
||
this.tuiPagination.movePageTo(page);
|
||
this.addEventListener();
|
||
}
|
||
};
|
||
PaginationComp.prototype.componentWillUnmount = function () {
|
||
if (this.tuiPagination) {
|
||
this.removeEventListener();
|
||
}
|
||
};
|
||
PaginationComp.prototype.createPagination = function () {
|
||
var _a = this.props, pageOptions = _a.pageOptions, paginationHolder = _a.paginationHolder, usageStatistics = _a.grid.usageStatistics;
|
||
var totalCount = pageOptions.totalCount, perPage = pageOptions.perPage;
|
||
var options = tslib_1.__assign(tslib_1.__assign({}, pageOptions), { totalItems: totalCount, itemsPerPage: perPage, usageStatistics: usageStatistics });
|
||
this.tuiPagination = new tui_pagination_1.default(this.el, options);
|
||
this.addEventListener();
|
||
paginationHolder.setPagination(this.tuiPagination);
|
||
};
|
||
PaginationComp.prototype.addEventListener = function () {
|
||
var _a = this.props, dataProvider = _a.dataProvider, pageOptions = _a.pageOptions, dispatch = _a.dispatch, eventBus = _a.eventBus;
|
||
this.tuiPagination.on('beforeMove', function (ev) {
|
||
var page = ev.page;
|
||
var gridEvent = new gridEvent_1.default({ page: page });
|
||
/**
|
||
* Occurs before moving the page.
|
||
* @event Grid#beforePageMove
|
||
* @property {number} page - Target page number
|
||
* @property {Grid} instance - Current grid instance
|
||
*/
|
||
eventBus.trigger('beforePageMove', gridEvent);
|
||
if (!gridEvent.isStopped()) {
|
||
if (pageOptions.useClient) {
|
||
dispatch('movePage', page);
|
||
}
|
||
else {
|
||
dataProvider.readData(page);
|
||
}
|
||
}
|
||
});
|
||
this.tuiPagination.on('afterMove', function (ev) {
|
||
var gridEvent = new gridEvent_1.default({ page: ev.page });
|
||
/**
|
||
* Occurs after moving the page.
|
||
* @event Grid#afterPageMove
|
||
* @property {number} page - Target page number
|
||
* @property {Grid} instance - Current grid instance
|
||
*/
|
||
eventBus.trigger('afterPageMove', gridEvent);
|
||
});
|
||
};
|
||
PaginationComp.prototype.removeEventListener = function () {
|
||
this.tuiPagination.off('beforeMove');
|
||
this.tuiPagination.off('afterMove');
|
||
};
|
||
PaginationComp.prototype.render = function () {
|
||
var _this = this;
|
||
return (preact_1.h("div", { ref: function (el) {
|
||
_this.el = el;
|
||
}, class: "tui-pagination " + dom_1.cls('pagination') }));
|
||
};
|
||
return PaginationComp;
|
||
}(preact_1.Component));
|
||
exports.Pagination = hoc_1.connect(function (_a) {
|
||
var id = _a.id, data = _a.data;
|
||
return ({
|
||
pageOptions: data.pageOptions,
|
||
dataProvider: instance_1.getDataProvider(id),
|
||
paginationHolder: instance_1.getPaginationManager(id),
|
||
grid: instance_1.getInstance(id),
|
||
eventBus: eventBus_1.getEventBus(id),
|
||
});
|
||
})(PaginationComp);
|
||
|
||
|
||
/***/ }),
|
||
/* 120 */
|
||
/***/ (function(module, exports) {
|
||
|
||
module.exports = __WEBPACK_EXTERNAL_MODULE__120__;
|
||
|
||
/***/ }),
|
||
/* 121 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.emitMouseup = void 0;
|
||
function emitMouseup(el) {
|
||
var mouseupEvent = new MouseEvent('mouseup', {
|
||
bubbles: true,
|
||
cancelable: true,
|
||
});
|
||
el.dispatchEvent(mouseupEvent);
|
||
}
|
||
exports.emitMouseup = emitMouseup;
|
||
|
||
|
||
/***/ }),
|
||
/* 122 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.createDispatcher = void 0;
|
||
var tslib_1 = __webpack_require__(1);
|
||
var viewport = tslib_1.__importStar(__webpack_require__(25));
|
||
var dimension = tslib_1.__importStar(__webpack_require__(50));
|
||
var data = tslib_1.__importStar(__webpack_require__(14));
|
||
var column = tslib_1.__importStar(__webpack_require__(32));
|
||
var keyboard = tslib_1.__importStar(__webpack_require__(123));
|
||
var mouse = tslib_1.__importStar(__webpack_require__(125));
|
||
var focus = tslib_1.__importStar(__webpack_require__(18));
|
||
var summary = tslib_1.__importStar(__webpack_require__(26));
|
||
var selection = tslib_1.__importStar(__webpack_require__(16));
|
||
var renderState = tslib_1.__importStar(__webpack_require__(49));
|
||
var tree = tslib_1.__importStar(__webpack_require__(31));
|
||
var sort = tslib_1.__importStar(__webpack_require__(29));
|
||
var filter = tslib_1.__importStar(__webpack_require__(35));
|
||
var pagination = tslib_1.__importStar(__webpack_require__(36));
|
||
var contextMenu = tslib_1.__importStar(__webpack_require__(126));
|
||
var exportData = tslib_1.__importStar(__webpack_require__(58));
|
||
var rowSpan = tslib_1.__importStar(__webpack_require__(24));
|
||
var dispatchMap = tslib_1.__assign(tslib_1.__assign(tslib_1.__assign(tslib_1.__assign(tslib_1.__assign(tslib_1.__assign(tslib_1.__assign(tslib_1.__assign(tslib_1.__assign(tslib_1.__assign(tslib_1.__assign(tslib_1.__assign(tslib_1.__assign(tslib_1.__assign(tslib_1.__assign(tslib_1.__assign(tslib_1.__assign({}, viewport), dimension), data), column), mouse), focus), keyboard), summary), selection), renderState), tree), sort), filter), pagination), contextMenu), exportData), rowSpan);
|
||
function createDispatcher(store) {
|
||
return function dispatch(fname) {
|
||
var args = [];
|
||
for (var _i = 1; _i < arguments.length; _i++) {
|
||
args[_i - 1] = arguments[_i];
|
||
}
|
||
// @ts-ignore
|
||
dispatchMap[fname].apply(dispatchMap, tslib_1.__spreadArrays([store], args));
|
||
};
|
||
}
|
||
exports.createDispatcher = createDispatcher;
|
||
|
||
|
||
/***/ }),
|
||
/* 123 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.updateDataByKeyMap = exports.paste = exports.removeContent = exports.moveSelection = exports.moveTabFocus = exports.editFocus = exports.moveFocus = void 0;
|
||
var tslib_1 = __webpack_require__(1);
|
||
var keyboard_1 = __webpack_require__(124);
|
||
var focus_1 = __webpack_require__(18);
|
||
var selection_1 = __webpack_require__(16);
|
||
var column_1 = __webpack_require__(10);
|
||
var rowSpan_1 = __webpack_require__(13);
|
||
var instance_1 = __webpack_require__(8);
|
||
var eventBus_1 = __webpack_require__(7);
|
||
var gridEvent_1 = tslib_1.__importDefault(__webpack_require__(9));
|
||
var data_1 = __webpack_require__(6);
|
||
var validation_1 = __webpack_require__(27);
|
||
var clipboard_1 = __webpack_require__(40);
|
||
var common_1 = __webpack_require__(0);
|
||
var summary_1 = __webpack_require__(26);
|
||
var data_2 = __webpack_require__(14);
|
||
function moveFocus(store, command) {
|
||
var focus = store.focus, data = store.data, visibleColumnsWithRowHeader = store.column.visibleColumnsWithRowHeader, id = store.id;
|
||
var rowIndex = focus.rowIndex, columnIndex = focus.totalColumnIndex;
|
||
if (rowIndex === null || columnIndex === null) {
|
||
return;
|
||
}
|
||
var _a = keyboard_1.getNextCellIndex(store, command, [rowIndex, columnIndex]), nextRowIndex = _a[0], nextColumnIndex = _a[1];
|
||
var nextColumnName = visibleColumnsWithRowHeader[nextColumnIndex].name;
|
||
if (!column_1.isRowHeader(nextColumnName)) {
|
||
focus.navigating = true;
|
||
focus_1.changeFocus(store, data_1.getRowKeyByIndexWithPageRange(data, nextRowIndex), nextColumnName, id);
|
||
}
|
||
}
|
||
exports.moveFocus = moveFocus;
|
||
function editFocus(store, command) {
|
||
var _a = store.focus, rowKey = _a.rowKey, columnName = _a.columnName;
|
||
if (rowKey === null || columnName === null) {
|
||
return;
|
||
}
|
||
if (command === 'currentCell') {
|
||
focus_1.startEditing(store, rowKey, columnName);
|
||
}
|
||
else if (command === 'nextCell' || command === 'prevCell') {
|
||
// move prevCell or nextCell by tab keyMap
|
||
moveTabFocus(store, command);
|
||
}
|
||
}
|
||
exports.editFocus = editFocus;
|
||
function moveTabFocus(store, command) {
|
||
var focus = store.focus, data = store.data, column = store.column, id = store.id;
|
||
var visibleColumnsWithRowHeader = column.visibleColumnsWithRowHeader;
|
||
var rowKey = focus.rowKey, columnName = focus.columnName, rowIndex = focus.rowIndex, columnIndex = focus.totalColumnIndex;
|
||
if (rowKey === null || columnName === null || rowIndex === null || columnIndex === null) {
|
||
return;
|
||
}
|
||
var _a = keyboard_1.getNextCellIndex(store, command, [rowIndex, columnIndex]), nextRowIndex = _a[0], nextColumnIndex = _a[1];
|
||
var nextRowKey = data_1.getRowKeyByIndexWithPageRange(data, nextRowIndex);
|
||
var nextColumnName = visibleColumnsWithRowHeader[nextColumnIndex].name;
|
||
if (!column_1.isRowHeader(nextColumnName)) {
|
||
focus.navigating = true;
|
||
focus_1.changeFocus(store, nextRowKey, nextColumnName, id);
|
||
if (focus.tabMode === 'moveAndEdit' &&
|
||
focus.rowKey === nextRowKey &&
|
||
focus.columnName === nextColumnName) {
|
||
setTimeout(function () {
|
||
focus_1.startEditing(store, nextRowKey, nextColumnName);
|
||
});
|
||
}
|
||
}
|
||
}
|
||
exports.moveTabFocus = moveTabFocus;
|
||
function moveSelection(store, command) {
|
||
var _a;
|
||
var selection = store.selection, focus = store.focus, data = store.data, column = store.column, id = store.id;
|
||
var visibleColumnsWithRowHeader = column.visibleColumnsWithRowHeader, rowHeaderCount = column.rowHeaderCount;
|
||
var filteredViewData = data.filteredViewData, sortState = data.sortState;
|
||
var focusRowIndex = focus.rowIndex, totalFocusColumnIndex = focus.totalColumnIndex;
|
||
var currentInputRange = selection.inputRange;
|
||
if (focusRowIndex === null || totalFocusColumnIndex === null) {
|
||
return;
|
||
}
|
||
if (!currentInputRange) {
|
||
currentInputRange = selection.inputRange = {
|
||
row: [focusRowIndex, focusRowIndex],
|
||
column: [totalFocusColumnIndex, totalFocusColumnIndex],
|
||
};
|
||
}
|
||
var rowLength = filteredViewData.length;
|
||
var columnLength = visibleColumnsWithRowHeader.length;
|
||
var rowStartIndex = currentInputRange.row[0];
|
||
var rowIndex = currentInputRange.row[1];
|
||
var columnStartIndex = currentInputRange.column[0];
|
||
var columnIndex = currentInputRange.column[1];
|
||
var nextCellIndexes;
|
||
if (command === 'all') {
|
||
rowStartIndex = 0;
|
||
columnStartIndex = rowHeaderCount;
|
||
nextCellIndexes = [rowLength - 1, columnLength - 1];
|
||
}
|
||
else {
|
||
nextCellIndexes = keyboard_1.getNextCellIndex(store, command, [rowIndex, columnIndex]);
|
||
if (rowSpan_1.isRowSpanEnabled(sortState, column)) {
|
||
nextCellIndexes = keyboard_1.getNextCellIndexWithRowSpan(store, command, rowIndex, [columnStartIndex, columnIndex], nextCellIndexes);
|
||
}
|
||
}
|
||
var nextRowIndex = nextCellIndexes[0], nextColumnIndex = nextCellIndexes[1];
|
||
var nextColumnName = visibleColumnsWithRowHeader[nextColumnIndex].name;
|
||
var startRowIndex = rowStartIndex;
|
||
var endRowIndex = nextRowIndex;
|
||
if (command !== 'all') {
|
||
_a = rowSpan_1.getRowRangeWithRowSpan([startRowIndex, endRowIndex], [columnStartIndex, nextColumnIndex], column, focus.rowIndex, data), startRowIndex = _a[0], endRowIndex = _a[1];
|
||
}
|
||
if (!column_1.isRowHeader(nextColumnName)) {
|
||
var inputRange = {
|
||
row: [startRowIndex, endRowIndex],
|
||
column: [columnStartIndex, nextColumnIndex],
|
||
};
|
||
selection_1.changeSelectionRange(selection, inputRange, id);
|
||
}
|
||
}
|
||
exports.moveSelection = moveSelection;
|
||
function removeContent(store) {
|
||
var column = store.column, data = store.data;
|
||
var range = keyboard_1.getRemoveRange(store);
|
||
if (!range) {
|
||
return;
|
||
}
|
||
var _a = range.column, columnStart = _a[0], columnEnd = _a[1], _b = range.row, rowStart = _b[0], rowEnd = _b[1];
|
||
var changeValueFns = [];
|
||
var prevChanges = [];
|
||
var nextChanges = [];
|
||
data.filteredRawData.slice(rowStart, rowEnd + 1).forEach(function (row, index) {
|
||
column.visibleColumnsWithRowHeader.slice(columnStart, columnEnd + 1).forEach(function (_a) {
|
||
var name = _a.name;
|
||
var rowIndex = index + rowStart;
|
||
if (data_1.isEditableCell(store, rowIndex, name)) {
|
||
var _b = data_1.createChangeInfo(store, row, name, '', rowIndex), prevChange = _b.prevChange, nextChange = _b.nextChange, changeValue = _b.changeValue;
|
||
prevChanges.push(prevChange);
|
||
nextChanges.push(nextChange);
|
||
changeValueFns.push(changeValue);
|
||
}
|
||
});
|
||
});
|
||
updateDataByKeyMap(store, 'delete', { prevChanges: prevChanges, nextChanges: nextChanges, changeValueFns: changeValueFns });
|
||
}
|
||
exports.removeContent = removeContent;
|
||
function applyCopiedData(store, copiedData, range) {
|
||
var data = store.data, column = store.column;
|
||
var filteredRawData = data.filteredRawData, filteredViewData = data.filteredViewData;
|
||
var visibleColumnsWithRowHeader = column.visibleColumnsWithRowHeader;
|
||
var _a = range.row, startRowIndex = _a[0], endRowIndex = _a[1], _b = range.column, startColumnIndex = _b[0], endColumnIndex = _b[1];
|
||
var columnNames = common_1.mapProp('name', visibleColumnsWithRowHeader);
|
||
var changeValueFns = [];
|
||
var prevChanges = [];
|
||
var nextChanges = [];
|
||
for (var rowIndex = 0; rowIndex + startRowIndex <= endRowIndex; rowIndex += 1) {
|
||
var rawRowIndex = rowIndex + startRowIndex;
|
||
for (var columnIndex = 0; columnIndex + startColumnIndex <= endColumnIndex; columnIndex += 1) {
|
||
var name = columnNames[columnIndex + startColumnIndex];
|
||
if (filteredViewData.length && data_1.isEditableCell(store, rawRowIndex, name)) {
|
||
var targetRow = filteredRawData[rawRowIndex];
|
||
var _c = data_1.createChangeInfo(store, targetRow, name, copiedData[rowIndex][columnIndex], rawRowIndex), prevChange = _c.prevChange, nextChange = _c.nextChange, changeValue = _c.changeValue;
|
||
prevChanges.push(prevChange);
|
||
nextChanges.push(nextChange);
|
||
changeValueFns.push(changeValue);
|
||
}
|
||
}
|
||
}
|
||
updateDataByKeyMap(store, 'paste', { prevChanges: prevChanges, nextChanges: nextChanges, changeValueFns: changeValueFns });
|
||
}
|
||
function paste(store, copiedData) {
|
||
var selection = store.selection, id = store.id;
|
||
var originalRange = selection.originalRange;
|
||
if (originalRange) {
|
||
copiedData = clipboard_1.copyDataToRange(originalRange, copiedData);
|
||
}
|
||
var rangeToPaste = clipboard_1.getRangeToPaste(store, copiedData);
|
||
applyCopiedData(store, copiedData, rangeToPaste);
|
||
selection_1.changeSelectionRange(selection, rangeToPaste, id);
|
||
}
|
||
exports.paste = paste;
|
||
function updateDataByKeyMap(store, origin, changeInfo) {
|
||
var id = store.id, data = store.data, column = store.column;
|
||
var rawData = data.rawData, filteredRawData = data.filteredRawData;
|
||
var prevChanges = changeInfo.prevChanges, nextChanges = changeInfo.nextChanges, changeValueFns = changeInfo.changeValueFns;
|
||
var eventBus = eventBus_1.getEventBus(id);
|
||
var manager = instance_1.getDataManager(id);
|
||
var gridEvent = new gridEvent_1.default({ origin: origin, changes: prevChanges });
|
||
/**
|
||
* Occurs before one or more cells is changed
|
||
* @event Grid#beforeChange
|
||
* @property {string} origin - The type of change('paste', 'delete', 'cell')
|
||
* @property {Array.<object>} changes - rowKey, column name, original values and next values before changing the values
|
||
* @property {Grid} instance - Current grid instance
|
||
*/
|
||
eventBus.trigger('beforeChange', gridEvent);
|
||
if (gridEvent.isStopped()) {
|
||
return;
|
||
}
|
||
var index = null;
|
||
changeValueFns.forEach(function (changeValue) {
|
||
var targetRowIndex = changeValue();
|
||
if (index !== targetRowIndex) {
|
||
index = targetRowIndex;
|
||
manager.push('UPDATE', filteredRawData[index]);
|
||
}
|
||
});
|
||
summary_1.updateAllSummaryValues(store);
|
||
validation_1.forceValidateUniquenessOfColumns(rawData, column);
|
||
data_2.updateHeights(store);
|
||
gridEvent = new gridEvent_1.default({ origin: origin, changes: nextChanges });
|
||
/**
|
||
* Occurs after one or more cells is changed
|
||
* @event Grid#afterChange
|
||
* @property {string} origin - The type of change('paste', 'delete', 'cell')
|
||
* @property {Array.<object>} changes - rowKey, column name, previous values and changed values after changing the values
|
||
* @property {Grid} instance - Current grid instance
|
||
*/
|
||
eventBus.trigger('afterChange', gridEvent);
|
||
}
|
||
exports.updateDataByKeyMap = updateDataByKeyMap;
|
||
|
||
|
||
/***/ }),
|
||
/* 124 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.getNextCellIndexWithRowSpan = exports.getRemoveRange = exports.getNextCellIndex = void 0;
|
||
var common_1 = __webpack_require__(0);
|
||
var rowSpan_1 = __webpack_require__(13);
|
||
var selection_1 = __webpack_require__(22);
|
||
var data_1 = __webpack_require__(6);
|
||
function getPrevRowIndex(rowIndex, heights) {
|
||
var index = rowIndex;
|
||
while (index > 0) {
|
||
index -= 1;
|
||
if (heights[index]) {
|
||
break;
|
||
}
|
||
}
|
||
return index;
|
||
}
|
||
function getNextRowIndex(rowIndex, heights) {
|
||
var index = rowIndex;
|
||
while (index < heights.length - 1) {
|
||
index += 1;
|
||
if (heights[index]) {
|
||
break;
|
||
}
|
||
}
|
||
return index;
|
||
}
|
||
function getNextCellIndex(store, command, _a) {
|
||
var rowIndex = _a[0], columnIndex = _a[1];
|
||
var data = store.data, column = store.column, heights = store.rowCoords.heights;
|
||
var visibleColumnsWithRowHeader = column.visibleColumnsWithRowHeader, rowHeaderCount = column.rowHeaderCount;
|
||
var sortState = data.sortState, filteredRawData = data.filteredRawData, pageRowRange = data.pageRowRange;
|
||
var lastRowIndex = (data_1.isClientPagination(data) ? pageRowRange[1] - pageRowRange[0] : filteredRawData.length) - 1;
|
||
var columnName = visibleColumnsWithRowHeader[columnIndex].name;
|
||
var lastRow = lastRowIndex === rowIndex;
|
||
var lastColumn = visibleColumnsWithRowHeader.length - 1 === columnIndex;
|
||
var firstRow = rowIndex === 0;
|
||
var firstColumn = columnIndex === rowHeaderCount;
|
||
switch (command) {
|
||
case 'up':
|
||
if (rowSpan_1.isRowSpanEnabled(sortState, column)) {
|
||
rowIndex = rowSpan_1.getRowSpanTopIndex(rowIndex, columnName, filteredRawData);
|
||
}
|
||
rowIndex = getPrevRowIndex(rowIndex, heights);
|
||
break;
|
||
case 'down':
|
||
if (rowSpan_1.isRowSpanEnabled(sortState, column)) {
|
||
rowIndex = rowSpan_1.getRowSpanBottomIndex(rowIndex, columnName, filteredRawData);
|
||
}
|
||
rowIndex = getNextRowIndex(rowIndex, heights);
|
||
break;
|
||
case 'left':
|
||
columnIndex -= 1;
|
||
break;
|
||
case 'right':
|
||
columnIndex += 1;
|
||
break;
|
||
case 'firstCell':
|
||
columnIndex = rowHeaderCount;
|
||
rowIndex = 0;
|
||
break;
|
||
case 'lastCell':
|
||
columnIndex = visibleColumnsWithRowHeader.length - 1;
|
||
rowIndex = lastRowIndex;
|
||
break;
|
||
case 'pageUp': {
|
||
rowIndex = 0;
|
||
break;
|
||
}
|
||
case 'pageDown': {
|
||
rowIndex = lastRowIndex;
|
||
break;
|
||
}
|
||
case 'firstColumn':
|
||
columnIndex = rowHeaderCount;
|
||
break;
|
||
case 'lastColumn':
|
||
columnIndex = visibleColumnsWithRowHeader.length - 1;
|
||
break;
|
||
case 'nextCell':
|
||
if (lastRow && lastColumn) {
|
||
break;
|
||
}
|
||
if (lastColumn) {
|
||
if (rowSpan_1.isRowSpanEnabled(sortState, column)) {
|
||
rowIndex = rowSpan_1.getRowSpanBottomIndex(rowIndex, columnName, filteredRawData);
|
||
}
|
||
rowIndex = getNextRowIndex(rowIndex, heights);
|
||
columnIndex = rowHeaderCount;
|
||
}
|
||
else {
|
||
columnIndex += 1;
|
||
}
|
||
break;
|
||
case 'prevCell':
|
||
if (firstRow && firstColumn) {
|
||
break;
|
||
}
|
||
if (firstColumn) {
|
||
if (rowSpan_1.isRowSpanEnabled(sortState, column)) {
|
||
rowIndex = rowSpan_1.getRowSpanTopIndex(rowIndex, columnName, filteredRawData);
|
||
}
|
||
rowIndex = getPrevRowIndex(rowIndex, heights);
|
||
columnIndex = visibleColumnsWithRowHeader.length - 1;
|
||
}
|
||
else {
|
||
columnIndex -= 1;
|
||
}
|
||
break;
|
||
default:
|
||
break;
|
||
}
|
||
rowIndex = common_1.clamp(rowIndex, 0, lastRowIndex);
|
||
columnIndex = common_1.clamp(columnIndex, 0, visibleColumnsWithRowHeader.length - 1);
|
||
return [rowIndex, columnIndex];
|
||
}
|
||
exports.getNextCellIndex = getNextCellIndex;
|
||
function getRemoveRange(store) {
|
||
var focus = store.focus, selection = store.selection;
|
||
var totalColumnIndex = focus.totalColumnIndex, originalRowIndex = focus.originalRowIndex;
|
||
var originalRange = selection.originalRange;
|
||
if (originalRange) {
|
||
return originalRange;
|
||
}
|
||
if (!common_1.isNull(totalColumnIndex) && !common_1.isNull(originalRowIndex)) {
|
||
return {
|
||
column: [totalColumnIndex, totalColumnIndex],
|
||
row: [originalRowIndex, originalRowIndex],
|
||
};
|
||
}
|
||
return null;
|
||
}
|
||
exports.getRemoveRange = getRemoveRange;
|
||
function getNextCellIndexWithRowSpan(store, command, currentRowIndex, columnRange, cellIndexes) {
|
||
var rowIndex = cellIndexes[0];
|
||
var columnIndex = cellIndexes[1];
|
||
var _a = selection_1.getSortedRange(columnRange), startColumnIndex = _a[0], endColumnIndex = _a[1];
|
||
for (var index = startColumnIndex; index <= endColumnIndex; index += 1) {
|
||
var nextRowIndex = getNextCellIndex(store, command, [currentRowIndex, index])[0];
|
||
if ((command === 'up' && nextRowIndex < rowIndex) ||
|
||
(command === 'down' && nextRowIndex > rowIndex)) {
|
||
rowIndex = nextRowIndex;
|
||
}
|
||
}
|
||
return [rowIndex, columnIndex];
|
||
}
|
||
exports.getNextCellIndexWithRowSpan = getNextCellIndexWithRowSpan;
|
||
|
||
|
||
/***/ }),
|
||
/* 125 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.dragMoveRowHeader = exports.mouseDownRowHeader = exports.dragMoveHeader = exports.mouseDownHeader = exports.mouseDownBody = exports.dragEnd = exports.dragMoveBody = exports.selectionEnd = exports.setNavigating = void 0;
|
||
var common_1 = __webpack_require__(0);
|
||
var column_1 = __webpack_require__(10);
|
||
var focus_1 = __webpack_require__(18);
|
||
var selection_1 = __webpack_require__(16);
|
||
var rowSpan_1 = __webpack_require__(13);
|
||
var selection_2 = __webpack_require__(22);
|
||
var data_1 = __webpack_require__(6);
|
||
var mouse_1 = __webpack_require__(37);
|
||
function stopAutoScroll(selection) {
|
||
var intervalIdForAutoScroll = selection.intervalIdForAutoScroll;
|
||
if (intervalIdForAutoScroll !== null) {
|
||
clearInterval(intervalIdForAutoScroll);
|
||
selection.intervalIdForAutoScroll = null;
|
||
}
|
||
}
|
||
function isAutoScrollable(overflowX, overflowY) {
|
||
return !(overflowX === 0 && overflowY === 0);
|
||
}
|
||
function adjustScrollLeft(overflowX, viewport) {
|
||
var scrollPixelScale = viewport.scrollPixelScale, scrollLeft = viewport.scrollLeft, maxScrollLeft = viewport.maxScrollLeft;
|
||
if (overflowX < 0) {
|
||
viewport.scrollLeft = Math.max(0, scrollLeft - scrollPixelScale);
|
||
}
|
||
else if (overflowX > 0) {
|
||
viewport.scrollLeft = Math.min(maxScrollLeft, scrollLeft + scrollPixelScale);
|
||
}
|
||
}
|
||
function adjustScrollTop(overflowY, viewport) {
|
||
var scrollTop = viewport.scrollTop, maxScrollTop = viewport.maxScrollTop, scrollPixelScale = viewport.scrollPixelScale;
|
||
if (overflowY < 0) {
|
||
viewport.scrollTop = Math.max(0, scrollTop - scrollPixelScale);
|
||
}
|
||
else if (overflowY > 0) {
|
||
viewport.scrollTop = Math.min(maxScrollTop, scrollTop + scrollPixelScale);
|
||
}
|
||
}
|
||
function adjustScroll(viewport, overflow) {
|
||
if (overflow.x) {
|
||
adjustScrollLeft(overflow.x, viewport);
|
||
}
|
||
if (overflow.y) {
|
||
adjustScrollTop(overflow.y, viewport);
|
||
}
|
||
}
|
||
function setScrolling(_a, bodyWidth, selection, dimension, viewport) {
|
||
var pageX = _a.pageX, pageY = _a.pageY;
|
||
var overflow = mouse_1.getOverflowFromMousePosition(pageX, pageY, bodyWidth, dimension);
|
||
stopAutoScroll(selection);
|
||
if (isAutoScrollable(overflow.x, overflow.y)) {
|
||
selection.intervalIdForAutoScroll = setInterval(adjustScroll.bind(null, viewport, overflow));
|
||
}
|
||
}
|
||
function setNavigating(_a, navigating) {
|
||
var focus = _a.focus;
|
||
focus.navigating = navigating;
|
||
}
|
||
exports.setNavigating = setNavigating;
|
||
function selectionEnd(_a) {
|
||
var selection = _a.selection;
|
||
selection.inputRange = null;
|
||
}
|
||
exports.selectionEnd = selectionEnd;
|
||
function updateSelection(store, dragData) {
|
||
var _a;
|
||
var viewport = store.viewport, selection = store.selection, column = store.column, id = store.id, data = store.data, focus = store.focus;
|
||
var scrollTop = viewport.scrollTop, scrollLeft = viewport.scrollLeft;
|
||
var pageX = dragData.pageX, pageY = dragData.pageY;
|
||
var curInputRange = selection.inputRange;
|
||
var startRowIndex, startColumnIndex, endRowIndex;
|
||
var viewInfo = { pageX: pageX, pageY: pageY, scrollTop: scrollTop, scrollLeft: scrollLeft };
|
||
var endColumnIndex = mouse_1.findColumnIndexByPosition(store, viewInfo);
|
||
endRowIndex = mouse_1.findRowIndexByPosition(store, viewInfo);
|
||
if (curInputRange === null) {
|
||
var totalColumnIndex = focus.totalColumnIndex, rowIndex = focus.rowIndex;
|
||
startColumnIndex = totalColumnIndex;
|
||
startRowIndex = rowIndex;
|
||
}
|
||
else {
|
||
startRowIndex = curInputRange.row[0];
|
||
startColumnIndex = curInputRange.column[0];
|
||
}
|
||
if (startColumnIndex < 0 || endColumnIndex < 0 || startRowIndex < 0 || endRowIndex < 0) {
|
||
return;
|
||
}
|
||
_a = rowSpan_1.getRowRangeWithRowSpan([startRowIndex, endRowIndex], [startColumnIndex, endColumnIndex], column, store.focus.rowIndex, data), startRowIndex = _a[0], endRowIndex = _a[1];
|
||
var inputRange = {
|
||
row: [startRowIndex, endRowIndex],
|
||
column: [startColumnIndex, endColumnIndex],
|
||
};
|
||
selection_1.changeSelectionRange(selection, inputRange, id);
|
||
}
|
||
function finishEditingByHeaderSelection(store, rowKey, columnName) {
|
||
var editingAddress = store.focus.editingAddress;
|
||
if (editingAddress) {
|
||
if (editingAddress.rowKey === rowKey && editingAddress.columnName === columnName) {
|
||
focus_1.saveAndFinishEditing(store);
|
||
}
|
||
}
|
||
}
|
||
function dragMoveBody(store, dragStartData, dragData, elementInfo) {
|
||
var dimension = store.dimension, columnCoords = store.columnCoords, selection = store.selection, viewport = store.viewport;
|
||
var areaWidth = columnCoords.areaWidth;
|
||
var _a = mouse_1.getColumnNameRange(store, dragStartData, dragData, elementInfo), startColumnName = _a[0], endColumnName = _a[1];
|
||
if (!column_1.isRowHeader(startColumnName) && !column_1.isRowHeader(endColumnName)) {
|
||
updateSelection(store, dragData);
|
||
setScrolling(dragData, areaWidth.L + areaWidth.R, selection, dimension, viewport);
|
||
}
|
||
}
|
||
exports.dragMoveBody = dragMoveBody;
|
||
function dragEnd(_a) {
|
||
var selection = _a.selection;
|
||
stopAutoScroll(selection);
|
||
}
|
||
exports.dragEnd = dragEnd;
|
||
function mouseDownBody(store, elementInfo, eventInfo) {
|
||
var data = store.data, column = store.column, columnCoords = store.columnCoords, rowCoords = store.rowCoords, id = store.id;
|
||
var filteredRawData = data.filteredRawData;
|
||
if (!filteredRawData.length) {
|
||
return;
|
||
}
|
||
var pageX = eventInfo.pageX, pageY = eventInfo.pageY, shiftKey = eventInfo.shiftKey;
|
||
var visibleColumnsBySideWithRowHeader = column.visibleColumnsBySideWithRowHeader;
|
||
var side = elementInfo.side, scrollLeft = elementInfo.scrollLeft, scrollTop = elementInfo.scrollTop, left = elementInfo.left, top = elementInfo.top;
|
||
var offsetLeft = pageX - left + scrollLeft;
|
||
var offsetTop = pageY - top + scrollTop;
|
||
var columnIndex = common_1.findOffsetIndex(columnCoords.offsets[side], offsetLeft);
|
||
var columnName = visibleColumnsBySideWithRowHeader[side][columnIndex].name;
|
||
if (!column_1.isRowHeader(columnName)) {
|
||
if (shiftKey) {
|
||
var dragData = { pageX: pageX, pageY: pageY };
|
||
updateSelection(store, dragData);
|
||
}
|
||
else {
|
||
var rowIndex = common_1.findOffsetIndex(rowCoords.offsets, offsetTop);
|
||
selectionEnd(store);
|
||
focus_1.changeFocus(store, data_1.getRowKeyByIndexWithPageRange(data, rowIndex), columnName, id);
|
||
}
|
||
}
|
||
}
|
||
exports.mouseDownBody = mouseDownBody;
|
||
function mouseDownHeader(store, name, parentHeader) {
|
||
var _a;
|
||
var data = store.data, selection = store.selection, id = store.id, column = store.column, rowCoords = store.rowCoords;
|
||
var filteredRawData = data.filteredRawData;
|
||
if (!filteredRawData.length) {
|
||
return;
|
||
}
|
||
var visibleColumnsWithRowHeader = column.visibleColumnsWithRowHeader, complexColumnHeaders = column.complexColumnHeaders;
|
||
var endRowIndex = rowCoords.heights.length - 1;
|
||
var startColumnIndex, endColumnIndex, columnName;
|
||
if (parentHeader) {
|
||
_a = selection_2.getChildColumnRange(visibleColumnsWithRowHeader, complexColumnHeaders, name), startColumnIndex = _a[0], endColumnIndex = _a[1];
|
||
columnName = visibleColumnsWithRowHeader[startColumnIndex].name;
|
||
}
|
||
else {
|
||
startColumnIndex = endColumnIndex = common_1.findPropIndex('name', name, visibleColumnsWithRowHeader);
|
||
columnName = name;
|
||
}
|
||
var inputRange = {
|
||
row: [0, endRowIndex],
|
||
column: [startColumnIndex, endColumnIndex],
|
||
};
|
||
var rowKey = data_1.getRowKeyByIndexWithPageRange(data, 0);
|
||
finishEditingByHeaderSelection(store, rowKey, columnName);
|
||
focus_1.changeFocus(store, rowKey, columnName, id);
|
||
selection_1.changeSelectionRange(selection, inputRange, id);
|
||
}
|
||
exports.mouseDownHeader = mouseDownHeader;
|
||
function dragMoveHeader(store, dragData, startSelectedName) {
|
||
var dimension = store.dimension, viewport = store.viewport, columnCoords = store.columnCoords, selection = store.selection, column = store.column, id = store.id;
|
||
var scrollTop = viewport.scrollTop, scrollLeft = viewport.scrollLeft;
|
||
var areaWidth = columnCoords.areaWidth;
|
||
var visibleColumnsWithRowHeader = column.visibleColumnsWithRowHeader, complexColumnHeaders = column.complexColumnHeaders;
|
||
var pageX = dragData.pageX, pageY = dragData.pageY;
|
||
var curInputRange = selection.inputRange;
|
||
if (common_1.isNull(curInputRange)) {
|
||
return;
|
||
}
|
||
var _a = selection_2.getChildColumnRange(visibleColumnsWithRowHeader, complexColumnHeaders, startSelectedName), startColumnIdx = _a[0], endColumnIdx = _a[1];
|
||
var viewInfo = { pageX: pageX, pageY: pageY, scrollTop: scrollTop, scrollLeft: scrollLeft };
|
||
var columnIndex = mouse_1.findColumnIndexByPosition(store, viewInfo);
|
||
var rowIndex = curInputRange.row[1];
|
||
if (columnIndex < startColumnIdx) {
|
||
startColumnIdx = columnIndex;
|
||
}
|
||
if (columnIndex > endColumnIdx) {
|
||
endColumnIdx = columnIndex;
|
||
}
|
||
if (columnIndex >= 0) {
|
||
var inputRange = {
|
||
row: [0, rowIndex],
|
||
column: [startColumnIdx, endColumnIdx],
|
||
};
|
||
selection_1.changeSelectionRange(selection, inputRange, id);
|
||
setScrolling(dragData, areaWidth.L + areaWidth.R, selection, dimension, viewport);
|
||
}
|
||
}
|
||
exports.dragMoveHeader = dragMoveHeader;
|
||
function mouseDownRowHeader(store, rowKey) {
|
||
var selection = store.selection, id = store.id, column = store.column, data = store.data;
|
||
var visibleColumnsWithRowHeader = column.visibleColumnsWithRowHeader, rowHeaderCount = column.rowHeaderCount;
|
||
var rowIndex = data_1.findIndexByRowKey(data, column, id, rowKey);
|
||
var rowIndexPerPage = data_1.getRowIndexPerPage(data, rowIndex);
|
||
var endColumnIndex = visibleColumnsWithRowHeader.length - 1;
|
||
var _a = rowSpan_1.getRowRangeWithRowSpan([rowIndexPerPage, rowIndexPerPage], [rowHeaderCount, endColumnIndex], column, null, data), startRowIndex = _a[0], endRowIndex = _a[1];
|
||
var inputRange = {
|
||
row: [startRowIndex, endRowIndex],
|
||
column: [rowHeaderCount, endColumnIndex],
|
||
};
|
||
var editingRowKey = data.filteredRawData[rowIndex].rowKey;
|
||
var editingColumnName = visibleColumnsWithRowHeader[rowHeaderCount].name;
|
||
finishEditingByHeaderSelection(store, editingRowKey, editingColumnName);
|
||
focus_1.changeFocus(store, editingRowKey, editingColumnName, id);
|
||
selection_1.changeSelectionRange(selection, inputRange, id);
|
||
}
|
||
exports.mouseDownRowHeader = mouseDownRowHeader;
|
||
function dragMoveRowHeader(store, dragData) {
|
||
var _a;
|
||
var viewport = store.viewport, selection = store.selection, id = store.id, data = store.data, column = store.column;
|
||
var scrollTop = viewport.scrollTop, scrollLeft = viewport.scrollLeft;
|
||
var rowHeaderCount = column.rowHeaderCount;
|
||
var pageX = dragData.pageX, pageY = dragData.pageY;
|
||
var curInputRange = selection.inputRange;
|
||
if (curInputRange === null) {
|
||
return;
|
||
}
|
||
var viewInfo = { pageX: pageX, pageY: pageY, scrollTop: scrollTop, scrollLeft: scrollLeft };
|
||
var columnIndex = curInputRange.column[1];
|
||
var startRowIndex = curInputRange.row[0];
|
||
var endRowIndex = mouse_1.findRowIndexByPosition(store, viewInfo);
|
||
_a = rowSpan_1.getRowRangeWithRowSpan([startRowIndex, endRowIndex], [rowHeaderCount, columnIndex], column, null, data), startRowIndex = _a[0], endRowIndex = _a[1];
|
||
var inputRange = {
|
||
row: [startRowIndex, endRowIndex],
|
||
column: [rowHeaderCount, columnIndex],
|
||
};
|
||
selection_1.changeSelectionRange(selection, inputRange, id);
|
||
}
|
||
exports.dragMoveRowHeader = dragMoveRowHeader;
|
||
|
||
|
||
/***/ }),
|
||
/* 126 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.excelExport = exports.csvExport = exports.copyRows = exports.copyColumns = exports.copy = exports.hideContextMenu = exports.showContextMenu = void 0;
|
||
var clipboard_1 = __webpack_require__(57);
|
||
var export_1 = __webpack_require__(58);
|
||
var common_1 = __webpack_require__(0);
|
||
var data_1 = __webpack_require__(6);
|
||
function showContextMenu(_a, pos, elementInfo, eventInfo) {
|
||
var contextMenu = _a.contextMenu, data = _a.data, column = _a.column, columnCoords = _a.columnCoords, rowCoords = _a.rowCoords;
|
||
var pageX = eventInfo.pageX, pageY = eventInfo.pageY;
|
||
var visibleColumnsBySideWithRowHeader = column.visibleColumnsBySideWithRowHeader;
|
||
var side = elementInfo.side, scrollLeft = elementInfo.scrollLeft, scrollTop = elementInfo.scrollTop, left = elementInfo.left, top = elementInfo.top;
|
||
var offsetLeft = pageX - left + scrollLeft;
|
||
var offsetTop = pageY - top + scrollTop;
|
||
var columnIndex = common_1.findOffsetIndex(columnCoords.offsets[side], offsetLeft);
|
||
var columnName = visibleColumnsBySideWithRowHeader[side][columnIndex].name;
|
||
var rowIndex = common_1.findOffsetIndex(rowCoords.offsets, offsetTop);
|
||
var rowKey = data_1.getRowKeyByIndexWithPageRange(data, rowIndex);
|
||
contextMenu.posInfo = { pos: pos, rowKey: rowKey, columnName: columnName };
|
||
}
|
||
exports.showContextMenu = showContextMenu;
|
||
function hideContextMenu(_a) {
|
||
var contextMenu = _a.contextMenu;
|
||
contextMenu.posInfo = null;
|
||
}
|
||
exports.hideContextMenu = hideContextMenu;
|
||
function copy(store) {
|
||
clipboard_1.execCopy(store);
|
||
}
|
||
exports.copy = copy;
|
||
function copyColumns(store) {
|
||
var data = store.data, selection = store.selection, focus = store.focus;
|
||
var originalRange = selection.originalRange;
|
||
var columnRange = originalRange
|
||
? [originalRange.column[0], originalRange.column[1]]
|
||
: [focus.totalColumnIndex, focus.totalColumnIndex];
|
||
var rowRange = [0, data.filteredRawData.length - 1];
|
||
clipboard_1.execCopy(store, { rowRange: rowRange, columnRange: columnRange });
|
||
}
|
||
exports.copyColumns = copyColumns;
|
||
function copyRows(store) {
|
||
var selection = store.selection, focus = store.focus, column = store.column;
|
||
var originalRange = selection.originalRange;
|
||
var columnRange = [0, column.visibleColumnsWithRowHeader.length - 1];
|
||
var rowRange = originalRange
|
||
? [originalRange.row[0], originalRange.row[1]]
|
||
: [focus.originalRowIndex, focus.originalRowIndex];
|
||
clipboard_1.execCopy(store, { rowRange: rowRange, columnRange: columnRange });
|
||
}
|
||
exports.copyRows = copyRows;
|
||
function csvExport(store) {
|
||
export_1.execExport(store, 'csv');
|
||
}
|
||
exports.csvExport = csvExport;
|
||
function excelExport(store) {
|
||
export_1.execExport(store, 'xlsx');
|
||
}
|
||
exports.excelExport = excelExport;
|
||
|
||
|
||
/***/ }),
|
||
/* 127 */
|
||
/***/ (function(module, exports) {
|
||
|
||
module.exports = __WEBPACK_EXTERNAL_MODULE__127__;
|
||
|
||
/***/ }),
|
||
/* 128 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.getTargetData = exports.getHeaderDataFromComplexColumn = exports.removeUnnecessaryColumns = exports.getNamesAndHeadersOfColumnsByOptions = exports.createExportEvent = void 0;
|
||
var tslib_1 = __webpack_require__(1);
|
||
var column_1 = __webpack_require__(10);
|
||
var common_1 = __webpack_require__(0);
|
||
var gridEvent_1 = tslib_1.__importDefault(__webpack_require__(9));
|
||
var column_2 = __webpack_require__(12);
|
||
var data_1 = __webpack_require__(23);
|
||
function getColumnInfoDictionary(store, columnNames) {
|
||
var colmnInfos = {};
|
||
store.column.allColumns.forEach(function (columnInfo) {
|
||
if (common_1.includes(columnNames, columnInfo.name)) {
|
||
colmnInfos[columnInfo.name] = columnInfo;
|
||
}
|
||
});
|
||
return colmnInfos;
|
||
}
|
||
function getValue(row, colmnInfos, columName, useFormattedValue, index) {
|
||
if (column_1.isRowNumColumn(columName)) {
|
||
return "No." + (index + 1);
|
||
}
|
||
var origianlValue = row[columName];
|
||
var formattedValue = data_1.createFormattedValue(row, colmnInfos[columName]);
|
||
return useFormattedValue && String(origianlValue) !== formattedValue
|
||
? formattedValue
|
||
: origianlValue;
|
||
}
|
||
function createExportEvent(eventType, eventParams) {
|
||
var exportFormat = eventParams.exportFormat, exportOptions = eventParams.exportOptions, data = eventParams.data, exportFn = eventParams.exportFn;
|
||
var props = {};
|
||
switch (eventType) {
|
||
/**
|
||
* Occurs before export
|
||
* @event Grid#beforeExport
|
||
* @property {'csv' | 'xlsx'} exportFormat - Export format
|
||
* @property {Object} exportOptions - Used export options
|
||
* @property {boolean} exportOptions.includeHeader - Whether to include headers
|
||
* @property {boolean} exportOptions.includeHiddenColumns - Whether to include hidden columns
|
||
* @property {string[]} exportOptions.columnNames - Columns names to export
|
||
* @property {boolean} exportOptions.onlySelected - Whether to export only the selected range
|
||
* @property {boolean} exportOptions.onlyFiltered - Whether to export only the filtered data
|
||
* @property {','|';'|'\t'|'|'} exportOptions.delimiter - Delimiter to export CSV
|
||
* @property {string} exportOptions.fileName - File name to export
|
||
* @property {string[][]} data - Data to be finally exported
|
||
* @property {function} exportFn - Callback function to export modified data
|
||
* @property {Grid} instance - Current grid instance
|
||
*/
|
||
case 'beforeExport':
|
||
props = { exportFormat: exportFormat, exportOptions: exportOptions, data: data, exportFn: exportFn };
|
||
break;
|
||
/**
|
||
* Occurs after export
|
||
* @event Grid#afterExport
|
||
* @property {'csv' | 'xlsx'} exportFormat - Export format
|
||
* @property {Object} exportOptions - Used export options
|
||
* @property {boolean} exportOptions.includeHeader - Whether to include headers
|
||
* @property {boolean} exportOptions.includeHiddenColumns - Whether to include hidden columns
|
||
* @property {string[]} exportOptions.columnNames - Columns names to export
|
||
* @property {boolean} exportOptions.onlySelected - Whether to export only the selected range
|
||
* @property {boolean} exportOptions.onlyFiltered - Whether to export only the filtered data
|
||
* @property {','|';'|'\t'|'|'} exportOptions.delimiter - Delimiter to export CSV
|
||
* @property {string} exportOptions.fileName - File name to export
|
||
* @property {string[][]} data - Data to be finally exported
|
||
* @property {Grid} instance - Current grid instance
|
||
*/
|
||
case 'afterExport':
|
||
props = { exportFormat: exportFormat, exportOptions: exportOptions, data: data };
|
||
break;
|
||
default: // do nothing
|
||
}
|
||
return new gridEvent_1.default(props);
|
||
}
|
||
exports.createExportEvent = createExportEvent;
|
||
function getNamesAndHeadersOfColumnsByOptions(column, columnNames, includeHiddenColumns, onlySelected, originalRange) {
|
||
var regSort = /\(desc\)|\(asc\)/;
|
||
var allColumns = column.allColumns;
|
||
var targetColumnNames = [];
|
||
var targetColumnHeaders = [];
|
||
if (onlySelected && originalRange) {
|
||
var _a = originalRange.column, start = _a[0], end = _a[1];
|
||
allColumns
|
||
.filter(function (colInfo) { return includeHiddenColumns || !colInfo.hidden; })
|
||
.slice(start, end + 1)
|
||
.forEach(function (colInfo) {
|
||
targetColumnNames.push(colInfo.name);
|
||
targetColumnHeaders.push(colInfo.header);
|
||
});
|
||
}
|
||
else if (columnNames.length === 0) {
|
||
allColumns
|
||
.filter(function (colInfo) {
|
||
return (includeHiddenColumns || !colInfo.hidden) &&
|
||
!(column_1.isCheckboxColumn(colInfo.name) || column_1.isDragColumn(colInfo.name));
|
||
})
|
||
.forEach(function (colInfo) {
|
||
targetColumnNames.push(colInfo.name);
|
||
targetColumnHeaders.push(colInfo.header);
|
||
});
|
||
}
|
||
else {
|
||
targetColumnNames = columnNames.slice(0);
|
||
targetColumnHeaders = allColumns
|
||
.filter(function (colInfo) { return common_1.includes(targetColumnNames, colInfo.name); })
|
||
.map(function (colInfo) { return colInfo.header.replace(regSort, ''); });
|
||
}
|
||
return { targetColumnNames: targetColumnNames, targetColumnHeaders: targetColumnHeaders };
|
||
}
|
||
exports.getNamesAndHeadersOfColumnsByOptions = getNamesAndHeadersOfColumnsByOptions;
|
||
function removeUnnecessaryColumns(hierarchy, columnNames) {
|
||
return hierarchy.filter(function (colInfos) { return common_1.includes(columnNames, colInfos[colInfos.length - 1].name); });
|
||
}
|
||
exports.removeUnnecessaryColumns = removeUnnecessaryColumns;
|
||
function getHeaderDataFromComplexColumn(column, columnNames) {
|
||
var hierachy = column_2.getComplexColumnsHierarchy(column.allColumns, column.complexColumnHeaders);
|
||
var filteredHierachy = removeUnnecessaryColumns(hierachy, columnNames);
|
||
return column_2.convertHierarchyToData(filteredHierachy);
|
||
}
|
||
exports.getHeaderDataFromComplexColumn = getHeaderDataFromComplexColumn;
|
||
function getTargetData(store, rows, columnNames, onlySelected, useFormattedValue) {
|
||
var colmnInfoDictionary = getColumnInfoDictionary(store, columnNames);
|
||
var originalRange = store.selection.originalRange;
|
||
var targetRows = rows;
|
||
if (onlySelected && originalRange) {
|
||
var _a = originalRange.row, rowStart = _a[0], rowEnd = _a[1];
|
||
targetRows = rows.slice(rowStart, rowEnd + 1);
|
||
}
|
||
return targetRows.map(function (row, index) {
|
||
return columnNames.map(function (colName) {
|
||
return getValue(row, colmnInfoDictionary, colName, useFormattedValue, index);
|
||
});
|
||
});
|
||
}
|
||
exports.getTargetData = getTargetData;
|
||
|
||
|
||
/***/ }),
|
||
/* 129 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
var tslib_1 = __webpack_require__(1);
|
||
var preset_1 = __webpack_require__(130);
|
||
var common_1 = __webpack_require__(0);
|
||
var dom_1 = __webpack_require__(2);
|
||
var styleGen = tslib_1.__importStar(__webpack_require__(131));
|
||
var STYLE_ELEMENT_ID = 'tui-grid-theme-style';
|
||
var presetOptions = {
|
||
default: preset_1.presetDefault,
|
||
striped: preset_1.striped,
|
||
clean: preset_1.clean,
|
||
};
|
||
var styleGenMethodMap = {
|
||
outline: styleGen.outline,
|
||
frozenBorder: styleGen.frozenBorder,
|
||
scrollbar: styleGen.scrollbar,
|
||
heightResizeHandle: styleGen.heightResizeHandle,
|
||
pagination: styleGen.pagination,
|
||
selection: styleGen.selection,
|
||
};
|
||
var styleGenAreaMethodMap = {
|
||
header: styleGen.headerArea,
|
||
body: styleGen.bodyArea,
|
||
summary: styleGen.summaryArea,
|
||
};
|
||
var styleGenRowMethodMap = {
|
||
odd: styleGen.rowOdd,
|
||
even: styleGen.rowEven,
|
||
dummy: styleGen.rowDummy,
|
||
hover: styleGen.rowHover,
|
||
};
|
||
var styleGenCellMethodMap = {
|
||
normal: styleGen.cell,
|
||
editable: styleGen.cellEditable,
|
||
header: styleGen.cellHeader,
|
||
rowHeader: styleGen.cellRowHeader,
|
||
summary: styleGen.cellSummary,
|
||
required: styleGen.cellRequired,
|
||
disabled: styleGen.cellDisabled,
|
||
invalid: styleGen.cellInvalid,
|
||
selectedHeader: styleGen.cellSelectedHeader,
|
||
selectedRowHeader: styleGen.cellSelectedRowHeader,
|
||
focused: styleGen.cellFocused,
|
||
focusedInactive: styleGen.cellFocusedInactive,
|
||
// deprecate
|
||
oddRow: styleGen.rowOdd,
|
||
evenRow: styleGen.rowEven,
|
||
currentRow: styleGen.cellCurrentRow,
|
||
dummy: styleGen.rowDummy,
|
||
};
|
||
function buildCssString(options) {
|
||
var area = options.area, cell = options.cell, row = options.row;
|
||
var styles = [];
|
||
Object.keys(styleGenMethodMap).forEach(function (key) {
|
||
var keyWithType = key;
|
||
var value = options[keyWithType];
|
||
if (value) {
|
||
var fn = styleGen[keyWithType];
|
||
styles.push(fn(value));
|
||
}
|
||
});
|
||
if (area) {
|
||
Object.keys(styleGenAreaMethodMap).forEach(function (key) {
|
||
var keyWithType = key;
|
||
var value = area[keyWithType];
|
||
if (value) {
|
||
var fn = styleGenAreaMethodMap[keyWithType];
|
||
styles.push(fn(value));
|
||
}
|
||
});
|
||
}
|
||
if (cell) {
|
||
Object.keys(styleGenCellMethodMap).forEach(function (key) {
|
||
var keyWithType = key;
|
||
var value = cell[keyWithType];
|
||
if (value) {
|
||
var fn = styleGenCellMethodMap[keyWithType];
|
||
styles.push(fn(value));
|
||
}
|
||
});
|
||
}
|
||
if (row) {
|
||
// Written later to override the row style in cell style
|
||
Object.keys(styleGenRowMethodMap).forEach(function (key) {
|
||
var keyWithType = key;
|
||
var value = row[keyWithType];
|
||
if (value) {
|
||
var fn = styleGenRowMethodMap[keyWithType];
|
||
styles.push(fn(value));
|
||
}
|
||
});
|
||
}
|
||
return styles.join('');
|
||
}
|
||
function setDocumentStyle(options) {
|
||
var cssString = buildCssString(options);
|
||
var elem = document.getElementById(STYLE_ELEMENT_ID);
|
||
if (elem && elem.parentNode) {
|
||
elem.parentNode.removeChild(elem);
|
||
}
|
||
dom_1.appendStyleElement(STYLE_ELEMENT_ID, cssString);
|
||
}
|
||
exports.default = {
|
||
/**
|
||
* Creates a style element using theme options identified by given name,
|
||
* and appends it to the document.
|
||
* @param themeName - preset theme name
|
||
* @param extOptions - if exist, extend preset theme options with it.
|
||
*/
|
||
apply: function (themeName, extOptions) {
|
||
var options = presetOptions[themeName];
|
||
if (!options) {
|
||
options = presetOptions['default'];
|
||
}
|
||
if (extOptions) {
|
||
options = common_1.deepMergedCopy(options, extOptions);
|
||
}
|
||
setDocumentStyle(options);
|
||
},
|
||
/**
|
||
* Returns whether the style of a theme is applied.
|
||
*/
|
||
isApplied: function () {
|
||
return !!document.getElementById(STYLE_ELEMENT_ID);
|
||
},
|
||
};
|
||
|
||
|
||
/***/ }),
|
||
/* 130 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.striped = exports.clean = exports.presetDefault = void 0;
|
||
var common_1 = __webpack_require__(0);
|
||
exports.presetDefault = {
|
||
selection: {
|
||
background: '#00A9ff',
|
||
border: '#00a9ff',
|
||
},
|
||
heightResizeHandle: {
|
||
border: '#fff',
|
||
background: '#fff',
|
||
},
|
||
pagination: {
|
||
border: 'transparent',
|
||
background: 'transparent',
|
||
},
|
||
scrollbar: {
|
||
border: '#eee',
|
||
background: '#fff',
|
||
emptySpace: '#f9f9f9',
|
||
thumb: '#ddd',
|
||
active: '#ddd',
|
||
},
|
||
outline: {
|
||
border: '#aaa',
|
||
showVerticalBorder: false,
|
||
},
|
||
frozenBorder: {
|
||
border: '#aaa',
|
||
},
|
||
area: {
|
||
header: {
|
||
border: '#ccc',
|
||
background: '#fff',
|
||
},
|
||
body: {
|
||
background: '#fff',
|
||
},
|
||
summary: {
|
||
border: '#eee',
|
||
background: '#fff',
|
||
},
|
||
},
|
||
cell: {
|
||
normal: {
|
||
background: '#f4f4f4',
|
||
border: '#eee',
|
||
text: '#333',
|
||
showVerticalBorder: false,
|
||
showHorizontalBorder: true,
|
||
},
|
||
header: {
|
||
background: '#fff',
|
||
border: '#eee',
|
||
text: '#222',
|
||
showVerticalBorder: true,
|
||
showHorizontalBorder: true,
|
||
},
|
||
rowHeader: {
|
||
background: '#fff',
|
||
border: '#eee',
|
||
text: '#333',
|
||
showVerticalBorder: false,
|
||
showHorizontalBorder: true,
|
||
},
|
||
summary: {
|
||
background: '#fff',
|
||
border: '#eee',
|
||
text: '#333',
|
||
showVerticalBorder: false,
|
||
},
|
||
selectedHeader: {
|
||
background: '#e5f6ff',
|
||
},
|
||
selectedRowHeader: {
|
||
background: '#e5f6ff',
|
||
},
|
||
focused: {
|
||
border: '#00a9ff',
|
||
},
|
||
focusedInactive: {
|
||
border: '#aaa',
|
||
},
|
||
required: {
|
||
background: '#fffdeb',
|
||
},
|
||
editable: {
|
||
background: '#fff',
|
||
},
|
||
disabled: {
|
||
background: '#f9f9f9',
|
||
text: '#c1c1c1',
|
||
},
|
||
dummy: {
|
||
background: '#fff',
|
||
},
|
||
invalid: {
|
||
background: '#ffe5e5',
|
||
},
|
||
evenRow: {},
|
||
oddRow: {},
|
||
currentRow: {},
|
||
},
|
||
rowHover: {
|
||
background: 'none',
|
||
},
|
||
};
|
||
exports.clean = common_1.deepMergedCopy(exports.presetDefault, {
|
||
outline: {
|
||
border: '#eee',
|
||
showVerticalBorder: false,
|
||
},
|
||
frozenBorder: {
|
||
border: '#ddd',
|
||
},
|
||
area: {
|
||
header: {
|
||
border: '#eee',
|
||
background: '#f9f9f9',
|
||
},
|
||
body: {
|
||
background: '#fff',
|
||
},
|
||
summary: {
|
||
border: '#fff',
|
||
background: '#fff',
|
||
},
|
||
},
|
||
cell: {
|
||
normal: {
|
||
background: '#fff',
|
||
border: '#eee',
|
||
showVerticalBorder: false,
|
||
showHorizontalBorder: false,
|
||
},
|
||
header: {
|
||
background: '#f9f9f9',
|
||
border: '#eee',
|
||
showVerticalBorder: true,
|
||
showHorizontalBorder: true,
|
||
},
|
||
rowHeader: {
|
||
border: '#eee',
|
||
showVerticalBorder: false,
|
||
showHorizontalBorder: false,
|
||
},
|
||
},
|
||
});
|
||
exports.striped = common_1.deepMergedCopy(exports.presetDefault, {
|
||
outline: {
|
||
border: '#eee',
|
||
showVerticalBorder: false,
|
||
},
|
||
frozenBorder: {
|
||
border: '#ccc',
|
||
},
|
||
area: {
|
||
header: {
|
||
border: '#fff',
|
||
background: '#eee',
|
||
},
|
||
body: {
|
||
background: '#fff',
|
||
},
|
||
summary: {
|
||
border: '#fff',
|
||
background: '#fff',
|
||
},
|
||
},
|
||
cell: {
|
||
normal: {
|
||
background: '#fff',
|
||
border: '#fff',
|
||
showVerticalBorder: false,
|
||
showHorizontalBorder: false,
|
||
},
|
||
header: {
|
||
background: '#eee',
|
||
border: '#fff',
|
||
showVerticalBorder: true,
|
||
showHorizontalBorder: true,
|
||
},
|
||
rowHeader: {
|
||
border: '#fff',
|
||
showVerticalBorder: false,
|
||
showHorizontalBorder: false,
|
||
},
|
||
oddRow: {
|
||
background: '#fff',
|
||
},
|
||
evenRow: {
|
||
background: '#f4f4f4',
|
||
},
|
||
},
|
||
});
|
||
|
||
|
||
/***/ }),
|
||
/* 131 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.cellCurrentRow = exports.cellInvalid = exports.cellDisabled = exports.cellRequired = exports.cellEditable = exports.cellFocusedInactive = exports.cellFocused = exports.cellSelectedRowHeader = exports.cellSelectedHeader = exports.rowDummy = exports.rowHover = exports.rowOdd = exports.rowEven = exports.cellSummary = exports.cellRowHeader = exports.cellHeader = exports.cell = exports.summaryArea = exports.bodyArea = exports.headerArea = exports.selection = exports.pagination = exports.heightResizeHandle = exports.scrollbar = exports.frozenBorder = exports.outline = void 0;
|
||
var tslib_1 = __webpack_require__(1);
|
||
var dom_1 = __webpack_require__(2);
|
||
var cssRuleBuilder_1 = __webpack_require__(132);
|
||
function bgTextRuleString(className, options) {
|
||
var background = options.background, text = options.text;
|
||
return cssRuleBuilder_1.createClassRule(className).bg(background).text(text).build();
|
||
}
|
||
function bgBorderRuleString(className, options) {
|
||
var background = options.background, border = options.border;
|
||
return cssRuleBuilder_1.createClassRule(className).bg(background).border(border).build();
|
||
}
|
||
function outline(options) {
|
||
var border = options.border, showVerticalBorder = options.showVerticalBorder;
|
||
var borderTopRule = cssRuleBuilder_1.createClassRule('border-line-top').add('border-top', "1px solid " + border);
|
||
var borderBottomRule = cssRuleBuilder_1.createNestedClassRule(' .', ['no-scroll-x', 'border-line-bottom']).add('border-bottom', "1px solid " + border);
|
||
var rules = [borderTopRule, borderBottomRule];
|
||
var borderLeftRule, borderRightRule;
|
||
if (showVerticalBorder) {
|
||
borderLeftRule = cssRuleBuilder_1.createClassRule('border-line-left').add('border-left', "1px solid " + border);
|
||
borderRightRule = cssRuleBuilder_1.createNestedClassRule(' .', ['no-scroll-y', 'border-line-right']).add('border-right', "1px solid " + border);
|
||
rules = rules.concat([borderLeftRule, borderRightRule]);
|
||
}
|
||
return cssRuleBuilder_1.buildAll(rules);
|
||
}
|
||
exports.outline = outline;
|
||
function frozenBorder(options) {
|
||
return cssRuleBuilder_1.createClassRule('frozen-border').bg(options.border).build();
|
||
}
|
||
exports.frozenBorder = frozenBorder;
|
||
function scrollbar(options) {
|
||
var border = options.border, emptySpace = options.emptySpace;
|
||
var webkitScrollbarRules = cssRuleBuilder_1.createWebkitScrollbarRules("." + dom_1.cls('container'), options);
|
||
var ieScrollbarRule = cssRuleBuilder_1.createIEScrollbarRule("." + dom_1.cls('container'), options);
|
||
var xInnerBorderRule = cssRuleBuilder_1.createClassRule('border-line-bottom').add('border-bottom', "1px solid " + border);
|
||
var xOuterBorderRule = cssRuleBuilder_1.createClassRule('content-area').border(border);
|
||
var yInnerBorderRule = cssRuleBuilder_1.createClassRule('scrollbar-y-inner-border').bg(border);
|
||
var yOuterBorderRule = cssRuleBuilder_1.createClassRule('scrollbar-y-outer-border').bg(border);
|
||
var spaceRightTopRule = cssRuleBuilder_1.createClassRule('scrollbar-right-top').bg(emptySpace).border(border);
|
||
var spaceRightBottomRule = cssRuleBuilder_1.createClassRule('scrollbar-right-bottom')
|
||
.bg(emptySpace)
|
||
.border(border);
|
||
var spaceLeftBottomRule = cssRuleBuilder_1.createClassRule('scrollbar-left-bottom')
|
||
.bg(emptySpace)
|
||
.border(border);
|
||
var frozenBorderRule = cssRuleBuilder_1.createClassRule('scrollbar-frozen-border').bg(emptySpace).border(border);
|
||
return cssRuleBuilder_1.buildAll(tslib_1.__spreadArrays(webkitScrollbarRules, [
|
||
ieScrollbarRule,
|
||
xInnerBorderRule,
|
||
xOuterBorderRule,
|
||
yInnerBorderRule,
|
||
yOuterBorderRule,
|
||
spaceRightTopRule,
|
||
spaceRightBottomRule,
|
||
spaceLeftBottomRule,
|
||
frozenBorderRule,
|
||
]));
|
||
}
|
||
exports.scrollbar = scrollbar;
|
||
function heightResizeHandle(options) {
|
||
return bgBorderRuleString('height-resize-handle', options);
|
||
}
|
||
exports.heightResizeHandle = heightResizeHandle;
|
||
function pagination(options) {
|
||
return bgBorderRuleString('pagination', options);
|
||
}
|
||
exports.pagination = pagination;
|
||
function selection(options) {
|
||
return bgBorderRuleString('layer-selection', options);
|
||
}
|
||
exports.selection = selection;
|
||
function headerArea(options) {
|
||
return cssRuleBuilder_1.createClassRule('header-area').bg(options.background).border(options.border).build();
|
||
}
|
||
exports.headerArea = headerArea;
|
||
function bodyArea(options) {
|
||
return cssRuleBuilder_1.createClassRule('body-area').bg(options.background).build();
|
||
}
|
||
exports.bodyArea = bodyArea;
|
||
function summaryArea(options) {
|
||
var border = options.border, background = options.background;
|
||
var contentAreaRule = cssRuleBuilder_1.createClassRule('summary-area').bg(background).border(border);
|
||
var bodyAreaRule = cssRuleBuilder_1.createNestedClassRule(' .', ['has-summary-top', 'body-area']).border(border);
|
||
return cssRuleBuilder_1.buildAll([contentAreaRule, bodyAreaRule]);
|
||
}
|
||
exports.summaryArea = summaryArea;
|
||
function cell(options) {
|
||
return cssRuleBuilder_1.createClassRule('cell')
|
||
.bg(options.background)
|
||
.border(options.border)
|
||
.borderWidth(options)
|
||
.text(options.text)
|
||
.build();
|
||
}
|
||
exports.cell = cell;
|
||
function cellHeader(options) {
|
||
var background = options.background, border = options.border, text = options.text;
|
||
var tableRule = cssRuleBuilder_1.createNestedClassRule(' .', [
|
||
'show-lside-area',
|
||
'lside-area',
|
||
'header-area',
|
||
'table',
|
||
]).verticalBorderStyle(options, 'right');
|
||
var cellRule = cssRuleBuilder_1.createClassRule('cell-header')
|
||
.bg(background)
|
||
.border(border)
|
||
.borderWidth(options)
|
||
.text(text);
|
||
return cssRuleBuilder_1.buildAll([tableRule, cellRule]);
|
||
}
|
||
exports.cellHeader = cellHeader;
|
||
function cellRowHeader(options) {
|
||
var background = options.background, border = options.border, text = options.text;
|
||
var tableRule = cssRuleBuilder_1.createNestedClassRule(' .', [
|
||
'show-lside-area',
|
||
'lside-area',
|
||
'body-area',
|
||
'table',
|
||
]).verticalBorderStyle(options, 'right');
|
||
var cellRule = cssRuleBuilder_1.createClassRule('cell-row-header')
|
||
.bg(background)
|
||
.border(border)
|
||
.borderWidth(options)
|
||
.text(text);
|
||
return cssRuleBuilder_1.buildAll([tableRule, cellRule]);
|
||
}
|
||
exports.cellRowHeader = cellRowHeader;
|
||
function cellSummary(options) {
|
||
var background = options.background, border = options.border, text = options.text;
|
||
var tableRule = cssRuleBuilder_1.createNestedClassRule(' .', [
|
||
'show-lside-area',
|
||
'lside-area',
|
||
'summary-area',
|
||
'table',
|
||
]).verticalBorderStyle(options, 'right');
|
||
var cellRule = cssRuleBuilder_1.createClassRule('cell-summary')
|
||
.bg(background)
|
||
.border(border)
|
||
.borderWidth(options)
|
||
.text(text);
|
||
return cssRuleBuilder_1.buildAll([tableRule, cellRule]);
|
||
}
|
||
exports.cellSummary = cellSummary;
|
||
function rowEven(options) {
|
||
return cssRuleBuilder_1.create('.tui-grid-row-even>td').bg(options.background).build();
|
||
}
|
||
exports.rowEven = rowEven;
|
||
function rowOdd(options) {
|
||
return cssRuleBuilder_1.create('.tui-grid-row-odd>td').bg(options.background).build();
|
||
}
|
||
exports.rowOdd = rowOdd;
|
||
function rowHover(options) {
|
||
return cssRuleBuilder_1.create('.tui-grid-row-hover>.tui-grid-cell').bg(options.background).build();
|
||
}
|
||
exports.rowHover = rowHover;
|
||
function rowDummy(options) {
|
||
return bgTextRuleString('cell-dummy', options);
|
||
}
|
||
exports.rowDummy = rowDummy;
|
||
function cellSelectedHeader(options) {
|
||
return cssRuleBuilder_1.createNestedClassRule('.', ['cell-header', 'cell-selected'])
|
||
.bg(options.background)
|
||
.text(options.text)
|
||
.build();
|
||
}
|
||
exports.cellSelectedHeader = cellSelectedHeader;
|
||
function cellSelectedRowHeader(options) {
|
||
return cssRuleBuilder_1.createNestedClassRule('.', ['cell-row-header', 'cell-selected'])
|
||
.bg(options.background)
|
||
.text(options.text)
|
||
.build();
|
||
}
|
||
exports.cellSelectedRowHeader = cellSelectedRowHeader;
|
||
function cellFocused(options) {
|
||
var border = options.border;
|
||
var focusLayerRule = cssRuleBuilder_1.createClassRule('layer-focus-border').bg(border);
|
||
var editingLayerRule = cssRuleBuilder_1.createClassRule('layer-editing').border(border);
|
||
return cssRuleBuilder_1.buildAll([focusLayerRule, editingLayerRule]);
|
||
}
|
||
exports.cellFocused = cellFocused;
|
||
function cellFocusedInactive(options) {
|
||
return cssRuleBuilder_1.createNestedClassRule(' .', ['layer-focus-deactive', 'layer-focus-border'])
|
||
.bg(options.border)
|
||
.build();
|
||
}
|
||
exports.cellFocusedInactive = cellFocusedInactive;
|
||
function cellEditable(options) {
|
||
return bgTextRuleString('cell-editable', options);
|
||
}
|
||
exports.cellEditable = cellEditable;
|
||
function cellRequired(options) {
|
||
return bgTextRuleString('cell-required', options);
|
||
}
|
||
exports.cellRequired = cellRequired;
|
||
function cellDisabled(options) {
|
||
return bgTextRuleString('cell-disabled', options);
|
||
}
|
||
exports.cellDisabled = cellDisabled;
|
||
function cellInvalid(options) {
|
||
var background = options.background, text = options.text;
|
||
return cssRuleBuilder_1.createNestedClassRule('.', ['cell-invalid', 'cell']).bg(background).text(text).build();
|
||
}
|
||
exports.cellInvalid = cellInvalid;
|
||
function cellCurrentRow(options) {
|
||
return bgTextRuleString('cell-current-row', options);
|
||
}
|
||
exports.cellCurrentRow = cellCurrentRow;
|
||
|
||
|
||
/***/ }),
|
||
/* 132 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.buildAll = exports.createIEScrollbarRule = exports.createWebkitScrollbarRules = exports.createNestedClassRule = exports.createClassRule = exports.create = void 0;
|
||
var dom_1 = __webpack_require__(2);
|
||
var common_1 = __webpack_require__(0);
|
||
/**
|
||
* create css rule string and returns it
|
||
* @module {theme/cssBuilder}
|
||
* @param selector - css selector
|
||
* @param property - css property
|
||
* @param value - css value
|
||
* @ignore
|
||
*/
|
||
var CSSRuleBuilder = /** @class */ (function () {
|
||
function CSSRuleBuilder(selector) {
|
||
this.selector = '';
|
||
this.propValues = [];
|
||
this.init(selector);
|
||
}
|
||
CSSRuleBuilder.prototype.init = function (selector) {
|
||
if (!(typeof selector === 'string') || !selector) {
|
||
throw new Error('The Selector must be a string and not be empty.');
|
||
}
|
||
this.selector = selector;
|
||
this.propValues = [];
|
||
};
|
||
/**
|
||
* Add a set of css property and value.
|
||
* @param property - css property
|
||
* @param value - css value
|
||
*/
|
||
CSSRuleBuilder.prototype.add = function (property, value) {
|
||
if (value) {
|
||
this.propValues.push(property + ":" + value);
|
||
}
|
||
return this;
|
||
};
|
||
/**
|
||
* Shortcut for add('border-color', value)
|
||
*/
|
||
CSSRuleBuilder.prototype.border = function (value) {
|
||
return this.add('border-color', value);
|
||
};
|
||
/**
|
||
* Add a border-width style to the rule.
|
||
* @param options - visible options
|
||
* @param [options.showVerticalBorder] - whether the vertical border is visible
|
||
* @param [options.showHorizontalBorder] - whether the horizontal border is visible
|
||
*/
|
||
CSSRuleBuilder.prototype.borderWidth = function (options) {
|
||
var vertical = options.showVerticalBorder;
|
||
var horizontal = options.showHorizontalBorder;
|
||
var value;
|
||
if (common_1.isBoolean(vertical)) {
|
||
value = vertical ? '1px' : '0';
|
||
this.add('border-left-width', value).add('border-right-width', value);
|
||
}
|
||
if (common_1.isBoolean(horizontal)) {
|
||
value = horizontal ? '1px' : '0';
|
||
this.add('border-top-width', value).add('border-bottom-width', value);
|
||
}
|
||
return this;
|
||
};
|
||
/**
|
||
* Add a vertical border style to the rule.
|
||
* @param options - visible options
|
||
* @param [options.showVerticalBorder] - whether the vertical border is visible
|
||
* @param position - Position of the vertical border ('right' or 'left')
|
||
*/
|
||
CSSRuleBuilder.prototype.verticalBorderStyle = function (options, position) {
|
||
var vertical = options.showVerticalBorder;
|
||
var value;
|
||
if (common_1.isBoolean(vertical) && position) {
|
||
value = vertical ? 'solid' : 'hidden';
|
||
this.add("border-" + position + "-style", value);
|
||
}
|
||
return this;
|
||
};
|
||
/**
|
||
* Shortcut for add('background-color', value)
|
||
*/
|
||
CSSRuleBuilder.prototype.bg = function (value) {
|
||
return this.add('background-color', value);
|
||
};
|
||
/**
|
||
* Shortcut for add('color', value)
|
||
*/
|
||
CSSRuleBuilder.prototype.text = function (value) {
|
||
return this.add('color', value);
|
||
};
|
||
/**
|
||
* Create a CSS rule string with a selector and prop-values.
|
||
*/
|
||
CSSRuleBuilder.prototype.build = function () {
|
||
var result = '';
|
||
if (this.propValues.length) {
|
||
result = this.selector + "{" + this.propValues.join(';') + "}";
|
||
}
|
||
return result;
|
||
};
|
||
return CSSRuleBuilder;
|
||
}());
|
||
/**
|
||
* Creates new Builder instance.
|
||
*/
|
||
function create(selector) {
|
||
return new CSSRuleBuilder(selector);
|
||
}
|
||
exports.create = create;
|
||
/**
|
||
* Creates a new Builder instance with a class name selector.
|
||
*/
|
||
function createClassRule(className) {
|
||
return create("." + dom_1.cls(className));
|
||
}
|
||
exports.createClassRule = createClassRule;
|
||
/**
|
||
* Creates a new Builder instance with a nested class name.
|
||
* @param selector - selector to compose class names
|
||
* @param classNames - classNames
|
||
*/
|
||
function createNestedClassRule(selector, classNames) {
|
||
return create("." + classNames.map(function (className) { return dom_1.cls(className); }).join(selector));
|
||
}
|
||
exports.createNestedClassRule = createNestedClassRule;
|
||
/**
|
||
* Creates an array of new Builder instances for the -webkit-scrollbar styles.
|
||
*/
|
||
function createWebkitScrollbarRules(selector, options) {
|
||
return [
|
||
create(selector + " ::-webkit-scrollbar").bg(options.background),
|
||
create(selector + " ::-webkit-scrollbar-thumb").bg(options.thumb),
|
||
create(selector + " ::-webkit-scrollbar-thumb:hover").bg(options.active),
|
||
];
|
||
}
|
||
exports.createWebkitScrollbarRules = createWebkitScrollbarRules;
|
||
/**
|
||
* Creates a builder instance for the IE scrollbar styles.
|
||
*/
|
||
function createIEScrollbarRule(selector, options) {
|
||
var bgProps = [
|
||
'scrollbar-3dlight-color',
|
||
'scrollbar-darkshadow-color',
|
||
'scrollbar-track-color',
|
||
'scrollbar-shadow-color',
|
||
];
|
||
var thumbProps = ['scrollbar-face-color', 'scrollbar-highlight-color'];
|
||
var ieScrollbarRule = create(selector);
|
||
bgProps.forEach(function (prop) {
|
||
ieScrollbarRule.add(prop, options.background);
|
||
});
|
||
thumbProps.forEach(function (prop) {
|
||
ieScrollbarRule.add(prop, options.thumb);
|
||
});
|
||
ieScrollbarRule.add('scrollbar-arrow-color', options.active);
|
||
return ieScrollbarRule;
|
||
}
|
||
exports.createIEScrollbarRule = createIEScrollbarRule;
|
||
/**
|
||
* Build all rules and returns the concatenated string.
|
||
*/
|
||
function buildAll(rules) {
|
||
return rules
|
||
.map(function (rule) {
|
||
return rule.build();
|
||
})
|
||
.join('');
|
||
}
|
||
exports.buildAll = buildAll;
|
||
|
||
|
||
/***/ }),
|
||
/* 133 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.getInvalidRows = void 0;
|
||
var lazyObservable_1 = __webpack_require__(28);
|
||
function getInvalidRows(store) {
|
||
// @TODO: find more practical way to make observable
|
||
lazyObservable_1.createObservableData(store, true);
|
||
var data = store.data, column = store.column;
|
||
var invalidRows = [];
|
||
data.viewData.forEach(function (_a) {
|
||
var rowKey = _a.rowKey, valueMap = _a.valueMap;
|
||
var invalidColumns = column.validationColumns.filter(function (_a) {
|
||
var name = _a.name;
|
||
return !!valueMap[name].invalidStates.length;
|
||
});
|
||
if (invalidColumns.length) {
|
||
var errors = invalidColumns.map(function (_a) {
|
||
var name = _a.name;
|
||
var invalidStates = valueMap[name].invalidStates;
|
||
return {
|
||
columnName: name,
|
||
errorInfo: invalidStates,
|
||
errorCode: invalidStates.map(function (_a) {
|
||
var code = _a.code;
|
||
return code;
|
||
}),
|
||
};
|
||
});
|
||
invalidRows.push({ rowKey: rowKey, errors: errors });
|
||
}
|
||
});
|
||
return invalidRows;
|
||
}
|
||
exports.getInvalidRows = getInvalidRows;
|
||
|
||
|
||
/***/ }),
|
||
/* 134 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.createProvider = void 0;
|
||
var common_1 = __webpack_require__(0);
|
||
var mutationRequest_1 = __webpack_require__(135);
|
||
var getterRequest_1 = __webpack_require__(138);
|
||
var ajaxConfig_1 = __webpack_require__(41);
|
||
function createConfig(store, dispatch, dataSource) {
|
||
var lastRequiredData = { perPage: store.data.pageOptions.perPage };
|
||
var requestParams = {};
|
||
var api = dataSource.api, _a = dataSource.hideLoadingBar, hideLoadingBar = _a === void 0 ? false : _a;
|
||
var ajaxConfig = ajaxConfig_1.createAjaxConfig(dataSource);
|
||
Object.keys(api).forEach(function (key) {
|
||
api[key] = common_1.deepMergedCopy(ajaxConfig, api[key]);
|
||
});
|
||
var getLastRequiredData = function () { return lastRequiredData; };
|
||
var setLastRequiredData = function (params) {
|
||
lastRequiredData = params;
|
||
};
|
||
var getRequestParams = function () { return requestParams; };
|
||
var setRequestParams = function (params) {
|
||
requestParams = params;
|
||
};
|
||
return {
|
||
api: api,
|
||
hideLoadingBar: hideLoadingBar,
|
||
store: store,
|
||
dispatch: dispatch,
|
||
setLastRequiredData: setLastRequiredData,
|
||
getLastRequiredData: getLastRequiredData,
|
||
setRequestParams: setRequestParams,
|
||
getRequestParams: getRequestParams,
|
||
};
|
||
}
|
||
function createFallbackProvider() {
|
||
// dummy function
|
||
var errorFn = function () {
|
||
throw new Error('Cannot execute server side API. To use this API, DataSource should be set');
|
||
};
|
||
return {
|
||
request: errorFn,
|
||
readData: errorFn,
|
||
reloadData: errorFn,
|
||
setRequestParams: errorFn,
|
||
sort: errorFn,
|
||
unsort: errorFn,
|
||
};
|
||
}
|
||
function createProvider(store, dispatch, data) {
|
||
var provider = createFallbackProvider();
|
||
if (!Array.isArray(data) && common_1.isObject(data)) {
|
||
var api = data.api, _a = data.initialRequest, initialRequest = _a === void 0 ? true : _a;
|
||
if (!common_1.isObject(api === null || api === void 0 ? void 0 : api.readData)) {
|
||
throw new Error('GET API should be configured in DataSource to get data');
|
||
}
|
||
var config = createConfig(store, dispatch, data);
|
||
// set curried function
|
||
provider.request = mutationRequest_1.request.bind(null, config);
|
||
provider.readData = getterRequest_1.readData.bind(null, config);
|
||
provider.reloadData = getterRequest_1.reloadData.bind(null, config);
|
||
provider.sort = getterRequest_1.sort.bind(null, config);
|
||
provider.unsort = getterRequest_1.unsort.bind(null, config);
|
||
provider.setRequestParams = config.setRequestParams;
|
||
if (initialRequest) {
|
||
getterRequest_1.readData(config, 1, api.readData.initParams);
|
||
}
|
||
}
|
||
return provider;
|
||
}
|
||
exports.createProvider = createProvider;
|
||
|
||
|
||
/***/ }),
|
||
/* 135 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.request = void 0;
|
||
var tslib_1 = __webpack_require__(1);
|
||
var common_1 = __webpack_require__(0);
|
||
var gridAjax_1 = __webpack_require__(59);
|
||
var eventBus_1 = __webpack_require__(7);
|
||
var instance_1 = __webpack_require__(8);
|
||
var modifiedDataManager_1 = __webpack_require__(60);
|
||
var data_1 = __webpack_require__(6);
|
||
var confirm_1 = __webpack_require__(137);
|
||
var ajaxConfig_1 = __webpack_require__(41);
|
||
var requestTypeCodeMap = {
|
||
createData: 'CREATE',
|
||
updateData: 'UPDATE',
|
||
deleteData: 'DELETE',
|
||
modifyData: 'MODIFY',
|
||
};
|
||
function createRequestParams(store, type, requestOptions) {
|
||
var column = store.column, data = store.data, id = store.id;
|
||
var checkedOnly = requestOptions.checkedOnly, modifiedOnly = requestOptions.modifiedOnly;
|
||
var modifiedOptions = { checkedOnly: checkedOnly, ignoredColumns: column.ignoredColumns };
|
||
if (modifiedOnly) {
|
||
var manager = instance_1.getDataManager(id);
|
||
return type === 'MODIFY'
|
||
? manager.getAllModifiedData(modifiedOptions)
|
||
: manager.getModifiedData(type, modifiedOptions);
|
||
}
|
||
return { rows: modifiedDataManager_1.getDataWithOptions(data.rawData, modifiedOptions) };
|
||
}
|
||
function createRequestOptions(ajaxConfig, requestOptions) {
|
||
if (requestOptions === void 0) { requestOptions = {}; }
|
||
var defaultOptions = {
|
||
checkedOnly: false,
|
||
modifiedOnly: true,
|
||
showConfirm: true,
|
||
withCredentials: ajaxConfig.withCredentials,
|
||
};
|
||
return tslib_1.__assign(tslib_1.__assign({}, defaultOptions), requestOptions);
|
||
}
|
||
function send(config, sendOptions) {
|
||
var store = config.store, dispatch = config.dispatch, hideLoadingBar = config.hideLoadingBar, getRequestParams = config.getRequestParams;
|
||
var id = store.id;
|
||
var commonRequestParams = getRequestParams();
|
||
var manager = instance_1.getDataManager(id);
|
||
var url = sendOptions.url, method = sendOptions.method, options = sendOptions.options, params = sendOptions.params, requestTypeCode = sendOptions.requestTypeCode, ajaxConfig = sendOptions.ajaxConfig;
|
||
var showConfirm = options.showConfirm, withCredentials = options.withCredentials;
|
||
if (!showConfirm || confirm_1.confirmMutation(requestTypeCode, params)) {
|
||
var callback = function () { return dispatch('setLoadingState', data_1.getLoadingState(store.data.rawData)); };
|
||
if (!hideLoadingBar) {
|
||
dispatch('setLoadingState', 'LOADING');
|
||
}
|
||
gridAjax_1.gridAjax(tslib_1.__assign(tslib_1.__assign({ method: method, url: common_1.isFunction(url) ? url() : url, params: tslib_1.__assign(tslib_1.__assign({}, commonRequestParams), params), success: function () { return manager.clearSpecificRows(params); }, preCallback: callback, postCallback: callback, eventBus: eventBus_1.getEventBus(id) }, ajaxConfig), { withCredentials: common_1.isUndefined(withCredentials) ? ajaxConfig.withCredentials : withCredentials }));
|
||
}
|
||
}
|
||
function request(config, requestType, requestOptions) {
|
||
var _a, _b;
|
||
var store = config.store, api = config.api;
|
||
var url = requestOptions.url || ((_a = api[requestType]) === null || _a === void 0 ? void 0 : _a.url);
|
||
var method = requestOptions.method || ((_b = api[requestType]) === null || _b === void 0 ? void 0 : _b.method);
|
||
if (!url || !method) {
|
||
throw new Error('url and method should be essential for request.');
|
||
}
|
||
var requestTypeCode = requestTypeCodeMap[requestType];
|
||
var ajaxConfig = ajaxConfig_1.createAjaxConfig(api[requestType] || {});
|
||
var options = createRequestOptions(ajaxConfig, requestOptions);
|
||
var params = createRequestParams(store, requestTypeCode, options);
|
||
send(config, { url: url, method: method, options: options, params: params, requestTypeCode: requestTypeCode, ajaxConfig: ajaxConfig });
|
||
}
|
||
exports.request = request;
|
||
|
||
|
||
/***/ }),
|
||
/* 136 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.serialize = void 0;
|
||
var common_1 = __webpack_require__(0);
|
||
/**
|
||
* 1. Array format
|
||
*
|
||
* The default array format to serialize is 'bracket'.
|
||
* However in case of nested array, only the deepest format follows the 'bracket', the rest follow 'indice' format.
|
||
*
|
||
* - basic
|
||
* { a: [1, 2, 3] } => a[]=1&a[]=2&a[]=3
|
||
* - nested
|
||
* { a: [1, 2, [3]] } => a[]=1&a[]=2&a[2][]=3
|
||
*
|
||
* 2. Object format
|
||
*
|
||
* The default object format to serialize is 'bracket' notation and doesn't allow the 'dot' notation.
|
||
*
|
||
* - basic
|
||
* { a: { b: 1, c: 2 } } => a[b]=1&a[c]=2
|
||
*/
|
||
function encodePairs(key, value) {
|
||
return encodeURIComponent(key) + "=" + encodeURIComponent(common_1.isNil(value) ? '' : value);
|
||
}
|
||
function serializeParams(key, value, serializedList) {
|
||
if (Array.isArray(value)) {
|
||
value.forEach(function (arrVal, index) {
|
||
serializeParams(key + "[" + (common_1.isObject(arrVal) ? index : '') + "]", arrVal, serializedList);
|
||
});
|
||
}
|
||
else if (common_1.isObject(value)) {
|
||
Object.keys(value).forEach(function (objKey) {
|
||
serializeParams(key + "[" + objKey + "]", value[objKey], serializedList);
|
||
});
|
||
}
|
||
else {
|
||
serializedList.push(encodePairs(key, value));
|
||
}
|
||
}
|
||
function serialize(params) {
|
||
if (!params || common_1.isEmpty(params)) {
|
||
return '';
|
||
}
|
||
var serializedList = [];
|
||
Object.keys(params).forEach(function (key) {
|
||
serializeParams(key, params[key], serializedList);
|
||
});
|
||
return serializedList.join('&');
|
||
}
|
||
exports.serialize = serialize;
|
||
|
||
|
||
/***/ }),
|
||
/* 137 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.confirmMutation = void 0;
|
||
var message_1 = __webpack_require__(61);
|
||
function confirmMutation(type, params) {
|
||
var count = Object.keys(params).reduce(function (acc, key) { return acc + params[key].length; }, 0);
|
||
return count ? confirm(message_1.getConfirmMessage(type, count)) : alert(message_1.getAlertMessage(type));
|
||
}
|
||
exports.confirmMutation = confirmMutation;
|
||
|
||
|
||
/***/ }),
|
||
/* 138 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.unsort = exports.sort = exports.reloadData = exports.readData = void 0;
|
||
var tslib_1 = __webpack_require__(1);
|
||
var tree_1 = __webpack_require__(31);
|
||
var tree_2 = __webpack_require__(21);
|
||
var common_1 = __webpack_require__(0);
|
||
var gridAjax_1 = __webpack_require__(59);
|
||
var eventBus_1 = __webpack_require__(7);
|
||
var data_1 = __webpack_require__(6);
|
||
var ajaxConfig_1 = __webpack_require__(41);
|
||
var sort_1 = __webpack_require__(29);
|
||
var sort_2 = __webpack_require__(45);
|
||
function validateResponse(responseData) {
|
||
if (common_1.isUndefined(responseData)) {
|
||
throw new Error('The response data is empty to rerender grid');
|
||
}
|
||
}
|
||
function handleSuccessReadData(config, response) {
|
||
var dispatch = config.dispatch, getLastRequiredData = config.getLastRequiredData, store = config.store;
|
||
var responseData = response.data;
|
||
var _a = getLastRequiredData(), perPage = _a.perPage, _b = _a.sortColumn, sortColumn = _b === void 0 ? 'sortKey' : _b, _c = _a.sortAscending, sortAscending = _c === void 0 ? true : _c;
|
||
validateResponse(responseData);
|
||
var contents = responseData.contents, pagination = responseData.pagination;
|
||
if (data_1.isScrollPagination(store.data)) {
|
||
dispatch('appendRows', contents);
|
||
}
|
||
else {
|
||
var options = {};
|
||
if (sortColumn !== 'sortKey') {
|
||
options.sortState = { columnName: sortColumn, ascending: sortAscending, multiple: true };
|
||
}
|
||
dispatch('resetData', contents, options);
|
||
}
|
||
if (pagination) {
|
||
dispatch('updatePageOptions', tslib_1.__assign(tslib_1.__assign({}, pagination), { perPage: perPage }));
|
||
}
|
||
}
|
||
function handleSuccessReadTreeData(config, response) {
|
||
var dispatch = config.dispatch, store = config.store, getLastRequiredData = config.getLastRequiredData;
|
||
var responseData = response.data;
|
||
validateResponse(responseData);
|
||
var parentRowKey = getLastRequiredData().parentRowKey;
|
||
var column = store.column, id = store.id, data = store.data;
|
||
responseData.contents.forEach(function (row) { return dispatch('appendTreeRow', row, { parentRowKey: parentRowKey }); });
|
||
var row = data_1.findRowByRowKey(data, column, id, parentRowKey);
|
||
if (row && !tree_2.getChildRowKeys(row).length) {
|
||
tree_1.removeExpandedAttr(row);
|
||
}
|
||
}
|
||
function readData(config, page, data, resetData) {
|
||
if (data === void 0) { data = {}; }
|
||
if (resetData === void 0) { resetData = false; }
|
||
var store = config.store, getLastRequiredData = config.getLastRequiredData;
|
||
var lastRequiredData = getLastRequiredData();
|
||
var treeColumnName = store.column.treeColumnName;
|
||
var perPage = store.data.pageOptions.perPage;
|
||
var params = resetData ? tslib_1.__assign(tslib_1.__assign({ perPage: perPage }, data), { page: page }) : tslib_1.__assign(tslib_1.__assign(tslib_1.__assign({}, lastRequiredData), data), { page: page });
|
||
var successCallback = handleSuccessReadData;
|
||
if (treeColumnName && !common_1.isUndefined(data.parentRowKey)) {
|
||
successCallback = handleSuccessReadTreeData;
|
||
delete params.page;
|
||
delete params.perPage;
|
||
}
|
||
sendRequest(config, params, successCallback);
|
||
}
|
||
exports.readData = readData;
|
||
function reloadData(config) {
|
||
readData(config, config.getLastRequiredData().page || 1);
|
||
}
|
||
exports.reloadData = reloadData;
|
||
function sort(config, sortColumn, sortAscending, cancelable) {
|
||
var store = config.store;
|
||
var cancelSort = sort_2.isCancelSort(store, sortColumn, sortAscending, cancelable);
|
||
var gridEvent = sort_1.emitBeforeSort(store, cancelSort, {
|
||
columnName: sortColumn,
|
||
ascending: sortAscending,
|
||
multiple: false,
|
||
});
|
||
if (gridEvent.isStopped()) {
|
||
return;
|
||
}
|
||
var params = { perPage: store.data.pageOptions.perPage, page: 1 };
|
||
if (!cancelSort) {
|
||
params.sortColumn = sortColumn;
|
||
params.sortAscending = sortAscending;
|
||
}
|
||
var successCallback = function (successConfig, response) {
|
||
handleSuccessReadData(successConfig, response);
|
||
sort_1.emitAfterSort(store, cancelSort, sortColumn);
|
||
};
|
||
sendRequest(config, params, successCallback);
|
||
}
|
||
exports.sort = sort;
|
||
function unsort(config, sortColumn) {
|
||
if (sortColumn === void 0) { sortColumn = 'sortKey'; }
|
||
var store = config.store;
|
||
var gridEvent = sort_1.emitBeforeSort(store, true, {
|
||
columnName: sortColumn,
|
||
multiple: false,
|
||
});
|
||
if (gridEvent.isStopped()) {
|
||
return;
|
||
}
|
||
var params = { perPage: store.data.pageOptions.perPage, page: 1 };
|
||
var successCallback = function (successConfig, response) {
|
||
handleSuccessReadData(successConfig, response);
|
||
sort_1.emitAfterSort(store, true, sortColumn);
|
||
};
|
||
sendRequest(config, params, successCallback);
|
||
}
|
||
exports.unsort = unsort;
|
||
function sendRequest(config, params, successCallback) {
|
||
var store = config.store, dispatch = config.dispatch, api = config.api, setLastRequiredData = config.setLastRequiredData, hideLoadingBar = config.hideLoadingBar, getRequestParams = config.getRequestParams;
|
||
var commonRequestParams = getRequestParams();
|
||
var ajaxConfig = ajaxConfig_1.createAjaxConfig(api.readData);
|
||
var _a = api.readData, method = _a.method, url = _a.url;
|
||
var callback = function () { return dispatch('setLoadingState', data_1.getLoadingState(store.data.rawData)); };
|
||
setLastRequiredData(params);
|
||
if (!hideLoadingBar) {
|
||
dispatch('setLoadingState', 'LOADING');
|
||
}
|
||
gridAjax_1.gridAjax(tslib_1.__assign({ method: method, url: common_1.isFunction(url) ? url() : url, params: tslib_1.__assign(tslib_1.__assign({}, commonRequestParams), params), success: successCallback.bind(null, config), preCallback: callback, postCallback: callback, eventBus: eventBus_1.getEventBus(store.id) }, ajaxConfig));
|
||
}
|
||
|
||
|
||
/***/ }),
|
||
/* 139 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.createPaginationManager = void 0;
|
||
function createPaginationManager() {
|
||
var pagination = null;
|
||
return {
|
||
setPagination: function (targetPagination) {
|
||
pagination = targetPagination;
|
||
},
|
||
getPagination: function () {
|
||
return pagination;
|
||
},
|
||
};
|
||
}
|
||
exports.createPaginationManager = createPaginationManager;
|
||
|
||
|
||
/***/ }),
|
||
/* 140 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.sendHostname = void 0;
|
||
var common_1 = __webpack_require__(0);
|
||
var MS_7_DAYS = 7 * 24 * 60 * 60 * 1000;
|
||
function isExpired(date) {
|
||
var now = new Date().getTime();
|
||
return now - date > MS_7_DAYS;
|
||
}
|
||
function imagePing(url, trackingInfo) {
|
||
var queryString = Object.keys(trackingInfo)
|
||
.map(function (id, index) {
|
||
var idWithType = id;
|
||
return "" + (index ? '&' : '') + idWithType + "=" + trackingInfo[idWithType];
|
||
})
|
||
.join('');
|
||
var trackingElement = document.createElement('img');
|
||
trackingElement.src = url + "?" + queryString;
|
||
trackingElement.style.display = 'none';
|
||
document.body.appendChild(trackingElement);
|
||
document.body.removeChild(trackingElement);
|
||
return trackingElement;
|
||
}
|
||
function getDate(applicationKeyForStorage) {
|
||
try {
|
||
return window.localStorage.getItem(applicationKeyForStorage);
|
||
}
|
||
catch (e) {
|
||
// Returns null to do nothing if the browser is set to block third-party cookies.
|
||
return null;
|
||
}
|
||
}
|
||
function sendHostname() {
|
||
var hostname = location.hostname;
|
||
var applicationKeyForStorage = "TOAST UI grid for " + hostname + ": Statistics";
|
||
var date = getDate(applicationKeyForStorage);
|
||
if ((date && !isExpired(Number(date))) || common_1.isNull(date)) {
|
||
return;
|
||
}
|
||
window.localStorage.setItem(applicationKeyForStorage, String(new Date().getTime()));
|
||
setTimeout(function () {
|
||
if (document.readyState === 'interactive' || document.readyState === 'complete') {
|
||
imagePing('https://www.google-analytics.com/collect', {
|
||
v: 1,
|
||
t: 'event',
|
||
tid: 'UA-129951906-1',
|
||
cid: hostname,
|
||
dp: hostname,
|
||
dh: 'grid',
|
||
el: 'grid',
|
||
ec: 'use',
|
||
});
|
||
}
|
||
}, 1000);
|
||
}
|
||
exports.sendHostname = sendHostname;
|
||
|
||
|
||
/***/ }),
|
||
/* 141 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
// extracted by mini-css-extract-plugin
|
||
|
||
/***/ })
|
||
/******/ ]);
|
||
}); |