parent
6e2f9b282b
commit
1e5cfb2ecc
|
@ -1,4 +1,4 @@
|
|||
name: Loki Electron Wallet Build
|
||||
name: Oxen Electron Wallet Build
|
||||
|
||||
on:
|
||||
push:
|
||||
|
@ -30,7 +30,7 @@ jobs:
|
|||
- name: Install dependencies
|
||||
run: npm install
|
||||
|
||||
- name: Download lokid binaries
|
||||
- name: Download oxend binaries
|
||||
run: ./download-asset.sh
|
||||
env:
|
||||
OS: ${{ runner.os }}
|
||||
|
@ -50,10 +50,10 @@ jobs:
|
|||
shell: bash
|
||||
working-directory: ./downloads
|
||||
|
||||
- name: Move lokid binaries
|
||||
- name: Move oxend binaries
|
||||
run: |
|
||||
find ./downloads -type f -name "lokid*" -exec cp '{}' ./bin \;
|
||||
find ./downloads -type f -name "loki-wallet-rpc*" -exec cp '{}' ./bin \;
|
||||
find ./downloads -type f -name "oxend*" -exec cp '{}' ./bin \;
|
||||
find ./downloads -type f -name "oxen-wallet-rpc*" -exec cp '{}' ./bin \;
|
||||
shell: bash
|
||||
|
||||
- name: Verify binaries
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
name: Loki Electron Wallet With Dev Binaries
|
||||
name: Oxen Electron Wallet With Dev Binaries
|
||||
|
||||
on:
|
||||
push:
|
||||
|
@ -29,7 +29,7 @@ jobs:
|
|||
- name: Install dependencies
|
||||
run: npm install
|
||||
|
||||
- name: Download lokid binaries
|
||||
- name: Download oxend binaries
|
||||
run: ./download-dev-bins.sh
|
||||
env:
|
||||
OS: ${{ runner.os }}
|
||||
|
@ -48,10 +48,10 @@ jobs:
|
|||
shell: bash
|
||||
working-directory: ./downloads
|
||||
|
||||
- name: Move lokid binaries
|
||||
- name: Move oxend binaries
|
||||
run: |
|
||||
find ./downloads -type f -name "lokid*" -exec cp '{}' ./bin \;
|
||||
find ./downloads -type f -name "loki-wallet-rpc*" -exec cp '{}' ./bin \;
|
||||
find ./downloads -type f -name "oxend*" -exec cp '{}' ./bin \;
|
||||
find ./downloads -type f -name "oxen-wallet-rpc*" -exec cp '{}' ./bin \;
|
||||
shell: bash
|
||||
|
||||
- name: Verify binaries
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
name: Loki Electron Wallet Release
|
||||
name: Oxen Electron Wallet Release
|
||||
|
||||
on:
|
||||
push:
|
||||
|
@ -29,7 +29,7 @@ jobs:
|
|||
- name: Install dependencies
|
||||
run: npm install
|
||||
|
||||
- name: Download lokid binaries
|
||||
- name: Download oxend binaries
|
||||
run: ./download-asset.sh
|
||||
env:
|
||||
OS: ${{ runner.os }}
|
||||
|
@ -49,10 +49,10 @@ jobs:
|
|||
shell: bash
|
||||
working-directory: ./downloads
|
||||
|
||||
- name: Move lokid binaries
|
||||
- name: Move oxend binaries
|
||||
run: |
|
||||
find ./downloads -type f -name "lokid*" -exec cp '{}' ./bin \;
|
||||
find ./downloads -type f -name "loki-wallet-rpc*" -exec cp '{}' ./bin \;
|
||||
find ./downloads -type f -name "oxend*" -exec cp '{}' ./bin \;
|
||||
find ./downloads -type f -name "oxen-wallet-rpc*" -exec cp '{}' ./bin \;
|
||||
shell: bash
|
||||
|
||||
- name: Verify binaries
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
# Building
|
||||
|
||||
Building loki electron wallet binaries is done using github actions. Windows and linux binaries will build right out of the box but there are some extra steps needed for Mac OS
|
||||
Building oxen electron wallet binaries is done using github actions. Windows and linux binaries will build right out of the box but there are some extra steps needed for Mac OS
|
||||
|
||||
## Mac OS
|
||||
|
||||
|
|
22
README.md
22
README.md
|
@ -1,34 +1,34 @@
|
|||
# Loki Electron GUI Wallet
|
||||
# Oxen Electron GUI Wallet
|
||||
|
||||
### Introduction
|
||||
|
||||
Loki is a private cryptocurrency based on Monero. Loki aims to provide a private data transmission layer using a second layer of Service Nodes.
|
||||
More information on the project can be found on the [website](https://loki.network) and in the [whitepaper](https://loki.network/whitepaper). Loki is an open source project, and we encourage contributions from anyone with something to offer.
|
||||
Oxen (formerly Loki) is a private cryptocurrency based on Monero. Oxen aims to provide a private data transmission layer using a second layer of Service Nodes.
|
||||
More information on the project can be found on the [website](https://oxen.io) and in the [whitepaper](https://oxen.io/whitepaper). Oxen is an open source project, and we encourage contributions from anyone with something to offer.
|
||||
|
||||
<p align="center">
|
||||
<img src="https://raw.githubusercontent.com/KeeJef/loki-electron-gui-wallet/master/src-electron/icons/mrcuug.PNG" width="600">
|
||||
<img src="https://raw.githubusercontent.com/KeeJef/oxen-electron-gui-wallet/master/src-electron/icons/mrcuug.PNG" width="600">
|
||||
</p>
|
||||
|
||||
### About this project
|
||||
|
||||
This is the new electron GUI for Loki. It is open source and completely free to use without restrictions, anyone may create an alternative implementation of the Loki Electron GUI that uses the protocol and network in a compatible manner.
|
||||
This is the new electron GUI for Oxen. It is open source and completely free to use without restrictions, anyone may create an alternative implementation of the Oxen Electron GUI that uses the protocol and network in a compatible manner.
|
||||
|
||||
Please submit any changes as pull requests to the development branch, all changes are assessed in the development branch before being merged to master, release tags are considered stable builds for the GUI.
|
||||
|
||||
#### Pre-requisites
|
||||
|
||||
- Download latest [Lokid](https://github.com/loki-project/loki/releases/latest)
|
||||
- Extract the lokid binaries to a folder
|
||||
- Download latest [oxend](https://github.com/oxen-project/oxen/releases/latest)
|
||||
- Extract the oxend binaries to a folder
|
||||
|
||||
#### Commands
|
||||
|
||||
```
|
||||
nvm use 14.11.0
|
||||
npm install -g @quasar/cli
|
||||
git clone https://github.com/loki-project/loki-electron-gui-wallet
|
||||
cd loki-electron-gui-wallet
|
||||
cp path_to_lokid_binaries/lokid bin/
|
||||
cp path_to_lokid_binaries/loki-wallet-rpc bin/
|
||||
git clone https://github.com/oxen-project/oxen-electron-gui-wallet
|
||||
cd oxen-electron-gui-wallet
|
||||
cp path_to_oxend_binaries/oxend bin/
|
||||
cp path_to_oxend_binaries/oxen-wallet-rpc bin/
|
||||
npm install
|
||||
```
|
||||
|
||||
|
|
|
@ -22,15 +22,21 @@ exports.default = async function notarizing(context) {
|
|||
log("Notarizing mac application");
|
||||
|
||||
const appName = context.packager.appInfo.productFilename;
|
||||
const { SIGNING_APPLE_ID, SIGNING_APP_PASSWORD, SIGNING_TEAM_ID } = process.env;
|
||||
const {
|
||||
SIGNING_APPLE_ID,
|
||||
SIGNING_APP_PASSWORD,
|
||||
SIGNING_TEAM_ID
|
||||
} = process.env;
|
||||
|
||||
if (isEmpty(SIGNING_APPLE_ID) || isEmpty(SIGNING_APP_PASSWORD)) {
|
||||
log("SIGNING_APPLE_ID or SIGNING_APP_PASSWORD not set.\nTerminating noratization.");
|
||||
log(
|
||||
"SIGNING_APPLE_ID or SIGNING_APP_PASSWORD not set.\nTerminating noratization."
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
const options = {
|
||||
appBundleId: "com.loki-project.electron-wallet",
|
||||
appBundleId: "com.oxen.electron-wallet",
|
||||
appPath: `${appOutDir}/${appName}.app`,
|
||||
appleId: SIGNING_APPLE_ID,
|
||||
appleIdPassword: SIGNING_APP_PASSWORD
|
||||
|
|
|
@ -29,4 +29,4 @@ curl -sL --fail \
|
|||
-o "${RENAME}" \
|
||||
"$ASSET_URL"
|
||||
|
||||
echo "Loki binaries downloaded"
|
||||
echo "Oxen binaries downloaded"
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "loki-electron-wallet",
|
||||
"version": "1.5.0",
|
||||
"version": "1.5.4",
|
||||
"lockfileVersion": 1,
|
||||
"requires": true,
|
||||
"dependencies": {
|
||||
|
|
14
package.json
14
package.json
|
@ -1,16 +1,16 @@
|
|||
{
|
||||
"name": "loki-electron-wallet",
|
||||
"version": "1.5.4",
|
||||
"description": "Modern GUI interface for Loki Currency",
|
||||
"productName": "Loki Electron Wallet",
|
||||
"name": "oxen-electron-wallet",
|
||||
"version": "1.5.5",
|
||||
"description": "Modern GUI interface for Oxen Currency",
|
||||
"productName": "Oxen Electron Wallet",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/loki-project/loki-electron-gui-wallet.git"
|
||||
},
|
||||
"cordovaId": "com.lokinetwork.wallet",
|
||||
"cordovaId": "com.oxen.wallet",
|
||||
"author": {
|
||||
"name": "Loki Project",
|
||||
"email": "team@loki.network"
|
||||
"name": "Oxen",
|
||||
"email": "oxen@oxen.io"
|
||||
},
|
||||
"private": true,
|
||||
"scripts": {
|
||||
|
|
Binary file not shown.
After Width: | Height: | Size: 30 KiB |
|
@ -1,66 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 22.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 1000 368" style="enable-background:new 0 0 1000 368;" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{fill:#FFFFFF;}
|
||||
.st1{fill:url(#SVGID_1_);}
|
||||
.st2{fill:#333333;}
|
||||
.st3{fill:url(#SVGID_2_);}
|
||||
.st4{fill:url(#SVGID_3_);}
|
||||
.st5{fill:#00263A;}
|
||||
.st6{fill:url(#SVGID_4_);}
|
||||
.st7{fill:url(#SVGID_5_);}
|
||||
.st8{fill:url(#SVGID_6_);}
|
||||
.st9{fill:url(#SVGID_7_);}
|
||||
.st10{fill:url(#SVGID_8_);}
|
||||
.st11{fill:url(#SVGID_9_);}
|
||||
.st12{fill:url(#SVGID_10_);}
|
||||
.st13{fill:url(#SVGID_11_);}
|
||||
.st14{fill:url(#SVGID_12_);}
|
||||
.st15{fill:url(#SVGID_13_);}
|
||||
.st16{fill:url(#SVGID_14_);}
|
||||
.st17{fill:url(#SVGID_15_);}
|
||||
.st18{fill:url(#SVGID_16_);}
|
||||
.st19{fill:url(#SVGID_17_);}
|
||||
.st20{opacity:6.000000e-02;}
|
||||
.st21{opacity:4.000000e-02;fill:#FFFFFF;}
|
||||
.st22{opacity:7.000000e-02;fill:#FFFFFF;}
|
||||
.st23{fill:#008522;}
|
||||
.st24{fill:#78BE20;}
|
||||
.st25{fill:#005F61;}
|
||||
.st26{fill:url(#SVGID_18_);}
|
||||
</style>
|
||||
<g>
|
||||
<path class="st0" d="M366.6,78h37.1v178.9H497v32.7H366.6V78z"/>
|
||||
<path class="st0" d="M619.8,74.5C683.3,74.5,728,120.8,728,184c0,63.1-44.7,109.5-108.2,109.5c-63.5,0-108.2-46.3-108.2-109.5
|
||||
C511.6,120.8,556.3,74.5,619.8,74.5z M619.8,107.5c-42.8,0-70.1,32.7-70.1,76.5c0,43.5,27.3,76.5,70.1,76.5
|
||||
c42.5,0,70.1-33,70.1-76.5C689.9,140.2,662.3,107.5,619.8,107.5z"/>
|
||||
<path class="st0" d="M819.4,200.5L801,222v67.6h-37.1V78H801v100.9L883.8,78h46l-86,99.9l92.3,111.7h-45.7L819.4,200.5z"/>
|
||||
<path class="st0" d="M960.9,78H998v211.6h-37.1V78z"/>
|
||||
</g>
|
||||
<g>
|
||||
<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="86.8402" y1="268.7968" x2="86.8402" y2="0.426">
|
||||
<stop offset="0" style="stop-color:#78BE20"/>
|
||||
<stop offset="0.1197" style="stop-color:#58AF21"/>
|
||||
<stop offset="0.3682" style="stop-color:#199122"/>
|
||||
<stop offset="0.486" style="stop-color:#008522"/>
|
||||
<stop offset="0.6925" style="stop-color:#007242"/>
|
||||
<stop offset="0.8806" style="stop-color:#006459"/>
|
||||
<stop offset="1" style="stop-color:#005F61"/>
|
||||
</linearGradient>
|
||||
<polygon class="st1" points="132.1,268.8 0.3,137 136.9,0.4 173.3,36.8 73.1,137 168.5,232.4 "/>
|
||||
</g>
|
||||
<g>
|
||||
<linearGradient id="SVGID_2_" gradientUnits="userSpaceOnUse" x1="212.9564" y1="367.5197" x2="212.9564" y2="99.1484">
|
||||
<stop offset="0" style="stop-color:#78BE20"/>
|
||||
<stop offset="0.1197" style="stop-color:#58AF21"/>
|
||||
<stop offset="0.3682" style="stop-color:#199122"/>
|
||||
<stop offset="0.486" style="stop-color:#008522"/>
|
||||
<stop offset="0.6925" style="stop-color:#007242"/>
|
||||
<stop offset="0.8806" style="stop-color:#006459"/>
|
||||
<stop offset="1" style="stop-color:#005F61"/>
|
||||
</linearGradient>
|
||||
<polygon class="st3" points="162.9,367.5 126.5,331.1 226.7,230.9 131.3,135.6 167.7,99.1 299.5,230.9 "/>
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 2.9 KiB |
File diff suppressed because it is too large
Load Diff
After Width: | Height: | Size: 210 KiB |
|
@ -0,0 +1,30 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 25.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 1501.3 321.3" style="enable-background:new 0 0 1501.3 321.3;" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{fill:#FFFFFF;}
|
||||
.st1{fill:#12C7BA;}
|
||||
</style>
|
||||
<g>
|
||||
<g>
|
||||
<path class="st0" d="M886.1,75.7l-65,56l-65-56c-5.2-4.5-11.9-7-18.8-7l-56.5,0l106.7,91.9l-106.7,91.9l56.5,0
|
||||
c6.9,0,13.6-2.5,18.8-7l65-56l65,56c5.2,4.5,11.9,7,18.8,7l56.5,0l-106.7-91.9l106.7-91.9h-56.5C898,68.7,891.3,71.2,886.1,75.7z"
|
||||
/>
|
||||
<path class="st0" d="M1501.3,68.7h-43v128.4L1299.2,74.7c-5-3.9-11.2-6-17.6-6h-30.9v183.9h43V124.2l159.1,122.4
|
||||
c5,3.9,11.2,6,17.6,6h30.9V68.7z"/>
|
||||
<path class="st0" d="M1212,107.9V68.7l-205.7,0c-22.5,25.9-34.5,58-34.5,91.9c0,33.9,12,66.1,34.5,91.9H1212v-39.1h-184.4
|
||||
c-5.1-9.6-8.8-20.3-10.7-33.2h180.3v-41.1h-180c2-12,5.6-22.2,10.4-31.3H1212z"/>
|
||||
<path class="st0" d="M674.4,160.7c0-55.4-34-91.9-34-91.9l-193.1,0c0,0-34,36.6-34,91.9s34,91.9,34,91.9h193.1
|
||||
C640.4,252.6,674.4,216,674.4,160.7z M469.6,213.2c-8.7-15.8-13.3-33.9-13.3-52.5c0-18.6,4.6-36.7,13.3-52.5h148.6
|
||||
c8.7,15.8,13.3,33.9,13.3,52.5c0,18.6-4.6,36.7-13.3,52.5H469.6z"/>
|
||||
</g>
|
||||
<g>
|
||||
<circle class="st0" cx="160.6" cy="160.6" r="160.6"/>
|
||||
<g>
|
||||
<polygon class="st1" points="67.6,80.5 160.6,160.6 253.7,80.5 "/>
|
||||
<polygon class="st1" points="253.7,240.8 160.6,160.6 67.6,240.8 "/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 1.6 KiB |
File diff suppressed because it is too large
Load Diff
After Width: | Height: | Size: 214 KiB |
|
@ -156,17 +156,16 @@ module.exports = function() {
|
|||
builder: {
|
||||
// https://www.electron.build/configuration/configuration
|
||||
|
||||
appId: "com.loki-project.electron-wallet",
|
||||
productName: "Loki Electron Wallet",
|
||||
copyright:
|
||||
"Copyright © 2018-2020 Loki Project, 2018 Ryo Currency Project",
|
||||
appId: "com.oxen.electron-wallet",
|
||||
productName: "Oxen Electron Wallet",
|
||||
copyright: "Copyright © 2018-2021 Oxen, 2018 Ryo Currency Project",
|
||||
afterSign: "build/notarize.js",
|
||||
artifactName: "loki-electron-wallet-${version}-${os}.${ext}",
|
||||
artifactName: "oxen-electron-wallet-${version}-${os}.${ext}",
|
||||
publish: "github",
|
||||
|
||||
linux: {
|
||||
target: ["AppImage", "deb"],
|
||||
icon: "src-electron/icons/icon_512x512.png",
|
||||
icon: "src-electron/icon.png",
|
||||
category: "Finance"
|
||||
},
|
||||
|
||||
|
@ -184,7 +183,7 @@ module.exports = function() {
|
|||
},
|
||||
|
||||
dmg: {
|
||||
background: "src-electron/build/loki-dmg.tiff",
|
||||
background: "src-electron/build/oxen-dmg.tiff",
|
||||
sign: false
|
||||
},
|
||||
|
||||
|
|
|
@ -21,7 +21,10 @@ async function canAutoUpdate() {
|
|||
|
||||
// Taken from: https://github.com/electron-userland/electron-builder/blob/d4feb6d3c8b008f8b455c761d654c8088f90d8fa/packages/electron-updater/src/ElectronAppAdapter.ts#L25
|
||||
const updateFile = isPackaged ? "app-update.yml" : "dev-app-update.yml";
|
||||
const basePath = isPackaged && process.resourcesPath ? process.resourcesPath : app.getAppPath();
|
||||
const basePath =
|
||||
isPackaged && process.resourcesPath
|
||||
? process.resourcesPath
|
||||
: app.getAppPath();
|
||||
const appUpdateConfigPath = path.join(basePath, updateFile);
|
||||
|
||||
return new Promise(resolve => {
|
||||
|
@ -96,8 +99,8 @@ async function showUpdateDialog(mainWindow) {
|
|||
const options = {
|
||||
type: "info",
|
||||
buttons: ["Restart Wallet", "Later"],
|
||||
title: "Loki Electron Wallet update available",
|
||||
message: "There is a new version of Loki Electron Wallet available.",
|
||||
title: "Oxen Electron Wallet update available",
|
||||
message: "There is a new version of Oxen Electron Wallet available.",
|
||||
detail: "Press Restart Wallet to apply the update",
|
||||
defaultId: LATER_BUTTON,
|
||||
cancelId: RESTART_BUTTON
|
||||
|
@ -115,7 +118,7 @@ async function showCannotUpdateDialog(mainWindow) {
|
|||
buttons: ["Ok"],
|
||||
title: "Cannot update",
|
||||
message:
|
||||
"Loki Electron Wallet failed to update but there is a new version available. Please go to https://loki.network/ and install the new version manually."
|
||||
"Oxen Electron Wallet failed to update but there is a new version available. Please go to https://oxen.io/ and install the new version manually."
|
||||
};
|
||||
|
||||
return new Promise(resolve => {
|
||||
|
|
|
@ -57,7 +57,7 @@ function createWindow() {
|
|||
height: mainWindowState.height,
|
||||
minWidth: 640,
|
||||
minHeight: 480,
|
||||
icon: require("path").join(__statics, "icon_512x512.png"),
|
||||
icon: require("path").join(__statics, "icon.png"),
|
||||
title,
|
||||
webPreferences: {
|
||||
nodeIntegration: true,
|
||||
|
@ -137,7 +137,7 @@ function createWindow() {
|
|||
mainWindow,
|
||||
{
|
||||
title: "Startup error",
|
||||
message: `Loki Wallet is already open, or port ${config.port} is in use`,
|
||||
message: `Oxen Wallet is already open, or port ${config.port} is in use`,
|
||||
type: "error",
|
||||
buttons: ["ok"]
|
||||
},
|
||||
|
|
|
@ -33,7 +33,7 @@ let template = [
|
|||
{
|
||||
label: "Learn More",
|
||||
click() {
|
||||
require("electron").shell.openExternal("https://loki.network/");
|
||||
require("electron").shell.openExternal("https://oxen.io/");
|
||||
}
|
||||
}
|
||||
]
|
||||
|
@ -42,7 +42,7 @@ let template = [
|
|||
|
||||
if (process.platform === "darwin") {
|
||||
template.unshift({
|
||||
label: "Loki Electron Wallet",
|
||||
label: "Oxen Electron Wallet",
|
||||
submenu: [
|
||||
{ role: "about" },
|
||||
{ type: "separator" },
|
||||
|
|
|
@ -34,16 +34,27 @@ export class Backend {
|
|||
}
|
||||
|
||||
init(config) {
|
||||
let configDir;
|
||||
let legacyLokiConfigDir;
|
||||
if (os.platform() === "win32") {
|
||||
this.config_dir = "C:\\ProgramData\\loki";
|
||||
this.wallet_dir = `${os.homedir()}\\Documents\\Loki`;
|
||||
configDir = "C:\\ProgramData\\oxen";
|
||||
legacyLokiConfigDir = "C:\\ProgramData\\loki\\";
|
||||
this.wallet_dir = `${os.homedir()}\\Documents\\Oxen`;
|
||||
} else {
|
||||
this.config_dir = path.join(os.homedir(), ".loki");
|
||||
this.wallet_dir = path.join(os.homedir(), "Loki");
|
||||
configDir = path.join(os.homedir(), ".oxen");
|
||||
legacyLokiConfigDir = path.join(os.homedir(), ".loki/");
|
||||
this.wallet_dir = path.join(os.homedir(), "Oxen");
|
||||
}
|
||||
|
||||
if (!fs.existsSync(this.config_dir)) {
|
||||
fs.mkdirpSync(this.config_dir);
|
||||
// if the user has used loki before, just keep the same stuff
|
||||
if (fs.existsSync(legacyLokiConfigDir)) {
|
||||
this.config_dir = legacyLokiConfigDir;
|
||||
} else {
|
||||
// create the new, Oxen location
|
||||
this.config_dir = configDir;
|
||||
if (!fs.existsSync(configDir)) {
|
||||
fs.mkdirpSync(configDir);
|
||||
}
|
||||
}
|
||||
|
||||
if (!fs.existsSync(path.join(this.config_dir, "gui"))) {
|
||||
|
|
|
@ -29,25 +29,25 @@ export class Daemon {
|
|||
checkVersion() {
|
||||
return new Promise(resolve => {
|
||||
if (process.platform === "win32") {
|
||||
let lokid_path = path.join(__ryo_bin, "lokid.exe");
|
||||
let lokid_version_cmd = `"${lokid_path}" --version`;
|
||||
if (!fs.existsSync(lokid_path)) {
|
||||
let oxend_path = path.join(__ryo_bin, "oxend.exe");
|
||||
let oxend_version_cmd = `"${oxend_path}" --version`;
|
||||
if (!fs.existsSync(oxend_path)) {
|
||||
resolve(false);
|
||||
}
|
||||
child_process.exec(lokid_version_cmd, (error, stdout) => {
|
||||
child_process.exec(oxend_version_cmd, (error, stdout) => {
|
||||
if (error) {
|
||||
resolve(false);
|
||||
}
|
||||
resolve(stdout);
|
||||
});
|
||||
} else {
|
||||
let lokid_path = path.join(__ryo_bin, "lokid");
|
||||
let lokid_version_cmd = `"${lokid_path}" --version`;
|
||||
if (!fs.existsSync(lokid_path)) {
|
||||
let oxend_path = path.join(__ryo_bin, "oxend");
|
||||
let oxend_version_cmd = `"${oxend_path}" --version`;
|
||||
if (!fs.existsSync(oxend_path)) {
|
||||
resolve(false);
|
||||
}
|
||||
child_process.exec(
|
||||
lokid_version_cmd,
|
||||
oxend_version_cmd,
|
||||
{ detached: true },
|
||||
(error, stdout) => {
|
||||
if (error) {
|
||||
|
@ -148,7 +148,7 @@ export class Daemon {
|
|||
args.push("--stagenet");
|
||||
}
|
||||
|
||||
args.push("--log-file", path.join(dirs[net_type], "logs", "lokid.log"));
|
||||
args.push("--log-file", path.join(dirs[net_type], "logs", "oxend.log"));
|
||||
if (daemon.rpc_bind_ip !== "127.0.0.1") {
|
||||
args.push("--confirm-external-bind");
|
||||
}
|
||||
|
@ -173,12 +173,12 @@ export class Daemon {
|
|||
if (status === "closed") {
|
||||
if (process.platform === "win32") {
|
||||
this.daemonProcess = child_process.spawn(
|
||||
path.join(__ryo_bin, "lokid.exe"),
|
||||
path.join(__ryo_bin, "oxend.exe"),
|
||||
args
|
||||
);
|
||||
} else {
|
||||
this.daemonProcess = child_process.spawn(
|
||||
path.join(__ryo_bin, "lokid"),
|
||||
path.join(__ryo_bin, "oxend"),
|
||||
args,
|
||||
{
|
||||
detached: true
|
||||
|
|
|
@ -137,8 +137,8 @@ export class WalletRPC {
|
|||
|
||||
const rpcExecutable =
|
||||
process.platform === "win32"
|
||||
? "loki-wallet-rpc.exe"
|
||||
: "loki-wallet-rpc";
|
||||
? "oxen-wallet-rpc.exe"
|
||||
: "oxen-wallet-rpc";
|
||||
// eslint-disable-next-line no-undef
|
||||
const rpcPath = path.join(__ryo_bin, rpcExecutable);
|
||||
|
||||
|
@ -146,7 +146,7 @@ export class WalletRPC {
|
|||
if (!fs.existsSync(rpcPath)) {
|
||||
reject(
|
||||
new Error(
|
||||
"Failed to find Loki Wallet RPC. Please make sure you anti-virus has not removed it."
|
||||
"Failed to find Oxen Wallet RPC. Please make sure you anti-virus has not removed it."
|
||||
)
|
||||
);
|
||||
return;
|
||||
|
@ -286,7 +286,7 @@ export class WalletRPC {
|
|||
break;
|
||||
|
||||
case "restore_view_wallet":
|
||||
// TODO: Decide if we want this for loki
|
||||
// TODO: Decide if we want this for Oxen
|
||||
this.restoreViewWallet(
|
||||
params.name,
|
||||
params.password,
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
<q-dialog v-model="isVisible" maximized class="address-book-details">
|
||||
<q-layout v-if="mode == 'edit' || mode == 'new'">
|
||||
<q-header>
|
||||
<q-toolbar color="dark" inverted>
|
||||
<q-toolbar inverted>
|
||||
<q-btn flat round dense icon="reply" @click="close()" />
|
||||
<q-toolbar-title v-if="mode == 'new'">
|
||||
{{ $t("strings.addAddressBookEntry") }}
|
||||
|
@ -26,16 +26,15 @@
|
|||
/>
|
||||
</q-toolbar>
|
||||
</q-header>
|
||||
<q-page-container>
|
||||
<q-page-container class="detail-page">
|
||||
<div class="address-book-modal q-mx-md">
|
||||
<LokiField
|
||||
<OxenField
|
||||
:label="$t('fieldLabels.address')"
|
||||
:error="$v.newEntry.address.$error"
|
||||
>
|
||||
<q-input
|
||||
v-model.trim="newEntry.address"
|
||||
:placeholder="address_placeholder"
|
||||
:dark="theme == 'dark'"
|
||||
borderless
|
||||
dense
|
||||
@blur="$v.newEntry.address.$touch"
|
||||
|
@ -47,26 +46,20 @@
|
|||
:icon="newEntry.starred ? 'star' : 'star_border'"
|
||||
@click="updateStarred"
|
||||
/>
|
||||
</LokiField>
|
||||
<LokiField :label="$t('fieldLabels.name')">
|
||||
<q-input
|
||||
v-model.trim="newEntry.name"
|
||||
:dark="theme == 'dark'"
|
||||
borderless
|
||||
dense
|
||||
/>
|
||||
</LokiField>
|
||||
<LokiField :label="$t('fieldLabels.notes')" optional>
|
||||
</OxenField>
|
||||
<OxenField :label="$t('fieldLabels.name')">
|
||||
<q-input v-model.trim="newEntry.name" borderless dense />
|
||||
</OxenField>
|
||||
<OxenField :label="$t('fieldLabels.notes')" optional>
|
||||
<q-input
|
||||
v-model="newEntry.description"
|
||||
:placeholder="$t('placeholders.additionalNotes')"
|
||||
type="textarea"
|
||||
class="full-width text-area-loki"
|
||||
:dark="theme == 'dark'"
|
||||
class="full-width text-area-oxen"
|
||||
borderless
|
||||
dense
|
||||
/>
|
||||
</LokiField>
|
||||
</OxenField>
|
||||
|
||||
<q-btn
|
||||
v-if="mode == 'edit'"
|
||||
|
@ -81,7 +74,7 @@
|
|||
|
||||
<q-layout v-else>
|
||||
<q-header>
|
||||
<q-toolbar color="dark" inverted>
|
||||
<q-toolbar inverted>
|
||||
<q-btn flat round dense icon="reply" @click="close()" />
|
||||
<q-toolbar-title>
|
||||
{{ $t("strings.addressBookDetails") }}
|
||||
|
@ -106,6 +99,7 @@
|
|||
<div class="layout-padding">
|
||||
<template v-if="entry != null">
|
||||
<AddressHeader
|
||||
class="address-details"
|
||||
:address="entry.address"
|
||||
:title="entry.name"
|
||||
:extra="
|
||||
|
@ -140,7 +134,7 @@
|
|||
import { mapState } from "vuex";
|
||||
import AddressHeader from "components/address_header";
|
||||
import TxList from "components/tx_list";
|
||||
import LokiField from "components/loki_field";
|
||||
import OxenField from "components/oxen_field";
|
||||
import { address } from "src/validators/common";
|
||||
import { required } from "vuelidate/lib/validators";
|
||||
export default {
|
||||
|
@ -148,7 +142,7 @@ export default {
|
|||
components: {
|
||||
AddressHeader,
|
||||
TxList,
|
||||
LokiField
|
||||
OxenField
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
|
@ -256,9 +250,12 @@ export default {
|
|||
</script>
|
||||
|
||||
<style lang="scss">
|
||||
.address-details {
|
||||
color: #1f1c47;
|
||||
}
|
||||
.address-book-details {
|
||||
.address-book-modal {
|
||||
> .loki-field {
|
||||
> .oxen-field {
|
||||
margin-top: 16px;
|
||||
}
|
||||
|
||||
|
|
|
@ -7,11 +7,20 @@
|
|||
<q-toolbar-title>
|
||||
{{ $t("titles.addressDetails") }}
|
||||
</q-toolbar-title>
|
||||
<q-btn flat :label="$t('buttons.showQRCode')" @click="isQRCodeVisible = true" />
|
||||
<q-btn class="q-ml-sm" color="primary" :label="$t('buttons.copyAddress')" @click="copyAddress()" />
|
||||
<q-btn
|
||||
flat
|
||||
:label="$t('buttons.showQRCode')"
|
||||
@click="isQRCodeVisible = true"
|
||||
/>
|
||||
<q-btn
|
||||
class="q-ml-sm"
|
||||
color="primary"
|
||||
:label="$t('buttons.copyAddress')"
|
||||
@click="copyAddress()"
|
||||
/>
|
||||
</q-toolbar>
|
||||
</q-header>
|
||||
<q-page-container>
|
||||
<q-page-container class="detail-page">
|
||||
<div class="layout-padding">
|
||||
<template v-if="address != null">
|
||||
<AddressHeader
|
||||
|
@ -26,10 +35,10 @@
|
|||
<div class="infoBox">
|
||||
<div class="infoBoxContent">
|
||||
<div class="text">
|
||||
<span>{{ $t("strings.lokiBalance") }}</span>
|
||||
<span>{{ $t("strings.oxenBalance") }}</span>
|
||||
</div>
|
||||
<div class="value">
|
||||
<span><FormatLoki :amount="address.balance"/></span>
|
||||
<span><FormatOxen :amount="address.balance"/></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -37,10 +46,12 @@
|
|||
<div class="infoBox">
|
||||
<div class="infoBoxContent">
|
||||
<div class="text">
|
||||
<span>{{ $t("strings.lokiUnlockedBalance") }}</span>
|
||||
<span>{{ $t("strings.oxenUnlockedBalance") }}</span>
|
||||
</div>
|
||||
<div class="value">
|
||||
<span><FormatLoki :amount="address.unlocked_balance"/></span>
|
||||
<span
|
||||
><FormatOxen :amount="address.unlocked_balance"
|
||||
/></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -62,7 +73,7 @@
|
|||
<div class="infoBox">
|
||||
<div class="infoBoxContent">
|
||||
<div class="text">
|
||||
<span>{{ $t("strings.lokiBalance") }}</span>
|
||||
<span>{{ $t("strings.oxenBalance") }}</span>
|
||||
</div>
|
||||
<div class="value"><span>N/A</span></div>
|
||||
</div>
|
||||
|
@ -71,7 +82,7 @@
|
|||
<div class="infoBox">
|
||||
<div class="infoBoxContent">
|
||||
<div class="text">
|
||||
<span>{{ $t("strings.lokiUnlockedBalance") }}</span>
|
||||
<span>{{ $t("strings.oxenUnlockedBalance") }}</span>
|
||||
</div>
|
||||
<div class="value"><span>N/A</span></div>
|
||||
</div>
|
||||
|
@ -91,7 +102,9 @@
|
|||
<div class="q-mt-sm">
|
||||
<div class="non-selectable recent-transactions-wrapper">
|
||||
<q-icon name="history" size="24px" />
|
||||
<span class="vertical-middle q-ml-xs">{{ $t("strings.recentIncomingTransactionsToAddress") }}</span>
|
||||
<span class="vertical-middle q-ml-xs">{{
|
||||
$t("strings.recentIncomingTransactionsToAddress")
|
||||
}}</span>
|
||||
</div>
|
||||
|
||||
<div style="margin: 12px -16px;">
|
||||
|
@ -108,12 +121,21 @@
|
|||
</q-page-container>
|
||||
</q-layout>
|
||||
<template v-if="address != null">
|
||||
<q-dialog v-model="isQRCodeVisible" minimized :content-class="'qr-code-modal'">
|
||||
<q-dialog
|
||||
v-model="isQRCodeVisible"
|
||||
minimized
|
||||
:content-class="'qr-code-modal'"
|
||||
>
|
||||
<q-card class="qr-code-card">
|
||||
<div class="text-center q-mb-sm q-pa-md" style="background: white;">
|
||||
<QrcodeVue ref="qr" :value="address.address" size="240"> </QrcodeVue>
|
||||
<QrcodeVue ref="qr" :value="address.address" size="240">
|
||||
</QrcodeVue>
|
||||
<q-menu content-menu>
|
||||
<q-list link separator style="min-width: 150px; max-height: 300px;">
|
||||
<q-list
|
||||
link
|
||||
separator
|
||||
style="min-width: 150px; max-height: 300px;"
|
||||
>
|
||||
<q-item v-close-popup @click.native="copyQR()">
|
||||
<q-item-label :label="$t('menuItems.copyQR')" />
|
||||
</q-item>
|
||||
|
@ -124,7 +146,11 @@
|
|||
</q-menu>
|
||||
</div>
|
||||
<q-card-actions>
|
||||
<q-btn color="primary" :label="$t('buttons.close')" @click="isQRCodeVisible = false" />
|
||||
<q-btn
|
||||
color="primary"
|
||||
:label="$t('buttons.close')"
|
||||
@click="isQRCodeVisible = false"
|
||||
/>
|
||||
</q-card-actions>
|
||||
</q-card>
|
||||
</q-dialog>
|
||||
|
@ -136,7 +162,7 @@
|
|||
import { mapState } from "vuex";
|
||||
const { clipboard, nativeImage } = require("electron");
|
||||
import AddressHeader from "components/address_header";
|
||||
import FormatLoki from "components/format_loki";
|
||||
import FormatOxen from "components/format_oxen";
|
||||
import QrcodeVue from "qrcode.vue";
|
||||
import TxList from "components/tx_list";
|
||||
export default {
|
||||
|
@ -144,7 +170,7 @@ export default {
|
|||
components: {
|
||||
AddressHeader,
|
||||
TxList,
|
||||
FormatLoki,
|
||||
FormatOxen,
|
||||
QrcodeVue
|
||||
},
|
||||
data() {
|
||||
|
@ -169,7 +195,9 @@ export default {
|
|||
")";
|
||||
}
|
||||
|
||||
const extra = this.address.used ? this.$t("strings.userUsedAddress") : this.$t("strings.userNotUsedAddress");
|
||||
const extra = this.address.used
|
||||
? this.$t("strings.userUsedAddress")
|
||||
: this.$t("strings.userNotUsedAddress");
|
||||
|
||||
return {
|
||||
title,
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<template>
|
||||
<div>
|
||||
<div class="address-header-div">
|
||||
<q-item-section class="self-start">
|
||||
<q-item-label class="title non-selectable">{{ title }}</q-item-label>
|
||||
<q-item-label class="row">
|
||||
|
@ -87,17 +87,18 @@ export default {
|
|||
</script>
|
||||
|
||||
<style lang="scss">
|
||||
.title {
|
||||
font-size: 18px;
|
||||
margin-bottom: 4px;
|
||||
color: white;
|
||||
}
|
||||
|
||||
.extra {
|
||||
margin-top: 8px;
|
||||
color: white;
|
||||
.address-header-div {
|
||||
.title {
|
||||
font-size: 20px;
|
||||
color: #1f1c47;
|
||||
}
|
||||
|
||||
.extra {
|
||||
color: #1f1c47;
|
||||
}
|
||||
}
|
||||
|
||||
// is this even used?
|
||||
.address-header {
|
||||
padding: 0;
|
||||
img {
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
<template>
|
||||
<div class="check-transaction">
|
||||
<div class="q-pa-md">
|
||||
<div class="q-mb-lg description">
|
||||
<div class="q-mb-lg tab-desc">
|
||||
{{ $t("strings.checkTransaction.description") }}
|
||||
</div>
|
||||
<div>
|
||||
<LokiField
|
||||
<OxenField
|
||||
:label="$t('fieldLabels.transactionId')"
|
||||
:error="$v.txid.$error"
|
||||
>
|
||||
|
@ -17,8 +17,8 @@
|
|||
dense
|
||||
@blur="$v.txid.$touch"
|
||||
/>
|
||||
</LokiField>
|
||||
<LokiField
|
||||
</OxenField>
|
||||
<OxenField
|
||||
class="q-mt-md"
|
||||
:label="$t('fieldLabels.address')"
|
||||
:error="$v.address.$error"
|
||||
|
@ -32,8 +32,8 @@
|
|||
dense
|
||||
@blur="$v.address.$touch"
|
||||
/>
|
||||
</LokiField>
|
||||
<LokiField class="q-mt-md" :label="$t('fieldLabels.message')" optional>
|
||||
</OxenField>
|
||||
<OxenField class="q-mt-md" :label="$t('fieldLabels.message')" optional>
|
||||
<q-input
|
||||
v-model.trim="message"
|
||||
:dark="theme == 'dark'"
|
||||
|
@ -41,8 +41,8 @@
|
|||
borderless
|
||||
dense
|
||||
/>
|
||||
</LokiField>
|
||||
<LokiField
|
||||
</OxenField>
|
||||
<OxenField
|
||||
class="q-mt-md"
|
||||
:label="$t('fieldLabels.signature')"
|
||||
:error="$v.signature.$error"
|
||||
|
@ -54,12 +54,12 @@
|
|||
borderless
|
||||
dense
|
||||
/>
|
||||
</LokiField>
|
||||
</OxenField>
|
||||
<div class="submit-button">
|
||||
<q-btn color="primary" :label="$t('buttons.check')" @click="check" />
|
||||
<q-btn
|
||||
v-if="canClear"
|
||||
color="secondary"
|
||||
color="secondsary="
|
||||
:label="$t('buttons.clear')"
|
||||
@click="clear"
|
||||
/>
|
||||
|
@ -83,7 +83,7 @@
|
|||
{{ $t("strings.checkTransaction.infoTitles.received") }}
|
||||
</div>
|
||||
<div>
|
||||
<FormatLoki :amount="status.state.received" raw-value />
|
||||
<FormatOxen :amount="status.state.received" raw-value />
|
||||
</div>
|
||||
</div>
|
||||
<div v-if="status.state.in_pool != null" class="q-mb-sm">
|
||||
|
@ -108,14 +108,14 @@ import { mapState } from "vuex";
|
|||
import { required } from "vuelidate/lib/validators";
|
||||
import { address } from "src/validators/common";
|
||||
import { i18n } from "boot/i18n";
|
||||
import LokiField from "components/loki_field";
|
||||
import FormatLoki from "components/format_loki";
|
||||
import OxenField from "components/oxen_field";
|
||||
import FormatOxen from "components/format_oxen";
|
||||
|
||||
export default {
|
||||
name: "CheckTransaction",
|
||||
components: {
|
||||
LokiField,
|
||||
FormatLoki
|
||||
OxenField,
|
||||
FormatOxen
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
<template>
|
||||
<div class="prove-transaction">
|
||||
<div class="q-pa-md">
|
||||
<div class="q-mb-lg description">
|
||||
<div class="q-mb-lg tab-desc">
|
||||
{{ $t("strings.proveTransactionDescription") }}
|
||||
</div>
|
||||
<div>
|
||||
<LokiField
|
||||
<OxenField
|
||||
:label="$t('fieldLabels.transactionId')"
|
||||
:error="$v.txid.$error"
|
||||
>
|
||||
|
@ -17,8 +17,8 @@
|
|||
dense
|
||||
@blur="$v.txid.$touch"
|
||||
/>
|
||||
</LokiField>
|
||||
<LokiField
|
||||
</OxenField>
|
||||
<OxenField
|
||||
class="q-mt-md"
|
||||
:label="$t('fieldLabels.address')"
|
||||
:error="$v.address.$error"
|
||||
|
@ -32,8 +32,8 @@
|
|||
dense
|
||||
@blur="$v.address.$touch"
|
||||
/>
|
||||
</LokiField>
|
||||
<LokiField class="q-mt-md" :label="$t('fieldLabels.message')" optional>
|
||||
</OxenField>
|
||||
<OxenField class="q-mt-md" :label="$t('fieldLabels.message')" optional>
|
||||
<q-input
|
||||
v-model.trim="message"
|
||||
:dark="theme == 'dark'"
|
||||
|
@ -41,7 +41,7 @@
|
|||
borderless
|
||||
dense
|
||||
/>
|
||||
</LokiField>
|
||||
</OxenField>
|
||||
<div class="buttons submit-button">
|
||||
<q-btn
|
||||
color="primary"
|
||||
|
@ -50,7 +50,7 @@
|
|||
/>
|
||||
<q-btn
|
||||
v-if="canClear"
|
||||
color="secondary"
|
||||
color="accent"
|
||||
:label="$t('buttons.clear')"
|
||||
@click="clear"
|
||||
/>
|
||||
|
@ -79,13 +79,13 @@
|
|||
import { mapState } from "vuex";
|
||||
import { required } from "vuelidate/lib/validators";
|
||||
import { address } from "src/validators/common";
|
||||
import LokiField from "components/loki_field";
|
||||
import OxenField from "components/oxen_field";
|
||||
import { clipboard } from "electron";
|
||||
|
||||
export default {
|
||||
name: "ProveTransaction",
|
||||
components: {
|
||||
LokiField
|
||||
OxenField
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
|
|
|
@ -1,16 +1,16 @@
|
|||
<template>
|
||||
<div class="sign-and-verify">
|
||||
<div class="q-pa-md">
|
||||
<div class="q-mb-lg description">
|
||||
<div class="q-mb-lg tab-desc">
|
||||
{{ $t("strings.signAndVerifyDescription") }}
|
||||
</div>
|
||||
<div v-if="is_view_only">
|
||||
{{ $t("strings.cannotSign") }}
|
||||
</div>
|
||||
<div v-else>
|
||||
<div class="text-h6">{{ $t("titles.advanced.sign") }}</div>
|
||||
<div class="text-h6 header">{{ $t("titles.advanced.sign") }}</div>
|
||||
<div class="row justify-between items-end">
|
||||
<LokiField :label="$t('fieldLabels.data')">
|
||||
<OxenField :label="$t('fieldLabels.data')">
|
||||
<q-input
|
||||
v-model.trim="toSign"
|
||||
:dark="theme == 'dark'"
|
||||
|
@ -18,7 +18,7 @@
|
|||
dense
|
||||
:placeholder="$t('placeholders.dataToSign')"
|
||||
/>
|
||||
</LokiField>
|
||||
</OxenField>
|
||||
<div class="btn-wrapper q-ml-md q-py-sm">
|
||||
<q-btn
|
||||
color="primary"
|
||||
|
@ -30,11 +30,11 @@
|
|||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="verify-heading text-h6">
|
||||
<div class="verify-heading text-h6 header">
|
||||
{{ $t("titles.advanced.verify") }}
|
||||
</div>
|
||||
<div class="justify-between items-end">
|
||||
<LokiField class="q-mt-md" :label="$t('fieldLabels.signature')">
|
||||
<OxenField class="q-mt-md" :label="$t('fieldLabels.signature')">
|
||||
<q-input
|
||||
v-model.trim="signatureToVerify"
|
||||
:dark="theme == 'dark'"
|
||||
|
@ -42,8 +42,8 @@
|
|||
dense
|
||||
:placeholder="$t('placeholders.signature')"
|
||||
/>
|
||||
</LokiField>
|
||||
<LokiField class="q-mt-md" :label="$t('fieldLabels.data')">
|
||||
</OxenField>
|
||||
<OxenField class="q-mt-md" :label="$t('fieldLabels.data')">
|
||||
<q-input
|
||||
v-model.trim="unsignedData"
|
||||
:dark="theme == 'dark'"
|
||||
|
@ -51,8 +51,8 @@
|
|||
dense
|
||||
:placeholder="$t('placeholders.unsignedData')"
|
||||
/>
|
||||
</LokiField>
|
||||
<LokiField class="q-mt-md" :label="$t('fieldLabels.address')">
|
||||
</OxenField>
|
||||
<OxenField class="q-mt-md" :label="$t('fieldLabels.address')">
|
||||
<q-input
|
||||
v-model.trim="address"
|
||||
:dark="theme == 'dark'"
|
||||
|
@ -60,7 +60,7 @@
|
|||
dense
|
||||
:placeholder="$t('placeholders.addressOfSigner')"
|
||||
/>
|
||||
</LokiField>
|
||||
</OxenField>
|
||||
<div class="submit-button">
|
||||
<q-btn
|
||||
color="primary"
|
||||
|
@ -71,7 +71,7 @@
|
|||
<q-btn
|
||||
v-if="canClear"
|
||||
:label="$t('buttons.clear')"
|
||||
color="secondary"
|
||||
color="accent"
|
||||
@click="clear"
|
||||
/>
|
||||
</div>
|
||||
|
@ -92,13 +92,13 @@
|
|||
|
||||
<script>
|
||||
const { clipboard } = require("electron");
|
||||
import LokiField from "components/loki_field";
|
||||
import OxenField from "components/oxen_field";
|
||||
import SignatureDialog from "./signature_dialog";
|
||||
import { mapState } from "vuex";
|
||||
export default {
|
||||
name: "SignAndVerify",
|
||||
components: {
|
||||
LokiField,
|
||||
OxenField,
|
||||
SignatureDialog
|
||||
},
|
||||
data() {
|
||||
|
@ -228,7 +228,7 @@ export default {
|
|||
cursor: default;
|
||||
}
|
||||
|
||||
.loki-field {
|
||||
.oxen-field {
|
||||
flex: 1;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<template>
|
||||
<q-dialog v-model="show" persistent>
|
||||
<q-card dark>
|
||||
<q-card class="signature-dialog">
|
||||
<q-card-section>
|
||||
<div class="text-h6">{{ $t("dialog.signature.title") }}</div>
|
||||
<div>
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<template>
|
||||
<q-dialog v-model="show" persistent>
|
||||
<q-card class="confirm-tx-card" dark>
|
||||
<q-card class="confirm-tx-card">
|
||||
<q-card-section>
|
||||
<div class="text-h6">{{ $t("dialog.confirmTransaction.title") }}</div>
|
||||
</q-card-section>
|
||||
|
@ -15,10 +15,10 @@
|
|||
</div>
|
||||
<br />
|
||||
<span class="label">{{ $t("strings.transactions.amount") }}: </span>
|
||||
{{ amount }} Loki
|
||||
{{ amount }} OXEN
|
||||
<br />
|
||||
<span class="label">{{ $t("strings.transactions.fee") }}: </span>
|
||||
{{ fee }} Loki
|
||||
{{ fee }} OXEN
|
||||
<br />
|
||||
<span class="label"
|
||||
>{{ $t("dialog.confirmTransaction.priority") }}:
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
<template>
|
||||
<span> {{ value }} LOKI </span>
|
||||
<span> {{ value }} OXEN </span>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
name: "FormatLoki",
|
||||
name: "FormatOxen",
|
||||
props: {
|
||||
amount: {
|
||||
type: Number,
|
|
@ -8,7 +8,7 @@
|
|||
v-for="option in options"
|
||||
:key="option.value"
|
||||
class="row justify-center items-center"
|
||||
:color="lang === option.value ? 'primary' : 'secondary'"
|
||||
:color="lang === option.value ? 'primary' : 'accent'"
|
||||
size="md"
|
||||
@click="setLanguage(option.value)"
|
||||
>
|
||||
|
|
|
@ -125,8 +125,7 @@ export default {
|
|||
label: this.$t("dialog.lnsUpdate.ok"),
|
||||
color: "primary"
|
||||
},
|
||||
dark: this.theme == "dark",
|
||||
color: this.theme == "dark" ? "white" : "dark"
|
||||
color: "#1F1C47"
|
||||
});
|
||||
passwordDialog
|
||||
.onOk(password => {
|
||||
|
@ -152,9 +151,7 @@ export default {
|
|||
ok: {
|
||||
label: this.$t("dialog.purchase.ok"),
|
||||
color: "primary"
|
||||
},
|
||||
dark: this.theme == "dark",
|
||||
color: this.theme == "dark" ? "white" : "dark"
|
||||
}
|
||||
});
|
||||
passwordDialog
|
||||
.onOk(password => {
|
||||
|
|
|
@ -2,22 +2,21 @@
|
|||
<div class="lns-input-form">
|
||||
<!-- Type -->
|
||||
<div class="col q-mt-sm">
|
||||
<LokiField :label="$t('fieldLabels.lnsType')" :disable="updating">
|
||||
<OxenField :label="$t('fieldLabels.lnsType')" :disable="updating">
|
||||
<q-select
|
||||
v-model.trim="record.type"
|
||||
emit-value
|
||||
map-options
|
||||
:options="renewing ? lokinetOptions : typeOptions"
|
||||
:dark="theme == 'dark'"
|
||||
:disable="updating"
|
||||
borderless
|
||||
dense
|
||||
/>
|
||||
</LokiField>
|
||||
</OxenField>
|
||||
</div>
|
||||
<!-- Name -->
|
||||
<div class="col q-mt-sm">
|
||||
<LokiField
|
||||
<OxenField
|
||||
:label="$t('fieldLabels.name')"
|
||||
:disable="disableName"
|
||||
:error="$v.record.name.$error"
|
||||
|
@ -32,12 +31,12 @@
|
|||
:suffix="record.type === 'session' ? '' : '.loki'"
|
||||
@blur="$v.record.name.$touch"
|
||||
/>
|
||||
</LokiField>
|
||||
</OxenField>
|
||||
</div>
|
||||
|
||||
<!-- Value (Session ID, Wallet Address or .loki address) -->
|
||||
<div class="col q-mt-sm">
|
||||
<LokiField
|
||||
<OxenField
|
||||
class="q-mt-md"
|
||||
:label="value_field_label"
|
||||
:error="$v.record.value.$error"
|
||||
|
@ -52,12 +51,12 @@
|
|||
:suffix="record.type === 'session' ? '' : '.loki'"
|
||||
@blur="$v.record.value.$touch"
|
||||
/>
|
||||
</LokiField>
|
||||
</OxenField>
|
||||
</div>
|
||||
|
||||
<!-- Owner -->
|
||||
<div class="col q-mt-sm">
|
||||
<LokiField
|
||||
<OxenField
|
||||
class="q-mt-md"
|
||||
:label="$t('fieldLabels.owner')"
|
||||
:error="$v.record.owner.$error"
|
||||
|
@ -72,12 +71,12 @@
|
|||
:disable="renewing"
|
||||
@blur="$v.record.owner.$touch"
|
||||
/>
|
||||
</LokiField>
|
||||
</OxenField>
|
||||
</div>
|
||||
|
||||
<!-- Backup owner -->
|
||||
<div class="col q-mt-sm">
|
||||
<LokiField
|
||||
<OxenField
|
||||
class="q-mt-md"
|
||||
:label="$t('fieldLabels.backupOwner')"
|
||||
:error="$v.record.backup_owner.$error"
|
||||
|
@ -92,7 +91,7 @@
|
|||
dense
|
||||
@blur="$v.record.backup_owner.$touch"
|
||||
/>
|
||||
</LokiField>
|
||||
</OxenField>
|
||||
</div>
|
||||
<div class="buttons">
|
||||
<q-btn
|
||||
|
@ -103,7 +102,7 @@
|
|||
/>
|
||||
<q-btn
|
||||
v-if="showClearButton"
|
||||
color="secondary"
|
||||
color="accent"
|
||||
:label="$t('buttons.clear')"
|
||||
@click="clear()"
|
||||
/>
|
||||
|
@ -120,13 +119,13 @@ import {
|
|||
lokinet_name,
|
||||
session_name
|
||||
} from "src/validators/common";
|
||||
import LokiField from "components/loki_field";
|
||||
import OxenField from "components/oxen_field";
|
||||
import WalletPassword from "src/mixins/wallet_password";
|
||||
|
||||
export default {
|
||||
name: "LNSInputForm",
|
||||
components: {
|
||||
LokiField
|
||||
OxenField
|
||||
},
|
||||
mixins: [WalletPassword],
|
||||
props: {
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<template>
|
||||
<div class="my-lns">
|
||||
<div class="q-px-md q-pt-md">
|
||||
<div class="description">
|
||||
<div class="tab-desc">
|
||||
{{ $t("strings.lnsDescription") }}
|
||||
</div>
|
||||
<LNSRecords @onUpdate="onUpdate" @onRenew="onRenew" />
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<template>
|
||||
<div class="lns-purchase">
|
||||
<div class="q-mb-lg q-px-md q-pt-md">
|
||||
<div class="description">
|
||||
<div class="tab-desc">
|
||||
{{ $t("strings.lnsPurchaseDescription") }}
|
||||
</div>
|
||||
<div class="prices">
|
||||
|
@ -9,23 +9,23 @@
|
|||
<table>
|
||||
<tr>
|
||||
<td>{{ $t("strings.lns.sessionID") }}:</td>
|
||||
<td>15 LOKI</td>
|
||||
<td>15 OXEN</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>{{ $t("strings.lns.lokinetName1Year") }}:</td>
|
||||
<td>15 LOKI</td>
|
||||
<td>15 OXEN</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>{{ $t("strings.lns.lokinetNameXYears", { years: 2 }) }}:</td>
|
||||
<td>30 LOKI</td>
|
||||
<td>30 OXEN</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>{{ $t("strings.lns.lokinetNameXYears", { years: 5 }) }}:</td>
|
||||
<td>60 LOKI</td>
|
||||
<td>60 OXEN</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>{{ $t("strings.lns.lokinetNameXYears", { years: 10 }) }}:</td>
|
||||
<td>90 LOKI</td>
|
||||
<td>90 OXEN</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
|
@ -55,12 +55,14 @@ export default {
|
|||
.lns-purchase {
|
||||
.description {
|
||||
white-space: pre-line;
|
||||
color: #cecece;
|
||||
margin-bottom: 20px;
|
||||
// oxen-navy
|
||||
color: #1f1c47;
|
||||
}
|
||||
|
||||
.prices {
|
||||
color: #cecece;
|
||||
// oxen-navy
|
||||
margin-top: 20px;
|
||||
color: #1f1c47;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
<template>
|
||||
<q-list link no-border :dark="theme == 'dark'" class="lns-record-list">
|
||||
<q-list link no-border class="lns-record-list">
|
||||
<q-item
|
||||
v-for="record in recordList"
|
||||
:key="record.name_hash"
|
||||
class="loki-list-item"
|
||||
class="oxen-list-item"
|
||||
>
|
||||
<q-item-section class="type" avatar>
|
||||
<q-icon :name="isLocked(record) ? 'lock' : 'lock_open'" size="24px" />
|
||||
|
@ -22,13 +22,13 @@
|
|||
<q-item-section>
|
||||
<div class="row update-renew-buttons">
|
||||
<q-btn
|
||||
color="secondary"
|
||||
color="primary"
|
||||
:label="$t('buttons.update')"
|
||||
@click="onUpdate(record)"
|
||||
/>
|
||||
<q-btn
|
||||
v-if="isLokinet"
|
||||
color="secondary"
|
||||
color="primary"
|
||||
:label="$t('buttons.renew')"
|
||||
@click="onRenew(record)"
|
||||
/>
|
||||
|
@ -169,26 +169,36 @@ export default {
|
|||
.lns-record-list {
|
||||
.q-item {
|
||||
cursor: pointer;
|
||||
background: #313131;
|
||||
color: #1f1c47;
|
||||
background: white;
|
||||
-webkit-transition: background-color 0.2s ease-in;
|
||||
transition: background-color 0.2s ease-in;
|
||||
|
||||
border-radius: 3px;
|
||||
|
||||
.height {
|
||||
color: #1f1c47;
|
||||
}
|
||||
|
||||
// we don't want to select button text (also a span) as well
|
||||
// this is the height text
|
||||
div > span {
|
||||
color: #1f1c47;
|
||||
}
|
||||
|
||||
+ .q-item {
|
||||
margin-top: 10px;
|
||||
}
|
||||
}
|
||||
|
||||
.q-item-sublabel {
|
||||
color: #313131;
|
||||
}
|
||||
|
||||
.q-item:hover {
|
||||
background: rgba(117, 117, 117, 0.3);
|
||||
background: #12c7ba;
|
||||
}
|
||||
}
|
||||
.update-renew-buttons {
|
||||
.q-btn {
|
||||
color: red;
|
||||
}
|
||||
.q-btn:not(:first-child) {
|
||||
margin-left: 8px;
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<template>
|
||||
<div class="lns-record-list">
|
||||
<div v-if="needsDecryption" class="decrypt row justify-between items-end">
|
||||
<LokiField
|
||||
<OxenField
|
||||
:label="$t('fieldLabels.decryptRecord')"
|
||||
:disable="decrypting"
|
||||
:error="$v.name.$error"
|
||||
|
@ -15,7 +15,7 @@
|
|||
:disable="decrypting"
|
||||
@blur="$v.name.$touch"
|
||||
/>
|
||||
</LokiField>
|
||||
</OxenField>
|
||||
<div class="btn-wrapper q-ml-md row items-center">
|
||||
<q-btn
|
||||
color="primary"
|
||||
|
@ -51,14 +51,14 @@
|
|||
|
||||
<script>
|
||||
import { mapState } from "vuex";
|
||||
import LokiField from "components/loki_field";
|
||||
import OxenField from "components/oxen_field";
|
||||
import { session_name_or_lokinet_name } from "src/validators/common";
|
||||
import LNSRecordList from "./lns_record_list";
|
||||
|
||||
export default {
|
||||
name: "LNSRecords",
|
||||
components: {
|
||||
LokiField,
|
||||
OxenField,
|
||||
LNSRecordList
|
||||
},
|
||||
data() {
|
||||
|
@ -197,7 +197,7 @@ export default {
|
|||
cursor: default;
|
||||
}
|
||||
|
||||
.loki-field {
|
||||
.oxen-field {
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
|
@ -209,14 +209,4 @@ export default {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
.record-type-title {
|
||||
font-weight: bold;
|
||||
margin-bottom: 40px;
|
||||
padding-bottom: 40px;
|
||||
}
|
||||
|
||||
.records-group {
|
||||
padding-bottom: 40px;
|
||||
}
|
||||
</style>
|
||||
|
|
|
@ -2,7 +2,11 @@
|
|||
<q-menu context-menu>
|
||||
<q-list separator class="context-menu-list">
|
||||
<div v-for="(item, index) in menuItems" :key="index">
|
||||
<ContextMenuItem :action="item.action" :i18n="item.i18n" @clicked="clickedMenu(item, $event)" />
|
||||
<ContextMenuItem
|
||||
:action="item.action"
|
||||
:i18n="item.i18n"
|
||||
@clicked="clickedMenu(item, $event)"
|
||||
/>
|
||||
</div>
|
||||
</q-list>
|
||||
</q-menu>
|
||||
|
@ -30,10 +34,4 @@ export default {
|
|||
};
|
||||
</script>
|
||||
|
||||
<style>
|
||||
.context-menu-list {
|
||||
min-width: 150px;
|
||||
max-height: 300px;
|
||||
color: white;
|
||||
}
|
||||
</style>
|
||||
<style></style>
|
||||
|
|
|
@ -3,8 +3,15 @@
|
|||
<q-btn class="menu" icon="menu" size="md" flat>
|
||||
<q-menu>
|
||||
<q-list separator class="menu-list">
|
||||
<q-item v-if="!disableSwitchWallet" v-close-popup clickable @click.native="switchWallet">
|
||||
<q-item-label header>{{ $t("menuItems.switchWallet") }}</q-item-label>
|
||||
<q-item
|
||||
v-if="!disableSwitchWallet"
|
||||
v-close-popup
|
||||
clickable
|
||||
@click.native="switchWallet"
|
||||
>
|
||||
<q-item-label header>{{
|
||||
$t("menuItems.switchWallet")
|
||||
}}</q-item-label>
|
||||
</q-item>
|
||||
<q-item v-close-popup clickable @click.native="openSettings">
|
||||
<q-item-label header>{{ $t("menuItems.settings") }}</q-item-label>
|
||||
|
@ -22,26 +29,50 @@
|
|||
<!-- TODO: Move this to it's own component -->
|
||||
<q-dialog ref="aboutModal" minimized>
|
||||
<div class="about-modal">
|
||||
<img class="q-mb-md" src="loki.svg" height="42" />
|
||||
<img class="q-mb-md" src="oxen.svg" height="42" />
|
||||
|
||||
<p class="q-my-sm">Wallet Version: v{{ version }}</p>
|
||||
<p class="q-my-sm">Deaemon Version: v{{ daemonVersion }}</p>
|
||||
<p class="q-my-sm">Copyright (c) 2018-2020, Loki Project</p>
|
||||
<p class="q-my-sm">Copyright (c) 2018-2021, Oxen</p>
|
||||
<p class="q-my-sm">Copyright (c) 2018, Ryo Currency Project</p>
|
||||
<p class="q-my-sm">All rights reserved.</p>
|
||||
|
||||
<div class="q-mt-md q-mb-lg external-links">
|
||||
<p>
|
||||
<a href="#" @click="openExternal('https://loki.network/')">https://loki.network/</a>
|
||||
<a href="#" @click="openExternal('https://oxen.io/')"
|
||||
>https://oxen.io/</a
|
||||
>
|
||||
</p>
|
||||
<p>
|
||||
<a href="#" @click="openExternal('https://t.me/joinchat/DeNvR0JJ4JPn6TVSQjCsZQ')">Telegram</a>
|
||||
<a
|
||||
href="#"
|
||||
@click="
|
||||
openExternal('https://t.me/joinchat/DeNvR0JJ4JPn6TVSQjCsZQ')
|
||||
"
|
||||
>Telegram</a
|
||||
>
|
||||
-
|
||||
<a href="#" @click="openExternal('https://discordapp.com/invite/67GXfD6')">Discord</a>
|
||||
<a
|
||||
href="#"
|
||||
@click="openExternal('https://discordapp.com/invite/67GXfD6')"
|
||||
>Discord</a
|
||||
>
|
||||
-
|
||||
<a href="#" @click="openExternal('https://www.reddit.com/r/LokiProject/')">Reddit</a>
|
||||
<a
|
||||
href="#"
|
||||
@click="openExternal('https://www.reddit.com/r/LokiProject/')"
|
||||
>Reddit</a
|
||||
>
|
||||
-
|
||||
<a href="#" @click="openExternal('https://github.com/loki-project/loki-electron-gui-wallet')">Github</a>
|
||||
<a
|
||||
href="#"
|
||||
@click="
|
||||
openExternal(
|
||||
'https://github.com/loki-project/loki-electron-gui-wallet'
|
||||
)
|
||||
"
|
||||
>Github</a
|
||||
>
|
||||
</p>
|
||||
</div>
|
||||
<q-btn color="primary" label="Close" @click="showAbout(false)" />
|
||||
|
@ -96,13 +127,19 @@ export default {
|
|||
switchWallet() {
|
||||
// If the rpc is syncing then we want to tell the user to restart
|
||||
if (this.isRPCSyncing) {
|
||||
this.$gateway.confirmClose(this.$t("dialog.switchWallet.restartMessage"), true);
|
||||
this.$gateway.confirmClose(
|
||||
this.$t("dialog.switchWallet.restartMessage"),
|
||||
true
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
// TODO: Remove this in hardfork 16
|
||||
// This is a temporary work around for the issue where wallet rpc hangs after closing a wallet due to long polling still being active
|
||||
this.$gateway.confirmClose(this.$t("dialog.switchWallet.restartWalletMessage"), true);
|
||||
this.$gateway.confirmClose(
|
||||
this.$t("dialog.switchWallet.restartWalletMessage"),
|
||||
true
|
||||
);
|
||||
|
||||
// Allow switching normally because rpc won't be blocked
|
||||
// NB: If this is added back, must use the quasar v1 APIs
|
||||
|
@ -142,8 +179,8 @@ export default {
|
|||
<style lang="scss">
|
||||
.about-modal {
|
||||
padding: 25px;
|
||||
background-color: $dark;
|
||||
color: white;
|
||||
background-color: white;
|
||||
color: #1f1c47;
|
||||
|
||||
.external-links {
|
||||
a {
|
||||
|
|
|
@ -1,22 +1,62 @@
|
|||
<template>
|
||||
<div class="wallet-settings">
|
||||
<q-btn icon-right="more_vert" :label="$t('buttons.settings')" size="md" flat>
|
||||
<q-btn
|
||||
icon-right="more_vert"
|
||||
:label="$t('buttons.settings')"
|
||||
size="md"
|
||||
flat
|
||||
>
|
||||
<q-menu anchor="bottom right" self="top right">
|
||||
<q-list separator class="menu-list">
|
||||
<q-item v-close-popup clickable :disabled="!is_ready" @click.native="getPrivateKeys()">
|
||||
<q-item-label header>{{ $t("menuItems.showPrivateKeys") }}</q-item-label>
|
||||
<q-item
|
||||
v-close-popup
|
||||
clickable
|
||||
:disabled="!is_ready"
|
||||
@click.native="getPrivateKeys()"
|
||||
>
|
||||
<q-item-label header>{{
|
||||
$t("menuItems.showPrivateKeys")
|
||||
}}</q-item-label>
|
||||
</q-item>
|
||||
<q-item v-close-popup clickable :disabled="!is_ready" @click.native="showModal('change_password')">
|
||||
<q-item-label header>{{ $t("menuItems.changePassword") }}</q-item-label>
|
||||
<q-item
|
||||
v-close-popup
|
||||
clickable
|
||||
:disabled="!is_ready"
|
||||
@click.native="showModal('change_password')"
|
||||
>
|
||||
<q-item-label header>{{
|
||||
$t("menuItems.changePassword")
|
||||
}}</q-item-label>
|
||||
</q-item>
|
||||
<q-item v-close-popup clickable :disabled="!is_ready" @click.native="showModal('rescan')">
|
||||
<q-item-label header>{{ $t("menuItems.rescanWallet") }}</q-item-label>
|
||||
<q-item
|
||||
v-close-popup
|
||||
clickable
|
||||
:disabled="!is_ready"
|
||||
@click.native="showModal('rescan')"
|
||||
>
|
||||
<q-item-label header>{{
|
||||
$t("menuItems.rescanWallet")
|
||||
}}</q-item-label>
|
||||
</q-item>
|
||||
<q-item v-close-popup clickable :disabled="!is_ready" @click.native="showModal('key_image')">
|
||||
<q-item-label header>{{ $t("menuItems.manageKeyImages") }}</q-item-label>
|
||||
<q-item
|
||||
v-close-popup
|
||||
clickable
|
||||
:disabled="!is_ready"
|
||||
@click.native="showModal('key_image')"
|
||||
>
|
||||
<q-item-label header>{{
|
||||
$t("menuItems.manageKeyImages")
|
||||
}}</q-item-label>
|
||||
</q-item>
|
||||
<q-item v-close-popup clickable :disabled="!is_ready" @click.native="deleteWallet()">
|
||||
<q-item-label header>{{ $t("menuItems.deleteWallet") }}</q-item-label>
|
||||
<q-item
|
||||
v-close-popup
|
||||
clickable
|
||||
:disabled="!is_ready"
|
||||
@click.native="deleteWallet()"
|
||||
>
|
||||
<q-item-label header>{{
|
||||
$t("menuItems.deleteWallet")
|
||||
}}</q-item-label>
|
||||
</q-item>
|
||||
</q-list>
|
||||
</q-menu>
|
||||
|
@ -24,10 +64,14 @@
|
|||
|
||||
<!-- Modals -->
|
||||
<!-- PRIVATE KEY MODAL -->
|
||||
<q-dialog v-model="modals.private_keys.visible" minimized class="private-key-modal" @hide="closePrivateKeys()">
|
||||
<div class="modal">
|
||||
<q-dialog
|
||||
v-model="modals.private_keys.visible"
|
||||
minimized
|
||||
@hide="closePrivateKeys()"
|
||||
>
|
||||
<div class="modal private-key-modal">
|
||||
<div class="modal-header">{{ $t("titles.privateKeys") }}</div>
|
||||
<div class="q-ma-lg">
|
||||
<div class="q-ma-md">
|
||||
<template v-if="secret.mnemonic">
|
||||
<h6 class="q-mb-xs q-mt-lg">
|
||||
{{ $t("strings.seedWords") }}
|
||||
|
@ -45,7 +89,11 @@
|
|||
icon="file_copy"
|
||||
@click="copyPrivateKey('mnemonic', $event)"
|
||||
>
|
||||
<q-tooltip anchor="center left" self="center right" :offset="[5, 10]">
|
||||
<q-tooltip
|
||||
anchor="center left"
|
||||
self="center right"
|
||||
:offset="[5, 10]"
|
||||
>
|
||||
{{ $t("menuItems.copySeedWords") }}
|
||||
</q-tooltip>
|
||||
</q-btn>
|
||||
|
@ -68,7 +116,11 @@
|
|||
icon="file_copy"
|
||||
@click="copyPrivateKey('view_key', $event)"
|
||||
>
|
||||
<q-tooltip anchor="center left" self="center right" :offset="[5, 10]">
|
||||
<q-tooltip
|
||||
anchor="center left"
|
||||
self="center right"
|
||||
:offset="[5, 10]"
|
||||
>
|
||||
{{ $t("menuItems.copyViewKey") }}
|
||||
</q-tooltip>
|
||||
</q-btn>
|
||||
|
@ -91,7 +143,11 @@
|
|||
icon="file_copy"
|
||||
@click="copyPrivateKey('spend_key', $event)"
|
||||
>
|
||||
<q-tooltip anchor="center left" self="center right" :offset="[5, 10]">
|
||||
<q-tooltip
|
||||
anchor="center left"
|
||||
self="center right"
|
||||
:offset="[5, 10]"
|
||||
>
|
||||
{{ $t("menuItems.copySpendKey") }}
|
||||
</q-tooltip>
|
||||
</q-btn>
|
||||
|
@ -100,7 +156,11 @@
|
|||
</template>
|
||||
|
||||
<div class="q-mt-lg">
|
||||
<q-btn color="primary" :label="$t('buttons.close')" @click="hideModal('private_keys')" />
|
||||
<q-btn
|
||||
color="primary"
|
||||
:label="$t('buttons.close')"
|
||||
@click="hideModal('private_keys')"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -108,50 +168,89 @@
|
|||
|
||||
<!-- RESCAN MODAL -->
|
||||
<q-dialog v-model="modals.rescan.visible" minimized>
|
||||
<div class="modal">
|
||||
<div class="modal rescan-modal">
|
||||
<div class="a-ma-lg modal-header">{{ $t("titles.rescanWallet") }}</div>
|
||||
<div class="q-ma-lg">
|
||||
<div class="q-ma-md">
|
||||
<p>{{ $t("strings.rescanModalDescription") }}</p>
|
||||
|
||||
<div class="q-mt-lg">
|
||||
<q-radio v-model="modals.rescan.type" val="full" :label="$t('fieldLabels.rescanFullBlockchain')" />
|
||||
<q-radio
|
||||
v-model="modals.rescan.type"
|
||||
val="full"
|
||||
:label="$t('fieldLabels.rescanFullBlockchain')"
|
||||
/>
|
||||
</div>
|
||||
<div class="q-mt-sm">
|
||||
<q-radio v-model="modals.rescan.type" val="spent" :label="$t('fieldLabels.rescanSpentOutputs')" />
|
||||
<q-radio
|
||||
v-model="modals.rescan.type"
|
||||
val="spent"
|
||||
:label="$t('fieldLabels.rescanSpentOutputs')"
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div class="q-mt-xl text-right">
|
||||
<q-btn flat class="q-mr-sm" :label="$t('buttons.close')" @click="hideModal('rescan')" />
|
||||
<q-btn color="primary" :label="$t('buttons.rescan')" @click="rescanWallet()" />
|
||||
<q-btn
|
||||
flat
|
||||
class="q-mr-sm"
|
||||
:label="$t('buttons.close')"
|
||||
@click="hideModal('rescan')"
|
||||
/>
|
||||
<q-btn
|
||||
color="primary"
|
||||
:label="$t('buttons.rescan')"
|
||||
@click="rescanWallet()"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</q-dialog>
|
||||
|
||||
<!-- KEY IMAGE MODAL -->
|
||||
<q-dialog v-model="modals.key_image.visible" class="key-image-modal" minimized>
|
||||
<q-dialog
|
||||
v-model="modals.key_image.visible"
|
||||
class="key-image-modal"
|
||||
minimized
|
||||
>
|
||||
<div class="modal key-image-modal">
|
||||
<div class="modal-header">
|
||||
<!-- Export/Import key images -->
|
||||
{{
|
||||
$t("dialog.keyImages.title", {
|
||||
type: $t(`dialog.keyImages.${modals.key_image.type.toLowerCase()}`)
|
||||
type: $t(
|
||||
`dialog.keyImages.${modals.key_image.type.toLowerCase()}`
|
||||
)
|
||||
})
|
||||
}}
|
||||
</div>
|
||||
<div class="q-ma-lg">
|
||||
<div class="q-ma-md">
|
||||
<div class="row q-mb-md">
|
||||
<div class="q-mr-xl">
|
||||
<q-radio v-model="modals.key_image.type" val="Export" :label="$t('dialog.keyImages.export')" />
|
||||
<q-radio
|
||||
v-model="modals.key_image.type"
|
||||
val="Export"
|
||||
:label="$t('dialog.keyImages.export')"
|
||||
/>
|
||||
</div>
|
||||
<div>
|
||||
<q-radio v-model="modals.key_image.type" val="Import" :label="$t('dialog.keyImages.import')" />
|
||||
<q-radio
|
||||
v-model="modals.key_image.type"
|
||||
val="Import"
|
||||
:label="$t('dialog.keyImages.import')"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<template v-if="modals.key_image.type == 'Export'">
|
||||
<LokiField class="q-mt-lg" :label="$t('fieldLabels.keyImages.exportDirectory')" disable-hover>
|
||||
<q-input v-model="modals.key_image.export_path" disable borderless />
|
||||
<OxenField
|
||||
class="q-mt-lg"
|
||||
:label="$t('fieldLabels.keyImages.exportDirectory')"
|
||||
disable-hover
|
||||
>
|
||||
<q-input
|
||||
v-model="modals.key_image.export_path"
|
||||
disable
|
||||
borderless
|
||||
/>
|
||||
<input
|
||||
id="keyImageExportPath"
|
||||
ref="keyImageExportSelect"
|
||||
|
@ -162,12 +261,22 @@
|
|||
hidden
|
||||
@change="setKeyImageExportPath"
|
||||
/>
|
||||
<q-btn color="secondary" @click="selectKeyImageExportPath">{{ $t("buttons.browse") }}</q-btn>
|
||||
</LokiField>
|
||||
<q-btn color="primary" @click="selectKeyImageExportPath">{{
|
||||
$t("buttons.browse")
|
||||
}}</q-btn>
|
||||
</OxenField>
|
||||
</template>
|
||||
<template v-if="modals.key_image.type == 'Import'">
|
||||
<LokiField class="q-mt-lg" :label="$t('fieldLabels.keyImages.importFile')" disable-hover>
|
||||
<q-input v-model="modals.key_image.import_path" disable borderless />
|
||||
<OxenField
|
||||
class="q-mt-lg"
|
||||
:label="$t('fieldLabels.keyImages.importFile')"
|
||||
disable-hover
|
||||
>
|
||||
<q-input
|
||||
v-model="modals.key_image.import_path"
|
||||
disable
|
||||
borderless
|
||||
/>
|
||||
<input
|
||||
id="keyImageImportPath"
|
||||
ref="keyImageImportSelect"
|
||||
|
@ -176,12 +285,19 @@
|
|||
hidden
|
||||
@change="setKeyImageImportPath"
|
||||
/>
|
||||
<q-btn color="secondary" @click="selectKeyImageImportPath">{{ $t("buttons.browse") }}</q-btn>
|
||||
</LokiField>
|
||||
<q-btn color="primary" @click="selectKeyImageImportPath">{{
|
||||
$t("buttons.browse")
|
||||
}}</q-btn>
|
||||
</OxenField>
|
||||
</template>
|
||||
|
||||
<div class="q-mt-lg text-right">
|
||||
<q-btn flat class="q-mr-sm" :label="$t('buttons.close')" @click="hideModal('key_image')" />
|
||||
<q-btn
|
||||
flat
|
||||
class="q-mr-sm"
|
||||
:label="$t('buttons.close')"
|
||||
@click="hideModal('key_image')"
|
||||
/>
|
||||
<q-btn
|
||||
color="primary"
|
||||
:label="$t('buttons.' + modals.key_image.type.toLowerCase())"
|
||||
|
@ -193,33 +309,43 @@
|
|||
</q-dialog>
|
||||
|
||||
<!-- CHANGE PASSWORD MODAL -->
|
||||
<q-dialog v-model="modals.change_password.visible" minimized @hide="clearChangePassword()">
|
||||
<q-dialog
|
||||
v-model="modals.change_password.visible"
|
||||
minimized
|
||||
@hide="clearChangePassword()"
|
||||
>
|
||||
<div class="modal password-modal">
|
||||
<div class="modal-header">{{ $t("titles.changePassword") }}</div>
|
||||
<div class="q-ma-lg">
|
||||
<div class="q-ma-md">
|
||||
<q-input
|
||||
v-model="modals.change_password.old_password"
|
||||
type="password"
|
||||
:label="$t('fieldLabels.oldPassword')"
|
||||
:dark="theme == 'dark'"
|
||||
/>
|
||||
<q-input
|
||||
v-model="modals.change_password.new_password"
|
||||
type="password"
|
||||
:label="$t('fieldLabels.newPassword')"
|
||||
:dark="theme == 'dark'"
|
||||
/>
|
||||
|
||||
<q-input
|
||||
v-model="modals.change_password.new_password_confirm"
|
||||
type="password"
|
||||
:label="$t('fieldLabels.confirmNewPassword')"
|
||||
:dark="theme == 'dark'"
|
||||
/>
|
||||
|
||||
<div class="q-mt-xl text-right">
|
||||
<q-btn flat class="q-mr-sm" :label="$t('buttons.close')" @click="hideModal('change_password')" />
|
||||
<q-btn color="primary" :label="$t('buttons.change')" @click="doChangePassword()" />
|
||||
<q-btn
|
||||
flat
|
||||
class="q-mr-sm"
|
||||
:label="$t('buttons.close')"
|
||||
@click="hideModal('change_password')"
|
||||
/>
|
||||
<q-btn
|
||||
color="primary"
|
||||
:label="$t('buttons.change')"
|
||||
@click="doChangePassword()"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -231,12 +357,12 @@
|
|||
const { clipboard } = require("electron");
|
||||
import { mapState } from "vuex";
|
||||
import WalletPassword from "src/mixins/wallet_password";
|
||||
import LokiField from "components/loki_field";
|
||||
import OxenField from "components/oxen_field";
|
||||
|
||||
export default {
|
||||
name: "WalletSettings",
|
||||
components: {
|
||||
LokiField
|
||||
OxenField
|
||||
},
|
||||
mixins: [WalletPassword],
|
||||
data() {
|
||||
|
@ -307,8 +433,17 @@ export default {
|
|||
},
|
||||
created() {
|
||||
const path = require("upath");
|
||||
this.modals.key_image.export_path = path.join(this.wallet_data_dir, "images", this.info.name);
|
||||
this.modals.key_image.import_path = path.join(this.wallet_data_dir, "images", this.info.name, "key_image_export");
|
||||
this.modals.key_image.export_path = path.join(
|
||||
this.wallet_data_dir,
|
||||
"images",
|
||||
this.info.name
|
||||
);
|
||||
this.modals.key_image.import_path = path.join(
|
||||
this.wallet_data_dir,
|
||||
"images",
|
||||
this.info.name,
|
||||
"key_image_export"
|
||||
);
|
||||
},
|
||||
methods: {
|
||||
showModal(which) {
|
||||
|
@ -355,8 +490,7 @@ export default {
|
|||
ok: {
|
||||
label: this.$t("dialog.buttons.ok"),
|
||||
color: "primary"
|
||||
},
|
||||
dark: this.theme === "dark"
|
||||
}
|
||||
})
|
||||
.onDismiss(() => null)
|
||||
.onCancel(() => null)
|
||||
|
@ -379,8 +513,11 @@ export default {
|
|||
label: this.$t("dialog.showPrivateKeys.ok"),
|
||||
color: "primary"
|
||||
},
|
||||
dark: this.theme == "dark",
|
||||
color: this.theme == "dark" ? "white" : "dark"
|
||||
cancel: {
|
||||
color: "tertiary",
|
||||
flat: true
|
||||
},
|
||||
color: "white"
|
||||
});
|
||||
passwordDialog
|
||||
.onOk(password => {
|
||||
|
@ -418,10 +555,8 @@ export default {
|
|||
},
|
||||
cancel: {
|
||||
flat: true,
|
||||
label: this.$t("dialog.buttons.cancel"),
|
||||
color: this.theme == "dark" ? "white" : "dark"
|
||||
},
|
||||
dark: this.theme == "dark"
|
||||
label: this.$t("dialog.buttons.cancel")
|
||||
}
|
||||
})
|
||||
.onOk(() => {
|
||||
this.$gateway.send("wallet", "rescan_blockchain");
|
||||
|
@ -447,7 +582,9 @@ export default {
|
|||
async doKeyImages() {
|
||||
this.hideModal("key_image");
|
||||
|
||||
const type = this.$t(`dialog.keyImages.${this.modals.key_image.type.toLowerCase()}`);
|
||||
const type = this.$t(
|
||||
`dialog.keyImages.${this.modals.key_image.type.toLowerCase()}`
|
||||
);
|
||||
|
||||
let passwordDialog = await this.showPasswordConfirmation({
|
||||
title: this.$t("dialog.keyImages.title", { type }),
|
||||
|
@ -482,7 +619,8 @@ export default {
|
|||
doChangePassword() {
|
||||
let old_password = this.modals.change_password.old_password;
|
||||
let new_password = this.modals.change_password.new_password;
|
||||
let new_password_confirm = this.modals.change_password.new_password_confirm;
|
||||
let new_password_confirm = this.modals.change_password
|
||||
.new_password_confirm;
|
||||
|
||||
if (new_password == old_password) {
|
||||
this.$q.notify({
|
||||
|
@ -524,7 +662,7 @@ export default {
|
|||
label: this.$t("dialog.buttons.cancel"),
|
||||
color: this.theme == "dark" ? "white" : "dark"
|
||||
},
|
||||
dark: this.theme == "dark"
|
||||
color: "#1F1C47"
|
||||
})
|
||||
.onOk(async () => {
|
||||
const hasPassword = await this.hasPassword();
|
||||
|
@ -569,8 +707,6 @@ export default {
|
|||
};
|
||||
</script>
|
||||
|
||||
.menu-list { }
|
||||
|
||||
<style lang="scss">
|
||||
.wallet-settings {
|
||||
.q-btn {
|
||||
|
@ -580,6 +716,17 @@ export default {
|
|||
|
||||
.password-modal {
|
||||
min-width: 400px;
|
||||
background: white;
|
||||
color: #1f1c47;
|
||||
|
||||
> * {
|
||||
color: #1f1c47;
|
||||
}
|
||||
}
|
||||
|
||||
.rescan-modal {
|
||||
background: white;
|
||||
color: #1f1c47;
|
||||
}
|
||||
|
||||
.image-path {
|
||||
|
@ -588,8 +735,11 @@ export default {
|
|||
}
|
||||
|
||||
.key-image-modal {
|
||||
color: #1f1c47;
|
||||
background: white;
|
||||
|
||||
label * {
|
||||
color: #cecece !important;
|
||||
color: #1f1c47 !important;
|
||||
text-overflow: ellipsis;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
@ -599,6 +749,9 @@ export default {
|
|||
}
|
||||
|
||||
.private-key-modal {
|
||||
background: white;
|
||||
color: #1f1c47;
|
||||
|
||||
.copy-btn {
|
||||
margin-left: 8px;
|
||||
}
|
||||
|
@ -608,7 +761,7 @@ export default {
|
|||
min-width: 400px;
|
||||
width: 45vw;
|
||||
|
||||
.loki-field {
|
||||
.oxen-field {
|
||||
flex: 1;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,8 +1,10 @@
|
|||
<template>
|
||||
<div class="loki-field" :class="{ disable, 'disable-hover': disableHover }">
|
||||
<div class="oxen-field" :class="{ disable, 'disable-hover': disableHover }">
|
||||
<div v-if="label" class="label row items-center" :disabled="disable">
|
||||
{{ label }}
|
||||
<span v-if="optional" class="optional">({{ $t("fieldLabels.optional") }})</span>
|
||||
<span v-if="optional" class="optional"
|
||||
>({{ $t("fieldLabels.optional") }})</span
|
||||
>
|
||||
</div>
|
||||
<div class="content row items-center" :class="{ error }">
|
||||
<slot></slot>
|
||||
|
@ -15,7 +17,7 @@
|
|||
|
||||
<script>
|
||||
export default {
|
||||
name: "LokiField",
|
||||
name: "OxenField",
|
||||
props: {
|
||||
label: {
|
||||
type: String,
|
||||
|
@ -55,7 +57,7 @@ export default {
|
|||
</script>
|
||||
|
||||
<style lang="scss">
|
||||
.loki-field {
|
||||
.oxen-field {
|
||||
.label {
|
||||
margin: 6px 0;
|
||||
font-weight: bold;
|
||||
|
@ -90,7 +92,14 @@ export default {
|
|||
margin: 0;
|
||||
|
||||
* {
|
||||
color: white;
|
||||
// Oxen navy, can't use vars here :(
|
||||
color: #1f1c47;
|
||||
}
|
||||
}
|
||||
|
||||
.q-select {
|
||||
.row {
|
||||
color: red;
|
||||
}
|
||||
}
|
||||
|
|
@ -1,20 +1,34 @@
|
|||
<template>
|
||||
<q-list class="loki-list-item" no-border @click.native="details(address)">
|
||||
<q-list class="oxen-list-item" no-border @click.native="details(address)">
|
||||
<q-item>
|
||||
<q-item-section class="flex">
|
||||
<q-item-label class="ellipsis">{{ address.address }}</q-item-label>
|
||||
<q-item-label v-if="sublabel" caption class="non-selectable">{{ sublabel }}</q-item-label>
|
||||
<q-item-label v-if="sublabel" caption class="non-selectable">{{
|
||||
sublabel
|
||||
}}</q-item-label>
|
||||
</q-item-section>
|
||||
<q-item-section side>
|
||||
<div class="row">
|
||||
<q-btn style="margin-right: 4px;" flat padding="xs" size="md" @click="showQR(address.address, $event)">
|
||||
<q-btn
|
||||
style="margin-right: 4px;"
|
||||
flat
|
||||
padding="xs"
|
||||
size="md"
|
||||
@click="showQR(address.address, $event)"
|
||||
>
|
||||
<!-- height of 24 makes it equal size as copy -->
|
||||
<img :src="qrImage" height="24" />
|
||||
<q-tooltip anchor="bottom right" self="top right" :offset="[0, 5]">
|
||||
{{ $t("menuItems.showQRCode") }}
|
||||
</q-tooltip>
|
||||
</q-btn>
|
||||
<q-btn flat padding="xs" size="md" icon="file_copy" @click="copyAddress(address.address, $event)">
|
||||
<q-btn
|
||||
flat
|
||||
padding="xs"
|
||||
size="md"
|
||||
icon="file_copy"
|
||||
@click="copyAddress(address.address, $event)"
|
||||
>
|
||||
<q-tooltip anchor="bottom right" self="top right" :offset="[0, 5]">
|
||||
{{ $t("menuItems.copyAddress") }}
|
||||
</q-tooltip>
|
||||
|
@ -28,19 +42,23 @@
|
|||
<q-item-section>
|
||||
<div class="row info-section">
|
||||
<span class="col-sm-4">
|
||||
<span>{{ $t("strings.lokiBalance") }}</span>
|
||||
<span>{{ $t("strings.oxenBalance") }}</span>
|
||||
<br />
|
||||
<span class="value">{{ address.balance | currency }}</span>
|
||||
</span>
|
||||
<span class="col-sm-4">
|
||||
<span>{{ $t("strings.lokiUnlockedBalance") }}</span>
|
||||
<span>{{ $t("strings.oxenUnlockedBalance") }}</span>
|
||||
<br />
|
||||
<span class="value">{{ address.unlocked_balance | currency }}</span>
|
||||
<span class="value">{{
|
||||
address.unlocked_balance | currency
|
||||
}}</span>
|
||||
</span>
|
||||
<span class="col-sm-4">
|
||||
<span>{{ $t("strings.unspentOutputs") }}</span>
|
||||
<br />
|
||||
<span class="value">{{ address.num_unspent_outputs | toString }}</span>
|
||||
<span class="value">{{
|
||||
address.num_unspent_outputs | toString
|
||||
}}</span>
|
||||
</span>
|
||||
</div>
|
||||
</q-item-section>
|
||||
|
|
|
@ -23,7 +23,7 @@
|
|||
/>
|
||||
</q-toolbar>
|
||||
</q-header>
|
||||
<q-page-container>
|
||||
<q-page-container class="detail-page">
|
||||
<div class="layout-padding">
|
||||
<h6 class="q-mt-xs q-mb-none text-weight-light">
|
||||
{{ $t("strings.serviceNodeDetails.serviceNodeKey") }}
|
||||
|
@ -40,7 +40,7 @@
|
|||
</div>
|
||||
<div class="value">
|
||||
<span
|
||||
><FormatLoki :amount="node.staking_requirement" raw-value
|
||||
><FormatOxen :amount="node.staking_requirement" raw-value
|
||||
/></span>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -54,7 +54,7 @@
|
|||
</div>
|
||||
<div class="value">
|
||||
<span
|
||||
><FormatLoki :amount="node.total_contributed" raw-value
|
||||
><FormatOxen :amount="node.total_contributed" raw-value
|
||||
/></span>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -120,7 +120,7 @@
|
|||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<q-list no-border :dark="theme == 'dark'" class="loki-list">
|
||||
<q-list no-border :dark="theme == 'dark'" class="oxen-list">
|
||||
<q-item-label class="contributors-title"
|
||||
>{{
|
||||
$t("strings.serviceNodeDetails.contributors")
|
||||
|
@ -129,7 +129,7 @@
|
|||
<q-item
|
||||
v-for="contributor in contributors"
|
||||
:key="contributor.address"
|
||||
class="loki-list-item"
|
||||
class="oxen-list-item"
|
||||
clickable
|
||||
@click="openUserWalletInfo(contributor.address)"
|
||||
>
|
||||
|
@ -150,7 +150,7 @@
|
|||
>{{ $t("strings.operator") }} •
|
||||
</span>
|
||||
{{ $t("strings.contribution") }}:
|
||||
<FormatLoki :amount="contributor.amount" raw-value />
|
||||
<FormatOxen :amount="contributor.amount" raw-value />
|
||||
</q-item-label>
|
||||
</q-item-label>
|
||||
<ContextMenu
|
||||
|
@ -175,12 +175,12 @@
|
|||
const { clipboard } = require("electron");
|
||||
import { mapState } from "vuex";
|
||||
import { date } from "quasar";
|
||||
import FormatLoki from "components/format_loki";
|
||||
import FormatOxen from "components/format_oxen";
|
||||
import ContextMenu from "components/menus/contextmenu";
|
||||
export default {
|
||||
name: "ServiceNodeDetails",
|
||||
components: {
|
||||
FormatLoki,
|
||||
FormatOxen,
|
||||
ContextMenu
|
||||
},
|
||||
props: {
|
||||
|
@ -280,6 +280,7 @@ export default {
|
|||
<style lang="scss">
|
||||
.contributors-title {
|
||||
margin-bottom: 12px;
|
||||
color: #1f1c47;
|
||||
}
|
||||
|
||||
.serviceNodeDetails {
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
<span v-if="getRole(node)">{{ getRole(node) }} •</span>
|
||||
<span>
|
||||
{{ $t("strings.contribution") }}:
|
||||
<FormatLoki :amount="node.ourContributionAmount" />
|
||||
<FormatOxen :amount="node.ourContributionAmount" />
|
||||
</span>
|
||||
</span>
|
||||
<!-- you only have a contribution amount of 0 if you are a "contributor"
|
||||
|
@ -28,18 +28,16 @@
|
|||
>
|
||||
{{ $t("strings.serviceNodeDetails.reserved") }} •
|
||||
</span>
|
||||
<span v-if="node.awaitingContribution">
|
||||
<span v-if="node.awaitingContribution" class="contrib-amounts">
|
||||
{{ $t("strings.serviceNodeDetails.minContribution") }}:
|
||||
{{ getMinContribution(node) }} LOKI •
|
||||
{{ getMinContribution(node) }} OXEN •
|
||||
{{ $t("strings.serviceNodeDetails.maxContribution") }}:
|
||||
{{ openForContributionLoki(node) }} LOKI
|
||||
{{ openForContriubtionOxen(node) }} OXEN
|
||||
</span>
|
||||
</q-item-label>
|
||||
</q-item-section>
|
||||
<q-item-section side>
|
||||
<span style="font-size: 16px; color: #cecece">{{
|
||||
getFee(node)
|
||||
}}</span>
|
||||
<span class="fee">{{ getFee(node) }}</span>
|
||||
</q-item-section>
|
||||
<q-item-section side>
|
||||
<q-btn
|
||||
|
@ -72,7 +70,7 @@
|
|||
<script>
|
||||
import { clipboard } from "electron";
|
||||
import ContextMenu from "components/menus/contextmenu";
|
||||
import FormatLoki from "components/format_loki";
|
||||
import FormatOxen from "components/format_oxen";
|
||||
import ServiceNodeMixin from "src/mixins/service_node_mixin";
|
||||
import { mapState } from "vuex";
|
||||
|
||||
|
@ -80,7 +78,7 @@ export default {
|
|||
name: "ServiceNodeList",
|
||||
components: {
|
||||
ContextMenu,
|
||||
FormatLoki
|
||||
FormatOxen
|
||||
},
|
||||
mixins: [ServiceNodeMixin],
|
||||
props: {
|
||||
|
@ -168,4 +166,16 @@ export default {
|
|||
};
|
||||
</script>
|
||||
|
||||
<style></style>
|
||||
<style lang="scss">
|
||||
.fee {
|
||||
color: #1f1c47;
|
||||
}
|
||||
|
||||
.service-node-list {
|
||||
.q-item:hover {
|
||||
.fee {
|
||||
color: white;
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
|
|
@ -1,11 +1,15 @@
|
|||
<template>
|
||||
<div class="service-node-registration">
|
||||
<div class="q-pa-md">
|
||||
<i18n path="strings.serviceNodeRegistrationDescription" tag="div" class="description q-mb-lg">
|
||||
<i18n
|
||||
path="strings.serviceNodeRegistrationDescription"
|
||||
tag="div"
|
||||
class="tab-desc q-mb-lg"
|
||||
>
|
||||
<b place="registerCommand">register_service_node</b>
|
||||
<b place="prepareCommand">prepare_registration</b>
|
||||
</i18n>
|
||||
<LokiField
|
||||
<OxenField
|
||||
:label="$t('fieldLabels.serviceNodeCommand')"
|
||||
:error="$v.registration_string.$error"
|
||||
:disabled="registration_status.sending"
|
||||
|
@ -13,8 +17,7 @@
|
|||
<q-input
|
||||
v-model.trim="registration_string"
|
||||
type="textarea"
|
||||
:dark="theme == 'dark'"
|
||||
class="full-width text-area-loki"
|
||||
class="full-width text-area-oxen"
|
||||
placeholder="register_service_node ..."
|
||||
:disabled="registration_status.sending"
|
||||
borderless
|
||||
|
@ -22,7 +25,7 @@
|
|||
@blur="$v.registration_string.$touch"
|
||||
@paste="onPaste"
|
||||
/>
|
||||
</LokiField>
|
||||
</OxenField>
|
||||
<q-btn
|
||||
class="register-button"
|
||||
color="primary"
|
||||
|
@ -32,7 +35,7 @@
|
|||
/>
|
||||
</div>
|
||||
|
||||
<q-inner-loading :showing="registration_status.sending" :dark="theme == 'dark'">
|
||||
<q-inner-loading :showing="registration_status.sending">
|
||||
<q-spinner color="primary" size="30" />
|
||||
</q-inner-loading>
|
||||
</div>
|
||||
|
@ -41,13 +44,13 @@
|
|||
<script>
|
||||
import { mapState } from "vuex";
|
||||
import { required } from "vuelidate/lib/validators";
|
||||
import LokiField from "components/loki_field";
|
||||
import OxenField from "components/oxen_field";
|
||||
import WalletPassword from "src/mixins/wallet_password";
|
||||
|
||||
export default {
|
||||
name: "ServiceNodeRegistration",
|
||||
components: {
|
||||
LokiField
|
||||
OxenField
|
||||
},
|
||||
mixins: [WalletPassword],
|
||||
data() {
|
||||
|
|
|
@ -1,15 +1,15 @@
|
|||
<template>
|
||||
<div class="service-node-staking">
|
||||
<div class="q-px-md q-pt-md">
|
||||
<p style="color: #cecece">
|
||||
<p class="tab-desc">
|
||||
{{ $t("strings.serviceNodeContributionDescription") }}
|
||||
<span
|
||||
style="cursor: pointer; text-decoration: underline;"
|
||||
@click="lokiWebsite"
|
||||
@click="oxenWebsite"
|
||||
>Loki {{ $t("strings.website") }}.</span
|
||||
>
|
||||
</p>
|
||||
<LokiField
|
||||
<OxenField
|
||||
:label="$t('fieldLabels.serviceNodeKey')"
|
||||
:error="$v.service_node.key.$error"
|
||||
>
|
||||
|
@ -21,8 +21,8 @@
|
|||
dense
|
||||
@blur="$v.service_node.key.$touch"
|
||||
/>
|
||||
</LokiField>
|
||||
<LokiField
|
||||
</OxenField>
|
||||
<OxenField
|
||||
:label="$t('fieldLabels.amount')"
|
||||
class="q-mt-md"
|
||||
:error="$v.service_node.amount.$error"
|
||||
|
@ -39,20 +39,20 @@
|
|||
@blur="$v.service_node.amount.$touch"
|
||||
/>
|
||||
<q-btn
|
||||
color="secondary"
|
||||
color="primary"
|
||||
:text-color="theme == 'dark' ? 'white' : 'dark'"
|
||||
:label="$t('buttons.min')"
|
||||
:disable="!areButtonsEnabled()"
|
||||
@click="service_node.amount = minStake(service_node.key)"
|
||||
/>
|
||||
<q-btn
|
||||
color="secondary"
|
||||
color="primary"
|
||||
:text-color="theme == 'dark' ? 'white' : 'dark'"
|
||||
:label="$t('buttons.max')"
|
||||
:disable="!areButtonsEnabled()"
|
||||
@click="service_node.amount = maxStake(service_node.key)"
|
||||
/>
|
||||
</LokiField>
|
||||
</OxenField>
|
||||
<div class="submit-button">
|
||||
<q-btn
|
||||
:disable="!is_able_to_send"
|
||||
|
@ -62,7 +62,7 @@
|
|||
/>
|
||||
<q-btn
|
||||
:disable="!is_able_to_send"
|
||||
color="secondary"
|
||||
color="accent"
|
||||
:label="$t('buttons.sweepAll')"
|
||||
@click="sweepAllWarning()"
|
||||
/>
|
||||
|
@ -84,7 +84,6 @@
|
|||
/>
|
||||
<q-inner-loading
|
||||
:showing="stake_status.sending || sweep_all_status.sending"
|
||||
:dark="theme == 'dark'"
|
||||
>
|
||||
<q-spinner color="primary" size="30" />
|
||||
</q-inner-loading>
|
||||
|
@ -96,7 +95,7 @@ const objectAssignDeep = require("object-assign-deep");
|
|||
import { mapState } from "vuex";
|
||||
import { required, decimal } from "vuelidate/lib/validators";
|
||||
import { service_node_key, greater_than_zero } from "src/validators/common";
|
||||
import LokiField from "components/loki_field";
|
||||
import OxenField from "components/oxen_field";
|
||||
import WalletPassword from "src/mixins/wallet_password";
|
||||
import ConfirmDialogMixin from "src/mixins/confirm_dialog_mixin";
|
||||
import ServiceNodeContribute from "./service_node_contribute";
|
||||
|
@ -108,7 +107,7 @@ const DO_NOTHING = 10;
|
|||
export default {
|
||||
name: "ServiceNodeStaking",
|
||||
components: {
|
||||
LokiField,
|
||||
OxenField,
|
||||
ServiceNodeContribute,
|
||||
ConfirmTransactionDialog
|
||||
},
|
||||
|
@ -278,7 +277,7 @@ export default {
|
|||
}
|
||||
},
|
||||
methods: {
|
||||
lokiWebsite() {
|
||||
oxenWebsite() {
|
||||
const url = "https://loki.network/service-nodes/";
|
||||
this.$gateway.send("core", "open_url", {
|
||||
url
|
||||
|
@ -294,7 +293,7 @@ export default {
|
|||
},
|
||||
maxStake() {
|
||||
const node = this.getNodeWithPubKey();
|
||||
return this.openForContributionLoki(node);
|
||||
return this.openForContriubtionOxen(node);
|
||||
},
|
||||
getFeeDecimal(node) {
|
||||
const operatorPortion = node.portions_for_operator;
|
||||
|
@ -353,9 +352,8 @@ export default {
|
|||
cancel: {
|
||||
flat: true,
|
||||
label: this.$t("dialog.buttons.cancel"),
|
||||
color: this.theme === "dark" ? "white" : "dark"
|
||||
},
|
||||
dark: this.theme === "dark"
|
||||
color: "negative"
|
||||
}
|
||||
})
|
||||
.onOk(() => {
|
||||
this.sweepAll();
|
||||
|
@ -387,10 +385,8 @@ export default {
|
|||
noPasswordMessage: this.$t("dialog.sweepAll.message"),
|
||||
ok: {
|
||||
label: this.$t("dialog.sweepAll.ok"),
|
||||
color: "primary"
|
||||
},
|
||||
dark: this.theme == "dark",
|
||||
color: this.theme == "dark" ? "white" : "dark"
|
||||
color: "#12C7BA"
|
||||
}
|
||||
});
|
||||
passwordDialog
|
||||
.onOk(password => {
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
<q-btn-toggle
|
||||
v-model="page"
|
||||
toggle-color="primary"
|
||||
color="tertiary"
|
||||
color="accent"
|
||||
size="md"
|
||||
:options="tabs"
|
||||
/>
|
||||
|
|
|
@ -24,19 +24,19 @@
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<p v-if="config_daemon.type == 'local_remote'">
|
||||
<p v-if="config_daemon.type == 'local_remote'" class="tab-desc">
|
||||
{{ $t("strings.daemon.localRemote.description") }}
|
||||
</p>
|
||||
<p v-if="config_daemon.type == 'local'">
|
||||
<p v-if="config_daemon.type == 'local'" class="tab-desc">
|
||||
{{ $t("strings.daemon.local.description") }}
|
||||
</p>
|
||||
<p v-if="is_remote">
|
||||
<p v-if="is_remote" class="tab-desc">
|
||||
{{ $t("strings.daemon.remote.description") }}
|
||||
</p>
|
||||
|
||||
<template v-if="config_daemon.type != 'remote'">
|
||||
<div class="row pl-sm">
|
||||
<LokiField
|
||||
<OxenField
|
||||
class="col-8"
|
||||
:label="$t('fieldLabels.localDaemonIP')"
|
||||
disable
|
||||
|
@ -44,13 +44,12 @@
|
|||
<q-input
|
||||
v-model="config_daemon.rpc_bind_ip"
|
||||
:placeholder="daemon_defaults.rpc_bind_ip"
|
||||
:dark="theme == 'dark'"
|
||||
disable
|
||||
borderless
|
||||
dense
|
||||
/>
|
||||
</LokiField>
|
||||
<LokiField
|
||||
</OxenField>
|
||||
<OxenField
|
||||
class="col-4"
|
||||
:label="$t('fieldLabels.localDaemonPort') + '(RPC)'"
|
||||
>
|
||||
|
@ -62,21 +61,19 @@
|
|||
:step="1"
|
||||
min="1024"
|
||||
max="65535"
|
||||
:dark="theme == 'dark'"
|
||||
borderless
|
||||
dense
|
||||
/>
|
||||
</LokiField>
|
||||
</OxenField>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<template v-if="config_daemon.type != 'local'">
|
||||
<div class="row q-mt-md pl-sm">
|
||||
<LokiField class="col-8" :label="$t('fieldLabels.remoteNodeHost')">
|
||||
<OxenField class="col-8" :label="$t('fieldLabels.remoteNodeHost')">
|
||||
<q-input
|
||||
v-model="config_daemon.remote_host"
|
||||
:placeholder="daemon_defaults.remote_host"
|
||||
:dark="theme == 'dark'"
|
||||
borderless
|
||||
dense
|
||||
/>
|
||||
|
@ -86,7 +83,7 @@
|
|||
class="remote-dropdown"
|
||||
flat
|
||||
>
|
||||
<q-list link dark no-border>
|
||||
<q-list link no-border>
|
||||
<q-item
|
||||
v-for="option in remotes"
|
||||
:key="option.host"
|
||||
|
@ -101,8 +98,8 @@
|
|||
</q-item>
|
||||
</q-list>
|
||||
</q-btn-dropdown>
|
||||
</LokiField>
|
||||
<LokiField class="col-4" :label="$t('fieldLabels.remoteNodePort')">
|
||||
</OxenField>
|
||||
<OxenField class="col-4" :label="$t('fieldLabels.remoteNodePort')">
|
||||
<q-input
|
||||
v-model="config_daemon.remote_port"
|
||||
:placeholder="toString(daemon_defaults.remote_port)"
|
||||
|
@ -115,12 +112,12 @@
|
|||
borderless
|
||||
dense
|
||||
/>
|
||||
</LokiField>
|
||||
</OxenField>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<div class="col q-mt-md pt-sm">
|
||||
<LokiField :label="$t('fieldLabels.dataStoragePath')" disable-hover>
|
||||
<OxenField :label="$t('fieldLabels.dataStoragePath')" disable-hover>
|
||||
<q-input
|
||||
v-model="config.app.data_dir"
|
||||
disable
|
||||
|
@ -138,13 +135,13 @@
|
|||
@change="setDataPath"
|
||||
/>
|
||||
<q-btn
|
||||
color="secondary"
|
||||
color="primary"
|
||||
:text-color="theme == 'dark' ? 'white' : 'dark'"
|
||||
@click="selectPath('data')"
|
||||
>{{ $t("buttons.selectLocation") }}</q-btn
|
||||
>
|
||||
</LokiField>
|
||||
<LokiField :label="$t('fieldLabels.walletStoragePath')" disable-hover>
|
||||
</OxenField>
|
||||
<OxenField :label="$t('fieldLabels.walletStoragePath')" disable-hover>
|
||||
<q-input
|
||||
v-model="config.app.wallet_data_dir"
|
||||
disable
|
||||
|
@ -162,12 +159,12 @@
|
|||
@change="setWalletDataPath"
|
||||
/>
|
||||
<q-btn
|
||||
color="secondary"
|
||||
color="primary"
|
||||
:text-color="theme == 'dark' ? 'white' : 'dark'"
|
||||
@click="selectPath('wallet')"
|
||||
>{{ $t("buttons.selectLocation") }}</q-btn
|
||||
>
|
||||
</LokiField>
|
||||
</OxenField>
|
||||
</div>
|
||||
|
||||
<q-expansion-item
|
||||
|
@ -175,7 +172,7 @@
|
|||
header-class="q-mt-sm non-selectable row reverse advanced-options-label"
|
||||
>
|
||||
<div class="row pl-sm q-mt-sm">
|
||||
<LokiField
|
||||
<OxenField
|
||||
class="col-6"
|
||||
:label="$t('fieldLabels.daemonLogLevel')"
|
||||
:disable="is_remote"
|
||||
|
@ -193,8 +190,8 @@
|
|||
borderless
|
||||
dense
|
||||
/>
|
||||
</LokiField>
|
||||
<LokiField class="col-6" :label="$t('fieldLabels.walletLogLevel')">
|
||||
</OxenField>
|
||||
<OxenField class="col-6" :label="$t('fieldLabels.walletLogLevel')">
|
||||
<q-input
|
||||
v-model="config.wallet.log_level"
|
||||
:placeholder="toString(defaults.wallet.log_level)"
|
||||
|
@ -207,12 +204,12 @@
|
|||
borderless
|
||||
dense
|
||||
/>
|
||||
</LokiField>
|
||||
</OxenField>
|
||||
</div>
|
||||
|
||||
<div class="row pl-sm q-mt-md">
|
||||
<!-- TODO: Can be generalised to a "port" (or similar) field -->
|
||||
<LokiField
|
||||
<OxenField
|
||||
class="col-3"
|
||||
:label="$t('fieldLabels.maxIncomingPeers')"
|
||||
:disable="is_remote"
|
||||
|
@ -230,8 +227,8 @@
|
|||
borderless
|
||||
dense
|
||||
/>
|
||||
</LokiField>
|
||||
<LokiField
|
||||
</OxenField>
|
||||
<OxenField
|
||||
class="col-3"
|
||||
:label="$t('fieldLabels.maxOutgoingPeers')"
|
||||
:disable="is_remote"
|
||||
|
@ -249,8 +246,8 @@
|
|||
borderless
|
||||
dense
|
||||
/>
|
||||
</LokiField>
|
||||
<LokiField
|
||||
</OxenField>
|
||||
<OxenField
|
||||
class="col-3"
|
||||
:label="$t('fieldLabels.limitUploadRate')"
|
||||
:disable="is_remote"
|
||||
|
@ -269,8 +266,8 @@
|
|||
borderless
|
||||
dense
|
||||
/>
|
||||
</LokiField>
|
||||
<LokiField
|
||||
</OxenField>
|
||||
<OxenField
|
||||
class="col-3"
|
||||
:label="$t('fieldLabels.limitDownloadRate')"
|
||||
:disable="is_remote"
|
||||
|
@ -289,10 +286,10 @@
|
|||
borderless
|
||||
dense
|
||||
/>
|
||||
</LokiField>
|
||||
</OxenField>
|
||||
</div>
|
||||
<div class="row pl-sm q-mt-md">
|
||||
<LokiField
|
||||
<OxenField
|
||||
class="col-3"
|
||||
:label="$t('fieldLabels.daemonP2pPort')"
|
||||
:disable="is_remote"
|
||||
|
@ -311,8 +308,8 @@
|
|||
borderless
|
||||
dense
|
||||
/>
|
||||
</LokiField>
|
||||
<LokiField class="col-3" :label="$t('fieldLabels.internalWalletPort')">
|
||||
</OxenField>
|
||||
<OxenField class="col-3" :label="$t('fieldLabels.internalWalletPort')">
|
||||
<q-input
|
||||
v-model="config.app.ws_bind_port"
|
||||
:placeholder="toString(defaults.app.ws_bind_port)"
|
||||
|
@ -326,8 +323,8 @@
|
|||
borderless
|
||||
dense
|
||||
/>
|
||||
</LokiField>
|
||||
<LokiField
|
||||
</OxenField>
|
||||
<OxenField
|
||||
class="col-3"
|
||||
:label="$t('fieldLabels.walletRPCPort')"
|
||||
:disable="is_remote"
|
||||
|
@ -346,9 +343,9 @@
|
|||
borderless
|
||||
dense
|
||||
/>
|
||||
</LokiField>
|
||||
</OxenField>
|
||||
</div>
|
||||
<LokiField
|
||||
<OxenField
|
||||
:helper="$t('fieldLabels.chooseNetwork')"
|
||||
:label="$t('fieldLabels.network')"
|
||||
class="network-group-field"
|
||||
|
@ -362,18 +359,18 @@
|
|||
{ label: 'Test Net', value: 'testnet' }
|
||||
]"
|
||||
/>
|
||||
</LokiField>
|
||||
</OxenField>
|
||||
</q-expansion-item>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { mapState } from "vuex";
|
||||
import LokiField from "components/loki_field";
|
||||
import OxenField from "components/oxen_field";
|
||||
export default {
|
||||
name: "SettingsGeneral",
|
||||
components: {
|
||||
LokiField
|
||||
OxenField
|
||||
},
|
||||
props: {
|
||||
randomiseRemote: {
|
||||
|
|
|
@ -21,7 +21,7 @@
|
|||
/>
|
||||
</q-toolbar>
|
||||
</q-header>
|
||||
<q-page-container>
|
||||
<q-page-container class="detail-page">
|
||||
<div class="layout-padding">
|
||||
<div class="row items-center non-selectable">
|
||||
<div class="q-mr-sm">
|
||||
|
@ -72,7 +72,7 @@
|
|||
<span>{{ $t("strings.transactions.amount") }}</span>
|
||||
</div>
|
||||
<div class="value">
|
||||
<span><FormatLoki :amount="tx.amount" raw-value/></span>
|
||||
<span><FormatOxen :amount="tx.amount" raw-value/></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -88,7 +88,7 @@
|
|||
</span>
|
||||
</div>
|
||||
<div class="value">
|
||||
<span><FormatLoki :amount="tx.fee" raw-value/></span>
|
||||
<span><FormatOxen :amount="tx.fee" raw-value/></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -176,7 +176,7 @@
|
|||
destination.address
|
||||
}}</q-item-label>
|
||||
<q-item-label
|
||||
><FormatLoki :amount="destination.amount"
|
||||
><FormatOxen :amount="destination.amount"
|
||||
/></q-item-label>
|
||||
</q-item-label>
|
||||
<ContextMenu
|
||||
|
@ -200,8 +200,6 @@
|
|||
<q-input
|
||||
v-model="txNotes"
|
||||
:label="$t('fieldLabels.transactionNotes')"
|
||||
:dark="theme == 'dark'"
|
||||
:text-color="theme == 'dark' ? 'white' : 'dark'"
|
||||
type="textarea"
|
||||
rows="2"
|
||||
dense
|
||||
|
@ -225,13 +223,13 @@ const { clipboard } = require("electron");
|
|||
import { mapState } from "vuex";
|
||||
import { date } from "quasar";
|
||||
import TxTypeIcon from "components/tx_type_icon";
|
||||
import FormatLoki from "components/format_loki";
|
||||
import FormatOxen from "components/format_oxen";
|
||||
import ContextMenu from "components/menus/contextmenu";
|
||||
export default {
|
||||
name: "TxDetails",
|
||||
components: {
|
||||
TxTypeIcon,
|
||||
FormatLoki,
|
||||
FormatOxen,
|
||||
ContextMenu
|
||||
},
|
||||
data() {
|
||||
|
@ -327,8 +325,8 @@ export default {
|
|||
label: this.$t("dialog.transactionDetails.ok"),
|
||||
color: "primary"
|
||||
},
|
||||
dark: this.theme == "dark",
|
||||
style: "min-width: 500px; overflow-wrap: break-word;"
|
||||
style: "min-width: 500px; overflow-wrap: break-word;",
|
||||
color: "#1F1C47"
|
||||
})
|
||||
.onOk(() => {})
|
||||
.onCancel(() => {})
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<template>
|
||||
<div class="tx-list">
|
||||
<template v-if="tx_list_paged.length === 0">
|
||||
<p class="q-pa-md q-mb-none">
|
||||
<p class="q-pa-md q-mb-none tab-desc">
|
||||
{{ $t("strings.noTransactionsFound") }}
|
||||
</p>
|
||||
</template>
|
||||
|
@ -12,12 +12,12 @@
|
|||
link
|
||||
no-border
|
||||
:dark="theme == 'dark'"
|
||||
class="loki-list tx-list"
|
||||
class="oxen-list tx-list"
|
||||
>
|
||||
<q-item
|
||||
v-for="(tx, i) in tx_list_paged"
|
||||
:key="`${tx.txid}-${tx.type}-${i}`"
|
||||
class="loki-list-item transaction"
|
||||
class="oxen-list-item transaction"
|
||||
:class="'tx-' + tx.type"
|
||||
@click.native="details(tx)"
|
||||
>
|
||||
|
@ -26,7 +26,7 @@
|
|||
</q-item-section>
|
||||
<q-item-label class="main">
|
||||
<q-item-label class="amount">
|
||||
<FormatLoki :amount="tx.amount || 0" />
|
||||
<FormatOxen :amount="tx.amount || 0" />
|
||||
</q-item-label>
|
||||
<q-item-label caption>{{ tx.txid }}</q-item-label>
|
||||
</q-item-label>
|
||||
|
@ -61,7 +61,7 @@ const { clipboard } = require("electron");
|
|||
import { mapState } from "vuex";
|
||||
import { QSpinnerDots } from "quasar";
|
||||
import TxDetails from "components/tx_details";
|
||||
import FormatLoki from "components/format_loki";
|
||||
import FormatOxen from "components/format_oxen";
|
||||
import { i18n } from "boot/i18n";
|
||||
import ContextMenu from "components/menus/contextmenu";
|
||||
|
||||
|
@ -95,7 +95,7 @@ export default {
|
|||
components: {
|
||||
QSpinnerDots,
|
||||
TxDetails,
|
||||
FormatLoki,
|
||||
FormatOxen,
|
||||
ContextMenu
|
||||
},
|
||||
props: {
|
||||
|
@ -328,7 +328,7 @@ export default {
|
|||
|
||||
<style lang="scss">
|
||||
.tx-list {
|
||||
.loki-list-item {
|
||||
.oxen-list-item {
|
||||
padding-top: 0;
|
||||
padding-bottom: 0;
|
||||
}
|
||||
|
|
|
@ -1,22 +1,25 @@
|
|||
<template>
|
||||
<div class="column wallet-info">
|
||||
<div class="row justify-between items-center wallet-header loki-green">
|
||||
<div class="row justify-between items-center wallet-header oxen-teal">
|
||||
<div class="title">{{ info.name }}</div>
|
||||
<WalletSettings />
|
||||
</div>
|
||||
<div class="wallet-content">
|
||||
<div class="wallet-content oxen-navy">
|
||||
<div class="row justify-center">
|
||||
<div class="funds column items-center">
|
||||
<div class="balance">
|
||||
<div class="text">
|
||||
<span>{{ $t("strings.lokiBalance") }}</span>
|
||||
<span>{{ $t("strings.oxenBalance") }}</span>
|
||||
</div>
|
||||
<div class="value">
|
||||
<span><FormatLoki :amount="info.balance"/></span>
|
||||
<span><FormatOxen :amount="info.balance"/></span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row unlocked">
|
||||
<span>{{ $t("strings.lokiUnlockedShort") }}: <FormatLoki :amount="info.unlocked_balance"/></span>
|
||||
<span
|
||||
>{{ $t("strings.oxenUnlockedShort") }}:
|
||||
<FormatOxen :amount="info.unlocked_balance"
|
||||
/></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -30,13 +33,13 @@
|
|||
|
||||
<script>
|
||||
import { mapState } from "vuex";
|
||||
import FormatLoki from "components/format_loki";
|
||||
import FormatOxen from "components/format_oxen";
|
||||
import WalletSettings from "components/menus/wallet_settings";
|
||||
import CopyIcon from "components/icons/copy_icon";
|
||||
export default {
|
||||
name: "WalletDetails",
|
||||
components: {
|
||||
FormatLoki,
|
||||
FormatOxen,
|
||||
WalletSettings,
|
||||
CopyIcon
|
||||
},
|
||||
|
@ -58,7 +61,6 @@ export default {
|
|||
|
||||
.wallet-content {
|
||||
text-align: center;
|
||||
background-color: #0a0a0a;
|
||||
padding: 2em;
|
||||
|
||||
.balance {
|
||||
|
|
291
src/css/app.styl
291
src/css/app.styl
|
@ -55,6 +55,7 @@ footer,
|
|||
font-family: 'RobotoMono-Light', monospace
|
||||
}
|
||||
|
||||
|
||||
.break-all {
|
||||
word-break: break-all
|
||||
}
|
||||
|
@ -72,7 +73,7 @@ footer,
|
|||
}
|
||||
}
|
||||
|
||||
.text-area-loki {
|
||||
.text-area-oxen {
|
||||
margin-top: 0px;
|
||||
margin-bottom: 0px;
|
||||
}
|
||||
|
@ -100,7 +101,7 @@ footer,
|
|||
}
|
||||
|
||||
.q-layout, .app-content {
|
||||
background: $loki-black-80;
|
||||
background: $oxen-light-teal;
|
||||
color:white;
|
||||
}
|
||||
|
||||
|
@ -138,7 +139,7 @@ footer,
|
|||
}
|
||||
|
||||
.q-toolbar-inverted {
|
||||
background: none;
|
||||
background: $oxen-navy;
|
||||
padding-top: 0;
|
||||
}
|
||||
|
||||
|
@ -153,9 +154,9 @@ footer,
|
|||
.q-tab {
|
||||
text-transform: none;
|
||||
|
||||
&:hover {
|
||||
background-color: rgba(12,12,12,0.15)
|
||||
}
|
||||
// &:hover {
|
||||
// background-color: rgba(12,12,12,0.15)
|
||||
// }
|
||||
|
||||
.q-icon {
|
||||
font-size: 22px;
|
||||
|
@ -196,19 +197,22 @@ footer,
|
|||
.text {
|
||||
font-size: 14px;
|
||||
margin-top: 8px;
|
||||
color: #cecece;
|
||||
color: $oxen-navy;
|
||||
}
|
||||
|
||||
.value {
|
||||
font-size: 24px;
|
||||
margin-top: 4px;
|
||||
font-weight: 800;
|
||||
color: #cecece;
|
||||
font-weight:300;
|
||||
font-weight: 300;
|
||||
color: $oxen-navy;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.q-checkbox {
|
||||
color: $oxen-navy
|
||||
}
|
||||
|
||||
.q-loading + .modal {
|
||||
z-index: 9999 !important;
|
||||
}
|
||||
|
@ -220,7 +224,7 @@ footer,
|
|||
}
|
||||
|
||||
.q-footer.status-footer {
|
||||
background: #000000;
|
||||
background: $oxen-navy;
|
||||
color: rgba(255, 255, 255, 0.51);
|
||||
border-top: 1px solid #333;
|
||||
padding-top: 2px;
|
||||
|
@ -242,7 +246,7 @@ footer,
|
|||
}
|
||||
|
||||
.ready {
|
||||
color: $loki-green-solid;
|
||||
color: $positive;
|
||||
}
|
||||
|
||||
.scanning, .syncing {
|
||||
|
@ -271,11 +275,12 @@ footer,
|
|||
}
|
||||
|
||||
div:first-child {
|
||||
background-color: $loki-green-dark-solid;
|
||||
// TODO: should first and last child be different, where even is this?
|
||||
background-color: $positive;
|
||||
}
|
||||
|
||||
div:last-child {
|
||||
background-color: $loki-green-solid;
|
||||
background-color: $positive;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -315,10 +320,10 @@ footer,
|
|||
.q-item.tx-snode,
|
||||
.q-item.tx-gov {
|
||||
.amount span {
|
||||
color: #43bd43;
|
||||
color: $oxen-navy;
|
||||
&:before {
|
||||
content: "+";
|
||||
color: #43bd43;
|
||||
color: $oxen-navy;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -332,11 +337,11 @@ footer,
|
|||
.q-item.tx-out,
|
||||
.q-item.tx-pending {
|
||||
.amount span {
|
||||
color: white;
|
||||
// color: white;
|
||||
&:before {
|
||||
content: "-";
|
||||
font-weight: bold;
|
||||
color: white;
|
||||
// color: white;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -360,24 +365,39 @@ footer,
|
|||
}
|
||||
|
||||
.q-menu {
|
||||
background: #222;
|
||||
color:#cecece;
|
||||
background: white;
|
||||
color: $oxen-navy !important;
|
||||
|
||||
.q-list-separator > .q-item-division + .q-item-division, .q-item-division + .q-separator {
|
||||
border-top: 1px solid #333;
|
||||
}
|
||||
|
||||
// .q-item:hover {
|
||||
// background: $oxen-teal;
|
||||
// color: white;
|
||||
// }
|
||||
}
|
||||
|
||||
.menu-list {
|
||||
.q-item * {
|
||||
color: white;
|
||||
}
|
||||
|
||||
background: white;
|
||||
|
||||
.q-item * {
|
||||
color: $oxen-navy;
|
||||
}
|
||||
}
|
||||
|
||||
.context-menu-list {
|
||||
min-width: 150px;
|
||||
max-height: 300px;
|
||||
}
|
||||
|
||||
.confirm-tx-card {
|
||||
color: "primary";
|
||||
width: 450px;
|
||||
max-width: 450x;
|
||||
|
||||
color: $oxen-navy !important;
|
||||
|
||||
.confirm-list {
|
||||
.q-item {
|
||||
max-height: 100%;
|
||||
|
@ -389,7 +409,7 @@ footer,
|
|||
}
|
||||
|
||||
.label {
|
||||
color: #cecece;
|
||||
color: $oxen-purple;
|
||||
padding-right: 6px;
|
||||
}
|
||||
.address-value {
|
||||
|
@ -398,7 +418,7 @@ footer,
|
|||
|
||||
.confirm-send-btn {
|
||||
color: white;
|
||||
background: $positive;
|
||||
background: $primary;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -407,11 +427,6 @@ footer,
|
|||
background: $primary;
|
||||
color: white;
|
||||
max-width: 250px !important;
|
||||
// padding-top: 4px;
|
||||
|
||||
// .q-list-separator > .q-item-division + .q-item-division, .q-item-division + .q-separator {
|
||||
// border-top: 1px solid $loki-green-dark-solid;
|
||||
// }
|
||||
}
|
||||
|
||||
.modal.minimized {
|
||||
|
@ -427,7 +442,6 @@ footer,
|
|||
|
||||
.modal {
|
||||
color: #cecece;
|
||||
background-color: $dark;
|
||||
|
||||
.modal-header {
|
||||
margin-top: 6px;
|
||||
|
@ -436,10 +450,6 @@ footer,
|
|||
font-size: 24px;
|
||||
font-weight: bold;
|
||||
}
|
||||
.modal-content,
|
||||
.modal-body {
|
||||
background: $loki-black-80;
|
||||
}
|
||||
|
||||
.q-header {
|
||||
|
||||
|
@ -452,9 +462,22 @@ footer,
|
|||
|
||||
}
|
||||
|
||||
.q-toolbar {
|
||||
background-color: $oxen-navy;
|
||||
}
|
||||
|
||||
.header {
|
||||
color: $oxen-navy;
|
||||
}
|
||||
|
||||
.detail-page {
|
||||
color: $oxen-navy;
|
||||
}
|
||||
|
||||
.q-radio {
|
||||
color: $oxen-navy;
|
||||
svg {
|
||||
color: #cecece;
|
||||
color: $oxen-navy;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -463,20 +486,30 @@ footer,
|
|||
color: white;
|
||||
|
||||
.qr-code-card {
|
||||
background-color: $dark;
|
||||
background-color: white;
|
||||
}
|
||||
}
|
||||
|
||||
.loki-green {
|
||||
background: $loki-green;
|
||||
.oxen-light-teal {
|
||||
background: $oxen-light-teal;
|
||||
color: white;
|
||||
}
|
||||
|
||||
.oxen-navy {
|
||||
background: $oxen-navy;
|
||||
color: white;
|
||||
}
|
||||
|
||||
.oxen-teal {
|
||||
background: $oxen-teal;
|
||||
color: white;
|
||||
}
|
||||
|
||||
.startup-icons {
|
||||
.solid {
|
||||
color:$loki-green-solid;
|
||||
color:$oxen-teal;
|
||||
g,path {
|
||||
fill: $loki-green-solid;
|
||||
fill: $oxen-teal;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -489,12 +522,21 @@ footer,
|
|||
|
||||
.navigation {
|
||||
.q-btn {
|
||||
background: $oxen-navy;
|
||||
color: white;
|
||||
background: $loki-black-90;
|
||||
|
||||
.q-icon {
|
||||
color: $oxen-teal;
|
||||
}
|
||||
}
|
||||
|
||||
.router-link-exact-active > .q-btn {
|
||||
background: $loki-green;
|
||||
color: $oxen-navy
|
||||
background: $oxen-teal;
|
||||
|
||||
.q-icon {
|
||||
color: $oxen-navy;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -504,22 +546,22 @@ footer,
|
|||
}
|
||||
|
||||
.q-item {
|
||||
background: $secondary;
|
||||
background: $oxen-navy;
|
||||
.wallet-icon {
|
||||
color: $tertiary;
|
||||
color: $oxen-teal;
|
||||
g,path {
|
||||
fill: $tertiary;
|
||||
fill: $oxen-teal;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.q-item:hover, .q-item.selected {
|
||||
background: $primary !important;
|
||||
background: $oxen-purple !important;
|
||||
|
||||
.wallet-icon {
|
||||
color:$loki-green-solid;
|
||||
color: $oxen-teal;
|
||||
g,path {
|
||||
fill: $loki-green-solid;
|
||||
fill: $oxen-teal;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -530,20 +572,25 @@ footer,
|
|||
}
|
||||
|
||||
.receive {
|
||||
.q-list-header {
|
||||
color: #FFFFFF;
|
||||
|
||||
.list-header {
|
||||
color: $oxen-navy;
|
||||
}
|
||||
|
||||
.q-separator-component {
|
||||
background-color: $secondary;
|
||||
background-color: white;
|
||||
opacity: 0.4;
|
||||
}
|
||||
|
||||
.primary-address {
|
||||
background: #3eb13e !important;
|
||||
background: $oxen-teal !important;
|
||||
|
||||
.q-item, .q-item-side {
|
||||
color: white;
|
||||
|
||||
.text-caption {
|
||||
color: white;
|
||||
}
|
||||
}
|
||||
|
||||
.q-btn {
|
||||
|
@ -552,46 +599,58 @@ footer,
|
|||
}
|
||||
|
||||
.primary-address:hover {
|
||||
background: $loki-green-solid !important;
|
||||
background: $oxen-navy !important;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
.loki-list {
|
||||
.loki-list-item {
|
||||
background: #313131;
|
||||
.oxen-list {
|
||||
.oxen-list-item {
|
||||
background: white;
|
||||
-webkit-transition: background-color 0.2s ease-in;
|
||||
transition: background-color 0.2s ease-in;
|
||||
|
||||
font-size: 16px;
|
||||
color: #cecece;
|
||||
color: $oxen-navy;
|
||||
padding-top: 6px;
|
||||
padding-bottom: 6px;
|
||||
|
||||
margin: 0 16px;
|
||||
border-radius: 3px;
|
||||
|
||||
+ .loki-list-item {
|
||||
+ .oxen-list-item {
|
||||
margin-top: 10px;
|
||||
}
|
||||
}
|
||||
|
||||
.loki-list-item:hover {
|
||||
background: rgba(117,117,117,0.3);
|
||||
.text-caption {
|
||||
color: $oxen-navy;
|
||||
}
|
||||
|
||||
.oxen-list-item:hover {
|
||||
background: $oxen-teal;
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
.lns-record-list {
|
||||
.q-item-label.unlocked {
|
||||
color: white;
|
||||
}
|
||||
.record-type-title {
|
||||
font-weight: bold;
|
||||
margin-bottom: 40px;
|
||||
padding-bottom: 40px;
|
||||
color: $oxen-navy;
|
||||
}
|
||||
|
||||
.records-group {
|
||||
padding-bottom: 40px;
|
||||
}
|
||||
|
||||
.service-node-list {
|
||||
.q-item {
|
||||
cursor: pointer;
|
||||
background: #313131;
|
||||
color: $oxen-navy;
|
||||
background: white;
|
||||
-webkit-transition: background-color 0.2s ease-in;
|
||||
transition: background-color 0.2s ease-in;
|
||||
|
||||
|
@ -600,14 +659,25 @@ footer,
|
|||
+ .q-item {
|
||||
margin-top: 10px;
|
||||
}
|
||||
}
|
||||
|
||||
.q-item-sublabel {
|
||||
color: $loki-black-50;
|
||||
.contrib-amounts {
|
||||
color: $oxen-navy;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
.q-item-label {
|
||||
color: $oxen-navy;
|
||||
}
|
||||
|
||||
.q-item:hover {
|
||||
background: rgba(117,117,117,0.3);
|
||||
background: $oxen-navy;
|
||||
color: white;
|
||||
|
||||
.contrib-amounts {
|
||||
color: white;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -618,17 +688,26 @@ footer,
|
|||
}
|
||||
}
|
||||
|
||||
.loki-field {
|
||||
.tab-desc {
|
||||
color: $oxen-navy;
|
||||
font-style: normal;
|
||||
b {
|
||||
color: $oxen-teal;
|
||||
font-style: italic;
|
||||
}
|
||||
}
|
||||
|
||||
.oxen-field {
|
||||
.content {
|
||||
border: 1px solid #484848;
|
||||
|
||||
background: white;
|
||||
-webkit-transition: background-color 0.2s ease-in, border-color 0.2s ease-in;
|
||||
transition: background-color 0.2s ease-in, border-color 0.2s ease-in;
|
||||
}
|
||||
|
||||
&:not(.disable):not(.disable-hover) {
|
||||
.content:hover {
|
||||
background: #2e2e2e;
|
||||
background: white;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -643,7 +722,7 @@ footer,
|
|||
}
|
||||
|
||||
.label {
|
||||
color: white;
|
||||
color: $oxen-navy;
|
||||
|
||||
.optional {
|
||||
color: #7C7C7C;
|
||||
|
@ -651,23 +730,16 @@ footer,
|
|||
}
|
||||
}
|
||||
|
||||
.service-node-registration, .prove-transaction, .check-transaction, .sign-and-verify {
|
||||
.description{
|
||||
color: #b7b7b7;
|
||||
font-style: normal;
|
||||
b {
|
||||
color: white;
|
||||
font-style: italic;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.welcome {
|
||||
.q-footer {
|
||||
background: $secondary
|
||||
}
|
||||
}
|
||||
|
||||
.welcome-container {
|
||||
color: $oxen-navy;
|
||||
}
|
||||
|
||||
.address-book, .address-header {
|
||||
.q-item-label, .header {
|
||||
color: white;
|
||||
|
@ -683,6 +755,10 @@ footer,
|
|||
}
|
||||
}
|
||||
|
||||
.signature-dialog {
|
||||
color: $oxen-navy;
|
||||
}
|
||||
|
||||
.check-transaction {
|
||||
.good {
|
||||
color: #43bd43;
|
||||
|
@ -712,3 +788,46 @@ footer,
|
|||
.non-selectable {
|
||||
color: #979797;
|
||||
}
|
||||
|
||||
.created {
|
||||
color: $oxen-navy;
|
||||
|
||||
.wallet h6 {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.address {
|
||||
text-align: center;
|
||||
word-break: break-all;
|
||||
}
|
||||
|
||||
.seed-box {
|
||||
border: 1px solid white;
|
||||
border-radius: 3px;
|
||||
margin: 16px;
|
||||
padding: 16px;
|
||||
|
||||
div,
|
||||
h6 {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.seed {
|
||||
font-size: 24px;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.warning {
|
||||
color: goldenrod;
|
||||
}
|
||||
}
|
||||
h6 {
|
||||
font-size: 18px;
|
||||
margin: 8px 0;
|
||||
font-weight: 450;
|
||||
}
|
||||
.advanced-options-label {
|
||||
padding-left: 0;
|
||||
padding-right: 0;
|
||||
}
|
||||
}
|
|
@ -15,9 +15,9 @@
|
|||
// It"s highly recommended to change the default colors
|
||||
// to match your app"s branding.
|
||||
|
||||
$primary = $loki-green
|
||||
$secondary = $loki-black-90
|
||||
$tertiary = $loki-black-80
|
||||
$primary = $oxen-teal
|
||||
$secondary = $oxen-light-teal
|
||||
$accent = $oxen-navy
|
||||
|
||||
$neutral = #E0E1E2
|
||||
$positive = #21BA45
|
||||
|
@ -26,10 +26,10 @@ $info = #31CCEC
|
|||
$warning = #F2C037
|
||||
|
||||
$loki-green = linear-gradient(180deg, #419B41 0%, #43BD43 100%)
|
||||
$loki-green-solid = #5BCA5B;
|
||||
$loki-green-dark-solid = #419B41;
|
||||
|
||||
$loki-black-90 = #0A0A0A
|
||||
$loki-black-80 = #252525
|
||||
$loki-black-60 = #313131
|
||||
$loki-black-50 = #7E7E7E;
|
||||
$oxen-navy = #1F1C47;
|
||||
$oxen-teal = #12C7BA;
|
||||
$oxen-light-teal = #DBF7F5;
|
||||
$oxen-purple = #654192;
|
||||
|
||||
$loki-black-60 = #313131;
|
||||
|
|
|
@ -14,21 +14,23 @@
|
|||
// It"s highly recommended to change the default colors
|
||||
// to match your app"s branding.
|
||||
|
||||
$primary = $loki-green
|
||||
$secondary = $loki-black-90
|
||||
$tertiary = $loki-black-80
|
||||
// $primary = $loki-green
|
||||
// $secondary = $loki-black-90
|
||||
// $tertiary = $loki-black-80
|
||||
|
||||
$neutral = #E0E1E2
|
||||
$positive = #21BA45
|
||||
$negative = #DB2828
|
||||
$info = #31CCEC
|
||||
$warning = #F2C037
|
||||
// $neutral = #E0E1E2
|
||||
// $positive = #21BA45
|
||||
// $negative = #DB2828
|
||||
// $info = #31CCEC
|
||||
// $warning = #F2C037
|
||||
|
||||
$loki-green = linear-gradient(180deg, #419B41 0%, #43BD43 100%)
|
||||
$loki-green-solid = #5BCA5B;
|
||||
$loki-green-dark-solid = #419B41;
|
||||
// $loki-green = linear-gradient(180deg, #419B41 0%, #43BD43 100%)
|
||||
|
||||
$loki-black-90 = #0A0A0A
|
||||
$loki-black-80 = #252525
|
||||
$loki-black-60 = #313131
|
||||
$loki-black-50 = #7E7E7E;
|
||||
// $oxen-navy = #1F1C47;
|
||||
// $oxen-teal = #12C7BA;
|
||||
// $oxen-light-teal = #DBF7F5;
|
||||
|
||||
// $loki-black-90 = #0A0A0A
|
||||
// $loki-black-80 = #252525
|
||||
// $loki-black-60 = #313131
|
||||
// $loki-black-50 = #7E7E7E;
|
|
@ -89,7 +89,7 @@ export class Gateway extends EventEmitter {
|
|||
message: msg,
|
||||
ok: {
|
||||
label: i18n.t(`dialog.${key}.ok`),
|
||||
color: "positive"
|
||||
color: "primary"
|
||||
},
|
||||
cancel: {
|
||||
flat: true,
|
||||
|
@ -98,8 +98,7 @@ export class Gateway extends EventEmitter {
|
|||
this.app.store.state.gateway.app.config.appearance.theme === "dark"
|
||||
? "white"
|
||||
: "dark"
|
||||
},
|
||||
dark: this.app.store.state.gateway.app.config.appearance.theme === "dark"
|
||||
}
|
||||
})
|
||||
.onOk(() => {
|
||||
this.closeDialog = false;
|
||||
|
|
|
@ -243,7 +243,7 @@ export default {
|
|||
copyViewKey: "View Key kopieren",
|
||||
createNewWallet: "Neue Wallet erstellen",
|
||||
deleteWallet: "Wallet löschen",
|
||||
exit: "Loki GUI Wallet schliessen",
|
||||
exit: "Oxen GUI Wallet schliessen",
|
||||
importOldGUIWallet: "Wallets von alter GUI importieren",
|
||||
manageKeyImages: "Key Images verwalten",
|
||||
openWallet: "Wallet öffnen",
|
||||
|
@ -332,7 +332,7 @@ export default {
|
|||
noKeyImageExport: "Keine Key Images zum Exportieren gefunden",
|
||||
usingLocalNode:
|
||||
"Zugang zur Remote Node nicht möglich, wechsle zur lokalen Node",
|
||||
usingRemoteNode: "llokid nicht gefunden, benutze eine Remote Node"
|
||||
usingRemoteNode: "loxend nicht gefunden, benutze eine Remote Node"
|
||||
}
|
||||
},
|
||||
placeholders: {
|
||||
|
@ -408,9 +408,9 @@ export default {
|
|||
destinationUnknown: "Ziel unbekannt",
|
||||
editAddressBookEntry: "Adressbucheintrag bearbeiten",
|
||||
loadingSettings: "Einstellungen werden geladen",
|
||||
lokiBalance: "Guthaben",
|
||||
lokiUnlockedBalance: "frei verfügbares Guthaben",
|
||||
lokiUnlockedShort: "frei verfügbar",
|
||||
oxenBalance: "Guthaben",
|
||||
oxenUnlockedBalance: "frei verfügbares Guthaben",
|
||||
oxenUnlockedShort: "frei verfügbar",
|
||||
noTransactionsFound: "Keine Transaktionen gefunden",
|
||||
notes: "Notizen",
|
||||
numberOfUnspentOutputs: "Anzahl der unspent outputs",
|
||||
|
|
|
@ -291,7 +291,7 @@ export default {
|
|||
copyViewKey: "Copy view key",
|
||||
createNewWallet: "Create new wallet",
|
||||
deleteWallet: "Delete Wallet",
|
||||
exit: "Exit Loki GUI Wallet",
|
||||
exit: "Exit Oxen GUI Wallet",
|
||||
importOldGUIWallet: "Import wallets from old GUI",
|
||||
manageKeyImages: "Manage Key Images",
|
||||
openWallet: "Open wallet",
|
||||
|
@ -402,7 +402,7 @@ export default {
|
|||
warnings: {
|
||||
noKeyImageExport: "No key images found to export",
|
||||
usingLocalNode: "Could not access remote node, switching to local only",
|
||||
usingRemoteNode: "lokid not found, using remote node"
|
||||
usingRemoteNode: "oxend not found, using remote node"
|
||||
}
|
||||
},
|
||||
placeholders: {
|
||||
|
@ -500,11 +500,11 @@ export default {
|
|||
lnsDescription:
|
||||
"Here you can find all the LNS names owned by this wallet. Decrypting a record you own will return the name and value of that LNS record.",
|
||||
loadingSettings: "Loading settings",
|
||||
lokiBalance: "Balance",
|
||||
oxenBalance: "Balance",
|
||||
lokinetNameDescription:
|
||||
"Purchase or update a name on Lokinet. If you purchase a name it may take a minute or two for it to show up in the list. To learn more about lokinet visit: ",
|
||||
lokiUnlockedBalance: "Unlocked balance",
|
||||
lokiUnlockedShort: "Unlocked",
|
||||
oxenUnlockedBalance: "Unlocked balance",
|
||||
oxenUnlockedShort: "Unlocked",
|
||||
me: "Me",
|
||||
noTransactionsFound: "No transactions found",
|
||||
notes: "Notes",
|
||||
|
|
|
@ -242,7 +242,7 @@ export default {
|
|||
copyViewKey: "Copiar clave de visualización",
|
||||
createNewWallet: "Crear nuevo monedero",
|
||||
deleteWallet: "Eliminar monedero",
|
||||
exit: "Cerrar la interfaz del monedero Loki",
|
||||
exit: "Cerrar la interfaz del monedero Oxen",
|
||||
importOldGUIWallet: "Importar monedero de una interfaz gráfica antigua",
|
||||
manageKeyImages: "Administrar Imágenes de Clave",
|
||||
openWallet: "Abrir monedero",
|
||||
|
@ -330,7 +330,7 @@ export default {
|
|||
noKeyImageExport: "No se han encontrado claves para exportar",
|
||||
usingLocalNode:
|
||||
"No se ha podido acceder al nodo remoto, volviendo al modo local",
|
||||
usingRemoteNode: "lokid no encontrado, utilizando nodo remoto"
|
||||
usingRemoteNode: "oxend no encontrado, utilizando nodo remoto"
|
||||
}
|
||||
},
|
||||
placeholders: {
|
||||
|
@ -403,9 +403,9 @@ export default {
|
|||
destinationUnknown: "Destino Desconocido",
|
||||
editAddressBookEntry: "Modificar un registro de la libreta de direcciones",
|
||||
loadingSettings: "Cargando configuración",
|
||||
lokiBalance: "Saldo",
|
||||
lokiUnlockedBalance: "Saldo libre",
|
||||
lokiUnlockedShort: "Libre",
|
||||
oxenBalance: "Saldo",
|
||||
oxenUnlockedBalance: "Saldo libre",
|
||||
oxenUnlockedShort: "Libre",
|
||||
noTransactionsFound: "No se han encontrado transacciones",
|
||||
notes: "Notas",
|
||||
numberOfUnspentOutputs: "Número de salidas no gastadas",
|
||||
|
@ -431,7 +431,7 @@ export default {
|
|||
seedWords: "Palabras semilla",
|
||||
selectLanguage: "Escoja un idioma",
|
||||
serviceNodeRegistrationDescription:
|
||||
'Introduzca la orden {registerCommand} generada por el servicio (lokid) que se está intentado registrar como Nodo de Servicio usando la instrucción "{prepareCommand}"',
|
||||
'Introduzca la orden {registerCommand} generada por el servicio (oxend) que se está intentado registrar como Nodo de Servicio usando la instrucción "{prepareCommand}"',
|
||||
spendKey: "Clave de gasto",
|
||||
startingDaemon: "Iniciando servicio",
|
||||
startingWallet: "Iniciando monedero",
|
||||
|
|
|
@ -244,7 +244,7 @@ export default {
|
|||
copyViewKey: "Copier la clé de visibilité",
|
||||
createNewWallet: "Créer un nouveau portefeuille",
|
||||
deleteWallet: "Supprimer le portefeuille",
|
||||
exit: "Quitter le portefeuille Loki GUI",
|
||||
exit: "Quitter le portefeuille Oxen GUI",
|
||||
importOldGUIWallet: "Importer le portefeuille depuis l’ancien GUI",
|
||||
manageKeyImages: "Gérer les images clés",
|
||||
openWallet: "Ouvrir le portefeuille",
|
||||
|
@ -334,7 +334,7 @@ export default {
|
|||
noKeyImageExport: "Aucune clé image n'a été trouvé pour l'export",
|
||||
usingLocalNode:
|
||||
"Impossible d'accéder au nœud distant, basculement en local uniquement",
|
||||
usingRemoteNode: "lokid introuvable, utilisation du nœud distant"
|
||||
usingRemoteNode: "oxend introuvable, utilisation du nœud distant"
|
||||
}
|
||||
},
|
||||
placeholders: {
|
||||
|
@ -410,9 +410,9 @@ export default {
|
|||
destinationUnknown: "Destination inconnue",
|
||||
editAddressBookEntry: "Modifiez l'entrée du carnet d'adresses",
|
||||
loadingSettings: "Chargement des réglages",
|
||||
lokiBalance: "Solde",
|
||||
lokiUnlockedBalance: "Solde débloqué",
|
||||
lokiUnlockedShort: "Débloqué",
|
||||
oxenBalance: "Solde",
|
||||
oxenUnlockedBalance: "Solde débloqué",
|
||||
oxenUnlockedShort: "Débloqué",
|
||||
noTransactionsFound: "Aucune transaction trouvée",
|
||||
notes: "Notes",
|
||||
numberOfUnspentOutputs: "Nombre de sorties non dépensées",
|
||||
|
|
|
@ -330,7 +330,7 @@ export default {
|
|||
noKeyImageExport: "Nenhuma chave de imagem encontrada para exportar",
|
||||
usingLocalNode:
|
||||
"Não foi possível aceder ao nódulo remoto, mudando para nódulo local apenas",
|
||||
usingRemoteNode: "lokid não encontrado, utilizando nódulo remoto"
|
||||
usingRemoteNode: "oxend não encontrado, utilizando nódulo remoto"
|
||||
}
|
||||
},
|
||||
placeholders: {
|
||||
|
@ -404,9 +404,9 @@ export default {
|
|||
destinationUnknown: "Destino Desconhecido",
|
||||
editAddressBookEntry: "Editar registo do livro de endereços",
|
||||
loadingSettings: "Carregando configurações",
|
||||
lokiBalance: "Saldo",
|
||||
lokiUnlockedBalance: "Saldo desbloqueado",
|
||||
lokiUnlockedShort: "Desbloqueado",
|
||||
oxenBalance: "Saldo",
|
||||
oxenUnlockedBalance: "Saldo desbloqueado",
|
||||
oxenUnlockedShort: "Desbloqueado",
|
||||
noTransactionsFound: "Nenhuma transação encontrada",
|
||||
notes: "Notas",
|
||||
numberOfUnspentOutputs: "Número de outputs não gastos",
|
||||
|
|
|
@ -241,7 +241,7 @@ export default {
|
|||
copyViewKey: "Копировать Ключ Просмотра",
|
||||
createNewWallet: "Создать новый кошелек",
|
||||
deleteWallet: "Удалить Кошелек",
|
||||
exit: "Закрыть Кошелек Loki",
|
||||
exit: "Закрыть Кошелек Oxen",
|
||||
importOldGUIWallet: "Импортировать кошельки из старого GUI",
|
||||
manageKeyImages: "Управлять Ключевыми Образами",
|
||||
openWallet: "Открыть кошелек",
|
||||
|
@ -329,7 +329,7 @@ export default {
|
|||
noKeyImageExport: "Не найдено ключевых образов для экспорта",
|
||||
usingLocalNode:
|
||||
"Не удалось подключиться к удаленной ноде, переключаемся на локальную ноду",
|
||||
usingRemoteNode: "Не найден файл lokid, используется удаленная нода"
|
||||
usingRemoteNode: "Не найден файл oxend, используется удаленная нода"
|
||||
}
|
||||
},
|
||||
placeholders: {
|
||||
|
@ -403,9 +403,9 @@ export default {
|
|||
destinationUnknown: "Назначение Неизвестно",
|
||||
editAddressBookEntry: "Редактировать запись адресной книги",
|
||||
loadingSettings: "Загрузка настроек",
|
||||
lokiBalance: "Баланс",
|
||||
lokiUnlockedBalance: "Разблокированый баланс",
|
||||
lokiUnlockedShort: "Разблокировано",
|
||||
oxenBalance: "Баланс",
|
||||
oxenUnlockedBalance: "Разблокированый баланс",
|
||||
oxenUnlockedShort: "Разблокировано",
|
||||
noTransactionsFound: "Транзакции не найдены",
|
||||
notes: "Заметки",
|
||||
numberOfUnspentOutputs: "Количество непотраченных выходов",
|
||||
|
|
|
@ -6,12 +6,24 @@
|
|||
<MainMenu :disable-switch-wallet="true" />
|
||||
</template>
|
||||
<template v-else>
|
||||
<q-btn class="cancel" icon="reply" flat round dense @click="cancel()" />
|
||||
<q-btn
|
||||
class="cancel"
|
||||
icon="reply"
|
||||
flat
|
||||
round
|
||||
dense
|
||||
@click="cancel()"
|
||||
/>
|
||||
</template>
|
||||
<q-toolbar-title v-if="page_title == 'Loki'" class="flex items-center justify-center">
|
||||
<img src="loki.svg" height="32" />
|
||||
<q-toolbar-title
|
||||
v-if="page_title == 'Oxen'"
|
||||
class="flex items-center justify-center"
|
||||
>
|
||||
<img src="oxen-white.svg" height="32" />
|
||||
</q-toolbar-title>
|
||||
<q-toolbar-title v-else class="flex items-center justify-center">{{ page_title }}</q-toolbar-title>
|
||||
<q-toolbar-title v-else class="flex items-center justify-center">{{
|
||||
page_title
|
||||
}}</q-toolbar-title>
|
||||
</q-toolbar>
|
||||
</q-header>
|
||||
|
||||
|
@ -58,7 +70,7 @@ export default {
|
|||
|
||||
default:
|
||||
case "wallet-select":
|
||||
return "Loki";
|
||||
return "Oxen";
|
||||
}
|
||||
}
|
||||
},
|
||||
|
|
|
@ -2,9 +2,9 @@
|
|||
<q-layout view="hHh Lpr lFf">
|
||||
<q-header class="shift-title">
|
||||
<MainMenu />
|
||||
<q-toolbar-title>
|
||||
<div class="flex items-center justify-center" style="margin-top:7px">
|
||||
<img src="loki.svg" height="32" />
|
||||
<q-toolbar-title class="oxen-light-teal">
|
||||
<div class="flex items-center justify-center" style="margin:8px">
|
||||
<img src="oxen.svg" height="32" />
|
||||
</div>
|
||||
</q-toolbar-title>
|
||||
</q-header>
|
||||
|
@ -27,16 +27,40 @@
|
|||
/>
|
||||
</router-link>
|
||||
<router-link to="/wallet/receive">
|
||||
<q-btn class="large-btn" :label="$t('buttons.receive')" size="md" icon-right="save_alt" align="between" />
|
||||
<q-btn
|
||||
class="large-btn"
|
||||
:label="$t('buttons.receive')"
|
||||
size="md"
|
||||
icon-right="save_alt"
|
||||
align="between"
|
||||
/>
|
||||
</router-link>
|
||||
<router-link to="/wallet/servicenode">
|
||||
<q-btn class="large-btn" :label="$t('buttons.serviceNode')" size="md" icon-right="router" align="between" />
|
||||
<q-btn
|
||||
class="large-btn"
|
||||
:label="$t('buttons.serviceNode')"
|
||||
size="md"
|
||||
icon-right="router"
|
||||
align="between"
|
||||
/>
|
||||
</router-link>
|
||||
<router-link to="/wallet/lns">
|
||||
<q-btn class="large-btn" :label="$t('buttons.lns')" size="md" icon-right="text_fields" align="between" />
|
||||
<q-btn
|
||||
class="large-btn"
|
||||
:label="$t('buttons.lns')"
|
||||
size="md"
|
||||
icon-right="text_fields"
|
||||
align="between"
|
||||
/>
|
||||
</router-link>
|
||||
<router-link to="/wallet/advanced">
|
||||
<q-btn class="large-btn" :label="$t('buttons.advanced')" size="md" icon-right="tune" align="between" />
|
||||
<q-btn
|
||||
class="large-btn"
|
||||
:label="$t('buttons.advanced')"
|
||||
size="md"
|
||||
icon-right="tune"
|
||||
align="between"
|
||||
/>
|
||||
</router-link>
|
||||
<router-link to="/wallet/addressbook" class="address">
|
||||
<q-btn class="single-icon" size="md" icon="person" />
|
||||
|
|
|
@ -9,9 +9,9 @@ export default {
|
|||
? openContributionRemaining /
|
||||
(MAX_NUMBER_OF_CONTRIBUTORS - node.contributors.length)
|
||||
: 0;
|
||||
const minContributionLoki = minContributionAtomicUnits / 1e9;
|
||||
const minContributionOxen = minContributionAtomicUnits / 1e9;
|
||||
// ceiling to 4 decimal places
|
||||
return minContributionLoki.toFixed(4);
|
||||
return minContributionOxen.toFixed(4);
|
||||
},
|
||||
openForContribution(node) {
|
||||
const openContributionRemaining =
|
||||
|
@ -20,7 +20,7 @@ export default {
|
|||
: 0;
|
||||
return openContributionRemaining;
|
||||
},
|
||||
openForContributionLoki(node) {
|
||||
openForContriubtionOxen(node) {
|
||||
return (this.openForContribution(node) / 1e9).toFixed(4);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
<q-page>
|
||||
<div class="init-screen-page text-center">
|
||||
<div class="absolute-center">
|
||||
<img src="loki.svg" width="400" class="q-mb-md" />
|
||||
<img src="oxen.svg" width="400" class="q-mb-md" />
|
||||
|
||||
<div class="startup-icons q-mt-xl q-mb-lg">
|
||||
<div ref="backend">
|
||||
|
@ -62,10 +62,34 @@
|
|||
d="M7.494,14.958 C3.361,14.958 0,11.622 0,7.52 C0,3.418 3.361,0.082 7.494,0.082 C11.627,0.082 14.989,3.418 14.989,7.52 C14.989,11.622 11.627,14.958 7.494,14.958 L7.494,14.958 Z M7.51,0.938 C3.887,0.938 0.938,3.886 0.938,7.51 C0.938,11.135 3.887,14.083 7.51,14.083 C11.135,14.083 14.083,11.135 14.083,7.51 C14.083,3.886 11.135,0.938 7.51,0.938 L7.51,0.938 Z"
|
||||
class="si-glyph-fill"
|
||||
></path>
|
||||
<rect x="7" y="1" width="0.922" height="14.084" class="si-glyph-fill"></rect>
|
||||
<rect x="0" y="7" width="13.96" height="0.922" class="si-glyph-fill"></rect>
|
||||
<rect x="1" y="4" width="12.406" height="0.906" class="si-glyph-fill"></rect>
|
||||
<rect x="1" y="10" width="12.406" height="0.922" class="si-glyph-fill"></rect>
|
||||
<rect
|
||||
x="7"
|
||||
y="1"
|
||||
width="0.922"
|
||||
height="14.084"
|
||||
class="si-glyph-fill"
|
||||
></rect>
|
||||
<rect
|
||||
x="0"
|
||||
y="7"
|
||||
width="13.96"
|
||||
height="0.922"
|
||||
class="si-glyph-fill"
|
||||
></rect>
|
||||
<rect
|
||||
x="1"
|
||||
y="4"
|
||||
width="12.406"
|
||||
height="0.906"
|
||||
class="si-glyph-fill"
|
||||
></rect>
|
||||
<rect
|
||||
x="1"
|
||||
y="10"
|
||||
width="12.406"
|
||||
height="0.922"
|
||||
class="si-glyph-fill"
|
||||
></rect>
|
||||
<path
|
||||
d="M7.317,14.854 C4.72,13.581 3.043,10.662 3.043,7.417 C3.043,4.247 4.666,1.355 7.181,0.05 L7.642,0.937 C5.455,2.074 4.043,4.617 4.043,7.417 C4.043,10.282 5.502,12.849 7.757,13.955 L7.317,14.854 L7.317,14.854 Z"
|
||||
class="si-glyph-fill"
|
||||
|
@ -112,7 +136,9 @@
|
|||
{{ message }}
|
||||
</div>
|
||||
|
||||
<div v-if="daemonStatus" class="q-mt-xs">{{ $t("strings.syncingDaemon") }}: {{ daemonStatus }}</div>
|
||||
<div v-if="daemonStatus" class="q-mt-xs">
|
||||
{{ $t("strings.syncingDaemon") }}: {{ daemonStatus }}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="absolute-bottom">
|
||||
|
@ -144,7 +170,10 @@ export default {
|
|||
if (this.status.code < 3 || !this.isLocalDaemon) return null;
|
||||
|
||||
const currentHeight = this.daemon.info.height_without_bootstrap;
|
||||
const targetHeight = Math.max(this.daemon.info.height, this.daemon.info.target_height);
|
||||
const targetHeight = Math.max(
|
||||
this.daemon.info.height,
|
||||
this.daemon.info.target_height
|
||||
);
|
||||
const percentage = ((100 * currentHeight) / targetHeight).toFixed(1);
|
||||
|
||||
if (targetHeight === 0 || currentHeight >= targetHeight) return null;
|
||||
|
@ -200,7 +229,8 @@ export default {
|
|||
this.$q.notify({
|
||||
type: "warning",
|
||||
timeout: 2000,
|
||||
message: "Warning: " + this.$t("notification.warnings.usingRemoteNode")
|
||||
message:
|
||||
"Warning: " + this.$t("notification.warnings.usingRemoteNode")
|
||||
});
|
||||
break;
|
||||
case 6:
|
||||
|
@ -224,6 +254,9 @@ export default {
|
|||
</script>
|
||||
|
||||
<style lang="scss">
|
||||
.message {
|
||||
color: #1f1c47;
|
||||
}
|
||||
.init-screen-page {
|
||||
height: 100vh;
|
||||
position: relative;
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
<q-page>
|
||||
<div class="init-screen-page text-center">
|
||||
<div class="absolute-center">
|
||||
<img src="loki.svg" width="400" class="q-mb-md" />
|
||||
<img src="oxen.svg" width="400" class="q-mb-md" />
|
||||
|
||||
<div class="q-mt-xl q-mb-lg">
|
||||
<q-spinner color="primary" :size="30" />
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
class="first-step"
|
||||
>
|
||||
<div class="welcome-container">
|
||||
<img src="loki.svg" height="100" class="q-mb-md" />
|
||||
<img src="oxen.svg" height="100" class="q-mb-md" />
|
||||
<div>Wallet Version: v{{ version }}</div>
|
||||
<div>Daemon Version: {{ daemonVersion }}</div>
|
||||
<LanguageSelect class="q-mt-lg" @select="onLanguageSelected" />
|
||||
|
@ -105,7 +105,6 @@ export default {
|
|||
|
||||
.welcome-stepper {
|
||||
height: 100%;
|
||||
// the Loki lighter grey is behind it
|
||||
background: transparent;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<template>
|
||||
<q-page class="create-wallet">
|
||||
<div class="fields q-mx-md q-mt-md">
|
||||
<LokiField
|
||||
<OxenField
|
||||
:label="$t('fieldLabels.walletName')"
|
||||
:error="$v.wallet.name.$error"
|
||||
>
|
||||
|
@ -14,21 +14,20 @@
|
|||
@keyup.enter="create"
|
||||
@blur="$v.wallet.name.$touch"
|
||||
/>
|
||||
</LokiField>
|
||||
</OxenField>
|
||||
|
||||
<LokiField :label="$t('fieldLabels.seedLanguage')">
|
||||
<OxenField :label="$t('fieldLabels.seedLanguage')">
|
||||
<q-select
|
||||
v-model="wallet.language"
|
||||
:options="languageOptions"
|
||||
:dark="theme == 'dark'"
|
||||
borderless
|
||||
dense
|
||||
emit-value
|
||||
map-options
|
||||
/>
|
||||
</LokiField>
|
||||
</OxenField>
|
||||
|
||||
<LokiField :label="$t('fieldLabels.password')" optional>
|
||||
<OxenField :label="$t('fieldLabels.password')" optional>
|
||||
<q-input
|
||||
v-model="wallet.password"
|
||||
type="password"
|
||||
|
@ -38,9 +37,9 @@
|
|||
dense
|
||||
@keyup.enter="create"
|
||||
/>
|
||||
</LokiField>
|
||||
</OxenField>
|
||||
|
||||
<LokiField :label="$t('fieldLabels.confirmPassword')">
|
||||
<OxenField :label="$t('fieldLabels.confirmPassword')">
|
||||
<q-input
|
||||
v-model="wallet.password_confirm"
|
||||
type="password"
|
||||
|
@ -49,7 +48,7 @@
|
|||
dense
|
||||
@keyup.enter="create"
|
||||
/>
|
||||
</LokiField>
|
||||
</OxenField>
|
||||
|
||||
<q-btn
|
||||
class="submit-button"
|
||||
|
@ -64,10 +63,10 @@
|
|||
<script>
|
||||
import { required } from "vuelidate/lib/validators";
|
||||
import { mapState } from "vuex";
|
||||
import LokiField from "components/loki_field";
|
||||
import OxenField from "components/oxen_field";
|
||||
export default {
|
||||
components: {
|
||||
LokiField
|
||||
OxenField
|
||||
},
|
||||
data() {
|
||||
const languageOptions = [
|
||||
|
|
|
@ -7,8 +7,18 @@
|
|||
{{ info.address }}
|
||||
</div>
|
||||
<div class="q-item-side">
|
||||
<q-btn color="primary" padding="xs" size="sm" icon="file_copy" @click="copyAddress">
|
||||
<q-tooltip anchor="center left" self="center right" :offset="[5, 10]">
|
||||
<q-btn
|
||||
color="primary"
|
||||
padding="xs"
|
||||
size="sm"
|
||||
icon="file_copy"
|
||||
@click="copyAddress"
|
||||
>
|
||||
<q-tooltip
|
||||
anchor="center left"
|
||||
self="center right"
|
||||
:offset="[5, 10]"
|
||||
>
|
||||
{{ $t("menuItems.copyAddress") }}
|
||||
</q-tooltip>
|
||||
</q-btn>
|
||||
|
@ -37,7 +47,10 @@
|
|||
</div>
|
||||
</template>
|
||||
|
||||
<q-expansion-item label="Advanced" header-class="q-mt-sm non-selectable row reverse advanced-options-label">
|
||||
<q-expansion-item
|
||||
label="Advanced"
|
||||
header-class="q-mt-sm non-selectable row reverse advanced-options-label"
|
||||
>
|
||||
<template v-if="secret.view_key != secret.spend_key">
|
||||
<h6 class="q-mb-xs title">{{ $t("strings.viewKey") }}</h6>
|
||||
<div class="row">
|
||||
|
@ -45,8 +58,18 @@
|
|||
{{ secret.view_key }}
|
||||
</div>
|
||||
<div class="q-item-side">
|
||||
<q-btn color="primary" padding="xs" size="sm" icon="file_copy" @click="copyPrivateKey('view_key', $event)">
|
||||
<q-tooltip anchor="center left" self="center right" :offset="[5, 10]">
|
||||
<q-btn
|
||||
color="primary"
|
||||
padding="xs"
|
||||
size="sm"
|
||||
icon="file_copy"
|
||||
@click="copyPrivateKey('view_key', $event)"
|
||||
>
|
||||
<q-tooltip
|
||||
anchor="center left"
|
||||
self="center right"
|
||||
:offset="[5, 10]"
|
||||
>
|
||||
{{ $t("menuItems.copyViewKey") }}
|
||||
</q-tooltip>
|
||||
</q-btn>
|
||||
|
@ -61,8 +84,18 @@
|
|||
{{ secret.spend_key }}
|
||||
</div>
|
||||
<div class="q-item-side">
|
||||
<q-btn color="primary" padding="xs" size="sm" icon="file_copy" @click="copyPrivateKey('spend_key', $event)">
|
||||
<q-tooltip anchor="center left" self="center right" :offset="[5, 10]">
|
||||
<q-btn
|
||||
color="primary"
|
||||
padding="xs"
|
||||
size="sm"
|
||||
icon="file_copy"
|
||||
@click="copyPrivateKey('spend_key', $event)"
|
||||
>
|
||||
<q-tooltip
|
||||
anchor="center left"
|
||||
self="center right"
|
||||
:offset="[5, 10]"
|
||||
>
|
||||
{{ $t("menuItems.copySpendKey") }}
|
||||
</q-tooltip>
|
||||
</q-btn>
|
||||
|
@ -71,7 +104,12 @@
|
|||
</template>
|
||||
</q-expansion-item>
|
||||
|
||||
<q-btn class="q-mt-lg" color="primary" :label="$t('buttons.openWallet')" @click="open" />
|
||||
<q-btn
|
||||
class="q-mt-lg"
|
||||
color="primary"
|
||||
:label="$t('buttons.openWallet')"
|
||||
@click="open"
|
||||
/>
|
||||
</q-page>
|
||||
</template>
|
||||
|
||||
|
@ -137,9 +175,7 @@ export default {
|
|||
ok: {
|
||||
label: this.$t("dialog.buttons.ok"),
|
||||
color: "primary"
|
||||
},
|
||||
color: this.theme === "dark" ? "white" : "dark",
|
||||
dark: this.theme === "dark"
|
||||
}
|
||||
})
|
||||
.onDismiss(() => null)
|
||||
.onCancel(() => null)
|
||||
|
@ -166,45 +202,4 @@ export default {
|
|||
};
|
||||
</script>
|
||||
|
||||
<style lang="scss">
|
||||
.created {
|
||||
.wallet h6 {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.address {
|
||||
text-align: center;
|
||||
word-break: break-all;
|
||||
}
|
||||
|
||||
.seed-box {
|
||||
border: 1px solid white;
|
||||
border-radius: 3px;
|
||||
margin: 16px;
|
||||
padding: 16px;
|
||||
|
||||
div,
|
||||
h6 {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.seed {
|
||||
font-size: 24px;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.warning {
|
||||
color: goldenrod;
|
||||
}
|
||||
}
|
||||
h6 {
|
||||
font-size: 18px;
|
||||
margin: 8px 0;
|
||||
font-weight: 450;
|
||||
}
|
||||
.advanced-options-label {
|
||||
padding-left: 0;
|
||||
padding-right: 0;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
<style lang="scss"></style>
|
||||
|
|
|
@ -1,7 +1,10 @@
|
|||
<template>
|
||||
<q-page>
|
||||
<div class="q-mx-md import-wallet">
|
||||
<LokiField :label="$t('fieldLabels.newWalletName')" :error="$v.wallet.name.$error">
|
||||
<OxenField
|
||||
:label="$t('fieldLabels.newWalletName')"
|
||||
:error="$v.wallet.name.$error"
|
||||
>
|
||||
<q-input
|
||||
v-model="wallet.name"
|
||||
:placeholder="$t('placeholders.walletName')"
|
||||
|
@ -11,9 +14,13 @@
|
|||
@keyup.enter="import_wallet"
|
||||
@blur="$v.wallet.name.$touch"
|
||||
/>
|
||||
</LokiField>
|
||||
</OxenField>
|
||||
|
||||
<LokiField :label="$t('fieldLabels.walletFile')" disable-hover :error="$v.wallet.path.$error">
|
||||
<OxenField
|
||||
:label="$t('fieldLabels.walletFile')"
|
||||
disable-hover
|
||||
:error="$v.wallet.path.$error"
|
||||
>
|
||||
<q-input
|
||||
v-model="wallet.path"
|
||||
:placeholder="$t('placeholders.selectAFile')"
|
||||
|
@ -22,16 +29,22 @@
|
|||
borderless
|
||||
dense
|
||||
/>
|
||||
<input id="walletPath" ref="fileInput" type="file" hidden @change="setWalletPath" />
|
||||
<input
|
||||
id="walletPath"
|
||||
ref="fileInput"
|
||||
type="file"
|
||||
hidden
|
||||
@change="setWalletPath"
|
||||
/>
|
||||
<q-btn
|
||||
color="secondary"
|
||||
:label="$t('buttons.selectWalletFile')"
|
||||
:text-color="theme == 'dark' ? 'white' : 'dark'"
|
||||
@click="selectFile"
|
||||
/>
|
||||
</LokiField>
|
||||
</OxenField>
|
||||
|
||||
<LokiField :label="$t('fieldLabels.password')">
|
||||
<OxenField :label="$t('fieldLabels.password')">
|
||||
<q-input
|
||||
v-model="wallet.password"
|
||||
:placeholder="$t('placeholders.walletPassword')"
|
||||
|
@ -41,9 +54,9 @@
|
|||
dense
|
||||
@keyup.enter="import_wallet"
|
||||
/>
|
||||
</LokiField>
|
||||
</OxenField>
|
||||
|
||||
<LokiField :label="$t('fieldLabels.confirmPassword')">
|
||||
<OxenField :label="$t('fieldLabels.confirmPassword')">
|
||||
<q-input
|
||||
v-model="wallet.password_confirm"
|
||||
type="password"
|
||||
|
@ -52,8 +65,13 @@
|
|||
dense
|
||||
@keyup.enter="import_wallet"
|
||||
/>
|
||||
</LokiField>
|
||||
<q-btn class="submit-button" color="primary" :label="$tc('buttons.importWallet', 1)" @click="import_wallet" />
|
||||
</OxenField>
|
||||
<q-btn
|
||||
class="submit-button"
|
||||
color="primary"
|
||||
:label="$tc('buttons.importWallet', 1)"
|
||||
@click="import_wallet"
|
||||
/>
|
||||
</div>
|
||||
</q-page>
|
||||
</template>
|
||||
|
@ -61,10 +79,10 @@
|
|||
<script>
|
||||
import { required } from "vuelidate/lib/validators";
|
||||
import { mapState } from "vuex";
|
||||
import LokiField from "components/loki_field";
|
||||
import OxenField from "components/oxen_field";
|
||||
export default {
|
||||
components: {
|
||||
LokiField
|
||||
OxenField
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
|
@ -172,7 +190,7 @@ export default {
|
|||
}
|
||||
}
|
||||
|
||||
.loki-field {
|
||||
.oxen-field {
|
||||
margin-top: 16px;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,15 +1,30 @@
|
|||
<template>
|
||||
<q-page>
|
||||
<q-list class="wallet-list" no-border :dark="theme == 'dark'">
|
||||
<q-list
|
||||
class="wallet-list oxen-light-teal"
|
||||
no-border
|
||||
:dark="theme == 'dark'"
|
||||
>
|
||||
<template v-if="wallets.list.length">
|
||||
<div class="header row justify-between items-center">
|
||||
<div class="header-title">
|
||||
{{ $t("titles.yourWallets") }}
|
||||
</div>
|
||||
<q-btn v-if="wallets.list.length" class="add" icon="add" size="md" color="primary">
|
||||
<q-btn
|
||||
v-if="wallets.list.length"
|
||||
class="add"
|
||||
icon="add"
|
||||
size="md"
|
||||
color="primary"
|
||||
>
|
||||
<q-menu class="header-popover" :content-class="'header-popover'">
|
||||
<q-list separator>
|
||||
<q-item v-for="action in actions" :key="action.name" clickable @click.native="action.handler">
|
||||
<q-item
|
||||
v-for="action in actions"
|
||||
:key="action.name"
|
||||
clickable
|
||||
@click.native="action.handler"
|
||||
>
|
||||
<q-item-section>
|
||||
{{ action.name }}
|
||||
</q-item-section>
|
||||
|
@ -35,7 +50,12 @@
|
|||
class="si-glyph si-glyph-wallet"
|
||||
>
|
||||
<defs class="si-glyph-fill"></defs>
|
||||
<g stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<g
|
||||
stroke="none"
|
||||
stroke-width="1"
|
||||
fill="none"
|
||||
fill-rule="evenodd"
|
||||
>
|
||||
<g transform="translate(1.000000, 0.000000)" fill="#434343">
|
||||
<path
|
||||
d="M7.988,10.635 L7.988,8.327 C7.988,7.578 8.561,6.969 9.267,6.969 L13.964,6.969 L13.964,5.531 C13.964,4.849 13.56,4.279 13.007,4.093 L13.007,4.094 L11.356,4.08 L11.336,4.022 L3.925,4.022 L3.784,4.07 L1.17,4.068 L1.165,4.047 C0.529,4.167 0.017,4.743 0.017,5.484 L0.017,13.437 C0.017,14.269 0.665,14.992 1.408,14.992 L12.622,14.992 C13.365,14.992 13.965,14.316 13.965,13.484 L13.965,12.031 L9.268,12.031 C8.562,12.031 7.988,11.384 7.988,10.635 L7.988,10.635 Z"
|
||||
|
@ -55,8 +75,12 @@
|
|||
</q-icon>
|
||||
</q-item-section>
|
||||
<q-item-section>
|
||||
<q-item-label class="wallet-name" caption>{{ wallet.name }}</q-item-label>
|
||||
<q-item-label class="monospace ellipsis" caption>{{ wallet.address }}</q-item-label>
|
||||
<q-item-label class="wallet-name" caption>{{
|
||||
wallet.name
|
||||
}}</q-item-label>
|
||||
<q-item-label class="monospace ellipsis" caption>{{
|
||||
wallet.address
|
||||
}}</q-item-label>
|
||||
</q-item-section>
|
||||
<ContextMenu
|
||||
:menu-items="menuItems"
|
||||
|
@ -67,7 +91,11 @@
|
|||
<q-separator />
|
||||
</template>
|
||||
<template v-else>
|
||||
<q-item v-for="action in actions" :key="action.name" @click.native="action.handler">
|
||||
<q-item
|
||||
v-for="action in actions"
|
||||
:key="action.name"
|
||||
@click.native="action.handler"
|
||||
>
|
||||
<q-item-section>
|
||||
{{ action.name }}
|
||||
</q-item-section>
|
||||
|
@ -173,15 +201,14 @@ export default {
|
|||
type: "password"
|
||||
},
|
||||
ok: {
|
||||
label: this.$t("dialog.buttons.open")
|
||||
label: this.$t("dialog.buttons.open"),
|
||||
color: "primary"
|
||||
},
|
||||
cancel: {
|
||||
flat: true,
|
||||
label: this.$t("dialog.buttons.cancel"),
|
||||
color: this.theme == "dark" ? "white" : "dark"
|
||||
label: this.$t("dialog.buttons.cancel")
|
||||
},
|
||||
dark: this.theme == "dark",
|
||||
color: "positive"
|
||||
color: "#1F1C47"
|
||||
})
|
||||
.onOk(password => {
|
||||
this.$q.loading.show({
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<template>
|
||||
<q-page>
|
||||
<div class="q-mx-md">
|
||||
<LokiField
|
||||
<OxenField
|
||||
class="q-mt-md"
|
||||
:label="$t('fieldLabels.walletName')"
|
||||
:error="$v.wallet.name.$error"
|
||||
|
@ -9,34 +9,32 @@
|
|||
<q-input
|
||||
v-model="wallet.name"
|
||||
:placeholder="$t('placeholders.walletName')"
|
||||
:dark="theme == 'dark'"
|
||||
borderless
|
||||
dense
|
||||
@keyup.enter="restore_wallet"
|
||||
@blur="$v.wallet.name.$touch"
|
||||
/>
|
||||
</LokiField>
|
||||
</OxenField>
|
||||
|
||||
<LokiField
|
||||
<OxenField
|
||||
class="q-mt-md"
|
||||
:label="$t('fieldLabels.mnemonicSeed')"
|
||||
:error="$v.wallet.seed.$error"
|
||||
>
|
||||
<q-input
|
||||
v-model="wallet.seed"
|
||||
class="full-width text-area-loki"
|
||||
class="full-width text-area-oxen"
|
||||
:placeholder="$t('placeholders.mnemonicSeed')"
|
||||
type="textarea"
|
||||
:dark="theme == 'dark'"
|
||||
borderless
|
||||
dense
|
||||
@blur="$v.wallet.seed.$touch"
|
||||
/>
|
||||
</LokiField>
|
||||
</OxenField>
|
||||
|
||||
<div class="row items-end q-mt-md">
|
||||
<div class="col-md-9 col-sm-8">
|
||||
<LokiField
|
||||
<OxenField
|
||||
v-if="wallet.refresh_type == 'date'"
|
||||
:label="$t('fieldLabels.restoreFromDate')"
|
||||
>
|
||||
|
@ -75,8 +73,8 @@
|
|||
</q-icon>
|
||||
</template>
|
||||
</q-input>
|
||||
</LokiField>
|
||||
<LokiField
|
||||
</OxenField>
|
||||
<OxenField
|
||||
v-else-if="wallet.refresh_type == 'height'"
|
||||
:label="$t('fieldLabels.restoreFromBlockHeight')"
|
||||
:error="$v.wallet.refresh_start_height.$error"
|
||||
|
@ -90,13 +88,12 @@
|
|||
dense
|
||||
@blur="$v.wallet.refresh_start_height.$touch"
|
||||
/>
|
||||
</LokiField>
|
||||
</OxenField>
|
||||
</div>
|
||||
<div class="col-sm-4 col-md-3">
|
||||
<template v-if="wallet.refresh_type == 'date'">
|
||||
<q-btn
|
||||
class="restore-from-button"
|
||||
:text-color="theme == 'dark' ? 'white' : 'dark'"
|
||||
flat
|
||||
@click="wallet.refresh_type = 'height'"
|
||||
>
|
||||
|
@ -109,7 +106,6 @@
|
|||
<template v-else-if="wallet.refresh_type == 'height'">
|
||||
<q-btn
|
||||
class="restore-from-button"
|
||||
:text-color="theme == 'dark' ? 'white' : 'dark'"
|
||||
flat
|
||||
@click="wallet.refresh_type = 'date'"
|
||||
>
|
||||
|
@ -122,7 +118,7 @@
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<LokiField class="q-mt-md" :label="$t('fieldLabels.password')">
|
||||
<OxenField class="q-mt-md" :label="$t('fieldLabels.password')">
|
||||
<q-input
|
||||
v-model="wallet.password"
|
||||
:placeholder="$t('placeholders.walletPassword')"
|
||||
|
@ -132,9 +128,9 @@
|
|||
dense
|
||||
@keyup.enter="restore_wallet"
|
||||
/>
|
||||
</LokiField>
|
||||
</OxenField>
|
||||
|
||||
<LokiField class="q-mt-md" :label="$t('fieldLabels.confirmPassword')">
|
||||
<OxenField class="q-mt-md" :label="$t('fieldLabels.confirmPassword')">
|
||||
<q-input
|
||||
v-model="wallet.password_confirm"
|
||||
type="password"
|
||||
|
@ -143,7 +139,7 @@
|
|||
dense
|
||||
@keyup.enter="restore_wallet"
|
||||
/>
|
||||
</LokiField>
|
||||
</OxenField>
|
||||
<q-btn
|
||||
class="submit-button"
|
||||
color="primary"
|
||||
|
@ -157,7 +153,7 @@
|
|||
<script>
|
||||
import { required, numeric } from "vuelidate/lib/validators";
|
||||
import { mapState } from "vuex";
|
||||
import LokiField from "components/loki_field";
|
||||
import OxenField from "components/oxen_field";
|
||||
import { date } from "quasar";
|
||||
import _ from "lodash";
|
||||
|
||||
|
@ -167,7 +163,7 @@ let dateFirstBlock = date.formatDate(timeStampFirstBlock, qDateFormat);
|
|||
|
||||
export default {
|
||||
components: {
|
||||
LokiField
|
||||
OxenField
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
|
|
|
@ -7,11 +7,11 @@
|
|||
</div>
|
||||
|
||||
<template v-if="address_book_combined.length">
|
||||
<q-list link no-border :dark="theme == 'dark'" class="loki-list">
|
||||
<q-list link no-border :dark="theme == 'dark'" class="oxen-list">
|
||||
<q-item
|
||||
v-for="(entry, index) in address_book_combined"
|
||||
:key="`${entry.address}-${entry.name}-${index}`"
|
||||
class="loki-list-item"
|
||||
class="oxen-list-item"
|
||||
@click.native="details(entry)"
|
||||
>
|
||||
<q-item-section>
|
||||
|
@ -27,7 +27,7 @@
|
|||
:name="entry.starred ? 'star' : 'star_border'"
|
||||
/>
|
||||
<q-btn
|
||||
color="secondary"
|
||||
color="primary"
|
||||
style="margin-left: 10px;"
|
||||
:label="$t('buttons.send')"
|
||||
:disabled="view_only"
|
||||
|
@ -45,7 +45,7 @@
|
|||
</q-list>
|
||||
</template>
|
||||
<template v-else>
|
||||
<p class="q-ma-md">{{ $t("strings.addressBookIsEmpty") }}</p>
|
||||
<p class="q-ma-md tab-desc">{{ $t("strings.addressBookIsEmpty") }}</p>
|
||||
</template>
|
||||
|
||||
<q-page-sticky position="bottom-right" :offset="[18, 18]">
|
||||
|
@ -126,9 +126,10 @@ export default {
|
|||
.header {
|
||||
font-size: 14px;
|
||||
font-weight: 500;
|
||||
color: #1f1c47;
|
||||
}
|
||||
|
||||
.loki-list-item {
|
||||
.oxen-list-item {
|
||||
cursor: pointer;
|
||||
padding-top: 12px;
|
||||
padding-bottom: 12px;
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
<q-btn-toggle
|
||||
v-model="screen"
|
||||
toggle-color="primary"
|
||||
color="secondary"
|
||||
color="accent"
|
||||
:options="[
|
||||
{ label: $t('titles.advanced.prove'), value: 'prove' },
|
||||
{
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
<q-btn-toggle
|
||||
v-model="screen"
|
||||
toggle-color="primary"
|
||||
color="secondary"
|
||||
color="accent"
|
||||
:options="[
|
||||
{
|
||||
label: $t('titles.lns.purchase'),
|
||||
|
|
|
@ -1,7 +1,9 @@
|
|||
<template>
|
||||
<q-page class="receive">
|
||||
<q-list link no-border :dark="theme == 'dark'" class="loki-list">
|
||||
<q-item-label header>{{ $t("strings.addresses.myPrimaryAddress") }}</q-item-label>
|
||||
<q-list link no-border :dark="theme == 'dark'" class="oxen-list">
|
||||
<q-item-label header class="list-header">{{
|
||||
$t("strings.addresses.myPrimaryAddress")
|
||||
}}</q-item-label>
|
||||
<ReceiveItem
|
||||
v-for="address in address_list.primary"
|
||||
:key="address.address"
|
||||
|
@ -15,15 +17,20 @@
|
|||
/>
|
||||
|
||||
<template v-if="address_list.used.length">
|
||||
<q-item-label header>{{ $t("strings.addresses.myUsedAddresses") }}</q-item-label>
|
||||
<q-item-label header class="list-header">{{
|
||||
$t("strings.addresses.myUsedAddresses")
|
||||
}}</q-item-label>
|
||||
<ReceiveItem
|
||||
v-for="address in address_list.used"
|
||||
:key="address.address"
|
||||
:address="address"
|
||||
:sublabel="
|
||||
`${$t('strings.addresses.subAddress')} (${$t('strings.addresses.subAddressIndex', {
|
||||
index: address.address_index
|
||||
})})`
|
||||
`${$t('strings.addresses.subAddress')} (${$t(
|
||||
'strings.addresses.subAddressIndex',
|
||||
{
|
||||
index: address.address_index
|
||||
}
|
||||
)})`
|
||||
"
|
||||
:show-q-r="showQR"
|
||||
:copy-address="copyAddress"
|
||||
|
@ -32,15 +39,20 @@
|
|||
</template>
|
||||
|
||||
<template v-if="address_list.unused.length">
|
||||
<q-item-label header>{{ $t("strings.addresses.myUnusedAddresses") }}</q-item-label>
|
||||
<q-item-label header class="list-header">{{
|
||||
$t("strings.addresses.myUnusedAddresses")
|
||||
}}</q-item-label>
|
||||
<ReceiveItem
|
||||
v-for="address in address_list.unused"
|
||||
:key="address.address"
|
||||
:address="address"
|
||||
:sublabel="
|
||||
`${$t('strings.addresses.subAddress')} (${$t('strings.addresses.subAddressIndex', {
|
||||
index: address.address_index
|
||||
})})`
|
||||
`${$t('strings.addresses.subAddress')} (${$t(
|
||||
'strings.addresses.subAddressIndex',
|
||||
{
|
||||
index: address.address_index
|
||||
}
|
||||
)})`
|
||||
"
|
||||
:show-q-r="showQR"
|
||||
:copy-address="copyAddress"
|
||||
|
@ -57,10 +69,18 @@
|
|||
<q-card class="qr-code-card">
|
||||
<div class="text-center q-mb-sm q-pa-md" style="background: white;">
|
||||
<QrcodeVue ref="qr" :value="QR.address" size="240"> </QrcodeVue>
|
||||
<ContextMenu :menu-items="menuItems" @copyQR="copyQR()" @saveQR="saveQR()" />
|
||||
<ContextMenu
|
||||
:menu-items="menuItems"
|
||||
@copyQR="copyQR()"
|
||||
@saveQR="saveQR()"
|
||||
/>
|
||||
</div>
|
||||
<q-card-actions>
|
||||
<q-btn color="primary" :label="$t('buttons.close')" @click="QR.visible = false" />
|
||||
<q-btn
|
||||
color="primary"
|
||||
:label="$t('buttons.close')"
|
||||
@click="QR.visible = false"
|
||||
/>
|
||||
</q-card-actions>
|
||||
</q-card>
|
||||
</q-dialog>
|
||||
|
@ -161,7 +181,7 @@ export default {
|
|||
font-weight: 400;
|
||||
}
|
||||
|
||||
.loki-list-item {
|
||||
.oxen-list-item {
|
||||
cursor: pointer;
|
||||
|
||||
.q-item-section {
|
||||
|
|
|
@ -10,13 +10,12 @@
|
|||
<div class="row gutter-md">
|
||||
<!-- Amount -->
|
||||
<div class="col-6 amount">
|
||||
<LokiField
|
||||
<OxenField
|
||||
:label="$t('fieldLabels.amount')"
|
||||
:error="$v.newTx.amount.$error"
|
||||
>
|
||||
<q-input
|
||||
v-model="newTx.amount"
|
||||
:dark="theme == 'dark'"
|
||||
type="number"
|
||||
min="0"
|
||||
:max="unlocked_balance / 1e9"
|
||||
|
@ -26,100 +25,88 @@
|
|||
@blur="$v.newTx.amount.$touch"
|
||||
/>
|
||||
<q-btn
|
||||
color="secondary"
|
||||
:text-color="theme == 'dark' ? 'white' : 'dark'"
|
||||
color="primary"
|
||||
@click="newTx.amount = unlocked_balance / 1e9"
|
||||
>
|
||||
{{ $t("buttons.all") }}
|
||||
</q-btn>
|
||||
</LokiField>
|
||||
</OxenField>
|
||||
</div>
|
||||
|
||||
<!-- Priority -->
|
||||
<div class="col-6 priority">
|
||||
<LokiField :label="$t('fieldLabels.priority')">
|
||||
<OxenField :label="$t('fieldLabels.priority')">
|
||||
<q-select
|
||||
v-model="newTx.priority"
|
||||
emit-value
|
||||
map-options
|
||||
:dark="theme == 'dark'"
|
||||
:options="priorityOptions"
|
||||
borderless
|
||||
dense
|
||||
/>
|
||||
</LokiField>
|
||||
</OxenField>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Address -->
|
||||
<div class="col q-mt-sm">
|
||||
<LokiField
|
||||
<OxenField
|
||||
:label="$t('fieldLabels.address')"
|
||||
:error="$v.newTx.address.$error"
|
||||
>
|
||||
<q-input
|
||||
v-model.trim="newTx.address"
|
||||
:dark="theme == 'dark'"
|
||||
:placeholder="address_placeholder"
|
||||
borderless
|
||||
dense
|
||||
@blur="$v.newTx.address.$touch"
|
||||
/>
|
||||
<q-btn
|
||||
color="secondary"
|
||||
:text-color="theme == 'dark' ? 'white' : 'dark'"
|
||||
to="addressbook"
|
||||
>
|
||||
<q-btn color="primary" to="addressbook">
|
||||
{{ $t("buttons.contacts") }}
|
||||
</q-btn>
|
||||
</LokiField>
|
||||
</OxenField>
|
||||
</div>
|
||||
|
||||
<!-- Notes -->
|
||||
<div class="col q-mt-sm">
|
||||
<LokiField :label="$t('fieldLabels.notes')" optional>
|
||||
<OxenField :label="$t('fieldLabels.notes')" optional>
|
||||
<q-input
|
||||
v-model="newTx.note"
|
||||
class="full-width text-area-loki"
|
||||
class="full-width text-area-oxen"
|
||||
type="textarea"
|
||||
:dark="theme == 'dark'"
|
||||
:placeholder="$t('placeholders.transactionNotes')"
|
||||
borderless
|
||||
dense
|
||||
/>
|
||||
</LokiField>
|
||||
</OxenField>
|
||||
</div>
|
||||
|
||||
<q-checkbox
|
||||
v-model="newTx.address_book.save"
|
||||
:label="$t('strings.saveToAddressBook')"
|
||||
:dark="theme == 'dark'"
|
||||
color="dark"
|
||||
/>
|
||||
<div v-if="newTx.address_book.save">
|
||||
<LokiField :label="$t('fieldLabels.name')" optional>
|
||||
<OxenField :label="$t('fieldLabels.name')" optional>
|
||||
<q-input
|
||||
v-model="newTx.address_book.name"
|
||||
:dark="theme == 'dark'"
|
||||
:placeholder="$t('placeholders.addressBookName')"
|
||||
borderless
|
||||
dense
|
||||
/>
|
||||
</LokiField>
|
||||
<LokiField class="q-mt-sm" :label="$t('fieldLabels.notes')" optional>
|
||||
</OxenField>
|
||||
<OxenField class="q-mt-sm" :label="$t('fieldLabels.notes')" optional>
|
||||
<q-input
|
||||
v-model="newTx.address_book.description"
|
||||
type="textarea"
|
||||
class="full-width text-area-loki"
|
||||
class="full-width text-area-oxen"
|
||||
rows="2"
|
||||
:dark="theme == 'dark'"
|
||||
:placeholder="$t('placeholders.additionalNotes')"
|
||||
borderless
|
||||
dense
|
||||
/>
|
||||
</LokiField>
|
||||
</OxenField>
|
||||
</div>
|
||||
<!-- div required so button below checkbox -->
|
||||
<!-- div required so the button falls below the checkbox -->
|
||||
<div>
|
||||
<q-btn
|
||||
class="send-btn"
|
||||
|
@ -139,7 +126,7 @@
|
|||
:on-confirm-transaction="onConfirmTransaction"
|
||||
:on-cancel-transaction="onCancelTransaction"
|
||||
/>
|
||||
<q-inner-loading :showing="tx_status.sending" :dark="theme == 'dark'">
|
||||
<q-inner-loading :showing="tx_status.sending">
|
||||
<q-spinner color="primary" size="30" />
|
||||
</q-inner-loading>
|
||||
</template>
|
||||
|
@ -150,7 +137,7 @@
|
|||
import { mapState } from "vuex";
|
||||
import { required, decimal } from "vuelidate/lib/validators";
|
||||
import { address, greater_than_zero } from "src/validators/common";
|
||||
import LokiField from "components/loki_field";
|
||||
import OxenField from "components/oxen_field";
|
||||
import WalletPassword from "src/mixins/wallet_password";
|
||||
import ConfirmDialogMixin from "src/mixins/confirm_dialog_mixin";
|
||||
import ConfirmTransactionDialog from "components/confirm_tx_dialog";
|
||||
|
@ -161,7 +148,7 @@ const DO_NOTHING = 10;
|
|||
|
||||
export default {
|
||||
components: {
|
||||
LokiField,
|
||||
OxenField,
|
||||
ConfirmTransactionDialog
|
||||
},
|
||||
mixins: [WalletPassword, ConfirmDialogMixin],
|
||||
|
@ -383,9 +370,7 @@ export default {
|
|||
ok: {
|
||||
label: this.$t("dialog.transfer.ok"),
|
||||
color: "primary"
|
||||
},
|
||||
dark: this.theme == "dark",
|
||||
color: this.theme == "dark" ? "white" : "dark"
|
||||
}
|
||||
});
|
||||
passwordDialog
|
||||
.onOk(password => {
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
<q-btn-toggle
|
||||
v-model="screen"
|
||||
toggle-color="primary"
|
||||
color="secondary"
|
||||
color="accent"
|
||||
:options="[
|
||||
{
|
||||
label: $t('titles.serviceNode.myStakes'),
|
||||
|
|
|
@ -5,27 +5,25 @@
|
|||
{{ $t("titles.transactions") }}
|
||||
</div>
|
||||
|
||||
<LokiField class="col-5 q-px-sm" :label="$t('fieldLabels.filter')">
|
||||
<OxenField class="col-5 q-px-sm" :label="$t('fieldLabels.filter')">
|
||||
<q-input
|
||||
v-model="tx_filter"
|
||||
:dark="theme == 'dark'"
|
||||
:placeholder="$t('placeholders.filterTx')"
|
||||
borderless
|
||||
dense
|
||||
/>
|
||||
</LokiField>
|
||||
</OxenField>
|
||||
|
||||
<LokiField class="col-2" :label="$t('fieldLabels.filterTransactionType')">
|
||||
<OxenField class="col-2" :label="$t('fieldLabels.filterTransactionType')">
|
||||
<q-select
|
||||
v-model="tx_type"
|
||||
:dark="theme == 'dark'"
|
||||
:options="tx_type_options"
|
||||
borderless
|
||||
dense
|
||||
emit-value
|
||||
map-options
|
||||
/>
|
||||
</LokiField>
|
||||
</OxenField>
|
||||
</div>
|
||||
<TxList :type="tx_type" :filter="tx_filter" />
|
||||
</q-page>
|
||||
|
@ -34,11 +32,11 @@
|
|||
<script>
|
||||
import { mapState } from "vuex";
|
||||
import TxList from "components/tx_list";
|
||||
import LokiField from "components/loki_field";
|
||||
import OxenField from "components/oxen_field";
|
||||
export default {
|
||||
components: {
|
||||
TxList,
|
||||
LokiField
|
||||
OxenField
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
|
|
|
@ -1945,11 +1945,11 @@ return{_strlen:lb,_ge_mul8:Va,_keccak:db,_ge_scalarmult:Ta,_ge_fromfe_frombytes_
|
|||
|
||||
|
||||
|
||||
var lokiConfig = {
|
||||
var oxenConfig = {
|
||||
coinUnitPlaces: 12,
|
||||
coinSymbol: 'LOKI',
|
||||
coinName: 'Loki',
|
||||
coinUriPrefix: 'loki:',
|
||||
coinSymbol: 'OXEN',
|
||||
coinName: 'Oxen',
|
||||
coinUriPrefix: 'oxen:',
|
||||
addressPrefix: 114,
|
||||
};
|
||||
|
||||
|
@ -2386,7 +2386,7 @@ var cnUtilGen = function(initConfig) {
|
|||
|
||||
return this;
|
||||
};
|
||||
var cnUtil = cnUtilGen(lokiConfig);
|
||||
var cnUtil = cnUtilGen(oxenConfig);
|
||||
/*
|
||||
mnemonic.js : Converts between 4-byte aligned strings and a human-readable
|
||||
sequence of words. Uses 1626 common words taken from wikipedia article:
|
||||
|
|
Loading…
Reference in New Issue