@contentful/field-editor-rich-text 2.0.0-next.20 → 2.0.0-next.21
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 +410 -0
- package/dist/field-editor-rich-text.cjs.development.js +231 -256
- package/dist/field-editor-rich-text.cjs.development.js.map +1 -1
- package/dist/field-editor-rich-text.cjs.production.min.js +1 -1
- package/dist/field-editor-rich-text.cjs.production.min.js.map +1 -1
- package/dist/field-editor-rich-text.esm.js +232 -257
- package/dist/field-editor-rich-text.esm.js.map +1 -1
- package/dist/plugins/Hyperlink/components/EntityHyperlink.d.ts +9 -0
- package/dist/plugins/Hyperlink/components/ToolbarHyperlinkButton.d.ts +5 -0
- package/dist/plugins/Hyperlink/components/UrlHyperlink.d.ts +9 -0
- package/dist/plugins/Hyperlink/components/styles.d.ts +4 -0
- package/dist/plugins/Hyperlink/createHyperlinkPlugin.d.ts +3 -0
- package/dist/plugins/Hyperlink/index.d.ts +2 -8
- package/dist/plugins/Hyperlink/useEntityInfo.d.ts +16 -0
- package/dist/plugins/Hyperlink/utils.d.ts +2 -0
- package/dist/test-utils/jsx.d.ts +1 -1
- package/package.json +1 -1
- package/dist/plugins/Hyperlink/EntryAssetTooltip.d.ts +0 -9
- package/dist/plugins/Hyperlink/truncate.d.ts +0 -1
|
@@ -2277,15 +2277,7 @@ function FetchingWrappedInlineEntryCard(props) {
|
|
|
2277
2277
|
return /*#__PURE__*/React__default.createElement(f36Components.InlineEntryCard, {
|
|
2278
2278
|
testId: Contentful.INLINES.EMBEDDED_ENTRY,
|
|
2279
2279
|
isSelected: props.isSelected,
|
|
2280
|
-
title:
|
|
2281
|
-
getEntityScheduledActions: loadEntityScheduledActions,
|
|
2282
|
-
entityType: "Entry",
|
|
2283
|
-
entityId: entry.sys.id
|
|
2284
|
-
}, /*#__PURE__*/React__default.createElement(f36Icons.ClockIcon, {
|
|
2285
|
-
className: styles$5.scheduledIcon,
|
|
2286
|
-
variant: "muted",
|
|
2287
|
-
testId: "scheduled-icon"
|
|
2288
|
-
}))),
|
|
2280
|
+
title: contentTypeName + ": " + title,
|
|
2289
2281
|
status: status,
|
|
2290
2282
|
actions: [/*#__PURE__*/React__default.createElement(f36Components.MenuItem, {
|
|
2291
2283
|
key: "edit",
|
|
@@ -2297,7 +2289,15 @@ function FetchingWrappedInlineEntryCard(props) {
|
|
|
2297
2289
|
disabled: props.isDisabled,
|
|
2298
2290
|
testId: "card-action-remove"
|
|
2299
2291
|
}, "Remove")]
|
|
2300
|
-
}
|
|
2292
|
+
}, /*#__PURE__*/React__default.createElement(fieldEditorReference.ScheduledIconWithTooltip, {
|
|
2293
|
+
getEntityScheduledActions: loadEntityScheduledActions,
|
|
2294
|
+
entityType: "Entry",
|
|
2295
|
+
entityId: entry.sys.id
|
|
2296
|
+
}, /*#__PURE__*/React__default.createElement(f36Icons.ClockIcon, {
|
|
2297
|
+
className: styles$5.scheduledIcon,
|
|
2298
|
+
variant: "muted",
|
|
2299
|
+
testId: "scheduled-icon"
|
|
2300
|
+
})), /*#__PURE__*/React__default.createElement(f36Components.Text, null, title));
|
|
2301
2301
|
}
|
|
2302
2302
|
|
|
2303
2303
|
function createInlineEntryNode(id) {
|
|
@@ -2979,159 +2979,6 @@ var createHrPlugin = function createHrPlugin() {
|
|
|
2979
2979
|
};
|
|
2980
2980
|
};
|
|
2981
2981
|
|
|
2982
|
-
function truncate(str, length) {
|
|
2983
|
-
if (typeof str === 'string' && str.length > length) {
|
|
2984
|
-
return str && str.substr(0, length + 1) // +1 to look ahead and be replaced below.
|
|
2985
|
-
// Get rid of orphan letters but not one letter words (I, a, 2).
|
|
2986
|
-
// Try to not have “.” as last character to avoid awkward “....”.
|
|
2987
|
-
.replace(/(\s+\S(?=\S)|\s*)\.?.$/, '…');
|
|
2988
|
-
}
|
|
2989
|
-
|
|
2990
|
-
return str;
|
|
2991
|
-
}
|
|
2992
|
-
|
|
2993
|
-
function getEntityInfo(_ref) {
|
|
2994
|
-
var entityTitle = _ref.entityTitle,
|
|
2995
|
-
entityStatus = _ref.entityStatus,
|
|
2996
|
-
contentTypeName = _ref.contentTypeName;
|
|
2997
|
-
var title = truncate(entityTitle, 60) || 'Untitled';
|
|
2998
|
-
return (contentTypeName || 'Asset') + " \"" + title + "\", " + entityStatus;
|
|
2999
|
-
}
|
|
3000
|
-
|
|
3001
|
-
function EntryAssetTooltip(_ref2) {
|
|
3002
|
-
var id = _ref2.id,
|
|
3003
|
-
type = _ref2.type,
|
|
3004
|
-
sdk = _ref2.sdk;
|
|
3005
|
-
|
|
3006
|
-
var _React$useState = React.useState(''),
|
|
3007
|
-
entityTitle = _React$useState[0],
|
|
3008
|
-
setEntityTitle = _React$useState[1];
|
|
3009
|
-
|
|
3010
|
-
var _React$useState2 = React.useState(''),
|
|
3011
|
-
entityStatus = _React$useState2[0],
|
|
3012
|
-
setEntityStatus = _React$useState2[1];
|
|
3013
|
-
|
|
3014
|
-
var _React$useState3 = React.useState([]),
|
|
3015
|
-
jobs = _React$useState3[0],
|
|
3016
|
-
setJobs = _React$useState3[1];
|
|
3017
|
-
|
|
3018
|
-
var _React$useState4 = React.useState(true),
|
|
3019
|
-
isLoading = _React$useState4[0],
|
|
3020
|
-
setIsLoading = _React$useState4[1];
|
|
3021
|
-
|
|
3022
|
-
var _React$useState5 = React.useState(false),
|
|
3023
|
-
hasError = _React$useState5[0],
|
|
3024
|
-
setHasError = _React$useState5[1];
|
|
3025
|
-
|
|
3026
|
-
React.useEffect(function () {
|
|
3027
|
-
function loadContent() {
|
|
3028
|
-
return _loadContent.apply(this, arguments);
|
|
3029
|
-
}
|
|
3030
|
-
|
|
3031
|
-
function _loadContent() {
|
|
3032
|
-
_loadContent = _asyncToGenerator( /*#__PURE__*/runtime_1.mark(function _callee() {
|
|
3033
|
-
var actions, contentType, entity, contentTypeId, contentTypes, _entityTitle, _jobs, _entityStatus;
|
|
3034
|
-
|
|
3035
|
-
return runtime_1.wrap(function _callee$(_context) {
|
|
3036
|
-
while (1) {
|
|
3037
|
-
switch (_context.prev = _context.next) {
|
|
3038
|
-
case 0:
|
|
3039
|
-
_context.prev = 0;
|
|
3040
|
-
setIsLoading(true);
|
|
3041
|
-
setHasError(false);
|
|
3042
|
-
actions = {
|
|
3043
|
-
Asset: {
|
|
3044
|
-
getEntity: sdk.space.getAsset,
|
|
3045
|
-
getEntityTitle: function getEntityTitle(args) {
|
|
3046
|
-
return fieldEditorShared.entityHelpers.getAssetTitle(_extends({}, args, {
|
|
3047
|
-
asset: args.entity
|
|
3048
|
-
}));
|
|
3049
|
-
}
|
|
3050
|
-
},
|
|
3051
|
-
Entry: {
|
|
3052
|
-
getEntity: sdk.space.getEntry,
|
|
3053
|
-
getEntityTitle: function getEntityTitle(args) {
|
|
3054
|
-
return fieldEditorShared.entityHelpers.getEntryTitle(_extends({}, args, {
|
|
3055
|
-
entry: args.entity
|
|
3056
|
-
}));
|
|
3057
|
-
}
|
|
3058
|
-
}
|
|
3059
|
-
};
|
|
3060
|
-
_context.next = 6;
|
|
3061
|
-
return actions[type].getEntity(id);
|
|
3062
|
-
|
|
3063
|
-
case 6:
|
|
3064
|
-
entity = _context.sent;
|
|
3065
|
-
|
|
3066
|
-
if (entity.sys.contentType) {
|
|
3067
|
-
contentTypeId = entity.sys.contentType.sys.id;
|
|
3068
|
-
contentTypes = sdk.space.getCachedContentTypes();
|
|
3069
|
-
contentType = contentTypes.find(function (ct) {
|
|
3070
|
-
return ct.sys.id === contentTypeId;
|
|
3071
|
-
});
|
|
3072
|
-
}
|
|
3073
|
-
|
|
3074
|
-
_entityTitle = actions[type].getEntityTitle({
|
|
3075
|
-
entity: entity,
|
|
3076
|
-
contentType: contentType,
|
|
3077
|
-
localeCode: sdk.field.locale,
|
|
3078
|
-
defaultLocaleCode: sdk.locales["default"],
|
|
3079
|
-
entityType: type
|
|
3080
|
-
});
|
|
3081
|
-
_context.next = 11;
|
|
3082
|
-
return sdk.space.getEntityScheduledActions(type, id);
|
|
3083
|
-
|
|
3084
|
-
case 11:
|
|
3085
|
-
_jobs = _context.sent;
|
|
3086
|
-
_entityStatus = fieldEditorShared.entityHelpers.getEntryStatus(entity.sys);
|
|
3087
|
-
setEntityTitle(_entityTitle);
|
|
3088
|
-
setEntityStatus(_entityStatus);
|
|
3089
|
-
setJobs(_jobs);
|
|
3090
|
-
_context.next = 22;
|
|
3091
|
-
break;
|
|
3092
|
-
|
|
3093
|
-
case 18:
|
|
3094
|
-
_context.prev = 18;
|
|
3095
|
-
_context.t0 = _context["catch"](0);
|
|
3096
|
-
console.log(_context.t0);
|
|
3097
|
-
setHasError(true);
|
|
3098
|
-
|
|
3099
|
-
case 22:
|
|
3100
|
-
_context.prev = 22;
|
|
3101
|
-
setIsLoading(false);
|
|
3102
|
-
return _context.finish(22);
|
|
3103
|
-
|
|
3104
|
-
case 25:
|
|
3105
|
-
case "end":
|
|
3106
|
-
return _context.stop();
|
|
3107
|
-
}
|
|
3108
|
-
}
|
|
3109
|
-
}, _callee, null, [[0, 18, 22, 25]]);
|
|
3110
|
-
}));
|
|
3111
|
-
return _loadContent.apply(this, arguments);
|
|
3112
|
-
}
|
|
3113
|
-
|
|
3114
|
-
loadContent();
|
|
3115
|
-
}, [id, type, sdk]);
|
|
3116
|
-
|
|
3117
|
-
if (isLoading) {
|
|
3118
|
-
return /*#__PURE__*/React.createElement(React.Fragment, null, "Loading " + type.toLowerCase() + "...");
|
|
3119
|
-
}
|
|
3120
|
-
|
|
3121
|
-
if (hasError) {
|
|
3122
|
-
return /*#__PURE__*/React.createElement(React.Fragment, null, type + " missing or inaccessible");
|
|
3123
|
-
}
|
|
3124
|
-
|
|
3125
|
-
return /*#__PURE__*/React.createElement(React.Fragment, null, getEntityInfo({
|
|
3126
|
-
entityTitle: entityTitle,
|
|
3127
|
-
contentTypeName: type,
|
|
3128
|
-
entityStatus: entityStatus
|
|
3129
|
-
}), ' ', jobs.length > 0 ? fieldEditorReference.getScheduleTooltipContent({
|
|
3130
|
-
job: jobs[0],
|
|
3131
|
-
jobsCount: jobs.length
|
|
3132
|
-
}) : '');
|
|
3133
|
-
}
|
|
3134
|
-
|
|
3135
2982
|
var _templateObject$3, _SYS_LINK_TYPES, _LINK_TYPE_SELECTION_;
|
|
3136
2983
|
var styles$b = {
|
|
3137
2984
|
removeSelectionLabel: /*#__PURE__*/emotion.css(_templateObject$3 || (_templateObject$3 = /*#__PURE__*/_taggedTemplateLiteralLoose(["\n margin-left: ", ";\n "])), tokens.spacingS)
|
|
@@ -3443,11 +3290,213 @@ function _addOrEditLink() {
|
|
|
3443
3290
|
return _addOrEditLink.apply(this, arguments);
|
|
3444
3291
|
}
|
|
3445
3292
|
|
|
3293
|
+
function ToolbarHyperlinkButton(props) {
|
|
3294
|
+
var editor = useContentfulEditor();
|
|
3295
|
+
var isActive = !!(editor && isLinkActive(editor));
|
|
3296
|
+
var sdk = useSdkContext();
|
|
3297
|
+
|
|
3298
|
+
function handleClick() {
|
|
3299
|
+
return _handleClick.apply(this, arguments);
|
|
3300
|
+
}
|
|
3301
|
+
|
|
3302
|
+
function _handleClick() {
|
|
3303
|
+
_handleClick = _asyncToGenerator( /*#__PURE__*/runtime_1.mark(function _callee() {
|
|
3304
|
+
return runtime_1.wrap(function _callee$(_context) {
|
|
3305
|
+
while (1) {
|
|
3306
|
+
switch (_context.prev = _context.next) {
|
|
3307
|
+
case 0:
|
|
3308
|
+
if (editor) {
|
|
3309
|
+
_context.next = 2;
|
|
3310
|
+
break;
|
|
3311
|
+
}
|
|
3312
|
+
|
|
3313
|
+
return _context.abrupt("return");
|
|
3314
|
+
|
|
3315
|
+
case 2:
|
|
3316
|
+
if (isActive) {
|
|
3317
|
+
unwrapLink(editor);
|
|
3318
|
+
editor.tracking.onToolbarAction('unlinkHyperlinks');
|
|
3319
|
+
} else {
|
|
3320
|
+
addOrEditLink(editor, sdk, editor.tracking.onToolbarAction);
|
|
3321
|
+
}
|
|
3322
|
+
|
|
3323
|
+
case 3:
|
|
3324
|
+
case "end":
|
|
3325
|
+
return _context.stop();
|
|
3326
|
+
}
|
|
3327
|
+
}
|
|
3328
|
+
}, _callee);
|
|
3329
|
+
}));
|
|
3330
|
+
return _handleClick.apply(this, arguments);
|
|
3331
|
+
}
|
|
3332
|
+
|
|
3333
|
+
if (!editor) return null;
|
|
3334
|
+
return /*#__PURE__*/React.createElement(ToolbarButton, {
|
|
3335
|
+
title: "Hyperlink",
|
|
3336
|
+
testId: "hyperlink-toolbar-button",
|
|
3337
|
+
onClick: handleClick,
|
|
3338
|
+
isActive: isActive,
|
|
3339
|
+
isDisabled: props.isDisabled
|
|
3340
|
+
}, /*#__PURE__*/React.createElement(f36Icons.LinkIcon, null));
|
|
3341
|
+
}
|
|
3342
|
+
|
|
3446
3343
|
var hasText = function hasText(editor, entry) {
|
|
3447
3344
|
var node = entry[0];
|
|
3448
3345
|
return !plateCore.isAncestorEmpty(editor, node) && slate.Node.string(node).trim() !== '';
|
|
3449
3346
|
};
|
|
3450
3347
|
|
|
3348
|
+
function truncate(str, length) {
|
|
3349
|
+
if (typeof str === 'string' && str.length > length) {
|
|
3350
|
+
return str && str.substr(0, length + 1) // +1 to look ahead and be replaced below.
|
|
3351
|
+
// Get rid of orphan letters but not one letter words (I, a, 2).
|
|
3352
|
+
// Try to not have “.” as last character to avoid awkward “....”.
|
|
3353
|
+
.replace(/(\s+\S(?=\S)|\s*)\.?.$/, '…');
|
|
3354
|
+
}
|
|
3355
|
+
|
|
3356
|
+
return str;
|
|
3357
|
+
}
|
|
3358
|
+
|
|
3359
|
+
function getEntityInfo(data) {
|
|
3360
|
+
if (!data) {
|
|
3361
|
+
return '';
|
|
3362
|
+
}
|
|
3363
|
+
|
|
3364
|
+
var entityTitle = data.entityTitle,
|
|
3365
|
+
contentTypeName = data.contentTypeName,
|
|
3366
|
+
entityStatus = data.entityStatus,
|
|
3367
|
+
jobs = data.jobs;
|
|
3368
|
+
var title = truncate(entityTitle, 60) || 'Untitled';
|
|
3369
|
+
var scheduledActions = jobs.length > 0 ? fieldEditorReference.getScheduleTooltipContent({
|
|
3370
|
+
job: jobs[0],
|
|
3371
|
+
jobsCount: jobs.length
|
|
3372
|
+
}) : '';
|
|
3373
|
+
return (contentTypeName || 'Asset') + " \"" + title + "\", " + entityStatus + " " + scheduledActions;
|
|
3374
|
+
}
|
|
3375
|
+
|
|
3376
|
+
function fetchAllData(_x) {
|
|
3377
|
+
return _fetchAllData.apply(this, arguments);
|
|
3378
|
+
}
|
|
3379
|
+
|
|
3380
|
+
function _fetchAllData() {
|
|
3381
|
+
_fetchAllData = _asyncToGenerator( /*#__PURE__*/runtime_1.mark(function _callee(_ref) {
|
|
3382
|
+
var sdk, entityId, entityType, localeCode, defaultLocaleCode, contentType, getEntity, entity, contentTypeId, entityTitle, entityDescription, jobs, entityStatus;
|
|
3383
|
+
return runtime_1.wrap(function _callee$(_context) {
|
|
3384
|
+
while (1) {
|
|
3385
|
+
switch (_context.prev = _context.next) {
|
|
3386
|
+
case 0:
|
|
3387
|
+
sdk = _ref.sdk, entityId = _ref.entityId, entityType = _ref.entityType, localeCode = _ref.localeCode, defaultLocaleCode = _ref.defaultLocaleCode;
|
|
3388
|
+
getEntity = entityType === 'Entry' ? sdk.space.getEntry : sdk.space.getAsset;
|
|
3389
|
+
_context.next = 4;
|
|
3390
|
+
return getEntity(entityId);
|
|
3391
|
+
|
|
3392
|
+
case 4:
|
|
3393
|
+
entity = _context.sent;
|
|
3394
|
+
|
|
3395
|
+
if (entity.sys.contentType) {
|
|
3396
|
+
contentTypeId = entity.sys.contentType.sys.id;
|
|
3397
|
+
contentType = sdk.space.getCachedContentTypes().find(function (ct) {
|
|
3398
|
+
return ct.sys.id === contentTypeId;
|
|
3399
|
+
});
|
|
3400
|
+
}
|
|
3401
|
+
|
|
3402
|
+
entityTitle = entityType === 'Entry' ? fieldEditorShared.entityHelpers.getEntryTitle({
|
|
3403
|
+
entry: entity,
|
|
3404
|
+
contentType: contentType,
|
|
3405
|
+
localeCode: localeCode,
|
|
3406
|
+
defaultLocaleCode: defaultLocaleCode,
|
|
3407
|
+
defaultTitle: 'Untitled'
|
|
3408
|
+
}) : fieldEditorShared.entityHelpers.getAssetTitle({
|
|
3409
|
+
asset: entity,
|
|
3410
|
+
localeCode: localeCode,
|
|
3411
|
+
defaultLocaleCode: defaultLocaleCode,
|
|
3412
|
+
defaultTitle: 'Untitled'
|
|
3413
|
+
});
|
|
3414
|
+
entityDescription = fieldEditorShared.entityHelpers.getEntityDescription({
|
|
3415
|
+
entity: entity,
|
|
3416
|
+
contentType: contentType,
|
|
3417
|
+
localeCode: localeCode,
|
|
3418
|
+
defaultLocaleCode: defaultLocaleCode
|
|
3419
|
+
});
|
|
3420
|
+
_context.next = 10;
|
|
3421
|
+
return sdk.space.getEntityScheduledActions(entityType, entityId);
|
|
3422
|
+
|
|
3423
|
+
case 10:
|
|
3424
|
+
jobs = _context.sent;
|
|
3425
|
+
entityStatus = fieldEditorShared.entityHelpers.getEntryStatus(entity.sys);
|
|
3426
|
+
return _context.abrupt("return", {
|
|
3427
|
+
jobs: jobs,
|
|
3428
|
+
entity: entity,
|
|
3429
|
+
entityTitle: entityTitle,
|
|
3430
|
+
entityDescription: entityDescription,
|
|
3431
|
+
entityStatus: entityStatus,
|
|
3432
|
+
contentTypeName: contentType ? contentType.name : ''
|
|
3433
|
+
});
|
|
3434
|
+
|
|
3435
|
+
case 13:
|
|
3436
|
+
case "end":
|
|
3437
|
+
return _context.stop();
|
|
3438
|
+
}
|
|
3439
|
+
}
|
|
3440
|
+
}, _callee);
|
|
3441
|
+
}));
|
|
3442
|
+
return _fetchAllData.apply(this, arguments);
|
|
3443
|
+
}
|
|
3444
|
+
|
|
3445
|
+
function useRequestStatus(_ref2) {
|
|
3446
|
+
var sdk = _ref2.sdk,
|
|
3447
|
+
target = _ref2.target,
|
|
3448
|
+
onEntityFetchComplete = _ref2.onEntityFetchComplete;
|
|
3449
|
+
|
|
3450
|
+
var _useState = React.useState({
|
|
3451
|
+
type: 'loading'
|
|
3452
|
+
}),
|
|
3453
|
+
requestStatus = _useState[0],
|
|
3454
|
+
setRequestStatus = _useState[1];
|
|
3455
|
+
|
|
3456
|
+
React.useEffect(function () {
|
|
3457
|
+
if (target) {
|
|
3458
|
+
var _target$sys, _target$sys2;
|
|
3459
|
+
|
|
3460
|
+
fetchAllData({
|
|
3461
|
+
sdk: sdk,
|
|
3462
|
+
entityId: target == null ? void 0 : (_target$sys = target.sys) == null ? void 0 : _target$sys.id,
|
|
3463
|
+
entityType: target == null ? void 0 : (_target$sys2 = target.sys) == null ? void 0 : _target$sys2.linkType,
|
|
3464
|
+
localeCode: sdk.field.locale,
|
|
3465
|
+
defaultLocaleCode: sdk.locales["default"]
|
|
3466
|
+
}).then(function (entityInfo) {
|
|
3467
|
+
setRequestStatus({
|
|
3468
|
+
type: 'success',
|
|
3469
|
+
data: entityInfo
|
|
3470
|
+
});
|
|
3471
|
+
})["catch"](function (e) {
|
|
3472
|
+
console.log(e);
|
|
3473
|
+
setRequestStatus({
|
|
3474
|
+
type: 'error',
|
|
3475
|
+
error: e
|
|
3476
|
+
});
|
|
3477
|
+
})["finally"](function () {
|
|
3478
|
+
onEntityFetchComplete == null ? void 0 : onEntityFetchComplete();
|
|
3479
|
+
});
|
|
3480
|
+
}
|
|
3481
|
+
}, [sdk, target, onEntityFetchComplete]);
|
|
3482
|
+
return requestStatus;
|
|
3483
|
+
}
|
|
3484
|
+
|
|
3485
|
+
function useEntityInfo(props) {
|
|
3486
|
+
var status = useRequestStatus(props);
|
|
3487
|
+
var linkType = props.target.sys.linkType;
|
|
3488
|
+
|
|
3489
|
+
if (status.type === 'loading') {
|
|
3490
|
+
return "Loading " + linkType.toLowerCase() + "...";
|
|
3491
|
+
}
|
|
3492
|
+
|
|
3493
|
+
if (status.type === 'error') {
|
|
3494
|
+
return linkType + " missing or inaccessible";
|
|
3495
|
+
}
|
|
3496
|
+
|
|
3497
|
+
return getEntityInfo(status.data);
|
|
3498
|
+
}
|
|
3499
|
+
|
|
3451
3500
|
var styles$c = {
|
|
3452
3501
|
hyperlinkWrapper: /*#__PURE__*/emotion.css({
|
|
3453
3502
|
display: 'inline',
|
|
@@ -3465,33 +3514,21 @@ var styles$c = {
|
|
|
3465
3514
|
'&:focus': {
|
|
3466
3515
|
fill: tokens.gray900
|
|
3467
3516
|
}
|
|
3468
|
-
}),
|
|
3469
|
-
hyperlinkIEFallback: /*#__PURE__*/emotion.css({
|
|
3470
|
-
color: '#1683d0',
|
|
3471
|
-
textDecoration: 'underline'
|
|
3472
|
-
}),
|
|
3473
|
-
// TODO: use these styles once we can use the icon
|
|
3474
|
-
hyperlinkIcon: /*#__PURE__*/emotion.css({
|
|
3475
|
-
position: 'relative',
|
|
3476
|
-
top: '4px',
|
|
3477
|
-
height: '14px',
|
|
3478
|
-
margin: '0 -2px 0 -1px',
|
|
3479
|
-
webkitTransition: 'fill 100ms ease-in-out',
|
|
3480
|
-
transition: 'fill 100ms ease-in-out',
|
|
3481
|
-
'&:hover': {
|
|
3482
|
-
fill: tokens.gray900
|
|
3483
|
-
},
|
|
3484
|
-
'&:focus': {
|
|
3485
|
-
fill: tokens.gray900
|
|
3486
|
-
}
|
|
3487
3517
|
})
|
|
3488
3518
|
};
|
|
3489
3519
|
|
|
3490
|
-
function
|
|
3520
|
+
function EntityHyperlink(props) {
|
|
3491
3521
|
var editor = useContentfulEditor();
|
|
3492
3522
|
var isReadOnly = Slate.useReadOnly();
|
|
3493
3523
|
var sdk = useSdkContext();
|
|
3494
|
-
var
|
|
3524
|
+
var target = props.element.data.target;
|
|
3525
|
+
var onEntityFetchComplete = props.onEntityFetchComplete;
|
|
3526
|
+
var tooltipContent = useEntityInfo({
|
|
3527
|
+
target: target,
|
|
3528
|
+
sdk: sdk,
|
|
3529
|
+
onEntityFetchComplete: onEntityFetchComplete
|
|
3530
|
+
});
|
|
3531
|
+
if (!target) return null;
|
|
3495
3532
|
|
|
3496
3533
|
function handleClick(event) {
|
|
3497
3534
|
event.preventDefault();
|
|
@@ -3501,33 +3538,25 @@ function UrlHyperlink(props) {
|
|
|
3501
3538
|
}
|
|
3502
3539
|
|
|
3503
3540
|
return /*#__PURE__*/React.createElement(f36Components.Tooltip, {
|
|
3504
|
-
content:
|
|
3541
|
+
content: tooltipContent,
|
|
3505
3542
|
targetWrapperClassName: styles$c.hyperlinkWrapper,
|
|
3506
3543
|
placement: "bottom",
|
|
3507
3544
|
maxWidth: "auto"
|
|
3508
3545
|
}, /*#__PURE__*/React.createElement(f36Components.TextLink, {
|
|
3509
3546
|
as: "a",
|
|
3510
|
-
href: uri,
|
|
3511
|
-
rel: "noopener noreferrer",
|
|
3512
3547
|
onClick: handleClick,
|
|
3513
3548
|
isDisabled: isReadOnly,
|
|
3514
|
-
className: styles$c.hyperlink
|
|
3549
|
+
className: styles$c.hyperlink,
|
|
3550
|
+
"data-link-type": target.sys.linkType,
|
|
3551
|
+
"data-link-id": target.sys.id
|
|
3515
3552
|
}, props.children));
|
|
3516
3553
|
}
|
|
3517
3554
|
|
|
3518
|
-
function
|
|
3555
|
+
function UrlHyperlink(props) {
|
|
3519
3556
|
var editor = useContentfulEditor();
|
|
3520
3557
|
var isReadOnly = Slate.useReadOnly();
|
|
3521
3558
|
var sdk = useSdkContext();
|
|
3522
|
-
var
|
|
3523
|
-
var onEntityFetchComplete = props.onEntityFetchComplete;
|
|
3524
|
-
React.useEffect(function () {
|
|
3525
|
-
// The real entity loading happens in the tooltip
|
|
3526
|
-
// Since that is deferred the link is considered rendered as soon
|
|
3527
|
-
// the component mounts (link text displayed)
|
|
3528
|
-
onEntityFetchComplete == null ? void 0 : onEntityFetchComplete();
|
|
3529
|
-
}, [onEntityFetchComplete]);
|
|
3530
|
-
if (!target) return null;
|
|
3559
|
+
var uri = props.element.data.uri;
|
|
3531
3560
|
|
|
3532
3561
|
function handleClick(event) {
|
|
3533
3562
|
event.preventDefault();
|
|
@@ -3537,74 +3566,20 @@ function EntityHyperlink(props) {
|
|
|
3537
3566
|
}
|
|
3538
3567
|
|
|
3539
3568
|
return /*#__PURE__*/React.createElement(f36Components.Tooltip, {
|
|
3540
|
-
content:
|
|
3541
|
-
id: target.sys.id,
|
|
3542
|
-
type: target.sys.linkType,
|
|
3543
|
-
sdk: sdk
|
|
3544
|
-
}),
|
|
3569
|
+
content: uri,
|
|
3545
3570
|
targetWrapperClassName: styles$c.hyperlinkWrapper,
|
|
3546
3571
|
placement: "bottom",
|
|
3547
3572
|
maxWidth: "auto"
|
|
3548
3573
|
}, /*#__PURE__*/React.createElement(f36Components.TextLink, {
|
|
3549
3574
|
as: "a",
|
|
3575
|
+
href: uri,
|
|
3576
|
+
rel: "noopener noreferrer",
|
|
3550
3577
|
onClick: handleClick,
|
|
3551
3578
|
isDisabled: isReadOnly,
|
|
3552
|
-
className: styles$c.hyperlink
|
|
3553
|
-
"data-link-type": target.sys.linkType,
|
|
3554
|
-
"data-link-id": target.sys.id
|
|
3579
|
+
className: styles$c.hyperlink
|
|
3555
3580
|
}, props.children));
|
|
3556
3581
|
}
|
|
3557
3582
|
|
|
3558
|
-
function ToolbarHyperlinkButton(props) {
|
|
3559
|
-
var editor = useContentfulEditor();
|
|
3560
|
-
var isActive = !!(editor && isLinkActive(editor));
|
|
3561
|
-
var sdk = useSdkContext();
|
|
3562
|
-
|
|
3563
|
-
function handleClick() {
|
|
3564
|
-
return _handleClick.apply(this, arguments);
|
|
3565
|
-
}
|
|
3566
|
-
|
|
3567
|
-
function _handleClick() {
|
|
3568
|
-
_handleClick = _asyncToGenerator( /*#__PURE__*/runtime_1.mark(function _callee() {
|
|
3569
|
-
return runtime_1.wrap(function _callee$(_context) {
|
|
3570
|
-
while (1) {
|
|
3571
|
-
switch (_context.prev = _context.next) {
|
|
3572
|
-
case 0:
|
|
3573
|
-
if (editor) {
|
|
3574
|
-
_context.next = 2;
|
|
3575
|
-
break;
|
|
3576
|
-
}
|
|
3577
|
-
|
|
3578
|
-
return _context.abrupt("return");
|
|
3579
|
-
|
|
3580
|
-
case 2:
|
|
3581
|
-
if (isActive) {
|
|
3582
|
-
unwrapLink(editor);
|
|
3583
|
-
editor.tracking.onToolbarAction('unlinkHyperlinks');
|
|
3584
|
-
} else {
|
|
3585
|
-
addOrEditLink(editor, sdk, editor.tracking.onToolbarAction);
|
|
3586
|
-
}
|
|
3587
|
-
|
|
3588
|
-
case 3:
|
|
3589
|
-
case "end":
|
|
3590
|
-
return _context.stop();
|
|
3591
|
-
}
|
|
3592
|
-
}
|
|
3593
|
-
}, _callee);
|
|
3594
|
-
}));
|
|
3595
|
-
return _handleClick.apply(this, arguments);
|
|
3596
|
-
}
|
|
3597
|
-
|
|
3598
|
-
if (!editor) return null;
|
|
3599
|
-
return /*#__PURE__*/React.createElement(ToolbarButton, {
|
|
3600
|
-
title: "Hyperlink",
|
|
3601
|
-
testId: "hyperlink-toolbar-button",
|
|
3602
|
-
onClick: handleClick,
|
|
3603
|
-
isActive: isActive,
|
|
3604
|
-
isDisabled: props.isDisabled
|
|
3605
|
-
}, /*#__PURE__*/React.createElement(f36Icons.LinkIcon, null));
|
|
3606
|
-
}
|
|
3607
|
-
|
|
3608
3583
|
var isAnchor = function isAnchor(element) {
|
|
3609
3584
|
return element.nodeName === 'A' && !!element.getAttribute('href') && element.getAttribute('href') !== '#';
|
|
3610
3585
|
};
|