@twreporter/universal-header 2.4.0-rc.4 → 2.4.0-rc.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +31 -0
- package/lib/components/action-button-item.js +169 -0
- package/lib/components/{action-button.stories.js → action-button-item.stories.js} +20 -18
- package/lib/components/action-button.js +51 -114
- package/lib/components/channels.js +1 -1
- package/lib/components/hamburger-menu.js +63 -60
- package/lib/components/hamburger-menu.stories.js +1 -7
- package/lib/components/header.js +111 -48
- package/lib/components/header.stories.js +17 -16
- package/lib/components/icons.js +44 -12
- package/lib/components/slogan.js +4 -2
- package/lib/components/tab-bar.js +117 -0
- package/lib/components/tab-bar.stories.js +51 -0
- package/lib/constants/action-item-types.js +79 -0
- package/lib/constants/actions.js +3 -3
- package/lib/constants/channels.js +1 -1
- package/lib/constants/prop-types.js +6 -2
- package/lib/containers/header.js +7 -3
- package/lib/utils/links.js +30 -4
- package/lib/utils/theme-old.js +90 -158
- package/lib/utils/theme.js +75 -82
- package/package.json +4 -4
package/lib/components/icons.js
CHANGED
|
@@ -5,14 +5,18 @@ function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "functi
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", {
|
|
6
6
|
value: true
|
|
7
7
|
});
|
|
8
|
-
exports["default"] = void 0;
|
|
8
|
+
exports["default"] = exports.MobileIcons = void 0;
|
|
9
9
|
|
|
10
10
|
var _react = _interopRequireWildcard(require("react"));
|
|
11
11
|
|
|
12
|
+
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
13
|
+
|
|
12
14
|
var _querystring = _interopRequireDefault(require("querystring"));
|
|
13
15
|
|
|
14
16
|
var _styledComponents = _interopRequireDefault(require("styled-components"));
|
|
15
17
|
|
|
18
|
+
var _CSSTransition = _interopRequireDefault(require("react-transition-group/CSSTransition"));
|
|
19
|
+
|
|
16
20
|
var _headerContext = _interopRequireDefault(require("../contexts/header-context"));
|
|
17
21
|
|
|
18
22
|
var _links = require("../utils/links");
|
|
@@ -55,7 +59,7 @@ var IconsContainer = /*#__PURE__*/_styledComponents["default"].div.withConfig({
|
|
|
55
59
|
var IconContainer = /*#__PURE__*/_styledComponents["default"].div.withConfig({
|
|
56
60
|
displayName: "icons__IconContainer",
|
|
57
61
|
componentId: "ay66zn-1"
|
|
58
|
-
})(["position:relative;margin-right:16px;a{display:flex;}"]);
|
|
62
|
+
})(["position:relative;margin-right:16px;&:last-child{margin-right:0;}a{display:flex;}"]);
|
|
59
63
|
|
|
60
64
|
var Container = /*#__PURE__*/_styledComponents["default"].div.withConfig({
|
|
61
65
|
displayName: "icons__Container",
|
|
@@ -72,7 +76,7 @@ var LogContainer = /*#__PURE__*/_styledComponents["default"].div.withConfig({
|
|
|
72
76
|
var SearchContainer = /*#__PURE__*/_styledComponents["default"].div.withConfig({
|
|
73
77
|
displayName: "icons__SearchContainer",
|
|
74
78
|
componentId: "ay66zn-4"
|
|
75
|
-
})(["opacity:", ";transition:opacity 300ms ease;position:absolute;right:0;top:-
|
|
79
|
+
})(["opacity:", ";transition:opacity 300ms ease;position:absolute;right:0;top:-8px;z-index:", ";"], function (props) {
|
|
76
80
|
return props.isSearchOpened ? '1' : '0';
|
|
77
81
|
}, function (props) {
|
|
78
82
|
return props.isSearchOpened ? 999 : -1;
|
|
@@ -85,7 +89,10 @@ var StyledDialog = /*#__PURE__*/(0, _styledComponents["default"])(_card.Dialog).
|
|
|
85
89
|
return props.showDialog ? '1' : '0';
|
|
86
90
|
});
|
|
87
91
|
|
|
88
|
-
var LogInOutIcon = function LogInOutIcon() {
|
|
92
|
+
var LogInOutIcon = function LogInOutIcon(_ref) {
|
|
93
|
+
var _ref$loginButtonType = _ref.loginButtonType,
|
|
94
|
+
loginButtonType = _ref$loginButtonType === void 0 ? 'icon' : _ref$loginButtonType;
|
|
95
|
+
|
|
89
96
|
var _useState = (0, _react.useState)(false),
|
|
90
97
|
_useState2 = _slicedToArray(_useState, 2),
|
|
91
98
|
showDialog = _useState2[0],
|
|
@@ -110,7 +117,7 @@ var LogInOutIcon = function LogInOutIcon() {
|
|
|
110
117
|
destination: redirectURL
|
|
111
118
|
});
|
|
112
119
|
|
|
113
|
-
window.location = (0, _links.
|
|
120
|
+
window.location = (0, _links.getLoginLink)(releaseBranch).to + '?' + query;
|
|
114
121
|
};
|
|
115
122
|
|
|
116
123
|
var onClickLogOut = function onClickLogOut(e) {
|
|
@@ -121,7 +128,7 @@ var LogInOutIcon = function LogInOutIcon() {
|
|
|
121
128
|
destination: redirectURL
|
|
122
129
|
});
|
|
123
130
|
|
|
124
|
-
window.location = (0, _links.
|
|
131
|
+
window.location = (0, _links.getLogoutLink)(releaseBranch).to + '?' + query;
|
|
125
132
|
};
|
|
126
133
|
|
|
127
134
|
var closeDialog = function closeDialog() {
|
|
@@ -134,20 +141,37 @@ var LogInOutIcon = function LogInOutIcon() {
|
|
|
134
141
|
releaseBranch: releaseBranch
|
|
135
142
|
});
|
|
136
143
|
|
|
144
|
+
var LoginButton = loginButtonType === 'icon' || isAuthed ? /*#__PURE__*/_react["default"].createElement(_button.IconButton, {
|
|
145
|
+
iconComponent: Icon,
|
|
146
|
+
theme: theme
|
|
147
|
+
}) : /*#__PURE__*/_react["default"].createElement(_button.TextButton, {
|
|
148
|
+
text: "\u767B\u5165",
|
|
149
|
+
theme: theme
|
|
150
|
+
});
|
|
137
151
|
return /*#__PURE__*/_react["default"].createElement(IconContainer, {
|
|
138
152
|
key: "login"
|
|
139
153
|
}, /*#__PURE__*/_react["default"].createElement(LogContainer, {
|
|
140
154
|
onClick: onClickIcon,
|
|
141
155
|
ref: ref
|
|
142
|
-
}, /*#__PURE__*/_react["default"].createElement(
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
156
|
+
}, LoginButton, /*#__PURE__*/_react["default"].createElement(_CSSTransition["default"], {
|
|
157
|
+
"in": showDialog,
|
|
158
|
+
classNames: "dialog-effect",
|
|
159
|
+
timeout: {
|
|
160
|
+
appear: 0,
|
|
161
|
+
enter: 100,
|
|
162
|
+
exit: 100
|
|
163
|
+
},
|
|
164
|
+
unmountOnExit: true
|
|
165
|
+
}, /*#__PURE__*/_react["default"].createElement(StyledDialog, {
|
|
146
166
|
text: "\u767B\u51FA",
|
|
147
167
|
size: "L",
|
|
148
168
|
showDialog: showDialog,
|
|
149
169
|
onClick: onClickLogOut
|
|
150
|
-
})));
|
|
170
|
+
}))));
|
|
171
|
+
};
|
|
172
|
+
|
|
173
|
+
LogInOutIcon.propTypes = {
|
|
174
|
+
loginButtonType: _propTypes["default"].oneOf(['icon', 'text'])
|
|
151
175
|
};
|
|
152
176
|
|
|
153
177
|
var SearchIcon = function SearchIcon() {
|
|
@@ -208,7 +232,8 @@ var SearchIcon = function SearchIcon() {
|
|
|
208
232
|
placeholder: "\u95DC\u9375\u5B57\u641C\u5C0B",
|
|
209
233
|
theme: theme,
|
|
210
234
|
onClose: closeSearchBox,
|
|
211
|
-
onSearch: onSearch
|
|
235
|
+
onSearch: onSearch,
|
|
236
|
+
handleBlur: closeSearchBox
|
|
212
237
|
})));
|
|
213
238
|
};
|
|
214
239
|
|
|
@@ -236,5 +261,12 @@ var Icons = function Icons() {
|
|
|
236
261
|
return /*#__PURE__*/_react["default"].createElement(IconsContainer, null, /*#__PURE__*/_react["default"].createElement(SearchIcon, null), /*#__PURE__*/_react["default"].createElement(BookmarkIcon, null), /*#__PURE__*/_react["default"].createElement(LogInOutIcon, null));
|
|
237
262
|
};
|
|
238
263
|
|
|
264
|
+
var MobileIcons = function MobileIcons() {
|
|
265
|
+
return /*#__PURE__*/_react["default"].createElement(IconsContainer, null, /*#__PURE__*/_react["default"].createElement(LogInOutIcon, {
|
|
266
|
+
loginButtonType: "text"
|
|
267
|
+
}));
|
|
268
|
+
};
|
|
269
|
+
|
|
270
|
+
exports.MobileIcons = MobileIcons;
|
|
239
271
|
var _default = Icons;
|
|
240
272
|
exports["default"] = _default;
|
package/lib/components/slogan.js
CHANGED
|
@@ -15,6 +15,8 @@ var _headerContext = _interopRequireDefault(require("../contexts/header-context"
|
|
|
15
15
|
|
|
16
16
|
var _slogan = _interopRequireDefault(require("../constants/slogan"));
|
|
17
17
|
|
|
18
|
+
var _fonts = _interopRequireDefault(require("../constants/fonts"));
|
|
19
|
+
|
|
18
20
|
var _theme = require("../utils/theme");
|
|
19
21
|
|
|
20
22
|
var _font = require("@twreporter/core/lib/constants/font");
|
|
@@ -30,9 +32,9 @@ function _extends() { _extends = Object.assign || function (target) { for (var i
|
|
|
30
32
|
var SloganContainer = /*#__PURE__*/_styledComponents["default"].div.withConfig({
|
|
31
33
|
displayName: "slogan__SloganContainer",
|
|
32
34
|
componentId: "sc-1eoofl8-0"
|
|
33
|
-
})(["color:", ";display:flex;align-items:center;cursor:default;font-family:", ";font-weight:", ";"], function (props) {
|
|
35
|
+
})(["color:", ";display:flex;align-items:center;cursor:default;font-family:", ";font-weight:", ";font-size:14px;"], function (props) {
|
|
34
36
|
return props.color;
|
|
35
|
-
},
|
|
37
|
+
}, _fonts["default"].family.serif, _font.fontWeight.normal);
|
|
36
38
|
|
|
37
39
|
var Slogan = function Slogan(_ref) {
|
|
38
40
|
var props = _extends({}, _ref);
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports["default"] = void 0;
|
|
9
|
+
|
|
10
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
11
|
+
|
|
12
|
+
var _styledComponents = _interopRequireDefault(require("styled-components"));
|
|
13
|
+
|
|
14
|
+
var _headerContext = _interopRequireWildcard(require("../contexts/header-context"));
|
|
15
|
+
|
|
16
|
+
var _links = require("../utils/links");
|
|
17
|
+
|
|
18
|
+
var _theme = require("../utils/theme");
|
|
19
|
+
|
|
20
|
+
var _customizedLink = _interopRequireDefault(require("@twreporter/react-components/lib/customized-link"));
|
|
21
|
+
|
|
22
|
+
var _icon = require("@twreporter/react-components/lib/icon");
|
|
23
|
+
|
|
24
|
+
var _button = require("@twreporter/react-components/lib/button");
|
|
25
|
+
|
|
26
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
|
|
27
|
+
|
|
28
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
29
|
+
|
|
30
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
31
|
+
|
|
32
|
+
// context
|
|
33
|
+
// utils
|
|
34
|
+
// @twreporter
|
|
35
|
+
var TabBarContainer = /*#__PURE__*/_styledComponents["default"].div.withConfig({
|
|
36
|
+
displayName: "tab-bar__TabBarContainer",
|
|
37
|
+
componentId: "bdt7uj-0"
|
|
38
|
+
})(["display:flex;justify-content:space-between;padding:4px 16px;border-top:1px solid ", ";background-color:", ";a{text-decoration:none;}"], function (props) {
|
|
39
|
+
return props.borderColor;
|
|
40
|
+
}, function (props) {
|
|
41
|
+
return props.bgColor;
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
var ButtonContainer = /*#__PURE__*/_styledComponents["default"].div.withConfig({
|
|
45
|
+
displayName: "tab-bar__ButtonContainer",
|
|
46
|
+
componentId: "bdt7uj-1"
|
|
47
|
+
})(["display:flex;justify-content:center;margin-right:8px;flex:1;&:last-child{margin-right:0;}a{text-decoration:none;}"]);
|
|
48
|
+
|
|
49
|
+
var TabBar = function TabBar() {
|
|
50
|
+
var _useContext = (0, _react.useContext)(_headerContext["default"]),
|
|
51
|
+
theme = _useContext.theme,
|
|
52
|
+
releaseBranch = _useContext.releaseBranch,
|
|
53
|
+
isLinkExternal = _useContext.isLinkExternal,
|
|
54
|
+
pathname = _useContext.pathname;
|
|
55
|
+
|
|
56
|
+
var _useContext2 = (0, _react.useContext)(_headerContext.HamburgerContext),
|
|
57
|
+
toggleHamburger = _useContext2.toggleHamburger,
|
|
58
|
+
isHamburgerMenuOpen = _useContext2.isHamburgerMenuOpen;
|
|
59
|
+
|
|
60
|
+
var _getTabBarLinks = (0, _links.getTabBarLinks)(isLinkExternal, releaseBranch),
|
|
61
|
+
home = _getTabBarLinks.home,
|
|
62
|
+
latest = _getTabBarLinks.latest,
|
|
63
|
+
bookmark = _getTabBarLinks.bookmark;
|
|
64
|
+
|
|
65
|
+
var HomeIcon = /*#__PURE__*/_react["default"].createElement(_icon.Home, {
|
|
66
|
+
releaseBranch: releaseBranch
|
|
67
|
+
});
|
|
68
|
+
|
|
69
|
+
var ClockIcon = /*#__PURE__*/_react["default"].createElement(_icon.Clock, {
|
|
70
|
+
releaseBranch: releaseBranch
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
var BookmarkIcon = /*#__PURE__*/_react["default"].createElement(_icon.Bookmark, {
|
|
74
|
+
releaseBranch: releaseBranch
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
var HamburgerIcon = /*#__PURE__*/_react["default"].createElement(_icon.Hamburger, {
|
|
78
|
+
releaseBranch: releaseBranch
|
|
79
|
+
});
|
|
80
|
+
|
|
81
|
+
var _selectTabBarTheme = (0, _theme.selectTabBarTheme)(theme),
|
|
82
|
+
bgColor = _selectTabBarTheme.bgColor,
|
|
83
|
+
borderColor = _selectTabBarTheme.borderColor;
|
|
84
|
+
|
|
85
|
+
var isHomeActive = !isHamburgerMenuOpen && pathname === '/';
|
|
86
|
+
var isLatestActive = !isHamburgerMenuOpen && pathname === '/latest';
|
|
87
|
+
var isBookmarkActive = !isHamburgerMenuOpen && pathname === '/bookmarks';
|
|
88
|
+
return /*#__PURE__*/_react["default"].createElement(TabBarContainer, {
|
|
89
|
+
bgColor: bgColor,
|
|
90
|
+
borderColor: borderColor
|
|
91
|
+
}, /*#__PURE__*/_react["default"].createElement(ButtonContainer, null, /*#__PURE__*/_react["default"].createElement(_customizedLink["default"], home, /*#__PURE__*/_react["default"].createElement(_button.IconWithTextButton, {
|
|
92
|
+
text: "\u9996\u9801",
|
|
93
|
+
iconComponent: HomeIcon,
|
|
94
|
+
theme: theme,
|
|
95
|
+
active: isHomeActive
|
|
96
|
+
}))), /*#__PURE__*/_react["default"].createElement(ButtonContainer, null, /*#__PURE__*/_react["default"].createElement(_customizedLink["default"], latest, /*#__PURE__*/_react["default"].createElement(_button.IconWithTextButton, {
|
|
97
|
+
text: "\u6700\u65B0",
|
|
98
|
+
iconComponent: ClockIcon,
|
|
99
|
+
theme: theme,
|
|
100
|
+
active: isLatestActive
|
|
101
|
+
}))), /*#__PURE__*/_react["default"].createElement(ButtonContainer, null, /*#__PURE__*/_react["default"].createElement(_customizedLink["default"], bookmark, /*#__PURE__*/_react["default"].createElement(_button.IconWithTextButton, {
|
|
102
|
+
text: "\u6211\u7684\u66F8\u7C64",
|
|
103
|
+
iconComponent: BookmarkIcon,
|
|
104
|
+
theme: theme,
|
|
105
|
+
active: isBookmarkActive
|
|
106
|
+
}))), /*#__PURE__*/_react["default"].createElement(ButtonContainer, {
|
|
107
|
+
onClick: toggleHamburger
|
|
108
|
+
}, /*#__PURE__*/_react["default"].createElement(_button.IconWithTextButton, {
|
|
109
|
+
text: "\u9078\u55AE",
|
|
110
|
+
iconComponent: HamburgerIcon,
|
|
111
|
+
theme: theme,
|
|
112
|
+
active: isHamburgerMenuOpen
|
|
113
|
+
})));
|
|
114
|
+
};
|
|
115
|
+
|
|
116
|
+
var _default = TabBar;
|
|
117
|
+
exports["default"] = _default;
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.tabBar = exports["default"] = void 0;
|
|
7
|
+
|
|
8
|
+
var _react = _interopRequireDefault(require("react"));
|
|
9
|
+
|
|
10
|
+
var _styledComponents = _interopRequireDefault(require("styled-components"));
|
|
11
|
+
|
|
12
|
+
var _tabBar = _interopRequireDefault(require("./tab-bar"));
|
|
13
|
+
|
|
14
|
+
var _headerContext = _interopRequireDefault(require("../contexts/header-context"));
|
|
15
|
+
|
|
16
|
+
var _theme = require("@twreporter/core/lib/constants/theme");
|
|
17
|
+
|
|
18
|
+
var _releaseBranch = require("@twreporter/core/lib/constants/release-branch");
|
|
19
|
+
|
|
20
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
|
|
21
|
+
|
|
22
|
+
/* eslint-disable react/prop-types */
|
|
23
|
+
var _default = {
|
|
24
|
+
title: 'Tab Bar',
|
|
25
|
+
component: _tabBar["default"],
|
|
26
|
+
argTypes: {
|
|
27
|
+
theme: _theme.THEME_STORYBOOK_ARG_TYPE,
|
|
28
|
+
releaseBranch: _releaseBranch.BRANCH_STORYBOOK_ARG_TYPE
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
exports["default"] = _default;
|
|
32
|
+
|
|
33
|
+
var Container = /*#__PURE__*/_styledComponents["default"].div.withConfig({
|
|
34
|
+
displayName: "tab-barstories__Container",
|
|
35
|
+
componentId: "paqbaf-0"
|
|
36
|
+
})(["width:320px;"]);
|
|
37
|
+
|
|
38
|
+
var tabBar = function tabBar(props) {
|
|
39
|
+
var theme = props.theme,
|
|
40
|
+
releaseBranch = props.releaseBranch;
|
|
41
|
+
var context = {
|
|
42
|
+
theme: theme,
|
|
43
|
+
releaseBranch: releaseBranch,
|
|
44
|
+
isLinkExternal: true
|
|
45
|
+
};
|
|
46
|
+
return /*#__PURE__*/_react["default"].createElement(_headerContext["default"].Provider, {
|
|
47
|
+
value: context
|
|
48
|
+
}, /*#__PURE__*/_react["default"].createElement(Container, null, /*#__PURE__*/_react["default"].createElement(_tabBar["default"], null)));
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
exports.tabBar = tabBar;
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.BUTTON_SIZE_STORYBOOK_ARG_TYPE = exports.BUTTON_SIZE_PROP_TYPE = exports.BUTTON_SIZE_TYPE = exports.BUTTON_WIDTH_STORYBOOK_ARG_TYPE = exports.BUTTON_WIDTH_PROP_TYPE = exports.BUTTON_WIDTH_TYPE = exports.TEXT_STORYBOOK_ARG_TYPE = exports.TEXT_PROP_TYPE = exports.TEXT_TYPE = exports.DIRECTION_STORYBOOK_ARG_TYPE = exports.DIRECTION_PROP_TYPE = exports.DIRECTION_TYPE = void 0;
|
|
7
|
+
|
|
8
|
+
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
9
|
+
|
|
10
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
|
|
11
|
+
|
|
12
|
+
var DIRECTION_TYPE = {
|
|
13
|
+
row: 'row',
|
|
14
|
+
column: 'column'
|
|
15
|
+
};
|
|
16
|
+
exports.DIRECTION_TYPE = DIRECTION_TYPE;
|
|
17
|
+
|
|
18
|
+
var DIRECTION_PROP_TYPE = _propTypes["default"].oneOf([DIRECTION_TYPE.row, DIRECTION_TYPE.column]);
|
|
19
|
+
|
|
20
|
+
exports.DIRECTION_PROP_TYPE = DIRECTION_PROP_TYPE;
|
|
21
|
+
var DIRECTION_STORYBOOK_ARG_TYPE = {
|
|
22
|
+
defaultValue: DIRECTION_TYPE.row,
|
|
23
|
+
options: [DIRECTION_TYPE.row, DIRECTION_TYPE.column],
|
|
24
|
+
control: {
|
|
25
|
+
type: 'radio'
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
exports.DIRECTION_STORYBOOK_ARG_TYPE = DIRECTION_STORYBOOK_ARG_TYPE;
|
|
29
|
+
var TEXT_TYPE = {
|
|
30
|
+
brief: 'brief',
|
|
31
|
+
full: 'full'
|
|
32
|
+
};
|
|
33
|
+
exports.TEXT_TYPE = TEXT_TYPE;
|
|
34
|
+
|
|
35
|
+
var TEXT_PROP_TYPE = _propTypes["default"].oneOf([TEXT_TYPE.brief, TEXT_TYPE.full]);
|
|
36
|
+
|
|
37
|
+
exports.TEXT_PROP_TYPE = TEXT_PROP_TYPE;
|
|
38
|
+
var TEXT_STORYBOOK_ARG_TYPE = {
|
|
39
|
+
defaultValue: TEXT_TYPE.brief,
|
|
40
|
+
options: [TEXT_TYPE.brief, TEXT_TYPE.full],
|
|
41
|
+
control: {
|
|
42
|
+
type: 'radio'
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
exports.TEXT_STORYBOOK_ARG_TYPE = TEXT_STORYBOOK_ARG_TYPE;
|
|
46
|
+
var BUTTON_WIDTH_TYPE = {
|
|
47
|
+
fit: 'fit',
|
|
48
|
+
stretch: 'stretch'
|
|
49
|
+
};
|
|
50
|
+
exports.BUTTON_WIDTH_TYPE = BUTTON_WIDTH_TYPE;
|
|
51
|
+
|
|
52
|
+
var BUTTON_WIDTH_PROP_TYPE = _propTypes["default"].oneOf([BUTTON_WIDTH_TYPE.fit, BUTTON_WIDTH_TYPE.stretch]);
|
|
53
|
+
|
|
54
|
+
exports.BUTTON_WIDTH_PROP_TYPE = BUTTON_WIDTH_PROP_TYPE;
|
|
55
|
+
var BUTTON_WIDTH_STORYBOOK_ARG_TYPE = {
|
|
56
|
+
defaultValue: BUTTON_WIDTH_TYPE.fit,
|
|
57
|
+
options: [BUTTON_WIDTH_TYPE.fit, BUTTON_WIDTH_TYPE.stretch],
|
|
58
|
+
control: {
|
|
59
|
+
type: 'radio'
|
|
60
|
+
}
|
|
61
|
+
};
|
|
62
|
+
exports.BUTTON_WIDTH_STORYBOOK_ARG_TYPE = BUTTON_WIDTH_STORYBOOK_ARG_TYPE;
|
|
63
|
+
var BUTTON_SIZE_TYPE = {
|
|
64
|
+
S: 'S',
|
|
65
|
+
L: 'L'
|
|
66
|
+
};
|
|
67
|
+
exports.BUTTON_SIZE_TYPE = BUTTON_SIZE_TYPE;
|
|
68
|
+
|
|
69
|
+
var BUTTON_SIZE_PROP_TYPE = _propTypes["default"].oneOf([BUTTON_SIZE_TYPE.S, BUTTON_SIZE_TYPE.L]);
|
|
70
|
+
|
|
71
|
+
exports.BUTTON_SIZE_PROP_TYPE = BUTTON_SIZE_PROP_TYPE;
|
|
72
|
+
var BUTTON_SIZE_STORYBOOK_ARG_TYPE = {
|
|
73
|
+
defaultValue: BUTTON_SIZE_TYPE.S,
|
|
74
|
+
options: [BUTTON_SIZE_TYPE.S, BUTTON_SIZE_TYPE.L],
|
|
75
|
+
control: {
|
|
76
|
+
type: 'radio'
|
|
77
|
+
}
|
|
78
|
+
};
|
|
79
|
+
exports.BUTTON_SIZE_STORYBOOK_ARG_TYPE = BUTTON_SIZE_STORYBOOK_ARG_TYPE;
|
package/lib/constants/actions.js
CHANGED
|
@@ -5,7 +5,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.ACTION_ORDER = exports.ACTION_BUTTON_TYPE = exports.ACTION_LABEL = exports.ACTION_KEY = void 0;
|
|
7
7
|
|
|
8
|
-
var
|
|
8
|
+
var _brief, _full, _ACTION_BUTTON_TYPE;
|
|
9
9
|
|
|
10
10
|
function _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; }
|
|
11
11
|
|
|
@@ -16,8 +16,8 @@ var actionKeys = {
|
|
|
16
16
|
var ACTION_KEY = actionKeys;
|
|
17
17
|
exports.ACTION_KEY = ACTION_KEY;
|
|
18
18
|
var ACTION_LABEL = {
|
|
19
|
-
|
|
20
|
-
|
|
19
|
+
brief: (_brief = {}, _defineProperty(_brief, actionKeys.support, '贊助'), _defineProperty(_brief, actionKeys.newsLetter, '訂閱'), _brief),
|
|
20
|
+
full: (_full = {}, _defineProperty(_full, actionKeys.support, '贊助我們'), _defineProperty(_full, actionKeys.newsLetter, '訂閱電子報'), _full)
|
|
21
21
|
};
|
|
22
22
|
exports.ACTION_LABEL = ACTION_LABEL;
|
|
23
23
|
var ACTION_BUTTON_TYPE = (_ACTION_BUTTON_TYPE = {}, _defineProperty(_ACTION_BUTTON_TYPE, actionKeys.support, 'primary'), _defineProperty(_ACTION_BUTTON_TYPE, actionKeys.newsLetter, 'secondary'), _ACTION_BUTTON_TYPE);
|
|
@@ -28,7 +28,7 @@ var channelKey = {
|
|
|
28
28
|
var CHANNEL_KEY = channelKey; // external links are in external-links.js file
|
|
29
29
|
|
|
30
30
|
exports.CHANNEL_KEY = CHANNEL_KEY;
|
|
31
|
-
var CHANNEL_PATH = (_CHANNEL_PATH = {}, _defineProperty(_CHANNEL_PATH, channelKey.latest, '/
|
|
31
|
+
var CHANNEL_PATH = (_CHANNEL_PATH = {}, _defineProperty(_CHANNEL_PATH, channelKey.latest, '/latest'), _defineProperty(_CHANNEL_PATH, channelKey.topic, '/topics'), _defineProperty(_CHANNEL_PATH, channelKey.humanStory, '/tags/58db34a30f56b40d001ae6a6'), _defineProperty(_CHANNEL_PATH, channelKey.photography, '/photography'), _defineProperty(_CHANNEL_PATH, channelKey.infographic, "/tags/".concat(_infogram.INFOGRAM_ID)), _CHANNEL_PATH);
|
|
32
32
|
exports.CHANNEL_PATH = CHANNEL_PATH;
|
|
33
33
|
var CHANNEL_LABEL = (_CHANNEL_LABEL = {}, _defineProperty(_CHANNEL_LABEL, channelKey.latest, '最新'), _defineProperty(_CHANNEL_LABEL, channelKey.topic, '深度專題'), _defineProperty(_CHANNEL_LABEL, channelKey.category, '議題'), _defineProperty(_CHANNEL_LABEL, channelKey.opinion, '評論'), _defineProperty(_CHANNEL_LABEL, channelKey.column, '專欄'), _defineProperty(_CHANNEL_LABEL, channelKey.humanStory, '人物故事'), _defineProperty(_CHANNEL_LABEL, channelKey.photography, '影像'), _defineProperty(_CHANNEL_LABEL, channelKey.podcast, 'Podcast'), _defineProperty(_CHANNEL_LABEL, channelKey.kidsReporter, '少年報導者'), _defineProperty(_CHANNEL_LABEL, channelKey.infographic, '數位敘事'), _CHANNEL_LABEL);
|
|
34
34
|
exports.CHANNEL_LABEL = CHANNEL_LABEL;
|
|
@@ -31,10 +31,14 @@ var linkPropTypes = {
|
|
|
31
31
|
isExternal: _propTypes["default"].bool.isRequired
|
|
32
32
|
};
|
|
33
33
|
var hamburgerContextPropTypes = {
|
|
34
|
-
|
|
34
|
+
toggleHamburger: _propTypes["default"].func,
|
|
35
|
+
closeHamburgerMenu: _propTypes["default"].func,
|
|
36
|
+
isHamburgerMenuOpen: _propTypes["default"]["boolean"]
|
|
35
37
|
};
|
|
36
38
|
var hamburgerContextDefaultProps = {
|
|
37
|
-
|
|
39
|
+
toggleHamburger: function toggleHamburger() {},
|
|
40
|
+
closeHamburgerMenu: function closeHamburgerMenu() {},
|
|
41
|
+
isHamburgerMenuOpen: false
|
|
38
42
|
};
|
|
39
43
|
var CONTEXT_PROP = {
|
|
40
44
|
propTypes: contextPropTypes,
|
package/lib/containers/header.js
CHANGED
|
@@ -29,7 +29,7 @@ var _map = _interopRequireDefault(require("lodash/map"));
|
|
|
29
29
|
|
|
30
30
|
var _reduce = _interopRequireDefault(require("lodash/reduce"));
|
|
31
31
|
|
|
32
|
-
var _excluded = ["releaseBranch", "isAuthed", "isLinkExternal", "theme"];
|
|
32
|
+
var _excluded = ["releaseBranch", "isAuthed", "isLinkExternal", "theme", "pathname"];
|
|
33
33
|
|
|
34
34
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
35
35
|
|
|
@@ -227,6 +227,7 @@ var Container = /*#__PURE__*/function (_React$PureComponent) {
|
|
|
227
227
|
isAuthed = _this$props.isAuthed,
|
|
228
228
|
isLinkExternal = _this$props.isLinkExternal,
|
|
229
229
|
theme = _this$props.theme,
|
|
230
|
+
pathname = _this$props.pathname,
|
|
230
231
|
passThrough = _objectWithoutProperties(_this$props, _excluded);
|
|
231
232
|
|
|
232
233
|
var _this$state = this.state,
|
|
@@ -237,6 +238,7 @@ var Container = /*#__PURE__*/function (_React$PureComponent) {
|
|
|
237
238
|
isAuthed: isAuthed,
|
|
238
239
|
isLinkExternal: isLinkExternal,
|
|
239
240
|
theme: theme,
|
|
241
|
+
pathname: pathname,
|
|
240
242
|
toUseNarrow: toUseNarrow,
|
|
241
243
|
hideHeader: hideHeader
|
|
242
244
|
};
|
|
@@ -257,11 +259,13 @@ var Container = /*#__PURE__*/function (_React$PureComponent) {
|
|
|
257
259
|
}(_react["default"].PureComponent);
|
|
258
260
|
|
|
259
261
|
_defineProperty(Container, "defaultProps", _objectSpread(_objectSpread({}, _propTypes2.CONTEXT_PROP.defaultProps), {}, {
|
|
260
|
-
pathname: ''
|
|
262
|
+
pathname: '',
|
|
263
|
+
location: {}
|
|
261
264
|
}));
|
|
262
265
|
|
|
263
266
|
_defineProperty(Container, "propTypes", _objectSpread(_objectSpread({}, _propTypes2.CONTEXT_PROP.propTypes), {}, {
|
|
264
|
-
pathname: _propTypes["default"].string
|
|
267
|
+
pathname: _propTypes["default"].string,
|
|
268
|
+
location: _propTypes["default"].object
|
|
265
269
|
}));
|
|
266
270
|
|
|
267
271
|
function mapStateToProps(state) {
|
package/lib/utils/links.js
CHANGED
|
@@ -12,7 +12,8 @@ exports.getActionLinks = getActionLinks;
|
|
|
12
12
|
exports.getFooterLinks = getFooterLinks;
|
|
13
13
|
exports.getSocialMediaLinks = getSocialMediaLinks;
|
|
14
14
|
exports.getChannelLinks = getChannelLinks;
|
|
15
|
-
exports.
|
|
15
|
+
exports.getTabBarLinks = getTabBarLinks;
|
|
16
|
+
exports.getCategoryLink = exports.checkReferrer = void 0;
|
|
16
17
|
|
|
17
18
|
var _services = require("../constants/services");
|
|
18
19
|
|
|
@@ -34,13 +35,16 @@ var _forEach = _interopRequireDefault(require("lodash/forEach"));
|
|
|
34
35
|
|
|
35
36
|
var _reduce = _interopRequireDefault(require("lodash/reduce"));
|
|
36
37
|
|
|
38
|
+
var _split = _interopRequireDefault(require("lodash/split"));
|
|
39
|
+
|
|
37
40
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
|
|
38
41
|
|
|
39
42
|
function _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; }
|
|
40
43
|
|
|
41
44
|
var _ = {
|
|
42
45
|
forEach: _forEach["default"],
|
|
43
|
-
reduce: _reduce["default"]
|
|
46
|
+
reduce: _reduce["default"],
|
|
47
|
+
split: _split["default"]
|
|
44
48
|
};
|
|
45
49
|
var originsForClient = _requestOrigins["default"].forClientSideRendering;
|
|
46
50
|
/**
|
|
@@ -66,11 +70,14 @@ var defaultReleaseBranch = _releaseBranch["default"].master;
|
|
|
66
70
|
var defaultIsExternal = false;
|
|
67
71
|
|
|
68
72
|
function __getLink(isExternal, releaseBranch, baseURL, path) {
|
|
73
|
+
var target = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : '_self';
|
|
74
|
+
|
|
69
75
|
if (isExternal) {
|
|
70
76
|
if (baseURL.hasOwnProperty(releaseBranch)) {
|
|
71
77
|
return {
|
|
72
78
|
to: baseURL[releaseBranch] + path,
|
|
73
|
-
isExternal: isExternal
|
|
79
|
+
isExternal: isExternal,
|
|
80
|
+
target: target
|
|
74
81
|
};
|
|
75
82
|
}
|
|
76
83
|
}
|
|
@@ -94,6 +101,15 @@ var __composeExternalLink = function __composeExternalLink(link) {
|
|
|
94
101
|
};
|
|
95
102
|
};
|
|
96
103
|
|
|
104
|
+
var checkReferrer = function checkReferrer() {
|
|
105
|
+
var referrer = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
|
|
106
|
+
var releaseBranch = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : defaultReleaseBranch;
|
|
107
|
+
var url = new URL(referrer);
|
|
108
|
+
return url.origin === mainBaseURL[releaseBranch];
|
|
109
|
+
};
|
|
110
|
+
|
|
111
|
+
exports.checkReferrer = checkReferrer;
|
|
112
|
+
|
|
97
113
|
var getCategoryLink = function getCategoryLink() {
|
|
98
114
|
var isExternal = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : defaultIsExternal;
|
|
99
115
|
var releaseBranch = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : defaultReleaseBranch;
|
|
@@ -148,7 +164,7 @@ function getFooterLinks() {
|
|
|
148
164
|
|
|
149
165
|
var isExternal = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : defaultIsExternal;
|
|
150
166
|
var releaseBranch = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : defaultReleaseBranch;
|
|
151
|
-
return _ref2 = {}, _defineProperty(_ref2, _footer.FOOTER_KEY.aboutUs, __getLink(
|
|
167
|
+
return _ref2 = {}, _defineProperty(_ref2, _footer.FOOTER_KEY.aboutUs, __getLink(true, releaseBranch, mainBaseURL, _footer.FOOTER_PATH[_footer.FOOTER_KEY.aboutUs], '_blank')), _defineProperty(_ref2, _footer.FOOTER_KEY.influenceReport, __getLink(isExternal, releaseBranch, mainBaseURL, _footer.FOOTER_PATH[_footer.FOOTER_KEY.influenceReport])), _defineProperty(_ref2, _footer.FOOTER_KEY.openLab, __composeExternalLink(__getExternalLinks().openLab, '_blank')), _ref2;
|
|
152
168
|
}
|
|
153
169
|
|
|
154
170
|
function getSocialMediaLinks() {
|
|
@@ -178,4 +194,14 @@ function getChannelLinks() {
|
|
|
178
194
|
|
|
179
195
|
links[_channels.CHANNEL_KEY.kidsReporter] = __composeExternalLink(__getExternalLinks().kidsReporter, '_blank');
|
|
180
196
|
return links;
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
function getTabBarLinks() {
|
|
200
|
+
var isExternal = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : defaultIsExternal;
|
|
201
|
+
var releaseBranch = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : defaultReleaseBranch;
|
|
202
|
+
return {
|
|
203
|
+
home: __getLink(isExternal, releaseBranch, mainBaseURL, ''),
|
|
204
|
+
latest: __getLink(isExternal, releaseBranch, mainBaseURL, '/latest'),
|
|
205
|
+
bookmark: __getLink(isExternal, releaseBranch, mainBaseURL, _services.servicePathnames.bookmarks)
|
|
206
|
+
};
|
|
181
207
|
}
|