diff --git a/public/scripts/ui.js b/public/scripts/ui.js index ae63a0e..1917eb8 100644 --- a/public/scripts/ui.js +++ b/public/scripts/ui.js @@ -1978,12 +1978,15 @@ class ReceiveTextDialog extends Dialog { this._receiveTextQueue = []; } + selectionEmpty() { + return !window.getSelection().toString() + } + async _onKeyDown(e) { if (!this.isShown()) return - if (e.code === "KeyC" && (e.ctrlKey || e.metaKey)) { + if (e.code === "KeyC" && (e.ctrlKey || e.metaKey) && this.selectionEmpty()) { await this._onCopy() - this.hide(); } else if (e.code === "Escape") { this.hide(); @@ -2014,10 +2017,19 @@ class ReceiveTextDialog extends Dialog { // Beautify text if text is short if (text.length < 2000) { - // replace urls with actual links - this.$text.innerHTML = this.$text.innerHTML.replace(/((https?:\/\/|www)[ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\-._~:\/?#\[\]@!$&'()*+,;=]+)/g, url => { - return `${url}`; - }); + // replace URLs with actual links + this.$text.innerHTML = this.$text.innerHTML + .replace(/(^|(?<=(
|\s)))(https?:\/\/|www.)(([a-z]|[A-Z]|[0-9]|[\-_~:\/?#\[\]@!$&'()*+,;=%]){2,}\.)(([a-z]|[A-Z]|[0-9]|[\-_~:\/?#\[\]@!$&'()*+,;=%.]){2,})/g, + (url) => { + let link = url; + + // prefix www.example.com with http protocol to prevent it from being a relative link + if (link.startsWith('www')) { + link = "http://" + link + } + + return `${url}`; + }); } this._evaluateOverflowing(this.$text); @@ -2049,7 +2061,10 @@ class ReceiveTextDialog extends Dialog { hide() { super.hide(); - setTimeout(() => this._dequeueRequests(), 500); + setTimeout(() => { + this._dequeueRequests(); + this.$text.innerHTML = ""; + }, 500); } } diff --git a/public/styles/styles-deferred.css b/public/styles/styles-deferred.css index 36a7b29..0d81761 100644 --- a/public/styles/styles-deferred.css +++ b/public/styles/styles-deferred.css @@ -16,6 +16,7 @@ max-height: 350px; word-break: break-word; word-wrap: anywhere; + white-space: pre-wrap; } .textarea:before { @@ -335,6 +336,7 @@ x-dialog x-paper { display: flex; margin: auto; flex-direction: column; + width: 100%; max-width: 450px; z-index: 3; border-radius: 30px; @@ -382,10 +384,6 @@ x-dialog:not([show]) x-paper { transform: scale(0.1); } -x-dialog a { - color: var(--primary-color); -} - /* Pair Devices Dialog & Public Room Dialog */ .input-key-container { @@ -784,7 +782,7 @@ x-dialog x-paper { background-color: var(--bg-color-secondary) !important; } -.textarea * { +.textarea *:not(a) { margin: 0 !important; padding: 0 !important; color: unset !important; @@ -797,6 +795,10 @@ x-dialog x-paper { font-weight: unset !important; } +x-dialog a { + color: var(--primary-color); +} + /* Image/Video/Audio Preview */ .file-preview { margin-bottom: 15px;