UNPKG

@onesy/utils

Version:
98 lines (97 loc) 4.64 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const is_1 = __importDefault(require("./is")); const isEnvironment_1 = __importDefault(require("./isEnvironment")); const try_1 = __importDefault(require("./try")); function element(value) { const object = {}; object.value = value; if ((0, is_1.default)('string', value)) object.value = window.document.querySelector(value); if (!(0, is_1.default)('element', object.value)) delete object.value; const matches = (value_ = object.value) => { const method = (0, is_1.default)('element', value_) && (value_.matches || value_['webkitMatchesSelector'] || value_['mozMatchesSelector'] || value_['oMatchesSelector'] || value_['msMatchesSelector']); if (!method) return () => false; return method.bind(value_); }; // Parent object.parent = function () { if (this.value && (0, isEnvironment_1.default)('browser') && this.value.parentNode) return this.value.parentNode; }; // Parents object.parents = function (selectors, arrayMethod = 'some') { const parents = []; let parent = this.value; while (parent && parent !== document) { parent = element(parent).parent(); if (parent && (!(selectors === null || selectors === void 0 ? void 0 : selectors.length) || selectors[arrayMethod] && selectors[arrayMethod](item => (0, try_1.default)(() => matches(parent)(item))))) parents.push(parent); } return parents; }; // Nearest object.nearest = function (selectors, arrayMethod = 'some') { // Value matches // return itself in that use case if (!(selectors === null || selectors === void 0 ? void 0 : selectors.length) || selectors[arrayMethod] && selectors[arrayMethod](item => (0, try_1.default)(() => matches(this.value)(item)))) return this.value; let parent = this.value; while (parent && parent !== document) { parent = element(parent).parent(); if (parent && (!(selectors === null || selectors === void 0 ? void 0 : selectors.length) || selectors[arrayMethod] && selectors[arrayMethod](item => (0, try_1.default)(() => matches(parent)(item))))) return parent; } }; // Furthest object.furthest = function (selectors, arrayMethod = 'some') { const parents = this.parents(selectors, arrayMethod); return parents[parents.length - 1]; }; // hasParent object.hasParent = function (selectors, grandparents = true, arrayMethod = 'some') { let parent = this.value; if (!grandparents) return (!(selectors === null || selectors === void 0 ? void 0 : selectors.length) || selectors[arrayMethod] && selectors[arrayMethod](item => (0, try_1.default)(() => matches(this.parent())(item)))); while (parent && parent !== document) { parent = element(parent).parent(); if (parent && (!(selectors === null || selectors === void 0 ? void 0 : selectors.length) || selectors[arrayMethod] && selectors[arrayMethod](item => (0, try_1.default)(() => matches(parent)(item))))) return true; } return false; }; // hasParents // If unique is true, sort selectors argument by most specifc first // and lowest specificty last for the most proper result object.hasParents = function (selectors, unique = true, arrayMethod = 'some') { if (!(selectors === null || selectors === void 0 ? void 0 : selectors.length)) return !!this.parent(); const parents = this.parents(); return !!(this.value && ((selectors === null || selectors === void 0 ? void 0 : selectors.length) && (selectors[arrayMethod] && selectors[arrayMethod](selector => { const index = parents.findIndex((item) => (0, is_1.default)('string', selector) ? (0, try_1.default)(() => matches(item)(selector)) : item === selector); if (index > -1) { if (unique) parents.splice(index, 1); return true; } return false; })))); }; return object; } exports.default = element;