Files
WooNooW/CONVERTER_FIXES_SUMMARY.md
dwindown 4471cd600f feat: Complete markdown syntax refinement and variable protection
 New cleaner syntax implemented:
- [card:type] instead of [card type='type']
- [button:style](url)Text[/button] instead of [button url='...' style='...']
- Standard markdown images: ![alt](url)

 Variable protection from markdown parsing:
- Variables with underscores (e.g., {order_items_table}) now protected
- HTML comment placeholders prevent italic/bold parsing
- All variables render correctly in preview

 Button rendering fixes:
- Buttons work in Visual mode inside cards
- Buttons work in Preview mode
- Button clicks prevented in visual editor
- Proper styling for solid and outline buttons

 Backward compatibility:
- Old syntax still supported
- No breaking changes

 Bug fixes:
- Fixed order_item_table → order_items_table naming
- Fixed button regex to match across newlines
- Added button/image parsing to parseMarkdownBasics
- Prevented button clicks on .button and .button-outline classes

📚 Documentation:
- NEW_MARKDOWN_SYNTAX.md - Complete user guide
- MARKDOWN_SYNTAX_AND_VARIABLES.md - Technical analysis
2025-11-15 20:05:50 +07:00

99 lines
3.2 KiB
Markdown

# Converter Fixes Summary
## Issues Fixed
### 1. ✅ Exact Event Naming - No Mapping
**Problem:** API used `order_processing` but Email templates had `order_confirmed`. Required a "bridge" mapping.
**Solution:** Renamed template methods to match API exactly:
- `customer_order_confirmed()``customer_order_processing()`
- `staff_order_confirmed()``staff_order_processing()`
- `customer_registered()``customer_new_customer()`
**Result:** Direct 1:1 mapping, no confusion, clean code.
### 2. ✅ Markdown Converter Respects [card] Boundaries
**Problem:** `markdownToBlocks()` was splitting by double newlines (`\n\n`), causing:
- Raw `[/card]` tags left in output
- Each line with double space became a new card
- `##` headings not rendered
**Root Cause:**
```typescript
// OLD - WRONG
const sections = markdown.split(/\n\n+/); // Splits by double newlines!
```
**Solution:** Parse by `[card]...[/card]` boundaries:
```typescript
// NEW - CORRECT
while (remaining.length > 0) {
const cardMatch = remaining.match(/^\[card([^\]]*)\]([\s\S]*?)\[\/card\]/);
if (cardMatch) {
// Extract content between [card] and [/card]
const content = cardMatch[2].trim();
blocks.push({ type: 'card', content });
remaining = remaining.substring(cardMatch[0].length); // Advance!
}
}
```
**Key Changes:**
- Uses regex to find `[card]...[/card]` pairs
- Extracts content between tags
- Advances `remaining` string after each match
- No splitting by newlines
### 3. ⚠️ Markdown Rendering in Preview (Partial)
**Current State:**
- Markdown is stored in database: `## Heading\n\n**bold**`
- Frontend CodeEditor shows clean markdown ✅
- Preview shows markdown as-is (not converted to HTML) ❌
**Why:**
The preview uses `htmlContent` which contains `[card]## Heading[/card]` but doesn't convert the markdown inside to HTML.
**Next Steps:**
Backend PHP needs to convert markdown to HTML when rendering emails. The `[card]` shortcode handler should:
1. Extract content
2. Convert markdown to HTML
3. Wrap in styled div
## Files Modified
1. `/includes/Email/DefaultTemplates.php`
- Renamed methods to match API event IDs exactly
- Updated subject keys
2. `/includes/Core/Notifications/TemplateProvider.php`
- Removed event mapping
- Direct lookup: `$allEmailTemplates[$recipient_type][$event_id]`
3. `/admin-spa/src/components/EmailBuilder/converter.ts`
- Fixed `markdownToBlocks()` to respect `[card]...[/card]` boundaries
- Added proper string advancement
- No more double-newline splitting
## Testing Checklist
- [x] Event names match between API and templates
- [x] No mapping/bridging code
- [x] Markdown editor shows clean markdown
- [x] `[/card]` tags not left in output
- [x] Double newlines don't create new cards
- [ ] Preview renders markdown as HTML (needs backend fix)
- [ ] Headings show as `<h2>` not `##` in preview
- [ ] Line breaks work correctly in preview
## Remaining Work
**Backend Markdown Rendering:**
The WordPress shortcode handler for `[card]` needs to convert markdown content to HTML before rendering.
Location: Likely in `/includes/Email/` or `/includes/Core/Notifications/`
Required: A function that processes `[card]` shortcodes and converts their markdown content to HTML using a markdown parser.