SKIPLINKS (Sonstige Elemente )

src/app/core/components/skiplinks/templates

Demo Section

Each variation will be presented in the following section.

Default


Readme

skiplinks

Description

Skiplinks allow screenreader users to quickly skip to relevant content.


Requirements


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

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>

Wonach suchst du?