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,47 @@
|
|
|
1
|
+
import { type Writable } from 'svelte/store';
|
|
2
|
+
import type Book from '../../models/book/Book';
|
|
3
|
+
import type Chapter from '../../models/book/Chapter';
|
|
4
|
+
import type BookSaveStatus from '../../models/book/BookSaveStatus';
|
|
5
|
+
import type Edition from '../../models/book/Edition';
|
|
6
|
+
import type Authentication from '../Authentication';
|
|
7
|
+
import type CaretState from '../editor/CaretState';
|
|
8
|
+
import type ChapterContext from './ChapterContext';
|
|
9
|
+
import type { DocumentReference } from 'firebase/firestore';
|
|
10
|
+
export type DarkModeStore = Writable<boolean>;
|
|
11
|
+
export declare const DARK_MODE: unique symbol;
|
|
12
|
+
export declare function getDarkMode(): DarkModeStore;
|
|
13
|
+
export type UserStore = Writable<Authentication | undefined>;
|
|
14
|
+
export declare const USER: unique symbol;
|
|
15
|
+
export declare function getUser(): UserStore;
|
|
16
|
+
export type BookStore = Writable<Book | undefined>;
|
|
17
|
+
export declare const BOOK: unique symbol;
|
|
18
|
+
export declare function getBook(): BookStore;
|
|
19
|
+
export type EditionStore = Writable<Edition | undefined>;
|
|
20
|
+
export declare const EDITION: unique symbol;
|
|
21
|
+
export declare function getEdition(): EditionStore;
|
|
22
|
+
export type ChapterText = [DocumentReference, string][];
|
|
23
|
+
export type ChapterTextStore = Writable<ChapterText | undefined>;
|
|
24
|
+
export declare const CHAPTERTEXT: unique symbol;
|
|
25
|
+
export declare function getChapterText(): ChapterTextStore;
|
|
26
|
+
export type ChapterStore = Writable<ChapterContext>;
|
|
27
|
+
export declare const CHAPTER: unique symbol;
|
|
28
|
+
export declare function getChapter(): ChapterStore;
|
|
29
|
+
/**
|
|
30
|
+
* Update the edition that contains the chapter, then update the
|
|
31
|
+
* global edition store with the new edition, propogating the changes everywhere.
|
|
32
|
+
*/
|
|
33
|
+
export declare function setChapter(store: EditionStore, previous: Chapter, chapter: Chapter): void;
|
|
34
|
+
export declare function isChapterEditable(): boolean;
|
|
35
|
+
export declare function isEditionEditable(): boolean;
|
|
36
|
+
export declare function isEditionPartiallyEditable(): boolean;
|
|
37
|
+
export declare function isBookEditable(): boolean;
|
|
38
|
+
export declare const BASE: unique symbol;
|
|
39
|
+
export type BaseStore = Writable<string>;
|
|
40
|
+
export declare function getBase(): BaseStore;
|
|
41
|
+
export declare const CARET: unique symbol;
|
|
42
|
+
export declare function getCaret(): Writable<CaretState | undefined>;
|
|
43
|
+
export declare const STATUS: unique symbol;
|
|
44
|
+
export type StatusStore = Writable<BookSaveStatus>;
|
|
45
|
+
export declare function getStatus(): StatusStore;
|
|
46
|
+
export declare function lease(authStore: UserStore, editionStore: EditionStore, contentID: string, lock: boolean): Promise<boolean>;
|
|
47
|
+
export declare function getLeasee(authStore: UserStore, editionStore: EditionStore, contentID: string): string | boolean;
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
// We use these unique objects as keys in Svelte context in order
|
|
2
|
+
// to avoid key collisions and prevent typos. This is partly
|
|
3
|
+
// future-proofing, but also because getContext<Type>() isn't type safe,
|
|
4
|
+
// as the resulting value is coerced to Type even if it's not that value.
|
|
5
|
+
import { getContext } from 'svelte';
|
|
6
|
+
import { get } from 'svelte/store';
|
|
7
|
+
import { page } from '$app/stores';
|
|
8
|
+
import { updateLock } from '../../models/CRUD';
|
|
9
|
+
export const DARK_MODE = Symbol('dark');
|
|
10
|
+
export function getDarkMode() {
|
|
11
|
+
return getContext(DARK_MODE);
|
|
12
|
+
}
|
|
13
|
+
export const USER = Symbol('user');
|
|
14
|
+
export function getUser() {
|
|
15
|
+
return getContext(USER);
|
|
16
|
+
}
|
|
17
|
+
export const BOOK = Symbol('book');
|
|
18
|
+
export function getBook() {
|
|
19
|
+
return getContext(BOOK);
|
|
20
|
+
}
|
|
21
|
+
export const EDITION = Symbol('edition');
|
|
22
|
+
export function getEdition() {
|
|
23
|
+
return getContext(EDITION);
|
|
24
|
+
}
|
|
25
|
+
export const CHAPTERTEXT = Symbol('chaptertext');
|
|
26
|
+
export function getChapterText() {
|
|
27
|
+
return getContext(CHAPTERTEXT);
|
|
28
|
+
}
|
|
29
|
+
export const CHAPTER = Symbol('chapter');
|
|
30
|
+
export function getChapter() {
|
|
31
|
+
return getContext(CHAPTER);
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Update the edition that contains the chapter, then update the
|
|
35
|
+
* global edition store with the new edition, propogating the changes everywhere.
|
|
36
|
+
*/
|
|
37
|
+
export function setChapter(store, previous, chapter) {
|
|
38
|
+
const edition = get(store);
|
|
39
|
+
if (edition)
|
|
40
|
+
store.set(edition.withRevisedChapter(previous, chapter));
|
|
41
|
+
}
|
|
42
|
+
export function isChapterEditable() {
|
|
43
|
+
if (!get(page).route.id?.startsWith('/write'))
|
|
44
|
+
return false;
|
|
45
|
+
const auth = get(getUser());
|
|
46
|
+
const chapter = get(getChapter());
|
|
47
|
+
const edition = get(getEdition());
|
|
48
|
+
const book = get(getBook());
|
|
49
|
+
return (chapter !== undefined &&
|
|
50
|
+
edition !== undefined &&
|
|
51
|
+
book !== undefined &&
|
|
52
|
+
auth !== undefined &&
|
|
53
|
+
auth.user !== null &&
|
|
54
|
+
(chapter.chapter.isEditor(auth.user.uid) ||
|
|
55
|
+
edition.isEditor(auth.user.uid) ||
|
|
56
|
+
book.isEditor(auth.user.uid)));
|
|
57
|
+
}
|
|
58
|
+
export function isEditionEditable() {
|
|
59
|
+
if (!get(page).route.id?.startsWith('/write'))
|
|
60
|
+
return false;
|
|
61
|
+
const auth = get(getUser());
|
|
62
|
+
const edition = get(getEdition());
|
|
63
|
+
const book = get(getBook());
|
|
64
|
+
return (edition !== undefined &&
|
|
65
|
+
book !== undefined &&
|
|
66
|
+
auth !== undefined &&
|
|
67
|
+
auth.user !== null &&
|
|
68
|
+
(edition.isEditor(auth.user.uid) || book.isEditor(auth.user.uid)));
|
|
69
|
+
}
|
|
70
|
+
export function isEditionPartiallyEditable() {
|
|
71
|
+
if (!get(page).route.id?.startsWith('/write'))
|
|
72
|
+
return false;
|
|
73
|
+
const auth = get(getUser());
|
|
74
|
+
const edition = get(getEdition());
|
|
75
|
+
return (edition !== undefined &&
|
|
76
|
+
auth !== undefined &&
|
|
77
|
+
auth.user !== null &&
|
|
78
|
+
edition.isChapterEditor(auth.user.uid));
|
|
79
|
+
}
|
|
80
|
+
export function isBookEditable() {
|
|
81
|
+
if (!get(page).route.id?.startsWith('/write'))
|
|
82
|
+
return false;
|
|
83
|
+
const auth = get(getUser());
|
|
84
|
+
const book = get(getBook());
|
|
85
|
+
return (book !== undefined &&
|
|
86
|
+
auth !== undefined &&
|
|
87
|
+
auth.user !== null &&
|
|
88
|
+
book.isEditor(auth.user.uid));
|
|
89
|
+
}
|
|
90
|
+
export const BASE = Symbol('base');
|
|
91
|
+
export function getBase() {
|
|
92
|
+
return getContext(BASE);
|
|
93
|
+
}
|
|
94
|
+
export const CARET = Symbol('caret');
|
|
95
|
+
export function getCaret() {
|
|
96
|
+
return getContext(CARET);
|
|
97
|
+
}
|
|
98
|
+
export const STATUS = Symbol('status');
|
|
99
|
+
export function getStatus() {
|
|
100
|
+
return getContext(STATUS);
|
|
101
|
+
}
|
|
102
|
+
export async function lease(authStore, editionStore, contentID, lock) {
|
|
103
|
+
const edition = get(editionStore);
|
|
104
|
+
const auth = get(authStore);
|
|
105
|
+
if (edition && auth && auth.user) {
|
|
106
|
+
await updateLock(edition, auth.user.uid, contentID, lock);
|
|
107
|
+
const latestEdition = get(editionStore);
|
|
108
|
+
const latestAuth = get(authStore);
|
|
109
|
+
if (latestEdition && latestAuth && latestAuth.user) {
|
|
110
|
+
editionStore.set(latestEdition.withLock(latestAuth.user.uid, contentID, lock));
|
|
111
|
+
return true;
|
|
112
|
+
}
|
|
113
|
+
else
|
|
114
|
+
return false;
|
|
115
|
+
}
|
|
116
|
+
else
|
|
117
|
+
return false;
|
|
118
|
+
}
|
|
119
|
+
export function getLeasee(authStore, editionStore, contentID) {
|
|
120
|
+
const edition = get(editionStore);
|
|
121
|
+
const auth = get(authStore);
|
|
122
|
+
if (edition !== undefined && auth !== undefined && auth.user !== null) {
|
|
123
|
+
const leasee = edition.getLeasee(contentID);
|
|
124
|
+
if (leasee === undefined)
|
|
125
|
+
return false;
|
|
126
|
+
else if (leasee === auth.user.uid)
|
|
127
|
+
return true;
|
|
128
|
+
else
|
|
129
|
+
return leasee;
|
|
130
|
+
}
|
|
131
|
+
else
|
|
132
|
+
return false;
|
|
133
|
+
}
|
|
@@ -1,57 +1,42 @@
|
|
|
1
|
-
<script
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
// Focus after adding a new synonym.
|
|
27
|
-
let newSynonym = false;
|
|
28
|
-
let synonymsEditor: HTMLSpanElement | null = null;
|
|
29
|
-
|
|
30
|
-
afterUpdate(() => {
|
|
31
|
-
if (newSynonym && synonymsEditor) {
|
|
32
|
-
const editors = synonymsEditor.querySelectorAll('input');
|
|
33
|
-
if (editors.length > 0) {
|
|
34
|
-
const last = editors[editors.length - 1];
|
|
35
|
-
if (last instanceof HTMLElement) last.focus();
|
|
36
|
-
}
|
|
37
|
-
newSynonym = false;
|
|
1
|
+
<script>import Parser from '../../models/chapter/Parser';
|
|
2
|
+
import ConfirmButton from '../editor/ConfirmButton.svelte';
|
|
3
|
+
import TextEditor from '../editor/TextEditor.svelte';
|
|
4
|
+
import BookishEditor from '../editor/BookishEditor.svelte';
|
|
5
|
+
import Format from '../chapter/Format.svelte';
|
|
6
|
+
import Note from '../editor/Note.svelte';
|
|
7
|
+
import { afterUpdate } from 'svelte';
|
|
8
|
+
import { getUser, getEdition, getLeasee, isChapterEditable, lease, } from './Contexts';
|
|
9
|
+
import Button from '../app/Button.svelte';
|
|
10
|
+
export let id;
|
|
11
|
+
export let definition;
|
|
12
|
+
let auth = getUser();
|
|
13
|
+
let edition = getEdition();
|
|
14
|
+
let editable = isChapterEditable();
|
|
15
|
+
// Focus after adding a new synonym.
|
|
16
|
+
let newSynonym = false;
|
|
17
|
+
let synonymsEditor = null;
|
|
18
|
+
afterUpdate(() => {
|
|
19
|
+
if (newSynonym && synonymsEditor) {
|
|
20
|
+
const editors = synonymsEditor.querySelectorAll('input');
|
|
21
|
+
if (editors.length > 0) {
|
|
22
|
+
const last = editors[editors.length - 1];
|
|
23
|
+
if (last instanceof HTMLElement)
|
|
24
|
+
last.focus();
|
|
38
25
|
}
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
function addSynonym() {
|
|
42
|
-
if ($edition) {
|
|
43
|
-
edition.set(
|
|
44
|
-
$edition.withEditedDefinition(id, {
|
|
45
|
-
phrase: definition.phrase,
|
|
46
|
-
definition: definition.definition,
|
|
47
|
-
synonyms: [...(definition.synonyms ?? []), ''],
|
|
48
|
-
})
|
|
49
|
-
);
|
|
50
|
-
}
|
|
51
|
-
newSynonym = true;
|
|
26
|
+
newSynonym = false;
|
|
52
27
|
}
|
|
53
|
-
|
|
54
|
-
|
|
28
|
+
});
|
|
29
|
+
function addSynonym() {
|
|
30
|
+
if ($edition) {
|
|
31
|
+
edition.set($edition.withEditedDefinition(id, {
|
|
32
|
+
phrase: definition.phrase,
|
|
33
|
+
definition: definition.definition,
|
|
34
|
+
synonyms: [...(definition.synonyms ?? []), ''],
|
|
35
|
+
}));
|
|
36
|
+
}
|
|
37
|
+
newSynonym = true;
|
|
38
|
+
}
|
|
39
|
+
$: syns = definition.synonyms || [];
|
|
55
40
|
</script>
|
|
56
41
|
|
|
57
42
|
{#if $edition}
|
|
@@ -174,7 +159,7 @@
|
|
|
174
159
|
<style>
|
|
175
160
|
dd {
|
|
176
161
|
margin: 0;
|
|
177
|
-
margin-
|
|
162
|
+
margin-bottom: var(--bookish-paragraph-spacing);
|
|
178
163
|
}
|
|
179
164
|
|
|
180
165
|
dt {
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { SvelteComponentTyped } from "svelte";
|
|
2
|
+
import type Definition from '../../models/book/Definition';
|
|
3
|
+
declare const __propDef: {
|
|
4
|
+
props: {
|
|
5
|
+
id: string;
|
|
6
|
+
definition: Definition;
|
|
7
|
+
};
|
|
8
|
+
events: {
|
|
9
|
+
[evt: string]: CustomEvent<any>;
|
|
10
|
+
};
|
|
11
|
+
slots: {};
|
|
12
|
+
};
|
|
13
|
+
export type DefinitionViewProps = typeof __propDef.props;
|
|
14
|
+
export type DefinitionViewEvents = typeof __propDef.events;
|
|
15
|
+
export type DefinitionViewSlots = typeof __propDef.slots;
|
|
16
|
+
export default class DefinitionView extends SvelteComponentTyped<DefinitionViewProps, DefinitionViewEvents, DefinitionViewSlots> {
|
|
17
|
+
}
|
|
18
|
+
export {};
|
|
@@ -1,18 +1,10 @@
|
|
|
1
|
-
<script
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
getLeasee,
|
|
9
|
-
isEditionEditable,
|
|
10
|
-
lease,
|
|
11
|
-
} from './Contexts';
|
|
12
|
-
|
|
13
|
-
let auth = getUser();
|
|
14
|
-
let editable = isEditionEditable();
|
|
15
|
-
let edition = getEdition();
|
|
1
|
+
<script>import Parser from '../../models/chapter/Parser';
|
|
2
|
+
import ChapterBody from '../chapter/ChapterBody.svelte';
|
|
3
|
+
import BookishEditor from '../editor/BookishEditor.svelte';
|
|
4
|
+
import { getUser, getEdition, getLeasee, isEditionEditable, lease, } from './Contexts';
|
|
5
|
+
let auth = getUser();
|
|
6
|
+
let editable = isEditionEditable();
|
|
7
|
+
let edition = getEdition();
|
|
16
8
|
</script>
|
|
17
9
|
|
|
18
10
|
{#if $edition}
|
|
@@ -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 DescriptionProps = typeof __propDef.props;
|
|
10
|
+
export type DescriptionEvents = typeof __propDef.events;
|
|
11
|
+
export type DescriptionSlots = typeof __propDef.slots;
|
|
12
|
+
export default class Description extends SvelteComponentTyped<DescriptionProps, DescriptionEvents, DescriptionSlots> {
|
|
13
|
+
}
|
|
14
|
+
export {};
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
<script>import smoothscroll from 'smoothscroll-polyfill';
|
|
2
|
+
import { goto } from '$app/navigation';
|
|
3
|
+
import { onMount, setContext } from 'svelte';
|
|
4
|
+
import { writable } from 'svelte/store';
|
|
5
|
+
import { BASE, DARK_MODE, } from './Contexts';
|
|
6
|
+
import { BookishTheme } from '../../models/book/Theme';
|
|
7
|
+
// Poly fill smooth scrolling for Safari.
|
|
8
|
+
onMount(() => smoothscroll.polyfill());
|
|
9
|
+
// The book edition to render.
|
|
10
|
+
export let edition;
|
|
11
|
+
// The base path allows links to adjust to different routing contexts in which a book is placed.
|
|
12
|
+
// For example, when the book is hosted alone, all routes might start with the bare root "/",
|
|
13
|
+
// but when the book is being viewed or edited in the Bookish app, it needs a prefix for the
|
|
14
|
+
// route in the app.
|
|
15
|
+
export let base = '';
|
|
16
|
+
// When the base changes, update the context.
|
|
17
|
+
let baseStore = writable(base);
|
|
18
|
+
$: setContext(BASE, baseStore);
|
|
19
|
+
$: baseStore.set(base);
|
|
20
|
+
// Default dark mode to whatever's stored in local storage, if anything.
|
|
21
|
+
// respect user choice on the website despite the system theme
|
|
22
|
+
let darkMode = writable(typeof localStorage !== 'undefined' &&
|
|
23
|
+
localStorage.getItem('dark') !== 'false' &&
|
|
24
|
+
(localStorage.getItem('dark') === 'true' || // A previous setting
|
|
25
|
+
window.matchMedia('(prefers-color-scheme: dark)').matches) // Operating system is set to dark
|
|
26
|
+
);
|
|
27
|
+
// Expose dark mode to descendants
|
|
28
|
+
setContext(DARK_MODE, darkMode);
|
|
29
|
+
// When dark mode changes, update the body's class list.
|
|
30
|
+
$: {
|
|
31
|
+
if (typeof document !== 'undefined') {
|
|
32
|
+
if ($darkMode)
|
|
33
|
+
document.body.classList.add('dark');
|
|
34
|
+
else
|
|
35
|
+
document.body.classList.remove('dark');
|
|
36
|
+
if (typeof localStorage !== 'undefined')
|
|
37
|
+
localStorage.setItem('dark', $darkMode ? 'true' : 'false');
|
|
38
|
+
// Set the theme, whatever it is, and change it when the edition changes
|
|
39
|
+
setTheme(edition.getTheme() ?? BookishTheme);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
// Set the theme on mount.
|
|
43
|
+
onMount(() => {
|
|
44
|
+
setTheme(edition.getTheme() ?? BookishTheme);
|
|
45
|
+
});
|
|
46
|
+
// Redirect old hash routes by simply replacing their hash before routing.
|
|
47
|
+
if (typeof window !== 'undefined' && window.location.hash.startsWith('#/'))
|
|
48
|
+
goto(location.hash.replace('#', ''));
|
|
49
|
+
/** Given a theme, sets the appropriate CSS rules in the browser to apply the theme.*/
|
|
50
|
+
function setTheme(theme) {
|
|
51
|
+
// If the theme is being unset, make sure we've removed any overrding style declaration.
|
|
52
|
+
// This let's the default theme kick in.
|
|
53
|
+
let themeTagImports = document.getElementById('bookish-theme-imports');
|
|
54
|
+
let themeTagCSS = document.getElementById('bookish-theme');
|
|
55
|
+
// We only want to set it if it's actually different than what's currently set.
|
|
56
|
+
// Otherwise during editing we get lots of jittery changes on each edit, because the
|
|
57
|
+
// whole edition is rerendering. To check this, we set a data attribute on the style tag containing
|
|
58
|
+
// a stringify of the theme set. We do this separately for the imports, since they can have more
|
|
59
|
+
// major changes than the spacing and color sizes, changing fonts especially.
|
|
60
|
+
const themeTagCSSValue = themeTagCSS?.dataset.css;
|
|
61
|
+
const themeTagImportsValue = themeTagImports?.dataset.imports;
|
|
62
|
+
const newThemeTagCSSValue = JSON.stringify(theme);
|
|
63
|
+
const newThemeTagImportsValue = JSON.stringify(theme?.imports);
|
|
64
|
+
if (theme !== null) {
|
|
65
|
+
// If the imports changed, update theme.
|
|
66
|
+
if (themeTagImportsValue !== newThemeTagImportsValue) {
|
|
67
|
+
// If it's being set, create a new style tag.
|
|
68
|
+
const newThemeImportsTag = document.createElement('style');
|
|
69
|
+
// Give it an ID so we can remove it later.
|
|
70
|
+
newThemeImportsTag.setAttribute('id', 'bookish-theme-imports');
|
|
71
|
+
newThemeImportsTag.dataset.imports = newThemeTagImportsValue;
|
|
72
|
+
// Insert any import statements, then any rules.
|
|
73
|
+
const css = `${(theme.imports ?? [])
|
|
74
|
+
.map((url) => `@import url(${url});`)
|
|
75
|
+
.join('\n')}`;
|
|
76
|
+
newThemeImportsTag.appendChild(document.createTextNode(css));
|
|
77
|
+
document.head.appendChild(newThemeImportsTag);
|
|
78
|
+
// Remove the old tag
|
|
79
|
+
themeTagImports?.remove();
|
|
80
|
+
}
|
|
81
|
+
// If the rules changed, update them.
|
|
82
|
+
if (themeTagCSSValue !== newThemeTagCSSValue) {
|
|
83
|
+
// If it's being set, create a new style tag.
|
|
84
|
+
const newThemeCSSTag = document.createElement('style');
|
|
85
|
+
// Give it an ID so we can remove it later.
|
|
86
|
+
newThemeCSSTag.setAttribute('id', 'bookish-theme');
|
|
87
|
+
newThemeCSSTag.dataset.css = newThemeTagCSSValue;
|
|
88
|
+
// Insert any import statements, then any rules.
|
|
89
|
+
const css = `
|
|
90
|
+
${(theme.imports ?? [])
|
|
91
|
+
.map((url) => `@import url(${url});`)
|
|
92
|
+
.join('\n')}
|
|
93
|
+
.bookish {
|
|
94
|
+
${theme.light ? toRules(theme.light) : ''}
|
|
95
|
+
${theme.fonts ? toRules(theme.fonts) : ''}
|
|
96
|
+
${theme.sizes ? toRules(theme.sizes) : ''}
|
|
97
|
+
${theme.weights ? toRules(theme.weights) : ''}
|
|
98
|
+
${theme.spacing ? toRules(theme.spacing) : ''}
|
|
99
|
+
}
|
|
100
|
+
.dark {
|
|
101
|
+
${theme.dark ? toRules(theme.dark) : ''}
|
|
102
|
+
}`;
|
|
103
|
+
newThemeCSSTag.appendChild(document.createTextNode(css));
|
|
104
|
+
document.head.appendChild(newThemeCSSTag);
|
|
105
|
+
// Remove the old tag
|
|
106
|
+
themeTagCSS?.remove();
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
else {
|
|
110
|
+
// Remove the old tags, unsetting the theme.
|
|
111
|
+
themeTagImports?.remove();
|
|
112
|
+
themeTagCSS?.remove();
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
function toRules(set) {
|
|
116
|
+
return Object.keys(set)
|
|
117
|
+
.map((name) => {
|
|
118
|
+
const value = set[name];
|
|
119
|
+
if (value.length > 0) {
|
|
120
|
+
const cssVariable = '--bookish-' +
|
|
121
|
+
name
|
|
122
|
+
.replace(/([a-z])([A-Z])/g, '$1 $2')
|
|
123
|
+
.split(' ')
|
|
124
|
+
.map((s) => s.toLowerCase())
|
|
125
|
+
.join('-')
|
|
126
|
+
.replace(/([0-9])/g, '-$1-');
|
|
127
|
+
return `${cssVariable}: ${value};`;
|
|
128
|
+
}
|
|
129
|
+
})
|
|
130
|
+
.join('\n\t\t');
|
|
131
|
+
}
|
|
132
|
+
</script>
|
|
133
|
+
|
|
134
|
+
<main class="bookish {$darkMode ? ' dark' : ''}">
|
|
135
|
+
<slot />
|
|
136
|
+
</main>
|
|
137
|
+
|
|
138
|
+
<style>
|
|
139
|
+
* {
|
|
140
|
+
box-sizing: border-box;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
/* WINDOW AND PAGES */
|
|
144
|
+
:global(body) {
|
|
145
|
+
margin: 0;
|
|
146
|
+
padding: 0;
|
|
147
|
+
background-color: var(--bookish-background-color);
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
/* The root container for a book */
|
|
151
|
+
.bookish {
|
|
152
|
+
font-weight: var(--bookish-paragraph-font-weight);
|
|
153
|
+
font-family: var(--bookish-paragraph-font-family);
|
|
154
|
+
font-size: var(--bookish-paragraph-font-size);
|
|
155
|
+
background-color: var(--bookish-background-color);
|
|
156
|
+
color: var(--bookish-paragraph-color);
|
|
157
|
+
width: 100%;
|
|
158
|
+
z-index: 0;
|
|
159
|
+
text-align: left;
|
|
160
|
+
}
|
|
161
|
+
</style>
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { SvelteComponentTyped } from "svelte";
|
|
2
|
+
import type EditionModel from '../../models/book/Edition';
|
|
3
|
+
declare const __propDef: {
|
|
4
|
+
props: {
|
|
5
|
+
edition: EditionModel;
|
|
6
|
+
base?: string | undefined;
|
|
7
|
+
};
|
|
8
|
+
events: {
|
|
9
|
+
[evt: string]: CustomEvent<any>;
|
|
10
|
+
};
|
|
11
|
+
slots: {
|
|
12
|
+
default: {};
|
|
13
|
+
};
|
|
14
|
+
};
|
|
15
|
+
export type EditionProps = typeof __propDef.props;
|
|
16
|
+
export type EditionEvents = typeof __propDef.events;
|
|
17
|
+
export type EditionSlots = typeof __propDef.slots;
|
|
18
|
+
export default class Edition extends SvelteComponentTyped<EditionProps, EditionEvents, EditionSlots> {
|
|
19
|
+
}
|
|
20
|
+
export {};
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
<script>import Loading from './Loading.svelte';
|
|
2
|
+
import Edition from './Edition.svelte';
|
|
3
|
+
import Feedback from '../app/Feedback.svelte';
|
|
4
|
+
import { getBook, getEdition, getUser, CHAPTERTEXT, getChapterText, } from './Contexts';
|
|
5
|
+
import { onDestroy } from 'svelte';
|
|
6
|
+
import { page } from '$app/stores';
|
|
7
|
+
import { listenToChapters, listenToEdition } from '../../models/CRUD';
|
|
8
|
+
export let write;
|
|
9
|
+
let auth = getUser();
|
|
10
|
+
let book = getBook();
|
|
11
|
+
let edition = getEdition();
|
|
12
|
+
let chapterText = getChapterText();
|
|
13
|
+
let editionUnsub = undefined;
|
|
14
|
+
let chaptersUnsub = undefined;
|
|
15
|
+
let error = undefined;
|
|
16
|
+
function unsub() {
|
|
17
|
+
// Unsubscribe to the old edition document if we were listening to one.
|
|
18
|
+
if (editionUnsub)
|
|
19
|
+
editionUnsub();
|
|
20
|
+
if (chaptersUnsub)
|
|
21
|
+
chaptersUnsub();
|
|
22
|
+
}
|
|
23
|
+
function listen() {
|
|
24
|
+
unsub();
|
|
25
|
+
error = undefined;
|
|
26
|
+
// If we no longer have a book, we can't get an edition.
|
|
27
|
+
if ($book === undefined) {
|
|
28
|
+
edition.set(undefined);
|
|
29
|
+
error = 'Unknown book.';
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
const editionNumber = $page.params.editionid;
|
|
34
|
+
const latestPublished = !write;
|
|
35
|
+
// Figure out which edition to load.
|
|
36
|
+
let editionID;
|
|
37
|
+
if (editionNumber === undefined) {
|
|
38
|
+
if (latestPublished) {
|
|
39
|
+
editionID = $book.getLatestPublishedEditionID();
|
|
40
|
+
if (editionID === undefined)
|
|
41
|
+
error = 'There is no published edition of this book.';
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
editionID = $book.getLatestEditionID();
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
editionID = $book.getEditionNumberID(parseFloat(editionNumber));
|
|
49
|
+
if (editionID === undefined)
|
|
50
|
+
error = `There is no ${editionNumber} edition of this book`;
|
|
51
|
+
}
|
|
52
|
+
// Listen to the doc for changes and listen to all of its chapters.
|
|
53
|
+
if (editionID !== undefined) {
|
|
54
|
+
editionUnsub = listenToEdition($book.ref.id, editionID, (ed) => {
|
|
55
|
+
if (ed) {
|
|
56
|
+
// Before setting the new edition, augmented it with the chapter text.
|
|
57
|
+
edition.set($chapterText
|
|
58
|
+
? ed.withChapterText($chapterText)
|
|
59
|
+
: ed);
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
edition.set(undefined);
|
|
63
|
+
error = 'Unable to load edition';
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
chaptersUnsub = listenToChapters($book.ref.id, editionID, (chapters) => {
|
|
67
|
+
// Update the chapter text store.
|
|
68
|
+
chapterText.set(chapters);
|
|
69
|
+
// Update the chapter text in the current edition.
|
|
70
|
+
if ($edition)
|
|
71
|
+
edition.set($edition.withChapterText(chapters));
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
// Whenever the book or page changes, change the listener.
|
|
77
|
+
$: if ($page && $auth && $auth.user !== null)
|
|
78
|
+
listen();
|
|
79
|
+
// When unmounted, unset the stores — no longer viewing a book.
|
|
80
|
+
onDestroy(() => {
|
|
81
|
+
edition.set(undefined);
|
|
82
|
+
unsub();
|
|
83
|
+
});
|
|
84
|
+
</script>
|
|
85
|
+
|
|
86
|
+
{#if $book === undefined || error}
|
|
87
|
+
<Feedback error>Unable to load edition.</Feedback>
|
|
88
|
+
{:else if $edition === undefined}
|
|
89
|
+
<Loading />
|
|
90
|
+
{:else}
|
|
91
|
+
<Edition
|
|
92
|
+
edition={$edition}
|
|
93
|
+
base={write
|
|
94
|
+
? `/write/${$book.getRefID()}/${$edition.getEditionNumber()}`
|
|
95
|
+
: `/${$book.getSubdomain() ?? $book.getRefID()}`}
|
|
96
|
+
>
|
|
97
|
+
<slot />
|
|
98
|
+
</Edition>
|
|
99
|
+
{/if}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { SvelteComponentTyped } from "svelte";
|
|
2
|
+
declare const __propDef: {
|
|
3
|
+
props: {
|
|
4
|
+
write: boolean;
|
|
5
|
+
};
|
|
6
|
+
events: {
|
|
7
|
+
[evt: string]: CustomEvent<any>;
|
|
8
|
+
};
|
|
9
|
+
slots: {
|
|
10
|
+
default: {};
|
|
11
|
+
};
|
|
12
|
+
};
|
|
13
|
+
export type EditionLoaderProps = typeof __propDef.props;
|
|
14
|
+
export type EditionLoaderEvents = typeof __propDef.events;
|
|
15
|
+
export type EditionLoaderSlots = typeof __propDef.slots;
|
|
16
|
+
export default class EditionLoader extends SvelteComponentTyped<EditionLoaderProps, EditionLoaderEvents, EditionLoaderSlots> {
|
|
17
|
+
}
|
|
18
|
+
export {};
|