diff --git a/.gitignore b/.gitignore
index 3c3629e6..cb13ed44 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1,8 @@
node_modules
+/Backup
+*.suo
+/UpgradeLog.htm
+/.bin
+/packages
+/packages.config
+/.nuget
\ No newline at end of file
diff --git a/CHANGELOG.txt b/CHANGELOG.txt
index b5f0bc1a..432a8f03 100644
--- a/CHANGELOG.txt
+++ b/CHANGELOG.txt
@@ -28,6 +28,11 @@ END USER NOTES:
Here is a signed list of file names and version history.
+2015-07-05: status ACTIVE
+bitaddress.org-v2.9.9-SHA256-90ddaf250f6302acb53945128e38225208af5a2fa7cfdf51519213e8b144a76d.html
+ - improve tab usability. You can now get to the Brain Wallet and Wallet Details tabs before
+ completing the entropy collection.
+
2015-01-08: status ACTIVE
bitaddress.org-v2.9.8-SHA256-2c5d16dbcde600147162172090d940fd9646981b7d751d9bddfc5ef383f89308.html
- fix French translations. Escape quotes.
diff --git a/CHANGELOG.txt.asc b/CHANGELOG.txt.asc
index a3baf21e..ac007f9d 100644
--- a/CHANGELOG.txt.asc
+++ b/CHANGELOG.txt.asc
@@ -31,6 +31,11 @@ END USER NOTES:
Here is a signed list of file names and version history.
+2015-07-05: status ACTIVE
+bitaddress.org-v2.9.9-SHA256-90ddaf250f6302acb53945128e38225208af5a2fa7cfdf51519213e8b144a76d.html
+ - improve tab usability. You can now get to the Brain Wallet and Wallet Details tabs before
+ completing the entropy collection.
+
2015-01-08: status ACTIVE
bitaddress.org-v2.9.8-SHA256-2c5d16dbcde600147162172090d940fd9646981b7d751d9bddfc5ef383f89308.html
- fix French translations. Escape quotes.
@@ -281,13 +286,13 @@ bitaddress.org-v0.2-SHA1-71216f5b84ef8831a805dbf66e9d8b83ad1dc5fb.html
bitaddress.org-v0.1-SHA1-f40e706490f3eb2be56c31ddbf4c8646cd51ef40.html
-Initial release
-----BEGIN PGP SIGNATURE-----
-Version: GnuPG v2
-
-iQEcBAEBAgAGBQJUrwa4AAoJEIdJe5Fjl09aTTYIAN1iXh9fuU2bqJlhTXtGPeOs
-sh71P+huEKJyCYfGhnZ0/dlRjnhHBgMnP3vS+N0S9CThlTHtytUoQAA1xX6crzMq
-OxRf22AHuo23NpARjGvpghD0z6V9s7wrWTNs/JULvdtqPVt4XPf1+koruZSA5aMo
-3tnhKQ0/V9ieVxqd+vf2kD6HJO9kDKIJtqFyqA1k7O4oL9yEOPKYR6pqtVM8bv2I
-rEnNjQV5JI1bZL0WNfajnRO+EGF4IA7ReD1PMFrsuUMwiOMH+A/M3P06xQgXaB+G
-Q+gUWjklP131sfmoOLRrxACvQyUifpcIbJ87PE2LWhaGjuLpHxGQIPFFUJB/WX0=
-=WE3G
+Version: GnuPG v1.4.13 (MingW32)
+
+iQEcBAEBAgAGBQJVmZugAAoJEIdJe5Fjl09am+oIAL8vKSLNPrdj0QOG9k3swdcq
+Ycgpx8wEfH1B2CL24WakG8k6SNdvHUH/nqP8zr1gQm6bp0gLCUDFV82uhDbJ5NLt
+QXK1HK09gZylvLJcuGUPbyd+jFR+h6047mM27T1k98uf7AWd2vq6qLQjyEIhQg21
+FJCbKiZUokR7gjtSapd7VdyXDzD3lRRah6PrHkHooX8U3AKOQoJQUVe+pboxEaEP
+bP/VtSggzOvQSSUzey48snfJM1RSUYn/zdNthNRnwzvSEM8bjO7nVyW3SRyr/BYo
+GZ0s6PswndsX+Q+/qjTLgAu5CQdM/dIjjEikecpUT1qiUXfjgGVTg7Lm1LImx+8=
+=Uixh
-----END PGP SIGNATURE-----
diff --git a/bitaddress.org.html b/bitaddress.org.html
index cf220498..3a2e124a 100644
--- a/bitaddress.org.html
+++ b/bitaddress.org.html
@@ -6474,24 +6474,28 @@
.commands .row { padding: 0 0; text-align: left; }
.commands .row.extra { padding-top: 6px; }
.commands span { padding: 0 10px; }
- .commands span.print { float: right; }
+ .commands span.print { float: right; position: relative; z-index: 20; }
.commands span.right { float: right; }
.expandable { padding: 10px 15px; text-align: left; cursor: pointer; }
- #menu { visibility: hidden; font-size: 90%; }
+ #menu { visibility: visible; font-size: 90%; }
#culturemenu { text-align: center; padding: 0 10px 5px 10px; margin-bottom: 3px; font-size: 90%; }
#culturemenu span { padding: 3px; }
#culturemenu .selected { text-decoration: none; color: #000000; }
#braincommands .row .label { width: 200px; display: inline-block; }
#braincommands .notes { font-size: 80%; display: block; padding: 5px 10px; }
- #brainpassphrase { width: 280px; }
- #brainpassphraseconfirm { width: 280px; }
+ #brainpassphrase { width: 280px; position: relative; z-index: 20; }
+ #brainpassphraseconfirm { width: 280px; position: relative; z-index: 20; }
+ #brainpassphraseshow { position: relative; z-index: 20; }
+ #brainview { position: relative; z-index: 20; }
#brainwarning { }
#detailcommands { padding: 10px 0; }
#detailcommands span { padding: 0 10px; }
- #detailprivkey { width: 250px; }
- #detailprivkeypassphrase { width: 250px; }
+ #detailprivkey { width: 250px; position: relative; z-index: 20; }
+ #detailprivkeypassphrase { width: 250px; position: relative; z-index: 20; }
+ #detailview { position: relative; z-index: 20; }
+ #detaildecrypt { position: relative; z-index: 20; }
.paper .commands { border: 2px solid #009900; }
#bulkstartindex, #paperlimit, #paperlimitperpage { width: 35px; }
#bulklimit { width: 45px; }
@@ -6548,13 +6552,13 @@
- (2.9.8)
+ (2.9.9)
527B 5C82 B1F6 B2DB 72A0
ECBF 8749 7B91 6397 4F5A
@@ -7265,6 +7269,8 @@
seedCount: 0, // counter
lastInputTime: new Date().getTime(),
seedPoints: [],
+ isStillSeeding: true,
+ seederDependentWallets: ["singlewallet", "paperwallet", "bulkwallet", "vanitywallet", "splitwallet"],
// seed function exists to wait for mouse movement to add more entropy before generating an address
seed: function (evt) {
@@ -7272,11 +7278,8 @@
var timeStamp = new Date().getTime();
// seeding is over now we generate and display the address
if (ninja.seeder.seedCount == ninja.seeder.seedLimit) {
- ninja.seeder.seedCount++;
- ninja.wallets.singlewallet.open();
- document.getElementById("generate").style.display = "none";
- document.getElementById("menu").style.visibility = "visible";
- ninja.seeder.removePoints();
+ ninja.seeder.seedCount++;
+ ninja.seeder.seedingOver();
}
// seed mouse position X and Y when mouse movements are greater than 40ms apart.
else if ((ninja.seeder.seedCount < ninja.seeder.seedLimit) && evt && (timeStamp - ninja.seeder.lastInputTime) > 40) {
@@ -7294,11 +7297,8 @@
if (!evt) var evt = window.event;
// seeding is over now we generate and display the address
if (ninja.seeder.seedCount == ninja.seeder.seedLimit) {
- ninja.seeder.seedCount++;
- ninja.wallets.singlewallet.open();
- document.getElementById("generate").style.display = "none";
- document.getElementById("menu").style.visibility = "visible";
- ninja.seeder.removePoints();
+ ninja.seeder.seedCount++;
+ ninja.seeder.seedingOver();
}
// seed key press character
else if ((ninja.seeder.seedCount < ninja.seeder.seedLimit) && evt.which) {
@@ -7317,16 +7317,20 @@
showPool: function () {
var poolHex;
if (SecureRandom.poolCopyOnInit != null) {
- poolHex = Crypto.util.bytesToHex(SecureRandom.poolCopyOnInit);
- document.getElementById("seedpool").innerHTML = poolHex;
- document.getElementById("seedpooldisplay").innerHTML = poolHex;
+ poolHex = Crypto.util.bytesToHex(SecureRandom.poolCopyOnInit);
+ document.getElementById("seedpool").innerHTML = poolHex;
+ document.getElementById("seedpooldisplay").innerHTML = poolHex;
}
else {
- poolHex = Crypto.util.bytesToHex(SecureRandom.pool);
- document.getElementById("seedpool").innerHTML = poolHex;
- document.getElementById("seedpooldisplay").innerHTML = poolHex;
+ poolHex = Crypto.util.bytesToHex(SecureRandom.pool);
+ document.getElementById("seedpool").innerHTML = poolHex;
+ document.getElementById("seedpooldisplay").innerHTML = poolHex;
+ }
+ var percentSeeded = Math.round((ninja.seeder.seedCount / ninja.seeder.seedLimit) * 100) + "%";
+ document.getElementById("mousemovelimit").innerHTML = percentSeeded;
+ for (var wIndex in ninja.seeder.seederDependentWallets) {
+ document.getElementById(ninja.seeder.seederDependentWallets[wIndex]).innerHTML = percentSeeded;
}
- document.getElementById("mousemovelimit").innerHTML = (ninja.seeder.seedLimit - ninja.seeder.seedCount);
},
showPoint: function (x, y) {
@@ -7343,6 +7347,21 @@
document.body.removeChild(ninja.seeder.seedPoints[i]);
}
ninja.seeder.seedPoints = [];
+ },
+
+ seedingOver: function () {
+ ninja.seeder.isStillSeeding = false;
+ var walletType = ninja.tab.whichIsOpen();
+ if (walletType == null) {
+ ninja.tab.select("singlewallet");
+ } else {
+ ninja.tab.select(walletType)
+ }
+ document.getElementById("generate").style.display = "none";
+ // update labels for dependent wallets
+ var culture = (ninja.getQueryString()["culture"] == null ? "en" : ninja.getQueryString()["culture"]);
+ ninja.translator.translate(culture);
+ ninja.seeder.removePoints();
}
};
@@ -7439,16 +7458,45 @@
}
};
-ninja.tabSwitch = function (walletTab) {
- if (walletTab.className.indexOf("selected") == -1) {
- // unselect all tabs
- for (var wType in ninja.wallets) {
- document.getElementById(wType).className = "tab";
- ninja.wallets[wType].close();
- }
- walletTab.className += " selected";
- ninja.wallets[walletTab.getAttribute("id")].open();
- }
+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 () {
@@ -7557,7 +7605,16 @@
"vanityalertinvalidinputpublickeysmatch": "Invalid input. The Public Key of both entries match. You must input two different keys.",
"vanityalertinvalidinputcannotmultiple": "Invalid input. Cannot multiply two public keys. Select 'Add' to add two public keys to get a bitcoin address.",
"vanityprivatekeyonlyavailable": "Only available when combining two private keys",
- "vanityalertinvalidinputprivatekeysmatch": "Invalid input. The Private Key of both entries match. You must input two different keys."
+ "vanityalertinvalidinputprivatekeysmatch": "Invalid input. The Private Key of both entries match. You must input two different keys.",
+
+ // header and menu html
+ "singlewallet": "Single Wallet",
+ "paperwallet": "Paper Wallet",
+ "bulkwallet": "Bulk Wallet",
+ "brainwallet": "Brain Wallet",
+ "vanitywallet": "Vanity Wallet",
+ "splitwallet": "Split Wallet",
+ "detailwallet": "Wallet Details"
},
"es": {
@@ -7590,6 +7647,7 @@
"bulkwallet": "Direcciones en masa",
"brainwallet": "Cartera mental",
"vanitywallet": "Cartera personalizada",
+ "splitwallet": "Split Wallet", //TODO: please translate
"detailwallet": "Detalles de la cartera",
// footer html
@@ -7728,6 +7786,7 @@
"bulkwallet": "Porte-Monnaie En Vrac",
"brainwallet": "Porte-Monnaie Cerveau",
"vanitywallet": "Porte-Monnaie Vanité",
+ "splitwallet": "Split Wallet", //TODO: please translate
"detailwallet": "Détails du Porte-Monnaie",
// footer html
@@ -7867,6 +7926,7 @@
"bulkwallet": "Πολλαπλά Πορτοφόλια",
"brainwallet": "Μνημονικό Πορτοφόλι",
"vanitywallet": "Πορτοφόλι Vanity",
+ "splitwallet": "Split Wallet", //TODO: please translate
"detailwallet": "Λεπτομέρειες Πορτοφολιού",
// footer html
@@ -8005,6 +8065,7 @@
"bulkwallet": "Portafogli multipli",
"brainwallet": "Brain Wallet",
"vanitywallet": "Vanity Wallet",
+ "splitwallet": "Split Wallet", //TODO: please translate
"detailwallet": "Dettagli portafoglio",
// footer html
@@ -8143,6 +8204,7 @@
"bulkwallet": "Massen-Wallet",
"brainwallet": "Kopf-Wallet",
"vanitywallet": "Personalisiertes Wallet",
+ "splitwallet": "Split Wallet", //TODO: please translate
"detailwallet": "Walletdetails",
// footer html
@@ -8281,6 +8343,7 @@
"bulkwallet": "Hromadná peněženka",
"brainwallet": "Myšlenková peněženka",
"vanitywallet": "Peněženka Vanity",
+ "splitwallet": "Split Wallet", //TODO: please translate
"detailwallet": "Detail peněženky",
// footer html
@@ -8564,6 +8627,7 @@
"bulkwallet": "大量ウォレット",
"brainwallet": "暗記ウォレット",
"vanitywallet": "カスタムウォレット",
+ "splitwallet": "Split Wallet", //TODO: please translate
"detailwallet": "ウォレットの詳細",
// footer html
@@ -8854,6 +8918,7 @@
"bulkwallet": "Несколько кошельков",
"brainwallet": "Умный кошелек",
"vanitywallet": "Персональный кошелек",
+ "splitwallet": "Split Wallet", //TODO: please translate
"detailwallet": "Детали кошелька",
// footer html
@@ -9006,6 +9071,10 @@