Hi there,
is there a way to dynamically add the "hidden" attribute without an value to an element, when wcmmode.edit is inactive, and remove the attribute completely, when wcmmode.edit is active?
Desired: Solution with dynamic attribute without value
My HTL-Code looks something like this:
<div class="something" hidden>
<!--Content here-->
</div>
And what I would like (the div.something element should only be written once, not double):
<sly data-sly-test.isEditMode="${wcmmode.edit}" />
<!-- The following two code blocks should only be written once, not double -->
<!-- Edit mode active: -->
<div class="something">
<!--Content here-->
</div>
<!-- Edit mode not active: -->
<div class="something" hidden>
<!--Content here-->
</div>
Solutions that work, but are not solved with dynamic attributes:
Solution 1: I know I could do that with dynamic classes like the following:
<sly data-sly-test.isEditMode="${wcmmode.edit}" />
<!-- Solution with dynamic class -->
<div class="something ${isEditMode ? '' : 'd-none'}">
<!--Content here-->
</div>
Solution 2: Or with data-sly-test and doubled blocks of code:
<sly data-sly-test.isEditMode="${wcmmode.edit}" />
<div data-sly-test="${isEditMode}" class="something">
<!--Content here-->
</div>
<div data-sly-test="${!isEditMode}" class="something" hidden>
<!--Content here-->
</div>
But what I am looking for would be especially for the "hidden" attribute which mostly has no value.
Solution that didn't work
I Also tried using data-sly-attribute.hidden like the following, but it didn't work:
<sly data-sly-test.isEditMode="${wcmmode.edit}" />
<!-- Always sets the attribute hidden, because the value is not important, thus does not work -->
<div class="something" data-sly-attribute.hidden="${isEditMode ? '' : 'hidden'}">
<!--Content here-->
</div>
If there's a way to use dynamic attributes without values without writing doubled code blocks or changing classes, that would be great.
Help is much appreciated.
Solved! Go to Solution.
Views
Replies
Total Likes
can you try this?
<div data-sly-attribute.hidden="${wcmmode.edit}">
<!-- content here -->
</div>
this will show hidden attribute only in edit mode.
can you try this?
<div data-sly-attribute.hidden="${wcmmode.edit}">
<!-- content here -->
</div>
this will show hidden attribute only in edit mode.
@chaudharynick Thank you very much! That worked just like I wanted.
Hi @Tobias_Kolbe ,
Boolean values allow to control display of boolean attributes. Please refer below examples,
<input checked="${true}"/>
<input data-sly-attribute.checked="${true}"/>
<!--/* Both output: */-->
<input checked/>
<input checked="${false}"/>
<input data-sly-attribute.checked="${false}"/>
<!--/* Both output: */-->
<input/>
<!--/* But 'true' or 'false' strings don't work the same way: */-->
<input checked="${'true'}"/> <!--/* outputs: */--> <input checked="true"/>
<input checked="${'false'}"/> <!--/* outputs: */--> <input checked="false"/>
<!--/* Consider having attrs={'checked': true} */-->
<input data-sly-attribute="${attrs}"/>
<!--/* outputs: */-->
<input checked/>
Please refer for more information regarding the data-sly-attributes
https://github.com/adobe/htl-spec/blob/master/SPECIFICATION.md#223-attribute
@Tobias_Kolbe We hope the AEM community has been beneficial to you. We look forward to your return as either a learner or a mentor. The community is enriched by SMEs like you. Please encourage your AEM peers to also participate. Happy AEM learning!
Views
Replies
Total Likes
Views
Likes
Replies