UNPKG

@syncfusion/ej2-dropdowns

Version:

Essential JS 2 DropDown Components

157 lines (156 loc) 6.8 kB
/** * FloatLable Moduel * Specifies whether to display the floating label above the input element. */ import { removeClass, addClass, detach } from '@syncfusion/ej2-base'; import { attributes, isNullOrUndefined, createElement, getUniqueID } from '@syncfusion/ej2-base'; var FLOATLINE = 'e-float-line'; var FLOATTEXT = 'e-float-text'; var LABELTOP = 'e-label-top'; var LABELBOTTOM = 'e-label-bottom'; /* eslint-disable valid-jsdoc */ /** * Function to create Float Label element. * * @param {HTMLDivElement} overAllWrapper - Overall wrapper of multiselect. * @param {HTMLElement} searchWrapper - Search wrapper of multiselect. * @param {HTMLElement} element - The given html element. * @param {HTMLInputElement} inputElement - Specify the input wrapper. * @param {number[] | string[] | boolean[]} value - Value of the MultiSelect. * @param {FloatLabelType} floatLabelType - Specify the FloatLabel Type. * @param {string} placeholder - Specify the PlaceHolder text. */ export function createFloatLabel(overAllWrapper, searchWrapper, element, inputElement, value, floatLabelType, placeholder) { var floatLinelement = createElement('span', { className: FLOATLINE }); var floatLabelElement = createElement('label', { className: FLOATTEXT }); var id = element.getAttribute('id') ? element.getAttribute('id') : getUniqueID('ej2_multiselect'); element.id = id; if (!isNullOrUndefined(element.id) && element.id !== '') { floatLabelElement.id = 'label_' + element.id.replace(/ /g, '_'); floatLabelElement.setAttribute('for', element.id); attributes(inputElement, { 'aria-labelledby': floatLabelElement.id }); } if (!isNullOrUndefined(inputElement.placeholder) && inputElement.placeholder !== '') { floatLabelElement.innerText = encodePlaceholder(inputElement.placeholder); inputElement.removeAttribute('placeholder'); } floatLabelElement.innerText = encodePlaceholder(placeholder); searchWrapper.appendChild(floatLinelement); searchWrapper.appendChild(floatLabelElement); overAllWrapper.classList.add('e-float-input'); updateFloatLabelState(value, floatLabelElement); if (floatLabelType === 'Always') { if (floatLabelElement.classList.contains(LABELBOTTOM)) { removeClass([floatLabelElement], LABELBOTTOM); } addClass([floatLabelElement], LABELTOP); } } /** * Function to update status of the Float Label element. * * @param {string[] | number[] | boolean[]} value - Value of the MultiSelect. * @param {HTMLElement} label - Float label element. */ export function updateFloatLabelState(value, label) { if (value && value.length > 0) { addClass([label], LABELTOP); removeClass([label], LABELBOTTOM); } else { removeClass([label], LABELTOP); addClass([label], LABELBOTTOM); } } /** * Function to remove Float Label element. * * @param {HTMLDivElement} overAllWrapper - Overall wrapper of multiselect. * @param {HTMLDivElement} componentWrapper - Wrapper element of multiselect. * @param {HTMLElement} searchWrapper - Search wrapper of multiselect. * @param {HTMLInputElement} inputElement - Specify the input wrapper. * @param {number[] | string[] | boolean[]} value - Value of the MultiSelect. * @param {FloatLabelType} floatLabelType - Specify the FloatLabel Type. * @param {string} placeholder - Specify the PlaceHolder text. */ export function removeFloating(overAllWrapper, componentWrapper, searchWrapper, inputElement, value, floatLabelType, placeholder) { var placeholderElement = componentWrapper.querySelector('.' + FLOATTEXT); var floatLine = componentWrapper.querySelector('.' + FLOATLINE); var placeholderText; if (!isNullOrUndefined(placeholderElement)) { placeholderText = placeholderElement.innerText; detach(searchWrapper.querySelector('.' + FLOATTEXT)); setPlaceHolder(value, inputElement, placeholderText); if (!isNullOrUndefined(floatLine)) { detach(searchWrapper.querySelector('.' + FLOATLINE)); } } else { placeholderText = (placeholder !== null) ? placeholder : ''; setPlaceHolder(value, inputElement, placeholderText); } overAllWrapper.classList.remove('e-float-input'); } /** * Function to set the placeholder to the element. * * @param {number[] | string[] | boolean[]} value - Value of the MultiSelect. * @param {HTMLInputElement} inputElement - Specify the input wrapper. * @param {string} placeholder - Specify the PlaceHolder text. */ export function setPlaceHolder(value, inputElement, placeholder) { if (value && value.length) { inputElement.placeholder = ''; } else { inputElement.placeholder = placeholder; } } /** * Function for focusing the Float Element. * * @param {HTMLDivElement} overAllWrapper - Overall wrapper of multiselect. * @param {HTMLDivElement} componentWrapper - Wrapper element of multiselect. */ export function floatLabelFocus(overAllWrapper, componentWrapper) { overAllWrapper.classList.add('e-input-focus'); var label = componentWrapper.querySelector('.' + FLOATTEXT); if (!isNullOrUndefined(label)) { addClass([label], LABELTOP); if (label.classList.contains(LABELBOTTOM)) { removeClass([label], LABELBOTTOM); } } } /* eslint-disable @typescript-eslint/no-unused-vars */ /** * Function to focus the Float Label element. * * @param {HTMLDivElement} overAllWrapper - Overall wrapper of multiselect. * @param {HTMLDivElement} componentWrapper - Wrapper element of multiselect. * @param {number[] | string[] | boolean[]} value - Value of the MultiSelect. * @param {FloatLabelType} floatLabelType - Specify the FloatLabel Type. * @param {string} placeholder - Specify the PlaceHolder text. */ export function floatLabelBlur(overAllWrapper, componentWrapper, value, floatLabelType, placeholder) { /* eslint-enable @typescript-eslint/no-unused-vars */ overAllWrapper.classList.remove('e-input-focus'); var label = componentWrapper.querySelector('.' + FLOATTEXT); if (value && value.length <= 0 && floatLabelType === 'Auto' && !isNullOrUndefined(label)) { if (label.classList.contains(LABELTOP)) { removeClass([label], LABELTOP); } addClass([label], LABELBOTTOM); } } export function encodePlaceholder(placeholder) { var result = ''; if (!isNullOrUndefined(placeholder) && placeholder !== '') { var spanElement = document.createElement('span'); spanElement.innerHTML = '<input placeholder="' + placeholder + '"/>'; var hiddenInput = (spanElement.children[0]); result = hiddenInput.placeholder; } return result; } /* eslint-enable valid-jsdoc */