bookish-press 0.4.0
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/LICENSE +21 -0
- package/README.md +5 -0
- package/components/Auth.svelte +52 -0
- package/components/Auth.svelte.d.ts +16 -0
- package/components/Authentication.d.ts +8 -0
- package/components/Authentication.js +1 -0
- package/components/BookPreview.svelte +87 -0
- package/components/BookPreview.svelte.d.ts +18 -0
- package/components/External.svelte +4 -0
- package/components/External.svelte.d.ts +18 -0
- package/components/Link.svelte +5 -0
- package/components/Link.svelte.d.ts +19 -0
- package/components/chapter/Atom.svelte +36 -0
- package/components/chapter/Atom.svelte.d.ts +19 -0
- package/components/chapter/Block.svelte +32 -0
- package/components/chapter/Block.svelte.d.ts +17 -0
- package/components/chapter/Callout.svelte +10 -0
- package/components/chapter/Callout.svelte.d.ts +17 -0
- package/components/chapter/CaptionedCode.svelte +34 -0
- package/components/chapter/CaptionedCode.svelte.d.ts +17 -0
- package/components/chapter/ChapterBody.svelte +23 -0
- package/components/chapter/ChapterBody.svelte.d.ts +18 -0
- package/components/chapter/Citations.svelte +66 -0
- package/components/chapter/Citations.svelte.d.ts +17 -0
- package/components/chapter/Code.svelte +35 -0
- package/components/chapter/Code.svelte.d.ts +22 -0
- package/components/chapter/Comment.svelte +46 -0
- package/components/chapter/Comment.svelte.d.ts +17 -0
- package/components/chapter/Definition.svelte +38 -0
- package/components/chapter/Definition.svelte.d.ts +20 -0
- package/components/chapter/Embed.svelte +122 -0
- package/components/chapter/Embed.svelte.d.ts +18 -0
- package/components/chapter/ErrorMessage.svelte +4 -0
- package/components/chapter/ErrorMessage.svelte.d.ts +17 -0
- package/components/chapter/Footnote.svelte +37 -0
- package/components/chapter/Footnote.svelte.d.ts +19 -0
- package/components/chapter/Format.svelte +57 -0
- package/components/chapter/Format.svelte.d.ts +18 -0
- package/components/chapter/InlineCode.svelte +12 -0
- package/components/chapter/InlineCode.svelte.d.ts +17 -0
- package/components/chapter/Label.svelte +20 -0
- package/components/chapter/Label.svelte.d.ts +17 -0
- package/components/chapter/Link.svelte +51 -0
- package/components/chapter/Link.svelte.d.ts +17 -0
- package/components/chapter/List.svelte +14 -0
- package/components/chapter/List.svelte.d.ts +17 -0
- package/components/chapter/Marginal.svelte +48 -0
- package/components/chapter/Marginal.svelte.d.ts +19 -0
- package/components/chapter/Paragraph.svelte +15 -0
- package/components/chapter/Paragraph.svelte.d.ts +18 -0
- package/components/chapter/Python.svelte +81 -0
- package/components/chapter/Python.svelte.d.ts +18 -0
- package/components/chapter/Quote.svelte +16 -0
- package/components/chapter/Quote.svelte.d.ts +17 -0
- package/components/chapter/Rule.svelte +4 -0
- package/components/chapter/Rule.svelte.d.ts +17 -0
- package/components/chapter/Table.svelte +29 -0
- package/components/chapter/Table.svelte.d.ts +17 -0
- package/components/chapter/Text.svelte +62 -0
- package/components/chapter/Text.svelte.d.ts +17 -0
- package/components/chapter/renderPosition.d.ts +3 -0
- package/components/chapter/renderPosition.js +4 -0
- package/components/editor/BookishEditor.svelte +755 -0
- package/components/editor/BookishEditor.svelte.d.ts +22 -0
- package/components/editor/CalloutEditor.svelte +10 -0
- package/components/editor/CalloutEditor.svelte.d.ts +17 -0
- package/components/editor/CaptionedCodeEditor.svelte +22 -0
- package/components/editor/CaptionedCodeEditor.svelte.d.ts +17 -0
- package/components/editor/CaretContext.d.ts +18 -0
- package/components/editor/CaretContext.js +1 -0
- package/components/editor/CaretState.d.ts +47 -0
- package/components/editor/CaretState.js +1 -0
- package/components/editor/CaretUtilities.d.ts +5 -0
- package/components/editor/CaretUtilities.js +1 -0
- package/components/editor/CitationsEditor.svelte +42 -0
- package/components/editor/CitationsEditor.svelte.d.ts +17 -0
- package/components/editor/Clipboard.d.ts +3 -0
- package/components/editor/Clipboard.js +1 -0
- package/components/editor/Command.d.ts +18 -0
- package/components/editor/Command.js +1 -0
- package/components/editor/Commands.d.ts +3 -0
- package/components/editor/Commands.js +951 -0
- package/components/editor/ConfirmButton.svelte +43 -0
- package/components/editor/ConfirmButton.svelte.d.ts +18 -0
- package/components/editor/DefinitionEditor.svelte +28 -0
- package/components/editor/DefinitionEditor.svelte.d.ts +17 -0
- package/components/editor/EmbedEditor.svelte +87 -0
- package/components/editor/EmbedEditor.svelte.d.ts +17 -0
- package/components/editor/ImageChooser.svelte +70 -0
- package/components/editor/ImageChooser.svelte.d.ts +18 -0
- package/components/editor/InlineCodeEditor.svelte +9 -0
- package/components/editor/InlineCodeEditor.svelte.d.ts +17 -0
- package/components/editor/LabelEditor.svelte +23 -0
- package/components/editor/LabelEditor.svelte.d.ts +17 -0
- package/components/editor/LanguageEditor.svelte +11 -0
- package/components/editor/LanguageEditor.svelte.d.ts +17 -0
- package/components/editor/LinkEditor.svelte +75 -0
- package/components/editor/LinkEditor.svelte.d.ts +17 -0
- package/components/editor/Note.svelte +9 -0
- package/components/editor/Note.svelte.d.ts +23 -0
- package/components/editor/PositionEditor.svelte +14 -0
- package/components/editor/PositionEditor.svelte.d.ts +18 -0
- package/components/editor/QuoteEditor.svelte +5 -0
- package/components/editor/QuoteEditor.svelte.d.ts +17 -0
- package/components/editor/Switch.svelte +56 -0
- package/components/editor/Switch.svelte.d.ts +20 -0
- package/components/editor/TextEditor.svelte +193 -0
- package/components/editor/TextEditor.svelte.d.ts +23 -0
- package/components/editor/Toggle.svelte +38 -0
- package/components/editor/Toggle.svelte.d.ts +19 -0
- package/components/editor/Toolbar.svelte +202 -0
- package/components/editor/Toolbar.svelte.d.ts +20 -0
- package/components/editor/ToolbarGroup.svelte +41 -0
- package/components/editor/ToolbarGroup.svelte.d.ts +19 -0
- package/components/editor/ToolbarIcon.svelte +22 -0
- package/components/editor/ToolbarIcon.svelte.d.ts +16 -0
- package/components/editor/ToolbarSpacer.svelte +1 -0
- package/components/editor/ToolbarSpacer.svelte.d.ts +19 -0
- package/components/editor/URLEditor.svelte +15 -0
- package/components/editor/URLEditor.svelte.d.ts +18 -0
- package/components/editor/UndoState.d.ts +8 -0
- package/components/editor/UndoState.js +1 -0
- package/components/page/Acknowledgements.svelte +29 -0
- package/components/page/Acknowledgements.svelte.d.ts +14 -0
- package/components/page/Alert.svelte +11 -0
- package/components/page/Alert.svelte.d.ts +23 -0
- package/components/page/Authors.svelte +62 -0
- package/components/page/Authors.svelte.d.ts +20 -0
- package/components/page/BulkReferenceEditor.svelte +32 -0
- package/components/page/BulkReferenceEditor.svelte.d.ts +14 -0
- package/components/page/Chapter.svelte +301 -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/components/page/Contexts.d.ts +27 -0
- package/components/page/Contexts.js +21 -0
- package/components/page/DefinitionView.svelte +129 -0
- package/components/page/DefinitionView.svelte.d.ts +18 -0
- package/components/page/Description.svelte +22 -0
- package/components/page/Description.svelte.d.ts +14 -0
- package/components/page/Edition.svelte +106 -0
- package/components/page/Edition.svelte.d.ts +21 -0
- package/components/page/Glossary.svelte +61 -0
- package/components/page/Glossary.svelte.d.ts +14 -0
- package/components/page/Header.svelte +105 -0
- package/components/page/Header.svelte.d.ts +27 -0
- package/components/page/Index.svelte +117 -0
- package/components/page/Index.svelte.d.ts +14 -0
- package/components/page/Instructions.svelte +30 -0
- package/components/page/Instructions.svelte.d.ts +16 -0
- package/components/page/License.svelte +29 -0
- package/components/page/License.svelte.d.ts +14 -0
- package/components/page/Loading.svelte +13 -0
- package/components/page/Loading.svelte.d.ts +19 -0
- package/components/page/Media.svelte +76 -0
- package/components/page/Media.svelte.d.ts +14 -0
- package/components/page/MediaPreview.svelte +11 -0
- package/components/page/MediaPreview.svelte.d.ts +19 -0
- package/components/page/Outline.svelte +173 -0
- package/components/page/Outline.svelte.d.ts +19 -0
- package/components/page/Page.svelte +53 -0
- package/components/page/Page.svelte.d.ts +19 -0
- package/components/page/PossibleChapter.svelte +14 -0
- package/components/page/PossibleChapter.svelte.d.ts +14 -0
- package/components/page/PossibleReference.svelte +16 -0
- package/components/page/PossibleReference.svelte.d.ts +19 -0
- package/components/page/Print.svelte +8 -0
- package/components/page/Print.svelte.d.ts +14 -0
- package/components/page/Reference.svelte +145 -0
- package/components/page/Reference.svelte.d.ts +17 -0
- package/components/page/References.svelte +58 -0
- package/components/page/References.svelte.d.ts +14 -0
- package/components/page/Revisions.svelte +124 -0
- package/components/page/Revisions.svelte.d.ts +14 -0
- package/components/page/Search.svelte +108 -0
- package/components/page/Search.svelte.d.ts +14 -0
- package/components/page/Status.svelte +49 -0
- package/components/page/Status.svelte.d.ts +19 -0
- package/components/page/SubdomainEditor.svelte +30 -0
- package/components/page/SubdomainEditor.svelte.d.ts +14 -0
- package/components/page/TableOfContents.svelte +234 -0
- package/components/page/TableOfContents.svelte.d.ts +14 -0
- package/components/page/TableOfContentsImage.svelte +15 -0
- package/components/page/TableOfContentsImage.svelte.d.ts +16 -0
- package/components/page/TableOfContentsRow.svelte +57 -0
- package/components/page/TableOfContentsRow.svelte.d.ts +24 -0
- package/components/page/ThemeEditor.svelte +52 -0
- package/components/page/ThemeEditor.svelte.d.ts +14 -0
- package/components/page/ThemeEditorPreview.svelte +37 -0
- package/components/page/ThemeEditorPreview.svelte.d.ts +17 -0
- package/components/page/ThemeSetEditor.svelte +17 -0
- package/components/page/ThemeSetEditor.svelte.d.ts +18 -0
- package/components/page/ThemeVariableEditor.svelte +28 -0
- package/components/page/ThemeVariableEditor.svelte.d.ts +18 -0
- package/components/page/Unknown.svelte +29 -0
- package/components/page/Unknown.svelte.d.ts +16 -0
- package/components/page/margins.d.ts +2 -0
- package/components/page/margins.js +132 -0
- package/models/BookLoader.d.ts +2 -0
- package/models/BookLoader.js +67 -0
- package/models/Firebase.d.ts +4 -0
- package/models/Firebase.js +26 -0
- package/models/Firestore.d.ts +22 -0
- package/models/Firestore.js +194 -0
- package/models/book/Book.d.ts +60 -0
- package/models/book/Book.js +135 -0
- package/models/book/BookMedia.d.ts +23 -0
- package/models/book/BookMedia.js +102 -0
- package/models/book/Chapter.d.ts +70 -0
- package/models/book/Chapter.js +221 -0
- package/models/book/ChapterID.d.ts +10 -0
- package/models/book/ChapterID.js +10 -0
- package/models/book/Definition.d.ts +6 -0
- package/models/book/Definition.js +1 -0
- package/models/book/Edition.d.ts +111 -0
- package/models/book/Edition.js +466 -0
- package/models/book/Theme.d.ts +106 -0
- package/models/book/Theme.js +76 -0
- package/models/book/ThemeColors.d.ts +15 -0
- package/models/book/ThemeColors.js +1 -0
- package/models/chapter/AtomNode.d.ts +18 -0
- package/models/chapter/AtomNode.js +31 -0
- package/models/chapter/BlockNode.d.ts +21 -0
- package/models/chapter/BlockNode.js +117 -0
- package/models/chapter/BlocksNode.d.ts +50 -0
- package/models/chapter/BlocksNode.js +709 -0
- package/models/chapter/BlocksNode.test.d.ts +1 -0
- package/models/chapter/BlocksNode.test.js +302 -0
- package/models/chapter/Bookkeeping.d.ts +4 -0
- package/models/chapter/Bookkeeping.js +1 -0
- package/models/chapter/CalloutNode.d.ts +17 -0
- package/models/chapter/CalloutNode.js +36 -0
- package/models/chapter/Caret.d.ts +21 -0
- package/models/chapter/Caret.js +69 -0
- package/models/chapter/ChapterNode.d.ts +34 -0
- package/models/chapter/ChapterNode.js +80 -0
- package/models/chapter/CitationsNode.d.ts +16 -0
- package/models/chapter/CitationsNode.js +17 -0
- package/models/chapter/CodeNode.d.ts +30 -0
- package/models/chapter/CodeNode.js +64 -0
- package/models/chapter/CommentNode.d.ts +18 -0
- package/models/chapter/CommentNode.js +32 -0
- package/models/chapter/DefinitionNode.d.ts +12 -0
- package/models/chapter/DefinitionNode.js +20 -0
- package/models/chapter/Edit.d.ts +7 -0
- package/models/chapter/Edit.js +1 -0
- package/models/chapter/EmbedNode.d.ts +40 -0
- package/models/chapter/EmbedNode.js +89 -0
- package/models/chapter/ErrorNode.d.ts +17 -0
- package/models/chapter/ErrorNode.js +21 -0
- package/models/chapter/FootnoteNode.d.ts +18 -0
- package/models/chapter/FootnoteNode.js +29 -0
- package/models/chapter/FormatNode.d.ts +60 -0
- package/models/chapter/FormatNode.js +614 -0
- package/models/chapter/FormatNode.test.d.ts +1 -0
- package/models/chapter/FormatNode.test.js +54 -0
- package/models/chapter/InlineCodeNode.d.ts +12 -0
- package/models/chapter/InlineCodeNode.js +18 -0
- package/models/chapter/LabelNode.d.ts +17 -0
- package/models/chapter/LabelNode.js +22 -0
- package/models/chapter/LinkNode.d.ts +12 -0
- package/models/chapter/LinkNode.js +16 -0
- package/models/chapter/ListNode.d.ts +51 -0
- package/models/chapter/ListNode.js +370 -0
- package/models/chapter/ListNode.test.d.ts +1 -0
- package/models/chapter/ListNode.test.js +49 -0
- package/models/chapter/MetadataNode.d.ts +17 -0
- package/models/chapter/MetadataNode.js +24 -0
- package/models/chapter/Node.d.ts +36 -0
- package/models/chapter/Node.js +173 -0
- package/models/chapter/Node.test.d.ts +1 -0
- package/models/chapter/Node.test.js +27 -0
- package/models/chapter/ParagraphNode.d.ts +33 -0
- package/models/chapter/ParagraphNode.js +93 -0
- package/models/chapter/ParagraphNode.test.d.ts +1 -0
- package/models/chapter/ParagraphNode.test.js +21 -0
- package/models/chapter/Parser.d.ts +75 -0
- package/models/chapter/Parser.js +824 -0
- package/models/chapter/Parser.test.d.ts +1 -0
- package/models/chapter/Parser.test.js +25 -0
- package/models/chapter/Position.d.ts +2 -0
- package/models/chapter/Position.js +1 -0
- package/models/chapter/QuoteNode.d.ts +25 -0
- package/models/chapter/QuoteNode.js +61 -0
- package/models/chapter/ReferenceNode.d.ts +29 -0
- package/models/chapter/ReferenceNode.js +48 -0
- package/models/chapter/RootNode.d.ts +5 -0
- package/models/chapter/RootNode.js +1 -0
- package/models/chapter/RuleNode.d.ts +15 -0
- package/models/chapter/RuleNode.js +16 -0
- package/models/chapter/TableNode.d.ts +35 -0
- package/models/chapter/TableNode.js +176 -0
- package/models/chapter/TableNode.test.d.ts +1 -0
- package/models/chapter/TableNode.test.js +31 -0
- package/models/chapter/TextNode.d.ts +36 -0
- package/models/chapter/TextNode.js +136 -0
- package/models/chapter/TextNode.test.d.ts +1 -0
- package/models/chapter/TextNode.test.js +6 -0
- package/models/loadEdition.d.ts +5 -0
- package/models/loadEdition.js +16 -0
- package/package.json +189 -0
- package/util/getSubdomain.d.ts +3 -0
- package/util/getSubdomain.js +22 -0
- package/util/isMobile.d.ts +2 -0
- package/util/isMobile.js +6 -0
- package/util/mineReference.d.ts +3 -0
- package/util/mineReference.js +62 -0
- package/util/scrollToEyeLevel.d.ts +2 -0
- package/util/scrollToEyeLevel.js +5 -0
|
@@ -0,0 +1,234 @@
|
|
|
1
|
+
<script>import Instructions from "./Instructions.svelte";
|
|
2
|
+
import Parser from "../../models/chapter/Parser";
|
|
3
|
+
import TableOfContentsRow from "./TableOfContentsRow.svelte";
|
|
4
|
+
import ChapterIDs from "../../models/book/ChapterID";
|
|
5
|
+
import Page from "./Page.svelte";
|
|
6
|
+
import Header from "./Header.svelte";
|
|
7
|
+
import Outline from "./Outline.svelte";
|
|
8
|
+
import Link from "../Link.svelte";
|
|
9
|
+
import SubdomainEditor from "./SubdomainEditor.svelte";
|
|
10
|
+
import Description from "./Description.svelte";
|
|
11
|
+
import Acknowledgements from "./Acknowledgements.svelte";
|
|
12
|
+
import License from "./License.svelte";
|
|
13
|
+
import Revisions from "./Revisions.svelte";
|
|
14
|
+
import Authors from "./Authors.svelte";
|
|
15
|
+
import TextEditor from "../editor/TextEditor.svelte";
|
|
16
|
+
import Toggle from "../editor/Toggle.svelte";
|
|
17
|
+
import { getBase, getEdition, isEditable } from "./Contexts";
|
|
18
|
+
let edition = getEdition();
|
|
19
|
+
let base = getBase();
|
|
20
|
+
let editable = isEditable();
|
|
21
|
+
function getProgressDescription(progress) {
|
|
22
|
+
if (progress === null)
|
|
23
|
+
return "";
|
|
24
|
+
else if (progress === 0)
|
|
25
|
+
return "";
|
|
26
|
+
else if (progress < 30)
|
|
27
|
+
return "; just started";
|
|
28
|
+
else if (progress < 70)
|
|
29
|
+
return "; halfway";
|
|
30
|
+
else if (progress < 95)
|
|
31
|
+
return "; almost done";
|
|
32
|
+
else
|
|
33
|
+
return "; done";
|
|
34
|
+
}
|
|
35
|
+
// Get the chapter progress
|
|
36
|
+
let progressStorage = localStorage.getItem("chapterProgress");
|
|
37
|
+
let progress = progressStorage === null ?
|
|
38
|
+
{} :
|
|
39
|
+
JSON.parse(progressStorage);
|
|
40
|
+
// Is there a colon? Let's make a subtitle
|
|
41
|
+
$: title = $edition.getTitle();
|
|
42
|
+
let subtitle = undefined;
|
|
43
|
+
$: {
|
|
44
|
+
let colon = title.indexOf(":");
|
|
45
|
+
if (colon >= 0) {
|
|
46
|
+
subtitle = title.substring(colon + 1).trim();
|
|
47
|
+
title = title.substring(0, colon).trim();
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
let waitingForChapter = false;
|
|
51
|
+
function addChapter() {
|
|
52
|
+
waitingForChapter = true;
|
|
53
|
+
$edition.addChapter().then(() => waitingForChapter = false);
|
|
54
|
+
}
|
|
55
|
+
</script>
|
|
56
|
+
|
|
57
|
+
<svelte:head>
|
|
58
|
+
<title>{$edition.getTitle()}</title>
|
|
59
|
+
<meta name="description" content={$edition.getTitle()}>
|
|
60
|
+
</svelte:head>
|
|
61
|
+
|
|
62
|
+
<Page title={$edition.getTitle()}>
|
|
63
|
+
<Header
|
|
64
|
+
label="Book title"
|
|
65
|
+
getImage={() => $edition.getImage("cover")}
|
|
66
|
+
setImage={embed => $edition.setImage("cover", embed)}
|
|
67
|
+
header={title}
|
|
68
|
+
subtitle={subtitle}
|
|
69
|
+
tags={$edition.getTags()}
|
|
70
|
+
save={text => $edition.setTitle(text)}
|
|
71
|
+
>
|
|
72
|
+
<svelte:fragment slot="before">
|
|
73
|
+
{#if editable}
|
|
74
|
+
<SubdomainEditor slot="before"/>
|
|
75
|
+
{/if}
|
|
76
|
+
</svelte:fragment>
|
|
77
|
+
<Outline slot="outline"
|
|
78
|
+
previous={null}
|
|
79
|
+
next={$edition.getNextChapterID("")}
|
|
80
|
+
/>
|
|
81
|
+
<Authors slot="after"
|
|
82
|
+
authors={$edition.getAuthors()}
|
|
83
|
+
add={ () => $edition.addAuthor("")}
|
|
84
|
+
edit={(index, text) => $edition.setAuthor(index, text) }
|
|
85
|
+
remove={index => $edition.removeAuthor(index)}
|
|
86
|
+
/>
|
|
87
|
+
</Header>
|
|
88
|
+
|
|
89
|
+
<Instructions>
|
|
90
|
+
Above you can edit your book's authors, title, and cover image.
|
|
91
|
+
</Instructions>
|
|
92
|
+
|
|
93
|
+
<Description/>
|
|
94
|
+
|
|
95
|
+
<Instructions>
|
|
96
|
+
This will appear on the <Link to={base + "/read"}>book browsing</Link> page and in your table of contents.
|
|
97
|
+
Write an informative description of what your book is about.
|
|
98
|
+
</Instructions>
|
|
99
|
+
|
|
100
|
+
<h2 class="bookish-header" id="chapters">Chapters {#if editable}<button disabled={waitingForChapter} on:click={addChapter}>+</button>{/if}</h2>
|
|
101
|
+
|
|
102
|
+
<Instructions>
|
|
103
|
+
Add, remove, and reorder chapters here.
|
|
104
|
+
You can add optional book sections to each chapter, toggle chapters as numbered/unnumbered or published/forthcoming.
|
|
105
|
+
Click the title to edit the chapter.
|
|
106
|
+
</Instructions>
|
|
107
|
+
|
|
108
|
+
<div class="bookish-table">
|
|
109
|
+
<table id="toc">
|
|
110
|
+
<tbody>
|
|
111
|
+
{#each $edition.getChapters() as chapter }
|
|
112
|
+
{@const chapterID = chapter.getChapterID() }
|
|
113
|
+
{@const readingTime = chapter.getReadingTime() }
|
|
114
|
+
{@const readingEstimate =
|
|
115
|
+
readingTime === undefined ? "Forthcoming" :
|
|
116
|
+
readingTime < 5 ? "<5 min read" :
|
|
117
|
+
readingTime < 60 ? "~" + Math.floor(readingTime / 5) * 5 + " min read" :
|
|
118
|
+
"~" + Math.floor(readingTime / 60) + " hour read" }
|
|
119
|
+
{@const section = chapter.getSection() }
|
|
120
|
+
{@const etc = readingEstimate + (!chapter.isForthcoming() ? getProgressDescription(chapterID in progress ? progress[chapterID] : null) : "") }
|
|
121
|
+
|
|
122
|
+
<TableOfContentsRow
|
|
123
|
+
chapter={chapter}
|
|
124
|
+
chapterID={chapterID}
|
|
125
|
+
number={$edition.getChapterNumber(chapterID)}
|
|
126
|
+
title={chapter.getTitle()}
|
|
127
|
+
forthcoming={chapter.isForthcoming()}
|
|
128
|
+
>
|
|
129
|
+
<span slot="annotation">
|
|
130
|
+
{#if editable }
|
|
131
|
+
<TextEditor
|
|
132
|
+
label={"Chapter section editor"}
|
|
133
|
+
startText={section ? section : ""}
|
|
134
|
+
placeholder="Section"
|
|
135
|
+
valid={ () => undefined }
|
|
136
|
+
save={text => chapter.setSection(text) }
|
|
137
|
+
/>
|
|
138
|
+
{:else}
|
|
139
|
+
{#if section }{section}{/if}
|
|
140
|
+
{/if}
|
|
141
|
+
</span>
|
|
142
|
+
<span slot="etc">
|
|
143
|
+
{#if editable}
|
|
144
|
+
<Toggle on={chapter.isForthcoming()} save={on => chapter.setForthcoming(on)}>
|
|
145
|
+
{etc}
|
|
146
|
+
</Toggle>
|
|
147
|
+
{:else}
|
|
148
|
+
{ etc }
|
|
149
|
+
{/if}
|
|
150
|
+
</span>
|
|
151
|
+
</TableOfContentsRow>
|
|
152
|
+
{/each}
|
|
153
|
+
{#if $edition.hasReferences() || editable }
|
|
154
|
+
<TableOfContentsRow
|
|
155
|
+
chapterID={ChapterIDs.ReferencesID}
|
|
156
|
+
title="References"
|
|
157
|
+
>
|
|
158
|
+
<span slot="annotation">Everything cited</span>
|
|
159
|
+
</TableOfContentsRow>
|
|
160
|
+
{/if}
|
|
161
|
+
{#if $edition.getGlossary() && Object.keys($edition.getGlossary()).length > 0 || editable }
|
|
162
|
+
<TableOfContentsRow
|
|
163
|
+
chapterID={ChapterIDs.GlossaryID}
|
|
164
|
+
title="Glossary"
|
|
165
|
+
>
|
|
166
|
+
<span slot="annotation">Definitions</span>
|
|
167
|
+
</TableOfContentsRow>
|
|
168
|
+
{/if}
|
|
169
|
+
<TableOfContentsRow
|
|
170
|
+
chapterID={ChapterIDs.IndexID}
|
|
171
|
+
title="Index"
|
|
172
|
+
>
|
|
173
|
+
<span slot="annotation">Common words and where they are</span>
|
|
174
|
+
</TableOfContentsRow>
|
|
175
|
+
<TableOfContentsRow
|
|
176
|
+
chapterID={ChapterIDs.SearchID}
|
|
177
|
+
title="Search"
|
|
178
|
+
>
|
|
179
|
+
<span slot="annotation">Find where words occur</span>
|
|
180
|
+
</TableOfContentsRow>
|
|
181
|
+
|
|
182
|
+
<TableOfContentsRow
|
|
183
|
+
chapterID={ChapterIDs.MediaID}
|
|
184
|
+
title="Media"
|
|
185
|
+
>
|
|
186
|
+
<span slot="annotation">Images and video in the book</span>
|
|
187
|
+
</TableOfContentsRow>
|
|
188
|
+
{#if editable }
|
|
189
|
+
<TableOfContentsRow
|
|
190
|
+
chapterID="theme"
|
|
191
|
+
title="Theme"
|
|
192
|
+
>
|
|
193
|
+
<span slot="annotation">Style the book</span>
|
|
194
|
+
</TableOfContentsRow>
|
|
195
|
+
<TableOfContentsRow
|
|
196
|
+
chapterID="unknown"
|
|
197
|
+
title="Unknown"
|
|
198
|
+
>
|
|
199
|
+
<span slot="annotation">Customize bad links</span>
|
|
200
|
+
</TableOfContentsRow>
|
|
201
|
+
{/if}
|
|
202
|
+
</tbody>
|
|
203
|
+
</table>
|
|
204
|
+
</div>
|
|
205
|
+
|
|
206
|
+
<Acknowledgements />
|
|
207
|
+
<License />
|
|
208
|
+
|
|
209
|
+
<h2 class="bookish-header" id="print">Print</h2>
|
|
210
|
+
|
|
211
|
+
<Instructions>
|
|
212
|
+
This offers a way for readers to print the entire book as a single page.
|
|
213
|
+
</Instructions>
|
|
214
|
+
|
|
215
|
+
<p>
|
|
216
|
+
Want to print this book or generate a PDF?
|
|
217
|
+
See <Link to={base + "print"}>all chapters on a single page</Link> and then print or export.
|
|
218
|
+
Long books can take some time to render.
|
|
219
|
+
</p>
|
|
220
|
+
|
|
221
|
+
<h2 class="bookish-header" id="citation">Citation</h2>
|
|
222
|
+
|
|
223
|
+
<Instructions>
|
|
224
|
+
This citation is dynamically created from the current authors, title, and date.
|
|
225
|
+
</Instructions>
|
|
226
|
+
|
|
227
|
+
<!-- Book citation -->
|
|
228
|
+
<p>
|
|
229
|
+
{ $edition.getAuthors().map(author => Parser.parseFormat($edition, author).toText()).join(", ") } ({(new Date()).getFullYear() }). <em>{$edition.getTitle()}</em>. { location.protocol+'//'+location.host+location.pathname }, <em>retrieved { (new Date()).toLocaleDateString("en-US")}</em>.
|
|
230
|
+
</p>
|
|
231
|
+
|
|
232
|
+
<Revisions />
|
|
233
|
+
|
|
234
|
+
</Page>
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { SvelteComponentTyped } from "svelte";
|
|
2
|
+
declare const __propDef: {
|
|
3
|
+
props: {};
|
|
4
|
+
events: {
|
|
5
|
+
[evt: string]: CustomEvent<any>;
|
|
6
|
+
};
|
|
7
|
+
slots: {};
|
|
8
|
+
};
|
|
9
|
+
export declare type TableOfContentsProps = typeof __propDef.props;
|
|
10
|
+
export declare type TableOfContentsEvents = typeof __propDef.events;
|
|
11
|
+
export declare type TableOfContentsSlots = typeof __propDef.slots;
|
|
12
|
+
export default class TableOfContents extends SvelteComponentTyped<TableOfContentsProps, TableOfContentsEvents, TableOfContentsSlots> {
|
|
13
|
+
}
|
|
14
|
+
export {};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
<script>import EmbedNode from "../../models/chapter/EmbedNode";
|
|
2
|
+
import Parser from "../../models/chapter/Parser";
|
|
3
|
+
import { getEdition } from "./Contexts";
|
|
4
|
+
export let embed;
|
|
5
|
+
let edition = getEdition();
|
|
6
|
+
$: embedNode = embed === null ? null : Parser.parseEmbed($edition, embed);
|
|
7
|
+
</script>
|
|
8
|
+
|
|
9
|
+
{#if embedNode instanceof EmbedNode }
|
|
10
|
+
<img
|
|
11
|
+
style="width: 5em"
|
|
12
|
+
src={embedNode.getSmallURL() }
|
|
13
|
+
alt={embedNode.getDescription() }
|
|
14
|
+
/>
|
|
15
|
+
{/if}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { SvelteComponentTyped } from "svelte";
|
|
2
|
+
declare const __propDef: {
|
|
3
|
+
props: {
|
|
4
|
+
embed: string | null;
|
|
5
|
+
};
|
|
6
|
+
events: {
|
|
7
|
+
[evt: string]: CustomEvent<any>;
|
|
8
|
+
};
|
|
9
|
+
slots: {};
|
|
10
|
+
};
|
|
11
|
+
export declare type TableOfContentsImageProps = typeof __propDef.props;
|
|
12
|
+
export declare type TableOfContentsImageEvents = typeof __propDef.events;
|
|
13
|
+
export declare type TableOfContentsImageSlots = typeof __propDef.slots;
|
|
14
|
+
export default class TableOfContentsImage extends SvelteComponentTyped<TableOfContentsImageProps, TableOfContentsImageEvents, TableOfContentsImageSlots> {
|
|
15
|
+
}
|
|
16
|
+
export {};
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
<script>import Link from "../Link.svelte";
|
|
2
|
+
import TableOfContentsImage from "./TableOfContentsImage.svelte";
|
|
3
|
+
import Toggle from "../editor/Toggle.svelte";
|
|
4
|
+
import ConfirmButton from "../editor/ConfirmButton.svelte";
|
|
5
|
+
import { getBase, getEdition, isEditable } from "./Contexts";
|
|
6
|
+
export let chapterID;
|
|
7
|
+
export let chapter = undefined;
|
|
8
|
+
export let title;
|
|
9
|
+
export let number = undefined;
|
|
10
|
+
export let forthcoming = false;
|
|
11
|
+
let edition = getEdition();
|
|
12
|
+
let base = getBase();
|
|
13
|
+
let editable = isEditable();
|
|
14
|
+
function moveUp() { chapter?.move(-1); }
|
|
15
|
+
function moveDown() { chapter?.move(1); }
|
|
16
|
+
</script>
|
|
17
|
+
|
|
18
|
+
<tr class={forthcoming ? "bookish-forthcoming" : ""}>
|
|
19
|
+
<td><TableOfContentsImage embed={$edition.getImage(chapterID)} /></td>
|
|
20
|
+
<td>
|
|
21
|
+
{#if editable && chapter}
|
|
22
|
+
<Toggle on={number !== undefined} save={ on => chapter && chapter.setNumbered(on) }>
|
|
23
|
+
<div class="bookish-chapter-number">
|
|
24
|
+
{#if number !== undefined}
|
|
25
|
+
Chapter {number}
|
|
26
|
+
{:else}
|
|
27
|
+
<span class="bookish-muted">Unnumbered</span>
|
|
28
|
+
{/if}
|
|
29
|
+
</div>
|
|
30
|
+
</Toggle>
|
|
31
|
+
{:else if number !== undefined }
|
|
32
|
+
<div class="bookish-chapter-number">{"Chapter " + number}</div>
|
|
33
|
+
{/if}
|
|
34
|
+
{#if forthcoming && !editable}
|
|
35
|
+
<span>{title}</span>
|
|
36
|
+
{:else}
|
|
37
|
+
<Link to={`${base}/${chapterID}`}>{title}</Link>
|
|
38
|
+
{/if}
|
|
39
|
+
<small class="bookish-muted"><br/><em><slot name="annotation"></slot></em></small>
|
|
40
|
+
</td>
|
|
41
|
+
<td><slot name="etc"></slot></td>
|
|
42
|
+
{#if editable }
|
|
43
|
+
<td>
|
|
44
|
+
{#if chapter }
|
|
45
|
+
<button disabled={chapter.getPosition() === 0} on:click={moveUp}>{"↑"}</button>
|
|
46
|
+
|
|
47
|
+
<button disabled={chapter.getPosition() === chapter.getBook().getChapterCount() - 1} on:click={moveDown}>{"↓"}</button>
|
|
48
|
+
|
|
49
|
+
<ConfirmButton
|
|
50
|
+
commandLabel="x"
|
|
51
|
+
confirmLabel="Confirm"
|
|
52
|
+
command={() => chapter && chapter.delete()}
|
|
53
|
+
/>
|
|
54
|
+
{/if}
|
|
55
|
+
</td>
|
|
56
|
+
{/if}
|
|
57
|
+
</tr>
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { SvelteComponentTyped } from "svelte";
|
|
2
|
+
import type Chapter from "../../models/book/Chapter";
|
|
3
|
+
declare const __propDef: {
|
|
4
|
+
props: {
|
|
5
|
+
chapterID: string;
|
|
6
|
+
chapter?: Chapter | undefined;
|
|
7
|
+
title: string;
|
|
8
|
+
number?: number | undefined;
|
|
9
|
+
forthcoming?: boolean | undefined;
|
|
10
|
+
};
|
|
11
|
+
events: {
|
|
12
|
+
[evt: string]: CustomEvent<any>;
|
|
13
|
+
};
|
|
14
|
+
slots: {
|
|
15
|
+
annotation: {};
|
|
16
|
+
etc: {};
|
|
17
|
+
};
|
|
18
|
+
};
|
|
19
|
+
export declare type TableOfContentsRowProps = typeof __propDef.props;
|
|
20
|
+
export declare type TableOfContentsRowEvents = typeof __propDef.events;
|
|
21
|
+
export declare type TableOfContentsRowSlots = typeof __propDef.slots;
|
|
22
|
+
export default class TableOfContentsRow extends SvelteComponentTyped<TableOfContentsRowProps, TableOfContentsRowEvents, TableOfContentsRowSlots> {
|
|
23
|
+
}
|
|
24
|
+
export {};
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
<script>import Header from "./Header.svelte";
|
|
2
|
+
import Outline from './Outline.svelte';
|
|
3
|
+
import Page from './Page.svelte';
|
|
4
|
+
import { defaultTheme } from '../../models/book/Theme';
|
|
5
|
+
import ConfirmButton from '../editor/ConfirmButton.svelte';
|
|
6
|
+
import Instructions from './Instructions.svelte';
|
|
7
|
+
import ThemeSetEditor from './ThemeSetEditor.svelte';
|
|
8
|
+
import ThemeEditorPreview from './ThemeEditorPreview.svelte';
|
|
9
|
+
import External from "../External.svelte";
|
|
10
|
+
import { getEdition } from "./Contexts";
|
|
11
|
+
let edition = getEdition();
|
|
12
|
+
$: theme = $edition.getTheme();
|
|
13
|
+
</script>
|
|
14
|
+
|
|
15
|
+
<Page title={`${$edition.getTitle()} - Theme`}>
|
|
16
|
+
<Header
|
|
17
|
+
label="Theme"
|
|
18
|
+
getImage={() => null}
|
|
19
|
+
setImage={ () => undefined}
|
|
20
|
+
header="Theme"
|
|
21
|
+
>
|
|
22
|
+
<Outline
|
|
23
|
+
slot="outline"
|
|
24
|
+
previous={null}
|
|
25
|
+
next={null}
|
|
26
|
+
/>
|
|
27
|
+
</Header>
|
|
28
|
+
|
|
29
|
+
<Instructions>
|
|
30
|
+
This is the theme editor.
|
|
31
|
+
You can use it to choose from existing themes or create a custom theme for your book's appearance.
|
|
32
|
+
To use it, you'll need to know a bit about how to format CSS <External to="https://developer.mozilla.org/en-US/docs/Web/CSS/color">colors</External>, <External to="https://developer.mozilla.org/en-US/docs/Web/CSS/font-size">fonts</External>, and <External to="https://developer.mozilla.org/en-US/docs/Learn/CSS/Building_blocks/Values_and_units">sizes</External>.
|
|
33
|
+
</Instructions>
|
|
34
|
+
|
|
35
|
+
{#if theme === null }
|
|
36
|
+
<button on:click={() => $edition.setTheme(defaultTheme)}>Customize</button>
|
|
37
|
+
{:else}
|
|
38
|
+
<ConfirmButton
|
|
39
|
+
commandLabel="Revert to default"
|
|
40
|
+
confirmLabel="Delete your theme?"
|
|
41
|
+
command={() => $edition.setTheme(null)}
|
|
42
|
+
/>
|
|
43
|
+
<ThemeEditorPreview theme={theme}/>
|
|
44
|
+
<ThemeSetEditor header={"Light mode colors"} group="light" theme={theme} />
|
|
45
|
+
<ThemeSetEditor header={"Dark mode colors"} group="dark" theme={theme} />
|
|
46
|
+
<ThemeSetEditor header={"Fonts"} group="fonts" theme={theme} />
|
|
47
|
+
<ThemeSetEditor header={"Font sizes"} group="sizes" theme={theme} />
|
|
48
|
+
<ThemeSetEditor header={"Font weights"} group="weights" theme={theme} />
|
|
49
|
+
<ThemeSetEditor header={"Spacing"} group="spacing" theme={theme} />
|
|
50
|
+
{/if}
|
|
51
|
+
|
|
52
|
+
</Page>
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { SvelteComponentTyped } from "svelte";
|
|
2
|
+
declare const __propDef: {
|
|
3
|
+
props: {};
|
|
4
|
+
events: {
|
|
5
|
+
[evt: string]: CustomEvent<any>;
|
|
6
|
+
};
|
|
7
|
+
slots: {};
|
|
8
|
+
};
|
|
9
|
+
export declare type ThemeEditorProps = typeof __propDef.props;
|
|
10
|
+
export declare type ThemeEditorEvents = typeof __propDef.events;
|
|
11
|
+
export declare type ThemeEditorSlots = typeof __propDef.slots;
|
|
12
|
+
export default class ThemeEditor extends SvelteComponentTyped<ThemeEditorProps, ThemeEditorEvents, ThemeEditorSlots> {
|
|
13
|
+
}
|
|
14
|
+
export {};
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
<script>import ChapterBody from "../chapter/ChapterBody.svelte";
|
|
2
|
+
import Parser from "../../models/chapter/Parser";
|
|
3
|
+
import { getDarkMode } from "./Contexts";
|
|
4
|
+
export let theme;
|
|
5
|
+
let darkMode = getDarkMode();
|
|
6
|
+
$: preview = Parser.parseChapter(undefined, `
|
|
7
|
+
# Header 1
|
|
8
|
+
## Header 2
|
|
9
|
+
### Header 3
|
|
10
|
+
|
|
11
|
+
This is how a sentence with _various_ *formatting* ^will^ look.
|
|
12
|
+
|
|
13
|
+
* How does it look?
|
|
14
|
+
* Would you change anything?
|
|
15
|
+
`);
|
|
16
|
+
</script>
|
|
17
|
+
|
|
18
|
+
<div class="bookish-theme-preview" style={`background-color: ${$darkMode ? theme.dark.backgroundColor : theme.light.backgroundColor };`}>
|
|
19
|
+
<ChapterBody node={preview}/>
|
|
20
|
+
</div>
|
|
21
|
+
|
|
22
|
+
<style>
|
|
23
|
+
.bookish-theme-preview {
|
|
24
|
+
padding: 1em;
|
|
25
|
+
border: var(--bookish-app-chrome-border-width) solid black;
|
|
26
|
+
transform: translate(-25%, -25%) scale(0.5);
|
|
27
|
+
position: sticky;
|
|
28
|
+
margin-top: 2em;
|
|
29
|
+
top: 2em;
|
|
30
|
+
z-index: 3;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
:global(.bookish-dark .bookish-theme-preview) {
|
|
34
|
+
border-color: white;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
</style>
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { SvelteComponentTyped } from "svelte";
|
|
2
|
+
import type Theme from "../../models/book/Theme";
|
|
3
|
+
declare const __propDef: {
|
|
4
|
+
props: {
|
|
5
|
+
theme: Theme;
|
|
6
|
+
};
|
|
7
|
+
events: {
|
|
8
|
+
[evt: string]: CustomEvent<any>;
|
|
9
|
+
};
|
|
10
|
+
slots: {};
|
|
11
|
+
};
|
|
12
|
+
export declare type ThemeEditorPreviewProps = typeof __propDef.props;
|
|
13
|
+
export declare type ThemeEditorPreviewEvents = typeof __propDef.events;
|
|
14
|
+
export declare type ThemeEditorPreviewSlots = typeof __propDef.slots;
|
|
15
|
+
export default class ThemeEditorPreview extends SvelteComponentTyped<ThemeEditorPreviewProps, ThemeEditorPreviewEvents, ThemeEditorPreviewSlots> {
|
|
16
|
+
}
|
|
17
|
+
export {};
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
<script>import ThemeVariableEditor from "./ThemeVariableEditor.svelte";
|
|
2
|
+
export let header;
|
|
3
|
+
export let group;
|
|
4
|
+
export let theme;
|
|
5
|
+
$: set = theme[group];
|
|
6
|
+
</script>
|
|
7
|
+
|
|
8
|
+
<h2>{header}</h2>
|
|
9
|
+
<div class="bookish-table">
|
|
10
|
+
<table>
|
|
11
|
+
<tbody>
|
|
12
|
+
{#each Object.keys(set).sort() as name }
|
|
13
|
+
<ThemeVariableEditor group={group} name={name} value={set[name]} />
|
|
14
|
+
{/each}
|
|
15
|
+
</tbody>
|
|
16
|
+
</table>
|
|
17
|
+
</div>
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { SvelteComponentTyped } from "svelte";
|
|
2
|
+
declare const __propDef: {
|
|
3
|
+
props: {
|
|
4
|
+
header: string;
|
|
5
|
+
group: string;
|
|
6
|
+
theme: Record<string, Record<string, string>>;
|
|
7
|
+
};
|
|
8
|
+
events: {
|
|
9
|
+
[evt: string]: CustomEvent<any>;
|
|
10
|
+
};
|
|
11
|
+
slots: {};
|
|
12
|
+
};
|
|
13
|
+
export declare type ThemeSetEditorProps = typeof __propDef.props;
|
|
14
|
+
export declare type ThemeSetEditorEvents = typeof __propDef.events;
|
|
15
|
+
export declare type ThemeSetEditorSlots = typeof __propDef.slots;
|
|
16
|
+
export default class ThemeSetEditor extends SvelteComponentTyped<ThemeSetEditorProps, ThemeSetEditorEvents, ThemeSetEditorSlots> {
|
|
17
|
+
}
|
|
18
|
+
export {};
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
<script>import TextEditor from "../editor/TextEditor.svelte";
|
|
2
|
+
import { getEdition } from "./Contexts";
|
|
3
|
+
const placeholders = {
|
|
4
|
+
light: "CSS color",
|
|
5
|
+
dark: "CSS color",
|
|
6
|
+
fonts: "CSS font name",
|
|
7
|
+
sizes: "CSS font size",
|
|
8
|
+
weights: "CSS font weights",
|
|
9
|
+
spacing: "CSS length"
|
|
10
|
+
};
|
|
11
|
+
export let group;
|
|
12
|
+
export let name;
|
|
13
|
+
export let value;
|
|
14
|
+
let edition = getEdition();
|
|
15
|
+
</script>
|
|
16
|
+
|
|
17
|
+
<tr>
|
|
18
|
+
<td>{name.replace(/([a-z])([A-Z])/g, "$1 $2").split(" ").map(s => s.charAt(0).toUpperCase() + s.substring(1)).join(" ")}</td>
|
|
19
|
+
<td style="text-align: right">
|
|
20
|
+
<TextEditor
|
|
21
|
+
startText={value}
|
|
22
|
+
label={`${name} editor`}
|
|
23
|
+
placeholder={group in placeholders ? placeholders[group] : "value"}
|
|
24
|
+
valid={ () => undefined }
|
|
25
|
+
save={text => $edition.setThemeValue(group, name, text)}
|
|
26
|
+
/>
|
|
27
|
+
</td>
|
|
28
|
+
</tr>
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { SvelteComponentTyped } from "svelte";
|
|
2
|
+
declare const __propDef: {
|
|
3
|
+
props: {
|
|
4
|
+
group: string;
|
|
5
|
+
name: string;
|
|
6
|
+
value: string;
|
|
7
|
+
};
|
|
8
|
+
events: {
|
|
9
|
+
[evt: string]: CustomEvent<any>;
|
|
10
|
+
};
|
|
11
|
+
slots: {};
|
|
12
|
+
};
|
|
13
|
+
export declare type ThemeVariableEditorProps = typeof __propDef.props;
|
|
14
|
+
export declare type ThemeVariableEditorEvents = typeof __propDef.events;
|
|
15
|
+
export declare type ThemeVariableEditorSlots = typeof __propDef.slots;
|
|
16
|
+
export default class ThemeVariableEditor extends SvelteComponentTyped<ThemeVariableEditorProps, ThemeVariableEditorEvents, ThemeVariableEditorSlots> {
|
|
17
|
+
}
|
|
18
|
+
export {};
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
<script>import Header from "./Header.svelte";
|
|
2
|
+
import Outline from './Outline.svelte';
|
|
3
|
+
import Page from './Page.svelte';
|
|
4
|
+
import Instructions from './Instructions.svelte';
|
|
5
|
+
import ChapterIDs from '../../models/book/ChapterID';
|
|
6
|
+
import { getEdition } from "./Contexts";
|
|
7
|
+
let edition = getEdition();
|
|
8
|
+
</script>
|
|
9
|
+
<Page title={`${$edition.getTitle()} - Unknown Page`}>
|
|
10
|
+
<Header
|
|
11
|
+
label="Unknown page title"
|
|
12
|
+
getImage={() => $edition.getImage(ChapterIDs.UnknownID)}
|
|
13
|
+
setImage={embed => $edition.setImage(ChapterIDs.UnknownID, embed)}
|
|
14
|
+
header="Oops."
|
|
15
|
+
>
|
|
16
|
+
<Outline
|
|
17
|
+
slot="outline"
|
|
18
|
+
previous={null}
|
|
19
|
+
next={null}
|
|
20
|
+
/>
|
|
21
|
+
</Header>
|
|
22
|
+
|
|
23
|
+
<Instructions>
|
|
24
|
+
This page will be shown if the reader somehow ends up on a page that doesn't exist.
|
|
25
|
+
You can customize the image shown.
|
|
26
|
+
</Instructions>
|
|
27
|
+
|
|
28
|
+
<slot></slot>
|
|
29
|
+
</Page>
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { SvelteComponentTyped } from "svelte";
|
|
2
|
+
declare const __propDef: {
|
|
3
|
+
props: {};
|
|
4
|
+
events: {
|
|
5
|
+
[evt: string]: CustomEvent<any>;
|
|
6
|
+
};
|
|
7
|
+
slots: {
|
|
8
|
+
default: {};
|
|
9
|
+
};
|
|
10
|
+
};
|
|
11
|
+
export declare type UnknownProps = typeof __propDef.props;
|
|
12
|
+
export declare type UnknownEvents = typeof __propDef.events;
|
|
13
|
+
export declare type UnknownSlots = typeof __propDef.slots;
|
|
14
|
+
export default class Unknown extends SvelteComponentTyped<UnknownProps, UnknownEvents, UnknownSlots> {
|
|
15
|
+
}
|
|
16
|
+
export {};
|