| |
| /*! |
| * EJS - Filters |
| * Copyright(c) 2010 TJ Holowaychuk <tj@vision-media.ca> |
| * MIT Licensed |
| */ |
| |
| /** |
| * First element of the target `obj`. |
| */ |
| |
| exports.first = function(obj) { |
| return obj[0]; |
| }; |
| |
| /** |
| * Last element of the target `obj`. |
| */ |
| |
| exports.last = function(obj) { |
| return obj[obj.length - 1]; |
| }; |
| |
| /** |
| * Capitalize the first letter of the target `str`. |
| */ |
| |
| exports.capitalize = function(str){ |
| str = String(str); |
| return str[0].toUpperCase() + str.substr(1, str.length); |
| }; |
| |
| /** |
| * Downcase the target `str`. |
| */ |
| |
| exports.downcase = function(str){ |
| return String(str).toLowerCase(); |
| }; |
| |
| /** |
| * Uppercase the target `str`. |
| */ |
| |
| exports.upcase = function(str){ |
| return String(str).toUpperCase(); |
| }; |
| |
| /** |
| * Sort the target `obj`. |
| */ |
| |
| exports.sort = function(obj){ |
| return Object.create(obj).sort(); |
| }; |
| |
| /** |
| * Sort the target `obj` by the given `prop` ascending. |
| */ |
| |
| exports.sort_by = function(obj, prop){ |
| return Object.create(obj).sort(function(a, b){ |
| a = a[prop], b = b[prop]; |
| if (a > b) return 1; |
| if (a < b) return -1; |
| return 0; |
| }); |
| }; |
| |
| /** |
| * Size or length of the target `obj`. |
| */ |
| |
| exports.size = exports.length = function(obj) { |
| return obj.length; |
| }; |
| |
| /** |
| * Add `a` and `b`. |
| */ |
| |
| exports.plus = function(a, b){ |
| return Number(a) + Number(b); |
| }; |
| |
| /** |
| * Subtract `b` from `a`. |
| */ |
| |
| exports.minus = function(a, b){ |
| return Number(a) - Number(b); |
| }; |
| |
| /** |
| * Multiply `a` by `b`. |
| */ |
| |
| exports.times = function(a, b){ |
| return Number(a) * Number(b); |
| }; |
| |
| /** |
| * Divide `a` by `b`. |
| */ |
| |
| exports.divided_by = function(a, b){ |
| return Number(a) / Number(b); |
| }; |
| |
| /** |
| * Join `obj` with the given `str`. |
| */ |
| |
| exports.join = function(obj, str){ |
| return obj.join(str || ', '); |
| }; |
| |
| /** |
| * Truncate `str` to `len`. |
| */ |
| |
| exports.truncate = function(str, len){ |
| str = String(str); |
| return str.substr(0, len); |
| }; |
| |
| /** |
| * Truncate `str` to `n` words. |
| */ |
| |
| exports.truncate_words = function(str, n){ |
| var str = String(str) |
| , words = str.split(/ +/); |
| return words.slice(0, n).join(' '); |
| }; |
| |
| /** |
| * Replace `pattern` with `substitution` in `str`. |
| */ |
| |
| exports.replace = function(str, pattern, substitution){ |
| return String(str).replace(pattern, substitution || ''); |
| }; |
| |
| /** |
| * Prepend `val` to `obj`. |
| */ |
| |
| exports.prepend = function(obj, val){ |
| return Array.isArray(obj) |
| ? [val].concat(obj) |
| : val + obj; |
| }; |
| |
| /** |
| * Append `val` to `obj`. |
| */ |
| |
| exports.append = function(obj, val){ |
| return Array.isArray(obj) |
| ? obj.concat(val) |
| : obj + val; |
| }; |
| |
| /** |
| * Map the given `prop`. |
| */ |
| |
| exports.map = function(arr, prop){ |
| return arr.map(function(obj){ |
| return obj[prop]; |
| }); |
| }; |
| |
| /** |
| * Reverse the given `obj`. |
| */ |
| |
| exports.reverse = function(obj){ |
| return Array.isArray(obj) |
| ? obj.reverse() |
| : String(obj).split('').reverse().join(''); |
| }; |
| |
| /** |
| * Get `prop` of the given `obj`. |
| */ |
| |
| exports.get = function(obj, prop){ |
| return obj[prop]; |
| }; |
| |
| /** |
| * Packs the given `obj` into json string |
| */ |
| exports.json = function(obj){ |
| return JSON.stringify(obj); |
| }; |