Skip to content

Associativity of conditionals and multiple comma-separated selectors #55

@fulv

Description

@fulv

This rule:

<drop
      css:if-not-content="body.frontend"
      css:content='head link[data-bundle="plone-legacy"], head script[data-bundle="plone-legacy"]' />

seems to be applied like this (simplifying a bit for clarity):

drop link OR (script IF NOT body.frontend)

instead of:

drop (link OR script) IF NOT body.frontend

I'm not sure if it's because of the square bracket selectors in the css:content. Probably not, because any attribute selection would result in square brackets in the match expression.

The diazocompiler output:

<!--RULE: <diazo:drop css:if-not-content="body.frontend" 
css:content="head link[data-bundle="plone-legacy"], 
head script[data-bundle="plone-legacy"]" 
xml:id="r1" if-not-content="//body[@class and contains(concat(' ', 
normalize-space(@class), ' '), ' frontend ')]" content="//head//link[@data-bundle = 
'plone-legacy'] | //head//script[@data-bundle = 'plone-legacy']" 
condition="not(//body[@class and contains(concat(' ', normalize-space(
@class), ' '), ' frontend ')])" merged-condition="not(//body[@class and 
contains(concat(' ', normalize-space(@class), ' '), ' frontend ')])"/>-->

<xsl:template match="//head//link[@data-bundle = 'plone-legacy'] | 
//head//script[@data-bundle = 'plone-legacy'][not(//body[@class and 
contains(concat(' ', normalize-space(@class), ' '), ' frontend ')])]">
</xsl:template>

By contrast, if I split the above drop rule into two, one for link and one for script, it works, and the output is:

<!--RULE: <diazo:drop css:if-not-content="body.frontend" 
css:content="head link[data-bundle="plone-legacy"]" 
xml:id="r1" if-not-content="//body[@class and contains(concat(' ', 
normalize-space(@class), ' '), ' frontend ')]" 
content="//head//link[@data-bundle = 'plone-legacy']" 
condition="not(//body[@class and contains(concat(' ', 
normalize-space(@class), ' '), ' frontend ')])" 
merged-condition="not(//body[@class and contains(concat(' ', 
normalize-space(@class), ' '), ' frontend ')])"/>-->

<xsl:template match="//head//link[@data-bundle = 
'plone-legacy'][not(//body[@class and contains(concat(' ', 
normalize-space(@class), ' '), ' frontend ')])]">
</xsl:template>

<!--RULE: <diazo:drop css:if-not-content="body.frontend" 
css:content="head script[data-bundle="plone-legacy"]"
xml:id="r2" if-not-content="//body[@class and contains(concat(' ', 
normalize-space(@class), ' '), ' frontend ')]" 
content="//head//script[@data-bundle = 'plone-legacy']" 
condition="not(//body[@class and contains(concat(' ', 
normalize-space(@class), ' '), ' frontend ')])" 
merged-condition="not(//body[@class and contains(concat(' ', 
normalize-space(@class), ' '), ' frontend ')])"/>-->

<xsl:template match="//head//script[@data-bundle = 
'plone-legacy'][not(//body[@class and contains(concat(' ', 
normalize-space(@class), ' '), ' frontend ')])]">
</xsl:template>

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions