mirror of
https://github.com/chatwoot/chatwoot.git
synced 2026-07-13 21:08:19 +08:00
## Summary
Fixes the issue where double newlines (paragraph breaks) were collapsing
to single newlines in text-based messaging channels (Telegram, WhatsApp,
Instagram, Facebook, LINE, SMS).
### Root Cause
The `preserve_multiple_newlines` method only preserved 3+ consecutive
newlines using the regex `/\n{3,}/`. When users pressed Enter twice
(creating a paragraph break with 2 newlines), CommonMarker would parse
this as separate paragraphs, which then collapsed to a single newline in
the output.
This caused:
- ❌ Normal Enter: Double newlines collapsed to single newline
- ✅ Shift+Enter: Worked (created hard breaks)
### Fix
Changed the regex from `/\n{3,}/` to `/\n{2,}/` to preserve 2+
consecutive newlines. This prevents CommonMarker from collapsing
paragraph breaks.
Now:
- ✅ Single newline (`\n`) → Single newline (handled by softbreak)
- ✅ Double newline (`\n\n`) → Double newline (preserved with
placeholders)
- ✅ Triple+ newlines → Preserved as before
### Test Coverage
Added comprehensive tests for:
- Single newlines preservation
- Double newlines (paragraph breaks) preservation
- Multiple consecutive newlines
- Newlines with varying amounts of whitespace between them (1 space, 3
spaces, 5 spaces, tabs)
All 66 tests passing.
### Impact
This fix affects all text-based messaging channels that use the markdown
renderer:
- Telegram
- WhatsApp
- Instagram
- Facebook
- LINE
- SMS
- Twilio SMS (when configured for WhatsApp)
Fixes
https://linear.app/chatwoot/issue/CW-6135/double-newline-is-breaking
---------
Co-authored-by: Muhsin Keloth <muhsinkeramam@gmail.com>
|
||
|---|---|---|
| .. | ||
| account | ||
| auto_assignment | ||
| automation_rules | ||
| contacts | ||
| conversations | ||
| crm/leadsquared | ||
| imap | ||
| internal | ||
| labels | ||
| line | ||
| linear | ||
| liquid | ||
| llm_formatter | ||
| macros | ||
| mailbox | ||
| message_templates | ||
| messages | ||
| mfa | ||
| microsoft | ||
| notification | ||
| sms | ||
| telegram | ||
| twilio | ||
| widget | ||
| account_deletion_service_spec.rb | ||
| action_service_spec.rb | ||
| base_token_service_spec.rb | ||
| csat_survey_service_spec.rb | ||
| search_service_spec.rb | ||