@kids-reporter/draft-renderer 1.0.4 → 1.0.5

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.
@@ -3,11 +3,8 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.ArticleBodyDraftRenderer = void 0;
7
- exports.ArticleIntroductionDraftRenderer = ArticleIntroductionDraftRenderer;
8
- exports.DraftRenderer = DraftRenderer;
9
- exports.ProjectContentDraftRenderer = ProjectContentDraftRenderer;
10
- var _react = _interopRequireDefault(require("react"));
6
+ exports.ProjectContentDraftRenderer = exports.DraftRenderer = exports.ArticleIntroductionDraftRenderer = exports.ArticleBodyDraftRenderer = void 0;
7
+ var _react = _interopRequireWildcard(require("react"));
11
8
  var _index = _interopRequireDefault(require("./block-render-maps/index"));
12
9
  var _draftJs = require("draft-js");
13
10
  var _index2 = require("./utils/index");
@@ -16,6 +13,8 @@ var _blockRendererFn = require("./block-renderer-fn");
16
13
  var _customStyleFn = require("./custom-style-fn");
17
14
  var _entityDecorators = require("./entity-decorators");
18
15
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
16
+ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
17
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
19
18
  const blockRendererFn = block => {
20
19
  const atomicBlockObj = (0, _blockRendererFn.atomicBlockRenderer)(block);
21
20
  return atomicBlockObj;
@@ -25,17 +24,30 @@ var FontSizeLevel = /*#__PURE__*/function (FontSizeLevel) {
25
24
  FontSizeLevel["LARGE"] = "large";
26
25
  return FontSizeLevel;
27
26
  }(FontSizeLevel || {});
28
- function DraftRenderer({
27
+ const DraftRenderer = ({
29
28
  rawContentState,
30
29
  themeColor = _index2.ThemeColorEnum.RED,
31
- fontSizeLevel = FontSizeLevel.NORMAL
32
- }) {
30
+ fontSizeLevel = FontSizeLevel.NORMAL,
31
+ initiallyScrollTo = '',
32
+ offsetTop = 0
33
+ }) => {
33
34
  const contentState = (0, _draftJs.convertFromRaw)(rawContentState);
34
35
  const editorState = _draftJs.EditorState.createWithContent(contentState, _entityDecorators.decorator);
36
+ const scrollToElement = hash => {
37
+ const anchor = document.querySelector(hash);
38
+ anchor && window.scrollTo({
39
+ top: anchor.offsetTop - offsetTop,
40
+ behavior: 'smooth'
41
+ });
42
+ };
43
+ (0, _react.useEffect)(() => {
44
+ initiallyScrollTo && scrollToElement(initiallyScrollTo);
45
+ }, []);
35
46
  return /*#__PURE__*/_react.default.createElement(_styledComponents.ThemeProvider, {
36
47
  theme: {
37
48
  themeColor,
38
- fontSizeLevel
49
+ fontSizeLevel,
50
+ offsetTop
39
51
  }
40
52
  }, /*#__PURE__*/_react.default.createElement(_draftJs.Editor, {
41
53
  editorState: editorState,
@@ -47,13 +59,14 @@ function DraftRenderer({
47
59
  ,
48
60
  onChange: () => {}
49
61
  }));
50
- }
62
+ };
63
+ exports.DraftRenderer = DraftRenderer;
51
64
  const ArticleBodyDraftRenderer = exports.ArticleBodyDraftRenderer = DraftRenderer;
52
- function ArticleIntroductionDraftRenderer({
65
+ const ArticleIntroductionDraftRenderer = ({
53
66
  rawContentState,
54
67
  themeColor = _index2.ThemeColorEnum.RED,
55
68
  fontSizeLevel = FontSizeLevel.NORMAL
56
- }) {
69
+ }) => {
57
70
  const contentState = (0, _draftJs.convertFromRaw)(rawContentState);
58
71
  const editorState = _draftJs.EditorState.createWithContent(contentState, _entityDecorators.decorator);
59
72
  return /*#__PURE__*/_react.default.createElement(_styledComponents.ThemeProvider, {
@@ -70,12 +83,13 @@ function ArticleIntroductionDraftRenderer({
70
83
  ,
71
84
  onChange: () => {}
72
85
  }));
73
- }
74
- function ProjectContentDraftRenderer({
86
+ };
87
+ exports.ArticleIntroductionDraftRenderer = ArticleIntroductionDraftRenderer;
88
+ const ProjectContentDraftRenderer = ({
75
89
  rawContentState,
76
90
  themeColor = _index2.ThemeColorEnum.BLUE,
77
91
  fontSizeLevel = FontSizeLevel.NORMAL
78
- }) {
92
+ }) => {
79
93
  const contentState = (0, _draftJs.convertFromRaw)(rawContentState);
80
94
  const editorState = _draftJs.EditorState.createWithContent(contentState, _entityDecorators.decorator);
81
95
  return /*#__PURE__*/_react.default.createElement(_styledComponents.ThemeProvider, {
@@ -93,4 +107,5 @@ function ProjectContentDraftRenderer({
93
107
  ,
94
108
  onChange: () => {}
95
109
  }));
96
- }
110
+ };
111
+ exports.ProjectContentDraftRenderer = ProjectContentDraftRenderer;
@@ -3,17 +3,10 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.findAnchorEntities = exports.anchorDecorator = exports.ANCHOR_ENTITY_TYPE = void 0;
6
+ exports.anchorDecorator = void 0;
7
7
  var _react = _interopRequireDefault(require("react"));
8
+ var _entity = require("../utils/entity");
8
9
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
9
- const ANCHOR_ENTITY_TYPE = exports.ANCHOR_ENTITY_TYPE = 'TOC_ANCHOR';
10
- const findAnchorEntities = (contentBlock, callback, contentState) => {
11
- contentBlock.findEntityRanges(character => {
12
- const entityKey = character.getEntity();
13
- return entityKey !== null && contentState.getEntity(entityKey).getType() === ANCHOR_ENTITY_TYPE;
14
- }, callback);
15
- };
16
- exports.findAnchorEntities = findAnchorEntities;
17
10
  const Anchor = props => {
18
11
  var _contentState$getEnti;
19
12
  const {
@@ -21,12 +14,12 @@ const Anchor = props => {
21
14
  contentState,
22
15
  entityKey
23
16
  } = props;
24
- const key = contentState === null || contentState === void 0 || (_contentState$getEnti = contentState.getEntity(entityKey)) === null || _contentState$getEnti === void 0 || (_contentState$getEnti = _contentState$getEnti.getData()) === null || _contentState$getEnti === void 0 ? void 0 : _contentState$getEnti.anchorKey;
17
+ const id = contentState === null || contentState === void 0 || (_contentState$getEnti = contentState.getEntity(entityKey)) === null || _contentState$getEnti === void 0 || (_contentState$getEnti = _contentState$getEnti.getData()) === null || _contentState$getEnti === void 0 ? void 0 : _contentState$getEnti.anchorID;
25
18
  return /*#__PURE__*/_react.default.createElement("span", {
26
- id: `anchor-${key}`
19
+ id: id
27
20
  }, children);
28
21
  };
29
22
  const anchorDecorator = exports.anchorDecorator = {
30
- strategy: findAnchorEntities,
23
+ strategy: (0, _entity.findEntitiesByType)(_entity.ENTITY.Anchor),
31
24
  component: Anchor
32
25
  };
@@ -7,8 +7,9 @@ exports.annotationDecorator = void 0;
7
7
  var _react = _interopRequireWildcard(require("react"));
8
8
  var _styledComponents = _interopRequireDefault(require("styled-components"));
9
9
  var _draftJs = require("draft-js");
10
- var _index = _interopRequireDefault(require("../block-render-maps/index"));
11
- var _index2 = require("../entity-decorators/index");
10
+ var _blockRenderMaps = _interopRequireDefault(require("../block-render-maps"));
11
+ var _entityDecorators = require("../entity-decorators");
12
+ var _entity = require("../utils/entity");
12
13
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13
14
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
14
15
  function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
@@ -71,7 +72,7 @@ function AnnotationBlock(props) {
71
72
  rawContentState
72
73
  } = props.contentState.getEntity(props.entityKey).getData();
73
74
  const contentState = (0, _draftJs.convertFromRaw)(rawContentState);
74
- const editorState = _draftJs.EditorState.createWithContent(contentState, _index2.decorator);
75
+ const editorState = _draftJs.EditorState.createWithContent(contentState, _entityDecorators.decorator);
75
76
  return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(AnnotationWrapper, {
76
77
  onClick: e => {
77
78
  e.preventDefault();
@@ -81,20 +82,14 @@ function AnnotationBlock(props) {
81
82
  $showContent: showContent
82
83
  })), showContent ? /*#__PURE__*/_react.default.createElement(AnnotationBody, null, /*#__PURE__*/_react.default.createElement(_draftJs.Editor, {
83
84
  editorState: editorState,
84
- blockRenderMap: _index.default.annotation,
85
+ blockRenderMap: _blockRenderMaps.default.annotation,
85
86
  readOnly: true
86
87
  // eslint-disable-next-line @typescript-eslint/no-empty-function
87
88
  ,
88
89
  onChange: () => {}
89
90
  })) : null);
90
91
  }
91
- function findAnnotationEntities(contentBlock, callback, contentState) {
92
- contentBlock.findEntityRanges(character => {
93
- const entityKey = character.getEntity();
94
- return entityKey !== null && contentState.getEntity(entityKey).getType() === 'ANNOTATION';
95
- }, callback);
96
- }
97
92
  const annotationDecorator = exports.annotationDecorator = {
98
- strategy: findAnnotationEntities,
93
+ strategy: (0, _entity.findEntitiesByType)(_entity.ENTITY.Annotation),
99
94
  component: AnnotationBlock
100
95
  };
@@ -3,12 +3,6 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- Object.defineProperty(exports, "ANCHOR_ENTITY_TYPE", {
7
- enumerable: true,
8
- get: function () {
9
- return _anchor.ANCHOR_ENTITY_TYPE;
10
- }
11
- });
12
6
  Object.defineProperty(exports, "annotationDecorator", {
13
7
  enumerable: true,
14
8
  get: function () {
@@ -16,12 +10,6 @@ Object.defineProperty(exports, "annotationDecorator", {
16
10
  }
17
11
  });
18
12
  exports.decorator = void 0;
19
- Object.defineProperty(exports, "findAnchorEntities", {
20
- enumerable: true,
21
- get: function () {
22
- return _anchor.findAnchorEntities;
23
- }
24
- });
25
13
  Object.defineProperty(exports, "linkDecorator", {
26
14
  enumerable: true,
27
15
  get: function () {
@@ -31,5 +19,6 @@ Object.defineProperty(exports, "linkDecorator", {
31
19
  var _draftJs = require("draft-js");
32
20
  var _annotationDecorator = require("./annotation-decorator");
33
21
  var _linkDecorator = require("./link-decorator");
22
+ var _tocAnchor = require("./toc-anchor");
34
23
  var _anchor = require("./anchor");
35
- const decorator = exports.decorator = new _draftJs.CompositeDecorator([_annotationDecorator.annotationDecorator, _linkDecorator.linkDecorator, _anchor.anchorDecorator]);
24
+ const decorator = exports.decorator = new _draftJs.CompositeDecorator([_annotationDecorator.annotationDecorator, _linkDecorator.linkDecorator, _tocAnchor.tocAnchorDecorator, _anchor.anchorDecorator]);
@@ -5,33 +5,45 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.linkDecorator = void 0;
7
7
  var _react = _interopRequireDefault(require("react"));
8
- var _styledComponents = _interopRequireDefault(require("styled-components"));
8
+ var _styledComponents = _interopRequireWildcard(require("styled-components"));
9
+ var _entity = require("../utils/entity");
10
+ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
11
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
9
12
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
10
13
  const LinkWrapper = _styledComponents.default.a`
11
14
  text-decoration: underline;
12
15
  color: #27b5f7;
13
16
  transition: color 0.1s ease-in;
17
+ cursor: pointer;
14
18
 
15
19
  &:hover {
16
20
  color: #232323;
17
21
  }
18
22
  `;
19
- function findLinkEntities(contentBlock, callback, contentState) {
20
- contentBlock.findEntityRanges(character => {
21
- const entityKey = character.getEntity();
22
- return entityKey !== null && contentState.getEntity(entityKey).getType() === 'LINK';
23
- }, callback);
24
- }
25
- const linkDecorator = exports.linkDecorator = {
26
- strategy: findLinkEntities,
27
- component: Link
28
- };
29
- function Link(props) {
23
+ const Link = props => {
30
24
  const {
31
25
  url
32
26
  } = props.contentState.getEntity(props.entityKey).getData();
33
- return /*#__PURE__*/_react.default.createElement(LinkWrapper, {
27
+ const theme = (0, _styledComponents.useTheme)();
28
+
29
+ // Handling for internal/external links, internal links start with '#'
30
+ const linkProps = url.match(/^#/) ? {
31
+ onClick: () => {
32
+ const anchor = document.querySelector(url);
33
+ if (anchor) {
34
+ window.scrollTo({
35
+ top: anchor.offsetTop - (theme === null || theme === void 0 ? void 0 : theme.offsetTop),
36
+ behavior: 'smooth'
37
+ });
38
+ }
39
+ }
40
+ } : {
34
41
  href: url,
35
- target: "_blank"
36
- }, props.children);
37
- }
42
+ target: '_blank'
43
+ };
44
+ return /*#__PURE__*/_react.default.createElement(LinkWrapper, linkProps, props.children);
45
+ };
46
+ const linkDecorator = exports.linkDecorator = {
47
+ strategy: (0, _entity.findEntitiesByType)(_entity.ENTITY.Link),
48
+ component: Link
49
+ };
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.tocAnchorDecorator = void 0;
7
+ var _react = _interopRequireDefault(require("react"));
8
+ var _entity = require("../utils/entity");
9
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
10
+ const TOCAnchor = props => {
11
+ var _contentState$getEnti;
12
+ const {
13
+ children,
14
+ contentState,
15
+ entityKey
16
+ } = props;
17
+ const key = contentState === null || contentState === void 0 || (_contentState$getEnti = contentState.getEntity(entityKey)) === null || _contentState$getEnti === void 0 || (_contentState$getEnti = _contentState$getEnti.getData()) === null || _contentState$getEnti === void 0 ? void 0 : _contentState$getEnti.anchorKey;
18
+ return /*#__PURE__*/_react.default.createElement("span", {
19
+ id: `toc-anchor-${key}`
20
+ }, children);
21
+ };
22
+ const tocAnchorDecorator = exports.tocAnchorDecorator = {
23
+ strategy: (0, _entity.findEntitiesByType)(_entity.ENTITY.TOCAnchor),
24
+ component: TOCAnchor
25
+ };
package/lib/index.js CHANGED
@@ -3,12 +3,6 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- Object.defineProperty(exports, "ANCHOR_ENTITY_TYPE", {
7
- enumerable: true,
8
- get: function () {
9
- return _entityDecorators.ANCHOR_ENTITY_TYPE;
10
- }
11
- });
12
6
  Object.defineProperty(exports, "ArticleBodyDraftRenderer", {
13
7
  enumerable: true,
14
8
  get: function () {
@@ -27,6 +21,12 @@ Object.defineProperty(exports, "DraftRenderer", {
27
21
  return _draftRenderer.DraftRenderer;
28
22
  }
29
23
  });
24
+ Object.defineProperty(exports, "ENTITY", {
25
+ enumerable: true,
26
+ get: function () {
27
+ return _entity.ENTITY;
28
+ }
29
+ });
30
30
  Object.defineProperty(exports, "ProjectContentDraftRenderer", {
31
31
  enumerable: true,
32
32
  get: function () {
@@ -59,10 +59,10 @@ Object.defineProperty(exports, "customStyleFn", {
59
59
  }
60
60
  });
61
61
  exports.default = void 0;
62
- Object.defineProperty(exports, "findAnchorEntities", {
62
+ Object.defineProperty(exports, "findEntitiesByType", {
63
63
  enumerable: true,
64
64
  get: function () {
65
- return _entityDecorators.findAnchorEntities;
65
+ return _entity.findEntitiesByType;
66
66
  }
67
67
  });
68
68
  Object.defineProperty(exports, "linkDecorator", {
@@ -76,6 +76,7 @@ var _draftRenderer = require("./draft-renderer");
76
76
  var _blockRendererFn = require("./block-renderer-fn");
77
77
  var _blockRenderers = require("./block-renderers");
78
78
  var _entityDecorators = require("./entity-decorators");
79
+ var _entity = require("./utils/entity");
79
80
  var _customStyleFn = require("./custom-style-fn");
80
81
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
81
82
  const blockRenderMap = exports.blockRenderMap = _index.default.content;
@@ -90,6 +91,6 @@ var _default = exports.default = {
90
91
  customStyleFn: _customStyleFn.customStyleFn,
91
92
  annotationDecorator: _entityDecorators.annotationDecorator,
92
93
  linkDecorator: _entityDecorators.linkDecorator,
93
- findAnchorEntities: _entityDecorators.findAnchorEntities,
94
- ANCHOR_ENTITY_TYPE: _entityDecorators.ANCHOR_ENTITY_TYPE
94
+ ENTITY: _entity.ENTITY,
95
+ findEntitiesByType: _entity.findEntitiesByType
95
96
  };
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.findEntitiesByType = exports.ENTITY = void 0;
7
+ let ENTITY = exports.ENTITY = /*#__PURE__*/function (ENTITY) {
8
+ ENTITY["Link"] = "LINK";
9
+ ENTITY["Annotation"] = "ANNOTATION";
10
+ ENTITY["Anchor"] = "ANCHOR";
11
+ ENTITY["TOCAnchor"] = "TOC_ANCHOR";
12
+ return ENTITY;
13
+ }({});
14
+ const findEntitiesByType = type => {
15
+ return (contentBlock, callback, contentState) => {
16
+ contentBlock.findEntityRanges(character => {
17
+ const entityKey = character.getEntity();
18
+ return entityKey !== null && contentState.getEntity(entityKey).getType() === type;
19
+ }, callback);
20
+ };
21
+ };
22
+ exports.findEntitiesByType = findEntitiesByType;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kids-reporter/draft-renderer",
3
- "version": "1.0.4",
3
+ "version": "1.0.5",
4
4
  "description": "",
5
5
  "main": "lib/index.js",
6
6
  "scripts": {