HOCHSCHULZUGANG (Sonstige Elemente )

src/app/shared/components/hochschulzugang/templates

Demo Section

Each variation will be presented in the following section.

Default

Hochschulzugang

For further information please visit the following link.


Readme

hochschulzugang (component)

Description

This blueprint is based on the blueprint of Veams.


Requirements

  • Veams#5.0.0

Installation

Installation with Veams from local machine

veams install bp absolute/filepath/to/hochschulzugang


Fields

hochschulzugang.hbs

The partial is a wrapWith partial. This means that you can access all properties and hashes via props. See Mangony Handlebars Helper - wrapWith for detailed instructions.

Settings

Parameter Type Default Description
settings.hochschulzugangClasses String '' Modifier classes for component
settings.hochschulzugangContextClass String 'default' Context class of component

Content

Parameter Type Description
content.hochschulzugangField String Please add a description!

SASS

Variables

There are multiple variables which you can change:

Variable Value Description
$hochschulzugang-my-custom-var 0px Please add a description!

Modifier Classes

There are modifier classes you can add to c-hochschulzugang:

Modifier Description
is-modifier Please add a description!

Templates

hochschulzugang.hbs

<div class="c-hochschulzugang{{#if settings.hochschulzugangContextClass}}--{{settings.hochschulzugangContextClass}}{{else}}--default{{/if}}{{#if settings.hochschulzugangClasses}} {{settings.hochschulzugangClasses}}{{/if}} is-loading"
	data-css="c-hochschulzugang"
	data-js-item="js-hochschulzugang"
	data-js-module="hochschulzugang">

	<div data-js-item="js-json-link" data-js-json-link="//localhost:3000/mocks/connector/getHochschulzugang.json"></div>

	<div class="hochschulzugang__loader-container">
		<div class="hochschulzugang__loader">
			<span class="hochschulzugang__loader-box is-one"></span>
			<span class="hochschulzugang__loader-box is-two"></span>
			<span class="hochschulzugang__loader-box is-three"></span>
		</div>
	</div>

	{{#with content.sitemapHeaderArticle }}
		{{> header-article }}
	{{/with}}

	{{#with content.anchornav}}
    	{{> anchor-nav}}
    {{/with}}

	<article class="c-rte--default" data-css="c-rte">
		<div class="rte__container">
			<div class="rte__content" data-js-item="js-default-text">
				<h3>{{ content.sitemapHeaderArticle.content.articleHeadline }}</h3>
				<p>{{ content.sitemapHeaderArticle.content.articleParagraph }} - <a href="{{ content.sitemapHeaderArticle.content.articleLink }}" class="is-external" target="_blank">{{ content.sitemapHeaderArticle.content.articleLink }}</a></p>
			</div>
    		<div class="rte__content" data-js-item="js-admission-modality">
			</div>
    	</div>
	</article>

</div>

Data File

hochschulzugang.hjson

{
	"variations": {
		"default": {
			"docs": {
				"variationName": "Default"
			},
			"settings": {
				"hochschulzugangContextClass": "default",
				"hochschulzugangClasses": ""
			},
			"content": {
				"anchornav": {
					"variation": "default",
					"settings": {
						"anchorNavClasses": false,
						"hiddenListItemsId": "unique-id-hidden-list",
						"anchorNavJsOptions": ""
					},
					"content": {
						"headline": " "
					}
				},
				"sitemapHeaderArticle": {
					"variations": "noPicture",
					"settings": {
						"headerArticleContextClass": "default",
						"headerArticleClasses": false
					},
					"content": {
						"articleHeadline": "Hochschulzugang",
						"articleParagraph": "For further information please visit the following link.",
						"articleLink": "https://www.uni-muenchen.de/index.html"
					}
				}
			}
		}
	}
}

Styles

hochschulzugang.scss

/* ===================================================
component: hochschulzugang
=================================================== */

/* ---------------------------------------------------
Global Styles
--------------------------------------------------- */
[data-css="c-hochschulzugang"] {
}

/* ---------------------------------------------------
Context: Default
--------------------------------------------------- */
.c-hochschulzugang--default {

	.c-anchor-nav--default {
		display: block;
		max-width: $max-width;
		margin: 0 auto 30px;

		.grid__container {
			@include grid-container();
			max-width: calc(100% - ((100% / 14) * 2));
		}

		.grid__row {
			max-width: 100%;

			@include bp($bp-tablet-p) {
				@include rte-dimensions();
			}
		}
	}

	.infobox {
		min-height: 51px;
	}

	.rte__content > div > p {
		font-size: 1.6rem;
		line-height: 1.5;
		margin-bottom: 30px;
	}

	.hochschulzugang__loader-container {
		z-index: -1;
		opacity: 0;
	}

	.hochschulzugang__loader {
		@include centering(h);

		position: absolute;
		top: 80px;
		display: flex;
		width: 200px;
		flex-direction: row;
		background-color: $color-white;
		height: 60px;
		align-items: center;
		justify-content: center;
		pointer-events: none;
		opacity: 0;
		transition: opacity $animation-duration-std $animation-easing-std;
		z-index: 100;
		border: 1px solid $color-green;
	}

	.hochschulzugang__loader-box {
		display: block;
		margin: 10px;
		border: 1em solid $color-green;
		opacity: 0;

		/*
		MODIFIERS
		----------------------- */
		&.is-one {
			animation: boxAppear 2s linear infinite;
		}

		&.is-two {
			animation: boxAppear 2s linear .3s infinite;
		}

		&.is-three {
			animation: boxAppear 2s linear .62s infinite;
		}
	}

	&.is-loading {

		.hochschulzugang__loader-container {
			display: block;
			position: absolute;
			opacity: 1;
			z-index: 999;
			width: 100%;
			height: 100%;
			background-color: $color-white;
		}

		.hochschulzugang__loader {
			opacity: 1;
		}
	}


}

Scripts

hochschulzugang.js

/**
 * Description of Hochschulzugang.
 * Class properties and decorators are supported.
 *
 * @module Hochschulzugang
 * @version v1.0.0
 *
 * @author Ognjen Jukanovic
 */

// Imports
import $ from 'jquery';
import Component from '@veams/component';

class Hochschulzugang extends Component {
	/**
	* Class Properties
	*/
	$el = $(this.el);
	$jsonLink = $(this.options.selectors.jsonLink, this.el);
	$title;
	$subTitle;
	$admissionModalityFromUrl;
	$linkFromUrl;
	$minorSubjectsFromUrl;
	$nationalityFromUrl;
	$printStatus = false;

	/**
	 * 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: {
				jsonLink: '[data-js-item="js-json-link"]',
				mainContainer: '[data-js-item="js-hochschulzugang"]',
				anchorNavigation: '[data-js-module="anchor-nav"]',
				admissionModality: '[data-js-item="js-admission-modality"]',
				defaultText: '[data-js-item="js-default-text"]'
			},
			classes: {
				isLoading: 'is-loading'
			}
		};

		super(obj, options);
	}

	/**
	* Lifecycle Hooks
	*/
	willMount() {
		console.log('Component Hochschulzugang will mount!');
	}

	didMount() {
		console.log('Component Hochschulzugang mounted!');
	}


	/**
	 * @desc Debounce a function for a specific time
	 */
	bindEvents() {

		this.options.mainContainer = document.querySelector(
			this.options.selectors.mainContainer
		);

		this.options.jsonLink = document.querySelector(
			this.options.selectors.jsonLink
		).getAttribute("data-js-json-link");

		this.options.anchorNavigation = this.options.mainContainer.querySelector(
			this.options.selectors.anchorNavigation
		);

		this.options.admissionModality = this.options.mainContainer.querySelector(
			this.options.selectors.admissionModality
		);

		this.options.defaultText = document.querySelector(
			this.options.selectors.defaultText
		);

		// Header Article
		const urlOptions = decodeURI(window.location.href.split('?')[1]).split('&');
		if (urlOptions[0] !== 'undefined') {
			urlOptions.forEach((key) => {
				const option = key.split('=');

				if (option[0] === 'nationality') this.$title = option[1];
				// if (option[0] === 'nationality') this.options.mainContainer.querySelector('.header-article__article-headline').innerText = option[1];
				if (option[0] === 'admissionModality') {
					this.$admissionModalityFromUrl = option[1];
					// this.options.mainContainer.querySelector('.header-article__article-paragraph').innerText = option[1];

					this.$subTitle = option[1];
				}
				if (option[0] === 'link') this.$linkFromUrl = option[1];
				if (option[0] === 'minorSubjects') this.$minorSubjectsFromUrl = option[1];
				if (option[0] === 'nationality') this.$nationalityFromUrl = option[1];
			});
		} else {
			this.options.mainContainer.classList.remove(this.options.classes.isLoading);
			return 0;
		}

		this.getAndFillData();
		this.options.mainContainer.classList.remove(this.options.classes.isLoading);
	}

	/**
	 * @desc Data initialization
	 * @param {String} data - Results from JSON file
	 */
	initializationForm(data) {

		console.log('DD1', data.settings.nationality);
		console.log('DD2', this.checkIfExist(this.$nationalityFromUrl, data.settings.nationality));

		if (this.checkIfExist(this.$admissionModalityFromUrl, data.settings.admissionModality) && this.checkIfExist(this.$nationalityFromUrl, data.settings.nationality)) {
			// Admission Modality
			for (let item of data.admissionModality) {
				if (item.admissionModality === this.$admissionModalityFromUrl) {
					this.createDomElement(item, 'admissionModality');
				}
			}
		}

		// Link To Subject
		let linkParagraph = document.createElement('p');
		let linkHref = document.createElement('a');
		linkHref.innerHTML = data.linkToSubject.title;
		linkHref.href = this.$linkFromUrl;
		linkHref.target = '_blank';
		linkHref.classList.add('is-external');
		linkParagraph.appendChild(linkHref)
		this.options.admissionModality.appendChild(linkParagraph);

		// Minor Subjects
		let minorSubjectsTitle = document.createElement('h3');
		let minorSubjectsParagraph = document.createElement('p');
		minorSubjectsTitle.innerHTML = data.minorSubjects.title;
		minorSubjectsParagraph.innerHTML = data.minorSubjects.content[this.$minorSubjectsFromUrl];
		this.options.admissionModality.appendChild(minorSubjectsTitle);
		this.options.admissionModality.appendChild(minorSubjectsParagraph);

		// Anchor Title
		this.options.anchorNavigation.querySelector('.anchor-nav__headline').textContent = data.anchorLinks.title;

		if (this.checkIfExist(this.$admissionModalityFromUrl, data.settings.admissionModality) && this.checkIfExist(this.$nationalityFromUrl, data.settings.nationality)) {

			// Nationality
			this.printResult(data, 'nationality');

			// Application
			this.printResult(data, 'application');

			// Admission
			this.printResult(data, 'admission');

			// Registration
			this.printResult(data, 'registration');

			// Subject Change
			this.printResult(data, 'subjectChange');

			this.options.mainContainer.querySelector('.header-article__article-headline').innerText = this.$title;
			this.options.mainContainer.querySelector('.header-article__article-paragraph').innerHTML = this.$subTitle;
			this.options.defaultText.remove();
		} else {
			this.options.anchorNavigation.querySelector('.anchor-nav__headline').remove();
			this.options.anchorNavigation.querySelector('.anchor-nav__list').remove();
			this.options.admissionModality.remove();
		}
	}

	/**
	 * @desc Check If Element Exist
	 * @param {String} key - Key value
	 * @param {Object} items - Content
	 */
	checkIfExist(key, items) {
		for (let item of items) {
			if (item === key) return true;
		}
		return false
	}

	/**
	 * @desc Print Results
	 * @param {Object} items - Content
	 * @param {String} key - Key value
	 */
	printResult(items, key) {
		for (let item of items[key]) {
			if (item.admissionModality === this.$admissionModalityFromUrl && item.nationality === this.$nationalityFromUrl) {
				this.createDomElement(item, key);
			}
		}
	}

	/**
	 * @desc Create Dom Elements H2 and p
	 * @param {Object} item - Content
	 * @param {String} key - Key value
	 */
	createDomElement(item, key) {
		let textTitle;

		if (key === 'nationality') {
			textTitle = item.nationality;
		} else if (key === 'admissionModality') {
			textTitle = item.admissionModality;
		} else {
			textTitle = item.title;
		}

		let title = document.createElement('h2');
		title.id = key;
		title.innerHTML = textTitle;
		this.options.admissionModality.appendChild(title);

		let a = document.createElement('a');
		a.setAttribute('data-js-item', 'anchor-link')
		a.classList.add('anchor-nav__link');
		a.href = '#' + key;
		a.title = textTitle;
		a.innerHTML = textTitle;

		let li = document.createElement('li');
		li.classList.add('anchor-nav__list-item');
		li.appendChild(a);
		this.options.anchorNavigation.querySelector('.anchor-nav__list').appendChild(li);

		let paragraph = document.createElement('div');
		paragraph.classList.add('rte__contentcreator');
		paragraph.innerHTML = item.content;
		this.options.admissionModality.appendChild(paragraph);
	}

	/**
	 * @desc Get data from JSON and fill in function initializationForm
	 */
	getAndFillData() {
		const uri = this.options.jsonLink;
		if (uri) {
			this.getJSON(uri, (data) => {
				if (typeof data !== 'undefined') this.initializationForm(data);
			});
		}
	}

	/**
	 * @desc JSON request
	 * @param {Object} url - Link to JSON file
	 * @param {Object} callback - For results
	 * @param {Object} requestHeader - For request with Header like user, pass, type...
	 * @return {callback} - Return callback
	 */
	getJSON = (url, callback, requestHeader) => {
		const xhr = new XMLHttpRequest();
		xhr.open('GET', url, true);
		if (requestHeader) {
			requestHeader.forEach((element) => {
				xhr.setRequestHeader(element.name, element.value);
			});
		}
		xhr.onload = () => {
			if (xhr.readyState === 4 && xhr.status === 200) {
				const res = xhr.responseText;
				callback(JSON.parse(res));
			} else {
				console.error(xhr.statusText);
			}
		};
		xhr.send(null);
	};

	/**
	 * Render class
	 */
	render() {
		return this;
	}
}

export default Hochschulzugang;

HTML Output

Default

<div class="c-hochschulzugang--default is-loading" data-css="c-hochschulzugang" data-js-item="js-hochschulzugang" data-js-module="hochschulzugang">
	<div data-js-item="js-json-link" data-js-json-link="//localhost:3000/mocks/connector/getHochschulzugang.json"></div>
	<div class="hochschulzugang__loader-container">
		<div class="hochschulzugang__loader">
			<span class="hochschulzugang__loader-box is-one"></span>
			<span class="hochschulzugang__loader-box is-two"></span>
			<span class="hochschulzugang__loader-box is-three"></span>
		</div>
	</div>
	<div class="c-header-article--default" data-css="c-header-article">
		<div class="grid__container">
			<div class="grid__row">
				<div class="header-article__container">
					<article class="header-article__article-wrapper">
						<h1 class="header-article__article-headline">Hochschulzugang</h1>
						<p class="header-article__article-paragraph">For further information please visit the following link.</p>
					</article>
				</div>
			</div>
		</div>
	</div>
	<div class="c-anchor-nav--default" data-css="c-anchor-nav" data-js-module="anchor-nav">
		<div class="grid__container">
			<div class="grid__row">
				<h3 class="anchor-nav__headline"> </h3>
				<ul class="anchor-nav__list">
				</ul>
				<div id="unique-id-hidden-list" class="anchor-nav__hidden-list-wrapper is-closed" data-js-item="hidden-list">
					<ul class="anchor-nav__list">
					</ul>
				</div>
			</div>
		</div>
	</div>
	<article class="c-rte--default" data-css="c-rte">
		<div class="rte__container">
			<div class="rte__content" data-js-item="js-default-text">
				<h3>Hochschulzugang</h3>
				<p>For further information please visit the following link. - <a href="https://www.uni-muenchen.de/index.html" class="is-external" target="_blank">https://www.uni-muenchen.de/index.html</a></p>
			</div>
			<div class="rte__content" data-js-item="js-admission-modality">
			</div>
		</div>
	</article>
</div>

Wonach suchst du?