UNPKG

handsontable

Version:

Handsontable is a JavaScript Spreadsheet Component available for React, Angular and Vue.

325 lines (295 loc) • 12.9 kB
"use strict"; exports.__esModule = true; exports.default = void 0; require("core-js/modules/es.object.freeze.js"); var _element = require("../../../helpers/dom/element"); var _object = require("../../../helpers/object"); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } 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; } /** * @todo Describe options. * @typedef SettingsPure * * @property {Option} facade @todo desc. * @property {Option} cellRenderer Option `cellRenderer`. * @property {Option} columnHeaders Option `columnHeaders`. * @property {Option} columnWidth Option `columnWidth`. * @property {Option} currentRowClassName Option `currentRowClassName`. * @property {Option} data Option `data`. * @property {Option} defaultColumnWidth Option `defaultColumnWidth`. * @property {Option} defaultRowHeight Option `defaultRowHeight`. * @property {Option} externalRowCalculator Option `externalRowCalculator`. * @property {Option} fixedColumnsStart Option `fixedColumnsStart`. * @property {Option} fixedRowsBottom Option `fixedRowsBottom`. * @property {Option} fixedRowsTop Option `fixedRowsTop`. * @property {Option} freezeOverlays Option `freezeOverlays`. * @property {Option} groups Option `groups`. * @property {Option} hideBorderOnMouseDownOver Option `hideBorderOnMouseDownOver`. * @property {Option} isRtl Option `isRtl`. * @property {Option} isDataViewInstance Option `isDataViewInstance`. * @property {Option} minSpareRows Option `minSpareRows`. * @property {Option} onBeforeHighlightingColumnHeader Option `onBeforeHighlightingColumnHeader`. * @property {Option} onBeforeHighlightingRowHeader Option `onBeforeHighlightingRowHeader`. * @property {Option} onBeforeRemoveCellClassNames Option `onBeforeRemoveCellClassNames`. * @property {Option} onBeforeStretchingColumnWidth Option `onBeforeStretchingColumnWidth`. * @property {Option} preventOverflow Option `preventOverflow`. * @property {Option} preventWheel Option `preventWheel`. * @property {Option} renderAllRows Option `renderAllRows`. * @property {Option} rowHeaders Option `rowHeaders`. * @property {Option} rowHeight Option `,`. * @property {Option} shouldRenderBottomOverlay Option `shouldRenderBottomOverlay`. * @property {Option} shouldRenderInlineStartOverlay Option `shouldRenderInlineStartOverlay`. * @property {Option} shouldRenderTopOverlay Option `shouldRenderTopOverlay`. * @property {Option} stretchH Option `stretchH`. * @property {Option} table Option `table`. * @property {Option} totalColumns Option `totalColumns`. * @property {Option} totalRows Option `totalRows`. * @property {?Option} beforeDraw Option `beforeDraw`. * @property {?Option} columnHeaderHeight Option `columnHeaderHeight`. * @property {?Option} currentColumnClassName Option `currentColumnClassName`. * @property {?Option} headerClassName Option `headerClassName`. * @property {?Option} onAfterDrawSelection Option `onAfterDrawSelection`. * @property {?Option} onAfterMomentumScroll Option `onAfterMomentumScroll`. * @property {?Option} onBeforeDrawBorders Option `onBeforeDrawBorders`. * @property {?Option} onBeforeTouchScroll Option `onBeforeTouchScroll`. * @property {?Option} onCellContextMenu Option `onCellContextMenu`. * @property {?Option} onCellCornerDblClick Option `onCellCornerDblClick`. * @property {?Option} onCellCornerMouseDown Option `onCellCornerMouseDown`. * @property {?Option} onCellDblClick Option `onCellDblClick`. * @property {?Option} onCellMouseDown Option `onCellMouseDown`. * @property {?Option} onCellMouseOut Option `onCellMouseOut`. * @property {?Option} onCellMouseOver Option `onCellMouseOver`. * @property {?Option} onCellMouseUp Option `onCellMouseUp`. * @property {?Option} onDraw Option `onDraw`. * @property {?Option} onModifyGetCellCoords Option `onModifyGetCellCoords`. * @property {?Option} onModifyRowHeaderWidth Option `onModifyRowHeaderWidth`. * @property {?Option} onScrollHorizontally Option `onScrollHorizontally`. * @property {?Option} onScrollVertically Option `onScrollVertically`. * @property {?Option} onWindowResize Option `onWindowResize`. * @property {?Option} rowHeaderWidth Option `rowHeaderWidth`. * @property {?Option} selections Option `selections`. * @property {?Option} viewportColumnCalculatorOverride Option `viewportColumnCalculatorOverride`. * @property {?Option} viewportRowCalculatorOverride Option `viewportRowCalculatorOverride`. */ /** * @template TValue. * @typedef { TValue | Array.<TValue> | (function(...*): TValue) } Option */ /** * @class Settings */ var Settings = /*#__PURE__*/function () { /** * Reference to settings. * * @protected * @type {SettingsPure} */ /** * The defaults values of settings. * Void 0 means it is required, null means it can be empty. * * @public * @type {Readonly<SettingsPure>} */ /** * @param {SettingsPure} settings The user defined settings. */ function Settings(settings) { var _this = this; _classCallCheck(this, Settings); _defineProperty(this, "settings", {}); _defineProperty(this, "defaults", Object.freeze(this.getDefaults())); (0, _object.objectEach)(this.defaults, function (value, key) { if (settings[key] !== void 0) { _this.settings[key] = settings[key]; } else if (value === void 0) { throw new Error("A required setting \"".concat(key, "\" was not provided")); } else { _this.settings[key] = value; } }); } /** * Generate defaults for a settings. * Void 0 means it is required, null means it can be empty. * * @private * @returns {SettingsPure} */ _createClass(Settings, [{ key: "getDefaults", value: function getDefaults() { var _this2 = this; return { facade: void 0, table: void 0, // Determines whether the Walkontable instance is used as dataset viewer. When its instance is used as // a context menu, autocomplete list, etc, the returned value is `false`. isDataViewInstance: true, // presentation mode externalRowCalculator: false, stretchH: 'none', // values: all, last, none currentRowClassName: null, currentColumnClassName: null, preventOverflow: function preventOverflow() { return false; }, preventWheel: false, // data source data: void 0, freezeOverlays: false, // Number of renderable columns for the left overlay. fixedColumnsStart: 0, // Number of renderable rows for the top overlay. fixedRowsTop: 0, // Number of renderable rows for the bottom overlay. fixedRowsBottom: 0, // Enable the inline start overlay when conditions are met (left for LTR and right for RTL document mode). shouldRenderInlineStartOverlay: function shouldRenderInlineStartOverlay() { return _this2.getSetting('fixedColumnsStart') > 0 || _this2.getSetting('rowHeaders').length > 0; }, // Enable the top overlay when conditions are met. shouldRenderTopOverlay: function shouldRenderTopOverlay() { return _this2.getSetting('fixedRowsTop') > 0 || _this2.getSetting('columnHeaders').length > 0; }, // Enable the bottom overlay when conditions are met. shouldRenderBottomOverlay: function shouldRenderBottomOverlay() { return _this2.getSetting('fixedRowsBottom') > 0; }, minSpareRows: 0, // this must be array of functions: [function (row, TH) {}] rowHeaders: function rowHeaders() { return []; }, // this must be array of functions: [function (column, TH) {}] columnHeaders: function columnHeaders() { return []; }, totalRows: void 0, totalColumns: void 0, cellRenderer: function cellRenderer(row, column, TD) { var cellData = _this2.getSetting('data', row, column); (0, _element.fastInnerText)(TD, cellData === void 0 || cellData === null ? '' : cellData); }, // columnWidth: 50, columnWidth: function columnWidth() {// return undefined means use default size for the rendered cell content }, rowHeight: function rowHeight() {// return undefined means use default size for the rendered cell content }, defaultRowHeight: 23, defaultColumnWidth: 50, selections: null, hideBorderOnMouseDownOver: false, viewportRowCalculatorOverride: null, viewportColumnCalculatorOverride: null, // callbacks onCellMouseDown: null, onCellContextMenu: null, onCellMouseOver: null, onCellMouseOut: null, onCellMouseUp: null, // onCellMouseOut: null, onCellDblClick: null, onCellCornerMouseDown: null, onCellCornerDblClick: null, beforeDraw: null, onDraw: null, onBeforeRemoveCellClassNames: null, onAfterDrawSelection: null, onBeforeDrawBorders: null, onScrollVertically: null, onScrollHorizontally: null, onBeforeTouchScroll: null, onAfterMomentumScroll: null, onBeforeStretchingColumnWidth: function onBeforeStretchingColumnWidth(width) { return width; }, onModifyRowHeaderWidth: null, onModifyGetCellCoords: null, onBeforeHighlightingRowHeader: function onBeforeHighlightingRowHeader(sourceRow) { return sourceRow; }, onBeforeHighlightingColumnHeader: function onBeforeHighlightingColumnHeader(sourceCol) { return sourceCol; }, onWindowResize: null, renderAllRows: false, groups: false, rowHeaderWidth: null, columnHeaderHeight: null, headerClassName: null, rtlMode: false }; } /** * Update settings. * * @param {object} settings The singular settings to update or if passed as object to merge with. * @param {*} value The value to set if the first argument is passed as string. * @returns {Settings} */ }, { key: "update", value: function update(settings, value) { var _this3 = this; if (value === void 0) { // settings is object (0, _object.objectEach)(settings, function (settingValue, key) { _this3.settings[key] = settingValue; }); } else { // if value is defined then settings is the key this.settings[settings] = value; } return this; } /** * Get setting by name. * * @param {$Keys<SettingsPure>} key The settings key to retrieve. * @param {*} [param1] Additional parameter passed to the options defined as function. * @param {*} [param2] Additional parameter passed to the options defined as function. * @param {*} [param3] Additional parameter passed to the options defined as function. * @param {*} [param4] Additional parameter passed to the options defined as function. * @returns {*} */ }, { key: "getSetting", value: function getSetting(key, param1, param2, param3, param4) { if (typeof this.settings[key] === 'function') { return this.settings[key](param1, param2, param3, param4); } else if (param1 !== void 0 && Array.isArray(this.settings[key])) { return this.settings[key][param1]; } return this.settings[key]; } /** * Get a setting value without any evaluation. * * @param {string} key The settings key to retrieve. * @returns {*} */ }, { key: "getSettingPure", value: function getSettingPure(key) { return this.settings[key]; } /** * Checks if setting exists. * * @param {boolean} key The settings key to check. * @returns {boolean} */ }, { key: "has", value: function has(key) { return !!this.settings[key]; } }]); return Settings; }(); exports.default = Settings;