import { h } from './dom' interface ParseInsideTextResult { before: string; number: number; after: string; } export function parseInsideText(str: string): ParseInsideTextResult | undefined { let res = str.match(/^([^\d]*)(\d+)((\.|,)(\d+))?(.*)/) if (res !== null && res.length === 7) { return { before: res[1], number: parseFloat(res[2] + '.' + res[5]), after: res[6] } } else { return undefined; } } interface ParseResult { number: number; remaining: string; } export function parse(str: string): ParseResult | undefined { let res = str.match(/^(\d+)((\.|,)(\d+))?(.*$)/) if (res !== null && res.length === 6) { return { number: parseFloat(res[1] + '.' + res[4]), remaining: res[5] } } else { return undefined; } } export interface Node { node: Element; numberInput: HTMLInputElement; } export function node(tag: string, content: ParseInsideTextResult): Node { let numberInput = h('input', { 'class': 'g-Number', 'value': prettyPrint(content.number) }) as HTMLInputElement return { node: h(tag, {}, [content.before, numberInput, content.after]), numberInput: numberInput } } export function prettyPrint(n: number): string { const xs = n.toString().split('.') if (xs.length == 2) { return xs[0] + ',' + xs[1].substring(0, 2) } else { return xs[0] } }