@atlaskit/editor-plugin-copy-button
Version:
editor-plugin-copy-button for @atlaskit/editor-core
117 lines (114 loc) • 5.79 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.afterCopy = void 0;
exports.getCopyButtonConfig = getCopyButtonConfig;
exports.processCopyButtonItems = void 0;
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _messages = _interopRequireDefault(require("@atlaskit/editor-common/messages"));
var _copy = _interopRequireDefault(require("@atlaskit/icon/core/copy"));
var _commands = require("../pm-plugins/commands");
var _pluginKey = require("../pm-plugins/plugin-key");
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; }
// eslint-disable-next-line @typescript-eslint/no-explicit-any
function isSeparator(item) {
return (item === null || item === void 0 ? void 0 : item.type) === 'separator';
}
function isNodeOptions(options) {
return 'nodeType' in options && options.nodeType !== undefined;
}
/**
* Performs the actions after a copy operation.
* - Sets the copied state in the editor state
* - Announces the copied message to the user
*/
var afterCopy = exports.afterCopy = function afterCopy(api) {
return function (message) {
var _api$accessibilityUti;
api === null || api === void 0 || api.core.actions.execute(function (_ref) {
var tr = _ref.tr;
return tr.setMeta(_pluginKey.copyButtonPluginKey, {
copied: true
}).setMeta('scrollIntoView', false);
});
api === null || api === void 0 || (_api$accessibilityUti = api.accessibilityUtils) === null || _api$accessibilityUti === void 0 || _api$accessibilityUti.actions.ariaNotify(message, {
priority: 'important'
});
};
};
function getCopyButtonConfig(options, hoverDecoration, editorAnalyticsApi, api) {
var state = options.state,
formatMessage = options.formatMessage,
onMouseEnter = options.onMouseEnter,
onMouseLeave = options.onMouseLeave,
onFocus = options.onFocus,
onBlur = options.onBlur;
var copyButtonState = _pluginKey.copyButtonPluginKey.getState(state);
var buttonActionHandlers;
if (isNodeOptions(options)) {
var onClick = options.onClick;
buttonActionHandlers = {
onClick: (0, _commands.createToolbarCopyCommandForNode)(options.nodeType, editorAnalyticsApi, api, formatMessage(_messages.default.copiedToClipboard)),
// Note for future changes: these two handlers should perform
// the same action.
onMouseEnter: onMouseEnter || (hoverDecoration === null || hoverDecoration === void 0 ? void 0 : hoverDecoration(options.nodeType, true, 'ak-editor-selected-node')),
onFocus: onFocus || (hoverDecoration === null || hoverDecoration === void 0 ? void 0 : hoverDecoration(options.nodeType, true, 'ak-editor-selected-node')),
// Note for future changes: these two handlers should perform
// the same action.
onMouseLeave: (0, _commands.resetCopiedState)(options.nodeType, hoverDecoration, onMouseLeave),
onBlur: (0, _commands.resetCopiedState)(options.nodeType, hoverDecoration, onBlur)
};
if (onClick) {
buttonActionHandlers.onClick = function (editorState, dispatch, editorView) {
if (onClick(editorState, dispatch, editorView)) {
afterCopy(api)(formatMessage(_messages.default.copiedToClipboard));
return true;
}
return false;
};
}
} else {
buttonActionHandlers = {
onClick: (0, _commands.createToolbarCopyCommandForMark)(options.markType, editorAnalyticsApi),
onMouseEnter: (0, _commands.getProvideMarkVisualFeedbackForCopyButtonCommand)(options.markType),
onFocus: (0, _commands.getProvideMarkVisualFeedbackForCopyButtonCommand)(options.markType),
onMouseLeave: _commands.removeMarkVisualFeedbackForCopyButtonCommand,
onBlur: _commands.removeMarkVisualFeedbackForCopyButtonCommand
};
}
return _objectSpread(_objectSpread({
id: 'editor.floatingToolbar.copy',
type: 'button',
appearance: 'subtle',
icon: _copy.default,
title: formatMessage(copyButtonState !== null && copyButtonState !== void 0 && copyButtonState.copied ? _messages.default.copiedToClipboard : _messages.default.copyToClipboard)
}, buttonActionHandlers), {}, {
hideTooltipOnClick: false,
tabIndex: null
});
}
/**
* Process floatingToolbar items for copyButton
*/
var processCopyButtonItems = exports.processCopyButtonItems = function processCopyButtonItems(editorAnalyticsApi, api) {
return function (_state) {
return function (items, hoverDecoration) {
return items.flatMap(function (item) {
switch (item.type) {
case 'copy-button':
if (item !== null && item !== void 0 && item.hidden) {
return [];
}
return item === null || item === void 0 ? void 0 : item.items.map(function (copyButtonItem) {
return isSeparator(copyButtonItem) ? copyButtonItem : getCopyButtonConfig(copyButtonItem, hoverDecoration, editorAnalyticsApi, api);
});
default:
return [item];
}
});
};
};
};