mirror of
https://github.com/Hopiu/postal.js.git
synced 2026-03-16 22:20:23 +00:00
159 lines
3 KiB
JavaScript
159 lines
3 KiB
JavaScript
/*!
|
|
* Express - Utils
|
|
* Copyright(c) 2010 TJ Holowaychuk <tj@vision-media.ca>
|
|
* 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;
|
|
}
|
|
};
|
|
|
|
/**
|
|
* Merge object `b` with `a` giving precedence to
|
|
* values in object `a`.
|
|
*
|
|
* @param {Object} a
|
|
* @param {Object} b
|
|
* @return {Object} a
|
|
* @api private
|
|
*/
|
|
|
|
exports.union = function ( a, b ) {
|
|
if ( a && b ) {
|
|
var keys = Object.keys( b )
|
|
, len = keys.length
|
|
, key;
|
|
for ( var i = 0; i < len; ++i ) {
|
|
key = keys[i];
|
|
if ( !a.hasOwnProperty( key ) ) {
|
|
a[key] = b[key];
|
|
}
|
|
}
|
|
}
|
|
return a;
|
|
};
|
|
|
|
/**
|
|
* 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 <em>foo</em>
|
|
* __foo__ or **foo** become <strong>foo</strong>
|
|
* [A](B) becomes <a href="B">A</a>
|
|
*
|
|
* @param {String} str
|
|
* @return {String}
|
|
* @api private
|
|
*/
|
|
|
|
exports.miniMarkdown = function ( str ) {
|
|
return String( str )
|
|
.replace( /(__|\*\*)(.*?)\1/g, '<strong>$2</strong>' )
|
|
.replace( /(_|\*)(.*?)\1/g, '<em>$2</em>' )
|
|
.replace( /\[([^\]]+)\]\(([^)]+)\)/g, '<a href="$2">$1</a>' );
|
|
};
|
|
|
|
/**
|
|
* 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, '<' )
|
|
.replace( />/g, '>' );
|
|
};
|
|
|
|
/**
|
|
* Parse "Range" header `str` relative to the given file `size`.
|
|
*
|
|
* @param {Number} size
|
|
* @param {String} str
|
|
* @return {Array}
|
|
* @api private
|
|
*/
|
|
|
|
exports.parseRange = function ( size, str ) {
|
|
var valid = true;
|
|
var arr = str.substr( 6 ).split( ',' ).map( function ( range ) {
|
|
var range = range.split( '-' )
|
|
, start = parseInt( range[0], 10 )
|
|
, end = parseInt( range[1], 10 );
|
|
|
|
// -500
|
|
if ( isNaN( start ) ) {
|
|
start = size - end;
|
|
end = size - 1;
|
|
// 500-
|
|
} else if ( isNaN( end ) ) {
|
|
end = size - 1;
|
|
}
|
|
|
|
// Invalid
|
|
if ( isNaN( start ) || isNaN( end ) || start > end ) {
|
|
valid = false;
|
|
}
|
|
|
|
return { start : start, end : end };
|
|
} );
|
|
return valid ? arr : undefined;
|
|
};
|
|
|
|
/**
|
|
* Fast alternative to `Array.prototype.slice.call()`.
|
|
*
|
|
* @param {Arguments} args
|
|
* @param {Number} n
|
|
* @return {Array}
|
|
* @api public
|
|
*/
|
|
|
|
exports.toArray = function ( args, i ) {
|
|
var arr = []
|
|
, len = args.length
|
|
, i = i || 0;
|
|
for ( ; i < len; ++i ) {
|
|
arr.push( args[i] );
|
|
}
|
|
return arr;
|
|
};
|