@atlaskit/editor-plugin-media 1.28.4 → 1.29.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 +21 -0
- package/dist/cjs/nodeviews/mediaSingle.js +72 -24
- package/dist/cjs/toDOM-fixes/media.js +42 -2
- package/dist/cjs/toDOM-fixes/mediaGroup.js +2 -20
- package/dist/cjs/toDOM-fixes/mediaSingle.js +19 -14
- package/dist/cjs/ui/CommentBadge/index.js +67 -2
- package/dist/es2019/nodeviews/mediaSingle.js +51 -5
- package/dist/es2019/toDOM-fixes/media.js +53 -1
- package/dist/es2019/toDOM-fixes/mediaGroup.js +9 -20
- package/dist/es2019/toDOM-fixes/mediaSingle.js +19 -14
- package/dist/es2019/ui/CommentBadge/index.js +68 -3
- package/dist/esm/nodeviews/mediaSingle.js +74 -25
- package/dist/esm/toDOM-fixes/media.js +40 -1
- package/dist/esm/toDOM-fixes/mediaGroup.js +2 -19
- package/dist/esm/toDOM-fixes/mediaSingle.js +19 -14
- package/dist/esm/ui/CommentBadge/index.js +68 -3
- package/dist/types/nodeviews/mediaSingle.d.ts +1 -0
- package/dist/types/toDOM-fixes/media.d.ts +15 -0
- package/dist/types/toDOM-fixes/mediaSingle.d.ts +2 -1
- package/dist/types/ui/CommentBadge/index.d.ts +1 -0
- package/dist/types-ts4.5/nodeviews/mediaSingle.d.ts +1 -0
- package/dist/types-ts4.5/toDOM-fixes/media.d.ts +15 -0
- package/dist/types-ts4.5/toDOM-fixes/mediaSingle.d.ts +2 -1
- package/dist/types-ts4.5/ui/CommentBadge/index.d.ts +1 -0
- package/package.json +9 -6
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,26 @@
|
|
|
1
1
|
# @atlaskit/editor-plugin-media
|
|
2
2
|
|
|
3
|
+
## 1.29.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- [#130065](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/pull-requests/130065)
|
|
8
|
+
[`e71a357ea40dd`](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/commits/e71a357ea40dd) -
|
|
9
|
+
[ux] [ED-24323] Add external image badge for externally hosted images
|
|
10
|
+
|
|
11
|
+
### Patch Changes
|
|
12
|
+
|
|
13
|
+
- Updated dependencies
|
|
14
|
+
|
|
15
|
+
## 1.28.5
|
|
16
|
+
|
|
17
|
+
### Patch Changes
|
|
18
|
+
|
|
19
|
+
- [#129804](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/pull-requests/129804)
|
|
20
|
+
[`790a6fe6bc9e8`](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/commits/790a6fe6bc9e8) -
|
|
21
|
+
[ED-24516] Fix VR test helpers for fallback LazyNodeViews
|
|
22
|
+
- Updated dependencies
|
|
23
|
+
|
|
3
24
|
## 1.28.4
|
|
4
25
|
|
|
5
26
|
### Patch Changes
|
|
@@ -72,6 +72,7 @@ var MediaSingleNode = exports.default = /*#__PURE__*/function (_Component) {
|
|
|
72
72
|
});
|
|
73
73
|
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "mediaSingleWrapperRef", /*#__PURE__*/_react.default.createRef());
|
|
74
74
|
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "captionPlaceHolderRef", /*#__PURE__*/_react.default.createRef());
|
|
75
|
+
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "commentBadgeRef", /*#__PURE__*/_react.default.createRef());
|
|
75
76
|
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "createOrUpdateMediaNodeUpdater", function (props) {
|
|
76
77
|
var node = _this.props.node.firstChild;
|
|
77
78
|
var updaterProps = _objectSpread(_objectSpread({}, props), {}, {
|
|
@@ -331,7 +332,12 @@ var MediaSingleNode = exports.default = /*#__PURE__*/function (_Component) {
|
|
|
331
332
|
}, {
|
|
332
333
|
key: "render",
|
|
333
334
|
value: function render() {
|
|
334
|
-
var _mediaOptions$getEdit,
|
|
335
|
+
var _mediaOptions$getEdit,
|
|
336
|
+
_pluginInjectionApi$m,
|
|
337
|
+
_node$firstChild,
|
|
338
|
+
_this2 = this,
|
|
339
|
+
_mediaOptions$getEdit3,
|
|
340
|
+
_mediaOptions$getEdit4;
|
|
335
341
|
var _this$props2 = this.props,
|
|
336
342
|
selected = _this$props2.selected,
|
|
337
343
|
getPos = _this$props2.getPos,
|
|
@@ -448,6 +454,34 @@ var MediaSingleNode = exports.default = /*#__PURE__*/function (_Component) {
|
|
|
448
454
|
shouldShowPlaceholder = !editorDisabled && shouldShowPlaceholder;
|
|
449
455
|
}
|
|
450
456
|
var isCurrentNodeDrafting = (annotationPluginState === null || annotationPluginState === void 0 ? void 0 : annotationPluginState.isDrafting) && (annotationPluginState === null || annotationPluginState === void 0 ? void 0 : annotationPluginState.targetNodeId) === (node === null || node === void 0 || (_node$firstChild = node.firstChild) === null || _node$firstChild === void 0 ? void 0 : _node$firstChild.attrs.id);
|
|
457
|
+
var insertMediaPluginPhaseOneFeatureFlag = (0, _platformFeatureFlags.fg)('platform_editor_insert_media_plugin_phase_one');
|
|
458
|
+
var shouldShowExternalMediaBadge = attrs.type === 'external' && attrs.__external && insertMediaPluginPhaseOneFeatureFlag;
|
|
459
|
+
var commentBadgeOffset = function commentBadgeOffset() {
|
|
460
|
+
if (_this2.commentBadgeRef.current) {
|
|
461
|
+
var _mediaOptions$getEdit2;
|
|
462
|
+
var commentsOnMediaBugFixEnabled = mediaOptions === null || mediaOptions === void 0 || (_mediaOptions$getEdit2 = mediaOptions.getEditorFeatureFlags) === null || _mediaOptions$getEdit2 === void 0 || (_mediaOptions$getEdit2 = _mediaOptions$getEdit2.call(mediaOptions)) === null || _mediaOptions$getEdit2 === void 0 ? void 0 : _mediaOptions$getEdit2.commentsOnMediaBugFix;
|
|
463
|
+
var commentBadgeWidth = _this2.commentBadgeRef.current.offsetWidth;
|
|
464
|
+
var isMediaInsideTable = function isMediaInsideTable() {
|
|
465
|
+
var pos = getPos();
|
|
466
|
+
if (pos !== undefined) {
|
|
467
|
+
var _$pos2 = view.state.doc.resolve(pos);
|
|
468
|
+
var _table2 = view.state.schema.nodes.table;
|
|
469
|
+
var foundTableNode = (0, _utils2.findParentNodeOfTypeClosestToPos)(_$pos2, [_table2]);
|
|
470
|
+
return Boolean(foundTableNode);
|
|
471
|
+
}
|
|
472
|
+
return false;
|
|
473
|
+
};
|
|
474
|
+
if (commentsOnMediaBugFixEnabled && isMediaInsideTable()) {
|
|
475
|
+
return commentBadgeWidth + 2;
|
|
476
|
+
}
|
|
477
|
+
return commentBadgeWidth + 14;
|
|
478
|
+
}
|
|
479
|
+
return 0;
|
|
480
|
+
};
|
|
481
|
+
var currentMediaElement = function currentMediaElement() {
|
|
482
|
+
var pos = getPos();
|
|
483
|
+
return view.domAtPos(pos + 1).node;
|
|
484
|
+
};
|
|
451
485
|
var MediaChildren = (0, _react2.jsx)("figure", {
|
|
452
486
|
ref: this.mediaSingleWrapperRef,
|
|
453
487
|
css: figureWrapperStyles
|
|
@@ -455,15 +489,29 @@ var MediaSingleNode = exports.default = /*#__PURE__*/function (_Component) {
|
|
|
455
489
|
,
|
|
456
490
|
className: _styles.MediaSingleNodeSelector,
|
|
457
491
|
onClick: this.onMediaSingleClicked
|
|
458
|
-
},
|
|
459
|
-
|
|
492
|
+
}, shouldShowExternalMediaBadge && (0, _react2.jsx)(_mediaSingle.ExternalImageBadge, {
|
|
493
|
+
commentBadgeRightOffset: commentBadgeOffset(),
|
|
494
|
+
mediaElement: currentMediaElement(),
|
|
495
|
+
mediaHeight: height,
|
|
496
|
+
mediaWidth: width
|
|
497
|
+
}), commentsOnMedia && (insertMediaPluginPhaseOneFeatureFlag ? (0, _react2.jsx)(_CommentBadge.CommentBadgeWithRef, {
|
|
498
|
+
ref: this.commentBadgeRef,
|
|
499
|
+
commentsOnMediaBugFixEnabled: mediaOptions === null || mediaOptions === void 0 || (_mediaOptions$getEdit3 = mediaOptions.getEditorFeatureFlags) === null || _mediaOptions$getEdit3 === void 0 || (_mediaOptions$getEdit3 = _mediaOptions$getEdit3.call(mediaOptions)) === null || _mediaOptions$getEdit3 === void 0 ? void 0 : _mediaOptions$getEdit3.commentsOnMediaBugFix,
|
|
460
500
|
view: view,
|
|
461
501
|
api: pluginInjectionApi,
|
|
462
502
|
mediaNode: node === null || node === void 0 ? void 0 : node.firstChild,
|
|
463
503
|
badgeOffsetRight: badgeOffsetRight,
|
|
464
504
|
getPos: getPos,
|
|
465
505
|
isDrafting: isCurrentNodeDrafting
|
|
466
|
-
})
|
|
506
|
+
}) : (0, _react2.jsx)(_CommentBadge.CommentBadge, {
|
|
507
|
+
commentsOnMediaBugFixEnabled: mediaOptions === null || mediaOptions === void 0 || (_mediaOptions$getEdit4 = mediaOptions.getEditorFeatureFlags) === null || _mediaOptions$getEdit4 === void 0 || (_mediaOptions$getEdit4 = _mediaOptions$getEdit4.call(mediaOptions)) === null || _mediaOptions$getEdit4 === void 0 ? void 0 : _mediaOptions$getEdit4.commentsOnMediaBugFix,
|
|
508
|
+
view: view,
|
|
509
|
+
api: pluginInjectionApi,
|
|
510
|
+
mediaNode: node === null || node === void 0 ? void 0 : node.firstChild,
|
|
511
|
+
badgeOffsetRight: badgeOffsetRight,
|
|
512
|
+
getPos: getPos,
|
|
513
|
+
isDrafting: isCurrentNodeDrafting
|
|
514
|
+
})), (0, _react2.jsx)("div", {
|
|
467
515
|
ref: this.props.forwardRef
|
|
468
516
|
}), shouldShowPlaceholder && (0, _react2.jsx)(_CaptionPlaceholder.default, {
|
|
469
517
|
ref: this.captionPlaceHolderRef,
|
|
@@ -538,18 +586,18 @@ var MediaSingleNodeView = /*#__PURE__*/function (_ReactNodeView) {
|
|
|
538
586
|
(0, _inherits2.default)(MediaSingleNodeView, _ReactNodeView);
|
|
539
587
|
var _super2 = _createSuper(MediaSingleNodeView);
|
|
540
588
|
function MediaSingleNodeView() {
|
|
541
|
-
var
|
|
589
|
+
var _this3;
|
|
542
590
|
(0, _classCallCheck2.default)(this, MediaSingleNodeView);
|
|
543
591
|
for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
|
|
544
592
|
args[_key2] = arguments[_key2];
|
|
545
593
|
}
|
|
546
|
-
|
|
547
|
-
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(
|
|
548
|
-
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(
|
|
549
|
-
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(
|
|
550
|
-
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(
|
|
551
|
-
var getPos =
|
|
552
|
-
var selection =
|
|
594
|
+
_this3 = _super2.call.apply(_super2, [this].concat(args));
|
|
595
|
+
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this3), "lastOffsetLeft", 0);
|
|
596
|
+
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this3), "forceViewUpdate", false);
|
|
597
|
+
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this3), "selectionType", null);
|
|
598
|
+
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this3), "checkAndUpdateSelectionType", function () {
|
|
599
|
+
var getPos = _this3.getPos;
|
|
600
|
+
var selection = _this3.view.state.selection;
|
|
553
601
|
|
|
554
602
|
/**
|
|
555
603
|
* ED-19831
|
|
@@ -562,15 +610,15 @@ var MediaSingleNodeView = /*#__PURE__*/function (_ReactNodeView) {
|
|
|
562
610
|
} catch (e) {
|
|
563
611
|
pos = undefined;
|
|
564
612
|
}
|
|
565
|
-
var isNodeSelected = (0, _utils.isNodeSelectedOrInRange)(selection.$anchor.pos, selection.$head.pos, pos,
|
|
566
|
-
|
|
613
|
+
var isNodeSelected = (0, _utils.isNodeSelectedOrInRange)(selection.$anchor.pos, selection.$head.pos, pos, _this3.node.nodeSize);
|
|
614
|
+
_this3.selectionType = isNodeSelected;
|
|
567
615
|
return isNodeSelected;
|
|
568
616
|
});
|
|
569
|
-
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(
|
|
570
|
-
|
|
571
|
-
return
|
|
617
|
+
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this3), "isNodeSelected", function () {
|
|
618
|
+
_this3.checkAndUpdateSelectionType();
|
|
619
|
+
return _this3.selectionType !== null;
|
|
572
620
|
});
|
|
573
|
-
return
|
|
621
|
+
return _this3;
|
|
574
622
|
}
|
|
575
623
|
(0, _createClass2.default)(MediaSingleNodeView, [{
|
|
576
624
|
key: "createDomRef",
|
|
@@ -635,10 +683,10 @@ var MediaSingleNodeView = /*#__PURE__*/function (_ReactNodeView) {
|
|
|
635
683
|
}, {
|
|
636
684
|
key: "update",
|
|
637
685
|
value: function update(node, decorations, _innerDecorations, isValidUpdate) {
|
|
638
|
-
var
|
|
686
|
+
var _this4 = this;
|
|
639
687
|
if (!isValidUpdate) {
|
|
640
688
|
isValidUpdate = function isValidUpdate(currentNode, newNode) {
|
|
641
|
-
return
|
|
689
|
+
return _this4.getNodeMediaId(currentNode) === _this4.getNodeMediaId(newNode);
|
|
642
690
|
};
|
|
643
691
|
}
|
|
644
692
|
return (0, _get2.default)((0, _getPrototypeOf2.default)(MediaSingleNodeView.prototype), "update", this).call(this, node, decorations, _innerDecorations, isValidUpdate);
|
|
@@ -646,7 +694,7 @@ var MediaSingleNodeView = /*#__PURE__*/function (_ReactNodeView) {
|
|
|
646
694
|
}, {
|
|
647
695
|
key: "render",
|
|
648
696
|
value: function render(props, forwardRef) {
|
|
649
|
-
var
|
|
697
|
+
var _this5 = this;
|
|
650
698
|
var _this$reactComponentP = this.reactComponentProps,
|
|
651
699
|
eventDispatcher = _this$reactComponentP.eventDispatcher,
|
|
652
700
|
fullWidthMode = _this$reactComponentP.fullWidthMode,
|
|
@@ -671,12 +719,12 @@ var MediaSingleNodeView = /*#__PURE__*/function (_ReactNodeView) {
|
|
|
671
719
|
pluginInjectionApi: pluginInjectionApi,
|
|
672
720
|
mediaProvider: mediaProvider,
|
|
673
721
|
contextIdentifierProvider: contextIdentifierProvider,
|
|
674
|
-
node:
|
|
722
|
+
node: _this5.node,
|
|
675
723
|
getPos: getPos,
|
|
676
724
|
mediaOptions: mediaOptions,
|
|
677
|
-
view:
|
|
725
|
+
view: _this5.view,
|
|
678
726
|
fullWidthMode: fullWidthMode,
|
|
679
|
-
selected:
|
|
727
|
+
selected: _this5.isNodeSelected,
|
|
680
728
|
eventDispatcher: eventDispatcher,
|
|
681
729
|
dispatchAnalyticsEvent: dispatchAnalyticsEvent,
|
|
682
730
|
forwardRef: forwardRef,
|
|
@@ -4,13 +4,31 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
4
4
|
Object.defineProperty(exports, "__esModule", {
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
|
-
exports.mediaSpecWithFixedToDOM = void 0;
|
|
7
|
+
exports.mediaSpecWithFixedToDOM = exports.defaultImageCardDimensions = void 0;
|
|
8
8
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
9
9
|
var _adfSchema = require("@atlaskit/adf-schema");
|
|
10
10
|
var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
|
|
11
11
|
var _toDOMAttrs = require("./toDOMAttrs");
|
|
12
12
|
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
13
13
|
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) { (0, _defineProperty2.default)(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; }
|
|
14
|
+
var skeletonStyling = "background: ".concat("var(--ds-background-neutral, #091E420F)", "; outline: none;");
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Duplicate consts from `media-card`.
|
|
18
|
+
* `packages/media/media-card/src/utils/cardDimensions.ts`
|
|
19
|
+
*
|
|
20
|
+
* WHY?
|
|
21
|
+
* This will eventually move to `@atlaskit/adf-schema` and we cannot reference
|
|
22
|
+
* `media-card` from here or it will cause dependency issues.
|
|
23
|
+
*
|
|
24
|
+
* In the long term likely `toDOM` will move back out of `adf-schema` in which
|
|
25
|
+
* case we can consolidate them.
|
|
26
|
+
*/
|
|
27
|
+
var defaultImageCardDimensions = exports.defaultImageCardDimensions = {
|
|
28
|
+
width: 156,
|
|
29
|
+
height: 125
|
|
30
|
+
};
|
|
31
|
+
|
|
14
32
|
// @nodeSpecException:toDOM patch
|
|
15
33
|
var mediaSpecWithFixedToDOM = exports.mediaSpecWithFixedToDOM = function mediaSpecWithFixedToDOM() {
|
|
16
34
|
if (!(0, _platformFeatureFlags.fg)('platform_editor_lazy-node-views')) {
|
|
@@ -19,7 +37,29 @@ var mediaSpecWithFixedToDOM = exports.mediaSpecWithFixedToDOM = function mediaSp
|
|
|
19
37
|
return _objectSpread(_objectSpread({}, _adfSchema.media), {}, {
|
|
20
38
|
toDOM: function toDOM(node) {
|
|
21
39
|
var attrs = (0, _toDOMAttrs.getMediaAttrs)('media', node);
|
|
22
|
-
|
|
40
|
+
var styles = skeletonStyling;
|
|
41
|
+
if (node.attrs.type === 'external') {
|
|
42
|
+
return ['img', _objectSpread(_objectSpread({}, attrs), {}, {
|
|
43
|
+
src: node.attrs.url,
|
|
44
|
+
styles: styles
|
|
45
|
+
})];
|
|
46
|
+
}
|
|
47
|
+
if (node.attrs.type === 'file') {
|
|
48
|
+
var dataUrl = 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7';
|
|
49
|
+
var width = defaultImageCardDimensions.width;
|
|
50
|
+
var height = defaultImageCardDimensions.height;
|
|
51
|
+
return ['div', _objectSpread(_objectSpread({
|
|
52
|
+
width: width,
|
|
53
|
+
height: height
|
|
54
|
+
}, attrs), {}, {
|
|
55
|
+
// Manually kept in sync with the style of media cards. The goal is to render a plain gray
|
|
56
|
+
// rectangle that provides an affordance for media.
|
|
57
|
+
style: "\n\t\t\t\t\t\tdisplay: inline-block;\n\t\t\t\t\t\tbackground-image: url(\"".concat(dataUrl, "\");\n\t\t\t\t\t\tmargin-left: 0;\n\t\t\t\t\t\tmargin-right: 4px;\n\t\t\t\t\t\tborder-radius: ").concat(skeletonStyling, ";\n\n\t\t\t\t\t\tflex-basis: ").concat(defaultImageCardDimensions.width, "px;\n\t\t\t\t\t\tbackground-color: var(--media-card-background-color, unset);\n\t\t\t\t\t\twidth: var(--media-card-width, 0);\n\t\t\t\t\t\theight: var(--media-card-height, 0);\n\t\t\t\t\t\t")
|
|
58
|
+
})];
|
|
59
|
+
}
|
|
60
|
+
return ['div', _objectSpread(_objectSpread({}, attrs), {}, {
|
|
61
|
+
styles: styles
|
|
62
|
+
})];
|
|
23
63
|
}
|
|
24
64
|
});
|
|
25
65
|
};
|
|
@@ -10,8 +10,6 @@ var _adfSchema = require("@atlaskit/adf-schema");
|
|
|
10
10
|
var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
|
|
11
11
|
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
12
12
|
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) { (0, _defineProperty2.default)(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; }
|
|
13
|
-
var skeletonStyling = "background: ".concat("var(--ds-background-neutral, #091E420F)", ";");
|
|
14
|
-
|
|
15
13
|
/**
|
|
16
14
|
* Duplicate consts from `media-card`.
|
|
17
15
|
* `packages/media/media-card/src/utils/cardDimensions.ts`
|
|
@@ -68,27 +66,11 @@ var mediaGroupSpecWithFixedToDOM = exports.mediaGroupSpecWithFixedToDOM = functi
|
|
|
68
66
|
}
|
|
69
67
|
return _objectSpread(_objectSpread({}, _adfSchema.mediaGroup), {}, {
|
|
70
68
|
toDOM: function toDOM(node) {
|
|
71
|
-
var childNodes = [];
|
|
72
|
-
for (var i = 0; i < node.childCount; i++) {
|
|
73
|
-
var _getDefaultCardDimens = getDefaultCardDimensions(),
|
|
74
|
-
width = _getDefaultCardDimens.width,
|
|
75
|
-
height = _getDefaultCardDimens.height;
|
|
76
|
-
var nodeHolder = ['img', {
|
|
77
|
-
width: width,
|
|
78
|
-
height: height,
|
|
79
|
-
// Transparent image workaround to control styling
|
|
80
|
-
src: 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7',
|
|
81
|
-
style: "margin-left: ".concat(i !== 0 ? "4px" : '0', "; margin-right: 4px; border-radius: ", "var(--ds-border-radius, 3px)", "; ").concat(skeletonStyling)
|
|
82
|
-
}];
|
|
83
|
-
childNodes.push(nodeHolder);
|
|
84
|
-
}
|
|
85
|
-
|
|
86
69
|
// Margin margin that consolidates the margin in the
|
|
87
70
|
return ['div', {
|
|
88
|
-
style:
|
|
89
|
-
// From adf-schema
|
|
71
|
+
style: "\n\t\t\t\t\t\tmargin: 3px 5px;\n\t\t\t\t\t\tdisplay: flex;\n\t\t\t\t\t\tgap: 8px;\n\t\t\t\t\t\t--media-card-background-color: #EBECF0;\n\t\t\t\t\t\t--media-card-width: ".concat(defaultImageCardDimensions.width, "px;\n\t\t\t\t\t\t--media-card-height: ").concat(defaultImageCardDimensions.height, "px;\n\t\t\t\t\t"),
|
|
90
72
|
'data-node-type': 'mediaGroup'
|
|
91
|
-
}]
|
|
73
|
+
}, 0];
|
|
92
74
|
}
|
|
93
75
|
});
|
|
94
76
|
};
|
|
@@ -67,11 +67,8 @@ function getMediaSinglePixelWidth(width, editorWidth) {
|
|
|
67
67
|
function computeMediaSingleDimensions(_ref) {
|
|
68
68
|
var childNode = _ref.childNode,
|
|
69
69
|
mediaSingleWidth = _ref.mediaSingleWidth,
|
|
70
|
-
widthType = _ref.widthType
|
|
71
|
-
|
|
72
|
-
// For now we're using the default line length here, but this will be
|
|
73
|
-
// incorrect on smaller devices.
|
|
74
|
-
var editorWidth = 760;
|
|
70
|
+
widthType = _ref.widthType,
|
|
71
|
+
editorWidth = _ref.editorWidth;
|
|
75
72
|
var width = childNode === null || childNode === void 0 ? void 0 : childNode.attrs.width;
|
|
76
73
|
var height = childNode === null || childNode === void 0 ? void 0 : childNode.attrs.height;
|
|
77
74
|
if (!mediaSingleWidth && shouldAddDefaultWrappedWidth(childNode === null || childNode === void 0 ? void 0 : childNode.attrs.layout, width, editorWidth)) {
|
|
@@ -127,36 +124,44 @@ var mediaSingleSpecWithFixedToDOM = exports.mediaSingleSpecWithFixedToDOM = func
|
|
|
127
124
|
return mediaSingleNode;
|
|
128
125
|
}
|
|
129
126
|
return _objectSpread(_objectSpread({}, mediaSingleNode), {}, {
|
|
130
|
-
toDOM: function toDOM(node) {
|
|
127
|
+
toDOM: function toDOM(node, lazyNodeViewOptions) {
|
|
131
128
|
var _mediaSingleAttrs$lay;
|
|
132
|
-
var childNode = node.firstChild;
|
|
133
129
|
var mediaSingleAttrs = node.attrs;
|
|
134
130
|
var layout = (_mediaSingleAttrs$lay = mediaSingleAttrs === null || mediaSingleAttrs === void 0 ? void 0 : mediaSingleAttrs.layout) !== null && _mediaSingleAttrs$lay !== void 0 ? _mediaSingleAttrs$lay : 'center';
|
|
135
131
|
var mediaSingleWidth = mediaSingleAttrs === null || mediaSingleAttrs === void 0 ? void 0 : mediaSingleAttrs.width;
|
|
136
132
|
var widthType = mediaSingleAttrs === null || mediaSingleAttrs === void 0 ? void 0 : mediaSingleAttrs.widthType;
|
|
133
|
+
var childNode = node.firstChild;
|
|
137
134
|
var dataAttrs = (0, _toDOMAttrs.getAttrsFromNodeMediaSingle)(mediaSingleOption.withExtendedWidthTypes, node);
|
|
138
135
|
var _computeMediaSingleDi = computeMediaSingleDimensions({
|
|
139
136
|
childNode: childNode,
|
|
140
137
|
widthType: widthType,
|
|
141
|
-
mediaSingleWidth: mediaSingleWidth
|
|
138
|
+
mediaSingleWidth: mediaSingleWidth,
|
|
139
|
+
editorWidth: (lazyNodeViewOptions === null || lazyNodeViewOptions === void 0 ? void 0 : lazyNodeViewOptions.editorLineWidth) || 760
|
|
142
140
|
}),
|
|
143
141
|
width = _computeMediaSingleDi.width,
|
|
144
142
|
height = _computeMediaSingleDi.height;
|
|
145
|
-
var
|
|
143
|
+
var sizes = width && height ? "width: ".concat(width, "px; height: ").concat(height, "px; ").concat(skeletonStyling) : '';
|
|
144
|
+
var layoutStyles = computeLayoutStyles(mediaSingleWidth, layout);
|
|
146
145
|
var style = "display: block; margin-top: ".concat("var(--ds-space-300, 24px)", "; margin-bottom: ", "var(--ds-space-300, 24px)", "; ", layoutStyles);
|
|
146
|
+
var layoutClass = "image-".concat(layout);
|
|
147
|
+
var centerLayout = "display: flex; justify-content: center;";
|
|
148
|
+
var endLayout = "display: flex; justify-content: end;";
|
|
149
|
+
var startLayout = "display: flex; justify-content: start;";
|
|
150
|
+
var layoutStyle = layout === 'align-end' ? endLayout : layout === 'align-start' ? startLayout : centerLayout;
|
|
147
151
|
var content = ['div', _objectSpread({
|
|
148
|
-
class:
|
|
152
|
+
class: "rich-media-item mediaSingleView-content-wrap ".concat(layoutClass)
|
|
149
153
|
}, dataAttrs), ['div', {
|
|
150
|
-
class: 'css-13f4nzt-MediaWrapper',
|
|
151
154
|
// Transparent image workaround to control styling
|
|
152
|
-
style: "
|
|
155
|
+
style: "".concat(sizes, "; ").concat(style, "; max-width: 100%; border-radius: ", "var(--ds-border-radius, 3px)", "; ").concat(layoutStyle)
|
|
153
156
|
}, ['figure', {
|
|
154
|
-
class: 'media-single-node'
|
|
157
|
+
class: 'media-single-node',
|
|
158
|
+
style: 'margin: 0px'
|
|
155
159
|
}, ['div', {}, ['div', {
|
|
156
160
|
class: 'media-content-wrap'
|
|
157
161
|
}, 0]]]]];
|
|
158
162
|
return ['div', {
|
|
159
|
-
class: 'mediaSingleView-content-wrap'
|
|
163
|
+
class: 'mediaSingleView-content-wrap',
|
|
164
|
+
layout: layout
|
|
160
165
|
}, content];
|
|
161
166
|
}
|
|
162
167
|
});
|
|
@@ -5,7 +5,7 @@ var _typeof = require("@babel/runtime/helpers/typeof");
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", {
|
|
6
6
|
value: true
|
|
7
7
|
});
|
|
8
|
-
exports.CommentBadge = void 0;
|
|
8
|
+
exports.CommentBadgeWithRef = exports.CommentBadge = void 0;
|
|
9
9
|
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
10
10
|
var _react = _interopRequireWildcard(require("react"));
|
|
11
11
|
var _reactIntlNext = require("react-intl-next");
|
|
@@ -75,4 +75,69 @@ var CommentBadgeWrapper = function CommentBadgeWrapper(_ref) {
|
|
|
75
75
|
}
|
|
76
76
|
});
|
|
77
77
|
};
|
|
78
|
-
var CommentBadge = exports.CommentBadge = (0, _reactIntlNext.injectIntl)(CommentBadgeWrapper);
|
|
78
|
+
var CommentBadge = exports.CommentBadge = (0, _reactIntlNext.injectIntl)(CommentBadgeWrapper);
|
|
79
|
+
|
|
80
|
+
// This is a copy of above component with adding forwardRef.
|
|
81
|
+
// Clean this up when removing fg('platform_editor_insert_media_plugin_phase_one') flag.
|
|
82
|
+
var CommentBadgeWithRef = exports.CommentBadgeWithRef = /*#__PURE__*/(0, _react.forwardRef)(function (_ref2, ref) {
|
|
83
|
+
var api = _ref2.api,
|
|
84
|
+
mediaNode = _ref2.mediaNode,
|
|
85
|
+
view = _ref2.view,
|
|
86
|
+
getPos = _ref2.getPos,
|
|
87
|
+
isDrafting = _ref2.isDrafting,
|
|
88
|
+
badgeOffsetRight = _ref2.badgeOffsetRight,
|
|
89
|
+
commentsOnMediaBugFixEnabled = _ref2.commentsOnMediaBugFixEnabled;
|
|
90
|
+
var intl = (0, _reactIntlNext.useIntl)();
|
|
91
|
+
var _useState3 = (0, _react.useState)(false),
|
|
92
|
+
_useState4 = (0, _slicedToArray2.default)(_useState3, 2),
|
|
93
|
+
entered = _useState4[0],
|
|
94
|
+
setEntered = _useState4[1];
|
|
95
|
+
var _useSharedPluginState2 = (0, _hooks.useSharedPluginState)(api, ['annotation']),
|
|
96
|
+
annotationState = _useSharedPluginState2.annotationState;
|
|
97
|
+
var _view$state$schema2 = view.state.schema,
|
|
98
|
+
media = _view$state$schema2.nodes.media,
|
|
99
|
+
annotation = _view$state$schema2.marks.annotation,
|
|
100
|
+
state = view.state,
|
|
101
|
+
dispatch = view.dispatch;
|
|
102
|
+
var status = (0, _react.useMemo)(function () {
|
|
103
|
+
if (!(annotationState !== null && annotationState !== void 0 && annotationState.selectedAnnotations) || !mediaNode) {
|
|
104
|
+
return 'default';
|
|
105
|
+
}
|
|
106
|
+
return annotationState.selectedAnnotations.some(function (annotation) {
|
|
107
|
+
return !!mediaNode.marks.find(function (mark) {
|
|
108
|
+
return mark.attrs.id === annotation.id;
|
|
109
|
+
});
|
|
110
|
+
}) && !annotationState.isInlineCommentViewClosed ? 'active' : 'default';
|
|
111
|
+
}, [annotationState, mediaNode]);
|
|
112
|
+
var onClick = (0, _react.useCallback)(function () {
|
|
113
|
+
if (api.annotation && mediaNode) {
|
|
114
|
+
var showCommentForBlockNode = api.annotation.actions.showCommentForBlockNode;
|
|
115
|
+
showCommentForBlockNode(mediaNode, _analytics.VIEW_METHOD.BADGE)(state, dispatch);
|
|
116
|
+
}
|
|
117
|
+
}, [api.annotation, dispatch, mediaNode, state]);
|
|
118
|
+
var pos = getPos();
|
|
119
|
+
var hasNoComments = !Number.isFinite(pos) || !(annotationState !== null && annotationState !== void 0 && annotationState.annotations) || !mediaNode || mediaNode.type !== media || mediaNode.marks.every(function (maybeAnnotation) {
|
|
120
|
+
return maybeAnnotation.type !== annotation || !(maybeAnnotation.attrs.id in annotationState.annotations) || annotationState.annotations[maybeAnnotation.attrs.id];
|
|
121
|
+
});
|
|
122
|
+
if (!isDrafting && hasNoComments || !mediaNode) {
|
|
123
|
+
return null;
|
|
124
|
+
}
|
|
125
|
+
var mediaSingleElement = view.domAtPos(pos + 1).node;
|
|
126
|
+
return /*#__PURE__*/_react.default.createElement(_mediaSingle.CommentBadge, {
|
|
127
|
+
ref: ref,
|
|
128
|
+
commentsOnMediaBugFixEnabled: commentsOnMediaBugFixEnabled,
|
|
129
|
+
badgeOffsetRight: badgeOffsetRight,
|
|
130
|
+
width: mediaNode.attrs.width,
|
|
131
|
+
height: mediaNode.attrs.height,
|
|
132
|
+
onClick: onClick,
|
|
133
|
+
mediaSingleElement: mediaSingleElement,
|
|
134
|
+
intl: intl,
|
|
135
|
+
status: entered ? 'entered' : status,
|
|
136
|
+
onMouseEnter: function onMouseEnter() {
|
|
137
|
+
return setEntered(true);
|
|
138
|
+
},
|
|
139
|
+
onMouseLeave: function onMouseLeave() {
|
|
140
|
+
return setEntered(false);
|
|
141
|
+
}
|
|
142
|
+
});
|
|
143
|
+
});
|
|
@@ -11,6 +11,7 @@ import React, { Component, Fragment, useMemo } from 'react';
|
|
|
11
11
|
import { css, jsx } from '@emotion/react';
|
|
12
12
|
import { useSharedPluginState } from '@atlaskit/editor-common/hooks';
|
|
13
13
|
import { calcMediaSinglePixelWidth, DEFAULT_IMAGE_HEIGHT, DEFAULT_IMAGE_WIDTH, getMaxWidthForNestedNode, MEDIA_SINGLE_GUTTER_SIZE } from '@atlaskit/editor-common/media-single';
|
|
14
|
+
import { ExternalImageBadge } from '@atlaskit/editor-common/media-single';
|
|
14
15
|
import { WithProviders } from '@atlaskit/editor-common/provider-factory';
|
|
15
16
|
import ReactNodeView from '@atlaskit/editor-common/react-node-view';
|
|
16
17
|
import { MediaSingle } from '@atlaskit/editor-common/ui';
|
|
@@ -23,7 +24,7 @@ import { fg } from '@atlaskit/platform-feature-flags';
|
|
|
23
24
|
import { insertAndSelectCaptionFromMediaSinglePos } from '../commands/captions';
|
|
24
25
|
import { MEDIA_CONTENT_WRAP_CLASS_NAME } from '../pm-plugins/main';
|
|
25
26
|
import CaptionPlaceholder from '../ui/CaptionPlaceholder';
|
|
26
|
-
import { CommentBadge } from '../ui/CommentBadge';
|
|
27
|
+
import { CommentBadge, CommentBadgeWithRef } from '../ui/CommentBadge';
|
|
27
28
|
import ResizableMediaSingle from '../ui/ResizableMediaSingle';
|
|
28
29
|
import ResizableMediaSingleNext from '../ui/ResizableMediaSingle/ResizableMediaSingleNext';
|
|
29
30
|
import { isMediaBlobUrlFromAttrs } from '../utils/media-common';
|
|
@@ -46,6 +47,7 @@ export default class MediaSingleNode extends Component {
|
|
|
46
47
|
});
|
|
47
48
|
_defineProperty(this, "mediaSingleWrapperRef", /*#__PURE__*/React.createRef());
|
|
48
49
|
_defineProperty(this, "captionPlaceHolderRef", /*#__PURE__*/React.createRef());
|
|
50
|
+
_defineProperty(this, "commentBadgeRef", /*#__PURE__*/React.createRef());
|
|
49
51
|
_defineProperty(this, "createOrUpdateMediaNodeUpdater", props => {
|
|
50
52
|
const node = this.props.node.firstChild;
|
|
51
53
|
const updaterProps = {
|
|
@@ -234,7 +236,7 @@ export default class MediaSingleNode extends Component {
|
|
|
234
236
|
});
|
|
235
237
|
}
|
|
236
238
|
render() {
|
|
237
|
-
var _mediaOptions$getEdit, _pluginInjectionApi$m, _pluginInjectionApi$m2, _node$firstChild, _mediaOptions$
|
|
239
|
+
var _mediaOptions$getEdit, _pluginInjectionApi$m, _pluginInjectionApi$m2, _node$firstChild, _mediaOptions$getEdit4, _mediaOptions$getEdit5, _mediaOptions$getEdit6, _mediaOptions$getEdit7;
|
|
238
240
|
const {
|
|
239
241
|
selected,
|
|
240
242
|
getPos,
|
|
@@ -365,6 +367,36 @@ export default class MediaSingleNode extends Component {
|
|
|
365
367
|
shouldShowPlaceholder = !editorDisabled && shouldShowPlaceholder;
|
|
366
368
|
}
|
|
367
369
|
const isCurrentNodeDrafting = (annotationPluginState === null || annotationPluginState === void 0 ? void 0 : annotationPluginState.isDrafting) && (annotationPluginState === null || annotationPluginState === void 0 ? void 0 : annotationPluginState.targetNodeId) === (node === null || node === void 0 ? void 0 : (_node$firstChild = node.firstChild) === null || _node$firstChild === void 0 ? void 0 : _node$firstChild.attrs.id);
|
|
370
|
+
const insertMediaPluginPhaseOneFeatureFlag = fg('platform_editor_insert_media_plugin_phase_one');
|
|
371
|
+
const shouldShowExternalMediaBadge = attrs.type === 'external' && attrs.__external && insertMediaPluginPhaseOneFeatureFlag;
|
|
372
|
+
const commentBadgeOffset = () => {
|
|
373
|
+
if (this.commentBadgeRef.current) {
|
|
374
|
+
var _mediaOptions$getEdit2, _mediaOptions$getEdit3;
|
|
375
|
+
const commentsOnMediaBugFixEnabled = mediaOptions === null || mediaOptions === void 0 ? void 0 : (_mediaOptions$getEdit2 = mediaOptions.getEditorFeatureFlags) === null || _mediaOptions$getEdit2 === void 0 ? void 0 : (_mediaOptions$getEdit3 = _mediaOptions$getEdit2.call(mediaOptions)) === null || _mediaOptions$getEdit3 === void 0 ? void 0 : _mediaOptions$getEdit3.commentsOnMediaBugFix;
|
|
376
|
+
const commentBadgeWidth = this.commentBadgeRef.current.offsetWidth;
|
|
377
|
+
const isMediaInsideTable = () => {
|
|
378
|
+
const pos = getPos();
|
|
379
|
+
if (pos !== undefined) {
|
|
380
|
+
const $pos = view.state.doc.resolve(pos);
|
|
381
|
+
const {
|
|
382
|
+
table
|
|
383
|
+
} = view.state.schema.nodes;
|
|
384
|
+
const foundTableNode = findParentNodeOfTypeClosestToPos($pos, [table]);
|
|
385
|
+
return Boolean(foundTableNode);
|
|
386
|
+
}
|
|
387
|
+
return false;
|
|
388
|
+
};
|
|
389
|
+
if (commentsOnMediaBugFixEnabled && isMediaInsideTable()) {
|
|
390
|
+
return commentBadgeWidth + 2;
|
|
391
|
+
}
|
|
392
|
+
return commentBadgeWidth + 14;
|
|
393
|
+
}
|
|
394
|
+
return 0;
|
|
395
|
+
};
|
|
396
|
+
const currentMediaElement = () => {
|
|
397
|
+
const pos = getPos();
|
|
398
|
+
return view.domAtPos(pos + 1).node;
|
|
399
|
+
};
|
|
368
400
|
const MediaChildren = jsx("figure", {
|
|
369
401
|
ref: this.mediaSingleWrapperRef,
|
|
370
402
|
css: figureWrapperStyles
|
|
@@ -372,15 +404,29 @@ export default class MediaSingleNode extends Component {
|
|
|
372
404
|
,
|
|
373
405
|
className: MediaSingleNodeSelector,
|
|
374
406
|
onClick: this.onMediaSingleClicked
|
|
375
|
-
},
|
|
376
|
-
|
|
407
|
+
}, shouldShowExternalMediaBadge && jsx(ExternalImageBadge, {
|
|
408
|
+
commentBadgeRightOffset: commentBadgeOffset(),
|
|
409
|
+
mediaElement: currentMediaElement(),
|
|
410
|
+
mediaHeight: height,
|
|
411
|
+
mediaWidth: width
|
|
412
|
+
}), commentsOnMedia && (insertMediaPluginPhaseOneFeatureFlag ? jsx(CommentBadgeWithRef, {
|
|
413
|
+
ref: this.commentBadgeRef,
|
|
414
|
+
commentsOnMediaBugFixEnabled: mediaOptions === null || mediaOptions === void 0 ? void 0 : (_mediaOptions$getEdit4 = mediaOptions.getEditorFeatureFlags) === null || _mediaOptions$getEdit4 === void 0 ? void 0 : (_mediaOptions$getEdit5 = _mediaOptions$getEdit4.call(mediaOptions)) === null || _mediaOptions$getEdit5 === void 0 ? void 0 : _mediaOptions$getEdit5.commentsOnMediaBugFix,
|
|
415
|
+
view: view,
|
|
416
|
+
api: pluginInjectionApi,
|
|
417
|
+
mediaNode: node === null || node === void 0 ? void 0 : node.firstChild,
|
|
418
|
+
badgeOffsetRight: badgeOffsetRight,
|
|
419
|
+
getPos: getPos,
|
|
420
|
+
isDrafting: isCurrentNodeDrafting
|
|
421
|
+
}) : jsx(CommentBadge, {
|
|
422
|
+
commentsOnMediaBugFixEnabled: mediaOptions === null || mediaOptions === void 0 ? void 0 : (_mediaOptions$getEdit6 = mediaOptions.getEditorFeatureFlags) === null || _mediaOptions$getEdit6 === void 0 ? void 0 : (_mediaOptions$getEdit7 = _mediaOptions$getEdit6.call(mediaOptions)) === null || _mediaOptions$getEdit7 === void 0 ? void 0 : _mediaOptions$getEdit7.commentsOnMediaBugFix,
|
|
377
423
|
view: view,
|
|
378
424
|
api: pluginInjectionApi,
|
|
379
425
|
mediaNode: node === null || node === void 0 ? void 0 : node.firstChild,
|
|
380
426
|
badgeOffsetRight: badgeOffsetRight,
|
|
381
427
|
getPos: getPos,
|
|
382
428
|
isDrafting: isCurrentNodeDrafting
|
|
383
|
-
}), jsx("div", {
|
|
429
|
+
})), jsx("div", {
|
|
384
430
|
ref: this.props.forwardRef
|
|
385
431
|
}), shouldShowPlaceholder && jsx(CaptionPlaceholder, {
|
|
386
432
|
ref: this.captionPlaceHolderRef,
|
|
@@ -1,6 +1,23 @@
|
|
|
1
1
|
import { media } from '@atlaskit/adf-schema';
|
|
2
2
|
import { fg } from '@atlaskit/platform-feature-flags';
|
|
3
3
|
import { getMediaAttrs } from './toDOMAttrs';
|
|
4
|
+
const skeletonStyling = `background: ${"var(--ds-background-neutral, #091E420F)"}; outline: none;`;
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Duplicate consts from `media-card`.
|
|
8
|
+
* `packages/media/media-card/src/utils/cardDimensions.ts`
|
|
9
|
+
*
|
|
10
|
+
* WHY?
|
|
11
|
+
* This will eventually move to `@atlaskit/adf-schema` and we cannot reference
|
|
12
|
+
* `media-card` from here or it will cause dependency issues.
|
|
13
|
+
*
|
|
14
|
+
* In the long term likely `toDOM` will move back out of `adf-schema` in which
|
|
15
|
+
* case we can consolidate them.
|
|
16
|
+
*/
|
|
17
|
+
export const defaultImageCardDimensions = {
|
|
18
|
+
width: 156,
|
|
19
|
+
height: 125
|
|
20
|
+
};
|
|
4
21
|
|
|
5
22
|
// @nodeSpecException:toDOM patch
|
|
6
23
|
export const mediaSpecWithFixedToDOM = () => {
|
|
@@ -11,7 +28,42 @@ export const mediaSpecWithFixedToDOM = () => {
|
|
|
11
28
|
...media,
|
|
12
29
|
toDOM: node => {
|
|
13
30
|
const attrs = getMediaAttrs('media', node);
|
|
14
|
-
|
|
31
|
+
const styles = skeletonStyling;
|
|
32
|
+
if (node.attrs.type === 'external') {
|
|
33
|
+
return ['img', {
|
|
34
|
+
...attrs,
|
|
35
|
+
src: node.attrs.url,
|
|
36
|
+
styles
|
|
37
|
+
}];
|
|
38
|
+
}
|
|
39
|
+
if (node.attrs.type === 'file') {
|
|
40
|
+
const dataUrl = 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7';
|
|
41
|
+
const width = defaultImageCardDimensions.width;
|
|
42
|
+
const height = defaultImageCardDimensions.height;
|
|
43
|
+
return ['div', {
|
|
44
|
+
width,
|
|
45
|
+
height,
|
|
46
|
+
...attrs,
|
|
47
|
+
// Manually kept in sync with the style of media cards. The goal is to render a plain gray
|
|
48
|
+
// rectangle that provides an affordance for media.
|
|
49
|
+
style: `
|
|
50
|
+
display: inline-block;
|
|
51
|
+
background-image: url("${dataUrl}");
|
|
52
|
+
margin-left: 0;
|
|
53
|
+
margin-right: 4px;
|
|
54
|
+
border-radius: ${skeletonStyling};
|
|
55
|
+
|
|
56
|
+
flex-basis: ${defaultImageCardDimensions.width}px;
|
|
57
|
+
background-color: var(--media-card-background-color, unset);
|
|
58
|
+
width: var(--media-card-width, 0);
|
|
59
|
+
height: var(--media-card-height, 0);
|
|
60
|
+
`
|
|
61
|
+
}];
|
|
62
|
+
}
|
|
63
|
+
return ['div', {
|
|
64
|
+
...attrs,
|
|
65
|
+
styles
|
|
66
|
+
}];
|
|
15
67
|
}
|
|
16
68
|
};
|
|
17
69
|
};
|