diff --git a/src/lib/__tests__/signature-utils.test.ts b/src/lib/__tests__/signature-utils.test.ts index b23aafca..d5b7c1b0 100644 --- a/src/lib/__tests__/signature-utils.test.ts +++ b/src/lib/__tests__/signature-utils.test.ts @@ -12,6 +12,7 @@ import { insertSignatureAboveQuote, signatureIdentityFor, signPlainTextReply, + signatureHasOwnDelimiter, } from '../signature-utils'; describe('sanitizeSignatureHtml', () => { @@ -115,3 +116,23 @@ describe('signPlainTextReply', () => { expect(signPlainTextReply('Thanks', 'q', null, { position: 'above_quote', separator: true })).toBe('Thanks\n\nq'); }); }); + +describe('a signature with its own "-- " line', () => { + const own = { textSignature: '-- \nUser A\nstw-test' }; + const plain = { textSignature: 'User A\nstw-test' }; + + it('is detected, also with a bare "--" or a leading blank line', () => { + expect(signatureHasOwnDelimiter(own)).toBe(true); + expect(signatureHasOwnDelimiter({ textSignature: '\n--\nUser A' })).toBe(true); + expect(signatureHasOwnDelimiter(plain)).toBe(false); + expect(signatureHasOwnDelimiter({ htmlSignature: '
--
User A
' })).toBe(true); + }); + + it('gets no second separator in plain text or HTML', () => { + const delimiters = (text: string) => text.split('\n').filter((line) => /^--\s*$/.test(line)).length; + expect(delimiters(appendPlainTextSignature('Hi', own, { separator: true }))).toBe(1); + expect(appendPlainTextSignature('Hi', plain, { separator: true })).toBe('Hi\n\n-- \nUser A\nstw-test'); + expect(buildEmbeddedSignatureHtml(own, { separator: true })).not.toContain('="separator"'); + expect(buildEmbeddedSignatureHtml(plain, { separator: true })).toContain('="separator"'); + }); +}); diff --git a/src/lib/compose-format.ts b/src/lib/compose-format.ts index d1356c59..8618fe2b 100644 --- a/src/lib/compose-format.ts +++ b/src/lib/compose-format.ts @@ -13,7 +13,7 @@ import { htmlToPlainText } from './compose-html'; import { buildEmbeddedSignatureHtml, containsEmbeddedSignature, getPlainTextSignature, plainTextBodyHasSignature, plainTextBodyWithoutSignature, spliceSignature, - type SignatureSource, + wantsSignatureSeparator, type SignatureSource, } from './signature-utils'; /** @@ -67,7 +67,9 @@ export function htmlComposeBodyToPlainText( const head = text.slice(0, at).replace(/\s+$/, ''); const tail = text.slice(at + SIGNATURE_TOKEN.length).replace(/^\s+/, ''); const signature = getPlainTextSignature(identity); - const withSignature = signature ? `${head}${separatorText(options.separator)}${signature}` : head; + const withSignature = signature + ? `${head}${separatorText(wantsSignatureSeparator(options.separator, identity))}${signature}` + : head; return tail ? `${withSignature}\n\n${tail}` : withSignature; } @@ -86,7 +88,7 @@ export function plainComposeBodyToHtml( const signature = getPlainTextSignature(identity); const embedded = signature ? buildEmbeddedSignatureHtml(identity, options) : ''; if (embedded) { - const marker = `${separatorText(options.separator)}${signature}`; + const marker = `${separatorText(wantsSignatureSeparator(options.separator, identity))}${signature}`; const at = text.indexOf(marker); if (at !== -1) { const before = plainTextToComposerHtml(text.slice(0, at).replace(/^\n+/, '')); diff --git a/src/lib/signature-utils.ts b/src/lib/signature-utils.ts index f162a940..e778037f 100644 --- a/src/lib/signature-utils.ts +++ b/src/lib/signature-utils.ts @@ -90,6 +90,27 @@ export function signatureIdentityFor--
` : ``; const endMarker = `