mirror of
https://github.com/zadam/trilium.git
synced 2026-01-02 20:54:24 +01:00
70 lines
2.1 KiB
TypeScript
70 lines
2.1 KiB
TypeScript
// eslint-disable-next-line no-restricted-imports
|
|
import { ModelSchema } from 'ckeditor5';
|
|
import { ATTRIBUTES, ELEMENTS } from '../constants.js';
|
|
|
|
/**
|
|
* Declares the custom element types used by the footnotes plugin.
|
|
* See here for the meanings of each rule:
|
|
* https://ckeditor.com/docs/ckeditor5/latest/api/module_engine_model_schema-SchemaItemDefinition.html#member-isObject
|
|
*/
|
|
export const defineSchema = ( schema: ModelSchema ): void => {
|
|
/**
|
|
* Footnote section at the footer of the document.
|
|
*/
|
|
schema.register( ELEMENTS.footnoteSection, {
|
|
isObject: true,
|
|
allowWhere: '$block',
|
|
allowIn: '$root',
|
|
allowChildren: ELEMENTS.footnoteItem,
|
|
allowAttributes: [ ATTRIBUTES.footnoteSection ]
|
|
} );
|
|
|
|
/**
|
|
* Individual footnote item within the footnote section.
|
|
*/
|
|
schema.register( ELEMENTS.footnoteItem, {
|
|
isBlock: true,
|
|
isObject: true,
|
|
allowContentOf: '$root',
|
|
allowAttributes: [ ATTRIBUTES.footnoteSection, ATTRIBUTES.footnoteId, ATTRIBUTES.footnoteIndex ]
|
|
} );
|
|
|
|
/**
|
|
* Editable footnote item content container.
|
|
*/
|
|
schema.register( ELEMENTS.footnoteContent, {
|
|
allowIn: ELEMENTS.footnoteItem,
|
|
allowContentOf: '$root',
|
|
allowAttributes: [ ATTRIBUTES.footnoteSection ]
|
|
} );
|
|
|
|
/**
|
|
* Inline footnote citation, placed within the main text.
|
|
*/
|
|
schema.register( ELEMENTS.footnoteReference, {
|
|
allowWhere: '$text',
|
|
isInline: true,
|
|
isObject: true,
|
|
allowAttributes: [ ATTRIBUTES.footnoteReference, ATTRIBUTES.footnoteId, ATTRIBUTES.footnoteIndex ]
|
|
} );
|
|
|
|
/**
|
|
* return link which takes you from the footnote to the inline reference.
|
|
*/
|
|
schema.register( ELEMENTS.footnoteBackLink, {
|
|
allowIn: ELEMENTS.footnoteItem,
|
|
isInline: true,
|
|
isSelectable: false,
|
|
allowAttributes: [ ATTRIBUTES.footnoteBackLink, ATTRIBUTES.footnoteId ]
|
|
} );
|
|
|
|
schema.addChildCheck( ( context, childDefinition ) => {
|
|
if ( context.endsWith( ELEMENTS.footnoteContent ) && childDefinition.name === ELEMENTS.footnoteSection ) {
|
|
return false;
|
|
}
|
|
if ( context.endsWith( ELEMENTS.footnoteContent ) && childDefinition.name === 'listItem' ) {
|
|
return false;
|
|
}
|
|
} );
|
|
};
|