@atlaskit/adf-schema
Version:
Shared package that contains the ADF-schema (json) and ProseMirror node/mark specs
65 lines (63 loc) • 1.82 kB
JavaScript
import { annotation as annotationFactory } from '../../next-schema/generated/markTypes';
/**
* @name annotation_mark
*/
export let AnnotationTypes = /*#__PURE__*/function (AnnotationTypes) {
AnnotationTypes["INLINE_COMMENT"] = "inlineComment";
return AnnotationTypes;
}({});
export let AnnotationMarkStates = /*#__PURE__*/function (AnnotationMarkStates) {
AnnotationMarkStates["RESOLVED"] = "resolved";
AnnotationMarkStates["ACTIVE"] = "active";
return AnnotationMarkStates;
}({});
export function buildDataAttributes({
id,
annotationType,
state
}) {
const data = {
'data-mark-type': 'annotation',
'data-mark-annotation-type': annotationType,
'data-id': id
};
if (state) {
return {
...data,
'data-mark-annotation-state': state
};
}
return data;
}
export const annotation = annotationFactory({
parseDOM: [{
tag: 'span[data-mark-type="annotation"]',
mark: 'annotation',
getAttrs: domNode => {
const dom = domNode;
const attrs = {
id: dom.getAttribute('data-id'),
annotationType: dom.getAttribute('data-mark-annotation-type')
};
return attrs;
}
}],
toDOM(node) {
/*
Data attributes on the DOM node are a temporary means of
incrementally switching over to the Annotation mark. Once renderer
provides native support for inline comments the data attributes on the
DOM nodes will be removed.
*/
return ['span', {
// Prettier will remove the quotes around class. This would cause some browsers
// to not add this attribute properly, as its a reserved word.
// prettier-ignore
'class': 'fabric-editor-annotation',
...buildDataAttributes({
id: node.attrs.id,
annotationType: node.attrs.annotationType
})
}, 0];
}
});