Server : Apache/2.4.18 (Ubuntu) System : Linux canvaswebdesign 3.13.0-71-generic #114-Ubuntu SMP Tue Dec 1 02:34:22 UTC 2015 x86_64 User : oppastar ( 1041) PHP Version : 7.0.33-0ubuntu0.16.04.15 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority, Directory : /var/www/rabbithabit.com/public_html/themes/3/swal_alert/src/utils/dom/ |
Upload File : |
import { getTimerProgressBar } from './getters.js' import { swalClasses, iconTypes } from '../classes.js' import { toArray, objectValues, warn } from '../utils.js' // Remember state in cases where opening and handling a modal will fiddle with it. export const states = { previousBodyPadding: null } export const hasClass = (elem, className) => { if (!className) { return false } const classList = className.split(/\s+/) for (let i = 0; i < classList.length; i++) { if (!elem.classList.contains(classList[i])) { return false } } return true } const removeCustomClasses = (elem, params) => { toArray(elem.classList).forEach(className => { if ( !objectValues(swalClasses).includes(className) && !objectValues(iconTypes).includes(className) && !objectValues(params.showClass).includes(className) ) { elem.classList.remove(className) } }) } export const applyCustomClass = (elem, params, className) => { removeCustomClasses(elem, params) if (params.customClass && params.customClass[className]) { if (typeof params.customClass[className] !== 'string' && !params.customClass[className].forEach) { return warn(`Invalid type of customClass.${className}! Expected string or iterable object, got "${typeof params.customClass[className]}"`) } addClass(elem, params.customClass[className]) } } export function getInput (content, inputType) { if (!inputType) { return null } switch (inputType) { case 'select': case 'textarea': case 'file': return getChildByClass(content, swalClasses[inputType]) case 'checkbox': return content.querySelector(`.${swalClasses.checkbox} input`) case 'radio': return content.querySelector(`.${swalClasses.radio} input:checked`) || content.querySelector(`.${swalClasses.radio} input:first-child`) case 'range': return content.querySelector(`.${swalClasses.range} input`) default: return getChildByClass(content, swalClasses.input) } } export const focusInput = (input) => { input.focus() // place cursor at end of text in text input if (input.type !== 'file') { // http://stackoverflow.com/a/2345915 const val = input.value input.value = '' input.value = val } } export const toggleClass = (target, classList, condition) => { if (!target || !classList) { return } if (typeof classList === 'string') { classList = classList.split(/\s+/).filter(Boolean) } classList.forEach((className) => { if (target.forEach) { target.forEach((elem) => { condition ? elem.classList.add(className) : elem.classList.remove(className) }) } else { condition ? target.classList.add(className) : target.classList.remove(className) } }) } export const addClass = (target, classList) => { toggleClass(target, classList, true) } export const removeClass = (target, classList) => { toggleClass(target, classList, false) } export const getChildByClass = (elem, className) => { for (let i = 0; i < elem.childNodes.length; i++) { if (hasClass(elem.childNodes[i], className)) { return elem.childNodes[i] } } } export const applyNumericalStyle = (elem, property, value) => { if (value || parseInt(value) === 0) { elem.style[property] = (typeof value === 'number') ? `${value}px` : value } else { elem.style.removeProperty(property) } } export const show = (elem, display = 'flex') => { elem.style.opacity = '' elem.style.display = display } export const hide = (elem) => { elem.style.opacity = '' elem.style.display = 'none' } export const toggle = (elem, condition, display) => { condition ? show(elem, display) : hide(elem) } // borrowed from jquery $(elem).is(':visible') implementation export const isVisible = (elem) => !!(elem && (elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length)) /* istanbul ignore next */ export const isScrollable = (elem) => !!(elem.scrollHeight > elem.clientHeight) // borrowed from https://stackoverflow.com/a/46352119 export const hasCssAnimation = (elem) => { const style = window.getComputedStyle(elem) const animDuration = parseFloat(style.getPropertyValue('animation-duration') || '0') const transDuration = parseFloat(style.getPropertyValue('transition-duration') || '0') return animDuration > 0 || transDuration > 0 } export const contains = (haystack, needle) => { if (typeof haystack.contains === 'function') { return haystack.contains(needle) } } export const animateTimerProgressBar = (timer, reset = false) => { const timerProgressBar = getTimerProgressBar() if (isVisible(timerProgressBar)) { if (reset) { timerProgressBar.style.transition = 'none' timerProgressBar.style.width = '100%' } setTimeout(() => { timerProgressBar.style.transition = `width ${timer / 1000}s linear` timerProgressBar.style.width = '0%' }, 10) } } export const stopTimerProgressBar = () => { const timerProgressBar = getTimerProgressBar() const timerProgressBarWidth = parseInt(window.getComputedStyle(timerProgressBar).width) timerProgressBar.style.removeProperty('transition') timerProgressBar.style.width = '100%' const timerProgressBarFullWidth = parseInt(window.getComputedStyle(timerProgressBar).width) const timerProgressBarPercent = parseInt(timerProgressBarWidth / timerProgressBarFullWidth * 100) timerProgressBar.style.removeProperty('transition') timerProgressBar.style.width = `${timerProgressBarPercent}%` }