Browse Source

Support article routes by d tag, nevent, and naddr

master
buttercat1791 2 years ago committed by limina1
parent
commit
92ae5731de
  1. 4
      package.json
  2. 10
      src/lib/Article.svelte
  3. 1
      src/lib/ArticleHeader.svelte
  4. 2
      src/lib/components/Navigation.svelte
  5. 24
      src/lib/ndk.ts
  6. 5
      src/routes/+page.svelte
  7. 12
      src/routes/[...eventID]/+page.svelte
  8. 10
      src/routes/[id]/+page.svelte
  9. 12
      src/routes/[id]/+page.ts
  10. 10
      src/routes/d/[tag]/+page.svelte
  11. 13
      src/routes/d/[tag]/+page.ts

4
package.json

@ -1,6 +1,6 @@ @@ -1,6 +1,6 @@
{
"name": "nostrwiki",
"version": "0.0.1",
"name": "alexandria",
"version": "0.0.3",
"private": true,
"type": "module",
"scripts": {

10
src/lib/Article.svelte

@ -1,6 +1,6 @@ @@ -1,6 +1,6 @@
<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';
@ -8,10 +8,16 @@ @@ -8,10 +8,16 @@
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);

1
src/lib/ArticleHeader.svelte

@ -5,7 +5,6 @@ @@ -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;

2
src/lib/components/Navigation.svelte

@ -16,7 +16,7 @@ @@ -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>

24
src/lib/ndk.ts

@ -4,13 +4,23 @@ import NDKCacheAdapterDexie from '@nostr-dev-kit/ndk-cache-dexie'; @@ -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: 'indextr-ndk-cache-db' });
const dexieAdapter = new NDKCacheAdapterDexie({ dbName: 'alexandria-ndk-cache-db' });
const Ndk: NDK = new NDK({ explicitRelayUrls: relays, cacheAdapter: dexieAdapter });
Ndk.connect().then(() => console.log('ndk connected'));
return { relays, dexieAdapter };
}
export const ndk: Writable<NDK> = writable(Ndk);
export function getNdkInstance() {
const { relays, dexieAdapter } = getStoredNdkConfig();
const ndk = new NDK({ explicitRelayUrls: relays, cacheAdapter: dexieAdapter });
ndk.connect().then(() => console.log('ndk connected'));
return ndk;
}
export const ndk: Writable<NDK> = writable(getNdkInstance());

5
src/routes/+page.svelte

@ -1,11 +1,10 @@ @@ -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 @@ @@ -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}

12
src/routes/[...eventID]/+page.svelte

@ -1,12 +0,0 @@ @@ -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 />

10
src/routes/[id]/+page.svelte

@ -0,0 +1,10 @@ @@ -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>

12
src/routes/[id]/+page.ts

@ -0,0 +1,12 @@ @@ -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 };
};

10
src/routes/d/[tag]/+page.svelte

@ -0,0 +1,10 @@ @@ -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>

13
src/routes/d/[tag]/+page.ts

@ -0,0 +1,13 @@ @@ -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 };
};
Loading…
Cancel
Save