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
|
@@ -1,41 +1,28 @@
|
|
|
1
|
-
import type Node from './Node';
|
|
2
1
|
import FormatNode from './FormatNode';
|
|
3
|
-
import
|
|
4
|
-
import type Caret from './Caret';
|
|
5
|
-
import { caretToIndex, indexToCaret, type CaretRange } from './Caret';
|
|
2
|
+
import { caretToIndex, indexToCaret } from './Caret';
|
|
6
3
|
import BlockNode from './BlockNode';
|
|
7
|
-
import type Edit from './Edit';
|
|
8
|
-
|
|
9
|
-
export type ListNodeType = FormatNode | ListNode;
|
|
10
|
-
|
|
11
4
|
export default class ListNode extends BlockNode {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
constructor(items: Array<FormatNode | ListNode>, numbered: boolean) {
|
|
5
|
+
#numbered;
|
|
6
|
+
#items;
|
|
7
|
+
constructor(items, numbered) {
|
|
16
8
|
super();
|
|
17
9
|
this.#numbered = numbered;
|
|
18
|
-
|
|
19
10
|
let adjustedItems = items
|
|
20
11
|
// Make sure all format nodes have an empty text.
|
|
21
12
|
.map((i) => (i instanceof FormatNode ? i.withTextIfEmpty() : i))
|
|
22
13
|
// Strip all empty sublists.
|
|
23
14
|
.filter((i) => !i.isEmpty());
|
|
24
|
-
|
|
25
15
|
this.#items = adjustedItems;
|
|
26
16
|
}
|
|
27
|
-
|
|
28
17
|
getType() {
|
|
29
18
|
return 'list';
|
|
30
19
|
}
|
|
31
20
|
isNumbered() {
|
|
32
21
|
return this.#numbered;
|
|
33
22
|
}
|
|
34
|
-
isEmpty()
|
|
35
|
-
return (
|
|
36
|
-
this.#items.
|
|
37
|
-
this.#items.every((i) => i instanceof ListNode && i.isEmpty())
|
|
38
|
-
);
|
|
23
|
+
isEmpty() {
|
|
24
|
+
return (this.#items.length === 0 ||
|
|
25
|
+
this.#items.every((i) => i instanceof ListNode && i.isEmpty()));
|
|
39
26
|
}
|
|
40
27
|
getItems() {
|
|
41
28
|
return this.#items;
|
|
@@ -44,278 +31,240 @@ export default class ListNode extends BlockNode {
|
|
|
44
31
|
return this.#items;
|
|
45
32
|
}
|
|
46
33
|
getListItems() {
|
|
47
|
-
return this.#items.filter((i) => i instanceof ListNode)
|
|
34
|
+
return this.#items.filter((i) => i instanceof ListNode);
|
|
48
35
|
}
|
|
49
36
|
getLength() {
|
|
50
37
|
return this.#items.length;
|
|
51
38
|
}
|
|
52
|
-
getLastItem()
|
|
39
|
+
getLastItem() {
|
|
53
40
|
return this.getFirstLastItem(false);
|
|
54
41
|
}
|
|
55
|
-
getFirstItem()
|
|
42
|
+
getFirstItem() {
|
|
56
43
|
return this.getFirstLastItem(true);
|
|
57
44
|
}
|
|
58
|
-
getFormats()
|
|
59
|
-
return this.#items.reduce(
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
[]
|
|
67
|
-
) as FormatNode[];
|
|
68
|
-
}
|
|
69
|
-
getFirstLastItem(first: boolean): FormatNode | undefined {
|
|
70
|
-
if (this.#items.length === 0) return undefined;
|
|
71
|
-
|
|
45
|
+
getFormats() {
|
|
46
|
+
return this.#items.reduce((previous, current) => previous.concat(current instanceof FormatNode
|
|
47
|
+
? [current]
|
|
48
|
+
: current.getFormats()), []);
|
|
49
|
+
}
|
|
50
|
+
getFirstLastItem(first) {
|
|
51
|
+
if (this.#items.length === 0)
|
|
52
|
+
return undefined;
|
|
72
53
|
// If it's a format, return it.
|
|
73
54
|
const last = this.#items[first ? 0 : this.getLength() - 1];
|
|
74
|
-
if (last instanceof FormatNode)
|
|
75
|
-
|
|
55
|
+
if (last instanceof FormatNode)
|
|
56
|
+
return last;
|
|
76
57
|
// Otherwise, recurse into the last item's list.
|
|
77
58
|
return last.getFirstLastItem(first);
|
|
78
59
|
}
|
|
79
|
-
|
|
80
|
-
getLevel(root: Node): number {
|
|
60
|
+
getLevel(root) {
|
|
81
61
|
const parent = root.getParentOf(this);
|
|
82
|
-
if (parent instanceof ListNode)
|
|
83
|
-
|
|
62
|
+
if (parent instanceof ListNode)
|
|
63
|
+
return parent.getLevel(root) + 1;
|
|
64
|
+
else
|
|
65
|
+
return 1;
|
|
84
66
|
}
|
|
85
|
-
|
|
86
|
-
toText(): string {
|
|
67
|
+
toText() {
|
|
87
68
|
return this.#items.map((item) => item.toText()).join(' ');
|
|
88
69
|
}
|
|
89
|
-
|
|
90
|
-
toBookdown(level: number = 1): string {
|
|
70
|
+
toBookdown(level = 1) {
|
|
91
71
|
return this.isNumbered()
|
|
92
72
|
? this.#items
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
item.toBookdown(level + 1)
|
|
99
|
-
)
|
|
100
|
-
.join('\n')
|
|
73
|
+
.map((item, number) => (item instanceof ListNode
|
|
74
|
+
? ''
|
|
75
|
+
: number + 1 + '.'.repeat(level) + ' ') +
|
|
76
|
+
item.toBookdown(level + 1))
|
|
77
|
+
.join('\n')
|
|
101
78
|
: this.#items
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
.join('\n');
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
toHTML(): string {
|
|
79
|
+
.map((item) => (item instanceof ListNode
|
|
80
|
+
? ''
|
|
81
|
+
: '*'.repeat(level) + ' ') +
|
|
82
|
+
item.toBookdown(level + 1))
|
|
83
|
+
.join('\n');
|
|
84
|
+
}
|
|
85
|
+
toHTML() {
|
|
113
86
|
return this.isNumbered()
|
|
114
87
|
? `<ol>${this.#items
|
|
115
|
-
|
|
116
|
-
|
|
88
|
+
.map((i) => `<li>${i.toHTML()}</li>`)
|
|
89
|
+
.join('')}</ol>`
|
|
117
90
|
: `<ul>${this.#items
|
|
118
|
-
|
|
119
|
-
|
|
91
|
+
.map((i) => `<li>${i.toHTML()}</li>`)
|
|
92
|
+
.join('')}</ul>`;
|
|
120
93
|
}
|
|
121
|
-
|
|
122
|
-
getParentOf(node: Node): Node | undefined {
|
|
94
|
+
getParentOf(node) {
|
|
123
95
|
return this.#items
|
|
124
96
|
.map((b) => (b === node ? this : b.getParentOf(node)))
|
|
125
97
|
.find((b) => b !== undefined);
|
|
126
98
|
}
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
root,
|
|
131
|
-
(n) => n instanceof FormatNode
|
|
132
|
-
) as FormatNode;
|
|
133
|
-
|
|
134
|
-
return (
|
|
135
|
-
format !== undefined &&
|
|
99
|
+
atBeginningOfItem(root, caret) {
|
|
100
|
+
const format = caret.node.getFarthestParentMatching(root, (n) => n instanceof FormatNode);
|
|
101
|
+
return (format !== undefined &&
|
|
136
102
|
caret.node.hasAncestor(root, this) &&
|
|
137
103
|
caret.index === 0 &&
|
|
138
|
-
format.getTextNodes()[0] === caret.node
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
(n) => n.getParentOf(caret.node) !== undefined
|
|
145
|
-
);
|
|
146
|
-
if (match === undefined) return undefined;
|
|
104
|
+
format.getTextNodes()[0] === caret.node);
|
|
105
|
+
}
|
|
106
|
+
getItemContaining(caret) {
|
|
107
|
+
const match = this.#items.find((n) => n.getParentOf(caret.node) !== undefined);
|
|
108
|
+
if (match === undefined)
|
|
109
|
+
return undefined;
|
|
147
110
|
const index = this.#items.indexOf(match);
|
|
148
|
-
if (index === undefined)
|
|
111
|
+
if (index === undefined)
|
|
112
|
+
return undefined;
|
|
149
113
|
return index;
|
|
150
114
|
}
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
115
|
+
getItem(index) {
|
|
116
|
+
if (index < 0 || index >= this.#items.length)
|
|
117
|
+
return;
|
|
154
118
|
return this.#items[index];
|
|
155
119
|
}
|
|
156
|
-
|
|
157
|
-
getFirstCaret(): Caret | undefined {
|
|
120
|
+
getFirstCaret() {
|
|
158
121
|
return this.#items.length === 0
|
|
159
122
|
? undefined
|
|
160
123
|
: this.#items[0].getFirstCaret();
|
|
161
124
|
}
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
return new ListNode(
|
|
165
|
-
this.#items.map((i) => i.copy()),
|
|
166
|
-
this.#numbered
|
|
167
|
-
) as this;
|
|
125
|
+
copy() {
|
|
126
|
+
return new ListNode(this.#items.map((i) => i.copy()), this.#numbered);
|
|
168
127
|
}
|
|
169
|
-
|
|
170
|
-
withStyle(numbered: boolean) {
|
|
128
|
+
withStyle(numbered) {
|
|
171
129
|
return new ListNode(this.#items, numbered);
|
|
172
130
|
}
|
|
173
|
-
|
|
174
|
-
withItemAppended(item: ListNodeType): ListNode {
|
|
131
|
+
withItemAppended(item) {
|
|
175
132
|
return new ListNode([...this.#items, item], this.#numbered);
|
|
176
133
|
}
|
|
177
|
-
|
|
178
|
-
withItemPrepended(item: ListNodeType): ListNode {
|
|
134
|
+
withItemPrepended(item) {
|
|
179
135
|
return new ListNode([item, ...this.#items], this.#numbered);
|
|
180
136
|
}
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
137
|
+
withItemAt(item, index) {
|
|
138
|
+
if (index < 0 || index > this.#items.length)
|
|
139
|
+
return;
|
|
184
140
|
const newItems = this.#items.slice();
|
|
185
141
|
newItems.splice(index, 0, item);
|
|
186
142
|
return new ListNode(newItems, this.#numbered);
|
|
187
143
|
}
|
|
188
|
-
|
|
189
|
-
withItemAfter(
|
|
190
|
-
item: ListNodeType,
|
|
191
|
-
anchor: ListNodeType
|
|
192
|
-
): ListNode | undefined {
|
|
144
|
+
withItemAfter(item, anchor) {
|
|
193
145
|
const index = this.#items.indexOf(anchor);
|
|
194
|
-
if (index < 0)
|
|
146
|
+
if (index < 0)
|
|
147
|
+
return;
|
|
195
148
|
return this.withItemAt(item, index + 1);
|
|
196
149
|
}
|
|
197
|
-
|
|
198
|
-
withItemBefore(item: ListNodeType, anchor: ListNodeType) {
|
|
150
|
+
withItemBefore(item, anchor) {
|
|
199
151
|
const index = this.#items.indexOf(anchor);
|
|
200
|
-
if (index < 0)
|
|
152
|
+
if (index < 0)
|
|
153
|
+
return;
|
|
201
154
|
return this.withItemAt(item, index);
|
|
202
155
|
}
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
156
|
+
withItemReplaced(index, item) {
|
|
157
|
+
if (index < 0 || index >= this.#items.length)
|
|
158
|
+
return;
|
|
206
159
|
const newItems = this.#items.slice();
|
|
207
160
|
newItems[index] = item;
|
|
208
161
|
return new ListNode(newItems, this.#numbered);
|
|
209
162
|
}
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
163
|
+
withoutItemAt(index) {
|
|
164
|
+
if (index < 0 || index >= this.#items.length)
|
|
165
|
+
return;
|
|
213
166
|
const newItems = this.#items.slice();
|
|
214
167
|
newItems.splice(index, 1);
|
|
215
168
|
return new ListNode(newItems, this.#numbered);
|
|
216
169
|
}
|
|
217
|
-
|
|
218
|
-
withoutItem(item: FormatNode): ListNode | undefined {
|
|
170
|
+
withoutItem(item) {
|
|
219
171
|
const index = this.#items.indexOf(item);
|
|
220
|
-
if (index < 0)
|
|
172
|
+
if (index < 0)
|
|
173
|
+
return;
|
|
221
174
|
return this.withoutItemAt(index);
|
|
222
175
|
}
|
|
223
|
-
|
|
224
|
-
withListAppended(list: ListNode): ListNode {
|
|
176
|
+
withListAppended(list) {
|
|
225
177
|
return new ListNode([...this.#items, ...list.#items], this.#numbered);
|
|
226
178
|
}
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
179
|
+
withItemMergedBackwards(index) {
|
|
180
|
+
if (index <= 0 || index >= this.#items.length)
|
|
181
|
+
return;
|
|
231
182
|
const deletedItem = this.#items[index];
|
|
232
183
|
let previousItem = this.#items[index - 1];
|
|
233
|
-
|
|
234
184
|
// If we're merging a sublist back into this list, move its
|
|
235
185
|
// remaining format into the previous item.
|
|
236
186
|
if (deletedItem instanceof ListNode) {
|
|
237
|
-
if (previousItem instanceof ListNode)
|
|
187
|
+
if (previousItem instanceof ListNode)
|
|
188
|
+
return;
|
|
238
189
|
const itemToMerge = deletedItem.getFirstItem();
|
|
239
|
-
if (itemToMerge === undefined)
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
newSubList
|
|
248
|
-
);
|
|
249
|
-
if (listWithRevisedSublist === undefined) return;
|
|
190
|
+
if (itemToMerge === undefined)
|
|
191
|
+
return;
|
|
192
|
+
const newSubList = deletedItem.withChildReplaced(itemToMerge, undefined);
|
|
193
|
+
if (newSubList === undefined)
|
|
194
|
+
return;
|
|
195
|
+
const listWithRevisedSublist = this.withChildReplaced(deletedItem, newSubList);
|
|
196
|
+
if (listWithRevisedSublist === undefined)
|
|
197
|
+
return;
|
|
250
198
|
const lastCaret = previousItem.getLastCaret();
|
|
251
|
-
if (lastCaret === undefined)
|
|
199
|
+
if (lastCaret === undefined)
|
|
200
|
+
return;
|
|
252
201
|
const textIndex = caretToIndex(previousItem, lastCaret);
|
|
253
|
-
if (textIndex === undefined)
|
|
202
|
+
if (textIndex === undefined)
|
|
203
|
+
return;
|
|
254
204
|
const mergedItem = previousItem.withSegmentsAppended(itemToMerge);
|
|
255
|
-
const listWithMergedItem = listWithRevisedSublist.withChildReplaced(
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
);
|
|
259
|
-
if (listWithMergedItem === undefined) return;
|
|
205
|
+
const listWithMergedItem = listWithRevisedSublist.withChildReplaced(previousItem, mergedItem);
|
|
206
|
+
if (listWithMergedItem === undefined)
|
|
207
|
+
return;
|
|
260
208
|
const newCaret = indexToCaret(mergedItem, textIndex);
|
|
261
|
-
if (newCaret === undefined)
|
|
209
|
+
if (newCaret === undefined)
|
|
210
|
+
return;
|
|
262
211
|
return [listWithMergedItem, newCaret];
|
|
263
212
|
}
|
|
264
213
|
// If the previous item is a list, find it's last item.
|
|
265
214
|
else if (previousItem instanceof ListNode) {
|
|
266
215
|
const lastItem = previousItem.getLastItem();
|
|
267
|
-
if (lastItem === undefined)
|
|
216
|
+
if (lastItem === undefined)
|
|
217
|
+
return;
|
|
268
218
|
const lastCaret = lastItem.getLastCaret();
|
|
269
|
-
if (lastCaret === undefined)
|
|
219
|
+
if (lastCaret === undefined)
|
|
220
|
+
return;
|
|
270
221
|
const newCaretIndex = caretToIndex(lastItem, lastCaret);
|
|
271
|
-
if (newCaretIndex === undefined)
|
|
222
|
+
if (newCaretIndex === undefined)
|
|
223
|
+
return;
|
|
272
224
|
const mergedItem = lastItem.withSegmentsAppended(deletedItem);
|
|
273
|
-
const newSublist = previousItem.withChildReplaced(
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
);
|
|
277
|
-
if (
|
|
278
|
-
|
|
279
|
-
previousItem,
|
|
280
|
-
newSublist
|
|
281
|
-
)?.withoutItemAt(index);
|
|
282
|
-
if (newList === undefined) return;
|
|
225
|
+
const newSublist = previousItem.withChildReplaced(lastItem, mergedItem);
|
|
226
|
+
if (newSublist === undefined)
|
|
227
|
+
return;
|
|
228
|
+
const newList = this.withChildReplaced(previousItem, newSublist)?.withoutItemAt(index);
|
|
229
|
+
if (newList === undefined)
|
|
230
|
+
return;
|
|
283
231
|
const newCaret = indexToCaret(mergedItem, newCaretIndex);
|
|
284
|
-
if (newCaret === undefined)
|
|
232
|
+
if (newCaret === undefined)
|
|
233
|
+
return;
|
|
285
234
|
return [newList, newCaret];
|
|
286
|
-
}
|
|
235
|
+
}
|
|
236
|
+
else {
|
|
287
237
|
const lastCaret = previousItem.getLastCaret();
|
|
288
|
-
if (lastCaret === undefined)
|
|
238
|
+
if (lastCaret === undefined)
|
|
239
|
+
return;
|
|
289
240
|
const newCaretIndex = caretToIndex(previousItem, lastCaret);
|
|
290
|
-
if (newCaretIndex === undefined)
|
|
241
|
+
if (newCaretIndex === undefined)
|
|
242
|
+
return;
|
|
291
243
|
const mergedItem = previousItem.withSegmentsAppended(deletedItem);
|
|
292
|
-
const newList = this.withItemReplaced(
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
)?.withoutItemAt(index);
|
|
296
|
-
if (newList === undefined) return;
|
|
244
|
+
const newList = this.withItemReplaced(index - 1, mergedItem)?.withoutItemAt(index);
|
|
245
|
+
if (newList === undefined)
|
|
246
|
+
return;
|
|
297
247
|
const newCaret = indexToCaret(mergedItem, newCaretIndex);
|
|
298
|
-
if (newCaret === undefined)
|
|
248
|
+
if (newCaret === undefined)
|
|
249
|
+
return;
|
|
299
250
|
return [newList, newCaret];
|
|
300
251
|
}
|
|
301
252
|
}
|
|
302
|
-
|
|
303
|
-
withItemSplit(caret: Caret): ListNode | undefined {
|
|
253
|
+
withItemSplit(caret) {
|
|
304
254
|
// Which item contains the caret?
|
|
305
|
-
const item = this.#items.find(
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
if (item === undefined) return;
|
|
255
|
+
const item = this.#items.find((i) => i instanceof FormatNode && i.contains(caret.node));
|
|
256
|
+
if (item === undefined)
|
|
257
|
+
return;
|
|
309
258
|
const parts = item.split(caret);
|
|
310
|
-
if (parts === undefined)
|
|
259
|
+
if (parts === undefined)
|
|
260
|
+
return;
|
|
311
261
|
const [first, second] = parts;
|
|
312
262
|
return this.withItemAfter(second, item)
|
|
313
263
|
?.withItemAfter(first, item)
|
|
314
264
|
?.withoutItem(item);
|
|
315
265
|
}
|
|
316
|
-
|
|
317
266
|
// Recursively search for the given item and indent it, constructing a new list.
|
|
318
|
-
withItemIndented(format
|
|
267
|
+
withItemIndented(format) {
|
|
319
268
|
// Check each item in the list to see if it matches...
|
|
320
269
|
for (let index = 0; index < this.#items.length; index++) {
|
|
321
270
|
const item = this.#items[index];
|
|
@@ -325,22 +274,13 @@ export default class ListNode extends BlockNode {
|
|
|
325
274
|
const afterList = this.#items[index + 1];
|
|
326
275
|
// If the format is just after a list, move the format to the end of the list.
|
|
327
276
|
if (beforeList instanceof ListNode)
|
|
328
|
-
return this.withItemReplaced(
|
|
329
|
-
index - 1,
|
|
330
|
-
beforeList.withItemAppended(format)
|
|
331
|
-
)?.withoutItemAt(index);
|
|
277
|
+
return this.withItemReplaced(index - 1, beforeList.withItemAppended(format))?.withoutItemAt(index);
|
|
332
278
|
// If the format is just before a list, move the format to the beginning of the list.
|
|
333
279
|
else if (afterList instanceof ListNode)
|
|
334
|
-
return this.withItemReplaced(
|
|
335
|
-
index + 1,
|
|
336
|
-
afterList.withItemPrepended(format)
|
|
337
|
-
)?.withoutItemAt(index);
|
|
280
|
+
return this.withItemReplaced(index + 1, afterList.withItemPrepended(format))?.withoutItemAt(index);
|
|
338
281
|
// Otherwise, make a new sub list node, add the format to it.
|
|
339
282
|
else
|
|
340
|
-
return this.withItemReplaced(
|
|
341
|
-
index,
|
|
342
|
-
new ListNode([format], this.#numbered)
|
|
343
|
-
);
|
|
283
|
+
return this.withItemReplaced(index, new ListNode([format], this.#numbered));
|
|
344
284
|
}
|
|
345
285
|
// If this is a sublist, see if it contains the item, and if so,
|
|
346
286
|
// replace this list with list that has the item indented.
|
|
@@ -352,9 +292,8 @@ export default class ListNode extends BlockNode {
|
|
|
352
292
|
}
|
|
353
293
|
// Otherwise, return nothing.
|
|
354
294
|
}
|
|
355
|
-
|
|
356
295
|
// Recursively search for the item and unindent it, constructing a new list.
|
|
357
|
-
withItemUnindented(format
|
|
296
|
+
withItemUnindented(format) {
|
|
358
297
|
// Check each sublist in the list to see if any has the item so we can unindent it into this.
|
|
359
298
|
for (let index = 0; index < this.#items.length; index++) {
|
|
360
299
|
const list = this.#items[index];
|
|
@@ -362,18 +301,14 @@ export default class ListNode extends BlockNode {
|
|
|
362
301
|
const match = list.#items.indexOf(format);
|
|
363
302
|
// If we found it in this sublist, extract it here!
|
|
364
303
|
if (match >= 0) {
|
|
365
|
-
const before = new ListNode(
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
)
|
|
369
|
-
|
|
370
|
-
list.#items.slice(match + 1),
|
|
371
|
-
this.#numbered
|
|
372
|
-
);
|
|
373
|
-
let newItems: ListNodeType[] = this.#items.slice(0, index);
|
|
374
|
-
if (before.getLength() > 0) newItems.push(before);
|
|
304
|
+
const before = new ListNode(list.#items.slice(0, match), this.#numbered);
|
|
305
|
+
const after = new ListNode(list.#items.slice(match + 1), this.#numbered);
|
|
306
|
+
let newItems = this.#items.slice(0, index);
|
|
307
|
+
if (before.getLength() > 0)
|
|
308
|
+
newItems.push(before);
|
|
375
309
|
newItems.push(format);
|
|
376
|
-
if (after.getLength() > 0)
|
|
310
|
+
if (after.getLength() > 0)
|
|
311
|
+
newItems.push(after);
|
|
377
312
|
newItems = newItems.concat(this.#items.slice(index + 1));
|
|
378
313
|
return new ListNode(newItems, this.#numbered);
|
|
379
314
|
}
|
|
@@ -387,66 +322,60 @@ export default class ListNode extends BlockNode {
|
|
|
387
322
|
}
|
|
388
323
|
// Otherwise, return nothing, indicating no match.
|
|
389
324
|
}
|
|
390
|
-
|
|
391
|
-
withChildReplaced(
|
|
392
|
-
node: ListNodeType,
|
|
393
|
-
replacement: ListNodeType | undefined
|
|
394
|
-
): this | undefined {
|
|
325
|
+
withChildReplaced(node, replacement) {
|
|
395
326
|
const index = this.#items.indexOf(node);
|
|
396
|
-
if (index < 0)
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
}
|
|
411
|
-
|
|
412
|
-
withContentInRange(range: CaretRange): this | undefined {
|
|
327
|
+
if (index < 0)
|
|
328
|
+
return;
|
|
329
|
+
return new ListNode(replacement === undefined
|
|
330
|
+
? [
|
|
331
|
+
...this.#items.slice(0, index),
|
|
332
|
+
...this.#items.slice(index + 1),
|
|
333
|
+
]
|
|
334
|
+
: [
|
|
335
|
+
...this.#items.slice(0, index),
|
|
336
|
+
replacement,
|
|
337
|
+
...this.#items.slice(index + 1),
|
|
338
|
+
], this.#numbered);
|
|
339
|
+
}
|
|
340
|
+
withContentInRange(range) {
|
|
413
341
|
const containsStart = this.contains(range.start.node);
|
|
414
342
|
const containsEnd = this.contains(range.end.node);
|
|
415
|
-
if (!containsStart && !containsEnd)
|
|
416
|
-
|
|
343
|
+
if (!containsStart && !containsEnd)
|
|
344
|
+
return this.copy();
|
|
417
345
|
const newItems = [];
|
|
418
346
|
let foundStart = false;
|
|
419
347
|
let foundEnd = false;
|
|
420
348
|
for (let i = 0; i < this.#items.length; i++) {
|
|
421
|
-
if (this.#items[i].contains(range.start.node))
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
((containsEnd && !foundEnd) || !containsEnd)
|
|
425
|
-
) {
|
|
349
|
+
if (this.#items[i].contains(range.start.node))
|
|
350
|
+
foundStart = true;
|
|
351
|
+
if (((containsStart && foundStart) || !containsStart) &&
|
|
352
|
+
((containsEnd && !foundEnd) || !containsEnd)) {
|
|
426
353
|
const newItem = this.#items[i].withContentInRange(range);
|
|
427
|
-
if (newItem === undefined)
|
|
354
|
+
if (newItem === undefined)
|
|
355
|
+
return;
|
|
428
356
|
newItems.push(newItem);
|
|
429
357
|
}
|
|
430
|
-
if (this.#items[i].contains(range.end.node))
|
|
358
|
+
if (this.#items[i].contains(range.end.node))
|
|
359
|
+
foundEnd = true;
|
|
431
360
|
}
|
|
432
|
-
return new ListNode(newItems, this.#numbered)
|
|
361
|
+
return new ListNode(newItems, this.#numbered);
|
|
433
362
|
}
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
if (!(node instanceof ListNode))
|
|
438
|
-
|
|
363
|
+
withNodeInserted(caret, node) {
|
|
364
|
+
if (!this.contains(caret.node))
|
|
365
|
+
return;
|
|
366
|
+
if (!(node instanceof ListNode))
|
|
367
|
+
return;
|
|
439
368
|
// Find the anchor item.
|
|
440
369
|
const anchor = this.#items.find((i) => i.contains(caret.node));
|
|
441
|
-
if (anchor === undefined)
|
|
442
|
-
|
|
370
|
+
if (anchor === undefined)
|
|
371
|
+
return;
|
|
443
372
|
const items = node.getItems();
|
|
444
|
-
|
|
445
373
|
let lastItem = anchor;
|
|
446
|
-
let newList
|
|
374
|
+
let newList = this;
|
|
447
375
|
while (items.length > 0) {
|
|
448
376
|
let item = items.shift();
|
|
449
|
-
if (item === undefined)
|
|
377
|
+
if (item === undefined)
|
|
378
|
+
return;
|
|
450
379
|
// Insert all of the node's items into this list, merging the first.
|
|
451
380
|
if (lastItem === anchor) {
|
|
452
381
|
const edit = anchor.withNodeInserted(caret, item);
|
|
@@ -454,55 +383,49 @@ export default class ListNode extends BlockNode {
|
|
|
454
383
|
return;
|
|
455
384
|
item = edit.root;
|
|
456
385
|
newList = newList.withChildReplaced(anchor, item);
|
|
457
|
-
}
|
|
386
|
+
}
|
|
387
|
+
else {
|
|
458
388
|
newList = newList.withItemAfter(item, lastItem);
|
|
459
389
|
}
|
|
460
|
-
if (newList === undefined)
|
|
390
|
+
if (newList === undefined)
|
|
391
|
+
return;
|
|
461
392
|
// Remember where we inserted.
|
|
462
393
|
lastItem = item;
|
|
463
394
|
}
|
|
464
|
-
|
|
465
395
|
// The caret should be the last item inserted.
|
|
466
|
-
const newCaret =
|
|
467
|
-
lastItem
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
396
|
+
const newCaret = lastItem instanceof FormatNode
|
|
397
|
+
? lastItem.getLastCaret()
|
|
398
|
+
: lastItem.getLastItem()?.getLastCaret();
|
|
399
|
+
if (newCaret === undefined)
|
|
400
|
+
return;
|
|
472
401
|
return { root: newList, range: { start: newCaret, end: newCaret } };
|
|
473
402
|
}
|
|
474
|
-
|
|
475
|
-
withRangeFormatted(range: CaretRange, format: Format | undefined): Edit {
|
|
403
|
+
withRangeFormatted(range, format) {
|
|
476
404
|
const sortedRange = this.sortRange(range);
|
|
477
405
|
const itemStart = this.getItemContaining(sortedRange.start);
|
|
478
406
|
const itemEnd = this.getItemContaining(sortedRange.end);
|
|
479
|
-
|
|
480
407
|
// This edits all of the formats contained in the range in the list, since the BlockNode class doesn't care about
|
|
481
408
|
// what formats are stored in.
|
|
482
409
|
const edit = super.withRangeFormatted(sortedRange, format);
|
|
483
|
-
|
|
484
410
|
// If we were deleting and two list items were involved, merge them.
|
|
485
|
-
if (
|
|
486
|
-
edit &&
|
|
411
|
+
if (edit &&
|
|
487
412
|
format === undefined &&
|
|
488
413
|
itemStart !== undefined &&
|
|
489
414
|
itemEnd !== undefined &&
|
|
490
|
-
itemStart !== itemEnd
|
|
491
|
-
|
|
492
|
-
const
|
|
493
|
-
const itemIndex =
|
|
494
|
-
itemEnd - (this.#items.length - newList.#items.length);
|
|
415
|
+
itemStart !== itemEnd) {
|
|
416
|
+
const newList = edit.root;
|
|
417
|
+
const itemIndex = itemEnd - (this.#items.length - newList.#items.length);
|
|
495
418
|
if (itemIndex > 0 && newList.getLength() > 1) {
|
|
496
419
|
// Merge the items, accounting for the new index of the last item.
|
|
497
420
|
const mergedEdit = newList.withItemMergedBackwards(itemIndex);
|
|
498
|
-
if (mergedEdit === undefined)
|
|
421
|
+
if (mergedEdit === undefined)
|
|
422
|
+
return;
|
|
499
423
|
return {
|
|
500
424
|
root: mergedEdit[0],
|
|
501
425
|
range: { start: mergedEdit[1], end: mergedEdit[1] },
|
|
502
426
|
};
|
|
503
427
|
}
|
|
504
428
|
}
|
|
505
|
-
|
|
506
429
|
return edit;
|
|
507
430
|
}
|
|
508
431
|
}
|