You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
60 lines
977 B
60 lines
977 B
'use strict'; |
|
|
|
var BEEP_DELAY = 500; |
|
|
|
function beep() { |
|
process.stdout.write('\u0007'); |
|
} |
|
|
|
function melodicalBeep(val, cb) { |
|
if (val.length === 0) { |
|
cb(); |
|
return; |
|
} |
|
|
|
setTimeout(function () { |
|
if (val.shift() === '*') { |
|
beep(); |
|
} |
|
|
|
melodicalBeep(val, cb); |
|
}, BEEP_DELAY); |
|
} |
|
|
|
module.exports = function (val, cb) { |
|
if (!process.stdout.isTTY || |
|
process.argv.indexOf('--no-beep') !== -1 || |
|
process.argv.indexOf('--beep=false') !== -1) { |
|
return; |
|
} |
|
|
|
cb = cb || function () {}; |
|
|
|
if (val === parseInt(val)) { |
|
if (val < 0) { |
|
throw new TypeError('Negative numbers are not accepted'); |
|
} |
|
|
|
if (val === 0) { |
|
cb(); |
|
return; |
|
} |
|
|
|
for (var i = 0; i < val; i++) { |
|
setTimeout(function (i) { |
|
beep(); |
|
|
|
if (i === val - 1) { |
|
cb(); |
|
} |
|
}, BEEP_DELAY * i, i); |
|
} |
|
} else if (!val) { |
|
beep(); |
|
cb(); |
|
} else if (typeof val === 'string') { |
|
melodicalBeep(val.split(''), cb); |
|
} else { |
|
throw new TypeError('Not an accepted type'); |
|
} |
|
};
|
|
|