Hochschulzugang
For further information please visit the following link.
Each variation will be presented in the following section.
For further information please visit the following link.
For further information please visit the following link. - https://www.uni-muenchen.de/index.html
component
)This blueprint is based on the blueprint of Veams.
Veams#5.0.0
veams install bp absolute/filepath/to/hochschulzugang
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.
Parameter | Type | Default | Description |
---|---|---|---|
settings.hochschulzugangClasses | String | '' |
Modifier classes for component |
settings.hochschulzugangContextClass | String | 'default' |
Context class of component |
Parameter | Type | Description |
---|---|---|
content.hochschulzugangField | String | Please add a description! |
There are multiple variables which you can change:
Variable | Value | Description |
---|---|---|
$hochschulzugang-my-custom-var | 0px |
Please add a description! |
There are modifier classes you can add to c-hochschulzugang
:
Modifier | Description |
---|---|
is-modifier | Please add a description! |
<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>
{
"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"
}
}
}
}
}
}
/* ===================================================
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;
}
}
}
/**
* 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;
<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>