Refactor "paste mode" to "share mode"; Introduce a small clipboard panel instead of changing the xNoPeer instructions. This also enables the use of the header btns while sharing; Add possibility to change shared text before sending via a dialog; Add a setting that specifies whether that dialog should always be opened when sharing text

This commit is contained in:
schlagmichdoch 2023-11-24 16:25:30 +01:00
parent 5a2ec9c670
commit 0c2da78ed2
22 changed files with 908 additions and 506 deletions

View file

@ -41,61 +41,62 @@
<body translate="no">
<header class="row-reverse opacity-0">
<a href="#about" class="icon-button" data-i18n-key="header.about" data-i18n-attrs="title aria-label">
<svg class="icon">
<use xlink:href="#info-outline"></use>
</svg>
</a>
<div id="language-selector" class="icon-button" data-i18n-key="header.language-selector" data-i18n-attrs="title">
<svg class="icon">
<use xlink:href="#icon-language-selector"></use>
</svg>
</div>
<div id="theme-wrapper">
<div id="theme-auto" class="icon-button selected" data-i18n-key="header.theme-auto" data-i18n-attrs="title">
<div class="row-reverse">
<a href="#about" class="icon-button" data-i18n-key="header.about" data-i18n-attrs="title aria-label">
<svg class="icon">
<use xlink:href="#icon-theme-auto"></use>
<use xlink:href="#info-outline"></use>
</svg>
</a>
<div id="language-selector" class="icon-button" data-i18n-key="header.language-selector" data-i18n-attrs="title">
<svg class="icon">
<use xlink:href="#icon-language-selector"></use>
</svg>
</div>
<div>
<div id="theme-light" class="icon-button" data-i18n-key="header.theme-light" data-i18n-attrs="title">
<div id="theme-wrapper">
<div id="theme-auto" class="icon-button selected" data-i18n-key="header.theme-auto" data-i18n-attrs="title">
<svg class="icon">
<use xlink:href="#icon-theme-light"></use>
<use xlink:href="#icon-theme-auto"></use>
</svg>
</div>
<div id="theme-dark" class="icon-button" data-i18n-key="header.theme-dark" data-i18n-attrs="title">
<svg class="icon">
<use xlink:href="#icon-theme-dark"></use>
</svg>
<div>
<div id="theme-light" class="icon-button" data-i18n-key="header.theme-light" data-i18n-attrs="title">
<svg class="icon">
<use xlink:href="#icon-theme-light"></use>
</svg>
</div>
<div id="theme-dark" class="icon-button" data-i18n-key="header.theme-dark" data-i18n-attrs="title">
<svg class="icon">
<use xlink:href="#icon-theme-dark"></use>
</svg>
</div>
</div>
</div>
<div id="notification" class="icon-button" data-i18n-key="header.notification" data-i18n-attrs="title" hidden>
<svg class="icon">
<use xlink:href="#notifications"></use>
</svg>
</div>
<div id="install" class="icon-button" data-i18n-key="header.install" data-i18n-attrs="title" hidden>
<svg class="icon">
<use xlink:href="#homescreen"></use>
</svg>
</div>
<div id="pair-device" class="icon-button" data-i18n-key="header.pair-device" data-i18n-attrs="title">
<svg class="icon">
<use xlink:href="#pair-device-icon"></use>
</svg>
</div>
<div id="edit-paired-devices" class="icon-button" data-i18n-key="header.edit-paired-devices" data-i18n-attrs="title" hidden>
<svg class="icon">
<use xlink:href="#edit-pair-devices-icon"></use>
</svg>
</div>
<div id="join-public-room" class="icon-button" data-i18n-key="header.join-public-room" data-i18n-attrs="title">
<svg class="icon">
<use xlink:href="#public-room-icon"></use>
</svg>
</div>
</div>
<div id="notification" class="icon-button" data-i18n-key="header.notification" data-i18n-attrs="title" hidden>
<svg class="icon">
<use xlink:href="#notifications"></use>
</svg>
</div>
<div id="install" class="icon-button" data-i18n-key="header.install" data-i18n-attrs="title" hidden>
<svg class="icon">
<use xlink:href="#homescreen"></use>
</svg>
</div>
<div id="pair-device" class="icon-button" data-i18n-key="header.pair-device" data-i18n-attrs="title">
<svg class="icon">
<use xlink:href="#pair-device-icon"></use>
</svg>
</div>
<div id="edit-paired-devices" class="icon-button" data-i18n-key="header.edit-paired-devices" data-i18n-attrs="title" hidden>
<svg class="icon">
<use xlink:href="#edit-pair-devices-icon"></use>
</svg>
</div>
<div id="join-public-room" class="icon-button" data-i18n-key="header.join-public-room" data-i18n-attrs="title">
<svg class="icon">
<use xlink:href="#public-room-icon"></use>
</svg>
</div>
<div id="cancel-paste-mode" class="btn" data-i18n-key="header.cancel-paste-mode" data-i18n-attrs="text" hidden></div>
</header>
<!-- Center -->
<div id="center" class="opacity-0">
@ -106,9 +107,35 @@
<h2 data-i18n-key="instructions.no-peers-title" data-i18n-attrs="text"></h2>
<div data-i18n-key="instructions.no-peers-subtitle" data-i18n-attrs="text"></div>
</x-no-peers>
<x-instructions data-i18n-key="instructions.x-instructions" data-i18n-attrs="desktop mobile data-drop-peer data-drop-bg">
<p id="paste-filename"></p>
</x-instructions>
<x-instructions data-i18n-key="instructions.x-instructions" data-i18n-attrs="desktop mobile data-drop-peer data-drop-bg"></x-instructions>
<div class="share-panel panel column" hidden>
<div class="row">
<div class="thumb center">
<div class="text-thumb row" hidden>
<svg>
<use xlink:href="#font"></use>
</svg>
<svg>
<use xlink:href="#i-cursor"></use>
</svg>
</div>
<div class="file-thumb" hidden>
<svg>
<use xlink:href="#file"></use>
</svg>
</div>
<div class="image-thumb" hidden></div>
</div>
<div class="share-descriptor column p1">
<span class="descriptor-item"></span>
<span class="descriptor-other" hidden></span>
</div>
</div>
<div class="center btn-row">
<div class="cancel-btn btn btn-small btn-rounded btn-dark text-white" data-i18n-key="header.cancel-share-mode" data-i18n-attrs="text"></div>
<div class="edit-btn btn btn-small btn-rounded btn-dark text-white" data-i18n-key="header.edit-share-mode" data-i18n-attrs="text" hidden></div>
</div>
</div>
<div id="websocket-fallback" hidden>
<span data-i18n-key="footer.traffic" data-i18n-attrs="text"></span>
<span data-i18n-key="footer.routed" data-i18n-attrs="text"></span>
@ -130,11 +157,11 @@
<div class="known-as-wrapper">
<span data-i18n-key="footer.known-as" data-i18n-attrs="text"></span>
<div id="display-name" class="badge" data-i18n-key="footer.display-name" data-i18n-attrs="data-placeholder title" placeholder="Loading..." autocorrect="off" autocomplete="off" autocapitalize="none" spellcheck="false" contenteditable></div>
<svg id="edit-pen" class="icon">
<svg class="icon edit-pen">
<use xlink:href="#edit-pen-icon"></use>
</svg>
</div>
<div class="discovery-wrapper row">
<div class="discovery-wrapper panel border row">
<div class="row center">
<span data-i18n-key="footer.discovery" data-i18n-attrs="text"></span>
</div>
@ -224,7 +251,7 @@
<span>(Japanese)</span>
</button>
</div>
<div class="center row-reverse button-row">
<div class="center row-reverse btn-row">
<button class="btn btn-rounded btn-grey" type="button" data-i18n-key="dialogs.close" data-i18n-attrs="text" close></button>
</div>
</x-paper>
@ -267,7 +294,7 @@
<p class="font-subheading center text-center" data-i18n-key="dialogs.enter-key-from-another-device" data-i18n-attrs="text"></p>
</div>
</div>
<div class="button-row row-reverse">
<div class="btn-row row-reverse">
<button class="btn btn-rounded btn-grey" type="submit" data-i18n-key="dialogs.pair" data-i18n-attrs="text" disabled></button>
<button class="btn btn-rounded btn-grey" type="button" data-i18n-key="dialogs.cancel" data-i18n-attrs="text" close></button>
</div>
@ -291,7 +318,7 @@
<span data-i18n-key="dialogs.auto-accept-instructions-2" data-i18n-attrs="text"></span>
</p>
</div>
<div class="center row-reverse button-row">
<div class="center row-reverse btn-row">
<button class="btn btn-rounded btn-grey" type="button" data-i18n-key="dialogs.close" data-i18n-attrs="text" close></button>
</div>
</x-paper>
@ -336,7 +363,7 @@
<p class="font-subheading center text-center" data-i18n-key="dialogs.enter-room-id-from-another-device" data-i18n-attrs="text"></p>
</div>
</div>
<div class="center row-reverse button-row">
<div class="center row-reverse btn-row">
<button class="btn btn-rounded btn-grey" type="submit" data-i18n-key="dialogs.join" data-i18n-attrs="text" disabled></button>
<button class="btn btn-rounded btn-grey" type="button" data-i18n-key="dialogs.close" data-i18n-attrs="text" close></button>
<button class="btn btn-rounded btn-grey leave-room" type="button" data-i18n-key="dialogs.leave" data-i18n-attrs="text"></button>
@ -370,8 +397,8 @@
</div>
</div>
<div class="center file-preview"></div>
<div class="row-reverse center button-row">
<button id="accept-request" class="btn btn-rounded btn-grey" title="ENTER" data-i18n-key="dialogs.accept" data-i18n-attrs="text" autofocus></button>
<div class="row-reverse center btn-row">
<button id="accept-request" class="btn btn-rounded btn-grey" title="ENTER" data-i18n-key="dialogs.accept" data-i18n-attrs="text" autofocus disabled></button>
<button id="decline-request" class="btn btn-rounded btn-grey" title="ESCAPE" data-i18n-key="dialogs.decline" data-i18n-attrs="text"></button>
</div>
</x-paper>
@ -402,9 +429,9 @@
</div>
</div>
<div class="center file-preview"></div>
<div class="row-reverse center button-row">
<div class="row-reverse center btn-row">
<button id="share-btn" class="btn btn-rounded btn-grey" data-i18n-key="dialogs.share" data-i18n-attrs="text" hidden></button>
<button id="download-btn" class="btn btn-rounded btn-grey" data-i18n-key="dialogs.download" data-i18n-attrs="text" autofocus></button>
<button id="download-btn" class="btn btn-rounded btn-grey" data-i18n-key="dialogs.download" data-i18n-attrs="text" autofocus disabled></button>
<button class="btn btn-rounded btn-grey" data-i18n-key="dialogs.close" data-i18n-attrs="text" close></button>
</div>
</x-paper>
@ -430,10 +457,10 @@
</div>
<div class="row p1">
<div class="column fw">
<div id="text-input" class="fw textarea" role="textbox" data-i18n-key="dialogs.message" data-i18n-attrs="title placeholder" autofocus contenteditable></div>
<div class="fw textarea" role="textbox" data-i18n-key="dialogs.message" data-i18n-attrs="title placeholder" autofocus contenteditable></div>
</div>
</div>
<div class="button-row row-reverse">
<div class="btn-row row-reverse">
<button class="btn btn-rounded btn-grey" type="submit" title="CTRL/⌘ + ENTER" data-i18n-key="dialogs.send" data-i18n-attrs="text" disabled></button>
<button class="btn btn-rounded btn-grey" type="button" title="ESCAPE" data-i18n-key="dialogs.cancel" data-i18n-attrs="text" close></button>
</div>
@ -459,20 +486,53 @@
<div id="text" class="textarea"></div>
</div>
</div>
<div class="row-reverse center button-row">
<div class="row-reverse center btn-row">
<button id="copy" class="btn btn-rounded btn-grey" title="CTRL/⌘ + C" data-i18n-key="dialogs.copy" data-i18n-attrs="text"></button>
<button id="close" class="btn btn-rounded btn-grey" title="ESCAPE" data-i18n-key="dialogs.close" data-i18n-attrs="text"></button>
</div>
</x-paper>
</x-background>
</x-dialog>
<!-- Share Text Dialog -->
<x-dialog id="share-text-dialog">
<x-background class="full center">
<x-paper shadow="2">
<div class="row center">
<div class="column">
<h2 class="center" data-i18n-key="dialogs.share-text-title" data-i18n-attrs="text"></h2>
</div>
</div>
<div class="row center p1">
<div class="column">
<div class="text-center">
<span data-i18n-key="dialogs.share-text-subtitle" data-i18n-attrs="text"></span>
</div>
</div>
</div>
<div class="row p1">
<div class="column fw">
<div class="fw textarea" role="textbox" data-i18n-key="dialogs.message" data-i18n-attrs="title placeholder" contenteditable></div>
</div>
</div>
<div class="row center p1">
<label class="auto-accept pointer">
<span data-i18n-key="dialogs.share-text-checkbox" data-i18n-attrs="text"></span>
<input type="checkbox">
</label>
</div>
<div class="btn-row row-reverse">
<button class="btn btn-rounded btn-grey" type="submit" title="CTRL/⌘ + ENTER" data-i18n-key="dialogs.approve" data-i18n-attrs="text" autofocus disabled></button>
</div>
</x-paper>
</x-background>
</x-dialog>
<!-- base64 Paste Dialog -->
<x-dialog id="base64-paste-dialog">
<x-background class="full center">
<x-paper shadow="2">
<button class="btn btn-rounded btn-grey center" id="base64-paste-btn" title="Paste"></button>
<div class="textarea" placeholder="Paste here to send files" title="CMD/⌘ + V" contenteditable hidden></div>
<div class="row-reverse center button-row">
<div class="row-reverse center btn-row">
<button class="btn btn-rounded btn-grey" data-i18n-key="dialogs.close" data-i18n-attrs="text" close></button>
</div>
</x-paper>
@ -480,7 +540,14 @@
</x-dialog>
<!-- Toast -->
<div class="toast-container full center">
<x-toast id="toast" class="row center" shadow="1"></x-toast>
<x-toast id="toast" shadow="1">
<span class="center"></span>
<div class="icon-button" data-i18n-key="dialogs.close-toast" data-i18n-attrs="title">
<svg class="icon">
<use xlink:href="#close-icon"></use>
</svg>
</div>
</x-toast>
</div>
<!-- About Page -->
<x-about id="about" class="full center column">
@ -555,9 +622,9 @@
<symbol id="github">
<path d="M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12"></path>
</symbol>
<g id="notifications">
<symbol id="notifications">
<path d="M12 22c1.1 0 2-.9 2-2h-4c0 1.1.89 2 2 2zm6-6v-5c0-3.07-1.64-5.64-4.5-6.32V4c0-.83-.67-1.5-1.5-1.5s-1.5.67-1.5 1.5v.68C7.63 5.36 6 7.92 6 11v5l-2 2v1h16v-1l-2-2z"></path>
</g>
</symbol>
<symbol id="homescreen">
<path fill="none" d="M0 0h24v24H0V0z"></path>
<path d="M18 1.01L8 1c-1.1 0-2 .9-2 2v3h2V5h10v14H8v-1H6v3c0 1.1.9 2 2 2h10c1.1 0 2-.9 2-2V3c0-1.1-.9-1.99-2-1.99zM10 15h2V8H5v2h3.59L3 15.59 4.41 17 10 11.41z"></path>
@ -598,6 +665,18 @@
<!--! Font Awesome Free 6.4.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2023 Fonticons, Inc. -->
<path d="M0 128C0 92.7 28.7 64 64 64H256h48 16H576c35.3 0 64 28.7 64 64V384c0 35.3-28.7 64-64 64H320 304 256 64c-35.3 0-64-28.7-64-64V128zm320 0V384H576V128H320zM178.3 175.9c-3.2-7.2-10.4-11.9-18.3-11.9s-15.1 4.7-18.3 11.9l-64 144c-4.5 10.1 .1 21.9 10.2 26.4s21.9-.1 26.4-10.2l8.9-20.1h73.6l8.9 20.1c4.5 10.1 16.3 14.6 26.4 10.2s14.6-16.3 10.2-26.4l-64-144zM160 233.2L179 276H141l19-42.8zM448 164c11 0 20 9 20 20v4h44 16c11 0 20 9 20 20s-9 20-20 20h-2l-1.6 4.5c-8.9 24.4-22.4 46.6-39.6 65.4c.9 .6 1.8 1.1 2.7 1.6l18.9 11.3c9.5 5.7 12.5 18 6.9 27.4s-18 12.5-27.4 6.9l-18.9-11.3c-4.5-2.7-8.8-5.5-13.1-8.5c-10.6 7.5-21.9 14-34 19.4l-3.6 1.6c-10.1 4.5-21.9-.1-26.4-10.2s.1-21.9 10.2-26.4l3.6-1.6c6.4-2.9 12.6-6.1 18.5-9.8l-12.2-12.2c-7.8-7.8-7.8-20.5 0-28.3s20.5-7.8 28.3 0l14.6 14.6 .5 .5c12.4-13.1 22.5-28.3 29.8-45H448 376c-11 0-20-9-20-20s9-20 20-20h52v-4c0-11 9-20 20-20z"></path>
</symbol>
<symbol id="i-cursor" viewBox="-180 0 640 512">
<!--!Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2023 Fonticons, Inc.-->
<path d="M.1 29.3C-1.4 47 11.7 62.4 29.3 63.9l8 .7C70.5 67.3 96 95 96 128.3V224H64c-17.7 0-32 14.3-32 32s14.3 32 32 32H96v95.7c0 33.3-25.5 61-58.7 63.8l-8 .7C11.7 449.6-1.4 465 .1 482.7s16.9 30.7 34.5 29.2l8-.7c34.1-2.8 64.2-18.9 85.4-42.9c21.2 24 51.2 40.1 85.4 42.9l8 .7c17.6 1.5 33.1-11.6 34.5-29.2s-11.6-33.1-29.2-34.5l-8-.7C185.5 444.7 160 417 160 383.7V288h32c17.7 0 32-14.3 32-32s-14.3-32-32-32H160V128.3c0-33.3 25.5-61 58.7-63.8l8-.7c17.6-1.5 30.7-16.9 29.2-34.5S239-1.4 221.3 .1l-8 .7C179.2 3.6 149.2 19.7 128 43.7c-21.2-24-51.2-40-85.4-42.9l-8-.7C17-1.4 1.6 11.7 .1 29.3z"/>
</symbol>
<symbol id="font" viewBox="-100 0 640 512">
<!--!Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2023 Fonticons, Inc.-->
<path d="M254 52.8C249.3 40.3 237.3 32 224 32s-25.3 8.3-30 20.8L57.8 416H32c-17.7 0-32 14.3-32 32s14.3 32 32 32h96c17.7 0 32-14.3 32-32s-14.3-32-32-32h-1.8l18-48H303.8l18 48H320c-17.7 0-32 14.3-32 32s14.3 32 32 32h96c17.7 0 32-14.3 32-32s-14.3-32-32-32H390.2L254 52.8zM279.8 304H168.2L224 155.1 279.8 304z"></path>
</symbol>
<symbol id="file" viewBox="-130 0 650 530">
<!--!Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2023 Fonticons, Inc.-->
<path d="M320 464c8.8 0 16-7.2 16-16V160H256c-17.7 0-32-14.3-32-32V48H64c-8.8 0-16 7.2-16 16V448c0 8.8 7.2 16 16 16H320zM0 64C0 28.7 28.7 0 64 0H229.5c17 0 33.3 6.7 45.3 18.7l90.5 90.5c12 12 18.7 28.3 18.7 45.3V448c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V64z"/>
</symbol>
</svg>
<!-- Scripts -->

