-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.js
133 lines (118 loc) · 3.15 KB
/
index.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
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
;(function (global, factory) {
if (typeof module !== 'undefined' && module && module.exports) {
module.exports = factory()
} else if (typeof define === 'function' && define.amd) {
define(factory)
} else {
global.FlexUtil = factory()
}
})(this, function () {
var exports = {}
var env = this.process && this.process.env && this.process.env.NODE_ENV
/**
* converts array to object
* @param {Array} arr
* @return {Object}
*/
function arrToObj(arr) {
return arr.reduce(function (memo, item) {
memo[item.key] = item.value
return memo
}, {})
}
/**
* flexGrow: when items width sum < container value
* @param {Number} containerValue
* @param {Array} data
* - key
* - value
* - flexGrow
* @return {Object|Null} { key: valFlexed }
*/
function flexGrow(containerValue, data) {
var valueLess
var valueSum = 0
var growSum = 0
var obj
var iZeroProp = 0
for (var i = 0, ii = data.length; i < ii; i++) {
obj = data[i]
valueSum += obj.value
growSum += obj.flexGrow
if (!obj.flexGrow) iZeroProp++
}
if (iZeroProp >= data.length) {
if (env !== 'production') {
console.warn('[Flex.Util.flexGrow]: all values of flexGrow got 0')
}
return arrToObj(data)
}
valueLess = containerValue - valueSum
if (valueLess < 0) {
if (env !== 'production') {
console.warn('[Flex.Util.flexGrow]: items width sum is bigger than container value')
}
return null
}
var ret = {}
var key
var percent
var widthGrow
for (var i = 0, ii = data.length; i < ii; i++) {
obj = data[i]
percent = obj.flexGrow / growSum
widthGrow = valueLess * percent
ret[obj.key] = obj.value + widthGrow
}
return ret
}
exports.flexGrow = flexGrow
/**
* flexShrink: when items width sum > container value
* @param {Number} containerValue
* @param {Array} data
* - key
* - value
* - flexShrink
* @return {Object|Null} { key: valFlexed }
*/
function flexShrink(containerValue, data) {
var valueMore
var valueSum = 0
var valueShrinkSum = 0
var obj
var iZeroProp = 0
for (var i = 0, ii = data.length; i < ii; i++) {
obj = data[i]
valueSum += obj.value
valueShrinkSum += (obj.value * obj.flexShrink)
if (!obj.flexShrink) iZeroProp++
}
if (iZeroProp >= data.length) {
if (env !== 'production') {
console.warn('[Flex.Util.flexShrink]: all values of flexShrink got 0')
}
return arrToObj(data)
}
valueMore = valueSum - containerValue
if (valueMore < 0) {
if (env !== 'production') {
console.warn('[Flex.Util.flexShrink]: items width sum is smaller than container value')
}
return null
}
var ret = {}
var key
var percent
var widthShrink
for (var i = 0, ii = data.length; i < ii; i++) {
obj = data[i]
percent = (obj.flexShrink * obj.value) / valueShrinkSum
widthShrink = valueMore * percent
ret[obj.key] = obj.value - widthShrink
}
return ret
}
exports.flexShrink = flexShrink
return exports
});