90 lines
2.3 KiB
JavaScript
90 lines
2.3 KiB
JavaScript
|
const $ = document.querySelector.bind(document);
|
||
|
const $new = document.createElement.bind(document);
|
||
|
const $show = (el) => {
|
||
|
el.classList.remove('hidden');
|
||
|
};
|
||
|
const $hide = (el) => {
|
||
|
el.classList.add('hidden');
|
||
|
};
|
||
|
|
||
|
const apiURL = '/api/lookup/';
|
||
|
|
||
|
(function () {
|
||
|
const fields = ['name', 'address', 'type', 'ttl', 'rtt'];
|
||
|
|
||
|
// createRow creates a table row with the given cell values.
|
||
|
function createRow(item) {
|
||
|
const tr = $new('tr');
|
||
|
fields.forEach((f) => {
|
||
|
const td = $new('td');
|
||
|
td.innerText = item[f];
|
||
|
td.classList.add(f);
|
||
|
tr.appendChild(td);
|
||
|
});
|
||
|
return tr;
|
||
|
}
|
||
|
|
||
|
const handleSubmit = async () => {
|
||
|
const tbody = $('#table tbody'),
|
||
|
tbl = $('#table');
|
||
|
tbody.innerHTML = '';
|
||
|
$hide(tbl);
|
||
|
|
||
|
const q = $('input[name=q]').value.trim(),
|
||
|
typ = $('select[name=type]').value,
|
||
|
addr = $('input[name=address]').value.trim();
|
||
|
|
||
|
// Post to the API.
|
||
|
const req = await fetch(apiURL, {
|
||
|
method: 'POST',
|
||
|
headers: { 'Content-Type': 'application/json' },
|
||
|
body: JSON.stringify({ query: [q,], type: [typ,], nameservers: [addr,] })
|
||
|
});
|
||
|
|
||
|
const res = await req.json();
|
||
|
|
||
|
if (res.status != 'success') {
|
||
|
const error = (res && res.message) || response.statusText;
|
||
|
throw(error);
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
if (res.data[0].answers == null) {
|
||
|
throw('No records found.');
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
res.data[0].answers.forEach((item) => {
|
||
|
tbody.appendChild(createRow(item));
|
||
|
});
|
||
|
|
||
|
$show(tbl);
|
||
|
};
|
||
|
|
||
|
// Capture the form submit.
|
||
|
$('#form').onsubmit = async (e) => {
|
||
|
e.preventDefault();
|
||
|
|
||
|
const msg = $('#message');
|
||
|
$hide(msg);
|
||
|
|
||
|
try {
|
||
|
await handleSubmit();
|
||
|
} catch(e) {
|
||
|
msg.innerText = e.toString();
|
||
|
$show(msg);
|
||
|
throw e;
|
||
|
}
|
||
|
};
|
||
|
|
||
|
// Change the address on ns change.
|
||
|
const ns = $("#ns"), addr = $("#address");
|
||
|
addr.value = ns.value;
|
||
|
|
||
|
ns.onchange = (e) => {
|
||
|
addr.value = e.target.value;
|
||
|
if(addr.value === "") {
|
||
|
addr.focus();
|
||
|
}
|
||
|
};
|
||
|
})();
|