aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--package.json4
-rw-r--r--src/lib/Article.svelte10
-rw-r--r--src/lib/ArticleHeader.svelte1
-rw-r--r--src/lib/components/Navigation.svelte2
-rw-r--r--src/lib/ndk.ts24
-rw-r--r--src/routes/+page.svelte5
-rw-r--r--src/routes/[...eventID]/+page.svelte12
-rw-r--r--src/routes/[id]/+page.svelte10
-rw-r--r--src/routes/[id]/+page.ts12
-rw-r--r--src/routes/d/[tag]/+page.svelte10
-rw-r--r--src/routes/d/[tag]/+page.ts13
11 files changed, 75 insertions, 28 deletions
diff --git a/package.json b/package.json
index ae838af..bec892a 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
- "name": "nostrwiki",
- "version": "0.0.1",
+ "name": "alexandria",
+ "version": "0.0.3",
"private": true,
"type": "module",
"scripts": {
diff --git a/src/lib/Article.svelte b/src/lib/Article.svelte
index 8092a4e..6d1ad8c 100644
--- a/src/lib/Article.svelte
+++ b/src/lib/Article.svelte
@@ -1,17 +1,23 @@
<script lang="ts">
import { ndk } from '$lib/ndk';
- import { idList, isLeftMenuMenuInUse, showLeftMenu } from '$lib/stores';
+ import { idList } from '$lib/stores';
import type { NDKEvent } from '@nostr-dev-kit/ndk';
import { page } from '$app/stores';
import { Button, Heading, Sidebar, SidebarGroup, SidebarItem, SidebarWrapper, Skeleton, TextPlaceholder, Tooltip } from 'flowbite-svelte';
import showdown from 'showdown';
import { onMount } from 'svelte';
import { BookOutline } from 'flowbite-svelte-icons';
+
+ export let event: NDKEvent | null;
$: activeHash = $page.url.hash;
async function getEvents(): Promise<NDKEvent[]> {
- const eventPromises = $idList.map(async (id) => await $ndk.fetchEvent(id));
+ if (event == null) {
+ // TODO: Add error handling.
+ }
+
+ const eventPromises = await $ndk.fetchEvents(event!.filter());
const events = await Promise.all(eventPromises);
return events.filter((event) => event != null);
diff --git a/src/lib/ArticleHeader.svelte b/src/lib/ArticleHeader.svelte
index fd3ab38..d3697b7 100644
--- a/src/lib/ArticleHeader.svelte
+++ b/src/lib/ArticleHeader.svelte
@@ -5,7 +5,6 @@
import { idList } from "$lib/stores";
import { Card, Button, Modal, Tooltip } from "flowbite-svelte";
import { ClipboardCheckOutline, ClipboardCleanOutline, CodeOutline, ShareNodesOutline } from "flowbite-svelte-icons";
- import type { SvelteComponent } from "svelte";
export let event: NDKEvent;
const title: string = JSON.parse(event.content).title;
diff --git a/src/lib/components/Navigation.svelte b/src/lib/components/Navigation.svelte
index d6574a0..380e33c 100644
--- a/src/lib/components/Navigation.svelte
+++ b/src/lib/components/Navigation.svelte
@@ -16,7 +16,7 @@
<NavHamburger class='btn-leather' />
<NavUl class='ul-leather'>
<NavLi href='./about'>About</NavLi>
- <NavLi href='./create'>New Note</NavLi>
+ <NavLi href='./new/edit'>New Note</NavLi>
<NavLi href='./visualize'>Visualize</NavLi>
<NavLi href='./login'>Login</NavLi>
<NavLi>
diff --git a/src/lib/ndk.ts b/src/lib/ndk.ts
index 422cae8..a6c4e5f 100644
--- a/src/lib/ndk.ts
+++ b/src/lib/ndk.ts
@@ -4,13 +4,23 @@ import NDKCacheAdapterDexie from '@nostr-dev-kit/ndk-cache-dexie';
import { writable, type Writable } from 'svelte/store';
import { standardRelays } from './consts';
-const relays = JSON.parse(
- (browser && localStorage.getItem('wikinostr_relays')) || JSON.stringify(standardRelays)
-);
+export function getStoredNdkConfig() {
+ const relays = JSON.parse(
+ (browser && localStorage.getItem('alexandria_relays')) || JSON.stringify(standardRelays)
+ );
+
+ const dexieAdapter = new NDKCacheAdapterDexie({ dbName: 'alexandria-ndk-cache-db' });
-const dexieAdapter = new NDKCacheAdapterDexie({ dbName: 'indextr-ndk-cache-db' });
+ return { relays, dexieAdapter };
+}
-const Ndk: NDK = new NDK({ explicitRelayUrls: relays, cacheAdapter: dexieAdapter });
-Ndk.connect().then(() => console.log('ndk connected'));
+export function getNdkInstance() {
+ const { relays, dexieAdapter } = getStoredNdkConfig();
-export const ndk: Writable<NDK> = writable(Ndk);
+ const ndk = new NDK({ explicitRelayUrls: relays, cacheAdapter: dexieAdapter });
+ ndk.connect().then(() => console.log('ndk connected'));
+
+ return ndk;
+}
+
+export const ndk: Writable<NDK> = writable(getNdkInstance());
diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte
index e8986db..ec7f41a 100644
--- a/src/routes/+page.svelte
+++ b/src/routes/+page.svelte
@@ -1,11 +1,10 @@
<script lang="ts">
import ArticleHeader from "$lib/ArticleHeader.svelte";
import { ndk } from "$lib/ndk";
- import { nip19 } from "nostr-tools";
- import { idList } from "$lib/stores";
const kind = 30040;
const count: number = 10;
+ // TODO: Add more filter parameters to customize the event feed.
async function loadEvents() {
const eventlist = await $ndk.fetchEvents({ kinds: [kind] });
return eventlist;
@@ -17,7 +16,7 @@
{#await eventlist}
<p>Loading...</p>
{:then events}
- {#each Array.from(events) as event, i}
+ {#each Array.from(events) as event}
<ArticleHeader {event} />
{/each}
{/await}
diff --git a/src/routes/[...eventID]/+page.svelte b/src/routes/[...eventID]/+page.svelte
deleted file mode 100644
index f48186d..0000000
--- a/src/routes/[...eventID]/+page.svelte
+++ /dev/null
@@ -1,12 +0,0 @@
-<script lang="ts">
- import {ndk} from '$lib/ndk';
- import { page } from '$app/stores';
- import Article from '$lib/Article.svelte';
- import {idList} from '$lib/stores';
- import {nip19} from 'nostr-tools';
- // const id = nip19.decode($page.params.path).data;
-
-
-
-</script>
-<Article />
diff --git a/src/routes/[id]/+page.svelte b/src/routes/[id]/+page.svelte
new file mode 100644
index 0000000..c8c0de6
--- /dev/null
+++ b/src/routes/[id]/+page.svelte
@@ -0,0 +1,10 @@
+<script lang="ts">
+ import Article from '$lib/Article.svelte';
+ import type { PageData } from './$types';
+
+ export let data: PageData;
+</script>
+
+<main>
+ <Article event={data.event} />
+</main>
diff --git a/src/routes/[id]/+page.ts b/src/routes/[id]/+page.ts
new file mode 100644
index 0000000..d7e2097
--- /dev/null
+++ b/src/routes/[id]/+page.ts
@@ -0,0 +1,12 @@
+import { getNdkInstance, ndk } from '$lib/ndk';
+
+export const load = async ({ params }) => {
+ // TODO: Don't rely on browser cache here.
+ const ndk = getNdkInstance();
+ const { id } = params;
+
+ // TODO: Add error handling.
+ const event = await ndk.fetchEvent(id);
+
+ return { event };
+};
diff --git a/src/routes/d/[tag]/+page.svelte b/src/routes/d/[tag]/+page.svelte
new file mode 100644
index 0000000..fb31d12
--- /dev/null
+++ b/src/routes/d/[tag]/+page.svelte
@@ -0,0 +1,10 @@
+<script lang="ts">
+ import Article from '$lib/Article.svelte';
+ import type { PageData } from './$types';
+
+ export let data: PageData;
+</script>
+
+<main>
+ <Article event={data.event} />
+</main>
diff --git a/src/routes/d/[tag]/+page.ts b/src/routes/d/[tag]/+page.ts
new file mode 100644
index 0000000..5f78882
--- /dev/null
+++ b/src/routes/d/[tag]/+page.ts
@@ -0,0 +1,13 @@
+import { getNdkInstance } from "$lib/ndk";
+
+export const load = async ({ params }) => {
+ // TODO: Don't rely on browser cache here.
+ const ndk = getNdkInstance();
+ const { tag } = params;
+
+ // TODO: Add error handling.
+ const events = await ndk.fetchEvents({ '#d': [tag] });
+ const event = events.values().next().value;
+
+ return { event };
+};