| 
1285
 | 
     1 <!doctype html>
 | 
| 
 | 
     2 <html>
 | 
| 
 | 
     3 	<head>
 | 
| 
1294
 | 
     4 		<title>Stopwatch</title>
 | 
| 
1285
 | 
     5 		<meta name="viewport" content="width=device-width, initial-scale=1">
 | 
| 
 | 
     6 		<style>
 | 
| 
1290
 | 
     7 			body {
 | 
| 
 | 
     8 				text-align: center;
 | 
| 
 | 
     9 			}
 | 
| 
1285
 | 
    10 			button {
 | 
| 
 | 
    11 				cursor: pointer;
 | 
| 
1294
 | 
    12 				font-size: inherit;
 | 
| 
1285
 | 
    13 				border-radius: 6px;
 | 
| 
 | 
    14 				display: none;
 | 
| 
 | 
    15 			}
 | 
| 
 | 
    16 		</style>
 | 
| 
 | 
    17 		<script>
 | 
| 
 | 
    18 
 | 
| 
 | 
    19 			function now() {
 | 
| 
 | 
    20 				return Math.floor(Date.now()/1000);
 | 
| 
 | 
    21 			}
 | 
| 
 | 
    22 
 | 
| 
1292
 | 
    23 			function show() {
 | 
| 
1285
 | 
    24 				var start = localStorage.start;
 | 
| 
 | 
    25 				var time;
 | 
| 
 | 
    26 				if( !start ) {
 | 
| 
 | 
    27 					time = 0;
 | 
| 
 | 
    28 				} else {
 | 
| 
 | 
    29 					var stop = localStorage.stop || now();
 | 
| 
 | 
    30 					time = stop - start;
 | 
| 
 | 
    31 				}
 | 
| 
 | 
    32 				var seconds = time % 60;
 | 
| 
 | 
    33 				time = Math.floor(time/60);
 | 
| 
 | 
    34 				var minutes = time % 60;
 | 
| 
 | 
    35 				time = Math.floor(time/60);
 | 
| 
 | 
    36 				var hours = time;
 | 
| 
1287
 | 
    37 				seconds = ('0'+seconds).slice(-2);
 | 
| 
 | 
    38 				minutes = ('0'+minutes).slice(-2);
 | 
| 
 | 
    39 				time = hours + ':' + minutes + ':' + seconds;
 | 
| 
1285
 | 
    40 				document.querySelector('[time]').innerHTML = time;
 | 
| 
 | 
    41 
 | 
| 
1292
 | 
    42 				// fix buttons
 | 
| 
1285
 | 
    43 				var isRunning = localStorage.start && !localStorage.stop;
 | 
| 
 | 
    44 				if( isRunning ) {
 | 
| 
 | 
    45 					document.querySelector('[start]').style.display = 'none';
 | 
| 
 | 
    46 					document.querySelector('[stop]').style.display = 'inline-block';
 | 
| 
 | 
    47 					document.querySelector('[reset]').style.display = 'none';
 | 
| 
 | 
    48 				} else {
 | 
| 
 | 
    49 					document.querySelector('[start]').style.display = 'inline-block';
 | 
| 
 | 
    50 					document.querySelector('[stop]').style.display = 'none';
 | 
| 
 | 
    51 					if( localStorage.start ) {
 | 
| 
 | 
    52 						document.querySelector('[reset]').style.display = 'inline-block';
 | 
| 
 | 
    53 					} else {
 | 
| 
 | 
    54 						document.querySelector('[reset]').style.display = 'none';
 | 
| 
 | 
    55 					}
 | 
| 
 | 
    56 				}
 | 
| 
 | 
    57 			}
 | 
| 
 | 
    58 
 | 
| 
 | 
    59 			function start() {
 | 
| 
 | 
    60 				var stop = localStorage.stop;
 | 
| 
 | 
    61 				if( !stop ) {
 | 
| 
 | 
    62 					localStorage.start = now();
 | 
| 
 | 
    63 				} else {
 | 
| 
1287
 | 
    64 					localStorage.removeItem('stop');
 | 
| 
1285
 | 
    65 					localStorage.start = now() - (stop - localStorage.start);
 | 
| 
 | 
    66 				}
 | 
| 
1292
 | 
    67 				show();
 | 
| 
1285
 | 
    68 			}
 | 
| 
 | 
    69 
 | 
| 
 | 
    70 			function stop() {
 | 
| 
 | 
    71 				localStorage.stop = now();
 | 
| 
1292
 | 
    72 				show();
 | 
| 
1285
 | 
    73 			}
 | 
| 
 | 
    74 
 | 
| 
 | 
    75 			function reset() {
 | 
| 
1287
 | 
    76 				localStorage.removeItem('start');
 | 
| 
 | 
    77 				localStorage.removeItem('stop');
 | 
| 
1292
 | 
    78 				show();
 | 
| 
1285
 | 
    79 			}
 | 
| 
 | 
    80 
 | 
| 
 | 
    81 			function loaded() {
 | 
| 
1292
 | 
    82 				show();
 | 
| 
 | 
    83 				setInterval(show,1000);
 | 
| 
1285
 | 
    84 			}
 | 
| 
 | 
    85 
 | 
| 
 | 
    86 		</script>
 | 
| 
 | 
    87 	</head>
 | 
| 
 | 
    88 	<body onload="loaded()">
 | 
| 
 | 
    89 		<h1 time></h1>
 | 
| 
 | 
    90 		<button start onclick="start()">start</button>
 | 
| 
 | 
    91 		<button stop onclick="stop()">stop</button>
 | 
| 
 | 
    92 		<button reset onclick="reset()">reset</button>
 | 
| 
 | 
    93 	</body>
 | 
| 
 | 
    94 </html>
 |