adobe / htl-spec

HTML Template Language Specification
Apache License 2.0
281 stars 147 forks source link

Context 'html' - removes start attribute from list #80

Closed muenkti closed 5 years ago

muenkti commented 5 years ago

Our Authors needed a <ol> list which should have a fix "start" attribute. So the html of the resource property may look like this for example:

<ol start="5" type="i">
<li>five</li>
<li>six</li>
<li>seven</li>
</ol>

HTL removes the attributes 'start' and 'type' within context 'html'. If I use 'unsafe' the output is correct.

-> working HTL: <div>${resource.text @ context='unsafe'}</div> -> not working HTL: <div>${resource.text @ context='html'}</div>

Should it behave like this?

raducotescu commented 5 years ago

@muenkti, this is not a specification bug. Depending on your platform you might need to configure the XSS library you're using for filtering markup (AntiSamy on AEM / Sling).

muenkti commented 5 years ago

Hi @raducotescu , thanks for your hint. So I found that I can overlay the file to /apps/sling/xss/config.xml and change the section for the lists. But maybe it is a good idea to extend the default config.xml with the elements of ol, ul and li with the allowed values of the HTML spec? I found a file with the sections like this:

        <!-- List tags -->

        <tag name="ul" action="validate">
            <attribute name="type">
                <literal-list>
                    <literal value="disc" />
                    <literal value="circle" />
                    <literal value="square" />
                </literal-list>
            </attribute>
        </tag>

        <tag name="ol" action="validate">
            <attribute name="start">
              <regexp-list>
                <regexp name="number"/>
              </regexp-list>
            </attribute>
            <attribute name="reversed">
                <literal-list>
                    <literal value="reversed" />
                    <regexp-list>
                        <regexp name="boolean"/>
                    </regexp-list>
                </literal-list>
            </attribute>
            <attribute name="type">
                <literal-list>
                    <literal value="1" />
                    <literal value="a" />
                    <literal value="i" />
                    <literal value="A" />
                    <literal value="I" />
                </literal-list>
            </attribute>
        </tag>

        <tag name="li" action="validate">
            <attribute name="value">
                <regexp-list>
                    <regexp name="integer"/>
                </regexp-list>
            </attribute>
         </tag>