| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350 |
- 'use strict';
- exports.__esModule = true;
- var _createClass = 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); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
- var _element = require('./../../../../helpers/dom/element');
- var _object = require('./../../../../helpers/object');
- var _array = require('./../../../../helpers/array');
- var _eventManager = require('./../../../../eventManager');
- var _eventManager2 = _interopRequireDefault(_eventManager);
- var _core = require('./../core');
- var _core2 = _interopRequireDefault(_core);
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- var registeredOverlays = {};
- /**
- * Creates an overlay over the original Walkontable instance. The overlay renders the clone of the original Walkontable
- * and (optionally) implements behavior needed for native horizontal and vertical scrolling.
- *
- * @class Overlay
- */
- var Overlay = function () {
- _createClass(Overlay, null, [{
- key: 'registerOverlay',
- /**
- * Register overlay class.
- *
- * @param {String} type Overlay type, one of the CLONE_TYPES value
- * @param {Overlay} overlayClass Overlay class extended from base overlay class {@link Overlay}
- */
- value: function registerOverlay(type, overlayClass) {
- if (Overlay.CLONE_TYPES.indexOf(type) === -1) {
- throw new Error('Unsupported overlay (' + type + ').');
- }
- registeredOverlays[type] = overlayClass;
- }
- /**
- * Create new instance of overlay type.
- *
- * @param {String} type Overlay type, one of the CLONE_TYPES value
- * @param {Walkontable} wot Walkontable instance
- */
- }, {
- key: 'createOverlay',
- value: function createOverlay(type, wot) {
- return new registeredOverlays[type](wot);
- }
- /**
- * Check if specified overlay was registered.
- *
- * @param {String} type Overlay type, one of the CLONE_TYPES value
- * @returns {Boolean}
- */
- }, {
- key: 'hasOverlay',
- value: function hasOverlay(type) {
- return registeredOverlays[type] !== void 0;
- }
- /**
- * Checks if overlay object (`overlay`) is instance of overlay type (`type`).
- *
- * @param {Overlay} overlay Overlay object
- * @param {String} type Overlay type, one of the CLONE_TYPES value
- * @returns {Boolean}
- */
- }, {
- key: 'isOverlayTypeOf',
- value: function isOverlayTypeOf(overlay, type) {
- if (!overlay || !registeredOverlays[type]) {
- return false;
- }
- return overlay instanceof registeredOverlays[type];
- }
- /**
- * @param {Walkontable} wotInstance
- */
- }, {
- key: 'CLONE_TOP',
- /**
- * @type {String}
- */
- get: function get() {
- return 'top';
- }
- /**
- * @type {String}
- */
- }, {
- key: 'CLONE_BOTTOM',
- get: function get() {
- return 'bottom';
- }
- /**
- * @type {String}
- */
- }, {
- key: 'CLONE_LEFT',
- get: function get() {
- return 'left';
- }
- /**
- * @type {String}
- */
- }, {
- key: 'CLONE_TOP_LEFT_CORNER',
- get: function get() {
- return 'top_left_corner';
- }
- /**
- * @type {String}
- */
- }, {
- key: 'CLONE_BOTTOM_LEFT_CORNER',
- get: function get() {
- return 'bottom_left_corner';
- }
- /**
- * @type {String}
- */
- }, {
- key: 'CLONE_DEBUG',
- get: function get() {
- return 'debug';
- }
- /**
- * List of all availables clone types
- *
- * @type {Array}
- */
- }, {
- key: 'CLONE_TYPES',
- get: function get() {
- return [Overlay.CLONE_TOP, Overlay.CLONE_BOTTOM, Overlay.CLONE_LEFT, Overlay.CLONE_TOP_LEFT_CORNER, Overlay.CLONE_BOTTOM_LEFT_CORNER, Overlay.CLONE_DEBUG];
- }
- }]);
- function Overlay(wotInstance) {
- _classCallCheck(this, Overlay);
- (0, _object.defineGetter)(this, 'wot', wotInstance, {
- writable: false
- });
- // legacy support, deprecated in the future
- this.instance = this.wot;
- this.type = '';
- this.mainTableScrollableElement = null;
- this.TABLE = this.wot.wtTable.TABLE;
- this.hider = this.wot.wtTable.hider;
- this.spreader = this.wot.wtTable.spreader;
- this.holder = this.wot.wtTable.holder;
- this.wtRootElement = this.wot.wtTable.wtRootElement;
- this.trimmingContainer = (0, _element.getTrimmingContainer)(this.hider.parentNode.parentNode);
- this.areElementSizesAdjusted = false;
- this.updateStateOfRendering();
- }
- /**
- * Update internal state of object with an information about the need of full rendering of the overlay.
- *
- * @returns {Boolean} Returns `true` if the state has changed since the last check.
- */
- _createClass(Overlay, [{
- key: 'updateStateOfRendering',
- value: function updateStateOfRendering() {
- var previousState = this.needFullRender;
- this.needFullRender = this.shouldBeRendered();
- var changed = previousState !== this.needFullRender;
- if (changed && !this.needFullRender) {
- this.reset();
- }
- return changed;
- }
- /**
- * Checks if overlay should be fully rendered
- *
- * @returns {Boolean}
- */
- }, {
- key: 'shouldBeRendered',
- value: function shouldBeRendered() {
- return true;
- }
- /**
- * Update the trimming container.
- */
- }, {
- key: 'updateTrimmingContainer',
- value: function updateTrimmingContainer() {
- this.trimmingContainer = (0, _element.getTrimmingContainer)(this.hider.parentNode.parentNode);
- }
- /**
- * Update the main scrollable element.
- */
- }, {
- key: 'updateMainScrollableElement',
- value: function updateMainScrollableElement() {
- this.mainTableScrollableElement = (0, _element.getScrollableElement)(this.wot.wtTable.TABLE);
- }
- /**
- * Make a clone of table for overlay
- *
- * @param {String} direction Can be `Overlay.CLONE_TOP`, `Overlay.CLONE_LEFT`,
- * `Overlay.CLONE_TOP_LEFT_CORNER`, `Overlay.CLONE_DEBUG`
- * @returns {Walkontable}
- */
- }, {
- key: 'makeClone',
- value: function makeClone(direction) {
- if (Overlay.CLONE_TYPES.indexOf(direction) === -1) {
- throw new Error('Clone type "' + direction + '" is not supported.');
- }
- var clone = document.createElement('DIV');
- var clonedTable = document.createElement('TABLE');
- clone.className = 'ht_clone_' + direction + ' handsontable';
- clone.style.position = 'absolute';
- clone.style.top = 0;
- clone.style.left = 0;
- clone.style.overflow = 'hidden';
- clonedTable.className = this.wot.wtTable.TABLE.className;
- clone.appendChild(clonedTable);
- this.type = direction;
- this.wot.wtTable.wtRootElement.parentNode.appendChild(clone);
- var preventOverflow = this.wot.getSetting('preventOverflow');
- if (preventOverflow === true || preventOverflow === 'horizontal' && this.type === Overlay.CLONE_TOP || preventOverflow === 'vertical' && this.type === Overlay.CLONE_LEFT) {
- this.mainTableScrollableElement = window;
- } else {
- this.mainTableScrollableElement = (0, _element.getScrollableElement)(this.wot.wtTable.TABLE);
- }
- return new _core2.default({
- cloneSource: this.wot,
- cloneOverlay: this,
- table: clonedTable
- });
- }
- /**
- * Refresh/Redraw overlay
- *
- * @param {Boolean} [fastDraw=false]
- */
- }, {
- key: 'refresh',
- value: function refresh() {
- var fastDraw = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
- // When hot settings are changed we allow to refresh overlay once before blocking
- var nextCycleRenderFlag = this.shouldBeRendered();
- if (this.clone && (this.needFullRender || nextCycleRenderFlag)) {
- this.clone.draw(fastDraw);
- }
- this.needFullRender = nextCycleRenderFlag;
- }
- /**
- * Reset overlay styles to initial values.
- */
- }, {
- key: 'reset',
- value: function reset() {
- if (!this.clone) {
- return;
- }
- var holder = this.clone.wtTable.holder;
- var hider = this.clone.wtTable.hider;
- var holderStyle = holder.style;
- var hidderStyle = hider.style;
- var rootStyle = holder.parentNode.style;
- (0, _array.arrayEach)([holderStyle, hidderStyle, rootStyle], function (style) {
- style.width = '';
- style.height = '';
- });
- }
- /**
- * Destroy overlay instance
- */
- }, {
- key: 'destroy',
- value: function destroy() {
- new _eventManager2.default(this.clone).destroy();
- }
- }]);
- return Overlay;
- }();
- exports.default = Overlay;
|