View file

@ -55,7 +55,7 @@
"click-to-show": "اضغط للعرض"
},
"header": {
"cancel-paste-mode": "تمّ",
"cancel-share-mode": "تمّ",
"theme-auto_title": "تكيٌف المظهر مع النظام",
"install_title": "تثبيت PairDrop",
"theme-dark_title": "إستخدام دائما المظهر المظلم",
@ -70,12 +70,12 @@
},
"instructions": {
"x-instructions_mobile": "انقر لإرسال الملفات أو انقر لفترة طويلة لإرسال رسالة",
"click-to-send": "انقر للإرسال",
"activate-paste-mode-and-other-files": "و{{count}} ملفات أخرى",
"tap-to-send": "انقر للإرسال",
"activate-paste-mode-base": "افتح PairDrop على الأجهزة الأخرى للإرسال",
"x-instructions-share-mode_desktop": "انقر للإرسال",
"activate-share-mode-and-other-files-plural": "و{{count}} ملفات أخرى",
"x-instructions-share-mode_mobile": "انقر للإرسال",
"activate-share-mode-base": "افتح PairDrop على الأجهزة الأخرى للإرسال",
"no-peers-subtitle": "قم بإقران الأجهزة أو ادخل إلى غرفة عامة لتتمكن من إكتشافها على الشبكات الأخرى",
"activate-paste-mode-shared-text": "النص المشترك",
"activate-share-mode-shared-text": "النص المشترك",
"x-instructions_desktop": "انقر لإرسال الملفات أو انقر بزر الماوس الأيمن لإرسال رسالة",
"no-peers-title": "افتح PairDrop على الأجهزة الأخرى لإرسال الملفات",
"x-instructions_data-drop-bg": "حرر لتحديد المستلم",
@ -84,7 +84,7 @@
},
"peer-ui": {
"processing": "مُعالجة …",
"click-to-send-paste-mode": "انقر للإرسال {{descriptor}}",
"click-to-send-share-mode": "انقر للإرسال {{descriptor}}",
"click-to-send": "انقر لإرسال الملفات أو انقر بزر الماوس الأيمن لإرسال رسالة",
"waiting": "يُرجى الإنتظار…",
"connection-hash": "للتحقق من أمان التشفير الشامل، قم بمقارنة رقم الأمان هذا على كلا الجهازين",

View file

@ -9,7 +9,7 @@
"theme-auto_title": "Systemstil verwenden",
"theme-dark_title": "Immer dunklen Stil verwenden",
"theme-light_title": "Immer hellen Stil verwenden",
"cancel-paste-mode": "Fertig",
"cancel-share-mode": "Fertig",
"language-selector_title": "Sprache Wählen",
"join-public-room_title": "Öffentlichen Raum temporär betreten"
},
@ -138,14 +138,14 @@
"no-peers-title": "Öffne PairDrop auf anderen Geräten, um Dateien zu senden",
"no-peers_data-drop-bg": "Hier ablegen, um Empfänger auszuwählen",
"no-peers-subtitle": "Kopple Geräte oder besuche einen öffentlichen Raum, damit du in anderen Netzwerken sichtbar bist",
"click-to-send": "Klicke zum Senden von",
"tap-to-send": "Tippe zum Senden von",
"x-instructions-share-mode_desktop": "Klicke zum Senden von",
"x-instructions-share-mode_mobile": "Tippe zum Senden von",
"x-instructions_data-drop-peer": "Hier ablegen, um an Peer zu senden",
"x-instructions_data-drop-bg": "Loslassen um Empfänger auszuwählen",
"x-instructions_mobile": "Tippe, um Dateien zu senden oder tippe lange, um Nachrichten zu senden",
"activate-paste-mode-base": "Öffne PairDrop auf anderen Geräten zum Senden von",
"activate-paste-mode-and-other-files": "und {{count}} anderen Dateien",
"activate-paste-mode-shared-text": "freigegebenem Text"
"activate-share-mode-base": "Öffne PairDrop auf anderen Geräten zum Senden von",
"activate-share-mode-and-other-files-plural": "und {{count}} anderen Dateien",
"activate-share-mode-shared-text": "freigegebenem Text"
},
"document-titles": {
"file-transfer-requested": "Dateiübertragung angefordert",
@ -159,7 +159,7 @@
"click-to-send": "Klicke, um Dateien zu senden oder benutze einen Rechtsklick, um eine Textnachricht zu senden",
"connection-hash": "Um die Ende-zu-Ende Verschlüsselung zu verifizieren, vergleiche die Sicherheitsnummer auf beiden Geräten",
"waiting": "Warte…",
"click-to-send-paste-mode": "Klicken um {{descriptor}} zu senden",
"click-to-send-share-mode": "Klicken um {{descriptor}} zu senden",
"transferring": "Übertragung läuft…",
"processing": "Bearbeitung läuft…",
"preparing": "Vorbereitung läuft…"

View file

@ -11,7 +11,8 @@
"pair-device_title": "Pair your devices permanently",
"edit-paired-devices_title": "Edit paired devices",
"join-public-room_title": "Join public room temporarily",
"cancel-paste-mode": "Done"
"cancel-share-mode": "Cancel",
"edit-share-mode": "Edit"
},
"instructions": {
"no-peers_data-drop-bg": "Release to select recipient",
@ -21,11 +22,14 @@
"x-instructions_mobile": "Tap to send files or long tap to send a message",
"x-instructions_data-drop-peer": "Release to send to peer",
"x-instructions_data-drop-bg": "Release to select recipient",
"click-to-send": "Click to send",
"tap-to-send": "Tap to send",
"activate-paste-mode-base": "Open PairDrop on other devices to send",
"activate-paste-mode-and-other-files": "and {{count}} other files",
"activate-paste-mode-shared-text": "shared text",
"x-instructions-share-mode_desktop": "Click to send {{descriptor}}",
"x-instructions-share-mode_mobile": "Tap to send {{descriptor}}",
"activate-share-mode-base": "Open PairDrop on other devices to send",
"activate-share-mode-and-other-file": "and 1 other file",
"activate-share-mode-and-other-files-plural": "and {{count}} other files",
"activate-share-mode-shared-text": "shared text",
"activate-share-mode-shared-file": "shared file",
"activate-share-mode-shared-files-plural": "{{count}} shared files",
"webrtc-requirement": "To use PairDrop on this instance, WebRTC must be enabled!"
},
"footer": {
@ -94,7 +98,12 @@
"language-selector-title": "Set Language",
"system-language": "System Language",
"public-room-qr-code_title": "Click to copy link to public room",
"pair-devices-qr-code_title": "Click to copy link to pair this device"
"pair-devices-qr-code_title": "Click to copy link to pair this device",
"approve": "approve",
"share-text-title": "Share Text Message",
"share-text-subtitle": "Edit message before sending:",
"share-text-checkbox": "Always show this dialog when sharing text",
"close-toast_title": "Close notification"
},
"about": {
"close-about_aria-label": "Close About PairDrop",
@ -156,7 +165,7 @@
"message-received-plural": "{{count}} Messages Received"
},
"peer-ui": {
"click-to-send-paste-mode": "Click to send {{descriptor}}",
"click-to-send-share-mode": "Click to send {{descriptor}}",
"click-to-send": "Click to send files or right click to send a message",
"connection-hash": "To verify the security of the end-to-end encryption, compare this security number on both devices",
"preparing": "Preparing…",

View file

@ -4,7 +4,7 @@
"language-selector_title": "Configurar Idioma",
"about_title": "Sobre PairDrop",
"about_aria-label": "Abrir Sobre PairDrop",
"cancel-paste-mode": "Listo",
"cancel-share-mode": "Listo",
"install_title": "Instalar PairDrop",
"theme-dark_title": "Siempre usar tema oscuro",
"pair-device_title": "Empareja tus dispositivos permanentemente",
@ -73,12 +73,12 @@
},
"instructions": {
"x-instructions_mobile": "Toque para enviar archivos o toque prologádamente para enviar un mensaje",
"click-to-send": "Haga clic para enviar",
"activate-paste-mode-and-other-files": "y {{count}} archivos diferentes",
"tap-to-send": "Toca para enviar",
"activate-paste-mode-base": "Abra PairDrop en otros dispositivos para enviar",
"x-instructions-share-mode_desktop": "Haga clic para enviar",
"activate-share-mode-and-other-files-plural": "y {{count}} archivos diferentes",
"x-instructions-share-mode_mobile": "Toca para enviar",
"activate-share-mode-base": "Abra PairDrop en otros dispositivos para enviar",
"no-peers-subtitle": "Empareje dispositivos o ingrese a una sala pública para que lo puedan encontrar en otras redes",
"activate-paste-mode-shared-text": "texto compartido",
"activate-share-mode-shared-text": "texto compartido",
"x-instructions_desktop": "Haga clic para enviar archivos o haga clic derecho para enviar un mensaje",
"no-peers-title": "Abra PairDrop en otros dispositivos para enviar archivos",
"x-instructions_data-drop-peer": "Liberar para enviar a un par",
@ -87,7 +87,7 @@
},
"peer-ui": {
"processing": "Procesando…",
"click-to-send-paste-mode": "Haga clic para enviar {{descriptor}}",
"click-to-send-share-mode": "Haga clic para enviar {{descriptor}}",
"click-to-send": "Haga clic para enviar archivos o haga clic derecho para enviar un mensaje",
"waiting": "Esperando…",
"connection-hash": "Para verificar la seguridad del cifrado de extremo a extremo, compare este número de seguridad en ambos dispositivos",

View file

@ -11,7 +11,7 @@
"pair-device_title": "Associez vos appareils de manière permanente",
"edit-paired-devices_title": "Gérer les appareils couplés",
"join-public-room_title": "Rejoindre temporairement la salle publique",
"cancel-paste-mode": "Terminé"
"cancel-share-mode": "Terminé"
},
"instructions": {
"no-peers_data-drop-bg": "Déposer pour choisir le destinataire",
@ -21,11 +21,11 @@
"x-instructions_mobile": "Appuyez pour envoyer des fichiers ou appuyez longuement pour envoyer un message",
"x-instructions_data-drop-peer": "Déposer pour envoyer au destinataire",
"x-instructions_data-drop-bg": "Lâcher pour choisir le destinataire",
"click-to-send": "Cliquez pour envoyer",
"tap-to-send": "Appuyez pour envoyer",
"activate-paste-mode-base": "Ouvrez PairDrop sur d'autres appareils pour envoyer",
"activate-paste-mode-and-other-files": "et {{count}} autres fichiers",
"activate-paste-mode-shared-text": "texte partagé"
"x-instructions-share-mode_desktop": "Cliquez pour envoyer",
"x-instructions-share-mode_mobile": "Appuyez pour envoyer",
"activate-share-mode-base": "Ouvrez PairDrop sur d'autres appareils pour envoyer",
"activate-share-mode-and-other-files-plural": "et {{count}} autres fichiers",
"activate-share-mode-shared-text": "texte partagé"
},
"footer": {
"known-as": "Vous êtes connu comme :",
@ -149,7 +149,7 @@
"message-received-plural": "{{count}} Messages reçus"
},
"peer-ui": {
"click-to-send-paste-mode": "Cliquez pour envoyer {{descriptor}}",
"click-to-send-share-mode": "Cliquez pour envoyer {{descriptor}}",
"click-to-send": "Cliquez pour envoyer des fichiers ou faites un clic droit pour envoyer un message",
"connection-hash": "Pour vérifier la sécurité du chiffrement de bout en bout, comparez ce numéro de sécurité sur les deux appareils",
"preparing": "Préparation…",

View file

@ -58,7 +58,7 @@
"room-url-copied-to-clipboard": "Tautan ke ruang publik disalin ke papan klip"
},
"header": {
"cancel-paste-mode": "Selesai",
"cancel-share-mode": "Selesai",
"theme-auto_title": "Sesuaikan tema dengan sistem",
"install_title": "Instal PairDrop",
"theme-dark_title": "Selalu gunakan tema gelap",
@ -73,12 +73,12 @@
},
"instructions": {
"x-instructions_mobile": "Ketuk untuk mengirim file atau ketuk lama untuk mengirim pesan",
"click-to-send": "Klik untuk mengirim",
"activate-paste-mode-and-other-files": "dan {{count}} file lainnya",
"tap-to-send": "Ketuk untuk mengirim",
"activate-paste-mode-base": "Buka PairDrop di perangkat lain untuk berkirim",
"x-instructions-share-mode_desktop": "Klik untuk mengirim",
"activate-share-mode-and-other-files-plural": "dan {{count}} file lainnya",
"x-instructions-share-mode_mobile": "Ketuk untuk mengirim",
"activate-share-mode-base": "Buka PairDrop di perangkat lain untuk berkirim",
"no-peers-subtitle": "Pasangkan perangkat atau masuk ke ruang publik agar dapat terdeteksi di jaringan lain",
"activate-paste-mode-shared-text": "teks bersama",
"activate-share-mode-shared-text": "teks bersama",
"x-instructions_desktop": "Klik untuk mengirim file atau klik kanan untuk mengirim pesan",
"no-peers-title": "Buka PairDrop di perangkat lain untuk berkirim file",
"x-instructions_data-drop-peer": "Lepaskan untuk mengirim ke rekan",
@ -87,7 +87,7 @@
},
"peer-ui": {
"processing": "Memproses…",
"click-to-send-paste-mode": "Klik untuk mengirim {{descriptor}}",
"click-to-send-share-mode": "Klik untuk mengirim {{descriptor}}",
"click-to-send": "Klik untuk mengirim file atau klik kanan untuk mengirim pesan",
"waiting": "Menunggu…",
"connection-hash": "Untuk memverifikasi keamanan enkripsi end-to-end, bandingkan nomor keamanan ini pada kedua perangkat",

View file

@ -15,7 +15,7 @@
"known-as": "Sei visibile come:"
},
"header": {
"cancel-paste-mode": "Fatto",
"cancel-share-mode": "Fatto",
"theme-auto_title": "Adatta il tema al sistema automaticamente",
"install_title": "Installa PairDrop",
"theme-dark_title": "Usa sempre il tema scuro",
@ -30,12 +30,12 @@
},
"instructions": {
"x-instructions_mobile": "Tocca per inviare file o tocco prolungato per inviare un messaggio",
"click-to-send": "Clicca per inviare",
"activate-paste-mode-and-other-files": "e altri {{count}} files",
"tap-to-send": "Tocca per inviare",
"activate-paste-mode-base": "Apri PairDrop su altri dispositivi per inviare",
"x-instructions-share-mode_desktop": "Clicca per inviare",
"activate-share-mode-and-other-files-plural": "e altri {{count}} files",
"x-instructions-share-mode_mobile": "Tocca per inviare",
"activate-share-mode-base": "Apri PairDrop su altri dispositivi per inviare",
"no-peers-subtitle": "Abbina dispositivi o entra in una stanza pubblica per essere rilevabile su altre reti",
"activate-paste-mode-shared-text": "testo condiviso",
"activate-share-mode-shared-text": "testo condiviso",
"x-instructions_desktop": "Clicca per inviare files o usa il tasto destro per inviare un messaggio",
"no-peers-title": "Apri PairDrop su altri dispositivi per inviare files",
"x-instructions_data-drop-peer": "Rilascia per inviare al peer",
@ -139,7 +139,7 @@
},
"peer-ui": {
"processing": "Elaborazione…",
"click-to-send-paste-mode": "Clicca per inviare {{descriptor}}",
"click-to-send-share-mode": "Clicca per inviare {{descriptor}}",
"click-to-send": "Clicca per inviare files o tasto destro per inviare un messaggio",
"waiting": "In attesa…",
"connection-hash": "Per verificare la sicurezza della crittografia end-to-end, confronta questo numero di sicurezza su entrambi i dispositivi",

View file

@ -58,7 +58,7 @@
"room-url-copied-to-clipboard": "パブリックルームへのリンクをクリップボードにコピーしました"
},
"header": {
"cancel-paste-mode": "完了",
"cancel-share-mode": "完了",
"theme-auto_title": "テーマをシステムの設定に自動的に合わせる",
"install_title": "PairDropをインストール",
"theme-dark_title": "常にダークテーマを使用する",
@ -73,12 +73,12 @@
},
"instructions": {
"x-instructions_mobile": "タップしてファイルを送信または長押ししてメッセージを送信します",
"click-to-send": "クリックして送信",
"activate-paste-mode-and-other-files": "とその他{{count}}個のファイル",
"tap-to-send": "タップして送信",
"activate-paste-mode-base": "他のデバイスでPairDropを開いて送信します",
"x-instructions-share-mode_desktop": "クリックして送信",
"activate-share-mode-and-other-files-plural": "とその他{{count}}個のファイル",
"x-instructions-share-mode_mobile": "タップして送信",
"activate-share-mode-base": "他のデバイスでPairDropを開いて送信します",
"no-peers-subtitle": "デバイスをペア設定するかパブリックルームに参加すると、他のネットワーク上からも見つけられるようになります",
"activate-paste-mode-shared-text": "共有されたテキスト",
"activate-share-mode-shared-text": "共有されたテキスト",
"x-instructions_desktop": "左クリックしてファイルを送信または右クリックしてメッセージを送信します",
"no-peers-title": "他のデバイスでPairDropを開いてファイルを送信します",
"x-instructions_data-drop-peer": "離すとこの相手に送信します",
@ -87,7 +87,7 @@
},
"peer-ui": {
"processing": "処理中…",
"click-to-send-paste-mode": "クリックして{{descriptor}}を送信",
"click-to-send-share-mode": "クリックして{{descriptor}}を送信",
"click-to-send": "クリックしてファイルを送信または右クリックしてメッセージを送信します",
"waiting": "待機中…",
"connection-hash": "エンドツーエンド暗号化のセキュリティを確認するには、両方のデバイスのセキュリティナンバーを確認します",

View file

@ -7,7 +7,7 @@
"theme-light_title": "Alltid bruk lys drakt",
"theme-dark_title": "Alltid bruk mørk drakt",
"notification_title": "Skru på merknader",
"cancel-paste-mode": "Ferdig",
"cancel-share-mode": "Ferdig",
"install_title": "Installer PairDrop",
"pair-device_title": "Sammenkoble enhet"
},
@ -25,15 +25,15 @@
"x-instructions_desktop": "Klikk for å sende filer, eller høyreklikk for å sende en melding",
"x-instructions_mobile": "Trykk for å sende filer, eller lang-trykk for å sende en melding",
"x-instructions_data-drop-bg": "Slipp for å velge mottager",
"click-to-send": "Klikk for å sende",
"x-instructions-share-mode_desktop": "Klikk for å sende",
"no-peers_data-drop-bg": "Slipp for å velge mottager",
"no-peers-title": "Åpne PairDrop på andre enheter for å sende filer",
"no-peers-subtitle": "Sammenkoble enheter for å kunne oppdages på andre nettverk",
"x-instructions_data-drop-peer": "Slipp for å sende til likemann",
"tap-to-send": "Trykk for å sende",
"activate-paste-mode-base": "Åpne PairDrop på andre enheter for å sende",
"activate-paste-mode-and-other-files": "og {{count}} andre filer",
"activate-paste-mode-shared-text": "delt tekst"
"x-instructions-share-mode_mobile": "Trykk for å sende",
"activate-share-mode-base": "Åpne PairDrop på andre enheter for å sende",
"activate-share-mode-and-other-files-plural": "og {{count}} andre filer",
"activate-share-mode-shared-text": "delt tekst"
},
"dialogs": {
"input-key-on-this-device": "Skriv inn denne nøkkelen på en annen enhet",
@ -132,7 +132,7 @@
"processing": "Behandler …",
"transferring": "Overfører …",
"click-to-send": "Klikk for å sende filer, eller høyreklikk for å sende en melding",
"click-to-send-paste-mode": "Klikk for å sende {{descriptor}}",
"click-to-send-share-mode": "Klikk for å sende {{descriptor}}",
"connection-hash": "Sammenlign dette sikkerhetsnummeret på begge enhetene for å bekrefte ende-til-ende -krypteringen."
}
}

