bitaddress.org/src/ninja.misc.js

145 lines
No EOL
4.5 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

(function (ninja) {
var status = ninja.status = function() {
var cryptoCase = "";
if (window.crypto && window.crypto.getRandomValues) {
document.getElementById("statuscrypto").innerHTML = "✔"; //✔
cryptoCase = "good";
}
else {
document.getElementById("statuscrypto").innerHTML = "×"; //×
cryptoCase = "bad";
}
var protocolCase = "";
switch (window.location.protocol) {
case 'file:':
document.getElementById("statusprotocol").innerHTML = "✔"; //✔
protocolCase = "good";
break;
case 'http:':
case 'https:':
document.getElementById("statusprotocol").innerHTML = "⚠"; //⚠
protocolCase = "bad";
break;
default:
}
var unitTestsCase = "";
var unitTests = function () {
var result = ninja.unitTests.runSynchronousTests();
if (result.passCount == result.testCount) {
document.getElementById("statusunittests").innerHTML = "✔"; //✔
unitTestsCase = "good";
}
else {
document.getElementById("statusunittests").innerHTML = "×"; //×
unitTestsCase = "bad";
}
};
var showCrypto = function () {
document.getElementById('statuscrypto' + cryptoCase).style.display = 'block';
};
var showProtocol = function () {
document.getElementById('statusprotocol' + protocolCase).style.display = 'block';
};
var showUnitTests = function () {
if(unitTestsCase != "") document.getElementById('statusunittests' + unitTestsCase).style.display = 'block';
};
var showKeyPool = function () {
document.getElementById('statuskeypoolgood').style.display = 'block';
document.getElementById("keypooltextarea").value = Bitcoin.KeyPool.toString();
};
return {
unitTests: unitTests, showCrypto: showCrypto, showProtocol: showProtocol,
showUnitTests: showUnitTests, showKeyPool: showKeyPool
};
}();
})(ninja);
ninja.tab = {
select: function (walletTab) {
// detect type: normally an HtmlElement/object but when string then get the element
if (typeof walletTab === 'string') {
walletTab = document.getElementById(walletTab);
}
var walletType = walletTab.getAttribute("id");
if (walletTab.className.indexOf("selected") == -1) {
// unselect all tabs
for (var wType in ninja.wallets) {
document.getElementById(wType).className = "tab";
ninja.wallets[wType].close();
}
// don't open tab if entropy still being collected
// exceptions: brainwallet detailwallet
if (ninja.seeder.isStillSeeding == false || walletType == "brainwallet" || walletType == "detailwallet") {
walletTab.className += " selected";
document.getElementById("generate").style.display = "none";
ninja.wallets[walletTab.getAttribute("id")].open();
}
else if (ninja.seeder.isStillSeeding == true && !(walletType == "brainwallet" || walletType == "detailwallet")) {
document.getElementById("generate").style.display = "block";
}
}
},
whichIsOpen: function () {
var isOpen;
for (var wType in ninja.wallets) {
isOpen = ninja.wallets[wType].isOpen();
if (isOpen) {
return wType;
}
}
return null;
}
};
ninja.getQueryString = function () {
var result = {}, queryString = location.search.substring(1), re = /([^&=]+)=([^&]*)/g, m;
while (m = re.exec(queryString)) {
result[decodeURIComponent(m[1])] = decodeURIComponent(m[2]);
}
return result;
};
// use when passing an Array of Functions
ninja.runSerialized = function (functions, onComplete) {
onComplete = onComplete || function () { };
if (functions.length === 0) onComplete();
else {
// run the first function, and make it call this
// function when finished with the rest of the list
var f = functions.shift();
f(function () { ninja.runSerialized(functions, onComplete); });
}
};
ninja.forSerialized = function (initial, max, whatToDo, onComplete) {
onComplete = onComplete || function () { };
if (initial === max) { onComplete(); }
else {
// same idea as runSerialized
whatToDo(initial, function () { ninja.forSerialized(++initial, max, whatToDo, onComplete); });
}
};
// use when passing an Object (dictionary) of Functions
ninja.foreachSerialized = function (collection, whatToDo, onComplete) {
var keys = [];
for (var name in collection) {
keys.push(name);
}
ninja.forSerialized(0, keys.length, function (i, callback) {
whatToDo(keys[i], callback);
}, onComplete);
};