snow10/main.js
2017-03-27 21:04:07 -07:00

149 lines
3.2 KiB
JavaScript
Executable File

var clipboard = new Clipboard('.btn');
clipboard.on('success', function(e) {
$('#copyFeedback').css('display', 'inherit');
$('#copyFeedback').css('color', 'green');
$('#copyFeedback').html('Copied!');
e.clearSelection();
});
clipboard.on('error', function(e) {
$('#copyFeedback').css('display', 'inherit');
$('#copyFeedback').css('color', 'red');
$('#copyFeedback').html('Your browser doesn\'t seem to support automatic copying. Get a better one.');
e.clearSelection();
});
if ($('#useEncrypt').is(':checked') == false)
{
$('#encryptArea').css('display', 'none');
}
$('#modalClose').click(function(){
$('#copyFeedback').css('display', 'none');
});
window.snowMode = 'encode';
$("#output").on("click", function () {
$(this).select();
});
$('#toggle').click(function(){
if (window.snowMode == 'encode')
{
window.snowMode = 'decode';
$('#toggle').html("Decode <i class='fa fa-unlock'></i>");
$('#confirmPass').css('display', 'none');
}
else
{
window.snowMode = 'encode';
$('#toggle').html("Encode <i class='fa fa-lock'></i>");
$('#confirmPass').css('display', 'inline');
}
});
/* based on stackoverflow.com/questions/14430633/how-to-convert-text-to-binary-code-in-javascript */
function binToText(str) {
var str = str.replace(/ /g, "1");
var str = str.replace(/\t/g, "0");
if(str.match(/[10]{8}/g)){
var wordFromBinary = str.match(/([10]{8}|\s+)/g).map(function(fromBinary){
return String.fromCharCode(parseInt(fromBinary, 2) );
}).join('');
return wordFromBinary;
}
}
/* based on stackoverflow.com/questions/21354235/converting-binary-to-text-using-javascript */
function textToBin(text) {
var output = '';
var length = text.length,
output = [];
for (var i = 0;i < length; i++) {
var bin = text[i].charCodeAt().toString(2);
output.push(Array(8-bin.length+1).join("0") + bin);
}
return output.join('');
}
$('#useEncrypt').click(function(){
if (! this.checked)
{
$('#encryptArea').css('display', 'none');
}
else
{
$('#encryptArea').css('display', 'inherit');
}
})
function verifyPass(mode)
{
if ($('#password').val() == '')
{
alert('You must provide a password.');
return false;
}
if (mode == 'encrypt')
{
if ($('#password').val() != $('#confirmPass').val())
{
alert('Passwords must match.');
return false;
}
}
return true;
}
$('#go').click(function(){
var output = '';
var input = $('#text').val();
if (input == '') { return false; }
// If we're encoding:
if (window.snowMode == 'encode')
{
// If we should use encryption, encrypt first:
if ($('#useEncrypt').is(':checked'))
{
// verify password first
if (verifyPass('encrypt'))
{
input = CryptoJS.AES.encrypt(input, $('#password').val()).toString();
}
else
{
return false;
}
}
// convert result to binary
output = textToBin(btoa(input));
$('#output').val(output.toString().replace(/1/g, " ").replace(/0/g, "\t"));
}
else
{
var output = binToText(input);
if ($('#useEncrypt').is(':checked'))
{
if (verifyPass('decrypt'))
{
output = CryptoJS.AES.decrypt(output, $('#password').val()).toString(CryptoJS.enc.Utf8);
}
else
{
return false;
}
}
$('#output').val(atob(output.toString()));
}
$('#outputModal').modal();
});