Add calculator.js with a pure calculate(a, b, operation) engine returning
{result} or {error}, wired to the existing HTML UI via an IIFE. Update
index.html to load the script and CLAUDE.md to document the new module.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
63 lines
1.9 KiB
JavaScript
63 lines
1.9 KiB
JavaScript
function calculate(a, b, operation) {
|
|
switch (operation) {
|
|
case 'add': return { result: a + b };
|
|
case 'subtract': return { result: a - b };
|
|
case 'multiply': return { result: a * b };
|
|
case 'divide':
|
|
if (b === 0) return { error: 'Division by zero is not allowed.' };
|
|
return { result: a / b };
|
|
default:
|
|
return { error: 'Unknown operation: ' + operation };
|
|
}
|
|
}
|
|
|
|
(function () {
|
|
var form = document.getElementById('calculator-form');
|
|
var operationBtns = document.querySelectorAll('button[name="operation"]');
|
|
var resultEl = document.getElementById('result');
|
|
var errorEl = document.getElementById('error-message');
|
|
var selectedOperation = null;
|
|
|
|
operationBtns.forEach(function (btn) {
|
|
btn.addEventListener('click', function () {
|
|
operationBtns.forEach(function (b) { b.setAttribute('aria-pressed', 'false'); });
|
|
btn.setAttribute('aria-pressed', 'true');
|
|
selectedOperation = btn.value;
|
|
});
|
|
});
|
|
|
|
form.addEventListener('submit', function (e) {
|
|
e.preventDefault();
|
|
resultEl.textContent = '';
|
|
errorEl.textContent = '';
|
|
|
|
var a = parseFloat(document.getElementById('operand1').value);
|
|
var b = parseFloat(document.getElementById('operand2').value);
|
|
|
|
if (isNaN(a) || isNaN(b)) {
|
|
errorEl.textContent = 'Please enter valid numbers for both operands.';
|
|
return;
|
|
}
|
|
|
|
if (!selectedOperation) {
|
|
errorEl.textContent = 'Please select an operation.';
|
|
return;
|
|
}
|
|
|
|
var outcome = calculate(a, b, selectedOperation);
|
|
|
|
if (outcome.error) {
|
|
errorEl.textContent = outcome.error;
|
|
} else {
|
|
resultEl.textContent = outcome.result;
|
|
}
|
|
});
|
|
|
|
form.addEventListener('reset', function () {
|
|
resultEl.textContent = '';
|
|
errorEl.textContent = '';
|
|
operationBtns.forEach(function (btn) { btn.setAttribute('aria-pressed', 'false'); });
|
|
selectedOperation = null;
|
|
});
|
|
}());
|