Side Navigation
The navigation bar supporting the mainmenu is a common graphical element shared by all EMA and Telematics websites
{#
Accepts:
- extra_classes (string): additional classes to add to the component
- extra_attributes (array of { name: '', value: '' })
- list: the sub-tree generated by the server (array of { label: '', link: '', list: [] })
- active: this is the current page, link is active (boolean, default(false))
#}
{# Internal properties #}
{% set _css_class = 'ema-side-navigation' %}
{% set _extra_attributes = '' %}
{% set _list = list %}
{% if extra_classes is defined and extra_classes is not empty %}
{% set _css_class = _css_class ~ ' ' ~ extra_classes %}
{% endif %}
{% if extra_attributes is defined and extra_attributes is not empty %}
{% for attr in extra_attributes %}
{% set _extra_attributes = _extra_attributes ~ ' ' ~ attr.name ~ '="' ~ attr.value ~ '"' %}
{% endfor %}
{% endif %}
{# Print result #}
{% macro menu_links(list, depth, parent_index) %}
{% import _self as macros %}
{% for item in list %}
{% set _current_index = parent_index ? parent_index ~ "-" ~ loop.index : loop.index %}
{% set _depth = (depth|default(0)) + 1 %}
{% set _active = item.active|default(false) %}
{% set _class = "ecl-expandable__button ema-side-navigation__link ema-side-navigation__link--depth-" ~ _depth ~ (_active ? ' ema-side-navigation__link--active') %}
<li>
{% if item.list is defined and item.list is not empty %}
<a
class="{{ _class }} ema-side-navigation__link--has-list"
href="{{ item.link }}"
aria-expanded="false">
{{ item.label }}
</a>
<ul
class="ecl-listing ecl-list--unstyled">
{{ macros.menu_links(item.list, _depth, _current_index) }}
</ul>
{% else %}
<a
class="{{ _class }}"
href="{{ item.link }}">
{{ item.label }}
</a>
{% endif %}
</li>
{% endfor %}
{% endmacro %}
{% import _self as macros %}
<div class="{{ _css_class }}"{{ _extra_attributes }}>
<ul class="ecl-listing ecl-list--unstyled">
{{ macros.menu_links(_list) }}
</ul>
</div>
{
"list": [
{
"label": "Link 1",
"link": "#",
"list": [
{
"label": "Link 1-1",
"link": "#"
},
{
"label": "Link 1-2",
"link": "#"
},
{
"label": "Link 1-3",
"link": "#",
"list": [
{
"label": "Link 1-3-1",
"link": "#",
"list": [
{
"label": "Link 1-3-1-1",
"link": "#",
"active": true
},
{
"label": "Link 1-3-1-2",
"link": "#"
}
]
},
{
"label": "Link 1-3-2",
"link": "#"
},
{
"label": "Link 1-3-3",
"link": "#"
}
]
}
]
},
{
"label": "Link 2",
"link": "#"
},
{
"label": "Link 3",
"link": "#"
},
{
"label": "Link 4",
"link": "#"
}
]
}
<div class="ema-side-navigation">
<ul class="ecl-listing ecl-list--unstyled">
<li>
<a class="ecl-expandable__button ema-side-navigation__link ema-side-navigation__link--depth-1 ema-side-navigation__link--has-list" href="#" aria-expanded="false">
Link 1
</a>
<ul class="ecl-listing ecl-list--unstyled">
<li>
<a class="ecl-expandable__button ema-side-navigation__link ema-side-navigation__link--depth-2" href="#">
Link 1-1
</a>
</li>
<li>
<a class="ecl-expandable__button ema-side-navigation__link ema-side-navigation__link--depth-2" href="#">
Link 1-2
</a>
</li>
<li>
<a class="ecl-expandable__button ema-side-navigation__link ema-side-navigation__link--depth-2 ema-side-navigation__link--has-list" href="#" aria-expanded="false">
Link 1-3
</a>
<ul class="ecl-listing ecl-list--unstyled">
<li>
<a class="ecl-expandable__button ema-side-navigation__link ema-side-navigation__link--depth-3 ema-side-navigation__link--has-list" href="#" aria-expanded="false">
Link 1-3-1
</a>
<ul class="ecl-listing ecl-list--unstyled">
<li>
<a class="ecl-expandable__button ema-side-navigation__link ema-side-navigation__link--depth-4 ema-side-navigation__link--active" href="#">
Link 1-3-1-1
</a>
</li>
<li>
<a class="ecl-expandable__button ema-side-navigation__link ema-side-navigation__link--depth-4" href="#">
Link 1-3-1-2
</a>
</li>
</ul>
</li>
<li>
<a class="ecl-expandable__button ema-side-navigation__link ema-side-navigation__link--depth-3" href="#">
Link 1-3-2
</a>
</li>
<li>
<a class="ecl-expandable__button ema-side-navigation__link ema-side-navigation__link--depth-3" href="#">
Link 1-3-3
</a>
</li>
</ul>
</li>
</ul>
</li>
<li>
<a class="ecl-expandable__button ema-side-navigation__link ema-side-navigation__link--depth-1" href="#">
Link 2
</a>
</li>
<li>
<a class="ecl-expandable__button ema-side-navigation__link ema-side-navigation__link--depth-1" href="#">
Link 3
</a>
</li>
<li>
<a class="ecl-expandable__button ema-side-navigation__link ema-side-navigation__link--depth-1" href="#">
Link 4
</a>
</li>
</ul>
</div>
-
Content:
/** * EMA Side Navigation */ .ema-side-navigation { margin: 0; } .ema-side-navigation__link { background-color: map-get($ema-colors, 'primary'); color: #fff; display: block; padding: map-get($ecl-spacing, 's'); text-decoration: none; &:hover { background-color: #fff; box-shadow: inset 0 0 0 1px map-get($ema-colors, 'primary'); color: map-get($ema-colors, 'primary'); text-decoration: underline; } &::after { float: right; line-height: map-get($ecl-font-size, 'l'); text-decoration: none; } } .ema-side-navigation__link--depth-1 { background-color: map-get($ema-colors, 'primary'); } .ema-side-navigation__link--depth-2 { background-color: map-get($ema-colors, 'blue-1'); padding-left: map-get($ecl-spacing, 'm'); } .ema-side-navigation__link--depth-3 { background-color: map-get($ema-colors, 'blue-2'); padding-left: map-get($ecl-spacing, 'l'); } .ema-side-navigation__link--depth-4 { background-color: map-get($ema-colors, 'blue-3'); padding-left: map-get($ecl-spacing, 'xl'); } .ema-side-navigation__link--active { background-color: #fff; box-shadow: inset 0 0 0 1px map-get($ema-colors, 'primary'); color: map-get($ema-colors, 'primary'); text-decoration: underline; }
- URL: /components/raw/ema-side-navigation/ema-side-navigation.scss
- Filesystem Path: framework/components/ema-side-navigation/ema-side-navigation.scss
- Size: 1.3 KB
- Handle: @ec-europa/ema-side-navigation
- Preview:
- Filesystem Path: framework/components/ema-side-navigation/ema-side-navigation.twig