UNPKG

@visactor/vtable

Version:

canvas table width high performance

227 lines (194 loc) 7.98 kB
import { validToString } from "../tools/util"; const isNode = "undefined" == typeof window || void 0 === window.window; let arrayFind, arrayFindIndex; const array = { get find() { return arrayFind || (arrayFind = Array.prototype.find ? (arr, predicate) => Array.prototype.find.call(arr, predicate) : (arr, predicate) => { const index = array.findIndex(arr, predicate); return index >= 0 ? arr[index] : void 0; }, arrayFind); }, get findIndex() { return arrayFindIndex || (arrayFindIndex = Array.prototype.findIndex ? (arr, predicate) => Array.prototype.findIndex.call(arr, predicate) : (arr, predicate) => { const {length: length} = arr; for (let i = 0; i < length; i++) { if (predicate(arr[i], i, arr)) return i; } return -1; }, arrayFindIndex); } }; function analyzeUserAgent() { if (isNode) return { IE: !1, Edge: !1, Chrome: !1, Firefox: !1, Safari: !1 }; const ua = window.navigator.userAgent.toLowerCase(); return { IE: !!/(msie|trident)/.exec(ua), Edge: ua.indexOf("edge") > -1, Chrome: ua.indexOf("chrome") > -1 && -1 === ua.indexOf("edge"), Firefox: ua.indexOf("firefox") > -1, Safari: ua.indexOf("safari") > -1 && -1 === ua.indexOf("edge") }; } const {IE: IE, Chrome: Chrome, Firefox: Firefox, Edge: Edge, Safari: Safari} = analyzeUserAgent(); function isObject(obj) { return obj === Object(obj); } export function omit(source, omits) { const result = {}; for (const key in source) omits.indexOf(key) >= 0 || Object.defineProperty(result, key, { get: () => source[key], set(val) { source[key] = val; }, configurable: !0, enumerable: !0 }); return result; } export function defaults(source, defs) { const keys = [], result = {}; for (const key in source) keys.push(key), Object.defineProperty(result, key, { get() { const val = source[key]; return void 0 === val ? defs[key] : val; }, set(val) { source[key] = val; }, configurable: !0, enumerable: !0 }); for (const key in defs) keys.indexOf(key) >= 0 || Object.defineProperty(result, key, { get() { const val = source[key]; return void 0 === val ? defs[key] : val; }, set(val) { source[key] = val; }, configurable: !0, enumerable: !0 }); return result; } export function extend(...args) { const result = {}; return args.forEach((source => { for (const key in source) Object.defineProperty(result, key, { get: () => source[key], set(val) { source[key] = val; }, configurable: !0, enumerable: !0 }); })), result; } function applyChainSafe(obj, fn, ...names) { let value = obj; for (let i = 0; i < names.length && null != value; i++) value = fn(value, names[i]); return value; } function getChainSafe(obj, ...names) { return applyChainSafe(obj, ((val, name) => val[name]), ...names); } function getOrApply(value, ...args) { return "function" == typeof value ? value(...args) : value; } function endsWith(str, searchString, position) { const subjectString = validToString(str); ("number" != typeof position || !isFinite(position) || Math.floor(position) !== position || position > subjectString.length) && (position = subjectString.length), position -= searchString.length; const lastIndex = subjectString.lastIndexOf(searchString, position); return -1 !== lastIndex && lastIndex === position; } export function isPromise(data) { return Boolean(data && "function" == typeof data.then); } export function getPromiseValue(value, callback) { isPromise(value) ? value.then((result => { callback(result); })).catch((err => {})) : callback(value); } function isTouchEvent(e) { return !!e.changedTouches; } function getIgnoreCase(obj, name) { if (obj[name]) return obj[name]; const l = name.toLowerCase(); if (obj[l]) return obj[l]; const u = name.toLowerCase(); if (obj[u]) return obj[u]; for (const k in obj) if (k.toLowerCase() === l) return obj[k]; } export function toBoxArray(obj) { return Array.isArray(obj) ? 3 === obj.length ? [ obj[0], obj[1], obj[2], obj[1] ] : 2 === obj.length ? [ obj[0], obj[1], obj[0], obj[1] ] : 1 === obj.length ? [ obj[0], obj[0], obj[0], obj[0] ] : [ obj[0], obj[1], obj[2], obj[3] ] : [ obj, obj, obj, obj ]; } export { isNode, getChainSafe, applyChainSafe, getOrApply, getIgnoreCase, array }; export function cellInRange(range, col, row) { return range.start.col <= col && col <= range.end.col && range.start.row <= row && row <= range.end.row || range.end.col <= col && col <= range.start.col && range.end.row <= row && row <= range.start.row || range.end.col <= col && col <= range.start.col && range.start.row <= row && row <= range.end.row || range.start.col <= col && col <= range.end.col && range.end.row <= row && row <= range.start.row; } export function cellInRanges(ranges, col, row) { for (let i = 0; i < ranges.length; i++) { const range = ranges[i], startCol = Math.min(range.start.col, range.end.col), endCol = Math.max(range.start.col, range.end.col), startRow = Math.min(range.start.row, range.end.row), endRow = Math.max(range.start.row, range.end.row); if (startCol <= col && col <= endCol && startRow <= row && row <= endRow || endCol <= col && col <= startCol && endRow <= row && row <= startRow) return !0; } return !1; } export function adjust(range) { return { start: { col: Math.min(range.start.col, range.end.col), row: Math.min(range.start.row, range.end.row) }, end: { col: Math.max(range.start.col, range.end.col), row: Math.max(range.start.row, range.end.row) } }; } export function rangeIntersected(range, range1) { const rangeAdjust = adjust(range), range1Adjust = adjust(range1); if (Math.max(rangeAdjust.start.col, range1Adjust.start.col) <= Math.min(rangeAdjust.end.col, range1Adjust.end.col)) { if (Math.max(rangeAdjust.start.row, range1Adjust.start.row) <= Math.min(rangeAdjust.end.row, range1Adjust.end.row)) return !0; } return !1; } export function rangeContained(range, range1) { const rangeAdjust = adjust(range), range1Adjust = adjust(range1); return rangeAdjust.start.col <= range1Adjust.start.col && rangeAdjust.end.col >= range1Adjust.end.col && rangeAdjust.start.row <= range1Adjust.start.row && rangeAdjust.end.row >= range1Adjust.end.row; } export const browser = { IE: IE, Edge: Edge, Chrome: Chrome, Firefox: Firefox, Safari: Safari, heightLimit: Chrome ? 33554431 : Firefox ? 17895588 : 10737433 }; export const obj = { isObject: isObject }; export const str = { endsWith: endsWith }; export const event = { isTouchEvent: isTouchEvent }; export const style = { toBoxArray: toBoxArray }; export const emptyFn = Function.prototype; export function cellInPlaneRange(col, row, rangePosStart, rangePosEnd) { return rangePosStart.col <= col && col <= rangePosEnd.col && rangePosStart.row <= row && row <= rangePosEnd.row || rangePosEnd.col <= col && col <= rangePosStart.col && rangePosEnd.row <= row && row <= rangePosStart.row; } export function checkIntersect(rectA, rectB) { return !(rectA.x2 <= rectB.x1 || rectA.x1 >= rectB.x2 || rectA.y2 <= rectB.y1 || rectA.y1 >= rectB.y2) && !(rectA.x1 <= rectB.x1 && rectA.x2 >= rectB.x2 && rectA.y1 <= rectB.y1 && rectA.y2 >= rectB.y2 || rectB.x1 <= rectA.x1 && rectB.x2 >= rectA.x2 && rectB.y1 <= rectA.y1 && rectB.y2 >= rectA.y2); } //# sourceMappingURL=helper.js.map