From fefce68687f18f64e034d55a10c3dfc2434d98d0 Mon Sep 17 00:00:00 2001 From: Anton Moroz Date: Wed, 5 Jul 2023 13:20:10 +0300 Subject: [PATCH] Update noVNC to 1.4.0 --- public/novnc/LICENSE.txt | 2 +- public/novnc/app/error-handler.js | 123 ++-- public/novnc/app/images/icons/Makefile | 64 +- .../novnc/app/images/icons/novnc-120x120.png | Bin 4028 -> 0 bytes .../novnc/app/images/icons/novnc-144x144.png | Bin 4582 -> 0 bytes .../novnc/app/images/icons/novnc-152x152.png | Bin 5216 -> 0 bytes public/novnc/app/images/icons/novnc-16x16.png | Bin 675 -> 0 bytes .../novnc/app/images/icons/novnc-192x192.png | Bin 5787 -> 0 bytes public/novnc/app/images/icons/novnc-24x24.png | Bin 1000 -> 0 bytes public/novnc/app/images/icons/novnc-32x32.png | Bin 1064 -> 0 bytes public/novnc/app/images/icons/novnc-48x48.png | Bin 1397 -> 0 bytes public/novnc/app/images/icons/novnc-60x60.png | Bin 1932 -> 0 bytes public/novnc/app/images/icons/novnc-64x64.png | Bin 1946 -> 0 bytes public/novnc/app/images/icons/novnc-72x72.png | Bin 2699 -> 0 bytes public/novnc/app/images/icons/novnc-76x76.png | Bin 2874 -> 0 bytes public/novnc/app/images/icons/novnc-96x96.png | Bin 2351 -> 0 bytes .../novnc/app/images/icons/novnc-ios-120.png | Bin 0 -> 3215 bytes .../novnc/app/images/icons/novnc-ios-152.png | Bin 0 -> 4190 bytes .../novnc/app/images/icons/novnc-ios-167.png | Bin 0 -> 4574 bytes .../novnc/app/images/icons/novnc-ios-180.png | Bin 0 -> 4730 bytes .../novnc/app/images/icons/novnc-ios-40.png | Bin 0 -> 1245 bytes .../novnc/app/images/icons/novnc-ios-58.png | Bin 0 -> 1602 bytes .../novnc/app/images/icons/novnc-ios-60.png | Bin 0 -> 1595 bytes .../novnc/app/images/icons/novnc-ios-80.png | Bin 0 -> 1825 bytes .../novnc/app/images/icons/novnc-ios-87.png | Bin 0 -> 2708 bytes .../novnc/app/images/icons/novnc-ios-icon.svg | 183 ++++++ public/novnc/app/images/icons/novnc.ico | Bin 0 -> 310566 bytes public/novnc/app/locale/fr.json | 48 +- public/novnc/app/locale/it.json | 72 +++ public/novnc/app/locale/sv.json | 12 +- public/novnc/app/localization.js | 11 +- public/novnc/app/styles/base.css | 380 +++++------- public/novnc/app/styles/input.css | 281 +++++++++ public/novnc/app/ui.js | 109 +++- public/novnc/app/webutil.js | 4 +- public/novnc/core/decoders/jpeg.js | 141 +++++ public/novnc/core/decoders/raw.js | 2 +- public/novnc/core/decoders/zrle.js | 185 ++++++ public/novnc/core/des.js | 2 +- public/novnc/core/display.js | 12 + public/novnc/core/encodings.js | 4 + public/novnc/core/input/keyboard.js | 10 + public/novnc/core/ra2.js | 567 ++++++++++++++++++ public/novnc/core/rfb.js | 553 ++++++++++++++--- public/novnc/core/util/browser.js | 63 +- public/novnc/core/util/cursor.js | 4 + public/novnc/core/util/md5.js | 79 +++ public/novnc/vnc.html | 138 +++-- 48 files changed, 2545 insertions(+), 504 deletions(-) delete mode 100644 public/novnc/app/images/icons/novnc-120x120.png delete mode 100644 public/novnc/app/images/icons/novnc-144x144.png delete mode 100644 public/novnc/app/images/icons/novnc-152x152.png delete mode 100644 public/novnc/app/images/icons/novnc-16x16.png delete mode 100644 public/novnc/app/images/icons/novnc-192x192.png delete mode 100644 public/novnc/app/images/icons/novnc-24x24.png delete mode 100644 public/novnc/app/images/icons/novnc-32x32.png delete mode 100644 public/novnc/app/images/icons/novnc-48x48.png delete mode 100644 public/novnc/app/images/icons/novnc-60x60.png delete mode 100644 public/novnc/app/images/icons/novnc-64x64.png delete mode 100644 public/novnc/app/images/icons/novnc-72x72.png delete mode 100644 public/novnc/app/images/icons/novnc-76x76.png delete mode 100644 public/novnc/app/images/icons/novnc-96x96.png create mode 100644 public/novnc/app/images/icons/novnc-ios-120.png create mode 100644 public/novnc/app/images/icons/novnc-ios-152.png create mode 100644 public/novnc/app/images/icons/novnc-ios-167.png create mode 100644 public/novnc/app/images/icons/novnc-ios-180.png create mode 100644 public/novnc/app/images/icons/novnc-ios-40.png create mode 100644 public/novnc/app/images/icons/novnc-ios-58.png create mode 100644 public/novnc/app/images/icons/novnc-ios-60.png create mode 100644 public/novnc/app/images/icons/novnc-ios-80.png create mode 100644 public/novnc/app/images/icons/novnc-ios-87.png create mode 100644 public/novnc/app/images/icons/novnc-ios-icon.svg create mode 100644 public/novnc/app/images/icons/novnc.ico create mode 100644 public/novnc/app/locale/it.json create mode 100644 public/novnc/app/styles/input.css create mode 100644 public/novnc/core/decoders/jpeg.js create mode 100644 public/novnc/core/decoders/zrle.js create mode 100644 public/novnc/core/ra2.js create mode 100644 public/novnc/core/util/md5.js diff --git a/public/novnc/LICENSE.txt b/public/novnc/LICENSE.txt index ee81d202..37efdcdb 100644 --- a/public/novnc/LICENSE.txt +++ b/public/novnc/LICENSE.txt @@ -1,4 +1,4 @@ -noVNC is Copyright (C) 2019 The noVNC Authors +noVNC is Copyright (C) 2022 The noVNC Authors (./AUTHORS) The noVNC core library files are licensed under the MPL 2.0 (Mozilla diff --git a/public/novnc/app/error-handler.js b/public/novnc/app/error-handler.js index 81a6cba8..67b63720 100644 --- a/public/novnc/app/error-handler.js +++ b/public/novnc/app/error-handler.js @@ -6,61 +6,74 @@ * See README.md for usage and integration instructions. */ -// NB: this should *not* be included as a module until we have -// native support in the browsers, so that our error handler -// can catch script-loading errors. +// Fallback for all uncought errors +function handleError(event, err) { + try { + const msg = document.getElementById('noVNC_fallback_errormsg'); -// No ES6 can be used in this file since it's used for the translation -/* eslint-disable prefer-arrow-callback */ - -(function _scope() { - "use strict"; - - // Fallback for all uncought errors - function handleError(event, err) { - try { - const msg = document.getElementById('noVNC_fallback_errormsg'); - - // Only show the initial error - if (msg.hasChildNodes()) { - return false; - } - - let div = document.createElement("div"); - div.classList.add('noVNC_message'); - div.appendChild(document.createTextNode(event.message)); - msg.appendChild(div); - - if (event.filename) { - div = document.createElement("div"); - div.className = 'noVNC_location'; - let text = event.filename; - if (event.lineno !== undefined) { - text += ":" + event.lineno; - if (event.colno !== undefined) { - text += ":" + event.colno; - } - } - div.appendChild(document.createTextNode(text)); - msg.appendChild(div); - } - - if (err && err.stack) { - div = document.createElement("div"); - div.className = 'noVNC_stack'; - div.appendChild(document.createTextNode(err.stack)); - msg.appendChild(div); - } - - document.getElementById('noVNC_fallback_error') - .classList.add("noVNC_open"); - } catch (exc) { - document.write("noVNC encountered an error."); + // Work around Firefox bug: + // https://bugzilla.mozilla.org/show_bug.cgi?id=1685038 + if (event.message === "ResizeObserver loop completed with undelivered notifications.") { + return false; } - // Don't return true since this would prevent the error - // from being printed to the browser console. - return false; + + // Only show the initial error + if (msg.hasChildNodes()) { + return false; + } + + let div = document.createElement("div"); + div.classList.add('noVNC_message'); + div.appendChild(document.createTextNode(event.message)); + msg.appendChild(div); + + if (event.filename) { + div = document.createElement("div"); + div.className = 'noVNC_location'; + let text = event.filename; + if (event.lineno !== undefined) { + text += ":" + event.lineno; + if (event.colno !== undefined) { + text += ":" + event.colno; + } + } + div.appendChild(document.createTextNode(text)); + msg.appendChild(div); + } + + if (err && err.stack) { + div = document.createElement("div"); + div.className = 'noVNC_stack'; + div.appendChild(document.createTextNode(err.stack)); + msg.appendChild(div); + } + + document.getElementById('noVNC_fallback_error') + .classList.add("noVNC_open"); + + } catch (exc) { + document.write("noVNC encountered an error."); } - window.addEventListener('error', function onerror(evt) { handleError(evt, evt.error); }); - window.addEventListener('unhandledrejection', function onreject(evt) { handleError(evt.reason, evt.reason); }); -})(); + + // Try to disable keyboard interaction, best effort + try { + // Remove focus from the currently focused element in order to + // prevent keyboard interaction from continuing + if (document.activeElement) { document.activeElement.blur(); } + + // Don't let any element be focusable when showing the error + let keyboardFocusable = 'a[href], button, input, textarea, select, details, [tabindex]'; + document.querySelectorAll(keyboardFocusable).forEach((elem) => { + elem.setAttribute("tabindex", "-1"); + }); + } catch (exc) { + // Do nothing + } + + // Don't return true since this would prevent the error + // from being printed to the browser console. + return false; +} + +window.addEventListener('error', evt => handleError(evt, evt.error)); +window.addEventListener('unhandledrejection', evt => handleError(evt.reason, evt.reason)); diff --git a/public/novnc/app/images/icons/Makefile b/public/novnc/app/images/icons/Makefile index be564b43..03eaed07 100644 --- a/public/novnc/app/images/icons/Makefile +++ b/public/novnc/app/images/icons/Makefile @@ -1,42 +1,42 @@ -ICONS := \ - novnc-16x16.png \ - novnc-24x24.png \ - novnc-32x32.png \ - novnc-48x48.png \ - novnc-64x64.png +BROWSER_SIZES := 16 24 32 48 64 +#ANDROID_SIZES := 72 96 144 192 +# FIXME: The ICO is limited to 8 icons due to a Chrome bug: +# https://bugs.chromium.org/p/chromium/issues/detail?id=1381393 +ANDROID_SIZES := 96 144 192 +WEB_ICON_SIZES := $(BROWSER_SIZES) $(ANDROID_SIZES) -ANDROID_LAUNCHER := \ - novnc-48x48.png \ - novnc-72x72.png \ - novnc-96x96.png \ - novnc-144x144.png \ - novnc-192x192.png +#IOS_1X_SIZES := 20 29 40 76 # No such devices exist anymore +IOS_2X_SIZES := 40 58 80 120 152 167 +IOS_3X_SIZES := 60 87 120 180 +ALL_IOS_SIZES := $(IOS_1X_SIZES) $(IOS_2X_SIZES) $(IOS_3X_SIZES) -IPHONE_LAUNCHER := \ - novnc-60x60.png \ - novnc-120x120.png - -IPAD_LAUNCHER := \ - novnc-76x76.png \ - novnc-152x152.png - -ALL_ICONS := $(ICONS) $(ANDROID_LAUNCHER) $(IPHONE_LAUNCHER) $(IPAD_LAUNCHER) +ALL_ICONS := \ + $(ALL_IOS_SIZES:%=novnc-ios-%.png) \ + novnc.ico all: $(ALL_ICONS) -novnc-16x16.png: novnc-icon-sm.svg - convert -density 90 \ - -background transparent "$<" "$@" -novnc-24x24.png: novnc-icon-sm.svg - convert -density 135 \ - -background transparent "$<" "$@" -novnc-32x32.png: novnc-icon-sm.svg - convert -density 180 \ - -background transparent "$<" "$@" +# Our testing shows that the ICO file need to be sorted in largest to +# smallest to get the apporpriate behviour +WEB_ICON_SIZES_REVERSE := $(shell echo $(WEB_ICON_SIZES) | tr ' ' '\n' | sort -nr | tr '\n' ' ') +WEB_BASE_ICONS := $(WEB_ICON_SIZES_REVERSE:%=novnc-%.png) +.INTERMEDIATE: $(WEB_BASE_ICONS) +novnc.ico: $(WEB_BASE_ICONS) + convert $(WEB_BASE_ICONS) "$@" + +# General conversion novnc-%.png: novnc-icon.svg - convert -density $$[`echo $* | cut -d x -f 1` * 90 / 48] \ - -background transparent "$<" "$@" + convert -depth 8 -background transparent \ + -size $*x$* "$(lastword $^)" "$@" + +# iOS icons use their own SVG +novnc-ios-%.png: novnc-ios-icon.svg + convert -depth 8 -background transparent \ + -size $*x$* "$(lastword $^)" "$@" + +# The smallest sizes are generated using a different SVG +novnc-16.png novnc-24.png novnc-32.png: novnc-icon-sm.svg clean: rm -f *.png diff --git a/public/novnc/app/images/icons/novnc-120x120.png b/public/novnc/app/images/icons/novnc-120x120.png deleted file mode 100644 index 40823efbadf27f0286a84976a34d1cff8406f5a2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4028 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 diff --git a/public/novnc/app/images/icons/novnc-144x144.png b/public/novnc/app/images/icons/novnc-144x144.png deleted file mode 100644 index eee71f11c74fba3be7a05d668aa1c1dc7d993d09..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4582 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 P8v(kSw=`;ScCr5hJEV16 diff --git a/public/novnc/app/images/icons/novnc-152x152.png b/public/novnc/app/images/icons/novnc-152x152.png deleted file mode 100644 index 0694b2de39b8e709b442f10905a6f3cf39f7c7bc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5216 zcmZ`-bySqk*I&9rx}?!n7Fa?-LZrJpmR>?Sq`O@fkPuKxP{O4_x>?CZ`3lGq@+DV5 zK#*>JkMDWU@0|CKcg~sT&b`mvJM+xv&OCGPOMP86Dsnb*5C}x2p{{HQ(7eBulo)uj z3~=)RgwRDnM*#$CNT;~6CjxkGM|DFT5GeE>2oxO;0$l*2=uHsl1r!AOWd{OD0|uCV z3OWpAffvLMT58Gw1TWqL!sa2P+vcg0&5Oe0i8b@q+|CL&uaE>ACCNXBSPW3dyj;UV1+493``Pyo|tYhsdwLLpHo=fy+^-gsJC zMFvInc=()F{HsGsbU2uF;CCDeO_3yyQ&qUOuC7>6V^Tbmf05~>^1*JT9mCpR;@O(zwU*wEMDAnf7_j#o-5|xBL+iVq7*24hd0q zcFS@G4Bq7fZzD-#eMYtdZnTVyjBHD>{E+&Nj*jC}a1RQMK>tP|8lBc%1ZueKv zQR?f5WMtJXErGURh6|TYLA6m1LWMI-2A`U#&T)GizPqdIGC@pVZYkIX9+UunLo#t# z0TaeP($Uf3>7Iawl2K7nU7a6pOz8U>9FZoWznAE5ZYL%Z+w6&V;8PId7pw4QXm$!J zjCv>=6flw!_DpMG8O%LBcb^(C^g0HuJeZ3CBh0>k|K45qdPrB+z|1VD6^uxqhq-D7 z@@P!HHZd`|8}n>=bM|me`drYodOrv#`bLBTjOID1!Lmh}4S|imbt5-7H>V%lz#n-r zjYpskhnTOY~o%VW|u`F{IuwKOjVh3a%1rld_p z(5n2g?4(c~r5ae-r^4h28F~#7Edx;RE_MLtZx?IU-le4jXxaFHy@mhBlF!q3f2E%O{teYoGJZNI-b@Mzlkov z2)e^HR3F76CmyDM?8ewuALtu*t{|~AjZ7AFn7 z;ZoFzYEBXnfEO1Mx4D;&cwXr`vTP%uAx6^Xvx3hsI16&<=z}5?3a z)n2GG$7v@w+>v0F+2SifC0(tV8_UWwKiXa&ww=$SlW!xJ7sVM!w32oj~macHJ=cEt&CCKCzg!C0 zziK6M4s2C*!`mkT6@H`59vjo_tjhm}jF7`8mN~c1Q`*`xq@<>HaB^}AUsZn|G6a@` zAu=-V0J1c_&6%64tF&|1#VLeVk5)8IG^XzhT-oIw5hy@ePn0sQ-G5_XH;}!`JWafT zNc>(sZPEcf&eh!=t)81$N?FZn7+J~zgTYul*b53O4W28KI_G{-RfxjtxT&L1Qc{9C zGSjE6Egy#(n3@t7ZBT9GZfi5JwEyndri`LMlx{}8`KW6}P)e-Vtx@}O-96w$4>k2~ zxuEO>dhaw{#$}9U2_<4*ttZHcwARw#tYIp;k$q6E0DzhOl283Fnsn4jN=;SDM5>}h z-FF@Xo0g$Kx8i5WLny+YCGneQKjoVT9Mp_a7gHMJ1rKyJjTn||J8M6WW^FZxiHp6+j zo{>mM>QT!-6iT(*olh}ubOM!?+3$ykzUMq1dz2GQ?5ZSW&aYVSm=q{MfCjNY{$%Is z3a+79UrAahamiU|gcA!}Z@y{N4ha#9yj+;t4<*SE4h;)aGxI_=1h~oHTy4;|t)&SY zn zkBPTdhr`7pPdlCW!=Xa(z0J*ME-o9JOIRD3c+Z8e{kX=U_OCB-lLLk^A0O^dYKgy? zYV|hr*_u?ra1o*_gZKL>I=0ef=^{MCx^2euMEOc&>v}8)e|}kdW+G(C3nNK0`ZF$G z<0B;&MHfA_h1?z$Ez62JswClxs=h80vL>yzStK%G$Qpn2B=QW+X>8&~^5u5dyDy1L z6{d&7je1trJ0!#=aZ10QNr>vbT*NarHoxo|=e5};%9BEbpX10k&vPU_4MioUy(|P4 zy;!%gL9XQw$oD_fe{<|zqEVpD9CBltJu&qu`b6Bt z`fS_w+PwMs0iqQPZ?R+jVd^!j{MPq?&R|MJnv5c{_qW;7HmD5!PLsrQss z(ZxlanyXf<`-=Y0W%KsIAambLP0mszM@)3&+oI!0Ncq>i*@pKVnB3C=+}j^P!Dsf% zUnCdstlfSQfQ3?*zsht!wJq zY;$|c^eR1yGCQ|5pU#aOM8Qnl;8%9yMbq8g=Rcv6ju{)vL{N45@XQBI@yc_}wm04N z3VPd8|BajeCtUYYDAK;8FEP=)>*Q^qZ4xbTXCnn}Iho@o`N68+D~i()$c+#NMn-|x zdn@R^we;Uw|JK}+*JD(3$m$_7Wg)zY0{AJ)q=CDre{_~QOceC= z)aah*R=-0~u^*+P*d_5xSqjmvA9_y*C|;i}6GUXp+4ErtGewWhnRM<qdiRRuqA+QF{dbE|;;VEBwWwYK`RgtGfFSo%oWtYB1d0VnXyzNGM*4Ii z8Y$$4V(2DM-U?{7B%Q*D#Xx zWNxII|23R`l1{AK-{ncH!Y&rG+e*;n+^qA2uJhv89f)nMkg_;T(a3jGpR6d#W~tWH z0I%!f`R}%%#1L9@&bn)qWZ=~-Zwi8IPtRej}tJaWg`2>nf~HTTFK(l@vmwo(5*n6&1;?+Skbq6wt{Qk+)DxbHA!tD#29ZqxCBp%LsHYid$ zY}yu&JUCfs0zhj_=<1R+(tg_FDM0VfQ)43+!erRhzs&9p8ctV(DVkYll=z z>6-?U3!0U;v>QlOUw8K2gf2G>N0*k`>|fQxarfi7MMP-g1MF{a-mtK!FN!;C+o;F{ z<*Z#UVT%$z3@Yd9mwRo|HDxd|MkKI%Yd`fnT~*l)H8B}1uPO7c-=A|4NF;RLKF|Ty z-tq(R;ql5IPNCr!Zas^GT)2@8KB>?n*D>ru&(qnzXU%Tm1_GKFbv+bh$sO^5 zy9myOmA~D5oh%EU@YyYPJp9z+YzDiZd51kym6uSYSC&3#k?|jow5V%$cWcGnUEKny z6-B7j)4=T=i^J_;z=c~p$Q*H+o{sMNeBnFOA6eUWTh7fJKd=g#f-5VN`)y=OV6?xU>Z296v^Hxgp(b3Vn=4KP|FKd6^b##PI zp6i3-TUuH^Y>4C~EbXZQ5t=5}S($%i?81P~I4Ru<`t$P> zBB)^u4$3iH^6p*Vj2IvXa}4)y9L{mds1fDF)k7$XCvwT`aSt6^2Oj(!fNGZ~Q-D-i z6xF>Tb}D#i=>Fw(B9ox#8-+yLOc~6+j-!~qHRzu&P|B=X@~&)T0(|b9`kZzw?Ew`U zstrVQB_F7VeZdgOc=l7Q6obn7TYHO>-oMe?qu`>Xr9C|@YqN(?%0sfX0O=_2AO-L! zAE}~h3Ptn>)Gswc5R;JQw1|e`Pe}5!mnp+*8t&R=2#)6-9@b-^X!Oci%3@iGHWd%y z(_#_!&qO9BON7E!2Sf_Nv251j>}hNI#>P%sBRb@iTA4?}J{EQ)G@P;%hgZ3QxrowK z3~p>Tqm;UnnnUUz8sr}pKaSRae;XPM(Np-Igm$;c)MRm2g2xWuzev6te)VTqjY#2a zgSy`c}Kx{r+ z@WkKi75|oIrc7%^Be80bwUhmh;&+>dP>3fLPpdH~C!dbXF zbi)p?FjtZ_gfMv}I2`9tF*Qey*a85p!=|jRu2wTM^Q_mrefu^FtCJq&tE5D*G&6Ie z0wgKaIt4Q+q&TSC7Jp~A-219b$|J)hVsq73u9F`SXG$Nsf(4QZT$IFSbFdN*6spV7f%}RqeU7QAsUkYZ{qbShS~(Dl`-oNQ=L71LIdCDBhl^`*Sl zI$DFuB1afz$&FYI15z5rJGJn81HK#uy7vhcMof*AWMe@s#Bu$*z%C=JyC|N_Yb!7R z$p-38SLS^LrJa|&os9*V+{N3#S))ldCHF^;d5oP=urw^_pUp(@LM)^`Vo)%cWMEkzR9l*vb9uOMTLCUiPMjSjsLyId>7Y2@w zYtgKdXHlF32A8rkw{bvrO&~zUJiy65050w52L}j93@Z9qNE9k0Dq$=tE)9iBOFR*T ziUEx>=T_|hQSkJ3a&r#({}rZXXxsq>*1sbdc{>LL+55pkK=MY|&CA{2(cT9x?Cs~0 T|67&~=mgSG(N(Thw2S=@24lsF diff --git a/public/novnc/app/images/icons/novnc-16x16.png b/public/novnc/app/images/icons/novnc-16x16.png deleted file mode 100644 index 42108f409990be6cf93cec396ae65f78a2bb3cd1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 675 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6e(pbstU$g(vPY0F z14ES>14Ba#1H&(%P{RubhEf9thF1v;3|2E37{m+a>32}9Ba4-i0PcZQH z^))gwGBh+~XkcI}VA9pqWhr8jmX=mgQBhS@H8C+UH8o|(V^CLDx3sj>)6-K^Q?s|X zzjB4u+gmm~T;tLu=Kud0%F6{cG&CMOV6m{UXlW6dG>LuQJfX5Ow)^)PLPKR-TwEL- zbsj!seDsLPz(Cs1PxQe9Mn^|Sp#9snv2WPGSX?Y}?;ewljg7Ifv6-2fv$M0St1HmG zGk0752U2V$L4Ls+PoI2VEpq2}(jA}(W0JSKi^T%=rPqKQ&H|6fVg?3f4G?CWG4sh= zpdfpRr>`sf11>&Z2E8R89dv*~D?MEtLnJPT_I2_#Iq&1=5WwVU9jt#)FFkQC3$C_&1g(BO>_Lj+BjwJ zl_tA{SsOz{p86hTD6o+77xA6gB`G+y;q%d=)-CrYEHlv3I`B5H-oa{~M8+Ckg?ajt zllD#8_wnT1#z$3o=Zu%ipMUkg^rO)+=I_%dZ#O)~UhuZB&&%zyU-CQs+mLGt zbhK)TYeY#(Vo9o1a#1RfVlXl=G}ARS&^0s(F*LR^Ft9Q)(>5>yGJ^Gv+o5R4%}>cp ztHiBAskpugs6i5BLvVgtNqJ&XDljI?^)mCai<1)zQuXqS(r3T3kpe1W@O1TaS?83{ F1OT_7-I@RZ diff --git a/public/novnc/app/images/icons/novnc-192x192.png b/public/novnc/app/images/icons/novnc-192x192.png deleted file mode 100644 index ef9201f4370f886812acca9d780afb15c6b98452..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5787 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 TuB&r{Oo09!W8Eqp`|$q(4_V)v diff --git a/public/novnc/app/images/icons/novnc-24x24.png b/public/novnc/app/images/icons/novnc-24x24.png deleted file mode 100644 index 110613594b8e305e26cafc6ac77e6f40bbdc76c9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1000 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM3?#3wJbMaAv7|ftIx;Y9?C1WI$O_~uBzpw; zGB8xBF)%c=FfjZA3N^f7U???UV0e|lz+g3lfkC`r&aOZk1_s8Y0G|+7paN@aYcn%5 zBO@bob8|~eOCag#>FMF&0VE;7(9lrTSye1ZOgvCr*Hl;8Ls>jnT){;_G*pzKfq}!B zgRzE@p_)NWO$}&>kdTn9tSqxLGm{e&uP?8>yu7ioG0=RVu|SIyoD`VdnH3ckx%{{| zwK*khCD^psw6wGw9Ua}=+zJa7|Nm$3_LdC~*GNtlzH^7!(o$>MG_mY#<)1$pdwO_) z?lCnrc>S7j!UWcZ3q@bOVvv`Y+Pan5$jD&oRMDwZ#k#tfy1SYE{kiAP<$L;+K~GQf z`E%y}eg+*Ko#V$D{{Cg?>f&;DcMlI&pEix##)hZ4nYpiz@5~uiD=VwZms$S(V>o}F z!N|yP(88Z}fa}C?t#EOcT3=9mctaPtmXUfb}`0<0GrG-UBMMYIr zRY5^PTU*=2#KhIr)y~e&!otGA!2uYCz~GJCTDKEO@stGl1v7X(|M$$}>4%kXWIi4^ zQ*{(5&Y0xw?!wT)DhpD}S>O>_%)nr>2ZR|n1iugl3bL1Y`ns||;Ns(D&|C7+K?kVE z(9^{+MB{wvMfTuB4g#zXS_NEc$`&^{GHXQ$Twk}*d`-uV>f>BVzyCju?XXhXck;=k z?`NN;sk`tkZ)(!en|k8o@@*cf>Rrcty$S<3o{B0>4PCKLF#GLxfmbFot4vNTy_o*J zj?;J7I@SfIudBM#ZU{_Kh*M#iP`^#+7k^Z}Lj5uEErPcW3ockJ9Gf`t-3ngYkQ$yN z9DDDy*U2&P^CixxRbH%PlqPgcUCq$cmigJuot0){6^3&C`kV(ooqBbvifPZpJ0c2t zhH+kp#PUD$9oSucvR0bUhttBws?Wp1GWF-m&7ZqZYjdyrsiw=gy*%fR{fWc!x(y#y z@@DExxUl%di<{3~Zs{1g>!o%5`5Smp{O0rts~7MuP06qF_`CJ!|E#NNE2n#u-hOg^ z@80@|(wWD-=bNl`-1J(i9~iI!lvVtU&J%W50 z7^>757#dm_7=8hT8eT9klo~KFyh>nTu$sZZAYL$MSD+0817lc#Plzi}fwi@@g@uK& zu`!UewY3Fut*oqoY$GEhPbA>&?d{>=0TD1XGz7{rG%zsKG4O`-8W=P;KktNZuEUAR$w&u0Vr%hc51^=rm2Ul_iAWqkFDL0nwO$w}+! zQ$|Ti2|GKx`SS((`xzo56@UC-0ESFNgoddpYe|Xd;>A2NGBT#7rfzO-z;FYGp`#-( zIvCCzQQZfmgi3<^f*Hae{(TTKW7_?{|DG@Tp%eLRscPG?r$AZ8ByV>Yh7ML)4Prw#(omh`i+KNIHe_CDPyn)mS4ECzw= zm9uz1a@{zxHusKaQG)pQZ>kDzzJZJ~4;~829k(nf>PoM4@b!N1=h3HEzub;+-@CVv z<=xHC%u^X`l7YzGl6tZ`{Z9+CThH@kM>>ad;hje$LbjYo5QTXnti?>U07Z8 ztbg9$t-CV4wO{{d4sFj~ek^a>JYcM-mbgZgq$HN4S|t~y0x1R~14A=iLjzqylMq8= zD+2>76EkfCBOoJK@3ErERK(!v>gTe~DWM4f!E0>0 diff --git a/public/novnc/app/images/icons/novnc-48x48.png b/public/novnc/app/images/icons/novnc-48x48.png deleted file mode 100644 index f24cd6cc939a073d4ba178995eac2854d6acf607..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1397 zcmZ`%X;2eJ6n;raKq8kF5+WghoB|;SNjMV&2?-ZR7zzS%nNUSxKoB*6qUqZH>W}Wsd*AnVzxVCTzAa0LlUP|& zECIkOS}ICJ$aohPIF#k1t1cigQwn2+0O!6Yu4Lj-?V^w-#sYle382{z@Ct2do&e;d z#%Vb~NDTlf=VEb$567_V#vkbQFulot;FJ2`VbA z>+8u^u9$1JYdkzWluGx>NxV$v_2vy2jSv<_lSurGMl6Seqtoe1<=Tk}{Moa_6DM#C z2BWog&GF+vrBW9cAvxJ;^=hI>B$7ycV`4}tDc&9)gvv_n%nV4SZX6D$uFmG_RZLfx z)qw-x=H^DBkXu^`A=BZtx`!@SpkCqhbE;^xJ5-_ z{QUeB3TJ}>TwPshG@4K-M1u3$BNDMmey7f z&}YnP2f)&!MZzTMtvdtCl>Uut3HnOiL5tGK=B)I=pYUn7o1VyoRt|oryp8P+Gruj4 z-z>KpiO)Y&8_llh=FL_A+VS|)+=gR^ZLjZ0t8IuBO>HT{8)T{WwGIvKfA$P^9{fnA zC~I6Q(rn?HYM$H4B!3)PNQe*Qd{;@}=r;B*fQhCHmd@9)>>FaM(+fR5bz!dO^i5qC zZqcR^&WKLjnY}KI(l(Jt=}r%mgcJ;_tmn z@W%!&?k&$<9o$&R8J1m(z&IGTE)T9rtBaVK5ZHE9`%6;CDt^E=F^ZEHx*G3I)@6wD z&cgltIOp>f)iCham;8?VrS;tNPDYg->^bAwXo0gH8c^(R`<=So)WfeD`J!V{s&_VI zOv6yg>*D)4U{lpJdi+M=!zTi{4p&aS^&WUV>(73xXDgqLE`yHf45ayqA8)73PjjsG zudFT=-L@Gz6s|W?FBRL&32b-b3zsZtuQhKw&GkO~;_`q*YfW{Fj?f~Om%h4I-&Q&| z{y9;9Lo%>0_ipBpjh;PG-I4+6P0PkH%uUePDfaUw7O*Qh%`Lsj8?v2V!jvTG0(H?*EsEEJI{ZZwzYy7uyF7|dUV=ri`%cpBArq7++JU^Mesq^HG zc}+l^*TrGlx(kM>ZG2nRj%@n}?EIH?s)CnlPu`FrK7Pm1(T}rC*vq|siG7aEz34M} zsKpRtlF+F$jr@xf`S5i_U@f|ip-oWx++&$|1^w(L=Y{G6E#Q3wSNO`Xb>9! diff --git a/public/novnc/app/images/icons/novnc-60x60.png b/public/novnc/app/images/icons/novnc-60x60.png deleted file mode 100644 index 06b0d609a0f7c45b1ad0481debf061affd6a2a17..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1932 zcmZ{lc~FyC62LnbfrN01L3ea+x{3(`zY|v?d}7YGDM(M-{VLcnF?jC_nN z-7MA9)nOlC@-d_Y65F0lP9{?YRBIb+yb6!ofkSC+ZEYbPKnCCeSSPHdt0ja2#G@v` z*w`2q12JG^WMpM!1uj5$q2n#^24M#J`ueC5Gcz-41XWK@4;3$!N>QgWnateT9Os0y zkXz^_=s^LXnpr{?D8RtL02Rz;vkiOm$nLoZeoo4<9hj&dy@7 z^|NQ#@p0hsShlwO>1pEJ9O&q%@%jAWVXVD9XK;}G>#uO*hPJ1tXMVm>PLBGaL$tU! zpwsDBuHc12>v!)ky}eLe42g+=wm>A}KYD~;Tm+HGTq@-)E#V$M1PVoCWd$lLiG_ub zoJ>D_7=QZodLJLKu&^j8ftxq6`T3OYZsLazAe9>V`m#GaK}$fV*US7U#?_OwYQ(IcXPEA2?FR8DOJTO41ucwK{yum@->C-wH z8MKZL2oHzuZuRJBaC5V2Yr~b5!T$XkZEe6{FicELOifMEiIvOcuCA_IwyfQqA=U3a zNHDU3{X;#ZtTt3P{K32`M1a&6Svh< z2E_yuFJx#ay|!lpushc#=H>%q2Ly>(-hLj$DUuci_|dER0RT9mx6C!vtN+0xh3cLQ zmAIUe<$kckeV2G_8%?b@ygG((zLOf9aQ(T`#4h3a0qtCq_^TZq9XnbuicZgCHr~v9 zx0-^PFU+O6Ym;xHtgGIZ$39+JsS9c78mSK}_(fVq{qlCv&3uFKcbkyJfXy|WzlfU# zuy|#Bcp~OvWY}N1suErkbLHFxjKTS;W)09`qW5HCrPy9sGDcpix}QW7g*VUk%@&miDy0>cJJNi+ z8rt_HRW(Qg`%9^Hj9WU(zCGL1J9CaXdG=(cPvi;6Svmo!;#hNDWD2*6)2kTj`dVLi zTQN0VQ55b=FB*-F`1Y#gK;uLD`JMeU|1{RIe-iu6=e+p^LCTGh9gkl=)V-SO*sPi> zKT&;Y$kxA3OO;Dn98JEq*!{z2V$);gvW}^AM(?0woVZk_Ii(`~I3<-vEmf4LUR)yQ z9gs}_wM6xfcD#SYP;=vfL*A9Bn% zX^+%$pW6F+$#BVCY-NaCekCQZskN3c>MpO`7c!EjQTuI^=b6HN!GF8Io_FJ9)5XD* z_xDzdwlcYqzvY~L^ZIr}Ml|=urBf?MnpvAUmFH9?-_!mezxwnUn@K3HLl=sf*y``pMcb~gguFS|9?P+FMbjQ vY*_n3NLpf6Zfu4Ea&vQed%jA}jE_|+cxf5CYZkW{At&(m@Ryx;i~0Ir{{7o^ diff --git a/public/novnc/app/images/icons/novnc-64x64.png b/public/novnc/app/images/icons/novnc-64x64.png deleted file mode 100644 index 6d0fb34181b419fc0188004002d01c69227c60cb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1946 zcmZ`)cT|&E7Qdtk0YYdILQ4>cl!Sx?2%&{QfPe-BB8Uvq%c4UIO<0Y{Dx!>Mb_B)2 zGILaB071@K1hEVPx&js$5J!d@SDJ-UDT5&F^LXZu{bS#G@7?;l@80kH&iRf7OZ_y7 zR3ZRqO8k97kQ9DCs#tWNYdQ2930$(*b}xXYlj>`+cx2P!{X@0`?6(3?lmL80F2xK$ z4jW)D20(BIU~@)w+YUDX%-!H^VPcdZ5C~jcT%4Socsw3bTwPt=+}!wlzO%FQ7n957 zIyg8WCkmltM+qqE=;(-0lE0R}zyDwAXBiL>@Wn)^FQG3ts>b1PP+9smIw$~} zgEf#Eu$)-h3EG$<3@L`h>E`C<`uh6nG3wgd+NeEpA{i~zwugs@P$=~A@$vKX!|cc4^YN%L(jF27 z0fj`~I(+y5QmILAFF__FCnZ@DiE77>lc%OYB-#=iYth#SOr{N&%X#*U=;Z|#78VyS z5Qm1)Xx43QYH4Xig~IgOH6W2lTrRt%h0xiF5sSsa!Pcv*@bV?FSX-v2@wT?WU@!y% zR$m_`H&M}sw&XY(GiKPCnr_<`*FU$c8iND3kzt2u`xy}wRrm$a&qY5 z;h(8kQK1tRW%}R&Av@bRI@+qS5noiK{}w zh}^)Che$)g_s0BMtC%}7%t`+A>FX57=iY7C|5#la|0QQ_%h@S|Wq#uKlXr5XtErC= zL?tfJ&j(8JCjQ7!%kbZY2*sNCd{neZ&nA&`lU%Z0ylH|+(ggc~rHnQJY^ub^D=eb( z-m~TKfndE&f24RBvdEe9{dJiaW!hrg)iS*wKI-Y=^%iYxij`fr#Un<`V`a+d*5xtf znDSt3wCL=W^5!?IcMGLKb9eUF!Wp-~%z%oeEc#ySbTgOv z-S^8|gA;otEAQXFj<(rzwsB%={a*aVvB0spX zVOVx~`nUJ6VG`qkPr8`N=_@&1m&#R4F^exrf_ryvfJQDnX*uH5b7|kT0pU$@S>I+VZf;+_qh^?7zo%un959R%7) zSW&&iDpbcptBiL{-}$$9mj3h;c`wMmv|={q7$s(gZR{Z`pyyb8Lp^tdZ*@EWF#EBh z>4n3NpEY8$>$7k#v>995eYzx>B2`9E6YL7D`5`BfdzvdkYQyOkb^O&3W1#Oy z)WeY!&7W9wcWhlytgdp3sZ6m|UVjsk@^9%#^J=>AN2CgZLrHFX{VlDzLN9g2$>-1i@xF1g z=E=XtFMkvjZoF!lA6hQ90?!lo6AG#mc#+qq2QoAMS!C8%`IJyyXB=nUqEPK17(6`D z9@K%Gi7zE)tTZ+V_Ef3MIU9i$3|Z8tn~h_hbeT&~xU&4<@P8zZ4X4ysejLBPGUv#D z{QGRt0{M5hpRMbMi>jlR^zRMdlUyBEc08?WrQi3E&J9*nHZ1n6XU|7whSW9O%3pey z-TI*#b2WeQWAoLa`E`{x;mz}dMrBIf(1+B?9!;uKE!}bhaD%%W>}r2Oe=@L?izDO- zvGPPgd{!b7;K1fMF*$4|hZn}-3fOD`&)JskfRx2u56k`surEC!HL2kL14?jmCj>D3 t{6c7Yk~}XqD-rVY@>r=~r)9^-W+bxGvy#7m>qbRMAQ4M_8bmS0{{?}E<-Gs^ diff --git a/public/novnc/app/images/icons/novnc-72x72.png b/public/novnc/app/images/icons/novnc-72x72.png deleted file mode 100644 index 23163a22d06001a508d01b83be1942d4e1032bf9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2699 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 T1zQ>d^di7O*F>jQ+bQlpIb%xa diff --git a/public/novnc/app/images/icons/novnc-96x96.png b/public/novnc/app/images/icons/novnc-96x96.png deleted file mode 100644 index 1a77c53f4cb2d2bf63c86f654ce044fde3dac1aa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2351 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 literal 0 HcmV?d00001 diff --git a/public/novnc/app/images/icons/novnc-ios-152.png b/public/novnc/app/images/icons/novnc-ios-152.png new file mode 100644 index 0000000000000000000000000000000000000000..60b2bcef533e2030e2bb8d92bbbdf010d89f2d4f GIT binary patch literal 4190 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 JT=lypi-cL*%GNG~DMq5={U(y<`j@sI-2B}*(J zARr|n&3m8c{r&U%OMwGKR;o(!AO)W@x#nPykRYEKc>=&K?SHFT{{9Ilgm@{dD?rxC=_v8pb1q=E z0C2}qSzcDp7rV3I{PLcCBV_+ZQczNIabY%Q1~ube{$reYih~0d8C^t!##2bb%P}Fv zd-@zp)ybig&8>n72!Yn-yrIJq2e0TVuy^kelS)WPL)VUaA4Mr|t#rF*oK~659blRF zjsw2OrguwLSA(-xS7e#n+ODyTv^8J(OC3rH?tN)%YkNSv9KLh{5LezMOhZQCsW&`D zbDHEJ?v`t1lNfM~hV#%kbkdRvEtCE~3^T{V!IjCtmBZ>r!zKUoCPdcc?@W1AYxDSz z*yOw!8{XbsGT(nFz$&|q=j`obDD7KNH$D$u>q^>s^Hbr6N?vC(VQ*c$rPC@+beY4&$LO**W$$`k z&hXkb+udPIu-MslzW?KAf<-IRUF&1YA;Tg(R^Go8*_bG)$lvHVp2(jfI0KKYmK^yE z#U9d!=y4K1U4=9qX@rdZiL;`9Z=0o2rV4H3H2Px+tL3#sEp81WvdHZTTWcOxSg%K(a5jGOP8p|IW{}%I6?OA1xct@AL52D zgiHi8$TcdU#YOX_q2Y}dS9qw+m%TJ#ze?R2OL&DC%nzocqkHKG*U<>X4>VO$f&@It z%J+`7s#y`3eL3Borh)0*{A){J(Z30AL0<{M5(?NniwP)z}sU~eY_;=b|79P%Zer@T==(R%o-+$e*kbc{Gon>vOa>L(S zhKVdgZck~>?|BsImdwckXrP{t&&z-#6aO!R^)8a953& z%ss7s(B*Q|GSrG+eS=q{O7Sr9O_Fe;fWB!qdR)KhLJf5#cNGj=7anOP+sfx^*UONW z^Y`li@<0Y_6**p@m_4HIaqeaS8JSJu_)G1T_w0HZrpt`vAQ2+(*&TcAonB=3lo5NY zD2Sx@)H>U4>4_wlPd=iJc$#zB4HG<hY~wDJHI#!tcNH*gB=yT&qcg{Ee}SeF-gVG zVD}+$=kBT34S;X171CIb?nPp8VKVn{hrIS2QlZR_BsKPp@$KJB8)- zpw!8C+S35X_s(7#P_2&Kgm~u1hx4AWkD0@kj*k74SH?}vDagxH$+xyBH}VhtHUshE z)cwo!?Ya~QWVbH^C44MArgUHmq00>nNd}fz;YC5@RLq^82;oEXoh|dEv z6bkix8`s(#5_mD}w-s-2b@kA&x$b~ZTGW#yeFqW|eCz7DVtI4I|CQZQ>LhV+LSOXq_{x z)*QYmFW$%#=a!_PQ_Jkq?dY9C7yYVNo=nXsW?a_U{_?oLMQl!K>EMqv0|`H&xVE;VURuxFNu@AAjsu$ zMSkCb@BAd)-#?|Vf7yHf++iu*_HUW`g!=6+Y1fW(+cNB}WSTfwT{!K4ta~Tqp?2_g z8~;M*b_x<-~gWhjyrK@|D z_j1E<2Ihf(=)bGe^XZ%QzEr$Nc64?~8gwydCv}>Aoz-I97k#<};ma+wZ`JJrfHzim zF8-K{nAlkWVu4LZ4H(SO@2juE2V(mxF)8~Ie5dX^X%hw;f#qaYoM1PX#{8AqCLi{(oh}J?lU17HvDUsXbG8JSP*bJRbhNERiW|ovF8us z{cUse&=OZ~8*1)>`S#)s@@o1rA3f`^A3SEd})U z^>w@Y$ehyR{!7J<15a@xA}m}QbK^gOCA}x*OVMvr6Oki58ilmhq)}%YKm#+u1RaIvV}3EO2$zF@G%J zVqjn}WZ>9-DX@QBVPH0_D!iqrH8jmwG%@RwWV{lMCv~hxsjI8|ysWkgAJR*HI~w#F zGvAyeF)Cui%#!VHlBLsw0i{*5Vr@}8O(LwC>ZNBEzMo$&&&lBswu&PzA!zb6;|>qZ zRa)juSyCgDoaymu5>xF=f0fDcf!e}wWcehuJ-P3CDjp~2FUPuj5?=jZqO6o+nlr5K zoQ@@kEGHSn{<)}O^5(VMGv~)S&R!Xy9xgNnxeyAMl$m33_HBA z&@75xG`mt}_~hWe&B$i3Kjh{rKX97R;}M4)IxK4CWFVhD^7Ou4Gfge(@q_qFgKzPc zcd64FXS6Q36>jY;ojG!?db#DHpSgrJw>Ae9szzjRQO+|*<`Q)HZO53cblAm7+(YUy z&G-orP^cliT3pC|!;#J8tqi3qIleC4@J z-h{QglFlY%HL1y`i>)2Kad&CcVRQ9-OV<~1>0Caw4VY}ETDUfibGfU7$tQ;b9n}o@ z&OkEH>+Q3X`aX*fn$0if^|j)Rv!*bDOCH%nHQjq{%;4d$k8l3=#wG;V5TWKR15y+3 z!d!WZ6kByLaUW>6-7n(woTBhMZU-B79~}+YMU5DAUtjgUa4R&P*Vm3aw?iX3k{1v& z_$~z;ZLTc)`&|a^$6G_eL2P~wq|(y8s49=D9v9lFB2@y}FSaQBeMI&xPuRg5nZnW)_8i=Kls%&U_LW>JK|=`!@M*Jn2P496BN;Mk;%#FummX&!o+80s58I1 z224qT;??yZ1Dx!!fGicSu#SG&$c|_pe1bao(j7|0AZKsSly&~$;G62PtNRPvI>lBu zHgm`uAKc)WAexA~zB};A($6s|*5J!f%ey@ox_VkW=Siu`+}!{kO+wH?0!COZ{_f?ci4bB-rzD zA5?j5rrL!Wd2@yEzYs2R3M|AXv6GZ=qbn82DIyY8W~)_yHX@v12Xc{4lBWkxW9GOq zih(QLRAtFS_IB(wb;%W$!RHhCd=@L`DUy_Ii&6E9RrY37nmZm2+_l}uzQsK*NwZAe z95?4FfwTmLY8o0=US5;QvkuaX|9GB9%k)a!z{@!7SMzIX?+X__uj|WK8BYSS$voGf zMu&;&rJ|Y3zgvUZNC=KyUg;SS#2t24{}YGW6H`DVNiEji?q6e|WHXD&&+nB?E{d?n zr}*d`g&#MzQrGDecm8V@VD*0~U2yjC8}4l(K82oZl&DV39BHZWmMD&V6%7$tDwH97 zndv^HYiMqsCF-hgZ*g%#_-!~oS^6)(AXYK&lB0&)T>O7RY@GGR@T(sl;wBA9%O20J zuKbF{MKh(s0vFd|@HnTXWiF3r(5Z||Cv$Fm{w|B1op_3huPg1;DOp%TqL@|1HJA^} zO`Ca9l+p%~k2j7sp>*^!OY@DM=WcnFuwC6kJsSbW4Dr=P`$V;Yk7?L&&y9cbmEx_e z+eBgCTVBl_>&%v|8I`mY+^-u=Q{&9_uh-V5xvxBY6GRuI0Ad$5IFw6NOQo|$n5SKA zjYOvOxM@hgu6Y#ft{9VnVIBE>9wU~Pmc}dE$z(-_sq}c&Y|3C=;0kOCY16oz^%SpP zbJUhK=jZ3ID_cAH4K=k=8+mswBTc)=wX&n+@X#SVYr3RDm7lnx%e|c*jdttD!sToi4pvbmC7C}noVZ5w{_)T{@y%c0?N>O_cJ@eF=@?8opTB1(sWkkyWBEY=WbP>3 z85$bOEOPh&rkVwgmOiBzm)9sIMJWX;f^IAL$jIGiXii#3%M%sMEV9h?c8G5}on6I9 z1?J$o;+}gPS2RVn?er*J+J~uU&5WW>Wn=G}MoSpYWB}esJayNV!!xQlMP`9-;ALeV zp-nTAL1fHBDs)RrV(i)Tsn?W(2s9_xP}cHEzOGLWqQWW^3T2A(vr^=4*2*?`lr<7* z$h*FIDBvWEHj4=T8>;u*+n*sm8&UD#GuMNAl>S@q9yM!c8<4Q7c-U!Wi}x|eiQTKa z%EX!}pw~Z&%=+f~T!GN_w_MS08#pkV1(Xr%YaMfiW@9V}l^FVWV{mJWv#WsN`-w6nQLUE-V(=o7#wdHK)9*yN=A z{kk`JruMP$XYUA%l2h9Co$q#&&^SOGm#5lnj0yzOySPT5Qxn|kvAPoq4S^H&G7!jy zK#2!MKhP80ddCjqliS+3x%K_*!7IkAf*|le42PG3p_h%Nm#u`ghb>3|0e%4i7+e4* zAfN{qlHeDV5ES9z=a=B;mo(*g@m~NJHycO0SN}Ia1^Bc90sv(N4f*n?7NP$Gj5_ue literal 0 HcmV?d00001 diff --git a/public/novnc/app/images/icons/novnc-ios-40.png b/public/novnc/app/images/icons/novnc-ios-40.png new file mode 100644 index 0000000000000000000000000000000000000000..cf14894daf12da14c536b26101fac933d47ddffe GIT binary patch literal 1245 zcmZ{iYfMuI6vxl)6G|}`ETyG9N?i+WX}N7Fr7b9ZT-x%oXj@QVwx#8v4nZpswndqA zgQ9_D(I9BFjx2*QhmYZ=(TwSIb2C#y6eQ6&l!-Vs(`7nQceii*un+(9JO7jXb3UBY zWiPcvGZGj85N)%XR}oDAM-gPAp5|NE5unr=N(=x;d!iOSRKoLXtgA`@+C%_5IspD6 zMmz2SY{dZXy8(240P#)xPnG2Ykm&Ye2d+>klu9M7i3U4>+)Nf|1Tu{*vM~~Q8(~>k zDwT@5i3+U%P5>8>>?EFp2h{+Z0k(liB+AOlg7qK}2;_1(%fUiLXp}oDDJe;#(FldY zn6wzChnbj|sMTt7b93VyaZ9vI(hO;gdIoHV{QP{rnGZF<=kswKk132H=}C-I1_>j{ zWHOeHMJ^yCI6}%Jp*$4BFss#Sv)Ps}Uw-IN?CaOy^Rb(o1$*~K1_CJ;E>P8K`HdU2 z>(|M0x%lka=*2~lNF-*ndBqC(!-vS!6kwP%D+`;Mp*?y8%a)-nEvX|TRD}YYo~BMt zg4fHtcoBw&VfSw6?q1r`64lw6xNRFUI}1HMjK)T8RTW*M$()@fEi8aqEz;}d3k&2s zcOW^L<@M6X$0==XXmxc&TN}5hhko!N+v7p<@}yH!NKQ_UN~O4ZmHhlU7!1ipMbc-_ zkckOMN=mR;MDz2=lP6%erEV=x%>dcDPBF&d4;lel|ar34Ufk;Obx?*F};Fp*8xHCqT4 z{i}th!qr4W57Wsr9^9NCJ7`a~N-?Qd z;t;sP%8)Ux)~Qyjw?=0$)Mc#o?eG3P^7+modwlWz`JJo;P6BtJufM;4U!|M&vGBv& zvJLp4aYLt(SE-Mx z_lCb4`||SG8S>%Y@bS-1)5D|J8Mai@y6vw!x|sGL^CQvB`zwzg&_y#psT4@}D~@m9 zORY*hw{hmNc1!AbJx|^}((AeTj<%^!UJ)@TU;AMGq)!}?QQ5frFdARs@%!;z-|lgp z7iSz7l!hNjeqjkFZzLMc-!9f~X+rqZdhr5L8eFnzVK@;`yMHu)NA WTmL^$2nT*80${^S%}0#x_x=V(2bBr{ literal 0 HcmV?d00001 diff --git a/public/novnc/app/images/icons/novnc-ios-58.png b/public/novnc/app/images/icons/novnc-ios-58.png new file mode 100644 index 0000000000000000000000000000000000000000..f6dfbebd2e233bfec83a4d557187eec9e660d0ed GIT binary patch literal 1602 zcmZ{iX;hO}8pofPm_(LLXtNxNq{$D$z~STV6>%ZT?hz_xL{C%D2t_a zX^T@p#!j(NK|w4>+)yhmgM=bic1554C+_jjLrp8q}f zKKFkxEyYOlVtD}o&1}-A6U6@)i%G;hl6{p$V9{nxvId~D+IxN@naG2)OzFu0C7}T2 z?*YsbTjfsxico;38wl;+00OpucGao|@Mug+vKeGD8HQnO8=JL;#a_)8Xa#}<0ecOb zujfZbMk0Fv7>;WhQ9*?I`C_n`a z1|uLKz&p_!ih#vpk&DQ%68!!BX*wE{$&8AMl1L@ z`Tch=7!1wLw7EIZY6Gp-@VPnU=ux2)>Tm>wg!snA#nsgKuU@^>Zs(Vm69t^QIyiNT{PD+LD_5>msiaSyApQLy z7K<=UHazS#F+sGHQd>)0EVQR*k<;l{S-C7X*Qc~JC^r{^gM)EAVra<2ZfDBn=$$(x zmkXp)epHlne4Kpe4*2GfeQ7m|{)e8-NUvNGZ*memS28+Ux1ct}WJA7yHa=sCyj z_W1sLqTV+rhci5k%*-I`*YnhBq_~(~SQw<$`XnWVXJ+D;FMD=$Kury8)vD06G+{)9 z$LZ6H8ykJBR<_wpR;wv*y|qFjp$LUSrBa%f=ELVx;^OEQ3nej;YBEvze11$!j8?1F zXf!I7O0U-w?)^Joqphch85WGY1nml;7INS|9g}HCG;3%rGAIjt%%??0NvTBcJgl@x5JN za9_mkklx!f**)EwX`{bp)+qCI{!;^U$ENEi_w1c@-d-!=H>-aYrVhwV=e34y+HlXq zeQzFrx8<}%VL8vLOYf$%Wh6dry7;oS*LdUU0nZaf&xY$uNTcZ54?f*{!K!aQ@~!-| zSzf>jd6iT9?bCti_=^Y5$9#0C`lR@sL*0xP8Gb<#e{pIRJ3e`!u^{*EuIE*b#-xj2w!!(OgH>JEe?4KRoZD-e`~Co)Ac_(2;NI2K|C6+^x*yFmv_t?+(_uhVnj(N#t4j8;mc=3PzOK z+-rEa^oq|~&uMF+BH-ta_EzzcPuQ28&y+9j@%LF?WItNi5BWLavrEQE&f1P$gIHA!W=Ff(b`n!%H^4ARs;>kK{XF_r>b=o-d za>2DQf9vko`*xOf{ZdB1+AW-)dDcY{>zZT7nj~BEv#t&G73VE|)WWx?$t895%(_}l z+F!~eA{7f8Kdff*vAFy->(6bGKbB^xhivoJoxyGYu=fiuT}jVqoAHbAWwqR-r~gP8 zmG3aT?XYijWaC+d*#rPXF-$DO#299i$#FCik5r0K6h~3jI)3IK1O?mdc{$EM7g(U- PF(Cl6Aw}Pz-B9^oj2c9P literal 0 HcmV?d00001 diff --git a/public/novnc/app/images/icons/novnc-ios-60.png b/public/novnc/app/images/icons/novnc-ios-60.png new file mode 100644 index 0000000000000000000000000000000000000000..8cda29530c8fc0a3ee7499be716f90e22b2c4fc8 GIT binary patch literal 1595 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 literal 0 HcmV?d00001 diff --git a/public/novnc/app/images/icons/novnc-ios-87.png b/public/novnc/app/images/icons/novnc-ios-87.png new file mode 100644 index 0000000000000000000000000000000000000000..4377d874b18d965cb430f80dc1f97d3e8f0daff0 GIT binary patch literal 2708 zcmbW3c{tQv8^?cx3`Ptg)mUQ;M#k93q=?57GM19D%!Dk-HWV_9EsQ5>2qB)3p0rq| zgh_Tv?^vG59!AK%3|X?g)BE51$NSHFU)Oy;=RW6r&$+I1|8d_bwl-!*1x^Y80C3d8 z+{BKd8&9+Y2)!*VuwuU#}V;gDlH7Z@=d@CTV+C2?5%A5Us5bK*?Ep%&Jr;2A*) zA#Q~yztp@q$Kowaj2yy;m-6rU!1|>-8oa+*+)~Q(q>o^SOI=6ah}82&emQmV;ljCG z6;THhsF8}f>6?4dsbZg})Hm|-tva%n#kTjqn)S;cc`$e`0blE4J}#aSkjpHF`&JDx z7w@ddEG#cxcc;@e8P*1c4Iy0x`lJ~Ky@CB}ze`_kX=w>3`Gd=G88q4{$(m1=d!6=w z!Uk$A7`z!*gg{xIjC?6=VgXvn!BH~wR^1GzIz%vB7MW0@d<5ef8JS@EWYqb&@q?Pv zQm6UolW_*+xn*%vF+x2c3~siXG3kF>zBNf~tEGEAXm0@I#u9h84+zzTd~T>FMjsd|OCB@G0dh@0-)! z$hSWAbxy1S^wQ#o{JVDbpDXx=Jut7+CtTI>J{Q}0-q}^F4t>kLSL^0>Z6q=I#c46q z6Ri2fwVB^PZ_^Wsl-F+U2W5GI5dTv1IU4FwJ`*vatGT9;)rTBBsEFN8u1i%1dFH=N{(%gTuv9s-;5{iB zLUB=~{3BS(Ga*PR2jww&)21w6IKlnPcUykCJ-2F(M)F3gPE(*A3s9xcnFmMc6XbD82cw0 zUfvvu3*YQd1^ViJ*=%;QiTq$K$@v&DcF^zRUX-7^U`vTrm?$j?VD zoK?aJBh|INL&}H#F^5vy^QzxnF5X%H1TBc155dKShB3v%$c8*}wW z%AJ*aUYDu^j$knPdUtNoSs+^nF~;p@a6h*gsR}2*^}BED>qX&8W~&S33yx=_NOb@4 zOZk9XglYZ#6It9i9PYv8E4C7z1cDmIKs|o%vGm}(?j$LL861v?3nky)LN3=_u*|$v zz!SZbNMO(0eLo<|1;f@*9vdhH9YlFF#VO=HIi(AvcVw{#Xz95pcLLL%q@a#q^#y+mw@_{xV5(4yXkb+@fW`WNNp(Fxh0HTk2Av4YK9 zAF&^E&zpPhV|yPl8yg$7osa>{R%HohYgnxw%;0h!0*`DYbz8%K#(Onihp^_Jl`D19 zcos*%gG)c(?+g*3gN)n9x(Xg94G;2dY^76X6*Es6LC@nJc{zwbA^*I3Y&2lU`|XV@ zJaGG;;)%!I^Us?mVj)o*A}H-Pm97vqHH{y0zHQqzQQg(m2q9Pv7gfdIzVNGqqodcp z)x#P#TaXt#&6nsE`|aCR9wI;7>h61ZyU?t-PPQAd5;@D#%G}kty$Ys@ z!7xQ)K&9t;Y&Lr;JuG)j9VX-v9^?_!a;6Sdea`kE2H^A7nXvIFkG9+6J5YhdiVEAo{ohGxh8PX{+oxEKwek?? zZT`!5R^Aph#E89m1yNRRFE-)NjIym$9AiR;Az2(u@r6r`yx=uux;dTW3vp3!Auz|Hvs=mlctO zP^v(rU@*P03R(8zMe2MDRF^ve>V(WH8W<7`*0i;^FCOlKlh`sSgj@nNx#;hq z<*+HHb+fI=uSfiEfhF*GmLmWx MOl?eF8x!LG4f?<8TL1t6 literal 0 HcmV?d00001 diff --git a/public/novnc/app/images/icons/novnc-ios-icon.svg b/public/novnc/app/images/icons/novnc-ios-icon.svg new file mode 100644 index 00000000..009452ac --- /dev/null +++ b/public/novnc/app/images/icons/novnc-ios-icon.svg @@ -0,0 +1,183 @@ + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/novnc/app/images/icons/novnc.ico b/public/novnc/app/images/icons/novnc.ico new file mode 100644 index 0000000000000000000000000000000000000000..c3bc58e389396b7beb0fb0a97386e2af3604b386 GIT binary patch literal 310566 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 s.trim()).join(" ").trim(); + return self.get(str); + } + function translateAttribute(elem, attr) { - const str = self.get(elem.getAttribute(attr)); + const str = translateString(elem.getAttribute(attr)); elem.setAttribute(attr, str); } function translateTextNode(node) { - const str = self.get(node.data.trim()); + const str = translateString(node.data); node.data = str; } diff --git a/public/novnc/app/styles/base.css b/public/novnc/app/styles/base.css index fd78b79c..06e736a9 100644 --- a/public/novnc/app/styles/base.css +++ b/public/novnc/app/styles/base.css @@ -19,10 +19,23 @@ * 10000: Max (used for polyfills) */ +/* + * State variables (set on :root): + * + * noVNC_loading: Page is still loading + * noVNC_connecting: Connecting to server + * noVNC_reconnecting: Re-establishing a connection + * noVNC_connected: Connected to server (most common state) + * noVNC_disconnecting: Disconnecting from server + */ + +:root { + font-family: sans-serif; +} + body { margin:0; padding:0; - font-family: Helvetica; /*Background image with light grey curve.*/ background-color:#494949; background-repeat:no-repeat; @@ -78,144 +91,6 @@ html { 50% { box-shadow: 60px 10px 0 rgba(255, 255, 255, 0); width: 10px; } } -/* ---------------------------------------- - * Input Elements - * ---------------------------------------- - */ - -input:not([type]), -input[type=date], -input[type=datetime-local], -input[type=email], -input[type=month], -input[type=number], -input[type=password], -input[type=search], -input[type=tel], -input[type=text], -input[type=time], -input[type=url], -input[type=week], -textarea { - /* Disable default rendering */ - -webkit-appearance: none; - -moz-appearance: none; - background: none; - - margin: 2px; - padding: 2px; - border: 1px solid rgb(192, 192, 192); - border-radius: 5px; - color: black; - background: linear-gradient(to top, rgb(255, 255, 255) 80%, rgb(240, 240, 240)); -} - -input[type=button], -input[type=color], -input[type=reset], -input[type=submit], -select { - /* Disable default rendering */ - -webkit-appearance: none; - -moz-appearance: none; - background: none; - - margin: 2px; - padding: 2px; - border: 1px solid rgb(192, 192, 192); - border-bottom-width: 2px; - border-radius: 5px; - color: black; - background: linear-gradient(to top, rgb(255, 255, 255), rgb(240, 240, 240)); - - /* This avoids it jumping around when :active */ - vertical-align: middle; -} - -input[type=button], -input[type=color], -input[type=reset], -input[type=submit] { - padding-left: 20px; - padding-right: 20px; -} - -option { - color: black; - background: white; -} - -input:not([type]):focus, -input[type=button]:focus, -input[type=color]:focus, -input[type=date]:focus, -input[type=datetime-local]:focus, -input[type=email]:focus, -input[type=month]:focus, -input[type=number]:focus, -input[type=password]:focus, -input[type=reset]:focus, -input[type=search]:focus, -input[type=submit]:focus, -input[type=tel]:focus, -input[type=text]:focus, -input[type=time]:focus, -input[type=url]:focus, -input[type=week]:focus, -select:focus, -textarea:focus { - box-shadow: 0px 0px 3px rgba(74, 144, 217, 0.5); - border-color: rgb(74, 144, 217); - outline: none; -} - -input[type=button]::-moz-focus-inner, -input[type=color]::-moz-focus-inner, -input[type=reset]::-moz-focus-inner, -input[type=submit]::-moz-focus-inner { - border: none; -} - -input:not([type]):disabled, -input[type=button]:disabled, -input[type=color]:disabled, -input[type=date]:disabled, -input[type=datetime-local]:disabled, -input[type=email]:disabled, -input[type=month]:disabled, -input[type=number]:disabled, -input[type=password]:disabled, -input[type=reset]:disabled, -input[type=search]:disabled, -input[type=submit]:disabled, -input[type=tel]:disabled, -input[type=text]:disabled, -input[type=time]:disabled, -input[type=url]:disabled, -input[type=week]:disabled, -select:disabled, -textarea:disabled { - color: rgb(128, 128, 128); - background: rgb(240, 240, 240); -} - -input[type=button]:active, -input[type=color]:active, -input[type=reset]:active, -input[type=submit]:active, -select:active { - border-bottom-width: 1px; - margin-top: 3px; -} - -:root:not(.noVNC_touch) input[type=button]:hover:not(:disabled), -:root:not(.noVNC_touch) input[type=color]:hover:not(:disabled), -:root:not(.noVNC_touch) input[type=reset]:hover:not(:disabled), -:root:not(.noVNC_touch) input[type=submit]:hover:not(:disabled), -:root:not(.noVNC_touch) select:hover:not(:disabled) { - background: linear-gradient(to top, rgb(255, 255, 255), rgb(250, 250, 250)); -} - /* ---------------------------------------- * WebKit centering hacks * ---------------------------------------- @@ -242,13 +117,15 @@ select:active { pointer-events: auto; } .noVNC_vcenter { - display: flex; + display: flex !important; flex-direction: column; justify-content: center; position: fixed; top: 0; left: 0; height: 100%; + margin: 0 !important; + padding: 0 !important; pointer-events: none; } .noVNC_vcenter > * { @@ -272,13 +149,20 @@ select:active { #noVNC_fallback_error { z-index: 1000; visibility: hidden; + /* Put a dark background in front of everything but the error, + and don't let mouse events pass through */ + background: rgba(0, 0, 0, 0.8); + pointer-events: all; } #noVNC_fallback_error.noVNC_open { visibility: visible; } #noVNC_fallback_error > div { - max-width: 90%; + max-width: calc(100vw - 30px - 30px); + max-height: calc(100vh - 30px - 30px); + overflow: auto; + padding: 15px; transition: 0.5s ease-in-out; @@ -317,7 +201,6 @@ select:active { } #noVNC_fallback_error .noVNC_stack { - max-height: 50vh; padding: 10px; margin: 10px; font-size: 0.8em; @@ -361,6 +244,9 @@ select:active { background-color: rgb(110, 132, 163); border-radius: 0 10px 10px 0; + user-select: none; + -webkit-user-select: none; + -webkit-touch-callout: none; /* Disable iOS image long-press popup */ } #noVNC_control_bar.noVNC_open { box-shadow: 6px 6px 0px rgba(0, 0, 0, 0.5); @@ -433,38 +319,50 @@ select:active { .noVNC_right #noVNC_control_bar.noVNC_open #noVNC_control_bar_handle:after { transform: none; } +/* Larger touch area for the handle, used when a touch screen is available */ #noVNC_control_bar_handle div { position: absolute; right: -35px; top: 0; width: 50px; - height: 50px; -} -:root:not(.noVNC_touch) #noVNC_control_bar_handle div { + height: 100%; display: none; } +@media (any-pointer: coarse) { + #noVNC_control_bar_handle div { + display: initial; + } +} .noVNC_right #noVNC_control_bar_handle div { left: -35px; right: auto; } -#noVNC_control_bar .noVNC_scroll { +#noVNC_control_bar > .noVNC_scroll { max-height: 100vh; /* Chrome is buggy with 100% */ overflow-x: hidden; overflow-y: auto; - padding: 0 10px 0 5px; + padding: 0 10px; } -.noVNC_right #noVNC_control_bar .noVNC_scroll { - padding: 0 5px 0 10px; + +#noVNC_control_bar > .noVNC_scroll > * { + display: block; + margin: 10px auto; } /* Control bar hint */ -#noVNC_control_bar_hint { +#noVNC_hint_anchor { position: fixed; - left: calc(100vw - 50px); + right: -50px; + left: auto; +} +#noVNC_control_bar_anchor.noVNC_right + #noVNC_hint_anchor { + left: -50px; right: auto; - top: 50%; - transform: translateY(-50%) scale(0); +} +#noVNC_control_bar_hint { + position: relative; + transform: scale(0); width: 100px; height: 50%; max-height: 600px; @@ -477,61 +375,65 @@ select:active { border-radius: 10px; transition-delay: 0s; } -#noVNC_control_bar_anchor.noVNC_right #noVNC_control_bar_hint{ - left: auto; - right: calc(100vw - 50px); -} #noVNC_control_bar_hint.noVNC_active { visibility: visible; opacity: 1; transition-delay: 0.2s; - transform: translateY(-50%) scale(1); + transform: scale(1); +} +#noVNC_control_bar_hint.noVNC_notransition { + transition: none !important; } -/* General button style */ -.noVNC_button { - display: block; +/* Control bar buttons */ +#noVNC_control_bar .noVNC_button { padding: 4px 4px; - margin: 10px 0; vertical-align: middle; border:1px solid rgba(255, 255, 255, 0.2); border-radius: 6px; + background-color: transparent; + background-image: unset; /* we don't want the gradiant from input.css */ } -.noVNC_button.noVNC_selected { +#noVNC_control_bar .noVNC_button.noVNC_selected { border-color: rgba(0, 0, 0, 0.8); - background: rgba(0, 0, 0, 0.5); + background-color: rgba(0, 0, 0, 0.5); } -.noVNC_button:disabled { - opacity: 0.4; +#noVNC_control_bar .noVNC_button.noVNC_selected:not(:disabled):hover { + border-color: rgba(0, 0, 0, 0.4); + background-color: rgba(0, 0, 0, 0.2); } -.noVNC_button:focus { - outline: none; +#noVNC_control_bar .noVNC_button:not(:disabled):hover { + background-color: rgba(255, 255, 255, 0.2); } -.noVNC_button:active { +#noVNC_control_bar .noVNC_button:not(:disabled):active { padding-top: 5px; padding-bottom: 3px; } -/* Android browsers don't properly update hover state if touch events - * are intercepted, but focus should be safe to display */ -:root:not(.noVNC_touch) .noVNC_button.noVNC_selected:hover, -.noVNC_button.noVNC_selected:focus { - border-color: rgba(0, 0, 0, 0.4); - background: rgba(0, 0, 0, 0.2); +#noVNC_control_bar .noVNC_button.noVNC_hidden { + display: none !important; } -:root:not(.noVNC_touch) .noVNC_button:hover, -.noVNC_button:focus { - background: rgba(255, 255, 255, 0.2); -} -.noVNC_button.noVNC_hidden { - display: none; + +/* Android browsers don't properly update hover state if touch events are + * intercepted, like they are when clicking on the remote screen. */ +@media (any-pointer: coarse) { + #noVNC_control_bar .noVNC_button:not(:disabled):hover { + background-color: transparent; + } + #noVNC_control_bar .noVNC_button.noVNC_selected:not(:disabled):hover { + border-color: rgba(0, 0, 0, 0.8); + background-color: rgba(0, 0, 0, 0.5); + } } + /* Panels */ .noVNC_panel { transform: translateX(25px); transition: 0.5s ease-in-out; + box-sizing: border-box; /* so max-width don't have to care about padding */ + max-width: calc(100vw - 75px - 25px); /* minus left and right margins */ max-height: 100vh; /* Chrome is buggy with 100% */ overflow-x: hidden; overflow-y: auto; @@ -563,6 +465,17 @@ select:active { transform: translateX(-75px); } +.noVNC_panel > * { + display: block; + margin: 10px auto; +} +.noVNC_panel > *:first-child { + margin-top: 0 !important; +} +.noVNC_panel > *:last-child { + margin-bottom: 0 !important; +} + .noVNC_panel hr { border: none; border-top: 1px solid rgb(192, 192, 192); @@ -571,6 +484,11 @@ select:active { .noVNC_panel label { display: block; white-space: nowrap; + margin: 5px; +} + +.noVNC_panel li { + margin: 5px; } .noVNC_panel .noVNC_heading { @@ -581,7 +499,6 @@ select:active { padding-right: 8px; color: white; font-size: 20px; - margin-bottom: 10px; white-space: nowrap; } .noVNC_panel .noVNC_heading img { @@ -622,6 +539,12 @@ select:active { font-size: 13px; } +.noVNC_logo + hr { + /* Remove all but top border */ + border: none; + border-top: 1px solid rgba(255, 255, 255, 0.2); +} + :root:not(.noVNC_connected) #noVNC_view_drag_button { display: none; } @@ -630,8 +553,15 @@ select:active { :root:not(.noVNC_connected) #noVNC_mobile_buttons { display: none; } -:root:not(.noVNC_touch) #noVNC_mobile_buttons { - display: none; +@media not all and (any-pointer: coarse) { + /* FIXME: The button for the virtual keyboard is the only button in this + group of "mobile buttons". It is bad to assume that no touch + devices have physical keyboards available. Hopefully we can get + a media query for this: + https://github.com/w3c/csswg-drafts/issues/3871 */ + :root.noVNC_connected #noVNC_mobile_buttons { + display: none; + } } /* Extra manual keys */ @@ -642,7 +572,7 @@ select:active { #noVNC_modifiers { background-color: rgb(92, 92, 92); border: none; - padding: 0 10px; + padding: 10px; } /* Shutdown/Reboot */ @@ -663,13 +593,16 @@ select:active { :root:not(.noVNC_connected) #noVNC_clipboard_button { display: none; } -#noVNC_clipboard { - /* Full screen, minus padding and left and right margins */ - max-width: calc(100vw - 2*15px - 75px - 25px); -} #noVNC_clipboard_text { - width: 500px; + width: 360px; + min-width: 150px; + height: 160px; + min-height: 70px; + + box-sizing: border-box; max-width: 100%; + /* minus approximate height of title, height of subtitle, and margin */ + max-height: calc(100vh - 10em - 25px); } /* Settings */ @@ -677,7 +610,6 @@ select:active { } #noVNC_settings ul { list-style: none; - margin: 0px; padding: 0px; } #noVNC_setting_port { @@ -803,36 +735,32 @@ select:active { font-size: calc(25vw - 30px); } } -#noVNC_connect_button { - cursor: pointer; +#noVNC_connect_dlg div { + padding: 12px; - padding: 10px; - - color: white; background-color: rgb(110, 132, 163); border-radius: 12px; - text-align: center; font-size: 20px; box-shadow: 6px 6px 0px rgba(0, 0, 0, 0.5); } -#noVNC_connect_button div { - margin: 2px; +#noVNC_connect_button { + width: 100%; padding: 5px 30px; - border: 1px solid rgb(83, 99, 122); - border-bottom-width: 2px; + + cursor: pointer; + + border-color: rgb(83, 99, 122); border-radius: 5px; + background: linear-gradient(to top, rgb(110, 132, 163), rgb(99, 119, 147)); + color: white; /* This avoids it jumping around when :active */ vertical-align: middle; } -#noVNC_connect_button div:active { - border-bottom-width: 1px; - margin-top: 3px; -} -:root:not(.noVNC_touch) #noVNC_connect_button div:hover { +#noVNC_connect_button:hover { background: linear-gradient(to top, rgb(110, 132, 163), rgb(105, 125, 155)); } @@ -841,6 +769,23 @@ select:active { height: 1.3em; } +/* ---------------------------------------- + * Server verification Dialog + * ---------------------------------------- + */ + +#noVNC_verify_server_dlg { + position: relative; + + transform: translateY(-50px); +} +#noVNC_verify_server_dlg.noVNC_open { + transform: translateY(0); +} +#noVNC_fingerprint_block { + margin: 10px; +} + /* ---------------------------------------- * Password Dialog * ---------------------------------------- @@ -854,12 +799,8 @@ select:active { #noVNC_credentials_dlg.noVNC_open { transform: translateY(0); } -#noVNC_credentials_dlg ul { - list-style: none; - margin: 0px; - padding: 0px; -} -.noVNC_hidden { +#noVNC_username_block.noVNC_hidden, +#noVNC_password_block.noVNC_hidden { display: none; } @@ -871,7 +812,11 @@ select:active { /* Transition screen */ #noVNC_transition { - display: none; + transition: 0.5s ease-in-out; + + display: flex; + opacity: 0; + visibility: hidden; position: fixed; top: 0; @@ -892,7 +837,8 @@ select:active { :root.noVNC_connecting #noVNC_transition, :root.noVNC_disconnecting #noVNC_transition, :root.noVNC_reconnecting #noVNC_transition { - display: flex; + opacity: 1; + visibility: visible; } :root:not(.noVNC_reconnecting) #noVNC_cancel_reconnect_button { display: none; @@ -908,6 +854,12 @@ select:active { background-color: #313131; border-bottom-right-radius: 800px 600px; /*border-top-left-radius: 800px 600px;*/ + + /* If selection isn't disabled, long-pressing stuff in the sidebar + can accidentally select the container or the canvas. This can + happen when attempting to move the handle. */ + user-select: none; + -webkit-user-select: none; } #noVNC_keyboardinput { diff --git a/public/novnc/app/styles/input.css b/public/novnc/app/styles/input.css new file mode 100644 index 00000000..eaf083c7 --- /dev/null +++ b/public/novnc/app/styles/input.css @@ -0,0 +1,281 @@ +/* + * noVNC general input element CSS + * Copyright (C) 2022 The noVNC Authors + * noVNC is licensed under the MPL 2.0 (see LICENSE.txt) + * This file is licensed under the 2-Clause BSD license (see LICENSE.txt). + */ + +/* + * Common for all inputs + */ +input, input::file-selector-button, button, select, textarea { + /* Respect standard font settings */ + font: inherit; + + /* Disable default rendering */ + appearance: none; + background: none; + + padding: 5px; + border: 1px solid rgb(192, 192, 192); + border-radius: 5px; + color: black; + --bg-gradient: linear-gradient(to top, rgb(255, 255, 255) 80%, rgb(240, 240, 240)); + background-image: var(--bg-gradient); +} + +/* + * Buttons + */ +input[type=button], +input[type=color], +input[type=image], +input[type=reset], +input[type=submit], +input::file-selector-button, +button, +select { + border-bottom-width: 2px; + + /* This avoids it jumping around when :active */ + vertical-align: middle; + margin-top: 0; + + padding-left: 20px; + padding-right: 20px; + + /* Disable Chrome's touch tap highlight */ + -webkit-tap-highlight-color: transparent; +} + +/* + * Select dropdowns + */ +select { + --select-arrow: url('data:image/svg+xml;utf8, \ + \ + \ + '); + background-image: var(--select-arrow), var(--bg-gradient); + background-position: calc(100% - 7px), left top; + background-repeat: no-repeat; + padding-right: calc(2*7px + 8px); + padding-left: 7px; +} +/* FIXME: :active isn't set when the Clipboard +

+ Edit clipboard content in the textarea below. +

-
- - + title="Full Screen">
+
+ Settings +
    -
  • - Settings -
  • @@ -263,39 +247,69 @@
-
- +
+
+
+
+
- -
- Connect -
+ +
+ +
+ +
+
+
+ Server identity +
+
+ The server has provided the following identifying information: +
+
+ Fingerprint: + +
+
+ Please verify that the information is correct and press + "Approve". Otherwise press "Reject". +
+
+ + +
+
+
+
-
    -
  • - - -
  • -
  • - - -
  • -
  • - -
  • -
+
+ Credentials +
+
+ + +
+
+ + +
+
+ +