4
1
mirror of https://github.com/Qortal/qortal-ui.git synced 2025-02-11 17:55:51 +00:00

add name menu

This commit is contained in:
AlphaX-Projects 2022-05-03 14:51:09 +02:00
parent fe3991eb16
commit 3762670e31
18 changed files with 715 additions and 816 deletions

View File

@ -434,10 +434,15 @@
"wcchange9": "Senden fehlgeschlagen, bitte erneut versuchen..."
},
"blockpage": {
"bcchange1": "blockieren",
"bcchange1": "Benutzer Blockieren",
"bcchange2": "Dieser Benutzer wurde erfolgreich blockiert!",
"bcchange3": "Beim Blockieren dieses Benutzers ist ein Fehler aufgetreten. Bitte versuche es erneut!",
"bcchange4": "Kein Name registriert"
"bcchange4": "Kein Name registriert",
"bcchange5": "Diesen Benutzer Blockieren",
"bcchange6": "Möchten Sie diesen Benutzer wirklich blockieren?",
"bcchange7": "MENÜ",
"bcchange8": "Adresse Kopieren",
"bcchange9": "Private Nachricht"
},
"grouppage": {
"gchange1": "Qortal-Gruppen",

View File

@ -434,10 +434,15 @@
"wcchange9": "El envío ha fallado, por favor intente de nuevo..."
},
"blockpage": {
"bcchange1": "bloquear",
"bcchange1": "Bloquear Usuario",
"bcchange2": "Se ha bloqueado con éxito a este usuario!",
"bcchange3": "Ha ocurrido un error al intentar bloquear este usuario. Por favor, inténtelo de nuevo!",
"bcchange4": "Nombre no registrado"
"bcchange4": "Nombre no registrado",
"bcchange5": "Bloquear solicitud de usuario",
"bcchange6": "Estás seguro de bloquear a este usuario?",
"bcchange7": "MENÚ",
"bcchange8": "Copiar Dirección",
"bcchange9": "Mensaje Privado"
},
"grouppage": {
"gchange1": "Grupos Qortal",

View File

@ -434,10 +434,15 @@
"wcchange9": "Échec de lenvoi, veuillez réessayer..."
},
"blockpage": {
"bcchange1": "bloquer",
"bcchange1": "Bloquer un Utilisateur",
"bcchange2": "Blocage réussi de cet utilisateur!",
"bcchange3": "Une erreur sest produite lors de la tentative de blocage de cet utilisateur. Veuillez réessayer!",
"bcchange4": "Pas de nom enregistré"
"bcchange4": "Pas de nom enregistré",
"bcchange5": "Bloquer la demande de l'utilisateur",
"bcchange6": "Êtes-vous sûr de bloquer cet utilisateur ?",
"bcchange7": "MENU",
"bcchange8": "Copier l'Adresse",
"bcchange9": "Message Privé"
},
"grouppage": {
"gchange1": "Groupes Qortal",

View File

@ -441,10 +441,15 @@
"wcchange9": "भेजना विफल, कृपया पुन: प्रयास करें..."
},
"blockpage": {
"bcchange1": "ब्लॉक",
"bcchange1": "खंड उपयोगकर्ता",
"bcchange2": "इस उपयोगकर्ता को सफलतापूर्वक अवरुद्ध!",
"bcchange3": "इस उपयोगकर्ता को ब्लॉक करने की कोशिश करते समय त्रुटि हुई कृपया फिर से प्रयास करें!",
"bcchange4": "कोई पंजीकृत नाम नहीं"
"bcchange4": "कोई पंजीकृत नाम नहीं",
"bcchange5": "उपयोगकर्ता अनुरोध को ब्लॉक करें",
"bcchange6": "क्या आप वाकई इस उपयोगकर्ता को ब्लॉक करना चाहते हैं?",
"bcchange7": "मेन्यू",
"bcchange8": "कॉपी पता",
"bcchange9": "निजी संदेश"
},
"grouppage": {
"gchange1": "क्वॉर्टल समूह",

View File

@ -434,10 +434,15 @@
"wcchange9": "Slanje neuspješno, molimo ponovite..."
},
"blockpage": {
"bcchange1": "blokiraj",
"bcchange1": "Blokirati Korisnika",
"bcchange2": "Uspješno blokiran ovaj korisnik",
"bcchange3": "Došlo je do pogreške prilikom pokušaja blokiranja ovog korisnika. Molimo pokušajte ponovno!",
"bcchange4": "Nema registrirano ime"
"bcchange4": "Nema registrirano ime",
"bcchange5": "Blokiraj korisnički zahtjev",
"bcchange6": "Jeste li sigurni da ćete blokirati ovog korisnika?",
"bcchange7": "MENI",
"bcchange8": "Kopiraj Adresu",
"bcchange9": "Privatna Poruka"
},
"grouppage": {
"gchange1": "Qortal Grupe",

File diff suppressed because it is too large Load Diff

View File

@ -434,10 +434,15 @@
"wcchange9": "Invio fallito, riprovare..."
},
"blockpage": {
"bcchange1": "blocco",
"bcchange1": "Blocca Utente",
"bcchange2": "Bloccato con successo questo utente!",
"bcchange3": "Si è verificato un errore durante il tentativo di bloccare questo utente. Per favore, riprova!",
"bcchange4": "Nessun nome registrato"
"bcchange4": "Nessun nome registrato",
"bcchange5": "Blocca richiesta utente",
"bcchange6": "Sei sicuro di bloccare questo utente?",
"bcchange7": "MENÙ",
"bcchange8": "Copia Indirizzo",
"bcchange9": "Messaggio Privato"
},
"grouppage": {
"gchange1": "Gruppi Qortal",

View File

@ -434,10 +434,15 @@
"wcchange9": "Wysyłanie nie powiodło się, spróbuj ponownie..."
},
"blockpage": {
"bcchange1": "zablokuj",
"bcchange2": "Pomyślnie zablokowano tego użytkownika!",
"bcchange3": "Wystąpił błąd podczas próby zablokowania tego użytkownika. Spróbuj ponownie!",
"bcchange4": "Brak zarejestrowanej nazwy"
"bcchange1": "Zablokuj Użytkownika",
"bcchange2": "Pomyślnie zablokowano tego użytkownika!",
"bcchange3": "Wystąpił błąd podczas próby zablokowania tego użytkownika. Spróbuj ponownie!",
"bcchange4": "Brak zarejestrowanej nazwy",
"bcchange5": "Zablokuj żądanie użytkownika",
"bcchange6": "Czy na pewno chcesz zablokować tego użytkownika?",
"bcchange7": "MENU",
"bcchange8": "Kopiuj Adres",
"bcchange9": "Prywatna Wiadomość"
},
"grouppage": {
"gchange1": "Grupy Qortal",

View File

@ -434,10 +434,15 @@
"wcchange9": "Envio falhou, por favor tente novamente..."
},
"blockpage": {
"bcchange1": "Bloquear",
"bcchange1": "Bloquear Usuário",
"bcchange2": "Bloqueou com sucesso este usuário!",
"bcchange3": "Ocorreu um erro ao tentar bloquear esse usuário. Por favor, tente de novo!",
"bcchange4": "Nenhum nome registrado"
"bcchange4": "Nenhum nome registrado",
"bcchange5": "Bloquear solicitação de usuário",
"bcchange6": "Tem certeza de bloquear este usuário?",
"bcchange7": "MENU",
"bcchange8": "Copiar Endereço",
"bcchange9": "Mensagem Privada"
},
"grouppage": {
"gchange1": "Grupos Qortal",

View File

@ -434,10 +434,15 @@
"wcchange9": "Slanje neuspešno, Molim pokušajte ponov..."
},
"blockpage": {
"bcchange1": "blokirajte",
"bcchange1": "Blokirajte Korisnika",
"bcchange2": "Korisnik uspešno blokiran!",
"bcchange3": "Desila se greška pri pokušaju blokiranja ovog korisnika. Molim pokušajte ponovo!",
"bcchange4": "Bez registrovanih imena"
"bcchange4": "Bez registrovanih imena",
"bcchange5": "Blokiraj korisnički zahtev",
"bcchange6": "Da li ste sigurni da blokirate ovog korisnika?",
"bcchange7": "MENI",
"bcchange8": "Kopiraj Adresu",
"bcchange9": "Privatna Poruka"
},
"grouppage": {
"gchange1": "Qortal Grupe",

View File

@ -434,10 +434,15 @@
"wcchange9": "Sending failed, Please retry..."
},
"blockpage": {
"bcchange1": "block",
"bcchange1": "Block User",
"bcchange2": "Successfully blocked this user!",
"bcchange3": "Error occurred when trying to block this user. Please try again!",
"bcchange4": "No registered name"
"bcchange4": "No registered name",
"bcchange5": "Block User Request",
"bcchange6": "Are you sure to block this user ?",
"bcchange7": "MENU",
"bcchange8": "Copy Address",
"bcchange9": "Private Message"
},
"grouppage": {
"gchange1": "Qortal Groups",

View File

@ -434,10 +434,15 @@
"wcchange9": "发送失败, 请再此尝试..."
},
"blockpage": {
"bcchange1": "封锁",
"bcchange1": "阻止用户",
"bcchange2": "成功封锁此用户!",
"bcchange3": "尝试封锁此用户时出错。 请再试一次!",
"bcchange4": "没有注册名称"
"bcchange4": "没有注册名称",
"bcchange5": "阻止用户请求",
"bcchange6": "你确定要屏蔽这个用户吗?",
"bcchange7": "菜单",
"bcchange8": "复制地址",
"bcchange9": "私人讯息"
},
"grouppage": {
"gchange1": "Qortal 群组",
@ -580,7 +585,7 @@
"rewarddialog2": "给",
"rewarddialog3": "如果是的话,请保存下面的铸币密钥并添加到任何节点上,以允许它代表您铸币.",
"rewarddialog4": "点击确认后,奖励分享密钥将会创建,但你必须将该密钥添加到节点中才能成功铸币并获得相对应的奖励.",
"rewarddialog5": "您正在删除与此账号关联的奖励分享交易:",
"rewarddialog5": "您正在删除与此账号关联的奖励分享交易:",
"rewarddialog6": "点击确认后,奖励分享将被移除,已创建的铸币密钥也随之失效。"
}
}

