bookish-press 0.4.47 → 0.4.48
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/components/Auth.svelte +55 -0
- package/components/Auth.svelte.d.ts +16 -0
- package/{src/lib/components/Authentication.ts → components/Authentication.d.ts} +0 -2
- package/components/Authentication.js +1 -0
- package/{src/lib/components → components}/BookPreview.svelte +22 -27
- package/components/BookPreview.svelte.d.ts +18 -0
- package/{src/lib/components → components}/External.svelte +1 -2
- package/components/External.svelte.d.ts +18 -0
- package/components/Link.svelte +51 -0
- package/components/Link.svelte.d.ts +18 -0
- package/{src/lib/components → components}/app/BookList.svelte +3 -6
- package/components/app/BookList.svelte.d.ts +18 -0
- package/{src/lib/components → components}/app/Button.svelte +4 -5
- package/components/app/Button.svelte.d.ts +22 -0
- package/{src/lib/components → components}/app/Feedback.svelte +7 -11
- package/components/app/Feedback.svelte.d.ts +18 -0
- package/{src/lib/components → components}/app/Head.svelte +1 -2
- package/components/app/Head.svelte.d.ts +18 -0
- package/{src/lib/components → components}/app/Large.svelte +0 -0
- package/components/app/Large.svelte.d.ts +27 -0
- package/{src/lib/components → components}/app/Lead.svelte +0 -0
- package/components/app/Lead.svelte.d.ts +27 -0
- package/{src/lib/components → components}/app/Link.svelte +3 -4
- package/components/app/Link.svelte.d.ts +20 -0
- package/{src/lib/components → components}/app/Options.svelte +4 -5
- package/components/app/Options.svelte.d.ts +19 -0
- package/{src/lib/components → components}/app/Paragraph.svelte +1 -2
- package/components/app/Paragraph.svelte.d.ts +18 -0
- package/{src/lib/components → components}/app/Section.svelte +0 -0
- package/components/app/Section.svelte.d.ts +27 -0
- package/{src/lib/components → components}/app/Table.svelte +0 -0
- package/components/app/Table.svelte.d.ts +27 -0
- package/{src/lib/components → components}/app/TextInput.svelte +9 -12
- package/components/app/TextInput.svelte.d.ts +22 -0
- package/{src/lib/components → components}/chapter/Atom.svelte +12 -18
- package/components/chapter/Atom.svelte.d.ts +19 -0
- package/components/chapter/Block.svelte +37 -0
- package/components/chapter/Block.svelte.d.ts +17 -0
- package/{src/lib/components → components}/chapter/Callout.svelte +3 -6
- package/components/chapter/Callout.svelte.d.ts +17 -0
- package/{src/lib/components → components}/chapter/CaptionedCode.svelte +13 -21
- package/components/chapter/CaptionedCode.svelte.d.ts +17 -0
- package/{src/lib/components → components}/chapter/ChapterBody.svelte +9 -13
- package/components/chapter/ChapterBody.svelte.d.ts +19 -0
- package/{src/lib/components → components}/chapter/Citations.svelte +33 -34
- package/components/chapter/Citations.svelte.d.ts +17 -0
- package/{src/lib/components → components}/chapter/Code.svelte +58 -62
- package/components/chapter/Code.svelte.d.ts +22 -0
- package/{src/lib/components → components}/chapter/Comment.svelte +18 -30
- package/components/chapter/Comment.svelte.d.ts +17 -0
- package/{src/lib/components → components}/chapter/Definition.svelte +17 -23
- package/components/chapter/Definition.svelte.d.ts +17 -0
- package/{src/lib/components → components}/chapter/Embed.svelte +77 -97
- package/components/chapter/Embed.svelte.d.ts +20 -0
- package/components/chapter/ErrorMessage.svelte +9 -0
- package/components/chapter/ErrorMessage.svelte.d.ts +17 -0
- package/components/chapter/ExtendedPrism.d.ts +2 -0
- package/{src/lib/components → components}/chapter/ExtendedPrism.js +0 -0
- package/{src/lib/components → components}/chapter/Figure.svelte +26 -34
- package/components/chapter/Figure.svelte.d.ts +24 -0
- package/{src/lib/components → components}/chapter/Footnote.svelte +20 -32
- package/components/chapter/Footnote.svelte.d.ts +19 -0
- package/{src/lib/components → components}/chapter/Format.svelte +34 -39
- package/components/chapter/Format.svelte.d.ts +19 -0
- package/{src/lib/components → components}/chapter/InlineCode.svelte +5 -9
- package/components/chapter/InlineCode.svelte.d.ts +17 -0
- package/{src/lib/components → components}/chapter/Label.svelte +14 -23
- package/components/chapter/Label.svelte.d.ts +17 -0
- package/{src/lib/components → components}/chapter/Link.svelte +21 -27
- package/components/chapter/Link.svelte.d.ts +17 -0
- package/{src/lib/components → components}/chapter/List.svelte +3 -5
- package/components/chapter/List.svelte.d.ts +17 -0
- package/{src/lib/components → components}/chapter/Marginal.svelte +41 -54
- package/components/chapter/Marginal.svelte.d.ts +22 -0
- package/{src/lib/components → components}/chapter/Paragraph.svelte +20 -25
- package/components/chapter/Paragraph.svelte.d.ts +18 -0
- package/{src/lib/components → components}/chapter/Positioned.svelte +1 -4
- package/components/chapter/Positioned.svelte.d.ts +19 -0
- package/{src/lib/components → components}/chapter/Problem.svelte +0 -0
- package/components/chapter/Problem.svelte.d.ts +27 -0
- package/components/chapter/Python.svelte +128 -0
- package/components/chapter/Python.svelte.d.ts +18 -0
- package/{src/lib/components → components}/chapter/Quote.svelte +5 -9
- package/components/chapter/Quote.svelte.d.ts +17 -0
- package/{src/lib/components → components}/chapter/Rule.svelte +1 -4
- package/components/chapter/Rule.svelte.d.ts +17 -0
- package/{src/lib/components → components}/chapter/Table.svelte +7 -11
- package/components/chapter/Table.svelte.d.ts +17 -0
- package/components/chapter/Text.svelte +87 -0
- package/components/chapter/Text.svelte.d.ts +18 -0
- package/components/editor/BookishEditor.svelte +884 -0
- package/components/editor/BookishEditor.svelte.d.ts +25 -0
- package/components/editor/CalloutEditor.svelte +10 -0
- package/components/editor/CalloutEditor.svelte.d.ts +17 -0
- package/{src/lib/components → components}/editor/CaptionedCodeEditor.svelte +6 -10
- package/components/editor/CaptionedCodeEditor.svelte.d.ts +17 -0
- package/components/editor/CaretContext.d.ts +50 -0
- package/components/editor/CaretContext.js +1 -0
- package/{src/lib/components/editor/CaretState.ts → components/editor/CaretState.d.ts} +7 -6
- package/components/editor/CaretState.js +1 -0
- package/{src/lib/components/editor/CaretUtilities.ts → components/editor/CaretUtilities.d.ts} +0 -1
- package/components/editor/CaretUtilities.js +1 -0
- package/{src/lib/components → components}/editor/CaretView.svelte +20 -25
- package/components/editor/CaretView.svelte.d.ts +25 -0
- package/components/editor/CitationsEditor.svelte +53 -0
- package/components/editor/CitationsEditor.svelte.d.ts +17 -0
- package/{src/lib/components/editor/Clipboard.ts → components/editor/Clipboard.d.ts} +1 -2
- package/components/editor/Clipboard.js +1 -0
- package/{src/lib/components/editor/Command.ts → components/editor/Command.d.ts} +2 -8
- package/components/editor/Command.js +1 -0
- package/components/editor/Commands.d.ts +3 -0
- package/{src/lib/components/editor/Commands.ts → components/editor/Commands.js} +315 -730
- package/components/editor/ConfirmButton.svelte +49 -0
- package/components/editor/ConfirmButton.svelte.d.ts +19 -0
- package/components/editor/DefinitionEditor.svelte +36 -0
- package/components/editor/DefinitionEditor.svelte.d.ts +17 -0
- package/components/editor/EmbedEditor.svelte +137 -0
- package/components/editor/EmbedEditor.svelte.d.ts +17 -0
- package/{src/lib/components → components}/editor/Icon.svelte +1 -2
- package/components/editor/Icon.svelte.d.ts +16 -0
- package/{src/lib/components → components}/editor/ImageChooser.svelte +19 -24
- package/components/editor/ImageChooser.svelte.d.ts +18 -0
- package/components/editor/InlineCodeEditor.svelte +12 -0
- package/components/editor/InlineCodeEditor.svelte.d.ts +17 -0
- package/{src/lib/components → components}/editor/LabelEditor.svelte +9 -14
- package/components/editor/LabelEditor.svelte.d.ts +17 -0
- package/{src/lib/components → components}/editor/LanguageEditor.svelte +5 -8
- package/components/editor/LanguageEditor.svelte.d.ts +17 -0
- package/components/editor/LinkEditor.svelte +100 -0
- package/components/editor/LinkEditor.svelte.d.ts +17 -0
- package/{src/lib/components → components}/editor/Note.svelte +0 -0
- package/components/editor/Note.svelte.d.ts +27 -0
- package/{src/lib/components → components}/editor/Permissions.svelte +36 -43
- package/components/editor/Permissions.svelte.d.ts +20 -0
- package/components/editor/PositionEditor.svelte +17 -0
- package/components/editor/PositionEditor.svelte.d.ts +18 -0
- package/components/editor/QuoteEditor.svelte +10 -0
- package/components/editor/QuoteEditor.svelte.d.ts +17 -0
- package/{src/lib/components → components}/editor/Switch.svelte +11 -14
- package/components/editor/Switch.svelte.d.ts +20 -0
- package/components/editor/TableEditor.svelte +10 -0
- package/components/editor/TableEditor.svelte.d.ts +17 -0
- package/{src/lib/components → components}/editor/TextEditor.svelte +89 -101
- package/components/editor/TextEditor.svelte.d.ts +24 -0
- package/components/editor/Toggle.svelte +41 -0
- package/components/editor/Toggle.svelte.d.ts +19 -0
- package/components/editor/Toolbar.svelte +249 -0
- package/components/editor/Toolbar.svelte.d.ts +17 -0
- package/{src/lib/components → components}/editor/ToolbarGroup.svelte +3 -5
- package/components/editor/ToolbarGroup.svelte.d.ts +18 -0
- package/{src/lib/components → components}/editor/ToolbarSpacer.svelte +0 -0
- package/components/editor/ToolbarSpacer.svelte.d.ts +23 -0
- package/components/editor/URLEditor.svelte +13 -0
- package/components/editor/URLEditor.svelte.d.ts +18 -0
- package/{src/lib/components/editor/UndoState.ts → components/editor/UndoState.d.ts} +2 -3
- package/components/editor/UndoState.js +1 -0
- package/{src/lib/components → components}/editor/icons/annotate.svg +0 -0
- package/{src/lib/components → components}/editor/icons/block.svg +0 -0
- package/{src/lib/components → components}/editor/icons/bold.svg +0 -0
- package/{src/lib/components → components}/editor/icons/bullets.svg +0 -0
- package/{src/lib/components → components}/editor/icons/callout.svg +0 -0
- package/{src/lib/components → components}/editor/icons/citation.svg +0 -0
- package/{src/lib/components → components}/editor/icons/clear.svg +0 -0
- package/{src/lib/components → components}/editor/icons/clipboard.svg +0 -0
- package/{src/lib/components → components}/editor/icons/code.svg +0 -0
- package/{src/lib/components → components}/editor/icons/columnafter.svg +0 -0
- package/{src/lib/components → components}/editor/icons/columnbefore.svg +0 -0
- package/{src/lib/components → components}/editor/icons/comment.svg +0 -0
- package/{src/lib/components → components}/editor/icons/copy.svg +0 -0
- package/{src/lib/components → components}/editor/icons/cut.svg +0 -0
- package/{src/lib/components → components}/editor/icons/define.svg +0 -0
- package/{src/lib/components → components}/editor/icons/deletecolumn.svg +0 -0
- package/{src/lib/components → components}/editor/icons/deleterow.svg +0 -0
- package/{src/lib/components → components}/editor/icons/footnote.svg +0 -0
- package/{src/lib/components → components}/editor/icons/header1.svg +0 -0
- package/{src/lib/components → components}/editor/icons/header2.svg +0 -0
- package/{src/lib/components → components}/editor/icons/header3.svg +0 -0
- package/{src/lib/components → components}/editor/icons/home.svg +0 -0
- package/{src/lib/components → components}/editor/icons/indent.svg +0 -0
- package/{src/lib/components → components}/editor/icons/italic.svg +0 -0
- package/{src/lib/components → components}/editor/icons/label.svg +0 -0
- package/{src/lib/components → components}/editor/icons/left.svg +0 -0
- package/{src/lib/components → components}/editor/icons/level.svg +0 -0
- package/{src/lib/components → components}/editor/icons/link.svg +0 -0
- package/{src/lib/components → components}/editor/icons/list.svg +0 -0
- package/{src/lib/components → components}/editor/icons/media.svg +0 -0
- package/{src/lib/components → components}/editor/icons/middle.svg +0 -0
- package/{src/lib/components → components}/editor/icons/numbers.svg +0 -0
- package/{src/lib/components → components}/editor/icons/paragraph.svg +0 -0
- package/{src/lib/components → components}/editor/icons/paste.svg +0 -0
- package/{src/lib/components → components}/editor/icons/quote.svg +0 -0
- package/{src/lib/components → components}/editor/icons/redo.svg +0 -0
- package/{src/lib/components → components}/editor/icons/right.svg +0 -0
- package/{src/lib/components → components}/editor/icons/rowabove.svg +0 -0
- package/{src/lib/components → components}/editor/icons/rowbelow.svg +0 -0
- package/{src/lib/components → components}/editor/icons/rule.svg +0 -0
- package/{src/lib/components → components}/editor/icons/sub.svg +0 -0
- package/{src/lib/components → components}/editor/icons/super.svg +0 -0
- package/{src/lib/components → components}/editor/icons/table.svg +0 -0
- package/{src/lib/components → components}/editor/icons/text.svg +0 -0
- package/{src/lib/components → components}/editor/icons/time.svg +0 -0
- package/{src/lib/components → components}/editor/icons/undo.svg +0 -0
- package/{src/lib/components → components}/editor/icons/unindent.svg +0 -0
- package/{src/lib/components → components}/editor/icons/unlink.svg +0 -0
- package/{src/lib/components → components}/page/Acknowledgements.svelte +10 -19
- package/components/page/Acknowledgements.svelte.d.ts +14 -0
- package/components/page/Authors.svelte +85 -0
- package/components/page/Authors.svelte.d.ts +21 -0
- package/components/page/BookLoader.svelte +59 -0
- package/components/page/BookLoader.svelte.d.ts +16 -0
- package/components/page/BulkReferenceEditor.svelte +63 -0
- package/components/page/BulkReferenceEditor.svelte.d.ts +14 -0
- package/components/page/Chapter.svelte +392 -0
- package/components/page/Chapter.svelte.d.ts +18 -0
- package/components/page/ChapterContext.d.ts +10 -0
- package/components/page/ChapterContext.js +1 -0
- package/{src/lib/components → components}/page/ChapterNumber.svelte +0 -0
- package/components/page/ChapterNumber.svelte.d.ts +27 -0
- package/{src/lib/components → components}/page/ChapterTitle.svelte +2 -4
- package/components/page/ChapterTitle.svelte.d.ts +18 -0
- package/components/page/Contexts.d.ts +47 -0
- package/components/page/Contexts.js +133 -0
- package/{src/lib/components → components}/page/DefinitionView.svelte +37 -52
- package/components/page/DefinitionView.svelte.d.ts +18 -0
- package/{src/lib/components → components}/page/Description.svelte +7 -15
- package/components/page/Description.svelte.d.ts +14 -0
- package/components/page/Edition.svelte +161 -0
- package/components/page/Edition.svelte.d.ts +20 -0
- package/components/page/EditionLoader.svelte +99 -0
- package/components/page/EditionLoader.svelte.d.ts +18 -0
- package/{src/lib/components → components}/page/Editions.svelte +18 -22
- package/components/page/Editions.svelte.d.ts +14 -0
- package/{src/lib/components → components}/page/Glossary.svelte +28 -33
- package/components/page/Glossary.svelte.d.ts +14 -0
- package/{src/lib/components → components}/page/Header.svelte +52 -59
- package/components/page/Header.svelte.d.ts +29 -0
- package/{src/lib/components → components}/page/Index.svelte +41 -48
- package/components/page/Index.svelte.d.ts +14 -0
- package/{src/lib/components → components}/page/Instructions.svelte +1 -2
- package/components/page/Instructions.svelte.d.ts +18 -0
- package/{src/lib/components → components}/page/License.svelte +9 -17
- package/components/page/License.svelte.d.ts +14 -0
- package/{src/lib/components → components}/page/Loading.svelte +0 -0
- package/components/page/Loading.svelte.d.ts +23 -0
- package/{src/lib/components → components}/page/Media.svelte +27 -44
- package/components/page/Media.svelte.d.ts +14 -0
- package/{src/lib/components → components}/page/MediaPreview.svelte +2 -3
- package/components/page/MediaPreview.svelte.d.ts +19 -0
- package/{src/lib/components → components}/page/Muted.svelte +0 -0
- package/components/page/Muted.svelte.d.ts +27 -0
- package/{src/lib/components → components}/page/Outline.svelte +110 -140
- package/components/page/Outline.svelte.d.ts +19 -0
- package/components/page/Page.svelte +84 -0
- package/components/page/Page.svelte.d.ts +19 -0
- package/{src/lib/components → components}/page/PageHeader.svelte +1 -2
- package/components/page/PageHeader.svelte.d.ts +18 -0
- package/{src/lib/components → components}/page/PageParagraph.svelte +0 -0
- package/components/page/PageParagraph.svelte.d.ts +27 -0
- package/components/page/PossibleChapter.svelte +14 -0
- package/components/page/PossibleChapter.svelte.d.ts +14 -0
- package/components/page/PossibleReference.svelte +11 -0
- package/components/page/PossibleReference.svelte.d.ts +18 -0
- package/{src/lib/components → components}/page/Print.svelte +3 -5
- package/components/page/Print.svelte.d.ts +14 -0
- package/{src/lib/components → components}/page/Publish.svelte +52 -59
- package/components/page/Publish.svelte.d.ts +14 -0
- package/{src/lib/components → components}/page/Reference.svelte +30 -39
- package/components/page/Reference.svelte.d.ts +17 -0
- package/{src/lib/components → components}/page/References.svelte +14 -18
- package/components/page/References.svelte.d.ts +14 -0
- package/{src/lib/components → components}/page/Rows.svelte +0 -0
- package/components/page/Rows.svelte.d.ts +27 -0
- package/components/page/Search.svelte +133 -0
- package/components/page/Search.svelte.d.ts +14 -0
- package/{src/lib/components → components}/page/Status.svelte +3 -5
- package/components/page/Status.svelte.d.ts +14 -0
- package/{src/lib/components → components}/page/SubdomainEditor.svelte +13 -16
- package/components/page/SubdomainEditor.svelte.d.ts +14 -0
- package/{src/lib/components → components}/page/TableOfContents.svelte +68 -79
- package/components/page/TableOfContents.svelte.d.ts +14 -0
- package/components/page/TableOfContentsImage.svelte +18 -0
- package/components/page/TableOfContentsImage.svelte.d.ts +16 -0
- package/{src/lib/components → components}/page/TableOfContentsRow.svelte +24 -34
- package/components/page/TableOfContentsRow.svelte.d.ts +24 -0
- package/{src/lib/components → components}/page/ThemeEditor.svelte +33 -44
- package/components/page/ThemeEditor.svelte.d.ts +14 -0
- package/{src/lib/components → components}/page/ThemeEditorPreview.svelte +12 -21
- package/components/page/ThemeEditorPreview.svelte.d.ts +17 -0
- package/components/page/ThemeSetEditor.svelte +19 -0
- package/components/page/ThemeSetEditor.svelte.d.ts +18 -0
- package/{src/lib/components → components}/page/ThemeVariableEditor.svelte +14 -18
- package/components/page/ThemeVariableEditor.svelte.d.ts +18 -0
- package/{src/lib/components → components}/page/Title.svelte +0 -0
- package/components/page/Title.svelte.d.ts +27 -0
- package/{src/lib/components → components}/page/Unknown.svelte +8 -10
- package/components/page/Unknown.svelte.d.ts +16 -0
- package/components/page/margins.d.ts +2 -0
- package/{src/lib/components/page/margins.ts → components/page/margins.js} +46 -79
- package/index.d.ts +15 -0
- package/{src/lib/index.js → index.js} +0 -0
- package/models/CRUD.d.ts +27 -0
- package/models/CRUD.js +262 -0
- package/models/Firebase.d.ts +5 -0
- package/{src/lib/models/Firebase.ts → models/Firebase.js} +16 -26
- package/models/book/Book.d.ts +61 -0
- package/models/book/Book.js +135 -0
- package/models/book/BookMedia.d.ts +23 -0
- package/models/book/BookMedia.js +108 -0
- package/models/book/BookSaveStatus.d.ts +7 -0
- package/models/book/BookSaveStatus.js +8 -0
- package/models/book/Chapter.d.ts +81 -0
- package/models/book/Chapter.js +212 -0
- package/models/book/ChapterID.d.ts +10 -0
- package/{src/lib/models/book/ChapterID.ts → models/book/ChapterID.js} +0 -1
- package/models/book/Definition.d.ts +6 -0
- package/models/book/Definition.js +1 -0
- package/models/book/Edition.d.ts +139 -0
- package/models/book/Edition.js +620 -0
- package/models/book/Reference.d.ts +24 -0
- package/models/book/Reference.js +78 -0
- package/models/book/Schema.d.ts +174 -0
- package/{src/lib/models/book/Schema.ts → models/book/Schema.js} +0 -1
- package/models/book/Theme.d.ts +113 -0
- package/{src/lib/models/book/Theme.ts → models/book/Theme.js} +5 -109
- package/{src/lib/models/book/ThemeColors.ts → models/book/ThemeColors.d.ts} +0 -6
- package/models/book/ThemeColors.js +1 -0
- package/models/book/Words.d.ts +2 -0
- package/{src/lib/models/book/Words.ts → models/book/Words.js} +0 -1
- package/models/chapter/AtomNode.d.ts +18 -0
- package/{src/lib/models/chapter/AtomNode.ts → models/chapter/AtomNode.js} +10 -30
- package/models/chapter/BlockNode.d.ts +20 -0
- package/{src/lib/models/chapter/BlockNode.ts → models/chapter/BlockNode.js} +47 -80
- package/models/chapter/BlocksNode.d.ts +50 -0
- package/{src/lib/models/chapter/BlocksNode.ts → models/chapter/BlocksNode.js} +359 -571
- package/models/chapter/BlocksNode.test.d.ts +1 -0
- package/models/chapter/BlocksNode.test.js +568 -0
- package/{src/lib/models/chapter/Bookkeeping.ts → models/chapter/Bookkeeping.d.ts} +0 -0
- package/models/chapter/Bookkeeping.js +1 -0
- package/models/chapter/CalloutNode.d.ts +17 -0
- package/models/chapter/CalloutNode.js +58 -0
- package/models/chapter/Caret.d.ts +23 -0
- package/{src/lib/models/chapter/Caret.ts → models/chapter/Caret.js} +26 -50
- package/models/chapter/ChapterNode.d.ts +34 -0
- package/models/chapter/ChapterNode.js +117 -0
- package/models/chapter/CitationsNode.d.ts +16 -0
- package/{src/lib/models/chapter/CitationsNode.ts → models/chapter/CitationsNode.js} +10 -17
- package/models/chapter/CodeNode.d.ts +35 -0
- package/{src/lib/models/chapter/CodeNode.ts → models/chapter/CodeNode.js} +62 -125
- package/models/chapter/CommentNode.d.ts +18 -0
- package/models/chapter/CommentNode.js +48 -0
- package/models/chapter/DefinitionNode.d.ts +12 -0
- package/{src/lib/models/chapter/DefinitionNode.ts → models/chapter/DefinitionNode.js} +8 -14
- package/models/chapter/Edit.d.ts +7 -0
- package/models/chapter/Edit.js +1 -0
- package/models/chapter/EmbedNode.d.ts +45 -0
- package/models/chapter/EmbedNode.js +168 -0
- package/models/chapter/ErrorNode.d.ts +17 -0
- package/{src/lib/models/chapter/ErrorNode.ts → models/chapter/ErrorNode.js} +8 -15
- package/models/chapter/FootnoteNode.d.ts +18 -0
- package/models/chapter/FootnoteNode.js +47 -0
- package/models/chapter/FormatNode.d.ts +60 -0
- package/{src/lib/models/chapter/FormatNode.ts → models/chapter/FormatNode.js} +262 -443
- package/models/chapter/FormatNode.test.d.ts +1 -0
- package/models/chapter/FormatNode.test.js +96 -0
- package/models/chapter/InlineCodeNode.d.ts +12 -0
- package/{src/lib/models/chapter/InlineCodeNode.ts → models/chapter/InlineCodeNode.js} +9 -17
- package/models/chapter/LabelNode.d.ts +17 -0
- package/{src/lib/models/chapter/LabelNode.ts → models/chapter/LabelNode.js} +10 -26
- package/models/chapter/LinkNode.d.ts +12 -0
- package/{src/lib/models/chapter/LinkNode.ts → models/chapter/LinkNode.js} +7 -12
- package/models/chapter/ListNode.d.ts +51 -0
- package/{src/lib/models/chapter/ListNode.ts → models/chapter/ListNode.js} +200 -277
- package/models/chapter/ListNode.test.d.ts +1 -0
- package/{src/lib/models/chapter/ListNode.test.ts → models/chapter/ListNode.test.js} +20 -57
- package/models/chapter/MetadataNode.d.ts +17 -0
- package/models/chapter/MetadataNode.js +32 -0
- package/models/chapter/Node.d.ts +38 -0
- package/{src/lib/models/chapter/Node.ts → models/chapter/Node.js} +71 -155
- package/models/chapter/Node.test.d.ts +1 -0
- package/{src/lib/models → models}/chapter/Node.test.js +0 -0
- package/models/chapter/ParagraphNode.d.ts +33 -0
- package/{src/lib/models/chapter/ParagraphNode.ts → models/chapter/ParagraphNode.js} +58 -95
- package/models/chapter/ParagraphNode.test.d.ts +1 -0
- package/models/chapter/ParagraphNode.test.js +30 -0
- package/models/chapter/Parser.d.ts +75 -0
- package/{src/lib/models/chapter/Parser.ts → models/chapter/Parser.js} +184 -369
- package/models/chapter/Parser.test.d.ts +1 -0
- package/{src/lib/models/chapter/Parser.test.ts → models/chapter/Parser.test.js} +0 -7
- package/{src/lib/models/chapter/Position.ts → models/chapter/Position.d.ts} +0 -0
- package/models/chapter/Position.js +1 -0
- package/models/chapter/QuoteNode.d.ts +25 -0
- package/models/chapter/QuoteNode.js +99 -0
- package/{src/lib/models/chapter/RootNode.ts → models/chapter/RootNode.d.ts} +0 -2
- package/models/chapter/RootNode.js +1 -0
- package/models/chapter/RuleNode.d.ts +15 -0
- package/{src/lib/models/chapter/RuleNode.ts → models/chapter/RuleNode.js} +6 -9
- package/models/chapter/TableNode.d.ts +37 -0
- package/{src/lib/models/chapter/TableNode.ts → models/chapter/TableNode.js} +82 -141
- package/models/chapter/TableNode.test.d.ts +1 -0
- package/{src/lib/models/chapter/TableNode.test.ts → models/chapter/TableNode.test.js} +10 -27
- package/models/chapter/TextNode.d.ts +36 -0
- package/{src/lib/models/chapter/TextNode.ts → models/chapter/TextNode.js} +65 -117
- package/models/chapter/TextNode.test.d.ts +1 -0
- package/{src/lib/models/chapter/TextNode.test.ts → models/chapter/TextNode.test.js} +0 -2
- package/package.json +270 -53
- package/util/getSubdomain.d.ts +3 -0
- package/{src/lib/util/getSubdomain.ts → util/getSubdomain.js} +8 -14
- package/util/isMobile.d.ts +2 -0
- package/{src/lib/util/isMobile.ts → util/isMobile.js} +0 -1
- package/util/mineReference.d.ts +4 -0
- package/{src/lib/util/mineReference.ts → util/mineReference.js} +25 -45
- package/util/scrollToEyeLevel.d.ts +2 -0
- package/{src/lib/util/scrollToEyeLevel.ts → util/scrollToEyeLevel.js} +2 -4
- package/.env.example +0 -8
- package/.firebaserc +0 -8
- package/.prettierignore +0 -8
- package/.prettierrc.json +0 -5
- package/_update-notifier-last-checked +0 -0
- package/firebase.json +0 -46
- package/firestore.indexes.json +0 -4
- package/firestore.rules +0 -59
- package/functions/.eslintrc.js +0 -28
- package/functions/package-lock.json +0 -12595
- package/functions/package.json +0 -43
- package/functions/src/index.ts +0 -345
- package/functions/tsconfig.dev.json +0 -3
- package/functions/tsconfig.json +0 -15
- package/scripts/claims.cjs +0 -99
- package/src/app.d.ts +0 -9
- package/src/app.html +0 -24
- package/src/lib/components/Auth.svelte +0 -65
- package/src/lib/components/Link.svelte +0 -58
- package/src/lib/components/chapter/Block.svelte +0 -42
- package/src/lib/components/chapter/ErrorMessage.svelte +0 -12
- package/src/lib/components/chapter/Python.svelte +0 -144
- package/src/lib/components/chapter/Text.svelte +0 -109
- package/src/lib/components/editor/BookishEditor.svelte +0 -1101
- package/src/lib/components/editor/CalloutEditor.svelte +0 -14
- package/src/lib/components/editor/CaretContext.ts +0 -55
- package/src/lib/components/editor/CitationsEditor.svelte +0 -64
- package/src/lib/components/editor/ConfirmButton.svelte +0 -51
- package/src/lib/components/editor/DefinitionEditor.svelte +0 -44
- package/src/lib/components/editor/EmbedEditor.svelte +0 -152
- package/src/lib/components/editor/InlineCodeEditor.svelte +0 -16
- package/src/lib/components/editor/LinkEditor.svelte +0 -110
- package/src/lib/components/editor/PositionEditor.svelte +0 -21
- package/src/lib/components/editor/QuoteEditor.svelte +0 -14
- package/src/lib/components/editor/TableEditor.svelte +0 -14
- package/src/lib/components/editor/Toggle.svelte +0 -47
- package/src/lib/components/editor/Toolbar.svelte +0 -297
- package/src/lib/components/editor/URLEditor.svelte +0 -15
- package/src/lib/components/page/Authors.svelte +0 -92
- package/src/lib/components/page/BookLoader.svelte +0 -77
- package/src/lib/components/page/BulkReferenceEditor.svelte +0 -86
- package/src/lib/components/page/Chapter.svelte +0 -449
- package/src/lib/components/page/ChapterContext.ts +0 -13
- package/src/lib/components/page/Contexts.ts +0 -176
- package/src/lib/components/page/Edition.svelte +0 -189
- package/src/lib/components/page/EditionLoader.svelte +0 -123
- package/src/lib/components/page/Page.svelte +0 -94
- package/src/lib/components/page/PossibleChapter.svelte +0 -16
- package/src/lib/components/page/PossibleReference.svelte +0 -14
- package/src/lib/components/page/Search.svelte +0 -153
- package/src/lib/components/page/TableOfContentsImage.svelte +0 -22
- package/src/lib/components/page/ThemeSetEditor.svelte +0 -21
- package/src/lib/models/CRUD.ts +0 -469
- package/src/lib/models/book/Book.ts +0 -283
- package/src/lib/models/book/BookMedia.ts +0 -182
- package/src/lib/models/book/BookSaveStatus.ts +0 -8
- package/src/lib/models/book/Chapter.ts +0 -462
- package/src/lib/models/book/Definition.ts +0 -2
- package/src/lib/models/book/Edition.ts +0 -1216
- package/src/lib/models/book/Reference.ts +0 -171
- package/src/lib/models/chapter/BlocksNode.test.ts +0 -867
- package/src/lib/models/chapter/CalloutNode.ts +0 -79
- package/src/lib/models/chapter/ChapterNode.ts +0 -169
- package/src/lib/models/chapter/CommentNode.ts +0 -61
- package/src/lib/models/chapter/Edit.ts +0 -6
- package/src/lib/models/chapter/EmbedNode.ts +0 -257
- package/src/lib/models/chapter/FootnoteNode.ts +0 -59
- package/src/lib/models/chapter/FormatNode.test.ts +0 -137
- package/src/lib/models/chapter/MetadataNode.ts +0 -44
- package/src/lib/models/chapter/ParagraphNode.test.ts +0 -54
- package/src/lib/models/chapter/QuoteNode.ts +0 -135
- package/src/params/edition.ts +0 -3
- package/src/routes/+error.svelte +0 -12
- package/src/routes/+layout.svelte +0 -241
- package/src/routes/+page.svelte +0 -43
- package/src/routes/Footer.svelte +0 -0
- package/src/routes/Header.svelte +0 -112
- package/src/routes/[bookid]/+layout.svelte +0 -5
- package/src/routes/[bookid]/[[editionid=edition]]/+error.svelte +0 -14
- package/src/routes/[bookid]/[[editionid=edition]]/+layout.svelte +0 -7
- package/src/routes/[bookid]/[[editionid=edition]]/+page.svelte +0 -5
- package/src/routes/[bookid]/[[editionid=edition]]/[chapterid]/+page.svelte +0 -5
- package/src/routes/[bookid]/[[editionid=edition]]/glossary/+page.svelte +0 -5
- package/src/routes/[bookid]/[[editionid=edition]]/index/[[letter]]/+page.svelte +0 -5
- package/src/routes/[bookid]/[[editionid=edition]]/media/+page.svelte +0 -5
- package/src/routes/[bookid]/[[editionid=edition]]/print/+page.svelte +0 -5
- package/src/routes/[bookid]/[[editionid=edition]]/references/+page.svelte +0 -5
- package/src/routes/[bookid]/[[editionid=edition]]/search/+page.svelte +0 -5
- package/src/routes/[bookid]/editions/+page.svelte +0 -20
- package/src/routes/about/+page.svelte +0 -102
- package/src/routes/confirm/+page.svelte +0 -62
- package/src/routes/email/+page.svelte +0 -99
- package/src/routes/login/+page.svelte +0 -66
- package/src/routes/read/+page.svelte +0 -38
- package/src/routes/write/+error.svelte +0 -10
- package/src/routes/write/+layout.svelte +0 -11
- package/src/routes/write/+page.svelte +0 -114
- package/src/routes/write/[bookid]/+layout.svelte +0 -5
- package/src/routes/write/[bookid]/[[editionid=edition]]/+layout.svelte +0 -7
- package/src/routes/write/[bookid]/[[editionid=edition]]/+page.svelte +0 -5
- package/src/routes/write/[bookid]/[[editionid=edition]]/[chapterid]/+page.svelte +0 -5
- package/src/routes/write/[bookid]/[[editionid=edition]]/glossary/+page.svelte +0 -5
- package/src/routes/write/[bookid]/[[editionid=edition]]/index/[[letter]]/+page.svelte +0 -5
- package/src/routes/write/[bookid]/[[editionid=edition]]/media/+page.svelte +0 -5
- package/src/routes/write/[bookid]/[[editionid=edition]]/print/+page.svelte +0 -5
- package/src/routes/write/[bookid]/[[editionid=edition]]/references/+page.svelte +0 -5
- package/src/routes/write/[bookid]/[[editionid=edition]]/search/+page.svelte +0 -5
- package/src/routes/write/[bookid]/[[editionid=edition]]/theme/+page.svelte +0 -5
- package/src/routes/write/[bookid]/[[editionid=edition]]/unknown/+page.svelte +0 -5
- package/src/routes/write/[bookid]/editions/+page.svelte +0 -20
- package/src/vite-env.d.ts +0 -1
- package/static/icons/favicon.png +0 -0
- package/static/icons/icon.png +0 -0
- package/static/icons/ios-icon.png +0 -0
- package/storage.rules +0 -9
- package/svelte.config.js +0 -19
- package/tsconfig.json +0 -18
- package/tsconfig.node.json +0 -9
- package/vite.config.ts +0 -8
- package/vite.reader.config.ts +0 -32
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
import { test, expect } from 'vitest';
|
|
2
|
-
|
|
3
2
|
import FormatNode from './FormatNode';
|
|
4
3
|
import ListNode from './ListNode';
|
|
5
4
|
import TextNode from './TextNode';
|
|
6
|
-
|
|
7
5
|
const oneText = new TextNode('one');
|
|
8
6
|
const oneFormat = new FormatNode('', [oneText]);
|
|
9
7
|
const twoText = new TextNode('two');
|
|
@@ -15,77 +13,42 @@ const fourFormat = new FormatNode('', [fourText]);
|
|
|
15
13
|
const fiveText = new TextNode('five');
|
|
16
14
|
const fiveFormat = new FormatNode('', [fiveText]);
|
|
17
15
|
const shortList = new ListNode([oneFormat, twoFormat, threeFormat], false);
|
|
18
|
-
const list = new ListNode(
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
],
|
|
24
|
-
false
|
|
25
|
-
);
|
|
26
|
-
|
|
16
|
+
const list = new ListNode([
|
|
17
|
+
oneFormat,
|
|
18
|
+
new ListNode([twoFormat, threeFormat, fourFormat], false),
|
|
19
|
+
fiveFormat,
|
|
20
|
+
], false);
|
|
27
21
|
test('Insert items', () => {
|
|
28
|
-
expect(shortList.withItemAppended(fourFormat)?.toBookdown()).toBe(
|
|
29
|
-
|
|
30
|
-
);
|
|
31
|
-
expect(shortList.withItemPrepended(fourFormat)?.toBookdown()).toBe(
|
|
32
|
-
`* four\n* one\n* two\n* three`
|
|
33
|
-
);
|
|
22
|
+
expect(shortList.withItemAppended(fourFormat)?.toBookdown()).toBe(`* one\n* two\n* three\n* four`);
|
|
23
|
+
expect(shortList.withItemPrepended(fourFormat)?.toBookdown()).toBe(`* four\n* one\n* two\n* three`);
|
|
34
24
|
expect(shortList.withItemAt(fourFormat, 9)).toBeUndefined();
|
|
35
|
-
expect(shortList.withItemAt(fourFormat, 1)?.toBookdown()).toBe(
|
|
36
|
-
|
|
37
|
-
);
|
|
38
|
-
expect(shortList
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
expect(shortList.withItemBefore(fourFormat, twoFormat)?.toBookdown()).toBe(
|
|
42
|
-
`* one\n* four\n* two\n* three`
|
|
43
|
-
);
|
|
44
|
-
expect(
|
|
45
|
-
shortList
|
|
46
|
-
.withListAppended(new ListNode([fourFormat, fiveFormat], true))
|
|
47
|
-
?.toBookdown()
|
|
48
|
-
).toBe(`* one\n* two\n* three\n* four\n* five`);
|
|
25
|
+
expect(shortList.withItemAt(fourFormat, 1)?.toBookdown()).toBe(`* one\n* four\n* two\n* three`);
|
|
26
|
+
expect(shortList.withItemAfter(fourFormat, oneFormat)?.toBookdown()).toBe(`* one\n* four\n* two\n* three`);
|
|
27
|
+
expect(shortList.withItemBefore(fourFormat, twoFormat)?.toBookdown()).toBe(`* one\n* four\n* two\n* three`);
|
|
28
|
+
expect(shortList
|
|
29
|
+
.withListAppended(new ListNode([fourFormat, fiveFormat], true))
|
|
30
|
+
?.toBookdown()).toBe(`* one\n* two\n* three\n* four\n* five`);
|
|
49
31
|
});
|
|
50
|
-
|
|
51
32
|
test('Remove items', () => {
|
|
52
|
-
expect(shortList.withItemReplaced(1, fourFormat)?.toBookdown()).toBe(
|
|
53
|
-
`* one\n* four\n* three`
|
|
54
|
-
);
|
|
33
|
+
expect(shortList.withItemReplaced(1, fourFormat)?.toBookdown()).toBe(`* one\n* four\n* three`);
|
|
55
34
|
expect(shortList.withoutItemAt(0)?.toBookdown()).toBe(`* two\n* three`);
|
|
56
35
|
});
|
|
57
|
-
|
|
58
36
|
test('Split', () => {
|
|
59
|
-
expect(
|
|
60
|
-
shortList.withItemSplit({ node: threeText, index: 2 })?.toBookdown()
|
|
61
|
-
).toBe('* one\n* two\n* th\n* ree');
|
|
37
|
+
expect(shortList.withItemSplit({ node: threeText, index: 2 })?.toBookdown()).toBe('* one\n* two\n* th\n* ree');
|
|
62
38
|
});
|
|
63
|
-
|
|
64
39
|
test('Merge', () => {
|
|
65
40
|
const merged = shortList.withItemMergedBackwards(1);
|
|
66
41
|
expect(merged).not.toBeUndefined();
|
|
67
42
|
if (merged !== undefined)
|
|
68
43
|
expect(merged[0].toBookdown()).toBe('* onetwo\n* three');
|
|
69
44
|
});
|
|
70
|
-
|
|
71
45
|
test('Indent', () => {
|
|
72
|
-
expect(list.withItemIndented(oneFormat)?.toBookdown()).toBe(
|
|
73
|
-
|
|
74
|
-
);
|
|
75
|
-
expect(list.withItemIndented(twoFormat)?.toBookdown()).toBe(
|
|
76
|
-
`* one\n*** two\n** three\n** four\n* five`
|
|
77
|
-
);
|
|
78
|
-
expect(list.withItemIndented(fiveFormat)?.toBookdown()).toBe(
|
|
79
|
-
`* one\n** two\n** three\n** four\n** five`
|
|
80
|
-
);
|
|
46
|
+
expect(list.withItemIndented(oneFormat)?.toBookdown()).toBe(`** one\n** two\n** three\n** four\n* five`);
|
|
47
|
+
expect(list.withItemIndented(twoFormat)?.toBookdown()).toBe(`* one\n*** two\n** three\n** four\n* five`);
|
|
48
|
+
expect(list.withItemIndented(fiveFormat)?.toBookdown()).toBe(`* one\n** two\n** three\n** four\n** five`);
|
|
81
49
|
});
|
|
82
|
-
|
|
83
50
|
test('Unindent', () => {
|
|
84
|
-
expect(list.withItemUnindented(twoFormat)?.toBookdown()).toBe(
|
|
85
|
-
`* one\n* two\n** three\n** four\n* five`
|
|
86
|
-
);
|
|
51
|
+
expect(list.withItemUnindented(twoFormat)?.toBookdown()).toBe(`* one\n* two\n** three\n** four\n* five`);
|
|
87
52
|
expect(list.withItemUnindented(oneFormat)?.toBookdown()).toBeUndefined();
|
|
88
|
-
expect(list.withItemUnindented(threeFormat)?.toBookdown()).toBe(
|
|
89
|
-
`* one\n** two\n* three\n** four\n* five`
|
|
90
|
-
);
|
|
53
|
+
expect(list.withItemUnindented(threeFormat)?.toBookdown()).toBe(`* one\n** two\n* three\n** four\n* five`);
|
|
91
54
|
});
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { CaretRange } from './Caret';
|
|
2
|
+
import Node from './Node';
|
|
3
|
+
import type TextNode from './TextNode';
|
|
4
|
+
export default abstract class MetadataNode<MetaType> extends Node {
|
|
5
|
+
#private;
|
|
6
|
+
constructor(text: TextNode, meta: MetaType);
|
|
7
|
+
getMeta(): MetaType;
|
|
8
|
+
getText(): TextNode;
|
|
9
|
+
abstract withMeta(meta: MetaType): MetadataNode<MetaType>;
|
|
10
|
+
abstract withText(text: TextNode): MetadataNode<MetaType>;
|
|
11
|
+
abstract toText(): string;
|
|
12
|
+
abstract toBookdown(): string;
|
|
13
|
+
getChildren(): TextNode[];
|
|
14
|
+
getParentOf(node: Node): Node | undefined;
|
|
15
|
+
withChildReplaced(node: TextNode, replacement: TextNode | undefined): this | undefined;
|
|
16
|
+
withContentInRange(range: CaretRange): this | undefined;
|
|
17
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import Node from './Node';
|
|
2
|
+
export default class MetadataNode extends Node {
|
|
3
|
+
#text;
|
|
4
|
+
#meta;
|
|
5
|
+
constructor(text, meta) {
|
|
6
|
+
super();
|
|
7
|
+
this.#text = text;
|
|
8
|
+
this.#meta = meta;
|
|
9
|
+
}
|
|
10
|
+
getMeta() {
|
|
11
|
+
return this.#meta;
|
|
12
|
+
}
|
|
13
|
+
getText() {
|
|
14
|
+
return this.#text;
|
|
15
|
+
}
|
|
16
|
+
getChildren() {
|
|
17
|
+
return [this.#text];
|
|
18
|
+
}
|
|
19
|
+
getParentOf(node) {
|
|
20
|
+
return this.#text === node ? this : undefined;
|
|
21
|
+
}
|
|
22
|
+
withChildReplaced(node, replacement) {
|
|
23
|
+
if (this.#text === node && replacement !== undefined)
|
|
24
|
+
return this.withText(replacement);
|
|
25
|
+
}
|
|
26
|
+
withContentInRange(range) {
|
|
27
|
+
const selectedText = this.#text.withContentInRange(range);
|
|
28
|
+
if (selectedText === undefined)
|
|
29
|
+
return undefined;
|
|
30
|
+
return this.withText(selectedText);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type Caret from './Caret';
|
|
2
|
+
import type { CaretRange } from './Caret';
|
|
3
|
+
import type Edit from './Edit';
|
|
4
|
+
export default abstract class Node {
|
|
5
|
+
readonly nodeID: number;
|
|
6
|
+
constructor();
|
|
7
|
+
abstract toText(): string;
|
|
8
|
+
abstract toBookdown(): string;
|
|
9
|
+
abstract toHTML(): string;
|
|
10
|
+
abstract getType(): string;
|
|
11
|
+
abstract copy(): this;
|
|
12
|
+
abstract withChildReplaced(node: Node, replacement: Node | undefined): this | undefined;
|
|
13
|
+
abstract getChildren(): Node[];
|
|
14
|
+
abstract getParentOf(node: Node): Node | undefined;
|
|
15
|
+
getID(): number;
|
|
16
|
+
traverse(fn: (node: Node, parents: Node[]) => void, parents?: Node[]): void;
|
|
17
|
+
traverseChildren(fn: (node: Node, parents: Node[]) => void, parents: Node[]): void;
|
|
18
|
+
getNodes(): Node[];
|
|
19
|
+
getNodeBefore<Kind extends Node>(node: Node, matcher: (node: Kind) => boolean): Kind | undefined;
|
|
20
|
+
getNodeAfter<Kind extends Node>(node: Node, matcher: (node: Kind) => boolean): Kind | undefined;
|
|
21
|
+
sortRange(range: CaretRange): CaretRange;
|
|
22
|
+
getNode(id: number): Node | undefined;
|
|
23
|
+
getIndexOf(node: Node): number | undefined;
|
|
24
|
+
contains(node: Node): boolean;
|
|
25
|
+
getParentsOf(node: Node): Node[] | undefined;
|
|
26
|
+
getParent(root: Node): Node | undefined;
|
|
27
|
+
hasAncestor(root: Node, node: Node): boolean;
|
|
28
|
+
getClosestParentOfType<T extends Node>(root: Node, type: Function): T | undefined;
|
|
29
|
+
isInside(root: Node, type: Function): boolean;
|
|
30
|
+
getClosestParentMatching(root: Node, match: (node: Node) => boolean): Node | undefined;
|
|
31
|
+
getFarthestParentMatching(root: Node, match: (node: Node) => boolean): Node | undefined;
|
|
32
|
+
getAncestors(root: Node): Node[];
|
|
33
|
+
getCommonAncestor(root: Node, node: Node): Node | undefined;
|
|
34
|
+
withNodeReplaced(node: Node, replacement: Node | undefined): this | undefined;
|
|
35
|
+
abstract withContentInRange(range: CaretRange): this | undefined;
|
|
36
|
+
withNodeInserted(caret: Caret, node: Node): Edit;
|
|
37
|
+
copyRange(range: CaretRange): Node | undefined;
|
|
38
|
+
}
|
|
@@ -1,106 +1,56 @@
|
|
|
1
|
-
import type Caret from './Caret';
|
|
2
|
-
import type { CaretRange } from './Caret';
|
|
3
|
-
import type Edit from './Edit';
|
|
4
|
-
|
|
5
1
|
// A global node ID generator, for mapping views back to models.
|
|
6
2
|
let nodeID = 1;
|
|
7
|
-
|
|
8
|
-
export default abstract class Node {
|
|
3
|
+
export default class Node {
|
|
9
4
|
// A globally unique identifier, helpful for mapping things back to nodes.
|
|
10
|
-
|
|
11
|
-
|
|
5
|
+
nodeID;
|
|
12
6
|
constructor() {
|
|
13
7
|
this.nodeID = nodeID++;
|
|
14
8
|
}
|
|
15
|
-
|
|
16
|
-
// Returns space-separated text in the string, helpful for searching.
|
|
17
|
-
abstract toText(): string;
|
|
18
|
-
|
|
19
|
-
// Returns a syntactically valid Bookdown string representing the node and it's children.
|
|
20
|
-
abstract toBookdown(): string;
|
|
21
|
-
|
|
22
|
-
// Returns valid HTML representing the node and it's children.
|
|
23
|
-
abstract toHTML(): string;
|
|
24
|
-
|
|
25
|
-
// Returns a string represent the type of node this is.
|
|
26
|
-
abstract getType(): string;
|
|
27
|
-
|
|
28
|
-
// Returns an exact copy of this now.
|
|
29
|
-
abstract copy(): this;
|
|
30
|
-
|
|
31
|
-
// Returns a new node with the given child node replaced, or undefined if it didn't contain such a child.
|
|
32
|
-
abstract withChildReplaced(
|
|
33
|
-
node: Node,
|
|
34
|
-
replacement: Node | undefined
|
|
35
|
-
): this | undefined;
|
|
36
|
-
|
|
37
|
-
// Returns an ordered list of the child nodes.
|
|
38
|
-
abstract getChildren(): Node[];
|
|
39
|
-
|
|
40
|
-
// Recursively returns the parent of the given node.
|
|
41
|
-
abstract getParentOf(node: Node): Node | undefined;
|
|
42
|
-
|
|
43
9
|
getID() {
|
|
44
10
|
return this.nodeID;
|
|
45
11
|
}
|
|
46
|
-
|
|
47
|
-
traverse(
|
|
48
|
-
fn: (node: Node, parents: Node[]) => void,
|
|
49
|
-
parents?: Node[]
|
|
50
|
-
): void {
|
|
12
|
+
traverse(fn, parents) {
|
|
51
13
|
const path = parents === undefined ? [this] : [...parents, this];
|
|
52
14
|
this.traverseChildren(fn, path);
|
|
53
15
|
fn.call(undefined, this, path);
|
|
54
16
|
}
|
|
55
|
-
|
|
56
17
|
// Traverses each of the children of this node.
|
|
57
|
-
traverseChildren(
|
|
58
|
-
fn: (node: Node, parents: Node[]) => void,
|
|
59
|
-
parents: Node[]
|
|
60
|
-
): void {
|
|
18
|
+
traverseChildren(fn, parents) {
|
|
61
19
|
const children = this.getChildren();
|
|
62
20
|
children.forEach((child) => child.traverse(fn, parents));
|
|
63
21
|
}
|
|
64
|
-
|
|
65
22
|
// Depth first sequence of all nodes in this tree.
|
|
66
|
-
getNodes()
|
|
67
|
-
const nodes
|
|
23
|
+
getNodes() {
|
|
24
|
+
const nodes = [];
|
|
68
25
|
this.traverse((node) => nodes.push(node));
|
|
69
26
|
return nodes;
|
|
70
27
|
}
|
|
71
|
-
|
|
72
|
-
getNodeBefore<Kind extends Node>(
|
|
73
|
-
node: Node,
|
|
74
|
-
matcher: (node: Kind) => boolean
|
|
75
|
-
): Kind | undefined {
|
|
28
|
+
getNodeBefore(node, matcher) {
|
|
76
29
|
const nodes = this.getNodes();
|
|
77
|
-
let previous
|
|
30
|
+
let previous = undefined;
|
|
78
31
|
for (const currentNode of nodes) {
|
|
79
|
-
if (currentNode === node)
|
|
80
|
-
|
|
32
|
+
if (currentNode === node)
|
|
33
|
+
return previous;
|
|
34
|
+
if (matcher(currentNode))
|
|
35
|
+
previous = currentNode;
|
|
81
36
|
}
|
|
82
37
|
return undefined;
|
|
83
38
|
}
|
|
84
|
-
|
|
85
|
-
getNodeAfter<Kind extends Node>(
|
|
86
|
-
node: Node,
|
|
87
|
-
matcher: (node: Kind) => boolean
|
|
88
|
-
): Kind | undefined {
|
|
39
|
+
getNodeAfter(node, matcher) {
|
|
89
40
|
const nodes = this.getNodes();
|
|
90
|
-
let found
|
|
41
|
+
let found = false;
|
|
91
42
|
for (const currentNode of nodes) {
|
|
92
|
-
if (found && matcher(currentNode
|
|
93
|
-
return currentNode
|
|
94
|
-
if (currentNode === node)
|
|
43
|
+
if (found && matcher(currentNode))
|
|
44
|
+
return currentNode;
|
|
45
|
+
if (currentNode === node)
|
|
46
|
+
found = true;
|
|
95
47
|
}
|
|
96
48
|
return undefined;
|
|
97
49
|
}
|
|
98
|
-
|
|
99
50
|
// Swap them order if this is two text nodes that are reversed.
|
|
100
|
-
sortRange(range
|
|
51
|
+
sortRange(range) {
|
|
101
52
|
const start = range.start.node;
|
|
102
53
|
const end = range.end.node;
|
|
103
|
-
|
|
104
54
|
if (start === end)
|
|
105
55
|
return {
|
|
106
56
|
start: {
|
|
@@ -112,128 +62,108 @@ export default abstract class Node {
|
|
|
112
62
|
index: Math.max(range.start.index, range.end.index),
|
|
113
63
|
},
|
|
114
64
|
};
|
|
115
|
-
|
|
116
65
|
// Find the common ancestor of the two nodes.
|
|
117
66
|
const ancestor = start.getCommonAncestor(this, end);
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
67
|
+
if (ancestor === undefined)
|
|
68
|
+
return range;
|
|
121
69
|
// Where do these text nodes appear in the ancestor's node sequence?
|
|
122
70
|
let startIndex = ancestor.getNodes().indexOf(start);
|
|
123
71
|
let endIndex = ancestor.getNodes().indexOf(end);
|
|
124
|
-
|
|
125
72
|
// Defensively verify that we could find the given nodes in the document.
|
|
126
73
|
// If we can't, something is wrong upstream.
|
|
127
74
|
if (startIndex < 0 || endIndex < 0)
|
|
128
75
|
throw Error(`Couldn't find caret range node(s) in this tree.`);
|
|
129
|
-
|
|
130
76
|
// If we didn't find them, or the start is before the end, return the given range.
|
|
131
77
|
return startIndex === undefined ||
|
|
132
78
|
endIndex === undefined ||
|
|
133
79
|
startIndex < endIndex
|
|
134
80
|
? range
|
|
135
81
|
: // If they're the same node, order the index.
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
getNode(id: number) {
|
|
82
|
+
startIndex === endIndex
|
|
83
|
+
? {
|
|
84
|
+
start: {
|
|
85
|
+
node: range.start.node,
|
|
86
|
+
index: Math.min(range.start.index, range.end.index),
|
|
87
|
+
},
|
|
88
|
+
end: {
|
|
89
|
+
node: range.end.node,
|
|
90
|
+
index: Math.max(range.start.index, range.end.index),
|
|
91
|
+
},
|
|
92
|
+
}
|
|
93
|
+
: // Otherwise, swap the caret positions
|
|
94
|
+
{ start: range.end, end: range.start };
|
|
95
|
+
}
|
|
96
|
+
getNode(id) {
|
|
152
97
|
return this.getNodes().find((n) => n.getID() === id);
|
|
153
98
|
}
|
|
154
|
-
|
|
155
99
|
// An index of the given node in the depth-first traversal of the nodes.
|
|
156
|
-
getIndexOf(node
|
|
100
|
+
getIndexOf(node) {
|
|
157
101
|
const index = this.getNodes().indexOf(node);
|
|
158
102
|
return index >= 0 ? index : undefined;
|
|
159
103
|
}
|
|
160
|
-
|
|
161
104
|
// True if this tree contains the given node.
|
|
162
|
-
contains(node
|
|
105
|
+
contains(node) {
|
|
163
106
|
let found = false;
|
|
164
107
|
this.traverse((n) => {
|
|
165
|
-
if (n === node)
|
|
108
|
+
if (n === node)
|
|
109
|
+
found = true;
|
|
166
110
|
});
|
|
167
111
|
return found;
|
|
168
112
|
}
|
|
169
|
-
|
|
170
113
|
// Returns a list of the given node's parents in this tree, from root to direct parent.
|
|
171
|
-
getParentsOf(node
|
|
114
|
+
getParentsOf(node) {
|
|
172
115
|
let parents = undefined;
|
|
173
116
|
this.traverse((n, p) => {
|
|
174
|
-
if (n === node)
|
|
117
|
+
if (n === node)
|
|
118
|
+
parents = p;
|
|
175
119
|
});
|
|
176
|
-
if (parents === undefined)
|
|
120
|
+
if (parents === undefined)
|
|
121
|
+
return;
|
|
177
122
|
const withoutNode = [...parents];
|
|
178
123
|
withoutNode.pop();
|
|
179
124
|
return withoutNode;
|
|
180
125
|
}
|
|
181
|
-
|
|
182
|
-
getParent(root: Node): Node | undefined {
|
|
126
|
+
getParent(root) {
|
|
183
127
|
return root.getParentOf(this);
|
|
184
128
|
}
|
|
185
|
-
|
|
186
|
-
hasAncestor(root: Node, node: Node): boolean {
|
|
129
|
+
hasAncestor(root, node) {
|
|
187
130
|
let parent = root.getParentOf(this);
|
|
188
131
|
while (parent) {
|
|
189
|
-
if (parent === node)
|
|
132
|
+
if (parent === node)
|
|
133
|
+
return true;
|
|
190
134
|
parent = root.getParentOf(parent);
|
|
191
135
|
}
|
|
192
136
|
return false;
|
|
193
137
|
}
|
|
194
|
-
|
|
195
|
-
getClosestParentOfType<T extends Node>(
|
|
196
|
-
root: Node,
|
|
197
|
-
type: Function
|
|
198
|
-
): T | undefined {
|
|
138
|
+
getClosestParentOfType(root, type) {
|
|
199
139
|
let parent = root.getParentOf(this);
|
|
200
140
|
while (parent) {
|
|
201
|
-
if (parent instanceof type)
|
|
141
|
+
if (parent instanceof type)
|
|
142
|
+
return parent;
|
|
202
143
|
parent = root.getParentOf(parent);
|
|
203
144
|
}
|
|
204
145
|
return undefined;
|
|
205
146
|
}
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
this.getClosestParentMatching(root, (p) => p instanceof type) !==
|
|
210
|
-
undefined
|
|
211
|
-
);
|
|
147
|
+
isInside(root, type) {
|
|
148
|
+
return (this.getClosestParentMatching(root, (p) => p instanceof type) !==
|
|
149
|
+
undefined);
|
|
212
150
|
}
|
|
213
|
-
|
|
214
|
-
getClosestParentMatching(
|
|
215
|
-
root: Node,
|
|
216
|
-
match: (node: Node) => boolean
|
|
217
|
-
): Node | undefined {
|
|
151
|
+
getClosestParentMatching(root, match) {
|
|
218
152
|
let parent = root.getParentOf(this);
|
|
219
153
|
while (parent) {
|
|
220
|
-
if (match.call(undefined, parent))
|
|
154
|
+
if (match.call(undefined, parent))
|
|
155
|
+
return parent;
|
|
221
156
|
parent = root.getParentOf(parent);
|
|
222
157
|
}
|
|
223
158
|
return undefined;
|
|
224
159
|
}
|
|
225
|
-
|
|
226
|
-
getFarthestParentMatching(
|
|
227
|
-
root: Node,
|
|
228
|
-
match: (node: Node) => boolean
|
|
229
|
-
): Node | undefined {
|
|
160
|
+
getFarthestParentMatching(root, match) {
|
|
230
161
|
const matchingParents = this.getAncestors(root).filter(match);
|
|
231
162
|
return matchingParents.length > 0
|
|
232
163
|
? matchingParents[matchingParents.length - 1]
|
|
233
164
|
: undefined;
|
|
234
165
|
}
|
|
235
|
-
|
|
236
|
-
getAncestors(root: Node) {
|
|
166
|
+
getAncestors(root) {
|
|
237
167
|
const ancestors = [];
|
|
238
168
|
let parent = root.getParentOf(this);
|
|
239
169
|
while (parent) {
|
|
@@ -242,27 +172,22 @@ export default abstract class Node {
|
|
|
242
172
|
}
|
|
243
173
|
return ancestors;
|
|
244
174
|
}
|
|
245
|
-
|
|
246
|
-
getCommonAncestor(root: Node, node: Node): Node | undefined {
|
|
175
|
+
getCommonAncestor(root, node) {
|
|
247
176
|
const thisParents = this.getAncestors(root);
|
|
248
177
|
const thatParents = node.getAncestors(root);
|
|
249
|
-
|
|
250
178
|
for (let i = 0; i < thisParents.length; i++) {
|
|
251
179
|
for (let j = 0; j < thatParents.length; j++) {
|
|
252
|
-
if (thisParents[i] === thatParents[j])
|
|
180
|
+
if (thisParents[i] === thatParents[j])
|
|
181
|
+
return thisParents[i];
|
|
253
182
|
}
|
|
254
183
|
}
|
|
255
184
|
return undefined;
|
|
256
185
|
}
|
|
257
|
-
|
|
258
186
|
// Traverse this node's children, trying to replace the given node with the replacement node (or nothing, if allowed)
|
|
259
|
-
withNodeReplaced(
|
|
260
|
-
node: Node,
|
|
261
|
-
replacement: Node | undefined
|
|
262
|
-
): this | undefined {
|
|
187
|
+
withNodeReplaced(node, replacement) {
|
|
263
188
|
// Is this the node we're replacing? Return the replacement.
|
|
264
|
-
if (node === this)
|
|
265
|
-
|
|
189
|
+
if (node === this)
|
|
190
|
+
return replacement;
|
|
266
191
|
// Find all the children
|
|
267
192
|
const children = this.getChildren();
|
|
268
193
|
// Search each one for a match.
|
|
@@ -271,34 +196,25 @@ export default abstract class Node {
|
|
|
271
196
|
// If we found the child, return a new version of this node with the child replaced.
|
|
272
197
|
if (child === node)
|
|
273
198
|
return this.withChildReplaced(node, replacement);
|
|
274
|
-
|
|
275
199
|
// Does this child have it? If so, return a version of this node with the revised child.
|
|
276
200
|
const revisedChild = child.withNodeReplaced(node, replacement);
|
|
277
201
|
if (revisedChild !== undefined)
|
|
278
202
|
return this.withChildReplaced(child, revisedChild);
|
|
279
203
|
}
|
|
280
204
|
}
|
|
281
|
-
|
|
282
|
-
// Given a range, return either a full copy of the node, or a partial copy if it contains the range.
|
|
283
|
-
// If there's a problem, it returns undefined. Assumes the range is sorted in parse order.
|
|
284
|
-
abstract withContentInRange(range: CaretRange): this | undefined;
|
|
285
|
-
|
|
286
205
|
// By default, a node doesn't know how to insert anything into itself. Subclasses
|
|
287
206
|
// are responsible for overriding this if they want to support specific insertions.
|
|
288
|
-
withNodeInserted(caret
|
|
207
|
+
withNodeInserted(caret, node) {
|
|
289
208
|
caret;
|
|
290
209
|
node;
|
|
291
210
|
return undefined;
|
|
292
211
|
}
|
|
293
|
-
|
|
294
|
-
copyRange(range: CaretRange): Node | undefined {
|
|
212
|
+
copyRange(range) {
|
|
295
213
|
const sortedRange = this.sortRange(range);
|
|
296
214
|
// Find the common ancestor of the range, then ask it to copy the portion of it selected and produce a node.
|
|
297
|
-
const commonAncestor = sortedRange.start.node.getCommonAncestor(
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
);
|
|
301
|
-
if (commonAncestor === undefined) return;
|
|
215
|
+
const commonAncestor = sortedRange.start.node.getCommonAncestor(this, sortedRange.end.node);
|
|
216
|
+
if (commonAncestor === undefined)
|
|
217
|
+
return;
|
|
302
218
|
return commonAncestor.withContentInRange(sortedRange);
|
|
303
219
|
}
|
|
304
220
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
File without changes
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type Node from './Node';
|
|
2
|
+
import BlockNode from './BlockNode';
|
|
3
|
+
import FormatNode from './FormatNode';
|
|
4
|
+
import TextNode from './TextNode';
|
|
5
|
+
import type Caret from './Caret';
|
|
6
|
+
import type { CaretRange } from './Caret';
|
|
7
|
+
export default class ParagraphNode extends BlockNode {
|
|
8
|
+
#private;
|
|
9
|
+
constructor(level?: number, format?: FormatNode);
|
|
10
|
+
getType(): string;
|
|
11
|
+
getLevel(): number;
|
|
12
|
+
getFormat(): FormatNode;
|
|
13
|
+
getFormats(): FormatNode[];
|
|
14
|
+
getChildren(): FormatNode[];
|
|
15
|
+
getFirstTextNode(): TextNode;
|
|
16
|
+
getLastTextNode(): TextNode;
|
|
17
|
+
getTextNodes(): TextNode[];
|
|
18
|
+
getFirstCaret(): Caret | undefined;
|
|
19
|
+
getLastCaret(): Caret | undefined;
|
|
20
|
+
getSelection(): CaretRange;
|
|
21
|
+
getParentOf(node: Node): Node | undefined;
|
|
22
|
+
toText(): string;
|
|
23
|
+
toBookdown(): string;
|
|
24
|
+
toHTML(): string;
|
|
25
|
+
withLevel(level: number): ParagraphNode;
|
|
26
|
+
withContent(content: FormatNode): ParagraphNode;
|
|
27
|
+
withParagraphAppended(paragraph: ParagraphNode): ParagraphNode;
|
|
28
|
+
withParagraphPrepended(paragraph: ParagraphNode): ParagraphNode;
|
|
29
|
+
split(caret: Caret): [ParagraphNode, ParagraphNode] | undefined;
|
|
30
|
+
copy(): this;
|
|
31
|
+
withChildReplaced(node: Node, replacement: Node | undefined): this | undefined;
|
|
32
|
+
withContentInRange(range: CaretRange): this | undefined;
|
|
33
|
+
}
|