Skip to content

Commit

Permalink
EZP-29301: Added support for custom attributes on elements (#35)
Browse files Browse the repository at this point in the history
* Custom attributes

* Custom attributes: set table custom attributes before any child element is added

* Custom attributes: fixing typo attirbute => attribute

* Custom attributes: enable for table, but not just infotable

* Custom attributes: tests

* Custom attributes: pre, quote, sub, sup

* Custom attributes: tests for pre, quote, sub, sup

* Chaning custom attributes definition name to ez.xhtml.data.attribute

* Custom attributes: use ezattribute element instead of ez-custom-attributes

* Custom attributes: use data-ezattribute-<attr> instead of data-ez-custom-attribute-<attr>

* Custom attributes: use new naming convensions in tests
  • Loading branch information
SerheyDolgushev authored and Łukasz Serwatka committed Apr 19, 2019
1 parent b838ccf commit 5f13e6a
Show file tree
Hide file tree
Showing 54 changed files with 700 additions and 41 deletions.
44 changes: 44 additions & 0 deletions src/lib/eZ/RichText/Resources/schemas/docbook/ezpublish.rng
Original file line number Diff line number Diff line change
Expand Up @@ -824,4 +824,48 @@
<notAllowed/>
</define>

<define name="ez.xhtml.data.attribute">
<optional>
<element name="ezattribute">
<ref name="ez.config.hash"/>
</element>
</optional>
</define>

<div>
<a:documentation>
Adding child ezattribute element to the selected elements.
</a:documentation>
<define name="db.extension.inlines" combine="choice">
<ref name="ez.xhtml.data.attribute" />
</define>
<define name="db.all.blocks" combine="choice">
<ref name="ez.xhtml.data.attribute" />
</define>
<define name="db.para.info" combine="interleave">
<ref name="ez.xhtml.data.attribute" />
</define>
<define name="db.orderedlist.info" combine="interleave">
<ref name="ez.xhtml.data.attribute" />
</define>
<define name="db.itemizedlist.info" combine="interleave">
<ref name="ez.xhtml.data.attribute" />
</define>
<define name="db.html.informaltable.info" combine="interleave">
<ref name="ez.xhtml.data.attribute" />
</define>
<define name="db.html.table.model" combine="interleave">
<ref name="ez.xhtml.data.attribute" />
</define>
<define name="db.html.tr.attlist" combine="interleave">
<ref name="ez.xhtml.data.attribute" />
</define>
<define name="db.subscript.attlist" combine="interleave">
<ref name="ez.xhtml.data.attribute" />
</define>
<define name="db.superscript.attlist" combine="interleave">
<ref name="ez.xhtml.data.attribute" />
</define>
</div>

</grammar>
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,17 @@
<xsl:output indent="yes" encoding="UTF-8"/>
<xsl:variable name="outputNamespace" select="''"/>

<xsl:template name="ezattribute">
<xsl:if test="./docbook:ezattribute">
<xsl:for-each select="./docbook:ezattribute/docbook:ezvalue">
<xsl:attribute name="{concat('data-ezattribute-', @key)}">
<xsl:value-of select="text()"/>
</xsl:attribute>
</xsl:for-each>
</xsl:if>
</xsl:template>
<xsl:template match="docbook:ezattribute" />

<xsl:template match="docbook:section">
<xsl:if test="not(parent::*)">
<xsl:element name="section" namespace="{$outputNamespace}">
Expand Down Expand Up @@ -41,6 +52,7 @@
<xsl:value-of select="concat( 'text-align:', @ezxhtml:textalign, ';' )"/>
</xsl:attribute>
</xsl:if>
<xsl:call-template name="ezattribute"/>
<xsl:apply-templates/>
</xsl:element>
</xsl:template>
Expand All @@ -63,12 +75,14 @@
<xsl:value-of select="@language"/>
</xsl:attribute>
</xsl:if>
<xsl:call-template name="ezattribute"/>
<xsl:value-of select="./text()"/>
</xsl:element>
</xsl:template>

<xsl:template match="docbook:blockquote">
<xsl:element name="blockquote" namespace="{$outputNamespace}">
<xsl:call-template name="ezattribute"/>
<xsl:apply-templates/>
</xsl:element>
</xsl:template>
Expand Down Expand Up @@ -141,23 +155,27 @@
<xsl:value-of select="@ezxhtml:class"/>
</xsl:attribute>
</xsl:if>
<xsl:call-template name="ezattribute"/>
<xsl:apply-templates/>
</xsl:element>
</xsl:when>
<xsl:when test="@role='underlined'">
<xsl:element name="u" namespace="{$outputNamespace}">
<xsl:call-template name="ezattribute"/>
<xsl:apply-templates/>
</xsl:element>
</xsl:when>
<xsl:when test="@role='strikedthrough'">
<xsl:choose>
<xsl:when test="@revisionflag='deleted'">
<xsl:element name="del" namespace="{$outputNamespace}">
<xsl:call-template name="ezattribute"/>
<xsl:apply-templates/>
</xsl:element>
</xsl:when>
<xsl:otherwise>
<xsl:element name="s" namespace="{$outputNamespace}">
<xsl:call-template name="ezattribute"/>
<xsl:apply-templates/>
</xsl:element>
</xsl:otherwise>
Expand All @@ -170,6 +188,7 @@
<xsl:value-of select="@ezxhtml:class"/>
</xsl:attribute>
</xsl:if>
<xsl:call-template name="ezattribute"/>
<xsl:apply-templates/>
</xsl:element>
</xsl:otherwise>
Expand All @@ -178,12 +197,14 @@

<xsl:template match="docbook:subscript">
<xsl:element name="sub" namespace="{$outputNamespace}">
<xsl:call-template name="ezattribute"/>
<xsl:apply-templates/>
</xsl:element>
</xsl:template>

<xsl:template match="docbook:superscript">
<xsl:element name="sup" namespace="{$outputNamespace}">
<xsl:call-template name="ezattribute"/>
<xsl:apply-templates/>
</xsl:element>
</xsl:template>
Expand Down Expand Up @@ -219,6 +240,7 @@
<xsl:value-of select="@ezxhtml:class"/>
</xsl:attribute>
</xsl:if>
<xsl:call-template name="ezattribute"/>
<xsl:apply-templates/>
</xsl:element>
</xsl:template>
Expand Down Expand Up @@ -260,6 +282,7 @@
<xsl:value-of select="concat( 'text-align:', @ezxhtml:textalign, ';' )"/>
</xsl:attribute>
</xsl:if>
<xsl:call-template name="ezattribute"/>
<xsl:apply-templates/>
</xsl:element>
</xsl:template>
Expand All @@ -276,6 +299,7 @@
<xsl:value-of select="@ezxhtml:class"/>
</xsl:attribute>
</xsl:if>
<xsl:call-template name="ezattribute"/>
<xsl:apply-templates/>
</xsl:element>
</xsl:template>
Expand All @@ -292,6 +316,7 @@
<xsl:value-of select="@ezxhtml:class"/>
</xsl:attribute>
</xsl:if>
<xsl:call-template name="ezattribute"/>
<xsl:apply-templates/>
</xsl:element>
</xsl:template>
Expand All @@ -303,6 +328,7 @@
<xsl:value-of select="../@ezxhtml:class"/>
</xsl:attribute>
</xsl:if>
<xsl:call-template name="ezattribute"/>
<xsl:apply-templates/>
</xsl:element>
</xsl:template>
Expand Down Expand Up @@ -367,6 +393,7 @@
<xsl:value-of select="concat( $inlineStyleWidth, $inlineStyleBorder )"/>
</xsl:attribute>
</xsl:if>
<xsl:call-template name="ezattribute"/>
<xsl:if test="local-name(.) = 'table' and ./docbook:caption != ''">
<xsl:element name="caption" namespace="{$outputNamespace}">
<xsl:value-of select="./docbook:caption"/>
Expand Down Expand Up @@ -401,6 +428,7 @@
<xsl:value-of select="@class"/>
</xsl:attribute>
</xsl:if>
<xsl:call-template name="ezattribute"/>
<xsl:apply-templates/>
</xsl:element>
</xsl:template>
Expand Down Expand Up @@ -470,6 +498,7 @@
<xsl:value-of select="concat( $inlineStyleWidth, $inlineStyleValign )"/>
</xsl:attribute>
</xsl:if>
<xsl:call-template name="ezattribute"/>
<xsl:apply-templates/>
</xsl:element>
</xsl:template>
Expand Down Expand Up @@ -529,6 +558,7 @@
<xsl:value-of select="concat( $inlineStyleWidth, $inlineStyleValign )"/>
</xsl:attribute>
</xsl:if>
<xsl:call-template name="ezattribute"/>
<xsl:apply-templates/>
</xsl:element>
</xsl:template>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,17 @@
<xsl:output indent="yes" encoding="UTF-8"/>
<xsl:variable name="outputNamespace" select="''"/>

<xsl:template name="ezattribute">
<xsl:if test="./docbook:ezattribute">
<xsl:for-each select="./docbook:ezattribute/docbook:ezvalue">
<xsl:attribute name="{concat('data-ezattribute-', @key)}">
<xsl:value-of select="text()"/>
</xsl:attribute>
</xsl:for-each>
</xsl:if>
</xsl:template>
<xsl:template match="docbook:ezattribute" />

<xsl:template match="docbook:section">
<xsl:if test="not(parent::*)">
<xsl:element name="section" namespace="{$outputNamespace}">
Expand All @@ -36,6 +47,7 @@
<xsl:value-of select="@language"/>
</xsl:attribute>
</xsl:if>
<xsl:call-template name="ezattribute"/>
<xsl:value-of select="./text()"/>
</xsl:element>
</xsl:template>
Expand Down Expand Up @@ -69,12 +81,14 @@
<xsl:value-of select="concat( 'text-align:', @ezxhtml:textalign, ';' )"/>
</xsl:attribute>
</xsl:if>
<xsl:call-template name="ezattribute"/>
<xsl:apply-templates/>
</xsl:element>
</xsl:template>

<xsl:template match="docbook:blockquote">
<xsl:element name="blockquote" namespace="{$outputNamespace}">
<xsl:call-template name="ezattribute"/>
<xsl:apply-templates/>
</xsl:element>
</xsl:template>
Expand Down Expand Up @@ -147,23 +161,27 @@
<xsl:value-of select="@ezxhtml:class"/>
</xsl:attribute>
</xsl:if>
<xsl:call-template name="ezattribute"/>
<xsl:apply-templates/>
</xsl:element>
</xsl:when>
<xsl:when test="@role='underlined'">
<xsl:element name="u" namespace="{$outputNamespace}">
<xsl:call-template name="ezattribute"/>
<xsl:apply-templates/>
</xsl:element>
</xsl:when>
<xsl:when test="@role='strikedthrough'">
<xsl:choose>
<xsl:when test="@revisionflag='deleted'">
<xsl:element name="del" namespace="{$outputNamespace}">
<xsl:call-template name="ezattribute"/>
<xsl:apply-templates/>
</xsl:element>
</xsl:when>
<xsl:otherwise>
<xsl:element name="s" namespace="{$outputNamespace}">
<xsl:call-template name="ezattribute"/>
<xsl:apply-templates/>
</xsl:element>
</xsl:otherwise>
Expand All @@ -176,6 +194,7 @@
<xsl:value-of select="@ezxhtml:class"/>
</xsl:attribute>
</xsl:if>
<xsl:call-template name="ezattribute"/>
<xsl:apply-templates/>
</xsl:element>
</xsl:otherwise>
Expand All @@ -184,12 +203,14 @@

<xsl:template match="docbook:subscript">
<xsl:element name="sub" namespace="{$outputNamespace}">
<xsl:call-template name="ezattribute"/>
<xsl:apply-templates/>
</xsl:element>
</xsl:template>

<xsl:template match="docbook:superscript">
<xsl:element name="sup" namespace="{$outputNamespace}">
<xsl:call-template name="ezattribute"/>
<xsl:apply-templates/>
</xsl:element>
</xsl:template>
Expand Down Expand Up @@ -227,10 +248,12 @@
<xsl:value-of select="@ezxhtml:class"/>
</xsl:attribute>
</xsl:if>
<xsl:call-template name="ezattribute"/>
<xsl:apply-templates/>
</xsl:element>
</xsl:when>
<xsl:otherwise>
<xsl:call-template name="ezattribute"/>
<xsl:apply-templates/>
</xsl:otherwise>
</xsl:choose>
Expand Down Expand Up @@ -273,6 +296,7 @@
<xsl:value-of select="concat( 'text-align:', @ezxhtml:textalign, ';' )"/>
</xsl:attribute>
</xsl:if>
<xsl:call-template name="ezattribute"/>
<xsl:apply-templates/>
</xsl:element>
</xsl:template>
Expand All @@ -289,6 +313,7 @@
<xsl:value-of select="@ezxhtml:class"/>
</xsl:attribute>
</xsl:if>
<xsl:call-template name="ezattribute"/>
<xsl:apply-templates/>
</xsl:element>
</xsl:template>
Expand All @@ -305,6 +330,7 @@
<xsl:value-of select="@ezxhtml:class"/>
</xsl:attribute>
</xsl:if>
<xsl:call-template name="ezattribute"/>
<xsl:apply-templates/>
</xsl:element>
</xsl:template>
Expand All @@ -316,6 +342,7 @@
<xsl:value-of select="../@ezxhtml:class"/>
</xsl:attribute>
</xsl:if>
<xsl:call-template name="ezattribute" select="parent"/>
<xsl:apply-templates/>
</xsl:element>
</xsl:template>
Expand Down Expand Up @@ -380,6 +407,7 @@
<xsl:value-of select="concat( $inlineStyleWidth, $inlineStyleBorder )"/>
</xsl:attribute>
</xsl:if>
<xsl:call-template name="ezattribute"/>
<xsl:if test="local-name(.) = 'table' and ./docbook:caption != ''">
<xsl:element name="caption" namespace="{$outputNamespace}">
<xsl:value-of select="./docbook:caption"/>
Expand Down Expand Up @@ -414,6 +442,7 @@
<xsl:value-of select="@class"/>
</xsl:attribute>
</xsl:if>
<xsl:call-template name="ezattribute"/>
<xsl:apply-templates/>
</xsl:element>
</xsl:template>
Expand Down Expand Up @@ -483,6 +512,7 @@
<xsl:value-of select="concat( $inlineStyleWidth, $inlineStyleValign )"/>
</xsl:attribute>
</xsl:if>
<xsl:call-template name="ezattribute"/>
<xsl:apply-templates/>
</xsl:element>
</xsl:template>
Expand Down Expand Up @@ -542,6 +572,7 @@
<xsl:value-of select="concat( $inlineStyleWidth, $inlineStyleValign )"/>
</xsl:attribute>
</xsl:if>
<xsl:call-template name="ezattribute"/>
<xsl:apply-templates/>
</xsl:element>
</xsl:template>
Expand Down
Loading

0 comments on commit 5f13e6a

Please sign in to comment.