I am working on creating an ASP.NET MVC application to transform content from a content management system and render it as an AMP-compliant page. The CMS has a concept called lists, which groups together content items of a particular template, each which can have custom fields of different types (plain text, boolean, HTML, etc.).
The amp-list component allows you to render raw HTML by using triple curly braces rather than double, for example {{{htmlProperty}}}
. This works in general, but I'm running into an issue with it stripping out images, even if I modify them server-side to use proper amp-img syntax.
I have the following amp-list component:
<amp-list layout="fixed-height" height="500" src="https://jsonblob.com/api/jsonBlob/56eb207e-e2c3-11e8-a8cb-676415a24d50" single-item>
<template type="amp-mustache">
{{#contentItems}}
<section>
<header>
{{title}}
</header>
<div>
{{{content}}}
</div>
</section>
{{/contentItems}}
</template>
</amp-list>
I have the following sample JSON:
{
"totalRecords": 2,
"pageSize": 0,
"pageNumber": 1,
"items": {
"contentItems": [
{
"row": 1,
"title": "What is your favorite sport?",
"content": "<p><strong>Hockey</strong></p>"
},
{
"row": 2,
"title": "What is your favorite country?",
"content": "<p>Canada</p><amp-img src=\"http://www.flagblvd.com/wp-content/uploads/2015/09/canadian-flag-medium.png\" alt=\"\" layout=\"fill\"></amp-img>"
}
]
}
}
Note that the title
property is plain text while content
is HTML. When the page is loaded, the bold from the <strong>
tag in the first content item works, but you'll notice the amp-img is omitted from the output if you inspect in your browser's developer console. Please see this jsfiddle for a demonstration.
Is there any way to get this to work properly? I didn't see anything about this in the official documentation. I only even found out about using the triple braces to render raw HTML by seeing it used in an example with no corresponding documentation.
The output of "triple-mustache" is sanitized to only allow the following tags: a
, b
,br
, caption
, colgroup
, code
, del
, div
, em
, i
, ins
, li
, mark
, ol
, p
, q
, s
, small
, span
, strong
, sub
, sup
, table
, tbody
, time
, td
, th
, thead
, tfoot
, tr
, u
, ul
.