UNPKG

antd

Version:

An enterprise-class UI design language and React-based implementation

137 lines (106 loc) 4.64 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = undefined; var _defineProperty2 = require('babel-runtime/helpers/defineProperty'); var _defineProperty3 = _interopRequireDefault(_defineProperty2); var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck'); var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); var _possibleConstructorReturn2 = require('babel-runtime/helpers/possibleConstructorReturn'); var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); var _inherits2 = require('babel-runtime/helpers/inherits'); var _inherits3 = _interopRequireDefault(_inherits2); var _react = require('react'); var _react2 = _interopRequireDefault(_react); var _classnames = require('classnames'); var _classnames2 = _interopRequireDefault(_classnames); var _anchorHelper = require('./anchorHelper'); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } var AnchorLink = function (_React$Component) { (0, _inherits3["default"])(AnchorLink, _React$Component); function AnchorLink() { (0, _classCallCheck3["default"])(this, AnchorLink); var _this = (0, _possibleConstructorReturn3["default"])(this, _React$Component.apply(this, arguments)); _this.renderAnchorLink = function (child) { var href = child.props.href; if (href) { _this.context.anchorHelper.addLink(href); return _react2["default"].cloneElement(child, { onClick: _this.props.onClick, prefixCls: _this.props.prefixCls, affix: _this.props.affix }); } return child; }; _this.refsTo = function (component) { _this._component = component; }; _this.scrollTo = function (e) { e.preventDefault(); var _this$props = _this.props, onClick = _this$props.onClick, href = _this$props.href; var anchorHelper = _this.context.anchorHelper; if (onClick) { onClick(href, _this._component); } else { e.stopPreventDefault(); var scrollToFn = anchorHelper ? anchorHelper.scrollTo : _anchorHelper.scrollTo; scrollToFn(href); } }; return _this; } AnchorLink.prototype.setActiveAnchor = function setActiveAnchor() { var _props = this.props, bounds = _props.bounds, href = _props.href, affix = _props.affix; var anchorHelper = this.context.anchorHelper; var active = affix && anchorHelper && anchorHelper.getCurrentAnchor(bounds) === href; if (active && anchorHelper) { anchorHelper.setActiveAnchor(this._component); } }; AnchorLink.prototype.componentDidMount = function componentDidMount() { this.setActiveAnchor(); }; AnchorLink.prototype.componentDidUpdate = function componentDidUpdate() { this.setActiveAnchor(); }; AnchorLink.prototype.render = function render() { var _classNames; var _props2 = this.props, prefixCls = _props2.prefixCls, href = _props2.href, children = _props2.children, title = _props2.title, bounds = _props2.bounds, affix = _props2.affix; var anchorHelper = this.context.anchorHelper; var active = affix && anchorHelper && anchorHelper.getCurrentAnchor(bounds) === href; var cls = (0, _classnames2["default"])((_classNames = {}, (0, _defineProperty3["default"])(_classNames, prefixCls + '-link', true), (0, _defineProperty3["default"])(_classNames, prefixCls + '-link-active', active), _classNames)); return _react2["default"].createElement( 'div', { className: cls }, _react2["default"].createElement( 'a', { ref: this.refsTo, className: prefixCls + '-link-title', onClick: this.scrollTo, href: href, title: typeof title === 'string' ? title : '' }, title ), _react2["default"].Children.map(children, this.renderAnchorLink) ); }; return AnchorLink; }(_react2["default"].Component); exports["default"] = AnchorLink; AnchorLink.contextTypes = { anchorHelper: _react2["default"].PropTypes.any }; AnchorLink.defaultProps = { href: '#', prefixCls: 'ant-anchor' }; module.exports = exports['default'];