vtils
Version:
一个面向业务的 JavaScript/TypeScript 实用程序库。
94 lines (81 loc) • 3.64 kB
JavaScript
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
exports.__esModule = true;
exports.selectElement = selectElement;
exports.selectElementAll = selectElementAll;
exports.selectElementExists = selectElementExists;
exports.selectElementLast = selectElementLast;
var _createForOfIteratorHelperLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/createForOfIteratorHelperLoose"));
var _lodashUni = require("lodash-uni");
// https://github.com/fregante/select-dom/blob/master/index.ts
// WARNING: Overloads have to repeated in that fashion because the actual function’s signature is discarded; Only the 2 overloads are brought into the .d.ts file. Tests pass because `tsd` reads from this file instead of `.d.ts`
// ParentNode is inherited by Element, Document, DocumentFragment
// Type predicate for TypeScript
function isQueryable(object) {
return typeof object.querySelectorAll === 'function';
}
/**
* @param selectors One or more CSS selectors separated by commas
* @param [baseElement] The element to look inside of
* @return The element found, if any
*/
function selectElement(selectors, baseElement) {
var _querySelector;
// Shortcut with specified-but-null baseElement
if (arguments.length === 2 && !baseElement) {
return;
}
return (_querySelector = (baseElement != null ? baseElement : document).querySelector(String(selectors))) != null ? _querySelector : undefined;
}
/**
* @param selectors One or more CSS selectors separated by commas
* @param [baseElement] The element to look inside of
* @return The element found, if any
*/
function selectElementLast(selectors, baseElement) {
// Shortcut with specified-but-null baseElement
if (arguments.length === 2 && !baseElement) {
return undefined;
}
// @ts-ignore
var all = (baseElement != null ? baseElement : document).querySelectorAll(String(selectors));
return all[all.length - 1];
}
/**
* @param selectors One or more CSS selectors separated by commas
* @param [baseElement] The element to look inside of
* @return Whether it's been found
*/
function selectElementExists(selectors, baseElement) {
// Shortcut with specified-but-null baseElement
if (arguments.length === 2 && !baseElement) {
return false;
}
return Boolean((baseElement != null ? baseElement : document).querySelector(String(selectors)));
}
/**
* @param selectors One or more CSS selectors separated by commas
* @param [baseElements] The element or list of elements to look inside of
* @return An array of elements found
*/
function selectElementAll(selectors, baseElements) {
// Shortcut with specified-but-null baseElements
if (arguments.length === 2 && !baseElements) {
return [];
}
// Can be: select.all('selectors') or select.all('selectors', singleElementOrDocument)
if (!baseElements || isQueryable(baseElements)) {
// @ts-ignore
var elements = (baseElements != null ? baseElements : document).querySelectorAll(String(selectors));
return (0, _lodashUni.toArray)(elements);
}
var queried = [];
for (var _iterator = (0, _createForOfIteratorHelperLoose2.default)(baseElements), _step; !(_step = _iterator()).done;) {
var _baseElement = _step.value;
for (var _iterator2 = (0, _createForOfIteratorHelperLoose2.default)((0, _lodashUni.toArray)(_baseElement.querySelectorAll(String(selectors)))), _step2; !(_step2 = _iterator2()).done;) {
var element = _step2.value;
queried.push(element);
}
}
return (0, _lodashUni.uniq)(queried);
}
;