From 2480d56b4a0f0339f37ba8f29f59e7e9993a3e99 Mon Sep 17 00:00:00 2001 From: PhilReact Date: Fri, 27 Oct 2023 05:06:45 +0300 Subject: [PATCH 01/26] auto fetch balances --- core/language/us.json | 3 +- core/src/components/app-view.js | 3 +- .../controllers/coin-balances-controller.js | 326 ++++++++++++++++++ .../components/friends-view/friends-view.js | 4 - core/src/plugins/streams.js | 6 + core/src/redux/app/actions/app-core.js | 9 +- core/src/redux/app/app-action-types.js | 1 + core/src/redux/app/app-reducer.js | 16 +- .../core/trade-portal/trade-portal.src.js | 83 ++++- plugins/plugins/core/wallet/wallet-app.src.js | 43 +++ 10 files changed, 484 insertions(+), 10 deletions(-) create mode 100644 core/src/components/controllers/coin-balances-controller.js diff --git a/core/language/us.json b/core/language/us.json index 8676082d..bc27604e 100644 --- a/core/language/us.json +++ b/core/language/us.json @@ -398,7 +398,8 @@ "wchange56": "WARNING!", "wchange57": "Memo", "wchange58": "New Address", - "wchange59": "Coin" + "wchange59": "Coin", + "wchange60": "Reload txs" }, "tradepage": { "tchange1": "Trade Portal", diff --git a/core/src/components/app-view.js b/core/src/components/app-view.js index 1bf6a5fa..ff27a441 100644 --- a/core/src/components/app-view.js +++ b/core/src/components/app-view.js @@ -46,6 +46,7 @@ import './notification-view/notification-bell-general.js' import './friends-view/friends-side-panel-parent.js' import './friends-view/save-settings-qdn.js' import './friends-view/core-sync-status.js' +import './controllers/coin-balances-controller.js' const parentEpml = new Epml({ type: 'WINDOW', source: window.parent }) class AppView extends connect(store)(LitElement) { @@ -675,7 +676,7 @@ class AppView extends connect(store)(LitElement) {
- + ` } diff --git a/core/src/components/controllers/coin-balances-controller.js b/core/src/components/controllers/coin-balances-controller.js new file mode 100644 index 00000000..d07c7c5a --- /dev/null +++ b/core/src/components/controllers/coin-balances-controller.js @@ -0,0 +1,326 @@ +import { LitElement, html, css } from 'lit'; +import '@material/mwc-icon'; +import { store } from '../../store'; +import { connect } from 'pwa-helpers'; +import '@vaadin/tooltip'; +import { get } from 'lit-translate'; +import { parentEpml } from '../show-plugin'; +import { setCoinBalances } from '../../redux/app/app-actions'; + +class CoinBalancesController extends connect(store)(LitElement) { + static get properties() { + return { + coinList: { type: Object }, + }; + } + + constructor() { + super(); + this.coinList = {} + this.nodeUrl = this.getNodeUrl(); + this.myNode = this.getMyNode(); + this.fetchBalance = this.fetchBalance.bind(this) + this._updateCoinList = this._updateCoinList.bind(this) + this.stop = false + } + + getNodeUrl() { + const myNode = + store.getState().app.nodeConfig.knownNodes[ + store.getState().app.nodeConfig.node + ]; + + const nodeUrl = + myNode.protocol + '://' + myNode.domain + ':' + myNode.port; + return nodeUrl; + } + getMyNode() { + const myNode = + store.getState().app.nodeConfig.knownNodes[ + store.getState().app.nodeConfig.node + ]; + + return myNode; + } + + + async updateArrrWalletBalance() { + let _url = `/crosschain/arrr/walletbalance?apiKey=${this.myNode.apiKey}` + let _body = store.getState().app.selectedAddress.arrrWallet.seed58 + + await parentEpml.request('apiCall', { + url: _url, + method: 'POST', + body: _body, + }).then((res) => { + if (isNaN(Number(res))) { + //... + } else { + this.arrrWalletBalance = (Number(res) / 1e8).toFixed(8) + store.dispatch( + setCoinBalances({ + type: 'arrr', + fullValue: Number(res) + }) + ); + } + }).catch(()=> { + console.log('error') + }) + } + async updateQortWalletBalance() { + let qortAddress = store.getState().app.selectedAddress.address + + await parentEpml.request('apiCall', { + url: `/addresses/balance/${qortAddress}?apiKey=${this.myNode.apiKey}`, + }).then((res) => { + this.qortWalletBalance = res + store.dispatch( + setCoinBalances({ + type: 'qort', + fullValue: Number(res) + }) + ); + }).catch(()=> { + console.log('error') + }) + } + + async updateRvnWalletBalance() { + let _url = `/crosschain/rvn/walletbalance?apiKey=${this.myNode.apiKey}` + let _body = store.getState().app.selectedAddress.rvnWallet.derivedMasterPublicKey + + await parentEpml.request('apiCall', { + url: _url, + method: 'POST', + body: _body, + }).then((res) => { + if (isNaN(Number(res))) { + //... + } else { + this.rvnWalletBalance = (Number(res) / 1e8).toFixed(8) + store.dispatch( + setCoinBalances({ + type: 'rvn', + fullValue: Number(res) + }) + ); + } + }).catch(()=> { + console.log('error') + }) + } + + async updateDgbWalletBalance() { + let _url = `/crosschain/dgb/walletbalance?apiKey=${this.myNode.apiKey}` + let _body = store.getState().app.selectedAddress.dgbWallet.derivedMasterPublicKey + + await parentEpml.request('apiCall', { + url: _url, + method: 'POST', + body: _body, + }).then((res) => { + if (isNaN(Number(res))) { + //... + } else { + this.dgbWalletBalance = (Number(res) / 1e8).toFixed(8) + store.dispatch( + setCoinBalances({ + type: 'dgb', + fullValue: Number(res) + }) + ); + } + }).catch(()=> { + console.log('error') + }) + } + + async updateDogeWalletBalance() { + let _url = `/crosschain/doge/walletbalance?apiKey=${this.myNode.apiKey}` + let _body = store.getState().app.selectedAddress.dogeWallet.derivedMasterPublicKey + + await parentEpml.request('apiCall', { + url: _url, + method: 'POST', + body: _body, + }).then((res) => { + if (isNaN(Number(res))) { + //... + } else { + this.dogeWalletBalance = (Number(res) / 1e8).toFixed(8) + store.dispatch( + setCoinBalances({ + type: 'doge', + fullValue: Number(res) + }) + ); + } + }).catch(()=> { + console.log('error') + }) + } + + async updateBtcWalletBalance() { + let _url = `/crosschain/btc/walletbalance?apiKey=${this.myNode.apiKey}` + let _body = store.getState().app.selectedAddress.btcWallet.derivedMasterPublicKey + + await parentEpml.request('apiCall', { + url: _url, + method: 'POST', + body: _body, + }).then((res) => { + if (isNaN(Number(res))) { + //... + } else { + this.btcWalletBalance = (Number(res) / 1e8).toFixed(8) + store.dispatch( + setCoinBalances({ + type: 'btc', + fullValue: Number(res) + }) + ); + } + }).catch(()=> { + console.log('error') + }) + } + + async updateLtcWalletBalance() { + let _url = `/crosschain/ltc/walletbalance?apiKey=${this.myNode.apiKey}` + let _body = store.getState().app.selectedAddress.ltcWallet.derivedMasterPublicKey + + await parentEpml.request('apiCall', { + url: _url, + method: 'POST', + body: _body, + }).then((res) => { + if (isNaN(Number(res))) { + //... + } else { + this.ltcWalletBalance = (Number(res) / 1e8).toFixed(8) + store.dispatch( + setCoinBalances({ + type: 'ltc', + fullValue: Number(res) + }) + ); + + } + }).catch(()=> { + console.log('error') + }) + } + + _updateCoinList(event) { + const copyCoinList = {...this.coinList} + const coin = event.detail + if(!copyCoinList[coin]){ + try { + if(coin === 'ltc'){ + this.updateLtcWalletBalance() + } else if(coin === 'qort'){ + this.updateQortWalletBalance() + } else if(coin === 'doge'){ + this.updateDogeWalletBalance() + } else if(coin === 'btc'){ + this.updateBtcWalletBalance() + } else if(coin === 'dgb'){ + this.updateDgbWalletBalance() + } else if(coin === 'rvn'){ + this.updateRvnWalletBalance() + }else if(coin === 'arrr'){ + this.updateArrrWalletBalance() + } + } catch (error) { + + } + } + copyCoinList[coin] = Date.now() + 120000; + this.coinList = copyCoinList + + this.requestUpdate() + } + + + async fetchCoins(arrayOfCoins){ + const getCoinBalances = (arrayOfCoins || []).map( + async (coin) => { + if(coin === 'ltc'){ + await this.updateLtcWalletBalance() + } else if(coin === 'qort'){ + this.updateQortWalletBalance() + } else if(coin === 'doge'){ + this.updateDogeWalletBalance() + } else if(coin === 'btc'){ + this.updateBtcWalletBalance() + } else if(coin === 'dgb'){ + this.updateDgbWalletBalance() + } else if(coin === 'rvn'){ + this.updateRvnWalletBalance() + }else if(coin === 'arrr'){ + this.updateArrrWalletBalance() + } + }) + + await Promise.all(getCoinBalances); + + } + + async fetchBalance(){ + try { + let arrayOfCoins = [] + const copyObject = {...this.coinList} + const currentDate = Date.now() + const array = Object.keys(this.coinList) + for (const key of array) { + const item = this.coinList[key] + + if(item < currentDate){ + delete copyObject[key] + } else { + arrayOfCoins.push(key) + } + } + if(!this.stop){ + this.stop = true + await this.fetchCoins(arrayOfCoins) + this.stop = false + } + this.coinList = copyObject + } catch (error) { + this.stop = false + } + } + + connectedCallback() { + super.connectedCallback(); + this.intervalID = setInterval(this.fetchBalance, 45000); + window.addEventListener( + 'ping-coin-controller-with-coin', + this._updateCoinList + ); + } + + disconnectedCallback() { + + super.disconnectedCallback(); + window.removeEventListener( + 'ping-coin-controller-with-coin', + this._updateCoinList + ); + if(this.intervalID){ + clearInterval(this.intervalID); + + } + + } + + + + render() { + return html``; + } +} + +customElements.define('coin-balances-controller', CoinBalancesController); diff --git a/core/src/components/friends-view/friends-view.js b/core/src/components/friends-view/friends-view.js index ab90fe32..fd4f8acc 100644 --- a/core/src/components/friends-view/friends-view.js +++ b/core/src/components/friends-view/friends-view.js @@ -114,16 +114,13 @@ class FriendsView extends connect(store)(LitElement) { this.friendList = detail } _updateFeed(event) { - console.log({event}) const detail = event.detail - console.log({detail}) this.mySelectedFeeds = detail this.requestUpdate() } connectedCallback() { super.connectedCallback() - console.log('callback') window.addEventListener('friends-my-friend-list-event', this._updateFriends) window.addEventListener('friends-my-selected-feeds-event', this._updateFeed) } @@ -317,7 +314,6 @@ class FriendsView extends connect(store)(LitElement) { } render() { - console.log('rendered1') return html`
diff --git a/core/src/plugins/streams.js b/core/src/plugins/streams.js index bc4bae3a..aae100e1 100644 --- a/core/src/plugins/streams.js +++ b/core/src/plugins/streams.js @@ -9,6 +9,7 @@ const CHAT_HEADS_STREAM_NAME = 'chat_heads' const NODE_CONFIG_STREAM_NAME = 'node_config' const CHAT_LAST_SEEN = 'chat_last_seen' const SIDE_EFFECT_ACTION = 'side_effect_action' +const COIN_BALANCES_ACTION = 'coin_balances' export const loggedInStream = new EpmlStream(LOGIN_STREAM_NAME, () => store.getState().app.loggedIn) export const configStream = new EpmlStream(CONFIG_STREAM_NAME, () => store.getState().config) @@ -18,6 +19,8 @@ export const chatHeadsStateStream = new EpmlStream(CHAT_HEADS_STREAM_NAME, () => export const nodeConfigStream = new EpmlStream(NODE_CONFIG_STREAM_NAME, () => store.getState().app.nodeConfig) export const chatLastSeenStream = new EpmlStream(CHAT_LAST_SEEN, () => store.getState().app.chatLastSeen) export const sideEffectActionStream = new EpmlStream(SIDE_EFFECT_ACTION, () => store.getState().app.sideEffectAction) +export const coinBalancesActionStream = new EpmlStream(COIN_BALANCES_ACTION, () => store.getState().app.coinBalances) + @@ -62,6 +65,9 @@ store.subscribe(() => { if (oldState.app.sideEffectAction !== state.app.sideEffectAction) { sideEffectActionStream.emit(state.app.sideEffectAction) } + if (oldState.app.coinBalances !== state.app.coinBalances) { + coinBalancesActionStream.emit(state.app.coinBalances) + } oldState = state diff --git a/core/src/redux/app/actions/app-core.js b/core/src/redux/app/actions/app-core.js index fa2e8380..53e9d547 100644 --- a/core/src/redux/app/actions/app-core.js +++ b/core/src/redux/app/actions/app-core.js @@ -1,5 +1,5 @@ // Core App Actions here... -import { UPDATE_BLOCK_INFO, UPDATE_NODE_STATUS, UPDATE_NODE_INFO, CHAT_HEADS, ACCOUNT_INFO, ADD_AUTO_LOAD_IMAGES_CHAT, REMOVE_AUTO_LOAD_IMAGES_CHAT, ALLOW_QAPP_AUTO_AUTH, REMOVE_QAPP_AUTO_AUTH, SET_CHAT_LAST_SEEN, ADD_CHAT_LAST_SEEN, ALLOW_QAPP_AUTO_LISTS, REMOVE_QAPP_AUTO_LISTS, SET_NEW_TAB, ADD_TAB_INFO, SET_TAB_NOTIFICATIONS, IS_OPEN_DEV_DIALOG, SET_NEW_NOTIFICATION, SET_SIDE_EFFECT } from '../app-action-types.js' +import { UPDATE_BLOCK_INFO, UPDATE_NODE_STATUS, UPDATE_NODE_INFO, CHAT_HEADS, ACCOUNT_INFO, ADD_AUTO_LOAD_IMAGES_CHAT, REMOVE_AUTO_LOAD_IMAGES_CHAT, ALLOW_QAPP_AUTO_AUTH, REMOVE_QAPP_AUTO_AUTH, SET_CHAT_LAST_SEEN, ADD_CHAT_LAST_SEEN, ALLOW_QAPP_AUTO_LISTS, REMOVE_QAPP_AUTO_LISTS, SET_NEW_TAB, ADD_TAB_INFO, SET_TAB_NOTIFICATIONS, IS_OPEN_DEV_DIALOG, SET_NEW_NOTIFICATION, SET_SIDE_EFFECT, SET_COIN_BALANCES } from '../app-action-types.js' export const doUpdateBlockInfo = (blockObj) => { return (dispatch, getState) => { @@ -157,4 +157,11 @@ export const setSideEffectAction = (payload)=> { type: SET_SIDE_EFFECT, payload } +} + +export const setCoinBalances = (payload)=> { + return { + type: SET_COIN_BALANCES, + payload + } } \ No newline at end of file diff --git a/core/src/redux/app/app-action-types.js b/core/src/redux/app/app-action-types.js index fd5e06f7..97165152 100644 --- a/core/src/redux/app/app-action-types.js +++ b/core/src/redux/app/app-action-types.js @@ -33,3 +33,4 @@ export const SET_TAB_NOTIFICATIONS = 'SET_TAB_NOTIFICATIONS' export const IS_OPEN_DEV_DIALOG = 'IS_OPEN_DEV_DIALOG' export const SET_NEW_NOTIFICATION = 'SET_NEW_NOTIFICATION' export const SET_SIDE_EFFECT= 'SET_SIDE_EFFECT' +export const SET_COIN_BALANCES= 'SET_COIN_BALANCES' diff --git a/core/src/redux/app/app-reducer.js b/core/src/redux/app/app-reducer.js index f7ce35a2..e67826dd 100644 --- a/core/src/redux/app/app-reducer.js +++ b/core/src/redux/app/app-reducer.js @@ -1,6 +1,6 @@ // Loading state, login state, isNavDrawOpen state etc. None of this needs to be saved to localstorage. import { loadStateFromLocalStorage, saveStateToLocalStorage } from '../../localStorageHelpers.js' -import { LOG_IN, LOG_OUT, NETWORK_CONNECTION_STATUS, INIT_WORKERS, ADD_PLUGIN_URL, ADD_PLUGIN, ADD_NEW_PLUGIN_URL, NAVIGATE, SELECT_ADDRESS, ACCOUNT_INFO, CHAT_HEADS, UPDATE_BLOCK_INFO, UPDATE_NODE_STATUS, UPDATE_NODE_INFO, LOAD_NODE_CONFIG, SET_NODE, ADD_NODE, PAGE_URL, ADD_AUTO_LOAD_IMAGES_CHAT, REMOVE_AUTO_LOAD_IMAGES_CHAT, ALLOW_QAPP_AUTO_AUTH, REMOVE_QAPP_AUTO_AUTH, SET_CHAT_LAST_SEEN, ADD_CHAT_LAST_SEEN, ALLOW_QAPP_AUTO_LISTS, REMOVE_QAPP_AUTO_LISTS, SET_NEW_TAB, ADD_TAB_INFO, SET_TAB_NOTIFICATIONS, IS_OPEN_DEV_DIALOG, REMOVE_NODE, EDIT_NODE, SET_NEW_NOTIFICATION, SET_SIDE_EFFECT } from './app-action-types.js' +import { LOG_IN, LOG_OUT, NETWORK_CONNECTION_STATUS, INIT_WORKERS, ADD_PLUGIN_URL, ADD_PLUGIN, ADD_NEW_PLUGIN_URL, NAVIGATE, SELECT_ADDRESS, ACCOUNT_INFO, CHAT_HEADS, UPDATE_BLOCK_INFO, UPDATE_NODE_STATUS, UPDATE_NODE_INFO, LOAD_NODE_CONFIG, SET_NODE, ADD_NODE, PAGE_URL, ADD_AUTO_LOAD_IMAGES_CHAT, REMOVE_AUTO_LOAD_IMAGES_CHAT, ALLOW_QAPP_AUTO_AUTH, REMOVE_QAPP_AUTO_AUTH, SET_CHAT_LAST_SEEN, ADD_CHAT_LAST_SEEN, ALLOW_QAPP_AUTO_LISTS, REMOVE_QAPP_AUTO_LISTS, SET_NEW_TAB, ADD_TAB_INFO, SET_TAB_NOTIFICATIONS, IS_OPEN_DEV_DIALOG, REMOVE_NODE, EDIT_NODE, SET_NEW_NOTIFICATION, SET_SIDE_EFFECT, SET_COIN_BALANCES } from './app-action-types.js' import { initWorkersReducer } from './reducers/init-workers.js' import { loginReducer } from './reducers/login-reducer.js' import { setNode, addNode, removeNode, editNode } from './reducers/manage-node.js' @@ -52,7 +52,8 @@ const INITIAL_STATE = { tabInfo: {}, isOpenDevDialog: false, newNotification: null, - sideEffectAction: null + sideEffectAction: null, + coinBalances: {} } export default (state = INITIAL_STATE, action) => { @@ -293,6 +294,17 @@ export default (state = INITIAL_STATE, action) => { sideEffectAction: action.payload } } + case SET_COIN_BALANCES: { + const copyBalances = {...state.coinBalances} + copyBalances[action.payload.type] = { + value: action.payload.value, + fullValue: action.payload.fullValue + } + return { + ...state, + coinBalances: copyBalances + } + } default: return state diff --git a/plugins/plugins/core/trade-portal/trade-portal.src.js b/plugins/plugins/core/trade-portal/trade-portal.src.js index 5d9b91b1..335cdfd3 100644 --- a/plugins/plugins/core/trade-portal/trade-portal.src.js +++ b/plugins/plugins/core/trade-portal/trade-portal.src.js @@ -904,6 +904,7 @@ class TradePortal extends LitElement { this.myTradeLockScreenPass = '' this.myTradeLockScreenSet = '' this.tradeHelperMessage = '' + this.pingCoinBalancesController = this.pingCoinBalancesController.bind(this) } historicTradesTemplate() { @@ -1416,6 +1417,52 @@ class TradePortal extends LitElement { ` } + pingCoinBalancesController(){ + if(!this.selectedCoin) return + let coin = '' + switch (this.selectedCoin) { + case 'BITCOIN': + coin ='btc' + break + case 'LITECOIN': + coin = 'ltc' + break + case 'DOGECOIN': + coin = 'doge' + break + case 'DIGIBYTE': + coin = 'dgb' + break + case 'RAVENCOIN': + coin = 'rnv' + break + case 'PIRATECHAIN': + coin = 'arrr' + break + default: + break + } + const customEvent = new CustomEvent('ping-coin-controller-with-coin', { + detail: coin + }); + window.parent.dispatchEvent(customEvent); + } + + connectedCallback() { + super.connectedCallback(); + this.intervalID = setInterval(this.pingCoinBalancesController, 30000); + + } + + disconnectedCallback() { + + super.disconnectedCallback(); + if(this.intervalID){ + clearInterval(this.intervalID); + + } + } + firstUpdated() { let _this = this @@ -1585,7 +1632,6 @@ class TradePortal extends LitElement { this.dgbWallet = window.parent.reduxStore.getState().app.selectedAddress.dgbWallet.address this.rvnWallet = window.parent.reduxStore.getState().app.selectedAddress.rvnWallet.address this.arrrWallet = window.parent.reduxStore.getState().app.selectedAddress.arrrWallet.address - this.updateAccountBalance() }) @@ -1602,6 +1648,41 @@ class TradePortal extends LitElement { } this.config = JSON.parse(c) }) + parentEpml.subscribe('coin_balances', async (payload) => { + const coinBalances = JSON.parse(payload) + let coin = '' + switch (this.selectedCoin) { + case 'BITCOIN': + coin ='btc' + break + case 'LITECOIN': + coin = 'ltc' + break + case 'DOGECOIN': + coin = 'doge' + break + case 'DIGIBYTE': + coin = 'dgb' + break + case 'RAVENCOIN': + coin = 'rnv' + break + case 'PIRATECHAIN': + coin = 'arrr' + break + default: + break + } + if(coinBalances[coin]){ + const res = coinBalances[coin].fullValue + let value = (Number(res) / 1e8).toFixed(8) + if(coin !== 'qort'){ + value = (Number(res) / 1e8).toFixed(8) + } + this.listedCoins.get(this.selectedCoin).balance = value + this.requestUpdate() + } + }) let coinSelectionMenu = this.shadowRoot.getElementById("coinSelectionMenu") diff --git a/plugins/plugins/core/wallet/wallet-app.src.js b/plugins/plugins/core/wallet/wallet-app.src.js index 5199d62e..2e4dce96 100644 --- a/plugins/plugins/core/wallet/wallet-app.src.js +++ b/plugins/plugins/core/wallet/wallet-app.src.js @@ -866,7 +866,22 @@ class MultiWallet extends LitElement { this.wallets.get('rvn').wallet = window.parent.reduxStore.getState().app.selectedAddress.rvnWallet this.wallets.get('arrr').wallet = window.parent.reduxStore.getState().app.selectedAddress.arrrWallet }) + parentEpml.subscribe('coin_balances', async (payload) => { + const coinBalances = JSON.parse(payload) + if(coinBalances[this._selectedWallet]){ + const res = coinBalances[this._selectedWallet].fullValue + let value = Number(res).toFixed(8) + if(this._selectedWallet !== 'qort'){ + value = (Number(res) / 1e8).toFixed(8) + } + this.wallets.get(this._selectedWallet).balance = value + this.balanceString = this.wallets.get(this._selectedWallet).balance + " " + this._selectedWallet.toLocaleUpperCase() + this.balance = this.wallets.get(this._selectedWallet).balance + } + }) }) + + this.pingCoinBalancesController = this.pingCoinBalancesController.bind(this) } render() { @@ -939,6 +954,9 @@ class MultiWallet extends LitElement {
+
+ this.fetchWalletDetails(this._selectedWallet)}> ${translate("walletpage.wchange60")} +
${this.loading ? html`` : ''}
@@ -2821,6 +2839,7 @@ class MultiWallet extends LitElement { } firstUpdated() { + this.changeTheme() this.changeLanguage() this.paymentFee() @@ -2936,6 +2955,30 @@ class MultiWallet extends LitElement { } } + + pingCoinBalancesController(){ + if(!this._selectedWallet) return + const customEvent = new CustomEvent('ping-coin-controller-with-coin', { + detail: this._selectedWallet + }); + window.parent.dispatchEvent(customEvent); + } + + connectedCallback() { + super.connectedCallback(); + this.intervalID = setInterval(this.pingCoinBalancesController, 30000); + + } + + disconnectedCallback() { + + super.disconnectedCallback(); + if(this.intervalID){ + clearInterval(this.intervalID); + + } + } + renderWalletLockButton() { if (this.myWalletLockScreenPass === false && this.myWalletLockScreenSet === false) { return html` From 1228e4c89adbfe355cf0801515bdbe9fe969b93e Mon Sep 17 00:00:00 2001 From: PhilReact Date: Fri, 27 Oct 2023 13:07:04 +0300 Subject: [PATCH 02/26] fix to rvn --- plugins/plugins/core/trade-portal/trade-portal.src.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/plugins/core/trade-portal/trade-portal.src.js b/plugins/plugins/core/trade-portal/trade-portal.src.js index 335cdfd3..f8d4ff7b 100644 --- a/plugins/plugins/core/trade-portal/trade-portal.src.js +++ b/plugins/plugins/core/trade-portal/trade-portal.src.js @@ -1434,7 +1434,7 @@ class TradePortal extends LitElement { coin = 'dgb' break case 'RAVENCOIN': - coin = 'rnv' + coin = 'rvn' break case 'PIRATECHAIN': coin = 'arrr' @@ -1665,7 +1665,7 @@ class TradePortal extends LitElement { coin = 'dgb' break case 'RAVENCOIN': - coin = 'rnv' + coin = 'rvn' break case 'PIRATECHAIN': coin = 'arrr' From 9a55ab61bfa9b504f66d042615801258db7025f7 Mon Sep 17 00:00:00 2001 From: PhilReact Date: Fri, 27 Oct 2023 14:43:27 +0300 Subject: [PATCH 03/26] added missing awaits --- .../controllers/coin-balances-controller.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/core/src/components/controllers/coin-balances-controller.js b/core/src/components/controllers/coin-balances-controller.js index d07c7c5a..0aef763c 100644 --- a/core/src/components/controllers/coin-balances-controller.js +++ b/core/src/components/controllers/coin-balances-controller.js @@ -249,17 +249,17 @@ class CoinBalancesController extends connect(store)(LitElement) { if(coin === 'ltc'){ await this.updateLtcWalletBalance() } else if(coin === 'qort'){ - this.updateQortWalletBalance() + await this.updateQortWalletBalance() } else if(coin === 'doge'){ - this.updateDogeWalletBalance() + await this.updateDogeWalletBalance() } else if(coin === 'btc'){ - this.updateBtcWalletBalance() + await this.updateBtcWalletBalance() } else if(coin === 'dgb'){ - this.updateDgbWalletBalance() + await this.updateDgbWalletBalance() } else if(coin === 'rvn'){ - this.updateRvnWalletBalance() + await this.updateRvnWalletBalance() }else if(coin === 'arrr'){ - this.updateArrrWalletBalance() + await this.updateArrrWalletBalance() } }) From c5d50dde1d5b2fcc437f791f6ee6a4f9e07a25bd Mon Sep 17 00:00:00 2001 From: karl-dv <38753527+karl-dv@users.noreply.github.com> Date: Sat, 28 Oct 2023 08:58:27 +0200 Subject: [PATCH 04/26] Add "NL - Dutch" language --- core/language/de.json | 21 +- core/language/es.json | 1 + core/language/et.json | 1 + core/language/fr.json | 7 +- core/language/hindi.json | 1 + core/language/hr.json | 1 + core/language/hu.json | 1 + core/language/it.json | 1 + core/language/jp.json | 1 + core/language/ko.json | 1 + core/language/nl.json | 1217 ++++++++++++++++++++++ core/language/no.json | 1 + core/language/pl.json | 1 + core/language/pt.json | 1 + core/language/ro.json | 1 + core/language/rs.json | 1 + core/language/ru.json | 1 + core/language/us.json | 31 +- core/language/zhc.json | 1 + core/language/zht.json | 1 + core/src/components/language-selector.js | 1 + img/nl-flag-round-icon-32.png | Bin 0 -> 1245 bytes locales/nl.json | 42 +- 23 files changed, 1286 insertions(+), 49 deletions(-) create mode 100644 core/language/nl.json create mode 100644 img/nl-flag-round-icon-32.png diff --git a/core/language/de.json b/core/language/de.json index 278b15e3..7a71987c 100644 --- a/core/language/de.json +++ b/core/language/de.json @@ -5,6 +5,7 @@ "chinese1": "Chinesisch (vereinfacht)", "chinese2": "Chinesisch (traditionell)", "croatian": "Kroatisch", + "dutch": "Niederländisch", "english": "Englisch", "estonian": "Estnisch", "french": "Französisch", @@ -153,11 +154,11 @@ "lp18": "Schlüsselteile ableiten", "lp19": "Fehler, falscher Schlüssel. ", "lp20": "Fehler, falsche Nonce", - "lp21": "Wichtige Teile kombinieren", + "lp21": "Schlüsselteile kombinieren", "lp22": "Schlüssel ist bereit" }, "logout": { - "logout": "AUSLOGGEN", + "logout": "ABMELDEN", "confirmlogout": "Möchten Sie sich wirklich abmelden?" }, "fragfile": { @@ -195,7 +196,7 @@ "export": "Knoten Exportieren", "deletecustomnode": "Alle benutzerdefinierten Knoten entfernen", "warning": "Ihre bestehenden Knoten werden gelöscht und aus dem Backup neu erstellt.", - "snack1": "Standardknoten erfolgreich gelöscht und hinzugefügt", + "snack1": "Benutzerdefinierten Knoten erfolgreich gelöscht und Standardknoten hinzugefügt", "snack2": "UI mit Knoten verbunden", "snack3": "Benutzerdefinierter Knoten erfolgreich hinzugefügt und gespeichert", "snack4": "Knoten erfolgreich gespeichert als", @@ -387,7 +388,7 @@ "wchange45": "Sende alle", "wchange46": "An diese Adresse verschicken", "wchange47": "Adressbuch", - "wchange48": "Dieses Adressbuch ist leer !", + "wchange48": "Dieses Adressbuch ist leer!", "wchange49": "Zum Adressbuch hinzufügen", "wchange50": "Der Name darf nicht leer sein!", "wchange51": "Adresse darf nicht leer sein!", @@ -621,7 +622,7 @@ "schange12": "Verfolgte Q-Tubes", "schange13": "Du folgst keinen Q-Tubes", "schange14": "Ihre blockierten Q-Tubes", - "schange15": "Blockierte Q-Röhren", + "schange15": "Blockierte Q-Tubes", "schange16": "Sie haben keine Q-Tubes blockiert", "schange17": "Name nicht gefunden!", "schange18": "Relaismodus ist aktiviert. Das bedeutet, dass Ihr Knoten dabei hilft, verschlüsselte Daten durch das Netzwerk zu transportieren, wenn ein Peer dies anfordert. Sie können sich durch Einstellung abmelden", @@ -796,7 +797,7 @@ "cchange42": "Aus Gründen der Spam-Bekämpfung benötigen Konten mit einem Qort-Guthaben von weniger als 4 viel Zeit, um Nachrichten in Q-Chat zu SENDEN. Wenn Sie die Sendegeschwindigkeit für Q-Chat-Nachrichten sofort erhöhen möchten, besorgen Sie sich über 4 QORT an Ihre Adresse. Dies kann mit Trades im Handelsportal oder über einen anderen Qortian erfolgen, der Ihnen die QORT gibt. Sobald Sie über 4 QORT in Ihrem Konto haben, werden Q-Chat-Nachrichten sofort gesendet und dieser Dialog wird nicht mehr angezeigt Show. Vielen Dank für Ihr Verständnis für diese notwendige Spam-Präventionsmethode, und wir hoffen, dass Ihnen Qortal gefällt!", "cchange43": "Tipp QORT an", "cchange44": "NACHRICHT SENDEN", - "cchange45": "TIP BENUTZER", + "cchange45": "TIPP BENUTZER", "cchange46": "Trinkgeldbetrag", "cchange47": "Verfügbares Guthaben", "cchange48": "QORT-Guthaben konnte nicht abgerufen werden. Versuchen Sie es erneut!", @@ -810,7 +811,7 @@ "cchange56": "Transaktion fehlgeschlagen!", "cchange57": "Benutzerinfo", "cchange58": "NACHRICHT SENDEN", - "cchange59": "TIP BENUTZER", + "cchange59": "TIPP BENUTZER", "cchange60": "Gruppeneinladungen ausstehend", "cchange61": "Fehler beim Abrufen von Gruppeneinladungen. Bitte versuchen Sie es erneut!", "cchange62": "Falscher Benutzername und falsche Adresse eingegeben! Bitte versuchen Sie es erneut!", @@ -912,7 +913,7 @@ "gchange36": "Verlasse", "gchange37": "Gruppe verlassen", "gchange38": "Gruppenbesitzer verwalten:", - "gchange39": "Gruppenadministrator verwalten::", + "gchange39": "Gruppenadministrator verwalten:", "gchange40": "Gruppe verwalten", "gchange41": "Gruppenerstellung erfolgreich!", "gchange42": "Ungültiger Gruppenname", @@ -960,9 +961,9 @@ "nchange4": "Prägekonto hinzufügen", "nchange5": "Wenn Sie mit Ihrem eigenen Konto prägen möchten, müssen Sie eine Rewardshare-Transaktion für sich selbst erstellen (wobei der Rewardshare-Prozentsatz auf 0 gesetzt ist) und dann mit dem Rewardshare-Schlüssel prägen, den Ihnen zugeteilt wird.", "nchange6": "Belohnungsschlüssel", - "nchange7": "Adding minting account", + "nchange7": "Minting-Konto hinzufügen", "nchange8": "Hinzufügen", - "nchange9": "Minting-Konto hinzufügen", + "nchange9": "Minting-Konto", "nchange10": "Empfängerkonto", "nchange11": "Aktion", "nchange12": "Entfernen", diff --git a/core/language/es.json b/core/language/es.json index 7f0c77c7..bc7894bc 100644 --- a/core/language/es.json +++ b/core/language/es.json @@ -5,6 +5,7 @@ "chinese1": "Chino (Simplificado)", "chinese2": "Chino (Tradicional)", "croatian": "Croata", + "dutch": "Holandés", "english": "Inglés", "estonian": "Estonio", "french": "Francés", diff --git a/core/language/et.json b/core/language/et.json index 324f4bd2..c42a55f0 100644 --- a/core/language/et.json +++ b/core/language/et.json @@ -5,6 +5,7 @@ "chinese1": "Hiina (Lihtsustatud)", "chinese2": "Hiina (Tradits.)", "croatian": "Horvaatia", + "dutch": "hollandi", "english": "Inglise", "estonian": "Eesti", "french": "Prantsuse", diff --git a/core/language/fr.json b/core/language/fr.json index 3b2ceb43..752ab680 100644 --- a/core/language/fr.json +++ b/core/language/fr.json @@ -5,6 +5,7 @@ "chinese1": "Chinois (Simplifié)", "chinese2": "Chinois (Traditionnel)", "croatian": "Croate", + "dutch": "Néerlandais", "english": "Anglais", "estonian": "Estonien", "french": "Français", @@ -99,7 +100,7 @@ "upload": "Envoyer votre sauvegarde Qortal", "howlogin": "Comment voulez-vous vous connecter ?", "seed": "Phrase mnémonique", - "seedphrase": "Phrase mnémonique", + "seedphrase": "phrase mnémonique", "saved": "Compte sauvegardé", "qora": "Adresse de contrôle Qora", "backup": "Sauvegarde du portefeuille Qortal", @@ -110,7 +111,7 @@ "error1": "La sauvegarde doit être un JSON valide", "error2": "Option de connexion non sélectionnée", "createwelcome": "Bienvenue dans Qortal, vous trouverez des similitudes avec un jeu de rôle, où, vous, en tant que frappeur dans le réseau Qortal (si vous choisissez d'en devenir un), aurez la chance d'augmenter votre niveau, vous donnant à la fois une plus grande partie de la récompense de bloc QORT et une plus grande influence sur le réseau en termes de vote sur les décisions pour la plate-forme.", - "createa": "A", + "createa": "Une", "click": "Cliquez pour voir la phrase mnémonique", "confirmpass": "Confirmez votre mot de passe", "willbe": "sera généré au hasard en arrière-plan. Il sera utilisé comme votre générateur de clé privée pour votre compte blockchain dans Qortal.", @@ -148,7 +149,7 @@ "lp13": "Génération de la clé de déchiffrement", "lp14": "Clé de vérification", "lp15": "Mot de passe incorrect", - "lp16": "Décryptage", + "lp16": "Décryptage en cours", "lp17": "En attente que les travailleurs soient prêts", "lp18": "Dérivation des parties clés", "lp19": "Erreur, clé incorrecte. ", diff --git a/core/language/hindi.json b/core/language/hindi.json index ed0b598a..7bffc000 100644 --- a/core/language/hindi.json +++ b/core/language/hindi.json @@ -5,6 +5,7 @@ "chinese1": "चीनी (सरलीकृत)", "chinese2": "चीनी (परंपरागत)", "croatian": "क्रोएशियाई", + "dutch": "ओलंदेज़", "english": "अंग्रेज़ी", "estonian": "एस्टोनियाई", "french": "फ्रेंच", diff --git a/core/language/hr.json b/core/language/hr.json index 39cc4db1..13b09fd5 100644 --- a/core/language/hr.json +++ b/core/language/hr.json @@ -5,6 +5,7 @@ "chinese1": "Kineski (Pojednostavljeni)", "chinese2": "Kineski (Traditionalni)", "croatian": "Hrvatski", + "dutch": "Holandski", "english": "Engleski", "estonian": "Estonski", "french": "Francuski", diff --git a/core/language/hu.json b/core/language/hu.json index c24484d3..fc260742 100644 --- a/core/language/hu.json +++ b/core/language/hu.json @@ -5,6 +5,7 @@ "chinese1": "Kínai (Egyszerűsített)", "chinese2": "Kínai (Hagyományos)", "croatian": "Horvát", + "dutch": "Németalföldi", "english": "Angol", "estonian": "Észt", "french": "Francia", diff --git a/core/language/it.json b/core/language/it.json index d4c7263e..96babc5f 100644 --- a/core/language/it.json +++ b/core/language/it.json @@ -5,6 +5,7 @@ "chinese1": "Cinese (semplificato)", "chinese2": "Cinese (tradizionale)", "croatian": "Croato", + "dutch": "Olandese", "english": "Inglese", "estonian": "Estone", "french": "Francese", diff --git a/core/language/jp.json b/core/language/jp.json index 93a2364e..d0cf2443 100644 --- a/core/language/jp.json +++ b/core/language/jp.json @@ -5,6 +5,7 @@ "chinese1": "中国語 (簡体字)", "chinese2": "中国語 (繁体字)", "croatian": "クロアチア語", + "dutch": "オランダの", "english": "英語", "estonian": "エストニア語", "french": "フランス語", diff --git a/core/language/ko.json b/core/language/ko.json index c74a1f5e..faf96f60 100644 --- a/core/language/ko.json +++ b/core/language/ko.json @@ -5,6 +5,7 @@ "chinese1": "중국어(간체)", "chinese2": "중국어(번체)", "croatian": "크로아티아어", + "dutch": "네덜란드의", "english": "영어", "estonian": "에스토니아어", "french": "프랑스어", diff --git a/core/language/nl.json b/core/language/nl.json new file mode 100644 index 00000000..2ac91434 --- /dev/null +++ b/core/language/nl.json @@ -0,0 +1,1217 @@ +{ + "selectmenu": { + "selectlanguage": "Kies taal", + "languageflag": "nl", + "chinese1": "Chinees (vereenvoudigd)", + "chinese2": "Chinees (traditioneel)", + "croatian": "Kroatisch", + "dutch": "Nederlands", + "english": "Engels", + "estonian": "Estisch", + "french": "Frans", + "german": "Duits", + "hindi": "Hindi", + "hungarian": "Hongaars", + "italian": "Italiaans", + "japanese": "Japans", + "korean": "Koreaans", + "norwegian": "Noors", + "polish": "Pools", + "portuguese": "Portugees", + "romanian": "Roemeens", + "russian": "Russisch", + "serbian": "Servisch", + "spanish": "Spaans" + }, + "sidemenu": { + "minting": "MINTEN BEZIG", + "mintingdetails": "MINT-DETAILS", + "becomeAMinter": "WORD EEN MINTER", + "wallets": "PORTEFEUILLE", + "tradeportal": "HANDELSPORTAAL", + "rewardshare": "BELONINGS-DEEL", + "nameregistration": "NAAM-REGISTRATIES", + "websites": "WEBSITES", + "management": "BEHEER", + "datamanagement": "DATA-BEHEER", + "qchat": "Q-CHAT", + "groupmanagement": "GROEPEN-BEHEER", + "puzzles": "RAADSELS", + "nodemanagement": "NODE-BEHEER", + "trading": "HANDELEN", + "groups": "GROEPEN", + "sm1": "NAMEN", + "sm2": "NAMEN-BEHEER", + "sm3": "NAMEN-MARKT" + }, + "tabmenu": { + "tm1": "Mint-details", + "tm2": "Minter worden", + "tm3": "Sponsorlijst", + "tm4": "Portefeuille", + "tm5": "Handelsportaal", + "tm6": "Automatische Aankoop", + "tm7": "Belonings-deel", + "tm8": "Q-Chat", + "tm9": "Naam-registraties", + "tm10": "Namen-markt", + "tm11": "Websites", + "tm12": "Q-Apps", + "tm13": "Groepenbeheer", + "tm14": "Data-beheer", + "tm15": "Raadsels", + "tm16": "Node-beheer", + "tm17": "Nieuwe Tab", + "tm18": "Nieuwe Tab toevoegen", + "tm19": "Nieuwe Plugin toevoegen", + "tm20": "Q-App", + "tm21": "Website", + "tm22": "Plugin verwijderen", + "tm23": "Bent U zeker dat U deze Plugin wil verwijderen?", + "tm24": "Plugin-type:", + "tm25": "Selecteer het gewenste Plugin-type!", + "tm26": "Nieuwe Plugin toevoegen aan menu", + "tm27": "Plugin uit menu verwijderen", + "tm28": "Overzichtspagina", + "tm29": "Reset Tab-menu", + "tm30": "Zoek Qortal Naam", + "tm31": "Mijn gevolgde Namen", + "tm32": "Dit account volgt geen enkele gebruiker", + "tm33": "Teb-menu importeren", + "tm34": "Tab-menu exporteren", + "tm35": "Het huidige Tab-menu wordt verwijderd, en vervangen door het opgeladen Tab-menu.", + "tm36": "Tab-menu werd opgeladen", + "tm37": "Tab-Menü werd opgeslagen als", + "tm38": "DEV-MODUS", + "tm39": "Toevoegen van gepersonaliseerd framework", + "tm40": "Toevoegen en openen", + "tm41": "Fout: Ongeldige data; Gelieve opnieuw te proberen!", + "tm42": "Qortal Loterij" + }, + "login": { + "login": "Aanmelden", + "createaccount": "Account aanmaken voor gebruiker", + "name": "Naam", + "address": "Adres", + "password": "Wachtwoord", + "youraccounts": "Uw accounts", + "clickto": "Klik op uw account om aan te melden", + "needcreate": "U moet een account aanmaken of bewaren, alvorens U kan aanmelden!", + "upload": "Qortal-Backup opladen", + "howlogin": "Hoe wenst U aan te melden?", + "seed": "Memo-zin", + "seedphrase": "memo-zin", + "saved": "Opgeslagen account", + "qora": "Qora adres", + "backup": "Backup van Qortal portefeuille", + "decrypt": "Backup ontcijferen", + "save": "Bewaren in deze browser.", + "prepare": "Voorbereiding van uw account", + "areyousure": "Bent U zeker dat U deze portefeuille wenst te verwijderen uit de bewaarde portefeuilles?", + "error1": "De backup moet een geldig JSON formaat zijn", + "error2": "Geen aanmeld-optie geselecteerd", + "createwelcome": "Welkom bij Qortal. U zal merken dat het vergelijkbaar is met een RPG-spel, waarbij U als 'minter' (als U 'minter' wil worden) in het Qortal-netwerk kan opklimmen naar volgende levels, waardoor U meer QORT-blokbeloning krijgt en meer invloed zal krijgen in het netwerk in termen van stemmen bij beslissingen voor het platform.", + "createa": "Een willekeurige", + "click": "Klik hier om uw memo-zin zichtbaar te maken", + "confirmpass": "Wachtwoord bevestigen", + "willbe": "zal in achtergrond gegenereerd worden. Deze wordt gebruikt als jouw private-sleutel-generator voor jouw blockchain-account in Qortal.", + "clicknext": "Klik hieronder op VERDER om jouw Qortal-account aan te maken.", + "ready": "Uw account is nu klaar om aan te maken. Het zal bewaard worden in deze browser. Heb je dat liever niet, dan kan je die optie hieronder deactivieren. Je kan je daarna met jouw nieuwe account aanmelden (na het afmelden), met behulp van de backup van je portefeuille, die je MOET DOWNLOADEN van zodra je account aangemaakt werd.", + "welmessage": "Welkom bij Qortal", + "pleaseenter": "Geef een wachtwoord in!", + "notmatch": "De wachtwoorden komen niet overeen!", + "lessthen8": "Uw wachtwoord is minder dan 8 karakters! Dat is niet aan te raden, maar je bent vrij om deze waarschuwing negeren.", + "lessthen8-2": "Uw wachtwoord is minder dan 8 karakters!", + "entername": "Gelieve een naam in te geven!", + "downloaded": "De backup van uw portefeuille werd gedownload!", + "loading": "Bezig met laden. Even geduld...", + "createdseed": "De memo-zin voor uw account", + "saveseed": "Memo-zin bewaren", + "savein": "In de browser bewaren", + "backup2": "Dit bestand is de ENIGE manier om uw account te openen wanneer de browser/app op de computer uw account niet bewaard heeft. ZORG ERVOOR DAT JE DIT BESTAND OP MEERDERE PLAATSEN BEWAARD. Dit bestand werd uitermate veilig versleuteld op basis van het wachtwoord uit de vorige stap, wat de enige manier is om het te ontgrendelen. U kan dit bestand dus overal bewaren. Zorg zéker dat je dit bestand op verschillende plaatsen bewaard.", + "savewallet": "Bewaar het backup-bestand van de portefeuille", + "created1": "Uw account werd aangemaakt", + "created2": " en werd in deze browser bewaard.", + "downloadbackup": "Download het backup-bestand van de portefeuille", + "passwordhint": "Uw wachtwoord moet minstens 8 karakters lang zijn.", + "lp1": "Scherm vergrendelen", + "lp2": "Er werd nog geen wachtwoord voor schermvergrendeling vastgelegd!", + "lp3": "Gelieve dat nu te doen", + "lp4": "Nee, bedankt", + "lp5": "Wachtwoord vastleggen", + "lp6": "Nieuw wachtwoord voor schermvergrendeling werd vastgelegd!", + "lp7": "ONTGRENDEL", + "lp8": "Fout: Onjuist wachtwoord", + "lp9": "IS", + "lp10": "VERGRENDELD", + "lp11": "ONTGRENDEL", + "lp12": "Ontcijfering van bewaarde data", + "lp13": "Ontcijferingssleutel wordt gegenereerd", + "lp14": "Sleutel wordt gecontroleerd", + "lp15": "Onjuist wachtwoord", + "lp16": "Ontcijfering bezig", + "lp17": "Even geduld, tot er 'werkers' vrij zijn", + "lp18": "Sleuteldelen worden afgeleid", + "lp19": "Fout: Ongeldige sleutel. ", + "lp20": "Fout: Ongeldige 'nonce'", + "lp21": "Sleuteldelen combineren", + "lp22": "Sleutel is klaar" + }, + "logout": { + "logout": "AFMELDEN", + "confirmlogout": "Wenst U echt af te melden?" + }, + "fragfile": { + "selectfile": "Bestand selecteren", + "dragfile": "Sleep je backup-bestand naar hier" + }, + "settings": { + "generalinfo": "Algemene account-informatie", + "address": "Adres", + "publickey": "Publieke sleutel", + "settings": "Instellingen", + "account": "Account", + "security": "Beveiliging", + "qr_login_menu_item": "Aanmelding via QR", + "qr_login_description_1": "Scan deze code om uw portefeuille op een ander apparaat te ontgrendelen, met hetzelfde wachtwoord als waarmee bent aangemeld.", + "qr_login_description_2": "Kies een wachtwoord om uw portefeuille op een ander apparaat te openen, nadat U de QR-code hebt gescand.", + "qr_login_button_1": "Toon aanmeld-QR-code", + "qr_login_button_2": "Genereer aanmeld-QR-code", + "notifications": "Waarschuwingen", + "accountsecurity": "Account-beveiliging", + "password": "Wachtwoord", + "download": "Download backup-bestand", + "choose": "Kies een wachtwoord om het backup-bestand te versleutelen. (Dit kan hetzelfde zijn als bij aanmelding, of een ander)", + "block": "Blokkeer waarschuwingen (Komt binnenkort...)", + "playsound": "Geluid afspelen", + "shownotifications": "Toon waarschuwingen", + "nodeurl": "Adres van de node", + "nodehint": "Kies een node uit de lijst hierboven of voeg een node toe aan de lijst via de knop hieronder", + "addcustomnode": "Voeg een node toe", + "addandsave": "Toevoegen en bewaren", + "protocol": "Protocol", + "domain": "Domein", + "port": "Poort", + "import": "Nodes importeren", + "export": "Nodes exporteren", + "deletecustomnode": "Alle manueel toegevoegde nodes verwijderen", + "warning": "De bestaande lijst van nodes wordt gewist, en vervangen door die uit de backup.", + "snack1": "Manueel toegevoegde nodes werd verwijderd, en standaard nodes toegevoegd", + "snack2": "UI verbonden met Qortal Core node", + "snack3": "Manueel toegevoegde nodes werd toegevoegd en bewaard", + "snack4": "Lijst van nodes werd bewaard als", + "snack5": "Lijst van nodes werd geïmporteerd", + "snack6": "Manueel toegevoegde nodes werd verwijderd", + "snack7": "Manueel toegevoegde nodes werd aangepast", + "exp1": "Export/download jouw PRIVÉ hoofdsleutel", + "exp2": "Export/download jouw hoofdsleutel", + "exp3": "Exporteren", + "exp4": "Selecteer een portefeuille om de PRIVÉ hoofdsleutel te bewaren.", + "core": "Core-instellingen starten", + "qappNotification1": "Q-App waarschuwingen", + "selectnode": "Gelieve een optie te selecteren" + }, + "appinfo": { + "blockheight": "Blokhoogte", + "uiversion": "UI-versie", + "coreversion": "Core-versie", + "minting": "(minten bezig)", + "synchronizing": "Synchronisatie loopt", + "peers": "Verbonden bondgenoten" + }, + "walletprofile": { + "minterlevel": "Minter Level", + "blocksminted": "Verwerkte blokken", + "wp1": "Minten bezig", + "wp2": "Minten niet bezig", + "wp3": "Core-info", + "wp4": "Synchronisatie loopt", + "wp5": "Synchronisatiestatus" + }, + "general": { + "yes": "Ja", + "no": "Nee", + "confirm": "Bevestigen", + "decline": "Afwijzen", + "open": "Openen", + "close": "Sluiten", + "back": "Vorige", + "next": "Volgende", + "create": "Aanmaken", + "continue": "Verder gaan", + "save": "Bewaren", + "balance": "Saldo", + "balances": "SALDI VAN UW PORTEFEUILLES", + "update": "SALDI VAN PORTEFEUILLES HEROPVRAGEN", + "view": "Bekijken" + }, + "gifs": { + "gchange1": "GIF-Explorer", + "gchange2": "Collecties bekijken", + "gchange3": "Mijn collecties", + "gchange4": "Geabonneerde collecties", + "gchange5": "Jouw GIF-bestanden opladen", + "gchange6": "Bestand moet .GIF zijn", + "gchange7": "Collectie upladen", + "gchange8": "Naam van collectie is verplicht!", + "gchange9": "Naam van collectie", + "gchange10": "GIF-bestand werd opgeladen!", + "gchange11": "GIFs worden opgeladen; Even geduld...", + "gchange12": "Er is iets foutgegaan! Wissel even van tab, kom terug, en probeer opnieuw.", + "gchange13": "U heeft momenteel geen collecties.", + "gchange14": "U heeft momenteel geen geabonneerde collecties.", + "gchange15": "Fout bij ophalen van GIF. Nieuwe poging...", + "gchange16": "Fout bij ophalen van GIF! Wissel naar een andere collectie en probeer opnieuw!", + "gchange17": "Abonneren op deze collectie", + "gchange18": "Zoek naar een collectie...", + "gchange19": "Geen collectie gevonden!", + "gchange20": "Abborering gestart voor collectie!", + "gchange21": "Abborering voor collectie werd gestopt!", + "gchange22": "Stop abbonering voor deze collectie", + "gchange23": "Een GIF-collectie mag geen twee GIFs bevatten met dezelfde naam!", + "gchange24": "Deze naam werd reeds gebruikt voor een collectie. Probeer een andere naam!", + "gchange25": "GIF (klik om te openen)", + "gchange26": "Je hebt een account-naam nodig om GIF-bestanden te kunnen ophalen of te kunnen zenden", + "gchange27": "De totale grootte van de GIF-collectie mag niet groter zijn dan 25 MB! Gelieve opnieuw te proberen!", + "gchange28": "Individuele GIFs in een collectie mogen niet groter zijn dan 0,7 MB! Gelieve opnieuw te proberen!", + "gchange29": "Bestandsnaam" + }, + "startminting": { + "smchange1": "Minting-accounts kunnen niet opgehaald worden", + "smchange2": "Sleutel kon niet verwijderd worden", + "smchange3": "Mint-sleutel kon niet toegevoegd worden", + "smchange4": "Sponsor-sleutel kon niet aangemaakt worden", + "smchange5": "Relatie wordt aangemaakt", + "smchange6": "Even wachten op confirmatie van de blockchain", + "smchange7": "Relatie wordt afgewerkt", + "smchange8": "Mint-sleutel wordt op node toegevoegd", + "smchange9": "Klaar", + "smchange10": "Een node mag maximum 2 mint-sleutels hebben, en U probeert 3 keys toe te wijzen; Ga eerst naar Node-beheer en verwijder de key die U niet aan deze node wenst toe te wijzen; Dank U!" + }, + "mintingpage": { + "mchange1": "Algemene Minting-details", + "mchange2": "Blockchain-statistieken", + "mchange3": "Gem. tijd per Qortal-blok", + "mchange4": "Gem. blokken per dag", + "mchange5": "Gem. QORT per dag aangemaakt", + "mchange6": "Minting-account-details", + "mchange7": "Geen minter", + "mchange8": "Minten bezig", + "mchange9": "Minten niet bezig", + "mchange10": "Account-details activeren", + "mchange11": "Niet geactiveerd", + "mchange12": "Activeer dit account", + "mchange13": "Intro", + "mchange14": "Om uw account te activeren moet er een UITGAANDE transactie plaatsvinden. De meest gebruikte methode is de naam-registratie. U kan via Q-Chat aan iemand vragen om een kleine hoeveelheid QORT zodat U uw account kan activeren, of U kan QORT aankopen via het Handelsportaal, en dan eender welke UITGAANDE transactie uitvoeren. Daardoor komt uw 'publieke sleutel' in de blockchain terecht. Zolang U dat niet doet, is uw publieke sleutel enkel bij U, binnen uw Qortal interface gekend, en kan niemand uw publieke sleutel opvragen uit de blockchain.", + "mchange15": "Huidige status", + "mchange16": "Huidige level", + "mchange17": "Blokken tot volgende level", + "mchange18": "Bijft uw node 24/7 minten, dan bereikt U level", + "mchange19": "Info over minting-blokbeloning", + "mchange20": "Huidige rang", + "mchange21": "Totaal aantal minters in deze rang", + "mchange22": "Rang-aandeel per blok", + "mchange23": "Schatting per blok", + "mchange24": "Schatting per dag", + "mchange25": "Seconden", + "mchange26": "Blokken", + "mchange27": "Level", + "mchange28": "Rang", + "mchange29": "dagen", + "mchange30": "Minters", + "mchange31": "Klik hier voor hulp", + "mchange32": "Wordt een minter", + "mchange33": "Intro", + "mchange34": "Om in Qortal een minter te worden en QORT-blokbeloning te krijgen volgens uw minter-level, moet U eerst „gesponserd“ worden. Een sponsor in Qortal is een andere minter die Level 5 of hoger heeft, of een Qortal-oprichter. U krijgt dan een sponsor-sleutel van uw sponsor die U kan gebruiken om 'minten' op uw node te activeren, zodat U enige tijd later op Level 1 kan geraken. Vanaf dan kan U uw eigen mint-sleutel aanmaken, zodat U vanaf dan, per blok die op de Qortal-blockchain vastgelegd wordt, een beloning krijgt voor de ondersteuning.", + "mchange35": "Sponsering", + "mchange36": "Uw sponsor maakt voor U een „sponsor-sleutel“ aan, die U kan toevoegen op uw node om 'minten' te activeren (zonder beloning tot U op Level 1 geraakt). Van zodra U op Level 1 bent aangekomen, maakt U uw eigen „Minting Key“ aan, en begint U met het verdienen van beloningen.", + "mchange37": "Wendt U tot één van de vele minters in Qortal die Level 5 of hoger heeft, om een sponsor-sleutel te bemachtigen, kom dan terug naar hier om die sleutel in te geven, en uw minting-reis kan beginnen!", + "mchange38": "over" + }, + "becomeMinterPage": { + "bchange7": "Geef de sponsor-sleutel in", + "bchange8": "Geef hier de sleutel in die je van jouw sponsor gekregen hebt", + "bchange10": "Huidige sponseringstatus", + "bchange12": "Minten met sponsor-sleutel", + "bchange13": "Overblijvend aantal blokken in sponsor-periode", + "bchange15": "Relatie met sponsor", + "bchange16": "Sponsor-account", + "bchange17": "Sponsor-sleutel kopiëren", + "bchange18": "Beginnen met minten", + "bchange19": "Gelukt! U bent nu een minter." + }, + "walletpage": { + "wchange1": "Ophalen van saldo...", + "wchange2": "Huidige portefeuille", + "wchange3": "Portefeuille-adres naar klembord kopiëren", + "wchange4": "Adres naar klembord gekopieerd", + "wchange5": "Transactie-details", + "wchange6": "Soort transactie", + "wchange7": "UIT", + "wchange8": "IN", + "wchange9": "Afzender", + "wchange10": "Ontvanger", + "wchange11": "Hoeveelheid", + "wchange12": "Transactie-kost", + "wchange13": "Blok", + "wchange14": "Tijd", + "wchange15": "Transactie-ondertekening", + "wchange16": "Transactie-hash", + "wchange17": "Verstuur", + "wchange18": "Van adres", + "wchange19": "Beschikbaar saldo", + "wchange20": "Aan (adres of naam)", + "wchange21": "Huidige vaste kost", + "wchange22": "Portefeuilles", + "wchange23": "Aan (adres)", + "wchange24": "Huidige kost per byte", + "wchange25": "Lage kosten kunnen leiden tot trage of onbevestigde transacties.", + "wchange26": "Onvoldoende reserve!", + "wchange27": "Ongeldige hoeveelheid!", + "wchange28": "Ontvanger mag niet leeg zijn!", + "wchange29": "Ongeldige ontvanger!", + "wchange30": "Transactie is gelukt!", + "wchange31": "Transactie mislukt!", + "wchange32": "Ophalen van QORT-saldo lukte niet. Probeer opnieuw!", + "wchange33": "Ophalen is mislukt", + "wchange34": "Saldo. Probeer opnieuw!", + "wchange35": "Type", + "wchange36": "Kost", + "wchange37": "Totaal bedrag", + "wchange38": "Adres heeft nog geen transacties.", + "wchange39": "Adres kan niet gekopieerd worden.", + "wchange40": "BETALING", + "wchange41": "Status", + "wchange42": "Bevestigingen", + "wchange43": "Uw transactie zal pas verschijnen als ze werd goedgekeeurd. Even geduld graag...", + "wchange44": "Gelieve opnieuw te proberen...", + "wchange45": "Alles versturen", + "wchange46": "Verstuur naar dit adres", + "wchange47": "Adresboek", + "wchange48": "Dit adresboek is leeg!", + "wchange49": "Toevoegen aan adresboek", + "wchange50": "Naam mag niet leeg zijn!", + "wchange51": "Adres mag niet leeg zijn!", + "wchange52": "Adres werd toegevoegd!", + "wchange53": "Adresboek importeren", + "wchange54": "Adresboek exporteren", + "wchange55": "Uw huidige adresboek zal verwijderd worden en vervange worden door nieuwe gegevens.", + "wchange56": "OPGEPAST!", + "wchange57": "Memo", + "wchange58": "Nieuw adres", + "wchange59": "Munt" + }, + "tradepage": { + "tchange1": "Handelsportaal", + "tchange2": "Kies een munten-koppel", + "tchange3": "MARKT-HISTORIEK", + "tchange4": "MIJN HANDELSGESCHIEDENIS", + "tchange5": "OPEN MARKT VERKOOP-OPDRACHTEN", + "tchange6": "MIJN BESTELLINGEN", + "tchange7": "Vastzittende aanbiedingen", + "tchange8": "Hoeveelheid", + "tchange9": "Prijs", + "tchange10": "Totaal", + "tchange11": "Datum", + "tchange12": "Status", + "tchange13": "Verkoper", + "tchange14": "Prijs per stuk", + "tchange15": "Velden leegmaken", + "tchange16": "U hebt", + "tchange17": "Actie", + "tchange18": "KOPEN", + "tchange19": "VERKOPEN", + "tchange20": "Opdracht kon niet aangemaakt worden. Probeer opnieuw!", + "tchange21": "Opdracht kon niet aangemaakt worden. Foutcode", + "tchange22": "Onvoldoende reserve!", + "tchange23": "Aankoop-opdracht gelukt!", + "tchange24": "Aankoop-opdracht bestaat reeds!", + "tchange25": "Opdracht kon niet aangemaakt worden. Foutcode", + "tchange26": "Bezig met onderbreken van opdracht!", + "tchange27": "Opdracht kon niet onderbroken worden. Probeer opnieuw!", + "tchange28": "Opdracht kon niet onderbroken worden. Foutcode", + "tchange29": "ONDERBREKEN", + "tchange30": "Saldo kon niet opgrhaald worden. Probeer opnieuw!", + "tchange31": "VERKOCHT", + "tchange32": "AANGEKOCHT", + "tchange33": "Gemiddelde", + "tchange34": "Hoeveelheid mag niet 0 zijn", + "tchange35": "De prijs mag niet 0 zijn", + "tchange36": "UITSTAANDE AUTO-AANKOOP", + "tchange37": "Geen auto-aankoop-opdracht gevonden!", + "tchange38": "TOEVOEGEN", + "tchange39": "AUTO-AANKOOP-OPDRACHT", + "tchange40": "Prijs", + "tchange41": "Automatische aankoop-opdracht werd verwijderd!", + "tchange42": "MARKT OPENSTAANDE VERKOPEN", + "tchange43": "MIJN AANKOOPGESCHIEDENIS", + "tchange44": "Automatische aankoop-opdracht werd toegevoegd!", + "tchange45": "AUTO-AANKOOP MET", + "tchange46": "AUTO-AANKOOP", + "tchange47": "Verkoop voor deze prijs", + "tchange48": "NIET GENOEG", + "tchange49": "Prijsverloop" + }, + "rewardsharepage": { + "rchange1": "Belonings-deel", + "rchange2": "Aanmaken van belonings-deel", + "rchange3": "Belonings-delen die betrekking hebben op dit account", + "rchange4": "Minting-account", + "rchange5": "Procent aandeel", + "rchange6": "Ontvanger", + "rchange7": "Actie", + "rchange8": "Type", + "rchange9": "Level 1 - 4 kunnen een zelf-beloning aanmaken en Level 5 en hoger kunnen een belonings-deel toekennen!", + "rchange10": "Publieke sleutel van de ontvanger", + "rchange11": "Belonings-deel in procent", + "rchange12": "Doe iets heerlijk", + "rchange13": "Minting-account toevoegen", + "rchange14": "Toevoegen", + "rchange15": "Dit account is niet betrokken in belonings-deelname", + "rchange16": "Zelf-belonings-deel", + "rchange17": "Verwijderen", + "rchange18": "Er kunnen geen meerdere belonings-delen aangemaakt worden!", + "rchange19": "Er kunnen geen meerdere zelf-belonings-delen aangemaakt worden!", + "rchange20": "BELONINGS-DEEL KAN NIET AANGEMAAKT WORDEN! voor level", + "rchange21": "Belonings-deel toegevoegd!", + "rchange22": "Belonings-deel werd verwijderd!" + }, + "registernamepage": { + "nchange1": "Naamregistratie", + "nchange2": "Registreer een naam", + "nchange3": "Geregistreerde naam", + "nchange4": "Avatar", + "nchange5": "Naam", + "nchange6": "Eigenaar", + "nchange7": "Actie", + "nchange8": "Er werd geen naam geregistreerd voor dit account!", + "nchange9": "Registreer een naam!", + "nchange10": "Beschrijving (optioneel)", + "nchange11": "Doe iets heerlijk", + "nchange12": "Naamregistratie bezig", + "nchange13": "De kost van een naamregistratie bedraagt", + "nchange14": "Registreren", + "nchange15": "Avatar instellen", + "nchange16": "Core-Update nodig", + "nchange17": "Naam bestaat reeds!", + "nchange18": "Naamregistratie gelukt!", + "nchange19": "Naam verkopen", + "nchange20": "Verkoop onderbreken", + "nchange21": "Naam kopen", + "nchange22": "Namenmarkt", + "nchange23": "Verkoopprijs", + "nchange24": "Geen namen om te verkopen", + "nchange25": "Te verkopen naam", + "nchange26": "Bent U zeker dat U deze naam wenst te verkopen?", + "nchange27": "Voor deze prijs in QORT", + "nchange28": "Als je nu bevestigen kiest, dan wordt de verkoop-aanvraag verzonden!", + "nchange29": "Te onderbreken naam-verkoop", + "nchange30": "Bent U zeker dat U deze verkoop-aanvraag wenst te onderbreken?", + "nchange31": "Als je nu bevestigen kiest, dan wordt de verkoop-onderbreking verzonden!", + "nchange32": "Aanvraag voor naam-verkoop gelukt!", + "nchange33": "Onderbeken van naam-verkoop gelukt!", + "nchange34": "Aanvraag voor naam-aankoop gelukt!", + "nchange35": "JE HEBT EEN NAAM!", + "nchange36": "Enkel accounts met een naam kunnen een naam kopen.", + "nchange37": "OPGELET!", + "nchange38": "U hebt niet genoeg Qort om deze naam te kopen.", + "nchange39": "Bent U zeker dat U deze naam wenst te kopen?", + "nchange40": "Als je nu bevestigen kiest, dan wordt de naam-aankoop verzonden!", + "nchange41": "Oude naam", + "nchange42": "Nieuwe naam", + "nchange43": "Bent U zeker dat U deze naam wil vervangen?", + "nchange44": "Door de nieuwe naam", + "nchange45": "Als je nu bevestigen kiest, dan wordt de naamsverandering verzonden!", + "nchange46": "Naam-verkoopgeschiedenis", + "nchange47": "Naamsverandering is gelukt!", + "nchange48": "Opgelet! Als je jouw naam veranderd, dan geef je alle gegevens weg die aan de oude naam gekoppeld zijn. Met andere woorden, je zal geen eigenaar meer zijn van de gegevens die op QDN geplaatst werden onder de oude naam. Wees voorzichtig, en denk kijk alles eerst nog eens goed na!" + }, + "websitespage": { + "schange1": "Overzicht van websites", + "schange2": "Gevolgde websites", + "schange3": "Geblokkeerde websites", + "schange4": "Website zoeken", + "schange5": "Avatar", + "schange6": "Details", + "schange7": "Gepubliceerd door", + "schange8": "Acties", + "schange9": "Websites", + "schange10": "Geen websites beschikbaar", + "schange11": "Uw gevolgde websites", + "schange12": "Gevolgde websites", + "schange13": "U volgt geen websites", + "schange14": "Uw geblokkeerde websites", + "schange15": "Geblokkeerde websites", + "schange16": "U blokkeert geen websites", + "schange17": "Naam niet gevonden!", + "schange18": "De Relay-Modus is Actief. Dit betekend dat uw node meehelpt om versleutelde data in het netwerk te transporteren, als een andere node die opvraagt. Als U dit niet wil, kies dan", + "schange19": "in", + "schange20": "De Relay-Modus is uitgeschakeld. Wenst U dit te veranderen, kies dan", + "schange21": "Website publiceren", + "schange22": "Er is een fout opgetreden bij 'naam volgen'. Gelieve opnieuw te proberen!", + "schange23": "Er is een fout opgetreden bij 'naam niet meer volgen'. Gelieve opnieuw te proberen!", + "schange24": "Er is een fout opgetreden bij 'naam blokkeren'. Gelieve opnieuw te proberen!", + "schange25": "Er is een fout opgetreden bij 'naam niet meer blokkeren'. Gelieve opnieuw te proberen!", + "schange26": "Geen categorie", + "schange27": "Grootte", + "schange28": "Status", + "schange29": "Volgen", + "schange30": "Niet meer volgen", + "schange31": "Blokkeren", + "schange32": "Niet meer blokkeren", + "schange33": "Op te zoeken naam", + "schange34": "Naam mag niet leeg zijn!", + "schange35": "Zoeken" + }, + "appspage": { + "schange1": "Overzicht Q-Apps", + "schange2": "Gevolgde Q-Apps", + "schange3": "Geblokkeerde Q-Apps", + "schange4": "Q-Apps zoeken", + "schange5": "Avatar", + "schange6": "Details", + "schange7": "Gepubliceerd door", + "schange8": "Acties", + "schange9": "Q-Apps", + "schange10": "Geen Q-Apps beschikbaar", + "schange11": "Uw gevolgde Q-Apps", + "schange12": "Gevolgde Q-Apps", + "schange13": "U volgt geen Q-Apps", + "schange14": "Uw geblokkeerde Q-Apps", + "schange15": "Geblokkeerde Q-Apps", + "schange16": "U blokkeert geen Q-Apps", + "schange17": "Naam niet gevonden!", + "schange18": "De Relay-Modus is Actief. Dit betekend dat uw node meehelpt om versleutelde data in het netwerk te transporteren, als een andere node die opvraagt. Als U dit niet wil, kies dan", + "schange19": "in", + "schange20": "De Relay-Modus is uitgeschakeld. Wenst U dit te veranderen, kies dan", + "schange21": "Q-App publiceren", + "schange22": "Er is een fout opgetreden bij 'naam volgen'. Gelieve opnieuw te proberen!", + "schange23": "Er is een fout opgetreden bij 'naam niet meer volgen'. Gelieve opnieuw te proberen!", + "schange24": "Er is een fout opgetreden bij 'naam blokkeren'. Gelieve opnieuw te proberen!", + "schange25": "Er is een fout opgetreden bij 'naam niet meer blokkeren'. Gelieve opnieuw te proberen!", + "schange26": "Geen categorie", + "schange27": "Grootte", + "schange28": "Status", + "schange29": "Volgen", + "schange30": "Niet meer volgen", + "schange31": "Blokkeren", + "schange32": "Niet meer blokkeren", + "schange33": "Op te zoeken naam", + "schange34": "Naam mag niet leeg zijn!", + "schange35": "Zoeken", + "schange36": "Downloaden", + "schange37": "Download gelukt", + "schange38": "Bijwerken", + "schange39": "Openen", + "schange40": "Voorbeeld", + "schange41": "Download bezig; Even geduld...", + "schange42": "Bestanden die werden gedownload" + }, + "tubespage": { + "schange1": "Overzicht Q-Tubes", + "schange2": "Gevolgde Q-Tubes", + "schange3": "Geblokkeerde Q-Tubes", + "schange4": "Q-Tubes zoeken", + "schange5": "Hoes", + "schange6": "Details", + "schange7": "Gepubliceerd door", + "schange8": "Acties", + "schange9": "Q-Tubes", + "schange10": "Geen Q-Tubes beschikbaar", + "schange11": "Uw gevolgde Q-Tubes", + "schange12": "Gevolgde Q-Tubes", + "schange13": "U volgt geen Q-Tubes", + "schange14": "Uw geblokkeerde Q-Tubes", + "schange15": "Geblokkeerde Q-Tubes", + "schange16": "U blokkeert geen Q-Tubes", + "schange17": "Naam niet gevonden!", + "schange18": "De Relay-Modus is Actief. Dit betekend dat uw node meehelpt om versleutelde data in het netwerk te transporteren, als een andere node die opvraagt. Als U dit niet wil, kies dan", + "schange19": "in", + "schange20": "De Relay-Modus is uitgeschakeld. Wenst U dit te veranderen, kies dan", + "schange21": "Video publiceren", + "schange22": "Er is een fout opgetreden bij 'naam volgen'. Gelieve opnieuw te proberen!", + "schange23": "Er is een fout opgetreden bij 'naam niet meer volgen'. Gelieve opnieuw te proberen!", + "schange24": "Er is een fout opgetreden bij 'naam blokkeren'. Gelieve opnieuw te proberen!", + "schange25": "Er is een fout opgetreden bij 'naam niet meer blokkeren'. Gelieve opnieuw te proberen!", + "schange26": "Geen categorie", + "schange27": "Grootte", + "schange28": "Status", + "schange29": "Volgen", + "schange30": "Niet meer volgen", + "schange31": "Blokkeren", + "schange32": "Niet meer blokkeren", + "schange33": "Op te zoeken naam", + "schange34": "Naam mag niet leeg zijn!", + "schange35": "Zoeken", + "schange36": "Downloaden", + "schange37": "Download gelukt", + "schange38": "Bijwerken", + "schange39": "Openen", + "schange40": "Voorbeeld", + "schange41": "Download bezig; Even geduld...", + "schange42": "Bestanden die werden gedownload", + "schange43": "Bezig met openen; Even geduld..." + }, + "publishpage": { + "pchange1": "Publiceren", + "pchange2": "Bijwerken", + "pchange3": "Tip: Voor je data publiceert, kan je best 'port forwarding' activeren, zodat andere nodes in het netwerk jouw data gemakkelijker kunnen vinden.", + "pchange4": "Namen kiezen", + "pchange5": "Titel", + "pchange6": "Beschrijving", + "pchange7": "Categorie selecteren", + "pchange8": "Sleutelwoord", + "pchange9": "Service", + "pchange10": "Identificator", + "pchange11": "Publiceren", + "pchange12": "Selecteer het ZIP-bestand met de statische inhoud", + "pchange13": "Lokaal pad naar statische bestanden", + "pchange14": "Kies de geregistreerde naam waaronder de data gepubliceerd moeten worden", + "pchange15": "Selecteer het bestand dat opgenomen moet worden", + "pchange16": "Selecteer het ZIP-bestand dat opgenomen moet worden", + "pchange17": "Geef het pad naar de folder waarin de statische data zich bevind", + "pchange18": "Gelieve een service-naam in te geven", + "pchange19": "De data wordt verwerkt... Dit kan een tijdje duren...", + "pchange20": "Fout:", + "pchange21": "Interne Serverfout bij het publiceren van de data", + "pchange22": "Berekening van het bewijs van geleverde arbeid... Dit kan een tijdje duren...", + "pchange23": "Transactie is gelukt!", + "pchange24": "Transactie kon niet gevalideerd en verwerkt worden", + "pchange25": "Selecteer bestand", + "pchange26": "Data wordt opgeladen... Dit kan een tijdje duren..." + }, + "browserpage": { + "bchange1": "Verder", + "bchange2": "Herladen", + "bchange3": "Terug naar lijst", + "bchange4": "Verwijderen", + "bchange5": "van deze node", + "bchange6": "Uw browser ondersteunt geen 'iframes'", + "bchange7": "Volgen", + "bchange8": "Niet meer volgen", + "bchange9": "Blokkeren", + "bchange10": "Niet meer blokkeren", + "bchange11": "Er is een fout opgetreden bij 'naam volgen'. Gelieve opnieuw te proberen!", + "bchange12": "Er is een fout opgetreden bij 'naam niet meer volgen'. Gelieve opnieuw te proberen!", + "bchange13": "Er is een fout opgetreden bij 'naam blokkeren'. Gelieve opnieuw te proberen!", + "bchange14": "Er is een fout opgetreden bij 'naam niet meer blokkeren'. Gelieve opnieuw te proberen!", + "bchange15": "Data van gevolgde namen kan niet verwijderd worden. Dus eerst het volgen van deze naam stopzetten.", + "bchange16": "Er is een fout opgetreden tijdens het verwijderen. Gelieve opnieuw te proberen!", + "bchange17": "De gebruiker wenst de detals van dit account niet te delen", + "bchange18": "vraagt om authenticatie. Wenst U daarop in te gaan?", + "bchange19": "Geeft U deze applicatie toelating om data op QDN te publiceren?", + "bchange20": "Geeft U deze applicatie toelating om uw portefeuille-saldo te consulteren?", + "bchange21": "Ophalen van portefeuille is mislukt. Gelieve opnieuw te proberen!", + "bchange22": "Geeft U deze applicatie toelating om een chat-bericht te versturen?", + "bchange23": "Bericht werd verzonden!", + "bchange24": "Hierbij wordt uw QORT-adres gedeeld, zodat uw account kan interageren met", + "bchange25": "Er worden geen sensitieve gegevens gedeeld.", + "bchange26": "Altijd automatisch authenticeren", + "bchange27": "Afwijzen", + "bchange28": "Accepteren", + "bchange29": "Onmiddellijk publiceren (kost 0,001 QORT)", + "bchange30": "Service", + "bchange31": "Naam", + "bchange32": "Identificator", + "bchange33": "Onmiddellijk publiceren", + "bchange34": "Bestandsnaam", + "bchange35": "Geeft U deze applicatie toelating om te betalen met coins?", + "bchange36": "Wenst U onmiddellijk op QDN te publiceren, zonder een Proof-of-Work te berekenen?", + "bchange37": "Volledig-scherm modus activeren", + "bchange38": "Volledig-scherm modus stoppen", + "bchange39": "Toelaten om lijst altijd automatisch op te halen", + "bchange40": "Lijst", + "bchange41": "Geeft U deze applicatie toelating om deze lijst op te vragen?", + "bchange42": "Onderdeel", + "bchange43": "Geeft U deze applicatie toelating om aan deze lijst toe te voegen?", + "bchange44": "Geeft U deze applicatie toelating om van deze lijst te verwijderen?", + "bchange45": "Versleutelen", + "bchange46": "Geeft U deze applicatie toelating om volgend bestand op te slaan?", + "bchange47": "Onmiddellijk publiceren - Kost", + "bchange48": "Geeft U deze applicatie toelating om U verwittigingen te sturen?" + }, + "datapage": { + "dchange1": "Data-beheer", + "dchange2": "Zoeken in data die op deze node opgeslagen werd", + "dchange3": "Op te zoeken data", + "dchange4": "Zoeken", + "dchange5": "Geregistreerde naam", + "dchange6": "Service", + "dchange7": "Identificator", + "dchange8": "Acties", + "dchange9": "Data die op deze node opgeslagen werd", + "dchange10": "Data-naam mag niet leeg zijn!", + "dchange11": "Data niet gevonden!", + "dchange12": "Lijst van opgeslagen data kon niet opgehaald worden", + "dchange13": "Deze node heeft geen opgeslagen data", + "dchange14": "Niet meer volgen", + "dchange15": "Verwijderen", + "dchange16": "Blokkeren", + "dchange17": "Niet meer blokkeren", + "dchange18": "Er is een fout opgetreden bij 'naam blokkeren'. Gelieve opnieuw te proberen!", + "dchange19": "Er is een fout opgetreden bij 'naam niet meer volgen'. Gelieve opnieuw te proberen!", + "dchange20": "Er is een fout opgetreden bij 'naam niet meer blokkeren'. Gelieve opnieuw te proberen!", + "dchange21": "Er is een fout opgetreden bij 'verwijderen van data'. Gelieve opnieuw te proberen!" + }, + "chatpage": { + "cchange1": "Nieuw privé-bericht", + "cchange2": "Bezig met laden...", + "cchange3": "Geblokkeerde gebruikers", + "cchange4": "Nieuw bericht", + "cchange5": "(Klik om door te scrollen)", + "cchange6": "Geef aan naar welke naam of account je een privé chat-bericht wil sturen!", + "cchange7": "Naam / Adres", + "cchange8": "Bericht...", + "cchange9": "Versturen", + "cchange10": "Lijst van geblokkeerde gebruikers", + "cchange11": "Naam", + "cchange12": "Eigenaar", + "cchange13": "Actie", + "cchange14": "Voor dit account zijn er geen geblokkeerde gebruikers!", + "cchange15": "Geen naam geregistreerd", + "cchange16": "Deze gebruiker is niet meer geblokkeerd!", + "cchange17": "Het weghalen van de blokkering is mislukt. Gelieve opnieuw te proberen!", + "cchange18": "blokkering weghalen", + "cchange19": "Ongeldige naam of adres; Kijk na, en probeer opnieuw...", + "cchange20": "Bericht werd verzonden!", + "cchange21": "Versturen is mislukt; Gelieve opnieuw te proberen...", + "cchange22": "Berichten worden geladen...", + "cchange23": "Bericht kon niet ontsleuteld worden!", + "cchange24": "Het maximum aantal karakters per bericht is 255", + "cchange25": "Bericht aanpassen", + "cchange26": "Bestand is groter dan 0,5 MB", + "cchange27": "Je hebt een geregistreerde naam nodig om afbeeldingen te versturen", + "cchange28": "Dit bestand is geen afbeelding", + "cchange29": "Maximum bericht-grootte is 1000 bytes", + "cchange30": "Afbeelding wordt opgeladen. Dit kan ongeveer een minuut duren.", + "cchange31": "Afbeelding wordt verwijderd. Dit kan ongeveer een minuut duren.", + "cchange33": "Onderbeken", + "cchange34": "Dit chat-bericht gebruikt een oudere bericht-versie, waarbij deze functie niet ondersteund wordt.", + "cchange35": "Fout bij ophalen van gebruikersnaam. Gelieve opnieuw te proberen!", + "cchange36": "Zoekresultaten", + "cchange37": "Geen resultaten gevonden", + "cchange38": "Gebruiker werd geverifieerd", + "cchange39": "Naar deze gebruiker kan geen versleuteld bericht verstuurd worden, want diens 'publieke sleutel' komt niet voor in de blockchain.", + "cchange40": "AFBEELDING (klik om te tonen)", + "cchange41": "Jouw portefeuille-saldo is minder dan 4 QORT", + "cchange42": "Om spam te voorkomen worden Q-Chat berichten met vertraging verstuurd als er minder dan 4 QORT saldo beschikbaar is. Als je dat onmiddellijk wil verhelpen, zorg dan dat je meer dan 4 QORT in portefeuille hebt, hetzij via verrichtingen op het handelsportaal, of door QORT-donaties van andere Qortians. Van zodra je meer dan 4 QORT in portefeuille hebt, zullen Q-Chat-berichten direct verzonden worden, en dit bericht zal niet meer getoond worden. Dit was een noodzakelijke ingreep om spam te voorkomen. Wij danken U voor uw begrip, en hopen dat U veel plezier zal beleven aan Qortal!", + "cchange43": "Schenk QORT aan", + "cchange44": "BERICHT VERSTUREN", + "cchange45": "SCHENKING AAN GEBRUIKER", + "cchange46": "Fooi-bedrag", + "cchange47": "Beschikbaar saldo", + "cchange48": "Fout bij ophalen van QORT-saldo. Probeer opnieuw!", + "cchange49": "Huidige vaste kost", + "cchange50": "Verstuur", + "cchange51": "Onvoldoende reserve!", + "cchange52": "Ongeldige hoeveelheid!", + "cchange53": "Ontvanger mag niet leeg zijn!", + "cchange54": "Ongeldige ontvanger!", + "cchange55": "Transactie is gelukt!", + "cchange56": "Transactie mislukt!", + "cchange57": "Gebruikersinfo", + "cchange58": "BERICHT VERSTUREN", + "cchange59": "SCHENKING AAN GEBRUIKER", + "cchange60": "Wachtende groep-uitnodigingen", + "cchange61": "Fout bij ophalen van groep-uitnodigingen. Gelieve opnieuw te proberen!", + "cchange62": "Ongeldige ingave voor gebruiker / adres! Gelieve opnieuw te proberen!", + "cchange63": "Enter-toets is actief", + "cchange64": "Enter-toets is uitgeschakeld", + "cchange65": "Geef de ontvanger in", + "cchange66": "Het beantwoorde bericht is niet meer beschikbaar, want het is te oud.", + "cchange68": "aangepast", + "cchange69": "Afbeeldingen automatisch ophalen", + "cchange70": "Dit type afbeelding wordt niet ondersteund", + "cchange71": "en", + "cchange72": "anderen", + "cchange73": "", + "cchange74": "reageerden met", + "cchange75": "Bijlage wordt opgeladen. Dit kan ongeveer een minuut duren.", + "cchange76": "Bijlage wordt verwijderd. Dit kan ongeveer een minuut duren.", + "cchange77": "Bijlage is groter dan 1 MB", + "cchange78": "Bent U zeker dat U deze afbeelding wenst te verwijderen?", + "cchange79": "Bent U zeker dat U deze bijlage wenst te verwijderen?", + "cchange80": "Deze afbeelding werd verwijderd", + "cchange81": "Dit type afbeelding wordt niet ondersteund", + "cchange82": "Deze bijlage werd verwijderd", + "cchange90": "Geen berichten", + "cchange91": "Verzending bezig...", + "cchange92": "Hieronder volgen de ongelezen berichten", + "cchange93": "Afbeelding naar klembord gekopieerd", + "cchange94": "opgeladen", + "cchange95": "Enkel mijn gegevens", + "cchange96": "Groep-beheer openen", + "cchange97": "Link voor lid-aanvraag naar klembord gekopieerd" + }, + "welcomepage": { + "wcchange1": "Welkom bij Q-Chat", + "wcchange2": "Nieuw privé-bericht", + "wcchange3": "Geef aan naar welke naam of account je een privé chat-bericht wil sturen!", + "wcchange4": "Naam / Adres", + "wcchange5": "Bericht...", + "wcchange6": "Versturen", + "wcchange7": "Ongeldige naam of adres; Kijk na, en probeer opnieuw...", + "wcchange8": "Bericht werd verzonden!", + "wcchange9": "Versturen is mislukt; Gelieve opnieuw te proberen..." + }, + "blockpage": { + "bcchange1": "Gebruiker blokkeren", + "bcchange2": "Deze gebruiker werd geblokkeerd!", + "bcchange3": "Er is iets foutgelopen bij het blokkeren van deze gebruiker. Gelieve opnieuw te proberen!", + "bcchange4": "Geen naam geregistreerd", + "bcchange5": "Deze gebruiker blokkeren", + "bcchange6": "Bent U zeker dat U deze gebruiker wenst te blokkeren?", + "bcchange7": "MENU", + "bcchange8": "Adres kopiëren", + "bcchange9": "Privé-bericht", + "bcchange10": "Meer", + "bcchange11": "Antwoorden", + "bcchange12": "Aanpassen", + "bcchange13": "Reactie", + "bcchange14": "Doorsturen", + "bcchange15": "Bericht werd doorgestuurd", + "bcchange16": "Kies ontvanger, of hieronder iemand zoeken", + "bcchange17": "DOORGESTUURD", + "bcchange18": "Schenking aan gebruiker" + }, + "grouppage": { + "gchange1": "Qortal groepen", + "gchange2": "Nieuwe groep starten", + "gchange3": "Groepen waar U lid van bent", + "gchange4": "Groepsnaam", + "gchange5": "Beschrijving", + "gchange6": "Rol", + "gchange7": "Actie", + "gchange8": "Geen lid van een groep!", + "gchange9": "Openbare groepen", + "gchange10": "Eigenaar", + "gchange11": "Geen openbare groepen gevonden!", + "gchange12": "Start een nieuwe groep", + "gchange13": "Groeptype", + "gchange14": "Verplicht in te vullen veld", + "gchange15": "Selecteer een optie", + "gchange16": "Openbaar", + "gchange17": "Privé", + "gchange18": "Goedkeuringsgrens voor groep (aantal / procent admin-gebruikers die een transactie moeten goedkeuren):", + "gchange19": "GEEN", + "gchange20": "ÉÉN", + "gchange21": "Minimale blok-wachttijd voor goedkeuringen van groepstransacties:", + "gchange22": "minuten", + "gchange23": "uur", + "gchange24": "uren", + "gchange25": "dag", + "gchange26": "dagen", + "gchange27": "Maximale blok-wachttijd voor goedkeuringen van groepstransacties:", + "gchange28": "Groep wordt aangemaakt", + "gchange29": "Groep aanmaken", + "gchange30": "Aanvraag om lid te worden", + "gchange31": "Creatiedatum", + "gchange32": "Wijzigingsdatum", + "gchange33": "Verwerking lid-wording", + "gchange34": "Lid worden", + "gchange35": "Aanvraag om groep te verlaten", + "gchange36": "Verwerking van lid-verbreking", + "gchange37": "Groep verlaten", + "gchange38": "Groep-eigenaar beheren:", + "gchange39": "Groep-admins beheren:", + "gchange40": "Groep beheren", + "gchange41": "Groep werd aangemaakt!", + "gchange42": "Ongeldige groepsnaam", + "gchange43": "Ongeldige beschrijving", + "gchange44": "Kies een groeptype", + "gchange45": "Kies een goedkeurings-grens voor de groep", + "gchange46": "Kies een minimum blok-wachttijd voor goedkeuringen van groepstransacties", + "gchange47": "Kies een maximum blok-wachttijd voor goedkeuringen van groepstransacties", + "gchange48": "Aanvraag om lid te worden werd verzonden!", + "gchange49": "Aanvraag om group te verlaten werd verzonden!", + "gchange50": "Verlaten", + "gchange51": "Lid worden", + "gchange52": "Admin-gebruiker", + "gchange53": "Groepslid", + "gchange54": "Groepsleden", + "gchange55": "Zoek privé-groep", + "gchange56": "Te zoeken groepsnaam", + "gchange57": "Geen privé-groep gevonden voor opgegeven naam", + "gchange58": "Hou er rekening mee dat de groepsnaam exact overeen moet komen.", + "gchange59": "Ticker wel/niet tonen" + }, + "puzzlepage": { + "pchange1": "Puzzels", + "pchange2": "Beloning", + "pchange3": "OPGELOST door", + "pchange4": "Naam", + "pchange5": "Beschrijving", + "pchange6": "Hint / Antwoord", + "pchange7": "Actie", + "pchange8": "Doe een gok", + "pchange9": "Geef uw antwoord, los de puzzel op, en win", + "pchange10": "Uw antwoord moet 43 of 44 karakters lang zijn, en", + "pchange11": "mag geen", + "pchange12": "0 (cijfer nul), I (hoofdletter i), O (hoofdletter o) of l (kleine letter L) bevatten.", + "pchange13": "Uw gok", + "pchange14": "Uw antwoord wordt nagekeken...", + "pchange15": "Versturen", + "pchange16": "Onjuist antwoord!", + "pchange17": "Aanvraag voor belonging werd verzonden; Kijk in uw QORT-portefeuille voor de beloning!" + }, + "nodepage": { + "nchange1": "Node-beheer voor:", + "nchange2": "Node is online voor:", + "nchange3": "Minting-accounts op deze node", + "nchange4": "Minting-account toevoegen", + "nchange5": "Als je 'minten' wil activeren voor dit account, dan moet je een belonings-deel-transactie aanmaken voor jezelf, met belonings-procent op 0, en dan minten met de verkregen sleutel.", + "nchange6": "Belonings-deel-sleutel", + "nchange7": "Nieuwe minting-account", + "nchange8": "Toevoegen", + "nchange9": "Minting-account", + "nchange10": "Ontvangende account", + "nchange11": "Actie", + "nchange12": "Verwijderen", + "nchange13": "Geen minting-accounts gevonden voor deze node", + "nchange14": "Bondgenoten die met deze node verbonden zijn", + "nchange15": "Bondgenoot toevoegen", + "nchange16": "Geef het adres in van de bondgenoot node die je wil toevoegen", + "nchange17": "Adres van de bondgenoot node", + "nchange18": "Adres", + "nchange19": "Laatste hoogte", + "nchange20": "Build-versie", + "nchange21": "Tijd verbonden", + "nchange22": "Actie", + "nchange23": "Sync forceren", + "nchange24": "Node heeft geen verbonden bondgenoten", + "nchange25": "Start synchronisatie met bondgenoot node: ", + "nchange26": "Bondgenoot node werd verwijderd: ", + "nchange27": "Toevoegen van mintende node is gelukt!", + "nchange28": "Mintende node toevoegen is mislukt!", + "nchange29": "Minting-account werd verwijderd!", + "nchange30": "Verwijderen van minting-account is mislukt!", + "nchange31": "Node stoppen", + "nchange32": "Stop-aanvraag werd verzonden!", + "nchange33": "Node herstarten", + "nchange34": "Herstart-aanvraag werd verzonden!" + }, + "transpage": { + "tchange1": "Transactie-aanvraag", + "tchange2": "Afwijzen", + "tchange3": "Bevestigen", + "tchange4": "Naar", + "tchange5": "Hoeveelheid" + }, + "apipage": { + "achange1": "API-sleutel toevoegen", + "achange2": "API-sleutel", + "achange3": "Geef de API-key in voor deze node. Die kan je vinden in het bestand met denaam “apikey.txt“ in de folder waarin de 'code' geïnstalleerd werd. Je kan ook verder gaan zonder API-sleutel, maar met beperkte functionaliteit.", + "achange4": "Onderbreken", + "achange5": "Toevoegen", + "achange6": "API-sleutel werd toegevoegd", + "achange7": "ongeldige API-sleutel. Toevoeging mislukt" + }, + "transactions": { + "amount": "Hoeveelheid", + "to": "Naar", + "declined": "Gebruiker heeft transactie afgewezen!", + "namedialog1": "U staat op het punt deze naam te registreren:", + "namedialog2": "Bij confirmatie wordt deze naam geregistreerd!", + "groupdialog1": "U staat op het punt om lid te worden van deze groep:", + "groupdialog2": "Bij confirmatie wordt uw lid-aanvraag voor deze groep verzonden!", + "groupdialog3": "U staat op het punt om deze groep te verlaten:", + "groupdialog4": "Bij confirmatie wordt uw aanvraag verzonden om de groep te verlaten!", + "groupdialog5": "U staat op het punt om een nieuwe groep aan te maken:", + "groupdialog6": "Bij confirmatie wordt deze groep aangemaakt!", + "rewarddialog1": "Wenst U een nieuwe belonings-deel-transactie aan te maken, en daarbij", + "rewarddialog2": "van uw minting-beloning te delen met", + "rewarddialog3": "Zo ja, bewaar dan onderstaande sleutel. Die sleutel kan je op eender welke andere node opladen, zodat die kan minten in jouw naam.", + "rewarddialog4": "Bij confirmatie zal het belonings-deel aangemaakt worden, maar je moet wel nog bovenstaande sleutel opladen op een andere node om via die account te minten.", + "rewarddialog5": "U staat op het punt om een belonings-deel-transactie te verwijderen, die gekoppeld is aan account:", + "rewarddialog6": "Bij confirmatie zal het belonings-deel verwijderd worden, en wordt de minting-sleutel ongeldig.", + "deployAtdialog1": "U staat op het punt om een 'AT' uit te rollen", + "deployAtdialog2": "Bij confirmatie wordt de AT uitgerold!", + "deployAtdialog3": "Hoeveelheid start-saldo", + "votedialog1": "Uw stem wordt gevraagd voor onderstaande polling:", + "votedialog2": "Bij confirmatie wordt uw stem verzonden!", + "votedialog3": "U staat op het punt om onderstaande polling aan te maken:", + "votedialog4": "Beschrijving van de polling", + "votedialog5": "Opties", + "votedialog6": "Bij confirmatie wordt de polling aangemaakt!" + }, + "sponsorshipspage": { + "schange1": "Actieve sponseringen", + "schange2": "Account-adres", + "schange3": "Totaal actieve sponseringen", + "schange4": "Volgende sponsering eindigd binnen", + "schange5": "Sponser nieuwe minter", + "schange6": "Sponsering stopzetten", + "schange7": "Klaar", + "schange8": "Adressen", + "schange9": "Je hebt momenteel geen actieve sponseringen", + "schange10": "Zoeken via publieke sleutel", + "schange11": "Kopiëren", + "schange12": "Converteer adres naar publieke sleutel", + "schange13": "Adres ingeven", + "schange14": "Verwerking bezig", + "schange15": "Bijna klaar", + "schange16": "Kopieer onderstaande sleutel en geef die door aan de gesponserde persoon.", + "schange17": "Gekopieerd naar klembord", + "schange18": "Let op: Deze plugin (en dus ook Qortal UI) mag niet afgesloten worden zolang de verwerking bezig is!", + "schange19": "Sponsering-sleutel kopiëren", + "schange20": "Relatie wordt vastgelegd", + "schange21": "Verwijder sponsoring-sleutel" + }, + "explorerpage": { + "exp1": "Op te zoeken adres of naam", + "exp2": "Account-saldo", + "exp3": "Meer info", + "exp4": "Adres of naam niet gevonden!", + "exp5": "Let op: Geregistreerde namen zijn hoofdletter-gevoelig.", + "exp6": "Oprichter", + "exp7": "Info", + "exp8": "Toon alle aankoop-verrichtingen", + "exp9": "Toon alle verkoop-verrichtingen", + "exp10": "AANKOOP-HISTORIEK", + "exp11": "VERKOOP-HISTORIEK", + "exp12": "Er werden nog geen aankopen verricht.", + "exp13": "Er werden nog geen verkopen verricht.", + "exp14": "Toon volledige info", + "exp15": "Mintend sinds", + "exp16": "Minten niet actief", + "exp17": "ALLE BETALINGEN", + "exp18": "Betalingen", + "exp19": "Verzonden", + "exp20": "Ontvangen", + "exp21": "Verrichtingen", + "exp22": "LAATSTE 5 BETALINGEN", + "exp23": "Toon alle betalingen" + }, + "managegroup": { + "mg1": "Groepsleden", + "mg2": "Uitnodigen", + "mg3": "Groep-admins", + "mg4": "Groep wijzigen", + "mg5": "Groep-beheer sluiten", + "mg6": "BANNEN", + "mg7": "UITGOOIEN", + "mg8": "Groep-ID", + "mg9": "Toegetreden", + "mg10": "Groep-admin toevoegen", + "mg11": "Wenst U dit lid toe te voegen aan de groep-admins?", + "mg12": "Bij confirmatie wordt de admin-aanvraag verzonden!", + "mg13": "Groep-admin verwijderen", + "mg14": "Admin-adres verwijderen", + "mg15": "Wenst U dit lid uit de groep-admins te verwijderen?", + "mg16": "Bij confirmatie wordt de admin-verwijdering verzonden!", + "mg17": "Lid uit groep bannen", + "mg18": "Naam van lid", + "mg19": "Adres van lid", + "mg20": "Hoe lang verbannen", + "mg21": "Reden van verbanning", + "mg22": "Wenst U dit lid écht te verbannen uit de groep?", + "mg23": "Bij confirmatie wordt de verbannings-opdracht verzonden!", + "mg24": "VOOR ALTIJD", + "mg25": "Verbannen leden", + "mg26": "VERBANNING OPHEFFEN", + "mg27": "Tijdsduur van verbanning", + "mg28": "Verbanning van groepslid opheffen", + "mg29": "Wenst U de verbannng ongedaan te maken voor dit groepslid?", + "mg30": "Bij confirmatie wordt de schrappings-opdracht voor de verbanning verzonden!", + "mg31": "Lid uit de groep gooien", + "mg32": "Reden voor verwijdering", + "mg33": "Wenst U dit lid écht uit de groep te gooien?", + "mg34": "Bij confirmatie wordt de verwijder-opdracht verzonden!", + "mg35": "Geen openstaande groep-uitnodigingen", + "mg36": "Jouw openstaande groep-uitnodigingen", + "mg37": "Uit te nodigen adres of naam", + "mg38": "Geldigheid van uitnodiging", + "mg39": "Alle velden zijn verplicht in te vullen", + "mg40": "Wenst U deze gebruiker als groepslid toe te voegen?", + "mg41": "Bij confirmatie wordt de uitnodiging verzonden!", + "mg42": "Groeptype", + "mg43": "Geldigheid van uitnodiging", + "mg44": "Publieke groep", + "mg45": "Privé-groep", + "mg46": "Uitnodiging schrappen", + "mg47": "Groep-uitnodiging schrappen", + "mg48": "Wenst U de groep-uitnodiging te schrappen?", + "mg49": "Bij confirmatie wordt de groep-uitnodiging geschrapt!", + "mg50": "Komt binnenkort...", + "mg51": "Minimum 3 karakters / Maximum 32 karakters", + "mg52": "Maximum 128 karakters", + "mg53": "Jouw openstaande lid-aanvragen", + "mg54": "Geen openstaande lid-aanvragen", + "mg55": "Wenst U de lid-aanvraag te aanvaarden?", + "mg56": "Bij confimatie wordt de aanvaarding verzonden!", + "mg57": "Lid-aanvraag werd aanvaard", + "mg58": "ER GING IETS FOUT", + "mg59": "Lid-aanvraag werd geschrapt", + "mg60": "Wenst U de lid-aanvraag te schrappen?", + "mg61": "Bij confirmatie wordt de lid-aanvraag geschrapt!" + }, + "info": { + "inf1": "Info over handelsportaal", + "inf2": "Info over Handelsportaal sluiten", + "inf3": "Dit is een marktplaats om QORT te KOPEN", + "inf4": "- 'Open-markt-verkopen' zijn QORT-VERKOOP-ORDERS.", + "inf5": "Je kan slechts ÉÉN order tegelijk aankopen. Klik gewoon op een order dat je wenst aan te kopen,", + "inf6": "en dat order zal in het vak 'QORT AANKOPEN' komen te staan met alle details. Klik vervolgens op 'AANKOPEN' om te bevestigen.", + "inf7": "Informatie over automatische aankoop", + "inf8": "Info over automatische aankoop sluiten", + "inf9": "'Automatische aamkoop' is een functie waarmee je 'aankoop-orders' op het handelsportaal kan plaatsen. Die 'aankoop-orders' zijn enkel zichtbaar voor de persoon die ze plaatst. Het zijn geen 'publiek zichtbare orders' zoals de 'open-markt-verkoop-orders' en ze worden NIET op de Qortal blockchain bewaard. 'Automatische aankoop' is een UI-functie, die bij gevolg enkel werkt zolang de UI blijft draaien.", + "inf10": "Om via 'Automatiche aankoop' een bestelling te plaatsen, klik je op 'auto-aankoop toevoegen' en vul je de velden in het dialoogje in. Geef het QORT-BEDRAG in dat je wenst te KOPEN, en de MAXIMUM PRIJS DIE JE ERVOOR WIL BETALEN. Zodra de bestelling actief is, zal 'Auto aankoop' QORT aankopen tot het opgegeven QORT-BEDRAG en daarbij maximum de door jou vastgelegde prijs, én beginnend bij de laagst aangeboden verkoop-prijs in het verkoop-orderboek.", + "inf11": "Laat vervolgens de UI gewoon open staan, en de 'auto aankoop' functie doet de rest, volledig automatisch!", + "inf12": "Je KAN ondertussen ook gewoon andere Qortal UI plugins gebruiken (Q-Chat, Portefeuille, etc), maar je mag DE UI NIET SLUITEN, als je wil dat 'Auto aankoop' functie blijft werken. De UI 'minimized' zetten (op de 'taskbar' of 'panel') mag wel. Zolang UI actief is, blijft de 'Auto aankoop' functie werken.", + "inf13": "Automatisch aankopen", + "inf14": "met", + "inf15": "Actieve auto-aankoop-orders", + "inf16": "Automatische aankoop", + "inf17": "Schakel 'lichte modus' in", + "inf18": "Schakel 'donkere modus' in" + }, + "lotterypage": { + "lot1": "Openbare Qortal-loterij", + "lot2": "AT-adres", + "lot3": "Blok gestart", + "lot4": "Betalings-blok", + "lot5": "Op loterij meespelen", + "lot6": "Afgesloten Qortal-Lotterien", + "lot7": "Gewonnen bedrag", + "lot8": "Winnaar", + "lot9": "Uitbetaald", + "lot10": "Qortal-loterij meespelen", + "lot11": "Er zijn momenteel geen open loterijen!", + "lot12": "Er zijn geen afgesloten loterijen!", + "lot13": "Deelnemers" + }, + "notifications": { + "notify1": "Transactie bevestigen", + "notify2": "Transactie werd bevestigd", + "explanation": "Uw transactie wordt nagekeken/bevestigd. Klik op 'het belletje' om de voortgang op te volgen.", + "status1": "Volledig gesynchroniseerd", + "status2": "Niet gesynchroniseerd", + "notify3": "Geen waarschuwingen", + "notify4": "Tx waarschuwingen (transacties)" + }, + "friends": { + "friend1": "Naam toevoegen", + "friend2": "Een vriend toevoegen", + "friend3": "Door iemand als vriend toe te voegen, kan je die persoon gemakkelijker contacteren. Door die persoon daarnaast ook te volgen, zorg je voor extra spreiding van diens gepubliceerde data.", + "friend4": "Notities", + "friend5": "Naam volgen", + "friend6": "Alias", + "friend7": "Voeg een alias toe om je vriend gemakkelijker te herkennen (optioneel)", + "friend8": "Verstuur Q-Chat", + "friend9": "Verstuur Q-Mail", + "friend10": "Vriend wijzigen", + "friend11": "Volgend", + "friend12": "Vrienden", + "friend13": "Feed", + "friend14": "Vriend verwijderen", + "friend15": "Feed-instellingen", + "friend16": "Selecteer de Q-Apps die je wil opvolgen, vooral die gerelateerd aan je vrienden.", + "friend17": "Geen meldingen in jouw feed" + }, + "save": { + "saving1": "Ophalen van opgeslagen instellingen is niet gelukt", + "saving2": "Er is niets om op te slaan", + "saving3": "Opslaan van wijzigingen", + "saving4": "Wijzigingen ongedaan maken" + } +} \ No newline at end of file diff --git a/core/language/no.json b/core/language/no.json index 59f68d57..d834160b 100644 --- a/core/language/no.json +++ b/core/language/no.json @@ -5,6 +5,7 @@ "chinese1": "Kinesisk (Forenklet)", "chinese2": "Kinesisk (Tradisjonell)", "croatian": "Kroatisk", + "dutch": "Nederlandsk", "english": "Engelsk", "estonian": "Estisk", "french": "Fransk", diff --git a/core/language/pl.json b/core/language/pl.json index 6a3bb943..ff3cc0c1 100644 --- a/core/language/pl.json +++ b/core/language/pl.json @@ -5,6 +5,7 @@ "chinese1": "Chiński (uproszczony)", "chinese2": "Chiński (tradycyjny)", "croatian": "Chorwacki", + "dutch": "Holenderski", "english": "Angielski", "estonian": "Estoński", "french": "Francuski", diff --git a/core/language/pt.json b/core/language/pt.json index e2422330..6bce0dc8 100644 --- a/core/language/pt.json +++ b/core/language/pt.json @@ -5,6 +5,7 @@ "chinese1": "Chinês Simplificado)", "chinese2": "Chinês (Tradicional)", "croatian": "Croata", + "dutch": "Holandês", "english": "Inglês", "estonian": "Estoniano", "french": "Francês", diff --git a/core/language/ro.json b/core/language/ro.json index 598379e4..74c94aca 100644 --- a/core/language/ro.json +++ b/core/language/ro.json @@ -5,6 +5,7 @@ "chinese1": "Chineza (simplificata)", "chinese2": "Chineza (traditionala)", "croatian": "Croata", + "dutch": "Olandez", "english": "Engleza", "estonian": "Estonian", "french": "Franceza", diff --git a/core/language/rs.json b/core/language/rs.json index d20377b2..c22d9427 100644 --- a/core/language/rs.json +++ b/core/language/rs.json @@ -5,6 +5,7 @@ "chinese1": "Kineski (pojednostavljeni)", "chinese2": "Kineski (tradicionalni)", "croatian": "Hrvatski", + "dutch": "Holandski", "english": "Engleski", "estonian": "Estonski", "french": "Francuski", diff --git a/core/language/ru.json b/core/language/ru.json index fbf16ee8..bb7949fa 100644 --- a/core/language/ru.json +++ b/core/language/ru.json @@ -5,6 +5,7 @@ "chinese1": "Китайский (упрощенный)", "chinese2": "Китайский (традиционный)", "croatian": "Хорватский", + "dutch": "Голландский", "english": "Английский", "estonian": "Эстонский", "french": "Французкий", diff --git a/core/language/us.json b/core/language/us.json index bc27604e..c4b49e0b 100644 --- a/core/language/us.json +++ b/core/language/us.json @@ -5,6 +5,7 @@ "chinese1": "Chinese (Simplified)", "chinese2": "Chinese (Traditional)", "croatian": "Croatian", + "dutch": "Dutch", "english": "English", "estonian": "Estonian", "french": "French", @@ -75,7 +76,7 @@ "tm29": "Reset Tab Menu", "tm30": "Search Qortal Name", "tm31": "My Followed Names", - "tm32": "This account not follow any user", + "tm32": "This account does not follow any user", "tm33": "Import Tab Menu", "tm34": "Export Tab Menu", "tm35": "Your existing tab menu will be deleted and set to uploaded tab menu.", @@ -83,8 +84,8 @@ "tm37": "Tab Menu Successfully Saved As", "tm38": "DEV MODE", "tm39": "Add Custom Framework", - "tm40": "Add And Open", - "tm41": "Error: Invalid data please try again !", + "tm40": "Add and Open", + "tm41": "Error: Invalid data please try again!", "tm42": "Qortal Lottery" }, "login": { @@ -113,9 +114,9 @@ "createa": "A", "click": "Click to view seedphrase", "confirmpass": "Confirm Password", - "willbe": "will be randomly generated in background. This is used as your private key generator for your blockchain account in Qortal.", + "willbe": "will be randomly generated in the background. This is used as your private key generator for your blockchain account in Qortal.", "clicknext": "Create your Qortal account by clicking NEXT below.", - "ready": "Your account is now ready to be created. It will be saved in this browser. If you do not want your new account to be saved in your browser, you can uncheck the box below. You will still be able to log in with your new account(after logging out), using your wallet backup file that you MUST download once you create your account.", + "ready": "Your account is now ready to be created. It will be saved in this browser. If you do not want your new account to be saved in your browser, you can uncheck the box below. You will still be able to log in with your new account (after logging out), using your wallet backup file that you MUST download once you create your account.", "welmessage": "Welcome to Qortal", "pleaseenter": "Please enter a Password!", "notmatch": "Passwords do not match!", @@ -134,11 +135,11 @@ "downloadbackup": "Download Wallet BackUp File", "passwordhint": "A password must be at least 8 characters.", "lp1": "Lock Screen", - "lp2": "No Lock Screen Password Is Set !", - "lp3": "Please Set One", + "lp2": "No screen lock password is set!", + "lp3": "Please set one", "lp4": "No Thanks", "lp5": "Set Password", - "lp6": "New screen lock password set successfully !", + "lp6": "New screen lock password set successfully!", "lp7": "UNLOCK", "lp8": "Error: Incorrect password", "lp9": "IS", @@ -187,7 +188,7 @@ "nodeurl": "Node Url", "nodehint": "Select a node from the default list of nodes above or add a custom node to the list above by clicking on the button below", "addcustomnode": "Add Custom Node", - "addandsave": "Add And Save", + "addandsave": "Add and Save", "protocol": "Protocol", "domain": "Domain", "port": "Port", @@ -932,7 +933,7 @@ "gchange55": "Search Private Group", "gchange56": "Group Name To Search", "gchange57": "Private Group Name Not Found", - "gchange58": "Note that group name must exact match.", + "gchange58": "Note that group name must be an exact match.", "gchange59": "Show / Hide Ticker" }, "puzzlepage": { @@ -959,7 +960,7 @@ "nchange2": "Node has been online for:", "nchange3": "Node's minting accounts", "nchange4": "Add minting account", - "nchange5": "If you would like to mint with your own account you will need to create a rewardshare transaction to yourself (with rewardshare percent set to 0), and then mint with the rewardshare key it gives you.", + "nchange5": "If you would like to mint with your own account you will need to create a reward share transaction to yourself (with reward share percent set to 0), and then mint with the reward share key it gives you.", "nchange6": "Rewardshare key", "nchange7": "Adding minting account", "nchange8": "Add", @@ -1021,9 +1022,9 @@ "rewarddialog1": "Would you like to create a reward share transaction, sharing", "rewarddialog2": "of your minting rewards with", "rewarddialog3": "If yes, you will need to save the key below in order to mint. It can be supplied to any node in order to allow it to mint on your behalf.", - "rewarddialog4": "On pressing confirm, the rewardshare will be created, but you will still need to supply the above key to a node in order to mint with the account.", + "rewarddialog4": "On pressing confirm, the reward share will be created, but you will still need to supply the above key to a node in order to mint with the account.", "rewarddialog5": "You are removing a reward share transaction associated with account:", - "rewarddialog6": "On pressing confirm, the rewardshare will be removed and the minting key will become invalid.", + "rewarddialog6": "On pressing confirm, the reward share will be removed and the minting key will become invalid.", "deployAtdialog1": "You are deploying the AT", "deployAtdialog2": "On pressing confirm, the AT will be deployed!", "deployAtdialog3": "Initial amount balance", @@ -1110,7 +1111,7 @@ "mg25": "Banned Members", "mg26": "CANCEL BAN", "mg27": "Ban Expiry", - "mg28": "Cancel Ban Member From Group", + "mg28": "Cancel Ban for Member From Group", "mg29": "Are you sure to cancel the ban for this member from the group?", "mg30": "On pressing confirm, the cancel ban request will be sent!", "mg31": "Kick Member From Group", @@ -1150,7 +1151,7 @@ "inf2": "Close Trade Portal Info", "inf3": "This is a market to BUY QORT with", "inf4": "- 'open market sells' are QORT SELL ORDERS.", - "inf5": "You can only buy ONE order at a time simply click an order that you wish to buy with", + "inf5": "You can only buy ONE order at a time. Simply click an order that you wish to buy with", "inf6": "and it will populate the 'BUY QORT' box with the details, then click BUY.", "inf7": "Auto Buy Information", "inf8": "Close Auto Buy Info", diff --git a/core/language/zhc.json b/core/language/zhc.json index 613fd970..ce499400 100644 --- a/core/language/zhc.json +++ b/core/language/zhc.json @@ -5,6 +5,7 @@ "chinese1": "简体中文", "chinese2": "繁体中文", "croatian": "克罗地亚文", + "dutch": "荷兰语", "english": "英文", "estonian": "爱沙尼亚文", "french": "法文", diff --git a/core/language/zht.json b/core/language/zht.json index f7cf1d0a..ac3039f0 100644 --- a/core/language/zht.json +++ b/core/language/zht.json @@ -5,6 +5,7 @@ "chinese1": "簡體中文", "chinese2": "繁體中文", "croatian": "克羅地亞文", + "dutch": "荷蘭語", "english": "英文", "estonian": "愛沙尼亞文", "french": "法文", diff --git a/core/src/components/language-selector.js b/core/src/components/language-selector.js index 6549e1c1..6b9823dd 100644 --- a/core/src/components/language-selector.js +++ b/core/src/components/language-selector.js @@ -85,6 +85,7 @@ class LanguageSelector extends LitElement { + diff --git a/img/nl-flag-round-icon-32.png b/img/nl-flag-round-icon-32.png new file mode 100644 index 0000000000000000000000000000000000000000..a2bbd24e35a896db1d0398a8bf30c715199ac6b7 GIT binary patch literal 1245 zcmV<31S0#1P)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91AfN*P1ONa40RR91AOHXW0IY^$^8f$@M@d9MR9FecS8HrkMHK#K?%ns@ zvg?vcTT&28O9g3Kl!B0$wjzc{d=R%%(Zoc>O=I|>{Ls`OkrWMyhLmPg(4Q2xN-#xR z11%CUnqnH#fQAHYN(+sTy0qQhZo7MT#<^QI-j>bM;O=^ox#!Hxne%-!bMMT#1ap;> zp*$&yEg*QBgO?D%A%>bo5hkX@W0V8GiM}qzmab)eYrwAcl)vcVJJ@_sH^6_Aefva5yI-10+J7)Xe zSG}WjJ$66y4#q6XOEI_7st+=QfUz~WibCycIoXJ7?#A!zf@b55zF=T9}DFfgJgn=w0RFyo2m z_oLsLzf_jEsj8~bgh!4Y${676!1F}Iwkr%x{n4$mu&b-`3?OF1Y`=`wtMXzv+#jx@ zViQ)ccFy=3GYXstUZiNZ2q~iAJU`EpeF6?6(XP?>)D=bBh%Ad~dd_jh#XbJNiM9oS zfSP^$a4e1)7B3;Wd251Yox$yh$ejQ`B^*6H{_GRD8ekCES7q@kc6Sa%_S89&CM+3S znbQMWXwoH)Vs4S5;}ho3Izj&)&lsRSFt?g8`PycvHfw<_alaWN|8>8&*J-C9gKa>El4G0*vx5vZ*3t zvrYu20)yMF?_;~=#=iuF6?5B;kYx+Kq^2z4n|4js6oZs6X<@at{fXeyD{!Y4V|*X2 zF87jkrHTHuX|i$==(b8|KP&p6GqU1%$B96x1o{>`cge%MQ~uQGvcyKn zi~0ifB+3r+-s@mLh_U{_?D5I#Iabhh%Rwqjz%9minOpfNx#K+u#0QCkit>;kq8{V} ze}Z4T1>76~ADaLo+AStdbb~lh?N*?`B~pxhkfjU2&Bg|1h&1ClXUgSExdJm-pXOFM z6xtx#HgQ7M2;c%?E23yI1RE~$dD<)ZoQgbMtGseM00000NkvXX Hu0mjf-Dy8{ literal 0 HcmV?d00001 diff --git a/locales/nl.json b/locales/nl.json index 2f64800c..133d97d6 100644 --- a/locales/nl.json +++ b/locales/nl.json @@ -3,46 +3,46 @@ "electron_translate_1": "Toon Qortal UI", "electron_translate_2": "Stoppen", - "electron_translate_3": "Update beschikbaar", + "electron_translate_3": "Nieuwe versie beschikbaar", "electron_translate_4": "Er is een nieuwe Qortal UI-versie beschikbaar. Wil je deze downloaden?", "electron_translate_5": "NU INSTALLEREN", "electron_translate_6": "MISSCHIEN LATER", - "electron_translate_7": "Update klaar om te installeren", - "electron_translate_8": "Er is een nieuwe Qortal UI-versie gedownload.", - "electron_translate_9": "Klik op NU INSTALLEREN om de update toe te passen, MISSCHIEN LATER om de gebruikersinterface niet bij te werken.", - "electron_translate_10": "Tijdelijke update mislukt, zal het later opnieuw proberen", + "electron_translate_7": "Nieuwe versie is klaar om te installeren", + "electron_translate_8": "Er werd een nieuwe Qortal UI-versie gedownload.", + "electron_translate_9": "Klik op NU INSTALLEREN om de update toe te passen, MISSCHIEN LATER om de UI (gebruikersinterface) niet bij te werken.", + "electron_translate_10": "Update is tijdelijk mislukt; Zal later opnieuw geprobeerd worden", "electron_translate_11": "UPDATE DOWNLOADEN", - "electron_translate_12": "Het wordt ⌛️ op de achtergrond gedownload!", - "electron_translate_13": "START QORTALE KERN", + "electron_translate_12": "Het wordt gedownload ⌛️ op de achtergrond!", + "electron_translate_13": "START QORTAL CORE", "electron_translate_14": "NEE BEDANKT", "electron_translate_15": "Qortal Core draait NIET op dit systeem", "electron_translate_16": "Qortal UI heeft gedetecteerd dat Qortal Core NIET draait op dit systeem", - "electron_translate_17": "Klik op START QORTAL CORE om de Qortal Core op dit systeem te starten OF klik op NEE BEDANKT om het starten op dit systeem over te slaan", - "electron_translate_18": "DOWNLOAD QORTALE KERN", + "electron_translate_17": "Klik op START QORTAL CORE om de Qortal Core op dit systeem te starten OF klik op NEE BEDANKT om deze stap over te slaan", + "electron_translate_18": "DOWNLOAD QORTAL CORE", "electron_translate_19": "NEE BEDANKT", - "electron_translate_20": "Qortal Core wordt NIET gedetecteerd", + "electron_translate_20": "Qortal Core werd NIET gedetecteerd", "electron_translate_21": "Qortal UI heeft gedetecteerd dat Qortal Core NIET is geïnstalleerd (op de standaardlocatie) op dit systeem.", - "electron_translate_22": "Klik op DOWNLOAD QORTAL CORE om de kern te downloaden en te installeren (naar de standaardlocatie) OF klik op NEE BEDANKT om het downloaden en installeren over te slaan.", + "electron_translate_22": "Klik op DOWNLOAD QORTAL CORE om de download en de installatie (op de standaardlocatie) te starten OF klik op NEE BEDANKT om deze stap over te slaan.", "electron_translate_23": "JAVA DOWNLOADEN", "electron_translate_24": "NEE BEDANKT", "electron_translate_25": "Java is niet geïnstalleerd.", - "electron_translate_26": "Qortal UI heeft gedetecteerd dat java niet op uw systeem is geïnstalleerd.", - "electron_translate_27": "Klik op DOWNLOAD JAVA om java te downloaden en te installeren of op NO BEDANKT om het niet te downloaden en te installeren.", - "electron_translate_28": "Vraag het me nooit meer", + "electron_translate_26": "Qortal UI heeft gedetecteerd dat Java niet op uw systeem is geïnstalleerd.", + "electron_translate_27": "Klik op DOWNLOAD JAVA om Java te downloaden en te installeren of op NO BEDANKT om deze stap over te slaan.", + "electron_translate_28": "Nooit meer vragen", "electron_translate_29": "INSTELLING WIJZIGEN", "electron_translate_30": "ANNULEREN", - "electron_translate_31": "Kerninstellingen starten", - "electron_translate_32": "Wijzig de huidige status van vragen om de kern te starten als deze niet draait", - "electron_translate_33": "(vink het selectievakje Nooit meer vragen aan of uit)", + "electron_translate_31": "Core-instellingen starten", + "electron_translate_32": "Wijzig de vraag-status om de Qortal Core te starten als deze niet draait", + "electron_translate_33": "(vink het selectievakje \"Nooit meer vragen\" aan of uit)", "electron_translate_34": "Instellingen", "electron_translate_35": "Kopiëren", "electron_translate_36": "Plakken", "electron_translate_37": "Bekijken", "electron_translate_38": "Inzoomen", "electron_translate_39": "Uitzoomen", - "electron_translate_40": "Ware grootte", - "electron_translate_41": "Volledig scherm wisselen", - "electron_translate_42": "Nieuwe UI-instantie", - "electron_translate_43": "Controleren op update!", + "electron_translate_40": "Reële grootte", + "electron_translate_41": "Volledige schermweergave aan/uit", + "electron_translate_42": "Nieuwe instantie starten", + "electron_translate_43": "Zoeken naar nieuwe versie!", "electron_translate_44": "UI controleert op de achtergrond of er een nieuwe versie beschikbaar is en download deze." } \ No newline at end of file From eb85ba45ec5ea5b40aecac6b3557151337f3bd60 Mon Sep 17 00:00:00 2001 From: AlphaX-Projects <77661270+AlphaX-Projects@users.noreply.github.com> Date: Sat, 28 Oct 2023 09:08:41 +0200 Subject: [PATCH 05/26] Update Add Fix Updated dependencies Added GET_DAY_SUMMARY Fixed Qortal Lottery enter amount --- package-lock.json | 443 +++--- package.json | 26 +- .../core/components/qdn-action-types.js | 5 +- .../plugins/core/qdn/browser/browser.src.js | 1262 +++++++++-------- .../core/qortal-lottery/qortal-lottery.src.js | 1 + 5 files changed, 891 insertions(+), 846 deletions(-) diff --git a/package-lock.json b/package-lock.json index 1b777009..b8f83b51 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,7 +11,7 @@ "dependencies": { "@hapi/hapi": "21.3.2", "@hapi/inert": "7.1.0", - "@lit-labs/motion": "1.0.4", + "@lit-labs/motion": "1.0.6", "@popperjs/core": "2.11.8", "@tiptap/core": "2.0.4", "@tiptap/extension-highlight": "2.0.4", @@ -25,9 +25,9 @@ "bcryptjs": "2.4.3", "buffer": "6.0.3", "compressorjs": "1.2.1", - "crypto-js": "4.1.1", + "crypto-js": "4.2.0", "electron-dl": "3.5.1", - "electron-log": "4.4.8", + "electron-log": "5.0.0", "electron-store": "8.1.0", "electron-updater": "6.1.4", "emoji-picker-js": "https://github.com/Qortal/emoji-picker-js", @@ -45,8 +45,8 @@ "prosemirror-schema-list": "1.3.0", "prosemirror-state": "1.4.3", "prosemirror-transform": "1.8.0", - "prosemirror-view": "1.32.1", - "sass": "1.69.4", + "prosemirror-view": "1.32.2", + "sass": "1.69.5", "short-unique-id": "5.0.3" }, "devDependencies": { @@ -93,20 +93,20 @@ "@rollup/plugin-node-resolve": "15.2.3", "@rollup/plugin-replace": "5.0.4", "@rollup/plugin-terser": "0.4.4", - "@vaadin/avatar": "24.2.0", - "@vaadin/button": "24.2.0", - "@vaadin/grid": "24.2.0", - "@vaadin/icons": "24.2.0", - "@vaadin/password-field": "24.2.0", - "@vaadin/tooltip": "24.2.0", + "@vaadin/avatar": "24.2.1", + "@vaadin/button": "24.2.1", + "@vaadin/grid": "24.2.1", + "@vaadin/icons": "24.2.1", + "@vaadin/password-field": "24.2.1", + "@vaadin/tooltip": "24.2.1", "@zip.js/zip.js": "2.7.30", - "axios": "1.5.1", + "axios": "1.6.0", "electron": "27.0.2", "electron-builder": "24.6.4", "electron-packager": "17.1.2", "epml": "0.3.3", "eslint": "8.52.0", - "eslint-plugin-lit": "1.9.1", + "eslint-plugin-lit": "1.10.1", "eslint-plugin-wc": "2.0.4", "file-saver": "2.0.5", "highcharts": "11.1.0", @@ -757,9 +757,9 @@ } }, "node_modules/@eslint-community/regexpp": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.9.1.tgz", - "integrity": "sha512-Y27x+MBLjXa+0JWDhykM3+JE+il3kHKAEqabfEWq3SDhZjLYb6/BHL/JKFnH3fe207JaXkyDo685Oc2Glt6ifA==", + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", + "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", "dev": true, "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" @@ -1313,11 +1313,11 @@ } }, "node_modules/@lit-labs/motion": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@lit-labs/motion/-/motion-1.0.4.tgz", - "integrity": "sha512-cZrA6u/qR71ZIqk0PGINBLWPDxT8oHB706QzWHJKo7nCOi3KCsd7CSuR5H09I0t6E+bd2nVB+zJPGd2wVjNSsA==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@lit-labs/motion/-/motion-1.0.6.tgz", + "integrity": "sha512-7d4d89CjdEMsU7lNG0gFMZOUowq00CgcJL1ifab0IVFc/fTCcfZyQuRb5vAhetkwPQFmiyP54tvHQ9GuHsLtuQ==", "dependencies": { - "lit": "^2.8.0" + "lit": "^2.0.0 || ^3.0.0" } }, "node_modules/@lit-labs/ssr-dom-shim": { @@ -3612,10 +3612,13 @@ "dev": true }, "node_modules/@types/node": { - "version": "18.18.6", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.18.6.tgz", - "integrity": "sha512-wf3Vz+jCmOQ2HV1YUJuCWdL64adYxumkrxtc+H1VUQlnQI04+5HtH+qZCOE21lBE7gIrt+CwX2Wv8Acrw5Ak6w==", - "devOptional": true + "version": "18.18.7", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.18.7.tgz", + "integrity": "sha512-bw+lEsxis6eqJYW8Ql6+yTqkE6RuFtsQPSe5JxXbqYRFQEER5aJA9a5UH9igqDWm3X4iLHIKOHlnAXLM4mi7uQ==", + "devOptional": true, + "dependencies": { + "undici-types": "~5.26.4" + } }, "node_modules/@types/object.omit": { "version": "3.0.2", @@ -3686,72 +3689,72 @@ "dev": true }, "node_modules/@vaadin/a11y-base": { - "version": "24.2.0", - "resolved": "https://registry.npmjs.org/@vaadin/a11y-base/-/a11y-base-24.2.0.tgz", - "integrity": "sha512-cnppkRPiVjSDPLPzdnZ14yQZYRdWFjNiUh6jmUTCXiGsXrkgoUfmALxhhc9iodd1WxbrXwtD4OsMcJi/uMIjAg==", + "version": "24.2.1", + "resolved": "https://registry.npmjs.org/@vaadin/a11y-base/-/a11y-base-24.2.1.tgz", + "integrity": "sha512-S4PG7xRfn/vUxuDtBEwsktjhLGSa70U02++l42Zqct8nT5xSZPjl7k9n+77bcDU/Ofpcwb9pZUPNeyi1lTKbzw==", "dev": true, "dependencies": { "@open-wc/dedupe-mixin": "^1.3.0", "@polymer/polymer": "^3.0.0", - "@vaadin/component-base": "~24.2.0", + "@vaadin/component-base": "~24.2.1", "lit": "^2.0.0" } }, "node_modules/@vaadin/avatar": { - "version": "24.2.0", - "resolved": "https://registry.npmjs.org/@vaadin/avatar/-/avatar-24.2.0.tgz", - "integrity": "sha512-Xy+yxj9fxMLEjhLCsTmsYV3kVOamIurPgnPGK0/CGn4PQphdhqqiRd0b9cHxPJl/Ei6CDu033lj1ovT19CjmbA==", + "version": "24.2.1", + "resolved": "https://registry.npmjs.org/@vaadin/avatar/-/avatar-24.2.1.tgz", + "integrity": "sha512-HIxznBjaveGVypaFI3Wjed4D/I8hfW+Bg++PbyNUP/QuI+dQYvDskhS+qo8BzjuyB6s1ka+Rh5ROOk/SKL0XyQ==", "dev": true, "dependencies": { "@polymer/polymer": "^3.0.0", - "@vaadin/a11y-base": "~24.2.0", - "@vaadin/component-base": "~24.2.0", - "@vaadin/item": "~24.2.0", - "@vaadin/list-box": "~24.2.0", - "@vaadin/overlay": "~24.2.0", - "@vaadin/tooltip": "~24.2.0", - "@vaadin/vaadin-lumo-styles": "~24.2.0", - "@vaadin/vaadin-material-styles": "~24.2.0", - "@vaadin/vaadin-themable-mixin": "~24.2.0" + "@vaadin/a11y-base": "~24.2.1", + "@vaadin/component-base": "~24.2.1", + "@vaadin/item": "~24.2.1", + "@vaadin/list-box": "~24.2.1", + "@vaadin/overlay": "~24.2.1", + "@vaadin/tooltip": "~24.2.1", + "@vaadin/vaadin-lumo-styles": "~24.2.1", + "@vaadin/vaadin-material-styles": "~24.2.1", + "@vaadin/vaadin-themable-mixin": "~24.2.1" } }, "node_modules/@vaadin/button": { - "version": "24.2.0", - "resolved": "https://registry.npmjs.org/@vaadin/button/-/button-24.2.0.tgz", - "integrity": "sha512-gHO9jiPGRV4AwzsLJ2A2OkIDIdeOJ7iZ2JwPSdj/O4pzwwqPe+VOd4s2mrLKGWD9TNW/gsX4cRFVzwfbvOOKyg==", + "version": "24.2.1", + "resolved": "https://registry.npmjs.org/@vaadin/button/-/button-24.2.1.tgz", + "integrity": "sha512-8DwoHxvQVZGXV63elsoYcbMe7tZnecijEQOrgSZ34Nn4e6VAv/1rPuW1QscewIOQSXYCbYeESPqAjOhWrHd+iw==", "dev": true, "dependencies": { "@open-wc/dedupe-mixin": "^1.3.0", "@polymer/polymer": "^3.0.0", - "@vaadin/a11y-base": "~24.2.0", - "@vaadin/component-base": "~24.2.0", - "@vaadin/vaadin-lumo-styles": "~24.2.0", - "@vaadin/vaadin-material-styles": "~24.2.0", - "@vaadin/vaadin-themable-mixin": "~24.2.0", + "@vaadin/a11y-base": "~24.2.1", + "@vaadin/component-base": "~24.2.1", + "@vaadin/vaadin-lumo-styles": "~24.2.1", + "@vaadin/vaadin-material-styles": "~24.2.1", + "@vaadin/vaadin-themable-mixin": "~24.2.1", "lit": "^2.0.0" } }, "node_modules/@vaadin/checkbox": { - "version": "24.2.0", - "resolved": "https://registry.npmjs.org/@vaadin/checkbox/-/checkbox-24.2.0.tgz", - "integrity": "sha512-sy2NzW6ESF5t0TSuGrBGkLnELFEQM01UQf4rkSyo2d4qo8tDADW2XcItj810qIGcsMxxCyUiywM2J2tMyukrIA==", + "version": "24.2.1", + "resolved": "https://registry.npmjs.org/@vaadin/checkbox/-/checkbox-24.2.1.tgz", + "integrity": "sha512-ptkBqIk4v7NjVmw5OPIvUo1symP9EbOeIdgtWnIW0aXFKbgyl41ghOg5jT9XPY4fhLzcRp+ephgdzZYJG4S1fQ==", "dev": true, "dependencies": { "@open-wc/dedupe-mixin": "^1.3.0", "@polymer/polymer": "^3.0.0", - "@vaadin/a11y-base": "~24.2.0", - "@vaadin/component-base": "~24.2.0", - "@vaadin/field-base": "~24.2.0", - "@vaadin/vaadin-lumo-styles": "~24.2.0", - "@vaadin/vaadin-material-styles": "~24.2.0", - "@vaadin/vaadin-themable-mixin": "~24.2.0", + "@vaadin/a11y-base": "~24.2.1", + "@vaadin/component-base": "~24.2.1", + "@vaadin/field-base": "~24.2.1", + "@vaadin/vaadin-lumo-styles": "~24.2.1", + "@vaadin/vaadin-material-styles": "~24.2.1", + "@vaadin/vaadin-themable-mixin": "~24.2.1", "lit": "^2.0.0" } }, "node_modules/@vaadin/component-base": { - "version": "24.2.0", - "resolved": "https://registry.npmjs.org/@vaadin/component-base/-/component-base-24.2.0.tgz", - "integrity": "sha512-n0iIg6Oj6+Ei2L2BaEdZn1gXdvX7ZNgDnC28TGQ7o2Ld7K0GomEEyG20/nTra8zxgZRm57CZKoR+PEcxkzTexQ==", + "version": "24.2.1", + "resolved": "https://registry.npmjs.org/@vaadin/component-base/-/component-base-24.2.1.tgz", + "integrity": "sha512-DQOImwyKirm82g1XAXCzIEuQ+RW3P2qm4Qk4s7z6yhxErsseCXzsVXKKGAB6oya+XeuByoC1p6ja+cDcTjlVVA==", "dev": true, "dependencies": { "@open-wc/dedupe-mixin": "^1.3.0", @@ -3762,173 +3765,173 @@ } }, "node_modules/@vaadin/field-base": { - "version": "24.2.0", - "resolved": "https://registry.npmjs.org/@vaadin/field-base/-/field-base-24.2.0.tgz", - "integrity": "sha512-AN3NNgvFx8K2fa7RZQ1iWeqDA+wQ0joa1RCP58Qo9u+JtU9c75XHJKiPiQvFVGH0EmRjOXwhE0KqyMYmKFfOaw==", + "version": "24.2.1", + "resolved": "https://registry.npmjs.org/@vaadin/field-base/-/field-base-24.2.1.tgz", + "integrity": "sha512-Me5XjVFQQTA6pn+7dn6oe/Nf0hlu030CXgt5B7VAnJNNAB0ZkLMNc3Ll5QY1YhTv44Uss5ZvTxUo2DCAsL0NCw==", "dev": true, "dependencies": { "@open-wc/dedupe-mixin": "^1.3.0", "@polymer/polymer": "^3.0.0", - "@vaadin/a11y-base": "~24.2.0", - "@vaadin/component-base": "~24.2.0", + "@vaadin/a11y-base": "~24.2.1", + "@vaadin/component-base": "~24.2.1", "lit": "^2.0.0" } }, "node_modules/@vaadin/grid": { - "version": "24.2.0", - "resolved": "https://registry.npmjs.org/@vaadin/grid/-/grid-24.2.0.tgz", - "integrity": "sha512-jCkTb3I8ljdkJDlxSOr0ORlxqZphhdfbfaxHWFSc8/i1TlUo4Uof2VugZRsSDVh2UGB1DyHOGUtHn80ZPEqzaw==", + "version": "24.2.1", + "resolved": "https://registry.npmjs.org/@vaadin/grid/-/grid-24.2.1.tgz", + "integrity": "sha512-uzKiDG1Jw+rE/rQ9ZinI5Sj/57tJCsZhxdkvXGbXZtXAkfUJO3tqaiH/EJvFWkHUvOGuUACif5q6tKBFhOpjYg==", "dev": true, "dependencies": { "@open-wc/dedupe-mixin": "^1.3.0", "@polymer/polymer": "^3.0.0", - "@vaadin/a11y-base": "~24.2.0", - "@vaadin/checkbox": "~24.2.0", - "@vaadin/component-base": "~24.2.0", - "@vaadin/lit-renderer": "~24.2.0", - "@vaadin/text-field": "~24.2.0", - "@vaadin/vaadin-lumo-styles": "~24.2.0", - "@vaadin/vaadin-material-styles": "~24.2.0", - "@vaadin/vaadin-themable-mixin": "~24.2.0" + "@vaadin/a11y-base": "~24.2.1", + "@vaadin/checkbox": "~24.2.1", + "@vaadin/component-base": "~24.2.1", + "@vaadin/lit-renderer": "~24.2.1", + "@vaadin/text-field": "~24.2.1", + "@vaadin/vaadin-lumo-styles": "~24.2.1", + "@vaadin/vaadin-material-styles": "~24.2.1", + "@vaadin/vaadin-themable-mixin": "~24.2.1" } }, "node_modules/@vaadin/icon": { - "version": "24.2.0", - "resolved": "https://registry.npmjs.org/@vaadin/icon/-/icon-24.2.0.tgz", - "integrity": "sha512-0Ame9r0eb+kz+ryaxnH/CzzNefT8VERL3YFNlLo0YhJPK9vhcT9qxOfbCqWvT52R0DorIux80WS8ZtMAKTsjOQ==", + "version": "24.2.1", + "resolved": "https://registry.npmjs.org/@vaadin/icon/-/icon-24.2.1.tgz", + "integrity": "sha512-jWow97z8bVgrts/0Cjkvqm9P5fxm5ooCRcLcr0vwf+FIqgY9U5j+zXIL06DbDnXCz25a8lLcnqnIjtDJLwr25Q==", "dev": true, "dependencies": { "@polymer/polymer": "^3.0.0", - "@vaadin/component-base": "~24.2.0", - "@vaadin/vaadin-lumo-styles": "~24.2.0", - "@vaadin/vaadin-themable-mixin": "~24.2.0", + "@vaadin/component-base": "~24.2.1", + "@vaadin/vaadin-lumo-styles": "~24.2.1", + "@vaadin/vaadin-themable-mixin": "~24.2.1", "lit": "^2.0.0" } }, "node_modules/@vaadin/icons": { - "version": "24.2.0", - "resolved": "https://registry.npmjs.org/@vaadin/icons/-/icons-24.2.0.tgz", - "integrity": "sha512-ekiGe5JscULbr0LvMdotCkBWfKDewiGf+VJTG0mjEthcTCvxH5snTmoTlUrUMLJjmIKR6rwNLZ5dx3yPrdcMDQ==", + "version": "24.2.1", + "resolved": "https://registry.npmjs.org/@vaadin/icons/-/icons-24.2.1.tgz", + "integrity": "sha512-lbR851SeFaInR2lGa+2OeVSz7k/NTGEpTnRtWtytUEQnBm/3O2/OQo+BwQ6grCA5lxiYL+qq4G7Fd2qBwLhYEA==", "dev": true, "dependencies": { "@polymer/polymer": "^3.0.0", - "@vaadin/icon": "~24.2.0" + "@vaadin/icon": "~24.2.1" } }, "node_modules/@vaadin/input-container": { - "version": "24.2.0", - "resolved": "https://registry.npmjs.org/@vaadin/input-container/-/input-container-24.2.0.tgz", - "integrity": "sha512-Netv/fN+SFAZIvoZb8Dqwv0SLT4gGRtCwD+xstdF5CrgYuFcnrdAg8Gku7xSDhWy3Pq7sCXrbUV+YjCOHinSFA==", + "version": "24.2.1", + "resolved": "https://registry.npmjs.org/@vaadin/input-container/-/input-container-24.2.1.tgz", + "integrity": "sha512-P6GMXyjWC9EizJJhDMKzhQweTwdRQAmfY/oa+PuY/JRqYLQKy5DH8XmpNOUVxbFiVBaciFGtN8wJonLoBtCsJg==", "dev": true, "dependencies": { "@polymer/polymer": "^3.0.0", - "@vaadin/component-base": "~24.2.0", - "@vaadin/vaadin-lumo-styles": "~24.2.0", - "@vaadin/vaadin-material-styles": "~24.2.0", - "@vaadin/vaadin-themable-mixin": "~24.2.0" + "@vaadin/component-base": "~24.2.1", + "@vaadin/vaadin-lumo-styles": "~24.2.1", + "@vaadin/vaadin-material-styles": "~24.2.1", + "@vaadin/vaadin-themable-mixin": "~24.2.1" } }, "node_modules/@vaadin/item": { - "version": "24.2.0", - "resolved": "https://registry.npmjs.org/@vaadin/item/-/item-24.2.0.tgz", - "integrity": "sha512-kI+qOMkY7np2gmo88zc/z4OVBfNgBFjTDYhF7bnVTqD3aZIa39pjcNBm6vxJKPglOtZ/US3iJTh3HvyCv/EVjw==", + "version": "24.2.1", + "resolved": "https://registry.npmjs.org/@vaadin/item/-/item-24.2.1.tgz", + "integrity": "sha512-UX3LREC6ANSqFNYa+N/X1vd0K7XpfhmygfAkCTCQ0MVz4GJCA2Isr9Qo3o14vY+aEoZoNRRqNMEa7PP9yNDXJg==", "dev": true, "dependencies": { "@open-wc/dedupe-mixin": "^1.3.0", "@polymer/polymer": "^3.0.0", - "@vaadin/a11y-base": "~24.2.0", - "@vaadin/component-base": "~24.2.0", - "@vaadin/vaadin-lumo-styles": "~24.2.0", - "@vaadin/vaadin-material-styles": "~24.2.0", - "@vaadin/vaadin-themable-mixin": "~24.2.0" + "@vaadin/a11y-base": "~24.2.1", + "@vaadin/component-base": "~24.2.1", + "@vaadin/vaadin-lumo-styles": "~24.2.1", + "@vaadin/vaadin-material-styles": "~24.2.1", + "@vaadin/vaadin-themable-mixin": "~24.2.1" } }, "node_modules/@vaadin/list-box": { - "version": "24.2.0", - "resolved": "https://registry.npmjs.org/@vaadin/list-box/-/list-box-24.2.0.tgz", - "integrity": "sha512-F/5XEpnSYB1Rdl6Z1n1HN3k111B7VAD+9d5MCQCadfE4Q3bxqQ16QOqKON1LBoSguINwNRkm3M9Warpk8dUABQ==", + "version": "24.2.1", + "resolved": "https://registry.npmjs.org/@vaadin/list-box/-/list-box-24.2.1.tgz", + "integrity": "sha512-Lt9joa45tHi7CWuwulumXhchCtiRq9BcnbANd7rIJCqGIHlW+bZFspqJ+X12zObNTp9BDohFH5EJk6qPpqjSkg==", "dev": true, "dependencies": { "@open-wc/dedupe-mixin": "^1.3.0", "@polymer/polymer": "^3.0.0", - "@vaadin/a11y-base": "~24.2.0", - "@vaadin/component-base": "~24.2.0", - "@vaadin/item": "~24.2.0", - "@vaadin/vaadin-lumo-styles": "~24.2.0", - "@vaadin/vaadin-material-styles": "~24.2.0", - "@vaadin/vaadin-themable-mixin": "~24.2.0" + "@vaadin/a11y-base": "~24.2.1", + "@vaadin/component-base": "~24.2.1", + "@vaadin/item": "~24.2.1", + "@vaadin/vaadin-lumo-styles": "~24.2.1", + "@vaadin/vaadin-material-styles": "~24.2.1", + "@vaadin/vaadin-themable-mixin": "~24.2.1" } }, "node_modules/@vaadin/lit-renderer": { - "version": "24.2.0", - "resolved": "https://registry.npmjs.org/@vaadin/lit-renderer/-/lit-renderer-24.2.0.tgz", - "integrity": "sha512-fkj6aetCgq3kp6tUqkvL+E9LwLd6oH/a8Pg93sPuBx4D2dQ85IVIgJCpYFlBjdaDp548/frPRkfpRmziZ1netw==", + "version": "24.2.1", + "resolved": "https://registry.npmjs.org/@vaadin/lit-renderer/-/lit-renderer-24.2.1.tgz", + "integrity": "sha512-eit1MD84gFh0FBkO8YGZI9Zi2uy6iMJNb4B9iq5VGkHpcj4bFsJCy/t+eDR23MdqVpEn725AXOdHu9NA9hupRg==", "dev": true, "dependencies": { "lit": "^2.0.0" } }, "node_modules/@vaadin/overlay": { - "version": "24.2.0", - "resolved": "https://registry.npmjs.org/@vaadin/overlay/-/overlay-24.2.0.tgz", - "integrity": "sha512-suNbMshKy52jhm2CDc4g974JU8hXsr5KIzopyR9A1pT3syiPx+75HqucZvqDJbiGMf/Fe04UjLrlhem6+tIuXw==", + "version": "24.2.1", + "resolved": "https://registry.npmjs.org/@vaadin/overlay/-/overlay-24.2.1.tgz", + "integrity": "sha512-f/gzh25yWI/7lfjrtvu7Sqhn5HaNA/SItCS5D94LIo7DbGK4qepjlYrO7YS6pr/Jv5bznQ27+nGskMxN6WLEAQ==", "dev": true, "dependencies": { "@open-wc/dedupe-mixin": "^1.3.0", "@polymer/polymer": "^3.0.0", - "@vaadin/a11y-base": "~24.2.0", - "@vaadin/component-base": "~24.2.0", - "@vaadin/vaadin-lumo-styles": "~24.2.0", - "@vaadin/vaadin-material-styles": "~24.2.0", - "@vaadin/vaadin-themable-mixin": "~24.2.0" + "@vaadin/a11y-base": "~24.2.1", + "@vaadin/component-base": "~24.2.1", + "@vaadin/vaadin-lumo-styles": "~24.2.1", + "@vaadin/vaadin-material-styles": "~24.2.1", + "@vaadin/vaadin-themable-mixin": "~24.2.1" } }, "node_modules/@vaadin/password-field": { - "version": "24.2.0", - "resolved": "https://registry.npmjs.org/@vaadin/password-field/-/password-field-24.2.0.tgz", - "integrity": "sha512-EGael4z/WBBpXHs6TQgKPUGCdHDT9OB+mmpKqfi8vlYr5FV7c6jxaouFH4mND4fiPwymCE8R1LbxVQ+wLcByeQ==", + "version": "24.2.1", + "resolved": "https://registry.npmjs.org/@vaadin/password-field/-/password-field-24.2.1.tgz", + "integrity": "sha512-6QRacwzeSChxbTPWBTzO8tkzMHQS2iTx7NoLA2C6JmaaZKXFcGRvsDXiuWJJa2yyYVcWegR/PW9VPfI2dvnwbQ==", "dev": true, "dependencies": { "@polymer/polymer": "^3.0.0", - "@vaadin/button": "~24.2.0", - "@vaadin/component-base": "~24.2.0", - "@vaadin/text-field": "~24.2.0", - "@vaadin/vaadin-lumo-styles": "~24.2.0", - "@vaadin/vaadin-material-styles": "~24.2.0", - "@vaadin/vaadin-themable-mixin": "~24.2.0" + "@vaadin/button": "~24.2.1", + "@vaadin/component-base": "~24.2.1", + "@vaadin/text-field": "~24.2.1", + "@vaadin/vaadin-lumo-styles": "~24.2.1", + "@vaadin/vaadin-material-styles": "~24.2.1", + "@vaadin/vaadin-themable-mixin": "~24.2.1" } }, "node_modules/@vaadin/text-field": { - "version": "24.2.0", - "resolved": "https://registry.npmjs.org/@vaadin/text-field/-/text-field-24.2.0.tgz", - "integrity": "sha512-JJDYZ/HjUnQtFh2ylYDoTmrj4OxXc5aeDUyhgAzH7BpDkRR2+pOWupKUlgwwc1RUhz5sC14Pw0xgt68ZaMo/MA==", + "version": "24.2.1", + "resolved": "https://registry.npmjs.org/@vaadin/text-field/-/text-field-24.2.1.tgz", + "integrity": "sha512-g/AAzpLS/ogPILPP+vpB36ttStAtmaX34iMuZNgDhCdDePHt0j4akKmoM025XrQ1xJ4oRtmff09AbjGizIt+vg==", "dev": true, "dependencies": { "@open-wc/dedupe-mixin": "^1.3.0", "@polymer/polymer": "^3.0.0", - "@vaadin/a11y-base": "~24.2.0", - "@vaadin/component-base": "~24.2.0", - "@vaadin/field-base": "~24.2.0", - "@vaadin/input-container": "~24.2.0", - "@vaadin/vaadin-lumo-styles": "~24.2.0", - "@vaadin/vaadin-material-styles": "~24.2.0", - "@vaadin/vaadin-themable-mixin": "~24.2.0", + "@vaadin/a11y-base": "~24.2.1", + "@vaadin/component-base": "~24.2.1", + "@vaadin/field-base": "~24.2.1", + "@vaadin/input-container": "~24.2.1", + "@vaadin/vaadin-lumo-styles": "~24.2.1", + "@vaadin/vaadin-material-styles": "~24.2.1", + "@vaadin/vaadin-themable-mixin": "~24.2.1", "lit": "^2.0.0" } }, "node_modules/@vaadin/tooltip": { - "version": "24.2.0", - "resolved": "https://registry.npmjs.org/@vaadin/tooltip/-/tooltip-24.2.0.tgz", - "integrity": "sha512-I9ItRzk1Xw5JE6L/8V+FIDs+T7pAcd7vnVq3nTb81SYQ2Op2QUPTYG1jd9hz7QuZgVURtqO5Kbr9NtDbqUJYNA==", + "version": "24.2.1", + "resolved": "https://registry.npmjs.org/@vaadin/tooltip/-/tooltip-24.2.1.tgz", + "integrity": "sha512-Rw75Ck1lBWgd2DIGj+rL9ynN4f+XH8VuGSFd/r+l0O0yRI6JUL57MDsx9DRyqA3lMnqf3aWvIU77hQspAHz6Bg==", "dev": true, "dependencies": { "@polymer/polymer": "^3.0.0", - "@vaadin/a11y-base": "~24.2.0", - "@vaadin/component-base": "~24.2.0", - "@vaadin/overlay": "~24.2.0", - "@vaadin/vaadin-lumo-styles": "~24.2.0", - "@vaadin/vaadin-material-styles": "~24.2.0", - "@vaadin/vaadin-themable-mixin": "~24.2.0" + "@vaadin/a11y-base": "~24.2.1", + "@vaadin/component-base": "~24.2.1", + "@vaadin/overlay": "~24.2.1", + "@vaadin/vaadin-lumo-styles": "~24.2.1", + "@vaadin/vaadin-material-styles": "~24.2.1", + "@vaadin/vaadin-themable-mixin": "~24.2.1" } }, "node_modules/@vaadin/vaadin-development-mode-detector": { @@ -3938,32 +3941,32 @@ "dev": true }, "node_modules/@vaadin/vaadin-lumo-styles": { - "version": "24.2.0", - "resolved": "https://registry.npmjs.org/@vaadin/vaadin-lumo-styles/-/vaadin-lumo-styles-24.2.0.tgz", - "integrity": "sha512-rXW6GUe7Q0p5mKClVeVsMTOSZG8yN+snEDfZumD41/Vdfo/UAuVsl/k+J43pr1ArWzHQG0sqIRqHYMGqI8X+8g==", + "version": "24.2.1", + "resolved": "https://registry.npmjs.org/@vaadin/vaadin-lumo-styles/-/vaadin-lumo-styles-24.2.1.tgz", + "integrity": "sha512-hEMHyCp0S1Au3xVV0xXSL3U9kqSYt6yjroUEgU/RpRiDxH+/1pbkUbF/VonZX9KTambcRVUtZNwdlihSU9JYpQ==", "dev": true, "dependencies": { "@polymer/polymer": "^3.0.0", - "@vaadin/component-base": "~24.2.0", - "@vaadin/icon": "~24.2.0", - "@vaadin/vaadin-themable-mixin": "~24.2.0" + "@vaadin/component-base": "~24.2.1", + "@vaadin/icon": "~24.2.1", + "@vaadin/vaadin-themable-mixin": "~24.2.1" } }, "node_modules/@vaadin/vaadin-material-styles": { - "version": "24.2.0", - "resolved": "https://registry.npmjs.org/@vaadin/vaadin-material-styles/-/vaadin-material-styles-24.2.0.tgz", - "integrity": "sha512-wHo3JlbheGpetme65ucSVCgjYwbvRNvfndHsig0n+l8EuvuVDsIoTrNdK7jz2gYMQpco36HOoSDPuqJXXt2nGQ==", + "version": "24.2.1", + "resolved": "https://registry.npmjs.org/@vaadin/vaadin-material-styles/-/vaadin-material-styles-24.2.1.tgz", + "integrity": "sha512-Ux2tbblv/h3vM28NdSn9enCgtlLOyOqBdnbq73Z1kd0BBd9CfFBcJah5ijW/NxYrAaYXIdO2kWknwyRf4Kgrww==", "dev": true, "dependencies": { "@polymer/polymer": "^3.0.0", - "@vaadin/component-base": "~24.2.0", - "@vaadin/vaadin-themable-mixin": "~24.2.0" + "@vaadin/component-base": "~24.2.1", + "@vaadin/vaadin-themable-mixin": "~24.2.1" } }, "node_modules/@vaadin/vaadin-themable-mixin": { - "version": "24.2.0", - "resolved": "https://registry.npmjs.org/@vaadin/vaadin-themable-mixin/-/vaadin-themable-mixin-24.2.0.tgz", - "integrity": "sha512-5Y2KwOlVUad9adTLondWQi7MGyvCmldWHFf5QiBIm22yQY/AxLVhzbPXcwPRR7yw+usVCJCDKmOMJa5YrwyQ1g==", + "version": "24.2.1", + "resolved": "https://registry.npmjs.org/@vaadin/vaadin-themable-mixin/-/vaadin-themable-mixin-24.2.1.tgz", + "integrity": "sha512-W1QW4KnMER0KdervGOIetF9DnYEgnURW4MJ4IecAlw5H14MN92lTXcsz8R5CT9ANerABqCGPCF+F+t0L8qrfxw==", "dev": true, "dependencies": { "@open-wc/dedupe-mixin": "^1.3.0", @@ -4016,9 +4019,9 @@ "dev": true }, "node_modules/acorn": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", - "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", + "version": "8.11.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", + "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==", "dev": true, "bin": { "acorn": "bin/acorn" @@ -4333,9 +4336,9 @@ } }, "node_modules/axios": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.5.1.tgz", - "integrity": "sha512-Q28iYCWzNHjAm+yEAot5QaAMxhMghWLFVf7rRdwhUI+c2jix2DUXjAHXVi+s1ibs3mjPO/cCgbA++3BjD0vP/A==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.0.tgz", + "integrity": "sha512-EZ1DYihju9pwVB+jg67ogm+Tmqc6JmhamRN6I4Zt8DfZu5lbcQGw3ozH9lFejSJgs/ibaef3A9PMXPLeefFGJg==", "dev": true, "dependencies": { "follow-redirects": "^1.15.0", @@ -4711,9 +4714,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001551", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001551.tgz", - "integrity": "sha512-vtBAez47BoGMMzlbYhfXrMV1kvRF2WP/lqiMuDu1Sb4EE4LKEgjopFDSRtZfdVnslNRpOqV/woE+Xgrwj6VQlg==", + "version": "1.0.30001555", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001555.tgz", + "integrity": "sha512-NzbUFKUnJ3DTcq6YyZB6+qqhfD112uR3uoEnkmfzm2wVzUNsFkU7AwBjKQ654Sp5cau0JxhFyRSn/tQZ+XfygA==", "dev": true, "funding": [ { @@ -5147,9 +5150,9 @@ } }, "node_modules/crypto-js": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.1.1.tgz", - "integrity": "sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw==" + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.2.0.tgz", + "integrity": "sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==" }, "node_modules/css-what": { "version": "6.1.0", @@ -5628,9 +5631,13 @@ } }, "node_modules/electron-log": { - "version": "4.4.8", - "resolved": "https://registry.npmjs.org/electron-log/-/electron-log-4.4.8.tgz", - "integrity": "sha512-QQ4GvrXO+HkgqqEOYbi+DHL7hj5JM+nHi/j+qrN9zeeXVKy8ZABgbu4CnG+BBqDZ2+tbeq9tUC4DZfIWFU5AZA==" + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/electron-log/-/electron-log-5.0.0.tgz", + "integrity": "sha512-vB3akupmQvA8jAyNL9rULZtf6WoP8vsabjXsRtiqXS6/D37SwN/4LEyj4JD+9Bv6xoTcx/LrVnsIKEEWdq5ClQ==", + "engines": { + "electron": ">= 13", + "node": ">= 14" + } }, "node_modules/electron-packager": { "version": "17.1.2", @@ -5897,9 +5904,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.563", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.563.tgz", - "integrity": "sha512-dg5gj5qOgfZNkPNeyKBZQAQitIQ/xwfIDmEQJHCbXaD9ebTZxwJXUsDYcBlAvZGZLi+/354l35J1wkmP6CqYaw==", + "version": "1.4.569", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.569.tgz", + "integrity": "sha512-LsrJjZ0IbVy12ApW3gpYpcmHS3iRxH4bkKOW98y1/D+3cvDUWGcbzbsFinfUS8knpcZk/PG/2p/RnkMCYN7PVg==", "dev": true }, "node_modules/electron-updater": { @@ -6138,9 +6145,9 @@ } }, "node_modules/eslint-plugin-lit": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-lit/-/eslint-plugin-lit-1.9.1.tgz", - "integrity": "sha512-XFFVufVxYJwqRB9sLkDXB7SvV1xi9hrC4HRFEdX1h9+iZ3dm4x9uS7EuT9uaXs6zR3DEgcojia1F7pmvWbc4Gg==", + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-lit/-/eslint-plugin-lit-1.10.1.tgz", + "integrity": "sha512-3eH++xFpe6efd+TN6B9kW1coULdPyK+3fMNws378nbYQ/HiWIz0+jVcsaGVs9BbLt6kVkDxZmUGF4Ivx3BatkA==", "dev": true, "dependencies": { "parse5": "^6.0.1", @@ -6756,7 +6763,6 @@ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", "dev": true, - "optional": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -6834,16 +6840,16 @@ } }, "node_modules/get-intrinsic": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", - "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz", + "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==", "dev": true, "optional": true, "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", + "function-bind": "^1.1.2", "has-proto": "^1.0.1", - "has-symbols": "^1.0.3" + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -7052,15 +7058,6 @@ "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", "dev": true }, - "node_modules/has": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.4.tgz", - "integrity": "sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ==", - "dev": true, - "engines": { - "node": ">= 0.4.0" - } - }, "node_modules/has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", @@ -7071,13 +7068,13 @@ } }, "node_modules/has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", + "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", "dev": true, "optional": true, "dependencies": { - "get-intrinsic": "^1.1.1" + "get-intrinsic": "^1.2.2" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -7109,6 +7106,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/hasown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", + "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/highcharts": { "version": "11.1.0", "resolved": "https://registry.npmjs.org/highcharts/-/highcharts-11.1.0.tgz", @@ -7389,12 +7398,12 @@ } }, "node_modules/is-core-module": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", - "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", "dev": true, "dependencies": { - "has": "^1.0.3" + "hasown": "^2.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -8871,9 +8880,9 @@ } }, "node_modules/prosemirror-view": { - "version": "1.32.1", - "resolved": "https://registry.npmjs.org/prosemirror-view/-/prosemirror-view-1.32.1.tgz", - "integrity": "sha512-9SnB4HBgRczzTyIMZLPE1iszegL04hNfUyS8uPtP1RPxNM2NTCiIs8KwNsJU4nbZO9rxJTwVTv7Jm3zU4CR78A==", + "version": "1.32.2", + "resolved": "https://registry.npmjs.org/prosemirror-view/-/prosemirror-view-1.32.2.tgz", + "integrity": "sha512-l2RQUGaiDI8SG8ZjWIkjT8yjGmNwdzMFMzQmxv/Kh8Vx+ICnz5R+K0mrOS16rhfjX7n2t4emU0goh7TerQC3mw==", "dependencies": { "prosemirror-model": "^1.16.0", "prosemirror-state": "^1.0.0", @@ -9461,9 +9470,9 @@ } }, "node_modules/sass": { - "version": "1.69.4", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.69.4.tgz", - "integrity": "sha512-+qEreVhqAy8o++aQfCJwp0sklr2xyEzkm9Pp/Igu9wNPoe7EZEQ8X/MBvvXggI2ql607cxKg/RKOwDj6pp2XDA==", + "version": "1.69.5", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.69.5.tgz", + "integrity": "sha512-qg2+UCJibLr2LCVOt3OlPhr/dqVHWOa9XtZf2OjbLs/T4VPSJ00udtgJxH3neXZm+QqX8B+3cU7RaLqp1iVfcQ==", "dependencies": { "chokidar": ">=3.0.0 <4.0.0", "immutable": "^4.0.0", @@ -10208,6 +10217,12 @@ "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==" }, + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "devOptional": true + }, "node_modules/universalify": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", diff --git a/package.json b/package.json index 9b85a313..f62863ba 100644 --- a/package.json +++ b/package.json @@ -33,7 +33,7 @@ "dependencies": { "@hapi/hapi": "21.3.2", "@hapi/inert": "7.1.0", - "@lit-labs/motion": "1.0.4", + "@lit-labs/motion": "1.0.6", "@popperjs/core": "2.11.8", "@tiptap/core": "2.0.4", "@tiptap/extension-highlight": "2.0.4", @@ -47,9 +47,9 @@ "bcryptjs": "2.4.3", "buffer": "6.0.3", "compressorjs": "1.2.1", - "crypto-js": "4.1.1", + "crypto-js": "4.2.0", "electron-dl": "3.5.1", - "electron-log": "4.4.8", + "electron-log": "5.0.0", "electron-store": "8.1.0", "electron-updater": "6.1.4", "emoji-picker-js": "https://github.com/Qortal/emoji-picker-js", @@ -67,8 +67,8 @@ "prosemirror-schema-list": "1.3.0", "prosemirror-state": "1.4.3", "prosemirror-transform": "1.8.0", - "prosemirror-view": "1.32.1", - "sass": "1.69.4", + "prosemirror-view": "1.32.2", + "sass": "1.69.5", "short-unique-id": "5.0.3" }, "devDependencies": { @@ -115,20 +115,20 @@ "@rollup/plugin-node-resolve": "15.2.3", "@rollup/plugin-replace": "5.0.4", "@rollup/plugin-terser": "0.4.4", - "@vaadin/avatar": "24.2.0", - "@vaadin/button": "24.2.0", - "@vaadin/grid": "24.2.0", - "@vaadin/icons": "24.2.0", - "@vaadin/password-field": "24.2.0", - "@vaadin/tooltip": "24.2.0", + "@vaadin/avatar": "24.2.1", + "@vaadin/button": "24.2.1", + "@vaadin/grid": "24.2.1", + "@vaadin/icons": "24.2.1", + "@vaadin/password-field": "24.2.1", + "@vaadin/tooltip": "24.2.1", "@zip.js/zip.js": "2.7.30", - "axios": "1.5.1", + "axios": "1.6.0", "electron": "27.0.2", "electron-builder": "24.6.4", "electron-packager": "17.1.2", "epml": "0.3.3", "eslint": "8.52.0", - "eslint-plugin-lit": "1.9.1", + "eslint-plugin-lit": "1.10.1", "eslint-plugin-wc": "2.0.4", "file-saver": "2.0.5", "highcharts": "11.1.0", diff --git a/plugins/plugins/core/components/qdn-action-types.js b/plugins/plugins/core/components/qdn-action-types.js index 496aba42..dd354da0 100644 --- a/plugins/plugins/core/components/qdn-action-types.js +++ b/plugins/plugins/core/components/qdn-action-types.js @@ -65,4 +65,7 @@ export const SEND_LOCAL_NOTIFICATION = 'SEND_LOCAL_NOTIFICATION' export const VOTE_ON_POLL= 'VOTE_ON_POLL' //CREATE_POLL -export const CREATE_POLL= 'CREATE_POLL' \ No newline at end of file +export const CREATE_POLL= 'CREATE_POLL' + +//GET_DAY_SUMMARY +export const GET_DAY_SUMMARY = 'GET_DAY_SUMMARY' diff --git a/plugins/plugins/core/qdn/browser/browser.src.js b/plugins/plugins/core/qdn/browser/browser.src.js index 3225f33e..50da5978 100644 --- a/plugins/plugins/core/qdn/browser/browser.src.js +++ b/plugins/plugins/core/qdn/browser/browser.src.js @@ -130,8 +130,8 @@ class WebBrowser extends LitElement { } constructor() { - super(); - this.url = 'about:blank'; + super() + this.url = 'about:blank' this.uid = new ShortUniqueId() this.myAddress = window.parent.reduxStore.getState().app.selectedAddress this._publicKey = { key: '', hasPubKey: false } @@ -141,13 +141,13 @@ class WebBrowser extends LitElement { this.identifier = urlParams.get('identifier') != null ? urlParams.get('identifier') - : null; + : null this.path = urlParams.get('path') != null ? (urlParams.get('path').startsWith('/') ? '' : '/') + urlParams.get('path') - : ''; - this.preview = urlParams.get('preview'); + : '' + this.preview = urlParams.get('preview') this.link = urlParams.get('link') this.dev = urlParams.get('dev') this.followedNames = [] @@ -189,7 +189,7 @@ class WebBrowser extends LitElement { url: `/lists/blockedNames?apiKey=${this.getApiKey()}`, }) - this.blockedNames = blockedNames; + this.blockedNames = blockedNames setTimeout( getBlockedNames, this.config.user.nodeSettings.pingInterval @@ -226,7 +226,7 @@ class WebBrowser extends LitElement { this.rvnFeePerByte = 0.00001125 this.arrrWalletAddress = '' - let configLoaded = false; + let configLoaded = false parentEpml.ready().then(() => { parentEpml.subscribe('selected_address', async (selectedAddress) => { @@ -242,12 +242,12 @@ class WebBrowser extends LitElement { this.arrrWallet = window.parent.reduxStore.getState().app.selectedAddress.arrrWallet }) parentEpml.subscribe('config', (c) => { - this.config = JSON.parse(c); + this.config = JSON.parse(c) if (!configLoaded) { - render(); - setTimeout(getFollowedNames, 1); - setTimeout(getBlockedNames, 1); - configLoaded = true; + render() + setTimeout(getFollowedNames, 1) + setTimeout(getBlockedNames, 1) + configLoaded = true } }) }) @@ -255,20 +255,20 @@ class WebBrowser extends LitElement { async extractComponents(url) { if (!url.startsWith("qortal://")) { - return null; + return null } - url = url.replace(/^(qortal\:\/\/)/, ""); + url = url.replace(/^(qortal\:\/\/)/, "") if (url.includes("/")) { - let parts = url.split("/"); - const service = parts[0].toUpperCase(); - parts.shift(); - const name = parts[0]; - parts.shift(); - let identifier; + let parts = url.split("/") + const service = parts[0].toUpperCase() + parts.shift() + const name = parts[0] + parts.shift() + let identifier if (parts.length > 0) { - identifier = parts[0]; // Do not shift yet + identifier = parts[0] // Do not shift yet // Check if a resource exists with this service, name and identifier combination let responseObj = await parentEpml.request('apiCall', { url: `/arbitrary/resource/status/${service}/${name}/${identifier}?apiKey=${this.getApiKey()}` @@ -276,29 +276,29 @@ class WebBrowser extends LitElement { if (responseObj.totalChunkCount > 0) { // Identifier exists, so don't include it in the path - parts.shift(); + parts.shift() } else { - identifier = null; + identifier = null } }extractComponents - const components = {}; - components["service"] = service; - components["name"] = name; - components["identifier"] = identifier; - components["path"] = path; - return components; + const components = {} + components["service"] = service + components["name"] = name + components["identifier"] = identifier + components["path"] = path + return components } - return null; + return null } async _handleKeyDown(e) { if (e.key === 'Enter') { const value = e.target.value - let newQuery = value; + let newQuery = value if (newQuery.endsWith('/')) { - newQuery = newQuery.slice(0, -1); + newQuery = newQuery.slice(0, -1) } const res = await this.extractComponents(newQuery) if (!res) return @@ -320,9 +320,9 @@ class WebBrowser extends LitElement { async linkOpenNewTab(link) { const value = link - let newQuery = value; + let newQuery = value if (newQuery.endsWith('/')) { - newQuery = newQuery.slice(0, -1); + newQuery = newQuery.slice(0, -1) } const res = await this.extractComponents(newQuery) if (!res) return @@ -441,7 +441,7 @@ class WebBrowser extends LitElement { const url = `${nodeUrl}/transactions/unitfee?txType=JOIN_GROUP` const response = await fetch(url) if (!response.ok) { - throw new Error('Error when fetching join fee'); + throw new Error('Error when fetching join fee') } const data = await response.json() @@ -455,21 +455,22 @@ class WebBrowser extends LitElement { const url = `${nodeUrl}/transactions/unitfee?txType=DEPLOY_AT` const response = await fetch(url) if (!response.ok) { - throw new Error('Error when fetching join fee'); + throw new Error('Error when fetching join fee') } const data = await response.json() const joinFee = (Number(data) / 1e8).toFixed(8) return joinFee } - async getArbitraryFee (){ + + async getArbitraryFee (){ const timestamp = Date.now() const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node] const nodeUrl = myNode.protocol + '://' + myNode.domain + ':' + myNode.port const url = `${nodeUrl}/transactions/unitfee?txType=ARBITRARY×tamp=${timestamp}` const response = await fetch(url) if (!response.ok) { - throw new Error('Error when fetching arbitrary fee'); + throw new Error('Error when fetching arbitrary fee') } const data = await response.json() const arbitraryFee = (Number(data) / 1e8).toFixed(8) @@ -478,14 +479,15 @@ class WebBrowser extends LitElement { fee : Number(data), feeToShow: arbitraryFee } - } + } + async sendQortFee() { const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node] const nodeUrl = myNode.protocol + '://' + myNode.domain + ':' + myNode.port const url = `${nodeUrl}/transactions/unitfee?txType=PAYMENT` const response = await fetch(url) if (!response.ok) { - throw new Error('Error when fetching join fee'); + throw new Error('Error when fetching join fee') } const data = await response.json() @@ -499,20 +501,21 @@ class WebBrowser extends LitElement { const url = `${nodeUrl}/transactions/unitfee?txType=VOTE_ON_POLL` const response = await fetch(url) if (!response.ok) { - throw new Error('Error when fetching vote fee'); + throw new Error('Error when fetching vote fee') } const data = await response.json() const joinFee = (Number(data) / 1e8).toFixed(8) return joinFee } + async unitCreatePollFee() { const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node] const nodeUrl = myNode.protocol + '://' + myNode.domain + ':' + myNode.port const url = `${nodeUrl}/transactions/unitfee?txType=CREATE_POLL` const response = await fetch(url) if (!response.ok) { - throw new Error('Error when fetching vote fee'); + throw new Error('Error when fetching vote fee') } const data = await response.json() @@ -528,10 +531,10 @@ class WebBrowser extends LitElement { url: `/addresses/lastreference/${this.selectedAddress.address}` }) return myRef - }; + } const validateReceiver = async () => { - let lastRef = await getLastRef(); + let lastRef = await getLastRef() let myTransaction = await makeTransactionRequest(lastRef) const res = getTxnRequestResponse(myTransaction) return res @@ -581,10 +584,10 @@ class WebBrowser extends LitElement { url: `/addresses/lastreference/${this.selectedAddress.address}` }) return myRef - }; + } const validateReceiver = async () => { - let lastRef = await getLastRef(); + let lastRef = await getLastRef() let myTransaction = await makeTransactionRequest(lastRef) const res = getTxnRequestResponse(myTransaction) return res @@ -642,10 +645,10 @@ class WebBrowser extends LitElement { url: `/addresses/lastreference/${this.selectedAddress.address}` }) return myRef - }; + } const validateReceiver = async () => { - let lastRef = await getLastRef(); + let lastRef = await getLastRef() let myTransaction = await makeTransactionRequest(lastRef) const res = getTxnRequestResponse(myTransaction) return res @@ -689,6 +692,7 @@ class WebBrowser extends LitElement { return voteRes } + async _createPoll(pollName, pollDescription, options, pollOwnerAddress) { const voteFeeInput = await this.unitCreatePollFee() const getLastRef = async () => { @@ -697,10 +701,10 @@ class WebBrowser extends LitElement { url: `/addresses/lastreference/${this.selectedAddress.address}` }) return myRef - }; + } const validateReceiver = async () => { - let lastRef = await getLastRef(); + let lastRef = await getLastRef() let myTransaction = await makeTransactionRequest(lastRef) const res = getTxnRequestResponse(myTransaction) return res @@ -751,8 +755,8 @@ class WebBrowser extends LitElement { } firstUpdated() { - this.changeTheme(); - this.changeLanguage(); + this.changeTheme() + this.changeLanguage() this.btcWallet = window.parent.reduxStore.getState().app.selectedAddress.btcWallet this.ltcWallet = window.parent.reduxStore.getState().app.selectedAddress.ltcWallet @@ -762,18 +766,18 @@ class WebBrowser extends LitElement { this.arrrWallet = window.parent.reduxStore.getState().app.selectedAddress.arrrWallet window.addEventListener('storage', () => { - const checkLanguage = localStorage.getItem('qortalLanguage'); - const checkTheme = localStorage.getItem('qortalTheme'); + const checkLanguage = localStorage.getItem('qortalLanguage') + const checkTheme = localStorage.getItem('qortalTheme') - use(checkLanguage); + use(checkLanguage) if (checkTheme === 'dark') { - this.theme = 'dark'; + this.theme = 'dark' } else { - this.theme = 'light'; + this.theme = 'light' } - document.querySelector('html').setAttribute('theme', this.theme); - }); + document.querySelector('html').setAttribute('theme', this.theme) + }) if (!isElectron()) { } else { @@ -790,20 +794,20 @@ class WebBrowser extends LitElement { event.data.length == 0 || event.data.action == null ) { - return; + return } - let response = '{"error": "Request could not be fulfilled"}'; - let data = event.data; + let response = '{"error": "Request could not be fulfilled"}' + let data = event.data switch (data.action) { case actions.GET_USER_ACCOUNT: { - let skip = false; + let skip = false if (window.parent.reduxStore.getState().app.qAPPAutoAuth) { - skip = true; + skip = true } - let res1; + let res1 if (!skip) { res1 = await showModalAndWait( actions.GET_USER_ACCOUNT, @@ -811,21 +815,21 @@ class WebBrowser extends LitElement { service: this.service, name: this.name } - ); - }; + ) + } if ((res1 && res1.action === 'accept') || skip) { - let account = {}; - account['address'] = this.selectedAddress.address; + let account = {} + account['address'] = this.selectedAddress.address account['publicKey'] = - this.selectedAddress.base58PublicKey; - response = JSON.stringify(account); - break; + this.selectedAddress.base58PublicKey + response = JSON.stringify(account) + break } else { - const data = {}; + const data = {} const errorMsg = "User declined to share account details" - data['error'] = errorMsg; - response = JSON.stringify(data); - break; + data['error'] = errorMsg + response = JSON.stringify(data) + break } } @@ -834,89 +838,89 @@ class WebBrowser extends LitElement { const { encryptedData, publicKey } = data try { - let data = {}; + let data = {} if (!encryptedData) { const errorMsg = `Missing fields: encryptedData` - data['error'] = errorMsg; - response = JSON.stringify(data); + data['error'] = errorMsg + response = JSON.stringify(data) break } const uint8Array = base64ToUint8Array(encryptedData) - const startsWithQortalEncryptedData = uint8ArrayStartsWith(uint8Array, "qortalEncryptedData"); + const startsWithQortalEncryptedData = uint8ArrayStartsWith(uint8Array, "qortalEncryptedData") if (startsWithQortalEncryptedData) { if (!publicKey) { const errorMsg = `Missing fields: publicKey` - data['error'] = errorMsg; - response = JSON.stringify(data); + data['error'] = errorMsg + response = JSON.stringify(data) break } const decryptedDataToBase64 = decryptDeprecatedSingle(uint8Array, publicKey) - response = JSON.stringify(decryptedDataToBase64); - break; + response = JSON.stringify(decryptedDataToBase64) + break } - const startsWithQortalGroupEncryptedData = uint8ArrayStartsWith(uint8Array, "qortalGroupEncryptedData"); + const startsWithQortalGroupEncryptedData = uint8ArrayStartsWith(uint8Array, "qortalGroupEncryptedData") if (startsWithQortalGroupEncryptedData) { const decryptedData = decryptGroupData(encryptedData) const decryptedDataToBase64 = uint8ArrayToBase64(decryptedData) - response = JSON.stringify(decryptedDataToBase64); - break; + response = JSON.stringify(decryptedDataToBase64) + break } const errorMsg = "Unable to decrypt" - data['error'] = errorMsg; - response = JSON.stringify(data); + data['error'] = errorMsg + response = JSON.stringify(data) break } catch (error) { - const data = {}; + const data = {} const errorMsg = error.message || "Error in decrypting data" - data['error'] = errorMsg; - response = JSON.stringify(data); + data['error'] = errorMsg + response = JSON.stringify(data) break } } case actions.GET_LIST_ITEMS: { - const requiredFields = ['list_name']; - const missingFields = []; + const requiredFields = ['list_name'] + const missingFields = [] requiredFields.forEach((field) => { if (!data[field]) { - missingFields.push(field); + missingFields.push(field) } - }); + }) if (missingFields.length > 0) { - const missingFieldsString = missingFields.join(', '); + const missingFieldsString = missingFields.join(', ') const errorMsg = `Missing fields: ${missingFieldsString}` - let data = {}; - data['error'] = errorMsg; - response = JSON.stringify(data); + let data = {} + data['error'] = errorMsg + response = JSON.stringify(data) break } - let skip = false; + let skip = false if (window.parent.reduxStore.getState().app.qAPPAutoLists) { - skip = true; + skip = true } - let res1; + let res1 if (!skip) { res1 = await showModalAndWait( actions.GET_LIST_ITEMS, { list_name: data.list_name } - ); - }; + ) + } if (res1 && res1.action === 'accept' || skip) { @@ -925,42 +929,43 @@ class WebBrowser extends LitElement { const list = await parentEpml.request('apiCall', { type: 'api', url: `/lists/${data.list_name}?apiKey=${this.getApiKey()}`, - }); - response = JSON.stringify(list); + }) + response = JSON.stringify(list) } catch (error) { - const data = {}; + const data = {} const errorMsg = "Error in retrieving list" - data['error'] = errorMsg; - response = JSON.stringify(data); + data['error'] = errorMsg + response = JSON.stringify(data) } finally { - break; + break } } else { - const data = {}; + const data = {} const errorMsg = "User declined to share list" - data['error'] = errorMsg; - response = JSON.stringify(data); - break; + data['error'] = errorMsg + response = JSON.stringify(data) + break } - }; + } + case actions.ADD_LIST_ITEMS: { - const requiredFields = ['list_name', 'items']; - const missingFields = []; + const requiredFields = ['list_name', 'items'] + const missingFields = [] requiredFields.forEach((field) => { if (!data[field]) { - missingFields.push(field); + missingFields.push(field) } - }); + }) if (missingFields.length > 0) { - const missingFieldsString = missingFields.join(', '); + const missingFieldsString = missingFields.join(', ') const errorMsg = `Missing fields: ${missingFieldsString}` - let data = {}; - data['error'] = errorMsg; - response = JSON.stringify(data); + let data = {} + data['error'] = errorMsg + response = JSON.stringify(data) break } const items = data.items @@ -971,16 +976,16 @@ class WebBrowser extends LitElement { list_name: list_name, items: items } - ); + ) if (res && res.action === 'accept') { try { const body = { items: items, - }; + } - const bodyToString = JSON.stringify(body); + const bodyToString = JSON.stringify(body) const data = await parentEpml.request('apiCall', { type: 'api', method: 'POST', @@ -989,41 +994,42 @@ class WebBrowser extends LitElement { headers: { 'Content-Type': 'application/json', }, - }); + }) response = data } catch (error) { - const data = {}; + const data = {} const errorMsg = "Error in adding to list" - data['error'] = errorMsg; - response = JSON.stringify(data); + data['error'] = errorMsg + response = JSON.stringify(data) } finally { - break; + break } } else { - const data = {}; + const data = {} const errorMsg = "User declined add to list" - data['error'] = errorMsg; - response = JSON.stringify(data); - break; + data['error'] = errorMsg + response = JSON.stringify(data) + break } - }; + } + case actions.DELETE_LIST_ITEM: { - const requiredFields = ['list_name', 'item']; - const missingFields = []; + const requiredFields = ['list_name', 'item'] + const missingFields = [] requiredFields.forEach((field) => { if (!data[field]) { - missingFields.push(field); + missingFields.push(field) } - }); + }) if (missingFields.length > 0) { - const missingFieldsString = missingFields.join(', '); + const missingFieldsString = missingFields.join(', ') const errorMsg = `Missing fields: ${missingFieldsString}` - let data = {}; - data['error'] = errorMsg; - response = JSON.stringify(data); + let data = {} + data['error'] = errorMsg + response = JSON.stringify(data) break } const item = data.item @@ -1034,16 +1040,16 @@ class WebBrowser extends LitElement { list_name: list_name, item: item } - ); + ) if (res && res.action === 'accept') { try { const body = { items: [item], - }; + } - const bodyToString = JSON.stringify(body); + const bodyToString = JSON.stringify(body) const data = await parentEpml.request('apiCall', { type: 'api', @@ -1053,53 +1059,52 @@ class WebBrowser extends LitElement { headers: { 'Content-Type': 'application/json', }, - }); + }) response = data } catch (error) { - const data = {}; + const data = {} const errorMsg = "Error in adding to list" - data['error'] = errorMsg; - response = JSON.stringify(data); + data['error'] = errorMsg + response = JSON.stringify(data) } finally { - break; + break } } else { - const data = {}; + const data = {} const errorMsg = "User declined add to list" - data['error'] = errorMsg; - response = JSON.stringify(data); - break; + data['error'] = errorMsg + response = JSON.stringify(data) + break } - }; - + } case actions.LINK_TO_QDN_RESOURCE: case actions.QDN_RESOURCE_DISPLAYED: // Links are handled by the core, but the UI also listens for these actions in order to update the address bar. // Note: don't update this.url here, as we don't want to force reload the iframe each time. if (this.preview != null && this.preview.length > 0) { - this.displayUrl = translate("appspage.schange40"); - return; + this.displayUrl = translate("appspage.schange40") + return } - let url = 'qortal://' + data.service + '/' + data.name; + let url = 'qortal://' + data.service + '/' + data.name this.path = data.path != null ? (data.path.startsWith('/') ? '' : '/') + data.path - : null; + : null if ( data.identifier != null && data.identifier != '' && data.identifier != 'default' ) - url = url.concat('/' + data.identifier); + url = url.concat('/' + data.identifier) if (this.path != null && this.path != '/') - url = url.concat(this.path); - this.name = data.name; - this.service = data.service; - this.identifier = data.identifier; - this.displayUrl = url; + url = url.concat(this.path) + this.name = data.name + this.service = data.service + this.identifier = data.identifier + this.displayUrl = url const frame = window.frameElement let tabId = "" @@ -1116,7 +1121,8 @@ class WebBrowser extends LitElement { service: data.service, id: tabId ? tabId : "" })) - return; + return + case actions.SET_TAB_NOTIFICATIONS: { const { count } = data if (isNaN(count)) { @@ -1139,58 +1145,58 @@ class WebBrowser extends LitElement { case actions.PUBLISH_QDN_RESOURCE: { // optional fields: encrypt:boolean recipientPublicKey:string - const requiredFields = ['service', 'name']; - const missingFields = []; + const requiredFields = ['service', 'name'] + const missingFields = [] requiredFields.forEach((field) => { if (!data[field]) { - missingFields.push(field); + missingFields.push(field) } - }); + }) if (missingFields.length > 0) { - const missingFieldsString = missingFields.join(', '); + const missingFieldsString = missingFields.join(', ') const errorMsg = `Missing fields: ${missingFieldsString}` - let data = {}; - data['error'] = errorMsg; - response = JSON.stringify(data); + let data = {} + data['error'] = errorMsg + response = JSON.stringify(data) break } if (!data.file && !data.data64) { - let data = {}; - data['error'] = "No data or file was submitted"; - response = JSON.stringify(data); + let data = {} + data['error'] = "No data or file was submitted" + response = JSON.stringify(data) break } // Use "default" if user hasn't specified an identifer - const service = data.service; - const name = data.name; - let identifier = data.identifier; - let data64 = data.data64; - const filename = data.filename; - const title = data.title; - const description = data.description; - const category = data.category; - const tag1 = data.tag1; - const tag2 = data.tag2; - const tag3 = data.tag3; - const tag4 = data.tag4; - const tag5 = data.tag5; + const service = data.service + const name = data.name + let identifier = data.identifier + let data64 = data.data64 + const filename = data.filename + const title = data.title + const description = data.description + const category = data.category + const tag1 = data.tag1 + const tag2 = data.tag2 + const tag3 = data.tag3 + const tag4 = data.tag4 + const tag5 = data.tag5 let feeAmount = null if (data.identifier == null) { - identifier = 'default'; + identifier = 'default' } if (data.encrypt && (!data.publicKeys || (Array.isArray(data.publicKeys) && data.publicKeys.length === 0))) { - let data = {}; - data['error'] = "Encrypting data requires public keys"; - response = JSON.stringify(data); + let data = {} + data['error'] = "Encrypting data requires public keys" + response = JSON.stringify(data) break } if (!data.encrypt && data.service.endsWith("_PRIVATE")) { - let data = {}; - data['error'] = "Only encrypted data can go into private services"; - response = JSON.stringify(data); + let data = {} + data['error'] = "Only encrypted data can go into private services" + response = JSON.stringify(data) break } if (data.file) { @@ -1209,18 +1215,15 @@ class WebBrowser extends LitElement { } } catch (error) { - const obj = {}; - const errorMsg = error.message || 'Upload failed due to failed encryption'; - obj['error'] = errorMsg; - response = JSON.stringify(obj); + const obj = {} + const errorMsg = error.message || 'Upload failed due to failed encryption' + obj['error'] = errorMsg + response = JSON.stringify(obj) break } } - - - const res2 = await showModalAndWait( actions.PUBLISH_QDN_RESOURCE, { @@ -1230,14 +1233,14 @@ class WebBrowser extends LitElement { encrypt: data.encrypt, feeAmount: getArbitraryFee.feeToShow } - ); + ) if (res2.action === 'accept') { if (data.file && !data.encrypt) { data64 = await fileToBase64(data.file) } - const worker = new WebWorker(); + const worker = new WebWorker() try { - this.loader.show(); + this.loader.show() const resPublish = await publishData({ registeredName: encodeURIComponent(name), file: data64, @@ -1260,65 +1263,66 @@ class WebBrowser extends LitElement { apiVersion: 2, withFee: res2.userData.isWithFee === true ? true : false, feeAmount: feeAmount - }); + }) - response = JSON.stringify(resPublish); - worker.terminate(); + response = JSON.stringify(resPublish) + worker.terminate() } catch (error) { - worker.terminate(); - const obj = {}; - const errorMsg = error.message || 'Upload failed'; - obj['error'] = errorMsg; - response = JSON.stringify(obj); - console.error(error); - break; + worker.terminate() + const obj = {} + const errorMsg = error.message || 'Upload failed' + obj['error'] = errorMsg + response = JSON.stringify(obj) + console.error(error) + break } finally { - this.loader.hide(); + this.loader.hide() } } else if (res2.action === 'reject') { - response = '{"error": "User declined request"}'; + response = '{"error": "User declined request"}' } // Params: data.service, data.name, data.identifier, data.data64, // TODO: prompt user for publish. If they confirm, call `POST /arbitrary/{service}/{name}/{identifier}/base64` and sign+process transaction // then set the response string from the core to the `response` variable (defined above) // If they decline, send back JSON that includes an `error` key, such as `{"error": "User declined request"}` - break; + break } + case actions.PUBLISH_MULTIPLE_QDN_RESOURCES: { - const requiredFields = ['resources']; - const missingFields = []; + const requiredFields = ['resources'] + const missingFields = [] let feeAmount = null requiredFields.forEach((field) => { if (!data[field]) { - missingFields.push(field); + missingFields.push(field) } - }); + }) if (missingFields.length > 0) { - const missingFieldsString = missingFields.join(', '); + const missingFieldsString = missingFields.join(', ') const errorMsg = `Missing fields: ${missingFieldsString}` - let data = {}; - data['error'] = errorMsg; - response = JSON.stringify(data); + let data = {} + data['error'] = errorMsg + response = JSON.stringify(data) break } const resources = data.resources if (!Array.isArray(resources)) { - let data = {}; + let data = {} data['error'] = "Invalid data" - response = JSON.stringify(data); + response = JSON.stringify(data) break } if (resources.length === 0) { - let data = {}; + let data = {} data['error'] = "No resources to publish" - response = JSON.stringify(data); + response = JSON.stringify(data) break } if (data.encrypt && (!data.publicKeys || (Array.isArray(data.publicKeys) && data.publicKeys.length === 0))) { - let data = {}; - data['error'] = "Encrypting data requires public keys"; - response = JSON.stringify(data); + let data = {} + data['error'] = "Encrypting data requires public keys" + response = JSON.stringify(data) break } const getArbitraryFee = await this.getArbitraryFee() @@ -1330,25 +1334,25 @@ class WebBrowser extends LitElement { encrypt: data.encrypt, feeAmount: getArbitraryFee.feeToShow } - ); + ) if (res2.action === 'reject') { - response = '{"error": "User declined request"}'; + response = '{"error": "User declined request"}' break } const resourcesMap = resources.map(async (resource) => { - const requiredFields = ['service', 'name']; - const missingFields = []; + const requiredFields = ['service', 'name'] + const missingFields = [] requiredFields.forEach((field) => { if (!resource[field]) { - missingFields.push(field); + missingFields.push(field) } - }); + }) if (missingFields.length > 0) { - const missingFieldsString = missingFields.join(', '); + const missingFieldsString = missingFields.join(', ') const errorMsg = `Missing fields: ${missingFieldsString}` throw new Error(errorMsg) } @@ -1358,21 +1362,21 @@ class WebBrowser extends LitElement { throw new Error('No data or file was submitted') } - const service = resource.service; - const name = resource.name; - let identifier = resource.identifier; - let data64 = resource.data64; - const filename = resource.filename; - const title = resource.title; - const description = resource.description; - const category = resource.category; - const tag1 = resource.tag1; - const tag2 = resource.tag2; - const tag3 = resource.tag3; - const tag4 = resource.tag4; - const tag5 = resource.tag5; + const service = resource.service + const name = resource.name + let identifier = resource.identifier + let data64 = resource.data64 + const filename = resource.filename + const title = resource.title + const description = resource.description + const category = resource.category + const tag1 = resource.tag1 + const tag2 = resource.tag2 + const tag3 = resource.tag3 + const tag4 = resource.tag4 + const tag5 = resource.tag5 if (resource.identifier == null) { - identifier = 'default'; + identifier = 'default' } if (!data.encrypt && service.endsWith("_PRIVATE")) { @@ -1403,8 +1407,7 @@ class WebBrowser extends LitElement { data64 = await fileToBase64(resource.file) } - - const worker = new WebWorker(); + const worker = new WebWorker() try { const resPublish = await publishData({ @@ -1429,13 +1432,13 @@ class WebBrowser extends LitElement { apiVersion: 2, withFee: res2.userData.isWithFee === true ? true : false, feeAmount: feeAmount - }); + }) - worker.terminate(); + worker.terminate() return resPublish } catch (error) { - worker.terminate(); - const errorMsg = error.message || 'Upload failed'; + worker.terminate() + const errorMsg = error.message || 'Upload failed' throw new Error(errorMsg) } @@ -1443,147 +1446,152 @@ class WebBrowser extends LitElement { }) try { - this.loader.show(); - const results = await Promise.all(resourcesMap); - response = JSON.stringify(results); - this.loader.hide(); + this.loader.show() + const results = await Promise.all(resourcesMap) + response = JSON.stringify(results) + this.loader.hide() break // handle successful results } catch (error) { - const obj = {}; - const errorMsg = error.message || 'Upload failed'; - obj['error'] = errorMsg; - response = JSON.stringify(obj); - this.loader.hide(); - break; + const obj = {} + const errorMsg = error.message || 'Upload failed' + obj['error'] = errorMsg + response = JSON.stringify(obj) + this.loader.hide() + break } // Params: data.service, data.name, data.identifier, data.data64, // TODO: prompt user for publish. If they confirm, call `POST /arbitrary/{service}/{name}/{identifier}/base64` and sign+process transaction // then set the response string from the core to the `response` variable (defined above) // If they decline, send back JSON that includes an `error` key, such as `{"error": "User declined request"}` - break; + break } + case actions.VOTE_ON_POLL: { - const requiredFields = ['pollName', 'optionIndex']; - const missingFields = []; + const requiredFields = ['pollName', 'optionIndex'] + const missingFields = [] requiredFields.forEach((field) => { if (!data[field]) { - missingFields.push(field); + missingFields.push(field) } - }); + }) if (missingFields.length > 0) { - const missingFieldsString = missingFields.join(', '); + const missingFieldsString = missingFields.join(', ') const errorMsg = `Missing fields: ${missingFieldsString}` - let data = {}; - data['error'] = errorMsg; - response = JSON.stringify(data); + let data = {} + data['error'] = errorMsg + response = JSON.stringify(data) break } - const pollName = data.pollName; - const optionIndex = data.optionIndex; - + + const pollName = data.pollName + const optionIndex = data.optionIndex let pollInfo = null try { pollInfo = await parentEpml.request("apiCall", { type: "api", url: `/polls/${pollName}`, - }); + }) } catch (error) { - const errorMsg = (error && error.message) || 'Poll not found'; - let obj = {}; - obj['error'] = errorMsg; - response = JSON.stringify(obj); + const errorMsg = (error && error.message) || 'Poll not found' + let obj = {} + obj['error'] = errorMsg + response = JSON.stringify(obj) break } if (!pollInfo || pollInfo.error) { - const errorMsg = (pollInfo && pollInfo.message) || 'Poll not found'; - let obj = {}; - obj['error'] = errorMsg; - response = JSON.stringify(obj); + const errorMsg = (pollInfo && pollInfo.message) || 'Poll not found' + let obj = {} + obj['error'] = errorMsg + response = JSON.stringify(obj) break } try { - this.loader.show(); + this.loader.show() const resVoteOnPoll = await this._voteOnPoll(pollName, optionIndex) - response = JSON.stringify(resVoteOnPoll); + response = JSON.stringify(resVoteOnPoll) } catch (error) { - const obj = {}; - const errorMsg = error.message || 'Failed to vote on the poll.'; - obj['error'] = errorMsg; - response = JSON.stringify(obj); + const obj = {} + const errorMsg = error.message || 'Failed to vote on the poll.' + obj['error'] = errorMsg + response = JSON.stringify(obj) } finally { - this.loader.hide(); + this.loader.hide() } - break; + break } + case actions.CREATE_POLL: { - const requiredFields = ['pollName', 'pollDescription', 'pollOptions', 'pollOwnerAddress']; - const missingFields = []; + const requiredFields = ['pollName', 'pollDescription', 'pollOptions', 'pollOwnerAddress'] + const missingFields = [] requiredFields.forEach((field) => { if (!data[field]) { - missingFields.push(field); + missingFields.push(field) } - }); + }) if (missingFields.length > 0) { - const missingFieldsString = missingFields.join(', '); + const missingFieldsString = missingFields.join(', ') const errorMsg = `Missing fields: ${missingFieldsString}` - let data = {}; - data['error'] = errorMsg; - response = JSON.stringify(data); + let data = {} + data['error'] = errorMsg + response = JSON.stringify(data) break } - const pollName = data.pollName; + + const pollName = data.pollName const pollDescription = data.pollDescription const pollOptions = data.pollOptions const pollOwnerAddress = data.pollOwnerAddress try { - this.loader.show(); + this.loader.show() const resCreatePoll = await this._createPoll(pollName, pollDescription, pollOptions, pollOwnerAddress) - response = JSON.stringify(resCreatePoll); + response = JSON.stringify(resCreatePoll) } catch (error) { - const obj = {}; - const errorMsg = error.message || 'Failed to created poll.'; - obj['error'] = errorMsg; - response = JSON.stringify(obj); + const obj = {} + const errorMsg = error.message || 'Failed to created poll.' + obj['error'] = errorMsg + response = JSON.stringify(obj) } finally { - this.loader.hide(); + this.loader.hide() } - break; + break } + case actions.OPEN_NEW_TAB: { if(!data.qortalLink){ - const obj = {}; - const errorMsg = 'Please enter a qortal link - qortal://...'; - obj['error'] = errorMsg; - response = JSON.stringify(obj); + const obj = {} + const errorMsg = 'Please enter a qortal link - qortal://...' + obj['error'] = errorMsg + response = JSON.stringify(obj) break } try { await this.linkOpenNewTab(data.qortalLink) response = true - break; + break } catch (error) { console.log('error', error) - const obj = {}; - const errorMsg = "Invalid qortal link"; - obj['error'] = errorMsg; - response = JSON.stringify(obj); - break; + const obj = {} + const errorMsg = "Invalid qortal link" + obj['error'] = errorMsg + response = JSON.stringify(obj) + break } } + case actions.NOTIFICATIONS_PERMISSION: { try { @@ -1592,32 +1600,33 @@ class WebBrowser extends LitElement { { name: this.name } - ); + ) if (res.action === 'accept'){ this.addAppToNotificationList(this.name) response = true - break; + break } else { response = false - break; + break } } catch (error) { - break; + break } } + case actions.SEND_LOCAL_NOTIFICATION: { const {title, url, icon, message} = data try { const id = `appNotificationList-${this.selectedAddress.address}` - const checkData = localStorage.getItem(id) ? JSON.parse(localStorage.getItem(id)) : null; + const checkData = localStorage.getItem(id) ? JSON.parse(localStorage.getItem(id)) : null if(!checkData || !checkData[this.name]) throw new Error('App not on permission list') const appInfo = checkData[this.name] const lastNotification = appInfo.lastNotification const interval = appInfo.interval if (lastNotification && interval) { - const timeDifference = Date.now() - lastNotification; + const timeDifference = Date.now() - lastNotification if (timeDifference > interval) { parentEpml.request('showNotification', { @@ -1625,7 +1634,7 @@ class WebBrowser extends LitElement { }) response = true this.updateLastNotification(id, this.name) - break; + break } else { throw new Error(`duration until another notification can be sent: ${interval - timeDifference}`) } @@ -1635,31 +1644,31 @@ class WebBrowser extends LitElement { }) response = true this.updateLastNotification(id) - break; + break } else { throw new Error(`invalid data`) } } catch (error) { - const obj = {}; - const errorMsg = error.message || "error in pushing notification"; - obj['error'] = errorMsg; - response = JSON.stringify(obj); - break; + const obj = {} + const errorMsg = error.message || "error in pushing notification" + obj['error'] = errorMsg + response = JSON.stringify(obj) + break } } case actions.SEND_CHAT_MESSAGE: { - const message = data.message; - const recipient = data.destinationAddress; - const groupId = data.groupId; + const message = data.message + const recipient = data.destinationAddress + const groupId = data.groupId const isRecipient = groupId ? false : true const sendMessage = async (messageText, chatReference) => { - let _reference = new Uint8Array(64); - window.crypto.getRandomValues(_reference); - let reference = window.parent.Base58.encode(_reference); + let _reference = new Uint8Array(64) + window.crypto.getRandomValues(_reference) + let reference = window.parent.Base58.encode(_reference) const sendMessageRequest = async () => { let chatResponse @@ -1679,7 +1688,7 @@ class WebBrowser extends LitElement { isEncrypted: 1, isText: 1 } - }); + }) } @@ -1700,85 +1709,85 @@ class WebBrowser extends LitElement { isEncrypted: 0, isText: 1 } - }); + }) } const msgResponse = await _computePow(chatResponse) - return msgResponse; - }; + return msgResponse + } const _computePow = async (chatBytes) => { - const difficulty = 8; + const difficulty = 8 const path = window.parent.location.origin + '/memory-pow/memory-pow.wasm.full' - const worker = new WebWorkerChat(); - let nonce = null; - let chatBytesArray = null; + const worker = new WebWorkerChat() + let nonce = null + let chatBytesArray = null await new Promise((res) => { - worker.postMessage({ chatBytes, path, difficulty }); + worker.postMessage({ chatBytes, path, difficulty }) worker.onmessage = e => { - chatBytesArray = e.data.chatBytesArray; - nonce = e.data.nonce; - res(); + chatBytesArray = e.data.chatBytesArray + nonce = e.data.nonce + res() } - }); + }) let _response = await parentEpml.request('sign_chat', { nonce: this.selectedAddress.nonce, chatBytesArray: chatBytesArray, chatNonce: nonce, apiVersion: 2 - }); + }) - const chatResponse = getSendChatResponse(_response); - return chatResponse; - }; + const chatResponse = getSendChatResponse(_response) + return chatResponse + } const getSendChatResponse = (res) => { if (res.signature) { return res } else if (res.error) { - throw new Error(res.message); + throw new Error(res.message) } else { - throw new Error('ERROR: Could not send message'); + throw new Error('ERROR: Could not send message') } - }; + } - const chatResponse = await sendMessageRequest(); - return chatResponse; + const chatResponse = await sendMessageRequest() + return chatResponse } const result = await showModalAndWait( actions.SEND_CHAT_MESSAGE - ); + ) if (result.action === "accept") { - let hasPublicKey = true; + let hasPublicKey = true if (isRecipient) { const res = await parentEpml.request('apiCall', { type: 'api', url: `/addresses/publickey/${recipient}` - }); + }) if (res.error === 102) { this._publicKey.key = '' this._publicKey.hasPubKey = false - hasPublicKey = false; + hasPublicKey = false } else if (res !== false) { this._publicKey.key = res this._publicKey.hasPubKey = true } else { this._publicKey.key = '' this._publicKey.hasPubKey = false - hasPublicKey = false; + hasPublicKey = false } } if (!hasPublicKey && isRecipient) { - response = '{"error": "Cannot send an encrypted message to this user since they do not have their publickey on chain."}'; + response = '{"error": "Cannot send an encrypted message to this user since they do not have their publickey on chain."}' break } @@ -1805,64 +1814,64 @@ class WebBrowser extends LitElement { images: [''], repliedTo: '', version: 3 - }; + } - const stringifyMessageObject = JSON.stringify(messageObject); + const stringifyMessageObject = JSON.stringify(messageObject) // if (this.balance < 4) { // this.myTrimmedMeassage = '' // this.myTrimmedMeassage = stringifyMessageObject // this.shadowRoot.getElementById('confirmDialog').open() // } else { - // this.sendMessage(stringifyMessageObject, typeMessage); + // this.sendMessage(stringifyMessageObject, typeMessage) // } try { - this.loader.show(); - const msgResponse = await sendMessage(stringifyMessageObject); - response = msgResponse; + this.loader.show() + const msgResponse = await sendMessage(stringifyMessageObject) + response = msgResponse } catch (error) { - console.error(error); + console.error(error) if (error.message) { - let data = {}; - data['error'] = error.message; - response = JSON.stringify(data); + let data = {} + data['error'] = error.message + response = JSON.stringify(data) break } - response = '{"error": "Request could not be fulfilled"}'; + response = '{"error": "Request could not be fulfilled"}' } finally { - this.loader.hide(); + this.loader.hide() } } else { - response = '{"error": "User declined request"}'; + response = '{"error": "User declined request"}' } - // this.loader.show(); + // this.loader.show() // Params: data.groupId, data.destinationAddress, data.message // TODO: prompt user to send chat message. If they confirm, sign+process a CHAT transaction // then set the response string from the core to the `response` variable (defined above) // If they decline, send back JSON that includes an `error` key, such as `{"error": "User declined request"}` - break; + break } case actions.JOIN_GROUP: { - const requiredFields = ['groupId']; - const missingFields = []; + const requiredFields = ['groupId'] + const missingFields = [] requiredFields.forEach((field) => { if (!data[field]) { - missingFields.push(field); + missingFields.push(field) } - }); + }) if (missingFields.length > 0) { - const missingFieldsString = missingFields.join(', '); + const missingFieldsString = missingFields.join(', ') const errorMsg = `Missing fields: ${missingFieldsString}` - let data = {}; - data['error'] = errorMsg; - response = JSON.stringify(data); + let data = {} + data['error'] = errorMsg + response = JSON.stringify(data) break } - const groupId = data.groupId; + const groupId = data.groupId let groupInfo = null @@ -1870,60 +1879,61 @@ class WebBrowser extends LitElement { groupInfo = await parentEpml.request("apiCall", { type: "api", url: `/groups/${groupId}`, - }); + }) } catch (error) { - const errorMsg = (error && error.message) || 'Group not found'; - let obj = {}; - obj['error'] = errorMsg; - response = JSON.stringify(obj); + const errorMsg = (error && error.message) || 'Group not found' + let obj = {} + obj['error'] = errorMsg + response = JSON.stringify(obj) break } if (!groupInfo || groupInfo.error) { - const errorMsg = (groupInfo && groupInfo.message) || 'Group not found'; - let obj = {}; - obj['error'] = errorMsg; - response = JSON.stringify(obj); + const errorMsg = (groupInfo && groupInfo.message) || 'Group not found' + let obj = {} + obj['error'] = errorMsg + response = JSON.stringify(obj) break } try { - this.loader.show(); + this.loader.show() const resJoinGroup = await this._joinGroup(groupId, groupInfo.groupName) - response = JSON.stringify(resJoinGroup); + response = JSON.stringify(resJoinGroup) } catch (error) { - const obj = {}; - const errorMsg = error.message || 'Failed to join the group.'; - obj['error'] = errorMsg; - response = JSON.stringify(obj); + const obj = {} + const errorMsg = error.message || 'Failed to join the group.' + obj['error'] = errorMsg + response = JSON.stringify(obj) } finally { - this.loader.hide(); + this.loader.hide() } // Params: data.groupId // TODO: prompt user to join group. If they confirm, sign+process a JOIN_GROUP transaction // then set the response string from the core to the `response` variable (defined above) // If they decline, send back JSON that includes an `error` key, such as `{"error": "User declined request"}` - break; + break } + case actions.SAVE_FILE: { try { - const requiredFields = ['filename', 'blob']; - const missingFields = []; + const requiredFields = ['filename', 'blob'] + const missingFields = [] requiredFields.forEach((field) => { if (!data[field]) { - missingFields.push(field); + missingFields.push(field) } - }); + }) if (missingFields.length > 0) { - const missingFieldsString = missingFields.join(', '); + const missingFieldsString = missingFields.join(', ') const errorMsg = `Missing fields: ${missingFieldsString}` - let data = {}; - data['error'] = errorMsg; - response = JSON.stringify(data); + let data = {} + data['error'] = errorMsg + response = JSON.stringify(data) break } @@ -1937,10 +1947,10 @@ class WebBrowser extends LitElement { { filename } - ); + ) if (res.action === 'reject') { - response = '{"error": "User declined request"}'; + response = '{"error": "User declined request"}' break } @@ -1953,17 +1963,17 @@ class WebBrowser extends LitElement { const fileExtension = mimeToExtensionMap[mimeType] || backupExention let fileHandleOptions = {} if (!mimeType) { - const obj = {}; - const errorMsg = 'A mimeType could not be derived'; - obj['error'] = errorMsg; - response = JSON.stringify(obj); + const obj = {} + const errorMsg = 'A mimeType could not be derived' + obj['error'] = errorMsg + response = JSON.stringify(obj) break } if (!fileExtension) { - const obj = {}; - const errorMsg = 'A file extension could not be derived'; - obj['error'] = errorMsg; - response = JSON.stringify(obj); + const obj = {} + const errorMsg = 'A file extension could not be derived' + obj['error'] = errorMsg + response = JSON.stringify(obj) break } if (fileExtension && mimeType) { @@ -1994,78 +2004,77 @@ class WebBrowser extends LitElement { writeFile(fileHandle, blob).then(() => console.log("FILE SAVED")) } catch (error) { if (error.name === 'AbortError') { - const obj = {}; - const errorMsg = 'User declined the download'; - obj['error'] = errorMsg; - response = JSON.stringify(obj); + const obj = {} + const errorMsg = 'User declined the download' + obj['error'] = errorMsg + response = JSON.stringify(obj) break } FileSaver.saveAs(blob, filename) } - response = JSON.stringify(true); + response = JSON.stringify(true) } catch (error) { - const obj = {}; - const errorMsg = error.message || 'Failed to initiate download'; - obj['error'] = errorMsg; - response = JSON.stringify(obj); + const obj = {} + const errorMsg = error.message || 'Failed to initiate download' + obj['error'] = errorMsg + response = JSON.stringify(obj) } - break; + break } case 'DEPLOY_AT': { - const requiredFields = ['name', 'description', 'tags', 'creationBytes', 'amount', 'assetId', 'type']; - const missingFields = []; + const requiredFields = ['name', 'description', 'tags', 'creationBytes', 'amount', 'assetId', 'type'] + const missingFields = [] requiredFields.forEach((field) => { if (!data[field] && data[field] !== 0) { - missingFields.push(field); + missingFields.push(field) } - }); + }) if (missingFields.length > 0) { - const missingFieldsString = missingFields.join(', '); + const missingFieldsString = missingFields.join(', ') const errorMsg = `Missing fields: ${missingFieldsString}` - let data = {}; - data['error'] = errorMsg; - response = JSON.stringify(data); + let data = {} + data['error'] = errorMsg + response = JSON.stringify(data) break } try { - this.loader.show(); + this.loader.show() const resDeployAt = await this._deployAt(data.name, data.description, data.tags, data.creationBytes, data.amount, data.assetId, data.type) - response = JSON.stringify(resDeployAt); + response = JSON.stringify(resDeployAt) } catch (error) { - const obj = {}; - const errorMsg = error.message || 'Failed to join the group.'; - obj['error'] = errorMsg; - response = JSON.stringify(obj); + const obj = {} + const errorMsg = error.message || 'Failed to join the group.' + obj['error'] = errorMsg + response = JSON.stringify(obj) } finally { - this.loader.hide(); + this.loader.hide() } - break; + break } - case actions.GET_WALLET_BALANCE: { - const requiredFields = ['coin']; - const missingFields = []; + const requiredFields = ['coin'] + const missingFields = [] requiredFields.forEach((field) => { if (!data[field]) { - missingFields.push(field); + missingFields.push(field) } - }); + }) if (missingFields.length > 0) { - const missingFieldsString = missingFields.join(', '); + const missingFieldsString = missingFields.join(', ') const errorMsg = `Missing fields: ${missingFieldsString}` - let data = {}; - data['error'] = errorMsg; - response = JSON.stringify(data); + let data = {} + data['error'] = errorMsg + response = JSON.stringify(data) break } // Params: data.coin (QORT / BTC / LTC / DOGE / DGB / RVN / ARRR) @@ -2074,14 +2083,14 @@ class WebBrowser extends LitElement { // If they decline, send back JSON that includes an `error` key, such as `{"error": "User declined request"}` const res3 = await showModalAndWait( actions.GET_WALLET_BALANCE - ); + ) if (res3.action === 'accept') { - let coin = data.coin; + let coin = data.coin if (coin === "QORT") { let qortAddress = window.parent.reduxStore.getState().app.selectedAddress.address try { - this.loader.show(); + this.loader.show() const QORTBalance = await parentEpml.request('apiCall', { url: `/addresses/balance/${qortAddress}?apiKey=${this.getApiKey()}`, }) @@ -2089,14 +2098,14 @@ class WebBrowser extends LitElement { } catch (error) { - console.error(error); - const data = {}; - const errorMsg = error.message || get("browserpage.bchange21"); - data['error'] = errorMsg; - response = JSON.stringify(data); + console.error(error) + const data = {} + const errorMsg = error.message || get("browserpage.bchange21") + data['error'] = errorMsg + response = JSON.stringify(data) } finally { - this.loader.hide(); + this.loader.hide() } } else { let _url = `` @@ -2131,39 +2140,55 @@ class WebBrowser extends LitElement { break } try { - this.loader.show(); + this.loader.show() const res = await parentEpml.request('apiCall', { url: _url, method: 'POST', body: _body, }) if (isNaN(Number(res))) { - const data = {}; - const errorMsg = error.message || get("browserpage.bchange21"); - data['error'] = errorMsg; - response = JSON.stringify(data); - return; + const data = {} + const errorMsg = error.message || get("browserpage.bchange21") + data['error'] = errorMsg + response = JSON.stringify(data) + return } else { - response = (Number(res) / 1e8).toFixed(8); + response = (Number(res) / 1e8).toFixed(8) } } catch (error) { - console.error(error); - const data = {}; - const errorMsg = error.message || get("browserpage.bchange21"); - data['error'] = errorMsg; - response = JSON.stringify(data); - return; + console.error(error) + const data = {} + const errorMsg = error.message || get("browserpage.bchange21") + data['error'] = errorMsg + response = JSON.stringify(data) + return } finally { this.loader.hide() } } } else if (res3.action === 'reject') { - response = '{"error": "User declined request"}'; + response = '{"error": "User declined request"}' } - break; + break } + case actions.GET_DAY_SUMMARY: { + try { + const summary = await parentEpml.request('apiCall', { + type: 'api', + url: `/admin/summary?apiKey=${this.getApiKey()}`, + }) + response = summary + } catch (error) { + const data = {} + const errorMsg = "Error in retrieving summary" + data['error'] = errorMsg + response = JSON.stringify(data) + } finally { + break + } + } case actions.SEND_COIN: { const requiredFields = ['coin', 'destinationAddress', 'amount'] @@ -3048,26 +3073,26 @@ class WebBrowser extends LitElement { } // Parse response - let responseObj; + let responseObj try { - responseObj = JSON.parse(response); + responseObj = JSON.parse(response) } catch (e) { // Not all responses will be JSON - responseObj = response; + responseObj = response } // Respond to app if (responseObj.error != null) { event.ports[0].postMessage({ result: null, error: responseObj, - }); + }) } else { event.ports[0].postMessage({ result: responseObj, error: null, - }); + }) } - }); + }) this.clearConsole() setInterval(() => { this.clearConsole() @@ -3083,29 +3108,30 @@ class WebBrowser extends LitElement { } changeTheme() { - const checkTheme = localStorage.getItem('qortalTheme'); + const checkTheme = localStorage.getItem('qortalTheme') if (checkTheme === 'dark') { - this.theme = 'dark'; + this.theme = 'dark' } else { - this.theme = 'light'; + this.theme = 'light' } - document.querySelector('html').setAttribute('theme', this.theme); + document.querySelector('html').setAttribute('theme', this.theme) } changeLanguage() { - const checkLanguage = localStorage.getItem('qortalLanguage'); + const checkLanguage = localStorage.getItem('qortalLanguage') if (checkLanguage === null || checkLanguage.length === 0) { - localStorage.setItem('qortalLanguage', 'us'); - use('us'); + localStorage.setItem('qortalLanguage', 'us') + use('us') } else { - use(checkLanguage); + use(checkLanguage) } } + addAppToNotificationList(appName) { if(!appName) throw new Error('unknown app name') - const id = `appNotificationList-${this.selectedAddress.address}`; - const checkData = localStorage.getItem(id) ? JSON.parse(localStorage.getItem(id)) : null; + const id = `appNotificationList-${this.selectedAddress.address}` + const checkData = localStorage.getItem(id) ? JSON.parse(localStorage.getItem(id)) : null if (!checkData) { const newData = { @@ -3113,32 +3139,32 @@ class WebBrowser extends LitElement { interval: 900000, // 15mins in milliseconds lastNotification: null, }, - }; - localStorage.setItem(id, JSON.stringify(newData)); + } + localStorage.setItem(id, JSON.stringify(newData)) } else { - const copyData = { ...checkData }; + const copyData = { ...checkData } copyData[appName] = { interval: 900000, // 15mins in milliseconds lastNotification: null, - }; - localStorage.setItem(id, JSON.stringify(copyData)); + } + localStorage.setItem(id, JSON.stringify(copyData)) } } updateLastNotification(id, appName) { - const checkData = localStorage.getItem(id) ? JSON.parse(localStorage.getItem(id)) : null; + const checkData = localStorage.getItem(id) ? JSON.parse(localStorage.getItem(id)) : null if (checkData) { - const copyData = { ...checkData }; + const copyData = { ...checkData } if (copyData[appName]) { - copyData[appName].lastNotification = Date.now(); // Make sure to use Date.now(), not date.now() + copyData[appName].lastNotification = Date.now() // Make sure to use Date.now(), not date.now() } else { copyData[appName] = { interval: 900000, // 15mins in milliseconds lastNotification: Date.now(), - }; + } } - localStorage.setItem(id, JSON.stringify(copyData)); + localStorage.setItem(id, JSON.stringify(copyData)) } } @@ -3146,7 +3172,7 @@ class WebBrowser extends LitElement { renderFollowUnfollowButton() { // Only show the follow/unfollow button if we have permission to modify the list on this node if (this.followedNames == null || !Array.isArray(this.followedNames)) { - return html``; + return html`` } if (this.followedNames.indexOf(this.name) === -1) { @@ -3156,7 +3182,7 @@ class WebBrowser extends LitElement { title="${translate('browserpage.bchange7')} ${this.name}" class="address-bar-button float-right" >add_to_queue`; + >` } else { // render unfollow button return html`remove_from_queue`; + >` } } renderBlockUnblockButton() { // Only show the block/unblock button if we have permission to modify the list on this node if (this.blockedNames == null || !Array.isArray(this.blockedNames)) { - return html``; + return html`` } if (this.blockedNames.indexOf(this.name) === -1) { @@ -3181,7 +3207,7 @@ class WebBrowser extends LitElement { title="${translate('browserpage.bchange9')} ${this.name}" class="address-bar-button float-right" >block`; + >` } else { // render unblock button return html`radio_button_unchecked`; + >` } } // Navigation goBack() { - window.history.back(); + window.history.back() } goForward() { - window.history.forward(); + window.history.forward() } refresh() { @@ -3218,37 +3244,37 @@ class WebBrowser extends LitElement { goBackToList() { if (this.service == "APP") { this.exitFullScreen() - window.location = '../../q-app/index.html'; + window.location = '../../q-app/index.html' } else { // Default to websites list this.exitFullScreen() - window.location = '../index.html'; + window.location = '../index.html' } } follow() { - this.followName(this.name); + this.followName(this.name) } unfollow() { - this.unfollowName(this.name); + this.unfollowName(this.name) } block() { - this.blockName(this.name); + this.blockName(this.name) } unblock() { - this.unblockName(this.name); + this.unblockName(this.name) } delete() { - this.deleteCurrentResource(); + this.deleteCurrentResource() } async followName(name) { - let items = [name]; - let namesJsonString = JSON.stringify({ items: items }); + let items = [name] + let namesJsonString = JSON.stringify({ items: items }) let ret = await parentEpml.request('apiCall', { url: `/lists/followedNames?apiKey=${this.getApiKey()}`, @@ -3257,7 +3283,7 @@ class WebBrowser extends LitElement { 'Content-Type': 'application/json', }, body: `${namesJsonString}`, - }); + }) if (ret === true) { // Successfully followed - add to local list @@ -3265,19 +3291,19 @@ class WebBrowser extends LitElement { // immediately, as apposed to only adding if it doesn't already exist this.followedNames = this.followedNames.filter( (item) => item != name - ); - this.followedNames.push(name); + ) + this.followedNames.push(name) } else { - let err1string = get('browserpage.bchange11'); - parentEpml.request('showSnackBar', `${err1string}`); + let err1string = get('browserpage.bchange11') + parentEpml.request('showSnackBar', `${err1string}`) } - return ret; + return ret } async unfollowName(name) { - let items = [name]; - let namesJsonString = JSON.stringify({ items: items }); + let items = [name] + let namesJsonString = JSON.stringify({ items: items }) let ret = await parentEpml.request('apiCall', { url: `/lists/followedNames?apiKey=${this.getApiKey()}`, @@ -3286,24 +3312,24 @@ class WebBrowser extends LitElement { 'Content-Type': 'application/json', }, body: `${namesJsonString}`, - }); + }) if (ret === true) { // Successfully unfollowed - remove from local list this.followedNames = this.followedNames.filter( (item) => item != name - ); + ) } else { - let err2string = get('browserpage.bchange12'); - parentEpml.request('showSnackBar', `${err2string}`); + let err2string = get('browserpage.bchange12') + parentEpml.request('showSnackBar', `${err2string}`) } - return ret; + return ret } async blockName(name) { - let items = [name]; - let namesJsonString = JSON.stringify({ items: items }); + let items = [name] + let namesJsonString = JSON.stringify({ items: items }) let ret = await parentEpml.request('apiCall', { url: `/lists/blockedNames?apiKey=${this.getApiKey()}`, @@ -3312,7 +3338,7 @@ class WebBrowser extends LitElement { 'Content-Type': 'application/json', }, body: `${namesJsonString}`, - }); + }) if (ret === true) { // Successfully blocked - add to local list @@ -3320,19 +3346,19 @@ class WebBrowser extends LitElement { // immediately, as apposed to only adding if it doesn't already exist this.blockedNames = this.blockedNames.filter( (item) => item != name - ); - this.blockedNames.push(name); + ) + this.blockedNames.push(name) } else { - let err3string = get('browserpage.bchange13'); - parentEpml.request('showSnackBar', `${err3string}`); + let err3string = get('browserpage.bchange13') + parentEpml.request('showSnackBar', `${err3string}`) } - return ret; + return ret } async unblockName(name) { - let items = [name]; - let namesJsonString = JSON.stringify({ items: items }); + let items = [name] + let namesJsonString = JSON.stringify({ items: items }) let ret = await parentEpml.request('apiCall', { url: `/lists/blockedNames?apiKey=${this.getApiKey()}`, @@ -3341,66 +3367,66 @@ class WebBrowser extends LitElement { 'Content-Type': 'application/json', }, body: `${namesJsonString}`, - }); + }) if (ret === true) { // Successfully unblocked - remove from local list this.blockedNames = this.blockedNames.filter( (item) => item != name - ); + ) } else { - let err4string = get('browserpage.bchange14'); - parentEpml.request('showSnackBar', `${err4string}`); + let err4string = get('browserpage.bchange14') + parentEpml.request('showSnackBar', `${err4string}`) } - return ret; + return ret } async deleteCurrentResource() { if (this.followedNames.indexOf(this.name) != -1) { // Following name - so deleting won't work - let err5string = get('browserpage.bchange15'); - parentEpml.request('showSnackBar', `${err5string}`); - return; + let err5string = get('browserpage.bchange15') + parentEpml.request('showSnackBar', `${err5string}`) + return } - let identifier = (this.identifier == null || this.identifier.length == 0) ? 'default' : this.identifier; + let identifier = (this.identifier == null || this.identifier.length == 0) ? 'default' : this.identifier let ret = await parentEpml.request('apiCall', { url: `/arbitrary/resource/${this.service}/${this.name }/${identifier}?apiKey=${this.getApiKey()}`, method: 'DELETE', - }); + }) if (ret === true) { - this.goBackToList(); + this.goBackToList() } else { - let err6string = get('browserpage.bchange16'); - parentEpml.request('showSnackBar', `${err6string}`); + let err6string = get('browserpage.bchange16') + parentEpml.request('showSnackBar', `${err6string}`) } - return ret; + return ret } getApiKey() { const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[ window.parent.reduxStore.getState().app.nodeConfig.node - ]; - let apiKey = myNode.apiKey; - return apiKey; + ] + let apiKey = myNode.apiKey + return apiKey } } -window.customElements.define('web-browser', WebBrowser); +window.customElements.define('web-browser', WebBrowser) async function showModalAndWait(type, data) { // Create a new Promise that resolves with user data and an action when the user clicks a button return new Promise((resolve) => { // Create the modal and add it to the DOM - const modal = document.createElement('div'); + const modal = document.createElement('div') modal.id = "backdrop" - modal.classList.add("backdrop"); + modal.classList.add("backdrop") modal.innerHTML = `
- `; - document.body.appendChild(modal); + ` + document.body.appendChild(modal) // Add click event listeners to the buttons - const okButton = modal.querySelector('#ok-button'); + const okButton = modal.querySelector('#ok-button') okButton.addEventListener('click', () => { - const userData = {}; + const userData = {} if (type === actions.PUBLISH_QDN_RESOURCE || type === actions.PUBLISH_MULTIPLE_QDN_RESOURCES) { - const isWithFeeCheckbox = modal.querySelector('#isWithFee'); - // userData.isWithFee = isWithFeeCheckbox.checked; + const isWithFeeCheckbox = modal.querySelector('#isWithFee') + // userData.isWithFee = isWithFeeCheckbox.checked userData.isWithFee = true } if (modal.parentNode === document.body) { - document.body.removeChild(modal); + document.body.removeChild(modal) } - resolve({ action: 'accept', userData }); - }); - const modalContent = modal.querySelector('.modal-content'); + resolve({ action: 'accept', userData }) + }) + const modalContent = modal.querySelector('.modal-content') modalContent.addEventListener('click', (e) => { - e.stopPropagation(); - return; - }); - const backdropClick = document.getElementById('backdrop'); + e.stopPropagation() + return + }) + const backdropClick = document.getElementById('backdrop') backdropClick.addEventListener('click', () => { if (modal.parentNode === document.body) { - document.body.removeChild(modal); + document.body.removeChild(modal) } - resolve({ action: 'reject' }); - }); - const cancelButton = modal.querySelector('#cancel-button'); + resolve({ action: 'reject' }) + }) + const cancelButton = modal.querySelector('#cancel-button') cancelButton.addEventListener('click', () => { if (modal.parentNode === document.body) { - document.body.removeChild(modal); + document.body.removeChild(modal) } - resolve({ action: 'reject' }); - }); - const labelButton = modal.querySelector('#authButtonLabel'); + resolve({ action: 'reject' }) + }) + const labelButton = modal.querySelector('#authButtonLabel') if (labelButton) { labelButton.addEventListener('click', () => { - this.shadowRoot.getElementById('authButton').click(); + this.shadowRoot.getElementById('authButton').click() }) } - const checkbox = modal.querySelector('#authButton'); + const checkbox = modal.querySelector('#authButton') if (checkbox) { checkbox.addEventListener('click', (e) => { if (e.target.checked) { @@ -3568,13 +3594,13 @@ async function showModalAndWait(type, data) { window.parent.reduxStore.dispatch(window.parent.reduxAction.allowQAPPAutoAuth(true)) }) } - const labelButton2 = modal.querySelector('#listsButtonLabel'); + const labelButton2 = modal.querySelector('#listsButtonLabel') if (labelButton2) { labelButton2.addEventListener('click', () => { - this.shadowRoot.getElementById('listsButton').click(); + this.shadowRoot.getElementById('listsButton').click() }) } - const checkbox2 = modal.querySelector('#listsButton'); + const checkbox2 = modal.querySelector('#listsButton') if (checkbox2) { checkbox2.addEventListener('click', (e) => { if (e.target.checked) { @@ -3584,15 +3610,15 @@ async function showModalAndWait(type, data) { window.parent.reduxStore.dispatch(window.parent.reduxAction.allowQAPPAutoLists(true)) }) } - }); + }) } async function showErrorAndWait(type, data, data1) { // Create the modal and add it to the DOM const modalDelay = ms => new Promise(res => setTimeout(res, ms)) - const error = document.createElement('div'); + const error = document.createElement('div') error.id = "backdrop" - error.classList.add("backdrop"); + error.classList.add("backdrop") error.innerHTML = ` - `; + ` document.body.appendChild(error) await modalDelay(3000) @@ -3830,9 +3856,9 @@ const styles = ` #cancel-button:hover { background-color: #d32f2f; } -`; +` -const styleSheet = new CSSStyleSheet(); -styleSheet.replaceSync(styles); +const styleSheet = new CSSStyleSheet() +styleSheet.replaceSync(styles) -document.adoptedStyleSheets = [styleSheet]; +document.adoptedStyleSheets = [styleSheet] diff --git a/plugins/plugins/core/qortal-lottery/qortal-lottery.src.js b/plugins/plugins/core/qortal-lottery/qortal-lottery.src.js index 7b762fed..67320c0e 100644 --- a/plugins/plugins/core/qortal-lottery/qortal-lottery.src.js +++ b/plugins/plugins/core/qortal-lottery/qortal-lottery.src.js @@ -619,6 +619,7 @@ class QortalLottery extends LitElement { this.successMessage = '' this.sendQortLoading = false this.lotteryAtAddress = dataObj.aTAddress + this.lotteryEnterAmount = dataObj.enter if (!isNaN(this.lotteryEnterAmount) && !isNaN(parseFloat(this.lotteryEnterAmount))) { this.lotteryEnterAmount = parseFloat(dataObj.enter) From 4b33c871e7f942ceda2147d5db03c3df4aa41b8d Mon Sep 17 00:00:00 2001 From: karl-dv <38753527+karl-dv@users.noreply.github.com> Date: Sat, 28 Oct 2023 09:49:23 +0200 Subject: [PATCH 06/26] Fix typo --- core/language/nl.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/language/nl.json b/core/language/nl.json index 2ac91434..500764bc 100644 --- a/core/language/nl.json +++ b/core/language/nl.json @@ -144,7 +144,7 @@ "lp8": "Fout: Onjuist wachtwoord", "lp9": "IS", "lp10": "VERGRENDELD", - "lp11": "ONTGRENDEL", + "lp11": "ONTGRENDELD", "lp12": "Ontcijfering van bewaarde data", "lp13": "Ontcijferingssleutel wordt gegenereerd", "lp14": "Sleutel wordt gecontroleerd", From 7976b68b1391910bd79d34c069c872f498904190 Mon Sep 17 00:00:00 2001 From: PhilReact Date: Sat, 28 Oct 2023 21:52:55 +0300 Subject: [PATCH 07/26] change placement and logic of refresh wallet --- plugins/plugins/core/wallet/wallet-app.src.js | 38 +++++++++++++++++-- 1 file changed, 35 insertions(+), 3 deletions(-) diff --git a/plugins/plugins/core/wallet/wallet-app.src.js b/plugins/plugins/core/wallet/wallet-app.src.js index 2e4dce96..eb66288e 100644 --- a/plugins/plugins/core/wallet/wallet-app.src.js +++ b/plugins/plugins/core/wallet/wallet-app.src.js @@ -884,6 +884,36 @@ class MultiWallet extends LitElement { this.pingCoinBalancesController = this.pingCoinBalancesController.bind(this) } + refreshWallet(){ + const coin = this._selectedWallet + switch (coin) { + case 'qort': + this.tabWalletQort(); + break + case 'arrr': + this.tabWalletArrr(); + break + case 'btc': + this.tabWalletBtc(); + break; + case 'ltc': + this.tabWalletLtc(); + break; + case 'doge': + this.tabWalletDoge(); + break + case 'dgb': + this.tabWalletDgb() + break; + case 'rvn': + this.tabWalletRvn(); + break + default: + break + } + + } + render() { return html`
@@ -921,7 +951,11 @@ class MultiWallet extends LitElement {

+
${translate("walletpage.wchange2")} + + +
${this.getSelectedWalletAddress()}
-
- this.fetchWalletDetails(this._selectedWallet)}> ${translate("walletpage.wchange60")} -
+ ${this.loading ? html`` : ''}
From 2d0742912e4b713d5ae990f6250798fd54864565 Mon Sep 17 00:00:00 2001 From: PhilReact Date: Sat, 28 Oct 2023 22:05:07 +0300 Subject: [PATCH 08/26] metadata false --- core/src/components/notification-view/notification-bell.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/components/notification-view/notification-bell.js b/core/src/components/notification-view/notification-bell.js index af7e4ec1..72d8a1d9 100644 --- a/core/src/components/notification-view/notification-bell.js +++ b/core/src/components/notification-view/notification-bell.js @@ -61,7 +61,7 @@ class NotificationBell extends connect(store)(LitElement) { 0, 20 )}_${recipientAddress.slice(-6)}_mail_` - const url = `${nodeUrl}/arbitrary/resources/search?service=MAIL_PRIVATE&query=${query}&limit=10&includemetadata=true&offset=0&reverse=true&excludeblocked=true` + const url = `${nodeUrl}/arbitrary/resources/search?service=MAIL_PRIVATE&query=${query}&limit=10&includemetadata=false&offset=0&reverse=true&excludeblocked=true` const response = await fetch(url, { method: 'GET', headers: { From f28538c74ea183a81a4c71d46ee28a36ea9a03a2 Mon Sep 17 00:00:00 2001 From: AlphaX-Projects <77661270+AlphaX-Projects@users.noreply.github.com> Date: Sun, 29 Oct 2023 09:12:26 +0100 Subject: [PATCH 09/26] New deb server key --- scripts/add-debian-apt-repo.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/add-debian-apt-repo.sh b/scripts/add-debian-apt-repo.sh index db7f4883..0ee360fb 100644 --- a/scripts/add-debian-apt-repo.sh +++ b/scripts/add-debian-apt-repo.sh @@ -23,7 +23,7 @@ if ! which curl; then sudo apt-get --yes install curl; fi if ! grep ^ /etc/apt/sources.list /etc/apt/sources.list.d/* | grep qortal.list; then curl -sS https://update.qortal.online/qortal.gpg | sudo apt-key add - sudo rm -rf /usr/share/keyrings/qortal.gpg - sudo apt-key export 856A3FF1 | sudo gpg --dearmour -o /usr/share/keyrings/qortal.gpg + sudo apt-key export A9036F04 | sudo gpg --dearmour -o /usr/share/keyrings/qortal.gpg sudo rm -rf /etc/apt/sources.list.d/qortal.list echo 'deb [arch=amd64,arm64 signed-by=/usr/share/keyrings/qortal.gpg] https://update.qortal.online/ ./ ' > /etc/apt/sources.list.d/qortal.list fi From bcef0aae615c1c118c2acbf53461181e6056262e Mon Sep 17 00:00:00 2001 From: AlphaX-Projects <77661270+AlphaX-Projects@users.noreply.github.com> Date: Sun, 29 Oct 2023 12:07:26 +0100 Subject: [PATCH 10/26] Variable grid layout --- .../core/qortal-lottery/qortal-lottery.src.js | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/plugins/plugins/core/qortal-lottery/qortal-lottery.src.js b/plugins/plugins/core/qortal-lottery/qortal-lottery.src.js index 67320c0e..2f6adc1e 100644 --- a/plugins/plugins/core/qortal-lottery/qortal-lottery.src.js +++ b/plugins/plugins/core/qortal-lottery/qortal-lottery.src.js @@ -275,13 +275,13 @@ class QortalLottery extends LitElement {
${translate("login.loading")}

- + - - - - - { + + + + + { render(html`${this.renderPlayButton(data.item)}`, root) }}> @@ -297,15 +297,15 @@ class QortalLottery extends LitElement {
${translate("login.loading")}
- + - - - { + + + { render(html`${data.item.jackpot} QORT`, root) }}> - - { + + { render(html`check`, root) }}> From 74871a81ef8f0ef75de987f6da07e664af2b0190 Mon Sep 17 00:00:00 2001 From: QuickMythril Date: Sun, 29 Oct 2023 15:35:23 -0400 Subject: [PATCH 11/26] Add qortalRequest for altcoin wallets --- core/language/us.json | 3 +- .../core/components/qdn-action-types.js | 3 + .../plugins/core/qdn/browser/browser.src.js | 64 +++++++++++++++++++ 3 files changed, 69 insertions(+), 1 deletion(-) diff --git a/core/language/us.json b/core/language/us.json index c4b49e0b..c3d8cccb 100644 --- a/core/language/us.json +++ b/core/language/us.json @@ -729,7 +729,8 @@ "bchange45": "Encrypt", "bchange46": "Do you give this application permission to save the following file", "bchange47": "Instant publish - requires", - "bchange48": "Do you give this application permission to send you notifications" + "bchange48": "Do you give this application permission to send you notifications", + "bchange49": "Do you give this application permission to get your wallet information?" }, "datapage": { "dchange1": "Data Management", diff --git a/plugins/plugins/core/components/qdn-action-types.js b/plugins/plugins/core/components/qdn-action-types.js index dd354da0..271bb05c 100644 --- a/plugins/plugins/core/components/qdn-action-types.js +++ b/plugins/plugins/core/components/qdn-action-types.js @@ -19,6 +19,9 @@ export const JOIN_GROUP = 'JOIN_GROUP'; // DEPLOY_AT action export const DEPLOY_AT = 'DEPLOY_AT'; +// GET_USER_WALLET action +export const GET_USER_WALLET = 'GET_USER_WALLET'; + // GET_WALLET_BALANCE action export const GET_WALLET_BALANCE = 'GET_WALLET_BALANCE'; diff --git a/plugins/plugins/core/qdn/browser/browser.src.js b/plugins/plugins/core/qdn/browser/browser.src.js index 50da5978..d2aa7260 100644 --- a/plugins/plugins/core/qdn/browser/browser.src.js +++ b/plugins/plugins/core/qdn/browser/browser.src.js @@ -2059,6 +2059,70 @@ class WebBrowser extends LitElement { break } + case actions.GET_USER_WALLET: { + const requiredFields = ['coin']; + const missingFields = []; + + requiredFields.forEach((field) => { + if (!data[field]) { + missingFields.push(field); + } + }); + + if (missingFields.length > 0) { + const missingFieldsString = missingFields.join(', '); + const errorMsg = `Missing fields: ${missingFieldsString}` + let data = {}; + data['error'] = errorMsg; + response = JSON.stringify(data); + break + } + const res3 = await showModalAndWait( + actions.GET_USER_WALLET + ); + + if (res3.action === 'accept') { + let coin = data.coin; + let userWallet = {}; + + switch (coin) { + case 'QORT': + userWallet['address'] = window.parent.reduxStore.getState().app.selectedAddress.address + userWallet['publickey'] = window.parent.reduxStore.getState().app.selectedAddress.base58PublicKey + break + case 'BTC': + userWallet['address'] = window.parent.reduxStore.getState().app.selectedAddress.btcWallet.address + userWallet['publickey'] = window.parent.reduxStore.getState().app.selectedAddress.btcWallet.derivedMasterPublicKey + break + case 'LTC': + userWallet['address'] = window.parent.reduxStore.getState().app.selectedAddress.ltcWallet.address + userWallet['publickey'] = window.parent.reduxStore.getState().app.selectedAddress.ltcWallet.derivedMasterPublicKey + break + case 'DOGE': + userWallet['address'] = window.parent.reduxStore.getState().app.selectedAddress.dogeWallet.address + userWallet['publickey'] = window.parent.reduxStore.getState().app.selectedAddress.dogeWallet.derivedMasterPublicKey + break + case 'DGB': + userWallet['address'] = window.parent.reduxStore.getState().app.selectedAddress.dgbWallet.address + userWallet['publickey'] = window.parent.reduxStore.getState().app.selectedAddress.dgbWallet.derivedMasterPublicKey + break + case 'RVN': + userWallet['address'] = window.parent.reduxStore.getState().app.selectedAddress.rvnWallet.address + userWallet['publickey'] = window.parent.reduxStore.getState().app.selectedAddress.rvnWallet.derivedMasterPublicKey + break + case 'ARRR': + break + default: + break + } + response = JSON.stringify(userWallet); + break; + } else if (res3.action === 'reject') { + response = '{"error": "User declined request"}'; + } + break; + } + case actions.GET_WALLET_BALANCE: { const requiredFields = ['coin'] const missingFields = [] From 11781d93fd2548eeb6656de658f29042105f3b57 Mon Sep 17 00:00:00 2001 From: QuickMythril Date: Sun, 29 Oct 2023 15:56:46 -0400 Subject: [PATCH 12/26] Add modal for GET_USER_WALLET --- plugins/plugins/core/qdn/browser/browser.src.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/plugins/plugins/core/qdn/browser/browser.src.js b/plugins/plugins/core/qdn/browser/browser.src.js index d2aa7260..9a9dce18 100644 --- a/plugins/plugins/core/qdn/browser/browser.src.js +++ b/plugins/plugins/core/qdn/browser/browser.src.js @@ -3554,6 +3554,11 @@ async function showModalAndWait(type, data) { ` : ''} + ${type === actions.GET_USER_WALLET ? ` + + ` : ''} ${type === actions.GET_WALLET_BALANCE ? ` @@ -499,8 +496,8 @@ class ShowPlugin extends connect(store)(LitElement) { `)} - { this.shadowRoot.getElementById('domainInput').value = '' this.shadowRoot.getElementById('portInput').value = '' @@ -531,7 +528,7 @@ class ShowPlugin extends connect(store)(LitElement) { > ${translate('tabmenu.tm40')} - + ` } @@ -1018,22 +1015,22 @@ class NavBar extends connect(store)(LitElement) { --mdc-icon-size: 64px; cursor: pointer; } - + .menuIconPos { right: -2px; } - + .removeIconPos { position: absolute; top: -10px; right: -10px; z-index: 1; } - + .menuIconPos:hover .removeIcon { display: inline; } - + .removeIcon { display: none; color: var(--black); @@ -1042,7 +1039,7 @@ class NavBar extends connect(store)(LitElement) { position: relative; z-index: 1; } - + .removeIcon:hover { color: #C6011F; font-weight: bold; @@ -1479,7 +1476,7 @@ class NavBar extends connect(store)(LitElement) { const addressInfo = this.addressInfo const isMinter = addressInfo?.error !== 124 && +addressInfo?.level > 0 const isSponsor = +addressInfo?.level >= 5 - + if (!isMinter) { this.newMenuList = this.myMenuPlugins.filter((minter) => { @@ -1498,7 +1495,7 @@ class NavBar extends connect(store)(LitElement) { } else { this.myMenuList = this.newMenuList } - + this.requestUpdate() } @@ -2208,7 +2205,7 @@ class NavBar extends connect(store)(LitElement) { renderRemoveIcon(appurl, appicon, appname, appid, appplugin) { return html` - +
${this.errorMsg || this.status === 5 ? html` @@ -520,8 +520,8 @@ const nonce = selectedAddress && selectedAddress.nonce;
- - ` : ""} + + ` : ""} ` : ''} `; } diff --git a/core/src/components/theme-toggle.js b/core/src/components/theme-toggle.js index d2af6e82..6a2dcc48 100644 --- a/core/src/components/theme-toggle.js +++ b/core/src/components/theme-toggle.js @@ -1,5 +1,5 @@ -import { LitElement, html, css } from 'lit' -import { get, translate, translateUnsafeHTML } from 'lit-translate' +import {css, html, LitElement} from 'lit' +import {translate} from 'lit-translate' import '@polymer/paper-icon-button/paper-icon-button.js' import '@polymer/iron-icons/image-icons.js' import '@polymer/iron-icons/iron-icons.js' diff --git a/core/src/components/user-info-view/user-info-view.js b/core/src/components/user-info-view/user-info-view.js index f9ae8d83..e63af00b 100644 --- a/core/src/components/user-info-view/user-info-view.js +++ b/core/src/components/user-info-view/user-info-view.js @@ -1,8 +1,8 @@ -import { LitElement, html, css } from 'lit' -import { render } from 'lit/html.js' -import { connect } from 'pwa-helpers' -import { store } from '../../store.js' -import { get, translate, translateUnsafeHTML } from 'lit-translate' +import {css, html, LitElement} from 'lit' +import {render} from 'lit/html.js' +import {connect} from 'pwa-helpers' +import {store} from '../../store.js' +import {get, translate} from 'lit-translate' import '@polymer/paper-dialog/paper-dialog.js' import '@material/mwc-button' @@ -354,7 +354,7 @@ class UserInfoView extends connect(store)(LitElement) { .border-wrapper { border: 1px var(--tradeborder) solid; - overflow: hidden; + overflow: hidden; } @@ -1531,7 +1531,7 @@ class UserInfoView extends connect(store)(LitElement) { creatorAddress: item.creatorAddress, recipient: item.recipient, amount: item.amount - + } } }).filter(item => !!item) @@ -1548,7 +1548,7 @@ class UserInfoView extends connect(store)(LitElement) { creatorAddress: item.creatorAddress, recipient: item.recipient, amount: item.amount - + } } }).filter(item => !!item) @@ -1594,7 +1594,7 @@ class UserInfoView extends connect(store)(LitElement) { return { timestamp: item.tradeTimestamp, foreignAmount: item.foreignAmount, - qortAmount: item.qortAmount + qortAmount: item.qortAmount } } }).filter(item => !!item) @@ -1616,7 +1616,7 @@ class UserInfoView extends connect(store)(LitElement) { return { timestamp: item.tradeTimestamp, foreignAmount: item.foreignAmount, - qortAmount: item.qortAmount + qortAmount: item.qortAmount } } }).filter(item => !!item) @@ -1638,7 +1638,7 @@ class UserInfoView extends connect(store)(LitElement) { return { timestamp: item.tradeTimestamp, foreignAmount: item.foreignAmount, - qortAmount: item.qortAmount + qortAmount: item.qortAmount } } }).filter(item => !!item) @@ -1660,7 +1660,7 @@ class UserInfoView extends connect(store)(LitElement) { return { timestamp: item.tradeTimestamp, foreignAmount: item.foreignAmount, - qortAmount: item.qortAmount + qortAmount: item.qortAmount } } }).filter(item => !!item) @@ -1682,7 +1682,7 @@ class UserInfoView extends connect(store)(LitElement) { return { timestamp: item.tradeTimestamp, foreignAmount: item.foreignAmount, - qortAmount: item.qortAmount + qortAmount: item.qortAmount } } }).filter(item => !!item) @@ -1704,7 +1704,7 @@ class UserInfoView extends connect(store)(LitElement) { return { timestamp: item.tradeTimestamp, foreignAmount: item.foreignAmount, - qortAmount: item.qortAmount + qortAmount: item.qortAmount } } }).filter(item => !!item) @@ -1726,7 +1726,7 @@ class UserInfoView extends connect(store)(LitElement) { return { timestamp: item.tradeTimestamp, foreignAmount: item.foreignAmount, - qortAmount: item.qortAmount + qortAmount: item.qortAmount } } }).filter(item => !!item) @@ -1748,7 +1748,7 @@ class UserInfoView extends connect(store)(LitElement) { return { timestamp: item.tradeTimestamp, foreignAmount: item.foreignAmount, - qortAmount: item.qortAmount + qortAmount: item.qortAmount } } }).filter(item => !!item) @@ -1770,7 +1770,7 @@ class UserInfoView extends connect(store)(LitElement) { return { timestamp: item.tradeTimestamp, foreignAmount: item.foreignAmount, - qortAmount: item.qortAmount + qortAmount: item.qortAmount } } }).filter(item => !!item) @@ -1792,7 +1792,7 @@ class UserInfoView extends connect(store)(LitElement) { return { timestamp: item.tradeTimestamp, foreignAmount: item.foreignAmount, - qortAmount: item.qortAmount + qortAmount: item.qortAmount } } }).filter(item => !!item) @@ -1814,7 +1814,7 @@ class UserInfoView extends connect(store)(LitElement) { return { timestamp: item.tradeTimestamp, foreignAmount: item.foreignAmount, - qortAmount: item.qortAmount + qortAmount: item.qortAmount } } }).filter(item => !!item) @@ -1836,7 +1836,7 @@ class UserInfoView extends connect(store)(LitElement) { return { timestamp: item.tradeTimestamp, foreignAmount: item.foreignAmount, - qortAmount: item.qortAmount + qortAmount: item.qortAmount } } }).filter(item => !!item) diff --git a/core/src/components/wallet-profile.js b/core/src/components/wallet-profile.js index 07990d7b..1eca986a 100644 --- a/core/src/components/wallet-profile.js +++ b/core/src/components/wallet-profile.js @@ -1,7 +1,7 @@ -import { LitElement, html, css } from 'lit' -import { connect } from 'pwa-helpers' -import { store } from '../store.js' -import { translate, translateUnsafeHTML } from 'lit-translate' +import {css, html, LitElement} from 'lit' +import {connect} from 'pwa-helpers' +import {store} from '../store.js' +import {translate} from 'lit-translate' import '@polymer/paper-toast' import '@material/mwc-icon-button' diff --git a/core/src/custom-elements/frag-file-input.js b/core/src/custom-elements/frag-file-input.js index e35c4dc0..e7c57764 100644 --- a/core/src/custom-elements/frag-file-input.js +++ b/core/src/custom-elements/frag-file-input.js @@ -1,9 +1,9 @@ -import { LitElement, html, css } from 'lit' +import {css, html, LitElement} from 'lit' import '@material/mwc-button' import '@material/mwc-icon' -import { translate, translateUnsafeHTML } from 'lit-translate' +import {translate} from 'lit-translate' class FragFileInput extends LitElement { static get properties () { diff --git a/core/src/epml.js b/core/src/epml.js index 0a0489a5..41892ab8 100644 --- a/core/src/epml.js +++ b/core/src/epml.js @@ -1,4 +1,12 @@ -import { Epml, EpmlReadyPlugin, RequestPlugin, ContentWindow as EpmlContentWindowPlugin, EpmlStreamPlugin, EpmlProxyPlugin, EpmlStream } from 'epml' +import { + ContentWindow as EpmlContentWindowPlugin, + Epml, + EpmlProxyPlugin, + EpmlReadyPlugin, + EpmlStream, + EpmlStreamPlugin, + RequestPlugin +} from 'epml' Epml.registerPlugin(RequestPlugin) Epml.registerPlugin(EpmlReadyPlugin) diff --git a/core/src/functional-components/confirm-transaction-dialog.js b/core/src/functional-components/confirm-transaction-dialog.js index 55e152a0..35909ea1 100644 --- a/core/src/functional-components/confirm-transaction-dialog.js +++ b/core/src/functional-components/confirm-transaction-dialog.js @@ -1,9 +1,9 @@ -import { LitElement, html, css } from 'lit' -import { connect } from 'pwa-helpers' -import { store } from '../store.js' -import { get, translate, translateUnsafeHTML } from 'lit-translate' +import {css, html, LitElement} from 'lit' +import {connect} from 'pwa-helpers' +import {store} from '../store.js' +import {get, translate} from 'lit-translate' -import { listenForRequest } from '../transactionRequest.js' +import {listenForRequest} from '../transactionRequest.js' import '@polymer/paper-dialog/paper-dialog.js' import '@material/mwc-button' diff --git a/core/src/functional-components/loading-ripple.js b/core/src/functional-components/loading-ripple.js index 4f16b2f9..9fc14f13 100644 --- a/core/src/functional-components/loading-ripple.js +++ b/core/src/functional-components/loading-ripple.js @@ -1,4 +1,4 @@ -import { LitElement, html, css } from 'lit' +import {css, html, LitElement} from 'lit' const TRANSITION_EVENT_NAMES = ['transitionend', 'webkitTransitionEnd', 'oTransitionEnd', 'MSTransitionEnd'] @@ -99,7 +99,7 @@ class LoadingRipple extends LitElement { opacity: 1; transition: var(--ripple-activating-transition); } - + ` } diff --git a/core/src/functional-components/my-button.js b/core/src/functional-components/my-button.js index 1d86b6c1..f6fe6eb8 100644 --- a/core/src/functional-components/my-button.js +++ b/core/src/functional-components/my-button.js @@ -1,4 +1,4 @@ -import { LitElement, html, css } from 'lit'; +import {css, html, LitElement} from 'lit'; import '@vaadin/button'; import '@polymer/paper-spinner/paper-spinner-lite.js'; diff --git a/core/src/functional-components/mykey-page.js b/core/src/functional-components/mykey-page.js index 51c903cc..fa159043 100644 --- a/core/src/functional-components/mykey-page.js +++ b/core/src/functional-components/mykey-page.js @@ -1,8 +1,8 @@ -import { LitElement, html, css } from 'lit' -import { connect } from 'pwa-helpers' -import { store } from '../store.js' -import { testApiKey } from '../apiKeyUtils.js' -import { get, translate, translateUnsafeHTML } from 'lit-translate' +import {css, html, LitElement} from 'lit' +import {connect} from 'pwa-helpers' +import {store} from '../store.js' +import {testApiKey} from '../apiKeyUtils.js' +import {get, translate} from 'lit-translate' import '@material/mwc-dialog' import '@material/mwc-button' diff --git a/core/src/functional-components/random-sentence-generator.js b/core/src/functional-components/random-sentence-generator.js index b9482fb5..9f27ea08 100644 --- a/core/src/functional-components/random-sentence-generator.js +++ b/core/src/functional-components/random-sentence-generator.js @@ -1,7 +1,7 @@ // Author: irontiga 'use strict' -import { LitElement, html, css } from 'lit' +import {html, LitElement} from 'lit' import * as WORDLISTS from './wordlists.js' class RandomSentenceGenerator extends LitElement { diff --git a/core/src/functional-components/settings-page.js b/core/src/functional-components/settings-page.js index c96e36e0..2aaad8c7 100644 --- a/core/src/functional-components/settings-page.js +++ b/core/src/functional-components/settings-page.js @@ -1,8 +1,8 @@ -import { LitElement, html, css } from 'lit' -import { connect } from 'pwa-helpers' -import { store } from '../store.js' -import { doAddNode, doSetNode, doLoadNodeConfig, doRemoveNode, doEditNode } from '../redux/app/app-actions.js' -import { use, get, translate, translateUnsafeHTML, registerTranslateConfig } from 'lit-translate' +import {css, html, LitElement} from 'lit' +import {connect} from 'pwa-helpers' +import {store} from '../store.js' +import {doAddNode, doEditNode, doLoadNodeConfig, doRemoveNode, doSetNode} from '../redux/app/app-actions.js' +import {get, registerTranslateConfig, translate, use} from 'lit-translate' import snackbar from './snackbar.js' import '../components/language-selector.js' import '../custom-elements/frag-file-input.js' diff --git a/core/src/functional-components/side-menu-item-style.js b/core/src/functional-components/side-menu-item-style.js index e30386ce..a9711b12 100644 --- a/core/src/functional-components/side-menu-item-style.js +++ b/core/src/functional-components/side-menu-item-style.js @@ -1,4 +1,4 @@ -import { css } from 'lit' +import {css} from 'lit' export const sideMenuItemStyle = css` :host { @@ -21,7 +21,7 @@ export const sideMenuItemStyle = css` --overlay-box-shadow: 0 2px 4px -1px hsla(214, 53%, 23%, 0.16), 0 3px 12px -1px hsla(214, 50%, 22%, 0.26); --overlay-background-color: #ffffff; - + --spacing: 4px; font-family: var(--font-family); @@ -86,7 +86,7 @@ export const sideMenuItemStyle = css` :host([expanded]){ background-color: var(--item-selected-color); } - + :host([hasSelectedChild]){ background-color: var(--item-selected-color); } @@ -109,7 +109,7 @@ export const sideMenuItemStyle = css` } #collapse-button { - float: right; + float: right; } :host([compact]) #itemLink[level]:not([level="0"]) { @@ -143,7 +143,7 @@ export const sideMenuItemStyle = css` z-index: 1; animation: pop 200ms forwards; } - + @keyframes pop{ 0% { transform: translateX(-5px); diff --git a/core/src/functional-components/side-menu-item.js b/core/src/functional-components/side-menu-item.js index ad0ac02e..a24fffb6 100644 --- a/core/src/functional-components/side-menu-item.js +++ b/core/src/functional-components/side-menu-item.js @@ -1,6 +1,6 @@ -import { LitElement, html, css } from 'lit' -import { ifDefined } from 'lit/directives/if-defined.js' -import { sideMenuItemStyle } from './side-menu-item-style.js' +import {css, html, LitElement} from 'lit' +import {ifDefined} from 'lit/directives/if-defined.js' +import {sideMenuItemStyle} from './side-menu-item-style.js' import '@vaadin/icon' import '@vaadin/icons' import '@polymer/paper-tooltip' @@ -50,8 +50,8 @@ export class SideMenuItem extends LitElement { _itemLinkTemplate() { return html` - CryptoJS.AES.encrypt(JSON.stringify(data), salt).toString() + +export const encryptData = (data, salt) => CryptoJS.AES.encrypt(JSON.stringify(data), salt).toString() export const decryptData = (ciphertext, salt) => { const bytes = CryptoJS.AES.decrypt(ciphertext, salt) try { @@ -8,4 +8,4 @@ export const decryptData = (ciphertext, salt) => { } catch(err) { return null } -} \ No newline at end of file +} diff --git a/core/src/notifications/controller.js b/core/src/notifications/controller.js index 20d4994d..1934fb42 100644 --- a/core/src/notifications/controller.js +++ b/core/src/notifications/controller.js @@ -1,7 +1,7 @@ import config from './config' -import { dispatcher } from './dispatcher' +import {dispatcher} from './dispatcher' import snackbar from '../functional-components/snackbar.js' -import { NEW_MESSAGE, NEW_MESSAGE_NOTIFICATION_QAPP, NEW_MESSAGE_NOTIFICATION_QAPP_LOCAL } from './types' +import {NEW_MESSAGE, NEW_MESSAGE_NOTIFICATION_QAPP, NEW_MESSAGE_NOTIFICATION_QAPP_LOCAL} from './types' let initial = 0 let _state @@ -44,7 +44,7 @@ const notificationCheck = function () { export const doNewMessage = function (req) { const newMessage = () => { - + let data if (req.type && req.type === 'qapp') { data = req @@ -73,7 +73,7 @@ export const doNewMessage = function (req) { } else { _state = notificationState } - } + } const page = window.top.location.href if(req.type && req.type === 'qapp-local-notification'){ try { diff --git a/core/src/notifications/dispatcher.js b/core/src/notifications/dispatcher.js index b0c7713e..e31e6d84 100644 --- a/core/src/notifications/dispatcher.js +++ b/core/src/notifications/dispatcher.js @@ -1,5 +1,5 @@ -import { NEW_MESSAGE, NEW_MESSAGE_NOTIFICATION_QAPP, NEW_MESSAGE_NOTIFICATION_QAPP_LOCAL } from './types' -import { newMessage, newMessageNotificationQapp, newMessageNotificationQappLocal } from './notification-actions' +import {NEW_MESSAGE, NEW_MESSAGE_NOTIFICATION_QAPP, NEW_MESSAGE_NOTIFICATION_QAPP_LOCAL} from './types' +import {newMessage, newMessageNotificationQapp, newMessageNotificationQappLocal} from './notification-actions' export const dispatcher = function (notificationState) { diff --git a/core/src/notifications/notification-actions/new-message.js b/core/src/notifications/notification-actions/new-message.js index b3a50b37..b25902f6 100644 --- a/core/src/notifications/notification-actions/new-message.js +++ b/core/src/notifications/notification-actions/new-message.js @@ -1,5 +1,5 @@ -import { store } from '../../store.js' -import { doPageUrl, setNewTab } from '../../redux/app/app-actions.js' +import {store} from '../../store.js' +import {doPageUrl, setNewTab} from '../../redux/app/app-actions.js' import isElectron from 'is-electron' import ShortUniqueId from 'short-unique-id'; diff --git a/core/src/persistState.js b/core/src/persistState.js index d0195d12..277634a0 100644 --- a/core/src/persistState.js +++ b/core/src/persistState.js @@ -1,5 +1,5 @@ -import { store } from './store.js' -import { saveStateToLocalStorage } from './localStorageHelpers.js' +import {store} from './store.js' +import {saveStateToLocalStorage} from './localStorageHelpers.js' const keys = [ 'config', diff --git a/core/src/plugins/addPluginRoutes.js b/core/src/plugins/addPluginRoutes.js index 59796749..e840dd74 100644 --- a/core/src/plugins/addPluginRoutes.js +++ b/core/src/plugins/addPluginRoutes.js @@ -1,4 +1,4 @@ -import { routes } from './routes.js' +import {routes} from './routes.js' export const addPluginRoutes = epmlInstance => { Object.entries(routes).forEach(([route, handler]) => { diff --git a/core/src/plugins/load-plugins.js b/core/src/plugins/load-plugins.js index 693e255e..63b72729 100644 --- a/core/src/plugins/load-plugins.js +++ b/core/src/plugins/load-plugins.js @@ -1,7 +1,7 @@ -import { store } from '../store.js' -import { Epml } from '../epml.js' -import { addPluginRoutes } from './addPluginRoutes' -import { doAddPlugin } from '../redux/app/app-actions.js' +import {store} from '../store.js' +import {Epml} from '../epml.js' +import {addPluginRoutes} from './addPluginRoutes' +import {doAddPlugin} from '../redux/app/app-actions.js' let retryLoadPluginsInterval = 0 export const loadPlugins = () => fetch('/getPlugins') diff --git a/core/src/plugins/plugin-mainjs-loader.js b/core/src/plugins/plugin-mainjs-loader.js index c185a97b..86ec8917 100644 --- a/core/src/plugins/plugin-mainjs-loader.js +++ b/core/src/plugins/plugin-mainjs-loader.js @@ -1,5 +1,5 @@ 'use strict' -import { Epml, EpmlStream } from '../epml.js' +import {Epml, EpmlStream} from '../epml.js' window.Epml = Epml window.EpmlStream = EpmlStream diff --git a/core/src/plugins/routes.js b/core/src/plugins/routes.js index 62358413..01f33410 100644 --- a/core/src/plugins/routes.js +++ b/core/src/plugins/routes.js @@ -1,22 +1,19 @@ -import { store } from '../store.js' +import {store} from '../store.js' import { doAddPluginUrl, - doUpdateBlockInfo, - doUpdateNodeStatus, - doUpdateNodeInfo, - doSetNode, doPageUrl, doSetChatHeads, + doSetNode, doUpdateAccountInfo, + doUpdateBlockInfo, + doUpdateNodeInfo, + doUpdateNodeStatus, } from '../redux/app/app-actions.js' import * as api from 'qortal-ui-crypto' -import { requestTransactionDialog } from '../functional-components/confirm-transaction-dialog.js' -import { doNewMessage } from '../notifications/controller.js' +import {requestTransactionDialog} from '../functional-components/confirm-transaction-dialog.js' +import {doNewMessage} from '../notifications/controller.js' import snackbar from '../functional-components/snackbar.js' -import { - loadStateFromLocalStorage, - saveStateToLocalStorage, -} from '../localStorageHelpers.js' +import {loadStateFromLocalStorage, saveStateToLocalStorage,} from '../localStorageHelpers.js' const createTransaction = api.createTransaction const processTransaction = api.processTransaction @@ -128,13 +125,13 @@ export const routes = { if(!req.data.apiVersion){ res = await processTransaction(tx.signedBytes) } - + let extraData = {} if(req.data.type === 38 && tx && tx._rewardShareKeyPair && tx._rewardShareKeyPair.secretKey){ extraData.rewardSharePrivateKey = Base58.encode(tx._rewardShareKeyPair.secretKey) } - - + + response = { success: true, data: res, @@ -182,8 +179,8 @@ export const routes = { if(!req.data.apiVersion){ res = await processTransaction(tx.signedBytes) } - - + + response = { success: true, data: res, @@ -234,7 +231,7 @@ export const routes = { req.data.chatNonce, store.getState().app.wallet._addresses[req.data.nonce].keyPair ) - + let res if(req.data.apiVersion && req.data.apiVersion === 2){ @@ -243,7 +240,7 @@ export const routes = { if(!req.data.apiVersion){ res = await processTransaction(signedChatBytes) } - + response = res } catch (e) { console.error(e) @@ -270,7 +267,7 @@ export const routes = { if(!req.data.apiVersion){ res = await processTransaction(signedArbitraryBytes) } - + response = res } catch (e) { console.error(e) @@ -296,7 +293,7 @@ export const routes = { if(!req.data.apiVersion){ res = await processTransaction(signedArbitraryBytes) } - + response = res } catch (e) { console.error(e) @@ -366,7 +363,7 @@ export const routes = { unsignedTxn, store.getState().app.selectedAddress.keyPair ) - + let res if(req.data.apiVersion && req.data.apiVersion === 2){ diff --git a/core/src/plugins/streams.js b/core/src/plugins/streams.js index aae100e1..aafac880 100644 --- a/core/src/plugins/streams.js +++ b/core/src/plugins/streams.js @@ -1,5 +1,5 @@ -import { store } from '../store.js' -import { EpmlStream } from 'epml' +import {store} from '../store.js' +import {EpmlStream} from 'epml' const LOGIN_STREAM_NAME = 'logged_in' const CONFIG_STREAM_NAME = 'config' diff --git a/core/src/redux/app/actions/app-core.js b/core/src/redux/app/actions/app-core.js index 53e9d547..77f99a87 100644 --- a/core/src/redux/app/actions/app-core.js +++ b/core/src/redux/app/actions/app-core.js @@ -1,5 +1,26 @@ // Core App Actions here... -import { UPDATE_BLOCK_INFO, UPDATE_NODE_STATUS, UPDATE_NODE_INFO, CHAT_HEADS, ACCOUNT_INFO, ADD_AUTO_LOAD_IMAGES_CHAT, REMOVE_AUTO_LOAD_IMAGES_CHAT, ALLOW_QAPP_AUTO_AUTH, REMOVE_QAPP_AUTO_AUTH, SET_CHAT_LAST_SEEN, ADD_CHAT_LAST_SEEN, ALLOW_QAPP_AUTO_LISTS, REMOVE_QAPP_AUTO_LISTS, SET_NEW_TAB, ADD_TAB_INFO, SET_TAB_NOTIFICATIONS, IS_OPEN_DEV_DIALOG, SET_NEW_NOTIFICATION, SET_SIDE_EFFECT, SET_COIN_BALANCES } from '../app-action-types.js' +import { + ACCOUNT_INFO, + ADD_AUTO_LOAD_IMAGES_CHAT, + ADD_CHAT_LAST_SEEN, + ADD_TAB_INFO, + ALLOW_QAPP_AUTO_AUTH, + ALLOW_QAPP_AUTO_LISTS, + CHAT_HEADS, + IS_OPEN_DEV_DIALOG, + REMOVE_AUTO_LOAD_IMAGES_CHAT, + REMOVE_QAPP_AUTO_AUTH, + REMOVE_QAPP_AUTO_LISTS, + SET_CHAT_LAST_SEEN, + SET_COIN_BALANCES, + SET_NEW_NOTIFICATION, + SET_NEW_TAB, + SET_SIDE_EFFECT, + SET_TAB_NOTIFICATIONS, + UPDATE_BLOCK_INFO, + UPDATE_NODE_INFO, + UPDATE_NODE_STATUS +} from '../app-action-types.js' export const doUpdateBlockInfo = (blockObj) => { return (dispatch, getState) => { @@ -164,4 +185,4 @@ export const setCoinBalances = (payload)=> { type: SET_COIN_BALANCES, payload } -} \ No newline at end of file +} diff --git a/core/src/redux/app/actions/init-worker.js b/core/src/redux/app/actions/init-worker.js index ce77b25e..3bdff3ee 100644 --- a/core/src/redux/app/actions/init-worker.js +++ b/core/src/redux/app/actions/init-worker.js @@ -1,7 +1,8 @@ -import { Epml } from '../../../epml.js' -import { EpmlWorkerPlugin } from 'epml' +import {Epml} from '../../../epml.js' +import {EpmlWorkerPlugin} from 'epml' + +import {INIT_WORKERS} from '../app-action-types.js' -import { INIT_WORKERS } from '../app-action-types.js' Epml.registerPlugin(EpmlWorkerPlugin) export const doInitWorkers = (numberOfWorkers, workerURL) => { diff --git a/core/src/redux/app/actions/login.js b/core/src/redux/app/actions/login.js index 02ce7e52..0bb8b092 100644 --- a/core/src/redux/app/actions/login.js +++ b/core/src/redux/app/actions/login.js @@ -1,4 +1,4 @@ -import { LOG_IN, LOG_OUT, SELECT_ADDRESS } from '../app-action-types.js' +import {LOG_IN, LOG_OUT, SELECT_ADDRESS} from '../app-action-types.js' export const doSelectAddress = address => { return (dispatch, getState) => { diff --git a/core/src/redux/app/actions/node-config.js b/core/src/redux/app/actions/node-config.js index 700e0c5f..1761239f 100644 --- a/core/src/redux/app/actions/node-config.js +++ b/core/src/redux/app/actions/node-config.js @@ -1,6 +1,6 @@ // Node Config Actions here... -import { LOAD_NODE_CONFIG, SET_NODE, ADD_NODE, REMOVE_NODE, EDIT_NODE } from '../app-action-types.js' -import { UI_VERSION } from '../version.js' +import {ADD_NODE, EDIT_NODE, LOAD_NODE_CONFIG, REMOVE_NODE, SET_NODE} from '../app-action-types.js' +import {UI_VERSION} from '../version.js' const nodeConfigUrl = '/getConfig' diff --git a/core/src/redux/app/actions/plugins.js b/core/src/redux/app/actions/plugins.js index 84e4d820..e376befe 100644 --- a/core/src/redux/app/actions/plugins.js +++ b/core/src/redux/app/actions/plugins.js @@ -1,4 +1,4 @@ -import { ADD_PLUGIN, ADD_PLUGIN_URL, PAGE_URL } from '../app-action-types.js' +import {ADD_PLUGIN, ADD_PLUGIN_URL, PAGE_URL} from '../app-action-types.js' export const doAddPluginUrl = (pluginUrlsConf) => { return (dispatch, getState) => { diff --git a/core/src/redux/app/app-actions.js b/core/src/redux/app/app-actions.js index 51574a58..3dea965a 100644 --- a/core/src/redux/app/app-actions.js +++ b/core/src/redux/app/app-actions.js @@ -1,4 +1,4 @@ -import { NAVIGATE, NETWORK_CONNECTION_STATUS } from './app-action-types.js' +import {NAVIGATE, NETWORK_CONNECTION_STATUS} from './app-action-types.js' export * from './actions/login.js' export * from './actions/init-worker.js' diff --git a/core/src/redux/app/app-reducer.js b/core/src/redux/app/app-reducer.js index e67826dd..8de46a5f 100644 --- a/core/src/redux/app/app-reducer.js +++ b/core/src/redux/app/app-reducer.js @@ -1,10 +1,47 @@ // Loading state, login state, isNavDrawOpen state etc. None of this needs to be saved to localstorage. -import { loadStateFromLocalStorage, saveStateToLocalStorage } from '../../localStorageHelpers.js' -import { LOG_IN, LOG_OUT, NETWORK_CONNECTION_STATUS, INIT_WORKERS, ADD_PLUGIN_URL, ADD_PLUGIN, ADD_NEW_PLUGIN_URL, NAVIGATE, SELECT_ADDRESS, ACCOUNT_INFO, CHAT_HEADS, UPDATE_BLOCK_INFO, UPDATE_NODE_STATUS, UPDATE_NODE_INFO, LOAD_NODE_CONFIG, SET_NODE, ADD_NODE, PAGE_URL, ADD_AUTO_LOAD_IMAGES_CHAT, REMOVE_AUTO_LOAD_IMAGES_CHAT, ALLOW_QAPP_AUTO_AUTH, REMOVE_QAPP_AUTO_AUTH, SET_CHAT_LAST_SEEN, ADD_CHAT_LAST_SEEN, ALLOW_QAPP_AUTO_LISTS, REMOVE_QAPP_AUTO_LISTS, SET_NEW_TAB, ADD_TAB_INFO, SET_TAB_NOTIFICATIONS, IS_OPEN_DEV_DIALOG, REMOVE_NODE, EDIT_NODE, SET_NEW_NOTIFICATION, SET_SIDE_EFFECT, SET_COIN_BALANCES } from './app-action-types.js' -import { initWorkersReducer } from './reducers/init-workers.js' -import { loginReducer } from './reducers/login-reducer.js' -import { setNode, addNode, removeNode, editNode } from './reducers/manage-node.js' +import {loadStateFromLocalStorage, saveStateToLocalStorage} from '../../localStorageHelpers.js' +import { + ACCOUNT_INFO, + ADD_AUTO_LOAD_IMAGES_CHAT, + ADD_CHAT_LAST_SEEN, + ADD_NEW_PLUGIN_URL, + ADD_NODE, + ADD_PLUGIN, + ADD_PLUGIN_URL, + ADD_TAB_INFO, + ALLOW_QAPP_AUTO_AUTH, + ALLOW_QAPP_AUTO_LISTS, + CHAT_HEADS, + EDIT_NODE, + INIT_WORKERS, + IS_OPEN_DEV_DIALOG, + LOAD_NODE_CONFIG, + LOG_IN, + LOG_OUT, + NAVIGATE, + NETWORK_CONNECTION_STATUS, + PAGE_URL, + REMOVE_AUTO_LOAD_IMAGES_CHAT, + REMOVE_NODE, + REMOVE_QAPP_AUTO_AUTH, + REMOVE_QAPP_AUTO_LISTS, + SELECT_ADDRESS, + SET_CHAT_LAST_SEEN, + SET_COIN_BALANCES, + SET_NEW_NOTIFICATION, + SET_NEW_TAB, + SET_NODE, + SET_SIDE_EFFECT, + SET_TAB_NOTIFICATIONS, + UPDATE_BLOCK_INFO, + UPDATE_NODE_INFO, + UPDATE_NODE_STATUS +} from './app-action-types.js' +import {initWorkersReducer} from './reducers/init-workers.js' +import {loginReducer} from './reducers/login-reducer.js' +import {addNode, editNode, removeNode, setNode} from './reducers/manage-node.js' import localForage from "localforage"; + const chatLastSeen = localForage.createInstance({ name: "chat-last-seen", }); @@ -71,7 +108,7 @@ export default (state = INITIAL_STATE, action) => { wallet: INITIAL_STATE.wallet, selectedAddress: INITIAL_STATE.selectedAddress, accountInfo: INITIAL_STATE.accountInfo - + } case ADD_PLUGIN: return { diff --git a/core/src/redux/config/config-reducer.js b/core/src/redux/config/config-reducer.js index 5a53f4d1..81900681 100644 --- a/core/src/redux/config/config-reducer.js +++ b/core/src/redux/config/config-reducer.js @@ -1,8 +1,8 @@ // Must be saved to localstorage. Will storage things such as saved addresses and themes (day/night mode) etc. // Initial state needs to be loaded from either the getConfig url or localstorage...NOT set via this -import { loadStateFromLocalStorage } from '../../localStorageHelpers' -import { LOAD_CONFIG_FROM_API } from './config-actions.js' -import { loadConfigFromAPI } from './reducers/load-config-from-api.js' +import {loadStateFromLocalStorage} from '../../localStorageHelpers' +import {LOAD_CONFIG_FROM_API} from './config-actions.js' +import {loadConfigFromAPI} from './reducers/load-config-from-api.js' const DEFAULT_INITIAL_STATE = { styles: { diff --git a/core/src/redux/reducers.js b/core/src/redux/reducers.js index 8fb963a0..8b9235c8 100644 --- a/core/src/redux/reducers.js +++ b/core/src/redux/reducers.js @@ -1,4 +1,4 @@ -import { combineReducers } from 'redux' +import {combineReducers} from 'redux' import app from './app/app-reducer.js' import config from './config/config-reducer.js' diff --git a/core/src/redux/user/actions/claim-airdrop.js b/core/src/redux/user/actions/claim-airdrop.js index 24f25dda..d94b5fe1 100644 --- a/core/src/redux/user/actions/claim-airdrop.js +++ b/core/src/redux/user/actions/claim-airdrop.js @@ -1,4 +1,4 @@ -import { CLAIM_AIRDROP } from '../user-action-types.js' +import {CLAIM_AIRDROP} from '../user-action-types.js' export const doClaimAirdrop = (address) => { return (dispatch, getState) => { diff --git a/core/src/redux/user/actions/notification-config.js b/core/src/redux/user/actions/notification-config.js index 646865f6..949a32b8 100644 --- a/core/src/redux/user/actions/notification-config.js +++ b/core/src/redux/user/actions/notification-config.js @@ -1,5 +1,4 @@ - -import { LOAD_NOTIFICATION_CONFIG, SET_QCHAT_NOTIFICATION_CONFIG } from '../user-action-types.js' +import {LOAD_NOTIFICATION_CONFIG, SET_QCHAT_NOTIFICATION_CONFIG} from '../user-action-types.js' const configUrl = '/getConfig' diff --git a/core/src/redux/user/actions/store-wallet.js b/core/src/redux/user/actions/store-wallet.js index 2621ad25..07b5f872 100644 --- a/core/src/redux/user/actions/store-wallet.js +++ b/core/src/redux/user/actions/store-wallet.js @@ -1,4 +1,4 @@ -import { STORE_WALLET, REMOVE_WALLET, UPDATE_STORED_WALLET_NAME } from '../user-action-types.js' +import {REMOVE_WALLET, STORE_WALLET, UPDATE_STORED_WALLET_NAME} from '../user-action-types.js' export const doStoreWallet = (wallet, password, name, statusUpdateFn = () => { }) => { return (dispatch, getState) => { diff --git a/core/src/redux/user/actions/update-account-info.js b/core/src/redux/user/actions/update-account-info.js index def4695f..7b80ab82 100644 --- a/core/src/redux/user/actions/update-account-info.js +++ b/core/src/redux/user/actions/update-account-info.js @@ -1,4 +1,4 @@ -import { UPDATE_ACCOUNT_INFO } from '../user-action-types' +import {UPDATE_ACCOUNT_INFO} from '../user-action-types' export const doUpdateAccountInfo = (accInfo) => { return (dispatch, getState) => { diff --git a/core/src/redux/user/actions/update-name.js b/core/src/redux/user/actions/update-name.js index c3eb1772..ae46cee0 100644 --- a/core/src/redux/user/actions/update-name.js +++ b/core/src/redux/user/actions/update-name.js @@ -1,5 +1,5 @@ -import { updateAccountInfo } from './update-account-info.js' -import { doUpdateStoredWalletName } from './store-wallet.js' +import {updateAccountInfo} from './update-account-info.js' +import {doUpdateStoredWalletName} from './store-wallet.js' const GET_NAME_URL = 'names/address/' const CHECK_NAME_INTERVAL = 1000 * 10 // Every 10 seconds diff --git a/core/src/redux/user/user-reducer.js b/core/src/redux/user/user-reducer.js index b6535737..67f24757 100644 --- a/core/src/redux/user/user-reducer.js +++ b/core/src/redux/user/user-reducer.js @@ -1,5 +1,12 @@ -import { loadStateFromLocalStorage } from '../../localStorageHelpers' -import { STORE_WALLET, REMOVE_WALLET, CLAIM_AIRDROP, UPDATE_ACCOUNT_INFO, LOAD_NOTIFICATION_CONFIG, SET_QCHAT_NOTIFICATION_CONFIG } from './user-action-types.js' +import {loadStateFromLocalStorage} from '../../localStorageHelpers' +import { + CLAIM_AIRDROP, + LOAD_NOTIFICATION_CONFIG, + REMOVE_WALLET, + SET_QCHAT_NOTIFICATION_CONFIG, + STORE_WALLET, + UPDATE_ACCOUNT_INFO +} from './user-action-types.js' const DEFAULT_INITIAL_STATE = { storedWallets: {}, diff --git a/core/src/stateAwait.js b/core/src/stateAwait.js index 1668cb54..7736b769 100644 --- a/core/src/stateAwait.js +++ b/core/src/stateAwait.js @@ -1,7 +1,7 @@ /** * Simple helper function so that I can do `await stateAwait(state => state.something === true)` or `await stateAwait(state => state.name === 'myName')` */ -import { store } from './store.js' +import {store} from './store.js' let subscriptions = [] store.subscribe(() => { diff --git a/core/src/store.js b/core/src/store.js index 16622e7d..141f4d6e 100644 --- a/core/src/store.js +++ b/core/src/store.js @@ -1,7 +1,8 @@ -import { createStore, compose, applyMiddleware } from 'redux' +import {applyMiddleware, compose, createStore} from 'redux' import thunk from 'redux-thunk' import reducers from './redux/reducers.js' + const composeEnhancers = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || compose export const store = createStore( diff --git a/core/src/styles/app-styles.js b/core/src/styles/app-styles.js index 09a9a1ca..2fac5ce4 100644 --- a/core/src/styles/app-styles.js +++ b/core/src/styles/app-styles.js @@ -1,4 +1,4 @@ -import { LitElement, html } from 'lit' +import {html, LitElement} from 'lit' import './styles.scss' import './app-theme.js' @@ -21,7 +21,7 @@ class AppStyles extends LitElement { --shadow-4: 0 14px 28px rgba(0,0,0,0.25), 0 10px 10px rgba(0,0,0,0.22); --shadow-5: 0 19px 38px rgba(0,0,0,0.30), 0 15px 12px rgba(0,0,0,0.22); --paper-input-container-focus-color: var(--mdc-theme-secondary); - + font-family: "Roboto", sans-serif; color: var(--mdc-theme-on-surface); --window-height: ${this.windowHeight}; diff --git a/core/src/styles/app-theme.js b/core/src/styles/app-theme.js index 7a94f99f..f2e9f93b 100644 --- a/core/src/styles/app-theme.js +++ b/core/src/styles/app-theme.js @@ -1,6 +1,6 @@ -import { LitElement, html } from 'lit' -import { connect } from 'pwa-helpers' -import { store } from '../store.js' +import {html, LitElement} from 'lit' +import {connect} from 'pwa-helpers' +import {store} from '../store.js' class AppTheme extends connect(store)(LitElement) { @@ -27,7 +27,7 @@ class AppTheme extends connect(store)(LitElement) { --mdc-theme-secondary: ${this.theme.colors.secondary}; /* Sets the text color to the theme secondary color. */ --mdc-theme-secondary-bg: ${this.theme.colors.secondaryBg};/* Sets the background color to the theme secondary color. */ --mdc-theme-on-secondary: ${this.theme.colors.onSecondary}; /* Sets the text color to the color configured for text on the secondary color. */ - + --mdc-theme-surface: ${this.theme.colors.surface}; /* Sets the background color to the surface background color. */ --mdc-theme-on-surface: ${this.theme.colors.onSurface};/* Sets the text color to the color configured for text on the surface color. */ --mdc-theme-background: ${this.theme.colors.background};/* Sets the background color to the theme background color. */ @@ -43,7 +43,7 @@ class AppTheme extends connect(store)(LitElement) { paper-spinner-lite, paper-spinner { --paper-spinner-color: var(--mdc-theme-secondary) } - + ` } diff --git a/core/src/tradebot/addTradeBotRoutes.js b/core/src/tradebot/addTradeBotRoutes.js index 1cef040c..50da648e 100644 --- a/core/src/tradebot/addTradeBotRoutes.js +++ b/core/src/tradebot/addTradeBotRoutes.js @@ -1,4 +1,4 @@ -import { routes } from './trade-bot-routes.js' +import {routes} from './trade-bot-routes.js' export const addTradeBotRoutes = epmlInstance => { Object.entries(routes).forEach(([route, handler]) => { diff --git a/core/src/tradebot/trade-bot-routes.js b/core/src/tradebot/trade-bot-routes.js index aecb989f..4fb72c4c 100644 --- a/core/src/tradebot/trade-bot-routes.js +++ b/core/src/tradebot/trade-bot-routes.js @@ -1,4 +1,4 @@ -import { store } from '../store.js' +import {store} from '../store.js' import * as api from 'qortal-ui-crypto' import snackbar from '../functional-components/snackbar.js' @@ -35,14 +35,14 @@ export const routes = { if (!req.disableModal && !req.data.disableModal) { await requestTransactionDialog.requestTransaction(tx) } - + const res = await processTransaction(tx.signedBytes) let extraData = {} if(req.data.type === 38 && tx && tx._rewardShareKeyPair && tx._rewardShareKeyPair.secretKey){ extraData.rewardSharePrivateKey = Base58.encode(tx._rewardShareKeyPair.secretKey) } - - + + response = { success: true, data: res, diff --git a/core/src/worker.js b/core/src/worker.js index 24a11d8b..a1188062 100644 --- a/core/src/worker.js +++ b/core/src/worker.js @@ -1,7 +1,7 @@ -import { Epml, EpmlReadyPlugin, RequestPlugin, EpmlWorkerPlugin } from 'epml' +import {Epml, EpmlReadyPlugin, EpmlWorkerPlugin, RequestPlugin} from 'epml' import utils from './cryptoUtils.js' -import { Sha512, bytes_to_base64 as bytesToBase64 } from 'asmcrypto.js' +import {bytes_to_base64 as bytesToBase64, Sha512} from 'asmcrypto.js' import bcrypt from 'bcryptjs' Epml.registerPlugin(RequestPlugin) diff --git a/crypto/api.js b/crypto/api.js index 543d875d..e7ea9034 100644 --- a/crypto/api.js +++ b/crypto/api.js @@ -1,9 +1,9 @@ -import { Sha256 } from 'asmcrypto.js' +import {Sha256} from 'asmcrypto.js' import Base58 from './api/deps/Base58' import Base64 from './api/deps/Base64' -import { base58PublicKeyToAddress } from './api/wallet/base58PublicKeyToAddress' -import { validateAddress } from './api/wallet/validateAddress' -import { decryptChatMessage, decryptChatMessageBase64 } from './api/transactions/chat/decryptChatMessage' +import {base58PublicKeyToAddress} from './api/wallet/base58PublicKeyToAddress' +import {validateAddress} from './api/wallet/validateAddress' +import {decryptChatMessage, decryptChatMessageBase64} from './api/transactions/chat/decryptChatMessage' import _ from 'lodash' window.Sha256 = Sha256 diff --git a/crypto/api/PhraseWallet.js b/crypto/api/PhraseWallet.js index 41818a28..bfe81999 100644 --- a/crypto/api/PhraseWallet.js +++ b/crypto/api/PhraseWallet.js @@ -3,11 +3,11 @@ Copyright 2017-2018 @ irontiga and vbcs (original developer) */ 'use strict' import Base58 from './deps/Base58.js' -import { Sha256, Sha512 } from 'asmcrypto.js' +import {Sha256, Sha512} from 'asmcrypto.js' import nacl from './deps/nacl-fast.js' import utils from './deps/utils.js' -import { generateSaveWalletData } from './storeWallet.js' +import {generateSaveWalletData} from './storeWallet.js' import publicKeyToAddress from './wallet/publicKeyToAddress.js' import AltcoinHDWallet from "./bitcoin/AltcoinHDWallet" @@ -93,7 +93,7 @@ export default class PhraseWallet { const address = publicKeyToAddress(addrKeyPair.publicKey); const qoraAddress = publicKeyToAddress(addrKeyPair.publicKey, true); - // Create Bitcoin HD Wallet + // Create Bitcoin HD Wallet const btcSeed = [...addrSeed]; const btcWallet = new AltcoinHDWallet({ mainnet: { @@ -108,7 +108,7 @@ export default class PhraseWallet { } }).createWallet(new Uint8Array(btcSeed), false); - // Create Litecoin HD Wallet + // Create Litecoin HD Wallet const ltcSeed = [...addrSeed]; const ltcWallet = new AltcoinHDWallet({ mainnet: { @@ -123,7 +123,7 @@ export default class PhraseWallet { } }).createWallet(new Uint8Array(ltcSeed), false, 'LTC'); - // Create Dogecoin HD Wallet + // Create Dogecoin HD Wallet const dogeSeed = [...addrSeed]; const dogeWallet = new AltcoinHDWallet({ mainnet: { @@ -138,7 +138,7 @@ export default class PhraseWallet { } }).createWallet(new Uint8Array(dogeSeed), false, 'DOGE'); - // Create Digibyte HD Wallet + // Create Digibyte HD Wallet const dgbSeed = [...addrSeed]; const dgbWallet = new AltcoinHDWallet({ mainnet: { @@ -153,7 +153,7 @@ export default class PhraseWallet { } }).createWallet(new Uint8Array(dgbSeed), false, 'DGB'); - // Create Ravencoin HD Wallet + // Create Ravencoin HD Wallet const rvnSeed = [...addrSeed]; const rvnWallet = new AltcoinHDWallet({ mainnet: { @@ -168,7 +168,7 @@ export default class PhraseWallet { } }).createWallet(new Uint8Array(rvnSeed), false, 'RVN'); - // Create Pirate Chain HD Wallet + // Create Pirate Chain HD Wallet const arrrSeed = [...addrSeed]; const arrrWallet = new AltcoinHDWallet({ mainnet: { diff --git a/crypto/api/bitcoin/AltcoinHDWallet.js b/crypto/api/bitcoin/AltcoinHDWallet.js index 421d19fb..c0131e19 100644 --- a/crypto/api/bitcoin/AltcoinHDWallet.js +++ b/crypto/api/bitcoin/AltcoinHDWallet.js @@ -1,10 +1,10 @@ 'use strict'; import Base58 from '../deps/Base58.js' -import { Sha256, Sha512 } from 'asmcrypto.js' +import {Sha256, Sha512} from 'asmcrypto.js' import jsSHA from 'jssha' import RIPEMD160 from '../deps/ripemd160.js' import utils from '../deps/utils.js' -import { EllipticCurve, BigInteger } from './ecbn.js' +import {BigInteger, EllipticCurve} from './ecbn.js' export default class AltcoinHDWallet { @@ -335,7 +335,7 @@ export default class AltcoinHDWallet { // Append 1 byte '0x00' (to make the key data 33 bytes, DO THIS ONLY FOR PRIVATE KEYS ) s.push(0) - //if the private key length is less than 32 let's add leading zeros + //if the private key length is less than 32 let's add leading zeros if(this.privateKey.length<32){ for(let i=this.privateKey.length;i<32;i++){ s.push(0) diff --git a/crypto/api/createTransaction.js b/crypto/api/createTransaction.js index b4bf7802..faf24803 100644 --- a/crypto/api/createTransaction.js +++ b/crypto/api/createTransaction.js @@ -1,6 +1,6 @@ -import { transactionTypes as transactions } from './transactions/transactions.js' +import {transactionTypes as transactions} from './transactions/transactions.js' import Base58 from './deps/Base58.js' -import { request } from './fetch-request' +import {request} from './fetch-request' import signChat from './transactions/chat/signChat.js' import signArbitrary from './transactions/arbitrary/signArbitrary.js' import signArbitraryWithFee from './transactions/arbitrary/signArbitraryWithFee.js' diff --git a/crypto/api/createWallet.js b/crypto/api/createWallet.js index ed978183..341a2aeb 100644 --- a/crypto/api/createWallet.js +++ b/crypto/api/createWallet.js @@ -1,7 +1,7 @@ -import { kdf } from './kdf.js' +import {kdf} from './kdf.js' import PhraseWallet from './PhraseWallet.js' import Base58 from './deps/Base58.js' -import { decryptStoredWallet } from './decryptStoredWallet.js' +import {decryptStoredWallet} from './decryptStoredWallet.js' export const createWallet = async (sourceType, source, statusUpdateFn) => { let version, seed diff --git a/crypto/api/decryptStoredWallet.js b/crypto/api/decryptStoredWallet.js index 9a045376..0d026e3a 100644 --- a/crypto/api/decryptStoredWallet.js +++ b/crypto/api/decryptStoredWallet.js @@ -1,7 +1,7 @@ import Base58 from './deps/Base58.js' -import { kdf } from './kdf.js' -import { HmacSha512, AES_CBC } from 'asmcrypto.js' -import { use, get, translate, translateUnsafeHTML, registerTranslateConfig } from 'lit-translate' +import {kdf} from './kdf.js' +import {AES_CBC, HmacSha512} from 'asmcrypto.js' +import {get, registerTranslateConfig} from 'lit-translate' registerTranslateConfig({ loader: lang => fetch(`/language/${lang}.json`).then(res => res.json()) diff --git a/crypto/api/fetch-request.js b/crypto/api/fetch-request.js index f7e5c9b2..a1ccee31 100644 --- a/crypto/api/fetch-request.js +++ b/crypto/api/fetch-request.js @@ -1,4 +1,4 @@ -import { watchConfig, waitForConfig } from '../config.js' +import {waitForConfig, watchConfig} from '../config.js' let config = {} watchConfig((c) => { diff --git a/crypto/api/kdf.js b/crypto/api/kdf.js index bf3daec5..fcff88eb 100644 --- a/crypto/api/kdf.js +++ b/crypto/api/kdf.js @@ -1,8 +1,8 @@ -import { store } from '../api_deps.js' -import { stateAwait } from './utils/stateAwait.js' -import { Sha512 } from 'asmcrypto.js' +import {store} from '../api_deps.js' +import {stateAwait} from './utils/stateAwait.js' +import {Sha512} from 'asmcrypto.js' import utils from '../api/deps/utils.js' -import { use, get, translate, translateUnsafeHTML, registerTranslateConfig } from 'lit-translate' +import {get, registerTranslateConfig} from 'lit-translate' registerTranslateConfig({ loader: lang => fetch(`/language/${lang}.json`).then(res => res.json()) diff --git a/crypto/api/registerUsername.js b/crypto/api/registerUsername.js index 9715a078..1092e756 100644 --- a/crypto/api/registerUsername.js +++ b/crypto/api/registerUsername.js @@ -1,7 +1,7 @@ /** * Not to be confused with register name...this is a special use case */ -import { request, createTransaction, processTransaction } from './api.js' +import {createTransaction, processTransaction, request} from './api.js' const TX_TYPE = 3 // NAME_REGISTRATION const CHECK_LAST_REF_INTERVAL = 30 * 1000 // err 30 seconds diff --git a/crypto/api/storeWallet.js b/crypto/api/storeWallet.js index 9d16c8af..f63a2ce2 100644 --- a/crypto/api/storeWallet.js +++ b/crypto/api/storeWallet.js @@ -1,5 +1,5 @@ -import { HmacSha512, AES_CBC } from 'asmcrypto.js' -import { kdf } from './kdf.js' +import {AES_CBC, HmacSha512} from 'asmcrypto.js' +import {kdf} from './kdf.js' import Base58 from './deps/Base58.js' const getRandomValues = window.crypto ? window.crypto.getRandomValues.bind(window.crypto) : window.msCrypto.getRandomValues.bind(window.msCrypto) diff --git a/crypto/api/tradeRequest.js b/crypto/api/tradeRequest.js index 797cbe5b..892c1318 100644 --- a/crypto/api/tradeRequest.js +++ b/crypto/api/tradeRequest.js @@ -3,7 +3,7 @@ import TradeBotCreateRequest from './transactions/trade-portal/tradebot/TradeBot import TradeBotRespondRequest from './transactions/trade-portal/tradebot/TradeBotRespondRequest.js' import signTradeBotTransaction from './transactions/trade-portal/tradebot/signTradeBotTransaction.js' import DeleteTradeOffer from './transactions/trade-portal/tradeoffer/DeleteTradeOffer.js' -import { request } from './fetch-request' +import {request} from './fetch-request' // TradeBotCreateRequest export const tradeBotCreateRequest = (requestObject) => { @@ -55,7 +55,7 @@ export const deleteTradeOffer = (requestObject) => { }) } -// Send BTC +// Send BTC export const sendBtc = (requestObject) => { const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node] @@ -69,7 +69,7 @@ export const sendBtc = (requestObject) => { }) } -// Send LTC +// Send LTC export const sendLtc = (requestObject) => { const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node] @@ -83,7 +83,7 @@ export const sendLtc = (requestObject) => { }) } -// Send DOGE +// Send DOGE export const sendDoge = (requestObject) => { const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node] @@ -97,7 +97,7 @@ export const sendDoge = (requestObject) => { }) } -// Send DGB +// Send DGB export const sendDgb = (requestObject) => { const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node] @@ -111,7 +111,7 @@ export const sendDgb = (requestObject) => { }) } -// Send RVN +// Send RVN export const sendRvn = (requestObject) => { const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node] @@ -125,7 +125,7 @@ export const sendRvn = (requestObject) => { }) } -// Send ARRR +// Send ARRR export const sendArrr = (requestObject) => { const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node] diff --git a/crypto/api/transactions/AirdropTransaction.js b/crypto/api/transactions/AirdropTransaction.js index e23029a8..0d366ab5 100644 --- a/crypto/api/transactions/AirdropTransaction.js +++ b/crypto/api/transactions/AirdropTransaction.js @@ -1,6 +1,6 @@ 'use strict' import TransactionBase from './TransactionBase.js' -import { QORT_DECIMALS } from '../constants.js' +import {QORT_DECIMALS} from '../constants.js' export default class PaymentTransaction extends TransactionBase { constructor() { diff --git a/crypto/api/transactions/DeployAtTransaction.js b/crypto/api/transactions/DeployAtTransaction.js index 23e50255..3e4edbc3 100644 --- a/crypto/api/transactions/DeployAtTransaction.js +++ b/crypto/api/transactions/DeployAtTransaction.js @@ -1,7 +1,7 @@ 'use strict' import TransactionBase from './TransactionBase.js' -import { store } from '../../api.js' -import { QORT_DECIMALS } from '../constants.js' +import {store} from '../../api.js' +import {QORT_DECIMALS} from '../constants.js' export default class DeployAtTransaction extends TransactionBase { constructor() { @@ -81,7 +81,7 @@ export default class DeployAtTransaction extends TransactionBase { set rAssetId(rAssetId) { this._rAssetId = this.constructor.utils.int64ToBytes(rAssetId) } - + get params() { const params = super.params diff --git a/crypto/api/transactions/MessageTransaction.js b/crypto/api/transactions/MessageTransaction.js index ea0e4079..5e34c0fa 100644 --- a/crypto/api/transactions/MessageTransaction.js +++ b/crypto/api/transactions/MessageTransaction.js @@ -1,6 +1,5 @@ 'use strict' import PaymentTransaction from './PaymentTransaction.js' -import { QORT_DECIMALS } from '../constants.js' export default class MessageTransaction extends PaymentTransaction { constructor() { diff --git a/crypto/api/transactions/PaymentTransaction.js b/crypto/api/transactions/PaymentTransaction.js index bde396eb..7e86b211 100644 --- a/crypto/api/transactions/PaymentTransaction.js +++ b/crypto/api/transactions/PaymentTransaction.js @@ -1,7 +1,7 @@ 'use strict' import TransactionBase from './TransactionBase.js' import Base58 from '../deps/Base58.js' -import { store } from '../../api.js' +import {store} from '../../api.js' export default class PaymentTransaction extends TransactionBase { constructor() { @@ -17,12 +17,12 @@ export default class PaymentTransaction extends TransactionBase { ${this._dialogto}: - ${this.dialogAddress} ${' '}- - ${Base58.encode(this._recipient)} + ${this.dialogAddress} ${' '}- + ${Base58.encode(this._recipient)} ${this.recipientName ? html` - ${this.dialogName} ${' '}- + ${this.dialogName} ${' '}- ${this.recipientName} ` : ''} diff --git a/crypto/api/transactions/PublicizeTransaction.js b/crypto/api/transactions/PublicizeTransaction.js index 569f5e38..2e1afda4 100644 --- a/crypto/api/transactions/PublicizeTransaction.js +++ b/crypto/api/transactions/PublicizeTransaction.js @@ -1,6 +1,6 @@ "use strict"; import ChatBase from "./chat/ChatBase.js" -import { QORT_DECIMALS } from "../constants.js" +import {QORT_DECIMALS} from "../constants.js" export default class PublicizeTransaction extends ChatBase { constructor() { diff --git a/crypto/api/transactions/TransactionBase.js b/crypto/api/transactions/TransactionBase.js index f41b7749..e29f00b4 100644 --- a/crypto/api/transactions/TransactionBase.js +++ b/crypto/api/transactions/TransactionBase.js @@ -1,5 +1,5 @@ 'use strict' -import { TX_TYPES, QORT_DECIMALS } from '../constants.js' +import {QORT_DECIMALS, TX_TYPES} from '../constants.js' import nacl from '../deps/nacl-fast.js' import Base58 from '../deps/Base58.js' import utils from '../deps/utils.js' diff --git a/crypto/api/transactions/TransferPrivsTransaction.js b/crypto/api/transactions/TransferPrivsTransaction.js index 858ac26a..61029703 100644 --- a/crypto/api/transactions/TransferPrivsTransaction.js +++ b/crypto/api/transactions/TransferPrivsTransaction.js @@ -1,8 +1,7 @@ 'use strict' import TransactionBase from './TransactionBase.js' -import Base58 from '../deps/Base58.js' -import { store } from '../../api.js' -import { QORT_DECIMALS } from '../constants.js' +import {store} from '../../api.js' +import {QORT_DECIMALS} from '../constants.js' export default class TransferPrivsTransaction extends TransactionBase { constructor() { diff --git a/crypto/api/transactions/chat/ChatBase.js b/crypto/api/transactions/chat/ChatBase.js index 240c9068..ce9fe8dc 100644 --- a/crypto/api/transactions/chat/ChatBase.js +++ b/crypto/api/transactions/chat/ChatBase.js @@ -1,5 +1,5 @@ 'use strict' -import { TX_TYPES, QORT_DECIMALS } from '../../constants.js' +import {QORT_DECIMALS, TX_TYPES} from '../../constants.js' import nacl from '../../deps/nacl-fast.js' import Base58 from '../../deps/Base58.js' import utils from '../../deps/utils.js' diff --git a/crypto/api/transactions/chat/ChatTransaction.js b/crypto/api/transactions/chat/ChatTransaction.js index d6313924..b79aa415 100644 --- a/crypto/api/transactions/chat/ChatTransaction.js +++ b/crypto/api/transactions/chat/ChatTransaction.js @@ -2,8 +2,8 @@ import ChatBase from "./ChatBase.js" import nacl from '../../deps/nacl-fast.js' import ed2curve from '../../deps/ed2curve.js' -import { Sha256 } from 'asmcrypto.js' -import { CHAT_REFERENCE_FEATURE_TRIGGER_TIMESTAMP } from '../../constants.js' +import {Sha256} from 'asmcrypto.js' +import {CHAT_REFERENCE_FEATURE_TRIGGER_TIMESTAMP} from '../../constants.js' export default class ChatTransaction extends ChatBase { diff --git a/crypto/api/transactions/chat/GroupChatTransaction.js b/crypto/api/transactions/chat/GroupChatTransaction.js index dc3a856b..a7dd51c3 100644 --- a/crypto/api/transactions/chat/GroupChatTransaction.js +++ b/crypto/api/transactions/chat/GroupChatTransaction.js @@ -1,6 +1,6 @@ 'use strict' import ChatBase from "./ChatBase.js" -import { CHAT_REFERENCE_FEATURE_TRIGGER_TIMESTAMP } from '../../constants.js' +import {CHAT_REFERENCE_FEATURE_TRIGGER_TIMESTAMP} from '../../constants.js' export default class GroupChatTransaction extends ChatBase { constructor() { diff --git a/crypto/api/transactions/chat/decryptChatMessage.js b/crypto/api/transactions/chat/decryptChatMessage.js index e6f8bcd1..38ecea4e 100644 --- a/crypto/api/transactions/chat/decryptChatMessage.js +++ b/crypto/api/transactions/chat/decryptChatMessage.js @@ -1,7 +1,7 @@ import nacl from '../../deps/nacl-fast.js' import Base58 from '../../deps/Base58.js' import ed2curve from '../../deps/ed2curve.js' -import { Sha256 } from 'asmcrypto.js' +import {Sha256} from 'asmcrypto.js' export const decryptChatMessage = (encryptedMessage, privateKey, recipientPublicKey, lastReference) => { let _encryptedMessage = Base58.decode(encryptedMessage) @@ -54,4 +54,4 @@ export const decryptChatMessageBase64 = (encryptedMessage, privateKey, recipient return new TextDecoder('utf-8').decode(_decryptedMessage) -} \ No newline at end of file +} diff --git a/crypto/api/transactions/groups/AddGroupAdminTransaction.js b/crypto/api/transactions/groups/AddGroupAdminTransaction.js index 4f5bf090..4719320c 100644 --- a/crypto/api/transactions/groups/AddGroupAdminTransaction.js +++ b/crypto/api/transactions/groups/AddGroupAdminTransaction.js @@ -1,6 +1,6 @@ 'use strict' import TransactionBase from '../TransactionBase.js' -import { QORT_DECIMALS } from '../../constants.js' +import {QORT_DECIMALS} from '../../constants.js' export default class AddGroupAdminTransaction extends TransactionBase { constructor() { diff --git a/crypto/api/transactions/groups/CancelGroupBanTransaction.js b/crypto/api/transactions/groups/CancelGroupBanTransaction.js index 61de1e34..78d58c85 100644 --- a/crypto/api/transactions/groups/CancelGroupBanTransaction.js +++ b/crypto/api/transactions/groups/CancelGroupBanTransaction.js @@ -1,6 +1,6 @@ 'use strict' import TransactionBase from '../TransactionBase.js' -import { QORT_DECIMALS } from '../../constants.js' +import {QORT_DECIMALS} from '../../constants.js' export default class CancelGroupBanTransaction extends TransactionBase { constructor() { diff --git a/crypto/api/transactions/groups/CancelGroupInviteTransaction.js b/crypto/api/transactions/groups/CancelGroupInviteTransaction.js index 10bb800b..6bf09844 100644 --- a/crypto/api/transactions/groups/CancelGroupInviteTransaction.js +++ b/crypto/api/transactions/groups/CancelGroupInviteTransaction.js @@ -1,6 +1,6 @@ 'use strict' import TransactionBase from '../TransactionBase.js' -import { QORT_DECIMALS } from '../../constants.js' +import {QORT_DECIMALS} from '../../constants.js' export default class CancelGroupInviteTransaction extends TransactionBase { constructor() { diff --git a/crypto/api/transactions/groups/CreateGroupTransaction.js b/crypto/api/transactions/groups/CreateGroupTransaction.js index 0b76ead0..1a6b38c9 100644 --- a/crypto/api/transactions/groups/CreateGroupTransaction.js +++ b/crypto/api/transactions/groups/CreateGroupTransaction.js @@ -1,6 +1,6 @@ 'use strict' import TransactionBase from '../TransactionBase.js' -import { QORT_DECIMALS } from '../../constants.js' +import {QORT_DECIMALS} from '../../constants.js' export default class CreateGroupTransaction extends TransactionBase { constructor() { diff --git a/crypto/api/transactions/groups/GroupBanTransaction.js b/crypto/api/transactions/groups/GroupBanTransaction.js index 101cb364..23aeb769 100644 --- a/crypto/api/transactions/groups/GroupBanTransaction.js +++ b/crypto/api/transactions/groups/GroupBanTransaction.js @@ -1,6 +1,6 @@ 'use strict' import TransactionBase from '../TransactionBase.js' -import { QORT_DECIMALS } from '../../constants.js' +import {QORT_DECIMALS} from '../../constants.js' export default class GroupBanTransaction extends TransactionBase { constructor() { diff --git a/crypto/api/transactions/groups/GroupInviteTransaction.js b/crypto/api/transactions/groups/GroupInviteTransaction.js index 62a89633..0e7397e3 100644 --- a/crypto/api/transactions/groups/GroupInviteTransaction.js +++ b/crypto/api/transactions/groups/GroupInviteTransaction.js @@ -1,6 +1,6 @@ 'use strict' import TransactionBase from '../TransactionBase.js' -import { QORT_DECIMALS } from '../../constants.js' +import {QORT_DECIMALS} from '../../constants.js' export default class GroupInviteTransaction extends TransactionBase { constructor() { diff --git a/crypto/api/transactions/groups/GroupKickTransaction.js b/crypto/api/transactions/groups/GroupKickTransaction.js index 4a2af2c2..22712da4 100644 --- a/crypto/api/transactions/groups/GroupKickTransaction.js +++ b/crypto/api/transactions/groups/GroupKickTransaction.js @@ -1,6 +1,6 @@ 'use strict' import TransactionBase from '../TransactionBase.js' -import { QORT_DECIMALS } from '../../constants.js' +import {QORT_DECIMALS} from '../../constants.js' export default class GroupKickTransaction extends TransactionBase { constructor() { diff --git a/crypto/api/transactions/groups/JoinGroupTransaction.js b/crypto/api/transactions/groups/JoinGroupTransaction.js index 57a42bb5..b42e17d2 100644 --- a/crypto/api/transactions/groups/JoinGroupTransaction.js +++ b/crypto/api/transactions/groups/JoinGroupTransaction.js @@ -1,6 +1,6 @@ 'use strict' import TransactionBase from '../TransactionBase.js' -import { QORT_DECIMALS } from '../../constants.js' +import {QORT_DECIMALS} from '../../constants.js' export default class JoinGroupTransaction extends TransactionBase { constructor() { diff --git a/crypto/api/transactions/groups/LeaveGroupTransaction.js b/crypto/api/transactions/groups/LeaveGroupTransaction.js index 988d768c..fd57381f 100644 --- a/crypto/api/transactions/groups/LeaveGroupTransaction.js +++ b/crypto/api/transactions/groups/LeaveGroupTransaction.js @@ -1,6 +1,6 @@ 'use strict' import TransactionBase from '../TransactionBase.js' -import { QORT_DECIMALS } from '../../constants.js' +import {QORT_DECIMALS} from '../../constants.js' export default class LeaveGroupTransaction extends TransactionBase { constructor() { diff --git a/crypto/api/transactions/groups/RemoveGroupAdminTransaction.js b/crypto/api/transactions/groups/RemoveGroupAdminTransaction.js index 05af0da9..abd8c084 100644 --- a/crypto/api/transactions/groups/RemoveGroupAdminTransaction.js +++ b/crypto/api/transactions/groups/RemoveGroupAdminTransaction.js @@ -1,6 +1,6 @@ 'use strict' import TransactionBase from '../TransactionBase.js' -import { QORT_DECIMALS } from '../../constants.js' +import {QORT_DECIMALS} from '../../constants.js' export default class RemoveGroupAdminTransaction extends TransactionBase { constructor() { diff --git a/crypto/api/transactions/groups/UpdateGroupTransaction.js b/crypto/api/transactions/groups/UpdateGroupTransaction.js index 8709f778..f5071f4e 100644 --- a/crypto/api/transactions/groups/UpdateGroupTransaction.js +++ b/crypto/api/transactions/groups/UpdateGroupTransaction.js @@ -1,8 +1,7 @@ 'use strict'; import TransactionBase from '../TransactionBase.js' -import Base58 from '../../deps/Base58.js' -import { store } from '../../../api.js' -import { QORT_DECIMALS } from "../../constants.js" +import {store} from '../../../api.js' +import {QORT_DECIMALS} from "../../constants.js" export default class UpdateGroupTransaction extends TransactionBase { constructor() { @@ -15,7 +14,7 @@ export default class UpdateGroupTransaction extends TransactionBase { return html` Are you sure to update this group ?
- +
On pressing confirm, the group details will be updated! ` @@ -69,4 +68,4 @@ export default class UpdateGroupTransaction extends TransactionBase { console.log('verify params', params) return params } -} \ No newline at end of file +} diff --git a/crypto/api/transactions/names/BuyNameTransacion.js b/crypto/api/transactions/names/BuyNameTransacion.js index 48671a2a..c03f7b85 100644 --- a/crypto/api/transactions/names/BuyNameTransacion.js +++ b/crypto/api/transactions/names/BuyNameTransacion.js @@ -1,6 +1,6 @@ 'use strict' import TransactionBase from '../TransactionBase.js' -import { QORT_DECIMALS } from '../../constants.js' +import {QORT_DECIMALS} from '../../constants.js' export default class BuyNameTransacion extends TransactionBase { constructor() { diff --git a/crypto/api/transactions/names/CancelSellNameTransacion.js b/crypto/api/transactions/names/CancelSellNameTransacion.js index da8f98bb..cfd59b8d 100644 --- a/crypto/api/transactions/names/CancelSellNameTransacion.js +++ b/crypto/api/transactions/names/CancelSellNameTransacion.js @@ -1,6 +1,6 @@ 'use strict' import TransactionBase from '../TransactionBase.js' -import { QORT_DECIMALS } from '../../constants.js' +import {QORT_DECIMALS} from '../../constants.js' export default class CancelSellNameTransacion extends TransactionBase { constructor() { diff --git a/crypto/api/transactions/names/RegisterNameTransaction.js b/crypto/api/transactions/names/RegisterNameTransaction.js index 6076e7c3..06dde2ea 100644 --- a/crypto/api/transactions/names/RegisterNameTransaction.js +++ b/crypto/api/transactions/names/RegisterNameTransaction.js @@ -1,6 +1,6 @@ 'use strict' import TransactionBase from '../TransactionBase.js' -import { QORT_DECIMALS } from '../../constants.js' +import {QORT_DECIMALS} from '../../constants.js' export default class RegisterNameTransaction extends TransactionBase { constructor() { diff --git a/crypto/api/transactions/names/SellNameTransacion.js b/crypto/api/transactions/names/SellNameTransacion.js index 8659edf7..1ce67835 100644 --- a/crypto/api/transactions/names/SellNameTransacion.js +++ b/crypto/api/transactions/names/SellNameTransacion.js @@ -1,6 +1,6 @@ 'use strict' import TransactionBase from '../TransactionBase.js' -import { QORT_DECIMALS } from '../../constants.js' +import {QORT_DECIMALS} from '../../constants.js' export default class SellNameTransacion extends TransactionBase { constructor() { diff --git a/crypto/api/transactions/names/UpdateNameTransaction.js b/crypto/api/transactions/names/UpdateNameTransaction.js index bfc31563..f7ccf613 100644 --- a/crypto/api/transactions/names/UpdateNameTransaction.js +++ b/crypto/api/transactions/names/UpdateNameTransaction.js @@ -1,6 +1,6 @@ 'use strict' import TransactionBase from '../TransactionBase.js' -import { QORT_DECIMALS } from '../../constants.js' +import {QORT_DECIMALS} from '../../constants.js' export default class UpdateNameTransaction extends TransactionBase { constructor() { @@ -70,4 +70,4 @@ export default class UpdateNameTransaction extends TransactionBase { ) return params } -} \ No newline at end of file +} diff --git a/crypto/api/transactions/polls/CreatePollTransaction.js b/crypto/api/transactions/polls/CreatePollTransaction.js index b7d8bb6c..a99179b1 100644 --- a/crypto/api/transactions/polls/CreatePollTransaction.js +++ b/crypto/api/transactions/polls/CreatePollTransaction.js @@ -1,6 +1,6 @@ 'use strict' import TransactionBase from '../TransactionBase.js' -import { QORT_DECIMALS } from '../../constants.js' +import {QORT_DECIMALS} from '../../constants.js' export default class CreatePollTransaction extends TransactionBase { constructor() { @@ -79,14 +79,14 @@ export default class CreatePollTransaction extends TransactionBase { set rOptions(rOptions) { const optionsArray = rOptions[0].split(', ').map(opt => opt.trim()); - this._pollOptions = optionsArray + this._pollOptions = optionsArray for (let i = 0; i < optionsArray.length; i++) { this.addOption(optionsArray[i]); } - + this._rNumberOfOptionsBytes = this.constructor.utils.int32ToBytes(optionsArray.length); } - + get params() { const params = super.params @@ -108,4 +108,4 @@ export default class CreatePollTransaction extends TransactionBase { return params } -} \ No newline at end of file +} diff --git a/crypto/api/transactions/polls/VoteOnPollTransaction.js b/crypto/api/transactions/polls/VoteOnPollTransaction.js index 9fbba6ff..16c51140 100644 --- a/crypto/api/transactions/polls/VoteOnPollTransaction.js +++ b/crypto/api/transactions/polls/VoteOnPollTransaction.js @@ -1,6 +1,6 @@ 'use strict' import TransactionBase from '../TransactionBase.js' -import { QORT_DECIMALS } from '../../constants.js' +import {QORT_DECIMALS} from '../../constants.js' export default class VoteOnPollTransaction extends TransactionBase { constructor() { @@ -62,4 +62,4 @@ export default class VoteOnPollTransaction extends TransactionBase { ) return params } -} \ No newline at end of file +} diff --git a/crypto/api/transactions/reward-share/RemoveRewardShareTransaction.js b/crypto/api/transactions/reward-share/RemoveRewardShareTransaction.js index 38719b56..2c2f9b3c 100644 --- a/crypto/api/transactions/reward-share/RemoveRewardShareTransaction.js +++ b/crypto/api/transactions/reward-share/RemoveRewardShareTransaction.js @@ -1,8 +1,8 @@ 'use strict' import TransactionBase from '../TransactionBase.js' import publicKeyToAddress from '../../wallet/publicKeyToAddress.js' -import { Base58 } from '../../deps/deps.js' -import { DYNAMIC_FEE_TIMESTAMP } from '../../constants.js' +import {Base58} from '../../deps/deps.js' +import {DYNAMIC_FEE_TIMESTAMP} from '../../constants.js' export default class RemoveRewardShareTransaction extends TransactionBase { constructor() { diff --git a/crypto/api/transactions/reward-share/RewardShareTransaction.js b/crypto/api/transactions/reward-share/RewardShareTransaction.js index af0d6bba..eac8329c 100644 --- a/crypto/api/transactions/reward-share/RewardShareTransaction.js +++ b/crypto/api/transactions/reward-share/RewardShareTransaction.js @@ -3,8 +3,8 @@ import publicKeyToAddress from '../../wallet/publicKeyToAddress.js' import TransactionBase from "../TransactionBase.js" import nacl from '../../deps/nacl-fast.js' import ed2curve from '../../deps/ed2curve.js' -import { Sha256 } from 'asmcrypto.js' -import { DYNAMIC_FEE_TIMESTAMP } from '../../constants.js' +import {Sha256} from 'asmcrypto.js' +import {DYNAMIC_FEE_TIMESTAMP} from '../../constants.js' export default class RewardShareTransaction extends TransactionBase { constructor() { @@ -14,7 +14,7 @@ export default class RewardShareTransaction extends TransactionBase { render(html) { return html` - ${this._rewarddialog1} ${this._percentageShare / 1e8}% ${this._rewarddialog2} ${this.constructor.Base58.encode(this._recipient)}? + ${this._rewarddialog1} ${this._percentageShare / 1e8}% ${this._rewarddialog2} ${this.constructor.Base58.encode(this._recipient)}? ${this._rewarddialog3}
${this._base58RewardShareSeed} diff --git a/crypto/api/transactions/trade-portal/tradeoffer/cancelAllOffers.js b/crypto/api/transactions/trade-portal/tradeoffer/cancelAllOffers.js index e3011a59..c3a91933 100644 --- a/crypto/api/transactions/trade-portal/tradeoffer/cancelAllOffers.js +++ b/crypto/api/transactions/trade-portal/tradeoffer/cancelAllOffers.js @@ -1,6 +1,6 @@ -import { request } from '../../../fetch-request.js' -import { deleteTradeOffer, signTradeBotTxn } from '../../../tradeRequest.js' -import { processTransaction } from '../../../createTransaction.js' +import {request} from '../../../fetch-request.js' +import {deleteTradeOffer, signTradeBotTxn} from '../../../tradeRequest.js' +import {processTransaction} from '../../../createTransaction.js' export const cancelAllOffers = async (requestObject) => { const keyPair = requestObject.keyPair diff --git a/crypto/api/transactions/transactions.js b/crypto/api/transactions/transactions.js index 4f0e92fd..75aeb35b 100644 --- a/crypto/api/transactions/transactions.js +++ b/crypto/api/transactions/transactions.js @@ -17,7 +17,6 @@ import GroupKickTransaction from './groups/GroupKickTransaction.js' import GroupInviteTransaction from './groups/GroupInviteTransaction.js' import CancelGroupInviteTransaction from './groups/CancelGroupInviteTransaction.js' import JoinGroupTransaction from './groups/JoinGroupTransaction.js' -import UpdateGroupTransaction from './groups/UpdateGroupTransaction.js' import LeaveGroupTransaction from './groups/LeaveGroupTransaction.js' import RewardShareTransaction from './reward-share/RewardShareTransaction.js' import RemoveRewardShareTransaction from './reward-share/RemoveRewardShareTransaction.js' diff --git a/crypto/api/utils/stateAwait.js b/crypto/api/utils/stateAwait.js index 8e8278f3..666eb0db 100644 --- a/crypto/api/utils/stateAwait.js +++ b/crypto/api/utils/stateAwait.js @@ -1,4 +1,4 @@ -import { store } from '../../api.js' +import {store} from '../../api.js' let subscriptions = [] diff --git a/crypto/api/wallet/publicKeyToAddress.js b/crypto/api/wallet/publicKeyToAddress.js index 1839a05b..67954a0a 100644 --- a/crypto/api/wallet/publicKeyToAddress.js +++ b/crypto/api/wallet/publicKeyToAddress.js @@ -2,9 +2,9 @@ import Base58 from '../deps/Base58.js' import BROKEN_RIPEMD160 from '../deps/broken-ripemd160.js' import RIPEMD160 from '../deps/ripemd160.js' import utils from '../deps/utils.js' -import { ADDRESS_VERSION } from '../constants.js' -import { Buffer } from 'buffer' -import { Sha256 } from 'asmcrypto.js' +import {ADDRESS_VERSION} from '../constants.js' +import {Buffer} from 'buffer' +import {Sha256} from 'asmcrypto.js' const repeatSHA256 = (passphrase, hashes) => { let hash = passphrase diff --git a/crypto/config.js b/crypto/config.js index e17ca4f2..375b5bd8 100644 --- a/crypto/config.js +++ b/crypto/config.js @@ -1,4 +1,4 @@ -import { store } from './api.js' +import {store} from './api.js' let config = false let loaded = false diff --git a/plugins/epml.js b/plugins/epml.js index 0a0489a5..41892ab8 100644 --- a/plugins/epml.js +++ b/plugins/epml.js @@ -1,4 +1,12 @@ -import { Epml, EpmlReadyPlugin, RequestPlugin, ContentWindow as EpmlContentWindowPlugin, EpmlStreamPlugin, EpmlProxyPlugin, EpmlStream } from 'epml' +import { + ContentWindow as EpmlContentWindowPlugin, + Epml, + EpmlProxyPlugin, + EpmlReadyPlugin, + EpmlStream, + EpmlStreamPlugin, + RequestPlugin +} from 'epml' Epml.registerPlugin(RequestPlugin) Epml.registerPlugin(EpmlReadyPlugin) diff --git a/plugins/plugins/core/become-minter/become-minter-css.src.js b/plugins/plugins/core/become-minter/become-minter-css.src.js index 1efb0c4d..5ed388c9 100644 --- a/plugins/plugins/core/become-minter/become-minter-css.src.js +++ b/plugins/plugins/core/become-minter/become-minter-css.src.js @@ -1,4 +1,4 @@ -import { css } from 'lit'; +import {css} from 'lit'; export const pageStyles = css` * { diff --git a/plugins/plugins/core/become-minter/become-minter.src.js b/plugins/plugins/core/become-minter/become-minter.src.js index 0a9033d4..33f4b6d2 100644 --- a/plugins/plugins/core/become-minter/become-minter.src.js +++ b/plugins/plugins/core/become-minter/become-minter.src.js @@ -1,22 +1,21 @@ -import { LitElement, html } from 'lit' -import { Epml } from '../../../epml.js' +import {html, LitElement} from 'lit' +import {Epml} from '../../../epml.js' import '../components/ButtonIconCopy.js' -import { use, translate, registerTranslateConfig } from 'lit-translate' -import { blocksNeed } from '../../utils/blocks-needed.js' +import {registerTranslateConfig, translate, use} from 'lit-translate' +import {blocksNeed} from '../../utils/blocks-needed.js' import isElectron from 'is-electron' - -registerTranslateConfig({ - loader: (lang) => fetch(`/language/${lang}.json`).then((res) => res.json()), -}) - import '@polymer/paper-spinner/paper-spinner-lite.js' import '@material/mwc-button' import '@material/mwc-textfield' import '@vaadin/button' -import { pageStyles } from './become-minter-css.src.js' +import {pageStyles} from './become-minter-css.src.js' import './components/not-sponsored.js' import './components/yes-sponsored.js' +registerTranslateConfig({ + loader: (lang) => fetch(`/language/${lang}.json`).then((res) => res.json()), +}) + const parentEpml = new Epml({ type: 'WINDOW', source: window.parent }) class BecomeMinter extends LitElement { diff --git a/plugins/plugins/core/become-minter/components/not-sponsored.js b/plugins/plugins/core/become-minter/components/not-sponsored.js index 380a992a..516c9c88 100644 --- a/plugins/plugins/core/become-minter/components/not-sponsored.js +++ b/plugins/plugins/core/become-minter/components/not-sponsored.js @@ -1,13 +1,13 @@ -import { LitElement, html } from 'lit' -import { Epml } from '../../../../epml.js' +import {html, LitElement} from 'lit' +import {Epml} from '../../../../epml.js' import '../../components/ButtonIconCopy.js' -import { use, get, translate, registerTranslateConfig } from 'lit-translate' +import {translate} from 'lit-translate' import '@polymer/paper-spinner/paper-spinner-lite.js' import '@material/mwc-button' import '@material/mwc-textfield' import '@vaadin/button' -import { pageStyles } from '../become-minter-css.src.js' +import {pageStyles} from '../become-minter-css.src.js' const parentEpml = new Epml({ type: 'WINDOW', source: window.parent }) diff --git a/plugins/plugins/core/become-minter/components/yes-sponsored.js b/plugins/plugins/core/become-minter/components/yes-sponsored.js index f4eea8cf..e1b8783b 100644 --- a/plugins/plugins/core/become-minter/components/yes-sponsored.js +++ b/plugins/plugins/core/become-minter/components/yes-sponsored.js @@ -1,14 +1,13 @@ -import { LitElement, html } from 'lit' -import { Epml } from '../../../../epml.js' +import {html, LitElement} from 'lit' import '../../components/ButtonIconCopy.js' -import { use, get, translate, registerTranslateConfig } from 'lit-translate' +import {translate} from 'lit-translate' import '@polymer/paper-spinner/paper-spinner-lite.js' import '@material/mwc-button' import '@material/mwc-textfield' import '@vaadin/button' -import { blocksNeed } from '../../../utils/blocks-needed.js' -import { pageStyles } from '../become-minter-css.src.js' +import {blocksNeed} from '../../../utils/blocks-needed.js' +import {pageStyles} from '../become-minter-css.src.js' class YesSponsored extends LitElement { static get properties() { diff --git a/plugins/plugins/core/components/ButtonIconCopy.js b/plugins/plugins/core/components/ButtonIconCopy.js index a92e8b15..2604fed8 100644 --- a/plugins/plugins/core/components/ButtonIconCopy.js +++ b/plugins/plugins/core/components/ButtonIconCopy.js @@ -1,5 +1,5 @@ -import { LitElement, html, css } from 'lit' -import { Epml } from '../../../epml.js' +import {html, LitElement} from 'lit' +import {Epml} from '../../../epml.js' import '@material/mwc-icon-button' @@ -44,10 +44,10 @@ class ButtonIconCopy extends LitElement { render() { return html` - this.saveToClipboard(this.textToCopy)} > diff --git a/plugins/plugins/core/components/ChatGifs/ChatGifs-css.js b/plugins/plugins/core/components/ChatGifs/ChatGifs-css.js index dedbdb90..41aab02b 100644 --- a/plugins/plugins/core/components/ChatGifs/ChatGifs-css.js +++ b/plugins/plugins/core/components/ChatGifs/ChatGifs-css.js @@ -1,4 +1,4 @@ -import { css } from 'lit'; +import {css} from 'lit'; export const gifExplorerStyles = css` .gifs-container { diff --git a/plugins/plugins/core/components/ChatGifs/ChatGifs.js b/plugins/plugins/core/components/ChatGifs/ChatGifs.js index 35d511e3..c5ce7bc4 100644 --- a/plugins/plugins/core/components/ChatGifs/ChatGifs.js +++ b/plugins/plugins/core/components/ChatGifs/ChatGifs.js @@ -1,16 +1,15 @@ -import {LitElement, html, css} from 'lit'; -import {render} from 'lit/html.js'; +import {html, LitElement} from 'lit'; import {Epml} from '../../../../epml.js'; import * as zip from '@zip.js/zip.js'; import '@material/mwc-icon'; import ShortUniqueId from 'short-unique-id'; import {publishData} from '../../../utils/publish-image.js'; import {gifExplorerStyles} from './ChatGifs-css.js'; -import { bytesToMegabytes } from '../../../utils/bytesToMegabytes.js'; +import {bytesToMegabytes} from '../../../utils/bytesToMegabytes.js'; import './ChatGifsExplore.js'; import '../ImageComponent.js'; import '@vaadin/tooltip'; -import { use, get, translate, translateUnsafeHTML, registerTranslateConfig } from 'lit-translate' +import {get, translate} from 'lit-translate' const parentEpml = new Epml({type: 'WINDOW', source: window.parent}); @@ -429,25 +428,25 @@ setOpenGifModal: { attribute: false } function validateGifSizes(gifs) { const maxSizeInMB = 0.7; const invalidGifs = []; - + for (let i = 0; i < gifs.length; i++) { const gif = gifs[i]; const gifSize = gif.size; - + const gifSizeMB = bytesToMegabytes(gifSize); - + if (gifSizeMB > maxSizeInMB) { invalidGifs.push(gif); } } - + if (invalidGifs.length > 0) { return false; } else { return true; } } - + let validatedSize = validateGifSizes(this.gifsToBeAdded); if (!validatedSize) { @@ -504,7 +503,7 @@ setOpenGifModal: { attribute: false } const zipFileBlob = await zipFileWriter.getData(); const zipSize = bytesToMegabytes(zipFileBlob.size); - + if (zipSize > 10) { parentEpml.request('showSnackBar', get('gifs.gchange27')); this.isLoading = false; @@ -552,13 +551,13 @@ setOpenGifModal: { attribute: false } this.gifsToBeAdded = []; this.newCollectionName = ''; parentEpml.request('showSnackBar', get('gifs.gchange12')); - } + } stop = false; } }; interval = setInterval(getAnswer, 5000); }); - + this.isLoading = false; this.setGifsLoading(false); this.mode = 'myCollection'; @@ -608,7 +607,7 @@ setOpenGifModal: { attribute: false }
-

${translate('gifs.gchange18')}

-
+
` : this.isSearched && this.exploreCollections.length === 0 ? ( html`

${translate('gifs.gchange19')}

` diff --git a/plugins/plugins/core/components/ChatGroupInvites.js b/plugins/plugins/core/components/ChatGroupInvites.js index dbb19579..f36b296c 100644 --- a/plugins/plugins/core/components/ChatGroupInvites.js +++ b/plugins/plugins/core/components/ChatGroupInvites.js @@ -1,13 +1,11 @@ -import { LitElement, html, css } from "lit" -import { render } from "lit/html.js" -import { Epml } from "../../../epml" -import snackbar from "./snackbar.js" +import {css, html, LitElement} from "lit" +import {Epml} from "../../../epml" import "@material/mwc-button" import "@material/mwc-dialog" import "@polymer/paper-spinner/paper-spinner-lite.js" import "@material/mwc-icon" import "./WrapperModal" -import { use, get, translate, translateUnsafeHTML, registerTranslateConfig } from 'lit-translate' +import {translate} from 'lit-translate' const parentEpml = new Epml({ type: "WINDOW", source: window.parent }) @@ -147,7 +145,7 @@ class ChatGroupInvites extends LitElement { } }) } - + async process(body){ return await parentEpml.request("apiCall", { type: "api", @@ -277,11 +275,11 @@ class ChatGroupInvites extends LitElement { this.isOpenLeaveModal = true }} class="top-bar-icon" style="margin: 0px 20px" icon="vaadin:users" slot="icon"> - { if (this.isLoading) return this.isOpenLeaveModal = false - }} + }} style=${ this.isOpenLeaveModal ? "display: block" : "display: none" }> @@ -289,7 +287,7 @@ class ChatGroupInvites extends LitElement {

${translate("grouppage.gchange35")}


- +
- - + + diff --git a/plugins/plugins/core/components/ChatGroupManager.js b/plugins/plugins/core/components/ChatGroupManager.js index a6fc68c2..a4f6f73a 100644 --- a/plugins/plugins/core/components/ChatGroupManager.js +++ b/plugins/plugins/core/components/ChatGroupManager.js @@ -1,5 +1,5 @@ -import { LitElement, html, css } from 'lit'; -import { Epml } from '../../../epml'; +import {css, html, LitElement} from 'lit'; +import {Epml} from '../../../epml'; import '@material/mwc-button'; import '@material/mwc-dialog'; import '@polymer/paper-spinner/paper-spinner-lite.js'; @@ -11,9 +11,7 @@ import './TipUser'; import './UserInfo/UserInfo'; import './ChatImage'; import './ReusableImage'; -import { - get -} from 'lit-translate'; +import {get} from 'lit-translate'; const parentEpml = new Epml({ type: 'WINDOW', source: window.parent }); @@ -240,10 +238,10 @@ class ChatGroupsManager extends LitElement { async getGroups() { try { - + let endpoint = `/groups` - - + + const groups = await parentEpml.request('apiCall', { type: 'api', url: endpoint, @@ -265,7 +263,7 @@ class ChatGroupsManager extends LitElement { this.getGroups() } - + elementObserver() { const options = { root: this.viewElement, @@ -314,7 +312,7 @@ class ChatGroupsManager extends LitElement { render() { console.log('this.groups', this.groups) return html` - +
{ @@ -334,8 +332,8 @@ class ChatGroupsManager extends LitElement { this.selectMyImages(e)} ?checked=${this.onlyMyImages}>
- - + +
diff --git a/plugins/plugins/core/components/ChatGroupSettings.js b/plugins/plugins/core/components/ChatGroupSettings.js index 76af8645..4caf123d 100644 --- a/plugins/plugins/core/components/ChatGroupSettings.js +++ b/plugins/plugins/core/components/ChatGroupSettings.js @@ -1,13 +1,11 @@ -import { LitElement, html, css } from 'lit' -import { render } from 'lit/html.js' -import { Epml } from '../../../epml' -import snackbar from './snackbar.js' +import {css, html, LitElement} from 'lit' +import {Epml} from '../../../epml' import '@material/mwc-button' import '@material/mwc-dialog' import '@polymer/paper-spinner/paper-spinner-lite.js' import '@material/mwc-icon' import './WrapperModal' -import { use, get, translate, translateUnsafeHTML, registerTranslateConfig } from 'lit-translate' +import {get, translate} from 'lit-translate' const parentEpml = new Epml({ type: 'WINDOW', source: window.parent }) @@ -47,7 +45,7 @@ class ChatGroupSettings extends LitElement { .top-bar-icon:hover { color: var(--black) } - + .modal-button { font-family: Roboto, sans-serif; font-size: 16px; @@ -82,7 +80,7 @@ class ChatGroupSettings extends LitElement { } async confirmRelationship() { - + let interval = null let stop = false @@ -139,8 +137,8 @@ class ChatGroupSettings extends LitElement { }) return convertedBytes } - - + + // Make Transaction Request const makeTransactionRequest = async (lastRef) => { let groupdialog3 = get("transactions.groupdialog3") @@ -235,11 +233,11 @@ class ChatGroupSettings extends LitElement { this.isOpenLeaveModal = true }} class="top-bar-icon" style="margin: 0px 20px" icon="vaadin:cog" slot="icon"> - { if(this.isLoading) return this.isOpenLeaveModal = false - } } + } } style=${(this.isOpenLeaveModal) ? "display: block" : "display: none"}>

${translate("grouppage.gchange35")}

@@ -263,15 +261,15 @@ class ChatGroupSettings extends LitElement { ${this.message}
- - + + @@ -280,4 +278,4 @@ class ChatGroupSettings extends LitElement { } } -customElements.define('chat-group-settings', ChatGroupSettings); \ No newline at end of file +customElements.define('chat-group-settings', ChatGroupSettings); diff --git a/plugins/plugins/core/components/ChatGroupsManagement.js b/plugins/plugins/core/components/ChatGroupsManagement.js index aea8a217..43c2d168 100644 --- a/plugins/plugins/core/components/ChatGroupsManagement.js +++ b/plugins/plugins/core/components/ChatGroupsManagement.js @@ -1,7 +1,5 @@ -import { LitElement, html, css } from 'lit' -import { render } from 'lit/html.js' -import { Epml } from '../../../epml' -import snackbar from './snackbar.js' +import {css, html, LitElement} from 'lit' +import {Epml} from '../../../epml' import '@material/mwc-button' import '@material/mwc-dialog' import '@polymer/paper-spinner/paper-spinner-lite.js' @@ -12,8 +10,7 @@ import '@vaadin/tabs/theme/material/vaadin-tabs.js' import '@vaadin/avatar' import '@vaadin/grid' import '@vaadin/grid/vaadin-grid-filter-column.js' -import { columnBodyRenderer } from '@vaadin/grid/lit.js' -import { use, get, translate, translateUnsafeHTML, registerTranslateConfig } from 'lit-translate' +import {get, translate} from 'lit-translate' const parentEpml = new Epml({ type: 'WINDOW', source: window.parent }) @@ -83,9 +80,9 @@ class ChatGroupsManagement extends LitElement { let _joinedGroups = await this.getJoinedGroups() this.joinedGroups = _joinedGroups } catch (error) { - + } - + } _tabChanged(e) { @@ -105,7 +102,7 @@ class ChatGroupsManagement extends LitElement { } catch (error) { fee = null } - + return fee } @@ -126,7 +123,7 @@ class ChatGroupsManagement extends LitElement { } async confirmRelationship() { - + let interval = null let stop = false @@ -155,7 +152,7 @@ class ChatGroupsManagement extends LitElement { async _leaveGroup(groupId, groupName) { // Reset Default Settings... this.resetDefaultSettings() - + const leaveFeeInput = await this.unitFee() if(!leaveFeeInput){ throw Error() @@ -230,29 +227,29 @@ class ChatGroupsManagement extends LitElement { return html` - { if(this.isLoading) return this.isOpenLeaveModal = false - } } + } } customStyle=${"width: 90%; max-width: 900px; height: 90%"} style=${(this.isOpenLeaveModal) ? "display: block" : "display: none"}> -
+
- + Groups Group Join Requests Invites Blocked Users
- +
- + ${this.currentTab === 0 ? html`
- + @@ -262,10 +259,10 @@ class ChatGroupsManagement extends LitElement {

Current groups as member

` : ''} - - + +
-
+
-
+
`; } } -customElements.define('chat-groups-management', ChatGroupsManagement); \ No newline at end of file +customElements.define('chat-groups-management', ChatGroupsManagement); diff --git a/plugins/plugins/core/components/ChatGroupsModal.js b/plugins/plugins/core/components/ChatGroupsModal.js index f6a299d0..efd29dce 100644 --- a/plugins/plugins/core/components/ChatGroupsModal.js +++ b/plugins/plugins/core/components/ChatGroupsModal.js @@ -1,7 +1,5 @@ -import { LitElement, html, css } from 'lit'; -import { - translate, -} from 'lit-translate'; +import {css, html, LitElement} from 'lit'; +import {translate,} from 'lit-translate'; import '@material/mwc-menu'; import '@material/mwc-list/mwc-list-item.js'; import '@material/mwc-dialog' @@ -22,7 +20,7 @@ export class ChatGroupsModal extends LitElement { --mdc-dialog-max-width: 85vw; --mdc-dialog-max-height: 95vh; } - + .imageContainer { display: flex; justify-content: center; @@ -69,10 +67,10 @@ export class ChatGroupsModal extends LitElement { render() { console.log('hello') return html` - - { this.setOpenDialogGroupsModal(false) }}> diff --git a/plugins/plugins/core/components/ChatHead.js b/plugins/plugins/core/components/ChatHead.js index 6ea78b2e..50b248aa 100644 --- a/plugins/plugins/core/components/ChatHead.js +++ b/plugins/plugins/core/components/ChatHead.js @@ -1,8 +1,7 @@ -import { LitElement, html, css } from 'lit' -import { render } from 'lit/html.js' -import { Epml } from '../../../epml.js' +import {css, html, LitElement} from 'lit' +import {Epml} from '../../../epml.js' import localForage from "localforage" -import { use, get, translate, translateUnsafeHTML, registerTranslateConfig } from 'lit-translate' +import {translate} from 'lit-translate' import '@material/mwc-icon' const parentEpml = new Epml({ type: 'WINDOW', source: window.parent }) @@ -29,7 +28,7 @@ class ChatHead extends LitElement { static get styles() { return css` li { - + width: 100%; padding: 10px 5px 10px 5px; cursor: pointer; @@ -121,7 +120,7 @@ class ChatHead extends LitElement { imageHTMLRes.onload = () => { this.isImageLoaded = true; } - imageHTMLRes.onerror = () => { + imageHTMLRes.onerror = () => { if (this.imageFetches < 4) { setTimeout(() => { this.imageFetches = this.imageFetches + 1 @@ -138,7 +137,7 @@ class ChatHead extends LitElement { let avatarImg = '' let backupAvatarImg = '' let isUnread = false - + if(this.chatInfo.name){ const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node] const nodeUrl = myNode.protocol + '://' + myNode.domain + ':' + myNode.port @@ -170,16 +169,16 @@ class ChatHead extends LitElement {
${this.chatInfo.groupName ? this.chatInfo.groupName : this.chatInfo.name !== undefined ? this.chatInfo.name : this.chatInfo.address.substr(0, 15)} ${this.chatInfo.groupId !== undefined ? 'lock_open' : 'lock'}
-
+
-
+
${translate('chatpage.cchange90')}
- + ` } @@ -210,7 +209,7 @@ class ChatHead extends LitElement { parentEpml.subscribe('chat_last_seen', async chatList => { const parsedChatList = JSON.parse(chatList) const findChatSeen = parsedChatList.find(chat=> chat.key === this.chatInfo.url) - + if(findChatSeen && this.lastReadMessageTimestamp !== findChatSeen.timestamp){ this.lastReadMessageTimestamp = findChatSeen.timestamp this.requestUpdate() @@ -244,20 +243,20 @@ class ChatHead extends LitElement { return true } if(changedProperties.has('chatInfo')){ - + const prevChatInfo = changedProperties.get('chatInfo') if(prevChatInfo.address !== this.chatInfo.address){ - + this.isImageLoaded = false this.requestUpdate() } return true } - + return false } - + getUrl(chatUrl) { this.setActiveChatHeadUrl(chatUrl) } diff --git a/plugins/plugins/core/components/ChatImage.js b/plugins/plugins/core/components/ChatImage.js index 35a3fde2..15e4aa38 100644 --- a/plugins/plugins/core/components/ChatImage.js +++ b/plugins/plugins/core/components/ChatImage.js @@ -1,13 +1,11 @@ -import { LitElement, html, css } from 'lit'; -import { - get, - translate, -} from 'lit-translate'; +import {css, html, LitElement} from 'lit'; +import {get, translate,} from 'lit-translate'; import axios from 'axios' -import { RequestQueueWithPromise } from '../../utils/queue'; +import {RequestQueueWithPromise} from '../../utils/queue'; import '@material/mwc-menu'; import '@material/mwc-list/mwc-list-item.js' -import { Epml } from '../../../epml'; +import {Epml} from '../../../epml'; + const requestQueue = new RequestQueueWithPromise(5); const parentEpml = new Epml({ type: 'WINDOW', source: window.parent }) @@ -27,9 +25,9 @@ export class ChatImage extends LitElement { --mdc-theme-text-primary-on-background: var(--black); } img { - max-width:45vh; - max-height:40vh; - border-radius: 5px; + max-width:45vh; + max-height:40vh; + border-radius: 5px; cursor: pointer; position: relative; } @@ -53,7 +51,7 @@ export class ChatImage extends LitElement { } .defaultSize { - width: 45vh; + width: 45vh; height: 40vh; } @@ -152,7 +150,7 @@ getMyNode(){ this.fetchResource() this.url = `${this.nodeUrl}/arbitrary/${this.resource.service}/${this.resource.name}/${this.resource.identifier}?async=true&apiKey=${this.myNode.apiKey}` - + } async fetchStatus(){ @@ -167,7 +165,7 @@ getMyNode(){ const intervalId = setInterval(async () => { if (isCalling) return isCalling = true - + const data = await requestQueue.enqueue(() => { return axios.get(`${this.nodeUrl}/arbitrary/resource/status/${this.resource.service}/${this.resource.name}/${this.resource.identifier}?apiKey=${this.myNode.apiKey}`) }); @@ -191,7 +189,7 @@ getMyNode(){ ...res, status: 'REFETCHING' } - + setTimeout(() => { isCalling = false this.fetchResource() @@ -200,7 +198,7 @@ getMyNode(){ } percentLoaded = res.percentLoaded } - + this.status = res if(this.status.status === 'DOWNLOADED'){ this.fetchResource() @@ -240,40 +238,40 @@ getMyNode(){ return true } - + showContextMenu(e) { e.preventDefault(); - e.stopPropagation(); + e.stopPropagation(); const contextMenu = this.shadowRoot.getElementById('contextMenu'); const containerRect = e.currentTarget.getBoundingClientRect(); - + // Adjusting the positions const adjustedX = e.clientX - containerRect.left; const adjustedY = e.clientY - containerRect.top; - + contextMenu.style.top = `${adjustedY}px`; contextMenu.style.left = `${adjustedX}px`; - + contextMenu.open = true; } - - - + + + async handleCopy(e) { - e.stopPropagation(); + e.stopPropagation(); const image = this.shadowRoot.querySelector('img'); - + // Create a canvas and draw the image on it. const canvas = document.createElement('canvas'); - canvas.width = image.naturalWidth; - canvas.height = image.naturalHeight; + canvas.width = image.naturalWidth; + canvas.height = image.naturalHeight; const ctx = canvas.getContext('2d'); ctx.drawImage(image, 0, 0); - + // Convert canvas image to blob canvas.toBlob(blob => { try { @@ -290,10 +288,10 @@ getMyNode(){ } }, 'image/png'); } - - - - + + + + handleMenuBlur() { setTimeout(() => { if (!this.isMenuItemClicked) { @@ -319,7 +317,7 @@ getMyNode(){ ].join(' ')} > ${ - this.status.status !== 'READY' + this.status.status !== 'READY' ? html`
- + ` - - + + } } diff --git a/plugins/plugins/core/components/ChatLeaveGroup.js b/plugins/plugins/core/components/ChatLeaveGroup.js index 1cd2c38d..bdc904f3 100644 --- a/plugins/plugins/core/components/ChatLeaveGroup.js +++ b/plugins/plugins/core/components/ChatLeaveGroup.js @@ -1,13 +1,11 @@ -import { LitElement, html, css } from 'lit' -import { render } from 'lit/html.js' -import { Epml } from '../../../epml' -import snackbar from './snackbar.js' +import {css, html, LitElement} from 'lit' +import {Epml} from '../../../epml' import '@material/mwc-button' import '@material/mwc-dialog' import '@polymer/paper-spinner/paper-spinner-lite.js' import '@material/mwc-icon' import './WrapperModal' -import { use, get, translate, translateUnsafeHTML, registerTranslateConfig } from 'lit-translate' +import {get, translate} from 'lit-translate' const parentEpml = new Epml({ type: 'WINDOW', source: window.parent }) @@ -61,7 +59,7 @@ class ChatLeaveGroup extends LitElement { } firstUpdated() { - + } async unitFee() { @@ -77,7 +75,7 @@ class ChatLeaveGroup extends LitElement { } catch (error) { fee = null } - + return fee } @@ -98,7 +96,7 @@ class ChatLeaveGroup extends LitElement { } async confirmRelationship() { - + let interval = null let stop = false @@ -127,7 +125,7 @@ class ChatLeaveGroup extends LitElement { async _leaveGroup(groupId, groupName) { // Reset Default Settings... this.resetDefaultSettings() - + const leaveFeeInput = await this.unitFee() if(!leaveFeeInput){ throw Error() @@ -195,17 +193,17 @@ class ChatLeaveGroup extends LitElement { this.isOpenLeaveModal = true }} class="top-bar-icon" style="margin: 0px 20px" icon="vaadin:exit" slot="icon"> - { if(this.isLoading) return this.isOpenLeaveModal = false - } } + } } style=${(this.isOpenLeaveModal) ? "display: block" : "display: none"}>

${translate("grouppage.gchange35")}


- +
${translate("grouppage.gchange4")}
@@ -243,7 +241,7 @@ class ChatLeaveGroup extends LitElement { ${this.message}
- + @@ -266,4 +264,4 @@ class ChatLeaveGroup extends LitElement { } } -customElements.define('chat-leave-group', ChatLeaveGroup); \ No newline at end of file +customElements.define('chat-leave-group', ChatLeaveGroup); diff --git a/plugins/plugins/core/components/ChatMessage.js b/plugins/plugins/core/components/ChatMessage.js index 49c76c2e..79185a81 100644 --- a/plugins/plugins/core/components/ChatMessage.js +++ b/plugins/plugins/core/components/ChatMessage.js @@ -1,7 +1,5 @@ -import { LitElement, html, css } from 'lit' -import { render } from 'lit/html.js' -import { Epml } from '../../../epml.js' -import { use, get, translate, translateUnsafeHTML, registerTranslateConfig } from 'lit-translate' +import {css, html, LitElement} from 'lit' +import {Epml} from '../../../epml.js' const parentEpml = new Epml({ type: 'WINDOW', source: window.parent }) diff --git a/plugins/plugins/core/components/ChatModals.js b/plugins/plugins/core/components/ChatModals.js index 1da17e7c..5b787673 100644 --- a/plugins/plugins/core/components/ChatModals.js +++ b/plugins/plugins/core/components/ChatModals.js @@ -1,8 +1,7 @@ -import { LitElement, html, css } from 'lit' -import { render } from 'lit/html.js' -import { Epml } from '../../../epml' +import {css, html, LitElement} from 'lit' +import {Epml} from '../../../epml' import snackbar from './snackbar.js' -import { use, get, translate, translateUnsafeHTML, registerTranslateConfig } from 'lit-translate' +import {get, translate} from 'lit-translate' import '@material/mwc-button' import '@material/mwc-dialog' @@ -343,10 +342,10 @@ class ChatModals extends LitElement { render() { return html` - - this.hideBlockUserModal()} @@ -408,4 +407,4 @@ class ChatModals extends LitElement { } } -customElements.define('chat-modals', ChatModals) \ No newline at end of file +customElements.define('chat-modals', ChatModals) diff --git a/plugins/plugins/core/components/ChatPage-css.js b/plugins/plugins/core/components/ChatPage-css.js index 50d62389..2356129b 100644 --- a/plugins/plugins/core/components/ChatPage-css.js +++ b/plugins/plugins/core/components/ChatPage-css.js @@ -1,10 +1,10 @@ -import { css } from 'lit' +import {css} from 'lit' export const chatpageStyles = css` html { scroll-behavior: smooth; } - + .chat-head-container { display: flex; justify-content: flex-start; @@ -49,7 +49,7 @@ export const chatpageStyles = css` cursor: pointer; color: #494c50; } - + .chat-text-area .typing-area .chatbar { position: relative; display: flex; @@ -159,7 +159,7 @@ export const chatpageStyles = css` .dialogCustomInner ul { padding-left: 0px } - + .dialogCustomInner li { margin-bottom: 10px; } @@ -236,7 +236,7 @@ export const chatpageStyles = css` align-items: center; padding: 10px 10px 8px 10px; } - + .repliedTo-subcontainer { display: flex; flex-direction: row; @@ -286,7 +286,7 @@ export const chatpageStyles = css` cursor: pointer; color: #494c50; } - + .chatbar-container { width: 100%; display: flex; @@ -358,7 +358,7 @@ export const chatpageStyles = css` left: 48px; animation-delay: -1.2s; } - + .lds-grid div:nth-child(9) { top: 95px; left: 90px; @@ -372,7 +372,7 @@ export const chatpageStyles = css` 50% { opacity: 0.5; } - } + } .float-left { float: left; @@ -397,7 +397,7 @@ export const chatpageStyles = css` overflow-x: hidden; width: 100%; } - + .repliedTo-container { display: flex; flex-direction: row; @@ -405,14 +405,14 @@ export const chatpageStyles = css` align-items: center; padding: 10px 10px 8px 10px; } - + .senderName { margin: 0; color: var(--mdc-theme-primary); font-weight: bold; user-select: none; } - + .original-message { color: var(--chat-bubble-msg-color); text-overflow: ellipsis; @@ -421,19 +421,19 @@ export const chatpageStyles = css` margin: 0; width: 800px; } - - + + .close-icon { color: #676b71; width: 18px; transition: all 0.1s ease-in-out; } - + .close-icon:hover { cursor: pointer; color: #494c50; } - + .chat-text-area .typing-area .chatbar { position: relative; display: flex; @@ -444,7 +444,7 @@ export const chatpageStyles = css` padding: 5px 5px 5px 7px; overflow: hidden; } - + .chat-text-area .typing-area .emoji-button { width: 45px; height: 40px; @@ -456,7 +456,7 @@ export const chatpageStyles = css` max-height: 40px; color: var(--black); } - + .emoji-button-caption { width: 45px; height: 40px; @@ -468,7 +468,7 @@ export const chatpageStyles = css` max-height: 40px; color: var(--black); } - + .caption-container { width: 100%; display: flex; @@ -479,7 +479,7 @@ export const chatpageStyles = css` padding: 5px; border-radius: 1px; } - + .chatbar-caption { font-family: Roboto, sans-serif; width: 70%; @@ -494,19 +494,19 @@ export const chatpageStyles = css` border-bottom: 1px solid #cac8c8; padding: 3px; } - + .message-size-container { display: flex; justify-content: flex-end; width: 100%; } - + .message-size { font-family: Roboto, sans-serif; font-size: 12px; color: black; } - + .lds-grid { width: 120px; height: 120px; @@ -514,11 +514,11 @@ export const chatpageStyles = css` left: 50%; top: 40%; } - + img { border-radius: 25%; } - + .dialogCustom { position: fixed; z-index: 10000; @@ -530,7 +530,7 @@ export const chatpageStyles = css` right: 20px; user-select: none; } - + .dialogCustomInner { min-width: 300px; height: 40px; @@ -539,19 +539,19 @@ export const chatpageStyles = css` padding: 10px; border-radius: 4px; } - + .dialogCustomInner ul { padding-left: 0px } - + .dialogCustomInner li { margin-bottom: 10px; } - + .marginLoader { margin-right: 8px; } - + .last-message-ref { position: absolute; font-size: 18px; @@ -565,21 +565,21 @@ export const chatpageStyles = css` border-radius: 50%; transition: all 0.1s ease-in-out; } - + .last-message-ref:hover { cursor: pointer; transform: scale(1.1); } - + .arrow-down-icon { transform: scale(1.15); } - + .chat-container { display: grid; max-height: 100%; } - + .chat-text-area { display: flex; position: relative; @@ -587,7 +587,7 @@ export const chatpageStyles = css` min-height: 60px; max-height: 100%; } - + .chat-text-area .typing-area { display: flex; flex-direction: column; @@ -598,11 +598,11 @@ export const chatpageStyles = css` border-radius: 10px; background: var(--chat-bubble-bg); } - + .chat-text-area .typing-area textarea { display: none; } - + .chat-text-area .typing-area .chat-editor { display: flex; max-height: -webkit-fill-available; @@ -612,7 +612,7 @@ export const chatpageStyles = css` padding: 0; border: none; } - + .repliedTo-container { display: flex; flex-direction: row; @@ -620,7 +620,7 @@ export const chatpageStyles = css` align-items: center; padding: 10px 10px 8px 10px; } - + .repliedTo-subcontainer { display: flex; flex-direction: row; @@ -628,7 +628,7 @@ export const chatpageStyles = css` gap: 15px; width: 100%; } - + .repliedTo-message { display: flex; flex-direction: column; @@ -643,41 +643,41 @@ export const chatpageStyles = css` margin: 0px; padding: 0px; } - + .repliedTo-message pre { white-space: pre-wrap; } - + .repliedTo-message p mark { background-color: #ffe066; border-radius: 0.25em; box-decoration-break: clone; padding: 0.125em 0; } - + .reply-icon { width: 20px; color: var(--mdc-theme-primary); } - + .close-icon { color: #676b71; width: 18px; transition: all 0.1s ease-in-out; } - + .close-icon:hover { cursor: pointer; color: #494c50; } - + .chatbar-container { width: 100%; display: flex; height: auto; overflow: hidden; } - + .lds-grid { width: 120px; height: 120px; @@ -685,7 +685,7 @@ export const chatpageStyles = css` left: 50%; top: 40%; } - + .lds-grid div { position: absolute; width: 34px; @@ -694,61 +694,61 @@ export const chatpageStyles = css` background: #03a9f4; animation: lds-grid 1.2s linear infinite; } - + .lds-grid div:nth-child(1) { top: 4px; left: 4px; animation-delay: 0s; } - + .lds-grid div:nth-child(2) { top: 4px; left: 48px; animation-delay: -0.4s; } - + .lds-grid div:nth-child(3) { top: 4px; left: 90px; animation-delay: -0.8s; } - + .lds-grid div:nth-child(4) { top: 50px; left: 4px; animation-delay: -0.4s; } - + .lds-grid div:nth-child(5) { top: 50px; left: 48px; animation-delay: -0.8s; } - + .lds-grid div:nth-child(6) { top: 50px; left: 90px; animation-delay: -1.2s; } - + .lds-grid div:nth-child(7) { top: 95px; left: 4px; animation-delay: -0.8s; } - + .lds-grid div:nth-child(8) { top: 95px; left: 48px; animation-delay: -1.2s; } - + .lds-grid div:nth-child(9) { top: 95px; left: 90px; animation-delay: -1.6s; } - + @keyframes lds-grid { 0%, 100% { opacity: 1; @@ -756,16 +756,16 @@ export const chatpageStyles = css` 50% { opacity: 0.5; } - } - + } + .float-left { float: left; } - + img { border-radius: 25%; } - + paper-dialog.warning { width: 50%; max-width: 50vw; @@ -782,7 +782,7 @@ export const chatpageStyles = css` .buttons { text-align:right; } - + .dialogCustom { position: fixed; z-index: 10000; @@ -794,11 +794,11 @@ export const chatpageStyles = css` right: 20px; user-select: none; } - + .dialogCustom p { color: var(--black) } - + .dialogCustomInner { min-width: 300px; height: 40px; @@ -807,26 +807,26 @@ export const chatpageStyles = css` padding: 10px; border-radius: 4px; } - + .dialogCustomInner ul { padding-left: 0px } - + .dialogCustomInner li { margin-bottom: 10px; } - + .marginLoader { margin-right: 8px; } - + .smallLoading, .smallLoading:after { border-radius: 50%; width: 2px; height: 2px; } - + .smallLoading { border-width: 0.8em; border-style: solid; @@ -838,7 +838,7 @@ export const chatpageStyles = css` transform: translateZ(0px); animation: 1.1s linear 0s infinite normal none running loadingAnimation; } - + @-webkit-keyframes loadingAnimation { 0% { -webkit-transform: rotate(0deg); @@ -849,7 +849,7 @@ export const chatpageStyles = css` transform: rotate(360deg); } } - + @keyframes loadingAnimation { 0% { -webkit-transform: rotate(0deg); @@ -860,9 +860,9 @@ export const chatpageStyles = css` transform: rotate(360deg); } } - + /* Add Image Modal Dialog Styling */ - + .dialog-container { position: relative; display: flex; @@ -872,14 +872,14 @@ export const chatpageStyles = css` gap: 10px; height: 100%; } - + .dialog-container-title { font-family: Montserrat; color: var(--black); font-size: 20px; margin: 15px 0 0 0; } - + .divider { height: 1px; background-color: var(--chat-bubble-msg-color); @@ -887,7 +887,7 @@ export const chatpageStyles = css` width: 70%; margin-bottom: 20px; } - + .dialog-container-loader { position: relative; display: flex; @@ -896,14 +896,14 @@ export const chatpageStyles = css` gap: 10px; height: 100%; } - + .dialog-image { width: 100%; max-height: 300px; border-radius: 0; object-fit: contain; } - + .chat-right-panel { flex: 0; border-left: 3px solid rgb(221, 221, 221); @@ -911,30 +911,30 @@ export const chatpageStyles = css` overflow-y: auto; background: transparent; } - + .movedin { flex: 1 !important; background: transparent; } - + .main-container { display: flex; height: 100%; } - + .group-nav-container { display: flex; - height: 40px; - padding: 5px; + height: 40px; + padding: 5px; margin: 0px; - background-color: var(--chat-bubble-bg); - box-sizing: border-box; + background-color: var(--chat-bubble-bg); + box-sizing: border-box; align-items: center; justify-content: space-between; box-shadow: var(--group-drop-shadow); z-index: 1; } - + .top-bar-icon { border-radius: 50%; color: var(--chat-bubble-msg-color); @@ -942,13 +942,13 @@ export const chatpageStyles = css` padding: 5px; background-color: transparent; } - + .top-bar-icon:hover { background-color: #e6e6e69b; cursor: pointer; color: var(--black) } - + .group-name { font-family: Raleway, sans-serif; font-size: 16px; @@ -956,8 +956,8 @@ export const chatpageStyles = css` margin:0px; padding:0px; } - - + + .modal-button { font-family: Roboto, sans-serif; font-size: 16px; @@ -968,7 +968,7 @@ export const chatpageStyles = css` border: none; transition: all 0.3s ease-in-out; } - + .modal-button-red { font-family: Roboto, sans-serif; font-size: 16px; @@ -979,17 +979,17 @@ export const chatpageStyles = css` border: none; transition: all 0.3s ease-in-out; } - + .modal-button-red:hover { cursor: pointer; background-color: #f4433663; } - + .modal-button:hover { cursor: pointer; background-color: #03a8f475; } - + .name-input { width: 100%; margin-bottom: 15px; @@ -1003,29 +1003,29 @@ export const chatpageStyles = css` color: var(--chat-bubble-msg-color); box-sizing: border-box; } - + .name-input::selection { background-color: var(--mdc-theme-primary); - color: white; + color: white; } - + .name-input::placeholder { opacity: 0.9; color: var(--black); } - + .search-results-div { position: absolute; top: 25px; right: 25px; } - + .search-field { width: 100%; position: relative; margin-bottom: 5px; } - + .search-icon { position: absolute; right: 3px; @@ -1037,12 +1037,12 @@ export const chatpageStyles = css` padding: 6px 3px; font-size: 21px; } - + .search-icon:hover { cursor: pointer; background: #d7d7d75c; } - + .user-verified { position: absolute; top: 0; @@ -1053,7 +1053,7 @@ export const chatpageStyles = css` color: #04aa2e; font-size: 13px; } - + .user-selected { display: flex; justify-content: space-between; @@ -1065,30 +1065,30 @@ export const chatpageStyles = css` border-radius: 5px; background-color: #ececec96; } - + .user-selected-name { font-family: Roboto, sans-serif; margin: 0; font-size: 16px; } - + .forwarding-container { display: flex; gap: 15px; } - + .user-selected-forwarding { font-family: Livvic, sans-serif; margin: 0; font-size: 16px; } - + .close-forwarding { color: #676b71; width: 14px; transition: all 0.1s ease-in-out; } - + .close-forwarding:hover { cursor: pointer; color: #4e5054; @@ -1110,7 +1110,7 @@ export const chatpageStyles = css` to { transform: translateY(0); } - } + } .gifs-backdrop { top: 0; @@ -1142,7 +1142,7 @@ export const chatpageStyles = css` .attachment-icon { width: 70%; } - + .attachment-name { font-family: Work Sans, sans-serif; font-size: 20px; diff --git a/plugins/plugins/core/components/ChatPage.js b/plugins/plugins/core/components/ChatPage.js index c315007d..b00a6d0b 100644 --- a/plugins/plugins/core/components/ChatPage.js +++ b/plugins/plugins/core/components/ChatPage.js @@ -1,15 +1,14 @@ -import { LitElement, html } from 'lit' -import { animate } from '@lit-labs/motion' -import { Epml } from '../../../epml.js' -import { get, translate } from 'lit-translate' -import { generateHTML } from '@tiptap/core' -import { unsafeHTML } from 'lit/directives/unsafe-html.js' -import { Editor, Extension } from '@tiptap/core' -import { escape } from 'html-escaper' -import { inputKeyCodes } from '../../utils/keyCodes.js' -import { replaceMessagesEdited } from '../../utils/replace-messages-edited.js' -import { publishData } from '../../utils/publish-image.js' -import { EmojiPicker } from 'emoji-picker-js' +import {html, LitElement} from 'lit' +import {animate} from '@lit-labs/motion' +import {Epml} from '../../../epml.js' +import {get, translate} from 'lit-translate' +import {Editor, Extension, generateHTML} from '@tiptap/core' +import {unsafeHTML} from 'lit/directives/unsafe-html.js' +import {escape} from 'html-escaper' +import {inputKeyCodes} from '../../utils/keyCodes.js' +import {replaceMessagesEdited} from '../../utils/replace-messages-edited.js' +import {publishData} from '../../utils/publish-image.js' +import {EmojiPicker} from 'emoji-picker-js' import {ifDefined} from 'lit/directives/if-defined.js'; @@ -45,10 +44,10 @@ import '@material/mwc-dialog' import '@material/mwc-icon' import '@polymer/paper-dialog/paper-dialog.js' import '@polymer/paper-spinner/paper-spinner-lite.js' -import { RequestQueue } from '../../utils/queue.js' -import { modalHelper } from '../../utils/publish-modal.js' -import { generateIdFromAddresses } from '../../utils/id-generation.js' -import { chatpageStyles } from './ChatPage-css.js' +import {RequestQueue} from '../../utils/queue.js' +import {modalHelper} from '../../utils/publish-modal.js' +import {generateIdFromAddresses} from '../../utils/id-generation.js' +import {chatpageStyles} from './ChatPage-css.js' const chatLastSeen = localForage.createInstance({ name: "chat-last-seen", @@ -141,7 +140,7 @@ class ChatPage extends LitElement { } - + constructor() { super() this.getOldMessage = this.getOldMessage.bind(this) @@ -308,7 +307,7 @@ class ChatPage extends LitElement { addToQueue(outSideMsg, messageQueue) { // Push the new message object to the queue - + this.messageQueue = [...messageQueue, { ...outSideMsg, timestamp: Date.now()}]; // Start processing the queue only if the message we just added is the only one in the queue @@ -316,7 +315,7 @@ class ChatPage extends LitElement { if (this.messageQueue.length === 1) { this.processQueue(); } - + // Notify Lit to update/render due to the property change this.requestUpdate(); } @@ -331,7 +330,7 @@ class ChatPage extends LitElement { } else { throw new Error('failed') } - + if (this.messageQueue.length > 0) { setTimeout(() => this.processQueue(), 2000); // Wait for 10 seconds before retrying // setTimeout(() => this.processQueue(), 0); // Process the next message immediately @@ -341,20 +340,20 @@ class ChatPage extends LitElement { setTimeout(() => this.processQueue(), 10000); // Wait for 10 seconds before retrying } } - + async getLastestMessages(){ try { let getInitialMessages = [] if (this.isReceipient) { - + getInitialMessages = await parentEpml.request('apiCall', { type: 'api', url: `/chat/messages?involving=${window.parent.reduxStore.getState().app.selectedAddress.address}&involving=${this._chatId}&limit=${chatLimit}&reverse=true&haschatreference=false&encoding=BASE64` }) - + } else { getInitialMessages = await parentEpml.request('apiCall', { @@ -381,15 +380,15 @@ class ChatPage extends LitElement { console.error('Copy to clipboard error:', err); } } - + render() { return html`
-
- +
{ if(+this._chatId === 0 || this.isReceipient)return @@ -400,7 +399,7 @@ class ChatPage extends LitElement { ` : html`

${this.groupInfo && this.groupInfo.groupName}

`} - +
${(!this.isReceipient && +this._chatId !== 0 && this.groupInfo.isOpen) ? @@ -416,7 +415,7 @@ class ChatPage extends LitElement { : ''}
- +
${this.isLoadingMessages ? html` @@ -434,14 +433,14 @@ class ChatPage extends LitElement { ` : this.renderChatScroller()}
-
{ if (this.gifsLoading) return; this.setOpenGifModal(false); this.editor.commands.focus("end"); this.shadowRoot.querySelector("chat-gifs").clearGifSelections(); - }} + }} style=${this.openGifModal ? "visibility: visible; z-index: 4" : "visibility: hidden; z-index: -100"}>
@@ -449,8 +448,8 @@ class ChatPage extends LitElement {
` : ''}
-
{ const chatScrollerElement = this.shadowRoot.querySelector('chat-scroller'); @@ -462,7 +461,7 @@ class ChatPage extends LitElement { behavior: 'smooth', }); } - + }}>
@@ -542,12 +541,12 @@ class ChatPage extends LitElement { .setOpenGifModal=${(val) => this.setOpenGifModal(val)} chatId=${this.chatId} .messageQueue=${this.messageQueue} - > + >
- + ${(this.isUploadingImage || this.isDeletingImage) ? html`
@@ -557,8 +556,8 @@ class ChatPage extends LitElement { ${this.isDeletingImage ? translate("chatpage.cchange31") : translate("chatpage.cchange30")}

-
-
+
+
`: ''} @@ -571,15 +570,15 @@ class ChatPage extends LitElement { ${this.isDeletingAttachment ? translate("chatpage.cchange76") : translate("chatpage.cchange75")}

- - + + `: ''} - { this.removeImage() - }} + }} style=${(this.imageFile && !this.isUploadingImage) ? "visibility:visible; z-index:50" : "visibility: hidden;z-index:-100"}>
@@ -622,12 +621,12 @@ class ChatPage extends LitElement {
- +
- { this.removeAttachment() - }} + }} style=${this.attachment && !this.isUploadingAttachment ? "visibility: visible; z-index: 50" : "visibility: hidden; z-index: -100"}>
@@ -674,7 +673,7 @@ class ChatPage extends LitElement {
- +

${translate("chatpage.cchange41")}

@@ -685,12 +684,12 @@ class ChatPage extends LitElement { this.sendMessage(this.myTrimmedMeassage)} dialog-confirm>${translate("transpage.tchange3")}
- { this.openForwardOpen = false this.forwardActiveChatHeadUrl = {} this.requestUpdate() - }} + }} style=${this.openForwardOpen ? "display: block" : "display: none"}>
@@ -700,11 +699,11 @@ class ChatPage extends LitElement {
- { if (this.forwardActiveChatHeadUrl.selected) { this.forwardActiveChatHeadUrl = {} @@ -721,16 +720,16 @@ class ChatPage extends LitElement {
` ) : ( - html` - ` )} -
+
${this.forwardActiveChatHeadUrl.selected ? ( html`
@@ -741,7 +740,7 @@ class ChatPage extends LitElement {

Forwarding...

- { return html` - { this.forwardActiveChatHeadUrl = { ...this.forwardActiveChatHeadUrl, url: val } this.userFound = [] - }} + }} chatInfo=${JSON.stringify(item)}> ` })} ` )}
- +
- { this.forwardActiveChatHeadUrl = { ...this.forwardActiveChatHeadUrl, @@ -814,7 +813,7 @@ class ChatPage extends LitElement { ?loading=${this.isLoading}>
- +
{ @@ -828,12 +827,12 @@ class ChatPage extends LitElement { .setOpenTipUser=${(val) => this.setOpenTipUser(val)}> - { this.setOpenUserInfo(false) this.setUserName("") this.setSelectedHead({}) - }} + }} style=${this.openUserInfo ? "display: block" : "display: none" }> this.setOpenTipUser(val)} .setOpenPrivateMessage=${(val) => this.setOpenPrivateMessage(val)} .userName=${this.userName} - .selectedHead=${this.selectedHead} + .selectedHead=${this.selectedHead} >
- this.getMoreMembers(val)} - .toggle=${(val) => this._toggle(val)} - .selectedAddress=${this.selectedAddress} - .groupMembers=${this.groupMembers} - .groupAdmin=${this.groupAdmin} + this.getMoreMembers(val)} + .toggle=${(val) => this._toggle(val)} + .selectedAddress=${this.selectedAddress} + .groupMembers=${this.groupMembers} + .groupAdmin=${this.groupAdmin} .leaveGroupObj=${this.groupInfo} .setOpenPrivateMessage=${(val) => this.setOpenPrivateMessage(val)} .setOpenTipUser=${(val) => this.setOpenTipUser(val)} @@ -862,11 +861,11 @@ class ChatPage extends LitElement {
this.getMoreMembers(val)} - .toggle=${(val) => this._toggleResources(val)} - .selectedAddress=${this.selectedAddress} - .groupMembers=${this.groupMembers} - .groupAdmin=${this.groupAdmin} + .getMoreMembers=${(val) => this.getMoreMembers(val)} + .toggle=${(val) => this._toggleResources(val)} + .selectedAddress=${this.selectedAddress} + .groupMembers=${this.groupMembers} + .groupAdmin=${this.groupAdmin} .leaveGroupObj=${this.groupInfo} .setOpenPrivateMessage=${(val) => this.setOpenPrivateMessage(val)} .setOpenTipUser=${(val) => this.setOpenTipUser(val)} @@ -1098,7 +1097,7 @@ class ChatPage extends LitElement { } } } - + async pasteImage(e) { const event = e @@ -1166,7 +1165,7 @@ class ChatPage extends LitElement { return } - + const findOriginalMessage = this.shadowRoot.querySelector('chat-scroller').shadowRoot.getElementById(clickedOnMessage.signature) if (findOriginalMessage) { const messageClientRect = findOriginalMessage.getBoundingClientRect() @@ -1177,10 +1176,10 @@ class ChatPage extends LitElement { top: messageClientRect.top, offsetHeight: findOriginalMessage.offsetHeight } - + await this.getOldMessageDynamic(0, clickedOnMessage.timestamp, message) await this.getUpdateComplete() - + const marginElements = Array.from(this.shadowRoot.querySelector('chat-scroller').shadowRoot.querySelectorAll('message-template')) const findMessage2 = marginElements.find((item) => item.messageObj.signature === message.signature) || marginElements.find((item) => item.messageObj.originalSignature === message.signature) || marginElements.find((item) => item.messageObj.signature === message.originalSignature) || marginElements.find((item) => item.messageObj.originalSignature === message.originalSignature) if (findMessage2) { @@ -1412,9 +1411,9 @@ class ChatPage extends LitElement { async firstUpdated() { this.changeTheme() - + // this.processQueue(); - + window.addEventListener('storage', () => { const checkLanguage = localStorage.getItem('qortalLanguage') const checkTheme = localStorage.getItem('qortalTheme') @@ -1429,9 +1428,9 @@ class ChatPage extends LitElement { document.querySelector('html').setAttribute('theme', this.theme) }) - + this.lastReadMessageTimestamp = await chatLastSeen.getItem(this.chatId) || 0 - + parentEpml.imReady() const isEnabledChatEnter = localStorage.getItem('isEnabledChatEnter') @@ -1474,7 +1473,7 @@ class ChatPage extends LitElement { this.isLoadingMessages = true this.initUpdate() - + if (previousChatId) { window.parent.reduxStore.dispatch(window.parent.reduxAction.addChatLastSeen({ @@ -1498,7 +1497,7 @@ class ChatPage extends LitElement { } return true - + } async getName(recipient) { @@ -1548,11 +1547,11 @@ class ChatPage extends LitElement { renderChatScroller() { return html` - this.setRepliedToMessageObj(val)} @@ -1560,7 +1559,7 @@ class ChatPage extends LitElement { .sendMessage=${(val) => this._sendMessage(val)} .sendMessageForward=${(messageText, typeMessage, chatReference, isForward, forwardParams) => this.sendMessage(messageText, typeMessage, chatReference, isForward, forwardParams)} .showLastMessageRefScroller=${(val) => this.showLastMessageRefScroller(val)} - .emojiPicker=${this.emojiPicker} + .emojiPicker=${this.emojiPicker} ?isLoadingMessages=${this.isLoadingOldMessages} .setIsLoadingMessages=${(val) => this.setIsLoadingMessages(val)} .setForwardProperties=${(forwardedMessage) => this.setForwardProperties(forwardedMessage)} @@ -1637,19 +1636,19 @@ class ChatPage extends LitElement { let decodeMsgs = [] await new Promise((res, rej) => { this.webWorkerDecodeMessages.postMessage({messages: getInitialMessages, isReceipient: this.isReceipient, _publicKey: this._publicKey, privateKey: window.parent.reduxStore.getState().app.selectedAddress.keyPair.privateKey }); - + this.webWorkerDecodeMessages.onmessage = e => { decodeMsgs = e.data res() - + } this.webWorkerDecodeMessages.onerror = () => { rej() - + } }) - + queue.push(() => replaceMessagesEdited({ decodedMessages: decodeMsgs, parentEpml, @@ -1661,16 +1660,16 @@ class ChatPage extends LitElement { let list = [...decodeMsgs] - + await new Promise((res) => { - + this.webWorkerSortMessages.postMessage({list}); - + this.webWorkerSortMessages.onmessage = e => { - + list = e.data res() - + } }) const lastMsg = list.at(-1) @@ -1686,10 +1685,10 @@ class ChatPage extends LitElement { count } } - + this.isLoadingOldMessages = false - + } else { const getInitialMessagesBefore = await parentEpml.request('apiCall', { type: 'api', @@ -1704,15 +1703,15 @@ class ChatPage extends LitElement { let decodeMsgs = [] await new Promise((res, rej) => { this.webWorkerDecodeMessages.postMessage({messages: getInitialMessages, isReceipient: this.isReceipient, _publicKey: this._publicKey, privateKey: window.parent.reduxStore.getState().app.selectedAddress.keyPair.privateKey }); - + this.webWorkerDecodeMessages.onmessage = e => { decodeMsgs = e.data res() - + } this.webWorkerDecodeMessages.onerror = () => { rej() - + } }) @@ -1724,22 +1723,22 @@ class ChatPage extends LitElement { _publicKey: this._publicKey, addToUpdateMessageHashmap: this.addToUpdateMessageHashmap })); - - + + let list = [...decodeMsgs] - + await new Promise((res) => { - + this.webWorkerSortMessages.postMessage({list}); - + this.webWorkerSortMessages.onmessage = e => { - + list = e.data res() - + } }) - + const lastMsg = list.at(-1) if(lastMsg){ const count = await parentEpml.request('apiCall', { @@ -1753,11 +1752,11 @@ class ChatPage extends LitElement { count } } - + this.isLoadingOldMessages = false - + } } @@ -1778,18 +1777,18 @@ class ChatPage extends LitElement { let decodeMsgs = [] await new Promise((res, rej) => { this.webWorkerDecodeMessages.postMessage({messages: getInitialMessages, isReceipient: this.isReceipient, _publicKey: this._publicKey, privateKey: window.parent.reduxStore.getState().app.selectedAddress.keyPair.privateKey }); - + this.webWorkerDecodeMessages.onmessage = e => { decodeMsgs = e.data res() - + } this.webWorkerDecodeMessages.onerror = () => { rej() - + } }) - + queue.push(() => replaceMessagesEdited({ decodedMessages: decodeMsgs, parentEpml, @@ -1798,11 +1797,11 @@ class ChatPage extends LitElement { _publicKey: this._publicKey, addToUpdateMessageHashmap: this.addToUpdateMessageHashmap })); - + let list = [...decodeMsgs] - - - + + + this.messagesRendered = { messages: list, type: 'old', @@ -1826,22 +1825,22 @@ class ChatPage extends LitElement { let decodeMsgs = [] - + await new Promise((res, rej) => { this.webWorkerDecodeMessages.postMessage({messages: getInitialMessages, isReceipient: this.isReceipient, _publicKey: this._publicKey, privateKey: window.parent.reduxStore.getState().app.selectedAddress.keyPair.privateKey }); - + this.webWorkerDecodeMessages.onmessage = e => { decodeMsgs = e.data res() - + } this.webWorkerDecodeMessages.onerror = () => { rej() - + } }) - - + + queue.push(() => replaceMessagesEdited({ decodedMessages: decodeMsgs, parentEpml, @@ -1851,9 +1850,9 @@ class ChatPage extends LitElement { addToUpdateMessageHashmap: this.addToUpdateMessageHashmap })); let list = [...decodeMsgs] - - - + + + this.messagesRendered = { messages: list, type: 'old', @@ -1878,7 +1877,7 @@ class ChatPage extends LitElement { return } const timestamp = scrollElement.messageObj.timestamp - + if (this.isReceipient) { const getInitialMessages = await parentEpml.request('apiCall', { type: 'api', @@ -1888,19 +1887,19 @@ class ChatPage extends LitElement { let decodeMsgs = [] await new Promise((res, rej) => { this.webWorkerDecodeMessages.postMessage({messages: getInitialMessages, isReceipient: this.isReceipient, _publicKey: this._publicKey, privateKey: window.parent.reduxStore.getState().app.selectedAddress.keyPair.privateKey }); - + this.webWorkerDecodeMessages.onmessage = e => { decodeMsgs = e.data res() - + } this.webWorkerDecodeMessages.onerror = () => { rej() - + } }) - + queue.push(() => replaceMessagesEdited({ decodedMessages: decodeMsgs, parentEpml, @@ -1909,26 +1908,26 @@ class ChatPage extends LitElement { _publicKey: this._publicKey, addToUpdateMessageHashmap: this.addToUpdateMessageHashmap })); - + let list = [ ...decodeMsgs] - + await new Promise((res) => { - + this.webWorkerSortMessages.postMessage({list}); - + this.webWorkerSortMessages.onmessage = e => { - + list = e.data res() - + } }) - + this.messagesRendered = { messages: list, type: 'new' } - + this.isLoadingOldMessages = false await this.getUpdateComplete() @@ -1947,19 +1946,19 @@ class ChatPage extends LitElement { let decodeMsgs = [] await new Promise((res, rej) => { this.webWorkerDecodeMessages.postMessage({messages: getInitialMessages, isReceipient: this.isReceipient, _publicKey: this._publicKey, privateKey: window.parent.reduxStore.getState().app.selectedAddress.keyPair.privateKey }); - + this.webWorkerDecodeMessages.onmessage = e => { decodeMsgs = e.data res() - + } this.webWorkerDecodeMessages.onerror = () => { rej() - + } }) - + queue.push(() => replaceMessagesEdited({ decodedMessages: decodeMsgs, parentEpml, @@ -1969,22 +1968,22 @@ class ChatPage extends LitElement { addToUpdateMessageHashmap: this.addToUpdateMessageHashmap })); - + let list = [...decodeMsgs] - + await new Promise((res) => { - + this.webWorkerSortMessages.postMessage({list}); - + this.webWorkerSortMessages.onmessage = e => { - + list = e.data res() - + } }) - + this.messagesRendered = { messages: list, type: 'new' @@ -2002,8 +2001,8 @@ class ChatPage extends LitElement { } async addToUpdateMessageHashmap(array){ - - + + const newObj = {} @@ -2027,7 +2026,7 @@ class ChatPage extends LitElement { findContent(identifier, data) { const [type, id] = identifier.split('/'); - + if (type === 'group') { for (let group of data.groups) { if (group.groupId === parseInt(id, 10)) { @@ -2044,7 +2043,7 @@ class ChatPage extends LitElement { return null; } - + async processMessages(messages, isInitial, isUnread, count) { const isReceipient = this.chatId.includes('direct') @@ -2057,20 +2056,20 @@ class ChatPage extends LitElement { } await new Promise((res, rej) => { this.webWorkerDecodeMessages.postMessage({messages: messages, isReceipient: this.isReceipient, _publicKey: this._publicKey, privateKey: window.parent.reduxStore.getState().app.selectedAddress.keyPair.privateKey }); - + this.webWorkerDecodeMessages.onmessage = e => { decodedMessages = e.data res() - + } this.webWorkerDecodeMessages.onerror = () => { rej() - + } }) if (isInitial) { this.chatEditorPlaceholder = await this.renderPlaceholder() - + try { queue.push(() => replaceMessagesEdited({ @@ -2084,31 +2083,31 @@ class ChatPage extends LitElement { } catch (error) { console.log({error}) } - - + + let list = decodedMessages - + await new Promise((res) => { - + this.webWorkerSortMessages.postMessage({list}); - + this.webWorkerSortMessages.onmessage = e => { - + list = e.data res() - + } }) - + this._messages = list // TODO: Determine number of initial messages by screen height... // this.messagesRendered = this._messages const lastReadMessageTimestamp = this.lastReadMessageTimestamp - + if(isUnread){ this.messagesRendered = { @@ -2128,12 +2127,12 @@ class ChatPage extends LitElement { type: 'initial' } } - + this.isLoadingMessages = false setTimeout(() => this.downElementObserver(), 500) } else { - + queue.push(() => replaceMessagesEdited({ decodedMessages: decodedMessages, parentEpml, @@ -2157,7 +2156,7 @@ class ChatPage extends LitElement { })) } - + } } @@ -2215,7 +2214,7 @@ class ChatPage extends LitElement { if (newMessage.sender === this.selectedAddress.address) { - + this.messagesRendered = { messages: [newMessage], type: 'newComingInAuto', @@ -2235,13 +2234,13 @@ class ChatPage extends LitElement { if(viewElement){ viewElement.scrollTop = viewElement.scrollHeight } - + } else { this.messagesRendered = { messages: [newMessage], type: 'newComingInAuto', - } + } await this.getUpdateComplete() this.showNewMessageBar() @@ -2250,8 +2249,8 @@ class ChatPage extends LitElement { /** * Decode Message Method. Takes in a message object and returns a decoded message object - * @param {Object} encodedMessageObj - * + * @param {Object} encodedMessageObj + * */ decodeMessage(encodedMessageObj, isReceipient, _publicKey) { let isReceipientVar @@ -2303,9 +2302,9 @@ class ChatPage extends LitElement { } else { // Fallback to http directSocketLink = `ws://${nodeUrl}/websockets/chat/messages?involving=${window.parent.reduxStore.getState().app.selectedAddress.address}&involving=${cid}&encoding=BASE64&limit=1` - } + } + - this.webSocket = new WebSocket(directSocketLink) // Open Connection @@ -2320,20 +2319,20 @@ class ChatPage extends LitElement { directSocketTimeout = setTimeout(pingDirectSocket, 45000) return } - + if (initial === 0) { this.lastReadMessageTimestamp = await chatLastSeen.getItem(this.chatId) || 0 if (noInitial) return let getInitialMessages = [] let count = 0 let isUnread = false - + const chatId = this.chatId - const findContent = this.chatHeads.find((item)=> item.url === chatId) + const findContent = this.chatHeads.find((item)=> item.url === chatId) const chatInfoTimestamp = findContent.timestamp || 0 const lastReadMessageTimestamp = this.lastReadMessageTimestamp - - + + if(lastReadMessageTimestamp && chatInfoTimestamp){ if(lastReadMessageTimestamp < chatInfoTimestamp){ isUnread = true @@ -2362,8 +2361,8 @@ class ChatPage extends LitElement { url: `/chat/messages?involving=${window.parent.reduxStore.getState().app.selectedAddress.address}&involving=${cid}&limit=${chatLimit}&reverse=true&haschatreference=false&encoding=BASE64` }) } - - + + this.processMessages(getInitialMessages, true, isUnread, count) @@ -2381,9 +2380,9 @@ class ChatPage extends LitElement { // Closed Event this.webSocket.onclose = (e) => { clearTimeout(directSocketTimeout) - + if (e.reason === 'switch chat') return - + restartDirectWebSocket() } @@ -2431,7 +2430,7 @@ class ChatPage extends LitElement { // Fallback to http groupSocketLink = `ws://${nodeUrl}/websockets/chat/messages?txGroupId=${groupId}&encoding=BASE64&limit=1` } - + this.webSocket = new WebSocket(groupSocketLink) // Open Connection @@ -2453,9 +2452,9 @@ class ChatPage extends LitElement { const lastReadMessageTimestamp = this.lastReadMessageTimestamp let isUnread = false - + const chatId = this.chatId - const findContent = this.chatHeads.find((item)=> item.url === chatId) + const findContent = this.chatHeads.find((item)=> item.url === chatId) const chatInfoTimestamp = findContent.timestamp || 0 if(lastReadMessageTimestamp && chatInfoTimestamp){ @@ -2464,7 +2463,7 @@ class ChatPage extends LitElement { } } if(isUnread){ - + const getInitialMessagesBefore = await parentEpml.request('apiCall', { type: 'api', @@ -2482,16 +2481,16 @@ class ChatPage extends LitElement { url: `/chat/messages/count?after=${lastMessage.timestamp}&txGroupId=${groupId}&limit=20&reverse=false` }) } - + } else { getInitialMessages = await parentEpml.request('apiCall', { type: 'api', url: `/chat/messages?txGroupId=${groupId}&limit=${chatLimit}&reverse=true&haschatreference=false&encoding=BASE64` }) } - - - + + + this.processMessages(getInitialMessages, true, isUnread, count) @@ -2537,7 +2536,7 @@ class ChatPage extends LitElement { } else { // ... Render a nice "Error, Go Back" component. } - // Add to the messages... TODO: Save messages to localstorage and fetch from it to make it persistent... + // Add to the messages... TODO: Save messages to localstorage and fetch from it to make it persistent... } resetChatEditor() { @@ -2553,11 +2552,11 @@ class ChatPage extends LitElement { } async _sendMessage(outSideMsg, msg, messageQueue) { - const _chatId= this._chatId - const isReceipient= this.isReceipient - let _publicKey= this._publicKey + const _chatId= this._chatId + const isReceipient= this.isReceipient + let _publicKey= this._publicKey const attachment= this.attachment - + try { if (this.isReceipient) { let hasPublicKey = true @@ -2580,73 +2579,73 @@ class ChatPage extends LitElement { _publicKey.hasPubKey = false } } catch (error) { /* empty */ } - + if (!hasPublicKey || !_publicKey.hasPubKey) { let err4string = get("chatpage.cchange39") parentEpml.request('showSnackBar', `${err4string}`) return } - + } } // have params to determine if it's a reply or not // have variable to determine if it's a response, holds signature in constructor - // need original message signature + // need original message signature // need whole original message object, transform the data and put it in local storage // create new var called repliedToData and use that to modify the UI // find specific object property in local let typeMessage = 'regular' // this.isLoading = true const trimmedMessage = msg - + const getName = async (recipient) => { try { const getNames = await parentEpml.request("apiCall", { type: "api", url: `/names/address/${recipient}` }) - + if (Array.isArray(getNames) && getNames.length > 0) { return getNames[0].name } else { return '' } - + } catch (error) { return "" } } - + if (outSideMsg && outSideMsg.type === 'delete') { this.isDeletingImage = true const userName = outSideMsg.name const identifier = outSideMsg.identifier let compressedFile = '' var str = "iVBORw0KGgoAAAANSUhEUgAAAsAAAAGMAQMAAADuk4YmAAAAA1BMVEX///+nxBvIAAAAAXRSTlMAQObYZgAAADlJREFUeF7twDEBAAAAwiD7p7bGDlgYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAGJrAABgPqdWQAAAABJRU5ErkJggg==" - + if (this.webWorkerFile) { this.webWorkerFile.terminate() this.webWorkerFile = null } - + this.webWorkerFile = new WebWorkerFile() - + const b64toBlob = (b64Data, contentType = '', sliceSize = 512) => { const byteCharacters = atob(b64Data) const byteArrays = [] - + for (let offset = 0; offset < byteCharacters.length; offset += sliceSize) { const slice = byteCharacters.slice(offset, offset + sliceSize) - + const byteNumbers = new Array(slice.length) for (let i = 0; i < slice.length; i++) { byteNumbers[i] = slice.charCodeAt(i) } - + const byteArray = new Uint8Array(byteNumbers) byteArrays.push(byteArray) } - + const blob = new Blob(byteArrays, { type: contentType }) return blob } @@ -2659,7 +2658,7 @@ class ChatPage extends LitElement { const file = new File([result], "name", { type: 'image/png' }) - + compressedFile = file resolve() }, @@ -2695,11 +2694,11 @@ class ChatPage extends LitElement { } typeMessage = 'edit' let chatReference = outSideMsg.editedMessageObj.signature - + if (outSideMsg.editedMessageObj.chatReference) { chatReference = outSideMsg.editedMessageObj.chatReference } - + let message = "" try { const parsedMessageObj = JSON.parse(outSideMsg.editedMessageObj.decodedMessage) @@ -2719,34 +2718,34 @@ class ChatPage extends LitElement { const str = "iVBORw0KGgoAAAANSUhEUgAAAsAAAAGMAQMAAADuk4YmAAAAA1BMVEX///+nxBvIAAAAAXRSTlMAQObYZgAAADlJREFUeF7twDEBAAAAwiD7p7bGDlgYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAGJrAABgPqdWQAAAABJRU5ErkJggg==" const userName = outSideMsg.name const identifier = outSideMsg.identifier - + if (this.webWorkerFile) { this.webWorkerFile.terminate() this.webWorkerFile = null } - + this.webWorkerFile = new WebWorkerFile() - + const b64toBlob = (b64Data, contentType = '', sliceSize = 512) => { const byteCharacters = atob(b64Data) const byteArrays = [] - + for (let offset = 0; offset < byteCharacters.length; offset += sliceSize) { const slice = byteCharacters.slice(offset, offset + sliceSize) - + const byteNumbers = new Array(slice.length) for (let i = 0; i < slice.length; i++) { byteNumbers[i] = slice.charCodeAt(i) } - + const byteArray = new Uint8Array(byteNumbers) byteArrays.push(byteArray) } - + const blob = new Blob(byteArrays, { type: contentType }) return blob } - + const blob = b64toBlob(str, 'image/png') await new Promise(resolve => { new Compressor(blob, { @@ -2756,7 +2755,7 @@ class ChatPage extends LitElement { const file = new File([result], "name", { type: 'image/png' }) - + compressedFile = file resolve() }, @@ -2792,16 +2791,16 @@ class ChatPage extends LitElement { } typeMessage = 'edit' let chatReference = outSideMsg.editedMessageObj.signature - + if (outSideMsg.editedMessageObj.chatReference) { chatReference = outSideMsg.editedMessageObj.chatReference } - + let message = "" try { const parsedMessageObj = JSON.parse(outSideMsg.editedMessageObj.decodedMessage) message = parsedMessageObj - + } catch (error) { message = outSideMsg.editedMessageObj.decodedMessage } @@ -2823,8 +2822,8 @@ class ChatPage extends LitElement { this.imageFile = null return } - - + + let service = "QCHAT_IMAGE" let name = userName let identifier @@ -2840,16 +2839,16 @@ class ChatPage extends LitElement { } ); if (res.action !== 'accept') throw new Error('User declined publish') - + if (this.webWorkerFile) { this.webWorkerFile.terminate() this.webWorkerFile = null } - + this.webWorkerFile = new WebWorkerFile() const image = this.imageFile const id = this.uid.rnd() - let groupPart + let groupPart if(this.isReceipient){ groupPart = `direct_${generateIdFromAddresses(this._chatId, this.selectedAddress.address)}` } else { @@ -2880,9 +2879,9 @@ class ChatPage extends LitElement { this.isUploadingImage = false return } - + try { - + await publishData({ registeredName: userName, file: compressedFile, @@ -2903,9 +2902,9 @@ class ChatPage extends LitElement { this.isUploadingImage = false return } - + } - + const messageObject = { messageText: trimmedMessage, images: [{ @@ -2927,7 +2926,7 @@ class ChatPage extends LitElement { this.isLoading = false return } - + const messageObject = { messageText: '', gifs: [{ @@ -2949,14 +2948,14 @@ class ChatPage extends LitElement { this.isLoading = false return } - + if (this.webWorkerFile) { this.webWorkerFile.terminate() this.webWorkerFile = null } - + this.webWorkerFile = new WebWorkerFile() - + // const attachment = attachment const id = this.uid() const identifier = `qchat_${id}` @@ -3014,20 +3013,20 @@ class ChatPage extends LitElement { const userName = await getName(this.selectedAddress.address) typeMessage = 'edit' let chatReference = outSideMsg.editedMessageObj.signature - + if (outSideMsg.editedMessageObj.chatReference) { chatReference = outSideMsg.editedMessageObj.chatReference } - + let message = "" - + try { const parsedMessageObj = JSON.parse(outSideMsg.editedMessageObj.decodedMessage) message = parsedMessageObj } catch (error) { message = outSideMsg.editedMessageObj.decodedMessage } - + let reactions = message.reactions || [] const findEmojiIndex = reactions.findIndex((reaction) => reaction.type === outSideMsg.reaction) if (findEmojiIndex !== -1) { @@ -3084,16 +3083,16 @@ class ChatPage extends LitElement { } else if (this.editedMessageObj) { typeMessage = 'edit' let chatReference = this.editedMessageObj.signature - + if (this.editedMessageObj.chatReference) { chatReference = this.editedMessageObj.chatReference } - + let message = "" try { const parsedMessageObj = JSON.parse(this.editedMessageObj.decodedMessage) message = parsedMessageObj - + } catch (error) { message = this.editedMessageObj.decodedMessage } @@ -3112,7 +3111,7 @@ class ChatPage extends LitElement { version: 3 } const stringifyMessageObject = JSON.stringify(messageObject) - + if (this.balance < 4) { this.myTrimmedMeassage = '' this.myTrimmedMeassage = stringifyMessageObject @@ -3126,7 +3125,7 @@ class ChatPage extends LitElement { this.isUploadingImage = false return } - + } async sendMessage({messageText, typeMessage, chatReference, isForward,isReceipient, _chatId, _publicKey, messageQueue}) { @@ -3141,7 +3140,7 @@ class ChatPage extends LitElement { if(isForward){ this.isLoading = true } - + let _reference = new Uint8Array(64) window.crypto.getRandomValues(_reference) let reference = window.parent.Base58.encode(_reference) @@ -3420,7 +3419,7 @@ class ChatPage extends LitElement { /** * Method to set if the user's location is down in the chat - * @param { Boolean } isDown + * @param { Boolean } isDown */ setIsUserDown(isDown) { this.isUserDown = isDown diff --git a/plugins/plugins/core/components/ChatRightPanel.js b/plugins/plugins/core/components/ChatRightPanel.js index 24a90f59..b3fef699 100644 --- a/plugins/plugins/core/components/ChatRightPanel.js +++ b/plugins/plugins/core/components/ChatRightPanel.js @@ -1,8 +1,6 @@ -import { LitElement, html, css } from "lit"; -import { render } from "lit/html.js"; -import { Epml } from "../../../epml"; -import { getUserNameFromAddress } from "../../utils/getUserNameFromAddress"; -import snackbar from "./snackbar.js"; +import {css, html, LitElement} from "lit"; +import {Epml} from "../../../epml"; +import {getUserNameFromAddress} from "../../utils/getUserNameFromAddress"; import "@material/mwc-button"; import "@material/mwc-dialog"; import "@polymer/paper-spinner/paper-spinner-lite.js"; @@ -12,7 +10,6 @@ import '@vaadin/button'; import "./WrapperModal"; import "./TipUser" import "./UserInfo/UserInfo"; -import { use, get, translate, translateUnsafeHTML, registerTranslateConfig } from 'lit-translate' const parentEpml = new Epml({ type: 'WINDOW', source: window.parent }) @@ -93,9 +90,9 @@ class ChatRightPanel extends LitElement { .container-body { width: 100%; - display: flex; - flex-direction: column; - flex-grow: 1; + display: flex; + flex-direction: column; + flex-grow: 1; overflow:auto; margin-top: 5px; padding: 0px 6px; @@ -106,13 +103,13 @@ class ChatRightPanel extends LitElement { background-color: whitesmoke; border-radius: 7px; } - + .container-body::-webkit-scrollbar { width: 6px; border-radius: 7px; background-color: whitesmoke; } - + .container-body::-webkit-scrollbar-thumb { background-color: rgb(180, 176, 176); border-radius: 7px; @@ -122,7 +119,7 @@ class ChatRightPanel extends LitElement { .container-body::-webkit-scrollbar-thumb:hover { background-color: rgb(148, 146, 146); cursor: pointer; - } + } p { color: var(--black); @@ -196,7 +193,7 @@ class ChatRightPanel extends LitElement { async updated(changedProperties) { if (changedProperties && changedProperties.has('selectedHead')) { - if (this.selectedHead !== {}) { + if (this.selectedHead !== {}) { const userName = await getUserNameFromAddress(this.selectedHead.address); this.userName = userName; } @@ -237,7 +234,7 @@ class ChatRightPanel extends LitElement { this.toggle(false)} style="margin: 0px 10px" icon="vaadin:close" slot="icon">
-

${this.leaveGroupObj && this.leaveGroupObj.groupName}

+

${this.leaveGroupObj && this.leaveGroupObj.groupName}

${this.leaveGroupObj && this.leaveGroupObj.description}

Members: ${this.leaveGroupObj && this.leaveGroupObj.memberCount}

diff --git a/plugins/plugins/core/components/ChatRightPanelResources.js b/plugins/plugins/core/components/ChatRightPanelResources.js index 23686aac..23073f52 100644 --- a/plugins/plugins/core/components/ChatRightPanelResources.js +++ b/plugins/plugins/core/components/ChatRightPanelResources.js @@ -1,5 +1,5 @@ -import { LitElement, html, css } from 'lit'; -import { Epml } from '../../../epml'; +import {css, html, LitElement} from 'lit'; +import {Epml} from '../../../epml'; import '@material/mwc-button'; import '@material/mwc-dialog'; import '@polymer/paper-spinner/paper-spinner-lite.js'; @@ -11,11 +11,8 @@ import './TipUser'; import './UserInfo/UserInfo'; import './ChatImage'; import './ReusableImage'; -import { - get, - translate, -} from 'lit-translate'; -import { generateIdFromAddresses } from '../../utils/id-generation'; +import {get, translate,} from 'lit-translate'; +import {generateIdFromAddresses} from '../../utils/id-generation'; const parentEpml = new Epml({ type: 'WINDOW', source: window.parent }); @@ -248,7 +245,7 @@ class ChatRightPanelResources extends LitElement { const groupPart = this.isReceipient ? `direct_${generateIdFromAddresses(this._chatId, this.myAddress)}` : `group_${this._chatId}`; - + let offset = reset ? 0 : this.images.length; let endpoint = `/arbitrary/resources/search?service=QCHAT_IMAGE&identifier=qchat_${groupPart}&reverse=true&limit=20&reverse=true&offset=${offset}` if(this.onlyMyImages){ @@ -337,7 +334,7 @@ class ChatRightPanelResources extends LitElement { render() { return html` - +
{ @@ -361,7 +358,7 @@ class ChatRightPanelResources extends LitElement { this.selectMyImages(e)} ?checked=${this.onlyMyImages}>
- + ${this.images.map((image) => { return html``; })} @@ -659,7 +656,7 @@ class ImageParent extends LitElement {
` : ''} - +
` : ''} diff --git a/plugins/plugins/core/components/ChatScroller-css.js b/plugins/plugins/core/components/ChatScroller-css.js index 2aad505d..2897b76b 100644 --- a/plugins/plugins/core/components/ChatScroller-css.js +++ b/plugins/plugins/core/components/ChatScroller-css.js @@ -1,4 +1,4 @@ -import { css } from 'lit' +import {css} from 'lit' export const chatStyles = css` html { @@ -91,7 +91,7 @@ export const chatStyles = css` user-select: none; display: flex; justify-content: space-between; - width: 100%; + width: 100%; padding-top: 2px; } @@ -126,7 +126,7 @@ export const chatStyles = css` .message-subcontainer1 { position: relative; display: flex; - align-items: flex-end; + align-items: flex-end; } .message-subcontainer2 { @@ -143,7 +143,7 @@ export const chatStyles = css` min-width: 150px; } - + .message-myBg { background-color: var(--chat-bubble-myBg) !important; } @@ -234,7 +234,7 @@ export const chatStyles = css` margin: 0; padding: 0; } - + .message { display: flex; flex-direction: column; @@ -252,7 +252,7 @@ export const chatStyles = css` .message-data-avatar { margin: 0px 10px 0px 3px; - width: 42px; + width: 42px; height: 42px; float: left; } @@ -289,7 +289,7 @@ export const chatStyles = css` vertical-align: bottom; object-fit: contain; } - + .align-left { text-align: left; } @@ -351,12 +351,12 @@ export const chatStyles = css` } .tooltip { - position: relative; + position: relative; } .tooltip:before { - content: attr(data-text); - display: none; + content: attr(data-text); + display: none; position: absolute; top: -47px; left: 50%; @@ -430,7 +430,7 @@ export const chatStyles = css` border: 0.5px solid transparent; cursor: pointer; } - + .reactions-bg:hover { border: 0.5px solid var(--reaction-bubble-outline); } @@ -446,7 +446,7 @@ export const chatStyles = css` } .defaultSize { - width: 45vh; + width: 45vh; height: 40vh; } @@ -473,7 +473,7 @@ export const chatStyles = css` color: rgb(228, 222, 222); padding-left: 7px; } - + .image-delete-icon:hover { opacity: 1; } @@ -704,7 +704,7 @@ export const chatStyles = css` flex-direction: column; gap: 5px; } - + .attachment-name { font-family: Work Sans, sans-serif; font-size: 16px; @@ -725,7 +725,7 @@ export const chatStyles = css` letter-spacing: 0.3px; font-weight: 300; } - + .download-icon { position: relative; color: var(--chat-bubble-msg-color); diff --git a/plugins/plugins/core/components/ChatScroller.js b/plugins/plugins/core/components/ChatScroller.js index 12b266ce..1c2a249a 100644 --- a/plugins/plugins/core/components/ChatScroller.js +++ b/plugins/plugins/core/components/ChatScroller.js @@ -1,15 +1,12 @@ -import { LitElement, html, } from 'lit'; -import { repeat } from 'lit/directives/repeat.js'; -import { - get, - translate, -} from 'lit-translate'; -import { unsafeHTML } from 'lit/directives/unsafe-html.js'; -import { chatStyles } from './ChatScroller-css.js'; -import { Epml } from '../../../epml'; -import { cropAddress } from '../../utils/cropAddress'; -import { roundToNearestDecimal } from '../../utils/roundToNearestDecimal.js'; -import { generateHTML } from '@tiptap/core'; +import {html, LitElement,} from 'lit'; +import {repeat} from 'lit/directives/repeat.js'; +import {get, translate,} from 'lit-translate'; +import {unsafeHTML} from 'lit/directives/unsafe-html.js'; +import {chatStyles} from './ChatScroller-css.js'; +import {Epml} from '../../../epml'; +import {cropAddress} from '../../utils/cropAddress'; +import {roundToNearestDecimal} from '../../utils/roundToNearestDecimal.js'; +import {generateHTML} from '@tiptap/core'; import isElectron from 'is-electron'; import axios from 'axios'; @@ -31,7 +28,7 @@ import '@material/mwc-icon'; import '@vaadin/icon'; import '@vaadin/icons'; import '@vaadin/tooltip'; -import { chatLimit, totalMsgCount } from './ChatPage.js'; +import {chatLimit, totalMsgCount} from './ChatPage.js'; const parentEpml = new Epml({ type: 'WINDOW', source: window.parent }); let toggledMessage = {}; @@ -503,7 +500,7 @@ class ChatScroller extends LitElement { !previousMessage || !this.shouldGroupWithLastMessage(message, previousMessage) ) { - + if (currentMessageGroup) { this.messagesToRender.unshift(currentMessageGroup); } @@ -690,7 +687,7 @@ class ChatScroller extends LitElement { } render() { - + let formattedMessages = this.messagesToRender; return html` @@ -1454,19 +1451,19 @@ class MessageTemplate extends LitElement { return hideit ? html`
  • ` : html` -
  • -
    ` } - +
  • @@ -2025,7 +2022,7 @@ class MessageTemplate extends LitElement { ` } - +
    this.hidePrivateMessageModal()} .hideBlockUserModal=${() => this.hideBlockUserModal()} toblockaddress=${this.messageObj.sender} > - { this.openDialogImage = false; }}> @@ -2206,7 +2203,7 @@ class MessageTemplate extends LitElement { ${this.openDialogImage ? html` ` : ''} - +
    - { this.openDialogGif = false; }}>MessageTemplate @@ -2242,7 +2239,7 @@ class MessageTemplate extends LitElement { { this.openDeleteImage = false; }}> @@ -2252,10 +2249,10 @@ class MessageTemplate extends LitElement { ` @@ -312,8 +312,8 @@ class ChatTextEditor extends LitElement { this.emojiPickerHandler = this.shadowRoot.querySelector('.emoji-button'); this.mirrorChatInput = this.shadowRoot.getElementById('messageBox'); - this.chatMessageInput = this.shadowRoot.getElementById(this.iframeId); - + this.chatMessageInput = this.shadowRoot.getElementById(this.iframeId); + this.emojiPicker = new EmojiPicker({ style: "twemoji", twemojiBaseUrl: '/emoji/', @@ -352,7 +352,7 @@ class ChatTextEditor extends LitElement { const captionEditor = this.shadowRoot.getElementById(this.iframeId).contentWindow.document.getElementById('chatbarId') captionEditor.setAttribute('data-placeholder', this.placeholder) } - + if (changedProperties && changedProperties.has("imageFile")) { this.chatMessageInput = "newChat" } @@ -431,7 +431,7 @@ class ChatTextEditor extends LitElement { } catch (error) { console.error(error) } - + } calculateIFrameHeight(height) { @@ -444,7 +444,7 @@ class ChatTextEditor extends LitElement { this.iframeHeight = 42; } initChatEditor() { - const ChatEditor = function (editorConfig) { + const ChatEditor = function (editorConfig) { const ChatEditor = function () { const editor = this; editor.init(); @@ -486,9 +486,9 @@ class ChatTextEditor extends LitElement { html { cursor: text; } - + .chatbar-body { - display: flex; + display: flex; align-items: center; } @@ -496,24 +496,24 @@ class ChatTextEditor extends LitElement { background-color: whitesmoke; border-radius: 7px; } - + .chatbar-body::-webkit-scrollbar { width: 6px; border-radius: 7px; background-color: whitesmoke; } - + .chatbar-body::-webkit-scrollbar-thumb { background-color: rgb(180, 176, 176); border-radius: 7px; transition: all 0.3s ease-in-out; } - + .chatbar-body::-webkit-scrollbar-thumb:hover { background-color: rgb(148, 146, 146); cursor: pointer; - } - + } + div { font-size: 1rem; line-height: 1.38rem; @@ -631,7 +631,7 @@ class ChatTextEditor extends LitElement { }; ChatEditor.prototype.listenChanges = function () { - + const editor = this; const events = ['drop', 'contextmenu', 'mouseup', 'click', 'touchend', 'keydown', 'blur', 'paste'] @@ -650,9 +650,9 @@ class ChatTextEditor extends LitElement { const item_list = await navigator.clipboard.read(); let image_type; // we will feed this later const item = item_list.find( item => // choose the one item holding our image - item.types.some( type => { + item.types.some( type => { if (type.startsWith( 'image/')) { - image_type = type; + image_type = type; return true; } }) @@ -679,8 +679,8 @@ class ChatTextEditor extends LitElement { editor.insertText(textData); }) } - - + + return false; } @@ -780,7 +780,7 @@ class ChatTextEditor extends LitElement { editor.content = (editor.frame.contentDocument || editor.frame.document); editor.content.body.classList.add("chatbar-body"); - + let elemDiv = document.createElement('div'); elemDiv.setAttribute('contenteditable', 'true'); elemDiv.setAttribute('spellcheck', 'false'); @@ -791,7 +791,7 @@ class ChatTextEditor extends LitElement { editor.contentDiv = editor.frame.contentDocument.body.firstChild; editor.styles(); editor.listenChanges(); - + }; diff --git a/plugins/plugins/core/components/ChatTextEditor.js b/plugins/plugins/core/components/ChatTextEditor.js index 99a2522c..645249fc 100644 --- a/plugins/plugins/core/components/ChatTextEditor.js +++ b/plugins/plugins/core/components/ChatTextEditor.js @@ -1,10 +1,9 @@ -import { LitElement, html, css } from "lit"; -import { render } from 'lit/html.js' -import { EmojiPicker } from 'emoji-picker-js' -import { Epml } from '../../../epml.js' +import {css, html, LitElement} from "lit"; +import {EmojiPicker} from 'emoji-picker-js' +import {Epml} from '../../../epml.js' import '@material/mwc-icon' import '@material/mwc-checkbox' -import { use, get, translate, translateUnsafeHTML, registerTranslateConfig } from 'lit-translate' +import {get, translate} from 'lit-translate' const parentEpml = new Epml({ type: 'WINDOW', source: window.parent }) @@ -55,9 +54,9 @@ class ChatTextEditor extends LitElement { } * { - + --mdc-checkbox-unchecked-color: var(--black); - + } .chatbar-container { width: 100%; @@ -135,9 +134,9 @@ class ChatTextEditor extends LitElement { overflow: hidden; } - input[type=file]::-webkit-file-upload-button { - cursor: pointer; - } + input[type=file]::-webkit-file-upload-button { + cursor: pointer; + } .chatbar-container textarea { display: none; @@ -152,7 +151,7 @@ class ChatTextEditor extends LitElement { padding: 0; border: none; } - + .checkmark-icon { width: 30px; color: var(--mdc-theme-primary); @@ -177,23 +176,23 @@ class ChatTextEditor extends LitElement { background-color: whitesmoke; border-radius: 7px; } - + .element::-webkit-scrollbar { width: 6px; border-radius: 7px; background-color: whitesmoke; } - + .element::-webkit-scrollbar-thumb { background-color: rgb(180, 176, 176); border-radius: 7px; transition: all 0.3s ease-in-out; } - + .element::-webkit-scrollbar-thumb:hover { background-color: rgb(148, 146, 146); cursor: pointer; - } + } .ProseMirror:focus { outline: none; } @@ -281,7 +280,7 @@ class ChatTextEditor extends LitElement { } .chatbar-button-single:hover { filter: brightness(120%); - + } .chatbar-buttons { @@ -295,7 +294,7 @@ class ChatTextEditor extends LitElement { justify-content: center; } :host(:hover) .chatbar-button-single { - + display: flex; align-items: center; justify-content: center; @@ -383,14 +382,14 @@ mwc-checkbox::shadow .mdc-checkbox::after, mwc-checkbox::shadow .mdc-checkbox::b render() { return html` -
    - +
    ${this.iframeId === "_chatEditorDOM" ? html` @@ -456,26 +455,26 @@ mwc-checkbox::shadow .mdc-checkbox::after, mwc-checkbox::shadow .mdc-checkbox::b for="qChatShowAutoMsg" @click=${() => this.shadowRoot.getElementById('qChatShowAutoMsg').click()} >${translate('chatpage.cchange69')} - + { if(e.target.checked){ window.parent.reduxStore.dispatch( window.parent.reduxAction.removeAutoLoadImageChat(this.chatId)) return } window.parent.reduxStore.dispatch( window.parent.reduxAction.addAutoLoadImageChat(this.chatId)) - + }} ?checked=${(window.parent.reduxStore.getState().app?.autoLoadImageChats || []).includes(this.chatId)}> -
    + ` : ''} - + -
    - -
    { this.preventUserSendingImage(e) }}> @@ -484,26 +483,26 @@ mwc-checkbox::shadow .mdc-checkbox::after, mwc-checkbox::shadow .mdc-checkbox::b icon="vaadin:paperclip" slot="icon" > - +
    - -
    +
    @@ -532,23 +531,23 @@ mwc-checkbox::shadow .mdc-checkbox::after, mwc-checkbox::shadow .mdc-checkbox::b `} ` - ) : + ) : html` -
    ${this.isLoading === false ? html` - send-icon { this.sendMessageFunc(this.messageQueue); - }} + }} /> - ` : + ` : html` `} @@ -556,14 +555,14 @@ mwc-checkbox::shadow .mdc-checkbox::after, mwc-checkbox::shadow .mdc-checkbox::b ` }
    - ${this.chatMessageSize >= 750 ? + ${this.chatMessageSize >= 750 ? html`
    ${`Your message size is of ${this.chatMessageSize} bytes out of a maximum of 4000`}
    - ` : + ` : html``} ` @@ -582,9 +581,9 @@ mwc-checkbox::shadow .mdc-checkbox::after, mwc-checkbox::shadow .mdc-checkbox::b const item_list = await navigator.clipboard.read(); let image_type; // we will feed this later const item = item_list.find( item => // choose the one item holding our image - item.types.some( type => { + item.types.some( type => { if (type.startsWith( 'image/')) { - image_type = type; + image_type = type; return true; } }) @@ -595,29 +594,29 @@ mwc-checkbox::shadow .mdc-checkbox::after, mwc-checkbox::shadow .mdc-checkbox::b type: image_type }); this.insertFile(file); - } + } } } - async firstUpdated() { + async firstUpdated() { window.addEventListener('storage', () => { const checkTheme = localStorage.getItem('qortalTheme'); const chatbar = this.shadowRoot.querySelector('.element') if (checkTheme === 'dark') { this.theme = 'dark' chatbar.style.cssText = "color:#ffffff;" - + } else { this.theme = 'light' chatbar.style.cssText = "color:#080808;" - + } }) this.emojiPickerHandler = this.shadowRoot.querySelector('.emoji-button'); this.mirrorChatInput = this.shadowRoot.getElementById('messageBox'); - this.chatMessageInput = this.shadowRoot.querySelector('.element') - + this.chatMessageInput = this.shadowRoot.querySelector('.element') + this.emojiPicker = new EmojiPicker({ style: "twemoji", twemojiBaseUrl: '/emoji/', @@ -631,7 +630,7 @@ mwc-checkbox::shadow .mdc-checkbox::after, mwc-checkbox::shadow .mdc-checkbox::b }); this.emojiPicker.on('emoji', selection => { - + this.editor.commands.insertContent(selection.emoji, { parseOptions: { preserveWhitespace: false @@ -658,7 +657,7 @@ mwc-checkbox::shadow .mdc-checkbox::after, mwc-checkbox::shadow .mdc-checkbox::b if (changedProperties && changedProperties.has('placeholder') && this.updatePlaceholder && this.editor) { this.updatePlaceholder(this.editor, this.placeholder ) } - + if (changedProperties && changedProperties.has("imageFile")) { this.chatMessageInput = "newChat"; } @@ -749,10 +748,10 @@ mwc-checkbox::shadow .mdc-checkbox::after, mwc-checkbox::shadow .mdc-checkbox::b } catch (error) { console.error(error) } - + } - + } -window.customElements.define("chat-text-editor", ChatTextEditor) \ No newline at end of file +window.customElements.define("chat-text-editor", ChatTextEditor) diff --git a/plugins/plugins/core/components/ChatWelcomePage.js b/plugins/plugins/core/components/ChatWelcomePage.js index b391f5d7..720af6e7 100644 --- a/plugins/plugins/core/components/ChatWelcomePage.js +++ b/plugins/plugins/core/components/ChatWelcomePage.js @@ -1,7 +1,6 @@ -import { LitElement, html, css } from 'lit' -import { render } from 'lit/html.js' -import { Epml } from '../../../epml.js' -import { use, get, translate, translateUnsafeHTML, registerTranslateConfig } from 'lit-translate' +import {css, html, LitElement} from 'lit' +import {Epml} from '../../../epml.js' +import {get, registerTranslateConfig, translate, use} from 'lit-translate' import isElectron from 'is-electron' import '@material/mwc-icon' @@ -214,8 +213,8 @@ class ChatWelcomePage extends LitElement {
    chat
    ${this.myAddress.address} -

    ${translate("welcomepage.wcchange3")}

    - +

    - + { this._sendMessage(); } diff --git a/plugins/plugins/core/components/ImageComponent.js b/plugins/plugins/core/components/ImageComponent.js index 80bb6c26..4b33d08f 100644 --- a/plugins/plugins/core/components/ImageComponent.js +++ b/plugins/plugins/core/components/ImageComponent.js @@ -1,12 +1,5 @@ -import { LitElement, html, css } from 'lit'; -import { render } from 'lit/html.js'; -import { - use, - get, - translate, - translateUnsafeHTML, - registerTranslateConfig, -} from 'lit-translate'; +import {css, html, LitElement} from 'lit'; +import {translate,} from 'lit-translate'; export class ImageComponent extends LitElement { static get properties() { diff --git a/plugins/plugins/core/components/LevelFounder.js b/plugins/plugins/core/components/LevelFounder.js index 635dda40..2f9a8fc7 100644 --- a/plugins/plugins/core/components/LevelFounder.js +++ b/plugins/plugins/core/components/LevelFounder.js @@ -1,10 +1,8 @@ -import { LitElement, html, css } from 'lit' -import { render } from 'lit/html.js' -import { Epml } from '../../../epml.js' -import snackbar from './snackbar.js' -import { use, get, translate, translateUnsafeHTML, registerTranslateConfig } from 'lit-translate' +import {css, html, LitElement} from 'lit' +import {Epml} from '../../../epml.js' +import {translate} from 'lit-translate' import '@polymer/paper-tooltip/paper-tooltip.js' -import { RequestQueue } from '../../utils/queue.js' +import {RequestQueue} from '../../utils/queue.js' const parentEpml = new Epml({ type: 'WINDOW', source: window.parent }) @@ -116,7 +114,7 @@ class LevelFounder extends LitElement { } catch (error) { console.error(error) } - + } renderFounder() { diff --git a/plugins/plugins/core/components/NameMenu.js b/plugins/plugins/core/components/NameMenu.js index 9a0d2e5a..73bda1ec 100644 --- a/plugins/plugins/core/components/NameMenu.js +++ b/plugins/plugins/core/components/NameMenu.js @@ -1,8 +1,7 @@ -import { LitElement, html, css } from 'lit' -import { render } from 'lit/html.js' -import { Epml } from '../../../epml.js' +import {css, html, LitElement} from 'lit' +import {Epml} from '../../../epml.js' import snackbar from './snackbar.js' -import { use, get, translate, translateUnsafeHTML, registerTranslateConfig } from 'lit-translate' +import {get, translate} from 'lit-translate' import '@material/mwc-snackbar' import '@material/mwc-button' import '@material/mwc-dialog' diff --git a/plugins/plugins/core/components/QortalQrcodeGenerator.js b/plugins/plugins/core/components/QortalQrcodeGenerator.js index 37e41892..bd1c7429 100644 --- a/plugins/plugins/core/components/QortalQrcodeGenerator.js +++ b/plugins/plugins/core/components/QortalQrcodeGenerator.js @@ -1,5 +1,4 @@ -import { LitElement, html, css } from 'lit' -import { render } from 'lit/html.js' +import {css, html, LitElement} from 'lit' import QRCode from './QRCode.js' export class QortalQrcodeGenerator extends LitElement { diff --git a/plugins/plugins/core/components/ReusableImage.js b/plugins/plugins/core/components/ReusableImage.js index 8a61c411..def07f5f 100644 --- a/plugins/plugins/core/components/ReusableImage.js +++ b/plugins/plugins/core/components/ReusableImage.js @@ -1,9 +1,7 @@ -import { LitElement, html, css } from 'lit'; -import { - translate, -} from 'lit-translate'; +import {css, html, LitElement} from 'lit'; +import {translate,} from 'lit-translate'; import axios from 'axios'; -import { RequestQueueWithPromise } from '../../utils/queue'; +import {RequestQueueWithPromise} from '../../utils/queue'; import '@material/mwc-menu'; import '@material/mwc-list/mwc-list-item.js'; import '@material/mwc-dialog' @@ -149,7 +147,7 @@ export class ResuableImage extends LitElement { try { if (this.isFetching) return; this.isFetching = true; - + await requestQueue2.enqueue(() => { return axios.get( `${this.nodeUrl}/arbitrary/resource/properties/${this.resource.service}/${this.resource.name}/${this.resource.identifier}?apiKey=${this.myNode.apiKey}` @@ -301,9 +299,9 @@ export class ResuableImage extends LitElement { : ''}
    - { this.openDialogImage = false; }}> @@ -312,7 +310,7 @@ export class ResuableImage extends LitElement { ${this.openDialogImage ? html` ` : ''} - +
    { this.sendMoneyLoading = false; this.btnDisable = false; } - + if (parseFloat(amount) + parseFloat(0.011) > parseFloat(this.walletBalance)) { resetState(); const snack1string = get("chatpage.cchange51"); parentEpml.request('showSnackBar', `${snack1string}`); return false; } - + if (parseFloat(amount) <= 0) { resetState(); const snack2string = get("chatpage.cchange52"); parentEpml.request('showSnackBar', `${snack2string}`); return false; } - + if (recipient.length === 0) { resetState(); const snack3string = get("chatpage.cchange53"); parentEpml.request('showSnackBar', `${snack3string}`); return false; } - + const validateName = async (receiverName) => { const myNameRes = await parentEpml.request('apiCall', { type: 'api', @@ -139,11 +138,11 @@ export class TipUser extends LitElement { }); return myNameRes.error === 401 ? false : myNameRes; }; - + const validateAddress = async (receiverAddress) => { return await window.parent.validateAddress(receiverAddress); }; - + const getName = async (recipient) => { try { const getNames = await parentEpml.request("apiCall", { @@ -155,14 +154,14 @@ export class TipUser extends LitElement { return ""; } }; - + const makeTransactionRequest = async (receiver, lastRef) => { const dialogAmount = get("transactions.amount"); const dialogAddress = get("login.address"); const dialogName = get("login.name"); const dialogTo = get("transactions.to"); const recipientName = await getName(receiver); - + return await parentEpml.request('transaction', { type: 2, nonce: this.myAddress.nonce, @@ -179,7 +178,7 @@ export class TipUser extends LitElement { } }); }; - + const getTxnRequestResponse = (txnResponse) => { if (txnResponse.success === false && txnResponse.message) { this.errorMessage = txnResponse.message; @@ -200,17 +199,17 @@ export class TipUser extends LitElement { throw new Error(txnResponse); } }; - + const validateReceiver = async (recipient) => { let lastRef = await this.getLastRef(); let isAddress; - + try { isAddress = await validateAddress(recipient); } catch (err) { isAddress = false; } - + if (isAddress) { const myTransaction = await makeTransactionRequest(recipient, lastRef); getTxnRequestResponse(myTransaction); @@ -225,14 +224,14 @@ export class TipUser extends LitElement { } } }; - + await validateReceiver(recipient); } - + render() { return html` -
    +

    ${translate("chatpage.cchange43")} ${this.userName}

    @@ -240,16 +239,16 @@ export class TipUser extends LitElement {

    ${translate("chatpage.cchange47")}: ${this.walletBalance} QORT

    ${translate("chatpage.cchange49")}: ${this.qortPaymentFee} QORT

    - ${this.sendMoneyLoading ? - html` + ${this.sendMoneyLoading ? + html` ` : html`
    - this.sendQort()}> ${translate("chatpage.cchange50")} QORT diff --git a/plugins/plugins/core/components/ToolTip.js b/plugins/plugins/core/components/ToolTip.js index d70f25fd..18a9771e 100644 --- a/plugins/plugins/core/components/ToolTip.js +++ b/plugins/plugins/core/components/ToolTip.js @@ -1,6 +1,5 @@ -import { LitElement, html, css } from 'lit' -import { Epml } from '../../../epml.js' -import { use, get, translate, translateUnsafeHTML, registerTranslateConfig } from 'lit-translate' +import {css, html, LitElement} from 'lit' +import {Epml} from '../../../epml.js' const parentEpml = new Epml({ type: 'WINDOW', source: window.parent }) @@ -56,7 +55,7 @@ class ToolTip extends LitElement { display: none; visibility: hidden; opacity: 0; - } + } ` } diff --git a/plugins/plugins/core/components/TraderInfoView.js b/plugins/plugins/core/components/TraderInfoView.js index df9f8043..65bf472f 100644 --- a/plugins/plugins/core/components/TraderInfoView.js +++ b/plugins/plugins/core/components/TraderInfoView.js @@ -1,7 +1,7 @@ -import { LitElement, html, css } from 'lit' -import { render } from 'lit/html.js' -import { Epml } from '../../../epml.js' -import { get, translate, translateUnsafeHTML } from 'lit-translate' +import {css, html, LitElement} from 'lit' +import {render} from 'lit/html.js' +import {Epml} from '../../../epml.js' +import {get, translate} from 'lit-translate' import '@polymer/paper-dialog/paper-dialog.js' import '@material/mwc-button' @@ -355,7 +355,7 @@ class TraderInfoView extends LitElement { .border-wrapper { border: 1px var(--tradeborder) solid; - overflow: hidden; + overflow: hidden; } @@ -1532,7 +1532,7 @@ class TraderInfoView extends LitElement { creatorAddress: item.creatorAddress, recipient: item.recipient, amount: item.amount - + } } }).filter(item => !!item) @@ -1549,7 +1549,7 @@ class TraderInfoView extends LitElement { creatorAddress: item.creatorAddress, recipient: item.recipient, amount: item.amount - + } } }).filter(item => !!item) @@ -1595,7 +1595,7 @@ class TraderInfoView extends LitElement { return { timestamp: item.tradeTimestamp, foreignAmount: item.foreignAmount, - qortAmount: item.qortAmount + qortAmount: item.qortAmount } } }).filter(item => !!item) @@ -1617,7 +1617,7 @@ class TraderInfoView extends LitElement { return { timestamp: item.tradeTimestamp, foreignAmount: item.foreignAmount, - qortAmount: item.qortAmount + qortAmount: item.qortAmount } } }).filter(item => !!item) @@ -1639,7 +1639,7 @@ class TraderInfoView extends LitElement { return { timestamp: item.tradeTimestamp, foreignAmount: item.foreignAmount, - qortAmount: item.qortAmount + qortAmount: item.qortAmount } } }).filter(item => !!item) @@ -1661,7 +1661,7 @@ class TraderInfoView extends LitElement { return { timestamp: item.tradeTimestamp, foreignAmount: item.foreignAmount, - qortAmount: item.qortAmount + qortAmount: item.qortAmount } } }).filter(item => !!item) @@ -1683,7 +1683,7 @@ class TraderInfoView extends LitElement { return { timestamp: item.tradeTimestamp, foreignAmount: item.foreignAmount, - qortAmount: item.qortAmount + qortAmount: item.qortAmount } } }).filter(item => !!item) @@ -1705,7 +1705,7 @@ class TraderInfoView extends LitElement { return { timestamp: item.tradeTimestamp, foreignAmount: item.foreignAmount, - qortAmount: item.qortAmount + qortAmount: item.qortAmount } } }).filter(item => !!item) @@ -1727,7 +1727,7 @@ class TraderInfoView extends LitElement { return { timestamp: item.tradeTimestamp, foreignAmount: item.foreignAmount, - qortAmount: item.qortAmount + qortAmount: item.qortAmount } } }).filter(item => !!item) @@ -1749,7 +1749,7 @@ class TraderInfoView extends LitElement { return { timestamp: item.tradeTimestamp, foreignAmount: item.foreignAmount, - qortAmount: item.qortAmount + qortAmount: item.qortAmount } } }).filter(item => !!item) @@ -1771,7 +1771,7 @@ class TraderInfoView extends LitElement { return { timestamp: item.tradeTimestamp, foreignAmount: item.foreignAmount, - qortAmount: item.qortAmount + qortAmount: item.qortAmount } } }).filter(item => !!item) @@ -1793,7 +1793,7 @@ class TraderInfoView extends LitElement { return { timestamp: item.tradeTimestamp, foreignAmount: item.foreignAmount, - qortAmount: item.qortAmount + qortAmount: item.qortAmount } } }).filter(item => !!item) @@ -1815,7 +1815,7 @@ class TraderInfoView extends LitElement { return { timestamp: item.tradeTimestamp, foreignAmount: item.foreignAmount, - qortAmount: item.qortAmount + qortAmount: item.qortAmount } } }).filter(item => !!item) @@ -1837,7 +1837,7 @@ class TraderInfoView extends LitElement { return { timestamp: item.tradeTimestamp, foreignAmount: item.foreignAmount, - qortAmount: item.qortAmount + qortAmount: item.qortAmount } } }).filter(item => !!item) diff --git a/plugins/plugins/core/components/UserInfo/UserInfo-css.js b/plugins/plugins/core/components/UserInfo/UserInfo-css.js index e3478f62..a648d446 100644 --- a/plugins/plugins/core/components/UserInfo/UserInfo-css.js +++ b/plugins/plugins/core/components/UserInfo/UserInfo-css.js @@ -1,4 +1,4 @@ -import { css } from 'lit' +import {css} from 'lit' export const userInfoStyles = css` .user-info-header { diff --git a/plugins/plugins/core/components/UserInfo/UserInfo.js b/plugins/plugins/core/components/UserInfo/UserInfo.js index fc9685a2..313eb197 100644 --- a/plugins/plugins/core/components/UserInfo/UserInfo.js +++ b/plugins/plugins/core/components/UserInfo/UserInfo.js @@ -1,7 +1,7 @@ -import { LitElement, html } from 'lit' -import { translate } from 'lit-translate' -import { userInfoStyles } from './UserInfo-css.js' -import { cropAddress } from '../../../utils/cropAddress.js' +import {html, LitElement} from 'lit' +import {translate} from 'lit-translate' +import {userInfoStyles} from './UserInfo-css.js' +import {cropAddress} from '../../../utils/cropAddress.js' import '@polymer/paper-progress/paper-progress.js' import '@vaadin/button' @@ -38,7 +38,7 @@ export class UserInfo extends LitElement { imageHTMLRes.onload = () => { this.isImageLoaded = true } - imageHTMLRes.onerror = () => { + imageHTMLRes.onerror = () => { if (this.imageFetches < 4) { setTimeout(() => { this.imageFetches = this.imageFetches + 1 @@ -90,7 +90,7 @@ export class UserInfo extends LitElement {
    diff --git a/plugins/plugins/core/components/WrapperModal-css.js b/plugins/plugins/core/components/WrapperModal-css.js index 1e587d7e..468647bd 100644 --- a/plugins/plugins/core/components/WrapperModal-css.js +++ b/plugins/plugins/core/components/WrapperModal-css.js @@ -1,4 +1,4 @@ -import { css } from 'lit' +import {css} from 'lit' export const wrapperModalStyles = css` .backdrop { @@ -9,7 +9,7 @@ export const wrapperModalStyles = css` bottom: 0; background: rgb(186 186 186 / 26%); overflow: hidden; - animation: backdrop_blur cubic-bezier(0.22, 1, 0.36, 1) 1s forwards; + animation: backdrop_blur cubic-bezier(0.22, 1, 0.36, 1) 1s forwards; z-index: 50 } @@ -34,11 +34,11 @@ export const wrapperModalStyles = css` } @keyframes backdrop_blur { - 0% { + 0% { backdrop-filter: blur(0px); background: transparent; } - 100% { + 100% { backdrop-filter: blur(5px); background: rgb(186 186 186 / 26%); } @@ -54,4 +54,4 @@ export const wrapperModalStyles = css` opacity: 1; } } -` \ No newline at end of file +` diff --git a/plugins/plugins/core/components/WrapperModal.js b/plugins/plugins/core/components/WrapperModal.js index e4d5f162..fd7fd96e 100644 --- a/plugins/plugins/core/components/WrapperModal.js +++ b/plugins/plugins/core/components/WrapperModal.js @@ -1,6 +1,5 @@ -import { LitElement, html } from 'lit' -import { render } from 'lit/html.js' -import { wrapperModalStyles } from './WrapperModal-css.js' +import {html, LitElement} from 'lit' +import {wrapperModalStyles} from './WrapperModal-css.js' export class WrapperModal extends LitElement { static get properties() { @@ -16,9 +15,9 @@ export class WrapperModal extends LitElement { render() { return html`
    -
    { this.onClickFunc() }} >
    diff --git a/plugins/plugins/core/components/computePowWorker.js b/plugins/plugins/core/components/computePowWorker.js index 2ed60a20..b89b9d84 100644 --- a/plugins/plugins/core/components/computePowWorker.js +++ b/plugins/plugins/core/components/computePowWorker.js @@ -1,4 +1,4 @@ -import { Sha256 } from 'asmcrypto.js' +import {Sha256} from 'asmcrypto.js' function sbrk(size, heap){ @@ -39,7 +39,7 @@ const computePow = async (chatBytes, path, difficulty) => { const hashAry = new Uint8Array(memory.buffer, hashPtr, 32); hashAry.set(chatBytesHash); - + const workBufferLength = 8 * 1024 * 1024; const workBufferPtr = sbrk(workBufferLength, heap); @@ -72,11 +72,11 @@ loadWebAssembly(path) } resolve() - + }); - }) + }) return response -} \ No newline at end of file +} diff --git a/plugins/plugins/core/components/computePowWorkerFile.js b/plugins/plugins/core/components/computePowWorkerFile.js index d9f5f662..b8bd962d 100644 --- a/plugins/plugins/core/components/computePowWorkerFile.js +++ b/plugins/plugins/core/components/computePowWorkerFile.js @@ -1,5 +1,4 @@ -import { Sha256 } from 'asmcrypto.js' - +import {Sha256} from 'asmcrypto.js' function sbrk(size, heap){ @@ -19,7 +18,7 @@ function sbrk(size, heap){ self.addEventListener('message', async e => { const response = await computePow(e.data.convertedBytes, e.data.path) postMessage(response) - + }) @@ -79,14 +78,14 @@ loadWebAssembly(path) .then(wasmModule => { response = { nonce : wasmModule.exports.compute2(hashPtr, workBufferPtr, workBufferLength, difficulty), - + } resolve() - + }); - }) + }) return response -} \ No newline at end of file +} diff --git a/plugins/plugins/core/components/frag-file-input.js b/plugins/plugins/core/components/frag-file-input.js index e35c4dc0..e7c57764 100644 --- a/plugins/plugins/core/components/frag-file-input.js +++ b/plugins/plugins/core/components/frag-file-input.js @@ -1,9 +1,9 @@ -import { LitElement, html, css } from 'lit' +import {css, html, LitElement} from 'lit' import '@material/mwc-button' import '@material/mwc-icon' -import { translate, translateUnsafeHTML } from 'lit-translate' +import {translate} from 'lit-translate' class FragFileInput extends LitElement { static get properties () { diff --git a/plugins/plugins/core/components/qortal-info-view.js b/plugins/plugins/core/components/qortal-info-view.js index c212e8c7..75fbd603 100644 --- a/plugins/plugins/core/components/qortal-info-view.js +++ b/plugins/plugins/core/components/qortal-info-view.js @@ -1,6 +1,6 @@ -import { LitElement, html, css } from 'lit' -import { render } from 'lit/html.js' -import { use, get, translate, translateUnsafeHTML, registerTranslateConfig } from 'lit-translate' +import {css, html, LitElement} from 'lit' +import {render} from 'lit/html.js' +import {get, translate} from 'lit-translate' import '@polymer/paper-dialog/paper-dialog.js' import '@material/mwc-button' import '@material/mwc-icon' @@ -1465,7 +1465,7 @@ class QortalInfoView extends LitElement { creatorAddress: item.creatorAddress, recipient: item.recipient, amount: item.amount - + } } }).filter(item => !!item) @@ -1482,7 +1482,7 @@ class QortalInfoView extends LitElement { creatorAddress: item.creatorAddress, recipient: item.recipient, amount: item.amount - + } } }).filter(item => !!item) @@ -1524,7 +1524,7 @@ class QortalInfoView extends LitElement { return { timestamp: item.tradeTimestamp, foreignAmount: item.foreignAmount, - qortAmount: item.qortAmount + qortAmount: item.qortAmount } } }).filter(item => !!item) @@ -1546,7 +1546,7 @@ class QortalInfoView extends LitElement { return { timestamp: item.tradeTimestamp, foreignAmount: item.foreignAmount, - qortAmount: item.qortAmount + qortAmount: item.qortAmount } } }).filter(item => !!item) @@ -1568,7 +1568,7 @@ class QortalInfoView extends LitElement { return { timestamp: item.tradeTimestamp, foreignAmount: item.foreignAmount, - qortAmount: item.qortAmount + qortAmount: item.qortAmount } } }).filter(item => !!item) @@ -1590,7 +1590,7 @@ class QortalInfoView extends LitElement { return { timestamp: item.tradeTimestamp, foreignAmount: item.foreignAmount, - qortAmount: item.qortAmount + qortAmount: item.qortAmount } } }).filter(item => !!item) @@ -1612,7 +1612,7 @@ class QortalInfoView extends LitElement { return { timestamp: item.tradeTimestamp, foreignAmount: item.foreignAmount, - qortAmount: item.qortAmount + qortAmount: item.qortAmount } } }).filter(item => !!item) @@ -1634,7 +1634,7 @@ class QortalInfoView extends LitElement { return { timestamp: item.tradeTimestamp, foreignAmount: item.foreignAmount, - qortAmount: item.qortAmount + qortAmount: item.qortAmount } } }).filter(item => !!item) @@ -1656,7 +1656,7 @@ class QortalInfoView extends LitElement { return { timestamp: item.tradeTimestamp, foreignAmount: item.foreignAmount, - qortAmount: item.qortAmount + qortAmount: item.qortAmount } } }).filter(item => !!item) @@ -1678,7 +1678,7 @@ class QortalInfoView extends LitElement { return { timestamp: item.tradeTimestamp, foreignAmount: item.foreignAmount, - qortAmount: item.qortAmount + qortAmount: item.qortAmount } } }).filter(item => !!item) @@ -1700,7 +1700,7 @@ class QortalInfoView extends LitElement { return { timestamp: item.tradeTimestamp, foreignAmount: item.foreignAmount, - qortAmount: item.qortAmount + qortAmount: item.qortAmount } } }).filter(item => !!item) @@ -1722,7 +1722,7 @@ class QortalInfoView extends LitElement { return { timestamp: item.tradeTimestamp, foreignAmount: item.foreignAmount, - qortAmount: item.qortAmount + qortAmount: item.qortAmount } } }).filter(item => !!item) @@ -1744,7 +1744,7 @@ class QortalInfoView extends LitElement { return { timestamp: item.tradeTimestamp, foreignAmount: item.foreignAmount, - qortAmount: item.qortAmount + qortAmount: item.qortAmount } } }).filter(item => !!item) @@ -1766,7 +1766,7 @@ class QortalInfoView extends LitElement { return { timestamp: item.tradeTimestamp, foreignAmount: item.foreignAmount, - qortAmount: item.qortAmount + qortAmount: item.qortAmount } } }).filter(item => !!item) diff --git a/plugins/plugins/core/components/snackbar.js b/plugins/plugins/core/components/snackbar.js index 6604d72c..12416b02 100644 --- a/plugins/plugins/core/components/snackbar.js +++ b/plugins/plugins/core/components/snackbar.js @@ -1,4 +1,4 @@ -import { LitElement, html, css } from 'lit' +import {css, html, LitElement} from 'lit' import '@material/mwc-snackbar' let queueElement diff --git a/plugins/plugins/core/components/time-elements/extended-time-element.js b/plugins/plugins/core/components/time-elements/extended-time-element.js index 583dee79..fce17b2d 100644 --- a/plugins/plugins/core/components/time-elements/extended-time-element.js +++ b/plugins/plugins/core/components/time-elements/extended-time-element.js @@ -1,4 +1,5 @@ -import { makeFormatter } from './utils'; +import {makeFormatter} from './utils'; + const datetimes = new WeakMap(); export default class ExtendedTimeElement extends HTMLElement { static get observedAttributes() { diff --git a/plugins/plugins/core/components/time-elements/local-time-element.js b/plugins/plugins/core/components/time-elements/local-time-element.js index 3494d218..f4d1e06b 100644 --- a/plugins/plugins/core/components/time-elements/local-time-element.js +++ b/plugins/plugins/core/components/time-elements/local-time-element.js @@ -1,5 +1,6 @@ -import { strftime, makeFormatter, isDayFirst } from './utils'; +import {isDayFirst, makeFormatter, strftime} from './utils'; import ExtendedTimeElement from './extended-time-element'; + const formatters = new WeakMap(); export default class LocalTimeElement extends ExtendedTimeElement { attributeChangedCallback(attrName, oldValue, newValue) { diff --git a/plugins/plugins/core/components/time-elements/relative-time-element.js b/plugins/plugins/core/components/time-elements/relative-time-element.js index 5654e08d..71cf1a81 100644 --- a/plugins/plugins/core/components/time-elements/relative-time-element.js +++ b/plugins/plugins/core/components/time-elements/relative-time-element.js @@ -1,6 +1,7 @@ import RelativeTime from './relative-time'; import ExtendedTimeElement from './extended-time-element'; -import { localeFromElement } from './utils'; +import {localeFromElement} from './utils'; + export default class RelativeTimeElement extends ExtendedTimeElement { getFormattedDate() { const date = this.date; diff --git a/plugins/plugins/core/components/time-elements/relative-time.js b/plugins/plugins/core/components/time-elements/relative-time.js index a2b4a6e5..f61d94dc 100644 --- a/plugins/plugins/core/components/time-elements/relative-time.js +++ b/plugins/plugins/core/components/time-elements/relative-time.js @@ -1,4 +1,5 @@ -import { strftime, makeFormatter, makeRelativeFormat, isDayFirst, isThisYear, isYearSeparator } from './utils'; +import {isDayFirst, isThisYear, isYearSeparator, makeFormatter, makeRelativeFormat, strftime} from './utils'; + export default class RelativeTime { constructor(date, locale) { this.date = date; diff --git a/plugins/plugins/core/components/time-elements/time-ago-element.js b/plugins/plugins/core/components/time-elements/time-ago-element.js index 6ac6b25a..b673094e 100644 --- a/plugins/plugins/core/components/time-elements/time-ago-element.js +++ b/plugins/plugins/core/components/time-elements/time-ago-element.js @@ -1,6 +1,7 @@ import RelativeTime from './relative-time'; import RelativeTimeElement from './relative-time-element'; -import { localeFromElement } from './utils'; +import {localeFromElement} from './utils'; + export default class TimeAgoElement extends RelativeTimeElement { getFormattedDate() { const format = this.getAttribute('format'); diff --git a/plugins/plugins/core/components/time-elements/time-until-element.js b/plugins/plugins/core/components/time-elements/time-until-element.js index 2b57a845..ebdd9f91 100644 --- a/plugins/plugins/core/components/time-elements/time-until-element.js +++ b/plugins/plugins/core/components/time-elements/time-until-element.js @@ -1,6 +1,7 @@ import RelativeTime from './relative-time'; import RelativeTimeElement from './relative-time-element'; -import { localeFromElement } from './utils'; +import {localeFromElement} from './utils'; + export default class TimeUntilElement extends RelativeTimeElement { getFormattedDate() { const format = this.getAttribute('format'); diff --git a/plugins/plugins/core/components/webworkerDecodeMessages.js b/plugins/plugins/core/components/webworkerDecodeMessages.js index c1fb5cb7..4c6af4f7 100644 --- a/plugins/plugins/core/components/webworkerDecodeMessages.js +++ b/plugins/plugins/core/components/webworkerDecodeMessages.js @@ -1,4 +1,5 @@ -import { Sha256 } from 'asmcrypto.js'; +import {Sha256} from 'asmcrypto.js'; + const nacl = {} //(function(nacl) { 'use strict'; @@ -2767,7 +2768,7 @@ export const decryptChatMessageBase64 = ( recipientPublicKey, lastReference ) => { - + let _encryptedMessage = atob(encryptedMessage); const binaryLength = _encryptedMessage.length; const bytes = new Uint8Array(binaryLength); diff --git a/plugins/plugins/core/group-management/group-management.src.js b/plugins/plugins/core/group-management/group-management.src.js index 3503aaa8..1363427a 100644 --- a/plugins/plugins/core/group-management/group-management.src.js +++ b/plugins/plugins/core/group-management/group-management.src.js @@ -1,13 +1,8 @@ -import { LitElement, html, css } from 'lit' -import { render } from 'lit/html.js' -import { Epml } from '../../../epml.js' +import {css, html, LitElement} from 'lit' +import {render} from 'lit/html.js' +import {Epml} from '../../../epml.js' import isElectron from 'is-electron' -import { use, get, translate, translateUnsafeHTML, registerTranslateConfig } from 'lit-translate' - -registerTranslateConfig({ - loader: lang => fetch(`/language/${lang}.json`).then(res => res.json()) -}) - +import {get, registerTranslateConfig, translate, use} from 'lit-translate' import '../components/time-elements/index.js' import '@material/mwc-button' import '@material/mwc-dialog' @@ -26,6 +21,10 @@ import '@vaadin/grid/vaadin-grid-filter-column.js' import '@vaadin/grid/vaadin-grid-sort-column.js' import '@vaadin/text-field' +registerTranslateConfig({ + loader: lang => fetch(`/language/${lang}.json`).then(res => res.json()) +}) + const parentEpml = new Epml({ type: 'WINDOW', source: window.parent }) class GroupManagement extends LitElement { @@ -302,7 +301,7 @@ class GroupManagement extends LitElement { } - mwc-textfield { + mwc-textfield { width:100%; } @@ -1505,7 +1504,7 @@ class GroupManagement extends LitElement { ${translate("walletpage.wchange21")} ${this.createFee} QORT.
    - + ${translate("grouppage.gchange30")}
    - +
    ${translate("grouppage.gchange4")}
    @@ -1565,7 +1564,7 @@ class GroupManagement extends LitElement { ${translate("walletpage.wchange21")} ${this.joinFee} QORT.
    - + ${translate("grouppage.gchange35")}
    - +
    ${translate("grouppage.gchange4")}
    @@ -1630,7 +1629,7 @@ class GroupManagement extends LitElement { ${translate("walletpage.wchange21")} ${this.leaveFee} QORT.
    - + { registerPlugins(pluginUrlsConf) } }) -}) \ No newline at end of file +}) diff --git a/plugins/plugins/core/messaging/chain-messaging/chain-messaging.src.js b/plugins/plugins/core/messaging/chain-messaging/chain-messaging.src.js index 7b9de6e1..7bed3eb8 100644 --- a/plugins/plugins/core/messaging/chain-messaging/chain-messaging.src.js +++ b/plugins/plugins/core/messaging/chain-messaging/chain-messaging.src.js @@ -1,6 +1,5 @@ -import { LitElement, html, css } from 'lit' -import { render } from 'lit/html.js' -import { Epml } from '../../../../epml.js' +import {css, html, LitElement} from 'lit' +import {Epml} from '../../../../epml.js' import isElectron from 'is-electron' const parentEpml = new Epml({ type: 'WINDOW', source: window.parent }) diff --git a/plugins/plugins/core/messaging/messaging.src.js b/plugins/plugins/core/messaging/messaging.src.js index cf7316ac..dfc77b96 100644 --- a/plugins/plugins/core/messaging/messaging.src.js +++ b/plugins/plugins/core/messaging/messaging.src.js @@ -1,5 +1,5 @@ -import { LitElement, html, css } from 'lit' -import { Epml } from '../../../epml.js' +import {css, html, LitElement} from 'lit' +import {Epml} from '../../../epml.js' import isElectron from 'is-electron' const parentEpml = new Epml({ type: 'WINDOW', source: window.parent }) @@ -57,7 +57,7 @@ class Messaging extends LitElement { } .sub-title:hover { - cursor: pointer; + cursor: pointer; } .sub-url { @@ -102,11 +102,11 @@ class Messaging extends LitElement {
  • this.getUrl('q-chat')}>Q-Chat
  • - +

    this.getUrl('chain-messaging')}>Chain-Based Messaging

    -

    A long-term message that is stored ON CHAIN. - These messages are able to be sent to groups or individual accounts, and are essentially the 'e-mail' of Qortal. +

    A long-term message that is stored ON CHAIN. + These messages are able to be sent to groups or individual accounts, and are essentially the 'e-mail' of Qortal. Use these messages if you intend on the message being a PERMANENT message that stays when and where you send it.

      @@ -121,8 +121,8 @@ class Messaging extends LitElement {

      this.getUrl('q-chat')}>Q-Chat

      -

      Is a custom chat system that is UNLIKE ANY OTHER in existence. It is the FIRST OF ITS KIND IN THE WORLD. - It is a real-time, blockchain-based chat system that utilizes a memory-based PoW (Proof Of Work) algorithm, to implement a specialized transaction that is 'temporary', on the Qortal blockchain. +

      Is a custom chat system that is UNLIKE ANY OTHER in existence. It is the FIRST OF ITS KIND IN THE WORLD. + It is a real-time, blockchain-based chat system that utilizes a memory-based PoW (Proof Of Work) algorithm, to implement a specialized transaction that is 'temporary', on the Qortal blockchain. Q-Chat messages will DISSAPEAR AFTER 24 HOURS and therefore are not a great choice for things you wish to be permanent.

        diff --git a/plugins/plugins/core/messaging/q-chat/computePowWorker.src.js b/plugins/plugins/core/messaging/q-chat/computePowWorker.src.js index 2ed60a20..b89b9d84 100644 --- a/plugins/plugins/core/messaging/q-chat/computePowWorker.src.js +++ b/plugins/plugins/core/messaging/q-chat/computePowWorker.src.js @@ -1,4 +1,4 @@ -import { Sha256 } from 'asmcrypto.js' +import {Sha256} from 'asmcrypto.js' function sbrk(size, heap){ @@ -39,7 +39,7 @@ const computePow = async (chatBytes, path, difficulty) => { const hashAry = new Uint8Array(memory.buffer, hashPtr, 32); hashAry.set(chatBytesHash); - + const workBufferLength = 8 * 1024 * 1024; const workBufferPtr = sbrk(workBufferLength, heap); @@ -72,11 +72,11 @@ loadWebAssembly(path) } resolve() - + }); - }) + }) return response -} \ No newline at end of file +} diff --git a/plugins/plugins/core/messaging/q-chat/q-chat-css.src.js b/plugins/plugins/core/messaging/q-chat/q-chat-css.src.js index 80b11a08..08408ca2 100644 --- a/plugins/plugins/core/messaging/q-chat/q-chat-css.src.js +++ b/plugins/plugins/core/messaging/q-chat/q-chat-css.src.js @@ -1,4 +1,4 @@ -import { css } from 'lit' +import {css} from 'lit' export const qchatStyles = css` * { @@ -115,14 +115,14 @@ export const qchatStyles = css` display: block; opacity: 1; animation: fadeIn 0.6s; -} +} @keyframes fadeIn { from { opacity: 0; top: -10px; } - + to { opacity: 1; top: -60px; @@ -194,7 +194,7 @@ export const qchatStyles = css` padding: 0px 0px 60px 0px; height: 85vh; overflow-y: auto; - overflow-x: hidden; + overflow-x: hidden; } .people-list ul::-webkit-scrollbar-track { @@ -213,7 +213,7 @@ export const qchatStyles = css` border-radius: 7px; transition: all 0.3s ease-in-out; } - + .chat { width: 80vw; height: 100vh; diff --git a/plugins/plugins/core/messaging/q-chat/q-chat.src.js b/plugins/plugins/core/messaging/q-chat/q-chat.src.js index c25fcc2f..dc54877a 100644 --- a/plugins/plugins/core/messaging/q-chat/q-chat.src.js +++ b/plugins/plugins/core/messaging/q-chat/q-chat.src.js @@ -1,10 +1,10 @@ -import { LitElement, html } from 'lit' -import { render } from 'lit/html.js' -import { passiveSupport } from 'passive-events-support/src/utils' -import { Epml } from '../../../../epml.js' -import { get, translate } from 'lit-translate' -import { qchatStyles } from './q-chat-css.src.js' -import { Editor, Extension } from '@tiptap/core' +import {html, LitElement} from 'lit' +import {render} from 'lit/html.js' +import {passiveSupport} from 'passive-events-support/src/utils' +import {Epml} from '../../../../epml.js' +import {get, translate} from 'lit-translate' +import {qchatStyles} from './q-chat-css.src.js' +import {Editor, Extension} from '@tiptap/core' import isElectron from 'is-electron' import WebWorker from 'web-worker:./computePowWorker.src.js' import StarterKit from '@tiptap/starter-kit' @@ -108,7 +108,7 @@ class Chat extends LitElement { async setActiveChatHeadUrl(url) { this.activeChatHeadUrl = url this.requestUpdate() - } + } resetChatEditor(){ this.editor.commands.setContent('') @@ -188,7 +188,7 @@ class Chat extends LitElement { updatePlaceholder(editor, text) { editor.extensionManager.extensions.forEach((extension) => { if (extension.name === "placeholder") { - + extension.options["placeholder"] = text editor.commands.focus('end') } @@ -236,7 +236,7 @@ class Chat extends LitElement {
      - +
      { this.openTabToGroupManagement() }}> group_add ${this.isEmptyArray(this.chatHeads) ? this.renderLoadingText() : this.renderChatHead(this.chatHeads)}
    - +
    this.scrollToBottom()}> @@ -270,19 +270,19 @@ class Chat extends LitElement { ${translate("chatpage.cchange5")} keyboard_arrow_down
    - + ${this.activeChatHeadUrl ? html`${this.renderChatPage()}` : html`${this.renderChatWelcomePage()}`}
    - { this.resetChatEditor() this.openPrivateMessage = false this.shadowRoot.getElementById('sendTo').value = "" this.userFoundModalOpen = false; this.userFound = [] - } } + } } style=${this.openPrivateMessage ? "visibility:visible;z-index:50" : "visibility: hidden;z-index:-100;position: relative"}>
    @@ -292,12 +292,12 @@ class Chat extends LitElement {

    ${translate("chatpage.cchange6")}

    - { this.userSelected = {} @@ -312,19 +312,19 @@ class Chat extends LitElement {
    ` ) : ( - html` - ` )}
    - -
    - { this.userSelected = result; this.userFound = []; @@ -380,7 +380,7 @@ class Chat extends LitElement { ?loading=${this.isLoading}>
    - +
    @@ -417,7 +417,7 @@ class Chat extends LitElement {
    - + ` } @@ -491,20 +491,20 @@ class Chat extends LitElement { } target = target.parentNode; } - + // If it doesn't, show the default Electron context menu event.preventDefault(); window.parent.electronAPI.showMyMenu(); }); - + } let configLoaded = false parentEpml.ready().then(() => { - + parentEpml.subscribe('config', c => { if (!configLoaded) { setTimeout(getBlockedUsers, 1) @@ -534,8 +534,8 @@ class Chat extends LitElement { window.parent.reduxStore.dispatch( window.parent.reduxAction.setSideEffectAction(null)) } - - } + + } }) parentEpml.request('apiCall', { url: `/addresses/balance/${window.parent.reduxStore.getState().app.selectedAddress.address}` @@ -551,7 +551,7 @@ class Chat extends LitElement { }, 60000) } - + clearConsole() { if (!isElectron()) { /* empty */ } else { @@ -581,7 +581,7 @@ class Chat extends LitElement { this.userFound = [] } else { this.userFound = [ - ...this.userFound, + ...this.userFound, result, ]; } @@ -596,7 +596,7 @@ class Chat extends LitElement { window.location.href = `../../group-management/index.html` } - async _sendMessage(outSideMsg, msg) { + async _sendMessage(outSideMsg, msg) { this.isLoading = true; const trimmedMessage = msg @@ -613,17 +613,17 @@ class Chat extends LitElement { this.sendMessage(stringifyMessageObject) } } - + async sendMessage(messageText) { this.isLoading = true - + const _recipient = this.shadowRoot.getElementById('sendTo').value - + let recipient - - const validateName = async (receiverName) => { + + const validateName = async (receiverName) => { let myRes - try { + try { let myNameRes = await parentEpml.request('apiCall', { type: 'api', url: `/names/${receiverName}` @@ -638,23 +638,23 @@ class Chat extends LitElement { return "" } }; - + const myNameRes = await validateName(_recipient) if (!myNameRes) { recipient = _recipient } else { recipient = myNameRes.owner } - + const getAddressPublicKey = async () => { let isEncrypted; let _publicKey; - + let addressPublicKey = await parentEpml.request('apiCall', { type: 'api', url: `/addresses/publickey/${recipient}` }) - + if (addressPublicKey.error === 102) { _publicKey = false let err4string = get("chatpage.cchange19") @@ -689,10 +689,10 @@ class Chat extends LitElement { isText: 1 } }) - + _computePow(chatResponse); }; - + const _computePow = async (chatBytes) => { const difficulty = this.balance < 4 ? 18 : 8 const path = window.parent.location.origin + '/memory-pow/memory-pow.wasm.full' @@ -708,16 +708,16 @@ class Chat extends LitElement { res() } }) - + let _response = await parentEpml.request('sign_chat', { nonce: this.selectedAddress.nonce, chatBytesArray: chatBytesArray, chatNonce: nonce }); - + getSendChatResponse(_response) }; - + const getSendChatResponse = (response) => { if (response === true) { this.setActiveChatHeadUrl(`direct/${recipient}`) @@ -730,20 +730,20 @@ class Chat extends LitElement { let err2string = get("chatpage.cchange21") parentEpml.request('showSnackBar', `${err2string}`) } - + this.isLoading = false } - + // Exec.. getAddressPublicKey() - + } insertImage(file) { if (file.type.includes('image')) { this.imageFile = file return - } + } parentEpml.request('showSnackBar', get("chatpage.cchange28")) } @@ -777,7 +777,7 @@ class Chat extends LitElement { hidelist.push(item) }) localStorage.setItem("MessageBlockedAddresses", JSON.stringify(hidelist)) - + this.blockedUserList = hidelist }) } @@ -885,7 +885,7 @@ class Chat extends LitElement { renderChatWelcomePage() { return html` - this.setOpenPrivateMessage(val)} > @@ -902,14 +902,14 @@ class Chat extends LitElement { // Check for the chat ID from and render chat messages // Else render Welcome to Q-CHat - // TODO: DONE: Do the above in the ChatPage + // TODO: DONE: Do the above in the ChatPage return html` - this.setOpenPrivateMessage(val)} .setActiveChatHeadUrl=${(val)=> this.setActiveChatHeadUrl(val)} balance=${this.balance} @@ -999,4 +999,4 @@ class Chat extends LitElement { } } -window.customElements.define('q-chat', Chat) \ No newline at end of file +window.customElements.define('q-chat', Chat) diff --git a/plugins/plugins/core/minting/minting-info.src.js b/plugins/plugins/core/minting/minting-info.src.js index 49304129..112b6820 100644 --- a/plugins/plugins/core/minting/minting-info.src.js +++ b/plugins/plugins/core/minting/minting-info.src.js @@ -1,18 +1,16 @@ -import { LitElement, html, css } from 'lit' -import { render } from 'lit/html.js' -import { Epml } from '../../../epml.js' +import {css, html, LitElement} from 'lit' +import {Epml} from '../../../epml.js' import isElectron from 'is-electron' -import { use, get, translate, translateUnsafeHTML, registerTranslateConfig } from 'lit-translate' - -registerTranslateConfig({ - loader: lang => fetch(`/language/${lang}.json`).then(res => res.json()) -}) - +import {registerTranslateConfig, translate, use} from 'lit-translate' import '@material/mwc-icon' import '@material/mwc-button' import '@material/mwc-dialog' import '@material/mwc-textfield' +registerTranslateConfig({ + loader: lang => fetch(`/language/${lang}.json`).then(res => res.json()) +}) + const parentEpml = new Epml({ type: 'WINDOW', source: window.parent }) class MintingInfo extends LitElement { diff --git a/plugins/plugins/core/name-registration/name-registration.src.js b/plugins/plugins/core/name-registration/name-registration.src.js index ecd51d15..f6ae5623 100644 --- a/plugins/plugins/core/name-registration/name-registration.src.js +++ b/plugins/plugins/core/name-registration/name-registration.src.js @@ -1,13 +1,8 @@ -import { LitElement, html, css } from 'lit' -import { render } from 'lit/html.js' -import { Epml } from '../../../epml.js' -import { use, get, translate, translateUnsafeHTML, registerTranslateConfig } from 'lit-translate' +import {css, html, LitElement} from 'lit' +import {render} from 'lit/html.js' +import {Epml} from '../../../epml.js' +import {get, registerTranslateConfig, translate, use} from 'lit-translate' import isElectron from 'is-electron' - -registerTranslateConfig({ - loader: lang => fetch(`/language/${lang}.json`).then(res => res.json()) -}) - import '@material/mwc-button' import '@material/mwc-dialog' import '@material/mwc-formfield' @@ -21,7 +16,11 @@ import '@vaadin/icon' import '@vaadin/icons' import '@vaadin/grid' import '@vaadin/text-field' -import { warningModal } from '../../utils/warning-modal.js' +import {warningModal} from '../../utils/warning-modal.js' + +registerTranslateConfig({ + loader: lang => fetch(`/language/${lang}.json`).then(res => res.json()) +}) const parentEpml = new Epml({ type: 'WINDOW', source: window.parent }) @@ -1194,4 +1193,4 @@ class NameRegistration extends LitElement { } } -window.customElements.define('name-registration', NameRegistration) \ No newline at end of file +window.customElements.define('name-registration', NameRegistration) diff --git a/plugins/plugins/core/names-market/names-market.src.js b/plugins/plugins/core/names-market/names-market.src.js index d3638920..21ca716a 100644 --- a/plugins/plugins/core/names-market/names-market.src.js +++ b/plugins/plugins/core/names-market/names-market.src.js @@ -1,14 +1,9 @@ -import { LitElement, html, css } from 'lit' -import { render } from 'lit/html.js' -import { Epml } from '../../../epml.js' -import { use, get, translate, translateUnsafeHTML, registerTranslateConfig } from 'lit-translate' +import {css, html, LitElement} from 'lit' +import {render} from 'lit/html.js' +import {Epml} from '../../../epml.js' +import {get, registerTranslateConfig, translate, use} from 'lit-translate' import isElectron from 'is-electron' import '../components/qortal-info-view.js' - -registerTranslateConfig({ - loader: lang => fetch(`/language/${lang}.json`).then(res => res.json()) -}) - import '@material/mwc-button' import '@material/mwc-dialog' import '@material/mwc-formfield' @@ -24,6 +19,10 @@ import '@vaadin/icons' import '@vaadin/grid' import '@vaadin/text-field' +registerTranslateConfig({ + loader: lang => fetch(`/language/${lang}.json`).then(res => res.json()) +}) + const parentEpml = new Epml({ type: 'WINDOW', source: window.parent }) class NamesMarket extends LitElement { @@ -1179,4 +1178,4 @@ class NamesMarket extends LitElement { } } -window.customElements.define('names-market', NamesMarket) \ No newline at end of file +window.customElements.define('names-market', NamesMarket) diff --git a/plugins/plugins/core/node-management/node-management.src.js b/plugins/plugins/core/node-management/node-management.src.js index 1da06d97..ea61db18 100644 --- a/plugins/plugins/core/node-management/node-management.src.js +++ b/plugins/plugins/core/node-management/node-management.src.js @@ -1,13 +1,8 @@ -import { LitElement, html, css } from 'lit' -import { render } from 'lit/html.js' -import { Epml } from '../../../epml.js' +import {css, html, LitElement} from 'lit' +import {render} from 'lit/html.js' +import {Epml} from '../../../epml.js' import isElectron from 'is-electron' -import { use, get, translate, translateUnsafeHTML, registerTranslateConfig } from 'lit-translate' - -registerTranslateConfig({ - loader: lang => fetch(`/language/${lang}.json`).then(res => res.json()) -}) - +import {get, registerTranslateConfig, translate, use} from 'lit-translate' import '@polymer/paper-spinner/paper-spinner-lite.js' import '@material/mwc-icon' import '@material/mwc-textfield' @@ -15,6 +10,10 @@ import '@material/mwc-button' import '@material/mwc-dialog' import '@vaadin/grid' +registerTranslateConfig({ + loader: lang => fetch(`/language/${lang}.json`).then(res => res.json()) +}) + const parentEpml = new Epml({ type: "WINDOW", source: window.parent }) class NodeManagement extends LitElement { diff --git a/plugins/plugins/core/overview-page/overview-page-css.js b/plugins/plugins/core/overview-page/overview-page-css.js index a5fe82e8..2e3ef30f 100644 --- a/plugins/plugins/core/overview-page/overview-page-css.js +++ b/plugins/plugins/core/overview-page/overview-page-css.js @@ -1,4 +1,4 @@ -import { css } from 'lit' +import {css} from 'lit' export const overviewStyle = css` *, @@ -742,4 +742,4 @@ p { .red { color: #C6011F; } -` \ No newline at end of file +` diff --git a/plugins/plugins/core/overview-page/overview-page.src.js b/plugins/plugins/core/overview-page/overview-page.src.js index 6b6d206e..de8ff4f2 100644 --- a/plugins/plugins/core/overview-page/overview-page.src.js +++ b/plugins/plugins/core/overview-page/overview-page.src.js @@ -1,8 +1,8 @@ -import { LitElement, html, css } from 'lit' -import { Epml } from '../../../epml.js' -import { use, get, translate, translateUnsafeHTML, registerTranslateConfig } from 'lit-translate' -import { overviewStyle } from './overview-page-css.js' -import { asyncReplace } from 'lit/directives/async-replace.js' +import {css, html, LitElement} from 'lit' +import {Epml} from '../../../epml.js' +import {get, registerTranslateConfig, translate, use} from 'lit-translate' +import {overviewStyle} from './overview-page-css.js' +import {asyncReplace} from 'lit/directives/async-replace.js' import isElectron from 'is-electron' import "@material/mwc-button" @@ -752,7 +752,7 @@ class StartMintingNow extends LitElement { - + ${this.openDialogRewardShare ? html`
    @@ -806,7 +806,7 @@ class StartMintingNow extends LitElement { Warning: do not close the Qortal UI until completion!

    ${this.errorMsg}

    -
    +
    ${this.errorMsg || this.status === 5 ? html` @@ -881,4 +881,4 @@ class MyButton extends LitElement { ` } } -customElements.define('my-button', MyButton) \ No newline at end of file +customElements.define('my-button', MyButton) diff --git a/plugins/plugins/core/puzzles/puzzles.src.js b/plugins/plugins/core/puzzles/puzzles.src.js index 75611c11..4a958ec8 100644 --- a/plugins/plugins/core/puzzles/puzzles.src.js +++ b/plugins/plugins/core/puzzles/puzzles.src.js @@ -1,13 +1,8 @@ -import { LitElement, html, css } from 'lit' -import { render } from 'lit/html.js' -import { Epml } from '../../../epml.js' +import {css, html, LitElement} from 'lit' +import {render} from 'lit/html.js' +import {Epml} from '../../../epml.js' import isElectron from 'is-electron' -import { use, get, translate, translateUnsafeHTML, registerTranslateConfig } from 'lit-translate' - -registerTranslateConfig({ - loader: lang => fetch(`/language/${lang}.json`).then(res => res.json()) -}) - +import {registerTranslateConfig, translate, use} from 'lit-translate' import nacl from '../../../../crypto/api/deps/nacl-fast.js' import Base58 from '../../../../crypto/api/deps/Base58.js' import publicKeyToAddress from '../../../../crypto/api/wallet/publicKeyToAddress.js' @@ -19,6 +14,10 @@ import '@material/mwc-slider' import '@polymer/paper-spinner/paper-spinner-lite.js' import '@vaadin/grid' +registerTranslateConfig({ + loader: lang => fetch(`/language/${lang}.json`).then(res => res.json()) +}) + const parentEpml = new Epml({ type: 'WINDOW', source: window.parent }) const DEFAULT_FEE = 0.001 diff --git a/plugins/plugins/core/q-app/q-apps.src.js b/plugins/plugins/core/q-app/q-apps.src.js index abbe1fca..48086c88 100644 --- a/plugins/plugins/core/q-app/q-apps.src.js +++ b/plugins/plugins/core/q-app/q-apps.src.js @@ -1,15 +1,9 @@ -import { LitElement, html, css } from 'lit' -import { render } from 'lit/html.js' -import { Epml } from '../../../epml.js' -import { use, get, translate, translateUnsafeHTML, registerTranslateConfig } from 'lit-translate' -import { columnBodyRenderer, gridRowDetailsRenderer } from '@vaadin/grid/lit.js' +import {css, html, LitElement} from 'lit' +import {render} from 'lit/html.js' +import {Epml} from '../../../epml.js' +import {get, registerTranslateConfig, translate, use} from 'lit-translate' import isElectron from 'is-electron' import '@polymer/paper-spinner/paper-spinner-lite.js' - -registerTranslateConfig({ - loader: lang => fetch(`/language/${lang}.json`).then(res => res.json()) -}) - import '@material/mwc-dialog' import '@material/mwc-icon' import '@material/mwc-button' @@ -22,6 +16,10 @@ import '@vaadin/icon' import '@vaadin/icons' import '@vaadin/text-field' +registerTranslateConfig({ + loader: lang => fetch(`/language/${lang}.json`).then(res => res.json()) +}) + const parentEpml = new Epml({ type: 'WINDOW', source: window.parent }) class QApps extends LitElement { @@ -432,7 +430,7 @@ class QApps extends LitElement { ${translate("appspage.schange10")} ` : ''} ${this.renderRelayModeText()}
    - +
    @@ -744,7 +742,7 @@ class QApps extends LitElement { const nodeUrl = myNode.protocol + '://' + myNode.domain + ':' + myNode.port let jsonOffsetUrl = `${nodeUrl}/arbitrary/resources?service=APP&default=true&limit=20&offset=${offset}&reverse=false&includestatus=true&includemetadata=true&excludeblocked=true` this.isLoading = true - + const jsonOffsetRes = await fetch(jsonOffsetUrl) const jsonOffsetData = await jsonOffsetRes.json() diff --git a/plugins/plugins/core/qdn/browser/browser.src.js b/plugins/plugins/core/qdn/browser/browser.src.js index 70622b23..e1cac571 100644 --- a/plugins/plugins/core/qdn/browser/browser.src.js +++ b/plugins/plugins/core/qdn/browser/browser.src.js @@ -1,14 +1,8 @@ -import { LitElement, html, css } from 'lit' -import { render } from 'lit/html.js' -import { Epml } from '../../../../epml' +import {css, html, LitElement} from 'lit' +import {Epml} from '../../../../epml' import isElectron from 'is-electron' -import { use, get, translate, translateUnsafeHTML, registerTranslateConfig } from 'lit-translate' +import {get, registerTranslateConfig, translate, use} from 'lit-translate' import ShortUniqueId from 'short-unique-id'; - -registerTranslateConfig({ - loader: (lang) => fetch(`/language/${lang}.json`).then((res) => res.json()) -}) - import FileSaver from 'file-saver' import * as actions from '../../components/qdn-action-types' import '@material/mwc-button' @@ -16,13 +10,24 @@ import '@material/mwc-icon' import '@material/mwc-checkbox' import WebWorker from 'web-worker:./computePowWorkerFile.src.js' import WebWorkerChat from 'web-worker:./computePowWorker.src.js' -import { publishData } from '../../../utils/publish-image.js' -import { Loader } from '../../../utils/loader.js'; -import { QORT_DECIMALS } from '../../../../../crypto/api/constants' -import nacl from '../../../../../crypto/api/deps/nacl-fast.js' -import ed2curve from '../../../../../crypto/api/deps/ed2curve.js' -import { mimeToExtensionMap } from '../../components/qdn-action-constants'; -import { base64ToUint8Array, decryptDeprecatedSingle, decryptGroupData, encryptDataGroup, fileToBase64, uint8ArrayStartsWith, uint8ArrayToBase64 } from '../../components/qdn-action-encryption'; +import {publishData} from '../../../utils/publish-image.js' +import {Loader} from '../../../utils/loader.js'; +import {QORT_DECIMALS} from '../../../../../crypto/api/constants' +import {mimeToExtensionMap} from '../../components/qdn-action-constants'; +import { + base64ToUint8Array, + decryptDeprecatedSingle, + decryptGroupData, + encryptDataGroup, + fileToBase64, + uint8ArrayStartsWith, + uint8ArrayToBase64 +} from '../../components/qdn-action-encryption'; + +registerTranslateConfig({ + loader: (lang) => fetch(`/language/${lang}.json`).then((res) => res.json()) +}) + const parentEpml = new Epml({ type: 'WINDOW', source: window.parent }); class WebBrowser extends LitElement { @@ -117,7 +122,7 @@ class WebBrowser extends LitElement { input { outline: none } - + paper-progress { --paper-progress-active-color: var(--mdc-theme-primary); @@ -318,7 +323,7 @@ class WebBrowser extends LitElement { } async linkOpenNewTab(link) { - + const value = link let newQuery = value if (newQuery.endsWith('/')) { @@ -337,7 +342,7 @@ class WebBrowser extends LitElement { if (path) { query = query + `&path=${path}` } - + window.parent.reduxStore.dispatch(window.parent.reduxAction.setNewTab({ url: `qdn/browser/index.html${query}`, id: this.uid.rnd(), @@ -352,7 +357,7 @@ class WebBrowser extends LitElement { "parent": false } })) - + } render() { @@ -716,7 +721,7 @@ class WebBrowser extends LitElement { let votedialog5 = get("transactions.votedialog5") let votedialog6 = get("transactions.votedialog6") let feeDialog = get("walletpage.wchange12") - + let myTxnrequest = await parentEpml.request('transaction', { type: 8, nonce: this.selectedAddress.nonce, @@ -1548,10 +1553,10 @@ class WebBrowser extends LitElement { } const pollName = data.pollName - const pollDescription = data.pollDescription + const pollDescription = data.pollDescription const pollOptions = data.pollOptions - const pollOwnerAddress = data.pollOwnerAddress - + const pollOwnerAddress = data.pollOwnerAddress + try { this.loader.show() const resCreatePoll = await this._createPoll(pollName, pollDescription, pollOptions, pollOwnerAddress) @@ -1589,7 +1594,7 @@ class WebBrowser extends LitElement { response = JSON.stringify(obj) break } - + } case actions.NOTIFICATIONS_PERMISSION: { @@ -1609,11 +1614,11 @@ class WebBrowser extends LitElement { response = false break } - + } catch (error) { break } - + } case actions.SEND_LOCAL_NOTIFICATION: { @@ -1627,10 +1632,10 @@ class WebBrowser extends LitElement { const interval = appInfo.interval if (lastNotification && interval) { const timeDifference = Date.now() - lastNotification - + if (timeDifference > interval) { parentEpml.request('showNotification', { - title, type: "qapp-local-notification", sound: '', url, options: { body: message, icon, badge: icon } + title, type: "qapp-local-notification", sound: '', url, options: { body: message, icon, badge: icon } }) response = true this.updateLastNotification(id, this.name) @@ -1640,7 +1645,7 @@ class WebBrowser extends LitElement { } } else if(!lastNotification){ parentEpml.request('showNotification', { - title, type: "qapp-local-notification", sound: '', url, options: { body: message, icon, badge: icon } + title, type: "qapp-local-notification", sound: '', url, options: { body: message, icon, badge: icon } }) response = true this.updateLastNotification(id) @@ -1648,16 +1653,16 @@ class WebBrowser extends LitElement { } else { throw new Error(`invalid data`) } - + } catch (error) { const obj = {} const errorMsg = error.message || "error in pushing notification" obj['error'] = errorMsg response = JSON.stringify(obj) break - + } - + } case actions.SEND_CHAT_MESSAGE: { const message = data.message @@ -2045,7 +2050,7 @@ class WebBrowser extends LitElement { try { this.loader.show() - + const resDeployAt = await this._deployAt(data.name, data.description, data.tags, data.creationBytes, data.amount, data.assetId, data.type) response = JSON.stringify(resDeployAt) } catch (error) { @@ -3196,7 +3201,7 @@ class WebBrowser extends LitElement { if(!appName) throw new Error('unknown app name') const id = `appNotificationList-${this.selectedAddress.address}` const checkData = localStorage.getItem(id) ? JSON.parse(localStorage.getItem(id)) : null - + if (!checkData) { const newData = { [appName]: { @@ -3217,7 +3222,7 @@ class WebBrowser extends LitElement { updateLastNotification(id, appName) { const checkData = localStorage.getItem(id) ? JSON.parse(localStorage.getItem(id)) : null - + if (checkData) { const copyData = { ...checkData } if (copyData[appName]) { @@ -3231,7 +3236,7 @@ class WebBrowser extends LitElement { localStorage.setItem(id, JSON.stringify(copyData)) } } - + renderFollowUnfollowButton() { // Only show the follow/unfollow button if we have permission to modify the list on this node @@ -3510,7 +3515,7 @@ async function showModalAndWait(type, data) {
    ` : ''} - ${type === actions.PUBLISH_MULTIPLE_QDN_RESOURCES ? ` + ${type === actions.PUBLISH_MULTIPLE_QDN_RESOURCES ? ` ` : ''} - + ${type === actions.DELETE_LIST_ITEM ? ` - +
    - + - ` : ''} + ` : ''} ${sponsorship.name || sponsorship.address} @@ -159,7 +159,7 @@ class SponsorshipList extends LitElement { @click=${() => this.removeRewardShare(sponsorship)} > delete_forever ${translate('rewardsharepage.rchange17')} - +
    `)} @@ -169,7 +169,7 @@ class SponsorshipList extends LitElement { ${translate('sponsorshipspage.schange3')}  ${this.sponsorships.length} - +

    ${translate('sponsorshipspage.schange4')}  @@ -240,7 +240,7 @@ class SponsorshipList extends LitElement { - +

    ${translate('sponsorshipspage.schange14')}

    @@ -276,7 +276,7 @@ class SponsorshipList extends LitElement {

    ${this.privateRewardShareKey && this.status === 4 ? html` -
  • +
  • ${translate('sponsorshipspage.schange16')}

    @@ -372,7 +372,7 @@ class SponsorshipList extends LitElement { this.lookupPublicAddressValue = '' this.isOpenDialogPublicKeyLookup = false this.errorLookup = '' - + }} > ${translate('general.close')} @@ -496,7 +496,7 @@ class SponsorshipList extends LitElement { let rewardShares = await this.getRewardShareRelationship(address) rewardShares = rewardShares.filter((rs) => rs.recipient !== address) - + const getAccountInfo = rewardShares.map(async (rs) => { const addressInfo = await parentEpml.request('apiCall', { type: 'api', @@ -514,7 +514,7 @@ class SponsorshipList extends LitElement { const urlPic = `${avatarUrl}/arbitrary/THUMBNAIL/${getNames[0].name}/qortal_avatar?async=true&apiKey=${this.getApiKey()}` url = urlPic } - + let blocksRemaining = this._levelUpBlocks(addressInfo) blocksRemaining = +blocksRemaining > 0 ? +blocksRemaining : 0 return { @@ -567,7 +567,7 @@ class SponsorshipList extends LitElement { } async removeRewardShare(rewardShareObject) { - + const selectedAddress = window.parent.reduxStore.getState().app.selectedAddress const myPercentageShare = -1 @@ -649,7 +649,7 @@ class SponsorshipList extends LitElement { // Check for valid... this.isLoadingCreateSponsorship = true - + // Get Last Ref const getLastRef = async () => { let myRef = await parentEpml.request('apiCall', { @@ -670,17 +670,17 @@ class SponsorshipList extends LitElement { // Validate Reward Share by Level const validateReceiver = async () => { - let accountDetails + let accountDetails try { accountDetails = await getAccountDetails() } catch (error) { this.errorMessage = 'Could not fetch account details' } - + let lastRef = await getLastRef() if (accountDetails.level >= 5 || accountDetails.flags === 1) { this.status = 1 - + this.errorMessage = '' try { @@ -693,7 +693,7 @@ class SponsorshipList extends LitElement { let err5string = get('rewardsharepage.rchange20') this.errorMessage = `${err5string} ${accountDetails.level}` } - + } // Make Transaction Request @@ -747,12 +747,12 @@ class SponsorshipList extends LitElement { this.status = 2 let interval = null let stop = false - + const getAnswer = async () => { - + if (!stop) { stop= true - + try { const recipientAddress = window.parent.base58PublicKeyToAddress(recipientPublicKey) const minterAddress = window.parent.reduxStore.getState().app.selectedAddress.address @@ -764,10 +764,10 @@ class SponsorshipList extends LitElement { clearInterval(interval) this.status = 3 this.timer = countDown(isCopy ? 5 : 180, ()=> this.changeStatus(4)) - } + } } catch (error) { } - + stop = false } } diff --git a/plugins/plugins/core/streams/AddressWatcher.js b/plugins/plugins/core/streams/AddressWatcher.js index ac3fbf7c..c2411aa6 100644 --- a/plugins/plugins/core/streams/AddressWatcher.js +++ b/plugins/plugins/core/streams/AddressWatcher.js @@ -1,4 +1,4 @@ -import { parentEpml } from '../connect.js' +import {parentEpml} from '../connect.js' // Tests to see if a block or transaction should trigger an address reload...but we're not doing that yet, because of no time for good testing const transactionTests = [] diff --git a/plugins/plugins/core/streams/UnconfirmedTransactionWatcher.js b/plugins/plugins/core/streams/UnconfirmedTransactionWatcher.js index 1d95cafd..528ada42 100644 --- a/plugins/plugins/core/streams/UnconfirmedTransactionWatcher.js +++ b/plugins/plugins/core/streams/UnconfirmedTransactionWatcher.js @@ -1,4 +1,4 @@ -import { parentEpml } from '../connect.js' +import {parentEpml} from '../connect.js' export class UnconfirmedTransactionWatcher { constructor() { diff --git a/plugins/plugins/core/streams/onNewBlock.js b/plugins/plugins/core/streams/onNewBlock.js index 990bda65..495f920b 100644 --- a/plugins/plugins/core/streams/onNewBlock.js +++ b/plugins/plugins/core/streams/onNewBlock.js @@ -1,4 +1,4 @@ -import { parentEpml } from '../connect.js' +import {parentEpml} from '../connect.js' let socketObject let activeBlockSocketTimeout diff --git a/plugins/plugins/core/streams/streams.js b/plugins/plugins/core/streams/streams.js index 809bd53d..48d91546 100644 --- a/plugins/plugins/core/streams/streams.js +++ b/plugins/plugins/core/streams/streams.js @@ -1,6 +1,6 @@ -import { parentEpml } from '../connect.js' +import {parentEpml} from '../connect.js' -import { startConfigWatcher } from './onNewBlock.js' +import {startConfigWatcher} from './onNewBlock.js' const setAccountInfo = async (addr) => { diff --git a/plugins/plugins/core/trade-bot/trade-bot-portal.src.js b/plugins/plugins/core/trade-bot/trade-bot-portal.src.js index 20e0e35e..52c279fa 100644 --- a/plugins/plugins/core/trade-bot/trade-bot-portal.src.js +++ b/plugins/plugins/core/trade-bot/trade-bot-portal.src.js @@ -1,15 +1,10 @@ -import { LitElement, html, css } from 'lit' -import { render } from 'lit/html.js' -import { Epml } from '../../../epml.js' +import {css, html, LitElement} from 'lit' +import {render} from 'lit/html.js' +import {Epml} from '../../../epml.js' import isElectron from 'is-electron' -import { use, get, translate, translateUnsafeHTML, registerTranslateConfig } from 'lit-translate' +import {get, registerTranslateConfig, translate, use} from 'lit-translate' import Base58 from '../../../../crypto/api/deps/Base58.js' -import { encryptData, decryptData } from '../../../../core/src/lockScreen.js' - -registerTranslateConfig({ - loader: lang => fetch(`/language/${lang}.json`).then(res => res.json()) -}) - +import {decryptData, encryptData} from '../../../../core/src/lockScreen.js' import '@material/mwc-button' import '@material/mwc-textfield' import '@material/mwc-icon' @@ -28,6 +23,10 @@ import '@vaadin/grid' import '@vaadin/grid/vaadin-grid-sorter' import '@vaadin/password-field' +registerTranslateConfig({ + loader: lang => fetch(`/language/${lang}.json`).then(res => res.json()) +}) + const parentEpml = new Epml({ type: 'WINDOW', source: window.parent }) let workers = new Map() @@ -168,7 +167,7 @@ class TradeBotPortal extends LitElement { padding-top: 3px; } #tab-sell[active] { - --mdc-theme-primary: rgb(255, 89, 89); + --mdc-theme-primary: rgb(255, 89, 89); } #trade-portal-page { background: var(--white); @@ -2665,7 +2664,7 @@ class TradeBotPortal extends LitElement { return { timestamp: item.tradeTimestamp, foreignAmount: item.foreignAmount, - qortAmount: item.qortAmount + qortAmount: item.qortAmount } } }).filter(item => !!item) @@ -3113,7 +3112,7 @@ class TradeBotPortal extends LitElement { this._historicTradesGrid.clearCache() } this.listedCoins.get(offer.foreignBlockchain).tradeOffersSocketCounter > 1 ? addNewHistoricTrade() : null - + } } catch(e) { console.log("Error processing redeemed trade offer from "+offer.foreignBlockchain) @@ -3123,7 +3122,7 @@ class TradeBotPortal extends LitElement { processTradingTrade(offer) { try { if (this.listedCoins.get(offer.foreignBlockchain).name!='') { - + if (offer.qortalCreator === this.selectedAddress.address && this.listedCoins.get(offer.foreignBlockchain).tradeOffersSocketCounter > 1) { this.updateWalletBalance() } @@ -3143,7 +3142,7 @@ class TradeBotPortal extends LitElement { processRefundedTrade(offer) { try { if (this.listedCoins.get(offer.foreignBlockchain).name!='') { - + if (offer.qortalCreator === this.selectedAddress.address) { if (this.listedCoins.get(offer.foreignBlockchain).tradeOffersSocketCounter > 1) { this.updateWalletBalance() @@ -3161,7 +3160,7 @@ class TradeBotPortal extends LitElement { processCancelledTrade(offer) { try { if (this.listedCoins.get(offer.foreignBlockchain).name!='') { - + if (offer.qortalCreator === this.selectedAddress.address) { if (this.listedCoins.get(offer.foreignBlockchain).tradeOffersSocketCounter > 1) { this.updateWalletBalance() @@ -3842,4 +3841,4 @@ class TradeBotPortal extends LitElement { } } -window.customElements.define('trade-bot-portal', TradeBotPortal) \ No newline at end of file +window.customElements.define('trade-bot-portal', TradeBotPortal) diff --git a/plugins/plugins/core/trade-portal/charts/arrr-charts.js b/plugins/plugins/core/trade-portal/charts/arrr-charts.js index 532259fb..9bed8d4c 100644 --- a/plugins/plugins/core/trade-portal/charts/arrr-charts.js +++ b/plugins/plugins/core/trade-portal/charts/arrr-charts.js @@ -1,18 +1,10 @@ -import { LitElement, html, css } from 'lit' -import { render } from 'lit/html.js' -import { Epml } from '../../../../epml.js' -import { use, get, translate, translateUnsafeHTML, registerTranslateConfig } from 'lit-translate' - -registerTranslateConfig({ - loader: lang => fetch(`/language/${lang}.json`).then(res => res.json()) -}) - +import {css, html, LitElement} from 'lit' +import {Epml} from '../../../../epml.js' +import {get, registerTranslateConfig, translate, use} from 'lit-translate' import '@polymer/paper-dialog/paper-dialog.js' import * as Highcharts from 'highcharts' import Exporting from 'highcharts/modules/exporting' -Exporting(Highcharts) import StockChart from 'highcharts/modules/stock' -StockChart(Highcharts) import 'highcharts/highcharts-more.js' import 'highcharts/modules/accessibility.js' import 'highcharts/modules/boost.js' @@ -20,6 +12,13 @@ import 'highcharts/modules/data.js' import 'highcharts/modules/export-data.js' import 'highcharts/modules/offline-exporting.js' +registerTranslateConfig({ + loader: lang => fetch(`/language/${lang}.json`).then(res => res.json()) +}) + +Exporting(Highcharts) +StockChart(Highcharts) + let arrrChartDialog const parentEpml = new Epml({ type: 'WINDOW', source: window.parent }) @@ -211,4 +210,4 @@ window.customElements.define('arrr-charts', ArrrCharts) const chartsarrr = document.createElement('arrr-charts') arrrChartDialog = document.body.appendChild(chartsarrr) -export default arrrChartDialog \ No newline at end of file +export default arrrChartDialog diff --git a/plugins/plugins/core/trade-portal/charts/btc-charts.js b/plugins/plugins/core/trade-portal/charts/btc-charts.js index 3084db43..438b5887 100644 --- a/plugins/plugins/core/trade-portal/charts/btc-charts.js +++ b/plugins/plugins/core/trade-portal/charts/btc-charts.js @@ -1,18 +1,10 @@ -import { LitElement, html, css } from 'lit' -import { render } from 'lit/html.js' -import { Epml } from '../../../../epml.js' -import { use, get, translate, translateUnsafeHTML, registerTranslateConfig } from 'lit-translate' - -registerTranslateConfig({ - loader: lang => fetch(`/language/${lang}.json`).then(res => res.json()) -}) - +import {css, html, LitElement} from 'lit' +import {Epml} from '../../../../epml.js' +import {get, registerTranslateConfig, translate, use} from 'lit-translate' import '@polymer/paper-dialog/paper-dialog.js' import * as Highcharts from 'highcharts' import Exporting from 'highcharts/modules/exporting' -Exporting(Highcharts) import StockChart from 'highcharts/modules/stock' -StockChart(Highcharts) import 'highcharts/highcharts-more.js' import 'highcharts/modules/accessibility.js' import 'highcharts/modules/boost.js' @@ -20,6 +12,13 @@ import 'highcharts/modules/data.js' import 'highcharts/modules/export-data.js' import 'highcharts/modules/offline-exporting.js' +registerTranslateConfig({ + loader: lang => fetch(`/language/${lang}.json`).then(res => res.json()) +}) + +Exporting(Highcharts) +StockChart(Highcharts) + let btcChartDialog const parentEpml = new Epml({ type: 'WINDOW', source: window.parent }) @@ -212,4 +211,4 @@ window.customElements.define('btc-charts', BtcCharts) const chartsbtc = document.createElement('btc-charts') btcChartDialog = document.body.appendChild(chartsbtc) -export default btcChartDialog \ No newline at end of file +export default btcChartDialog diff --git a/plugins/plugins/core/trade-portal/charts/dgb-charts.js b/plugins/plugins/core/trade-portal/charts/dgb-charts.js index 39ece003..07ce477f 100644 --- a/plugins/plugins/core/trade-portal/charts/dgb-charts.js +++ b/plugins/plugins/core/trade-portal/charts/dgb-charts.js @@ -1,18 +1,10 @@ -import { LitElement, html, css } from 'lit' -import { render } from 'lit/html.js' -import { Epml } from '../../../../epml.js' -import { use, get, translate, translateUnsafeHTML, registerTranslateConfig } from 'lit-translate' - -registerTranslateConfig({ - loader: lang => fetch(`/language/${lang}.json`).then(res => res.json()) -}) - +import {css, html, LitElement} from 'lit' +import {Epml} from '../../../../epml.js' +import {get, registerTranslateConfig, translate, use} from 'lit-translate' import '@polymer/paper-dialog/paper-dialog.js' import * as Highcharts from 'highcharts' import Exporting from 'highcharts/modules/exporting' -Exporting(Highcharts) import StockChart from 'highcharts/modules/stock' -StockChart(Highcharts) import 'highcharts/highcharts-more.js' import 'highcharts/modules/accessibility.js' import 'highcharts/modules/boost.js' @@ -20,6 +12,13 @@ import 'highcharts/modules/data.js' import 'highcharts/modules/export-data.js' import 'highcharts/modules/offline-exporting.js' +registerTranslateConfig({ + loader: lang => fetch(`/language/${lang}.json`).then(res => res.json()) +}) + +Exporting(Highcharts) +StockChart(Highcharts) + let dgbChartDialog const parentEpml = new Epml({ type: 'WINDOW', source: window.parent }) @@ -211,4 +210,4 @@ window.customElements.define('dgb-charts', DgbCharts) const chartsdgb = document.createElement('dgb-charts') dgbChartDialog = document.body.appendChild(chartsdgb) -export default dgbChartDialog \ No newline at end of file +export default dgbChartDialog diff --git a/plugins/plugins/core/trade-portal/charts/doge-charts.js b/plugins/plugins/core/trade-portal/charts/doge-charts.js index eb58801b..b7155ee6 100644 --- a/plugins/plugins/core/trade-portal/charts/doge-charts.js +++ b/plugins/plugins/core/trade-portal/charts/doge-charts.js @@ -1,18 +1,10 @@ -import { LitElement, html, css } from 'lit' -import { render } from 'lit/html.js' -import { Epml } from '../../../../epml.js' -import { use, get, translate, translateUnsafeHTML, registerTranslateConfig } from 'lit-translate' - -registerTranslateConfig({ - loader: lang => fetch(`/language/${lang}.json`).then(res => res.json()) -}) - +import {css, html, LitElement} from 'lit' +import {Epml} from '../../../../epml.js' +import {get, registerTranslateConfig, translate, use} from 'lit-translate' import '@polymer/paper-dialog/paper-dialog.js' import * as Highcharts from 'highcharts' import Exporting from 'highcharts/modules/exporting' -Exporting(Highcharts) import StockChart from 'highcharts/modules/stock' -StockChart(Highcharts) import 'highcharts/highcharts-more.js' import 'highcharts/modules/accessibility.js' import 'highcharts/modules/boost.js' @@ -20,6 +12,13 @@ import 'highcharts/modules/data.js' import 'highcharts/modules/export-data.js' import 'highcharts/modules/offline-exporting.js' +registerTranslateConfig({ + loader: lang => fetch(`/language/${lang}.json`).then(res => res.json()) +}) + +Exporting(Highcharts) +StockChart(Highcharts) + let dogeChartDialog const parentEpml = new Epml({ type: 'WINDOW', source: window.parent }) @@ -211,4 +210,4 @@ window.customElements.define('doge-charts', DogeCharts) const chartsdoge = document.createElement('doge-charts') dogeChartDialog = document.body.appendChild(chartsdoge) -export default dogeChartDialog \ No newline at end of file +export default dogeChartDialog diff --git a/plugins/plugins/core/trade-portal/charts/ltc-charts.js b/plugins/plugins/core/trade-portal/charts/ltc-charts.js index 0c9aad45..3dbe82cc 100644 --- a/plugins/plugins/core/trade-portal/charts/ltc-charts.js +++ b/plugins/plugins/core/trade-portal/charts/ltc-charts.js @@ -1,18 +1,10 @@ -import { LitElement, html, css } from 'lit' -import { render } from 'lit/html.js' -import { Epml } from '../../../../epml.js' -import { use, get, translate, translateUnsafeHTML, registerTranslateConfig } from 'lit-translate' - -registerTranslateConfig({ - loader: lang => fetch(`/language/${lang}.json`).then(res => res.json()) -}) - +import {css, html, LitElement} from 'lit' +import {Epml} from '../../../../epml.js' +import {get, registerTranslateConfig, translate, use} from 'lit-translate' import '@polymer/paper-dialog/paper-dialog.js' import * as Highcharts from 'highcharts' import Exporting from 'highcharts/modules/exporting' -Exporting(Highcharts) import StockChart from 'highcharts/modules/stock' -StockChart(Highcharts) import 'highcharts/highcharts-more.js' import 'highcharts/modules/accessibility.js' import 'highcharts/modules/boost.js' @@ -20,6 +12,13 @@ import 'highcharts/modules/data.js' import 'highcharts/modules/export-data.js' import 'highcharts/modules/offline-exporting.js' +registerTranslateConfig({ + loader: lang => fetch(`/language/${lang}.json`).then(res => res.json()) +}) + +Exporting(Highcharts) +StockChart(Highcharts) + let ltcChartDialog const parentEpml = new Epml({ type: 'WINDOW', source: window.parent }) @@ -211,4 +210,4 @@ window.customElements.define('ltc-charts', LtcCharts) const chartsltc = document.createElement('ltc-charts') ltcChartDialog = document.body.appendChild(chartsltc) -export default ltcChartDialog \ No newline at end of file +export default ltcChartDialog diff --git a/plugins/plugins/core/trade-portal/charts/rvn-charts.js b/plugins/plugins/core/trade-portal/charts/rvn-charts.js index 722fb4cc..11e2ca27 100644 --- a/plugins/plugins/core/trade-portal/charts/rvn-charts.js +++ b/plugins/plugins/core/trade-portal/charts/rvn-charts.js @@ -1,18 +1,10 @@ -import { LitElement, html, css } from 'lit' -import { render } from 'lit/html.js' -import { Epml } from '../../../../epml.js' -import { use, get, translate, translateUnsafeHTML, registerTranslateConfig } from 'lit-translate' - -registerTranslateConfig({ - loader: lang => fetch(`/language/${lang}.json`).then(res => res.json()) -}) - +import {css, html, LitElement} from 'lit' +import {Epml} from '../../../../epml.js' +import {get, registerTranslateConfig, translate, use} from 'lit-translate' import '@polymer/paper-dialog/paper-dialog.js' import * as Highcharts from 'highcharts' import Exporting from 'highcharts/modules/exporting' -Exporting(Highcharts) import StockChart from 'highcharts/modules/stock' -StockChart(Highcharts) import 'highcharts/highcharts-more.js' import 'highcharts/modules/accessibility.js' import 'highcharts/modules/boost.js' @@ -20,6 +12,13 @@ import 'highcharts/modules/data.js' import 'highcharts/modules/export-data.js' import 'highcharts/modules/offline-exporting.js' +registerTranslateConfig({ + loader: lang => fetch(`/language/${lang}.json`).then(res => res.json()) +}) + +Exporting(Highcharts) +StockChart(Highcharts) + let rvnChartDialog const parentEpml = new Epml({ type: 'WINDOW', source: window.parent }) @@ -211,4 +210,4 @@ window.customElements.define('rvn-charts', RvnCharts) const chartsrvn = document.createElement('rvn-charts') rvnChartDialog = document.body.appendChild(chartsrvn) -export default rvnChartDialog \ No newline at end of file +export default rvnChartDialog diff --git a/plugins/plugins/core/trade-portal/trade-portal.src.js b/plugins/plugins/core/trade-portal/trade-portal.src.js index f8d4ff7b..7950483c 100644 --- a/plugins/plugins/core/trade-portal/trade-portal.src.js +++ b/plugins/plugins/core/trade-portal/trade-portal.src.js @@ -1,15 +1,10 @@ -import { LitElement, html, css } from 'lit' -import { render } from 'lit/html.js' -import { Epml } from '../../../epml.js' +import {css, html, LitElement} from 'lit' +import {render} from 'lit/html.js' +import {Epml} from '../../../epml.js' import isElectron from 'is-electron' -import { use, get, translate, translateUnsafeHTML, registerTranslateConfig } from 'lit-translate' +import {get, registerTranslateConfig, translate, use} from 'lit-translate' import Base58 from '../../../../crypto/api/deps/Base58.js' -import { encryptData, decryptData } from '../../../../core/src/lockScreen.js' - -registerTranslateConfig({ - loader: lang => fetch(`/language/${lang}.json`).then(res => res.json()) -}) - +import {decryptData, encryptData} from '../../../../core/src/lockScreen.js' import '@material/mwc-button' import '@material/mwc-textfield' import '@material/mwc-icon' @@ -35,6 +30,10 @@ import chartsrvn from './charts/rvn-charts.js' import chartsarrr from './charts/arrr-charts.js' import '../components/TraderInfoView.js' +registerTranslateConfig({ + loader: lang => fetch(`/language/${lang}.json`).then(res => res.json()) +}) + const parentEpml = new Epml({ type: 'WINDOW', source: window.parent }) let workers = new Map() @@ -193,7 +192,7 @@ class TradePortal extends LitElement { padding-top: 3px; } #tab-sell[active] { - --mdc-theme-primary: rgb(255, 89, 89); + --mdc-theme-primary: rgb(255, 89, 89); } #trade-portal-page { background: var(--white); @@ -1035,7 +1034,7 @@ class TradePortal extends LitElement { required readOnly label="" placeholder="0.0000" - type="text" + type="text" auto-validate="false" outlined value="${this.initialAmount}" > @@ -1155,7 +1154,7 @@ class TradePortal extends LitElement {
  • - + ` } @@ -1308,7 +1307,7 @@ class TradePortal extends LitElement {
    ${this.renderTradeLockButton()}
    - +
    @@ -1455,7 +1454,7 @@ class TradePortal extends LitElement { } disconnectedCallback() { - + super.disconnectedCallback(); if(this.intervalID){ clearInterval(this.intervalID); @@ -2175,7 +2174,7 @@ class TradePortal extends LitElement { this._historicTradesGrid.clearCache() } this.listedCoins.get(offer.foreignBlockchain).tradeOffersSocketCounter > 1 ? addNewHistoricTrade() : null - + } } catch(e) { console.log("Error processing redeemed trade offer from "+offer.foreignBlockchain) @@ -2185,7 +2184,7 @@ class TradePortal extends LitElement { processTradingTrade(offer) { try { if (this.listedCoins.get(offer.foreignBlockchain).name!='') { - + if (offer.qortalCreator === this.selectedAddress.address && this.listedCoins.get(offer.foreignBlockchain).tradeOffersSocketCounter > 1) { this.updateWalletBalance() } @@ -2205,7 +2204,7 @@ class TradePortal extends LitElement { processRefundedTrade(offer) { try { if (this.listedCoins.get(offer.foreignBlockchain).name!='') { - + if (offer.qortalCreator === this.selectedAddress.address) { if (this.listedCoins.get(offer.foreignBlockchain).tradeOffersSocketCounter > 1) { this.updateWalletBalance() @@ -2223,7 +2222,7 @@ class TradePortal extends LitElement { processCancelledTrade(offer) { try { if (this.listedCoins.get(offer.foreignBlockchain).name!='') { - + if (offer.qortalCreator === this.selectedAddress.address) { if (this.listedCoins.get(offer.foreignBlockchain).tradeOffersSocketCounter > 1) { this.updateWalletBalance() @@ -3342,4 +3341,4 @@ class TradePortal extends LitElement { } } -window.customElements.define('trade-portal', TradePortal) \ No newline at end of file +window.customElements.define('trade-portal', TradePortal) diff --git a/plugins/plugins/core/wallet/wallet-app.src.js b/plugins/plugins/core/wallet/wallet-app.src.js index eb66288e..f712cde0 100644 --- a/plugins/plugins/core/wallet/wallet-app.src.js +++ b/plugins/plugins/core/wallet/wallet-app.src.js @@ -1,15 +1,10 @@ -import { LitElement, html, css } from 'lit' -import { render } from 'lit/html.js' -import { Epml } from '../../../epml.js' +import {css, html, LitElement} from 'lit' +import {render} from 'lit/html.js' +import {Epml} from '../../../epml.js' import isElectron from 'is-electron' -import { use, get, translate, translateUnsafeHTML, registerTranslateConfig } from 'lit-translate' +import {get, registerTranslateConfig, translate, use} from 'lit-translate' import Base58 from '../../../../crypto/api/deps/Base58.js' -import { encryptData, decryptData } from '../../../../core/src/lockScreen.js' - -registerTranslateConfig({ - loader: lang => fetch(`/language/${lang}.json`).then(res => res.json()) -}) - +import {decryptData, encryptData} from '../../../../core/src/lockScreen.js' import FileSaver from 'file-saver' import '../components/ButtonIconCopy.js' import '../components/QortalQrcodeGenerator.js' @@ -35,6 +30,10 @@ import '@vaadin/icon' import '@vaadin/icons' import '@vaadin/password-field' +registerTranslateConfig({ + loader: lang => fetch(`/language/${lang}.json`).then(res => res.json()) +}) + const parentEpml = new Epml({ type: 'WINDOW', source: window.parent }) const coinsNames = ['qort', 'btc', 'ltc', 'doge', 'dgb', 'rvn', 'arrr'] @@ -911,7 +910,7 @@ class MultiWallet extends LitElement { default: break } - + } render() { @@ -988,7 +987,7 @@ class MultiWallet extends LitElement {
    - + ${this.loading ? html`` : ''}
    @@ -2871,7 +2870,7 @@ class MultiWallet extends LitElement { } firstUpdated() { - + this.changeTheme() this.changeLanguage() this.paymentFee() @@ -2987,7 +2986,7 @@ class MultiWallet extends LitElement { } } - + pingCoinBalancesController(){ if(!this._selectedWallet) return const customEvent = new CustomEvent('ping-coin-controller-with-coin', { @@ -3003,7 +3002,7 @@ class MultiWallet extends LitElement { } disconnectedCallback() { - + super.disconnectedCallback(); if(this.intervalID){ clearInterval(this.intervalID); diff --git a/plugins/plugins/utils/getUserNameFromAddress.js b/plugins/plugins/utils/getUserNameFromAddress.js index 1d8bf688..be8a3d69 100644 --- a/plugins/plugins/utils/getUserNameFromAddress.js +++ b/plugins/plugins/utils/getUserNameFromAddress.js @@ -1,5 +1,4 @@ -import { Epml } from '../../epml.js'; -import { cropAddress } from './cropAddress.js'; +import {Epml} from '../../epml.js'; const parentEpml = new Epml({ type: 'WINDOW', source: window.parent }) @@ -18,4 +17,4 @@ export const getUserNameFromAddress = async (address) => { } catch (error) { console.error(error); } -} \ No newline at end of file +} diff --git a/plugins/plugins/utils/publish-modal.js b/plugins/plugins/utils/publish-modal.js index b55af509..7a040aec 100644 --- a/plugins/plugins/utils/publish-modal.js +++ b/plugins/plugins/utils/publish-modal.js @@ -1,4 +1,4 @@ -import { get } from 'lit-translate'; +import {get} from 'lit-translate'; export class ModalHelper { constructor() { @@ -11,7 +11,7 @@ export class ModalHelper { const nodeUrl = `${myNode.protocol}://${myNode.domain}:${myNode.port}`; const url = `${nodeUrl}/transactions/unitfee?txType=ARBITRARY×tamp=${timestamp}`; const response = await fetch(url); - + if (!response.ok) { throw new Error('Error when fetching arbitrary fee'); } @@ -103,7 +103,7 @@ export class ModalHelper { --mdc-checkbox-disabled-color: var(--black); --mdc-checkbox-ink-color: var(--black); } - + .backdrop { position: fixed; top: 0; @@ -112,21 +112,21 @@ export class ModalHelper { height: 100%; background: rgb(186 186 186 / 26%); overflow: hidden; - animation: backdrop_blur cubic-bezier(0.22, 1, 0.36, 1) 0.1s forwards; + animation: backdrop_blur cubic-bezier(0.22, 1, 0.36, 1) 0.1s forwards; z-index: 1000000; } - + @keyframes backdrop_blur { 0% { backdrop-filter: blur(0px); background: transparent; } - 100% { + 100% { backdrop-filter: blur(5px); background: rgb(186 186 186 / 26%); } } - + @keyframes modal_transition { 0% { visibility: hidden; @@ -137,7 +137,7 @@ export class ModalHelper { opacity: 1; } } - + .modal { position: relative; display: flex; @@ -148,7 +148,7 @@ export class ModalHelper { animation: 0.1s cubic-bezier(0.22, 1, 0.36, 1) 0s 1 normal forwards running modal_transition; z-index: 1000001; } - + @keyframes modal_transition { 0% { visibility: hidden; @@ -159,7 +159,7 @@ export class ModalHelper { opacity: 1; } } - + .modal-content { background-color: var(--white); border-radius: 10px; @@ -171,11 +171,11 @@ export class ModalHelper { flex-direction: column; justify-content: space-between; } - + .modal-body { padding: 25px; } - + .modal-subcontainer { color: var(--black); display: flex; @@ -183,7 +183,7 @@ export class ModalHelper { align-items: flex-start; gap: 15px; } - + .modal-subcontainer-error { color: var(--black); display: flex; @@ -191,7 +191,7 @@ export class ModalHelper { align-items: center; gap: 15px; } - + .modal-paragraph-error { font-family: Roboto, sans-serif; font-size: 20px; @@ -200,7 +200,7 @@ export class ModalHelper { color: var(--black); margin: 0; } - + .modal-paragraph { font-family: Roboto, sans-serif; font-size: 18px; @@ -208,14 +208,14 @@ export class ModalHelper { font-weight: 300; color: var(--black); margin: 0; - word-wrap: break-word; + word-wrap: break-word; overflow-wrap: break-word; } - + .capitalize-first { text-transform: capitalize; } - + .checkbox-row { display: flex; align-items: center; @@ -223,13 +223,13 @@ export class ModalHelper { font-weight: 600; color: var(--black); } - + .modal-buttons { display: flex; justify-content: space-between; margin-top: 20px; } - + .modal-buttons button { background-color: #4caf50; border: none; @@ -239,15 +239,15 @@ export class ModalHelper { cursor: pointer; transition: background-color 0.2s; } - + .modal-buttons button:hover { background-color: #3e8e41; } - + #cancel-button { background-color: #f44336; } - + #cancel-button:hover { background-color: #d32f2f; } @@ -267,4 +267,4 @@ export class ModalHelper { } } -export const modalHelper = ModalHelper.getInstance(); \ No newline at end of file +export const modalHelper = ModalHelper.getInstance(); diff --git a/plugins/plugins/utils/warning-modal.js b/plugins/plugins/utils/warning-modal.js index 7bda31cd..88fdd88b 100644 --- a/plugins/plugins/utils/warning-modal.js +++ b/plugins/plugins/utils/warning-modal.js @@ -1,4 +1,4 @@ -import { get } from 'lit-translate'; +import {get} from 'lit-translate'; export class WarningModal { constructor() { @@ -24,7 +24,7 @@ export class WarningModal { @@ -84,7 +84,7 @@ export class WarningModal { --mdc-checkbox-disabled-color: var(--black); --mdc-checkbox-ink-color: var(--black); } - + .backdrop { position: fixed; top: 0; @@ -93,21 +93,21 @@ export class WarningModal { height: 100%; background: rgb(186 186 186 / 26%); overflow: hidden; - animation: backdrop_blur cubic-bezier(0.22, 1, 0.36, 1) 0.1s forwards; + animation: backdrop_blur cubic-bezier(0.22, 1, 0.36, 1) 0.1s forwards; z-index: 1000000; } - + @keyframes backdrop_blur { 0% { backdrop-filter: blur(0px); background: transparent; } - 100% { + 100% { backdrop-filter: blur(5px); background: rgb(186 186 186 / 26%); } } - + @keyframes modal_transition { 0% { visibility: hidden; @@ -118,7 +118,7 @@ export class WarningModal { opacity: 1; } } - + .modal { position: relative; display: flex; @@ -129,7 +129,7 @@ export class WarningModal { animation: 0.1s cubic-bezier(0.22, 1, 0.36, 1) 0s 1 normal forwards running modal_transition; z-index: 1000001; } - + @keyframes modal_transition { 0% { visibility: hidden; @@ -140,7 +140,7 @@ export class WarningModal { opacity: 1; } } - + .modal-content { background-color: var(--white); border-radius: 10px; @@ -152,11 +152,11 @@ export class WarningModal { flex-direction: column; justify-content: space-between; } - + .modal-body { padding: 25px; } - + .modal-subcontainer { color: var(--black); display: flex; @@ -164,7 +164,7 @@ export class WarningModal { align-items: flex-start; gap: 15px; } - + .modal-subcontainer-error { color: var(--black); display: flex; @@ -172,7 +172,7 @@ export class WarningModal { align-items: center; gap: 15px; } - + .modal-paragraph-error { font-family: Roboto, sans-serif; font-size: 20px; @@ -181,7 +181,7 @@ export class WarningModal { color: var(--black); margin: 0; } - + .modal-paragraph { font-family: Roboto, sans-serif; font-size: 18px; @@ -189,14 +189,14 @@ export class WarningModal { font-weight: 300; color: var(--black); margin: 0; - word-wrap: break-word; + word-wrap: break-word; overflow-wrap: break-word; } - + .capitalize-first { text-transform: capitalize; } - + .checkbox-row { display: flex; align-items: center; @@ -204,13 +204,13 @@ export class WarningModal { font-weight: 600; color: var(--black); } - + .modal-buttons { display: flex; justify-content: space-between; margin-top: 20px; } - + .modal-buttons button { background-color: #4caf50; border: none; @@ -220,15 +220,15 @@ export class WarningModal { cursor: pointer; transition: background-color 0.2s; } - + .modal-buttons button:hover { background-color: #3e8e41; } - + #cancel-button { background-color: #f44336; } - + #cancel-button:hover { background-color: #d32f2f; } @@ -240,7 +240,7 @@ export class WarningModal { document.adoptedStyleSheets = [styleSheet]; } - + static getInstance() { if (!WarningModal.instance) { WarningModal.instance = new WarningModal(); @@ -249,4 +249,4 @@ export class WarningModal { } } -export const warningModal = WarningModal.getInstance(); \ No newline at end of file +export const warningModal = WarningModal.getInstance();