bookish-press 0.5.1 → 0.5.4
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/README.md +3 -3
- package/{package → dist}/components/BookPreview.svelte +1 -0
- package/{package → dist}/components/chapter/Callout.svelte +0 -1
- package/{package → dist}/components/chapter/Citations.svelte +0 -3
- package/{package → dist}/components/chapter/Embed.svelte +8 -6
- package/dist/components/chapter/ExtendedPrism.d.ts +2 -0
- package/{package → dist}/components/chapter/Figure.svelte +2 -1
- package/{package → dist}/components/chapter/Footnote.svelte +1 -0
- package/{package → dist}/components/chapter/List.svelte +16 -33
- package/{package → dist}/components/chapter/Marginal.svelte +4 -1
- package/{package → dist}/components/chapter/Paragraph.svelte +7 -2
- package/{package → dist}/components/chapter/Python.svelte +2 -2
- package/{package → dist}/components/chapter/Quote.svelte +6 -6
- package/{package → dist}/components/chapter/Table.svelte +7 -1
- package/{package → dist}/components/controls/DarkToggle.svelte +1 -1
- package/{package → dist}/components/controls/DarkToggle.svelte.d.ts +1 -1
- package/{package → dist}/components/editor/BookishEditor.svelte +21 -26
- package/{package → dist}/components/editor/Commands.js +14 -14
- package/{package → dist}/components/editor/ConfirmButton.svelte +8 -2
- package/{package → dist}/components/editor/EmbedEditor.svelte +3 -3
- package/{package → dist}/components/editor/ImageChooser.svelte +8 -27
- package/dist/components/editor/ImageThumbnail.svelte +65 -0
- package/dist/components/editor/ImageThumbnail.svelte.d.ts +19 -0
- package/{package → dist}/components/editor/Permissions.svelte +2 -0
- package/{package → dist}/components/editor/TextEditor.svelte +5 -2
- package/{package → dist}/components/editor/Toggle.svelte +1 -1
- package/{package → dist}/components/editor/Toolbar.svelte +2 -1
- package/{package → dist}/components/page/Chapter.svelte +1 -1
- package/{package → dist}/components/page/ChapterTitle.svelte +2 -0
- package/{package → dist}/components/page/DefinitionView.svelte +43 -38
- package/dist/components/page/Edition.svelte +127 -0
- package/{package → dist}/components/page/EditionLoader.svelte +12 -3
- package/{package → dist}/components/page/Editions.svelte +1 -1
- package/{package → dist}/components/page/Header.svelte +73 -69
- package/{package → dist}/components/page/Media.svelte +5 -4
- package/{package → dist}/components/page/MediaPreview.svelte +9 -3
- package/{package → dist}/components/page/MediaPreview.svelte.d.ts +1 -0
- package/{package → dist}/components/page/Outline.svelte +1 -1
- package/{package → dist}/components/page/Page.svelte +6 -3
- package/{package → dist}/components/page/Reference.svelte +2 -1
- package/{package → dist}/components/page/Search.svelte +1 -1
- package/{package → dist}/components/page/TableOfContents.svelte +3 -6
- package/{package → dist}/components/page/TableOfContentsRow.svelte +1 -1
- package/{package → dist}/components/page/ThemeEditor.svelte +1 -1
- package/{package → dist}/index.d.ts +5 -3
- package/{package → dist}/index.js +5 -3
- package/{package → dist}/models/CRUD.d.ts +2 -1
- package/{package → dist}/models/CRUD.js +18 -5
- package/{package → dist}/models/book/BookMedia.d.ts +3 -0
- package/{package → dist}/models/book/BookMedia.js +23 -6
- package/{package → dist}/models/book/Chapter.d.ts +9 -7
- package/{package → dist}/models/book/Chapter.js +16 -6
- package/{package → dist}/models/book/Edition.d.ts +6 -1
- package/{package → dist}/models/book/Edition.js +22 -10
- package/{package → dist}/models/book/Theme.js +1 -1
- package/{package → dist}/models/book/Words.js +0 -1
- package/{package → dist}/models/chapter/ChapterNode.d.ts +1 -0
- package/{package → dist}/models/chapter/ChapterNode.js +3 -0
- package/{package → dist}/models/chapter/DefinitionNode.js +1 -1
- package/{package → dist}/models/chapter/FormatNode.js +4 -1
- package/{package → dist}/models/chapter/InlineCodeNode.js +1 -1
- package/{package → dist}/models/chapter/LinkNode.js +1 -1
- package/{package → dist}/models/chapter/ListNode.js +1 -1
- package/{package → dist}/models/chapter/Parser.js +3 -6
- package/package.json +39 -91
- package/package/components/chapter/ExtendedPrism.d.ts +0 -2
- package/package/components/page/Edition.svelte +0 -151
- /package/{package → dist}/components/Auth.svelte +0 -0
- /package/{package → dist}/components/Auth.svelte.d.ts +0 -0
- /package/{package → dist}/components/Authentication.d.ts +0 -0
- /package/{package → dist}/components/Authentication.js +0 -0
- /package/{package → dist}/components/BookPreview.svelte.d.ts +0 -0
- /package/{package → dist}/components/Link.svelte +0 -0
- /package/{package → dist}/components/Link.svelte.d.ts +0 -0
- /package/{package → dist}/components/app/BookList.svelte +0 -0
- /package/{package → dist}/components/app/BookList.svelte.d.ts +0 -0
- /package/{package → dist}/components/app/Button.svelte +0 -0
- /package/{package → dist}/components/app/Button.svelte.d.ts +0 -0
- /package/{package → dist}/components/app/Feedback.svelte +0 -0
- /package/{package → dist}/components/app/Feedback.svelte.d.ts +0 -0
- /package/{package → dist}/components/app/Head.svelte +0 -0
- /package/{package → dist}/components/app/Head.svelte.d.ts +0 -0
- /package/{package → dist}/components/app/Large.svelte +0 -0
- /package/{package → dist}/components/app/Large.svelte.d.ts +0 -0
- /package/{package → dist}/components/app/Lead.svelte +0 -0
- /package/{package → dist}/components/app/Lead.svelte.d.ts +0 -0
- /package/{package → dist}/components/app/Link.svelte +0 -0
- /package/{package → dist}/components/app/Link.svelte.d.ts +0 -0
- /package/{package → dist}/components/app/Options.svelte +0 -0
- /package/{package → dist}/components/app/Options.svelte.d.ts +0 -0
- /package/{package → dist}/components/app/Paragraph.svelte +0 -0
- /package/{package → dist}/components/app/Paragraph.svelte.d.ts +0 -0
- /package/{package → dist}/components/app/Section.svelte +0 -0
- /package/{package → dist}/components/app/Section.svelte.d.ts +0 -0
- /package/{package → dist}/components/app/Table.svelte +0 -0
- /package/{package → dist}/components/app/Table.svelte.d.ts +0 -0
- /package/{package → dist}/components/app/TextInput.svelte +0 -0
- /package/{package → dist}/components/app/TextInput.svelte.d.ts +0 -0
- /package/{package → dist}/components/chapter/Atom.svelte +0 -0
- /package/{package → dist}/components/chapter/Atom.svelte.d.ts +0 -0
- /package/{package → dist}/components/chapter/Block.svelte +0 -0
- /package/{package → dist}/components/chapter/Block.svelte.d.ts +0 -0
- /package/{package → dist}/components/chapter/Callout.svelte.d.ts +0 -0
- /package/{package → dist}/components/chapter/CaptionedCode.svelte +0 -0
- /package/{package → dist}/components/chapter/CaptionedCode.svelte.d.ts +0 -0
- /package/{package → dist}/components/chapter/ChapterBody.svelte +0 -0
- /package/{package → dist}/components/chapter/ChapterBody.svelte.d.ts +0 -0
- /package/{package → dist}/components/chapter/Citations.svelte.d.ts +0 -0
- /package/{package → dist}/components/chapter/Code.svelte +0 -0
- /package/{package → dist}/components/chapter/Code.svelte.d.ts +0 -0
- /package/{package → dist}/components/chapter/Comment.svelte +0 -0
- /package/{package → dist}/components/chapter/Comment.svelte.d.ts +0 -0
- /package/{package → dist}/components/chapter/Definition.svelte +0 -0
- /package/{package → dist}/components/chapter/Definition.svelte.d.ts +0 -0
- /package/{package → dist}/components/chapter/Embed.svelte.d.ts +0 -0
- /package/{package → dist}/components/chapter/ErrorMessage.svelte +0 -0
- /package/{package → dist}/components/chapter/ErrorMessage.svelte.d.ts +0 -0
- /package/{package → dist}/components/chapter/ExtendedPrism.js +0 -0
- /package/{package → dist}/components/chapter/Figure.svelte.d.ts +0 -0
- /package/{package → dist}/components/chapter/Footnote.svelte.d.ts +0 -0
- /package/{package → dist}/components/chapter/Format.svelte +0 -0
- /package/{package → dist}/components/chapter/Format.svelte.d.ts +0 -0
- /package/{package → dist}/components/chapter/InlineCode.svelte +0 -0
- /package/{package → dist}/components/chapter/InlineCode.svelte.d.ts +0 -0
- /package/{package → dist}/components/chapter/Label.svelte +0 -0
- /package/{package → dist}/components/chapter/Label.svelte.d.ts +0 -0
- /package/{package → dist}/components/chapter/Link.svelte +0 -0
- /package/{package → dist}/components/chapter/Link.svelte.d.ts +0 -0
- /package/{package → dist}/components/chapter/List.svelte.d.ts +0 -0
- /package/{package → dist}/components/chapter/Marginal.svelte.d.ts +0 -0
- /package/{package → dist}/components/chapter/Paragraph.svelte.d.ts +0 -0
- /package/{package → dist}/components/chapter/Positioned.svelte +0 -0
- /package/{package → dist}/components/chapter/Positioned.svelte.d.ts +0 -0
- /package/{package → dist}/components/chapter/Problem.svelte +0 -0
- /package/{package → dist}/components/chapter/Problem.svelte.d.ts +0 -0
- /package/{package → dist}/components/chapter/Python.svelte.d.ts +0 -0
- /package/{package → dist}/components/chapter/Quote.svelte.d.ts +0 -0
- /package/{package → dist}/components/chapter/Rule.svelte +0 -0
- /package/{package → dist}/components/chapter/Rule.svelte.d.ts +0 -0
- /package/{package → dist}/components/chapter/Table.svelte.d.ts +0 -0
- /package/{package → dist}/components/chapter/Text.svelte +0 -0
- /package/{package → dist}/components/chapter/Text.svelte.d.ts +0 -0
- /package/{package → dist}/components/editor/BookishEditor.svelte.d.ts +0 -0
- /package/{package → dist}/components/editor/CalloutEditor.svelte +0 -0
- /package/{package → dist}/components/editor/CalloutEditor.svelte.d.ts +0 -0
- /package/{package → dist}/components/editor/CaptionedCodeEditor.svelte +0 -0
- /package/{package → dist}/components/editor/CaptionedCodeEditor.svelte.d.ts +0 -0
- /package/{package → dist}/components/editor/CaretContext.d.ts +0 -0
- /package/{package → dist}/components/editor/CaretContext.js +0 -0
- /package/{package → dist}/components/editor/CaretState.d.ts +0 -0
- /package/{package → dist}/components/editor/CaretState.js +0 -0
- /package/{package → dist}/components/editor/CaretUtilities.d.ts +0 -0
- /package/{package → dist}/components/editor/CaretUtilities.js +0 -0
- /package/{package → dist}/components/editor/CaretView.svelte +0 -0
- /package/{package → dist}/components/editor/CaretView.svelte.d.ts +0 -0
- /package/{package → dist}/components/editor/CitationsEditor.svelte +0 -0
- /package/{package → dist}/components/editor/CitationsEditor.svelte.d.ts +0 -0
- /package/{package → dist}/components/editor/Clipboard.d.ts +0 -0
- /package/{package → dist}/components/editor/Clipboard.js +0 -0
- /package/{package → dist}/components/editor/Command.d.ts +0 -0
- /package/{package → dist}/components/editor/Command.js +0 -0
- /package/{package → dist}/components/editor/Commands.d.ts +0 -0
- /package/{package → dist}/components/editor/ConfirmButton.svelte.d.ts +0 -0
- /package/{package → dist}/components/editor/DefinitionEditor.svelte +0 -0
- /package/{package → dist}/components/editor/DefinitionEditor.svelte.d.ts +0 -0
- /package/{package → dist}/components/editor/EmbedEditor.svelte.d.ts +0 -0
- /package/{package → dist}/components/editor/Icon.svelte +0 -0
- /package/{package → dist}/components/editor/Icon.svelte.d.ts +0 -0
- /package/{package → dist}/components/editor/ImageChooser.svelte.d.ts +0 -0
- /package/{package → dist}/components/editor/InlineCodeEditor.svelte +0 -0
- /package/{package → dist}/components/editor/InlineCodeEditor.svelte.d.ts +0 -0
- /package/{package → dist}/components/editor/LabelEditor.svelte +0 -0
- /package/{package → dist}/components/editor/LabelEditor.svelte.d.ts +0 -0
- /package/{package → dist}/components/editor/LanguageEditor.svelte +0 -0
- /package/{package → dist}/components/editor/LanguageEditor.svelte.d.ts +0 -0
- /package/{package → dist}/components/editor/LinkEditor.svelte +0 -0
- /package/{package → dist}/components/editor/LinkEditor.svelte.d.ts +0 -0
- /package/{package → dist}/components/editor/Note.svelte +0 -0
- /package/{package → dist}/components/editor/Note.svelte.d.ts +0 -0
- /package/{package → dist}/components/editor/Permissions.svelte.d.ts +0 -0
- /package/{package → dist}/components/editor/PositionEditor.svelte +0 -0
- /package/{package → dist}/components/editor/PositionEditor.svelte.d.ts +0 -0
- /package/{package → dist}/components/editor/QuoteEditor.svelte +0 -0
- /package/{package → dist}/components/editor/QuoteEditor.svelte.d.ts +0 -0
- /package/{package → dist}/components/editor/Switch.svelte +0 -0
- /package/{package → dist}/components/editor/Switch.svelte.d.ts +0 -0
- /package/{package → dist}/components/editor/TableEditor.svelte +0 -0
- /package/{package → dist}/components/editor/TableEditor.svelte.d.ts +0 -0
- /package/{package → dist}/components/editor/TextEditor.svelte.d.ts +0 -0
- /package/{package → dist}/components/editor/Toggle.svelte.d.ts +0 -0
- /package/{package → dist}/components/editor/Toolbar.svelte.d.ts +0 -0
- /package/{package → dist}/components/editor/ToolbarGroup.svelte +0 -0
- /package/{package → dist}/components/editor/ToolbarGroup.svelte.d.ts +0 -0
- /package/{package → dist}/components/editor/ToolbarSpacer.svelte +0 -0
- /package/{package → dist}/components/editor/ToolbarSpacer.svelte.d.ts +0 -0
- /package/{package → dist}/components/editor/URLEditor.svelte +0 -0
- /package/{package → dist}/components/editor/URLEditor.svelte.d.ts +0 -0
- /package/{package → dist}/components/editor/UndoState.d.ts +0 -0
- /package/{package → dist}/components/editor/UndoState.js +0 -0
- /package/{package → dist}/components/editor/icons/annotate.svg +0 -0
- /package/{package → dist}/components/editor/icons/block.svg +0 -0
- /package/{package → dist}/components/editor/icons/bold.svg +0 -0
- /package/{package → dist}/components/editor/icons/bullets.svg +0 -0
- /package/{package → dist}/components/editor/icons/callout.svg +0 -0
- /package/{package → dist}/components/editor/icons/citation.svg +0 -0
- /package/{package → dist}/components/editor/icons/clear.svg +0 -0
- /package/{package → dist}/components/editor/icons/clipboard.svg +0 -0
- /package/{package → dist}/components/editor/icons/code.svg +0 -0
- /package/{package → dist}/components/editor/icons/columnafter.svg +0 -0
- /package/{package → dist}/components/editor/icons/columnbefore.svg +0 -0
- /package/{package → dist}/components/editor/icons/comment.svg +0 -0
- /package/{package → dist}/components/editor/icons/copy.svg +0 -0
- /package/{package → dist}/components/editor/icons/cut.svg +0 -0
- /package/{package → dist}/components/editor/icons/define.svg +0 -0
- /package/{package → dist}/components/editor/icons/deletecolumn.svg +0 -0
- /package/{package → dist}/components/editor/icons/deleterow.svg +0 -0
- /package/{package → dist}/components/editor/icons/footnote.svg +0 -0
- /package/{package → dist}/components/editor/icons/header1.svg +0 -0
- /package/{package → dist}/components/editor/icons/header2.svg +0 -0
- /package/{package → dist}/components/editor/icons/header3.svg +0 -0
- /package/{package → dist}/components/editor/icons/home.svg +0 -0
- /package/{package → dist}/components/editor/icons/indent.svg +0 -0
- /package/{package → dist}/components/editor/icons/italic.svg +0 -0
- /package/{package → dist}/components/editor/icons/label.svg +0 -0
- /package/{package → dist}/components/editor/icons/left.svg +0 -0
- /package/{package → dist}/components/editor/icons/level.svg +0 -0
- /package/{package → dist}/components/editor/icons/link.svg +0 -0
- /package/{package → dist}/components/editor/icons/list.svg +0 -0
- /package/{package → dist}/components/editor/icons/media.svg +0 -0
- /package/{package → dist}/components/editor/icons/middle.svg +0 -0
- /package/{package → dist}/components/editor/icons/numbers.svg +0 -0
- /package/{package → dist}/components/editor/icons/paragraph.svg +0 -0
- /package/{package → dist}/components/editor/icons/paste.svg +0 -0
- /package/{package → dist}/components/editor/icons/quote.svg +0 -0
- /package/{package → dist}/components/editor/icons/redo.svg +0 -0
- /package/{package → dist}/components/editor/icons/right.svg +0 -0
- /package/{package → dist}/components/editor/icons/rowabove.svg +0 -0
- /package/{package → dist}/components/editor/icons/rowbelow.svg +0 -0
- /package/{package → dist}/components/editor/icons/rule.svg +0 -0
- /package/{package → dist}/components/editor/icons/sub.svg +0 -0
- /package/{package → dist}/components/editor/icons/super.svg +0 -0
- /package/{package → dist}/components/editor/icons/table.svg +0 -0
- /package/{package → dist}/components/editor/icons/text.svg +0 -0
- /package/{package → dist}/components/editor/icons/time.svg +0 -0
- /package/{package → dist}/components/editor/icons/undo.svg +0 -0
- /package/{package → dist}/components/editor/icons/unindent.svg +0 -0
- /package/{package → dist}/components/editor/icons/unlink.svg +0 -0
- /package/{package → dist}/components/page/Acknowledgements.svelte +0 -0
- /package/{package → dist}/components/page/Acknowledgements.svelte.d.ts +0 -0
- /package/{package → dist}/components/page/Authors.svelte +0 -0
- /package/{package → dist}/components/page/Authors.svelte.d.ts +0 -0
- /package/{package → dist}/components/page/BookLoader.svelte +0 -0
- /package/{package → dist}/components/page/BookLoader.svelte.d.ts +0 -0
- /package/{package → dist}/components/page/BulkReferenceEditor.svelte +0 -0
- /package/{package → dist}/components/page/BulkReferenceEditor.svelte.d.ts +0 -0
- /package/{package → dist}/components/page/Chapter.svelte.d.ts +0 -0
- /package/{package → dist}/components/page/ChapterContext.d.ts +0 -0
- /package/{package → dist}/components/page/ChapterContext.js +0 -0
- /package/{package → dist}/components/page/ChapterNumber.svelte +0 -0
- /package/{package → dist}/components/page/ChapterNumber.svelte.d.ts +0 -0
- /package/{package → dist}/components/page/ChapterTitle.svelte.d.ts +0 -0
- /package/{package → dist}/components/page/Contexts.d.ts +0 -0
- /package/{package → dist}/components/page/Contexts.js +0 -0
- /package/{package → dist}/components/page/DefinitionView.svelte.d.ts +0 -0
- /package/{package → dist}/components/page/Description.svelte +0 -0
- /package/{package → dist}/components/page/Description.svelte.d.ts +0 -0
- /package/{package → dist}/components/page/Edition.svelte.d.ts +0 -0
- /package/{package → dist}/components/page/EditionLoader.svelte.d.ts +0 -0
- /package/{package → dist}/components/page/Editions.svelte.d.ts +0 -0
- /package/{package → dist}/components/page/Glossary.svelte +0 -0
- /package/{package → dist}/components/page/Glossary.svelte.d.ts +0 -0
- /package/{package → dist}/components/page/Header.svelte.d.ts +0 -0
- /package/{package → dist}/components/page/Index.svelte +0 -0
- /package/{package → dist}/components/page/Index.svelte.d.ts +0 -0
- /package/{package → dist}/components/page/Instructions.svelte +0 -0
- /package/{package → dist}/components/page/Instructions.svelte.d.ts +0 -0
- /package/{package → dist}/components/page/License.svelte +0 -0
- /package/{package → dist}/components/page/License.svelte.d.ts +0 -0
- /package/{package → dist}/components/page/Loading.svelte +0 -0
- /package/{package → dist}/components/page/Loading.svelte.d.ts +0 -0
- /package/{package → dist}/components/page/Media.svelte.d.ts +0 -0
- /package/{package → dist}/components/page/Muted.svelte +0 -0
- /package/{package → dist}/components/page/Muted.svelte.d.ts +0 -0
- /package/{package → dist}/components/page/Outline.svelte.d.ts +0 -0
- /package/{package → dist}/components/page/Page.svelte.d.ts +0 -0
- /package/{package → dist}/components/page/PageHeader.svelte +0 -0
- /package/{package → dist}/components/page/PageHeader.svelte.d.ts +0 -0
- /package/{package → dist}/components/page/PageParagraph.svelte +0 -0
- /package/{package → dist}/components/page/PageParagraph.svelte.d.ts +0 -0
- /package/{package → dist}/components/page/PossibleChapter.svelte +0 -0
- /package/{package → dist}/components/page/PossibleChapter.svelte.d.ts +0 -0
- /package/{package → dist}/components/page/PossibleReference.svelte +0 -0
- /package/{package → dist}/components/page/PossibleReference.svelte.d.ts +0 -0
- /package/{package → dist}/components/page/Print.svelte +0 -0
- /package/{package → dist}/components/page/Print.svelte.d.ts +0 -0
- /package/{package → dist}/components/page/Publish.svelte +0 -0
- /package/{package → dist}/components/page/Publish.svelte.d.ts +0 -0
- /package/{package → dist}/components/page/Reference.svelte.d.ts +0 -0
- /package/{package → dist}/components/page/References.svelte +0 -0
- /package/{package → dist}/components/page/References.svelte.d.ts +0 -0
- /package/{package → dist}/components/page/Rows.svelte +0 -0
- /package/{package → dist}/components/page/Rows.svelte.d.ts +0 -0
- /package/{package → dist}/components/page/Search.svelte.d.ts +0 -0
- /package/{package → dist}/components/page/Status.svelte +0 -0
- /package/{package → dist}/components/page/Status.svelte.d.ts +0 -0
- /package/{package → dist}/components/page/SubdomainEditor.svelte +0 -0
- /package/{package → dist}/components/page/SubdomainEditor.svelte.d.ts +0 -0
- /package/{package → dist}/components/page/TableOfContents.svelte.d.ts +0 -0
- /package/{package → dist}/components/page/TableOfContentsImage.svelte +0 -0
- /package/{package → dist}/components/page/TableOfContentsImage.svelte.d.ts +0 -0
- /package/{package → dist}/components/page/TableOfContentsRow.svelte.d.ts +0 -0
- /package/{package → dist}/components/page/ThemeEditor.svelte.d.ts +0 -0
- /package/{package → dist}/components/page/ThemeEditorPreview.svelte +0 -0
- /package/{package → dist}/components/page/ThemeEditorPreview.svelte.d.ts +0 -0
- /package/{package → dist}/components/page/ThemeSetEditor.svelte +0 -0
- /package/{package → dist}/components/page/ThemeSetEditor.svelte.d.ts +0 -0
- /package/{package → dist}/components/page/ThemeVariableEditor.svelte +0 -0
- /package/{package → dist}/components/page/ThemeVariableEditor.svelte.d.ts +0 -0
- /package/{package → dist}/components/page/Title.svelte +0 -0
- /package/{package → dist}/components/page/Title.svelte.d.ts +0 -0
- /package/{package → dist}/components/page/Unknown.svelte +0 -0
- /package/{package → dist}/components/page/Unknown.svelte.d.ts +0 -0
- /package/{package → dist}/components/page/margins.d.ts +0 -0
- /package/{package → dist}/components/page/margins.js +0 -0
- /package/{package → dist}/models/Firebase.d.ts +0 -0
- /package/{package → dist}/models/Firebase.js +0 -0
- /package/{package → dist}/models/book/Book.d.ts +0 -0
- /package/{package → dist}/models/book/Book.js +0 -0
- /package/{package → dist}/models/book/BookSaveStatus.d.ts +0 -0
- /package/{package → dist}/models/book/BookSaveStatus.js +0 -0
- /package/{package → dist}/models/book/ChapterID.d.ts +0 -0
- /package/{package → dist}/models/book/ChapterID.js +0 -0
- /package/{package → dist}/models/book/Definition.d.ts +0 -0
- /package/{package → dist}/models/book/Definition.js +0 -0
- /package/{package → dist}/models/book/Reference.d.ts +0 -0
- /package/{package → dist}/models/book/Reference.js +0 -0
- /package/{package → dist}/models/book/Schema.d.ts +0 -0
- /package/{package → dist}/models/book/Schema.js +0 -0
- /package/{package → dist}/models/book/Theme.d.ts +0 -0
- /package/{package → dist}/models/book/ThemeColors.d.ts +0 -0
- /package/{package → dist}/models/book/ThemeColors.js +0 -0
- /package/{package → dist}/models/book/Words.d.ts +0 -0
- /package/{package → dist}/models/chapter/AtomNode.d.ts +0 -0
- /package/{package → dist}/models/chapter/AtomNode.js +0 -0
- /package/{package → dist}/models/chapter/BlockNode.d.ts +0 -0
- /package/{package → dist}/models/chapter/BlockNode.js +0 -0
- /package/{package → dist}/models/chapter/BlocksNode.d.ts +0 -0
- /package/{package → dist}/models/chapter/BlocksNode.js +0 -0
- /package/{package → dist}/models/chapter/BlocksNode.test.d.ts +0 -0
- /package/{package → dist}/models/chapter/BlocksNode.test.js +0 -0
- /package/{package → dist}/models/chapter/Bookkeeping.d.ts +0 -0
- /package/{package → dist}/models/chapter/Bookkeeping.js +0 -0
- /package/{package → dist}/models/chapter/CalloutNode.d.ts +0 -0
- /package/{package → dist}/models/chapter/CalloutNode.js +0 -0
- /package/{package → dist}/models/chapter/Caret.d.ts +0 -0
- /package/{package → dist}/models/chapter/Caret.js +0 -0
- /package/{package → dist}/models/chapter/CitationsNode.d.ts +0 -0
- /package/{package → dist}/models/chapter/CitationsNode.js +0 -0
- /package/{package → dist}/models/chapter/CodeNode.d.ts +0 -0
- /package/{package → dist}/models/chapter/CodeNode.js +0 -0
- /package/{package → dist}/models/chapter/CommentNode.d.ts +0 -0
- /package/{package → dist}/models/chapter/CommentNode.js +0 -0
- /package/{package → dist}/models/chapter/DefinitionNode.d.ts +0 -0
- /package/{package → dist}/models/chapter/Edit.d.ts +0 -0
- /package/{package → dist}/models/chapter/Edit.js +0 -0
- /package/{package → dist}/models/chapter/EmbedNode.d.ts +0 -0
- /package/{package → dist}/models/chapter/EmbedNode.js +0 -0
- /package/{package → dist}/models/chapter/ErrorNode.d.ts +0 -0
- /package/{package → dist}/models/chapter/ErrorNode.js +0 -0
- /package/{package → dist}/models/chapter/FootnoteNode.d.ts +0 -0
- /package/{package → dist}/models/chapter/FootnoteNode.js +0 -0
- /package/{package → dist}/models/chapter/FormatNode.d.ts +0 -0
- /package/{package → dist}/models/chapter/FormatNode.test.d.ts +0 -0
- /package/{package → dist}/models/chapter/FormatNode.test.js +0 -0
- /package/{package → dist}/models/chapter/InlineCodeNode.d.ts +0 -0
- /package/{package → dist}/models/chapter/LabelNode.d.ts +0 -0
- /package/{package → dist}/models/chapter/LabelNode.js +0 -0
- /package/{package → dist}/models/chapter/LinkNode.d.ts +0 -0
- /package/{package → dist}/models/chapter/ListNode.d.ts +0 -0
- /package/{package → dist}/models/chapter/ListNode.test.d.ts +0 -0
- /package/{package → dist}/models/chapter/ListNode.test.js +0 -0
- /package/{package → dist}/models/chapter/MetadataNode.d.ts +0 -0
- /package/{package → dist}/models/chapter/MetadataNode.js +0 -0
- /package/{package → dist}/models/chapter/Node.d.ts +0 -0
- /package/{package → dist}/models/chapter/Node.js +0 -0
- /package/{package → dist}/models/chapter/Node.test.d.ts +0 -0
- /package/{package → dist}/models/chapter/Node.test.js +0 -0
- /package/{package → dist}/models/chapter/ParagraphNode.d.ts +0 -0
- /package/{package → dist}/models/chapter/ParagraphNode.js +0 -0
- /package/{package → dist}/models/chapter/ParagraphNode.test.d.ts +0 -0
- /package/{package → dist}/models/chapter/ParagraphNode.test.js +0 -0
- /package/{package → dist}/models/chapter/Parser.d.ts +0 -0
- /package/{package → dist}/models/chapter/Parser.test.d.ts +0 -0
- /package/{package → dist}/models/chapter/Parser.test.js +0 -0
- /package/{package → dist}/models/chapter/Position.d.ts +0 -0
- /package/{package → dist}/models/chapter/Position.js +0 -0
- /package/{package → dist}/models/chapter/QuoteNode.d.ts +0 -0
- /package/{package → dist}/models/chapter/QuoteNode.js +0 -0
- /package/{package → dist}/models/chapter/RootNode.d.ts +0 -0
- /package/{package → dist}/models/chapter/RootNode.js +0 -0
- /package/{package → dist}/models/chapter/RuleNode.d.ts +0 -0
- /package/{package → dist}/models/chapter/RuleNode.js +0 -0
- /package/{package → dist}/models/chapter/TableNode.d.ts +0 -0
- /package/{package → dist}/models/chapter/TableNode.js +0 -0
- /package/{package → dist}/models/chapter/TableNode.test.d.ts +0 -0
- /package/{package → dist}/models/chapter/TableNode.test.js +0 -0
- /package/{package → dist}/models/chapter/TextNode.d.ts +0 -0
- /package/{package → dist}/models/chapter/TextNode.js +0 -0
- /package/{package → dist}/models/chapter/TextNode.test.d.ts +0 -0
- /package/{package → dist}/models/chapter/TextNode.test.js +0 -0
- /package/{package → dist}/util/dark.d.ts +0 -0
- /package/{package → dist}/util/dark.js +0 -0
- /package/{package → dist}/util/getSubdomain.d.ts +0 -0
- /package/{package → dist}/util/getSubdomain.js +0 -0
- /package/{package → dist}/util/isMobile.d.ts +0 -0
- /package/{package → dist}/util/isMobile.js +0 -0
- /package/{package → dist}/util/mineReference.d.ts +0 -0
- /package/{package → dist}/util/mineReference.js +0 -0
- /package/{package → dist}/util/scrollToEyeLevel.d.ts +0 -0
- /package/{package → dist}/util/scrollToEyeLevel.js +0 -0
package/README.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# Bookish
|
|
2
2
|
|
|
3
|
-
Bookish is a
|
|
3
|
+
Bookish is a framework and platform for writing and publishing web-based books. I originally created it to make it easier to maintain the many online books on my website (amyjko.com), while adding more sophisticated features to support reading. I'm slowly evolving it to be a simple free online service for authoring and reading online books.
|
|
4
4
|
|
|
5
|
-
##
|
|
5
|
+
## Status
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
I'm working on a beta launch of the platform at [bookish.press](https://bookish.press) and expect to maintain the platform for the foreseeable future. Let me know if you'd like to help!
|
|
@@ -110,8 +110,6 @@ afterUpdate(() => $chapter?.layoutMarginals());
|
|
|
110
110
|
.bookish-references .bookish-reference {
|
|
111
111
|
display: block;
|
|
112
112
|
line-height: var(--bookish-paragraph-line-height-tight);
|
|
113
|
-
margin-left: 1rem;
|
|
114
|
-
margin-bottom: 1rem;
|
|
115
113
|
text-align: left;
|
|
116
114
|
}
|
|
117
115
|
|
|
@@ -125,7 +123,6 @@ afterUpdate(() => $chapter?.layoutMarginals());
|
|
|
125
123
|
.bookish-reference .bookish-citation-symbol {
|
|
126
124
|
display: block;
|
|
127
125
|
float: left;
|
|
128
|
-
margin-top: -0.5em;
|
|
129
126
|
position: absolute;
|
|
130
127
|
left: -1.75em;
|
|
131
128
|
text-align: right;
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
<svelte:options immutable={true} />
|
|
2
2
|
|
|
3
3
|
<script>import { storage } from '../../models/Firebase';
|
|
4
|
-
import { getCaret, getBook, getBase } from '../page/Contexts';
|
|
4
|
+
import { getCaret, getBook, getBase, isEditionEditable, } from '../page/Contexts';
|
|
5
5
|
import Figure from './Figure.svelte';
|
|
6
6
|
import { getContext } from 'svelte';
|
|
7
7
|
export let node;
|
|
8
|
-
export let editable =
|
|
8
|
+
export let editable = true;
|
|
9
9
|
export let placeholder = '';
|
|
10
10
|
export let imageOnly = false;
|
|
11
11
|
$: url = node.getURL();
|
|
@@ -13,6 +13,7 @@ $: description = node.getDescription();
|
|
|
13
13
|
let caret = getCaret();
|
|
14
14
|
let book = getBook();
|
|
15
15
|
let base = getBase();
|
|
16
|
+
let editionEditable = isEditionEditable();
|
|
16
17
|
// Bookish editor should have passed down a way to set the active editor.
|
|
17
18
|
let claimCaret = getContext('claimeditor');
|
|
18
19
|
let dragging = false;
|
|
@@ -94,13 +95,14 @@ function handleClick() {
|
|
|
94
95
|
credit={imageOnly ? undefined : node.getCredit()}
|
|
95
96
|
>
|
|
96
97
|
{#if url.trim().length === 0}
|
|
97
|
-
{#if editable}
|
|
98
|
-
<
|
|
98
|
+
{#if editable && editionEditable}
|
|
99
|
+
<div
|
|
100
|
+
role="button"
|
|
99
101
|
class={`bookish-figure-unspecified ${
|
|
100
102
|
dragging ? 'bookish-figure-dragging' : ''
|
|
101
103
|
}`}
|
|
102
104
|
on:click|preventDefault={handleClick}
|
|
103
|
-
|
|
105
|
+
tabindex="0"
|
|
104
106
|
on:keydown={(event) =>
|
|
105
107
|
event.key === ' ' || event.key === 'Enter'
|
|
106
108
|
? handleClick()
|
|
@@ -113,7 +115,7 @@ function handleClick() {
|
|
|
113
115
|
: placeholder.length > 0
|
|
114
116
|
? placeholder
|
|
115
117
|
: 'Click or drag to choose or upload an image, or enter an image or video URL.'}
|
|
116
|
-
</
|
|
118
|
+
</div>
|
|
117
119
|
{:else}
|
|
118
120
|
<p class="bookish-figure-unspecified">No image or video</p>
|
|
119
121
|
{/if}
|
|
@@ -32,6 +32,8 @@ function focusFigure() {
|
|
|
32
32
|
<figure class="bookish-figure" data-nodeid={node.nodeID}>
|
|
33
33
|
<div
|
|
34
34
|
class:selected
|
|
35
|
+
role="button"
|
|
36
|
+
tabindex="0"
|
|
35
37
|
on:mousedown={focusFigure}
|
|
36
38
|
on:keydown={(event) =>
|
|
37
39
|
event.key === ' ' || event.key === 'Enter'
|
|
@@ -70,7 +72,6 @@ function focusFigure() {
|
|
|
70
72
|
|
|
71
73
|
.caption {
|
|
72
74
|
text-align: center;
|
|
73
|
-
position: relative;
|
|
74
75
|
color: var(--bookish-muted-color);
|
|
75
76
|
line-height: var(--bookish-paragraph-line-height-tight);
|
|
76
77
|
font-size: var(--bookish-block-font-size);
|
|
@@ -24,50 +24,33 @@ export let node;
|
|
|
24
24
|
line-height: var(--bookish-paragraph-line-height-tight);
|
|
25
25
|
}
|
|
26
26
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
counter-reset: item;
|
|
27
|
+
li {
|
|
28
|
+
margin-bottom: calc(0.5 * var(--bookish-paragraph-spacing));
|
|
30
29
|
}
|
|
31
30
|
|
|
32
|
-
|
|
33
|
-
|
|
31
|
+
/* Lists are decimal numbered */
|
|
32
|
+
ol {
|
|
33
|
+
list-style: decimal;
|
|
34
34
|
}
|
|
35
35
|
|
|
36
|
-
|
|
37
|
-
|
|
36
|
+
/* First level is decimal */
|
|
37
|
+
ol li {
|
|
38
|
+
counter-increment: list-item;
|
|
39
|
+
list-style-type: decimal;
|
|
38
40
|
}
|
|
39
41
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
+
/* Second level is lowercase alpha */
|
|
43
|
+
ol ol li {
|
|
44
|
+
list-style-type: lower-alpha;
|
|
42
45
|
}
|
|
43
46
|
|
|
44
|
-
|
|
45
|
-
|
|
47
|
+
/* Third level is uppercase alpha */
|
|
48
|
+
ol ol ol li {
|
|
49
|
+
list-style-type: upper-alpha;
|
|
46
50
|
}
|
|
47
51
|
|
|
48
|
-
ol
|
|
49
|
-
ul > :global(ol > li::before),
|
|
50
|
-
ul > :global(ul > ol > li::before) {
|
|
51
|
-
content: counter(item) '. ';
|
|
52
|
+
ol li::marker {
|
|
52
53
|
color: var(--bookish-bullet-color);
|
|
53
|
-
display: inline-block;
|
|
54
|
-
width: 1em;
|
|
55
|
-
margin-left: -1.5rem;
|
|
56
|
-
margin-right: 0.5rem;
|
|
57
|
-
text-align: right;
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
ol > :global(ol > li::before),
|
|
61
|
-
ul > :global(ol > ol > li::before) {
|
|
62
|
-
content: counter(item, lower-alpha) '. ';
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
ol > :global(ol > ol > li:before) {
|
|
66
|
-
content: counter(item, upper-alpha) '. ';
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
li {
|
|
70
|
-
margin-bottom: calc(0.5 * var(--bookish-paragraph-spacing));
|
|
71
54
|
}
|
|
72
55
|
|
|
73
56
|
ul li {
|
|
@@ -66,6 +66,8 @@ onMount(() => {
|
|
|
66
66
|
editable ? '' : 'interactive'
|
|
67
67
|
}`}
|
|
68
68
|
aria-label={label}
|
|
69
|
+
role="button"
|
|
70
|
+
tabindex="0"
|
|
69
71
|
on:mousedown={(event) => toggle(event, true)}
|
|
70
72
|
on:keydown={(event) =>
|
|
71
73
|
event.key === 'Enter' || event.key === ' '
|
|
@@ -77,7 +79,8 @@ onMount(() => {
|
|
|
77
79
|
class={'bookish-marginal' +
|
|
78
80
|
(isHidden ? ' bookish-marginal-hidden' : '') +
|
|
79
81
|
(hovered ? ' bookish-marginal-hovered' : '')}
|
|
80
|
-
|
|
82
|
+
role="button"
|
|
83
|
+
tabindex={editable ? null : 0}
|
|
81
84
|
on:mousedown={() => toggle(undefined, false)}
|
|
82
85
|
on:keydown={(event) =>
|
|
83
86
|
event.key === 'Enter' || event.key === ' '
|
|
@@ -19,10 +19,15 @@ $: classes =
|
|
|
19
19
|
($chapter && $chapter.highlightedID === id
|
|
20
20
|
? ' bookish-content-highlight'
|
|
21
21
|
: '');
|
|
22
|
+
$: firstParagraph = $root.getFirstParagraph();
|
|
23
|
+
$: dropcap =
|
|
24
|
+
placeholder === undefined &&
|
|
25
|
+
node === firstParagraph &&
|
|
26
|
+
/^[a-zA-Z]/.test(firstParagraph.getFirstTextNode().getText());
|
|
22
27
|
</script>
|
|
23
28
|
|
|
24
29
|
{#if level === 0}
|
|
25
|
-
<p data-nodeid={node.nodeID} class:placeholder
|
|
30
|
+
<p data-nodeid={node.nodeID} class:placeholder class:dropcap
|
|
26
31
|
><Format node={node.getFormat()} placeholder={placeholder ?? '¶'} /></p
|
|
27
32
|
>
|
|
28
33
|
{:else}
|
|
@@ -54,7 +59,7 @@ $: classes =
|
|
|
54
59
|
}
|
|
55
60
|
|
|
56
61
|
/* This implements a drop cap in the first letter of the first text in the first format of the first paragraph of a chapter (but only chapters). */
|
|
57
|
-
|
|
62
|
+
p.dropcap::first-letter {
|
|
58
63
|
padding: 0 0.25rem;
|
|
59
64
|
margin: 0 0.25rem 0 0;
|
|
60
65
|
font-size: 4rem;
|
|
@@ -34,7 +34,7 @@ afterUpdate(() => {
|
|
|
34
34
|
}
|
|
35
35
|
});
|
|
36
36
|
function skulptLoaded() {
|
|
37
|
-
return window.hasOwnProperty('Sk');
|
|
37
|
+
return typeof window !== 'undefined' && window.hasOwnProperty('Sk');
|
|
38
38
|
}
|
|
39
39
|
function reset() {
|
|
40
40
|
code = startCode;
|
|
@@ -116,7 +116,7 @@ $: lines = output.split('\n');
|
|
|
116
116
|
flex: 1;
|
|
117
117
|
border: 1px solid lightGray;
|
|
118
118
|
padding: 0.5rem;
|
|
119
|
-
height:
|
|
119
|
+
height: 2rem;
|
|
120
120
|
overflow-y: scroll;
|
|
121
121
|
display: inline-block;
|
|
122
122
|
vertical-align: top;
|
|
@@ -37,12 +37,11 @@ $: credit = node.getCredit();
|
|
|
37
37
|
font-family: var(--bookish-header-font-family);
|
|
38
38
|
font-weight: 400;
|
|
39
39
|
font-style: italic;
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
position: relative;
|
|
40
|
+
margin: 0;
|
|
41
|
+
padding-top: 0;
|
|
42
|
+
padding-bottom: var(--bookish-paragraph-spacing);
|
|
43
|
+
padding-left: var(--bookish-indent);
|
|
44
|
+
padding-right: var(--bookish-indent);
|
|
46
45
|
}
|
|
47
46
|
|
|
48
47
|
.quote > :global(p) {
|
|
@@ -52,6 +51,7 @@ $: credit = node.getCredit();
|
|
|
52
51
|
|
|
53
52
|
.caption {
|
|
54
53
|
margin-top: 0.5em;
|
|
54
|
+
margin-right: var(--bookish-indent);
|
|
55
55
|
text-align: right;
|
|
56
56
|
font-family: var(--bookish-header-font-family);
|
|
57
57
|
font-style: italic;
|
|
@@ -14,7 +14,8 @@ $: rows = node.getRows();
|
|
|
14
14
|
{#each rows as row, index}
|
|
15
15
|
<tr class={editable ? 'editable' : null}>
|
|
16
16
|
{#if row.length === 1}
|
|
17
|
-
<svelte:element
|
|
17
|
+
<svelte:element
|
|
18
|
+
this={index === 0 ? 'th' : 'td'}
|
|
18
19
|
colspan={rows.reduce(
|
|
19
20
|
(max, row) => Math.max(row.length, max),
|
|
20
21
|
0
|
|
@@ -37,4 +38,9 @@ $: rows = node.getRows();
|
|
|
37
38
|
tr.editable th {
|
|
38
39
|
border: 1px dotted var(--app-border-color);
|
|
39
40
|
}
|
|
41
|
+
|
|
42
|
+
td,
|
|
43
|
+
th {
|
|
44
|
+
vertical-align: baseline;
|
|
45
|
+
}
|
|
40
46
|
</style>
|
|
@@ -13,7 +13,7 @@ function change() {
|
|
|
13
13
|
class="dark-toggle"
|
|
14
14
|
role="button"
|
|
15
15
|
aria-label={dark === true ? 'Switch to light mode' : 'Switch to dark mode'}
|
|
16
|
-
|
|
16
|
+
tabindex="0"
|
|
17
17
|
on:click={change}
|
|
18
18
|
on:keydown={(event) => {
|
|
19
19
|
if (event.key === 'Enter' || event.key === ' ') {
|
|
@@ -16,9 +16,8 @@ import ErrorNode from '../../models/chapter/ErrorNode';
|
|
|
16
16
|
import { caretRangeToIndexRange, indexRangeToCaretRange, } from '../../models/chapter/Caret';
|
|
17
17
|
import commands from './Commands';
|
|
18
18
|
import { afterUpdate, onMount, setContext } from 'svelte';
|
|
19
|
-
import { getCaret
|
|
19
|
+
import { getCaret } from '../page/Contexts';
|
|
20
20
|
import CaretView from './CaretView.svelte';
|
|
21
|
-
import { writable } from 'svelte/store';
|
|
22
21
|
const IDLE_TIME = 500;
|
|
23
22
|
export let text;
|
|
24
23
|
export let parser;
|
|
@@ -159,25 +158,18 @@ afterUpdate(() => {
|
|
|
159
158
|
const lineHeight = lineHeightString.endsWith('px')
|
|
160
159
|
? parseInt(lineHeightString.substring(0, lineHeightString.length - 2))
|
|
161
160
|
: undefined;
|
|
162
|
-
//
|
|
163
|
-
let
|
|
161
|
+
// Figure out the relative position of this editor.
|
|
162
|
+
let editorAncestor = element;
|
|
164
163
|
let relativeX = 0;
|
|
165
164
|
let relativeY = 0;
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
while (caretAncestor != null) {
|
|
169
|
-
const style = window.getComputedStyle(caretAncestor);
|
|
165
|
+
while (editorAncestor != null) {
|
|
166
|
+
const style = window.getComputedStyle(editorAncestor);
|
|
170
167
|
if (style.position === 'relative') {
|
|
171
|
-
relativeX +=
|
|
172
|
-
relativeY +=
|
|
168
|
+
relativeX += editorAncestor.offsetLeft;
|
|
169
|
+
relativeY += editorAncestor.offsetTop;
|
|
173
170
|
}
|
|
174
|
-
|
|
175
|
-
fixedX = caretAncestor.offsetLeft;
|
|
176
|
-
fixedY = caretAncestor.offsetTop;
|
|
177
|
-
}
|
|
178
|
-
caretAncestor = caretAncestor.parentElement;
|
|
171
|
+
editorAncestor = editorAncestor.parentElement;
|
|
179
172
|
}
|
|
180
|
-
// Is the caret in a fixed position marginal? Get it's position.
|
|
181
173
|
// If we're after a new line, calculate the correct position, since selections don't actually render to the next line.
|
|
182
174
|
const left = afterNewLine
|
|
183
175
|
? textRect.left
|
|
@@ -185,6 +177,7 @@ afterUpdate(() => {
|
|
|
185
177
|
const top = afterNewLine && lineHeight
|
|
186
178
|
? rangeRect.top + lineHeight
|
|
187
179
|
: rangeRect.top;
|
|
180
|
+
// Compute the final position of the caret.
|
|
188
181
|
const position = {
|
|
189
182
|
x: left + window.scrollX - relativeX,
|
|
190
183
|
y: top + window.scrollY - relativeY,
|
|
@@ -491,8 +484,8 @@ function handleKey(event, press = false) {
|
|
|
491
484
|
const context = getCaretContext();
|
|
492
485
|
if (context === undefined)
|
|
493
486
|
return;
|
|
494
|
-
//
|
|
495
|
-
const
|
|
487
|
+
// Find a command that handles the event.
|
|
488
|
+
const command = commands.find((command) => {
|
|
496
489
|
// If the keystroke and caret position matches the command signature, execute the command and update the caret range.
|
|
497
490
|
if ((command.press === undefined || command.press === press) &&
|
|
498
491
|
(command.shift === undefined ||
|
|
@@ -510,19 +503,20 @@ function handleKey(event, press = false) {
|
|
|
510
503
|
(command.active === true ||
|
|
511
504
|
(command.active instanceof Function &&
|
|
512
505
|
command.active.call(undefined, context, event.key)))) {
|
|
513
|
-
//
|
|
514
|
-
|
|
515
|
-
if (handled) {
|
|
506
|
+
// See if the command is handled
|
|
507
|
+
if (executeCommand(command, event.key)) {
|
|
516
508
|
event.preventDefault();
|
|
517
509
|
event.stopPropagation();
|
|
510
|
+
return true;
|
|
518
511
|
}
|
|
519
|
-
//
|
|
520
|
-
|
|
512
|
+
// If not, this is not it.
|
|
513
|
+
else
|
|
514
|
+
return false;
|
|
521
515
|
}
|
|
522
516
|
// Continue searching for a matching command.
|
|
523
|
-
return
|
|
517
|
+
return false;
|
|
524
518
|
});
|
|
525
|
-
if (
|
|
519
|
+
if (command === undefined) {
|
|
526
520
|
// Toolbar navigation
|
|
527
521
|
if (event.key === 'Escape') {
|
|
528
522
|
// If we've selected a FootnoteNode or Comment, navigate to the footnote or comment text to edit it.
|
|
@@ -813,13 +807,14 @@ setContext('claimeditor', claimActiveEditor);
|
|
|
813
807
|
class={`bookish-editor ${inAtom ? 'bookish-editor-atom-focused' : ''}`}
|
|
814
808
|
class:locked
|
|
815
809
|
aria-disabled={locked}
|
|
810
|
+
role="textbox"
|
|
816
811
|
bind:this={element}
|
|
817
812
|
on:keydown={handleKey}
|
|
818
813
|
on:keypress={handlePress}
|
|
819
814
|
on:mousedown|stopPropagation={handleMouseDown}
|
|
820
815
|
on:focus={handleFocus}
|
|
821
816
|
on:blur={handleBlur}
|
|
822
|
-
|
|
817
|
+
tabindex="0"
|
|
823
818
|
>
|
|
824
819
|
<!-- A view of the root -->
|
|
825
820
|
<svelte:component this={component} node={editedNode} {placeholder} />
|
|
@@ -835,19 +835,6 @@ const commands = [
|
|
|
835
835
|
return rootWithNode(context, context.blocks, edit.root, () => edit.range.start);
|
|
836
836
|
},
|
|
837
837
|
},
|
|
838
|
-
{
|
|
839
|
-
icon: IndentIcon,
|
|
840
|
-
description: 'indent list item',
|
|
841
|
-
category: 'list',
|
|
842
|
-
mutates: true,
|
|
843
|
-
control: false,
|
|
844
|
-
alt: false,
|
|
845
|
-
shift: false,
|
|
846
|
-
key: 'Tab',
|
|
847
|
-
visible: (context) => context.list !== undefined,
|
|
848
|
-
active: (context) => context.list !== undefined,
|
|
849
|
-
handler: (context) => rootWithNode(context, context.blocks, context.blocks?.withListsIndented(context.range, true)),
|
|
850
|
-
},
|
|
851
838
|
{
|
|
852
839
|
icon: UnindentIcon,
|
|
853
840
|
description: 'unindent list item',
|
|
@@ -862,6 +849,19 @@ const commands = [
|
|
|
862
849
|
context.list.isInside(context.root, ListNode),
|
|
863
850
|
handler: (context) => rootWithNode(context, context.blocks, context.blocks?.withListsIndented(context.range, false)),
|
|
864
851
|
},
|
|
852
|
+
{
|
|
853
|
+
icon: IndentIcon,
|
|
854
|
+
description: 'indent list item',
|
|
855
|
+
category: 'list',
|
|
856
|
+
mutates: true,
|
|
857
|
+
control: false,
|
|
858
|
+
alt: false,
|
|
859
|
+
shift: false,
|
|
860
|
+
key: 'Tab',
|
|
861
|
+
visible: (context) => context.list !== undefined,
|
|
862
|
+
active: (context) => context.list !== undefined,
|
|
863
|
+
handler: (context) => rootWithNode(context, context.blocks, context.blocks?.withListsIndented(context.range, true)),
|
|
864
|
+
},
|
|
865
865
|
{
|
|
866
866
|
icon: ClearIcon,
|
|
867
867
|
description: 'clear formatting',
|
|
@@ -1222,7 +1222,7 @@ const commands = [
|
|
|
1222
1222
|
const newTable = new TableNode(newRows, '|', new FormatNode('', [new TextNode()]));
|
|
1223
1223
|
return rootWithNode(context, context.blocks, context.blocks.withBlockInsertedBefore(context.paragraph, newTable), () => {
|
|
1224
1224
|
return {
|
|
1225
|
-
node: newTable.getRows()[0][0].
|
|
1225
|
+
node: newTable.getRows()[0][0].getFirstTextNode(),
|
|
1226
1226
|
index: 0,
|
|
1227
1227
|
};
|
|
1228
1228
|
});
|
|
@@ -9,8 +9,14 @@ let confirming = false;
|
|
|
9
9
|
{#if !confirming}
|
|
10
10
|
<Button {tooltip} command={() => (confirming = true)}><slot /></Button>
|
|
11
11
|
{:else}
|
|
12
|
-
<Button tooltip="no" command={() => (confirming = false)}>
|
|
13
|
-
> <Button
|
|
12
|
+
<Button tooltip="no" command={() => (confirming = false)}>cancel</Button
|
|
13
|
+
> <Button
|
|
14
|
+
tooltip="yes"
|
|
15
|
+
command={() => {
|
|
16
|
+
confirming = false;
|
|
17
|
+
command();
|
|
18
|
+
}}>{confirm}</Button
|
|
19
|
+
>
|
|
14
20
|
{/if}
|
|
15
21
|
</div>
|
|
16
22
|
|
|
@@ -43,10 +43,10 @@ function handleImageChange(event) {
|
|
|
43
43
|
});
|
|
44
44
|
}
|
|
45
45
|
function handleImageSelection(image) {
|
|
46
|
-
// Toggle the embed
|
|
47
46
|
$caret?.edit(embed, embed.getURL() === image.url
|
|
48
|
-
? embed
|
|
49
|
-
|
|
47
|
+
? // Toggle the embed if choosing the same image
|
|
48
|
+
embed.withURL('').withDescription('')
|
|
49
|
+
: embed.withURLs(image.url, image.thumb));
|
|
50
50
|
}
|
|
51
51
|
</script>
|
|
52
52
|
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
<script>import { onMount } from 'svelte';
|
|
2
|
-
import { getBook
|
|
2
|
+
import { getBook } from '../page/Contexts';
|
|
3
|
+
import ImageThumbnail from './ImageThumbnail.svelte';
|
|
3
4
|
export let select;
|
|
4
5
|
export let selection;
|
|
5
|
-
let editor = getCaret();
|
|
6
6
|
let book = getBook();
|
|
7
7
|
let images = undefined;
|
|
8
8
|
let expanded = false;
|
|
@@ -21,7 +21,8 @@ onMount(() => {
|
|
|
21
21
|
|
|
22
22
|
<div
|
|
23
23
|
class={`bookish-image-chooser ${expanded ? 'expanded' : ''}`}
|
|
24
|
-
|
|
24
|
+
tabindex="0"
|
|
25
|
+
role="button"
|
|
25
26
|
on:click={() => (expanded = !expanded)}
|
|
26
27
|
on:keydown={(event) =>
|
|
27
28
|
event.key === 'Enter' || event.key === ' '
|
|
@@ -37,18 +38,10 @@ onMount(() => {
|
|
|
37
38
|
<!-- Sort the images by their URL. There's probably a more meaningful sort,
|
|
38
39
|
such as placing unused images at the front of the list. -->
|
|
39
40
|
{#each images.sort((a, b) => a.url.localeCompare(b.url)) as image}
|
|
40
|
-
<
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
}
|
|
44
|
-
src={image.url}
|
|
45
|
-
alt={`Image named ${image.url}`}
|
|
46
|
-
tabIndex="0"
|
|
47
|
-
on:click|stopPropagation={() => select(image)}
|
|
48
|
-
on:keydown={(event) =>
|
|
49
|
-
event.key === 'Enter' || event.key === ' '
|
|
50
|
-
? select(image)
|
|
51
|
-
: undefined}
|
|
41
|
+
<ImageThumbnail
|
|
42
|
+
{image}
|
|
43
|
+
selected={image.url === selection}
|
|
44
|
+
{select}
|
|
52
45
|
/>
|
|
53
46
|
{:else}
|
|
54
47
|
No images uploaded
|
|
@@ -74,16 +67,4 @@ onMount(() => {
|
|
|
74
67
|
height: auto;
|
|
75
68
|
overflow-y: auto;
|
|
76
69
|
}
|
|
77
|
-
|
|
78
|
-
.bookish-image-chooser-image {
|
|
79
|
-
display: inline-block;
|
|
80
|
-
height: 2em;
|
|
81
|
-
cursor: pointer;
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
.bookish-image-chooser-image.selected {
|
|
85
|
-
outline: var(--app-chrome-border-size) solid
|
|
86
|
-
var(--app-interactive-color);
|
|
87
|
-
outline-offset: calc(-1 * var(--app-chrome-border-size));
|
|
88
|
-
}
|
|
89
70
|
</style>
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
<script>export let image;
|
|
2
|
+
export let selected;
|
|
3
|
+
export let select;
|
|
4
|
+
let retries = 3;
|
|
5
|
+
let error = false;
|
|
6
|
+
let loading = true;
|
|
7
|
+
function loadImage(url) {
|
|
8
|
+
retries--;
|
|
9
|
+
let img = new Image();
|
|
10
|
+
img.onerror = () => {
|
|
11
|
+
if (retries > 0) {
|
|
12
|
+
setTimeout(() => loadImage(url), 1000);
|
|
13
|
+
}
|
|
14
|
+
else {
|
|
15
|
+
loading = false;
|
|
16
|
+
error = true;
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
img.onload = () => {
|
|
20
|
+
loading = false;
|
|
21
|
+
};
|
|
22
|
+
img.src = url;
|
|
23
|
+
}
|
|
24
|
+
loadImage(image.thumb);
|
|
25
|
+
</script>
|
|
26
|
+
|
|
27
|
+
{#if loading}
|
|
28
|
+
<div class="thumbnail loading" />
|
|
29
|
+
{:else}
|
|
30
|
+
<div
|
|
31
|
+
tabindex="0"
|
|
32
|
+
role="button"
|
|
33
|
+
on:click|stopPropagation={() => select(image)}
|
|
34
|
+
on:keydown={(event) =>
|
|
35
|
+
event.key === 'Enter' || event.key === ' '
|
|
36
|
+
? select(image)
|
|
37
|
+
: undefined}
|
|
38
|
+
>
|
|
39
|
+
<img
|
|
40
|
+
class="thumbnail"
|
|
41
|
+
class:selected
|
|
42
|
+
src={error ? image.url : image.thumb}
|
|
43
|
+
alt={`Image named ${image.url}`}
|
|
44
|
+
/>
|
|
45
|
+
</div>
|
|
46
|
+
{/if}
|
|
47
|
+
|
|
48
|
+
<style>
|
|
49
|
+
.thumbnail {
|
|
50
|
+
display: inline-block;
|
|
51
|
+
height: 2em;
|
|
52
|
+
cursor: pointer;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
.thumbnail.selected {
|
|
56
|
+
outline: var(--app-chrome-border-size) solid
|
|
57
|
+
var(--app-interactive-color);
|
|
58
|
+
outline-offset: calc(-1 * var(--app-chrome-border-size));
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
.loading {
|
|
62
|
+
width: 2.5em;
|
|
63
|
+
background: var(--app-chrome-background);
|
|
64
|
+
}
|
|
65
|
+
</style>
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { SvelteComponentTyped } from "svelte";
|
|
2
|
+
import type { Image } from '../../models/book/BookMedia';
|
|
3
|
+
declare const __propDef: {
|
|
4
|
+
props: {
|
|
5
|
+
image: Image;
|
|
6
|
+
selected: boolean;
|
|
7
|
+
select: (image: Image) => void;
|
|
8
|
+
};
|
|
9
|
+
events: {
|
|
10
|
+
[evt: string]: CustomEvent<any>;
|
|
11
|
+
};
|
|
12
|
+
slots: {};
|
|
13
|
+
};
|
|
14
|
+
export type ImageThumbnailProps = typeof __propDef.props;
|
|
15
|
+
export type ImageThumbnailEvents = typeof __propDef.events;
|
|
16
|
+
export type ImageThumbnailSlots = typeof __propDef.slots;
|
|
17
|
+
export default class ImageThumbnail extends SvelteComponentTyped<ImageThumbnailProps, ImageThumbnailEvents, ImageThumbnailSlots> {
|
|
18
|
+
}
|
|
19
|
+
export {};
|