bookish-press 0.4.1 → 0.4.16
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 -1
- package/components/Auth.svelte +19 -14
- package/components/Auth.svelte.d.ts +4 -4
- package/components/Authentication.d.ts +2 -2
- package/components/BookPreview.svelte +77 -59
- package/components/BookPreview.svelte.d.ts +5 -5
- package/components/External.svelte +1 -1
- package/components/External.svelte.d.ts +3 -3
- package/components/Link.svelte +49 -3
- package/components/Link.svelte.d.ts +3 -4
- package/components/app/BookList.svelte +19 -0
- package/components/app/BookList.svelte.d.ts +18 -0
- package/components/app/Button.svelte +49 -0
- package/components/app/Button.svelte.d.ts +22 -0
- package/components/app/Feedback.svelte +45 -0
- package/components/app/Feedback.svelte.d.ts +18 -0
- package/components/app/Head.svelte +12 -0
- package/components/app/Head.svelte.d.ts +27 -0
- package/components/app/Large.svelte +8 -0
- package/components/app/Large.svelte.d.ts +27 -0
- package/components/app/Lead.svelte +12 -0
- package/components/app/Lead.svelte.d.ts +27 -0
- package/components/app/Link.svelte +24 -0
- package/components/app/Link.svelte.d.ts +20 -0
- package/components/app/Options.svelte +24 -0
- package/components/app/Options.svelte.d.ts +19 -0
- package/components/app/Paragraph.svelte +19 -0
- package/components/app/Paragraph.svelte.d.ts +18 -0
- package/components/app/Table.svelte +32 -0
- package/components/app/Table.svelte.d.ts +27 -0
- package/components/app/TextInput.svelte +37 -0
- package/components/app/TextInput.svelte.d.ts +22 -0
- package/components/app/Writing.svelte +13 -0
- package/components/app/Writing.svelte.d.ts +27 -0
- package/components/chapter/Atom.svelte +20 -6
- package/components/chapter/Atom.svelte.d.ts +3 -3
- package/components/chapter/Block.svelte +23 -20
- package/components/chapter/Block.svelte.d.ts +4 -4
- package/components/chapter/Callout.svelte +38 -7
- package/components/chapter/Callout.svelte.d.ts +4 -4
- package/components/chapter/CaptionedCode.svelte +66 -23
- package/components/chapter/CaptionedCode.svelte.d.ts +4 -4
- package/components/chapter/ChapterBody.svelte +61 -9
- package/components/chapter/ChapterBody.svelte.d.ts +4 -4
- package/components/chapter/Citations.svelte +86 -20
- package/components/chapter/Citations.svelte.d.ts +4 -4
- package/components/chapter/Code.svelte +152 -21
- package/components/chapter/Code.svelte.d.ts +3 -3
- package/components/chapter/Comment.svelte +38 -16
- package/components/chapter/Comment.svelte.d.ts +3 -3
- package/components/chapter/Definition.svelte +52 -18
- package/components/chapter/Definition.svelte.d.ts +5 -8
- package/components/chapter/Embed.svelte +154 -66
- package/components/chapter/Embed.svelte.d.ts +5 -4
- package/components/chapter/ErrorMessage.svelte +7 -2
- package/components/chapter/ErrorMessage.svelte.d.ts +4 -4
- package/components/chapter/ExtendedPrism.d.ts +2 -0
- package/components/chapter/ExtendedPrism.js +69 -0
- package/components/chapter/Figure.svelte +90 -0
- package/components/chapter/Figure.svelte.d.ts +24 -0
- package/components/chapter/Footnote.svelte +75 -12
- package/components/chapter/Footnote.svelte.d.ts +4 -4
- package/components/chapter/Format.svelte +60 -37
- package/components/chapter/Format.svelte.d.ts +4 -4
- package/components/chapter/InlineCode.svelte +15 -5
- package/components/chapter/InlineCode.svelte.d.ts +4 -4
- package/components/chapter/Label.svelte +37 -8
- package/components/chapter/Label.svelte.d.ts +4 -4
- package/components/chapter/Link.svelte +23 -18
- package/components/chapter/Link.svelte.d.ts +4 -4
- package/components/chapter/List.svelte +75 -8
- package/components/chapter/List.svelte.d.ts +4 -4
- package/components/chapter/Marginal.svelte +169 -27
- package/components/chapter/Marginal.svelte.d.ts +6 -3
- package/components/chapter/Paragraph.svelte +74 -6
- package/components/chapter/Paragraph.svelte.d.ts +4 -4
- package/components/chapter/Positioned.svelte +33 -0
- package/components/chapter/Positioned.svelte.d.ts +19 -0
- package/components/chapter/Problem.svelte +15 -0
- package/components/chapter/Problem.svelte.d.ts +27 -0
- package/components/chapter/Python.svelte +68 -21
- package/components/chapter/Python.svelte.d.ts +4 -4
- package/components/chapter/Quote.svelte +64 -11
- package/components/chapter/Quote.svelte.d.ts +4 -4
- package/components/chapter/Rule.svelte +12 -1
- package/components/chapter/Rule.svelte.d.ts +4 -4
- package/components/chapter/Table.svelte +36 -25
- package/components/chapter/Table.svelte.d.ts +4 -4
- package/components/chapter/Text.svelte +61 -36
- package/components/chapter/Text.svelte.d.ts +5 -4
- package/components/editor/BookishEditor.svelte +343 -237
- package/components/editor/BookishEditor.svelte.d.ts +5 -5
- package/components/editor/CalloutEditor.svelte +5 -5
- package/components/editor/CalloutEditor.svelte.d.ts +4 -4
- package/components/editor/CaptionedCodeEditor.svelte +16 -12
- package/components/editor/CaptionedCodeEditor.svelte.d.ts +4 -4
- package/components/editor/CaretContext.d.ts +48 -16
- package/components/editor/CaretState.d.ts +16 -44
- package/components/editor/CaretUtilities.d.ts +2 -2
- package/components/editor/CaretView.svelte +80 -0
- package/components/editor/CaretView.svelte.d.ts +24 -0
- package/components/editor/CitationsEditor.svelte +36 -25
- package/components/editor/CitationsEditor.svelte.d.ts +4 -4
- package/components/editor/Clipboard.d.ts +2 -2
- package/components/editor/Command.d.ts +13 -12
- package/components/editor/Commands.d.ts +1 -1
- package/components/editor/Commands.js +1114 -571
- package/components/editor/ConfirmButton.svelte +18 -12
- package/components/editor/ConfirmButton.svelte.d.ts +5 -4
- package/components/editor/DefinitionEditor.svelte +29 -21
- package/components/editor/DefinitionEditor.svelte.d.ts +4 -4
- package/components/editor/EmbedEditor.svelte +93 -43
- package/components/editor/EmbedEditor.svelte.d.ts +3 -3
- package/components/editor/Icon.svelte +17 -0
- package/components/editor/Icon.svelte.d.ts +16 -0
- package/components/editor/ImageChooser.svelte +53 -34
- package/components/editor/ImageChooser.svelte.d.ts +3 -3
- package/components/editor/InlineCodeEditor.svelte +7 -4
- package/components/editor/InlineCodeEditor.svelte.d.ts +4 -4
- package/components/editor/LabelEditor.svelte +20 -11
- package/components/editor/LabelEditor.svelte.d.ts +4 -4
- package/components/editor/LanguageEditor.svelte +10 -7
- package/components/editor/LanguageEditor.svelte.d.ts +3 -3
- package/components/editor/LinkEditor.svelte +64 -39
- package/components/editor/LinkEditor.svelte.d.ts +4 -4
- package/components/editor/Note.svelte +3 -3
- package/components/editor/Note.svelte.d.ts +6 -2
- package/components/editor/PositionEditor.svelte +9 -6
- package/components/editor/PositionEditor.svelte.d.ts +4 -4
- package/components/editor/QuoteEditor.svelte +7 -2
- package/components/editor/QuoteEditor.svelte.d.ts +4 -4
- package/components/editor/Switch.svelte +55 -28
- package/components/editor/Switch.svelte.d.ts +4 -4
- package/components/editor/TableEditor.svelte +10 -0
- package/components/editor/TableEditor.svelte.d.ts +17 -0
- package/components/editor/TextEditor.svelte +83 -45
- package/components/editor/TextEditor.svelte.d.ts +5 -4
- package/components/editor/Toggle.svelte +11 -8
- package/components/editor/Toggle.svelte.d.ts +4 -4
- package/components/editor/Toolbar.svelte +192 -144
- package/components/editor/Toolbar.svelte.d.ts +5 -8
- package/components/editor/ToolbarGroup.svelte +18 -23
- package/components/editor/ToolbarGroup.svelte.d.ts +3 -4
- package/components/editor/ToolbarSpacer.svelte +8 -1
- package/components/editor/ToolbarSpacer.svelte.d.ts +6 -2
- package/components/editor/URLEditor.svelte +6 -8
- package/components/editor/URLEditor.svelte.d.ts +3 -3
- package/components/editor/UndoState.d.ts +3 -3
- package/components/editor/icons/annotate.svg +1 -0
- package/components/editor/icons/block.svg +1 -0
- package/components/editor/icons/bold.svg +1 -0
- package/components/editor/icons/bullets.svg +1 -0
- package/components/editor/icons/callout.svg +1 -0
- package/components/editor/icons/citation.svg +8 -0
- package/components/editor/icons/clear.svg +1 -0
- package/components/editor/icons/clipboard.svg +1 -0
- package/components/editor/icons/code.svg +1 -0
- package/components/editor/icons/columnafter.svg +1 -0
- package/components/editor/icons/columnbefore.svg +1 -0
- package/components/editor/icons/comment.svg +1 -0
- package/components/editor/icons/copy.svg +1 -0
- package/components/editor/icons/cut.svg +1 -0
- package/components/editor/icons/define.svg +7 -0
- package/components/editor/icons/deletecolumn.svg +1 -0
- package/components/editor/icons/deleterow.svg +1 -0
- package/components/editor/icons/footnote.svg +8 -0
- package/components/editor/icons/header1.svg +7 -0
- package/components/editor/icons/header2.svg +7 -0
- package/components/editor/icons/header3.svg +7 -0
- package/components/editor/icons/home.svg +1 -0
- package/components/editor/icons/indent.svg +1 -0
- package/components/editor/icons/italic.svg +1 -0
- package/components/editor/icons/label.svg +1 -0
- package/components/editor/icons/left.svg +1 -0
- package/components/editor/icons/level.svg +1 -0
- package/components/editor/icons/link.svg +1 -0
- package/components/editor/icons/list.svg +1 -0
- package/components/editor/icons/media.svg +1 -0
- package/components/editor/icons/middle.svg +1 -0
- package/components/editor/icons/numbers.svg +10 -0
- package/components/editor/icons/paragraph.svg +1 -0
- package/components/editor/icons/paste.svg +10 -0
- package/components/editor/icons/quote.svg +1 -0
- package/components/editor/icons/redo.svg +1 -0
- package/components/editor/icons/right.svg +1 -0
- package/components/editor/icons/rowabove.svg +1 -0
- package/components/editor/icons/rowbelow.svg +1 -0
- package/components/editor/icons/rule.svg +1 -0
- package/components/editor/icons/sub.svg +1 -0
- package/components/editor/icons/super.svg +1 -0
- package/components/editor/icons/table.svg +1 -0
- package/components/editor/icons/text.svg +1 -0
- package/components/editor/icons/time.svg +1 -0
- package/components/editor/icons/undo.svg +1 -0
- package/components/editor/icons/unindent.svg +1 -0
- package/components/editor/icons/unlink.svg +1 -0
- package/components/page/Acknowledgements.svelte +31 -22
- package/components/page/Acknowledgements.svelte.d.ts +4 -4
- package/components/page/Authors.svelte +34 -14
- package/components/page/Authors.svelte.d.ts +6 -6
- package/components/page/BulkReferenceEditor.svelte +53 -22
- package/components/page/BulkReferenceEditor.svelte.d.ts +4 -4
- package/components/page/Chapter.svelte +196 -141
- package/components/page/Chapter.svelte.d.ts +3 -3
- package/components/page/ChapterContext.d.ts +4 -4
- package/components/page/ChapterNumber.svelte +9 -0
- package/components/page/ChapterNumber.svelte.d.ts +27 -0
- package/components/page/ChapterTitle.svelte +16 -0
- package/components/page/ChapterTitle.svelte.d.ts +18 -0
- package/components/page/Contexts.d.ts +31 -20
- package/components/page/Contexts.js +47 -17
- package/components/page/DefinitionView.svelte +115 -86
- package/components/page/DefinitionView.svelte.d.ts +3 -3
- package/components/page/Description.svelte +27 -18
- package/components/page/Description.svelte.d.ts +4 -4
- package/components/page/Edition.svelte +127 -75
- package/components/page/Edition.svelte.d.ts +4 -4
- package/components/page/Editions.svelte +144 -0
- package/components/page/Editions.svelte.d.ts +14 -0
- package/components/page/Glossary.svelte +57 -48
- package/components/page/Glossary.svelte.d.ts +4 -4
- package/components/page/Header.svelte +129 -44
- package/components/page/Header.svelte.d.ts +6 -6
- package/components/page/Index.svelte +114 -80
- package/components/page/Index.svelte.d.ts +4 -4
- package/components/page/Instructions.svelte +18 -16
- package/components/page/Instructions.svelte.d.ts +4 -4
- package/components/page/License.svelte +29 -21
- package/components/page/License.svelte.d.ts +4 -4
- package/components/page/Loading.svelte +102 -12
- package/components/page/Loading.svelte.d.ts +6 -2
- package/components/page/Media.svelte +77 -51
- package/components/page/Media.svelte.d.ts +4 -4
- package/components/page/MediaPreview.svelte +26 -8
- package/components/page/MediaPreview.svelte.d.ts +3 -3
- package/components/page/Muted.svelte +10 -0
- package/components/page/Muted.svelte.d.ts +27 -0
- package/components/page/Outline.svelte +279 -59
- package/components/page/Outline.svelte.d.ts +3 -3
- package/components/page/Page.svelte +40 -9
- package/components/page/Page.svelte.d.ts +3 -3
- package/components/page/PageHeader.svelte +14 -0
- package/components/page/PageHeader.svelte.d.ts +18 -0
- package/components/page/PageParagraph.svelte +18 -0
- package/components/page/PageParagraph.svelte.d.ts +27 -0
- package/components/page/PossibleChapter.svelte +7 -7
- package/components/page/PossibleChapter.svelte.d.ts +4 -4
- package/components/page/PossibleReference.svelte +6 -11
- package/components/page/PossibleReference.svelte.d.ts +6 -7
- package/components/page/Print.svelte +27 -3
- package/components/page/Print.svelte.d.ts +4 -4
- package/components/page/Reference.svelte +256 -113
- package/components/page/Reference.svelte.d.ts +5 -5
- package/components/page/References.svelte +39 -47
- package/components/page/References.svelte.d.ts +4 -4
- package/components/page/Rows.svelte +54 -0
- package/components/page/Rows.svelte.d.ts +27 -0
- package/components/page/Search.svelte +86 -63
- package/components/page/Search.svelte.d.ts +4 -4
- package/components/page/Status.svelte +43 -35
- package/components/page/Status.svelte.d.ts +4 -9
- package/components/page/SubdomainEditor.svelte +40 -27
- package/components/page/SubdomainEditor.svelte.d.ts +4 -4
- package/components/page/TableOfContents.svelte +225 -190
- package/components/page/TableOfContents.svelte.d.ts +4 -4
- package/components/page/TableOfContentsImage.svelte +8 -8
- package/components/page/TableOfContentsImage.svelte.d.ts +3 -3
- package/components/page/TableOfContentsRow.svelte +96 -33
- package/components/page/TableOfContentsRow.svelte.d.ts +4 -4
- package/components/page/ThemeEditor.svelte +174 -39
- package/components/page/ThemeEditor.svelte.d.ts +4 -4
- package/components/page/ThemeEditorPreview.svelte +35 -23
- package/components/page/ThemeEditorPreview.svelte.d.ts +5 -5
- package/components/page/ThemeSetEditor.svelte +15 -13
- package/components/page/ThemeSetEditor.svelte.d.ts +4 -4
- package/components/page/ThemeVariableEditor.svelte +24 -15
- package/components/page/ThemeVariableEditor.svelte.d.ts +3 -3
- package/components/page/Title.svelte +12 -0
- package/components/page/Title.svelte.d.ts +27 -0
- package/components/page/Unknown.svelte +25 -21
- package/components/page/Unknown.svelte.d.ts +4 -4
- package/components/page/margins.js +50 -33
- package/index.d.ts +14 -0
- package/index.js +14 -0
- package/models/CRUD.d.ts +17 -0
- package/models/CRUD.js +194 -0
- package/models/Firebase.js +17 -15
- package/models/book/Book.d.ts +24 -28
- package/models/book/Book.js +120 -113
- package/models/book/BookMedia.d.ts +3 -3
- package/models/book/BookMedia.js +22 -16
- package/models/book/BookSaveStatus.d.ts +7 -0
- package/models/book/BookSaveStatus.js +8 -0
- package/models/book/Chapter.d.ts +46 -39
- package/models/book/Chapter.js +180 -198
- package/models/book/ChapterID.js +7 -7
- package/models/book/Definition.d.ts +1 -1
- package/models/book/Edition.d.ts +62 -60
- package/models/book/Edition.js +385 -303
- package/models/book/Reference.d.ts +24 -0
- package/models/book/Reference.js +78 -0
- package/models/book/Schema.d.ts +169 -0
- package/models/book/Schema.js +114 -0
- package/models/book/Theme.d.ts +44 -37
- package/models/book/Theme.js +452 -52
- package/models/book/ThemeColors.d.ts +1 -1
- package/models/book/Words.d.ts +2 -0
- package/models/book/Words.js +110 -0
- package/models/chapter/AtomNode.d.ts +4 -4
- package/models/chapter/AtomNode.js +20 -13
- package/models/chapter/BlockNode.d.ts +9 -10
- package/models/chapter/BlockNode.js +32 -13
- package/models/chapter/BlocksNode.d.ts +10 -10
- package/models/chapter/BlocksNode.js +315 -120
- package/models/chapter/BlocksNode.test.js +494 -228
- package/models/chapter/Bookkeeping.d.ts +1 -1
- package/models/chapter/CalloutNode.d.ts +3 -3
- package/models/chapter/CalloutNode.js +34 -12
- package/models/chapter/Caret.d.ts +9 -7
- package/models/chapter/Caret.js +11 -6
- package/models/chapter/ChapterNode.d.ts +11 -11
- package/models/chapter/ChapterNode.js +70 -33
- package/models/chapter/CitationsNode.d.ts +3 -3
- package/models/chapter/CitationsNode.js +31 -12
- package/models/chapter/CodeNode.d.ts +11 -6
- package/models/chapter/CodeNode.js +143 -34
- package/models/chapter/CommentNode.d.ts +5 -5
- package/models/chapter/CommentNode.js +29 -13
- package/models/chapter/DefinitionNode.d.ts +2 -2
- package/models/chapter/DefinitionNode.js +15 -7
- package/models/chapter/Edit.d.ts +3 -3
- package/models/chapter/EmbedNode.d.ts +9 -5
- package/models/chapter/EmbedNode.js +108 -35
- package/models/chapter/ErrorNode.d.ts +2 -2
- package/models/chapter/ErrorNode.js +34 -12
- package/models/chapter/FootnoteNode.d.ts +5 -5
- package/models/chapter/FootnoteNode.js +34 -16
- package/models/chapter/FormatNode.d.ts +10 -10
- package/models/chapter/FormatNode.js +237 -106
- package/models/chapter/FormatNode.test.js +87 -45
- package/models/chapter/InlineCodeNode.d.ts +2 -2
- package/models/chapter/InlineCodeNode.js +22 -9
- package/models/chapter/LabelNode.d.ts +4 -4
- package/models/chapter/LabelNode.js +31 -13
- package/models/chapter/LinkNode.d.ts +2 -2
- package/models/chapter/LinkNode.js +21 -9
- package/models/chapter/ListNode.d.ts +8 -8
- package/models/chapter/ListNode.js +99 -38
- package/models/chapter/ListNode.test.js +29 -24
- package/models/chapter/MetadataNode.d.ts +3 -3
- package/models/chapter/MetadataNode.js +13 -5
- package/models/chapter/Node.d.ts +5 -3
- package/models/chapter/Node.js +76 -29
- package/models/chapter/Node.test.js +20 -18
- package/models/chapter/ParagraphNode.d.ts +6 -6
- package/models/chapter/ParagraphNode.js +84 -29
- package/models/chapter/ParagraphNode.test.js +22 -13
- package/models/chapter/Parser.d.ts +25 -25
- package/models/chapter/Parser.js +201 -189
- package/models/chapter/Parser.test.js +16 -16
- package/models/chapter/Position.d.ts +1 -1
- package/models/chapter/QuoteNode.d.ts +6 -6
- package/models/chapter/QuoteNode.js +61 -23
- package/models/chapter/RootNode.d.ts +4 -4
- package/models/chapter/RuleNode.d.ts +2 -2
- package/models/chapter/RuleNode.js +31 -11
- package/models/chapter/TableNode.d.ts +8 -6
- package/models/chapter/TableNode.js +89 -34
- package/models/chapter/TableNode.test.js +22 -24
- package/models/chapter/TextNode.d.ts +6 -6
- package/models/chapter/TextNode.js +72 -32
- package/models/chapter/TextNode.test.js +4 -4
- package/models/loadEdition.d.ts +1 -1
- package/models/loadEdition.js +10 -6
- package/package.json +104 -25
- package/util/getSubdomain.js +8 -6
- package/util/isMobile.js +1 -1
- package/util/mineReference.d.ts +3 -2
- package/util/mineReference.js +67 -29
- package/util/scrollToEyeLevel.js +6 -1
- package/components/chapter/renderPosition.d.ts +0 -3
- package/components/chapter/renderPosition.js +0 -4
- package/components/editor/ToolbarIcon.svelte +0 -22
- package/components/editor/ToolbarIcon.svelte.d.ts +0 -16
- package/components/page/Alert.svelte +0 -11
- package/components/page/Alert.svelte.d.ts +0 -23
- package/components/page/Revisions.svelte +0 -124
- package/components/page/Revisions.svelte.d.ts +0 -14
- package/models/BookLoader.d.ts +0 -2
- package/models/BookLoader.js +0 -67
- package/models/Firestore.d.ts +0 -22
- package/models/Firestore.js +0 -194
- package/models/chapter/ReferenceNode.d.ts +0 -29
- package/models/chapter/ReferenceNode.js +0 -48
|
@@ -1,17 +1,20 @@
|
|
|
1
|
-
<script>import Header from
|
|
1
|
+
<script>import Header from './Header.svelte';
|
|
2
2
|
import Outline from './Outline.svelte';
|
|
3
3
|
import Page from './Page.svelte';
|
|
4
4
|
import Instructions from './Instructions.svelte';
|
|
5
5
|
import ChapterIDs from '../../models/book/ChapterID';
|
|
6
6
|
import Format from '../chapter/Format.svelte';
|
|
7
|
-
import MediaPreview from
|
|
8
|
-
import { onMount } from
|
|
9
|
-
import { getEdition, isEditable } from
|
|
7
|
+
import MediaPreview from './MediaPreview.svelte';
|
|
8
|
+
import { onMount } from 'svelte';
|
|
9
|
+
import { getBook, getEdition, isEditable } from './Contexts';
|
|
10
|
+
import Button from '../app/Button.svelte';
|
|
11
|
+
import PageHeader from './PageHeader.svelte';
|
|
12
|
+
let book = getBook();
|
|
10
13
|
let edition = getEdition();
|
|
11
14
|
let editable = isEditable();
|
|
12
15
|
let images = [];
|
|
13
|
-
$: embeds = $edition
|
|
14
|
-
$: media = $
|
|
16
|
+
$: embeds = $edition?.getEmbeds() ?? [];
|
|
17
|
+
$: media = $book?.getMedia();
|
|
15
18
|
function updateImages(newImages) {
|
|
16
19
|
images = newImages;
|
|
17
20
|
}
|
|
@@ -20,57 +23,80 @@ onMount(() => {
|
|
|
20
23
|
media?.notify(updateImages);
|
|
21
24
|
return () => media?.stopNotifying(updateImages);
|
|
22
25
|
});
|
|
23
|
-
$: unused = images?.filter(image => embeds.find(embed => embed.getURL() === image.url) === undefined);
|
|
26
|
+
$: unused = images?.filter((image) => embeds.find((embed) => embed.getURL() === image.url) === undefined);
|
|
24
27
|
</script>
|
|
25
28
|
|
|
26
|
-
|
|
27
|
-
<
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
next={$edition.getNextChapterID(ChapterIDs.MediaID)}
|
|
38
|
-
/>
|
|
39
|
-
</Header>
|
|
40
|
-
<Instructions>
|
|
41
|
-
This page shows readers an index of the media in the book.
|
|
42
|
-
Writers can use this page to manage any images that are linked or uploaded for this book.
|
|
43
|
-
Note: images are shared between all editions, so if you delete one not used in this edition,
|
|
44
|
-
it might be used in others.
|
|
45
|
-
</Instructions>
|
|
46
|
-
|
|
47
|
-
{#if embeds.length === 0}
|
|
48
|
-
<p>No images or videos appear in the book.</p>
|
|
49
|
-
{:else}
|
|
50
|
-
<p>These are the images and videos in the book:</p>
|
|
51
|
-
{/if}
|
|
52
|
-
{#each embeds as embed }
|
|
53
|
-
<MediaPreview
|
|
54
|
-
url={embed.getSmallURL()}
|
|
55
|
-
alt={embed.getDescription()}
|
|
29
|
+
{#if $edition}
|
|
30
|
+
<Page title={`${$edition.getTitle()} - Media`}>
|
|
31
|
+
<Header
|
|
32
|
+
label="Media title"
|
|
33
|
+
getImage={() => $edition?.getImage(ChapterIDs.MediaID) ?? null}
|
|
34
|
+
setImage={(embed) =>
|
|
35
|
+
$edition
|
|
36
|
+
? edition.set($edition.withImage(ChapterIDs.MediaID, embed))
|
|
37
|
+
: undefined}
|
|
38
|
+
header="Media"
|
|
39
|
+
tags={$edition.getTags()}
|
|
56
40
|
>
|
|
57
|
-
<
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
41
|
+
<Outline
|
|
42
|
+
slot="outline"
|
|
43
|
+
previous={$edition.getPreviousChapterID(ChapterIDs.MediaID)}
|
|
44
|
+
next={$edition.getNextChapterID(ChapterIDs.MediaID)}
|
|
45
|
+
/>
|
|
46
|
+
</Header>
|
|
62
47
|
<Instructions>
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
48
|
+
This page shows readers an index of the media in the book. Writers
|
|
49
|
+
can use this page to manage any images that are linked or uploaded
|
|
50
|
+
for this book. Note: images are shared between all editions, so if
|
|
51
|
+
you delete one not used in this edition, it might be used in others.
|
|
66
52
|
</Instructions>
|
|
67
|
-
|
|
53
|
+
|
|
54
|
+
{#if embeds.length === 0}
|
|
55
|
+
<p>No images or videos appear in the book.</p>
|
|
56
|
+
{:else}
|
|
57
|
+
<p>These are the images and videos in the book:</p>
|
|
58
|
+
{/if}
|
|
59
|
+
{#each embeds as embed}
|
|
68
60
|
<MediaPreview
|
|
69
|
-
url={
|
|
70
|
-
alt={
|
|
61
|
+
url={embed.getSmallURL()}
|
|
62
|
+
alt={embed.getDescription() === ''
|
|
63
|
+
? 'no description, image not used'
|
|
64
|
+
: embed.getDescription()}
|
|
71
65
|
>
|
|
72
|
-
<span
|
|
66
|
+
<span
|
|
67
|
+
>{#if editable}{images &&
|
|
68
|
+
images.find((i) => i.url === embed.getURL()) ===
|
|
69
|
+
undefined
|
|
70
|
+
? 'linked'
|
|
71
|
+
: 'uploaded'}{embed.getCredit().isEmptyText()
|
|
72
|
+
? ''
|
|
73
|
+
: ' • '}{/if}<Format
|
|
74
|
+
node={embed.getCredit()}
|
|
75
|
+
/></span
|
|
76
|
+
>
|
|
73
77
|
</MediaPreview>
|
|
74
78
|
{/each}
|
|
75
|
-
|
|
76
|
-
</
|
|
79
|
+
{#if editable && unused !== undefined && unused.length > 0}
|
|
80
|
+
<PageHeader id="unused">Unused</PageHeader>
|
|
81
|
+
<Instructions>
|
|
82
|
+
These images are uploaded to this book, but not used. Delete
|
|
83
|
+
them if you don't need them. Note, however, that these images
|
|
84
|
+
may be used in other editions of this book.
|
|
85
|
+
</Instructions>
|
|
86
|
+
{#each unused as image}
|
|
87
|
+
<MediaPreview url={image.url} alt={''}>
|
|
88
|
+
<span
|
|
89
|
+
>uploaded <Button
|
|
90
|
+
tooltip="delete this unused image"
|
|
91
|
+
command={() =>
|
|
92
|
+
media
|
|
93
|
+
?.remove(image)
|
|
94
|
+
.then((images) => updateImages(images))}
|
|
95
|
+
>- image</Button
|
|
96
|
+
></span
|
|
97
|
+
>
|
|
98
|
+
</MediaPreview>
|
|
99
|
+
{/each}
|
|
100
|
+
{/if}
|
|
101
|
+
</Page>
|
|
102
|
+
{/if}
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import { SvelteComponentTyped } from "svelte";
|
|
2
2
|
declare const __propDef: {
|
|
3
|
-
props:
|
|
3
|
+
props: Record<string, never>;
|
|
4
4
|
events: {
|
|
5
5
|
[evt: string]: CustomEvent<any>;
|
|
6
6
|
};
|
|
7
7
|
slots: {};
|
|
8
8
|
};
|
|
9
|
-
export
|
|
10
|
-
export
|
|
11
|
-
export
|
|
9
|
+
export type MediaProps = typeof __propDef.props;
|
|
10
|
+
export type MediaEvents = typeof __propDef.events;
|
|
11
|
+
export type MediaSlots = typeof __propDef.slots;
|
|
12
12
|
export default class Media extends SvelteComponentTyped<MediaProps, MediaEvents, MediaSlots> {
|
|
13
13
|
}
|
|
14
14
|
export {};
|
|
@@ -1,11 +1,29 @@
|
|
|
1
1
|
<script>export let url;
|
|
2
2
|
export let alt;
|
|
3
3
|
</script>
|
|
4
|
-
|
|
5
|
-
<
|
|
6
|
-
<img
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
4
|
+
|
|
5
|
+
<figure class={'media-preview'}>
|
|
6
|
+
<img src={url} {alt} />
|
|
7
|
+
<figcaption class="credit"><slot /></figcaption>
|
|
8
|
+
</figure>
|
|
9
|
+
|
|
10
|
+
<style>
|
|
11
|
+
.media-preview {
|
|
12
|
+
display: inline-block;
|
|
13
|
+
width: 10rem;
|
|
14
|
+
margin: 1em;
|
|
15
|
+
vertical-align: bottom;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
.media-preview img {
|
|
19
|
+
width: 100%;
|
|
20
|
+
height: auto;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
.credit {
|
|
24
|
+
display: block;
|
|
25
|
+
text-align: right;
|
|
26
|
+
font-style: italic;
|
|
27
|
+
font-size: var(--bookish-small-font-size);
|
|
28
|
+
}
|
|
29
|
+
</style>
|
|
@@ -11,9 +11,9 @@ declare const __propDef: {
|
|
|
11
11
|
default: {};
|
|
12
12
|
};
|
|
13
13
|
};
|
|
14
|
-
export
|
|
15
|
-
export
|
|
16
|
-
export
|
|
14
|
+
export type MediaPreviewProps = typeof __propDef.props;
|
|
15
|
+
export type MediaPreviewEvents = typeof __propDef.events;
|
|
16
|
+
export type MediaPreviewSlots = typeof __propDef.slots;
|
|
17
17
|
export default class MediaPreview extends SvelteComponentTyped<MediaPreviewProps, MediaPreviewEvents, MediaPreviewSlots> {
|
|
18
18
|
}
|
|
19
19
|
export {};
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/** @typedef {typeof __propDef.props} MutedProps */
|
|
2
|
+
/** @typedef {typeof __propDef.events} MutedEvents */
|
|
3
|
+
/** @typedef {typeof __propDef.slots} MutedSlots */
|
|
4
|
+
export default class Muted extends SvelteComponentTyped<{
|
|
5
|
+
[x: string]: never;
|
|
6
|
+
}, {
|
|
7
|
+
[evt: string]: CustomEvent<any>;
|
|
8
|
+
}, {
|
|
9
|
+
default: {};
|
|
10
|
+
}> {
|
|
11
|
+
}
|
|
12
|
+
export type MutedProps = typeof __propDef.props;
|
|
13
|
+
export type MutedEvents = typeof __propDef.events;
|
|
14
|
+
export type MutedSlots = typeof __propDef.slots;
|
|
15
|
+
import { SvelteComponentTyped } from "svelte";
|
|
16
|
+
declare const __propDef: {
|
|
17
|
+
props: {
|
|
18
|
+
[x: string]: never;
|
|
19
|
+
};
|
|
20
|
+
events: {
|
|
21
|
+
[evt: string]: CustomEvent<any>;
|
|
22
|
+
};
|
|
23
|
+
slots: {
|
|
24
|
+
default: {};
|
|
25
|
+
};
|
|
26
|
+
};
|
|
27
|
+
export {};
|
|
@@ -34,35 +34,37 @@ function layout() {
|
|
|
34
34
|
function updateHeaders() {
|
|
35
35
|
// When the outline updates (due to the page its on updating), generate a unique string for the current header outline.
|
|
36
36
|
// If it's different from the last rendered state, refresh.
|
|
37
|
-
headers = Array.from(document.getElementsByClassName(
|
|
38
|
-
let newHeaderString = headers.reduce((sum, el) => sum + el.outerHTML,
|
|
37
|
+
headers = Array.from(document.getElementsByClassName('page-header'));
|
|
38
|
+
let newHeaderString = headers.reduce((sum, el) => sum + el.outerHTML, '');
|
|
39
39
|
// If the headers change, update the outline.
|
|
40
40
|
if (headerString !== newHeaderString)
|
|
41
41
|
headerString = newHeaderString;
|
|
42
42
|
}
|
|
43
|
-
function getHighlightThreshold() {
|
|
43
|
+
function getHighlightThreshold() {
|
|
44
|
+
return window.innerHeight / 3;
|
|
45
|
+
}
|
|
44
46
|
function position() {
|
|
45
47
|
// Left align the floating outline with the left margin of the chapter
|
|
46
48
|
// and the top of the title, unless we're past it.
|
|
47
|
-
let title = document.getElementsByClassName(
|
|
49
|
+
let title = document.getElementsByClassName('bookish-chapter-header-text')[0];
|
|
48
50
|
// If we found them both...
|
|
49
51
|
if (outline && title) {
|
|
50
52
|
// If so, remove the inline position so the footer CSS applies.
|
|
51
53
|
if (isMobile()) {
|
|
52
|
-
outline.style.removeProperty(
|
|
54
|
+
outline.style.removeProperty('margin-top');
|
|
53
55
|
}
|
|
54
56
|
// If not, set the position of the outline.
|
|
55
57
|
else {
|
|
56
58
|
let titleY = title.getBoundingClientRect().top + window.scrollY;
|
|
57
59
|
// If the title is off screen, anchor it to the top of the window. (CSS is set to do this).
|
|
58
60
|
if (titleY - 50 < window.scrollY) {
|
|
59
|
-
outline.classList.add(
|
|
60
|
-
outline.classList.remove(
|
|
61
|
+
outline.classList.add('outline-fixed-left');
|
|
62
|
+
outline.classList.remove('outline-title-left');
|
|
61
63
|
}
|
|
62
64
|
// Otherwise, anchor it to the title position.
|
|
63
65
|
else {
|
|
64
|
-
outline.classList.remove(
|
|
65
|
-
outline.classList.add(
|
|
66
|
+
outline.classList.remove('outline-fixed-left');
|
|
67
|
+
outline.classList.add('outline-title-left');
|
|
66
68
|
}
|
|
67
69
|
// Tell any listeners about the repositioning.
|
|
68
70
|
if (listener)
|
|
@@ -75,9 +77,11 @@ function highlight() {
|
|
|
75
77
|
const threshold = getHighlightThreshold();
|
|
76
78
|
// Find the header that we're past so we can update the outline.
|
|
77
79
|
let indexOfNearestHeaderAbove = -1; // -1 represents the title
|
|
78
|
-
Array.from(document.getElementsByClassName(
|
|
80
|
+
Array.from(document.getElementsByClassName('bookish-header')).forEach((header, index) => {
|
|
79
81
|
// Is this a header we care about?
|
|
80
|
-
if (header.tagName ===
|
|
82
|
+
if (header.tagName === 'H1' ||
|
|
83
|
+
header.tagName === 'H2' ||
|
|
84
|
+
header.tagName === 'H3') {
|
|
81
85
|
let rect = header.getBoundingClientRect();
|
|
82
86
|
let headerTop = rect.y + top - rect.height;
|
|
83
87
|
// Are we past this header?
|
|
@@ -91,83 +95,299 @@ function highlight() {
|
|
|
91
95
|
onMount(() => {
|
|
92
96
|
window.addEventListener('resize', layout);
|
|
93
97
|
window.addEventListener('scroll', layout);
|
|
94
|
-
// This is a bit hacky: we update the headers on every selection change so we
|
|
98
|
+
// This is a bit hacky: we update the headers on every selection change so we
|
|
95
99
|
// can detect any header changes during editing. This isn't necessary during
|
|
96
100
|
// reading, and is only necessary when a header is created, updated, or removed,
|
|
97
101
|
// but we don't have a precise mechanism to listen to chapter changes, so we do this instead.
|
|
98
|
-
document.addEventListener(
|
|
102
|
+
document.addEventListener('selectionchange', updateHeaders);
|
|
99
103
|
// Position outline after first render.
|
|
100
104
|
layout();
|
|
101
105
|
// Stop listening!
|
|
102
106
|
return () => {
|
|
103
107
|
window.removeEventListener('scroll', layout);
|
|
104
108
|
window.removeEventListener('resize', layout);
|
|
105
|
-
document.removeEventListener(
|
|
109
|
+
document.removeEventListener('selectionchange', updateHeaders);
|
|
106
110
|
};
|
|
107
111
|
});
|
|
108
|
-
let previousLabel =
|
|
109
|
-
let nextLabel =
|
|
110
|
-
let expandLabel =
|
|
111
|
-
let lightLabel =
|
|
112
|
-
let darkLabel =
|
|
112
|
+
let previousLabel = '\u25C0\uFE0E';
|
|
113
|
+
let nextLabel = '\u25B6\uFE0E';
|
|
114
|
+
let expandLabel = '\u2630';
|
|
115
|
+
let lightLabel = '\u263C';
|
|
116
|
+
let darkLabel = '\u263E';
|
|
113
117
|
</script>
|
|
114
118
|
|
|
115
|
-
<
|
|
119
|
+
<nav
|
|
116
120
|
bind:this={outline}
|
|
117
|
-
class={
|
|
121
|
+
class={'outline ' +
|
|
122
|
+
(!expanded || collapse ? 'outline-collapsed' : 'outline-expanded')}
|
|
118
123
|
>
|
|
119
|
-
<!-- Dark mode toggle -->
|
|
120
|
-
<div
|
|
121
|
-
class="bookish-outline-reading-mode"
|
|
122
|
-
role="button"
|
|
123
|
-
aria-label={$dark === true ? "Switch to light mode" : "Switch to dark mode"}
|
|
124
|
-
tabIndex=0
|
|
125
|
-
on:click={toggleReadingMode}
|
|
126
|
-
on:keydown={event => {
|
|
127
|
-
if(event.key === "Enter" || event.key === " ") {
|
|
128
|
-
toggleReadingMode();
|
|
129
|
-
event.stopPropagation();
|
|
130
|
-
}
|
|
131
|
-
}}
|
|
132
|
-
>
|
|
133
|
-
{$dark ? darkLabel : lightLabel}
|
|
134
|
-
</div>
|
|
135
124
|
<!-- Visual cue of expandability, only visible in footer mode. -->
|
|
136
|
-
<div
|
|
137
|
-
class={
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
125
|
+
<div
|
|
126
|
+
class={'outline-collapse-cue' +
|
|
127
|
+
(headers.length === 0 ? ' outline-collapse-cue-disabled' : '')}
|
|
128
|
+
role="button"
|
|
129
|
+
aria-label={expanded
|
|
130
|
+
? 'Collapse navigation menu'
|
|
131
|
+
: 'Expand navigation menu'}
|
|
132
|
+
tabIndex="0"
|
|
133
|
+
on:click={headers.length > 0 ? toggleExpanded : undefined}
|
|
134
|
+
on:keydown={(event) => {
|
|
135
|
+
if (event.key === 'Enter' || event.key === ' ') toggleExpanded();
|
|
145
136
|
}}
|
|
146
137
|
>
|
|
147
|
-
{
|
|
138
|
+
{expandLabel}
|
|
148
139
|
</div>
|
|
149
|
-
<div class="
|
|
150
|
-
|
|
140
|
+
<div class="outline-headers">
|
|
151
141
|
<!-- Book navigation links -->
|
|
152
|
-
<div class="
|
|
153
|
-
{#if previous !== null}<Link to={base +
|
|
142
|
+
<div class="outline-header-nav">
|
|
143
|
+
{#if previous !== null}<Link to={$base + previous}
|
|
144
|
+
>{previousLabel}</Link
|
|
145
|
+
>{:else}<span class="outline-header-nav-disabled"
|
|
146
|
+
>{previousLabel}</span
|
|
147
|
+
>{/if}
|
|
154
148
|
·
|
|
155
|
-
<Link to={base
|
|
149
|
+
<Link to={$base}>Home</Link>
|
|
156
150
|
·
|
|
157
|
-
{#if next !== null}<Link to={base +
|
|
151
|
+
{#if next !== null}<Link to={$base + next}>{nextLabel}</Link
|
|
152
|
+
>{:else}<span class="outline-header-nav-disabled"
|
|
153
|
+
>{nextLabel}</span
|
|
154
|
+
>{/if}
|
|
158
155
|
</div>
|
|
159
156
|
<!-- Scan through the headers and add a properly formatted link for each. -->
|
|
160
|
-
{#each headers as header, index
|
|
157
|
+
{#each headers as header, index}
|
|
161
158
|
<!-- Assumes that all headers have an H1, H2, etc. tag. -->
|
|
162
|
-
{@const level = Number.parseInt(header.tagName.charAt(1))
|
|
159
|
+
{@const level = Number.parseInt(header.tagName.charAt(1))}
|
|
163
160
|
<!-- Only h1, h2, and h3 headers... -->
|
|
164
|
-
{#if level <= 3
|
|
165
|
-
<Link to={
|
|
166
|
-
<div
|
|
161
|
+
{#if level <= 3}
|
|
162
|
+
<Link to={'#' + header.id}>
|
|
163
|
+
<div
|
|
164
|
+
class={'outline-header outline-header-level-' +
|
|
165
|
+
(level - 1) +
|
|
166
|
+
(headerIndex === index
|
|
167
|
+
? ' outline-header-active'
|
|
168
|
+
: '')}
|
|
169
|
+
>
|
|
167
170
|
{header.textContent}
|
|
168
171
|
</div>
|
|
169
172
|
</Link>
|
|
170
173
|
{/if}
|
|
171
174
|
{/each}
|
|
172
175
|
</div>
|
|
173
|
-
|
|
176
|
+
<!-- Dark mode toggle -->
|
|
177
|
+
<div
|
|
178
|
+
class="outline-reading-mode"
|
|
179
|
+
role="button"
|
|
180
|
+
aria-label={$dark === true
|
|
181
|
+
? 'Switch to light mode'
|
|
182
|
+
: 'Switch to dark mode'}
|
|
183
|
+
tabIndex="0"
|
|
184
|
+
on:click={toggleReadingMode}
|
|
185
|
+
on:keydown={(event) => {
|
|
186
|
+
if (event.key === 'Enter' || event.key === ' ') {
|
|
187
|
+
toggleReadingMode();
|
|
188
|
+
event.stopPropagation();
|
|
189
|
+
}
|
|
190
|
+
}}
|
|
191
|
+
>
|
|
192
|
+
{$dark ? darkLabel : lightLabel}
|
|
193
|
+
</div>
|
|
194
|
+
</nav>
|
|
195
|
+
|
|
196
|
+
<style>
|
|
197
|
+
.outline {
|
|
198
|
+
font-family: var(--bookish-header-font-family);
|
|
199
|
+
font-weight: normal;
|
|
200
|
+
font-size: var(--bookish-paragraph-font-size);
|
|
201
|
+
color: var(--bookish-muted-color);
|
|
202
|
+
--outline-width: 12em;
|
|
203
|
+
--outline-padding: 1em;
|
|
204
|
+
--outline-offset: calc(
|
|
205
|
+
-1 * (var(--outline-width) + 3 * var(--outline-padding))
|
|
206
|
+
);
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
.outline-header-nav {
|
|
210
|
+
display: inline-block;
|
|
211
|
+
width: 100%;
|
|
212
|
+
padding-bottom: var(--outline-padding);
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
.outline-header {
|
|
216
|
+
display: block;
|
|
217
|
+
line-height: var(--bookish-paragraph-line-height-tight);
|
|
218
|
+
text-indent: 0;
|
|
219
|
+
padding-left: 1rem;
|
|
220
|
+
padding-right: 1rem;
|
|
221
|
+
margin-bottom: 0.75rem;
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
.outline-header-level-0 {
|
|
225
|
+
font-size: 1rem;
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
.outline-header-level-1 {
|
|
229
|
+
font-size: 0.9rem;
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
.outline-header-level-2 {
|
|
233
|
+
font-size: 0.8rem;
|
|
234
|
+
font-style: italic;
|
|
235
|
+
margin-left: 1em;
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
:global(a .outline-header),
|
|
239
|
+
:global(.outline-header-nav a) {
|
|
240
|
+
color: var(--bookish-muted-color);
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
:global(a .outline-header-active),
|
|
244
|
+
:global(a:hover .outline-header) {
|
|
245
|
+
color: var(--bookish-paragraph-color);
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
.outline-header-nav-disabled {
|
|
249
|
+
opacity: 0.3;
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
:global(.outline a:hover) {
|
|
253
|
+
text-decoration: none;
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
/* Only apply this on devices with hover abilities. */
|
|
257
|
+
@media (hover: hover) {
|
|
258
|
+
:global(.outline a:hover) {
|
|
259
|
+
color: var(--bookish-paragraph-color);
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
:global(a .outline-header-active) {
|
|
264
|
+
color: var(--bookish-paragraph-color);
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
.outline-reading-mode {
|
|
268
|
+
transition: transform 0.2s ease-in;
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
.outline-reading-mode:hover {
|
|
272
|
+
cursor: pointer;
|
|
273
|
+
transform: scale(1.25, 1.25);
|
|
274
|
+
color: var(--bookish-paragraph-color);
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
/* Mobile */
|
|
278
|
+
@media screen and (max-width: 1200px) {
|
|
279
|
+
.outline {
|
|
280
|
+
position: fixed;
|
|
281
|
+
top: 100%; /* Put it all the way off screen on the bottom, then let JS translate */
|
|
282
|
+
left: 0;
|
|
283
|
+
right: 0;
|
|
284
|
+
width: 100%;
|
|
285
|
+
z-index: 2; /* Put it above content when it's a sheet in the footer */
|
|
286
|
+
border-top: 1px solid var(--bookish-border-color-light);
|
|
287
|
+
text-align: left;
|
|
288
|
+
transition: transform 0.2s ease-in;
|
|
289
|
+
background-color: var(--bookish-background-color);
|
|
290
|
+
box-shadow: 0px -1px 2px rgba(0, 0, 0, 0.25);
|
|
291
|
+
backdrop-filter: blur(10px);
|
|
292
|
+
-webkit-backdrop-filter: blur(10px);
|
|
293
|
+
/* Cap height at window size. If the content is too tall, scroll it. */
|
|
294
|
+
max-height: 100%;
|
|
295
|
+
overflow-y: scroll;
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
/* Make a little centered box to store the outline to preserve its left aligned structure, while making it easier to click. */
|
|
299
|
+
.outline-headers {
|
|
300
|
+
width: 20em;
|
|
301
|
+
margin: auto;
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
.outline-header-nav {
|
|
305
|
+
text-align: center;
|
|
306
|
+
padding-top: 0.5em; /* Add some spacing when in the footer */
|
|
307
|
+
padding-bottom: 0.5em;
|
|
308
|
+
text-indent: 0 !important; /* Override header default */
|
|
309
|
+
font-size: 1.25rem !important;
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
.outline-reading-mode {
|
|
313
|
+
position: absolute;
|
|
314
|
+
top: 0.5em;
|
|
315
|
+
left: 0;
|
|
316
|
+
font-size: 1em;
|
|
317
|
+
display: inline-block;
|
|
318
|
+
padding-left: 1em;
|
|
319
|
+
padding-right: 1em;
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
.outline-collapse-cue {
|
|
323
|
+
position: absolute;
|
|
324
|
+
top: 0.5em;
|
|
325
|
+
right: 0;
|
|
326
|
+
font-size: 1em;
|
|
327
|
+
display: inline-block;
|
|
328
|
+
padding-left: 1em;
|
|
329
|
+
padding-right: 1em;
|
|
330
|
+
transition: transform 0.2s ease-in;
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
.outline-collapse-cue:hover {
|
|
334
|
+
cursor: pointer;
|
|
335
|
+
transform: scale(1.25, 1.25);
|
|
336
|
+
color: var(--bookish-paragraph-color);
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
.outline-collapse-cue-disabled {
|
|
340
|
+
display: none;
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
.outline-expanded .outline-collapse-cue {
|
|
344
|
+
transform: rotate(90deg);
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
.outline.outline-expanded {
|
|
348
|
+
transform: translateY(-100%);
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
.outline.outline-collapsed {
|
|
352
|
+
transform: translateY(-3rem);
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
/* Desktop */
|
|
357
|
+
@media screen and (min-width: 1200px) {
|
|
358
|
+
.outline {
|
|
359
|
+
width: var(--outline-width);
|
|
360
|
+
z-index: 0; /* Put it below everything when it's in the margin. */
|
|
361
|
+
border-right: 1px solid var(--bookish-border-color-light);
|
|
362
|
+
padding: var(--outline-padding);
|
|
363
|
+
background-color: var(--bookish-background-color);
|
|
364
|
+
margin-right: var(--outline-padding);
|
|
365
|
+
}
|
|
366
|
+
|
|
367
|
+
/* When the outline is fixed to the left, it's translated by it's width (with some padding). */
|
|
368
|
+
/* It's left position is set outline.js. This class is set by outline.js. */
|
|
369
|
+
.outline.outline-fixed-left {
|
|
370
|
+
position: fixed;
|
|
371
|
+
display: inline-block;
|
|
372
|
+
top: 50px;
|
|
373
|
+
transform: translateX(var(--outline-offset));
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
/* When the outline is fixed to title, it's positioned absolutely relative to the book container. */
|
|
377
|
+
/* We set a margin appropriate for it's width above. This class is set in Outline.tsx. */
|
|
378
|
+
.outline.outline-title-left {
|
|
379
|
+
position: absolute;
|
|
380
|
+
margin-left: var(--outline-offset);
|
|
381
|
+
}
|
|
382
|
+
|
|
383
|
+
.outline-collapse-cue {
|
|
384
|
+
display: none;
|
|
385
|
+
}
|
|
386
|
+
|
|
387
|
+
.outline-reading-mode {
|
|
388
|
+
position: absolute;
|
|
389
|
+
top: calc(var(--outline-padding));
|
|
390
|
+
right: calc(var(--outline-padding));
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
</style>
|