@atlaskit/editor-core
Version:
A package contains Atlassian editor core functionality
110 lines (108 loc) • 5.53 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = createPluginsList;
exports.getDefaultPresetOptionsFromEditorProps = getDefaultPresetOptionsFromEditorProps;
exports.getScrollGutterOptions = getScrollGutterOptions;
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _featureFlagsFromProps = require("../utils/feature-flags-from-props");
var _isFullPage = require("../utils/is-full-page");
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; }
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; }
var isCodeBlockAllowed = function isCodeBlockAllowed(options) {
var exclude = options && options.allowBlockType && options.allowBlockType.exclude ? options.allowBlockType.exclude : [];
return exclude.indexOf('codeBlock') === -1;
};
function getScrollGutterOptions(props) {
var appearance = props.appearance;
if ((0, _isFullPage.isFullPage)(appearance)) {
// Full Page appearance uses a scrollable div wrapper.
return {
getScrollElement: function getScrollElement() {
return document.querySelector('.fabric-editor-popup-scroll-parent');
}
};
}
return undefined;
}
function getDefaultPresetOptionsFromEditorProps(props, createAnalyticsEvent
// Omit placeholder since it's an existing prop in `DefaultPresetPluginOptions` and will get overridden there
) {
var _props$linking, _props$textFormatting, _props$linking2, _props$linking3;
var appearance = props.appearance;
var cardOptions = ((_props$linking = props.linking) === null || _props$linking === void 0 ? void 0 : _props$linking.smartLinks) || props.smartLinks || props.UNSAFE_cards;
return _objectSpread(_objectSpread({}, props), {}, {
createAnalyticsEvent: createAnalyticsEvent,
typeAhead: {
isMobile: false
},
featureFlags: (0, _featureFlagsFromProps.createFeatureFlagsFromProps)(props.featureFlags),
paste: {
cardOptions: cardOptions,
sanitizePrivateContent: props.sanitizePrivateContent,
pasteWarningOptions: props.pasteWarningOptions
},
base: {
allowInlineCursorTarget: true,
allowScrollGutter: getScrollGutterOptions(props)
},
blockType: {
lastNodeMustBeParagraph: appearance === 'comment' || appearance === 'chromeless',
allowBlockType: props.allowBlockType,
isUndoRedoButtonsEnabled: props.allowUndoRedoButtons
},
placeholder: {
placeholder: props.placeholder,
placeholderBracketHint: props.placeholderBracketHint
},
textFormatting: _objectSpread(_objectSpread({}, props.textFormatting || {}), {}, {
responsiveToolbarMenu: ((_props$textFormatting = props.textFormatting) === null || _props$textFormatting === void 0 ? void 0 : _props$textFormatting.responsiveToolbarMenu) != null ? props.textFormatting.responsiveToolbarMenu : props.allowUndoRedoButtons
}),
submitEditor: props.onSave,
quickInsert: {
enableElementBrowser: props.elementBrowser && props.elementBrowser.showModal,
elementBrowserHelpUrl: props.elementBrowser && props.elementBrowser.helpUrl,
disableDefaultItems: props.quickInsert && typeof props.quickInsert !== 'boolean' && props.quickInsert.disableDefaultItems || false,
headless: false,
emptyStateHandler: props.elementBrowser && props.elementBrowser.emptyStateHandler,
prioritySortingFn: props.quickInsert && typeof props.quickInsert !== 'boolean' && props.quickInsert.prioritySortingFn || undefined,
onInsert: props.quickInsert && typeof props.quickInsert !== 'boolean' && props.quickInsert.onInsert || undefined
},
selection: {
useLongPressSelection: false
},
hyperlinkOptions: {
editorAppearance: props.appearance,
linkPicker: (_props$linking2 = props.linking) === null || _props$linking2 === void 0 ? void 0 : _props$linking2.linkPicker,
onClickCallback: cardOptions === null || cardOptions === void 0 ? void 0 : cardOptions.onClickCallback,
platform: 'web',
autoLinkOnBlur: (_props$linking3 = props.linking) === null || _props$linking3 === void 0 ? void 0 : _props$linking3.autoLinkOnBlur
},
codeBlock: _objectSpread(_objectSpread({}, props.codeBlock), {}, {
useLongPressSelection: false,
allowCompositionInputOverride: false
})
});
}
/**
* Maps EditorProps to EditorPlugins
*
* Note: The order that presets are added determines
* their placement in the editor toolbar.
*/
function createPluginsList(
// eslint-disable-next-line @typescript-eslint/no-explicit-any
preset, props, pluginInjectionAPI) {
var excludes = new Set();
if (!isCodeBlockAllowed({
allowBlockType: props.allowBlockType
})) {
excludes.add('codeBlock');
}
return preset.build({
pluginInjectionAPI: pluginInjectionAPI,
excludePlugins: excludes
});
}