View File

@ -434,10 +434,15 @@
"wcchange9": "發送失敗, 請再此嘗試..."
},
"blockpage": {
"bcchange1": "封鎖",
"bcchange1": "阻止用戶",
"bcchange2": "成功封鎖此用戶!",
"bcchange3": "嘗試封鎖此用戶時出錯。 請再試一次!",
"bcchange4": "沒有註冊名稱"
"bcchange4": "沒有註冊名稱",
"bcchange5": "阻止用戶請求",
"bcchange6": "你確定要屏蔽這個用戶嗎?",
"bcchange7": "菜單",
"bcchange8": "複製地址",
"bcchange9": "私人讯息"
},
"grouppage": {
"gchange1": "Qortal 群組",

View File

@ -1,164 +0,0 @@
import { LitElement, html, css } from 'lit'
import { render } from 'lit/html.js'
import { Epml } from '../../../epml.js'
import snackbar from './snackbar.js'
import { use, get, translate, translateUnsafeHTML, registerTranslateConfig } from 'lit-translate'
registerTranslateConfig({
loader: lang => fetch(`/language/${lang}.json`).then(res => res.json())
})
import '@material/mwc-button'
import '@material/mwc-dialog'
import '@material/mwc-icon'
import '@material/mwc-snackbar'
const parentEpml = new Epml({ type: 'WINDOW', source: window.parent })
class BlockAddress extends LitElement {
static get properties() {
return {
toblockaddress: { type: String, attribute: true },
chatBlockedAdresses: { type: Array }
}
}
static get styles() {
return css`
* {
--mdc-theme-primary: rgb(3, 169, 244);
--mdc-theme-secondary: var(--mdc-theme-primary);
--mdc-dialog-content-ink-color: var(--black);
--mdc-theme-surface: var(--white);
--mdc-theme-text-primary-on-background: var(--black);
}
`
}
constructor() {
super()
this.chatBlockedAdresses = []
}
render() {
return html`
<mwc-button dense unelevated label="${translate("blockpage.bcchange1")}" icon="voice_over_off" @click="${() => this.chatBlockAddress()}"></mwc-button>
`
}
firstUpdated() {
this.changeLanguage()
this.getChatBlockedAdresses()
setInterval(() => {
this.getChatBlockedAdresses();
}, 60000)
window.addEventListener('storage', () => {
const checkLanguage = localStorage.getItem('qortalLanguage')
use(checkLanguage)
})
}
updated(changedProps) {
}
changeLanguage() {
const checkLanguage = localStorage.getItem('qortalLanguage')
if (checkLanguage === null || checkLanguage.length === 0) {
localStorage.setItem('qortalLanguage', 'us')
use('us')
} else {
use(checkLanguage)
}
}
async getChatBlockedAdresses() {
const chatBlockedAdresses = await parentEpml.request('apiCall', {
url: `/lists/blockedAddresses?apiKey=${this.getApiKey()}`
})
this.chatBlockedAdresses = chatBlockedAdresses
}
async chatBlockAddress() {
let address = this.toblockaddress
let items = [
address
]
let addressJsonString = JSON.stringify({ "items": items })
let ret = await parentEpml.request('apiCall', {
url: `/lists/blockedAddresses?apiKey=${this.getApiKey()}`,
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: `${addressJsonString}`
})
if (ret === true) {
this.chatBlockedAdresses = this.chatBlockedAdresses.filter(item => item != address)
this.chatBlockedAdresses.push(address)
this.getChatBlockedList()
let err1string = get("blockpage.bcchange2")
snackbar.add({
labelText: `${err1string}`,
dismiss: true
})
} else {
let err2string = get("blockpage.bcchange2")
snackbar.add({
labelText: `${err2string}`,
dismiss: true
})
}
return ret
}
getChatBlockedList() {
const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node]
const nodeUrl = myNode.protocol + '://' + myNode.domain + ':' + myNode.port
const blockedAddressesUrl = `${nodeUrl}/lists/blockedAddresses?apiKey=${this.getApiKey()}`
const err3string = 'No regitered name'
localStorage.removeItem("ChatBlockedAddresses")
var obj = [];
fetch(blockedAddressesUrl).then(response => {
return response.json()
}).then(data => {
return data.map(item => {
const noName = {
name: err3string,
owner: item
}
fetch(`${nodeUrl}/names/address/${item}?limit=0&reverse=true`).then(res => {
return res.json()
}).then(jsonRes => {
if(jsonRes.length) {
jsonRes.map (item => {
obj.push(item)
})
} else {
obj.push(noName)
}
localStorage.setItem("ChatBlockedAddresses", JSON.stringify(obj))
})
})
})
}
getApiKey() {
const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node];
let apiKey = myNode.apiKey;
return apiKey;
}
}
window.customElements.define('block-address', BlockAddress)

