shineout
Version:
A components library for React
241 lines (240 loc) • 8.63 kB
JavaScript
;
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();
};
};