@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.
@@ -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:-16px;z-index:", ";"], function (props) {
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.getLogoutLink)(releaseBranch).to + '?' + query;
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.getLoginLink)(releaseBranch).to + '?' + query;
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(_button.IconButton, {
143
- iconComponent: Icon,
144
- theme: theme
145
- }), /*#__PURE__*/_react["default"].createElement(StyledDialog, {
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;
@@ -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
- }, _font.fontFamily.title, _font.fontWeight.bold);
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;
@@ -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 _row, _column, _ACTION_BUTTON_TYPE;
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
- row: (_row = {}, _defineProperty(_row, actionKeys.support, '贊助'), _defineProperty(_row, actionKeys.newsLetter, '訂閱'), _row),
20
- column: (_column = {}, _defineProperty(_column, actionKeys.support, '贊助我們'), _defineProperty(_column, actionKeys.newsLetter, '訂閱電子報'), _column)
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, '/categories/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);
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
- closeHamburgerMenu: _propTypes["default"].func
34
+ toggleHamburger: _propTypes["default"].func,
35
+ closeHamburgerMenu: _propTypes["default"].func,
36
+ isHamburgerMenuOpen: _propTypes["default"]["boolean"]
35
37
  };
36
38
  var hamburgerContextDefaultProps = {
37
- closeHamburgerMenu: function closeHamburgerMenu() {}
39
+ toggleHamburger: function toggleHamburger() {},
40
+ closeHamburgerMenu: function closeHamburgerMenu() {},
41
+ isHamburgerMenuOpen: false
38
42
  };
39
43
  var CONTEXT_PROP = {
40
44
  propTypes: contextPropTypes,
@@ -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) {
@@ -12,7 +12,8 @@ exports.getActionLinks = getActionLinks;
12
12
  exports.getFooterLinks = getFooterLinks;
13
13
  exports.getSocialMediaLinks = getSocialMediaLinks;
14
14
  exports.getChannelLinks = getChannelLinks;
15
- exports.getCategoryLink = void 0;
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(isExternal, releaseBranch, mainBaseURL, _footer.FOOTER_PATH[_footer.FOOTER_KEY.aboutUs])), _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;
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
  }