@mezereon/ui-components-vue
Version:
UI components for Mezereon - Vue
106 lines (93 loc) • 2.13 kB
JavaScript
import { isEmpty } from 'lodash'
export function getValueFromComplex(value) {
if (isEmpty(value)) {
return ''
}
const match = value.match(/(.*)=>(.*)/i)
if (match === null) {
return value
}
return match[2]
}
export function getKeyFromComplex(value) {
if (isEmpty(value)) {
return ''
}
let match = value.match(/(.*),(.*)=>(.*)/i)
if (match === null) {
match = value.match(/(.*)=>(.*)/i)
if (match === null) {
return value
}
return match[1]
}
return match[1]
}
export function isAbsoluteUrl(url) {
const r = new RegExp('^(?:[a-z]+:)?//', 'i')
return r.test(url)
}
/**
* https://github.com/NxtChg/pieces/tree/master/js/vue/vue-css
*/
export function setCustomCSS(tagName, style) {
if (!style) {
return
}
function fail(msg) {
throw new Error(
'css parsing error: ' + msg + ' at "' + css.slice(pos, pos + 60) + '"...'
)
}
const css = style.replace(/<\/?style>/gi, '')
let rule = ''
let pos = 0
let level = 0
let s = document.getElementById(tagName)
if (!s) {
s = document.createElement('style')
s.type = 'text/css'
s.id = 'tagName'
document.getElementsByTagName('head')[0].appendChild(s)
}
function readUntil(delims) {
const org = pos
let c
while ((c = css[pos++])) {
if (c === "'" || c === '"') {
const p = css.indexOf(c, pos)
if (p !== -1) pos = p + 1
else fail('unterminated string')
continue
}
if (level === 0 && delims.includes(c)) break
if (c === '{') {
level++
}
if (c === '}') {
level--
if (level < 0) fail('extra }')
}
}
return css.slice(org, pos - 1)
}
function addSel(s) {
s = s.replace(/^\s+|\s+$/g, '')
rule += s
}
while (pos < css.length) {
const n = readUntil(',;{')
addSel(n + (css[pos - 1] || ''))
switch (css[pos - 1]) {
case ',':
continue
case '{':
rule += readUntil('}') + '}'
break
}
if (rule !== '') {
s.sheet.insertRule(rule, s.sheet.cssRules.length)
rule = ''
}
}
}