UNPKG

handsontable

Version:

Handsontable is a JavaScript Data Grid available for React, Angular and Vue.

184 lines (178 loc) 5.87 kB
"use strict"; exports.__esModule = true; require("core-js/modules/es.error.cause.js"); require("core-js/modules/es.array.push.js"); var _element = require("../../helpers/dom/element"); var _array = require("../../helpers/array"); var _base = require("../base"); var _feature = require("../../helpers/feature"); function _classPrivateMethodInitSpec(e, a) { _checkPrivateRedeclaration(e, a), a.add(e); } function _checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); } function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; } function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; } function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } function _assertClassBrand(e, t, n) { if ("function" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; throw new TypeError("Private element is not present on this object"); } const PLUGIN_KEY = exports.PLUGIN_KEY = 'touchScroll'; const PLUGIN_PRIORITY = exports.PLUGIN_PRIORITY = 200; /** * @private * @plugin TouchScroll * @class TouchScroll */ var _TouchScroll_brand = /*#__PURE__*/new WeakSet(); class TouchScroll extends _base.BasePlugin { constructor() { super(...arguments); /** * After view render listener. */ _classPrivateMethodInitSpec(this, _TouchScroll_brand); /** * Collection of scrollbars to update. * * @type {Array} */ _defineProperty(this, "scrollbars", []); /** * Collection of overlays to update. * * @type {Array} */ _defineProperty(this, "clones", []); /** * Flag which determines if collection of overlays should be refilled on every table render. * * @type {boolean} * @default false */ _defineProperty(this, "lockedCollection", false); /** * Flag which determines if walkontable should freeze overlays while scrolling. * * @type {boolean} * @default false */ _defineProperty(this, "freezeOverlays", false); } static get PLUGIN_KEY() { return PLUGIN_KEY; } static get PLUGIN_PRIORITY() { return PLUGIN_PRIORITY; } static get SETTING_KEYS() { return true; } /** * Check if plugin is enabled. * * @returns {boolean} */ isEnabled() { return (0, _feature.isTouchSupported)(); } /** * Enable the plugin. */ enablePlugin() { if (this.enabled) { return; } this.addHook('afterViewRender', () => _assertClassBrand(_TouchScroll_brand, this, _onAfterViewRender).call(this)); this.registerEvents(); super.enablePlugin(); } /** * Updates the plugin to use the latest options you have specified. */ updatePlugin() { this.lockedCollection = false; super.updatePlugin(); } /** * Disable plugin for this Handsontable instance. */ disablePlugin() { super.disablePlugin(); } /** * Register all necessary events. * * @private */ registerEvents() { this.addHook('beforeTouchScroll', () => _assertClassBrand(_TouchScroll_brand, this, _onBeforeTouchScroll).call(this)); this.addHook('afterMomentumScroll', () => _assertClassBrand(_TouchScroll_brand, this, _onAfterMomentumScroll).call(this)); } } exports.TouchScroll = TouchScroll; function _onAfterViewRender() { if (this.lockedCollection) { return; } const { topOverlay, bottomOverlay, inlineStartOverlay, topInlineStartCornerOverlay, bottomInlineStartCornerOverlay } = this.hot.view._wt.wtOverlays; this.lockedCollection = true; this.scrollbars.length = 0; this.scrollbars.push(topOverlay); if (bottomOverlay.clone) { this.scrollbars.push(bottomOverlay); } this.scrollbars.push(inlineStartOverlay); if (topInlineStartCornerOverlay) { this.scrollbars.push(topInlineStartCornerOverlay); } if (bottomInlineStartCornerOverlay && bottomInlineStartCornerOverlay.clone) { this.scrollbars.push(bottomInlineStartCornerOverlay); } this.clones = []; if (topOverlay.needFullRender) { this.clones.push(topOverlay.clone.wtTable.holder.parentNode); } if (bottomOverlay.needFullRender) { this.clones.push(bottomOverlay.clone.wtTable.holder.parentNode); } if (inlineStartOverlay.needFullRender) { this.clones.push(inlineStartOverlay.clone.wtTable.holder.parentNode); } if (topInlineStartCornerOverlay) { this.clones.push(topInlineStartCornerOverlay.clone.wtTable.holder.parentNode); } if (bottomInlineStartCornerOverlay && bottomInlineStartCornerOverlay.clone) { this.clones.push(bottomInlineStartCornerOverlay.clone.wtTable.holder.parentNode); } } /** * Touch scroll listener. */ function _onBeforeTouchScroll() { this.freezeOverlays = true; (0, _array.arrayEach)(this.clones, clone => { (0, _element.addClass)(clone, 'hide-tween'); }); } /** * After momentum scroll listener. */ function _onAfterMomentumScroll() { this.freezeOverlays = false; (0, _array.arrayEach)(this.clones, clone => { (0, _element.removeClass)(clone, 'hide-tween'); (0, _element.addClass)(clone, 'show-tween'); }); this.hot._registerTimeout(() => { (0, _array.arrayEach)(this.clones, clone => { (0, _element.removeClass)(clone, 'show-tween'); }); }, 400); (0, _array.arrayEach)(this.scrollbars, scrollbar => { scrollbar.refresh(); scrollbar.resetFixedPosition(); }); this.hot.view._wt.wtOverlays.syncScrollWithMaster(); }