UNPKG

views-morph

Version:
105 lines (86 loc) 2.06 kB
import { getProp, hasProp } from '../utils.js' import toCamelCase from 'to-camel-case' export default (node, parent, state) => { let name = node.name switch (node.name) { case 'CaptureEmail': case 'CaptureFile': case 'CaptureNumber': case 'CapturePhone': case 'CaptureSecure': case 'CaptureText': name = 'input' break case 'CaptureTextArea': name = 'textarea' break case 'Horizontal': case 'Vertical': name = getGroupBlockName(node, parent, state) break case 'Image': name = 'img' break case 'Text': return 'span' case 'List': name = 'div' break case 'Proxy': return null case 'Svg': name = 'svg' break case 'SvgGroup': name = 'g' break case 'SvgCircle': case 'SvgEllipse': case 'SvgLinearGradient': case 'SvgRadialGradient': case 'SvgLine': case 'SvgText': case 'SvgPath': case 'SvgPolygon': case 'SvgPolyline': case 'SvgRect': case 'SvgSymbol': case 'SvgUse': case 'SvgDefs': case 'SvgStop': name = toCamelCase(node.name.replace('Svg', '')) break default: break } return name } const getGroupBlockName = (node, parent, state) => { let name = 'div' if (hasProp(node, 'teleportTo')) { name = 'Link' node.teleport = true } else if (hasProp(node, 'goTo')) { name = 'a' node.goTo = true } else if (hasProp(node, 'onClick')) { const propNode = getProp(node, 'onClick') let prevParent = parent let canBeButton = true while (prevParent && canBeButton) { if (prevParent.type === 'Block') { canBeButton = !hasProp(prevParent, 'onClick') } prevParent = prevParent.parent } if (canBeButton) { name = 'button' node.action = propNode.value } } else if (hasProp(node, 'overflowY', v => v === 'auto' || v === 'scroll')) { name = 'div' } else if (hasProp(node, 'onSubmit')) { name = 'form' } return name }