diff --git a/locales/en.json b/locales/en.json index 65603d3..4c88a65 100644 --- a/locales/en.json +++ b/locales/en.json @@ -147,5 +147,9 @@ "Word 22": "Word 22", "Word 23": "Word 23", "Word 24": "Word 24", - "Restore 12 Words Instead": "Restore 12 Words Instead" + "Restore 12 Words Instead": "Restore 12 Words Instead", + "Error: Unable to connect to node": "Error: Unable to connect to node", + "Sending Transaction Fee": "Sending Transaction Fee", + "Unable to connect to a node. Enter a node URL": "Unable to connect to a node. Enter a node URL", + "Logout": "Logout" } \ No newline at end of file diff --git a/main.js b/main.js index 9ed78cb..dfe5508 100644 --- a/main.js +++ b/main.js @@ -160,10 +160,12 @@ function createWindow() { width: 1100, height: 600, webPreferences: { - nodeIntegration: true, - contextIsolation: false + nodeIntegration: true, + contextIsolation: false, + enableRemoteModule: true, }, - icon: "./icons/png/1024x1024.png" + icon: "./icons/png/1024x1024.png", + titleBarStyle: 'hidden', }) mainWindow.loadURL(`file://${__dirname}/views/login.twig`); @@ -882,6 +884,12 @@ function doInitialLoad() { let account = data.account; let password = data.password; + let node = data.node; + + if (node && node != '' && node != 'default') + { + selectedPeer = node; + } return new Promise((resolve, reject) => { diff --git a/package.json b/package.json index d0439f6..2c98a5f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "Pandanite-Wallet", - "version": "1.0.6", + "version": "1.0.7", "description": "Electron Based Wallet for Pandanite", "main": "main.js", "scripts": { @@ -23,7 +23,6 @@ "license": "CC0-1.0", "dependencies": { "@octokit/rest": "^19.0.4", - "pandanite-js": "git+https://github.com/pandanite-crypto/pandanite-js.git", "big.js": "^6.2.1", "bip39": "^3.0.4", "bootstrap": "4.2.1", @@ -34,8 +33,9 @@ "got": "^11.8.5", "http": "0.0.1-security", "i18n-2": "^0.7.3", - "jquery": "3.3.1", + "jquery": "^3.6.4", "nedb-promises": "^6.1.0", + "pandanite-js": "git+https://github.com/pandanite-crypto/pandanite-js.git", "popper.js": "^1.16.1", "portfinder": "^1.0.32", "qrcode": "^1.5.1", @@ -43,16 +43,16 @@ "v8-compile-cache": "^2.3.0" }, "devDependencies": { - "@electron-forge/cli": "^6.0.4", - "@electron-forge/maker-deb": "^6.0.4", - "@electron-forge/maker-dmg": "^6.0.4", - "@electron-forge/maker-rpm": "^6.0.4", - "@electron-forge/maker-wix": "^6.0.4", - "@electron-forge/maker-zip": "^6.0.4", - "browser-sync": "2.26.3", + "@electron-forge/cli": "^6.0.5", + "@electron-forge/maker-deb": "^6.0.5", + "@electron-forge/maker-dmg": "^6.0.5", + "@electron-forge/maker-rpm": "^6.0.5", + "@electron-forge/maker-wix": "^6.0.5", + "@electron-forge/maker-zip": "^6.0.5", + "browser-sync": "^2.29.0", "electron": "^7.3.3", "electron-fix": "^1.1.3", - "gulp": "4.0.0" + "gulp": "^4.0.2" }, "config": { "forge": { diff --git a/renderer.js b/renderer.js index a5b60ff..6c656c5 100644 --- a/renderer.js +++ b/renderer.js @@ -1,4 +1,5 @@ //Make Node.js API calls in this file + const { ipcRenderer } = require("electron"); @@ -29,4 +30,4 @@ window.emitMessage = async function(method,data,cb) { cb(value); }); -} +} \ No newline at end of file diff --git a/static/main.css b/static/main.css index 286e51c..71e258b 100644 --- a/static/main.css +++ b/static/main.css @@ -33,8 +33,10 @@ body { font-size: 14px; font-family: "Karla Regular",sans-serif; - color: #676b79; + color: #FFFFFF; + background-color: #191919; min-height: 100vh; + -webkit-app-region: drag; } .container { @@ -52,8 +54,8 @@ body { width: 100%; display: flex; flex-wrap: wrap; - background: #fff; - margin: 20px; + background: #191919; + margin: 10px; overflow: hidden; position: relative; z-index: 1; @@ -65,7 +67,7 @@ body { width: calc(100% - 40px); display: flex; flex-wrap: wrap; - background: #fff; + background: #191919; margin: 20px; overflow: hidden; position: relative; @@ -116,7 +118,7 @@ body { .user-form:after { position: absolute; content: ""; - background: url(./media/bamboo-bmb-logo.png); + background: url(./media/bigpanda.png); /* url(./media/bamboo-bmb-logo.png); */ background-repeat: no-repeat; background-size: 440px; left: 50%; @@ -131,6 +133,11 @@ body { top: -10px; left: 15px; background: #fff; + color: #000; + border-top-right-radius: 5px; + border-top-left-radius: 5px; + padding-left:5px; + padding-right:5px; } .user-form2 .form-group label { @@ -138,6 +145,11 @@ body { top: -10px; left: 15px; background: #fff; + color: #000; + border-top-right-radius: 5px; + border-top-left-radius: 5px; + padding-left:5px; + padding-right:5px; } .form-top { @@ -146,8 +158,9 @@ body { .nimmu-user-sibmit-button { width: 100%; - background: #1b236e; - border: 2px solid #1b236e; + background: #FED31F; /*#1b236e;*/ + border: 2px solid #FED31F; /*#1b236e;*/ + color: #000; height: 50px; line-height: 50px; padding: 0; @@ -158,9 +171,8 @@ body { font-size: 16px; text-transform: uppercase; display: inline-block; - padding: 0 25px; - background: #fff; - color: #3b53db; + padding: 0 20px; + color: #FFF; margin: 30px 0; position: relative; display: block; @@ -173,7 +185,7 @@ body { top: 50%; -webkit-transform: translateY(-50%); transform: translateY(-50%); - background: #3b53db; + background: #FFF; height: 1px; } @@ -188,7 +200,8 @@ body { color: #ccc; border-bottom:0px; - font-size:18px; + font-size:14px; + border-bottom:4px solid #444; } @@ -207,7 +220,7 @@ body { .navbar-brand.active { color: #fff; - border-bottom:5px solid #F9D951; + border-bottom:4px solid #F9D951; } @@ -217,3 +230,8 @@ body { } +.swal-modal { + background-color: #000; + border: 1px solid #eee; +} + diff --git a/static/media/bigpanda.png b/static/media/bigpanda.png new file mode 100644 index 0000000..176b18c Binary files /dev/null and b/static/media/bigpanda.png differ diff --git a/static/media/screenshot.png b/static/media/screenshot.png index f0027e4..789c471 100644 Binary files a/static/media/screenshot.png and b/static/media/screenshot.png differ diff --git a/vendor/grid/mermaiddark.css b/vendor/grid/mermaiddark.css new file mode 100644 index 0000000..f03af79 --- /dev/null +++ b/vendor/grid/mermaiddark.css @@ -0,0 +1,289 @@ +.gridjs-head button, .gridjs-footer button { +cursor: pointer; +background-color: transparent; +background-image: none; +padding: 0; +margin: 0; +border: none; +outline: none; } + +.gridjs-temp { +position: relative; } + +.gridjs-head { +width: 100%; +margin-bottom: 5px; +padding: 5px 1px; } +.gridjs-head::after { + content: ''; + display: block; + clear: both; } + +.gridjs-head:empty { +padding: 0; +border: none; } + +.gridjs-container { +overflow: hidden; +display: inline-block; +padding: 2px; +color: #fff; +position: relative; +z-index: 0; } + +.gridjs-footer { +display: block; +position: relative; +width: 100%; +z-index: 5; +padding: 12px 24px; +border-top: 1px solid #1a1814; +background-color: #000; +box-shadow: 0 1px 3px 0 rgba(255,255,255, 0.1), 0 1px 2px 0 rgba(255,255,255, 0.26); +border-radius: 0 0 8px 8px; +border-bottom-width: 1px; +border-color: #1a1814; } + +.gridjs-footer:empty { +padding: 0; +border: none; } + +input.gridjs-input { +outline: none; +background-color: #000; +border: 1px solid #2d2923; +border-radius: 5px; +padding: 10px 13px; +font-size: 14px; +line-height: 1.45; +-webkit-appearance: none; +-moz-appearance: none; +appearance: none; } +input.gridjs-input:focus { + box-shadow: 0 0 0 3px rgba(106,66,12, 0.5); + border-color: #643d08; } + +.gridjs-pagination { +color: #c2bfbb; } +.gridjs-pagination::after { + content: ''; + display: block; + clear: both; } +.gridjs-pagination .gridjs-summary { + float: left; + margin-top: 5px; } +.gridjs-pagination .gridjs-pages { + float: right; } + .gridjs-pagination .gridjs-pages button { + padding: 5px 14px; + border: 1px solid #2d2923; + background-color: #000; + border-right: none; + outline: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; } + .gridjs-pagination .gridjs-pages button:focus { + box-shadow: 0 0 0 2px rgba(106,66,12, 0.5); } + .gridjs-pagination .gridjs-pages button:hover { + background-color: #080808; + color: #c3bda8; + outline: none; } + .gridjs-pagination .gridjs-pages button:disabled, + .gridjs-pagination .gridjs-pages button[disabled], + .gridjs-pagination .gridjs-pages button:hover:disabled { + cursor: default; + background-color: #000; + color: #948d7f; } + .gridjs-pagination .gridjs-pages button.gridjs-spread { + cursor: default; + box-shadow: none; + background-color: #000; } + .gridjs-pagination .gridjs-pages button.gridjs-currentPage { + background-color: #080808; + font-weight: bold; } + .gridjs-pagination .gridjs-pages button:last-child { + border-bottom-right-radius: 6px; + border-top-right-radius: 6px; + border-right: 1px solid #2d2923; } + .gridjs-pagination .gridjs-pages button:first-child { + border-bottom-left-radius: 6px; + border-top-left-radius: 6px; } + +button.gridjs-sort { +float: right; +height: 24px; +width: 13px; +background-color: transparent; +background-repeat: no-repeat; +background-position-x: center; +cursor: pointer; +padding: 0; +margin: 0; +border: none; +outline: none; +background-size: contain; } +button.gridjs-sort-neutral { + opacity: 0.3; + background-image: url("data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJDYXBhXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IgoJIHdpZHRoPSI0MDEuOTk4cHgiIGhlaWdodD0iNDAxLjk5OHB4IiB2aWV3Qm94PSIwIDAgNDAxLjk5OCA0MDEuOTk4IiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCA0MDEuOTk4IDQwMS45OTg7IgoJIHhtbDpzcGFjZT0icHJlc2VydmUiPgo8Zz4KCTxnPgoJCTxwYXRoIGQ9Ik03My4wOTIsMTY0LjQ1MmgyNTUuODEzYzQuOTQ5LDAsOS4yMzMtMS44MDcsMTIuODQ4LTUuNDI0YzMuNjEzLTMuNjE2LDUuNDI3LTcuODk4LDUuNDI3LTEyLjg0NwoJCQljMC00Ljk0OS0xLjgxMy05LjIyOS01LjQyNy0xMi44NUwyMTMuODQ2LDUuNDI0QzIxMC4yMzIsMS44MTIsMjA1Ljk1MSwwLDIwMC45OTksMHMtOS4yMzMsMS44MTItMTIuODUsNS40MjRMNjAuMjQyLDEzMy4zMzEKCQkJYy0zLjYxNywzLjYxNy01LjQyNCw3LjkwMS01LjQyNCwxMi44NWMwLDQuOTQ4LDEuODA3LDkuMjMxLDUuNDI0LDEyLjg0N0M2My44NjMsMTYyLjY0NSw2OC4xNDQsMTY0LjQ1Miw3My4wOTIsMTY0LjQ1MnoiLz4KCQk8cGF0aCBkPSJNMzI4LjkwNSwyMzcuNTQ5SDczLjA5MmMtNC45NTIsMC05LjIzMywxLjgwOC0xMi44NSw1LjQyMWMtMy42MTcsMy42MTctNS40MjQsNy44OTgtNS40MjQsMTIuODQ3CgkJCWMwLDQuOTQ5LDEuODA3LDkuMjMzLDUuNDI0LDEyLjg0OEwxODguMTQ5LDM5Ni41N2MzLjYyMSwzLjYxNyw3LjkwMiw1LjQyOCwxMi44NSw1LjQyOHM5LjIzMy0xLjgxMSwxMi44NDctNS40MjhsMTI3LjkwNy0xMjcuOTA2CgkJCWMzLjYxMy0zLjYxNCw1LjQyNy03Ljg5OCw1LjQyNy0xMi44NDhjMC00Ljk0OC0xLjgxMy05LjIyOS01LjQyNy0xMi44NDdDMzM4LjEzOSwyMzkuMzUzLDMzMy44NTQsMjM3LjU0OSwzMjguOTA1LDIzNy41NDl6Ii8+Cgk8L2c+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPC9zdmc+"); + background-position-y: center; filter: invert(100%);} +button.gridjs-sort-asc { + background-image: url("data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJDYXBhXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IgoJIHdpZHRoPSIyOTIuMzYycHgiIGhlaWdodD0iMjkyLjM2MXB4IiB2aWV3Qm94PSIwIDAgMjkyLjM2MiAyOTIuMzYxIiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCAyOTIuMzYyIDI5Mi4zNjE7IgoJIHhtbDpzcGFjZT0icHJlc2VydmUiPgo8Zz4KCTxwYXRoIGQ9Ik0yODYuOTM1LDE5Ny4yODdMMTU5LjAyOCw2OS4zODFjLTMuNjEzLTMuNjE3LTcuODk1LTUuNDI0LTEyLjg0Ny01LjQyNHMtOS4yMzMsMS44MDctMTIuODUsNS40MjRMNS40MjQsMTk3LjI4NwoJCUMxLjgwNywyMDAuOTA0LDAsMjA1LjE4NiwwLDIxMC4xMzRzMS44MDcsOS4yMzMsNS40MjQsMTIuODQ3YzMuNjIxLDMuNjE3LDcuOTAyLDUuNDI1LDEyLjg1LDUuNDI1aDI1NS44MTMKCQljNC45NDksMCw5LjIzMy0xLjgwOCwxMi44NDgtNS40MjVjMy42MTMtMy42MTMsNS40MjctNy44OTgsNS40MjctMTIuODQ3UzI5MC41NDgsMjAwLjkwNCwyODYuOTM1LDE5Ny4yODd6Ii8+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPC9zdmc+"); + background-position-y: 35%; + background-size: 10px; filter: invert(100%);} +button.gridjs-sort-desc { + background-image: url("data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJDYXBhXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IgoJIHdpZHRoPSIyOTIuMzYycHgiIGhlaWdodD0iMjkyLjM2MnB4IiB2aWV3Qm94PSIwIDAgMjkyLjM2MiAyOTIuMzYyIiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCAyOTIuMzYyIDI5Mi4zNjI7IgoJIHhtbDpzcGFjZT0icHJlc2VydmUiPgo8Zz4KCTxwYXRoIGQ9Ik0yODYuOTM1LDY5LjM3N2MtMy42MTQtMy42MTctNy44OTgtNS40MjQtMTIuODQ4LTUuNDI0SDE4LjI3NGMtNC45NTIsMC05LjIzMywxLjgwNy0xMi44NSw1LjQyNAoJCUMxLjgwNyw3Mi45OTgsMCw3Ny4yNzksMCw4Mi4yMjhjMCw0Ljk0OCwxLjgwNyw5LjIyOSw1LjQyNCwxMi44NDdsMTI3LjkwNywxMjcuOTA3YzMuNjIxLDMuNjE3LDcuOTAyLDUuNDI4LDEyLjg1LDUuNDI4CgkJczkuMjMzLTEuODExLDEyLjg0Ny01LjQyOEwyODYuOTM1LDk1LjA3NGMzLjYxMy0zLjYxNyw1LjQyNy03Ljg5OCw1LjQyNy0xMi44NDdDMjkyLjM2Miw3Ny4yNzksMjkwLjU0OCw3Mi45OTgsMjg2LjkzNSw2OS4zNzd6Ii8+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPC9zdmc+"); + background-position-y: 65%; + background-size: 10px; filter: invert(100%);} + +button.gridjs-sort:focus { +outline: none; } + +table.gridjs-table { +max-width: 100%; +border-collapse: collapse; +text-align: left; +display: table; +margin: 0; +padding: 0; +overflow: auto; +table-layout: fixed; } + +.gridjs-tbody { +background-color: #000; } + +td.gridjs-td { +border: 1px solid #1a1814; +padding: 12px 24px; +background-color: #000; +box-sizing: content-box; } + +td.gridjs-td:first-child { +border-left: none; } + +td.gridjs-td:last-child { +border-right: none; } + +td.gridjs-message { +text-align: center; } + +th.gridjs-th { +position: relative; +color: #6b7280; +background-color: #060504; +border: 1px solid #1a1814; +border-top: none; +padding: 14px 24px; +-webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +box-sizing: border-box; +white-space: nowrap; +outline: none; +vertical-align: middle; } +th.gridjs-th .gridjs-th-content { + text-overflow: ellipsis; + overflow: hidden; + width: 100%; + float: left; } +th.gridjs-th-sort { + cursor: pointer; } + th.gridjs-th-sort .gridjs-th-content { + width: calc(100% - 15px); } +th.gridjs-th-sort:hover { + background-color: #1a1814; } +th.gridjs-th-sort:focus { + background-color: #1a1814; } +th.gridjs-th-fixed { + position: sticky; + box-shadow: 0 1px 0 0 #1a1814; } + @supports (-moz-appearance: none) { + th.gridjs-th-fixed { + box-shadow: 0 0 0 1px #1a1814; } } + +th.gridjs-th:first-child { +border-left: none; } + +th.gridjs-th:last-child { +border-right: none; } + +.gridjs-tr { +border: none; } +.gridjs-tr-selected td { + background-color: #140a00; } + +.gridjs-tr:last-child td { +border-bottom: 0; } + +.gridjs *, +.gridjs :after, +.gridjs :before { +box-sizing: border-box; } + +.gridjs-wrapper { +position: relative; +z-index: 1; +overflow: auto; +width: 100%; +-webkit-font-smoothing: antialiased; +-moz-osx-font-smoothing: grayscale; +box-shadow: 0 1px 3px 0 rgba(255,255,255, 0.1), 0 1px 2px 0 rgba(255,255,255, 0.26); +border-radius: 8px 8px 0 0; +display: block; +border-top-width: 1px; +border-color: #1a1814; } + +.gridjs-wrapper:nth-last-of-type(2) { +border-radius: 8px; +border-bottom-width: 1px; } + +.gridjs-search { +float: left; } +.gridjs-search-input { + width: 250px; } + +.gridjs-loading-bar { +z-index: 10; +position: absolute; +left: 0; +right: 0; +top: 0; +bottom: 0; +background-color: #000; +opacity: 0.5; } +.gridjs-loading-bar::after { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + transform: translateX(-100%); + background-image: linear-gradient(90deg, rgba(51,51,51, 0) 0, rgba(51,51,51, 0.2) 20%, rgba(51,51,51, 0.5) 60%, rgba(51,51,51, 0)); + -webkit-animation: shimmer 2s infinite; + animation: shimmer 2s infinite; + content: ''; } + +@-webkit-keyframes shimmer { +100% { + transform: translateX(100%); } } + +@keyframes shimmer { +100% { + transform: translateX(100%); } } + +.gridjs-td .gridjs-checkbox { +display: block; +margin: auto; +cursor: pointer; } + +.gridjs-resizable { +position: absolute; +top: 0; +bottom: 0; +right: 0; +width: 5px; } +.gridjs-resizable:hover { + cursor: ew-resize; + background-color: #643d08; } diff --git a/views/account.twig b/views/account.twig index 2e5d3bb..b55e8c3 100644 --- a/views/account.twig +++ b/views/account.twig @@ -1,6 +1,6 @@ -