react-bootstrap
Version:
Bootstrap 3 components build with React
143 lines (109 loc) • 4.71 kB
JavaScript
'use strict';
Object.defineProperty(exports, '__esModule', {
value: true
});
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
var _react = require('react');
var _react2 = _interopRequireDefault(_react);
var _BootstrapMixin = require('./BootstrapMixin');
var _BootstrapMixin2 = _interopRequireDefault(_BootstrapMixin);
var _CollapsibleMixin = require('./CollapsibleMixin');
var _CollapsibleMixin2 = _interopRequireDefault(_CollapsibleMixin);
var _classnames = require('classnames');
var _classnames2 = _interopRequireDefault(_classnames);
var _utilsDomUtils = require('./utils/domUtils');
var _utilsDomUtils2 = _interopRequireDefault(_utilsDomUtils);
var _utilsValidComponentChildren = require('./utils/ValidComponentChildren');
var _utilsValidComponentChildren2 = _interopRequireDefault(_utilsValidComponentChildren);
var _utilsCreateChainedFunction = require('./utils/createChainedFunction');
var _utilsCreateChainedFunction2 = _interopRequireDefault(_utilsCreateChainedFunction);
var Nav = _react2['default'].createClass({
displayName: 'Nav',
mixins: [_BootstrapMixin2['default'], _CollapsibleMixin2['default']],
propTypes: {
activeHref: _react2['default'].PropTypes.string,
activeKey: _react2['default'].PropTypes.any,
bsStyle: _react2['default'].PropTypes.oneOf(['tabs', 'pills']),
stacked: _react2['default'].PropTypes.bool,
justified: _react2['default'].PropTypes.bool,
onSelect: _react2['default'].PropTypes.func,
collapsible: _react2['default'].PropTypes.bool,
expanded: _react2['default'].PropTypes.bool,
navbar: _react2['default'].PropTypes.bool,
eventKey: _react2['default'].PropTypes.any,
pullRight: _react2['default'].PropTypes.bool,
right: _react2['default'].PropTypes.bool
},
getDefaultProps: function getDefaultProps() {
return {
bsClass: 'nav'
};
},
getCollapsibleDOMNode: function getCollapsibleDOMNode() {
return _react2['default'].findDOMNode(this);
},
getCollapsibleDimensionValue: function getCollapsibleDimensionValue() {
var node = _react2['default'].findDOMNode(this.refs.ul);
var height = node.offsetHeight;
var computedStyles = _utilsDomUtils2['default'].getComputedStyles(node);
return height + parseInt(computedStyles.marginTop, 10) + parseInt(computedStyles.marginBottom, 10);
},
render: function render() {
var classes = this.props.collapsible ? this.getCollapsibleClassSet('navbar-collapse') : null;
if (this.props.navbar && !this.props.collapsible) {
return this.renderUl();
}
return _react2['default'].createElement(
'nav',
_extends({}, this.props, { className: (0, _classnames2['default'])(this.props.className, classes) }),
this.renderUl()
);
},
renderUl: function renderUl() {
var classes = this.getBsClassSet();
classes['nav-stacked'] = this.props.stacked;
classes['nav-justified'] = this.props.justified;
classes['navbar-nav'] = this.props.navbar;
classes['pull-right'] = this.props.pullRight;
classes['navbar-right'] = this.props.right;
return _react2['default'].createElement(
'ul',
_extends({}, this.props, {
role: this.props.bsStyle === 'tabs' ? 'tablist' : null,
className: (0, _classnames2['default'])(this.props.className, classes),
ref: 'ul'
}),
_utilsValidComponentChildren2['default'].map(this.props.children, this.renderNavItem)
);
},
getChildActiveProp: function getChildActiveProp(child) {
if (child.props.active) {
return true;
}
if (this.props.activeKey != null) {
if (child.props.eventKey === this.props.activeKey) {
return true;
}
}
if (this.props.activeHref != null) {
if (child.props.href === this.props.activeHref) {
return true;
}
}
return child.props.active;
},
renderNavItem: function renderNavItem(child, index) {
return (0, _react.cloneElement)(child, {
role: this.props.bsStyle === 'tabs' ? 'tab' : null,
active: this.getChildActiveProp(child),
activeKey: this.props.activeKey,
activeHref: this.props.activeHref,
onSelect: (0, _utilsCreateChainedFunction2['default'])(child.props.onSelect, this.props.onSelect),
key: child.key ? child.key : index,
navItem: true
});
}
});
exports['default'] = Nav;
module.exports = exports['default'];