commit 516b4a070598610046cf97ca7c8e1c6decec8806
parent efc8e4f5392ee2ec1e8d6bcffc43f151e058ef6f
Author: RobinLinus <RobinLinus@users.noreply.github.com>
Date: Mon, 28 Dec 2020 02:35:59 +0100
Merge pull request #212 from MontelAle/add-expanding-textarea
Resolves #202
Diffstat:
3 files changed, 34 insertions(+), 25 deletions(-)
diff --git a/client/index.html b/client/index.html
@@ -79,7 +79,7 @@
<div class="font-body2" id="fileSize"></div>
<div class="row">
<label for="autoDownload" class="grow">Ask to save each file before downloading</label>
- <input type="checkbox" id="autoDownload" checked="">
+ <input type="checkbox" id="autoDownload" checked="">
</div>
<div class="row-reverse">
<a class="button" close id="download" title="Download File" autofocus>Save</a>
@@ -94,7 +94,7 @@
<x-background class="full center">
<x-paper shadow="2">
<h3>Send a Message</h3>
- <textarea id="textInput" placeholder="Send a message" autocomplete="off" autofocus></textarea>
+ <div id="textInput" class="textareaElement" role="textbox" placeholder="Send a message" autocomplete="off" autofocus contenteditable></div>
<div class="row-reverse">
<button class="button" type="submit" close>Send</button>
<a class="button" close>Cancel</a>
diff --git a/client/scripts/ui.js b/client/scripts/ui.js
@@ -19,12 +19,12 @@ class PeersUI {
Events.on('peer-joined', e => this._onPeerJoined(e.detail));
Events.on('peer-left', e => this._onPeerLeft(e.detail));
Events.on('peers', e => this._onPeers(e.detail));
- Events.on('file-progress', e => this._onFileProgress(e.detail));
+ Events.on('file-progress', e => this._onFileProgress(e.detail));
Events.on('paste', e => this._onPaste(e));
}
_onPeerJoined(peer) {
- if ($(peer.id)) return; // peer already exists
+ if ($(peer.id)) return; // peer already exists
const peerUI = new PeerUI(peer);
$$('x-peers').appendChild(peerUI.$el);
}
@@ -49,9 +49,9 @@ class PeersUI {
_clearPeers() {
const $peers = $$('x-peers').innerHTML = '';
- }
-
- _onPaste(e) {
+ }
+
+ _onPaste(e) {
const files = e.clipboardData.files || e.clipboardData.items
.filter(i => i.type.indexOf('image') > -1)
.map(i => i.getAsFile());
@@ -72,7 +72,7 @@ class PeersUI {
class PeerUI {
html() {
- return `
+ return `
<label class="column center" title="Click to send files or right click to send a text">
<input type="file" multiple>
<x-icon shadow="1">
@@ -315,12 +315,19 @@ class SendTextDialog extends Dialog {
this._recipient = recipient;
this._handleShareTargetText();
this.show();
- this.$text.setSelectionRange(0, this.$text.value.length)
+
+ const range = document.createRange();
+ const sel = window.getSelection();
+
+ range.selectNodeContents(this.$text);
+ sel.removeAllRanges();
+ sel.addRange(range);
+
}
_handleShareTargetText() {
if (!window.shareTargetText) return;
- this.$text.value = window.shareTargetText;
+ this.$text.textContent = window.shareTargetText;
window.shareTargetText = '';
}
@@ -328,7 +335,7 @@ class SendTextDialog extends Dialog {
e.preventDefault();
Events.fire('send-text', {
to: this._recipient,
- text: this.$text.value
+ text: this.$text.textContent
});
}
}
@@ -492,7 +499,7 @@ class WebShareTargetUI {
let shareTargetText = title ? title : '';
shareTargetText += text ? shareTargetText ? ' ' + text : text : '';
-
+
if(url) shareTargetText = url; // We share only the Link - no text. Because link-only text becomes clickable.
if (!shareTargetText) return;
@@ -610,12 +617,12 @@ Events.on('load', () => {
});
Notifications.PERMISSION_ERROR = `
-Notifications permission has been blocked
-as the user has dismissed the permission prompt several times.
-This can be reset in Page Info
+Notifications permission has been blocked
+as the user has dismissed the permission prompt several times.
+This can be reset in Page Info
which can be accessed by clicking the lock icon next to the URL.`;
-document.body.onclick = e => { // safari hack to fix audio
+document.body.onclick = e => { // safari hack to fix audio
document.body.onclick = null;
if (!(/.*Version.*Safari.*/.test(navigator.userAgent))) return;
blop.play();
diff --git a/client/styles.css b/client/styles.css
@@ -479,19 +479,22 @@ button::-moz-focus-inner {
/* Text Input */
-textarea {
- width: 100%;
+.textareaElement {
box-sizing: border-box;
border: none;
outline: none;
padding: 16px 24px;
border-radius: 16px;
margin: 8px 0;
- line-height: 16px;
font-size: 14px;
font-family: inherit;
- resize: none;
background: #f1f3f4;
+ display: block;
+ overflow: auto;
+ resize: none;
+ min-height: 40px;
+ line-height: 16px;
+ max-height: 300px;
}
@@ -680,8 +683,8 @@ screen and (min-width: 1100px) {
}
}
-/*
- Color Themes
+/*
+ Color Themes
*/
/* Default colors */
@@ -709,7 +712,7 @@ x-dialog x-paper {
background-color: var(--bg-color);
}
-textarea {
+.textareaElement {
color: var(--text-color);
background-color: var(--bg-color-secondary);
}
@@ -731,4 +734,4 @@ textarea {
--bg-color: #fafafa;
--bg-color-secondary: #f1f3f4;
}
-}
-\ No newline at end of file
+}