bookish-press 0.4.46 → 0.4.47

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.
Files changed (533) hide show
  1. package/.env.example +8 -0
  2. package/.firebaserc +8 -0
  3. package/.prettierignore +8 -0
  4. package/.prettierrc.json +5 -0
  5. package/_update-notifier-last-checked +0 -0
  6. package/firebase.json +46 -0
  7. package/firestore.indexes.json +4 -0
  8. package/firestore.rules +59 -0
  9. package/functions/.eslintrc.js +28 -0
  10. package/functions/package-lock.json +12595 -0
  11. package/functions/package.json +43 -0
  12. package/functions/src/index.ts +345 -0
  13. package/functions/tsconfig.dev.json +3 -0
  14. package/functions/tsconfig.json +15 -0
  15. package/package.json +53 -270
  16. package/scripts/claims.cjs +99 -0
  17. package/src/app.d.ts +9 -0
  18. package/src/app.html +24 -0
  19. package/src/lib/components/Auth.svelte +65 -0
  20. package/{components/Authentication.d.ts → src/lib/components/Authentication.ts} +2 -0
  21. package/{components → src/lib/components}/BookPreview.svelte +27 -22
  22. package/{components → src/lib/components}/External.svelte +2 -1
  23. package/src/lib/components/Link.svelte +58 -0
  24. package/{components → src/lib/components}/app/BookList.svelte +6 -3
  25. package/{components → src/lib/components}/app/Button.svelte +5 -4
  26. package/{components → src/lib/components}/app/Feedback.svelte +11 -7
  27. package/{components → src/lib/components}/app/Head.svelte +2 -1
  28. package/{components → src/lib/components}/app/Large.svelte +0 -0
  29. package/{components → src/lib/components}/app/Lead.svelte +0 -0
  30. package/{components → src/lib/components}/app/Link.svelte +4 -3
  31. package/{components → src/lib/components}/app/Options.svelte +5 -4
  32. package/{components → src/lib/components}/app/Paragraph.svelte +2 -1
  33. package/{components → src/lib/components}/app/Section.svelte +0 -0
  34. package/{components → src/lib/components}/app/Table.svelte +0 -0
  35. package/{components → src/lib/components}/app/TextInput.svelte +12 -9
  36. package/{components → src/lib/components}/chapter/Atom.svelte +18 -12
  37. package/src/lib/components/chapter/Block.svelte +42 -0
  38. package/{components → src/lib/components}/chapter/Callout.svelte +6 -3
  39. package/{components → src/lib/components}/chapter/CaptionedCode.svelte +21 -13
  40. package/{components → src/lib/components}/chapter/ChapterBody.svelte +13 -9
  41. package/{components → src/lib/components}/chapter/Citations.svelte +34 -33
  42. package/{components → src/lib/components}/chapter/Code.svelte +63 -59
  43. package/{components → src/lib/components}/chapter/Comment.svelte +30 -18
  44. package/{components → src/lib/components}/chapter/Definition.svelte +23 -17
  45. package/{components → src/lib/components}/chapter/Embed.svelte +97 -77
  46. package/src/lib/components/chapter/ErrorMessage.svelte +12 -0
  47. package/{components → src/lib/components}/chapter/ExtendedPrism.js +0 -0
  48. package/{components → src/lib/components}/chapter/Figure.svelte +34 -26
  49. package/{components → src/lib/components}/chapter/Footnote.svelte +32 -20
  50. package/{components → src/lib/components}/chapter/Format.svelte +39 -34
  51. package/{components → src/lib/components}/chapter/InlineCode.svelte +9 -5
  52. package/{components → src/lib/components}/chapter/Label.svelte +23 -14
  53. package/{components → src/lib/components}/chapter/Link.svelte +27 -21
  54. package/{components → src/lib/components}/chapter/List.svelte +5 -3
  55. package/{components → src/lib/components}/chapter/Marginal.svelte +54 -41
  56. package/{components → src/lib/components}/chapter/Paragraph.svelte +25 -20
  57. package/{components → src/lib/components}/chapter/Positioned.svelte +4 -1
  58. package/{components → src/lib/components}/chapter/Problem.svelte +0 -0
  59. package/src/lib/components/chapter/Python.svelte +144 -0
  60. package/{components → src/lib/components}/chapter/Quote.svelte +9 -5
  61. package/{components → src/lib/components}/chapter/Rule.svelte +4 -1
  62. package/{components → src/lib/components}/chapter/Table.svelte +11 -7
  63. package/src/lib/components/chapter/Text.svelte +109 -0
  64. package/src/lib/components/editor/BookishEditor.svelte +1101 -0
  65. package/src/lib/components/editor/CalloutEditor.svelte +14 -0
  66. package/{components → src/lib/components}/editor/CaptionedCodeEditor.svelte +10 -6
  67. package/src/lib/components/editor/CaretContext.ts +55 -0
  68. package/{components/editor/CaretState.d.ts → src/lib/components/editor/CaretState.ts} +6 -7
  69. package/{components/editor/CaretUtilities.d.ts → src/lib/components/editor/CaretUtilities.ts} +1 -0
  70. package/{components → src/lib/components}/editor/CaretView.svelte +25 -20
  71. package/src/lib/components/editor/CitationsEditor.svelte +64 -0
  72. package/{components/editor/Clipboard.d.ts → src/lib/components/editor/Clipboard.ts} +2 -1
  73. package/{components/editor/Command.d.ts → src/lib/components/editor/Command.ts} +8 -2
  74. package/{components/editor/Commands.js → src/lib/components/editor/Commands.ts} +730 -315
  75. package/src/lib/components/editor/ConfirmButton.svelte +51 -0
  76. package/src/lib/components/editor/DefinitionEditor.svelte +44 -0
  77. package/src/lib/components/editor/EmbedEditor.svelte +152 -0
  78. package/{components → src/lib/components}/editor/Icon.svelte +2 -1
  79. package/{components → src/lib/components}/editor/ImageChooser.svelte +24 -19
  80. package/src/lib/components/editor/InlineCodeEditor.svelte +16 -0
  81. package/{components → src/lib/components}/editor/LabelEditor.svelte +14 -9
  82. package/{components → src/lib/components}/editor/LanguageEditor.svelte +8 -5
  83. package/src/lib/components/editor/LinkEditor.svelte +110 -0
  84. package/{components → src/lib/components}/editor/Note.svelte +0 -0
  85. package/{components → src/lib/components}/editor/Permissions.svelte +43 -36
  86. package/src/lib/components/editor/PositionEditor.svelte +21 -0
  87. package/src/lib/components/editor/QuoteEditor.svelte +14 -0
  88. package/{components → src/lib/components}/editor/Switch.svelte +14 -11
  89. package/src/lib/components/editor/TableEditor.svelte +14 -0
  90. package/{components → src/lib/components}/editor/TextEditor.svelte +101 -89
  91. package/src/lib/components/editor/Toggle.svelte +47 -0
  92. package/src/lib/components/editor/Toolbar.svelte +297 -0
  93. package/{components → src/lib/components}/editor/ToolbarGroup.svelte +5 -3
  94. package/{components → src/lib/components}/editor/ToolbarSpacer.svelte +0 -0
  95. package/src/lib/components/editor/URLEditor.svelte +15 -0
  96. package/{components/editor/UndoState.d.ts → src/lib/components/editor/UndoState.ts} +3 -2
  97. package/{components → src/lib/components}/editor/icons/annotate.svg +0 -0
  98. package/{components → src/lib/components}/editor/icons/block.svg +0 -0
  99. package/{components → src/lib/components}/editor/icons/bold.svg +0 -0
  100. package/{components → src/lib/components}/editor/icons/bullets.svg +0 -0
  101. package/{components → src/lib/components}/editor/icons/callout.svg +0 -0
  102. package/{components → src/lib/components}/editor/icons/citation.svg +0 -0
  103. package/{components → src/lib/components}/editor/icons/clear.svg +0 -0
  104. package/{components → src/lib/components}/editor/icons/clipboard.svg +0 -0
  105. package/{components → src/lib/components}/editor/icons/code.svg +0 -0
  106. package/{components → src/lib/components}/editor/icons/columnafter.svg +0 -0
  107. package/{components → src/lib/components}/editor/icons/columnbefore.svg +0 -0
  108. package/{components → src/lib/components}/editor/icons/comment.svg +0 -0
  109. package/{components → src/lib/components}/editor/icons/copy.svg +0 -0
  110. package/{components → src/lib/components}/editor/icons/cut.svg +0 -0
  111. package/{components → src/lib/components}/editor/icons/define.svg +0 -0
  112. package/{components → src/lib/components}/editor/icons/deletecolumn.svg +0 -0
  113. package/{components → src/lib/components}/editor/icons/deleterow.svg +0 -0
  114. package/{components → src/lib/components}/editor/icons/footnote.svg +0 -0
  115. package/{components → src/lib/components}/editor/icons/header1.svg +0 -0
  116. package/{components → src/lib/components}/editor/icons/header2.svg +0 -0
  117. package/{components → src/lib/components}/editor/icons/header3.svg +0 -0
  118. package/{components → src/lib/components}/editor/icons/home.svg +0 -0
  119. package/{components → src/lib/components}/editor/icons/indent.svg +0 -0
  120. package/{components → src/lib/components}/editor/icons/italic.svg +0 -0
  121. package/{components → src/lib/components}/editor/icons/label.svg +0 -0
  122. package/{components → src/lib/components}/editor/icons/left.svg +0 -0
  123. package/{components → src/lib/components}/editor/icons/level.svg +0 -0
  124. package/{components → src/lib/components}/editor/icons/link.svg +0 -0
  125. package/{components → src/lib/components}/editor/icons/list.svg +0 -0
  126. package/{components → src/lib/components}/editor/icons/media.svg +0 -0
  127. package/{components → src/lib/components}/editor/icons/middle.svg +0 -0
  128. package/{components → src/lib/components}/editor/icons/numbers.svg +0 -0
  129. package/{components → src/lib/components}/editor/icons/paragraph.svg +0 -0
  130. package/{components → src/lib/components}/editor/icons/paste.svg +0 -0
  131. package/{components → src/lib/components}/editor/icons/quote.svg +0 -0
  132. package/{components → src/lib/components}/editor/icons/redo.svg +0 -0
  133. package/{components → src/lib/components}/editor/icons/right.svg +0 -0
  134. package/{components → src/lib/components}/editor/icons/rowabove.svg +0 -0
  135. package/{components → src/lib/components}/editor/icons/rowbelow.svg +0 -0
  136. package/{components → src/lib/components}/editor/icons/rule.svg +0 -0
  137. package/{components → src/lib/components}/editor/icons/sub.svg +0 -0
  138. package/{components → src/lib/components}/editor/icons/super.svg +0 -0
  139. package/{components → src/lib/components}/editor/icons/table.svg +0 -0
  140. package/{components → src/lib/components}/editor/icons/text.svg +0 -0
  141. package/{components → src/lib/components}/editor/icons/time.svg +0 -0
  142. package/{components → src/lib/components}/editor/icons/undo.svg +0 -0
  143. package/{components → src/lib/components}/editor/icons/unindent.svg +0 -0
  144. package/{components → src/lib/components}/editor/icons/unlink.svg +0 -0
  145. package/{components → src/lib/components}/page/Acknowledgements.svelte +19 -10
  146. package/src/lib/components/page/Authors.svelte +92 -0
  147. package/src/lib/components/page/BookLoader.svelte +77 -0
  148. package/src/lib/components/page/BulkReferenceEditor.svelte +86 -0
  149. package/src/lib/components/page/Chapter.svelte +449 -0
  150. package/src/lib/components/page/ChapterContext.ts +13 -0
  151. package/{components → src/lib/components}/page/ChapterNumber.svelte +0 -0
  152. package/{components → src/lib/components}/page/ChapterTitle.svelte +4 -2
  153. package/src/lib/components/page/Contexts.ts +176 -0
  154. package/{components → src/lib/components}/page/DefinitionView.svelte +52 -37
  155. package/{components → src/lib/components}/page/Description.svelte +15 -7
  156. package/src/lib/components/page/Edition.svelte +189 -0
  157. package/src/lib/components/page/EditionLoader.svelte +123 -0
  158. package/{components → src/lib/components}/page/Editions.svelte +22 -18
  159. package/{components → src/lib/components}/page/Glossary.svelte +33 -28
  160. package/{components → src/lib/components}/page/Header.svelte +59 -52
  161. package/{components → src/lib/components}/page/Index.svelte +48 -41
  162. package/{components → src/lib/components}/page/Instructions.svelte +2 -1
  163. package/{components → src/lib/components}/page/License.svelte +17 -9
  164. package/{components → src/lib/components}/page/Loading.svelte +0 -0
  165. package/{components → src/lib/components}/page/Media.svelte +44 -27
  166. package/{components → src/lib/components}/page/MediaPreview.svelte +3 -2
  167. package/{components → src/lib/components}/page/Muted.svelte +0 -0
  168. package/{components → src/lib/components}/page/Outline.svelte +140 -110
  169. package/src/lib/components/page/Page.svelte +94 -0
  170. package/{components → src/lib/components}/page/PageHeader.svelte +2 -1
  171. package/{components → src/lib/components}/page/PageParagraph.svelte +0 -0
  172. package/src/lib/components/page/PossibleChapter.svelte +16 -0
  173. package/src/lib/components/page/PossibleReference.svelte +14 -0
  174. package/{components → src/lib/components}/page/Print.svelte +5 -3
  175. package/{components → src/lib/components}/page/Publish.svelte +59 -52
  176. package/{components → src/lib/components}/page/Reference.svelte +39 -30
  177. package/{components → src/lib/components}/page/References.svelte +18 -14
  178. package/{components → src/lib/components}/page/Rows.svelte +0 -0
  179. package/src/lib/components/page/Search.svelte +153 -0
  180. package/{components → src/lib/components}/page/Status.svelte +5 -3
  181. package/{components → src/lib/components}/page/SubdomainEditor.svelte +16 -13
  182. package/{components → src/lib/components}/page/TableOfContents.svelte +79 -68
  183. package/src/lib/components/page/TableOfContentsImage.svelte +22 -0
  184. package/{components → src/lib/components}/page/TableOfContentsRow.svelte +34 -24
  185. package/{components → src/lib/components}/page/ThemeEditor.svelte +44 -33
  186. package/{components → src/lib/components}/page/ThemeEditorPreview.svelte +21 -12
  187. package/src/lib/components/page/ThemeSetEditor.svelte +21 -0
  188. package/{components → src/lib/components}/page/ThemeVariableEditor.svelte +18 -14
  189. package/{components → src/lib/components}/page/Title.svelte +0 -0
  190. package/{components → src/lib/components}/page/Unknown.svelte +10 -8
  191. package/{components/page/margins.js → src/lib/components/page/margins.ts} +79 -46
  192. package/{index.js → src/lib/index.js} +0 -0
  193. package/src/lib/models/CRUD.ts +469 -0
  194. package/{models/Firebase.js → src/lib/models/Firebase.ts} +26 -16
  195. package/src/lib/models/book/Book.ts +283 -0
  196. package/src/lib/models/book/BookMedia.ts +182 -0
  197. package/src/lib/models/book/BookSaveStatus.ts +8 -0
  198. package/src/lib/models/book/Chapter.ts +462 -0
  199. package/{models/book/ChapterID.js → src/lib/models/book/ChapterID.ts} +1 -0
  200. package/src/lib/models/book/Definition.ts +2 -0
  201. package/src/lib/models/book/Edition.ts +1216 -0
  202. package/src/lib/models/book/Reference.ts +171 -0
  203. package/{models/book/Schema.js → src/lib/models/book/Schema.ts} +1 -0
  204. package/{models/book/Theme.js → src/lib/models/book/Theme.ts} +110 -6
  205. package/{models/book/ThemeColors.d.ts → src/lib/models/book/ThemeColors.ts} +6 -0
  206. package/{models/book/Words.js → src/lib/models/book/Words.ts} +1 -0
  207. package/{models/chapter/AtomNode.js → src/lib/models/chapter/AtomNode.ts} +30 -10
  208. package/{models/chapter/BlockNode.js → src/lib/models/chapter/BlockNode.ts} +80 -47
  209. package/src/lib/models/chapter/BlocksNode.test.ts +867 -0
  210. package/{models/chapter/BlocksNode.js → src/lib/models/chapter/BlocksNode.ts} +571 -359
  211. package/{models/chapter/Bookkeeping.d.ts → src/lib/models/chapter/Bookkeeping.ts} +0 -0
  212. package/src/lib/models/chapter/CalloutNode.ts +79 -0
  213. package/{models/chapter/Caret.js → src/lib/models/chapter/Caret.ts} +50 -26
  214. package/src/lib/models/chapter/ChapterNode.ts +169 -0
  215. package/{models/chapter/CitationsNode.js → src/lib/models/chapter/CitationsNode.ts} +17 -10
  216. package/{models/chapter/CodeNode.js → src/lib/models/chapter/CodeNode.ts} +125 -62
  217. package/src/lib/models/chapter/CommentNode.ts +61 -0
  218. package/{models/chapter/DefinitionNode.js → src/lib/models/chapter/DefinitionNode.ts} +14 -8
  219. package/src/lib/models/chapter/Edit.ts +6 -0
  220. package/src/lib/models/chapter/EmbedNode.ts +257 -0
  221. package/{models/chapter/ErrorNode.js → src/lib/models/chapter/ErrorNode.ts} +15 -8
  222. package/src/lib/models/chapter/FootnoteNode.ts +59 -0
  223. package/src/lib/models/chapter/FormatNode.test.ts +137 -0
  224. package/{models/chapter/FormatNode.js → src/lib/models/chapter/FormatNode.ts} +443 -262
  225. package/{models/chapter/InlineCodeNode.js → src/lib/models/chapter/InlineCodeNode.ts} +17 -9
  226. package/{models/chapter/LabelNode.js → src/lib/models/chapter/LabelNode.ts} +26 -10
  227. package/{models/chapter/LinkNode.js → src/lib/models/chapter/LinkNode.ts} +12 -7
  228. package/{models/chapter/ListNode.test.js → src/lib/models/chapter/ListNode.test.ts} +57 -20
  229. package/{models/chapter/ListNode.js → src/lib/models/chapter/ListNode.ts} +277 -200
  230. package/src/lib/models/chapter/MetadataNode.ts +44 -0
  231. package/{models → src/lib/models}/chapter/Node.test.js +0 -0
  232. package/{models/chapter/Node.js → src/lib/models/chapter/Node.ts} +155 -71
  233. package/src/lib/models/chapter/ParagraphNode.test.ts +54 -0
  234. package/{models/chapter/ParagraphNode.js → src/lib/models/chapter/ParagraphNode.ts} +95 -58
  235. package/{models/chapter/Parser.test.js → src/lib/models/chapter/Parser.test.ts} +7 -0
  236. package/{models/chapter/Parser.js → src/lib/models/chapter/Parser.ts} +369 -184
  237. package/{models/chapter/Position.d.ts → src/lib/models/chapter/Position.ts} +0 -0
  238. package/src/lib/models/chapter/QuoteNode.ts +135 -0
  239. package/{models/chapter/RootNode.d.ts → src/lib/models/chapter/RootNode.ts} +2 -0
  240. package/{models/chapter/RuleNode.js → src/lib/models/chapter/RuleNode.ts} +9 -6
  241. package/{models/chapter/TableNode.test.js → src/lib/models/chapter/TableNode.test.ts} +27 -10
  242. package/{models/chapter/TableNode.js → src/lib/models/chapter/TableNode.ts} +141 -82
  243. package/{models/chapter/TextNode.test.js → src/lib/models/chapter/TextNode.test.ts} +2 -0
  244. package/{models/chapter/TextNode.js → src/lib/models/chapter/TextNode.ts} +117 -65
  245. package/{util/getSubdomain.js → src/lib/util/getSubdomain.ts} +14 -8
  246. package/{util/isMobile.js → src/lib/util/isMobile.ts} +1 -0
  247. package/{util/mineReference.js → src/lib/util/mineReference.ts} +45 -25
  248. package/{util/scrollToEyeLevel.js → src/lib/util/scrollToEyeLevel.ts} +4 -2
  249. package/src/params/edition.ts +3 -0
  250. package/src/routes/+error.svelte +12 -0
  251. package/src/routes/+layout.svelte +241 -0
  252. package/src/routes/+page.svelte +43 -0
  253. package/src/routes/Footer.svelte +0 -0
  254. package/src/routes/Header.svelte +112 -0
  255. package/src/routes/[bookid]/+layout.svelte +5 -0
  256. package/src/routes/[bookid]/[[editionid=edition]]/+error.svelte +14 -0
  257. package/src/routes/[bookid]/[[editionid=edition]]/+layout.svelte +7 -0
  258. package/src/routes/[bookid]/[[editionid=edition]]/+page.svelte +5 -0
  259. package/src/routes/[bookid]/[[editionid=edition]]/[chapterid]/+page.svelte +5 -0
  260. package/src/routes/[bookid]/[[editionid=edition]]/glossary/+page.svelte +5 -0
  261. package/src/routes/[bookid]/[[editionid=edition]]/index/[[letter]]/+page.svelte +5 -0
  262. package/src/routes/[bookid]/[[editionid=edition]]/media/+page.svelte +5 -0
  263. package/src/routes/[bookid]/[[editionid=edition]]/print/+page.svelte +5 -0
  264. package/src/routes/[bookid]/[[editionid=edition]]/references/+page.svelte +5 -0
  265. package/src/routes/[bookid]/[[editionid=edition]]/search/+page.svelte +5 -0
  266. package/src/routes/[bookid]/editions/+page.svelte +20 -0
  267. package/src/routes/about/+page.svelte +102 -0
  268. package/src/routes/confirm/+page.svelte +62 -0
  269. package/src/routes/email/+page.svelte +99 -0
  270. package/src/routes/login/+page.svelte +66 -0
  271. package/src/routes/read/+page.svelte +38 -0
  272. package/src/routes/write/+error.svelte +10 -0
  273. package/src/routes/write/+layout.svelte +11 -0
  274. package/src/routes/write/+page.svelte +114 -0
  275. package/src/routes/write/[bookid]/+layout.svelte +5 -0
  276. package/src/routes/write/[bookid]/[[editionid=edition]]/+layout.svelte +7 -0
  277. package/src/routes/write/[bookid]/[[editionid=edition]]/+page.svelte +5 -0
  278. package/src/routes/write/[bookid]/[[editionid=edition]]/[chapterid]/+page.svelte +5 -0
  279. package/src/routes/write/[bookid]/[[editionid=edition]]/glossary/+page.svelte +5 -0
  280. package/src/routes/write/[bookid]/[[editionid=edition]]/index/[[letter]]/+page.svelte +5 -0
  281. package/src/routes/write/[bookid]/[[editionid=edition]]/media/+page.svelte +5 -0
  282. package/src/routes/write/[bookid]/[[editionid=edition]]/print/+page.svelte +5 -0
  283. package/src/routes/write/[bookid]/[[editionid=edition]]/references/+page.svelte +5 -0
  284. package/src/routes/write/[bookid]/[[editionid=edition]]/search/+page.svelte +5 -0
  285. package/src/routes/write/[bookid]/[[editionid=edition]]/theme/+page.svelte +5 -0
  286. package/src/routes/write/[bookid]/[[editionid=edition]]/unknown/+page.svelte +5 -0
  287. package/src/routes/write/[bookid]/editions/+page.svelte +20 -0
  288. package/src/vite-env.d.ts +1 -0
  289. package/static/icons/favicon.png +0 -0
  290. package/static/icons/icon.png +0 -0
  291. package/static/icons/ios-icon.png +0 -0
  292. package/storage.rules +9 -0
  293. package/svelte.config.js +19 -0
  294. package/tsconfig.json +18 -0
  295. package/tsconfig.node.json +9 -0
  296. package/vite.config.ts +8 -0
  297. package/vite.reader.config.ts +32 -0
  298. package/components/Auth.svelte +0 -55
  299. package/components/Auth.svelte.d.ts +0 -16
  300. package/components/Authentication.js +0 -1
  301. package/components/BookPreview.svelte.d.ts +0 -18
  302. package/components/External.svelte.d.ts +0 -18
  303. package/components/Link.svelte +0 -51
  304. package/components/Link.svelte.d.ts +0 -18
  305. package/components/app/BookList.svelte.d.ts +0 -18
  306. package/components/app/Button.svelte.d.ts +0 -22
  307. package/components/app/Feedback.svelte.d.ts +0 -18
  308. package/components/app/Head.svelte.d.ts +0 -18
  309. package/components/app/Large.svelte.d.ts +0 -27
  310. package/components/app/Lead.svelte.d.ts +0 -27
  311. package/components/app/Link.svelte.d.ts +0 -20
  312. package/components/app/Options.svelte.d.ts +0 -19
  313. package/components/app/Paragraph.svelte.d.ts +0 -18
  314. package/components/app/Section.svelte.d.ts +0 -27
  315. package/components/app/Table.svelte.d.ts +0 -27
  316. package/components/app/TextInput.svelte.d.ts +0 -22
  317. package/components/chapter/Atom.svelte.d.ts +0 -19
  318. package/components/chapter/Block.svelte +0 -37
  319. package/components/chapter/Block.svelte.d.ts +0 -17
  320. package/components/chapter/Callout.svelte.d.ts +0 -17
  321. package/components/chapter/CaptionedCode.svelte.d.ts +0 -17
  322. package/components/chapter/ChapterBody.svelte.d.ts +0 -19
  323. package/components/chapter/Citations.svelte.d.ts +0 -17
  324. package/components/chapter/Code.svelte.d.ts +0 -22
  325. package/components/chapter/Comment.svelte.d.ts +0 -17
  326. package/components/chapter/Definition.svelte.d.ts +0 -17
  327. package/components/chapter/Embed.svelte.d.ts +0 -20
  328. package/components/chapter/ErrorMessage.svelte +0 -9
  329. package/components/chapter/ErrorMessage.svelte.d.ts +0 -17
  330. package/components/chapter/ExtendedPrism.d.ts +0 -2
  331. package/components/chapter/Figure.svelte.d.ts +0 -24
  332. package/components/chapter/Footnote.svelte.d.ts +0 -19
  333. package/components/chapter/Format.svelte.d.ts +0 -19
  334. package/components/chapter/InlineCode.svelte.d.ts +0 -17
  335. package/components/chapter/Label.svelte.d.ts +0 -17
  336. package/components/chapter/Link.svelte.d.ts +0 -17
  337. package/components/chapter/List.svelte.d.ts +0 -17
  338. package/components/chapter/Marginal.svelte.d.ts +0 -22
  339. package/components/chapter/Paragraph.svelte.d.ts +0 -18
  340. package/components/chapter/Positioned.svelte.d.ts +0 -19
  341. package/components/chapter/Problem.svelte.d.ts +0 -27
  342. package/components/chapter/Python.svelte +0 -128
  343. package/components/chapter/Python.svelte.d.ts +0 -18
  344. package/components/chapter/Quote.svelte.d.ts +0 -17
  345. package/components/chapter/Rule.svelte.d.ts +0 -17
  346. package/components/chapter/Table.svelte.d.ts +0 -17
  347. package/components/chapter/Text.svelte +0 -87
  348. package/components/chapter/Text.svelte.d.ts +0 -18
  349. package/components/editor/BookishEditor.svelte +0 -884
  350. package/components/editor/BookishEditor.svelte.d.ts +0 -25
  351. package/components/editor/CalloutEditor.svelte +0 -10
  352. package/components/editor/CalloutEditor.svelte.d.ts +0 -17
  353. package/components/editor/CaptionedCodeEditor.svelte.d.ts +0 -17
  354. package/components/editor/CaretContext.d.ts +0 -50
  355. package/components/editor/CaretContext.js +0 -1
  356. package/components/editor/CaretState.js +0 -1
  357. package/components/editor/CaretUtilities.js +0 -1
  358. package/components/editor/CaretView.svelte.d.ts +0 -25
  359. package/components/editor/CitationsEditor.svelte +0 -53
  360. package/components/editor/CitationsEditor.svelte.d.ts +0 -17
  361. package/components/editor/Clipboard.js +0 -1
  362. package/components/editor/Command.js +0 -1
  363. package/components/editor/Commands.d.ts +0 -3
  364. package/components/editor/ConfirmButton.svelte +0 -49
  365. package/components/editor/ConfirmButton.svelte.d.ts +0 -19
  366. package/components/editor/DefinitionEditor.svelte +0 -36
  367. package/components/editor/DefinitionEditor.svelte.d.ts +0 -17
  368. package/components/editor/EmbedEditor.svelte +0 -137
  369. package/components/editor/EmbedEditor.svelte.d.ts +0 -17
  370. package/components/editor/Icon.svelte.d.ts +0 -16
  371. package/components/editor/ImageChooser.svelte.d.ts +0 -18
  372. package/components/editor/InlineCodeEditor.svelte +0 -12
  373. package/components/editor/InlineCodeEditor.svelte.d.ts +0 -17
  374. package/components/editor/LabelEditor.svelte.d.ts +0 -17
  375. package/components/editor/LanguageEditor.svelte.d.ts +0 -17
  376. package/components/editor/LinkEditor.svelte +0 -100
  377. package/components/editor/LinkEditor.svelte.d.ts +0 -17
  378. package/components/editor/Note.svelte.d.ts +0 -27
  379. package/components/editor/Permissions.svelte.d.ts +0 -20
  380. package/components/editor/PositionEditor.svelte +0 -17
  381. package/components/editor/PositionEditor.svelte.d.ts +0 -18
  382. package/components/editor/QuoteEditor.svelte +0 -10
  383. package/components/editor/QuoteEditor.svelte.d.ts +0 -17
  384. package/components/editor/Switch.svelte.d.ts +0 -20
  385. package/components/editor/TableEditor.svelte +0 -10
  386. package/components/editor/TableEditor.svelte.d.ts +0 -17
  387. package/components/editor/TextEditor.svelte.d.ts +0 -24
  388. package/components/editor/Toggle.svelte +0 -41
  389. package/components/editor/Toggle.svelte.d.ts +0 -19
  390. package/components/editor/Toolbar.svelte +0 -249
  391. package/components/editor/Toolbar.svelte.d.ts +0 -17
  392. package/components/editor/ToolbarGroup.svelte.d.ts +0 -18
  393. package/components/editor/ToolbarSpacer.svelte.d.ts +0 -23
  394. package/components/editor/URLEditor.svelte +0 -13
  395. package/components/editor/URLEditor.svelte.d.ts +0 -18
  396. package/components/editor/UndoState.js +0 -1
  397. package/components/page/Acknowledgements.svelte.d.ts +0 -14
  398. package/components/page/Authors.svelte +0 -85
  399. package/components/page/Authors.svelte.d.ts +0 -21
  400. package/components/page/BookLoader.svelte +0 -59
  401. package/components/page/BookLoader.svelte.d.ts +0 -16
  402. package/components/page/BulkReferenceEditor.svelte +0 -63
  403. package/components/page/BulkReferenceEditor.svelte.d.ts +0 -14
  404. package/components/page/Chapter.svelte +0 -392
  405. package/components/page/Chapter.svelte.d.ts +0 -18
  406. package/components/page/ChapterContext.d.ts +0 -10
  407. package/components/page/ChapterContext.js +0 -1
  408. package/components/page/ChapterNumber.svelte.d.ts +0 -27
  409. package/components/page/ChapterTitle.svelte.d.ts +0 -18
  410. package/components/page/Contexts.d.ts +0 -47
  411. package/components/page/Contexts.js +0 -133
  412. package/components/page/DefinitionView.svelte.d.ts +0 -18
  413. package/components/page/Description.svelte.d.ts +0 -14
  414. package/components/page/Edition.svelte +0 -161
  415. package/components/page/Edition.svelte.d.ts +0 -20
  416. package/components/page/EditionLoader.svelte +0 -99
  417. package/components/page/EditionLoader.svelte.d.ts +0 -18
  418. package/components/page/Editions.svelte.d.ts +0 -14
  419. package/components/page/Glossary.svelte.d.ts +0 -14
  420. package/components/page/Header.svelte.d.ts +0 -29
  421. package/components/page/Index.svelte.d.ts +0 -14
  422. package/components/page/Instructions.svelte.d.ts +0 -18
  423. package/components/page/License.svelte.d.ts +0 -14
  424. package/components/page/Loading.svelte.d.ts +0 -23
  425. package/components/page/Media.svelte.d.ts +0 -14
  426. package/components/page/MediaPreview.svelte.d.ts +0 -19
  427. package/components/page/Muted.svelte.d.ts +0 -27
  428. package/components/page/Outline.svelte.d.ts +0 -19
  429. package/components/page/Page.svelte +0 -84
  430. package/components/page/Page.svelte.d.ts +0 -19
  431. package/components/page/PageHeader.svelte.d.ts +0 -18
  432. package/components/page/PageParagraph.svelte.d.ts +0 -27
  433. package/components/page/PossibleChapter.svelte +0 -14
  434. package/components/page/PossibleChapter.svelte.d.ts +0 -14
  435. package/components/page/PossibleReference.svelte +0 -11
  436. package/components/page/PossibleReference.svelte.d.ts +0 -18
  437. package/components/page/Print.svelte.d.ts +0 -14
  438. package/components/page/Publish.svelte.d.ts +0 -14
  439. package/components/page/Reference.svelte.d.ts +0 -17
  440. package/components/page/References.svelte.d.ts +0 -14
  441. package/components/page/Rows.svelte.d.ts +0 -27
  442. package/components/page/Search.svelte +0 -133
  443. package/components/page/Search.svelte.d.ts +0 -14
  444. package/components/page/Status.svelte.d.ts +0 -14
  445. package/components/page/SubdomainEditor.svelte.d.ts +0 -14
  446. package/components/page/TableOfContents.svelte.d.ts +0 -14
  447. package/components/page/TableOfContentsImage.svelte +0 -18
  448. package/components/page/TableOfContentsImage.svelte.d.ts +0 -16
  449. package/components/page/TableOfContentsRow.svelte.d.ts +0 -24
  450. package/components/page/ThemeEditor.svelte.d.ts +0 -14
  451. package/components/page/ThemeEditorPreview.svelte.d.ts +0 -17
  452. package/components/page/ThemeSetEditor.svelte +0 -19
  453. package/components/page/ThemeSetEditor.svelte.d.ts +0 -18
  454. package/components/page/ThemeVariableEditor.svelte.d.ts +0 -18
  455. package/components/page/Title.svelte.d.ts +0 -27
  456. package/components/page/Unknown.svelte.d.ts +0 -16
  457. package/components/page/margins.d.ts +0 -2
  458. package/index.d.ts +0 -15
  459. package/models/CRUD.d.ts +0 -27
  460. package/models/CRUD.js +0 -262
  461. package/models/Firebase.d.ts +0 -5
  462. package/models/book/Book.d.ts +0 -61
  463. package/models/book/Book.js +0 -135
  464. package/models/book/BookMedia.d.ts +0 -23
  465. package/models/book/BookMedia.js +0 -108
  466. package/models/book/BookSaveStatus.d.ts +0 -7
  467. package/models/book/BookSaveStatus.js +0 -8
  468. package/models/book/Chapter.d.ts +0 -81
  469. package/models/book/Chapter.js +0 -212
  470. package/models/book/ChapterID.d.ts +0 -10
  471. package/models/book/Definition.d.ts +0 -6
  472. package/models/book/Definition.js +0 -1
  473. package/models/book/Edition.d.ts +0 -139
  474. package/models/book/Edition.js +0 -620
  475. package/models/book/Reference.d.ts +0 -24
  476. package/models/book/Reference.js +0 -78
  477. package/models/book/Schema.d.ts +0 -174
  478. package/models/book/Theme.d.ts +0 -113
  479. package/models/book/ThemeColors.js +0 -1
  480. package/models/book/Words.d.ts +0 -2
  481. package/models/chapter/AtomNode.d.ts +0 -18
  482. package/models/chapter/BlockNode.d.ts +0 -20
  483. package/models/chapter/BlocksNode.d.ts +0 -50
  484. package/models/chapter/BlocksNode.test.d.ts +0 -1
  485. package/models/chapter/BlocksNode.test.js +0 -568
  486. package/models/chapter/Bookkeeping.js +0 -1
  487. package/models/chapter/CalloutNode.d.ts +0 -17
  488. package/models/chapter/CalloutNode.js +0 -58
  489. package/models/chapter/Caret.d.ts +0 -23
  490. package/models/chapter/ChapterNode.d.ts +0 -34
  491. package/models/chapter/ChapterNode.js +0 -117
  492. package/models/chapter/CitationsNode.d.ts +0 -16
  493. package/models/chapter/CodeNode.d.ts +0 -35
  494. package/models/chapter/CommentNode.d.ts +0 -18
  495. package/models/chapter/CommentNode.js +0 -48
  496. package/models/chapter/DefinitionNode.d.ts +0 -12
  497. package/models/chapter/Edit.d.ts +0 -7
  498. package/models/chapter/Edit.js +0 -1
  499. package/models/chapter/EmbedNode.d.ts +0 -45
  500. package/models/chapter/EmbedNode.js +0 -168
  501. package/models/chapter/ErrorNode.d.ts +0 -17
  502. package/models/chapter/FootnoteNode.d.ts +0 -18
  503. package/models/chapter/FootnoteNode.js +0 -47
  504. package/models/chapter/FormatNode.d.ts +0 -60
  505. package/models/chapter/FormatNode.test.d.ts +0 -1
  506. package/models/chapter/FormatNode.test.js +0 -96
  507. package/models/chapter/InlineCodeNode.d.ts +0 -12
  508. package/models/chapter/LabelNode.d.ts +0 -17
  509. package/models/chapter/LinkNode.d.ts +0 -12
  510. package/models/chapter/ListNode.d.ts +0 -51
  511. package/models/chapter/ListNode.test.d.ts +0 -1
  512. package/models/chapter/MetadataNode.d.ts +0 -17
  513. package/models/chapter/MetadataNode.js +0 -32
  514. package/models/chapter/Node.d.ts +0 -38
  515. package/models/chapter/Node.test.d.ts +0 -1
  516. package/models/chapter/ParagraphNode.d.ts +0 -33
  517. package/models/chapter/ParagraphNode.test.d.ts +0 -1
  518. package/models/chapter/ParagraphNode.test.js +0 -30
  519. package/models/chapter/Parser.d.ts +0 -75
  520. package/models/chapter/Parser.test.d.ts +0 -1
  521. package/models/chapter/Position.js +0 -1
  522. package/models/chapter/QuoteNode.d.ts +0 -25
  523. package/models/chapter/QuoteNode.js +0 -99
  524. package/models/chapter/RootNode.js +0 -1
  525. package/models/chapter/RuleNode.d.ts +0 -15
  526. package/models/chapter/TableNode.d.ts +0 -37
  527. package/models/chapter/TableNode.test.d.ts +0 -1
  528. package/models/chapter/TextNode.d.ts +0 -36
  529. package/models/chapter/TextNode.test.d.ts +0 -1
  530. package/util/getSubdomain.d.ts +0 -3
  531. package/util/isMobile.d.ts +0 -2
  532. package/util/mineReference.d.ts +0 -4
  533. package/util/scrollToEyeLevel.d.ts +0 -2
