<!
DOCTYPE html>
<html lang="id">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-
scale=1.0">
<title>a</title>
<style>
:root {
--primary: #e80c0c;
--primary-hover: #564c4c;
--bg: #f1f5f9;
--card: #ffffff;
--text: #1e293b;
--error: #ef4444;
}
body {
font-family: 'Inter', system-ui, -apple-system, sans-serif;
background-color: var(--bg);
color: var(--text);
display: flex;
justify-content: center;
align-items: center;
min-height: 100vh;
margin: 0;
padding: 20px;
}
.converter-box {
background: var(--card);
padding: 2rem;
border-radius: 1rem;
box-shadow: 0 10px 25px rgba(0, 0, 0, 0.1);
width: 100%;
max-width: 450px;
}
h2 {
text-align: center;
margin-top: 0;
color: var(--primary);
}
.form-group {
margin-bottom: 1rem;
}
label {
display: block;
margin-bottom: 0.5rem;
font-weight: 600;
font-size: 0.9rem;
}
input, select {
width: 100%;
padding: 0.75rem;
border: 2px solid #e2e8f0;
border-radius: 0.5rem;
font-size: 1rem;
box-sizing: border-box;
transition: border-color 0.2s;
}
input:focus, select:focus {
outline: none;
border-color: var(--primary);
}
.btn-group {
display: grid;
grid-template-columns: 2fr 1fr;
gap: 10px;
margin-top: 1.5rem;
}
button {
padding: 0.75rem;
border: none;
border-radius: 0.5rem;
font-weight: 600;
cursor: pointer;
transition: all 0.2s;
}
.btn-convert {
background-color: var(--primary);
color: white;
}
.btn-convert:hover {
background-color: var(--primary-hover);
}
.btn-reset {
background-color: #e2e8f0;
color: #475569;
}
.btn-reset:hover {
background-color: #cbd5e1;
}
#error-msg {
color: var(--error);
font-size: 0.85rem;
margin-top: 0.5rem;
display: none;
}
.result-container {
margin-top: 2rem;
padding-top: 1.5rem;
border-top: 2px solid #f1f5f9;
}
.result-item {
display: flex;
justify-content: space-between;
align-items: center;
padding: 0.75rem;
background: #f8fafc;
margin-bottom: 0.5rem;
border-radius: 0.4rem;
}
.result-label {
font-size: 0.8rem;
text-transform: uppercase;
color: #64748b;
font-weight: 700;
}
.result-value {
font-family: 'Courier New', Courier, monospace;
font-weight: 700;
word-break: break-all;
text-align: right;
padding-left: 10px;
}
</style>
</head>
<body>
<div class="converter-box">
<h2>KONVERSA NUMERO</h2>
<div class="form-group">
<label for="userInput">HATAMA NUMERO</label>
<input type="text" id="userInput" placeholder="Exemplo: 1010 ou
FF" autocomplete="off">
<div id="error-msg">Numero neebe hatama laloos!</div>
</div>
<div class="form-group">
<label for="baseSelect">TIPU NUMERO</label>
<select id="baseSelect">
<option value="10">Desimal (Base 10)</option>
<option value="2">Biner (Base 2)</option>
<option value="8">Oktal (Base 8)</option>
<option value="16">Hexadesimal (Base 16)</option>
</select>
</div>
<div class="btn-group">
<button class="btn-convert"
onclick="processConversion()">calcula</button>
<button class="btn-reset" onclick="resetAll()">Reset</button>
</div>
<div class="result-container" id="results" style="display: none;">
<div class="result-item">
<span class="result-label">Desimal</span>
<span class="result-value" id="resDec">-</span>
</div>
<div class="result-item">
<span class="result-label">Biner</span>
<span class="result-value" id="resBin">-</span>
</div>
<div class="result-item">
<span class="result-label">Oktal</span>
<span class="result-value" id="resOct">-</span>
</div>
<div class="result-item">
<span class="result-label">Hexa</span>
<span class="result-value" id="resHex">-</span>
</div>
</div>
</div>
<script>
function processConversion() {
const inputStr =
[Link]('userInput').[Link]();
const base =
parseInt([Link]('baseSelect').value);
const errorMsg = [Link]('error-msg');
const resultsDiv = [Link]('results');
// Regex untuk validasi input berdasarkan basis
const patterns = {
2: /^[01]+$/,
8: /^[0-7]+$/,
10: /^[0-9]+$/,
16: /^[0-9a-fA-F]+$/
};
// Validasi input kosong atau tidak sesuai karakter basis
if (inputStr === "" || !patterns[base].test(inputStr)) {
[Link] = 'block';
[Link] = 'none';
return;
}
[Link] = 'none';
// Konversi string input ke angka desimal (integer)
const decimalNum = parseInt(inputStr, base);
// Tampilkan semua hasil konversi
[Link]('resDec').innerText =
[Link](10);
[Link]('resBin').innerText =
[Link](2);
[Link]('resOct').innerText =
[Link](8);
[Link]('resHex').innerText =
[Link](16).toUpperCase();
[Link] = 'block';
}
function resetAll() {
[Link]('userInput').value = "";
[Link]('error-msg').[Link] = 'none';
[Link]('results').[Link] = 'none';
[Link]('baseSelect').selectedIndex = 0;
}
// Menjalankan konversi jika menekan tombol Enter pada input
[Link]('userInput').addEventListener('keypress',
function (e) {
if ([Link] === 'Enter') {
processConversion();
}
});
</script>
</body>
</html>