Merge remote-tracking branch 'main/master' into bugfix/change-reference-for-signature-chatReference
This commit is contained in:
commit
94ab30876a
@ -27,9 +27,9 @@ Easiest way to install the lastest required packages on Linux is via nvm.
|
|||||||
``` source ~/.profile ``` (For Debian based distro) <br/>
|
``` source ~/.profile ``` (For Debian based distro) <br/>
|
||||||
``` source ~/.bashrc ``` (For Fedora / CentOS) <br/>
|
``` source ~/.bashrc ``` (For Fedora / CentOS) <br/>
|
||||||
``` nvm ls-remote ``` (Fetch list of available versions) <br/>
|
``` nvm ls-remote ``` (Fetch list of available versions) <br/>
|
||||||
``` nvm install v16.17.1 ``` (LTS: Gallium supported by Electron) <br/>
|
``` nvm install v18.12.1 ``` (LTS: Hydrogen supported by Electron) <br/>
|
||||||
``` npm --location=global install yarn@1.22.19 ``` <br/>
|
``` npm --location=global install yarn@1.22.19 ``` <br/>
|
||||||
``` npm --location=global install npm@9.3.1 ``` <br/>
|
``` npm --location=global install npm@9.4.2 ``` <br/>
|
||||||
|
|
||||||
On BSD do a ``` pkg_add node followed by npm install -g yarn ```
|
On BSD do a ``` pkg_add node followed by npm install -g yarn ```
|
||||||
|
|
||||||
|
BIN
img/attachment-icon.png
Normal file
BIN
img/attachment-icon.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.6 KiB |
@ -10,7 +10,7 @@
|
|||||||
"electron_translate_7": "Актуализацията е готова за инсталиране",
|
"electron_translate_7": "Актуализацията е готова за инсталиране",
|
||||||
"electron_translate_8": "Беше изтеглена нова версия на Qortal UI.",
|
"electron_translate_8": "Беше изтеглена нова версия на Qortal UI.",
|
||||||
"electron_translate_9": "Щракнете върху ИНСТАЛИРАНЕ СЕГА, за да приложите актуализация, МОЖЕ БИ ПО-КЪСНО, за да не актуализирате потребителския интерфейс.",
|
"electron_translate_9": "Щракнете върху ИНСТАЛИРАНЕ СЕГА, за да приложите актуализация, МОЖЕ БИ ПО-КЪСНО, за да не актуализирате потребителския интерфейс.",
|
||||||
"electron_translate_10": "Грешка при актуализиране...",
|
"electron_translate_10": "Временна неуспешна актуализация, ще опитаме отново по-късно",
|
||||||
"electron_translate_11": "ИЗТЕГЛЕТЕ АКТУАЛИЗАЦИЯТА",
|
"electron_translate_11": "ИЗТЕГЛЕТЕ АКТУАЛИЗАЦИЯТА",
|
||||||
"electron_translate_12": "Ще бъде изтеглено ⌛️ във фонов режим!"
|
"electron_translate_12": "Ще бъде изтеглено ⌛️ във фонов режим!"
|
||||||
}
|
}
|
@ -10,7 +10,7 @@
|
|||||||
"electron_translate_7": "Update zur Installation bereit",
|
"electron_translate_7": "Update zur Installation bereit",
|
||||||
"electron_translate_8": "Eine neue Qortal-UI-Version wurde heruntergeladen.",
|
"electron_translate_8": "Eine neue Qortal-UI-Version wurde heruntergeladen.",
|
||||||
"electron_translate_9": "Klicken Sie auf JETZT INSTALLIEREN, um das Update anzuwenden, VIELLEICHT SPÄTER, um die Benutzeroberfläche nicht zu aktualisieren.",
|
"electron_translate_9": "Klicken Sie auf JETZT INSTALLIEREN, um das Update anzuwenden, VIELLEICHT SPÄTER, um die Benutzeroberfläche nicht zu aktualisieren.",
|
||||||
"electron_translate_10": "Fehler beim Aktualisieren...",
|
"electron_translate_10": "Vorübergehender Aktualisierungsfehler, wir versuchen es später erneut",
|
||||||
"electron_translate_11": "UPDATE HERUNTERLADEN",
|
"electron_translate_11": "UPDATE HERUNTERLADEN",
|
||||||
"electron_translate_12": "Das Update wird im Hintergrund heruntergeladen ⌛️!"
|
"electron_translate_12": "Das Update wird im Hintergrund heruntergeladen ⌛️!"
|
||||||
}
|
}
|
@ -10,7 +10,7 @@
|
|||||||
"electron_translate_7": "Update ready to install",
|
"electron_translate_7": "Update ready to install",
|
||||||
"electron_translate_8": "A new Qortal UI version has been downloaded.",
|
"electron_translate_8": "A new Qortal UI version has been downloaded.",
|
||||||
"electron_translate_9": "Click INSTALL NOW to apply update, MAYBE LATER to not update the UI.",
|
"electron_translate_9": "Click INSTALL NOW to apply update, MAYBE LATER to not update the UI.",
|
||||||
"electron_translate_10": "Error while Updating...",
|
"electron_translate_10": "Temporary update failure, will try again later",
|
||||||
"electron_translate_11": "DOWNLOAD UPDATE",
|
"electron_translate_11": "DOWNLOAD UPDATE",
|
||||||
"electron_translate_12": "It will be downloaded ⌛️ in the background!"
|
"electron_translate_12": "It will be downloaded ⌛️ in the background!"
|
||||||
}
|
}
|
@ -10,7 +10,7 @@
|
|||||||
"electron_translate_7": "Actualización lista para instalar",
|
"electron_translate_7": "Actualización lista para instalar",
|
||||||
"electron_translate_8": "Se ha descargado una nueva versión de la interfaz de usuario de Qortal.",
|
"electron_translate_8": "Se ha descargado una nueva versión de la interfaz de usuario de Qortal.",
|
||||||
"electron_translate_9": "Haz clic en INSTALAR AHORA para aplicar la actualización, QUIZÁS MÁS TARDE para no actualizar la interfaz de usuario".,
|
"electron_translate_9": "Haz clic en INSTALAR AHORA para aplicar la actualización, QUIZÁS MÁS TARDE para no actualizar la interfaz de usuario".,
|
||||||
"electron_translate_10": "Error al actualizar...",
|
"electron_translate_10": "Error de actualización temporal, lo intentaré más tarde",
|
||||||
"electron_translate_11": "DESCARGAR ACTUALIZACIÓN",
|
"electron_translate_11": "DESCARGAR ACTUALIZACIÓN",
|
||||||
"electron_translate_12": "¡Se descargará ⌛️ en segundo plano!"
|
"electron_translate_12": "¡Se descargará ⌛️ en segundo plano!"
|
||||||
}
|
}
|
@ -10,7 +10,7 @@
|
|||||||
"electron_translate_7": "Mise à jour prête à installer",
|
"electron_translate_7": "Mise à jour prête à installer",
|
||||||
"electron_translate_8": "Une nouvelle version de l'interface utilisateur de Qortal a été téléchargée.",
|
"electron_translate_8": "Une nouvelle version de l'interface utilisateur de Qortal a été téléchargée.",
|
||||||
"electron_translate_9": "Cliquez sur INSTALLER MAINTENANT pour appliquer la mise à jour, PEUT-ÊTRE PLUS TARD pour ne pas mettre à jour l'interface utilisateur.",
|
"electron_translate_9": "Cliquez sur INSTALLER MAINTENANT pour appliquer la mise à jour, PEUT-ÊTRE PLUS TARD pour ne pas mettre à jour l'interface utilisateur.",
|
||||||
"electron_translate_10": "Erreur lors de la mise à jour...",
|
"electron_translate_10": "Échec de la mise à jour temporaire, réessayera plus tard",
|
||||||
"electron_translate_11": "TÉLÉCHARGER LA MISE À JOUR",
|
"electron_translate_11": "TÉLÉCHARGER LA MISE À JOUR",
|
||||||
"electron_translate_12": "Il sera téléchargé ⌛️ en arrière-plan !"
|
"electron_translate_12": "Il sera téléchargé ⌛️ en arrière-plan !"
|
||||||
}
|
}
|
@ -10,7 +10,7 @@
|
|||||||
"electron_translate_7": "Aggiornamento pronto per l'installazione",
|
"electron_translate_7": "Aggiornamento pronto per l'installazione",
|
||||||
"electron_translate_8": "È stata scaricata una nuova versione dell'interfaccia utente di Qortal.",
|
"electron_translate_8": "È stata scaricata una nuova versione dell'interfaccia utente di Qortal.",
|
||||||
"electron_translate_9": "Fai clic su INSTALLA ORA per applicare l'aggiornamento, FORSE DOPO per non aggiornare l'interfaccia utente.",
|
"electron_translate_9": "Fai clic su INSTALLA ORA per applicare l'aggiornamento, FORSE DOPO per non aggiornare l'interfaccia utente.",
|
||||||
"electron_translate_10": "Errore durante l'aggiornamento...",
|
"electron_translate_10": "Errore di aggiornamento temporaneo, riproverà più tardi",
|
||||||
"electron_translate_11": "SCARICA AGGIORNAMENTO",
|
"electron_translate_11": "SCARICA AGGIORNAMENTO",
|
||||||
"electron_translate_12": "Verrà scaricato ⌛️ in background!"
|
"electron_translate_12": "Verrà scaricato ⌛️ in background!"
|
||||||
}
|
}
|
@ -10,7 +10,7 @@
|
|||||||
"electron_translate_7": "업데이트 설치 준비 완료",
|
"electron_translate_7": "업데이트 설치 준비 완료",
|
||||||
"electron_translate_8": "새로운 Qortal UI 버전이 다운로드되었습니다.",
|
"electron_translate_8": "새로운 Qortal UI 버전이 다운로드되었습니다.",
|
||||||
"electron_translate_9": "업데이트를 적용하려면 지금 설치를 클릭하고 UI를 업데이트하지 않으려면 나중에 할 수도 있습니다.",
|
"electron_translate_9": "업데이트를 적용하려면 지금 설치를 클릭하고 UI를 업데이트하지 않으려면 나중에 할 수도 있습니다.",
|
||||||
"electron_translate_10": "업데이트 중 오류...",
|
"electron_translate_10": "임시 업데이트 실패, 나중에 다시 시도합니다.",
|
||||||
"electron_translate_11": "업데이트 다운로드",
|
"electron_translate_11": "업데이트 다운로드",
|
||||||
"electron_translate_12": "백그라운드에서 ⌛️ 다운로드됩니다!"
|
"electron_translate_12": "백그라운드에서 ⌛️ 다운로드됩니다!"
|
||||||
}
|
}
|
@ -10,7 +10,7 @@
|
|||||||
"electron_translate_7": "Update klaar om te installeren",
|
"electron_translate_7": "Update klaar om te installeren",
|
||||||
"electron_translate_8": "Er is een nieuwe Qortal UI-versie gedownload.",
|
"electron_translate_8": "Er is een nieuwe Qortal UI-versie gedownload.",
|
||||||
"electron_translate_9": "Klik op NU INSTALLEREN om de update toe te passen, MISSCHIEN LATER om de gebruikersinterface niet bij te werken.",
|
"electron_translate_9": "Klik op NU INSTALLEREN om de update toe te passen, MISSCHIEN LATER om de gebruikersinterface niet bij te werken.",
|
||||||
"electron_translate_10": "Fout tijdens updaten...",
|
"electron_translate_10": "Tijdelijke update mislukt, zal het later opnieuw proberen",
|
||||||
"electron_translate_11": "UPDATE DOWNLOADEN",
|
"electron_translate_11": "UPDATE DOWNLOADEN",
|
||||||
"electron_translate_12": "Het wordt ⌛️ op de achtergrond gedownload!"
|
"electron_translate_12": "Het wordt ⌛️ op de achtergrond gedownload!"
|
||||||
}
|
}
|
@ -10,7 +10,7 @@
|
|||||||
"electron_translate_7": "Atualização pronta para instalar",
|
"electron_translate_7": "Atualização pronta para instalar",
|
||||||
"electron_translate_8": "Uma nova versão Qortal UI foi baixada.",
|
"electron_translate_8": "Uma nova versão Qortal UI foi baixada.",
|
||||||
"electron_translate_9": "Clique em INSTALAR AGORA para aplicar a atualização, TALVEZ MAIS TARDE para não atualizar a UI.",
|
"electron_translate_9": "Clique em INSTALAR AGORA para aplicar a atualização, TALVEZ MAIS TARDE para não atualizar a UI.",
|
||||||
"electron_translate_10": "Erro ao atualizar...",
|
"electron_translate_10": "Falha de atualização temporária, tentará novamente mais tarde",
|
||||||
"electron_translate_11": "BAIXAR ATUALIZAÇÃO",
|
"electron_translate_11": "BAIXAR ATUALIZAÇÃO",
|
||||||
"electron_translate_12": "Será baixado ⌛️ em segundo plano!"
|
"electron_translate_12": "Será baixado ⌛️ em segundo plano!"
|
||||||
}
|
}
|
@ -10,7 +10,7 @@
|
|||||||
"electron_translate_7": "Atualização pronta para instalar",
|
"electron_translate_7": "Atualização pronta para instalar",
|
||||||
"electron_translate_8": "Uma nova versão Qortal UI foi baixada.",
|
"electron_translate_8": "Uma nova versão Qortal UI foi baixada.",
|
||||||
"electron_translate_9": "Clique em INSTALAR AGORA para aplicar a atualização, TALVEZ MAIS TARDE para não atualizar a UI.",
|
"electron_translate_9": "Clique em INSTALAR AGORA para aplicar a atualização, TALVEZ MAIS TARDE para não atualizar a UI.",
|
||||||
"electron_translate_10": "Erro ao atualizar...",
|
"electron_translate_10": "Falha de atualização temporária, tentará novamente mais tarde",
|
||||||
"electron_translate_11": "BAIXAR ATUALIZAÇÃO",
|
"electron_translate_11": "BAIXAR ATUALIZAÇÃO",
|
||||||
"electron_translate_12": "Será baixado ⌛️ em segundo plano!"
|
"electron_translate_12": "Será baixado ⌛️ em segundo plano!"
|
||||||
}
|
}
|
@ -10,7 +10,7 @@
|
|||||||
"electron_translate_7": "Обновление готово к установке",
|
"electron_translate_7": "Обновление готово к установке",
|
||||||
"electron_translate_8": "Загружена новая версия пользовательского интерфейса Qortal.",
|
"electron_translate_8": "Загружена новая версия пользовательского интерфейса Qortal.",
|
||||||
"electron_translate_9": "Нажмите УСТАНОВИТЬ СЕЙЧАС, чтобы применить обновление, МОЖЕТ БЫТЬ ПОЗЖЕ, чтобы не обновлять пользовательский интерфейс.",
|
"electron_translate_9": "Нажмите УСТАНОВИТЬ СЕЙЧАС, чтобы применить обновление, МОЖЕТ БЫТЬ ПОЗЖЕ, чтобы не обновлять пользовательский интерфейс.",
|
||||||
"electron_translate_10": "Ошибка при обновлении...",
|
"electron_translate_10": "Временная ошибка обновления, повторите попытку позже",
|
||||||
"electron_translate_11": "СКАЧАТЬ ОБНОВЛЕНИЕ",
|
"electron_translate_11": "СКАЧАТЬ ОБНОВЛЕНИЕ",
|
||||||
"electron_translate_12": "Он будет загружен ⌛️ в фоновом режиме!"
|
"electron_translate_12": "Он будет загружен ⌛️ в фоновом режиме!"
|
||||||
}
|
}
|
@ -10,7 +10,7 @@
|
|||||||
"electron_translate_7": "Güncelleme yüklenmeye hazır",
|
"electron_translate_7": "Güncelleme yüklenmeye hazır",
|
||||||
"electron_translate_8": "Yeni bir Qortal UI sürümü indirildi.",
|
"electron_translate_8": "Yeni bir Qortal UI sürümü indirildi.",
|
||||||
"electron_translate_9": "Güncellemeyi uygulamak için ŞİMDİ YÜKLE'ye tıklayın, kullanıcı arayüzünü güncellememek için MAYBE SONRA tıklayın.",
|
"electron_translate_9": "Güncellemeyi uygulamak için ŞİMDİ YÜKLE'ye tıklayın, kullanıcı arayüzünü güncellememek için MAYBE SONRA tıklayın.",
|
||||||
"electron_translate_10": "Güncelleme Sırasında Hata...",
|
"electron_translate_10": "Geçici güncelleme hatası, daha sonra tekrar denenecek",
|
||||||
"electron_translate_11": "GÜNCELLEMEYİ İNDİRİN",
|
"electron_translate_11": "GÜNCELLEMEYİ İNDİRİN",
|
||||||
"electron_translate_12": "Arka planda ⌛️ indirilecek!"
|
"electron_translate_12": "Arka planda ⌛️ indirilecek!"
|
||||||
}
|
}
|
@ -10,7 +10,7 @@
|
|||||||
"electron_translate_7": "Update ready to install",
|
"electron_translate_7": "Update ready to install",
|
||||||
"electron_translate_8": "A new Qortal UI version has been downloaded.",
|
"electron_translate_8": "A new Qortal UI version has been downloaded.",
|
||||||
"electron_translate_9": "Click INSTALL NOW to apply update, MAYBE LATER to not update the UI.",
|
"electron_translate_9": "Click INSTALL NOW to apply update, MAYBE LATER to not update the UI.",
|
||||||
"electron_translate_10": "Error while Updating...",
|
"electron_translate_10": "Temporary update failure, will try again later",
|
||||||
"electron_translate_11": "DOWNLOAD UPDATE",
|
"electron_translate_11": "DOWNLOAD UPDATE",
|
||||||
"electron_translate_12": "It will be downloaded ⌛️ in the background!"
|
"electron_translate_12": "It will be downloaded ⌛️ in the background!"
|
||||||
}
|
}
|
@ -10,7 +10,7 @@
|
|||||||
"electron_translate_7": "更新准备安装",
|
"electron_translate_7": "更新准备安装",
|
||||||
"electron_translate_8": "已下载新的 Qortal UI 版本。",
|
"electron_translate_8": "已下载新的 Qortal UI 版本。",
|
||||||
"electron_translate_9": "点击现在安装应用更新,可能稍后不更新用户界面。",
|
"electron_translate_9": "点击现在安装应用更新,可能稍后不更新用户界面。",
|
||||||
"electron_translate_10": "更新时出错...",
|
"electron_translate_10": "暂时更新失败,稍后再试",
|
||||||
"electron_translate_11": "下载更新",
|
"electron_translate_11": "下载更新",
|
||||||
"electron_translate_12": "它将在后台下载 ⌛️!"
|
"electron_translate_12": "它将在后台下载 ⌛️!"
|
||||||
}
|
}
|
@ -10,7 +10,7 @@
|
|||||||
"electron_translate_7": "更新準備安裝",
|
"electron_translate_7": "更新準備安裝",
|
||||||
"electron_translate_8": "已下載新的 Qortal UI 版本。",
|
"electron_translate_8": "已下載新的 Qortal UI 版本。",
|
||||||
"electron_translate_9": "點擊現在安裝應用更新,可能稍後不更新用戶界面。",
|
"electron_translate_9": "點擊現在安裝應用更新,可能稍後不更新用戶界面。",
|
||||||
"electron_translate_10": "更新時出錯...",
|
"electron_translate_10": "暫時更新失敗,稍後再試",
|
||||||
"electron_translate_11": "下載更新",
|
"electron_translate_11": "下載更新",
|
||||||
"electron_translate_12": "它將在後台下載 ⌛️!"
|
"electron_translate_12": "它將在後台下載 ⌛️!"
|
||||||
}
|
}
|
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "qortal-ui",
|
"name": "qortal-ui",
|
||||||
"version": "3.0.1",
|
"version": "3.1.0",
|
||||||
"description": "Qortal Project - decentralize the world - Data storage, communications, web hosting, decentralized trading, complete infrastructure for the future blockchain-based Internet",
|
"description": "Qortal Project - decentralize the world - Data storage, communications, web hosting, decentralized trading, complete infrastructure for the future blockchain-based Internet",
|
||||||
"keywords": [
|
"keywords": [
|
||||||
"QORT",
|
"QORT",
|
||||||
@ -37,12 +37,12 @@
|
|||||||
"os-locale": "3.0.0"
|
"os-locale": "3.0.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"electron": "22.0.3",
|
"electron": "23.0.0",
|
||||||
"electron-builder": "23.6.0",
|
"electron-builder": "23.6.0",
|
||||||
"electron-packager": "17.1.1",
|
"electron-packager": "17.1.1",
|
||||||
"shelljs": "0.8.5"
|
"shelljs": "0.8.5"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=16.17.1"
|
"node": ">=18.12.1"
|
||||||
}
|
}
|
||||||
}
|
}
|
BIN
qortal-ui-core/font/WorkSans.ttf
Normal file
BIN
qortal-ui-core/font/WorkSans.ttf
Normal file
Binary file not shown.
@ -26,6 +26,13 @@
|
|||||||
url(Montserrat.ttf) format('truetype');
|
url(Montserrat.ttf) format('truetype');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: 'WorkSans';
|
||||||
|
src: local('WorkSans'),
|
||||||
|
local('WorkSans'),
|
||||||
|
url(WorkSans.ttf) format('truetype');
|
||||||
|
}
|
||||||
|
|
||||||
@font-face {
|
@font-face {
|
||||||
font-family: 'Raleway';
|
font-family: 'Raleway';
|
||||||
src: local('Raleway'),
|
src: local('Raleway'),
|
||||||
@ -77,7 +84,8 @@
|
|||||||
font-family: 'Material Symbols Outlined';
|
font-family: 'Material Symbols Outlined';
|
||||||
font-weight: normal;
|
font-weight: normal;
|
||||||
font-style: normal;
|
font-style: normal;
|
||||||
font-size: 24px; /* Preferred icon size */
|
font-size: 24px;
|
||||||
|
/* Preferred icon size */
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
line-height: 1;
|
line-height: 1;
|
||||||
text-transform: none;
|
text-transform: none;
|
||||||
|
@ -36,7 +36,10 @@
|
|||||||
"puzzles": "RÄTSEL",
|
"puzzles": "RÄTSEL",
|
||||||
"nodemanagement": "KNOTENVERWALTUNG",
|
"nodemanagement": "KNOTENVERWALTUNG",
|
||||||
"trading": "HANDELN",
|
"trading": "HANDELN",
|
||||||
"groups": "GRUPPEN"
|
"groups": "GRUPPEN",
|
||||||
|
"sm1": "NAMEN",
|
||||||
|
"sm2": "NAMENSVERWALTUNG",
|
||||||
|
"sm3": "NAMENSMARKT"
|
||||||
},
|
},
|
||||||
"login": {
|
"login": {
|
||||||
"login": "Einloggen",
|
"login": "Einloggen",
|
||||||
@ -283,7 +286,8 @@
|
|||||||
"wchange54": "Adressbuch exportieren",
|
"wchange54": "Adressbuch exportieren",
|
||||||
"wchange55": "Ihr bestehendes Adressbuch wird gelöscht und aus einem Backup neu erstellt.",
|
"wchange55": "Ihr bestehendes Adressbuch wird gelöscht und aus einem Backup neu erstellt.",
|
||||||
"wchange56": "WARNUNG!",
|
"wchange56": "WARNUNG!",
|
||||||
"wchange57": "Memo"
|
"wchange57": "Memo",
|
||||||
|
"wchange58": "Neue Adresse"
|
||||||
},
|
},
|
||||||
"tradepage": {
|
"tradepage": {
|
||||||
"tchange1": "Handelsportal",
|
"tchange1": "Handelsportal",
|
||||||
@ -382,7 +386,7 @@
|
|||||||
"nchange19": "Name Verkaufen",
|
"nchange19": "Name Verkaufen",
|
||||||
"nchange20": "Verkauf abbrechen",
|
"nchange20": "Verkauf abbrechen",
|
||||||
"nchange21": "Name kaufen",
|
"nchange21": "Name kaufen",
|
||||||
"nchange22": "Offenstehende Namen zum Verkauf",
|
"nchange22": "Namensmarkt",
|
||||||
"nchange23": "Verkaufspreis",
|
"nchange23": "Verkaufspreis",
|
||||||
"nchange24": "Keine Namen zu verkaufen",
|
"nchange24": "Keine Namen zu verkaufen",
|
||||||
"nchange25": "Name zu verkaufen",
|
"nchange25": "Name zu verkaufen",
|
||||||
@ -400,7 +404,14 @@
|
|||||||
"nchange37": "ACHTUNG!",
|
"nchange37": "ACHTUNG!",
|
||||||
"nchange38": "Du hast nicht genug Qort, um diesen Namen zu kaufen.",
|
"nchange38": "Du hast nicht genug Qort, um diesen Namen zu kaufen.",
|
||||||
"nchange39": "Sind Sie sicher, diesen Namen zu kaufen?",
|
"nchange39": "Sind Sie sicher, diesen Namen zu kaufen?",
|
||||||
"nchange40": "Wenn Sie auf Bestätigen drücken, wird die Anfrage zum Kauf des Namens gesendet!"
|
"nchange40": "Wenn Sie auf Bestätigen drücken, wird die Anfrage zum Kauf des Namens gesendet!",
|
||||||
|
"nchange41": "Alter Name",
|
||||||
|
"nchange42": "Neuer Name",
|
||||||
|
"nchange43": "Möchten Sie diesen Namen wirklich ändern?",
|
||||||
|
"nchange44": "Zum neuen Namen",
|
||||||
|
"nchange45": "Beim Bestätigen wird die Anfrage zur Namensaktualisierung gesendet!",
|
||||||
|
"nchange46": "Namensverkaufshistorie",
|
||||||
|
"nchange47": "Namensaktualisierung erfolgreich!"
|
||||||
},
|
},
|
||||||
"websitespage": {
|
"websitespage": {
|
||||||
"schange1": "Webseiten durchsuchen",
|
"schange1": "Webseiten durchsuchen",
|
||||||
@ -574,7 +585,13 @@
|
|||||||
"cchange65": "Bitte geben Sie einen Empfänger ein",
|
"cchange65": "Bitte geben Sie einen Empfänger ein",
|
||||||
"cchange66": "Beantwortete Nachricht kann nicht abgerufen werden. Nachricht ist zu alt.",
|
"cchange66": "Beantwortete Nachricht kann nicht abgerufen werden. Nachricht ist zu alt.",
|
||||||
"cchange68": "bearbeitet",
|
"cchange68": "bearbeitet",
|
||||||
"cchange69": "Zeige Bilder automatisch"
|
"cchange69": "Zeige Bilder automatisch",
|
||||||
|
"cchange70": "Dieser Bildtyp wird nicht unterstützt",
|
||||||
|
"cchange71": "und",
|
||||||
|
"cchange72": "andere",
|
||||||
|
"cchange73": "s",
|
||||||
|
"cchange74": "reagiert mit",
|
||||||
|
"cchange90": "Keine Nachrichten"
|
||||||
},
|
},
|
||||||
"welcomepage": {
|
"welcomepage": {
|
||||||
"wcchange1": "Willkommen zu Q-Chat",
|
"wcchange1": "Willkommen zu Q-Chat",
|
||||||
@ -597,7 +614,15 @@
|
|||||||
"bcchange7": "MENÜ",
|
"bcchange7": "MENÜ",
|
||||||
"bcchange8": "Adresse Kopieren",
|
"bcchange8": "Adresse Kopieren",
|
||||||
"bcchange9": "Private Nachricht",
|
"bcchange9": "Private Nachricht",
|
||||||
"bcchange10": "Mehr"
|
"bcchange10": "Mehr",
|
||||||
|
"bcchange11": "Antworten",
|
||||||
|
"bcchange12": "Bearbeiten",
|
||||||
|
"bcchange13": "Reaktion",
|
||||||
|
"bcchange14": "Weiterleiten",
|
||||||
|
"bcchange15": "Nachricht weitergeleitet",
|
||||||
|
"bcchange16": "Empfänger auswählen oder darunter suchen",
|
||||||
|
"bcchange17": "WEITERGELEITET",
|
||||||
|
"bcchange18": "Tipp Benutzer"
|
||||||
},
|
},
|
||||||
"grouppage": {
|
"grouppage": {
|
||||||
"gchange1": "Qortal-Gruppen",
|
"gchange1": "Qortal-Gruppen",
|
||||||
@ -657,7 +682,8 @@
|
|||||||
"gchange55": "Private Gruppe suchen",
|
"gchange55": "Private Gruppe suchen",
|
||||||
"gchange56": "Zu suchender Gruppenname",
|
"gchange56": "Zu suchender Gruppenname",
|
||||||
"gchange57": "Privater Gruppenname nicht gefunden",
|
"gchange57": "Privater Gruppenname nicht gefunden",
|
||||||
"gchange58": "Beachten Sie, dass der Gruppenname genau übereinstimmen muss."
|
"gchange58": "Beachten Sie, dass der Gruppenname genau übereinstimmen muss.",
|
||||||
|
"gchange59": "Ticker ein-/ausblenden"
|
||||||
},
|
},
|
||||||
"puzzlepage": {
|
"puzzlepage": {
|
||||||
"pchange1": "Rätsel",
|
"pchange1": "Rätsel",
|
||||||
|
@ -36,7 +36,10 @@
|
|||||||
"puzzles": "ROMPECABEZAS",
|
"puzzles": "ROMPECABEZAS",
|
||||||
"nodemanagement": "GESTIÓN DE NODO",
|
"nodemanagement": "GESTIÓN DE NODO",
|
||||||
"trading": "COMERCIO",
|
"trading": "COMERCIO",
|
||||||
"groups": "GRUPOS"
|
"groups": "GRUPOS",
|
||||||
|
"sm1": "NOMBRES",
|
||||||
|
"sm2": "GESTIÓN DE NOMBRES",
|
||||||
|
"sm3": "MERCADO DE NOMBRES"
|
||||||
},
|
},
|
||||||
"login": {
|
"login": {
|
||||||
"login": "Iniciar sesión",
|
"login": "Iniciar sesión",
|
||||||
@ -283,7 +286,8 @@
|
|||||||
"wchange54": "Exportar libreta de direcciones",
|
"wchange54": "Exportar libreta de direcciones",
|
||||||
"wchange55": "Su libreta de direcciones existente se eliminará y se creará una nueva copia de seguridad.",
|
"wchange55": "Su libreta de direcciones existente se eliminará y se creará una nueva copia de seguridad.",
|
||||||
"wchange56": "ADVERTENCIA!",
|
"wchange56": "ADVERTENCIA!",
|
||||||
"wchange57": "Memorándum"
|
"wchange57": "Memorándum",
|
||||||
|
"wchange58": "Nueva Dirección"
|
||||||
},
|
},
|
||||||
"tradepage": {
|
"tradepage": {
|
||||||
"tchange1": "Portal de Comercio",
|
"tchange1": "Portal de Comercio",
|
||||||
@ -382,7 +386,7 @@
|
|||||||
"nchange19": "Nombre de venta",
|
"nchange19": "Nombre de venta",
|
||||||
"nchange20": "Cancelar venta",
|
"nchange20": "Cancelar venta",
|
||||||
"nchange21": "Nombre de compra",
|
"nchange21": "Nombre de compra",
|
||||||
"nchange22": "Nombres de mercado abierto para vender",
|
"nchange22": "Mercado de nombres",
|
||||||
"nchange23": "Precio de venta",
|
"nchange23": "Precio de venta",
|
||||||
"nchange24": "No hay nombres para vender",
|
"nchange24": "No hay nombres para vender",
|
||||||
"nchange25": "Nombre para vender",
|
"nchange25": "Nombre para vender",
|
||||||
@ -400,7 +404,14 @@
|
|||||||
"nchange37": "¡ATENCIÓN!",
|
"nchange37": "¡ATENCIÓN!",
|
||||||
"nchange38": "No tienes suficiente qort para comprar este nombre.",
|
"nchange38": "No tienes suficiente qort para comprar este nombre.",
|
||||||
"nchange39": "¿Estás seguro de comprar este nombre?",
|
"nchange39": "¿Estás seguro de comprar este nombre?",
|
||||||
"nchange40": "¡Al presionar confirmar, se enviará la solicitud de compra de nombre!"
|
"nchange40": "¡Al presionar confirmar, se enviará la solicitud de compra de nombre!",
|
||||||
|
"nchange41": "Nombre anterior",
|
||||||
|
"nchange42": "Nuevo Nombre",
|
||||||
|
"nchange43": "¿Estás seguro de cambiar este nombre?",
|
||||||
|
"nchange44": "Al nuevo nombre",
|
||||||
|
"nchange45": "¡Al presionar confirmar, se enviará la solicitud de actualización de nombre!",
|
||||||
|
"nchange46": "Historial de venta de nombres",
|
||||||
|
"nchange47": "¡Actualización de nombre exitosa!"
|
||||||
},
|
},
|
||||||
"websitespage": {
|
"websitespage": {
|
||||||
"schange1": "Navegar sitios web",
|
"schange1": "Navegar sitios web",
|
||||||
@ -574,7 +585,13 @@
|
|||||||
"cchange65": "Ingrese un destinatario",
|
"cchange65": "Ingrese un destinatario",
|
||||||
"cchange66": "No se puede recuperar el mensaje respondido. El mensaje es demasiado antiguo.",
|
"cchange66": "No se puede recuperar el mensaje respondido. El mensaje es demasiado antiguo.",
|
||||||
"cchange68": "editado",
|
"cchange68": "editado",
|
||||||
"cchange69": "Mostrar imágenes automáticamente"
|
"cchange69": "Mostrar imágenes automáticamente",
|
||||||
|
"cchange70": "Este tipo de imagen no es compatible",
|
||||||
|
"cchange71": "y",
|
||||||
|
"cchange72": "otro",
|
||||||
|
"cchange73": "s",
|
||||||
|
"cchange74": "reaccionó con",
|
||||||
|
"cchange90": "Sin mensajes"
|
||||||
},
|
},
|
||||||
"welcomepage": {
|
"welcomepage": {
|
||||||
"wcchange1": "Bienvenido al Q-Chat",
|
"wcchange1": "Bienvenido al Q-Chat",
|
||||||
@ -597,7 +614,15 @@
|
|||||||
"bcchange7": "MENÚ",
|
"bcchange7": "MENÚ",
|
||||||
"bcchange8": "Copiar Dirección",
|
"bcchange8": "Copiar Dirección",
|
||||||
"bcchange9": "Mensaje Privado",
|
"bcchange9": "Mensaje Privado",
|
||||||
"bcchange10": "Más"
|
"bcchange10": "Más",
|
||||||
|
"bcchange11": "Responder",
|
||||||
|
"bcchange12": "Editar",
|
||||||
|
"bcchange13": "Reacción",
|
||||||
|
"bcchange14": "Adelante",
|
||||||
|
"bcchange15": "Mensaje reenviado",
|
||||||
|
"bcchange16": "Elegir destinatario o buscar uno a continuación",
|
||||||
|
"bcchange17": "REENVIADO",
|
||||||
|
"bcchange18": "Sugerencia para el usuario"
|
||||||
},
|
},
|
||||||
"grouppage": {
|
"grouppage": {
|
||||||
"gchange1": "Grupos Qortal",
|
"gchange1": "Grupos Qortal",
|
||||||
@ -657,7 +682,8 @@
|
|||||||
"gchange55": "Buscar grupo privado",
|
"gchange55": "Buscar grupo privado",
|
||||||
"gchange56": "Nombre del grupo a buscar",
|
"gchange56": "Nombre del grupo a buscar",
|
||||||
"gchange57": "Nombre de grupo privado no encontrado",
|
"gchange57": "Nombre de grupo privado no encontrado",
|
||||||
"gchange58": "Tenga en cuenta que el nombre del grupo debe coincidir exactamente."
|
"gchange58": "Tenga en cuenta que el nombre del grupo debe coincidir exactamente.",
|
||||||
|
"gchange59": "Mostrar/ocultar teletipo"
|
||||||
},
|
},
|
||||||
"puzzlepage": {
|
"puzzlepage": {
|
||||||
"pchange1": "Rompecabezas",
|
"pchange1": "Rompecabezas",
|
||||||
|
@ -36,7 +36,10 @@
|
|||||||
"puzzles": "PUZZLES",
|
"puzzles": "PUZZLES",
|
||||||
"nodemanagement": "GESTION DE NOEUDS",
|
"nodemanagement": "GESTION DE NOEUDS",
|
||||||
"trading": "COMMERCE",
|
"trading": "COMMERCE",
|
||||||
"groups": "GROUPES"
|
"groups": "GROUPES",
|
||||||
|
"sm1": "NOMS",
|
||||||
|
"sm2": "GESTION DES NOM",
|
||||||
|
"sm3": "MARCHÉ DES NOMS"
|
||||||
},
|
},
|
||||||
"login": {
|
"login": {
|
||||||
"login": "Connexion",
|
"login": "Connexion",
|
||||||
@ -283,7 +286,8 @@
|
|||||||
"wchange54": "Exporter le carnet d'adresses",
|
"wchange54": "Exporter le carnet d'adresses",
|
||||||
"wchange55": "Votre carnet d'adresses existant sera supprimé et une nouvelle sauvegarde sera créée.",
|
"wchange55": "Votre carnet d'adresses existant sera supprimé et une nouvelle sauvegarde sera créée.",
|
||||||
"wchange56": "ATTENTION!",
|
"wchange56": "ATTENTION!",
|
||||||
"wchange57": "Mémo"
|
"wchange57": "Mémo",
|
||||||
|
"wchange58": "Nouvelle Adresse"
|
||||||
},
|
},
|
||||||
"tradepage": {
|
"tradepage": {
|
||||||
"tchange1": "Portail de commerce",
|
"tchange1": "Portail de commerce",
|
||||||
@ -382,7 +386,7 @@
|
|||||||
"nchange19": "Nom de vente",
|
"nchange19": "Nom de vente",
|
||||||
"nchange20": "Annuler la vente",
|
"nchange20": "Annuler la vente",
|
||||||
"nchange21": "Acheter le nom",
|
"nchange21": "Acheter le nom",
|
||||||
"nchange22": "Noms du marché ouvert à vendre",
|
"nchange22": "Marché des noms",
|
||||||
"nchange23": "Prix de vente",
|
"nchange23": "Prix de vente",
|
||||||
"nchange24": "Aucun nom à vendre",
|
"nchange24": "Aucun nom à vendre",
|
||||||
"nchange25": "Nom à vendre",
|
"nchange25": "Nom à vendre",
|
||||||
@ -400,7 +404,14 @@
|
|||||||
"nchange37": "ATTENTION !",
|
"nchange37": "ATTENTION !",
|
||||||
"nchange38": "Vous n'avez pas assez de qort pour acheter ce nom.",
|
"nchange38": "Vous n'avez pas assez de qort pour acheter ce nom.",
|
||||||
"nchange39": "Êtes-vous sûr d'acheter ce nom ?",
|
"nchange39": "Êtes-vous sûr d'acheter ce nom ?",
|
||||||
"nchange40": "En appuyant sur confirmer, la demande d'achat de nom sera envoyée !"
|
"nchange40": "En appuyant sur confirmer, la demande d'achat de nom sera envoyée !",
|
||||||
|
"nchange41": "Ancien nom",
|
||||||
|
"nchange42": "Nouveau nom",
|
||||||
|
"nchange43": "Êtes-vous sûr de vouloir changer ce nom ?",
|
||||||
|
"nchange44": "Au nouveau nom",
|
||||||
|
"nchange45": "En appuyant sur confirmer, la demande de mise à jour du nom sera envoyée !",
|
||||||
|
"nchange46": "Historique des ventes de noms",
|
||||||
|
"nchange47": "Mise à jour du nom réussie !"
|
||||||
},
|
},
|
||||||
"websitespage": {
|
"websitespage": {
|
||||||
"schange1": "Parcourir les sites Web",
|
"schange1": "Parcourir les sites Web",
|
||||||
@ -574,7 +585,13 @@
|
|||||||
"cchange65": "Veuillez saisir un destinataire",
|
"cchange65": "Veuillez saisir un destinataire",
|
||||||
"cchange66": "Impossible de récupérer le message auquel vous avez répondu. Le message est trop ancien.",
|
"cchange66": "Impossible de récupérer le message auquel vous avez répondu. Le message est trop ancien.",
|
||||||
"cchange68": "modifié",
|
"cchange68": "modifié",
|
||||||
"cchange69": "Afficher automatiquement les images"
|
"cchange69": "Afficher automatiquement les images",
|
||||||
|
"cchange70": "Ce type d'image n'est pas pris en charge",
|
||||||
|
"cchange71": "et",
|
||||||
|
"cchange72": "autre",
|
||||||
|
"cchange73": "s",
|
||||||
|
"cchange74": "a réagi avec",
|
||||||
|
"cchange90": "Aucun message"
|
||||||
},
|
},
|
||||||
"welcomepage": {
|
"welcomepage": {
|
||||||
"wcchange1": "Bienvenue dans Q-Chat",
|
"wcchange1": "Bienvenue dans Q-Chat",
|
||||||
@ -597,7 +614,15 @@
|
|||||||
"bcchange7": "MENU",
|
"bcchange7": "MENU",
|
||||||
"bcchange8": "Copier l'Adresse",
|
"bcchange8": "Copier l'Adresse",
|
||||||
"bcchange9": "Message Privé",
|
"bcchange9": "Message Privé",
|
||||||
"bcchange10": "Suite"
|
"bcchange10": "Suite",
|
||||||
|
"bcchange11": "Répondre",
|
||||||
|
"bcchange12": "Modifier",
|
||||||
|
"bcchange13": "Réaction",
|
||||||
|
"bcchange14": "En avant",
|
||||||
|
"bcchange15": "Message transféré",
|
||||||
|
"bcchange16": "Choisissez le destinataire ou recherchez-en un ci-dessous",
|
||||||
|
"bcchange17": "TRANSMIS",
|
||||||
|
"bcchange18": "Astuce à l'utilisateur"
|
||||||
},
|
},
|
||||||
"grouppage": {
|
"grouppage": {
|
||||||
"gchange1": "Groupes Qortal",
|
"gchange1": "Groupes Qortal",
|
||||||
@ -657,7 +682,8 @@
|
|||||||
"gchange55": "Rechercher un groupe privé",
|
"gchange55": "Rechercher un groupe privé",
|
||||||
"gchange56": "Nom du groupe à rechercher",
|
"gchange56": "Nom du groupe à rechercher",
|
||||||
"gchange57": "Nom de groupe privé introuvable",
|
"gchange57": "Nom de groupe privé introuvable",
|
||||||
"gchange58": "Notez que le nom du groupe doit correspondre exactement."
|
"gchange58": "Notez que le nom du groupe doit correspondre exactement.",
|
||||||
|
"gchange59": "Afficher / Masquer le téléscripteur"
|
||||||
},
|
},
|
||||||
"puzzlepage": {
|
"puzzlepage": {
|
||||||
"pchange1": "Puzzles",
|
"pchange1": "Puzzles",
|
||||||
|
@ -37,7 +37,10 @@
|
|||||||
"puzzles": "पहेलि",
|
"puzzles": "पहेलि",
|
||||||
"nodemanagement": "नोड प्रबंधन",
|
"nodemanagement": "नोड प्रबंधन",
|
||||||
"trading": "व्यापार",
|
"trading": "व्यापार",
|
||||||
"groups": "समूह"
|
"groups": "समूह",
|
||||||
|
"sm1": "नाम",
|
||||||
|
"sm2": "नाम प्रबंधन",
|
||||||
|
"sm3": "नाम बाजार"
|
||||||
},
|
},
|
||||||
"login": {
|
"login": {
|
||||||
"login": "लॉग इन करें",
|
"login": "लॉग इन करें",
|
||||||
@ -284,7 +287,8 @@
|
|||||||
"wchange54": "निर्यात पता पुस्तिका",
|
"wchange54": "निर्यात पता पुस्तिका",
|
||||||
"wchange55": "आपकी मौजूदा पता पुस्तिका हटा दी जाएगी और बैकअप से नया बनाया जाएगा।",
|
"wchange55": "आपकी मौजूदा पता पुस्तिका हटा दी जाएगी और बैकअप से नया बनाया जाएगा।",
|
||||||
"wchange56": "चेतावनी!",
|
"wchange56": "चेतावनी!",
|
||||||
"wchange57": "ज्ञापन"
|
"wchange57": "ज्ञापन",
|
||||||
|
"wchange58": "नया पता"
|
||||||
},
|
},
|
||||||
"tradepage": {
|
"tradepage": {
|
||||||
"tchange1": "व्यापार पोर्टल",
|
"tchange1": "व्यापार पोर्टल",
|
||||||
@ -383,7 +387,7 @@
|
|||||||
"nchange19": "बेचने का नाम",
|
"nchange19": "बेचने का नाम",
|
||||||
"nchange20": "बेचना रद्द करें",
|
"nchange20": "बेचना रद्द करें",
|
||||||
"nchange21": "खरीदें नाम",
|
"nchange21": "खरीदें नाम",
|
||||||
"nchange22": "बेचने के लिए खुले बाज़ार के नाम",
|
"nchange22": "नाम बाजार",
|
||||||
"nchange23": "मूल्य बेचें",
|
"nchange23": "मूल्य बेचें",
|
||||||
"nchange24": "बिक्री के लिए कोई नाम नहीं",
|
"nchange24": "बिक्री के लिए कोई नाम नहीं",
|
||||||
"nchange25": "बेचने के लिए नाम",
|
"nchange25": "बेचने के लिए नाम",
|
||||||
@ -401,7 +405,14 @@
|
|||||||
"nchange37": "ध्यान!",
|
"nchange37": "ध्यान!",
|
||||||
"nchange38": "आपके पास इस नाम को खरीदने के लिए पर्याप्त संसाधन नहीं हैं।",
|
"nchange38": "आपके पास इस नाम को खरीदने के लिए पर्याप्त संसाधन नहीं हैं।",
|
||||||
"nchange39": "क्या आप वाकई इस नाम को खरीदना चाहते हैं?",
|
"nchange39": "क्या आप वाकई इस नाम को खरीदना चाहते हैं?",
|
||||||
"nchange40": "कन्फर्म दबाने पर, बाय नेम रिक्वेस्ट भेजी जाएगी!"
|
"nchange40": "कन्फर्म दबाने पर, बाय नेम रिक्वेस्ट भेजी जाएगी!",
|
||||||
|
"nchange41": "पुराना नाम",
|
||||||
|
"nchange42": "नया नाम",
|
||||||
|
"nchange43": "क्या आप वाकई इस नाम को बदलना चाहते हैं?",
|
||||||
|
"nchange44": "नए नाम से",
|
||||||
|
"nchange45": "पुष्टि करें दबाने पर, नाम अद्यतन अनुरोध भेजा जाएगा!",
|
||||||
|
"nchange46": "नाम बिक्री इतिहास",
|
||||||
|
"nchange47": "नाम अद्यतन सफल!"
|
||||||
},
|
},
|
||||||
"websitespage": {
|
"websitespage": {
|
||||||
"schange1": "वेबसाइट ब्राउज़ करें",
|
"schange1": "वेबसाइट ब्राउज़ करें",
|
||||||
@ -575,7 +586,13 @@
|
|||||||
"cchange65": "कृपया एक प्राप्तकर्ता दर्ज करें",
|
"cchange65": "कृपया एक प्राप्तकर्ता दर्ज करें",
|
||||||
"cchange66": "इसका उत्तर दिया गया संदेश प्राप्त नहीं किया जा सकता। संदेश बहुत पुराना है।",
|
"cchange66": "इसका उत्तर दिया गया संदेश प्राप्त नहीं किया जा सकता। संदेश बहुत पुराना है।",
|
||||||
"cchange68": "संपादित",
|
"cchange68": "संपादित",
|
||||||
"cchange69": "ऑटो-शो छवियां"
|
"cchange69": "ऑटो-शो छवियां",
|
||||||
|
"cchange70": "यह छवि प्रकार समर्थित नहीं है",
|
||||||
|
"cchange71": "और",
|
||||||
|
"cchange72": "अन्य",
|
||||||
|
"cchange73": "s",
|
||||||
|
"cchange74": "के साथ प्रतिक्रिया",
|
||||||
|
"cchange90": "कोई संदेश नहीं"
|
||||||
},
|
},
|
||||||
"welcomepage": {
|
"welcomepage": {
|
||||||
"wcchange1": "क्यू-चैट में आपका स्वागत है",
|
"wcchange1": "क्यू-चैट में आपका स्वागत है",
|
||||||
@ -598,7 +615,15 @@
|
|||||||
"bcchange7": "मेन्यू",
|
"bcchange7": "मेन्यू",
|
||||||
"bcchange8": "कॉपी पता",
|
"bcchange8": "कॉपी पता",
|
||||||
"bcchange9": "निजी संदेश",
|
"bcchange9": "निजी संदेश",
|
||||||
"bcchange10": "अधिक"
|
"bcchange10": "अधिक",
|
||||||
|
"bcchange11": "उत्तर",
|
||||||
|
"bcchange12": "संपादित करें",
|
||||||
|
"bcchange13": "प्रतिक्रिया",
|
||||||
|
"bcchange14": "आगे",
|
||||||
|
"bcchange15": "संदेश अग्रेषित किया गया",
|
||||||
|
"bcchange16": "प्राप्तकर्ता चुनें या नीचे किसी को खोजें",
|
||||||
|
"bcchange17": "अग्रेषित",
|
||||||
|
"bcchange18": "टिप उपयोगकर्ता"
|
||||||
},
|
},
|
||||||
"grouppage": {
|
"grouppage": {
|
||||||
"gchange1": "क्वॉर्टल समूह",
|
"gchange1": "क्वॉर्टल समूह",
|
||||||
@ -658,7 +683,8 @@
|
|||||||
"gchange55": "निजी समूह खोजें",
|
"gchange55": "निजी समूह खोजें",
|
||||||
"gchange56": "खोजने के लिए समूह का नाम",
|
"gchange56": "खोजने के लिए समूह का नाम",
|
||||||
"gchange57": "निजी समूह का नाम नहीं मिला",
|
"gchange57": "निजी समूह का नाम नहीं मिला",
|
||||||
"gchange58": "ध्यान दें कि समूह का नाम सटीक मेल खाना चाहिए।"
|
"gchange58": "ध्यान दें कि समूह का नाम सटीक मेल खाना चाहिए।",
|
||||||
|
"gchange59": "टिकर दिखाएं / छुपाएं"
|
||||||
},
|
},
|
||||||
"puzzlepage": {
|
"puzzlepage": {
|
||||||
"pchange1": "पहेलि",
|
"pchange1": "पहेलि",
|
||||||
|
@ -36,7 +36,10 @@
|
|||||||
"puzzles": "ZAGONETKE",
|
"puzzles": "ZAGONETKE",
|
||||||
"nodemanagement": "UPRAVLJANJE ČVOROVIMA",
|
"nodemanagement": "UPRAVLJANJE ČVOROVIMA",
|
||||||
"trading": "TRGOVANJE",
|
"trading": "TRGOVANJE",
|
||||||
"groups": "GRUPE"
|
"groups": "GRUPE",
|
||||||
|
"sm1": "IMENA",
|
||||||
|
"sm2": "UPRAVLJANJE IMENIMA",
|
||||||
|
"sm3": "TRŽIŠTE IMENA"
|
||||||
},
|
},
|
||||||
"login": {
|
"login": {
|
||||||
"login": "Prijavi se",
|
"login": "Prijavi se",
|
||||||
@ -283,7 +286,8 @@
|
|||||||
"wchange54": "Izvezi adresar",
|
"wchange54": "Izvezi adresar",
|
||||||
"wchange55": "Vaš postojeći adresar bit će izbrisan i novi će se stvoriti iz sigurnosne kopije.",
|
"wchange55": "Vaš postojeći adresar bit će izbrisan i novi će se stvoriti iz sigurnosne kopije.",
|
||||||
"wchange56": "UPOZORENJE!",
|
"wchange56": "UPOZORENJE!",
|
||||||
"wchange57": "Dopis"
|
"wchange57": "Dopis",
|
||||||
|
"wchange58": "Nova Adresa"
|
||||||
},
|
},
|
||||||
"tradepage": {
|
"tradepage": {
|
||||||
"tchange1": "Portal razmjene",
|
"tchange1": "Portal razmjene",
|
||||||
@ -382,7 +386,7 @@
|
|||||||
"nchange19": "Ime prodaje",
|
"nchange19": "Ime prodaje",
|
||||||
"nchange20": "Otkaži prodaju",
|
"nchange20": "Otkaži prodaju",
|
||||||
"nchange21": "Ime kupovine",
|
"nchange21": "Ime kupovine",
|
||||||
"nchange22": "Imena otvorenog tržišta za prodaju",
|
"nchange22": "Tržište imena",
|
||||||
"nchange23": "Prodajna cijena",
|
"nchange23": "Prodajna cijena",
|
||||||
"nchange24": "Nema imena za prodaju",
|
"nchange24": "Nema imena za prodaju",
|
||||||
"nchange25": "Ime za prodaju",
|
"nchange25": "Ime za prodaju",
|
||||||
@ -400,7 +404,14 @@
|
|||||||
"nchange37": "PAŽNJA!",
|
"nchange37": "PAŽNJA!",
|
||||||
"nchange38": "Nemate dovoljno qort da kupite ovo ime.",
|
"nchange38": "Nemate dovoljno qort da kupite ovo ime.",
|
||||||
"nchange39": "Jeste li sigurni da želite kupiti ovo ime?",
|
"nchange39": "Jeste li sigurni da želite kupiti ovo ime?",
|
||||||
"nchange40": "Pritiskom na potvrdu, zahtjev za kupnju imena bit će poslan!"
|
"nchange40": "Pritiskom na potvrdu, zahtjev za kupnju imena bit će poslan!",
|
||||||
|
"nchange41": "Staro ime",
|
||||||
|
"nchange42": "Novo ime",
|
||||||
|
"nchange43": "Jeste li sigurni da želite promijeniti ovo ime?",
|
||||||
|
"nchange44": "Na novo ime",
|
||||||
|
"nchange45": "Kada pritisnete potvrdu, bit će poslan zahtjev za ažuriranje imena!",
|
||||||
|
"nchange46": "Povijest prodaje imena",
|
||||||
|
"nchage47": "Ažuriranje imena uspješno!"
|
||||||
},
|
},
|
||||||
"websitespage": {
|
"websitespage": {
|
||||||
"schange1": "Pregledavanje web stranica",
|
"schange1": "Pregledavanje web stranica",
|
||||||
@ -574,7 +585,13 @@
|
|||||||
"cchange65": "Molimo unesite primatelja",
|
"cchange65": "Molimo unesite primatelja",
|
||||||
"cchange66": "Ne mogu dohvatiti poruku s odgovorom. Poruka je prestara.",
|
"cchange66": "Ne mogu dohvatiti poruku s odgovorom. Poruka je prestara.",
|
||||||
"cchange68": "uređeno",
|
"cchange68": "uređeno",
|
||||||
"cchange69": "Automatsko prikazivanje slika"
|
"cchange69": "Automatsko prikazivanje slika",
|
||||||
|
"cchange70": "Ova vrsta slike nije podržana",
|
||||||
|
"cchange71": "i",
|
||||||
|
"cchange72": "ostalo",
|
||||||
|
"cchange73": "s",
|
||||||
|
"cchange74": "reagirao sa",
|
||||||
|
"cchange90": "Nema poruka"
|
||||||
},
|
},
|
||||||
"welcomepage": {
|
"welcomepage": {
|
||||||
"wcchange1": "Dobrodošli u Q-Čavrljanje",
|
"wcchange1": "Dobrodošli u Q-Čavrljanje",
|
||||||
@ -597,7 +614,15 @@
|
|||||||
"bcchange7": "MENI",
|
"bcchange7": "MENI",
|
||||||
"bcchange8": "Kopiraj Adresu",
|
"bcchange8": "Kopiraj Adresu",
|
||||||
"bcchange9": "Privatna Poruka",
|
"bcchange9": "Privatna Poruka",
|
||||||
"bcchange10": "Više"
|
"bcchange10": "Više",
|
||||||
|
"bcchange11": "Odgovori",
|
||||||
|
"bcchange12": "Uredi",
|
||||||
|
"bcchange13": "Reakcija",
|
||||||
|
"bcchange14": "Naprijed",
|
||||||
|
"bcchange15": "Poruka proslijeđena",
|
||||||
|
"bcchange16": "Odaberite primatelja ili potražite jednog ispod",
|
||||||
|
"bcchange17": "PROSLJEĐENO",
|
||||||
|
"bcchange18": "Savjet korisniku"
|
||||||
},
|
},
|
||||||
"grouppage": {
|
"grouppage": {
|
||||||
"gchange1": "Qortal Grupe",
|
"gchange1": "Qortal Grupe",
|
||||||
@ -657,7 +682,8 @@
|
|||||||
"gchange55": "Traži privatnu grupu",
|
"gchange55": "Traži privatnu grupu",
|
||||||
"gchange56": "Naziv grupe za pretraživanje",
|
"gchange56": "Naziv grupe za pretraživanje",
|
||||||
"gchange57": "Ime privatne grupe nije pronađeno",
|
"gchange57": "Ime privatne grupe nije pronađeno",
|
||||||
"gchange58": "Imajte na umu da se naziv grupe mora točno podudarati."
|
"gchange58": "Imajte na umu da se naziv grupe mora točno podudarati.",
|
||||||
|
"gchange59": "Prikaži / sakrij ticker"
|
||||||
},
|
},
|
||||||
"puzzlepage": {
|
"puzzlepage": {
|
||||||
"pchange1": "Zagonetke",
|
"pchange1": "Zagonetke",
|
||||||
|
@ -36,7 +36,10 @@
|
|||||||
"puzzles": "REJTVÉNYEK",
|
"puzzles": "REJTVÉNYEK",
|
||||||
"nodemanagement": "CSOMÓPONTKEZELÉS",
|
"nodemanagement": "CSOMÓPONTKEZELÉS",
|
||||||
"trading": "KERESKEDÉS",
|
"trading": "KERESKEDÉS",
|
||||||
"groups": "CSOPORTOK"
|
"groups": "CSOPORTOK",
|
||||||
|
"sm1": "NAMES",
|
||||||
|
"sm2": "NÉVKEZELÉS",
|
||||||
|
"sm3": "NAMES PIAC"
|
||||||
},
|
},
|
||||||
"login": {
|
"login": {
|
||||||
"login": "Bejelentkezés",
|
"login": "Bejelentkezés",
|
||||||
@ -283,7 +286,8 @@
|
|||||||
"wchange54": "Címjegyzék exportálása",
|
"wchange54": "Címjegyzék exportálása",
|
||||||
"wchange55": "Meglévő címjegyzéke törlésre kerül, és a biztonsági másolatból új jön létre.",
|
"wchange55": "Meglévő címjegyzéke törlésre kerül, és a biztonsági másolatból új jön létre.",
|
||||||
"wchange56": "FIGYELEM!",
|
"wchange56": "FIGYELEM!",
|
||||||
"wchange57": "Memo"
|
"wchange57": "Memo",
|
||||||
|
"wchange58": "Új Cím"
|
||||||
},
|
},
|
||||||
"tradepage": {
|
"tradepage": {
|
||||||
"tchange1": "Kereskedelmi Portál",
|
"tchange1": "Kereskedelmi Portál",
|
||||||
@ -382,7 +386,7 @@
|
|||||||
"nchange19": "Eladási név",
|
"nchange19": "Eladási név",
|
||||||
"nchange20": "Eladás törlése",
|
"nchange20": "Eladás törlése",
|
||||||
"nchange21": "Vásárlási név",
|
"nchange21": "Vásárlási név",
|
||||||
"nchange22": "Eladó nyílt piaci nevek",
|
"nchange22": "Nevek Piac",
|
||||||
"nchange23": "Eladási ár",
|
"nchange23": "Eladási ár",
|
||||||
"nchange24": "Nincsenek eladható nevek",
|
"nchange24": "Nincsenek eladható nevek",
|
||||||
"nchange25": "Eladó név",
|
"nchange25": "Eladó név",
|
||||||
@ -400,7 +404,14 @@
|
|||||||
"nchange37": "FIGYELEM!",
|
"nchange37": "FIGYELEM!",
|
||||||
"nchange38": "Nincs elég qortja ennek a névnek a megvásárlásához.",
|
"nchange38": "Nincs elég qortja ennek a névnek a megvásárlásához.",
|
||||||
"nchange39": "Biztosan megveszi ezt a nevet?",
|
"nchange39": "Biztosan megveszi ezt a nevet?",
|
||||||
"nchange40": "A megerősítés megnyomására a vásárlási névkérelem elküldésre kerül!"
|
"nchange40": "A megerősítés megnyomására a vásárlási névkérelem elküldésre kerül!",
|
||||||
|
"nchange41": "Régi név",
|
||||||
|
"nchange42": "Új név",
|
||||||
|
"nchange43": "Biztosan megváltoztatja ezt a nevet?",
|
||||||
|
"nchange44": "Az új névre",
|
||||||
|
"nchange45": "A megerősítés megnyomására a névfrissítési kérés elküldésre kerül!",
|
||||||
|
"nchange46": "Név eladási előzmények",
|
||||||
|
"nchange47": "A névfrissítés sikeres!"
|
||||||
},
|
},
|
||||||
"websitespage": {
|
"websitespage": {
|
||||||
"schange1": "Webhelyek Böngészése",
|
"schange1": "Webhelyek Böngészése",
|
||||||
@ -574,7 +585,13 @@
|
|||||||
"cchange65": "Kérjük, adjon meg egy címzettet",
|
"cchange65": "Kérjük, adjon meg egy címzettet",
|
||||||
"cchange66": "Nem sikerült lekérni a válaszolt üzenetet. Az üzenet túl régi.",
|
"cchange66": "Nem sikerült lekérni a válaszolt üzenetet. Az üzenet túl régi.",
|
||||||
"cchange68": "szerkesztve",
|
"cchange68": "szerkesztve",
|
||||||
"cchange69": "Képek automatikus megjelenítése"
|
"cchange69": "Képek automatikus megjelenítése",
|
||||||
|
"cchange70": "Ez a képtípus nem támogatott",
|
||||||
|
"cchange71": "és",
|
||||||
|
"cchange72": "egyéb",
|
||||||
|
"cchange73": "s",
|
||||||
|
"cchange74": "reagált:",
|
||||||
|
"cchange90": "Nincs üzenet"
|
||||||
},
|
},
|
||||||
"welcomepage": {
|
"welcomepage": {
|
||||||
"wcchange1": "Üdvözöljük a Q-Chathoz",
|
"wcchange1": "Üdvözöljük a Q-Chathoz",
|
||||||
@ -597,7 +614,15 @@
|
|||||||
"bcchange7": "MENÜ",
|
"bcchange7": "MENÜ",
|
||||||
"bcchange8": "Cím Másolása",
|
"bcchange8": "Cím Másolása",
|
||||||
"bcchange9": "Privát Üzenet",
|
"bcchange9": "Privát Üzenet",
|
||||||
"bcchange10": "Több"
|
"bcchange10": "Több",
|
||||||
|
"bcchange11": "Válasz",
|
||||||
|
"bcchange12": "Szerkesztés",
|
||||||
|
"bcchange13": "Reakció",
|
||||||
|
"bcchange14": "Tovább",
|
||||||
|
"bcchange15": "Üzenet továbbítva",
|
||||||
|
"bcchange16": "Válasszon címzettet vagy keressen egyet lent",
|
||||||
|
"bcchange17": "TOVÁLTVA",
|
||||||
|
"bcchange18": "Tipp felhasználó"
|
||||||
},
|
},
|
||||||
"grouppage": {
|
"grouppage": {
|
||||||
"gchange1": "Qortal Csoportok",
|
"gchange1": "Qortal Csoportok",
|
||||||
@ -657,7 +682,8 @@
|
|||||||
"gchange55": "Keresés privát csoportban",
|
"gchange55": "Keresés privát csoportban",
|
||||||
"gchange56": "A keresendő csoport neve",
|
"gchange56": "A keresendő csoport neve",
|
||||||
"gchange57": "A privát csoport neve nem található",
|
"gchange57": "A privát csoport neve nem található",
|
||||||
"gchange58": "Ne feledje, hogy a csoport nevének pontosan meg kell egyeznie."
|
"gchange58": "Ne feledje, hogy a csoport nevének pontosan meg kell egyeznie.",
|
||||||
|
"gchange59": "Ticker megjelenítése / elrejtése"
|
||||||
},
|
},
|
||||||
"puzzlepage": {
|
"puzzlepage": {
|
||||||
"pchange1": "Rejtvények",
|
"pchange1": "Rejtvények",
|
||||||
|
@ -36,7 +36,10 @@
|
|||||||
"puzzles": "PUZZLES",
|
"puzzles": "PUZZLES",
|
||||||
"nodemanagement": "GESTIONE DEI NODI",
|
"nodemanagement": "GESTIONE DEI NODI",
|
||||||
"trading": "COMMERCIO",
|
"trading": "COMMERCIO",
|
||||||
"groups": "GRUPPI"
|
"groups": "GRUPPI",
|
||||||
|
"sm1": "NOMI",
|
||||||
|
"sm2": "GESTIONE NOMI",
|
||||||
|
"sm3": "MERCATO DEI NOMI"
|
||||||
},
|
},
|
||||||
"login": {
|
"login": {
|
||||||
"login": "Login",
|
"login": "Login",
|
||||||
@ -283,7 +286,8 @@
|
|||||||
"wchange54": "Esporta rubrica",
|
"wchange54": "Esporta rubrica",
|
||||||
"wchange55": "La tua rubrica esistente verrà eliminata e dal backup verrà creata una nuova.",
|
"wchange55": "La tua rubrica esistente verrà eliminata e dal backup verrà creata una nuova.",
|
||||||
"wchange56": "AVVERTIMENTO!",
|
"wchange56": "AVVERTIMENTO!",
|
||||||
"wchange57": "Memo"
|
"wchange57": "Memo",
|
||||||
|
"wchange58": "Nuovo Indirizzo"
|
||||||
},
|
},
|
||||||
"tradepage": {
|
"tradepage": {
|
||||||
"tchange1": "Portale commerciale",
|
"tchange1": "Portale commerciale",
|
||||||
@ -382,7 +386,7 @@
|
|||||||
"nchange19": "Vendi nome",
|
"nchange19": "Vendi nome",
|
||||||
"nchange20": "Annulla vendita",
|
"nchange20": "Annulla vendita",
|
||||||
"nchange21": "Acquista nome",
|
"nchange21": "Acquista nome",
|
||||||
"nchange22": "Nomi di mercato aperto da vendere",
|
"nchange22": "Mercato dei nomi",
|
||||||
"nchange23": "Prezzo di vendita",
|
"nchange23": "Prezzo di vendita",
|
||||||
"nchange24": "Nessun nome da vendere",
|
"nchange24": "Nessun nome da vendere",
|
||||||
"nchange25": "Nome da vendere",
|
"nchange25": "Nome da vendere",
|
||||||
@ -400,7 +404,14 @@
|
|||||||
"nchange37": "ATTENZIONE!",
|
"nchange37": "ATTENZIONE!",
|
||||||
"nchange38": "Non hai abbastanza qort per acquistare questo nome.",
|
"nchange38": "Non hai abbastanza qort per acquistare questo nome.",
|
||||||
"nchange39": "Sei sicuro di acquistare questo nome?",
|
"nchange39": "Sei sicuro di acquistare questo nome?",
|
||||||
"nchange40": "Premendo conferma, verrà inviata la richiesta di acquisto del nome!"
|
"nchange40": "Premendo conferma, verrà inviata la richiesta di acquisto del nome!",
|
||||||
|
"nchange41": "Vecchio nome",
|
||||||
|
"nchange42": "Nuovo nome",
|
||||||
|
"nchange43": "Sei sicuro di voler cambiare questo nome?",
|
||||||
|
"nchange44": "Al nuovo nome",
|
||||||
|
"nchange45": "Premendo conferma, verrà inviata la richiesta di aggiornamento del nome!",
|
||||||
|
"nchange46": "Nome Cronologia vendite",
|
||||||
|
"nchange47": "Aggiornamento nome riuscito!"
|
||||||
},
|
},
|
||||||
"websitespage": {
|
"websitespage": {
|
||||||
"schange1": "Sfoglia siti Web",
|
"schange1": "Sfoglia siti Web",
|
||||||
@ -574,7 +585,13 @@
|
|||||||
"cchange65": "Inserisci un destinatario",
|
"cchange65": "Inserisci un destinatario",
|
||||||
"cchange66": "Impossibile recuperare il messaggio di risposta. Il messaggio è troppo vecchio.",
|
"cchange66": "Impossibile recuperare il messaggio di risposta. Il messaggio è troppo vecchio.",
|
||||||
"cchange68": "modificato",
|
"cchange68": "modificato",
|
||||||
"cchange69": "Mostra automaticamente le immagini"
|
"cchange69": "Mostra automaticamente le immagini",
|
||||||
|
"cchange70": "Questo tipo di immagine non è supportato",
|
||||||
|
"cchange71": "e",
|
||||||
|
"cchange72": "altro",
|
||||||
|
"cchange73": "s",
|
||||||
|
"cchange74": "ha reagito con",
|
||||||
|
"cchange90": "Nessun messaggio"
|
||||||
},
|
},
|
||||||
"welcomepage": {
|
"welcomepage": {
|
||||||
"wcchange1": "Benvenuto in Q-Chat",
|
"wcchange1": "Benvenuto in Q-Chat",
|
||||||
@ -597,7 +614,15 @@
|
|||||||
"bcchange7": "MENÙ",
|
"bcchange7": "MENÙ",
|
||||||
"bcchange8": "Copia Indirizzo",
|
"bcchange8": "Copia Indirizzo",
|
||||||
"bcchange9": "Messaggio Privato",
|
"bcchange9": "Messaggio Privato",
|
||||||
"bcchange10": "Di più"
|
"bcchange10": "Di più",
|
||||||
|
"bcchange11": "Rispondi",
|
||||||
|
"bcchange12": "Modifica",
|
||||||
|
"bcchange13": "Reazione",
|
||||||
|
"bcchange14": "Avanti",
|
||||||
|
"bcchange15": "Messaggio inoltrato",
|
||||||
|
"bcchange16": "Scegli il destinatario o cercane uno qui sotto",
|
||||||
|
"bcchange17": "INOLTRATO",
|
||||||
|
"bcchange18": "Suggerimento utente"
|
||||||
},
|
},
|
||||||
"grouppage": {
|
"grouppage": {
|
||||||
"gchange1": "Gruppi Qortal",
|
"gchange1": "Gruppi Qortal",
|
||||||
@ -657,7 +682,8 @@
|
|||||||
"gchange55": "Cerca gruppo privato",
|
"gchange55": "Cerca gruppo privato",
|
||||||
"gchange56": "Nome gruppo da cercare",
|
"gchange56": "Nome gruppo da cercare",
|
||||||
"gchange57": "Nome gruppo privato non trovato",
|
"gchange57": "Nome gruppo privato non trovato",
|
||||||
"gchange58": "Nota che il nome del gruppo deve corrispondere esattamente."
|
"gchange58": "Nota che il nome del gruppo deve corrispondere esattamente.",
|
||||||
|
"gchange59": "Mostra / Nascondi ticker"
|
||||||
},
|
},
|
||||||
"puzzlepage": {
|
"puzzlepage": {
|
||||||
"pchange1": "Puzzle",
|
"pchange1": "Puzzle",
|
||||||
|
@ -36,7 +36,10 @@
|
|||||||
"puzzles": "퍼즐",
|
"puzzles": "퍼즐",
|
||||||
"nodemanagement": "노드 관리",
|
"nodemanagement": "노드 관리",
|
||||||
"trading": "무역",
|
"trading": "무역",
|
||||||
"groups": "여러 떼"
|
"groups": "여러 떼",
|
||||||
|
"sm1": "이름",
|
||||||
|
"sm2": "이름 관리",
|
||||||
|
"sm3": "이름 시장"
|
||||||
},
|
},
|
||||||
"login": {
|
"login": {
|
||||||
"login": "로그인",
|
"login": "로그인",
|
||||||
@ -283,7 +286,8 @@
|
|||||||
"wchange54": "주소록 내보내기",
|
"wchange54": "주소록 내보내기",
|
||||||
"wchange55": "기존 주소록이 삭제되고 백업에서 새로 생성됩니다.",
|
"wchange55": "기존 주소록이 삭제되고 백업에서 새로 생성됩니다.",
|
||||||
"wchange56": "경고!",
|
"wchange56": "경고!",
|
||||||
"wchange57": "메모"
|
"wchange57": "메모",
|
||||||
|
"wchange58": "새 주소"
|
||||||
},
|
},
|
||||||
"tradepage": {
|
"tradepage": {
|
||||||
"tchange1": "무역 포털",
|
"tchange1": "무역 포털",
|
||||||
@ -382,7 +386,7 @@
|
|||||||
"nchange19": "판매 이름",
|
"nchange19": "판매 이름",
|
||||||
"nchange20": "매도 취소",
|
"nchange20": "매도 취소",
|
||||||
"nchange21": "구매 이름",
|
"nchange21": "구매 이름",
|
||||||
"nchange22": "판매할 공개 시장 이름",
|
"nchange22": "이름 시장",
|
||||||
"nchange23": "판매 가격",
|
"nchange23": "판매 가격",
|
||||||
"nchange24": "판매할 이름 없음",
|
"nchange24": "판매할 이름 없음",
|
||||||
"nchange25": "판매할 이름",
|
"nchange25": "판매할 이름",
|
||||||
@ -400,7 +404,14 @@
|
|||||||
"nchange37": "주의!",
|
"nchange37": "주의!",
|
||||||
"nchange38": "이 이름을 살 만큼 충분한 qort가 없습니다.",
|
"nchange38": "이 이름을 살 만큼 충분한 qort가 없습니다.",
|
||||||
"nchange39": "이 이름을 구입하시겠습니까?",
|
"nchange39": "이 이름을 구입하시겠습니까?",
|
||||||
"nchange40": "확인을 누르면 구매 이름 요청이 전송됩니다!"
|
"nchange40": "확인을 누르면 구매 이름 요청이 전송됩니다!",
|
||||||
|
"nchange41": "이전 이름",
|
||||||
|
"nchange42": "새 이름",
|
||||||
|
"nchange43": "이 이름을 변경하시겠습니까?",
|
||||||
|
"nchange44": "새 이름으로",
|
||||||
|
"nchange45": "확인을 누르면 이름 업데이트 요청이 전송됩니다!",
|
||||||
|
"nchange46": "네임 세일 내역",
|
||||||
|
"nchange47": "이름 업데이트 성공!"
|
||||||
},
|
},
|
||||||
"websitespage": {
|
"websitespage": {
|
||||||
"schange1": "웹 사이트 찾아보기",
|
"schange1": "웹 사이트 찾아보기",
|
||||||
@ -574,7 +585,13 @@
|
|||||||
"cchange65": "받는 사람을 입력하세요",
|
"cchange65": "받는 사람을 입력하세요",
|
||||||
"cchange66": "답장한 메시지를 가져올 수 없습니다. 메시지가 너무 오래되었습니다.",
|
"cchange66": "답장한 메시지를 가져올 수 없습니다. 메시지가 너무 오래되었습니다.",
|
||||||
"cchange68": "편집됨",
|
"cchange68": "편집됨",
|
||||||
"cchange69": "이미지 자동 표시"
|
"cchange69": "이미지 자동 표시",
|
||||||
|
"cchange70": "이 이미지 유형은 지원되지 않습니다",
|
||||||
|
"cchange71": "그리고",
|
||||||
|
"cchange72": "기타",
|
||||||
|
"cchange73": "들",
|
||||||
|
"cchange74": "반응",
|
||||||
|
"cchange90": "메시지 없음"
|
||||||
},
|
},
|
||||||
"welcomepage": {
|
"welcomepage": {
|
||||||
"wcchange1": "Q-Chat에 오신 것을 환영합니다.",
|
"wcchange1": "Q-Chat에 오신 것을 환영합니다.",
|
||||||
@ -597,7 +614,15 @@
|
|||||||
"bcchange7": "메뉴",
|
"bcchange7": "메뉴",
|
||||||
"bcchange8": "주소 복사",
|
"bcchange8": "주소 복사",
|
||||||
"bcchange9": "개인 메시지",
|
"bcchange9": "개인 메시지",
|
||||||
"bcchange10": "더"
|
"bcchange10": "더",
|
||||||
|
"bcchange11": "답장",
|
||||||
|
"bcchange12": "편집",
|
||||||
|
"bcchange13": "반응",
|
||||||
|
"bcchange14": "앞으로",
|
||||||
|
"bcchange15": "전달된 메시지",
|
||||||
|
"bcchange16": "받는 사람을 선택하거나 아래에서 검색하십시오",
|
||||||
|
"bcchange17": "전달됨",
|
||||||
|
"bcchange18": "팁 사용자"
|
||||||
},
|
},
|
||||||
"grouppage": {
|
"grouppage": {
|
||||||
"gchange1": "Qortal 그룹",
|
"gchange1": "Qortal 그룹",
|
||||||
@ -657,7 +682,8 @@
|
|||||||
"gchange55": "비공개 그룹 검색",
|
"gchange55": "비공개 그룹 검색",
|
||||||
"gchange56": "검색할 그룹 이름",
|
"gchange56": "검색할 그룹 이름",
|
||||||
"gchange57": "비공개 그룹 이름을 찾을 수 없음",
|
"gchange57": "비공개 그룹 이름을 찾을 수 없음",
|
||||||
"gchange58": "그룹 이름이 정확히 일치해야 합니다."
|
"gchange58": "그룹 이름이 정확히 일치해야 합니다.",
|
||||||
|
"gchange59": "티커 표시/숨기기"
|
||||||
},
|
},
|
||||||
"puzzlepage": {
|
"puzzlepage": {
|
||||||
"pchange1": "퍼즐",
|
"pchange1": "퍼즐",
|
||||||
|
@ -36,7 +36,10 @@
|
|||||||
"puzzles": "PUZZLES",
|
"puzzles": "PUZZLES",
|
||||||
"nodemanagement": "NODEADMINISTRASJON",
|
"nodemanagement": "NODEADMINISTRASJON",
|
||||||
"trading": "HANDEL",
|
"trading": "HANDEL",
|
||||||
"groups": "GRUPPER"
|
"groups": "GRUPPER",
|
||||||
|
"sm1": "NAVN",
|
||||||
|
"sm2": "NAVNEBEHANDLING",
|
||||||
|
"sm3": "NAMES MARKET"
|
||||||
},
|
},
|
||||||
"login": {
|
"login": {
|
||||||
"login": "Logg på",
|
"login": "Logg på",
|
||||||
@ -283,7 +286,8 @@
|
|||||||
"wchange54": "Eksporter adressebok",
|
"wchange54": "Eksporter adressebok",
|
||||||
"wchange55": "Din eksisterende adressebok vil bli slettet og ny opprettet fra sikkerhetskopi.",
|
"wchange55": "Din eksisterende adressebok vil bli slettet og ny opprettet fra sikkerhetskopi.",
|
||||||
"wchange56": "ADVARSEL!",
|
"wchange56": "ADVARSEL!",
|
||||||
"wchange57": "Memo"
|
"wchange57": "Memo",
|
||||||
|
"wchange58": "Ny Adresse"
|
||||||
},
|
},
|
||||||
"tradepage": {
|
"tradepage": {
|
||||||
"tchange1": "Handelsportal",
|
"tchange1": "Handelsportal",
|
||||||
@ -382,7 +386,7 @@
|
|||||||
"nchange19": "Selgsnavn",
|
"nchange19": "Selgsnavn",
|
||||||
"nchange20": "Avbryt salg",
|
"nchange20": "Avbryt salg",
|
||||||
"nchange21": "Kjøp navn",
|
"nchange21": "Kjøp navn",
|
||||||
"nchange22": "Åpne markedsnavn å selge",
|
"nchange22": "Navnemarked",
|
||||||
"nchange23": "Selgspris",
|
"nchange23": "Selgspris",
|
||||||
"nchange24": "Ingen navn å selge",
|
"nchange24": "Ingen navn å selge",
|
||||||
"nchange25": "Navn å selge",
|
"nchange25": "Navn å selge",
|
||||||
@ -400,7 +404,14 @@
|
|||||||
"nchange37": "OBS!",
|
"nchange37": "OBS!",
|
||||||
"nchange38": "Du har ikke nok qort til å kjøpe dette navnet.",
|
"nchange38": "Du har ikke nok qort til å kjøpe dette navnet.",
|
||||||
"nchange39": "Er du sikker på å kjøpe dette navnet?",
|
"nchange39": "Er du sikker på å kjøpe dette navnet?",
|
||||||
"nchange40": "Når du trykker bekreft, vil forespørselen om kjøpsnavn bli sendt!"
|
"nchange40": "Når du trykker bekreft, vil forespørselen om kjøpsnavn bli sendt!",
|
||||||
|
"nchange41": "Gammelt navn",
|
||||||
|
"nchange42": "Nytt navn",
|
||||||
|
"nchange43": "Er du sikker på at du vil endre dette navnet?",
|
||||||
|
"nchange44": "Til det nye navnet",
|
||||||
|
"nchange45": "Når du trykker bekreft, vil forespørselen om navneoppdatering bli sendt!",
|
||||||
|
"nchange46": "Navnsalgshistorikk",
|
||||||
|
"nchange47": "Navneoppdateringen er vellykket!"
|
||||||
},
|
},
|
||||||
"websitespage": {
|
"websitespage": {
|
||||||
"schange1": "Bla gjennom nettsteder",
|
"schange1": "Bla gjennom nettsteder",
|
||||||
@ -574,7 +585,13 @@
|
|||||||
"cchange65": "Vennligst skriv inn en mottaker",
|
"cchange65": "Vennligst skriv inn en mottaker",
|
||||||
"cchange66": "Kan ikke hente besvart melding. Meldingen er for gammel.",
|
"cchange66": "Kan ikke hente besvart melding. Meldingen er for gammel.",
|
||||||
"cchange68": "redigert",
|
"cchange68": "redigert",
|
||||||
"cchange69": "Vis bilder automatisk"
|
"cchange69": "Vis bilder automatisk",
|
||||||
|
"cchange70": "Denne bildetypen støttes ikke",
|
||||||
|
"cchange71": "og",
|
||||||
|
"cchange72": "annet",
|
||||||
|
"cchange73": "s",
|
||||||
|
"cchange74": "reagerte med",
|
||||||
|
"cchange90": "Ingen meldinger"
|
||||||
},
|
},
|
||||||
"welcomepage": {
|
"welcomepage": {
|
||||||
"wcchange1": "Velkommen til Q-Chat",
|
"wcchange1": "Velkommen til Q-Chat",
|
||||||
@ -597,7 +614,15 @@
|
|||||||
"bcchange7": "MENY",
|
"bcchange7": "MENY",
|
||||||
"bcchange8": "Kopier adresse",
|
"bcchange8": "Kopier adresse",
|
||||||
"bcchange9": "Privat melding",
|
"bcchange9": "Privat melding",
|
||||||
"bcchange10": "Mer"
|
"bcchange10": "Mer",
|
||||||
|
"bcchange11": "Svar",
|
||||||
|
"bcchange12": "Rediger",
|
||||||
|
"bcchange13": "Reaksjon",
|
||||||
|
"bcchange14": "Videresend",
|
||||||
|
"bcchange15": "Melding videresendt",
|
||||||
|
"bcchange16": "Velg mottaker eller søk etter en nedenfor",
|
||||||
|
"bcchange17": "VIDERESENDE",
|
||||||
|
"bcchange18": "Tipsbruker"
|
||||||
},
|
},
|
||||||
"grouppage": {
|
"grouppage": {
|
||||||
"gchange1": "Qortal-grupper",
|
"gchange1": "Qortal-grupper",
|
||||||
@ -657,7 +682,8 @@
|
|||||||
"gchange55": "Søk i privat gruppe",
|
"gchange55": "Søk i privat gruppe",
|
||||||
"gchange56": "Gruppenavn å søke",
|
"gchange56": "Gruppenavn å søke",
|
||||||
"gchange57": "Privat gruppenavn ikke funnet",
|
"gchange57": "Privat gruppenavn ikke funnet",
|
||||||
"gchange58": "Merk at gruppenavnet må samsvare nøyaktig."
|
"gchange58": "Merk at gruppenavnet må samsvare nøyaktig.",
|
||||||
|
"gchange59": "Vis / Skjul Ticker"
|
||||||
},
|
},
|
||||||
"puzzlepage": {
|
"puzzlepage": {
|
||||||
"pchange1": "Puzzles",
|
"pchange1": "Puzzles",
|
||||||
|
@ -36,7 +36,10 @@
|
|||||||
"puzzles": "PUZZLE",
|
"puzzles": "PUZZLE",
|
||||||
"nodemanagement": "ZARZĄDZANIE WĘZŁAMI",
|
"nodemanagement": "ZARZĄDZANIE WĘZŁAMI",
|
||||||
"trading": "HANDLOWY",
|
"trading": "HANDLOWY",
|
||||||
"groups": "GRUPY"
|
"groups": "GRUPY",
|
||||||
|
"sm1": "NAZWY",
|
||||||
|
"sm2": "ZARZĄDZANIE NAZWAMI",
|
||||||
|
"sm3": "RYNEK NAZW"
|
||||||
},
|
},
|
||||||
"login": {
|
"login": {
|
||||||
"login": "Zaloguj się",
|
"login": "Zaloguj się",
|
||||||
@ -283,7 +286,8 @@
|
|||||||
"wchange54": "Eksportuj książkę adresową",
|
"wchange54": "Eksportuj książkę adresową",
|
||||||
"wchange55": "Twoja istniejąca książka adresowa zostanie usunięta, az kopii zapasowej utworzona nowa.",
|
"wchange55": "Twoja istniejąca książka adresowa zostanie usunięta, az kopii zapasowej utworzona nowa.",
|
||||||
"wchange56": "OSTRZEŻENIE!",
|
"wchange56": "OSTRZEŻENIE!",
|
||||||
"wchange57": "Memo"
|
"wchange57": "Memo",
|
||||||
|
"wchange58": "Nowy Adres"
|
||||||
},
|
},
|
||||||
"tradepage": {
|
"tradepage": {
|
||||||
"tchange1": "Portal Handlowy",
|
"tchange1": "Portal Handlowy",
|
||||||
@ -382,7 +386,7 @@
|
|||||||
"nchange19": "Nazwa sprzedaży",
|
"nchange19": "Nazwa sprzedaży",
|
||||||
"nchange20": "Anuluj sprzedaż",
|
"nchange20": "Anuluj sprzedaż",
|
||||||
"nchange21": "Kup nazwę",
|
"nchange21": "Kup nazwę",
|
||||||
"nchange22": "Otwórz nazwy rynków do sprzedaży",
|
"nchange22": "Rynek imion",
|
||||||
"nchange23": "Cena sprzedaży",
|
"nchange23": "Cena sprzedaży",
|
||||||
"nchange24": "Brak nazw do sprzedania",
|
"nchange24": "Brak nazw do sprzedania",
|
||||||
"nchange25": "Nazwa do sprzedania",
|
"nchange25": "Nazwa do sprzedania",
|
||||||
@ -400,7 +404,14 @@
|
|||||||
"nchange37": "UWAGA!",
|
"nchange37": "UWAGA!",
|
||||||
"nchange38": "Nie masz wystarczającej ilości qort, aby kupić tę nazwę.",
|
"nchange38": "Nie masz wystarczającej ilości qort, aby kupić tę nazwę.",
|
||||||
"nchange39": "Czy na pewno kupisz tę nazwę?",
|
"nchange39": "Czy na pewno kupisz tę nazwę?",
|
||||||
"nchange40": "Po naciśnięciu potwierdzenia, prośba o nazwę kupna zostanie wysłana!"
|
"nchange40": "Po naciśnięciu potwierdzenia, prośba o nazwę kupna zostanie wysłana!",
|
||||||
|
"nchange41": "Stara nazwa",
|
||||||
|
"nchange42": "Nowa nazwa",
|
||||||
|
"nchange43": "Czy na pewno chcesz zmienić tę nazwę?",
|
||||||
|
"nchange44": "Do nowej nazwy",
|
||||||
|
"nchange45": "Po naciśnięciu potwierdzenia, prośba o aktualizację nazwy zostanie wysłana!",
|
||||||
|
"nchange46": "Historia sprzedaży nazw",
|
||||||
|
"nchange47": "Aktualizacja nazwy powiodła się!"
|
||||||
},
|
},
|
||||||
"websitespage": {
|
"websitespage": {
|
||||||
"schange1": "Przeglądaj strony internetowe",
|
"schange1": "Przeglądaj strony internetowe",
|
||||||
@ -574,7 +585,13 @@
|
|||||||
"cchange65": "Wprowadź odbiorcę",
|
"cchange65": "Wprowadź odbiorcę",
|
||||||
"cchange66": "Nie można pobrać wiadomości, na którą udzielono odpowiedzi. Wiadomość jest za stara.",
|
"cchange66": "Nie można pobrać wiadomości, na którą udzielono odpowiedzi. Wiadomość jest za stara.",
|
||||||
"cchange68": "edytowano",
|
"cchange68": "edytowano",
|
||||||
"cchange69": "Automatyczne wyświetlanie obrazów"
|
"cchange69": "Automatyczne wyświetlanie obrazów",
|
||||||
|
"cchange70": "Ten typ obrazu nie jest obsługiwany",
|
||||||
|
"cchange71": "i",
|
||||||
|
"cchange72": "inne",
|
||||||
|
"cchange73": "s",
|
||||||
|
"cchange74": "zareagował z",
|
||||||
|
"cchange90": "Brak wiadomości"
|
||||||
},
|
},
|
||||||
"welcomepage": {
|
"welcomepage": {
|
||||||
"wcchange1": "Witamy w Q-Chat",
|
"wcchange1": "Witamy w Q-Chat",
|
||||||
@ -597,7 +614,15 @@
|
|||||||
"bcchange7": "MENU",
|
"bcchange7": "MENU",
|
||||||
"bcchange8": "Kopiuj Adres",
|
"bcchange8": "Kopiuj Adres",
|
||||||
"bcchange9": "Prywatna Wiadomość",
|
"bcchange9": "Prywatna Wiadomość",
|
||||||
"bcchange10": "Więcej"
|
"bcchange10": "Więcej",
|
||||||
|
"bcchange11": "Odpowiedz",
|
||||||
|
"bcchange12": "Edytuj",
|
||||||
|
"bcchange13": "Reakcja",
|
||||||
|
"bcchange14": "Przekaż",
|
||||||
|
"bcchange15": "Wiadomość przekazana",
|
||||||
|
"bcchange16": "Wybierz odbiorcę lub wyszukaj poniżej",
|
||||||
|
"bcchange17": "PRZEKAZANA",
|
||||||
|
"bcchange18": "Użytkownik napiwku"
|
||||||
},
|
},
|
||||||
"grouppage": {
|
"grouppage": {
|
||||||
"gchange1": "Grupy Qortal",
|
"gchange1": "Grupy Qortal",
|
||||||
@ -657,7 +682,8 @@
|
|||||||
"gchange55": "Wyszukaj grupę prywatną",
|
"gchange55": "Wyszukaj grupę prywatną",
|
||||||
"gchange56": "Nazwa grupy do wyszukania",
|
"gchange56": "Nazwa grupy do wyszukania",
|
||||||
"gchange57": "Nie znaleziono nazwy grupy prywatnej",
|
"gchange57": "Nie znaleziono nazwy grupy prywatnej",
|
||||||
"gchange58": "Zauważ, że nazwa grupy musi dokładnie pasować."
|
"gchange58": "Zauważ, że nazwa grupy musi dokładnie pasować.",
|
||||||
|
"gchange59": "Pokaż / Ukryj Znacznik"
|
||||||
},
|
},
|
||||||
"puzzlepage": {
|
"puzzlepage": {
|
||||||
"pchange1": "Zagadki",
|
"pchange1": "Zagadki",
|
||||||
@ -868,7 +894,7 @@
|
|||||||
"inf9": "„Automatyczne kupowanie” to funkcja umożliwiająca składanie „zleceń kupna” w portalu handlowym. Te „zlecenia kupna” są widoczne tylko dla osoby, która je składa. Nie są to „publiczne” zlecenia kupna, jak np. „sprzedaże z otwartego rynku” są i NIE są przechowywane w łańcuchu blokowym Qortal. Auto Buy to funkcja interfejsu użytkownika i jako taka wymaga, aby interfejs użytkownika URUCHAMIAŁ.",
|
"inf9": "„Automatyczne kupowanie” to funkcja umożliwiająca składanie „zleceń kupna” w portalu handlowym. Te „zlecenia kupna” są widoczne tylko dla osoby, która je składa. Nie są to „publiczne” zlecenia kupna, jak np. „sprzedaże z otwartego rynku” są i NIE są przechowywane w łańcuchu blokowym Qortal. Auto Buy to funkcja interfejsu użytkownika i jako taka wymaga, aby interfejs użytkownika URUCHAMIAŁ.",
|
||||||
"inf10": "Aby złożyć zamówienie automatycznego zakupu, kliknij przycisk „Dodaj zamówienie automatycznego zakupu” i wypełnij pole, które się pojawi. Wprowadź KWOTĘ KWARTOŚCI, którą chcesz KUPIĆ, oraz CENĘ, do której chcesz KUPIĆ. Raz zamówienie jest aktywne, Auto Buy kupi dla ciebie DO tej kwoty QORT, po MAKSYMALNIE ustalonej cenie (zaczynając od najniższego zamówienia i przesuwając się w górę).",
|
"inf10": "Aby złożyć zamówienie automatycznego zakupu, kliknij przycisk „Dodaj zamówienie automatycznego zakupu” i wypełnij pole, które się pojawi. Wprowadź KWOTĘ KWARTOŚCI, którą chcesz KUPIĆ, oraz CENĘ, do której chcesz KUPIĆ. Raz zamówienie jest aktywne, Auto Buy kupi dla ciebie DO tej kwoty QORT, po MAKSYMALNIE ustalonej cenie (zaczynając od najniższego zamówienia i przesuwając się w górę).",
|
||||||
"inf11": "Po prostu ZOSTAW DZIAŁAJĄCY UI, a Auto Buy zrobi resztę automatycznie!",
|
"inf11": "Po prostu ZOSTAW DZIAŁAJĄCY UI, a Auto Buy zrobi resztę automatycznie!",
|
||||||
"inf12": "MOŻESZ przeglądać inne wtyczki w interfejsie użytkownika (Q-Chat, portfele itp.), ale NIE MOŻESZ ZAMKNĄĆ interfejsu użytkownika, jeśli chcesz, aby zakup automatyczny został zakończony. Pozostawienie interfejsu użytkownika „zminimalizowanego” na „pasku zadań” lub „panel” jest w porządku, o ile interfejs użytkownika pozostaje OTWARTY, Auto Buy będzie działać."
|
"inf12": "MOŻESZ przeglądać inne wtyczki w interfejsie użytkownika (Q-Chat, portfele itp.), ale NIE MOŻESZ ZAMKNĄĆ interfejsu użytkownika, jeśli chcesz, aby zakup automatyczny został zakończony. Pozostawienie interfejsu użytkownika „zminimalizowanego” na „pasku zadań” lub „panel” jest w porządku, o ile interfejs użytkownika pozostaje OTWARTY, Auto Buy będzie działać.",
|
||||||
"inf13": "Kup automatycznie",
|
"inf13": "Kup automatycznie",
|
||||||
"inf14": "z",
|
"inf14": "z",
|
||||||
"inf15": "Aktywne automatyczne zamówienia zakupu",
|
"inf15": "Aktywne automatyczne zamówienia zakupu",
|
||||||
|
@ -36,7 +36,10 @@
|
|||||||
"puzzles": "ENIGMAS",
|
"puzzles": "ENIGMAS",
|
||||||
"nodemanagement": "GERENCIAMENTO DO NÓDULO",
|
"nodemanagement": "GERENCIAMENTO DO NÓDULO",
|
||||||
"trading": "NEGOCIAÇÃO",
|
"trading": "NEGOCIAÇÃO",
|
||||||
"groups": "GRUPOS"
|
"groups": "GRUPOS",
|
||||||
|
"sm1": "NOMES",
|
||||||
|
"sm2": "GESTÃO DE NOME",
|
||||||
|
"sm3": "MERCADO DE NOMES"
|
||||||
},
|
},
|
||||||
"login": {
|
"login": {
|
||||||
"login": "Login",
|
"login": "Login",
|
||||||
@ -283,7 +286,8 @@
|
|||||||
"wchange54": "Exportar catálogo de endereços",
|
"wchange54": "Exportar catálogo de endereços",
|
||||||
"wchange55": "Seu catálogo de endereços existente será excluído e o backup será criado novamente.",
|
"wchange55": "Seu catálogo de endereços existente será excluído e o backup será criado novamente.",
|
||||||
"wchange56": "AVISO!",
|
"wchange56": "AVISO!",
|
||||||
"wchange57": "Memorando"
|
"wchange57": "Memorando",
|
||||||
|
"wchange58": "Novo Endereço"
|
||||||
},
|
},
|
||||||
"tradepage": {
|
"tradepage": {
|
||||||
"tchange1": "Portal do Comércio",
|
"tchange1": "Portal do Comércio",
|
||||||
@ -382,7 +386,7 @@
|
|||||||
"nchange19": "Nome de venda",
|
"nchange19": "Nome de venda",
|
||||||
"nchange20": "Cancelar venda",
|
"nchange20": "Cancelar venda",
|
||||||
"nchange21": "Nome da compra",
|
"nchange21": "Nome da compra",
|
||||||
"nchange22": "Nomes de mercado aberto para vender",
|
"nchange22": "Mercado de nomes",
|
||||||
"nchange23": "Preço de venda",
|
"nchange23": "Preço de venda",
|
||||||
"nchange24": "Sem nomes para vender",
|
"nchange24": "Sem nomes para vender",
|
||||||
"nchange25": "Nome para vender",
|
"nchange25": "Nome para vender",
|
||||||
@ -400,7 +404,14 @@
|
|||||||
"nchange37": "ATENÇÃO!",
|
"nchange37": "ATENÇÃO!",
|
||||||
"nchange38": "Você não tem qort suficiente para comprar este nome.",
|
"nchange38": "Você não tem qort suficiente para comprar este nome.",
|
||||||
"nchange39": "Tem certeza que deseja comprar este nome ?",
|
"nchange39": "Tem certeza que deseja comprar este nome ?",
|
||||||
"nchange40": "Ao pressionar confirmar, a solicitação do nome de compra será enviada!"
|
"nchange40": "Ao pressionar confirmar, a solicitação do nome de compra será enviada!",
|
||||||
|
"nchange41": "Nome antigo",
|
||||||
|
"nchange42": "Novo nome",
|
||||||
|
"nchange43": "Tem certeza que deseja alterar este nome?",
|
||||||
|
"nchange44": "Para o novo nome",
|
||||||
|
"nchange45": "Ao pressionar confirmar, a solicitação de atualização de nome será enviada!",
|
||||||
|
"nchange46": "Histórico de vendas de nomes",
|
||||||
|
"nchange47": "Atualização de nome com sucesso!"
|
||||||
},
|
},
|
||||||
"websitespage": {
|
"websitespage": {
|
||||||
"schange1": "Navegar Sites",
|
"schange1": "Navegar Sites",
|
||||||
@ -574,7 +585,13 @@
|
|||||||
"cchange65": "Insira um destinatário",
|
"cchange65": "Insira um destinatário",
|
||||||
"cchange66": "Não foi possível buscar a mensagem respondida. A mensagem é muito antiga.",
|
"cchange66": "Não foi possível buscar a mensagem respondida. A mensagem é muito antiga.",
|
||||||
"cchange68": "editado",
|
"cchange68": "editado",
|
||||||
"cchange69": "Mostrar imagens automaticamente"
|
"cchange69": "Mostrar imagens automaticamente",
|
||||||
|
"cchange70": "Este tipo de imagem não é suportado",
|
||||||
|
"cchange71": "e",
|
||||||
|
"cchange72": "outro",
|
||||||
|
"cchange73": "s",
|
||||||
|
"cchange74": "reagiu com",
|
||||||
|
"cchange90": "Sem mensagens"
|
||||||
},
|
},
|
||||||
"welcomepage": {
|
"welcomepage": {
|
||||||
"wcchange1": "Bem-vindo ao Q-Chat",
|
"wcchange1": "Bem-vindo ao Q-Chat",
|
||||||
@ -597,7 +614,15 @@
|
|||||||
"bcchange7": "MENU",
|
"bcchange7": "MENU",
|
||||||
"bcchange8": "Copiar Endereço",
|
"bcchange8": "Copiar Endereço",
|
||||||
"bcchange9": "Mensagem Privada",
|
"bcchange9": "Mensagem Privada",
|
||||||
"bcchange10": "Mais"
|
"bcchange10": "Mais",
|
||||||
|
"bcchange11": "Responder",
|
||||||
|
"bcchange12": "Editar",
|
||||||
|
"bcchange13": "Reação",
|
||||||
|
"bcchange14": "Avançar",
|
||||||
|
"bcchange15": "Mensagem encaminhada",
|
||||||
|
"bcchange16": "Escolha o destinatário ou procure um abaixo",
|
||||||
|
"bcchange17": "ENCAMINHADO",
|
||||||
|
"bcchange18": "Dica de usuário"
|
||||||
},
|
},
|
||||||
"grouppage": {
|
"grouppage": {
|
||||||
"gchange1": "Grupos Qortal",
|
"gchange1": "Grupos Qortal",
|
||||||
@ -657,7 +682,8 @@
|
|||||||
"gchange55": "Pesquisar Grupo Privado",
|
"gchange55": "Pesquisar Grupo Privado",
|
||||||
"gchange56": "Nome do grupo para pesquisar",
|
"gchange56": "Nome do grupo para pesquisar",
|
||||||
"gchange57": "Nome do grupo privado não encontrado",
|
"gchange57": "Nome do grupo privado não encontrado",
|
||||||
"gchange58": "Observe que o nome do grupo deve corresponder exatamente."
|
"gchange58": "Observe que o nome do grupo deve corresponder exatamente.",
|
||||||
|
"gchange59": "Mostrar / Ocultar Ticker"
|
||||||
},
|
},
|
||||||
"puzzlepage": {
|
"puzzlepage": {
|
||||||
"pchange1": "Enigmas",
|
"pchange1": "Enigmas",
|
||||||
|
@ -36,7 +36,10 @@
|
|||||||
"puzzles": "PUZZLE-URI",
|
"puzzles": "PUZZLE-URI",
|
||||||
"nodemanagement": "GESTIONARE NOD",
|
"nodemanagement": "GESTIONARE NOD",
|
||||||
"trading": "COMERCIAL",
|
"trading": "COMERCIAL",
|
||||||
"groups": "GRUPURI"
|
"groups": "GRUPURI",
|
||||||
|
"sm1": "NUME",
|
||||||
|
"sm2": "GESTIONAREA NUMELE",
|
||||||
|
"sm3": "PIAȚA NUMELOR"
|
||||||
},
|
},
|
||||||
"login": {
|
"login": {
|
||||||
"login": "Login",
|
"login": "Login",
|
||||||
@ -283,7 +286,8 @@
|
|||||||
"wchange54": "Exportati agenda de adrese",
|
"wchange54": "Exportati agenda de adrese",
|
||||||
"wchange55": "Agenda dvs. existenta va fi stearsa si din backup va fi creata o noua.",
|
"wchange55": "Agenda dvs. existenta va fi stearsa si din backup va fi creata o noua.",
|
||||||
"wchange56": "AVERTIZARE!",
|
"wchange56": "AVERTIZARE!",
|
||||||
"wchange57": "Nota"
|
"wchange57": "Nota",
|
||||||
|
"wchange58": "Adresa noua"
|
||||||
},
|
},
|
||||||
"tradepage": {
|
"tradepage": {
|
||||||
"tchange1": "Portal de Tranzactionare",
|
"tchange1": "Portal de Tranzactionare",
|
||||||
@ -382,7 +386,7 @@
|
|||||||
"nchange19": "Numele vinde",
|
"nchange19": "Numele vinde",
|
||||||
"nchange20": "Anulați vânzarea",
|
"nchange20": "Anulați vânzarea",
|
||||||
"nchange21": "Cumpărați numele",
|
"nchange21": "Cumpărați numele",
|
||||||
"nchange22": "Nume piețe deschise de vândut",
|
"nchange22": "Piața de nume",
|
||||||
"nchange23": "Preț de vânzare",
|
"nchange23": "Preț de vânzare",
|
||||||
"nchange24": "Fără nume de vândut",
|
"nchange24": "Fără nume de vândut",
|
||||||
"nchange25": "Nume de vândut",
|
"nchange25": "Nume de vândut",
|
||||||
@ -400,7 +404,14 @@
|
|||||||
"nchange37": "ATENȚIE!",
|
"nchange37": "ATENȚIE!",
|
||||||
"nchange38": "Nu aveți suficient qort pentru a cumpăra acest nume.",
|
"nchange38": "Nu aveți suficient qort pentru a cumpăra acest nume.",
|
||||||
"nchange39": "Sunteți sigur că veți cumpăra acest nume?",
|
"nchange39": "Sunteți sigur că veți cumpăra acest nume?",
|
||||||
"nchange40": "La apăsarea confirmării, cererea de nume de cumpărare va fi trimisă!"
|
"nchange40": "La apăsarea confirmării, cererea de nume de cumpărare va fi trimisă!",
|
||||||
|
"nchange41": "Nume vechi",
|
||||||
|
"nchange42": "Nume nou",
|
||||||
|
"nchange43": "Sigur vei schimba acest nume?",
|
||||||
|
"nchange44": "La noul nume",
|
||||||
|
"nchange45": "La apăsarea confirmării, cererea de actualizare a numelui va fi trimisă!",
|
||||||
|
"nchange46": "Istoricul vânzărilor de nume",
|
||||||
|
"nchange47": "Actualizarea numelui a reușit!"
|
||||||
},
|
},
|
||||||
"websitespage": {
|
"websitespage": {
|
||||||
"schange1": "Navigati pe Site-uri Web",
|
"schange1": "Navigati pe Site-uri Web",
|
||||||
@ -574,7 +585,13 @@
|
|||||||
"cchange65": "Vă rugăm să introduceți un destinatar",
|
"cchange65": "Vă rugăm să introduceți un destinatar",
|
||||||
"cchange66": "Nu se poate prelua mesajul la care sa răspuns. Mesajul este prea vechi.",
|
"cchange66": "Nu se poate prelua mesajul la care sa răspuns. Mesajul este prea vechi.",
|
||||||
"cchange68": "editat",
|
"cchange68": "editat",
|
||||||
"cchange69": "Afișează automat imaginile"
|
"cchange69": "Afișează automat imaginile",
|
||||||
|
"cchange70": "Acest tip de imagine nu este acceptat",
|
||||||
|
"cchange71": "și",
|
||||||
|
"cchange72": "altul",
|
||||||
|
"cchange73": "s",
|
||||||
|
"cchange74": "a reacționat cu",
|
||||||
|
"cchange90": "Fără mesaje"
|
||||||
},
|
},
|
||||||
"welcomepage": {
|
"welcomepage": {
|
||||||
"wcchange1": "Bine ai venit la Q-Chat",
|
"wcchange1": "Bine ai venit la Q-Chat",
|
||||||
@ -597,7 +614,15 @@
|
|||||||
"bcchange7": "MENIU",
|
"bcchange7": "MENIU",
|
||||||
"bcchange8": "Copiati adresa",
|
"bcchange8": "Copiati adresa",
|
||||||
"bcchange9": "Mesaj privat",
|
"bcchange9": "Mesaj privat",
|
||||||
"bcchange10": "Mai mult"
|
"bcchange10": "Mai mult",
|
||||||
|
"bcchange11": "Răspuns",
|
||||||
|
"bcchange12": "Editați",
|
||||||
|
"bcchange13": "Reacție",
|
||||||
|
"bcchange14": "Înainte",
|
||||||
|
"bcchange15": "Mesajul redirecționat",
|
||||||
|
"bcchange16": "Alegeți destinatarul sau căutați unul mai jos",
|
||||||
|
"bcchange17": "REMISE",
|
||||||
|
"bcchange18": "Sfat utilizator"
|
||||||
},
|
},
|
||||||
"grouppage": {
|
"grouppage": {
|
||||||
"gchange1": "Grupuri Qortal Groups",
|
"gchange1": "Grupuri Qortal Groups",
|
||||||
@ -657,7 +682,8 @@
|
|||||||
"gchange55": "Căutați grup privat",
|
"gchange55": "Căutați grup privat",
|
||||||
"gchange56": "Numele grupului de căutat",
|
"gchange56": "Numele grupului de căutat",
|
||||||
"gchange57": "Numele grupului privat nu a fost găsit",
|
"gchange57": "Numele grupului privat nu a fost găsit",
|
||||||
"gchange58": "Rețineți că numele grupului trebuie să se potrivească exact."
|
"gchange58": "Rețineți că numele grupului trebuie să se potrivească exact.",
|
||||||
|
"gchange59": "Afișează / Ascunde Ticker"
|
||||||
},
|
},
|
||||||
"puzzlepage": {
|
"puzzlepage": {
|
||||||
"pchange1": "Puzzle-uri",
|
"pchange1": "Puzzle-uri",
|
||||||
|
@ -36,7 +36,10 @@
|
|||||||
"puzzles": "SLAGALICE",
|
"puzzles": "SLAGALICE",
|
||||||
"nodemanagement": "MENADŽMENT ČVORIŠTA",
|
"nodemanagement": "MENADŽMENT ČVORIŠTA",
|
||||||
"trading": "TRADING",
|
"trading": "TRADING",
|
||||||
"groups": "GRUPE"
|
"groups": "GRUPE",
|
||||||
|
"sm1": "NAMES",
|
||||||
|
"sm2": "UPRAVLJANJE IMENOM",
|
||||||
|
"sm3": "TRŽIŠTE IMENA"
|
||||||
},
|
},
|
||||||
"login": {
|
"login": {
|
||||||
"login": "Prijava",
|
"login": "Prijava",
|
||||||
@ -283,7 +286,8 @@
|
|||||||
"wchange54": "Izvezi adresar",
|
"wchange54": "Izvezi adresar",
|
||||||
"wchange55": "Vaš postojeći adresar će biti obrisan, a iz rezervne kopije biće kreiran novi.",
|
"wchange55": "Vaš postojeći adresar će biti obrisan, a iz rezervne kopije biće kreiran novi.",
|
||||||
"wchange56": "UPOZORENJE!",
|
"wchange56": "UPOZORENJE!",
|
||||||
"wchange57": "Beleška"
|
"wchange57": "Beleška",
|
||||||
|
"wchange58": "Nova Adresa"
|
||||||
},
|
},
|
||||||
"tradepage": {
|
"tradepage": {
|
||||||
"tchange1": "Trgovinski prozor",
|
"tchange1": "Trgovinski prozor",
|
||||||
@ -382,7 +386,7 @@
|
|||||||
"nchange19": "Ime prodaje",
|
"nchange19": "Ime prodaje",
|
||||||
"nchange20": "Otkaži prodaju",
|
"nchange20": "Otkaži prodaju",
|
||||||
"nchange21": "Kupite ime",
|
"nchange21": "Kupite ime",
|
||||||
"nchange22": "Imena na otvorenom tržištu za prodaju",
|
"nchange22": "Tržište imena",
|
||||||
"nchange23": "Cena prodaje",
|
"nchange23": "Cena prodaje",
|
||||||
"nchange24": "Nema imena za prodaju",
|
"nchange24": "Nema imena za prodaju",
|
||||||
"nchange25": "Ime za prodaju",
|
"nchange25": "Ime za prodaju",
|
||||||
@ -400,7 +404,14 @@
|
|||||||
"nchange37": "PAŽNJA!",
|
"nchange37": "PAŽNJA!",
|
||||||
"nchange38": "Nemate dovoljno kort da kupite ovo ime.",
|
"nchange38": "Nemate dovoljno kort da kupite ovo ime.",
|
||||||
"nchange39": "Da li ste sigurni da kupujete ovo ime?",
|
"nchange39": "Da li ste sigurni da kupujete ovo ime?",
|
||||||
"nchange40": "Pritiskom na potvrdu, zahtev za kupovinu imena će biti poslat!"
|
"nchange40": "Pritiskom na potvrdu, zahtev za kupovinu imena će biti poslat!",
|
||||||
|
"nchange41": "Staro ime",
|
||||||
|
"nchange42": "Novo ime",
|
||||||
|
"nchange43": "Da li ste sigurni da promenite ovo ime?",
|
||||||
|
"nchange44": "Na novo ime",
|
||||||
|
"nchange45": "Pritiskom na potvrdu, zahtev za ažuriranje imena će biti poslat!",
|
||||||
|
"nchange46": "Istorija prodaje imena",
|
||||||
|
"nchange47": "Ažuriranje imena je uspešno!"
|
||||||
},
|
},
|
||||||
"websitespage": {
|
"websitespage": {
|
||||||
"schange1": "Pretraživanje web sajtova",
|
"schange1": "Pretraživanje web sajtova",
|
||||||
@ -574,7 +585,13 @@
|
|||||||
"cchange65": "Unesite primaoca",
|
"cchange65": "Unesite primaoca",
|
||||||
"cchange66": "Ne mogu preuzeti odgovor na poruku. Poruka je prestara.",
|
"cchange66": "Ne mogu preuzeti odgovor na poruku. Poruka je prestara.",
|
||||||
"cchange68": "uređeno",
|
"cchange68": "uređeno",
|
||||||
"cchange69": "Automatski prikaži slike"
|
"cchange69": "Automatski prikaži slike",
|
||||||
|
"cchange70": "Ovaj tip slike nije podržan",
|
||||||
|
"cchange71": "i",
|
||||||
|
"cchange72": "drugo",
|
||||||
|
"cchange73": "s",
|
||||||
|
"cchange74": "reagovao sa",
|
||||||
|
"cchange90": "Nema poruka"
|
||||||
},
|
},
|
||||||
"welcomepage": {
|
"welcomepage": {
|
||||||
"wcchange1": "Dobrodošli na Q-Chat",
|
"wcchange1": "Dobrodošli na Q-Chat",
|
||||||
@ -597,7 +614,15 @@
|
|||||||
"bcchange7": "MENI",
|
"bcchange7": "MENI",
|
||||||
"bcchange8": "Kopiraj Adresu",
|
"bcchange8": "Kopiraj Adresu",
|
||||||
"bcchange9": "Privatna Poruka",
|
"bcchange9": "Privatna Poruka",
|
||||||
"bcchange10": "Više"
|
"bcchange10": "Više",
|
||||||
|
"bcchange11": "Odgovori",
|
||||||
|
"bcchange12": "Izmeni",
|
||||||
|
"bcchange13": "Reakcija",
|
||||||
|
"bcchange14": "Napred",
|
||||||
|
"bcchange15": "Poruka je prosleđena",
|
||||||
|
"bcchange16": "Izaberite primaoca ili potražite jednog ispod",
|
||||||
|
"bcchange17": "PROSLEĐEN",
|
||||||
|
"bcchange18": "Korisnik saveta"
|
||||||
},
|
},
|
||||||
"grouppage": {
|
"grouppage": {
|
||||||
"gchange1": "Qortal Grupe",
|
"gchange1": "Qortal Grupe",
|
||||||
@ -657,7 +682,8 @@
|
|||||||
"gchange55": "Pretraži privatnu grupu",
|
"gchange55": "Pretraži privatnu grupu",
|
||||||
"gchange56": "Ime grupe za pretragu",
|
"gchange56": "Ime grupe za pretragu",
|
||||||
"gchange57": "Ime privatne grupe nije pronađeno",
|
"gchange57": "Ime privatne grupe nije pronađeno",
|
||||||
"gchange58": "Imajte na umu da ime grupe mora potpuno da se podudara."
|
"gchange58": "Imajte na umu da ime grupe mora potpuno da se podudara.",
|
||||||
|
"gchange59": "Prikaži / Sakrij Oznaku"
|
||||||
},
|
},
|
||||||
"puzzlepage": {
|
"puzzlepage": {
|
||||||
"pchange1": "Slagalice",
|
"pchange1": "Slagalice",
|
||||||
|
@ -36,7 +36,10 @@
|
|||||||
"puzzles": "ГОЛОВОЛОМКИ",
|
"puzzles": "ГОЛОВОЛОМКИ",
|
||||||
"nodemanagement": "УПРАВЛЕНИЕ УЗЛАМИ",
|
"nodemanagement": "УПРАВЛЕНИЕ УЗЛАМИ",
|
||||||
"trading": "ТОРГОВЛЯ",
|
"trading": "ТОРГОВЛЯ",
|
||||||
"groups": "ГРУППЫ"
|
"groups": "ГРУППЫ",
|
||||||
|
"sm1": "ИМЕНА",
|
||||||
|
"sm2": "УПРАВЛЕНИЕ ИМЕНАМИ",
|
||||||
|
"sm3": "РЫНОК ИМЕН"
|
||||||
},
|
},
|
||||||
"login": {
|
"login": {
|
||||||
"login": "Войти",
|
"login": "Войти",
|
||||||
@ -283,7 +286,8 @@
|
|||||||
"wchange54": "Экспорт адресной книги",
|
"wchange54": "Экспорт адресной книги",
|
||||||
"wchange55": "Ваша существующая адресная книга будет удалена, а из резервной копии создана новая.",
|
"wchange55": "Ваша существующая адресная книга будет удалена, а из резервной копии создана новая.",
|
||||||
"wchange56": "ПРЕДУПРЕЖДЕНИЕ!",
|
"wchange56": "ПРЕДУПРЕЖДЕНИЕ!",
|
||||||
"wchange57": "Памятка"
|
"wchange57": "Памятка",
|
||||||
|
"wchange58": "Новый Адрес"
|
||||||
},
|
},
|
||||||
"tradepage": {
|
"tradepage": {
|
||||||
"tchange1": "Торговый портал",
|
"tchange1": "Торговый портал",
|
||||||
@ -382,7 +386,7 @@
|
|||||||
"nchange19": "Продать имя",
|
"nchange19": "Продать имя",
|
||||||
"nchange20": "Отменить продажу",
|
"nchange20": "Отменить продажу",
|
||||||
"nchange21": "Купить имя",
|
"nchange21": "Купить имя",
|
||||||
"nchange22": "Имена на открытом рынке для продажи",
|
"nchange22": "Рынок имен",
|
||||||
"nchange23": "Цена продажи",
|
"nchange23": "Цена продажи",
|
||||||
"nchange24": "Нет имен для продажи",
|
"nchange24": "Нет имен для продажи",
|
||||||
"nchange25": "Имя для продажи",
|
"nchange25": "Имя для продажи",
|
||||||
@ -400,7 +404,14 @@
|
|||||||
"nchange37": "ВНИМАНИЕ!",
|
"nchange37": "ВНИМАНИЕ!",
|
||||||
"nchange38": "У вас недостаточно qort, чтобы купить это имя.",
|
"nchange38": "У вас недостаточно qort, чтобы купить это имя.",
|
||||||
"nchange39": "Вы уверены, что купите это имя?",
|
"nchange39": "Вы уверены, что купите это имя?",
|
||||||
"nchange40": "При нажатии кнопки подтверждения будет отправлен запрос имени на покупку!"
|
"nchange40": "При нажатии кнопки подтверждения будет отправлен запрос имени на покупку!",
|
||||||
|
"nchange41": "Старое имя",
|
||||||
|
"nchange42": "Новое имя",
|
||||||
|
"nchange43": "Вы уверены, что хотите изменить это имя?",
|
||||||
|
"nchange44": "На новое имя",
|
||||||
|
"nchange45": "При нажатии подтверждения будет отправлен запрос на обновление имени!",
|
||||||
|
"nchange46": "История продажи имени",
|
||||||
|
"nchange47": "Имя обновлено успешно!"
|
||||||
},
|
},
|
||||||
"websitespage": {
|
"websitespage": {
|
||||||
"schange1": "Просматривать веб-сайты",
|
"schange1": "Просматривать веб-сайты",
|
||||||
@ -574,7 +585,13 @@
|
|||||||
"cchange65": "Пожалуйста, введите получателя",
|
"cchange65": "Пожалуйста, введите получателя",
|
||||||
"cchange66": "Невозможно получить ответное сообщение. Сообщение слишком старое.",
|
"cchange66": "Невозможно получить ответное сообщение. Сообщение слишком старое.",
|
||||||
"cchange68": "отредактировано",
|
"cchange68": "отредактировано",
|
||||||
"cchange69": "Автоматическое отображение изображений"
|
"cchange69": "Автоматическое отображение изображений",
|
||||||
|
"cchange70": "Этот тип изображения не поддерживается",
|
||||||
|
"cchange71": "и",
|
||||||
|
"cchange72": "другое",
|
||||||
|
"cchange73": "с",
|
||||||
|
"cchange74": "отреагировал",
|
||||||
|
"cchange90": "Нет сообщений"
|
||||||
},
|
},
|
||||||
"welcomepage": {
|
"welcomepage": {
|
||||||
"wcchange1": "Добро пожаловать в Q-Chat",
|
"wcchange1": "Добро пожаловать в Q-Chat",
|
||||||
@ -597,7 +614,15 @@
|
|||||||
"bcchange7": "МЕНЮ",
|
"bcchange7": "МЕНЮ",
|
||||||
"bcchange8": "Копировать адрес",
|
"bcchange8": "Копировать адрес",
|
||||||
"bcchange9": "Приватное сообщение",
|
"bcchange9": "Приватное сообщение",
|
||||||
"bcchange10": "Более"
|
"bcchange10": "Более",
|
||||||
|
"bcchange11": "Ответить",
|
||||||
|
"bcchange12": "Редактировать",
|
||||||
|
"bcchange13": "Реакция",
|
||||||
|
"bcchange14": "Вперед",
|
||||||
|
"bcchange15": "Сообщение переадресовано",
|
||||||
|
"bcchange16": "Выберите получателя или найдите его ниже",
|
||||||
|
"bcchange17": "ПЕРЕДАНО",
|
||||||
|
"bcchange18": "Подсказка пользователю"
|
||||||
},
|
},
|
||||||
"grouppage": {
|
"grouppage": {
|
||||||
"gchange1": "Qortal группы",
|
"gchange1": "Qortal группы",
|
||||||
@ -657,7 +682,8 @@
|
|||||||
"gchange55": "Поиск в закрытой группе",
|
"gchange55": "Поиск в закрытой группе",
|
||||||
"gchange56": "Имя группы для поиска",
|
"gchange56": "Имя группы для поиска",
|
||||||
"gchange57": "Имя частной группы не найдено",
|
"gchange57": "Имя частной группы не найдено",
|
||||||
"gchange58": "Обратите внимание, что название группы должно точно совпадать."
|
"gchange58": "Обратите внимание, что название группы должно точно совпадать.",
|
||||||
|
"gchange59": "Показать/скрыть бегущую строку"
|
||||||
},
|
},
|
||||||
"puzzlepage": {
|
"puzzlepage": {
|
||||||
"pchange1": "Головоломки",
|
"pchange1": "Головоломки",
|
||||||
|
@ -36,7 +36,10 @@
|
|||||||
"puzzles": "PUZZLES",
|
"puzzles": "PUZZLES",
|
||||||
"nodemanagement": "NODE MANAGEMENT",
|
"nodemanagement": "NODE MANAGEMENT",
|
||||||
"trading": "TRADING",
|
"trading": "TRADING",
|
||||||
"groups": "GROUPS"
|
"groups": "GROUPS",
|
||||||
|
"sm1": "NAMES",
|
||||||
|
"sm2": "NAME MANAGEMENT",
|
||||||
|
"sm3": "NAMES MARKET"
|
||||||
},
|
},
|
||||||
"login": {
|
"login": {
|
||||||
"login": "Login",
|
"login": "Login",
|
||||||
@ -283,7 +286,8 @@
|
|||||||
"wchange54": "Export Address Book",
|
"wchange54": "Export Address Book",
|
||||||
"wchange55": "Your existing address book will be deleted and from backup new created.",
|
"wchange55": "Your existing address book will be deleted and from backup new created.",
|
||||||
"wchange56": "WARNING!",
|
"wchange56": "WARNING!",
|
||||||
"wchange57": "Memo"
|
"wchange57": "Memo",
|
||||||
|
"wchange58": "New Address"
|
||||||
},
|
},
|
||||||
"tradepage": {
|
"tradepage": {
|
||||||
"tchange1": "Trade Portal",
|
"tchange1": "Trade Portal",
|
||||||
@ -382,7 +386,7 @@
|
|||||||
"nchange19": "Sell Name",
|
"nchange19": "Sell Name",
|
||||||
"nchange20": "Cancel Sell",
|
"nchange20": "Cancel Sell",
|
||||||
"nchange21": "Buy Name",
|
"nchange21": "Buy Name",
|
||||||
"nchange22": "Open Market Names To Sell",
|
"nchange22": "Names Market",
|
||||||
"nchange23": "Sell Price",
|
"nchange23": "Sell Price",
|
||||||
"nchange24": "No Names To Sell",
|
"nchange24": "No Names To Sell",
|
||||||
"nchange25": "Name To Sell",
|
"nchange25": "Name To Sell",
|
||||||
@ -400,7 +404,14 @@
|
|||||||
"nchange37": "ATTENTION!",
|
"nchange37": "ATTENTION!",
|
||||||
"nchange38": "You not have enough qort to buy this name.",
|
"nchange38": "You not have enough qort to buy this name.",
|
||||||
"nchange39": "Are you sure to buy this name ?",
|
"nchange39": "Are you sure to buy this name ?",
|
||||||
"nchange40": "On pressing confirm, the buy name request will be sent!"
|
"nchange40": "On pressing confirm, the buy name request will be sent!",
|
||||||
|
"nchange41": "Old Name",
|
||||||
|
"nchange42": "New Name",
|
||||||
|
"nchange43": "Are you sure to change this name ?",
|
||||||
|
"nchange44": "To the new name",
|
||||||
|
"nchange45": "On pressing confirm, the name update request will be sent!",
|
||||||
|
"nchange46": "Name Sale History",
|
||||||
|
"nchange47": "Name Update Successful!"
|
||||||
},
|
},
|
||||||
"websitespage": {
|
"websitespage": {
|
||||||
"schange1": "Browse Websites",
|
"schange1": "Browse Websites",
|
||||||
@ -579,7 +590,16 @@
|
|||||||
"cchange71": "and",
|
"cchange71": "and",
|
||||||
"cchange72": "other",
|
"cchange72": "other",
|
||||||
"cchange73": "s",
|
"cchange73": "s",
|
||||||
"cchange74": "reacted with"
|
"cchange74": "reacted with",
|
||||||
|
"cchange75": "Uploading attachment. This may take up to one minute.",
|
||||||
|
"cchange76": "Deleting attachment. This may take up to one minute.",
|
||||||
|
"cchange77": "Attachment size exceeds 1 MB",
|
||||||
|
"cchange78": "Are you sure you want to delete this image?",
|
||||||
|
"cchange79": "Are you sure you want to delete this attachment?",
|
||||||
|
"cchange80": "This image has been deleted",
|
||||||
|
"cchange81": "This image type is not supported",
|
||||||
|
"cchange82": "This attachment has been deleted",
|
||||||
|
"cchange90": "No messages"
|
||||||
},
|
},
|
||||||
"welcomepage": {
|
"welcomepage": {
|
||||||
"wcchange1": "Welcome to Q-Chat",
|
"wcchange1": "Welcome to Q-Chat",
|
||||||
@ -670,7 +690,8 @@
|
|||||||
"gchange55": "Search Private Group",
|
"gchange55": "Search Private Group",
|
||||||
"gchange56": "Group Name To Search",
|
"gchange56": "Group Name To Search",
|
||||||
"gchange57": "Private Group Name Not Found",
|
"gchange57": "Private Group Name Not Found",
|
||||||
"gchange58": "Note that group name must exact match."
|
"gchange58": "Note that group name must exact match.",
|
||||||
|
"gchange59": "Show / Hide Ticker"
|
||||||
},
|
},
|
||||||
"puzzlepage": {
|
"puzzlepage": {
|
||||||
"pchange1": "Puzzles",
|
"pchange1": "Puzzles",
|
||||||
|
@ -36,7 +36,10 @@
|
|||||||
"puzzles": "益智游戏",
|
"puzzles": "益智游戏",
|
||||||
"nodemanagement": "节点管理",
|
"nodemanagement": "节点管理",
|
||||||
"trading": "贸易",
|
"trading": "贸易",
|
||||||
"groups": "群组"
|
"groups": "群组",
|
||||||
|
"sm1": "名字",
|
||||||
|
"sm2": "名称管理",
|
||||||
|
"sm3": "名称市场"
|
||||||
},
|
},
|
||||||
"login": {
|
"login": {
|
||||||
"login": "登入",
|
"login": "登入",
|
||||||
@ -283,7 +286,8 @@
|
|||||||
"wchange54": "导出通讯录",
|
"wchange54": "导出通讯录",
|
||||||
"wchange55": "您现有的通讯簿将被删除并从新创建的备份中。",
|
"wchange55": "您现有的通讯簿将被删除并从新创建的备份中。",
|
||||||
"wchange56": "警告!",
|
"wchange56": "警告!",
|
||||||
"wchange57": "备忘录"
|
"wchange57": "备忘录",
|
||||||
|
"wchange58": "新的钱包地址"
|
||||||
},
|
},
|
||||||
"tradepage": {
|
"tradepage": {
|
||||||
"tchange1": "交易门户",
|
"tchange1": "交易门户",
|
||||||
@ -382,7 +386,7 @@
|
|||||||
"nchange19": "销售名称",
|
"nchange19": "销售名称",
|
||||||
"nchange20": "取消销售",
|
"nchange20": "取消销售",
|
||||||
"nchange21": "购买名称",
|
"nchange21": "购买名称",
|
||||||
"nchange22": "公开市场名称出售",
|
"nchange22": "地名市场",
|
||||||
"nchange23": "卖出价",
|
"nchange23": "卖出价",
|
||||||
"nchange24": "没有名字可以卖",
|
"nchange24": "没有名字可以卖",
|
||||||
"nchange25": "出售名称",
|
"nchange25": "出售名称",
|
||||||
@ -400,7 +404,14 @@
|
|||||||
"nchange37": "注意!",
|
"nchange37": "注意!",
|
||||||
"nchange38": "你没有足够的qort 来购买这个名字。",
|
"nchange38": "你没有足够的qort 来购买这个名字。",
|
||||||
"nchange39": "你确定要买这个名字吗?",
|
"nchange39": "你确定要买这个名字吗?",
|
||||||
"nchange40": "按下确认后,将发送购买名称请求!"
|
"nchange40": "按下确认后,将发送购买名称请求!",
|
||||||
|
"nchange41": "旧名称",
|
||||||
|
"nchange42": "新名称",
|
||||||
|
"nchange43": "您确定要更改此名称吗?",
|
||||||
|
"nchange44": "改成新名字",
|
||||||
|
"nchange45": "按下确认后,将发送名称更新请求!",
|
||||||
|
"nchange46": "命名销售历史",
|
||||||
|
"nchange47": "名称更新成功!"
|
||||||
},
|
},
|
||||||
"websitespage": {
|
"websitespage": {
|
||||||
"schange1": "浏览网站",
|
"schange1": "浏览网站",
|
||||||
@ -579,7 +590,8 @@
|
|||||||
"cchange71": "和",
|
"cchange71": "和",
|
||||||
"cchange72": "其他",
|
"cchange72": "其他",
|
||||||
"cchange73": "的",
|
"cchange73": "的",
|
||||||
"cchange74": "心情回应"
|
"cchange74": "心情回应",
|
||||||
|
"cchange90": "没有消息"
|
||||||
},
|
},
|
||||||
"welcomepage": {
|
"welcomepage": {
|
||||||
"wcchange1": "欢迎来到Q-Chat",
|
"wcchange1": "欢迎来到Q-Chat",
|
||||||
@ -670,7 +682,8 @@
|
|||||||
"gchange55": "搜索私人群组",
|
"gchange55": "搜索私人群组",
|
||||||
"gchange56": "要搜索的群组名称",
|
"gchange56": "要搜索的群组名称",
|
||||||
"gchange57": "未找到私人群组名称",
|
"gchange57": "未找到私人群组名称",
|
||||||
"gchange58": "注意群组名称必须完全匹配。"
|
"gchange58": "注意群组名称必须完全匹配。",
|
||||||
|
"gchange59": "显示/隐藏代码"
|
||||||
},
|
},
|
||||||
"puzzlepage": {
|
"puzzlepage": {
|
||||||
"pchange1": "益智游戏",
|
"pchange1": "益智游戏",
|
||||||
|
@ -36,7 +36,10 @@
|
|||||||
"puzzles": "益智遊戲",
|
"puzzles": "益智遊戲",
|
||||||
"nodemanagement": "節點管理",
|
"nodemanagement": "節點管理",
|
||||||
"trading": "貿易",
|
"trading": "貿易",
|
||||||
"groups": "群組"
|
"groups": "群組",
|
||||||
|
"sm1": "名字",
|
||||||
|
"sm2": "名稱管理",
|
||||||
|
"sm3": "名稱市場"
|
||||||
},
|
},
|
||||||
"login": {
|
"login": {
|
||||||
"login": "登入",
|
"login": "登入",
|
||||||
@ -283,7 +286,8 @@
|
|||||||
"wchange54": "導出通訊錄",
|
"wchange54": "導出通訊錄",
|
||||||
"wchange55": "您現有的通訊簿將被刪除並從新創建的備份中。",
|
"wchange55": "您現有的通訊簿將被刪除並從新創建的備份中。",
|
||||||
"wchange56": "警告!",
|
"wchange56": "警告!",
|
||||||
"wchange57": "備忘錄"
|
"wchange57": "備忘錄",
|
||||||
|
"wchange58": "新的錢包地址"
|
||||||
},
|
},
|
||||||
"tradepage": {
|
"tradepage": {
|
||||||
"tchange1": "交易門戶",
|
"tchange1": "交易門戶",
|
||||||
@ -382,7 +386,7 @@
|
|||||||
"nchange19": "銷售名稱",
|
"nchange19": "銷售名稱",
|
||||||
"nchange20": "取消銷售",
|
"nchange20": "取消銷售",
|
||||||
"nchange21": "購買名稱",
|
"nchange21": "購買名稱",
|
||||||
"nchange22": "公開市場名稱出售",
|
"nchange22": "地名市場",
|
||||||
"nchange23": "賣出價",
|
"nchange23": "賣出價",
|
||||||
"nchange24": "沒有名字可以賣",
|
"nchange24": "沒有名字可以賣",
|
||||||
"nchange25": "出售名稱",
|
"nchange25": "出售名稱",
|
||||||
@ -400,7 +404,14 @@
|
|||||||
"nchange37": "注意!",
|
"nchange37": "注意!",
|
||||||
"nchange38": "你沒有足夠的 qort 來購買這個名字。",
|
"nchange38": "你沒有足夠的 qort 來購買這個名字。",
|
||||||
"nchange39": "你確定要買這個名字嗎?",
|
"nchange39": "你確定要買這個名字嗎?",
|
||||||
"nchange40": "按下確認後,將發送購買名稱請求!"
|
"nchange40": "按下確認後,將發送購買名稱請求!",
|
||||||
|
"nchange41": "舊名稱",
|
||||||
|
"nchange42": "新名稱",
|
||||||
|
"nchange43": "您確定要更改此名稱嗎?",
|
||||||
|
"nchange44": "改成新名字",
|
||||||
|
"nchange45": "按下確認後,將發送名稱更新請求!",
|
||||||
|
"nchange46": "命名銷售歷史",
|
||||||
|
"nchange47": "名稱更新成功!"
|
||||||
},
|
},
|
||||||
"websitespage": {
|
"websitespage": {
|
||||||
"schange1": "瀏覽網站",
|
"schange1": "瀏覽網站",
|
||||||
@ -579,7 +590,8 @@
|
|||||||
"cchange71": "和",
|
"cchange71": "和",
|
||||||
"cchange72": "其他",
|
"cchange72": "其他",
|
||||||
"cchange73": "的",
|
"cchange73": "的",
|
||||||
"cchange74": "心情回應"
|
"cchange74": "心情回應",
|
||||||
|
"cchange90": "沒有消息"
|
||||||
},
|
},
|
||||||
"welcomepage": {
|
"welcomepage": {
|
||||||
"wcchange1": "歡迎來到 Q-Chat",
|
"wcchange1": "歡迎來到 Q-Chat",
|
||||||
@ -670,7 +682,8 @@
|
|||||||
"gchange55": "搜索私人群組",
|
"gchange55": "搜索私人群組",
|
||||||
"gchange56": "要搜索的群組名稱",
|
"gchange56": "要搜索的群組名稱",
|
||||||
"gchange57": "未找到私人群組名稱",
|
"gchange57": "未找到私人群組名稱",
|
||||||
"gchange58": "注意群組名稱必須完全匹配。"
|
"gchange58": "注意群組名稱必須完全匹配。",
|
||||||
|
"gchange59": "顯示/隱藏代碼"
|
||||||
},
|
},
|
||||||
"puzzlepage": {
|
"puzzlepage": {
|
||||||
"pchange1": "益智游戲",
|
"pchange1": "益智游戲",
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "qortal-ui-core",
|
"name": "qortal-ui-core",
|
||||||
"version": "3.0.0",
|
"version": "3.1.0",
|
||||||
"description": "Qortal Project - decentralize the world - Data storage, communications, web hosting, decentralized trading, complete infrastructure for the future blockchain-based Internet",
|
"description": "Qortal Project - decentralize the world - Data storage, communications, web hosting, decentralized trading, complete infrastructure for the future blockchain-based Internet",
|
||||||
"keywords": [
|
"keywords": [
|
||||||
"QORT",
|
"QORT",
|
||||||
@ -17,9 +17,9 @@
|
|||||||
"author": "QORTAL <admin@qortal.org>",
|
"author": "QORTAL <admin@qortal.org>",
|
||||||
"license": "GPL-3.0",
|
"license": "GPL-3.0",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@hapi/hapi": "21.2.1",
|
"@hapi/hapi": "21.3.0",
|
||||||
"@hapi/inert": "7.0.0",
|
"@hapi/inert": "7.0.1",
|
||||||
"sass": "1.58.0"
|
"sass": "1.58.1"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@babel/core": "7.20.12",
|
"@babel/core": "7.20.12",
|
||||||
@ -74,13 +74,13 @@
|
|||||||
"pwa-helpers": "0.9.1",
|
"pwa-helpers": "0.9.1",
|
||||||
"redux": "4.2.1",
|
"redux": "4.2.1",
|
||||||
"redux-thunk": "2.4.2",
|
"redux-thunk": "2.4.2",
|
||||||
"rollup": "3.14.0",
|
"rollup": "3.15.0",
|
||||||
"rollup-plugin-node-globals": "1.4.0",
|
"rollup-plugin-node-globals": "1.4.0",
|
||||||
"rollup-plugin-progress": "1.1.2",
|
"rollup-plugin-progress": "1.1.2",
|
||||||
"rollup-plugin-scss": "3.0.0",
|
"rollup-plugin-scss": "3.0.0",
|
||||||
"rollup-plugin-web-worker-loader": "1.6.1"
|
"rollup-plugin-web-worker-loader": "1.6.1"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=16.17.1"
|
"node": ">=18.12.1"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -18,6 +18,7 @@ class AppInfo extends connect(store)(LitElement) {
|
|||||||
coreInfo: { type: Array },
|
coreInfo: { type: Array },
|
||||||
nodeConfig: { type: Object },
|
nodeConfig: { type: Object },
|
||||||
pageUrl: { type: String },
|
pageUrl: { type: String },
|
||||||
|
publicizeAddress: { type: String },
|
||||||
theme: { type: String, reflect: true }
|
theme: { type: String, reflect: true }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -95,6 +96,7 @@ class AppInfo extends connect(store)(LitElement) {
|
|||||||
this.coreInfo = []
|
this.coreInfo = []
|
||||||
this.nodeStatus = {}
|
this.nodeStatus = {}
|
||||||
this.pageUrl = ''
|
this.pageUrl = ''
|
||||||
|
this.publicizeAddress = ''
|
||||||
this.theme = localStorage.getItem('qortalTheme') ? localStorage.getItem('qortalTheme') : 'light'
|
this.theme = localStorage.getItem('qortalTheme') ? localStorage.getItem('qortalTheme') : 'light'
|
||||||
this.publicKeyisOnChainConfirmation = false
|
this.publicKeyisOnChainConfirmation = false
|
||||||
this.interval
|
this.interval
|
||||||
@ -112,22 +114,44 @@ class AppInfo extends connect(store)(LitElement) {
|
|||||||
`
|
`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
firstUpdated() {
|
||||||
|
this.publicizeAddress = store.getState().app.selectedAddress.address + '_publicize'
|
||||||
|
this.setStorage()
|
||||||
|
this.getNodeInfo()
|
||||||
|
this.getCoreInfo()
|
||||||
|
try {
|
||||||
|
this.confirmPublicKeyOnChain(store.getState().app.selectedAddress.address)
|
||||||
|
} catch (error) {
|
||||||
|
console.error(error)
|
||||||
|
}
|
||||||
|
|
||||||
|
setInterval(() => {
|
||||||
|
this.getNodeInfo()
|
||||||
|
this.getCoreInfo()
|
||||||
|
}, 30000)
|
||||||
|
}
|
||||||
|
|
||||||
|
setStorage() {
|
||||||
|
if (localStorage.getItem(this.publicizeAddress) === null) {
|
||||||
|
localStorage.setItem(this.publicizeAddress, 'false')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
async confirmPublicKeyOnChain(address) {
|
async confirmPublicKeyOnChain(address) {
|
||||||
const _computePow2 = async (chatBytes) => {
|
const _computePow2 = async (chatBytes) => {
|
||||||
const difficulty = 14;
|
const difficulty = 14
|
||||||
const path = window.parent.location.origin + '/memory-pow/memory-pow.wasm.full'
|
const path = window.parent.location.origin + '/memory-pow/memory-pow.wasm.full'
|
||||||
const worker = new WebWorker();
|
const worker = new WebWorker();
|
||||||
let nonce = null
|
let nonce = null
|
||||||
let chatBytesArray = null
|
let chatBytesArray = null
|
||||||
await new Promise((res, rej) => {
|
await new Promise((res, rej) => {
|
||||||
worker.postMessage({chatBytes, path, difficulty});
|
worker.postMessage({chatBytes, path, difficulty})
|
||||||
|
|
||||||
worker.onmessage = e => {
|
worker.onmessage = e => {
|
||||||
worker.terminate()
|
worker.terminate()
|
||||||
chatBytesArray = e.data.chatBytesArray
|
chatBytesArray = e.data.chatBytesArray
|
||||||
nonce = e.data.nonce
|
nonce = e.data.nonce
|
||||||
res()
|
res()
|
||||||
|
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -137,37 +161,35 @@ class AppInfo extends connect(store)(LitElement) {
|
|||||||
chatBytesArray: chatBytesArray,
|
chatBytesArray: chatBytesArray,
|
||||||
chatNonce: nonce
|
chatNonce: nonce
|
||||||
},
|
},
|
||||||
|
})
|
||||||
});
|
|
||||||
return _response
|
return _response
|
||||||
};
|
}
|
||||||
|
|
||||||
|
|
||||||
let stop = false
|
let stop = false
|
||||||
const checkPublicKey = async () => {
|
const checkPublicKey = async () => {
|
||||||
if (!stop) {
|
if (!stop) {
|
||||||
stop = true;
|
stop = true
|
||||||
try {
|
try {
|
||||||
if(this.publicKeyisOnChainConfirmation){
|
if(localStorage.getItem(this.publicizeAddress) === 'true') {
|
||||||
clearInterval(this.interval)
|
clearInterval(this.interval)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
const myNode = store.getState().app.nodeConfig.knownNodes[store.getState().app.nodeConfig.node];
|
const myNode = store.getState().app.nodeConfig.knownNodes[store.getState().app.nodeConfig.node]
|
||||||
const nodeUrl = myNode.protocol + '://' + myNode.domain + ':' + myNode.port;
|
const nodeUrl = myNode.protocol + '://' + myNode.domain + ':' + myNode.port
|
||||||
const url = `${nodeUrl}/addresses/publickey/${address}`;
|
const url = `${nodeUrl}/addresses/publickey/${address}`
|
||||||
const res = await fetch(url)
|
const res = await fetch(url)
|
||||||
let data = ''
|
let data = ''
|
||||||
try {
|
try {
|
||||||
data = await res.text();
|
data = await res.text()
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
data = {
|
data = {
|
||||||
error: 'error'
|
error: 'error'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(data === 'false' && this.nodeInfo.isSynchronizing !== true){
|
if(data === 'false' && this.nodeInfo.isSynchronizing !== true) {
|
||||||
let _reference = new Uint8Array(64);
|
let _reference = new Uint8Array(64)
|
||||||
window.crypto.getRandomValues(_reference);
|
window.crypto.getRandomValues(_reference)
|
||||||
let reference = window.parent.Base58.encode(_reference);
|
let reference = window.parent.Base58.encode(_reference)
|
||||||
const chatRes = await routes.chat({
|
const chatRes = await routes.chat({
|
||||||
data: {
|
data: {
|
||||||
type: 19,
|
type: 19,
|
||||||
@ -177,7 +199,6 @@ class AppInfo extends connect(store)(LitElement) {
|
|||||||
proofOfWorkNonce: 0,
|
proofOfWorkNonce: 0,
|
||||||
fee: 0,
|
fee: 0,
|
||||||
timestamp: Date.now(),
|
timestamp: Date.now(),
|
||||||
|
|
||||||
},
|
},
|
||||||
disableModal: true
|
disableModal: true
|
||||||
},
|
},
|
||||||
@ -186,10 +207,10 @@ class AppInfo extends connect(store)(LitElement) {
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
const powRes = await _computePow2(chatRes)
|
const powRes = await _computePow2(chatRes)
|
||||||
if(powRes === true){
|
if(powRes === true) {
|
||||||
clearInterval(this.interval)
|
clearInterval(this.interval)
|
||||||
|
localStorage.removeItem(this.publicizeAddress)
|
||||||
this.publicKeyisOnChainConfirmation = true
|
localStorage.setItem(this.publicizeAddress, 'true')
|
||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error(error)
|
console.error(error)
|
||||||
@ -198,34 +219,18 @@ class AppInfo extends connect(store)(LitElement) {
|
|||||||
|
|
||||||
if (!data.error && data !== 'false' && data) {
|
if (!data.error && data !== 'false' && data) {
|
||||||
clearInterval(this.interval)
|
clearInterval(this.interval)
|
||||||
|
localStorage.removeItem(this.publicizeAddress)
|
||||||
this.publicKeyisOnChainConfirmation = true
|
localStorage.setItem(this.publicizeAddress, 'true')
|
||||||
}
|
}
|
||||||
|
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
}
|
}
|
||||||
stop = false
|
stop = false
|
||||||
}
|
}
|
||||||
};
|
}
|
||||||
this.interval = setInterval(checkPublicKey, 5000);
|
this.interval = setInterval(checkPublicKey, 5000);
|
||||||
}
|
}
|
||||||
|
|
||||||
firstUpdated() {
|
|
||||||
this.getNodeInfo()
|
|
||||||
this.getCoreInfo()
|
|
||||||
try {
|
|
||||||
this.confirmPublicKeyOnChain(store.getState().app.selectedAddress.address)
|
|
||||||
} catch (error) {
|
|
||||||
console.error(error)
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
setInterval(() => {
|
|
||||||
this.getNodeInfo()
|
|
||||||
this.getCoreInfo()
|
|
||||||
}, 30000)
|
|
||||||
}
|
|
||||||
|
|
||||||
async getNodeInfo() {
|
async getNodeInfo() {
|
||||||
const appinfoNode = store.getState().app.nodeConfig.knownNodes[store.getState().app.nodeConfig.node]
|
const appinfoNode = store.getState().app.nodeConfig.knownNodes[store.getState().app.nodeConfig.node]
|
||||||
const appinfoUrl = appinfoNode.protocol + '://' + appinfoNode.domain + ':' + appinfoNode.port
|
const appinfoUrl = appinfoNode.protocol + '://' + appinfoNode.domain + ':' + appinfoNode.port
|
||||||
|
@ -4,6 +4,11 @@ import { store } from '../store.js'
|
|||||||
import { Epml } from '../epml.js'
|
import { Epml } from '../epml.js'
|
||||||
import { addTradeBotRoutes } from '../tradebot/addTradeBotRoutes.js'
|
import { addTradeBotRoutes } from '../tradebot/addTradeBotRoutes.js'
|
||||||
import { get, translate, translateUnsafeHTML } from 'lit-translate'
|
import { get, translate, translateUnsafeHTML } from 'lit-translate'
|
||||||
|
import localForage from "localforage";
|
||||||
|
|
||||||
|
const chatLastSeen = localForage.createInstance({
|
||||||
|
name: "chat-last-seen",
|
||||||
|
});
|
||||||
|
|
||||||
import '@polymer/paper-icon-button/paper-icon-button.js'
|
import '@polymer/paper-icon-button/paper-icon-button.js'
|
||||||
import '@polymer/paper-progress/paper-progress.js'
|
import '@polymer/paper-progress/paper-progress.js'
|
||||||
@ -27,6 +32,7 @@ import './user-info-view/user-info-view.js'
|
|||||||
import '../functional-components/side-menu.js'
|
import '../functional-components/side-menu.js'
|
||||||
import '../functional-components/side-menu-item.js'
|
import '../functional-components/side-menu-item.js'
|
||||||
import './start-minting.js'
|
import './start-minting.js'
|
||||||
|
import { setChatLastSeen } from '../redux/app/app-actions.js'
|
||||||
|
|
||||||
const parentEpml = new Epml({type: 'WINDOW', source: window.parent})
|
const parentEpml = new Epml({type: 'WINDOW', source: window.parent})
|
||||||
|
|
||||||
@ -207,7 +213,7 @@ class AppView extends connect(store)(LitElement) {
|
|||||||
|
|
||||||
#balanceheader {
|
#balanceheader {
|
||||||
flex: 0 0 24px;
|
flex: 0 0 24px;
|
||||||
padding: 12px 12px 20px 12px;
|
padding: 12px 12px 45px 12px;
|
||||||
border-bottom: 1px solid var(--border);
|
border-bottom: 1px solid var(--border);
|
||||||
background: var(--sidetopbar);
|
background: var(--sidetopbar);
|
||||||
}
|
}
|
||||||
@ -330,6 +336,15 @@ class AppView extends connect(store)(LitElement) {
|
|||||||
background-color: rgb(148, 146, 146);
|
background-color: rgb(148, 146, 146);
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.balanceButton {
|
||||||
|
background-color: #03a9f4;
|
||||||
|
color: #ffffff;
|
||||||
|
margin-left: 12px;
|
||||||
|
margin-right: 12px;
|
||||||
|
padding-top: 5px;
|
||||||
|
padding-bottom: 5px;
|
||||||
|
}
|
||||||
`
|
`
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
@ -426,6 +441,8 @@ class AppView extends connect(store)(LitElement) {
|
|||||||
</side-menu>
|
</side-menu>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<button class="balanceButton" @click="${() => this.shBalanceTicker()}">${translate("grouppage.gchange59")}</button>
|
||||||
|
<div id="theTicker" style="display: none; margin-bottom: 20px;">
|
||||||
<div id="balanceheader">
|
<div id="balanceheader">
|
||||||
<span class="balanceheadertext">
|
<span class="balanceheadertext">
|
||||||
${this.getAllBalancesLoading ? html`
|
${this.getAllBalancesLoading ? html`
|
||||||
@ -441,6 +458,7 @@ class AppView extends connect(store)(LitElement) {
|
|||||||
</div>
|
</div>
|
||||||
${this.getAllBalancesLoading ? html`<paper-progress indeterminate style="width: 100%; margin: 4px;"></paper-progress>` : ''}
|
${this.getAllBalancesLoading ? html`<paper-progress indeterminate style="width: 100%; margin: 4px;"></paper-progress>` : ''}
|
||||||
${this.balanceTicker}
|
${this.balanceTicker}
|
||||||
|
</div>
|
||||||
<app-info></app-info>
|
<app-info></app-info>
|
||||||
</div>
|
</div>
|
||||||
</app-header-layout>
|
</app-header-layout>
|
||||||
@ -1386,6 +1404,17 @@ class AppView extends connect(store)(LitElement) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const getChatLastSeen=async() => {
|
||||||
|
let items = [];
|
||||||
|
|
||||||
|
await chatLastSeen.iterate(function(value, key, iterationNumber) {
|
||||||
|
|
||||||
|
items.push({key, timestamp: value});
|
||||||
|
})
|
||||||
|
store.dispatch(setChatLastSeen(items))
|
||||||
|
return items;
|
||||||
|
}
|
||||||
|
|
||||||
await getOpenTradesBTC()
|
await getOpenTradesBTC()
|
||||||
await appDelay(1000)
|
await appDelay(1000)
|
||||||
await getOpenTradesLTC()
|
await getOpenTradesLTC()
|
||||||
@ -1397,6 +1426,16 @@ class AppView extends connect(store)(LitElement) {
|
|||||||
await getOpenTradesRVN()
|
await getOpenTradesRVN()
|
||||||
await appDelay(1000)
|
await appDelay(1000)
|
||||||
await getOpenTradesARRR()
|
await getOpenTradesARRR()
|
||||||
|
await getChatLastSeen()
|
||||||
|
}
|
||||||
|
|
||||||
|
shBalanceTicker() {
|
||||||
|
const targetDiv = this.shadowRoot.getElementById("theTicker")
|
||||||
|
if (targetDiv.style.display !== "none") {
|
||||||
|
targetDiv.style.display = "none";
|
||||||
|
} else {
|
||||||
|
targetDiv.style.display = "inline";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async getNodeType() {
|
async getNodeType() {
|
||||||
|
@ -14,12 +14,14 @@ import './login-section.js'
|
|||||||
import '../qort-theme-toggle.js'
|
import '../qort-theme-toggle.js'
|
||||||
|
|
||||||
import settings from '../../functional-components/settings-page.js'
|
import settings from '../../functional-components/settings-page.js'
|
||||||
import { addAutoLoadImageChat, removeAutoLoadImageChat } from '../../redux/app/app-actions.js'
|
import { addAutoLoadImageChat, removeAutoLoadImageChat, addChatLastSeen } from '../../redux/app/app-actions.js'
|
||||||
|
|
||||||
window.reduxStore = store
|
window.reduxStore = store
|
||||||
window.reduxAction = {
|
window.reduxAction = {
|
||||||
addAutoLoadImageChat: addAutoLoadImageChat,
|
addAutoLoadImageChat: addAutoLoadImageChat,
|
||||||
removeAutoLoadImageChat: removeAutoLoadImageChat
|
removeAutoLoadImageChat: removeAutoLoadImageChat,
|
||||||
|
addChatLastSeen: addChatLastSeen
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const animationDuration = 0.7 // Seconds
|
const animationDuration = 0.7 // Seconds
|
||||||
|
@ -95,12 +95,12 @@ class AccountView extends connect(store)(LitElement) {
|
|||||||
getAvatar() {
|
getAvatar() {
|
||||||
let numberBlocks = (this.accountInfo.addressInfo.blocksMinted + this.accountInfo.addressInfo.blocksMintedAdjustment);
|
let numberBlocks = (this.accountInfo.addressInfo.blocksMinted + this.accountInfo.addressInfo.blocksMintedAdjustment);
|
||||||
if (Number.isNaN(numberBlocks) || numberBlocks == "" || numberBlocks === null) {
|
if (Number.isNaN(numberBlocks) || numberBlocks == "" || numberBlocks === null) {
|
||||||
return html`<img src="/img/noavatar.png" style="width:150px; height:150px;">`
|
return html`<img src="/img/noavatar.png" style="width:150px; height:150px; border-radius: 50%;">`
|
||||||
} else {
|
} else {
|
||||||
const avatarNode = store.getState().app.nodeConfig.knownNodes[store.getState().app.nodeConfig.node]
|
const avatarNode = store.getState().app.nodeConfig.knownNodes[store.getState().app.nodeConfig.node]
|
||||||
const avatarUrl = avatarNode.protocol + '://' + avatarNode.domain + ':' + avatarNode.port
|
const avatarUrl = avatarNode.protocol + '://' + avatarNode.domain + ':' + avatarNode.port
|
||||||
const url = `${avatarUrl}/arbitrary/THUMBNAIL/${this.accountInfo.names[0].name}/qortal_avatar?async=true&apiKey=${this.getApiKey()}`
|
const url = `${avatarUrl}/arbitrary/THUMBNAIL/${this.accountInfo.names[0].name}/qortal_avatar?async=true&apiKey=${this.getApiKey()}`
|
||||||
return html`<img src="${url}" style="width:150px; height:150px;" onerror="this.src='/img/noavatar.png';">`
|
return html`<img src="${url}" style="width:150px; height:150px; border-radius: 50%;" onerror="this.src='/img/noavatar.png';">`
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2,7 +2,6 @@ import { store } from '../../store.js'
|
|||||||
import { doPageUrl } from '../../redux/app/app-actions.js'
|
import { doPageUrl } from '../../redux/app/app-actions.js'
|
||||||
|
|
||||||
export const newMessage = (data) => {
|
export const newMessage = (data) => {
|
||||||
|
|
||||||
const alert = playSound(data.sound)
|
const alert = playSound(data.sound)
|
||||||
|
|
||||||
// Should I show notification ?
|
// Should I show notification ?
|
||||||
@ -18,7 +17,7 @@ export const newMessage = (data) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
notify.onclick = (e) => {
|
notify.onclick = (e) => {
|
||||||
const pageUrl = `/app/q-chat/${data.req.url}`
|
const pageUrl = `/app/q-chat/?chat=${data.req.url}`
|
||||||
store.dispatch(doPageUrl(pageUrl))
|
store.dispatch(doPageUrl(pageUrl))
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@ -26,7 +25,7 @@ export const newMessage = (data) => {
|
|||||||
const notify = new Notification(data.title, data.options)
|
const notify = new Notification(data.title, data.options)
|
||||||
|
|
||||||
notify.onclick = (e) => {
|
notify.onclick = (e) => {
|
||||||
const pageUrl = `/app/q-chat/${data.req.url}`
|
const pageUrl = `/app/q-chat/?chat=${data.req.url}`
|
||||||
store.dispatch(doPageUrl(pageUrl))
|
store.dispatch(doPageUrl(pageUrl))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -9,6 +9,7 @@ const CHAT_HEADS_STREAM_NAME = 'chat_heads'
|
|||||||
const NODE_CONFIG_STREAM_NAME = 'node_config'
|
const NODE_CONFIG_STREAM_NAME = 'node_config'
|
||||||
const COPY_MENU_SWITCH = 'copy_menu_switch'
|
const COPY_MENU_SWITCH = 'copy_menu_switch'
|
||||||
const FRAME_PASTE_MENU_SWITCH = 'frame_paste_menu_switch'
|
const FRAME_PASTE_MENU_SWITCH = 'frame_paste_menu_switch'
|
||||||
|
const CHAT_LAST_SEEN = 'chat_last_seen'
|
||||||
|
|
||||||
export const loggedInStream = new EpmlStream(LOGIN_STREAM_NAME, () => store.getState().app.loggedIn)
|
export const loggedInStream = new EpmlStream(LOGIN_STREAM_NAME, () => store.getState().app.loggedIn)
|
||||||
export const configStream = new EpmlStream(CONFIG_STREAM_NAME, () => store.getState().config)
|
export const configStream = new EpmlStream(CONFIG_STREAM_NAME, () => store.getState().config)
|
||||||
@ -18,6 +19,7 @@ export const chatHeadsStateStream = new EpmlStream(CHAT_HEADS_STREAM_NAME, () =>
|
|||||||
export const nodeConfigStream = new EpmlStream(NODE_CONFIG_STREAM_NAME, () => store.getState().app.nodeConfig)
|
export const nodeConfigStream = new EpmlStream(NODE_CONFIG_STREAM_NAME, () => store.getState().app.nodeConfig)
|
||||||
export const copyMenuSwitchStream = new EpmlStream(COPY_MENU_SWITCH, () => store.getState().app.copyMenuSwitch)
|
export const copyMenuSwitchStream = new EpmlStream(COPY_MENU_SWITCH, () => store.getState().app.copyMenuSwitch)
|
||||||
export const framePasteMenuSwitchStream = new EpmlStream(FRAME_PASTE_MENU_SWITCH, () => store.getState().app.framePasteMenuSwitch)
|
export const framePasteMenuSwitchStream = new EpmlStream(FRAME_PASTE_MENU_SWITCH, () => store.getState().app.framePasteMenuSwitch)
|
||||||
|
export const chatLastSeenStream = new EpmlStream(CHAT_LAST_SEEN, () => store.getState().app.chatLastSeen)
|
||||||
|
|
||||||
|
|
||||||
let oldState = {
|
let oldState = {
|
||||||
@ -46,6 +48,9 @@ store.subscribe(() => {
|
|||||||
if (oldState.app.framePasteMenuSwitch !== state.app.framePasteMenuSwitch) {
|
if (oldState.app.framePasteMenuSwitch !== state.app.framePasteMenuSwitch) {
|
||||||
framePasteMenuSwitchStream.emit(state.app.framePasteMenuSwitch)
|
framePasteMenuSwitchStream.emit(state.app.framePasteMenuSwitch)
|
||||||
}
|
}
|
||||||
|
if (oldState.app.chatLastSeen !== state.app.chatLastSeen) {
|
||||||
|
chatLastSeenStream.emit(state.app.chatLastSeen)
|
||||||
|
}
|
||||||
|
|
||||||
if (oldState.app.selectedAddress !== state.app.selectedAddress) {
|
if (oldState.app.selectedAddress !== state.app.selectedAddress) {
|
||||||
selectedAddressStream.emit({
|
selectedAddressStream.emit({
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
// Core App Actions here...
|
// Core App Actions here...
|
||||||
import { UPDATE_BLOCK_INFO, UPDATE_NODE_STATUS, UPDATE_NODE_INFO, CHAT_HEADS, ACCOUNT_INFO, COPY_MENU_SWITCH, PASTE_MENU_SWITCH, FRAME_PASTE_MENU_SWITCH, ADD_AUTO_LOAD_IMAGES_CHAT, REMOVE_AUTO_LOAD_IMAGES_CHAT } from '../app-action-types.js'
|
import { UPDATE_BLOCK_INFO, UPDATE_NODE_STATUS, UPDATE_NODE_INFO, CHAT_HEADS, ACCOUNT_INFO, COPY_MENU_SWITCH, PASTE_MENU_SWITCH, FRAME_PASTE_MENU_SWITCH, ADD_AUTO_LOAD_IMAGES_CHAT, REMOVE_AUTO_LOAD_IMAGES_CHAT, SET_CHAT_LAST_SEEN, ADD_CHAT_LAST_SEEN } from '../app-action-types.js'
|
||||||
|
|
||||||
export const doUpdateBlockInfo = (blockObj) => {
|
export const doUpdateBlockInfo = (blockObj) => {
|
||||||
return (dispatch, getState) => {
|
return (dispatch, getState) => {
|
||||||
@ -120,3 +120,16 @@ export const removeAutoLoadImageChat = (payload) => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export const setChatLastSeen = (payload) => {
|
||||||
|
return {
|
||||||
|
type: SET_CHAT_LAST_SEEN,
|
||||||
|
payload
|
||||||
|
}
|
||||||
|
}
|
||||||
|
export const addChatLastSeen = (payload) => {
|
||||||
|
return {
|
||||||
|
type: ADD_CHAT_LAST_SEEN,
|
||||||
|
payload
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@ -22,3 +22,5 @@ export const PASTE_MENU_SWITCH = 'PASTE_MENU_SWITCH'
|
|||||||
export const FRAME_PASTE_MENU_SWITCH = 'FRAME_PASTE_MENU_SWITCH'
|
export const FRAME_PASTE_MENU_SWITCH = 'FRAME_PASTE_MENU_SWITCH'
|
||||||
export const ADD_AUTO_LOAD_IMAGES_CHAT = 'ADD_AUTO_LOAD_IMAGES_CHAT'
|
export const ADD_AUTO_LOAD_IMAGES_CHAT = 'ADD_AUTO_LOAD_IMAGES_CHAT'
|
||||||
export const REMOVE_AUTO_LOAD_IMAGES_CHAT = 'REMOVE_AUTO_LOAD_IMAGES_CHAT'
|
export const REMOVE_AUTO_LOAD_IMAGES_CHAT = 'REMOVE_AUTO_LOAD_IMAGES_CHAT'
|
||||||
|
export const SET_CHAT_LAST_SEEN = 'SET_CHAT_LAST_SEEN'
|
||||||
|
export const ADD_CHAT_LAST_SEEN = 'ADD_CHAT_LAST_SEEN'
|
||||||
|
@ -1,9 +1,14 @@
|
|||||||
// Loading state, login state, isNavDrawOpen state etc. None of this needs to be saved to localstorage.
|
// Loading state, login state, isNavDrawOpen state etc. None of this needs to be saved to localstorage.
|
||||||
import { loadStateFromLocalStorage, saveStateToLocalStorage } from '../../localStorageHelpers.js'
|
import { loadStateFromLocalStorage, saveStateToLocalStorage } from '../../localStorageHelpers.js'
|
||||||
import { LOG_IN, LOG_OUT, NETWORK_CONNECTION_STATUS, INIT_WORKERS, ADD_PLUGIN_URL, ADD_PLUGIN, ADD_NEW_PLUGIN_URL, NAVIGATE, SELECT_ADDRESS, ACCOUNT_INFO, CHAT_HEADS, UPDATE_BLOCK_INFO, UPDATE_NODE_STATUS, UPDATE_NODE_INFO, LOAD_NODE_CONFIG, SET_NODE, ADD_NODE, PAGE_URL, COPY_MENU_SWITCH, PASTE_MENU_SWITCH, FRAME_PASTE_MENU_SWITCH, ADD_AUTO_LOAD_IMAGES_CHAT, REMOVE_AUTO_LOAD_IMAGES_CHAT } from './app-action-types.js'
|
import { LOG_IN, LOG_OUT, NETWORK_CONNECTION_STATUS, INIT_WORKERS, ADD_PLUGIN_URL, ADD_PLUGIN, ADD_NEW_PLUGIN_URL, NAVIGATE, SELECT_ADDRESS, ACCOUNT_INFO, CHAT_HEADS, UPDATE_BLOCK_INFO, UPDATE_NODE_STATUS, UPDATE_NODE_INFO, LOAD_NODE_CONFIG, SET_NODE, ADD_NODE, PAGE_URL, COPY_MENU_SWITCH, PASTE_MENU_SWITCH, FRAME_PASTE_MENU_SWITCH, ADD_AUTO_LOAD_IMAGES_CHAT, REMOVE_AUTO_LOAD_IMAGES_CHAT, SET_CHAT_LAST_SEEN, ADD_CHAT_LAST_SEEN } from './app-action-types.js'
|
||||||
import { initWorkersReducer } from './reducers/init-workers.js'
|
import { initWorkersReducer } from './reducers/init-workers.js'
|
||||||
import { loginReducer } from './reducers/login-reducer.js'
|
import { loginReducer } from './reducers/login-reducer.js'
|
||||||
import { setNode, addNode } from './reducers/manage-node.js'
|
import { setNode, addNode } from './reducers/manage-node.js'
|
||||||
|
import localForage from "localforage";
|
||||||
|
const chatLastSeen = localForage.createInstance({
|
||||||
|
name: "chat-last-seen",
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
const INITIAL_STATE = {
|
const INITIAL_STATE = {
|
||||||
loggedIn: false,
|
loggedIn: false,
|
||||||
@ -44,7 +49,8 @@ const INITIAL_STATE = {
|
|||||||
isOpen: false,
|
isOpen: false,
|
||||||
elementId: ''
|
elementId: ''
|
||||||
},
|
},
|
||||||
autoLoadImageChats: loadStateFromLocalStorage('autoLoadImageChats') || []
|
autoLoadImageChats: loadStateFromLocalStorage('autoLoadImageChats') || [],
|
||||||
|
chatLastSeen: []
|
||||||
}
|
}
|
||||||
|
|
||||||
export default (state = INITIAL_STATE, action) => {
|
export default (state = INITIAL_STATE, action) => {
|
||||||
@ -169,6 +175,38 @@ export default (state = INITIAL_STATE, action) => {
|
|||||||
autoLoadImageChats: updatedState
|
autoLoadImageChats: updatedState
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
case SET_CHAT_LAST_SEEN: {
|
||||||
|
return {
|
||||||
|
...state,
|
||||||
|
chatLastSeen: action.payload
|
||||||
|
}
|
||||||
|
}
|
||||||
|
case ADD_CHAT_LAST_SEEN: {
|
||||||
|
const chatId = action.payload.key
|
||||||
|
const timestamp = action.payload.timestamp
|
||||||
|
if(!chatId || !timestamp) return state
|
||||||
|
let newChatLastSeen = [...state.chatLastSeen]
|
||||||
|
const findChatIndex = state.chatLastSeen.findIndex((chat)=> chat.key === chatId)
|
||||||
|
if(findChatIndex !== -1){
|
||||||
|
|
||||||
|
newChatLastSeen[findChatIndex] = {
|
||||||
|
key: chatId,
|
||||||
|
timestamp,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(findChatIndex === -1){
|
||||||
|
|
||||||
|
newChatLastSeen = [...newChatLastSeen, {
|
||||||
|
key: chatId,
|
||||||
|
timestamp,
|
||||||
|
}]
|
||||||
|
}
|
||||||
|
chatLastSeen.setItem(chatId, timestamp)
|
||||||
|
return {
|
||||||
|
...state,
|
||||||
|
chatLastSeen: newChatLastSeen
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return state
|
return state
|
||||||
|
@ -0,0 +1,73 @@
|
|||||||
|
'use strict'
|
||||||
|
import TransactionBase from '../TransactionBase.js'
|
||||||
|
import { QORT_DECIMALS } from '../../constants.js'
|
||||||
|
|
||||||
|
export default class UpdateNameTransaction extends TransactionBase {
|
||||||
|
constructor() {
|
||||||
|
super()
|
||||||
|
this.type = 4
|
||||||
|
}
|
||||||
|
|
||||||
|
render(html) {
|
||||||
|
return html`
|
||||||
|
${this._dialogUpdateName1}
|
||||||
|
<div style="background: #eee; padding: 8px; margin: 8px 0; border-radius: 5px;">
|
||||||
|
<span style="color: #000;">${this.nameText}</span>
|
||||||
|
</div>
|
||||||
|
${this._dialogUpdateName2}
|
||||||
|
<div style="background: #eee; padding: 8px; margin: 8px 0; border-radius: 5px;">
|
||||||
|
<span style="color: #000;">${this.newNameText}</span>
|
||||||
|
</div>
|
||||||
|
${this._dialogUpdateName3}
|
||||||
|
`
|
||||||
|
}
|
||||||
|
|
||||||
|
set dialogUpdateName1(dialogUpdateName1) {
|
||||||
|
this._dialogUpdateName1 = dialogUpdateName1
|
||||||
|
}
|
||||||
|
|
||||||
|
set dialogUpdateName2(dialogUpdateName2) {
|
||||||
|
this._dialogUpdateName2 = dialogUpdateName2
|
||||||
|
}
|
||||||
|
|
||||||
|
set dialogUpdateName3(dialogUpdateName3) {
|
||||||
|
this._dialogUpdateName3 = dialogUpdateName3
|
||||||
|
}
|
||||||
|
|
||||||
|
set fee(fee) {
|
||||||
|
this._fee = fee * QORT_DECIMALS
|
||||||
|
this._feeBytes = this.constructor.utils.int64ToBytes(this._fee)
|
||||||
|
}
|
||||||
|
|
||||||
|
set name(name) {
|
||||||
|
this.nameText = name
|
||||||
|
this._nameBytes = this.constructor.utils.stringtoUTF8Array(name)
|
||||||
|
this._nameLength = this.constructor.utils.int32ToBytes(this._nameBytes.length)
|
||||||
|
}
|
||||||
|
|
||||||
|
set newName(newName) {
|
||||||
|
this.newNameText = newName
|
||||||
|
this._newNameBytes = this.constructor.utils.stringtoUTF8Array(newName)
|
||||||
|
this._newNameLength = this.constructor.utils.int32ToBytes(this._newNameBytes.length)
|
||||||
|
}
|
||||||
|
|
||||||
|
set newData(newData) {
|
||||||
|
this.newDataText = newData.length === 0 ? "Registered Name on the Qortal Chain" : newData
|
||||||
|
this._newDataBytes = this.constructor.utils.stringtoUTF8Array(this.newDataText)
|
||||||
|
this._newDataLength = this.constructor.utils.int32ToBytes(this._newDataBytes.length)
|
||||||
|
}
|
||||||
|
|
||||||
|
get params() {
|
||||||
|
const params = super.params
|
||||||
|
params.push(
|
||||||
|
this._nameLength,
|
||||||
|
this._nameBytes,
|
||||||
|
this._newNameLength,
|
||||||
|
this._newNameBytes,
|
||||||
|
this._newDataLength,
|
||||||
|
this._newDataBytes,
|
||||||
|
this._feeBytes
|
||||||
|
)
|
||||||
|
return params
|
||||||
|
}
|
||||||
|
}
|
@ -1,5 +1,6 @@
|
|||||||
import PaymentTransaction from './PaymentTransaction.js'
|
import PaymentTransaction from './PaymentTransaction.js'
|
||||||
import RegisterNameTransaction from './names/RegisterNameTransaction.js'
|
import RegisterNameTransaction from './names/RegisterNameTransaction.js'
|
||||||
|
import UpdateNameTransaction from './names/UpdateNameTransaction.js'
|
||||||
import SellNameTransacion from './names/SellNameTransacion.js'
|
import SellNameTransacion from './names/SellNameTransacion.js'
|
||||||
import CancelSellNameTransacion from './names/CancelSellNameTransacion.js'
|
import CancelSellNameTransacion from './names/CancelSellNameTransacion.js'
|
||||||
import BuyNameTransacion from './names/BuyNameTransacion.js'
|
import BuyNameTransacion from './names/BuyNameTransacion.js'
|
||||||
@ -25,6 +26,7 @@ import TransferPrivsTransaction from './TransferPrivsTransaction.js'
|
|||||||
export const transactionTypes = {
|
export const transactionTypes = {
|
||||||
2: PaymentTransaction,
|
2: PaymentTransaction,
|
||||||
3: RegisterNameTransaction,
|
3: RegisterNameTransaction,
|
||||||
|
4: UpdateNameTransaction,
|
||||||
5: SellNameTransacion,
|
5: SellNameTransacion,
|
||||||
6: CancelSellNameTransacion,
|
6: CancelSellNameTransacion,
|
||||||
7: BuyNameTransacion,
|
7: BuyNameTransacion,
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "qortal-ui-crypto",
|
"name": "qortal-ui-crypto",
|
||||||
"version": "3.0.0",
|
"version": "3.1.0",
|
||||||
"description": "Qortal Project - decentralize the world - Data storage, communications, web hosting, decentralized trading, complete infrastructure for the future blockchain-based Internet",
|
"description": "Qortal Project - decentralize the world - Data storage, communications, web hosting, decentralized trading, complete infrastructure for the future blockchain-based Internet",
|
||||||
"keywords": [
|
"keywords": [
|
||||||
"QORT",
|
"QORT",
|
||||||
@ -23,6 +23,6 @@
|
|||||||
"lodash": "4.17.21"
|
"lodash": "4.17.21"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=16.17.1"
|
"node": ">=18.12.1"
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "qortal-ui-plugins",
|
"name": "qortal-ui-plugins",
|
||||||
"version": "3.0.0",
|
"version": "3.1.0",
|
||||||
"description": "Qortal Project - decentralize the world - Data storage, communications, web hosting, decentralized trading, complete infrastructure for the future blockchain-based Internet",
|
"description": "Qortal Project - decentralize the world - Data storage, communications, web hosting, decentralized trading, complete infrastructure for the future blockchain-based Internet",
|
||||||
"keywords": [
|
"keywords": [
|
||||||
"QORT",
|
"QORT",
|
||||||
@ -20,28 +20,28 @@
|
|||||||
"@lit-labs/motion": "1.0.3",
|
"@lit-labs/motion": "1.0.3",
|
||||||
"@material/mwc-list": "0.27.0",
|
"@material/mwc-list": "0.27.0",
|
||||||
"@material/mwc-select": "0.27.0",
|
"@material/mwc-select": "0.27.0",
|
||||||
"@tiptap/pm": "2.0.0-beta.212",
|
"@tiptap/pm": "2.0.0-beta.217",
|
||||||
"@tiptap/core": "2.0.0-beta.212",
|
"@tiptap/core": "2.0.0-beta.217",
|
||||||
"@tiptap/extension-highlight": "2.0.0-beta.212",
|
"@tiptap/extension-highlight": "2.0.0-beta.217",
|
||||||
"@tiptap/extension-image": "2.0.0-beta.212",
|
"@tiptap/extension-image": "2.0.0-beta.217",
|
||||||
"@tiptap/extension-placeholder": "2.0.0-beta.212",
|
"@tiptap/extension-placeholder": "2.0.0-beta.217",
|
||||||
"@tiptap/extension-underline": "2.0.0-beta.212",
|
"@tiptap/extension-underline": "2.0.0-beta.217",
|
||||||
"@tiptap/html": "2.0.0-beta.212",
|
"@tiptap/html": "2.0.0-beta.217",
|
||||||
"@tiptap/starter-kit": "2.0.0-beta.212",
|
"@tiptap/starter-kit": "2.0.0-beta.217",
|
||||||
"asmcrypto.js": "2.3.2",
|
"asmcrypto.js": "2.3.2",
|
||||||
"compressorjs": "1.1.1",
|
"compressorjs": "1.1.1",
|
||||||
"emoji-picker-js": "https://github.com/Qortal/emoji-picker-js",
|
"emoji-picker-js": "https://github.com/Qortal/emoji-picker-js",
|
||||||
"localforage": "1.10.0",
|
"localforage": "1.10.0",
|
||||||
"prosemirror-commands": "1.5.0",
|
"prosemirror-commands": "1.5.0",
|
||||||
"prosemirror-dropcursor": "1.6.1",
|
"prosemirror-dropcursor": "1.7.0",
|
||||||
"prosemirror-gapcursor": "1.3.1",
|
"prosemirror-gapcursor": "1.3.1",
|
||||||
"prosemirror-history": "1.3.0",
|
"prosemirror-history": "1.3.0",
|
||||||
"prosemirror-keymap": "1.2.0",
|
"prosemirror-keymap": "1.2.1",
|
||||||
"prosemirror-model": "1.18.3",
|
"prosemirror-model": "1.19.0",
|
||||||
"prosemirror-schema-list": "1.2.2",
|
"prosemirror-schema-list": "1.2.2",
|
||||||
"prosemirror-state": "1.4.2",
|
"prosemirror-state": "1.4.2",
|
||||||
"prosemirror-transform": "1.7.0",
|
"prosemirror-transform": "1.7.1",
|
||||||
"prosemirror-view": "1.29.1",
|
"prosemirror-view": "1.30.1",
|
||||||
"short-unique-id": "4.4.4"
|
"short-unique-id": "4.4.4"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
@ -76,19 +76,21 @@
|
|||||||
"@vaadin/grid": "23.3.7",
|
"@vaadin/grid": "23.3.7",
|
||||||
"@vaadin/icons": "23.3.7",
|
"@vaadin/icons": "23.3.7",
|
||||||
"@vaadin/tooltip": "23.3.7",
|
"@vaadin/tooltip": "23.3.7",
|
||||||
|
"axios": "1.3.3",
|
||||||
"epml": "0.3.3",
|
"epml": "0.3.3",
|
||||||
"file-saver": "2.0.5",
|
"file-saver": "2.0.5",
|
||||||
"highcharts": "10.3.3",
|
"highcharts": "10.3.3",
|
||||||
"html-escaper": "3.0.3",
|
"html-escaper": "3.0.3",
|
||||||
"lit": "2.6.1",
|
"lit": "2.6.1",
|
||||||
"lit-translate": "2.0.1",
|
"lit-translate": "2.0.1",
|
||||||
"rollup": "3.14.0",
|
"passive-events-support": "1.0.33",
|
||||||
|
"rollup": "3.15.0",
|
||||||
"rollup-plugin-node-globals": "1.4.0",
|
"rollup-plugin-node-globals": "1.4.0",
|
||||||
"rollup-plugin-progress": "1.1.2",
|
"rollup-plugin-progress": "1.1.2",
|
||||||
"rollup-plugin-web-worker-loader": "1.6.1",
|
"rollup-plugin-web-worker-loader": "1.6.1"
|
||||||
"passive-events-support": "1.0.33"
|
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=16.17.1"
|
"node": ">=18.12.1"
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,11 +1,15 @@
|
|||||||
import { LitElement, html, css } from 'lit'
|
import { LitElement, html, css } from 'lit'
|
||||||
import { render } from 'lit/html.js'
|
import { render } from 'lit/html.js'
|
||||||
import { Epml } from '../../../epml.js'
|
import { Epml } from '../../../epml.js'
|
||||||
|
import localForage from "localforage";
|
||||||
|
import { translate} from 'lit-translate';
|
||||||
|
|
||||||
import '@material/mwc-icon'
|
import '@material/mwc-icon'
|
||||||
|
|
||||||
const parentEpml = new Epml({ type: 'WINDOW', source: window.parent })
|
const parentEpml = new Epml({ type: 'WINDOW', source: window.parent })
|
||||||
|
const chatLastSeen = localForage.createInstance({
|
||||||
|
name: "chat-last-seen",
|
||||||
|
});
|
||||||
class ChatHead extends LitElement {
|
class ChatHead extends LitElement {
|
||||||
static get properties() {
|
static get properties() {
|
||||||
return {
|
return {
|
||||||
@ -15,7 +19,8 @@ class ChatHead extends LitElement {
|
|||||||
iconName: { type: String },
|
iconName: { type: String },
|
||||||
activeChatHeadUrl: { type: String },
|
activeChatHeadUrl: { type: String },
|
||||||
isImageLoaded: { type: Boolean },
|
isImageLoaded: { type: Boolean },
|
||||||
setActiveChatHeadUrl: {attribute: false}
|
setActiveChatHeadUrl: {attribute: false},
|
||||||
|
lastReadMessageTimestamp: {type: Number}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -24,9 +29,13 @@ class ChatHead extends LitElement {
|
|||||||
li {
|
li {
|
||||||
|
|
||||||
width: 100%;
|
width: 100%;
|
||||||
padding: 7px 5px 7px 5px;
|
padding: 10px 5px 10px 5px;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
|
box-sizing: border-box;
|
||||||
|
display: flex;
|
||||||
|
align-items: flex-start;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
li:hover {
|
li:hover {
|
||||||
@ -44,12 +53,21 @@ class ChatHead extends LitElement {
|
|||||||
color: var(--chat-group);
|
color: var(--chat-group);
|
||||||
}
|
}
|
||||||
|
|
||||||
.about {
|
|
||||||
margin-top: 8px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.about {
|
.about {
|
||||||
padding-left: 8px;
|
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
|
width: 100%;
|
||||||
|
margin: 0px;
|
||||||
|
}
|
||||||
|
.inner-container {
|
||||||
|
display: flex;
|
||||||
|
width: calc(100% - 45px);
|
||||||
|
flex-direction: column;
|
||||||
|
justify-content: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
.status {
|
.status {
|
||||||
@ -64,6 +82,13 @@ class ChatHead extends LitElement {
|
|||||||
clear: both;
|
clear: both;
|
||||||
height: 0;
|
height: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.name {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
`
|
`
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -82,6 +107,8 @@ class ChatHead extends LitElement {
|
|||||||
this.activeChatHeadUrl = ''
|
this.activeChatHeadUrl = ''
|
||||||
this.isImageLoaded = false
|
this.isImageLoaded = false
|
||||||
this.imageFetches = 0
|
this.imageFetches = 0
|
||||||
|
this.lastReadMessageTimestamp = 0
|
||||||
|
this.loggedInAddress = window.parent.reduxStore.getState().app.selectedAddress.address
|
||||||
}
|
}
|
||||||
|
|
||||||
createImage(imageUrl) {
|
createImage(imageUrl) {
|
||||||
@ -99,7 +126,7 @@ class ChatHead extends LitElement {
|
|||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
this.imageFetches = this.imageFetches + 1;
|
this.imageFetches = this.imageFetches + 1;
|
||||||
imageHTMLRes.src = imageUrl;
|
imageHTMLRes.src = imageUrl;
|
||||||
}, 500);
|
}, 750);
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
|
|
||||||
@ -109,32 +136,61 @@ class ChatHead extends LitElement {
|
|||||||
return imageHTMLRes;
|
return imageHTMLRes;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
let avatarImg = '';
|
let avatarImg = '';
|
||||||
let backupAvatarImg = ''
|
let backupAvatarImg = ''
|
||||||
|
let isUnread = false
|
||||||
|
|
||||||
if(this.chatInfo.name){
|
if(this.chatInfo.name){
|
||||||
const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node];
|
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 nodeUrl = myNode.protocol + '://' + myNode.domain + ':' + myNode.port;
|
||||||
const avatarUrl = `${nodeUrl}/arbitrary/THUMBNAIL/${this.chatInfo.name}/qortal_avatar?async=true&apiKey=${myNode.apiKey}`;
|
const avatarUrl = `${nodeUrl}/arbitrary/THUMBNAIL/${this.chatInfo.name}/qortal_avatar?async=true&apiKey=${myNode.apiKey}`;
|
||||||
avatarImg= this.createImage(avatarUrl)
|
avatarImg= this.createImage(avatarUrl)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(this.lastReadMessageTimestamp && this.chatInfo.timestamp){
|
||||||
|
if(this.lastReadMessageTimestamp < this.chatInfo.timestamp){
|
||||||
|
isUnread = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(this.activeChatHeadUrl === this.chatInfo.url){
|
||||||
|
isUnread = false
|
||||||
|
}
|
||||||
|
|
||||||
|
if(this.chatInfo.sender === this.loggedInAddress){
|
||||||
|
isUnread = false
|
||||||
|
}
|
||||||
return html`
|
return html`
|
||||||
<li @click=${() => this.getUrl(this.chatInfo.url)} class="clearfix ${this.activeChatHeadUrl === this.chatInfo.url ? 'active' : ''}">
|
<li @click=${() => this.getUrl(this.chatInfo.url)} class="clearfix ${this.activeChatHeadUrl === this.chatInfo.url ? 'active' : ''}">
|
||||||
${this.isImageLoaded ? html`${avatarImg}` : html`` }
|
${this.isImageLoaded ? html`${avatarImg}` : html`` }
|
||||||
${!this.isImageLoaded && !this.chatInfo.name && !this.chatInfo.groupName ? html`<mwc-icon class="img-icon">account_circle</mwc-icon>` : html`` }
|
${!this.isImageLoaded && !this.chatInfo.name && !this.chatInfo.groupName ? html`<mwc-icon class="img-icon">account_circle</mwc-icon>` : html`` }
|
||||||
${!this.isImageLoaded && this.chatInfo.name ? html`<div style="width:40px; height:40px; float: left; border-radius:50%; background: ${this.activeChatHeadUrl === this.chatInfo.url ? 'var(--chatHeadBgActive)' : 'var(--chatHeadBg)' }; color: ${this.activeChatHeadUrl === this.chatInfo.url ? 'var(--chatHeadTextActive)' : 'var(--chatHeadText)' }; font-weight:bold; display: flex; justify-content: center; align-items: center; text-transform: capitalize">${this.chatInfo.name.charAt(0)}</div>`: ''}
|
${!this.isImageLoaded && this.chatInfo.name ? html`<div style="width:40px; height:40px; flex-shrink: 0; border-radius:50%; background: ${this.activeChatHeadUrl === this.chatInfo.url ? 'var(--chatHeadBgActive)' : 'var(--chatHeadBg)' }; color: ${this.activeChatHeadUrl === this.chatInfo.url ? 'var(--chatHeadTextActive)' : 'var(--chatHeadText)' }; font-weight:bold; display: flex; justify-content: center; align-items: center; text-transform: capitalize">${this.chatInfo.name.charAt(0)}</div>`: ''}
|
||||||
${!this.isImageLoaded && this.chatInfo.groupName ? html`<div style="width:40px; height:40px; float: left; border-radius:50%; background: ${this.activeChatHeadUrl === this.chatInfo.url ? 'var(--chatHeadBgActive)' : 'var(--chatHeadBg)' }; color: ${this.activeChatHeadUrl === this.chatInfo.url ? 'var(--chatHeadTextActive)' : 'var(--chatHeadText)' }; font-weight:bold; display: flex; justify-content: center; align-items: center; text-transform: capitalize">${this.chatInfo.groupName.charAt(0)}</div>`: ''}
|
${!this.isImageLoaded && this.chatInfo.groupName ? html`<div style="width:40px; height:40px; flex-shrink: 0; border-radius:50%; background: ${this.activeChatHeadUrl === this.chatInfo.url ? 'var(--chatHeadBgActive)' : 'var(--chatHeadBg)' }; color: ${this.activeChatHeadUrl === this.chatInfo.url ? 'var(--chatHeadTextActive)' : 'var(--chatHeadText)' }; font-weight:bold; display: flex; justify-content: center; align-items: center; text-transform: capitalize">${this.chatInfo.groupName.charAt(0)}</div>`: ''}
|
||||||
|
<div class="inner-container">
|
||||||
<div class="about">
|
<div class="about">
|
||||||
<div class="name"><span style="float:left; padding-left: 8px; color: var(--chat-group);">${this.chatInfo.groupName ? this.chatInfo.groupName : this.chatInfo.name !== undefined ? this.chatInfo.name : this.chatInfo.address.substr(0, 15)} </span> <mwc-icon style="float:right; padding: 0 1rem; color: var(--chat-group);">${this.chatInfo.groupId !== undefined ? 'lock_open' : 'lock'}</mwc-icon> </div>
|
<div class="name"><span style="font-weight: bold;float:left; padding-left: 8px; color: var(--chat-group);font-size:14px;word-break:${this.chatInfo.groupName ? this.chatInfo.groupName : this.chatInfo.name !== undefined ? 'break-word': 'break-all'}">${this.chatInfo.groupName ? this.chatInfo.groupName : this.chatInfo.name !== undefined ? this.chatInfo.name : this.chatInfo.address.substr(0, 15)} </span> <mwc-icon style="font-size:18px; color: var(--chat-group);">${this.chatInfo.groupId !== undefined ? 'lock_open' : 'lock'}</mwc-icon> </div>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="about" style="margin-top:7px">
|
||||||
|
<div class="name"><span style="float:left; padding-left: 8px; color: var(--chat-group);font-size:14px"></span>
|
||||||
|
<div style="color: var(--black); display: flex;font-size: 12px; align-items:center">
|
||||||
|
<div style="width: 8px; height: 8px;border-radius: 50%;background: ${isUnread ? 'var(--error)' : 'none'} ; margin-right:5px;"></div>
|
||||||
|
<message-time style="display: ${(this.chatInfo.timestamp && this.chatInfo.timestamp > 100000) ? 'block' : 'none'}" timestamp=${this.chatInfo.timestamp}></message-time>
|
||||||
|
<span style="font-size:12px;color:var(--black);display: ${(!this.chatInfo.timestamp || this.chatInfo.timestamp > 100000) ? 'none' : 'block'}">${translate('chatpage.cchange90')}</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
</li>
|
</li>
|
||||||
`
|
`
|
||||||
}
|
}
|
||||||
|
|
||||||
firstUpdated() {
|
async firstUpdated() {
|
||||||
let configLoaded = false
|
let configLoaded = false
|
||||||
|
this.lastReadMessageTimestamp = await chatLastSeen.getItem(this.chatInfo.url) || 0
|
||||||
parentEpml.ready().then(() => {
|
parentEpml.ready().then(() => {
|
||||||
parentEpml.subscribe('selected_address', async selectedAddress => {
|
parentEpml.subscribe('selected_address', async selectedAddress => {
|
||||||
this.selectedAddress = {}
|
this.selectedAddress = {}
|
||||||
@ -142,6 +198,15 @@ class ChatHead extends LitElement {
|
|||||||
if (!selectedAddress || Object.entries(selectedAddress).length === 0) return
|
if (!selectedAddress || Object.entries(selectedAddress).length === 0) return
|
||||||
this.selectedAddress = selectedAddress
|
this.selectedAddress = selectedAddress
|
||||||
})
|
})
|
||||||
|
parentEpml.subscribe('chat_last_seen', async chatList => {
|
||||||
|
const parsedChatList = JSON.parse(chatList)
|
||||||
|
const findChatSeen = parsedChatList.find(chat=> chat.key === this.chatInfo.url)
|
||||||
|
|
||||||
|
if(findChatSeen && this.lastReadMessageTimestamp !== findChatSeen.timestamp){
|
||||||
|
this.lastReadMessageTimestamp = findChatSeen.timestamp
|
||||||
|
this.requestUpdate()
|
||||||
|
}
|
||||||
|
})
|
||||||
parentEpml.subscribe('config', c => {
|
parentEpml.subscribe('config', c => {
|
||||||
if (!configLoaded) {
|
if (!configLoaded) {
|
||||||
configLoaded = true
|
configLoaded = true
|
||||||
@ -156,7 +221,18 @@ class ChatHead extends LitElement {
|
|||||||
if(changedProperties.has('activeChatHeadUrl')){
|
if(changedProperties.has('activeChatHeadUrl')){
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
if(changedProperties.has('lastReadMessageTimestamp')){
|
||||||
|
return true
|
||||||
|
}
|
||||||
if(changedProperties.has('chatInfo')){
|
if(changedProperties.has('chatInfo')){
|
||||||
|
|
||||||
|
const prevChatInfo = changedProperties.get('chatInfo')
|
||||||
|
|
||||||
|
if(prevChatInfo.address !== this.chatInfo.address){
|
||||||
|
|
||||||
|
this.isImageLoaded = false
|
||||||
|
this.requestUpdate()
|
||||||
|
}
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -10,7 +10,7 @@ import Highlight from '@tiptap/extension-highlight'
|
|||||||
import {unsafeHTML} from 'lit/directives/unsafe-html.js';
|
import {unsafeHTML} from 'lit/directives/unsafe-html.js';
|
||||||
import { Editor, Extension } from '@tiptap/core'
|
import { Editor, Extension } from '@tiptap/core'
|
||||||
|
|
||||||
// import localForage from "localforage";
|
import localForage from "localforage";
|
||||||
registerTranslateConfig({
|
registerTranslateConfig({
|
||||||
loader: lang => fetch(`/language/${lang}.json`).then(res => res.json())
|
loader: lang => fetch(`/language/${lang}.json`).then(res => res.json())
|
||||||
});
|
});
|
||||||
@ -39,12 +39,12 @@ import { replaceMessagesEdited } from '../../utils/replace-messages-edited.js';
|
|||||||
import { publishData } from '../../utils/publish-image.js';
|
import { publishData } from '../../utils/publish-image.js';
|
||||||
import { EmojiPicker } from 'emoji-picker-js';
|
import { EmojiPicker } from 'emoji-picker-js';
|
||||||
import WebWorker from 'web-worker:./computePowWorker.js';
|
import WebWorker from 'web-worker:./computePowWorker.js';
|
||||||
import WebWorkerImage from 'web-worker:./computePowWorkerImage.js';
|
import WebWorkerFile from 'web-worker:./computePowWorkerFile.js';
|
||||||
import '@polymer/paper-dialog/paper-dialog.js'
|
import '@polymer/paper-dialog/paper-dialog.js'
|
||||||
|
|
||||||
// const messagesCache = localForage.createInstance({
|
const chatLastSeen = localForage.createInstance({
|
||||||
// name: "messages-cache",
|
name: "chat-last-seen",
|
||||||
// });
|
});
|
||||||
|
|
||||||
const parentEpml = new Epml({ type: 'WINDOW', source: window.parent })
|
const parentEpml = new Epml({ type: 'WINDOW', source: window.parent })
|
||||||
|
|
||||||
@ -77,7 +77,11 @@ class ChatPage extends LitElement {
|
|||||||
editedMessageObj: { type: Object },
|
editedMessageObj: { type: Object },
|
||||||
iframeHeight: { type: Number },
|
iframeHeight: { type: Number },
|
||||||
imageFile: { type: Object },
|
imageFile: { type: Object },
|
||||||
|
attachment: { type: Object },
|
||||||
isUploadingImage: { type: Boolean },
|
isUploadingImage: { type: Boolean },
|
||||||
|
isDeletingImage: { type: Boolean },
|
||||||
|
isUploadingAttachment: { type: Boolean },
|
||||||
|
isDeletingAttachment: { type: Boolean },
|
||||||
userLanguage: { type: String },
|
userLanguage: { type: String },
|
||||||
lastMessageRefVisible: { type: Boolean },
|
lastMessageRefVisible: { type: Boolean },
|
||||||
isLoadingOldMessages: { type: Boolean },
|
isLoadingOldMessages: { type: Boolean },
|
||||||
@ -94,7 +98,7 @@ class ChatPage extends LitElement {
|
|||||||
userFound: { type: Array },
|
userFound: { type: Array },
|
||||||
userFoundModalOpen: { type: Boolean },
|
userFoundModalOpen: { type: Boolean },
|
||||||
webWorker: { type: Object },
|
webWorker: { type: Object },
|
||||||
webWorkerImage: { type: Object },
|
webWorkerFile: { type: Object },
|
||||||
myTrimmedMeassage: { type: String },
|
myTrimmedMeassage: { type: String },
|
||||||
editor: {type: Object},
|
editor: {type: Object},
|
||||||
currentEditor: {type: String},
|
currentEditor: {type: String},
|
||||||
@ -823,6 +827,30 @@ class ChatPage extends LitElement {
|
|||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
color: #4e5054;
|
color: #4e5054;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.attachment-icon-container {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
height: 120px;
|
||||||
|
width: 120px;
|
||||||
|
border-radius: 50%;
|
||||||
|
border: none;
|
||||||
|
background-color: var(--mdc-theme-primary);
|
||||||
|
}
|
||||||
|
|
||||||
|
.attachment-icon {
|
||||||
|
width: 70%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.attachment-name {
|
||||||
|
font-family: Work Sans, sans-serif;
|
||||||
|
font-size: 20px;
|
||||||
|
color: var(--chat-bubble-msg-color);
|
||||||
|
margin: 0px;
|
||||||
|
letter-spacing: 1px;
|
||||||
|
padding: 5px 0px;
|
||||||
|
}
|
||||||
`
|
`
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -830,7 +858,7 @@ class ChatPage extends LitElement {
|
|||||||
super()
|
super()
|
||||||
this.getOldMessage = this.getOldMessage.bind(this)
|
this.getOldMessage = this.getOldMessage.bind(this)
|
||||||
this._sendMessage = this._sendMessage.bind(this)
|
this._sendMessage = this._sendMessage.bind(this)
|
||||||
this.insertImage = this.insertImage.bind(this)
|
this.insertFile = this.insertFile.bind(this)
|
||||||
this.pasteImage = this.pasteImage.bind(this)
|
this.pasteImage = this.pasteImage.bind(this)
|
||||||
this.toggleEnableChatEnter = this.toggleEnableChatEnter.bind(this)
|
this.toggleEnableChatEnter = this.toggleEnableChatEnter.bind(this)
|
||||||
this._downObserverhandler = this._downObserverhandler.bind(this)
|
this._downObserverhandler = this._downObserverhandler.bind(this)
|
||||||
@ -861,6 +889,7 @@ class ChatPage extends LitElement {
|
|||||||
this.editedMessageObj = null
|
this.editedMessageObj = null
|
||||||
this.iframeHeight = 42
|
this.iframeHeight = 42
|
||||||
this.imageFile = null
|
this.imageFile = null
|
||||||
|
this.attachment = null
|
||||||
this.uid = new ShortUniqueId()
|
this.uid = new ShortUniqueId()
|
||||||
this.userLanguage = ""
|
this.userLanguage = ""
|
||||||
this.lastMessageRefVisible = false
|
this.lastMessageRefVisible = false
|
||||||
@ -888,7 +917,7 @@ class ChatPage extends LitElement {
|
|||||||
selected: false
|
selected: false
|
||||||
}
|
}
|
||||||
this.webWorker = null;
|
this.webWorker = null;
|
||||||
this.webWorkerImage = null;
|
this.webWorkerFile = null;
|
||||||
this.currentEditor = '_chatEditorDOM'
|
this.currentEditor = '_chatEditorDOM'
|
||||||
this.initialChat = this.initialChat.bind(this)
|
this.initialChat = this.initialChat.bind(this)
|
||||||
this.isEnabledChatEnter = true
|
this.isEnabledChatEnter = true
|
||||||
@ -1030,8 +1059,8 @@ class ChatPage extends LitElement {
|
|||||||
class="close-icon"
|
class="close-icon"
|
||||||
icon="vaadin:close-big"
|
icon="vaadin:close-big"
|
||||||
slot="icon"
|
slot="icon"
|
||||||
@click=${() => this.closeEditMessageContainer()}
|
@click=${() => this.closeEditMessageContainer()}>
|
||||||
></vaadin-icon>
|
</vaadin-icon>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
`}
|
`}
|
||||||
@ -1042,7 +1071,7 @@ class ChatPage extends LitElement {
|
|||||||
placeholder=${this.chatEditorPlaceholder}
|
placeholder=${this.chatEditorPlaceholder}
|
||||||
._sendMessage=${this._sendMessage}
|
._sendMessage=${this._sendMessage}
|
||||||
.imageFile=${this.imageFile}
|
.imageFile=${this.imageFile}
|
||||||
.insertImage=${this.insertImage}
|
.insertFile=${this.insertFile}
|
||||||
.editedMessageObj=${this.editedMessageObj}
|
.editedMessageObj=${this.editedMessageObj}
|
||||||
?isLoading=${this.isLoading}
|
?isLoading=${this.isLoading}
|
||||||
?isLoadingMessages=${this.isLoadingMessages}
|
?isLoadingMessages=${this.isLoadingMessages}
|
||||||
@ -1074,11 +1103,25 @@ class ChatPage extends LitElement {
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
`: ''}
|
`: ''}
|
||||||
|
${(this.isUploadingAttachment || this.isDeletingAttachment) ? html`
|
||||||
|
<div class="dialogCustom">
|
||||||
|
<div class="dialogCustomInner">
|
||||||
|
<div class="dialog-container-loader">
|
||||||
|
<div class=${`smallLoading marginLoader`}></div>
|
||||||
|
<p>
|
||||||
|
${this.isDeletingAttachment ?
|
||||||
|
translate("chatpage.cchange76") : translate("chatpage.cchange75")}
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
`: ''}
|
||||||
<wrapper-modal
|
<wrapper-modal
|
||||||
.onClickFunc=${() => {
|
.onClickFunc=${() => {
|
||||||
this.removeImage();
|
this.removeImage();
|
||||||
}}
|
}}
|
||||||
style=${(this.imageFile && !this.isUploadingImage) ? "visibility:visible;z-index:50" : "visibility: hidden;z-index:-100"}>
|
style=${(this.imageFile && !this.isUploadingImage) ? "visibility:visible; z-index:50" : "visibility: hidden;z-index:-100"}>
|
||||||
<div>
|
<div>
|
||||||
<div class="dialog-container">
|
<div class="dialog-container">
|
||||||
${this.imageFile && html`
|
${this.imageFile && html`
|
||||||
@ -1091,7 +1134,7 @@ class ChatPage extends LitElement {
|
|||||||
placeholder=${this.chatEditorPlaceholder}
|
placeholder=${this.chatEditorPlaceholder}
|
||||||
._sendMessage=${this._sendMessage}
|
._sendMessage=${this._sendMessage}
|
||||||
.imageFile=${this.imageFile}
|
.imageFile=${this.imageFile}
|
||||||
.insertImage=${this.insertImage}
|
.insertFile=${this.insertFile}
|
||||||
.editedMessageObj=${this.editedMessageObj}
|
.editedMessageObj=${this.editedMessageObj}
|
||||||
?isLoading=${this.isLoading}
|
?isLoading=${this.isLoading}
|
||||||
?isLoadingMessages=${this.isLoadingMessages}
|
?isLoadingMessages=${this.isLoadingMessages}
|
||||||
@ -1114,7 +1157,58 @@ class ChatPage extends LitElement {
|
|||||||
const chatTextEditor = this.shadowRoot.getElementById('chatTextCaption')
|
const chatTextEditor = this.shadowRoot.getElementById('chatTextCaption')
|
||||||
chatTextEditor.sendMessageFunc({
|
chatTextEditor.sendMessageFunc({
|
||||||
type: 'image',
|
type: 'image',
|
||||||
imageFile: this.imageFile,
|
})
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
${translate("chatpage.cchange9")}
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</wrapper-modal>
|
||||||
|
<wrapper-modal
|
||||||
|
.onClickFunc=${() => {
|
||||||
|
this.removeAttachment();
|
||||||
|
}}
|
||||||
|
style=${this.attachment && !this.isUploadingAttachment ? "visibility: visible; z-index: 50" : "visibility: hidden; z-index: -100"}>
|
||||||
|
<div>
|
||||||
|
<div class="dialog-container">
|
||||||
|
${this.attachment && html`
|
||||||
|
<div class="attachment-icon-container">
|
||||||
|
<img src="/img/attachment-icon.png" alt="attachment-icon" class="attachment-icon" />
|
||||||
|
</div>
|
||||||
|
`}
|
||||||
|
<p class="attachment-name">${this.attachment && this.attachment.name}</p>
|
||||||
|
<div class="caption-container">
|
||||||
|
<chat-text-editor
|
||||||
|
iframeId="newAttachmentChat"
|
||||||
|
?hasGlobalEvents=${false}
|
||||||
|
placeholder=${this.chatEditorPlaceholder}
|
||||||
|
._sendMessage=${this._sendMessage}
|
||||||
|
.imageFile=${this.imageFile}
|
||||||
|
.attachment=${this.attachment}
|
||||||
|
.insertFile=${this.insertFile}
|
||||||
|
.editedMessageObj=${this.editedMessageObj}
|
||||||
|
?isLoading=${this.isLoading}
|
||||||
|
?isLoadingMessages=${this.isLoadingMessages}
|
||||||
|
id="chatAttachmentId"
|
||||||
|
.editor=${this.editorAttachment}
|
||||||
|
.updatePlaceholder=${(editor, value)=> this.updatePlaceholder(editor, value)}
|
||||||
|
>
|
||||||
|
</chat-text-editor>
|
||||||
|
</div>
|
||||||
|
<div class="modal-button-row">
|
||||||
|
<button class="modal-button-red" @click=${() => {
|
||||||
|
this.removeAttachment();
|
||||||
|
}}>
|
||||||
|
${translate("chatpage.cchange33")}
|
||||||
|
</button>
|
||||||
|
<button
|
||||||
|
class="modal-button"
|
||||||
|
@click=${() => {
|
||||||
|
const chatTextEditor = this.shadowRoot.getElementById('chatAttachmentId');
|
||||||
|
chatTextEditor.sendMessageFunc({
|
||||||
|
type: 'attachment',
|
||||||
})
|
})
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
@ -1346,11 +1440,12 @@ class ChatPage extends LitElement {
|
|||||||
super.connectedCallback();
|
super.connectedCallback();
|
||||||
await this.initUpdate()
|
await this.initUpdate()
|
||||||
this.webWorker = new WebWorker();
|
this.webWorker = new WebWorker();
|
||||||
this.webWorkerImage = new WebWorkerImage();
|
this.webWorkerFile = new WebWorkerFile();
|
||||||
await this.getUpdateCompleteTextEditor();
|
await this.getUpdateCompleteTextEditor();
|
||||||
|
|
||||||
const elementChatId = this.shadowRoot.getElementById('_chatEditorDOM').shadowRoot.getElementById('_chatEditorDOM')
|
const elementChatId = this.shadowRoot.getElementById('_chatEditorDOM').shadowRoot.getElementById('_chatEditorDOM');
|
||||||
const elementChatImageId = this.shadowRoot.getElementById('chatTextCaption').shadowRoot.getElementById('newChat')
|
const elementChatImageId = this.shadowRoot.getElementById('chatTextCaption').shadowRoot.getElementById('newChat');
|
||||||
|
const elementChatAttachmentId = this.shadowRoot.getElementById('chatAttachmentId').shadowRoot.getElementById('newAttachmentChat');
|
||||||
this.editor = new Editor({
|
this.editor = new Editor({
|
||||||
onUpdate: ()=> {
|
onUpdate: ()=> {
|
||||||
this.shadowRoot.getElementById('_chatEditorDOM').getMessageSize(this.editor.getJSON())
|
this.shadowRoot.getElementById('_chatEditorDOM').getMessageSize(this.editor.getJSON())
|
||||||
@ -1407,11 +1502,37 @@ class ChatPage extends LitElement {
|
|||||||
Extension.create({
|
Extension.create({
|
||||||
addKeyboardShortcuts:()=> {
|
addKeyboardShortcuts:()=> {
|
||||||
return {
|
return {
|
||||||
'Enter':()=> {
|
'Enter':() => {
|
||||||
const chatTextEditor = this.shadowRoot.getElementById('chatTextCaption')
|
const chatTextEditor = this.shadowRoot.getElementById('chatTextCaption')
|
||||||
chatTextEditor.sendMessageFunc({
|
chatTextEditor.sendMessageFunc({
|
||||||
type: 'image',
|
type: 'image'
|
||||||
imageFile: this.imageFile,
|
})
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}})
|
||||||
|
]
|
||||||
|
})
|
||||||
|
|
||||||
|
this.editorAttachment = new Editor({
|
||||||
|
onUpdate: () => {
|
||||||
|
this.shadowRoot.getElementById('chatAttachmentId').getMessageSize(this.editorAttachment.getJSON())
|
||||||
|
},
|
||||||
|
element: elementChatAttachmentId,
|
||||||
|
extensions: [
|
||||||
|
StarterKit,
|
||||||
|
Underline,
|
||||||
|
Highlight,
|
||||||
|
Placeholder.configure({
|
||||||
|
placeholder: 'Write something …',
|
||||||
|
}),
|
||||||
|
Extension.create({
|
||||||
|
addKeyboardShortcuts:()=> {
|
||||||
|
return {
|
||||||
|
'Enter':()=> {
|
||||||
|
const chatTextEditor = this.shadowRoot.getElementById('chatAttachmentId')
|
||||||
|
chatTextEditor.sendMessageFunc({
|
||||||
|
type: 'attachment'
|
||||||
})
|
})
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
@ -1421,6 +1542,12 @@ class ChatPage extends LitElement {
|
|||||||
})
|
})
|
||||||
document.addEventListener('keydown', this.initialChat);
|
document.addEventListener('keydown', this.initialChat);
|
||||||
document.addEventListener('paste', this.pasteImage);
|
document.addEventListener('paste', this.pasteImage);
|
||||||
|
if(this.chatId){
|
||||||
|
window.parent.reduxStore.dispatch( window.parent.reduxAction.addChatLastSeen({
|
||||||
|
key: this.chatId,
|
||||||
|
timestamp: Date.now()
|
||||||
|
}))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
disconnectedCallback() {
|
disconnectedCallback() {
|
||||||
@ -1444,6 +1571,14 @@ class ChatPage extends LitElement {
|
|||||||
|
|
||||||
document.removeEventListener('keydown', this.initialChat);
|
document.removeEventListener('keydown', this.initialChat);
|
||||||
document.removeEventListener('paste', this.pasteImage);
|
document.removeEventListener('paste', this.pasteImage);
|
||||||
|
if(this.chatId){
|
||||||
|
window.parent.reduxStore.dispatch( window.parent.reduxAction.addChatLastSeen({
|
||||||
|
key: this.chatId,
|
||||||
|
timestamp: Date.now()
|
||||||
|
}))
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
initialChat(e) {
|
initialChat(e) {
|
||||||
@ -1465,9 +1600,7 @@ class ChatPage extends LitElement {
|
|||||||
const handleTransferIntoURL = (dataTransfer) => {
|
const handleTransferIntoURL = (dataTransfer) => {
|
||||||
try {
|
try {
|
||||||
const [firstItem] = dataTransfer.items;
|
const [firstItem] = dataTransfer.items;
|
||||||
console.log({firstItem});
|
|
||||||
const blob = firstItem.getAsFile();
|
const blob = firstItem.getAsFile();
|
||||||
console.log({blob});
|
|
||||||
return blob;
|
return blob;
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.log(error);
|
console.log(error);
|
||||||
@ -1498,7 +1631,7 @@ class ChatPage extends LitElement {
|
|||||||
this.insertImage(file);
|
this.insertImage(file);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error(error);
|
console.error(error);
|
||||||
let errorMsg = get("chatpage.cchange70")
|
let errorMsg = get("chatpage.cchange81")
|
||||||
parentEpml.request('showSnackBar', `${errorMsg}`)
|
parentEpml.request('showSnackBar', `${errorMsg}`)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@ -1636,19 +1769,29 @@ class ChatPage extends LitElement {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
insertImage(file) {
|
insertFile(file) {
|
||||||
if (file.type.includes('image')) {
|
if (file.type.includes('image')) {
|
||||||
this.imageFile = file;
|
this.imageFile = file;
|
||||||
this.currentEditor = 'newChat'
|
this.currentEditor = 'newChat';
|
||||||
|
return;
|
||||||
|
} else {
|
||||||
|
this.attachment = file;
|
||||||
|
this.currentEditor = "newAttachmentChat";
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
parentEpml.request('showSnackBar', get("chatpage.cchange28"));
|
// parentEpml.request('showSnackBar', get("chatpage.cchange28"));
|
||||||
}
|
}
|
||||||
|
|
||||||
removeImage() {
|
removeImage() {
|
||||||
this.imageFile = null;
|
this.imageFile = null;
|
||||||
this.resetChatEditor()
|
this.resetChatEditor();
|
||||||
this.currentEditor = '_chatEditorDOM'
|
this.currentEditor = '_chatEditorDOM';
|
||||||
|
}
|
||||||
|
|
||||||
|
removeAttachment() {
|
||||||
|
this.attachment = null;
|
||||||
|
this.resetChatEditor();
|
||||||
|
this.currentEditor = '_chatEditorDOM';
|
||||||
}
|
}
|
||||||
|
|
||||||
changeMsgInput(id) {
|
changeMsgInput(id) {
|
||||||
@ -1805,7 +1948,6 @@ class ChatPage extends LitElement {
|
|||||||
this.editor.setEditable(true)
|
this.editor.setEditable(true)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
async getName (recipient) {
|
async getName (recipient) {
|
||||||
@ -2175,7 +2317,13 @@ class ChatPage extends LitElement {
|
|||||||
await this.renderNewMessage(msg)
|
await this.renderNewMessage(msg)
|
||||||
})
|
})
|
||||||
await Promise.all(renderEachMessage)
|
await Promise.all(renderEachMessage)
|
||||||
|
if(this.chatId){
|
||||||
|
window.parent.reduxStore.dispatch( window.parent.reduxAction.addChatLastSeen({
|
||||||
|
key: this.chatId,
|
||||||
|
timestamp: Date.now()
|
||||||
|
}))
|
||||||
|
|
||||||
|
}
|
||||||
// this.newMessages = this.newMessages.concat(_newMessages)
|
// this.newMessages = this.newMessages.concat(_newMessages)
|
||||||
this.messagesRendered = [...this.messagesRendered].sort(function (a, b) {
|
this.messagesRendered = [...this.messagesRendered].sort(function (a, b) {
|
||||||
return a.timestamp
|
return a.timestamp
|
||||||
@ -2501,6 +2649,9 @@ class ChatPage extends LitElement {
|
|||||||
if(this.currentEditor === 'newChat'){
|
if(this.currentEditor === 'newChat'){
|
||||||
this.editorImage.commands.setContent('')
|
this.editorImage.commands.setContent('')
|
||||||
}
|
}
|
||||||
|
if(this.currentEditor === 'newAttachmentChat'){
|
||||||
|
this.editorAttachment.commands.setContent('')
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async _sendMessage(outSideMsg, msg) {
|
async _sendMessage(outSideMsg, msg) {
|
||||||
@ -2543,6 +2694,7 @@ class ChatPage extends LitElement {
|
|||||||
// find specific object property in local
|
// find specific object property in local
|
||||||
let typeMessage = 'regular';
|
let typeMessage = 'regular';
|
||||||
let workerImage;
|
let workerImage;
|
||||||
|
let workerAttachment;
|
||||||
this.isLoading = true;
|
this.isLoading = true;
|
||||||
const trimmedMessage = msg
|
const trimmedMessage = msg
|
||||||
|
|
||||||
@ -2571,10 +2723,10 @@ class ChatPage extends LitElement {
|
|||||||
let compressedFile = ''
|
let compressedFile = ''
|
||||||
var str = "iVBORw0KGgoAAAANSUhEUgAAAsAAAAGMAQMAAADuk4YmAAAAA1BMVEX///+nxBvIAAAAAXRSTlMAQObYZgAAADlJREFUeF7twDEBAAAAwiD7p7bGDlgYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAGJrAABgPqdWQAAAABJRU5ErkJggg==";
|
var str = "iVBORw0KGgoAAAANSUhEUgAAAsAAAAGMAQMAAADuk4YmAAAAA1BMVEX///+nxBvIAAAAAXRSTlMAQObYZgAAADlJREFUeF7twDEBAAAAwiD7p7bGDlgYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAGJrAABgPqdWQAAAABJRU5ErkJggg==";
|
||||||
|
|
||||||
if (this.webWorkerImage) {
|
if (this.webWorkerFile) {
|
||||||
workerImage = this.webWorkerImage;
|
workerImage = this.webWorkerFile;
|
||||||
} else {
|
} else {
|
||||||
this.webWorkerImage = new WebWorkerImage();
|
this.webWorkerFile = new WebWorkerFile();
|
||||||
}
|
}
|
||||||
|
|
||||||
const b64toBlob = (b64Data, contentType='', sliceSize=512) => {
|
const b64toBlob = (b64Data, contentType='', sliceSize=512) => {
|
||||||
@ -2632,7 +2784,7 @@ class ChatPage extends LitElement {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
typeMessage = 'edit';
|
typeMessage = 'edit';
|
||||||
let chatReference = outSideMsg.editedMessageObj.signature;
|
let chatReference = outSideMsg.editedMessageObj.reference;
|
||||||
|
|
||||||
if(outSideMsg.editedMessageObj.chatReference){
|
if(outSideMsg.editedMessageObj.chatReference){
|
||||||
chatReference = outSideMsg.editedMessageObj.chatReference;
|
chatReference = outSideMsg.editedMessageObj.chatReference;
|
||||||
@ -2652,10 +2804,97 @@ class ChatPage extends LitElement {
|
|||||||
}
|
}
|
||||||
const stringifyMessageObject = JSON.stringify(messageObject);
|
const stringifyMessageObject = JSON.stringify(messageObject);
|
||||||
this.sendMessage(stringifyMessageObject, typeMessage, chatReference);
|
this.sendMessage(stringifyMessageObject, typeMessage, chatReference);
|
||||||
|
} else if (outSideMsg && outSideMsg.type === 'deleteAttachment') {
|
||||||
|
this.isDeletingAttachment = true;
|
||||||
|
let compressedFile = ''
|
||||||
|
var str = "iVBORw0KGgoAAAANSUhEUgAAAsAAAAGMAQMAAADuk4YmAAAAA1BMVEX///+nxBvIAAAAAXRSTlMAQObYZgAAADlJREFUeF7twDEBAAAAwiD7p7bGDlgYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAGJrAABgPqdWQAAAABJRU5ErkJggg==";
|
||||||
|
const userName = outSideMsg.name;
|
||||||
|
const identifier = outSideMsg.identifier;
|
||||||
|
|
||||||
|
if (this.webWorkerFile) {
|
||||||
|
workerAttachment = this.webWorkerFile;
|
||||||
|
} else {
|
||||||
|
this.webWorkerFile = new WebWorkerFile();
|
||||||
}
|
}
|
||||||
else if (outSideMsg && outSideMsg.type === 'image') {
|
|
||||||
|
const b64toBlob = (b64Data, contentType='', sliceSize=512) => {
|
||||||
|
const byteCharacters = atob(b64Data);
|
||||||
|
const byteArrays = [];
|
||||||
|
|
||||||
|
for (let offset = 0; offset < byteCharacters.length; offset += sliceSize) {
|
||||||
|
const slice = byteCharacters.slice(offset, offset + sliceSize);
|
||||||
|
|
||||||
|
const byteNumbers = new Array(slice.length);
|
||||||
|
for (let i = 0; i < slice.length; i++) {
|
||||||
|
byteNumbers[i] = slice.charCodeAt(i);
|
||||||
|
}
|
||||||
|
|
||||||
|
const byteArray = new Uint8Array(byteNumbers);
|
||||||
|
byteArrays.push(byteArray);
|
||||||
|
}
|
||||||
|
|
||||||
|
const blob = new Blob(byteArrays, {type: contentType});
|
||||||
|
return blob;
|
||||||
|
}
|
||||||
|
|
||||||
|
const blob = b64toBlob(str, 'image/png');
|
||||||
|
await new Promise(resolve => {
|
||||||
|
new Compressor(blob, {
|
||||||
|
quality: 0.6,
|
||||||
|
maxWidth: 500,
|
||||||
|
success(result) {
|
||||||
|
const file = new File([result], "name", {
|
||||||
|
type: 'image/png'
|
||||||
|
});
|
||||||
|
|
||||||
|
compressedFile = file;
|
||||||
|
resolve();
|
||||||
|
},
|
||||||
|
error(err) {
|
||||||
|
console.log(err.message);
|
||||||
|
},
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
try {
|
||||||
|
await publishData({
|
||||||
|
registeredName: userName,
|
||||||
|
file: compressedFile,
|
||||||
|
service: 'QCHAT_ATTACHMENT',
|
||||||
|
identifier: identifier,
|
||||||
|
parentEpml,
|
||||||
|
metaData: undefined,
|
||||||
|
uploadType: 'file',
|
||||||
|
selectedAddress: this.selectedAddress,
|
||||||
|
worker: workerAttachment
|
||||||
|
})
|
||||||
|
this.isDeletingAttachment = false
|
||||||
|
} catch (error) {
|
||||||
|
this.isLoading = false;
|
||||||
|
return
|
||||||
|
}
|
||||||
|
typeMessage = 'edit';
|
||||||
|
let chatReference = outSideMsg.editedMessageObj.signature;
|
||||||
|
|
||||||
|
if(outSideMsg.editedMessageObj.chatReference){
|
||||||
|
chatReference = outSideMsg.editedMessageObj.chatReference;
|
||||||
|
}
|
||||||
|
|
||||||
|
let message = "";
|
||||||
|
try {
|
||||||
|
const parsedMessageObj = JSON.parse(outSideMsg.editedMessageObj.decodedMessage);
|
||||||
|
message = parsedMessageObj;
|
||||||
|
|
||||||
|
} catch (error) {
|
||||||
|
message = outSideMsg.editedMessageObj.decodedMessage;
|
||||||
|
}
|
||||||
|
const messageObject = {
|
||||||
|
...message,
|
||||||
|
isAttachmentDeleted: true
|
||||||
|
}
|
||||||
|
const stringifyMessageObject = JSON.stringify(messageObject);
|
||||||
|
this.sendMessage(stringifyMessageObject, typeMessage, chatReference);
|
||||||
|
} else if (outSideMsg && outSideMsg.type === 'image') {
|
||||||
this.isUploadingImage = true;
|
this.isUploadingImage = true;
|
||||||
const userName = await getName(this.selectedAddress.address);
|
const userName = await getName(this.selectedAddress.address);
|
||||||
if (!userName) {
|
if (!userName) {
|
||||||
@ -2666,10 +2905,10 @@ class ChatPage extends LitElement {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.webWorkerImage) {
|
if (this.webWorkerFile) {
|
||||||
workerImage = this.webWorkerImage;
|
workerImage = this.webWorkerFile;
|
||||||
} else {
|
} else {
|
||||||
this.webWorkerImage = new WebWorkerImage();
|
this.webWorkerFile = new WebWorkerFile();
|
||||||
}
|
}
|
||||||
|
|
||||||
const image = this.imageFile
|
const image = this.imageFile
|
||||||
@ -2679,7 +2918,7 @@ class ChatPage extends LitElement {
|
|||||||
await new Promise(resolve => {
|
await new Promise(resolve => {
|
||||||
new Compressor( image, {
|
new Compressor( image, {
|
||||||
quality: .6,
|
quality: .6,
|
||||||
maxWidth: 500,
|
maxWidth: 1200,
|
||||||
success(result){
|
success(result){
|
||||||
const file = new File([result], "name", {
|
const file = new File([result], "name", {
|
||||||
type: image.type
|
type: image.type
|
||||||
@ -2712,15 +2951,14 @@ class ChatPage extends LitElement {
|
|||||||
worker: workerImage
|
worker: workerImage
|
||||||
});
|
});
|
||||||
this.isUploadingImage = false;
|
this.isUploadingImage = false;
|
||||||
this.removeImage()
|
this.removeImage();
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
|
console.error(error);
|
||||||
this.isLoading = false;
|
this.isLoading = false;
|
||||||
this.isUploadingImage = false;
|
this.isUploadingImage = false;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
const messageObject = {
|
const messageObject = {
|
||||||
messageText: trimmedMessage,
|
messageText: trimmedMessage,
|
||||||
images: [{
|
images: [{
|
||||||
@ -2730,7 +2968,68 @@ class ChatPage extends LitElement {
|
|||||||
}],
|
}],
|
||||||
isImageDeleted: false,
|
isImageDeleted: false,
|
||||||
repliedTo: '',
|
repliedTo: '',
|
||||||
version: 3
|
version: 2
|
||||||
|
};
|
||||||
|
const stringifyMessageObject = JSON.stringify(messageObject);
|
||||||
|
this.sendMessage(stringifyMessageObject, typeMessage);
|
||||||
|
}
|
||||||
|
else if (outSideMsg && outSideMsg.type === 'attachment') {
|
||||||
|
this.isUploadingAttachment = true;
|
||||||
|
const userName = await getName(this.selectedAddress.address);
|
||||||
|
if (!userName) {
|
||||||
|
parentEpml.request('showSnackBar', get("chatpage.cchange27"));
|
||||||
|
this.isLoading = false;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this.webWorkerFile) {
|
||||||
|
workerAttachment = this.webWorkerFile;
|
||||||
|
} else {
|
||||||
|
this.webWorkerFile = new WebWorkerFile();
|
||||||
|
}
|
||||||
|
|
||||||
|
const attachment = this.attachment;
|
||||||
|
const id = this.uid();
|
||||||
|
const identifier = `qchat_${id}`;
|
||||||
|
const fileSize = attachment.size;
|
||||||
|
if (fileSize > 1000000) {
|
||||||
|
parentEpml.request('showSnackBar', get("chatpage.cchange77"));
|
||||||
|
this.isLoading = false;
|
||||||
|
this.isUploadingAttachment = false;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
await publishData({
|
||||||
|
registeredName: userName,
|
||||||
|
file : attachment,
|
||||||
|
service: 'QCHAT_ATTACHMENT',
|
||||||
|
identifier : identifier,
|
||||||
|
parentEpml,
|
||||||
|
metaData: undefined,
|
||||||
|
uploadType: 'file',
|
||||||
|
selectedAddress: this.selectedAddress,
|
||||||
|
worker: workerAttachment
|
||||||
|
});
|
||||||
|
this.isUploadingAttachment = false;
|
||||||
|
this.removeAttachment();
|
||||||
|
} catch (error) {
|
||||||
|
console.error(error);
|
||||||
|
this.isLoading = false;
|
||||||
|
this.isUploadingAttachment = false;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const messageObject = {
|
||||||
|
messageText: trimmedMessage,
|
||||||
|
attachments: [{
|
||||||
|
service: 'QCHAT_ATTACHMENT',
|
||||||
|
name: userName,
|
||||||
|
identifier: identifier,
|
||||||
|
attachmentName: attachment.name,
|
||||||
|
attachmentSize: attachment.size
|
||||||
|
}],
|
||||||
|
isAttachmentDeleted: false,
|
||||||
|
repliedTo: '',
|
||||||
|
version: 2
|
||||||
};
|
};
|
||||||
const stringifyMessageObject = JSON.stringify(messageObject);
|
const stringifyMessageObject = JSON.stringify(messageObject);
|
||||||
this.sendMessage(stringifyMessageObject, typeMessage);
|
this.sendMessage(stringifyMessageObject, typeMessage);
|
||||||
|
@ -86,6 +86,7 @@ export const chatStyles = css`
|
|||||||
font-size: 13px;
|
font-size: 13px;
|
||||||
user-select: none;
|
user-select: none;
|
||||||
display: flex;
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
padding-top: 2px;
|
padding-top: 2px;
|
||||||
}
|
}
|
||||||
@ -97,6 +98,7 @@ export const chatStyles = css`
|
|||||||
font-size: 13px;
|
font-size: 13px;
|
||||||
user-select: none;
|
user-select: none;
|
||||||
display: flex;
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
padding-top: 2px;
|
padding-top: 2px;
|
||||||
}
|
}
|
||||||
@ -644,6 +646,7 @@ export const chatStyles = css`
|
|||||||
white-space: pre-wrap;
|
white-space: pre-wrap;
|
||||||
margin: 0px;
|
margin: 0px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.replied-message pre code {
|
.replied-message pre code {
|
||||||
color: inherit;
|
color: inherit;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
@ -651,12 +654,10 @@ export const chatStyles = css`
|
|||||||
font-size: 0.8rem;
|
font-size: 0.8rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
.replied-message img {
|
.replied-message img {
|
||||||
width: 1.7em;
|
width: 1.7em;
|
||||||
height: 1.5em;
|
height: 1.5em;
|
||||||
margin: 0px;
|
margin: 0px;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.replied-message blockquote {
|
.replied-message blockquote {
|
||||||
@ -670,6 +671,79 @@ export const chatStyles = css`
|
|||||||
margin: 2rem 0;
|
margin: 2rem 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.attachment-container {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-evenly;
|
||||||
|
padding: 5px 0 10px 0;
|
||||||
|
gap: 20px;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.attachment-icon-container {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
height: 50px;
|
||||||
|
width: 50px;
|
||||||
|
border-radius: 50%;
|
||||||
|
border: none;
|
||||||
|
background-color: var(--mdc-theme-primary);
|
||||||
|
}
|
||||||
|
|
||||||
|
.attachment-icon {
|
||||||
|
width: 70%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.attachment-info {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.attachment-name {
|
||||||
|
font-family: Work Sans, sans-serif;
|
||||||
|
font-size: 16px;
|
||||||
|
color: var(--chat-bubble-msg-color);
|
||||||
|
margin: 0;
|
||||||
|
letter-spacing: 0.4px;
|
||||||
|
padding: 5px 0;
|
||||||
|
white-space: nowrap;
|
||||||
|
overflow: hidden;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
}
|
||||||
|
|
||||||
|
.attachment-size {
|
||||||
|
font-family: Roboto, sans-serif;
|
||||||
|
font-size: 16px;
|
||||||
|
color: var(--chat-bubble-msg-color);
|
||||||
|
margin: 0;
|
||||||
|
letter-spacing: 0.3px;
|
||||||
|
font-weight: 300;
|
||||||
|
}
|
||||||
|
|
||||||
|
.download-icon {
|
||||||
|
position: relative;
|
||||||
|
color: var(--chat-bubble-msg-color);
|
||||||
|
width: 19px;
|
||||||
|
background-color: transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
.download-icon:hover::before {
|
||||||
|
background-color: rgb(161 158 158 / 41%);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.download-icon::before {
|
||||||
|
content: "";
|
||||||
|
position: absolute;
|
||||||
|
border-radius: 50%;
|
||||||
|
padding: 18px;
|
||||||
|
background-color: transparent;
|
||||||
|
transition: all 0.3s ease-in-out;
|
||||||
|
}
|
||||||
|
|
||||||
.edited-message-style {
|
.edited-message-style {
|
||||||
font-family: "Work Sans", sans-serif;
|
font-family: "Work Sans", sans-serif;
|
||||||
font-style: italic;
|
font-style: italic;
|
||||||
|
@ -6,6 +6,7 @@ import {unsafeHTML} from 'lit/directives/unsafe-html.js';
|
|||||||
import { chatStyles } from './ChatScroller-css.js'
|
import { chatStyles } from './ChatScroller-css.js'
|
||||||
import { Epml } from "../../../epml";
|
import { Epml } from "../../../epml";
|
||||||
import { cropAddress } from "../../utils/cropAddress";
|
import { cropAddress } from "../../utils/cropAddress";
|
||||||
|
import { roundToNearestDecimal } from '../../utils/roundToNearestDecimal.js';
|
||||||
import './LevelFounder.js';
|
import './LevelFounder.js';
|
||||||
import './NameMenu.js';
|
import './NameMenu.js';
|
||||||
import './ChatModals.js';
|
import './ChatModals.js';
|
||||||
@ -18,7 +19,9 @@ import '@material/mwc-button';
|
|||||||
import '@material/mwc-dialog';
|
import '@material/mwc-dialog';
|
||||||
import '@material/mwc-icon';
|
import '@material/mwc-icon';
|
||||||
import { EmojiPicker } from 'emoji-picker-js';
|
import { EmojiPicker } from 'emoji-picker-js';
|
||||||
import { generateHTML } from '@tiptap/core'
|
import { generateHTML } from '@tiptap/core';
|
||||||
|
import { saveAs } from 'file-saver';
|
||||||
|
import axios from "axios";
|
||||||
import StarterKit from '@tiptap/starter-kit'
|
import StarterKit from '@tiptap/starter-kit'
|
||||||
import Underline from '@tiptap/extension-underline';
|
import Underline from '@tiptap/extension-underline';
|
||||||
import Highlight from '@tiptap/extension-highlight'
|
import Highlight from '@tiptap/extension-highlight'
|
||||||
@ -82,7 +85,6 @@ class ChatScroller extends LitElement {
|
|||||||
let timestamp;
|
let timestamp;
|
||||||
let sender;
|
let sender;
|
||||||
let repliedToData;
|
let repliedToData;
|
||||||
|
|
||||||
let firstMessageInChat;
|
let firstMessageInChat;
|
||||||
|
|
||||||
if (index === 0) {
|
if (index === 0) {
|
||||||
@ -281,6 +283,7 @@ class MessageTemplate extends LitElement {
|
|||||||
sendMessageForward: { attribute: false },
|
sendMessageForward: { attribute: false },
|
||||||
openDialogImage: { attribute: false },
|
openDialogImage: { attribute: false },
|
||||||
openDeleteImage: { type: Boolean },
|
openDeleteImage: { type: Boolean },
|
||||||
|
openDeleteAttachment: { type: Boolean },
|
||||||
isImageLoaded: { type: Boolean },
|
isImageLoaded: { type: Boolean },
|
||||||
isFirstMessage: { type: Boolean },
|
isFirstMessage: { type: Boolean },
|
||||||
isSingleMessageInGroup: { type: Boolean },
|
isSingleMessageInGroup: { type: Boolean },
|
||||||
@ -344,6 +347,22 @@ class MessageTemplate extends LitElement {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async downloadAttachment(attachment) {
|
||||||
|
|
||||||
|
const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node];
|
||||||
|
|
||||||
|
const nodeUrl = myNode.protocol + '://' + myNode.domain + ':' + myNode.port;
|
||||||
|
try{
|
||||||
|
axios.get(`${nodeUrl}/arbitrary/QCHAT_ATTACHMENT/${attachment.name}/${attachment.identifier}?apiKey=${myNode.apiKey}`, { responseType: 'blob'})
|
||||||
|
.then(response =>{
|
||||||
|
let filename = attachment.attachmentName;
|
||||||
|
let blob = new Blob([response.data], { type:"application/octet-stream" });
|
||||||
|
saveAs(blob , filename);
|
||||||
|
})
|
||||||
|
} catch (error) {
|
||||||
|
console.error(error);
|
||||||
|
}
|
||||||
|
}
|
||||||
firstUpdated(){
|
firstUpdated(){
|
||||||
const autoSeeChatList = window.parent.reduxStore.getState().app?.autoLoadImageChats
|
const autoSeeChatList = window.parent.reduxStore.getState().app?.autoLoadImageChats
|
||||||
if(autoSeeChatList.includes(this.chatId) || this.listSeenMessages.includes(this.messageObj.signature)){
|
if(autoSeeChatList.includes(this.chatId) || this.listSeenMessages.includes(this.messageObj.signature)){
|
||||||
@ -366,9 +385,11 @@ class MessageTemplate extends LitElement {
|
|||||||
let repliedToData = null;
|
let repliedToData = null;
|
||||||
let image = null;
|
let image = null;
|
||||||
let isImageDeleted = false;
|
let isImageDeleted = false;
|
||||||
|
let isAttachmentDeleted = false;
|
||||||
let version = 0;
|
let version = 0;
|
||||||
let isForwarded = false
|
let isForwarded = false
|
||||||
let isEdited = false
|
let isEdited = false
|
||||||
|
let attachment = null;
|
||||||
try {
|
try {
|
||||||
const parsedMessageObj = JSON.parse(this.messageObj.decodedMessage);
|
const parsedMessageObj = JSON.parse(this.messageObj.decodedMessage);
|
||||||
console.log({parsedMessageObj}, +parsedMessageObj.version, +parsedMessageObj.version > 1)
|
console.log({parsedMessageObj}, +parsedMessageObj.version, +parsedMessageObj.version > 1)
|
||||||
@ -384,10 +405,14 @@ class MessageTemplate extends LitElement {
|
|||||||
message = parsedMessageObj.messageText;
|
message = parsedMessageObj.messageText;
|
||||||
repliedToData = this.messageObj.repliedToData;
|
repliedToData = this.messageObj.repliedToData;
|
||||||
isImageDeleted = parsedMessageObj.isImageDeleted;
|
isImageDeleted = parsedMessageObj.isImageDeleted;
|
||||||
|
isAttachmentDeleted = parsedMessageObj.isAttachmentDeleted;
|
||||||
reactions = parsedMessageObj.reactions || [];
|
reactions = parsedMessageObj.reactions || [];
|
||||||
version = parsedMessageObj.version;
|
version = parsedMessageObj.version;
|
||||||
isForwarded = parsedMessageObj.type === 'forward';
|
isForwarded = parsedMessageObj.type === 'forward';
|
||||||
isEdited = parsedMessageObj.isEdited && true;
|
isEdited = parsedMessageObj.isEdited && true;
|
||||||
|
if (parsedMessageObj.attachments && Array.isArray(parsedMessageObj.attachments) && parsedMessageObj.attachments.length > 0) {
|
||||||
|
attachment = parsedMessageObj.attachments[0];
|
||||||
|
}
|
||||||
if (parsedMessageObj.images && Array.isArray(parsedMessageObj.images) && parsedMessageObj.images.length > 0) {
|
if (parsedMessageObj.images && Array.isArray(parsedMessageObj.images) && parsedMessageObj.images.length > 0) {
|
||||||
image = parsedMessageObj.images[0];
|
image = parsedMessageObj.images[0];
|
||||||
}
|
}
|
||||||
@ -444,12 +469,11 @@ class MessageTemplate extends LitElement {
|
|||||||
const nodeUrl = myNode.protocol + '://' + myNode.domain + ':' + myNode.port;
|
const nodeUrl = myNode.protocol + '://' + myNode.domain + ':' + myNode.port;
|
||||||
imageUrl = `${nodeUrl}/arbitrary/${image.service}/${image.name}/${image.identifier}?async=true&apiKey=${myNode.apiKey}`;
|
imageUrl = `${nodeUrl}/arbitrary/${image.service}/${image.name}/${image.identifier}?async=true&apiKey=${myNode.apiKey}`;
|
||||||
|
|
||||||
if(this.viewImage || this.myAddress === this.messageObj.sender){
|
if (this.viewImage || this.myAddress === this.messageObj.sender) {
|
||||||
imageHTML = createImage(imageUrl);
|
imageHTML = createImage(imageUrl);
|
||||||
imageHTMLDialog = createImage(imageUrl)
|
imageHTMLDialog = createImage(imageUrl)
|
||||||
imageHTMLDialog.style= "height: auto; max-height: 80vh; width: auto; max-width: 80vw; object-fit: contain; border-radius: 5px";
|
imageHTMLDialog.style= "height: auto; max-height: 80vh; width: auto; max-width: 80vw; object-fit: contain; border-radius: 5px";
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
nameMenu = html`
|
nameMenu = html`
|
||||||
@ -598,7 +622,6 @@ class MessageTemplate extends LitElement {
|
|||||||
<div style="display:flex;width:100%;height:100%;justify-content:center;align-items:center;cursor:pointer;color:var(--black)">
|
<div style="display:flex;width:100%;height:100%;justify-content:center;align-items:center;cursor:pointer;color:var(--black)">
|
||||||
${translate("chatpage.cchange40")}
|
${translate("chatpage.cchange40")}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
` : html``}
|
` : html``}
|
||||||
${!this.isImageLoaded && image && this.viewImage ? html`
|
${!this.isImageLoaded && image && this.viewImage ? html`
|
||||||
@ -622,8 +645,53 @@ class MessageTemplate extends LitElement {
|
|||||||
|
|
||||||
</div>
|
</div>
|
||||||
` : image && isImageDeleted ? html`
|
` : image && isImageDeleted ? html`
|
||||||
<p class="image-deleted-msg">This image has been deleted</p>
|
<p class="image-deleted-msg">${translate("chatpage.cchange80")}</p>
|
||||||
` : html``}
|
` : html``}
|
||||||
|
${attachment && !isAttachmentDeleted ?
|
||||||
|
html`
|
||||||
|
<div @click=${async () => await this.downloadAttachment(attachment)} class="attachment-container">
|
||||||
|
<div class="attachment-icon-container">
|
||||||
|
<img
|
||||||
|
src="/img/attachment-icon.png"
|
||||||
|
alt="attachment-icon"
|
||||||
|
class="attachment-icon" />
|
||||||
|
</div>
|
||||||
|
<div class="attachment-info">
|
||||||
|
<p class="attachment-name">
|
||||||
|
${attachment && attachment.attachmentName}
|
||||||
|
</p>
|
||||||
|
<p class="attachment-size">
|
||||||
|
${roundToNearestDecimal(attachment.attachmentSize)} mb
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
<vaadin-icon
|
||||||
|
icon="vaadin:download-alt"
|
||||||
|
slot="icon"
|
||||||
|
class="download-icon">
|
||||||
|
</vaadin-icon>
|
||||||
|
${this.myAddress === this.messageObj.sender
|
||||||
|
? html`
|
||||||
|
<vaadin-icon
|
||||||
|
@click=${(e) => {
|
||||||
|
e.stopPropagation();
|
||||||
|
this.openDeleteAttachment = true;
|
||||||
|
}}
|
||||||
|
class="image-delete-icon" icon="vaadin:close" slot="icon">
|
||||||
|
</vaadin-icon>
|
||||||
|
` : html``}
|
||||||
|
</div>
|
||||||
|
`
|
||||||
|
: attachment && isAttachmentDeleted ?
|
||||||
|
html`
|
||||||
|
<div class="attachment-container">
|
||||||
|
<div class="attachment-info">
|
||||||
|
<p style=${"font-style: italic;"} class="attachment-name">
|
||||||
|
${translate("chatpage.cchange82")}
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
`
|
||||||
|
: html``}
|
||||||
<div
|
<div
|
||||||
id="messageContent"
|
id="messageContent"
|
||||||
class="message"
|
class="message"
|
||||||
@ -795,7 +863,7 @@ class MessageTemplate extends LitElement {
|
|||||||
this.openDeleteImage = false;
|
this.openDeleteImage = false;
|
||||||
}}>
|
}}>
|
||||||
<div class="delete-image-msg">
|
<div class="delete-image-msg">
|
||||||
<p>Are you sure you want to delete this image?</p>
|
<p>${translate("chatpage.cchange78")}</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-button-row" @click=${() => this.openDeleteImage = false}>
|
<div class="modal-button-row" @click=${() => this.openDeleteImage = false}>
|
||||||
<button class="modal-button-red">
|
<button class="modal-button-red">
|
||||||
@ -813,6 +881,34 @@ class MessageTemplate extends LitElement {
|
|||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</mwc-dialog>
|
</mwc-dialog>
|
||||||
|
<mwc-dialog
|
||||||
|
hideActions
|
||||||
|
?open=${this.openDeleteAttachment}
|
||||||
|
@closed=${()=> {
|
||||||
|
this.openDeleteAttachment = false;
|
||||||
|
}}>
|
||||||
|
<div class="delete-image-msg">
|
||||||
|
<p>${translate("chatpage.cchange79")}</p>
|
||||||
|
</div>
|
||||||
|
<div class="modal-button-row" @click=${() => this.openDeleteAttachment = false}>
|
||||||
|
<button class="modal-button-red">
|
||||||
|
Cancel
|
||||||
|
</button>
|
||||||
|
<button
|
||||||
|
class="modal-button"
|
||||||
|
@click=${() => {
|
||||||
|
this.sendMessage({
|
||||||
|
type: 'deleteAttachment',
|
||||||
|
attachment: attachment,
|
||||||
|
name: attachment.name,
|
||||||
|
identifier: attachment.identifier,
|
||||||
|
editedMessageObj: this.messageObj,
|
||||||
|
})}
|
||||||
|
}>
|
||||||
|
Yes
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</mwc-dialog>
|
||||||
`
|
`
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -15,6 +15,8 @@ class ChatTextEditor extends LitElement {
|
|||||||
isLoadingMessages: { type: Boolean },
|
isLoadingMessages: { type: Boolean },
|
||||||
_sendMessage: { attribute: false },
|
_sendMessage: { attribute: false },
|
||||||
placeholder: { type: String },
|
placeholder: { type: String },
|
||||||
|
attachment: { type: Object },
|
||||||
|
insertFile: { attribute: false },
|
||||||
imageFile: { type: Object },
|
imageFile: { type: Object },
|
||||||
insertImage: { attribute: false },
|
insertImage: { attribute: false },
|
||||||
iframeHeight: { type: Number },
|
iframeHeight: { type: Number },
|
||||||
@ -482,15 +484,18 @@ mwc-checkbox::shadow .mdc-checkbox::after, mwc-checkbox::shadow .mdc-checkbox::b
|
|||||||
<div class="file-picker-input-container">
|
<div class="file-picker-input-container">
|
||||||
<input
|
<input
|
||||||
@change="${e => {
|
@change="${e => {
|
||||||
this.insertImage(e.target.files[0]);
|
this.insertFile(e.target.files[0]);
|
||||||
const filePickerInput = this.shadowRoot.getElementById('file-picker')
|
const filePickerInput = this.shadowRoot.getElementById('file-picker');
|
||||||
if(filePickerInput){
|
if (filePickerInput) {
|
||||||
filePickerInput.value = ""
|
filePickerInput.value = "";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}"
|
}"
|
||||||
id="file-picker"
|
id="file-picker"
|
||||||
class="file-picker-input" type="file" name="myImage" accept="image/*" />
|
class="file-picker-input"
|
||||||
|
type="file"
|
||||||
|
name="myImage"
|
||||||
|
accept="image/*, .doc, .docx, .pdf, .zip, .pdf, .txt, .odt, .ods, .xls, .xlsx, .ppt, .pptx" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<textarea style="color: var(--black);" tabindex='1' ?autofocus=${true} ?disabled=${this.isLoading || this.isLoadingMessages} id="messageBox" rows="1"></textarea>
|
<textarea style="color: var(--black);" tabindex='1' ?autofocus=${true} ?disabled=${this.isLoading || this.isLoadingMessages} id="messageBox" rows="1"></textarea>
|
||||||
@ -523,7 +528,7 @@ mwc-checkbox::shadow .mdc-checkbox::after, mwc-checkbox::shadow .mdc-checkbox::b
|
|||||||
html`
|
html`
|
||||||
<div
|
<div
|
||||||
style="margin-bottom: 10px;
|
style="margin-bottom: 10px;
|
||||||
${this.iframeId === 'newChat'
|
${(this.iframeId === 'newChat' || this.iframeId === "newAttachmentChat")
|
||||||
? 'display: none;'
|
? 'display: none;'
|
||||||
: 'display: flex;'}">
|
: 'display: flex;'}">
|
||||||
${this.isLoading === false ? html`
|
${this.isLoading === false ? html`
|
||||||
@ -692,6 +697,19 @@ mwc-checkbox::shadow .mdc-checkbox::after, mwc-checkbox::shadow .mdc-checkbox::b
|
|||||||
repliedTo: '',
|
repliedTo: '',
|
||||||
version: 3
|
version: 3
|
||||||
};
|
};
|
||||||
|
} else if (this.attachment && this.iframeId === 'newAttachmentChat') {
|
||||||
|
messageObject = {
|
||||||
|
messageText: trimmedMessage,
|
||||||
|
attachments: [{
|
||||||
|
service: "QCHAT_ATTACHMENT",
|
||||||
|
name: '123456789123456789123456789',
|
||||||
|
identifier: '123456',
|
||||||
|
attachmentName: "123456789123456789123456789",
|
||||||
|
attachmentSize: "123456"
|
||||||
|
}],
|
||||||
|
repliedTo: '',
|
||||||
|
version: 2
|
||||||
|
};
|
||||||
} else {
|
} else {
|
||||||
messageObject = {
|
messageObject = {
|
||||||
messageText: trimmedMessage,
|
messageText: trimmedMessage,
|
||||||
|
@ -19,7 +19,7 @@ class TimeAgo extends LitElement {
|
|||||||
|
|
||||||
updated(changedProps) {
|
updated(changedProps) {
|
||||||
changedProps.forEach((OldProp, name) => {
|
changedProps.forEach((OldProp, name) => {
|
||||||
if (name === 'timeIso') {
|
if (name === 'timeIso' || name === 'timestamp') {
|
||||||
this.renderTime(this.timestamp)
|
this.renderTime(this.timestamp)
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -35,7 +35,6 @@ class TimeAgo extends LitElement {
|
|||||||
}
|
}
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
|
|
||||||
return html`
|
return html`
|
||||||
<time-ago datetime=${this.timeIso} format=${this.format}> </time-ago>
|
<time-ago datetime=${this.timeIso} format=${this.format}> </time-ago>
|
||||||
`
|
`
|
||||||
|
@ -22,6 +22,8 @@ import '@vaadin/icon'
|
|||||||
import '@vaadin/icons'
|
import '@vaadin/icons'
|
||||||
import '@vaadin/grid'
|
import '@vaadin/grid'
|
||||||
import '@vaadin/grid/vaadin-grid-filter-column.js'
|
import '@vaadin/grid/vaadin-grid-filter-column.js'
|
||||||
|
import '@vaadin/grid/vaadin-grid-sort-column.js'
|
||||||
|
import '@vaadin/text-field'
|
||||||
|
|
||||||
const parentEpml = new Epml({ type: 'WINDOW', source: window.parent })
|
const parentEpml = new Epml({ type: 'WINDOW', source: window.parent })
|
||||||
|
|
||||||
@ -33,6 +35,7 @@ class GroupManagement extends LitElement {
|
|||||||
privateGroups: { type: Array },
|
privateGroups: { type: Array },
|
||||||
joinedGroups: { type: Array },
|
joinedGroups: { type: Array },
|
||||||
groupInvites: { type: Array },
|
groupInvites: { type: Array },
|
||||||
|
filteredItems: { type: Array },
|
||||||
privateGroupSearch: { type: Array },
|
privateGroupSearch: { type: Array },
|
||||||
newMembersList: { type: Array },
|
newMembersList: { type: Array },
|
||||||
newAdminsList: { type: Array },
|
newAdminsList: { type: Array },
|
||||||
@ -111,6 +114,9 @@ class GroupManagement extends LitElement {
|
|||||||
--_lumo-grid-secondary-border-color: var(--border2);
|
--_lumo-grid-secondary-border-color: var(--border2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[part="input-field"] {
|
||||||
|
background-color: #fff;
|
||||||
|
}
|
||||||
#group-management-page {
|
#group-management-page {
|
||||||
background: var(--white);
|
background: var(--white);
|
||||||
padding: 12px 24px;
|
padding: 12px 24px;
|
||||||
@ -437,6 +443,7 @@ class GroupManagement extends LitElement {
|
|||||||
this.privateGroups = []
|
this.privateGroups = []
|
||||||
this.joinedGroups = []
|
this.joinedGroups = []
|
||||||
this.groupInvites = []
|
this.groupInvites = []
|
||||||
|
this.filteredItems = []
|
||||||
this.privateGroupSearch = []
|
this.privateGroupSearch = []
|
||||||
this.newMembersList = []
|
this.newMembersList = []
|
||||||
this.newAdminsList = []
|
this.newAdminsList = []
|
||||||
@ -1314,8 +1321,8 @@ class GroupManagement extends LitElement {
|
|||||||
<h3 style="margin: 0; margin-bottom: 1em; text-align: center;">${translate("grouppage.gchange3")}</h3>
|
<h3 style="margin: 0; margin-bottom: 1em; text-align: center;">${translate("grouppage.gchange3")}</h3>
|
||||||
<vaadin-grid theme="large" id="joinedGroupsGrid" ?hidden="${this.isEmptyArray(this.joinedGroups)}" .items="${this.joinedGroups}" aria-label="Joined Groups" all-rows-visible>
|
<vaadin-grid theme="large" id="joinedGroupsGrid" ?hidden="${this.isEmptyArray(this.joinedGroups)}" .items="${this.joinedGroups}" aria-label="Joined Groups" all-rows-visible>
|
||||||
<vaadin-grid-column width="8rem" flex-grow="0" header="${translate("grouppage.gchange54")}" path="memberCount"></vaadin-grid-column>
|
<vaadin-grid-column width="8rem" flex-grow="0" header="${translate("grouppage.gchange54")}" path="memberCount"></vaadin-grid-column>
|
||||||
<vaadin-grid-filter-column header="${translate("grouppage.gchange4")}" path="groupName"></vaadin-grid-filter-column>
|
<vaadin-grid-column header="${translate("grouppage.gchange4")}" path="groupName"></vaadin-grid-column>
|
||||||
<vaadin-grid-filter-column header="${translate("grouppage.gchange5")}" path="description"></vaadin-grid-filter-column>
|
<vaadin-grid-column header="${translate("grouppage.gchange5")}" path="description"></vaadin-grid-column>
|
||||||
<vaadin-grid-column width="11rem" flex-grow="0" header="${translate("grouppage.gchange6")}" .renderer=${(root, column, data) => {
|
<vaadin-grid-column width="11rem" flex-grow="0" header="${translate("grouppage.gchange6")}" .renderer=${(root, column, data) => {
|
||||||
render(html`${this.renderRole(data.item)}`, root)
|
render(html`${this.renderRole(data.item)}`, root)
|
||||||
}}></vaadin-grid-column>
|
}}></vaadin-grid-column>
|
||||||
@ -1359,11 +1366,25 @@ class GroupManagement extends LitElement {
|
|||||||
|
|
||||||
<div class="divCard">
|
<div class="divCard">
|
||||||
<h3 style="margin: 0; margin-bottom: 1em; text-align: center;">${translate("grouppage.gchange9")}</h3>
|
<h3 style="margin: 0; margin-bottom: 1em; text-align: center;">${translate("grouppage.gchange9")}</h3>
|
||||||
<vaadin-grid theme="large" id="publicGroupsGrid" ?hidden="${this.isEmptyArray(this.publicGroups)}" .items="${this.publicGroups}" aria-label="Public Open Groups" all-rows-visible>
|
<vaadin-text-field
|
||||||
<vaadin-grid-column width="8rem" flex-grow="0" header="${translate("grouppage.gchange54")}" path="memberCount"></vaadin-grid-column>
|
placeholder="${translate("datapage.dchange4")}"
|
||||||
<vaadin-grid-filter-column header="${translate("grouppage.gchange4")}" path="groupName"></vaadin-grid-filter-column>
|
style="width: 25%; margin-bottom: 20px;"
|
||||||
<vaadin-grid-filter-column header="${translate("grouppage.gchange5")}" path="description"></vaadin-grid-filter-column>
|
clear-button-visible
|
||||||
<vaadin-grid-filter-column header="${translate("grouppage.gchange10")}" path="owner"></vaadin-grid-filter-column>
|
@value-changed="${(e) => {
|
||||||
|
this.filteredItems = []
|
||||||
|
const searchTerm = (e.target.value || '').trim()
|
||||||
|
const keys = ['groupName', 'description', 'owner']
|
||||||
|
const filtered = this.publicGroups.filter((search) => keys.some((key) => search[key].toLowerCase().includes(searchTerm.toLowerCase())))
|
||||||
|
this.filteredItems = filtered
|
||||||
|
}}"
|
||||||
|
>
|
||||||
|
<vaadin-icon slot="prefix" icon="vaadin:search"></vaadin-icon>
|
||||||
|
</vaadin-text-field><br>
|
||||||
|
<vaadin-grid theme="large" id="publicGroupsGrid" .items="${this.filteredItems}" aria-label="Public Open Groups" all-rows-visible>
|
||||||
|
<vaadin-grid-sort-column width="8rem" flex-grow="0" header="${translate("grouppage.gchange54")}" path="memberCount"></vaadin-grid-sort-column>
|
||||||
|
<vaadin-grid-column header="${translate("grouppage.gchange4")}" path="groupName"></vaadin-grid-column>
|
||||||
|
<vaadin-grid-column header="${translate("grouppage.gchange5")}" path="description"></vaadin-grid-column>
|
||||||
|
<vaadin-grid-column header="${translate("grouppage.gchange10")}" path="owner"></vaadin-grid-column>
|
||||||
<vaadin-grid-column width="11rem" flex-grow="0" header="${translate("grouppage.gchange7")}" .renderer=${(root, column, data) => {
|
<vaadin-grid-column width="11rem" flex-grow="0" header="${translate("grouppage.gchange7")}" .renderer=${(root, column, data) => {
|
||||||
render(html`<mwc-button @click=${() => this.joinGroup(data.item)}><mwc-icon>queue</mwc-icon> ${translate("grouppage.gchange51")}</mwc-button>`, root)
|
render(html`<mwc-button @click=${() => this.joinGroup(data.item)}><mwc-icon>queue</mwc-icon> ${translate("grouppage.gchange51")}</mwc-button>`, root)
|
||||||
}}></vaadin-grid-column>
|
}}></vaadin-grid-column>
|
||||||
@ -1773,7 +1794,8 @@ class GroupManagement extends LitElement {
|
|||||||
this.publicGroups = results
|
this.publicGroups = results
|
||||||
this.privateGroups = _privateGroups
|
this.privateGroups = _privateGroups
|
||||||
this.joinedGroups = _joinedGroups
|
this.joinedGroups = _joinedGroups
|
||||||
setTimeout(getOpen_JoinedGroups, 60000)
|
this.filteredItems = this.publicGroups
|
||||||
|
setTimeout(getOpen_JoinedGroups, 600000)
|
||||||
}
|
}
|
||||||
|
|
||||||
window.addEventListener("contextmenu", (event) => {
|
window.addEventListener("contextmenu", (event) => {
|
||||||
|
@ -8,6 +8,7 @@ import { Epml } from '../../../../epml.js';
|
|||||||
import { use, get, translate, translateUnsafeHTML, registerTranslateConfig } from 'lit-translate';
|
import { use, get, translate, translateUnsafeHTML, registerTranslateConfig } from 'lit-translate';
|
||||||
import { qchatStyles } from './q-chat-css.src.js'
|
import { qchatStyles } from './q-chat-css.src.js'
|
||||||
import WebWorker from 'web-worker:./computePowWorker.src.js';
|
import WebWorker from 'web-worker:./computePowWorker.src.js';
|
||||||
|
import {repeat} from 'lit/directives/repeat.js';
|
||||||
|
|
||||||
registerTranslateConfig({
|
registerTranslateConfig({
|
||||||
loader: lang => fetch(`/language/${lang}.json`).then(res => res.json())
|
loader: lang => fetch(`/language/${lang}.json`).then(res => res.json())
|
||||||
@ -28,8 +29,9 @@ import '@vaadin/grid'
|
|||||||
import StarterKit from '@tiptap/starter-kit'
|
import StarterKit from '@tiptap/starter-kit'
|
||||||
import Underline from '@tiptap/extension-underline';
|
import Underline from '@tiptap/extension-underline';
|
||||||
import Placeholder from '@tiptap/extension-placeholder'
|
import Placeholder from '@tiptap/extension-placeholder'
|
||||||
import { Editor, Extension } from '@tiptap/core'
|
import Highlight from '@tiptap/extension-highlight'
|
||||||
|
|
||||||
|
import { Editor, Extension } from '@tiptap/core'
|
||||||
const parentEpml = new Epml({ type: 'WINDOW', source: window.parent })
|
const parentEpml = new Epml({ type: 'WINDOW', source: window.parent })
|
||||||
|
|
||||||
class Chat extends LitElement {
|
class Chat extends LitElement {
|
||||||
@ -55,7 +57,7 @@ class Chat extends LitElement {
|
|||||||
userFoundModalOpen: { type: Boolean },
|
userFoundModalOpen: { type: Boolean },
|
||||||
userSelected: { type: Object },
|
userSelected: { type: Object },
|
||||||
editor: {type: Object},
|
editor: {type: Object},
|
||||||
groupInvites: { type: Array }
|
groupInvites: { type: Array },
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -118,6 +120,7 @@ class Chat extends LitElement {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async connectedCallback() {
|
async connectedCallback() {
|
||||||
|
|
||||||
super.connectedCallback();
|
super.connectedCallback();
|
||||||
await this.getUpdateCompleteTextEditor();
|
await this.getUpdateCompleteTextEditor();
|
||||||
|
|
||||||
@ -148,14 +151,35 @@ class Chat extends LitElement {
|
|||||||
]
|
]
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
|
this.unsubscribeStore = window.parent.reduxStore.subscribe(() => {
|
||||||
|
try {
|
||||||
|
|
||||||
|
if(window.parent.location && window.parent.location.search){
|
||||||
|
const queryString = window.parent.location.search;
|
||||||
|
const params = new URLSearchParams(queryString);
|
||||||
|
const chat = params.get("chat")
|
||||||
|
if(chat && chat !== this.activeChatHeadUrl){
|
||||||
|
let url = window.parent.location.href;
|
||||||
|
let newUrl = url.split("?")[0];
|
||||||
|
window.parent.history.pushState({}, "", newUrl);
|
||||||
|
this.setActiveChatHeadUrl(chat)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
console.error(error)
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
disconnectedCallback() {
|
disconnectedCallback() {
|
||||||
super.disconnectedCallback();
|
super.disconnectedCallback();
|
||||||
this.editor.destroy()
|
this.editor.destroy();
|
||||||
|
this.unsubscribeStore();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
updatePlaceholder(editor, text){
|
updatePlaceholder(editor, text){
|
||||||
editor.extensionManager.extensions.forEach((extension) => {
|
editor.extensionManager.extensions.forEach((extension) => {
|
||||||
if (extension.name === "placeholder") {
|
if (extension.name === "placeholder") {
|
||||||
@ -215,7 +239,7 @@ class Chat extends LitElement {
|
|||||||
</div>
|
</div>
|
||||||
<div class="chat-history">
|
<div class="chat-history">
|
||||||
|
|
||||||
${window.parent.location.pathname !== "/app/q-chat" || this.activeChatHeadUrl ? html`${this.renderChatPage(this.chatId)}` : html`${this.renderChatWelcomePage()}`}
|
${this.activeChatHeadUrl ? html`${this.renderChatPage()}` : html`${this.renderChatWelcomePage()}`}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<!-- Start Chatting Dialog -->
|
<!-- Start Chatting Dialog -->
|
||||||
@ -367,6 +391,8 @@ class Chat extends LitElement {
|
|||||||
`
|
`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
async firstUpdated() {
|
async firstUpdated() {
|
||||||
this.changeLanguage();
|
this.changeLanguage();
|
||||||
this.changeTheme();
|
this.changeTheme();
|
||||||
@ -482,8 +508,11 @@ class Chat extends LitElement {
|
|||||||
})
|
})
|
||||||
})
|
})
|
||||||
parentEpml.imReady()
|
parentEpml.imReady()
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
setOpenPrivateMessage(props) {
|
setOpenPrivateMessage(props) {
|
||||||
this.openPrivateMessage = props.open;
|
this.openPrivateMessage = props.open;
|
||||||
this.shadowRoot.getElementById("sendTo").value = props.name
|
this.shadowRoot.getElementById("sendTo").value = props.name
|
||||||
@ -830,16 +859,13 @@ class Chat extends LitElement {
|
|||||||
|
|
||||||
renderChatHead(chatHeadArr) {
|
renderChatHead(chatHeadArr) {
|
||||||
|
|
||||||
let tempUrl = document.location.href
|
|
||||||
let splitedUrl = decodeURI(tempUrl).split('?')
|
|
||||||
// let activeChatHeadUrl = splitedUrl[1] === undefined ? '' : splitedUrl[1]
|
|
||||||
|
|
||||||
return chatHeadArr.map(eachChatHead => {
|
return chatHeadArr.map(eachChatHead => {
|
||||||
return html`<chat-head activeChatHeadUrl=${this.activeChatHeadUrl} .setActiveChatHeadUrl=${(val)=> this.setActiveChatHeadUrl(val)} chatInfo=${JSON.stringify(eachChatHead)}></chat-head>`
|
return html`<chat-head activeChatHeadUrl=${this.activeChatHeadUrl} .setActiveChatHeadUrl=${(val)=> this.setActiveChatHeadUrl(val)} chatInfo=${JSON.stringify(eachChatHead)}></chat-head>`
|
||||||
})
|
})
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
renderChatPage(chatId) {
|
renderChatPage() {
|
||||||
|
|
||||||
// Check for the chat ID from and render chat messages
|
// Check for the chat ID from and render chat messages
|
||||||
// Else render Welcome to Q-CHat
|
// Else render Welcome to Q-CHat
|
||||||
@ -861,7 +887,7 @@ class Chat extends LitElement {
|
|||||||
setChatHeads(chatObj) {
|
setChatHeads(chatObj) {
|
||||||
const chatObjGroups = Array.isArray(chatObj.groups) ? chatObj.groups : [];
|
const chatObjGroups = Array.isArray(chatObj.groups) ? chatObj.groups : [];
|
||||||
const chatObjDirect = Array.isArray(chatObj.direct) ? chatObj.direct : [];
|
const chatObjDirect = Array.isArray(chatObj.direct) ? chatObj.direct : [];
|
||||||
let groupList = chatObjGroups.map(group => group.groupId === 0 ? { groupId: group.groupId, url: `group/${group.groupId}`, groupName: "Qortal General Chat", timestamp: group.timestamp === undefined ? 2 : group.timestamp } : { ...group, timestamp: group.timestamp === undefined ? 1 : group.timestamp, url: `group/${group.groupId}` })
|
let groupList = chatObjGroups.map(group => group.groupId === 0 ? { groupId: group.groupId, url: `group/${group.groupId}`, groupName: "Qortal General Chat", timestamp: group.timestamp === undefined ? 2 : group.timestamp, sender: group.sender } : { ...group, timestamp: group.timestamp === undefined ? 1 : group.timestamp, url: `group/${group.groupId}` })
|
||||||
let directList = chatObjDirect.map(dc => {
|
let directList = chatObjDirect.map(dc => {
|
||||||
return { ...dc, url: `direct/${dc.address}` }
|
return { ...dc, url: `direct/${dc.address}` }
|
||||||
})
|
})
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -62,6 +62,7 @@ class MultiWallet extends LitElement {
|
|||||||
arrrMemo: { type: String },
|
arrrMemo: { type: String },
|
||||||
errorMessage: { type: String },
|
errorMessage: { type: String },
|
||||||
arrrWalletAddress: { type: String },
|
arrrWalletAddress: { type: String },
|
||||||
|
unusedWalletAddress: { type: String },
|
||||||
successMessage: { type: String },
|
successMessage: { type: String },
|
||||||
sendMoneyLoading: { type: Boolean },
|
sendMoneyLoading: { type: Boolean },
|
||||||
btnDisable: { type: Boolean },
|
btnDisable: { type: Boolean },
|
||||||
@ -505,6 +506,13 @@ class MultiWallet extends LitElement {
|
|||||||
position: relative;
|
position: relative;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.unused-address-dialog {
|
||||||
|
min-height: 150px;
|
||||||
|
min-width: 550px;
|
||||||
|
box-sizing: border-box;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
.btn-clear-success {
|
.btn-clear-success {
|
||||||
--mdc-icon-button-size: 32px;
|
--mdc-icon-button-size: 32px;
|
||||||
color: red;
|
color: red;
|
||||||
@ -561,6 +569,12 @@ class MultiWallet extends LitElement {
|
|||||||
width: 185px;
|
width: 185px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.unused-pos {
|
||||||
|
margin-top: -44px;
|
||||||
|
margin-left: 410px;
|
||||||
|
width: 185px;
|
||||||
|
}
|
||||||
|
|
||||||
@media (max-width: 863px) {
|
@media (max-width: 863px) {
|
||||||
.wallet {
|
.wallet {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
@ -673,6 +687,7 @@ class MultiWallet extends LitElement {
|
|||||||
this.arrrRecipient = ''
|
this.arrrRecipient = ''
|
||||||
this.arrrMemo = ''
|
this.arrrMemo = ''
|
||||||
this.arrrWalletAddress = ''
|
this.arrrWalletAddress = ''
|
||||||
|
this.unusedWalletAddress = ''
|
||||||
this.errorMessage = ''
|
this.errorMessage = ''
|
||||||
this.successMessage = ''
|
this.successMessage = ''
|
||||||
this.myElementId = ''
|
this.myElementId = ''
|
||||||
@ -822,6 +837,9 @@ class MultiWallet extends LitElement {
|
|||||||
<div class="book-pos" ?hidden="${this.getSelectedWalletAddress().length < 1}">
|
<div class="book-pos" ?hidden="${this.getSelectedWalletAddress().length < 1}">
|
||||||
${this.renderAddressbookButton()}
|
${this.renderAddressbookButton()}
|
||||||
</div>
|
</div>
|
||||||
|
<div class="unused-pos" ?hidden="${this.getSelectedWalletAddress().length < 1}">
|
||||||
|
${this.renderUnusedAddressButton()}
|
||||||
|
</div>
|
||||||
<div class="qrcode-pos" ?hidden="${this.getSelectedWalletAddress().length < 1}">
|
<div class="qrcode-pos" ?hidden="${this.getSelectedWalletAddress().length < 1}">
|
||||||
<qortal-qrcode-generator data="${this.getSelectedWalletAddress()}" mode="octet" format="html" auto></qortal-qrcode-generator>
|
<qortal-qrcode-generator data="${this.getSelectedWalletAddress()}" mode="octet" format="html" auto></qortal-qrcode-generator>
|
||||||
</div>
|
</div>
|
||||||
@ -1968,6 +1986,171 @@ class MultiWallet extends LitElement {
|
|||||||
</mwc-button>
|
</mwc-button>
|
||||||
</mwc-dialog>
|
</mwc-dialog>
|
||||||
|
|
||||||
|
<mwc-dialog id="btcUnusedAddressDialog" scrimClickAction="" escapeKeyAction="">
|
||||||
|
<div class="unused-address-dialog">
|
||||||
|
<div style="text-align: center;">
|
||||||
|
<img src="/img/btc.png" width="32" height="32">
|
||||||
|
<h2>BTC</h2>
|
||||||
|
<hr />
|
||||||
|
</div>
|
||||||
|
<p>
|
||||||
|
<span style="font-weight: bold;">${this.wallets.get(this._selectedWallet).unusedWalletAddress}</span>
|
||||||
|
<button-icon-copy
|
||||||
|
title="${translate("walletpage.wchange3")}"
|
||||||
|
onSuccessMessage="${translate("walletpage.wchange4")}"
|
||||||
|
onErrorMessage="${translate("walletpage.wchange39")}"
|
||||||
|
textToCopy=${this.wallets.get(this._selectedWallet).unusedWalletAddress}
|
||||||
|
buttonSize="24px"
|
||||||
|
iconSize="16px"
|
||||||
|
color="var(--copybutton)"
|
||||||
|
offsetLeft="4px"
|
||||||
|
>
|
||||||
|
</button-icon-copy>
|
||||||
|
<br />
|
||||||
|
<span>${translate("walletpage.wchange38")}</span>
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
<mwc-button
|
||||||
|
slot="primaryAction"
|
||||||
|
dialogAction="cancel"
|
||||||
|
class="red"
|
||||||
|
>
|
||||||
|
${translate("general.close")}
|
||||||
|
</mwc-button>
|
||||||
|
</mwc-dialog>
|
||||||
|
|
||||||
|
<mwc-dialog id="ltcUnusedAddressDialog" scrimClickAction="" escapeKeyAction="">
|
||||||
|
<div class="unused-address-dialog">
|
||||||
|
<div style="text-align: center;">
|
||||||
|
<img src="/img/ltc.png" width="32" height="32">
|
||||||
|
<h2>LTC</h2>
|
||||||
|
<hr />
|
||||||
|
</div>
|
||||||
|
<p>
|
||||||
|
<span style="font-weight: bold;">${this.wallets.get(this._selectedWallet).unusedWalletAddress}</span>
|
||||||
|
<button-icon-copy
|
||||||
|
title="${translate("walletpage.wchange3")}"
|
||||||
|
onSuccessMessage="${translate("walletpage.wchange4")}"
|
||||||
|
onErrorMessage="${translate("walletpage.wchange39")}"
|
||||||
|
textToCopy=${this.wallets.get(this._selectedWallet).unusedWalletAddress}
|
||||||
|
buttonSize="24px"
|
||||||
|
iconSize="16px"
|
||||||
|
color="var(--copybutton)"
|
||||||
|
offsetLeft="4px"
|
||||||
|
>
|
||||||
|
</button-icon-copy>
|
||||||
|
<br />
|
||||||
|
<span>${translate("walletpage.wchange38")}</span>
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
<mwc-button
|
||||||
|
slot="primaryAction"
|
||||||
|
dialogAction="cancel"
|
||||||
|
class="red"
|
||||||
|
>
|
||||||
|
${translate("general.close")}
|
||||||
|
</mwc-button>
|
||||||
|
</mwc-dialog>
|
||||||
|
|
||||||
|
<mwc-dialog id="dogeUnusedAddressDialog" scrimClickAction="" escapeKeyAction="">
|
||||||
|
<div class="unused-address-dialog">
|
||||||
|
<div style="text-align: center;">
|
||||||
|
<img src="/img/doge.png" width="32" height="32">
|
||||||
|
<h2>DOGE</h2>
|
||||||
|
<hr />
|
||||||
|
</div>
|
||||||
|
<p>
|
||||||
|
<span style="font-weight: bold;">${this.wallets.get(this._selectedWallet).unusedWalletAddress}</span>
|
||||||
|
<button-icon-copy
|
||||||
|
title="${translate("walletpage.wchange3")}"
|
||||||
|
onSuccessMessage="${translate("walletpage.wchange4")}"
|
||||||
|
onErrorMessage="${translate("walletpage.wchange39")}"
|
||||||
|
textToCopy=${this.wallets.get(this._selectedWallet).unusedWalletAddress}
|
||||||
|
buttonSize="24px"
|
||||||
|
iconSize="16px"
|
||||||
|
color="var(--copybutton)"
|
||||||
|
offsetLeft="4px"
|
||||||
|
>
|
||||||
|
</button-icon-copy>
|
||||||
|
<br />
|
||||||
|
<span>${translate("walletpage.wchange38")}</span>
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
<mwc-button
|
||||||
|
slot="primaryAction"
|
||||||
|
dialogAction="cancel"
|
||||||
|
class="red"
|
||||||
|
>
|
||||||
|
${translate("general.close")}
|
||||||
|
</mwc-button>
|
||||||
|
</mwc-dialog>
|
||||||
|
|
||||||
|
<mwc-dialog id="dgbUnusedAddressDialog" scrimClickAction="" escapeKeyAction="">
|
||||||
|
<div class="unused-address-dialog">
|
||||||
|
<div style="text-align: center;">
|
||||||
|
<img src="/img/dgb.png" width="32" height="32">
|
||||||
|
<h2>DGB</h2>
|
||||||
|
<hr />
|
||||||
|
</div>
|
||||||
|
<p>
|
||||||
|
<span style="font-weight: bold;">${this.wallets.get(this._selectedWallet).unusedWalletAddress}</span>
|
||||||
|
<button-icon-copy
|
||||||
|
title="${translate("walletpage.wchange3")}"
|
||||||
|
onSuccessMessage="${translate("walletpage.wchange4")}"
|
||||||
|
onErrorMessage="${translate("walletpage.wchange39")}"
|
||||||
|
textToCopy=${this.wallets.get(this._selectedWallet).unusedWalletAddress}
|
||||||
|
buttonSize="24px"
|
||||||
|
iconSize="16px"
|
||||||
|
color="var(--copybutton)"
|
||||||
|
offsetLeft="4px"
|
||||||
|
>
|
||||||
|
</button-icon-copy>
|
||||||
|
<br />
|
||||||
|
<span>${translate("walletpage.wchange38")}</span>
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
<mwc-button
|
||||||
|
slot="primaryAction"
|
||||||
|
dialogAction="cancel"
|
||||||
|
class="red"
|
||||||
|
>
|
||||||
|
${translate("general.close")}
|
||||||
|
</mwc-button>
|
||||||
|
</mwc-dialog>
|
||||||
|
|
||||||
|
<mwc-dialog id="rvnUnusedAddressDialog" scrimClickAction="" escapeKeyAction="">
|
||||||
|
<div class="unused-address-dialog">
|
||||||
|
<div style="text-align: center;">
|
||||||
|
<img src="/img/rvn.png" width="32" height="32">
|
||||||
|
<h2>RVN</h2>
|
||||||
|
<hr />
|
||||||
|
</div>
|
||||||
|
<p>
|
||||||
|
<span style="font-weight: bold;">${this.wallets.get(this._selectedWallet).unusedWalletAddress}</span>
|
||||||
|
<button-icon-copy
|
||||||
|
title="${translate("walletpage.wchange3")}"
|
||||||
|
onSuccessMessage="${translate("walletpage.wchange4")}"
|
||||||
|
onErrorMessage="${translate("walletpage.wchange39")}"
|
||||||
|
textToCopy=${this.wallets.get(this._selectedWallet).unusedWalletAddress}
|
||||||
|
buttonSize="24px"
|
||||||
|
iconSize="16px"
|
||||||
|
color="var(--copybutton)"
|
||||||
|
offsetLeft="4px"
|
||||||
|
>
|
||||||
|
</button-icon-copy>
|
||||||
|
<br />
|
||||||
|
<span>${translate("walletpage.wchange38")}</span>
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
<mwc-button
|
||||||
|
slot="primaryAction"
|
||||||
|
dialogAction="cancel"
|
||||||
|
class="red"
|
||||||
|
>
|
||||||
|
${translate("general.close")}
|
||||||
|
</mwc-button>
|
||||||
|
</mwc-dialog>
|
||||||
|
|
||||||
<mwc-dialog id="addQortAddressDialog" scrimClickAction="" escapeKeyAction="">
|
<mwc-dialog id="addQortAddressDialog" scrimClickAction="" escapeKeyAction="">
|
||||||
<div style="text-align:center">
|
<div style="text-align:center">
|
||||||
<img src="/img/qort.png" width="32" height="32">
|
<img src="/img/qort.png" width="32" height="32">
|
||||||
@ -4503,10 +4686,10 @@ class MultiWallet extends LitElement {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
const txsQort = await parentEpml.request('apiCall', {
|
const txsQort = await parentEpml.request('apiCall', {
|
||||||
url: `/transactions/search?address=${this.wallets.get('qort').wallet.address}&confirmationStatus=CONFIRMED&reverse=true&txType=PAYMENT&txType=REGISTER_NAME&txType=UPDATE_NAME&txType=SELL_NAME&txType=CANCEL_SELL_NAME&txType=BUY_NAME&txType=CREATE_POLL&txType=VOTE_ON_POLL&txType=ISSUE_ASSET&txType=TRANSFER_ASSET&txType=CREATE_ASSET_ORDER&txType=CANCEL_ASSET_ORDER&txType=MULTI_PAYMENT&txType=DEPLOY_AT&txType=MESSAGE&txType=PUBLICIZE&txType=AIRDROP&txType=AT&txType=CREATE_GROUP&txType=UPDATE_GROUP&txType=ADD_GROUP_ADMIN&txType=REMOVE_GROUP_ADMIN&txType=GROUP_BAN&txType=CANCEL_GROUP_BAN&txType=GROUP_KICK&txType=GROUP_INVITE&txType=CANCEL_GROUP_INVITE&txType=JOIN_GROUP&txType=LEAVE_GROUP&txType=GROUP_APPROVAL&txType=SET_GROUP&txType=UPDATE_ASSET&txType=ACCOUNT_FLAGS&txType=ENABLE_FORGING&txType=REWARD_SHARE&txType=ACCOUNT_LEVEL&txType=TRANSFER_PRIVS&txType=PRESENCE`,
|
url: `/transactions/search?address=${this.wallets.get('qort').wallet.address}&confirmationStatus=CONFIRMED&reverse=true&txType=PAYMENT&txType=REGISTER_NAME&txType=UPDATE_NAME&txType=SELL_NAME&txType=CANCEL_SELL_NAME&txType=BUY_NAME&txType=CREATE_POLL&txType=VOTE_ON_POLL&txType=ISSUE_ASSET&txType=TRANSFER_ASSET&txType=CREATE_ASSET_ORDER&txType=CANCEL_ASSET_ORDER&txType=MULTI_PAYMENT&txType=DEPLOY_AT&txType=MESSAGE&txType=AIRDROP&txType=AT&txType=CREATE_GROUP&txType=UPDATE_GROUP&txType=ADD_GROUP_ADMIN&txType=REMOVE_GROUP_ADMIN&txType=GROUP_BAN&txType=CANCEL_GROUP_BAN&txType=GROUP_KICK&txType=GROUP_INVITE&txType=CANCEL_GROUP_INVITE&txType=JOIN_GROUP&txType=LEAVE_GROUP&txType=GROUP_APPROVAL&txType=SET_GROUP&txType=UPDATE_ASSET&txType=ACCOUNT_FLAGS&txType=ENABLE_FORGING&txType=REWARD_SHARE&txType=ACCOUNT_LEVEL&txType=TRANSFER_PRIVS&txType=PRESENCE`,
|
||||||
})
|
})
|
||||||
const pendingTxsQort = await parentEpml.request('apiCall', {
|
const pendingTxsQort = await parentEpml.request('apiCall', {
|
||||||
url: `/transactions/unconfirmed?creator=${this.wallets.get('qort').wallet.base58PublicKey}&reverse=true&txType=PAYMENT&txType=REGISTER_NAME&txType=UPDATE_NAME&txType=SELL_NAME&txType=CANCEL_SELL_NAME&txType=BUY_NAME&txType=CREATE_POLL&txType=VOTE_ON_POLL&txType=ISSUE_ASSET&txType=TRANSFER_ASSET&txType=CREATE_ASSET_ORDER&txType=CANCEL_ASSET_ORDER&txType=MULTI_PAYMENT&txType=DEPLOY_AT&txType=MESSAGE&txType=PUBLICIZE&txType=AIRDROP&txType=AT&txType=CREATE_GROUP&txType=UPDATE_GROUP&txType=ADD_GROUP_ADMIN&txType=REMOVE_GROUP_ADMIN&txType=GROUP_BAN&txType=CANCEL_GROUP_BAN&txType=GROUP_KICK&txType=GROUP_INVITE&txType=CANCEL_GROUP_INVITE&txType=JOIN_GROUP&txType=LEAVE_GROUP&txType=GROUP_APPROVAL&txType=SET_GROUP&txType=UPDATE_ASSET&txType=ACCOUNT_FLAGS&txType=ENABLE_FORGING&txType=REWARD_SHARE&txType=ACCOUNT_LEVEL&txType=TRANSFER_PRIVS&txType=PRESENCE`,
|
url: `/transactions/unconfirmed?creator=${this.wallets.get('qort').wallet.base58PublicKey}&reverse=true&txType=PAYMENT&txType=REGISTER_NAME&txType=UPDATE_NAME&txType=SELL_NAME&txType=CANCEL_SELL_NAME&txType=BUY_NAME&txType=CREATE_POLL&txType=VOTE_ON_POLL&txType=ISSUE_ASSET&txType=TRANSFER_ASSET&txType=CREATE_ASSET_ORDER&txType=CANCEL_ASSET_ORDER&txType=MULTI_PAYMENT&txType=DEPLOY_AT&txType=MESSAGE&txType=AIRDROP&txType=AT&txType=CREATE_GROUP&txType=UPDATE_GROUP&txType=ADD_GROUP_ADMIN&txType=REMOVE_GROUP_ADMIN&txType=GROUP_BAN&txType=CANCEL_GROUP_BAN&txType=GROUP_KICK&txType=GROUP_INVITE&txType=CANCEL_GROUP_INVITE&txType=JOIN_GROUP&txType=LEAVE_GROUP&txType=GROUP_APPROVAL&txType=SET_GROUP&txType=UPDATE_ASSET&txType=ACCOUNT_FLAGS&txType=ENABLE_FORGING&txType=REWARD_SHARE&txType=ACCOUNT_LEVEL&txType=TRANSFER_PRIVS&txType=PRESENCE`,
|
||||||
})
|
})
|
||||||
if (this._selectedWallet == coin) {
|
if (this._selectedWallet == coin) {
|
||||||
this.wallets.get(coin).transactions = pendingTxsQort.concat(txsQort)
|
this.wallets.get(coin).transactions = pendingTxsQort.concat(txsQort)
|
||||||
@ -4638,6 +4821,70 @@ class MultiWallet extends LitElement {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async getUnusedAddress(coin) {
|
||||||
|
this.wallets.get(this._selectedWallet).unusedWalletAddress = ''
|
||||||
|
let _url = ``
|
||||||
|
let _body = null
|
||||||
|
|
||||||
|
switch (coin) {
|
||||||
|
case 'qort':
|
||||||
|
case 'arrr':
|
||||||
|
_url = ``
|
||||||
|
_body = null
|
||||||
|
break
|
||||||
|
case 'btc':
|
||||||
|
case 'ltc':
|
||||||
|
case 'doge':
|
||||||
|
case 'dgb':
|
||||||
|
case 'rvn':
|
||||||
|
const walletName = `${coin}Wallet`
|
||||||
|
_url = `/crosschain/${coin}/unusedaddress?apiKey=${this.getApiKey()}`
|
||||||
|
_body = `${window.parent.reduxStore.getState().app.selectedAddress[walletName].derivedMasterPublicKey}`
|
||||||
|
break
|
||||||
|
default:
|
||||||
|
break
|
||||||
|
}
|
||||||
|
|
||||||
|
if (_body === null) {
|
||||||
|
this.unusedAddressString = ""
|
||||||
|
} else {
|
||||||
|
await parentEpml.request('apiCall', {
|
||||||
|
url: _url,
|
||||||
|
method: 'POST',
|
||||||
|
body: _body,
|
||||||
|
}).then((res) => {
|
||||||
|
this.wallets.get(this._selectedWallet).unusedWalletAddress = res
|
||||||
|
this.unusedAddressString = this.wallets.get(this._selectedWallet).unusedWalletAddress
|
||||||
|
this.openUnusedAddressDialog(coin)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
openUnusedAddressDialog(coin) {
|
||||||
|
switch (coin) {
|
||||||
|
case 'qort':
|
||||||
|
case 'arrr':
|
||||||
|
break
|
||||||
|
case 'btc':
|
||||||
|
this.shadowRoot.querySelector("#btcUnusedAddressDialog").show();
|
||||||
|
break
|
||||||
|
case 'ltc':
|
||||||
|
this.shadowRoot.querySelector("#ltcUnusedAddressDialog").show();
|
||||||
|
break
|
||||||
|
case 'doge':
|
||||||
|
this.shadowRoot.querySelector("#dogeUnusedAddressDialog").show();
|
||||||
|
break
|
||||||
|
case 'dgb':
|
||||||
|
this.shadowRoot.querySelector("#dgbUnusedAddressDialog").show();
|
||||||
|
break
|
||||||
|
case 'rvn':
|
||||||
|
this.shadowRoot.querySelector("#rvnUnusedAddressDialog").show();
|
||||||
|
break
|
||||||
|
default:
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
renderSendButton() {
|
renderSendButton() {
|
||||||
if ( this._selectedWallet === "qort" ) {
|
if ( this._selectedWallet === "qort" ) {
|
||||||
return html`<vaadin-button theme="primary medium" style="width: 100%;" @click=${() => this.openSendQort()}><vaadin-icon icon="vaadin:coin-piles" slot="prefix"></vaadin-icon> ${translate("walletpage.wchange17")} QORT</vaadin-button>`
|
return html`<vaadin-button theme="primary medium" style="width: 100%;" @click=${() => this.openSendQort()}><vaadin-icon icon="vaadin:coin-piles" slot="prefix"></vaadin-icon> ${translate("walletpage.wchange17")} QORT</vaadin-button>`
|
||||||
@ -4678,6 +4925,22 @@ class MultiWallet extends LitElement {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
renderUnusedAddressButton() {
|
||||||
|
switch (this._selectedWallet) {
|
||||||
|
case "qort":
|
||||||
|
case "arrr":
|
||||||
|
return html`<vaadin-button disabled theme="primary medium" style="width: 100%;" @click=${() => this.getUnusedAddress(this._selectedWallet)}><vaadin-icon icon="vaadin:magic" slot="prefix"></vaadin-icon> ${translate("walletpage.wchange58")}</vaadin-button>`
|
||||||
|
case "btc":
|
||||||
|
case "ltc":
|
||||||
|
case "doge":
|
||||||
|
case "dgb":
|
||||||
|
case "rvn":
|
||||||
|
return html`<vaadin-button theme="primary medium" style="width: 100%;" @click=${() => this.getUnusedAddress(this._selectedWallet)}><vaadin-icon icon="vaadin:magic" slot="prefix"></vaadin-icon> ${translate("walletpage.wchange58")}</vaadin-button>`
|
||||||
|
default:
|
||||||
|
return html``
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
renderExportAddressbookButton() {
|
renderExportAddressbookButton() {
|
||||||
if ( this._selectedWallet === "qort" ) {
|
if ( this._selectedWallet === "qort" ) {
|
||||||
return html`<vaadin-button theme="primary small" style="width: 100%;" @click=${() => this.exportQortAddressbook()}><vaadin-icon icon="vaadin:cloud-download" slot="prefix"></vaadin-icon> ${translate("walletpage.wchange54")}</vaadin-button>`
|
return html`<vaadin-button theme="primary small" style="width: 100%;" @click=${() => this.exportQortAddressbook()}><vaadin-icon icon="vaadin:cloud-download" slot="prefix"></vaadin-icon> ${translate("walletpage.wchange54")}</vaadin-button>`
|
||||||
|
4
qortal-ui-plugins/plugins/utils/roundToNearestDecimal.js
Normal file
4
qortal-ui-plugins/plugins/utils/roundToNearestDecimal.js
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
export function roundToNearestDecimal(num) {
|
||||||
|
const mb = num / 1000000;
|
||||||
|
return Math.round(mb * 10) / 10;
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user