assertions/dom.js

/**
 * @fileOverview DOM checks.
 * @module DOM
 */

const Interface = require('../interface');
const Types = require('./types');
let DOM = {};

/**
 * Check if is a valid DOM element
 *
 * **Interfaces**: `all`, `any`, `not`, `err`
 *
 * @function
 * @name domElement
 * @param element {object} element object
 * @returns {boolean}
 * @example
 * be.domElement(document.getElementById('test')) // true
 */
DOM.domElement = (element) => {
    return (
        typeof HTMLElement === 'object' ? element instanceof HTMLElement :
            element &&  typeof element === 'object' && element.nodeType === 1 && typeof element.nodeName === 'string'
    );
};

/**
 * Check if element is a specific tag
 *
 * **Interfaces**: `not`, `err`
 *
 * @function
 * @name domElementTag
 * @param element {object} element object
 * @param tag {string} tag name
 * @returns {boolean}
 * @example
 * be.domElementTag(document.getElementsByTagName('body')[0], 'ul') // false
 */
DOM.domElementTag = (element, tag) => {
    return DOM.domElement(element) &&
        Types.string(tag) && element.tagName.toLowerCase() === tag.toLowerCase();
};

DOM.domElementTag.multiple = false;

DOM = Interface.create(DOM);

module.exports = DOM;