{"id":"6a5676dcf78fad31cc0eb568","title":"2026 07 14 Issue 303","path":"how-to/committee/release-notes/2026-07-14-issue-303","contentMarkdown":"# 14-Jul-2026 — email editors keep your formatting when you paste [ref #303](https://github.com/nbarrett/ngx-ramblers/issues/303)\n\n## [build 776](https://github.com/nbarrett/ngx-ramblers/actions/runs/29354643657) — [commit 314a7f0](https://github.com/nbarrett/ngx-ramblers/commit/314a7f03d38c1ca961e5fd139204fe7c9192a804)\n\n_____\n\n## What's new\n\nPasting into an email template or the composer now keeps the formatting you pasted, instead of flattening it to plain text. Personalised sends also report progress as they go, naming the member currently being emailed.\n\n## Markdown copy and paste in email templates\n\nThe email template and composer editors now speak **Markdown in both directions**. Paste Markdown in and it arrives as properly formatted content; copy out of an editor and you get Markdown back. That means you can draft an email anywhere you like, paste it in, and keep everything, rather than pasting flat text and re-applying every heading and link by hand.\n\n- **Paste Markdown, get formatting.** Headings, bold, italics, bullet and numbered lists, links, images and tables all come through.\n- **Merge fields survive the paste.** Paste a merge field token and it becomes a live field again, not dead text that shows the same thing to every member.\n- **Copy gives you Markdown back.** Select part of a template, copy it, and paste it into another template or into your notes, and it keeps its structure.\n- **Unwrap on paste** strips the hard line breaks you get when copying out of another email or a PDF, so paragraphs flow properly instead of breaking mid-sentence.\n- **No permission prompt from your own device.** Sign-off images now come from the website address rather than a local one, so devices no longer ask for permission while you compose.\n\n### What to paste to get what you want\n\n| To get this | Paste this |\n| --- | --- |\n| A heading | `## What you'll find on the site` |\n| Bold, italic | `**bold**`, `*italic*` |\n| A bullet list | `- first item` |\n| A numbered list | `1. first item` |\n| A link | `[contact us](https://www.example.org/contact-us)` |\n| An image | `![Walks programme](https://www.example.org/image.png)` |\n\n### Merge fields, by type\n\nMerge fields are what personalise an email. They come in three families, and each is just text you can paste:\n\n| What you want | Paste this |\n| --- | --- |\n| The member's first name | `{{params.memberMergeFields.FNAME}}` |\n| Their full name | `{{params.memberMergeFields.FULL_NAME}}` |\n| Their membership number | `{{params.memberMergeFields.MEMBER_NUM}}` |\n| Their membership expiry date | `{{params.memberMergeFields.MEMBER_EXP}}` |\n| Their postcode | `{{params.accountMergeFields.POSTCODE}}` |\n| Their town | `{{params.accountMergeFields.TOWN}}` |\n| Your group's long name | `{{params.systemMergeFields.APP_LONGNAME}}` |\n| Your website address | `{{params.systemMergeFields.APP_URL}}` |\n| The account activation link | `{{params.systemMergeFields.PW_RESET_LINK}}` |\n\nIn short: **`memberMergeFields`** is the member being emailed, **`accountMergeFields`** is their address, and **`systemMergeFields`** is your group and website.\n\nYou can combine them. A link whose wording *and* destination are both merge fields is written like an ordinary Markdown link:\n\n`[{{params.systemMergeFields.APP_LONGNAME}}](https://ngx-ramblers.org.uk/{{params.systemMergeFields.APP_URL}})`\n\nThat is what produces the green chips in the editor below, each showing the field name and, after the arrow, where it points.\n\n### A whole template, end to end\n\nThe pieces above are easier to make sense of assembled. Below is the complete Markdown behind the **Welcoming you** template — the very one shown in the editor screenshot that follows. Every line of it is just text you could paste in:\n\n```\nWelcome to [{{params.systemMergeFields.APP_LONGNAME}}](https://ngx-ramblers.org.uk/{{params.systemMergeFields.APP_URL}}). We're really pleased you've joined us, and we hope to see you out on a walk before too long.\n\n### What you'll find on the site\n\n[Walks programme](https://ngx-ramblers.org.uk/{{params.systemMergeFields.APP_URL}}/walks) is where everything we've got coming up is listed. Use the quick search to find walks by leader, place or grade.\n\n![Walks programme](https://ngx-ramblers.org.uk/api/aws/s3/site-content/ec5ea229-df50-4e40-b3c5-d24301664a8b.jpeg)\n\n[Social events](https://ngx-ramblers.org.uk/{{params.systemMergeFields.APP_URL}}/social) covers our get-togethers away from the trail.\n\n### Keeping in touch\n\nThe easiest way to reach us, whatever you need, is through our [contact us page](https://ngx-ramblers.org.uk/{{params.systemMergeFields.APP_URL}}/contact-us), where you'll find the right person to get in touch with.\n\nFrom time to time we'll also email you about walks and social events. You can change what you receive, or stop the emails altogether, at any time using the links at the foot of any email we send. That keeps us in line with [GDPR](https://ico.org.uk/for-organisations/uk-gdpr-guidance-and-resources/).\n\nIf anything here isn't clear, or you just want to say hello, drop us a line using the links below.\n```\n\nThree things worth noticing in it:\n\n- **The opening line is a link whose wording *and* destination are both merge fields.** That is what renders as the green `Group long name → Website home` chip in the editor.\n- **You can build a path onto a merge field.** `{{params.systemMergeFields.APP_URL}}/walks` points at your own walks programme without anyone having to type the website address, so the same template works unchanged on any group's site.\n- **Images are ordinary Markdown**, written `![description](https://ngx-ramblers.org.uk/address)`. The real template also uses a line of plain HTML for one image where the exact width and centring mattered, which the editor accepts too.\n\n![](https://ngx-ramblers.org.uk/api/aws/s3/site-content/6c996e53-4c0b-4d50-a790-98228b9ee07b.png)\n\n*An email template in the editor: formatting, images and live merge fields such as Group long name, all kept when pasted*\n\n![](https://ngx-ramblers.org.uk/api/aws/s3/site-content/9fdfd736-4222-4112-92c7-c134ac6cb354.png)\n\n*The editor's paste controls: Insert merge field, and Unwrap on paste for stripping wrapping from pasted text*\n\n## Send Email Feedback\n- When a list of members are being sent emails transactionally rather than via a campaign, feedback is now provided on a per-member basis:\n\n![](https://ngx-ramblers.org.uk/api/aws/s3/site-content/51d1989b-cf55-4a70-98d3-b63f138024d1.png)\n\n\n\n## Technical changes\n\n- Route Markdown paste and clipboard serialisation through Tiptap's Markdown manager\n- Recognise merge-field tokens as Markdown paste content\n- Derive batch progress from sent, failed and skipped recipient states\n- Resolve contact sign-off image assets through the configured public base URL","contentHtml":"<h1>14-Jul-2026 — email editors keep your formatting when you paste <a href=\"https://github.com/nbarrett/ngx-ramblers/issues/303\">ref #303</a></h1>\n<h2><a href=\"https://github.com/nbarrett/ngx-ramblers/actions/runs/29354643657\">build 776</a> — <a href=\"https://github.com/nbarrett/ngx-ramblers/commit/314a7f03d38c1ca961e5fd139204fe7c9192a804\">commit 314a7f0</a></h2>\n<hr>\n<h2>What&#39;s new</h2>\n<p>Pasting into an email template or the composer now keeps the formatting you pasted, instead of flattening it to plain text. Personalised sends also report progress as they go, naming the member currently being emailed.</p>\n<h2>Markdown copy and paste in email templates</h2>\n<p>The email template and composer editors now speak <strong>Markdown in both directions</strong>. Paste Markdown in and it arrives as properly formatted content; copy out of an editor and you get Markdown back. That means you can draft an email anywhere you like, paste it in, and keep everything, rather than pasting flat text and re-applying every heading and link by hand.</p>\n<ul>\n<li><strong>Paste Markdown, get formatting.</strong> Headings, bold, italics, bullet and numbered lists, links, images and tables all come through.</li>\n<li><strong>Merge fields survive the paste.</strong> Paste a merge field token and it becomes a live field again, not dead text that shows the same thing to every member.</li>\n<li><strong>Copy gives you Markdown back.</strong> Select part of a template, copy it, and paste it into another template or into your notes, and it keeps its structure.</li>\n<li><strong>Unwrap on paste</strong> strips the hard line breaks you get when copying out of another email or a PDF, so paragraphs flow properly instead of breaking mid-sentence.</li>\n<li><strong>No permission prompt from your own device.</strong> Sign-off images now come from the website address rather than a local one, so devices no longer ask for permission while you compose.</li>\n</ul>\n<h3>What to paste to get what you want</h3>\n<table>\n<thead>\n<tr>\n<th>To get this</th>\n<th>Paste this</th>\n</tr>\n</thead>\n<tbody><tr>\n<td>A heading</td>\n<td><code>## What you&#39;ll find on the site</code></td>\n</tr>\n<tr>\n<td>Bold, italic</td>\n<td><code>**bold**</code>, <code>*italic*</code></td>\n</tr>\n<tr>\n<td>A bullet list</td>\n<td><code>- first item</code></td>\n</tr>\n<tr>\n<td>A numbered list</td>\n<td><code>1. first item</code></td>\n</tr>\n<tr>\n<td>A link</td>\n<td><code>[contact us](https://www.example.org/contact-us)</code></td>\n</tr>\n<tr>\n<td>An image</td>\n<td><code>![Walks programme](https://www.example.org/image.png)</code></td>\n</tr>\n</tbody></table>\n<h3>Merge fields, by type</h3>\n<p>Merge fields are what personalise an email. They come in three families, and each is just text you can paste:</p>\n<table>\n<thead>\n<tr>\n<th>What you want</th>\n<th>Paste this</th>\n</tr>\n</thead>\n<tbody><tr>\n<td>The member&#39;s first name</td>\n<td><code>{{params.memberMergeFields.FNAME}}</code></td>\n</tr>\n<tr>\n<td>Their full name</td>\n<td><code>{{params.memberMergeFields.FULL_NAME}}</code></td>\n</tr>\n<tr>\n<td>Their membership number</td>\n<td><code>{{params.memberMergeFields.MEMBER_NUM}}</code></td>\n</tr>\n<tr>\n<td>Their membership expiry date</td>\n<td><code>{{params.memberMergeFields.MEMBER_EXP}}</code></td>\n</tr>\n<tr>\n<td>Their postcode</td>\n<td><code>{{params.accountMergeFields.POSTCODE}}</code></td>\n</tr>\n<tr>\n<td>Their town</td>\n<td><code>{{params.accountMergeFields.TOWN}}</code></td>\n</tr>\n<tr>\n<td>Your group&#39;s long name</td>\n<td><code>{{params.systemMergeFields.APP_LONGNAME}}</code></td>\n</tr>\n<tr>\n<td>Your website address</td>\n<td><code>{{params.systemMergeFields.APP_URL}}</code></td>\n</tr>\n<tr>\n<td>The account activation link</td>\n<td><code>{{params.systemMergeFields.PW_RESET_LINK}}</code></td>\n</tr>\n</tbody></table>\n<p>In short: <strong><code>memberMergeFields</code></strong> is the member being emailed, <strong><code>accountMergeFields</code></strong> is their address, and <strong><code>systemMergeFields</code></strong> is your group and website.</p>\n<p>You can combine them. A link whose wording <em>and</em> destination are both merge fields is written like an ordinary Markdown link:</p>\n<p><code>[{{params.systemMergeFields.APP_LONGNAME}}](https://ngx-ramblers.org.uk/{{params.systemMergeFields.APP_URL}})</code></p>\n<p>That is what produces the green chips in the editor below, each showing the field name and, after the arrow, where it points.</p>\n<h3>A whole template, end to end</h3>\n<p>The pieces above are easier to make sense of assembled. Below is the complete Markdown behind the <strong>Welcoming you</strong> template — the very one shown in the editor screenshot that follows. Every line of it is just text you could paste in:</p>\n<pre><code>Welcome to [{{params.systemMergeFields.APP_LONGNAME}}](https://ngx-ramblers.org.uk/{{params.systemMergeFields.APP_URL}}). We&#39;re really pleased you&#39;ve joined us, and we hope to see you out on a walk before too long.\n\n### What you&#39;ll find on the site\n\n[Walks programme](https://ngx-ramblers.org.uk/{{params.systemMergeFields.APP_URL}}/walks) is where everything we&#39;ve got coming up is listed. Use the quick search to find walks by leader, place or grade.\n\n![Walks programme](https://ngx-ramblers.org.uk/api/aws/s3/site-content/ec5ea229-df50-4e40-b3c5-d24301664a8b.jpeg)\n\n[Social events](https://ngx-ramblers.org.uk/{{params.systemMergeFields.APP_URL}}/social) covers our get-togethers away from the trail.\n\n### Keeping in touch\n\nThe easiest way to reach us, whatever you need, is through our [contact us page](https://ngx-ramblers.org.uk/{{params.systemMergeFields.APP_URL}}/contact-us), where you&#39;ll find the right person to get in touch with.\n\nFrom time to time we&#39;ll also email you about walks and social events. You can change what you receive, or stop the emails altogether, at any time using the links at the foot of any email we send. That keeps us in line with [GDPR](https://ico.org.uk/for-organisations/uk-gdpr-guidance-and-resources/).\n\nIf anything here isn&#39;t clear, or you just want to say hello, drop us a line using the links below.\n</code></pre>\n<p>Three things worth noticing in it:</p>\n<ul>\n<li><strong>The opening line is a link whose wording <em>and</em> destination are both merge fields.</strong> That is what renders as the green <code>Group long name → Website home</code> chip in the editor.</li>\n<li><strong>You can build a path onto a merge field.</strong> <code>{{params.systemMergeFields.APP_URL}}/walks</code> points at your own walks programme without anyone having to type the website address, so the same template works unchanged on any group&#39;s site.</li>\n<li><strong>Images are ordinary Markdown</strong>, written <code>![description](https://ngx-ramblers.org.uk/address)</code>. The real template also uses a line of plain HTML for one image where the exact width and centring mattered, which the editor accepts too.</li>\n</ul>\n<p><img src=\"https://ngx-ramblers.org.uk/api/aws/s3/site-content/6c996e53-4c0b-4d50-a790-98228b9ee07b.png\" alt=\"\"></p>\n<p><em>An email template in the editor: formatting, images and live merge fields such as Group long name, all kept when pasted</em></p>\n<p><img src=\"https://ngx-ramblers.org.uk/api/aws/s3/site-content/9fdfd736-4222-4112-92c7-c134ac6cb354.png\" alt=\"\"></p>\n<p><em>The editor&#39;s paste controls: Insert merge field, and Unwrap on paste for stripping wrapping from pasted text</em></p>\n<h2>Send Email Feedback</h2>\n<ul>\n<li>When a list of members are being sent emails transactionally rather than via a campaign, feedback is now provided on a per-member basis:</li>\n</ul>\n<p><img src=\"https://ngx-ramblers.org.uk/api/aws/s3/site-content/51d1989b-cf55-4a70-98d3-b63f138024d1.png\" alt=\"\"></p>\n<h2>Technical changes</h2>\n<ul>\n<li>Route Markdown paste and clipboard serialisation through Tiptap&#39;s Markdown manager</li>\n<li>Recognise merge-field tokens as Markdown paste content</li>\n<li>Derive batch progress from sent, failed and skipped recipient states</li>\n<li>Resolve contact sign-off image assets through the configured public base URL</li>\n</ul>\n"}