bookish-press 0.4.47 → 0.4.49
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 +60 -64
- 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 +19 -13
- 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 +393 -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 +38 -53
- 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 +47 -50
- 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} +6 -110
- 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,59 @@
|
|
|
1
|
+
<script>import Loading from './Loading.svelte';
|
|
2
|
+
import Feedback from '../app/Feedback.svelte';
|
|
3
|
+
import { onDestroy } from 'svelte';
|
|
4
|
+
import { page } from '$app/stores';
|
|
5
|
+
import { getBook, getUser } from './Contexts';
|
|
6
|
+
import { listenToBookWithID as listenToBooksWithID, listenToBooksByName as listenToBooksWithName, } from '../../models/CRUD';
|
|
7
|
+
let auth = getUser();
|
|
8
|
+
let book = getBook();
|
|
9
|
+
// Keep track of the query updates
|
|
10
|
+
let booksByName = undefined;
|
|
11
|
+
let bookByID = undefined;
|
|
12
|
+
// Mege them together here
|
|
13
|
+
$: currentBook =
|
|
14
|
+
// Neither loaded? Current book isn't loaded.
|
|
15
|
+
booksByName === undefined && bookByID === undefined
|
|
16
|
+
? undefined
|
|
17
|
+
: booksByName !== undefined && booksByName.length > 0
|
|
18
|
+
? booksByName[0]
|
|
19
|
+
: bookByID ?? null;
|
|
20
|
+
// Whenever the merge changes, update the book store (updating the whole UI)
|
|
21
|
+
$: book.set(currentBook ?? undefined);
|
|
22
|
+
// Keep track of listeners to unsubscribe to on page changes.
|
|
23
|
+
let nameUnsub = undefined;
|
|
24
|
+
let idUnsub = undefined;
|
|
25
|
+
function unsub() {
|
|
26
|
+
if (nameUnsub)
|
|
27
|
+
nameUnsub();
|
|
28
|
+
if (idUnsub)
|
|
29
|
+
idUnsub();
|
|
30
|
+
}
|
|
31
|
+
// Keep track of any errors.
|
|
32
|
+
let error;
|
|
33
|
+
function listen() {
|
|
34
|
+
unsub();
|
|
35
|
+
try {
|
|
36
|
+
nameUnsub = listenToBooksWithName($page.params.bookid, (books) => (booksByName = books));
|
|
37
|
+
idUnsub = listenToBooksWithID($page.params.bookid, (book) => (bookByID = book));
|
|
38
|
+
}
|
|
39
|
+
catch (err) {
|
|
40
|
+
error = '' + err;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
// When page or auth changes and there's a user, update the listener.
|
|
44
|
+
$: if ($page && $auth && $auth.user !== null)
|
|
45
|
+
listen();
|
|
46
|
+
// When this is unmounted, unset them.
|
|
47
|
+
onDestroy(() => {
|
|
48
|
+
book.set(undefined);
|
|
49
|
+
unsub();
|
|
50
|
+
});
|
|
51
|
+
</script>
|
|
52
|
+
|
|
53
|
+
{#if error || currentBook === null}
|
|
54
|
+
<Feedback error>Unable to load book.</Feedback>
|
|
55
|
+
{:else if currentBook === undefined}
|
|
56
|
+
<Loading />
|
|
57
|
+
{:else}
|
|
58
|
+
<slot />
|
|
59
|
+
{/if}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { SvelteComponentTyped } from "svelte";
|
|
2
|
+
declare const __propDef: {
|
|
3
|
+
props: Record<string, never>;
|
|
4
|
+
events: {
|
|
5
|
+
[evt: string]: CustomEvent<any>;
|
|
6
|
+
};
|
|
7
|
+
slots: {
|
|
8
|
+
default: {};
|
|
9
|
+
};
|
|
10
|
+
};
|
|
11
|
+
export type BookLoaderProps = typeof __propDef.props;
|
|
12
|
+
export type BookLoaderEvents = typeof __propDef.events;
|
|
13
|
+
export type BookLoaderSlots = typeof __propDef.slots;
|
|
14
|
+
export default class BookLoader extends SvelteComponentTyped<BookLoaderProps, BookLoaderEvents, BookLoaderSlots> {
|
|
15
|
+
}
|
|
16
|
+
export {};
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
<script>import Instructions from './Instructions.svelte';
|
|
2
|
+
import { getUniqueReferenceID, mineReference, } from '../../util/mineReference';
|
|
3
|
+
import Reference from '../../models/book/Reference';
|
|
4
|
+
import { getEdition, isEditionEditable, isEditionPartiallyEditable, } from './Contexts';
|
|
5
|
+
import Button from '../app/Button.svelte';
|
|
6
|
+
let edition = getEdition();
|
|
7
|
+
let text = '';
|
|
8
|
+
let editable = isEditionEditable() || isEditionPartiallyEditable();
|
|
9
|
+
function handleBulkAdd() {
|
|
10
|
+
// Split by lines, skipping empty lines.
|
|
11
|
+
const references = text
|
|
12
|
+
.split(/\n+/)
|
|
13
|
+
.map((line) => mineReference(Object.keys($edition?.getReferences() ?? []), line));
|
|
14
|
+
if ($edition) {
|
|
15
|
+
edition.set($edition.withNewReferences(references));
|
|
16
|
+
text = '';
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
function handleEmptyAdd() {
|
|
20
|
+
if ($edition) {
|
|
21
|
+
edition.set($edition.withNewReferences([
|
|
22
|
+
new Reference(getUniqueReferenceID(Object.keys($edition.getReferences()))),
|
|
23
|
+
]));
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
</script>
|
|
27
|
+
|
|
28
|
+
<Instructions {editable}>
|
|
29
|
+
To add references to a chapter, add them here first. You can add one at a
|
|
30
|
+
time, or try pasting them in bulk, and this page will try to pull out author
|
|
31
|
+
lists, years, sources, and URLs. Be sure to verify it though — it's
|
|
32
|
+
likely to get some things wrong.
|
|
33
|
+
</Instructions>
|
|
34
|
+
|
|
35
|
+
<textarea rows={5} bind:value={text} style="width: 100%" />
|
|
36
|
+
<Button
|
|
37
|
+
tooltip="convert to references"
|
|
38
|
+
disabled={text.length === 0}
|
|
39
|
+
command={handleBulkAdd}>+ bulk references</Button
|
|
40
|
+
>
|
|
41
|
+
<Button tooltip="add empty reference" command={handleEmptyAdd}
|
|
42
|
+
>+ reference</Button
|
|
43
|
+
>
|
|
44
|
+
|
|
45
|
+
<style>
|
|
46
|
+
textarea {
|
|
47
|
+
width: 100%;
|
|
48
|
+
padding: var(--app-chrome-padding);
|
|
49
|
+
font-family: var(--app-font);
|
|
50
|
+
font-size: var(--app-font-size);
|
|
51
|
+
border: none;
|
|
52
|
+
border-top: var(--app-chrome-border-size) solid var(--app-border-color);
|
|
53
|
+
border-bottom: var(--app-chrome-border-size) solid
|
|
54
|
+
var(--app-border-color);
|
|
55
|
+
margin-bottom: var(--app-chrome-padding);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
textarea:focus {
|
|
59
|
+
border-bottom-color: var(--app-interactive-color);
|
|
60
|
+
border-top-color: var(--app-interactive-color);
|
|
61
|
+
outline: none;
|
|
62
|
+
}
|
|
63
|
+
</style>
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { SvelteComponentTyped } from "svelte";
|
|
2
|
+
declare const __propDef: {
|
|
3
|
+
props: Record<string, never>;
|
|
4
|
+
events: {
|
|
5
|
+
[evt: string]: CustomEvent<any>;
|
|
6
|
+
};
|
|
7
|
+
slots: {};
|
|
8
|
+
};
|
|
9
|
+
export type BulkReferenceEditorProps = typeof __propDef.props;
|
|
10
|
+
export type BulkReferenceEditorEvents = typeof __propDef.events;
|
|
11
|
+
export type BulkReferenceEditorSlots = typeof __propDef.slots;
|
|
12
|
+
export default class BulkReferenceEditor extends SvelteComponentTyped<BulkReferenceEditorProps, BulkReferenceEditorEvents, BulkReferenceEditorSlots> {
|
|
13
|
+
}
|
|
14
|
+
export {};
|
|
@@ -0,0 +1,393 @@
|
|
|
1
|
+
<script>import Parser from '../../models/chapter/Parser';
|
|
2
|
+
import Header from './Header.svelte';
|
|
3
|
+
import Authors from './Authors.svelte';
|
|
4
|
+
import Outline from './Outline.svelte';
|
|
5
|
+
import Page from './Page.svelte';
|
|
6
|
+
import TextEditor from '../editor/TextEditor.svelte';
|
|
7
|
+
import BookishEditor from '../editor/BookishEditor.svelte';
|
|
8
|
+
import Toggle from '../editor/Toggle.svelte';
|
|
9
|
+
import Instructions from './Instructions.svelte';
|
|
10
|
+
import ChapterBody from '../chapter/ChapterBody.svelte';
|
|
11
|
+
import PossibleReference from './PossibleReference.svelte';
|
|
12
|
+
import ChapterNumber from './ChapterNumber.svelte';
|
|
13
|
+
import Problem from '../chapter/Problem.svelte';
|
|
14
|
+
import { CHAPTER, getUser, getBook, getEdition, isBookEditable, isChapterEditable, isEditionPartiallyEditable, getLeasee, lease, setChapter, isEditionEditable, } from './Contexts';
|
|
15
|
+
import { writable } from 'svelte/store';
|
|
16
|
+
import { onMount, setContext } from 'svelte';
|
|
17
|
+
import { hideOutlineIfObscured, layoutMarginals } from './margins';
|
|
18
|
+
import scrollToEyeLevel from '../../util/scrollToEyeLevel';
|
|
19
|
+
import { goto } from '$app/navigation';
|
|
20
|
+
import ChapterNode from '../../models/chapter/ChapterNode';
|
|
21
|
+
import Muted from './Muted.svelte';
|
|
22
|
+
import Title from './Title.svelte';
|
|
23
|
+
import PageHeader from './PageHeader.svelte';
|
|
24
|
+
import Permissions from '../editor/Permissions.svelte';
|
|
25
|
+
export let chapter;
|
|
26
|
+
export let print = false;
|
|
27
|
+
let book = getBook();
|
|
28
|
+
let edition = getEdition();
|
|
29
|
+
let auth = getUser();
|
|
30
|
+
// Keep track of the scroll position to facilitate reading during reloads.
|
|
31
|
+
function rememberPosition() {
|
|
32
|
+
localStorage.setItem('scrollposition', '' + window.scrollY);
|
|
33
|
+
}
|
|
34
|
+
// When the window resizes, the responsive layout might cause the marginals to move to the footer.
|
|
35
|
+
// when this happens, we want to immediately remove all of the explicit positioning.
|
|
36
|
+
function handleResize() {
|
|
37
|
+
layoutMarginals();
|
|
38
|
+
}
|
|
39
|
+
// The currently selected marginal; we only do one at a time.
|
|
40
|
+
let marginal = writable(undefined);
|
|
41
|
+
// Keep track of which hash mark is scrolled to
|
|
42
|
+
let highlightedID = undefined;
|
|
43
|
+
// When this component is mounted...
|
|
44
|
+
// 1) Subscribe and unsubscribe to window listeners
|
|
45
|
+
// 2) Do initial layout of marginals
|
|
46
|
+
// 3) Start observing any elements corresponding to the ID in the URL's hash string
|
|
47
|
+
// 4) Clean up our mess after unmounting.
|
|
48
|
+
onMount(() => {
|
|
49
|
+
// On render or when scrolling, see if the URL hash has changed and update state accordingly.
|
|
50
|
+
// We also track whether we've scrolled to it.
|
|
51
|
+
const observeHash = () => {
|
|
52
|
+
// Get the ID without the hash and the corresponding element
|
|
53
|
+
const elementID = window.location.hash.substring(1);
|
|
54
|
+
const element = elementID
|
|
55
|
+
? document.getElementById(elementID)
|
|
56
|
+
: null;
|
|
57
|
+
// If it's not empty, observe it, and remember what we're observing for highlighting
|
|
58
|
+
if (element) {
|
|
59
|
+
highlightedID = elementID;
|
|
60
|
+
// Start watching this a few seconds after we see it, giving the for in-page scrolling.
|
|
61
|
+
setTimeout(() => observer.observe(element), 2500);
|
|
62
|
+
}
|
|
63
|
+
};
|
|
64
|
+
// Do things to do when scrolling
|
|
65
|
+
const handleScroll = () => {
|
|
66
|
+
// See if the outline is obscured by an image
|
|
67
|
+
hideOutlineIfObscured();
|
|
68
|
+
// See if there are any new hashes to observe. This is because
|
|
69
|
+
// we're using react-router-hash-link, which doesn't trigger hashchange events for some reason.
|
|
70
|
+
observeHash();
|
|
71
|
+
};
|
|
72
|
+
// Lay things out when the window or scroll changes.
|
|
73
|
+
window.addEventListener('scroll', handleScroll);
|
|
74
|
+
window.addEventListener('resize', handleResize);
|
|
75
|
+
// Remember the scroll position before a refresh.
|
|
76
|
+
// We have to do all of these because browser support varies.
|
|
77
|
+
window.addEventListener('beforeunload', rememberPosition);
|
|
78
|
+
window.addEventListener('visibilitychange', rememberPosition);
|
|
79
|
+
window.addEventListener('pagehide', rememberPosition);
|
|
80
|
+
// Start listening for hash changes, since we want to remove them upon scrolling away from them.
|
|
81
|
+
window.addEventListener('pushstate', observeHash);
|
|
82
|
+
window.addEventListener('popstate', observeHash);
|
|
83
|
+
window.addEventListener('hashchange', observeHash);
|
|
84
|
+
// Make an intersection observer to monitor the location of elements selected by the URL hash ID.
|
|
85
|
+
const observer = new IntersectionObserver((entries) => {
|
|
86
|
+
// Go through all of the monitored elements
|
|
87
|
+
entries.forEach((entry) => {
|
|
88
|
+
// If the observed element is out of view and in the hash, remove the hash
|
|
89
|
+
if (entry.intersectionRatio === 0 &&
|
|
90
|
+
entry.target.id === window.location.hash.substring(1)) {
|
|
91
|
+
history.pushState('', document.title, window.location.pathname + window.location.search);
|
|
92
|
+
observer.unobserve(entry.target);
|
|
93
|
+
highlightedID = undefined;
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
});
|
|
97
|
+
// Do an initial check the hash to see if there's an ID to scroll to
|
|
98
|
+
observeHash();
|
|
99
|
+
// Position the marginals, since there's new content.
|
|
100
|
+
layoutMarginals();
|
|
101
|
+
// On cleanup, unsubscribe from everything above.
|
|
102
|
+
return () => {
|
|
103
|
+
window.removeEventListener('scroll', handleScroll);
|
|
104
|
+
window.removeEventListener('resize', handleResize);
|
|
105
|
+
// Stop listening to page visibility changes.
|
|
106
|
+
window.removeEventListener('beforeunload', rememberPosition);
|
|
107
|
+
window.removeEventListener('visibilitychange', rememberPosition);
|
|
108
|
+
window.removeEventListener('pagehide', rememberPosition);
|
|
109
|
+
// Delete the remembered position so that the next page scrolls to top.
|
|
110
|
+
localStorage.removeItem('scrollposition');
|
|
111
|
+
// Stop listening for hash changes
|
|
112
|
+
window.removeEventListener('pushstate', observeHash);
|
|
113
|
+
window.removeEventListener('popstate', observeHash);
|
|
114
|
+
window.removeEventListener('hashchange', observeHash);
|
|
115
|
+
// Stop observing everything on unmount
|
|
116
|
+
observer.disconnect();
|
|
117
|
+
};
|
|
118
|
+
});
|
|
119
|
+
// Position the marginals on mount.
|
|
120
|
+
onMount(() => layoutMarginals());
|
|
121
|
+
// This gets called after the page is done loading. There are various things we scroll to.
|
|
122
|
+
function scrollToLastLocation() {
|
|
123
|
+
// In case loading changed marginal positions
|
|
124
|
+
layoutMarginals();
|
|
125
|
+
// If there's a word we're trying to highlight in the URL path, scroll to the corresponding match.
|
|
126
|
+
if (location.search) {
|
|
127
|
+
const highlights = document.getElementsByClassName('bookish-text bookish-content-highlight');
|
|
128
|
+
const num = getHighlightedNumber();
|
|
129
|
+
if (num &&
|
|
130
|
+
highlights.length > 0 &&
|
|
131
|
+
num < highlights.length &&
|
|
132
|
+
num >= 0) {
|
|
133
|
+
scrollToEyeLevel(highlights[num]);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
// Otherwise, if there's an ID in the URL, jump to it.
|
|
137
|
+
else if (highlightedID) {
|
|
138
|
+
const el = document.getElementById(highlightedID);
|
|
139
|
+
// If we found the element, remove the hash any time after a few seconds. See handleScroll for the removal logic.
|
|
140
|
+
if (el) {
|
|
141
|
+
scrollToEyeLevel(el);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
else {
|
|
145
|
+
// If we got to this page through a refresh, scroll to
|
|
146
|
+
const entries = performance.getEntriesByType('navigation');
|
|
147
|
+
const position = localStorage.getItem('scrollposition');
|
|
148
|
+
if (position !== null &&
|
|
149
|
+
entries.length > 0 &&
|
|
150
|
+
entries[entries.length - 1]
|
|
151
|
+
.type === 'reload') {
|
|
152
|
+
// Scroll to the previous position, if there was one, so that refresh preserves position.
|
|
153
|
+
window.scrollTo(0, parseInt(position));
|
|
154
|
+
}
|
|
155
|
+
// Otherwise, just scroll to the top.
|
|
156
|
+
else {
|
|
157
|
+
window.scrollTo(0, 0);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
/** Account for static builds, where location isn't defined */
|
|
162
|
+
function getLocation() {
|
|
163
|
+
return typeof location === 'undefined' ? undefined : location;
|
|
164
|
+
}
|
|
165
|
+
function getHighlightedWord() {
|
|
166
|
+
return getLocation()?.search.split('&')[0]?.split('=')[1] ?? undefined;
|
|
167
|
+
}
|
|
168
|
+
function getHighlightedNumber() {
|
|
169
|
+
const number = getLocation()?.search.split('&')[1]?.split('=')[1];
|
|
170
|
+
return number === undefined ? undefined : parseInt(number);
|
|
171
|
+
}
|
|
172
|
+
// Prepare to render the chapter by getting some data from the chapter and book.
|
|
173
|
+
$: chapterID = chapter.getID();
|
|
174
|
+
$: chapterNumber = $edition?.getChapterNumber(chapterID);
|
|
175
|
+
$: chapterSection = $edition?.getChapterSection(chapterID);
|
|
176
|
+
$: chapterAST = $edition ? chapter.getAST($edition) : undefined;
|
|
177
|
+
$: citations = chapterAST ? chapterAST.getCitations() : undefined;
|
|
178
|
+
$: editionNumber = $edition ? $edition.getEditionNumber() : undefined;
|
|
179
|
+
let chapterStore = writable();
|
|
180
|
+
setContext(CHAPTER, chapterStore);
|
|
181
|
+
$: chapterStore.set({
|
|
182
|
+
chapter: chapter,
|
|
183
|
+
highlightedWord: getHighlightedWord(),
|
|
184
|
+
highlightedID: highlightedID,
|
|
185
|
+
marginal: marginal,
|
|
186
|
+
layoutMarginals: layoutMarginals,
|
|
187
|
+
});
|
|
188
|
+
let editable = isBookEditable() ||
|
|
189
|
+
isEditionEditable() ||
|
|
190
|
+
isChapterEditable() ||
|
|
191
|
+
($auth !== undefined &&
|
|
192
|
+
$auth.user !== null &&
|
|
193
|
+
chapter.isEditor($auth.user.uid));
|
|
194
|
+
</script>
|
|
195
|
+
|
|
196
|
+
{#if $edition}
|
|
197
|
+
<Page
|
|
198
|
+
afterLoaded={scrollToLastLocation}
|
|
199
|
+
title={`${$edition.getTitle()} - ${chapter.getTitle()}`}
|
|
200
|
+
>
|
|
201
|
+
<Header
|
|
202
|
+
editable={isChapterEditable()}
|
|
203
|
+
id={chapter.id}
|
|
204
|
+
header={chapter.getTitle()}
|
|
205
|
+
label="Chapter title"
|
|
206
|
+
tags={$edition.getTags()}
|
|
207
|
+
save={(text) =>
|
|
208
|
+
setChapter(edition, chapter, chapter.withTitle(text))}
|
|
209
|
+
getImage={() => chapter.getImage()}
|
|
210
|
+
setImage={(embed) =>
|
|
211
|
+
setChapter(edition, chapter, chapter.withImage(embed))}
|
|
212
|
+
{print}
|
|
213
|
+
>
|
|
214
|
+
<!-- Collapse the outline if a marginal is selected. -->
|
|
215
|
+
<Outline
|
|
216
|
+
slot="outline"
|
|
217
|
+
collapse={$marginal !== undefined}
|
|
218
|
+
previous={$edition.getPreviousChapterID(chapterID)}
|
|
219
|
+
next={$edition.getNextChapterID(chapterID)}
|
|
220
|
+
listener={(expanded) => {
|
|
221
|
+
// If the outline is being expanded, hide the marginal, otherwise leave it alone.
|
|
222
|
+
if (expanded) marginal.set(undefined);
|
|
223
|
+
|
|
224
|
+
// Check if we need to hide the outline after positioning.
|
|
225
|
+
hideOutlineIfObscured();
|
|
226
|
+
}}
|
|
227
|
+
/>
|
|
228
|
+
<!-- Add an editable chapter ID if in editor mode -->
|
|
229
|
+
<svelte:fragment slot="before">
|
|
230
|
+
{#if editable && $book}
|
|
231
|
+
<Muted>
|
|
232
|
+
<TextEditor
|
|
233
|
+
text={chapter.getID()}
|
|
234
|
+
label="Chapter URL ID editor"
|
|
235
|
+
save={// After the ID is edited, reload the page with the new URL.
|
|
236
|
+
(newChapterID) => {
|
|
237
|
+
if ($book) {
|
|
238
|
+
chapter.withChapterID(newChapterID);
|
|
239
|
+
// Navigate to the new ID
|
|
240
|
+
goto(
|
|
241
|
+
`/write/${$book.ref.id}/${editionNumber}/${newChapterID}`
|
|
242
|
+
);
|
|
243
|
+
}
|
|
244
|
+
}}
|
|
245
|
+
placeholder="chapter ID"
|
|
246
|
+
valid={(newChapterID) =>
|
|
247
|
+
!/^[a-zA-Z0-9]+$/.test(newChapterID)
|
|
248
|
+
? 'Chapter IDs must be one or more letters or numbers'
|
|
249
|
+
: chapter.getID() !== newChapterID &&
|
|
250
|
+
$edition?.hasChapter(newChapterID)
|
|
251
|
+
? "There's already a chapter that has this ID."
|
|
252
|
+
: undefined}
|
|
253
|
+
saveOnExit={true}
|
|
254
|
+
/>
|
|
255
|
+
</Muted>
|
|
256
|
+
{/if}
|
|
257
|
+
{#if editable}
|
|
258
|
+
<Toggle
|
|
259
|
+
on={chapter.isNumbered()}
|
|
260
|
+
save={(on) =>
|
|
261
|
+
setChapter(
|
|
262
|
+
edition,
|
|
263
|
+
chapter,
|
|
264
|
+
chapter.asNumbered(on)
|
|
265
|
+
)}
|
|
266
|
+
>
|
|
267
|
+
<ChapterNumber
|
|
268
|
+
>{#if chapterNumber !== undefined}Chapter {chapterNumber}{:else}<Muted
|
|
269
|
+
>Unnumbered</Muted
|
|
270
|
+
>{/if}</ChapterNumber
|
|
271
|
+
>
|
|
272
|
+
</Toggle>
|
|
273
|
+
{:else if chapterNumber !== undefined}
|
|
274
|
+
<ChapterNumber>Chapter {chapterNumber}</ChapterNumber>
|
|
275
|
+
{/if}
|
|
276
|
+
{#if chapterSection !== undefined && chapterSection.length > 0}
|
|
277
|
+
<span class="section-name">{chapterSection}</span>
|
|
278
|
+
{/if}
|
|
279
|
+
</svelte:fragment>
|
|
280
|
+
<!-- If there are chapter authors, render those, otherwise use the book authors -->
|
|
281
|
+
<Authors
|
|
282
|
+
editable={isChapterEditable()}
|
|
283
|
+
slot="after"
|
|
284
|
+
authors={chapter.getAuthors()}
|
|
285
|
+
inheritedAuthors={$edition.getAuthors()}
|
|
286
|
+
add={() => setChapter(edition, chapter, chapter.withAuthor(''))}
|
|
287
|
+
edit={(index, text) =>
|
|
288
|
+
setChapter(
|
|
289
|
+
edition,
|
|
290
|
+
chapter,
|
|
291
|
+
chapter.withRenamedAuthor(index, text)
|
|
292
|
+
)}
|
|
293
|
+
remove={(index) =>
|
|
294
|
+
setChapter(edition, chapter, chapter.withoutAuthor(index))}
|
|
295
|
+
/>
|
|
296
|
+
</Header>
|
|
297
|
+
|
|
298
|
+
<Instructions {editable}>
|
|
299
|
+
Edit your chapter's title, authors, and cover image above. You can
|
|
300
|
+
also change the ID of the chapter, which is the text that appears in
|
|
301
|
+
the chapter URL. Write your chapter text below, formatting options
|
|
302
|
+
in the toolbar above to add headers, lists, tables, comments,
|
|
303
|
+
citations, footnotes, and more. It's okay to try things, you can
|
|
304
|
+
always undo. Saves are automatic.
|
|
305
|
+
</Instructions>
|
|
306
|
+
|
|
307
|
+
<!-- Render the chapter body, passing some context -->
|
|
308
|
+
<section class="chapter-content">
|
|
309
|
+
{#if chapterAST}
|
|
310
|
+
{#if editable}
|
|
311
|
+
<BookishEditor
|
|
312
|
+
text={chapterAST.toBookdown()}
|
|
313
|
+
parser={(text) => Parser.parseChapter($edition, text)}
|
|
314
|
+
save={(ast) =>
|
|
315
|
+
ast instanceof ChapterNode
|
|
316
|
+
? setChapter(
|
|
317
|
+
edition,
|
|
318
|
+
chapter,
|
|
319
|
+
chapter.withAST(ast)
|
|
320
|
+
)
|
|
321
|
+
: undefined}
|
|
322
|
+
chapter={true}
|
|
323
|
+
autofocus
|
|
324
|
+
component={ChapterBody}
|
|
325
|
+
placeholder="write here"
|
|
326
|
+
leasee={getLeasee(auth, edition, chapter.id)}
|
|
327
|
+
lease={(lock) => lease(auth, edition, chapter.id, lock)}
|
|
328
|
+
/>
|
|
329
|
+
{:else}
|
|
330
|
+
<ChapterBody node={chapterAST} />
|
|
331
|
+
{/if}
|
|
332
|
+
{:else}
|
|
333
|
+
<span>Loading...</span>
|
|
334
|
+
{/if}
|
|
335
|
+
</section>
|
|
336
|
+
|
|
337
|
+
{#if citations && citations.size > 0}
|
|
338
|
+
{@const refs = $edition.getReferences()}
|
|
339
|
+
<Title>References</Title>
|
|
340
|
+
<ol>
|
|
341
|
+
{#each [...citations].sort() as citationID}
|
|
342
|
+
{#if citationID in refs}
|
|
343
|
+
<li
|
|
344
|
+
class={'bookish-reference'}
|
|
345
|
+
id={'ref-' + citationID}
|
|
346
|
+
>
|
|
347
|
+
<PossibleReference node={refs[citationID]} />
|
|
348
|
+
</li>
|
|
349
|
+
{:else}
|
|
350
|
+
<li
|
|
351
|
+
><Problem
|
|
352
|
+
>Unknown reference: <code>{citationID}</code
|
|
353
|
+
></Problem
|
|
354
|
+
></li
|
|
355
|
+
>
|
|
356
|
+
{/if}
|
|
357
|
+
{/each}
|
|
358
|
+
</ol>
|
|
359
|
+
{/if}
|
|
360
|
+
|
|
361
|
+
{#if editable || isEditionPartiallyEditable()}
|
|
362
|
+
<PageHeader>Editors</PageHeader>
|
|
363
|
+
<Instructions {editable}
|
|
364
|
+
>These authors can edit this chapter. Add an email here to
|
|
365
|
+
provide chapter-level edit permissions.</Instructions
|
|
366
|
+
>
|
|
367
|
+
|
|
368
|
+
<Permissions
|
|
369
|
+
uids={chapter.uids}
|
|
370
|
+
inheriteduids={Array.from(
|
|
371
|
+
new Set([...$edition.uids, ...($book ? $book.uids : [])])
|
|
372
|
+
)}
|
|
373
|
+
atleastone={false}
|
|
374
|
+
writable={isChapterEditable()}
|
|
375
|
+
change={(uids) =>
|
|
376
|
+
setChapter(edition, chapter, chapter.withEditors(uids))}
|
|
377
|
+
/>
|
|
378
|
+
{/if}
|
|
379
|
+
</Page>
|
|
380
|
+
{/if}
|
|
381
|
+
|
|
382
|
+
<style>
|
|
383
|
+
.section-name {
|
|
384
|
+
display: inline-block;
|
|
385
|
+
margin-left: 0.5em;
|
|
386
|
+
font-family: var(--bookish-paragraph-font-family);
|
|
387
|
+
font-size: var(--bookish-small-font-size);
|
|
388
|
+
font-weight: normal;
|
|
389
|
+
font-style: normal;
|
|
390
|
+
color: var(--bookish-muted-color);
|
|
391
|
+
line-height: 1em;
|
|
392
|
+
}
|
|
393
|
+
</style>
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { SvelteComponentTyped } from "svelte";
|
|
2
|
+
import type ChapterModel from '../../models/book/Chapter';
|
|
3
|
+
declare const __propDef: {
|
|
4
|
+
props: {
|
|
5
|
+
chapter: ChapterModel;
|
|
6
|
+
print?: boolean | undefined;
|
|
7
|
+
};
|
|
8
|
+
events: {
|
|
9
|
+
[evt: string]: CustomEvent<any>;
|
|
10
|
+
};
|
|
11
|
+
slots: {};
|
|
12
|
+
};
|
|
13
|
+
export type ChapterProps = typeof __propDef.props;
|
|
14
|
+
export type ChapterEvents = typeof __propDef.events;
|
|
15
|
+
export type ChapterSlots = typeof __propDef.slots;
|
|
16
|
+
export default class Chapter extends SvelteComponentTyped<ChapterProps, ChapterEvents, ChapterSlots> {
|
|
17
|
+
}
|
|
18
|
+
export {};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { Writable } from 'svelte/store';
|
|
2
|
+
import type Chapter from '../../models/book/Chapter';
|
|
3
|
+
type ChapterContext = {
|
|
4
|
+
chapter: Chapter;
|
|
5
|
+
highlightedWord?: string;
|
|
6
|
+
highlightedID?: string;
|
|
7
|
+
marginal: Writable<string | undefined>;
|
|
8
|
+
layoutMarginals: () => void;
|
|
9
|
+
} | undefined;
|
|
10
|
+
export default ChapterContext;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
File without changes
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/** @typedef {typeof __propDef.props} ChapterNumberProps */
|
|
2
|
+
/** @typedef {typeof __propDef.events} ChapterNumberEvents */
|
|
3
|
+
/** @typedef {typeof __propDef.slots} ChapterNumberSlots */
|
|
4
|
+
export default class ChapterNumber extends SvelteComponentTyped<{
|
|
5
|
+
[x: string]: never;
|
|
6
|
+
}, {
|
|
7
|
+
[evt: string]: CustomEvent<any>;
|
|
8
|
+
}, {
|
|
9
|
+
default: {};
|
|
10
|
+
}> {
|
|
11
|
+
}
|
|
12
|
+
export type ChapterNumberProps = typeof __propDef.props;
|
|
13
|
+
export type ChapterNumberEvents = typeof __propDef.events;
|
|
14
|
+
export type ChapterNumberSlots = typeof __propDef.slots;
|
|
15
|
+
import { SvelteComponentTyped } from "svelte";
|
|
16
|
+
declare const __propDef: {
|
|
17
|
+
props: {
|
|
18
|
+
[x: string]: never;
|
|
19
|
+
};
|
|
20
|
+
events: {
|
|
21
|
+
[evt: string]: CustomEvent<any>;
|
|
22
|
+
};
|
|
23
|
+
slots: {
|
|
24
|
+
default: {};
|
|
25
|
+
};
|
|
26
|
+
};
|
|
27
|
+
export {};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { SvelteComponentTyped } from "svelte";
|
|
2
|
+
declare const __propDef: {
|
|
3
|
+
props: {
|
|
4
|
+
link?: string | undefined;
|
|
5
|
+
};
|
|
6
|
+
events: {
|
|
7
|
+
[evt: string]: CustomEvent<any>;
|
|
8
|
+
};
|
|
9
|
+
slots: {
|
|
10
|
+
default: {};
|
|
11
|
+
};
|
|
12
|
+
};
|
|
13
|
+
export type ChapterTitleProps = typeof __propDef.props;
|
|
14
|
+
export type ChapterTitleEvents = typeof __propDef.events;
|
|
15
|
+
export type ChapterTitleSlots = typeof __propDef.slots;
|
|
16
|
+
export default class ChapterTitle extends SvelteComponentTyped<ChapterTitleProps, ChapterTitleEvents, ChapterTitleSlots> {
|
|
17
|
+
}
|
|
18
|
+
export {};
|