flea-qml 0.0.0-stage → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (637) hide show
  1. package/LICENSE +22 -0
  2. package/README.md +511 -2
  3. package/THIRD-PARTY-NOTICES.md +29 -0
  4. package/demos/App.java +5 -0
  5. package/demos/Dockerfile +4 -0
  6. package/demos/Main.kt +3 -0
  7. package/demos/Program.cs +1 -0
  8. package/demos/README.md +12 -0
  9. package/demos/app.dart +3 -0
  10. package/demos/app.deb +0 -0
  11. package/demos/app.js +1 -0
  12. package/demos/backup.tar +0 -0
  13. package/demos/budget.xlsx +0 -0
  14. package/demos/build.sh +2 -0
  15. package/demos/bundle.zip +0 -0
  16. package/demos/clip.mp4 +0 -0
  17. package/demos/data.sqlite +0 -0
  18. package/demos/disk.iso +0 -0
  19. package/demos/engine.cpp +5 -0
  20. package/demos/firmware.bin +0 -0
  21. package/demos/flake.nix +4 -0
  22. package/demos/folder/inside.txt +1 -0
  23. package/demos/font.ttf +0 -0
  24. package/demos/index.html +5 -0
  25. package/demos/index.php +2 -0
  26. package/demos/init.lua +1 -0
  27. package/demos/letter.docx +0 -0
  28. package/demos/lib.rs +3 -0
  29. package/demos/main.c +6 -0
  30. package/demos/main.h +3 -0
  31. package/demos/math-and-diagrams.md +200 -0
  32. package/demos/notes.tar.gz +0 -0
  33. package/demos/notes.txt +3 -0
  34. package/demos/photo.png +0 -0
  35. package/demos/program +2 -0
  36. package/demos/report.pdf +32 -0
  37. package/demos/script.py +1 -0
  38. package/demos/server.go +7 -0
  39. package/demos/settings.json +4 -0
  40. package/demos/slides.pptx +0 -0
  41. package/demos/song.mp3 +0 -0
  42. package/demos/style.css +4 -0
  43. package/demos/tool.rb +1 -0
  44. package/demos/types.ts +2 -0
  45. package/docs/pele.md +23 -0
  46. package/docs/protocol.md +3420 -0
  47. package/docs/temml.md +63 -0
  48. package/index.js +107 -0
  49. package/package.json +34 -4
  50. package/src/archive.js +407 -0
  51. package/src/archiveops.js +728 -0
  52. package/src/backend.js +369 -0
  53. package/src/bulkrename.js +95 -0
  54. package/src/clip-host.js +76 -0
  55. package/src/clip.js +462 -0
  56. package/src/code.js +168 -0
  57. package/src/compare.js +74 -0
  58. package/src/create.js +128 -0
  59. package/src/dirsize.js +147 -0
  60. package/src/figure-svg.js +530 -0
  61. package/src/figure-thread.js +23 -0
  62. package/src/figure.js +132 -0
  63. package/src/find.js +55 -0
  64. package/src/flea.js +39 -0
  65. package/src/fsinfo.js +39 -0
  66. package/src/highlight.js +141 -0
  67. package/src/html.js +52 -0
  68. package/src/kinds.js +89 -0
  69. package/src/listing.js +130 -0
  70. package/src/markdown-html.js +317 -0
  71. package/src/mathml.js +186 -0
  72. package/src/menu.js +180 -0
  73. package/src/meta.js +135 -0
  74. package/src/office.js +810 -0
  75. package/src/order.js +100 -0
  76. package/src/peek.js +49 -0
  77. package/src/pele-wrapper.js +695 -0
  78. package/src/permissions.js +180 -0
  79. package/src/places.js +313 -0
  80. package/src/preview-language.js +10 -0
  81. package/src/terminal-server.js +95 -0
  82. package/src/terminal-shell.js +26 -0
  83. package/src/transfer.js +669 -0
  84. package/src/trash-record.js +41 -0
  85. package/src/trash.js +210 -0
  86. package/src/trashbrowse.js +327 -0
  87. package/src/uistate.js +393 -0
  88. package/src/uistore.js +168 -0
  89. package/src/vendor/LICENSES/Apache-2.0.txt +202 -0
  90. package/src/vendor/LICENSES/MIT-katex-2015.txt +27 -0
  91. package/src/vendor/LICENSES/MIT-katex.txt +21 -0
  92. package/src/vendor/LICENSES/MIT-mermaid.txt +21 -0
  93. package/src/vendor/LICENSES/MIT-pele.txt +40 -0
  94. package/src/vendor/LICENSES/MIT-perseus.txt +18 -0
  95. package/src/vendor/LICENSES/MIT-temml.txt +21 -0
  96. package/src/vendor/pele.js +145 -0
  97. package/src/vendor/temml.mjs +14708 -0
  98. package/src/watch.js +98 -0
  99. package/src/wayland/client.js +109 -0
  100. package/src/wayland/protocol.js +55 -0
  101. package/src/wayland/protocols/ext-data-control-v1.xml +276 -0
  102. package/src/wayland/protocols/wayland.xml +3248 -0
  103. package/src/wayland/protocols/wlr-data-control-unstable-v1.xml +278 -0
  104. package/src/wayland/resource-io.js +6 -0
  105. package/src/wayland/socket-discovery.js +26 -0
  106. package/src/wayland/transport-posix.js +120 -0
  107. package/src/wayland/transport-win32.js +11 -0
  108. package/src/wayland/transport.js +3 -0
  109. package/src/wayland/win32-resources.js +80 -0
  110. package/src/wayland/win32-wire.js +62 -0
  111. package/test/archive.test.js +80 -0
  112. package/test/bench-markdown-scroll.mjs +190 -0
  113. package/test/clip-host.test.js +113 -0
  114. package/test/code-preview.test.js +35 -0
  115. package/test/compare-ui-paths.test.js +24 -0
  116. package/test/compare.test.js +54 -0
  117. package/test/delete-trash.test.js +67 -0
  118. package/test/dirsize.test.js +138 -0
  119. package/test/file-ops.test.js +307 -0
  120. package/test/file-url.test.js +24 -0
  121. package/test/find-contents.test.js +161 -0
  122. package/test/find-input.test.js +66 -0
  123. package/test/fixtures/pele-parity.json +1006 -0
  124. package/test/highlight-launcher.test.js +35 -0
  125. package/test/html-preview.test.js +22 -0
  126. package/test/input.test.js +15 -0
  127. package/test/keymap.test.js +26 -0
  128. package/test/language-icons.test.js +36 -0
  129. package/test/launcher.test.js +51 -0
  130. package/test/manual-archive-here-ui.mjs +47 -0
  131. package/test/manual-code-scroll.mjs +28 -0
  132. package/test/manual-column-scroll.mjs +24 -0
  133. package/test/manual-compare-ui.mjs +20 -0
  134. package/test/manual-find-status.mjs +37 -0
  135. package/test/manual-folder-focus.mjs +63 -0
  136. package/test/manual-html-security.mjs +23 -0
  137. package/test/manual-html-ui.mjs +30 -0
  138. package/test/manual-syntax-preview.mjs +26 -0
  139. package/test/manual-terminal-lifecycle.mjs +42 -0
  140. package/test/manual-terminal-navigation.mjs +48 -0
  141. package/test/manual-terminal-ui.mjs +47 -0
  142. package/test/manual-trash-ui.mjs +86 -0
  143. package/test/markdown-diagrams.test.js +93 -0
  144. package/test/markdown-html.test.js +105 -0
  145. package/test/mathml.test.js +92 -0
  146. package/test/menu-transfer.test.js +57 -0
  147. package/test/office-preview.test.js +154 -0
  148. package/test/pele-parity.test.js +28 -0
  149. package/test/places.test.js +134 -0
  150. package/test/preview-keys.test.js +60 -0
  151. package/test/preview-language.test.js +22 -0
  152. package/test/status-filename.test.js +20 -0
  153. package/test/transfer-replace-merge.test.js +187 -0
  154. package/test/trash-address.test.js +23 -0
  155. package/test/trash-view.test.js +37 -0
  156. package/test/trashbrowse.test.js +135 -0
  157. package/ui/AboutFacts.qml +78 -0
  158. package/ui/ArchiveCards.qml +95 -0
  159. package/ui/ArchiveCompressDialog.qml +378 -0
  160. package/ui/ArchiveHereConfirm.qml +127 -0
  161. package/ui/ArchivePasswordDialog.qml +257 -0
  162. package/ui/Backend.qml +775 -0
  163. package/ui/BulkOldNames.qml +47 -0
  164. package/ui/BulkRenameDialog.qml +380 -0
  165. package/ui/CardFrame.qml +67 -0
  166. package/ui/CardScroll.qml +79 -0
  167. package/ui/CheckBox.qml +73 -0
  168. package/ui/ChromeBar.qml +360 -0
  169. package/ui/ChromeButton.qml +131 -0
  170. package/ui/ChromeModes.qml +43 -0
  171. package/ui/CodeLines.qml +256 -0
  172. package/ui/CodeRefusal.qml +52 -0
  173. package/ui/CollideConfirm.qml +147 -0
  174. package/ui/CollideHost.qml +167 -0
  175. package/ui/ColumnPane.qml +525 -0
  176. package/ui/ColumnRow.qml +380 -0
  177. package/ui/ColumnsArea.qml +594 -0
  178. package/ui/ColumnsLanding.qml +147 -0
  179. package/ui/CompareView.qml +321 -0
  180. package/ui/ContextMenu.qml +743 -0
  181. package/ui/ConvertDialog.qml +456 -0
  182. package/ui/CountedWorker.qml +7 -0
  183. package/ui/Crumb.qml +64 -0
  184. package/ui/CrumbDrop.qml +25 -0
  185. package/ui/CsvTable.qml +394 -0
  186. package/ui/CursorMark.qml +41 -0
  187. package/ui/DefaultClaim.qml +130 -0
  188. package/ui/DeviceLock.qml +47 -0
  189. package/ui/DeviceMounts.qml +540 -0
  190. package/ui/DialogButton.qml +150 -0
  191. package/ui/DialogField.qml +147 -0
  192. package/ui/DialogHeader.qml +31 -0
  193. package/ui/DialogScrim.qml +20 -0
  194. package/ui/DialogTitle.qml +37 -0
  195. package/ui/Divider.qml +9 -0
  196. package/ui/DropInto.qml +126 -0
  197. package/ui/DropTarget.qml +35 -0
  198. package/ui/DropboxMark.qml +60 -0
  199. package/ui/EmptyState.qml +150 -0
  200. package/ui/EscapeHint.qml +11 -0
  201. package/ui/FactsTable.qml +54 -0
  202. package/ui/FastScrollHandler.qml +476 -0
  203. package/ui/FatNamesConfirm.qml +157 -0
  204. package/ui/Favourites.qml +143 -0
  205. package/ui/FigureService.qml +120 -0
  206. package/ui/FileDrag.qml +267 -0
  207. package/ui/FilterStrip.qml +133 -0
  208. package/ui/FitMetrics.qml +22 -0
  209. package/ui/FlashDriveRows.qml +137 -0
  210. package/ui/FlashHost.qml +72 -0
  211. package/ui/FlashImageRow.qml +104 -0
  212. package/ui/FlashRunner.qml +119 -0
  213. package/ui/FlashStepRow.qml +172 -0
  214. package/ui/FlashStrip.qml +38 -0
  215. package/ui/FlashView.qml +397 -0
  216. package/ui/FleaMark.qml +88 -0
  217. package/ui/FlyoutFade.qml +23 -0
  218. package/ui/FontPane.qml +170 -0
  219. package/ui/Glass.qml +114 -0
  220. package/ui/GlassTagger.qml +59 -0
  221. package/ui/Glyph.qml +64 -0
  222. package/ui/GlyphSolid.qml +22 -0
  223. package/ui/GridArea.qml +664 -0
  224. package/ui/GridTile.qml +325 -0
  225. package/ui/GvfsBridge.qml +164 -0
  226. package/ui/Header.qml +433 -0
  227. package/ui/HoverTimers.qml +39 -0
  228. package/ui/HtmlClip.qml +30 -0
  229. package/ui/HtmlPane.qml +63 -0
  230. package/ui/HyprlandMark.qml +45 -0
  231. package/ui/Ipc.qml +1005 -0
  232. package/ui/IpcControls.qml +7 -0
  233. package/ui/IpcMenuState.qml +48 -0
  234. package/ui/IpcPreviewState.qml +185 -0
  235. package/ui/JumpPath.qml +51 -0
  236. package/ui/KeymapSheet.qml +561 -0
  237. package/ui/KeymapSheetResult.qml +89 -0
  238. package/ui/KindStack.qml +40 -0
  239. package/ui/LangMark.qml +51 -0
  240. package/ui/LangMarkLoader.qml +26 -0
  241. package/ui/List.qml +480 -0
  242. package/ui/LoadingState.qml +54 -0
  243. package/ui/LocalSend.qml +56 -0
  244. package/ui/LocalSendMark.qml +73 -0
  245. package/ui/MarkdownBlockView.qml +311 -0
  246. package/ui/MarkdownBlocks.qml +35 -0
  247. package/ui/MarkdownFigure.qml +254 -0
  248. package/ui/MarkdownImages.qml +72 -0
  249. package/ui/MarkdownList.qml +81 -0
  250. package/ui/MarkdownMathsText.qml +97 -0
  251. package/ui/MarkdownPane.qml +83 -0
  252. package/ui/MarkdownPictures.qml +41 -0
  253. package/ui/MarkdownQuote.qml +52 -0
  254. package/ui/MarkdownRemote.qml +82 -0
  255. package/ui/MarkdownSource.qml +155 -0
  256. package/ui/MarkdownTable.qml +222 -0
  257. package/ui/MarkdownTableScroll.qml +64 -0
  258. package/ui/MarkdownTableWheel.qml +126 -0
  259. package/ui/MarkdownText.qml +87 -0
  260. package/ui/MarkdownWorker.js +132 -0
  261. package/ui/MatchText.qml +99 -0
  262. package/ui/MediaSession.qml +38 -0
  263. package/ui/MediaSound.qml +26 -0
  264. package/ui/MediaStrip.qml +191 -0
  265. package/ui/MediaTrack.qml +36 -0
  266. package/ui/MediaVolume.qml +54 -0
  267. package/ui/MenuActionDialog.qml +396 -0
  268. package/ui/MenuEdgeFade.qml +24 -0
  269. package/ui/MenuHost.qml +227 -0
  270. package/ui/MenuRow.qml +351 -0
  271. package/ui/MountListing.qml +100 -0
  272. package/ui/NetworkDialog.qml +435 -0
  273. package/ui/NetworkForm.qml +426 -0
  274. package/ui/NetworkMounts.qml +913 -0
  275. package/ui/NetworkPlaces.qml +127 -0
  276. package/ui/OpenWithDialog.qml +613 -0
  277. package/ui/Opener.qml +95 -0
  278. package/ui/Pane.qml +1320 -0
  279. package/ui/PaneMenuActions.qml +527 -0
  280. package/ui/PanePath.qml +90 -0
  281. package/ui/PaneRail.qml +268 -0
  282. package/ui/PaneStates.qml +88 -0
  283. package/ui/PaneSwap.qml +339 -0
  284. package/ui/PaneWire.qml +601 -0
  285. package/ui/ParkedWait.qml +9 -0
  286. package/ui/PathEntry.qml +186 -0
  287. package/ui/PathJump.qml +400 -0
  288. package/ui/PdfViewer.qml +297 -0
  289. package/ui/PermissionsDialog.qml +658 -0
  290. package/ui/PermissionsHeadings.qml +31 -0
  291. package/ui/PhoneMounts.qml +67 -0
  292. package/ui/PickerAnswers.qml +75 -0
  293. package/ui/PickerBox.qml +26 -0
  294. package/ui/PickerChrome.qml +295 -0
  295. package/ui/PickerFilter.qml +97 -0
  296. package/ui/PickerGrid.qml +308 -0
  297. package/ui/PickerHeader.qml +28 -0
  298. package/ui/PickerLifecycle.qml +27 -0
  299. package/ui/PickerList.qml +218 -0
  300. package/ui/PickerListing.qml +149 -0
  301. package/ui/PickerPathBar.qml +127 -0
  302. package/ui/PickerPlaces.qml +189 -0
  303. package/ui/PickerRecent.qml +92 -0
  304. package/ui/PickerSave.qml +101 -0
  305. package/ui/PickerSelection.qml +155 -0
  306. package/ui/PickerWindow.qml +846 -0
  307. package/ui/PowerSectorsReader.qml +10 -0
  308. package/ui/PrebuildDriver.qml +146 -0
  309. package/ui/Preview.qml +1005 -0
  310. package/ui/PreviewAnimation.qml +24 -0
  311. package/ui/PreviewArchive.qml +91 -0
  312. package/ui/PreviewColumn.qml +553 -0
  313. package/ui/PreviewEdge.qml +63 -0
  314. package/ui/PreviewFacts.qml +30 -0
  315. package/ui/PreviewFactsLine.qml +34 -0
  316. package/ui/PreviewHtml.qml +233 -0
  317. package/ui/PreviewImage.qml +253 -0
  318. package/ui/PreviewImagePan.qml +13 -0
  319. package/ui/PreviewImageSharp.qml +32 -0
  320. package/ui/PreviewLines.qml +106 -0
  321. package/ui/PreviewMarkdown.qml +706 -0
  322. package/ui/PreviewMedia.qml +250 -0
  323. package/ui/PreviewPdf.qml +482 -0
  324. package/ui/PreviewScroll.qml +201 -0
  325. package/ui/PreviewSwap.qml +335 -0
  326. package/ui/PreviewText.qml +149 -0
  327. package/ui/ProtocolChip.qml +18 -0
  328. package/ui/QuickLookArchive.qml +41 -0
  329. package/ui/QuickLookBar.qml +103 -0
  330. package/ui/QuickLookPrepare.qml +355 -0
  331. package/ui/QuickLookSwap.qml +10 -0
  332. package/ui/QuickLookWarm.qml +65 -0
  333. package/ui/RailDrop.qml +155 -0
  334. package/ui/RailHeading.qml +19 -0
  335. package/ui/RailPlaces.qml +38 -0
  336. package/ui/RailTrashRow.qml +67 -0
  337. package/ui/RenameField.qml +353 -0
  338. package/ui/RendererRetry.qml +11 -0
  339. package/ui/ResizeHandle.qml +52 -0
  340. package/ui/Reveal.qml +54 -0
  341. package/ui/Row.qml +476 -0
  342. package/ui/RowDrag.qml +213 -0
  343. package/ui/RowDropTarget.qml +27 -0
  344. package/ui/RunCard.qml +286 -0
  345. package/ui/Scripts.qml +65 -0
  346. package/ui/SearchStrip.qml +232 -0
  347. package/ui/SelectionBand.qml +140 -0
  348. package/ui/SelectionPreview.qml +370 -0
  349. package/ui/SettingsFavourite.qml +122 -0
  350. package/ui/SettingsGroup.qml +96 -0
  351. package/ui/SettingsHint.qml +12 -0
  352. package/ui/SettingsMetrics.qml +29 -0
  353. package/ui/SettingsPane.qml +178 -0
  354. package/ui/SettingsPanel.qml +547 -0
  355. package/ui/SettingsRail.qml +128 -0
  356. package/ui/SettingsRow.qml +409 -0
  357. package/ui/SettingsRuler.qml +85 -0
  358. package/ui/SettingsSegment.qml +85 -0
  359. package/ui/ShareBrowser.qml +113 -0
  360. package/ui/ShareLink.qml +67 -0
  361. package/ui/ShelfPins.qml +101 -0
  362. package/ui/Sidebar.qml +728 -0
  363. package/ui/SidebarRow.qml +358 -0
  364. package/ui/Spinner.qml +60 -0
  365. package/ui/StableModel.qml +89 -0
  366. package/ui/StateMessage.qml +84 -0
  367. package/ui/StatusBar.qml +512 -0
  368. package/ui/StatusFileName.qml +27 -0
  369. package/ui/TabBar.qml +673 -0
  370. package/ui/TabDragGeometry.qml +60 -0
  371. package/ui/TagMenuMark.qml +52 -0
  372. package/ui/TagRailSection.qml +53 -0
  373. package/ui/TagSlot.qml +40 -0
  374. package/ui/TagState.qml +150 -0
  375. package/ui/TagSwatch.qml +28 -0
  376. package/ui/Taildrop.qml +86 -0
  377. package/ui/TailscaleMark.qml +50 -0
  378. package/ui/TerminalService.qml +69 -0
  379. package/ui/TerminalTab.qml +48 -0
  380. package/ui/TerminalTabs.qml +27 -0
  381. package/ui/Theme.qml +460 -0
  382. package/ui/ThemeColors.qml +43 -0
  383. package/ui/TransferCard.qml +239 -0
  384. package/ui/TrashConfirm.qml +129 -0
  385. package/ui/TrashDropHandler.qml +11 -0
  386. package/ui/TrashHost.qml +202 -0
  387. package/ui/TrashMonitor.qml +30 -0
  388. package/ui/TrashToolbar.qml +19 -0
  389. package/ui/TrashView.qml +492 -0
  390. package/ui/UnlockDialog.qml +450 -0
  391. package/ui/UnlockHost.qml +206 -0
  392. package/ui/UpdateCheck.qml +97 -0
  393. package/ui/UserDirs.qml +25 -0
  394. package/ui/ViewState.qml +565 -0
  395. package/ui/ViewportScrollBar.qml +195 -0
  396. package/ui/ViewportScrollBars.qml +25 -0
  397. package/ui/WebPreview.qml +33 -0
  398. package/ui/WebPreviewView.qml +26 -0
  399. package/ui/WindowBody.qml +829 -0
  400. package/ui/WindowDrag.qml +35 -0
  401. package/ui/boot/Commons/AudioNodes.qml +50 -0
  402. package/ui/boot/Commons/AudioNodesModel.js +96 -0
  403. package/ui/boot/Commons/Border.qml +243 -0
  404. package/ui/boot/Commons/BorderGeometry.js +373 -0
  405. package/ui/boot/Commons/Color.qml +258 -0
  406. package/ui/boot/Commons/I18n.qml +118 -0
  407. package/ui/boot/Commons/InputDevices.qml +112 -0
  408. package/ui/boot/Commons/InputMethodState.qml +38 -0
  409. package/ui/boot/Commons/IpcRegistry.qml +77 -0
  410. package/ui/boot/Commons/Numbers.js +19 -0
  411. package/ui/boot/Commons/Plural.js +91 -0
  412. package/ui/boot/Commons/ShellIpc.qml +12 -0
  413. package/ui/boot/Commons/Style.qml +561 -0
  414. package/ui/boot/Commons/Translations.qml +100 -0
  415. package/ui/boot/Commons/UntypedInput.qml +152 -0
  416. package/ui/boot/Commons/Util.qml +188 -0
  417. package/ui/boot/Commons/qmldir +13 -0
  418. package/ui/boot/LICENSE-omarchy +20 -0
  419. package/ui/boot/Ui/BackgroundMedia.qml +49 -0
  420. package/ui/boot/Ui/BarIconButton.qml +106 -0
  421. package/ui/boot/Ui/BarIconContent.qml +38 -0
  422. package/ui/boot/Ui/BarIndicator.qml +53 -0
  423. package/ui/boot/Ui/BarWidget.qml +50 -0
  424. package/ui/boot/Ui/BorderOverlay.qml +54 -0
  425. package/ui/boot/Ui/BorderSurface.qml +40 -0
  426. package/ui/boot/Ui/Button.qml +224 -0
  427. package/ui/boot/Ui/ButtonGroup.qml +131 -0
  428. package/ui/boot/Ui/ConfirmDialog.qml +134 -0
  429. package/ui/boot/Ui/CursorSurface.qml +42 -0
  430. package/ui/boot/Ui/Dropdown.qml +245 -0
  431. package/ui/boot/Ui/FilterInput.qml +26 -0
  432. package/ui/boot/Ui/IconContentBounds.qml +141 -0
  433. package/ui/boot/Ui/KeyboardPanel.qml +453 -0
  434. package/ui/boot/Ui/MultiSelect.qml +624 -0
  435. package/ui/boot/Ui/NumberField.qml +86 -0
  436. package/ui/boot/Ui/OpticalGlyph.qml +68 -0
  437. package/ui/boot/Ui/OverlayWindow.qml +102 -0
  438. package/ui/boot/Ui/Panel.qml +60 -0
  439. package/ui/boot/Ui/PanelActionButton.qml +105 -0
  440. package/ui/boot/Ui/PanelController.qml +16 -0
  441. package/ui/boot/Ui/PanelHero.qml +112 -0
  442. package/ui/boot/Ui/PanelKeyCatcher.qml +100 -0
  443. package/ui/boot/Ui/PanelSectionHeader.qml +31 -0
  444. package/ui/boot/Ui/PanelSeparator.qml +19 -0
  445. package/ui/boot/Ui/PanelSlider.qml +156 -0
  446. package/ui/boot/Ui/PanelToolTip.qml +50 -0
  447. package/ui/boot/Ui/PluginBarApi.qml +89 -0
  448. package/ui/boot/Ui/PointerMoveGate.qml +54 -0
  449. package/ui/boot/Ui/PopupCard.qml +181 -0
  450. package/ui/boot/Ui/ScreenMoveRemap.qml +43 -0
  451. package/ui/boot/Ui/SearchableDropdown.qml +354 -0
  452. package/ui/boot/Ui/SizedImage.qml +125 -0
  453. package/ui/boot/Ui/SpeedTestOverlay.qml +412 -0
  454. package/ui/boot/Ui/TextField.qml +58 -0
  455. package/ui/boot/Ui/Toggle.qml +118 -0
  456. package/ui/boot/Ui/ToggleSwitch.qml +115 -0
  457. package/ui/boot/Ui/WidgetButton.qml +172 -0
  458. package/ui/boot/Ui/qmldir +41 -0
  459. package/ui/boot/fleatab.qml +50 -0
  460. package/ui/boot/picker.qml +39 -0
  461. package/ui/boot/shell.qml +131 -0
  462. package/ui/boot/tabtearoff.qml +51 -0
  463. package/ui/js/Anchor.js +379 -0
  464. package/ui/js/AnchorHold.js +162 -0
  465. package/ui/js/Archive.js +157 -0
  466. package/ui/js/ArchiveCard.js +44 -0
  467. package/ui/js/ArchiveOps.js +44 -0
  468. package/ui/js/BackReturn.js +118 -0
  469. package/ui/js/BulkRename.js +100 -0
  470. package/ui/js/Buttons.js +54 -0
  471. package/ui/js/ChromeKeys.js +116 -0
  472. package/ui/js/ClipMarks.js +73 -0
  473. package/ui/js/ClipSelection.js +67 -0
  474. package/ui/js/Clipboard.js +179 -0
  475. package/ui/js/Cloud.js +97 -0
  476. package/ui/js/CodeRuns.js +72 -0
  477. package/ui/js/Collide.js +212 -0
  478. package/ui/js/ColumnFit.js +28 -0
  479. package/ui/js/ColumnMenu.js +111 -0
  480. package/ui/js/Columns.js +298 -0
  481. package/ui/js/ColumnsCarry.js +103 -0
  482. package/ui/js/Compare.js +74 -0
  483. package/ui/js/Contrast.js +157 -0
  484. package/ui/js/ControlReader.js +42 -0
  485. package/ui/js/Convert.js +52 -0
  486. package/ui/js/CopyAs.js +52 -0
  487. package/ui/js/Crumbs.js +178 -0
  488. package/ui/js/Csv.js +231 -0
  489. package/ui/js/Density.js +44 -0
  490. package/ui/js/Devices.js +440 -0
  491. package/ui/js/DirSizes.js +180 -0
  492. package/ui/js/Drag.js +360 -0
  493. package/ui/js/DragOut.js +166 -0
  494. package/ui/js/DropDev.js +52 -0
  495. package/ui/js/Dropbox.js +41 -0
  496. package/ui/js/Eject.js +217 -0
  497. package/ui/js/Errors.js +188 -0
  498. package/ui/js/ExtThumbs.js +115 -0
  499. package/ui/js/Facts.js +402 -0
  500. package/ui/js/FigureDate.js +14 -0
  501. package/ui/js/Filter.js +285 -0
  502. package/ui/js/Find.js +46 -0
  503. package/ui/js/Flash.js +184 -0
  504. package/ui/js/FlashCard.js +79 -0
  505. package/ui/js/FlashEndings.js +125 -0
  506. package/ui/js/FlashPane.js +116 -0
  507. package/ui/js/FleaBin.js +12 -0
  508. package/ui/js/Focus.js +504 -0
  509. package/ui/js/FolderSorts.js +108 -0
  510. package/ui/js/FolderViews.js +44 -0
  511. package/ui/js/Format.js +314 -0
  512. package/ui/js/Fuzzy.js +141 -0
  513. package/ui/js/GlassTag.js +72 -0
  514. package/ui/js/Grid.js +33 -0
  515. package/ui/js/GridGeometry.js +90 -0
  516. package/ui/js/GridNames.js +153 -0
  517. package/ui/js/GvfsBridge.js +200 -0
  518. package/ui/js/HostClipboard.js +29 -0
  519. package/ui/js/Icons.js +218 -0
  520. package/ui/js/Input.js +50 -0
  521. package/ui/js/Jump.js +200 -0
  522. package/ui/js/KeyName.js +64 -0
  523. package/ui/js/Keymap.js +401 -0
  524. package/ui/js/Kinds.js +164 -0
  525. package/ui/js/LICENSES/ISC-lucide.txt +43 -0
  526. package/ui/js/LangMarkPaths.js +47 -0
  527. package/ui/js/LangMarks.js +120 -0
  528. package/ui/js/Lists.js +11 -0
  529. package/ui/js/LocalSend.js +39 -0
  530. package/ui/js/LockedMenu.js +63 -0
  531. package/ui/js/MakeDefault.js +186 -0
  532. package/ui/js/MarkBox.js +7 -0
  533. package/ui/js/Markdown.js +119 -0
  534. package/ui/js/MarkdownLists.js +86 -0
  535. package/ui/js/MarkdownMaths.js +58 -0
  536. package/ui/js/MarkdownPictures.js +32 -0
  537. package/ui/js/MarkdownPrepared.js +139 -0
  538. package/ui/js/MarkdownTableFit.js +34 -0
  539. package/ui/js/Marks.js +148 -0
  540. package/ui/js/Marquee.js +96 -0
  541. package/ui/js/Match.js +93 -0
  542. package/ui/js/Material.js +109 -0
  543. package/ui/js/MdBlocks.js +437 -0
  544. package/ui/js/MdBreak.js +71 -0
  545. package/ui/js/MdChunks.js +70 -0
  546. package/ui/js/MdContainer.js +137 -0
  547. package/ui/js/MdDocument.js +337 -0
  548. package/ui/js/MdEmph.js +97 -0
  549. package/ui/js/MdEntity.js +108 -0
  550. package/ui/js/MdEntityTable.js +223 -0
  551. package/ui/js/MdEscape.js +59 -0
  552. package/ui/js/MdFront.js +37 -0
  553. package/ui/js/MdHold.js +32 -0
  554. package/ui/js/MdHtml.js +307 -0
  555. package/ui/js/MdHtmlBlock.js +290 -0
  556. package/ui/js/MdHtmlHeading.js +53 -0
  557. package/ui/js/MdHtmlImage.js +179 -0
  558. package/ui/js/MdInline.js +154 -0
  559. package/ui/js/MdItems.js +212 -0
  560. package/ui/js/MdLeaf.js +309 -0
  561. package/ui/js/MdLink.js +196 -0
  562. package/ui/js/MdMath.js +67 -0
  563. package/ui/js/MdParagraphs.js +138 -0
  564. package/ui/js/MdRefs.js +232 -0
  565. package/ui/js/MdResolve.js +226 -0
  566. package/ui/js/MdRun.js +300 -0
  567. package/ui/js/MdUrl.js +226 -0
  568. package/ui/js/Menu.js +514 -0
  569. package/ui/js/MenuContext.js +85 -0
  570. package/ui/js/MenuFit.js +13 -0
  571. package/ui/js/MenuRefresh.js +74 -0
  572. package/ui/js/MenuWheel.js +35 -0
  573. package/ui/js/Messages.js +186 -0
  574. package/ui/js/Motion.js +16 -0
  575. package/ui/js/Mounts.js +320 -0
  576. package/ui/js/MouseNav.js +13 -0
  577. package/ui/js/Nav.js +329 -0
  578. package/ui/js/NetFs.js +26 -0
  579. package/ui/js/OpenWith.js +83 -0
  580. package/ui/js/Ops.js +585 -0
  581. package/ui/js/Palette.js +33 -0
  582. package/ui/js/PathBar.js +260 -0
  583. package/ui/js/Permissions.js +179 -0
  584. package/ui/js/Phones.js +112 -0
  585. package/ui/js/Picker.js +353 -0
  586. package/ui/js/PlaceMenu.js +96 -0
  587. package/ui/js/Places.js +265 -0
  588. package/ui/js/PreviewAsk.js +21 -0
  589. package/ui/js/PreviewKeys.js +155 -0
  590. package/ui/js/PreviewSettle.js +29 -0
  591. package/ui/js/PreviewSwap.js +101 -0
  592. package/ui/js/PropertyFacts.js +144 -0
  593. package/ui/js/Protocols.js +296 -0
  594. package/ui/js/QuickLookKinds.js +27 -0
  595. package/ui/js/QuickLookRect.js +24 -0
  596. package/ui/js/RailDrop.js +51 -0
  597. package/ui/js/RailKeys.js +87 -0
  598. package/ui/js/RailMenu.js +133 -0
  599. package/ui/js/Recent.js +135 -0
  600. package/ui/js/RecentMode.js +156 -0
  601. package/ui/js/Reload.js +60 -0
  602. package/ui/js/Renderer.js +9 -0
  603. package/ui/js/RunFile.js +143 -0
  604. package/ui/js/Scripts.js +28 -0
  605. package/ui/js/Scroll.js +304 -0
  606. package/ui/js/ScrollOff.js +69 -0
  607. package/ui/js/Search.js +478 -0
  608. package/ui/js/Selection.js +97 -0
  609. package/ui/js/Settings.js +476 -0
  610. package/ui/js/SettingsAbout.js +97 -0
  611. package/ui/js/SettingsShelf.js +52 -0
  612. package/ui/js/SheetKeys.js +42 -0
  613. package/ui/js/SheetQuery.js +281 -0
  614. package/ui/js/ShelfPile.js +27 -0
  615. package/ui/js/SlowClick.js +53 -0
  616. package/ui/js/SlowOp.js +6 -0
  617. package/ui/js/Sort.js +134 -0
  618. package/ui/js/Startup.js +63 -0
  619. package/ui/js/StateWords.js +17 -0
  620. package/ui/js/Status.js +238 -0
  621. package/ui/js/Swap.js +166 -0
  622. package/ui/js/TabMove.js +39 -0
  623. package/ui/js/Tabs.js +751 -0
  624. package/ui/js/Tags.js +134 -0
  625. package/ui/js/Taildrop.js +128 -0
  626. package/ui/js/Tap.js +180 -0
  627. package/ui/js/TextSize.js +107 -0
  628. package/ui/js/Thumbs.js +158 -0
  629. package/ui/js/Transfer.js +172 -0
  630. package/ui/js/Trash.js +84 -0
  631. package/ui/js/TrashDates.js +47 -0
  632. package/ui/js/TrashDrop.js +64 -0
  633. package/ui/js/UiState.js +438 -0
  634. package/ui/js/Unlock.js +152 -0
  635. package/ui/js/Update.js +130 -0
  636. package/ui/js/UserDirs.js +56 -0
  637. package/ui/qmldir +230 -0
