@atlaskit/editor-plugin-caption
Version:
Caption plugin for @atlaskit/editor-core
57 lines (55 loc) • 2.49 kB
JavaScript
;
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)
}
}
});
};