TOOLBOX-MODAL (LMU Workspace Module )

src/app/shared/components/toolbox-modal/templates

Demo Section

Each variation will be presented in the following section.

Default

Animated Modal with Header and Footer


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">&times;</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">&times;</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>

Wonach suchst du?