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/service-worker.js b/public/service-worker.js
index 8f54ce7..959f51f 100644
--- a/public/service-worker.js
+++ b/public/service-worker.js
@@ -1,4 +1,4 @@
-const cacheVersion = 'v1.10.1';
+const cacheVersion = 'v1.10.3';
const cacheTitle = `pairdrop-cache-${cacheVersion}`;
const forceFetch = false; // FOR DEVELOPMENT: Set to true to always update assets instead of using cached versions
const relativePathsToCache = [
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;