UNPKG

shineout

Version:
241 lines (240 loc) 8.63 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.addResizeObserver = void 0; exports.copyBoundingClientRect = copyBoundingClientRect; exports.cssSupport = cssSupport; exports.dispatchEvent = dispatchEvent; exports.focusElement = void 0; exports.getCursorOffset = getCursorOffset; exports.getParent = getParent; exports.preventPasteFile = exports.parsePxToNumber = void 0; exports.wrapSpan = wrapSpan; var _react = _interopRequireDefault(require("react")); var _func = require("../func"); var _jsxRuntime = require("react/jsx-runtime"); var _this = void 0; function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; } function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } } function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } if (typeof window !== "undefined") { if (window.Element && !window.Element.prototype.matches) { var proto = Element.prototype; proto.matches = proto.matchesSelector || proto.mozMatchesSelector || proto.msMatchesSelector || proto.oMatchesSelector || proto.webkitMatchesSelector; } } function getParent(el, target) { if (!target) { return null; } var temp = el; while (temp) { if (typeof target === 'string') { if (temp.matches && temp.matches(target)) { return temp; } } else if (temp === target) { return temp; } temp = temp.parentElement; } return null; } var isTwoCNChar = function isTwoCNChar(str) { return /^[\u4e00-\u9fa5]{2}$/.test(str); }; var SPACE = ' '; function wrapSpan(children) { var insertSpace = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; if (!children) return children; return _react.default.Children.map(children, function (item) { if (typeof item === 'string') { if (insertSpace && isTwoCNChar(item)) return /*#__PURE__*/(0, _jsxRuntime.jsx)("span", { children: item.split('').join(SPACE) }); return /*#__PURE__*/(0, _jsxRuntime.jsx)("span", { children: item }); } return item; }); } function dispatchEvent(form, name, detail) { if (!form) return; var event; if (CustomEvent) { event = new CustomEvent(name, { bubbles: false, cancelable: true, detail: detail }); } else { event = document.createEvent('HTMLEvents'); event.initEvent(name, true, true); } form.dispatchEvent(event); } function cssSupport(attr, value) { var element = document.createElement('div'); if (attr in element.style) { if (attr !== 'length' && attr !== 'parentRule') { var attrs = element.style[attr]; element.style[attr] = value; } return element.style[attr] === value; } return false; } function copyBoundingClientRect(el) { if (!el) return null; var rect = el.getBoundingClientRect(); return { top: rect.top, right: rect.right, bottom: rect.bottom, left: rect.left, width: rect.width, height: rect.height, x: rect.x, y: rect.y }; } function getCursorOffset(length) { if (window.getSelection) { return window.getSelection().anchorOffset; } if (document.selection) { var range = document.selection.createRange(); range.moveStart('character', -length); return range.text.length; } return null; } function end(element) { if (!element) return; element.focus(); if (element.tagName === 'INPUT' || element.tagName === 'TEXTAREA') { element.selectionStart = -1; return; } if (window.getSelection) { var range = window.getSelection(); if (range) { range.selectAllChildren(element); range.collapseToEnd(); } } else if (document.selection) { var _range = document.selection.createRange(); _range.moveToElementText(element); _range.collapse(false); _range.select(); } } function select(element) { if (element && element.innerText && element.innerText.length === 0) { element.focus(); return; } if (window.getSelection && document.createRange) { if (element) element.focus(); var range = document.createRange(); if (element) range.selectNodeContents(element); var sel = window.getSelection(); if (sel) { sel.removeAllRanges(); sel.addRange(range); } } else if (document.selection) { var _range2 = document.selection.createRange(); _range2.moveToElementText(element); _range2.select(); } } var focusElement = exports.focusElement = { select: select, end: end, wrapSpan: wrapSpan, copyBoundingClientRect: copyBoundingClientRect }; var preventPasteFile = exports.preventPasteFile = function preventPasteFile(e, beforeHandler) { var _ref = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}, _ref$noLineBreak = _ref.noLineBreak, noLineBreak = _ref$noLineBreak === void 0 ? true : _ref$noLineBreak, _ref$convertBr = _ref.convertBr, convertBr = _ref$convertBr === void 0 ? ' ' : _ref$convertBr; var text = (e.clipboardData || window.clipboardData).getData('text/plain'); // 删除复制的换行符号 if (noLineBreak && text) { if (typeof convertBr === 'function') { text = convertBr(text).replace(/([\t\n\f\r\v])+/g, ' '); } else { text = text.replace(/([\t\n\f\r\v])+/g, convertBr); } } e.preventDefault(); if (beforeHandler) { beforeHandler(text); } document.execCommand('insertText', false, text); }; var parsePxToNumber = exports.parsePxToNumber = function parsePxToNumber(str) { return Number(str.replace(/\s+|px/gi, '')); }; var addResizeObserver = exports.addResizeObserver = function addResizeObserver(el, handler) { var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; var direction = options.direction, timer = options.timer; var _throttle = (0, _func.throttle)(handler, timer), _throttle2 = _slicedToArray(_throttle, 2), throttleHandler = _throttle2[0], cleanTimer = _throttle2[1]; var h = throttleHandler; var lastWidth; var lastHeight; if (window.ResizeObserver) { if (direction) { lastWidth = el.clientWidth; lastHeight = el.clientHeight; h = function h(entry) { var _entry$0$contentRect = entry[0].contentRect, width = _entry$0$contentRect.width, height = _entry$0$contentRect.height; if (width && direction === 'x') { if (lastWidth !== width) { throttleHandler(entry); } } else if (direction === 'y') { if (height && lastHeight !== height) { throttleHandler(entry); } } else if (width && height) { throttleHandler(entry, { x: lastWidth !== width, y: lastHeight !== height }); } lastWidth = width; lastHeight = height; }; } var observer = new ResizeObserver(h); observer.observe(el); return function () { if (observer) { observer.disconnect(); } cleanTimer(_this); observer = null; }; } window.addEventListener('resize', throttleHandler); return function () { window.removeEventListener('resize', handler); cleanTimer(); }; };