parent
6e2f9b282b
commit
1e5cfb2ecc
|
@ -1,4 +1,4 @@
|
||||||
name: Loki Electron Wallet Build
|
name: Oxen Electron Wallet Build
|
||||||
|
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
|
@ -30,7 +30,7 @@ jobs:
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: npm install
|
run: npm install
|
||||||
|
|
||||||
- name: Download lokid binaries
|
- name: Download oxend binaries
|
||||||
run: ./download-asset.sh
|
run: ./download-asset.sh
|
||||||
env:
|
env:
|
||||||
OS: ${{ runner.os }}
|
OS: ${{ runner.os }}
|
||||||
|
@ -50,10 +50,10 @@ jobs:
|
||||||
shell: bash
|
shell: bash
|
||||||
working-directory: ./downloads
|
working-directory: ./downloads
|
||||||
|
|
||||||
- name: Move lokid binaries
|
- name: Move oxend binaries
|
||||||
run: |
|
run: |
|
||||||
find ./downloads -type f -name "lokid*" -exec cp '{}' ./bin \;
|
find ./downloads -type f -name "oxend*" -exec cp '{}' ./bin \;
|
||||||
find ./downloads -type f -name "loki-wallet-rpc*" -exec cp '{}' ./bin \;
|
find ./downloads -type f -name "oxen-wallet-rpc*" -exec cp '{}' ./bin \;
|
||||||
shell: bash
|
shell: bash
|
||||||
|
|
||||||
- name: Verify binaries
|
- name: Verify binaries
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
name: Loki Electron Wallet With Dev Binaries
|
name: Oxen Electron Wallet With Dev Binaries
|
||||||
|
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
|
@ -29,7 +29,7 @@ jobs:
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: npm install
|
run: npm install
|
||||||
|
|
||||||
- name: Download lokid binaries
|
- name: Download oxend binaries
|
||||||
run: ./download-dev-bins.sh
|
run: ./download-dev-bins.sh
|
||||||
env:
|
env:
|
||||||
OS: ${{ runner.os }}
|
OS: ${{ runner.os }}
|
||||||
|
@ -48,10 +48,10 @@ jobs:
|
||||||
shell: bash
|
shell: bash
|
||||||
working-directory: ./downloads
|
working-directory: ./downloads
|
||||||
|
|
||||||
- name: Move lokid binaries
|
- name: Move oxend binaries
|
||||||
run: |
|
run: |
|
||||||
find ./downloads -type f -name "lokid*" -exec cp '{}' ./bin \;
|
find ./downloads -type f -name "oxend*" -exec cp '{}' ./bin \;
|
||||||
find ./downloads -type f -name "loki-wallet-rpc*" -exec cp '{}' ./bin \;
|
find ./downloads -type f -name "oxen-wallet-rpc*" -exec cp '{}' ./bin \;
|
||||||
shell: bash
|
shell: bash
|
||||||
|
|
||||||
- name: Verify binaries
|
- name: Verify binaries
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
name: Loki Electron Wallet Release
|
name: Oxen Electron Wallet Release
|
||||||
|
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
|
@ -29,7 +29,7 @@ jobs:
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: npm install
|
run: npm install
|
||||||
|
|
||||||
- name: Download lokid binaries
|
- name: Download oxend binaries
|
||||||
run: ./download-asset.sh
|
run: ./download-asset.sh
|
||||||
env:
|
env:
|
||||||
OS: ${{ runner.os }}
|
OS: ${{ runner.os }}
|
||||||
|
@ -49,10 +49,10 @@ jobs:
|
||||||
shell: bash
|
shell: bash
|
||||||
working-directory: ./downloads
|
working-directory: ./downloads
|
||||||
|
|
||||||
- name: Move lokid binaries
|
- name: Move oxend binaries
|
||||||
run: |
|
run: |
|
||||||
find ./downloads -type f -name "lokid*" -exec cp '{}' ./bin \;
|
find ./downloads -type f -name "oxend*" -exec cp '{}' ./bin \;
|
||||||
find ./downloads -type f -name "loki-wallet-rpc*" -exec cp '{}' ./bin \;
|
find ./downloads -type f -name "oxen-wallet-rpc*" -exec cp '{}' ./bin \;
|
||||||
shell: bash
|
shell: bash
|
||||||
|
|
||||||
- name: Verify binaries
|
- name: Verify binaries
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
# Building
|
# 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
|
## Mac OS
|
||||||
|
|
||||||
|
|
22
README.md
22
README.md
|
@ -1,34 +1,34 @@
|
||||||
# Loki Electron GUI Wallet
|
# Oxen Electron GUI Wallet
|
||||||
|
|
||||||
### Introduction
|
### 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.
|
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://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.
|
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">
|
<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>
|
</p>
|
||||||
|
|
||||||
### About this project
|
### 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.
|
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
|
#### Pre-requisites
|
||||||
|
|
||||||
- Download latest [Lokid](https://github.com/loki-project/loki/releases/latest)
|
- Download latest [oxend](https://github.com/oxen-project/oxen/releases/latest)
|
||||||
- Extract the lokid binaries to a folder
|
- Extract the oxend binaries to a folder
|
||||||
|
|
||||||
#### Commands
|
#### Commands
|
||||||
|
|
||||||
```
|
```
|
||||||
nvm use 14.11.0
|
nvm use 14.11.0
|
||||||
npm install -g @quasar/cli
|
npm install -g @quasar/cli
|
||||||
git clone https://github.com/loki-project/loki-electron-gui-wallet
|
git clone https://github.com/oxen-project/oxen-electron-gui-wallet
|
||||||
cd loki-electron-gui-wallet
|
cd oxen-electron-gui-wallet
|
||||||
cp path_to_lokid_binaries/lokid bin/
|
cp path_to_oxend_binaries/oxend bin/
|
||||||
cp path_to_lokid_binaries/loki-wallet-rpc bin/
|
cp path_to_oxend_binaries/oxen-wallet-rpc bin/
|
||||||
npm install
|
npm install
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
|
@ -22,15 +22,21 @@ exports.default = async function notarizing(context) {
|
||||||
log("Notarizing mac application");
|
log("Notarizing mac application");
|
||||||
|
|
||||||
const appName = context.packager.appInfo.productFilename;
|
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)) {
|
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;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const options = {
|
const options = {
|
||||||
appBundleId: "com.loki-project.electron-wallet",
|
appBundleId: "com.oxen.electron-wallet",
|
||||||
appPath: `${appOutDir}/${appName}.app`,
|
appPath: `${appOutDir}/${appName}.app`,
|
||||||
appleId: SIGNING_APPLE_ID,
|
appleId: SIGNING_APPLE_ID,
|
||||||
appleIdPassword: SIGNING_APP_PASSWORD
|
appleIdPassword: SIGNING_APP_PASSWORD
|
||||||
|
|
|
@ -29,4 +29,4 @@ curl -sL --fail \
|
||||||
-o "${RENAME}" \
|
-o "${RENAME}" \
|
||||||
"$ASSET_URL"
|
"$ASSET_URL"
|
||||||
|
|
||||||
echo "Loki binaries downloaded"
|
echo "Oxen binaries downloaded"
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "loki-electron-wallet",
|
"name": "loki-electron-wallet",
|
||||||
"version": "1.5.0",
|
"version": "1.5.4",
|
||||||
"lockfileVersion": 1,
|
"lockfileVersion": 1,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
|
14
package.json
14
package.json
|
@ -1,16 +1,16 @@
|
||||||
{
|
{
|
||||||
"name": "loki-electron-wallet",
|
"name": "oxen-electron-wallet",
|
||||||
"version": "1.5.4",
|
"version": "1.5.5",
|
||||||
"description": "Modern GUI interface for Loki Currency",
|
"description": "Modern GUI interface for Oxen Currency",
|
||||||
"productName": "Loki Electron Wallet",
|
"productName": "Oxen Electron Wallet",
|
||||||
"repository": {
|
"repository": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/loki-project/loki-electron-gui-wallet.git"
|
"url": "https://github.com/loki-project/loki-electron-gui-wallet.git"
|
||||||
},
|
},
|
||||||
"cordovaId": "com.lokinetwork.wallet",
|
"cordovaId": "com.oxen.wallet",
|
||||||
"author": {
|
"author": {
|
||||||
"name": "Loki Project",
|
"name": "Oxen",
|
||||||
"email": "team@loki.network"
|
"email": "oxen@oxen.io"
|
||||||
},
|
},
|
||||||
"private": true,
|
"private": true,
|
||||||
"scripts": {
|
"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: {
|
builder: {
|
||||||
// https://www.electron.build/configuration/configuration
|
// https://www.electron.build/configuration/configuration
|
||||||
|
|
||||||
appId: "com.loki-project.electron-wallet",
|
appId: "com.oxen.electron-wallet",
|
||||||
productName: "Loki Electron Wallet",
|
productName: "Oxen Electron Wallet",
|
||||||
copyright:
|
copyright: "Copyright © 2018-2021 Oxen, 2018 Ryo Currency Project",
|
||||||
"Copyright © 2018-2020 Loki Project, 2018 Ryo Currency Project",
|
|
||||||
afterSign: "build/notarize.js",
|
afterSign: "build/notarize.js",
|
||||||
artifactName: "loki-electron-wallet-${version}-${os}.${ext}",
|
artifactName: "oxen-electron-wallet-${version}-${os}.${ext}",
|
||||||
publish: "github",
|
publish: "github",
|
||||||
|
|
||||||
linux: {
|
linux: {
|
||||||
target: ["AppImage", "deb"],
|
target: ["AppImage", "deb"],
|
||||||
icon: "src-electron/icons/icon_512x512.png",
|
icon: "src-electron/icon.png",
|
||||||
category: "Finance"
|
category: "Finance"
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -184,7 +183,7 @@ module.exports = function() {
|
||||||
},
|
},
|
||||||
|
|
||||||
dmg: {
|
dmg: {
|
||||||
background: "src-electron/build/loki-dmg.tiff",
|
background: "src-electron/build/oxen-dmg.tiff",
|
||||||
sign: false
|
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
|
// 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 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);
|
const appUpdateConfigPath = path.join(basePath, updateFile);
|
||||||
|
|
||||||
return new Promise(resolve => {
|
return new Promise(resolve => {
|
||||||
|
@ -96,8 +99,8 @@ async function showUpdateDialog(mainWindow) {
|
||||||
const options = {
|
const options = {
|
||||||
type: "info",
|
type: "info",
|
||||||
buttons: ["Restart Wallet", "Later"],
|
buttons: ["Restart Wallet", "Later"],
|
||||||
title: "Loki Electron Wallet update available",
|
title: "Oxen Electron Wallet update available",
|
||||||
message: "There is a new version of Loki Electron Wallet available.",
|
message: "There is a new version of Oxen Electron Wallet available.",
|
||||||
detail: "Press Restart Wallet to apply the update",
|
detail: "Press Restart Wallet to apply the update",
|
||||||
defaultId: LATER_BUTTON,
|
defaultId: LATER_BUTTON,
|
||||||
cancelId: RESTART_BUTTON
|
cancelId: RESTART_BUTTON
|
||||||
|
@ -115,7 +118,7 @@ async function showCannotUpdateDialog(mainWindow) {
|
||||||
buttons: ["Ok"],
|
buttons: ["Ok"],
|
||||||
title: "Cannot update",
|
title: "Cannot update",
|
||||||
message:
|
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 => {
|
return new Promise(resolve => {
|
||||||
|
|
|
@ -57,7 +57,7 @@ function createWindow() {
|
||||||
height: mainWindowState.height,
|
height: mainWindowState.height,
|
||||||
minWidth: 640,
|
minWidth: 640,
|
||||||
minHeight: 480,
|
minHeight: 480,
|
||||||
icon: require("path").join(__statics, "icon_512x512.png"),
|
icon: require("path").join(__statics, "icon.png"),
|
||||||
title,
|
title,
|
||||||
webPreferences: {
|
webPreferences: {
|
||||||
nodeIntegration: true,
|
nodeIntegration: true,
|
||||||
|
@ -137,7 +137,7 @@ function createWindow() {
|
||||||
mainWindow,
|
mainWindow,
|
||||||
{
|
{
|
||||||
title: "Startup error",
|
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",
|
type: "error",
|
||||||
buttons: ["ok"]
|
buttons: ["ok"]
|
||||||
},
|
},
|
||||||
|
|
|
@ -33,7 +33,7 @@ let template = [
|
||||||
{
|
{
|
||||||
label: "Learn More",
|
label: "Learn More",
|
||||||
click() {
|
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") {
|
if (process.platform === "darwin") {
|
||||||
template.unshift({
|
template.unshift({
|
||||||
label: "Loki Electron Wallet",
|
label: "Oxen Electron Wallet",
|
||||||
submenu: [
|
submenu: [
|
||||||
{ role: "about" },
|
{ role: "about" },
|
||||||
{ type: "separator" },
|
{ type: "separator" },
|
||||||
|
|
|
@ -34,16 +34,27 @@ export class Backend {
|
||||||
}
|
}
|
||||||
|
|
||||||
init(config) {
|
init(config) {
|
||||||
|
let configDir;
|
||||||
|
let legacyLokiConfigDir;
|
||||||
if (os.platform() === "win32") {
|
if (os.platform() === "win32") {
|
||||||
this.config_dir = "C:\\ProgramData\\loki";
|
configDir = "C:\\ProgramData\\oxen";
|
||||||
this.wallet_dir = `${os.homedir()}\\Documents\\Loki`;
|
legacyLokiConfigDir = "C:\\ProgramData\\loki\\";
|
||||||
|
this.wallet_dir = `${os.homedir()}\\Documents\\Oxen`;
|
||||||
} else {
|
} else {
|
||||||
this.config_dir = path.join(os.homedir(), ".loki");
|
configDir = path.join(os.homedir(), ".oxen");
|
||||||
this.wallet_dir = path.join(os.homedir(), "Loki");
|
legacyLokiConfigDir = path.join(os.homedir(), ".loki/");
|
||||||
|
this.wallet_dir = path.join(os.homedir(), "Oxen");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!fs.existsSync(this.config_dir)) {
|
// if the user has used loki before, just keep the same stuff
|
||||||
fs.mkdirpSync(this.config_dir);
|
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"))) {
|
if (!fs.existsSync(path.join(this.config_dir, "gui"))) {
|
||||||
|
|
|
@ -29,25 +29,25 @@ export class Daemon {
|
||||||
checkVersion() {
|
checkVersion() {
|
||||||
return new Promise(resolve => {
|
return new Promise(resolve => {
|
||||||
if (process.platform === "win32") {
|
if (process.platform === "win32") {
|
||||||
let lokid_path = path.join(__ryo_bin, "lokid.exe");
|
let oxend_path = path.join(__ryo_bin, "oxend.exe");
|
||||||
let lokid_version_cmd = `"${lokid_path}" --version`;
|
let oxend_version_cmd = `"${oxend_path}" --version`;
|
||||||
if (!fs.existsSync(lokid_path)) {
|
if (!fs.existsSync(oxend_path)) {
|
||||||
resolve(false);
|
resolve(false);
|
||||||
}
|
}
|
||||||
child_process.exec(lokid_version_cmd, (error, stdout) => {
|
child_process.exec(oxend_version_cmd, (error, stdout) => {
|
||||||
if (error) {
|
if (error) {
|
||||||
resolve(false);
|
resolve(false);
|
||||||
}
|
}
|
||||||
resolve(stdout);
|
resolve(stdout);
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
let lokid_path = path.join(__ryo_bin, "lokid");
|
let oxend_path = path.join(__ryo_bin, "oxend");
|
||||||
let lokid_version_cmd = `"${lokid_path}" --version`;
|
let oxend_version_cmd = `"${oxend_path}" --version`;
|
||||||
if (!fs.existsSync(lokid_path)) {
|
if (!fs.existsSync(oxend_path)) {
|
||||||
resolve(false);
|
resolve(false);
|
||||||
}
|
}
|
||||||
child_process.exec(
|
child_process.exec(
|
||||||
lokid_version_cmd,
|
oxend_version_cmd,
|
||||||
{ detached: true },
|
{ detached: true },
|
||||||
(error, stdout) => {
|
(error, stdout) => {
|
||||||
if (error) {
|
if (error) {
|
||||||
|
@ -148,7 +148,7 @@ export class Daemon {
|
||||||
args.push("--stagenet");
|
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") {
|
if (daemon.rpc_bind_ip !== "127.0.0.1") {
|
||||||
args.push("--confirm-external-bind");
|
args.push("--confirm-external-bind");
|
||||||
}
|
}
|
||||||
|
@ -173,12 +173,12 @@ export class Daemon {
|
||||||
if (status === "closed") {
|
if (status === "closed") {
|
||||||
if (process.platform === "win32") {
|
if (process.platform === "win32") {
|
||||||
this.daemonProcess = child_process.spawn(
|
this.daemonProcess = child_process.spawn(
|
||||||
path.join(__ryo_bin, "lokid.exe"),
|
path.join(__ryo_bin, "oxend.exe"),
|
||||||
args
|
args
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
this.daemonProcess = child_process.spawn(
|
this.daemonProcess = child_process.spawn(
|
||||||
path.join(__ryo_bin, "lokid"),
|
path.join(__ryo_bin, "oxend"),
|
||||||
args,
|
args,
|
||||||
{
|
{
|
||||||
detached: true
|
detached: true
|
||||||
|
|
|
@ -137,8 +137,8 @@ export class WalletRPC {
|
||||||
|
|
||||||
const rpcExecutable =
|
const rpcExecutable =
|
||||||
process.platform === "win32"
|
process.platform === "win32"
|
||||||
? "loki-wallet-rpc.exe"
|
? "oxen-wallet-rpc.exe"
|
||||||
: "loki-wallet-rpc";
|
: "oxen-wallet-rpc";
|
||||||
// eslint-disable-next-line no-undef
|
// eslint-disable-next-line no-undef
|
||||||
const rpcPath = path.join(__ryo_bin, rpcExecutable);
|
const rpcPath = path.join(__ryo_bin, rpcExecutable);
|
||||||
|
|
||||||
|
@ -146,7 +146,7 @@ export class WalletRPC {
|
||||||
if (!fs.existsSync(rpcPath)) {
|
if (!fs.existsSync(rpcPath)) {
|
||||||
reject(
|
reject(
|
||||||
new Error(
|
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;
|
return;
|
||||||
|
@ -286,7 +286,7 @@ export class WalletRPC {
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "restore_view_wallet":
|
case "restore_view_wallet":
|
||||||
// TODO: Decide if we want this for loki
|
// TODO: Decide if we want this for Oxen
|
||||||
this.restoreViewWallet(
|
this.restoreViewWallet(
|
||||||
params.name,
|
params.name,
|
||||||
params.password,
|
params.password,
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
<q-dialog v-model="isVisible" maximized class="address-book-details">
|
<q-dialog v-model="isVisible" maximized class="address-book-details">
|
||||||
<q-layout v-if="mode == 'edit' || mode == 'new'">
|
<q-layout v-if="mode == 'edit' || mode == 'new'">
|
||||||
<q-header>
|
<q-header>
|
||||||
<q-toolbar color="dark" inverted>
|
<q-toolbar inverted>
|
||||||
<q-btn flat round dense icon="reply" @click="close()" />
|
<q-btn flat round dense icon="reply" @click="close()" />
|
||||||
<q-toolbar-title v-if="mode == 'new'">
|
<q-toolbar-title v-if="mode == 'new'">
|
||||||
{{ $t("strings.addAddressBookEntry") }}
|
{{ $t("strings.addAddressBookEntry") }}
|
||||||
|
@ -26,16 +26,15 @@
|
||||||
/>
|
/>
|
||||||
</q-toolbar>
|
</q-toolbar>
|
||||||
</q-header>
|
</q-header>
|
||||||
<q-page-container>
|
<q-page-container class="detail-page">
|
||||||
<div class="address-book-modal q-mx-md">
|
<div class="address-book-modal q-mx-md">
|
||||||
<LokiField
|
<OxenField
|
||||||
:label="$t('fieldLabels.address')"
|
:label="$t('fieldLabels.address')"
|
||||||
:error="$v.newEntry.address.$error"
|
:error="$v.newEntry.address.$error"
|
||||||
>
|
>
|
||||||
<q-input
|
<q-input
|
||||||
v-model.trim="newEntry.address"
|
v-model.trim="newEntry.address"
|
||||||
:placeholder="address_placeholder"
|
:placeholder="address_placeholder"
|
||||||
:dark="theme == 'dark'"
|
|
||||||
borderless
|
borderless
|
||||||
dense
|
dense
|
||||||
@blur="$v.newEntry.address.$touch"
|
@blur="$v.newEntry.address.$touch"
|
||||||
|
@ -47,26 +46,20 @@
|
||||||
:icon="newEntry.starred ? 'star' : 'star_border'"
|
:icon="newEntry.starred ? 'star' : 'star_border'"
|
||||||
@click="updateStarred"
|
@click="updateStarred"
|
||||||
/>
|
/>
|
||||||
</LokiField>
|
</OxenField>
|
||||||
<LokiField :label="$t('fieldLabels.name')">
|
<OxenField :label="$t('fieldLabels.name')">
|
||||||
<q-input
|
<q-input v-model.trim="newEntry.name" borderless dense />
|
||||||
v-model.trim="newEntry.name"
|
</OxenField>
|
||||||
:dark="theme == 'dark'"
|
<OxenField :label="$t('fieldLabels.notes')" optional>
|
||||||
borderless
|
|
||||||
dense
|
|
||||||
/>
|
|
||||||
</LokiField>
|
|
||||||
<LokiField :label="$t('fieldLabels.notes')" optional>
|
|
||||||
<q-input
|
<q-input
|
||||||
v-model="newEntry.description"
|
v-model="newEntry.description"
|
||||||
:placeholder="$t('placeholders.additionalNotes')"
|
:placeholder="$t('placeholders.additionalNotes')"
|
||||||
type="textarea"
|
type="textarea"
|
||||||
class="full-width text-area-loki"
|
class="full-width text-area-oxen"
|
||||||
:dark="theme == 'dark'"
|
|
||||||
borderless
|
borderless
|
||||||
dense
|
dense
|
||||||
/>
|
/>
|
||||||
</LokiField>
|
</OxenField>
|
||||||
|
|
||||||
<q-btn
|
<q-btn
|
||||||
v-if="mode == 'edit'"
|
v-if="mode == 'edit'"
|
||||||
|
@ -81,7 +74,7 @@
|
||||||
|
|
||||||
<q-layout v-else>
|
<q-layout v-else>
|
||||||
<q-header>
|
<q-header>
|
||||||
<q-toolbar color="dark" inverted>
|
<q-toolbar inverted>
|
||||||
<q-btn flat round dense icon="reply" @click="close()" />
|
<q-btn flat round dense icon="reply" @click="close()" />
|
||||||
<q-toolbar-title>
|
<q-toolbar-title>
|
||||||
{{ $t("strings.addressBookDetails") }}
|
{{ $t("strings.addressBookDetails") }}
|
||||||
|
@ -106,6 +99,7 @@
|
||||||
<div class="layout-padding">
|
<div class="layout-padding">
|
||||||
<template v-if="entry != null">
|
<template v-if="entry != null">
|
||||||
<AddressHeader
|
<AddressHeader
|
||||||
|
class="address-details"
|
||||||
:address="entry.address"
|
:address="entry.address"
|
||||||
:title="entry.name"
|
:title="entry.name"
|
||||||
:extra="
|
:extra="
|
||||||
|
@ -140,7 +134,7 @@
|
||||||
import { mapState } from "vuex";
|
import { mapState } from "vuex";
|
||||||
import AddressHeader from "components/address_header";
|
import AddressHeader from "components/address_header";
|
||||||
import TxList from "components/tx_list";
|
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 { address } from "src/validators/common";
|
||||||
import { required } from "vuelidate/lib/validators";
|
import { required } from "vuelidate/lib/validators";
|
||||||
export default {
|
export default {
|
||||||
|
@ -148,7 +142,7 @@ export default {
|
||||||
components: {
|
components: {
|
||||||
AddressHeader,
|
AddressHeader,
|
||||||
TxList,
|
TxList,
|
||||||
LokiField
|
OxenField
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
|
@ -256,9 +250,12 @@ export default {
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="scss">
|
<style lang="scss">
|
||||||
|
.address-details {
|
||||||
|
color: #1f1c47;
|
||||||
|
}
|
||||||
.address-book-details {
|
.address-book-details {
|
||||||
.address-book-modal {
|
.address-book-modal {
|
||||||
> .loki-field {
|
> .oxen-field {
|
||||||
margin-top: 16px;
|
margin-top: 16px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -7,11 +7,20 @@
|
||||||
<q-toolbar-title>
|
<q-toolbar-title>
|
||||||
{{ $t("titles.addressDetails") }}
|
{{ $t("titles.addressDetails") }}
|
||||||
</q-toolbar-title>
|
</q-toolbar-title>
|
||||||
<q-btn flat :label="$t('buttons.showQRCode')" @click="isQRCodeVisible = true" />
|
<q-btn
|
||||||
<q-btn class="q-ml-sm" color="primary" :label="$t('buttons.copyAddress')" @click="copyAddress()" />
|
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-toolbar>
|
||||||
</q-header>
|
</q-header>
|
||||||
<q-page-container>
|
<q-page-container class="detail-page">
|
||||||
<div class="layout-padding">
|
<div class="layout-padding">
|
||||||
<template v-if="address != null">
|
<template v-if="address != null">
|
||||||
<AddressHeader
|
<AddressHeader
|
||||||
|
@ -26,10 +35,10 @@
|
||||||
<div class="infoBox">
|
<div class="infoBox">
|
||||||
<div class="infoBoxContent">
|
<div class="infoBoxContent">
|
||||||
<div class="text">
|
<div class="text">
|
||||||
<span>{{ $t("strings.lokiBalance") }}</span>
|
<span>{{ $t("strings.oxenBalance") }}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="value">
|
<div class="value">
|
||||||
<span><FormatLoki :amount="address.balance"/></span>
|
<span><FormatOxen :amount="address.balance"/></span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -37,10 +46,12 @@
|
||||||
<div class="infoBox">
|
<div class="infoBox">
|
||||||
<div class="infoBoxContent">
|
<div class="infoBoxContent">
|
||||||
<div class="text">
|
<div class="text">
|
||||||
<span>{{ $t("strings.lokiUnlockedBalance") }}</span>
|
<span>{{ $t("strings.oxenUnlockedBalance") }}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="value">
|
<div class="value">
|
||||||
<span><FormatLoki :amount="address.unlocked_balance"/></span>
|
<span
|
||||||
|
><FormatOxen :amount="address.unlocked_balance"
|
||||||
|
/></span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -62,7 +73,7 @@
|
||||||
<div class="infoBox">
|
<div class="infoBox">
|
||||||
<div class="infoBoxContent">
|
<div class="infoBoxContent">
|
||||||
<div class="text">
|
<div class="text">
|
||||||
<span>{{ $t("strings.lokiBalance") }}</span>
|
<span>{{ $t("strings.oxenBalance") }}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="value"><span>N/A</span></div>
|
<div class="value"><span>N/A</span></div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -71,7 +82,7 @@
|
||||||
<div class="infoBox">
|
<div class="infoBox">
|
||||||
<div class="infoBoxContent">
|
<div class="infoBoxContent">
|
||||||
<div class="text">
|
<div class="text">
|
||||||
<span>{{ $t("strings.lokiUnlockedBalance") }}</span>
|
<span>{{ $t("strings.oxenUnlockedBalance") }}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="value"><span>N/A</span></div>
|
<div class="value"><span>N/A</span></div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -91,7 +102,9 @@
|
||||||
<div class="q-mt-sm">
|
<div class="q-mt-sm">
|
||||||
<div class="non-selectable recent-transactions-wrapper">
|
<div class="non-selectable recent-transactions-wrapper">
|
||||||
<q-icon name="history" size="24px" />
|
<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>
|
||||||
|
|
||||||
<div style="margin: 12px -16px;">
|
<div style="margin: 12px -16px;">
|
||||||
|
@ -108,12 +121,21 @@
|
||||||
</q-page-container>
|
</q-page-container>
|
||||||
</q-layout>
|
</q-layout>
|
||||||
<template v-if="address != null">
|
<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">
|
<q-card class="qr-code-card">
|
||||||
<div class="text-center q-mb-sm q-pa-md" style="background: white;">
|
<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-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 v-close-popup @click.native="copyQR()">
|
||||||
<q-item-label :label="$t('menuItems.copyQR')" />
|
<q-item-label :label="$t('menuItems.copyQR')" />
|
||||||
</q-item>
|
</q-item>
|
||||||
|
@ -124,7 +146,11 @@
|
||||||
</q-menu>
|
</q-menu>
|
||||||
</div>
|
</div>
|
||||||
<q-card-actions>
|
<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-actions>
|
||||||
</q-card>
|
</q-card>
|
||||||
</q-dialog>
|
</q-dialog>
|
||||||
|
@ -136,7 +162,7 @@
|
||||||
import { mapState } from "vuex";
|
import { mapState } from "vuex";
|
||||||
const { clipboard, nativeImage } = require("electron");
|
const { clipboard, nativeImage } = require("electron");
|
||||||
import AddressHeader from "components/address_header";
|
import AddressHeader from "components/address_header";
|
||||||
import FormatLoki from "components/format_loki";
|
import FormatOxen from "components/format_oxen";
|
||||||
import QrcodeVue from "qrcode.vue";
|
import QrcodeVue from "qrcode.vue";
|
||||||
import TxList from "components/tx_list";
|
import TxList from "components/tx_list";
|
||||||
export default {
|
export default {
|
||||||
|
@ -144,7 +170,7 @@ export default {
|
||||||
components: {
|
components: {
|
||||||
AddressHeader,
|
AddressHeader,
|
||||||
TxList,
|
TxList,
|
||||||
FormatLoki,
|
FormatOxen,
|
||||||
QrcodeVue
|
QrcodeVue
|
||||||
},
|
},
|
||||||
data() {
|
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 {
|
return {
|
||||||
title,
|
title,
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
<template>
|
<template>
|
||||||
<div>
|
<div class="address-header-div">
|
||||||
<q-item-section class="self-start">
|
<q-item-section class="self-start">
|
||||||
<q-item-label class="title non-selectable">{{ title }}</q-item-label>
|
<q-item-label class="title non-selectable">{{ title }}</q-item-label>
|
||||||
<q-item-label class="row">
|
<q-item-label class="row">
|
||||||
|
@ -87,17 +87,18 @@ export default {
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="scss">
|
<style lang="scss">
|
||||||
.title {
|
.address-header-div {
|
||||||
font-size: 18px;
|
.title {
|
||||||
margin-bottom: 4px;
|
font-size: 20px;
|
||||||
color: white;
|
color: #1f1c47;
|
||||||
}
|
}
|
||||||
|
|
||||||
.extra {
|
.extra {
|
||||||
margin-top: 8px;
|
color: #1f1c47;
|
||||||
color: white;
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// is this even used?
|
||||||
.address-header {
|
.address-header {
|
||||||
padding: 0;
|
padding: 0;
|
||||||
img {
|
img {
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
<template>
|
<template>
|
||||||
<div class="check-transaction">
|
<div class="check-transaction">
|
||||||
<div class="q-pa-md">
|
<div class="q-pa-md">
|
||||||
<div class="q-mb-lg description">
|
<div class="q-mb-lg tab-desc">
|
||||||
{{ $t("strings.checkTransaction.description") }}
|
{{ $t("strings.checkTransaction.description") }}
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<LokiField
|
<OxenField
|
||||||
:label="$t('fieldLabels.transactionId')"
|
:label="$t('fieldLabels.transactionId')"
|
||||||
:error="$v.txid.$error"
|
:error="$v.txid.$error"
|
||||||
>
|
>
|
||||||
|
@ -17,8 +17,8 @@
|
||||||
dense
|
dense
|
||||||
@blur="$v.txid.$touch"
|
@blur="$v.txid.$touch"
|
||||||
/>
|
/>
|
||||||
</LokiField>
|
</OxenField>
|
||||||
<LokiField
|
<OxenField
|
||||||
class="q-mt-md"
|
class="q-mt-md"
|
||||||
:label="$t('fieldLabels.address')"
|
:label="$t('fieldLabels.address')"
|
||||||
:error="$v.address.$error"
|
:error="$v.address.$error"
|
||||||
|
@ -32,8 +32,8 @@
|
||||||
dense
|
dense
|
||||||
@blur="$v.address.$touch"
|
@blur="$v.address.$touch"
|
||||||
/>
|
/>
|
||||||
</LokiField>
|
</OxenField>
|
||||||
<LokiField class="q-mt-md" :label="$t('fieldLabels.message')" optional>
|
<OxenField class="q-mt-md" :label="$t('fieldLabels.message')" optional>
|
||||||
<q-input
|
<q-input
|
||||||
v-model.trim="message"
|
v-model.trim="message"
|
||||||
:dark="theme == 'dark'"
|
:dark="theme == 'dark'"
|
||||||
|
@ -41,8 +41,8 @@
|
||||||
borderless
|
borderless
|
||||||
dense
|
dense
|
||||||
/>
|
/>
|
||||||
</LokiField>
|
</OxenField>
|
||||||
<LokiField
|
<OxenField
|
||||||
class="q-mt-md"
|
class="q-mt-md"
|
||||||
:label="$t('fieldLabels.signature')"
|
:label="$t('fieldLabels.signature')"
|
||||||
:error="$v.signature.$error"
|
:error="$v.signature.$error"
|
||||||
|
@ -54,12 +54,12 @@
|
||||||
borderless
|
borderless
|
||||||
dense
|
dense
|
||||||
/>
|
/>
|
||||||
</LokiField>
|
</OxenField>
|
||||||
<div class="submit-button">
|
<div class="submit-button">
|
||||||
<q-btn color="primary" :label="$t('buttons.check')" @click="check" />
|
<q-btn color="primary" :label="$t('buttons.check')" @click="check" />
|
||||||
<q-btn
|
<q-btn
|
||||||
v-if="canClear"
|
v-if="canClear"
|
||||||
color="secondary"
|
color="secondsary="
|
||||||
:label="$t('buttons.clear')"
|
:label="$t('buttons.clear')"
|
||||||
@click="clear"
|
@click="clear"
|
||||||
/>
|
/>
|
||||||
|
@ -83,7 +83,7 @@
|
||||||
{{ $t("strings.checkTransaction.infoTitles.received") }}
|
{{ $t("strings.checkTransaction.infoTitles.received") }}
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<FormatLoki :amount="status.state.received" raw-value />
|
<FormatOxen :amount="status.state.received" raw-value />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div v-if="status.state.in_pool != null" class="q-mb-sm">
|
<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 { required } from "vuelidate/lib/validators";
|
||||||
import { address } from "src/validators/common";
|
import { address } from "src/validators/common";
|
||||||
import { i18n } from "boot/i18n";
|
import { i18n } from "boot/i18n";
|
||||||
import LokiField from "components/loki_field";
|
import OxenField from "components/oxen_field";
|
||||||
import FormatLoki from "components/format_loki";
|
import FormatOxen from "components/format_oxen";
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: "CheckTransaction",
|
name: "CheckTransaction",
|
||||||
components: {
|
components: {
|
||||||
LokiField,
|
OxenField,
|
||||||
FormatLoki
|
FormatOxen
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
<template>
|
<template>
|
||||||
<div class="prove-transaction">
|
<div class="prove-transaction">
|
||||||
<div class="q-pa-md">
|
<div class="q-pa-md">
|
||||||
<div class="q-mb-lg description">
|
<div class="q-mb-lg tab-desc">
|
||||||
{{ $t("strings.proveTransactionDescription") }}
|
{{ $t("strings.proveTransactionDescription") }}
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<LokiField
|
<OxenField
|
||||||
:label="$t('fieldLabels.transactionId')"
|
:label="$t('fieldLabels.transactionId')"
|
||||||
:error="$v.txid.$error"
|
:error="$v.txid.$error"
|
||||||
>
|
>
|
||||||
|
@ -17,8 +17,8 @@
|
||||||
dense
|
dense
|
||||||
@blur="$v.txid.$touch"
|
@blur="$v.txid.$touch"
|
||||||
/>
|
/>
|
||||||
</LokiField>
|
</OxenField>
|
||||||
<LokiField
|
<OxenField
|
||||||
class="q-mt-md"
|
class="q-mt-md"
|
||||||
:label="$t('fieldLabels.address')"
|
:label="$t('fieldLabels.address')"
|
||||||
:error="$v.address.$error"
|
:error="$v.address.$error"
|
||||||
|
@ -32,8 +32,8 @@
|
||||||
dense
|
dense
|
||||||
@blur="$v.address.$touch"
|
@blur="$v.address.$touch"
|
||||||
/>
|
/>
|
||||||
</LokiField>
|
</OxenField>
|
||||||
<LokiField class="q-mt-md" :label="$t('fieldLabels.message')" optional>
|
<OxenField class="q-mt-md" :label="$t('fieldLabels.message')" optional>
|
||||||
<q-input
|
<q-input
|
||||||
v-model.trim="message"
|
v-model.trim="message"
|
||||||
:dark="theme == 'dark'"
|
:dark="theme == 'dark'"
|
||||||
|
@ -41,7 +41,7 @@
|
||||||
borderless
|
borderless
|
||||||
dense
|
dense
|
||||||
/>
|
/>
|
||||||
</LokiField>
|
</OxenField>
|
||||||
<div class="buttons submit-button">
|
<div class="buttons submit-button">
|
||||||
<q-btn
|
<q-btn
|
||||||
color="primary"
|
color="primary"
|
||||||
|
@ -50,7 +50,7 @@
|
||||||
/>
|
/>
|
||||||
<q-btn
|
<q-btn
|
||||||
v-if="canClear"
|
v-if="canClear"
|
||||||
color="secondary"
|
color="accent"
|
||||||
:label="$t('buttons.clear')"
|
:label="$t('buttons.clear')"
|
||||||
@click="clear"
|
@click="clear"
|
||||||
/>
|
/>
|
||||||
|
@ -79,13 +79,13 @@
|
||||||
import { mapState } from "vuex";
|
import { mapState } from "vuex";
|
||||||
import { required } from "vuelidate/lib/validators";
|
import { required } from "vuelidate/lib/validators";
|
||||||
import { address } from "src/validators/common";
|
import { address } from "src/validators/common";
|
||||||
import LokiField from "components/loki_field";
|
import OxenField from "components/oxen_field";
|
||||||
import { clipboard } from "electron";
|
import { clipboard } from "electron";
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: "ProveTransaction",
|
name: "ProveTransaction",
|
||||||
components: {
|
components: {
|
||||||
LokiField
|
OxenField
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
|
|
|
@ -1,16 +1,16 @@
|
||||||
<template>
|
<template>
|
||||||
<div class="sign-and-verify">
|
<div class="sign-and-verify">
|
||||||
<div class="q-pa-md">
|
<div class="q-pa-md">
|
||||||
<div class="q-mb-lg description">
|
<div class="q-mb-lg tab-desc">
|
||||||
{{ $t("strings.signAndVerifyDescription") }}
|
{{ $t("strings.signAndVerifyDescription") }}
|
||||||
</div>
|
</div>
|
||||||
<div v-if="is_view_only">
|
<div v-if="is_view_only">
|
||||||
{{ $t("strings.cannotSign") }}
|
{{ $t("strings.cannotSign") }}
|
||||||
</div>
|
</div>
|
||||||
<div v-else>
|
<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">
|
<div class="row justify-between items-end">
|
||||||
<LokiField :label="$t('fieldLabels.data')">
|
<OxenField :label="$t('fieldLabels.data')">
|
||||||
<q-input
|
<q-input
|
||||||
v-model.trim="toSign"
|
v-model.trim="toSign"
|
||||||
:dark="theme == 'dark'"
|
:dark="theme == 'dark'"
|
||||||
|
@ -18,7 +18,7 @@
|
||||||
dense
|
dense
|
||||||
:placeholder="$t('placeholders.dataToSign')"
|
:placeholder="$t('placeholders.dataToSign')"
|
||||||
/>
|
/>
|
||||||
</LokiField>
|
</OxenField>
|
||||||
<div class="btn-wrapper q-ml-md q-py-sm">
|
<div class="btn-wrapper q-ml-md q-py-sm">
|
||||||
<q-btn
|
<q-btn
|
||||||
color="primary"
|
color="primary"
|
||||||
|
@ -30,11 +30,11 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="verify-heading text-h6">
|
<div class="verify-heading text-h6 header">
|
||||||
{{ $t("titles.advanced.verify") }}
|
{{ $t("titles.advanced.verify") }}
|
||||||
</div>
|
</div>
|
||||||
<div class="justify-between items-end">
|
<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
|
<q-input
|
||||||
v-model.trim="signatureToVerify"
|
v-model.trim="signatureToVerify"
|
||||||
:dark="theme == 'dark'"
|
:dark="theme == 'dark'"
|
||||||
|
@ -42,8 +42,8 @@
|
||||||
dense
|
dense
|
||||||
:placeholder="$t('placeholders.signature')"
|
:placeholder="$t('placeholders.signature')"
|
||||||
/>
|
/>
|
||||||
</LokiField>
|
</OxenField>
|
||||||
<LokiField class="q-mt-md" :label="$t('fieldLabels.data')">
|
<OxenField class="q-mt-md" :label="$t('fieldLabels.data')">
|
||||||
<q-input
|
<q-input
|
||||||
v-model.trim="unsignedData"
|
v-model.trim="unsignedData"
|
||||||
:dark="theme == 'dark'"
|
:dark="theme == 'dark'"
|
||||||
|
@ -51,8 +51,8 @@
|
||||||
dense
|
dense
|
||||||
:placeholder="$t('placeholders.unsignedData')"
|
:placeholder="$t('placeholders.unsignedData')"
|
||||||
/>
|
/>
|
||||||
</LokiField>
|
</OxenField>
|
||||||
<LokiField class="q-mt-md" :label="$t('fieldLabels.address')">
|
<OxenField class="q-mt-md" :label="$t('fieldLabels.address')">
|
||||||
<q-input
|
<q-input
|
||||||
v-model.trim="address"
|
v-model.trim="address"
|
||||||
:dark="theme == 'dark'"
|
:dark="theme == 'dark'"
|
||||||
|
@ -60,7 +60,7 @@
|
||||||
dense
|
dense
|
||||||
:placeholder="$t('placeholders.addressOfSigner')"
|
:placeholder="$t('placeholders.addressOfSigner')"
|
||||||
/>
|
/>
|
||||||
</LokiField>
|
</OxenField>
|
||||||
<div class="submit-button">
|
<div class="submit-button">
|
||||||
<q-btn
|
<q-btn
|
||||||
color="primary"
|
color="primary"
|
||||||
|
@ -71,7 +71,7 @@
|
||||||
<q-btn
|
<q-btn
|
||||||
v-if="canClear"
|
v-if="canClear"
|
||||||
:label="$t('buttons.clear')"
|
:label="$t('buttons.clear')"
|
||||||
color="secondary"
|
color="accent"
|
||||||
@click="clear"
|
@click="clear"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
@ -92,13 +92,13 @@
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
const { clipboard } = require("electron");
|
const { clipboard } = require("electron");
|
||||||
import LokiField from "components/loki_field";
|
import OxenField from "components/oxen_field";
|
||||||
import SignatureDialog from "./signature_dialog";
|
import SignatureDialog from "./signature_dialog";
|
||||||
import { mapState } from "vuex";
|
import { mapState } from "vuex";
|
||||||
export default {
|
export default {
|
||||||
name: "SignAndVerify",
|
name: "SignAndVerify",
|
||||||
components: {
|
components: {
|
||||||
LokiField,
|
OxenField,
|
||||||
SignatureDialog
|
SignatureDialog
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
|
@ -228,7 +228,7 @@ export default {
|
||||||
cursor: default;
|
cursor: default;
|
||||||
}
|
}
|
||||||
|
|
||||||
.loki-field {
|
.oxen-field {
|
||||||
flex: 1;
|
flex: 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<template>
|
<template>
|
||||||
<q-dialog v-model="show" persistent>
|
<q-dialog v-model="show" persistent>
|
||||||
<q-card dark>
|
<q-card class="signature-dialog">
|
||||||
<q-card-section>
|
<q-card-section>
|
||||||
<div class="text-h6">{{ $t("dialog.signature.title") }}</div>
|
<div class="text-h6">{{ $t("dialog.signature.title") }}</div>
|
||||||
<div>
|
<div>
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<template>
|
<template>
|
||||||
<q-dialog v-model="show" persistent>
|
<q-dialog v-model="show" persistent>
|
||||||
<q-card class="confirm-tx-card" dark>
|
<q-card class="confirm-tx-card">
|
||||||
<q-card-section>
|
<q-card-section>
|
||||||
<div class="text-h6">{{ $t("dialog.confirmTransaction.title") }}</div>
|
<div class="text-h6">{{ $t("dialog.confirmTransaction.title") }}</div>
|
||||||
</q-card-section>
|
</q-card-section>
|
||||||
|
@ -15,10 +15,10 @@
|
||||||
</div>
|
</div>
|
||||||
<br />
|
<br />
|
||||||
<span class="label">{{ $t("strings.transactions.amount") }}: </span>
|
<span class="label">{{ $t("strings.transactions.amount") }}: </span>
|
||||||
{{ amount }} Loki
|
{{ amount }} OXEN
|
||||||
<br />
|
<br />
|
||||||
<span class="label">{{ $t("strings.transactions.fee") }}: </span>
|
<span class="label">{{ $t("strings.transactions.fee") }}: </span>
|
||||||
{{ fee }} Loki
|
{{ fee }} OXEN
|
||||||
<br />
|
<br />
|
||||||
<span class="label"
|
<span class="label"
|
||||||
>{{ $t("dialog.confirmTransaction.priority") }}:
|
>{{ $t("dialog.confirmTransaction.priority") }}:
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
<template>
|
<template>
|
||||||
<span> {{ value }} LOKI </span>
|
<span> {{ value }} OXEN </span>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
export default {
|
export default {
|
||||||
name: "FormatLoki",
|
name: "FormatOxen",
|
||||||
props: {
|
props: {
|
||||||
amount: {
|
amount: {
|
||||||
type: Number,
|
type: Number,
|
|
@ -8,7 +8,7 @@
|
||||||
v-for="option in options"
|
v-for="option in options"
|
||||||
:key="option.value"
|
:key="option.value"
|
||||||
class="row justify-center items-center"
|
class="row justify-center items-center"
|
||||||
:color="lang === option.value ? 'primary' : 'secondary'"
|
:color="lang === option.value ? 'primary' : 'accent'"
|
||||||
size="md"
|
size="md"
|
||||||
@click="setLanguage(option.value)"
|
@click="setLanguage(option.value)"
|
||||||
>
|
>
|
||||||
|
|
|
@ -125,8 +125,7 @@ export default {
|
||||||
label: this.$t("dialog.lnsUpdate.ok"),
|
label: this.$t("dialog.lnsUpdate.ok"),
|
||||||
color: "primary"
|
color: "primary"
|
||||||
},
|
},
|
||||||
dark: this.theme == "dark",
|
color: "#1F1C47"
|
||||||
color: this.theme == "dark" ? "white" : "dark"
|
|
||||||
});
|
});
|
||||||
passwordDialog
|
passwordDialog
|
||||||
.onOk(password => {
|
.onOk(password => {
|
||||||
|
@ -152,9 +151,7 @@ export default {
|
||||||
ok: {
|
ok: {
|
||||||
label: this.$t("dialog.purchase.ok"),
|
label: this.$t("dialog.purchase.ok"),
|
||||||
color: "primary"
|
color: "primary"
|
||||||
},
|
}
|
||||||
dark: this.theme == "dark",
|
|
||||||
color: this.theme == "dark" ? "white" : "dark"
|
|
||||||
});
|
});
|
||||||
passwordDialog
|
passwordDialog
|
||||||
.onOk(password => {
|
.onOk(password => {
|
||||||
|
|
|
@ -2,22 +2,21 @@
|
||||||
<div class="lns-input-form">
|
<div class="lns-input-form">
|
||||||
<!-- Type -->
|
<!-- Type -->
|
||||||
<div class="col q-mt-sm">
|
<div class="col q-mt-sm">
|
||||||
<LokiField :label="$t('fieldLabels.lnsType')" :disable="updating">
|
<OxenField :label="$t('fieldLabels.lnsType')" :disable="updating">
|
||||||
<q-select
|
<q-select
|
||||||
v-model.trim="record.type"
|
v-model.trim="record.type"
|
||||||
emit-value
|
emit-value
|
||||||
map-options
|
map-options
|
||||||
:options="renewing ? lokinetOptions : typeOptions"
|
:options="renewing ? lokinetOptions : typeOptions"
|
||||||
:dark="theme == 'dark'"
|
|
||||||
:disable="updating"
|
:disable="updating"
|
||||||
borderless
|
borderless
|
||||||
dense
|
dense
|
||||||
/>
|
/>
|
||||||
</LokiField>
|
</OxenField>
|
||||||
</div>
|
</div>
|
||||||
<!-- Name -->
|
<!-- Name -->
|
||||||
<div class="col q-mt-sm">
|
<div class="col q-mt-sm">
|
||||||
<LokiField
|
<OxenField
|
||||||
:label="$t('fieldLabels.name')"
|
:label="$t('fieldLabels.name')"
|
||||||
:disable="disableName"
|
:disable="disableName"
|
||||||
:error="$v.record.name.$error"
|
:error="$v.record.name.$error"
|
||||||
|
@ -32,12 +31,12 @@
|
||||||
:suffix="record.type === 'session' ? '' : '.loki'"
|
:suffix="record.type === 'session' ? '' : '.loki'"
|
||||||
@blur="$v.record.name.$touch"
|
@blur="$v.record.name.$touch"
|
||||||
/>
|
/>
|
||||||
</LokiField>
|
</OxenField>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Value (Session ID, Wallet Address or .loki address) -->
|
<!-- Value (Session ID, Wallet Address or .loki address) -->
|
||||||
<div class="col q-mt-sm">
|
<div class="col q-mt-sm">
|
||||||
<LokiField
|
<OxenField
|
||||||
class="q-mt-md"
|
class="q-mt-md"
|
||||||
:label="value_field_label"
|
:label="value_field_label"
|
||||||
:error="$v.record.value.$error"
|
:error="$v.record.value.$error"
|
||||||
|
@ -52,12 +51,12 @@
|
||||||
:suffix="record.type === 'session' ? '' : '.loki'"
|
:suffix="record.type === 'session' ? '' : '.loki'"
|
||||||
@blur="$v.record.value.$touch"
|
@blur="$v.record.value.$touch"
|
||||||
/>
|
/>
|
||||||
</LokiField>
|
</OxenField>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Owner -->
|
<!-- Owner -->
|
||||||
<div class="col q-mt-sm">
|
<div class="col q-mt-sm">
|
||||||
<LokiField
|
<OxenField
|
||||||
class="q-mt-md"
|
class="q-mt-md"
|
||||||
:label="$t('fieldLabels.owner')"
|
:label="$t('fieldLabels.owner')"
|
||||||
:error="$v.record.owner.$error"
|
:error="$v.record.owner.$error"
|
||||||
|
@ -72,12 +71,12 @@
|
||||||
:disable="renewing"
|
:disable="renewing"
|
||||||
@blur="$v.record.owner.$touch"
|
@blur="$v.record.owner.$touch"
|
||||||
/>
|
/>
|
||||||
</LokiField>
|
</OxenField>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Backup owner -->
|
<!-- Backup owner -->
|
||||||
<div class="col q-mt-sm">
|
<div class="col q-mt-sm">
|
||||||
<LokiField
|
<OxenField
|
||||||
class="q-mt-md"
|
class="q-mt-md"
|
||||||
:label="$t('fieldLabels.backupOwner')"
|
:label="$t('fieldLabels.backupOwner')"
|
||||||
:error="$v.record.backup_owner.$error"
|
:error="$v.record.backup_owner.$error"
|
||||||
|
@ -92,7 +91,7 @@
|
||||||
dense
|
dense
|
||||||
@blur="$v.record.backup_owner.$touch"
|
@blur="$v.record.backup_owner.$touch"
|
||||||
/>
|
/>
|
||||||
</LokiField>
|
</OxenField>
|
||||||
</div>
|
</div>
|
||||||
<div class="buttons">
|
<div class="buttons">
|
||||||
<q-btn
|
<q-btn
|
||||||
|
@ -103,7 +102,7 @@
|
||||||
/>
|
/>
|
||||||
<q-btn
|
<q-btn
|
||||||
v-if="showClearButton"
|
v-if="showClearButton"
|
||||||
color="secondary"
|
color="accent"
|
||||||
:label="$t('buttons.clear')"
|
:label="$t('buttons.clear')"
|
||||||
@click="clear()"
|
@click="clear()"
|
||||||
/>
|
/>
|
||||||
|
@ -120,13 +119,13 @@ import {
|
||||||
lokinet_name,
|
lokinet_name,
|
||||||
session_name
|
session_name
|
||||||
} from "src/validators/common";
|
} from "src/validators/common";
|
||||||
import LokiField from "components/loki_field";
|
import OxenField from "components/oxen_field";
|
||||||
import WalletPassword from "src/mixins/wallet_password";
|
import WalletPassword from "src/mixins/wallet_password";
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: "LNSInputForm",
|
name: "LNSInputForm",
|
||||||
components: {
|
components: {
|
||||||
LokiField
|
OxenField
|
||||||
},
|
},
|
||||||
mixins: [WalletPassword],
|
mixins: [WalletPassword],
|
||||||
props: {
|
props: {
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
<template>
|
<template>
|
||||||
<div class="my-lns">
|
<div class="my-lns">
|
||||||
<div class="q-px-md q-pt-md">
|
<div class="q-px-md q-pt-md">
|
||||||
<div class="description">
|
<div class="tab-desc">
|
||||||
{{ $t("strings.lnsDescription") }}
|
{{ $t("strings.lnsDescription") }}
|
||||||
</div>
|
</div>
|
||||||
<LNSRecords @onUpdate="onUpdate" @onRenew="onRenew" />
|
<LNSRecords @onUpdate="onUpdate" @onRenew="onRenew" />
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
<template>
|
<template>
|
||||||
<div class="lns-purchase">
|
<div class="lns-purchase">
|
||||||
<div class="q-mb-lg q-px-md q-pt-md">
|
<div class="q-mb-lg q-px-md q-pt-md">
|
||||||
<div class="description">
|
<div class="tab-desc">
|
||||||
{{ $t("strings.lnsPurchaseDescription") }}
|
{{ $t("strings.lnsPurchaseDescription") }}
|
||||||
</div>
|
</div>
|
||||||
<div class="prices">
|
<div class="prices">
|
||||||
|
@ -9,23 +9,23 @@
|
||||||
<table>
|
<table>
|
||||||
<tr>
|
<tr>
|
||||||
<td>{{ $t("strings.lns.sessionID") }}:</td>
|
<td>{{ $t("strings.lns.sessionID") }}:</td>
|
||||||
<td>15 LOKI</td>
|
<td>15 OXEN</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>{{ $t("strings.lns.lokinetName1Year") }}:</td>
|
<td>{{ $t("strings.lns.lokinetName1Year") }}:</td>
|
||||||
<td>15 LOKI</td>
|
<td>15 OXEN</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>{{ $t("strings.lns.lokinetNameXYears", { years: 2 }) }}:</td>
|
<td>{{ $t("strings.lns.lokinetNameXYears", { years: 2 }) }}:</td>
|
||||||
<td>30 LOKI</td>
|
<td>30 OXEN</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>{{ $t("strings.lns.lokinetNameXYears", { years: 5 }) }}:</td>
|
<td>{{ $t("strings.lns.lokinetNameXYears", { years: 5 }) }}:</td>
|
||||||
<td>60 LOKI</td>
|
<td>60 OXEN</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>{{ $t("strings.lns.lokinetNameXYears", { years: 10 }) }}:</td>
|
<td>{{ $t("strings.lns.lokinetNameXYears", { years: 10 }) }}:</td>
|
||||||
<td>90 LOKI</td>
|
<td>90 OXEN</td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
|
@ -55,12 +55,14 @@ export default {
|
||||||
.lns-purchase {
|
.lns-purchase {
|
||||||
.description {
|
.description {
|
||||||
white-space: pre-line;
|
white-space: pre-line;
|
||||||
color: #cecece;
|
// oxen-navy
|
||||||
margin-bottom: 20px;
|
color: #1f1c47;
|
||||||
}
|
}
|
||||||
|
|
||||||
.prices {
|
.prices {
|
||||||
color: #cecece;
|
// oxen-navy
|
||||||
|
margin-top: 20px;
|
||||||
|
color: #1f1c47;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
<template>
|
<template>
|
||||||
<q-list link no-border :dark="theme == 'dark'" class="lns-record-list">
|
<q-list link no-border class="lns-record-list">
|
||||||
<q-item
|
<q-item
|
||||||
v-for="record in recordList"
|
v-for="record in recordList"
|
||||||
:key="record.name_hash"
|
:key="record.name_hash"
|
||||||
class="loki-list-item"
|
class="oxen-list-item"
|
||||||
>
|
>
|
||||||
<q-item-section class="type" avatar>
|
<q-item-section class="type" avatar>
|
||||||
<q-icon :name="isLocked(record) ? 'lock' : 'lock_open'" size="24px" />
|
<q-icon :name="isLocked(record) ? 'lock' : 'lock_open'" size="24px" />
|
||||||
|
@ -22,13 +22,13 @@
|
||||||
<q-item-section>
|
<q-item-section>
|
||||||
<div class="row update-renew-buttons">
|
<div class="row update-renew-buttons">
|
||||||
<q-btn
|
<q-btn
|
||||||
color="secondary"
|
color="primary"
|
||||||
:label="$t('buttons.update')"
|
:label="$t('buttons.update')"
|
||||||
@click="onUpdate(record)"
|
@click="onUpdate(record)"
|
||||||
/>
|
/>
|
||||||
<q-btn
|
<q-btn
|
||||||
v-if="isLokinet"
|
v-if="isLokinet"
|
||||||
color="secondary"
|
color="primary"
|
||||||
:label="$t('buttons.renew')"
|
:label="$t('buttons.renew')"
|
||||||
@click="onRenew(record)"
|
@click="onRenew(record)"
|
||||||
/>
|
/>
|
||||||
|
@ -169,26 +169,36 @@ export default {
|
||||||
.lns-record-list {
|
.lns-record-list {
|
||||||
.q-item {
|
.q-item {
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
background: #313131;
|
color: #1f1c47;
|
||||||
|
background: white;
|
||||||
-webkit-transition: background-color 0.2s ease-in;
|
-webkit-transition: background-color 0.2s ease-in;
|
||||||
transition: background-color 0.2s ease-in;
|
transition: background-color 0.2s ease-in;
|
||||||
|
|
||||||
border-radius: 3px;
|
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 {
|
+ .q-item {
|
||||||
margin-top: 10px;
|
margin-top: 10px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.q-item-sublabel {
|
|
||||||
color: #313131;
|
|
||||||
}
|
|
||||||
|
|
||||||
.q-item:hover {
|
.q-item:hover {
|
||||||
background: rgba(117, 117, 117, 0.3);
|
background: #12c7ba;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.update-renew-buttons {
|
.update-renew-buttons {
|
||||||
|
.q-btn {
|
||||||
|
color: red;
|
||||||
|
}
|
||||||
.q-btn:not(:first-child) {
|
.q-btn:not(:first-child) {
|
||||||
margin-left: 8px;
|
margin-left: 8px;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
<template>
|
<template>
|
||||||
<div class="lns-record-list">
|
<div class="lns-record-list">
|
||||||
<div v-if="needsDecryption" class="decrypt row justify-between items-end">
|
<div v-if="needsDecryption" class="decrypt row justify-between items-end">
|
||||||
<LokiField
|
<OxenField
|
||||||
:label="$t('fieldLabels.decryptRecord')"
|
:label="$t('fieldLabels.decryptRecord')"
|
||||||
:disable="decrypting"
|
:disable="decrypting"
|
||||||
:error="$v.name.$error"
|
:error="$v.name.$error"
|
||||||
|
@ -15,7 +15,7 @@
|
||||||
:disable="decrypting"
|
:disable="decrypting"
|
||||||
@blur="$v.name.$touch"
|
@blur="$v.name.$touch"
|
||||||
/>
|
/>
|
||||||
</LokiField>
|
</OxenField>
|
||||||
<div class="btn-wrapper q-ml-md row items-center">
|
<div class="btn-wrapper q-ml-md row items-center">
|
||||||
<q-btn
|
<q-btn
|
||||||
color="primary"
|
color="primary"
|
||||||
|
@ -51,14 +51,14 @@
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import { mapState } from "vuex";
|
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 { session_name_or_lokinet_name } from "src/validators/common";
|
||||||
import LNSRecordList from "./lns_record_list";
|
import LNSRecordList from "./lns_record_list";
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: "LNSRecords",
|
name: "LNSRecords",
|
||||||
components: {
|
components: {
|
||||||
LokiField,
|
OxenField,
|
||||||
LNSRecordList
|
LNSRecordList
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
|
@ -197,7 +197,7 @@ export default {
|
||||||
cursor: default;
|
cursor: default;
|
||||||
}
|
}
|
||||||
|
|
||||||
.loki-field {
|
.oxen-field {
|
||||||
flex: 1;
|
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>
|
</style>
|
||||||
|
|
|
@ -2,7 +2,11 @@
|
||||||
<q-menu context-menu>
|
<q-menu context-menu>
|
||||||
<q-list separator class="context-menu-list">
|
<q-list separator class="context-menu-list">
|
||||||
<div v-for="(item, index) in menuItems" :key="index">
|
<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>
|
</div>
|
||||||
</q-list>
|
</q-list>
|
||||||
</q-menu>
|
</q-menu>
|
||||||
|
@ -30,10 +34,4 @@ export default {
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style>
|
<style></style>
|
||||||
.context-menu-list {
|
|
||||||
min-width: 150px;
|
|
||||||
max-height: 300px;
|
|
||||||
color: white;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
|
|
|
@ -3,8 +3,15 @@
|
||||||
<q-btn class="menu" icon="menu" size="md" flat>
|
<q-btn class="menu" icon="menu" size="md" flat>
|
||||||
<q-menu>
|
<q-menu>
|
||||||
<q-list separator class="menu-list">
|
<q-list separator class="menu-list">
|
||||||
<q-item v-if="!disableSwitchWallet" v-close-popup clickable @click.native="switchWallet">
|
<q-item
|
||||||
<q-item-label header>{{ $t("menuItems.switchWallet") }}</q-item-label>
|
v-if="!disableSwitchWallet"
|
||||||
|
v-close-popup
|
||||||
|
clickable
|
||||||
|
@click.native="switchWallet"
|
||||||
|
>
|
||||||
|
<q-item-label header>{{
|
||||||
|
$t("menuItems.switchWallet")
|
||||||
|
}}</q-item-label>
|
||||||
</q-item>
|
</q-item>
|
||||||
<q-item v-close-popup clickable @click.native="openSettings">
|
<q-item v-close-popup clickable @click.native="openSettings">
|
||||||
<q-item-label header>{{ $t("menuItems.settings") }}</q-item-label>
|
<q-item-label header>{{ $t("menuItems.settings") }}</q-item-label>
|
||||||
|
@ -22,26 +29,50 @@
|
||||||
<!-- TODO: Move this to it's own component -->
|
<!-- TODO: Move this to it's own component -->
|
||||||
<q-dialog ref="aboutModal" minimized>
|
<q-dialog ref="aboutModal" minimized>
|
||||||
<div class="about-modal">
|
<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">Wallet Version: v{{ version }}</p>
|
||||||
<p class="q-my-sm">Deaemon Version: v{{ daemonVersion }}</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">Copyright (c) 2018, Ryo Currency Project</p>
|
||||||
<p class="q-my-sm">All rights reserved.</p>
|
<p class="q-my-sm">All rights reserved.</p>
|
||||||
|
|
||||||
<div class="q-mt-md q-mb-lg external-links">
|
<div class="q-mt-md q-mb-lg external-links">
|
||||||
<p>
|
<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>
|
||||||
<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>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<q-btn color="primary" label="Close" @click="showAbout(false)" />
|
<q-btn color="primary" label="Close" @click="showAbout(false)" />
|
||||||
|
@ -96,13 +127,19 @@ export default {
|
||||||
switchWallet() {
|
switchWallet() {
|
||||||
// If the rpc is syncing then we want to tell the user to restart
|
// If the rpc is syncing then we want to tell the user to restart
|
||||||
if (this.isRPCSyncing) {
|
if (this.isRPCSyncing) {
|
||||||
this.$gateway.confirmClose(this.$t("dialog.switchWallet.restartMessage"), true);
|
this.$gateway.confirmClose(
|
||||||
|
this.$t("dialog.switchWallet.restartMessage"),
|
||||||
|
true
|
||||||
|
);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: Remove this in hardfork 16
|
// 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 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
|
// Allow switching normally because rpc won't be blocked
|
||||||
// NB: If this is added back, must use the quasar v1 APIs
|
// NB: If this is added back, must use the quasar v1 APIs
|
||||||
|
@ -142,8 +179,8 @@ export default {
|
||||||
<style lang="scss">
|
<style lang="scss">
|
||||||
.about-modal {
|
.about-modal {
|
||||||
padding: 25px;
|
padding: 25px;
|
||||||
background-color: $dark;
|
background-color: white;
|
||||||
color: white;
|
color: #1f1c47;
|
||||||
|
|
||||||
.external-links {
|
.external-links {
|
||||||
a {
|
a {
|
||||||
|
|
|
@ -1,22 +1,62 @@
|
||||||
<template>
|
<template>
|
||||||
<div class="wallet-settings">
|
<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-menu anchor="bottom right" self="top right">
|
||||||
<q-list separator class="menu-list">
|
<q-list separator class="menu-list">
|
||||||
<q-item v-close-popup clickable :disabled="!is_ready" @click.native="getPrivateKeys()">
|
<q-item
|
||||||
<q-item-label header>{{ $t("menuItems.showPrivateKeys") }}</q-item-label>
|
v-close-popup
|
||||||
|
clickable
|
||||||
|
:disabled="!is_ready"
|
||||||
|
@click.native="getPrivateKeys()"
|
||||||
|
>
|
||||||
|
<q-item-label header>{{
|
||||||
|
$t("menuItems.showPrivateKeys")
|
||||||
|
}}</q-item-label>
|
||||||
</q-item>
|
</q-item>
|
||||||
<q-item v-close-popup clickable :disabled="!is_ready" @click.native="showModal('change_password')">
|
<q-item
|
||||||
<q-item-label header>{{ $t("menuItems.changePassword") }}</q-item-label>
|
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>
|
||||||
<q-item v-close-popup clickable :disabled="!is_ready" @click.native="showModal('rescan')">
|
<q-item
|
||||||
<q-item-label header>{{ $t("menuItems.rescanWallet") }}</q-item-label>
|
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>
|
||||||
<q-item v-close-popup clickable :disabled="!is_ready" @click.native="showModal('key_image')">
|
<q-item
|
||||||
<q-item-label header>{{ $t("menuItems.manageKeyImages") }}</q-item-label>
|
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>
|
||||||
<q-item v-close-popup clickable :disabled="!is_ready" @click.native="deleteWallet()">
|
<q-item
|
||||||
<q-item-label header>{{ $t("menuItems.deleteWallet") }}</q-item-label>
|
v-close-popup
|
||||||
|
clickable
|
||||||
|
:disabled="!is_ready"
|
||||||
|
@click.native="deleteWallet()"
|
||||||
|
>
|
||||||
|
<q-item-label header>{{
|
||||||
|
$t("menuItems.deleteWallet")
|
||||||
|
}}</q-item-label>
|
||||||
</q-item>
|
</q-item>
|
||||||
</q-list>
|
</q-list>
|
||||||
</q-menu>
|
</q-menu>
|
||||||
|
@ -24,10 +64,14 @@
|
||||||
|
|
||||||
<!-- Modals -->
|
<!-- Modals -->
|
||||||
<!-- PRIVATE KEY MODAL -->
|
<!-- PRIVATE KEY MODAL -->
|
||||||
<q-dialog v-model="modals.private_keys.visible" minimized class="private-key-modal" @hide="closePrivateKeys()">
|
<q-dialog
|
||||||
<div class="modal">
|
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="modal-header">{{ $t("titles.privateKeys") }}</div>
|
||||||
<div class="q-ma-lg">
|
<div class="q-ma-md">
|
||||||
<template v-if="secret.mnemonic">
|
<template v-if="secret.mnemonic">
|
||||||
<h6 class="q-mb-xs q-mt-lg">
|
<h6 class="q-mb-xs q-mt-lg">
|
||||||
{{ $t("strings.seedWords") }}
|
{{ $t("strings.seedWords") }}
|
||||||
|
@ -45,7 +89,11 @@
|
||||||
icon="file_copy"
|
icon="file_copy"
|
||||||
@click="copyPrivateKey('mnemonic', $event)"
|
@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") }}
|
{{ $t("menuItems.copySeedWords") }}
|
||||||
</q-tooltip>
|
</q-tooltip>
|
||||||
</q-btn>
|
</q-btn>
|
||||||
|
@ -68,7 +116,11 @@
|
||||||
icon="file_copy"
|
icon="file_copy"
|
||||||
@click="copyPrivateKey('view_key', $event)"
|
@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") }}
|
{{ $t("menuItems.copyViewKey") }}
|
||||||
</q-tooltip>
|
</q-tooltip>
|
||||||
</q-btn>
|
</q-btn>
|
||||||
|
@ -91,7 +143,11 @@
|
||||||
icon="file_copy"
|
icon="file_copy"
|
||||||
@click="copyPrivateKey('spend_key', $event)"
|
@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") }}
|
{{ $t("menuItems.copySpendKey") }}
|
||||||
</q-tooltip>
|
</q-tooltip>
|
||||||
</q-btn>
|
</q-btn>
|
||||||
|
@ -100,7 +156,11 @@
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<div class="q-mt-lg">
|
<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>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -108,50 +168,89 @@
|
||||||
|
|
||||||
<!-- RESCAN MODAL -->
|
<!-- RESCAN MODAL -->
|
||||||
<q-dialog v-model="modals.rescan.visible" minimized>
|
<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="a-ma-lg modal-header">{{ $t("titles.rescanWallet") }}</div>
|
||||||
<div class="q-ma-lg">
|
<div class="q-ma-md">
|
||||||
<p>{{ $t("strings.rescanModalDescription") }}</p>
|
<p>{{ $t("strings.rescanModalDescription") }}</p>
|
||||||
|
|
||||||
<div class="q-mt-lg">
|
<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>
|
||||||
<div class="q-mt-sm">
|
<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>
|
||||||
|
|
||||||
<div class="q-mt-xl text-right">
|
<div class="q-mt-xl text-right">
|
||||||
<q-btn flat class="q-mr-sm" :label="$t('buttons.close')" @click="hideModal('rescan')" />
|
<q-btn
|
||||||
<q-btn color="primary" :label="$t('buttons.rescan')" @click="rescanWallet()" />
|
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>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</q-dialog>
|
</q-dialog>
|
||||||
|
|
||||||
<!-- KEY IMAGE MODAL -->
|
<!-- 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 key-image-modal">
|
||||||
<div class="modal-header">
|
<div class="modal-header">
|
||||||
<!-- Export/Import key images -->
|
<!-- Export/Import key images -->
|
||||||
{{
|
{{
|
||||||
$t("dialog.keyImages.title", {
|
$t("dialog.keyImages.title", {
|
||||||
type: $t(`dialog.keyImages.${modals.key_image.type.toLowerCase()}`)
|
type: $t(
|
||||||
|
`dialog.keyImages.${modals.key_image.type.toLowerCase()}`
|
||||||
|
)
|
||||||
})
|
})
|
||||||
}}
|
}}
|
||||||
</div>
|
</div>
|
||||||
<div class="q-ma-lg">
|
<div class="q-ma-md">
|
||||||
<div class="row q-mb-md">
|
<div class="row q-mb-md">
|
||||||
<div class="q-mr-xl">
|
<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>
|
||||||
<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>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<template v-if="modals.key_image.type == 'Export'">
|
<template v-if="modals.key_image.type == 'Export'">
|
||||||
<LokiField class="q-mt-lg" :label="$t('fieldLabels.keyImages.exportDirectory')" disable-hover>
|
<OxenField
|
||||||
<q-input v-model="modals.key_image.export_path" disable borderless />
|
class="q-mt-lg"
|
||||||
|
:label="$t('fieldLabels.keyImages.exportDirectory')"
|
||||||
|
disable-hover
|
||||||
|
>
|
||||||
|
<q-input
|
||||||
|
v-model="modals.key_image.export_path"
|
||||||
|
disable
|
||||||
|
borderless
|
||||||
|
/>
|
||||||
<input
|
<input
|
||||||
id="keyImageExportPath"
|
id="keyImageExportPath"
|
||||||
ref="keyImageExportSelect"
|
ref="keyImageExportSelect"
|
||||||
|
@ -162,12 +261,22 @@
|
||||||
hidden
|
hidden
|
||||||
@change="setKeyImageExportPath"
|
@change="setKeyImageExportPath"
|
||||||
/>
|
/>
|
||||||
<q-btn color="secondary" @click="selectKeyImageExportPath">{{ $t("buttons.browse") }}</q-btn>
|
<q-btn color="primary" @click="selectKeyImageExportPath">{{
|
||||||
</LokiField>
|
$t("buttons.browse")
|
||||||
|
}}</q-btn>
|
||||||
|
</OxenField>
|
||||||
</template>
|
</template>
|
||||||
<template v-if="modals.key_image.type == 'Import'">
|
<template v-if="modals.key_image.type == 'Import'">
|
||||||
<LokiField class="q-mt-lg" :label="$t('fieldLabels.keyImages.importFile')" disable-hover>
|
<OxenField
|
||||||
<q-input v-model="modals.key_image.import_path" disable borderless />
|
class="q-mt-lg"
|
||||||
|
:label="$t('fieldLabels.keyImages.importFile')"
|
||||||
|
disable-hover
|
||||||
|
>
|
||||||
|
<q-input
|
||||||
|
v-model="modals.key_image.import_path"
|
||||||
|
disable
|
||||||
|
borderless
|
||||||
|
/>
|
||||||
<input
|
<input
|
||||||
id="keyImageImportPath"
|
id="keyImageImportPath"
|
||||||
ref="keyImageImportSelect"
|
ref="keyImageImportSelect"
|
||||||
|
@ -176,12 +285,19 @@
|
||||||
hidden
|
hidden
|
||||||
@change="setKeyImageImportPath"
|
@change="setKeyImageImportPath"
|
||||||
/>
|
/>
|
||||||
<q-btn color="secondary" @click="selectKeyImageImportPath">{{ $t("buttons.browse") }}</q-btn>
|
<q-btn color="primary" @click="selectKeyImageImportPath">{{
|
||||||
</LokiField>
|
$t("buttons.browse")
|
||||||
|
}}</q-btn>
|
||||||
|
</OxenField>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<div class="q-mt-lg text-right">
|
<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
|
<q-btn
|
||||||
color="primary"
|
color="primary"
|
||||||
:label="$t('buttons.' + modals.key_image.type.toLowerCase())"
|
:label="$t('buttons.' + modals.key_image.type.toLowerCase())"
|
||||||
|
@ -193,33 +309,43 @@
|
||||||
</q-dialog>
|
</q-dialog>
|
||||||
|
|
||||||
<!-- CHANGE PASSWORD MODAL -->
|
<!-- 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 password-modal">
|
||||||
<div class="modal-header">{{ $t("titles.changePassword") }}</div>
|
<div class="modal-header">{{ $t("titles.changePassword") }}</div>
|
||||||
<div class="q-ma-lg">
|
<div class="q-ma-md">
|
||||||
<q-input
|
<q-input
|
||||||
v-model="modals.change_password.old_password"
|
v-model="modals.change_password.old_password"
|
||||||
type="password"
|
type="password"
|
||||||
:label="$t('fieldLabels.oldPassword')"
|
:label="$t('fieldLabels.oldPassword')"
|
||||||
:dark="theme == 'dark'"
|
|
||||||
/>
|
/>
|
||||||
<q-input
|
<q-input
|
||||||
v-model="modals.change_password.new_password"
|
v-model="modals.change_password.new_password"
|
||||||
type="password"
|
type="password"
|
||||||
:label="$t('fieldLabels.newPassword')"
|
:label="$t('fieldLabels.newPassword')"
|
||||||
:dark="theme == 'dark'"
|
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<q-input
|
<q-input
|
||||||
v-model="modals.change_password.new_password_confirm"
|
v-model="modals.change_password.new_password_confirm"
|
||||||
type="password"
|
type="password"
|
||||||
:label="$t('fieldLabels.confirmNewPassword')"
|
:label="$t('fieldLabels.confirmNewPassword')"
|
||||||
:dark="theme == 'dark'"
|
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<div class="q-mt-xl text-right">
|
<div class="q-mt-xl text-right">
|
||||||
<q-btn flat class="q-mr-sm" :label="$t('buttons.close')" @click="hideModal('change_password')" />
|
<q-btn
|
||||||
<q-btn color="primary" :label="$t('buttons.change')" @click="doChangePassword()" />
|
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>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -231,12 +357,12 @@
|
||||||
const { clipboard } = require("electron");
|
const { clipboard } = require("electron");
|
||||||
import { mapState } from "vuex";
|
import { mapState } from "vuex";
|
||||||
import WalletPassword from "src/mixins/wallet_password";
|
import WalletPassword from "src/mixins/wallet_password";
|
||||||
import LokiField from "components/loki_field";
|
import OxenField from "components/oxen_field";
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: "WalletSettings",
|
name: "WalletSettings",
|
||||||
components: {
|
components: {
|
||||||
LokiField
|
OxenField
|
||||||
},
|
},
|
||||||
mixins: [WalletPassword],
|
mixins: [WalletPassword],
|
||||||
data() {
|
data() {
|
||||||
|
@ -307,8 +433,17 @@ export default {
|
||||||
},
|
},
|
||||||
created() {
|
created() {
|
||||||
const path = require("upath");
|
const path = require("upath");
|
||||||
this.modals.key_image.export_path = path.join(this.wallet_data_dir, "images", this.info.name);
|
this.modals.key_image.export_path = path.join(
|
||||||
this.modals.key_image.import_path = path.join(this.wallet_data_dir, "images", this.info.name, "key_image_export");
|
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: {
|
methods: {
|
||||||
showModal(which) {
|
showModal(which) {
|
||||||
|
@ -355,8 +490,7 @@ export default {
|
||||||
ok: {
|
ok: {
|
||||||
label: this.$t("dialog.buttons.ok"),
|
label: this.$t("dialog.buttons.ok"),
|
||||||
color: "primary"
|
color: "primary"
|
||||||
},
|
}
|
||||||
dark: this.theme === "dark"
|
|
||||||
})
|
})
|
||||||
.onDismiss(() => null)
|
.onDismiss(() => null)
|
||||||
.onCancel(() => null)
|
.onCancel(() => null)
|
||||||
|
@ -379,8 +513,11 @@ export default {
|
||||||
label: this.$t("dialog.showPrivateKeys.ok"),
|
label: this.$t("dialog.showPrivateKeys.ok"),
|
||||||
color: "primary"
|
color: "primary"
|
||||||
},
|
},
|
||||||
dark: this.theme == "dark",
|
cancel: {
|
||||||
color: this.theme == "dark" ? "white" : "dark"
|
color: "tertiary",
|
||||||
|
flat: true
|
||||||
|
},
|
||||||
|
color: "white"
|
||||||
});
|
});
|
||||||
passwordDialog
|
passwordDialog
|
||||||
.onOk(password => {
|
.onOk(password => {
|
||||||
|
@ -418,10 +555,8 @@ export default {
|
||||||
},
|
},
|
||||||
cancel: {
|
cancel: {
|
||||||
flat: true,
|
flat: true,
|
||||||
label: this.$t("dialog.buttons.cancel"),
|
label: this.$t("dialog.buttons.cancel")
|
||||||
color: this.theme == "dark" ? "white" : "dark"
|
}
|
||||||
},
|
|
||||||
dark: this.theme == "dark"
|
|
||||||
})
|
})
|
||||||
.onOk(() => {
|
.onOk(() => {
|
||||||
this.$gateway.send("wallet", "rescan_blockchain");
|
this.$gateway.send("wallet", "rescan_blockchain");
|
||||||
|
@ -447,7 +582,9 @@ export default {
|
||||||
async doKeyImages() {
|
async doKeyImages() {
|
||||||
this.hideModal("key_image");
|
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({
|
let passwordDialog = await this.showPasswordConfirmation({
|
||||||
title: this.$t("dialog.keyImages.title", { type }),
|
title: this.$t("dialog.keyImages.title", { type }),
|
||||||
|
@ -482,7 +619,8 @@ export default {
|
||||||
doChangePassword() {
|
doChangePassword() {
|
||||||
let old_password = this.modals.change_password.old_password;
|
let old_password = this.modals.change_password.old_password;
|
||||||
let new_password = this.modals.change_password.new_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) {
|
if (new_password == old_password) {
|
||||||
this.$q.notify({
|
this.$q.notify({
|
||||||
|
@ -524,7 +662,7 @@ export default {
|
||||||
label: this.$t("dialog.buttons.cancel"),
|
label: this.$t("dialog.buttons.cancel"),
|
||||||
color: this.theme == "dark" ? "white" : "dark"
|
color: this.theme == "dark" ? "white" : "dark"
|
||||||
},
|
},
|
||||||
dark: this.theme == "dark"
|
color: "#1F1C47"
|
||||||
})
|
})
|
||||||
.onOk(async () => {
|
.onOk(async () => {
|
||||||
const hasPassword = await this.hasPassword();
|
const hasPassword = await this.hasPassword();
|
||||||
|
@ -569,8 +707,6 @@ export default {
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
.menu-list { }
|
|
||||||
|
|
||||||
<style lang="scss">
|
<style lang="scss">
|
||||||
.wallet-settings {
|
.wallet-settings {
|
||||||
.q-btn {
|
.q-btn {
|
||||||
|
@ -580,6 +716,17 @@ export default {
|
||||||
|
|
||||||
.password-modal {
|
.password-modal {
|
||||||
min-width: 400px;
|
min-width: 400px;
|
||||||
|
background: white;
|
||||||
|
color: #1f1c47;
|
||||||
|
|
||||||
|
> * {
|
||||||
|
color: #1f1c47;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.rescan-modal {
|
||||||
|
background: white;
|
||||||
|
color: #1f1c47;
|
||||||
}
|
}
|
||||||
|
|
||||||
.image-path {
|
.image-path {
|
||||||
|
@ -588,8 +735,11 @@ export default {
|
||||||
}
|
}
|
||||||
|
|
||||||
.key-image-modal {
|
.key-image-modal {
|
||||||
|
color: #1f1c47;
|
||||||
|
background: white;
|
||||||
|
|
||||||
label * {
|
label * {
|
||||||
color: #cecece !important;
|
color: #1f1c47 !important;
|
||||||
text-overflow: ellipsis;
|
text-overflow: ellipsis;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
}
|
}
|
||||||
|
@ -599,6 +749,9 @@ export default {
|
||||||
}
|
}
|
||||||
|
|
||||||
.private-key-modal {
|
.private-key-modal {
|
||||||
|
background: white;
|
||||||
|
color: #1f1c47;
|
||||||
|
|
||||||
.copy-btn {
|
.copy-btn {
|
||||||
margin-left: 8px;
|
margin-left: 8px;
|
||||||
}
|
}
|
||||||
|
@ -608,7 +761,7 @@ export default {
|
||||||
min-width: 400px;
|
min-width: 400px;
|
||||||
width: 45vw;
|
width: 45vw;
|
||||||
|
|
||||||
.loki-field {
|
.oxen-field {
|
||||||
flex: 1;
|
flex: 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,8 +1,10 @@
|
||||||
<template>
|
<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">
|
<div v-if="label" class="label row items-center" :disabled="disable">
|
||||||
{{ label }}
|
{{ label }}
|
||||||
<span v-if="optional" class="optional">({{ $t("fieldLabels.optional") }})</span>
|
<span v-if="optional" class="optional"
|
||||||
|
>({{ $t("fieldLabels.optional") }})</span
|
||||||
|
>
|
||||||
</div>
|
</div>
|
||||||
<div class="content row items-center" :class="{ error }">
|
<div class="content row items-center" :class="{ error }">
|
||||||
<slot></slot>
|
<slot></slot>
|
||||||
|
@ -15,7 +17,7 @@
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
export default {
|
export default {
|
||||||
name: "LokiField",
|
name: "OxenField",
|
||||||
props: {
|
props: {
|
||||||
label: {
|
label: {
|
||||||
type: String,
|
type: String,
|
||||||
|
@ -55,7 +57,7 @@ export default {
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="scss">
|
<style lang="scss">
|
||||||
.loki-field {
|
.oxen-field {
|
||||||
.label {
|
.label {
|
||||||
margin: 6px 0;
|
margin: 6px 0;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
|
@ -90,7 +92,14 @@ export default {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
|
|
||||||
* {
|
* {
|
||||||
color: white;
|
// Oxen navy, can't use vars here :(
|
||||||
|
color: #1f1c47;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.q-select {
|
||||||
|
.row {
|
||||||
|
color: red;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,20 +1,34 @@
|
||||||
<template>
|
<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>
|
||||||
<q-item-section class="flex">
|
<q-item-section class="flex">
|
||||||
<q-item-label class="ellipsis">{{ address.address }}</q-item-label>
|
<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>
|
||||||
<q-item-section side>
|
<q-item-section side>
|
||||||
<div class="row">
|
<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 -->
|
<!-- height of 24 makes it equal size as copy -->
|
||||||
<img :src="qrImage" height="24" />
|
<img :src="qrImage" height="24" />
|
||||||
<q-tooltip anchor="bottom right" self="top right" :offset="[0, 5]">
|
<q-tooltip anchor="bottom right" self="top right" :offset="[0, 5]">
|
||||||
{{ $t("menuItems.showQRCode") }}
|
{{ $t("menuItems.showQRCode") }}
|
||||||
</q-tooltip>
|
</q-tooltip>
|
||||||
</q-btn>
|
</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]">
|
<q-tooltip anchor="bottom right" self="top right" :offset="[0, 5]">
|
||||||
{{ $t("menuItems.copyAddress") }}
|
{{ $t("menuItems.copyAddress") }}
|
||||||
</q-tooltip>
|
</q-tooltip>
|
||||||
|
@ -28,19 +42,23 @@
|
||||||
<q-item-section>
|
<q-item-section>
|
||||||
<div class="row info-section">
|
<div class="row info-section">
|
||||||
<span class="col-sm-4">
|
<span class="col-sm-4">
|
||||||
<span>{{ $t("strings.lokiBalance") }}</span>
|
<span>{{ $t("strings.oxenBalance") }}</span>
|
||||||
<br />
|
<br />
|
||||||
<span class="value">{{ address.balance | currency }}</span>
|
<span class="value">{{ address.balance | currency }}</span>
|
||||||
</span>
|
</span>
|
||||||
<span class="col-sm-4">
|
<span class="col-sm-4">
|
||||||
<span>{{ $t("strings.lokiUnlockedBalance") }}</span>
|
<span>{{ $t("strings.oxenUnlockedBalance") }}</span>
|
||||||
<br />
|
<br />
|
||||||
<span class="value">{{ address.unlocked_balance | currency }}</span>
|
<span class="value">{{
|
||||||
|
address.unlocked_balance | currency
|
||||||
|
}}</span>
|
||||||
</span>
|
</span>
|
||||||
<span class="col-sm-4">
|
<span class="col-sm-4">
|
||||||
<span>{{ $t("strings.unspentOutputs") }}</span>
|
<span>{{ $t("strings.unspentOutputs") }}</span>
|
||||||
<br />
|
<br />
|
||||||
<span class="value">{{ address.num_unspent_outputs | toString }}</span>
|
<span class="value">{{
|
||||||
|
address.num_unspent_outputs | toString
|
||||||
|
}}</span>
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
</q-item-section>
|
</q-item-section>
|
||||||
|
|
|
@ -23,7 +23,7 @@
|
||||||
/>
|
/>
|
||||||
</q-toolbar>
|
</q-toolbar>
|
||||||
</q-header>
|
</q-header>
|
||||||
<q-page-container>
|
<q-page-container class="detail-page">
|
||||||
<div class="layout-padding">
|
<div class="layout-padding">
|
||||||
<h6 class="q-mt-xs q-mb-none text-weight-light">
|
<h6 class="q-mt-xs q-mb-none text-weight-light">
|
||||||
{{ $t("strings.serviceNodeDetails.serviceNodeKey") }}
|
{{ $t("strings.serviceNodeDetails.serviceNodeKey") }}
|
||||||
|
@ -40,7 +40,7 @@
|
||||||
</div>
|
</div>
|
||||||
<div class="value">
|
<div class="value">
|
||||||
<span
|
<span
|
||||||
><FormatLoki :amount="node.staking_requirement" raw-value
|
><FormatOxen :amount="node.staking_requirement" raw-value
|
||||||
/></span>
|
/></span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -54,7 +54,7 @@
|
||||||
</div>
|
</div>
|
||||||
<div class="value">
|
<div class="value">
|
||||||
<span
|
<span
|
||||||
><FormatLoki :amount="node.total_contributed" raw-value
|
><FormatOxen :amount="node.total_contributed" raw-value
|
||||||
/></span>
|
/></span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -120,7 +120,7 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</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"
|
<q-item-label class="contributors-title"
|
||||||
>{{
|
>{{
|
||||||
$t("strings.serviceNodeDetails.contributors")
|
$t("strings.serviceNodeDetails.contributors")
|
||||||
|
@ -129,7 +129,7 @@
|
||||||
<q-item
|
<q-item
|
||||||
v-for="contributor in contributors"
|
v-for="contributor in contributors"
|
||||||
:key="contributor.address"
|
:key="contributor.address"
|
||||||
class="loki-list-item"
|
class="oxen-list-item"
|
||||||
clickable
|
clickable
|
||||||
@click="openUserWalletInfo(contributor.address)"
|
@click="openUserWalletInfo(contributor.address)"
|
||||||
>
|
>
|
||||||
|
@ -150,7 +150,7 @@
|
||||||
>{{ $t("strings.operator") }} •
|
>{{ $t("strings.operator") }} •
|
||||||
</span>
|
</span>
|
||||||
{{ $t("strings.contribution") }}:
|
{{ $t("strings.contribution") }}:
|
||||||
<FormatLoki :amount="contributor.amount" raw-value />
|
<FormatOxen :amount="contributor.amount" raw-value />
|
||||||
</q-item-label>
|
</q-item-label>
|
||||||
</q-item-label>
|
</q-item-label>
|
||||||
<ContextMenu
|
<ContextMenu
|
||||||
|
@ -175,12 +175,12 @@
|
||||||
const { clipboard } = require("electron");
|
const { clipboard } = require("electron");
|
||||||
import { mapState } from "vuex";
|
import { mapState } from "vuex";
|
||||||
import { date } from "quasar";
|
import { date } from "quasar";
|
||||||
import FormatLoki from "components/format_loki";
|
import FormatOxen from "components/format_oxen";
|
||||||
import ContextMenu from "components/menus/contextmenu";
|
import ContextMenu from "components/menus/contextmenu";
|
||||||
export default {
|
export default {
|
||||||
name: "ServiceNodeDetails",
|
name: "ServiceNodeDetails",
|
||||||
components: {
|
components: {
|
||||||
FormatLoki,
|
FormatOxen,
|
||||||
ContextMenu
|
ContextMenu
|
||||||
},
|
},
|
||||||
props: {
|
props: {
|
||||||
|
@ -280,6 +280,7 @@ export default {
|
||||||
<style lang="scss">
|
<style lang="scss">
|
||||||
.contributors-title {
|
.contributors-title {
|
||||||
margin-bottom: 12px;
|
margin-bottom: 12px;
|
||||||
|
color: #1f1c47;
|
||||||
}
|
}
|
||||||
|
|
||||||
.serviceNodeDetails {
|
.serviceNodeDetails {
|
||||||
|
|
|
@ -16,7 +16,7 @@
|
||||||
<span v-if="getRole(node)">{{ getRole(node) }} •</span>
|
<span v-if="getRole(node)">{{ getRole(node) }} •</span>
|
||||||
<span>
|
<span>
|
||||||
{{ $t("strings.contribution") }}:
|
{{ $t("strings.contribution") }}:
|
||||||
<FormatLoki :amount="node.ourContributionAmount" />
|
<FormatOxen :amount="node.ourContributionAmount" />
|
||||||
</span>
|
</span>
|
||||||
</span>
|
</span>
|
||||||
<!-- you only have a contribution amount of 0 if you are a "contributor"
|
<!-- you only have a contribution amount of 0 if you are a "contributor"
|
||||||
|
@ -28,18 +28,16 @@
|
||||||
>
|
>
|
||||||
{{ $t("strings.serviceNodeDetails.reserved") }} •
|
{{ $t("strings.serviceNodeDetails.reserved") }} •
|
||||||
</span>
|
</span>
|
||||||
<span v-if="node.awaitingContribution">
|
<span v-if="node.awaitingContribution" class="contrib-amounts">
|
||||||
{{ $t("strings.serviceNodeDetails.minContribution") }}:
|
{{ $t("strings.serviceNodeDetails.minContribution") }}:
|
||||||
{{ getMinContribution(node) }} LOKI •
|
{{ getMinContribution(node) }} OXEN •
|
||||||
{{ $t("strings.serviceNodeDetails.maxContribution") }}:
|
{{ $t("strings.serviceNodeDetails.maxContribution") }}:
|
||||||
{{ openForContributionLoki(node) }} LOKI
|
{{ openForContriubtionOxen(node) }} OXEN
|
||||||
</span>
|
</span>
|
||||||
</q-item-label>
|
</q-item-label>
|
||||||
</q-item-section>
|
</q-item-section>
|
||||||
<q-item-section side>
|
<q-item-section side>
|
||||||
<span style="font-size: 16px; color: #cecece">{{
|
<span class="fee">{{ getFee(node) }}</span>
|
||||||
getFee(node)
|
|
||||||
}}</span>
|
|
||||||
</q-item-section>
|
</q-item-section>
|
||||||
<q-item-section side>
|
<q-item-section side>
|
||||||
<q-btn
|
<q-btn
|
||||||
|
@ -72,7 +70,7 @@
|
||||||
<script>
|
<script>
|
||||||
import { clipboard } from "electron";
|
import { clipboard } from "electron";
|
||||||
import ContextMenu from "components/menus/contextmenu";
|
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 ServiceNodeMixin from "src/mixins/service_node_mixin";
|
||||||
import { mapState } from "vuex";
|
import { mapState } from "vuex";
|
||||||
|
|
||||||
|
@ -80,7 +78,7 @@ export default {
|
||||||
name: "ServiceNodeList",
|
name: "ServiceNodeList",
|
||||||
components: {
|
components: {
|
||||||
ContextMenu,
|
ContextMenu,
|
||||||
FormatLoki
|
FormatOxen
|
||||||
},
|
},
|
||||||
mixins: [ServiceNodeMixin],
|
mixins: [ServiceNodeMixin],
|
||||||
props: {
|
props: {
|
||||||
|
@ -168,4 +166,16 @@ export default {
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style></style>
|
<style lang="scss">
|
||||||
|
.fee {
|
||||||
|
color: #1f1c47;
|
||||||
|
}
|
||||||
|
|
||||||
|
.service-node-list {
|
||||||
|
.q-item:hover {
|
||||||
|
.fee {
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
|
@ -1,11 +1,15 @@
|
||||||
<template>
|
<template>
|
||||||
<div class="service-node-registration">
|
<div class="service-node-registration">
|
||||||
<div class="q-pa-md">
|
<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="registerCommand">register_service_node</b>
|
||||||
<b place="prepareCommand">prepare_registration</b>
|
<b place="prepareCommand">prepare_registration</b>
|
||||||
</i18n>
|
</i18n>
|
||||||
<LokiField
|
<OxenField
|
||||||
:label="$t('fieldLabels.serviceNodeCommand')"
|
:label="$t('fieldLabels.serviceNodeCommand')"
|
||||||
:error="$v.registration_string.$error"
|
:error="$v.registration_string.$error"
|
||||||
:disabled="registration_status.sending"
|
:disabled="registration_status.sending"
|
||||||
|
@ -13,8 +17,7 @@
|
||||||
<q-input
|
<q-input
|
||||||
v-model.trim="registration_string"
|
v-model.trim="registration_string"
|
||||||
type="textarea"
|
type="textarea"
|
||||||
:dark="theme == 'dark'"
|
class="full-width text-area-oxen"
|
||||||
class="full-width text-area-loki"
|
|
||||||
placeholder="register_service_node ..."
|
placeholder="register_service_node ..."
|
||||||
:disabled="registration_status.sending"
|
:disabled="registration_status.sending"
|
||||||
borderless
|
borderless
|
||||||
|
@ -22,7 +25,7 @@
|
||||||
@blur="$v.registration_string.$touch"
|
@blur="$v.registration_string.$touch"
|
||||||
@paste="onPaste"
|
@paste="onPaste"
|
||||||
/>
|
/>
|
||||||
</LokiField>
|
</OxenField>
|
||||||
<q-btn
|
<q-btn
|
||||||
class="register-button"
|
class="register-button"
|
||||||
color="primary"
|
color="primary"
|
||||||
|
@ -32,7 +35,7 @@
|
||||||
/>
|
/>
|
||||||
</div>
|
</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-spinner color="primary" size="30" />
|
||||||
</q-inner-loading>
|
</q-inner-loading>
|
||||||
</div>
|
</div>
|
||||||
|
@ -41,13 +44,13 @@
|
||||||
<script>
|
<script>
|
||||||
import { mapState } from "vuex";
|
import { mapState } from "vuex";
|
||||||
import { required } from "vuelidate/lib/validators";
|
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";
|
import WalletPassword from "src/mixins/wallet_password";
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: "ServiceNodeRegistration",
|
name: "ServiceNodeRegistration",
|
||||||
components: {
|
components: {
|
||||||
LokiField
|
OxenField
|
||||||
},
|
},
|
||||||
mixins: [WalletPassword],
|
mixins: [WalletPassword],
|
||||||
data() {
|
data() {
|
||||||
|
|
|
@ -1,15 +1,15 @@
|
||||||
<template>
|
<template>
|
||||||
<div class="service-node-staking">
|
<div class="service-node-staking">
|
||||||
<div class="q-px-md q-pt-md">
|
<div class="q-px-md q-pt-md">
|
||||||
<p style="color: #cecece">
|
<p class="tab-desc">
|
||||||
{{ $t("strings.serviceNodeContributionDescription") }}
|
{{ $t("strings.serviceNodeContributionDescription") }}
|
||||||
<span
|
<span
|
||||||
style="cursor: pointer; text-decoration: underline;"
|
style="cursor: pointer; text-decoration: underline;"
|
||||||
@click="lokiWebsite"
|
@click="oxenWebsite"
|
||||||
>Loki {{ $t("strings.website") }}.</span
|
>Loki {{ $t("strings.website") }}.</span
|
||||||
>
|
>
|
||||||
</p>
|
</p>
|
||||||
<LokiField
|
<OxenField
|
||||||
:label="$t('fieldLabels.serviceNodeKey')"
|
:label="$t('fieldLabels.serviceNodeKey')"
|
||||||
:error="$v.service_node.key.$error"
|
:error="$v.service_node.key.$error"
|
||||||
>
|
>
|
||||||
|
@ -21,8 +21,8 @@
|
||||||
dense
|
dense
|
||||||
@blur="$v.service_node.key.$touch"
|
@blur="$v.service_node.key.$touch"
|
||||||
/>
|
/>
|
||||||
</LokiField>
|
</OxenField>
|
||||||
<LokiField
|
<OxenField
|
||||||
:label="$t('fieldLabels.amount')"
|
:label="$t('fieldLabels.amount')"
|
||||||
class="q-mt-md"
|
class="q-mt-md"
|
||||||
:error="$v.service_node.amount.$error"
|
:error="$v.service_node.amount.$error"
|
||||||
|
@ -39,20 +39,20 @@
|
||||||
@blur="$v.service_node.amount.$touch"
|
@blur="$v.service_node.amount.$touch"
|
||||||
/>
|
/>
|
||||||
<q-btn
|
<q-btn
|
||||||
color="secondary"
|
color="primary"
|
||||||
:text-color="theme == 'dark' ? 'white' : 'dark'"
|
:text-color="theme == 'dark' ? 'white' : 'dark'"
|
||||||
:label="$t('buttons.min')"
|
:label="$t('buttons.min')"
|
||||||
:disable="!areButtonsEnabled()"
|
:disable="!areButtonsEnabled()"
|
||||||
@click="service_node.amount = minStake(service_node.key)"
|
@click="service_node.amount = minStake(service_node.key)"
|
||||||
/>
|
/>
|
||||||
<q-btn
|
<q-btn
|
||||||
color="secondary"
|
color="primary"
|
||||||
:text-color="theme == 'dark' ? 'white' : 'dark'"
|
:text-color="theme == 'dark' ? 'white' : 'dark'"
|
||||||
:label="$t('buttons.max')"
|
:label="$t('buttons.max')"
|
||||||
:disable="!areButtonsEnabled()"
|
:disable="!areButtonsEnabled()"
|
||||||
@click="service_node.amount = maxStake(service_node.key)"
|
@click="service_node.amount = maxStake(service_node.key)"
|
||||||
/>
|
/>
|
||||||
</LokiField>
|
</OxenField>
|
||||||
<div class="submit-button">
|
<div class="submit-button">
|
||||||
<q-btn
|
<q-btn
|
||||||
:disable="!is_able_to_send"
|
:disable="!is_able_to_send"
|
||||||
|
@ -62,7 +62,7 @@
|
||||||
/>
|
/>
|
||||||
<q-btn
|
<q-btn
|
||||||
:disable="!is_able_to_send"
|
:disable="!is_able_to_send"
|
||||||
color="secondary"
|
color="accent"
|
||||||
:label="$t('buttons.sweepAll')"
|
:label="$t('buttons.sweepAll')"
|
||||||
@click="sweepAllWarning()"
|
@click="sweepAllWarning()"
|
||||||
/>
|
/>
|
||||||
|
@ -84,7 +84,6 @@
|
||||||
/>
|
/>
|
||||||
<q-inner-loading
|
<q-inner-loading
|
||||||
:showing="stake_status.sending || sweep_all_status.sending"
|
:showing="stake_status.sending || sweep_all_status.sending"
|
||||||
:dark="theme == 'dark'"
|
|
||||||
>
|
>
|
||||||
<q-spinner color="primary" size="30" />
|
<q-spinner color="primary" size="30" />
|
||||||
</q-inner-loading>
|
</q-inner-loading>
|
||||||
|
@ -96,7 +95,7 @@ const objectAssignDeep = require("object-assign-deep");
|
||||||
import { mapState } from "vuex";
|
import { mapState } from "vuex";
|
||||||
import { required, decimal } from "vuelidate/lib/validators";
|
import { required, decimal } from "vuelidate/lib/validators";
|
||||||
import { service_node_key, greater_than_zero } from "src/validators/common";
|
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 WalletPassword from "src/mixins/wallet_password";
|
||||||
import ConfirmDialogMixin from "src/mixins/confirm_dialog_mixin";
|
import ConfirmDialogMixin from "src/mixins/confirm_dialog_mixin";
|
||||||
import ServiceNodeContribute from "./service_node_contribute";
|
import ServiceNodeContribute from "./service_node_contribute";
|
||||||
|
@ -108,7 +107,7 @@ const DO_NOTHING = 10;
|
||||||
export default {
|
export default {
|
||||||
name: "ServiceNodeStaking",
|
name: "ServiceNodeStaking",
|
||||||
components: {
|
components: {
|
||||||
LokiField,
|
OxenField,
|
||||||
ServiceNodeContribute,
|
ServiceNodeContribute,
|
||||||
ConfirmTransactionDialog
|
ConfirmTransactionDialog
|
||||||
},
|
},
|
||||||
|
@ -278,7 +277,7 @@ export default {
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
lokiWebsite() {
|
oxenWebsite() {
|
||||||
const url = "https://loki.network/service-nodes/";
|
const url = "https://loki.network/service-nodes/";
|
||||||
this.$gateway.send("core", "open_url", {
|
this.$gateway.send("core", "open_url", {
|
||||||
url
|
url
|
||||||
|
@ -294,7 +293,7 @@ export default {
|
||||||
},
|
},
|
||||||
maxStake() {
|
maxStake() {
|
||||||
const node = this.getNodeWithPubKey();
|
const node = this.getNodeWithPubKey();
|
||||||
return this.openForContributionLoki(node);
|
return this.openForContriubtionOxen(node);
|
||||||
},
|
},
|
||||||
getFeeDecimal(node) {
|
getFeeDecimal(node) {
|
||||||
const operatorPortion = node.portions_for_operator;
|
const operatorPortion = node.portions_for_operator;
|
||||||
|
@ -353,9 +352,8 @@ export default {
|
||||||
cancel: {
|
cancel: {
|
||||||
flat: true,
|
flat: true,
|
||||||
label: this.$t("dialog.buttons.cancel"),
|
label: this.$t("dialog.buttons.cancel"),
|
||||||
color: this.theme === "dark" ? "white" : "dark"
|
color: "negative"
|
||||||
},
|
}
|
||||||
dark: this.theme === "dark"
|
|
||||||
})
|
})
|
||||||
.onOk(() => {
|
.onOk(() => {
|
||||||
this.sweepAll();
|
this.sweepAll();
|
||||||
|
@ -387,10 +385,8 @@ export default {
|
||||||
noPasswordMessage: this.$t("dialog.sweepAll.message"),
|
noPasswordMessage: this.$t("dialog.sweepAll.message"),
|
||||||
ok: {
|
ok: {
|
||||||
label: this.$t("dialog.sweepAll.ok"),
|
label: this.$t("dialog.sweepAll.ok"),
|
||||||
color: "primary"
|
color: "#12C7BA"
|
||||||
},
|
}
|
||||||
dark: this.theme == "dark",
|
|
||||||
color: this.theme == "dark" ? "white" : "dark"
|
|
||||||
});
|
});
|
||||||
passwordDialog
|
passwordDialog
|
||||||
.onOk(password => {
|
.onOk(password => {
|
||||||
|
|
|
@ -12,7 +12,7 @@
|
||||||
<q-btn-toggle
|
<q-btn-toggle
|
||||||
v-model="page"
|
v-model="page"
|
||||||
toggle-color="primary"
|
toggle-color="primary"
|
||||||
color="tertiary"
|
color="accent"
|
||||||
size="md"
|
size="md"
|
||||||
:options="tabs"
|
:options="tabs"
|
||||||
/>
|
/>
|
||||||
|
|
|
@ -24,19 +24,19 @@
|
||||||
</div>
|
</div>
|
||||||
</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") }}
|
{{ $t("strings.daemon.localRemote.description") }}
|
||||||
</p>
|
</p>
|
||||||
<p v-if="config_daemon.type == 'local'">
|
<p v-if="config_daemon.type == 'local'" class="tab-desc">
|
||||||
{{ $t("strings.daemon.local.description") }}
|
{{ $t("strings.daemon.local.description") }}
|
||||||
</p>
|
</p>
|
||||||
<p v-if="is_remote">
|
<p v-if="is_remote" class="tab-desc">
|
||||||
{{ $t("strings.daemon.remote.description") }}
|
{{ $t("strings.daemon.remote.description") }}
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<template v-if="config_daemon.type != 'remote'">
|
<template v-if="config_daemon.type != 'remote'">
|
||||||
<div class="row pl-sm">
|
<div class="row pl-sm">
|
||||||
<LokiField
|
<OxenField
|
||||||
class="col-8"
|
class="col-8"
|
||||||
:label="$t('fieldLabels.localDaemonIP')"
|
:label="$t('fieldLabels.localDaemonIP')"
|
||||||
disable
|
disable
|
||||||
|
@ -44,13 +44,12 @@
|
||||||
<q-input
|
<q-input
|
||||||
v-model="config_daemon.rpc_bind_ip"
|
v-model="config_daemon.rpc_bind_ip"
|
||||||
:placeholder="daemon_defaults.rpc_bind_ip"
|
:placeholder="daemon_defaults.rpc_bind_ip"
|
||||||
:dark="theme == 'dark'"
|
|
||||||
disable
|
disable
|
||||||
borderless
|
borderless
|
||||||
dense
|
dense
|
||||||
/>
|
/>
|
||||||
</LokiField>
|
</OxenField>
|
||||||
<LokiField
|
<OxenField
|
||||||
class="col-4"
|
class="col-4"
|
||||||
:label="$t('fieldLabels.localDaemonPort') + '(RPC)'"
|
:label="$t('fieldLabels.localDaemonPort') + '(RPC)'"
|
||||||
>
|
>
|
||||||
|
@ -62,21 +61,19 @@
|
||||||
:step="1"
|
:step="1"
|
||||||
min="1024"
|
min="1024"
|
||||||
max="65535"
|
max="65535"
|
||||||
:dark="theme == 'dark'"
|
|
||||||
borderless
|
borderless
|
||||||
dense
|
dense
|
||||||
/>
|
/>
|
||||||
</LokiField>
|
</OxenField>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<template v-if="config_daemon.type != 'local'">
|
<template v-if="config_daemon.type != 'local'">
|
||||||
<div class="row q-mt-md pl-sm">
|
<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
|
<q-input
|
||||||
v-model="config_daemon.remote_host"
|
v-model="config_daemon.remote_host"
|
||||||
:placeholder="daemon_defaults.remote_host"
|
:placeholder="daemon_defaults.remote_host"
|
||||||
:dark="theme == 'dark'"
|
|
||||||
borderless
|
borderless
|
||||||
dense
|
dense
|
||||||
/>
|
/>
|
||||||
|
@ -86,7 +83,7 @@
|
||||||
class="remote-dropdown"
|
class="remote-dropdown"
|
||||||
flat
|
flat
|
||||||
>
|
>
|
||||||
<q-list link dark no-border>
|
<q-list link no-border>
|
||||||
<q-item
|
<q-item
|
||||||
v-for="option in remotes"
|
v-for="option in remotes"
|
||||||
:key="option.host"
|
:key="option.host"
|
||||||
|
@ -101,8 +98,8 @@
|
||||||
</q-item>
|
</q-item>
|
||||||
</q-list>
|
</q-list>
|
||||||
</q-btn-dropdown>
|
</q-btn-dropdown>
|
||||||
</LokiField>
|
</OxenField>
|
||||||
<LokiField class="col-4" :label="$t('fieldLabels.remoteNodePort')">
|
<OxenField class="col-4" :label="$t('fieldLabels.remoteNodePort')">
|
||||||
<q-input
|
<q-input
|
||||||
v-model="config_daemon.remote_port"
|
v-model="config_daemon.remote_port"
|
||||||
:placeholder="toString(daemon_defaults.remote_port)"
|
:placeholder="toString(daemon_defaults.remote_port)"
|
||||||
|
@ -115,12 +112,12 @@
|
||||||
borderless
|
borderless
|
||||||
dense
|
dense
|
||||||
/>
|
/>
|
||||||
</LokiField>
|
</OxenField>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<div class="col q-mt-md pt-sm">
|
<div class="col q-mt-md pt-sm">
|
||||||
<LokiField :label="$t('fieldLabels.dataStoragePath')" disable-hover>
|
<OxenField :label="$t('fieldLabels.dataStoragePath')" disable-hover>
|
||||||
<q-input
|
<q-input
|
||||||
v-model="config.app.data_dir"
|
v-model="config.app.data_dir"
|
||||||
disable
|
disable
|
||||||
|
@ -138,13 +135,13 @@
|
||||||
@change="setDataPath"
|
@change="setDataPath"
|
||||||
/>
|
/>
|
||||||
<q-btn
|
<q-btn
|
||||||
color="secondary"
|
color="primary"
|
||||||
:text-color="theme == 'dark' ? 'white' : 'dark'"
|
:text-color="theme == 'dark' ? 'white' : 'dark'"
|
||||||
@click="selectPath('data')"
|
@click="selectPath('data')"
|
||||||
>{{ $t("buttons.selectLocation") }}</q-btn
|
>{{ $t("buttons.selectLocation") }}</q-btn
|
||||||
>
|
>
|
||||||
</LokiField>
|
</OxenField>
|
||||||
<LokiField :label="$t('fieldLabels.walletStoragePath')" disable-hover>
|
<OxenField :label="$t('fieldLabels.walletStoragePath')" disable-hover>
|
||||||
<q-input
|
<q-input
|
||||||
v-model="config.app.wallet_data_dir"
|
v-model="config.app.wallet_data_dir"
|
||||||
disable
|
disable
|
||||||
|
@ -162,12 +159,12 @@
|
||||||
@change="setWalletDataPath"
|
@change="setWalletDataPath"
|
||||||
/>
|
/>
|
||||||
<q-btn
|
<q-btn
|
||||||
color="secondary"
|
color="primary"
|
||||||
:text-color="theme == 'dark' ? 'white' : 'dark'"
|
:text-color="theme == 'dark' ? 'white' : 'dark'"
|
||||||
@click="selectPath('wallet')"
|
@click="selectPath('wallet')"
|
||||||
>{{ $t("buttons.selectLocation") }}</q-btn
|
>{{ $t("buttons.selectLocation") }}</q-btn
|
||||||
>
|
>
|
||||||
</LokiField>
|
</OxenField>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<q-expansion-item
|
<q-expansion-item
|
||||||
|
@ -175,7 +172,7 @@
|
||||||
header-class="q-mt-sm non-selectable row reverse advanced-options-label"
|
header-class="q-mt-sm non-selectable row reverse advanced-options-label"
|
||||||
>
|
>
|
||||||
<div class="row pl-sm q-mt-sm">
|
<div class="row pl-sm q-mt-sm">
|
||||||
<LokiField
|
<OxenField
|
||||||
class="col-6"
|
class="col-6"
|
||||||
:label="$t('fieldLabels.daemonLogLevel')"
|
:label="$t('fieldLabels.daemonLogLevel')"
|
||||||
:disable="is_remote"
|
:disable="is_remote"
|
||||||
|
@ -193,8 +190,8 @@
|
||||||
borderless
|
borderless
|
||||||
dense
|
dense
|
||||||
/>
|
/>
|
||||||
</LokiField>
|
</OxenField>
|
||||||
<LokiField class="col-6" :label="$t('fieldLabels.walletLogLevel')">
|
<OxenField class="col-6" :label="$t('fieldLabels.walletLogLevel')">
|
||||||
<q-input
|
<q-input
|
||||||
v-model="config.wallet.log_level"
|
v-model="config.wallet.log_level"
|
||||||
:placeholder="toString(defaults.wallet.log_level)"
|
:placeholder="toString(defaults.wallet.log_level)"
|
||||||
|
@ -207,12 +204,12 @@
|
||||||
borderless
|
borderless
|
||||||
dense
|
dense
|
||||||
/>
|
/>
|
||||||
</LokiField>
|
</OxenField>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="row pl-sm q-mt-md">
|
<div class="row pl-sm q-mt-md">
|
||||||
<!-- TODO: Can be generalised to a "port" (or similar) field -->
|
<!-- TODO: Can be generalised to a "port" (or similar) field -->
|
||||||
<LokiField
|
<OxenField
|
||||||
class="col-3"
|
class="col-3"
|
||||||
:label="$t('fieldLabels.maxIncomingPeers')"
|
:label="$t('fieldLabels.maxIncomingPeers')"
|
||||||
:disable="is_remote"
|
:disable="is_remote"
|
||||||
|
@ -230,8 +227,8 @@
|
||||||
borderless
|
borderless
|
||||||
dense
|
dense
|
||||||
/>
|
/>
|
||||||
</LokiField>
|
</OxenField>
|
||||||
<LokiField
|
<OxenField
|
||||||
class="col-3"
|
class="col-3"
|
||||||
:label="$t('fieldLabels.maxOutgoingPeers')"
|
:label="$t('fieldLabels.maxOutgoingPeers')"
|
||||||
:disable="is_remote"
|
:disable="is_remote"
|
||||||
|
@ -249,8 +246,8 @@
|
||||||
borderless
|
borderless
|
||||||
dense
|
dense
|
||||||
/>
|
/>
|
||||||
</LokiField>
|
</OxenField>
|
||||||
<LokiField
|
<OxenField
|
||||||
class="col-3"
|
class="col-3"
|
||||||
:label="$t('fieldLabels.limitUploadRate')"
|
:label="$t('fieldLabels.limitUploadRate')"
|
||||||
:disable="is_remote"
|
:disable="is_remote"
|
||||||
|
@ -269,8 +266,8 @@
|
||||||
borderless
|
borderless
|
||||||
dense
|
dense
|
||||||
/>
|
/>
|
||||||
</LokiField>
|
</OxenField>
|
||||||
<LokiField
|
<OxenField
|
||||||
class="col-3"
|
class="col-3"
|
||||||
:label="$t('fieldLabels.limitDownloadRate')"
|
:label="$t('fieldLabels.limitDownloadRate')"
|
||||||
:disable="is_remote"
|
:disable="is_remote"
|
||||||
|
@ -289,10 +286,10 @@
|
||||||
borderless
|
borderless
|
||||||
dense
|
dense
|
||||||
/>
|
/>
|
||||||
</LokiField>
|
</OxenField>
|
||||||
</div>
|
</div>
|
||||||
<div class="row pl-sm q-mt-md">
|
<div class="row pl-sm q-mt-md">
|
||||||
<LokiField
|
<OxenField
|
||||||
class="col-3"
|
class="col-3"
|
||||||
:label="$t('fieldLabels.daemonP2pPort')"
|
:label="$t('fieldLabels.daemonP2pPort')"
|
||||||
:disable="is_remote"
|
:disable="is_remote"
|
||||||
|
@ -311,8 +308,8 @@
|
||||||
borderless
|
borderless
|
||||||
dense
|
dense
|
||||||
/>
|
/>
|
||||||
</LokiField>
|
</OxenField>
|
||||||
<LokiField class="col-3" :label="$t('fieldLabels.internalWalletPort')">
|
<OxenField class="col-3" :label="$t('fieldLabels.internalWalletPort')">
|
||||||
<q-input
|
<q-input
|
||||||
v-model="config.app.ws_bind_port"
|
v-model="config.app.ws_bind_port"
|
||||||
:placeholder="toString(defaults.app.ws_bind_port)"
|
:placeholder="toString(defaults.app.ws_bind_port)"
|
||||||
|
@ -326,8 +323,8 @@
|
||||||
borderless
|
borderless
|
||||||
dense
|
dense
|
||||||
/>
|
/>
|
||||||
</LokiField>
|
</OxenField>
|
||||||
<LokiField
|
<OxenField
|
||||||
class="col-3"
|
class="col-3"
|
||||||
:label="$t('fieldLabels.walletRPCPort')"
|
:label="$t('fieldLabels.walletRPCPort')"
|
||||||
:disable="is_remote"
|
:disable="is_remote"
|
||||||
|
@ -346,9 +343,9 @@
|
||||||
borderless
|
borderless
|
||||||
dense
|
dense
|
||||||
/>
|
/>
|
||||||
</LokiField>
|
</OxenField>
|
||||||
</div>
|
</div>
|
||||||
<LokiField
|
<OxenField
|
||||||
:helper="$t('fieldLabels.chooseNetwork')"
|
:helper="$t('fieldLabels.chooseNetwork')"
|
||||||
:label="$t('fieldLabels.network')"
|
:label="$t('fieldLabels.network')"
|
||||||
class="network-group-field"
|
class="network-group-field"
|
||||||
|
@ -362,18 +359,18 @@
|
||||||
{ label: 'Test Net', value: 'testnet' }
|
{ label: 'Test Net', value: 'testnet' }
|
||||||
]"
|
]"
|
||||||
/>
|
/>
|
||||||
</LokiField>
|
</OxenField>
|
||||||
</q-expansion-item>
|
</q-expansion-item>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import { mapState } from "vuex";
|
import { mapState } from "vuex";
|
||||||
import LokiField from "components/loki_field";
|
import OxenField from "components/oxen_field";
|
||||||
export default {
|
export default {
|
||||||
name: "SettingsGeneral",
|
name: "SettingsGeneral",
|
||||||
components: {
|
components: {
|
||||||
LokiField
|
OxenField
|
||||||
},
|
},
|
||||||
props: {
|
props: {
|
||||||
randomiseRemote: {
|
randomiseRemote: {
|
||||||
|
|
|
@ -21,7 +21,7 @@
|
||||||
/>
|
/>
|
||||||
</q-toolbar>
|
</q-toolbar>
|
||||||
</q-header>
|
</q-header>
|
||||||
<q-page-container>
|
<q-page-container class="detail-page">
|
||||||
<div class="layout-padding">
|
<div class="layout-padding">
|
||||||
<div class="row items-center non-selectable">
|
<div class="row items-center non-selectable">
|
||||||
<div class="q-mr-sm">
|
<div class="q-mr-sm">
|
||||||
|
@ -72,7 +72,7 @@
|
||||||
<span>{{ $t("strings.transactions.amount") }}</span>
|
<span>{{ $t("strings.transactions.amount") }}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="value">
|
<div class="value">
|
||||||
<span><FormatLoki :amount="tx.amount" raw-value/></span>
|
<span><FormatOxen :amount="tx.amount" raw-value/></span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -88,7 +88,7 @@
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="value">
|
<div class="value">
|
||||||
<span><FormatLoki :amount="tx.fee" raw-value/></span>
|
<span><FormatOxen :amount="tx.fee" raw-value/></span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -176,7 +176,7 @@
|
||||||
destination.address
|
destination.address
|
||||||
}}</q-item-label>
|
}}</q-item-label>
|
||||||
<q-item-label
|
<q-item-label
|
||||||
><FormatLoki :amount="destination.amount"
|
><FormatOxen :amount="destination.amount"
|
||||||
/></q-item-label>
|
/></q-item-label>
|
||||||
</q-item-label>
|
</q-item-label>
|
||||||
<ContextMenu
|
<ContextMenu
|
||||||
|
@ -200,8 +200,6 @@
|
||||||
<q-input
|
<q-input
|
||||||
v-model="txNotes"
|
v-model="txNotes"
|
||||||
:label="$t('fieldLabels.transactionNotes')"
|
:label="$t('fieldLabels.transactionNotes')"
|
||||||
:dark="theme == 'dark'"
|
|
||||||
:text-color="theme == 'dark' ? 'white' : 'dark'"
|
|
||||||
type="textarea"
|
type="textarea"
|
||||||
rows="2"
|
rows="2"
|
||||||
dense
|
dense
|
||||||
|
@ -225,13 +223,13 @@ const { clipboard } = require("electron");
|
||||||
import { mapState } from "vuex";
|
import { mapState } from "vuex";
|
||||||
import { date } from "quasar";
|
import { date } from "quasar";
|
||||||
import TxTypeIcon from "components/tx_type_icon";
|
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";
|
import ContextMenu from "components/menus/contextmenu";
|
||||||
export default {
|
export default {
|
||||||
name: "TxDetails",
|
name: "TxDetails",
|
||||||
components: {
|
components: {
|
||||||
TxTypeIcon,
|
TxTypeIcon,
|
||||||
FormatLoki,
|
FormatOxen,
|
||||||
ContextMenu
|
ContextMenu
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
|
@ -327,8 +325,8 @@ export default {
|
||||||
label: this.$t("dialog.transactionDetails.ok"),
|
label: this.$t("dialog.transactionDetails.ok"),
|
||||||
color: "primary"
|
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(() => {})
|
.onOk(() => {})
|
||||||
.onCancel(() => {})
|
.onCancel(() => {})
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
<template>
|
<template>
|
||||||
<div class="tx-list">
|
<div class="tx-list">
|
||||||
<template v-if="tx_list_paged.length === 0">
|
<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") }}
|
{{ $t("strings.noTransactionsFound") }}
|
||||||
</p>
|
</p>
|
||||||
</template>
|
</template>
|
||||||
|
@ -12,12 +12,12 @@
|
||||||
link
|
link
|
||||||
no-border
|
no-border
|
||||||
:dark="theme == 'dark'"
|
:dark="theme == 'dark'"
|
||||||
class="loki-list tx-list"
|
class="oxen-list tx-list"
|
||||||
>
|
>
|
||||||
<q-item
|
<q-item
|
||||||
v-for="(tx, i) in tx_list_paged"
|
v-for="(tx, i) in tx_list_paged"
|
||||||
:key="`${tx.txid}-${tx.type}-${i}`"
|
:key="`${tx.txid}-${tx.type}-${i}`"
|
||||||
class="loki-list-item transaction"
|
class="oxen-list-item transaction"
|
||||||
:class="'tx-' + tx.type"
|
:class="'tx-' + tx.type"
|
||||||
@click.native="details(tx)"
|
@click.native="details(tx)"
|
||||||
>
|
>
|
||||||
|
@ -26,7 +26,7 @@
|
||||||
</q-item-section>
|
</q-item-section>
|
||||||
<q-item-label class="main">
|
<q-item-label class="main">
|
||||||
<q-item-label class="amount">
|
<q-item-label class="amount">
|
||||||
<FormatLoki :amount="tx.amount || 0" />
|
<FormatOxen :amount="tx.amount || 0" />
|
||||||
</q-item-label>
|
</q-item-label>
|
||||||
<q-item-label caption>{{ tx.txid }}</q-item-label>
|
<q-item-label caption>{{ tx.txid }}</q-item-label>
|
||||||
</q-item-label>
|
</q-item-label>
|
||||||
|
@ -61,7 +61,7 @@ const { clipboard } = require("electron");
|
||||||
import { mapState } from "vuex";
|
import { mapState } from "vuex";
|
||||||
import { QSpinnerDots } from "quasar";
|
import { QSpinnerDots } from "quasar";
|
||||||
import TxDetails from "components/tx_details";
|
import TxDetails from "components/tx_details";
|
||||||
import FormatLoki from "components/format_loki";
|
import FormatOxen from "components/format_oxen";
|
||||||
import { i18n } from "boot/i18n";
|
import { i18n } from "boot/i18n";
|
||||||
import ContextMenu from "components/menus/contextmenu";
|
import ContextMenu from "components/menus/contextmenu";
|
||||||
|
|
||||||
|
@ -95,7 +95,7 @@ export default {
|
||||||
components: {
|
components: {
|
||||||
QSpinnerDots,
|
QSpinnerDots,
|
||||||
TxDetails,
|
TxDetails,
|
||||||
FormatLoki,
|
FormatOxen,
|
||||||
ContextMenu
|
ContextMenu
|
||||||
},
|
},
|
||||||
props: {
|
props: {
|
||||||
|
@ -328,7 +328,7 @@ export default {
|
||||||
|
|
||||||
<style lang="scss">
|
<style lang="scss">
|
||||||
.tx-list {
|
.tx-list {
|
||||||
.loki-list-item {
|
.oxen-list-item {
|
||||||
padding-top: 0;
|
padding-top: 0;
|
||||||
padding-bottom: 0;
|
padding-bottom: 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,22 +1,25 @@
|
||||||
<template>
|
<template>
|
||||||
<div class="column wallet-info">
|
<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>
|
<div class="title">{{ info.name }}</div>
|
||||||
<WalletSettings />
|
<WalletSettings />
|
||||||
</div>
|
</div>
|
||||||
<div class="wallet-content">
|
<div class="wallet-content oxen-navy">
|
||||||
<div class="row justify-center">
|
<div class="row justify-center">
|
||||||
<div class="funds column items-center">
|
<div class="funds column items-center">
|
||||||
<div class="balance">
|
<div class="balance">
|
||||||
<div class="text">
|
<div class="text">
|
||||||
<span>{{ $t("strings.lokiBalance") }}</span>
|
<span>{{ $t("strings.oxenBalance") }}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="value">
|
<div class="value">
|
||||||
<span><FormatLoki :amount="info.balance"/></span>
|
<span><FormatOxen :amount="info.balance"/></span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="row unlocked">
|
<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>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -30,13 +33,13 @@
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import { mapState } from "vuex";
|
import { mapState } from "vuex";
|
||||||
import FormatLoki from "components/format_loki";
|
import FormatOxen from "components/format_oxen";
|
||||||
import WalletSettings from "components/menus/wallet_settings";
|
import WalletSettings from "components/menus/wallet_settings";
|
||||||
import CopyIcon from "components/icons/copy_icon";
|
import CopyIcon from "components/icons/copy_icon";
|
||||||
export default {
|
export default {
|
||||||
name: "WalletDetails",
|
name: "WalletDetails",
|
||||||
components: {
|
components: {
|
||||||
FormatLoki,
|
FormatOxen,
|
||||||
WalletSettings,
|
WalletSettings,
|
||||||
CopyIcon
|
CopyIcon
|
||||||
},
|
},
|
||||||
|
@ -58,7 +61,6 @@ export default {
|
||||||
|
|
||||||
.wallet-content {
|
.wallet-content {
|
||||||
text-align: center;
|
text-align: center;
|
||||||
background-color: #0a0a0a;
|
|
||||||
padding: 2em;
|
padding: 2em;
|
||||||
|
|
||||||
.balance {
|
.balance {
|
||||||
|
|
291
src/css/app.styl
291
src/css/app.styl
|
@ -55,6 +55,7 @@ footer,
|
||||||
font-family: 'RobotoMono-Light', monospace
|
font-family: 'RobotoMono-Light', monospace
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
.break-all {
|
.break-all {
|
||||||
word-break: break-all
|
word-break: break-all
|
||||||
}
|
}
|
||||||
|
@ -72,7 +73,7 @@ footer,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.text-area-loki {
|
.text-area-oxen {
|
||||||
margin-top: 0px;
|
margin-top: 0px;
|
||||||
margin-bottom: 0px;
|
margin-bottom: 0px;
|
||||||
}
|
}
|
||||||
|
@ -100,7 +101,7 @@ footer,
|
||||||
}
|
}
|
||||||
|
|
||||||
.q-layout, .app-content {
|
.q-layout, .app-content {
|
||||||
background: $loki-black-80;
|
background: $oxen-light-teal;
|
||||||
color:white;
|
color:white;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -138,7 +139,7 @@ footer,
|
||||||
}
|
}
|
||||||
|
|
||||||
.q-toolbar-inverted {
|
.q-toolbar-inverted {
|
||||||
background: none;
|
background: $oxen-navy;
|
||||||
padding-top: 0;
|
padding-top: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -153,9 +154,9 @@ footer,
|
||||||
.q-tab {
|
.q-tab {
|
||||||
text-transform: none;
|
text-transform: none;
|
||||||
|
|
||||||
&:hover {
|
// &:hover {
|
||||||
background-color: rgba(12,12,12,0.15)
|
// background-color: rgba(12,12,12,0.15)
|
||||||
}
|
// }
|
||||||
|
|
||||||
.q-icon {
|
.q-icon {
|
||||||
font-size: 22px;
|
font-size: 22px;
|
||||||
|
@ -196,19 +197,22 @@ footer,
|
||||||
.text {
|
.text {
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
margin-top: 8px;
|
margin-top: 8px;
|
||||||
color: #cecece;
|
color: $oxen-navy;
|
||||||
}
|
}
|
||||||
|
|
||||||
.value {
|
.value {
|
||||||
font-size: 24px;
|
font-size: 24px;
|
||||||
margin-top: 4px;
|
margin-top: 4px;
|
||||||
font-weight: 800;
|
font-weight: 300;
|
||||||
color: #cecece;
|
color: $oxen-navy;
|
||||||
font-weight:300;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.q-checkbox {
|
||||||
|
color: $oxen-navy
|
||||||
|
}
|
||||||
|
|
||||||
.q-loading + .modal {
|
.q-loading + .modal {
|
||||||
z-index: 9999 !important;
|
z-index: 9999 !important;
|
||||||
}
|
}
|
||||||
|
@ -220,7 +224,7 @@ footer,
|
||||||
}
|
}
|
||||||
|
|
||||||
.q-footer.status-footer {
|
.q-footer.status-footer {
|
||||||
background: #000000;
|
background: $oxen-navy;
|
||||||
color: rgba(255, 255, 255, 0.51);
|
color: rgba(255, 255, 255, 0.51);
|
||||||
border-top: 1px solid #333;
|
border-top: 1px solid #333;
|
||||||
padding-top: 2px;
|
padding-top: 2px;
|
||||||
|
@ -242,7 +246,7 @@ footer,
|
||||||
}
|
}
|
||||||
|
|
||||||
.ready {
|
.ready {
|
||||||
color: $loki-green-solid;
|
color: $positive;
|
||||||
}
|
}
|
||||||
|
|
||||||
.scanning, .syncing {
|
.scanning, .syncing {
|
||||||
|
@ -271,11 +275,12 @@ footer,
|
||||||
}
|
}
|
||||||
|
|
||||||
div:first-child {
|
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 {
|
div:last-child {
|
||||||
background-color: $loki-green-solid;
|
background-color: $positive;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -315,10 +320,10 @@ footer,
|
||||||
.q-item.tx-snode,
|
.q-item.tx-snode,
|
||||||
.q-item.tx-gov {
|
.q-item.tx-gov {
|
||||||
.amount span {
|
.amount span {
|
||||||
color: #43bd43;
|
color: $oxen-navy;
|
||||||
&:before {
|
&:before {
|
||||||
content: "+";
|
content: "+";
|
||||||
color: #43bd43;
|
color: $oxen-navy;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -332,11 +337,11 @@ footer,
|
||||||
.q-item.tx-out,
|
.q-item.tx-out,
|
||||||
.q-item.tx-pending {
|
.q-item.tx-pending {
|
||||||
.amount span {
|
.amount span {
|
||||||
color: white;
|
// color: white;
|
||||||
&:before {
|
&:before {
|
||||||
content: "-";
|
content: "-";
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
color: white;
|
// color: white;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -360,24 +365,39 @@ footer,
|
||||||
}
|
}
|
||||||
|
|
||||||
.q-menu {
|
.q-menu {
|
||||||
background: #222;
|
background: white;
|
||||||
color:#cecece;
|
color: $oxen-navy !important;
|
||||||
|
|
||||||
.q-list-separator > .q-item-division + .q-item-division, .q-item-division + .q-separator {
|
.q-list-separator > .q-item-division + .q-item-division, .q-item-division + .q-separator {
|
||||||
border-top: 1px solid #333;
|
border-top: 1px solid #333;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// .q-item:hover {
|
||||||
|
// background: $oxen-teal;
|
||||||
|
// color: white;
|
||||||
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
.menu-list {
|
.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 {
|
.confirm-tx-card {
|
||||||
color: "primary";
|
|
||||||
width: 450px;
|
width: 450px;
|
||||||
max-width: 450x;
|
max-width: 450x;
|
||||||
|
|
||||||
|
color: $oxen-navy !important;
|
||||||
|
|
||||||
.confirm-list {
|
.confirm-list {
|
||||||
.q-item {
|
.q-item {
|
||||||
max-height: 100%;
|
max-height: 100%;
|
||||||
|
@ -389,7 +409,7 @@ footer,
|
||||||
}
|
}
|
||||||
|
|
||||||
.label {
|
.label {
|
||||||
color: #cecece;
|
color: $oxen-purple;
|
||||||
padding-right: 6px;
|
padding-right: 6px;
|
||||||
}
|
}
|
||||||
.address-value {
|
.address-value {
|
||||||
|
@ -398,7 +418,7 @@ footer,
|
||||||
|
|
||||||
.confirm-send-btn {
|
.confirm-send-btn {
|
||||||
color: white;
|
color: white;
|
||||||
background: $positive;
|
background: $primary;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -407,11 +427,6 @@ footer,
|
||||||
background: $primary;
|
background: $primary;
|
||||||
color: white;
|
color: white;
|
||||||
max-width: 250px !important;
|
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 {
|
.modal.minimized {
|
||||||
|
@ -427,7 +442,6 @@ footer,
|
||||||
|
|
||||||
.modal {
|
.modal {
|
||||||
color: #cecece;
|
color: #cecece;
|
||||||
background-color: $dark;
|
|
||||||
|
|
||||||
.modal-header {
|
.modal-header {
|
||||||
margin-top: 6px;
|
margin-top: 6px;
|
||||||
|
@ -436,10 +450,6 @@ footer,
|
||||||
font-size: 24px;
|
font-size: 24px;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
}
|
}
|
||||||
.modal-content,
|
|
||||||
.modal-body {
|
|
||||||
background: $loki-black-80;
|
|
||||||
}
|
|
||||||
|
|
||||||
.q-header {
|
.q-header {
|
||||||
|
|
||||||
|
@ -452,9 +462,22 @@ footer,
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.q-toolbar {
|
||||||
|
background-color: $oxen-navy;
|
||||||
|
}
|
||||||
|
|
||||||
|
.header {
|
||||||
|
color: $oxen-navy;
|
||||||
|
}
|
||||||
|
|
||||||
|
.detail-page {
|
||||||
|
color: $oxen-navy;
|
||||||
|
}
|
||||||
|
|
||||||
.q-radio {
|
.q-radio {
|
||||||
|
color: $oxen-navy;
|
||||||
svg {
|
svg {
|
||||||
color: #cecece;
|
color: $oxen-navy;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -463,20 +486,30 @@ footer,
|
||||||
color: white;
|
color: white;
|
||||||
|
|
||||||
.qr-code-card {
|
.qr-code-card {
|
||||||
background-color: $dark;
|
background-color: white;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.loki-green {
|
.oxen-light-teal {
|
||||||
background: $loki-green;
|
background: $oxen-light-teal;
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
|
||||||
|
.oxen-navy {
|
||||||
|
background: $oxen-navy;
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
|
||||||
|
.oxen-teal {
|
||||||
|
background: $oxen-teal;
|
||||||
color: white;
|
color: white;
|
||||||
}
|
}
|
||||||
|
|
||||||
.startup-icons {
|
.startup-icons {
|
||||||
.solid {
|
.solid {
|
||||||
color:$loki-green-solid;
|
color:$oxen-teal;
|
||||||
g,path {
|
g,path {
|
||||||
fill: $loki-green-solid;
|
fill: $oxen-teal;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -489,12 +522,21 @@ footer,
|
||||||
|
|
||||||
.navigation {
|
.navigation {
|
||||||
.q-btn {
|
.q-btn {
|
||||||
|
background: $oxen-navy;
|
||||||
color: white;
|
color: white;
|
||||||
background: $loki-black-90;
|
|
||||||
|
.q-icon {
|
||||||
|
color: $oxen-teal;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.router-link-exact-active > .q-btn {
|
.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 {
|
.q-item {
|
||||||
background: $secondary;
|
background: $oxen-navy;
|
||||||
.wallet-icon {
|
.wallet-icon {
|
||||||
color: $tertiary;
|
color: $oxen-teal;
|
||||||
g,path {
|
g,path {
|
||||||
fill: $tertiary;
|
fill: $oxen-teal;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.q-item:hover, .q-item.selected {
|
.q-item:hover, .q-item.selected {
|
||||||
background: $primary !important;
|
background: $oxen-purple !important;
|
||||||
|
|
||||||
.wallet-icon {
|
.wallet-icon {
|
||||||
color:$loki-green-solid;
|
color: $oxen-teal;
|
||||||
g,path {
|
g,path {
|
||||||
fill: $loki-green-solid;
|
fill: $oxen-teal;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -530,20 +572,25 @@ footer,
|
||||||
}
|
}
|
||||||
|
|
||||||
.receive {
|
.receive {
|
||||||
.q-list-header {
|
|
||||||
color: #FFFFFF;
|
.list-header {
|
||||||
|
color: $oxen-navy;
|
||||||
}
|
}
|
||||||
|
|
||||||
.q-separator-component {
|
.q-separator-component {
|
||||||
background-color: $secondary;
|
background-color: white;
|
||||||
opacity: 0.4;
|
opacity: 0.4;
|
||||||
}
|
}
|
||||||
|
|
||||||
.primary-address {
|
.primary-address {
|
||||||
background: #3eb13e !important;
|
background: $oxen-teal !important;
|
||||||
|
|
||||||
.q-item, .q-item-side {
|
.q-item, .q-item-side {
|
||||||
color: white;
|
color: white;
|
||||||
|
|
||||||
|
.text-caption {
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.q-btn {
|
.q-btn {
|
||||||
|
@ -552,46 +599,58 @@ footer,
|
||||||
}
|
}
|
||||||
|
|
||||||
.primary-address:hover {
|
.primary-address:hover {
|
||||||
background: $loki-green-solid !important;
|
background: $oxen-navy !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.loki-list {
|
.oxen-list {
|
||||||
.loki-list-item {
|
.oxen-list-item {
|
||||||
background: #313131;
|
background: white;
|
||||||
-webkit-transition: background-color 0.2s ease-in;
|
-webkit-transition: background-color 0.2s ease-in;
|
||||||
transition: background-color 0.2s ease-in;
|
transition: background-color 0.2s ease-in;
|
||||||
|
|
||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
color: #cecece;
|
color: $oxen-navy;
|
||||||
padding-top: 6px;
|
padding-top: 6px;
|
||||||
padding-bottom: 6px;
|
padding-bottom: 6px;
|
||||||
|
|
||||||
margin: 0 16px;
|
margin: 0 16px;
|
||||||
border-radius: 3px;
|
border-radius: 3px;
|
||||||
|
|
||||||
+ .loki-list-item {
|
+ .oxen-list-item {
|
||||||
margin-top: 10px;
|
margin-top: 10px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.loki-list-item:hover {
|
.text-caption {
|
||||||
background: rgba(117,117,117,0.3);
|
color: $oxen-navy;
|
||||||
|
}
|
||||||
|
|
||||||
|
.oxen-list-item:hover {
|
||||||
|
background: $oxen-teal;
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.lns-record-list {
|
.record-type-title {
|
||||||
.q-item-label.unlocked {
|
font-weight: bold;
|
||||||
color: white;
|
margin-bottom: 40px;
|
||||||
}
|
padding-bottom: 40px;
|
||||||
|
color: $oxen-navy;
|
||||||
|
}
|
||||||
|
|
||||||
|
.records-group {
|
||||||
|
padding-bottom: 40px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.service-node-list {
|
.service-node-list {
|
||||||
.q-item {
|
.q-item {
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
background: #313131;
|
color: $oxen-navy;
|
||||||
|
background: white;
|
||||||
-webkit-transition: background-color 0.2s ease-in;
|
-webkit-transition: background-color 0.2s ease-in;
|
||||||
transition: background-color 0.2s ease-in;
|
transition: background-color 0.2s ease-in;
|
||||||
|
|
||||||
|
@ -600,14 +659,25 @@ footer,
|
||||||
+ .q-item {
|
+ .q-item {
|
||||||
margin-top: 10px;
|
margin-top: 10px;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
.q-item-sublabel {
|
.contrib-amounts {
|
||||||
color: $loki-black-50;
|
color: $oxen-navy;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
.q-item-label {
|
||||||
|
color: $oxen-navy;
|
||||||
}
|
}
|
||||||
|
|
||||||
.q-item:hover {
|
.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 {
|
.content {
|
||||||
border: 1px solid #484848;
|
border: 1px solid #484848;
|
||||||
|
background: white;
|
||||||
-webkit-transition: background-color 0.2s ease-in, border-color 0.2s ease-in;
|
-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;
|
transition: background-color 0.2s ease-in, border-color 0.2s ease-in;
|
||||||
}
|
}
|
||||||
|
|
||||||
&:not(.disable):not(.disable-hover) {
|
&:not(.disable):not(.disable-hover) {
|
||||||
.content:hover {
|
.content:hover {
|
||||||
background: #2e2e2e;
|
background: white;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -643,7 +722,7 @@ footer,
|
||||||
}
|
}
|
||||||
|
|
||||||
.label {
|
.label {
|
||||||
color: white;
|
color: $oxen-navy;
|
||||||
|
|
||||||
.optional {
|
.optional {
|
||||||
color: #7C7C7C;
|
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 {
|
.welcome {
|
||||||
.q-footer {
|
.q-footer {
|
||||||
background: $secondary
|
background: $secondary
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.welcome-container {
|
||||||
|
color: $oxen-navy;
|
||||||
|
}
|
||||||
|
|
||||||
.address-book, .address-header {
|
.address-book, .address-header {
|
||||||
.q-item-label, .header {
|
.q-item-label, .header {
|
||||||
color: white;
|
color: white;
|
||||||
|
@ -683,6 +755,10 @@ footer,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.signature-dialog {
|
||||||
|
color: $oxen-navy;
|
||||||
|
}
|
||||||
|
|
||||||
.check-transaction {
|
.check-transaction {
|
||||||
.good {
|
.good {
|
||||||
color: #43bd43;
|
color: #43bd43;
|
||||||
|
@ -712,3 +788,46 @@ footer,
|
||||||
.non-selectable {
|
.non-selectable {
|
||||||
color: #979797;
|
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
|
// It"s highly recommended to change the default colors
|
||||||
// to match your app"s branding.
|
// to match your app"s branding.
|
||||||
|
|
||||||
$primary = $loki-green
|
$primary = $oxen-teal
|
||||||
$secondary = $loki-black-90
|
$secondary = $oxen-light-teal
|
||||||
$tertiary = $loki-black-80
|
$accent = $oxen-navy
|
||||||
|
|
||||||
$neutral = #E0E1E2
|
$neutral = #E0E1E2
|
||||||
$positive = #21BA45
|
$positive = #21BA45
|
||||||
|
@ -26,10 +26,10 @@ $info = #31CCEC
|
||||||
$warning = #F2C037
|
$warning = #F2C037
|
||||||
|
|
||||||
$loki-green = linear-gradient(180deg, #419B41 0%, #43BD43 100%)
|
$loki-green = linear-gradient(180deg, #419B41 0%, #43BD43 100%)
|
||||||
$loki-green-solid = #5BCA5B;
|
|
||||||
$loki-green-dark-solid = #419B41;
|
|
||||||
|
|
||||||
$loki-black-90 = #0A0A0A
|
$oxen-navy = #1F1C47;
|
||||||
$loki-black-80 = #252525
|
$oxen-teal = #12C7BA;
|
||||||
$loki-black-60 = #313131
|
$oxen-light-teal = #DBF7F5;
|
||||||
$loki-black-50 = #7E7E7E;
|
$oxen-purple = #654192;
|
||||||
|
|
||||||
|
$loki-black-60 = #313131;
|
||||||
|
|
|
@ -14,21 +14,23 @@
|
||||||
// It"s highly recommended to change the default colors
|
// It"s highly recommended to change the default colors
|
||||||
// to match your app"s branding.
|
// to match your app"s branding.
|
||||||
|
|
||||||
$primary = $loki-green
|
// $primary = $loki-green
|
||||||
$secondary = $loki-black-90
|
// $secondary = $loki-black-90
|
||||||
$tertiary = $loki-black-80
|
// $tertiary = $loki-black-80
|
||||||
|
|
||||||
$neutral = #E0E1E2
|
// $neutral = #E0E1E2
|
||||||
$positive = #21BA45
|
// $positive = #21BA45
|
||||||
$negative = #DB2828
|
// $negative = #DB2828
|
||||||
$info = #31CCEC
|
// $info = #31CCEC
|
||||||
$warning = #F2C037
|
// $warning = #F2C037
|
||||||
|
|
||||||
$loki-green = linear-gradient(180deg, #419B41 0%, #43BD43 100%)
|
// $loki-green = linear-gradient(180deg, #419B41 0%, #43BD43 100%)
|
||||||
$loki-green-solid = #5BCA5B;
|
|
||||||
$loki-green-dark-solid = #419B41;
|
|
||||||
|
|
||||||
$loki-black-90 = #0A0A0A
|
// $oxen-navy = #1F1C47;
|
||||||
$loki-black-80 = #252525
|
// $oxen-teal = #12C7BA;
|
||||||
$loki-black-60 = #313131
|
// $oxen-light-teal = #DBF7F5;
|
||||||
$loki-black-50 = #7E7E7E;
|
|
||||||
|
// $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,
|
message: msg,
|
||||||
ok: {
|
ok: {
|
||||||
label: i18n.t(`dialog.${key}.ok`),
|
label: i18n.t(`dialog.${key}.ok`),
|
||||||
color: "positive"
|
color: "primary"
|
||||||
},
|
},
|
||||||
cancel: {
|
cancel: {
|
||||||
flat: true,
|
flat: true,
|
||||||
|
@ -98,8 +98,7 @@ export class Gateway extends EventEmitter {
|
||||||
this.app.store.state.gateway.app.config.appearance.theme === "dark"
|
this.app.store.state.gateway.app.config.appearance.theme === "dark"
|
||||||
? "white"
|
? "white"
|
||||||
: "dark"
|
: "dark"
|
||||||
},
|
}
|
||||||
dark: this.app.store.state.gateway.app.config.appearance.theme === "dark"
|
|
||||||
})
|
})
|
||||||
.onOk(() => {
|
.onOk(() => {
|
||||||
this.closeDialog = false;
|
this.closeDialog = false;
|
||||||
|
|
|
@ -243,7 +243,7 @@ export default {
|
||||||
copyViewKey: "View Key kopieren",
|
copyViewKey: "View Key kopieren",
|
||||||
createNewWallet: "Neue Wallet erstellen",
|
createNewWallet: "Neue Wallet erstellen",
|
||||||
deleteWallet: "Wallet löschen",
|
deleteWallet: "Wallet löschen",
|
||||||
exit: "Loki GUI Wallet schliessen",
|
exit: "Oxen GUI Wallet schliessen",
|
||||||
importOldGUIWallet: "Wallets von alter GUI importieren",
|
importOldGUIWallet: "Wallets von alter GUI importieren",
|
||||||
manageKeyImages: "Key Images verwalten",
|
manageKeyImages: "Key Images verwalten",
|
||||||
openWallet: "Wallet öffnen",
|
openWallet: "Wallet öffnen",
|
||||||
|
@ -332,7 +332,7 @@ export default {
|
||||||
noKeyImageExport: "Keine Key Images zum Exportieren gefunden",
|
noKeyImageExport: "Keine Key Images zum Exportieren gefunden",
|
||||||
usingLocalNode:
|
usingLocalNode:
|
||||||
"Zugang zur Remote Node nicht möglich, wechsle zur lokalen Node",
|
"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: {
|
placeholders: {
|
||||||
|
@ -408,9 +408,9 @@ export default {
|
||||||
destinationUnknown: "Ziel unbekannt",
|
destinationUnknown: "Ziel unbekannt",
|
||||||
editAddressBookEntry: "Adressbucheintrag bearbeiten",
|
editAddressBookEntry: "Adressbucheintrag bearbeiten",
|
||||||
loadingSettings: "Einstellungen werden geladen",
|
loadingSettings: "Einstellungen werden geladen",
|
||||||
lokiBalance: "Guthaben",
|
oxenBalance: "Guthaben",
|
||||||
lokiUnlockedBalance: "frei verfügbares Guthaben",
|
oxenUnlockedBalance: "frei verfügbares Guthaben",
|
||||||
lokiUnlockedShort: "frei verfügbar",
|
oxenUnlockedShort: "frei verfügbar",
|
||||||
noTransactionsFound: "Keine Transaktionen gefunden",
|
noTransactionsFound: "Keine Transaktionen gefunden",
|
||||||
notes: "Notizen",
|
notes: "Notizen",
|
||||||
numberOfUnspentOutputs: "Anzahl der unspent outputs",
|
numberOfUnspentOutputs: "Anzahl der unspent outputs",
|
||||||
|
|
|
@ -291,7 +291,7 @@ export default {
|
||||||
copyViewKey: "Copy view key",
|
copyViewKey: "Copy view key",
|
||||||
createNewWallet: "Create new wallet",
|
createNewWallet: "Create new wallet",
|
||||||
deleteWallet: "Delete Wallet",
|
deleteWallet: "Delete Wallet",
|
||||||
exit: "Exit Loki GUI Wallet",
|
exit: "Exit Oxen GUI Wallet",
|
||||||
importOldGUIWallet: "Import wallets from old GUI",
|
importOldGUIWallet: "Import wallets from old GUI",
|
||||||
manageKeyImages: "Manage Key Images",
|
manageKeyImages: "Manage Key Images",
|
||||||
openWallet: "Open wallet",
|
openWallet: "Open wallet",
|
||||||
|
@ -402,7 +402,7 @@ export default {
|
||||||
warnings: {
|
warnings: {
|
||||||
noKeyImageExport: "No key images found to export",
|
noKeyImageExport: "No key images found to export",
|
||||||
usingLocalNode: "Could not access remote node, switching to local only",
|
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: {
|
placeholders: {
|
||||||
|
@ -500,11 +500,11 @@ export default {
|
||||||
lnsDescription:
|
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.",
|
"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",
|
loadingSettings: "Loading settings",
|
||||||
lokiBalance: "Balance",
|
oxenBalance: "Balance",
|
||||||
lokinetNameDescription:
|
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: ",
|
"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",
|
oxenUnlockedBalance: "Unlocked balance",
|
||||||
lokiUnlockedShort: "Unlocked",
|
oxenUnlockedShort: "Unlocked",
|
||||||
me: "Me",
|
me: "Me",
|
||||||
noTransactionsFound: "No transactions found",
|
noTransactionsFound: "No transactions found",
|
||||||
notes: "Notes",
|
notes: "Notes",
|
||||||
|
|
|
@ -242,7 +242,7 @@ export default {
|
||||||
copyViewKey: "Copiar clave de visualización",
|
copyViewKey: "Copiar clave de visualización",
|
||||||
createNewWallet: "Crear nuevo monedero",
|
createNewWallet: "Crear nuevo monedero",
|
||||||
deleteWallet: "Eliminar 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",
|
importOldGUIWallet: "Importar monedero de una interfaz gráfica antigua",
|
||||||
manageKeyImages: "Administrar Imágenes de Clave",
|
manageKeyImages: "Administrar Imágenes de Clave",
|
||||||
openWallet: "Abrir monedero",
|
openWallet: "Abrir monedero",
|
||||||
|
@ -330,7 +330,7 @@ export default {
|
||||||
noKeyImageExport: "No se han encontrado claves para exportar",
|
noKeyImageExport: "No se han encontrado claves para exportar",
|
||||||
usingLocalNode:
|
usingLocalNode:
|
||||||
"No se ha podido acceder al nodo remoto, volviendo al modo local",
|
"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: {
|
placeholders: {
|
||||||
|
@ -403,9 +403,9 @@ export default {
|
||||||
destinationUnknown: "Destino Desconocido",
|
destinationUnknown: "Destino Desconocido",
|
||||||
editAddressBookEntry: "Modificar un registro de la libreta de direcciones",
|
editAddressBookEntry: "Modificar un registro de la libreta de direcciones",
|
||||||
loadingSettings: "Cargando configuración",
|
loadingSettings: "Cargando configuración",
|
||||||
lokiBalance: "Saldo",
|
oxenBalance: "Saldo",
|
||||||
lokiUnlockedBalance: "Saldo libre",
|
oxenUnlockedBalance: "Saldo libre",
|
||||||
lokiUnlockedShort: "Libre",
|
oxenUnlockedShort: "Libre",
|
||||||
noTransactionsFound: "No se han encontrado transacciones",
|
noTransactionsFound: "No se han encontrado transacciones",
|
||||||
notes: "Notas",
|
notes: "Notas",
|
||||||
numberOfUnspentOutputs: "Número de salidas no gastadas",
|
numberOfUnspentOutputs: "Número de salidas no gastadas",
|
||||||
|
@ -431,7 +431,7 @@ export default {
|
||||||
seedWords: "Palabras semilla",
|
seedWords: "Palabras semilla",
|
||||||
selectLanguage: "Escoja un idioma",
|
selectLanguage: "Escoja un idioma",
|
||||||
serviceNodeRegistrationDescription:
|
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",
|
spendKey: "Clave de gasto",
|
||||||
startingDaemon: "Iniciando servicio",
|
startingDaemon: "Iniciando servicio",
|
||||||
startingWallet: "Iniciando monedero",
|
startingWallet: "Iniciando monedero",
|
||||||
|
|
|
@ -244,7 +244,7 @@ export default {
|
||||||
copyViewKey: "Copier la clé de visibilité",
|
copyViewKey: "Copier la clé de visibilité",
|
||||||
createNewWallet: "Créer un nouveau portefeuille",
|
createNewWallet: "Créer un nouveau portefeuille",
|
||||||
deleteWallet: "Supprimer le 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",
|
importOldGUIWallet: "Importer le portefeuille depuis l’ancien GUI",
|
||||||
manageKeyImages: "Gérer les images clés",
|
manageKeyImages: "Gérer les images clés",
|
||||||
openWallet: "Ouvrir le portefeuille",
|
openWallet: "Ouvrir le portefeuille",
|
||||||
|
@ -334,7 +334,7 @@ export default {
|
||||||
noKeyImageExport: "Aucune clé image n'a été trouvé pour l'export",
|
noKeyImageExport: "Aucune clé image n'a été trouvé pour l'export",
|
||||||
usingLocalNode:
|
usingLocalNode:
|
||||||
"Impossible d'accéder au nœud distant, basculement en local uniquement",
|
"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: {
|
placeholders: {
|
||||||
|
@ -410,9 +410,9 @@ export default {
|
||||||
destinationUnknown: "Destination inconnue",
|
destinationUnknown: "Destination inconnue",
|
||||||
editAddressBookEntry: "Modifiez l'entrée du carnet d'adresses",
|
editAddressBookEntry: "Modifiez l'entrée du carnet d'adresses",
|
||||||
loadingSettings: "Chargement des réglages",
|
loadingSettings: "Chargement des réglages",
|
||||||
lokiBalance: "Solde",
|
oxenBalance: "Solde",
|
||||||
lokiUnlockedBalance: "Solde débloqué",
|
oxenUnlockedBalance: "Solde débloqué",
|
||||||
lokiUnlockedShort: "Débloqué",
|
oxenUnlockedShort: "Débloqué",
|
||||||
noTransactionsFound: "Aucune transaction trouvée",
|
noTransactionsFound: "Aucune transaction trouvée",
|
||||||
notes: "Notes",
|
notes: "Notes",
|
||||||
numberOfUnspentOutputs: "Nombre de sorties non dépensées",
|
numberOfUnspentOutputs: "Nombre de sorties non dépensées",
|
||||||
|
|
|
@ -330,7 +330,7 @@ export default {
|
||||||
noKeyImageExport: "Nenhuma chave de imagem encontrada para exportar",
|
noKeyImageExport: "Nenhuma chave de imagem encontrada para exportar",
|
||||||
usingLocalNode:
|
usingLocalNode:
|
||||||
"Não foi possível aceder ao nódulo remoto, mudando para nódulo local apenas",
|
"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: {
|
placeholders: {
|
||||||
|
@ -404,9 +404,9 @@ export default {
|
||||||
destinationUnknown: "Destino Desconhecido",
|
destinationUnknown: "Destino Desconhecido",
|
||||||
editAddressBookEntry: "Editar registo do livro de endereços",
|
editAddressBookEntry: "Editar registo do livro de endereços",
|
||||||
loadingSettings: "Carregando configurações",
|
loadingSettings: "Carregando configurações",
|
||||||
lokiBalance: "Saldo",
|
oxenBalance: "Saldo",
|
||||||
lokiUnlockedBalance: "Saldo desbloqueado",
|
oxenUnlockedBalance: "Saldo desbloqueado",
|
||||||
lokiUnlockedShort: "Desbloqueado",
|
oxenUnlockedShort: "Desbloqueado",
|
||||||
noTransactionsFound: "Nenhuma transação encontrada",
|
noTransactionsFound: "Nenhuma transação encontrada",
|
||||||
notes: "Notas",
|
notes: "Notas",
|
||||||
numberOfUnspentOutputs: "Número de outputs não gastos",
|
numberOfUnspentOutputs: "Número de outputs não gastos",
|
||||||
|
|
|
@ -241,7 +241,7 @@ export default {
|
||||||
copyViewKey: "Копировать Ключ Просмотра",
|
copyViewKey: "Копировать Ключ Просмотра",
|
||||||
createNewWallet: "Создать новый кошелек",
|
createNewWallet: "Создать новый кошелек",
|
||||||
deleteWallet: "Удалить Кошелек",
|
deleteWallet: "Удалить Кошелек",
|
||||||
exit: "Закрыть Кошелек Loki",
|
exit: "Закрыть Кошелек Oxen",
|
||||||
importOldGUIWallet: "Импортировать кошельки из старого GUI",
|
importOldGUIWallet: "Импортировать кошельки из старого GUI",
|
||||||
manageKeyImages: "Управлять Ключевыми Образами",
|
manageKeyImages: "Управлять Ключевыми Образами",
|
||||||
openWallet: "Открыть кошелек",
|
openWallet: "Открыть кошелек",
|
||||||
|
@ -329,7 +329,7 @@ export default {
|
||||||
noKeyImageExport: "Не найдено ключевых образов для экспорта",
|
noKeyImageExport: "Не найдено ключевых образов для экспорта",
|
||||||
usingLocalNode:
|
usingLocalNode:
|
||||||
"Не удалось подключиться к удаленной ноде, переключаемся на локальную ноду",
|
"Не удалось подключиться к удаленной ноде, переключаемся на локальную ноду",
|
||||||
usingRemoteNode: "Не найден файл lokid, используется удаленная нода"
|
usingRemoteNode: "Не найден файл oxend, используется удаленная нода"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
placeholders: {
|
placeholders: {
|
||||||
|
@ -403,9 +403,9 @@ export default {
|
||||||
destinationUnknown: "Назначение Неизвестно",
|
destinationUnknown: "Назначение Неизвестно",
|
||||||
editAddressBookEntry: "Редактировать запись адресной книги",
|
editAddressBookEntry: "Редактировать запись адресной книги",
|
||||||
loadingSettings: "Загрузка настроек",
|
loadingSettings: "Загрузка настроек",
|
||||||
lokiBalance: "Баланс",
|
oxenBalance: "Баланс",
|
||||||
lokiUnlockedBalance: "Разблокированый баланс",
|
oxenUnlockedBalance: "Разблокированый баланс",
|
||||||
lokiUnlockedShort: "Разблокировано",
|
oxenUnlockedShort: "Разблокировано",
|
||||||
noTransactionsFound: "Транзакции не найдены",
|
noTransactionsFound: "Транзакции не найдены",
|
||||||
notes: "Заметки",
|
notes: "Заметки",
|
||||||
numberOfUnspentOutputs: "Количество непотраченных выходов",
|
numberOfUnspentOutputs: "Количество непотраченных выходов",
|
||||||
|
|
|
@ -6,12 +6,24 @@
|
||||||
<MainMenu :disable-switch-wallet="true" />
|
<MainMenu :disable-switch-wallet="true" />
|
||||||
</template>
|
</template>
|
||||||
<template v-else>
|
<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>
|
</template>
|
||||||
<q-toolbar-title v-if="page_title == 'Loki'" class="flex items-center justify-center">
|
<q-toolbar-title
|
||||||
<img src="loki.svg" height="32" />
|
v-if="page_title == 'Oxen'"
|
||||||
|
class="flex items-center justify-center"
|
||||||
|
>
|
||||||
|
<img src="oxen-white.svg" height="32" />
|
||||||
</q-toolbar-title>
|
</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-toolbar>
|
||||||
</q-header>
|
</q-header>
|
||||||
|
|
||||||
|
@ -58,7 +70,7 @@ export default {
|
||||||
|
|
||||||
default:
|
default:
|
||||||
case "wallet-select":
|
case "wallet-select":
|
||||||
return "Loki";
|
return "Oxen";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
|
@ -2,9 +2,9 @@
|
||||||
<q-layout view="hHh Lpr lFf">
|
<q-layout view="hHh Lpr lFf">
|
||||||
<q-header class="shift-title">
|
<q-header class="shift-title">
|
||||||
<MainMenu />
|
<MainMenu />
|
||||||
<q-toolbar-title>
|
<q-toolbar-title class="oxen-light-teal">
|
||||||
<div class="flex items-center justify-center" style="margin-top:7px">
|
<div class="flex items-center justify-center" style="margin:8px">
|
||||||
<img src="loki.svg" height="32" />
|
<img src="oxen.svg" height="32" />
|
||||||
</div>
|
</div>
|
||||||
</q-toolbar-title>
|
</q-toolbar-title>
|
||||||
</q-header>
|
</q-header>
|
||||||
|
@ -27,16 +27,40 @@
|
||||||
/>
|
/>
|
||||||
</router-link>
|
</router-link>
|
||||||
<router-link to="/wallet/receive">
|
<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>
|
||||||
<router-link to="/wallet/servicenode">
|
<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>
|
||||||
<router-link to="/wallet/lns">
|
<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>
|
||||||
<router-link to="/wallet/advanced">
|
<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>
|
||||||
<router-link to="/wallet/addressbook" class="address">
|
<router-link to="/wallet/addressbook" class="address">
|
||||||
<q-btn class="single-icon" size="md" icon="person" />
|
<q-btn class="single-icon" size="md" icon="person" />
|
||||||
|
|
|
@ -9,9 +9,9 @@ export default {
|
||||||
? openContributionRemaining /
|
? openContributionRemaining /
|
||||||
(MAX_NUMBER_OF_CONTRIBUTORS - node.contributors.length)
|
(MAX_NUMBER_OF_CONTRIBUTORS - node.contributors.length)
|
||||||
: 0;
|
: 0;
|
||||||
const minContributionLoki = minContributionAtomicUnits / 1e9;
|
const minContributionOxen = minContributionAtomicUnits / 1e9;
|
||||||
// ceiling to 4 decimal places
|
// ceiling to 4 decimal places
|
||||||
return minContributionLoki.toFixed(4);
|
return minContributionOxen.toFixed(4);
|
||||||
},
|
},
|
||||||
openForContribution(node) {
|
openForContribution(node) {
|
||||||
const openContributionRemaining =
|
const openContributionRemaining =
|
||||||
|
@ -20,7 +20,7 @@ export default {
|
||||||
: 0;
|
: 0;
|
||||||
return openContributionRemaining;
|
return openContributionRemaining;
|
||||||
},
|
},
|
||||||
openForContributionLoki(node) {
|
openForContriubtionOxen(node) {
|
||||||
return (this.openForContribution(node) / 1e9).toFixed(4);
|
return (this.openForContribution(node) / 1e9).toFixed(4);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
<q-page>
|
<q-page>
|
||||||
<div class="init-screen-page text-center">
|
<div class="init-screen-page text-center">
|
||||||
<div class="absolute-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 class="startup-icons q-mt-xl q-mb-lg">
|
||||||
<div ref="backend">
|
<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"
|
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"
|
class="si-glyph-fill"
|
||||||
></path>
|
></path>
|
||||||
<rect x="7" y="1" width="0.922" height="14.084" class="si-glyph-fill"></rect>
|
<rect
|
||||||
<rect x="0" y="7" width="13.96" height="0.922" class="si-glyph-fill"></rect>
|
x="7"
|
||||||
<rect x="1" y="4" width="12.406" height="0.906" class="si-glyph-fill"></rect>
|
y="1"
|
||||||
<rect x="1" y="10" width="12.406" height="0.922" class="si-glyph-fill"></rect>
|
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
|
<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"
|
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"
|
class="si-glyph-fill"
|
||||||
|
@ -112,7 +136,9 @@
|
||||||
{{ message }}
|
{{ message }}
|
||||||
</div>
|
</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>
|
||||||
|
|
||||||
<div class="absolute-bottom">
|
<div class="absolute-bottom">
|
||||||
|
@ -144,7 +170,10 @@ export default {
|
||||||
if (this.status.code < 3 || !this.isLocalDaemon) return null;
|
if (this.status.code < 3 || !this.isLocalDaemon) return null;
|
||||||
|
|
||||||
const currentHeight = this.daemon.info.height_without_bootstrap;
|
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);
|
const percentage = ((100 * currentHeight) / targetHeight).toFixed(1);
|
||||||
|
|
||||||
if (targetHeight === 0 || currentHeight >= targetHeight) return null;
|
if (targetHeight === 0 || currentHeight >= targetHeight) return null;
|
||||||
|
@ -200,7 +229,8 @@ export default {
|
||||||
this.$q.notify({
|
this.$q.notify({
|
||||||
type: "warning",
|
type: "warning",
|
||||||
timeout: 2000,
|
timeout: 2000,
|
||||||
message: "Warning: " + this.$t("notification.warnings.usingRemoteNode")
|
message:
|
||||||
|
"Warning: " + this.$t("notification.warnings.usingRemoteNode")
|
||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
case 6:
|
case 6:
|
||||||
|
@ -224,6 +254,9 @@ export default {
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="scss">
|
<style lang="scss">
|
||||||
|
.message {
|
||||||
|
color: #1f1c47;
|
||||||
|
}
|
||||||
.init-screen-page {
|
.init-screen-page {
|
||||||
height: 100vh;
|
height: 100vh;
|
||||||
position: relative;
|
position: relative;
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
<q-page>
|
<q-page>
|
||||||
<div class="init-screen-page text-center">
|
<div class="init-screen-page text-center">
|
||||||
<div class="absolute-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">
|
<div class="q-mt-xl q-mb-lg">
|
||||||
<q-spinner color="primary" :size="30" />
|
<q-spinner color="primary" :size="30" />
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
class="first-step"
|
class="first-step"
|
||||||
>
|
>
|
||||||
<div class="welcome-container">
|
<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>Wallet Version: v{{ version }}</div>
|
||||||
<div>Daemon Version: {{ daemonVersion }}</div>
|
<div>Daemon Version: {{ daemonVersion }}</div>
|
||||||
<LanguageSelect class="q-mt-lg" @select="onLanguageSelected" />
|
<LanguageSelect class="q-mt-lg" @select="onLanguageSelected" />
|
||||||
|
@ -105,7 +105,6 @@ export default {
|
||||||
|
|
||||||
.welcome-stepper {
|
.welcome-stepper {
|
||||||
height: 100%;
|
height: 100%;
|
||||||
// the Loki lighter grey is behind it
|
|
||||||
background: transparent;
|
background: transparent;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
<template>
|
<template>
|
||||||
<q-page class="create-wallet">
|
<q-page class="create-wallet">
|
||||||
<div class="fields q-mx-md q-mt-md">
|
<div class="fields q-mx-md q-mt-md">
|
||||||
<LokiField
|
<OxenField
|
||||||
:label="$t('fieldLabels.walletName')"
|
:label="$t('fieldLabels.walletName')"
|
||||||
:error="$v.wallet.name.$error"
|
:error="$v.wallet.name.$error"
|
||||||
>
|
>
|
||||||
|
@ -14,21 +14,20 @@
|
||||||
@keyup.enter="create"
|
@keyup.enter="create"
|
||||||
@blur="$v.wallet.name.$touch"
|
@blur="$v.wallet.name.$touch"
|
||||||
/>
|
/>
|
||||||
</LokiField>
|
</OxenField>
|
||||||
|
|
||||||
<LokiField :label="$t('fieldLabels.seedLanguage')">
|
<OxenField :label="$t('fieldLabels.seedLanguage')">
|
||||||
<q-select
|
<q-select
|
||||||
v-model="wallet.language"
|
v-model="wallet.language"
|
||||||
:options="languageOptions"
|
:options="languageOptions"
|
||||||
:dark="theme == 'dark'"
|
|
||||||
borderless
|
borderless
|
||||||
dense
|
dense
|
||||||
emit-value
|
emit-value
|
||||||
map-options
|
map-options
|
||||||
/>
|
/>
|
||||||
</LokiField>
|
</OxenField>
|
||||||
|
|
||||||
<LokiField :label="$t('fieldLabels.password')" optional>
|
<OxenField :label="$t('fieldLabels.password')" optional>
|
||||||
<q-input
|
<q-input
|
||||||
v-model="wallet.password"
|
v-model="wallet.password"
|
||||||
type="password"
|
type="password"
|
||||||
|
@ -38,9 +37,9 @@
|
||||||
dense
|
dense
|
||||||
@keyup.enter="create"
|
@keyup.enter="create"
|
||||||
/>
|
/>
|
||||||
</LokiField>
|
</OxenField>
|
||||||
|
|
||||||
<LokiField :label="$t('fieldLabels.confirmPassword')">
|
<OxenField :label="$t('fieldLabels.confirmPassword')">
|
||||||
<q-input
|
<q-input
|
||||||
v-model="wallet.password_confirm"
|
v-model="wallet.password_confirm"
|
||||||
type="password"
|
type="password"
|
||||||
|
@ -49,7 +48,7 @@
|
||||||
dense
|
dense
|
||||||
@keyup.enter="create"
|
@keyup.enter="create"
|
||||||
/>
|
/>
|
||||||
</LokiField>
|
</OxenField>
|
||||||
|
|
||||||
<q-btn
|
<q-btn
|
||||||
class="submit-button"
|
class="submit-button"
|
||||||
|
@ -64,10 +63,10 @@
|
||||||
<script>
|
<script>
|
||||||
import { required } from "vuelidate/lib/validators";
|
import { required } from "vuelidate/lib/validators";
|
||||||
import { mapState } from "vuex";
|
import { mapState } from "vuex";
|
||||||
import LokiField from "components/loki_field";
|
import OxenField from "components/oxen_field";
|
||||||
export default {
|
export default {
|
||||||
components: {
|
components: {
|
||||||
LokiField
|
OxenField
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
const languageOptions = [
|
const languageOptions = [
|
||||||
|
|
|
@ -7,8 +7,18 @@
|
||||||
{{ info.address }}
|
{{ info.address }}
|
||||||
</div>
|
</div>
|
||||||
<div class="q-item-side">
|
<div class="q-item-side">
|
||||||
<q-btn color="primary" padding="xs" size="sm" icon="file_copy" @click="copyAddress">
|
<q-btn
|
||||||
<q-tooltip anchor="center left" self="center right" :offset="[5, 10]">
|
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") }}
|
{{ $t("menuItems.copyAddress") }}
|
||||||
</q-tooltip>
|
</q-tooltip>
|
||||||
</q-btn>
|
</q-btn>
|
||||||
|
@ -37,7 +47,10 @@
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</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">
|
<template v-if="secret.view_key != secret.spend_key">
|
||||||
<h6 class="q-mb-xs title">{{ $t("strings.viewKey") }}</h6>
|
<h6 class="q-mb-xs title">{{ $t("strings.viewKey") }}</h6>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
|
@ -45,8 +58,18 @@
|
||||||
{{ secret.view_key }}
|
{{ secret.view_key }}
|
||||||
</div>
|
</div>
|
||||||
<div class="q-item-side">
|
<div class="q-item-side">
|
||||||
<q-btn color="primary" padding="xs" size="sm" icon="file_copy" @click="copyPrivateKey('view_key', $event)">
|
<q-btn
|
||||||
<q-tooltip anchor="center left" self="center right" :offset="[5, 10]">
|
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") }}
|
{{ $t("menuItems.copyViewKey") }}
|
||||||
</q-tooltip>
|
</q-tooltip>
|
||||||
</q-btn>
|
</q-btn>
|
||||||
|
@ -61,8 +84,18 @@
|
||||||
{{ secret.spend_key }}
|
{{ secret.spend_key }}
|
||||||
</div>
|
</div>
|
||||||
<div class="q-item-side">
|
<div class="q-item-side">
|
||||||
<q-btn color="primary" padding="xs" size="sm" icon="file_copy" @click="copyPrivateKey('spend_key', $event)">
|
<q-btn
|
||||||
<q-tooltip anchor="center left" self="center right" :offset="[5, 10]">
|
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") }}
|
{{ $t("menuItems.copySpendKey") }}
|
||||||
</q-tooltip>
|
</q-tooltip>
|
||||||
</q-btn>
|
</q-btn>
|
||||||
|
@ -71,7 +104,12 @@
|
||||||
</template>
|
</template>
|
||||||
</q-expansion-item>
|
</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>
|
</q-page>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
@ -137,9 +175,7 @@ export default {
|
||||||
ok: {
|
ok: {
|
||||||
label: this.$t("dialog.buttons.ok"),
|
label: this.$t("dialog.buttons.ok"),
|
||||||
color: "primary"
|
color: "primary"
|
||||||
},
|
}
|
||||||
color: this.theme === "dark" ? "white" : "dark",
|
|
||||||
dark: this.theme === "dark"
|
|
||||||
})
|
})
|
||||||
.onDismiss(() => null)
|
.onDismiss(() => null)
|
||||||
.onCancel(() => null)
|
.onCancel(() => null)
|
||||||
|
@ -166,45 +202,4 @@ export default {
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="scss">
|
<style lang="scss"></style>
|
||||||
.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>
|
|
||||||
|
|
|
@ -1,7 +1,10 @@
|
||||||
<template>
|
<template>
|
||||||
<q-page>
|
<q-page>
|
||||||
<div class="q-mx-md import-wallet">
|
<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
|
<q-input
|
||||||
v-model="wallet.name"
|
v-model="wallet.name"
|
||||||
:placeholder="$t('placeholders.walletName')"
|
:placeholder="$t('placeholders.walletName')"
|
||||||
|
@ -11,9 +14,13 @@
|
||||||
@keyup.enter="import_wallet"
|
@keyup.enter="import_wallet"
|
||||||
@blur="$v.wallet.name.$touch"
|
@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
|
<q-input
|
||||||
v-model="wallet.path"
|
v-model="wallet.path"
|
||||||
:placeholder="$t('placeholders.selectAFile')"
|
:placeholder="$t('placeholders.selectAFile')"
|
||||||
|
@ -22,16 +29,22 @@
|
||||||
borderless
|
borderless
|
||||||
dense
|
dense
|
||||||
/>
|
/>
|
||||||
<input id="walletPath" ref="fileInput" type="file" hidden @change="setWalletPath" />
|
<input
|
||||||
|
id="walletPath"
|
||||||
|
ref="fileInput"
|
||||||
|
type="file"
|
||||||
|
hidden
|
||||||
|
@change="setWalletPath"
|
||||||
|
/>
|
||||||
<q-btn
|
<q-btn
|
||||||
color="secondary"
|
color="secondary"
|
||||||
:label="$t('buttons.selectWalletFile')"
|
:label="$t('buttons.selectWalletFile')"
|
||||||
:text-color="theme == 'dark' ? 'white' : 'dark'"
|
:text-color="theme == 'dark' ? 'white' : 'dark'"
|
||||||
@click="selectFile"
|
@click="selectFile"
|
||||||
/>
|
/>
|
||||||
</LokiField>
|
</OxenField>
|
||||||
|
|
||||||
<LokiField :label="$t('fieldLabels.password')">
|
<OxenField :label="$t('fieldLabels.password')">
|
||||||
<q-input
|
<q-input
|
||||||
v-model="wallet.password"
|
v-model="wallet.password"
|
||||||
:placeholder="$t('placeholders.walletPassword')"
|
:placeholder="$t('placeholders.walletPassword')"
|
||||||
|
@ -41,9 +54,9 @@
|
||||||
dense
|
dense
|
||||||
@keyup.enter="import_wallet"
|
@keyup.enter="import_wallet"
|
||||||
/>
|
/>
|
||||||
</LokiField>
|
</OxenField>
|
||||||
|
|
||||||
<LokiField :label="$t('fieldLabels.confirmPassword')">
|
<OxenField :label="$t('fieldLabels.confirmPassword')">
|
||||||
<q-input
|
<q-input
|
||||||
v-model="wallet.password_confirm"
|
v-model="wallet.password_confirm"
|
||||||
type="password"
|
type="password"
|
||||||
|
@ -52,8 +65,13 @@
|
||||||
dense
|
dense
|
||||||
@keyup.enter="import_wallet"
|
@keyup.enter="import_wallet"
|
||||||
/>
|
/>
|
||||||
</LokiField>
|
</OxenField>
|
||||||
<q-btn class="submit-button" color="primary" :label="$tc('buttons.importWallet', 1)" @click="import_wallet" />
|
<q-btn
|
||||||
|
class="submit-button"
|
||||||
|
color="primary"
|
||||||
|
:label="$tc('buttons.importWallet', 1)"
|
||||||
|
@click="import_wallet"
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
</q-page>
|
</q-page>
|
||||||
</template>
|
</template>
|
||||||
|
@ -61,10 +79,10 @@
|
||||||
<script>
|
<script>
|
||||||
import { required } from "vuelidate/lib/validators";
|
import { required } from "vuelidate/lib/validators";
|
||||||
import { mapState } from "vuex";
|
import { mapState } from "vuex";
|
||||||
import LokiField from "components/loki_field";
|
import OxenField from "components/oxen_field";
|
||||||
export default {
|
export default {
|
||||||
components: {
|
components: {
|
||||||
LokiField
|
OxenField
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
|
@ -172,7 +190,7 @@ export default {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.loki-field {
|
.oxen-field {
|
||||||
margin-top: 16px;
|
margin-top: 16px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,15 +1,30 @@
|
||||||
<template>
|
<template>
|
||||||
<q-page>
|
<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">
|
<template v-if="wallets.list.length">
|
||||||
<div class="header row justify-between items-center">
|
<div class="header row justify-between items-center">
|
||||||
<div class="header-title">
|
<div class="header-title">
|
||||||
{{ $t("titles.yourWallets") }}
|
{{ $t("titles.yourWallets") }}
|
||||||
</div>
|
</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-menu class="header-popover" :content-class="'header-popover'">
|
||||||
<q-list separator>
|
<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>
|
<q-item-section>
|
||||||
{{ action.name }}
|
{{ action.name }}
|
||||||
</q-item-section>
|
</q-item-section>
|
||||||
|
@ -35,7 +50,12 @@
|
||||||
class="si-glyph si-glyph-wallet"
|
class="si-glyph si-glyph-wallet"
|
||||||
>
|
>
|
||||||
<defs class="si-glyph-fill"></defs>
|
<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">
|
<g transform="translate(1.000000, 0.000000)" fill="#434343">
|
||||||
<path
|
<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"
|
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-icon>
|
||||||
</q-item-section>
|
</q-item-section>
|
||||||
<q-item-section>
|
<q-item-section>
|
||||||
<q-item-label class="wallet-name" caption>{{ wallet.name }}</q-item-label>
|
<q-item-label class="wallet-name" caption>{{
|
||||||
<q-item-label class="monospace ellipsis" caption>{{ wallet.address }}</q-item-label>
|
wallet.name
|
||||||
|
}}</q-item-label>
|
||||||
|
<q-item-label class="monospace ellipsis" caption>{{
|
||||||
|
wallet.address
|
||||||
|
}}</q-item-label>
|
||||||
</q-item-section>
|
</q-item-section>
|
||||||
<ContextMenu
|
<ContextMenu
|
||||||
:menu-items="menuItems"
|
:menu-items="menuItems"
|
||||||
|
@ -67,7 +91,11 @@
|
||||||
<q-separator />
|
<q-separator />
|
||||||
</template>
|
</template>
|
||||||
<template v-else>
|
<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>
|
<q-item-section>
|
||||||
{{ action.name }}
|
{{ action.name }}
|
||||||
</q-item-section>
|
</q-item-section>
|
||||||
|
@ -173,15 +201,14 @@ export default {
|
||||||
type: "password"
|
type: "password"
|
||||||
},
|
},
|
||||||
ok: {
|
ok: {
|
||||||
label: this.$t("dialog.buttons.open")
|
label: this.$t("dialog.buttons.open"),
|
||||||
|
color: "primary"
|
||||||
},
|
},
|
||||||
cancel: {
|
cancel: {
|
||||||
flat: true,
|
flat: true,
|
||||||
label: this.$t("dialog.buttons.cancel"),
|
label: this.$t("dialog.buttons.cancel")
|
||||||
color: this.theme == "dark" ? "white" : "dark"
|
|
||||||
},
|
},
|
||||||
dark: this.theme == "dark",
|
color: "#1F1C47"
|
||||||
color: "positive"
|
|
||||||
})
|
})
|
||||||
.onOk(password => {
|
.onOk(password => {
|
||||||
this.$q.loading.show({
|
this.$q.loading.show({
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
<template>
|
<template>
|
||||||
<q-page>
|
<q-page>
|
||||||
<div class="q-mx-md">
|
<div class="q-mx-md">
|
||||||
<LokiField
|
<OxenField
|
||||||
class="q-mt-md"
|
class="q-mt-md"
|
||||||
:label="$t('fieldLabels.walletName')"
|
:label="$t('fieldLabels.walletName')"
|
||||||
:error="$v.wallet.name.$error"
|
:error="$v.wallet.name.$error"
|
||||||
|
@ -9,34 +9,32 @@
|
||||||
<q-input
|
<q-input
|
||||||
v-model="wallet.name"
|
v-model="wallet.name"
|
||||||
:placeholder="$t('placeholders.walletName')"
|
:placeholder="$t('placeholders.walletName')"
|
||||||
:dark="theme == 'dark'"
|
|
||||||
borderless
|
borderless
|
||||||
dense
|
dense
|
||||||
@keyup.enter="restore_wallet"
|
@keyup.enter="restore_wallet"
|
||||||
@blur="$v.wallet.name.$touch"
|
@blur="$v.wallet.name.$touch"
|
||||||
/>
|
/>
|
||||||
</LokiField>
|
</OxenField>
|
||||||
|
|
||||||
<LokiField
|
<OxenField
|
||||||
class="q-mt-md"
|
class="q-mt-md"
|
||||||
:label="$t('fieldLabels.mnemonicSeed')"
|
:label="$t('fieldLabels.mnemonicSeed')"
|
||||||
:error="$v.wallet.seed.$error"
|
:error="$v.wallet.seed.$error"
|
||||||
>
|
>
|
||||||
<q-input
|
<q-input
|
||||||
v-model="wallet.seed"
|
v-model="wallet.seed"
|
||||||
class="full-width text-area-loki"
|
class="full-width text-area-oxen"
|
||||||
:placeholder="$t('placeholders.mnemonicSeed')"
|
:placeholder="$t('placeholders.mnemonicSeed')"
|
||||||
type="textarea"
|
type="textarea"
|
||||||
:dark="theme == 'dark'"
|
|
||||||
borderless
|
borderless
|
||||||
dense
|
dense
|
||||||
@blur="$v.wallet.seed.$touch"
|
@blur="$v.wallet.seed.$touch"
|
||||||
/>
|
/>
|
||||||
</LokiField>
|
</OxenField>
|
||||||
|
|
||||||
<div class="row items-end q-mt-md">
|
<div class="row items-end q-mt-md">
|
||||||
<div class="col-md-9 col-sm-8">
|
<div class="col-md-9 col-sm-8">
|
||||||
<LokiField
|
<OxenField
|
||||||
v-if="wallet.refresh_type == 'date'"
|
v-if="wallet.refresh_type == 'date'"
|
||||||
:label="$t('fieldLabels.restoreFromDate')"
|
:label="$t('fieldLabels.restoreFromDate')"
|
||||||
>
|
>
|
||||||
|
@ -75,8 +73,8 @@
|
||||||
</q-icon>
|
</q-icon>
|
||||||
</template>
|
</template>
|
||||||
</q-input>
|
</q-input>
|
||||||
</LokiField>
|
</OxenField>
|
||||||
<LokiField
|
<OxenField
|
||||||
v-else-if="wallet.refresh_type == 'height'"
|
v-else-if="wallet.refresh_type == 'height'"
|
||||||
:label="$t('fieldLabels.restoreFromBlockHeight')"
|
:label="$t('fieldLabels.restoreFromBlockHeight')"
|
||||||
:error="$v.wallet.refresh_start_height.$error"
|
:error="$v.wallet.refresh_start_height.$error"
|
||||||
|
@ -90,13 +88,12 @@
|
||||||
dense
|
dense
|
||||||
@blur="$v.wallet.refresh_start_height.$touch"
|
@blur="$v.wallet.refresh_start_height.$touch"
|
||||||
/>
|
/>
|
||||||
</LokiField>
|
</OxenField>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-sm-4 col-md-3">
|
<div class="col-sm-4 col-md-3">
|
||||||
<template v-if="wallet.refresh_type == 'date'">
|
<template v-if="wallet.refresh_type == 'date'">
|
||||||
<q-btn
|
<q-btn
|
||||||
class="restore-from-button"
|
class="restore-from-button"
|
||||||
:text-color="theme == 'dark' ? 'white' : 'dark'"
|
|
||||||
flat
|
flat
|
||||||
@click="wallet.refresh_type = 'height'"
|
@click="wallet.refresh_type = 'height'"
|
||||||
>
|
>
|
||||||
|
@ -109,7 +106,6 @@
|
||||||
<template v-else-if="wallet.refresh_type == 'height'">
|
<template v-else-if="wallet.refresh_type == 'height'">
|
||||||
<q-btn
|
<q-btn
|
||||||
class="restore-from-button"
|
class="restore-from-button"
|
||||||
:text-color="theme == 'dark' ? 'white' : 'dark'"
|
|
||||||
flat
|
flat
|
||||||
@click="wallet.refresh_type = 'date'"
|
@click="wallet.refresh_type = 'date'"
|
||||||
>
|
>
|
||||||
|
@ -122,7 +118,7 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<LokiField class="q-mt-md" :label="$t('fieldLabels.password')">
|
<OxenField class="q-mt-md" :label="$t('fieldLabels.password')">
|
||||||
<q-input
|
<q-input
|
||||||
v-model="wallet.password"
|
v-model="wallet.password"
|
||||||
:placeholder="$t('placeholders.walletPassword')"
|
:placeholder="$t('placeholders.walletPassword')"
|
||||||
|
@ -132,9 +128,9 @@
|
||||||
dense
|
dense
|
||||||
@keyup.enter="restore_wallet"
|
@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
|
<q-input
|
||||||
v-model="wallet.password_confirm"
|
v-model="wallet.password_confirm"
|
||||||
type="password"
|
type="password"
|
||||||
|
@ -143,7 +139,7 @@
|
||||||
dense
|
dense
|
||||||
@keyup.enter="restore_wallet"
|
@keyup.enter="restore_wallet"
|
||||||
/>
|
/>
|
||||||
</LokiField>
|
</OxenField>
|
||||||
<q-btn
|
<q-btn
|
||||||
class="submit-button"
|
class="submit-button"
|
||||||
color="primary"
|
color="primary"
|
||||||
|
@ -157,7 +153,7 @@
|
||||||
<script>
|
<script>
|
||||||
import { required, numeric } from "vuelidate/lib/validators";
|
import { required, numeric } from "vuelidate/lib/validators";
|
||||||
import { mapState } from "vuex";
|
import { mapState } from "vuex";
|
||||||
import LokiField from "components/loki_field";
|
import OxenField from "components/oxen_field";
|
||||||
import { date } from "quasar";
|
import { date } from "quasar";
|
||||||
import _ from "lodash";
|
import _ from "lodash";
|
||||||
|
|
||||||
|
@ -167,7 +163,7 @@ let dateFirstBlock = date.formatDate(timeStampFirstBlock, qDateFormat);
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
components: {
|
components: {
|
||||||
LokiField
|
OxenField
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
|
|
|
@ -7,11 +7,11 @@
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<template v-if="address_book_combined.length">
|
<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
|
<q-item
|
||||||
v-for="(entry, index) in address_book_combined"
|
v-for="(entry, index) in address_book_combined"
|
||||||
:key="`${entry.address}-${entry.name}-${index}`"
|
:key="`${entry.address}-${entry.name}-${index}`"
|
||||||
class="loki-list-item"
|
class="oxen-list-item"
|
||||||
@click.native="details(entry)"
|
@click.native="details(entry)"
|
||||||
>
|
>
|
||||||
<q-item-section>
|
<q-item-section>
|
||||||
|
@ -27,7 +27,7 @@
|
||||||
:name="entry.starred ? 'star' : 'star_border'"
|
:name="entry.starred ? 'star' : 'star_border'"
|
||||||
/>
|
/>
|
||||||
<q-btn
|
<q-btn
|
||||||
color="secondary"
|
color="primary"
|
||||||
style="margin-left: 10px;"
|
style="margin-left: 10px;"
|
||||||
:label="$t('buttons.send')"
|
:label="$t('buttons.send')"
|
||||||
:disabled="view_only"
|
:disabled="view_only"
|
||||||
|
@ -45,7 +45,7 @@
|
||||||
</q-list>
|
</q-list>
|
||||||
</template>
|
</template>
|
||||||
<template v-else>
|
<template v-else>
|
||||||
<p class="q-ma-md">{{ $t("strings.addressBookIsEmpty") }}</p>
|
<p class="q-ma-md tab-desc">{{ $t("strings.addressBookIsEmpty") }}</p>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<q-page-sticky position="bottom-right" :offset="[18, 18]">
|
<q-page-sticky position="bottom-right" :offset="[18, 18]">
|
||||||
|
@ -126,9 +126,10 @@ export default {
|
||||||
.header {
|
.header {
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
font-weight: 500;
|
font-weight: 500;
|
||||||
|
color: #1f1c47;
|
||||||
}
|
}
|
||||||
|
|
||||||
.loki-list-item {
|
.oxen-list-item {
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
padding-top: 12px;
|
padding-top: 12px;
|
||||||
padding-bottom: 12px;
|
padding-bottom: 12px;
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
<q-btn-toggle
|
<q-btn-toggle
|
||||||
v-model="screen"
|
v-model="screen"
|
||||||
toggle-color="primary"
|
toggle-color="primary"
|
||||||
color="secondary"
|
color="accent"
|
||||||
:options="[
|
:options="[
|
||||||
{ label: $t('titles.advanced.prove'), value: 'prove' },
|
{ label: $t('titles.advanced.prove'), value: 'prove' },
|
||||||
{
|
{
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
<q-btn-toggle
|
<q-btn-toggle
|
||||||
v-model="screen"
|
v-model="screen"
|
||||||
toggle-color="primary"
|
toggle-color="primary"
|
||||||
color="secondary"
|
color="accent"
|
||||||
:options="[
|
:options="[
|
||||||
{
|
{
|
||||||
label: $t('titles.lns.purchase'),
|
label: $t('titles.lns.purchase'),
|
||||||
|
|
|
@ -1,7 +1,9 @@
|
||||||
<template>
|
<template>
|
||||||
<q-page class="receive">
|
<q-page class="receive">
|
||||||
<q-list link no-border :dark="theme == 'dark'" class="loki-list">
|
<q-list link no-border :dark="theme == 'dark'" class="oxen-list">
|
||||||
<q-item-label header>{{ $t("strings.addresses.myPrimaryAddress") }}</q-item-label>
|
<q-item-label header class="list-header">{{
|
||||||
|
$t("strings.addresses.myPrimaryAddress")
|
||||||
|
}}</q-item-label>
|
||||||
<ReceiveItem
|
<ReceiveItem
|
||||||
v-for="address in address_list.primary"
|
v-for="address in address_list.primary"
|
||||||
:key="address.address"
|
:key="address.address"
|
||||||
|
@ -15,15 +17,20 @@
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<template v-if="address_list.used.length">
|
<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
|
<ReceiveItem
|
||||||
v-for="address in address_list.used"
|
v-for="address in address_list.used"
|
||||||
:key="address.address"
|
:key="address.address"
|
||||||
:address="address"
|
:address="address"
|
||||||
:sublabel="
|
:sublabel="
|
||||||
`${$t('strings.addresses.subAddress')} (${$t('strings.addresses.subAddressIndex', {
|
`${$t('strings.addresses.subAddress')} (${$t(
|
||||||
index: address.address_index
|
'strings.addresses.subAddressIndex',
|
||||||
})})`
|
{
|
||||||
|
index: address.address_index
|
||||||
|
}
|
||||||
|
)})`
|
||||||
"
|
"
|
||||||
:show-q-r="showQR"
|
:show-q-r="showQR"
|
||||||
:copy-address="copyAddress"
|
:copy-address="copyAddress"
|
||||||
|
@ -32,15 +39,20 @@
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<template v-if="address_list.unused.length">
|
<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
|
<ReceiveItem
|
||||||
v-for="address in address_list.unused"
|
v-for="address in address_list.unused"
|
||||||
:key="address.address"
|
:key="address.address"
|
||||||
:address="address"
|
:address="address"
|
||||||
:sublabel="
|
:sublabel="
|
||||||
`${$t('strings.addresses.subAddress')} (${$t('strings.addresses.subAddressIndex', {
|
`${$t('strings.addresses.subAddress')} (${$t(
|
||||||
index: address.address_index
|
'strings.addresses.subAddressIndex',
|
||||||
})})`
|
{
|
||||||
|
index: address.address_index
|
||||||
|
}
|
||||||
|
)})`
|
||||||
"
|
"
|
||||||
:show-q-r="showQR"
|
:show-q-r="showQR"
|
||||||
:copy-address="copyAddress"
|
:copy-address="copyAddress"
|
||||||
|
@ -57,10 +69,18 @@
|
||||||
<q-card class="qr-code-card">
|
<q-card class="qr-code-card">
|
||||||
<div class="text-center q-mb-sm q-pa-md" style="background: white;">
|
<div class="text-center q-mb-sm q-pa-md" style="background: white;">
|
||||||
<QrcodeVue ref="qr" :value="QR.address" size="240"> </QrcodeVue>
|
<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>
|
</div>
|
||||||
<q-card-actions>
|
<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-actions>
|
||||||
</q-card>
|
</q-card>
|
||||||
</q-dialog>
|
</q-dialog>
|
||||||
|
@ -161,7 +181,7 @@ export default {
|
||||||
font-weight: 400;
|
font-weight: 400;
|
||||||
}
|
}
|
||||||
|
|
||||||
.loki-list-item {
|
.oxen-list-item {
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
|
|
||||||
.q-item-section {
|
.q-item-section {
|
||||||
|
|
|
@ -10,13 +10,12 @@
|
||||||
<div class="row gutter-md">
|
<div class="row gutter-md">
|
||||||
<!-- Amount -->
|
<!-- Amount -->
|
||||||
<div class="col-6 amount">
|
<div class="col-6 amount">
|
||||||
<LokiField
|
<OxenField
|
||||||
:label="$t('fieldLabels.amount')"
|
:label="$t('fieldLabels.amount')"
|
||||||
:error="$v.newTx.amount.$error"
|
:error="$v.newTx.amount.$error"
|
||||||
>
|
>
|
||||||
<q-input
|
<q-input
|
||||||
v-model="newTx.amount"
|
v-model="newTx.amount"
|
||||||
:dark="theme == 'dark'"
|
|
||||||
type="number"
|
type="number"
|
||||||
min="0"
|
min="0"
|
||||||
:max="unlocked_balance / 1e9"
|
:max="unlocked_balance / 1e9"
|
||||||
|
@ -26,100 +25,88 @@
|
||||||
@blur="$v.newTx.amount.$touch"
|
@blur="$v.newTx.amount.$touch"
|
||||||
/>
|
/>
|
||||||
<q-btn
|
<q-btn
|
||||||
color="secondary"
|
color="primary"
|
||||||
:text-color="theme == 'dark' ? 'white' : 'dark'"
|
|
||||||
@click="newTx.amount = unlocked_balance / 1e9"
|
@click="newTx.amount = unlocked_balance / 1e9"
|
||||||
>
|
>
|
||||||
{{ $t("buttons.all") }}
|
{{ $t("buttons.all") }}
|
||||||
</q-btn>
|
</q-btn>
|
||||||
</LokiField>
|
</OxenField>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Priority -->
|
<!-- Priority -->
|
||||||
<div class="col-6 priority">
|
<div class="col-6 priority">
|
||||||
<LokiField :label="$t('fieldLabels.priority')">
|
<OxenField :label="$t('fieldLabels.priority')">
|
||||||
<q-select
|
<q-select
|
||||||
v-model="newTx.priority"
|
v-model="newTx.priority"
|
||||||
emit-value
|
emit-value
|
||||||
map-options
|
map-options
|
||||||
:dark="theme == 'dark'"
|
|
||||||
:options="priorityOptions"
|
:options="priorityOptions"
|
||||||
borderless
|
borderless
|
||||||
dense
|
dense
|
||||||
/>
|
/>
|
||||||
</LokiField>
|
</OxenField>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Address -->
|
<!-- Address -->
|
||||||
<div class="col q-mt-sm">
|
<div class="col q-mt-sm">
|
||||||
<LokiField
|
<OxenField
|
||||||
:label="$t('fieldLabels.address')"
|
:label="$t('fieldLabels.address')"
|
||||||
:error="$v.newTx.address.$error"
|
:error="$v.newTx.address.$error"
|
||||||
>
|
>
|
||||||
<q-input
|
<q-input
|
||||||
v-model.trim="newTx.address"
|
v-model.trim="newTx.address"
|
||||||
:dark="theme == 'dark'"
|
|
||||||
:placeholder="address_placeholder"
|
:placeholder="address_placeholder"
|
||||||
borderless
|
borderless
|
||||||
dense
|
dense
|
||||||
@blur="$v.newTx.address.$touch"
|
@blur="$v.newTx.address.$touch"
|
||||||
/>
|
/>
|
||||||
<q-btn
|
<q-btn color="primary" to="addressbook">
|
||||||
color="secondary"
|
|
||||||
:text-color="theme == 'dark' ? 'white' : 'dark'"
|
|
||||||
to="addressbook"
|
|
||||||
>
|
|
||||||
{{ $t("buttons.contacts") }}
|
{{ $t("buttons.contacts") }}
|
||||||
</q-btn>
|
</q-btn>
|
||||||
</LokiField>
|
</OxenField>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Notes -->
|
<!-- Notes -->
|
||||||
<div class="col q-mt-sm">
|
<div class="col q-mt-sm">
|
||||||
<LokiField :label="$t('fieldLabels.notes')" optional>
|
<OxenField :label="$t('fieldLabels.notes')" optional>
|
||||||
<q-input
|
<q-input
|
||||||
v-model="newTx.note"
|
v-model="newTx.note"
|
||||||
class="full-width text-area-loki"
|
class="full-width text-area-oxen"
|
||||||
type="textarea"
|
type="textarea"
|
||||||
:dark="theme == 'dark'"
|
|
||||||
:placeholder="$t('placeholders.transactionNotes')"
|
:placeholder="$t('placeholders.transactionNotes')"
|
||||||
borderless
|
borderless
|
||||||
dense
|
dense
|
||||||
/>
|
/>
|
||||||
</LokiField>
|
</OxenField>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<q-checkbox
|
<q-checkbox
|
||||||
v-model="newTx.address_book.save"
|
v-model="newTx.address_book.save"
|
||||||
:label="$t('strings.saveToAddressBook')"
|
:label="$t('strings.saveToAddressBook')"
|
||||||
:dark="theme == 'dark'"
|
|
||||||
color="dark"
|
|
||||||
/>
|
/>
|
||||||
<div v-if="newTx.address_book.save">
|
<div v-if="newTx.address_book.save">
|
||||||
<LokiField :label="$t('fieldLabels.name')" optional>
|
<OxenField :label="$t('fieldLabels.name')" optional>
|
||||||
<q-input
|
<q-input
|
||||||
v-model="newTx.address_book.name"
|
v-model="newTx.address_book.name"
|
||||||
:dark="theme == 'dark'"
|
|
||||||
:placeholder="$t('placeholders.addressBookName')"
|
:placeholder="$t('placeholders.addressBookName')"
|
||||||
borderless
|
borderless
|
||||||
dense
|
dense
|
||||||
/>
|
/>
|
||||||
</LokiField>
|
</OxenField>
|
||||||
<LokiField class="q-mt-sm" :label="$t('fieldLabels.notes')" optional>
|
<OxenField class="q-mt-sm" :label="$t('fieldLabels.notes')" optional>
|
||||||
<q-input
|
<q-input
|
||||||
v-model="newTx.address_book.description"
|
v-model="newTx.address_book.description"
|
||||||
type="textarea"
|
type="textarea"
|
||||||
class="full-width text-area-loki"
|
class="full-width text-area-oxen"
|
||||||
rows="2"
|
rows="2"
|
||||||
:dark="theme == 'dark'"
|
|
||||||
:placeholder="$t('placeholders.additionalNotes')"
|
:placeholder="$t('placeholders.additionalNotes')"
|
||||||
borderless
|
borderless
|
||||||
dense
|
dense
|
||||||
/>
|
/>
|
||||||
</LokiField>
|
</OxenField>
|
||||||
</div>
|
</div>
|
||||||
<!-- div required so button below checkbox -->
|
<!-- div required so the button falls below the checkbox -->
|
||||||
<div>
|
<div>
|
||||||
<q-btn
|
<q-btn
|
||||||
class="send-btn"
|
class="send-btn"
|
||||||
|
@ -139,7 +126,7 @@
|
||||||
:on-confirm-transaction="onConfirmTransaction"
|
:on-confirm-transaction="onConfirmTransaction"
|
||||||
:on-cancel-transaction="onCancelTransaction"
|
: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-spinner color="primary" size="30" />
|
||||||
</q-inner-loading>
|
</q-inner-loading>
|
||||||
</template>
|
</template>
|
||||||
|
@ -150,7 +137,7 @@
|
||||||
import { mapState } from "vuex";
|
import { mapState } from "vuex";
|
||||||
import { required, decimal } from "vuelidate/lib/validators";
|
import { required, decimal } from "vuelidate/lib/validators";
|
||||||
import { address, greater_than_zero } from "src/validators/common";
|
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 WalletPassword from "src/mixins/wallet_password";
|
||||||
import ConfirmDialogMixin from "src/mixins/confirm_dialog_mixin";
|
import ConfirmDialogMixin from "src/mixins/confirm_dialog_mixin";
|
||||||
import ConfirmTransactionDialog from "components/confirm_tx_dialog";
|
import ConfirmTransactionDialog from "components/confirm_tx_dialog";
|
||||||
|
@ -161,7 +148,7 @@ const DO_NOTHING = 10;
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
components: {
|
components: {
|
||||||
LokiField,
|
OxenField,
|
||||||
ConfirmTransactionDialog
|
ConfirmTransactionDialog
|
||||||
},
|
},
|
||||||
mixins: [WalletPassword, ConfirmDialogMixin],
|
mixins: [WalletPassword, ConfirmDialogMixin],
|
||||||
|
@ -383,9 +370,7 @@ export default {
|
||||||
ok: {
|
ok: {
|
||||||
label: this.$t("dialog.transfer.ok"),
|
label: this.$t("dialog.transfer.ok"),
|
||||||
color: "primary"
|
color: "primary"
|
||||||
},
|
}
|
||||||
dark: this.theme == "dark",
|
|
||||||
color: this.theme == "dark" ? "white" : "dark"
|
|
||||||
});
|
});
|
||||||
passwordDialog
|
passwordDialog
|
||||||
.onOk(password => {
|
.onOk(password => {
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
<q-btn-toggle
|
<q-btn-toggle
|
||||||
v-model="screen"
|
v-model="screen"
|
||||||
toggle-color="primary"
|
toggle-color="primary"
|
||||||
color="secondary"
|
color="accent"
|
||||||
:options="[
|
:options="[
|
||||||
{
|
{
|
||||||
label: $t('titles.serviceNode.myStakes'),
|
label: $t('titles.serviceNode.myStakes'),
|
||||||
|
|
|
@ -5,27 +5,25 @@
|
||||||
{{ $t("titles.transactions") }}
|
{{ $t("titles.transactions") }}
|
||||||
</div>
|
</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
|
<q-input
|
||||||
v-model="tx_filter"
|
v-model="tx_filter"
|
||||||
:dark="theme == 'dark'"
|
|
||||||
:placeholder="$t('placeholders.filterTx')"
|
:placeholder="$t('placeholders.filterTx')"
|
||||||
borderless
|
borderless
|
||||||
dense
|
dense
|
||||||
/>
|
/>
|
||||||
</LokiField>
|
</OxenField>
|
||||||
|
|
||||||
<LokiField class="col-2" :label="$t('fieldLabels.filterTransactionType')">
|
<OxenField class="col-2" :label="$t('fieldLabels.filterTransactionType')">
|
||||||
<q-select
|
<q-select
|
||||||
v-model="tx_type"
|
v-model="tx_type"
|
||||||
:dark="theme == 'dark'"
|
|
||||||
:options="tx_type_options"
|
:options="tx_type_options"
|
||||||
borderless
|
borderless
|
||||||
dense
|
dense
|
||||||
emit-value
|
emit-value
|
||||||
map-options
|
map-options
|
||||||
/>
|
/>
|
||||||
</LokiField>
|
</OxenField>
|
||||||
</div>
|
</div>
|
||||||
<TxList :type="tx_type" :filter="tx_filter" />
|
<TxList :type="tx_type" :filter="tx_filter" />
|
||||||
</q-page>
|
</q-page>
|
||||||
|
@ -34,11 +32,11 @@
|
||||||
<script>
|
<script>
|
||||||
import { mapState } from "vuex";
|
import { mapState } from "vuex";
|
||||||
import TxList from "components/tx_list";
|
import TxList from "components/tx_list";
|
||||||
import LokiField from "components/loki_field";
|
import OxenField from "components/oxen_field";
|
||||||
export default {
|
export default {
|
||||||
components: {
|
components: {
|
||||||
TxList,
|
TxList,
|
||||||
LokiField
|
OxenField
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
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,
|
coinUnitPlaces: 12,
|
||||||
coinSymbol: 'LOKI',
|
coinSymbol: 'OXEN',
|
||||||
coinName: 'Loki',
|
coinName: 'Oxen',
|
||||||
coinUriPrefix: 'loki:',
|
coinUriPrefix: 'oxen:',
|
||||||
addressPrefix: 114,
|
addressPrefix: 114,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -2386,7 +2386,7 @@ var cnUtilGen = function(initConfig) {
|
||||||
|
|
||||||
return this;
|
return this;
|
||||||
};
|
};
|
||||||
var cnUtil = cnUtilGen(lokiConfig);
|
var cnUtil = cnUtilGen(oxenConfig);
|
||||||
/*
|
/*
|
||||||
mnemonic.js : Converts between 4-byte aligned strings and a human-readable
|
mnemonic.js : Converts between 4-byte aligned strings and a human-readable
|
||||||
sequence of words. Uses 1626 common words taken from wikipedia article:
|
sequence of words. Uses 1626 common words taken from wikipedia article:
|
||||||
|
|
Loading…
Reference in New Issue