@atlaskit/renderer 111.0.2 → 111.1.1
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 +20 -0
- package/dist/cjs/react/index.js +12 -3
- package/dist/cjs/react/nodes/bodiedExtension.js +6 -1
- package/dist/cjs/ui/Renderer/index.js +62 -28
- package/dist/cjs/ui/annotations/index.js +9 -1
- package/dist/es2019/react/index.js +12 -3
- package/dist/es2019/react/nodes/bodiedExtension.js +6 -1
- package/dist/es2019/ui/Renderer/index.js +55 -22
- package/dist/es2019/ui/annotations/index.js +8 -0
- package/dist/esm/react/index.js +12 -3
- package/dist/esm/react/nodes/bodiedExtension.js +6 -1
- package/dist/esm/ui/Renderer/index.js +60 -28
- package/dist/esm/ui/annotations/index.js +8 -0
- package/dist/types/react/index.d.ts +7 -0
- package/dist/types/react/nodes/bodiedExtension.d.ts +1 -0
- package/dist/types/ui/Renderer/index.d.ts +13 -3
- package/dist/types/ui/annotations/index.d.ts +4 -1
- package/dist/types/ui/annotations/types.d.ts +8 -0
- package/dist/types-ts4.5/react/index.d.ts +7 -0
- package/dist/types-ts4.5/react/nodes/bodiedExtension.d.ts +1 -0
- package/dist/types-ts4.5/ui/Renderer/index.d.ts +13 -3
- package/dist/types-ts4.5/ui/annotations/index.d.ts +4 -1
- package/dist/types-ts4.5/ui/annotations/types.d.ts +8 -0
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,25 @@
|
|
|
1
1
|
# @atlaskit/renderer
|
|
2
2
|
|
|
3
|
+
## 111.1.1
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- [#147863](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/pull-requests/147863)
|
|
8
|
+
[`422082d3df962`](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/commits/422082d3df962) -
|
|
9
|
+
Remove TTI tracking analytics
|
|
10
|
+
|
|
11
|
+
## 111.1.0
|
|
12
|
+
|
|
13
|
+
### Minor Changes
|
|
14
|
+
|
|
15
|
+
- [#147660](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/pull-requests/147660)
|
|
16
|
+
[`a407a8fbc874b`](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/commits/a407a8fbc874b) -
|
|
17
|
+
ED-24365 Support commenting inside bodied extension content in the Renderer
|
|
18
|
+
|
|
19
|
+
### Patch Changes
|
|
20
|
+
|
|
21
|
+
- Updated dependencies
|
|
22
|
+
|
|
3
23
|
## 111.0.2
|
|
4
24
|
|
|
5
25
|
### Patch Changes
|
package/dist/cjs/react/index.js
CHANGED
|
@@ -13,6 +13,7 @@ var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/creat
|
|
|
13
13
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
14
14
|
var _react = _interopRequireDefault(require("react"));
|
|
15
15
|
var _model = require("@atlaskit/editor-prosemirror/model");
|
|
16
|
+
var _experiments = require("@atlaskit/tmp-editor-statsig/experiments");
|
|
16
17
|
var _links = require("./utils/links");
|
|
17
18
|
var _nodes = require("./nodes");
|
|
18
19
|
var _textWrapper = _interopRequireDefault(require("./nodes/text-wrapper"));
|
|
@@ -57,7 +58,6 @@ var ReactSerializer = exports.default = /*#__PURE__*/function () {
|
|
|
57
58
|
(0, _defineProperty2.default)(this, "allowWrapCodeBlock", false);
|
|
58
59
|
(0, _defineProperty2.default)(this, "allowPlaceholderText", true);
|
|
59
60
|
(0, _defineProperty2.default)(this, "allowCustomPanels", false);
|
|
60
|
-
(0, _defineProperty2.default)(this, "startPos", 1);
|
|
61
61
|
(0, _defineProperty2.default)(this, "surroundTextNodesWithTextWrapper", false);
|
|
62
62
|
(0, _defineProperty2.default)(this, "allowAnnotations", false);
|
|
63
63
|
(0, _defineProperty2.default)(this, "serializeFragmentChild", function (node, _ref) {
|
|
@@ -161,6 +161,13 @@ var ReactSerializer = exports.default = /*#__PURE__*/function () {
|
|
|
161
161
|
});
|
|
162
162
|
return props;
|
|
163
163
|
});
|
|
164
|
+
if ((0, _experiments.editorExperiment)('comment_on_bodied_extensions', true)) {
|
|
165
|
+
this.initStartPos = init.startPos || 1;
|
|
166
|
+
this.startPos = init.startPos || 1;
|
|
167
|
+
} else {
|
|
168
|
+
this.initStartPos = 1;
|
|
169
|
+
this.startPos = 1;
|
|
170
|
+
}
|
|
164
171
|
this.providers = init.providers;
|
|
165
172
|
this.eventHandlers = init.eventHandlers;
|
|
166
173
|
this.extensionHandlers = init.extensionHandlers;
|
|
@@ -198,7 +205,7 @@ var ReactSerializer = exports.default = /*#__PURE__*/function () {
|
|
|
198
205
|
value: function resetState() {
|
|
199
206
|
this.headingIds = [];
|
|
200
207
|
this.expandHeadingIds = [];
|
|
201
|
-
this.startPos =
|
|
208
|
+
this.startPos = this.initStartPos;
|
|
202
209
|
}
|
|
203
210
|
}, {
|
|
204
211
|
key: "getNodeProps",
|
|
@@ -531,6 +538,7 @@ var ReactSerializer = exports.default = /*#__PURE__*/function () {
|
|
|
531
538
|
key: "getProps",
|
|
532
539
|
value: function getProps(node) {
|
|
533
540
|
var path = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
|
|
541
|
+
var startPos = this.startPos + path.length;
|
|
534
542
|
return _objectSpread({
|
|
535
543
|
text: node.text,
|
|
536
544
|
providers: this.providers,
|
|
@@ -553,8 +561,9 @@ var ReactSerializer = exports.default = /*#__PURE__*/function () {
|
|
|
553
561
|
dataAttributes: {
|
|
554
562
|
// We need to account for depth (path.length gives up depth) here
|
|
555
563
|
// but depth doesnt increment the pos, only accounted for.
|
|
556
|
-
'data-renderer-start-pos':
|
|
564
|
+
'data-renderer-start-pos': startPos
|
|
557
565
|
},
|
|
566
|
+
startPos: startPos,
|
|
558
567
|
path: path
|
|
559
568
|
}, node.attrs);
|
|
560
569
|
}
|
|
@@ -13,6 +13,7 @@ var _ErrorBoundary = require("../../ui/Renderer/ErrorBoundary");
|
|
|
13
13
|
var _ExtensionRenderer = _interopRequireDefault(require("../../ui/ExtensionRenderer"));
|
|
14
14
|
var _enums = require("../../analytics/enums");
|
|
15
15
|
var _analytics = require("@atlaskit/editor-common/analytics");
|
|
16
|
+
var _annotations = require("../../ui/annotations");
|
|
16
17
|
var BodiedExtension = function BodiedExtension(props) {
|
|
17
18
|
var children = props.children,
|
|
18
19
|
_props$layout = props.layout,
|
|
@@ -31,6 +32,10 @@ var BodiedExtension = function BodiedExtension(props) {
|
|
|
31
32
|
componentId: _analytics.ACTION_SUBJECT_ID.EXTENSION_BODIED,
|
|
32
33
|
createAnalyticsEvent: createAnalyticsEvent,
|
|
33
34
|
additionalInfo: "".concat(extensionType, ": ").concat(extensionKey, " ")
|
|
35
|
+
}, /*#__PURE__*/_react.default.createElement(_annotations.AnnotationsPositionContext.Provider, {
|
|
36
|
+
value: {
|
|
37
|
+
startPos: props.startPos + 1
|
|
38
|
+
}
|
|
34
39
|
}, /*#__PURE__*/_react.default.createElement(_ExtensionRenderer.default, (0, _extends2.default)({}, props, {
|
|
35
40
|
type: "bodiedExtension"
|
|
36
41
|
}), function (_ref) {
|
|
@@ -51,6 +56,6 @@ var BodiedExtension = function BodiedExtension(props) {
|
|
|
51
56
|
return (0, _extension.renderExtension)(children, layout, {
|
|
52
57
|
isTopLevel: path.length < 1
|
|
53
58
|
}, removeOverflow);
|
|
54
|
-
}));
|
|
59
|
+
})));
|
|
55
60
|
};
|
|
56
61
|
var _default = exports.default = BodiedExtension;
|
|
@@ -5,7 +5,9 @@ var _typeof = require("@babel/runtime/helpers/typeof");
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", {
|
|
6
6
|
value: true
|
|
7
7
|
});
|
|
8
|
-
exports.
|
|
8
|
+
exports.NORMAL_SEVERITY_THRESHOLD = exports.DEGRADED_SEVERITY_THRESHOLD = void 0;
|
|
9
|
+
exports.Renderer = Renderer;
|
|
10
|
+
exports.defaultNodeComponents = exports.default = exports.__RendererClassComponent = exports.RendererWithAnalytics = void 0;
|
|
9
11
|
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
10
12
|
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
11
13
|
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
@@ -19,10 +21,10 @@ var _react2 = require("@emotion/react");
|
|
|
19
21
|
var _schemaDefault = require("@atlaskit/adf-schema/schema-default");
|
|
20
22
|
var _traverse = require("@atlaskit/adf-utils/traverse");
|
|
21
23
|
var _providerFactory = require("@atlaskit/editor-common/provider-factory");
|
|
24
|
+
var _experiments = require("@atlaskit/tmp-editor-statsig/experiments");
|
|
22
25
|
var _ui = require("@atlaskit/editor-common/ui");
|
|
23
26
|
var _performanceMeasures = require("@atlaskit/editor-common/performance-measures");
|
|
24
27
|
var _utils = require("@atlaskit/editor-common/utils");
|
|
25
|
-
var _measureTti = require("@atlaskit/editor-common/performance/measure-tti");
|
|
26
28
|
var _measureRender = require("@atlaskit/editor-common/performance/measure-render");
|
|
27
29
|
var _browser = require("@atlaskit/editor-common/browser");
|
|
28
30
|
var _navigation = require("@atlaskit/editor-common/performance/navigation");
|
|
@@ -63,14 +65,18 @@ function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.
|
|
|
63
65
|
var NORMAL_SEVERITY_THRESHOLD = exports.NORMAL_SEVERITY_THRESHOLD = 2000;
|
|
64
66
|
var DEGRADED_SEVERITY_THRESHOLD = exports.DEGRADED_SEVERITY_THRESHOLD = 3000;
|
|
65
67
|
var packageName = "@atlaskit/renderer";
|
|
66
|
-
var packageVersion = "111.
|
|
68
|
+
var packageVersion = "111.1.1";
|
|
67
69
|
var defaultNodeComponents = exports.defaultNodeComponents = _nodes.nodeToReact;
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* Exported due to enzyme test reliance on this component.
|
|
73
|
+
*/
|
|
74
|
+
var __RendererClassComponent = exports.__RendererClassComponent = /*#__PURE__*/function (_PureComponent) {
|
|
75
|
+
(0, _inherits2.default)(__RendererClassComponent, _PureComponent);
|
|
76
|
+
var _super = _createSuper(__RendererClassComponent);
|
|
77
|
+
function __RendererClassComponent(props) {
|
|
72
78
|
var _this;
|
|
73
|
-
(0, _classCallCheck2.default)(this,
|
|
79
|
+
(0, _classCallCheck2.default)(this, __RendererClassComponent);
|
|
74
80
|
_this = _super.call(this, props);
|
|
75
81
|
/**
|
|
76
82
|
* This is used in measuring the Renderer Mount time and is then
|
|
@@ -152,24 +158,9 @@ var Renderer = exports.Renderer = /*#__PURE__*/function (_PureComponent) {
|
|
|
152
158
|
_this.editorRef = props.innerRef || /*#__PURE__*/_react.default.createRef();
|
|
153
159
|
_this.id = (0, _v.default)();
|
|
154
160
|
(0, _performanceMeasures.startMeasure)("Renderer Render Time: ".concat(_this.id));
|
|
155
|
-
var _featureFlags = _this.featureFlags(_this.props.featureFlags).featureFlags;
|
|
156
|
-
if (_featureFlags !== null && _featureFlags !== void 0 && _featureFlags.rendererTtiTracking) {
|
|
157
|
-
(0, _measureTti.measureTTI)(function (tti, ttiFromInvocation, canceled) {
|
|
158
|
-
_this.fireAnalyticsEvent({
|
|
159
|
-
action: _analytics.ACTION.RENDERER_TTI,
|
|
160
|
-
actionSubject: _analytics.ACTION_SUBJECT.RENDERER,
|
|
161
|
-
attributes: {
|
|
162
|
-
tti: tti,
|
|
163
|
-
ttiFromInvocation: ttiFromInvocation,
|
|
164
|
-
canceled: canceled
|
|
165
|
-
},
|
|
166
|
-
eventType: _analytics.EVENT_TYPE.OPERATIONAL
|
|
167
|
-
});
|
|
168
|
-
});
|
|
169
|
-
}
|
|
170
161
|
return _this;
|
|
171
162
|
}
|
|
172
|
-
(0, _createClass2.default)(
|
|
163
|
+
(0, _createClass2.default)(__RendererClassComponent, [{
|
|
173
164
|
key: "anchorLinkAnalytics",
|
|
174
165
|
value: function anchorLinkAnalytics() {
|
|
175
166
|
var hash = window.location.hash && decodeURIComponent(window.location.hash.slice(1));
|
|
@@ -257,6 +248,7 @@ var Renderer = exports.Renderer = /*#__PURE__*/function (_PureComponent) {
|
|
|
257
248
|
var _this$featureFlags = this.featureFlags(props.featureFlags),
|
|
258
249
|
featureFlags = _this$featureFlags.featureFlags;
|
|
259
250
|
return {
|
|
251
|
+
startPos: props.startPos,
|
|
260
252
|
providers: this.providerFactory,
|
|
261
253
|
eventHandlers: props.eventHandlers,
|
|
262
254
|
extensionHandlers: props.extensionHandlers,
|
|
@@ -445,8 +437,21 @@ var Renderer = exports.Renderer = /*#__PURE__*/function (_PureComponent) {
|
|
|
445
437
|
}
|
|
446
438
|
}
|
|
447
439
|
}]);
|
|
448
|
-
return
|
|
440
|
+
return __RendererClassComponent;
|
|
449
441
|
}(_react.PureComponent);
|
|
442
|
+
function Renderer(props) {
|
|
443
|
+
var _React$useContext = _react.default.useContext(_annotations.AnnotationsPositionContext),
|
|
444
|
+
startPos = _React$useContext.startPos;
|
|
445
|
+
|
|
446
|
+
// eslint-disable-next-line react/jsx-pascal-case
|
|
447
|
+
return (0, _react2.jsx)(__RendererClassComponent, (0, _extends2.default)({}, props, {
|
|
448
|
+
startPos: startPos
|
|
449
|
+
}));
|
|
450
|
+
}
|
|
451
|
+
|
|
452
|
+
// Usage notes:
|
|
453
|
+
// Used by Confluence for View page renderer
|
|
454
|
+
// For the nested renderers - see RendererWithAnnotationSelection.
|
|
450
455
|
var RendererWithAnalytics = exports.RendererWithAnalytics = /*#__PURE__*/_react.default.memo(function (props) {
|
|
451
456
|
return (0, _react2.jsx)(_analyticsNamespacedContext.FabricEditorAnalyticsContext, {
|
|
452
457
|
data: {
|
|
@@ -560,25 +565,54 @@ var RendererWrapper = /*#__PURE__*/_react.default.memo(function (props) {
|
|
|
560
565
|
})
|
|
561
566
|
}, children))));
|
|
562
567
|
});
|
|
568
|
+
var RootRendererContext = /*#__PURE__*/_react.default.createContext(null);
|
|
563
569
|
function RendererActionsInternalUpdater(_ref) {
|
|
564
570
|
var children = _ref.children,
|
|
565
571
|
doc = _ref.doc,
|
|
566
572
|
schema = _ref.schema,
|
|
567
573
|
onAnalyticsEvent = _ref.onAnalyticsEvent;
|
|
574
|
+
var rootRendererContextValue = _react.default.useContext(RootRendererContext);
|
|
568
575
|
var actions = (0, _react.useContext)(_RendererActionsContext.RendererContext);
|
|
569
576
|
var rendererRef = (0, _react.useRef)(null);
|
|
577
|
+
|
|
578
|
+
// This doc is used by the renderer actions when applying comments to the document.
|
|
579
|
+
// (via hand crafted steps based on non prosemirror based position calculations)
|
|
580
|
+
// It is set to the root renderer's doc as otherwise the resulting document will
|
|
581
|
+
// be incorrect (nested renderers use a fake document which represents a subset
|
|
582
|
+
// of the actual document).
|
|
583
|
+
var _doc;
|
|
584
|
+
if ((0, _experiments.editorExperiment)('comment_on_bodied_extensions', true) && rootRendererContextValue) {
|
|
585
|
+
// If rootRendererContextValue is set -- we are inside a nested renderer
|
|
586
|
+
// and should always use the doc from the root renderer
|
|
587
|
+
_doc = rootRendererContextValue.doc;
|
|
588
|
+
} else {
|
|
589
|
+
// If rootRendererContextValue is not set -- we are in the root renderer
|
|
590
|
+
// and set the doc to the current doc.
|
|
591
|
+
_doc = doc;
|
|
592
|
+
}
|
|
570
593
|
(0, _react.useLayoutEffect)(function () {
|
|
571
|
-
if (
|
|
572
|
-
actions._privateRegisterRenderer(rendererRef,
|
|
594
|
+
if (_doc) {
|
|
595
|
+
actions._privateRegisterRenderer(rendererRef, _doc, schema, onAnalyticsEvent);
|
|
573
596
|
} else {
|
|
574
597
|
actions._privateUnregisterRenderer();
|
|
575
598
|
}
|
|
576
599
|
return function () {
|
|
577
600
|
return actions._privateUnregisterRenderer();
|
|
578
601
|
};
|
|
579
|
-
}, [actions, schema,
|
|
602
|
+
}, [actions, schema, _doc, onAnalyticsEvent]);
|
|
603
|
+
if ((0, _experiments.editorExperiment)('comment_on_bodied_extensions', true)) {
|
|
604
|
+
return (0, _react2.jsx)(RootRendererContext.Provider, {
|
|
605
|
+
value: {
|
|
606
|
+
doc: _doc
|
|
607
|
+
}
|
|
608
|
+
}, children);
|
|
609
|
+
}
|
|
580
610
|
return children;
|
|
581
611
|
}
|
|
612
|
+
|
|
613
|
+
// Usage notes:
|
|
614
|
+
// Used by Confluence for nested renderers
|
|
615
|
+
// For the View page renderer - see RendererWithAnalytics
|
|
582
616
|
var RendererWithAnnotationSelection = function RendererWithAnnotationSelection(props) {
|
|
583
617
|
var allowAnnotations = props.allowAnnotations,
|
|
584
618
|
adfDocument = props.document;
|
|
@@ -10,7 +10,7 @@ Object.defineProperty(exports, "AnnotationMark", {
|
|
|
10
10
|
return _element.MarkElement;
|
|
11
11
|
}
|
|
12
12
|
});
|
|
13
|
-
exports.AnnotationsWrapper = void 0;
|
|
13
|
+
exports.AnnotationsWrapper = exports.AnnotationsPositionContext = void 0;
|
|
14
14
|
Object.defineProperty(exports, "TextWithAnnotationDraft", {
|
|
15
15
|
enumerable: true,
|
|
16
16
|
get: function get() {
|
|
@@ -40,6 +40,14 @@ var LoadAnnotations = /*#__PURE__*/_react.default.memo(function (_ref) {
|
|
|
40
40
|
});
|
|
41
41
|
return null;
|
|
42
42
|
});
|
|
43
|
+
|
|
44
|
+
// This is used by renderers when setting the data-start-pos attribute on commentable nodes
|
|
45
|
+
// By default it is 1 (the possible starting position of any document).
|
|
46
|
+
// The bodied extension component then sets a new value for this context based on its on position
|
|
47
|
+
// in the document.
|
|
48
|
+
var AnnotationsPositionContext = exports.AnnotationsPositionContext = /*#__PURE__*/_react.default.createContext({
|
|
49
|
+
startPos: 1
|
|
50
|
+
});
|
|
43
51
|
var AnnotationsWrapper = exports.AnnotationsWrapper = function AnnotationsWrapper(props) {
|
|
44
52
|
var _annotationProvider$i, _annotationProvider$i2;
|
|
45
53
|
var children = props.children,
|
|
@@ -2,6 +2,7 @@ import _extends from "@babel/runtime/helpers/extends";
|
|
|
2
2
|
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
3
3
|
import React from 'react';
|
|
4
4
|
import { MarkType } from '@atlaskit/editor-prosemirror/model';
|
|
5
|
+
import { editorExperiment } from '@atlaskit/tmp-editor-statsig/experiments';
|
|
5
6
|
import { isNestedHeaderLinksEnabled } from './utils/links';
|
|
6
7
|
import { Doc, DocWithSelectAllTrap, mergeTextNodes, isTextWrapper, isTextNode, toReact } from './nodes';
|
|
7
8
|
import TextWrapperComponent from './nodes/text-wrapper';
|
|
@@ -41,7 +42,6 @@ export default class ReactSerializer {
|
|
|
41
42
|
_defineProperty(this, "allowWrapCodeBlock", false);
|
|
42
43
|
_defineProperty(this, "allowPlaceholderText", true);
|
|
43
44
|
_defineProperty(this, "allowCustomPanels", false);
|
|
44
|
-
_defineProperty(this, "startPos", 1);
|
|
45
45
|
_defineProperty(this, "surroundTextNodesWithTextWrapper", false);
|
|
46
46
|
_defineProperty(this, "allowAnnotations", false);
|
|
47
47
|
_defineProperty(this, "serializeFragmentChild", (node, {
|
|
@@ -147,6 +147,13 @@ export default class ReactSerializer {
|
|
|
147
147
|
};
|
|
148
148
|
return props;
|
|
149
149
|
});
|
|
150
|
+
if (editorExperiment('comment_on_bodied_extensions', true)) {
|
|
151
|
+
this.initStartPos = init.startPos || 1;
|
|
152
|
+
this.startPos = init.startPos || 1;
|
|
153
|
+
} else {
|
|
154
|
+
this.initStartPos = 1;
|
|
155
|
+
this.startPos = 1;
|
|
156
|
+
}
|
|
150
157
|
this.providers = init.providers;
|
|
151
158
|
this.eventHandlers = init.eventHandlers;
|
|
152
159
|
this.extensionHandlers = init.extensionHandlers;
|
|
@@ -182,7 +189,7 @@ export default class ReactSerializer {
|
|
|
182
189
|
resetState() {
|
|
183
190
|
this.headingIds = [];
|
|
184
191
|
this.expandHeadingIds = [];
|
|
185
|
-
this.startPos =
|
|
192
|
+
this.startPos = this.initStartPos;
|
|
186
193
|
}
|
|
187
194
|
getNodeProps(node, parentInfo) {
|
|
188
195
|
const path = parentInfo ? parentInfo.path : undefined;
|
|
@@ -463,6 +470,7 @@ export default class ReactSerializer {
|
|
|
463
470
|
};
|
|
464
471
|
}
|
|
465
472
|
getProps(node, path = []) {
|
|
473
|
+
const startPos = this.startPos + path.length;
|
|
466
474
|
return {
|
|
467
475
|
text: node.text,
|
|
468
476
|
providers: this.providers,
|
|
@@ -485,8 +493,9 @@ export default class ReactSerializer {
|
|
|
485
493
|
dataAttributes: {
|
|
486
494
|
// We need to account for depth (path.length gives up depth) here
|
|
487
495
|
// but depth doesnt increment the pos, only accounted for.
|
|
488
|
-
'data-renderer-start-pos':
|
|
496
|
+
'data-renderer-start-pos': startPos
|
|
489
497
|
},
|
|
498
|
+
startPos,
|
|
490
499
|
path,
|
|
491
500
|
...node.attrs
|
|
492
501
|
};
|
|
@@ -6,6 +6,7 @@ import { ErrorBoundary } from '../../ui/Renderer/ErrorBoundary';
|
|
|
6
6
|
import ExtensionRenderer from '../../ui/ExtensionRenderer';
|
|
7
7
|
import { ACTION_SUBJECT } from '../../analytics/enums';
|
|
8
8
|
import { ACTION_SUBJECT_ID } from '@atlaskit/editor-common/analytics';
|
|
9
|
+
import { AnnotationsPositionContext } from '../../ui/annotations';
|
|
9
10
|
const BodiedExtension = props => {
|
|
10
11
|
const {
|
|
11
12
|
children,
|
|
@@ -23,6 +24,10 @@ const BodiedExtension = props => {
|
|
|
23
24
|
componentId: ACTION_SUBJECT_ID.EXTENSION_BODIED,
|
|
24
25
|
createAnalyticsEvent: createAnalyticsEvent,
|
|
25
26
|
additionalInfo: `${extensionType}: ${extensionKey} `
|
|
27
|
+
}, /*#__PURE__*/React.createElement(AnnotationsPositionContext.Provider, {
|
|
28
|
+
value: {
|
|
29
|
+
startPos: props.startPos + 1
|
|
30
|
+
}
|
|
26
31
|
}, /*#__PURE__*/React.createElement(ExtensionRenderer, _extends({}, props, {
|
|
27
32
|
type: "bodiedExtension"
|
|
28
33
|
}), ({
|
|
@@ -44,6 +49,6 @@ const BodiedExtension = props => {
|
|
|
44
49
|
return renderExtension(children, layout, {
|
|
45
50
|
isTopLevel: path.length < 1
|
|
46
51
|
}, removeOverflow);
|
|
47
|
-
}));
|
|
52
|
+
})));
|
|
48
53
|
};
|
|
49
54
|
export default BodiedExtension;
|
|
@@ -10,10 +10,10 @@ import { jsx } from '@emotion/react';
|
|
|
10
10
|
import { getSchemaBasedOnStage } from '@atlaskit/adf-schema/schema-default';
|
|
11
11
|
import { reduce } from '@atlaskit/adf-utils/traverse';
|
|
12
12
|
import { ProviderFactory, ProviderFactoryProvider } from '@atlaskit/editor-common/provider-factory';
|
|
13
|
+
import { editorExperiment } from '@atlaskit/tmp-editor-statsig/experiments';
|
|
13
14
|
import { UnsupportedBlock, BaseTheme, WidthProvider, WithCreateAnalyticsEvent, IntlErrorBoundary } from '@atlaskit/editor-common/ui';
|
|
14
15
|
import { startMeasure, stopMeasure } from '@atlaskit/editor-common/performance-measures';
|
|
15
16
|
import { getAnalyticsAppearance, getAnalyticsEventSeverity, shouldForceTracking } from '@atlaskit/editor-common/utils';
|
|
16
|
-
import { measureTTI } from '@atlaskit/editor-common/performance/measure-tti';
|
|
17
17
|
import { getDistortedDurationMonitor } from '@atlaskit/editor-common/performance/measure-render';
|
|
18
18
|
import { browser } from '@atlaskit/editor-common/browser';
|
|
19
19
|
import { getResponseEndTime } from '@atlaskit/editor-common/performance/navigation';
|
|
@@ -33,7 +33,7 @@ import { Provider as SmartCardStorageProvider } from '../SmartCardStorage';
|
|
|
33
33
|
import { BreakoutSSRInlineScript } from './breakout-ssr';
|
|
34
34
|
import { RendererActionsContext, RendererContext as ActionsContext } from '../RendererActionsContext';
|
|
35
35
|
import { ActiveHeaderIdProvider } from '../active-header-id-provider';
|
|
36
|
-
import { AnnotationsWrapper } from '../annotations';
|
|
36
|
+
import { AnnotationsPositionContext, AnnotationsWrapper } from '../annotations';
|
|
37
37
|
import { getActiveHeadingId, isNestedHeaderLinksEnabled } from '../../react/utils/links';
|
|
38
38
|
import { findInTree } from '../../utils';
|
|
39
39
|
import { isInteractiveElement } from './click-to-edit';
|
|
@@ -45,9 +45,13 @@ import { nodeToReact } from '../../react/nodes';
|
|
|
45
45
|
export const NORMAL_SEVERITY_THRESHOLD = 2000;
|
|
46
46
|
export const DEGRADED_SEVERITY_THRESHOLD = 3000;
|
|
47
47
|
const packageName = "@atlaskit/renderer";
|
|
48
|
-
const packageVersion = "111.
|
|
48
|
+
const packageVersion = "111.1.1";
|
|
49
49
|
export const defaultNodeComponents = nodeToReact;
|
|
50
|
-
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Exported due to enzyme test reliance on this component.
|
|
53
|
+
*/
|
|
54
|
+
export class __RendererClassComponent extends PureComponent {
|
|
51
55
|
constructor(props) {
|
|
52
56
|
super(props);
|
|
53
57
|
/**
|
|
@@ -134,21 +138,6 @@ export class Renderer extends PureComponent {
|
|
|
134
138
|
this.editorRef = props.innerRef || /*#__PURE__*/React.createRef();
|
|
135
139
|
this.id = uuid();
|
|
136
140
|
startMeasure(`Renderer Render Time: ${this.id}`);
|
|
137
|
-
const _featureFlags = this.featureFlags(this.props.featureFlags).featureFlags;
|
|
138
|
-
if (_featureFlags !== null && _featureFlags !== void 0 && _featureFlags.rendererTtiTracking) {
|
|
139
|
-
measureTTI((tti, ttiFromInvocation, canceled) => {
|
|
140
|
-
this.fireAnalyticsEvent({
|
|
141
|
-
action: ACTION.RENDERER_TTI,
|
|
142
|
-
actionSubject: ACTION_SUBJECT.RENDERER,
|
|
143
|
-
attributes: {
|
|
144
|
-
tti,
|
|
145
|
-
ttiFromInvocation,
|
|
146
|
-
canceled
|
|
147
|
-
},
|
|
148
|
-
eventType: EVENT_TYPE.OPERATIONAL
|
|
149
|
-
});
|
|
150
|
-
});
|
|
151
|
-
}
|
|
152
141
|
}
|
|
153
142
|
anchorLinkAnalytics() {
|
|
154
143
|
const hash = window.location.hash && decodeURIComponent(window.location.hash.slice(1));
|
|
@@ -236,6 +225,7 @@ export class Renderer extends PureComponent {
|
|
|
236
225
|
featureFlags
|
|
237
226
|
} = this.featureFlags(props.featureFlags);
|
|
238
227
|
return {
|
|
228
|
+
startPos: props.startPos,
|
|
239
229
|
providers: this.providerFactory,
|
|
240
230
|
eventHandlers: props.eventHandlers,
|
|
241
231
|
extensionHandlers: props.extensionHandlers,
|
|
@@ -422,6 +412,20 @@ export class Renderer extends PureComponent {
|
|
|
422
412
|
}
|
|
423
413
|
}
|
|
424
414
|
}
|
|
415
|
+
export function Renderer(props) {
|
|
416
|
+
const {
|
|
417
|
+
startPos
|
|
418
|
+
} = React.useContext(AnnotationsPositionContext);
|
|
419
|
+
|
|
420
|
+
// eslint-disable-next-line react/jsx-pascal-case
|
|
421
|
+
return jsx(__RendererClassComponent, _extends({}, props, {
|
|
422
|
+
startPos: startPos
|
|
423
|
+
}));
|
|
424
|
+
}
|
|
425
|
+
|
|
426
|
+
// Usage notes:
|
|
427
|
+
// Used by Confluence for View page renderer
|
|
428
|
+
// For the nested renderers - see RendererWithAnnotationSelection.
|
|
425
429
|
export const RendererWithAnalytics = /*#__PURE__*/React.memo(props => jsx(FabricEditorAnalyticsContext, {
|
|
426
430
|
data: {
|
|
427
431
|
appearance: getAnalyticsAppearance(props.appearance),
|
|
@@ -533,24 +537,53 @@ const RendererWrapper = /*#__PURE__*/React.memo(props => {
|
|
|
533
537
|
})
|
|
534
538
|
}, children))));
|
|
535
539
|
});
|
|
540
|
+
const RootRendererContext = /*#__PURE__*/React.createContext(null);
|
|
536
541
|
function RendererActionsInternalUpdater({
|
|
537
542
|
children,
|
|
538
543
|
doc,
|
|
539
544
|
schema,
|
|
540
545
|
onAnalyticsEvent
|
|
541
546
|
}) {
|
|
547
|
+
const rootRendererContextValue = React.useContext(RootRendererContext);
|
|
542
548
|
const actions = useContext(ActionsContext);
|
|
543
549
|
const rendererRef = useRef(null);
|
|
550
|
+
|
|
551
|
+
// This doc is used by the renderer actions when applying comments to the document.
|
|
552
|
+
// (via hand crafted steps based on non prosemirror based position calculations)
|
|
553
|
+
// It is set to the root renderer's doc as otherwise the resulting document will
|
|
554
|
+
// be incorrect (nested renderers use a fake document which represents a subset
|
|
555
|
+
// of the actual document).
|
|
556
|
+
let _doc;
|
|
557
|
+
if (editorExperiment('comment_on_bodied_extensions', true) && rootRendererContextValue) {
|
|
558
|
+
// If rootRendererContextValue is set -- we are inside a nested renderer
|
|
559
|
+
// and should always use the doc from the root renderer
|
|
560
|
+
_doc = rootRendererContextValue.doc;
|
|
561
|
+
} else {
|
|
562
|
+
// If rootRendererContextValue is not set -- we are in the root renderer
|
|
563
|
+
// and set the doc to the current doc.
|
|
564
|
+
_doc = doc;
|
|
565
|
+
}
|
|
544
566
|
useLayoutEffect(() => {
|
|
545
|
-
if (
|
|
546
|
-
actions._privateRegisterRenderer(rendererRef,
|
|
567
|
+
if (_doc) {
|
|
568
|
+
actions._privateRegisterRenderer(rendererRef, _doc, schema, onAnalyticsEvent);
|
|
547
569
|
} else {
|
|
548
570
|
actions._privateUnregisterRenderer();
|
|
549
571
|
}
|
|
550
572
|
return () => actions._privateUnregisterRenderer();
|
|
551
|
-
}, [actions, schema,
|
|
573
|
+
}, [actions, schema, _doc, onAnalyticsEvent]);
|
|
574
|
+
if (editorExperiment('comment_on_bodied_extensions', true)) {
|
|
575
|
+
return jsx(RootRendererContext.Provider, {
|
|
576
|
+
value: {
|
|
577
|
+
doc: _doc
|
|
578
|
+
}
|
|
579
|
+
}, children);
|
|
580
|
+
}
|
|
552
581
|
return children;
|
|
553
582
|
}
|
|
583
|
+
|
|
584
|
+
// Usage notes:
|
|
585
|
+
// Used by Confluence for nested renderers
|
|
586
|
+
// For the View page renderer - see RendererWithAnalytics
|
|
554
587
|
const RendererWithAnnotationSelection = props => {
|
|
555
588
|
const {
|
|
556
589
|
allowAnnotations,
|
|
@@ -20,6 +20,14 @@ const LoadAnnotations = /*#__PURE__*/React.memo(({
|
|
|
20
20
|
});
|
|
21
21
|
return null;
|
|
22
22
|
});
|
|
23
|
+
|
|
24
|
+
// This is used by renderers when setting the data-start-pos attribute on commentable nodes
|
|
25
|
+
// By default it is 1 (the possible starting position of any document).
|
|
26
|
+
// The bodied extension component then sets a new value for this context based on its on position
|
|
27
|
+
// in the document.
|
|
28
|
+
export const AnnotationsPositionContext = /*#__PURE__*/React.createContext({
|
|
29
|
+
startPos: 1
|
|
30
|
+
});
|
|
23
31
|
export const AnnotationsWrapper = props => {
|
|
24
32
|
var _annotationProvider$i, _annotationProvider$i2;
|
|
25
33
|
const {
|
package/dist/esm/react/index.js
CHANGED
|
@@ -9,6 +9,7 @@ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbol
|
|
|
9
9
|
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
10
10
|
import React from 'react';
|
|
11
11
|
import { MarkType } from '@atlaskit/editor-prosemirror/model';
|
|
12
|
+
import { editorExperiment } from '@atlaskit/tmp-editor-statsig/experiments';
|
|
12
13
|
import { isNestedHeaderLinksEnabled } from './utils/links';
|
|
13
14
|
import { Doc, DocWithSelectAllTrap, mergeTextNodes, isTextWrapper, isTextNode, toReact } from './nodes';
|
|
14
15
|
import TextWrapperComponent from './nodes/text-wrapper';
|
|
@@ -50,7 +51,6 @@ var ReactSerializer = /*#__PURE__*/function () {
|
|
|
50
51
|
_defineProperty(this, "allowWrapCodeBlock", false);
|
|
51
52
|
_defineProperty(this, "allowPlaceholderText", true);
|
|
52
53
|
_defineProperty(this, "allowCustomPanels", false);
|
|
53
|
-
_defineProperty(this, "startPos", 1);
|
|
54
54
|
_defineProperty(this, "surroundTextNodesWithTextWrapper", false);
|
|
55
55
|
_defineProperty(this, "allowAnnotations", false);
|
|
56
56
|
_defineProperty(this, "serializeFragmentChild", function (node, _ref) {
|
|
@@ -154,6 +154,13 @@ var ReactSerializer = /*#__PURE__*/function () {
|
|
|
154
154
|
});
|
|
155
155
|
return props;
|
|
156
156
|
});
|
|
157
|
+
if (editorExperiment('comment_on_bodied_extensions', true)) {
|
|
158
|
+
this.initStartPos = init.startPos || 1;
|
|
159
|
+
this.startPos = init.startPos || 1;
|
|
160
|
+
} else {
|
|
161
|
+
this.initStartPos = 1;
|
|
162
|
+
this.startPos = 1;
|
|
163
|
+
}
|
|
157
164
|
this.providers = init.providers;
|
|
158
165
|
this.eventHandlers = init.eventHandlers;
|
|
159
166
|
this.extensionHandlers = init.extensionHandlers;
|
|
@@ -191,7 +198,7 @@ var ReactSerializer = /*#__PURE__*/function () {
|
|
|
191
198
|
value: function resetState() {
|
|
192
199
|
this.headingIds = [];
|
|
193
200
|
this.expandHeadingIds = [];
|
|
194
|
-
this.startPos =
|
|
201
|
+
this.startPos = this.initStartPos;
|
|
195
202
|
}
|
|
196
203
|
}, {
|
|
197
204
|
key: "getNodeProps",
|
|
@@ -524,6 +531,7 @@ var ReactSerializer = /*#__PURE__*/function () {
|
|
|
524
531
|
key: "getProps",
|
|
525
532
|
value: function getProps(node) {
|
|
526
533
|
var path = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
|
|
534
|
+
var startPos = this.startPos + path.length;
|
|
527
535
|
return _objectSpread({
|
|
528
536
|
text: node.text,
|
|
529
537
|
providers: this.providers,
|
|
@@ -546,8 +554,9 @@ var ReactSerializer = /*#__PURE__*/function () {
|
|
|
546
554
|
dataAttributes: {
|
|
547
555
|
// We need to account for depth (path.length gives up depth) here
|
|
548
556
|
// but depth doesnt increment the pos, only accounted for.
|
|
549
|
-
'data-renderer-start-pos':
|
|
557
|
+
'data-renderer-start-pos': startPos
|
|
550
558
|
},
|
|
559
|
+
startPos: startPos,
|
|
551
560
|
path: path
|
|
552
561
|
}, node.attrs);
|
|
553
562
|
}
|
|
@@ -6,6 +6,7 @@ import { ErrorBoundary } from '../../ui/Renderer/ErrorBoundary';
|
|
|
6
6
|
import ExtensionRenderer from '../../ui/ExtensionRenderer';
|
|
7
7
|
import { ACTION_SUBJECT } from '../../analytics/enums';
|
|
8
8
|
import { ACTION_SUBJECT_ID } from '@atlaskit/editor-common/analytics';
|
|
9
|
+
import { AnnotationsPositionContext } from '../../ui/annotations';
|
|
9
10
|
var BodiedExtension = function BodiedExtension(props) {
|
|
10
11
|
var children = props.children,
|
|
11
12
|
_props$layout = props.layout,
|
|
@@ -24,6 +25,10 @@ var BodiedExtension = function BodiedExtension(props) {
|
|
|
24
25
|
componentId: ACTION_SUBJECT_ID.EXTENSION_BODIED,
|
|
25
26
|
createAnalyticsEvent: createAnalyticsEvent,
|
|
26
27
|
additionalInfo: "".concat(extensionType, ": ").concat(extensionKey, " ")
|
|
28
|
+
}, /*#__PURE__*/React.createElement(AnnotationsPositionContext.Provider, {
|
|
29
|
+
value: {
|
|
30
|
+
startPos: props.startPos + 1
|
|
31
|
+
}
|
|
27
32
|
}, /*#__PURE__*/React.createElement(ExtensionRenderer, _extends({}, props, {
|
|
28
33
|
type: "bodiedExtension"
|
|
29
34
|
}), function (_ref) {
|
|
@@ -44,6 +49,6 @@ var BodiedExtension = function BodiedExtension(props) {
|
|
|
44
49
|
return renderExtension(children, layout, {
|
|
45
50
|
isTopLevel: path.length < 1
|
|
46
51
|
}, removeOverflow);
|
|
47
|
-
}));
|
|
52
|
+
})));
|
|
48
53
|
};
|
|
49
54
|
export default BodiedExtension;
|
|
@@ -20,10 +20,10 @@ import { jsx } from '@emotion/react';
|
|
|
20
20
|
import { getSchemaBasedOnStage } from '@atlaskit/adf-schema/schema-default';
|
|
21
21
|
import { reduce } from '@atlaskit/adf-utils/traverse';
|
|
22
22
|
import { ProviderFactory, ProviderFactoryProvider } from '@atlaskit/editor-common/provider-factory';
|
|
23
|
+
import { editorExperiment } from '@atlaskit/tmp-editor-statsig/experiments';
|
|
23
24
|
import { UnsupportedBlock, BaseTheme, WidthProvider, WithCreateAnalyticsEvent, IntlErrorBoundary } from '@atlaskit/editor-common/ui';
|
|
24
25
|
import { startMeasure, stopMeasure } from '@atlaskit/editor-common/performance-measures';
|
|
25
26
|
import { getAnalyticsAppearance, getAnalyticsEventSeverity, shouldForceTracking } from '@atlaskit/editor-common/utils';
|
|
26
|
-
import { measureTTI } from '@atlaskit/editor-common/performance/measure-tti';
|
|
27
27
|
import { getDistortedDurationMonitor } from '@atlaskit/editor-common/performance/measure-render';
|
|
28
28
|
import { browser } from '@atlaskit/editor-common/browser';
|
|
29
29
|
import { getResponseEndTime } from '@atlaskit/editor-common/performance/navigation';
|
|
@@ -43,7 +43,7 @@ import { Provider as SmartCardStorageProvider } from '../SmartCardStorage';
|
|
|
43
43
|
import { BreakoutSSRInlineScript } from './breakout-ssr';
|
|
44
44
|
import { RendererActionsContext, RendererContext as ActionsContext } from '../RendererActionsContext';
|
|
45
45
|
import { ActiveHeaderIdProvider } from '../active-header-id-provider';
|
|
46
|
-
import { AnnotationsWrapper } from '../annotations';
|
|
46
|
+
import { AnnotationsPositionContext, AnnotationsWrapper } from '../annotations';
|
|
47
47
|
import { getActiveHeadingId, isNestedHeaderLinksEnabled } from '../../react/utils/links';
|
|
48
48
|
import { findInTree } from '../../utils';
|
|
49
49
|
import { isInteractiveElement } from './click-to-edit';
|
|
@@ -55,14 +55,18 @@ import { nodeToReact } from '../../react/nodes';
|
|
|
55
55
|
export var NORMAL_SEVERITY_THRESHOLD = 2000;
|
|
56
56
|
export var DEGRADED_SEVERITY_THRESHOLD = 3000;
|
|
57
57
|
var packageName = "@atlaskit/renderer";
|
|
58
|
-
var packageVersion = "111.
|
|
58
|
+
var packageVersion = "111.1.1";
|
|
59
59
|
export var defaultNodeComponents = nodeToReact;
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* Exported due to enzyme test reliance on this component.
|
|
63
|
+
*/
|
|
64
|
+
export var __RendererClassComponent = /*#__PURE__*/function (_PureComponent) {
|
|
65
|
+
_inherits(__RendererClassComponent, _PureComponent);
|
|
66
|
+
var _super = _createSuper(__RendererClassComponent);
|
|
67
|
+
function __RendererClassComponent(props) {
|
|
64
68
|
var _this;
|
|
65
|
-
_classCallCheck(this,
|
|
69
|
+
_classCallCheck(this, __RendererClassComponent);
|
|
66
70
|
_this = _super.call(this, props);
|
|
67
71
|
/**
|
|
68
72
|
* This is used in measuring the Renderer Mount time and is then
|
|
@@ -144,24 +148,9 @@ export var Renderer = /*#__PURE__*/function (_PureComponent) {
|
|
|
144
148
|
_this.editorRef = props.innerRef || /*#__PURE__*/React.createRef();
|
|
145
149
|
_this.id = uuid();
|
|
146
150
|
startMeasure("Renderer Render Time: ".concat(_this.id));
|
|
147
|
-
var _featureFlags = _this.featureFlags(_this.props.featureFlags).featureFlags;
|
|
148
|
-
if (_featureFlags !== null && _featureFlags !== void 0 && _featureFlags.rendererTtiTracking) {
|
|
149
|
-
measureTTI(function (tti, ttiFromInvocation, canceled) {
|
|
150
|
-
_this.fireAnalyticsEvent({
|
|
151
|
-
action: ACTION.RENDERER_TTI,
|
|
152
|
-
actionSubject: ACTION_SUBJECT.RENDERER,
|
|
153
|
-
attributes: {
|
|
154
|
-
tti: tti,
|
|
155
|
-
ttiFromInvocation: ttiFromInvocation,
|
|
156
|
-
canceled: canceled
|
|
157
|
-
},
|
|
158
|
-
eventType: EVENT_TYPE.OPERATIONAL
|
|
159
|
-
});
|
|
160
|
-
});
|
|
161
|
-
}
|
|
162
151
|
return _this;
|
|
163
152
|
}
|
|
164
|
-
_createClass(
|
|
153
|
+
_createClass(__RendererClassComponent, [{
|
|
165
154
|
key: "anchorLinkAnalytics",
|
|
166
155
|
value: function anchorLinkAnalytics() {
|
|
167
156
|
var hash = window.location.hash && decodeURIComponent(window.location.hash.slice(1));
|
|
@@ -249,6 +238,7 @@ export var Renderer = /*#__PURE__*/function (_PureComponent) {
|
|
|
249
238
|
var _this$featureFlags = this.featureFlags(props.featureFlags),
|
|
250
239
|
featureFlags = _this$featureFlags.featureFlags;
|
|
251
240
|
return {
|
|
241
|
+
startPos: props.startPos,
|
|
252
242
|
providers: this.providerFactory,
|
|
253
243
|
eventHandlers: props.eventHandlers,
|
|
254
244
|
extensionHandlers: props.extensionHandlers,
|
|
@@ -437,8 +427,21 @@ export var Renderer = /*#__PURE__*/function (_PureComponent) {
|
|
|
437
427
|
}
|
|
438
428
|
}
|
|
439
429
|
}]);
|
|
440
|
-
return
|
|
430
|
+
return __RendererClassComponent;
|
|
441
431
|
}(PureComponent);
|
|
432
|
+
export function Renderer(props) {
|
|
433
|
+
var _React$useContext = React.useContext(AnnotationsPositionContext),
|
|
434
|
+
startPos = _React$useContext.startPos;
|
|
435
|
+
|
|
436
|
+
// eslint-disable-next-line react/jsx-pascal-case
|
|
437
|
+
return jsx(__RendererClassComponent, _extends({}, props, {
|
|
438
|
+
startPos: startPos
|
|
439
|
+
}));
|
|
440
|
+
}
|
|
441
|
+
|
|
442
|
+
// Usage notes:
|
|
443
|
+
// Used by Confluence for View page renderer
|
|
444
|
+
// For the nested renderers - see RendererWithAnnotationSelection.
|
|
442
445
|
export var RendererWithAnalytics = /*#__PURE__*/React.memo(function (props) {
|
|
443
446
|
return jsx(FabricEditorAnalyticsContext, {
|
|
444
447
|
data: {
|
|
@@ -552,25 +555,54 @@ var RendererWrapper = /*#__PURE__*/React.memo(function (props) {
|
|
|
552
555
|
})
|
|
553
556
|
}, children))));
|
|
554
557
|
});
|
|
558
|
+
var RootRendererContext = /*#__PURE__*/React.createContext(null);
|
|
555
559
|
function RendererActionsInternalUpdater(_ref) {
|
|
556
560
|
var children = _ref.children,
|
|
557
561
|
doc = _ref.doc,
|
|
558
562
|
schema = _ref.schema,
|
|
559
563
|
onAnalyticsEvent = _ref.onAnalyticsEvent;
|
|
564
|
+
var rootRendererContextValue = React.useContext(RootRendererContext);
|
|
560
565
|
var actions = useContext(ActionsContext);
|
|
561
566
|
var rendererRef = useRef(null);
|
|
567
|
+
|
|
568
|
+
// This doc is used by the renderer actions when applying comments to the document.
|
|
569
|
+
// (via hand crafted steps based on non prosemirror based position calculations)
|
|
570
|
+
// It is set to the root renderer's doc as otherwise the resulting document will
|
|
571
|
+
// be incorrect (nested renderers use a fake document which represents a subset
|
|
572
|
+
// of the actual document).
|
|
573
|
+
var _doc;
|
|
574
|
+
if (editorExperiment('comment_on_bodied_extensions', true) && rootRendererContextValue) {
|
|
575
|
+
// If rootRendererContextValue is set -- we are inside a nested renderer
|
|
576
|
+
// and should always use the doc from the root renderer
|
|
577
|
+
_doc = rootRendererContextValue.doc;
|
|
578
|
+
} else {
|
|
579
|
+
// If rootRendererContextValue is not set -- we are in the root renderer
|
|
580
|
+
// and set the doc to the current doc.
|
|
581
|
+
_doc = doc;
|
|
582
|
+
}
|
|
562
583
|
useLayoutEffect(function () {
|
|
563
|
-
if (
|
|
564
|
-
actions._privateRegisterRenderer(rendererRef,
|
|
584
|
+
if (_doc) {
|
|
585
|
+
actions._privateRegisterRenderer(rendererRef, _doc, schema, onAnalyticsEvent);
|
|
565
586
|
} else {
|
|
566
587
|
actions._privateUnregisterRenderer();
|
|
567
588
|
}
|
|
568
589
|
return function () {
|
|
569
590
|
return actions._privateUnregisterRenderer();
|
|
570
591
|
};
|
|
571
|
-
}, [actions, schema,
|
|
592
|
+
}, [actions, schema, _doc, onAnalyticsEvent]);
|
|
593
|
+
if (editorExperiment('comment_on_bodied_extensions', true)) {
|
|
594
|
+
return jsx(RootRendererContext.Provider, {
|
|
595
|
+
value: {
|
|
596
|
+
doc: _doc
|
|
597
|
+
}
|
|
598
|
+
}, children);
|
|
599
|
+
}
|
|
572
600
|
return children;
|
|
573
601
|
}
|
|
602
|
+
|
|
603
|
+
// Usage notes:
|
|
604
|
+
// Used by Confluence for nested renderers
|
|
605
|
+
// For the View page renderer - see RendererWithAnalytics
|
|
574
606
|
var RendererWithAnnotationSelection = function RendererWithAnnotationSelection(props) {
|
|
575
607
|
var allowAnnotations = props.allowAnnotations,
|
|
576
608
|
adfDocument = props.document;
|
|
@@ -19,6 +19,14 @@ var LoadAnnotations = /*#__PURE__*/React.memo(function (_ref) {
|
|
|
19
19
|
});
|
|
20
20
|
return null;
|
|
21
21
|
});
|
|
22
|
+
|
|
23
|
+
// This is used by renderers when setting the data-start-pos attribute on commentable nodes
|
|
24
|
+
// By default it is 1 (the possible starting position of any document).
|
|
25
|
+
// The bodied extension component then sets a new value for this context based on its on position
|
|
26
|
+
// in the document.
|
|
27
|
+
export var AnnotationsPositionContext = /*#__PURE__*/React.createContext({
|
|
28
|
+
startPos: 1
|
|
29
|
+
});
|
|
22
30
|
export var AnnotationsWrapper = function AnnotationsWrapper(props) {
|
|
23
31
|
var _annotationProvider$i, _annotationProvider$i2;
|
|
24
32
|
var children = props.children,
|
|
@@ -12,6 +12,12 @@ import type { MediaOptions } from '../types/mediaOptions';
|
|
|
12
12
|
import type { SmartLinksOptions } from '../types/smartLinksOptions';
|
|
13
13
|
import type { EmojiResourceConfig } from '@atlaskit/emoji/resource';
|
|
14
14
|
export interface ReactSerializerInit {
|
|
15
|
+
/**
|
|
16
|
+
* Used for to set positions on nodes for annotations.
|
|
17
|
+
*
|
|
18
|
+
* When not provided defaults to 1.
|
|
19
|
+
*/
|
|
20
|
+
startPos?: number;
|
|
15
21
|
providers?: ProviderFactory;
|
|
16
22
|
eventHandlers?: EventHandlers;
|
|
17
23
|
extensionHandlers?: ExtensionHandlers;
|
|
@@ -79,6 +85,7 @@ export default class ReactSerializer implements Serializer<JSX.Element> {
|
|
|
79
85
|
private allowAltTextOnImages?;
|
|
80
86
|
private stickyHeaders?;
|
|
81
87
|
private allowMediaLinking?;
|
|
88
|
+
private initStartPos;
|
|
82
89
|
private startPos;
|
|
83
90
|
private surroundTextNodesWithTextWrapper;
|
|
84
91
|
private media?;
|
|
@@ -9,7 +9,12 @@ import type { RendererProps } from '../renderer-props';
|
|
|
9
9
|
export declare const NORMAL_SEVERITY_THRESHOLD = 2000;
|
|
10
10
|
export declare const DEGRADED_SEVERITY_THRESHOLD = 3000;
|
|
11
11
|
export declare const defaultNodeComponents: NodeComponentsProps;
|
|
12
|
-
|
|
12
|
+
/**
|
|
13
|
+
* Exported due to enzyme test reliance on this component.
|
|
14
|
+
*/
|
|
15
|
+
export declare class __RendererClassComponent extends PureComponent<RendererProps & {
|
|
16
|
+
startPos?: number;
|
|
17
|
+
}> {
|
|
13
18
|
private providerFactory;
|
|
14
19
|
private serializer;
|
|
15
20
|
private editorRef;
|
|
@@ -21,10 +26,14 @@ export declare class Renderer extends PureComponent<RendererProps> {
|
|
|
21
26
|
* deleted once that measurement occurs.
|
|
22
27
|
*/
|
|
23
28
|
private renderedMeasurementDistortedDurationMonitor?;
|
|
24
|
-
constructor(props: RendererProps
|
|
29
|
+
constructor(props: RendererProps & {
|
|
30
|
+
startPos: number;
|
|
31
|
+
});
|
|
25
32
|
private anchorLinkAnalytics;
|
|
26
33
|
componentDidMount(): void;
|
|
27
|
-
UNSAFE_componentWillReceiveProps(nextProps: RendererProps
|
|
34
|
+
UNSAFE_componentWillReceiveProps(nextProps: RendererProps & {
|
|
35
|
+
startPos: number;
|
|
36
|
+
}): void;
|
|
28
37
|
private deriveSerializerProps;
|
|
29
38
|
private featureFlags;
|
|
30
39
|
private fireAnalyticsEvent;
|
|
@@ -34,6 +43,7 @@ export declare class Renderer extends PureComponent<RendererProps> {
|
|
|
34
43
|
render(): jsx.JSX.Element;
|
|
35
44
|
componentWillUnmount(): void;
|
|
36
45
|
}
|
|
46
|
+
export declare function Renderer(props: RendererProps): jsx.JSX.Element;
|
|
37
47
|
export declare const RendererWithAnalytics: React.MemoExoticComponent<(props: RendererProps) => jsx.JSX.Element>;
|
|
38
48
|
declare const RendererWithAnnotationSelection: (props: RendererProps) => jsx.JSX.Element;
|
|
39
49
|
export default RendererWithAnnotationSelection;
|
|
@@ -1,5 +1,8 @@
|
|
|
1
|
-
|
|
1
|
+
import React from 'react';
|
|
2
2
|
import { type AnnotationsWrapperProps } from './types';
|
|
3
|
+
export declare const AnnotationsPositionContext: React.Context<{
|
|
4
|
+
startPos: number;
|
|
5
|
+
}>;
|
|
3
6
|
export declare const AnnotationsWrapper: (props: AnnotationsWrapperProps) => JSX.Element;
|
|
4
7
|
export { TextWithAnnotationDraft } from './draft';
|
|
5
8
|
export { MarkElement as AnnotationMark } from './element';
|
|
@@ -15,10 +15,18 @@ export type AnnotationsWrapperProps = React.PropsWithChildren<{
|
|
|
15
15
|
adfDocument: JSONDocNode;
|
|
16
16
|
annotationProvider: AnnotationProviders | null | undefined;
|
|
17
17
|
rendererRef: React.RefObject<HTMLDivElement>;
|
|
18
|
+
/**
|
|
19
|
+
* This is set (by consumers) for nested renderers when they are
|
|
20
|
+
* rendering bodied extension content.
|
|
21
|
+
*/
|
|
18
22
|
isNestedRender: boolean;
|
|
19
23
|
onLoadComplete?: ({ numberOfUnresolvedInlineComments, }: {
|
|
20
24
|
numberOfUnresolvedInlineComments: number;
|
|
21
25
|
}) => void;
|
|
26
|
+
/**
|
|
27
|
+
* This is set internally -- and should not be set by consumers.
|
|
28
|
+
*/
|
|
29
|
+
_startPos?: number;
|
|
22
30
|
}>;
|
|
23
31
|
export type TextPosition = {
|
|
24
32
|
start: number;
|
|
@@ -12,6 +12,12 @@ import type { MediaOptions } from '../types/mediaOptions';
|
|
|
12
12
|
import type { SmartLinksOptions } from '../types/smartLinksOptions';
|
|
13
13
|
import type { EmojiResourceConfig } from '@atlaskit/emoji/resource';
|
|
14
14
|
export interface ReactSerializerInit {
|
|
15
|
+
/**
|
|
16
|
+
* Used for to set positions on nodes for annotations.
|
|
17
|
+
*
|
|
18
|
+
* When not provided defaults to 1.
|
|
19
|
+
*/
|
|
20
|
+
startPos?: number;
|
|
15
21
|
providers?: ProviderFactory;
|
|
16
22
|
eventHandlers?: EventHandlers;
|
|
17
23
|
extensionHandlers?: ExtensionHandlers;
|
|
@@ -79,6 +85,7 @@ export default class ReactSerializer implements Serializer<JSX.Element> {
|
|
|
79
85
|
private allowAltTextOnImages?;
|
|
80
86
|
private stickyHeaders?;
|
|
81
87
|
private allowMediaLinking?;
|
|
88
|
+
private initStartPos;
|
|
82
89
|
private startPos;
|
|
83
90
|
private surroundTextNodesWithTextWrapper;
|
|
84
91
|
private media?;
|
|
@@ -9,7 +9,12 @@ import type { RendererProps } from '../renderer-props';
|
|
|
9
9
|
export declare const NORMAL_SEVERITY_THRESHOLD = 2000;
|
|
10
10
|
export declare const DEGRADED_SEVERITY_THRESHOLD = 3000;
|
|
11
11
|
export declare const defaultNodeComponents: NodeComponentsProps;
|
|
12
|
-
|
|
12
|
+
/**
|
|
13
|
+
* Exported due to enzyme test reliance on this component.
|
|
14
|
+
*/
|
|
15
|
+
export declare class __RendererClassComponent extends PureComponent<RendererProps & {
|
|
16
|
+
startPos?: number;
|
|
17
|
+
}> {
|
|
13
18
|
private providerFactory;
|
|
14
19
|
private serializer;
|
|
15
20
|
private editorRef;
|
|
@@ -21,10 +26,14 @@ export declare class Renderer extends PureComponent<RendererProps> {
|
|
|
21
26
|
* deleted once that measurement occurs.
|
|
22
27
|
*/
|
|
23
28
|
private renderedMeasurementDistortedDurationMonitor?;
|
|
24
|
-
constructor(props: RendererProps
|
|
29
|
+
constructor(props: RendererProps & {
|
|
30
|
+
startPos: number;
|
|
31
|
+
});
|
|
25
32
|
private anchorLinkAnalytics;
|
|
26
33
|
componentDidMount(): void;
|
|
27
|
-
UNSAFE_componentWillReceiveProps(nextProps: RendererProps
|
|
34
|
+
UNSAFE_componentWillReceiveProps(nextProps: RendererProps & {
|
|
35
|
+
startPos: number;
|
|
36
|
+
}): void;
|
|
28
37
|
private deriveSerializerProps;
|
|
29
38
|
private featureFlags;
|
|
30
39
|
private fireAnalyticsEvent;
|
|
@@ -34,6 +43,7 @@ export declare class Renderer extends PureComponent<RendererProps> {
|
|
|
34
43
|
render(): jsx.JSX.Element;
|
|
35
44
|
componentWillUnmount(): void;
|
|
36
45
|
}
|
|
46
|
+
export declare function Renderer(props: RendererProps): jsx.JSX.Element;
|
|
37
47
|
export declare const RendererWithAnalytics: React.MemoExoticComponent<(props: RendererProps) => jsx.JSX.Element>;
|
|
38
48
|
declare const RendererWithAnnotationSelection: (props: RendererProps) => jsx.JSX.Element;
|
|
39
49
|
export default RendererWithAnnotationSelection;
|
|
@@ -1,5 +1,8 @@
|
|
|
1
|
-
|
|
1
|
+
import React from 'react';
|
|
2
2
|
import { type AnnotationsWrapperProps } from './types';
|
|
3
|
+
export declare const AnnotationsPositionContext: React.Context<{
|
|
4
|
+
startPos: number;
|
|
5
|
+
}>;
|
|
3
6
|
export declare const AnnotationsWrapper: (props: AnnotationsWrapperProps) => JSX.Element;
|
|
4
7
|
export { TextWithAnnotationDraft } from './draft';
|
|
5
8
|
export { MarkElement as AnnotationMark } from './element';
|
|
@@ -15,10 +15,18 @@ export type AnnotationsWrapperProps = React.PropsWithChildren<{
|
|
|
15
15
|
adfDocument: JSONDocNode;
|
|
16
16
|
annotationProvider: AnnotationProviders | null | undefined;
|
|
17
17
|
rendererRef: React.RefObject<HTMLDivElement>;
|
|
18
|
+
/**
|
|
19
|
+
* This is set (by consumers) for nested renderers when they are
|
|
20
|
+
* rendering bodied extension content.
|
|
21
|
+
*/
|
|
18
22
|
isNestedRender: boolean;
|
|
19
23
|
onLoadComplete?: ({ numberOfUnresolvedInlineComments, }: {
|
|
20
24
|
numberOfUnresolvedInlineComments: number;
|
|
21
25
|
}) => void;
|
|
26
|
+
/**
|
|
27
|
+
* This is set internally -- and should not be set by consumers.
|
|
28
|
+
*/
|
|
29
|
+
_startPos?: number;
|
|
22
30
|
}>;
|
|
23
31
|
export type TextPosition = {
|
|
24
32
|
start: number;
|