var config = require('../config') /** * Check if a node is in the document. * * @param {Node} node * @return {Boolean} */ var doc = typeof document !== 'undefined' && document.documentElement exports.inDoc = function (node) { return doc && doc.contains(node) } /** * Extract an attribute from a node. * * @param {Node} node * @param {String} attr */ exports.attr = function (node, attr) { attr = config.prefix + attr var val = node.getAttribute(attr) if (val !== null) { node.removeAttribute(attr) } return val } /** * Insert el before target * * @param {Element} el * @param {Element} target */ exports.before = function (el, target) { target.parentNode.insertBefore(el, target) } /** * Insert el after target * * @param {Element} el * @param {Element} target */ exports.after = function (el, target) { if (target.nextSibling) { exports.before(el, target.nextSibling) } else { target.parentNode.appendChild(el) } } /** * Remove el from DOM * * @param {Element} el */ exports.remove = function (el) { el.parentNode.removeChild(el) } /** * Prepend el to target * * @param {Element} el * @param {Element} target */ exports.prepend = function (el, target) { if (target.firstChild) { exports.before(el, target.firstChild) } else { target.appendChild(el) } } /** * Replace target with el * * @param {Element} target * @param {Element} el */ exports.replace = function (target, el) { var parent = target.parentNode parent.insertBefore(el, target) parent.removeChild(target) } /** * Copy attributes from one element to another. * * @param {Element} from * @param {Element} to */ exports.copyAttributes = function (from, to) { if (from.hasAttributes()) { var attrs = from.attributes for (var i = 0, l = attrs.length; i < l; i++) { var attr = attrs[i] to.setAttribute(attr.name, attr.value) } } } /** * Add event listener shorthand. * * @param {Element} el * @param {String} event * @param {Function} cb */ exports.on = function (el, event, cb) { el.addEventListener(event, cb) } /** * Remove event listener shorthand. * * @param {Element} el * @param {String} event * @param {Function} cb */ exports.off = function (el, event, cb) { el.removeEventListener(event, cb) }