View file

@ -55,7 +55,7 @@
"click-to-show": "Klik om te tonen"
},
"header": {
"cancel-paste-mode": "Klaar",
"cancel-share-mode": "Klaar",
"theme-auto_title": "Gebruik systeemstijl",
"install_title": "PairDrop installeren",
"theme-dark_title": "Altijd donkere modus gebruiken",
@ -70,12 +70,12 @@
},
"instructions": {
"x-instructions_mobile": "Tik om bestanden te versturen of houdt vast om een bericht te sturen",
"click-to-send": "Klik om te verzenden",
"activate-paste-mode-and-other-files": "en {{count}} andere bestanden",
"tap-to-send": "Tik om te verzenden",
"activate-paste-mode-base": "Open PairDrop op andere apparaten om te verzenden",
"x-instructions-share-mode_desktop": "Klik om te verzenden",
"activate-share-mode-and-other-files-plural": "en {{count}} andere bestanden",
"x-instructions-share-mode_mobile": "Tik om te verzenden",
"activate-share-mode-base": "Open PairDrop op andere apparaten om te verzenden",
"no-peers-subtitle": "Koppel apparaten of betreed een openbare ruimte om op andere netwerken zichtbaar te worden",
"activate-paste-mode-shared-text": "gedeelde tekst",
"activate-share-mode-shared-text": "gedeelde tekst",
"x-instructions_desktop": "Klik om bestanden te versturen of rechtsklik om een bericht te sturen",
"no-peers-title": "Open PairDrop op andere apparaten om bestanden te versturen",
"x-instructions_data-drop-peer": "Laat los om naar peer te versturen",
@ -84,7 +84,7 @@
},
"peer-ui": {
"processing": "Verwerken…",
"click-to-send-paste-mode": "Klik om {{descriptor}} te versturen",
"click-to-send-share-mode": "Klik om {{descriptor}} te versturen",
"click-to-send": "Klik om bestanden te versturen of rechtsklik om een bericht te versturen",
"waiting": "Wachten…",
"connection-hash": "Vergelijk dit veiligheidsnummer op beide apparaten, om de beveiliging van de eind-tot-eind versleuteling te verifiëren",

View file

@ -58,7 +58,7 @@
"room-url-copied-to-clipboard": "Link către sala publică copiat în clipboard"
},
"header": {
"cancel-paste-mode": "Gata",
"cancel-share-mode": "Gata",
"theme-auto_title": "Adaptează tema la sistem",
"install_title": "Instalează PairDrop",
"theme-dark_title": "Utilizați mereu tema întunecoasă",
@ -73,12 +73,12 @@
},
"instructions": {
"x-instructions_mobile": "Atingeți pentru a trimite fișiere sau atingeți lung pentru a trimite un mesaj",
"click-to-send": "Clic pentru a trimite",
"activate-paste-mode-and-other-files": "și {{count}} alte fișiere",
"tap-to-send": "Atinge pentru a trimite",
"activate-paste-mode-base": "Deschideți PairDrop pe alte dispozitive pentru a trimite",
"x-instructions-share-mode_desktop": "Clic pentru a trimite",
"activate-share-mode-and-other-files-plural": "și {{count}} alte fișiere",
"x-instructions-share-mode_mobile": "Atinge pentru a trimite",
"activate-share-mode-base": "Deschideți PairDrop pe alte dispozitive pentru a trimite",
"no-peers-subtitle": "Împerecheați dispozitive sau intrați într-o cameră publică pentru a fi descoperit în alte rețele",
"activate-paste-mode-shared-text": "text partajat",
"activate-share-mode-shared-text": "text partajat",
"x-instructions_desktop": "Dați clic pentru a trimite fișiere sau dați clic dreapta pentru a trimite un mesaj",
"no-peers-title": "Deschideți PairDrop pe alte dispozitive pentru a trimite fișiere",
"x-instructions_data-drop-peer": "Eliberare pentru a trimite la peer",
@ -87,7 +87,7 @@
},
"peer-ui": {
"processing": "Procesarea…",
"click-to-send-paste-mode": "Apasă pentru a trimite {{descriptor}}",
"click-to-send-share-mode": "Apasă pentru a trimite {{descriptor}}",
"click-to-send": "Apasă pentru a trimite fișiere sau apasă cu butonul din dreapta pentru a trimite un mesaj",
"waiting": "Așteptând…",
"connection-hash": "Pentru a verifica securitatea criptării end-to-end, comparați acest număr de securitate pe ambele dispozitive",

View file

@ -3,7 +3,7 @@
"about_aria-label": "Открыть страницу \"О сервисе\"",
"pair-device_title": "Связать ваши устройства навсегда",
"install_title": "Установить PairDrop",
"cancel-paste-mode": "Выполнено",
"cancel-share-mode": "Выполнено",
"edit-paired-devices_title": "Редактировать связанные устройства",
"notification_title": "Включить уведомления",
"about_title": "О сервисе",
@ -16,16 +16,16 @@
"instructions": {
"x-instructions_desktop": "Нажмите, чтобы отправить файлы, или щелкните правой кнопкой мыши, чтобы отправить сообщение",
"no-peers_data-drop-bg": "Отпустите, чтобы выбрать получателя",
"click-to-send": "Нажмите, чтобы отправить",
"x-instructions-share-mode_desktop": "Нажмите, чтобы отправить",
"x-instructions_data-drop-bg": "Отпустите, чтобы выбрать получателя",
"tap-to-send": "Прикоснитесь, чтобы отправить",
"x-instructions-share-mode_mobile": "Прикоснитесь, чтобы отправить",
"x-instructions_data-drop-peer": "Отпустите, чтобы послать узлу",
"x-instructions_mobile": "Прикоснитесь коротко, чтобы отправить файлы, или долго, чтобы отправить сообщение",
"no-peers-title": "Откройте PairDrop на других устройствах, чтобы отправить файлы",
"no-peers-subtitle": "Свяжите устройства или войдите в публичную комнату, чтобы вас могли обнаружить из других сетей",
"activate-paste-mode-and-other-files": "и {{count}} других файлов",
"activate-paste-mode-base": "Откройте PairDrop на других устройствах, чтобы отправить",
"activate-paste-mode-shared-text": "общий текст"
"activate-share-mode-and-other-files-plural": "и {{count}} других файлов",
"activate-share-mode-base": "Откройте PairDrop на других устройствах, чтобы отправить",
"activate-share-mode-shared-text": "общий текст"
},
"footer": {
"display-name_data-placeholder": "Загрузка…",
@ -148,7 +148,7 @@
"room-url-copied-to-clipboard": "Ссылка на публичную комнату была скопирована в буфер обмена"
},
"peer-ui": {
"click-to-send-paste-mode": "Нажмите, чтобы отправить {{descriptor}}",
"click-to-send-share-mode": "Нажмите, чтобы отправить {{descriptor}}",
"preparing": "Подготовка…",
"transferring": "Передача…",
"processing": "Обработка…",

View file

@ -9,19 +9,19 @@
"install_title": "PairDrop'u Yükle",
"pair-device_title": "Cihazı kalıcı olarak eşle",
"edit-paired-devices_title": "Eşleştirilmiş cihazları düzenle",
"cancel-paste-mode": "Bitti",
"cancel-share-mode": "Bitti",
"join-public-room_title": "Geçici olarak genel odaya katılın",
"language-selector_title": "Dili Seç"
},
"instructions": {
"no-peers_data-drop-bg": "Alıcıyı seçmek için bırakın",
"x-instructions_mobile": "Dosya göndermek için dokun veya mesaj göndermek için uzun dokun",
"click-to-send": "Göndermek için tıkla",
"activate-paste-mode-and-other-files": "ve {{count}} diğer dosya",
"tap-to-send": "Göndermek için dokun",
"activate-paste-mode-base": "Göndermek için diğer cihazlarda PairDrop'u açın",
"x-instructions-share-mode_desktop": "Göndermek için tıkla",
"activate-share-mode-and-other-files-plural": "ve {{count}} diğer dosya",
"x-instructions-share-mode_mobile": "Göndermek için dokun",
"activate-share-mode-base": "Göndermek için diğer cihazlarda PairDrop'u açın",
"no-peers-subtitle": "Diğer ağlarda keşfedilebilir olmak için cihazları eşleştirin veya ortak bir odaya girin",
"activate-paste-mode-shared-text": "paylaşılan metin",
"activate-share-mode-shared-text": "paylaşılan metin",
"x-instructions_desktop": "Dosya göndermek için tıkla ya da mesaj göndermek için sağ tıkla",
"no-peers-title": "Dosya göndermek için diğer cihazlarda PairDrop'u açın",
"x-instructions_data-drop-peer": "Göndermek için serbest bırak",
@ -139,7 +139,7 @@
},
"peer-ui": {
"processing": "İşleniyor…",
"click-to-send-paste-mode": "{{descriptor}} göndermek için tıkla",
"click-to-send-share-mode": "{{descriptor}} göndermek için tıkla",
"click-to-send": "Dosya göndermek için tıkla veya mesaj göndermek için sağ tıkla",
"waiting": "Bekleniyor…",
"connection-hash": "Uçtan uca şifrelemenin güvenliğini doğrulamak için her iki cihazda da bu güvenlik numarasını karşılaştırın",

View file

@ -9,7 +9,7 @@
"theme-dark_title": "总是使用暗黑主题",
"notification_title": "开启通知",
"edit-paired-devices_title": "管理已配对设备",
"cancel-paste-mode": "完成",
"cancel-share-mode": "完成",
"join-public-room_title": "暂时加入公共房间",
"language-selector_title": "设置语言"
},
@ -21,11 +21,11 @@
"x-instructions_desktop": "点击以发送文件 或 右键来发送信息",
"x-instructions_mobile": "轻触以发送文件 或 长按来发送信息",
"x-instructions_data-drop-bg": "释放来选择接收者",
"click-to-send": "点击发送",
"tap-to-send": "轻触发送",
"activate-paste-mode-base": "在其他设备上打开 PairDrop 来发送",
"activate-paste-mode-and-other-files": "和 {{count}} 个其他的文件",
"activate-paste-mode-shared-text": "分享文本"
"x-instructions-share-mode_desktop": "点击发送",
"x-instructions-share-mode_mobile": "轻触发送",
"activate-share-mode-base": "在其他设备上打开 PairDrop 来发送",
"activate-share-mode-and-other-files-plural": "和 {{count}} 个其他的文件",
"activate-share-mode-shared-text": "分享文本"
},
"footer": {
"routed": "途径服务器",
@ -155,7 +155,7 @@
"image-transfer-requested": "图片传输请求"
},
"peer-ui": {
"click-to-send-paste-mode": "点击发送 {{descriptor}}",
"click-to-send-share-mode": "点击发送 {{descriptor}}",
"click-to-send": "点击以发送文件 或 右键来发送信息",
"connection-hash": "若要验证端到端加密的安全性,请在两个设备上比较此安全编号",
"preparing": "准备中…",

View file

@ -167,6 +167,7 @@ class PairDrop {
const clearDevicesDialog = new EditPairedDevicesDialog();
const publicRoomDialog = new PublicRoomDialog();
const base64ZipDialog = new Base64ZipDialog();
const shareTextDialog = new ShareTextDialog();
const toast = new Toast();
const notifications = new Notifications();
const networkStatusUI = new NetworkStatusUI();

View file

@ -433,47 +433,6 @@ class Peer {
: false;
}
getResizedImageDataUrl(file, width = undefined, height = undefined, quality = 0.7) {
return new Promise((resolve, reject) => {
let image = new Image();
image.src = URL.createObjectURL(file);
image.onload = _ => {
let imageWidth = image.width;
let imageHeight = image.height;
let canvas = document.createElement('canvas');
// resize the canvas and draw the image data into it
if (width && height) {
canvas.width = width;
canvas.height = height;
}
else if (width) {
canvas.width = width;
canvas.height = Math.floor(imageHeight * width / imageWidth)
}
else if (height) {
canvas.width = Math.floor(imageWidth * height / imageHeight);
canvas.height = height;
}
else {
canvas.width = imageWidth;
canvas.height = imageHeight
}
var ctx = canvas.getContext("2d");
ctx.drawImage(image, 0, 0, canvas.width, canvas.height);
let dataUrl = canvas.toDataURL("image/jpeg", quality);
resolve(dataUrl);
}
image.onerror = _ => reject(`Could not create an image thumbnail from type ${file.type}`);
})
.then(dataUrl => {
return dataUrl;
})
.catch(e => console.error(e));
}
async requestFileTransfer(files) {
let header = [];
let totalSize = 0;
@ -491,9 +450,14 @@ class Peer {
Events.fire('set-progress', {peerId: this._peerId, progress: 0.8, status: 'prepare'})
let dataUrl = '';
let dataUrl;
if (files[0].type.split('/')[0] === 'image') {
dataUrl = await this.getResizedImageDataUrl(files[0], 400, null, 0.9);
try {
dataUrl = await getResizedImageDataUrl(files[0], 400, null, 0.9);
} catch (e) {
dataUrl = '';
}
}
Events.fire('set-progress', {peerId: this._peerId, progress: 1, status: 'prepare'})

View file

@ -241,6 +241,9 @@ class BackgroundCanvas {
Events.on('resize', _ => this.init());
Events.on('redraw-canvas', _ => this.init());
Events.on('translation-loaded', _ => this.init());
// ShareMode
Events.on('share-mode-changed', e => this.onShareModeChanged(e.detail.active));
}
_fadeIn() {
@ -263,16 +266,24 @@ class BackgroundCanvas {
this.x0 = this.w / 2;
this.y0 = this.h - this.offset;
this.dw = Math.round(Math.max(this.w, this.h, 1000) / 13);
this.baseColor = '165, 165, 165';
this.baseOpacity = 0.3;
this.drawCircles(this.cCtx);
}
onShareModeChanged(active) {
this.baseColor = active ? '165, 165, 255' : '165, 165, 165';
this.baseOpacity = active ? 0.5 : 0.3;
this.drawCircles(this.cCtx);
}
drawCircle(ctx, radius) {
ctx.beginPath();
ctx.lineWidth = 2;
let opacity = Math.max(0, 0.3 * (1 - 1.2 * radius / Math.max(this.w, this.h)));
ctx.strokeStyle = `rgba(165, 165, 165, ${opacity})`;
let opacity = Math.max(0, this.baseOpacity * (1 - 1.2 * radius / Math.max(this.w, this.h)));
ctx.strokeStyle = `rgba(${this.baseColor}, ${opacity})`;
ctx.arc(this.x0, this.y0, radius, 0, 2 * Math.PI);
ctx.stroke();
}

File diff suppressed because it is too large Load diff

View file

@ -458,3 +458,40 @@ function base64ToArrayBuffer(base64) {
}
return bytes.buffer;
}
function getResizedImageDataUrl(file, width = undefined, height = undefined, quality = 0.7) {
return new Promise((resolve, reject) => {
let image = new Image();
image.src = URL.createObjectURL(file);
image.onload = _ => {
let imageWidth = image.width;
let imageHeight = image.height;
let canvas = document.createElement('canvas');
// resize the canvas and draw the image data into it
if (width && height) {
canvas.width = width;
canvas.height = height;
}
else if (width) {
canvas.width = width;
canvas.height = Math.floor(imageHeight * width / imageWidth)
}
else if (height) {
canvas.width = Math.floor(imageWidth * height / imageHeight);
canvas.height = height;
}
else {
canvas.width = imageWidth;
canvas.height = imageHeight
}
let ctx = canvas.getContext("2d");
ctx.drawImage(image, 0, 0, canvas.width, canvas.height);
let dataUrl = canvas.toDataURL("image/jpeg", quality);
resolve(dataUrl);
}
image.onerror = _ => reject(`Could not create an image thumbnail from type ${file.type}`);
})
}

View file

@ -1,20 +1,5 @@
/* All styles in this sheet are not needed on page load and deferred */
/* Paste mode */
#cancel-paste-mode {
z-index: 21;
margin: 0;
padding: 0;
position: absolute;
top: 0;
right: 0;
left: 0;
width: 100vw;
height: 56px;
background-color: var(--primary-color);
color: rgb(238, 238, 238);
}
/* Text Input */
.textarea {
box-sizing: border-box;
@ -22,7 +7,7 @@
outline: none;
padding: 16px 24px;
border-radius: 12px;
font-size: inherit;
font-size: 16px;
font-family: inherit;
display: block;
overflow: auto;
@ -33,6 +18,10 @@
word-wrap: anywhere;
}
.textarea:before {
opacity: 0.5;
}
/* Peers */
x-peers:has(> x-peer) {
@ -529,30 +518,19 @@ x-dialog hr {
}
/* button row*/
x-paper > .button-row {
height: 50px;
margin: 5px 10px 10px;
}
x-paper > .button-row > .btn {
.btn-row > .btn {
height: 100%;
width: 100%;
}
html:not([dir="rtl"]) x-paper > .button-row > .btn:not(:first-child) {
.btn-row > .btn {
margin-right: 5px;
}
html:not([dir="rtl"]) x-paper > .button-row > .btn:not(:last-child) {
margin-left: 5px;
}
html[dir="rtl"] x-paper > .button-row > .btn:not(:first-child) {
margin-right: 5px;
}
html[dir="rtl"] x-paper > .button-row > .btn:not(:last-child) {
margin-left: 5px;
x-paper > .btn-row {
height: 50px;
margin: 5px 10px 10px;
}
.language-buttons > button > span {
@ -597,7 +575,10 @@ x-dialog .dialog-subheader {
#send-text-dialog,
#receive-text-dialog {
font-size: 16px; /* prevents auto-zoom on edit */
font-size: 16px; /* prevents auto-zoom on edit */
}
.textarea.overflowing {
--shadow-color-rgb: var(--shadow-color-secondary-rgb);
--shadow-color-cover-rgb: var(--shadow-color-secondary-cover-rgb);
}
@ -607,10 +588,6 @@ x-dialog .dialog-subheader {
--shadow-color-cover-rgb: var(--shadow-color-dialog-cover-rgb);
}
#text-input:before {
opacity: 0.5;
}
/* Receive Text Dialog */
#receive-text-dialog #text {
@ -634,6 +611,69 @@ x-dialog .dialog-subheader {
pointer-events: none;
}
.share-panel {
max-width: calc(100vw - 20px);
overflow: hidden;
background-color: var(--primary-color);
color: white;
background-image: linear-gradient(225deg, var(--accent-color) 0%, color-mix(in srgb, var(--accent-color) 60%, black) 100%);
}
.share-panel > div {
margin: 4px 2px;
}
.share-panel > div:not(:first-child) {
margin-top: 2px;
}
.share-panel .thumb > div {
width: 36px;
height: 36px;
background: white;
border-radius: 6px;
margin-right: 6px;
}
.share-panel .text-thumb svg {
width: 18px;
height: 36px;
}
.share-panel .file-thumb svg {
width: 36px;
height: 36px;
}
.share-panel .thumb .image-thumb {
background-size: cover;
border-radius: 6px;
background-position: center;
}
.share-descriptor {
justify-content: center;
}
.share-descriptor > span {
display: inline;
margin-bottom: 0;
margin-top: 0;
height: 20px;
max-width: 15rem;
text-overflow: ellipsis;
overflow: hidden;
white-space: nowrap;
}
.share-descriptor > span:first-child {
font-weight: bold;
}
.share-descriptor > span:not(:first-child) {
font-size: small;
}
#base64-paste-btn,
#base64-paste-dialog .textarea {
width: 100%;

View file

@ -34,6 +34,10 @@ html {
padding: 10px;
}
.cursive {
font-style: italic;
}
.row-reverse {
display: flex;
flex-direction: row-reverse;
@ -86,29 +90,29 @@ header {
right: 0;
}
header > * {
header > .row-reverse > * {
margin-left: 4px;
margin-right: 4px;
}
header > div {
header > .row-reverse > div {
display: flex;
flex-direction: column;
align-self: flex-start;
touch-action: manipulation;
}
header > div .icon-button {
header > .row-reverse > div .icon-button {
height: 40px;
transition: all 300ms;
}
header > div > div {
header > .row-reverse > div > div {
display: flex;
flex-direction: column;
}
header > div:not(:hover) .icon-button:not(.selected) {
header > .row-reverse > div:not(:hover) .icon-button:not(.selected) {
height: 0;
opacity: 0;
}
@ -127,22 +131,22 @@ header > div:not(:hover) .icon-button:not(.selected) {
margin-bottom: 8px;
}
header > div:hover .icon-button.selected::before {
header > .row-reverse > div:hover .icon-button.selected::before {
opacity: 0.1;
}
@media (pointer: coarse) {
header > div:hover .icon-button.selected:hover::before {
header > .row-reverse > div:hover .icon-button.selected:hover::before {
opacity: 0.2;
}
header > div .icon-button:not(.selected) {
header > .row-reverse > div .icon-button:not(.selected) {
height: 0;
opacity: 0;
pointer-events: none;
}
header > div > div {
header > .row-reverse > div > div {
flex-direction: column-reverse;
}
}
@ -201,6 +205,10 @@ h3 {
text-align: center;
}
.text-white {
color: white !important;
}
.font-body1,
body {
font-size: 14px;
@ -382,30 +390,35 @@ footer .logo {
margin-top: -10px;
}
.discovery-wrapper {
font-size: 14px;
margin: 15px auto auto;
.border {
border: 2px solid var(--border-color);
}
.panel {
font-size: 14px;
padding: 2px;
background-color: rgb(var(--bg-color));
transition: background-color 0.5s ease;
min-height: 24px;
}
.discovery-wrapper.column {
.panel.column {
border-radius: 16px;
}
.discovery-wrapper.row {
.panel.row {
border-radius: 12px;
}
/*You can be discovered wrapper*/
.discovery-wrapper > div:first-of-type {
.panel > div:first-of-type {
padding-left: 4px;
padding-right: 4px;
}
/* You can be discovered wrapper */
.discovery-wrapper {
margin: 15px auto auto;
}
.discovery-wrapper .badge {
word-break: keep-all;
@ -447,8 +460,11 @@ footer .logo {
text-align: left;
border: none;
outline: none;
height: 20px;
max-width: 15em;
text-overflow: ellipsis;
overflow: hidden;
white-space: nowrap;
cursor: text;
margin-bottom: -6px;
padding-bottom: 0.1rem;
@ -456,11 +472,10 @@ footer .logo {
border-right: solid 1rem transparent;
border-left: solid 1rem transparent;
background-clip: padding-box;
overflow: hidden;
z-index: 1;
}
#edit-pen {
.edit-pen {
width: 1rem;
height: 1rem;
margin-bottom: -2px;
@ -468,16 +483,16 @@ footer .logo {
}
html:not([dir="rtl"]) #display-name,
html:not([dir="rtl"]) #edit-pen {
html:not([dir="rtl"]) .edit-pen {
margin-left: -1rem;
}
html[dir="rtl"] #display-name,
html[dir="rtl"] #edit-pen {
html[dir="rtl"] .edit-pen {
margin-right: -1rem;
}
html[dir="rtl"] #edit-pen {
html[dir="rtl"] .edit-pen {
transform: rotateY(180deg);
}
@ -505,6 +520,11 @@ x-dialog:not([show]) x-background {
overflow: hidden;
}
.btn-small {
font-size: 12px;
line-height: 22px;
}
.btn[disabled] {
color: var(--btn-disabled-color);
cursor: not-allowed;
@ -551,14 +571,31 @@ x-dialog:not([show]) x-background {
opacity: 0.2;
}
.btn-round {
border-radius: 50%;
}
.btn-rounded {
border-radius: 12px;
}
.btn-small.btn-rounded {
border-radius: 6px;
}
.btn-grey {
background-color: var(--bg-color-secondary);
}
.btn-dark {
background-color: #262628;
}
.btn-primary {
background: var(--primary-color);
color: rgb(var(--bg-color));
}
button::-moz-focus-inner {
border: 0;
}
@ -686,6 +723,8 @@ canvas.circles {
}
x-toast {
display: flex;
justify-content: space-between;
position: absolute;
min-height: 48px;
top: 50px;
@ -695,7 +734,7 @@ x-toast {
color: var(--dialog-bg-color);
align-items: center;
box-sizing: border-box;
padding: 8px 24px;
padding: 8px;
z-index: 40;
transition: opacity 200ms, transform 300ms ease-out;
cursor: default;
@ -704,9 +743,17 @@ x-toast {
pointer-events: all;
}
x-toast:not([show]):not(:hover) {
x-toast.top-row {
top: 3px;
}
x-toast:not([show]) {
opacity: 0;
transform: translateY(-100px);
transform: translateY(calc(-100% + -55px));
}
x-toast span {
flex-grow: 1;
}
/* Instructions */
@ -735,9 +782,6 @@ x-instructions[drop-bg]:not([drop-peer]):before {
content: attr(data-drop-bg);
}
x-instructions p {
display: none;
}
x-peers:empty~x-instructions {
opacity: 0 !important;
@ -864,7 +908,7 @@ body.dark-theme {
--badge-color: #a5a5a5;
--shadow-color-secondary-rgb: 0,0,0;
--shadow-color-secondary-cover-rgb: 242,242,242;
--shadow-color-secondary-cover-rgb: 255,255,255;
--shadow-color-dialog-rgb: 0,0,0;
--shadow-color-dialog-cover-rgb: 242,242,242;
}
@ -877,28 +921,6 @@ body {
transition: background-color 0.5s ease;
}
x-dialog x-paper {
background-color: var(--dialog-bg-color);
}
.textarea {
color: rgb(var(--text-color)) !important;
background-color: var(--bg-color-secondary) !important;
}
.textarea * {
margin: 0 !important;
padding: 0 !important;
color: unset !important;
background: unset !important;
border: unset !important;
opacity: unset !important;
font-family: inherit !important;
font-size: inherit !important;
font-style: unset !important;
font-weight: unset !important;
}
/* Gradient for wifi-tether icon */
#primaryGradient .start-color {
stop-color: var(--primary-color);
@ -946,8 +968,8 @@ html {
/* webkit scrollbar style*/
::-webkit-scrollbar{
width: 4px;
height: 4px;
width: 0;
height: 0;
}
::-webkit-scrollbar-thumb{