UNPKG

4.91 kBJavaScriptView Raw
1'use strict';
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6exports.toArray = toArray;
7exports.getActiveIndex = getActiveIndex;
8exports.getActiveKey = getActiveKey;
9exports.setTransform = setTransform;
10exports.isTransformSupported = isTransformSupported;
11exports.setTransition = setTransition;
12exports.getTransformPropValue = getTransformPropValue;
13exports.isVertical = isVertical;
14exports.getTransformByIndex = getTransformByIndex;
15exports.getMarginStyle = getMarginStyle;
16exports.getStyle = getStyle;
17exports.setPxStyle = setPxStyle;
18exports.getLeft = getLeft;
19exports.getTop = getTop;
20exports.getDataAttr = getDataAttr;
21
22var _react = require('react');
23
24var _react2 = _interopRequireDefault(_react);
25
26function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
27
28function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } /**
29 * This source code is quoted from rc-tabs.
30 * homepage: https://github.com/react-component/tabs
31 */
32
33
34function toArray(children) {
35 // allow [c,[a,b]]
36 var c = [];
37 _react2["default"].Children.forEach(children, function (child) {
38 if (child) {
39 c.push(child);
40 }
41 });
42 return c;
43}
44
45function getActiveIndex(children, activeKey) {
46 var c = toArray(children);
47 for (var i = 0; i < c.length; i++) {
48 if (c[i].key === activeKey) {
49 return i;
50 }
51 }
52 return -1;
53}
54
55function getActiveKey(children, index) {
56 var c = toArray(children);
57 return c[index].key;
58}
59
60function setTransform(style, v) {
61 style.transform = v;
62 style.webkitTransform = v;
63 style.mozTransform = v;
64}
65
66function isTransformSupported(style) {
67 return 'transform' in style || 'webkitTransform' in style || 'MozTransform' in style;
68}
69
70function setTransition(style, v) {
71 style.transition = v;
72 style.webkitTransition = v;
73 style.MozTransition = v;
74}
75function getTransformPropValue(v) {
76 return {
77 transform: v,
78 WebkitTransform: v,
79 MozTransform: v
80 };
81}
82
83function isVertical(tabBarPosition) {
84 return tabBarPosition === 'left' || tabBarPosition === 'right';
85}
86
87function getTransformByIndex(index, tabBarPosition) {
88 var translate = isVertical(tabBarPosition) ? 'translateY' : 'translateX';
89 return translate + '(' + -index * 100 + '%) translateZ(0)';
90}
91
92function getMarginStyle(index, tabBarPosition) {
93 var marginDirection = isVertical(tabBarPosition) ? 'marginTop' : 'marginLeft';
94 return _defineProperty({}, marginDirection, -index * 100 + '%');
95}
96
97function getStyle(el, property) {
98 return +getComputedStyle(el).getPropertyValue(property).replace('px', '');
99}
100
101function setPxStyle(el, property, value) {
102 el.style[property] = value + 'px';
103}
104
105function toNum(style, property) {
106 return +style.getPropertyValue(property).replace('px', '');
107}
108
109function getTypeValue(start, current, end, tabNode, wrapperNode) {
110 var total = getStyle(wrapperNode, 'padding-' + start);
111 if (!tabNode || !tabNode.parentNode) {
112 return total;
113 }
114
115 var childNodes = tabNode.parentNode.childNodes;
116
117 Array.prototype.some.call(childNodes, function (node) {
118 var style = window.getComputedStyle(node);
119
120 if (node !== tabNode) {
121 total += toNum(style, 'margin-' + start);
122 total += node[current];
123 total += toNum(style, 'margin-' + end);
124
125 if (style.boxSizing === 'content-box') {
126 total += toNum(style, 'border-' + start + '-width') + toNum(style, 'border-' + end + '-width');
127 }
128 return false;
129 }
130
131 // We need count current node margin
132 // ref: https://github.com/react-component/tabs/pull/139#issuecomment-431005262
133 total += toNum(style, 'margin-' + start);
134
135 return true;
136 });
137
138 return total;
139}
140
141function getLeft(tabNode, wrapperNode) {
142 return getTypeValue('left', 'offsetWidth', 'right', tabNode, wrapperNode);
143}
144
145function getTop(tabNode, wrapperNode) {
146 return getTypeValue('top', 'offsetHeight', 'bottom', tabNode, wrapperNode);
147}
148
149function getDataAttr(props) {
150 return Object.keys(props).reduce(function (prev, key) {
151 if (key.substr(0, 5) === 'aria-' || key.substr(0, 5) === 'data-' || key === 'role') {
152 prev[key] = props[key];
153 }
154 return prev;
155 }, {});
156}
\No newline at end of file