@atlaskit/editor-plugin-media
Version:
Media plugin for @atlaskit/editor-core
47 lines (46 loc) • 1.93 kB
JavaScript
import { ACTION, ACTION_SUBJECT, ACTION_SUBJECT_ID, EVENT_TYPE } from '@atlaskit/editor-common/analytics';
import { setTextSelection } from '@atlaskit/editor-prosemirror/utils';
export const selectCaptionFromMediaSinglePos = (mediaSingleNodePos, mediaSingleNode) => (state, dispatch) => {
// node should have two children, media and caption
if (mediaSingleNode.childCount !== 2) {
return false;
}
if (dispatch) {
const media = mediaSingleNode.child(0);
const caption = mediaSingleNode.child(1);
let tr = state.tr;
tr = setSelectionAtEndOfCaption(tr, mediaSingleNodePos, media.nodeSize, caption.nodeSize);
tr.setMeta('scrollIntoView', false);
dispatch(tr);
}
return true;
};
export const insertAndSelectCaptionFromMediaSinglePos = editorAnalyticsAPI => (mediaSingleNodePos, mediaSingleNode) => (state, dispatch) => {
if (typeof mediaSingleNodePos !== 'number') {
return false;
}
let tr = state.tr;
// node should have one child, media
if (mediaSingleNode.childCount !== 1) {
return false;
}
if (dispatch) {
const schema = state.schema;
const media = mediaSingleNode.child(0);
const 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 ? 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;
};
const setSelectionAtEndOfCaption = (tr, mediaSingleNodePos, mediaNodeSize, captionNodeSize) => {
return setTextSelection(mediaSingleNodePos + mediaNodeSize + captionNodeSize)(tr);
};