-
Notifications
You must be signed in to change notification settings - Fork 7
/
index.js
122 lines (102 loc) · 2.53 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
'use strict';
var React = require('react');
var createClass = require('create-react-class');
var baron = require('baron');
var defaultBaronParams = {
barOnCls: 'baron',
direction: 'v'
};
var Baron = createClass({
displayName: 'Baron',
baronParams: {},
componentDidMount: function() {
this.baronParams = {
root: this.clipper,
scroller: this.scroller,
track: this.track,
bar: this.bar
};
for (var key in this.props.params) {
// You cant pass dom nodes params, defined above as refs
if (!this.baronParams[key]) {
this.baronParams[key] = this.props.params[key]
}
}
for (var key2 in defaultBaronParams) {
if (!this.baronParams.hasOwnProperty(key2)) {
this.baronParams[key2] = defaultBaronParams[key]
}
}
this.baron = baron(this.baronParams);
},
componentDidUpdate: function() {
this.baron.update();
},
componentWillUnmount: function() {
this.baron.dispose();
},
render: function render() {
var barCls = this.props.barCls;
var trackCls = this.props.trackCls;
var that = this
if (this.props.params && this.props.params.direction === 'h') {
barCls += ' ' + this.props.hModifier;
trackCls += ' ' + this.props.hModifier;
}
return React.createElement(
'div',
{
className: this.props.clipperCls,
ref: function(r) {
that.clipper = r;
}
},
React.createElement(
'div',
{
className: this.props.scrollerCls,
ref: function(r) {
that.scroller = r;
},
onScroll: this.props.onScroll
},
this.props.children
),
React.createElement(
'div',
{
className: trackCls,
ref: function(r) {
that.track = r;
}
},
React.createElement('div', {
className: barCls,
ref: function(r) {
that.bar = r;
}
})
)
);
},
// External API
scrollToLast: function() {
var scroll = this.baronParams.direction === 'v' ? 'scrollTop' : 'scrollLeft';
var size = this.baronParams.direction === 'v' ? 'scrollHeight' : 'scrollWidth';
this.scroller[scroll] = this.scroller[size];
},
getScroller: function() {
return this.scroller;
},
getClipper: function() {
return this.clipper;
}
});
Baron.defaultProps = {
clipperCls: 'clipper',
scrollerCls: 'scroller',
trackCls: 'track',
barCls: 'bar',
hModifier: '_h'
};
module.exports = Baron;