/*! * Express - utils * Copyright(c) 2010 TJ Holowaychuk * MIT Licensed */ /** * Check if `path` looks absolute. * * @param {String} path * @return {Boolean} * @api private */ exports.isAbsolute = function(path){ if ('/' == path[0]) return true; if (':' == path[1] && '\\' == path[2]) return true; }; /** * Flatten the given `arr`. * * @param {Array} arr * @return {Array} * @api private */ exports.flatten = function(arr, ret){ var ret = ret || [] , len = arr.length; for (var i = 0; i < len; ++i) { if (Array.isArray(arr[i])) { exports.flatten(arr[i], ret); } else { ret.push(arr[i]); } } return ret; }; /** * Parse mini markdown implementation. * The following conversions are supported, * primarily for the "flash" middleware: * * _foo_ or *foo* become foo * __foo__ or **foo** become foo * [A](B) becomes A * * @param {String} str * @return {String} * @api private */ exports.miniMarkdown = function(str){ return String(str) .replace(/(__|\*\*)(.*?)\1/g, '$2') .replace(/(_|\*)(.*?)\1/g, '$2') .replace(/\[([^\]]+)\]\(([^)]+)\)/g, '$1'); }; /** * Parse accept `str`, returning * an array objects containing * `.type` and `.subtype` along * with the values provided by * `parseQuality()`. * * @param {Type} name * @return {Type} * @api public */ exports.parseAccept = function(str){ return exports .parseQuality(str) .map(function(obj){ var parts = obj.value.split('/'); obj.type = parts[0]; obj.subtype = parts[1]; return obj; }); }; /** * Parse quality `str`, returning an * array of objects with `.value` and * `.quality`. * * @param {Type} name * @return {Type} * @api public */ exports.parseQuality = function(str){ return str .split(/ *, */) .map(quality) .sort(function(a, b){ return b.quality - a.quality; }); }; /** * Parse quality `str` returning an * object with `.value` and `.quality`. * * @param {String} str * @return {Object} * @api private */ function quality(str) { var parts = str.split(/ *; */) , val = parts[0]; var q = parts[1] ? parseFloat(parts[1].split(/ *= */)[1]) : 1; return { value: val, quality: q }; } /** * Escape special characters in the given string of html. * * @param {String} html * @return {String} * @api private */ exports.escape = function(html) { return String(html) .replace(/&/g, '&') .replace(/"/g, '"') .replace(//g, '>'); };