UNPKG

@true-directive/base

Version:

The set of base classes for the TrueDirective Grid

1,263 lines (1,221 loc) 360 kB
(function webpackUniversalModuleDefinition(root, factory) { if(typeof exports === 'object' && typeof module === 'object') module.exports = factory(); else if(typeof define === 'function' && define.amd) define("TrueDirectiveBase", [], factory); else if(typeof exports === 'object') exports["TrueDirectiveBase"] = factory(); else root["TrueDirectiveBase"] = factory(); })(window, function() { 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 = ""; /******/ /******/ /******/ // Load entry module and return exports /******/ return __webpack_require__(__webpack_require__.s = 0); /******/ }) /************************************************************************/ /******/ ([ /* 0 */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__(1); /***/ }), /* 1 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; // ESM COMPAT FLAG __webpack_require__.r(__webpack_exports__); // EXPORTS __webpack_require__.d(__webpack_exports__, "Dates", function() { return /* reexport */ Dates; }); __webpack_require__.d(__webpack_exports__, "Strings", function() { return /* reexport */ Strings; }); __webpack_require__.d(__webpack_exports__, "Keys", function() { return /* reexport */ Keys; }); __webpack_require__.d(__webpack_exports__, "KeyInfo", function() { return /* reexport */ KeyInfo; }); __webpack_require__.d(__webpack_exports__, "Utils", function() { return /* reexport */ Utils; }); __webpack_require__.d(__webpack_exports__, "FilterPipe", function() { return /* reexport */ filter_pipe_FilterPipe; }); __webpack_require__.d(__webpack_exports__, "PagePipe", function() { return /* reexport */ PagePipe; }); __webpack_require__.d(__webpack_exports__, "SortPipe", function() { return /* reexport */ sort_pipe_SortPipe; }); __webpack_require__.d(__webpack_exports__, "SummaryPipe", function() { return /* reexport */ summary_pipe_SummaryPipe; }); __webpack_require__.d(__webpack_exports__, "DateParserFormatter", function() { return /* reexport */ date_parser_formatter_class_DateParserFormatter; }); __webpack_require__.d(__webpack_exports__, "NumberFormat", function() { return /* reexport */ NumberFormat; }); __webpack_require__.d(__webpack_exports__, "NumberParserFormatter", function() { return /* reexport */ number_parser_formatter_class_NumberParserFormatter; }); __webpack_require__.d(__webpack_exports__, "Internationalization", function() { return /* reexport */ Internationalization; }); __webpack_require__.d(__webpack_exports__, "Locale", function() { return /* reexport */ Locale; }); __webpack_require__.d(__webpack_exports__, "Mask", function() { return /* reexport */ mask_class_Mask; }); __webpack_require__.d(__webpack_exports__, "MaskSection", function() { return /* reexport */ mask_section_class_MaskSection; }); __webpack_require__.d(__webpack_exports__, "MaskSectionAction", function() { return /* reexport */ MaskSectionAction; }); __webpack_require__.d(__webpack_exports__, "MaskResult", function() { return /* reexport */ MaskResult; }); __webpack_require__.d(__webpack_exports__, "MaskSectionType", function() { return /* reexport */ MaskSectionType; }); __webpack_require__.d(__webpack_exports__, "MaskSectionValue", function() { return /* reexport */ MaskSectionValue; }); __webpack_require__.d(__webpack_exports__, "MaskSettings", function() { return /* reexport */ MaskSettings; }); __webpack_require__.d(__webpack_exports__, "MaskState", function() { return /* reexport */ MaskState; }); __webpack_require__.d(__webpack_exports__, "MaskValue", function() { return /* reexport */ mask_value_class_MaskValue; }); __webpack_require__.d(__webpack_exports__, "MenuAction", function() { return /* reexport */ MenuAction; }); __webpack_require__.d(__webpack_exports__, "ColumnType", function() { return /* reexport */ ColumnType; }); __webpack_require__.d(__webpack_exports__, "DetectionMode", function() { return /* reexport */ DetectionMode; }); __webpack_require__.d(__webpack_exports__, "GridPart", function() { return /* reexport */ GridPart; }); __webpack_require__.d(__webpack_exports__, "LazyLoadingMode", function() { return /* reexport */ LazyLoadingMode; }); __webpack_require__.d(__webpack_exports__, "RenderMode", function() { return /* reexport */ RenderMode; }); __webpack_require__.d(__webpack_exports__, "EditorShowMode", function() { return /* reexport */ EditorShowMode; }); __webpack_require__.d(__webpack_exports__, "SelectionMode", function() { return /* reexport */ SelectionMode; }); __webpack_require__.d(__webpack_exports__, "PopupPosition", function() { return /* reexport */ PopupPosition; }); __webpack_require__.d(__webpack_exports__, "CancelableEvent", function() { return /* reexport */ CancelableEvent; }); __webpack_require__.d(__webpack_exports__, "CloseEvent", function() { return /* reexport */ CloseEvent; }); __webpack_require__.d(__webpack_exports__, "CheckedChangedEvent", function() { return /* reexport */ CheckedChangedEvent; }); __webpack_require__.d(__webpack_exports__, "ValueChangedEvent", function() { return /* reexport */ ValueChangedEvent; }); __webpack_require__.d(__webpack_exports__, "FilterShowEvent", function() { return /* reexport */ FilterShowEvent; }); __webpack_require__.d(__webpack_exports__, "RowDragEvent", function() { return /* reexport */ RowDragEvent; }); __webpack_require__.d(__webpack_exports__, "RowClickEvent", function() { return /* reexport */ RowClickEvent; }); __webpack_require__.d(__webpack_exports__, "CellClickEvent", function() { return /* reexport */ CellClickEvent; }); __webpack_require__.d(__webpack_exports__, "ContextMenuEvent", function() { return /* reexport */ ContextMenuEvent; }); __webpack_require__.d(__webpack_exports__, "CellPosition", function() { return /* reexport */ CellPosition; }); __webpack_require__.d(__webpack_exports__, "CellRange", function() { return /* reexport */ cell_range_class_CellRange; }); __webpack_require__.d(__webpack_exports__, "CellHighlighter", function() { return /* reexport */ cell_highlighter_class_CellHighlighter; }); __webpack_require__.d(__webpack_exports__, "Column", function() { return /* reexport */ column_class_Column; }); __webpack_require__.d(__webpack_exports__, "ColumnBand", function() { return /* reexport */ ColumnBand; }); __webpack_require__.d(__webpack_exports__, "DataQuery", function() { return /* reexport */ DataQuery; }); __webpack_require__.d(__webpack_exports__, "Filter", function() { return /* reexport */ filter_class_Filter; }); __webpack_require__.d(__webpack_exports__, "FilterOperator", function() { return /* reexport */ FilterOperator; }); __webpack_require__.d(__webpack_exports__, "GridLayoutRange", function() { return /* reexport */ GridLayoutRange; }); __webpack_require__.d(__webpack_exports__, "GridLayoutSelection", function() { return /* reexport */ GridLayoutSelection; }); __webpack_require__.d(__webpack_exports__, "GridLayout", function() { return /* reexport */ grid_layout_class_GridLayout; }); __webpack_require__.d(__webpack_exports__, "GridAppearance", function() { return /* reexport */ GridAppearance; }); __webpack_require__.d(__webpack_exports__, "PageInfo", function() { return /* reexport */ PageInfo; }); __webpack_require__.d(__webpack_exports__, "RowLayout", function() { return /* reexport */ RowLayout; }); __webpack_require__.d(__webpack_exports__, "RowPosition", function() { return /* reexport */ RowPosition; }); __webpack_require__.d(__webpack_exports__, "RowDragOverseer", function() { return /* reexport */ RowDragOverseer; }); __webpack_require__.d(__webpack_exports__, "SortInfo", function() { return /* reexport */ SortInfo; }); __webpack_require__.d(__webpack_exports__, "SortType", function() { return /* reexport */ SortType; }); __webpack_require__.d(__webpack_exports__, "Summary", function() { return /* reexport */ Summary; }); __webpack_require__.d(__webpack_exports__, "SummaryType", function() { return /* reexport */ SummaryType; }); __webpack_require__.d(__webpack_exports__, "UIAction", function() { return /* reexport */ UIAction; }); __webpack_require__.d(__webpack_exports__, "UIActionType", function() { return /* reexport */ UIActionType; }); __webpack_require__.d(__webpack_exports__, "ValueFormatter", function() { return /* reexport */ value_formatter_class_ValueFormatter; }); __webpack_require__.d(__webpack_exports__, "Selection", function() { return /* reexport */ selection_class_Selection; }); __webpack_require__.d(__webpack_exports__, "GridSettings", function() { return /* reexport */ grid_settings_class_GridSettings; }); __webpack_require__.d(__webpack_exports__, "AxInject", function() { return /* reexport */ AxInject; }); __webpack_require__.d(__webpack_exports__, "AxInjectConsumer", function() { return /* reexport */ AxInjectConsumer; }); __webpack_require__.d(__webpack_exports__, "ColumnCollection", function() { return /* reexport */ column_collection_class_ColumnCollection; }); __webpack_require__.d(__webpack_exports__, "DataSource", function() { return /* reexport */ data_source_class_DataSource; }); __webpack_require__.d(__webpack_exports__, "GridUIHandler", function() { return /* reexport */ grid_ui_handler_GridUIHandler; }); __webpack_require__.d(__webpack_exports__, "GridExporter", function() { return /* reexport */ grid_exporter_class_GridExporter; }); __webpack_require__.d(__webpack_exports__, "LayoutsHandler", function() { return /* reexport */ layouts_handler_LayoutsHandler; }); __webpack_require__.d(__webpack_exports__, "RowCalculator", function() { return /* reexport */ row_calculator_class_RowCalculator; }); __webpack_require__.d(__webpack_exports__, "GridState", function() { return /* reexport */ grid_state_class_GridState; }); // CONCATENATED MODULE: ./src/common/dates.class.ts /** * Copyright (c) 2018-2019 Aleksey Melnikov, True Directive Company. * @link https://truedirective.com/ * @license MIT */ var Dates = /** @class */ (function () { function Dates() { } Dates.isEmpty = function (d) { return d === null || d === undefined || d.getTime === undefined || d.getTime() === NaN; }; /** * Returns timestamp of the given date or null * @param d Date * @return Timestamp or date's timestamp */ Dates.getTimeNull = function (d) { if (d === null || d === undefined) { return null; } return d.getTime(); }; /** * Are two dates equal? * @param d1 First date * @param d2 Second date * @return True if dates are equals. */ Dates.equals = function (d1, d2) { if (!d1 && !d2) { return true; } if (!d1 || !d2) { return false; } return d1.getTime() === d2.getTime(); }; /** * Comparing two dates. * @param d1 First date. * @param d2 Second date. * @return True if both dates are equal. */ Dates.compare = function (d1, d2) { if (!d1 && !d2) { return 0; } if (!d1 && d2) { return -1; } if (d1 && !d2) { return 1; } if (d1.getTime() === d2.getTime()) { return 0; } return d1.getTime() > d2.getTime() ? 1 : -1; }; /** * Returns today's date with no time. * @return Today's date with no time. */ Dates.today = function () { var now = new Date(); return new Date(now.getFullYear(), now.getMonth(), now.getDate()); }; /** * Returns yesterday's date without time. * @return Yesterday's date without time. */ Dates.yesterday = function () { var now = new Date(); return new Date(now.getFullYear(), now.getMonth(), now.getDate() - 1); }; /** * Returns the date following the specified date. * @param d Date * @return The date following the date. */ Dates.nextDate = function (d) { return new Date(d.getFullYear(), d.getMonth(), d.getDate() + 1); }; /** * Returns a date that is more than the specified date for the specified number of days. * @param d Date * @param days Number of days * @return */ Dates.addDays = function (d, days) { return new Date(d.getFullYear(), d.getMonth(), d.getDate() + days); }; // Первая дата недели, включающей заданную дату Dates.firstDateOfWeek = function (d, firstDay) { var day = d.getDay(); if (firstDay > day) { day += 7; } day -= firstDay; return new Date(d.getFullYear(), d.getMonth(), d.getDate() - day); }; // Последняя дата недели, включающей заданную дату Dates.lastDateOfWeek = function (d, firstDay) { var firstDate = Dates.firstDateOfWeek(d, firstDay); return new Date(firstDate.getFullYear(), firstDate.getMonth(), firstDate.getDate() + 6); }; // Первая дата недели, которая следует за неделей, включающей заданную дату Dates.lastDateOfPrevWeek = function (d, firstDay) { var firstDate = Dates.firstDateOfWeek(d, firstDay); return new Date(firstDate.getFullYear(), firstDate.getMonth(), firstDate.getDate() - 1); }; // Первая дата недели, которая следует за неделей, включающей заданную дату Dates.firstDateOfNextWeek = function (d, firstDay) { var lastDate = Dates.lastDateOfWeek(d, firstDay); return new Date(lastDate.getFullYear(), lastDate.getMonth(), lastDate.getDate() + 1); }; // Первая дата месяца, включающего заданную дату Dates.firstDateOfMonth = function (d) { return new Date(d.getFullYear(), d.getMonth(), 1); }; // Последная дата месяца, включающего заданную дату Dates.lastDateOfMonth = function (d) { return new Date(d.getFullYear(), d.getMonth() + 1, 0); }; // Первая дата месяца, который следует за месяцем, включающим заданную дату Dates.firstDateOfNextMonth = function (d) { var last = Dates.lastDateOfMonth(d); return new Date(last.getFullYear(), last.getMonth(), last.getDate() + 1); }; // Последняя дата месяца, который следует за месяцем, включающим заданную дату Dates.lastDateOfNextMonth = function (d) { return Dates.lastDateOfMonth(Dates.firstDateOfNextMonth(d)); }; // Первая дата месяца, который предшествует месяцу, включающему заданную дату Dates.firstDateOfPrevMonth = function (d) { var last = Dates.lastDateOfPrevMonth(d); return Dates.firstDateOfMonth(last); }; // Последняя дата месяца, который предшествует месяцу, включающему заданную дату Dates.lastDateOfPrevMonth = function (d) { var first = Dates.firstDateOfMonth(d); return new Date(first.getFullYear(), first.getMonth(), first.getDate() - 1); }; // Дата находится в интервале между двумя заданными датами (включительно) Dates.dateBetween = function (d, start, end) { return d.getTime() >= start.getTime() && d.getTime() <= end.getTime(); }; // Дата находится в том же месяце, что и вторая дата Dates.isSameMonth = function (d1, d2) { if (d1 === null || d1 === undefined) { return false; } if (d2 === null || d2 === undefined) { return false; } return d1.getFullYear() === d2.getFullYear() && d1.getMonth() === d2.getMonth(); }; // Дата находится в том же году, что и вторая дата Dates.isSameYear = function (d1, d2) { if (d1 === null || d1 === undefined) { return false; } if (d2 === null || d2 === undefined) { return false; } return d1.getFullYear() === d2.getFullYear(); }; Dates.yearTwoDigits = function (d) { var yy = d.getFullYear(); return (yy + '').substring((yy + '').length - 2); }; return Dates; }()); // CONCATENATED MODULE: ./src/common/strings.class.ts /** * Copyright (c) 2018-2019 Aleksey Melnikov, True Directive Company. * @link https://truedirective.com/ * @license MIT */ var Strings = /** @class */ (function () { function Strings() { } Strings.decorate = function (s, pattern, start, end) { var i = s.toLowerCase().indexOf(pattern); if (i >= 0) { return s.substring(0, i) + start + s.substring(i, i + pattern.length) + end + s.substring(i + pattern.length); } return s; }; return Strings; }()); // CONCATENATED MODULE: ./src/common/keys.class.ts /** * Copyright (c) 2018-2019 Aleksey Melnikov, True Directive Company. * @link https://truedirective.com/ * @license MIT */ var KeyInfo = /** @class */ (function () { function KeyInfo(code, char) { if (char === void 0) { char = ''; } this.code = code; this.char = char; } return KeyInfo; }()); // @dynamic var Keys = /** @class */ (function () { function Keys() { } Keys.isFunctional = function (keyCode) { return keyCode >= 112 && keyCode <= 123; }; Keys.keyChar = function (e) { if (e === null) { return ''; } // These chars are useless for us.. if (e.keyCode > 0 && e.keyCode < 32) { return ''; } var c = e.char; if (c === undefined) { c = e.key; } return c; }; Keys.generateEvent = function (target, keyCode, keyChar, shift, ctrl) { if (keyChar === void 0) { keyChar = ''; } if (shift === void 0) { shift = false; } if (ctrl === void 0) { ctrl = false; } return { keyCode: keyCode, key: keyChar, char: keyChar, shiftKey: shift, ctrlKey: ctrl, target: target, preventDefault: function (_) { } }; }; // For Android Keys.whichKeyHasBeenPressed = function (txt1, txt2, selStart1, selStart2, selLength) { if (txt1 === txt2 && selStart1 === selStart2 - 1) { return new KeyInfo(Keys.RIGHT); } if (txt1 === txt2 && selStart1 === selStart2 + 1) { return new KeyInfo(Keys.LEFT); } if (selLength === 1) { // if (txt1.substring(0, selStart2) === txt2.substring(0, selStart2)) { if (txt1.substring(selStart2 + 1, txt1.length) === txt2.substring(selStart2, txt2.length)) { return new KeyInfo(Keys.BACKSPACE); } } if (txt1.substring(0, selStart2) === txt2.substring(0, selStart2)) { if (txt1.substring(selStart1 + 1, txt1.length) === txt2.substring(selStart2, txt2.length)) { if (selStart1 === selStart2 + 1) { return new KeyInfo(Keys.BACKSPACE); } } } return new KeyInfo(0, txt2.substring(selStart1, selStart1 + 1)); } // Tes|t -> Te|t if (txt1.substring(0, selStart1 - 1) === txt2.substring(0, selStart1 - 1)) { if (txt1.substring(selStart1, txt1.length) === txt2.substring(selStart1 - 1, txt2.length)) { return new KeyInfo(Keys.BACKSPACE); } } // Te|st -> Te|t if (txt1.substring(0, selStart1) === txt2.substring(0, selStart1)) { if (txt1.substring(selStart1 + 1, txt1.length) === txt2.substring(selStart1, txt2.length)) { return new KeyInfo(Keys.DELETE); } } return new KeyInfo(0, txt2.substring(selStart1, selStart1 + 1)); }; Keys.BACKSPACE = 8; Keys.TAB = 9; Keys.ENTER = 13; Keys.ESCAPE = 27; Keys.SPACE = 32; Keys.PAGE_UP = 33; Keys.PAGE_DOWN = 34; Keys.END = 35; Keys.HOME = 36; Keys.LEFT = 37; Keys.UP = 38; Keys.RIGHT = 39; Keys.DOWN = 40; Keys.INSERT = 45; Keys.DELETE = 46; Keys.A = 65; Keys.C = 67; Keys.V = 86; Keys.X = 88; Keys.Y = 89; Keys.Z = 90; return Keys; }()); // CONCATENATED MODULE: ./src/common/utils.class.ts /** * Copyright (c) 2018-2019 Aleksey Melnikov, True Directive Company. * @link https://truedirective.com/ * @license MIT */ var Utils = /** @class */ (function () { function Utils() { } /** * Is the element ancestor to the given element. * @param ancestor Element to check. * @param element An element that may be descendant * @return True if the first element is an ancestor of the second element. */ Utils.isAncestor = function (ancestor, element) { if (!element) { return false; } var parent = element; while (parent && parent !== ancestor) { parent = parent.parentNode; } return parent === ancestor; }; /** * Is given element has ancestor with given css-class * @param element Element to check * @param ancestorClass class * @return True if the first element has an ancestor with given class. */ Utils.isClassDescendant = function (element, ancestorClass) { if (!element) { return false; } var parent = element; while (parent) { if (parent && parent.classList && parent.classList.contains(ancestorClass)) { return true; } parent = parent.parentNode; } return false; }; /** * Moving item inside the array. * @param arr Array. * @param oldIndex Old index. * @param newIndex New index. */ Utils.moveArrayItem = function (arr, oldIndex, newIndex) { if (newIndex >= arr.length) { var k = newIndex - arr.length + 1; while (k--) { arr.push(undefined); } } arr.splice(newIndex, 0, arr.splice(oldIndex, 1)[0]); }; /** * Removes html tags from the string. * @param txt String to remove tags * @return String without tags. */ Utils.htmlToPlaintext = function (txt) { var re = new RegExp('<[^>]+>', 'gm'); return txt ? String(txt).replace(re, '') : ''; }; Object.defineProperty(Utils, "userAgent", { get: function () { return navigator.userAgent || navigator.vendor; }, enumerable: true, configurable: true }); Utils.detectIOS = function () { var re = new RegExp('iPad|iPhone|iPod'); return re.test(Utils.userAgent); }; Utils.detectFirefox = function () { return Utils.userAgent.toLowerCase().indexOf('firefox') > -1; }; Utils.detectSafari = function () { var safari = Utils.userAgent.toLowerCase().indexOf('safari'); var chrome = Utils.userAgent.toLowerCase().indexOf('chrome'); return safari > -1 && chrome <= -1; }; Utils.detectAndroid = function () { var re = new RegExp('android', 'i'); return re.test(Utils.userAgent); }; Utils.detectMobile = function () { return Utils.detectIOS() || Utils.detectAndroid(); }; Utils.detectIE = function () { // Does not include EDGE var re = new RegExp('MSIE|Trident', 'i'); return re.test(Utils.userAgent); }; /** * Returns date if it is valid or null if not. */ Utils.purifyDate = function (v) { if (v === undefined || v === null || isNaN(v.getTime())) { return null; } return v; }; return Utils; }()); // CONCATENATED MODULE: ./src/classes/enums.ts /** * Тип данных */ var ColumnType; (function (ColumnType) { ColumnType["STRING"] = "STRING"; ColumnType["NUMBER"] = "NUMBER"; ColumnType["DATETIME"] = "DATETIME"; ColumnType["BOOLEAN"] = "BOOLEAN"; ColumnType["REFERENCE"] = "REFERENCE"; ColumnType["IMAGE"] = "IMAGE"; ColumnType["CHECKBOX"] = "CHECKBOX"; ColumnType["HTML"] = "HTML"; ColumnType["UNSAFE_HTML"] = "UNSAFE_HTML"; ColumnType["CUSTOM"] = "CUSTOM"; })(ColumnType || (ColumnType = {})); // Режим отслеживания изменений var DetectionMode = /** @class */ (function () { function DetectionMode(name) { this.name = name; } // Стандартный режим Angular. Изменения автоматически влияют на представление. // Работает медленно при большом количестве строк. Переключите в MANUAL, если // ожидается более 100 строк в модели данных DetectionMode.DEFAULT = new DetectionMode('Default'); // После внесения изменений в модель необходимо вручную вызвать метод // TrueGrid.detectChanges(); DetectionMode.MANUAL = new DetectionMode('Manual'); return DetectionMode; }()); /** * Части грида */ var GridPart = /** @class */ (function () { function GridPart(name) { this.name = name; } // Левые зафиксированный колонки GridPart.LEFT = new GridPart('left'); // Основная центральная часть GridPart.CENTER = new GridPart(''); // Правые зафиксированные ячейки GridPart.RIGHT = new GridPart('right'); // Перетаскиваемый заголовок колонки или строка GridPart.DRAG_ITEM = new GridPart('dragItem'); // Колонка, по которой сгруппированы данные (содержатся в области группировок) GridPart.GROUPED_COLUMN = new GridPart('groupedColumn'); return GridPart; }()); var LazyLoadingMode = /** @class */ (function () { function LazyLoadingMode(name) { this.name = name; } LazyLoadingMode.NONE = new LazyLoadingMode('None'); LazyLoadingMode.INCREMENTAL = new LazyLoadingMode('Incremental'); LazyLoadingMode.FRAGMENTARY = new LazyLoadingMode('Fragmentary'); return LazyLoadingMode; }()); /** * Режим рендера строк */ var RenderMode = /** @class */ (function () { function RenderMode(name) { this.name = name; } /** * Рендерятся все строки */ RenderMode.ALL = new RenderMode('All'); /** * Рендерятся только видимые при текущей scroll position и несколько десятков * строк вверх и вниз (см. параметр prerenderRowCount). * Только ячейки, которые вписываются во вьюпорт по горизонтали */ RenderMode.VISIBLE = new RenderMode('Visible'); /** * Рендерятся только видимые при текущей scroll position и несколько десятков * строк вверх и вниз (см. параметр prerenderRowCount). * Рендерятся все ячейки этих строк */ RenderMode.VISIBLE_ROWS = new RenderMode('VisibleRows'); return RenderMode; }()); /** * Способ перехода ячейки в режим редактирования */ var EditorShowMode = /** @class */ (function () { function EditorShowMode(name) { this.name = name; } // Редактирование отключено EditorShowMode.NONE = new EditorShowMode('NONE'); // По нажатию кнопки мыши EditorShowMode.ON_MOUSE_DOWN = new EditorShowMode('ON_MOUSE_DOWN'); // При фокусировке ячейки EditorShowMode.ON_FOCUS = new EditorShowMode('ON_FOCUS'); // При клике по сфокусированной ячейки EditorShowMode.ON_CLICK_FOCUSED = new EditorShowMode('ON_CLICK_FOCUSED'); // При двойном клике по ячейке EditorShowMode.ON_DBL_CLICK = new EditorShowMode('ON_DBL_CLICK'); return EditorShowMode; }()); /** * Способ выделения ячеек */ var SelectionMode = /** @class */ (function () { function SelectionMode(name, range) { if (range === void 0) { range = false; } this.name = name; this.range = range; } /** * Выделяются только отдельные ячейки */ SelectionMode.NONE = new SelectionMode('NONE'); /** * Выделяются только отдельные ячейки */ SelectionMode.CELL = new SelectionMode('CELL'); /** * Выделяются отдельные строки целиком */ SelectionMode.ROW = new SelectionMode('ROW'); /** * Можно выбрать прямоугольные области */ SelectionMode.RANGE = new SelectionMode('RANGE', true); /** * Выделяются отдельные строки, но при движении мышью выделяется * прямоугольная область */ SelectionMode.ROW_AND_RANGE = new SelectionMode('ROW_AND_RANGE', true); return SelectionMode; }()); /** * Способ позиционирования всплывающих окон */ var PopupPosition = /** @class */ (function () { function PopupPosition(name) { this.name = name; } PopupPosition.RELATIVE = new PopupPosition('RELATIVE'); PopupPosition.ABSOLUTE = new PopupPosition('ABSOLUTE'); PopupPosition.MODAL = new PopupPosition('MODAL'); return PopupPosition; }()); // CONCATENATED MODULE: ./src/classes/filter.class.ts // Тип фильтра по колонке var FilterOperator; (function (FilterOperator) { FilterOperator["NONE"] = "NONE"; FilterOperator["BETWEEN"] = "BETWEEN"; FilterOperator["NOT_BETWEEN"] = "NOT_BETWEEN"; FilterOperator["CONTAINS"] = "CONTAINS"; FilterOperator["NOT_CONTAINS"] = "NOT_CONTAINS"; FilterOperator["EQUALS"] = "EQUALS"; FilterOperator["NOT_EQUALS"] = "NOT_EQUALS"; FilterOperator["EMPTY"] = "EMPTY"; FilterOperator["NOT_EMPTY"] = "NOT_EMPTY"; FilterOperator["SET"] = "SET"; })(FilterOperator || (FilterOperator = {})); // Фильтр по колонке var filter_class_Filter = /** @class */ (function () { function Filter(fieldName, operator, value, value2, // For between items, // Selected items active, // Фильтр применен в текущий момент format, // Формат вывода caption, // Заголово колонки type) { if (items === void 0) { items = []; } if (active === void 0) { active = false; } if (format === void 0) { format = ''; } if (caption === void 0) { caption = ''; } if (type === void 0) { type = ColumnType.STRING; } this.fieldName = fieldName; this.operator = operator; this.value = value; this.value2 = value2; this.items = items; this.active = active; this.format = format; this.caption = caption; this.type = type; this.orFilter = null; } Object.defineProperty(Filter.prototype, "txtValue", { get: function () { if (!this.value) { return ''; } return this.value + ''; }, enumerable: true, configurable: true }); Filter.prototype.clearItems = function () { this.items.splice(0, this.items.length); }; // Клонируем фильтр. Редактор фильра будет привязан к копии, // чтобы не задеть текущие фильтры. Filter.prototype.clone = function (active) { var res = new Filter(this.fieldName, this.operator, this.value, this.value2, this.items.slice(), active, this.format, this.caption, this.type); return res; }; Filter.prototype.valueToString = function (value, intl, formatter) { if (value === true) { return intl.translate('True'); } if (value === false) { return intl.translate('False'); } var v = formatter.format(this.type, this.format, value); if (this.type === ColumnType.STRING) { return "'" + v + "'"; } return v; }; Filter.prototype.toString = function (intl, formatter) { var _this = this; var field = "[" + this.caption + "]"; var op = ''; var values = ''; var v1 = ''; var v2 = ''; var items = ''; if (this.value !== null) { v1 = this.valueToString(this.value, intl, formatter); } if (this.value2 !== null) { v2 = this.valueToString(this.value2, intl, formatter); } if (this.items.length > 0) { items = this.items.map(function (i) { return _this.valueToString(i, intl, formatter); }).join(', '); } switch (this.operator) { case FilterOperator.EQUALS: op = ' = '; values = v1; break; case FilterOperator.NOT_EQUALS: op = ' <> '; values = v1; break; case FilterOperator.CONTAINS: op = 'Contains'; values = v1; break; case FilterOperator.NOT_CONTAINS: op = 'Not contains'; values = v1; break; case FilterOperator.BETWEEN: op = 'Between'; values = v1 + " " + intl.translate('And').toUpperCase() + " " + v2; break; case FilterOperator.NOT_BETWEEN: op = 'Not between'; values = v1 + " " + intl.translate('And').toUpperCase() + " " + v2; break; case FilterOperator.EMPTY: op = 'Is empty'; break; case FilterOperator.NOT_EMPTY: op = 'Is not empty'; break; case FilterOperator.SET: op = 'In'; values = "(" + items + ")"; break; } op = intl.translate(op).toUpperCase(); return field + " " + op + " " + values; }; return Filter; }()); // CONCATENATED MODULE: ./src/data-transforms/filter.pipe.ts /** * Copyright (c) 2018-2019 Aleksey Melnikov, True Directive Company. * @link https://truedirective.com/ * @license MIT */ var filter_pipe_FilterPipe = /** @class */ (function () { function FilterPipe() { this._searchStringApplicableForNumbers = false; this._searchStringApplicableForDates = false; } FilterPipe.prototype.isEmpty = function (v) { return v === null || v === undefined || v === ''; }; FilterPipe.prototype.match = function (row, columns, filters, searchString, valueFormatter) { var _this = this; if (valueFormatter === void 0) { valueFormatter = null; } var res = true; if (searchString) { res = false; columns.some(function (c) { var v = row[c.fieldName]; if (c.type === ColumnType.STRING && v && v.toLowerCase().indexOf(searchString) >= 0) { res = true; return true; } if (c.type === ColumnType.REFERENCE && v && v.toLowerCase().indexOf(searchString) >= 0) { res = true; return true; } if (c.type === ColumnType.UNSAFE_HTML || c.type === ColumnType.HTML) { if (c.displayField !== '') { if (v && v.toLowerCase().indexOf(searchString) >= 0) { res = true; return true; } } } if (c.type === ColumnType.DATETIME && _this._searchStringApplicableForDates) { if (valueFormatter !== null) { var vs = valueFormatter.displayedValue(c, v, row) + ''; if (vs && vs.toLowerCase().indexOf(searchString) >= 0) { res = true; return true; } } } if (c.type === ColumnType.NUMBER && _this._searchStringApplicableForNumbers) { if (valueFormatter !== null) { var vs = valueFormatter.displayedValue(c, v, row) + ''; if (vs && vs.toLowerCase().indexOf(searchString) >= 0) { res = true; return true; } } } return false; }); if (!res) { return false; } } for (var i = 0; i < filters.length; i++) { // Фильтр var f = filters[i]; // Значение поля var v = row[f.fieldName]; var vv = v; var v1 = f.value; var v2 = f.value2; var s = v ? (v + '').toLowerCase() : ''; if (f.operator === FilterOperator.EMPTY) { res = this.isEmpty(v); } if (f.operator === FilterOperator.NOT_EMPTY) { res = !this.isEmpty(v); } if (f.type === ColumnType.DATETIME) { vv = vv !== null ? vv.getTime() : null; v1 = v1 !== null ? v1.getTime() : null; v2 = v2 !== null ? v2.getTime() : null; } if (f.type === ColumnType.BOOLEAN) { v1 = f.value; if (f.operator === FilterOperator.EQUALS) { if (vv !== v1) { res = false; } } if (f.operator === FilterOperator.NOT_EQUALS) { if (vv === v1) { res = false; } } } // Задан набор значений if (f.operator === FilterOperator.SET) { if (f.items.indexOf(vv) < 0) { res = false; } } if (f.operator === FilterOperator.CONTAINS) { // Содержит подстроку if (s.indexOf(f.txtValue.toLowerCase()) < 0) { res = false; } } if (f.operator === FilterOperator.NOT_CONTAINS) { // НЕ содержит подстроку if (s.indexOf(f.txtValue.toLowerCase()) >= 0) { res = false; } } if (f.operator === FilterOperator.EQUALS) { if (s !== f.txtValue.toLowerCase()) { res = false; } } if (f.operator === FilterOperator.NOT_EQUALS) { if (s === f.txtValue.toLowerCase()) { res = false; } } if (f.operator === FilterOperator.BETWEEN) { if (vv < v1 || vv > v2) { res = false; } } if (f.operator === FilterOperator.NOT_BETWEEN) { if (vv >= v1 && vv <= v2) { res = false; } } } return res; }; FilterPipe.prototype.transform = function (rows, columns, filters, searchString, vf) { var _this = this; if (!rows) { return rows; } searchString = searchString.toLowerCase(); if (/\d/.test(searchString)) { this._searchStringApplicableForDates = true; this._searchStringApplicableForNumbers = true; } return !searchString && (filters === undefined || filters.length === 0) ? rows : rows.filter(function (row) { return _this.match(row, columns, filters, searchString, vf); }); }; return FilterPipe; }()); // CONCATENATED MODULE: ./src/data-transforms/page.pipe.ts var PagePipe = /** @class */ (function () { function PagePipe() { } PagePipe.prototype.transform = function (rows, pageInfo) { var res = []; var i = pageInfo.offset; while (i < (pageInfo.offset + pageInfo.limit)) { if (!rows[i]) { // Иначе при ленивой загрузке сходит с ума trackBy rows[i] = { __ax: 'empty' }; } res.push(rows[i]); i++; } return res; }; return PagePipe; }()); // CONCATENATED MODULE: ./src/classes/sort-info.class.ts /** * Copyright (c) 2018-2019 Aleksey Melnikov, True Directive Company. * @link https://truedirective.com/ * @license MIT */ // Тип сортировки var SortType; (function (SortType) { SortType["NONE"] = "None"; SortType["ASC"] = "ASC"; SortType["DESC"] = "DESC"; })(SortType || (SortType = {})); // Информация о сортировке грида var SortInfo = /** @class */ (function () { function SortInfo(fieldName, sortType) { this.fieldName = fieldName; this.sortType = sortType; } SortInfo.prototype.set = function (fieldName, sortType) { this.fieldName = fieldName; this.sortType = sortType; }; SortInfo.prototype.invert = function () { if (this.sortType === SortType.NONE) { this.sortType = SortType.ASC; } else { this.sortType = this.sortType === SortType.ASC ? SortType.DESC : SortType.NONE; } // Можно сделать так, чтобы клик по колонке, которая отсортирована в обратном порядке // сортировалась в прямом порядке: // this.sortType = this.sortType === SortType.ASC ? SortType.DESC : SortType.ASC; }; SortInfo.prototype.sort = function (fieldName) { if (this.sortType === SortType.ASC && this.fieldName === fieldName) { this.sortType = SortType.DESC; } else { this.fieldName = fieldName; this.sortType = SortType.ASC; } }; SortInfo.prototype.toString = function () { var st = this.sortType + ''; return this.fieldName + " " + st; }; return SortInfo; }()); // CONCATENATED MODULE: ./src/data-transforms/sort.pipe.ts /** * Copyright (c) 2018-2019 Aleksey Melnikov, True Directive Company. * @link https://truedirective.com/ * @license MIT */ var sort_pipe_SortPipe = /** @class */ (function () { function SortPipe() { } SortPipe.compare = function (v1, v2, sType) { if ((v1 === null || v1 === undefined) && (v2 === null || v2 === undefined)) { return 0; } if (v1 === null || v1 === undefined) { return sType === SortType.ASC ? -1 : 1; } if (v2 === null || v2 === undefined) { return sType === SortType.ASC ? 1 : -1; } if (v1 === v2) { return 0; } if (sType === SortType.ASC) { return v1 > v2 ? 1 : -1; } return v1 < v2 ? 1 : -1; }; SortPipe.prototype.transform = function (rows, sortings, groupedColumns) { if (groupedColumns === void 0) { groupedColumns = []; } if (!rows) { return []; } if (sortings === null || (sortings.length === 0 && groupedColumns.length === 0)) { return rows; } // Копируем массив и копию сортируем var rr = rows.concat().sort(function (a1, a2) { var r = 0; var _loop_1 = function (i) { var k = 1; var el = groupedColumns[i]; var sortInfo = sortings.find(function (s) { return s.fieldName === el.fieldName; }); if (sortInfo && sortInfo.sortType === SortType.DESC) { k = -1; } var v1 = a1[el.fieldName]; var v2 = a2[el.fieldName]; if ((v2 === null && v1 !== null) || v1 > v2) { r = 1 * k; return "break"; } else { if ((v1 === null && v2 !== null) || v1 < v2) { r = -1 * k; return "break"; } } }; for (var i = 0; i < groupedColumns.length; i++) { var state_1 = _loop_1(i); if (state_1 === "break") break; } if (r !== 0) { return r; } if (sortings.length === 0) { return 0; } for (var i = 0; i < sortings.length; i++) { var sortInfo = sortings[i]; var res = SortPipe.compare(a1[sortInfo.fieldName], a2[sortInfo.fieldName], sortInfo.sortType); if (res !== 0) { return res; } } return 0; }); return rr; }; return SortPipe; }()); // CONCATENATED MODULE: ./src/classes/summary.class.ts /** * Copyright (c) 2018-2019 Aleksey Melnikov, True Directive Company. * @link https://truedirective.com/ * @license MIT */ var SummaryType = /** @class */ (function () { function SummaryType(name, shortName, footerText) { this.name = name; this.shortName = shortName; this.footerText = footerText; } SummaryType.SUM = new SummaryType('Sum', 'Sum', 'SUM'); SummaryType.MIN = new SummaryType('Minimum', 'Min', 'MIN'); SummaryType.MAX = new SummaryType('Maximum', 'Max', 'MAX'); SummaryType.COUNT = new SummaryType('Count', 'Count', 'TOTAL'); SummaryType.AVERAGE = new SummaryType('Average', 'Avg', 'AVG'); return SummaryType; }()); var Summary = /** @class */ (function () { function Summary(type) { this.type = type; } return Summary; }()); // CONCATENATED MODULE: ./src/data-transforms/summary.pipe.ts /** * Copyright (c) 2018-2019 Aleksey Melnikov, True Directive Company. * @link https://truedirective.com/ * @license MIT */ var summary_pipe_SummaryPipe = /** @class */ (function () { function SummaryPipe() { } SummaryPipe.prototype.transform = function (rows, c, t) { if (t === SummaryType.COUNT) { return rows.length; } var res = null; var rCount = 0; if (t === SummaryType.SUM || t === SummaryType.AVERAGE) { res = 0; } rows.forEach(function (r) { if (t === SummaryType.SUM || t === SummaryType.AVERAGE) { if (r[c.fieldName] !== null) { res += r[c.fieldName];