Skip to content

Commit

Permalink
Merge pull request #570 from metrico/view-as-submodule
Browse files Browse the repository at this point in the history
Drop handlebars-helpers dependency
  • Loading branch information
akvlad authored Sep 5, 2024
2 parents 58d9bd1 + 40d071e commit 130b1e7
Show file tree
Hide file tree
Showing 9 changed files with 1,212 additions and 2,021 deletions.
57 changes: 57 additions & 0 deletions lib/handlebars-helpers/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
/*!
* handlebars-helpers <https://github.com/helpers/handlebars-helpers>
*
* Copyright (c) 2013-2017, Jon Schlinkert, Brian Woodward.
* Released under the MIT License.
*/

'use strict';

var lib = {
math: require('./math'),
string: require('./string'),
}

/**
* Expose helpers
*/

module.exports = function helpers(groups, options) {
if (typeof groups === 'string') {
groups = [groups];
} else if (!Array.isArray(groups)) {
options = groups;
groups = null;
}

options = options || {};
const hbs = options.handlebars || options.hbs || require('handlebars');
module.exports.handlebars = hbs;

if (groups) {
groups.forEach(function(key) {
hbs.registerHelper(lib[key]);
});
} else {
Object.values(lib).forEach(function(group) {
hbs.registerHelper(group);
});
}

return hbs.helpers;
};

/**
* Expose helper groups
*/

Object.entries(lib).forEach(function(key_group) {
const [key, group] = key_group;
module.exports[key] = function(options) {
options = options || {};
let hbs = options.handlebars || options.hbs || require('handlebars');
module.exports.handlebars = hbs;
hbs.registerHelper(group);
return hbs.helpers;
};
});
288 changes: 288 additions & 0 deletions lib/handlebars-helpers/math.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,288 @@
'use strict';

var isNumber = require('is-number');
var utils = require('./utils');
var helpers = module.exports;

/**
* Return the magnitude of `a`.
*
* @param {Number} `a`
* @return {Number}
* @api public
*/

helpers.abs = function(num) {
if (!isNumber(num)) {
throw new TypeError('expected a number');
}
return Math.abs(num);
};

/**
* Return the sum of `a` plus `b`.
*
* @param {Number} `a`
* @param {Number} `b`
* @return {Number}
* @api public
*/

helpers.add = function(a, b) {
if (isNumber(a) && isNumber(b)) {
return Number(a) + Number(b);
}
if (typeof a === 'string' && typeof b === 'string') {
return a + b;
}
return '';
};

/**
* Returns the average of all numbers in the given array.
*
* ```handlebars
* {{avg "[1, 2, 3, 4, 5]"}}
* <!-- results in: '3' -->
* ```
*
* @param {Array} `array` Array of numbers to add up.
* @return {Number}
* @api public
*/

helpers.avg = function() {
var args = [].concat.apply([], arguments);
// remove handlebars options object
args.pop();
return helpers.sum(args) / args.length;
};

/**
* Get the `Math.ceil()` of the given value.
*
* @param {Number} `value`
* @return {Number}
* @api public
*/

helpers.ceil = function(num) {
if (!isNumber(num)) {
throw new TypeError('expected a number');
}
return Math.ceil(num);
};

/**
* Divide `a` by `b`
*
* @param {Number} `a` numerator
* @param {Number} `b` denominator
* @api public
*/

helpers.divide = function(a, b) {
if (!isNumber(a)) {
throw new TypeError('expected the first argument to be a number');
}
if (!isNumber(b)) {
throw new TypeError('expected the second argument to be a number');
}
return Number(a) / Number(b);
};

/**
* Get the `Math.floor()` of the given value.
*
* @param {Number} `value`
* @return {Number}
* @api public
*/

helpers.floor = function(num) {
if (!isNumber(num)) {
throw new TypeError('expected a number');
}
return Math.floor(num);
};

/**
* Return the difference of `a` minus `b`.
*
* @param {Number} `a`
* @param {Number} `b`
* @alias subtract
* @api public
*/

helpers.minus = function(a, b) {
if (!isNumber(a)) {
throw new TypeError('expected the first argument to be a number');
}
if (!isNumber(b)) {
throw new TypeError('expected the second argument to be a number');
}
return Number(a) - Number(b);
};

/**
* Get the remainder of a division operation.
*
* @param {Number} `a`
* @param {Number} `b`
* @return {Number}
* @api public
*/

helpers.modulo = function(a, b) {
if (!isNumber(a)) {
throw new TypeError('expected the first argument to be a number');
}
if (!isNumber(b)) {
throw new TypeError('expected the second argument to be a number');
}
return Number(a) % Number(b);
};

/**
* Return the product of `a` times `b`.
*
* @param {Number} `a` factor
* @param {Number} `b` multiplier
* @return {Number}
* @alias times
* @api public
*/

helpers.multiply = function(a, b) {
if (!isNumber(a)) {
throw new TypeError('expected the first argument to be a number');
}
if (!isNumber(b)) {
throw new TypeError('expected the second argument to be a number');
}
return Number(a) * Number(b);
};

/**
* Add `a` by `b`.
*
* @param {Number} `a` factor
* @param {Number} `b` multiplier
* @api public
*/

helpers.plus = function(a, b) {
if (!isNumber(a)) {
throw new TypeError('expected the first argument to be a number');
}
if (!isNumber(b)) {
throw new TypeError('expected the second argument to be a number');
}
return Number(a) + Number(b);
};

/**
* Generate a random number between two values
*
* @param {Number} `min`
* @param {Number} `max`
* @return {String}
* @api public
*/

helpers.random = function(min, max) {
if (!isNumber(min)) {
throw new TypeError('expected minimum to be a number');
}
if (!isNumber(max)) {
throw new TypeError('expected maximum to be a number');
}
return utils.random(min, max);
};

/**
* Get the remainder when `a` is divided by `b`.
*
* @param {Number} `a` a
* @param {Number} `b` b
* @api public
*/

helpers.remainder = function(a, b) {
return a % b;
};

/**
* Round the given number.
*
* @param {Number} `number`
* @return {Number}
* @api public
*/

helpers.round = function(num) {
if (!isNumber(num)) {
throw new TypeError('expected a number');
}
return Math.round(num);
};

/**
* Return the product of `a` minus `b`.
*
* @param {Number} `a`
* @param {Number} `b`
* @return {Number}
* @alias minus
* @api public
*/

helpers.subtract = function(a, b) {
if (!isNumber(a)) {
throw new TypeError('expected the first argument to be a number');
}
if (!isNumber(b)) {
throw new TypeError('expected the second argument to be a number');
}
return Number(a) - Number(b);
};

/**
* Returns the sum of all numbers in the given array.
*
* ```handlebars
* {{sum "[1, 2, 3, 4, 5]"}}
* <!-- results in: '15' -->
* ```
* @param {Array} `array` Array of numbers to add up.
* @return {Number}
* @api public
*/

helpers.sum = function() {
var args = [].concat.apply([], arguments);
var len = args.length;
var sum = 0;

while (len--) {
if (utils.isNumber(args[len])) {
sum += Number(args[len]);
}
}
return sum;
};

/**
* Multiply number `a` by number `b`.
*
* @param {Number} `a` factor
* @param {Number} `b` multiplier
* @return {Number}
* @alias multiply
* @api public
*/

helpers.times = function() {
return helpers.multiply.apply(this, arguments);
};
Loading

0 comments on commit 130b1e7

Please sign in to comment.