@atlaskit/editor-plugin-emoji
Version:
Emoji plugin for @atlaskit/editor-core
47 lines • 1.96 kB
JavaScript
import { ACTION, ACTION_SUBJECT, ACTION_SUBJECT_ID, EVENT_TYPE } from '@atlaskit/editor-common/analytics';
import { getAnnotationMarksForPos } from '@atlaskit/editor-common/utils';
import { Fragment } from '@atlaskit/editor-prosemirror/model';
import { Selection } from '@atlaskit/editor-prosemirror/state';
import { safeInsert } from '@atlaskit/editor-prosemirror/utils';
export var createEmojiFragment = function createEmojiFragment(doc, pos, emoji) {
var _emoji$id = emoji.id,
id = _emoji$id === void 0 ? '' : _emoji$id,
fallback = emoji.fallback,
shortName = emoji.shortName;
var annotationMarksForPos = getAnnotationMarksForPos(pos);
var emojiNode = doc.type.schema.nodes.emoji.createChecked({
shortName: shortName,
id: id,
text: fallback || shortName
}, null, annotationMarksForPos);
var space = doc.type.schema.text(' ', annotationMarksForPos);
return Fragment.fromArray([emojiNode, space]);
};
export var insertEmoji = function insertEmoji(editorAnalyticsAPI) {
return function (emojiId, inputMethod) {
return function (_ref) {
var tr = _ref.tr;
var doc = tr.doc,
selection = tr.selection;
var emoji = tr.doc.type.schema.nodes.emoji;
if (emoji && emojiId) {
var fragment = createEmojiFragment(doc, selection.$head, emojiId);
var newTr = safeInsert(fragment)(tr);
if (inputMethod) {
editorAnalyticsAPI === null || editorAnalyticsAPI === void 0 || editorAnalyticsAPI.attachAnalyticsEvent({
action: ACTION.INSERTED,
actionSubject: ACTION_SUBJECT.DOCUMENT,
actionSubjectId: ACTION_SUBJECT_ID.EMOJI,
attributes: {
inputMethod: inputMethod
},
eventType: EVENT_TYPE.TRACK
})(newTr);
}
newTr.setSelection(Selection.near(newTr.doc.resolve(selection.$from.pos + fragment.size)));
return newTr;
}
return null;
};
};
};