Oxen rebrand (#239)

Oxen rebranding
This commit is contained in:
kylezs 2021-01-05 21:26:42 -08:00 committed by GitHub
parent 6e2f9b282b
commit 1e5cfb2ecc
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
80 changed files with 7120 additions and 851 deletions

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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
``` ```

View File

@ -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

View File

@ -29,4 +29,4 @@ curl -sL --fail \
-o "${RENAME}" \ -o "${RENAME}" \
"$ASSET_URL" "$ASSET_URL"
echo "Loki binaries downloaded" echo "Oxen binaries downloaded"

2
package-lock.json generated
View File

@ -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": {

View File

@ -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": {

BIN
public/icon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

View File

@ -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

2885
public/oxen-logo.svg Normal file

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 210 KiB

30
public/oxen-white.svg Normal file
View File

@ -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

2928
public/oxen.svg Normal file

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 214 KiB

View File

@ -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
}, },

View File

@ -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 => {

View File

@ -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"]
}, },

View File

@ -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" },

View File

@ -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"))) {

View File

@ -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

View File

@ -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,

View File

@ -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;
} }

View File

@ -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,

View File

@ -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 {

View File

@ -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 {

View File

@ -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 {

View File

@ -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;
} }
} }

View File

@ -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>

View File

@ -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") }}:

View File

@ -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,

View File

@ -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)"
> >

View File

@ -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 => {

View File

@ -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: {

View File

@ -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" />

View File

@ -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>

View File

@ -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;
} }

View File

@ -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>

View File

@ -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>

View File

@ -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 {

View File

@ -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;
} }
} }

View File

@ -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;
} }
} }

View File

@ -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>

View File

@ -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 {

View File

@ -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>

View File

@ -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() {

View File

@ -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 => {

View File

@ -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"
/> />

View File

@ -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: {

View File

@ -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(() => {})

View File

@ -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;
} }

View File

@ -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 {

View File

@ -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;
}
}

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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",

View File

@ -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",

View File

@ -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",

View File

@ -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 lancien GUI", importOldGUIWallet: "Importer le portefeuille depuis lancien 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",

View File

@ -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",

View File

@ -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: "Количество непотраченных выходов",

View File

@ -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";
} }
} }
}, },

View File

@ -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" />

View File

@ -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);
} }
} }

View File

@ -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;

View File

@ -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" />

View File

@ -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;
} }

View File

@ -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 = [

View File

@ -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>

View File

@ -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;
} }
} }

View File

@ -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({

View File

@ -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 {

View File

@ -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;

View File

@ -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' },
{ {

View File

@ -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'),

View File

@ -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 {

View File

@ -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 => {

View File

@ -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'),

View File

@ -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 {

View File

@ -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: