66 lines
2.1 KiB
JavaScript
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;
|
|
}
|
|
})
|
|
}
|
|
})
|