TOOLBOX-MODAL (LMU Workspace Module )
src/app/shared/components/toolbox-modal/templates
Demo Section
Each variation will be presented in the following section.
Readme
toolboxModal (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/toolbox-modal
Fields
toolbox-modal.hbs
Settings
| Parameter | Type | Default | Description | 
|---|---|---|---|
| settings.toolboxModalClasses | String | '' | 
Modifier classes for component | 
| settings.toolboxModalContextClass | String | 'default' | 
Context class of component | 
| settings.toolboxModalJsOptions | Object | null | 
JavaScript options object which gets stringified | 
Content
| Parameter | Type | Description | 
|---|---|---|
| content.toolboxModalField | String | Please add a description! | 
JavaScript Options
The module gives you the possibility to override default JS options:
| Option | Type | Default | Description | 
|---|---|---|---|
| optionOne | String | 'is-option' | 
Please add a description! | 
SASS
Variables
There are multiple variables which you can change:
| Variable | Value | Description | 
|---|---|---|
| $toolbox-modal-my-custom-var | 0px | 
Please add a description! | 
Modifier Classes
There are modifier classes you can add to c-toolbox-modal:
| Modifier | Description | 
|---|---|
| is-modifier | Please add a description! | 
Templates
toolbox-modal.hbs
<div class="c-toolbox-modal{{#if settings.toolboxModalContextClass}}--{{settings.toolboxModalContextClass}}{{else}}--default{{/if}}{{#if settings.toolboxModalClasses}} {{settings.toolboxModalClasses}}{{/if}}"
     data-css="c-toolbox-modal"
     data-js-module="toolbox-modal"{{#if settings.toolboxModalJsOptions}}
     data-js-options='{{stringify settings.toolboxModalJsOptions}}'{{/if}}>
	<h2>Animated Modal with Header and Footer</h2>
	<!-- Trigger/Open The Modal -->
	<button id="myBtn" data-js-item="open-modal">Open Modal</button>
	<!-- The Modal -->
	<div class="modal">
		<div class="add-toolbox--modal">
			<div class="grid__container">
				<div class="grid__row">
					<div class="add-toolbox__content">
						<div class="add-toolbox__header">
							<h2 class="add-toolbox__headline">Tool hinzufugen</h2>
							<span data-js-item="close-modal" class="close">×</span>
						</div>
						<form class="c-form--default is-form is-error" method="POST"
							  data-css="c-form" data-js-module="form-ajax">
							<div class="form__row">
								<div class="form__col is-grid-col is-col-tablet-p-12">
									<div class="form__radio">
										<div class="form__radio-wrapper">
											<ul class="form__radio-list">
												<li class="form__radio-item">
													<input id="radio-01" name="radio" type="radio" value="radio-01" checked="checked" class="form__radio-input">
													<label role="button" for="radio-01" class="form__radio-label">
														Radiobutton aktiv
													</label>
												</li>
												<li class="form__radio-item">
													<input id="radio-02" name="radio" type="radio" value="radio-02" class="form__radio-input">
													<label role="button" for="radio-02" class="form__radio-label">
														Radiobutton passiv
													</label>
												</li>
												<li class="form__radio-item">
													<input id="radio-03" name="radio" type="radio" value="radio-03" class="form__radio-input">
													<label role="button" for="radio-03" class="form__radio-label">
														Radiobutton passiv
													</label>
												</li>
											</ul>
										</div>
									</div>
								</div>
							</div>
							<div class="form__row">
								<div class="form__col is-col-tablet-p-12">
									<p class="add-toolbox-info__text">
										Die mit <span>*</span> gekennzeichneten Felder sind Pflichtfelder
									</p>
								</div>
							</div>
							<div class="form__row">
								<div class="form__col is-grid-col is-col-tablet-p-4">
									<div class="form__input">
										<div class="form__label-wrapper">
											<label for="url" class="form__input-label">
												URL  <abbr title="Required">*</abbr>
											</label>
										</div>
										<div class="form__input-wrapper">
											<input id="url" name="url" type="url" placeholder="http://www.lmu.de/" required="required" class="form__input-text">
										</div>
									</div>
								</div>
								<div class="form__col is-grid-col is-col-tablet-p-4">
									<div class="form__input">
										<div class="form__label-wrapper">
											<label for="text1" class="form__input-label">
												Name  <abbr title="Required">*</abbr>
											</label>
										</div>
										<div class="form__input-wrapper">
											<input id="text1" name="name" type="text" required="required" class="form__input-text">
										</div>
									</div>
								</div>
								<div class="form__col is-grid-col is-col-tablet-p-4">
									<div class="form__input">
										<div class="form__label-wrapper">
											<label for="shorname" class="form__input-label">
												Namenskürzel
											</label>
										</div>
										<div class="form__input-wrapper">
											<input id="shorname" name="shortname" type="text"  class="form__input-text">
										</div>
									</div>
								</div>
							</div>
							<div class="form__row ">
								<div class="form__col is-grid-col is-col-tablet-p-12">
									<button type="submit" class="form__submit">
										<span class="from_submit-arrow"></span>
										<span class="form__submit-text">Speichern</span>
									</button>
								</div>
							</div>
						</form>
					</div>
				</div>
			</div>
		</div>
	</div>
</div>
							Data File
toolbox-modal.hjson
{
	"variations": {
		"default": {
			"docs": {
				"variationName": "Default"
			},
			"settings": {
				"toolboxModalContextClass": "default",
				"toolboxModalClasses": "",
				"toolboxModalJsOptions": {}
			},
			"content": {}
		}
	}
}
								Styles
toolbox-modal.scss
/* ===================================================
component: toolbox-modal
=================================================== */
/* ---------------------------------------------------
Global Styles
--------------------------------------------------- */
[data-css="c-toolbox-modal"] {	
	/* The Modal (background) */
	.modal {
		display: none; /* Hidden by default */
		position: fixed; /* Stay in place */
		z-index: 1; /* Sit on top */
		padding-top: 100px; /* Location of the box */
		left: 0;
		top: 0;
		width: 100%; /* Full width */
		height: 100%; /* Full height */
		overflow: auto; /* Enable scroll if needed */
		background-color: rgb(0,0,0); /* Fallback color */
		background-color: rgba(0,0,0,0.8); /* Black w/ opacity */
		.grid__row {
			margin: 0 auto;
		}
	}
	.display {
		display: block;
	}
	/* Add Animation */
	@-webkit-keyframes animatetop {
		from {top:-300px; opacity:0}
		to {top:0; opacity:1}
	}
	@keyframes animatetop {
		from {top:-300px; opacity:0}
		to {top:0; opacity:1}
	}
	.add-toolbox--modal{
		background: #FFFFFF;
		box-shadow: 3px 3px 5px 0 rgba(0,0,0,0.20);
	}
	.add-toolbox__content {
		.add-toolbox__header {
			display: flex;
			justify-content: space-between;
			.add-toolbox__headline {
				font-family: Roboto-Bold;
				font-size: 20px;
				color: #202321;
				letter-spacing: 0.3px;
				line-height: 28px;
				margin-top: 2rem;
				margin-bottom: 2rem;
			}
			/* The Close Button */
			.close {
				color: $color-green;
				font-size: 28px;
				font-weight: bold;
				margin-top: 1rem;
			}
			.close:hover,
			.close:focus {
				color: #000;
				text-decoration: none;
				cursor: pointer;
			}
		}
		.add-toolbox-info__text {
			font-family: Roboto-Bold;
			font-size: 12px;
			color: #202321;
			letter-spacing: 0.22px;
			line-height: 24px;
			span{
				color: $color-green;
			}
		}
	}
}
/* ---------------------------------------------------
Context: Default
--------------------------------------------------- */
.c-toolbox-modal--default {
}
								Scripts
toolbox-modal.js
/**
 * Description of ToolboxModal.
 * Class properties and decorators are supported.
 *
 * @module ToolboxModal
 * @version v1.0.0
 *
 * @author Serkan Ertan
 */
// Imports
import $ from 'jquery';
import Component from '@veams/component';
class ToolboxModal extends Component {
	/**
	* Class Properties
	*/
	$el = $(this.el);
	modal;
    /**
     * Event & subscribe handling
     */
	// Local Handlers
    get events() {
        return {
			'{{context.EVENTS.click}} {{this.options.selectors.openModal}}': 'onOpen',
			'{{context.EVENTS.click}} {{this.options.selectors.closeModal}}': 'onClose',
        };
    }
	onOpen = (evt, target) => {
        console.log(`You clicked on: `, target);
        console.log('You got the following event: ', evt);
        // Modal DOM elementi bul
		this.modal = this.$el.find('.modal');
		if (this.modal) {
			this.modal.addClass('display');
		}
	};
	onClose = (evt, target) => {
		if (this.modal) {
			this.modal.removeClass('display');
			this.modal = null;
		} else {
			this.modal = this.$el.find('.modal');
			if (this.modal) {
				this.modal.removeClass('display');
				this.modal = null;
			}
		}
	}
	onWindow = (evt) => {
		if (evt.target === this.modal ) {
			this.modal.removeClass('display');
		}
	}
	// Global Handlers
    get subscribe() {
        return {
            '{{context.EVENTS.resize}}': 'handleResize'
        };
    }
	handleResize = () => {
		console.log(`Browser was resized and catched by ToolboxModal!`);
	};
	/**
	 * 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: {
				openModal: '[data-js-item="open-modal"]',
				closeModal: '[data-js-item="close-modal"]'
			},
			classes: {}
		};
		super(obj, options);
	}
	/**
	* Lifecycle Hooks
	*/
	willMount() {
		console.log('Component ToolboxModal will mount!');
	}
	didMount() {
		console.log('Component ToolboxModal mounted!');
	}
	/**
	 * Render class
	 */
	render() {
		return this;
	}
}
export default ToolboxModal;
								HTML Output
Default
<div class="c-toolbox-modal--default" data-css="c-toolbox-modal" data-js-module="toolbox-modal" data-js-options='{}'>
	<h2>Animated Modal with Header and Footer</h2>
	<!-- Trigger/Open The Modal -->
	<button id="myBtn" data-js-item="open-modal">Open Modal</button>
	<!-- The Modal -->
	<div class="modal">
		<div class="add-toolbox--modal">
			<div class="grid__container">
				<div class="grid__row">
					<div class="add-toolbox__content">
						<div class="add-toolbox__header">
							<h2 class="add-toolbox__headline">Tool hinzufugen</h2>
							<span data-js-item="close-modal" class="close">×</span>
						</div>
						<form class="c-form--default is-form is-error" method="POST" data-css="c-form" data-js-module="form-ajax">
							<div class="form__row">
								<div class="form__col is-grid-col is-col-tablet-p-12">
									<div class="form__radio">
										<div class="form__radio-wrapper">
											<ul class="form__radio-list">
												<li class="form__radio-item">
													<input id="radio-01" name="radio" type="radio" value="radio-01" checked="checked" class="form__radio-input">
													<label role="button" for="radio-01" class="form__radio-label">
														Radiobutton aktiv
													</label>
												</li>
												<li class="form__radio-item">
													<input id="radio-02" name="radio" type="radio" value="radio-02" class="form__radio-input">
													<label role="button" for="radio-02" class="form__radio-label">
														Radiobutton passiv
													</label>
												</li>
												<li class="form__radio-item">
													<input id="radio-03" name="radio" type="radio" value="radio-03" class="form__radio-input">
													<label role="button" for="radio-03" class="form__radio-label">
														Radiobutton passiv
													</label>
												</li>
											</ul>
										</div>
									</div>
								</div>
							</div>
							<div class="form__row">
								<div class="form__col is-col-tablet-p-12">
									<p class="add-toolbox-info__text">
										Die mit <span>*</span> gekennzeichneten Felder sind Pflichtfelder
									</p>
								</div>
							</div>
							<div class="form__row">
								<div class="form__col is-grid-col is-col-tablet-p-4">
									<div class="form__input">
										<div class="form__label-wrapper">
											<label for="url" class="form__input-label">
												URL <abbr title="Required">*</abbr>
											</label>
										</div>
										<div class="form__input-wrapper">
											<input id="url" name="url" type="url" placeholder="http://www.lmu.de/" required="required" class="form__input-text">
										</div>
									</div>
								</div>
								<div class="form__col is-grid-col is-col-tablet-p-4">
									<div class="form__input">
										<div class="form__label-wrapper">
											<label for="text1" class="form__input-label">
												Name <abbr title="Required">*</abbr>
											</label>
										</div>
										<div class="form__input-wrapper">
											<input id="text1" name="name" type="text" required="required" class="form__input-text">
										</div>
									</div>
								</div>
								<div class="form__col is-grid-col is-col-tablet-p-4">
									<div class="form__input">
										<div class="form__label-wrapper">
											<label for="shorname" class="form__input-label">
												Namenskürzel
											</label>
										</div>
										<div class="form__input-wrapper">
											<input id="shorname" name="shortname" type="text" class="form__input-text">
										</div>
									</div>
								</div>
							</div>
							<div class="form__row ">
								<div class="form__col is-grid-col is-col-tablet-p-12">
									<button type="submit" class="form__submit">
										<span class="from_submit-arrow"></span>
										<span class="form__submit-text">Speichern</span>
									</button>
								</div>
							</div>
						</form>
					</div>
				</div>
			</div>
		</div>
	</div>
</div>