@twreporter/react-article-components 1.4.12 → 1.5.0-rc.0
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 +17 -0
- package/lib/components/article-page.js +41 -95
- package/lib/components/aside/desktop-aside.js +3 -3
- package/lib/components/aside/desktop-tools.js +198 -0
- package/lib/components/aside/mobile-tool-bar.js +464 -0
- package/lib/components/aside/utils/theme.js +37 -0
- package/lib/components/license.js +9 -4
- package/lib/constants/anchor.js +8 -0
- package/package.json +4 -4
- package/lib/components/aside/mobile-aside.js +0 -212
- package/lib/components/aside/tools.js +0 -383
|
@@ -0,0 +1,464 @@
|
|
|
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 _propTypes = _interopRequireDefault(require("prop-types"));
|
|
13
|
+
|
|
14
|
+
var _styledComponents = _interopRequireWildcard(require("styled-components"));
|
|
15
|
+
|
|
16
|
+
var _dynamicComponentsContext = _interopRequireDefault(require("../../contexts/dynamic-components-context"));
|
|
17
|
+
|
|
18
|
+
var _aside = _interopRequireDefault(require("../../constants/prop-types/aside"));
|
|
19
|
+
|
|
20
|
+
var _theme = _interopRequireDefault(require("../../constants/theme"));
|
|
21
|
+
|
|
22
|
+
var _anchor = require("../../constants/anchor");
|
|
23
|
+
|
|
24
|
+
var _theme2 = require("./utils/theme");
|
|
25
|
+
|
|
26
|
+
var _bookmarkWidget = _interopRequireDefault(require("@twreporter/react-components/lib/bookmark-widget"));
|
|
27
|
+
|
|
28
|
+
var _icon = require("@twreporter/react-components/lib/icon");
|
|
29
|
+
|
|
30
|
+
var _button = require("@twreporter/react-components/lib/button");
|
|
31
|
+
|
|
32
|
+
var _snackBar = require("@twreporter/react-components/lib/snack-bar");
|
|
33
|
+
|
|
34
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
|
|
35
|
+
|
|
36
|
+
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); }
|
|
37
|
+
|
|
38
|
+
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; }
|
|
39
|
+
|
|
40
|
+
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
41
|
+
|
|
42
|
+
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
43
|
+
|
|
44
|
+
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
45
|
+
|
|
46
|
+
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
|
|
47
|
+
|
|
48
|
+
function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
|
|
49
|
+
|
|
50
|
+
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
51
|
+
|
|
52
|
+
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
|
|
53
|
+
|
|
54
|
+
function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
|
|
55
|
+
|
|
56
|
+
// global var
|
|
57
|
+
var HideTextContext = /*#__PURE__*/(0, _react.createContext)();
|
|
58
|
+
var defaultFbAppID = '962589903815787';
|
|
59
|
+
|
|
60
|
+
var defaultFunc = function defaultFunc() {};
|
|
61
|
+
|
|
62
|
+
var ButtonContainer = /*#__PURE__*/_styledComponents["default"].div.withConfig({
|
|
63
|
+
displayName: "mobile-tool-bar__ButtonContainer",
|
|
64
|
+
componentId: "do65sv-0"
|
|
65
|
+
})(["display:flex;flex-direction:column;align-items:center;width:50px;margin-right:8px;&:last-child{margin-right:0;}"]);
|
|
66
|
+
|
|
67
|
+
var ShareContainer = /*#__PURE__*/_styledComponents["default"].div.withConfig({
|
|
68
|
+
displayName: "mobile-tool-bar__ShareContainer",
|
|
69
|
+
componentId: "do65sv-1"
|
|
70
|
+
})(["display:flex;align-items:center;padding:8px;margin-right:8px;border-radius:50%;"]);
|
|
71
|
+
|
|
72
|
+
var OptionContainer = /*#__PURE__*/_styledComponents["default"].div.withConfig({
|
|
73
|
+
displayName: "mobile-tool-bar__OptionContainer",
|
|
74
|
+
componentId: "do65sv-2"
|
|
75
|
+
})(["opacity:", ";transition:opacity 100ms;position:absolute;top:-55px;left:50%;transform:translateX(-50%);display:flex;"], function (props) {
|
|
76
|
+
return props.isShow ? '1' : '0';
|
|
77
|
+
});
|
|
78
|
+
|
|
79
|
+
var SnackBarContainer = /*#__PURE__*/_styledComponents["default"].div.withConfig({
|
|
80
|
+
displayName: "mobile-tool-bar__SnackBarContainer",
|
|
81
|
+
componentId: "do65sv-3"
|
|
82
|
+
})(["opacity:", ";position:absolute;left:50%;bottom:56px;transform:translateX(-50%);transition:opacity 100ms;"], function (props) {
|
|
83
|
+
return props.showSnackBar ? '1' : '0';
|
|
84
|
+
});
|
|
85
|
+
|
|
86
|
+
var ToolBarContainer = /*#__PURE__*/_styledComponents["default"].div.withConfig({
|
|
87
|
+
displayName: "mobile-tool-bar__ToolBarContainer",
|
|
88
|
+
componentId: "do65sv-4"
|
|
89
|
+
})(["display:flex;align-items:center;width:fit-content;background-color:", ";padding:8px 16px;border-radius:60px;position:fixed;left:50%;transform:translate(-50%,0);bottom:8px;z-index:999;height:", ";transition:height 100ms;box-shadow:", ";", "{background-color:", ";box-shadow:", ";}"], function (props) {
|
|
90
|
+
return props.bgColor;
|
|
91
|
+
}, function (props) {
|
|
92
|
+
return props.hideText ? '46px' : '56px';
|
|
93
|
+
}, function (props) {
|
|
94
|
+
return props.shadow;
|
|
95
|
+
}, ShareContainer, function (props) {
|
|
96
|
+
return props.bgColor;
|
|
97
|
+
}, function (props) {
|
|
98
|
+
return props.shadow;
|
|
99
|
+
});
|
|
100
|
+
|
|
101
|
+
var FbShare = function FbShare(_ref) {
|
|
102
|
+
var appID = _ref.appID;
|
|
103
|
+
var themeContext = (0, _react.useContext)(_styledComponents.ThemeContext);
|
|
104
|
+
var theme = themeContext.name === _theme["default"].article.v2.photo ? 'photography' : 'normal';
|
|
105
|
+
var releaseBranch = themeContext.releaseBranch;
|
|
106
|
+
|
|
107
|
+
var shareToFb = function shareToFb() {
|
|
108
|
+
var currentURL = window.location.href;
|
|
109
|
+
var location = 'https://www.facebook.com/dialog/feed?' + 'display=page' + "&app_id=".concat(appID) + "&link=".concat(encodeURIComponent(currentURL)) + "&redirect_uri=".concat(encodeURIComponent('https://www.facebook.com/'));
|
|
110
|
+
window.open(location, '_blank');
|
|
111
|
+
};
|
|
112
|
+
|
|
113
|
+
return /*#__PURE__*/_react["default"].createElement(ShareContainer, {
|
|
114
|
+
id: "fb-share",
|
|
115
|
+
onClick: shareToFb
|
|
116
|
+
}, /*#__PURE__*/_react["default"].createElement(_button.IconButton, {
|
|
117
|
+
iconComponent: /*#__PURE__*/_react["default"].createElement(_icon.Facebook, {
|
|
118
|
+
releaseBranch: releaseBranch
|
|
119
|
+
}),
|
|
120
|
+
theme: theme
|
|
121
|
+
}));
|
|
122
|
+
};
|
|
123
|
+
|
|
124
|
+
FbShare.propTypes = {
|
|
125
|
+
appID: _aside["default"].tools.fbAppID
|
|
126
|
+
};
|
|
127
|
+
|
|
128
|
+
var LineShare = function LineShare() {
|
|
129
|
+
var themeContext = (0, _react.useContext)(_styledComponents.ThemeContext);
|
|
130
|
+
var theme = themeContext.name === _theme["default"].article.v2.photo ? 'photography' : 'normal';
|
|
131
|
+
var releaseBranch = themeContext.releaseBranch;
|
|
132
|
+
|
|
133
|
+
var shareToLine = function shareToLine() {
|
|
134
|
+
var currentURL = window.location.href;
|
|
135
|
+
var location = "https://social-plugins.line.me/lineit/share?url=".concat(encodeURIComponent(currentURL));
|
|
136
|
+
window.open(location, '_blank');
|
|
137
|
+
};
|
|
138
|
+
|
|
139
|
+
return /*#__PURE__*/_react["default"].createElement(ShareContainer, {
|
|
140
|
+
id: "line-share",
|
|
141
|
+
onClick: shareToLine
|
|
142
|
+
}, /*#__PURE__*/_react["default"].createElement(_button.IconButton, {
|
|
143
|
+
iconComponent: /*#__PURE__*/_react["default"].createElement(_icon.Line, {
|
|
144
|
+
releaseBranch: releaseBranch
|
|
145
|
+
}),
|
|
146
|
+
theme: theme
|
|
147
|
+
}));
|
|
148
|
+
};
|
|
149
|
+
|
|
150
|
+
var TwitterShare = function TwitterShare() {
|
|
151
|
+
var themeContext = (0, _react.useContext)(_styledComponents.ThemeContext);
|
|
152
|
+
var theme = themeContext.name === _theme["default"].article.v2.photo ? 'photography' : 'normal';
|
|
153
|
+
var releaseBranch = themeContext.releaseBranch;
|
|
154
|
+
|
|
155
|
+
var shareToTwitter = function shareToTwitter() {
|
|
156
|
+
var currentURL = window.location.href;
|
|
157
|
+
var location = 'https://twitter.com/intent/tweet?' + "url=".concat(encodeURIComponent(currentURL), "&text=").concat(encodeURIComponent(document.title + ' #報導者'));
|
|
158
|
+
window.open(location, '_blank');
|
|
159
|
+
};
|
|
160
|
+
|
|
161
|
+
return /*#__PURE__*/_react["default"].createElement(ShareContainer, {
|
|
162
|
+
id: "twitter-share",
|
|
163
|
+
onClick: shareToTwitter
|
|
164
|
+
}, /*#__PURE__*/_react["default"].createElement(_button.IconButton, {
|
|
165
|
+
iconComponent: /*#__PURE__*/_react["default"].createElement(_icon.Twitter, {
|
|
166
|
+
releaseBranch: releaseBranch
|
|
167
|
+
}),
|
|
168
|
+
theme: theme
|
|
169
|
+
}));
|
|
170
|
+
};
|
|
171
|
+
|
|
172
|
+
var CopyUrl = function CopyUrl(_ref2) {
|
|
173
|
+
var _ref2$onclick = _ref2.onclick,
|
|
174
|
+
onclick = _ref2$onclick === void 0 ? defaultFunc : _ref2$onclick;
|
|
175
|
+
var themeContext = (0, _react.useContext)(_styledComponents.ThemeContext);
|
|
176
|
+
var theme = themeContext.name === _theme["default"].article.v2.photo ? 'photography' : 'normal';
|
|
177
|
+
var releaseBranch = themeContext.releaseBranch;
|
|
178
|
+
|
|
179
|
+
var copyUrl = /*#__PURE__*/function () {
|
|
180
|
+
var _ref3 = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() {
|
|
181
|
+
var currentURL;
|
|
182
|
+
return regeneratorRuntime.wrap(function _callee$(_context) {
|
|
183
|
+
while (1) {
|
|
184
|
+
switch (_context.prev = _context.next) {
|
|
185
|
+
case 0:
|
|
186
|
+
_context.prev = 0;
|
|
187
|
+
currentURL = window.location.href;
|
|
188
|
+
_context.next = 4;
|
|
189
|
+
return navigator.clipboard.writeText(currentURL);
|
|
190
|
+
|
|
191
|
+
case 4:
|
|
192
|
+
onclick(true);
|
|
193
|
+
_context.next = 10;
|
|
194
|
+
break;
|
|
195
|
+
|
|
196
|
+
case 7:
|
|
197
|
+
_context.prev = 7;
|
|
198
|
+
_context.t0 = _context["catch"](0);
|
|
199
|
+
onclick(false);
|
|
200
|
+
|
|
201
|
+
case 10:
|
|
202
|
+
case "end":
|
|
203
|
+
return _context.stop();
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
}, _callee, null, [[0, 7]]);
|
|
207
|
+
}));
|
|
208
|
+
|
|
209
|
+
return function copyUrl() {
|
|
210
|
+
return _ref3.apply(this, arguments);
|
|
211
|
+
};
|
|
212
|
+
}();
|
|
213
|
+
|
|
214
|
+
return /*#__PURE__*/_react["default"].createElement(ShareContainer, {
|
|
215
|
+
onClick: copyUrl
|
|
216
|
+
}, /*#__PURE__*/_react["default"].createElement(_button.IconButton, {
|
|
217
|
+
iconComponent: /*#__PURE__*/_react["default"].createElement(_icon.Copy, {
|
|
218
|
+
releaseBranch: releaseBranch
|
|
219
|
+
}),
|
|
220
|
+
theme: theme
|
|
221
|
+
}));
|
|
222
|
+
};
|
|
223
|
+
|
|
224
|
+
CopyUrl.propTypes = {
|
|
225
|
+
onclick: _propTypes["default"].func
|
|
226
|
+
};
|
|
227
|
+
|
|
228
|
+
var ShareBy = function ShareBy(_ref4) {
|
|
229
|
+
var fbAppID = _ref4.fbAppID;
|
|
230
|
+
|
|
231
|
+
var _useState = (0, _react.useState)(false),
|
|
232
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
233
|
+
showOption = _useState2[0],
|
|
234
|
+
setShowState = _useState2[1];
|
|
235
|
+
|
|
236
|
+
var _useState3 = (0, _react.useState)(false),
|
|
237
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
238
|
+
showSnackBar = _useState4[0],
|
|
239
|
+
setSnackBar = _useState4[1];
|
|
240
|
+
|
|
241
|
+
var hideText = (0, _react.useContext)(HideTextContext);
|
|
242
|
+
var themeContext = (0, _react.useContext)(_styledComponents.ThemeContext);
|
|
243
|
+
var theme = themeContext.name === _theme["default"].article.v2.photo ? 'photography' : 'normal';
|
|
244
|
+
var releaseBranch = themeContext.releaseBranch;
|
|
245
|
+
|
|
246
|
+
var onCopyUrl = function onCopyUrl(isCopied) {
|
|
247
|
+
if (!isCopied) {
|
|
248
|
+
return;
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
setSnackBar(true);
|
|
252
|
+
setTimeout(function () {
|
|
253
|
+
setSnackBar(false);
|
|
254
|
+
}, 3000);
|
|
255
|
+
};
|
|
256
|
+
|
|
257
|
+
var onButtonClick = function onButtonClick() {
|
|
258
|
+
return setShowState(function (prevValue) {
|
|
259
|
+
return !prevValue;
|
|
260
|
+
});
|
|
261
|
+
};
|
|
262
|
+
|
|
263
|
+
return /*#__PURE__*/_react["default"].createElement(ButtonContainer, {
|
|
264
|
+
onClick: onButtonClick
|
|
265
|
+
}, /*#__PURE__*/_react["default"].createElement(_button.IconWithTextButton, {
|
|
266
|
+
text: "\u5206\u4EAB",
|
|
267
|
+
iconComponent: /*#__PURE__*/_react["default"].createElement(_icon.Share, {
|
|
268
|
+
releaseBranch: releaseBranch
|
|
269
|
+
}),
|
|
270
|
+
theme: theme,
|
|
271
|
+
hideText: hideText
|
|
272
|
+
}), /*#__PURE__*/_react["default"].createElement(OptionContainer, {
|
|
273
|
+
isShow: showOption
|
|
274
|
+
}, /*#__PURE__*/_react["default"].createElement(FbShare, {
|
|
275
|
+
appID: fbAppID
|
|
276
|
+
}), /*#__PURE__*/_react["default"].createElement(LineShare, null), /*#__PURE__*/_react["default"].createElement(TwitterShare, null), /*#__PURE__*/_react["default"].createElement(CopyUrl, {
|
|
277
|
+
onclick: onCopyUrl
|
|
278
|
+
})), /*#__PURE__*/_react["default"].createElement(SnackBarContainer, {
|
|
279
|
+
showSnackBar: showSnackBar
|
|
280
|
+
}, /*#__PURE__*/_react["default"].createElement(_snackBar.SnackBar, {
|
|
281
|
+
text: "\u5DF2\u8907\u88FD",
|
|
282
|
+
theme: theme
|
|
283
|
+
})));
|
|
284
|
+
};
|
|
285
|
+
|
|
286
|
+
ShareBy.propTypes = {
|
|
287
|
+
fbAppID: _aside["default"].tools.fbAppID
|
|
288
|
+
};
|
|
289
|
+
|
|
290
|
+
var FontLevel = function FontLevel(_ref5) {
|
|
291
|
+
var changeFontLevel = _ref5.changeFontLevel;
|
|
292
|
+
var hideText = (0, _react.useContext)(HideTextContext);
|
|
293
|
+
var themeContext = (0, _react.useContext)(_styledComponents.ThemeContext);
|
|
294
|
+
var theme = themeContext.name === _theme["default"].article.v2.photo ? 'photography' : 'normal';
|
|
295
|
+
var releaseBranch = themeContext.releaseBranch;
|
|
296
|
+
return /*#__PURE__*/_react["default"].createElement(ButtonContainer, {
|
|
297
|
+
onClick: changeFontLevel
|
|
298
|
+
}, /*#__PURE__*/_react["default"].createElement(_button.IconWithTextButton, {
|
|
299
|
+
text: "\u6587\u5B57\u5927\u5C0F",
|
|
300
|
+
iconComponent: /*#__PURE__*/_react["default"].createElement(_icon.Text, {
|
|
301
|
+
releaseBranch: releaseBranch
|
|
302
|
+
}),
|
|
303
|
+
theme: theme,
|
|
304
|
+
hideText: hideText
|
|
305
|
+
}));
|
|
306
|
+
};
|
|
307
|
+
|
|
308
|
+
FontLevel.propTypes = {
|
|
309
|
+
changeFontLevel: _aside["default"].tools.onFontLevelChange
|
|
310
|
+
};
|
|
311
|
+
|
|
312
|
+
var BookmarkBlock = function BookmarkBlock(_ref6) {
|
|
313
|
+
var articleMeta = _ref6.articleMeta;
|
|
314
|
+
var hideText = (0, _react.useContext)(HideTextContext);
|
|
315
|
+
var themeContext = (0, _react.useContext)(_styledComponents.ThemeContext);
|
|
316
|
+
var theme = themeContext.name === _theme["default"].article.v2.photo ? 'photography' : 'normal';
|
|
317
|
+
var releaseBranch = themeContext.releaseBranch;
|
|
318
|
+
|
|
319
|
+
var renderIcon = function renderIcon(isBookmarked, addAction, removeAction) {
|
|
320
|
+
var iconType = isBookmarked ? 'saved' : 'add';
|
|
321
|
+
return /*#__PURE__*/_react["default"].createElement(ButtonContainer, {
|
|
322
|
+
onClick: isBookmarked ? removeAction : addAction
|
|
323
|
+
}, /*#__PURE__*/_react["default"].createElement(_button.IconWithTextButton, {
|
|
324
|
+
text: "\u52A0\u5165\u66F8\u7C64",
|
|
325
|
+
iconComponent: /*#__PURE__*/_react["default"].createElement(_icon.Bookmark, {
|
|
326
|
+
type: iconType,
|
|
327
|
+
releaseBranch: releaseBranch
|
|
328
|
+
}),
|
|
329
|
+
theme: theme,
|
|
330
|
+
hideText: hideText
|
|
331
|
+
}));
|
|
332
|
+
};
|
|
333
|
+
|
|
334
|
+
return /*#__PURE__*/_react["default"].createElement(_bookmarkWidget["default"], {
|
|
335
|
+
toAutoCheck: false,
|
|
336
|
+
articleMeta: articleMeta,
|
|
337
|
+
renderIcon: renderIcon
|
|
338
|
+
});
|
|
339
|
+
};
|
|
340
|
+
|
|
341
|
+
BookmarkBlock.propTypes = {
|
|
342
|
+
articleMeta: _aside["default"].tools.articleMetaForBookmark
|
|
343
|
+
};
|
|
344
|
+
|
|
345
|
+
var BackToTopic = function BackToTopic(_ref7) {
|
|
346
|
+
var backToTopic = _ref7.backToTopic;
|
|
347
|
+
var hideText = (0, _react.useContext)(HideTextContext);
|
|
348
|
+
var themeContext = (0, _react.useContext)(_styledComponents.ThemeContext);
|
|
349
|
+
var theme = themeContext.name === _theme["default"].article.v2.photo ? 'photography' : 'normal';
|
|
350
|
+
var releaseBranch = themeContext.releaseBranch;
|
|
351
|
+
return /*#__PURE__*/_react["default"].createElement(_dynamicComponentsContext["default"].Consumer, null, function (components) {
|
|
352
|
+
return /*#__PURE__*/_react["default"].createElement(components.Link, {
|
|
353
|
+
to: backToTopic,
|
|
354
|
+
target: "_self"
|
|
355
|
+
}, /*#__PURE__*/_react["default"].createElement(ButtonContainer, null, /*#__PURE__*/_react["default"].createElement(_button.IconWithTextButton, {
|
|
356
|
+
text: "\u5C08\u984C",
|
|
357
|
+
iconComponent: /*#__PURE__*/_react["default"].createElement(_icon.Topic, {
|
|
358
|
+
releaseBranch: releaseBranch
|
|
359
|
+
}),
|
|
360
|
+
theme: theme,
|
|
361
|
+
hideText: hideText
|
|
362
|
+
})));
|
|
363
|
+
});
|
|
364
|
+
};
|
|
365
|
+
|
|
366
|
+
BackToTopic.propTypes = {
|
|
367
|
+
backToTopic: _aside["default"].tools.backToTopic
|
|
368
|
+
};
|
|
369
|
+
|
|
370
|
+
var RelatedPost = function RelatedPost() {
|
|
371
|
+
var hideText = (0, _react.useContext)(HideTextContext);
|
|
372
|
+
var themeContext = (0, _react.useContext)(_styledComponents.ThemeContext);
|
|
373
|
+
var theme = themeContext.name === _theme["default"].article.v2.photo ? 'photography' : 'normal';
|
|
374
|
+
var releaseBranch = themeContext.releaseBranch;
|
|
375
|
+
|
|
376
|
+
var scrollToBottom = function scrollToBottom() {
|
|
377
|
+
document.getElementById(_anchor.relatedPostAnchor).scrollIntoView();
|
|
378
|
+
};
|
|
379
|
+
|
|
380
|
+
return /*#__PURE__*/_react["default"].createElement(ButtonContainer, {
|
|
381
|
+
onClick: scrollToBottom
|
|
382
|
+
}, /*#__PURE__*/_react["default"].createElement(_button.IconWithTextButton, {
|
|
383
|
+
text: "\u76F8\u95DC\u6587\u7AE0",
|
|
384
|
+
iconComponent: /*#__PURE__*/_react["default"].createElement(_icon.Article, {
|
|
385
|
+
releaseBranch: releaseBranch
|
|
386
|
+
}),
|
|
387
|
+
theme: theme,
|
|
388
|
+
hideText: hideText
|
|
389
|
+
}));
|
|
390
|
+
};
|
|
391
|
+
|
|
392
|
+
var ToolBar = function ToolBar(_ref8) {
|
|
393
|
+
var backToTopic = _ref8.backToTopic,
|
|
394
|
+
_ref8$fbAppID = _ref8.fbAppID,
|
|
395
|
+
fbAppID = _ref8$fbAppID === void 0 ? defaultFbAppID : _ref8$fbAppID,
|
|
396
|
+
articleMetaForBookmark = _ref8.articleMetaForBookmark,
|
|
397
|
+
onFontLevelChange = _ref8.onFontLevelChange,
|
|
398
|
+
className = _ref8.className;
|
|
399
|
+
|
|
400
|
+
var _useState5 = (0, _react.useState)('init'),
|
|
401
|
+
_useState6 = _slicedToArray(_useState5, 2),
|
|
402
|
+
scrollDirection = _useState6[0],
|
|
403
|
+
setScrollDirection = _useState6[1];
|
|
404
|
+
|
|
405
|
+
(0, _react.useEffect)(function () {
|
|
406
|
+
var threshold = 8;
|
|
407
|
+
var lastScrollY = window.pageYOffset;
|
|
408
|
+
var ticking = false;
|
|
409
|
+
|
|
410
|
+
var updateScrollDirection = function updateScrollDirection() {
|
|
411
|
+
var scrollY = window.pageYOffset;
|
|
412
|
+
|
|
413
|
+
if (Math.abs(scrollY - lastScrollY) < threshold) {
|
|
414
|
+
ticking = false;
|
|
415
|
+
return;
|
|
416
|
+
}
|
|
417
|
+
|
|
418
|
+
var scrollDirection = scrollY > lastScrollY ? 'down' : 'up';
|
|
419
|
+
setScrollDirection(scrollDirection);
|
|
420
|
+
lastScrollY = scrollY > 0 ? scrollY : 0;
|
|
421
|
+
ticking = false;
|
|
422
|
+
};
|
|
423
|
+
|
|
424
|
+
var onScroll = function onScroll() {
|
|
425
|
+
if (!ticking) {
|
|
426
|
+
window.requestAnimationFrame(updateScrollDirection);
|
|
427
|
+
ticking = true;
|
|
428
|
+
}
|
|
429
|
+
};
|
|
430
|
+
|
|
431
|
+
window.addEventListener('scroll', onScroll);
|
|
432
|
+
return function () {
|
|
433
|
+
window.removeEventListener('scroll', onScroll);
|
|
434
|
+
lastScrollY = null;
|
|
435
|
+
ticking = null;
|
|
436
|
+
};
|
|
437
|
+
}, [scrollDirection]);
|
|
438
|
+
var themeContext = (0, _react.useContext)(_styledComponents.ThemeContext);
|
|
439
|
+
|
|
440
|
+
var _getToolBarTheme = (0, _theme2.getToolBarTheme)(themeContext.name),
|
|
441
|
+
bgColor = _getToolBarTheme.bgColor,
|
|
442
|
+
shadow = _getToolBarTheme.shadow;
|
|
443
|
+
|
|
444
|
+
var backToTopicJSX = backToTopic ? /*#__PURE__*/_react["default"].createElement(BackToTopic, null) : '';
|
|
445
|
+
var hideText = scrollDirection === 'down';
|
|
446
|
+
return /*#__PURE__*/_react["default"].createElement(HideTextContext.Provider, {
|
|
447
|
+
value: hideText
|
|
448
|
+
}, /*#__PURE__*/_react["default"].createElement(ToolBarContainer, {
|
|
449
|
+
bgColor: bgColor,
|
|
450
|
+
shadow: shadow,
|
|
451
|
+
hideText: hideText,
|
|
452
|
+
className: className
|
|
453
|
+
}, /*#__PURE__*/_react["default"].createElement(FontLevel, {
|
|
454
|
+
changeFontLevel: onFontLevelChange
|
|
455
|
+
}), /*#__PURE__*/_react["default"].createElement(ShareBy, {
|
|
456
|
+
fbAppID: fbAppID
|
|
457
|
+
}), /*#__PURE__*/_react["default"].createElement(BookmarkBlock, {
|
|
458
|
+
articleMeta: articleMetaForBookmark
|
|
459
|
+
}), /*#__PURE__*/_react["default"].createElement(RelatedPost, null), backToTopicJSX));
|
|
460
|
+
};
|
|
461
|
+
|
|
462
|
+
ToolBar.propTypes = _aside["default"].tools;
|
|
463
|
+
var _default = ToolBar;
|
|
464
|
+
exports["default"] = _default;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports["default"] = exports.getToolBarTheme = void 0;
|
|
7
|
+
|
|
8
|
+
var _theme = _interopRequireDefault(require("../../../constants/theme"));
|
|
9
|
+
|
|
10
|
+
var _color = require("@twreporter/core/lib/constants/color");
|
|
11
|
+
|
|
12
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
|
|
13
|
+
|
|
14
|
+
// constants
|
|
15
|
+
// @twreporter
|
|
16
|
+
var getToolBarTheme = function getToolBarTheme(theme) {
|
|
17
|
+
switch (theme) {
|
|
18
|
+
case _theme["default"].article.v2.photo:
|
|
19
|
+
return {
|
|
20
|
+
bgColor: _color.colorPhoto.dark,
|
|
21
|
+
shadow: '0px 0px 8px rgba(0, 0, 0, 0.5)'
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
case _theme["default"].article.v2["default"]:
|
|
25
|
+
default:
|
|
26
|
+
return {
|
|
27
|
+
bgColor: _color.colorGrayscale.white,
|
|
28
|
+
shadow: '0px 0px 8px rgba(0, 0, 0, 0.1)'
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
exports.getToolBarTheme = getToolBarTheme;
|
|
34
|
+
var _default = {
|
|
35
|
+
getToolBarTheme: getToolBarTheme
|
|
36
|
+
};
|
|
37
|
+
exports["default"] = _default;
|
|
@@ -83,7 +83,8 @@ var License = /*#__PURE__*/function (_React$PureComponent) {
|
|
|
83
83
|
value: function render() {
|
|
84
84
|
var _this$props = this.props,
|
|
85
85
|
license = _this$props.license,
|
|
86
|
-
publishedDate = _this$props.publishedDate
|
|
86
|
+
publishedDate = _this$props.publishedDate,
|
|
87
|
+
id = _this$props.id;
|
|
87
88
|
|
|
88
89
|
var year = this._extractYear(publishedDate);
|
|
89
90
|
|
|
@@ -95,7 +96,9 @@ var License = /*#__PURE__*/function (_React$PureComponent) {
|
|
|
95
96
|
licenseJSX = /*#__PURE__*/_react["default"].createElement(Text, null, "\u672C\u6587\u4F9D CC \u5275\u7528\u59D3\u540D\u6A19\u793A-\u975E\u5546\u696D\u6027-\u7981\u6B62\u6539\u4F5C3.0\u53F0\u7063\u6388\u6B0A\u689D\u6B3E\u91CB\u51FA");
|
|
96
97
|
}
|
|
97
98
|
|
|
98
|
-
return /*#__PURE__*/_react["default"].createElement(Container,
|
|
99
|
+
return /*#__PURE__*/_react["default"].createElement(Container, {
|
|
100
|
+
id: id
|
|
101
|
+
}, licenseJSX);
|
|
99
102
|
}
|
|
100
103
|
}]);
|
|
101
104
|
|
|
@@ -106,10 +109,12 @@ exports["default"] = License;
|
|
|
106
109
|
|
|
107
110
|
_defineProperty(License, "defaultProps", {
|
|
108
111
|
license: 'Creative-Commons',
|
|
109
|
-
publishedDate: ''
|
|
112
|
+
publishedDate: '',
|
|
113
|
+
id: ''
|
|
110
114
|
});
|
|
111
115
|
|
|
112
116
|
_defineProperty(License, "propTypes", {
|
|
113
117
|
license: _propTypes["default"].string,
|
|
114
|
-
publishedDate: _propTypes["default"].string
|
|
118
|
+
publishedDate: _propTypes["default"].string,
|
|
119
|
+
id: _propTypes["default"].string
|
|
115
120
|
});
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@twreporter/react-article-components",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.5.0-rc.0",
|
|
4
4
|
"description": "The Reporter react article components, which are used in article page",
|
|
5
5
|
"main": "lib/components/article-page.js",
|
|
6
6
|
"repository": "https://github.com/twreporter/twreporter-npm-packages.git",
|
|
@@ -25,9 +25,9 @@
|
|
|
25
25
|
},
|
|
26
26
|
"dependencies": {
|
|
27
27
|
"@twreporter/core": "^1.4.1",
|
|
28
|
-
"@twreporter/react-components": "^8.
|
|
28
|
+
"@twreporter/react-components": "^8.10.0-rc.0",
|
|
29
29
|
"@twreporter/redux": "^7.2.1",
|
|
30
|
-
"@twreporter/universal-header": "^2.2.
|
|
30
|
+
"@twreporter/universal-header": "^2.2.10-rc.0",
|
|
31
31
|
"howler": "^2.2.3",
|
|
32
32
|
"lodash": "^4.17.11",
|
|
33
33
|
"memoize-one": "^5.0.5",
|
|
@@ -39,5 +39,5 @@
|
|
|
39
39
|
"files": [
|
|
40
40
|
"lib"
|
|
41
41
|
],
|
|
42
|
-
"gitHead": "
|
|
42
|
+
"gitHead": "9cc4e642f326544d628a042ae83496476d150b8d"
|
|
43
43
|
}
|