import { DOMOutputSpec , Node as ProseMirrorNode , NodeSpec } from 'prosemirror-model' ; import * as sl from 'prosemirror-schema-list' ; import { toStyleString } from 'ngx-editor/utils' ; const doc = { content : 'block+' } ; const text = { group : 'inline' } ; const paragraph = { content : 'inline*' , group : 'block' , attrs : { align : { default : null , } } , parseDOM : [ { tag : 'p' , getAttrs ( dom ) { const { textAlign } = dom . style ; const align = dom . getAttribute ( 'align' ) || textAlign || null ; return { align } ; } } ] , toDOM ( node ) { const { align } = node . attrs ; const styles = { textAlign : align !== 'left' ? align : null } ; const style = toStyleString ( styles ) || null ; return [ 'p' , { style } , 0 ] ; } } ; const blockquote = { content : 'block+' , group : 'block' , defining : true , parseDOM : [ { tag : 'blockquote' } ] , toDOM ( ) { return [ 'blockquote' , 0 ] ; } } ; const horizontalRule = { group : 'block' , parseDOM : [ { tag : 'hr' } ] , toDOM ( ) { return [ 'hr' ] ; } } ; const heading = { attrs : { level : { default : 1 } , align : { default : null , } } , content : 'inline*' , group : 'block' , defining : true , parseDOM : [ { tag : 'h1' , getAttrs ( dom ) { const { textAlign } = dom . style ; const align = dom . getAttribute ( 'align' ) || textAlign || null ; return { level : 1 , align } ; } } , { tag : 'h2' , getAttrs ( dom ) { const { textAlign } = dom . style ; const align = dom . getAttribute ( 'align' ) || textAlign || null ; return { level : 2 , align } ; } } , { tag : 'h3' , getAttrs ( dom ) { const { textAlign } = dom . style ; const align = dom . getAttribute ( 'align' ) || textAlign || null ; return { level : 3 , align } ; } } , { tag : 'h4' , getAttrs ( dom ) { const { textAlign } = dom . style ; const align = dom . getAttribute ( 'align' ) || textAlign || null ; return { level : 4 , align } ; } } , { tag : 'h5' , getAttrs ( dom ) { const { textAlign } = dom . style ; const align = dom . getAttribute ( 'align' ) || textAlign || null ; return { level : 5 , align } ; } } , { tag : 'h6' , getAttrs ( dom ) { const { textAlign } = dom . style ; const align = dom . getAttribute ( 'align' ) || textAlign || null ; return { level : 6 , align } ; } } , ] , toDOM ( node ) { const { level , align } = node . attrs ; const styles = { textAlign : align !== 'left' ? align : null } ; const style = toStyleString ( styles ) || null ; return [ 'h' + level , { style } , 0 ] ; } } ; const codeBlock = { content : 'text*' , marks : '' , group : 'block' , code : true , defining : true , parseDOM : [ { tag : 'pre' , preserveWhitespace : 'full' } ] , toDOM ( ) { return [ 'pre' , [ 'code' , 0 ] ] ; } } ; const hardBreak = { inline : true , group : 'inline' , selectable : false , parseDOM : [ { tag : 'br' } ] , toDOM ( ) { return [ 'br' ] ; } } ; export const image = { inline : true , attrs : { src : { } , alt : { default : null } , title : { default : null } , width : { default : null } } , group : 'inline' , draggable : true , parseDOM : [ { tag : 'img[src]' , getAttrs ( dom ) { return { src : dom . getAttribute ( 'src' ) , title : dom . getAttribute ( 'title' ) , alt : dom . getAttribute ( 'alt' ) , width : dom . getAttribute ( 'width' ) } ; } } ] , toDOM ( node ) { const { src , alt , title , width } = node . attrs ; return [ 'img' , { src , alt , title , width } ] ; } } ; const listItem = { ... sl . listItem , content : 'paragraph block*' } ; const orderedList = { ... sl . orderedList , content : 'list_item+' , group : 'block' } ; const bulletList = { ... sl . bulletList , content : 'list_item+' , group : 'block' } ; const nodes = { doc , text , paragraph , blockquote , horizontal_rule : horizontalRule , heading , hard_break : hardBreak , code_block : codeBlock , image , list_item : listItem , ordered_list : orderedList , bullet_list : bulletList } ; export default nodes ;