-
Notifications
You must be signed in to change notification settings - Fork 2
/
practimer-0.1.js
154 lines (141 loc) · 3.61 KB
/
practimer-0.1.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
/**
* PRACTIMER JS
*
* Finally pulling the active part of Practimer into
* an external file
*/
function parse_time(entry) {
let minutes = 0;
let seconds = 0;
// 2m50s
if (minutes === 0 && seconds === 0) {
let minsec = entry.match(/(\d+)m(\d+)s/i);
if (typeof minsec && minsec != null && minsec.length) {
minutes = minsec[1];
seconds = minsec[2];
}
}
// 2m
if (minutes === 0 && seconds === 0) {
let minsec = entry.match(/(\d+)m/i);
if (typeof minsec && minsec != null && minsec.length) {
minutes = minsec[1];
}
}
// 2s
if (minutes === 0 && seconds === 0) {
let minsec = entry.match(/(\d+)s/i);
if (typeof minsec && minsec != null && minsec.length) {
seconds = minsec[1];
}
}
// convert to seconds < 60 plus minutes
if (seconds > 59) {
let newsec = parseInt(seconds / 60);
minutes = parseInt(minutes) + newsec;
seconds = seconds % 60;
}
// defaults to 5 minutes
if (minutes === 0 && seconds === 0) {
minutes = 5;
}
// no more than one hour
if (minutes >= 60) {
minutes = 60;
seconds = 0;
}
let x = [];
x.push(parseInt(minutes));
x.push(parseInt(seconds));
return x;
}
// Audio Vars
var freq = 880;
var wave = "square";
var AudioContext =
window.AudioContext || window.webkitAudioContext || false;
if (AudioContext) {
var context = new AudioContext();
context.resume();
var tone = new Tone(context, freq, wave);
}
// Timer Vars
var looper;
var target;
var hopper;
var number = 5;
var d = new Date();
init();
// Allows for quick change
window.onhashchange = function () {
init();
};
// starts timer
function init() {
var hash = location.hash;
if (hash != "#about") {
let minsec = [];
if (hash.length === 0) {
hopper = 5 * 60;
} else {
minsec = parse_time(hash);
hopper = minsec[0] * 60 + minsec[1];
}
location.hash = [minsec[0], "m", minsec[1], "s"].join("");
document.getElementById("close").href = location.hash;
target = d.getTime() + 1000 * 60 * number;
timer();
}
}
// handles timer
function timer() {
if (looper) {
window.clearInterval(looper);
}
looper = setInterval(function () {
var minutes = parseInt(hopper / 60);
var display_minutes = minutes;
var seconds = parseInt(hopper % 60);
if (seconds < 10) {
seconds = "0" + seconds;
}
if (display_minutes < 10) {
// display_minutes = " " + display_minutes;
display_minutes = "0" + display_minutes;
}
// console.log(
// [location.hash, hopper, minutes, seconds, "", display_minutes].join(" ")
// );
// Stop the clock if
if (location.hash != '#about') {
var time = [display_minutes, seconds].join(":");
document.getElementById("minute").innerHTML = display_minutes;
document.getElementById("second").innerHTML = seconds;
hopper -= 1;
}
if (hopper < 0) {
document.getElementById("time").classList.add("min1");
document.getElementById("time").classList.remove("min5");
window.clearInterval(looper);
if (AudioContext) {
tone.start();
setTimeout(function () {
tone.stop();
}, 500);
}
// console.log("done");
} else if (hopper < 10) {
if (AudioContext) {
tone.start();
setTimeout(function () {
tone.stop();
}, 50);
}
document.getElementById("time").classList.add("min1");
document.getElementById("time").classList.remove("min5");
} else {
document.getElementById("time").classList.remove("min1");
document.getElementById("time").classList.add("min5");
}
}, 1000);
}