-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathmorse.js
75 lines (69 loc) · 1.51 KB
/
morse.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
morse = function(){
var dot = '0';
var bar = '1';
var charDem = '2';
var wordDem = '3';
var dotTime = 150;
var barTime = dotTime * 3;
var cDemTime = dotTime * 3;
var wDemTime = dotTime * 7;
var morseTable = {
A:'01', B:'1000', C:'1010', D:'100', E:'0', F:'0010',
G:'110', H:'0000', I:'00', J:'0111', K:'101', L:'0100',
M:'11', N:'10', O:'111', P:'0110', Q:'1101', R:'010',
S:'000', T:'1', U:'001', V:'0001', W:'011', X:'1001',
Y:'1011', Z:'1100', ' ':wordDem
};
var toSignal = function(str){
var toMorse = function(str){
var upperStr = str.toUpperCase();
var seq = '';
for(var i = 0; i < str.length; i++){
var c = morseTable[upperStr[i]];
if(c !== undefined){
seq += c;
seq += charDem;
}else{
seq += wordDem;
}
}
return seq;
}
var bgWhite = function(seq, i){
if(i >= seq.length){
return;
}
var c = seq[i];
if(c === charDem || c === wordDem){
bgBlack(seq, i);
return;
}
$('body').css('background','white');
var interval = (c === dot)? dotTime : barTime;
setTimeout(
function(){
bgBlack(seq, i);
},
interval
);
}
var bgBlack = function(seq, i){
var c = seq[i];
var interval =
(c === charDem)? cDemTime :
(c === wordDem)? wDemTime :
dotTime;
$('body').css('background','black');
setTimeout(
function(){
bgWhite(seq, i + 1);
},
interval
);
}
bgWhite(toMorse(str), 0);
}
return {
toSignal:toSignal
};
}