[call-me] - add copy username button to sign-in input
This commit is contained in:
@@ -77,6 +77,7 @@
|
||||
"invalidPassword": "كلمة مرور غير صحيحة",
|
||||
"shareRoomText": "اتصل بي على Call-me!",
|
||||
"roomCopied": "تم نسخ رابط الاتصال إلى الحافظة!",
|
||||
"usernameCopied": "تم نسخ اسم المستخدم '__username__' إلى الحافظة!",
|
||||
"devicesRefreshed": "تم تحديث الأجهزة بنجاح",
|
||||
"cameraChanged": "تم تغيير الكاميرا بنجاح",
|
||||
"microphoneChanged": "تم تغيير الميكروفون بنجاح",
|
||||
|
||||
@@ -77,6 +77,7 @@
|
||||
"invalidPassword": "Ungültiges Passwort",
|
||||
"shareRoomText": "Ruf mich auf Call-me an!",
|
||||
"roomCopied": "Anruflink in die Zwischenablage kopiert!",
|
||||
"usernameCopied": "Benutzername '__username__' in die Zwischenablage kopiert!",
|
||||
"devicesRefreshed": "Geräte erfolgreich aktualisiert",
|
||||
"cameraChanged": "Kamera erfolgreich gewechselt",
|
||||
"microphoneChanged": "Mikrofon erfolgreich gewechselt",
|
||||
|
||||
@@ -78,6 +78,7 @@
|
||||
"invalidPassword": "Invalid password",
|
||||
"shareRoomText": "Call me on Call-me!",
|
||||
"roomCopied": "Call link copied to clipboard!",
|
||||
"usernameCopied": "Username '__username__' copied to clipboard!",
|
||||
"devicesRefreshed": "Devices refreshed successfully",
|
||||
"cameraChanged": "Camera changed successfully",
|
||||
"microphoneChanged": "Microphone changed successfully",
|
||||
|
||||
@@ -77,6 +77,7 @@
|
||||
"invalidPassword": "Contraseña inválida",
|
||||
"shareRoomText": "¡Llámame en Call-me!",
|
||||
"roomCopied": "¡Enlace de llamada copiado al portapapeles!",
|
||||
"usernameCopied": "¡Nombre de usuario '__username__' copiado al portapapeles!",
|
||||
"devicesRefreshed": "Dispositivos actualizados correctamente",
|
||||
"cameraChanged": "Cámara cambiada correctamente",
|
||||
"microphoneChanged": "Micrófono cambiado correctamente",
|
||||
|
||||
@@ -77,6 +77,7 @@
|
||||
"invalidPassword": "Mot de passe invalide",
|
||||
"shareRoomText": "Appelez-moi sur Call-me !",
|
||||
"roomCopied": "Lien d'appel copié dans le presse-papiers !",
|
||||
"usernameCopied": "Nom d'utilisateur '__username__' copié dans le presse-papiers !",
|
||||
"devicesRefreshed": "Appareils actualisés avec succès",
|
||||
"cameraChanged": "Caméra changée avec succès",
|
||||
"microphoneChanged": "Microphone changé avec succès",
|
||||
|
||||
@@ -77,6 +77,7 @@
|
||||
"invalidPassword": "अमान्य पासवर्ड",
|
||||
"shareRoomText": "मुझे Call-me पर कॉल करें!",
|
||||
"roomCopied": "कॉल लिंक क्लिपबोर्ड पर कॉपी किया गया!",
|
||||
"usernameCopied": "उपयोगकर्ता नाम '__username__' क्लिपबोर्ड पर कॉपी किया गया!",
|
||||
"devicesRefreshed": "डिवाइस सफलतापूर्वक रिफ्रेश किए गए",
|
||||
"cameraChanged": "कैमरा सफलतापूर्वक बदला गया",
|
||||
"microphoneChanged": "माइक्रोफ़ोन सफलतापूर्वक बदला गया",
|
||||
|
||||
@@ -77,6 +77,7 @@
|
||||
"invalidPassword": "Neispravna lozinka",
|
||||
"shareRoomText": "Nazovi me na Call-me!",
|
||||
"roomCopied": "Link za poziv kopiran u međuspremnik!",
|
||||
"usernameCopied": "Korisničko ime '__username__' kopirano u međuspremnik!",
|
||||
"devicesRefreshed": "Uređaji su uspješno osvježeni",
|
||||
"cameraChanged": "Kamera je uspješno promijenjena",
|
||||
"microphoneChanged": "Mikrofon je uspješno promijenjen",
|
||||
|
||||
@@ -77,6 +77,7 @@
|
||||
"invalidPassword": "Password non valida",
|
||||
"shareRoomText": "Chiamami su Call-me!",
|
||||
"roomCopied": "Link di chiamata copiato negli appunti!",
|
||||
"usernameCopied": "Nome utente '__username__' copiato negli appunti!",
|
||||
"devicesRefreshed": "Dispositivi aggiornati correttamente",
|
||||
"cameraChanged": "Fotocamera cambiata correttamente",
|
||||
"microphoneChanged": "Microfono cambiato correttamente",
|
||||
|
||||
@@ -77,6 +77,7 @@
|
||||
"invalidPassword": "パスワードが無効です",
|
||||
"shareRoomText": "Call-meで電話してね!",
|
||||
"roomCopied": "通話リンクをクリップボードにコピーしました!",
|
||||
"usernameCopied": "ユーザー名 '__username__' をクリップボードにコピーしました!",
|
||||
"devicesRefreshed": "デバイスを正常に更新しました",
|
||||
"cameraChanged": "カメラを正常に変更しました",
|
||||
"microphoneChanged": "マイクを正常に変更しました",
|
||||
|
||||
@@ -77,6 +77,7 @@
|
||||
"invalidPassword": "Senha inválida",
|
||||
"shareRoomText": "Me ligue no Call-me!",
|
||||
"roomCopied": "Link de chamada copiado para a área de transferência!",
|
||||
"usernameCopied": "Nome de usuário '__username__' copiado para a área de transferência!",
|
||||
"devicesRefreshed": "Dispositivos atualizados com sucesso",
|
||||
"cameraChanged": "Câmera alterada com sucesso",
|
||||
"microphoneChanged": "Microfone alterado com sucesso",
|
||||
|
||||
@@ -77,6 +77,7 @@
|
||||
"invalidPassword": "Неверный пароль",
|
||||
"shareRoomText": "Позвоните мне на Call-me!",
|
||||
"roomCopied": "Ссылка для звонка скопирована в буфер обмена!",
|
||||
"usernameCopied": "Имя пользователя '__username__' скопировано в буфер обмена!",
|
||||
"devicesRefreshed": "Устройства успешно обновлены",
|
||||
"cameraChanged": "Камера успешно изменена",
|
||||
"microphoneChanged": "Микрофон успешно изменён",
|
||||
|
||||
@@ -77,6 +77,7 @@
|
||||
"invalidPassword": "Neispravna lozinka",
|
||||
"shareRoomText": "Pozovi me na Call-me!",
|
||||
"roomCopied": "Link za poziv kopiran u ostavu!",
|
||||
"usernameCopied": "Korisničko ime '__username__' kopirano u ostavu!",
|
||||
"devicesRefreshed": "Uređaji su uspešno osveženi",
|
||||
"cameraChanged": "Kamera je uspešno promenjena",
|
||||
"microphoneChanged": "Mikrofon je uspešno promenjen",
|
||||
|
||||
@@ -77,6 +77,7 @@
|
||||
"invalidPassword": "密码无效",
|
||||
"shareRoomText": "在 Call-me 上呼叫我!",
|
||||
"roomCopied": "通话链接已复制到剪贴板!",
|
||||
"usernameCopied": "用户名 '__username__' 已复制到剪贴板!",
|
||||
"devicesRefreshed": "设备刷新成功",
|
||||
"cameraChanged": "摄像头切换成功",
|
||||
"microphoneChanged": "麦克风切换成功",
|
||||
|
||||
Generated
+2
-2
@@ -1,12 +1,12 @@
|
||||
{
|
||||
"name": "call-me",
|
||||
"version": "1.3.17",
|
||||
"version": "1.3.18",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "call-me",
|
||||
"version": "1.3.17",
|
||||
"version": "1.3.18",
|
||||
"license": "AGPLv3",
|
||||
"dependencies": {
|
||||
"@ngrok/ngrok": "1.7.0",
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "call-me",
|
||||
"version": "1.3.17",
|
||||
"version": "1.3.18",
|
||||
"description": "Your Go-To for Instant Video Calls",
|
||||
"author": "Miroslav Pejic - miroslav.pejic.85@gmail.com",
|
||||
"license": "AGPLv3",
|
||||
|
||||
@@ -543,6 +543,7 @@ function handleListeners() {
|
||||
localVideoContainer.addEventListener('click', toggleFullScreen);
|
||||
remoteVideo.addEventListener('click', toggleFullScreen);
|
||||
usernameIn.addEventListener('keyup', (e) => handleKeyUp(e, handleSignInClick));
|
||||
document.getElementById('copyUsernameBtn').addEventListener('click', handleCopyUsername);
|
||||
usersTab.addEventListener('click', () => switchTab('users'));
|
||||
chatTab.addEventListener('click', () => switchTab('chat'));
|
||||
settingsTab.addEventListener('click', () => switchTab('settings'));
|
||||
@@ -793,6 +794,22 @@ async function handleShareRoomClick() {
|
||||
}
|
||||
}
|
||||
|
||||
// Copy username to clipboard
|
||||
async function handleCopyUsername() {
|
||||
const username = usernameIn.value.trim();
|
||||
if (!username) {
|
||||
toast(t('signIn.enterUsername'), 'warning', 'top', 2000);
|
||||
usernameIn.focus();
|
||||
return;
|
||||
}
|
||||
try {
|
||||
await navigator.clipboard.writeText(username);
|
||||
toast(t('messages.usernameCopied', { username }), 'success', 'top', 3000);
|
||||
} catch (error) {
|
||||
handleError(t('errors.copyToClipboardFailed'), error.message);
|
||||
}
|
||||
}
|
||||
|
||||
// Copy text to clipboard
|
||||
async function copyToClipboard(text, showError = true) {
|
||||
try {
|
||||
|
||||
+17
-7
@@ -78,13 +78,23 @@
|
||||
<!-- Sign-in Form -->
|
||||
<div class="mb-3">
|
||||
<!-- Input field for entering the username -->
|
||||
<input
|
||||
id="usernameIn"
|
||||
type="text"
|
||||
placeholder="Choose a display name"
|
||||
data-i18n-placeholder="signIn.username"
|
||||
required
|
||||
/>
|
||||
<div class="username-input-wrapper">
|
||||
<input
|
||||
id="usernameIn"
|
||||
type="text"
|
||||
placeholder="Choose a display name"
|
||||
data-i18n-placeholder="signIn.username"
|
||||
required
|
||||
/>
|
||||
<button
|
||||
id="copyUsernameBtn"
|
||||
class="copy-username-btn"
|
||||
type="button"
|
||||
title="Copy username"
|
||||
>
|
||||
<i class="fas fa-copy"></i>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<!-- Media toggles -->
|
||||
<div class="media-toggles mb-3">
|
||||
|
||||
+33
-1
@@ -894,11 +894,43 @@ input {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
/* Username input wrapper */
|
||||
.username-input-wrapper {
|
||||
position: relative;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.copy-username-btn {
|
||||
position: absolute;
|
||||
right: 10px;
|
||||
background: none;
|
||||
border: none;
|
||||
color: var(--text-muted);
|
||||
cursor: pointer;
|
||||
font-size: 16px;
|
||||
padding: 6px 8px;
|
||||
border-radius: var(--border-radius);
|
||||
transition: all var(--transition-base);
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.copy-username-btn:hover {
|
||||
color: var(--primary-light);
|
||||
background: rgba(59, 130, 246, 0.1);
|
||||
}
|
||||
|
||||
.copy-username-btn:active {
|
||||
transform: scale(0.9);
|
||||
}
|
||||
|
||||
/* Modern Input Styling */
|
||||
#usernameIn {
|
||||
display: block;
|
||||
width: 100%;
|
||||
padding: 14px 18px;
|
||||
padding: 14px 42px 14px 18px;
|
||||
font-size: 16px;
|
||||
color: var(--text-color);
|
||||
border: 2px solid var(--glass-border);
|
||||
|
||||
Reference in New Issue
Block a user