Newer
Older
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<title>RPN calculator</title>
<style type="text/css">
#container {
display: flex;
flex-flow: row;
width: 700px;
margin: 10px auto;
border: 1px grey dotted;
}
#container > div {
border: 1px grey dotted;
}
#container > div > p {
margin-left: 10px;
}
#stack {
width: 200px;
height: 500px
}
#keyboard {
width: 300px;
height: 500px
}
#trail {
width: 200px;
height: 500px
}
#stack-content {
margin-left: 10px;
}
#trail-content {
margin-left: 10px;
}
.keyboard {
font-size: 1.2em;
text-align: center;
}
.keyboard table {
margin: 2px auto;
}
.keyboard td {
width: 60px;
height: 60px;
}
#number-display {
border: 1px grey solid;
width: 100%;
text-align: right;
}
</style>
</head>
<body>
<div id="container">
<div id="stack">
<p>Stack</p>
<div id="stack-content"></div>
</div>
<div id="keyboard">
<p>Keyboard</p>
<div class="keyboard">
<table>
<tr>
<td colspan="4" data-bt-name="number-display" id="number-display"></td>
<td data-bt-name="num7">7</td>
<td data-bt-name="num8">8</td>
<td data-bt-name="num9">9</td>
<td data-bt-name="backspace"><</td>
<td data-bt-name="num4">4</td>
<td data-bt-name="num5">5</td>
<td data-bt-name="num6">6</td>
<td data-bt-name="multiply">*</td>
<td data-bt-name="num1">1</td>
<td data-bt-name="num2">2</td>
<td data-bt-name="num3">3</td>
<td data-bt-name="subtract">-</td>
<td data-bt-name="num0">0</td>
<td data-bt-name="divide">÷</td>
<td data-bt-name="dot">.</td>
<td data-bt-name="plus">+</td>
<td title="swap" data-bt-name="swap">SWAP</td>
<td title="undo" data-bt-name="undo">UNDO</td>
<td title="confirm or duplicate number" colspan="2" data-bt-name="return">RETURN</td>
</tr>
</table>
</div>
</div>
<div id="trail">
<p>Trail</p>
<div id="trail-content"></div>
</div>
</div>
<script type="text/javascript" src="vendor/jquery.min.js"></script>
<script type="text/javascript" src="fsm.js"></script>
(function () {
/**
* show dumb data for UI testing.
*/
const showDumbData = function () {
$("#number-display").text('789');
$("#stack-content").append($('<pre>').text('3: 1'));
$("#stack-content").append($('<pre>').text('2: 2'));
$("#stack-content").append($('<pre>').text('1: 3'));
$("#stack-content").append($('<pre>').text(' .'));
$("#trail-content").append($('<pre>').text(' 1'));
$("#trail-content").append($('<pre>').text(' 2'));
$("#trail-content").append($('<pre>').text('> 3'));
};
// page init
showDumbData();
console.assert(fsm.matchesSubstringAbb("123abb123") === true);
console.assert(fsm.matchesSubstringAbb("123ab123") === true);
console.assert(fsm.matchesSubstringAbb("123abaabb123") === true);
console.assert(fsm.matchesSubstringAbb("123abbb123") === true);
console.assert(fsm.matchesSubstringAbb("123ababab123") === false);
console.assert(fsm.matchesSubstringAbb("") === false);
console.assert(fsm.matchesSubstringAbb("123") === false);
console.assert(fsm.matchesSubstringAbb("123ab") === false);
console.assert(fsm.matchesSubstringAbb("123abb") === true);
console.assert(fsm.matchesSubstringAbb("abb") === true);
// setup event handler
$('.keyboard td').click(function (evt) {
const target = evt.target;
console.log("user clicked on button: " + $(target).attr('data-bt-name'));
});
}());
</script>
</body>
</html>