From 32176742969796afdede9840c1c68a9343ec21af Mon Sep 17 00:00:00 2001 From: Adam Soltys Date: Tue, 24 Jan 2023 23:53:19 -0800 Subject: editable numpad values --- src/components/Numpad.svelte | 97 ++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 94 insertions(+), 3 deletions(-) (limited to 'src/components') diff --git a/src/components/Numpad.svelte b/src/components/Numpad.svelte index a4cdb50f..e688cc6e 100644 --- a/src/components/Numpad.svelte +++ b/src/components/Numpad.svelte @@ -10,6 +10,8 @@ export let amountFiat = amount ? amount * ($selectedRate / sats) : 0; + let arrow = '<'; + let amountSats = amount; let loading = false; @@ -85,13 +87,102 @@ } } }; + + function getCaretPosition(editableDiv) { + var caretPos = 0, + sel, + range; + if (window.getSelection) { + sel = window.getSelection(); + if (sel.rangeCount) { + range = sel.getRangeAt(0); + if (range.commonAncestorContainer.parentNode == editableDiv) { + caretPos = range.endOffset; + } + } + } else if (document.selection && document.selection.createRange) { + range = document.selection.createRange(); + if (range.parentElement() == editableDiv) { + var tempEl = document.createElement('span'); + editableDiv.insertBefore(tempEl, editableDiv.firstChild); + var tempRange = range.duplicate(); + tempRange.moveToElementText(tempEl); + tempRange.setEndPoint('EndToEnd', range); + caretPos = tempRange.text.length; + } + } + return caretPos; + } + + $: html = fiat ? f(amountFiat, currency) : s(amountSats); + + let prev = ''; + + let input = (e) => { + if (html.length > 12) return (html = prev); + if (prev === '0' && html.length === 2) { + prev = ''; + html = html.replace('0', ''); + } + + let sel = getSelection(); + let i = sel.focusOffset; + + if (!fiat) amountSats = parseInt(html.replace(/,/g, '')); + if (!amountSats) amountSats = null; + if (amountSats > sats) amountSats = sats; + + setTimeout(() => { + let p = prev.split(',')[0].length; + if (html.length > prev.length && p === 3) i++; + if (html.length < prev.length && p === 1 && i > 1) i--; + + let node = e.target.childNodes[0]; + let range = document.createRange(); + + range.setStart(node, i); + range.setEnd(node, i); + + let sel = getSelection(); + sel.removeAllRanges(); + sel.addRange(range); + + prev = html; + }, 0); + }; + + let focus = (e) => { + let range = document.createRange(); + range.selectNodeContents(e.target); + let sel = getSelection(); + sel.removeAllRanges(); + sel.addRange(range); + };
-
- {fiat ? `${symbol}${amountFiat}` : '⚡️' + amountSatsFormatted} +
+ {#if fiat} +
{symbol}
+
+ {:else} +
⚡️
+
+ {/if}
{fiat ? amountSatsConverted : amountFiatConverted}