handsontable
Version:
Handsontable is a JavaScript Spreadsheet Component available for React, Angular and Vue.
190 lines (160 loc) • 5.39 kB
JavaScript
function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
import "core-js/modules/web.timers.js";
import "core-js/modules/es.symbol.js";
import "core-js/modules/es.symbol.description.js";
import "core-js/modules/es.object.to-string.js";
import "core-js/modules/es.symbol.iterator.js";
import "core-js/modules/es.array.iterator.js";
import "core-js/modules/es.string.iterator.js";
import "core-js/modules/web.dom-collections.iterator.js";
// https://gist.github.com/paulirish/1579671
/* eslint-disable no-restricted-globals */
var lastTime = 0;
var vendors = ['ms', 'moz', 'webkit', 'o'];
var _requestAnimationFrame = window.requestAnimationFrame;
var _cancelAnimationFrame = window.cancelAnimationFrame;
for (var x = 0; x < vendors.length && !_requestAnimationFrame; ++x) {
_requestAnimationFrame = window["".concat(vendors[x], "RequestAnimationFrame")];
_cancelAnimationFrame = window["".concat(vendors[x], "CancelAnimationFrame")] || window["".concat(vendors[x], "CancelRequestAnimationFrame")];
}
if (!_requestAnimationFrame) {
_requestAnimationFrame = function _requestAnimationFrame(callback) {
var currTime = new Date().getTime();
var timeToCall = Math.max(0, 16 - (currTime - lastTime));
var id = window.setTimeout(function () {
callback(currTime + timeToCall);
}, timeToCall);
lastTime = currTime + timeToCall;
return id;
};
}
if (!_cancelAnimationFrame) {
_cancelAnimationFrame = function _cancelAnimationFrame(id) {
clearTimeout(id);
};
}
/**
* Polyfill for requestAnimationFrame.
*
* @param {Function} callback The function to call when it's time.
* @returns {number}
*/
export function requestAnimationFrame(callback) {
return _requestAnimationFrame.call(window, callback);
}
/**
* @returns {boolean}
*/
export function isClassListSupported() {
return !!document.documentElement.classList;
}
/**
* @returns {boolean}
*/
export function isTextContentSupported() {
return !!document.createTextNode('test').textContent;
}
/**
* @returns {boolean}
*/
export function isGetComputedStyleSupported() {
return !!window.getComputedStyle;
}
/**
* Polyfill for cancelAnimationFrame.
*
* @param {number} id The request Id, generated by `requestAnimationFrame`.
*/
export function cancelAnimationFrame(id) {
_cancelAnimationFrame.call(window, id);
}
/**
* @returns {boolean}
*/
export function isTouchSupported() {
return 'ontouchstart' in window;
}
var _hasCaptionProblem;
/**
*
*/
function detectCaptionProblem() {
var TABLE = document.createElement('TABLE');
TABLE.style.borderSpacing = '0';
TABLE.style.borderWidth = '0';
TABLE.style.padding = '0';
var TBODY = document.createElement('TBODY');
TABLE.appendChild(TBODY);
TBODY.appendChild(document.createElement('TR'));
TBODY.firstChild.appendChild(document.createElement('TD'));
TBODY.firstChild.firstChild.innerHTML = '<tr><td>t<br>t</td></tr>';
var CAPTION = document.createElement('CAPTION');
CAPTION.innerHTML = 'c<br>c<br>c<br>c';
CAPTION.style.padding = '0';
CAPTION.style.margin = '0';
TABLE.insertBefore(CAPTION, TBODY);
document.body.appendChild(TABLE);
_hasCaptionProblem = TABLE.offsetHeight < 2 * TABLE.lastChild.offsetHeight; // boolean
document.body.removeChild(TABLE);
}
/**
* @returns {boolean}
*/
export function hasCaptionProblem() {
if (_hasCaptionProblem === void 0) {
detectCaptionProblem();
}
return _hasCaptionProblem;
}
var comparisonFunction;
/**
* Get string comparison function for sorting purposes. It supports multilingual string comparison base on Internationalization API.
*
* @param {string} [language] The language code used for phrases sorting.
* @param {object} [options] Additional options for sort comparator.
* @returns {*}
*/
export function getComparisonFunction(language) {
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
if (comparisonFunction) {
return comparisonFunction;
}
if ((typeof Intl === "undefined" ? "undefined" : _typeof(Intl)) === 'object') {
comparisonFunction = new Intl.Collator(language, options).compare;
} else if (typeof String.prototype.localeCompare === 'function') {
comparisonFunction = function comparisonFunction(a, b) {
return "".concat(a).localeCompare(b);
};
} else {
comparisonFunction = function comparisonFunction(a, b) {
if (a === b) {
return 0;
}
return a > b ? -1 : 1;
};
}
return comparisonFunction;
}
var passiveSupported;
/**
* Checks if browser supports passive events.
*
* @returns {boolean}
*/
export function isPassiveEventSupported() {
if (passiveSupported !== void 0) {
return passiveSupported;
}
try {
var options = {
get passive() {
passiveSupported = true;
}
}; // eslint-disable-next-line no-restricted-globals
window.addEventListener('test', options, options); // eslint-disable-next-line no-restricted-globals
window.removeEventListener('test', options, options);
} catch (err) {
passiveSupported = false;
}
return passiveSupported;
}