UNPKG

@atlaskit/editor-plugin-caption

Version:

Caption plugin for @atlaskit/editor-core

57 lines (55 loc) 2.49 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _analytics = require("@atlaskit/editor-common/analytics"); var _safePlugin = require("@atlaskit/editor-common/safe-plugin"); var _utils = require("@atlaskit/editor-prosemirror/utils"); var _nodeviews = _interopRequireDefault(require("../nodeviews")); var _pluginKey = require("./plugin-key"); var fireAnalytics = function fireAnalytics(tr, action, analyticsApi) { analyticsApi === null || analyticsApi === void 0 || analyticsApi.attachAnalyticsEvent({ action: action, eventType: _analytics.EVENT_TYPE.TRACK, actionSubject: _analytics.ACTION_SUBJECT.MEDIA_SINGLE, actionSubjectId: _analytics.ACTION_SUBJECT_ID.CAPTION })(tr); }; var _default = exports.default = function _default(portalProviderAPI, eventDispatcher, providerFactory, dispatch, pluginInjectionApi) { var _pluginInjectionApi$a; var analyticsApi = pluginInjectionApi === null || pluginInjectionApi === void 0 || (_pluginInjectionApi$a = pluginInjectionApi.analytics) === null || _pluginInjectionApi$a === void 0 ? void 0 : _pluginInjectionApi$a.actions; return new _safePlugin.SafePlugin({ appendTransaction: function appendTransaction(transactions, oldState, newState) { // only run for transactions that change selection if (!transactions.find(function (tr) { return tr.selectionSet; })) { return; } var newSelection = !newState.selection.eq(oldState.selection); var findCaption = (0, _utils.findParentNodeOfType)(oldState.schema.nodes.caption); var oldSelectionCaption = findCaption(oldState.selection); var tr = newState.tr; // if selecting away from caption, or selecting a different caption if (newSelection && oldSelectionCaption) { if (oldSelectionCaption.node.childCount === 0) { tr.delete(oldSelectionCaption.start - 1, oldSelectionCaption.start); tr.setMeta('scrollIntoView', false); fireAnalytics(tr, _analytics.ACTION.DELETED, analyticsApi); return tr; } else { fireAnalytics(tr, _analytics.ACTION.EDITED, analyticsApi); return tr; } } }, key: _pluginKey.pluginKey, props: { nodeViews: { caption: (0, _nodeviews.default)(portalProviderAPI, eventDispatcher, pluginInjectionApi) } } }); };