UNPKG

5.19 kBJavaScriptView Raw
1'use strict';
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6
7var _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; };
8
9var _react = require('react');
10
11var _react2 = _interopRequireDefault(_react);
12
13var _reactDom = require('react-dom');
14
15var _reactDom2 = _interopRequireDefault(_reactDom);
16
17var _propTypes = require('prop-types');
18
19var _propTypes2 = _interopRequireDefault(_propTypes);
20
21var _gumshoejs = require('gumshoejs');
22
23var _gumshoejs2 = _interopRequireDefault(_gumshoejs);
24
25function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
26
27function _defaults(obj, defaults) { var keys = Object.getOwnPropertyNames(defaults); for (var i = 0; i < keys.length; i++) { var key = keys[i]; var value = Object.getOwnPropertyDescriptor(defaults, key); if (value && value.configurable && obj[key] === undefined) { Object.defineProperty(obj, key, value); } } return obj; }
28
29function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
30
31function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
32
33function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : _defaults(subClass, superClass); }
34
35var propTypes = {
36 selector: _propTypes2["default"].string.isRequired, //选择器
37 offset: _propTypes2["default"].func, //偏移量
38 navClass: _propTypes2["default"].string, //当前被激活锚点新增的类名
39 contentClass: _propTypes2["default"].string, //当前被激活的区域
40 nested: _propTypes2["default"].bool,
41 nestedClass: _propTypes2["default"].string,
42 reflow: _propTypes2["default"].bool,
43 event: _propTypes2["default"].bool, //是否添加监听事件
44 activeHandle: _propTypes2["default"].func, //被激活的回调
45 deactiveHandle: _propTypes2["default"].func //激活后的回调
46};
47var defaultProps = {
48 navClass: 'active', // applied to the nav list item
49 contentClass: 'active', // applied to the content
50
51 // Nested navigation
52 nested: false, // if true, add classes to parents of active link
53 nestedClass: 'active', // applied to the parent items
54
55 // Offset & reflow
56 offset: 0, // how far from the top of the page to activate a content area
57 reflow: false, // if true, listen for reflows
58
59 // Event support
60 events: true, // if true, emit custom events
61 activeHandle: function activeHandle() {},
62 deactiveHandle: function deactiveHandle() {}
63};
64
65var Anchor = function (_Component) {
66 _inherits(Anchor, _Component);
67
68 function Anchor() {
69 _classCallCheck(this, Anchor);
70
71 return _possibleConstructorReturn(this, _Component.apply(this, arguments));
72 }
73
74 Anchor.prototype.componentDidMount = function componentDidMount() {
75 var props = this.props;
76 this.anchor = new _gumshoejs2["default"](props.selector, _extends({}, props));
77 this.anchorDOM.addEventListener('gumshoeActivate', function (event) {
78 // The list item
79 var li = event.target; //列表
80
81 // The link
82 var link = event.detail.link; //a标签
83
84 // The content
85 var content = event.detail.content; //内容区域
86
87 props.activeHandle(li, link, content);
88 });
89 this.anchorDOM.addEventListener('gumshoeDeactivate', function (event) {
90 var li = event.target; //列表
91
92 // The link
93 var link = event.detail.link; //a标签
94
95 // The content
96 var content = event.detail.content; //内容区域
97
98 props.deactiveHandle(li, link, content);
99 });
100 };
101
102 Anchor.prototype.componentDidUpdate = function componentDidUpdate() {
103 this.anchor.setup();
104 this.anchor.detect();
105 };
106
107 Anchor.prototype.componentWillUnmount = function componentWillUnmount() {
108 this.anchor.destroy();
109 };
110
111 Anchor.prototype.render = function render() {
112 var _this2 = this;
113
114 return _react2["default"].createElement(
115 'div',
116 { className: 'u-anchor', ref: function ref(_ref) {
117 _this2.anchorDOM = _ref;
118 } },
119 this.props.children
120 );
121 };
122
123 return Anchor;
124}(_react.Component);
125
126;
127
128Anchor.propTypes = propTypes;
129Anchor.defaultProps = defaultProps;
130exports["default"] = Anchor;
131module.exports = exports['default'];
\No newline at end of file