Compare commits

...

15 Commits

Author SHA1 Message Date
Samuel Mannehed
3193f808b5 Comment different resize functions in rfb.js
Some checks failed
Publish / npm (push) Has been cancelled
Publish / snap (push) Has been cancelled
Lint / eslint (push) Has been cancelled
Lint / html (push) Has been cancelled
Test / test (ChromeHeadless, ubuntu-latest) (push) Has been cancelled
Test / test (ChromeHeadless, windows-latest) (push) Has been cancelled
Test / test (EdgeHeadless, windows-latest) (push) Has been cancelled
Test / test (FirefoxHeadless, ubuntu-latest) (push) Has been cancelled
Test / test (FirefoxHeadless, windows-latest) (push) Has been cancelled
Test / test (Safari, macos-latest) (push) Has been cancelled
Translate / translate (push) Has been cancelled
2024-12-27 14:48:20 +01:00
Samuel Mannehed
e6e03a226f Fix resizes back to initial remote session size
Since the expected client size wasn't updated when the browser window
resized, noVNC didn't resize the canvas properly when going back to
the exact same dimensions.

Fixes issue #1903
2024-12-27 14:48:11 +01:00
Pierre Ossman
673cb349fd Replace po2json with pofile
The former doesn't seem to be properly maintained and nodejs gives
deprecation warnings.
2024-12-17 17:15:14 +01:00
Pierre Ossman
3e2e04bea1 Replace node-getopt with commander for args
node-getopt isn't maintained and nodejs has started complaining about
deprecated features in it.
2024-12-17 16:44:21 +01:00
NNN1590
52392ec150
Update Japanese translation 2024-12-14 15:59:01 +09:00
Pierre Ossman
52ddb20d25 Merge branch 'master' of https://github.com/wxtewx/noVNC 2024-11-27 16:12:05 +01:00
Pierre Ossman
7335bb440d Also adjust to "sentence case" in translations
This would have resolved itself automatically on the next translation
update, but this commit will reduce unnecessary noise in that change.
2024-11-27 16:04:18 +01:00
Pierre Ossman
7f5b51acf3 Consistently use "sentence case" style
Try to be more consistent in how we capitalize things. Both the "Title
Case" and "Sentence case" styles are popular, so either would work.
Google and Mozilla both prefer "Sentence case", so let's follow them.
2024-11-27 14:40:40 +01:00
wxtewx
90a6c7bbb6
Update zh_CN.po 2024-11-23 15:36:12 +08:00
Pierre Ossman
2463ccd08f Detect broken Firefox H.264 decoder
The Firefox H.264 decoder on Windows might simply just refuse to deliver
any finished frames. It also doesn't deliver any errors.

Detect this early by expecting a frame after flush() has completed.
2024-11-21 13:33:52 +01:00
Pierre Ossman
a89dfd6141 Handle exceptions from VideoDecoder.flush()
These are not supposed to happen according to the specification, but
Firefox has some bug and throws them anyway.
2024-11-21 13:33:32 +01:00
Pierre Ossman
3677afe305 Do a real H.264 test decode to determine support
Firefox is buggy and reports support for H.264 but then throws errors
once we actually try to decode things. Detect this early by doing a
quick test decode of a single frame.
2024-11-21 13:33:31 +01:00
Pierre Ossman
69750c74a6 Raise JavaScript version requirement
So that we can use await at module top level.
2024-11-21 13:33:10 +01:00
Pierre Ossman
89e0591aab Use common H.264 check in tests
Avoid duplicating this logic in multiple places.
2024-11-21 13:19:44 +01:00
Pierre Ossman
43326eb67b Fix handling of VideoDecoder.isConfigSupported()
It returns an object with details, not just a simple boolean.
2024-11-20 10:46:52 +01:00
101 changed files with 930 additions and 761 deletions

View File

@ -7,7 +7,7 @@ about: Create a report to help us improve
**Describe the bug** **Describe the bug**
A clear and concise description of what the bug is. A clear and concise description of what the bug is.
**To Reproduce** **To reproduce**
Steps to reproduce the behavior: Steps to reproduce the behavior:
1. Go to '...' 1. Go to '...'
2. Click on '....' 2. Click on '....'

View File

