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:  ✅ 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
This commit is contained in:
128
TEMPLATE_SOURCE_OF_TRUTH.md
Normal file
128
TEMPLATE_SOURCE_OF_TRUTH.md
Normal file
@@ -0,0 +1,128 @@
|
||||
# Template Source of Truth
|
||||
|
||||
## Single Source of Truth: `/includes/Email/DefaultTemplates.php`
|
||||
|
||||
This file contains **clean markdown templates** without HTML tags inside shortcodes.
|
||||
|
||||
### Structure
|
||||
|
||||
```php
|
||||
namespace WooNooW\Email;
|
||||
|
||||
class DefaultTemplates {
|
||||
public static function get_all_templates() {
|
||||
return [
|
||||
'customer' => [
|
||||
'order_placed' => '...',
|
||||
'order_confirmed' => '...',
|
||||
'order_shipped' => '...',
|
||||
'order_completed' => '...',
|
||||
'order_cancelled' => '...',
|
||||
'payment_received' => '...',
|
||||
'payment_failed' => '...',
|
||||
'registered' => '...',
|
||||
'vip_upgraded' => '...',
|
||||
],
|
||||
'staff' => [
|
||||
'order_placed' => '...',
|
||||
'order_confirmed' => '...',
|
||||
'order_shipped' => '...',
|
||||
'order_completed' => '...',
|
||||
'order_cancelled' => '...',
|
||||
'payment_received' => '...',
|
||||
'payment_failed' => '...',
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
public static function get_default_subject($recipient, $event) {
|
||||
// Returns subject string
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Template Format
|
||||
|
||||
Templates use **clean markdown** inside `[card]` shortcodes:
|
||||
|
||||
```markdown
|
||||
[card type="hero"]
|
||||
|
||||
## Thank you for your order, {customer_name}!
|
||||
|
||||
We've received your order and will begin processing it right away.
|
||||
[/card]
|
||||
|
||||
[card]
|
||||
|
||||
**Order Number:** #{order_number}
|
||||
**Order Date:** {order_date}
|
||||
**Order Total:** {order_total}
|
||||
|
||||
[/card]
|
||||
|
||||
[button url="{order_url}"]View Order Details[/button]
|
||||
```
|
||||
|
||||
**NOT** HTML like this:
|
||||
```html
|
||||
[card type="hero"]
|
||||
<h1>Thank you for your order, {customer_name}!</h1>
|
||||
<p>We've received your order...</p>
|
||||
[/card]
|
||||
```
|
||||
|
||||
## How It's Used
|
||||
|
||||
### TemplateProvider.php
|
||||
|
||||
`/includes/Core/Notifications/TemplateProvider.php` uses the Email templates:
|
||||
|
||||
```php
|
||||
use WooNooW\Email\DefaultTemplates as EmailDefaultTemplates;
|
||||
|
||||
// Get all templates
|
||||
$allEmailTemplates = EmailDefaultTemplates::get_all_templates();
|
||||
|
||||
// Get specific template
|
||||
$body = $allEmailTemplates[$recipient_type][$template_name];
|
||||
$subject = EmailDefaultTemplates::get_default_subject($recipient_type, $template_name);
|
||||
```
|
||||
|
||||
### Event ID Mapping
|
||||
|
||||
API event IDs are mapped to template names:
|
||||
|
||||
| API Event ID | Template Name |
|
||||
|-------------|---------------|
|
||||
| `order_processing` | `order_confirmed` |
|
||||
| `new_customer` | `registered` |
|
||||
| Others | Same name |
|
||||
|
||||
## Deprecated Files
|
||||
|
||||
### `/includes/Core/Notifications/DefaultEmailTemplates.php` ❌
|
||||
|
||||
**DO NOT USE** - This file contains old templates with HTML tags inside shortcodes.
|
||||
|
||||
It's kept for backwards compatibility only and is marked as deprecated.
|
||||
|
||||
## Frontend Conversion
|
||||
|
||||
When templates are loaded in the editor:
|
||||
|
||||
1. **Database** stores HTML (for backwards compatibility)
|
||||
2. **converter.ts** converts HTML to clean markdown using `convertHtmlToMarkdown()`
|
||||
3. **CodeEditor** displays clean markdown
|
||||
4. **User edits** in markdown
|
||||
5. **Saves** back as HTML (via blocks → HTML conversion)
|
||||
|
||||
This ensures smooth editing experience while maintaining compatibility.
|
||||
|
||||
## Benefits
|
||||
|
||||
✅ **Clean markdown editing** - No HTML tags in markdown mode
|
||||
✅ **Single source of truth** - One place to update templates
|
||||
✅ **Better UX** - Markdown toolbar and syntax highlighting
|
||||
✅ **Mobile-friendly** - Easy to type on any device
|
||||
✅ **Maintainable** - Clear separation of concerns
|
||||
Reference in New Issue
Block a user