View File

@ -10,7 +10,7 @@ registerTranslateConfig({
import { escape, unescape } from 'html-escaper';
import { inputKeyCodes } from '../../utils/keyCodes.js'
import './ChatScroller.js'
import './BlockAddress.js'
import './NameMenu.js'
import './TimeAgo.js'
import { EmojiPicker } from 'emoji-picker-js';
import '@polymer/paper-spinner/paper-spinner-lite.js'
@ -258,9 +258,6 @@ class ChatPage extends LitElement {
parentEpml.imReady();
}
updated(changedProps) {
}
changeLanguage() {
const checkLanguage = localStorage.getItem('qortalLanguage')
@ -358,7 +355,7 @@ class ChatPage extends LitElement {
*/
chatMessageTemplate(messageObj) {
let avatarImg = '';
let blockButton = '';
let nameMenu = '';
if (messageObj.senderName) {
const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node];
const nodeUrl = myNode.protocol + '://' + myNode.domain + ':' + myNode.port;
@ -366,18 +363,17 @@ class ChatPage extends LitElement {
avatarImg = `<img src="${avatarUrl}" style="max-width:100%; max-height:100%;" onerror="this.onerror=null; this.src='/img/incognito.png';" />`;
}
if (messageObj.sender === this.selectedAddress.address) {
blockButton = ``
if (messageObj.sender === this.myAddress) {
nameMenu = ``
} else {
blockButton = `<block-address toblockaddress="${messageObj.sender}"></block-address>`
nameMenu = `<name-menu toblockaddress="${messageObj.sender}" nametodialog="${messageObj.senderName ? messageObj.senderName : messageObj.sender}"></name-menu>`
}
return `
<li class="clearfix">
<div class="message-data ${messageObj.sender === this.selectedAddress.address ? "align-right" : ""}">
<span class="message-data-name">${messageObj.senderName ? messageObj.senderName : messageObj.sender}</span>
<span class="message-data-name">${nameMenu}</span>
<span class="message-data-time"><message-time timestamp=${messageObj.timestamp}></message-time></span>
<span class="message-data-block">${blockButton}</span>
</div>
<div class="message-data-avatar" style="width:42px; height:42px; ${messageObj.sender === this.selectedAddress.address ? "float:right;" : "float:left;"} margin:3px;">${avatarImg}</div>
<div class="message ${messageObj.sender === this.selectedAddress.address ? "my-message float-right" : "other-message float-left"}">${this.emojiPicker.parse(escape(messageObj.decodedMessage))}</div>
@ -662,7 +658,7 @@ class ChatPage extends LitElement {
const hashAry = new Uint8Array(window.parent.memory.buffer, hashPtr, 32);
hashAry.set(chatBytesHash);
const difficulty = this.balance === 0 ? 14 : 8;
const difficulty = this.balance === 0 ? 12 : 8;
const workBufferLength = 8 * 1024 * 1024;
const workBufferPtr = window.parent.sbrk(workBufferLength, window.parent.heap);
let nonce = window.parent.computePow(hashPtr, workBufferPtr, workBufferLength, difficulty);
@ -698,7 +694,6 @@ class ChatPage extends LitElement {
* @param { Boolean } isDown
*/
setIsUserDown(isDown) {
this.isUserDown = isDown;
}
@ -790,40 +785,40 @@ class ChatPage extends LitElement {
editor.styles = document.createElement('style');
editor.styles.setAttribute('type', 'text/css');
editor.styles.innerText = `
html {
cursor: text;
}
body {
font-size: 1rem;
line-height: 1.38rem;
font-weight: 400;
font-family: "Open Sans", helvetica, sans-serif;
padding-right: 3px;
text-align: left;
white-space: break-spaces;
word-break: break-word;
outline: none;
}
body[contentEditable=true]:empty:before {
content: attr(data-placeholder);
display: block;
color: rgb(103, 107, 113);
text-overflow: ellipsis;
overflow: hidden;
user-select: none;
white-space: nowrap;
}
body[contentEditable=false]{
background: rgba(0,0,0,0.1);
}
img.emoji {
width: 1.7em;
height: 1.5em;
margin-bottom: -2px;
vertical-align: bottom;
}
`;
editor.content.head.appendChild(editor.styles);
html {
cursor: text;
}
body {
font-size: 1rem;
line-height: 1.38rem;
font-weight: 400;
font-family: "Open Sans", helvetica, sans-serif;
padding-right: 3px;
text-align: left;
white-space: break-spaces;
word-break: break-word;
outline: none;
}
body[contentEditable=true]:empty:before {
content: attr(data-placeholder);
display: block;
color: rgb(103, 107, 113);
text-overflow: ellipsis;
overflow: hidden;
user-select: none;
white-space: nowrap;
}
body[contentEditable=false]{
background: rgba(0,0,0,0.1);
}
img.emoji {
width: 1.7em;
height: 1.5em;
margin-bottom: -2px;
vertical-align: bottom;
}
`;
editor.content.head.appendChild(editor.styles);
};
ChatEditor.prototype.enable = function () {

View File

@ -2,7 +2,7 @@ import { LitElement, html, css } from 'lit'
import { render } from 'lit/html.js'
import { Epml } from '../../../epml.js'
import './BlockAddress.js'
import './NameMenu.js'
import '@material/mwc-button'
import '@material/mwc-dialog'
@ -36,6 +36,8 @@ class ChatScroller extends LitElement {
* {
scrollbar-width: thin;
scrollbar-color: var(--thumbBG) var(--scrollbarBG);
--mdc-theme-primary: rgb(3, 169, 244);
--mdc-theme-secondary: var(--mdc-theme-primary);
}
*::-webkit-scrollbar-track {
@ -48,6 +50,11 @@ class ChatScroller extends LitElement {
border: 3px solid var(--scrollbarBG);
}
a {
color: var(--black);
text-decoration: none;
}
ul {
list-style: none;
margin: 0;
@ -56,7 +63,7 @@ class ChatScroller extends LitElement {
.chat-list {
overflow-y: auto;
height: 91vh;
height: 92vh;
box-sizing: border-box;
}
@ -66,23 +73,14 @@ class ChatScroller extends LitElement {
.message-data-name {
color: var(--black);
cursor: pointer;
}
.message-data-time {
color: #a8aab1;
font-size: 13px;
padding-left: 6px;
}
.message-data-block {
color: #03a9f4;
font-size: 16px;
padding-left: 6px;
}
.blockicon {
color: #03a9f4;
--mdc-icon-size: 16px;
padding-bottom: 4px;
}
.message {
@ -204,7 +202,7 @@ class ChatScroller extends LitElement {
chatMessageTemplate(messageObj) {
let avatarImg = '';
let blockButton = '';
let nameMenu = '';
if (messageObj.senderName) {
const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node];
const nodeUrl = myNode.protocol + '://' + myNode.domain + ':' + myNode.port;
@ -213,17 +211,17 @@ class ChatScroller extends LitElement {
}
if (messageObj.sender === this.myAddress) {
blockButton = ``
nameMenu = ``
} else {
blockButton = `<block-address toblockaddress="${messageObj.sender}"></block-address>`
nameMenu = `<name-menu toblockaddress="${messageObj.sender}" nametodialog="${messageObj.senderName ? messageObj.senderName : messageObj.sender}"></name-menu>`
}
return `
<li class="clearfix">
<div class="message-data ${messageObj.sender === this.myAddress ? "align-right" : ""}">
<span class="message-data-name">${messageObj.senderName ? messageObj.senderName : messageObj.sender}</span>
<span class="message-data-name">${nameMenu}</span>
<span class="message-data-time"><message-time timestamp=${messageObj.timestamp}></message-time></span>
<span class="message-data-block">${blockButton}</span>
</div>
</div>
<div class="message-data-avatar" style="width:42px; height:42px; ${messageObj.sender === this.myAddress ? "float:right;" : "float:left;"} margin:3px;">${avatarImg}</div>
<div id="messageContent" class="message ${messageObj.sender === this.myAddress ? "my-message float-right" : "other-message float-left"}">${this.emojiPicker.parse(this.escapeHTML(messageObj.decodedMessage))}</div>

View File

@ -432,7 +432,7 @@ class ChatWelcomePage extends LitElement {
const hashAry = new Uint8Array(window.parent.memory.buffer, hashPtr, 32);
hashAry.set(chatBytesHash);
const difficulty = this.balance === 0 ? 14 : 8;
const difficulty = this.balance === 0 ? 12 : 8;
const workBufferLength = 8 * 1024 * 1024;
const workBufferPtr = window.parent.sbrk(workBufferLength, window.parent.heap);

View File

@ -904,7 +904,6 @@ class Chat extends LitElement {
}
scrollToBottom() {
const viewElement = this.shadowRoot.querySelector('chat-page').shadowRoot.querySelector('chat-scroller').shadowRoot.getElementById('viewElement');
viewElement.scroll({ top: viewElement.scrollHeight, left: 0, behavior: 'smooth' })
}