-
-
Notifications
You must be signed in to change notification settings - Fork 7
Expand file tree
/
Copy pathindex.js
More file actions
69 lines (56 loc) · 1.44 KB
/
Copy pathindex.js
File metadata and controls
69 lines (56 loc) · 1.44 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
/*!
* handlebars-helper-repeat <https://github.com/helpers/handlebars-helper-repeat>
*
* Copyright (c) 2014-2018, Jon Schlinkert.
* Released under the MIT License.
*/
'use strict';
var isNumber = require('is-number');
module.exports = function() {
var args = arguments;
if (args.length > 2) {
throw new Error(`Expected 0, 1 or 2 arguments, but got ${args.length}`);
}
var options = args[args.length - 1];
var hash = options.hash || {};
var count = hash.count || args[0] || 0;
var start = hash.start || 0;
var step = hash.step || 1;
var data = { count, start, step };
if (typeof args[0] === 'string' && !isNumber(args[0]) && args[0] !== '') {
return repeat(data, args[0]);
}
if (data.count > 0) {
return repeatBlock(data, this, options);
}
return options.inverse(this);
};
function repeat({ count, start, step }, thisArg) {
var max = count * step + start;
var index = start;
var str = '';
while (index < max) {
str += thisArg;
index += step;
}
return str;
}
function repeatBlock({ count, start, step }, thisArg, options) {
var max = count * step + start;
var index = start;
var str = '';
do {
var data = {
index,
count,
start,
step,
first: index === start,
last: index >= max - step
};
var blockParams = [index, data];
str += options.fn(thisArg, { data, blockParams });
index += data.step;
} while (index < max);
return str;
}