forked from ben-ng/ribcage-quantity-picker
-
Notifications
You must be signed in to change notification settings - Fork 0
/
quantityPicker.js
96 lines (76 loc) · 2.12 KB
/
quantityPicker.js
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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
var Picker = require('ribcage-picker')
, convert = require('convert-units')
, each = require('lodash.foreach')
, vulgarities = require('vulgarities')
, fracCharFor = require('vulgarities/charFor')
, ratio = require('ratio')
, QuantityPicker
, createQuantities
, createDivisions
, createUnits;
QuantityPicker = function (opts) {
opts = opts || {};
var slots = {}
, picker
, range = opts.range || {low: 0, high: 1000}
, measure = opts.measure || convert().measures().pop()
, quantities
, units
, splitDefaultQuantity
, parsedDivision
, defaultQuantity = 1
, defaultDivision = '--';
if(opts.defaultQuantity) {
splitDefaultQuantity = ('' + opts.defaultQuantity).split('.');
defaultQuantity = parseInt(splitDefaultQuantity[0], 10);
if(splitDefaultQuantity.length > 1) {
parsedDivision = parseInt(splitDefaultQuantity[1], 10);
defaultDivision = ratio(parsedDivision / (10 * splitDefaultQuantity[1].length)).toString();
}
}
slots.quantity = {
values: createQuantities(range.low, range.high)
, defaultKey: defaultQuantity
};
slots.division = {
values: createDivisions()
, defaultKey: defaultDivision != '--' ? fracCharFor.apply(this, defaultDivision.split('/')) : '--'
};
slots.unit = {
values: createUnits(measure)
, defaultKey: opts.defaultUnit
};
picker = new Picker({
slots: slots
, offsetParent: opts.offsetParent
});
return picker;
};
createQuantities = function (low, high) {
var quantities = {};
if(high < low)
throw new Error('Cannot create quantities when `high` is lower than `low`');
for(; low != high; ++low) {
quantities[low] = low;
}
return quantities;
};
createDivisions = function () {
var divisions = {
'--': 0
};
each(vulgarities, function (code, key) {
var frac = key.split('/');
divisions[code] = frac[0]/frac[1];
});
return divisions;
};
createUnits = function (measure) {
var measures = {}
, units = convert().possibilities(measure);
each(units, function (unit) {
measures[unit] = unit;
});
return measures;
};
module.exports = QuantityPicker;