adding-bookmarks

created pr with 77.1 on 2025-08-25T23:01:54Z · by bcbb7755
pr_reviewed on 2025-08-25T23:06:33Z · by bcbb7755
cmds
checkout latest patchset:
ssh pr.pico.sh print 77 | git am -3
checkout any patchset in a patch request:
ssh pr.pico.sh print 77.[rev] | git am -3
add changes to patch request:
git format-patch main --stdout | ssh pr.pico.sh pr add 77
+2 -0 commands.ts #
......@@ -1,5 +1,6 @@
11 import { Command } from "@cliffy/command";
22
3+import bookmarkPlugin from "./plugins/bookmarks.ts";
34 import corePlugin from "./plugins/core.ts";
45 import folderPlugin from "./plugins/folder.ts";
56 import gitPlugin from "./plugins/git.ts";
......@@ -9,6 +10,7 @@ import searchPlugin from "./plugins/search.ts";
910 import todoPlugin from "./plugins/todo.ts";
1011
1112 const plugins = [
13+ bookmarkPlugin,
1214 corePlugin,
1315 folderPlugin,
1416 gitPlugin,
+4 -1 deno.jsonc #
......@@ -1,9 +1,11 @@
11 {
22 "imports": {
3+ "@b-fuze/deno-dom": "jsr:@b-fuze/deno-dom@^0.1.56",
34 "@cliffy/ansi": "jsr:@cliffy/ansi@^1.0.0-rc.8",
45 "@cliffy/command": "jsr:@cliffy/command@^1.0.0-rc.8",
56 "@david/dax": "jsr:@david/dax@^0.43.2",
67 "@littletof/charmd": "jsr:@littletof/charmd@^0.1.2",
8+ "@mozilla/readability": "npm:@mozilla/readability@^0.6.0",
79 "@std/assert": "jsr:@std/assert@^1.0.14",
810 "@std/collections": "jsr:@std/collections@^1.1.3",
911 "@std/datetime": "jsr:@std/datetime@^0.225.5",
......@@ -14,7 +16,8 @@
1416 "@std/path": "jsr:@std/path@^1.1.2",
1517 "@std/text": "jsr:@std/text@^1.0.16",
1618 "@std/ulid": "jsr:@std/ulid@^1.0.0",
17- "marked": "npm:marked@^16.2.0"
19+ "marked": "npm:marked@^16.2.0",
20+ "turndown": "npm:turndown@^7.2.1"
1821 },
1922 "tasks": {
2023 "install": "deno install -g -f -n hsh -c deno.jsonc -A main.ts"
+38 -3 deno.lock #
......@@ -1,6 +1,7 @@
11 {
22 "version": "5",
33 "specifiers": {
4+ "jsr:@b-fuze/deno-dom@~0.1.56": "0.1.56",
45 "jsr:@cliffy/ansi@^1.0.0-rc.8": "1.0.0-rc.8",
56 "jsr:@cliffy/command@^1.0.0-rc.8": "1.0.0-rc.8",
67 "jsr:@cliffy/flags@1.0.0-rc.8": "1.0.0-rc.8",
......@@ -10,11 +11,13 @@
1011 "jsr:@david/dax@~0.43.2": "0.43.2",
1112 "jsr:@david/path@0.2": "0.2.0",
1213 "jsr:@david/which@~0.4.1": "0.4.1",
14+ "jsr:@denosaurs/plug@1.1.0": "1.1.0",
1315 "jsr:@littletof/charmd@~0.1.2": "0.1.2",
1416 "jsr:@std/assert@^1.0.14": "1.0.14",
1517 "jsr:@std/bytes@^1.0.5": "1.0.6",
1618 "jsr:@std/collections@^1.1.3": "1.1.3",
1719 "jsr:@std/datetime@~0.225.5": "0.225.5",
20+ "jsr:@std/encoding@1": "1.0.10",
1821 "jsr:@std/encoding@~1.0.5": "1.0.10",
1922 "jsr:@std/fmt@0.223.0": "0.223.0",
2023 "jsr:@std/fmt@1": "1.0.8",
......@@ -36,14 +39,22 @@
3639 "jsr:@std/toml@^1.0.3": "1.0.9",
3740 "jsr:@std/ulid@1": "1.0.0",
3841 "jsr:@std/yaml@^1.0.5": "1.0.9",
39- "npm:marked@^16.2.0": "16.2.0"
42+ "npm:@mozilla/readability@0.6": "0.6.0",
43+ "npm:marked@^16.2.0": "16.2.0",
44+ "npm:turndown@^7.2.1": "7.2.1"
4045 },
4146 "jsr": {
47+ "@b-fuze/deno-dom@0.1.56": {
48+ "integrity": "8030e2dc1d8750f1682b53462ab893d9c3470f2287feecbe22f44a88c54ab148",
49+ "dependencies": [
50+ "jsr:@denosaurs/plug"
51+ ]
52+ },
4253 "@cliffy/ansi@1.0.0-rc.8": {
4354 "integrity": "ba37f10ce55bbfbdd8ddd987f91f029b17bce88385b98ba3058870f3b007b80c",
4455 "dependencies": [
4556 "jsr:@cliffy/internal",
46- "jsr:@std/encoding",
57+ "jsr:@std/encoding@~1.0.5",
4758 "jsr:@std/fmt@~1.0.2"
4859 ]
4960 },
......@@ -97,6 +108,15 @@
97108 "@david/which@0.4.1": {
98109 "integrity": "896a682b111f92ab866cc70c5b4afab2f5899d2f9bde31ed00203b9c250f225e"
99110 },
111+ "@denosaurs/plug@1.1.0": {
112+ "integrity": "eb2f0b7546c7bca2000d8b0282c54d50d91cf6d75cb26a80df25a6de8c4bc044",
113+ "dependencies": [
114+ "jsr:@std/encoding@1",
115+ "jsr:@std/fmt@1",
116+ "jsr:@std/fs@1",
117+ "jsr:@std/path@1"
118+ ]
119+ },
100120 "@littletof/charmd@0.1.2": {
101121 "integrity": "1d349b5a4acb3d9fe054e5c856ee8a5c0f18bbdccf1f0d733b6e73d518514928",
102122 "dependencies": [
......@@ -185,13 +205,26 @@
185205 }
186206 },
187207 "npm": {
208+ "@mixmark-io/domino@2.2.0": {
209+ "integrity": "sha512-Y28PR25bHXUg88kCV7nivXrP2Nj2RueZ3/l/jdx6J9f8J4nsEGcgX0Qe6lt7Pa+J79+kPiJU3LguR6O/6zrLOw=="
210+ },
211+ "@mozilla/readability@0.6.0": {
212+ "integrity": "sha512-juG5VWh4qAivzTAeMzvY9xs9HY5rAcr2E4I7tiSSCokRFi7XIZCAu92ZkSTsIj1OPceCifL3cpfteP3pDT9/QQ=="
213+ },
188214 "marked@16.2.0": {
189215 "integrity": "sha512-LbbTuye+0dWRz2TS9KJ7wsnD4KAtpj0MVkWc90XvBa6AslXsT0hTBVH5k32pcSyHH1fst9XEFJunXHktVy0zlg==",
190216 "bin": true
217+ },
218+ "turndown@7.2.1": {
219+ "integrity": "sha512-7YiPJw6rLClQL3oUKN3KgMaXeJJ2lAyZItclgKDurqnH61so4k4IH/qwmMva0zpuJc/FhRExBBnk7EbeFANlgQ==",
220+ "dependencies": [
221+ "@mixmark-io/domino"
222+ ]
191223 }
192224 },
193225 "workspace": {
194226 "dependencies": [
227+ "jsr:@b-fuze/deno-dom@~0.1.56",
195228 "jsr:@cliffy/ansi@^1.0.0-rc.8",
196229 "jsr:@cliffy/command@^1.0.0-rc.8",
197230 "jsr:@david/dax@~0.43.2",
......@@ -206,7 +239,9 @@
206239 "jsr:@std/path@^1.1.2",
207240 "jsr:@std/text@^1.0.16",
208241 "jsr:@std/ulid@1",
209- "npm:marked@^16.2.0"
242+ "npm:@mozilla/readability@0.6",
243+ "npm:marked@^16.2.0",
244+ "npm:turndown@^7.2.1"
210245 ]
211246 }
212247 }
+29 -0 plugins/bookmarks.ts #
......@@ -0,0 +1,29 @@
1+import { Command } from "@cliffy/command";
2+import { Readability } from "@mozilla/readability";
3+import { DOMParser } from "@b-fuze/deno-dom";
4+import TurndownService from "turndown";
5+
6+import { currentNotebook, getNotebooks, iconForEntry } from "../notebooks.ts";
7+import { print } from "../utils.ts";
8+
9+function addCommands(cmd: Command) {
10+ cmd
11+ .command("bookmark", getBookmarkCommands().alias("bm"));
12+}
13+
14+function getBookmarkCommands() {
15+ return new Command()
16+ .command("add", "add a bookmark")
17+ .description("manage bookmarks")
18+ .arguments("<url:string>")
19+ .action(async (_opts, url) => {
20+ const content = await (await fetch(url)).text();
21+ const dom = new DOMParser().parseFromString(content, "text/html");
22+ const readable = new Readability(dom);
23+ const parsed = readable.parse();
24+ if (parsed == null) throw new Error("nope");
25+ const md = new TurndownService().turndown(parsed.content);
26+ });
27+}
28+
29+export default { addCommands };
Back to top