view website/src/fschmidt/stopwatch.html @ 1285:fad40fe3282d

add personal web tools
author Franklin Schmidt <fschmidt@gmail.com>
date Wed, 26 Dec 2018 14:11:08 -0700
parents
children d9b86675be24
line wrap: on
line source

<!doctype html>
<html>
	<head>
		<meta name="viewport" content="width=device-width, initial-scale=1">
		<style>
			button {
				cursor: pointer;
				font-size: 1em;
				border-radius: 6px;
				display: none;
			}
			button:focus {
				outline: inherit;
			}
		</style>
		<script>

			function now() {
				return Math.floor(Date.now()/1000);
			}

			function showTime() {
				var start = localStorage.start;
				var time;
				if( !start ) {
					time = 0;
				} else {
					var stop = localStorage.stop || now();
					time = stop - start;
				}
				var seconds = time % 60;
				time = Math.floor(time/60);
				var minutes = time % 60;
				time = Math.floor(time/60);
				var hours = time;
				seconds = ("0"+seconds).slice(-2);
				minutes = ("0"+minutes).slice(-2);
				time = hours + ":" + minutes + ":" + seconds;
				document.querySelector('[time]').innerHTML = time;
			}

			function fixButtons() {
				var isRunning = localStorage.start && !localStorage.stop;
				if( isRunning ) {
					document.querySelector('[start]').style.display = 'none';
					document.querySelector('[stop]').style.display = 'inline-block';
					document.querySelector('[reset]').style.display = 'none';
				} else {
					document.querySelector('[start]').style.display = 'inline-block';
					document.querySelector('[stop]').style.display = 'none';
					if( localStorage.start ) {
						document.querySelector('[reset]').style.display = 'inline-block';
					} else {
						document.querySelector('[reset]').style.display = 'none';
					}
				}
			}

			function start() {
				var stop = localStorage.stop;
				if( !stop ) {
					localStorage.start = now();
				} else {
					localStorage.removeItem("stop");
					localStorage.start = now() - (stop - localStorage.start);
				}
				fixButtons();
			}

			function stop() {
				localStorage.stop = now();
				fixButtons();
			}

			function reset() {
				localStorage.removeItem("start");
				localStorage.removeItem("stop");
				showTime();
				fixButtons();
			}

			function loaded() {
				showTime();
				fixButtons();
				setInterval(showTime,1000);
			}

		</script>
	</head>
	<body onload="loaded()">
		<h1 time></h1>
		<button start onclick="start()">start</button>
		<button stop onclick="stop()">stop</button>
		<button reset onclick="reset()">reset</button>
	</body>
</html>