vue-js-modal
Version:
Modal Component for Vue.js
69 lines (56 loc) • 1.72 kB
JavaScript
export * from './numbers'
const INPUT_NODE_NAMES = ['INPUT', 'TEXTAREA', 'SELECT']
export const generateId = ((index = 0) => () => (index++).toString())()
/**
* @param {Number} from Lower limit
* @param {Number} to Upper limit
* @param {Number} value Checked number value
*
* @return {Number} Either source value itself or limit value if range limits
* are exceeded
*/
export const createDivInBody = () => {
const div = document.createElement('div')
document.body.appendChild(div)
return div
}
export const blurActiveElement = () => {
if (
typeof document !== 'undefined' &&
document.activeElement &&
document.activeElement.tagName !== 'BODY' &&
document.activeElement.blur
) {
document.activeElement.blur()
}
}
// Different browsers handle innerWidth/clientWidth differently,
// this function tries to return the smallest width (assuming that it excludes
// scrollbar width)
export const windowWidthWithoutScrollbar = () => {
const { innerWidth } = window
const { clientWidth } = document.documentElement
if (innerWidth && clientWidth) {
return Math.min(innerWidth, clientWidth)
}
return clientWidth || innerWidth
}
export const stringStylesToObject = styles => {
const lines = styles
.split(';')
.map(line => line.trim())
.filter(Boolean)
const entries = lines.map(line => line.split(':'))
return entries.reduce((styles, [key, value]) => {
return {
...styles,
[key]: value
}
}, {})
}
export const isInput = element => {
return element && INPUT_NODE_NAMES.indexOf(element.nodeName) !== -1
}
export const getTouchEvent = event => {
return event.touches && event.touches.length > 0 ? event.touches[0] : event
}