SEARCH-OPTION (component )
src/app/shared/components/search-option/templates
Demo Section
Each variation will be presented in the following section.
Readme
searchOption (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/search-option
Fields
search-option.hbs
Settings
Parameter | Type | Default | Description |
---|---|---|---|
settings.searchOptionClasses | String | '' |
Modifier classes for component |
settings.searchOptionContextClass | String | 'default' |
Context class of component |
settings.searchOptionJsOptions | Object | null |
JavaScript options object which gets stringified |
Content
Parameter | Type | Description |
---|---|---|
content.searchOptionField | 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 |
---|---|---|
$search-option-my-custom-var | 0px |
Please add a description! |
Modifier Classes
There are modifier classes you can add to c-search-option
:
Modifier | Description |
---|---|
is-modifier | Please add a description! |
Templates
search-option.hbs
<div class="c-search-option{{#if settings.searchOptionContextClass}}--{{settings.searchOptionContextClass}}{{else}}--default{{/if}}{{#if settings.searchOptionClasses}} {{settings.searchOptionClasses}}{{/if}}"
data-css="c-search-option"
data-js-module="search-option"{{#if settings.searchOptionJsOptions}}
data-js-options='{{stringify settings.searchOptionJsOptions}}'{{/if}}>
{{#if settings.searchOptionForm}}<form name="search-option-radio" data-js-item="js-search-option-form" class="search-option__form c-form--gsearch" action="#" method="get">{{/if}}
{{#each content.searchoptionradio}}
{{> form__radio}}
{{/each}}
{{#if settings.searchOptionForm}}<input type="hidden" data-js-item="js-search-option-input-hidden" name="q" value=""></form>{{/if}}
</div>
Data File
search-option.hjson
{
"variations": {
"default": {
"docs": {
"variationName": "Default"
},
"settings": {
"searchOptionContextClass": "default",
"searchOptionClasses": "",
"searchOptionJsOptions": {}
},
"content": {
"searchoptionradio": [
{
"settings": {
"colClasses": "is-grid-col is-col-tablet-p-12",
"inputClasses": "is-radios",
"id": "radios",
"required": false,
"typeOf": "radio",
"attributes" : [
{
"attrKey": "data-css",
"attrValue": "c-form"
}
]
},
"content": {
"radios": [
{
"settings": {
"wrapperClass": "is-radio-wrapper",
"inputClass": false,
"required": false,
"dataAttr": false,
"id": "gsearch-1",
"value": "gsearch-1",
"name": "gsearch-t",
"labelClasses": "is-label",
"attributes" : [
{
"attrKey": "checked",
"attrValue": "checked"
}
]
},
"content": {
"label": "in LMU.de"
}
},
{
"settings": {
"wrapperClass": "is-radio-wrapper",
"inputClass": false,
"required": false,
"dataAttr": false,
"id": "gsearch-2",
"value": "gsearch-2",
"name": "gsearch-t",
"labelClasses": "is-label"
},
"content": {
"label": "in allen LMU-Webseiten"
}
}
]
}
}
]
}
},
"nav": {
"docs": {
"variationName": "Radio Nav"
},
"settings": {
"searchOptionContextClass": "nav",
"searchOptionClasses": "",
"searchOptionJsOptions": {},
"searchOptionForm": "yes"
},
"content": {
"searchoptionradio": [
{
"settings": {
"colClasses": "is-grid-col is-col-tablet-p-12",
"inputClasses": "is-radios",
"id": "radios",
"required": false,
"typeOf": "radio",
"attributes" : [
{
"attrKey": "data-css",
"attrValue": "c-form"
}
]
},
"content": {
"radios": [
{
"settings": {
"wrapperClass": "is-radio-wrapper",
"inputClass": false,
"required": false,
"dataAttr": false,
"id": "gsearch-detail-1",
"value": "gsearch-1",
"name": "gsearch-t",
"labelClasses": "is-label",
"attributes" : [
{
"attrKey": "checked",
"attrValue": "checked"
},
{
"attrKey": "data-js-item",
"attrValue": "js-search-option-radio"
}
]
},
"content": {
"label": "in LMU.de"
}
},
{
"settings": {
"wrapperClass": "is-radio-wrapper",
"inputClass": false,
"required": false,
"dataAttr": false,
"id": "gsearch-detail-2",
"value": "gsearch-2",
"name": "gsearch-t",
"labelClasses": "is-label",
"attributes" : [
{
"attrKey": "data-js-item",
"attrValue": "js-search-option-radio"
}
]
},
"content": {
"label": "in allen LMU-Webseiten"
}
}
]
}
}
]
}
}
}
}
Styles
search-option.scss
/* ===================================================
component: search-option
=================================================== */
/* ---------------------------------------------------
Global Styles
--------------------------------------------------- */
[data-css="c-search-option"] {
}
/* ---------------------------------------------------
Context: Default
--------------------------------------------------- */
.c-search-option--default {
padding-bottom: 20px;
}
Scripts
search-option.js
/**
* Description of SearchOption.
* Class properties and decorators are supported.
*
* @module SearchOption
* @version v1.0.0
*
* @author your_name
*/
// Imports
import $ from 'jquery';
import Component from '@veams/component';
class SearchOption extends Component {
/**
* Class Properties
*/
$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: {
radioButton: '[data-js-item="js-search-option-radio"]'
},
classes: {},
searchOptionRadioButtons: [],
searchOptionForm: "",
searchOptionHidden: "",
searchOptionSearchBox: "",
searchOptionGoogleInput: ""
};
super(obj, options);
}
didMount() {
console.log('Component SearchOption mounted!');
this.options.searchOptionForm = document.querySelector(
'[data-js-item="js-search-option-form"]'
);
if(this.options.searchOptionForm !== null) {
this.options.searchOptionRadioButtons = [].slice.call(
this.options.searchOptionForm.querySelectorAll(
'[data-js-item="js-search-option-radio"]'
)
);
if (this.options.searchOptionRadioButtons.length > 0) {
this.options.searchOptionRadioButtons.forEach(searchradiobutton => {
searchradiobutton.checked = false;
});
let radiobuttonvalue = this.getQueryStringarameterByName('gsearch-t');
if(radiobuttonvalue !== null) {
let isactive = false;
this.options.searchOptionRadioButtons.forEach(searchradiobutton => {
if(searchradiobutton.value == radiobuttonvalue) {
searchradiobutton.checked = true;
isactive = true;
}
});
if (!isactive){
this.options.searchOptionRadioButtons[0].checked = true;
}
} else {
this.options.searchOptionRadioButtons[0].checked = true;
}
}
}
}
/**
* Render class
*/
render() {
return this;
}
get events() {
return {
'{{context.EVENTS.click}} {{this.options.selectors.radioButton}}': 'radioButtonChangeSearch'
};
}
/** =================================================
* CUSTOM OVERLAY METHODS
* ================================================= */
/**
* Change radiobutton and send new Search request.
*
* @param {object} e - Event object.
* @param {object} currentTarget - Target to which listener was attached.
*/
radioButtonChangeSearch(e, currentTarget) {
if(this.options.searchOptionForm !== null) {
this.options.searchOptionHidden = this.options.searchOptionForm.querySelector(
'[data-js-item="js-search-option-input-hidden"]'
);
this.options.searchOptionSearchBox = document.querySelector(
'[data-js-item="js-search-box-google"]'
);
if(this.options.searchOptionSearchBox !== null) {
this.options.searchOptionGoogleInput= this.options.searchOptionSearchBox.querySelector(
'[name="search"]'
);
}
if(this.options.searchOptionGoogleInput !== null) {
if (this.options.searchOptionRadioButtons.length > 0) {
this.options.searchOptionRadioButtons.forEach(searchradiobutton => {
searchradiobutton.checked = false;
});
}
currentTarget.checked = true;
this.options.searchOptionHidden.value = this.options.searchOptionGoogleInput.value;
this.options.searchOptionForm.submit();
}
}
}
/**
* Get the Parameter for the radiobuttons.
*
* @param {string} nameparam - Parameter to search for.
* @param {string} url - The URL from the website with all get-Parameters
*/
getQueryStringarameterByName(nameparam, url) {
if(!url){
url = window.location.href;
}
nameparam = nameparam.replace(/[\[\]]/g, "\\$&");
var regex = new RegExp("[?&]" + nameparam + "(=([^&#]*)|&|#|$)"),
results = regex.exec(url);
if (!results) return null;
if (!results[2]) return '';
return decodeURIComponent(results[2].replace(/\+/g, " "));
}
}
export default SearchOption;
HTML Output
Default
<div class="c-search-option--default" data-css="c-search-option" data-js-module="search-option" data-js-options='{}'>
<div class="form__radio" data-css="c-form">
<div class="form__radio-wrapper">
<ul class="form__radio-list">
<li class="form__radio-item">
<input id="gsearch-1" name="gsearch-t" type="radio" value="gsearch-1" checked="checked" class="form__radio-input" />
<label role="button" for="gsearch-1" class="form__radio-label">
in LMU.de
</label>
</li>
<li class="form__radio-item">
<input id="gsearch-2" name="gsearch-t" type="radio" value="gsearch-2" class="form__radio-input" />
<label role="button" for="gsearch-2" class="form__radio-label">
in allen LMU-Webseiten
</label>
</li>
</ul>
</div>
</div>
</div>
Radio Nav
<div class="c-search-option--nav" data-css="c-search-option" data-js-module="search-option" data-js-options='{}'>
<form name="search-option-radio" data-js-item="js-search-option-form" class="search-option__form c-form--gsearch" action="#" method="get">
<div class="form__radio" data-css="c-form">
<div class="form__radio-wrapper">
<ul class="form__radio-list">
<li class="form__radio-item">
<input id="gsearch-detail-1" name="gsearch-t" type="radio" value="gsearch-1" checked="checked" data-js-item="js-search-option-radio" class="form__radio-input" />
<label role="button" for="gsearch-detail-1" class="form__radio-label">
in LMU.de
</label>
</li>
<li class="form__radio-item">
<input id="gsearch-detail-2" name="gsearch-t" type="radio" value="gsearch-2" data-js-item="js-search-option-radio" class="form__radio-input" />
<label role="button" for="gsearch-detail-2" class="form__radio-label">
in allen LMU-Webseiten
</label>
</li>
</ul>
</div>
</div>
<input type="hidden" data-js-item="js-search-option-input-hidden" name="q" value="">
</form>
</div>