@atlaskit/editor-plugin-block-type
Version:
BlockType plugin for @atlaskit/editor-core
169 lines • 7.6 kB
JavaScript
import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
import { TRANSFORM_HEADINGS_MENU_SECTION_RANK, TRANSFORM_HEADINGS_H1_MENU_ITEM, TRANSFORM_HEADINGS_H2_MENU_ITEM, TRANSFORM_HEADINGS_H3_MENU_ITEM, TRANSFORM_HEADINGS_H4_MENU_ITEM, TRANSFORM_HEADINGS_H5_MENU_ITEM, TRANSFORM_HEADINGS_H6_MENU_ITEM, TRANSFORM_STRUCTURE_QUOTE_MENU_ITEM, TRANSFORM_STRUCTURE_PARAGRAPH_MENU_ITEM, TRANSFORM_STRUCTURE_MENU_SECTION, TRANSFORM_STRUCTURE_MENU_SECTION_RANK } from '@atlaskit/editor-common/block-menu';
import { TRANSFORM_TEXTFORMATTING_MENU_SECTION, TRANSFORM_TEXT_FORMATTING_SMALL_TEXT_MENU_ITEM } from '@atlaskit/editor-common/block-menu/key';
import { TRANSFORM_TEXT_FORMATTING_MENU_SECTION_RANK } from '@atlaskit/editor-common/block-menu/rank';
import { isExperimentEnabled } from '@atlaskit/platform-feature-experiments/is-experiment-enabled';
import { createHeadingBlockMenuItem } from './HeadingBlockMenuItem';
import { createParagraphBlockMenuItem } from './ParagraphBlockMenuItem';
import { createQuoteBlockMenuItem } from './QuoteBlockMenuItem';
import { createSmallTextBlockMenuItem } from './SmallTextBlockMenuItem';
var HEADING_NODE_NAME = 'heading';
var QUOTE_NODE_NAME = 'blockquote';
var PARAGRAPH_NODE_NAME = 'paragraph';
export var getBlockTypeComponents = function getBlockTypeComponents(api) {
var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
allowFontSize = _ref.allowFontSize;
var isSmallTextExperimentEnabled = isExperimentEnabled('platform_editor_block_menu_small_text');
var isSmallTextEnabled = Boolean(allowFontSize && isSmallTextExperimentEnabled);
var textFormattingRank = isSmallTextExperimentEnabled ? TRANSFORM_TEXT_FORMATTING_MENU_SECTION_RANK : TRANSFORM_HEADINGS_MENU_SECTION_RANK;
var isTransformHeadingDisabled = function isTransformHeadingDisabled(level) {
var _api$blockMenu;
return Boolean(api === null || api === void 0 || (_api$blockMenu = api.blockMenu) === null || _api$blockMenu === void 0 ? void 0 : _api$blockMenu.actions.isTransformOptionDisabled(HEADING_NODE_NAME, {
level: level
}));
};
return [{
type: 'block-menu-item',
key: TRANSFORM_HEADINGS_H1_MENU_ITEM.key,
parent: {
type: 'block-menu-section',
key: TRANSFORM_TEXTFORMATTING_MENU_SECTION.key,
rank: textFormattingRank[TRANSFORM_HEADINGS_H1_MENU_ITEM.key]
},
component: createHeadingBlockMenuItem({
level: 1,
api: api
}),
isHidden: function isHidden() {
return isTransformHeadingDisabled(1);
}
}, {
type: 'block-menu-item',
key: TRANSFORM_HEADINGS_H2_MENU_ITEM.key,
parent: {
type: 'block-menu-section',
key: TRANSFORM_TEXTFORMATTING_MENU_SECTION.key,
rank: textFormattingRank[TRANSFORM_HEADINGS_H2_MENU_ITEM.key]
},
component: createHeadingBlockMenuItem({
level: 2,
api: api
}),
isHidden: function isHidden() {
return isTransformHeadingDisabled(2);
}
}, {
type: 'block-menu-item',
key: TRANSFORM_HEADINGS_H3_MENU_ITEM.key,
parent: {
type: 'block-menu-section',
key: TRANSFORM_TEXTFORMATTING_MENU_SECTION.key,
rank: textFormattingRank[TRANSFORM_HEADINGS_H3_MENU_ITEM.key]
},
component: createHeadingBlockMenuItem({
level: 3,
api: api
}),
isHidden: function isHidden() {
return isTransformHeadingDisabled(3);
}
}, {
type: 'block-menu-item',
key: TRANSFORM_HEADINGS_H4_MENU_ITEM.key,
parent: {
type: 'block-menu-section',
key: TRANSFORM_TEXTFORMATTING_MENU_SECTION.key,
rank: textFormattingRank[TRANSFORM_HEADINGS_H4_MENU_ITEM.key]
},
component: createHeadingBlockMenuItem({
level: 4,
api: api
}),
isHidden: function isHidden() {
return isTransformHeadingDisabled(4);
}
}, {
type: 'block-menu-item',
key: TRANSFORM_HEADINGS_H5_MENU_ITEM.key,
parent: {
type: 'block-menu-section',
key: TRANSFORM_TEXTFORMATTING_MENU_SECTION.key,
rank: textFormattingRank[TRANSFORM_HEADINGS_H5_MENU_ITEM.key]
},
component: createHeadingBlockMenuItem({
level: 5,
api: api
}),
isHidden: function isHidden() {
return isTransformHeadingDisabled(5);
}
}, {
type: 'block-menu-item',
key: TRANSFORM_HEADINGS_H6_MENU_ITEM.key,
parent: {
type: 'block-menu-section',
key: TRANSFORM_TEXTFORMATTING_MENU_SECTION.key,
rank: textFormattingRank[TRANSFORM_HEADINGS_H6_MENU_ITEM.key]
},
component: createHeadingBlockMenuItem({
level: 6,
api: api
}),
isHidden: function isHidden() {
return isTransformHeadingDisabled(6);
}
}, {
type: 'block-menu-item',
key: TRANSFORM_STRUCTURE_QUOTE_MENU_ITEM.key,
parent: {
type: 'block-menu-section',
key: isSmallTextExperimentEnabled ? TRANSFORM_TEXTFORMATTING_MENU_SECTION.key : TRANSFORM_STRUCTURE_MENU_SECTION.key,
rank: isSmallTextExperimentEnabled ? TRANSFORM_TEXT_FORMATTING_MENU_SECTION_RANK[TRANSFORM_STRUCTURE_QUOTE_MENU_ITEM.key] : TRANSFORM_STRUCTURE_MENU_SECTION_RANK[TRANSFORM_STRUCTURE_QUOTE_MENU_ITEM.key]
},
component: createQuoteBlockMenuItem({
api: api
}),
isHidden: function isHidden() {
var _api$blockMenu2;
return Boolean(api === null || api === void 0 || (_api$blockMenu2 = api.blockMenu) === null || _api$blockMenu2 === void 0 ? void 0 : _api$blockMenu2.actions.isTransformOptionDisabled(QUOTE_NODE_NAME));
}
}, {
type: 'block-menu-item',
key: TRANSFORM_STRUCTURE_PARAGRAPH_MENU_ITEM.key,
parent: {
type: 'block-menu-section',
key: isSmallTextExperimentEnabled ? TRANSFORM_TEXTFORMATTING_MENU_SECTION.key : TRANSFORM_STRUCTURE_MENU_SECTION.key,
rank: isSmallTextExperimentEnabled ? TRANSFORM_TEXT_FORMATTING_MENU_SECTION_RANK[TRANSFORM_STRUCTURE_PARAGRAPH_MENU_ITEM.key] : TRANSFORM_STRUCTURE_MENU_SECTION_RANK[TRANSFORM_STRUCTURE_PARAGRAPH_MENU_ITEM.key]
},
component: createParagraphBlockMenuItem({
api: api
}),
isHidden: function isHidden() {
var _api$blockMenu3;
return Boolean(api === null || api === void 0 || (_api$blockMenu3 = api.blockMenu) === null || _api$blockMenu3 === void 0 ? void 0 : _api$blockMenu3.actions.isTransformOptionDisabled(PARAGRAPH_NODE_NAME, undefined, isSmallTextExperimentEnabled ? {
marksToRemove: ['fontSize']
} : undefined));
}
}].concat(_toConsumableArray(isSmallTextEnabled ? [{
type: 'block-menu-item',
key: TRANSFORM_TEXT_FORMATTING_SMALL_TEXT_MENU_ITEM.key,
parent: {
type: 'block-menu-section',
key: TRANSFORM_TEXTFORMATTING_MENU_SECTION.key,
rank: TRANSFORM_TEXT_FORMATTING_MENU_SECTION_RANK[TRANSFORM_TEXT_FORMATTING_SMALL_TEXT_MENU_ITEM.key]
},
component: createSmallTextBlockMenuItem({
api: api
}),
isHidden: function isHidden() {
var _api$core$sharedState, _api$blockMenu4;
return !(api !== null && api !== void 0 && (_api$core$sharedState = api.core.sharedState.currentState()) !== null && _api$core$sharedState !== void 0 && (_api$core$sharedState = _api$core$sharedState.schema) !== null && _api$core$sharedState !== void 0 && _api$core$sharedState.marks.fontSize) || Boolean(api === null || api === void 0 || (_api$blockMenu4 = api.blockMenu) === null || _api$blockMenu4 === void 0 ? void 0 : _api$blockMenu4.actions.isTransformOptionDisabled(PARAGRAPH_NODE_NAME, undefined, {
marksToAdd: {
fontSize: {
fontSize: 'small'
}
}
}));
}
}] : []));
};