| 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 = /^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\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]); |
| }; |