forked from Qortal/qortal-ui
AlphaX-Projects
1 year ago
committed by
GitHub
81 changed files with 3542 additions and 14242 deletions
@ -1,8 +1,12 @@
|
||||
const { contextBridge, ipcRenderer } = require('electron') |
||||
const { contextBridge, ipcRenderer, webFrame } = require('electron') |
||||
|
||||
contextBridge.exposeInMainWorld('electronAPI', { |
||||
setStartCore: () => ipcRenderer.send('set-start-core'), |
||||
checkForUpdate: () => ipcRenderer.send('check-for-update'), |
||||
showMyMenu: () => ipcRenderer.send('show-my-menu'), |
||||
focusApp: () => ipcRenderer.send('focus-app'), |
||||
clearMyCache: () => ipcRenderer.send('clear-all-cache'), |
||||
clearCache() { |
||||
webFrame.clearCache() |
||||
}, |
||||
}) |
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,72 @@
|
||||
import { LitElement, html } from 'lit' |
||||
import { render } from 'lit/html.js' |
||||
import { Epml } from '../../../epml.js' |
||||
import { chatSearchResultsStyles } from './ChatSearchResults-css.js' |
||||
import { use, get, translate, translateUnsafeHTML, registerTranslateConfig } from 'lit-translate' |
||||
import '@vaadin/icon' |
||||
import '@vaadin/icons' |
||||
|
||||
const parentEpml = new Epml({ type: 'WINDOW', source: window.parent }) |
||||
|
||||
export class ChatSearchResults extends LitElement { |
||||
static get properties() { |
||||
return { |
||||
onClickFunc: { attribute: false }, |
||||
closeFunc: { attribute: false }, |
||||
searchResults: { type: Array }, |
||||
isOpen: { type: Boolean }, |
||||
loading: { type: Boolean } |
||||
} |
||||
} |
||||
|
||||
static styles = [chatSearchResultsStyles] |
||||
|
||||
render() { |
||||
return html` |
||||
<div class="chat-results-card" style=${this.isOpen ? "display: block;" : "display: none;"}> |
||||
<vaadin-icon
|
||||
@click=${() => this.closeFunc()}
|
||||
icon="vaadin:close-small"
|
||||
slot="icon" |
||||
class="close-icon" |
||||
> |
||||
</vaadin-icon> |
||||
${this.loading ? ( |
||||
html` |
||||
<div class="spinner-container"> |
||||
<paper-spinner-lite active></paper-spinner-lite> |
||||
</div> |
||||
` |
||||
) : ( |
||||
html` |
||||
<p class="chat-result-header">${translate("chatpage.cchange36")}</p> |
||||
<div class="divider"></div> |
||||
<div class="chat-result-container"> |
||||
${this.searchResults.length === 0 ? ( |
||||
html`<p class="no-results">${translate("chatpage.cchange37")}</p>` |
||||
) : ( |
||||
html` |
||||
${this.searchResults.map((result) => { |
||||
return ( |
||||
html` |
||||
<div class="chat-result-card" @click=${() => { |
||||
this.shadowRoot.querySelector(".chat-result-card").classList.add("active"); |
||||
this.onClickFunc(result); |
||||
}}> |
||||
<p class="chat-result"> |
||||
${result.name} |
||||
</p> |
||||
</div> |
||||
` |
||||
)} |
||||
)} |
||||
` |
||||
)} |
||||
</div> |
||||
` |
||||
)} |
||||
</div> |
||||
` |
||||
} |
||||
} |
||||
customElements.define('chat-search-results', ChatSearchResults) |
@ -1,119 +1,110 @@
|
||||
import { LitElement, html } from 'lit'; |
||||
import { render } from 'lit/html.js'; |
||||
import { translate } from 'lit-translate'; |
||||
import { userInfoStyles } from './UserInfo-css.js'; |
||||
import { Epml } from '../../../../epml'; |
||||
import '@vaadin/button'; |
||||
import '@polymer/paper-progress/paper-progress.js'; |
||||
import { cropAddress } from '../../../utils/cropAddress.js'; |
||||
import { LitElement, html } from 'lit' |
||||
import { render } from 'lit/html.js' |
||||
import { use, get, translate, translateUnsafeHTML, registerTranslateConfig } from 'lit-translate' |
||||
import { userInfoStyles } from './UserInfo-css.js' |
||||
import { Epml } from '../../../../epml' |
||||
import { cropAddress } from '../../../utils/cropAddress.js' |
||||
|
||||
import '@polymer/paper-progress/paper-progress.js' |
||||
import '@vaadin/button' |
||||
|
||||
const parentEpml = new Epml({ type: 'WINDOW', source: window.parent }) |
||||
|
||||
export class UserInfo extends LitElement { |
||||
static get properties() { |
||||
return { |
||||
setOpenUserInfo: { attribute: false }, |
||||
setOpenTipUser: { attribute: false }, |
||||
setOpenPrivateMessage: { attribute: false }, |
||||
userName: { type: String }, |
||||
selectedHead: { type: Object }, |
||||
isImageLoaded: { type: Boolean } |
||||
static get properties() { |
||||
return { |
||||
setOpenUserInfo: { attribute: false }, |
||||
setOpenTipUser: { attribute: false }, |
||||
setOpenPrivateMessage: { attribute: false }, |
||||
userName: { type: String }, |
||||
selectedHead: { type: Object }, |
||||
isImageLoaded: { type: Boolean } |
||||
} |
||||
} |
||||
} |
||||
|
||||
constructor() { |
||||
super() |
||||
this.isImageLoaded = false |
||||
this.selectedHead = {} |
||||
this.imageFetches = 0 |
||||
} |
||||
constructor() { |
||||
super() |
||||
this.isImageLoaded = false |
||||
this.selectedHead = {} |
||||
this.imageFetches = 0 |
||||
} |
||||
|
||||
static styles = [userInfoStyles] |
||||
static styles = [userInfoStyles] |
||||
|
||||
createImage(imageUrl) { |
||||
const imageHTMLRes = new Image(); |
||||
imageHTMLRes.src = imageUrl; |
||||
imageHTMLRes.classList.add("user-info-avatar"); |
||||
imageHTMLRes.onload = () => { |
||||
this.isImageLoaded = true; |
||||
} |
||||
imageHTMLRes.onerror = () => {
|
||||
if (this.imageFetches < 4) { |
||||
setTimeout(() => { |
||||
this.imageFetches = this.imageFetches + 1; |
||||
imageHTMLRes.src = imageUrl; |
||||
}, 500); |
||||
} else { |
||||
this.isImageLoaded = false |
||||
createImage(imageUrl) { |
||||
const imageHTMLRes = new Image() |
||||
imageHTMLRes.src = imageUrl |
||||
imageHTMLRes.classList.add("user-info-avatar") |
||||
imageHTMLRes.onload = () => { |
||||
this.isImageLoaded = true |
||||
} |
||||
imageHTMLRes.onerror = () => {
|
||||
if (this.imageFetches < 4) { |
||||
setTimeout(() => { |
||||
this.imageFetches = this.imageFetches + 1 |
||||
imageHTMLRes.src = imageUrl; |
||||
}, 10000) |
||||
} else { |
||||
this.isImageLoaded = false |
||||
} |
||||
} |
||||
}; |
||||
return imageHTMLRes; |
||||
} |
||||
return imageHTMLRes |
||||
} |
||||
|
||||
|
||||
render() { |
||||
let avatarImg = ""; |
||||
if (this.selectedHead && this.selectedHead.name) { |
||||
const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node]; |
||||
const nodeUrl = myNode.protocol + '://' + myNode.domain + ':' + myNode.port; |
||||
const avatarUrl = `${nodeUrl}/arbitrary/THUMBNAIL/${this.selectedHead.name}/qortal_avatar?async=true&apiKey=${myNode.apiKey}`; |
||||
avatarImg = this.createImage(avatarUrl); |
||||
} |
||||
return html` |
||||
<div style=${"position: relative;"}> |
||||
<vaadin-icon |
||||
class="close-icon" |
||||
icon="vaadin:close-big" |
||||
slot="icon" |
||||
@click=${() => { |
||||
this.setOpenUserInfo(false) |
||||
}}> |
||||
</vaadin-icon> |
||||
${this.isImageLoaded ?
|
||||
html` |
||||
<div class="avatar-container"> |
||||
${avatarImg} |
||||
</div>` : |
||||
html``} |
||||
${!this.isImageLoaded && this.selectedHead && this.selectedHead.name ?
|
||||
html` |
||||
<div class="avatar-container"> |
||||
<div class="user-info-no-avatar"> |
||||
${this.selectedHead.name.charAt(0)} |
||||
</div> |
||||
</div> |
||||
` |
||||
: ""} |
||||
${!this.isImageLoaded && this.selectedHead && !this.selectedHead.name ?
|
||||
html` |
||||
<div class="avatar-container"> |
||||
<img src="/img/incognito.png" alt="avatar" /> |
||||
</div>` |
||||
: ""} |
||||
<div class="user-info-header"> |
||||
${this.selectedHead && this.selectedHead.name ? this.selectedHead.name : this.selectedHead ? cropAddress(this.selectedHead.address) : null} |
||||
</div> |
||||
<div
|
||||
class="send-message-button"
|
||||
@click="${() => { |
||||
this.setOpenPrivateMessage({ |
||||
name: this.userName, |
||||
open: true
|
||||
}) |
||||
this.setOpenUserInfo(false); |
||||
}
|
||||
}"> |
||||
${translate("chatpage.cchange58")} |
||||
</div> |
||||
<div
|
||||
style=${"margin-top: 5px;"}
|
||||
class="send-message-button"
|
||||
@click=${() => { |
||||
this.setOpenTipUser(true); |
||||
this.setOpenUserInfo(false); |
||||
}}> |
||||
${translate("chatpage.cchange59")} |
||||
render() { |
||||
let avatarImg = "" |
||||
if (this.selectedHead && this.selectedHead.name) { |
||||
const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node] |
||||
const nodeUrl = myNode.protocol + '://' + myNode.domain + ':' + myNode.port |
||||
const avatarUrl = `${nodeUrl}/arbitrary/THUMBNAIL/${this.selectedHead.name}/qortal_avatar?async=true&apiKey=${myNode.apiKey}` |
||||
avatarImg = this.createImage(avatarUrl) |
||||
} |
||||
return html` |
||||
<div style="position: relative;"> |
||||
<vaadin-icon |
||||
class="close-icon" |
||||
icon="vaadin:close-big" |
||||
slot="icon" |
||||
@click=${() => { |
||||
this.setOpenUserInfo(false) |
||||
}} |
||||
> |
||||
</vaadin-icon> |
||||
${this.isImageLoaded ? html`<div class="avatar-container">${avatarImg}</div>` : html``} |
||||
${!this.isImageLoaded && this.selectedHead && this.selectedHead.name ? html` |
||||
<div class="avatar-container"> |
||||
<div class="user-info-no-avatar"> |
||||
${this.selectedHead.name.charAt(0)} |
||||
</div> |
||||
</div> |
||||
` : ""}
|
||||
${!this.isImageLoaded && this.selectedHead && !this.selectedHead.name ? html` |
||||
<div class="avatar-container"> |
||||
<img src="/img/incognito.png" alt="avatar" /> |
||||
</div>` |
||||
: ""} |
||||
<div class="user-info-header"> |
||||
${this.selectedHead && this.selectedHead.name ? this.selectedHead.name : this.selectedHead ? cropAddress(this.selectedHead.address) : null} |
||||
</div> |
||||
<div class="send-message-button" @click="${() => { |
||||
this.setOpenPrivateMessage({ |
||||
name: this.userName, |
||||
open: true
|
||||
}) |
||||
this.setOpenUserInfo(false) |
||||
}}"> |
||||
${translate("chatpage.cchange58")} |
||||
</div> |
||||
<div style="margin-top: 5px;" class="send-message-button" @click=${() => { |
||||
this.setOpenTipUser(true) |
||||
this.setOpenUserInfo(false) |
||||
}}> |
||||
${translate("chatpage.cchange59")} |
||||
</div> |
||||
</div> |
||||
</div> |
||||
` |
||||
} |
||||
` |
||||
} |
||||
} |
||||
customElements.define('user-info', UserInfo); |
||||
|
||||
customElements.define('user-info', UserInfo) |
||||
|
@ -1,33 +1,32 @@
|
||||
import { LitElement, html } from 'lit'; |
||||
import { render } from 'lit/html.js'; |
||||
import { LitElement, html } from 'lit' |
||||
import { render } from 'lit/html.js' |
||||
import { wrapperModalStyles } from './WrapperModal-css.js' |
||||
|
||||
export class WrapperModal extends LitElement { |
||||
static get properties() { |
||||
return { |
||||
customStyle: {type: String}, |
||||
onClickFunc: { attribute: false }, |
||||
zIndex: {type: Number} |
||||
static get properties() { |
||||
return { |
||||
customStyle: {type: String}, |
||||
onClickFunc: { attribute: false }, |
||||
zIndex: {type: Number} |
||||
} |
||||
} |
||||
} |
||||
|
||||
static styles = [wrapperModalStyles] |
||||
static styles = [wrapperModalStyles] |
||||
|
||||
render() { |
||||
return html` |
||||
<div> |
||||
<div
|
||||
style="z-index: ${this.zIndex || 50}"
|
||||
class="backdrop"
|
||||
@click=${() => { |
||||
this.onClickFunc(); |
||||
}}> |
||||
</div> |
||||
<div class="modal-body" style=${this.customStyle ? this.customStyle : ""}> |
||||
<slot></slot> |
||||
</div> |
||||
</div> |
||||
`;
|
||||
} |
||||
render() { |
||||
return html` |
||||
<div> |
||||
<div
|
||||
style="z-index: ${this.zIndex || 50}"
|
||||
class="backdrop"
|
||||
@click=${() => { this.onClickFunc() }} |
||||
> |
||||
</div> |
||||
<div class="modal-body" style=${this.customStyle ? this.customStyle : ""}> |
||||
<slot></slot> |
||||
</div> |
||||
</div> |
||||
` |
||||
} |
||||
} |
||||
customElements.define('wrapper-modal', WrapperModal); |
||||
customElements.define('wrapper-modal', WrapperModal) |
||||
|
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
Loading…
Reference in new issue