From 745f32f0e000d0470761b3101d706661b78f81eb Mon Sep 17 00:00:00 2001 From: Maximilian Bethke Date: Fri, 29 Jan 2021 16:59:59 +0100 Subject: [PATCH 1/2] Added cookie class to be able to store information beyond sessions --- index.html | 44 +++++++++++++++++++++++--------------------- js/coinbin.js | 25 +++++++++++++++---------- js/cookie.js | 43 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 81 insertions(+), 31 deletions(-) create mode 100644 js/cookie.js diff --git a/index.html b/index.html index 691dbd5..fd52bda 100644 --- a/index.html +++ b/index.html @@ -37,6 +37,8 @@ + + @@ -54,28 +56,28 @@ diff --git a/js/coinbin.js b/js/coinbin.js index afc98f1..1e56054 100644 --- a/js/coinbin.js +++ b/js/coinbin.js @@ -1933,32 +1933,37 @@ $(document).ready(function() { $("#coinjs_coin").change(function(){ - var o = ($("option:selected",this).attr("rel")).split(";"); + var optionSeleted = ($("option:selected",this).attr("rel")).split(";"); + + let cookieSelectedCoin = new Cookie("coinbin_coin"); + cookieSelectedCoin.setCookie(optionSeleted) + + console.log(cookieSelectedCoin.cookieValue); // deal with broadcasting settings - if(o[5]=="false"){ + if(optionSeleted[5]=="false"){ $("#coinjs_broadcast, #rawTransaction, #rawSubmitBtn, #openBtn").attr('disabled',true); $("#coinjs_broadcast").val("coinb.in"); } else { - $("#coinjs_broadcast").val(o[5]); + $("#coinjs_broadcast").val(optionSeleted[5]); $("#coinjs_broadcast, #rawTransaction, #rawSubmitBtn, #openBtn").attr('disabled',false); } // deal with unspent output settings - if(o[6]=="false"){ + if(optionSeleted[6]=="false"){ $("#coinjs_utxo, #redeemFrom, #redeemFromBtn, #openBtn, .qrcodeScanner").attr('disabled',true); $("#coinjs_utxo").val("coinb.in"); } else { - $("#coinjs_utxo").val(o[6]); + $("#coinjs_utxo").val(optionSeleted[6]); $("#coinjs_utxo, #redeemFrom, #redeemFromBtn, #openBtn, .qrcodeScanner").attr('disabled',false); } // deal with the reset - $("#coinjs_pub").val(o[0]); - $("#coinjs_priv").val(o[1]); - $("#coinjs_multisig").val(o[2]); - $("#coinjs_hdpub").val(o[3]); - $("#coinjs_hdprv").val(o[4]); + $("#coinjs_pub").val(optionSeleted[0]); + $("#coinjs_priv").val(optionSeleted[1]); + $("#coinjs_multisig").val(optionSeleted[2]); + $("#coinjs_hdpub").val(optionSeleted[3]); + $("#coinjs_hdprv").val(optionSeleted[4]); // hide/show custom screen if($("option:selected",this).val()=="custom"){ diff --git a/js/cookie.js b/js/cookie.js new file mode 100644 index 0000000..1e989ab --- /dev/null +++ b/js/cookie.js @@ -0,0 +1,43 @@ +class Cookie { + constructor(name) { + this.cookieName = name; + + // read the cookies value (initializes cookieValue) + this.readCookie(); + } + + readCookie() { + var allCookies = document.cookie; + + // find the cookie that is currently being looked at. + allCookies.split(";").forEach((_, cookie) => { + var currentCookieName, currentCookieValue = cookie.split("="); + + if(currentCookieName = this.cookieName) + { + // set cookieValue to the value of this cookie + this.cookieValue = currentCookieValue; + break; + } + }); + + // default to NULL if cookie was not found + this.cookieValue = NULL; + } + + setCookie(cookieValue) { + // update internal record + this.cookieValue = currentCookieValue; + + // prepare value for storing + cookieValueJSON = JSON.stringify(cookieValue); + + // set cookie with expiry on browser close + document.cookie = this.cookieName+"="+cookieValueJSON; + } + + getCookieValue() { + this.readCookie(); + return this.cookieValue; + } +} \ No newline at end of file From 23dd62cfd07978e445597484bc7b9622a04aad72 Mon Sep 17 00:00:00 2001 From: Maximilian Bethke Date: Mon, 1 Feb 2021 11:58:07 +0100 Subject: [PATCH 2/2] added cookie class for network to be saved --- index.html | 4 +-- js/coinbin.js | 22 +++++++++---- js/cookie.js | 86 ++++++++++++++++++++++++++++++++++++++------------- 3 files changed, 82 insertions(+), 30 deletions(-) diff --git a/index.html b/index.html index fd52bda..5299e76 100644 --- a/index.html +++ b/index.html @@ -75,8 +75,8 @@
  • Wallet
  • About
  • - - +
  • Settings
  • +
  • Fees
  • diff --git a/js/coinbin.js b/js/coinbin.js index 1e56054..a326d7d 100644 --- a/js/coinbin.js +++ b/js/coinbin.js @@ -1932,13 +1932,11 @@ $(document).ready(function() { }); $("#coinjs_coin").change(function(){ + // set cookie for use after page (re)load + let cookie = new Cookie("coinbin_coin_option"); + cookie.setValue($(this).val()); - var optionSeleted = ($("option:selected",this).attr("rel")).split(";"); - - let cookieSelectedCoin = new Cookie("coinbin_coin"); - cookieSelectedCoin.setCookie(optionSeleted) - - console.log(cookieSelectedCoin.cookieValue); + optionSeleted = ($("option:selected",this).attr("rel")).split(";"); // deal with broadcasting settings if(optionSeleted[5]=="false"){ @@ -2290,4 +2288,16 @@ $(document).ready(function() { return true; }; + /* set network from cookie on page load */ + + function setNetwork () { + let cookie = new Cookie("coinbin_coin_option"); + if(val = cookie.getValue()) + { + $("#coinjs_coin").val(val) + $("#coinjs_coin").trigger("change") + } + } + setNetwork() + }); diff --git a/js/cookie.js b/js/cookie.js index 1e989ab..4b9867b 100644 --- a/js/cookie.js +++ b/js/cookie.js @@ -1,43 +1,85 @@ class Cookie { + #name; + #value; + constructor(name) { - this.cookieName = name; - - // read the cookies value (initializes cookieValue) - this.readCookie(); + this.name = name; + this.value; + + // read the cookies value (initializes value) + this.get(); } - readCookie() { + get() { var allCookies = document.cookie; + var cookie; - // find the cookie that is currently being looked at. - allCookies.split(";").forEach((_, cookie) => { - var currentCookieName, currentCookieValue = cookie.split("="); + // find out how much cookies are set to be able to pick the right one + if(!allCookies) + { + // the tray is empty. leave fields as initialized + return; + } - if(currentCookieName = this.cookieName) + if(allCookies.indexOf(";") > 0) + { + // many cookies found, pick one + cookie = this.pickCookie(allCookies); + } else { + // only one cookie found. Check if its the right one + if(this.validateCookie(allCookies)) { - // set cookieValue to the value of this cookie - this.cookieValue = currentCookieValue; - break; + cookie = allCookies; + } + } + + // read contents of the picked cookie + if(cookie) { + this.value = this.readCookieContents(cookie); + } else { + console.log("Coudn't get cookie"); + } + } + + pickCookie(manyCookies) { + manyCookies.split(";").forEach((cookie, _) => { + if(this.validateCookie(cookie)) + { + return cookie; } }); - - // default to NULL if cookie was not found - this.cookieValue = NULL; } - setCookie(cookieValue) { + validateCookie(cookie) { + if(cookie.indexOf("=") >= 0) + { + var cookieCredentials = cookie.split("="); + var name = cookieCredentials[0] + return name == this.name; + } else { + return false; + } + } + + readCookieContents(cookie) { + var cookieCredentials = cookie.split("="); + var value = cookieCredentials[1]; + return JSON.parse(value); + } + + setValue(valueToBeSet) { // update internal record - this.cookieValue = currentCookieValue; + this.value = valueToBeSet; // prepare value for storing - cookieValueJSON = JSON.stringify(cookieValue); + var valueJSON = JSON.stringify(valueToBeSet); // set cookie with expiry on browser close - document.cookie = this.cookieName+"="+cookieValueJSON; + document.cookie = this.name+"="+valueJSON; } - getCookieValue() { - this.readCookie(); - return this.cookieValue; + getValue() { + this.get(); + return this.value; } } \ No newline at end of file