@@ -1,59 +1,66 @@
1
- <script>import Parser from '../../models/chapter/Parser';
2
- import BookishEditor from '../editor/BookishEditor.svelte';
3
- import Switch from '../editor/Switch.svelte';
4
- import { getUser, getEdition, getLeasee, isEditionEditable, lease, } from './Contexts';
5
- import Format from '../chapter/Format.svelte';
6
- import Note from '../editor/Note.svelte';
7
- import Instructions from './Instructions.svelte';
8
- import Link from '../Link.svelte';
9
- import { PUBLIC_CONTEXT } from '$env/static/public';
10
- import Button from '../app/Button.svelte';
11
- import { publish } from '../../models/CRUD';
12
- import Feedback from '../app/Feedback.svelte';
13
- let auth = getUser();
14
- let edition = getEdition();
15
- let editable = isEditionEditable();
16
- let publishing = false;
17
- let feedback = undefined;
18
- let error = undefined;
19
- let url = undefined;
20
- async function requestPublish() {
21
- if ($edition) {
22
- publishing = true;
23
- error = undefined;
24
- feedback = 'Binding the book, this could take a minute...';
25
- try {
26
- const result = await publish($edition);
27
- if (typeof result === 'string') {
28
- error = result;
1
+ <script lang="ts">
2
+ import Parser from '../../models/chapter/Parser';
3
+ import BookishEditor from '../editor/BookishEditor.svelte';
4
+ import Switch from '../editor/Switch.svelte';
5
+ import {
6
+ getUser,
7
+ getEdition,
8
+ getLeasee,
9
+ isEditionEditable,
10
+ lease,
11
+ } from './Contexts';
12
+ import Format from '../chapter/Format.svelte';
13
+ import Note from '../editor/Note.svelte';
14
+ import Instructions from './Instructions.svelte';
15
+ import Link from '../Link.svelte';
16
+ import { PUBLIC_CONTEXT } from '$env/static/public';
17
+ import Button from '../app/Button.svelte';
18
+ import { publish } from '../../models/CRUD';
19
+ import Feedback from '../app/Feedback.svelte';
20
+
21
+ let auth = getUser();
22
+ let edition = getEdition();
23
+ let editable = isEditionEditable();
24
+
25
+ let publishing = false;
26
+ let feedback: string | undefined = undefined;
27
+ let error: string | undefined = undefined;
28
+ let url: string | undefined = undefined;
29
+ async function requestPublish() {
30
+ if ($edition) {
31
+ publishing = true;
32
+ error = undefined;
33
+ feedback = 'Binding the book, this could take a minute...';
34
+ try {
35
+ const result = await publish($edition);
36
+ if (typeof result === 'string') {
37
+ error = result;
38
+ feedback = undefined;
39
+ } else {
40
+ url = result.url;
41
+ }
42
+ } catch (err) {
43
+ console.log(err);
29
44
  feedback = undefined;
45
+ error = 'Unable to bundle the book for download :(';
46
+ } finally {
47
+ publishing = false;
30
48
  }
31
- else {
32
- url = result.url;
33
- }
34
- }
35
- catch (err) {
36
- console.log(err);
37
- feedback = undefined;
38
- error = 'Unable to bundle the book for download :(';
39
- }
40
- finally {
41
- publishing = false;
42
49
  }
43
50
  }
44
- }
45
- let publisher = undefined;
46
- $: {
47
- if ($auth && $auth.user)
48
- updateUserClaims();
49
- }
50
- async function updateUserClaims() {
51
- if ($auth === undefined || $auth.user === null)
52
- return;
53
- const token = await $auth.user.getIdTokenResult();
54
- publisher =
55
- 'publisher' in token.claims && token.claims.publisher === true;
56
- }
51
+
52
+ let publisher: boolean | undefined = undefined;
53
+
54
+ $: {
55
+ if ($auth && $auth.user) updateUserClaims();
56
+ }
57
+
58
+ async function updateUserClaims() {
59
+ if ($auth === undefined || $auth.user === null) return;
60
+ const token = await $auth.user.getIdTokenResult();
61
+ publisher =
62
+ 'publisher' in token.claims && token.claims.publisher === true;
63
+ }
57
64
  </script>
58
65
 
59
66
  {#if $edition && (publisher === true || PUBLIC_CONTEXT === 'local')}
@@ -1,36 +1,45 @@
1
1
  <svelte:options immutable={true} />
2
2
 
3
- <script>import Reference from '../../models/book/Reference';
4
- import Button from '../app/Button.svelte';
5
- import Table from '../app/Table.svelte';
6
- import ConfirmButton from '../editor/ConfirmButton.svelte';
7
- import TextEditor from '../editor/TextEditor.svelte';
8
- import { getEdition, isEditionEditable } from './Contexts';
9
- import Link from '../Link.svelte';
10
- import Note from '../editor/Note.svelte';
11
- export let reference;
12
- let editable = isEditionEditable();
13
- let edition = getEdition();
14
- let editing = false;
15
- function startEditing() {
16
- editing = true;
17
- }
18
- function stopEditing() {
19
- editing = false;
20
- }
21
- function move(field, direction) {
22
- let fields = Array.from(document.querySelectorAll('input[type="text"]'));
23
- let index = fields.indexOf(field);
24
- if (index >= 0) {
25
- const newInput = direction < 0 && index > 0
26
- ? fields[index - 1]
27
- : direction > 0 && index < fields.length - 1
28
- ? fields[index + 1]
29
- : undefined;
30
- if (newInput)
31
- newInput.focus();
3
+ <script lang="ts">
4
+ import Reference from '$lib/models/book/Reference';
5
+ import Button from '../app/Button.svelte';
6
+ import Table from '../app/Table.svelte';
7
+ import ConfirmButton from '../editor/ConfirmButton.svelte';
8
+ import TextEditor from '../editor/TextEditor.svelte';
9
+ import { getEdition, isEditionEditable } from './Contexts';
10
+ import Link from '../Link.svelte';
11
+ import Note from '../editor/Note.svelte';
12
+
13
+ export let reference: Reference;
14
+
15
+ let editable = isEditionEditable();
16
+ let edition = getEdition();
17
+
18
+ let editing = false;
19
+
20
+ function startEditing() {
21
+ editing = true;
22
+ }
23
+
24
+ function stopEditing() {
25
+ editing = false;
26
+ }
27
+
28
+ function move(field: HTMLElement, direction: 1 | -1) {
29
+ let fields = Array.from(
30
+ document.querySelectorAll('input[type="text"]')
31
+ ) as HTMLElement[];
32
+ let index = fields.indexOf(field);
33
+ if (index >= 0) {
34
+ const newInput =
35
+ direction < 0 && index > 0
36
+ ? fields[index - 1]
37
+ : direction > 0 && index < fields.length - 1
38
+ ? fields[index + 1]
39
+ : undefined;
40
+ if (newInput) newInput.focus();
41
+ }
32
42
  }
33
- }
34
43
  </script>
35
44
 
36
45
  {#if editable && !reference.short}
@@ -1,17 +1,21 @@
1
- <script>import Header from './Header.svelte';
2
- import Outline from './Outline.svelte';
3
- import Page from './Page.svelte';
4
- import ChapterIDs from '../../models/book/ChapterID';
5
- import BulkReferenceEditor from './BulkReferenceEditor.svelte';
6
- import PossibleReference from './PossibleReference.svelte';
7
- import { getUser, getEdition, isEditionEditable } from './Contexts';
8
- let auth = getUser();
9
- let edition = getEdition();
10
- let editable = isEditionEditable();
11
- $: references = $edition?.hasReferences() ? $edition.getReferences() : null;
12
- // Otherwise, map references to a list with letter headers.
13
- if (references !== null) {
14
- }
1
+ <script lang="ts">
2
+ import Header from './Header.svelte';
3
+ import Outline from './Outline.svelte';
4
+ import Page from './Page.svelte';
5
+ import ChapterIDs from '$lib/models/book/ChapterID';
6
+ import BulkReferenceEditor from './BulkReferenceEditor.svelte';
7
+ import PossibleReference from './PossibleReference.svelte';
8
+ import { getUser, getEdition, isEditionEditable } from './Contexts';
9
+
10
+ let auth = getUser();
11
+ let edition = getEdition();
12
+ let editable = isEditionEditable();
13
+
14
+ $: references = $edition?.hasReferences() ? $edition.getReferences() : null;
15
+
16
+ // Otherwise, map references to a list with letter headers.
17
+ if (references !== null) {
18
+ }
15
19
  </script>
16
20
 
17
21
  {#if $edition}
@@ -0,0 +1,153 @@
1
+ <script lang="ts">
2
+ import Header from './Header.svelte';
3
+ import Outline from './Outline.svelte';
4
+ import Page from './Page.svelte';
5
+ import Link from '../Link.svelte';
6
+ import Chapter from '$lib/models/book/Chapter';
7
+ import type { Match } from '$lib/models/book/Chapter';
8
+ import ChapterIDs from '$lib/models/book/ChapterID';
9
+ import { getBase, getEdition, isEditionEditable } from './Contexts';
10
+ import TextInput from '../app/TextInput.svelte';
11
+ import ChapterTitle from './ChapterTitle.svelte';
12
+ import ChapterNumber from './ChapterNumber.svelte';
13
+ import PageHeader from './PageHeader.svelte';
14
+
15
+ let edition = getEdition();
16
+ let base = getBase();
17
+
18
+ let query = '';
19
+
20
+ let results: (
21
+ | Chapter
22
+ | { link: string; left: string; match: string; right: string }
23
+ )[] = [];
24
+ $: {
25
+ // Reset the results
26
+ results = [];
27
+
28
+ const lowerQuery = query.toLowerCase();
29
+
30
+ query = query.trim();
31
+
32
+ // Go through all the chapter indexes and find matches.
33
+ if ($edition && query.length > 2)
34
+ for (const chapter of $edition?.getChapters() ?? []) {
35
+ let index = chapter.getIndex($edition);
36
+ // No index yet? Skip this chapter.
37
+ if (index) {
38
+ // Build a DOM to render matches.
39
+ const chapterMatches: Match[] = [];
40
+
41
+ // What are all of the words in the index that match the query?
42
+ for (const word of Object.keys(index)) {
43
+ if (query.length > 0 && word.indexOf(lowerQuery) >= 0) {
44
+ if (index) {
45
+ let matches = index[word];
46
+ matches.forEach((match: Match) => {
47
+ chapterMatches.push(match);
48
+ });
49
+ }
50
+ }
51
+ }
52
+
53
+ if (chapterMatches.length > 0) {
54
+ results.push(chapter);
55
+ chapterMatches.forEach((match, index) => {
56
+ // Only highlight the part of the word that matches.
57
+ const start = match.match
58
+ .toLowerCase()
59
+ .indexOf(lowerQuery);
60
+ results.push({
61
+ link: `${$base}/${chapter.getID()}?word=${match.match.toLowerCase()}&number=${index}`,
62
+ left:
63
+ match.left +
64
+ match.match.substring(0, start),
65
+ match: match.match.substring(
66
+ start,
67
+ start + query.length
68
+ ),
69
+ right:
70
+ match.match.substring(
71
+ start + query.length
72
+ ) + match.right,
73
+ });
74
+ });
75
+ }
76
+ }
77
+ }
78
+ }
79
+ </script>
80
+
81
+ {#if $edition}
82
+ <Page title={`${$edition.getTitle()} - Search`}>
83
+ <Header
84
+ editable={isEditionEditable()}
85
+ label="Search title"
86
+ getImage={() => $edition?.getImage(ChapterIDs.SearchID) ?? null}
87
+ setImage={(embed) =>
88
+ $edition
89
+ ? edition.set(
90
+ $edition.withImage(ChapterIDs.SearchID, embed)
91
+ )
92
+ : undefined}
93
+ header="Search"
94
+ id="search"
95
+ tags={$edition.getTags()}
96
+ >
97
+ <Outline
98
+ slot="outline"
99
+ previous={$edition.getPreviousChapterID(ChapterIDs.SearchID)}
100
+ next={$edition.getNextChapterID(ChapterIDs.SearchID)}
101
+ />
102
+ </Header>
103
+
104
+ <p>
105
+ Type a word—just a single word—and we'll show its occurrences in
106
+ this book:
107
+ </p>
108
+
109
+ <p>
110
+ <TextInput
111
+ type="text"
112
+ placeholder={'search for a word'}
113
+ disabled={false}
114
+ bind:text={query}
115
+ />
116
+ </p>
117
+
118
+ {#if query.trim() !== ''}
119
+ {#if query.trim().length < 3}
120
+ <p>Keep typing...</p>
121
+ {:else if results.length === 0}
122
+ <p>No occurrence of <em>{query}</em>.</p>
123
+ {:else}
124
+ <p
125
+ >Found {results.filter(
126
+ (result) => !(result instanceof Chapter)
127
+ ).length} occurrences of <em>{query}</em>...</p
128
+ >
129
+ {#each results as result}
130
+ {#if result instanceof Chapter}
131
+ <PageHeader id={'header-' + result.getID()}
132
+ ><ChapterNumber
133
+ >Chapter{#if $edition.getChapterNumber(result.getID()) !== undefined}&nbsp;{$edition.getChapterNumber(
134
+ result.getID()
135
+ )}{/if}</ChapterNumber
136
+ > - <ChapterTitle>{result.getTitle()}</ChapterTitle
137
+ ></PageHeader
138
+ >
139
+ {:else}
140
+ <p
141
+ ><Link to={result.link}
142
+ >...{result.left}<span
143
+ class="bookish-content-highlight"
144
+ >{result.match}</span
145
+ >{result.right}...</Link
146
+ ></p
147
+ >
148
+ {/if}
149
+ {/each}
150
+ {/if}
151
+ {/if}
152
+ </Page>
153
+ {/if}
@@ -1,6 +1,8 @@
1
- <script>import BookSaveStatus from '../../models/book/BookSaveStatus';
2
- import { getStatus } from './Contexts';
3
- let status = getStatus();
1
+ <script lang="ts">
2
+ import BookSaveStatus from '../../models/book/BookSaveStatus';
3
+ import { getStatus } from './Contexts';
4
+
5
+ let status = getStatus();
4
6
  </script>
5
7
 
6
8
  <span
@@ -1,16 +1,19 @@
1
- <script>import TextEditor from '../editor/TextEditor.svelte';
2
- import { isSubdomainAvailable } from '../../models/CRUD';
3
- import { getBook } from './Contexts';
4
- import Muted from './Muted.svelte';
5
- let book = getBook();
6
- const invalidNames = [
7
- 'email',
8
- 'login',
9
- 'confirm',
10
- 'about',
11
- 'read',
12
- 'write',
13
- ];
1
+ <script lang="ts">
2
+ import TextEditor from '$lib/components/editor/TextEditor.svelte';
3
+ import { isSubdomainAvailable } from '$lib/models/CRUD';
4
+ import { getBook } from './Contexts';
5
+ import Muted from './Muted.svelte';
6
+
7
+ let book = getBook();
8
+
9
+ const invalidNames: string[] = [
10
+ 'email',
11
+ 'login',
12
+ 'confirm',
13
+ 'about',
14
+ 'read',
15
+ 'write',
16
+ ];
14
17
  </script>
15
18
 
16
19
  {#if $book}
@@ -1,72 +1,83 @@
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 Authors from './Authors.svelte';
14
- import TextEditor from '../editor/TextEditor.svelte';
15
- import Toggle from '../editor/Toggle.svelte';
16
- import { getUser, getBase, getBook, getEdition, isBookEditable, isEditionEditable, isEditionPartiallyEditable, setChapter, } from './Contexts';
17
- import Muted from './Muted.svelte';
18
- import Button from '../app/Button.svelte';
19
- import PageHeader from './PageHeader.svelte';
20
- import Rows from './Rows.svelte';
21
- import PageParagraph from './PageParagraph.svelte';
22
- import Note from '../editor/Note.svelte';
23
- import Permissions from '../editor/Permissions.svelte';
24
- import Publish from './Publish.svelte';
25
- import { onMount } from 'svelte';
26
- let auth = getUser();
27
- let book = getBook();
28
- let edition = getEdition();
29
- let base = getBase();
30
- let editable = isEditionEditable();
31
- function getProgressDescription(progress) {
32
- if (progress === null)
33
- return '';
34
- else if (progress === 0)
35
- return '';
36
- else if (progress < 30)
37
- return '; just started';
38
- else if (progress < 70)
39
- return '; halfway';
40
- else if (progress < 95)
41
- return '; almost done';
42
- else
43
- return '; done';
44
- }
45
- // Get the chapter progress
46
- let progressStorage = typeof localStorage !== 'undefined'
47
- ? localStorage.getItem('chapterProgress')
48
- : null;
49
- let progress = progressStorage === null ? {} : JSON.parse(progressStorage);
50
- // Is there a colon? Let's make a subtitle
51
- $: title = $edition?.getTitle() ?? '';
52
- let subtitle = undefined;
53
- $: {
54
- let colon = title.indexOf(':');
55
- if (colon >= 0) {
56
- subtitle = title.substring(colon + 1).trim();
57
- title = title.substring(0, colon).trim();
1
+ <script lang="ts">
2
+ import Instructions from '$lib/components/page/Instructions.svelte';
3
+ import Parser from '$lib/models/chapter/Parser';
4
+ import TableOfContentsRow from './TableOfContentsRow.svelte';
5
+ import ChapterIDs from '$lib/models/book/ChapterID';
6
+ import Page from '$lib/components/page/Page.svelte';
7
+ import Header from '$lib/components/page/Header.svelte';
8
+ import Outline from '$lib/components/page/Outline.svelte';
9
+ import Link from '$lib/components/Link.svelte';
10
+ import SubdomainEditor from '$lib/components/page/SubdomainEditor.svelte';
11
+ import Description from './Description.svelte';
12
+ import Acknowledgements from './Acknowledgements.svelte';
13
+ import License from '$lib/components/page/License.svelte';
14
+ import Authors from '$lib/components/page/Authors.svelte';
15
+ import TextEditor from '$lib/components/editor/TextEditor.svelte';
16
+ import Toggle from '$lib/components/editor/Toggle.svelte';
17
+ import {
18
+ getUser,
19
+ getBase,
20
+ getBook,
21
+ getEdition,
22
+ isBookEditable,
23
+ isEditionEditable,
24
+ isEditionPartiallyEditable,
25
+ setChapter,
26
+ } from './Contexts';
27
+ import Muted from './Muted.svelte';
28
+ import Button from '../app/Button.svelte';
29
+ import PageHeader from './PageHeader.svelte';
30
+ import Rows from './Rows.svelte';
31
+ import PageParagraph from './PageParagraph.svelte';
32
+ import Note from '../editor/Note.svelte';
33
+ import Permissions from '../editor/Permissions.svelte';
34
+ import Publish from './Publish.svelte';
35
+ import { onMount } from 'svelte';
36
+
37
+ let auth = getUser();
38
+ let book = getBook();
39
+ let edition = getEdition();
40
+ let base = getBase();
41
+ let editable = isEditionEditable();
42
+
43
+ function getProgressDescription(progress: null | number) {
44
+ if (progress === null) return '';
45
+ else if (progress === 0) return '';
46
+ else if (progress < 30) return '; just started';
47
+ else if (progress < 70) return '; halfway';
48
+ else if (progress < 95) return '; almost done';
49
+ else return '; done';
50
+ }
51
+
52
+ // Get the chapter progress
53
+ let progressStorage =
54
+ typeof localStorage !== 'undefined'
55
+ ? localStorage.getItem('chapterProgress')
56
+ : null;
57
+ let progress = progressStorage === null ? {} : JSON.parse(progressStorage);
58
+
59
+ // Is there a colon? Let's make a subtitle
60
+ $: title = $edition?.getTitle() ?? '';
61
+ let subtitle: string | undefined = undefined;
62
+ $: {
63
+ let colon = title.indexOf(':');
64
+ if (colon >= 0) {
65
+ subtitle = title.substring(colon + 1).trim();
66
+ title = title.substring(0, colon).trim();
67
+ }
58
68
  }
59
- }
60
- let waitingForChapter = false;
61
- function addChapter() {
62
- if ($edition)
63
- edition.set($edition.withNewChapter());
64
- }
65
- /** Doing this on mount allows for prerendering an an update. */
66
- let bookURL = '…';
67
- onMount(() => {
68
- bookURL = location.protocol + '//' + location.host + location.pathname;
69
- });
69
+
70
+ let waitingForChapter = false;
71
+
72
+ function addChapter() {
73
+ if ($edition) edition.set($edition.withNewChapter());
74
+ }
75
+
76
+ /** Doing this on mount allows for prerendering an an update. */
77
+ let bookURL = '…';
78
+ onMount(() => {
79
+ bookURL = location.protocol + '//' + location.host + location.pathname;
80
+ });
70
81
  </script>
71
82
 
72
83
  {#if $edition}
@@ -0,0 +1,22 @@
1
+ <script lang="ts">
2
+ import EmbedNode from '$lib/models/chapter/EmbedNode';
3
+ import Parser from '$lib/models/chapter/Parser';
4
+ import { getBase, getEdition } from './Contexts';
5
+
6
+ export let embed: string | null;
7
+
8
+ let edition = getEdition();
9
+ let base = getBase();
10
+
11
+ $: embedNode = embed === null ? null : Parser.parseEmbed($edition, embed);
12
+ </script>
13
+
14
+ {#if embedNode instanceof EmbedNode}
15
+ <img
16
+ style="width: 5em"
17
+ src={embedNode.isLocal()
18
+ ? `${$base}/${embedNode.getSmallURL()}`
19
+ : embedNode.getSmallURL()}
20
+ alt={embedNode.getDescription()}
21
+ />
22
+ {/if}