mirror of
https://github.com/coding-horror/basic-computer-games.git
synced 2025-12-29 06:05:36 -08:00
68 lines
2.0 KiB
JavaScript
68 lines
2.0 KiB
JavaScript
// By default:
|
|
// — Browsers have a window object
|
|
// — Node.js does not
|
|
// Checking for an undefined window object is a loose check
|
|
// to enable browser and Node.js support
|
|
const isRunningInBrowser = typeof window !== 'undefined';
|
|
|
|
const outputElement = document.querySelector('#output');
|
|
|
|
function print(string) {
|
|
if (isRunningInBrowser) {
|
|
// Adds trailing newline to match console.log behavior
|
|
document
|
|
.getElementById('output')
|
|
.appendChild(document.createTextNode(string + '\n'));
|
|
} else {
|
|
console.log(string);
|
|
}
|
|
}
|
|
|
|
function input() {
|
|
if (isRunningInBrowser) {
|
|
// Accept input from the browser DOM input
|
|
return new Promise((resolve) => {
|
|
const inputEl = document.createElement('input');
|
|
outputElement.append(inputEl);
|
|
inputEl.focus();
|
|
|
|
inputEl.addEventListener('keydown', (event) => {
|
|
if (event.key === 'Enter') {
|
|
const result = inputEl.value;
|
|
inputEl.remove();
|
|
print(result);
|
|
print('');
|
|
resolve(result);
|
|
}
|
|
});
|
|
});
|
|
} else {
|
|
// Accept input from the command line in Node.js
|
|
// See: https://nodejs.dev/learn/accept-input-from-the-command-line-in-nodejs
|
|
return new Promise(function (resolve) {
|
|
const readline = require('readline').createInterface({
|
|
input: process.stdin,
|
|
output: process.stdout,
|
|
});
|
|
readline.question('', function (input) {
|
|
resolve(input);
|
|
readline.close();
|
|
});
|
|
});
|
|
}
|
|
}
|
|
|
|
function printInline(string) {
|
|
if (isRunningInBrowser) {
|
|
document
|
|
.getElementById('output')
|
|
.appendChild(document.createTextNode(string));
|
|
} else {
|
|
process.stdout.write(string);
|
|
}
|
|
}
|
|
|
|
function spaces(numberOfSpaces) {
|
|
return ' '.repeat(numberOfSpaces);
|
|
}
|