@@ -0,0 +1,138 @@
1
+ .pragma library
2
+
3
+ // MdParagraphs: cut one run's lines into paragraphs; a blank ends the paragraph unless HTML spans it.
4
+ .import "MdHtml.js" as MdHtml
5
+
6
+ // Tags that never pair across a blank line: void elements carry no content, so an unclosed one never joins paragraphs.
7
+ var VOID_TAGS = { area: 1, base: 1, br: 1, col: 1, hr: 1, img: 1, link: 1, meta: 1, source: 1, track: 1, wbr: 1 }
8
+
9
+ // A backtick run closed by a run of the same length is a code span, as CommonMark reads it; an unclosed run stays literal.
10
+ function codeRanges(text) {
11
+ var out = []
12
+ var openByLen = {}
13
+ var openers = []
14
+ var i = text.indexOf("`")
15
+ while (i >= 0) {
16
+ var j = i + 1
17
+ while (text.charAt(j) === "`")
18
+ j++
19
+ var len = j - i
20
+ var open = openByLen[len]
21
+ if (open !== undefined && open !== null) {
22
+ while (out.length > 0 && out[out.length - 1][0] > open)
23
+ out.length -= 1
24
+ out.push([open, j])
25
+ var covered = 0
26
+ do {
27
+ covered = openers.pop()
28
+ openByLen[covered] = null
29
+ } while (covered !== len)
30
+ } else {
31
+ openByLen[len] = i
32
+ openers.push(len)
33
+ }
34
+ i = text.indexOf("`", j)
35
+ }
36
+ return out
37
+ }
38
+
39
+ // A backslash escapes the punctuation after it, so "\<" opens no tag; an even run escapes only itself.
40
+ function isEscaped(text, tag) {
41
+ var back = 0
42
+ for (var b = tag - 1; b >= 0 && text.charAt(b) === "\\"; b--)
43
+ back++
44
+ return back % 2 === 1
45
+ }
46
+
47
+ // Sample input: ["a", "", "b"] cuts after the blank; ["<div>", "", "x"] never cuts inside the open tag.
48
+ // One forward pass, so hostile input stays linear: tag depth and comments ride along, and a later paragraph never rescans an earlier one.
49
+ function cutAfter(lines) {
50
+ var cut = []
51
+ for (var i = 0; i < lines.length; i++)
52
+ cut.push(false)
53
+ var laterText = []
54
+ var seen = false
55
+ for (var w = lines.length - 1; w >= 0; w--) {
56
+ laterText[w] = seen
57
+ if (lines[w].trim().length > 0)
58
+ seen = true
59
+ }
60
+ var depth = 0
61
+ var comment = false
62
+ // An unterminated tag may complete on a later line; past readTag's own cap it never classifies, so it is dropped.
63
+ var carry = ""
64
+ var hasText = false
65
+ for (var l = 0; l < lines.length; l++) {
66
+ var line = lines[l]
67
+ if (line.trim().length === 0) {
68
+ if (hasText && laterText[l] && depth === 0 && !comment) {
69
+ cut[l] = true
70
+ hasText = false
71
+ depth = 0
72
+ comment = false
73
+ carry = ""
74
+ }
75
+ continue
76
+ }
77
+ hasText = true
78
+ // A tag may wrap at whitespace, so the carried fragment rejoins with the newline it was split on.
79
+ var text = carry === "" ? line : carry + "\n" + line
80
+ carry = ""
81
+ // Tags inside a closed code span are literal text, the same rule the inline parser pairs by.
82
+ var code = codeRanges(text)
83
+ var span = 0
84
+ var at = 0
85
+ // A ">" search that reaches the end proves no later tag on this text can close, so each pays once.
86
+ var noClose = -1
87
+ while (at < text.length) {
88
+ if (comment) {
89
+ var end = text.indexOf("-->", at)
90
+ if (end < 0)
91
+ break
92
+ comment = false
93
+ at = end + 3
94
+ continue
95
+ }
96
+ var tag = text.indexOf("<", at)
97
+ if (tag < 0)
98
+ break
99
+ while (span < code.length && code[span][1] <= tag)
100
+ span += 1
101
+ if (span < code.length && code[span][0] <= tag && tag < code[span][1]) {
102
+ at = code[span][1]
103
+ continue
104
+ }
105
+ if (isEscaped(text, tag)) {
106
+ at = tag + 1
107
+ continue
108
+ }
109
+ if (text.slice(tag, tag + 4) === "<!--") {
110
+ comment = true
111
+ at = tag + 4
112
+ continue
113
+ }
114
+ var found = null
115
+ if (noClose < 0 || tag <= noClose)
116
+ found = MdHtml.readTag(text, tag, null)
117
+ if (found === null) {
118
+ if (noClose < 0 && text.indexOf(">", tag + 1) < 0)
119
+ noClose = tag
120
+ at = tag + 1
121
+ continue
122
+ }
123
+ var head = MdHtml.tagHead(found.tag)
124
+ if (head.name !== "" && !VOID_TAGS.hasOwnProperty(head.name)) {
125
+ if (head.closing) {
126
+ if (depth > 0)
127
+ depth--
128
+ } else if (!head.selfClose)
129
+ depth++
130
+ }
131
+ at = found.end
132
+ }
133
+ var lastLt = text.lastIndexOf("<")
134
+ if (lastLt > text.lastIndexOf(">") && text.length - lastLt <= MdHtml.MAX_TAG_LENGTH)
135
+ carry = text.slice(lastLt)
136
+ }
137
+ return cut
138
+ }
@@ -0,0 +1,232 @@
1
+ .pragma library
2
+
3
+ // Parse one definition's text; MdBlocks alone decides where definitions are allowed.
4
+ .import "MdLink.js" as Link
5
+ .import "MdHtml.js" as MdHtml
6
+ .import "MdContainer.js" as Container
7
+
8
+ var hasOwn = Object.prototype.hasOwnProperty
9
+
10
+ // Sample: [pic]: image.png "Title"; an empty destination can continue on the next container line.
11
+ function readDefinition(line) {
12
+ var indent = 0
13
+ while (indent < MAX_INDENT && line.charAt(indent) === " ")
14
+ indent++
15
+ var found = Link.readLabelRef(line, indent)
16
+ if (found === null || found.label.trim().length === 0 || found.label.charAt(0) === "^" || line.charAt(found.end) !== ":")
17
+ return null
18
+ var rest = line.slice(found.end + 1)
19
+ if (rest.trim().length === 0)
20
+ return { key: Link.normalizeLabel(found.label), target: "", titled: false }
21
+ var body = readBodyAt(rest, 0)
22
+ if (body === null)
23
+ return null
24
+ return { key: Link.normalizeLabel(found.label), target: body.target, titled: body.titled }
25
+ }
26
+
27
+ // Sample: <my pic.png> "Title" or pic.png; one destination grammar for top level and containers.
28
+ function readDefinitionParts(text) {
29
+ var body = readBodyAt(text, 0)
30
+ if (body === null)
31
+ return { target: "", titled: false }
32
+ return { target: body.target, titled: body.titled }
33
+ }
34
+
35
+ function readDefinitionTarget(text) {
36
+ return readDefinitionParts(text).target
37
+ }
38
+
39
+ var MAX_INDENT = 3
40
+ var TITLE_CLOSER = { '"': '"', "'": "'", "(": ")" }
41
+
42
+ // Sample input: "\n x" read from 0 answers { at: 4, newline: true }; spaces, tabs and at most one line ending are skipped.
43
+ function skipGap(text, from) {
44
+ var at = from
45
+ var newline = false
46
+ while (at < text.length && (text.charAt(at) === " " || text.charAt(at) === "\t" || (!newline && text.charAt(at) === "\n"))) {
47
+ newline = newline || text.charAt(at) === "\n"
48
+ at++
49
+ }
50
+ return { at: at, newline: newline }
51
+ }
52
+
53
+ // Sample input: '<a b> "t"' read from 0 answers { target: "a b", end: 5 }; "/u x" answers { target: "/u", end: 2 }; "<a" answers null.
54
+ function readDestinationAt(text, from) {
55
+ var at = from
56
+ if (text.charAt(at) === "<") {
57
+ at = Link.angleClose(text, from + 1, text.length, true)
58
+ return at >= 0 ? { target: text.slice(from + 1, at), end: at + 1 } : null
59
+ }
60
+ var depth = 0
61
+ while (at < text.length && !/[\s\x00-\x1f]/.test(text.charAt(at))) {
62
+ var c = text.charAt(at)
63
+ depth += c === "(" ? 1 : c === ")" ? -1 : 0
64
+ at += c === "\\" && at + 1 < text.length && !/\s/.test(text.charAt(at + 1)) ? 2 : 1
65
+ }
66
+ return at > from && depth === 0 ? { target: text.slice(from, at), end: at } : null
67
+ }
68
+
69
+ // Sample input: `"a\nb" x` read from 0 answers 6, the index after the closing quote; a title needs its closer, and "(" titles hold no "(".
70
+ function readTitleEnd(text, from) {
71
+ var opener = text.charAt(from)
72
+ var closer = TITLE_CLOSER.hasOwnProperty(opener) ? TITLE_CLOSER[opener] : ""
73
+ for (var at = from + 1; closer !== "" && at < text.length; at++) {
74
+ var c = text.charAt(at)
75
+ if (c === closer)
76
+ return at + 1
77
+ if (opener === "(" && c === "(")
78
+ return -1
79
+ at += c === "\\" && text.charAt(at + 1) !== "\n" ? 1 : 0
80
+ }
81
+ return -1
82
+ }
83
+
84
+ // Sample input: "a \nb" at 1 answers true, only blanks remain on the line; "a b" at 1 answers false.
85
+ function endsLine(text, from) {
86
+ var at = from
87
+ while (text.charAt(at) === " " || text.charAt(at) === "\t")
88
+ at++
89
+ return at >= text.length || text.charAt(at) === "\n"
90
+ }
91
+
92
+ // Sample input: '<a b> "t"' read from 0 answers { target: "a b", titled: true, end: 9 }; "/u x" answers null, junk follows the destination.
93
+ function readBodyAt(text, from) {
94
+ var lead = skipGap(text, from)
95
+ var dest = readDestinationAt(text, lead.at)
96
+ if (dest === null)
97
+ return null
98
+ var gap = skipGap(text, dest.end)
99
+ var close = gap.at > dest.end ? readTitleEnd(text, gap.at) : -1
100
+ var titled = close >= 0 && endsLine(text, close)
101
+ if (!titled && !endsLine(text, dest.end))
102
+ return null
103
+ return { target: dest.target, titled: titled, end: titled ? close : dest.end }
104
+ }
105
+
106
+ // Sample input: lines "[Foo\n bar]: /url\n'a\nb'" answer { key: "foo bar", titled: true, end: 3 }; "[a]: /u x" answers null.
107
+ function definitionAt(lines, from) {
108
+ var stop = from + 1
109
+ while (stop < lines.length && lines[stop].trim().length > 0 && !Container.startsBlock(lines[stop]))
110
+ stop++
111
+ var text = lines.slice(from, stop).join("\n")
112
+ var indent = 0
113
+ while (indent < MAX_INDENT && text.charAt(indent) === " ")
114
+ indent++
115
+ var label = Link.readLabelRef(text, indent)
116
+ if (label === null || label.label.trim().length === 0 || label.label.charAt(0) === "^" || text.charAt(label.end) !== ":")
117
+ return null
118
+ var body = readBodyAt(text, label.end + 1)
119
+ if (body === null)
120
+ return null
121
+ // A title that does not close its own line is dropped when it sits on the next line, and spoils the definition when it follows the destination.
122
+ return { key: Link.normalizeLabel(label.label), target: body.target, titled: body.titled,
123
+ end: from + text.slice(0, body.end).split("\n").length - 1 }
124
+ }
125
+
126
+ // Sample input: ' > "t"' under frames list (contentCol 4) then quote answers '"t"'; '"t"' with no indent stays a lazy continuation; a line that opens its own quote answers null.
127
+ function replayed(line, frames) {
128
+ var view = { at: 0, padding: 0, column: 0 }
129
+ for (var f = 0; f < frames.length; f++) {
130
+ var quote = Container.quoteAt(line, view)
131
+ if (frames[f].type === "quote" && quote >= 0)
132
+ Container.takeQuote(line, view, quote)
133
+ else if (frames[f].type === "list" && Container.indentationAt(line, view, frames[f].contentCol).width >= frames[f].contentCol)
134
+ Container.takeIndent(line, view, frames[f].contentCol)
135
+ else
136
+ break
137
+ }
138
+ return Container.quoteAt(line, view) >= 0 ? null : Container.textAt(line, view)
139
+ }
140
+
141
+ // Sample input: lines "'a" over "b'" at 0 with no frames answer 1, the line that closes the title; "'open" with no closer, or junk after it, answers -1.
142
+ function titleEnd(lines, at, frames) {
143
+ var first = at < lines.length ? replayed(lines[at], frames) : null
144
+ var open = first === null ? "" : first.trim().charAt(0)
145
+ if (open !== "\"" && open !== "'" && open !== "(")
146
+ return -1
147
+ var close = open === "(" ? ")" : open
148
+ for (var k = at; k < lines.length; k++) {
149
+ var text = replayed(lines[k], frames)
150
+ if (text === null || text.trim().length === 0)
151
+ return -1
152
+ for (var c = k === at ? text.indexOf(open) + 1 : 0; c < text.length; c++) {
153
+ if (text.charAt(c) === "\\")
154
+ c++
155
+ else if (text.charAt(c) === close)
156
+ return text.slice(c + 1).trim().length === 0 ? k : -1
157
+ }
158
+ }
159
+ return -1
160
+ }
161
+
162
+ // The first definition of a label wins.
163
+ function storeDefinition(defs, key, target) {
164
+ if (!hasOwn.call(defs, key))
165
+ defs[key] = target
166
+ }
167
+
168
+ // A title on the lines after a finished definition belongs to it: its lines hide with the definition; allowed says it has none yet, frames are its containers.
169
+ function hideTitle(lines, from, state, allowed, frames) {
170
+ var end = allowed ? titleEnd(lines, from, frames) : -1
171
+ if (end < 0)
172
+ return
173
+ for (var k = from; k <= end; k++)
174
+ state.hidden[k] = true
175
+ state.dropped.push([from, end])
176
+ }
177
+
178
+ // Sample: [^id]: note body; the block reader supplies any indented continuation lines.
179
+ function readFootnoteDefinition(line) {
180
+ var match = /^ {0,3}\[\^([^\]\n]+)\]:\s*(.*)$/.exec(line)
181
+ return match === null ? null : { id: match[1], text: match[2] }
182
+ }
183
+
184
+ // Escape a definition-shaped leaf refused by the block reader before handing it to md4c.
185
+ function killDefinition(line) {
186
+ if (!/^ {0,3}\[(?:\\.|[^\[\]\\\n])+\]:/.test(line))
187
+ return line
188
+ var at = line.indexOf("[")
189
+ return line.slice(0, at) + "\\[" + line.slice(at + 1)
190
+ }
191
+
192
+ // Sample input: "[^note]" at its "[" yields id "note" and the index after "]".
193
+ function readFootnoteRef(text, i) {
194
+ var j = i + 2
195
+ while (j < text.length && text.charAt(j) !== "]" && text.charAt(j) !== "\n")
196
+ j++
197
+ if (j >= text.length || text.charAt(j) !== "]" || j === i + 2)
198
+ return null
199
+ return { id: text.slice(i + 2, j), end: j + 1 }
200
+ }
201
+
202
+
203
+ // Skip DROP_CONTENT bodies with same-name nesting; share the dead-tag flag to keep unmatched runs linear.
204
+ function skipDropContent(body, i, name, dead) {
205
+ var depth = 1
206
+ while (i < body.length && depth > 0) {
207
+ var o = body.indexOf("<", i)
208
+ if (o < 0)
209
+ return body.length
210
+ var inner = MdHtml.readTag(body, o, dead)
211
+ if (inner === null) {
212
+ i = o + 1
213
+ continue
214
+ }
215
+ var head = MdHtml.tagHead(inner.tag)
216
+ if (head.name === name) {
217
+ if (head.closing)
218
+ depth--
219
+ else if (!head.selfClose)
220
+ depth++
221
+ }
222
+ i = inner.end
223
+ }
224
+ return i
225
+ }
226
+
227
+ // Sample input: lines 2 to 3 hide both and record the span as dropped, so no line of the definition reaches the renderer.
228
+ function hideDefinition(state, from, to) {
229
+ for (var i = from; i <= to; i++)
230
+ state.hidden[i] = true
231
+ state.dropped.push([from, to])
232
+ }
@@ -0,0 +1,226 @@
1
+ .pragma library
2
+
3
+ // MdResolve: resolve bracket pairs into held local images, escaped placeholders, safe links or literal text.
4
+ .import "MdUrl.js" as MdUrl
5
+ .import "MdHtml.js" as MdHtml
6
+ .import "MdInline.js" as Md
7
+ .import "MdLink.js" as Link
8
+ .import "MdRefs.js" as Refs
9
+ .import "MdEntity.js" as Ent
10
+
11
+ var MAX_STYLED_SPANS = 1024
12
+ var hasOwn = Object.prototype.hasOwnProperty
13
+ // The bytes a markdown destination cannot hold as written, as percent escapes.
14
+ var PERCENT_ESCAPE = { " ": "%20", "(": "%28", ")": "%29" }
15
+ // The characters the renderer decodes in a destination, written so it reads back the text it was given.
16
+ var DESTINATION_ESCAPE = { "\\": "\\\\", "&": "&amp;", "<": "&lt;", ">": "&gt;" }
17
+
18
+ // A destination as the markdown the renderer reads back to exactly this text: it decodes references and escapes once more.
19
+ function markdownDestination(target) {
20
+ return String(target).replace(/[ ()\\&<>]/g, function (c) {
21
+ return PERCENT_ESCAPE.hasOwnProperty(c) ? PERCENT_ESCAPE[c] : DESTINATION_ESCAPE[c]
22
+ })
23
+ }
24
+
25
+ // Sample input: "https://a.example" and "mailto:a@b.example" are external; "./x.md", "#top" and "ftp://h/f" are not.
26
+ function isExternalLink(url) {
27
+ var seen = MdHtml.normalizedTarget(MdUrl.canonicalUrl(url))
28
+ return /^[a-zA-Z][a-zA-Z0-9+.-]*:/.test(seen) && MdUrl.targetAllowed(url)
29
+ }
30
+
31
+ // Sample input: "(/u)" after a label answers { url: "/u", end: 4 }; "[ref]" and "[]" read a definition, as does a bare label (raw).
32
+ function readDestination(body, j, raw, defs) {
33
+ var found = readRawDestination(body, j, raw, defs)
34
+ return found === null ? null : { url: Ent.decodeReferences(found.url), end: found.end }
35
+ }
36
+
37
+ function readRawDestination(body, j, raw, defs) {
38
+ var inline = body.charAt(j) === "(" ? Link.readInlineTarget(body, j) : null
39
+ if (inline !== null)
40
+ return { url: inline.url, end: inline.end }
41
+ if (body.charAt(j) === "[") {
42
+ var ref = Link.readLabelRef(body, j)
43
+ var label = ref === null ? "" : ref.label.length > 0 ? ref.label : raw
44
+ if (label.length > 0 && hasOwn.call(defs, Link.normalizeLabel(label)))
45
+ return { url: defs[Link.normalizeLabel(label)], end: ref.end }
46
+ return null
47
+ }
48
+ if (raw.length > 0 && hasOwn.call(defs, Link.normalizeLabel(raw)))
49
+ return { url: defs[Link.normalizeLabel(raw)], end: j }
50
+ return null
51
+ }
52
+
53
+ // An alt text is the label's text alone: tags go, numeric entities turn back into characters.
54
+ function plainText(html) {
55
+ return String(html).replace(/<[^>]*>/g, "").replace(/&#(\d+);/g, function (m, n) {
56
+ return String.fromCharCode(parseInt(n, 10))
57
+ })
58
+ }
59
+
60
+ // Resolve one bracket pair into text, a -1-i token reference or null; raw is its label, label() its resolved markup and target its destination.
61
+ function resolvePair(raw, target, bang, dir, ink, tokens, label) {
62
+ // A backslash before punctuation is consumed by the backslash: the alt and the label display the punctuation, never the escape.
63
+ var clean = String(raw).replace(/\\([!"#$%&'()*+,\-./:;<=>?@[\\\]^_`{|}~])/g, "$1")
64
+ if (bang) {
65
+ clean = label === undefined ? clean : plainText(label())
66
+ var cls = MdUrl.classifyImage(target, dir)
67
+ if (cls.kind === "remote")
68
+ return "\n\n" + MdUrl.placeholder(Md.escapeHtmlText(cls.host)) + "\n\n"
69
+ if (cls.kind === "local") {
70
+ var alt = Md.escapeHtmlText(clean)
71
+ tokens.push("![" + alt + "](" + markdownDestination(cls.url) + ")")
72
+ return -1 - (tokens.length - 1)
73
+ }
74
+ return Md.escapeHtmlText(clean)
75
+ }
76
+ target = MdHtml.normalizedTarget(target)
77
+ // Only http, https, mailto, relative and #anchor targets link, checked through every decoding, so no javascript: href is emitted.
78
+ if (!MdUrl.targetAllowed(target))
79
+ return Md.escapeHtmlText("[" + clean + "](" + target + ")")
80
+ var shown = label === undefined ? clean : label()
81
+ // Inside an html link the renderer would draw a linked image's alt text beside it, so its own link syntax carries that label.
82
+ var html = label !== undefined && shown.indexOf("![") >= 0
83
+ ? "[" + shown + "](" + markdownDestination(target) + ")"
84
+ : Md.linkHtml(shown, target, ink, label !== undefined)
85
+ if (html === null)
86
+ return Md.escapeHtmlText("[" + clean + "](" + target + ")")
87
+ tokens.push(html)
88
+ return -1 - (tokens.length - 1)
89
+ }
90
+
91
+ // Push sanitizer output, splitting any held-span markers it carries into token references. Tags are short, so this walk is bounded by the tag length.
92
+ function pushEmitted(out, tokens, emit) {
93
+ var open = MdHtml.openToken()
94
+ if (emit.indexOf(open) < 0) {
95
+ out.push(emit)
96
+ return
97
+ }
98
+ var close = MdHtml.closeToken()
99
+ var plain = ""
100
+ var i = 0
101
+ while (i < emit.length) {
102
+ if (emit.charAt(i) !== open) {
103
+ plain += emit.charAt(i)
104
+ i++
105
+ continue
106
+ }
107
+ var j = i + 1
108
+ var num = ""
109
+ while (j < emit.length && emit.charAt(j) !== close) {
110
+ num += emit.charAt(j)
111
+ j++
112
+ }
113
+ var idx = parseInt(num, 10)
114
+ if (j < emit.length && idx >= 0 && idx < tokens.length) {
115
+ if (plain !== "") {
116
+ out.push(plain)
117
+ plain = ""
118
+ }
119
+ out.push(-1 - idx)
120
+ i = j + 1
121
+ } else {
122
+ plain += emit.charAt(i)
123
+ i++
124
+ }
125
+ }
126
+ if (plain !== "")
127
+ out.push(plain)
128
+ }
129
+
130
+ // One styled span, cached by content: dense documents repeat the same spans thousands of times, and each rebuild costs a regex the cache pays once.
131
+ function styledSpan(kind, content, chrome, cache) {
132
+ var key = kind + "\n" + content
133
+ if (cache.hasOwnProperty(key))
134
+ return cache[key]
135
+ var held = Md.codeHtml(content, chrome, kind)
136
+ var count = 0
137
+ for (var existing in cache)
138
+ count++
139
+ if (count < MAX_STYLED_SPANS)
140
+ cache[key] = held
141
+ return held
142
+ }
143
+
144
+ // Sample input: '<img src="pic.png">' at its "<" resolves a tag; '<https://a.example>' resolves an autolink.
145
+ function parseAngle(body, i, dir, ink, styleLinks, dead, tokens, out, chrome, inked) {
146
+ var auto = Link.readAutolink(body, i)
147
+ if (auto !== null && !MdUrl.targetAllowed(auto.href))
148
+ auto = null
149
+ if (auto !== null) {
150
+ if (!styleLinks) {
151
+ out.push(Md.escapeHtmlText(auto.url))
152
+ i = auto.end
153
+ return i
154
+ }
155
+ var ahtml = Md.linkHtml(auto.url, auto.href, ink)
156
+ if (ahtml === null)
157
+ out.push(Md.escapeHtmlText(auto.url))
158
+ else {
159
+ tokens.push(ahtml)
160
+ out.push(-1 - (tokens.length - 1))
161
+ }
162
+ i = auto.end
163
+ return i
164
+ }
165
+ if (body.slice(i, i + 4) === "<!--") {
166
+ if (dead.commentDead) {
167
+ out.push("&#60;")
168
+ i++
169
+ return i
170
+ }
171
+ var ce = body.indexOf("-->", i + 4)
172
+ if (ce < 0) {
173
+ dead.commentDead = true
174
+ out.push("&#60;")
175
+ i++
176
+ } else {
177
+ i = ce + 3
178
+ }
179
+ return i
180
+ }
181
+ if (body.charAt(i + 1) === "!" || body.charAt(i + 1) === "?") {
182
+ var decl = MdHtml.readTag(body, i, dead)
183
+ if (decl === null) {
184
+ out.push("&#60;")
185
+ i++
186
+ } else {
187
+ i = decl.end
188
+ }
189
+ return i
190
+ }
191
+ var found = MdHtml.readTag(body, i, dead)
192
+ if (found === null || MdHtml.tagHead(found.tag).name.length === 0) {
193
+ out.push("&#60;")
194
+ i++
195
+ return i
196
+ }
197
+ var san = MdHtml.sanitizeTag(found.tag, dir, tokens, chrome, ink, inked)
198
+ pushEmitted(out, tokens, san.emit)
199
+ i = found.end
200
+ if (san.drop !== null)
201
+ i = Refs.skipDropContent(body, i, san.drop, dead)
202
+ return i
203
+ }
204
+
205
+ // Sample input: "see https://a.example/x now" at the "h" answers the index after the address; no bare address answers -1.
206
+ function bareAt(body, i, ink, styleLinks, tokens, out) {
207
+ var bare = Link.readBarelink(body, i)
208
+ if (bare === null || !MdUrl.targetAllowed(bare.href))
209
+ return -1
210
+ var url = bare.url
211
+ var href = bare.href
212
+ // GFM leaves a trailing entity reference such as "&hl;" out of the address.
213
+ var entity = body.charAt(bare.end) === ";" ? /&[A-Za-z0-9]+$/.exec(url) : null
214
+ if (entity !== null) {
215
+ url = url.slice(0, entity.index)
216
+ href = href.slice(0, href.length - (bare.url.length - url.length))
217
+ }
218
+ var html = styleLinks ? Md.linkHtml(url, href, ink) : null
219
+ if (html === null) {
220
+ out.push(Md.escapeHtmlText(url))
221
+ } else {
222
+ tokens.push(html)
223
+ out.push(-1 - (tokens.length - 1))
224
+ }
225
+ return bare.end - (bare.url.length - url.length)
226
+ }