var parse = require('./parse'),
render = require('dom-serializer');
/**
* HTML Tags */
var tags = { tag: true, script: true, style: true };
/**
* Check if the DOM element is a tag * * isTag(type) includes <script> and <style> tags */
exports.isTag = function(type) {
if (type.type) type = type.type; return tags[type] || false;
};
/**
* Convert a string to camel case notation. * @param {String} str String to be converted. * @return {String} String in camel case notation. */
exports.camelCase = function(str) {
return str.replace(/[_.-](\w|$)/g, function(_, x) { return x.toUpperCase(); });
};
/**
* Convert a string from camel case to "CSS case", where word boundaries are * described by hyphens ("-") and all characters are lower-case. * @param {String} str String to be converted. * @return {string} String in "CSS case". */
exports.cssCase = function(str) {
return str.replace(/[A-Z]/g, '-$&').toLowerCase();
};
/**
* Iterate over each DOM element without creating intermediary Cheerio instances. * * This is indented for use internally to avoid otherwise unnecessary memory pressure introduced * by _make. */
exports.domEach = function(cheerio, fn) {
var i = 0, len = cheerio.length; while (i < len && fn.call(cheerio, i, cheerio[i]) !== false) ++i; return cheerio;
};
/**
* Create a deep copy of the given DOM structure by first rendering it to a * string and then parsing the resultant markup. * * @argument {Object} dom - The htmlparser2-compliant DOM structure * @argument {Object} options - The parsing/rendering options */
exports.cloneDom = function(dom, options) {
return parse(render(dom, options), options).children;
};
/*
* A simple way to check for HTML strings or ID strings */
var quickExpr = /^(?:[^#<]*(<[”>wW]+>)*$|#([w-]*)$)/;
/*
* Check if string is HTML */
exports.isHtml = function(str) {
// Faster than running regex, if str starts with `<` and ends with `>`, assume it's HTML if (str.charAt(0) === '<' && str.charAt(str.length - 1) === '>' && str.length >= 3) return true; // Run the regex var match = quickExpr.exec(str); return !!(match && match[1]);
};