Files
otpauth-parser/script.js

66 lines
2.1 KiB
JavaScript

window.addEventListener('DOMContentLoaded', () => {
const $url = document.querySelector('#url')
const $type = document.querySelector('#type')
const $label = document.querySelector('#label')
const $secret = document.querySelector('#secret')
const $issuer = document.querySelector('#issuer')
const $dynamic = document.querySelector('#dynamic')
$url.oninput = () => {
const url = new URL($url.value)
$type.value = decodeURIComponent(url.hostname || 'totp')
$type.oninput = () => {
url.hostname = encodeURIComponent($type.value)
$url.value = url.href
}
$label.value = decodeURIComponent(url.pathname.replace(/^\//, '') || '')
$label.oninput = () => {
url.pathname = encodeURIComponent($label.value)
$url.value = url.href
}
const onInput = ($input, key) => {
$input.value = url.searchParams.get(key) || ''
$input.oninput = () => {
if ($input.value)
url.searchParams.set(key, $input.value || '')
else
url.searchParams.delete(key)
$url.value = url.href
}
}
onInput($secret, 'secret')
onInput($issuer, 'issuer')
let dynamicCount = 0
$dynamic.innerHTML = ''
url.searchParams.keys().forEach(key => {
switch (key) {
case 'secret':
case 'issuer':
break;
default:
dynamicCount += 1
const id = `dynamic-${dynamicCount}`
const $label = document.createElement('label')
$label.for = id
$label.textContent = key
const $input = document.createElement('input')
$input.id = id
onInput($input, key)
const $div = document.createElement('div')
$div.appendChild($label)
$div.appendChild($input)
$dynamic.appendChild($div)
break;
}
})
}
})