SKIPLINKS (Sonstige Elemente )
src/app/core/components/skiplinks/templates
Demo Section
Each variation will be presented in the following section.
Readme
skiplinks
Description
Skiplinks allow screenreader users to quickly skip to relevant content.
Requirements
- @veams/core - Veams Core Framework.
- @veams/query or
jquery
- Veams Query or jQuery. - @veams/component - Veams Component.
Fields
skiplinks.hbs
Settings
Parameter | Type | Default | Description |
---|---|---|---|
settings.skiplinksClasses | String | '' |
Modifier classes for component |
Content
Parameter | Type | Description |
---|---|---|
content.items | Array | List of skip link items |
skiplinks__item.hbs
Settings
Parameter | Type | Default | Description |
---|---|---|---|
settings.focusTargetId | String | '' |
Id of element which should be focused on click or enter |
Content
Parameter | Type | Description |
---|---|---|
content.linkHref | String | Href for link |
content.linkText | String | Text for link |
JavaScript Options
The module gives you the possibility to override default options:
Option | Type | Default | Description |
---|---|---|---|
selectors.skipLinksSearch | String | '[data-js-item="skip-links-search"]' |
Element selector for skip link for search |
Templates
skiplinks.hbs
<nav class="c-skiplinks{{#if settings.skiplinksClasses}} {{settings.skiplinksClasses}}{{/if}}" data-js-module="skiplinks" data-js-item="skip-links">
<h6 class="skiplinks__headline">Navigation und Service</h6>
<p class="skiplinks__text"><em>Direkt zu:</em></p>
{{#if content.items }}
<ul class="skiplink__list">
{{#each content.items }}
{{> skiplinks__item }}
{{/each}}
</ul>
{{/if}}
</nav>
skiplinks__item.hbs
<li class="skiplink__list-item">
<a class="skiplink__link"{{#if settings.dataJsItem}}
data-js-item="{{settings.dataJsItem}}"{{/if}} href="{{content.linkHref}}">{{content.linkText}}</a>
</li>
Data File
skiplinks.hjson
{
"title": "Skiplinks",
"variations": {
"default": {
"docs": {
"variationName": "Default"
},
"settings": {
"skiplinksClasses": false
},
"content": {
"items": [
{
"content": {
"linkText": "Inhalt",
"linkHref": "#r-main"
}
},
{
"settings": {
"dataJsItem": "skip-links-nav"
},
"content": {
"linkText": "Hauptmenu",
"linkHref": "#stacknav"
}
},
{
"settings": {
"dataJsItem": "skip-links-search"
},
"content": {
"linkText": "Suche",
"linkHref": "#r-search"
}
}
]
}
}
}
}
Styles
skiplinks.scss
/* ===================================================
coreComponent: skiplinks
=================================================== */
.c-skiplinks {
position: fixed;
top: 0;
left: 0;
z-index: 1000;
width: 100%;
.skiplinks__headline,
.skiplinks__text,
.skiplink__link {
width: 1px;
height: 1px;
overflow: hidden;
left: -9999px;
position: absolute;
}
.skiplinks__headline,
.skiplinks__text {
@include hidden-text();
}
.skiplink__link {
/*
MODIFIERS
----------------------- */
&.a11y-focus-key {
width: 100%;
height: auto;
top: 2px;
left: 0;
text-align: center;
z-index: 1000;
background-color: $color-white;
color: $color-dark;
padding: 6px;
}
}
}
Scripts
skiplinks.js
/**
* Description of Skiplinks.
*
* @module Skiplinks
* @version v1.0.0
*
* @author Andy Gutsche
*/
// Imports
import Component from '@veams/component'; // Only use that in combination with browserify
import $ from 'jquery';
class Skiplinks extends Component {
$el = $(this.el);
/**
* Constructor for our class
*
* @see module.js
*
* @param {Object} obj - Object which is passed to our class
* @param {Object} obj.el - element which will be saved in this.el
* @param {Object} obj.options - options which will be passed in as JSON object
*/
constructor(obj) {
let options = {
selectors: {
skipLinksSearch: '[data-js-item="skip-links-search"]',
skipLinksNav: '[data-js-item="skip-links-nav"]'
},
navButton: [],
stackNavElement: [],
mobileNavElement: []
};
super(obj, options);
}
/**
* Get module information
*/
static get info() {
return {
version: '1.0.0'
};
}
/**
* Event handling
*/
get events() {
return {
'{{context.EVENTS.click}} {{this.options.selectors.skipLinksSearch}}': 'onClick',
'{{context.EVENTS.click}} {{this.options.selectors.skipLinksNav}}': 'onClickNav'
};
}
/**
* Go to the previous slide.
*
* @param {object} e - Event object.
*/
onClick(e) {
e.preventDefault();
let browserWidth = this.context.detections.width;
this.context.Vent.trigger(this.context.EVENTS.searchOverlay.toggle);
}
/**
* Go to the Navigation
*
* @param {object} e - Event object.
*/
onClickNav(e) {
// e.preventDefault();
this.options.navButton = [].slice.call(
document.querySelectorAll(
'[data-js-item="js-skip-links-navvuebutton"]'
)
);
if (this.options.navButton.length > 0) {
this.options.navButton[0].click();
}
}
}
export default Skiplinks;
HTML Output
Default
<nav class="c-skiplinks" data-js-module="skiplinks" data-js-item="skip-links">
<h6 class="skiplinks__headline">Navigation und Service</h6>
<p class="skiplinks__text"><em>Direkt zu:</em></p>
<ul class="skiplink__list">
<li class="skiplink__list-item">
<a class="skiplink__link" href="#r-main">Inhalt</a>
</li>
<li class="skiplink__list-item">
<a class="skiplink__link" data-js-item="skip-links-nav" href="#stacknav">Hauptmenu</a>
</li>
<li class="skiplink__list-item">
<a class="skiplink__link" data-js-item="skip-links-search" href="#r-search">Suche</a>
</li>
</ul>
</nav>