forked from Qortal/qortal-ui
Merge branch 'master' into pirate-chain
# Conflicts: # qortal-ui-plugins/plugins/core/trade-portal/trade-portal.src.js # qortal-ui-plugins/plugins/core/wallet/wallet-app.src.js
This commit is contained in:
commit
2870ac6c12
@ -1,5 +1,7 @@
|
||||
# Qortal Project UI
|
||||
|
||||
![GitHub tag (latest by date)](https://img.shields.io/github/v/tag/Qortal/qortal-ui?label=latest%20version)
|
||||
[![GitHub Releases](https://img.shields.io/github/downloads/Qortal/qortal-ui/latest/total)](https://github.com/Qortal/qortal-ui/releases/latest)
|
||||
[![License](https://img.shields.io/badge/license-GPL--3.0-blue)](https://opensource.org/licenses/GPL-3.0)
|
||||
[![Qortal Discord Invite](https://img.shields.io/discord/745037351163527189?color=%237289DA&label=chat&logo=discord&logoColor=white)](https://discord.com/invite/54UyhB7)
|
||||
|
||||
@ -24,7 +26,7 @@ Easiest way to install the lastest required packages on Linux is via nvm.
|
||||
``` source ~/.profile ``` (For Debian based distro) <br/>
|
||||
``` source ~/.bashrc ``` (For Fedora / CentOS) <br/>
|
||||
``` nvm ls-remote ``` (Fetch list of available versions) <br/>
|
||||
``` nvm install v14.17.0 ``` (Latest LTS: Fermium as of writing) <br/>
|
||||
``` nvm install v16.14.2 ``` (LTS: Gallium supported by Electron) <br/>
|
||||
``` npm -g install yarn ``` <br/>
|
||||
|
||||
On BSD do a ``` pkg_add node followed by npm install -g yarn ```
|
||||
|
BIN
img/ko-flag-round-icon-32.png
Normal file
BIN
img/ko-flag-round-icon-32.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.6 KiB |
BIN
img/qortbtc.png
Normal file
BIN
img/qortbtc.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.1 KiB |
BIN
img/ro-flag-round-icon-32.png
Normal file
BIN
img/ro-flag-round-icon-32.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.9 KiB |
10
package.json
10
package.json
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "qortal-ui",
|
||||
"version": "1.9.2",
|
||||
"version": "1.9.3",
|
||||
"description": "Qortal Project - decentralize the world - Data storage, communications, web hosting, decentralized trading, complete infrastructure for the future blockchain-based Internet",
|
||||
"keywords": [
|
||||
"QORT",
|
||||
@ -31,12 +31,12 @@
|
||||
"publish": "electron-builder -p always"
|
||||
},
|
||||
"dependencies": {
|
||||
"electron-updater": "5.0.1",
|
||||
"electron-log": "4.4.7"
|
||||
"electron-updater": "5.0.5",
|
||||
"electron-log": "4.4.8"
|
||||
},
|
||||
"devDependencies": {
|
||||
"electron": "17.4.5",
|
||||
"electron-builder": "23.0.3",
|
||||
"electron": "19.0.6",
|
||||
"electron-builder": "23.1.0",
|
||||
"electron-notarize": "1.2.1",
|
||||
"electron-packager": "15.5.1",
|
||||
"shelljs": "0.8.5"
|
||||
|
@ -16,7 +16,9 @@
|
||||
"serbian": "Serbisch",
|
||||
"italian": "Italienisch",
|
||||
"russian": "Russisch",
|
||||
"norwegian": "Norwegisch"
|
||||
"norwegian": "Norwegisch",
|
||||
"romanian": "Rumänisch",
|
||||
"korean": "Koreanisch"
|
||||
},
|
||||
"sidemenu": {
|
||||
"mintingdetails": "PRÄGUNGSDETAILS",
|
||||
|
@ -16,7 +16,9 @@
|
||||
"serbian": "Serbio",
|
||||
"italian": "Italiano",
|
||||
"russian": "Ruso",
|
||||
"norwegian": "Noruego"
|
||||
"norwegian": "Noruego",
|
||||
"romanian": "Rumano",
|
||||
"korean": "Coreano"
|
||||
},
|
||||
"sidemenu": {
|
||||
"mintingdetails": "DETALLES DE ACUÑACIÓN",
|
||||
|
@ -16,7 +16,9 @@
|
||||
"serbian": "Serbe",
|
||||
"italian": "Italien",
|
||||
"russian": "Russe",
|
||||
"norwegian": "Norvégien"
|
||||
"norwegian": "Norvégien",
|
||||
"romanian": "Roumain",
|
||||
"korean": "Coréen"
|
||||
},
|
||||
"sidemenu": {
|
||||
"mintingdetails": "DETAILS DE FRAPPE",
|
||||
|
@ -17,7 +17,9 @@
|
||||
"serbian": "सर्बियाई",
|
||||
"italian": "इतालवी",
|
||||
"russian": "रूसी",
|
||||
"norwegian": "नार्वेजियन"
|
||||
"norwegian": "नार्वेजियन",
|
||||
"romanian": "रोमानियाई",
|
||||
"korean": "कोरियाई"
|
||||
},
|
||||
"sidemenu": {
|
||||
"mintingdetails": "खनन विवरण",
|
||||
|
@ -16,7 +16,9 @@
|
||||
"serbian": "Srpski",
|
||||
"italian": "Talijanski",
|
||||
"russian": "Ruski",
|
||||
"norwegian": "Norveški"
|
||||
"norwegian": "Norveški",
|
||||
"romanian": "Rumunjski",
|
||||
"korean": "Korejski"
|
||||
},
|
||||
"sidemenu": {
|
||||
"mintingdetails": "DETALJI O MINTANJU",
|
||||
|
@ -16,7 +16,9 @@
|
||||
"serbian": "Szerb",
|
||||
"italian": "Olasz",
|
||||
"russian": "Orosz",
|
||||
"norwegian": "Norvég"
|
||||
"norwegian": "Norvég",
|
||||
"romanian": "Román",
|
||||
"korean": "Koreai"
|
||||
},
|
||||
"sidemenu": {
|
||||
"mintingdetails": "VERÉSI RÉSZLETEK",
|
||||
|
@ -16,7 +16,9 @@
|
||||
"serbian": "Serbo",
|
||||
"italian": "Italiano",
|
||||
"russian": "Russo",
|
||||
"norwegian": "Norvegese"
|
||||
"norwegian": "Norvegese",
|
||||
"romanian": "Rumeno",
|
||||
"korean": "Coreano"
|
||||
},
|
||||
"sidemenu": {
|
||||
"mintingdetails": "DETTAGLI DI MINTING",
|
||||
|
597
qortal-ui-core/language/ko.json
Normal file
597
qortal-ui-core/language/ko.json
Normal file
@ -0,0 +1,597 @@
|
||||
{
|
||||
"selectmenu": {
|
||||
"selectlanguage": "언어 선택",
|
||||
"languageflag": "ko",
|
||||
"english": "영어",
|
||||
"chinese1": "중국어(간체)",
|
||||
"chinese2": "중국어(번체)",
|
||||
"german": "독일어",
|
||||
"french": "프랑스어",
|
||||
"polish": "폴란드어",
|
||||
"spanish": "스페인어",
|
||||
"hindi": "힌디어",
|
||||
"croatian": "크로아티아어",
|
||||
"portuguese": "포르투갈어",
|
||||
"hungarian": "헝가리",
|
||||
"serbian": "세르비아어",
|
||||
"italian": "이탈리아어",
|
||||
"russian": "러시아어",
|
||||
"norwegian": "노르웨이어",
|
||||
"romanian": "루마니아어",
|
||||
"korean": "한국어"
|
||||
},
|
||||
"sidemenu": {
|
||||
"mintingdetails": "민팅 세부정보",
|
||||
"wallets": "지갑",
|
||||
"tradeportal": "무역 포털",
|
||||
"rewardshare": "보상 공유",
|
||||
"nameregistration": "이름 등록",
|
||||
"websites": "웹사이트",
|
||||
"datamanagement": "데이터 관리",
|
||||
"qchat": "Q-CHAT",
|
||||
"groupmanagement": "그룹 관리",
|
||||
"puzzles": "퍼즐",
|
||||
"nodemanagement": "노드 관리"
|
||||
},
|
||||
"login": {
|
||||
"login": "로그인",
|
||||
"createaccount": "계정 생성",
|
||||
"name": "이름",
|
||||
"address": "주소",
|
||||
"password": "비밀번호",
|
||||
"youraccounts": "귀하의 계정",
|
||||
"clickto": "클릭하여 계정에 로그인하세요",
|
||||
"needcreate": "로그인하기 전에 계정을 생성하거나 저장해야 합니다!",
|
||||
"upload": "qortal 백업파일을 업로드합니다.",
|
||||
"howlogin": "어떤 방식으로 로그인하시겠습니까?",
|
||||
"seed": "시드구문",
|
||||
"seedphrase": "시드구문",
|
||||
"saved": "계정 저장",
|
||||
"qora": "Qora 계정 시드구문",
|
||||
"backup": "Qortal 지갑 백업",
|
||||
"decrypt": "백업 암호 해독",
|
||||
"save": "이 브라우저에 저장",
|
||||
"prepare": "계정 준비",
|
||||
"areyousure": "저장된 지갑에서 이 지갑을 제거하시겠습니까?",
|
||||
"error1": "백업은 유호한 json파일 형식이어야 합니다.",
|
||||
"error2": "로그인 옵션이 선택되지 않았습니다.",
|
||||
"createwelcome": "Qortal에 오신 것을 환영합니다. RPG 게임과 비슷하다는 것을 알게 되실 것입니다. Qortal 네트워크의 관리자로서(만약 당신이 하나를 선택한다면) 계정을 레벨업할 수 있는 기회를 갖게 될 것입니다. Qortal 네트워크에 대한 더 많은 블록 보상은 물론 플랫폼 결정에 대한 투표 측면에서 네트워크에 대한 더 큰 영향력을 갖게 될 것입니다..",
|
||||
"createa": "A",
|
||||
"click": "시드 구문을 보려면 클릭하십시오.",
|
||||
"confirmpass": "암호 확인",
|
||||
"willbe": "백그라운드에서 랜덤하게 생성됩니다. 이것은 Qortal의 블록체인 계정에 대한 개인 키 생성기로 사용됩니다.",
|
||||
"clicknext": "아래 NEXT를 클릭하여 Qortal 계정을 만드십시오.",
|
||||
"ready": "계정을 만들 준비가 되었습니다. 이 브라우저에 저장됩니다. 브라우저에 새 계정을 저장하지 않으려면 아래 상자를 선택 취소할 수 있습니다. 계정을 만든 후에는 반드시 다운로드해야 하는 지갑 백업 파일을 사용하여 새 계정으로 로그인할 수 있습니다(로그아웃 후).",
|
||||
"welmessage": "qortal에 오신 것을 환영합니다.",
|
||||
"pleaseenter": "암호를 입력하십시오!",
|
||||
"notmatch": "암호가 일치하지 않습니다!",
|
||||
"lessthen8": "암호가 8자 미만입니다! 이것은 권장되지 않습니다. 이 경고는 계속 무시할 수 있습니다.",
|
||||
"entername": "이름을 입력하십시오!",
|
||||
"downloaded": "지갑 백업 파일이 다운로드됩니다!",
|
||||
"loading": "로드 중입니다. 잠시 기다려 주십시오...",
|
||||
"createdseed": "귀하의 시드구문",
|
||||
"saveseed": "시드구문 저장",
|
||||
"savein": "브라우저에 저장",
|
||||
"backup2": "이 파일은 앱/브라우저에 저장되지 않은 시스템의 계정에 액세스할 수 있는 유일한 방법입니다. 이 파일을 여러 곳에 백업하십시오. 파일은 매우 안전하게 암호화되고 이전 단계에서 만든 로컬 암호로 해독됩니다. 어디에나 안전하게 저장할 수 있지만 여러 위치에서 저장해야 합니다.",
|
||||
"savewallet": "지갑 백업 파일 저장",
|
||||
"created1": "이제 계정이 생성되었습니다.",
|
||||
"created2": " 이 브라우저에 저장됩니다.",
|
||||
"downloadbackup": "지갑 백업 파일 다운로드"
|
||||
},
|
||||
"logout": {
|
||||
"logout": "로그아웃",
|
||||
"confirmlogout": "로그아웃하시겠습니까?"
|
||||
},
|
||||
"fragfile": {
|
||||
"selectfile": "파일선택",
|
||||
"dragfile": "백업을 여기에 드래그"
|
||||
},
|
||||
"settings": {
|
||||
"generalinfo": "일반 계정 정보",
|
||||
"address": "주소",
|
||||
"publickey": "공개 키",
|
||||
"settings": "설정",
|
||||
"account": "계정",
|
||||
"security": "보안",
|
||||
"notifications": "알림",
|
||||
"accountsecurity": "계정 보안",
|
||||
"password": "비밀번호",
|
||||
"download": "백업 파일 다운로드",
|
||||
"choose": "백업을 암호화할 암호를 선택하십시오. 암호는 로그인한 암호와 같거나 다를 수 있습니다.",
|
||||
"block": "블록 알림",
|
||||
"playsound": "소리 재생",
|
||||
"shownotifications": "알림 표시",
|
||||
"nodeurl": "노드 url",
|
||||
"nodehint": "위의 기본 노드 목록에서 노드를 선택하거나 아래 버튼을 클릭하여 사용자 지정 노드를 위의 목록에 추가하십시오.",
|
||||
"addcustomnode": "사용자 지정 노드 추가",
|
||||
"addandsave": "추가 및 저장",
|
||||
"protocol": "프로토콜",
|
||||
"domain": "도메인",
|
||||
"port": "포트"
|
||||
},
|
||||
"appinfo": {
|
||||
"blockheight": "블록 높이",
|
||||
"uiversion": "UI 버전",
|
||||
"coreversion": "Core 버전",
|
||||
"minting": "(민팅)",
|
||||
"synchronizing": "동기화 중"
|
||||
},
|
||||
"walletprofile": {
|
||||
"minterlevel": "민터 레벨",
|
||||
"blocksminted": "민트된 블록"
|
||||
},
|
||||
"general": {
|
||||
"yes": "예",
|
||||
"no": "아니요",
|
||||
"confirm": "확인",
|
||||
"decline": "거절",
|
||||
"open": "열기",
|
||||
"close": "닫기",
|
||||
"back": "뒤로",
|
||||
"next": "다음",
|
||||
"create": "생성",
|
||||
"continue": "계속하다",
|
||||
"save": "저장"
|
||||
},
|
||||
"mintingpage": {
|
||||
"mchange1": "일반 민팅 정보",
|
||||
"mchange2": "블록체인 통계",
|
||||
"mchange3": "qortql 블록타임 평균",
|
||||
"mchange4": "일별 블록수 평균",
|
||||
"mchange5": "일별 qort생성 평균",
|
||||
"mchange6": "민팅 계정 세부사항",
|
||||
"mchange7": "민터가 아님",
|
||||
"mchange8": "민팅중",
|
||||
"mchange9": "민팅중이 아님",
|
||||
"mchange10": "계정 세부 정보 활성화",
|
||||
"mchange11": "활성화되지 않음",
|
||||
"mchange12": "계정 활성화",
|
||||
"mchange13": "소개",
|
||||
"mchange14": "계정을 활성화하려면 나가는 트랜잭션이 발생해야 합니다. 이름 등록이 가장 일반적인 방법입니다. Q-Chat에 있는 누군가에게 소량의 QORT를 보내달라고 요청하면 계정을 활성화하거나 거래 포털 내에서 QORT를 구입한 후 어떤 종류의 거래든 하고 블록체인에 있는 공개키를 보호할 수 있다. 이 작업을 수행할 때까지 공용 키는 사용자 UI에서만 알 수 있으며 다른 사용자는 체인의 공용 키를 가져올 수 없습니다.",
|
||||
"mchange15": "현재 상태",
|
||||
"mchange16": "현재 수준",
|
||||
"mchange17": "다음 레벨로의 블록",
|
||||
"mchange18": "24시간 365일 계속 주조하면 레벨에 도달합니다.",
|
||||
"mchange19": "민팅 보상 정보",
|
||||
"mchange20": "현재 계층",
|
||||
"mchange21": "계층 내 총 민터 수",
|
||||
"mchange22": "블록당 계층 점유율",
|
||||
"mchange23": "블록당 리워드",
|
||||
"mchange24": "하루당 보상 수",
|
||||
"mchange25": "초",
|
||||
"mchange26": "블록",
|
||||
"mchange27": "레벨",
|
||||
"mchange28": "계층",
|
||||
"mchange29": "날",
|
||||
"mchange30": "민터",
|
||||
"mchange31": "도움을 요청하기 위해 누르기",
|
||||
"mchange32": "민터 되기",
|
||||
"mchange33": "도입",
|
||||
"mchange34": "Qortal에서 Minter가 되고 Minter Level이 상승하여 QORT 보상을 받기 시작하려면 먼저 '후원'이 되어야 합니다. Qortal의 후원자는 레벨 5 이상의 다른 부서 또는 Qortal Founder입니다. 스폰서로부터 후원 키를 받아 이 키를 사용하여 레벨 1로 이동합니다. 레벨 1에 도달하면 자신만의 조폐 키를 만들고 Qortal Blockchain 보안에 도움이 되는 보상을 받을 수 있습니다.",
|
||||
"mchange35": "스폰서쉽",
|
||||
"mchange36": "스폰서가 노드에 추가하는 데 사용할 '스폰서 키'를 발급하고 주조 작업을 시작합니다(레벨 1에 도달할 때까지 보상 없음). 레벨 1에 도달하면 '마인팅 키'를 작성/지정하고 보상을 획득합니다. 후원 기간 내에 XXXX 블록이 남아 있습니다.",
|
||||
"mchange37": "qortal에 있는 후원 키를 발급할 수 있을 정도로 높은 수준의 광부에게 연락하여 해당 키를 받은 다음 여기로 돌아와 주조 여행을 시작할 수 있는 키를 입력하기만 하면 됩니다.",
|
||||
"mchange38": "안"
|
||||
},
|
||||
"walletpage": {
|
||||
"wchange1": "밸런스를 가져오는 중...",
|
||||
"wchange2": "현재 지갑",
|
||||
"wchange3": "클립보드에 지갑 주소 복사",
|
||||
"wchange4": "주소가 클립보드에 복사됨",
|
||||
"wchange5": "트랜잭션 세부 정보",
|
||||
"wchange6": "트랜잭션 유형",
|
||||
"wchange7": "OUT",
|
||||
"wchange8": "IN",
|
||||
"wchange9": "보내는사람",
|
||||
"wchange10": "받는사람",
|
||||
"wchange11": "양",
|
||||
"wchange12": "수수료",
|
||||
"wchange13": "블록",
|
||||
"wchange14": "시간",
|
||||
"wchange15": "트랜잭션 서명",
|
||||
"wchange16": "트랜잭션 해시",
|
||||
"wchange17": "보내기",
|
||||
"wchange18": "보낸 사람 주소",
|
||||
"wchange19": "사용가능잔액",
|
||||
"wchange20": "수신인(주소 또는 이름)",
|
||||
"wchange21": "최근 수수료:",
|
||||
"wchange22": "지갑",
|
||||
"wchange23": "수신인(주소)",
|
||||
"wchange24": "바이트당 현재 수수료",
|
||||
"wchange25": "낮은 수수료는 거래가 느리거나 확인되지 않은 결과를 초래할 수 있다.",
|
||||
"wchange26": "자금 부족!",
|
||||
"wchange27": "금액이 잘못되었습니다!",
|
||||
"wchange28": "수신자는 비워 둘 수 없습니다!",
|
||||
"wchange29": "잘못된 수신자!",
|
||||
"wchange30": "트랜잭션 성공!",
|
||||
"wchange31": "트랜잭션 실패",
|
||||
"wchange32": "QORT 잔액을 가져오지 못했습니다. 다시 해봐!",
|
||||
"wchange33": "가져오지 못했습니다.",
|
||||
"wchange34": "잔액. 다시 해봐!",
|
||||
"wchange35": "유형",
|
||||
"wchange36": "수수료",
|
||||
"wchange37": "총액",
|
||||
"wchange38": "주소에 아직 트랜잭션이 없습니다.",
|
||||
"wchange39": "주소를 복사할 수 없습니다.",
|
||||
"wchange40": "지불",
|
||||
"wchange41": "상황",
|
||||
"wchange42": "확인",
|
||||
"wchange43": "확인될 때까지 거래가 표시되지 않습니다. 기다려 주십시오.",
|
||||
"wchange44": "다시 시도하십시오..."
|
||||
},
|
||||
"tradepage": {
|
||||
"tchange1": "무역 포털",
|
||||
"tchange2": "거래 쌍 선택",
|
||||
"tchange3": "과거 시장 거래",
|
||||
"tchange4": "내 거래 내역",
|
||||
"tchange5": "오픈마켓 판매 주문",
|
||||
"tchange6": "내 주문",
|
||||
"tchange7": "정체된 주문",
|
||||
"tchange8": "양",
|
||||
"tchange9": "가격",
|
||||
"tchange10": "총",
|
||||
"tchange11": "날짜",
|
||||
"tchange12": "상태",
|
||||
"tchange13": "판매자",
|
||||
"tchange14": "각 가격",
|
||||
"tchange15": "양식 지우기",
|
||||
"tchange16": "당신은 가지고 있다",
|
||||
"tchange17": "액션",
|
||||
"tchange18": "매수",
|
||||
"tchange19": "매도",
|
||||
"tchange20": "거래를 만들지 못했습니다. 다시 해봐!",
|
||||
"tchange21": "거래를 만들지 못했습니다. 오류 코드",
|
||||
"tchange22": "자금 부족!",
|
||||
"tchange23": "구매 요청 성공!",
|
||||
"tchange24": "기존 구매 요청!",
|
||||
"tchange25": "거래를 만들지 못했습니다. 오류 코드",
|
||||
"tchange26": "거래 취소 중!",
|
||||
"tchange27": "거래를 취소하지 못했습니다. 다시 해봐!",
|
||||
"tchange28": "거래를 취소하지 못했습니다. 오류 코드",
|
||||
"tchange29": "취소하다",
|
||||
"tchange30": "밸런스를 가져오지 못했습니다. 다시 시도하십시오.!",
|
||||
"tchange31": "판매된",
|
||||
"tchange32": "구매된"
|
||||
},
|
||||
"rewardsharepage": {
|
||||
"rchange1": "보상 공유",
|
||||
"rchange2": "보상 공유 생성",
|
||||
"rchange3": "이 계정과 관련된 보상 공유",
|
||||
"rchange4": "민팅 계정",
|
||||
"rchange5": "공유 비율",
|
||||
"rchange6": "받는사람",
|
||||
"rchange7": "액션",
|
||||
"rchange8": "유형",
|
||||
"rchange9": "레벨 1 - 4는 자체 공유를 생성할 수 있으며 레벨 5 이상은 보상 공유를 생성할 수 있습니다.",
|
||||
"rchange10": "수신자 공개 키",
|
||||
"rchange11": "보상공유율",
|
||||
"rchange12": "맛있는 거 하기",
|
||||
"rchange13": "민팅계정 추가",
|
||||
"rchange14": "추가",
|
||||
"rchange15": "계정이 보상 공유에 관여하지 않습니다.",
|
||||
"rchange16": "자체 보상 공유",
|
||||
"rchange17": "제거",
|
||||
"rchange18": "보상 공유를 여러 개 만들 수 없습니다!",
|
||||
"rchange19": "여러 개의 자체 공유를 만들 수 없습니다!",
|
||||
"rchange20": "레벨에서 리워드 공유를 생성할 수 없습니다!",
|
||||
"rchange21": "보상 공유 성공!",
|
||||
"rchange22": "보상 공유가 제거되었습니다!"
|
||||
},
|
||||
"registernamepage": {
|
||||
"nchange1": "이름 등록",
|
||||
"nchange2": "이름 등록",
|
||||
"nchange3": "등록된 이름",
|
||||
"nchange4": "아바타",
|
||||
"nchange5": "이름",
|
||||
"nchange6": "소유자",
|
||||
"nchange7": "액션",
|
||||
"nchange8": "이 계정에 등록된 이름이 없습니다!",
|
||||
"nchange9": "이름을 등록하세요!",
|
||||
"nchange10": "설명(선택사항)",
|
||||
"nchange11": "맛있는 거 하기",
|
||||
"nchange12": "이름 등록",
|
||||
"nchange13": "현재 이름 등록 수수료는",
|
||||
"nchange14": "등록",
|
||||
"nchange15": "아바타 설정",
|
||||
"nchange16": "핵심 업데이트 필요",
|
||||
"nchange17": "이름이 이미 있습니다!",
|
||||
"nchange18": "이름 등록 성공!"
|
||||
},
|
||||
"websitespage": {
|
||||
"schange1": "웹 사이트 찾아보기",
|
||||
"schange2": "웹 사이트 팔로우",
|
||||
"schange3": "차단된 웹 사이트",
|
||||
"schange4": "웹 사이트 검색",
|
||||
"schange5": "아바타",
|
||||
"schange6": "세부 사항",
|
||||
"schange7": "게시자",
|
||||
"schange8": "액션",
|
||||
"schange9": "웹 사이트",
|
||||
"schange10": "사용 가능한 웹 사이트 없음",
|
||||
"schange11": "팔로우한 웹 사이트",
|
||||
"schange12": "팔로우된 웹 사이트",
|
||||
"schange13": "웹 사이트를 팔로우하지 않습니다.",
|
||||
"schange14": "차단된 웹 사이트",
|
||||
"schange15": "차단된 웹 사이트",
|
||||
"schange16": "웹 사이트를 차단하지 않았습니다.",
|
||||
"schange17": "이름을 찾을 수 없습니다!",
|
||||
"schange18": "릴레이 모드가 활성화되었습니다. 즉, 피어가 암호화된 데이터를 요청할 때 노드가 네트워크를 통해 암호화된 데이터를 전송하는 데 도움이 됩니다. 설정을 통해 제외할 수 있습니다.",
|
||||
"schange19": "안",
|
||||
"schange20": "릴레이 모드가 비활성화되었습니다. 설정을 통해 활성화할 수 있습니다.",
|
||||
"schange21": "웹 사이트 게시",
|
||||
"schange22": "이 등록된 이름을 따르는 동안 오류가 발생했습니다. 다시 시도하십시오!",
|
||||
"schange23": "이 등록된 이름의 팔로우를 해제하는 동안 오류가 발생했습니다. 다시 시도하십시오!",
|
||||
"schange24": "이 등록된 이름을 차단하는 동안 오류가 발생했습니다. 다시 시도하십시오!",
|
||||
"schange25": "이 등록된 이름의 차단을 해제하는 동안 오류가 발생했습니다. 다시 시도하십시오!",
|
||||
"schange26": "분류되지 않음",
|
||||
"schange27": "크기",
|
||||
"schange28": "상태",
|
||||
"schange29": "팔로우",
|
||||
"schange30": "언팔로우",
|
||||
"schange31": "차단",
|
||||
"schange32": "차단 해제",
|
||||
"schange33": "검색할 이름",
|
||||
"schange34": "이름은 비워 둘 수 없습니다!",
|
||||
"schange35": "검색"
|
||||
},
|
||||
"publishpage": {
|
||||
"pchange1": "발표",
|
||||
"pchange2": "업데이트",
|
||||
"pchange3": "참고: 네트워크의 피어가 보다 쉽게 액세스할 수 있도록 데이터를 호스팅하기 전에 포트 포워딩을 설정하는 것이 좋습니다.",
|
||||
"pchange4": "이름 설정",
|
||||
"pchange5": "제목",
|
||||
"pchange6": "묘사",
|
||||
"pchange7": "카테고리 선택",
|
||||
"pchange8": "테그",
|
||||
"pchange9": "서비스",
|
||||
"pchange10": "식별자",
|
||||
"pchange11": "발표",
|
||||
"pchange12": "정적 내용이 포함된 zip 파일 선택",
|
||||
"pchange13": "정적 파일의 로컬 경로",
|
||||
"pchange14": "데이터를 게시할 등록된 이름을 선택하십시오.",
|
||||
"pchange15": "호스트할 파일을 선택하십시오.",
|
||||
"pchange16": "호스트할 zip 파일을 선택하십시오.",
|
||||
"pchange17": "정적 내용이 포함된 디렉터리 경로를 입력하십시오.",
|
||||
"pchange18": "서비스 이름을 입력하십시오.",
|
||||
"pchange19": "데이터 처리 중... 시간이 좀 걸릴 수 있습니다..",
|
||||
"pchange20": "에러:",
|
||||
"pchange21": "데이터를 게시할 때 내부 서버 오류",
|
||||
"pchange22": "작업 증명 계산 중... 시간이 좀 걸릴 수 있어...",
|
||||
"pchange23": "트랜잭션이 성공했습니다!",
|
||||
"pchange24": "트랜잭션 서명 및 처리 불가",
|
||||
"pchange25": "파일 선택"
|
||||
},
|
||||
"browserpage": {
|
||||
"bchange1": "앞으로",
|
||||
"bchange2": "새로고침",
|
||||
"bchange3": "다시 목록으로",
|
||||
"bchange4": "삭제",
|
||||
"bchange5": "노드에서",
|
||||
"bchange6": "귀하의 브라우저는 iframe을 지원하지 않습니다",
|
||||
"bchange7": "팔로우",
|
||||
"bchange8": "언팔로우",
|
||||
"bchange9": "차단",
|
||||
"bchange10": "차단 해제",
|
||||
"bchange11": "이 등록된 이름을 따르는 동안 오류가 발생했습니다. 다시 시도하십시오!",
|
||||
"bchange12": "이 등록된 이름의 팔로우를 해제하는 동안 오류가 발생했습니다. 다시 시도하십시오!",
|
||||
"bchange13": "이 등록된 이름을 차단하는 동안 오류가 발생했습니다. 다시 시도하십시오!",
|
||||
"bchange14": "이 등록된 이름의 차단을 해제하는 동안 오류가 발생했습니다. 다시 시도하십시오!",
|
||||
"bchange15": "다음 이름에서 데이터를 삭제할 수 없습니다. 먼저 팔로우를 해제하십시오.",
|
||||
"bchange16": "이 리소스를 삭제하는 동안 오류가 발생했습니다. 다시 시도하십시오!"
|
||||
},
|
||||
"datapage": {
|
||||
"dchange1": "데이터 관리",
|
||||
"dchange2": "이 노드에서 호스트된 데이터 검색",
|
||||
"dchange3": "검색할 데이터",
|
||||
"dchange4": "검색",
|
||||
"dchange5": "등록된 이름",
|
||||
"dchange6": "서비스",
|
||||
"dchange7": "식별자",
|
||||
"dchange8": "액션",
|
||||
"dchange9": "이 노드에서 호스팅하는 데이터",
|
||||
"dchange10": "데이터 이름은 비워 둘 수 없습니다!",
|
||||
"dchange11": "데이터를 찾을 수 없습니다!",
|
||||
"dchange12": "노드에서 호스트된 데이터 목록을 가져올 수 없습니다.",
|
||||
"dchange13": "이 노드에서 데이터를 호스팅하지 않습니다.",
|
||||
"dchange14": "언팔로우",
|
||||
"dchange15": "삭제",
|
||||
"dchange16": "차단",
|
||||
"dchange17": "차단 해제",
|
||||
"dchange18": "이 등록된 이름을 차단하는 동안 오류가 발생했습니다. 다시 시도하십시오!",
|
||||
"dchange19": "이 등록된 이름의 팔로우를 해제하는 동안 오류가 발생했습니다. 다시 시도하십시오!",
|
||||
"dchange20": "이 등록된 이름의 차단을 해제하는 동안 오류가 발생했습니다. 다시 시도하십시오!",
|
||||
"dchange21": "이 리소스를 삭제하는 동안 오류가 발생했습니다. 다시 시도하십시오!"
|
||||
},
|
||||
"chatpage": {
|
||||
"cchange1": "새 개인 메시지",
|
||||
"cchange2": "로딩중",
|
||||
"cchange3": "차단된 사용자",
|
||||
"cchange4": "새 메시지",
|
||||
"cchange5": "(아래로 스크롤하려면 클릭하십시오.)",
|
||||
"cchange6": "개인 메시지를 보낼 대화 상대방의 이름 또는 주소를 입력하십시오!",
|
||||
"cchange7": "이름/주소",
|
||||
"cchange8": "메시지...",
|
||||
"cchange9": "전송",
|
||||
"cchange10": "차단된 사용자 목록",
|
||||
"cchange11": "이름",
|
||||
"cchange12": "소유자",
|
||||
"cchange13": "액션",
|
||||
"cchange14": "이 계정은 사용자를 차단하지 않았습니다.",
|
||||
"cchange15": "등록된 이름 없음",
|
||||
"cchange16": "이 사용자의 차단을 해제했습니다..",
|
||||
"cchange17": "이 사용자의 차단을 해제하는 동안 오류가 발생했습니다. 다시 시도하십시오!",
|
||||
"cchange18": "차단 해제",
|
||||
"cchange19": "이름/주소가 잘못되었습니다. 이름/주소를 확인하고 다시 시도하십시오...",
|
||||
"cchange20": "메시지가 성공적으로 전송되었습니다!",
|
||||
"cchange21": "전송에 실패했습니다. 다시 시도하십시오..",
|
||||
"cchange22": "메시지 로드 중...",
|
||||
"cchange23": "메시지의 암호를 해독할 수 없습니다!",
|
||||
"cchange24": "메시지당 최대 글자 수는 255자입니다."
|
||||
},
|
||||
"welcomepage": {
|
||||
"wcchange1": "Q-Chat에 오신 것을 환영합니다.",
|
||||
"wcchange2": "새 개인 메시지",
|
||||
"wcchange3": "개인 메시지를 보낼 대화 상대방의 이름 또는 주소를 입력하십시오!",
|
||||
"wcchange4": "이름/주소",
|
||||
"wcchange5": "메시지...",
|
||||
"wcchange6": "전송",
|
||||
"wcchange7": "이름/주소가 잘못되었습니다. 이름/주소를 확인하고 다시 시도하십시오...",
|
||||
"wcchange8": "메시지가 성공적으로 전송되었습니다!",
|
||||
"wcchange9": "전송에 실패했습니다. 다시 시도하십시오..."
|
||||
},
|
||||
"blockpage": {
|
||||
"bcchange1": "사용자 차단",
|
||||
"bcchange2": "이 사용자를 성공적으로 차단했습니다!",
|
||||
"bcchange3": "이 사용자를 차단하는 동안 오류가 발생했습니다. 다시 시도하십시오!",
|
||||
"bcchange4": "등록된 이름 없음",
|
||||
"bcchange5": "사용자 요청 차단",
|
||||
"bcchange6": "이 사용자를 차단하시겠습니까?",
|
||||
"bcchange7": "메뉴",
|
||||
"bcchange8": "주소 복사",
|
||||
"bcchange9": "개인 메시지"
|
||||
},
|
||||
"grouppage": {
|
||||
"gchange1": "Qortal 그룹",
|
||||
"gchange2": "그룹 생성",
|
||||
"gchange3": "가입한 그룹",
|
||||
"gchange4": "그룹 이름",
|
||||
"gchange5": "묘사",
|
||||
"gchange6": "역할.",
|
||||
"gchange7": "액션",
|
||||
"gchange8": "그룹의 구성원이 아닙니다.!",
|
||||
"gchange9": "공용 그룹",
|
||||
"gchange10": "소유자",
|
||||
"gchange11": "사용 가능한 열린 공용 그룹이 없습니다!",
|
||||
"gchange12": "새 그룹 만들기",
|
||||
"gchange13": "그룹 유형",
|
||||
"gchange14": "이 필드는 필수입니다.",
|
||||
"gchange15": "옵션 선택",
|
||||
"gchange16": "공공의",
|
||||
"gchange17": "프라이빗",
|
||||
"gchange18": "그룹 승인 임계값(트랜잭션을 승인해야 하는 관리자 수/백분율):",
|
||||
"gchange19": "없음.",
|
||||
"gchange20": "하나.",
|
||||
"gchange21": "그룹 트랜잭션 승인을 위한 최소 블록 지연:",
|
||||
"gchange22": "분",
|
||||
"gchange23": "시간",
|
||||
"gchange24": "몇 시간",
|
||||
"gchange25": "날",
|
||||
"gchange26": "날들",
|
||||
"gchange27": "그룹 트랜잭션 승인에 대한 최대 블록 지연:",
|
||||
"gchange28": "그룹 만들기",
|
||||
"gchange29": "그룹 만들기",
|
||||
"gchange30": "그룹 가입 요청",
|
||||
"gchange31": "만든 날짜",
|
||||
"gchange32": "업데이트된 날짜",
|
||||
"gchange33": "가입",
|
||||
"gchange34": "그룹 가입",
|
||||
"gchange35": "그룹 요청 탈퇴",
|
||||
"gchange36": "떠나는",
|
||||
"gchange37": "그룹 탈퇴",
|
||||
"gchange38": "그룹 소유자 관리:",
|
||||
"gchange39": "그룹 관리자 관리:",
|
||||
"gchange40": "그룹 관리",
|
||||
"gchange41": "그룹을 만들었습니다!",
|
||||
"gchange42": "잘못된 그룹 이름",
|
||||
"gchange43": "잘못된 그룹 설명",
|
||||
"gchange44": "그룹 유형 선택",
|
||||
"gchange45": "그룹 승인 임계값 선택",
|
||||
"gchange46": "그룹 트랜잭션 승인을 위한 최소 블록 지연 선택",
|
||||
"gchange47": "그룹 트랜잭션 승인을 위한 최대 블록 지연 선택",
|
||||
"gchange48": "그룹 가입 요청이 성공적으로 전송되었습니다!",
|
||||
"gchange49": "그룹 요청을 성공적으로 보냈습니다!",
|
||||
"gchange50": "떠나기",
|
||||
"gchange51": "가입",
|
||||
"gchange52": "관리자",
|
||||
"gchange53": "회원",
|
||||
"gchange54": "회원들"
|
||||
},
|
||||
"puzzlepage": {
|
||||
"pchange1": "퍼즐",
|
||||
"pchange2": "보상",
|
||||
"pchange3": "에 의해 해결된.",
|
||||
"pchange4": "이름.",
|
||||
"pchange5": "묘사",
|
||||
"pchange6": "단서 / 답",
|
||||
"pchange7": "액션",
|
||||
"pchange8": "맞혀봐.",
|
||||
"pchange9": "이 퍼즐을 풀 수 있는 추측을 입력하고 승리하십시오.",
|
||||
"pchange10": "추측은 43자 또는 44자여야 합니다.",
|
||||
"pchange11": "아니요",
|
||||
"pchange12": "0(영), I(상위 i), O(상위 o) 또는 l(하위 L)을 포함합니다.",
|
||||
"pchange13": "당신의 추측",
|
||||
"pchange14": "추측 확인 중...",
|
||||
"pchange15": "제출",
|
||||
"pchange16": "틀렸어요!",
|
||||
"pchange17": "리워드 요청 제출 - 리워드를 위해 지갑을 확인하세요!"
|
||||
},
|
||||
"nodepage": {
|
||||
"nchange1": "다음을 위한 노드 관리:",
|
||||
"nchange2": "노드가 온라인으로 전환된 시간:",
|
||||
"nchange3": "노드의 민팅 계정",
|
||||
"nchange4": "민팅계정추가",
|
||||
"nchange5": "자신의 계정으로 민팅하려면 자신에게 리워드 공유 거래(리워드 공유 비율이 0으로 설정됨)를 만든 다음 리워드 공유 키가 제공하는 리워드 공유 키로 마이트를 만들어야 합니다.",
|
||||
"nchange6": "리워드 공유 키",
|
||||
"nchange7": "민팅계정추가",
|
||||
"nchange8": "추가",
|
||||
"nchange9": "민팅계정",
|
||||
"nchange10": "수취인 계정",
|
||||
"nchange11": "액션",
|
||||
"nchange12": "삭제",
|
||||
"nchange13": "이 노드에 대한 민팅 계정을 찾을 수 없습니다.",
|
||||
"nchange14": "이 노드에 연결된 피어",
|
||||
"nchange15": "피어 추가",
|
||||
"nchange16": "추가할 피어 주소를 아래에 입력하십시오.",
|
||||
"nchange17": "피어 주소",
|
||||
"nchange18": "주소",
|
||||
"nchange19": "마지막 높이",
|
||||
"nchange20": "빌드 버전",
|
||||
"nchange21": "연결 대상",
|
||||
"nchange22": "액션",
|
||||
"nchange23": "강제 동기화",
|
||||
"nchange24": "노드에 연결된 피어가 없습니다.",
|
||||
"nchange25": "피어와의 동기화를 시작하는 중: ",
|
||||
"nchange26": "피어를 제거했습니다. ",
|
||||
"nchange27": "민팅 노드가 성공적으로 추가되었습니다!",
|
||||
"nchange28": "민팅 노드를 추가하지 못했습니다!",
|
||||
"nchange29": "민팅 계정이 제거되었습니다!",
|
||||
"nchange30": "민팅 계정을 제거하지 못했습니다!",
|
||||
"nchange31": "노드 중지",
|
||||
"nchange32": "중지 요청을 성공적으로 전송했습니다.!"
|
||||
},
|
||||
"transpage": {
|
||||
"tchange1": "거래요청",
|
||||
"tchange2": " 감소",
|
||||
"tchange3": "확인",
|
||||
"tchange4": "로",
|
||||
"tchange5": "양"
|
||||
},
|
||||
"apipage": {
|
||||
"achange1": "API 키 추가",
|
||||
"achange2": "API 키",
|
||||
"achange3": "이 노드에 대한 API 키를 입력하십시오. apikey라는 파일에서 찾을 수 있습니다.core가 설치된 디렉터리에서 txt를 클릭합니다. 또는 기능이 저하된 코어를 사용하려면 취소를 클릭합니다.",
|
||||
"achange4": "취소",
|
||||
"achange5": "추가",
|
||||
"achange6": "API 키를 추가했습니다.",
|
||||
"achange7": "API 키가 잘못됨, API 키가 추가되지 않음"
|
||||
},
|
||||
"transactions": {
|
||||
"amount": "양",
|
||||
"to": "로",
|
||||
"declined": "사용자가 트랜잭션을 거부했습니다!",
|
||||
"namedialog1": "아래 이름을 등록하고 있습니다.",
|
||||
"namedialog2": "확인을 누르면 이름이 등록됩니다!",
|
||||
"groupdialog1": "아래 그룹에 가입할 것을 요청합니다.",
|
||||
"groupdialog2": "확인을 누르면 그룹 가입 요청이 전송됩니다!",
|
||||
"groupdialog3": "아래 그룹에서 나가기를 요청합니다:",
|
||||
"groupdialog4": "확인을 누르면 그룹 탈퇴 요청이 전송됩니다!",
|
||||
"groupdialog5": "아래 그룹을 만들도록 요청했습니다.",
|
||||
"groupdialog6": "확인을 누르면 그룹 생성 요청이 전송됩니다!",
|
||||
"rewarddialog1": "보상 공유 거래, 공유를 생성하시겠습니까?",
|
||||
"rewarddialog2": "당신의 민팅 보상의",
|
||||
"rewarddialog3": "만약 그렇다면, 당신은 민팅하기 위해 아래의 키를 저장해야 할 것이다. 사용자를 대신하여 민팅할 수 있도록 모든 노드에 제공할 수 있습니다.",
|
||||
"rewarddialog4": "확인을 누르면 보상 공유가 생성되지만, 계정과 연동하려면 여전히 노드에 위의 키를 제공해야 합니다..",
|
||||
"rewarddialog5": "계정과 연결된 보상 공유 트랜잭션을 제거하는 중입니다.",
|
||||
"rewarddialog6": "확인을 누르면 보상 공유가 제거되고 조폐 키가 유효하지 않게 됩니다."
|
||||
}
|
||||
}
|
@ -16,7 +16,9 @@
|
||||
"serbian": "Serbisk",
|
||||
"italian": "Italiensk",
|
||||
"russian": "Russisk",
|
||||
"norwegian": "Norsk"
|
||||
"norwegian": "Norsk",
|
||||
"romanian": "Rumensk",
|
||||
"korean": "Koreansk"
|
||||
},
|
||||
"sidemenu": {
|
||||
"mintingdetails": "MINTEDETALJER",
|
||||
|
@ -16,7 +16,9 @@
|
||||
"serbian": "Serbski",
|
||||
"italian": "Włoski",
|
||||
"russian": "Rosyjski",
|
||||
"norwegian": "Norweski"
|
||||
"norwegian": "Norweski",
|
||||
"romanian": "Rumuński",
|
||||
"korean": "Koreański"
|
||||
},
|
||||
"sidemenu": {
|
||||
"mintingdetails": "SZCZEGÓŁY MINTOWANIA",
|
||||
|
@ -16,7 +16,9 @@
|
||||
"serbian": "Sérvio",
|
||||
"italian": "Italiano",
|
||||
"russian": "Russo",
|
||||
"norwegian": "Norueguês"
|
||||
"norwegian": "Norueguês",
|
||||
"romanian": "Romeno",
|
||||
"korean": "Coreano"
|
||||
},
|
||||
"sidemenu": {
|
||||
"mintingdetails": "DETALHES DA MINERAÇÃO",
|
||||
|
597
qortal-ui-core/language/ro.json
Normal file
597
qortal-ui-core/language/ro.json
Normal file
@ -0,0 +1,597 @@
|
||||
{
|
||||
"selectmenu": {
|
||||
"selectlanguage": "Selecteaza limba",
|
||||
"languageflag": "ro",
|
||||
"english": "Engleza",
|
||||
"chinese1": "Chineza (simplificata)",
|
||||
"chinese2": "Chineza (traditionala)",
|
||||
"german": "Germana",
|
||||
"french": "Franceza",
|
||||
"polish": "Poloneza",
|
||||
"spanish": "Spaniola",
|
||||
"hindi": "Hindi",
|
||||
"croatian": "Croata",
|
||||
"portuguese": "Portugheza",
|
||||
"hungarian": "Maghiara",
|
||||
"serbian": "Sarba",
|
||||
"italian": "Italiana",
|
||||
"russian": "Rus",
|
||||
"norwegian": "Norvegiana",
|
||||
"romanian": "Romana",
|
||||
"korean": "Coreeana"
|
||||
},
|
||||
"sidemenu": {
|
||||
"mintingdetails": "DETALII RECOMPENSARE MINTING)",
|
||||
"wallets": "PORTOFELE",
|
||||
"tradeportal": "PORTAL TRANZACTIONARE",
|
||||
"rewardshare": "COTA RECOMPENSA",
|
||||
"nameregistration": "INREGISTRARE NUME",
|
||||
"websites": "WEBSITE-URI",
|
||||
"datamanagement": "GESTIONARE DATE",
|
||||
"qchat": "Q-CHAT",
|
||||
"groupmanagement": "GESTIONARE GRUP",
|
||||
"puzzles": "PUZZLE-URI",
|
||||
"nodemanagement": "GESTIONARE NOD"
|
||||
},
|
||||
"login": {
|
||||
"login": "Login",
|
||||
"createaccount": "Creare Cont",
|
||||
"name": "Nume",
|
||||
"address": "Adresa",
|
||||
"password": "Parola",
|
||||
"youraccounts": "Conturile tale",
|
||||
"clickto": "Fa click pe Contul tau pentru a te conecta cu el",
|
||||
"needcreate": "Trebuie sa iti creezi sau sa salvezi un cont inainte de a te conecta!",
|
||||
"upload": "Urca copia de siguranta qortal",
|
||||
"howlogin": "Cum doresti sa te conectezi?",
|
||||
"seed": "frazainitiala",
|
||||
"seedphrase": "frazainitiala",
|
||||
"saved": "Cont salvat",
|
||||
"qora": "Adresa initiala Qora",
|
||||
"backup": "Copia de siguranta a portofelului Qortal",
|
||||
"decrypt": "Decriptare copie de siguranta",
|
||||
"save": "Salveaza in acest browser.",
|
||||
"prepare": "Se pregateste Contul tau",
|
||||
"areyousure": "Sunteti sigur ca doriti sa eliminati acest portofel din portofelele salvate?",
|
||||
"error1": "Backup-ul trebuie sa fie JSON valid",
|
||||
"error2": "Optiunea de conectare nu este selectata",
|
||||
"createwelcome": "Bine ai venit la Qortal, vei descoperi ca este similar cu un joc RPG, tu, ca minter in reteaua Qortal (daca alegi sa devii unul), vei avea sansa de a-ti creste nivelul contului tau, oferindu-ti deopotiva o recompensa mai mare din blocul QORT, cat si o influenta mai mare asupra retelei in ceea ce priveste votul asupra deciziilor pentru platforma.",
|
||||
"createa": "A",
|
||||
"click": "Da click pentru a vedea fraza initiala",
|
||||
"confirmpass": "Confirma Parola",
|
||||
"willbe": "va fi generata aleatoriu in fundal. Aceasta este utilizata ca generator de cheie privata pentru contul tau blockchain din Qortal.",
|
||||
"clicknext": "Creaza-ti contul Qortal apasand butonul INAINTE.",
|
||||
"ready": "Contul dvs. este acum gata sa fie creat. Acesta va fi salvat in acest browser. Daca nu doriti ca noul dvs. cont sa fie salvat in browserul dvs., puteti debifa caseta de mai jos. Veti putea in continuare sa va conectati cu noul dvs. cont (dupa ce va deconectati), utilizand fisierul de backup al portofelului pe care TREBUIE sa il descarcati dupa ce va creati contul.",
|
||||
"welmessage": "Bine ai venit in Qortal",
|
||||
"pleaseenter": "Te rog introdu o parola!",
|
||||
"notmatch": "Parola nu corespunde!",
|
||||
"lessthen8": "Parola ta are mai putin de 8 caractere! Acest lucru nu este recomandat. Poti continua sa ignori acest avertisment.",
|
||||
"entername": "Te rog introdu un Nume!",
|
||||
"downloaded": "Copia de siguranta a portofelului este descarcata!",
|
||||
"loading": "Se incarca. Va rugam asteptati...",
|
||||
"createdseed": "Fraza initiala personala creata",
|
||||
"saveseed": "Salveaza fraza initiala",
|
||||
"savein": "Salveaza in browser",
|
||||
"backup2": "Acest fisier este SINGURA modalitate de a-ti accesa contul pe un sistem care nu il are salvat in aplicatie/browser. ASIGURA-TE CA FACI O COPIE DE REZERVA A ACESTUI FISIER IN MAI MULTE LOCURI. Fisierul este criptat foarte sigur si decriptat cu parola locala pe care ai creat-o in pasul anterior. Il poti salva oriunde in siguranta, dar asigura-te ca faci acest lucru in mai multe locatii.",
|
||||
"savewallet": "Salveaza copia de siguranta a Portofelului",
|
||||
"created1": "Contul tau este acum creat",
|
||||
"created2": "si va fi salvat in acest browser.",
|
||||
"downloadbackup": "Descarca copia de siguranta a Portofelului"
|
||||
},
|
||||
"logout": {
|
||||
"logout": "DECONECTARE",
|
||||
"confirmlogout": "Esti sigur ca vrei sa te deconectezi?"
|
||||
},
|
||||
"fragfile": {
|
||||
"selectfile": "Selecteaza fisier",
|
||||
"dragfile": "Trage si elibereaza fisierul de backup aici"
|
||||
},
|
||||
"settings": {
|
||||
"generalinfo": "Informatii generale despre cont",
|
||||
"address": "Adresa",
|
||||
"publickey": "Cheie publica",
|
||||
"settings": "Setari",
|
||||
"account": "Cont",
|
||||
"security": "Securitate",
|
||||
"notifications": "Notificari",
|
||||
"accountsecurity": "Securitatea contului",
|
||||
"password": "Parola",
|
||||
"download": "Descarca copia de siguranta",
|
||||
"choose": "Va rugam sa alegeti o parola cu care sa va criptati copia de rezerva. (Aceasta poate fi aceeasi cu cea cu care v-ati logat sau diferita)",
|
||||
"block": "Blocare notificari (Disponibil in curand...)",
|
||||
"playsound": "Redare sunet",
|
||||
"shownotifications": "Arata notificarile",
|
||||
"nodeurl": "Adresa url a nodului",
|
||||
"nodehint": "Selectati un nod din lista implicita de noduri de mai sus sau adaugati un nod personalizat la lista de mai sus facand clic pe butonul de mai jos",
|
||||
"addcustomnode": "Adauga nod personalizat",
|
||||
"addandsave": "Adauga Si Salveaza",
|
||||
"protocol": "Protocol",
|
||||
"domain": "Domeniu",
|
||||
"port": "Port"
|
||||
},
|
||||
"appinfo": {
|
||||
"blockheight": "Dimensiunea blocului",
|
||||
"uiversion": "Versiunea UI",
|
||||
"coreversion": "Versiune Program",
|
||||
"minting": "Minting (Producere a monedei)",
|
||||
"synchronizing": "Se sincronizeaza"
|
||||
},
|
||||
"walletprofile": {
|
||||
"minterlevel": "Nivelul Minter-ului",
|
||||
"blocksminted": "Blocuri descoperite"
|
||||
},
|
||||
"general": {
|
||||
"yes": "Da",
|
||||
"no": "Nu",
|
||||
"confirm": "Confirma",
|
||||
"decline": "Respinge",
|
||||
"open": "Deschis",
|
||||
"close": "Inchis",
|
||||
"back": "Inapoi",
|
||||
"next": "Inainte",
|
||||
"create": "Creaza",
|
||||
"continue": "Continua",
|
||||
"save": "Salveza"
|
||||
},
|
||||
"mintingpage": {
|
||||
"mchange1": "Detalii generale de producere a monedei",
|
||||
"mchange2": "Statisticile Blockchain-ului",
|
||||
"mchange3": "Timp mediu al Blocului Qortal",
|
||||
"mchange4": "Media de Blocuri pe zi",
|
||||
"mchange5": "Media de Qort Creat pe Zi",
|
||||
"mchange6": "Detalii ale Contului de Producere a monedei",
|
||||
"mchange7": "Nu esti Minter",
|
||||
"mchange8": "Producere moneda (minting)",
|
||||
"mchange9": "Nu Produci Moneda",
|
||||
"mchange10": "Activare Detalii Cont",
|
||||
"mchange11": "Nu este activat",
|
||||
"mchange12": "Activeaza-ti contul",
|
||||
"mchange13": "Introducere",
|
||||
"mchange14": "Pentru a va activa contul, trebuie sa aiba loc o tranzactie DE IESIRE. Inregistrarea numelui este cea mai frecventa metoda. Puteti cere cuiva din Q-Chat sa va trimita o cantitate mica de QORT pentru a va putea activa contul, sau puteti cumpara QORT in cadrul Portalului de trading, apoi puteti efectua o tranzactie DE IESIRE de orice fel si va puteti securiza cheia publica pe blockchain. Pana cand nu faceti acest lucru, cheia dvs. publica este cunoscuta doar de dvs., in interfata dvs. de utilizator, si nimeni altcineva nu va poate extrage cheia publica din lantul de blocuri.",
|
||||
"mchange15": "Stare Curenta",
|
||||
"mchange16": "Nivel Actual",
|
||||
"mchange17": "Blocuri pana la Nivelul Urmator",
|
||||
"mchange18": "Daca vei continua sa produci moneda 24/7 vei ajunge la nivelul",
|
||||
"mchange19": "Informatii despre cota de recompensa in producerea monedei",
|
||||
"mchange20": "Nivelul actual",
|
||||
"mchange21": "Numarul Total de Producatori de Moneda in acest nivel",
|
||||
"mchange22": "Cota-parte pe bloc la acest nivel",
|
||||
"mchange23": "Recompensa Estimata per Bloc",
|
||||
"mchange24": "Recompensa Estimata pe zi",
|
||||
"mchange25": "Secunde",
|
||||
"mchange26": "Blocuri",
|
||||
"mchange27": "Nivel",
|
||||
"mchange28": "Nivel",
|
||||
"mchange29": "Zile",
|
||||
"mchange30": "Producatori de Moneda",
|
||||
"mchange31": "Apasa pentru Ajutor",
|
||||
"mchange32": "Devino Producator de Moneda",
|
||||
"mchange33": "Introducere",
|
||||
"mchange34": "In Qortal, pentru a deveni un productor de moneda si a incepe sa castigi recompense QORT odata cu cresterea nivelului de productor de moneda, trebuie mai intai sa devii <20>sponsorizat<61>. Un sponsor in Qortal este orice alt productor de moneda de nivel 5 sau mai mare, sau un Fondator Qortal. Veti obtine o cheie de sponsorizare de la sponsor si veti folosi acea cheie pentru a ajunge la nivelul 1. Odata ce ati ajuns la nivelul 1, veti putea sa va creati propria cheie de producere a monedei si sa incepeti sa castigati recompense pentru a ajuta la securizarea Qortal Blockchain.",
|
||||
"mchange35": "Sponsorizare",
|
||||
"mchange36": "Sponsorul dvs. va va emite o <20>Cheie de sponsorizare<72> pe care o veti folosi pentru a o adauga la nodul dvs. si pentru a incepe sa produceti moneda (fara recompense pana la atingerea nivelului 1.) Odata ce ati atins nivelul 1, va creati/atribuiti propria <20>Cheie de producere a monedei<65> si incepeti sa castigati recompense. Aveti XXXX blocuri ramase in perioada de sponsorizare..",
|
||||
"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"
|
||||
},
|
||||
"walletpage": {
|
||||
"wchange1": "Se actualizeaza balanta ...",
|
||||
"wchange2": "Portofel Actual",
|
||||
"wchange3": "Copiati adresa portofelului in clipboard",
|
||||
"wchange4": "Adresa copiata in clipboard",
|
||||
"wchange5": "Detaliile Tranzactiei",
|
||||
"wchange6": "Tipul Tranzactiei",
|
||||
"wchange7": "AFARA",
|
||||
"wchange8": "INAUNTRU",
|
||||
"wchange9": "Expeditor",
|
||||
"wchange10": "Destinatar",
|
||||
"wchange11": "Suma",
|
||||
"wchange12": "Taxa de tranzactionare",
|
||||
"wchange13": "Bloc",
|
||||
"wchange14": "Timp",
|
||||
"wchange15": "Semnatura Tranzactiei",
|
||||
"wchange16": "Hash-ul Tranzactiei",
|
||||
"wchange17": "Trimite",
|
||||
"wchange18": "De la adresa",
|
||||
"wchange19": "Fonduri disponibile",
|
||||
"wchange20": "Catre (adresa sau nume)",
|
||||
"wchange21": "Taxa statica actuala:",
|
||||
"wchange22": "Portofele",
|
||||
"wchange23": "Catre (adresa)",
|
||||
"wchange24": "Taxa actuala pe octet",
|
||||
"wchange25": "Taxele mici pot duce la tranzactii lente sau neconfirmate.",
|
||||
"wchange26": "Fonduri insuficiente!",
|
||||
"wchange27": "Suma invalida!",
|
||||
"wchange28": "Destinatarul nu poate sa lipseasca!",
|
||||
"wchange29": "Destinatar invalid!",
|
||||
"wchange30": "Tranzactie incheiata cu succes!",
|
||||
"wchange31": "Tranzactie esuata",
|
||||
"wchange32": "Nu a reusit sa obtina soldul QORT. Incercati din nou!",
|
||||
"wchange33": "Nu s-a reusit sa se obtina",
|
||||
"wchange34": "Soldul. Incearca din nou!",
|
||||
"wchange35": "Tip",
|
||||
"wchange36": "Taxa",
|
||||
"wchange37": "Suma Totala",
|
||||
"wchange38": "Adresa nu are inca nicio tranzactie.",
|
||||
"wchange39": "Nu s-a putut copia adresa.",
|
||||
"wchange40": "PLATA",
|
||||
"wchange41": "Stare",
|
||||
"wchange42": "Confirmari",
|
||||
"wchange43": "Tranzactia nu va aparea pana ce nu este confirmata, ai rabdare...",
|
||||
"wchange44": "Te rog incearca din nou..."
|
||||
},
|
||||
"tradepage": {
|
||||
"tchange1": "Portal de Tranzactionare",
|
||||
"tchange2": "Selecteaza perechea de tranzactionare",
|
||||
"tchange3": "ISTORIC AL TRANZACTIILOR DE PE PIATA",
|
||||
"tchange4": "ISTORICUL TRANZACTIILOR MELE",
|
||||
"tchange5": "ORDINE DE VANZARE PE PIATA LIBERA",
|
||||
"tchange6": "ORDINELE MELE",
|
||||
"tchange7": "Oferte blocate",
|
||||
"tchange8": "Suma",
|
||||
"tchange9": "Pret",
|
||||
"tchange10": "Total",
|
||||
"tchange11": "Data",
|
||||
"tchange12": "Stare",
|
||||
"tchange13": "Vanzator",
|
||||
"tchange14": "Pret per bucata",
|
||||
"tchange15": "Serge datele",
|
||||
"tchange16": "Ai",
|
||||
"tchange17": "Actiune",
|
||||
"tchange18": "CUMPARA",
|
||||
"tchange19": "VINDE",
|
||||
"tchange20": "Nu s-a reusit creearea tranzactiei. Incearca din nou!",
|
||||
"tchange21": "Nu s-a reusit creearea tranzactiei. Cod de eroare",
|
||||
"tchange22": "Fonduri insuficiente!",
|
||||
"tchange23": "Cerere de cumparare efectuata cu succes!",
|
||||
"tchange24": "Cererea de cumparare exista!",
|
||||
"tchange25": "Nu s-a reusit creearea tranzactiei. Cod de eroare",
|
||||
"tchange26": "Proces de Anulare a Tranzactiei!",
|
||||
"tchange27": "A esuat procesul de anulare a tranzactiei. Incearca din nou!",
|
||||
"tchange28": "A esuat procesul de anulare a tranzactiei. Cod de eroare",
|
||||
"tchange29": "ANULARE",
|
||||
"tchange30": "Nu s-a reusit actualizarea soldului. Mai incearca odata!",
|
||||
"tchange31": "VANDUT",
|
||||
"tchange32": "CUMPARAT"
|
||||
},
|
||||
"rewardsharepage": {
|
||||
"rchange1": "Cote de recompensa",
|
||||
"rchange2": "Creare cota de recompensa",
|
||||
"rchange3": "Cota de recompensa implicata in acest cont",
|
||||
"rchange4": "Cont de producator de moneda (minting)",
|
||||
"rchange5": "Cota Procentuala",
|
||||
"rchange6": "Destinatar",
|
||||
"rchange7": "Actiune",
|
||||
"rchange8": "Tip",
|
||||
"rchange9": "Nivelurile 1 - 4 pot crea un cota personala de recompensare, iar nivelul 5 sau mai sus pot crea o Cota de Recompensare!",
|
||||
"rchange10": "Cheia publica a destinatarului",
|
||||
"rchange11": "Procentul cotei de recompensa",
|
||||
"rchange12": "Se produce ceva delicios",
|
||||
"rchange13": "Se adauga cheia pentru producator de moneda",
|
||||
"rchange14": "Adauga",
|
||||
"rchange15": "Contul nu este implicat in actiuni de recompensare",
|
||||
"rchange16": "Cota de recompensare personala",
|
||||
"rchange17": "Elimina",
|
||||
"rchange18": "Nu Se Pot Crea Mai Multe Chei De Recompensa!",
|
||||
"rchange19": "Nu Se Pot Crea Mai Multe Chei De Recompensare Proprii!",
|
||||
"rchange20": "NU POATE CREA COTA DE RECOMPENSA! la nivelul",
|
||||
"rchange21": "Cota de Recompensare Creata cu Success!",
|
||||
"rchange22": "Cota de Recompensare a Fost Eliminata cu Success!"
|
||||
},
|
||||
"registernamepage": {
|
||||
"nchange1": "Inregistrare Nume",
|
||||
"nchange2": "Inregistreaza Numele",
|
||||
"nchange3": "Nume Inregistrate",
|
||||
"nchange4": "Avatar",
|
||||
"nchange5": "Nume",
|
||||
"nchange6": "Detinator",
|
||||
"nchange7": "Actiune",
|
||||
"nchange8": "Nu exista nume inregistrate de acest cont!",
|
||||
"nchange9": "Inregistreaza un Nume!",
|
||||
"nchange10": "Descriere (optional)",
|
||||
"nchange11": "Se pregateste ceva delicios",
|
||||
"nchange12": "Se inregistreaza numele",
|
||||
"nchange13": "Taxa actuala de inregistrare a numelui este",
|
||||
"nchange14": "Inregistreaza",
|
||||
"nchange15": "Configureaza Avatar",
|
||||
"nchange16": "Este necesara actualizarea versiunii de baza",
|
||||
"nchange17": "Numele Exista deja!",
|
||||
"nchange18": "Inregistrarea numelui s-a realizat cu succes!"
|
||||
},
|
||||
"websitespage": {
|
||||
"schange1": "Navigati pe Site-uri Web",
|
||||
"schange2": "Site-uri Web urmarite",
|
||||
"schange3": "Site-uri Web blocate",
|
||||
"schange4": "Cauta Site-uri Web",
|
||||
"schange5": "Avatar",
|
||||
"schange6": "Detalii",
|
||||
"schange7": "Publicat de",
|
||||
"schange8": "Actiuni",
|
||||
"schange9": "Site-uri Web",
|
||||
"schange10": "Nu este disponibila nicio pagina Web",
|
||||
"schange11": "Site-uri Web pe care le urmaresti",
|
||||
"schange12": "Site-uri Web urmarite",
|
||||
"schange13": "Nu urmaresti nicio pagina web",
|
||||
"schange14": "Pagini web pe care le-ai blocat",
|
||||
"schange15": "Pagini blocate",
|
||||
"schange16": "Nu ai nicio pagina blocata",
|
||||
"schange17": "Numele nu a fost gasit!",
|
||||
"schange18": "Modul releu este activat. Acest lucru inseamna ca nodul dumneavoastra va ajuta la transportul datelor criptate in retea atunci cand un omolog le solicita. Puteti opta pentru dezactivare prin setarea",
|
||||
"schange19": "in",
|
||||
"schange20": "Modul releu este dezactivat. Il puteti activa prin setarea",
|
||||
"schange21": "Publica Pagina Web",
|
||||
"schange22": "A aparut o eroare atunci cand ati incercat sa urmariti acest nume inregistrat. Va rugam sa incercati din nou!",
|
||||
"schange23": "A aparut o eroare atunci cand ati incercat sa dezactivati urmarirea acestui nume inregistrat. Va rugam sa incercati din nou!",
|
||||
"schange24": "A aparut o eroare in timpul incercarii de a bloca acest nume inregistrat. Va rugam sa incercati din nou!",
|
||||
"schange25": "A aparut o eroare atunci cand ati incercat sa deblocati acest nume inregistrat. Va rugam sa incercati din nou!",
|
||||
"schange26": "Neclasificat",
|
||||
"schange27": "Dimensiune",
|
||||
"schange28": "Stare",
|
||||
"schange29": "Urmareste",
|
||||
"schange30": "Opreste urmarirea",
|
||||
"schange31": "Blocheaza",
|
||||
"schange32": "Deblocheaza",
|
||||
"schange33": "Numele cautat",
|
||||
"schange34": "Numele nu poate fi gol!",
|
||||
"schange35": "Cauta"
|
||||
},
|
||||
"publishpage": {
|
||||
"pchange1": "Publica",
|
||||
"pchange2": "Actualizeaza",
|
||||
"pchange3": "Nota: se recomanda sa configurati redirectionarea porturilor inainte de a gazdui date, astfel incat acestea sa poata fi accesate mai usor de catre colegii din retea.",
|
||||
"pchange4": "Selecteaza Nume",
|
||||
"pchange5": "Titlu",
|
||||
"pchange6": "Descriere",
|
||||
"pchange7": "Selecteaza Categorie",
|
||||
"pchange8": "Tag",
|
||||
"pchange9": "Serviciu",
|
||||
"pchange10": "Identificator",
|
||||
"pchange11": "Publica",
|
||||
"pchange12": "Selectati fisierul zip care include continut static",
|
||||
"pchange13": "Calea locala catre fisierele statice",
|
||||
"pchange14": "Va rugam sa selectati un nume inregistrat pentru care sa publicati date",
|
||||
"pchange15": "Va rugam sa selectati un fisier pentru a fi gazduit",
|
||||
"pchange16": "Va rugam sa selectati un fisier zip pentru a-l gazdui",
|
||||
"pchange17": "Va rugam sa introduceti calea directorului care include continutul static",
|
||||
"pchange18": "Va rugam sa introduceti un nume al serviciului",
|
||||
"pchange19": "Se prelucreaza datele... acest lucru poate dura ceva timp...",
|
||||
"pchange20": "Eroare:",
|
||||
"pchange21": "Eroare interna a serverului la publicarea datelor",
|
||||
"pchange22": "Se calculeaza evidenta contributiei in retea... acest lucru poate dura ceva timp...",
|
||||
"pchange23": "Tranzactie reusita!",
|
||||
"pchange24": "Nu s-a putut semna si procesa tranzactia",
|
||||
"pchange25": "Alege fisier"
|
||||
},
|
||||
"browserpage": {
|
||||
"bchange1": "Inainte",
|
||||
"bchange2": "Reincarca",
|
||||
"bchange3": "Inapoi la lista",
|
||||
"bchange4": "Sterge",
|
||||
"bchange5": "de la nodul",
|
||||
"bchange6": "Browser-ul tau nu suporta iframes",
|
||||
"bchange7": "Urmareste",
|
||||
"bchange8": "Opreste urmarirea",
|
||||
"bchange9": "Blocheaza",
|
||||
"bchange10": "Deblocheaza",
|
||||
"bchange11": "A aparut o eroare atunci cand ati incercat sa urmariti acest nume inregistrat. Va rugam sa incercati din nou!",
|
||||
"bchange12": "A aparut o eroare atunci cand ati incercat sa dezactivati urmarirea acestui nume inregistrat. Va rugam sa incercati din nou!",
|
||||
"bchange13": "A aparut o eroare in timpul incercarii de a bloca acest nume inregistrat. Va rugam sa incercati din nou!",
|
||||
"bchange14": "A aparut o eroare in timpul incercarii de a debloca acest nume inregistrat. Va rugam sa incercati din nou!",
|
||||
"bchange15": "Nu se pot sterge datele de la numele urmarite. Va rugam sa renuntati mai intai la urmarire.",
|
||||
"bchange16": "A aparut o eroare atunci cand ati incercat sa stergeti aceasta resursa. Va rugam sa incercati din nou!"
|
||||
},
|
||||
"datapage": {
|
||||
"dchange1": "Gestionare date",
|
||||
"dchange2": "Cautare in datele gazduite de acest nod",
|
||||
"dchange3": "Date pentru cautare",
|
||||
"dchange4": "Cauta",
|
||||
"dchange5": "Nume inregistrat",
|
||||
"dchange6": "Serviciu",
|
||||
"dchange7": "Identificator",
|
||||
"dchange8": "Actiuni",
|
||||
"dchange9": "Date gazduite de acest nod",
|
||||
"dchange10": "Numele datelor nu poate fi gol!",
|
||||
"dchange11": "Nu s-au gasit date!",
|
||||
"dchange12": "Nu s-a putut prelua lista de date gazduite din nod",
|
||||
"dchange13": "Acest nod nu gazduieste niciun fel de date",
|
||||
"dchange14": "Opreste urmarirea",
|
||||
"dchange15": "Sterge",
|
||||
"dchange16": "Blocheaza",
|
||||
"dchange17": "Deblocheaza",
|
||||
"dchange18": "A aparut o eroare in timpul incercarii de a bloca acest nume inregistrat. Va rugam sa incercati din nou!",
|
||||
"dchange19": "A aparut o eroare atunci cand ati incercat sa dezactivati urmarirea acestui nume inregistrat. Va rugam sa incercati din nou!",
|
||||
"dchange20": "A aparut o eroare atunci cand ati incercat sa deblocati acest nume inregistrat. Va rugam sa incercati din nou!",
|
||||
"dchange21": "A aparut o eroare atunci cand ati incercat sa stergeti aceasta resursa. Va rugam sa incercati din nou!"
|
||||
},
|
||||
"chatpage": {
|
||||
"cchange1": "Mesaj privat nou",
|
||||
"cchange2": "Se incarca...",
|
||||
"cchange3": "Utilizatori blocati",
|
||||
"cchange4": "Mesaj nou",
|
||||
"cchange5": "(click pentru a derula)",
|
||||
"cchange6": "Introduceti numele sau adresa persoanei cu care doriti sa discutati pentru a trimite un mesaj privat.!",
|
||||
"cchange7": "Nume / Adresa",
|
||||
"cchange8": "Mesaj...",
|
||||
"cchange9": "Trimite",
|
||||
"cchange10": "Lista utilizatori blocati",
|
||||
"cchange11": "Nume",
|
||||
"cchange12": "Detinator",
|
||||
"cchange13": "Actiune",
|
||||
"cchange14": "Acest cont nu a blocat niciun utilizator.",
|
||||
"cchange15": "Nu exista nume inregistrat",
|
||||
"cchange16": "Ati deblocat cu succes acest utilizator.",
|
||||
"cchange17": "A aparut o eroare atunci cand ati incercat sa deblocati acest utilizator. Va rugam sa incercati din nou!",
|
||||
"cchange18": "Deblocheaza",
|
||||
"cchange19": "Nume / Adresa invalida, Verificati numele / adresa si incercati din nou...",
|
||||
"cchange20": "Mesaj trimis cu succes!",
|
||||
"cchange21": "Mesajul nu s-a trimis, te rog sa incerci din nou...",
|
||||
"cchange22": "Se incarca mesajele...",
|
||||
"cchange23": "Nu se poate decripta mesajul!",
|
||||
"cchange24": "Numarul maxim de caractere pe mesaj este 255"
|
||||
},
|
||||
"welcomepage": {
|
||||
"wcchange1": "Bine ai venit la Q-Chat",
|
||||
"wcchange2": "Mesaj privat nou",
|
||||
"wcchange3": "Introduceti numele sau adresa persoanei cu care doriti sa discutati pentru a trimite un mesaj privat!",
|
||||
"wcchange4": "Nume / Adresa",
|
||||
"wcchange5": "Mesaj...",
|
||||
"wcchange6": "Trimite",
|
||||
"wcchange7": "Nume / adresa invalida, Verificati numele / adresa si incercati din nou...",
|
||||
"wcchange8": "Mesaj trimis cu succes!",
|
||||
"wcchange9": "Trimiterea a esuat, Va rugam sa incercati din nou..."
|
||||
},
|
||||
"blockpage": {
|
||||
"bcchange1": "Blocheaza utilizator",
|
||||
"bcchange2": "S-a blocat cu succes acest utilizator!",
|
||||
"bcchange3": "A aparut o eroare atunci cand ati incercat sa blocati acest utilizator. Va rugam sa incercati din nou!",
|
||||
"bcchange4": "Nu exista un nume inregistrat",
|
||||
"bcchange5": "Cerere de blocare utilizator",
|
||||
"bcchange6": "Sunteti sigur ca doriti sa blocati acest utilizator ?",
|
||||
"bcchange7": "MENIU",
|
||||
"bcchange8": "Copiati adresa",
|
||||
"bcchange9": "Mesaj privat"
|
||||
},
|
||||
"grouppage": {
|
||||
"gchange1": "Grupuri Qortal Groups",
|
||||
"gchange2": "Creaza Grup",
|
||||
"gchange3": "Grupuri in care esti inscris",
|
||||
"gchange4": "Numele Grupului",
|
||||
"gchange5": "Descriere",
|
||||
"gchange6": "Rol",
|
||||
"gchange7": "Actiune",
|
||||
"gchange8": "Nu este membru al niciunui grup!",
|
||||
"gchange9": "Grupuri publice",
|
||||
"gchange10": "Detinator",
|
||||
"gchange11": "Nu sunt disponibile grupuri publice deschise!",
|
||||
"gchange12": "Creaza un Grup Nou",
|
||||
"gchange13": "Tipul Grupului",
|
||||
"gchange14": "Acest camp este obligatoriu",
|
||||
"gchange15": "Selecteaza o optiune",
|
||||
"gchange16": "Public",
|
||||
"gchange17": "Privat",
|
||||
"gchange18": "Pragul de aprobare de grup (numarul / procentul de administratori care trebuie sa aprobe o tranzactie)):",
|
||||
"gchange19": "NICI UNUL",
|
||||
"gchange20": "UNUL",
|
||||
"gchange21": "Intarzierea minima a blocului pentru aprobarea tranzactiilor de grup:",
|
||||
"gchange22": "minute",
|
||||
"gchange23": "ora",
|
||||
"gchange24": "ore",
|
||||
"gchange25": "zi",
|
||||
"gchange26": "zile",
|
||||
"gchange27": "Intarzierea maxima a blocului pentru aprobarea tranzactiilor de grup:",
|
||||
"gchange28": "Se Creaza Grupul",
|
||||
"gchange29": "Creaza Grup",
|
||||
"gchange30": "Cerere de inscriere in grup",
|
||||
"gchange31": "Data crearii",
|
||||
"gchange32": "Data actualizarii",
|
||||
"gchange33": "Se proceseaza inscrierea",
|
||||
"gchange34": "Inscrie-te in Grup",
|
||||
"gchange35": "Cerere de Iesire din Grup",
|
||||
"gchange36": "Se proceseaza iesirea",
|
||||
"gchange37": "Paraseste Grupul",
|
||||
"gchange38": "Gestionati Detinatorul Grupului:",
|
||||
"gchange39": "Gestionati Administratorul Grupului:",
|
||||
"gchange40": "Gestionati Grupul",
|
||||
"gchange41": "Crearea grupului s-a executat cu succes!",
|
||||
"gchange42": "Nume de Grup Invalid",
|
||||
"gchange43": "Descriere grup invalida",
|
||||
"gchange44": "Selectati un Tip de Grup",
|
||||
"gchange45": "Selectati un Prag de Aprobare de Grup",
|
||||
"gchange46": "Selectati o intarziere minima a blocului pentru aprobarea tranzactiilor de grup",
|
||||
"gchange47": "Selectati o intarziere maxima de blocare pentru aprobarea tranzactiilor de grup",
|
||||
"gchange48": "Cerere de aderare la grup trimisa cu succes!",
|
||||
"gchange49": "Cerere de iesire din grup trimisa cu succes!",
|
||||
"gchange50": "Iesire",
|
||||
"gchange51": "Inscriere",
|
||||
"gchange52": "Admin",
|
||||
"gchange53": "Membru",
|
||||
"gchange54": "Membrii"
|
||||
},
|
||||
"puzzlepage": {
|
||||
"pchange1": "Puzzle-uri",
|
||||
"pchange2": "Recompensa",
|
||||
"pchange3": "REZOLVAT de",
|
||||
"pchange4": "Nume",
|
||||
"pchange5": "Descriere",
|
||||
"pchange6": "Indiciu / Raspuns",
|
||||
"pchange7": "Actiune",
|
||||
"pchange8": "Varianta de raspuns",
|
||||
"pchange9": "Introduceti varianta dvs. de raspuns pentru a rezolva acest puzzle si a castiga",
|
||||
"pchange10": "Varianta dumneavoastra de raspuns trebuie sa aiba 43 sau 44 de caractere si",
|
||||
"pchange11": "sa nu",
|
||||
"pchange12": "includa 0 (zero), I (I mare), O (o mare) or l (L mare).",
|
||||
"pchange13": "Varianta dumenavoastra",
|
||||
"pchange14": "Se verifica varianta...",
|
||||
"pchange15": "Trimite",
|
||||
"pchange16": "Varianta incorecta!",
|
||||
"pchange17": "Cerere de recompensa trimisa - verificati portofelul pentru recompensa!"
|
||||
},
|
||||
"nodepage": {
|
||||
"nchange1": "Gestionare nod pentru:",
|
||||
"nchange2": "Nodul a fost online pentru:",
|
||||
"nchange3": "Conturi de minting (recompensare) ale nodului",
|
||||
"nchange4": "Adauga cont de minting (recompensare)",
|
||||
"nchange5": "Daca doresti sa faci mint cu propriul cont, va trebui sa creezi o tranzactie cu cota de recompensare pentru tine insuti (cu procentul cota de recompensa setat la 0), apoi sa obtii recompensa cu cheia de cota de recompensare pe care ti-o genereaza.",
|
||||
"nchange6": "Cheie de recompensare",
|
||||
"nchange7": "Adauga cont de producator de moneda (minting)",
|
||||
"nchange8": "Adauga",
|
||||
"nchange9": "Cont de producator de moneda (minting)",
|
||||
"nchange10": "Contul destinatarului",
|
||||
"nchange11": "Actiune",
|
||||
"nchange12": "Sterge",
|
||||
"nchange13": "Nu s-a gasit niciun cont de producator de moneda (minting) pentru acest nod",
|
||||
"nchange14": "Utilizatori conectati la acest nod",
|
||||
"nchange15": "Adauga utilizator",
|
||||
"nchange16": "Scrieti adresa utilizatorului pe care doriti sa il adaugati mai jos",
|
||||
"nchange17": "Adresa utilizator",
|
||||
"nchange18": "Adresa",
|
||||
"nchange19": "Ultima dimensiune",
|
||||
"nchange20": "Versiunea Nucleului",
|
||||
"nchange21": "Conectat pentru",
|
||||
"nchange22": "Actiune",
|
||||
"nchange23": "Forteaza Sincronizare",
|
||||
"nchange24": "Nodul nu are utilizatori conectati",
|
||||
"nchange25": "Se porneste sincronizarea cu utilizatorii: ",
|
||||
"nchange26": "Utilizator eliminat cu succes: ",
|
||||
"nchange27": "Nod de producator de moneda (minting) adaugat cu succes!",
|
||||
"nchange28": "Nu s-a reusit adaugarea nodului de producator de moneda (minting)!",
|
||||
"nchange29": "S-a eliminat cu succes contul de producator de moneda (minting)!",
|
||||
"nchange30": "Nu a reusit eliminare contulului de recompensare (minting)!",
|
||||
"nchange31": "Opreste Nodul",
|
||||
"nchange32": "Cerere de Oprire Trimisa cu Succes!"
|
||||
},
|
||||
"transpage": {
|
||||
"tchange1": "Cerere de tranzactionare",
|
||||
"tchange2": "Respinge",
|
||||
"tchange3": "Confirma",
|
||||
"tchange4": "Catre",
|
||||
"tchange5": "Suma"
|
||||
},
|
||||
"apipage": {
|
||||
"achange1": "Adauga cheia API",
|
||||
"achange2": "API key",
|
||||
"achange3": "Va rugam sa introduceti cheia API pentru acest nod. Aceasta poate fi gasita intr-un fisier numit <20>apikey.txt<78> in directorul in care este instalat nucleul. Alternativ, faceti clic pe Anulare (Anulare) pentru a utiliza nucleul cu functionalitate redusa.",
|
||||
"achange4": "Anulare",
|
||||
"achange5": "Adauga",
|
||||
"achange6": "S-a adaugat cu succes cheia API",
|
||||
"achange7": "Cheie API gresita, nu a fost adaugata nicio cheie API"
|
||||
},
|
||||
"transactions": {
|
||||
"amount": "Suma",
|
||||
"to": "Catre",
|
||||
"declined": "Utilizatorul a refuzat tranzactia!",
|
||||
"namedialog1": "Sunteti pe cale sa inregistrati numele de mai jos:",
|
||||
"namedialog2": "La apasarea butonului de confirmare, numele va fi inregistrat!",
|
||||
"groupdialog1": "Solicitati sa va alaturati grupului de mai jos:",
|
||||
"groupdialog2": "La apasarea butonului de confirmare, cererea de aderare la grup va fi trimisa!",
|
||||
"groupdialog3": "Cereti sa parasiti grupul de mai jos:",
|
||||
"groupdialog4": "La apasarea butonului de confirmare, cererea de parasire a grupului va fi trimisa!",
|
||||
"groupdialog5": "Cereti sa creati grupul de mai jos:",
|
||||
"groupdialog6": "La apasarea confirmarii, cererea de creare a grupului va fi trimisa!",
|
||||
"rewarddialog1": "Doriti sa creati o tranzactie de partajare a recompenselor, partajand",
|
||||
"rewarddialog2": "cotele de recompensare cu",
|
||||
"rewarddialog3": "Daca da, va trebui sa salvati cheia de mai jos pentru a putea obstine recompense. Aceasta poate fi furnizata oricarui nod pentru a-i permite acestuia sa obtina recompense in numele dumneavoastra.",
|
||||
"rewarddialog4": "La apasarea butonului de confirmare, cota de recompensare va fi creata, dar va trebui in continuare sa furnizati cheia de mai sus unui nod, pentru a putea sa obtina recompense cu acest cont.",
|
||||
"rewarddialog5": "Suntei pe cale sa stergeti o tranzactie de cota de recompensare asociata cu contul:",
|
||||
"rewarddialog6": "La apasarea butonului de confirmare, recompensa va fi eliminata, iar cheia de obtinere de recompensa (minting) va deveni invalida."
|
||||
}
|
||||
}
|
@ -16,7 +16,9 @@
|
||||
"serbian": "Srpski",
|
||||
"italian": "Italijan",
|
||||
"russian": "Ruski",
|
||||
"norwegian": "Norveški"
|
||||
"norwegian": "Norveški",
|
||||
"romanian": "Rumunski",
|
||||
"korean": "Korejski"
|
||||
},
|
||||
"sidemenu": {
|
||||
"mintingdetails": "DETALJI MINTOVANJA",
|
||||
|
@ -16,19 +16,21 @@
|
||||
"serbian": "Сербский",
|
||||
"italian": "Итальянский",
|
||||
"russian": "Русский",
|
||||
"norwegian": "Норвежский"
|
||||
"norwegian": "Норвежский",
|
||||
"romanian": "Румынский",
|
||||
"korean": "Корейский"
|
||||
},
|
||||
"sidemenu": {
|
||||
"mintingdetails": "ДЕТАЛИ ЧЕКАНКИ",
|
||||
"wallets": "КОШЕЛЬКИ",
|
||||
"tradeportal": "ТОРГОВЫЙ ПОРТАЛ",
|
||||
"rewardshare": "ДОЛЯ ВОЗНАГРАЖДЕНИЯ",
|
||||
"rewardshare": "ДОЛЕВОЕ УЧАСТИЕ",
|
||||
"nameregistration": "РЕГИСТРАЦИЯ ИМЕНИ",
|
||||
"websites": "ВЕБ-САЙТЫ",
|
||||
"datamanagement": "УПРАВЛЕНИЕ ДАННЫМИ",
|
||||
"qchat": "Q-ЧАТ",
|
||||
"groupmanagement": "УПРАВЛЕНИЕ ГРУППАМИ",
|
||||
"puzzles": "ЗАГАДКИ",
|
||||
"puzzles": "ГОЛОВОЛОМКИ",
|
||||
"nodemanagement": "УПРАВЛЕНИЕ УЗЛАМИ"
|
||||
},
|
||||
"login": {
|
||||
@ -45,35 +47,35 @@
|
||||
"seed": "Seed-фраза",
|
||||
"seedphrase": "seed-фраза",
|
||||
"saved": "Сохраненный аккаунт",
|
||||
"qora": "Seed адреса Qora",
|
||||
"qora": "Seed-фраза от адреса Qora",
|
||||
"backup": "Резервная копия кошелька Qortal",
|
||||
"decrypt": "Расшифровать резервную копию",
|
||||
"save": "Сохранить в этом браузере",
|
||||
"save": "Сохранить в приложении",
|
||||
"prepare": "Подготовка вашей учетной записи",
|
||||
"areyousure": "Вы уверены, что хотите удалить этот кошелек из сохраненных кошельков?",
|
||||
"error1": "Резервная копия должна быть в формате JSON",
|
||||
"error2": "Вариант входа не выбран",
|
||||
"createwelcome": "Добро пожаловать в Qortal, вы обнаружите, что это похоже на ролевую игру, вы, как минтер в сети Qortal (если вы решите им стать), будете иметь возможность повысить уровень своей учетной записи, что даст вам большее вознаграждения за блок QORT, а также большее влияние на сеть с точки зрения голосования по решениям для платформы.",
|
||||
"createwelcome": "Добро пожаловать в Qortal! Это чем-то похоже на ролевую игру, в которой вы, как минтер в сети Qortal (если вы решите им стать), будете иметь возможность повысить уровень учетной записи, что повысит долю вашего вознаграждения за каждый блок QORT, а также даст вам больше влияния на сеть, посредством голосования по предложениям для платформы.",
|
||||
"createa": "A",
|
||||
"click": "Нажмите, чтобы просмотреть исходную фразу",
|
||||
"confirmpass": "Подтвердить пароль",
|
||||
"willbe": "Будет генерироваться случайным образом в фоновом режиме. Он используется в качестве генератора приватного ключа для вашей учетной записи блокчейна в Qortal.",
|
||||
"click": "Нажмите, чтобы просмотреть seed-фразу",
|
||||
"confirmpass": "Подтвердите пароль",
|
||||
"willbe": "Будет генерироваться случайным образом в фоновом режиме для использования в качестве генератора приватного ключа от вашей учетной записи в блокчейне Qortal.",
|
||||
"clicknext": "Создайте учетную запись Qortal, нажав кнопку ДАЛЕЕ ниже.",
|
||||
"ready": "Теперь ваша учетная запись готова к созданию. Она будет сохранена в этом браузере. Если вы не хотите, чтобы ваша новая учетная запись сохранялась в вашем браузере, вы можете снять флажок ниже. Вы по-прежнему сможете войдите в свою новую учетную запись (после выхода), используя файл резервной копии вашего кошелька, который вы ДОЛЖНЫ загрузить после создания учетной записи.",
|
||||
"ready": "Теперь ваша учетная запись готова к созданию. Она будет сохранена в этом приложении. Если вы не хотите, чтобы ваша новая учетная запись сохранялась в приложении, вы можете снять флажок ниже. Вы по-прежнему сможете войти в свою новую учетную запись (после выхода), используя файл резервной копии вашего кошелька, который вам НЕООБХОДИМО скачать после создания учетной записи.",
|
||||
"welmessage": "Добро пожаловать в Qortal",
|
||||
"pleaseenter": "Пожалуйста, введите пароль!",
|
||||
"notmatch": "Пароли не совпадают!",
|
||||
"lessthen8": "Ваш пароль содержит менее 8 символов! Это не рекомендуется. Вы можете продолжить, игнорировав это предупреждение.",
|
||||
"entername": "Пожалуйста, введите Имя!",
|
||||
"downloaded": "Файл резервной копии кошелька будет загружен!",
|
||||
"downloaded": "Файл резервной копии кошелька будет скачан!",
|
||||
"loading": "Идет загрузка, пожалуйста, подождите...",
|
||||
"createdseed": "Ваша созданная Seed-фраза",
|
||||
"saveseed": "Сохранить Seed-фразу",
|
||||
"savein": "Сохранить в браузере",
|
||||
"savein": "Сохранить в приложении",
|
||||
"backup2": "Этот файл является ЕДИНСТВЕННЫМ способом доступа к вашей учетной записи в системе, в которой он не сохранен в приложении/браузере. ОБЯЗАТЕЛЬНО СДЕЛАЙТЕ РЕЗЕРВНУЮ КОПИЮ ЭТОГО ФАЙЛА В НЕСКОЛЬКИХ МЕСТАХ. Файл очень надежно зашифрован и расшифровывается с помощью вашего локального пароля, который вы создали на предыдущем шаге. Вы можете безопасно сохранить его в любом месте, но не забудьте сделать это в нескольких местах.",
|
||||
"savewallet": "Сохранить файл резервной копии кошелька",
|
||||
"created1": "Ваша учетная запись создана",
|
||||
"created2": "и будет сохранено в этом браузере.",
|
||||
"created2": "и будет сохранено в этом приложении.",
|
||||
"downloadbackup": "Скачать файл резервной копии кошелька"
|
||||
},
|
||||
"logout": {
|
||||
@ -109,7 +111,7 @@
|
||||
},
|
||||
"appinfo": {
|
||||
"blockheight": "Высота блока",
|
||||
"uiversion": "UI-версия",
|
||||
"uiversion": "версия приложения",
|
||||
"coreversion": "Версия ядра",
|
||||
"minting": "(Чеканка)",
|
||||
"synchronizing": "Синхронизация"
|
||||
@ -153,7 +155,7 @@
|
||||
"mchange19": "Информация о наградах за чеканку",
|
||||
"mchange20": "Текущий уровень",
|
||||
"mchange21": "Всего минтеров на уровне",
|
||||
"mchange22": "Доля уровней на блок",
|
||||
"mchange22": "Доля уровня в награде за блок",
|
||||
"mchange23": "Вознаграждение за блок",
|
||||
"mchange24": "Вознаграждение в день",
|
||||
"mchange25": "Секунды",
|
||||
@ -162,13 +164,13 @@
|
||||
"mchange28": "Уровень",
|
||||
"mchange29": "дни",
|
||||
"mchange30": "Минтеры",
|
||||
"mchange31": "Нажмите для помощи",
|
||||
"mchange31": "Нажмите, чтобы получить помощь",
|
||||
"mchange32": "Стань Минтером",
|
||||
"mchange33": "Введение",
|
||||
"mchange34": "В Qortal, чтобы стать минтером и начать зарабатывать вознаграждения QORT с повышением уровня Minter, вы должны сначала быть спосированы «спонсором». Спонсором в Qortal является любой другой минтер уровня 5 или выше, или Основатель Qortal. Вы получите спонсорский ключ от спонсора и используете этот ключ, чтобы перейти на уровень 1. Достигнув уровня 1, вы сможете создать свой собственный ключ чеканки и начать зарабатывать вознаграждения за помощь в защите блокчейна Qortal.",
|
||||
"mchange34": "В Qortal, чтобы стать минтером и начать зарабатывать вознаграждения QORT с повышением уровня Minter, вы должны сначала быть спонсированы. Спонсором в Qortal является любой другой минтер уровня 5 или выше, или один из Основателей Qortal. Вы получите спонсорский ключ от спонсора и используете этот ключ, чтобы перейти на уровень 1. Достигнув уровня 1, вы сможете создать свой собственный ключ чеканки и начать зарабатывать вознаграждения за помощь в защите блокчейна Qortal.",
|
||||
"mchange35": "Спонсорство",
|
||||
"mchange36": "Ваш спонсор выдаст вам ‘Спонсорский ключ’, который вы будете использовать для добавления в свой узел и начнете чеканку (без вознаграждения до достижения уровня 1). Как только вы достигнете уровня 1, вы создадите/назначите свой собственный ‘Ключ Чеканки’ и начните зарабатывать вознаграждения. У вас осталось XXXX блоков в период вашего спонсорства.",
|
||||
"mchange37": "Просто обратитесь к минтеру в Кортале, уровень которого достаточно высок, чтобы выдать спонсорский ключ, получите этот ключ, затем вернитесь сюда и введите ключ, чтобы начать свое путешествие по чеканке!",
|
||||
"mchange37": "Просто обратитесь к минтеру в Qortal, уровень которого позволяет выдавать спонсорские ключи, получите этот ключ, затем вернитесь сюда и введите ключ, чтобы начать чеканку!",
|
||||
"mchange38": "в"
|
||||
},
|
||||
"walletpage": {
|
||||
@ -209,7 +211,7 @@
|
||||
"wchange35": "Тип",
|
||||
"wchange36": "Платеж",
|
||||
"wchange37": "Общая сумма",
|
||||
"wchange38": "В адресе еще нет транзакций.",
|
||||
"wchange38": "Еще нет транзакций связанных с этим адресом.",
|
||||
"wchange39": "Не удалось скопировать адрес.",
|
||||
"wchange40": "ОПЛАТА",
|
||||
"wchange41": "Статус",
|
||||
@ -231,18 +233,18 @@
|
||||
"tchange11": "Дата",
|
||||
"tchange12": "Статус",
|
||||
"tchange13": "Продавец",
|
||||
"tchange14": "Цена за штуку",
|
||||
"tchange14": "Цена за единицу",
|
||||
"tchange15": "Очистить форму",
|
||||
"tchange16": "У вас есть",
|
||||
"tchange17": "Действие",
|
||||
"tchange18": "КУПИТЬ",
|
||||
"tchange19": "ПРОДАТЬ",
|
||||
"tchange20": "Не удалось создать сделку. Повторите попытку!",
|
||||
"tchange21": "Не удалось создать сделку. Код ошибки",
|
||||
"tchange20": "Не удалось провести сделку. Повторите попытку!",
|
||||
"tchange21": "Не удалось провести сделку. Код ошибки",
|
||||
"tchange22": "Недостаточно средств!",
|
||||
"tchange23": "Запрос на покупку выполнен успешно!",
|
||||
"tchange24": "Запрос на покупку существует!",
|
||||
"tchange25": "Не удалось создать сделку. Код ошибки",
|
||||
"tchange25": "Не удалось провести сделку. Код ошибки",
|
||||
"tchange26": "Выполняется отмена сделки!",
|
||||
"tchange27": "Не удалось отменить сделку. Повторите попытку!",
|
||||
"tchange28": "Не удалось отменить сделку. Код ошибки",
|
||||
@ -253,27 +255,27 @@
|
||||
},
|
||||
"rewardsharepage": {
|
||||
"rchange1": "Вознаграждения",
|
||||
"rchange2": "Создать долю вознаграждения",
|
||||
"rchange3": "Вознаграждения, связанные с этой учетной записью",
|
||||
"rchange2": "Создать акции",
|
||||
"rchange3": "Акции, связанные с этой учетной записью",
|
||||
"rchange4": "Учетная запись Minting",
|
||||
"rchange5": "Доля в процентах",
|
||||
"rchange6": "Получатель",
|
||||
"rchange7": "Действие",
|
||||
"rchange8": "Тип",
|
||||
"rchange9": "Уровень 1–4 может создать собственную акцию, а уровень 5 или выше может создать акцию вознаграждения!",
|
||||
"rchange9": "Уровень 1–4 может создать акцию для самого себя, а уровень 5 или выше может создать акцию для других!",
|
||||
"rchange10": "Открытый ключ получателя",
|
||||
"rchange11": "Процент доли вознаграждения",
|
||||
"rchange12": "Делаю что-нибудь вкусненькое",
|
||||
"rchange13": "Добавление минтинг-аккаунта",
|
||||
"rchange14": "Добавить",
|
||||
"rchange15": "Учетная запись не участвует ни в каких вознаграждениях",
|
||||
"rchange16": "Собственная доля вознаграждения",
|
||||
"rchange16": "Личная акция",
|
||||
"rchange17": "Удалить",
|
||||
"rchange18": "Невозможно создать несколько долей вознаграждения!",
|
||||
"rchange19": "Невозможно создать несколько личных ресурсов!",
|
||||
"rchange20": "НЕ МОЖЕТЕ СОЗДАТЬ ДОЛЮ НАГРАДЫ! на уровне",
|
||||
"rchange21": "Раздача вознаграждения прошла успешно!",
|
||||
"rchange22": "Доля вознаграждения успешно удалена!"
|
||||
"rchange18": "Невозможно создать несколько акций!",
|
||||
"rchange19": "Невозможно создать несколько личных акций!",
|
||||
"rchange20": "НЕ МОЖЕТЕ СОЗДАТЬ АКЦИЮ! на уровне",
|
||||
"rchange21": "Акция активирована успешно!",
|
||||
"rchange22": "Акция успешно удалена!"
|
||||
},
|
||||
"registernamepage": {
|
||||
"nchange1": "Регистрация имени",
|
||||
@ -444,7 +446,7 @@
|
||||
"bcchange4": "Нет зарегистрированного имени"
|
||||
},
|
||||
"grouppage": {
|
||||
"gchange1": "Кортальные группы",
|
||||
"gchange1": "Qortal группы",
|
||||
"gchange2": "Создать группу",
|
||||
"gchange3": "Ваши присоединенные группы",
|
||||
"gchange4": "Имя группы",
|
||||
@ -523,7 +525,7 @@
|
||||
"nchange2": "Узел был в сети в течении:",
|
||||
"nchange3": "Учетные записи чеканки узла",
|
||||
"nchange4": "Добавить минтинг-аккаунт",
|
||||
"nchange5": "Если вы хотите чеканить с помощью своей учетной записи, вам нужно будет создать транзакцию вознаграждения для себя (с процентом вознаграждения, установленным на 0), а затем чеканить с помощью ключа вознаграждения, который он вам дает.",
|
||||
"nchange5": "Если вы хотите чеканить с помощью своей учетной записи, вам нужно будет создать акцию для самого себя (с процентом вознаграждения, установленным на 0), а затем чеканить с помощью полученного ключа вознаграждения.",
|
||||
"nchange6": "Ключ вознаграждения",
|
||||
"nchange7": "Добавление минтинг-аккаунта",
|
||||
"nchange8": "Добавить",
|
||||
|
@ -16,7 +16,9 @@
|
||||
"serbian": "Serbian",
|
||||
"italian": "Italian",
|
||||
"russian": "Russian",
|
||||
"norwegian": "Norwegian"
|
||||
"norwegian": "Norwegian",
|
||||
"romanian": "Romanian",
|
||||
"korean": "Korean"
|
||||
},
|
||||
"sidemenu": {
|
||||
"mintingdetails": "MINTING DETAILS",
|
||||
|
@ -16,13 +16,15 @@
|
||||
"serbian": "塞尔维亚文",
|
||||
"italian": "意大利文",
|
||||
"russian": "俄语",
|
||||
"norwegian": "挪威语"
|
||||
"norwegian": "挪威语",
|
||||
"romanian": "罗马尼亚语",
|
||||
"korean": "韩语"
|
||||
},
|
||||
"sidemenu": {
|
||||
"mintingdetails": "铸币信息",
|
||||
"wallets": "钱包",
|
||||
"tradeportal": "交易门户",
|
||||
"rewardshare": "奖励分享",
|
||||
"rewardshare": "铸币密钥",
|
||||
"nameregistration": "注册名称",
|
||||
"websites": "网站",
|
||||
"datamanagement": "资料管理",
|
||||
@ -252,28 +254,28 @@
|
||||
"tchange32": "已买入"
|
||||
},
|
||||
"rewardsharepage": {
|
||||
"rchange1": "奖励分享",
|
||||
"rchange2": "创建奖励分享",
|
||||
"rchange3": "此账号下的奖励分享列表",
|
||||
"rchange1": "铸币密钥",
|
||||
"rchange2": "创建铸币密钥",
|
||||
"rchange3": "此账号下的铸币密钥列表",
|
||||
"rchange4": "铸币账号",
|
||||
"rchange5": "分享百分比",
|
||||
"rchange6": "接收者",
|
||||
"rchange7": "操作",
|
||||
"rchange8": "类型",
|
||||
"rchange9": "等级1-4只能创建自我奖励分享;等级5或以上可以创建赞助码!",
|
||||
"rchange9": "等级1-4只能创建个人铸币密钥;等级5或以上可以创建赞助码!",
|
||||
"rchange10": "接收者的公共密钥",
|
||||
"rchange11": "奖励分享百分比",
|
||||
"rchange12": "正在添加中...",
|
||||
"rchange13": "正在添加铸币密钥/赞助码",
|
||||
"rchange14": "添加",
|
||||
"rchange15": "此账号并没有任何奖励分享",
|
||||
"rchange16": "自我奖励分享",
|
||||
"rchange16": "个人铸币密钥",
|
||||
"rchange17": "移除",
|
||||
"rchange18": "不能创建多个奖励分享!",
|
||||
"rchange19": "不能创建多个自我奖励分享!",
|
||||
"rchange20": "不能创建奖励分享!在等级",
|
||||
"rchange21": "奖励分享创建成功!",
|
||||
"rchange22": "奖励分享移除成功!"
|
||||
"rchange18": "不能创建多个铸币密钥!",
|
||||
"rchange19": "不能创建多个个人铸币密钥!",
|
||||
"rchange20": "不能创建铸币密钥!在等级",
|
||||
"rchange21": "铸币密钥创建成功!",
|
||||
"rchange22": "铸币密钥移除成功!"
|
||||
},
|
||||
"registernamepage": {
|
||||
"nchange1": "注册名称",
|
||||
@ -528,8 +530,8 @@
|
||||
"nchange2": "节点在线时间:",
|
||||
"nchange3": "此节点的铸币账号",
|
||||
"nchange4": "添加铸币账号",
|
||||
"nchange5": "如果想使用自己的帐号进行铸币,你必须在奖励分享页面中建立自我奖励分享密钥(将奖励分享百分比设置为 0),然后将自我奖励分享密钥添加到此处。.",
|
||||
"nchange6": "奖励分享密钥",
|
||||
"nchange5": "如果想使用自己的帐号进行铸币,你必须在铸币密钥页面中建立个人铸币密钥(将奖励分享百分比设置为 0),然后将个人铸币密钥添加到此处。.",
|
||||
"nchange6": "铸币密钥",
|
||||
"nchange7": "正在添加铸币密钥/赞助码",
|
||||
"nchange8": "添加",
|
||||
"nchange9": "铸币账号",
|
||||
@ -585,11 +587,11 @@
|
||||
"groupdialog4": "点击确认后,离开请求将会被送出!",
|
||||
"groupdialog5": "你正在请求创建下列群组:",
|
||||
"groupdialog6": "点击确认后,创建请求将会被送出!",
|
||||
"rewarddialog1": "你是否希望创建一个奖励分享密钥并分享你铸币奖励中的",
|
||||
"rewarddialog1": "你是否希望创建一个铸币密钥并分享你铸币奖励中的",
|
||||
"rewarddialog2": "给",
|
||||
"rewarddialog3": "如果是的话,请保存下面的铸币密钥并添加到任何节点上,以允许它代表您铸币.",
|
||||
"rewarddialog4": "点击确认后,奖励分享密钥将会创建,但你必须将该密钥添加到节点中才能成功铸币并获得相对应的奖励.",
|
||||
"rewarddialog5": "您正在删除与此账号关联的奖励分享交易:",
|
||||
"rewarddialog6": "点击确认后,奖励分享将被移除,已创建的铸币密钥也随之失效。"
|
||||
"rewarddialog4": "点击确认后,铸币密钥将会创建,但你必须将该密钥添加到节点中才能成功铸币并获得相对应的奖励.",
|
||||
"rewarddialog5": "您正在删除与此账号关联的铸币密钥:",
|
||||
"rewarddialog6": "点击确认后,铸币密钥将被移除並失效。"
|
||||
}
|
||||
}
|
||||
|
@ -16,13 +16,15 @@
|
||||
"serbian": "塞爾維亞文",
|
||||
"italian": "意大利文",
|
||||
"russian": "俄語",
|
||||
"norwegian": "挪威語"
|
||||
"norwegian": "挪威語",
|
||||
"romanian": "羅馬尼亞語",
|
||||
"korean": "韓語"
|
||||
},
|
||||
"sidemenu": {
|
||||
"mintingdetails": "鑄幣信息",
|
||||
"wallets": "錢包",
|
||||
"tradeportal": "交易門戶",
|
||||
"rewardshare": "獎勵分享",
|
||||
"rewardshare": "鑄幣密鑰",
|
||||
"nameregistration": "註冊名稱",
|
||||
"websites": "網站",
|
||||
"datamanagement": "資料管理",
|
||||
@ -252,28 +254,28 @@
|
||||
"tchange32": "已買入"
|
||||
},
|
||||
"rewardsharepage": {
|
||||
"rchange1": "獎勵分享",
|
||||
"rchange2": "創建獎勵分享",
|
||||
"rchange3": "此賬號下的獎勵分享列表",
|
||||
"rchange1": "鑄幣密鑰",
|
||||
"rchange2": "創建鑄幣密鑰",
|
||||
"rchange3": "此賬號下的鑄幣密鑰列表",
|
||||
"rchange4": "鑄幣賬號",
|
||||
"rchange5": "分享百分比",
|
||||
"rchange6": "接收者",
|
||||
"rchange7": "操作",
|
||||
"rchange8": "類型",
|
||||
"rchange9": "等級1-4只能創建自我獎勵分享;等級5或以上可以創建贊助碼!",
|
||||
"rchange9": "等級1-4只能創建個人鑄幣密鑰;等級5或以上可以創建贊助碼!",
|
||||
"rchange10": "接收者的公共密鑰",
|
||||
"rchange11": "獎勵分享百分比",
|
||||
"rchange12": "正在添加中...",
|
||||
"rchange13": "正在添加鑄幣密鑰/贊助碼",
|
||||
"rchange14": "添加",
|
||||
"rchange15": "此賬號並沒有任何獎勵分享",
|
||||
"rchange16": "自我獎勵分享",
|
||||
"rchange15": "此賬號並沒有任何鑄幣密鑰",
|
||||
"rchange16": "個人鑄幣密鑰",
|
||||
"rchange17": "移除",
|
||||
"rchange18": "不能創建多個獎勵分享!",
|
||||
"rchange19": "不能創建多個自我獎勵分享!",
|
||||
"rchange20": "不能創建獎勵分享!在等級",
|
||||
"rchange21": "獎勵分享創建成功!",
|
||||
"rchange22": "獎勵分享移除成功!"
|
||||
"rchange18": "不能創建多個鑄幣密鑰!",
|
||||
"rchange19": "不能創建多個個人鑄幣密鑰!",
|
||||
"rchange20": "不能創建鑄幣密鑰!在等級",
|
||||
"rchange21": "鑄幣密鑰創建成功!",
|
||||
"rchange22": "鑄幣密鑰移除成功!"
|
||||
},
|
||||
"registernamepage": {
|
||||
"nchange1": "註冊名稱",
|
||||
@ -528,8 +530,8 @@
|
||||
"nchange2": "節點在線時間:",
|
||||
"nchange3": "此節點的鑄幣賬號",
|
||||
"nchange4": "添加鑄幣賬號",
|
||||
"nchange5": "如果想使用自己的帳號進行鑄幣,你必須在獎勵分享頁面中建立自我獎勵分享密鑰(將獎勵分享百分比設置為 0),然後將自我獎勵分享密鑰添加到此處。.",
|
||||
"nchange6": "獎勵分享密鑰",
|
||||
"nchange5": "如果想使用自己的帳號進行鑄幣,你必須在鑄幣密鑰頁面中建立個人鑄幣密鑰(將獎勵分享百分比設置為 0),然後將個人鑄幣密鑰添加到此處。.",
|
||||
"nchange6": "鑄幣密鑰",
|
||||
"nchange7": "正在添加鑄幣密鑰/贊助碼",
|
||||
"nchange8": "添加",
|
||||
"nchange9": "鑄幣賬號",
|
||||
@ -585,11 +587,11 @@
|
||||
"groupdialog4": "點擊確認後,離開請求將會被送出!",
|
||||
"groupdialog5": "你正在請求創建下列群組:",
|
||||
"groupdialog6": "點擊確認後,創建請求將會被送出!",
|
||||
"rewarddialog1": "你是否希望創建一個獎勵分享密鑰並分享你鑄幣獎勵中的",
|
||||
"rewarddialog1": "你是否希望創建一個鑄幣密鑰並分享你鑄幣獎勵中的",
|
||||
"rewarddialog2": "給",
|
||||
"rewarddialog3": "如果是的話,請保存下面的鑄幣密鑰並添加到任何節點上,以允許它代表您鑄幣.",
|
||||
"rewarddialog4": "點擊確認後,獎勵分享密鑰將會創建,但你必須將該密鑰添加到節點中才能成功鑄幣並獲得相對應的獎勵.",
|
||||
"rewarddialog5": "您正在刪除與此賬號關聯的獎勵分享交易:",
|
||||
"rewarddialog6": "點擊確認後,獎勵分享將被移除,已創建的鑄幣密鑰也隨之失效。"
|
||||
"rewarddialog4": "點擊確認後,鑄幣密鑰將會創建,但你必須將該密鑰添加到節點中才能成功鑄幣並獲得相對應的獎勵.",
|
||||
"rewarddialog5": "您正在刪除與此賬號關聯的鑄幣密鑰:",
|
||||
"rewarddialog6": "點擊確認後,鑄幣密鑰將被移除並失效。"
|
||||
}
|
||||
}
|
||||
|
@ -19,22 +19,22 @@
|
||||
"dependencies": {
|
||||
"@hapi/hapi": "20.2.2",
|
||||
"@hapi/inert": "6.0.5",
|
||||
"sass": "1.51.0"
|
||||
"sass": "1.53.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@babel/core": "7.17.10",
|
||||
"@material/mwc-button": "0.25.3",
|
||||
"@material/mwc-checkbox": "0.25.3",
|
||||
"@material/mwc-dialog": "0.25.3",
|
||||
"@material/mwc-drawer": "0.25.3",
|
||||
"@material/mwc-fab": "0.25.3",
|
||||
"@material/mwc-formfield": "0.25.3",
|
||||
"@material/mwc-icon": "0.25.3",
|
||||
"@material/mwc-icon-button": "0.25.3",
|
||||
"@material/mwc-list": "0.25.3",
|
||||
"@material/mwc-select": "0.25.3",
|
||||
"@material/mwc-snackbar": "0.25.3",
|
||||
"@material/mwc-textfield": "0.25.3",
|
||||
"@babel/core": "7.18.5",
|
||||
"@material/mwc-button": "0.26.1",
|
||||
"@material/mwc-checkbox": "0.26.1",
|
||||
"@material/mwc-dialog": "0.26.1",
|
||||
"@material/mwc-drawer": "0.26.1",
|
||||
"@material/mwc-fab": "0.26.1",
|
||||
"@material/mwc-formfield": "0.26.1",
|
||||
"@material/mwc-icon": "0.26.1",
|
||||
"@material/mwc-icon-button": "0.26.1",
|
||||
"@material/mwc-list": "0.26.1",
|
||||
"@material/mwc-select": "0.26.1",
|
||||
"@material/mwc-snackbar": "0.26.1",
|
||||
"@material/mwc-textfield": "0.26.1",
|
||||
"@polymer/app-layout": "3.1.0",
|
||||
"@polymer/iron-collapse": "3.0.1",
|
||||
"@polymer/iron-flex-layout": "3.0.1",
|
||||
@ -58,21 +58,21 @@
|
||||
"@rollup/plugin-commonjs": "22.0.0",
|
||||
"@rollup/plugin-node-resolve": "13.3.0",
|
||||
"@rollup/plugin-replace": "4.0.0",
|
||||
"@vaadin/grid": "23.0.7",
|
||||
"@vaadin/icons": "23.0.7",
|
||||
"@vaadin/password-field": "23.0.7",
|
||||
"@vaadin/grid": "23.1.1",
|
||||
"@vaadin/icons": "23.1.1",
|
||||
"@vaadin/password-field": "23.1.1",
|
||||
"asmcrypto.js": "2.3.2",
|
||||
"bcryptjs": "2.4.3",
|
||||
"epml": "0.3.3",
|
||||
"file-saver": "2.0.5",
|
||||
"lit": "2.2.3",
|
||||
"lit": "2.2.6",
|
||||
"lit-translate": "2.0.1",
|
||||
"postcss": "8.4.13",
|
||||
"postcss": "8.4.14",
|
||||
"pwa-helpers": "0.9.1",
|
||||
"random-sentence-generator": "0.0.8",
|
||||
"redux": "4.2.0",
|
||||
"redux-thunk": "2.4.1",
|
||||
"rollup": "2.72.0",
|
||||
"rollup": "2.75.7",
|
||||
"rollup-plugin-node-globals": "1.4.0",
|
||||
"rollup-plugin-postcss": "4.0.2",
|
||||
"rollup-plugin-progress": "1.1.2",
|
||||
|
@ -67,10 +67,12 @@ class LanguageSelector extends connect(store)(LitElement) {
|
||||
<option value="hu">HU - ${translate("selectmenu.hungarian")}</option>
|
||||
<option value="hindi">IN - ${translate("selectmenu.hindi")}</option>
|
||||
<option value="it">IT - ${translate("selectmenu.italian")}</option>
|
||||
<option value="ko">KO - ${translate("selectmenu.korean")}</option>
|
||||
<option value="no">NO - ${translate("selectmenu.norwegian")}</option>
|
||||
<option value="pl">PL - ${translate("selectmenu.polish")}</option>
|
||||
<option value="pt">PT - ${translate("selectmenu.portuguese")}</option>
|
||||
<option value="rs">RS - ${translate("selectmenu.serbian")}</option>
|
||||
<option value="ro">RO - ${translate("selectmenu.romanian")}</option>
|
||||
<option value="ru">RU - ${translate("selectmenu.russian")}</option>
|
||||
<option value="zht">ZHT - ${translate("selectmenu.chinese2")}</option>
|
||||
<option value="zhc">ZHC - ${translate("selectmenu.chinese1")}</option>
|
||||
|
@ -617,9 +617,12 @@ class LoginSection extends connect(store)(LitElement) {
|
||||
|
||||
// First decrypt...
|
||||
this.loadingRipple.welcomeMessage = this.renderPrepareText()
|
||||
const x = e.clientX !== undefined ? e.clientX : e.explicitOriginalTarget.getBoundingClientRect().left + window.scrollX
|
||||
const y = e.clientY !== undefined ? e.clientY : e.explicitOriginalTarget.getBoundingClientRect().top + window.scrollY
|
||||
|
||||
this.loadingRipple.open({
|
||||
x: e.clientX,
|
||||
y: e.clientY
|
||||
x: x,
|
||||
y: y
|
||||
})
|
||||
.then(() => {
|
||||
const source = this.walletSources[type]()
|
||||
|
@ -78,12 +78,7 @@ class SidenavMenu extends connect(store)(LitElement) {
|
||||
return response.json()
|
||||
})
|
||||
.then(data => {
|
||||
const myNodeType = data.type
|
||||
if (myNodeType === 'light') {
|
||||
this.nodeType = 'light'
|
||||
} else {
|
||||
this.nodeType = 'full'
|
||||
}
|
||||
this.nodeType = data.type
|
||||
})
|
||||
.catch(err => {
|
||||
console.error('Request failed', err);
|
||||
@ -91,7 +86,7 @@ class SidenavMenu extends connect(store)(LitElement) {
|
||||
}
|
||||
|
||||
renderNodeTypeMenu() {
|
||||
if (this.nodeType === 'light') {
|
||||
if (this.nodeType === 'lite') {
|
||||
return html`
|
||||
<side-menu-item label="${translate("sidemenu.wallets")}" href="/app/wallet" selected>
|
||||
<vaadin-icon icon="vaadin:wallet" slot="icon"></vaadin-icon>
|
||||
|
@ -17,24 +17,24 @@
|
||||
"author": "QORTAL <admin@qortal.org>",
|
||||
"license": "GPL-3.0",
|
||||
"dependencies": {
|
||||
"@material/mwc-list": "0.25.3",
|
||||
"@material/mwc-select": "0.25.3",
|
||||
"@material/mwc-list": "0.26.1",
|
||||
"@material/mwc-select": "0.26.1",
|
||||
"emoji-picker-js": "https://github.com/Qortal/emoji-picker-js"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@babel/core": "7.17.10",
|
||||
"@babel/core": "7.18.5",
|
||||
"@github/time-elements": "3.1.2",
|
||||
"@material/mwc-button": "0.25.3",
|
||||
"@material/mwc-checkbox": "0.25.3",
|
||||
"@material/mwc-dialog": "0.25.3",
|
||||
"@material/mwc-formfield": "0.25.3",
|
||||
"@material/mwc-icon": "0.25.3",
|
||||
"@material/mwc-icon-button": "0.25.3",
|
||||
"@material/mwc-slider": "0.25.3",
|
||||
"@material/mwc-snackbar": "0.25.3",
|
||||
"@material/mwc-tab": "0.25.3",
|
||||
"@material/mwc-tab-bar": "0.25.3",
|
||||
"@material/mwc-textfield": "0.25.3",
|
||||
"@material/mwc-button": "0.26.1",
|
||||
"@material/mwc-checkbox": "0.26.1",
|
||||
"@material/mwc-dialog": "0.26.1",
|
||||
"@material/mwc-formfield": "0.26.1",
|
||||
"@material/mwc-icon": "0.26.1",
|
||||
"@material/mwc-icon-button": "0.26.1",
|
||||
"@material/mwc-slider": "0.26.1",
|
||||
"@material/mwc-snackbar": "0.26.1",
|
||||
"@material/mwc-tab": "0.26.1",
|
||||
"@material/mwc-tab-bar": "0.26.1",
|
||||
"@material/mwc-textfield": "0.26.1",
|
||||
"@polymer/iron-icons": "3.0.1",
|
||||
"@polymer/paper-icon-button": "3.0.2",
|
||||
"@polymer/paper-progress": "3.0.1",
|
||||
@ -46,14 +46,14 @@
|
||||
"@rollup/plugin-commonjs": "22.0.0",
|
||||
"@rollup/plugin-node-resolve": "13.3.0",
|
||||
"@rollup/plugin-replace": "4.0.0",
|
||||
"@vaadin/button": "23.0.7",
|
||||
"@vaadin/grid": "23.0.7",
|
||||
"@vaadin/icons": "23.0.7",
|
||||
"@vaadin/button": "23.1.1",
|
||||
"@vaadin/grid": "23.1.1",
|
||||
"@vaadin/icons": "23.1.1",
|
||||
"epml": "0.3.3",
|
||||
"html-escaper": "3.0.3",
|
||||
"lit": "2.2.3",
|
||||
"lit": "2.2.6",
|
||||
"lit-translate": "2.0.1",
|
||||
"rollup": "2.72.0",
|
||||
"rollup": "2.75.7",
|
||||
"rollup-plugin-node-globals": "1.4.0",
|
||||
"rollup-plugin-progress": "1.1.2",
|
||||
"rollup-plugin-terser": "7.0.2"
|
||||
|
@ -10,6 +10,7 @@ registerTranslateConfig({
|
||||
import { escape, unescape } from 'html-escaper';
|
||||
import { inputKeyCodes } from '../../utils/keyCodes.js'
|
||||
import './ChatScroller.js'
|
||||
import './LevelFounder.js'
|
||||
import './NameMenu.js'
|
||||
import './TimeAgo.js'
|
||||
import { EmojiPicker } from 'emoji-picker-js';
|
||||
@ -29,6 +30,7 @@ class ChatPage extends LitElement {
|
||||
messages: { type: Array },
|
||||
_messages: { type: Array },
|
||||
newMessages: { type: Array },
|
||||
hideMessages: { type: Array },
|
||||
chatId: { type: String },
|
||||
myAddress: { type: String },
|
||||
isReceipient: { type: Boolean },
|
||||
@ -120,6 +122,7 @@ class ChatPage extends LitElement {
|
||||
this.messages = []
|
||||
this._messages = []
|
||||
this.newMessages = []
|
||||
this.hideMessages = JSON.parse(localStorage.getItem("MessageBlockedAddresses") || "[]")
|
||||
this._publicKey = { key: '', hasPubKey: false }
|
||||
this.messageSignature = ''
|
||||
this._initialMessages = []
|
||||
@ -354,31 +357,45 @@ class ChatPage extends LitElement {
|
||||
* @property sender and other info..
|
||||
*/
|
||||
chatMessageTemplate(messageObj) {
|
||||
let avatarImg = '';
|
||||
let nameMenu = '';
|
||||
const hidemsg = this.hideMessages
|
||||
|
||||
let avatarImg = ''
|
||||
let nameMenu = ''
|
||||
let levelFounder = ''
|
||||
let hideit = hidemsg.includes(messageObj.sender)
|
||||
|
||||
levelFounder = `<level-founder checkleveladdress="${messageObj.sender}"></level-founder>`
|
||||
|
||||
if (messageObj.senderName) {
|
||||
const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node];
|
||||
const nodeUrl = myNode.protocol + '://' + myNode.domain + ':' + myNode.port;
|
||||
const avatarUrl = `${nodeUrl}/arbitrary/THUMBNAIL/${messageObj.senderName}/qortal_avatar?async=true&apiKey=${myNode.apiKey}`;
|
||||
avatarImg = `<img src="${avatarUrl}" style="max-width:100%; max-height:100%;" onerror="this.onerror=null; this.src='/img/incognito.png';" />`;
|
||||
const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node]
|
||||
const nodeUrl = myNode.protocol + '://' + myNode.domain + ':' + myNode.port
|
||||
const avatarUrl = `${nodeUrl}/arbitrary/THUMBNAIL/${messageObj.senderName}/qortal_avatar?async=true&apiKey=${myNode.apiKey}`
|
||||
avatarImg = `<img src="${avatarUrl}" style="max-width:100%; max-height:100%;" onerror="this.onerror=null; this.src='/img/incognito.png';" />`
|
||||
}
|
||||
|
||||
if (messageObj.sender === this.myAddress) {
|
||||
nameMenu = `${messageObj.senderName ? messageObj.senderName : messageObj.sender}`
|
||||
nameMenu = `<span style="color: #03a9f4;">${messageObj.senderName ? messageObj.senderName : messageObj.sender}</span>`
|
||||
} else {
|
||||
nameMenu = `<name-menu toblockaddress="${messageObj.sender}" nametodialog="${messageObj.senderName ? messageObj.senderName : messageObj.sender}"></name-menu>`
|
||||
}
|
||||
|
||||
return `
|
||||
<li class="clearfix">
|
||||
<div class="message-data ${messageObj.sender === this.selectedAddress.address ? "align-right" : ""}">
|
||||
<span class="message-data-name">${nameMenu}</span>
|
||||
<span class="message-data-time"><message-time timestamp=${messageObj.timestamp}></message-time></span>
|
||||
</div>
|
||||
<div class="message-data-avatar" style="width:42px; height:42px; ${messageObj.sender === this.selectedAddress.address ? "float:right;" : "float:left;"} margin:3px;">${avatarImg}</div>
|
||||
<div class="message ${messageObj.sender === this.selectedAddress.address ? "my-message float-right" : "other-message float-left"}">${this.emojiPicker.parse(escape(messageObj.decodedMessage))}</div>
|
||||
</li>
|
||||
`
|
||||
if ( hideit === true ) {
|
||||
return `
|
||||
<li class="clearfix"></li>
|
||||
`
|
||||
} else {
|
||||
return `
|
||||
<li class="clearfix">
|
||||
<div class="message-data ${messageObj.sender === this.selectedAddress.address ? "" : ""}">
|
||||
<span class="message-data-name">${nameMenu}</span>
|
||||
<span class="message-data-level">${levelFounder}</span>
|
||||
<span class="message-data-time"><message-time timestamp=${messageObj.timestamp}></message-time></span>
|
||||
</div>
|
||||
<div class="message-data-avatar" style="width:42px; height:42px; ${messageObj.sender === this.selectedAddress.address ? "float:left;" : "float:left;"} margin:3px;">${avatarImg}</div>
|
||||
<div class="message ${messageObj.sender === this.selectedAddress.address ? "my-message float-left" : "other-message float-left"}">${this.emojiPicker.parse(escape(messageObj.decodedMessage))}</div>
|
||||
</li>
|
||||
`
|
||||
}
|
||||
}
|
||||
|
||||
renderNewMessage(newMessage) {
|
||||
|
@ -2,6 +2,7 @@ import { LitElement, html, css } from 'lit'
|
||||
import { render } from 'lit/html.js'
|
||||
import { Epml } from '../../../epml.js'
|
||||
|
||||
import './LevelFounder.js'
|
||||
import './NameMenu.js'
|
||||
|
||||
import '@material/mwc-button'
|
||||
@ -18,7 +19,8 @@ class ChatScroller extends LitElement {
|
||||
emojiPicker: { attribute: false },
|
||||
escapeHTML: { attribute: false },
|
||||
initialMessages: { type: Array }, // First set of messages to load.. 15 messages max ( props )
|
||||
messages: { type: Array }
|
||||
messages: { type: Array },
|
||||
hideMessages: { type: Array }
|
||||
}
|
||||
}
|
||||
|
||||
@ -68,7 +70,9 @@ class ChatScroller extends LitElement {
|
||||
}
|
||||
|
||||
.message-data {
|
||||
width: 92%;
|
||||
margin-bottom: 15px;
|
||||
margin-left: 50px;
|
||||
}
|
||||
|
||||
.message-data-name {
|
||||
@ -83,6 +87,13 @@ class ChatScroller extends LitElement {
|
||||
padding-bottom: 4px;
|
||||
}
|
||||
|
||||
.message-data-level {
|
||||
color: #03a9f4;
|
||||
font-size: 13px;
|
||||
padding-left: 8px;
|
||||
padding-bottom: 4px;
|
||||
}
|
||||
|
||||
.message {
|
||||
color: black;
|
||||
padding: 12px 10px;
|
||||
@ -125,8 +136,13 @@ class ChatScroller extends LitElement {
|
||||
}
|
||||
|
||||
.my-message {
|
||||
background: #ddd;
|
||||
border: 2px #ccc solid;
|
||||
background: #d1d1d1;
|
||||
border: 2px solid #eeeeee;
|
||||
}
|
||||
|
||||
.my-message:after {
|
||||
border-bottom-color: #d1d1d1;
|
||||
left: 7%;
|
||||
}
|
||||
|
||||
.other-message {
|
||||
@ -176,6 +192,7 @@ class ChatScroller extends LitElement {
|
||||
this._upObserverhandler = this._upObserverhandler.bind(this)
|
||||
this.isLoading = false
|
||||
this.myAddress = window.parent.reduxStore.getState().app.selectedAddress.address
|
||||
this.hideMessages = JSON.parse(localStorage.getItem("MessageBlockedAddresses") || "[]")
|
||||
}
|
||||
|
||||
|
||||
@ -201,32 +218,45 @@ class ChatScroller extends LitElement {
|
||||
}
|
||||
|
||||
chatMessageTemplate(messageObj) {
|
||||
let avatarImg = '';
|
||||
let nameMenu = '';
|
||||
const hidemsg = this.hideMessages
|
||||
|
||||
let avatarImg = ''
|
||||
let nameMenu = ''
|
||||
let levelFounder = ''
|
||||
let hideit = hidemsg.includes(messageObj.sender)
|
||||
|
||||
levelFounder = `<level-founder checkleveladdress="${messageObj.sender}"></level-founder>`
|
||||
|
||||
if (messageObj.senderName) {
|
||||
const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node];
|
||||
const nodeUrl = myNode.protocol + '://' + myNode.domain + ':' + myNode.port;
|
||||
const avatarUrl = `${nodeUrl}/arbitrary/THUMBNAIL/${messageObj.senderName}/qortal_avatar?async=true&apiKey=${myNode.apiKey}`;
|
||||
avatarImg = `<img src="${avatarUrl}" style="max-width:100%; max-height:100%;" onerror="this.onerror=null; this.src='/img/incognito.png';" />`;
|
||||
const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node]
|
||||
const nodeUrl = myNode.protocol + '://' + myNode.domain + ':' + myNode.port
|
||||
const avatarUrl = `${nodeUrl}/arbitrary/THUMBNAIL/${messageObj.senderName}/qortal_avatar?async=true&apiKey=${myNode.apiKey}`
|
||||
avatarImg = `<img src="${avatarUrl}" style="max-width:100%; max-height:100%;" onerror="this.onerror=null; this.src='/img/incognito.png';" />`
|
||||
}
|
||||
|
||||
if (messageObj.sender === this.myAddress) {
|
||||
nameMenu = `${messageObj.senderName ? messageObj.senderName : messageObj.sender}`
|
||||
nameMenu = `<span style="color: #03a9f4;">${messageObj.senderName ? messageObj.senderName : messageObj.sender}</span>`
|
||||
} else {
|
||||
nameMenu = `<name-menu toblockaddress="${messageObj.sender}" nametodialog="${messageObj.senderName ? messageObj.senderName : messageObj.sender}"></name-menu>`
|
||||
}
|
||||
|
||||
return `
|
||||
<li class="clearfix">
|
||||
<div class="message-data ${messageObj.sender === this.myAddress ? "align-right" : ""}">
|
||||
<span class="message-data-name">${nameMenu}</span>
|
||||
<span class="message-data-time"><message-time timestamp=${messageObj.timestamp}></message-time></span>
|
||||
if ( hideit === true ) {
|
||||
return `
|
||||
<li class="clearfix"></li>
|
||||
`
|
||||
} else {
|
||||
return `
|
||||
<li class="clearfix">
|
||||
<div class="message-data ${messageObj.sender === this.myAddress ? "" : ""}">
|
||||
<span class="message-data-name">${nameMenu}</span>
|
||||
<span class="message-data-level">${levelFounder}</span>
|
||||
<span class="message-data-time"><message-time timestamp=${messageObj.timestamp}></message-time></span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="message-data-avatar" style="width:42px; height:42px; ${messageObj.sender === this.myAddress ? "float:right;" : "float:left;"} margin:3px;">${avatarImg}</div>
|
||||
<div id="messageContent" class="message ${messageObj.sender === this.myAddress ? "my-message float-right" : "other-message float-left"}">${this.emojiPicker.parse(this.escapeHTML(messageObj.decodedMessage))}</div>
|
||||
</li>
|
||||
`
|
||||
<div class="message-data-avatar" style="width:42px; height:42px; ${messageObj.sender === this.myAddress ? "float:left;" : "float:left;"} margin:3px;">${avatarImg}</div>
|
||||
<div id="messageContent" class="message ${messageObj.sender === this.myAddress ? "my-message float-left" : "other-message float-left"}">${this.emojiPicker.parse(this.escapeHTML(messageObj.decodedMessage))}</div>
|
||||
</li>
|
||||
`
|
||||
}
|
||||
}
|
||||
|
||||
renderChatMessages(messages) {
|
||||
|
192
qortal-ui-plugins/plugins/core/components/LevelFounder.js
Normal file
192
qortal-ui-plugins/plugins/core/components/LevelFounder.js
Normal file
@ -0,0 +1,192 @@
|
||||
import { LitElement, html, css } from 'lit'
|
||||
import { render } from 'lit/html.js'
|
||||
import { Epml } from '../../../epml.js'
|
||||
import snackbar from './snackbar.js'
|
||||
import { use, get, translate, translateUnsafeHTML, registerTranslateConfig } from 'lit-translate'
|
||||
|
||||
registerTranslateConfig({
|
||||
loader: lang => fetch(`/language/${lang}.json`).then(res => res.json())
|
||||
})
|
||||
|
||||
import '@polymer/paper-tooltip/paper-tooltip.js'
|
||||
|
||||
const parentEpml = new Epml({ type: 'WINDOW', source: window.parent })
|
||||
|
||||
class LevelFounder extends LitElement {
|
||||
static get properties() {
|
||||
return {
|
||||
checkleveladdress: { type: String, attribute: true },
|
||||
selectedAddress: { type: Object },
|
||||
config: { type: Object },
|
||||
memberInfo: { type: Array }
|
||||
}
|
||||
}
|
||||
|
||||
static get styles() {
|
||||
return css`
|
||||
* {
|
||||
--mdc-theme-primary: rgb(3, 169, 244);
|
||||
--mdc-theme-secondary: var(--mdc-theme-primary);
|
||||
--mdc-dialog-content-ink-color: var(--black);
|
||||
--mdc-theme-surface: var(--white);
|
||||
--mdc-theme-text-primary-on-background: var(--black);
|
||||
--paper-input-container-focus-color: var(--mdc-theme-primary);
|
||||
--lumo-primary-text-color: rgb(0, 167, 245);
|
||||
--lumo-primary-color-50pct: rgba(0, 167, 245, 0.5);
|
||||
--lumo-primary-color-10pct: rgba(0, 167, 245, 0.1);
|
||||
--lumo-primary-color: hsl(199, 100%, 48%);
|
||||
--lumo-base-color: var(--white);
|
||||
--lumo-body-text-color: var(--black);
|
||||
}
|
||||
|
||||
h2 {
|
||||
margin:0;
|
||||
}
|
||||
|
||||
h2, h3, h4, h5 {
|
||||
color:# var(--black);
|
||||
font-weight: 400;
|
||||
}
|
||||
|
||||
.level {
|
||||
position: relative;
|
||||
display: inline;
|
||||
}
|
||||
|
||||
.custom {
|
||||
--paper-tooltip-background: #03a9f4;
|
||||
--paper-tooltip-text-color: #fff;
|
||||
}
|
||||
|
||||
.badge {
|
||||
align-items: center;
|
||||
background: #03a9f4;
|
||||
border: 1px solid transparent;
|
||||
border-radius: 99em;
|
||||
color: #fff;
|
||||
display: flex;
|
||||
font-size: 10px;
|
||||
font-weight: 400;
|
||||
height: 12px;
|
||||
justify-content: center;
|
||||
line-height: 1;
|
||||
min-width: 12px;
|
||||
position: absolute;
|
||||
left: -16px;
|
||||
top: -12px;
|
||||
cursor: pointer;
|
||||
}
|
||||
`
|
||||
}
|
||||
|
||||
constructor() {
|
||||
super()
|
||||
this.memberInfo = []
|
||||
this.selectedAddress = window.parent.reduxStore.getState().app.selectedAddress.address
|
||||
}
|
||||
|
||||
render() {
|
||||
return html`
|
||||
<div class="level">
|
||||
${this.renderFounder()}
|
||||
${this.renderLevel()}
|
||||
</div>
|
||||
`
|
||||
}
|
||||
|
||||
firstUpdated() {
|
||||
|
||||
this.changeLanguage()
|
||||
this.checkAddressInfo()
|
||||
|
||||
window.addEventListener('storage', () => {
|
||||
const checkLanguage = localStorage.getItem('qortalLanguage')
|
||||
use(checkLanguage)
|
||||
})
|
||||
|
||||
let configLoaded = false
|
||||
|
||||
parentEpml.ready().then(() => {
|
||||
parentEpml.subscribe('selected_address', async selectedAddress => {
|
||||
this.selectedAddress = {}
|
||||
selectedAddress = JSON.parse(selectedAddress)
|
||||
if (!selectedAddress || Object.entries(selectedAddress).length === 0) return
|
||||
this.selectedAddress = selectedAddress
|
||||
})
|
||||
})
|
||||
parentEpml.imReady()
|
||||
}
|
||||
|
||||
changeLanguage() {
|
||||
const checkLanguage = localStorage.getItem('qortalLanguage')
|
||||
|
||||
if (checkLanguage === null || checkLanguage.length === 0) {
|
||||
localStorage.setItem('qortalLanguage', 'us')
|
||||
use('us')
|
||||
} else {
|
||||
use(checkLanguage)
|
||||
}
|
||||
}
|
||||
|
||||
async checkAddressInfo() {
|
||||
let toCheck = this.checkleveladdress
|
||||
const memberInfo = await parentEpml.request('apiCall', {
|
||||
url: `/addresses/${toCheck}`
|
||||
})
|
||||
this.memberInfo = memberInfo
|
||||
}
|
||||
|
||||
renderFounder() {
|
||||
let adressfounder = this.memberInfo.flags
|
||||
if (adressfounder === 1) {
|
||||
return html `
|
||||
<span id="founderTooltip" class="badge">F</span>
|
||||
<paper-tooltip class="custom" for="founderTooltip" position="top">FOUNDER</paper-tooltip>
|
||||
`
|
||||
} else {
|
||||
return html ``
|
||||
}
|
||||
}
|
||||
|
||||
renderLevel() {
|
||||
let adresslevel = this.memberInfo.level
|
||||
return html `
|
||||
<span id="levelTooltip">${translate("mintingpage.mchange27")} ${adresslevel}</span>
|
||||
`
|
||||
}
|
||||
|
||||
_textMenu(event) {
|
||||
const getSelectedText = () => {
|
||||
var text = "";
|
||||
if (typeof window.getSelection != "undefined") {
|
||||
text = window.getSelection().toString();
|
||||
} else if (typeof this.shadowRoot.selection != "undefined" && this.shadowRoot.selection.type == "Text") {
|
||||
text = this.shadowRoot.selection.createRange().text;
|
||||
}
|
||||
return text;
|
||||
}
|
||||
|
||||
const checkSelectedTextAndShowMenu = () => {
|
||||
let selectedText = getSelectedText();
|
||||
if (selectedText && typeof selectedText === 'string') {
|
||||
let _eve = { pageX: event.pageX, pageY: event.pageY, clientX: event.clientX, clientY: event.clientY }
|
||||
let textMenuObject = { selectedText: selectedText, eventObject: _eve, isFrame: true }
|
||||
parentEpml.request('openCopyTextMenu', textMenuObject)
|
||||
}
|
||||
}
|
||||
checkSelectedTextAndShowMenu()
|
||||
}
|
||||
|
||||
isEmptyArray(arr) {
|
||||
if (!arr) { return true }
|
||||
return arr.length === 0
|
||||
}
|
||||
|
||||
getApiKey() {
|
||||
const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node];
|
||||
let apiKey = myNode.apiKey;
|
||||
return apiKey;
|
||||
}
|
||||
}
|
||||
|
||||
window.customElements.define('level-founder', LevelFounder)
|
@ -250,9 +250,9 @@ class NameMenu extends LitElement {
|
||||
this.changeLanguage()
|
||||
this.getChatBlockedAdresses()
|
||||
|
||||
setInterval(() => {
|
||||
this.getChatBlockedAdresses();
|
||||
}, 60000)
|
||||
setInterval(() => {
|
||||
this.getChatBlockedAdresses();
|
||||
}, 60000)
|
||||
|
||||
window.addEventListener('storage', () => {
|
||||
const checkLanguage = localStorage.getItem('qortalLanguage')
|
||||
@ -350,6 +350,12 @@ class NameMenu extends LitElement {
|
||||
}
|
||||
}
|
||||
|
||||
relMessages() {
|
||||
setTimeout(() => {
|
||||
window.location.href = window.location.href.split( '#' )[0]
|
||||
}, 500)
|
||||
}
|
||||
|
||||
async getChatBlockedAdresses() {
|
||||
const chatBlockedAdresses = await parentEpml.request('apiCall', {
|
||||
url: `/lists/blockedAddresses?apiKey=${this.getApiKey()}`
|
||||
@ -386,6 +392,7 @@ class NameMenu extends LitElement {
|
||||
labelText: `${err1string}`,
|
||||
dismiss: true
|
||||
})
|
||||
this.relMessages()
|
||||
} else {
|
||||
this.closeMenu()
|
||||
this.shadowRoot.querySelector('#blockNameDialog').close()
|
||||
|
599
qortal-ui-plugins/plugins/core/components/QRCode.js
Normal file
599
qortal-ui-plugins/plugins/core/components/QRCode.js
Normal file
@ -0,0 +1,599 @@
|
||||
var VERSIONS = [
|
||||
null,
|
||||
[[10, 7,17,13], [ 1, 1, 1, 1], []],
|
||||
[[16,10,28,22], [ 1, 1, 1, 1], [4,16]],
|
||||
[[26,15,22,18], [ 1, 1, 2, 2], [4,20]],
|
||||
[[18,20,16,26], [ 2, 1, 4, 2], [4,24]],
|
||||
[[24,26,22,18], [ 2, 1, 4, 4], [4,28]],
|
||||
[[16,18,28,24], [ 4, 2, 4, 4], [4,32]],
|
||||
[[18,20,26,18], [ 4, 2, 5, 6], [4,20,36]],
|
||||
[[22,24,26,22], [ 4, 2, 6, 6], [4,22,40]],
|
||||
[[22,30,24,20], [ 5, 2, 8, 8], [4,24,44]],
|
||||
[[26,18,28,24], [ 5, 4, 8, 8], [4,26,48]],
|
||||
[[30,20,24,28], [ 5, 4,11, 8], [4,28,52]],
|
||||
[[22,24,28,26], [ 8, 4,11,10], [4,30,56]],
|
||||
[[22,26,22,24], [ 9, 4,16,12], [4,32,60]],
|
||||
[[24,30,24,20], [ 9, 4,16,16], [4,24,44,64]],
|
||||
[[24,22,24,30], [10, 6,18,12], [4,24,46,68]],
|
||||
[[28,24,30,24], [10, 6,16,17], [4,24,48,72]],
|
||||
[[28,28,28,28], [11, 6,19,16], [4,28,52,76]],
|
||||
[[26,30,28,28], [13, 6,21,18], [4,28,54,80]],
|
||||
[[26,28,26,26], [14, 7,25,21], [4,28,56,84]],
|
||||
[[26,28,28,30], [16, 8,25,20], [4,32,60,88]],
|
||||
[[26,28,30,28], [17, 8,25,23], [4,26,48,70,92]],
|
||||
[[28,28,24,30], [17, 9,34,23], [4,24,48,72,96]],
|
||||
[[28,30,30,30], [18, 9,30,25], [4,28,52,76,100]],
|
||||
[[28,30,30,30], [20,10,32,27], [4,26,52,78,104]],
|
||||
[[28,26,30,30], [21,12,35,29], [4,30,56,82,108]],
|
||||
[[28,28,30,28], [23,12,37,34], [4,28,56,84,112]],
|
||||
[[28,30,30,30], [25,12,40,34], [4,32,60,88,116]],
|
||||
[[28,30,30,30], [26,13,42,35], [4,24,48,72,96,120]],
|
||||
[[28,30,30,30], [28,14,45,38], [4,28,52,76,100,124]],
|
||||
[[28,30,30,30], [29,15,48,40], [4,24,50,76,102,128]],
|
||||
[[28,30,30,30], [31,16,51,43], [4,28,54,80,106,132]],
|
||||
[[28,30,30,30], [33,17,54,45], [4,32,58,84,110,136]],
|
||||
[[28,30,30,30], [35,18,57,48], [4,28,56,84,112,140]],
|
||||
[[28,30,30,30], [37,19,60,51], [4,32,60,88,116,144]],
|
||||
[[28,30,30,30], [38,19,63,53], [4,28,52,76,100,124,148]],
|
||||
[[28,30,30,30], [40,20,66,56], [4,22,48,74,100,126,152]],
|
||||
[[28,30,30,30], [43,21,70,59], [4,26,52,78,104,130,156]],
|
||||
[[28,30,30,30], [45,22,74,62], [4,30,56,82,108,134,160]],
|
||||
[[28,30,30,30], [47,24,77,65], [4,24,52,80,108,136,164]],
|
||||
[[28,30,30,30], [49,25,81,68], [4,28,56,84,112,140,168]]];
|
||||
|
||||
var MODE_TERMINATOR = 0;
|
||||
var MODE_NUMERIC = 1, MODE_ALPHANUMERIC = 2, MODE_OCTET = 4, MODE_KANJI = 8;
|
||||
|
||||
var NUMERIC_REGEXP = /^\d*$/;
|
||||
var ALPHANUMERIC_REGEXP = /^[A-Za-z0-9 $%*+\-./:_]*$/;
|
||||
var ALPHANUMERIC_OUT_REGEXP = /^[A-Z0-9 $%*+\-./:_]*$/;
|
||||
|
||||
var ECCLEVEL_L = 1, ECCLEVEL_M = 0, ECCLEVEL_Q = 3, ECCLEVEL_H = 2;
|
||||
|
||||
var GF256_MAP = [], GF256_INVMAP = [-1];
|
||||
for (var i = 0, v = 1; i < 255; ++i) {
|
||||
GF256_MAP.push(v);
|
||||
GF256_INVMAP[v] = i;
|
||||
v = (v * 2) ^ (v >= 128 ? 0x11d : 0);
|
||||
}
|
||||
|
||||
var GF256_GENPOLY = [[]];
|
||||
for (var i = 0; i < 30; ++i) {
|
||||
var prevpoly = GF256_GENPOLY[i], poly = [];
|
||||
for (var j = 0; j <= i; ++j) {
|
||||
var a = (j < i ? GF256_MAP[prevpoly[j]] : 0);
|
||||
var b = GF256_MAP[(i + (prevpoly[j-1] || 0)) % 255];
|
||||
poly.push(GF256_INVMAP[a ^ b]);
|
||||
}
|
||||
GF256_GENPOLY.push(poly);
|
||||
}
|
||||
|
||||
var ALPHANUMERIC_MAP = {};
|
||||
for (var i = 0; i < 45; ++i) {
|
||||
ALPHANUMERIC_MAP['0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:'.charAt(i)] = i;
|
||||
}
|
||||
|
||||
var MASKFUNCS = [
|
||||
function(i,j) { return (i+j) % 2 == 0; },
|
||||
function(i,j) { return i % 2 == 0; },
|
||||
function(i,j) { return j % 3 == 0; },
|
||||
function(i,j) { return (i+j) % 3 == 0; },
|
||||
function(i,j) { return (((i/2)|0) + ((j/3)|0)) % 2 == 0; },
|
||||
function(i,j) { return (i*j) % 2 + (i*j) % 3 == 0; },
|
||||
function(i,j) { return ((i*j) % 2 + (i*j) % 3) % 2 == 0; },
|
||||
function(i,j) { return ((i+j) % 2 + (i*j) % 3) % 2 == 0; }];
|
||||
|
||||
var needsverinfo = function(ver) { return ver > 6; };
|
||||
|
||||
var getsizebyver = function(ver) { return 4 * ver + 17; };
|
||||
|
||||
var nfullbits = function(ver) {
|
||||
var v = VERSIONS[ver];
|
||||
var nbits = 16*ver*ver + 128*ver + 64;
|
||||
if (needsverinfo(ver)) nbits -= 36;
|
||||
if (v[2].length) {
|
||||
nbits -= 25 * v[2].length * v[2].length - 10 * v[2].length - 55;
|
||||
}
|
||||
return nbits;
|
||||
};
|
||||
|
||||
var ndatabits = function(ver, ecclevel) {
|
||||
var nbits = nfullbits(ver) & ~7;
|
||||
var v = VERSIONS[ver];
|
||||
nbits -= 8 * v[0][ecclevel] * v[1][ecclevel];
|
||||
return nbits;
|
||||
}
|
||||
|
||||
var ndatalenbits = function(ver, mode) {
|
||||
switch (mode) {
|
||||
case MODE_NUMERIC: return (ver < 10 ? 10 : ver < 27 ? 12 : 14);
|
||||
case MODE_ALPHANUMERIC: return (ver < 10 ? 9 : ver < 27 ? 11 : 13);
|
||||
case MODE_OCTET: return (ver < 10 ? 8 : 16);
|
||||
case MODE_KANJI: return (ver < 10 ? 8 : ver < 27 ? 10 : 12);
|
||||
}
|
||||
};
|
||||
|
||||
var getmaxdatalen = function(ver, mode, ecclevel) {
|
||||
var nbits = ndatabits(ver, ecclevel) - 4 - ndatalenbits(ver, mode);
|
||||
switch (mode) {
|
||||
case MODE_NUMERIC:
|
||||
return ((nbits/10) | 0) * 3 + (nbits%10 < 4 ? 0 : nbits%10 < 7 ? 1 : 2);
|
||||
case MODE_ALPHANUMERIC:
|
||||
return ((nbits/11) | 0) * 2 + (nbits%11 < 6 ? 0 : 1);
|
||||
case MODE_OCTET:
|
||||
return (nbits/8) | 0;
|
||||
case MODE_KANJI:
|
||||
return (nbits/13) | 0;
|
||||
}
|
||||
};
|
||||
|
||||
var validatedata = function(mode, data) {
|
||||
switch (mode) {
|
||||
case MODE_NUMERIC:
|
||||
if (!data.match(NUMERIC_REGEXP)) return null;
|
||||
return data;
|
||||
|
||||
case MODE_ALPHANUMERIC:
|
||||
if (!data.match(ALPHANUMERIC_REGEXP)) return null;
|
||||
return data.toUpperCase();
|
||||
|
||||
case MODE_OCTET:
|
||||
if (typeof data === 'string') {
|
||||
var newdata = [];
|
||||
for (var i = 0; i < data.length; ++i) {
|
||||
var ch = data.charCodeAt(i);
|
||||
if (ch < 0x80) {
|
||||
newdata.push(ch);
|
||||
} else if (ch < 0x800) {
|
||||
newdata.push(0xc0 | (ch >> 6),
|
||||
0x80 | (ch & 0x3f));
|
||||
} else if (ch < 0x10000) {
|
||||
newdata.push(0xe0 | (ch >> 12),
|
||||
0x80 | ((ch >> 6) & 0x3f),
|
||||
0x80 | (ch & 0x3f));
|
||||
} else {
|
||||
newdata.push(0xf0 | (ch >> 18),
|
||||
0x80 | ((ch >> 12) & 0x3f),
|
||||
0x80 | ((ch >> 6) & 0x3f),
|
||||
0x80 | (ch & 0x3f));
|
||||
}
|
||||
}
|
||||
return newdata;
|
||||
} else {
|
||||
return data;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
var encode = function(ver, mode, data, maxbuflen) {
|
||||
var buf = [];
|
||||
var bits = 0, remaining = 8;
|
||||
var datalen = data.length;
|
||||
|
||||
var pack = function(x, n) {
|
||||
if (n >= remaining) {
|
||||
buf.push(bits | (x >> (n -= remaining)));
|
||||
while (n >= 8) buf.push((x >> (n -= 8)) & 255);
|
||||
bits = 0;
|
||||
remaining = 8;
|
||||
}
|
||||
if (n > 0) bits |= (x & ((1 << n) - 1)) << (remaining -= n);
|
||||
};
|
||||
|
||||
var nlenbits = ndatalenbits(ver, mode);
|
||||
pack(mode, 4);
|
||||
pack(datalen, nlenbits);
|
||||
|
||||
switch (mode) {
|
||||
case MODE_NUMERIC:
|
||||
for (var i = 2; i < datalen; i += 3) {
|
||||
pack(parseInt(data.substring(i-2,i+1), 10), 10);
|
||||
}
|
||||
pack(parseInt(data.substring(i-2), 10), [0,4,7][datalen%3]);
|
||||
break;
|
||||
|
||||
case MODE_ALPHANUMERIC:
|
||||
for (var i = 1; i < datalen; i += 2) {
|
||||
pack(ALPHANUMERIC_MAP[data.charAt(i-1)] * 45 +
|
||||
ALPHANUMERIC_MAP[data.charAt(i)], 11);
|
||||
}
|
||||
if (datalen % 2 == 1) {
|
||||
pack(ALPHANUMERIC_MAP[data.charAt(i-1)], 6);
|
||||
}
|
||||
break;
|
||||
|
||||
case MODE_OCTET:
|
||||
for (var i = 0; i < datalen; ++i) {
|
||||
pack(data[i], 8);
|
||||
}
|
||||
break;
|
||||
};
|
||||
|
||||
pack(MODE_TERMINATOR, 4);
|
||||
if (remaining < 8) buf.push(bits);
|
||||
|
||||
while (buf.length + 1 < maxbuflen) buf.push(0xec, 0x11);
|
||||
if (buf.length < maxbuflen) buf.push(0xec);
|
||||
return buf;
|
||||
};
|
||||
|
||||
var calculateecc = function(poly, genpoly) {
|
||||
var modulus = poly.slice(0);
|
||||
var polylen = poly.length, genpolylen = genpoly.length;
|
||||
for (var i = 0; i < genpolylen; ++i) modulus.push(0);
|
||||
for (var i = 0; i < polylen; ) {
|
||||
var quotient = GF256_INVMAP[modulus[i++]];
|
||||
if (quotient >= 0) {
|
||||
for (var j = 0; j < genpolylen; ++j) {
|
||||
modulus[i+j] ^= GF256_MAP[(quotient + genpoly[j]) % 255];
|
||||
}
|
||||
}
|
||||
}
|
||||
return modulus.slice(polylen);
|
||||
};
|
||||
|
||||
var augumenteccs = function(poly, nblocks, genpoly) {
|
||||
var subsizes = [];
|
||||
var subsize = (poly.length / nblocks) | 0, subsize0 = 0;
|
||||
var pivot = nblocks - poly.length % nblocks;
|
||||
for (var i = 0; i < pivot; ++i) {
|
||||
subsizes.push(subsize0);
|
||||
subsize0 += subsize;
|
||||
}
|
||||
for (var i = pivot; i < nblocks; ++i) {
|
||||
subsizes.push(subsize0);
|
||||
subsize0 += subsize+1;
|
||||
}
|
||||
subsizes.push(subsize0);
|
||||
|
||||
var eccs = [];
|
||||
for (var i = 0; i < nblocks; ++i) {
|
||||
eccs.push(calculateecc(poly.slice(subsizes[i], subsizes[i+1]), genpoly));
|
||||
}
|
||||
|
||||
var result = [];
|
||||
var nitemsperblock = (poly.length / nblocks) | 0;
|
||||
for (var i = 0; i < nitemsperblock; ++i) {
|
||||
for (var j = 0; j < nblocks; ++j) {
|
||||
result.push(poly[subsizes[j] + i]);
|
||||
}
|
||||
}
|
||||
for (var j = pivot; j < nblocks; ++j) {
|
||||
result.push(poly[subsizes[j+1] - 1]);
|
||||
}
|
||||
for (var i = 0; i < genpoly.length; ++i) {
|
||||
for (var j = 0; j < nblocks; ++j) {
|
||||
result.push(eccs[j][i]);
|
||||
}
|
||||
}
|
||||
return result;
|
||||
};
|
||||
|
||||
var augumentbch = function(poly, p, genpoly, q) {
|
||||
var modulus = poly << q;
|
||||
for (var i = p - 1; i >= 0; --i) {
|
||||
if ((modulus >> (q+i)) & 1) modulus ^= genpoly << i;
|
||||
}
|
||||
return (poly << q) | modulus;
|
||||
};
|
||||
|
||||
var makebasematrix = function(ver) {
|
||||
var v = VERSIONS[ver], n = getsizebyver(ver);
|
||||
var matrix = [], reserved = [];
|
||||
for (var i = 0; i < n; ++i) {
|
||||
matrix.push([]);
|
||||
reserved.push([]);
|
||||
}
|
||||
|
||||
var blit = function(y, x, h, w, bits) {
|
||||
for (var i = 0; i < h; ++i) {
|
||||
for (var j = 0; j < w; ++j) {
|
||||
matrix[y+i][x+j] = (bits[i] >> j) & 1;
|
||||
reserved[y+i][x+j] = 1;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
blit(0, 0, 9, 9, [0x7f, 0x41, 0x5d, 0x5d, 0x5d, 0x41, 0x17f, 0x00, 0x40]);
|
||||
blit(n-8, 0, 8, 9, [0x100, 0x7f, 0x41, 0x5d, 0x5d, 0x5d, 0x41, 0x7f]);
|
||||
blit(0, n-8, 9, 8, [0xfe, 0x82, 0xba, 0xba, 0xba, 0x82, 0xfe, 0x00, 0x00]);
|
||||
|
||||
for (var i = 9; i < n-8; ++i) {
|
||||
matrix[6][i] = matrix[i][6] = ~i & 1;
|
||||
reserved[6][i] = reserved[i][6] = 1;
|
||||
}
|
||||
|
||||
var aligns = v[2], m = aligns.length;
|
||||
for (var i = 0; i < m; ++i) {
|
||||
var minj = (i==0 || i==m-1 ? 1 : 0), maxj = (i==0 ? m-1 : m);
|
||||
for (var j = minj; j < maxj; ++j) {
|
||||
blit(aligns[i], aligns[j], 5, 5, [0x1f, 0x11, 0x15, 0x11, 0x1f]);
|
||||
}
|
||||
}
|
||||
|
||||
if (needsverinfo(ver)) {
|
||||
var code = augumentbch(ver, 6, 0x1f25, 12);
|
||||
var k = 0;
|
||||
for (var i = 0; i < 6; ++i) {
|
||||
for (var j = 0; j < 3; ++j) {
|
||||
matrix[i][(n-11)+j] = matrix[(n-11)+j][i] = (code >> k++) & 1;
|
||||
reserved[i][(n-11)+j] = reserved[(n-11)+j][i] = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return {matrix: matrix, reserved: reserved};
|
||||
};
|
||||
|
||||
var putdata = function(matrix, reserved, buf) {
|
||||
var n = matrix.length;
|
||||
var k = 0, dir = -1;
|
||||
for (var i = n-1; i >= 0; i -= 2) {
|
||||
if (i == 6) --i;
|
||||
var jj = (dir < 0 ? n-1 : 0);
|
||||
for (var j = 0; j < n; ++j) {
|
||||
for (var ii = i; ii > i-2; --ii) {
|
||||
if (!reserved[jj][ii]) {
|
||||
matrix[jj][ii] = (buf[k >> 3] >> (~k&7)) & 1;
|
||||
++k;
|
||||
}
|
||||
}
|
||||
jj += dir;
|
||||
}
|
||||
dir = -dir;
|
||||
}
|
||||
return matrix;
|
||||
};
|
||||
|
||||
var maskdata = function(matrix, reserved, mask) {
|
||||
var maskf = MASKFUNCS[mask];
|
||||
var n = matrix.length;
|
||||
for (var i = 0; i < n; ++i) {
|
||||
for (var j = 0; j < n; ++j) {
|
||||
if (!reserved[i][j]) matrix[i][j] ^= maskf(i,j);
|
||||
}
|
||||
}
|
||||
return matrix;
|
||||
}
|
||||
|
||||
var putformatinfo = function(matrix, reserved, ecclevel, mask) {
|
||||
var n = matrix.length;
|
||||
var code = augumentbch((ecclevel << 3) | mask, 5, 0x537, 10) ^ 0x5412;
|
||||
for (var i = 0; i < 15; ++i) {
|
||||
var r = [0,1,2,3,4,5,7,8,n-7,n-6,n-5,n-4,n-3,n-2,n-1][i];
|
||||
var c = [n-1,n-2,n-3,n-4,n-5,n-6,n-7,n-8,7,5,4,3,2,1,0][i];
|
||||
matrix[r][8] = matrix[8][c] = (code >> i) & 1;
|
||||
}
|
||||
return matrix;
|
||||
};
|
||||
|
||||
var evaluatematrix = function(matrix) {
|
||||
var PENALTY_CONSECUTIVE = 3;
|
||||
var PENALTY_TWOBYTWO = 3;
|
||||
var PENALTY_FINDERLIKE = 40;
|
||||
var PENALTY_DENSITY = 10;
|
||||
|
||||
var evaluategroup = function(groups) {
|
||||
var score = 0;
|
||||
for (var i = 0; i < groups.length; ++i) {
|
||||
if (groups[i] >= 5) score += PENALTY_CONSECUTIVE + (groups[i]-5);
|
||||
}
|
||||
for (var i = 5; i < groups.length; i += 2) {
|
||||
var p = groups[i];
|
||||
if (groups[i-1] == p && groups[i-2] == 3*p && groups[i-3] == p &&
|
||||
groups[i-4] == p && (groups[i-5] >= 4*p || groups[i+1] >= 4*p)) {
|
||||
score += PENALTY_FINDERLIKE;
|
||||
}
|
||||
}
|
||||
return score;
|
||||
};
|
||||
|
||||
var n = matrix.length;
|
||||
var score = 0, nblacks = 0;
|
||||
for (var i = 0; i < n; ++i) {
|
||||
var row = matrix[i];
|
||||
var groups;
|
||||
|
||||
groups = [0];
|
||||
for (var j = 0; j < n; ) {
|
||||
var k;
|
||||
for (k = 0; j < n && row[j]; ++k) ++j;
|
||||
groups.push(k);
|
||||
for (k = 0; j < n && !row[j]; ++k) ++j;
|
||||
groups.push(k);
|
||||
}
|
||||
score += evaluategroup(groups);
|
||||
|
||||
groups = [0];
|
||||
for (var j = 0; j < n; ) {
|
||||
var k;
|
||||
for (k = 0; j < n && matrix[j][i]; ++k) ++j;
|
||||
groups.push(k);
|
||||
for (k = 0; j < n && !matrix[j][i]; ++k) ++j;
|
||||
groups.push(k);
|
||||
}
|
||||
score += evaluategroup(groups);
|
||||
|
||||
var nextrow = matrix[i+1] || [];
|
||||
nblacks += row[0];
|
||||
for (var j = 1; j < n; ++j) {
|
||||
var p = row[j];
|
||||
nblacks += p;
|
||||
if (row[j-1] == p && nextrow[j] === p && nextrow[j-1] === p) {
|
||||
score += PENALTY_TWOBYTWO;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
score += PENALTY_DENSITY * ((Math.abs(nblacks / n / n - 0.5) / 0.05) | 0);
|
||||
return score;
|
||||
};
|
||||
|
||||
var generate = function(data, ver, mode, ecclevel, mask) {
|
||||
var v = VERSIONS[ver];
|
||||
var buf = encode(ver, mode, data, ndatabits(ver, ecclevel) >> 3);
|
||||
buf = augumenteccs(buf, v[1][ecclevel], GF256_GENPOLY[v[0][ecclevel]]);
|
||||
|
||||
var result = makebasematrix(ver);
|
||||
var matrix = result.matrix, reserved = result.reserved;
|
||||
putdata(matrix, reserved, buf);
|
||||
|
||||
if (mask < 0) {
|
||||
maskdata(matrix, reserved, 0);
|
||||
putformatinfo(matrix, reserved, ecclevel, 0);
|
||||
var bestmask = 0, bestscore = evaluatematrix(matrix);
|
||||
maskdata(matrix, reserved, 0);
|
||||
for (mask = 1; mask < 8; ++mask) {
|
||||
maskdata(matrix, reserved, mask);
|
||||
putformatinfo(matrix, reserved, ecclevel, mask);
|
||||
var score = evaluatematrix(matrix);
|
||||
if (bestscore > score) {
|
||||
bestscore = score;
|
||||
bestmask = mask;
|
||||
}
|
||||
maskdata(matrix, reserved, mask);
|
||||
}
|
||||
mask = bestmask;
|
||||
}
|
||||
|
||||
maskdata(matrix, reserved, mask);
|
||||
putformatinfo(matrix, reserved, ecclevel, mask);
|
||||
return matrix;
|
||||
};
|
||||
|
||||
var QRCode = {
|
||||
'generate': function(data, options) {
|
||||
var MODES = {'numeric': MODE_NUMERIC, 'alphanumeric': MODE_ALPHANUMERIC,
|
||||
'octet': MODE_OCTET};
|
||||
var ECCLEVELS = {'L': ECCLEVEL_L, 'M': ECCLEVEL_M, 'Q': ECCLEVEL_Q,
|
||||
'H': ECCLEVEL_H};
|
||||
|
||||
options = options || {};
|
||||
var ver = options.version || -1;
|
||||
var ecclevel = ECCLEVELS[(options.ecclevel || 'L').toUpperCase()];
|
||||
var mode = options.mode ? MODES[options.mode.toLowerCase()] : -1;
|
||||
var mask = 'mask' in options ? options.mask : -1;
|
||||
|
||||
if (mode < 0) {
|
||||
if (typeof data === 'string') {
|
||||
if (data.match(NUMERIC_REGEXP)) {
|
||||
mode = MODE_NUMERIC;
|
||||
} else if (data.match(ALPHANUMERIC_OUT_REGEXP)) {
|
||||
mode = MODE_ALPHANUMERIC;
|
||||
} else {
|
||||
mode = MODE_OCTET;
|
||||
}
|
||||
} else {
|
||||
mode = MODE_OCTET;
|
||||
}
|
||||
} else if (!(mode == MODE_NUMERIC || mode == MODE_ALPHANUMERIC ||
|
||||
mode == MODE_OCTET)) {
|
||||
throw 'invalid or unsupported mode';
|
||||
}
|
||||
|
||||
data = validatedata(mode, data);
|
||||
if (data === null) throw 'invalid data format';
|
||||
|
||||
if (ecclevel < 0 || ecclevel > 3) throw 'invalid ECC level';
|
||||
|
||||
if (ver < 0) {
|
||||
for (ver = 1; ver <= 40; ++ver) {
|
||||
if (data.length <= getmaxdatalen(ver, mode, ecclevel)) break;
|
||||
}
|
||||
if (ver > 40) throw 'too large data';
|
||||
} else if (ver < 1 || ver > 40) {
|
||||
throw 'invalid version';
|
||||
}
|
||||
|
||||
if (mask != -1 && (mask < 0 || mask > 8)) throw 'invalid mask';
|
||||
|
||||
return generate(data, ver, mode, ecclevel, mask);
|
||||
},
|
||||
|
||||
'generateHTML': function(data, options) {
|
||||
options = options || {};
|
||||
var matrix = QRCode['generate'](data, options);
|
||||
var modsize = Math.max(options.modulesize || 5, 0.5);
|
||||
var margin = Math.max(options.margin !== null ? options.margin : 4, 0.0);
|
||||
|
||||
var e = document.createElement('div');
|
||||
var n = matrix.length;
|
||||
var html = ['<table border="0" cellspacing="0" cellpadding="0" style="border:' + modsize*margin + 'px solid transparent;background:transparent;">'];
|
||||
for (var i = 0; i < n; ++i) {
|
||||
html.push('<tr>');
|
||||
for (var j = 0; j < n; ++j) {
|
||||
html.push('<td style="width:' + modsize + 'px;height:' + modsize + 'px' +
|
||||
(matrix[i][j] ? ';background:var(--black);' : '') + '"></td>');
|
||||
}
|
||||
html.push('</tr>');
|
||||
}
|
||||
e.className = 'qrcode';
|
||||
e.innerHTML = html.join('') + '</table>';
|
||||
return e;
|
||||
},
|
||||
|
||||
'generateSVG': function(data, options) {
|
||||
options = options || {};
|
||||
var matrix = QRCode['generate'](data, options);
|
||||
var n = matrix.length;
|
||||
var modsize = Math.max(options.modulesize || 5, 0.5);
|
||||
var margin = Math.max(options.margin? options.margin : 4, 0.0);
|
||||
var size = modsize * (n + 2 * margin);
|
||||
|
||||
var common = ' class= "fg"'+' width="'+modsize+'" height="'+modsize+'"/>';
|
||||
|
||||
var e = document.createElementNS('http://www.w3.org/2000/svg', 'svg');
|
||||
e.setAttribute('viewBox', '0 0 '+size+' '+size);
|
||||
e.setAttribute('style', 'shape-rendering:crispEdges');
|
||||
|
||||
var svg = [
|
||||
'<style scoped>.bg{fill:#FFF}.fg{fill:#03A9F4}</style>',
|
||||
'<rect class="bg" x="0" y="0"',
|
||||
'width="'+size+'" height="'+size+'"/>',
|
||||
];
|
||||
|
||||
var yo = margin * modsize;
|
||||
for (var y = 0; y < n; ++y) {
|
||||
var xo = margin * modsize;
|
||||
for (var x = 0; x < n; ++x) {
|
||||
if (matrix[y][x])
|
||||
svg.push('<rect x="'+xo+'" y="'+yo+'"', common);
|
||||
xo += modsize;
|
||||
}
|
||||
yo += modsize;
|
||||
}
|
||||
e.innerHTML = svg.join('');
|
||||
return e;
|
||||
},
|
||||
|
||||
'generatePNG': function(data, options) {
|
||||
options = options || {};
|
||||
var matrix = QRCode['generate'](data, options);
|
||||
var modsize = Math.max(options.modulesize || 5, 0.5);
|
||||
var margin = Math.max(options.margin != null ? options.margin : 4, 0.0);
|
||||
var n = matrix.length;
|
||||
var size = modsize * (n + 2 * margin);
|
||||
|
||||
var canvas = document.createElement('canvas'), context;
|
||||
canvas.width = canvas.height = size;
|
||||
context = canvas.getContext('2d');
|
||||
if (!context) throw 'canvas support is needed for PNG output';
|
||||
|
||||
context.fillStyle = '#fff';
|
||||
context.fillRect(0, 0, size, size);
|
||||
context.fillStyle = '#000';
|
||||
for (var i = 0; i < n; ++i) {
|
||||
for (var j = 0; j < n; ++j) {
|
||||
if (matrix[i][j]) {
|
||||
context.fillRect(modsize * (margin + j),
|
||||
modsize * (margin + i),
|
||||
modsize, modsize);
|
||||
}
|
||||
}
|
||||
}
|
||||
return canvas.toDataURL();
|
||||
}
|
||||
};
|
||||
|
||||
export { QRCode };
|
||||
export default QRCode;
|
@ -0,0 +1,192 @@
|
||||
import { LitElement, html, css } from 'lit'
|
||||
import { render } from 'lit/html.js'
|
||||
import QRCode from './QRCode.js'
|
||||
|
||||
export class QortalQrcodeGenerator extends LitElement {
|
||||
static get properties() {
|
||||
return {
|
||||
auto: { type: Boolean },
|
||||
data: { type: String },
|
||||
debug: { type: Boolean },
|
||||
ecclevel: { type: String },
|
||||
format: { type: String },
|
||||
margin: { type: Number },
|
||||
mask: { type: Number, value: -1 },
|
||||
mode: { type: String },
|
||||
modulesize: { type: Number },
|
||||
version: { type: Number },
|
||||
qrcode: { type: Object }
|
||||
}
|
||||
}
|
||||
|
||||
static get styles() {
|
||||
return css`
|
||||
:host {
|
||||
display: block;
|
||||
}
|
||||
`
|
||||
}
|
||||
|
||||
constructor() {
|
||||
super()
|
||||
this.auto = false
|
||||
this.debug = false
|
||||
this.ecclevel = 'L'
|
||||
this.format = 'html'
|
||||
this.mode = 'numeric'
|
||||
this.margin = 4
|
||||
this.mask = -1
|
||||
this.modulesize = 5
|
||||
this.version = -1
|
||||
this.qrcode = null
|
||||
}
|
||||
|
||||
render() {
|
||||
return html`
|
||||
<div id="qrCodeContainer">
|
||||
${this.qrcode ? this.qrcode : ''}
|
||||
</div>
|
||||
`
|
||||
}
|
||||
|
||||
validateParams() {
|
||||
return (
|
||||
this.validateEcclevel() &&
|
||||
this.validateFormat() &&
|
||||
this.validateMask() &&
|
||||
this.validateMode() &&
|
||||
this.validateModulesize() &&
|
||||
this.validateVersion()
|
||||
)
|
||||
}
|
||||
|
||||
validateEcclevel() {
|
||||
if (
|
||||
this.ecclevel === 'L' ||
|
||||
this.ecclevel === 'M' ||
|
||||
this.ecclevel === 'Q' ||
|
||||
this.ecclevel === 'H'
|
||||
) {
|
||||
return true
|
||||
}
|
||||
console.error('[qortal-qrcode-generator] validateEcclevel - Invalid value of `ecclevel`', this.ecclevel)
|
||||
return false
|
||||
}
|
||||
|
||||
validateFormat() {
|
||||
if (this.format == 'html' || this.format == 'png') {
|
||||
return true
|
||||
}
|
||||
console.error('[qortal-qrcode-generator] validateFormat - Invalid value of `format`', this.format)
|
||||
return false
|
||||
}
|
||||
|
||||
validateMargin() {
|
||||
if (this.margin >= -1) {
|
||||
return true
|
||||
}
|
||||
console.error('[qortal-qrcode-generator] validateMargin - Invalid value of `margin`', this.margin)
|
||||
return false
|
||||
}
|
||||
|
||||
validateMask() {
|
||||
if (this.mask >= -1 && this.mask <= 7) {
|
||||
return true
|
||||
}
|
||||
console.error('[qortal-qrcode-generator] validateMask - Invalid value of `mask`', this.mask)
|
||||
return false
|
||||
}
|
||||
|
||||
validateMode() {
|
||||
if (this.mode === 'numeric' || this.mode === 'alphanumeric' || this.mode === 'octet') {
|
||||
return true
|
||||
}
|
||||
console.error('[qortal-qrcode-generator] validateMode - Invalid value of `mode`', this.mode)
|
||||
return false
|
||||
}
|
||||
|
||||
validateModulesize() {
|
||||
if (this.modulesize >= 0.5) {
|
||||
return true
|
||||
}
|
||||
console.error('[qortal-qrcode-generator] validateModulesize - Invalid value of `modulesize`', this.modulesize)
|
||||
return false
|
||||
}
|
||||
|
||||
validateVersion() {
|
||||
if (this.version == -1 || (this.version >= 0 && this.version <= 40)) {
|
||||
return true
|
||||
}
|
||||
console.error('[qortal-qrcode-generator] validateVersion - Invalid value of `version`', this.version)
|
||||
return false
|
||||
}
|
||||
|
||||
getOptions() {
|
||||
return {
|
||||
modulesize: this.modulesize,
|
||||
margin: this.margin,
|
||||
version: this.version,
|
||||
mode: this.mode,
|
||||
ecclevel: this.ecclevel,
|
||||
mask: this.mask,
|
||||
}
|
||||
}
|
||||
|
||||
generateQRCodePNG() {
|
||||
let img
|
||||
try {
|
||||
img = document.createElement('img')
|
||||
img.src = QRCode.generatePNG(this.data, this.getOptions())
|
||||
this.qrcode = img;
|
||||
} catch (e) {
|
||||
console.error('[qortal-qrcode-generator] generateQRCodePNG - No canvas support', e)
|
||||
}
|
||||
}
|
||||
|
||||
generateQRCodeHTML() {
|
||||
if (this.debug) {
|
||||
console.debug('[qortal-qrcode-generator] generateQRCodeHTML - data ', this.data)
|
||||
}
|
||||
this.qrcode = QRCode.generateHTML(this.data, this.getOptions())
|
||||
}
|
||||
|
||||
generateQRCode() {
|
||||
if (this.debug) {
|
||||
console.log('[qortal-qrcode-generator] generateQRCode', this.validateParams());
|
||||
}
|
||||
if (!this.validateParams()) {
|
||||
return
|
||||
}
|
||||
if (this.format === 'png') {
|
||||
this.generateQRCodePNG()
|
||||
} else {
|
||||
this.generateQRCodeHTML()
|
||||
}
|
||||
this.dispatchEvent(
|
||||
new CustomEvent('qrcode-generated', {
|
||||
bubbles: true,
|
||||
composed: true,
|
||||
}),
|
||||
)
|
||||
}
|
||||
|
||||
updated(changedProperties) {
|
||||
if (this.debug) {
|
||||
console.log('[qortal-qrcode-generator] updated');
|
||||
}
|
||||
|
||||
if (
|
||||
(changedProperties.has('auto') ||
|
||||
changedProperties.has('data') ||
|
||||
changedProperties.has('ecclevel') ||
|
||||
changedProperties.has('mask') ||
|
||||
changedProperties.has('mode') ||
|
||||
changedProperties.has('version')) &&
|
||||
this.auto
|
||||
) {
|
||||
this.generateQRCode()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
window.customElements.define('qortal-qrcode-generator', QortalQrcodeGenerator)
|
@ -420,6 +420,7 @@ class Chat extends LitElement {
|
||||
this.changeLanguage()
|
||||
this.changeTheme()
|
||||
this.getChatBlockedList()
|
||||
this.getLocalBlockedList()
|
||||
|
||||
setInterval(() => {
|
||||
this.blockedUserList = JSON.parse(localStorage.getItem("ChatBlockedAddresses") || "[]")
|
||||
@ -549,6 +550,31 @@ class Chat extends LitElement {
|
||||
return html`${translate("chatpage.cchange9")}`
|
||||
}
|
||||
|
||||
relMessages() {
|
||||
setTimeout(() => {
|
||||
window.location.href = window.location.href.split( '#' )[0]
|
||||
}, 500)
|
||||
}
|
||||
|
||||
getLocalBlockedList() {
|
||||
const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node]
|
||||
const nodeUrl = myNode.protocol + '://' + myNode.domain + ':' + myNode.port
|
||||
const blockedAddressesUrl = `${nodeUrl}/lists/blockedAddresses?apiKey=${this.getApiKey()}`
|
||||
|
||||
localStorage.removeItem("MessageBlockedAddresses")
|
||||
|
||||
var hidelist = []
|
||||
|
||||
fetch(blockedAddressesUrl).then(response => {
|
||||
return response.json()
|
||||
}).then(data => {
|
||||
data.map(item => {
|
||||
hidelist.push(item)
|
||||
})
|
||||
localStorage.setItem("MessageBlockedAddresses", JSON.stringify(hidelist))
|
||||
})
|
||||
}
|
||||
|
||||
getChatBlockedList() {
|
||||
const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node]
|
||||
const nodeUrl = myNode.protocol + '://' + myNode.domain + ':' + myNode.port
|
||||
@ -610,6 +636,7 @@ class Chat extends LitElement {
|
||||
labelText: `${err2string}`,
|
||||
dismiss: true
|
||||
})
|
||||
this.relMessages()
|
||||
}
|
||||
else {
|
||||
let err3string = get("chatpage.cchange17")
|
||||
|
@ -92,7 +92,7 @@ class TradePortal extends LitElement {
|
||||
border-left: 1px solid var(--tradeborder);
|
||||
border-top: 1px solid var(--tradeborder);
|
||||
border-right: 1px solid var(--tradeborder);
|
||||
color: var(--black);
|
||||
color: var(--black);
|
||||
}
|
||||
|
||||
#tab-buy[active] {
|
||||
@ -243,9 +243,20 @@ class TradePortal extends LitElement {
|
||||
.amt-text {
|
||||
color: var(--tradehave);
|
||||
font-size: 15px;
|
||||
text-align: right;
|
||||
margin-top: 2px;
|
||||
margin-bottom: 10px;
|
||||
margin-top: 5px;
|
||||
margin-bottom: 12px;
|
||||
}
|
||||
|
||||
.balance-text {
|
||||
display: inline;
|
||||
float: right;
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
|
||||
.fee-text {
|
||||
display: inline;
|
||||
float: left;
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
|
||||
.tab-text {
|
||||
@ -339,6 +350,10 @@ class TradePortal extends LitElement {
|
||||
top: 10px;
|
||||
}
|
||||
|
||||
.btc.coinName:before {
|
||||
background-image: url('/img/qortbtc.png');
|
||||
}
|
||||
|
||||
.ltc.coinName:before {
|
||||
background-image: url('/img/qortltc.png');
|
||||
}
|
||||
@ -428,6 +443,22 @@ class TradePortal extends LitElement {
|
||||
tradeFee: "0.002"
|
||||
}
|
||||
|
||||
let bitcoin = {
|
||||
name: "BITCOIN",
|
||||
balance: "0",
|
||||
coinCode: "BTC",
|
||||
openOrders: [],
|
||||
openFilteredOrders: [],
|
||||
historicTrades: [],
|
||||
myOrders: [],
|
||||
myHistoricTrades: [],
|
||||
myOfferingOrders: [],
|
||||
openTradeOrders: null,
|
||||
tradeOffersSocketCounter: 1,
|
||||
coinAmount: this.amountString,
|
||||
tradeFee: "~0.0001"
|
||||
}
|
||||
|
||||
let litecoin = {
|
||||
name: "LITECOIN",
|
||||
balance: "0",
|
||||
@ -476,7 +507,7 @@ class TradePortal extends LitElement {
|
||||
tradeFee: "~0.0005"
|
||||
}
|
||||
|
||||
let ravencoin = {
|
||||
let ravencoin = {
|
||||
name: "RAVENCOIN",
|
||||
balance: "0",
|
||||
coinCode: "RVN",
|
||||
@ -510,6 +541,7 @@ class TradePortal extends LitElement {
|
||||
|
||||
this.listedCoins = new Map()
|
||||
this.listedCoins.set("QORTAL", qortal)
|
||||
this.listedCoins.set("BITCOIN", bitcoin)
|
||||
this.listedCoins.set("LITECOIN", litecoin)
|
||||
this.listedCoins.set("DOGECOIN", dogecoin)
|
||||
this.listedCoins.set("DIGIBYTE", digibyte)
|
||||
@ -521,6 +553,11 @@ class TradePortal extends LitElement {
|
||||
handleStuckTradesConnectedWorker: null
|
||||
})
|
||||
|
||||
workers.set("BITCOIN", {
|
||||
tradesConnectedWorker: null,
|
||||
handleStuckTradesConnectedWorker: null
|
||||
})
|
||||
|
||||
workers.set("LITECOIN", {
|
||||
tradesConnectedWorker: null,
|
||||
handleStuckTradesConnectedWorker: null
|
||||
@ -536,7 +573,7 @@ class TradePortal extends LitElement {
|
||||
handleStuckTradesConnectedWorker: null
|
||||
})
|
||||
|
||||
workers.set("RAVENCOIN", {
|
||||
workers.set("RAVENCOIN", {
|
||||
tradesConnectedWorker: null,
|
||||
handleStuckTradesConnectedWorker: null
|
||||
})
|
||||
@ -668,7 +705,7 @@ class TradePortal extends LitElement {
|
||||
<div style="margin-left: auto">
|
||||
<mwc-icon-button class="btn-clear" title="${translate("tradepage.tchange15")}" icon="clear_all" @click="${() => this.clearBuyForm()}"></mwc-icon-button>
|
||||
</div>
|
||||
<span class="tab-text">${translate("tradepage.tchange8")} (QORT)*</span>
|
||||
<span class="tab-text">${translate("tradepage.tchange8")} (QORT)*</span>
|
||||
<p>
|
||||
<mwc-textfield
|
||||
style="width: 100%; color: var(--black);"
|
||||
@ -682,7 +719,7 @@ class TradePortal extends LitElement {
|
||||
>
|
||||
</mwc-textfield>
|
||||
</p>
|
||||
<span class="tab-text">${translate("tradepage.tchange14")} (${this.listedCoins.get(this.selectedCoin).coinCode})*</span>
|
||||
<span class="tab-text">${translate("tradepage.tchange14")} (${this.listedCoins.get(this.selectedCoin).coinCode})*</span>
|
||||
<p>
|
||||
<mwc-textfield
|
||||
style="width: 100%; color: var(--black);"
|
||||
@ -696,7 +733,7 @@ class TradePortal extends LitElement {
|
||||
>
|
||||
</mwc-textfield>
|
||||
</p>
|
||||
<span class="tab-text">${translate("tradepage.tchange10")} (${this.listedCoins.get(this.selectedCoin).coinCode})*</span>
|
||||
<span class="tab-text">${translate("tradepage.tchange10")} (${this.listedCoins.get(this.selectedCoin).coinCode})*</span>
|
||||
<p>
|
||||
<mwc-textfield
|
||||
style="width: 100%; color: var(--black);"
|
||||
@ -720,8 +757,10 @@ class TradePortal extends LitElement {
|
||||
>
|
||||
</mwc-textfield>
|
||||
</p>
|
||||
<span class="amt-text">${translate("tradepage.tchange16")}: ${this.listedCoins.get(this.selectedCoin).balance} ${this.listedCoins.get(this.selectedCoin).coinCode}</span>
|
||||
<span class="amt-text">${translate("walletpage.wchange12")}: ${this.listedCoins.get(this.selectedCoin).tradeFee} ${this.listedCoins.get(this.selectedCoin).coinCode}</span>
|
||||
<span class="amt-text">
|
||||
<span class="balance-text">${translate("tradepage.tchange16")}: ${this.listedCoins.get(this.selectedCoin).balance} ${this.listedCoins.get(this.selectedCoin).coinCode}</span>
|
||||
<span class="fee-text">${translate("walletpage.wchange12")}: ${this.listedCoins.get(this.selectedCoin).tradeFee} ${this.listedCoins.get(this.selectedCoin).coinCode}</span>
|
||||
</span>
|
||||
<div class="buttons">
|
||||
<div>
|
||||
<mwc-button class="buy-button" ?disabled="${this.buyBtnDisable}" style="width:100%;" raised @click="${(e) => this.buyAction(e)}">
|
||||
@ -751,7 +790,7 @@ class TradePortal extends LitElement {
|
||||
>
|
||||
</mwc-textfield>
|
||||
</p>
|
||||
<span class="tab-text">${translate("tradepage.tchange14")} (${this.listedCoins.get(this.selectedCoin).coinCode})*</span>
|
||||
<span class="tab-text">${translate("tradepage.tchange14")} (${this.listedCoins.get(this.selectedCoin).coinCode})*</span>
|
||||
<p>
|
||||
<mwc-textfield
|
||||
style="width: 100%; color: var(--black);"
|
||||
@ -766,7 +805,7 @@ class TradePortal extends LitElement {
|
||||
>
|
||||
</mwc-textfield>
|
||||
</p>
|
||||
<span class="tab-text">${translate("tradepage.tchange10")} (${this.listedCoins.get(this.selectedCoin).coinCode})*</span>
|
||||
<span class="tab-text">${translate("tradepage.tchange10")} (${this.listedCoins.get(this.selectedCoin).coinCode})*</span>
|
||||
<p>
|
||||
<mwc-textfield
|
||||
style="width: 100%; color: var(--black);"
|
||||
@ -780,8 +819,10 @@ class TradePortal extends LitElement {
|
||||
>
|
||||
</mwc-textfield>
|
||||
</p>
|
||||
<span class="amt-text">${translate("tradepage.tchange16")}: ${this.listedCoins.get("QORTAL").balance} QORT</span>
|
||||
<span class="amt-text">${translate("walletpage.wchange12")}: ${this.listedCoins.get("QORTAL").tradeFee} QORT</span>
|
||||
<span class="amt-text">
|
||||
<span class="balance-text">${translate("tradepage.tchange16")}: ${this.listedCoins.get("QORTAL").balance} QORT</span>
|
||||
<span class="fee-text">${translate("walletpage.wchange12")}: ${this.listedCoins.get("QORTAL").tradeFee} QORT</span>
|
||||
</span>
|
||||
<div class="buttons">
|
||||
<div>
|
||||
<mwc-button class="sell-button" ?disabled="${this.sellBtnDisable}" style="width:100%;" raised @click="${(e) => this.sellAction()}">
|
||||
@ -930,6 +971,7 @@ class TradePortal extends LitElement {
|
||||
<h2 style="margin: 0 0 15px 0; line-height: 50px; display: inline;">Qortal ${translate("tradepage.tchange1")} - </h2>
|
||||
<mwc-select outlined id="coinSelectionMenu" label="${translate("tradepage.tchange2")}">
|
||||
<mwc-list-item value="LITECOIN" selected><span class="coinName ltc" style="color: var(--black);">QORT / LTC</span></mwc-list-item>
|
||||
<mwc-list-item value="BITCOIN"><span class="coinName btc" style="color: var(--black);">QORT / BTC</span></mwc-list-item>
|
||||
<mwc-list-item value="DOGECOIN"><span class="coinName doge" style="color: var(--black);">QORT / DOGE</span></mwc-list-item>
|
||||
<mwc-list-item value="DIGIBYTE"><span class="coinName dgb" style="color: var(--black);">QORT / DGB</span></mwc-list-item>
|
||||
<mwc-list-item value="RAVENCOIN"><span class="coinName rvn" style="color: var(--black);">QORT / RVN</span></mwc-list-item>
|
||||
@ -1089,6 +1131,10 @@ class TradePortal extends LitElement {
|
||||
let _body = null
|
||||
|
||||
switch (this.selectedCoin) {
|
||||
case 'BITCOIN':
|
||||
_url = `/crosschain/btc/walletbalance?apiKey=${this.getApiKey()}`
|
||||
_body = window.parent.reduxStore.getState().app.selectedAddress.btcWallet.derivedMasterPublicKey
|
||||
break
|
||||
case 'LITECOIN':
|
||||
_url = `/crosschain/ltc/walletbalance?apiKey=${this.getApiKey()}`
|
||||
_body = window.parent.reduxStore.getState().app.selectedAddress.ltcWallet.derivedMasterPublicKey
|
||||
@ -1100,8 +1146,8 @@ class TradePortal extends LitElement {
|
||||
case 'DIGIBYTE':
|
||||
_url = `/crosschain/dgb/walletbalance?apiKey=${this.getApiKey()}`
|
||||
_body = window.parent.reduxStore.getState().app.selectedAddress.dgbWallet.derivedMasterPublicKey
|
||||
break
|
||||
case 'RAVENCOIN':
|
||||
break
|
||||
case 'RAVENCOIN':
|
||||
_url = `/crosschain/rvn/walletbalance?apiKey=${this.getApiKey()}`
|
||||
_body = window.parent.reduxStore.getState().app.selectedAddress.rvnWallet.derivedMasterPublicKey
|
||||
break
|
||||
@ -1367,23 +1413,19 @@ class TradePortal extends LitElement {
|
||||
processTradeBotStates(tradeStates) {
|
||||
|
||||
/**
|
||||
* BitcoinACCTv1 TRADEBOT STATES
|
||||
* - BOB_WAITING_FOR_AT_CONFIRM
|
||||
* - BOB_WAITING_FOR_MESSAGE
|
||||
* - BOB_WAITING_FOR_P2SH_B
|
||||
* - BOB_WAITING_FOR_AT_REDEEM
|
||||
* - BOB_DONE
|
||||
* - BOB_REFUNDED
|
||||
* - ALICE_WAITING_FOR_P2SH_A
|
||||
* - ALICE_WAITING_FOR_AT_LOCK
|
||||
* - ALICE_WATCH_P2SH_B
|
||||
* - ALICE_DONE
|
||||
* - ALICE_REFUNDING_B
|
||||
* - ALICE_REFUNDING_A
|
||||
* - ALICE_REFUNDED
|
||||
*
|
||||
* @param {[{}]} states
|
||||
*/
|
||||
* BitcoinACCTv1 TRADEBOT STATES
|
||||
* - BOB_WAITING_FOR_AT_CONFIRM
|
||||
* - BOB_WAITING_FOR_MESSAGE
|
||||
* - BOB_WAITING_FOR_AT_REDEEM
|
||||
* - BOB_DONE
|
||||
* - BOB_REFUNDED
|
||||
* - ALICE_WAITING_FOR_AT_LOCK
|
||||
* - ALICE_DONE
|
||||
* - ALICE_REFUNDING_A
|
||||
* - ALICE_REFUNDED
|
||||
*
|
||||
* @param {[{}]} states
|
||||
*/
|
||||
|
||||
const BitcoinACCTv1 = (states) => {
|
||||
// Reverse the states
|
||||
@ -1394,24 +1436,16 @@ class TradePortal extends LitElement {
|
||||
this.changeTradeBotState(state, 'PENDING')
|
||||
} else if (state.tradeState == 'BOB_WAITING_FOR_MESSAGE') {
|
||||
this.changeTradeBotState(state, 'LISTED')
|
||||
} else if (state.tradeState == 'BOB_WAITING_FOR_P2SH_B') {
|
||||
this.changeTradeBotState(state, 'TRADING')
|
||||
} else if (state.tradeState == 'BOB_WAITING_FOR_AT_REDEEM') {
|
||||
this.changeTradeBotState(state, 'REDEEMING')
|
||||
this.changeTradeBotState(state, 'TRADING')
|
||||
} else if (state.tradeState == 'BOB_DONE') {
|
||||
this.handleCompletedState(state)
|
||||
} else if (state.tradeState == 'BOB_REFUNDED') {
|
||||
this.handleCompletedState(state)
|
||||
} else if (state.tradeState == 'ALICE_WAITING_FOR_P2SH_A') {
|
||||
this.changeTradeBotState(state, 'PENDING')
|
||||
} else if (state.tradeState == 'ALICE_WAITING_FOR_AT_LOCK') {
|
||||
this.changeTradeBotState(state, 'TRADING')
|
||||
} else if (state.tradeState == 'ALICE_WATCH_P2SH_B') {
|
||||
this.changeTradeBotState(state, 'TRADING')
|
||||
this.changeTradeBotState(state, 'BUYING')
|
||||
} else if (state.tradeState == 'ALICE_DONE') {
|
||||
this.handleCompletedState(state)
|
||||
} else if (state.tradeState == 'ALICE_REFUNDING_B') {
|
||||
this.changeTradeBotState(state, 'REFUNDING')
|
||||
} else if (state.tradeState == 'ALICE_REFUNDING_A') {
|
||||
this.changeTradeBotState(state, 'REFUNDING')
|
||||
} else if (state.tradeState == 'ALICE_REFUNDED') {
|
||||
@ -1745,7 +1779,7 @@ class TradePortal extends LitElement {
|
||||
const startOfferPresenceMapping = async () => {
|
||||
if (presenceTxns !== null) {
|
||||
await asyncForEach(presenceTxns, async (presence) => {
|
||||
await waitFor(5)
|
||||
await waitFor(50)
|
||||
let offerIndex = offeringTrades.findIndex((offeringTrade) => offeringTrade.qortalCreatorTradeAddress === presence.address)
|
||||
offerIndex !== -1 ? (offeringTrades[offerIndex].lastSeen = presence.timestamp) : null
|
||||
})
|
||||
@ -1753,7 +1787,7 @@ class TradePortal extends LitElement {
|
||||
|
||||
if (tradePresenceTxns !== null) {
|
||||
await asyncForEach(tradePresenceTxns, async (tradePresence) => {
|
||||
await waitFor(5)
|
||||
await waitFor(50)
|
||||
let offerIndex = offeringTrades.findIndex((offeringTrade) => offeringTrade.qortalCreatorTradeAddress === tradePresence.tradeAddress)
|
||||
offerIndex !== -1 ? (offeringTrades[offerIndex].tradePresenceExpiry = tradePresence.timestamp) : null
|
||||
})
|
||||
@ -1900,19 +1934,19 @@ class TradePortal extends LitElement {
|
||||
}
|
||||
|
||||
const restartPresenceWebSocket = () => {
|
||||
setTimeout(() => initPresenceWebSocket(true), 5000)
|
||||
setTimeout(() => initPresenceWebSocket(true), 2000)
|
||||
}
|
||||
|
||||
const restartTradePresenceWebSocket = () => {
|
||||
setTimeout(() => initTradePresenceWebSocket(true), 5000)
|
||||
setTimeout(() => initTradePresenceWebSocket(true), 2000)
|
||||
}
|
||||
|
||||
const restartTradeOffersWebSocket = () => {
|
||||
setTimeout(() => initTradeOffersWebSocket(true), 5000)
|
||||
setTimeout(() => initTradeOffersWebSocket(true), 2000)
|
||||
}
|
||||
|
||||
const restartTradeBotWebSocket = () => {
|
||||
setTimeout(() => initTradeBotWebSocket(true), 5000)
|
||||
setTimeout(() => initTradeBotWebSocket(true), 2000)
|
||||
}
|
||||
|
||||
// Start TradeOffersWebSocket
|
||||
@ -1938,6 +1972,9 @@ class TradePortal extends LitElement {
|
||||
const makeRequest = async () => {
|
||||
let _receivingAddress = null
|
||||
switch (this.selectedCoin) {
|
||||
case 'BITCOIN':
|
||||
_receivingAddress = this.selectedAddress.btcWallet.address
|
||||
break
|
||||
case 'LITECOIN':
|
||||
_receivingAddress = this.selectedAddress.ltcWallet.address
|
||||
break
|
||||
@ -2007,6 +2044,9 @@ class TradePortal extends LitElement {
|
||||
let _foreignKey = ""
|
||||
|
||||
switch (this.selectedCoin) {
|
||||
case 'BITCOIN':
|
||||
_foreignKey = this.selectedAddress.btcWallet.derivedMasterPrivateKey
|
||||
break
|
||||
case 'LITECOIN':
|
||||
_foreignKey = this.selectedAddress.ltcWallet.derivedMasterPrivateKey
|
||||
break
|
||||
@ -2446,11 +2486,11 @@ class TradePortal extends LitElement {
|
||||
self.postMessage({ type: 'STUCK_OFFERS', data: stuckOffers })
|
||||
}
|
||||
|
||||
// Get Historic Trades
|
||||
getCompletedTrades()
|
||||
|
||||
// Get Offers
|
||||
getOffers()
|
||||
setTimeout(() => { getOffers() }, 1000)
|
||||
|
||||
// Get Historic Trades
|
||||
setTimeout(() => { getCompletedTrades() }, 1000)
|
||||
}
|
||||
|
||||
filterStuckTrades(states) {
|
||||
|
@ -7,7 +7,8 @@ registerTranslateConfig({
|
||||
loader: lang => fetch(`/language/${lang}.json`).then(res => res.json())
|
||||
})
|
||||
|
||||
import '../components/ButtonIconCopy'
|
||||
import '../components/ButtonIconCopy.js'
|
||||
import '../components/QortalQrcodeGenerator.js'
|
||||
import '@material/mwc-button'
|
||||
import '@material/mwc-checkbox'
|
||||
import '@material/mwc-dialog'
|
||||
@ -49,7 +50,7 @@ class MultiWallet extends LitElement {
|
||||
dogeAmount: { type: Number },
|
||||
dgbRecipient: { type: String },
|
||||
dgbAmount: { type: Number },
|
||||
rvnRecipient: { type: String },
|
||||
rvnRecipient: { type: String },
|
||||
rvnAmount: { type: Number },
|
||||
arrrRecipient: { type: String },
|
||||
arrrAmount: { type: Number },
|
||||
@ -64,7 +65,7 @@ class MultiWallet extends LitElement {
|
||||
ltcFeePerByte: { type: Number },
|
||||
dogeFeePerByte: { type: Number },
|
||||
dgbFeePerByte: { type: Number },
|
||||
rvnFeePerByte: { type: Number },
|
||||
rvnFeePerByte: { type: Number },
|
||||
balanceString: { type: String }
|
||||
}
|
||||
}
|
||||
@ -507,6 +508,11 @@ class MultiWallet extends LitElement {
|
||||
margin-top: 15px;
|
||||
}
|
||||
|
||||
.qrcode-pos {
|
||||
margin-top: -180px;
|
||||
margin-left: 425px;
|
||||
}
|
||||
|
||||
@media (max-width: 863px) {
|
||||
.wallet {
|
||||
width: 100%;
|
||||
@ -634,7 +640,7 @@ class MultiWallet extends LitElement {
|
||||
this.dgbFeePerByte = 10
|
||||
this.dgbSatMinFee = 1
|
||||
this.dgbSatMaxFee = 100
|
||||
this.rvnFeePerByte = 1125
|
||||
this.rvnFeePerByte = 1125
|
||||
this.rvnSatMinFee = 1000
|
||||
this.rvnSatMaxFee = 10000
|
||||
|
||||
@ -711,7 +717,7 @@ class MultiWallet extends LitElement {
|
||||
<div class="currency-image"></div>
|
||||
<div class="currency-text">Digibyte</div>
|
||||
</div>
|
||||
<div coin="rvn" class="currency-box rvn">
|
||||
<div coin="rvn" class="currency-box rvn">
|
||||
<div class="currency-image"></div>
|
||||
<div class="currency-text">Ravencoin</div>
|
||||
</div>
|
||||
@ -744,6 +750,9 @@ class MultiWallet extends LitElement {
|
||||
${this.renderSendButton()}
|
||||
</span>
|
||||
</h2>
|
||||
<div class="qrcode-pos">
|
||||
<qortal-qrcode-generator data="${this.getSelectedWalletAddress()}" mode="octet" format="html" auto></qortal-qrcode-generator>
|
||||
</div>
|
||||
<div id="transactions">
|
||||
${this.loading ? html`<paper-spinner-lite style="display: block; margin: 5px auto;" active></paper-spinner-lite>` : ''}
|
||||
<div id="transactionsDOM"></div>
|
||||
@ -3013,7 +3022,7 @@ class MultiWallet extends LitElement {
|
||||
resizable
|
||||
header="${translate("walletpage.wchange14")}"
|
||||
.renderer=${(root, column, data) => {
|
||||
const time = new Date(data.item.timestamp * 1000)
|
||||
const time = new Date(data.item.timestamp)
|
||||
render(html` <time-ago datetime=${time.toISOString()}> </time-ago> `, root)
|
||||
}}
|
||||
>
|
||||
@ -3078,7 +3087,7 @@ class MultiWallet extends LitElement {
|
||||
resizable
|
||||
header="${translate("walletpage.wchange14")}"
|
||||
.renderer=${(root, column, data) => {
|
||||
const time = new Date(data.item.timestamp * 1000)
|
||||
const time = new Date(data.item.timestamp)
|
||||
render(html` <time-ago datetime=${time.toISOString()}> </time-ago> `, root)
|
||||
}}
|
||||
>
|
||||
@ -3143,7 +3152,7 @@ class MultiWallet extends LitElement {
|
||||
resizable
|
||||
header="${translate("walletpage.wchange14")}"
|
||||
.renderer=${(root, column, data) => {
|
||||
const time = new Date(data.item.timestamp * 1000)
|
||||
const time = new Date(data.item.timestamp)
|
||||
render(html` <time-ago datetime=${time.toISOString()}> </time-ago> `, root)
|
||||
}}
|
||||
>
|
||||
@ -3208,7 +3217,7 @@ class MultiWallet extends LitElement {
|
||||
resizable
|
||||
header="${translate("walletpage.wchange14")}"
|
||||
.renderer=${(root, column, data) => {
|
||||
const time = new Date(data.item.timestamp * 1000)
|
||||
const time = new Date(data.item.timestamp)
|
||||
render(html` <time-ago datetime=${time.toISOString()}> </time-ago> `, root)
|
||||
}}
|
||||
>
|
||||
@ -3273,7 +3282,7 @@ class MultiWallet extends LitElement {
|
||||
resizable
|
||||
header="${translate("walletpage.wchange14")}"
|
||||
.renderer=${(root, column, data) => {
|
||||
const time = new Date(data.item.timestamp * 1000)
|
||||
const time = new Date(data.item.timestamp)
|
||||
render(html` <time-ago datetime=${time.toISOString()}> </time-ago> `, root)
|
||||
}}
|
||||
>
|
||||
|
Loading…
x
Reference in New Issue
Block a user