48 lines
1.1 KiB
TypeScript
48 lines
1.1 KiB
TypeScript
import { nip19 } from "@nostr/tools";
|
|
import { NEvent } from "../nostr.ts";
|
|
import { render as renderMarkdown } from "@deno/gfm";
|
|
|
|
export default class Article {
|
|
event: NEvent;
|
|
|
|
constructor(event: NEvent) {
|
|
this.event = event;
|
|
}
|
|
|
|
get identifier(): string {
|
|
const tag = this.event.tags.find((t) => t[0] === "d");
|
|
return tag ? tag[1] : "";
|
|
}
|
|
|
|
get title(): string {
|
|
const tag = this.event.tags.find((t) => t[0] === "title");
|
|
return tag ? tag[1] : "Untitled";
|
|
}
|
|
|
|
get summary(): string {
|
|
const tag = this.event.tags.find((t) => t[0] === "summary");
|
|
return tag ? tag[1] : "";
|
|
}
|
|
|
|
get publishedAt(): number {
|
|
const tag = this.event.tags.find((t) => t[0] === "published_at");
|
|
return tag ? parseInt(tag[1]) : this.event.created_at;
|
|
}
|
|
|
|
get updatedAt(): number {
|
|
return this.event.created_at;
|
|
}
|
|
|
|
get html(): string {
|
|
return renderMarkdown(this.event.content);
|
|
}
|
|
|
|
get naddr(): string {
|
|
return nip19.naddrEncode({
|
|
identifier: this.identifier,
|
|
pubkey: this.event.pubkey,
|
|
kind: this.event.kind,
|
|
});
|
|
}
|
|
}
|