@atlaskit/editor-plugin-emoji
Version:
Emoji plugin for @atlaskit/editor-core
53 lines (52 loc) • 2.15 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.insertEmoji = exports.createEmojiFragment = void 0;
var _analytics = require("@atlaskit/editor-common/analytics");
var _utils = require("@atlaskit/editor-common/utils");
var _model = require("@atlaskit/editor-prosemirror/model");
var _state = require("@atlaskit/editor-prosemirror/state");
var _utils2 = require("@atlaskit/editor-prosemirror/utils");
var createEmojiFragment = exports.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 = (0, _utils.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 _model.Fragment.fromArray([emojiNode, space]);
};
var insertEmoji = exports.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 = (0, _utils2.safeInsert)(fragment)(tr);
if (inputMethod) {
editorAnalyticsAPI === null || editorAnalyticsAPI === void 0 || editorAnalyticsAPI.attachAnalyticsEvent({
action: _analytics.ACTION.INSERTED,
actionSubject: _analytics.ACTION_SUBJECT.DOCUMENT,
actionSubjectId: _analytics.ACTION_SUBJECT_ID.EMOJI,
attributes: {
inputMethod: inputMethod
},
eventType: _analytics.EVENT_TYPE.TRACK
})(newTr);
}
newTr.setSelection(_state.Selection.near(newTr.doc.resolve(selection.$from.pos + fragment.size)));
return newTr;
}
return null;
};
};
};