Merge branch 'master' into pirate-chain
# Conflicts: # qortal-ui-core/src/plugins/routes.js
This commit is contained in:
commit
59fb31f84d
14
README.md
14
README.md
@ -41,19 +41,7 @@ Clone the main UI repo
|
||||
|
||||
Installation and linking
|
||||
------------------------
|
||||
In `qortal-ui-core/`, `qortal-ui-plugins/`, `qortal-ui-crypto/` directories, run:
|
||||
```
|
||||
yarn install
|
||||
yarn link
|
||||
```
|
||||
|
||||
Finally, in the `qortal-ui` directory, run:
|
||||
```
|
||||
yarn link qortal-ui-core
|
||||
yarn link qortal-ui-plugins
|
||||
yarn link qortal-ui-crypto
|
||||
```
|
||||
|
||||
In `qortal-ui/` install_link:all
|
||||
|
||||
|
||||
Build UI server and files
|
||||
|
@ -16,6 +16,7 @@
|
||||
"author": "QORTAL <admin@qortal.org>",
|
||||
"license": "GPL-3.0",
|
||||
"scripts": {
|
||||
"install_link:all": "(cd qortal-ui-core && yarn install && yarn link) && (cd qortal-ui-plugins && yarn install && yarn link) && (cd qortal-ui-crypto && yarn install && yarn link) && (yarn link qortal-ui-core && yarn link qortal-ui-plugins && yarn link qortal-ui-crypto)",
|
||||
"dev": "node server.js",
|
||||
"prebuild": "node -p \"'export const UI_VERSION = ' + JSON.stringify(require('./package.json').version) + ';'\" > qortal-ui-core/src/redux/app/version.js",
|
||||
"build-dev": "node build.js",
|
||||
@ -31,12 +32,12 @@
|
||||
"publish": "electron-builder -p always"
|
||||
},
|
||||
"dependencies": {
|
||||
"electron-updater": "5.0.5",
|
||||
"electron-updater": "5.2.1",
|
||||
"electron-log": "4.4.8"
|
||||
},
|
||||
"devDependencies": {
|
||||
"electron": "19.0.9",
|
||||
"electron-builder": "23.1.0",
|
||||
"electron": "19.0.11",
|
||||
"electron-builder": "23.3.3",
|
||||
"electron-notarize": "1.2.1",
|
||||
"electron-packager": "15.5.1",
|
||||
"shelljs": "0.8.5"
|
||||
|
@ -21,12 +21,15 @@
|
||||
"korean":"Koreanisch"
|
||||
},
|
||||
"sidemenu":{
|
||||
"minting":"PRÄGUNG",
|
||||
"mintingdetails":"PRÄGUNGSDETAILS",
|
||||
"becomeAMinter":"WERDE EIN MINTER",
|
||||
"wallets":"GELDBÖRSEN",
|
||||
"tradeportal":"HANDELSPORTAL",
|
||||
"rewardshare":"BELOHNUNGSANTEIL",
|
||||
"nameregistration":"NAMENSREGISTRIERUNG",
|
||||
"websites":"WEBSEITEN",
|
||||
"management":"MANAGEMENT",
|
||||
"datamanagement":"DATENMANAGEMENT",
|
||||
"qchat":"Q-CHAT",
|
||||
"groupmanagement":"GRUPPENMANAGEMENT",
|
||||
@ -180,6 +183,18 @@
|
||||
"mchange37":"Wenden Sie sich einfach an einen Minter in Qortal, der hoch genug ist, um einen Sponsoring-Schlüssel auszustellen, erhalten Sie diesen Schlüssel, kommen Sie dann hierher zurück und geben Sie den Schlüssel ein, um Ihre Minting-Reise zu beginnen!",
|
||||
"mchange38":"in"
|
||||
},
|
||||
"becomeMinterPage":{
|
||||
"bchange7":"Geben Sie den Sponsoring-Schlüssel ein",
|
||||
"bchange8":"Geben Sie hier den Schlüssel Ihres Sponsors ein",
|
||||
"bchange10":"Aktueller Sponsoring-Status",
|
||||
"bchange12":"Prägung mit Sponsorenschlüssel",
|
||||
"bchange13":"Verbleibende Blöcke im Sponsoring-Zeitraum",
|
||||
"bchange15":"Sponsoring-Beziehung",
|
||||
"bchange16":"Sponsorkonto",
|
||||
"bchange17":"Sponsoring-Schlüssel kopieren",
|
||||
"bchange18":"Prägen beginnen",
|
||||
"bchange19":"Erfolg! Sie prägen derzeit."
|
||||
},
|
||||
"walletpage":{
|
||||
"wchange1":"Hole Kontostand ...",
|
||||
"wchange2":"Aktuelle Brieftasche",
|
||||
@ -224,7 +239,8 @@
|
||||
"wchange41":"Status",
|
||||
"wchange42":"Bestätigungen",
|
||||
"wchange43":"Ihre Transaktion wird erst angezeigt, wenn sie bestätigt wurde. Seien Sie geduldig...",
|
||||
"wchange44": "Bitte versuche es erneut..."
|
||||
"wchange44":"Bitte versuche es erneut...",
|
||||
"wchange45":"Sende alle"
|
||||
},
|
||||
"tradepage":{
|
||||
"tchange1":"Handelsportal",
|
||||
|
@ -21,12 +21,15 @@
|
||||
"korean":"Coreano"
|
||||
},
|
||||
"sidemenu":{
|
||||
"minting":"ACUÑACIÓN",
|
||||
"mintingdetails":"DETALLES DE ACUÑACIÓN",
|
||||
"becomeAMinter":"CONVIERTASE EN UN ACUÑADOR",
|
||||
"wallets":"MONEDEROS",
|
||||
"tradeportal":"PORTAL DE COMERCIO",
|
||||
"rewardshare":"RECOMPENSA COMPARTIDA",
|
||||
"nameregistration":"REGISTRO DE NOMBRE",
|
||||
"websites":"SITIOS WEB",
|
||||
"management":"GESTIÓN",
|
||||
"datamanagement":"GESTIÓN DE DATOS",
|
||||
"qchat":"Q-CHAT",
|
||||
"groupmanagement":"GESTIÓN DE GRUPO",
|
||||
@ -180,6 +183,18 @@
|
||||
"mchange37":"Simplemente acércate a un acuñador en Qortal que tenga el nivel suficiente para emitir una clave de patrocinio, obtén esa clave, luego vuelve aquí e introduce la clave para comenzar tu viaje de acuñación!",
|
||||
"mchange38":"en"
|
||||
},
|
||||
"becomeMinterPage":{
|
||||
"bchange7":"Introduzca la clave de patrocinio",
|
||||
"bchange8":"Clave de entrada de su patrocinador aquí",
|
||||
"bchange10":"Estado de patrocinio actual",
|
||||
"bchange12":"Acuñación con clave de patrocinador",
|
||||
"bchange13":"Bloques restantes en el período de patrocinio",
|
||||
"bchange15":"Relación de patrocinio",
|
||||
"bchange16":"Cuenta de patrocinador",
|
||||
"bchange17":"Copiar clave de patrocinio",
|
||||
"bchange18":"Empezar a acuñar",
|
||||
"bchange19":"Éxito! Actualmente estás acuñando."
|
||||
},
|
||||
"walletpage":{
|
||||
"wchange1":"Obteniendo saldo ...",
|
||||
"wchange2":"Monedero Actual",
|
||||
@ -224,7 +239,8 @@
|
||||
"wchange41":"Estado",
|
||||
"wchange42":"Confirmaciones",
|
||||
"wchange43":"Su transacción no se mostrará hasta que se confirme, sea paciente...",
|
||||
"wchange44": "Inténtalo de nuevo..."
|
||||
"wchange44":"Inténtalo de nuevo...",
|
||||
"wchange45":"Envia todo"
|
||||
},
|
||||
"tradepage":{
|
||||
"tchange1":"Portal de Comercio",
|
||||
|
@ -21,12 +21,15 @@
|
||||
"korean":"Coréen"
|
||||
},
|
||||
"sidemenu":{
|
||||
"minting":"MONNAIE",
|
||||
"mintingdetails":"DETAILS DE FRAPPE",
|
||||
"becomeAMinter":"DEVENIR UN FRAPPEUR",
|
||||
"wallets":"PORTEFEUILLES",
|
||||
"tradeportal":"PORTAIL DE COMMERCE",
|
||||
"rewardshare":"PARTAGE DE RECOMPENCES",
|
||||
"nameregistration":"ENREGISTREMENT DE NOM",
|
||||
"websites":"SITES WEB",
|
||||
"management":"GESTIÓN",
|
||||
"datamanagement":"GESTION DE DONNEES",
|
||||
"qchat":"Q-CHAT",
|
||||
"groupmanagement":"GESTION DE GROUPES",
|
||||
@ -180,6 +183,18 @@
|
||||
"mchange37":"Il vous suffit de communiquer avec un frappeur de Qortal qui est assez haut placé pour émettre une clé de parrainage, d’obtenir cette clé, puis de revenir ici et d’entrer la clé pour commencer à frapper. !",
|
||||
"mchange38":"dans"
|
||||
},
|
||||
"becomeMinterPage":{
|
||||
"bchange7":"Entrez la clé de parrainage",
|
||||
"bchange8":"Entrez la clé de votre parrain ici",
|
||||
"bchange10":"Statut actuel du parrainage",
|
||||
"bchange12":"Frappe avec clé de sponsor",
|
||||
"bchange13":"Blocages restants pendant la période de parrainage",
|
||||
"bchange15":"Relation de parrainage",
|
||||
"bchange16":"Compte Parrain",
|
||||
"bchange17":"Copier la clé de parrainage",
|
||||
"bchange18":"Commencer à frapper",
|
||||
"bchange19":"Succès! Vous frappez actuellement."
|
||||
},
|
||||
"walletpage":{
|
||||
"wchange1":"Récupération du solde ...",
|
||||
"wchange2":"Portefeuille actuel",
|
||||
@ -224,7 +239,8 @@
|
||||
"wchange41":"Status",
|
||||
"wchange42":"Confirmations",
|
||||
"wchange43":"Votre transaction ne s'affichera pas tant qu'elle n'aura pas été confirmée, soyez patient...",
|
||||
"wchange44": "Veuillez réessayer..."
|
||||
"wchange44":"Veuillez réessayer...",
|
||||
"wchange45":"Envoyer tout"
|
||||
},
|
||||
"tradepage":{
|
||||
"tchange1":"Portail de commerce",
|
||||
|
@ -22,12 +22,15 @@
|
||||
"korean":"कोरियाई"
|
||||
},
|
||||
"sidemenu":{
|
||||
"minting":"मिंटिंग",
|
||||
"mintingdetails":"खनन विवरण",
|
||||
"becomeAMinter":"एक मिन्टर बनें",
|
||||
"wallets":"वॉलेट",
|
||||
"tradeportal":"व्यापार पोर्टल",
|
||||
"rewardshare":"रिवॉर्ड शेयर",
|
||||
"nameregistration":"नाम पंजीकरण",
|
||||
"websites":"वेबसाइटों",
|
||||
"management":"प्रबंधन",
|
||||
"datamanagement":"डेटा प्रबंधन",
|
||||
"qchat":"क्यू-चैट",
|
||||
"groupmanagement":"समूह प्रबंधन",
|
||||
@ -181,6 +184,18 @@
|
||||
"mchange37":"बस क्वॉर्टल में एक मिन्टर तक पहुंचें जो प्रायोजन कुंजी जारी करने के लिए पर्याप्त उच्च स्तर का है, उस कुंजी को प्राप्त करें, फिर यहां वापस आएं और अपनी खनन यात्रा शुरू करने के लिए कुंजी इनपुट करें!",
|
||||
"mchange38":"में"
|
||||
},
|
||||
"becomeMinterPage":{
|
||||
"bchange7":"प्रायोजन कुंजी दर्ज करें",
|
||||
"bchange8":"यहां आपके प्रायोजक से इनपुट कुंजी",
|
||||
"bchange10":"वर्तमान प्रायोजन स्थिति",
|
||||
"bchange12":"प्रायोजक कुंजी के साथ मिंटिंग",
|
||||
"bchange13":"प्रायोजन अवधि में शेष ब्लॉक",
|
||||
"bchange15":"प्रायोजन संबंध",
|
||||
"bchange16":"प्रायोजक खाता",
|
||||
"bchange17":"कॉपी प्रायोजन कुंजी",
|
||||
"bchange18":"मिंटिंग शुरू करें",
|
||||
"bchange19":"सफलता! आप वर्तमान में खनन कर रहे हैं।"
|
||||
},
|
||||
"walletpage":{
|
||||
"wchange1":"शेष लाया जा रहा है...",
|
||||
"wchange2":"वर्तमान वॉलेट",
|
||||
@ -225,7 +240,8 @@
|
||||
"wchange41":"स्थिति",
|
||||
"wchange42":"पुष्टियों",
|
||||
"wchange43":"कन्फर्म होने तक आपका ट्रांजैक्शन नहीं दिखेगा, धैर्य रखें...",
|
||||
"wchange44": "कृपया पुन: प्रयास करें..."
|
||||
"wchange44":"कृपया पुन: प्रयास करें...",
|
||||
"wchange45":"सब भेजें"
|
||||
},
|
||||
"tradepage":{
|
||||
"tchange1":"व्यापार पोर्टल",
|
||||
|
@ -21,12 +21,15 @@
|
||||
"korean":"Korejski"
|
||||
},
|
||||
"sidemenu":{
|
||||
"minting":"KOVANJE",
|
||||
"mintingdetails":"DETALJI O MINTANJU",
|
||||
"becomeAMinter":"POSTANI MINTER",
|
||||
"wallets":"NOVČANICI",
|
||||
"tradeportal":"PORTAL RAZMJENE",
|
||||
"rewardshare":"NAGRADNI UDIO",
|
||||
"nameregistration":"REGISTRACIJA IMENA",
|
||||
"websites":"WEB STRANICE",
|
||||
"management":"UPRAVLJANJE",
|
||||
"datamanagement":"UPRAVLJANJE PODACIMA",
|
||||
"qchat":"Q-ČAVRLJANJE",
|
||||
"groupmanagement":"UPRAVLJANJE GRUPAMA",
|
||||
@ -180,6 +183,18 @@
|
||||
"mchange37":"Jednostavno kontaktirajte Mintera u Qortalu koji je dovoljno visok level za izdavanje sponzorskog ključa, nabavite taj ključ, a zatim se vratite ovdje i unesite ključ za početak vašeg minterskog putovanja!",
|
||||
"mchange38":"za"
|
||||
},
|
||||
"becomeMinterPage":{
|
||||
"bchange7":"Unesite ključ sponzorstva",
|
||||
"bchange8":"Ovdje unesite ključ vašeg sponzora",
|
||||
"bchange10":"Trenutačni status sponzorstva",
|
||||
"bchange12":"Kovanje sa sponzorskim ključem",
|
||||
"bchange13":"Preostali blokovi u razdoblju sponzoriranja",
|
||||
"bchange15":"Sponzorski odnos",
|
||||
"bchange16":"Račun sponzora",
|
||||
"bchange17":"Kopiraj ključ sponzorstva",
|
||||
"bchange18":"Pokrenite kovanje",
|
||||
"bchange19":"Uspjeh! Trenutno kovate."
|
||||
},
|
||||
"walletpage":{
|
||||
"wchange1":"Dohvaćanje stanja ...",
|
||||
"wchange2":"Trenutni novčanik",
|
||||
@ -224,7 +239,8 @@
|
||||
"wchange41":"Status",
|
||||
"wchange42":"Potvrde",
|
||||
"wchange43":"Vaša transakcija se neće prikazati dok se ne potvrdi, budite strpljivi...",
|
||||
"wchange44": "Molim te pokušaj ponovno..."
|
||||
"wchange44":"Molim te pokušaj ponovno...",
|
||||
"wchange45":"Pošalji sve"
|
||||
},
|
||||
"tradepage":{
|
||||
"tchange1":"Portal razmjene",
|
||||
|
@ -21,12 +21,15 @@
|
||||
"korean":"Koreai"
|
||||
},
|
||||
"sidemenu":{
|
||||
"minting":"BÉRTÉS",
|
||||
"mintingdetails":"VERÉSI RÉSZLETEK",
|
||||
"wallets": "Pénztárca",
|
||||
"becomeAMinter":"LEGYEN PÉNZVERÓ",
|
||||
"wallets":"PÉNZTÁRCA",
|
||||
"tradeportal":"KERESKEDELEM PORTÁL",
|
||||
"rewardshare":"JUTALOM RÉSZVÉNY",
|
||||
"nameregistration":"NÉV REGISZTRÁCIÓ",
|
||||
"websites":"WEBHELY",
|
||||
"management":"MENEDZSMENT",
|
||||
"datamanagement":"ADATKEZELÉS",
|
||||
"qchat":"Q-CHAT",
|
||||
"groupmanagement":"CSOPORTKEZELÉS",
|
||||
@ -180,6 +183,18 @@
|
||||
"mchange37":"Egyszerűen lépjen kapcsolatba egy Qortal-i pénzverdével, aki elég magas ahhoz, hogy kiadjon egy szponzorációs kulcsot, megszerezze azt a kulcsot, majd jöjjön vissza ide, és adja meg a kulcsot a verési út megkezdéséhez!",
|
||||
"mchange38":"Ben"
|
||||
},
|
||||
"becomeMinterPage":{
|
||||
"bchange7":"Írja be a szponzori kulcsot",
|
||||
"bchange8":"Itt adja meg a szponzorától kapott kulcsot",
|
||||
"bchange10":"Jelenlegi szponzorálási állapot",
|
||||
"bchange12":"Pénzverés szponzorkulccsal",
|
||||
"bchange13":"A szponzorálási időszakból hátralévő blokkok",
|
||||
"bchange15":"Szponzori kapcsolat",
|
||||
"bchange16":"Szponzori fiók",
|
||||
"bchange17":"Szponzori kulcs másolása",
|
||||
"bchange18":"Kezdje el a pénzverést",
|
||||
"bchange19":"Siker! Jelenleg pénzverés folyik."
|
||||
},
|
||||
"walletpage":{
|
||||
"wchange1":"Egyenleg lekérése...",
|
||||
"wchange2":"Jelenlegi Pénztárca",
|
||||
@ -224,7 +239,8 @@
|
||||
"wchange41":"Állapot",
|
||||
"wchange42":"Visszaigazolások",
|
||||
"wchange43":"A tranzakció nem jelenik meg a megerősítésig, legyen türelemmel...",
|
||||
"wchange44": "Kérlek próbáld újra..."
|
||||
"wchange44":"Kérlek próbáld újra...",
|
||||
"wchange45":"Az összes elküldése"
|
||||
},
|
||||
"tradepage":{
|
||||
"tchange1":"Kereskedelmi Portál",
|
||||
|
@ -21,12 +21,15 @@
|
||||
"korean":"Coreano"
|
||||
},
|
||||
"sidemenu":{
|
||||
"minting":"CONIAZIONE",
|
||||
"mintingdetails":"DETTAGLI DI MINTING",
|
||||
"becomeAMinter":"DIVENTA UN MINATORE",
|
||||
"wallets":"PORTAFOGLI",
|
||||
"tradeportal":"PORTALE COMMERCIALE",
|
||||
"rewardshare":"QUOTA DI RICOMPENSA",
|
||||
"nameregistration":"REGISTRAZIONE DI NOME",
|
||||
"websites":"SITI",
|
||||
"management":"GESTIONE",
|
||||
"datamanagement":"GESTIONE DATI",
|
||||
"qchat":"Q-CHAT",
|
||||
"groupmanagement":"GESTIONE DEI GRUPPI",
|
||||
@ -180,6 +183,18 @@
|
||||
"mchange37":"Semplicemente trova uno/a minatore di un livello sufficientemente alto per poter fornire una chiave di sponsorizzazione, ottieni la chiave, poi torna qui e inserisci la chiave per iniziare il tuo viaggio nella minazione!",
|
||||
"mchange38":"in"
|
||||
},
|
||||
"becomeMinterPage":{
|
||||
"bchange7":"Inserisci la chiave di sponsorizzazione",
|
||||
"bchange8":"Inserisci qui la chiave del tuo sponsor",
|
||||
"bchange10":"Stato di sponsorizzazione attuale",
|
||||
"bchange12":"Conio con chiave sponsor",
|
||||
"bchange13":"Blocchi rimanenti nel periodo di sponsorizzazione",
|
||||
"bchange15":"Relazione di sponsorizzazione",
|
||||
"bchange16":"Conto sponsor",
|
||||
"bchange17":"Copia la chiave di sponsorizzazione",
|
||||
"bchange18":"Inizia a coniare",
|
||||
"bchange19":"Successo! Attualmente stai coniando."
|
||||
},
|
||||
"walletpage":{
|
||||
"wchange1":"Recupero saldo ...",
|
||||
"wchange2":"Portafoglio corrente",
|
||||
@ -224,7 +239,8 @@
|
||||
"wchange41":"Stato",
|
||||
"wchange42":"Conferme",
|
||||
"wchange43":"La tua transazione non verrà mostrata fino a quando non sarà confermata, sii paziente...",
|
||||
"wchange44": "Per favore riprova..."
|
||||
"wchange44":"Per favore riprova...",
|
||||
"wchange45":"Invia tutto"
|
||||
},
|
||||
"tradepage":{
|
||||
"tchange1":"Portale commerciale",
|
||||
|
@ -21,12 +21,15 @@
|
||||
"korean":"한국어"
|
||||
},
|
||||
"sidemenu":{
|
||||
"minting":"주조",
|
||||
"mintingdetails":"민팅 세부정보",
|
||||
"becomeAMinter":"민터 되기",
|
||||
"wallets":"지갑",
|
||||
"tradeportal":"무역 포털",
|
||||
"rewardshare":"보상 공유",
|
||||
"nameregistration":"이름 등록",
|
||||
"websites":"웹사이트",
|
||||
"management":"관리",
|
||||
"datamanagement":"데이터 관리",
|
||||
"qchat":"Q-CHAT",
|
||||
"groupmanagement":"그룹 관리",
|
||||
@ -180,6 +183,18 @@
|
||||
"mchange37":"qortal에 있는 후원 키를 발급할 수 있을 정도로 높은 수준의 광부에게 연락하여 해당 키를 받은 다음 여기로 돌아와 주조 여행을 시작할 수 있는 키를 입력하기만 하면 됩니다.",
|
||||
"mchange38":"안"
|
||||
},
|
||||
"becomeMinterPage":{
|
||||
"bchange7":"후원 키 입력",
|
||||
"bchange8":"여기에 스폰서의 키를 입력하세요.",
|
||||
"bchange10":"현재 후원현황",
|
||||
"bchange12":"후원 키로 주조",
|
||||
"bchange13":"후원 기간 남은 블록",
|
||||
"bchange15":"후원 관계",
|
||||
"bchange16":"후원자 계정",
|
||||
"bchange17":"후원 키 복사",
|
||||
"bchange18":"주조 시작",
|
||||
"bchange19":"성공! 당신은 현재 주조 중입니다."
|
||||
},
|
||||
"walletpage":{
|
||||
"wchange1":"밸런스를 가져오는 중...",
|
||||
"wchange2":"현재 지갑",
|
||||
@ -224,7 +239,8 @@
|
||||
"wchange41":"상황",
|
||||
"wchange42":"확인",
|
||||
"wchange43":"확인될 때까지 거래가 표시되지 않습니다. 기다려 주십시오.",
|
||||
"wchange44": "다시 시도하십시오..."
|
||||
"wchange44":"다시 시도하십시오...",
|
||||
"wchange45":"모두 보내기"
|
||||
},
|
||||
"tradepage":{
|
||||
"tchange1":"무역 포털",
|
||||
|
@ -21,12 +21,15 @@
|
||||
"korean":"Koreansk"
|
||||
},
|
||||
"sidemenu":{
|
||||
"minting":"UTBYTTE",
|
||||
"mintingdetails":"MINTEDETALJER",
|
||||
"becomeAMinter":"BLI EN MINTER",
|
||||
"wallets":"LOMMEBØKER",
|
||||
"tradeportal":"HANDELSPORTAL",
|
||||
"rewardshare":"BELØNNINGSDEL",
|
||||
"nameregistration":"REGISTRERING AV NAVN",
|
||||
"websites":"NETTSIDER",
|
||||
"management":"LEDELSE",
|
||||
"datamanagement":"DATA-ADMINISTRASJON",
|
||||
"qchat":"Q-CHAT",
|
||||
"groupmanagement":"GRUPPEADMINISTRASJON",
|
||||
@ -180,6 +183,18 @@
|
||||
"mchange37":"Simpelthen ta kontakt med en minter i Qortal som har et høyt nok nivå til å utstede en sponsenøkkel, skaff den nøkkelen, og kom så tilbake hit og fyll inn nøkkelen for å begynne mintereisen!",
|
||||
"mchange38":"i"
|
||||
},
|
||||
"becomeMinterPage":{
|
||||
"bchange7":"Skriv inn sponsornøkkel",
|
||||
"bchange8":"Inntast nøkkel fra sponsoren din her",
|
||||
"bchange10":"Nåværende sponsorstatus",
|
||||
"bchange12":"Preging med sponsornøkkel",
|
||||
"bchange13":"Blokkerer som gjenstår i sponsorperioden",
|
||||
"bchange15":"Sponsorforhold",
|
||||
"bchange16":"Sponsorkonto",
|
||||
"bchange17":"Kopier sponsornøkkel",
|
||||
"bchange18":"Start mynting",
|
||||
"bchange19":"Suksess! Du preger for øyeblikket."
|
||||
},
|
||||
"walletpage":{
|
||||
"wchange1":"Henter saldo ...",
|
||||
"wchange2":"Nåværende lommebok",
|
||||
@ -222,7 +237,10 @@
|
||||
"wchange39":"Kan ikke kopiere adressen.",
|
||||
"wchange40":"BETALING",
|
||||
"wchange41":"Status",
|
||||
"wchange42": "Bekreftelser"
|
||||
"wchange42":"Bekreftelser",
|
||||
"wchange43":"Transaksjonen din vises ikke før den er bekreftet, vær tålmodig...",
|
||||
"wchange44":"Vær så snill, prøv på nytt...",
|
||||
"wchange45":"Send alle"
|
||||
},
|
||||
"tradepage":{
|
||||
"tchange1":"Handelsportal",
|
||||
|
@ -21,12 +21,15 @@
|
||||
"korean":"Koreański"
|
||||
},
|
||||
"sidemenu":{
|
||||
"minting":"BICIE",
|
||||
"mintingdetails":"SZCZEGÓŁY MINTOWANIA",
|
||||
"becomeAMinter":"ZOSTAN MINTEREM",
|
||||
"wallets":"PORTFELE",
|
||||
"tradeportal":"PORTAL HANDLOWY",
|
||||
"rewardshare":"UDZIAŁ W NAGRODZIE",
|
||||
"nameregistration":"REJESTRACJA IMIENIA",
|
||||
"websites":"STRONY INTERNETOWE",
|
||||
"management":"KIEROWNICTWO",
|
||||
"datamanagement":"ZARZĄDZANIE DANYMI",
|
||||
"qchat":"Q-CHAT",
|
||||
"groupmanagement":"ZARZĄDZANIE GRUPAMI",
|
||||
@ -180,6 +183,18 @@
|
||||
"mchange37":"Po prostu skontaktuj się z minterem w Qortal, który jest wystarczająco wysoko, aby mógł wydać Ci klucz sponsorski, zdobądź ten klucz, a następnie wróć tutaj i wprowadź klucz, aby rozpocząć swoją podróż minterską!",
|
||||
"mchange38":"wejdź"
|
||||
},
|
||||
"becomeMinterPage":{
|
||||
"bchange7":"Wprowadź klucz sponsorowania",
|
||||
"bchange8":"Wprowadź klucz od swojego sponsora tutaj",
|
||||
"bchange10":"Aktualny status sponsorowania",
|
||||
"bchange12":"Minting z kluczem sponsora",
|
||||
"bchange13":"Bloki pozostałe w okresie sponsorowania",
|
||||
"bchange15":"Relacja sponsorska",
|
||||
"bchange16":"Konto sponsora",
|
||||
"bchange17":"Kopiuj klucz sponsorski",
|
||||
"bchange18":"Rozpocznij bicie",
|
||||
"bchange19":"Powodzenie! Aktualnie bijesz."
|
||||
},
|
||||
"walletpage":{
|
||||
"wchange1":"Pobieram saldo...",
|
||||
"wchange2":"Bieżący Portfel",
|
||||
@ -224,7 +239,8 @@
|
||||
"wchange41":"Status",
|
||||
"wchange42":"Potwierdzenia",
|
||||
"wchange43":"Twoja transakcja nie pojawi się, dopóki nie zostanie potwierdzona, bądź cierpliwy...",
|
||||
"wchange44": "Proszę spróbuj ponownie..."
|
||||
"wchange44":"Proszę spróbuj ponownie...",
|
||||
"wchange45":"Wyślij wszystko"
|
||||
},
|
||||
"tradepage":{
|
||||
"tchange1":"Portal Handlowy",
|
||||
|
@ -21,12 +21,15 @@
|
||||
"korean":"Coreano"
|
||||
},
|
||||
"sidemenu":{
|
||||
"minting":"CARTEIRA",
|
||||
"mintingdetails":"DETALHES DA MINERAÇÃO",
|
||||
"becomeAMinter":"TORNE-SE UM MINERADOR",
|
||||
"wallets":"CARTEIRAS",
|
||||
"tradeportal":"PORTAL DE COMÉRCIO",
|
||||
"rewardshare":"PARTICIPAÇÃO NA RECOMPENSA",
|
||||
"nameregistration":"REGISTRO DE NOME",
|
||||
"websites":"SITES",
|
||||
"management":"GESTÃO",
|
||||
"datamanagement":"GESTÃO DE DADOS",
|
||||
"qchat":"Q-CHAT",
|
||||
"groupmanagement":"GESTÃO DE GRUPOS",
|
||||
@ -180,6 +183,18 @@
|
||||
"mchange37":"Mande menssagem a um minter no Qortal que seja nível 5 ou acima para emitir uma chave de patrocínio, obtenha essa chave, e em seguida, volte aqui para inserir-la e começar sua jornada de mineração !",
|
||||
"mchange38":"Dentro"
|
||||
},
|
||||
"becomeMinterPage":{
|
||||
"bchange7":"Digite a chave de patrocínio",
|
||||
"bchange8":"Insira a chave do seu patrocinador aqui",
|
||||
"bchange10":"Status atual do patrocínio",
|
||||
"bchange12":"Cunhagem com chave de patrocinador",
|
||||
"bchange13":"Blocos restantes no período de patrocínio",
|
||||
"bchange15":"Relacionamento de patrocínio",
|
||||
"bchange16":"Conta do patrocinador",
|
||||
"bchange17":"Copiar chave de patrocínio",
|
||||
"bchange18":"Iniciar a cunhagem",
|
||||
"bchange19":"Sucesso! Você está cunhando no momento."
|
||||
},
|
||||
"walletpage":{
|
||||
"wchange1":"Buscando Saldo ...",
|
||||
"wchange2":"Carteira Atual",
|
||||
@ -224,7 +239,8 @@
|
||||
"wchange41":"Status",
|
||||
"wchange42":"Confirmações",
|
||||
"wchange43":"Sua transação não será exibida até ser confirmada, seja paciente...",
|
||||
"wchange44": "Por favor, tente novamente..."
|
||||
"wchange44":"Por favor, tente novamente...",
|
||||
"wchange45":"Envie todos"
|
||||
},
|
||||
"tradepage":{
|
||||
"tchange1":"Portal do Comércio",
|
||||
|
@ -21,12 +21,15 @@
|
||||
"korean":"Coreeana"
|
||||
},
|
||||
"sidemenu":{
|
||||
"minting":"MONTAREA",
|
||||
"mintingdetails":"DETALII RECOMPENSARE MINTING)",
|
||||
"becomeAMinter":"DEVINO PRODUCATOR DE MONEDA",
|
||||
"wallets":"PORTOFELE",
|
||||
"tradeportal":"PORTAL TRANZACTIONARE",
|
||||
"rewardshare":"COTA RECOMPENSA",
|
||||
"nameregistration":"INREGISTRARE NUME",
|
||||
"websites":"WEBSITE-URI",
|
||||
"management":"MANAGEMENT",
|
||||
"datamanagement":"GESTIONARE DATE",
|
||||
"qchat":"Q-CHAT",
|
||||
"groupmanagement":"GESTIONARE GRUP",
|
||||
@ -180,6 +183,18 @@
|
||||
"mchange37":"Pur si simplu contactati un productor de moneda din Qortal care are un nivel suficient de ridicat pentru a emite o cheie de sponsorizare, obtineti acea cheie, apoi reveniti aici si introduceti cheia pentru a va incepe calatoria de productor de moneda !",
|
||||
"mchange38":"in"
|
||||
},
|
||||
"becomeMinterPage":{
|
||||
"bchange7":"Introduceti cheia de sponsorizare",
|
||||
"bchange8":"Cheia de introducere de la sponsorul dvs. aici",
|
||||
"bchange10":"Starea actuala a sponsorizarii",
|
||||
"bchange12":"Minting cu cheia sponsorului",
|
||||
"bchange13":"Blocuri ramase în perioada de sponsorizare",
|
||||
"bchange15":"Relatia de sponsorizare",
|
||||
"bchange16":"Cont de sponsor",
|
||||
"bchange17":"Copiati cheia de sponsorizare",
|
||||
"bchange18":"Incepeti baterea",
|
||||
"bchange19":"Succes! Momentan bateti."
|
||||
},
|
||||
"walletpage":{
|
||||
"wchange1":"Se actualizeaza balanta ...",
|
||||
"wchange2":"Portofel Actual",
|
||||
@ -224,7 +239,8 @@
|
||||
"wchange41":"Stare",
|
||||
"wchange42":"Confirmari",
|
||||
"wchange43":"Tranzactia nu va aparea pana ce nu este confirmata, ai rabdare...",
|
||||
"wchange44": "Te rog incearca din nou..."
|
||||
"wchange44":"Te rog incearca din nou...",
|
||||
"wchange45":"Trimite toate"
|
||||
},
|
||||
"tradepage":{
|
||||
"tchange1":"Portal de Tranzactionare",
|
||||
|
@ -21,12 +21,15 @@
|
||||
"korean":"Korejski"
|
||||
},
|
||||
"sidemenu":{
|
||||
"minting":"KOVANJE",
|
||||
"mintingdetails":"DETALJI MINTOVANJA",
|
||||
"becomeAMinter":"POSTANITE MINTER",
|
||||
"wallets":"NOVČANICI",
|
||||
"tradeportal":"TRGOVINSKI PROZOR",
|
||||
"rewardshare":"UDEO U NAGRADI",
|
||||
"nameregistration":"REGISTRACIJA IMENA",
|
||||
"websites":"WEBSITEOVI",
|
||||
"management":"MENADŽMENT",
|
||||
"datamanagement":"MENADŽMENT PODATAKA",
|
||||
"qchat":"Q-ĆASKANJE",
|
||||
"groupmanagement":"MENADŽMENT GRUPA",
|
||||
@ -98,7 +101,7 @@
|
||||
"qr_login_menu_item":"QR Login",
|
||||
"qr_login_description_1":"Skenirajte ovaj kod da biste otključali novčanik na drugom uređaju koristeći istu lozinku sa kojom ste se prijavili.",
|
||||
"qr_login_description_2":"Izaberite lozinku koju ćete koristiti za otključavanje novčanika na drugom uređaju nakon skeniranja QR koda.",
|
||||
"qr_login_button_1": "Prikaži QR kod za prijavu,
|
||||
"qr_login_button_1":"Prikaži QR kod za prijavu",
|
||||
"qr_login_button_2":"Generišite QR kod za prijavu",
|
||||
"notifications":"Notifikacije",
|
||||
"accountsecurity":"Bezbednost Naloga",
|
||||
@ -180,6 +183,18 @@
|
||||
"mchange37":"Jednostavno se javite bilo kom minteru u Qortal-u koji ima dovoljno visok nivo da dodeli sponzorski ključ, nabavite taj ključ, a zatim se vratite ovde i unesite taj ključ da bi započeli svoj minting putovanje!",
|
||||
"mchange38":"U"
|
||||
},
|
||||
"becomeMinterPage":{
|
||||
"bchange7":"Unesite ključ za sponzorstvo",
|
||||
"bchange8":"Ovde unesite ključ od svog sponzora",
|
||||
"bchange10":"Trenutni status sponzorstva",
|
||||
"bchange12":"Kovanje sa sponzorskim ključem",
|
||||
"bchange13":"Preostali blokovi u periodu sponzorstva",
|
||||
"bchange15":"Sponzorski odnos",
|
||||
"bchange16":"Sponzorski nalog",
|
||||
"bchange17":"Kopiraj sponzorski ključ",
|
||||
"bchange18":"Počnite kovati",
|
||||
"bchange19":"Uspeh! Trenutno kujete."
|
||||
},
|
||||
"walletpage":{
|
||||
"wchange1":"Proveravam stanje ...",
|
||||
"wchange2":"Trenutni Novčanik",
|
||||
@ -224,7 +239,8 @@
|
||||
"wchange41":"Status",
|
||||
"wchange42":"Potvrde",
|
||||
"wchange43":"Vaša transakcija se neće prikazati dok se ne potvrdi, budite strpljivi...",
|
||||
"wchange44": "Molim vas, pokušajte ponovo..."
|
||||
"wchange44":"Molim vas, pokušajte ponovo...",
|
||||
"wchange45":"Poslati sve"
|
||||
},
|
||||
"tradepage":{
|
||||
"tchange1":"Trgovinski prozor",
|
||||
|
@ -21,12 +21,15 @@
|
||||
"korean":"Корейский"
|
||||
},
|
||||
"sidemenu":{
|
||||
"minting":"ЧЕКАНКA",
|
||||
"mintingdetails":"ДЕТАЛИ ЧЕКАНКИ",
|
||||
"becomeAMinter":"СТАТЬ МИНТЕРОМ",
|
||||
"wallets":"КОШЕЛЬКИ",
|
||||
"tradeportal":"ТОРГОВЫЙ ПОРТАЛ",
|
||||
"rewardshare":"ДОЛЕВОЕ УЧАСТИЕ",
|
||||
"nameregistration":"РЕГИСТРАЦИЯ ИМЕНИ",
|
||||
"websites":"ВЕБ-САЙТЫ",
|
||||
"management":"УПРАВЛЕНИЕ",
|
||||
"datamanagement":"УПРАВЛЕНИЕ ДАННЫМИ",
|
||||
"qchat":"Q-ЧАТ",
|
||||
"groupmanagement":"УПРАВЛЕНИЕ ГРУППАМИ",
|
||||
@ -180,6 +183,18 @@
|
||||
"mchange37":"Просто обратитесь к минтеру в Qortal, уровень которого позволяет выдавать спонсорские ключи, получите этот ключ, затем вернитесь сюда и введите ключ, чтобы начать чеканку!",
|
||||
"mchange38":"в"
|
||||
},
|
||||
"becomeMinterPage":{
|
||||
"bchange7":"Введите спонсорский ключ",
|
||||
"bchange8":"Введите ключ от вашего спонсора здесь",
|
||||
"bchange10":"Текущий спонсорский статус",
|
||||
"bchange12":"Минтинг со спонсорским ключом",
|
||||
"bchange13":"Блоки, оставшиеся в периоде спонсорства",
|
||||
"bchange15":"Спонсорские отношения",
|
||||
"bchange16":"Спонсорский аккаунт",
|
||||
"bchange17":"Копировать спонсорский ключ",
|
||||
"bchange18":"Начать чеканку",
|
||||
"bchange19":"Успех! В настоящее время вы занимаетесь чеканкой."
|
||||
},
|
||||
"walletpage":{
|
||||
"wchange1":"Получение баланса...",
|
||||
"wchange2":"Текущий кошелек",
|
||||
@ -197,7 +212,7 @@
|
||||
"wchange14":"Время",
|
||||
"wchange15":"Подпись транзакции",
|
||||
"wchange16":"Хэш транзакции",
|
||||
"wchange17": "Отправитель",
|
||||
"wchange17":"Отправлять",
|
||||
"wchange18":"От адреса",
|
||||
"wchange19":"Доступные средства",
|
||||
"wchange20":"Кому (адрес или имя)",
|
||||
@ -224,7 +239,8 @@
|
||||
"wchange41":"Статус",
|
||||
"wchange42":"Подтверждено",
|
||||
"wchange43":"Ваша транзакция не будет отображаться, пока не будет подтверждена, наберитесь терпения...",
|
||||
"wchange44": "Пожалуйста, попробуйте еще раз..."
|
||||
"wchange44":"Пожалуйста, попробуйте еще раз...",
|
||||
"wchange45":"Отправь все"
|
||||
},
|
||||
"tradepage":{
|
||||
"tchange1":"Торговый портал",
|
||||
|
@ -21,12 +21,15 @@
|
||||
"korean":"Korean"
|
||||
},
|
||||
"sidemenu":{
|
||||
"minting":"MINTING",
|
||||
"mintingdetails":"MINTING DETAILS",
|
||||
"becomeAMinter":"BECOME A MINTER",
|
||||
"wallets":"WALLETS",
|
||||
"tradeportal":"TRADE PORTAL",
|
||||
"rewardshare":"REWARD SHARE",
|
||||
"nameregistration":"NAME REGISTRATION",
|
||||
"websites":"WEBSITES",
|
||||
"management":"MANAGEMENT",
|
||||
"datamanagement":"DATA MANAGEMENT",
|
||||
"qchat":"Q-CHAT",
|
||||
"groupmanagement":"GROUP MANAGEMENT",
|
||||
@ -175,6 +178,18 @@
|
||||
"mchange37":"Simply reach out to a minter in Qortal who is high enough level to issue a sponsorship key, obtain that key, then come back here and input the key to begin your minting journey !",
|
||||
"mchange38":"in"
|
||||
},
|
||||
"becomeMinterPage":{
|
||||
"bchange7":"Enter Sponsorship Key",
|
||||
"bchange8":"Input key from your sponsor here",
|
||||
"bchange10":"Current Sponsorship Status",
|
||||
"bchange12":"Minting with sponsor key",
|
||||
"bchange13":"Blocks Remaining in Sponsorship Period",
|
||||
"bchange15":"Sponsorship Relationship",
|
||||
"bchange16":"Sponsor Account",
|
||||
"bchange17":"Copy Sponsorship Key",
|
||||
"bchange18":"Start Minting",
|
||||
"bchange19":"Success! You are currently minting."
|
||||
},
|
||||
"walletpage":{
|
||||
"wchange1":"Fetching balance ...",
|
||||
"wchange2":"Current Wallet",
|
||||
@ -219,7 +234,8 @@
|
||||
"wchange41":"Status",
|
||||
"wchange42":"Confirmations",
|
||||
"wchange43":"Your transaction will not show until confirmed, be patient...",
|
||||
"wchange44": "Please try again..."
|
||||
"wchange44":"Please try again...",
|
||||
"wchange45":"Send all"
|
||||
},
|
||||
"tradepage":{
|
||||
"tchange1":"Trade Portal",
|
||||
|
@ -21,12 +21,15 @@
|
||||
"korean":"韩语"
|
||||
},
|
||||
"sidemenu":{
|
||||
"minting":"铸币",
|
||||
"mintingdetails":"铸币信息",
|
||||
"becomeAMinter":"成为一个铸币者",
|
||||
"wallets":"钱包",
|
||||
"tradeportal":"交易门户",
|
||||
"rewardshare":"铸币密钥",
|
||||
"nameregistration":"注册名称",
|
||||
"websites":"网站",
|
||||
"management":"管理",
|
||||
"datamanagement":"资料管理",
|
||||
"qchat":"Q-CHAT",
|
||||
"groupmanagement":"群组管理",
|
||||
@ -180,6 +183,18 @@
|
||||
"mchange37":"因此你只需寻找赞助商并获得赞助码,然后返回此处输入赞助码即可开始您的铸币之旅!",
|
||||
"mchange38":"在"
|
||||
},
|
||||
"becomeMinterPage":{
|
||||
"bchange7":"输入赞助密钥",
|
||||
"bchange8":"您的赞助商在此处输入密钥",
|
||||
"bchange10":"目前的赞助状态",
|
||||
"bchange12":"使用赞助商密钥铸造",
|
||||
"bchange13":"赞助期内剩余的区块",
|
||||
"bchange15":"赞助关系",
|
||||
"bchange16":"赞助商账户",
|
||||
"bchange17":"复制赞助密钥",
|
||||
"bchange18":"开始铸币",
|
||||
"bchange19":"成功!您目前正在铸币。"
|
||||
},
|
||||
"walletpage":{
|
||||
"wchange1":"正在加载钱包余额...",
|
||||
"wchange2":"当前钱包地址",
|
||||
@ -224,7 +239,8 @@
|
||||
"wchange41":"状态",
|
||||
"wchange42":"确认数",
|
||||
"wchange43":"您的交易在确认之前不会显示,请耐心等待...",
|
||||
"wchange44": "请再试一次..."
|
||||
"wchange44":"请再试一次...",
|
||||
"wchange45":"全部发送"
|
||||
},
|
||||
"tradepage":{
|
||||
"tchange1":"交易门户",
|
||||
|
@ -21,12 +21,15 @@
|
||||
"korean":"韓語"
|
||||
},
|
||||
"sidemenu":{
|
||||
"minting":"鑄幣",
|
||||
"mintingdetails":"鑄幣信息",
|
||||
"becomeAMinter":"成為一個鑄幣者",
|
||||
"wallets":"錢包",
|
||||
"tradeportal":"交易門戶",
|
||||
"rewardshare":"鑄幣密鑰",
|
||||
"nameregistration":"註冊名稱",
|
||||
"websites":"網站",
|
||||
"management":"管理",
|
||||
"datamanagement":"資料管理",
|
||||
"qchat":"Q-CHAT",
|
||||
"groupmanagement":"群組管理",
|
||||
@ -180,6 +183,18 @@
|
||||
"mchange37":"因此你只需尋找贊助商並獲得贊助碼,然後返回此處輸入贊助碼即可開始您的鑄幣之旅!",
|
||||
"mchange38":"在"
|
||||
},
|
||||
"becomeMinterPage":{
|
||||
"bchange7":"輸入贊助密鑰",
|
||||
"bchange8":"您的讚助商在此處輸入密鑰",
|
||||
"bchange10":"目前的讚助狀態",
|
||||
"bchange12":"使用贊助商密鑰鑄造",
|
||||
"bchange13":"贊助期內剩餘的區塊",
|
||||
"bchange15":"贊助關係",
|
||||
"bchange16":"贊助商賬戶",
|
||||
"bchange17":"複製贊助密鑰",
|
||||
"bchange18":"開始鑄幣",
|
||||
"bchange19":"成功!您目前正在鑄幣。"
|
||||
},
|
||||
"walletpage":{
|
||||
"wchange1":"正在加載錢包餘額...",
|
||||
"wchange2":"當前錢包地址",
|
||||
@ -224,7 +239,8 @@
|
||||
"wchange41":"狀態",
|
||||
"wchange42":"確認數",
|
||||
"wchange43":"您的交易在確認之前不會顯示,請耐心等待...",
|
||||
"wchange44": "請再試一次..."
|
||||
"wchange44":"請再試一次...",
|
||||
"wchange45":"全部發送"
|
||||
},
|
||||
"tradepage":{
|
||||
"tchange1":"交易門戶",
|
||||
|
@ -19,10 +19,10 @@
|
||||
"dependencies": {
|
||||
"@hapi/hapi": "20.2.2",
|
||||
"@hapi/inert": "7.0.0",
|
||||
"sass": "1.53.0"
|
||||
"sass": "1.54.3"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@babel/core": "7.18.9",
|
||||
"@babel/core": "7.18.10",
|
||||
"@material/mwc-button": "0.26.1",
|
||||
"@material/mwc-checkbox": "0.26.1",
|
||||
"@material/mwc-dialog": "0.26.1",
|
||||
@ -55,24 +55,24 @@
|
||||
"@polymer/paper-tooltip": "3.0.1",
|
||||
"@rollup/plugin-alias": "3.1.9",
|
||||
"@rollup/plugin-babel": "5.3.1",
|
||||
"@rollup/plugin-commonjs": "22.0.1",
|
||||
"@rollup/plugin-commonjs": "22.0.2",
|
||||
"@rollup/plugin-node-resolve": "13.3.0",
|
||||
"@rollup/plugin-replace": "4.0.0",
|
||||
"@vaadin/grid": "23.1.4",
|
||||
"@vaadin/icons": "23.1.4",
|
||||
"@vaadin/password-field": "23.1.4",
|
||||
"@vaadin/grid": "23.1.5",
|
||||
"@vaadin/icons": "23.1.5",
|
||||
"@vaadin/password-field": "23.1.5",
|
||||
"asmcrypto.js": "2.3.2",
|
||||
"bcryptjs": "2.4.3",
|
||||
"epml": "0.3.3",
|
||||
"file-saver": "2.0.5",
|
||||
"lit": "2.2.7",
|
||||
"lit": "2.2.8",
|
||||
"lit-translate": "2.0.1",
|
||||
"postcss": "8.4.14",
|
||||
"postcss": "8.4.16",
|
||||
"pwa-helpers": "0.9.1",
|
||||
"random-sentence-generator": "0.0.8",
|
||||
"redux": "4.2.0",
|
||||
"redux-thunk": "2.4.1",
|
||||
"rollup": "2.77.0",
|
||||
"rollup": "2.77.2",
|
||||
"rollup-plugin-node-globals": "1.4.0",
|
||||
"rollup-plugin-postcss": "4.0.2",
|
||||
"rollup-plugin-progress": "1.1.2",
|
||||
|
@ -5,6 +5,8 @@ import { translate, translateUnsafeHTML } from 'lit-translate'
|
||||
|
||||
import '@polymer/paper-icon-button/paper-icon-button.js'
|
||||
import '@polymer/iron-icons/iron-icons.js'
|
||||
import '@polymer/app-layout/app-layout.js'
|
||||
import '@polymer/paper-ripple'
|
||||
|
||||
import './wallet-profile.js'
|
||||
import './app-info.js'
|
||||
@ -12,10 +14,6 @@ import './sidenav-menu.js'
|
||||
import './show-plugin.js'
|
||||
import './qort-theme-toggle.js'
|
||||
import './language-selector.js'
|
||||
|
||||
import '@polymer/app-layout/app-layout.js'
|
||||
import '@polymer/paper-ripple'
|
||||
|
||||
import './settings-view/user-settings.js'
|
||||
import './logout-view/logout-view.js'
|
||||
|
||||
|
@ -1,14 +1,14 @@
|
||||
import { LitElement, html, css } from 'lit'
|
||||
import { connect } from 'pwa-helpers'
|
||||
import { store } from '../store.js'
|
||||
import { translate, translateUnsafeHTML } from 'lit-translate'
|
||||
import { LitElement, html, css } from 'lit';
|
||||
import { connect } from 'pwa-helpers';
|
||||
import { store } from '../store.js';
|
||||
import { translate, translateUnsafeHTML } from 'lit-translate';
|
||||
|
||||
import '@polymer/paper-ripple'
|
||||
import '@vaadin/icon'
|
||||
import '@vaadin/icons'
|
||||
import '@polymer/paper-ripple';
|
||||
import '@vaadin/icon';
|
||||
import '@vaadin/icons';
|
||||
|
||||
import '../functional-components/side-menu.js'
|
||||
import '../functional-components/side-menu-item.js'
|
||||
import '../functional-components/side-menu.js';
|
||||
import '../functional-components/side-menu-item.js';
|
||||
|
||||
class SidenavMenu extends connect(store)(LitElement) {
|
||||
static get properties() {
|
||||
@ -16,8 +16,9 @@ class SidenavMenu extends connect(store)(LitElement) {
|
||||
config: { type: Object },
|
||||
urls: { type: Object },
|
||||
nodeType: { type: String, reflect: true },
|
||||
theme: { type: String, reflect: true }
|
||||
}
|
||||
theme: { type: String, reflect: true },
|
||||
addressInfo: { type: Object },
|
||||
};
|
||||
}
|
||||
|
||||
static get styles() {
|
||||
@ -43,15 +44,25 @@ class SidenavMenu extends connect(store)(LitElement) {
|
||||
border-top: 1px solid var(--border);
|
||||
outline: none;
|
||||
}
|
||||
`
|
||||
]
|
||||
|
||||
.start-minting-wrapper {
|
||||
position: absolute;
|
||||
bottom: 130px;
|
||||
left: 50%;
|
||||
transform: translateX(calc(-50% - 10px));
|
||||
}
|
||||
`,
|
||||
];
|
||||
}
|
||||
|
||||
constructor() {
|
||||
super()
|
||||
this.urls = []
|
||||
this.nodeType = ''
|
||||
this.theme = localStorage.getItem('qortalTheme') ? localStorage.getItem('qortalTheme') : 'light'
|
||||
super();
|
||||
this.urls = [];
|
||||
this.nodeType = '';
|
||||
this.theme = localStorage.getItem('qortalTheme')
|
||||
? localStorage.getItem('qortalTheme')
|
||||
: 'light';
|
||||
this.addressInfo = {};
|
||||
}
|
||||
|
||||
render() {
|
||||
@ -59,101 +70,179 @@ class SidenavMenu extends connect(store)(LitElement) {
|
||||
<div class="s-menu">
|
||||
<side-menu>
|
||||
${this.renderNodeTypeMenu()}
|
||||
${this.renderNodeManagement()}
|
||||
</side-menu>
|
||||
</div>
|
||||
`
|
||||
`;
|
||||
}
|
||||
|
||||
firstUpdated() {
|
||||
this.getNodeType()
|
||||
this.getNodeType();
|
||||
}
|
||||
|
||||
async getNodeType() {
|
||||
const myNode = store.getState().app.nodeConfig.knownNodes[store.getState().app.nodeConfig.node]
|
||||
const nodeUrl = myNode.protocol + '://' + myNode.domain + ':' + myNode.port
|
||||
const url = `${nodeUrl}/admin/info`
|
||||
const myNode =
|
||||
store.getState().app.nodeConfig.knownNodes[
|
||||
store.getState().app.nodeConfig.node
|
||||
];
|
||||
const nodeUrl =
|
||||
myNode.protocol + '://' + myNode.domain + ':' + myNode.port;
|
||||
const url = `${nodeUrl}/admin/info`;
|
||||
await fetch(url)
|
||||
.then(response => {
|
||||
return response.json()
|
||||
.then((response) => {
|
||||
return response.json();
|
||||
})
|
||||
.then(data => {
|
||||
this.nodeType = data.type
|
||||
.then((data) => {
|
||||
this.nodeType = data.type;
|
||||
})
|
||||
.catch(err => {
|
||||
.catch((err) => {
|
||||
console.error('Request failed', err);
|
||||
})
|
||||
});
|
||||
}
|
||||
|
||||
renderNodeTypeMenu() {
|
||||
const addressInfo = this.addressInfo;
|
||||
const isMinter = addressInfo?.error !== 124 && +addressInfo?.level > 0;
|
||||
|
||||
if (this.nodeType === 'lite') {
|
||||
return html`
|
||||
<side-menu-item label="${translate("sidemenu.wallets")}" href="/app/wallet" selected>
|
||||
<side-menu-item
|
||||
label="${translate('sidemenu.wallets')}"
|
||||
href="/app/wallet"
|
||||
selected
|
||||
>
|
||||
<vaadin-icon icon="vaadin:wallet" slot="icon"></vaadin-icon>
|
||||
</side-menu-item>
|
||||
<side-menu-item label="${translate("sidemenu.nameregistration")}" href="/app/name-registration">
|
||||
<side-menu-item
|
||||
label="${translate('sidemenu.nameregistration')}"
|
||||
href="/app/name-registration"
|
||||
>
|
||||
<vaadin-icon icon="vaadin:user-check" slot="icon"></vaadin-icon>
|
||||
</side-menu-item>
|
||||
<side-menu-item label="${translate("sidemenu.datamanagement")}" href="/app/data-management">
|
||||
<side-menu-item
|
||||
label="${translate('sidemenu.datamanagement')}"
|
||||
href="/app/data-management"
|
||||
>
|
||||
<vaadin-icon icon="vaadin:database" slot="icon"></vaadin-icon>
|
||||
</side-menu-item>
|
||||
<side-menu-item label="${translate("sidemenu.qchat")}" href="/app/q-chat">
|
||||
<side-menu-item
|
||||
label="${translate('sidemenu.qchat')}"
|
||||
href="/app/q-chat"
|
||||
>
|
||||
<vaadin-icon icon="vaadin:chat" slot="icon"></vaadin-icon>
|
||||
</side-menu-item>
|
||||
`
|
||||
${this.renderNodeManagement()}
|
||||
`;
|
||||
} else {
|
||||
return html`
|
||||
<side-menu-item label="${translate("sidemenu.mintingdetails")}" href="/app/minting">
|
||||
<side-menu-item
|
||||
label="${translate('sidemenu.minting')}"
|
||||
expanded
|
||||
>
|
||||
<vaadin-icon icon="vaadin:info-circle" slot="icon"></vaadin-icon>
|
||||
${isMinter
|
||||
? html`<side-menu-item
|
||||
label="${translate('sidemenu.mintingdetails')}"
|
||||
href="/app/minting"
|
||||
>
|
||||
<vaadin-icon icon="vaadin:info-circle" slot="icon"></vaadin-icon>
|
||||
</side-menu-item>`
|
||||
: html`<side-menu-item
|
||||
label="${translate('sidemenu.becomeAMinter')}"
|
||||
href="/app/become-minter"
|
||||
>
|
||||
<vaadin-icon icon="vaadin:thumbs-up" slot="icon"></vaadin-icon>
|
||||
</side-menu-item>`}
|
||||
</side-menu-item>
|
||||
<side-menu-item label="${translate("sidemenu.wallets")}" href="/app/wallet" selected>
|
||||
<side-menu-item
|
||||
label="${translate('sidemenu.wallets')}"
|
||||
href="/app/wallet"
|
||||
selected
|
||||
>
|
||||
<vaadin-icon icon="vaadin:wallet" slot="icon"></vaadin-icon>
|
||||
</side-menu-item>
|
||||
<side-menu-item label="${translate("sidemenu.tradeportal")}" href="/app/trade-portal">
|
||||
<side-menu-item
|
||||
label="${translate('sidemenu.tradeportal')}"
|
||||
href="/app/trade-portal"
|
||||
>
|
||||
<vaadin-icon icon="vaadin:bullets" slot="icon"></vaadin-icon>
|
||||
</side-menu-item>
|
||||
<side-menu-item label="${translate("sidemenu.rewardshare")}" href="/app/reward-share">
|
||||
<side-menu-item
|
||||
label="${translate('sidemenu.rewardshare')}"
|
||||
href="/app/reward-share"
|
||||
>
|
||||
<vaadin-icon icon="vaadin:share-square" slot="icon"></vaadin-icon>
|
||||
</side-menu-item>
|
||||
<side-menu-item label="${translate("sidemenu.nameregistration")}" href="/app/name-registration">
|
||||
<vaadin-icon icon="vaadin:user-check" slot="icon"></vaadin-icon>
|
||||
</side-menu-item>
|
||||
<side-menu-item label="${translate("sidemenu.websites")}" href="/app/websites">
|
||||
<vaadin-icon icon="vaadin:desktop" slot="icon"></vaadin-icon>
|
||||
</side-menu-item>
|
||||
<side-menu-item label="${translate("sidemenu.datamanagement")}" href="/app/data-management">
|
||||
<vaadin-icon icon="vaadin:database" slot="icon"></vaadin-icon>
|
||||
</side-menu-item>
|
||||
<side-menu-item label="${translate("sidemenu.qchat")}" href="/app/q-chat">
|
||||
<side-menu-item
|
||||
label="${translate('sidemenu.qchat')}"
|
||||
href="/app/q-chat"
|
||||
>
|
||||
<vaadin-icon icon="vaadin:chat" slot="icon"></vaadin-icon>
|
||||
</side-menu-item>
|
||||
<side-menu-item label="${translate("sidemenu.groupmanagement")}" href="/app/group-management">
|
||||
<side-menu-item
|
||||
label="${translate('sidemenu.nameregistration')}"
|
||||
href="/app/name-registration"
|
||||
>
|
||||
<vaadin-icon icon="vaadin:user-check" slot="icon"></vaadin-icon>
|
||||
</side-menu-item>
|
||||
<side-menu-item
|
||||
label="${translate('sidemenu.websites')}"
|
||||
href="/app/websites"
|
||||
>
|
||||
<vaadin-icon icon="vaadin:desktop" slot="icon" ></vaadin-icon>
|
||||
</side-menu-item>
|
||||
<side-menu-item
|
||||
label="${translate('sidemenu.management')}"
|
||||
expanded
|
||||
>
|
||||
<vaadin-icon icon="vaadin:cogs" slot="icon"></vaadin-icon>
|
||||
<side-menu-item
|
||||
label="${translate('sidemenu.datamanagement')}"
|
||||
href="/app/data-management"
|
||||
>
|
||||
<vaadin-icon icon="vaadin:database" slot="icon"></vaadin-icon>
|
||||
</side-menu-item>
|
||||
<side-menu-item
|
||||
label="${translate('sidemenu.groupmanagement')}"
|
||||
href="/app/group-management"
|
||||
>
|
||||
<vaadin-icon icon="vaadin:group" slot="icon"></vaadin-icon>
|
||||
</side-menu-item>
|
||||
<side-menu-item label="${translate("sidemenu.puzzles")}" href="/app/puzzles">
|
||||
${this.renderNodeManagement()}
|
||||
</side-menu-item>
|
||||
<side-menu-item
|
||||
label="${translate('sidemenu.puzzles')}"
|
||||
href="/app/puzzles"
|
||||
>
|
||||
<vaadin-icon icon="vaadin:puzzle-piece" slot="icon"></vaadin-icon>
|
||||
</side-menu-item>
|
||||
`
|
||||
`;
|
||||
}
|
||||
}
|
||||
|
||||
renderNodeManagement() {
|
||||
const checkNodeManagement = store.getState().app.nodeConfig.knownNodes[store.getState().app.nodeConfig.node]
|
||||
if (checkNodeManagement.enableManagement = true) {
|
||||
const checkNodeManagement =
|
||||
store.getState().app.nodeConfig.knownNodes[
|
||||
store.getState().app.nodeConfig.node
|
||||
];
|
||||
if ((checkNodeManagement.enableManagement = true)) {
|
||||
return html`
|
||||
<side-menu-item label="${translate("sidemenu.nodemanagement")}" href="/app/node-management">
|
||||
<side-menu-item
|
||||
label="${translate('sidemenu.nodemanagement')}"
|
||||
href="/app/node-management"
|
||||
>
|
||||
<vaadin-icon icon="vaadin:cloud" slot="icon"></vaadin-icon>
|
||||
</side-menu-item>
|
||||
`
|
||||
`;
|
||||
} else {
|
||||
return html``
|
||||
return html``;
|
||||
}
|
||||
}
|
||||
|
||||
stateChanged(state) {
|
||||
this.config = state.config
|
||||
this.urls = state.app.registeredUrls
|
||||
this.config = state.config;
|
||||
this.urls = state.app.registeredUrls;
|
||||
this.addressInfo = state.app.accountInfo.addressInfo;
|
||||
}
|
||||
}
|
||||
|
||||
window.customElements.define('sidenav-menu', SidenavMenu)
|
||||
window.customElements.define('sidenav-menu', SidenavMenu);
|
||||
|
259
qortal-ui-core/src/components/start-minting.js
Normal file
259
qortal-ui-core/src/components/start-minting.js
Normal file
@ -0,0 +1,259 @@
|
||||
import { LitElement, html, css } from 'lit';
|
||||
import { connect } from 'pwa-helpers';
|
||||
import { store } from '../store.js';
|
||||
import { translate, get } from 'lit-translate';
|
||||
|
||||
import '../functional-components/my-button.js';
|
||||
import { routes } from '../plugins/routes.js';
|
||||
|
||||
class StartMinting extends connect(store)(LitElement) {
|
||||
static get properties() {
|
||||
return {
|
||||
addressInfo: { type: Object },
|
||||
mintingAccountData: { type: Array },
|
||||
errorMsg: { type: String },
|
||||
};
|
||||
}
|
||||
|
||||
static get styles() {
|
||||
return [
|
||||
css`
|
||||
.start-minting-wrapper {
|
||||
position: absolute;
|
||||
left: 50%;
|
||||
transform: translateX(calc(-50% - 10px));
|
||||
}
|
||||
`,
|
||||
];
|
||||
}
|
||||
|
||||
constructor() {
|
||||
super();
|
||||
this.addressInfo = {};
|
||||
this.mintingAccountData = [];
|
||||
this.errorMsg = '';
|
||||
}
|
||||
|
||||
render() {
|
||||
return html` ${this.renderStartMintingButton()} `;
|
||||
}
|
||||
|
||||
firstUpdated() {
|
||||
this.getMintingAcccounts();
|
||||
}
|
||||
|
||||
async getMintingAcccounts() {
|
||||
const myNode =
|
||||
store.getState().app.nodeConfig.knownNodes[
|
||||
store.getState().app.nodeConfig.node
|
||||
];
|
||||
const nodeUrl =
|
||||
myNode.protocol + '://' + myNode.domain + ':' + myNode.port;
|
||||
const url = `${nodeUrl}/admin/mintingaccounts`;
|
||||
try {
|
||||
const res = await fetch(url);
|
||||
const mintingAccountData = await res.json();
|
||||
|
||||
this.mintingAccountData = mintingAccountData;
|
||||
} catch (error) {
|
||||
this.errorMsg = 'Cannot fetch minting accounts';
|
||||
}
|
||||
}
|
||||
|
||||
renderStartMintingButton() {
|
||||
const myNode =
|
||||
store.getState().app.nodeConfig.knownNodes[
|
||||
store.getState().app.nodeConfig.node
|
||||
];
|
||||
const nodeUrl =
|
||||
myNode.protocol + '://' + myNode.domain + ':' + myNode.port;
|
||||
const mintingAccountData = this.mintingAccountData;
|
||||
|
||||
const addressInfo = this.addressInfo;
|
||||
const rewardShares = async (minterAddr) => {
|
||||
const url = `${nodeUrl}/addresses/rewardshares?minters=${minterAddr}&recipients=${minterAddr}`;
|
||||
const res = await fetch(url);
|
||||
const data = await res.json();
|
||||
return data;
|
||||
};
|
||||
const address =
|
||||
window.parent.reduxStore.getState().app?.selectedAddress?.address;
|
||||
const nonce =
|
||||
window.parent.reduxStore.getState().app?.selectedAddress?.nonce;
|
||||
const publicAddress =
|
||||
window.parent.reduxStore.getState().app?.selectedAddress
|
||||
?.base58PublicKey;
|
||||
|
||||
const findMintingAccount = mintingAccountData.find((ma) =>
|
||||
ma.publicKey.includes(publicAddress)
|
||||
);
|
||||
const isMinterButKeyMintingKeyNotAssigned =
|
||||
addressInfo?.error !== 124 &&
|
||||
addressInfo?.level === 1 &&
|
||||
!findMintingAccount;
|
||||
|
||||
const removeMintingAccount = async (publicKey) => {
|
||||
const url = `${nodeUrl}/admin/mintingaccounts?apiKey=${myNode.apiKey}`;
|
||||
|
||||
return await fetch(url, {
|
||||
method: 'DELETE',
|
||||
body: publicKey,
|
||||
});
|
||||
};
|
||||
|
||||
const makeTransactionRequest = async (lastRef) => {
|
||||
let mylastRef = lastRef;
|
||||
let rewarddialog1 = get('transactions.rewarddialog1');
|
||||
let rewarddialog2 = get('transactions.rewarddialog2');
|
||||
let rewarddialog3 = get('transactions.rewarddialog3');
|
||||
let rewarddialog4 = get('transactions.rewarddialog4');
|
||||
|
||||
let myTxnrequest = await routes.transaction({
|
||||
data: {
|
||||
type: 38,
|
||||
nonce: nonce,
|
||||
params: {
|
||||
recipientPublicKey: publicAddress,
|
||||
percentageShare: 0,
|
||||
lastReference: mylastRef,
|
||||
rewarddialog1: rewarddialog1,
|
||||
rewarddialog2: rewarddialog2,
|
||||
rewarddialog3: rewarddialog3,
|
||||
rewarddialog4: rewarddialog4,
|
||||
},
|
||||
},
|
||||
disableModal: true,
|
||||
});
|
||||
return myTxnrequest;
|
||||
};
|
||||
|
||||
const getTxnRequestResponse = (txnResponse) => {
|
||||
if (txnResponse.success === false && txnResponse.message) {
|
||||
throw new Error(txnResponse);
|
||||
} else if (
|
||||
txnResponse.success === true &&
|
||||
!txnResponse.data.error
|
||||
) {
|
||||
let err6string = get('rewardsharepage.rchange21');
|
||||
return err6string;
|
||||
} else {
|
||||
throw new Error(txnResponse);
|
||||
}
|
||||
};
|
||||
|
||||
const createSponsorshipKey = async () => {
|
||||
let lastRef = await getLastRef();
|
||||
|
||||
let myTransaction = await makeTransactionRequest(lastRef);
|
||||
|
||||
getTxnRequestResponse(myTransaction);
|
||||
return myTransaction.data;
|
||||
};
|
||||
const addMintingAccount = async (sponsorshipKeyValue) => {
|
||||
const url = `${nodeUrl}/admin/mintingaccounts?apiKey=${myNode.apiKey}`;
|
||||
|
||||
return await fetch(url, {
|
||||
method: 'POST',
|
||||
body: sponsorshipKeyValue,
|
||||
});
|
||||
};
|
||||
|
||||
const getLastRef = async () => {
|
||||
const url = `${nodeUrl}/addresses/lastreference/${address}`;
|
||||
|
||||
const res = await fetch(url);
|
||||
|
||||
const data = await res.text();
|
||||
|
||||
return data;
|
||||
};
|
||||
const startMinting = async () => {
|
||||
this.errorMsg = '';
|
||||
let rewardSharesList;
|
||||
try {
|
||||
rewardSharesList = await rewardShares(address);
|
||||
} catch (error) {
|
||||
this.errorMsg = 'Cannot fetch reward shares';
|
||||
return;
|
||||
}
|
||||
// check to see if self-share exists
|
||||
|
||||
const findRewardShareData = rewardSharesList.find(
|
||||
(rs) =>
|
||||
rs?.mintingAccount === address && rs?.recipient === address
|
||||
);
|
||||
let sponsorshipKeyValue = null;
|
||||
try {
|
||||
if (!findRewardShareData) {
|
||||
// if no self-share exits, create one.
|
||||
sponsorshipKeyValue = await createSponsorshipKey();
|
||||
} else {
|
||||
sponsorshipKeyValue =
|
||||
findRewardShareData.rewardSharePublicKey;
|
||||
}
|
||||
} catch (error) {
|
||||
this.errorMsg = 'Cannot create sponsorship key';
|
||||
return;
|
||||
}
|
||||
|
||||
// Check to see if a sponsorship key on a newly-level 1 minter exists. If it does, remove it.
|
||||
const findMintingAccountFromOtherUser = mintingAccountData.find(
|
||||
(ma) => !ma.publicKey.includes(publicAddress)
|
||||
);
|
||||
|
||||
try {
|
||||
if (
|
||||
findMintingAccountFromOtherUser &&
|
||||
findMintingAccountFromOtherUser?.publicKey[0]
|
||||
) {
|
||||
await removeMintingAccount(
|
||||
findMintingAccountFromOtherUser?.publicKey[0]
|
||||
);
|
||||
}
|
||||
} catch (error) {
|
||||
this.errorMsg = 'Failed to remove key';
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
await addMintingAccount(sponsorshipKeyValue);
|
||||
routes.showSnackBar({
|
||||
data: translate('becomeMinterPage.bchange19'),
|
||||
});
|
||||
this.getMintingAcccounts();
|
||||
} catch (error) {
|
||||
this.errorMsg = 'Failed to add minting key';
|
||||
return;
|
||||
}
|
||||
};
|
||||
|
||||
return html`
|
||||
${isMinterButKeyMintingKeyNotAssigned
|
||||
? html`
|
||||
<div class="start-minting-wrapper">
|
||||
<my-button
|
||||
label="${translate(
|
||||
'becomeMinterPage.bchange18'
|
||||
)}"
|
||||
?isLoading=${false}
|
||||
.onClick=${async () => {
|
||||
await startMinting();
|
||||
if (this.errorMsg) {
|
||||
routes.showSnackBar({
|
||||
data: this.errorMsg,
|
||||
});
|
||||
}
|
||||
}}
|
||||
></my-button>
|
||||
</div>
|
||||
`
|
||||
: ''}
|
||||
`;
|
||||
}
|
||||
|
||||
stateChanged(state) {
|
||||
this.addressInfo = state.app.accountInfo.addressInfo;
|
||||
}
|
||||
}
|
||||
|
||||
window.customElements.define('start-minting', StartMinting);
|
@ -6,6 +6,8 @@ import { translate, translateUnsafeHTML } from 'lit-translate'
|
||||
import '@polymer/paper-toast'
|
||||
import '@material/mwc-icon-button'
|
||||
|
||||
import './start-minting.js'
|
||||
|
||||
class WalletProfile extends connect(store)(LitElement) {
|
||||
static get properties() {
|
||||
return {
|
||||
@ -88,6 +90,7 @@ class WalletProfile extends connect(store)(LitElement) {
|
||||
<p id="blocksMinted">${translate("walletprofile.blocksminted")} - ${this.accountInfo.addressInfo.blocksMinted + this.accountInfo.addressInfo.blocksMintedAdjustment}</p>
|
||||
<p id="address">${this.wallet.addresses[0].address}</p>
|
||||
</div>
|
||||
<start-minting></start-minting>
|
||||
</div>
|
||||
<paper-toast id="toast" horizontal-align="right" vertical-align="top" vertical-offset="64"></paper-toast>
|
||||
`
|
||||
|
47
qortal-ui-core/src/functional-components/my-button.js
Normal file
47
qortal-ui-core/src/functional-components/my-button.js
Normal file
@ -0,0 +1,47 @@
|
||||
import { LitElement, html, css } from 'lit';
|
||||
import '@vaadin/button';
|
||||
import '@polymer/paper-spinner/paper-spinner-lite.js';
|
||||
|
||||
export class MyButton extends LitElement {
|
||||
static properties = {
|
||||
onClick: { type: Function },
|
||||
isLoading: { type: Boolean },
|
||||
label: { type: String },
|
||||
};
|
||||
|
||||
static styles = css`
|
||||
vaadin-button {
|
||||
height: 100%;
|
||||
margin: 0;
|
||||
cursor: pointer;
|
||||
min-width: 80px;
|
||||
background-color: #03a9f4;
|
||||
color: white;
|
||||
}
|
||||
|
||||
vaadin-button:hover {
|
||||
opacity: 0.8;
|
||||
}
|
||||
`;
|
||||
|
||||
constructor() {
|
||||
super();
|
||||
this.onClick = () => {};
|
||||
this.isLoading = false;
|
||||
this.label = '';
|
||||
}
|
||||
|
||||
render() {
|
||||
return html`
|
||||
<vaadin-button
|
||||
?disabled="${this.isLoading}"
|
||||
@click="${this.onClick}"
|
||||
>
|
||||
${this.isLoading === false
|
||||
? html`${this.label}`
|
||||
: html`<paper-spinner-lite active></paper-spinner-lite>`}
|
||||
</vaadin-button>
|
||||
`;
|
||||
}
|
||||
}
|
||||
customElements.define('my-button', MyButton);
|
@ -1,84 +1,96 @@
|
||||
import { store } from '../store.js'
|
||||
import { doAddPluginUrl, doUpdateBlockInfo, doUpdateNodeStatus, doUpdateNodeInfo, doSetNode, doPageUrl, doSetChatHeads, doUpdateAccountInfo } 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 snackbar from '../functional-components/snackbar.js'
|
||||
import { loadStateFromLocalStorage, saveStateToLocalStorage } from '../localStorageHelpers.js'
|
||||
import copyTextMenu from '../functional-components/copy-text-menu.js'
|
||||
import framePasteMenu from '../functional-components/frame-paste-menu.js'
|
||||
import { store } from '../store.js';
|
||||
import {
|
||||
doAddPluginUrl,
|
||||
doUpdateBlockInfo,
|
||||
doUpdateNodeStatus,
|
||||
doUpdateNodeInfo,
|
||||
doSetNode,
|
||||
doPageUrl,
|
||||
doSetChatHeads,
|
||||
doUpdateAccountInfo,
|
||||
} 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 snackbar from '../functional-components/snackbar.js';
|
||||
import {
|
||||
loadStateFromLocalStorage,
|
||||
saveStateToLocalStorage,
|
||||
} from '../localStorageHelpers.js';
|
||||
import copyTextMenu from '../functional-components/copy-text-menu.js';
|
||||
import framePasteMenu from '../functional-components/frame-paste-menu.js';
|
||||
|
||||
const createTransaction = api.createTransaction
|
||||
const processTransaction = api.processTransaction
|
||||
const signChatTransaction = api.signChatTransaction
|
||||
const signArbitraryTransaction = api.signArbitraryTransaction
|
||||
const tradeBotCreateRequest = api.tradeBotCreateRequest
|
||||
const tradeBotRespondRequest = api.tradeBotRespondRequest
|
||||
const signTradeBotTxn = api.signTradeBotTxn
|
||||
const deleteTradeOffer = api.deleteTradeOffer
|
||||
const cancelAllOffers = api.cancelAllOffers
|
||||
const sendBtc = api.sendBtc
|
||||
const sendLtc = api.sendLtc
|
||||
const sendDoge = api.sendDoge
|
||||
const sendDgb = api.sendDgb
|
||||
const sendRvn = api.sendRvn
|
||||
const sendArrr = api.sendArrr
|
||||
const createTransaction = api.createTransaction;
|
||||
const processTransaction = api.processTransaction;
|
||||
const signChatTransaction = api.signChatTransaction;
|
||||
const signArbitraryTransaction = api.signArbitraryTransaction;
|
||||
const tradeBotCreateRequest = api.tradeBotCreateRequest;
|
||||
const tradeBotRespondRequest = api.tradeBotRespondRequest;
|
||||
const signTradeBotTxn = api.signTradeBotTxn;
|
||||
const deleteTradeOffer = api.deleteTradeOffer;
|
||||
const cancelAllOffers = api.cancelAllOffers;
|
||||
const sendBtc = api.sendBtc;
|
||||
const sendLtc = api.sendLtc;
|
||||
const sendDoge = api.sendDoge;
|
||||
const sendDgb = api.sendDgb;
|
||||
const sendRvn = api.sendRvn;
|
||||
const sendArrr = api.sendArrr;
|
||||
|
||||
export const routes = {
|
||||
hello: async (req) => {
|
||||
return 'Hello from awesomeness'
|
||||
return 'Hello from awesomeness';
|
||||
},
|
||||
|
||||
registerUrl: async (req) => {
|
||||
store.dispatch(doAddPluginUrl(req.data))
|
||||
store.dispatch(doAddPluginUrl(req.data));
|
||||
},
|
||||
|
||||
setAccountInfo: async (req) => {
|
||||
store.dispatch(doUpdateAccountInfo(req.data))
|
||||
store.dispatch(doUpdateAccountInfo(req.data));
|
||||
},
|
||||
|
||||
getAccountInfo: async (req) => {
|
||||
return store.getState().app.accountInfo
|
||||
return store.getState().app.accountInfo;
|
||||
},
|
||||
|
||||
setChatHeads: async (req) => {
|
||||
return store.dispatch(doSetChatHeads(req.data))
|
||||
return store.dispatch(doSetChatHeads(req.data));
|
||||
},
|
||||
|
||||
getChatHeads: async (req) => {
|
||||
return store.getState().app.chatHeads
|
||||
return store.getState().app.chatHeads;
|
||||
},
|
||||
|
||||
updateBlockInfo: async (req) => {
|
||||
store.dispatch(doUpdateBlockInfo(req.data))
|
||||
store.dispatch(doUpdateBlockInfo(req.data));
|
||||
},
|
||||
|
||||
updateNodeStatus: async (req) => {
|
||||
store.dispatch(doUpdateNodeStatus(req.data))
|
||||
store.dispatch(doUpdateNodeStatus(req.data));
|
||||
},
|
||||
|
||||
updateNodeInfo: async (req) => {
|
||||
store.dispatch(doUpdateNodeInfo(req.data))
|
||||
store.dispatch(doUpdateNodeInfo(req.data));
|
||||
},
|
||||
|
||||
setNode: async (req) => {
|
||||
store.dispatch(doSetNode(req.data))
|
||||
store.dispatch(doSetNode(req.data));
|
||||
},
|
||||
|
||||
getNodeConfig: async (req) => {
|
||||
return store.getState().app.nodeConfig
|
||||
return store.getState().app.nodeConfig;
|
||||
},
|
||||
|
||||
setPageUrl: async (req) => {
|
||||
return store.dispatch(doPageUrl(req.data))
|
||||
return store.dispatch(doPageUrl(req.data));
|
||||
},
|
||||
|
||||
getLocalStorage: async (req) => {
|
||||
return loadStateFromLocalStorage(req.data)
|
||||
return loadStateFromLocalStorage(req.data);
|
||||
},
|
||||
|
||||
setLocalStorage: async (req) => {
|
||||
return saveStateToLocalStorage(req.data.key, req.data.dataObj)
|
||||
return saveStateToLocalStorage(req.data.key, req.data.dataObj);
|
||||
},
|
||||
|
||||
openCopyTextMenu: async (req) => {
|
||||
@ -86,26 +98,26 @@ export const routes = {
|
||||
selectedText: req.data.selectedText,
|
||||
eventObject: req.data.eventObject,
|
||||
isFrame: req.data.isFrame,
|
||||
}
|
||||
copyTextMenu.open(textMenuObject)
|
||||
};
|
||||
copyTextMenu.open(textMenuObject);
|
||||
},
|
||||
|
||||
closeCopyTextMenu: async (req) => {
|
||||
copyTextMenu.close()
|
||||
copyTextMenu.close();
|
||||
},
|
||||
|
||||
openFramePasteMenu: async (req) => {
|
||||
framePasteMenu.open(req.data)
|
||||
framePasteMenu.open(req.data);
|
||||
},
|
||||
|
||||
closeFramePasteMenu: async (req) => {
|
||||
framePasteMenu.close()
|
||||
framePasteMenu.close();
|
||||
},
|
||||
|
||||
apiCall: async (req) => {
|
||||
const url = req.data.url
|
||||
delete req.data.url
|
||||
return api.request(url, req.data)
|
||||
const url = req.data.url;
|
||||
delete req.data.url;
|
||||
return api.request(url, req.data);
|
||||
},
|
||||
|
||||
addresses: async (req) => {
|
||||
@ -116,251 +128,289 @@ export const routes = {
|
||||
nonce: address.nonce,
|
||||
textColor: address.textColor,
|
||||
base58PublicKey: address.base58PublicKey,
|
||||
}
|
||||
})
|
||||
};
|
||||
});
|
||||
},
|
||||
|
||||
transaction: async (req) => {
|
||||
let response
|
||||
let response;
|
||||
try {
|
||||
const tx = createTransaction(req.data.type, store.getState().app.wallet._addresses[req.data.nonce].keyPair, req.data.params)
|
||||
await requestTransactionDialog.requestTransaction(tx)
|
||||
const res = await processTransaction(tx.signedBytes)
|
||||
const tx = createTransaction(
|
||||
req.data.type,
|
||||
store.getState().app.wallet._addresses[req.data.nonce].keyPair,
|
||||
req.data.params
|
||||
);
|
||||
|
||||
if (!req.disableModal) {
|
||||
await requestTransactionDialog.requestTransaction(tx);
|
||||
}
|
||||
|
||||
const res = await processTransaction(tx.signedBytes);
|
||||
|
||||
response = {
|
||||
success: true,
|
||||
data: res,
|
||||
}
|
||||
};
|
||||
} catch (e) {
|
||||
console.error(e)
|
||||
console.error(e.message)
|
||||
console.error(e);
|
||||
console.error(e.message);
|
||||
response = {
|
||||
success: false,
|
||||
message: e.message,
|
||||
};
|
||||
}
|
||||
}
|
||||
return response
|
||||
return response;
|
||||
},
|
||||
|
||||
standaloneTransaction: async (req) => {
|
||||
const rebuildUint8Array = (obj) => {
|
||||
let _array = new Uint8Array(Object.keys(obj).length)
|
||||
let _array = new Uint8Array(Object.keys(obj).length);
|
||||
for (let i = 0; i < _array.byteLength; ++i) {
|
||||
_array.set([obj[i]], i)
|
||||
}
|
||||
return _array
|
||||
_array.set([obj[i]], i);
|
||||
}
|
||||
return _array;
|
||||
};
|
||||
|
||||
let response
|
||||
let response;
|
||||
try {
|
||||
// req.data.keyPair unfortunately "prepared" into horrible object so we need to convert back
|
||||
let _keyPair = {};
|
||||
for (let _keyName in req.data.keyPair) {
|
||||
_keyPair[_keyName] = rebuildUint8Array(req.data.keyPair[_keyName])
|
||||
_keyPair[_keyName] = rebuildUint8Array(
|
||||
req.data.keyPair[_keyName]
|
||||
);
|
||||
}
|
||||
const tx = createTransaction(req.data.type, _keyPair, req.data.params)
|
||||
const res = await processTransaction(tx.signedBytes)
|
||||
const tx = createTransaction(
|
||||
req.data.type,
|
||||
_keyPair,
|
||||
req.data.params
|
||||
);
|
||||
const res = await processTransaction(tx.signedBytes);
|
||||
response = {
|
||||
success: true,
|
||||
data: res,
|
||||
}
|
||||
};
|
||||
} catch (e) {
|
||||
console.error(e)
|
||||
console.error(e.message)
|
||||
console.error(e);
|
||||
console.error(e.message);
|
||||
response = {
|
||||
success: false,
|
||||
message: e.message,
|
||||
};
|
||||
}
|
||||
}
|
||||
return response
|
||||
return response;
|
||||
},
|
||||
|
||||
username: async (req) => {
|
||||
const state = store.getState()
|
||||
const username = state.user.storedWallets[state.app.wallet.addresses[0].address].name
|
||||
const state = store.getState();
|
||||
const username =
|
||||
state.user.storedWallets[state.app.wallet.addresses[0].address]
|
||||
.name;
|
||||
|
||||
return username
|
||||
return username;
|
||||
},
|
||||
|
||||
chat: async (req) => {
|
||||
let response
|
||||
let response;
|
||||
try {
|
||||
const tx = createTransaction(req.data.type, store.getState().app.wallet._addresses[req.data.nonce].keyPair, req.data.params)
|
||||
const tx = createTransaction(
|
||||
req.data.type,
|
||||
store.getState().app.wallet._addresses[req.data.nonce].keyPair,
|
||||
req.data.params
|
||||
);
|
||||
|
||||
response = tx.chatBytes
|
||||
response = tx.chatBytes;
|
||||
} catch (e) {
|
||||
console.error(e)
|
||||
console.error(e.message)
|
||||
response = false
|
||||
console.error(e);
|
||||
console.error(e.message);
|
||||
response = false;
|
||||
}
|
||||
return response
|
||||
return response;
|
||||
},
|
||||
|
||||
sign_chat: async (req) => {
|
||||
let response
|
||||
let response;
|
||||
try {
|
||||
const signedChatBytes = await signChatTransaction(req.data.chatBytesArray, req.data.chatNonce, store.getState().app.wallet._addresses[req.data.nonce].keyPair)
|
||||
const signedChatBytes = await signChatTransaction(
|
||||
req.data.chatBytesArray,
|
||||
req.data.chatNonce,
|
||||
store.getState().app.wallet._addresses[req.data.nonce].keyPair
|
||||
);
|
||||
|
||||
const res = await processTransaction(signedChatBytes)
|
||||
response = res
|
||||
const res = await processTransaction(signedChatBytes);
|
||||
response = res;
|
||||
} catch (e) {
|
||||
console.error(e)
|
||||
console.error(e.message)
|
||||
response = false
|
||||
console.error(e);
|
||||
console.error(e.message);
|
||||
response = false;
|
||||
}
|
||||
return response
|
||||
return response;
|
||||
},
|
||||
|
||||
sign_arbitrary: async (req) => {
|
||||
let response
|
||||
let response;
|
||||
try {
|
||||
const signedArbitraryBytes = await signArbitraryTransaction(req.data.arbitraryBytesBase58, req.data.arbitraryBytesForSigningBase58, req.data.arbitraryNonce, store.getState().app.wallet._addresses[req.data.nonce].keyPair)
|
||||
const signedArbitraryBytes = await signArbitraryTransaction(
|
||||
req.data.arbitraryBytesBase58,
|
||||
req.data.arbitraryBytesForSigningBase58,
|
||||
req.data.arbitraryNonce,
|
||||
store.getState().app.wallet._addresses[req.data.nonce].keyPair
|
||||
);
|
||||
|
||||
const res = await processTransaction(signedArbitraryBytes)
|
||||
response = res
|
||||
const res = await processTransaction(signedArbitraryBytes);
|
||||
response = res;
|
||||
} catch (e) {
|
||||
console.error(e)
|
||||
console.error(e.message)
|
||||
response = false
|
||||
console.error(e);
|
||||
console.error(e.message);
|
||||
response = false;
|
||||
}
|
||||
return response
|
||||
return response;
|
||||
},
|
||||
|
||||
showNotification: async (req) => {
|
||||
doNewMessage(req.data)
|
||||
doNewMessage(req.data);
|
||||
},
|
||||
|
||||
showSnackBar: async (req) => {
|
||||
snackbar.add({
|
||||
labelText: req.data,
|
||||
dismiss: true,
|
||||
})
|
||||
});
|
||||
},
|
||||
|
||||
tradeBotCreateRequest: async (req) => {
|
||||
let response
|
||||
let response;
|
||||
try {
|
||||
const unsignedTxn = await tradeBotCreateRequest(req.data)
|
||||
const unsignedTxn = await tradeBotCreateRequest(req.data);
|
||||
|
||||
const signedTxnBytes = await signTradeBotTxn(unsignedTxn, store.getState().app.selectedAddress.keyPair)
|
||||
const signedTxnBytes = await signTradeBotTxn(
|
||||
unsignedTxn,
|
||||
store.getState().app.selectedAddress.keyPair
|
||||
);
|
||||
|
||||
const res = await processTransaction(signedTxnBytes)
|
||||
response = res
|
||||
const res = await processTransaction(signedTxnBytes);
|
||||
response = res;
|
||||
} catch (e) {
|
||||
console.error(e)
|
||||
console.error(e.message)
|
||||
response = e.message
|
||||
console.error(e);
|
||||
console.error(e.message);
|
||||
response = e.message;
|
||||
}
|
||||
return response
|
||||
return response;
|
||||
},
|
||||
|
||||
tradeBotRespondRequest: async (req) => {
|
||||
let response
|
||||
let response;
|
||||
try {
|
||||
const res = await tradeBotRespondRequest(req.data)
|
||||
const res = await tradeBotRespondRequest(req.data);
|
||||
|
||||
response = res
|
||||
response = res;
|
||||
} catch (e) {
|
||||
console.error(e)
|
||||
console.error(e.message)
|
||||
response = e.message
|
||||
console.error(e);
|
||||
console.error(e.message);
|
||||
response = e.message;
|
||||
}
|
||||
return response
|
||||
return response;
|
||||
},
|
||||
|
||||
deleteTradeOffer: async (req) => {
|
||||
let response
|
||||
let response;
|
||||
try {
|
||||
const unsignedTxn = await deleteTradeOffer(req.data)
|
||||
const unsignedTxn = await deleteTradeOffer(req.data);
|
||||
|
||||
const signedTxnBytes = await signTradeBotTxn(unsignedTxn, store.getState().app.selectedAddress.keyPair)
|
||||
const signedTxnBytes = await signTradeBotTxn(
|
||||
unsignedTxn,
|
||||
store.getState().app.selectedAddress.keyPair
|
||||
);
|
||||
|
||||
const res = await processTransaction(signedTxnBytes)
|
||||
const res = await processTransaction(signedTxnBytes);
|
||||
|
||||
response = res
|
||||
response = res;
|
||||
} catch (e) {
|
||||
console.error(e)
|
||||
console.error(e.message)
|
||||
response = e.message
|
||||
console.error(e);
|
||||
console.error(e.message);
|
||||
response = e.message;
|
||||
}
|
||||
return response
|
||||
return response;
|
||||
},
|
||||
|
||||
cancelAllOffers: async (req) => {
|
||||
let response
|
||||
let response;
|
||||
try {
|
||||
const res = await cancelAllOffers(store.getState().app.selectedAddress)
|
||||
response = res
|
||||
const res = await cancelAllOffers(
|
||||
store.getState().app.selectedAddress
|
||||
);
|
||||
response = res;
|
||||
} catch (e) {
|
||||
console.error(e)
|
||||
console.error(e.message)
|
||||
response = e.message
|
||||
console.error(e);
|
||||
console.error(e.message);
|
||||
response = e.message;
|
||||
}
|
||||
return response
|
||||
return response;
|
||||
},
|
||||
|
||||
sendBtc: async (req) => {
|
||||
let response
|
||||
let response;
|
||||
try {
|
||||
const res = await sendBtc(req.data)
|
||||
response = res
|
||||
const res = await sendBtc(req.data);
|
||||
response = res;
|
||||
} catch (e) {
|
||||
console.error(e)
|
||||
console.error(e.message)
|
||||
response = e.message
|
||||
console.error(e);
|
||||
console.error(e.message);
|
||||
response = e.message;
|
||||
}
|
||||
return response
|
||||
return response;
|
||||
},
|
||||
|
||||
sendLtc: async (req) => {
|
||||
let response
|
||||
let response;
|
||||
try {
|
||||
const res = await sendLtc(req.data)
|
||||
response = res
|
||||
const res = await sendLtc(req.data);
|
||||
response = res;
|
||||
} catch (e) {
|
||||
console.error(e)
|
||||
console.error(e.message)
|
||||
response = e.message
|
||||
console.error(e);
|
||||
console.error(e.message);
|
||||
response = e.message;
|
||||
}
|
||||
return response
|
||||
return response;
|
||||
},
|
||||
|
||||
sendDoge: async (req) => {
|
||||
let response
|
||||
let response;
|
||||
try {
|
||||
const res = await sendDoge(req.data)
|
||||
response = res
|
||||
const res = await sendDoge(req.data);
|
||||
response = res;
|
||||
} catch (e) {
|
||||
console.error(e)
|
||||
console.error(e.message)
|
||||
response = e.message
|
||||
console.error(e);
|
||||
console.error(e.message);
|
||||
response = e.message;
|
||||
}
|
||||
return response
|
||||
return response;
|
||||
},
|
||||
|
||||
sendDgb: async (req) => {
|
||||
let response
|
||||
let response;
|
||||
try {
|
||||
const res = await sendDgb(req.data)
|
||||
response = res
|
||||
const res = await sendDgb(req.data);
|
||||
response = res;
|
||||
} catch (e) {
|
||||
console.error(e)
|
||||
console.error(e.message)
|
||||
response = e.message
|
||||
console.error(e);
|
||||
console.error(e.message);
|
||||
response = e.message;
|
||||
}
|
||||
return response
|
||||
return response;
|
||||
},
|
||||
|
||||
sendRvn: async (req) => {
|
||||
let response
|
||||
let response;
|
||||
try {
|
||||
const res = await sendRvn(req.data)
|
||||
response = res
|
||||
const res = await sendRvn(req.data);
|
||||
response = res;
|
||||
} catch (e) {
|
||||
console.error(e)
|
||||
console.error(e.message)
|
||||
response = e.message
|
||||
console.error(e);
|
||||
console.error(e.message);
|
||||
response = e.message;
|
||||
}
|
||||
return response
|
||||
return response;
|
||||
},
|
||||
|
||||
sendArrr: async (req) => {
|
||||
@ -375,4 +425,4 @@ export const routes = {
|
||||
}
|
||||
return response
|
||||
},
|
||||
}
|
||||
};
|
||||
|
@ -1,13 +1,13 @@
|
||||
require('events').EventEmitter.defaultMaxListeners = 0
|
||||
const path = require("path");
|
||||
const { nodeResolve } = require("@rollup/plugin-node-resolve");
|
||||
const progress = require("rollup-plugin-progress");
|
||||
require('events').EventEmitter.defaultMaxListeners = 0;
|
||||
const path = require('path');
|
||||
const { nodeResolve } = require('@rollup/plugin-node-resolve');
|
||||
const progress = require('rollup-plugin-progress');
|
||||
const replace = require('@rollup/plugin-replace');
|
||||
const globals = require("rollup-plugin-node-globals");
|
||||
const commonjs = require("@rollup/plugin-commonjs");
|
||||
const alias = require("@rollup/plugin-alias");
|
||||
const globals = require('rollup-plugin-node-globals');
|
||||
const commonjs = require('@rollup/plugin-commonjs');
|
||||
const alias = require('@rollup/plugin-alias');
|
||||
const { terser } = require('rollup-plugin-terser');
|
||||
const babel = require("@rollup/plugin-babel");
|
||||
const babel = require('@rollup/plugin-babel');
|
||||
|
||||
const aliases = {};
|
||||
|
||||
@ -16,7 +16,7 @@ const generateRollupConfig = (inputFile, outputFile) => {
|
||||
inputOptions: {
|
||||
onwarn: (warning, rollupWarn) => {
|
||||
if (warning.code !== 'CIRCULAR_DEPENDENCY') {
|
||||
rollupWarn(warning)
|
||||
rollupWarn(warning);
|
||||
}
|
||||
},
|
||||
input: inputFile,
|
||||
@ -31,30 +31,30 @@ const generateRollupConfig = (inputFile, outputFile) => {
|
||||
}),
|
||||
nodeResolve({
|
||||
preferBuiltins: false,
|
||||
mainFields: ['module', 'browser']
|
||||
mainFields: ['module', 'browser'],
|
||||
}),
|
||||
replace({
|
||||
preventAssignment: true,
|
||||
"process.env.NODE_ENV": JSON.stringify("production"),
|
||||
'process.env.NODE_ENV': JSON.stringify('production'),
|
||||
}),
|
||||
commonjs(),
|
||||
globals(),
|
||||
progress(),
|
||||
babel.babel({
|
||||
babelHelpers: 'bundled',
|
||||
exclude: "node_modules/**",
|
||||
exclude: 'node_modules/**',
|
||||
}),
|
||||
terser({
|
||||
compress: true,
|
||||
output: {
|
||||
comments: false,
|
||||
},
|
||||
})
|
||||
}),
|
||||
],
|
||||
},
|
||||
outputOptions: {
|
||||
file: outputFile,
|
||||
format: "umd",
|
||||
format: 'umd',
|
||||
},
|
||||
};
|
||||
};
|
||||
@ -62,69 +62,73 @@ const generateRollupConfig = (inputFile, outputFile) => {
|
||||
const generateForPlugins = () => {
|
||||
const configs = [
|
||||
{
|
||||
in: "plugins/core/main.src.js",
|
||||
out: "plugins/core/main.js",
|
||||
in: 'plugins/core/main.src.js',
|
||||
out: 'plugins/core/main.js',
|
||||
},
|
||||
{
|
||||
in: "plugins/core/trade-portal/trade-portal.src.js",
|
||||
out: "plugins/core/trade-portal/trade-portal.js",
|
||||
in: 'plugins/core/trade-portal/trade-portal.src.js',
|
||||
out: 'plugins/core/trade-portal/trade-portal.js',
|
||||
},
|
||||
{
|
||||
in: "plugins/core/wallet/wallet-app.src.js",
|
||||
out: "plugins/core/wallet/wallet-app.js",
|
||||
in: 'plugins/core/wallet/wallet-app.src.js',
|
||||
out: 'plugins/core/wallet/wallet-app.js',
|
||||
},
|
||||
{
|
||||
in: "plugins/core/reward-share/reward-share.src.js",
|
||||
out: "plugins/core/reward-share/reward-share.js",
|
||||
in: 'plugins/core/reward-share/reward-share.src.js',
|
||||
out: 'plugins/core/reward-share/reward-share.js',
|
||||
},
|
||||
{
|
||||
in: "plugins/core/node-management/node-management.src.js",
|
||||
out: "plugins/core/node-management/node-management.js",
|
||||
in: 'plugins/core/node-management/node-management.src.js',
|
||||
out: 'plugins/core/node-management/node-management.js',
|
||||
},
|
||||
{
|
||||
in: "plugins/core/group-management/group-management.src.js",
|
||||
out: "plugins/core/group-management/group-management.js",
|
||||
in: 'plugins/core/group-management/group-management.src.js',
|
||||
out: 'plugins/core/group-management/group-management.js',
|
||||
},
|
||||
{
|
||||
in: "plugins/core/name-registration/name-registration.src.js",
|
||||
out: "plugins/core/name-registration/name-registration.js",
|
||||
in: 'plugins/core/name-registration/name-registration.src.js',
|
||||
out: 'plugins/core/name-registration/name-registration.js',
|
||||
},
|
||||
{
|
||||
in: "plugins/core/qdn/websites.src.js",
|
||||
out: "plugins/core/qdn/websites.js",
|
||||
in: 'plugins/core/qdn/websites.src.js',
|
||||
out: 'plugins/core/qdn/websites.js',
|
||||
},
|
||||
{
|
||||
in: "plugins/core/qdn/publish/publish.src.js",
|
||||
out: "plugins/core/qdn/publish/publish.js",
|
||||
in: 'plugins/core/qdn/publish/publish.src.js',
|
||||
out: 'plugins/core/qdn/publish/publish.js',
|
||||
},
|
||||
{
|
||||
in: "plugins/core/qdn/browser/browser.src.js",
|
||||
out: "plugins/core/qdn/browser/browser.js",
|
||||
in: 'plugins/core/qdn/browser/browser.src.js',
|
||||
out: 'plugins/core/qdn/browser/browser.js',
|
||||
},
|
||||
{
|
||||
in: "plugins/core/qdn/data-management/data-management.src.js",
|
||||
out: "plugins/core/qdn/data-management/data-management.js",
|
||||
in: 'plugins/core/qdn/data-management/data-management.src.js',
|
||||
out: 'plugins/core/qdn/data-management/data-management.js',
|
||||
},
|
||||
{
|
||||
in: "plugins/core/messaging/messaging.src.js",
|
||||
out: "plugins/core/messaging/messaging.js",
|
||||
in: 'plugins/core/messaging/messaging.src.js',
|
||||
out: 'plugins/core/messaging/messaging.js',
|
||||
},
|
||||
{
|
||||
in: "plugins/core/messaging/chain-messaging/chain-messaging.src.js",
|
||||
out: "plugins/core/messaging/chain-messaging/chain-messaging.js",
|
||||
in: 'plugins/core/messaging/chain-messaging/chain-messaging.src.js',
|
||||
out: 'plugins/core/messaging/chain-messaging/chain-messaging.js',
|
||||
},
|
||||
{
|
||||
in: "plugins/core/messaging/q-chat/q-chat.src.js",
|
||||
out: "plugins/core/messaging/q-chat/q-chat.js",
|
||||
in: 'plugins/core/messaging/q-chat/q-chat.src.js',
|
||||
out: 'plugins/core/messaging/q-chat/q-chat.js',
|
||||
},
|
||||
{
|
||||
in: "plugins/core/minting/minting-info.src.js",
|
||||
out: "plugins/core/minting/minting-info.js",
|
||||
in: 'plugins/core/minting/minting-info.src.js',
|
||||
out: 'plugins/core/minting/minting-info.js',
|
||||
},
|
||||
{
|
||||
in: "plugins/core/puzzles/puzzles.src.js",
|
||||
out: "plugins/core/puzzles/puzzles.js",
|
||||
}
|
||||
in: 'plugins/core/become-minter/become-minter.src.js',
|
||||
out: 'plugins/core/become-minter/become-minter.js',
|
||||
},
|
||||
{
|
||||
in: 'plugins/core/puzzles/puzzles.src.js',
|
||||
out: 'plugins/core/puzzles/puzzles.js',
|
||||
},
|
||||
].map((file) => {
|
||||
return generateRollupConfig(
|
||||
path.join(__dirname, file.in),
|
||||
|
@ -22,7 +22,7 @@
|
||||
"emoji-picker-js": "https://github.com/Qortal/emoji-picker-js"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@babel/core": "7.18.9",
|
||||
"@babel/core": "7.18.10",
|
||||
"@github/time-elements": "3.1.2",
|
||||
"@material/mwc-button": "0.26.1",
|
||||
"@material/mwc-checkbox": "0.26.1",
|
||||
@ -43,17 +43,17 @@
|
||||
"@polymer/paper-tooltip": "3.0.1",
|
||||
"@rollup/plugin-alias": "3.1.9",
|
||||
"@rollup/plugin-babel": "5.3.1",
|
||||
"@rollup/plugin-commonjs": "22.0.1",
|
||||
"@rollup/plugin-commonjs": "22.0.2",
|
||||
"@rollup/plugin-node-resolve": "13.3.0",
|
||||
"@rollup/plugin-replace": "4.0.0",
|
||||
"@vaadin/button": "23.1.4",
|
||||
"@vaadin/grid": "23.1.4",
|
||||
"@vaadin/icons": "23.1.4",
|
||||
"@vaadin/button": "23.1.5",
|
||||
"@vaadin/grid": "23.1.5",
|
||||
"@vaadin/icons": "23.1.5",
|
||||
"epml": "0.3.3",
|
||||
"html-escaper": "3.0.3",
|
||||
"lit": "2.2.7",
|
||||
"lit": "2.2.8",
|
||||
"lit-translate": "2.0.1",
|
||||
"rollup": "2.77.0",
|
||||
"rollup": "2.77.2",
|
||||
"rollup-plugin-node-globals": "1.4.0",
|
||||
"rollup-plugin-progress": "1.1.2",
|
||||
"rollup-plugin-terser": "7.0.2"
|
||||
|
@ -0,0 +1,229 @@
|
||||
import { css } from 'lit';
|
||||
|
||||
export const pageStyles = css`
|
||||
* {
|
||||
--mdc-theme-surface: var(--white);
|
||||
--mdc-dialog-content-ink-color: var(--black);
|
||||
}
|
||||
|
||||
.header-title {
|
||||
font-size: 40px;
|
||||
color: var(--black);
|
||||
font-weight: 400;
|
||||
text-align: center;
|
||||
}
|
||||
.divider {
|
||||
color: #eee;
|
||||
border-radius: 80%;
|
||||
margin-bottom: 2rem;
|
||||
}
|
||||
.fullWidth {
|
||||
width: 100%;
|
||||
}
|
||||
.page-container {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
flex-direction: column;
|
||||
margin-bottom: 75px;
|
||||
width: 100%;
|
||||
}
|
||||
.inner-container {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
flex-direction: column;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.description {
|
||||
color: var(--black);
|
||||
}
|
||||
|
||||
.message {
|
||||
color: var(--gray);
|
||||
}
|
||||
|
||||
.sub-main {
|
||||
width: 95%;
|
||||
display: flex;
|
||||
|
||||
flex-direction: column;
|
||||
max-width: 800px;
|
||||
}
|
||||
|
||||
.level-black {
|
||||
font-size: 32px;
|
||||
color: var(--black);
|
||||
font-weight: 400;
|
||||
text-align: center;
|
||||
margin-top: 2rem;
|
||||
}
|
||||
|
||||
.form-wrapper {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
width: 100%;
|
||||
height: 50px;
|
||||
}
|
||||
|
||||
.row {
|
||||
display: flex;
|
||||
width: 100%;
|
||||
}
|
||||
.column {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.column-center {
|
||||
align-items: center;
|
||||
}
|
||||
.no-margin {
|
||||
margin: 0;
|
||||
}
|
||||
.no-wrap {
|
||||
flex-wrap: nowrap !important;
|
||||
}
|
||||
|
||||
.row-center {
|
||||
justify-content: center;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
.form-item {
|
||||
display: flex;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.form-item--button {
|
||||
flex-grow: 0;
|
||||
}
|
||||
|
||||
.form-item--input {
|
||||
flex-grow: 1;
|
||||
margin-right: 25px;
|
||||
}
|
||||
|
||||
.center-box {
|
||||
position: absolute;
|
||||
width: 100%;
|
||||
top: 50%;
|
||||
left: 50%;
|
||||
transform: translate(-50%, 0%);
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.content-box {
|
||||
border: 1px solid var(--border);
|
||||
border-radius: 10px;
|
||||
padding: 10px 25px;
|
||||
text-align: center;
|
||||
display: inline-block;
|
||||
|
||||
margin-bottom: 5px;
|
||||
flex-basis: 250px;
|
||||
}
|
||||
.gap {
|
||||
gap: 10px;
|
||||
}
|
||||
.level-black {
|
||||
font-size: 32px;
|
||||
color: var(--black);
|
||||
font-weight: 400;
|
||||
text-align: center;
|
||||
margin-top: 2rem;
|
||||
text-align: center;
|
||||
}
|
||||
.title {
|
||||
font-weight: 600;
|
||||
font-size: 20px;
|
||||
line-height: 28px;
|
||||
opacity: 0.66;
|
||||
color: var(--switchborder);
|
||||
}
|
||||
|
||||
.address {
|
||||
overflow-wrap: anywhere;
|
||||
color: var(--black);
|
||||
}
|
||||
|
||||
h4 {
|
||||
font-weight: 600;
|
||||
font-size: 20px;
|
||||
line-height: 28px;
|
||||
color: var(--black);
|
||||
}
|
||||
mwc-textfield {
|
||||
width: 100%;
|
||||
}
|
||||
vaadin-button {
|
||||
height: 100%;
|
||||
margin: 0;
|
||||
cursor: pointer;
|
||||
outline: 1px var(--black) solid;
|
||||
min-width: 80px;
|
||||
}
|
||||
.loader,
|
||||
.loader:after {
|
||||
border-radius: 50%;
|
||||
width: 10em;
|
||||
height: 10em;
|
||||
}
|
||||
.loadingContainer {
|
||||
position: fixed;
|
||||
top: 50%;
|
||||
left: 50%;
|
||||
transform: translate(-50%, -50%);
|
||||
z-index: 10;
|
||||
}
|
||||
|
||||
.backdrop {
|
||||
height: 100vh;
|
||||
width: 100vw;
|
||||
opacity: 0.6;
|
||||
background-color: var(--border);
|
||||
z-index: 9;
|
||||
position: fixed;
|
||||
}
|
||||
|
||||
.loading,
|
||||
.loading:after {
|
||||
border-radius: 50%;
|
||||
width: 5em;
|
||||
height: 5em;
|
||||
}
|
||||
|
||||
.loading {
|
||||
margin: 10px auto;
|
||||
border-width: 0.6em;
|
||||
border-style: solid;
|
||||
border-color: rgba(3, 169, 244, 0.2) rgba(3, 169, 244, 0.2)
|
||||
rgba(3, 169, 244, 0.2) rgb(3, 169, 244);
|
||||
font-size: 10px;
|
||||
position: relative;
|
||||
text-indent: -9999em;
|
||||
transform: translateZ(0px);
|
||||
animation: 1.1s linear 0s infinite normal none running loadingAnimation;
|
||||
}
|
||||
|
||||
@-webkit-keyframes loadingAnimation {
|
||||
0% {
|
||||
-webkit-transform: rotate(0deg);
|
||||
transform: rotate(0deg);
|
||||
}
|
||||
100% {
|
||||
-webkit-transform: rotate(360deg);
|
||||
transform: rotate(360deg);
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes loadingAnimation {
|
||||
0% {
|
||||
-webkit-transform: rotate(0deg);
|
||||
transform: rotate(0deg);
|
||||
}
|
||||
100% {
|
||||
-webkit-transform: rotate(360deg);
|
||||
transform: rotate(360deg);
|
||||
}
|
||||
}
|
||||
`;
|
@ -0,0 +1,199 @@
|
||||
import { LitElement, html } 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';
|
||||
|
||||
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 './components/not-sponsored.src';
|
||||
import './components/yes-sponsored.src';
|
||||
const parentEpml = new Epml({ type: 'WINDOW', source: window.parent });
|
||||
|
||||
class BecomeMinter extends LitElement {
|
||||
static get properties() {
|
||||
return {
|
||||
theme: { type: String, reflect: true },
|
||||
sponsorshipKeyValue: { type: String },
|
||||
nodeInfo: { type: Object },
|
||||
isPageLoading: { type: Boolean },
|
||||
addressInfo: { type: Object },
|
||||
rewardSharePublicKey: { type: String },
|
||||
mintingAccountData: { type: Array },
|
||||
};
|
||||
}
|
||||
|
||||
static styles = [pageStyles];
|
||||
|
||||
constructor() {
|
||||
super();
|
||||
this.theme = localStorage.getItem('qortalTheme')
|
||||
? localStorage.getItem('qortalTheme')
|
||||
: 'light';
|
||||
this.sponsorshipKeyValue = '';
|
||||
this.isPageLoading = true;
|
||||
this.nodeInfo = {};
|
||||
this.addressInfo = {};
|
||||
this.rewardSharePublicKey = '';
|
||||
this.mintingAccountData = null;
|
||||
}
|
||||
|
||||
changeLanguage() {
|
||||
const checkLanguage = localStorage.getItem('qortalLanguage');
|
||||
|
||||
if (checkLanguage === null || checkLanguage.length === 0) {
|
||||
localStorage.setItem('qortalLanguage', 'us');
|
||||
use('us');
|
||||
} else {
|
||||
use(checkLanguage);
|
||||
}
|
||||
}
|
||||
|
||||
_handleStorage() {
|
||||
const checkLanguage = localStorage.getItem('qortalLanguage');
|
||||
const checkTheme = localStorage.getItem('qortalTheme');
|
||||
|
||||
use(checkLanguage);
|
||||
|
||||
if (checkTheme === 'dark') {
|
||||
this.theme = 'dark';
|
||||
} else {
|
||||
this.theme = 'light';
|
||||
}
|
||||
document.querySelector('html').setAttribute('theme', this.theme);
|
||||
}
|
||||
|
||||
connectedCallback() {
|
||||
super.connectedCallback();
|
||||
window.addEventListener('storage', this._handleStorage);
|
||||
}
|
||||
|
||||
disconnectedCallback() {
|
||||
window.removeEventListener('storage', this._handleStorage);
|
||||
super.disconnectedCallback();
|
||||
}
|
||||
|
||||
async getNodeInfo() {
|
||||
const nodeInfo = await parentEpml.request('apiCall', {
|
||||
url: `/admin/status`,
|
||||
});
|
||||
|
||||
return nodeInfo;
|
||||
}
|
||||
|
||||
async getMintingAcccounts() {
|
||||
const mintingAccountData = await parentEpml.request('apiCall', {
|
||||
url: `/admin/mintingaccounts`,
|
||||
});
|
||||
return mintingAccountData;
|
||||
}
|
||||
|
||||
async atMount() {
|
||||
this.changeLanguage();
|
||||
|
||||
this.addressInfo =
|
||||
window.parent.reduxStore.getState().app.accountInfo.addressInfo;
|
||||
this.isPageLoading = true;
|
||||
try {
|
||||
const [nodeInfo, myRewardShareArray, mintingaccounts] =
|
||||
await Promise.all([
|
||||
this.getNodeInfo(),
|
||||
this.getRewardShareRelationship(
|
||||
window.parent.reduxStore.getState().app?.selectedAddress
|
||||
?.address
|
||||
),
|
||||
this.getMintingAcccounts(),
|
||||
]);
|
||||
|
||||
this.nodeInfo = nodeInfo;
|
||||
this.rewardSharePublicKey =
|
||||
myRewardShareArray[0]?.rewardSharePublicKey;
|
||||
this.isPageLoading = false;
|
||||
this.mintingAccountData = mintingaccounts;
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
|
||||
this.isPageLoading = false;
|
||||
}
|
||||
}
|
||||
|
||||
async firstUpdated() {
|
||||
await this.atMount();
|
||||
}
|
||||
|
||||
async getRewardShareRelationship(recipientAddress) {
|
||||
const myRewardShareArray = await parentEpml.request('apiCall', {
|
||||
type: 'api',
|
||||
url: `/addresses/rewardshares?recipients=${recipientAddress}`,
|
||||
});
|
||||
|
||||
return myRewardShareArray;
|
||||
}
|
||||
|
||||
_levelUpBlocks() {
|
||||
let countBlocksString = (
|
||||
blocksNeed(0) -
|
||||
(this.addressInfo?.blocksMinted +
|
||||
this.addressInfo?.blocksMintedAdjustment)
|
||||
).toString();
|
||||
return countBlocksString;
|
||||
}
|
||||
|
||||
render() {
|
||||
console.log({ mintingAccountData: this.mintingAccountData });
|
||||
const findMintingAccount = this.mintingAccountData?.find(
|
||||
(ma) => !!ma.publicKey
|
||||
);
|
||||
|
||||
const isAlreadySponsored =
|
||||
this.addressInfo?.error !== 124 &&
|
||||
this.addressInfo?.level === 0 &&
|
||||
findMintingAccount;
|
||||
|
||||
return html`
|
||||
${this.isPageLoading
|
||||
? html`
|
||||
<div class="loadingContainer">
|
||||
<div class="loading"></div>
|
||||
</div>
|
||||
<div class="backdrop"></div>
|
||||
`
|
||||
: ''}
|
||||
|
||||
<div class="page-container">
|
||||
<h1 class="header-title">
|
||||
${translate('mintingpage.mchange32')}
|
||||
</h1>
|
||||
<div class="fullWidth">
|
||||
<hr class="divider" />
|
||||
</div>
|
||||
|
||||
${isAlreadySponsored
|
||||
? ''
|
||||
: html`
|
||||
<not-sponsored
|
||||
.atMount="${() => this.atMount()}"
|
||||
></not-sponsored>
|
||||
`}
|
||||
${!isAlreadySponsored
|
||||
? ''
|
||||
: html`
|
||||
<yes-sponsored
|
||||
.rewardSharePublicKey=${this
|
||||
.rewardSharePublicKey}
|
||||
.addressInfo=${this.addressInfo}
|
||||
></yes-sponsored>
|
||||
`}
|
||||
</div>
|
||||
`;
|
||||
}
|
||||
}
|
||||
|
||||
window.customElements.define('become-minter', BecomeMinter);
|
@ -0,0 +1,141 @@
|
||||
import { LitElement, html } from 'lit';
|
||||
import { Epml } from '../../../../epml.js';
|
||||
import '../../components/ButtonIconCopy.js';
|
||||
import { use, translate, registerTranslateConfig } from 'lit-translate';
|
||||
|
||||
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';
|
||||
|
||||
const parentEpml = new Epml({ type: 'WINDOW', source: window.parent });
|
||||
|
||||
class NotSponsored extends LitElement {
|
||||
static properties = {
|
||||
atMount: { type: Function },
|
||||
isLoadingSponsorshipKeySubmit: { type: Boolean },
|
||||
sponsorshipKeyValue: { type: String },
|
||||
addMintingAccountMessage: { type: String },
|
||||
};
|
||||
|
||||
static styles = [pageStyles];
|
||||
|
||||
constructor() {
|
||||
super();
|
||||
this.isLoadingSponsorshipKeySubmit = false;
|
||||
this.sponsorshipKeyValue = '';
|
||||
this.addMintingAccountMessage = '';
|
||||
this.atMount = () => {};
|
||||
}
|
||||
|
||||
renderErr1Text() {
|
||||
return html`${translate('nodepage.nchange27')}`;
|
||||
}
|
||||
|
||||
renderErr2Text() {
|
||||
return html`${translate('nodepage.nchange28')}`;
|
||||
}
|
||||
|
||||
getApiKey() {
|
||||
const myNode =
|
||||
window.parent.reduxStore.getState().app.nodeConfig.knownNodes[
|
||||
window.parent.reduxStore.getState().app.nodeConfig.node
|
||||
];
|
||||
let apiKey = myNode.apiKey;
|
||||
return apiKey;
|
||||
}
|
||||
|
||||
addMintingAccount(e) {
|
||||
this.isLoadingSponsorshipKeySubmit = true;
|
||||
this.addMintingAccountMessage = 'Loading...';
|
||||
|
||||
parentEpml
|
||||
.request('apiCall', {
|
||||
url: `/admin/mintingaccounts?apiKey=${this.getApiKey()}`,
|
||||
method: 'POST',
|
||||
body: this.sponsorshipKeyValue,
|
||||
})
|
||||
.then((res) => {
|
||||
if (res === true) {
|
||||
// refetch data
|
||||
this.atMount();
|
||||
this.sponsorshipKeyValue = '';
|
||||
this.addMintingAccountMessage = this.renderErr1Text();
|
||||
this.isLoadingSponsorshipKeySubmit = false;
|
||||
} else {
|
||||
this.sponsorshipKeyValue = '';
|
||||
this.addMintingAccountMessage = this.renderErr2Text();
|
||||
this.isLoadingSponsorshipKeySubmit = false;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
inputHandler(e) {
|
||||
this.sponsorshipKeyValue = e.target.value;
|
||||
}
|
||||
|
||||
render() {
|
||||
return html`
|
||||
<div class="inner-container">
|
||||
<div class="sub-main">
|
||||
<h2 class="level-black">
|
||||
${translate('mintingpage.mchange33')}
|
||||
</h2>
|
||||
<p class="description">
|
||||
${translate('mintingpage.mchange34')}
|
||||
</p>
|
||||
<h2 class="level-black">
|
||||
${translate('mintingpage.mchange35')}
|
||||
</h2>
|
||||
<p class="description">
|
||||
${translate('mintingpage.mchange36')}
|
||||
</p>
|
||||
<p class="description">
|
||||
${translate('mintingpage.mchange37')}
|
||||
</p>
|
||||
|
||||
<p class="message">${this.addMintingAccountMessage}</p>
|
||||
<div class="form-wrapper">
|
||||
<div class="form-item form-item--input">
|
||||
<mwc-textfield
|
||||
?disabled="${this
|
||||
.isLoadingSponsorshipKeySubmit}"
|
||||
label="${translate(
|
||||
'becomeMinterPage.bchange8'
|
||||
)}"
|
||||
id="addSponsorshipKey"
|
||||
@input="${this.inputHandler}"
|
||||
.value="${this.sponsorshipKeyValue || ''}"
|
||||
fullWidth
|
||||
>
|
||||
</mwc-textfield>
|
||||
</div>
|
||||
|
||||
<div class="form-item form-item--button">
|
||||
<vaadin-button
|
||||
?disabled="${this
|
||||
.isLoadingSponsorshipKeySubmit}"
|
||||
@click="${this.addMintingAccount}"
|
||||
>
|
||||
${this.isLoadingSponsorshipKeySubmit === false
|
||||
? html`${translate(
|
||||
'puzzlepage.pchange15'
|
||||
)}`
|
||||
: html`<paper-spinner-lite
|
||||
active
|
||||
></paper-spinner-lite>`}
|
||||
</vaadin-button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
`;
|
||||
}
|
||||
}
|
||||
|
||||
window.customElements.define('not-sponsored', NotSponsored);
|
@ -0,0 +1,123 @@
|
||||
import { LitElement, html } from 'lit';
|
||||
import { Epml } from '../../../../epml.js';
|
||||
import '../../components/ButtonIconCopy.js';
|
||||
import { use, translate, registerTranslateConfig } from 'lit-translate';
|
||||
|
||||
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 { blocksNeed } from '../../../utils/blocks-needed.js';
|
||||
import { pageStyles } from '../become-minter-css.src.js';
|
||||
|
||||
class YesSponsored extends LitElement {
|
||||
static get properties() {
|
||||
return {
|
||||
addressInfo: { type: Object },
|
||||
rewardSharePublicKey: { type: String },
|
||||
};
|
||||
}
|
||||
|
||||
constructor() {
|
||||
super();
|
||||
|
||||
this.addressInfo = {};
|
||||
this.rewardSharePublicKey = '';
|
||||
}
|
||||
|
||||
static styles = [pageStyles];
|
||||
|
||||
_levelUpBlocks() {
|
||||
let countBlocksString = (
|
||||
blocksNeed(0) -
|
||||
(this.addressInfo?.blocksMinted +
|
||||
this.addressInfo?.blocksMintedAdjustment)
|
||||
).toString();
|
||||
return countBlocksString;
|
||||
}
|
||||
|
||||
render() {
|
||||
return html`
|
||||
<div class="inner-container">
|
||||
<div class="column column-center">
|
||||
<div class="column column-center">
|
||||
<span class="level-black"
|
||||
>${translate('becomeMinterPage.bchange10')}</span
|
||||
>
|
||||
<hr
|
||||
style="width: 50%; color: #eee; border-radius: 80%; margin-bottom: 2rem;"
|
||||
/>
|
||||
</div>
|
||||
<br />
|
||||
<div class="row row-center gap">
|
||||
<div class="content-box">
|
||||
<span class="title"
|
||||
>${translate(
|
||||
'walletpage.wchange41'
|
||||
)}</span
|
||||
>
|
||||
<hr
|
||||
style="color: #eee; border-radius: 90%; margin-bottom: 1rem;"
|
||||
/>
|
||||
<h4>${translate('becomeMinterPage.bchange12')}</h4>
|
||||
</div>
|
||||
<div class="content-box">
|
||||
<span class="title"
|
||||
>${translate(
|
||||
'becomeMinterPage.bchange13'
|
||||
)}</span
|
||||
>
|
||||
<hr
|
||||
style="color: #eee; border-radius: 90%; margin-bottom: 1rem;"
|
||||
/>
|
||||
<h4>
|
||||
${this._levelUpBlocks()}
|
||||
${translate('mintingpage.mchange26')}
|
||||
</h4>
|
||||
</div>
|
||||
<div class="content-box">
|
||||
<span class="title"
|
||||
>${translate(
|
||||
'becomeMinterPage.bchange15'
|
||||
)}</span
|
||||
>
|
||||
<hr
|
||||
style="color: #eee; border-radius: 90%; margin-bottom: 1rem;"
|
||||
/>
|
||||
<h4 class="no-margin">
|
||||
${translate('becomeMinterPage.bchange16')}
|
||||
</h4>
|
||||
<div class="row row-center column-center no-wrap">
|
||||
<p class="address">
|
||||
${this.rewardSharePublicKey}
|
||||
</p>
|
||||
<button-icon-copy
|
||||
title="${translate('walletpage.wchange3')}"
|
||||
onSuccessMessage="${translate(
|
||||
'walletpage.wchange4'
|
||||
)}"
|
||||
onErrorMessage="${translate(
|
||||
'walletpage.wchange39'
|
||||
)}"
|
||||
textToCopy=${this.rewardSharePublicKey}
|
||||
buttonSize="28px"
|
||||
iconSize="16px"
|
||||
color="var(--copybutton)"
|
||||
offsetLeft="4px"
|
||||
>
|
||||
</button-icon-copy>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<br />
|
||||
</div>
|
||||
</div>
|
||||
`;
|
||||
}
|
||||
}
|
||||
|
||||
window.customElements.define('yes-sponsored', YesSponsored);
|
53
qortal-ui-plugins/plugins/core/become-minter/index.html
Normal file
53
qortal-ui-plugins/plugins/core/become-minter/index.html
Normal file
@ -0,0 +1,53 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<link rel="stylesheet" href="/font/material-icons.css" />
|
||||
<link rel="stylesheet" href="/font/switch-theme.css" />
|
||||
<script>
|
||||
const checkBack = localStorage.getItem('qortalTheme');
|
||||
if (checkBack === 'dark') {
|
||||
newtheme = 'dark';
|
||||
} else {
|
||||
newtheme = 'light';
|
||||
}
|
||||
document.querySelector('html').setAttribute('theme', newtheme);
|
||||
</script>
|
||||
<style>
|
||||
html {
|
||||
--scrollbarBG: #a1a1a1;
|
||||
--thumbBG: #6a6c75;
|
||||
}
|
||||
|
||||
*::-webkit-scrollbar {
|
||||
width: 11px;
|
||||
}
|
||||
|
||||
* {
|
||||
scrollbar-width: thin;
|
||||
scrollbar-color: var(--thumbBG) var(--scrollbarBG);
|
||||
}
|
||||
|
||||
*::-webkit-scrollbar-track {
|
||||
background: var(--scrollbarBG);
|
||||
}
|
||||
|
||||
*::-webkit-scrollbar-thumb {
|
||||
background-color: var(--thumbBG);
|
||||
border-radius: 6px;
|
||||
border: 3px solid var(--scrollbarBG);
|
||||
}
|
||||
|
||||
html,
|
||||
body {
|
||||
margin: 0;
|
||||
font-family: 'Roboto', sans-serif;
|
||||
background: var(--plugback);
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<become-minter></become-minter>
|
||||
<script src="become-minter.js"></script>
|
||||
</body>
|
||||
</html>
|
@ -309,6 +309,10 @@ class ChatPage extends LitElement {
|
||||
this.messageSignature = eachMessage.signature
|
||||
let _eachMessage = this.decodeMessage(eachMessage)
|
||||
return _eachMessage
|
||||
} else {
|
||||
this.messageSignature = eachMessage.signature
|
||||
let _eachMessage = this.decodeMessage(eachMessage)
|
||||
return _eachMessage
|
||||
}
|
||||
})
|
||||
|
||||
@ -329,18 +333,22 @@ class ChatPage extends LitElement {
|
||||
} else {
|
||||
|
||||
let _newMessages = messages.map((eachMessage) => {
|
||||
|
||||
if (eachMessage.isText === true) {
|
||||
let _eachMessage = this.decodeMessage(eachMessage)
|
||||
|
||||
if (this.messageSignature !== eachMessage.signature) {
|
||||
|
||||
this.messageSignature = eachMessage.signature
|
||||
|
||||
// What are we waiting for, send in the message immediately...
|
||||
this.renderNewMessage(_eachMessage)
|
||||
}
|
||||
return _eachMessage
|
||||
} else {
|
||||
let _eachMessage = this.decodeMessage(eachMessage)
|
||||
|
||||
if (this.messageSignature !== eachMessage.signature) {
|
||||
this.messageSignature = eachMessage.signature
|
||||
this.renderNewMessage(_eachMessage)
|
||||
}
|
||||
return _eachMessage
|
||||
}
|
||||
})
|
||||
|
@ -1,9 +1,8 @@
|
||||
import { parentEpml } from './connect.js'
|
||||
import './streams/streams.js'
|
||||
|
||||
let config = {}
|
||||
let haveRegisteredNodeManagement = false
|
||||
import { parentEpml } from './connect.js';
|
||||
import './streams/streams.js';
|
||||
|
||||
let config = {};
|
||||
let haveRegisteredNodeManagement = false;
|
||||
|
||||
parentEpml.ready().then(() => {
|
||||
// pluginUrlsConf
|
||||
@ -15,7 +14,16 @@ parentEpml.ready().then(() => {
|
||||
title: 'Minting Details',
|
||||
icon: 'vaadin:info-circle',
|
||||
menus: [],
|
||||
parent: false
|
||||
parent: false,
|
||||
},
|
||||
{
|
||||
url: 'become-minter',
|
||||
domain: 'core',
|
||||
page: 'become-minter/index.html',
|
||||
title: 'Become a Minter',
|
||||
icon: 'vaadin:info-circle',
|
||||
menus: [],
|
||||
parent: false,
|
||||
},
|
||||
{
|
||||
url: 'wallet',
|
||||
@ -24,7 +32,7 @@ parentEpml.ready().then(() => {
|
||||
title: 'Wallet',
|
||||
icon: 'vaadin:wallet',
|
||||
menus: [],
|
||||
parent: false
|
||||
parent: false,
|
||||
},
|
||||
{
|
||||
url: 'trade-portal',
|
||||
@ -33,7 +41,7 @@ parentEpml.ready().then(() => {
|
||||
title: 'Trade Portal',
|
||||
icon: 'vaadin:bullets',
|
||||
menus: [],
|
||||
parent: false
|
||||
parent: false,
|
||||
},
|
||||
{
|
||||
url: 'reward-share',
|
||||
@ -42,7 +50,7 @@ parentEpml.ready().then(() => {
|
||||
title: 'Reward Share',
|
||||
icon: 'vaadin:share-square',
|
||||
menus: [],
|
||||
parent: false
|
||||
parent: false,
|
||||
},
|
||||
{
|
||||
url: 'name-registration',
|
||||
@ -51,7 +59,7 @@ parentEpml.ready().then(() => {
|
||||
title: 'Name Registration',
|
||||
icon: 'vaadin:user-check',
|
||||
menus: [],
|
||||
parent: false
|
||||
parent: false,
|
||||
},
|
||||
{
|
||||
url: 'websites',
|
||||
@ -60,7 +68,7 @@ parentEpml.ready().then(() => {
|
||||
title: 'Websites',
|
||||
icon: 'vaadin:desktop',
|
||||
menus: [],
|
||||
parent: false
|
||||
parent: false,
|
||||
},
|
||||
{
|
||||
url: 'data-management',
|
||||
@ -69,7 +77,7 @@ parentEpml.ready().then(() => {
|
||||
title: 'Data Management',
|
||||
icon: 'vaadin:database',
|
||||
menus: [],
|
||||
parent: false
|
||||
parent: false,
|
||||
},
|
||||
{
|
||||
url: 'q-chat',
|
||||
@ -78,7 +86,7 @@ parentEpml.ready().then(() => {
|
||||
title: 'Q-Chat',
|
||||
icon: 'vaadin:chat',
|
||||
menus: [],
|
||||
parent: false
|
||||
parent: false,
|
||||
},
|
||||
{
|
||||
url: 'group-management',
|
||||
@ -87,7 +95,7 @@ parentEpml.ready().then(() => {
|
||||
title: 'Group Management',
|
||||
icon: 'vaadin:group',
|
||||
menus: [],
|
||||
parent: false
|
||||
parent: false,
|
||||
},
|
||||
{
|
||||
url: 'puzzles',
|
||||
@ -96,22 +104,25 @@ parentEpml.ready().then(() => {
|
||||
title: 'Puzzles',
|
||||
icon: 'vaadin:puzzle-piece',
|
||||
menus: [],
|
||||
parent: false
|
||||
}
|
||||
]
|
||||
parent: false,
|
||||
},
|
||||
];
|
||||
|
||||
const registerPlugins = (pluginInfo) => {
|
||||
parentEpml.request('registerUrl', pluginInfo)
|
||||
}
|
||||
parentEpml.request('registerUrl', pluginInfo);
|
||||
};
|
||||
|
||||
const checkNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node]
|
||||
const checkNode =
|
||||
window.parent.reduxStore.getState().app.nodeConfig.knownNodes[
|
||||
window.parent.reduxStore.getState().app.nodeConfig.node
|
||||
];
|
||||
|
||||
parentEpml.subscribe('config', c => {
|
||||
config = JSON.parse(c)
|
||||
parentEpml.subscribe('config', (c) => {
|
||||
config = JSON.parse(c);
|
||||
|
||||
// Only register node management if node management is enabled and it hasn't already been registered
|
||||
if (!haveRegisteredNodeManagement && checkNode.enableManagement) {
|
||||
haveRegisteredNodeManagement = true
|
||||
haveRegisteredNodeManagement = true;
|
||||
|
||||
let nodeManagementConf = {
|
||||
url: 'node-management',
|
||||
@ -120,13 +131,13 @@ parentEpml.ready().then(() => {
|
||||
title: 'Node Management',
|
||||
icon: 'vaadin:cloud',
|
||||
menus: [],
|
||||
parent: false
|
||||
}
|
||||
parent: false,
|
||||
};
|
||||
|
||||
let _pluginUrlsConf = [...pluginUrlsConf, nodeManagementConf]
|
||||
registerPlugins(_pluginUrlsConf)
|
||||
let _pluginUrlsConf = [...pluginUrlsConf, nodeManagementConf];
|
||||
registerPlugins(_pluginUrlsConf);
|
||||
} else {
|
||||
registerPlugins(pluginUrlsConf)
|
||||
registerPlugins(pluginUrlsConf);
|
||||
}
|
||||
})
|
||||
})
|
||||
});
|
||||
});
|
||||
|
@ -545,7 +545,7 @@ class Websites extends LitElement {
|
||||
const blockedNamesUrl = `${nodeUrl}/lists/blockedNames?apiKey=${this.getApiKey()}`
|
||||
|
||||
const resources = await parentEpml.request('apiCall', {
|
||||
url: `/arbitrary/resources?service=${this.service}&default=true&limit=0&reverse=false&includestatus=true&includemetadata=true`
|
||||
url: `/arbitrary/resources?service=${this.service}&default=true&limit=0&reverse=false&includestatus=false&includemetadata=false`
|
||||
})
|
||||
|
||||
this.resources = resources
|
||||
|
55
qortal-ui-plugins/plugins/core/trade-bot/index.html
Normal file
55
qortal-ui-plugins/plugins/core/trade-bot/index.html
Normal file
@ -0,0 +1,55 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<link rel="stylesheet" href="/font/material-icons.css">
|
||||
<link rel="stylesheet" href="/font/switch-theme.css">
|
||||
<script>
|
||||
const checkBack = localStorage.getItem('qortalTheme')
|
||||
if (checkBack === 'dark') {
|
||||
newtheme = 'dark';
|
||||
} else {
|
||||
newtheme = 'light';
|
||||
}
|
||||
document.querySelector('html').setAttribute('theme', newtheme);
|
||||
</script>
|
||||
<style>
|
||||
html {
|
||||
--scrollbarBG: #a1a1a1;
|
||||
--thumbBG: #6a6c75;
|
||||
}
|
||||
|
||||
*::-webkit-scrollbar {
|
||||
width: 11px;
|
||||
}
|
||||
|
||||
* {
|
||||
scrollbar-width: thin;
|
||||
scrollbar-color: var(--thumbBG) var(--scrollbarBG);
|
||||
}
|
||||
|
||||
*::-webkit-scrollbar-track {
|
||||
background: var(--scrollbarBG);
|
||||
}
|
||||
|
||||
*::-webkit-scrollbar-thumb {
|
||||
background-color: var(--thumbBG);
|
||||
border-radius: 6px;
|
||||
border: 3px solid var(--scrollbarBG);
|
||||
}
|
||||
|
||||
html,
|
||||
body {
|
||||
margin: 0;
|
||||
font-family: "Roboto", sans-serif;
|
||||
background: var(--plugback);
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<trade-bot></trade-bot>
|
||||
<script src="trade-bot.js"></script>
|
||||
</body>
|
||||
|
||||
</html>
|
@ -19,6 +19,8 @@ import '@material/mwc-textfield'
|
||||
import '@polymer/paper-progress/paper-progress.js'
|
||||
import '@polymer/paper-slider/paper-slider.js'
|
||||
import '@polymer/paper-spinner/paper-spinner-lite.js'
|
||||
import '@polymer/paper-icon-button/paper-icon-button.js'
|
||||
import '@polymer/iron-icons/iron-icons.js'
|
||||
import '@vaadin/button'
|
||||
import '@vaadin/grid'
|
||||
import '@vaadin/icon'
|
||||
@ -776,7 +778,10 @@ class MultiWallet extends LitElement {
|
||||
<div><span>${this.selectedTransaction.creatorAddress}</span></div>
|
||||
<span class="title"> ${translate("walletpage.wchange10")} </span>
|
||||
<br />
|
||||
<div><span>${this.selectedTransaction.recipient}</span></div>
|
||||
<div style="display: inline;">
|
||||
${this.renderSQB()}
|
||||
</div>
|
||||
<br />
|
||||
${!this.selectedTransaction.amount ? '' : html`
|
||||
<span class="title"> ${translate("walletpage.wchange11")} </span>
|
||||
<br />
|
||||
@ -823,9 +828,10 @@ class MultiWallet extends LitElement {
|
||||
</div>
|
||||
<span class="title"> ${translate("walletpage.wchange10")} </span>
|
||||
<br />
|
||||
<div>
|
||||
<div style="display: inline;">
|
||||
<span>${this.selectedTransaction.btcReceiver}</span>
|
||||
</div>
|
||||
<br />
|
||||
<span class="title"> ${translate("walletpage.wchange12")} </span>
|
||||
<br />
|
||||
<div>
|
||||
@ -873,9 +879,10 @@ class MultiWallet extends LitElement {
|
||||
</div>
|
||||
<span class="title"> ${translate("walletpage.wchange10")} </span>
|
||||
<br />
|
||||
<div>
|
||||
<span> ${this.selectedTransaction.ltcReceiver} </span>
|
||||
<div style="display: inline;">
|
||||
<span>${this.selectedTransaction.ltcReceiver}</span> <paper-icon-button icon="icons:send" @click=${() => this.sendToLtcAddress()} title="Send to this address"></paper-icon-button>
|
||||
</div>
|
||||
<br />
|
||||
<span class="title"> ${translate("walletpage.wchange12")} </span>
|
||||
<br />
|
||||
<div>
|
||||
@ -918,9 +925,10 @@ class MultiWallet extends LitElement {
|
||||
</div>
|
||||
<span class="title"> ${translate("walletpage.wchange9")} </span>
|
||||
<br />
|
||||
<div>
|
||||
<div style="display: inline;">
|
||||
<span>${this.selectedTransaction.dogeSender}</span>
|
||||
</div>
|
||||
<br />
|
||||
<span class="title"> ${translate("walletpage.wchange10")} </span>
|
||||
<br />
|
||||
<div>
|
||||
@ -973,9 +981,10 @@ class MultiWallet extends LitElement {
|
||||
</div>
|
||||
<span class="title"> ${translate("walletpage.wchange10")} </span>
|
||||
<br />
|
||||
<div>
|
||||
<div> style="display: inline;"
|
||||
<span>${this.selectedTransaction.dgbReceiver}</span>
|
||||
</div>
|
||||
<br />
|
||||
<span class="title"> ${translate("walletpage.wchange12")} </span>
|
||||
<br />
|
||||
<div>
|
||||
@ -1023,9 +1032,10 @@ class MultiWallet extends LitElement {
|
||||
</div>
|
||||
<span class="title"> ${translate("walletpage.wchange10")} </span>
|
||||
<br />
|
||||
<div>
|
||||
<div style="display: inline;">
|
||||
<span>${this.selectedTransaction.rvnReceiver}</span>
|
||||
</div>
|
||||
<br />
|
||||
<span class="title"> ${translate("walletpage.wchange12")} </span>
|
||||
<br />
|
||||
<div>
|
||||
@ -1117,7 +1127,10 @@ class MultiWallet extends LitElement {
|
||||
</p>
|
||||
<p>
|
||||
<span>${translate("walletpage.wchange19")}:</span><br />
|
||||
<span style="font-weight: bold;">${this.balanceString}</span>
|
||||
<span style="float: left; font-weight: bold; display: inline;">${this.balanceString}</span><br />
|
||||
<span style="float: left; font-weight: bold; display: inline;">
|
||||
<vaadin-button theme="primary small" style="width: 100%;" @click=${() => this.calculateQortAll()}><vaadin-icon icon="vaadin:coin-piles" slot="prefix"></vaadin-icon> ${translate("walletpage.wchange45")} QORT</vaadin-button>
|
||||
</span><br /><span> </span>
|
||||
</p>
|
||||
<p>
|
||||
<mwc-textfield
|
||||
@ -1254,7 +1267,10 @@ class MultiWallet extends LitElement {
|
||||
</p>
|
||||
<p>
|
||||
<span>${translate("walletpage.wchange19")}:</span><br />
|
||||
<span style="font-weight: bold;">${this.balanceString}</span>
|
||||
<span style="float: left; font-weight: bold; display: inline;">${this.balanceString}</span><br />
|
||||
<span style="float: left; font-weight: bold; display: inline;">
|
||||
<vaadin-button theme="primary small" style="width: 100%;" @click=${() => this.calculateLtcAll()}><vaadin-icon icon="vaadin:coin-piles" slot="prefix"></vaadin-icon> ${translate("walletpage.wchange45")} LTC</vaadin-button>
|
||||
</span><br /><span> </span>
|
||||
</p>
|
||||
<p>
|
||||
<mwc-textfield
|
||||
@ -2045,6 +2061,46 @@ class MultiWallet extends LitElement {
|
||||
this.errorMessage = ''
|
||||
}
|
||||
|
||||
sendToQortAddress() {
|
||||
this.recipient = this.selectedTransaction.recipient
|
||||
this.openSendQort()
|
||||
this.shadowRoot.querySelector('#showTransactionDetailsDialog').close()
|
||||
}
|
||||
|
||||
sendToLtcAddress() {
|
||||
this.ltcRecipient = this.selectedTransaction.ltcReceiver
|
||||
this.openSendLtc()
|
||||
this.shadowRoot.querySelector('#showLtcTransactionDetailsDialog').close()
|
||||
}
|
||||
|
||||
calculateQortAll() {
|
||||
if (this.balance < 0.00100000) {
|
||||
let not_enough_string = get("walletpage.wchange26")
|
||||
parentEpml.request('showSnackBar', `${not_enough_string}`)
|
||||
} else {
|
||||
this.amount = (this.balance - 0.00100000).toFixed(8)
|
||||
}
|
||||
}
|
||||
|
||||
calculateLtcAll() {
|
||||
if (this.balance < 0.00025000) {
|
||||
let not_enough_string = get("walletpage.wchange26")
|
||||
parentEpml.request('showSnackBar', `${not_enough_string}`)
|
||||
} else {
|
||||
this.ltcAmount = (this.balance - 0.00025000).toFixed(8)
|
||||
this.ltcFeePerByte = 15
|
||||
}
|
||||
}
|
||||
|
||||
renderSQB() {
|
||||
let displaybutton = this.selectedTransaction.recipient
|
||||
if (displaybutton == null) {
|
||||
return html`<span>${this.selectedTransaction.recipient}</span>`
|
||||
} else {
|
||||
return html`<span>${this.selectedTransaction.recipient}</span> <paper-icon-button icon="icons:send" @click=${() => this.sendToQortAddress()} title="Send to this address"></paper-icon-button>`
|
||||
}
|
||||
}
|
||||
|
||||
renderFetchText() {
|
||||
return html`${translate("walletpage.wchange1")}`
|
||||
}
|
||||
@ -2646,7 +2702,6 @@ class MultiWallet extends LitElement {
|
||||
}
|
||||
|
||||
const sortedTransactions = txs.sort(compareFn)
|
||||
console.log(sortedTransactions)
|
||||
if (this._selectedWallet == coin) {
|
||||
this.wallets.get(this._selectedWallet).transactions = sortedTransactions
|
||||
}
|
||||
|
23
qortal-ui-plugins/plugins/utils/blocks-needed.js
Normal file
23
qortal-ui-plugins/plugins/utils/blocks-needed.js
Normal file
@ -0,0 +1,23 @@
|
||||
export const blocksNeed = (level) => {
|
||||
if (level === 0) {
|
||||
return '7200';
|
||||
} else if (level === 1) {
|
||||
return '72000';
|
||||
} else if (level === 2) {
|
||||
return '201600';
|
||||
} else if (level === 3) {
|
||||
return '374400';
|
||||
} else if (level === 4) {
|
||||
return '618400';
|
||||
} else if (level === 5) {
|
||||
return '964000';
|
||||
} else if (level === 6) {
|
||||
return '1482400';
|
||||
} else if (level === 7) {
|
||||
return '2173600';
|
||||
} else if (level === 8) {
|
||||
return '3037600';
|
||||
} else if (level === 9) {
|
||||
return '4074400';
|
||||
}
|
||||
};
|
Loading…
x
Reference in New Issue
Block a user