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,189 +0,0 @@
|
|
|
1
|
-
<script lang="ts">
|
|
2
|
-
import type Theme from '$lib/models/book/Theme';
|
|
3
|
-
import type EditionModel from '$lib/models/book/Edition';
|
|
4
|
-
import smoothscroll from 'smoothscroll-polyfill';
|
|
5
|
-
import { goto } from '$app/navigation';
|
|
6
|
-
import { onMount, setContext } from 'svelte';
|
|
7
|
-
import { writable } from 'svelte/store';
|
|
8
|
-
import {
|
|
9
|
-
BASE,
|
|
10
|
-
DARK_MODE,
|
|
11
|
-
type BaseStore,
|
|
12
|
-
type DarkModeStore,
|
|
13
|
-
} from './Contexts';
|
|
14
|
-
import { BookishTheme } from '$lib/models/book/Theme';
|
|
15
|
-
|
|
16
|
-
// Poly fill smooth scrolling for Safari.
|
|
17
|
-
onMount(() => smoothscroll.polyfill());
|
|
18
|
-
|
|
19
|
-
// The book edition to render.
|
|
20
|
-
export let edition: EditionModel;
|
|
21
|
-
|
|
22
|
-
// The base path allows links to adjust to different routing contexts in which a book is placed.
|
|
23
|
-
// For example, when the book is hosted alone, all routes might start with the bare root "/",
|
|
24
|
-
// but when the book is being viewed or edited in the Bookish app, it needs a prefix for the
|
|
25
|
-
// route in the app.
|
|
26
|
-
export let base: string = '';
|
|
27
|
-
|
|
28
|
-
// When the base changes, update the context.
|
|
29
|
-
let baseStore = writable<string>(base);
|
|
30
|
-
$: setContext<BaseStore>(BASE, baseStore);
|
|
31
|
-
$: baseStore.set(base);
|
|
32
|
-
|
|
33
|
-
// Default dark mode to whatever's stored in local storage, if anything.
|
|
34
|
-
// respect user choice on the website despite the system theme
|
|
35
|
-
let darkMode = writable<boolean>(
|
|
36
|
-
typeof localStorage !== 'undefined' &&
|
|
37
|
-
localStorage.getItem('dark') !== 'false' &&
|
|
38
|
-
(localStorage.getItem('dark') === 'true' || // A previous setting
|
|
39
|
-
window.matchMedia('(prefers-color-scheme: dark)').matches) // Operating system is set to dark
|
|
40
|
-
);
|
|
41
|
-
|
|
42
|
-
// Expose dark mode to descendants
|
|
43
|
-
setContext<DarkModeStore>(DARK_MODE, darkMode);
|
|
44
|
-
|
|
45
|
-
// When dark mode changes, update the body's class list.
|
|
46
|
-
$: {
|
|
47
|
-
if (typeof document !== 'undefined') {
|
|
48
|
-
if ($darkMode) document.body.classList.add('dark');
|
|
49
|
-
else document.body.classList.remove('dark');
|
|
50
|
-
if (typeof localStorage !== 'undefined')
|
|
51
|
-
localStorage.setItem('dark', $darkMode ? 'true' : 'false');
|
|
52
|
-
|
|
53
|
-
// Set the theme, whatever it is, and change it when the edition changes
|
|
54
|
-
setTheme(edition.getTheme() ?? BookishTheme);
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
// Set the theme on mount.
|
|
59
|
-
onMount(() => {
|
|
60
|
-
setTheme(edition.getTheme() ?? BookishTheme);
|
|
61
|
-
});
|
|
62
|
-
|
|
63
|
-
// Redirect old hash routes by simply replacing their hash before routing.
|
|
64
|
-
if (typeof window !== 'undefined' && window.location.hash.startsWith('#/'))
|
|
65
|
-
goto(location.hash.replace('#', ''));
|
|
66
|
-
|
|
67
|
-
/** Given a theme, sets the appropriate CSS rules in the browser to apply the theme.*/
|
|
68
|
-
function setTheme(theme: Theme | null) {
|
|
69
|
-
// If the theme is being unset, make sure we've removed any overrding style declaration.
|
|
70
|
-
// This let's the default theme kick in.
|
|
71
|
-
let themeTagImports = document.getElementById('bookish-theme-imports');
|
|
72
|
-
let themeTagCSS = document.getElementById('bookish-theme');
|
|
73
|
-
|
|
74
|
-
// We only want to set it if it's actually different than what's currently set.
|
|
75
|
-
// Otherwise during editing we get lots of jittery changes on each edit, because the
|
|
76
|
-
// whole edition is rerendering. To check this, we set a data attribute on the style tag containing
|
|
77
|
-
// a stringify of the theme set. We do this separately for the imports, since they can have more
|
|
78
|
-
// major changes than the spacing and color sizes, changing fonts especially.
|
|
79
|
-
const themeTagCSSValue = themeTagCSS?.dataset.css;
|
|
80
|
-
const themeTagImportsValue = themeTagImports?.dataset.imports;
|
|
81
|
-
const newThemeTagCSSValue = JSON.stringify(theme);
|
|
82
|
-
const newThemeTagImportsValue = JSON.stringify(theme?.imports);
|
|
83
|
-
|
|
84
|
-
if (theme !== null) {
|
|
85
|
-
// If the imports changed, update theme.
|
|
86
|
-
if (themeTagImportsValue !== newThemeTagImportsValue) {
|
|
87
|
-
// If it's being set, create a new style tag.
|
|
88
|
-
const newThemeImportsTag = document.createElement('style');
|
|
89
|
-
|
|
90
|
-
// Give it an ID so we can remove it later.
|
|
91
|
-
newThemeImportsTag.setAttribute('id', 'bookish-theme-imports');
|
|
92
|
-
newThemeImportsTag.dataset.imports = newThemeTagImportsValue;
|
|
93
|
-
|
|
94
|
-
// Insert any import statements, then any rules.
|
|
95
|
-
const css = `${(theme.imports ?? [])
|
|
96
|
-
.map((url) => `@import url(${url});`)
|
|
97
|
-
.join('\n')}`;
|
|
98
|
-
newThemeImportsTag.appendChild(document.createTextNode(css));
|
|
99
|
-
document.head.appendChild(newThemeImportsTag);
|
|
100
|
-
|
|
101
|
-
// Remove the old tag
|
|
102
|
-
themeTagImports?.remove();
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
// If the rules changed, update them.
|
|
106
|
-
if (themeTagCSSValue !== newThemeTagCSSValue) {
|
|
107
|
-
// If it's being set, create a new style tag.
|
|
108
|
-
const newThemeCSSTag = document.createElement('style');
|
|
109
|
-
|
|
110
|
-
// Give it an ID so we can remove it later.
|
|
111
|
-
newThemeCSSTag.setAttribute('id', 'bookish-theme');
|
|
112
|
-
newThemeCSSTag.dataset.css = newThemeTagCSSValue;
|
|
113
|
-
|
|
114
|
-
// Insert any import statements, then any rules.
|
|
115
|
-
const css = `
|
|
116
|
-
${(theme.imports ?? [])
|
|
117
|
-
.map((url) => `@import url(${url});`)
|
|
118
|
-
.join('\n')}
|
|
119
|
-
.bookish {
|
|
120
|
-
${theme.light ? toRules(theme.light) : ''}
|
|
121
|
-
${theme.fonts ? toRules(theme.fonts) : ''}
|
|
122
|
-
${theme.sizes ? toRules(theme.sizes) : ''}
|
|
123
|
-
${theme.weights ? toRules(theme.weights) : ''}
|
|
124
|
-
${theme.spacing ? toRules(theme.spacing) : ''}
|
|
125
|
-
}
|
|
126
|
-
.dark {
|
|
127
|
-
${theme.dark ? toRules(theme.dark) : ''}
|
|
128
|
-
}`;
|
|
129
|
-
newThemeCSSTag.appendChild(document.createTextNode(css));
|
|
130
|
-
document.head.appendChild(newThemeCSSTag);
|
|
131
|
-
|
|
132
|
-
// Remove the old tag
|
|
133
|
-
themeTagCSS?.remove();
|
|
134
|
-
}
|
|
135
|
-
} else {
|
|
136
|
-
// Remove the old tags, unsetting the theme.
|
|
137
|
-
themeTagImports?.remove();
|
|
138
|
-
themeTagCSS?.remove();
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
function toRules(set: Record<string, string>) {
|
|
143
|
-
return Object.keys(set)
|
|
144
|
-
.map((name) => {
|
|
145
|
-
const value = set[name];
|
|
146
|
-
if (value.length > 0) {
|
|
147
|
-
const cssVariable =
|
|
148
|
-
'--bookish-' +
|
|
149
|
-
name
|
|
150
|
-
.replace(/([a-z])([A-Z])/g, '$1 $2')
|
|
151
|
-
.split(' ')
|
|
152
|
-
.map((s) => s.toLowerCase())
|
|
153
|
-
.join('-')
|
|
154
|
-
.replace(/([0-9])/g, '-$1-');
|
|
155
|
-
return `${cssVariable}: ${value};`;
|
|
156
|
-
}
|
|
157
|
-
})
|
|
158
|
-
.join('\n\t\t');
|
|
159
|
-
}
|
|
160
|
-
</script>
|
|
161
|
-
|
|
162
|
-
<main class="bookish {$darkMode ? ' dark' : ''}">
|
|
163
|
-
<slot />
|
|
164
|
-
</main>
|
|
165
|
-
|
|
166
|
-
<style>
|
|
167
|
-
* {
|
|
168
|
-
box-sizing: border-box;
|
|
169
|
-
}
|
|
170
|
-
|
|
171
|
-
/* WINDOW AND PAGES */
|
|
172
|
-
:global(body) {
|
|
173
|
-
margin: 0;
|
|
174
|
-
padding: 0;
|
|
175
|
-
background-color: var(--bookish-background-color);
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
/* The root container for a book */
|
|
179
|
-
.bookish {
|
|
180
|
-
font-weight: var(--bookish-paragraph-font-weight);
|
|
181
|
-
font-family: var(--bookish-paragraph-font-family);
|
|
182
|
-
font-size: var(--bookish-paragraph-font-size);
|
|
183
|
-
background-color: var(--bookish-background-color);
|
|
184
|
-
color: var(--bookish-paragraph-color);
|
|
185
|
-
width: 100%;
|
|
186
|
-
z-index: 0;
|
|
187
|
-
text-align: left;
|
|
188
|
-
}
|
|
189
|
-
</style>
|
|
@@ -1,123 +0,0 @@
|
|
|
1
|
-
<script lang="ts">
|
|
2
|
-
import Loading from '$lib/components/page/Loading.svelte';
|
|
3
|
-
import Edition from '$lib/components/page/Edition.svelte';
|
|
4
|
-
import Feedback from '$lib/components/app/Feedback.svelte';
|
|
5
|
-
import {
|
|
6
|
-
getBook,
|
|
7
|
-
getEdition,
|
|
8
|
-
getUser,
|
|
9
|
-
CHAPTERTEXT,
|
|
10
|
-
getChapterText,
|
|
11
|
-
} from '$lib/components/page/Contexts';
|
|
12
|
-
import { onDestroy } from 'svelte';
|
|
13
|
-
import { page } from '$app/stores';
|
|
14
|
-
import type { Unsubscribe } from 'firebase/auth';
|
|
15
|
-
import { listenToChapters, listenToEdition } from '../../models/CRUD';
|
|
16
|
-
|
|
17
|
-
export let write: boolean;
|
|
18
|
-
|
|
19
|
-
let auth = getUser();
|
|
20
|
-
let book = getBook();
|
|
21
|
-
let edition = getEdition();
|
|
22
|
-
let chapterText = getChapterText();
|
|
23
|
-
|
|
24
|
-
let editionUnsub: Unsubscribe | undefined = undefined;
|
|
25
|
-
let chaptersUnsub: Unsubscribe | undefined = undefined;
|
|
26
|
-
|
|
27
|
-
let error: string | undefined = undefined;
|
|
28
|
-
|
|
29
|
-
function unsub() {
|
|
30
|
-
// Unsubscribe to the old edition document if we were listening to one.
|
|
31
|
-
if (editionUnsub) editionUnsub();
|
|
32
|
-
if (chaptersUnsub) chaptersUnsub();
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
function listen() {
|
|
36
|
-
unsub();
|
|
37
|
-
|
|
38
|
-
error = undefined;
|
|
39
|
-
|
|
40
|
-
// If we no longer have a book, we can't get an edition.
|
|
41
|
-
if ($book === undefined) {
|
|
42
|
-
edition.set(undefined);
|
|
43
|
-
error = 'Unknown book.';
|
|
44
|
-
return;
|
|
45
|
-
} else {
|
|
46
|
-
const editionNumber = $page.params.editionid;
|
|
47
|
-
const latestPublished = !write;
|
|
48
|
-
|
|
49
|
-
// Figure out which edition to load.
|
|
50
|
-
let editionID;
|
|
51
|
-
if (editionNumber === undefined) {
|
|
52
|
-
if (latestPublished) {
|
|
53
|
-
editionID = $book.getLatestPublishedEditionID();
|
|
54
|
-
if (editionID === undefined)
|
|
55
|
-
error = 'There is no published edition of this book.';
|
|
56
|
-
} else {
|
|
57
|
-
editionID = $book.getLatestEditionID();
|
|
58
|
-
}
|
|
59
|
-
} else {
|
|
60
|
-
editionID = $book.getEditionNumberID(parseFloat(editionNumber));
|
|
61
|
-
if (editionID === undefined)
|
|
62
|
-
error = `There is no ${editionNumber} edition of this book`;
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
// Listen to the doc for changes and listen to all of its chapters.
|
|
66
|
-
if (editionID !== undefined) {
|
|
67
|
-
editionUnsub = listenToEdition(
|
|
68
|
-
$book.ref.id,
|
|
69
|
-
editionID,
|
|
70
|
-
(ed) => {
|
|
71
|
-
if (ed) {
|
|
72
|
-
// Before setting the new edition, augmented it with the chapter text.
|
|
73
|
-
edition.set(
|
|
74
|
-
$chapterText
|
|
75
|
-
? ed.withChapterText($chapterText)
|
|
76
|
-
: ed
|
|
77
|
-
);
|
|
78
|
-
} else {
|
|
79
|
-
edition.set(undefined);
|
|
80
|
-
error = 'Unable to load edition';
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
);
|
|
84
|
-
|
|
85
|
-
chaptersUnsub = listenToChapters(
|
|
86
|
-
$book.ref.id,
|
|
87
|
-
editionID,
|
|
88
|
-
(chapters) => {
|
|
89
|
-
// Update the chapter text store.
|
|
90
|
-
chapterText.set(chapters);
|
|
91
|
-
// Update the chapter text in the current edition.
|
|
92
|
-
if ($edition)
|
|
93
|
-
edition.set($edition.withChapterText(chapters));
|
|
94
|
-
}
|
|
95
|
-
);
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
// Whenever the book or page changes, change the listener.
|
|
101
|
-
$: if ($page && $auth && $auth.user !== null) listen();
|
|
102
|
-
|
|
103
|
-
// When unmounted, unset the stores — no longer viewing a book.
|
|
104
|
-
onDestroy(() => {
|
|
105
|
-
edition.set(undefined);
|
|
106
|
-
unsub();
|
|
107
|
-
});
|
|
108
|
-
</script>
|
|
109
|
-
|
|
110
|
-
{#if $book === undefined || error}
|
|
111
|
-
<Feedback error>Unable to load edition.</Feedback>
|
|
112
|
-
{:else if $edition === undefined}
|
|
113
|
-
<Loading />
|
|
114
|
-
{:else}
|
|
115
|
-
<Edition
|
|
116
|
-
edition={$edition}
|
|
117
|
-
base={write
|
|
118
|
-
? `/write/${$book.getRefID()}/${$edition.getEditionNumber()}`
|
|
119
|
-
: `/${$book.getSubdomain() ?? $book.getRefID()}`}
|
|
120
|
-
>
|
|
121
|
-
<slot />
|
|
122
|
-
</Edition>
|
|
123
|
-
{/if}
|
|
@@ -1,94 +0,0 @@
|
|
|
1
|
-
<script lang="ts">
|
|
2
|
-
import { onMount } from 'svelte';
|
|
3
|
-
import Loading from '$lib/components/page/Loading.svelte';
|
|
4
|
-
|
|
5
|
-
export let title: string;
|
|
6
|
-
export let afterLoaded: Function | undefined = undefined;
|
|
7
|
-
|
|
8
|
-
let loaded = false;
|
|
9
|
-
let lastHeight = 0;
|
|
10
|
-
let intervalID: NodeJS.Timer | null = null;
|
|
11
|
-
let mountTime = Date.now();
|
|
12
|
-
|
|
13
|
-
function watchLoading() {
|
|
14
|
-
const bodyHeight = document.body.clientHeight;
|
|
15
|
-
|
|
16
|
-
// If the height hasn't changed and images are loaded OR it's been 2 seconds, load.
|
|
17
|
-
if (
|
|
18
|
-
(lastHeight === bodyHeight && imagesAreLoaded()) ||
|
|
19
|
-
Date.now() - mountTime > 2000
|
|
20
|
-
) {
|
|
21
|
-
// Stop watching the images
|
|
22
|
-
stopWatching();
|
|
23
|
-
// Set to loaded to hide the overlay and notify callback if there is one.
|
|
24
|
-
loaded = true;
|
|
25
|
-
if (afterLoaded) afterLoaded();
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
// Remember the last height
|
|
29
|
-
lastHeight = bodyHeight;
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
function stopWatching() {
|
|
33
|
-
if (intervalID) clearInterval(intervalID);
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
onMount(() => {
|
|
37
|
-
// Watch the height of the document and wait until it's been stable for a while before scrolling
|
|
38
|
-
// to any targets. We use the data below to monitor the document height over time.
|
|
39
|
-
intervalID = setInterval(() => watchLoading(), 50);
|
|
40
|
-
|
|
41
|
-
return () => stopWatching();
|
|
42
|
-
});
|
|
43
|
-
|
|
44
|
-
function imagesAreLoaded() {
|
|
45
|
-
let done = true;
|
|
46
|
-
Array.from(document.getElementsByTagName('img')).forEach((el) => {
|
|
47
|
-
done = done && el.complete;
|
|
48
|
-
});
|
|
49
|
-
return done;
|
|
50
|
-
}
|
|
51
|
-
</script>
|
|
52
|
-
|
|
53
|
-
<svelte:head>
|
|
54
|
-
<title>{title}</title>
|
|
55
|
-
<meta name="description" content={title} />
|
|
56
|
-
</svelte:head>
|
|
57
|
-
|
|
58
|
-
<section class={'bookish-page' + (loaded ? ' loaded' : '')}>
|
|
59
|
-
<slot />
|
|
60
|
-
</section>
|
|
61
|
-
<!-- Overlay loading feedback if loading, but still render the page. -->
|
|
62
|
-
{#if loaded === false}
|
|
63
|
-
<Loading />
|
|
64
|
-
{/if}
|
|
65
|
-
|
|
66
|
-
<style>
|
|
67
|
-
/* A page, such as table of contents, chapter, or references */
|
|
68
|
-
.bookish-page {
|
|
69
|
-
max-width: 720px;
|
|
70
|
-
|
|
71
|
-
/* This helps marginals relative to the page */
|
|
72
|
-
position: relative;
|
|
73
|
-
|
|
74
|
-
/* To make room for navigation footer. Without this, the page is too short to show it. */
|
|
75
|
-
padding-left: var(--bookish-block-padding);
|
|
76
|
-
padding-right: var(--bookish-block-padding);
|
|
77
|
-
padding-bottom: 5em;
|
|
78
|
-
|
|
79
|
-
/* Center the application in the viewport */
|
|
80
|
-
margin-top: 0;
|
|
81
|
-
margin-left: auto;
|
|
82
|
-
margin-right: auto;
|
|
83
|
-
|
|
84
|
-
/* Hidden by default until tagged as loaded */
|
|
85
|
-
opacity: 0;
|
|
86
|
-
transition: opacity 0.25s ease-in;
|
|
87
|
-
|
|
88
|
-
z-index: 1;
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
.loaded {
|
|
92
|
-
opacity: 1;
|
|
93
|
-
}
|
|
94
|
-
</style>
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
<script lang="ts">
|
|
2
|
-
import Chapter from '$lib/components/page/Chapter.svelte';
|
|
3
|
-
import { page } from '$app/stores';
|
|
4
|
-
import { getEdition } from '$lib/components/page/Contexts';
|
|
5
|
-
import Unknown from '$lib/components/page/Unknown.svelte';
|
|
6
|
-
|
|
7
|
-
$: edition = getEdition();
|
|
8
|
-
$: chapterID = $page.params.chapterid;
|
|
9
|
-
$: chapter = $edition?.getChapter(chapterID);
|
|
10
|
-
</script>
|
|
11
|
-
|
|
12
|
-
{#if chapter}
|
|
13
|
-
<Chapter {chapter} />
|
|
14
|
-
{:else}
|
|
15
|
-
<Unknown>This chapter doesn't exist...</Unknown>
|
|
16
|
-
{/if}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
<script lang="ts">
|
|
2
|
-
import FormatNode from '$lib/models/chapter/FormatNode';
|
|
3
|
-
import type Ref from '$lib/models/book/Reference';
|
|
4
|
-
import Format from '../chapter/Format.svelte';
|
|
5
|
-
import Reference from './Reference.svelte';
|
|
6
|
-
|
|
7
|
-
export let node: FormatNode | Ref;
|
|
8
|
-
</script>
|
|
9
|
-
|
|
10
|
-
{#if node instanceof FormatNode}
|
|
11
|
-
<Format {node} />
|
|
12
|
-
{:else}
|
|
13
|
-
<Reference reference={node} />
|
|
14
|
-
{/if}
|
|
@@ -1,153 +0,0 @@
|
|
|
1
|
-
<script lang="ts">
|
|
2
|
-
import Header from './Header.svelte';
|
|
3
|
-
import Outline from './Outline.svelte';
|
|
4
|
-
import Page from './Page.svelte';
|
|
5
|
-
import Link from '../Link.svelte';
|
|
6
|
-
import Chapter from '$lib/models/book/Chapter';
|
|
7
|
-
import type { Match } from '$lib/models/book/Chapter';
|
|
8
|
-
import ChapterIDs from '$lib/models/book/ChapterID';
|
|
9
|
-
import { getBase, getEdition, isEditionEditable } from './Contexts';
|
|
10
|
-
import TextInput from '../app/TextInput.svelte';
|
|
11
|
-
import ChapterTitle from './ChapterTitle.svelte';
|
|
12
|
-
import ChapterNumber from './ChapterNumber.svelte';
|
|
13
|
-
import PageHeader from './PageHeader.svelte';
|
|
14
|
-
|
|
15
|
-
let edition = getEdition();
|
|
16
|
-
let base = getBase();
|
|
17
|
-
|
|
18
|
-
let query = '';
|
|
19
|
-
|
|
20
|
-
let results: (
|
|
21
|
-
| Chapter
|
|
22
|
-
| { link: string; left: string; match: string; right: string }
|
|
23
|
-
)[] = [];
|
|
24
|
-
$: {
|
|
25
|
-
// Reset the results
|
|
26
|
-
results = [];
|
|
27
|
-
|
|
28
|
-
const lowerQuery = query.toLowerCase();
|
|
29
|
-
|
|
30
|
-
query = query.trim();
|
|
31
|
-
|
|
32
|
-
// Go through all the chapter indexes and find matches.
|
|
33
|
-
if ($edition && query.length > 2)
|
|
34
|
-
for (const chapter of $edition?.getChapters() ?? []) {
|
|
35
|
-
let index = chapter.getIndex($edition);
|
|
36
|
-
// No index yet? Skip this chapter.
|
|
37
|
-
if (index) {
|
|
38
|
-
// Build a DOM to render matches.
|
|
39
|
-
const chapterMatches: Match[] = [];
|
|
40
|
-
|
|
41
|
-
// What are all of the words in the index that match the query?
|
|
42
|
-
for (const word of Object.keys(index)) {
|
|
43
|
-
if (query.length > 0 && word.indexOf(lowerQuery) >= 0) {
|
|
44
|
-
if (index) {
|
|
45
|
-
let matches = index[word];
|
|
46
|
-
matches.forEach((match: Match) => {
|
|
47
|
-
chapterMatches.push(match);
|
|
48
|
-
});
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
if (chapterMatches.length > 0) {
|
|
54
|
-
results.push(chapter);
|
|
55
|
-
chapterMatches.forEach((match, index) => {
|
|
56
|
-
// Only highlight the part of the word that matches.
|
|
57
|
-
const start = match.match
|
|
58
|
-
.toLowerCase()
|
|
59
|
-
.indexOf(lowerQuery);
|
|
60
|
-
results.push({
|
|
61
|
-
link: `${$base}/${chapter.getID()}?word=${match.match.toLowerCase()}&number=${index}`,
|
|
62
|
-
left:
|
|
63
|
-
match.left +
|
|
64
|
-
match.match.substring(0, start),
|
|
65
|
-
match: match.match.substring(
|
|
66
|
-
start,
|
|
67
|
-
start + query.length
|
|
68
|
-
),
|
|
69
|
-
right:
|
|
70
|
-
match.match.substring(
|
|
71
|
-
start + query.length
|
|
72
|
-
) + match.right,
|
|
73
|
-
});
|
|
74
|
-
});
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
</script>
|
|
80
|
-
|
|
81
|
-
{#if $edition}
|
|
82
|
-
<Page title={`${$edition.getTitle()} - Search`}>
|
|
83
|
-
<Header
|
|
84
|
-
editable={isEditionEditable()}
|
|
85
|
-
label="Search title"
|
|
86
|
-
getImage={() => $edition?.getImage(ChapterIDs.SearchID) ?? null}
|
|
87
|
-
setImage={(embed) =>
|
|
88
|
-
$edition
|
|
89
|
-
? edition.set(
|
|
90
|
-
$edition.withImage(ChapterIDs.SearchID, embed)
|
|
91
|
-
)
|
|
92
|
-
: undefined}
|
|
93
|
-
header="Search"
|
|
94
|
-
id="search"
|
|
95
|
-
tags={$edition.getTags()}
|
|
96
|
-
>
|
|
97
|
-
<Outline
|
|
98
|
-
slot="outline"
|
|
99
|
-
previous={$edition.getPreviousChapterID(ChapterIDs.SearchID)}
|
|
100
|
-
next={$edition.getNextChapterID(ChapterIDs.SearchID)}
|
|
101
|
-
/>
|
|
102
|
-
</Header>
|
|
103
|
-
|
|
104
|
-
<p>
|
|
105
|
-
Type a word—just a single word—and we'll show its occurrences in
|
|
106
|
-
this book:
|
|
107
|
-
</p>
|
|
108
|
-
|
|
109
|
-
<p>
|
|
110
|
-
<TextInput
|
|
111
|
-
type="text"
|
|
112
|
-
placeholder={'search for a word'}
|
|
113
|
-
disabled={false}
|
|
114
|
-
bind:text={query}
|
|
115
|
-
/>
|
|
116
|
-
</p>
|
|
117
|
-
|
|
118
|
-
{#if query.trim() !== ''}
|
|
119
|
-
{#if query.trim().length < 3}
|
|
120
|
-
<p>Keep typing...</p>
|
|
121
|
-
{:else if results.length === 0}
|
|
122
|
-
<p>No occurrence of <em>{query}</em>.</p>
|
|
123
|
-
{:else}
|
|
124
|
-
<p
|
|
125
|
-
>Found {results.filter(
|
|
126
|
-
(result) => !(result instanceof Chapter)
|
|
127
|
-
).length} occurrences of <em>{query}</em>...</p
|
|
128
|
-
>
|
|
129
|
-
{#each results as result}
|
|
130
|
-
{#if result instanceof Chapter}
|
|
131
|
-
<PageHeader id={'header-' + result.getID()}
|
|
132
|
-
><ChapterNumber
|
|
133
|
-
>Chapter{#if $edition.getChapterNumber(result.getID()) !== undefined} {$edition.getChapterNumber(
|
|
134
|
-
result.getID()
|
|
135
|
-
)}{/if}</ChapterNumber
|
|
136
|
-
> - <ChapterTitle>{result.getTitle()}</ChapterTitle
|
|
137
|
-
></PageHeader
|
|
138
|
-
>
|
|
139
|
-
{:else}
|
|
140
|
-
<p
|
|
141
|
-
><Link to={result.link}
|
|
142
|
-
>...{result.left}<span
|
|
143
|
-
class="bookish-content-highlight"
|
|
144
|
-
>{result.match}</span
|
|
145
|
-
>{result.right}...</Link
|
|
146
|
-
></p
|
|
147
|
-
>
|
|
148
|
-
{/if}
|
|
149
|
-
{/each}
|
|
150
|
-
{/if}
|
|
151
|
-
{/if}
|
|
152
|
-
</Page>
|
|
153
|
-
{/if}
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
<script lang="ts">
|
|
2
|
-
import EmbedNode from '$lib/models/chapter/EmbedNode';
|
|
3
|
-
import Parser from '$lib/models/chapter/Parser';
|
|
4
|
-
import { getBase, getEdition } from './Contexts';
|
|
5
|
-
|
|
6
|
-
export let embed: string | null;
|
|
7
|
-
|
|
8
|
-
let edition = getEdition();
|
|
9
|
-
let base = getBase();
|
|
10
|
-
|
|
11
|
-
$: embedNode = embed === null ? null : Parser.parseEmbed($edition, embed);
|
|
12
|
-
</script>
|
|
13
|
-
|
|
14
|
-
{#if embedNode instanceof EmbedNode}
|
|
15
|
-
<img
|
|
16
|
-
style="width: 5em"
|
|
17
|
-
src={embedNode.isLocal()
|
|
18
|
-
? `${$base}/${embedNode.getSmallURL()}`
|
|
19
|
-
: embedNode.getSmallURL()}
|
|
20
|
-
alt={embedNode.getDescription()}
|
|
21
|
-
/>
|
|
22
|
-
{/if}
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
<script lang="ts">
|
|
2
|
-
import PageHeader from './PageHeader.svelte';
|
|
3
|
-
import Rows from './Rows.svelte';
|
|
4
|
-
import ThemeVariableEditor from './ThemeVariableEditor.svelte';
|
|
5
|
-
|
|
6
|
-
export let header: string;
|
|
7
|
-
export let group: string;
|
|
8
|
-
export let properties: Record<string, string>;
|
|
9
|
-
</script>
|
|
10
|
-
|
|
11
|
-
<PageHeader>{header}</PageHeader>
|
|
12
|
-
|
|
13
|
-
<Rows>
|
|
14
|
-
{#each Object.keys(properties).sort() as property}
|
|
15
|
-
<ThemeVariableEditor
|
|
16
|
-
{group}
|
|
17
|
-
name={property}
|
|
18
|
-
value={properties[property]}
|
|
19
|
-
/>
|
|
20
|
-
{/each}
|
|
21
|
-
</Rows>
|