import { Schema } from "prosemirror-model" ; const pDOM = [ "p" , 0 ] ; const blockquoteDOM = [ "blockquote" , 0 ] ; const hrDOM = [ "hr" ] ; const preDOM = [ "pre" , [ "code" , 0 ] ] ; const brDOM = [ "br" ] ; export const nodes = { doc : { content : "block+" , } , paragraph : { content : "inline*" , group : "block" , parseDOM : [ { tag : "p" } ] , toDOM : ( ) => pDOM , } , blockquote : { content : "block+" , group : "block" , defining : true , parseDOM : [ { tag : "blockquote" } ] , toDOM : ( ) => blockquoteDOM , } , horizontal_rule : { group : "block" , parseDOM : [ { tag : "hr" } ] , toDOM : ( ) => hrDOM , } , heading : { attrs : { level : { default : 1 } } , content : "inline*" , group : "block" , defining : true , parseDOM : [ { tag : "h1" , attrs : { level : 1 } } , { tag : "h2" , attrs : { level : 2 } } , { tag : "h3" , attrs : { level : 3 } } , { tag : "h4" , attrs : { level : 4 } } , { tag : "h5" , attrs : { level : 5 } } , { tag : "h6" , attrs : { level : 6 } } , ] , toDOM : ( node ) => [ `h${ node . attrs . level }` , 0 ] , } , code_block : { content : "text*" , marks : "" , group : "block" , code : true , defining : true , parseDOM : [ { tag : "pre" , preserveWhitespace : "full" } ] , toDOM : ( ) => preDOM , } , text : { group : "inline" , } , fluid : { group : "inline" , content : "inline*" , inline : true , draggable : true , atom : true , toDOM ( node ) { const { src , alt , title } = node . attrs ; return [ "fluid" , { src , alt , title } ] ; } , parseDOM : [ { tag : "fluid" , getAttrs : ( dom ) => ( { alt : dom . getAttribute ( "alt" ) , src : dom . getAttribute ( "src" ) , title : dom . getAttribute ( "title" ) , } ) , } ] , attrs : { src : { default : "" } , alt : { default : null } , title : { default : null } , } , } , footnote : { group : "inline" , content : "inline*" , inline : true , draggable : true , atom : true , toDOM : ( ) => [ "footnote" , 0 ] , parseDOM : [ { tag : "footnote" } ] , } , image : { inline : true , attrs : { src : { } , alt : { default : null } , title : { default : null } , } , group : "inline" , draggable : true , parseDOM : [ { tag : "img[src]" , getAttrs : ( dom ) => ( { src : dom . getAttribute ( "src" ) , title : dom . getAttribute ( "title" ) , alt : dom . getAttribute ( "alt" ) , } ) , } ] , toDOM ( node ) { const { src , alt , title } = node . attrs ; return [ "img" , { src , alt , title } ] ; } , } , hard_break : { inline : true , group : "inline" , selectable : false , parseDOM : [ { tag : "br" } ] , toDOM : ( ) => brDOM , } , } ; const emDOM = [ "em" , 0 ] ; const strongDOM = [ "strong" , 0 ] ; const codeDOM = [ "code" , 0 ] ; export const marks = { link : { attrs : { href : { } , title : { default : null } , } , inclusive : false , parseDOM : [ { tag : "a[href]" , getAttrs : ( dom ) => ( { href : dom . getAttribute ( "href" ) , title : dom . getAttribute ( "title" ) } ) , } ] , toDOM ( node ) { const { href , title } = node . attrs ; return [ "a" , { href , title } , 0 ] ; } , } , em : { parseDOM : [ { tag : "i" } , { tag : "em" } , { style : "font-style=italic" } ] , toDOM : ( ) => emDOM , } , strong : { parseDOM : [ { tag : "strong" } , { tag : "b" , getAttrs : ( node ) => node . style . fontWeight !== "normal" && null } , { style : "font-weight" , getAttrs : ( value ) => /^(bold(er)?|[5-9]\d{2,})$/ . test ( value ) && null } , ] , toDOM : ( ) => strongDOM , } , code : { parseDOM : [ { tag : "code" } ] , toDOM : ( ) => codeDOM , } , } ; export const schema = new Schema ( { nodes : nodes as any , marks : marks as any } ) ;