Browse Source

feat: display cover letter content

as normal text note with header stripped for now
master
DanConwayDev 2 years ago
parent
commit
a1d9c8aa13
No known key found for this signature in database
GPG Key ID: 68E15486D73F75E1
  1. 10
      src/lib/components/events/content/utils.spec.ts
  2. 16
      src/lib/components/events/content/utils.ts
  3. 13
      src/lib/wrappers/EventCard.svelte

10
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', () => { test('extractPatchMessage - returns undefined if not parsed', () => {
expect( expect(
extractPatchMessage( extractPatchMessage(

16
src/lib/components/events/content/utils.ts

@ -94,9 +94,16 @@ export const parseContent = ({ content }: ContentArgs): ParsedPart[] => {
return result return result
} }
export const isCoverLetter = (s: string): boolean => {
return s.indexOf('PATCH 0/') > 0
}
/** this doesn't work for all patch formats and options */ /** this doesn't work for all patch formats and options */
export const extractPatchMessage = (s: string): string | undefined => { export const extractPatchMessage = (s: string): string | undefined => {
try { try {
if (isCoverLetter(s)) {
return s.substring(s.indexOf('] ') + 2)
}
const t = s.split('\nSubject: [')[1].split('] ')[1] const t = s.split('\nSubject: [')[1].split('] ')[1]
if (t.split('\n\n---\n ').length > 1) return t.split('\n\n---\n ')[0] 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('') 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] 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 => { export const extractIssueTitle = (s: string): string => {
return s.split('\n')[0] || '' return s.split('\n')[0] || ''
} }

13
src/lib/wrappers/EventCard.svelte

@ -9,6 +9,10 @@
import type { NDKEvent } from '@nostr-dev-kit/ndk' import type { NDKEvent } from '@nostr-dev-kit/ndk'
import { onDestroy } from 'svelte' import { onDestroy } from 'svelte'
import { writable, type Unsubscriber } from 'svelte/store' import { writable, type Unsubscriber } from 'svelte/store'
import {
extractPatchMessage,
isCoverLetter,
} from '$lib/components/events/content/utils'
export let event: NDKEvent export let event: NDKEvent
export let type: 'proposal' | 'issue' = 'proposal' export let type: 'proposal' | 'issue' = 'proposal'
@ -28,7 +32,14 @@
<EventWrapper {type} author={$author} created_at={event.created_at} {event}> <EventWrapper {type} author={$author} created_at={event.created_at} {event}>
{#if event.kind == patch_kind} {#if event.kind == patch_kind}
<Patch content={event.content} tags={event.tags} /> {#if isCoverLetter(event.content)}
<ParsedContent
content={extractPatchMessage(event.content)}
tags={event.tags}
/>
{:else}
<Patch content={event.content} tags={event.tags} />
{/if}
{:else if event.kind && proposal_status_kinds.includes(event.kind)} {:else if event.kind && proposal_status_kinds.includes(event.kind)}
<Status {type} status={event.kind} /> <Status {type} status={event.kind} />
{:else} {:else}

Loading…
Cancel
Save