@atlaskit/editor-plugin-media
Version:
Media plugin for @atlaskit/editor-core
53 lines (52 loc) • 2.21 kB
JavaScript
import { ACTION, ACTION_SUBJECT, ACTION_SUBJECT_ID, EVENT_TYPE } from '@atlaskit/editor-common/analytics';
import { setTextSelection } from '@atlaskit/editor-prosemirror/utils';
export var selectCaptionFromMediaSinglePos = function selectCaptionFromMediaSinglePos(mediaSingleNodePos, mediaSingleNode) {
return function (state, dispatch) {
// node should have two children, media and caption
if (mediaSingleNode.childCount !== 2) {
return false;
}
if (dispatch) {
var media = mediaSingleNode.child(0);
var caption = mediaSingleNode.child(1);
var tr = state.tr;
tr = setSelectionAtEndOfCaption(tr, mediaSingleNodePos, media.nodeSize, caption.nodeSize);
tr.setMeta('scrollIntoView', false);
dispatch(tr);
}
return true;
};
};
export var insertAndSelectCaptionFromMediaSinglePos = function insertAndSelectCaptionFromMediaSinglePos(editorAnalyticsAPI) {
return function (mediaSingleNodePos, mediaSingleNode) {
return function (state, dispatch) {
if (typeof mediaSingleNodePos !== 'number') {
return false;
}
var tr = state.tr;
// node should have one child, media
if (mediaSingleNode.childCount !== 1) {
return false;
}
if (dispatch) {
var schema = state.schema;
var media = mediaSingleNode.child(0);
var caption = schema.nodes.caption.create();
tr = state.tr.insert(mediaSingleNodePos + media.nodeSize + 1, caption);
tr = setSelectionAtEndOfCaption(tr, mediaSingleNodePos, media.nodeSize, caption.nodeSize);
tr.setMeta('scrollIntoView', false);
editorAnalyticsAPI === null || editorAnalyticsAPI === void 0 || editorAnalyticsAPI.attachAnalyticsEvent({
action: ACTION.ADDED,
eventType: EVENT_TYPE.TRACK,
actionSubject: ACTION_SUBJECT.MEDIA_SINGLE,
actionSubjectId: ACTION_SUBJECT_ID.CAPTION
})(tr);
dispatch(tr);
}
return true;
};
};
};
var setSelectionAtEndOfCaption = function setSelectionAtEndOfCaption(tr, mediaSingleNodePos, mediaNodeSize, captionNodeSize) {
return setTextSelection(mediaSingleNodePos + mediaNodeSize + captionNodeSize)(tr);
};