@ -1,4 +1,4 @@
noVNC is Copyright (C) 2022 The noVNC Authors noVNC is Copyright (C) 2022 The noVNC authors
(./AUTHORS) (./AUTHORS)
The noVNC core library files are licensed under the MPL 2.0 (Mozilla The noVNC core library files are licensed under the MPL 2.0 (Mozilla

View File

@ -1,4 +1,4 @@
## noVNC: HTML VNC Client Library and Application ## noVNC: HTML VNC client library and application
[![Test Status](https://github.com/novnc/noVNC/workflows/Test/badge.svg)](https://github.com/novnc/noVNC/actions?query=workflow%3ATest) [![Test Status](https://github.com/novnc/noVNC/workflows/Test/badge.svg)](https://github.com/novnc/noVNC/actions?query=workflow%3ATest)
[![Lint Status](https://github.com/novnc/noVNC/workflows/Lint/badge.svg)](https://github.com/novnc/noVNC/actions?query=workflow%3ALint) [![Lint Status](https://github.com/novnc/noVNC/workflows/Lint/badge.svg)](https://github.com/novnc/noVNC/actions?query=workflow%3ALint)
@ -14,19 +14,19 @@ Many companies, projects and products have integrated noVNC including
[OpenNebula](http://opennebula.org/), [OpenNebula](http://opennebula.org/),
[LibVNCServer](http://libvncserver.sourceforge.net), and [LibVNCServer](http://libvncserver.sourceforge.net), and
[ThinLinc](https://cendio.com/thinlinc). See [ThinLinc](https://cendio.com/thinlinc). See
[the Projects and Companies wiki page](https://github.com/novnc/noVNC/wiki/Projects-and-companies-using-noVNC) [the Projects and companies wiki page](https://github.com/novnc/noVNC/wiki/Projects-and-companies-using-noVNC)
for a more complete list with additional info and links. for a more complete list with additional info and links.
### Table of Contents ### Table of contents
- [News/help/contact](#newshelpcontact) - [News/help/contact](#newshelpcontact)
- [Features](#features) - [Features](#features)
- [Screenshots](#screenshots) - [Screenshots](#screenshots)
- [Browser Requirements](#browser-requirements) - [Browser requirements](#browser-requirements)
- [Server Requirements](#server-requirements) - [Server requirements](#server-requirements)
- [Quick Start](#quick-start) - [Quick start](#quick-start)
- [Installation from Snap Package](#installation-from-snap-package) - [Installation from snap package](#installation-from-snap-package)
- [Integration and Deployment](#integration-and-deployment) - [Integration and deployment](#integration-and-deployment)
- [Authors/Contributors](#authorscontributors) - [Authors/Contributors](#authorscontributors)
### News/help/contact ### News/help/contact
@ -86,16 +86,16 @@ See more screenshots
[here](http://novnc.com/screenshots.html). [here](http://novnc.com/screenshots.html).
### Browser Requirements ### Browser requirements
noVNC uses many modern web technologies so a formal requirement list is noVNC uses many modern web technologies so a formal requirement list is
not available. However these are the minimum versions we are currently not available. However these are the minimum versions we are currently
aware of: aware of:
* Chrome 64, Firefox 79, Safari 13.4, Opera 51, Edge 79 * Chrome 89, Firefox 89, Safari 15, Opera 75, Edge 89
### Server Requirements ### Server requirements
noVNC follows the standard VNC protocol, but unlike other VNC clients it does noVNC follows the standard VNC protocol, but unlike other VNC clients it does
require WebSockets support. Many servers include support (e.g. require WebSockets support. Many servers include support (e.g.
@ -107,7 +107,7 @@ use a WebSockets to TCP socket proxy. noVNC has a sister project
proxy. proxy.
### Quick Start ### Quick start
* Use the `novnc_proxy` script to automatically download and start websockify, which * Use the `novnc_proxy` script to automatically download and start websockify, which
includes a mini-webserver and the WebSockets proxy. The `--vnc` option is includes a mini-webserver and the WebSockets proxy. The `--vnc` option is
@ -124,23 +124,23 @@ proxy.
script. Hit the Connect button, enter a password if the VNC server has one script. Hit the Connect button, enter a password if the VNC server has one
configured, and enjoy! configured, and enjoy!
### Installation from Snap Package ### Installation from snap package
Running the command below will install the latest release of noVNC from Snap: Running the command below will install the latest release of noVNC from snap:
`sudo snap install novnc` `sudo snap install novnc`
#### Running noVNC from Snap Directly #### Running noVNC from snap directly
You can run the Snap-package installed novnc directly with, for example: You can run the snap package installed novnc directly with, for example:
`novnc --listen 6081 --vnc localhost:5901 # /snap/bin/novnc if /snap/bin is not in your PATH` `novnc --listen 6081 --vnc localhost:5901 # /snap/bin/novnc if /snap/bin is not in your PATH`
If you want to use certificate files, due to standard Snap confinement restrictions you need to have them in the /home/\<user\>/snap/novnc/current/ directory. If your username is jsmith an example command would be: If you want to use certificate files, due to standard snap confinement restrictions you need to have them in the /home/\<user\>/snap/novnc/current/ directory. If your username is jsmith an example command would be:
`novnc --listen 8443 --cert ~jsmith/snap/novnc/current/self.crt --key ~jsmith/snap/novnc/current/self.key --vnc ubuntu.example.com:5901` `novnc --listen 8443 --cert ~jsmith/snap/novnc/current/self.crt --key ~jsmith/snap/novnc/current/self.key --vnc ubuntu.example.com:5901`
#### Running noVNC from Snap as a Service (Daemon) #### Running noVNC from snap as a service (daemon)
The Snap package also has the capability to run a 'novnc' service which can be The snap package also has the capability to run a 'novnc' service which can be
configured to listen on multiple ports connecting to multiple VNC servers configured to listen on multiple ports connecting to multiple VNC servers
(effectively a service runing multiple instances of novnc). (effectively a service runing multiple instances of novnc).
Instructions (with example values): Instructions (with example values):
@ -172,7 +172,7 @@ services.n6082.listen 6082
services.n6082.vnc localhost:5902 services.n6082.vnc localhost:5902
``` ```
Disable a service (note that because of a limitation in Snap it's currently not Disable a service (note that because of a limitation in snap it's currently not
possible to unset config variables, setting them to blank values is the way possible to unset config variables, setting them to blank values is the way
to disable a service): to disable a service):
@ -189,7 +189,7 @@ services.n6082.listen
services.n6082.vnc services.n6082.vnc
``` ```
### Integration and Deployment ### Integration and deployment
Please see our other documents for how to integrate noVNC in your own software, Please see our other documents for how to integrate noVNC in your own software,
or deploying the noVNC application in production environments: or deploying the noVNC application in production environments:
@ -212,8 +212,8 @@ that list and you think you should be, feel free to send a PR to fix that.
* [Solly Ross](https://github.com/DirectXMan12) (Red Hat / OpenStack) * [Solly Ross](https://github.com/DirectXMan12) (Red Hat / OpenStack)
* Notable contributions: * Notable contributions:
* UI and Icons : Pierre Ossman, Chris Gordon * UI and icons : Pierre Ossman, Chris Gordon
* Original Logo : Michael Sersen * Original logo : Michael Sersen
* tight encoding : Michael Tinglof (Mercuri.ca) * tight encoding : Michael Tinglof (Mercuri.ca)
* RealVNC RSA AES authentication : USTC Vlab Team * RealVNC RSA AES authentication : USTC Vlab Team

View File

@ -1,6 +1,6 @@
/* /*
* noVNC: HTML5 VNC client * noVNC: HTML5 VNC client
* Copyright (C) 2019 The noVNC Authors * Copyright (C) 2019 The noVNC authors
* Licensed under MPL 2.0 (see LICENSE.txt) * Licensed under MPL 2.0 (see LICENSE.txt)
* *
* See README.md for usage and integration instructions. * See README.md for usage and integration instructions.

View File

@ -14,7 +14,7 @@
"Password is required": "Je vyžadováno heslo", "Password is required": "Je vyžadováno heslo",
"noVNC encountered an error:": "noVNC narazilo na chybu:", "noVNC encountered an error:": "noVNC narazilo na chybu:",
"Hide/Show the control bar": "Skrýt/zobrazit ovládací panel", "Hide/Show the control bar": "Skrýt/zobrazit ovládací panel",
"Move/Drag Viewport": "Přesunout/přetáhnout výřez", "Move/Drag viewport": "Přesunout/přetáhnout výřez",
"viewport drag": "přesun výřezu", "viewport drag": "přesun výřezu",
"Active Mouse Button": "Aktivní tlačítka myši", "Active Mouse Button": "Aktivní tlačítka myši",
"No mousebutton": "Žádné", "No mousebutton": "Žádné",
@ -22,9 +22,9 @@
"Middle mousebutton": "Prostřední tlačítko myši", "Middle mousebutton": "Prostřední tlačítko myši",
"Right mousebutton": "Pravé tlačítko myši", "Right mousebutton": "Pravé tlačítko myši",
"Keyboard": "Klávesnice", "Keyboard": "Klávesnice",
"Show Keyboard": "Zobrazit klávesnici", "Show keyboard": "Zobrazit klávesnici",
"Extra keys": "Extra klávesy", "Extra keys": "Extra klávesy",
"Show Extra Keys": "Zobrazit extra klávesy", "Show extra keys": "Zobrazit extra klávesy",
"Ctrl": "Ctrl", "Ctrl": "Ctrl",
"Toggle Ctrl": "Přepnout Ctrl", "Toggle Ctrl": "Přepnout Ctrl",
"Alt": "Alt", "Alt": "Alt",
@ -45,13 +45,13 @@
"Clear": "Vymazat", "Clear": "Vymazat",
"Fullscreen": "Celá obrazovka", "Fullscreen": "Celá obrazovka",
"Settings": "Nastavení", "Settings": "Nastavení",
"Shared Mode": "Sdílený režim", "Shared mode": "Sdílený režim",
"View Only": "Pouze prohlížení", "View only": "Pouze prohlížení",
"Clip to Window": "Přizpůsobit oknu", "Clip to window": "Přizpůsobit oknu",
"Scaling Mode:": "Přizpůsobení velikosti", "Scaling mode:": "Přizpůsobení velikosti",
"None": "Žádné", "None": "Žádné",
"Local Scaling": "Místní", "Local scaling": "Místní",
"Remote Resizing": "Vzdálené", "Remote resizing": "Vzdálené",
"Advanced": "Pokročilé", "Advanced": "Pokročilé",
"Repeater ID:": "ID opakovače", "Repeater ID:": "ID opakovače",
"WebSocket": "WebSocket", "WebSocket": "WebSocket",
@ -59,9 +59,9 @@
"Host:": "Hostitel:", "Host:": "Hostitel:",
"Port:": "Port:", "Port:": "Port:",
"Path:": "Cesta", "Path:": "Cesta",
"Automatic Reconnect": "Automatická obnova připojení", "Automatic reconnect": "Automatická obnova připojení",
"Reconnect Delay (ms):": "Zpoždění připojení (ms)", "Reconnect delay (ms):": "Zpoždění připojení (ms)",
"Show Dot when No Cursor": "Tečka místo chybějícího kurzoru myši", "Show dot when no cursor": "Tečka místo chybějícího kurzoru myši",
"Logging:": "Logování:", "Logging:": "Logování:",
"Disconnect": "Odpojit", "Disconnect": "Odpojit",
"Connect": "Připojit", "Connect": "Připojit",

View File

@ -13,7 +13,7 @@
"Password is required": "Passwort ist erforderlich", "Password is required": "Passwort ist erforderlich",
"noVNC encountered an error:": "Ein Fehler ist aufgetreten:", "noVNC encountered an error:": "Ein Fehler ist aufgetreten:",
"Hide/Show the control bar": "Kontrollleiste verstecken/anzeigen", "Hide/Show the control bar": "Kontrollleiste verstecken/anzeigen",
"Move/Drag Viewport": "Ansichtsfenster verschieben/ziehen", "Move/Drag viewport": "Ansichtsfenster verschieben/ziehen",
"viewport drag": "Ansichtsfenster ziehen", "viewport drag": "Ansichtsfenster ziehen",
"Active Mouse Button": "Aktive Maustaste", "Active Mouse Button": "Aktive Maustaste",
"No mousebutton": "Keine Maustaste", "No mousebutton": "Keine Maustaste",
@ -21,9 +21,9 @@
"Middle mousebutton": "Mittlere Maustaste", "Middle mousebutton": "Mittlere Maustaste",
"Right mousebutton": "Rechte Maustaste", "Right mousebutton": "Rechte Maustaste",
"Keyboard": "Tastatur", "Keyboard": "Tastatur",
"Show Keyboard": "Tastatur anzeigen", "Show keyboard": "Tastatur anzeigen",
"Extra keys": "Zusatztasten", "Extra keys": "Zusatztasten",
"Show Extra Keys": "Zusatztasten anzeigen", "Show extra keys": "Zusatztasten anzeigen",
"Ctrl": "Strg", "Ctrl": "Strg",
"Toggle Ctrl": "Strg umschalten", "Toggle Ctrl": "Strg umschalten",
"Alt": "Alt", "Alt": "Alt",
@ -44,13 +44,13 @@
"Clear": "Löschen", "Clear": "Löschen",
"Fullscreen": "Vollbild", "Fullscreen": "Vollbild",
"Settings": "Einstellungen", "Settings": "Einstellungen",
"Shared Mode": "Geteilter Modus", "Shared mode": "Geteilter Modus",
"View Only": "Nur betrachten", "View only": "Nur betrachten",
"Clip to Window": "Auf Fenster begrenzen", "Clip to window": "Auf Fenster begrenzen",
"Scaling Mode:": "Skalierungsmodus:", "Scaling mode:": "Skalierungsmodus:",
"None": "Keiner", "None": "Keiner",
"Local Scaling": "Lokales skalieren", "Local scaling": "Lokales skalieren",
"Remote Resizing": "Serverseitiges skalieren", "Remote resizing": "Serverseitiges skalieren",
"Advanced": "Erweitert", "Advanced": "Erweitert",
"Repeater ID:": "Repeater ID:", "Repeater ID:": "Repeater ID:",
"WebSocket": "WebSocket", "WebSocket": "WebSocket",
@ -58,8 +58,8 @@
"Host:": "Server:", "Host:": "Server:",
"Port:": "Port:", "Port:": "Port:",
"Path:": "Pfad:", "Path:": "Pfad:",
"Automatic Reconnect": "Automatisch wiederverbinden", "Automatic reconnect": "Automatisch wiederverbinden",
"Reconnect Delay (ms):": "Wiederverbindungsverzögerung (ms):", "Reconnect delay (ms):": "Wiederverbindungsverzögerung (ms):",
"Logging:": "Protokollierung:", "Logging:": "Protokollierung:",
"Disconnect": "Verbindung trennen", "Disconnect": "Verbindung trennen",
"Connect": "Verbinden", "Connect": "Verbinden",

View File

@ -10,7 +10,7 @@
"Disconnect timeout": "Tiempo de desconexión agotado", "Disconnect timeout": "Tiempo de desconexión agotado",
"noVNC encountered an error:": "noVNC ha encontrado un error:", "noVNC encountered an error:": "noVNC ha encontrado un error:",
"Hide/Show the control bar": "Ocultar/Mostrar la barra de control", "Hide/Show the control bar": "Ocultar/Mostrar la barra de control",
"Move/Drag Viewport": "Mover/Arrastrar la ventana", "Move/Drag viewport": "Mover/Arrastrar la ventana",
"viewport drag": "Arrastrar la ventana", "viewport drag": "Arrastrar la ventana",
"Active Mouse Button": "Botón activo del ratón", "Active Mouse Button": "Botón activo del ratón",
"No mousebutton": "Ningún botón del ratón", "No mousebutton": "Ningún botón del ratón",
@ -18,7 +18,7 @@
"Middle mousebutton": "Botón central del ratón", "Middle mousebutton": "Botón central del ratón",
"Right mousebutton": "Botón derecho del ratón", "Right mousebutton": "Botón derecho del ratón",
"Keyboard": "Teclado", "Keyboard": "Teclado",
"Show Keyboard": "Mostrar teclado", "Show keyboard": "Mostrar teclado",
"Extra keys": "Teclas adicionales", "Extra keys": "Teclas adicionales",
"Show Extra Keys": "Mostrar Teclas Adicionales", "Show Extra Keys": "Mostrar Teclas Adicionales",
"Ctrl": "Ctrl", "Ctrl": "Ctrl",
@ -43,13 +43,13 @@
"Settings": "Configuraciones", "Settings": "Configuraciones",
"Encrypt": "Encriptar", "Encrypt": "Encriptar",
"Shared Mode": "Modo Compartido", "Shared Mode": "Modo Compartido",
"View Only": "Solo visualización", "View only": "Solo visualización",
"Clip to Window": "Recortar al tamaño de la ventana", "Clip to window": "Recortar al tamaño de la ventana",
"Scaling Mode:": "Modo de escalado:", "Scaling mode:": "Modo de escalado:",
"None": "Ninguno", "None": "Ninguno",
"Local Scaling": "Escalado Local", "Local Scaling": "Escalado Local",
"Local Downscaling": "Reducción de escala local", "Local Downscaling": "Reducción de escala local",
"Remote Resizing": "Cambio de tamaño remoto", "Remote resizing": "Cambio de tamaño remoto",
"Advanced": "Avanzado", "Advanced": "Avanzado",
"Local Cursor": "Cursor Local", "Local Cursor": "Cursor Local",
"Repeater ID:": "ID del Repetidor:", "Repeater ID:": "ID del Repetidor:",
@ -57,8 +57,8 @@
"Host:": "Host:", "Host:": "Host:",
"Port:": "Puerto:", "Port:": "Puerto:",
"Path:": "Ruta:", "Path:": "Ruta:",
"Automatic Reconnect": "Reconexión automática", "Automatic reconnect": "Reconexión automática",
"Reconnect Delay (ms):": "Retraso en la reconexión (ms):", "Reconnect delay (ms):": "Retraso en la reconexión (ms):",
"Logging:": "Registrando:", "Logging:": "Registrando:",
"Disconnect": "Desconectar", "Disconnect": "Desconectar",
"Connect": "Conectar", "Connect": "Conectar",

View File

@ -17,9 +17,9 @@
"Drag": "Faire glisser", "Drag": "Faire glisser",
"Move/Drag Viewport": "Déplacer/faire glisser le Viewport", "Move/Drag Viewport": "Déplacer/faire glisser le Viewport",
"Keyboard": "Clavier", "Keyboard": "Clavier",
"Show Keyboard": "Afficher le clavier", "Show keyboard": "Afficher le clavier",
"Extra keys": "Touches supplémentaires", "Extra keys": "Touches supplémentaires",
"Show Extra Keys": "Afficher les touches supplémentaires", "Show extra keys": "Afficher les touches supplémentaires",
"Ctrl": "Ctrl", "Ctrl": "Ctrl",
"Toggle Ctrl": "Basculer Ctrl", "Toggle Ctrl": "Basculer Ctrl",
"Alt": "Alt", "Alt": "Alt",
@ -42,13 +42,13 @@
"Clear": "Effacer", "Clear": "Effacer",
"Fullscreen": "Plein écran", "Fullscreen": "Plein écran",
"Settings": "Paramètres", "Settings": "Paramètres",
"Shared Mode": "Mode partagé", "Shared mode": "Mode partagé",
"View Only": "Afficher uniquement", "View only": "Afficher uniquement",
"Clip to Window": "Clip à fenêtre", "Clip to window": "Clip à fenêtre",
"Scaling Mode:": "Mode mise à l'échelle :", "Scaling mode:": "Mode mise à l'échelle :",
"None": "Aucun", "None": "Aucun",
"Local Scaling": "Mise à l'échelle locale", "Local scaling": "Mise à l'échelle locale",
"Remote Resizing": "Redimensionnement à distance", "Remote resizing": "Redimensionnement à distance",
"Advanced": "Avancé", "Advanced": "Avancé",
"Quality:": "Qualité :", "Quality:": "Qualité :",
"Compression level:": "Niveau de compression :", "Compression level:": "Niveau de compression :",
@ -58,15 +58,15 @@
"Host:": "Hôte :", "Host:": "Hôte :",
"Port:": "Port :", "Port:": "Port :",
"Path:": "Chemin :", "Path:": "Chemin :",
"Automatic Reconnect": "Reconnecter automatiquemen", "Automatic reconnect": "Reconnecter automatiquemen",
"Reconnect Delay (ms):": "Délai de reconnexion (ms) :", "Reconnect delay (ms):": "Délai de reconnexion (ms) :",
"Show Dot when No Cursor": "Afficher le point lorsqu'il n'y a pas de curseur", "Show dot when no cursor": "Afficher le point lorsqu'il n'y a pas de curseur",
"Logging:": "Se connecter :", "Logging:": "Se connecter :",
"Version:": "Version :", "Version:": "Version :",
"Disconnect": "Déconnecter", "Disconnect": "Déconnecter",
"Connect": "Connecter", "Connect": "Connecter",
"Username:": "Nom d'utilisateur :", "Username:": "Nom d'utilisateur :",
"Password:": "Mot de passe :", "Password:": "Mot de passe :",
"Send Credentials": "Envoyer les identifiants", "Send credentials": "Envoyer les identifiants",
"Cancel": "Annuler" "Cancel": "Annuler"
} }

View File

@ -15,7 +15,7 @@
"noVNC encountered an error:": "noVNC ha riscontrato un errore:", "noVNC encountered an error:": "noVNC ha riscontrato un errore:",
"Hide/Show the control bar": "Nascondi/Mostra la barra di controllo", "Hide/Show the control bar": "Nascondi/Mostra la barra di controllo",
"Keyboard": "Tastiera", "Keyboard": "Tastiera",
"Show Keyboard": "Mostra tastiera", "Show keyboard": "Mostra tastiera",
"Extra keys": "Tasti Aggiuntivi", "Extra keys": "Tasti Aggiuntivi",
"Show Extra Keys": "Mostra Tasti Aggiuntivi", "Show Extra Keys": "Mostra Tasti Aggiuntivi",
"Ctrl": "Ctrl", "Ctrl": "Ctrl",
@ -40,9 +40,9 @@
"Clear": "Pulisci", "Clear": "Pulisci",
"Fullscreen": "Schermo intero", "Fullscreen": "Schermo intero",
"Settings": "Impostazioni", "Settings": "Impostazioni",
"Shared Mode": "Modalità condivisa", "Shared mode": "Modalità condivisa",
"View Only": "Sola Visualizzazione", "View Only": "Sola Visualizzazione",
"Scaling Mode:": "Modalità di ridimensionamento:", "Scaling mode:": "Modalità di ridimensionamento:",
"None": "Nessuna", "None": "Nessuna",
"Local Scaling": "Ridimensionamento Locale", "Local Scaling": "Ridimensionamento Locale",
"Remote Resizing": "Ridimensionamento Remoto", "Remote Resizing": "Ridimensionamento Remoto",

View File

@ -1,13 +1,14 @@
{ {
"HTTPS is required for full functionality": "すべての機能を使用するにはHTTPS接続が必要です", "Running without HTTPS is not recommended, crashes or other issues are likely.": "HTTPS接続なしで実行することは推奨されません。クラッシュしたりその他の問題が発生したりする可能性があります。",
"Connecting...": "接続しています...", "Connecting...": "接続しています...",
"Disconnecting...": "切断しています...", "Disconnecting...": "切断しています...",
"Reconnecting...": "再接続しています...", "Reconnecting...": "再接続しています...",
"Internal error": "内部エラー", "Internal error": "内部エラー",
"Must set host": "ホストを設定する必要があります", "Must set host": "ホストを設定する必要があります",
"Failed to connect to server: ": "サーバーへの接続に失敗しました: ",
"Connected (encrypted) to ": "接続しました (暗号化済み): ", "Connected (encrypted) to ": "接続しました (暗号化済み): ",
"Connected (unencrypted) to ": "接続しました (暗号化されていません): ", "Connected (unencrypted) to ": "接続しました (暗号化されていません): ",
"Something went wrong, connection is closed": "何らかの問題で、接続が閉じられました", "Something went wrong, connection is closed": "問題が発生したため、接続が閉じられました",
"Failed to connect to server": "サーバーへの接続に失敗しました", "Failed to connect to server": "サーバーへの接続に失敗しました",
"Disconnected": "切断しました", "Disconnected": "切断しました",
"New connection has been rejected with reason: ": "新規接続は次の理由で拒否されました: ", "New connection has been rejected with reason: ": "新規接続は次の理由で拒否されました: ",
@ -16,11 +17,11 @@
"noVNC encountered an error:": "noVNC でエラーが発生しました:", "noVNC encountered an error:": "noVNC でエラーが発生しました:",
"Hide/Show the control bar": "コントロールバーを隠す/表示する", "Hide/Show the control bar": "コントロールバーを隠す/表示する",
"Drag": "ドラッグ", "Drag": "ドラッグ",
"Move/Drag Viewport": "ビューポートを移動/ドラッグ", "Move/Drag viewport": "ビューポートを移動/ドラッグ",
"Keyboard": "キーボード", "Keyboard": "キーボード",
"Show Keyboard": "キーボードを表示", "Show keyboard": "キーボードを表示",
"Extra keys": "追加キー", "Extra keys": "追加キー",
"Show Extra Keys": "追加キーを表示", "Show extra keys": "追加キーを表示",
"Ctrl": "Ctrl", "Ctrl": "Ctrl",
"Toggle Ctrl": "Ctrl キーをトグル", "Toggle Ctrl": "Ctrl キーをトグル",
"Alt": "Alt", "Alt": "Alt",
@ -41,15 +42,15 @@
"Reset": "リセット", "Reset": "リセット",
"Clipboard": "クリップボード", "Clipboard": "クリップボード",
"Edit clipboard content in the textarea below.": "以下の入力欄からクリップボードの内容を編集できます。", "Edit clipboard content in the textarea below.": "以下の入力欄からクリップボードの内容を編集できます。",
"Full Screen": "全画面表示", "Full screen": "全画面表示",
"Settings": "設定", "Settings": "設定",
"Shared Mode": "共有モード", "Shared mode": "共有モード",
"View Only": "表示専用", "View only": "表示専用",
"Clip to Window": "ウィンドウにクリップ", "Clip to window": "ウィンドウにクリップ",
"Scaling Mode:": "スケーリングモード:", "Scaling mode:": "スケーリングモード:",
"None": "なし", "None": "なし",
"Local Scaling": "ローカルスケーリング", "Local scaling": "ローカルでスケーリング",
"Remote Resizing": "リモートでリサイズ", "Remote resizing": "リモートでリサイズ",
"Advanced": "高度", "Advanced": "高度",
"Quality:": "品質:", "Quality:": "品質:",
"Compression level:": "圧縮レベル:", "Compression level:": "圧縮レベル:",
@ -59,9 +60,9 @@
"Host:": "ホスト:", "Host:": "ホスト:",
"Port:": "ポート:", "Port:": "ポート:",
"Path:": "パス:", "Path:": "パス:",
"Automatic Reconnect": "自動再接続", "Automatic reconnect": "自動再接続",
"Reconnect Delay (ms):": "再接続する遅延 (ミリ秒):", "Reconnect delay (ms):": "再接続する遅延 (ミリ秒):",
"Show Dot when No Cursor": "カーソルがないときにドットを表示する", "Show dot when no cursor": "カーソルがないときにドットを表示する",
"Logging:": "ロギング:", "Logging:": "ロギング:",
"Version:": "バージョン:", "Version:": "バージョン:",
"Disconnect": "切断", "Disconnect": "切断",
@ -75,6 +76,6 @@
"Credentials": "資格情報", "Credentials": "資格情報",
"Username:": "ユーザー名:", "Username:": "ユーザー名:",
"Password:": "パスワード:", "Password:": "パスワード:",
"Send Credentials": "資格情報を送信", "Send credentials": "資格情報を送信",
"Cancel": "キャンセル" "Cancel": "キャンセル"
} }

View File

@ -14,7 +14,7 @@
"Password is required": "비밀번호가 필요합니다.", "Password is required": "비밀번호가 필요합니다.",
"noVNC encountered an error:": "noVNC에 오류가 발생했습니다:", "noVNC encountered an error:": "noVNC에 오류가 발생했습니다:",
"Hide/Show the control bar": "컨트롤 바 숨기기/보이기", "Hide/Show the control bar": "컨트롤 바 숨기기/보이기",
"Move/Drag Viewport": "움직이기/드래그 뷰포트", "Move/Drag viewport": "움직이기/드래그 뷰포트",
"viewport drag": "뷰포트 드래그", "viewport drag": "뷰포트 드래그",
"Active Mouse Button": "마우스 버튼 활성화", "Active Mouse Button": "마우스 버튼 활성화",
"No mousebutton": "마우스 버튼 없음", "No mousebutton": "마우스 버튼 없음",
@ -22,9 +22,9 @@
"Middle mousebutton": "중간 마우스 버튼", "Middle mousebutton": "중간 마우스 버튼",
"Right mousebutton": "오른쪽 마우스 버튼", "Right mousebutton": "오른쪽 마우스 버튼",
"Keyboard": "키보드", "Keyboard": "키보드",
"Show Keyboard": "키보드 보이기", "Show keyboard": "키보드 보이기",
"Extra keys": "기타 키들", "Extra keys": "기타 키들",
"Show Extra Keys": "기타 키들 보이기", "Show extra keys": "기타 키들 보이기",
"Ctrl": "Ctrl", "Ctrl": "Ctrl",
"Toggle Ctrl": "Ctrl 켜기/끄기", "Toggle Ctrl": "Ctrl 켜기/끄기",
"Alt": "Alt", "Alt": "Alt",
@ -45,13 +45,13 @@
"Clear": "지우기", "Clear": "지우기",
"Fullscreen": "전체화면", "Fullscreen": "전체화면",
"Settings": "설정", "Settings": "설정",
"Shared Mode": "공유 모드", "Shared mode": "공유 모드",
"View Only": "보기 전용", "View only": "보기 전용",
"Clip to Window": "창에 클립", "Clip to window": "창에 클립",
"Scaling Mode:": "스케일링 모드:", "Scaling mode:": "스케일링 모드:",
"None": "없음", "None": "없음",
"Local Scaling": "로컬 스케일링", "Local scaling": "로컬 스케일링",
"Remote Resizing": "원격 크기 조절", "Remote resizing": "원격 크기 조절",
"Advanced": "고급", "Advanced": "고급",
"Repeater ID:": "중계 ID", "Repeater ID:": "중계 ID",
"WebSocket": "웹소켓", "WebSocket": "웹소켓",
@ -59,8 +59,8 @@
"Host:": "호스트:", "Host:": "호스트:",
"Port:": "포트:", "Port:": "포트:",
"Path:": "위치:", "Path:": "위치:",
"Automatic Reconnect": "자동 재연결", "Automatic reconnect": "자동 재연결",
"Reconnect Delay (ms):": "재연결 지연 시간 (ms)", "Reconnect delay (ms):": "재연결 지연 시간 (ms)",
"Logging:": "로깅", "Logging:": "로깅",
"Disconnect": "연결 해제", "Disconnect": "연결 해제",
"Connect": "연결", "Connect": "연결",

View File

@ -49,8 +49,8 @@
"Settings": "Instellingen", "Settings": "Instellingen",
"Shared Mode": "Gedeelde Modus", "Shared Mode": "Gedeelde Modus",
"View Only": "Alleen Kijken", "View Only": "Alleen Kijken",
"Clip to Window": "Randen buiten venster afsnijden", "Clip to window": "Randen buiten venster afsnijden",
"Scaling Mode:": "Schaalmodus:", "Scaling mode:": "Schaalmodus:",
"None": "Geen", "None": "Geen",
"Local Scaling": "Lokaal Schalen", "Local Scaling": "Lokaal Schalen",
"Remote Resizing": "Op Afstand Formaat Wijzigen", "Remote Resizing": "Op Afstand Formaat Wijzigen",
@ -63,7 +63,7 @@
"Path:": "Pad:", "Path:": "Pad:",
"Automatic Reconnect": "Automatisch Opnieuw Verbinden", "Automatic Reconnect": "Automatisch Opnieuw Verbinden",
"Reconnect Delay (ms):": "Vertraging voor Opnieuw Verbinden (ms):", "Reconnect Delay (ms):": "Vertraging voor Opnieuw Verbinden (ms):",
"Show Dot when No Cursor": "Geef stip weer indien geen cursor", "Show dot when no cursor": "Geef stip weer indien geen cursor",
"Logging:": "Logmeldingen:", "Logging:": "Logmeldingen:",
"Disconnect": "Verbinding verbreken", "Disconnect": "Verbinding verbreken",
"Connect": "Verbinden", "Connect": "Verbinden",

View File

@ -21,9 +21,9 @@
"Middle mousebutton": "Środkowy przycisk myszy", "Middle mousebutton": "Środkowy przycisk myszy",
"Right mousebutton": "Prawy przycisk myszy", "Right mousebutton": "Prawy przycisk myszy",
"Keyboard": "Klawiatura", "Keyboard": "Klawiatura",
"Show Keyboard": "Pokaż klawiaturę", "Show keyboard": "Pokaż klawiaturę",
"Extra keys": "Przyciski dodatkowe", "Extra keys": "Przyciski dodatkowe",
"Show Extra Keys": "Pokaż przyciski dodatkowe", "Show extra keys": "Pokaż przyciski dodatkowe",
"Ctrl": "Ctrl", "Ctrl": "Ctrl",
"Toggle Ctrl": "Przełącz Ctrl", "Toggle Ctrl": "Przełącz Ctrl",
"Alt": "Alt", "Alt": "Alt",
@ -49,8 +49,8 @@
"Clip to Window": "Przytnij do Okna", "Clip to Window": "Przytnij do Okna",
"Scaling Mode:": "Tryb Skalowania:", "Scaling Mode:": "Tryb Skalowania:",
"None": "Brak", "None": "Brak",
"Local Scaling": "Skalowanie lokalne", "Local scaling": "Skalowanie lokalne",
"Remote Resizing": "Skalowanie zdalne", "Remote resizing": "Skalowanie zdalne",
"Advanced": "Zaawansowane", "Advanced": "Zaawansowane",
"Repeater ID:": "ID Repeatera:", "Repeater ID:": "ID Repeatera:",
"WebSocket": "WebSocket", "WebSocket": "WebSocket",
@ -58,8 +58,8 @@
"Host:": "Host:", "Host:": "Host:",
"Port:": "Port:", "Port:": "Port:",
"Path:": "Ścieżka:", "Path:": "Ścieżka:",
"Automatic Reconnect": "Automatycznie wznawiaj połączenie", "Automatic reconnect": "Automatycznie wznawiaj połączenie",
"Reconnect Delay (ms):": "Opóźnienie wznawiania (ms):", "Reconnect delay (ms):": "Opóźnienie wznawiania (ms):",
"Logging:": "Poziom logowania:", "Logging:": "Poziom logowania:",
"Disconnect": "Rozłącz", "Disconnect": "Rozłącz",
"Connect": "Połącz", "Connect": "Połącz",

View File

@ -15,11 +15,11 @@
"noVNC encountered an error:": "O noVNC encontrou um erro:", "noVNC encountered an error:": "O noVNC encontrou um erro:",
"Hide/Show the control bar": "Esconder/mostrar a barra de controles", "Hide/Show the control bar": "Esconder/mostrar a barra de controles",
"Drag": "Arrastar", "Drag": "Arrastar",
"Move/Drag Viewport": "Mover/arrastar a janela", "Move/Drag viewport": "Mover/arrastar a janela",
"Keyboard": "Teclado", "Keyboard": "Teclado",
"Show Keyboard": "Mostrar teclado", "Show keyboard": "Mostrar teclado",
"Extra keys": "Teclas adicionais", "Extra keys": "Teclas adicionais",
"Show Extra Keys": "Mostar teclas adicionais", "Show extra keys": "Mostar teclas adicionais",
"Ctrl": "Ctrl", "Ctrl": "Ctrl",
"Toggle Ctrl": "Pressionar/soltar Ctrl", "Toggle Ctrl": "Pressionar/soltar Ctrl",
"Alt": "Alt", "Alt": "Alt",
@ -42,13 +42,13 @@
"Clear": "Limpar", "Clear": "Limpar",
"Fullscreen": "Tela cheia", "Fullscreen": "Tela cheia",
"Settings": "Configurações", "Settings": "Configurações",
"Shared Mode": "Modo compartilhado", "Shared mode": "Modo compartilhado",
"View Only": "Apenas visualizar", "View only": "Apenas visualizar",
"Clip to Window": "Recortar à janela", "Clip to window": "Recortar à janela",
"Scaling Mode:": "Modo de dimensionamento:", "Scaling mode:": "Modo de dimensionamento:",
"None": "Nenhum", "None": "Nenhum",
"Local Scaling": "Local", "Local scaling": "Local",
"Remote Resizing": "Remoto", "Remote resizing": "Remoto",
"Advanced": "Avançado", "Advanced": "Avançado",
"Quality:": "Qualidade:", "Quality:": "Qualidade:",
"Compression level:": "Nível de compressão:", "Compression level:": "Nível de compressão:",
@ -58,15 +58,15 @@
"Host:": "Host:", "Host:": "Host:",
"Port:": "Porta:", "Port:": "Porta:",
"Path:": "Caminho:", "Path:": "Caminho:",
"Automatic Reconnect": "Reconexão automática", "Automatic reconnect": "Reconexão automática",
"Reconnect Delay (ms):": "Atraso da reconexão (ms)", "Reconnect delay (ms):": "Atraso da reconexão (ms)",
"Show Dot when No Cursor": "Mostrar ponto quando não há cursor", "Show dot when no cursor": "Mostrar ponto quando não há cursor",
"Logging:": "Registros:", "Logging:": "Registros:",
"Version:": "Versão:", "Version:": "Versão:",
"Disconnect": "Desconectar", "Disconnect": "Desconectar",
"Connect": "Conectar", "Connect": "Conectar",
"Username:": "Nome de usuário:", "Username:": "Nome de usuário:",
"Password:": "Senha:", "Password:": "Senha:",
"Send Credentials": "Enviar credenciais", "Send credentials": "Enviar credenciais",
"Cancel": "Cancelar" "Cancel": "Cancelar"
} }

View File

@ -15,9 +15,9 @@
"noVNC encountered an error:": "Ошибка noVNC: ", "noVNC encountered an error:": "Ошибка noVNC: ",
"Hide/Show the control bar": "Скрыть/Показать контрольную панель", "Hide/Show the control bar": "Скрыть/Показать контрольную панель",
"Drag": "Переместить", "Drag": "Переместить",
"Move/Drag Viewport": "Переместить окно", "Move/Drag viewport": "Переместить окно",
"Keyboard": "Клавиатура", "Keyboard": "Клавиатура",
"Show Keyboard": "Показать клавиатуру", "Show keyboard": "Показать клавиатуру",
"Extra keys": "Дополнительные Кнопки", "Extra keys": "Дополнительные Кнопки",
"Show Extra Keys": "Показать Дополнительные Кнопки", "Show Extra Keys": "Показать Дополнительные Кнопки",
"Ctrl": "Ctrl", "Ctrl": "Ctrl",
@ -42,13 +42,13 @@
"Clear": "Очистить", "Clear": "Очистить",
"Fullscreen": "Во весь экран", "Fullscreen": "Во весь экран",
"Settings": "Настройки", "Settings": "Настройки",
"Shared Mode": "Общий режим", "Shared mode": "Общий режим",
"View Only": "Только Просмотр", "View Only": "Только Просмотр",
"Clip to Window": "В окно", "Clip to window": "В окно",
"Scaling Mode:": "Масштаб:", "Scaling mode:": "Масштаб:",
"None": "Нет", "None": "Нет",
"Local Scaling": "Локальный масштаб", "Local scaling": "Локальный масштаб",
"Remote Resizing": "Удаленная перенастройка размера", "Remote resizing": "Удаленная перенастройка размера",
"Advanced": "Дополнительно", "Advanced": "Дополнительно",
"Quality:": "Качество", "Quality:": "Качество",
"Compression level:": "Уровень Сжатия", "Compression level:": "Уровень Сжатия",
@ -58,9 +58,9 @@
"Host:": "Сервер:", "Host:": "Сервер:",
"Port:": "Порт:", "Port:": "Порт:",
"Path:": "Путь:", "Path:": "Путь:",
"Automatic Reconnect": "Автоматическое переподключение", "Automatic reconnect": "Автоматическое переподключение",
"Reconnect Delay (ms):": "Задержка переподключения (мс):", "Reconnect delay (ms):": "Задержка переподключения (мс):",
"Show Dot when No Cursor": "Показать точку вместо курсора", "Show dot when no cursor": "Показать точку вместо курсора",
"Logging:": "Лог:", "Logging:": "Лог:",
"Version:": "Версия", "Version:": "Версия",
"Disconnect": "Отключение", "Disconnect": "Отключение",

View File

@ -42,12 +42,12 @@
"Reset": "Återställ", "Reset": "Återställ",
"Clipboard": "Urklipp", "Clipboard": "Urklipp",
"Edit clipboard content in the textarea below.": "Redigera urklippets innehåll i fältet nedan.", "Edit clipboard content in the textarea below.": "Redigera urklippets innehåll i fältet nedan.",
"Full Screen": "Fullskärm", "Full screen": "Fullskärm",
"Settings": "Inställningar", "Settings": "Inställningar",
"Shared Mode": "Delat Läge", "Shared Mode": "Delat Läge",
"View Only": "Endast Visning", "View Only": "Endast Visning",
"Clip to Window": "Begränsa till Fönster", "Clip to Window": "Begränsa till Fönster",
"Scaling Mode:": "Skalningsläge:", "Scaling mode:": "Skalningsläge:",
"None": "Ingen", "None": "Ingen",
"Local Scaling": "Lokal Skalning", "Local Scaling": "Lokal Skalning",
"Remote Resizing": "Ändra Storlek", "Remote Resizing": "Ändra Storlek",
@ -61,8 +61,8 @@
"Port:": "Port:", "Port:": "Port:",
"Path:": "Sökväg:", "Path:": "Sökväg:",
"Automatic Reconnect": "Automatisk Återanslutning", "Automatic Reconnect": "Automatisk Återanslutning",
"Reconnect Delay (ms):": "Fördröjning (ms):", "Reconnect delay (ms):": "Fördröjning (ms):",
"Show Dot when No Cursor": "Visa prick när ingen muspekare finns", "Show dot when no cursor": "Visa prick när ingen muspekare finns",
"Logging:": "Loggning:", "Logging:": "Loggning:",
"Version:": "Version:", "Version:": "Version:",
"Disconnect": "Koppla från", "Disconnect": "Koppla från",

View File

@ -23,7 +23,7 @@
"Keyboard": "Klavye", "Keyboard": "Klavye",
"Show Keyboard": "Klavye Düzenini Göster", "Show Keyboard": "Klavye Düzenini Göster",
"Extra keys": "Ekstra tuşlar", "Extra keys": "Ekstra tuşlar",
"Show Extra Keys": "Ekstra tuşları göster", "Show extra keys": "Ekstra tuşları göster",
"Ctrl": "Ctrl", "Ctrl": "Ctrl",
"Toggle Ctrl": "Ctrl Değiştir ", "Toggle Ctrl": "Ctrl Değiştir ",
"Alt": "Alt", "Alt": "Alt",

View File

@ -10,7 +10,7 @@
"Disconnect timeout": "超时断开", "Disconnect timeout": "超时断开",
"noVNC encountered an error:": "noVNC 遇到一个错误:", "noVNC encountered an error:": "noVNC 遇到一个错误:",
"Hide/Show the control bar": "显示/隐藏控制栏", "Hide/Show the control bar": "显示/隐藏控制栏",
"Move/Drag Viewport": "移动/拖动窗口", "Move/Drag viewport": "移动/拖动窗口",
"viewport drag": "窗口拖动", "viewport drag": "窗口拖动",
"Active Mouse Button": "启动鼠标按键", "Active Mouse Button": "启动鼠标按键",
"No mousebutton": "禁用鼠标按键", "No mousebutton": "禁用鼠标按键",
@ -18,9 +18,9 @@
"Middle mousebutton": "鼠标中键", "Middle mousebutton": "鼠标中键",
"Right mousebutton": "鼠标右键", "Right mousebutton": "鼠标右键",
"Keyboard": "键盘", "Keyboard": "键盘",
"Show Keyboard": "显示键盘", "Show keyboard": "显示键盘",
"Extra keys": "额外按键", "Extra keys": "额外按键",
"Show Extra Keys": "显示额外按键", "Show extra keys": "显示额外按键",
"Ctrl": "Ctrl", "Ctrl": "Ctrl",
"Toggle Ctrl": "切换 Ctrl", "Toggle Ctrl": "切换 Ctrl",
"Edit clipboard content in the textarea below.": "在下面的文本区域中编辑剪贴板内容。", "Edit clipboard content in the textarea below.": "在下面的文本区域中编辑剪贴板内容。",
@ -43,14 +43,14 @@
"Fullscreen": "全屏", "Fullscreen": "全屏",
"Settings": "设置", "Settings": "设置",
"Encrypt": "加密", "Encrypt": "加密",
"Shared Mode": "分享模式", "Shared mode": "分享模式",
"View Only": "仅查看", "View only": "仅查看",
"Clip to Window": "限制/裁切窗口大小", "Clip to window": "限制/裁切窗口大小",
"Scaling Mode:": "缩放模式:", "Scaling mode:": "缩放模式:",
"None": "无", "None": "无",
"Local Scaling": "本地缩放", "Local scaling": "本地缩放",
"Local Downscaling": "降低本地尺寸", "Local Downscaling": "降低本地尺寸",
"Remote Resizing": "远程调整大小", "Remote resizing": "远程调整大小",
"Advanced": "高级", "Advanced": "高级",
"Local Cursor": "本地光标", "Local Cursor": "本地光标",
"Repeater ID:": "中继站 ID", "Repeater ID:": "中继站 ID",
@ -58,8 +58,8 @@
"Host:": "主机:", "Host:": "主机:",
"Port:": "端口:", "Port:": "端口:",
"Path:": "路径:", "Path:": "路径:",
"Automatic Reconnect": "自动重新连接", "Automatic reconnect": "自动重新连接",
"Reconnect Delay (ms):": "重新连接间隔 (ms)", "Reconnect delay (ms):": "重新连接间隔 (ms)",
"Logging:": "日志级别:", "Logging:": "日志级别:",
"Disconnect": "断开连接", "Disconnect": "断开连接",
"Connect": "连接", "Connect": "连接",

View File

@ -14,7 +14,7 @@
"Password is required": "請提供密碼", "Password is required": "請提供密碼",
"noVNC encountered an error:": "noVNC 遇到一個錯誤:", "noVNC encountered an error:": "noVNC 遇到一個錯誤:",
"Hide/Show the control bar": "顯示/隱藏控制列", "Hide/Show the control bar": "顯示/隱藏控制列",
"Move/Drag Viewport": "拖放顯示範圍", "Move/Drag viewport": "拖放顯示範圍",
"viewport drag": "顯示範圍拖放", "viewport drag": "顯示範圍拖放",
"Active Mouse Button": "啟用滑鼠按鍵", "Active Mouse Button": "啟用滑鼠按鍵",
"No mousebutton": "無滑鼠按鍵", "No mousebutton": "無滑鼠按鍵",
@ -22,9 +22,9 @@
"Middle mousebutton": "滑鼠中鍵", "Middle mousebutton": "滑鼠中鍵",
"Right mousebutton": "滑鼠右鍵", "Right mousebutton": "滑鼠右鍵",
"Keyboard": "鍵盤", "Keyboard": "鍵盤",
"Show Keyboard": "顯示鍵盤", "Show keyboard": "顯示鍵盤",
"Extra keys": "額外按鍵", "Extra keys": "額外按鍵",
"Show Extra Keys": "顯示額外按鍵", "Show extra keys": "顯示額外按鍵",
"Ctrl": "Ctrl", "Ctrl": "Ctrl",
"Toggle Ctrl": "切換 Ctrl", "Toggle Ctrl": "切換 Ctrl",
"Alt": "Alt", "Alt": "Alt",
@ -45,13 +45,13 @@
"Clear": "清除", "Clear": "清除",
"Fullscreen": "全螢幕", "Fullscreen": "全螢幕",
"Settings": "設定", "Settings": "設定",
"Shared Mode": "分享模式", "Shared mode": "分享模式",
"View Only": "僅檢視", "View only": "僅檢視",
"Clip to Window": "限制/裁切視窗大小", "Clip to window": "限制/裁切視窗大小",
"Scaling Mode:": "縮放模式:", "Scaling mode:": "縮放模式:",
"None": "無", "None": "無",
"Local Scaling": "本機縮放", "Local scaling": "本機縮放",
"Remote Resizing": "遠端調整大小", "Remote resizing": "遠端調整大小",
"Advanced": "進階", "Advanced": "進階",
"Repeater ID:": "中繼站 ID", "Repeater ID:": "中繼站 ID",
"WebSocket": "WebSocket", "WebSocket": "WebSocket",
@ -59,8 +59,8 @@
"Host:": "主機:", "Host:": "主機:",
"Port:": "連接埠:", "Port:": "連接埠:",
"Path:": "路徑:", "Path:": "路徑:",
"Automatic Reconnect": "自動重新連線", "Automatic reconnect": "自動重新連線",
"Reconnect Delay (ms):": "重新連線間隔 (ms)", "Reconnect delay (ms):": "重新連線間隔 (ms)",
"Logging:": "日誌級別:", "Logging:": "日誌級別:",
"Disconnect": "中斷連線", "Disconnect": "中斷連線",
"Connect": "連線", "Connect": "連線",

View File

@ -1,13 +1,13 @@
/* /*
* noVNC: HTML5 VNC client * noVNC: HTML5 VNC client
* Copyright (C) 2018 The noVNC Authors * Copyright (C) 2018 The noVNC authors
* Licensed under MPL 2.0 (see LICENSE.txt) * Licensed under MPL 2.0 (see LICENSE.txt)
* *
* See README.md for usage and integration instructions. * See README.md for usage and integration instructions.
*/ */
/* /*
* Localization Utilities * Localization utilities
*/ */
export class Localizer { export class Localizer {

View File

@ -1,6 +1,6 @@
/* /*
* noVNC base CSS * noVNC base CSS
* Copyright (C) 2019 The noVNC Authors * Copyright (C) 2019 The noVNC authors
* noVNC is licensed under the MPL 2.0 (see LICENSE.txt) * noVNC is licensed under the MPL 2.0 (see LICENSE.txt)
* This file is licensed under the 2-Clause BSD license (see LICENSE.txt). * This file is licensed under the 2-Clause BSD license (see LICENSE.txt).
*/ */
@ -213,7 +213,7 @@ html {
} }
/* ---------------------------------------- /* ----------------------------------------
* Control Bar * Control bar
* ---------------------------------------- * ----------------------------------------
*/ */
@ -629,13 +629,13 @@ html {
margin-left: 1rem; margin-left: 1rem;
} }
/* Connection Controls */ /* Connection controls */
:root:not(.noVNC_connected) #noVNC_disconnect_button { :root:not(.noVNC_connected) #noVNC_disconnect_button {
display: none; display: none;
} }
/* ---------------------------------------- /* ----------------------------------------
* Status Dialog * Status dialog
* ---------------------------------------- * ----------------------------------------
*/ */
@ -701,7 +701,7 @@ html {
} }
/* ---------------------------------------- /* ----------------------------------------
* Connect Dialog * Connect dialog
* ---------------------------------------- * ----------------------------------------
*/ */
@ -770,7 +770,7 @@ html {
} }
/* ---------------------------------------- /* ----------------------------------------
* Server verification Dialog * Server verification dialog
* ---------------------------------------- * ----------------------------------------
*/ */
@ -787,7 +787,7 @@ html {
} }
/* ---------------------------------------- /* ----------------------------------------
* Password Dialog * Password dialog
* ---------------------------------------- * ----------------------------------------
*/ */
@ -806,7 +806,7 @@ html {
/* ---------------------------------------- /* ----------------------------------------
* Main Area * Main area
* ---------------------------------------- * ----------------------------------------
*/ */

View File

@ -1,6 +1,6 @@
/* /*
* noVNC general input element CSS * noVNC general input element CSS
* Copyright (C) 2022 The noVNC Authors * Copyright (C) 2022 The noVNC authors
* noVNC is licensed under the MPL 2.0 (see LICENSE.txt) * noVNC is licensed under the MPL 2.0 (see LICENSE.txt)
* This file is licensed under the 2-Clause BSD license (see LICENSE.txt). * This file is licensed under the 2-Clause BSD license (see LICENSE.txt).
*/ */

View File

@ -1,6 +1,6 @@
/* /*
* noVNC: HTML5 VNC client * noVNC: HTML5 VNC client
* Copyright (C) 2019 The noVNC Authors * Copyright (C) 2019 The noVNC authors
* Licensed under MPL 2.0 (see LICENSE.txt) * Licensed under MPL 2.0 (see LICENSE.txt)
* *
* See README.md for usage and integration instructions. * See README.md for usage and integration instructions.

View File

@ -1,6 +1,6 @@
/* /*
* noVNC: HTML5 VNC client * noVNC: HTML5 VNC client
* Copyright (C) 2019 The noVNC Authors * Copyright (C) 2019 The noVNC authors
* Licensed under MPL 2.0 (see LICENSE.txt) * Licensed under MPL 2.0 (see LICENSE.txt)
* *
* See README.md for usage and integration instructions. * See README.md for usage and integration instructions.
@ -27,7 +27,7 @@ export function initLogging(level) {
// the url can be requested in the following way: // the url can be requested in the following way:
// https://www.example.com#myqueryparam=myvalue&password=secretvalue // https://www.example.com#myqueryparam=myvalue&password=secretvalue
// //
// Even Mixing public and non public parameters will work: // Even mixing public and non public parameters will work:
// https://www.example.com?nonsecretparam=example.com#password=secretvalue // https://www.example.com?nonsecretparam=example.com#password=secretvalue
export function getQueryVar(name, defVal) { export function getQueryVar(name, defVal) {
"use strict"; "use strict";

View File

@ -1,6 +1,6 @@
/* /*
* noVNC: HTML5 VNC client * noVNC: HTML5 VNC client
* Copyright (C) 2021 The noVNC Authors * Copyright (C) 2021 The noVNC authors
* Licensed under MPL 2.0 (see LICENSE.txt) * Licensed under MPL 2.0 (see LICENSE.txt)
* *
* See README.md for usage and integration instructions. * See README.md for usage and integration instructions.

View File

@ -1,6 +1,6 @@
/* /*
* noVNC: HTML5 VNC client * noVNC: HTML5 VNC client
* Copyright (C) 2019 The noVNC Authors * Copyright (C) 2019 The noVNC authors
* Licensed under MPL 2.0 (see LICENSE.txt) * Licensed under MPL 2.0 (see LICENSE.txt)
* *
* See README.md for usage and integration instructions. * See README.md for usage and integration instructions.

View File

@ -1,6 +1,6 @@
/* /*
* noVNC: HTML5 VNC client * noVNC: HTML5 VNC client
* Copyright (C) 2024 The noVNC Authors * Copyright (C) 2024 The noVNC authors
* Licensed under MPL 2.0 (see LICENSE.txt) * Licensed under MPL 2.0 (see LICENSE.txt)
* *
* See README.md for usage and integration instructions. * See README.md for usage and integration instructions.

View File

@ -1,6 +1,6 @@
/* /*
* noVNC: HTML5 VNC client * noVNC: HTML5 VNC client
* Copyright (C) 2019 The noVNC Authors * Copyright (C) 2019 The noVNC authors
* Licensed under MPL 2.0 (see LICENSE.txt) * Licensed under MPL 2.0 (see LICENSE.txt)
* *
* See README.md for usage and integration instructions. * See README.md for usage and integration instructions.

View File

@ -1,6 +1,6 @@
/* /*
* noVNC: HTML5 VNC client * noVNC: HTML5 VNC client
* Copyright (C) 2019 The noVNC Authors * Copyright (C) 2019 The noVNC authors
* Licensed under MPL 2.0 (see LICENSE.txt) * Licensed under MPL 2.0 (see LICENSE.txt)
* *
* See README.md for usage and integration instructions. * See README.md for usage and integration instructions.

View File

@ -1,6 +1,6 @@
/* /*
* noVNC: HTML5 VNC client * noVNC: HTML5 VNC client
* Copyright (C) 2019 The noVNC Authors * Copyright (C) 2019 The noVNC authors
* Licensed under MPL 2.0 (see LICENSE.txt) * Licensed under MPL 2.0 (see LICENSE.txt)
* *
* See README.md for usage and integration instructions. * See README.md for usage and integration instructions.

View File

@ -1,6 +1,6 @@
/* /*
* noVNC: HTML5 VNC client * noVNC: HTML5 VNC client
* Copyright (C) 2019 The noVNC Authors * Copyright (C) 2019 The noVNC authors
* Licensed under MPL 2.0 (see LICENSE.txt) * Licensed under MPL 2.0 (see LICENSE.txt)
* *
* See README.md for usage and integration instructions. * See README.md for usage and integration instructions.

View File

@ -1,6 +1,6 @@
/* /*
* noVNC: HTML5 VNC client * noVNC: HTML5 VNC client
* Copyright (C) 2019 The noVNC Authors * Copyright (C) 2019 The noVNC authors
* (c) 2012 Michael Tinglof, Joe Balaz, Les Piech (Mercuri.ca) * (c) 2012 Michael Tinglof, Joe Balaz, Les Piech (Mercuri.ca)
* Licensed under MPL 2.0 (see LICENSE.txt) * Licensed under MPL 2.0 (see LICENSE.txt)
* *

View File

@ -1,6 +1,6 @@
/* /*
* noVNC: HTML5 VNC client * noVNC: HTML5 VNC client
* Copyright (C) 2019 The noVNC Authors * Copyright (C) 2019 The noVNC authors
* Licensed under MPL 2.0 (see LICENSE.txt) * Licensed under MPL 2.0 (see LICENSE.txt)
* *
* See README.md for usage and integration instructions. * See README.md for usage and integration instructions.

View File

@ -1,6 +1,6 @@
/* /*
* noVNC: HTML5 VNC client * noVNC: HTML5 VNC client
* Copyright (C) 2024 The noVNC Authors * Copyright (C) 2024 The noVNC authors
* Licensed under MPL 2.0 (see LICENSE.txt) * Licensed under MPL 2.0 (see LICENSE.txt)
* *
* See README.md for usage and integration instructions. * See README.md for usage and integration instructions.

View File

@ -1,6 +1,6 @@
/* /*
* noVNC: HTML5 VNC client * noVNC: HTML5 VNC client
* Copyright (C) 2021 The noVNC Authors * Copyright (C) 2021 The noVNC authors
* Licensed under MPL 2.0 (see LICENSE.txt) * Licensed under MPL 2.0 (see LICENSE.txt)
* *
* See README.md for usage and integration instructions. * See README.md for usage and integration instructions.

View File

@ -1,6 +1,6 @@
/* /*
* noVNC: HTML5 VNC client * noVNC: HTML5 VNC client
* Copyright (C) 2020 The noVNC Authors * Copyright (C) 2020 The noVNC authors
* Licensed under MPL 2.0 (see LICENSE.txt) * Licensed under MPL 2.0 (see LICENSE.txt)
* *
* See README.md for usage and integration instructions. * See README.md for usage and integration instructions.

View File

@ -1,6 +1,6 @@
/* /*
* noVNC: HTML5 VNC client * noVNC: HTML5 VNC client
* Copyright (C) 2019 The noVNC Authors * Copyright (C) 2019 The noVNC authors
* Licensed under MPL 2.0 (see LICENSE.txt) * Licensed under MPL 2.0 (see LICENSE.txt)
* *
* See README.md for usage and integration instructions. * See README.md for usage and integration instructions.

View File

@ -1,6 +1,6 @@
/* /*
* noVNC: HTML5 VNC client * noVNC: HTML5 VNC client
* Copyright (C) 2019 The noVNC Authors * Copyright (C) 2019 The noVNC authors
* Licensed under MPL 2.0 (see LICENSE.txt) * Licensed under MPL 2.0 (see LICENSE.txt)
* *
* See README.md for usage and integration instructions. * See README.md for usage and integration instructions.

View File

@ -1,6 +1,6 @@
/* /*
* noVNC: HTML5 VNC client * noVNC: HTML5 VNC client
* Copyright (C) 2020 The noVNC Authors * Copyright (C) 2020 The noVNC authors
* Licensed under MPL 2.0 (see LICENSE.txt) * Licensed under MPL 2.0 (see LICENSE.txt)
* *
* See README.md for usage and integration instructions. * See README.md for usage and integration instructions.

View File

@ -1,6 +1,6 @@
/* /*
* noVNC: HTML5 VNC client * noVNC: HTML5 VNC client
* Copyright (C) 2018 The noVNC Authors * Copyright (C) 2018 The noVNC authors
* Licensed under MPL 2.0 or any later version (see LICENSE.txt) * Licensed under MPL 2.0 or any later version (see LICENSE.txt)
*/ */

View File

@ -1,6 +1,6 @@
/* /*
* noVNC: HTML5 VNC client * noVNC: HTML5 VNC client
* Copyright (C) 2018 The noVNC Authors * Copyright (C) 2018 The noVNC authors
* Licensed under MPL 2.0 or any later version (see LICENSE.txt) * Licensed under MPL 2.0 or any later version (see LICENSE.txt)
*/ */

View File

@ -1,6 +1,6 @@
/* /*
* noVNC: HTML5 VNC client * noVNC: HTML5 VNC client
* Copyright (C) 2020 The noVNC Authors * Copyright (C) 2020 The noVNC authors
* Licensed under MPL 2.0 (see LICENSE.txt) * Licensed under MPL 2.0 (see LICENSE.txt)
* *
* See README.md for usage and integration instructions. * See README.md for usage and integration instructions.

View File

@ -1,6 +1,6 @@
/* /*
* noVNC: HTML5 VNC client * noVNC: HTML5 VNC client
* Copyright (C) 2019 The noVNC Authors * Copyright (C) 2019 The noVNC authors
* Licensed under MPL 2.0 or any later version (see LICENSE.txt) * Licensed under MPL 2.0 or any later version (see LICENSE.txt)
*/ */

View File

@ -1,6 +1,6 @@
/* /*
* noVNC: HTML5 VNC client * noVNC: HTML5 VNC client
* Copyright (C) 2018 The noVNC Authors * Copyright (C) 2018 The noVNC authors
* Licensed under MPL 2.0 or any later version (see LICENSE.txt) * Licensed under MPL 2.0 or any later version (see LICENSE.txt)
*/ */

View File

@ -1,6 +1,6 @@
/* /*
* noVNC: HTML5 VNC client * noVNC: HTML5 VNC client
* Copyright (C) 2020 The noVNC Authors * Copyright (C) 2020 The noVNC authors
* Licensed under MPL 2.0 (see LICENSE.txt) * Licensed under MPL 2.0 (see LICENSE.txt)
* *
* See README.md for usage and integration instructions. * See README.md for usage and integration instructions.
@ -720,6 +720,7 @@ export default class RFB extends EventTargetMixin {
currentHeight == this._expectedClientHeight; currentHeight == this._expectedClientHeight;
} }
// Handle browser window resizes
_handleResize() { _handleResize() {
// Don't change anything if the client size is already as expected // Don't change anything if the client size is already as expected
if (this._clientHasExpectedSize()) { if (this._clientHasExpectedSize()) {
@ -730,6 +731,7 @@ export default class RFB extends EventTargetMixin {
window.requestAnimationFrame(() => { window.requestAnimationFrame(() => {
this._updateClip(); this._updateClip();
this._updateScale(); this._updateScale();
this._saveExpectedClientSize();
}); });
if (this._resizeSession) { if (this._resizeSession) {
@ -1378,7 +1380,7 @@ export default class RFB extends EventTargetMixin {
} }
} }
// Message Handlers // Message handlers
_negotiateProtocolVersion() { _negotiateProtocolVersion() {
if (this._sock.rQwait("version", 12)) { if (this._sock.rQwait("version", 12)) {
@ -2427,7 +2429,7 @@ export default class RFB extends EventTargetMixin {
switch (xvpMsg) { switch (xvpMsg) {
case 0: // XVP_FAIL case 0: // XVP_FAIL
Log.Error("XVP Operation Failed"); Log.Error("XVP operation failed");
break; break;
case 1: // XVP_INIT case 1: // XVP_INIT
this._rfbXvpVer = xvpVer; this._rfbXvpVer = xvpVer;
@ -2756,7 +2758,7 @@ export default class RFB extends EventTargetMixin {
} }
_handleLedEvent() { _handleLedEvent() {
if (this._sock.rQwait("LED Status", 1)) { if (this._sock.rQwait("LED status", 1)) {
return false; return false;
} }
@ -2871,6 +2873,7 @@ export default class RFB extends EventTargetMixin {
this._fbWidth, this._fbHeight); this._fbWidth, this._fbHeight);
} }
// Handle resize-messages from the server
_resize(width, height) { _resize(width, height) {
this._fbWidth = width; this._fbWidth = width;
this._fbHeight = height; this._fbHeight = height;

View File

@ -1,6 +1,6 @@
/* /*
* noVNC: HTML5 VNC client * noVNC: HTML5 VNC client
* Copyright (C) 2019 The noVNC Authors * Copyright (C) 2019 The noVNC authors
* Licensed under MPL 2.0 (see LICENSE.txt) * Licensed under MPL 2.0 (see LICENSE.txt)
* *
* See README.md for usage and integration instructions. * See README.md for usage and integration instructions.
@ -9,6 +9,7 @@
*/ */
import * as Log from './logging.js'; import * as Log from './logging.js';
import Base64 from '../base64.js';
// Touch detection // Touch detection
export let isTouchDevice = ('ontouchstart' in document.documentElement) || export let isTouchDevice = ('ontouchstart' in document.documentElement) ||
@ -74,7 +75,7 @@ export let supportsWebCodecsH264Decode = false;
async function _checkWebCodecsH264DecodeSupport() { async function _checkWebCodecsH264DecodeSupport() {
if (!('VideoDecoder' in window)) { if (!('VideoDecoder' in window)) {
return; return false;
} }
// We'll need to make do with some placeholders here // We'll need to make do with some placeholders here
@ -85,10 +86,70 @@ async function _checkWebCodecsH264DecodeSupport() {
optimizeForLatency: true, optimizeForLatency: true,
}; };
const result = await VideoDecoder.isConfigSupported(config); let support = await VideoDecoder.isConfigSupported(config);
supportsWebCodecsH264Decode = result.supported; if (!support.supported) {
return false;
}
// Firefox incorrectly reports supports for H.264 under some
// circumstances, so we need to actually test a real frame
// https://bugzilla.mozilla.org/show_bug.cgi?id=1932392
const data = new Uint8Array(Base64.decode(
'AAAAAWdCwBTZnpuAgICgAAADACAAAAZB4oVNAAAAAWjJYyyAAAABBgX//4Hc' +
'Rem95tlIt5Ys2CDZI+7veDI2NCAtIGNvcmUgMTY0IHIzMTA4IDMxZTE5Zjkg' +
'LSBILjI2NC9NUEVHLTQgQVZDIGNvZGVjIC0gQ29weWxlZnQgMjAwMy0yMDIz' +
'IC0gaHR0cDovL3d3dy52aWRlb2xhbi5vcmcveDI2NC5odG1sIC0gb3B0aW9u' +
'czogY2FiYWM9MCByZWY9NSBkZWJsb2NrPTE6MDowIGFuYWx5c2U9MHgxOjB4' +
'MTExIG1lPWhleCBzdWJtZT04IHBzeT0xIHBzeV9yZD0xLjAwOjAuMDAgbWl4' +
'ZWRfcmVmPTEgbWVfcmFuZ2U9MTYgY2hyb21hX21lPTEgdHJlbGxpcz0yIDh4' +
'OGRjdD0wIGNxbT0wIGRlYWR6b25lPTIxLDExIGZhc3RfcHNraXA9MSBjaHJv' +
'bWFfcXBfb2Zmc2V0PS0yIHRocmVhZHM9MSBsb29rYWhlYWRfdGhyZWFkcz0x' +
'IHNsaWNlZF90aHJlYWRzPTAgbnI9MCBkZWNpbWF0ZT0xIGludGVybGFjZWQ9' +
'MCBibHVyYXlfY29tcGF0PTAgY29uc3RyYWluZWRfaW50cmE9MCBiZnJhbWVz' +
'PTAgd2VpZ2h0cD0wIGtleWludD1pbmZpbml0ZSBrZXlpbnRfbWluPTI1IHNj' +
'ZW5lY3V0PTQwIGludHJhX3JlZnJlc2g9MCByY19sb29rYWhlYWQ9NTAgcmM9' +
'YWJyIG1idHJlZT0xIGJpdHJhdGU9NDAwIHJhdGV0b2w9MS4wIHFjb21wPTAu' +
'NjAgcXBtaW49MCBxcG1heD02OSBxcHN0ZXA9NCBpcF9yYXRpbz0xLjQwIGFx' +
'PTE6MS4wMACAAAABZYiEBrxmKAAPVccAAS044AA5DRJMnkycJk4TPw=='));
let gotframe = false;
let error = null;
let decoder = new VideoDecoder({
output: (frame) => { gotframe = true; },
error: (e) => { error = e; },
});
let chunk = new EncodedVideoChunk({
timestamp: 0,
type: 'key',
data: data,
});
decoder.configure(config);
decoder.decode(chunk);
try {
await decoder.flush();
} catch (e) {
// Firefox incorrectly throws an exception here
// https://bugzilla.mozilla.org/show_bug.cgi?id=1932566
error = e;
}
// Firefox fails to deliver the error on Windows, so we need to
// check if we got a frame instead
// https://bugzilla.mozilla.org/show_bug.cgi?id=1932579
if (!gotframe) {
return false;
}
if (error !== null) {
return false;
}
return true;
} }
_checkWebCodecsH264DecodeSupport(); supportsWebCodecsH264Decode = await _checkWebCodecsH264DecodeSupport();
/* /*
* The functions for detection of platforms and browsers below are exported * The functions for detection of platforms and browsers below are exported

View File

@ -1,6 +1,6 @@
/* /*
* noVNC: HTML5 VNC client * noVNC: HTML5 VNC client
* Copyright (C) 2019 The noVNC Authors * Copyright (C) 2019 The noVNC authors
* Licensed under MPL 2.0 or any later version (see LICENSE.txt) * Licensed under MPL 2.0 or any later version (see LICENSE.txt)
*/ */

View File

@ -1,6 +1,6 @@
/* /*
* noVNC: HTML5 VNC client * noVNC: HTML5 VNC client
* Copyright (C) 2020 The noVNC Authors * Copyright (C) 2020 The noVNC authors
* Licensed under MPL 2.0 (see LICENSE.txt) * Licensed under MPL 2.0 (see LICENSE.txt)
* *
* See README.md for usage and integration instructions. * See README.md for usage and integration instructions.

View File

@ -1,6 +1,6 @@
/* /*
* noVNC: HTML5 VNC client * noVNC: HTML5 VNC client
* Copyright (C) 2018 The noVNC Authors * Copyright (C) 2018 The noVNC authors
* Licensed under MPL 2.0 (see LICENSE.txt) * Licensed under MPL 2.0 (see LICENSE.txt)
* *
* See README.md for usage and integration instructions. * See README.md for usage and integration instructions.

View File

@ -1,6 +1,6 @@
/* /*
* noVNC: HTML5 VNC client * noVNC: HTML5 VNC client
* Copyright (C) 2019 The noVNC Authors * Copyright (C) 2019 The noVNC authors
* Licensed under MPL 2.0 (see LICENSE.txt) * Licensed under MPL 2.0 (see LICENSE.txt)
* *
* See README.md for usage and integration instructions. * See README.md for usage and integration instructions.

View File

@ -1,6 +1,6 @@
/* /*
* noVNC: HTML5 VNC client * noVNC: HTML5 VNC client
* Copyright (C) 2020 The noVNC Authors * Copyright (C) 2020 The noVNC authors
* Licensed under MPL 2.0 (see LICENSE.txt) * Licensed under MPL 2.0 (see LICENSE.txt)
* *
* See README.md for usage and integration instructions. * See README.md for usage and integration instructions.

View File

@ -1,6 +1,6 @@
/* /*
* noVNC: HTML5 VNC client * noVNC: HTML5 VNC client
* Copyright (C) 2019 The noVNC Authors * Copyright (C) 2019 The noVNC authors
* Licensed under MPL 2.0 (see LICENSE.txt) * Licensed under MPL 2.0 (see LICENSE.txt)
* *
* See README.md for usage and integration instructions. * See README.md for usage and integration instructions.

View File

@ -1,6 +1,6 @@
/* /*
* noVNC: HTML5 VNC client * noVNC: HTML5 VNC client
* Copyright (C) 2019 The noVNC Authors * Copyright (C) 2019 The noVNC authors
* Licensed under MPL 2.0 (see LICENSE.txt) * Licensed under MPL 2.0 (see LICENSE.txt)
* *
* See README.md for usage and integration instructions. * See README.md for usage and integration instructions.

View File

@ -1,6 +1,6 @@
/* /*
* Websock: high-performance buffering wrapper * Websock: high-performance buffering wrapper
* Copyright (C) 2019 The noVNC Authors * Copyright (C) 2019 The noVNC authors
* Licensed under MPL 2.0 (see LICENSE.txt) * Licensed under MPL 2.0 (see LICENSE.txt)
* *
* Websock is similar to the standard WebSocket / RTCDataChannel object * Websock is similar to the standard WebSocket / RTCDataChannel object
@ -70,7 +70,7 @@ export default class Websock {
}; };
} }
// Getters and Setters // Getters and setters
get readyState() { get readyState() {
let subState; let subState;
@ -94,7 +94,7 @@ export default class Websock {
return "unknown"; return "unknown";
} }
// Receive Queue // Receive queue
rQpeek8() { rQpeek8() {
return this._rQ[this._rQi]; return this._rQ[this._rQi];
} }
@ -173,7 +173,7 @@ export default class Websock {
return false; return false;
} }
// Send Queue // Send queue
sQpush8(num) { sQpush8(num) {
this._sQensureSpace(1); this._sQensureSpace(1);
@ -227,7 +227,7 @@ export default class Websock {
} }
} }
// Event Handlers // Event handlers
off(evt) { off(evt) {
this._eventHandlers[evt] = () => {}; this._eventHandlers[evt] = () => {};
} }
@ -325,7 +325,7 @@ export default class Websock {
if (this._rQbufferSize > MAX_RQ_GROW_SIZE) { if (this._rQbufferSize > MAX_RQ_GROW_SIZE) {
this._rQbufferSize = MAX_RQ_GROW_SIZE; this._rQbufferSize = MAX_RQ_GROW_SIZE;
if (this._rQbufferSize - (this._rQlen - this._rQi) < minFit) { if (this._rQbufferSize - (this._rQlen - this._rQi) < minFit) {
throw new Error("Receive Queue buffer exceeded " + MAX_RQ_GROW_SIZE + " bytes, and the new message could not fit"); throw new Error("Receive queue buffer exceeded " + MAX_RQ_GROW_SIZE + " bytes, and the new message could not fit");
} }
} }

View File

@ -1,4 +1,4 @@
# 1. Internal Modules # 1. Internal modules
The noVNC client is composed of several internal modules that handle The noVNC client is composed of several internal modules that handle
rendering, input, networking, etc. Each of the modules is designed to rendering, input, networking, etc. Each of the modules is designed to
@ -9,7 +9,7 @@ stable, and this documentation is not maintained as well as the
official external API. official external API.
## 1.1 Module List ## 1.1 Module list
* __Keyboard__ (core/input/keyboard.js): Keyboard input event handler with * __Keyboard__ (core/input/keyboard.js): Keyboard input event handler with
non-US keyboard support. Translates keyDown and keyUp events to X11 non-US keyboard support. Translates keyDown and keyUp events to X11
@ -32,9 +32,9 @@ callback event name, and the callback function.
## 2. Modules ## 2. Modules
## 2.1 Keyboard Module ## 2.1 Keyboard module
### 2.1.1 Configuration Attributes ### 2.1.1 Configuration attributes
None None
@ -52,9 +52,9 @@ None
| onkeypress | (keysym, code, down) | Handler for key press/release | onkeypress | (keysym, code, down) | Handler for key press/release
## 2.2 Display Module ## 2.2 Display module
### 2.2.1 Configuration Attributes ### 2.2.1 Configuration attributes
| name | type | mode | default | description | name | type | mode | default | description
| ------------ | ----- | ---- | ------- | ------------ | ------------ | ----- | ---- | ------- | ------------

View File

@ -1,4 +1,4 @@
# Embedding and Deploying noVNC Application # Embedding and deploying noVNC application
This document describes how to embed and deploy the noVNC application, which This document describes how to embed and deploy the noVNC application, which
includes settings and a full user interface. If you are looking for includes settings and a full user interface. If you are looking for
@ -71,8 +71,8 @@ query string. Currently the following options are available:
* `logging` - The console log level. Can be one of `error`, `warn`, `info` or * `logging` - The console log level. Can be one of `error`, `warn`, `info` or
`debug`. `debug`.
## HTTP Serving Considerations ## HTTP serving considerations
### Browser Cache Issue ### Browser cache issue
If you serve noVNC files using a web server that provides an ETag header, and If you serve noVNC files using a web server that provides an ETag header, and
include any options in the query string, a nasty browser cache issue can bite include any options in the query string, a nasty browser cache issue can bite
@ -84,7 +84,7 @@ to always revalidate cached files using conditional requests. The correct
semantics are achieved via the (confusingly named) `Cache-Control: no-cache` semantics are achieved via the (confusingly named) `Cache-Control: no-cache`
header that needs to be provided in the web server responses. header that needs to be provided in the web server responses.
### Example Server Configurations ### Example server configurations
Apache: Apache:

View File

@ -16,7 +16,7 @@ noVNC includes a small example application called `vnc_lite.html`. This does
not make use of all the features of noVNC, but is a good start to see how to not make use of all the features of noVNC, but is a good start to see how to
do things. do things.
## Conversion of Modules ## Conversion of modules
noVNC is written using ECMAScript 6 modules. This is not supported by older noVNC is written using ECMAScript 6 modules. This is not supported by older
versions of Node.js. To use noVNC with those older versions of Node.js the versions of Node.js. To use noVNC with those older versions of Node.js the

View File

@ -30,7 +30,7 @@ provides a cut-and-paste URL to go to.
active connections active connections
.SH AUTHOR .SH AUTHOR
The noVNC Authors The noVNC authors
https://github.com/novnc/noVNC https://github.com/novnc/noVNC
.SH SEE ALSO .SH SEE ALSO

View File

@ -5,11 +5,11 @@ export default [
js.configs.recommended, js.configs.recommended,
{ {
languageOptions: { languageOptions: {
ecmaVersion: 2020, ecmaVersion: 2022,
sourceType: "module", sourceType: "module",
globals: { globals: {
...globals.browser, ...globals.browser,
...globals.es2020, ...globals.es2022,
} }
}, },
ignores: ["**/xtscancodes.js"], ignores: ["**/xtscancodes.js"],

View File

@ -56,8 +56,7 @@
"karma-safari-launcher": "latest", "karma-safari-launcher": "latest",
"karma-script-launcher": "latest", "karma-script-launcher": "latest",
"mocha": "latest", "mocha": "latest",
"node-getopt": "latest", "pofile": "latest",
"po2json": "latest",
"sinon": "latest", "sinon": "latest",
"sinon-chai": "latest" "sinon-chai": "latest"
}, },

View File

@ -19,7 +19,7 @@ update-js: $(JSONFILES)
update-pot: update-pot:
xgettext --output=noVNC.js.pot \ xgettext --output=noVNC.js.pot \
--copyright-holder="The noVNC Authors" \ --copyright-holder="The noVNC authors" \
--package-name="noVNC" \ --package-name="noVNC" \
--package-version="$(VERSION)" \ --package-version="$(VERSION)" \
--msgid-bugs-address="novnc@googlegroups.com" \ --msgid-bugs-address="novnc@googlegroups.com" \

View File

@ -1,5 +1,5 @@
# Czech translations for noVNC package. # Czech translations for noVNC package.
# Copyright (C) 2018 The noVNC Authors # Copyright (C) 2018 The noVNC authors
# This file is distributed under the same license as the noVNC package. # This file is distributed under the same license as the noVNC package.
# Petr <petr@kle.cz>, 2018. # Petr <petr@kle.cz>, 2018.
# #
@ -78,7 +78,7 @@ msgid "Hide/Show the control bar"
msgstr "Skrýt/zobrazit ovládací panel" msgstr "Skrýt/zobrazit ovládací panel"
#: ../vnc.html:101 #: ../vnc.html:101
msgid "Move/Drag Viewport" msgid "Move/Drag viewport"
msgstr "Přesunout/přetáhnout výřez" msgstr "Přesunout/přetáhnout výřez"
#: ../vnc.html:101 #: ../vnc.html:101
@ -110,7 +110,7 @@ msgid "Keyboard"
msgstr "Klávesnice" msgstr "Klávesnice"
#: ../vnc.html:119 #: ../vnc.html:119
msgid "Show Keyboard" msgid "Show keyboard"
msgstr "Zobrazit klávesnici" msgstr "Zobrazit klávesnici"
#: ../vnc.html:126 #: ../vnc.html:126
@ -118,7 +118,7 @@ msgid "Extra keys"
msgstr "Extra klávesy" msgstr "Extra klávesy"
#: ../vnc.html:126 #: ../vnc.html:126
msgid "Show Extra Keys" msgid "Show extra keys"
msgstr "Zobrazit extra klávesy" msgstr "Zobrazit extra klávesy"
#: ../vnc.html:131 #: ../vnc.html:131
@ -202,19 +202,19 @@ msgid "Settings"
msgstr "Nastavení" msgstr "Nastavení"
#: ../vnc.html:197 #: ../vnc.html:197
msgid "Shared Mode" msgid "Shared mode"
msgstr "Sdílený režim" msgstr "Sdílený režim"
#: ../vnc.html:200 #: ../vnc.html:200
msgid "View Only" msgid "View only"
msgstr "Pouze prohlížení" msgstr "Pouze prohlížení"
#: ../vnc.html:204 #: ../vnc.html:204
msgid "Clip to Window" msgid "Clip to window"
msgstr "Přizpůsobit oknu" msgstr "Přizpůsobit oknu"
#: ../vnc.html:207 #: ../vnc.html:207
msgid "Scaling Mode:" msgid "Scaling mode:"
msgstr "Přizpůsobení velikosti" msgstr "Přizpůsobení velikosti"
#: ../vnc.html:209 #: ../vnc.html:209
@ -222,11 +222,11 @@ msgid "None"
msgstr "Žádné" msgstr "Žádné"
#: ../vnc.html:210 #: ../vnc.html:210
msgid "Local Scaling" msgid "Local scaling"
msgstr "Místní" msgstr "Místní"
#: ../vnc.html:211 #: ../vnc.html:211
msgid "Remote Resizing" msgid "Remote resizing"
msgstr "Vzdálené" msgstr "Vzdálené"
#: ../vnc.html:216 #: ../vnc.html:216
@ -258,15 +258,15 @@ msgid "Path:"
msgstr "Cesta" msgstr "Cesta"
#: ../vnc.html:244 #: ../vnc.html:244
msgid "Automatic Reconnect" msgid "Automatic reconnect"
msgstr "Automatická obnova připojení" msgstr "Automatická obnova připojení"
#: ../vnc.html:247 #: ../vnc.html:247
msgid "Reconnect Delay (ms):" msgid "Reconnect delay (ms):"
msgstr "Zpoždění připojení (ms)" msgstr "Zpoždění připojení (ms)"
#: ../vnc.html:252 #: ../vnc.html:252
msgid "Show Dot when No Cursor" msgid "Show dot when no cursor"
msgstr "Tečka místo chybějícího kurzoru myši" msgstr "Tečka místo chybějícího kurzoru myši"
#: ../vnc.html:257 #: ../vnc.html:257

View File

@ -1,6 +1,6 @@
# German translations for noVNC package # German translations for noVNC package
# German translation for noVNC. # German translation for noVNC.
# Copyright (C) 2018 The noVNC Authors # Copyright (C) 2018 The noVNC authors
# This file is distributed under the same license as the noVNC package. # This file is distributed under the same license as the noVNC package.
# Loek Janssen <loekjanssen@gmail.com>, 2016. # Loek Janssen <loekjanssen@gmail.com>, 2016.
# #
@ -76,7 +76,7 @@ msgid "Hide/Show the control bar"
msgstr "Kontrollleiste verstecken/anzeigen" msgstr "Kontrollleiste verstecken/anzeigen"
#: ../vnc.html:106 #: ../vnc.html:106
msgid "Move/Drag Viewport" msgid "Move/Drag viewport"
msgstr "Ansichtsfenster verschieben/ziehen" msgstr "Ansichtsfenster verschieben/ziehen"
#: ../vnc.html:106 #: ../vnc.html:106
@ -108,7 +108,7 @@ msgid "Keyboard"
msgstr "Tastatur" msgstr "Tastatur"
#: ../vnc.html:124 #: ../vnc.html:124
msgid "Show Keyboard" msgid "Show keyboard"
msgstr "Tastatur anzeigen" msgstr "Tastatur anzeigen"
#: ../vnc.html:131 #: ../vnc.html:131
@ -116,7 +116,7 @@ msgid "Extra keys"
msgstr "Zusatztasten" msgstr "Zusatztasten"
#: ../vnc.html:131 #: ../vnc.html:131
msgid "Show Extra Keys" msgid "Show extra keys"
msgstr "Zusatztasten anzeigen" msgstr "Zusatztasten anzeigen"
#: ../vnc.html:136 #: ../vnc.html:136
@ -200,19 +200,19 @@ msgid "Settings"
msgstr "Einstellungen" msgstr "Einstellungen"
#: ../vnc.html:202 #: ../vnc.html:202
msgid "Shared Mode" msgid "Shared mode"
msgstr "Geteilter Modus" msgstr "Geteilter Modus"
#: ../vnc.html:205 #: ../vnc.html:205
msgid "View Only" msgid "View only"
msgstr "Nur betrachten" msgstr "Nur betrachten"
#: ../vnc.html:209 #: ../vnc.html:209
msgid "Clip to Window" msgid "Clip to window"
msgstr "Auf Fenster begrenzen" msgstr "Auf Fenster begrenzen"
#: ../vnc.html:212 #: ../vnc.html:212
msgid "Scaling Mode:" msgid "Scaling mode:"
msgstr "Skalierungsmodus:" msgstr "Skalierungsmodus:"
#: ../vnc.html:214 #: ../vnc.html:214
@ -220,11 +220,11 @@ msgid "None"
msgstr "Keiner" msgstr "Keiner"
#: ../vnc.html:215 #: ../vnc.html:215
msgid "Local Scaling" msgid "Local scaling"
msgstr "Lokales skalieren" msgstr "Lokales skalieren"
#: ../vnc.html:216 #: ../vnc.html:216
msgid "Remote Resizing" msgid "Remote resizing"
msgstr "Serverseitiges skalieren" msgstr "Serverseitiges skalieren"
#: ../vnc.html:221 #: ../vnc.html:221
@ -256,11 +256,11 @@ msgid "Path:"
msgstr "Pfad:" msgstr "Pfad:"
#: ../vnc.html:249 #: ../vnc.html:249
msgid "Automatic Reconnect" msgid "Automatic reconnect"
msgstr "Automatisch wiederverbinden" msgstr "Automatisch wiederverbinden"
#: ../vnc.html:252 #: ../vnc.html:252
msgid "Reconnect Delay (ms):" msgid "Reconnect delay (ms):"
msgstr "Wiederverbindungsverzögerung (ms):" msgstr "Wiederverbindungsverzögerung (ms):"
#: ../vnc.html:258 #: ../vnc.html:258

View File

@ -1,5 +1,5 @@
# Greek translations for noVNC package. # Greek translations for noVNC package.
# Copyright (C) 2018 The noVNC Authors # Copyright (C) 2018 The noVNC authors
# This file is distributed under the same license as the noVNC package. # This file is distributed under the same license as the noVNC package.
# Giannis Kosmas <kosmasgiannis@gmail.com>, 2016. # Giannis Kosmas <kosmasgiannis@gmail.com>, 2016.
# #

View File

@ -1,6 +1,6 @@
# Spanish translations for noVNC package # Spanish translations for noVNC package
# Traducciones al español para el paquete noVNC. # Traducciones al español para el paquete noVNC.
# Copyright (C) 2018 The noVNC Authors # Copyright (C) 2018 The noVNC authors
# This file is distributed under the same license as the noVNC package. # This file is distributed under the same license as the noVNC package.
# Juanjo Diaz <juanjo.diazmo@gmail.com>, 2018. # Juanjo Diaz <juanjo.diazmo@gmail.com>, 2018.
# Adrian Scillato <ascillato@gmail.com>, 2021. # Adrian Scillato <ascillato@gmail.com>, 2021.
@ -64,7 +64,7 @@ msgid "Hide/Show the control bar"
msgstr "Ocultar/Mostrar la barra de control" msgstr "Ocultar/Mostrar la barra de control"
#: ../vnc.html:106 #: ../vnc.html:106
msgid "Move/Drag Viewport" msgid "Move/Drag viewport"
msgstr "Mover/Arrastrar la ventana" msgstr "Mover/Arrastrar la ventana"
#: ../vnc.html:106 #: ../vnc.html:106
@ -96,7 +96,7 @@ msgid "Keyboard"
msgstr "Teclado" msgstr "Teclado"
#: ../vnc.html:124 #: ../vnc.html:124
msgid "Show Keyboard" msgid "Show keyboard"
msgstr "Mostrar teclado" msgstr "Mostrar teclado"
#: ../vnc.html:131 #: ../vnc.html:131
@ -196,15 +196,15 @@ msgid "Shared Mode"
msgstr "Modo Compartido" msgstr "Modo Compartido"
#: ../vnc.html:205 #: ../vnc.html:205
msgid "View Only" msgid "View only"
msgstr "Solo visualización" msgstr "Solo visualización"
#: ../vnc.html:209 #: ../vnc.html:209
msgid "Clip to Window" msgid "Clip to window"
msgstr "Recortar al tamaño de la ventana" msgstr "Recortar al tamaño de la ventana"
#: ../vnc.html:212 #: ../vnc.html:212
msgid "Scaling Mode:" msgid "Scaling mode:"
msgstr "Modo de escalado:" msgstr "Modo de escalado:"
#: ../vnc.html:214 #: ../vnc.html:214
@ -220,7 +220,7 @@ msgid "Local Downscaling"
msgstr "Reducción de escala local" msgstr "Reducción de escala local"
#: ../vnc.html:217 #: ../vnc.html:217
msgid "Remote Resizing" msgid "Remote resizing"
msgstr "Cambio de tamaño remoto" msgstr "Cambio de tamaño remoto"
#: ../vnc.html:222 #: ../vnc.html:222
@ -252,11 +252,11 @@ msgid "Path:"
msgstr "Ruta:" msgstr "Ruta:"
#: ../vnc.html:254 #: ../vnc.html:254
msgid "Automatic Reconnect" msgid "Automatic reconnect"
msgstr "Reconexión automática" msgstr "Reconexión automática"
#: ../vnc.html:257 #: ../vnc.html:257
msgid "Reconnect Delay (ms):" msgid "Reconnect delay (ms):"
msgstr "Retraso en la reconexión (ms):" msgstr "Retraso en la reconexión (ms):"
#: ../vnc.html:263 #: ../vnc.html:263

View File

@ -1,6 +1,6 @@
# French translations for noVNC package # French translations for noVNC package
# Traductions françaises du paquet noVNC. # Traductions françaises du paquet noVNC.
# Copyright (C) 2021 The noVNC Authors # Copyright (C) 2021 The noVNC authors
# This file is distributed under the same license as the noVNC package. # This file is distributed under the same license as the noVNC package.
# Jose <jose.matsuda@canada.ca>, 2021. # Jose <jose.matsuda@canada.ca>, 2021.
# Lowxorx <lowxorx@lahan.fr>, 2022. # Lowxorx <lowxorx@lahan.fr>, 2022.
@ -92,7 +92,7 @@ msgid "Keyboard"
msgstr "Clavier" msgstr "Clavier"
#: ../vnc.html:97 #: ../vnc.html:97
msgid "Show Keyboard" msgid "Show keyboard"
msgstr "Afficher le clavier" msgstr "Afficher le clavier"
#: ../vnc.html:102 #: ../vnc.html:102
@ -100,7 +100,7 @@ msgid "Extra keys"
msgstr "Touches supplémentaires" msgstr "Touches supplémentaires"
#: ../vnc.html:102 #: ../vnc.html:102
msgid "Show Extra Keys" msgid "Show extra keys"
msgstr "Afficher les touches supplémentaires" msgstr "Afficher les touches supplémentaires"
#: ../vnc.html:107 #: ../vnc.html:107
@ -192,19 +192,19 @@ msgid "Settings"
msgstr "Paramètres" msgstr "Paramètres"
#: ../vnc.html:175 #: ../vnc.html:175
msgid "Shared Mode" msgid "Shared mode"
msgstr "Mode partagé" msgstr "Mode partagé"
#: ../vnc.html:178 #: ../vnc.html:178
msgid "View Only" msgid "View only"
msgstr "Afficher uniquement" msgstr "Afficher uniquement"
#: ../vnc.html:182 #: ../vnc.html:182
msgid "Clip to Window" msgid "Clip to window"
msgstr "Clip à fenêtre" msgstr "Clip à fenêtre"
#: ../vnc.html:185 #: ../vnc.html:185
msgid "Scaling Mode:" msgid "Scaling mode:"
msgstr "Mode mise à l'échelle :" msgstr "Mode mise à l'échelle :"
#: ../vnc.html:187 #: ../vnc.html:187
@ -212,11 +212,11 @@ msgid "None"
msgstr "Aucun" msgstr "Aucun"
#: ../vnc.html:188 #: ../vnc.html:188
msgid "Local Scaling" msgid "Local scaling"
msgstr "Mise à l'échelle locale" msgstr "Mise à l'échelle locale"
#: ../vnc.html:189 #: ../vnc.html:189
msgid "Remote Resizing" msgid "Remote resizing"
msgstr "Redimensionnement à distance" msgstr "Redimensionnement à distance"
#: ../vnc.html:194 #: ../vnc.html:194
@ -256,15 +256,15 @@ msgid "Path:"
msgstr "Chemin :" msgstr "Chemin :"
#: ../vnc.html:231 #: ../vnc.html:231
msgid "Automatic Reconnect" msgid "Automatic reconnect"
msgstr "Reconnecter automatiquemen" msgstr "Reconnecter automatiquemen"
#: ../vnc.html:234 #: ../vnc.html:234
msgid "Reconnect Delay (ms):" msgid "Reconnect delay (ms):"
msgstr "Délai de reconnexion (ms) :" msgstr "Délai de reconnexion (ms) :"
#: ../vnc.html:239 #: ../vnc.html:239
msgid "Show Dot when No Cursor" msgid "Show dot when no cursor"
msgstr "Afficher le point lorsqu'il n'y a pas de curseur" msgstr "Afficher le point lorsqu'il n'y a pas de curseur"
#: ../vnc.html:244 #: ../vnc.html:244
@ -292,7 +292,7 @@ msgid "Password:"
msgstr "Mot de passe :" msgstr "Mot de passe :"
#: ../vnc.html:298 #: ../vnc.html:298
msgid "Send Credentials" msgid "Send credentials"
msgstr "Envoyer les identifiants" msgstr "Envoyer les identifiants"
#: ../vnc.html:308 #: ../vnc.html:308

View File

@ -1,6 +1,6 @@
# Italian translations for noVNC # Italian translations for noVNC
# Traduzione italiana di noVNC # Traduzione italiana di noVNC
# Copyright (C) 2022 The noVNC Authors # Copyright (C) 2022 The noVNC authors
# This file is distributed under the same license as the noVNC package. # This file is distributed under the same license as the noVNC package.
# Fabio Fantoni <fabio.fantoni@m2r.biz>, 2022. # Fabio Fantoni <fabio.fantoni@m2r.biz>, 2022.
# #
@ -84,7 +84,7 @@ msgid "Drag"
msgstr "" msgstr ""
#: ../vnc.html:78 #: ../vnc.html:78
msgid "Move/Drag Viewport" msgid "Move/Drag viewport"
msgstr "" msgstr ""
#: ../vnc.html:84 #: ../vnc.html:84
@ -92,7 +92,7 @@ msgid "Keyboard"
msgstr "Tastiera" msgstr "Tastiera"
#: ../vnc.html:84 #: ../vnc.html:84
msgid "Show Keyboard" msgid "Show keyboard"
msgstr "Mostra tastiera" msgstr "Mostra tastiera"
#: ../vnc.html:89 #: ../vnc.html:89
@ -192,7 +192,7 @@ msgid "Settings"
msgstr "Impostazioni" msgstr "Impostazioni"
#: ../vnc.html:162 #: ../vnc.html:162
msgid "Shared Mode" msgid "Shared mode"
msgstr "Modalità condivisa" msgstr "Modalità condivisa"
#: ../vnc.html:165 #: ../vnc.html:165
@ -200,11 +200,11 @@ msgid "View Only"
msgstr "Sola Visualizzazione" msgstr "Sola Visualizzazione"
#: ../vnc.html:169 #: ../vnc.html:169
msgid "Clip to Window" msgid "Clip to window"
msgstr "" msgstr ""
#: ../vnc.html:172 #: ../vnc.html:172
msgid "Scaling Mode:" msgid "Scaling mode:"
msgstr "Modalità di ridimensionamento:" msgstr "Modalità di ridimensionamento:"
#: ../vnc.html:174 #: ../vnc.html:174

227
po/ja.po
View File

@ -1,15 +1,15 @@
# Japanese translations for noVNC package # Japanese translations for noVNC package
# noVNC パッケージに対する日訳 # noVNC パッケージに対する日訳
# Copyright (C) 2019 The noVNC Authors # Copyright (C) 2019-2024 The noVNC authors
# This file is distributed under the same license as the noVNC package. # This file is distributed under the same license as the noVNC package.
# nnn1590 <nnn1590@nnn1590.org>, 2019-2020. # nnn1590 <nnn1590@nnn1590.org>, 2019-2024.
# #
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: noVNC 1.1.0\n" "Project-Id-Version: noVNC 1.5.0\n"
"Report-Msgid-Bugs-To: novnc@googlegroups.com\n" "Report-Msgid-Bugs-To: novnc@googlegroups.com\n"
"POT-Creation-Date: 2022-12-27 15:24+0100\n" "POT-Creation-Date: 2024-06-03 14:10+0200\n"
"PO-Revision-Date: 2023-03-21 12:42+0900\n" "PO-Revision-Date: 2024-12-14 15:22+0900\n"
"Last-Translator: nnn1590 <nnn1590@nnn1590.org>\n" "Last-Translator: nnn1590 <nnn1590@nnn1590.org>\n"
"Language-Team: Japanese\n" "Language-Team: Japanese\n"
"Language: ja\n" "Language: ja\n"
@ -20,8 +20,11 @@ msgstr ""
"X-Generator: Poedit 2.3\n" "X-Generator: Poedit 2.3\n"
#: ../app/ui.js:69 #: ../app/ui.js:69
msgid "HTTPS is required for full functionality" msgid ""
msgstr "すべての機能を使用するにはHTTPS接続が必要です" "Running without HTTPS is not recommended, crashes or other issues are likely."
msgstr ""
"HTTPS接続なしで実行することは推奨されません。クラッシュしたりその他の問題が発"
"生したりする可能性があります。"
#: ../app/ui.js:410 #: ../app/ui.js:410
msgid "Connecting..." msgid "Connecting..."
@ -43,321 +46,297 @@ msgstr "内部エラー"
msgid "Must set host" msgid "Must set host"
msgstr "ホストを設定する必要があります" msgstr "ホストを設定する必要があります"
#: ../app/ui.js:1110 #: ../app/ui.js:1052
msgid "Failed to connect to server: "
msgstr "サーバーへの接続に失敗しました: "
#: ../app/ui.js:1118
msgid "Connected (encrypted) to " msgid "Connected (encrypted) to "
msgstr "接続しました (暗号化済み): " msgstr "接続しました (暗号化済み): "
#: ../app/ui.js:1112 #: ../app/ui.js:1120
msgid "Connected (unencrypted) to " msgid "Connected (unencrypted) to "
msgstr "接続しました (暗号化されていません): " msgstr "接続しました (暗号化されていません): "
#: ../app/ui.js:1135 #: ../app/ui.js:1143
msgid "Something went wrong, connection is closed" msgid "Something went wrong, connection is closed"
msgstr "何らかの問題で、接続が閉じられました" msgstr "問題が発生したため、接続が閉じられました"
#: ../app/ui.js:1138 #: ../app/ui.js:1146
msgid "Failed to connect to server" msgid "Failed to connect to server"
msgstr "サーバーへの接続に失敗しました" msgstr "サーバーへの接続に失敗しました"
#: ../app/ui.js:1150 #: ../app/ui.js:1158
msgid "Disconnected" msgid "Disconnected"
msgstr "切断しました" msgstr "切断しました"
#: ../app/ui.js:1165 #: ../app/ui.js:1173
msgid "New connection has been rejected with reason: " msgid "New connection has been rejected with reason: "
msgstr "新規接続は次の理由で拒否されました: " msgstr "新規接続は次の理由で拒否されました: "
#: ../app/ui.js:1168 #: ../app/ui.js:1176
msgid "New connection has been rejected" msgid "New connection has been rejected"
msgstr "新規接続は拒否されました" msgstr "新規接続は拒否されました"
#: ../app/ui.js:1234 #: ../app/ui.js:1242
msgid "Credentials are required" msgid "Credentials are required"
msgstr "資格情報が必要です" msgstr "資格情報が必要です"
#: ../vnc.html:57 #: ../vnc.html:55
msgid "noVNC encountered an error:" msgid "noVNC encountered an error:"
msgstr "noVNC でエラーが発生しました:" msgstr "noVNC でエラーが発生しました:"
#: ../vnc.html:67 #: ../vnc.html:65
msgid "Hide/Show the control bar" msgid "Hide/Show the control bar"
msgstr "コントロールバーを隠す/表示する" msgstr "コントロールバーを隠す/表示する"
#: ../vnc.html:76 #: ../vnc.html:74
msgid "Drag" msgid "Drag"
msgstr "ドラッグ" msgstr "ドラッグ"
#: ../vnc.html:76 #: ../vnc.html:74
msgid "Move/Drag Viewport" msgid "Move/Drag viewport"
msgstr "ビューポートを移動/ドラッグ" msgstr "ビューポートを移動/ドラッグ"
#: ../vnc.html:82 #: ../vnc.html:80
msgid "Keyboard" msgid "Keyboard"
msgstr "キーボード" msgstr "キーボード"
#: ../vnc.html:82 #: ../vnc.html:80
msgid "Show Keyboard" msgid "Show keyboard"
msgstr "キーボードを表示" msgstr "キーボードを表示"
#: ../vnc.html:87 #: ../vnc.html:85
msgid "Extra keys" msgid "Extra keys"
msgstr "追加キー" msgstr "追加キー"
#: ../vnc.html:87 #: ../vnc.html:85
msgid "Show Extra Keys" msgid "Show extra keys"
msgstr "追加キーを表示" msgstr "追加キーを表示"
#: ../vnc.html:92 #: ../vnc.html:90
msgid "Ctrl" msgid "Ctrl"
msgstr "Ctrl" msgstr "Ctrl"
#: ../vnc.html:92 #: ../vnc.html:90
msgid "Toggle Ctrl" msgid "Toggle Ctrl"
msgstr "Ctrl キーをトグル" msgstr "Ctrl キーをトグル"
#: ../vnc.html:95 #: ../vnc.html:93
msgid "Alt" msgid "Alt"
msgstr "Alt" msgstr "Alt"
#: ../vnc.html:95 #: ../vnc.html:93
msgid "Toggle Alt" msgid "Toggle Alt"
msgstr "Alt キーをトグル" msgstr "Alt キーをトグル"
#: ../vnc.html:98 #: ../vnc.html:96
msgid "Toggle Windows" msgid "Toggle Windows"
msgstr "Windows キーをトグル" msgstr "Windows キーをトグル"
#: ../vnc.html:98 #: ../vnc.html:96
msgid "Windows" msgid "Windows"
msgstr "Windows" msgstr "Windows"
#: ../vnc.html:101 #: ../vnc.html:99
msgid "Send Tab" msgid "Send Tab"
msgstr "Tab キーを送信" msgstr "Tab キーを送信"
#: ../vnc.html:101 #: ../vnc.html:99
msgid "Tab" msgid "Tab"
msgstr "Tab" msgstr "Tab"
#: ../vnc.html:104 #: ../vnc.html:102
msgid "Esc" msgid "Esc"
msgstr "Esc" msgstr "Esc"
#: ../vnc.html:104 #: ../vnc.html:102
msgid "Send Escape" msgid "Send Escape"
msgstr "Escape キーを送信" msgstr "Escape キーを送信"
#: ../vnc.html:107 #: ../vnc.html:105
msgid "Ctrl+Alt+Del" msgid "Ctrl+Alt+Del"
msgstr "Ctrl+Alt+Del" msgstr "Ctrl+Alt+Del"
#: ../vnc.html:107 #: ../vnc.html:105
msgid "Send Ctrl-Alt-Del" msgid "Send Ctrl-Alt-Del"
msgstr "Ctrl-Alt-Del を送信" msgstr "Ctrl-Alt-Del を送信"
#: ../vnc.html:114 #: ../vnc.html:112
msgid "Shutdown/Reboot" msgid "Shutdown/Reboot"
msgstr "シャットダウン/再起動" msgstr "シャットダウン/再起動"
#: ../vnc.html:114 #: ../vnc.html:112
msgid "Shutdown/Reboot..." msgid "Shutdown/Reboot..."
msgstr "シャットダウン/再起動..." msgstr "シャットダウン/再起動..."
#: ../vnc.html:120 #: ../vnc.html:118
msgid "Power" msgid "Power"
msgstr "電源" msgstr "電源"
#: ../vnc.html:122 #: ../vnc.html:120
msgid "Shutdown" msgid "Shutdown"
msgstr "シャットダウン" msgstr "シャットダウン"
#: ../vnc.html:123 #: ../vnc.html:121
msgid "Reboot" msgid "Reboot"
msgstr "再起動" msgstr "再起動"
#: ../vnc.html:124 #: ../vnc.html:122
msgid "Reset" msgid "Reset"
msgstr "リセット" msgstr "リセット"
#: ../vnc.html:129 ../vnc.html:135 #: ../vnc.html:127 ../vnc.html:133
msgid "Clipboard" msgid "Clipboard"
msgstr "クリップボード" msgstr "クリップボード"
#: ../vnc.html:137 #: ../vnc.html:135
msgid "Edit clipboard content in the textarea below." msgid "Edit clipboard content in the textarea below."
msgstr "以下の入力欄からクリップボードの内容を編集できます。" msgstr "以下の入力欄からクリップボードの内容を編集できます。"
#: ../vnc.html:145 #: ../vnc.html:143
msgid "Full Screen" msgid "Full screen"
msgstr "全画面表示" msgstr "全画面表示"
#: ../vnc.html:150 ../vnc.html:156 #: ../vnc.html:148 ../vnc.html:154
msgid "Settings" msgid "Settings"
msgstr "設定" msgstr "設定"
#: ../vnc.html:160 #: ../vnc.html:158
msgid "Shared Mode" msgid "Shared mode"
msgstr "共有モード" msgstr "共有モード"
#: ../vnc.html:163 #: ../vnc.html:161
msgid "View Only" msgid "View only"
msgstr "表示専用" msgstr "表示専用"
#: ../vnc.html:167 #: ../vnc.html:165
msgid "Clip to Window" msgid "Clip to window"
msgstr "ウィンドウにクリップ" msgstr "ウィンドウにクリップ"
#: ../vnc.html:170 #: ../vnc.html:168
msgid "Scaling Mode:" msgid "Scaling mode:"
msgstr "スケーリングモード:" msgstr "スケーリングモード:"
#: ../vnc.html:172 #: ../vnc.html:170
msgid "None" msgid "None"
msgstr "なし" msgstr "なし"
#: ../vnc.html:173 #: ../vnc.html:171
msgid "Local Scaling" msgid "Local scaling"
msgstr "ローカルスケーリング" msgstr "ローカルスケーリング"
#: ../vnc.html:174 #: ../vnc.html:172
msgid "Remote Resizing" msgid "Remote resizing"
msgstr "リモートでリサイズ" msgstr "リモートでリサイズ"
#: ../vnc.html:179 #: ../vnc.html:177
msgid "Advanced" msgid "Advanced"
msgstr "高度" msgstr "高度"
#: ../vnc.html:182 #: ../vnc.html:180
msgid "Quality:" msgid "Quality:"
msgstr "品質:" msgstr "品質:"
#: ../vnc.html:186 #: ../vnc.html:184
msgid "Compression level:" msgid "Compression level:"
msgstr "圧縮レベル:" msgstr "圧縮レベル:"
#: ../vnc.html:191 #: ../vnc.html:189
msgid "Repeater ID:" msgid "Repeater ID:"
msgstr "リピーター ID:" msgstr "リピーター ID:"
#: ../vnc.html:195 #: ../vnc.html:193
msgid "WebSocket" msgid "WebSocket"
msgstr "WebSocket" msgstr "WebSocket"
#: ../vnc.html:198 #: ../vnc.html:196
msgid "Encrypt" msgid "Encrypt"
msgstr "暗号化" msgstr "暗号化"
#: ../vnc.html:201 #: ../vnc.html:199
msgid "Host:" msgid "Host:"
msgstr "ホスト:" msgstr "ホスト:"
#: ../vnc.html:205 #: ../vnc.html:203
msgid "Port:" msgid "Port:"
msgstr "ポート:" msgstr "ポート:"
#: ../vnc.html:209 #: ../vnc.html:207
msgid "Path:" msgid "Path:"
msgstr "パス:" msgstr "パス:"
#: ../vnc.html:216 #: ../vnc.html:214
msgid "Automatic Reconnect" msgid "Automatic reconnect"
msgstr "自動再接続" msgstr "自動再接続"
#: ../vnc.html:219 #: ../vnc.html:217
msgid "Reconnect Delay (ms):" msgid "Reconnect delay (ms):"
msgstr "再接続する遅延 (ミリ秒):" msgstr "再接続する遅延 (ミリ秒):"
#: ../vnc.html:224 #: ../vnc.html:222
msgid "Show Dot when No Cursor" msgid "Show dot when no cursor"
msgstr "カーソルがないときにドットを表示する" msgstr "カーソルがないときにドットを表示する"
#: ../vnc.html:229 #: ../vnc.html:227
msgid "Logging:" msgid "Logging:"
msgstr "ロギング:" msgstr "ロギング:"
#: ../vnc.html:238 #: ../vnc.html:236
msgid "Version:" msgid "Version:"
msgstr "バージョン:" msgstr "バージョン:"
#: ../vnc.html:246 #: ../vnc.html:244
msgid "Disconnect" msgid "Disconnect"
msgstr "切断" msgstr "切断"
#: ../vnc.html:269 #: ../vnc.html:267
msgid "Connect" msgid "Connect"
msgstr "接続" msgstr "接続"
#: ../vnc.html:278 #: ../vnc.html:276
msgid "Server identity" msgid "Server identity"
msgstr "サーバーの識別情報" msgstr "サーバーの識別情報"
#: ../vnc.html:281 #: ../vnc.html:279
msgid "The server has provided the following identifying information:" msgid "The server has provided the following identifying information:"
msgstr "サーバーは以下の識別情報を提供しています:" msgstr "サーバーは以下の識別情報を提供しています:"
#: ../vnc.html:285 #: ../vnc.html:283
msgid "Fingerprint:" msgid "Fingerprint:"
msgstr "フィンガープリント:" msgstr "フィンガープリント:"
#: ../vnc.html:288 #: ../vnc.html:286
msgid "" msgid ""
"Please verify that the information is correct and press \"Approve\". " "Please verify that the information is correct and press \"Approve\". "
"Otherwise press \"Reject\"." "Otherwise press \"Reject\"."
msgstr "" msgstr ""
"この情報が正しい場合は「承認」を、そうでない場合は「拒否」を押してく" "この情報が正しい場合は「承認」を、そうでない場合は「拒否」を押してください。"
"ださい。"
#: ../vnc.html:293 #: ../vnc.html:291
msgid "Approve" msgid "Approve"
msgstr "承認" msgstr "承認"
#: ../vnc.html:294 #: ../vnc.html:292
msgid "Reject" msgid "Reject"
msgstr "拒否" msgstr "拒否"
#: ../vnc.html:302 #: ../vnc.html:300
msgid "Credentials" msgid "Credentials"
msgstr "資格情報" msgstr "資格情報"
#: ../vnc.html:306 #: ../vnc.html:304
msgid "Username:" msgid "Username:"
msgstr "ユーザー名:" msgstr "ユーザー名:"
#: ../vnc.html:310 #: ../vnc.html:308
msgid "Password:" msgid "Password:"
msgstr "パスワード:" msgstr "パスワード:"
#: ../vnc.html:314 #: ../vnc.html:312
msgid "Send Credentials" msgid "Send credentials"
msgstr "資格情報を送信" msgstr "資格情報を送信"
#: ../vnc.html:323 #: ../vnc.html:321
msgid "Cancel" msgid "Cancel"
msgstr "キャンセル" msgstr "キャンセル"
#~ msgid "Clear"
#~ msgstr "クリア"
#~ msgid "Password is required"
#~ msgstr "パスワードが必要です"
#~ msgid "viewport drag"
#~ msgstr "ビューポートをドラッグ"
#~ msgid "Active Mouse Button"
#~ msgstr "アクティブなマウスボタン"
#~ msgid "No mousebutton"
#~ msgstr "マウスボタンなし"
#~ msgid "Left mousebutton"
#~ msgstr "左マウスボタン"
#~ msgid "Middle mousebutton"
#~ msgstr "中マウスボタン"
#~ msgid "Right mousebutton"
#~ msgstr "右マウスボタン"
#~ msgid "Send Password"
#~ msgstr "パスワードを送信"

View File

@ -1,5 +1,5 @@
# SOME DESCRIPTIVE TITLE. # SOME DESCRIPTIVE TITLE.
# Copyright (C) 2018 The noVNC Authors # Copyright (C) 2018 The noVNC authors
# This file is distributed under the same license as the noVNC package. # This file is distributed under the same license as the noVNC package.
# Baw Appie <pp121324@gmail.com>, 2018. # Baw Appie <pp121324@gmail.com>, 2018.
# #
@ -78,7 +78,7 @@ msgid "Hide/Show the control bar"
msgstr "컨트롤 바 숨기기/보이기" msgstr "컨트롤 바 숨기기/보이기"
#: ../vnc.html:108 #: ../vnc.html:108
msgid "Move/Drag Viewport" msgid "Move/Drag viewport"
msgstr "움직이기/드래그 뷰포트" msgstr "움직이기/드래그 뷰포트"
#: ../vnc.html:108 #: ../vnc.html:108
@ -110,7 +110,7 @@ msgid "Keyboard"
msgstr "키보드" msgstr "키보드"
#: ../vnc.html:126 #: ../vnc.html:126
msgid "Show Keyboard" msgid "Show keyboard"
msgstr "키보드 보이기" msgstr "키보드 보이기"
#: ../vnc.html:133 #: ../vnc.html:133
@ -118,7 +118,7 @@ msgid "Extra keys"
msgstr "기타 키들" msgstr "기타 키들"
#: ../vnc.html:133 #: ../vnc.html:133
msgid "Show Extra Keys" msgid "Show extra keys"
msgstr "기타 키들 보이기" msgstr "기타 키들 보이기"
#: ../vnc.html:138 #: ../vnc.html:138
@ -202,19 +202,19 @@ msgid "Settings"
msgstr "설정" msgstr "설정"
#: ../vnc.html:204 #: ../vnc.html:204
msgid "Shared Mode" msgid "Shared mode"
msgstr "공유 모드" msgstr "공유 모드"
#: ../vnc.html:207 #: ../vnc.html:207
msgid "View Only" msgid "View only"
msgstr "보기 전용" msgstr "보기 전용"
#: ../vnc.html:211 #: ../vnc.html:211
msgid "Clip to Window" msgid "Clip to window"
msgstr "창에 클립" msgstr "창에 클립"
#: ../vnc.html:214 #: ../vnc.html:214
msgid "Scaling Mode:" msgid "Scaling mode:"
msgstr "스케일링 모드:" msgstr "스케일링 모드:"
#: ../vnc.html:216 #: ../vnc.html:216
@ -222,11 +222,11 @@ msgid "None"
msgstr "없음" msgstr "없음"
#: ../vnc.html:217 #: ../vnc.html:217
msgid "Local Scaling" msgid "Local scaling"
msgstr "로컬 스케일링" msgstr "로컬 스케일링"
#: ../vnc.html:218 #: ../vnc.html:218
msgid "Remote Resizing" msgid "Remote resizing"
msgstr "원격 크기 조절" msgstr "원격 크기 조절"
#: ../vnc.html:223 #: ../vnc.html:223
@ -258,11 +258,11 @@ msgid "Path:"
msgstr "위치:" msgstr "위치:"
#: ../vnc.html:251 #: ../vnc.html:251
msgid "Automatic Reconnect" msgid "Automatic reconnect"
msgstr "자동 재연결" msgstr "자동 재연결"
#: ../vnc.html:254 #: ../vnc.html:254
msgid "Reconnect Delay (ms):" msgid "Reconnect delay (ms):"
msgstr "재연결 지연 시간 (ms)" msgstr "재연결 지연 시간 (ms)"
#: ../vnc.html:260 #: ../vnc.html:260

View File

@ -1,6 +1,6 @@
# Dutch translations for noVNC package # Dutch translations for noVNC package
# Nederlandse vertalingen voor het pakket noVNC. # Nederlandse vertalingen voor het pakket noVNC.
# Copyright (C) 2018 The noVNC Authors # Copyright (C) 2018 The noVNC authors
# This file is distributed under the same license as the noVNC package. # This file is distributed under the same license as the noVNC package.
# Loek Janssen <loekjanssen@gmail.com>, 2016. # Loek Janssen <loekjanssen@gmail.com>, 2016.
# #
@ -219,11 +219,11 @@ msgid "View Only"
msgstr "Alleen Kijken" msgstr "Alleen Kijken"
#: ../vnc.html:202 #: ../vnc.html:202
msgid "Clip to Window" msgid "Clip to window"
msgstr "Randen buiten venster afsnijden" msgstr "Randen buiten venster afsnijden"
#: ../vnc.html:205 #: ../vnc.html:205
msgid "Scaling Mode:" msgid "Scaling mode:"
msgstr "Schaalmodus:" msgstr "Schaalmodus:"
#: ../vnc.html:207 #: ../vnc.html:207
@ -275,7 +275,7 @@ msgid "Reconnect Delay (ms):"
msgstr "Vertraging voor Opnieuw Verbinden (ms):" msgstr "Vertraging voor Opnieuw Verbinden (ms):"
#: ../vnc.html:250 #: ../vnc.html:250
msgid "Show Dot when No Cursor" msgid "Show dot when no cursor"
msgstr "Geef stip weer indien geen cursor" msgstr "Geef stip weer indien geen cursor"
#: ../vnc.html:255 #: ../vnc.html:255

View File

@ -1,5 +1,5 @@
# SOME DESCRIPTIVE TITLE. # SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR The noVNC Authors # Copyright (C) YEAR The noVNC authors
# This file is distributed under the same license as the noVNC package. # This file is distributed under the same license as the noVNC package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
# #
@ -91,7 +91,7 @@ msgid "Drag"
msgstr "" msgstr ""
#: ../vnc.html:74 #: ../vnc.html:74
msgid "Move/Drag Viewport" msgid "Move/Drag viewport"
msgstr "" msgstr ""
#: ../vnc.html:80 #: ../vnc.html:80
@ -99,7 +99,7 @@ msgid "Keyboard"
msgstr "" msgstr ""
#: ../vnc.html:80 #: ../vnc.html:80
msgid "Show Keyboard" msgid "Show keyboard"
msgstr "" msgstr ""
#: ../vnc.html:85 #: ../vnc.html:85
@ -107,7 +107,7 @@ msgid "Extra keys"
msgstr "" msgstr ""
#: ../vnc.html:85 #: ../vnc.html:85
msgid "Show Extra Keys" msgid "Show extra keys"
msgstr "" msgstr ""
#: ../vnc.html:90 #: ../vnc.html:90
@ -191,7 +191,7 @@ msgid "Edit clipboard content in the textarea below."
msgstr "" msgstr ""
#: ../vnc.html:143 #: ../vnc.html:143
msgid "Full Screen" msgid "Full screen"
msgstr "" msgstr ""
#: ../vnc.html:148 ../vnc.html:154 #: ../vnc.html:148 ../vnc.html:154
@ -199,19 +199,19 @@ msgid "Settings"
msgstr "" msgstr ""
#: ../vnc.html:158 #: ../vnc.html:158
msgid "Shared Mode" msgid "Shared mode"
msgstr "" msgstr ""
#: ../vnc.html:161 #: ../vnc.html:161
msgid "View Only" msgid "View only"
msgstr "" msgstr ""
#: ../vnc.html:165 #: ../vnc.html:165
msgid "Clip to Window" msgid "Clip to window"
msgstr "" msgstr ""
#: ../vnc.html:168 #: ../vnc.html:168
msgid "Scaling Mode:" msgid "Scaling mode:"
msgstr "" msgstr ""
#: ../vnc.html:170 #: ../vnc.html:170
@ -219,11 +219,11 @@ msgid "None"
msgstr "" msgstr ""
#: ../vnc.html:171 #: ../vnc.html:171
msgid "Local Scaling" msgid "Local scaling"
msgstr "" msgstr ""
#: ../vnc.html:172 #: ../vnc.html:172
msgid "Remote Resizing" msgid "Remote resizing"
msgstr "" msgstr ""
#: ../vnc.html:177 #: ../vnc.html:177
@ -263,15 +263,15 @@ msgid "Path:"
msgstr "" msgstr ""
#: ../vnc.html:214 #: ../vnc.html:214
msgid "Automatic Reconnect" msgid "Automatic reconnect"
msgstr "" msgstr ""
#: ../vnc.html:217 #: ../vnc.html:217
msgid "Reconnect Delay (ms):" msgid "Reconnect delay (ms):"
msgstr "" msgstr ""
#: ../vnc.html:222 #: ../vnc.html:222
msgid "Show Dot when No Cursor" msgid "Show dot when no cursor"
msgstr "" msgstr ""
#: ../vnc.html:227 #: ../vnc.html:227
@ -329,7 +329,7 @@ msgid "Password:"
msgstr "" msgstr ""
#: ../vnc.html:312 #: ../vnc.html:312
msgid "Send Credentials" msgid "Send credentials"
msgstr "" msgstr ""
#: ../vnc.html:321 #: ../vnc.html:321

View File

@ -1,5 +1,5 @@
# Polish translations for noVNC package. # Polish translations for noVNC package.
# Copyright (C) 2018 The noVNC Authors # Copyright (C) 2018 The noVNC authors
# This file is distributed under the same license as the noVNC package. # This file is distributed under the same license as the noVNC package.
# Mariusz Jamro <mariusz.jamro@gmail.com>, 2017. # Mariusz Jamro <mariusz.jamro@gmail.com>, 2017.
# #
@ -108,7 +108,7 @@ msgid "Keyboard"
msgstr "Klawiatura" msgstr "Klawiatura"
#: ../vnc.html:124 #: ../vnc.html:124
msgid "Show Keyboard" msgid "Show keyboard"
msgstr "Pokaż klawiaturę" msgstr "Pokaż klawiaturę"
#: ../vnc.html:131 #: ../vnc.html:131
@ -116,7 +116,7 @@ msgid "Extra keys"
msgstr "Przyciski dodatkowe" msgstr "Przyciski dodatkowe"
#: ../vnc.html:131 #: ../vnc.html:131
msgid "Show Extra Keys" msgid "Show extra keys"
msgstr "Pokaż przyciski dodatkowe" msgstr "Pokaż przyciski dodatkowe"
#: ../vnc.html:136 #: ../vnc.html:136
@ -220,11 +220,11 @@ msgid "None"
msgstr "Brak" msgstr "Brak"
#: ../vnc.html:215 #: ../vnc.html:215
msgid "Local Scaling" msgid "Local scaling"
msgstr "Skalowanie lokalne" msgstr "Skalowanie lokalne"
#: ../vnc.html:216 #: ../vnc.html:216
msgid "Remote Resizing" msgid "Remote resizing"
msgstr "Skalowanie zdalne" msgstr "Skalowanie zdalne"
#: ../vnc.html:221 #: ../vnc.html:221
@ -256,11 +256,11 @@ msgid "Path:"
msgstr "Ścieżka:" msgstr "Ścieżka:"
#: ../vnc.html:249 #: ../vnc.html:249
msgid "Automatic Reconnect" msgid "Automatic reconnect"
msgstr "Automatycznie wznawiaj połączenie" msgstr "Automatycznie wznawiaj połączenie"
#: ../vnc.html:252 #: ../vnc.html:252
msgid "Reconnect Delay (ms):" msgid "Reconnect delay (ms):"
msgstr "Opóźnienie wznawiania (ms):" msgstr "Opóźnienie wznawiania (ms):"
#: ../vnc.html:258 #: ../vnc.html:258

View File

@ -1,7 +1,7 @@
#!/usr/bin/env node #!/usr/bin/env node
/* /*
* ps2js: gettext .po to noVNC .js converter * ps2js: gettext .po to noVNC .js converter
* Copyright (C) 2018 The noVNC Authors * Copyright (C) 2018 The noVNC authors
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
@ -17,29 +17,24 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
const getopt = require('node-getopt'); const { program } = require('commander');
const fs = require('fs'); const fs = require('fs');
const po2json = require("po2json"); const pofile = require("pofile");
const opt = getopt.create([ program
['h', 'help', 'display this help'], .argument('<input>')
]).bindHelp().parseSystem(); .argument('<output>')
.parse(process.argv);
if (opt.argv.length != 2) { let data = fs.readFileSync(program.args[0], "utf8");
console.error("Incorrect number of arguments given"); let po = pofile.parse(data);
process.exit(1);
}
const data = po2json.parseFileSync(opt.argv[0]); const bodyPart = po.items
.filter(item => item.msgid !== "")
const bodyPart = Object.keys(data) .filter(item => item.msgstr[0] !== "")
.filter(msgid => msgid !== "") .map(item => " " + JSON.stringify(item.msgid) + ": " + JSON.stringify(item.msgstr[0]))
.filter(msgid => data[msgid][1] !== "") .join(",\n");
.map((msgid) => {
const msgstr = data[msgid][1];
return " " + JSON.stringify(msgid) + ": " + JSON.stringify(msgstr);
}).join(",\n");
const output = "{\n" + bodyPart + "\n}"; const output = "{\n" + bodyPart + "\n}";
fs.writeFileSync(opt.argv[1], output); fs.writeFileSync(program.args[1], output);

View File

@ -1,5 +1,5 @@
# Portuguese translations for noVNC package. # Portuguese translations for noVNC package.
# Copyright (C) 2021 The noVNC Authors # Copyright (C) 2021 The noVNC authors
# This file is distributed under the same license as the noVNC package. # This file is distributed under the same license as the noVNC package.
# <liddack@outlook.com>, 2021. # <liddack@outlook.com>, 2021.
# #
@ -83,7 +83,7 @@ msgid "Drag"
msgstr "Arrastar" msgstr "Arrastar"
#: ../vnc.html:78 #: ../vnc.html:78
msgid "Move/Drag Viewport" msgid "Move/Drag viewport"
msgstr "Mover/arrastar a janela" msgstr "Mover/arrastar a janela"
#: ../vnc.html:84 #: ../vnc.html:84
@ -91,7 +91,7 @@ msgid "Keyboard"
msgstr "Teclado" msgstr "Teclado"
#: ../vnc.html:84 #: ../vnc.html:84
msgid "Show Keyboard" msgid "Show keyboard"
msgstr "Mostrar teclado" msgstr "Mostrar teclado"
#: ../vnc.html:89 #: ../vnc.html:89
@ -99,7 +99,7 @@ msgid "Extra keys"
msgstr "Teclas adicionais" msgstr "Teclas adicionais"
#: ../vnc.html:89 #: ../vnc.html:89
msgid "Show Extra Keys" msgid "Show extra keys"
msgstr "Mostar teclas adicionais" msgstr "Mostar teclas adicionais"
#: ../vnc.html:94 #: ../vnc.html:94
@ -191,19 +191,19 @@ msgid "Settings"
msgstr "Configurações" msgstr "Configurações"
#: ../vnc.html:162 #: ../vnc.html:162
msgid "Shared Mode" msgid "Shared mode"
msgstr "Modo compartilhado" msgstr "Modo compartilhado"
#: ../vnc.html:165 #: ../vnc.html:165
msgid "View Only" msgid "View only"
msgstr "Apenas visualizar" msgstr "Apenas visualizar"
#: ../vnc.html:169 #: ../vnc.html:169
msgid "Clip to Window" msgid "Clip to window"
msgstr "Recortar à janela" msgstr "Recortar à janela"
#: ../vnc.html:172 #: ../vnc.html:172
msgid "Scaling Mode:" msgid "Scaling mode:"
msgstr "Modo de dimensionamento:" msgstr "Modo de dimensionamento:"
#: ../vnc.html:174 #: ../vnc.html:174
@ -211,11 +211,11 @@ msgid "None"
msgstr "Nenhum" msgstr "Nenhum"
#: ../vnc.html:175 #: ../vnc.html:175
msgid "Local Scaling" msgid "Local scaling"
msgstr "Local" msgstr "Local"
#: ../vnc.html:176 #: ../vnc.html:176
msgid "Remote Resizing" msgid "Remote resizing"
msgstr "Remoto" msgstr "Remoto"
#: ../vnc.html:181 #: ../vnc.html:181
@ -255,15 +255,15 @@ msgid "Path:"
msgstr "Caminho:" msgstr "Caminho:"
#: ../vnc.html:218 #: ../vnc.html:218
msgid "Automatic Reconnect" msgid "Automatic reconnect"
msgstr "Reconexão automática" msgstr "Reconexão automática"
#: ../vnc.html:221 #: ../vnc.html:221
msgid "Reconnect Delay (ms):" msgid "Reconnect delay (ms):"
msgstr "Atraso da reconexão (ms)" msgstr "Atraso da reconexão (ms)"
#: ../vnc.html:226 #: ../vnc.html:226
msgid "Show Dot when No Cursor" msgid "Show dot when no cursor"
msgstr "Mostrar ponto quando não há cursor" msgstr "Mostrar ponto quando não há cursor"
#: ../vnc.html:231 #: ../vnc.html:231
@ -291,7 +291,7 @@ msgid "Password:"
msgstr "Senha:" msgstr "Senha:"
#: ../vnc.html:285 #: ../vnc.html:285
msgid "Send Credentials" msgid "Send credentials"
msgstr "Enviar credenciais" msgstr "Enviar credenciais"
#: ../vnc.html:295 #: ../vnc.html:295

View File

@ -86,7 +86,7 @@ msgid "Drag"
msgstr "Переместить" msgstr "Переместить"
#: ../vnc.html:78 #: ../vnc.html:78
msgid "Move/Drag Viewport" msgid "Move/Drag viewport"
msgstr "Переместить окно" msgstr "Переместить окно"
#: ../vnc.html:84 #: ../vnc.html:84
@ -94,7 +94,7 @@ msgid "Keyboard"
msgstr "Клавиатура" msgstr "Клавиатура"
#: ../vnc.html:84 #: ../vnc.html:84
msgid "Show Keyboard" msgid "Show keyboard"
msgstr "Показать клавиатуру" msgstr "Показать клавиатуру"
#: ../vnc.html:89 #: ../vnc.html:89
@ -194,7 +194,7 @@ msgid "Settings"
msgstr "Настройки" msgstr "Настройки"
#: ../vnc.html:162 #: ../vnc.html:162
msgid "Shared Mode" msgid "Shared mode"
msgstr "Общий режим" msgstr "Общий режим"
#: ../vnc.html:165 #: ../vnc.html:165
@ -202,11 +202,11 @@ msgid "View Only"
msgstr "Только Просмотр" msgstr "Только Просмотр"
#: ../vnc.html:169 #: ../vnc.html:169
msgid "Clip to Window" msgid "Clip to window"
msgstr "В окно" msgstr "В окно"
#: ../vnc.html:172 #: ../vnc.html:172
msgid "Scaling Mode:" msgid "Scaling mode:"
msgstr "Масштаб:" msgstr "Масштаб:"
#: ../vnc.html:174 #: ../vnc.html:174
@ -214,11 +214,11 @@ msgid "None"
msgstr "Нет" msgstr "Нет"
#: ../vnc.html:175 #: ../vnc.html:175
msgid "Local Scaling" msgid "Local scaling"
msgstr "Локальный масштаб" msgstr "Локальный масштаб"
#: ../vnc.html:176 #: ../vnc.html:176
msgid "Remote Resizing" msgid "Remote resizing"
msgstr "Удаленная перенастройка размера" msgstr "Удаленная перенастройка размера"
#: ../vnc.html:181 #: ../vnc.html:181
@ -258,15 +258,15 @@ msgid "Path:"
msgstr "Путь:" msgstr "Путь:"
#: ../vnc.html:218 #: ../vnc.html:218
msgid "Automatic Reconnect" msgid "Automatic reconnect"
msgstr "Автоматическое переподключение" msgstr "Автоматическое переподключение"
#: ../vnc.html:221 #: ../vnc.html:221
msgid "Reconnect Delay (ms):" msgid "Reconnect delay (ms):"
msgstr "Задержка переподключения (мс):" msgstr "Задержка переподключения (мс):"
#: ../vnc.html:226 #: ../vnc.html:226
msgid "Show Dot when No Cursor" msgid "Show dot when no cursor"
msgstr "Показать точку вместо курсора" msgstr "Показать точку вместо курсора"
#: ../vnc.html:231 #: ../vnc.html:231

View File

@ -1,6 +1,6 @@
# Swedish translations for noVNC package # Swedish translations for noVNC package
# Svenska översättningar för paketet noVNC. # Svenska översättningar för paketet noVNC.
# Copyright (C) 2020 The noVNC Authors # Copyright (C) 2020 The noVNC authors
# This file is distributed under the same license as the noVNC package. # This file is distributed under the same license as the noVNC package.
# Samuel Mannehed <samuel@cendio.se>, 2020. # Samuel Mannehed <samuel@cendio.se>, 2020.
# #
@ -195,7 +195,7 @@ msgid "Edit clipboard content in the textarea below."
msgstr "Redigera urklippets innehåll i fältet nedan." msgstr "Redigera urklippets innehåll i fältet nedan."
#: ../vnc.html:143 #: ../vnc.html:143
msgid "Full Screen" msgid "Full screen"
msgstr "Fullskärm" msgstr "Fullskärm"
#: ../vnc.html:148 ../vnc.html:154 #: ../vnc.html:148 ../vnc.html:154
@ -215,7 +215,7 @@ msgid "Clip to Window"
msgstr "Begränsa till Fönster" msgstr "Begränsa till Fönster"
#: ../vnc.html:168 #: ../vnc.html:168
msgid "Scaling Mode:" msgid "Scaling mode:"
msgstr "Skalningsläge:" msgstr "Skalningsläge:"
#: ../vnc.html:170 #: ../vnc.html:170
@ -271,11 +271,11 @@ msgid "Automatic Reconnect"
msgstr "Automatisk Återanslutning" msgstr "Automatisk Återanslutning"
#: ../vnc.html:217 #: ../vnc.html:217
msgid "Reconnect Delay (ms):" msgid "Reconnect delay (ms):"
msgstr "Fördröjning (ms):" msgstr "Fördröjning (ms):"
#: ../vnc.html:222 #: ../vnc.html:222
msgid "Show Dot when No Cursor" msgid "Show dot when no cursor"
msgstr "Visa prick när ingen muspekare finns" msgstr "Visa prick när ingen muspekare finns"
#: ../vnc.html:227 #: ../vnc.html:227

View File

@ -1,6 +1,6 @@
# Turkish translations for noVNC package # Turkish translations for noVNC package
# Turkish translation for noVNC. # Turkish translation for noVNC.
# Copyright (C) 2018 The noVNC Authors # Copyright (C) 2018 The noVNC authors
# This file is distributed under the same license as the noVNC package. # This file is distributed under the same license as the noVNC package.
# Ömer ÇAKMAK <farukomercakmak@gmail.com>, 2018. # Ömer ÇAKMAK <farukomercakmak@gmail.com>, 2018.
# #
@ -116,7 +116,7 @@ msgid "Extra keys"
msgstr "Ekstra tuşlar" msgstr "Ekstra tuşlar"
#: ../vnc.html:131 #: ../vnc.html:131
msgid "Show Extra Keys" msgid "Show extra keys"
msgstr "Ekstra tuşları göster" msgstr "Ekstra tuşları göster"
#: ../vnc.html:136 #: ../vnc.html:136

View File

@ -1,18 +1,18 @@
#!/usr/bin/env node #!/usr/bin/env node
/* /*
* xgettext-html: HTML gettext parser * xgettext-html: HTML gettext parser
* Copyright (C) 2018 The noVNC Authors * Copyright (C) 2018 The noVNC authors
* Licensed under MPL 2.0 (see LICENSE.txt) * Licensed under MPL 2.0 (see LICENSE.txt)
*/ */
const getopt = require('node-getopt'); const { program } = require('commander');
const jsdom = require("jsdom"); const jsdom = require("jsdom");
const fs = require("fs"); const fs = require("fs");
const opt = getopt.create([ program
['o', 'output=FILE', 'write output to specified file'], .argument('<INPUT...>')
['h', 'help', 'display this help'], .requiredOption('-o, --output <FILE>', 'write output to specified file')
]).bindHelp().parseSystem(); .parse(process.argv);
const strings = {}; const strings = {};
@ -87,8 +87,8 @@ function process(elem, locator, enabled) {
} }
} }
for (let i = 0; i < opt.argv.length; i++) { for (let i = 0; i < program.args.length; i++) {
const fn = opt.argv[i]; const fn = program.args[i];
const file = fs.readFileSync(fn, "utf8"); const file = fs.readFileSync(fn, "utf8");
const dom = new jsdom.JSDOM(file, { includeNodeLocations: true }); const dom = new jsdom.JSDOM(file, { includeNodeLocations: true });
const body = dom.window.document.body; const body = dom.window.document.body;
@ -116,4 +116,4 @@ for (let str in strings) {
output += "\n"; output += "\n";
} }
fs.writeFileSync(opt.options.output, output); fs.writeFileSync(program.opts().output, output);

View File

@ -1,5 +1,5 @@
# Simplified Chinese translations for noVNC package. # Simplified Chinese translations for noVNC package.
# Copyright (C) 2020 The noVNC Authors # Copyright (C) 2020 The noVNC authors
# This file is distributed under the same license as the noVNC package. # This file is distributed under the same license as the noVNC package.
# Peter Dave Hello <hsu@peterdavehello.org>, 2018. # Peter Dave Hello <hsu@peterdavehello.org>, 2018.
# #
@ -7,278 +7,367 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: noVNC 1.1.0\n" "Project-Id-Version: noVNC 1.1.0\n"
"Report-Msgid-Bugs-To: novnc@googlegroups.com\n" "Report-Msgid-Bugs-To: novnc@googlegroups.com\n"
"POT-Creation-Date: 2018-01-10 00:53+0800\n" "POT-Creation-Date: 2024-06-03 14:10+0200\n"
"PO-Revision-Date: 2020-01-02 13:19+0800\n" "PO-Revision-Date: 2024-11-23 15:29+0800\n"
"Last-Translator: CUI Wei <ghostplant@qq.com>\n" "Last-Translator: wxtewx <wxtewx@qq.com>\n"
"Language-Team: \n"
"Language: zh_CN\n" "Language: zh_CN\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 3.5\n"
#: ../app/ui.js:430 #: ../app/ui.js:69
msgid ""
"Running without HTTPS is not recommended, crashes or other issues are likely."
msgstr "不建议在没有 HTTPS 的情况下运行,可能会出现崩溃或出现其他问题。"
#: ../app/ui.js:410
msgid "Connecting..." msgid "Connecting..."
msgstr "连接中..." msgstr "连接中..."
#: ../app/ui.js:438 #: ../app/ui.js:417
msgid "Connected (encrypted) to "
msgstr "已连接(已加密)到"
#: ../app/ui.js:440
msgid "Connected (unencrypted) to "
msgstr "已连接(未加密)到"
#: ../app/ui.js:446
msgid "Disconnecting..." msgid "Disconnecting..."
msgstr "正在断开连接..." msgstr "正在断开连接..."
#: ../app/ui.js:450 #: ../app/ui.js:423
msgid "Disconnected"
msgstr "已断开连接"
#: ../app/ui.js:1052 ../core/rfb.js:248
msgid "Must set host"
msgstr "必须设置主机"
#: ../app/ui.js:1101
msgid "Reconnecting..." msgid "Reconnecting..."
msgstr "重新连接中..." msgstr "重新连接中..."
#: ../app/ui.js:1140 #: ../app/ui.js:428
msgid "Password is required" msgid "Internal error"
msgstr "请提供密码" msgstr "内部错误"
#: ../core/rfb.js:548 #: ../app/ui.js:1026
msgid "Disconnect timeout" msgid "Must set host"
msgstr "超时断开" msgstr "必须设置主机"
#: ../vnc.html:89 #: ../app/ui.js:1052
msgid "Failed to connect to server: "
msgstr "无法连接到服务器:"
#: ../app/ui.js:1118
msgid "Connected (encrypted) to "
msgstr "已连接(已加密)到"
#: ../app/ui.js:1120
msgid "Connected (unencrypted) to "
msgstr "已连接(未加密)到"
#: ../app/ui.js:1143
msgid "Something went wrong, connection is closed"
msgstr "出了点问题,连接已关闭"
#: ../app/ui.js:1146
msgid "Failed to connect to server"
msgstr "无法连接到服务器"
#: ../app/ui.js:1158
msgid "Disconnected"
msgstr "已断开连接"
#: ../app/ui.js:1173
msgid "New connection has been rejected with reason: "
msgstr "新连接被拒绝,原因如下:"
#: ../app/ui.js:1176
msgid "New connection has been rejected"
msgstr "新连接已被拒绝"
#: ../app/ui.js:1242
msgid "Credentials are required"
msgstr "需要凭证"
#: ../vnc.html:55
msgid "noVNC encountered an error:" msgid "noVNC encountered an error:"
msgstr "noVNC 遇到一个错误:" msgstr "noVNC 遇到一个错误:"
#: ../vnc.html:99 #: ../vnc.html:65
msgid "Hide/Show the control bar" msgid "Hide/Show the control bar"
msgstr "显示/隐藏控制栏" msgstr "显示/隐藏控制栏"
#: ../vnc.html:106 #: ../vnc.html:74
msgid "Move/Drag Viewport" msgid "Drag"
msgstr "拖动"
#: ../vnc.html:74
msgid "Move/Drag viewport"
msgstr "移动/拖动窗口" msgstr "移动/拖动窗口"
#: ../vnc.html:106 #: ../vnc.html:80
msgid "viewport drag"
msgstr "窗口拖动"
#: ../vnc.html:112 ../vnc.html:115 ../vnc.html:118 ../vnc.html:121
msgid "Active Mouse Button"
msgstr "启动鼠标按键"
#: ../vnc.html:112
msgid "No mousebutton"
msgstr "禁用鼠标按键"
#: ../vnc.html:115
msgid "Left mousebutton"
msgstr "鼠标左键"
#: ../vnc.html:118
msgid "Middle mousebutton"
msgstr "鼠标中键"
#: ../vnc.html:121
msgid "Right mousebutton"
msgstr "鼠标右键"
#: ../vnc.html:124
msgid "Keyboard" msgid "Keyboard"
msgstr "键盘" msgstr "键盘"
#: ../vnc.html:124 #: ../vnc.html:80
msgid "Show Keyboard" msgid "Show keyboard"
msgstr "显示键盘" msgstr "显示键盘"
#: ../vnc.html:131 #: ../vnc.html:85
msgid "Extra keys" msgid "Extra keys"
msgstr "额外按键" msgstr "额外按键"
#: ../vnc.html:131 #: ../vnc.html:85
msgid "Show Extra Keys" msgid "Show extra keys"
msgstr "显示额外按键" msgstr "显示额外按键"
#: ../vnc.html:136 #: ../vnc.html:90
msgid "Ctrl" msgid "Ctrl"
msgstr "Ctrl" msgstr "Ctrl"
#: ../vnc.html:136 #: ../vnc.html:90
msgid "Toggle Ctrl" msgid "Toggle Ctrl"
msgstr "切换 Ctrl" msgstr "切换 Ctrl"
#: ../vnc.html:136 #: ../vnc.html:93
msgid "Edit clipboard content in the textarea below."
msgstr "在下面的文本区域中编辑剪贴板内容。"
#: ../vnc.html:139
msgid "Alt" msgid "Alt"
msgstr "Alt" msgstr "Alt"
#: ../vnc.html:139 #: ../vnc.html:93
msgid "Toggle Alt" msgid "Toggle Alt"
msgstr "切换 Alt" msgstr "切换 Alt"
#: ../vnc.html:142 #: ../vnc.html:96
msgid "Toggle Windows"
msgstr "切换窗口"
#: ../vnc.html:96
msgid "Windows"
msgstr "窗口"
#: ../vnc.html:99
msgid "Send Tab" msgid "Send Tab"
msgstr "发送 Tab 键" msgstr "发送 Tab 键"
#: ../vnc.html:142 #: ../vnc.html:99
msgid "Tab" msgid "Tab"
msgstr "Tab" msgstr "Tab"
#: ../vnc.html:145 #: ../vnc.html:102
msgid "Esc" msgid "Esc"
msgstr "Esc" msgstr "Esc"
#: ../vnc.html:145 #: ../vnc.html:102
msgid "Send Escape" msgid "Send Escape"
msgstr "发送 Escape 键" msgstr "发送 Escape 键"
#: ../vnc.html:148 #: ../vnc.html:105
msgid "Ctrl+Alt+Del" msgid "Ctrl+Alt+Del"
msgstr "Ctrl+Alt+Del" msgstr "Ctrl+Alt+Del"
#: ../vnc.html:148 #: ../vnc.html:105
msgid "Send Ctrl-Alt-Del" msgid "Send Ctrl-Alt-Del"
msgstr "发送 Ctrl+Alt+Del 键" msgstr "发送 Ctrl+Alt+Del 键"
#: ../vnc.html:156 #: ../vnc.html:112
msgid "Shutdown/Reboot" msgid "Shutdown/Reboot"
msgstr "关机/重启" msgstr "关机/重启"
#: ../vnc.html:156 #: ../vnc.html:112
msgid "Shutdown/Reboot..." msgid "Shutdown/Reboot..."
msgstr "关机/重启..." msgstr "关机/重启..."
#: ../vnc.html:162 #: ../vnc.html:118
msgid "Power" msgid "Power"
msgstr "电源" msgstr "电源"
#: ../vnc.html:164 #: ../vnc.html:120
msgid "Shutdown" msgid "Shutdown"
msgstr "关机" msgstr "关机"
#: ../vnc.html:165 #: ../vnc.html:121
msgid "Reboot" msgid "Reboot"
msgstr "重启" msgstr "重启"
#: ../vnc.html:166 #: ../vnc.html:122
msgid "Reset" msgid "Reset"
msgstr "重置" msgstr "重置"
#: ../vnc.html:171 ../vnc.html:177 #: ../vnc.html:127 ../vnc.html:133
msgid "Clipboard" msgid "Clipboard"
msgstr "剪贴板" msgstr "剪贴板"
#: ../vnc.html:181 #: ../vnc.html:135
msgid "Clear" msgid "Edit clipboard content in the textarea below."
msgstr "清除" msgstr "在下面的文本区域中编辑剪贴板内容。"
#: ../vnc.html:187 #: ../vnc.html:143
msgid "Fullscreen" msgid "Full screen"
msgstr "全屏" msgstr "全屏"
#: ../vnc.html:192 ../vnc.html:199 #: ../vnc.html:148 ../vnc.html:154
msgid "Settings" msgid "Settings"
msgstr "设置" msgstr "设置"
#: ../vnc.html:200 #: ../vnc.html:158
msgid "Encrypt" msgid "Shared mode"
msgstr "加密"
#: ../vnc.html:202
msgid "Shared Mode"
msgstr "分享模式" msgstr "分享模式"
#: ../vnc.html:205 #: ../vnc.html:161
msgid "View Only" msgid "View only"
msgstr "仅查看" msgstr "仅查看"
#: ../vnc.html:209 #: ../vnc.html:165
msgid "Clip to Window" msgid "Clip to window"
msgstr "限制/裁切窗口大小" msgstr "限制/裁切窗口大小"
#: ../vnc.html:212 #: ../vnc.html:168
msgid "Scaling Mode:" msgid "Scaling mode:"
msgstr "缩放模式:" msgstr "缩放模式:"
#: ../vnc.html:214 #: ../vnc.html:170
msgid "None" msgid "None"
msgstr "无" msgstr "无"
#: ../vnc.html:215 #: ../vnc.html:171
msgid "Local Scaling" msgid "Local scaling"
msgstr "本地缩放" msgstr "本地缩放"
#: ../vnc.html:216 #: ../vnc.html:172
msgid "Local Downscaling" msgid "Remote resizing"
msgstr "降低本地尺寸"
#: ../vnc.html:217
msgid "Remote Resizing"
msgstr "远程调整大小" msgstr "远程调整大小"
#: ../vnc.html:222 #: ../vnc.html:177
msgid "Advanced" msgid "Advanced"
msgstr "高级" msgstr "高级"
#: ../vnc.html:225 #: ../vnc.html:180
msgid "Local Cursor" msgid "Quality:"
msgstr "本地光标" msgstr "品质:"
#: ../vnc.html:229 #: ../vnc.html:184
msgid "Compression level:"
msgstr "压缩级别:"
#: ../vnc.html:189
msgid "Repeater ID:" msgid "Repeater ID:"
msgstr "中继站 ID" msgstr "中继站 ID"
#: ../vnc.html:233 #: ../vnc.html:193
msgid "WebSocket" msgid "WebSocket"
msgstr "WebSocket" msgstr "WebSocket"
#: ../vnc.html:239 #: ../vnc.html:196
msgid "Encrypt"
msgstr "加密"
#: ../vnc.html:199
msgid "Host:" msgid "Host:"
msgstr "主机:" msgstr "主机:"
#: ../vnc.html:243 #: ../vnc.html:203
msgid "Port:" msgid "Port:"
msgstr "端口:" msgstr "端口:"
#: ../vnc.html:247 #: ../vnc.html:207
msgid "Path:" msgid "Path:"
msgstr "路径:" msgstr "路径:"
#: ../vnc.html:254 #: ../vnc.html:214
msgid "Automatic Reconnect" msgid "Automatic reconnect"
msgstr "自动重新连接" msgstr "自动重新连接"
#: ../vnc.html:257 #: ../vnc.html:217
msgid "Reconnect Delay (ms):" msgid "Reconnect delay (ms):"
msgstr "重新连接间隔 (ms)" msgstr "重新连接间隔 (ms)"
#: ../vnc.html:263 #: ../vnc.html:222
msgid "Show dot when no cursor"
msgstr "无光标时显示点"
#: ../vnc.html:227
msgid "Logging:" msgid "Logging:"
msgstr "日志级别:" msgstr "日志级别:"
#: ../vnc.html:275 #: ../vnc.html:236
msgid "Version:"
msgstr "版本:"
#: ../vnc.html:244
msgid "Disconnect" msgid "Disconnect"
msgstr "断开连接" msgstr "断开连接"
#: ../vnc.html:294 #: ../vnc.html:267
msgid "Connect" msgid "Connect"
msgstr "连接" msgstr "连接"
#: ../vnc.html:276
msgid "Server identity"
msgstr "服务器身份"
#: ../vnc.html:279
msgid "The server has provided the following identifying information:"
msgstr "服务器提供了以下识别信息:"
#: ../vnc.html:283
msgid "Fingerprint:"
msgstr "指纹:"
#: ../vnc.html:286
msgid ""
"Please verify that the information is correct and press \"Approve\". "
"Otherwise press \"Reject\"."
msgstr "请核实信息是否正确,并按 “同意”,否则按 “拒绝”。"
#: ../vnc.html:291
msgid "Approve"
msgstr "同意"
#: ../vnc.html:292
msgid "Reject"
msgstr "拒绝"
#: ../vnc.html:300
msgid "Credentials"
msgstr "凭证"
#: ../vnc.html:304 #: ../vnc.html:304
msgid "Username:"
msgstr "用户名:"
#: ../vnc.html:308
msgid "Password:" msgid "Password:"
msgstr "密码:" msgstr "密码:"
#: ../vnc.html:318 #: ../vnc.html:312
msgid "Send credentials"
msgstr "发送凭证"
#: ../vnc.html:321
msgid "Cancel" msgid "Cancel"
msgstr "取消" msgstr "取消"
#: ../vnc.html:334 #~ msgid "Password is required"
msgid "Canvas not supported." #~ msgstr "请提供密码"
msgstr "不支持 Canvas。"
#~ msgid "Disconnect timeout"
#~ msgstr "超时断开"
#~ msgid "viewport drag"
#~ msgstr "窗口拖动"
#~ msgid "Active Mouse Button"
#~ msgstr "启动鼠标按键"
#~ msgid "No mousebutton"
#~ msgstr "禁用鼠标按键"
#~ msgid "Left mousebutton"
#~ msgstr "鼠标左键"
#~ msgid "Middle mousebutton"
#~ msgstr "鼠标中键"
#~ msgid "Right mousebutton"
#~ msgstr "鼠标右键"
#~ msgid "Clear"
#~ msgstr "清除"
#~ msgid "Local Downscaling"
#~ msgstr "降低本地尺寸"
#~ msgid "Local Cursor"
#~ msgstr "本地光标"
#~ msgid "Canvas not supported."
#~ msgstr "不支持 Canvas。"

View File

@ -1,5 +1,5 @@
# Traditional Chinese translations for noVNC package. # Traditional Chinese translations for noVNC package.
# Copyright (C) 2018 The noVNC Authors # Copyright (C) 2018 The noVNC authors
# This file is distributed under the same license as the noVNC package. # This file is distributed under the same license as the noVNC package.
# Peter Dave Hello <hsu@peterdavehello.org>, 2018. # Peter Dave Hello <hsu@peterdavehello.org>, 2018.
# #
@ -77,7 +77,7 @@ msgid "Hide/Show the control bar"
msgstr "顯示/隱藏控制列" msgstr "顯示/隱藏控制列"
#: ../vnc.html:106 #: ../vnc.html:106
msgid "Move/Drag Viewport" msgid "Move/Drag viewport"
msgstr "拖放顯示範圍" msgstr "拖放顯示範圍"
#: ../vnc.html:106 #: ../vnc.html:106
@ -109,7 +109,7 @@ msgid "Keyboard"
msgstr "鍵盤" msgstr "鍵盤"
#: ../vnc.html:124 #: ../vnc.html:124
msgid "Show Keyboard" msgid "Show keyboard"
msgstr "顯示鍵盤" msgstr "顯示鍵盤"
#: ../vnc.html:131 #: ../vnc.html:131
@ -117,7 +117,7 @@ msgid "Extra keys"
msgstr "額外按鍵" msgstr "額外按鍵"
#: ../vnc.html:131 #: ../vnc.html:131
msgid "Show Extra Keys" msgid "Show extra keys"
msgstr "顯示額外按鍵" msgstr "顯示額外按鍵"
#: ../vnc.html:136 #: ../vnc.html:136
@ -201,19 +201,19 @@ msgid "Settings"
msgstr "設定" msgstr "設定"
#: ../vnc.html:202 #: ../vnc.html:202
msgid "Shared Mode" msgid "Shared mode"
msgstr "分享模式" msgstr "分享模式"
#: ../vnc.html:205 #: ../vnc.html:205
msgid "View Only" msgid "View only"
msgstr "僅檢視" msgstr "僅檢視"
#: ../vnc.html:209 #: ../vnc.html:209
msgid "Clip to Window" msgid "Clip to window"
msgstr "限制/裁切視窗大小" msgstr "限制/裁切視窗大小"
#: ../vnc.html:212 #: ../vnc.html:212
msgid "Scaling Mode:" msgid "Scaling mode:"
msgstr "縮放模式:" msgstr "縮放模式:"
#: ../vnc.html:214 #: ../vnc.html:214
@ -221,11 +221,11 @@ msgid "None"
msgstr "無" msgstr "無"
#: ../vnc.html:215 #: ../vnc.html:215
msgid "Local Scaling" msgid "Local scaling"
msgstr "本機縮放" msgstr "本機縮放"
#: ../vnc.html:216 #: ../vnc.html:216
msgid "Remote Resizing" msgid "Remote resizing"
msgstr "遠端調整大小" msgstr "遠端調整大小"
#: ../vnc.html:221 #: ../vnc.html:221
@ -257,11 +257,11 @@ msgid "Path:"
msgstr "路徑:" msgstr "路徑:"
#: ../vnc.html:249 #: ../vnc.html:249
msgid "Automatic Reconnect" msgid "Automatic reconnect"
msgstr "自動重新連線" msgstr "自動重新連線"
#: ../vnc.html:252 #: ../vnc.html:252
msgid "Reconnect Delay (ms):" msgid "Reconnect delay (ms):"
msgstr "重新連線間隔 (ms)" msgstr "重新連線間隔 (ms)"
#: ../vnc.html:258 #: ../vnc.html:258

View File

@ -1,6 +1,6 @@
/* /*
* noVNC: HTML5 VNC client * noVNC: HTML5 VNC client
* Copyright (C) 2018 The noVNC Authors * Copyright (C) 2018 The noVNC authors
* Licensed under MPL 2.0 (see LICENSE.txt) * Licensed under MPL 2.0 (see LICENSE.txt)
*/ */

View File

@ -1,6 +1,6 @@
import Base64 from '../core/base64.js'; import Base64 from '../core/base64.js';
describe('Base64 Tools', function () { describe('Base64 tools', function () {
"use strict"; "use strict";
const BIN_ARR = new Array(256); const BIN_ARR = new Array(256);

View File

@ -29,7 +29,7 @@ function testDecodeRect(decoder, x, y, width, height, data, display, depth) {
return done; return done;
} }
describe('CopyRect Decoder', function () { describe('CopyRect decoder', function () {
let decoder; let decoder;
let display; let display;

View File

@ -1,7 +1,7 @@
import Base64 from '../core/base64.js'; import Base64 from '../core/base64.js';
import Display from '../core/display.js'; import Display from '../core/display.js';
describe('Display/Canvas Helper', function () { describe('Display/Canvas helper', function () {
const checkedData = new Uint8ClampedArray([ const checkedData = new Uint8ClampedArray([
0x00, 0x00, 0xff, 255, 0x00, 0x00, 0xff, 255, 0x00, 0xff, 0x00, 255, 0x00, 0xff, 0x00, 255, 0x00, 0x00, 0xff, 255, 0x00, 0x00, 0xff, 255, 0x00, 0xff, 0x00, 255, 0x00, 0xff, 0x00, 255,
0x00, 0x00, 0xff, 255, 0x00, 0x00, 0xff, 255, 0x00, 0xff, 0x00, 255, 0x00, 0xff, 0x00, 255, 0x00, 0x00, 0xff, 255, 0x00, 0x00, 0xff, 255, 0x00, 0xff, 0x00, 255, 0x00, 0xff, 0x00, 255,

View File

@ -4,6 +4,7 @@ import Display from '../core/display.js';
import { H264Parser } from '../core/decoders/h264.js'; import { H264Parser } from '../core/decoders/h264.js';
import H264Decoder from '../core/decoders/h264.js'; import H264Decoder from '../core/decoders/h264.js';
import Base64 from '../core/base64.js'; import Base64 from '../core/base64.js';
import { supportsWebCodecsH264Decode } from '../core/util/browser.js';
import FakeWebSocket from './fake.websocket.js'; import FakeWebSocket from './fake.websocket.js';
@ -29,30 +30,6 @@ const redGreenBlue16x16Video = new Uint8Array(Base64.decode(
'4AA5DRJMnkycJk4TPwAAAAFBiIga8RigADVVHAAGaGOAANtuAAAAAUGIkBr///wRRQABVf8c' + '4AA5DRJMnkycJk4TPwAAAAFBiIga8RigADVVHAAGaGOAANtuAAAAAUGIkBr///wRRQABVf8c' +
'AAcho4AAiD4=')); 'AAcho4AAiD4='));
let _haveH264Decode = null;
async function haveH264Decode() {
if (_haveH264Decode !== null) {
return _haveH264Decode;
}
if (!('VideoDecoder' in window)) {
_haveH264Decode = false;
return false;
}
// We'll need to make do with some placeholders here
const config = {
codec: 'avc1.42401f',
codedWidth: 1920,
codedHeight: 1080,
optimizeForLatency: true,
};
_haveH264Decode = await VideoDecoder.isConfigSupported(config);
return _haveH264Decode;
}
function createSolidColorFrameBuffer(color, width, height) { function createSolidColorFrameBuffer(color, width, height) {
const r = (color >> 24) & 0xff; const r = (color >> 24) & 0xff;
const g = (color >> 16) & 0xff; const g = (color >> 16) & 0xff;
@ -131,7 +108,7 @@ function almost(a, b) {
return diff < 5; return diff < 5;
} }
describe('H.264 Parser', function () { describe('H.264 parser', function () {
it('should parse constrained baseline video', function () { it('should parse constrained baseline video', function () {
let parser = new H264Parser(redGreenBlue16x16Video); let parser = new H264Parser(redGreenBlue16x16Video);
@ -153,11 +130,11 @@ describe('H.264 Parser', function () {
}); });
}); });
describe('H.264 Decoder Unit Test', function () { describe('H.264 decoder unit test', function () {
let decoder; let decoder;
beforeEach(async function () { beforeEach(function () {
if (!await haveH264Decode()) { if (!supportsWebCodecsH264Decode) {
this.skip(); this.skip();
return; return;
} }
@ -204,15 +181,15 @@ describe('H.264 Decoder Unit Test', function () {
}); });
}); });
describe('H.264 Decoder Functional Test', function () { describe('H.264 decoder functional test', function () {
let decoder; let decoder;
let display; let display;
before(FakeWebSocket.replace); before(FakeWebSocket.replace);
after(FakeWebSocket.restore); after(FakeWebSocket.restore);
beforeEach(async function () { beforeEach(function () {
if (!await haveH264Decode()) { if (!supportsWebCodecsH264Decode) {
this.skip(); this.skip();
return; return;
} }

View File

@ -36,7 +36,7 @@ function push32(arr, num) {
num & 0xFF); num & 0xFF);
} }
describe('Hextile Decoder', function () { describe('Hextile decoder', function () {
let decoder; let decoder;
let display; let display;

View File

@ -29,7 +29,7 @@ function testDecodeRect(decoder, x, y, width, height, data, display, depth) {
return done; return done;
} }
describe('JPEG Decoder', function () { describe('JPEG decoder', function () {
let decoder; let decoder;
let display; let display;

View File

@ -1,6 +1,6 @@
import Keyboard from '../core/input/keyboard.js'; import Keyboard from '../core/input/keyboard.js';
describe('Key Event Handling', function () { describe('Key event handling', function () {
"use strict"; "use strict";
// The real KeyboardEvent constructor might not work everywhere we // The real KeyboardEvent constructor might not work everywhere we
@ -19,7 +19,7 @@ describe('Key Event Handling', function () {
return e; return e;
} }
describe('Decode Keyboard Events', function () { describe('Decode keyboard events', function () {
it('should decode keydown events', function (done) { it('should decode keydown events', function (done) {
const kbd = new Keyboard(document); const kbd = new Keyboard(document);
kbd.onkeyevent = (keysym, code, down) => { kbd.onkeyevent = (keysym, code, down) => {
@ -68,7 +68,7 @@ describe('Key Event Handling', function () {
}); });
}); });
describe('Track Key State', function () { describe('Track key state', function () {
it('should send release using the same keysym as the press', function (done) { it('should send release using the same keysym as the press', function (done) {
const kbd = new Keyboard(document); const kbd = new Keyboard(document);
kbd.onkeyevent = (keysym, code, down) => { kbd.onkeyevent = (keysym, code, down) => {
@ -101,7 +101,7 @@ describe('Key Event Handling', function () {
expect(kbd.onkeyevent).to.not.have.been.called; expect(kbd.onkeyevent).to.not.have.been.called;
}); });
describe('Legacy Events', function () { describe('Legacy events', function () {
it('should track keys using keyCode if no code', function (done) { it('should track keys using keyCode if no code', function (done) {
const kbd = new Keyboard(document); const kbd = new Keyboard(document);
kbd.onkeyevent = (keysym, code, down) => { kbd.onkeyevent = (keysym, code, down) => {

View File

@ -29,7 +29,7 @@ function testDecodeRect(decoder, x, y, width, height, data, display, depth) {
return done; return done;
} }
describe('Raw Decoder', function () { describe('Raw decoder', function () {
let decoder; let decoder;
let display; let display;

View File

@ -67,7 +67,7 @@ function deflateWithSize(data) {
return new Uint8Array(strm.output.buffer, 0, strm.next_out); return new Uint8Array(strm.output.buffer, 0, strm.next_out);
} }
describe('Remote Frame Buffer Protocol Client', function () { describe('Remote Frame Buffer protocol client', function () {
let clock; let clock;
let raf; let raf;
let fakeResizeObserver = null; let fakeResizeObserver = null;
@ -287,7 +287,7 @@ describe('Remote Frame Buffer Protocol Client', function () {
}); });
}); });
describe('Public API Basic Behavior', function () { describe('Public API basic behavior', function () {
let client; let client;
beforeEach(function () { beforeEach(function () {
client = makeRFB(); client = makeRFB();
@ -730,6 +730,28 @@ describe('Remote Frame Buffer Protocol Client', function () {
container.style.width = '70px'; container.style.width = '70px';
container.style.height = '80px'; container.style.height = '80px';
client.scaleViewport = true; client.scaleViewport = true;
const incoming = [ 0x00, // msg-type=FBU
0x00, // padding
0x00, 0x01, // number of rects = 1
0x00, 0x00, // reason = server initialized
0x00, 0x00, // status = no error
0x00, 0x04, // new width = 4
0x00, 0x04, // new height = 4
0xff, 0xff,
0xfe, 0xcc, // enc = (-308) ExtendedDesktopSize
0x01, // number of screens = 1
0x00, 0x00,
0x00, // padding
0x78, 0x90,
0xab, 0xcd, // screen id = 0
0x00, 0x00, // screen x = 0
0x00, 0x00, // screen y = 0
0x00, 0x04, // screen width = 4
0x00, 0x04, // screen height = 4
0x12, 0x34,
0x56, 0x78]; // screen flags
client._sock._websocket._receiveData(new Uint8Array(incoming));
}); });
it('should update display scale factor when changing the property', function () { it('should update display scale factor when changing the property', function () {
@ -774,6 +796,28 @@ describe('Remote Frame Buffer Protocol Client', function () {
expect(client._display.autoscale).to.have.been.calledWith(40, 50); expect(client._display.autoscale).to.have.been.calledWith(40, 50);
}); });
it('should update the scaling resized back to initial size', function () {
sinon.spy(client._display, "autoscale");
container.style.width = '40px';
container.style.height = '50px';
fakeResizeObserver.fire();
clock.tick(1000);
expect(client._display.autoscale).to.have.been.calledOnce;
expect(client._display.autoscale).to.have.been.calledWith(40, 50);
client._display.autoscale.resetHistory();
container.style.width = '70px';
container.style.height = '80px';
fakeResizeObserver.fire();
clock.tick(1000);
expect(client._display.autoscale).to.have.been.calledOnce;
expect(client._display.autoscale).to.have.been.calledWith(70, 80);
client._display.autoscale.resetHistory();
});
it('should update the scaling when the remote session resizes', function () { it('should update the scaling when the remote session resizes', function () {
// Simple ExtendedDesktopSize FBU message // Simple ExtendedDesktopSize FBU message
const incoming = [ 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, const incoming = [ 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
@ -941,6 +985,27 @@ describe('Remote Frame Buffer Protocol Client', function () {
expect(RFB.messages.setDesktopSize).to.not.have.been.called; expect(RFB.messages.setDesktopSize).to.not.have.been.called;
}); });
it('should request a resize when resized back to initial size', function () {
container.style.width = '40px';
container.style.height = '50px';
fakeResizeObserver.fire();
clock.tick(1000);
expect(RFB.messages.setDesktopSize).to.have.been.calledOnce;
expect(RFB.messages.setDesktopSize).to.have.been.calledWith(
sinon.match.object, 40, 50, 0x7890abcd, 0x12345678);
RFB.messages.setDesktopSize.resetHistory();
container.style.width = '70px';
container.style.height = '80px';
fakeResizeObserver.fire();
clock.tick(1000);
expect(RFB.messages.setDesktopSize).to.have.been.calledOnce;
expect(RFB.messages.setDesktopSize).to.have.been.calledWith(
sinon.match.object, 70, 80, 0x7890abcd, 0x12345678);
});
it('should not resize until the container size is stable', function () { it('should not resize until the container size is stable', function () {
container.style.width = '20px'; container.style.width = '20px';
container.style.height = '30px'; container.style.height = '30px';
@ -1027,7 +1092,7 @@ describe('Remote Frame Buffer Protocol Client', function () {
}); });
}); });
describe('Misc Internals', function () { describe('Misc internals', function () {
describe('#_fail', function () { describe('#_fail', function () {
let client; let client;
beforeEach(function () { beforeEach(function () {
@ -1068,7 +1133,7 @@ describe('Remote Frame Buffer Protocol Client', function () {
}); });
}); });
describe('Protocol Initialization States', function () { describe('Protocol initialization states', function () {
let client; let client;
beforeEach(function () { beforeEach(function () {
client = makeRFB(); client = makeRFB();
@ -1226,7 +1291,7 @@ describe('Remote Frame Buffer Protocol Client', function () {
}); });
}); });
describe('Legacy Authentication', function () { describe('Legacy authentication', function () {
it('should fail on auth scheme 0 (pre 3.7) with the given message', function () { it('should fail on auth scheme 0 (pre 3.7) with the given message', function () {
const errMsg = "Whoopsies"; const errMsg = "Whoopsies";
const data = [0, 0, 0, 0]; const data = [0, 0, 0, 0];
@ -1286,7 +1351,7 @@ describe('Remote Frame Buffer Protocol Client', function () {
expect(callback.args[0][0].detail.clean).to.be.false; expect(callback.args[0][0].detail.clean).to.be.false;
}); });
describe('VNC Authentication (type 2) Handler', function () { describe('VNC authentication (type 2) handler', function () {
it('should fire the credentialsrequired event if missing a password', function () { it('should fire the credentialsrequired event if missing a password', function () {
const spy = sinon.spy(); const spy = sinon.spy();
client.addEventListener("credentialsrequired", spy); client.addEventListener("credentialsrequired", spy);
@ -1331,7 +1396,7 @@ describe('Remote Frame Buffer Protocol Client', function () {
}); });
}); });
describe('RSA-AES Authentication (type 6) Handler', function () { describe('RSA-AES authentication (type 6) handler', function () {
function fakeGetRandomValues(arr) { function fakeGetRandomValues(arr) {
if (arr.length === 16) { if (arr.length === 16) {
arr.set(new Uint8Array([ arr.set(new Uint8Array([
@ -1776,7 +1841,7 @@ describe('Remote Frame Buffer Protocol Client', function () {
}); });
}); });
describe('ARD Authentication (type 30) Handler', function () { describe('ARD authentication (type 30) handler', function () {
let byteArray = new Uint8Array(Array.from(new Uint8Array(128).keys())); let byteArray = new Uint8Array(Array.from(new Uint8Array(128).keys()));
function fakeGetRandomValues(arr) { function fakeGetRandomValues(arr) {
if (arr.length == 128) { if (arr.length == 128) {
@ -1869,7 +1934,7 @@ describe('Remote Frame Buffer Protocol Client', function () {
}); });
}); });
describe('MSLogonII Authentication (type 113) Handler', function () { describe('MSLogonII authentication (type 113) handler', function () {
function fakeGetRandomValues(arr) { function fakeGetRandomValues(arr) {
if (arr.length == 8) { if (arr.length == 8) {
arr.set(new Uint8Array([0, 0, 0, 0, 5, 6, 7, 8])); arr.set(new Uint8Array([0, 0, 0, 0, 5, 6, 7, 8]));
@ -1952,7 +2017,7 @@ describe('Remote Frame Buffer Protocol Client', function () {
}); });
}); });
describe('XVP Authentication (type 22) Handler', function () { describe('XVP authentication (type 22) handler', function () {
it('should fall through to standard VNC authentication upon completion', function () { it('should fall through to standard VNC authentication upon completion', function () {
client.addEventListener("credentialsrequired", () => { client.addEventListener("credentialsrequired", () => {
client.sendCredentials({ username: 'user', client.sendCredentials({ username: 'user',
@ -2001,7 +2066,7 @@ describe('Remote Frame Buffer Protocol Client', function () {
}); });
}); });
describe('TightVNC Authentication (type 16) Handler', function () { describe('TightVNC authentication (type 16) handler', function () {
beforeEach(function () { beforeEach(function () {
sendSecurity(16, client); sendSecurity(16, client);
client._sock._websocket._getSentData(); // skip the security reply client._sock._websocket._getSentData(); // skip the security reply
@ -2088,7 +2153,7 @@ describe('Remote Frame Buffer Protocol Client', function () {
}); });
}); });
describe('VeNCrypt Authentication (type 19) Handler', function () { describe('VeNCrypt authentication (type 19) handler', function () {
beforeEach(function () { beforeEach(function () {
sendSecurity(19, client); sendSecurity(19, client);
expect(client._sock).to.have.sent(new Uint8Array([19])); expect(client._sock).to.have.sent(new Uint8Array([19]));
@ -2171,7 +2236,7 @@ describe('Remote Frame Buffer Protocol Client', function () {
}); });
}); });
describe('Plain Authentication (type 256) Handler', function () { describe('Plain authentication (type 256) handler', function () {
beforeEach(function () { beforeEach(function () {
sendSecurity(19, client); sendSecurity(19, client);
expect(client._sock).to.have.sent(new Uint8Array([19])); expect(client._sock).to.have.sent(new Uint8Array([19]));
@ -2430,7 +2495,7 @@ describe('Remote Frame Buffer Protocol Client', function () {
expect(client._keyboard.grab).to.have.been.calledOnce; expect(client._keyboard.grab).to.have.been.calledOnce;
}); });
describe('Initial Update Request', function () { describe('Initial update request', function () {
beforeEach(function () { beforeEach(function () {
sinon.spy(RFB.messages, "pixelFormat"); sinon.spy(RFB.messages, "pixelFormat");
sinon.spy(RFB.messages, "clientEncodings"); sinon.spy(RFB.messages, "clientEncodings");
@ -2485,7 +2550,7 @@ describe('Remote Frame Buffer Protocol Client', function () {
}); });
}); });
describe('Protocol Message Processing After Completing Initialization', function () { describe('Protocol message processing after completing initialization', function () {
let client; let client;
beforeEach(function () { beforeEach(function () {
@ -2495,7 +2560,7 @@ describe('Remote Frame Buffer Protocol Client', function () {
client._fbHeight = 20; client._fbHeight = 20;
}); });
describe('Framebuffer Update Handling', function () { describe('Framebuffer update handling', function () {
function sendFbuMsg(rectInfo, rectData, client, rectCnt) { function sendFbuMsg(rectInfo, rectData, client, rectCnt) {
let data = []; let data = [];
@ -2576,7 +2641,7 @@ describe('Remote Frame Buffer Protocol Client', function () {
expect(callback.args[0][0].detail.clean).to.be.false; expect(callback.args[0][0].detail.clean).to.be.false;
}); });
describe('Message Encoding Handlers', function () { describe('Message encoding handlers', function () {
beforeEach(function () { beforeEach(function () {
// a really small frame // a really small frame
client._fbWidth = 4; client._fbWidth = 4;
@ -2817,7 +2882,7 @@ describe('Remote Frame Buffer Protocol Client', function () {
}); });
}); });
describe('the VMware Cursor pseudo-encoding handler', function () { describe('the VMware cursor pseudo-encoding handler', function () {
beforeEach(function () { beforeEach(function () {
sinon.spy(client._cursor, 'change'); sinon.spy(client._cursor, 'change');
}); });
@ -3150,7 +3215,7 @@ describe('Remote Frame Buffer Protocol Client', function () {
}); });
}); });
describe('XVP Message Handling', function () { describe('XVP message handling', function () {
it('should set the XVP version and fire the callback with the version on XVP_INIT', function () { it('should set the XVP version and fire the callback with the version on XVP_INIT', function () {
const spy = sinon.spy(); const spy = sinon.spy();
client.addEventListener("capabilities", spy); client.addEventListener("capabilities", spy);
@ -3172,7 +3237,7 @@ describe('Remote Frame Buffer Protocol Client', function () {
}); });
}); });
describe('Normal Clipboard Handling Receive', function () { describe('Normal clipboard handling receive', function () {
it('should fire the clipboard callback with the retrieved text on ServerCutText', function () { it('should fire the clipboard callback with the retrieved text on ServerCutText', function () {
const expectedStr = 'cheese!'; const expectedStr = 'cheese!';
const data = [3, 0, 0, 0]; const data = [3, 0, 0, 0];
@ -3187,7 +3252,7 @@ describe('Remote Frame Buffer Protocol Client', function () {
}); });
}); });
describe('Extended clipboard Handling', function () { describe('Extended clipboard handling', function () {
describe('Extended clipboard initialization', function () { describe('Extended clipboard initialization', function () {
beforeEach(function () { beforeEach(function () {
@ -3222,7 +3287,7 @@ describe('Remote Frame Buffer Protocol Client', function () {
}); });
describe('Extended Clipboard Handling Receive', function () { describe('Extended clipboard handling receive', function () {
beforeEach(function () { beforeEach(function () {
// Send our capabilities // Send our capabilities
@ -3493,7 +3558,7 @@ describe('Remote Frame Buffer Protocol Client', function () {
}); });
}); });
describe('Asynchronous Events', function () { describe('Asynchronous events', function () {
let client; let client;
let pointerEvent; let pointerEvent;
let keyEvent; let keyEvent;
@ -3537,7 +3602,7 @@ describe('Remote Frame Buffer Protocol Client', function () {
return res; return res;
} }
describe('Mouse Events', function () { describe('Mouse events', function () {
function sendMouseMoveEvent(x, y) { function sendMouseMoveEvent(x, y) {
let pos = elementToClient(x, y); let pos = elementToClient(x, y);
let ev; let ev;
@ -3663,7 +3728,7 @@ describe('Remote Frame Buffer Protocol Client', function () {
50, 70, 0x0); 50, 70, 0x0);
}); });
describe('Event Aggregation', function () { describe('Event aggregation', function () {
it('should send a single pointer event on mouse movement', function () { it('should send a single pointer event on mouse movement', function () {
sendMouseMoveEvent(50, 70); sendMouseMoveEvent(50, 70);
clock.tick(100); clock.tick(100);
@ -3790,7 +3855,7 @@ describe('Remote Frame Buffer Protocol Client', function () {
}); });
}); });
describe('Wheel Events', function () { describe('Wheel events', function () {
function sendWheelEvent(x, y, dx, dy, mode=0) { function sendWheelEvent(x, y, dx, dy, mode=0) {
let pos = elementToClient(x, y); let pos = elementToClient(x, y);
let ev; let ev;
@ -3900,7 +3965,7 @@ describe('Remote Frame Buffer Protocol Client', function () {
}); });
}); });
describe('Keyboard Events', function () { describe('Keyboard events', function () {
it('should send a key message on a key press', function () { it('should send a key message on a key press', function () {
let esock = new Websock(); let esock = new Websock();
let ews = new FakeWebSocket(); let ews = new FakeWebSocket();
@ -4613,7 +4678,7 @@ describe('Remote Frame Buffer Protocol Client', function () {
}); });
}); });
describe('WebSocket Events', function () { describe('WebSocket events', function () {
// message events // message events
it('should do nothing if we receive an empty message and have nothing in the queue', function () { it('should do nothing if we receive an empty message and have nothing in the queue', function () {
sinon.spy(client, "_normalMsg"); sinon.spy(client, "_normalMsg");
@ -4901,7 +4966,7 @@ describe('RFB messages', function () {
sock.attach(websock); sock.attach(websock);
}); });
describe('Input Events', function () { describe('Input events', function () {
it('should send correct data for keyboard events', function () { it('should send correct data for keyboard events', function () {
// FIXME: down should be boolean // FIXME: down should be boolean
RFB.messages.keyEvent(sock, 0x12345678, 0); RFB.messages.keyEvent(sock, 0x12345678, 0);
@ -4936,7 +5001,7 @@ describe('RFB messages', function () {
}); });
}); });
describe('Clipboard Events', function () { describe('Clipboard events', function () {
it('should send correct data for clipboard events', function () { it('should send correct data for clipboard events', function () {
RFB.messages.clientCutText(sock, new Uint8Array([ 0x01, 0x23, 0x45, 0x67 ])); RFB.messages.clientCutText(sock, new Uint8Array([ 0x01, 0x23, 0x45, 0x67 ]));
let expected = let expected =
@ -4946,7 +5011,7 @@ describe('RFB messages', function () {
}); });
}); });
describe('Extended Clipboard Handling Send', function () { describe('Extended clipboard handling send', function () {
it('should call clientCutText with correct Caps data', function () { it('should call clientCutText with correct Caps data', function () {
let formats = { let formats = {
0: 2, 0: 2,
@ -5133,7 +5198,7 @@ describe('RFB messages', function () {
}); });
}); });
describe('Screen Layout', function () { describe('Screen layout', function () {
it('should send correct data for screen layout changes', function () { it('should send correct data for screen layout changes', function () {
RFB.messages.setDesktopSize(sock, 12345, 54321, 0x12345678, 0x90abcdef); RFB.messages.setDesktopSize(sock, 12345, 54321, 0x12345678, 0x90abcdef);
let expected = let expected =
@ -5155,7 +5220,7 @@ describe('RFB messages', function () {
}); });
}); });
describe('Continuous Updates', function () { describe('Continuous updates', function () {
it('should send correct data for continuous updates configuration', function () { it('should send correct data for continuous updates configuration', function () {
// FIXME: enable should be boolean // FIXME: enable should be boolean
RFB.messages.enableContinuousUpdates(sock, 0, 12345, 54321, 34343, 18181); RFB.messages.enableContinuousUpdates(sock, 0, 12345, 54321, 34343, 18181);
@ -5165,7 +5230,7 @@ describe('RFB messages', function () {
}); });
}); });
describe('Pixel Format', function () { describe('Pixel format', function () {
it('should send correct data for normal depth', function () { it('should send correct data for normal depth', function () {
RFB.messages.pixelFormat(sock, 24, true); RFB.messages.pixelFormat(sock, 24, true);
let expected = let expected =

View File

@ -41,7 +41,7 @@ function push32(arr, num) {
num & 0xFF); num & 0xFF);
} }
describe('RRE Decoder', function () { describe('RRE decoder', function () {
let decoder; let decoder;
let display; let display;

View File

@ -29,7 +29,7 @@ function testDecodeRect(decoder, x, y, width, height, data, display, depth) {
return done; return done;
} }
describe('Tight Decoder', function () { describe('Tight decoder', function () {
let decoder; let decoder;
let display; let display;

View File

@ -29,7 +29,7 @@ function testDecodeRect(decoder, x, y, width, height, data, display, depth) {
return done; return done;
} }
describe('TightPng Decoder', function () { describe('TightPng decoder', function () {
let decoder; let decoder;
let display; let display;

View File

@ -535,7 +535,7 @@ describe('Websock', function () {
}); });
}); });
describe('WebSocket Receiving', function () { describe('WebSocket receiving', function () {
let sock; let sock;
beforeEach(function () { beforeEach(function () {
sock = new Websock(); sock = new Websock();

View File

@ -29,7 +29,7 @@ function testDecodeRect(decoder, x, y, width, height, data, display, depth) {
return done; return done;
} }
describe('Zlib Decoder', function () { describe('Zlib decoder', function () {
let decoder; let decoder;
let display; let display;

View File

@ -29,7 +29,7 @@ function testDecodeRect(decoder, x, y, width, height, data, display, depth) {
return done; return done;
} }
describe('ZRLE Decoder', function () { describe('ZRLE decoder', function () {
let decoder; let decoder;
let display; let display;

View File

@ -1,7 +1,7 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en"> <html lang="en">
<head> <head>
<title>VNC Playback</title> <title>VNC playback</title>
<script type="module" src="./playback-ui.js"></script> <script type="module" src="./playback-ui.js"></script>
</head> </head>
<body> <body>

View File

@ -1,7 +1,7 @@
#!/usr/bin/env node #!/usr/bin/env node
/* /*
* genkeysymdef: X11 keysymdef.h to JavaScript converter * genkeysymdef: X11 keysymdef.h to JavaScript converter
* Copyright (C) 2018 The noVNC Authors * Copyright (C) 2018 The noVNC authors
* Licensed under MPL 2.0 (see LICENSE.txt) * Licensed under MPL 2.0 (see LICENSE.txt)
*/ */

View File

@ -1,6 +1,6 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# Copyright (C) 2018 The noVNC Authors # Copyright (C) 2018 The noVNC authors
# Licensed under MPL 2.0 or any later version (see LICENSE.txt) # Licensed under MPL 2.0 or any later version (see LICENSE.txt)
usage() { usage() {
@ -82,7 +82,7 @@ cleanup() {
fi fi
} }
# Process Arguments # Process arguments
# Arguments that only apply to chrooter itself # Arguments that only apply to chrooter itself
while [ "$*" ]; do while [ "$*" ]; do

View File

@ -4,7 +4,7 @@
<!-- <!--
noVNC example: simple example using default UI noVNC example: simple example using default UI
Copyright (C) 2019 The noVNC Authors Copyright (C) 2019 The noVNC authors
noVNC is licensed under the MPL 2.0 (see LICENSE.txt) noVNC is licensed under the MPL 2.0 (see LICENSE.txt)
This file is licensed under the 2-Clause BSD license (see LICENSE.txt). This file is licensed under the 2-Clause BSD license (see LICENSE.txt).
@ -108,7 +108,7 @@
</div> </div>
</div> </div>
<!-- noVNC Control Bar --> <!-- noVNC control bar -->
<div id="noVNC_control_bar_anchor" class="noVNC_vcenter"> <div id="noVNC_control_bar_anchor" class="noVNC_vcenter">
<div id="noVNC_control_bar"> <div id="noVNC_control_bar">
@ -123,18 +123,18 @@
<!-- Drag/Pan the viewport --> <!-- Drag/Pan the viewport -->
<input type="image" alt="Drag" src="app/images/drag.svg" <input type="image" alt="Drag" src="app/images/drag.svg"
id="noVNC_view_drag_button" class="noVNC_button noVNC_hidden" id="noVNC_view_drag_button" class="noVNC_button noVNC_hidden"
title="Move/Drag Viewport"> title="Move/Drag viewport">
<!--noVNC Touch Device only buttons--> <!--noVNC touch device only buttons-->
<div id="noVNC_mobile_buttons"> <div id="noVNC_mobile_buttons">
<input type="image" alt="Keyboard" src="app/images/keyboard.svg" <input type="image" alt="Keyboard" src="app/images/keyboard.svg"
id="noVNC_keyboard_button" class="noVNC_button" title="Show Keyboard"> id="noVNC_keyboard_button" class="noVNC_button" title="Show keyboard">
</div> </div>
<!-- Extra manual keys --> <!-- Extra manual keys -->
<input type="image" alt="Extra keys" src="app/images/toggleextrakeys.svg" <input type="image" alt="Extra keys" src="app/images/toggleextrakeys.svg"
id="noVNC_toggle_extra_keys_button" class="noVNC_button" id="noVNC_toggle_extra_keys_button" class="noVNC_button"
title="Show Extra Keys"> title="Show extra keys">
<div class="noVNC_vcenter"> <div class="noVNC_vcenter">
<div id="noVNC_modifiers" class="noVNC_panel"> <div id="noVNC_modifiers" class="noVNC_panel">
<input type="image" alt="Ctrl" src="app/images/ctrl.svg" <input type="image" alt="Ctrl" src="app/images/ctrl.svg"
@ -190,9 +190,9 @@
</div> </div>
<!-- Toggle fullscreen --> <!-- Toggle fullscreen -->
<input type="image" alt="Full Screen" src="app/images/fullscreen.svg" <input type="image" alt="Full screen" src="app/images/fullscreen.svg"
id="noVNC_fullscreen_button" class="noVNC_button noVNC_hidden" id="noVNC_fullscreen_button" class="noVNC_button noVNC_hidden"
title="Full Screen"> title="Full screen">
<!-- Settings --> <!-- Settings -->
<input type="image" alt="Settings" src="app/images/settings.svg" <input type="image" alt="Settings" src="app/images/settings.svg"
@ -205,21 +205,21 @@
</div> </div>
<ul> <ul>
<li> <li>
<label><input id="noVNC_setting_shared" type="checkbox"> Shared Mode</label> <label><input id="noVNC_setting_shared" type="checkbox"> Shared mode</label>
</li> </li>
<li> <li>
<label><input id="noVNC_setting_view_only" type="checkbox"> View Only</label> <label><input id="noVNC_setting_view_only" type="checkbox"> View only</label>
</li> </li>
<li><hr></li> <li><hr></li>
<li> <li>
<label><input id="noVNC_setting_view_clip" type="checkbox"> Clip to Window</label> <label><input id="noVNC_setting_view_clip" type="checkbox"> Clip to window</label>
</li> </li>
<li> <li>
<label for="noVNC_setting_resize">Scaling Mode:</label> <label for="noVNC_setting_resize">Scaling mode:</label>
<select id="noVNC_setting_resize" name="vncResize"> <select id="noVNC_setting_resize" name="vncResize">
<option value="off">None</option> <option value="off">None</option>
<option value="scale">Local Scaling</option> <option value="scale">Local scaling</option>
<option value="remote">Remote Resizing</option> <option value="remote">Remote resizing</option>
</select> </select>
</li> </li>
<li><hr></li> <li><hr></li>
@ -261,15 +261,15 @@
</li> </li>
<li><hr></li> <li><hr></li>
<li> <li>
<label><input id="noVNC_setting_reconnect" type="checkbox"> Automatic Reconnect</label> <label><input id="noVNC_setting_reconnect" type="checkbox"> Automatic reconnect</label>
</li> </li>
<li> <li>
<label for="noVNC_setting_reconnect_delay">Reconnect Delay (ms):</label> <label for="noVNC_setting_reconnect_delay">Reconnect delay (ms):</label>
<input id="noVNC_setting_reconnect_delay" type="number"> <input id="noVNC_setting_reconnect_delay" type="number">
</li> </li>
<li><hr></li> <li><hr></li>
<li> <li>
<label><input id="noVNC_setting_show_dot" type="checkbox"> Show Dot when No Cursor</label> <label><input id="noVNC_setting_show_dot" type="checkbox"> Show dot when no cursor</label>
</li> </li>
<li><hr></li> <li><hr></li>
<!-- Logging selection dropdown --> <!-- Logging selection dropdown -->
@ -290,7 +290,7 @@
</div> </div>
</div> </div>
<!-- Connection Controls --> <!-- Connection controls -->
<input type="image" alt="Disconnect" src="app/images/disconnect.svg" <input type="image" alt="Disconnect" src="app/images/disconnect.svg"
id="noVNC_disconnect_button" class="noVNC_button" id="noVNC_disconnect_button" class="noVNC_button"
title="Disconnect"> title="Disconnect">
@ -305,7 +305,7 @@
</div> </div>
</div> </div>
<!-- Status Dialog --> <!-- Status dialog -->
<div id="noVNC_status"></div> <div id="noVNC_status"></div>
<!-- Connect button --> <!-- Connect button -->
@ -320,7 +320,7 @@
</div> </div>
</div> </div>
<!-- Server Key Verification Dialog --> <!-- Server key verification dialog -->
<div class="noVNC_center noVNC_connect_layer"> <div class="noVNC_center noVNC_connect_layer">
<div id="noVNC_verify_server_dlg" class="noVNC_panel"><form> <div id="noVNC_verify_server_dlg" class="noVNC_panel"><form>
<div class="noVNC_heading"> <div class="noVNC_heading">
@ -344,7 +344,7 @@
</form></div> </form></div>
</div> </div>
<!-- Password Dialog --> <!-- Password dialog -->
<div class="noVNC_center noVNC_connect_layer"> <div class="noVNC_center noVNC_connect_layer">
<div id="noVNC_credentials_dlg" class="noVNC_panel"><form> <div id="noVNC_credentials_dlg" class="noVNC_panel"><form>
<div class="noVNC_heading"> <div class="noVNC_heading">
@ -359,12 +359,12 @@
<input id="noVNC_password_input" type="password"> <input id="noVNC_password_input" type="password">
</div> </div>
<div> <div>
<input id="noVNC_credentials_button" type="submit" value="Send Credentials" class="noVNC_submit"> <input id="noVNC_credentials_button" type="submit" value="Send credentials" class="noVNC_submit">
</div> </div>
</form></div> </form></div>
</div> </div>
<!-- Transition Screens --> <!-- Transition screens -->
<div id="noVNC_transition"> <div id="noVNC_transition">
<div id="noVNC_transition_text"></div> <div id="noVNC_transition_text"></div>
<div> <div>

Some files were not shown because too many files have changed in this diff Show More