From a1d9c8aa13a7ecc39c0a551dec0e061ee25a1e80 Mon Sep 17 00:00:00 2001 From: DanConwayDev Date: Wed, 28 Feb 2024 22:33:59 +0000 Subject: [PATCH] feat: display cover letter content as normal text note with header stripped for now --- src/lib/components/events/content/utils.spec.ts | 10 ++++++++++ src/lib/components/events/content/utils.ts | 16 ++++++++++++++++ src/lib/wrappers/EventCard.svelte | 13 ++++++++++++- 3 files changed, 38 insertions(+), 1 deletion(-) diff --git a/src/lib/components/events/content/utils.spec.ts b/src/lib/components/events/content/utils.spec.ts index cae3d32..4f9301c 100644 --- a/src/lib/components/events/content/utils.spec.ts +++ b/src/lib/components/events/content/utils.spec.ts @@ -23,6 +23,16 @@ describe('extractPatchMessage', () => { ) }) + test('cover letter', () => { + expect( + extractPatchMessage( + `From 8a45afcacd035de474e142e29cbdfa979d23f751 Mon Sep 17 00:00:00 2001\nSubject: [PATCH 0/2] testing multiple revisions of multi patch proposal with cover letter\n\nhere is the cover letter description` + ) + ).toEqual( + 'testing multiple revisions of multi patch proposal with cover letter\n\nhere is the cover letter description' + ) + }) + test('extractPatchMessage - returns undefined if not parsed', () => { expect( extractPatchMessage( diff --git a/src/lib/components/events/content/utils.ts b/src/lib/components/events/content/utils.ts index f7e8308..8a03da1 100644 --- a/src/lib/components/events/content/utils.ts +++ b/src/lib/components/events/content/utils.ts @@ -94,9 +94,16 @@ export const parseContent = ({ content }: ContentArgs): ParsedPart[] => { return result } +export const isCoverLetter = (s: string): boolean => { + return s.indexOf('PATCH 0/') > 0 +} + /** this doesn't work for all patch formats and options */ export const extractPatchMessage = (s: string): string | undefined => { try { + if (isCoverLetter(s)) { + return s.substring(s.indexOf('] ') + 2) + } const t = s.split('\nSubject: [')[1].split('] ')[1] if (t.split('\n\n---\n ').length > 1) return t.split('\n\n---\n ')[0] return t.split('\n\ndiff --git ')[0].split('\n\n ').slice(0, -1).join('') @@ -112,6 +119,15 @@ export const extractPatchTitle = (s: string): string | undefined => { return s.split('\n')[0] } +/** patch message without first line */ +export const extractPatchDescription = (s: string): string | undefined => { + const msg = extractPatchMessage(s) + if (!msg) return '' + const i = msg.indexOf('\n') + if (i === -1) return '' + return msg.substring(i).trim() +} + export const extractIssueTitle = (s: string): string => { return s.split('\n')[0] || '' } diff --git a/src/lib/wrappers/EventCard.svelte b/src/lib/wrappers/EventCard.svelte index 78b059b..612d6f5 100644 --- a/src/lib/wrappers/EventCard.svelte +++ b/src/lib/wrappers/EventCard.svelte @@ -9,6 +9,10 @@ import type { NDKEvent } from '@nostr-dev-kit/ndk' import { onDestroy } from 'svelte' import { writable, type Unsubscriber } from 'svelte/store' + import { + extractPatchMessage, + isCoverLetter, + } from '$lib/components/events/content/utils' export let event: NDKEvent export let type: 'proposal' | 'issue' = 'proposal' @@ -28,7 +32,14 @@ {#if event.kind == patch_kind} - + {#if isCoverLetter(event.content)} + + {:else} + + {/if} {:else if event.kind && proposal_status_kinds.includes(event.kind)} {:else}