Path : /var/www/html/master288-bk2/public/sweetalert2/src/utils/dom/renderers/ |
B-Con CMD Config cPanel C-Rdp D-Log Info Jump Mass Ransom Symlink vHost Zone-H |
Current File : /var/www/html/master288-bk2/public/sweetalert2/src/utils/dom/renderers/renderInput.js |
import { swalClasses } from '../../classes.js' import { warn, error, isPromise } from '../../utils.js' import * as dom from '../../dom/index.js' import privateProps from '../../../privateProps.js' const inputTypes = ['input', 'file', 'range', 'select', 'radio', 'checkbox', 'textarea'] export const renderInput = (instance, params) => { const popup = dom.getPopup() const innerParams = privateProps.innerParams.get(instance) const rerender = !innerParams || params.input !== innerParams.input inputTypes.forEach((inputType) => { const inputClass = swalClasses[inputType] const inputContainer = dom.getChildByClass(popup, inputClass) // set attributes setAttributes(inputType, params.inputAttributes) // set class inputContainer.className = inputClass if (rerender) { dom.hide(inputContainer) } }) if (params.input) { if (rerender) { showInput(params) } // set custom class setCustomClass(params) } } const showInput = (params) => { if (!renderInputType[params.input]) { return error(`Unexpected type of input! Expected "text", "email", "password", "number", "tel", "select", "radio", "checkbox", "textarea", "file" or "url", got "${params.input}"`) } const inputContainer = getInputContainer(params.input) const input = renderInputType[params.input](inputContainer, params) dom.show(input) // input autofocus setTimeout(() => { dom.focusInput(input) }) } const removeAttributes = (input) => { for (let i = 0; i < input.attributes.length; i++) { const attrName = input.attributes[i].name if (!['type', 'value', 'style'].includes(attrName)) { input.removeAttribute(attrName) } } } const setAttributes = (inputType, inputAttributes) => { const input = dom.getInput(dom.getPopup(), inputType) if (!input) { return } removeAttributes(input) for (const attr in inputAttributes) { input.setAttribute(attr, inputAttributes[attr]) } } const setCustomClass = (params) => { const inputContainer = getInputContainer(params.input) if (params.customClass) { dom.addClass(inputContainer, params.customClass.input) } } const setInputPlaceholder = (input, params) => { if (!input.placeholder || params.inputPlaceholder) { input.placeholder = params.inputPlaceholder } } const setInputLabel = (input, prependTo, params) => { if (params.inputLabel) { input.id = swalClasses.input const label = document.createElement('label') const labelClass = swalClasses['input-label'] label.setAttribute('for', input.id) label.className = labelClass dom.addClass(label, params.customClass.inputLabel) label.innerText = params.inputLabel prependTo.insertAdjacentElement('beforebegin', label) } } const getInputContainer = (inputType) => { const inputClass = swalClasses[inputType] ? swalClasses[inputType] : swalClasses.input return dom.getChildByClass(dom.getPopup(), inputClass) } const renderInputType = {} renderInputType.text = renderInputType.email = renderInputType.password = renderInputType.number = renderInputType.tel = renderInputType.url = (input, params) => { if (typeof params.inputValue === 'string' || typeof params.inputValue === 'number') { input.value = params.inputValue } else if (!isPromise(params.inputValue)) { warn(`Unexpected type of inputValue! Expected "string", "number" or "Promise", got "${typeof params.inputValue}"`) } setInputLabel(input, input, params) setInputPlaceholder(input, params) input.type = params.input return input } renderInputType.file = (input, params) => { setInputLabel(input, input, params) setInputPlaceholder(input, params) return input } renderInputType.range = (range, params) => { const rangeInput = range.querySelector('input') const rangeOutput = range.querySelector('output') rangeInput.value = params.inputValue rangeInput.type = params.input rangeOutput.value = params.inputValue setInputLabel(rangeInput, range, params) return range } renderInputType.select = (select, params) => { select.textContent = '' if (params.inputPlaceholder) { const placeholder = document.createElement('option') dom.setInnerHtml(placeholder, params.inputPlaceholder) placeholder.value = '' placeholder.disabled = true placeholder.selected = true select.appendChild(placeholder) } setInputLabel(select, select, params) return select } renderInputType.radio = (radio) => { radio.textContent = '' return radio } renderInputType.checkbox = (checkboxContainer, params) => { const checkbox = dom.getInput(dom.getPopup(), 'checkbox') checkbox.value = 1 checkbox.id = swalClasses.checkbox checkbox.checked = Boolean(params.inputValue) const label = checkboxContainer.querySelector('span') dom.setInnerHtml(label, params.inputPlaceholder) return checkboxContainer } renderInputType.textarea = (textarea, params) => { textarea.value = params.inputValue setInputPlaceholder(textarea, params) setInputLabel(textarea, textarea, params) const getMargin = (el) => parseInt(window.getComputedStyle(el).marginLeft) + parseInt(window.getComputedStyle(el).marginRight) if ('MutationObserver' in window) { // #1699 const initialPopupWidth = parseInt(window.getComputedStyle(dom.getPopup()).width) const outputsize = () => { const textareaWidth = textarea.offsetWidth + getMargin(textarea) if (textareaWidth > initialPopupWidth) { dom.getPopup().style.width = `${textareaWidth}px` } else { dom.getPopup().style.width = null } } new MutationObserver(outputsize).observe(textarea, { attributes: true, attributeFilter: ['style'] }) } return textarea }