From 7bad9baaafc0b878e654b3bf68f15f7ba2e36ba6 Mon Sep 17 00:00:00 2001 From: johni0702 Date: Sun, 27 Nov 2016 17:43:59 +0100 Subject: [PATCH] Initial commit --- .gitignore | 54 ++ README.md | 91 ++++ app/favicon/android-chrome-192x192.png | Bin 0 -> 14901 bytes app/favicon/android-chrome-512x512.png | Bin 0 -> 42054 bytes app/favicon/apple-touch-icon.png | Bin 0 -> 14250 bytes app/favicon/browserconfig.xml | 9 + app/favicon/favicon-16x16.png | Bin 0 -> 1047 bytes app/favicon/favicon-32x32.png | Bin 0 -> 1870 bytes app/favicon/favicon.ico | Bin 0 -> 15086 bytes app/favicon/manifest.json | 17 + app/favicon/mstile-144x144.png | Bin 0 -> 11542 bytes app/favicon/mstile-150x150.png | Bin 0 -> 10998 bytes app/favicon/mstile-310x150.png | Bin 0 -> 11765 bytes app/favicon/mstile-310x310.png | Bin 0 -> 23502 bytes app/favicon/mstile-70x70.png | Bin 0 -> 7465 bytes app/favicon/safari-pinned-tab.svg | 44 ++ app/index.html | 221 ++++++++ app/index.js | 512 ++++++++++++++++++ package.json | 48 ++ themes/MetroMumbleLight/loading.css | 33 ++ themes/MetroMumbleLight/main.css | 252 +++++++++ .../svg/applications-internet.svg | 23 + .../svg/audio-input-microphone-muted.svg | 16 + .../svg/audio-input-microphone.svg | 16 + .../svg/audio-output-deafened.svg | 15 + themes/MetroMumbleLight/svg/audio-output.svg | 30 + themes/MetroMumbleLight/svg/authenticated.svg | 7 + themes/MetroMumbleLight/svg/branch_closed.svg | 7 + themes/MetroMumbleLight/svg/branch_open.svg | 7 + themes/MetroMumbleLight/svg/channel.svg | 6 + .../MetroMumbleLight/svg/channel_active.svg | 6 + .../MetroMumbleLight/svg/channel_linked.svg | 23 + themes/MetroMumbleLight/svg/comment.svg | 13 + themes/MetroMumbleLight/svg/comment_seen.svg | 9 + themes/MetroMumbleLight/svg/config_basic.svg | 24 + themes/MetroMumbleLight/svg/deafened_self.svg | 15 + .../MetroMumbleLight/svg/deafened_server.svg | 15 + .../MetroMumbleLight/svg/default_avatar.svg | 16 + themes/MetroMumbleLight/svg/filter.svg | 35 ++ themes/MetroMumbleLight/svg/filter_off.svg | 35 ++ themes/MetroMumbleLight/svg/filter_on.svg | 22 + .../svg/handle_horizontal.svg | 11 + .../MetroMumbleLight/svg/handle_vertical.svg | 11 + .../MetroMumbleLight/svg/information_icon.svg | 13 + .../MetroMumbleLight/svg/layout_classic.svg | 38 ++ themes/MetroMumbleLight/svg/layout_custom.svg | 50 ++ themes/MetroMumbleLight/svg/layout_hybrid.svg | 38 ++ .../MetroMumbleLight/svg/layout_stacked.svg | 40 ++ themes/MetroMumbleLight/svg/media-record.svg | 12 + themes/MetroMumbleLight/svg/mumble.svg | 37 ++ themes/MetroMumbleLight/svg/muted_local.svg | 13 + themes/MetroMumbleLight/svg/muted_self.svg | 15 + themes/MetroMumbleLight/svg/muted_server.svg | 15 + .../MetroMumbleLight/svg/muted_suppressed.svg | 15 + .../MetroMumbleLight/svg/priority_speaker.svg | 29 + themes/MetroMumbleLight/svg/self_comment.svg | 14 + themes/MetroMumbleLight/svg/source-code.svg | 3 + themes/MetroMumbleLight/svg/talking_alt.svg | 13 + themes/MetroMumbleLight/svg/talking_off.svg | 14 + themes/MetroMumbleLight/svg/talking_on.svg | 14 + .../MetroMumbleLight/svg/talking_whisper.svg | 13 + .../MetroMumbleLight/svg/toolbar-comment.svg | 13 + webpack.config.js | 93 ++++ 63 files changed, 2135 insertions(+) create mode 100644 .gitignore create mode 100644 README.md create mode 100644 app/favicon/android-chrome-192x192.png create mode 100644 app/favicon/android-chrome-512x512.png create mode 100644 app/favicon/apple-touch-icon.png create mode 100644 app/favicon/browserconfig.xml create mode 100644 app/favicon/favicon-16x16.png create mode 100644 app/favicon/favicon-32x32.png create mode 100644 app/favicon/favicon.ico create mode 100644 app/favicon/manifest.json create mode 100644 app/favicon/mstile-144x144.png create mode 100644 app/favicon/mstile-150x150.png create mode 100644 app/favicon/mstile-310x150.png create mode 100644 app/favicon/mstile-310x310.png create mode 100644 app/favicon/mstile-70x70.png create mode 100644 app/favicon/safari-pinned-tab.svg create mode 100644 app/index.html create mode 100644 app/index.js create mode 100644 package.json create mode 100644 themes/MetroMumbleLight/loading.css create mode 100644 themes/MetroMumbleLight/main.css create mode 100644 themes/MetroMumbleLight/svg/applications-internet.svg create mode 100644 themes/MetroMumbleLight/svg/audio-input-microphone-muted.svg create mode 100644 themes/MetroMumbleLight/svg/audio-input-microphone.svg create mode 100644 themes/MetroMumbleLight/svg/audio-output-deafened.svg create mode 100644 themes/MetroMumbleLight/svg/audio-output.svg create mode 100644 themes/MetroMumbleLight/svg/authenticated.svg create mode 100644 themes/MetroMumbleLight/svg/branch_closed.svg create mode 100644 themes/MetroMumbleLight/svg/branch_open.svg create mode 100644 themes/MetroMumbleLight/svg/channel.svg create mode 100644 themes/MetroMumbleLight/svg/channel_active.svg create mode 100644 themes/MetroMumbleLight/svg/channel_linked.svg create mode 100644 themes/MetroMumbleLight/svg/comment.svg create mode 100644 themes/MetroMumbleLight/svg/comment_seen.svg create mode 100644 themes/MetroMumbleLight/svg/config_basic.svg create mode 100644 themes/MetroMumbleLight/svg/deafened_self.svg create mode 100644 themes/MetroMumbleLight/svg/deafened_server.svg create mode 100644 themes/MetroMumbleLight/svg/default_avatar.svg create mode 100644 themes/MetroMumbleLight/svg/filter.svg create mode 100644 themes/MetroMumbleLight/svg/filter_off.svg create mode 100644 themes/MetroMumbleLight/svg/filter_on.svg create mode 100644 themes/MetroMumbleLight/svg/handle_horizontal.svg create mode 100644 themes/MetroMumbleLight/svg/handle_vertical.svg create mode 100644 themes/MetroMumbleLight/svg/information_icon.svg create mode 100644 themes/MetroMumbleLight/svg/layout_classic.svg create mode 100644 themes/MetroMumbleLight/svg/layout_custom.svg create mode 100644 themes/MetroMumbleLight/svg/layout_hybrid.svg create mode 100644 themes/MetroMumbleLight/svg/layout_stacked.svg create mode 100644 themes/MetroMumbleLight/svg/media-record.svg create mode 100644 themes/MetroMumbleLight/svg/mumble.svg create mode 100644 themes/MetroMumbleLight/svg/muted_local.svg create mode 100644 themes/MetroMumbleLight/svg/muted_self.svg create mode 100644 themes/MetroMumbleLight/svg/muted_server.svg create mode 100644 themes/MetroMumbleLight/svg/muted_suppressed.svg create mode 100644 themes/MetroMumbleLight/svg/priority_speaker.svg create mode 100644 themes/MetroMumbleLight/svg/self_comment.svg create mode 100644 themes/MetroMumbleLight/svg/source-code.svg create mode 100644 themes/MetroMumbleLight/svg/talking_alt.svg create mode 100644 themes/MetroMumbleLight/svg/talking_off.svg create mode 100644 themes/MetroMumbleLight/svg/talking_on.svg create mode 100644 themes/MetroMumbleLight/svg/talking_whisper.svg create mode 100644 themes/MetroMumbleLight/svg/toolbar-comment.svg create mode 100644 webpack.config.js diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..7864099 --- /dev/null +++ b/.gitignore @@ -0,0 +1,54 @@ +dist + +# Created by https://www.gitignore.io/api/node + +### Node ### +# Logs +logs +*.log +npm-debug.log* + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (http://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules +jspm_packages + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + + diff --git a/README.md b/README.md new file mode 100644 index 0000000..b532172 --- /dev/null +++ b/README.md @@ -0,0 +1,91 @@ +# mumble-web + +mumble-web is an HTML5 [Mumble] client for use in modern browsers. + +A live demo is running [here](https://voice.johni0702.de/?address=voice.johni0702.de&port=443/demo). + +The Mumble protocol uses TCP for control and UDP for voice. +Running in a browser, both are unavailable to this client. +Instead Websockets are used for all communications. + +libopus and libsamplerate, compiled to JS via emscripten, are used for audio decoding. +Therefore, at the moment only the Opus codec is supported. + +Quite a few features, most noticeably voice activity detection and all +administrative functionallity, are still missing. + +### Installing + +#### Download +mumble-web can either be installed directly from npm with `npm install -g mumble-web` +or from git: + +``` +git clone https://github.com/johni0702/mumble-web +cd mumble-web +npm install +npm run build +``` + +The npm version is prebuilt and ready to use whereas the git version allows you +to e.g. customize the theme before building it. + +Either way you will end up with a `dist` folder that contains the static page. + +#### Setup +At the time of writing this there do not seem to be any Mumble servers +which natively support Websockets. To use this client with any standard mumble +server, websockify must be set up (preferably on the same machine that the +Mumble server is running on). + +You can install websockify via `npm install -g websockify` or via your package +manager `apt install websockify`. + +There are two basic ways you can use websockify with mumble-web: +- Standalone, use websockify for both, websockets and serving static files +- Proxied, let your favorite web server serve static files and proxy websocket connections to websockify + +##### Standalone +This is the simplest but at the same time least flexible configuration. +``` +websockify --cert=mycert.crt --key=mykey.key --ssl-only --ssl-target --web=path/to/dist 443 mumbleserver:64738 +``` + +##### Proxied +This configuration allows you to run websockify on a machine that already has +another webserver running. +``` +websockify --ssl-target 64737 mumbleserver:64738 +``` + +A sample configuration for nginx that allows access to mumble-web at +`https://voice.example.com/` and connecting at `wss://voice.example.com/demo` +(similar to the demo server) looks like this: +``` +server { + listen 443 ssl; + server_name voice.example.com; + ssl_certificate /etc/letsencrypt/live/voice.example.com/fullchain.pem; + ssl_certificate_key /etc/letsencrypt/live/voice.example.com/privkey.pem; + + location / { + root /path/to/dist; + } + location /mumble { + proxy_pass http://websockify:64737; + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection $connection_upgrade; + } +} + +map $http_upgrade $connection_upgrade { + default upgrade; + '' close; +} +``` + +### License +ISC + +[Mumble]: https://wiki.mumble.info/wiki/Main_Page diff --git a/app/favicon/android-chrome-192x192.png b/app/favicon/android-chrome-192x192.png new file mode 100644 index 0000000000000000000000000000000000000000..a08d9920338af2d95796202fd354f36a7e7466ca GIT binary patch literal 14901 zcmZ{LbySpZ)a?Mn5CVdLG@^t^cc;?QNJ}@;-KkO%g1`?+MWv)m=@1YR5CQ2D32CJJ zp83|d?ppVcyIeSnVcwYMIcJ}9_TF!drn({_J~ci9fgn^?lGBFQHuMiJ3jWugcEW)d zq@ApqECNxPc?6O)&1~PGN4lq1bG|J6y-&$*FyJXGA(UAk5-;IfKG2NCj62hH(1Lx#Oj8jnO|FTgxaoyW=1YFSels@u;EwFy`}cA2-n<*j=>2|i!Rr~NoGUIVk~_BE zgzMRN@5p~ZXTURu@oSYT?(K6ulAEij^Ir_HmXySVauZkBg~;MC73JhLteNh)8&8vv zJG5_E@nyt*;H)}d)#C_Z`m!9_Gc?7IQC0Fjjl8$POd*1#t-H#+tE|1c=pRjtRrr)O zHaP5|z0yWT*qc&2LKGIAm=^;dUvgm~tC-g+LdM%$P*+!XWMo9s#6->6xs+Y42s`0N z(!E2aWG~hqRwFsYmSIA0KfdNqb^cBs(>I%H)Vs_mX=oG#9&NoVC`ftzTE)vtKub$Y zPC?-Y6;+HvzI%~+$*78&8lj+|;3HjKEkncJ-jut&eSM3^yNiF8mR{!OCiYr8Ztd!{ z>Ai=`Nc^y({Eo{j!x;VcKcxo|+kbGzLP8Y%$z8{9fDAz}U~9KZ)f@ zw8*Fg?1^`Gcf(y=N?7mRvpCwCQA&Qwq?{$<{&tsh4&zBUVKP%HvY|P=+cgbCPHP0q zDqMWyY7HYfIhm5rIy!Q`(d+Mx)eiwrtL+BGD1V=Aw-yu@Dt)%bltTT&xb-mE+M_Yq z=fxZ?R`gpDGMb?|{4ZEut3Sfm%Ni5h7rS}g=4FtwxL*9hn1*S+0|U$XiBiA&xLe;f zG#Gt;gz1F%rJTI)oHzAXLmX?HO6GUZn2xz@>Ff}J}%ubGrn!(DRg-DP>TiK=jAOigSL`X-1logzAr9s25nZg<%j-@jWflDd2OP zZwos(8!6H`-*gSN+FR~_m7ZSj9}2-GJne=hJnP5EsPMuq=4B$SXvf-U$wY%UyN^*3 zA_vFx6;to@^0f%s%^V1grke&t`{c-Q8kbMujav4=F{-EYG+mzwC zG9dVg{^rf+rsa1zI0#Dh9vT=>R&g-)@#&SM78kSOMA{2bqn9}+(!a`GZG?9ekSF~t+9kas?9Wv4fZ;2L_OC2_FS&0=kkvNja=L9 z^1{OT+A-6`_vxm;Hzum<2CiX3dU&mk#QgUkrKP21^otix)mw0@>bX+=L-~rlnf+cH z<1e>cuX0SA15Vy=i~DStfB%p7KUEe;vDM*%>jBLz{VR@7p1>st>;|$HrayZcaNI=P zVPwpZ@aL>eC=*B`+`U_t%1P zc%&=>>#f{eT+2)8X0{VmHm_1sF@6;3+)YkNQC3m;_w~YoFJrtlR2mx_n}Cuh3}U8x zH2cw?IAnZAHb8c7o2R>vo456EA3l%er=m4AV~L zBd;4Yc-Cr2!`%~eu;)6<_KCa~8hV2J%~?zA?*AWKXs9U=j@|JJG}p?|hDne8o}_R_K7}M!|EMauclutaJH?+Z9tcW1o18N{?~$1bdj}B#yrr0nv~RLlWww{ z>ib%iMLkPI*3>lTf!Z3Z8h6X_9jopa4!fVLs`%2lOujAmXOh?23k%h*;^Y!VPz-Sa z9;^>y(c=hYWMq8L;E($F@uTgwwD%erzumx}&g;@h22s(B@84Awk1Ol7^!0lZ=)?=l z%L_hz`fq&PAUD3td&~s=-lvVKz9tvnuT|e6%D(pYx>Js#!=Afo2eUcw$YuAlS;)z= zt~d(MKVL}@>^lTIj{=iWvV*WUEErd)=j#Un{>$GpI^HR#7?BME09pNfr~E1{&60<5 zb*{D5j9{eHxL(`Xc-<4Fq^9=1urQj}sylDgF<4JSRu&_Qi0*A!8Bw-+4}60R>Clk4 zvPUJO-@4;z4C|aSocJ=3<}_}ZOv>`bY=`_2uhCgXgGL`tI2lR_DMc#p-eM9@D26o2-(VYDX=~cqakJQ( z{>))ek*B-;t$I+Z4=(n@u@+tY09eF>jxIUEG#Hgr!vtlC&nL^_^Qi0es(@J#vD03| zY9CFT8@ha`2~amV4BFr;;a$H@Q8D3~JJsr}dApEOhOFyhxMW-O{=S!9xhbdWe>`tS z?S7S;4W6Iu4cQAszg5!KHt#vUPx$^OG91?DWoqg(jy`k_ZftDm{=bNLL?()$8X2}j+QxkAgjp( zRfRNM!^SY70cxk;TG0t50ZG`j0_j!=*6kTNE&|=izkk`s0;vh%L?zLfE=W+PSl%A6*?#l(x$#U;r z@8;-_*RQG7v&H1Kv`A7@2^oV^l9Q(=xrv?FG%YM{`}_N=g#b!3aB{}i)CkmPVH+A6 z2JQ6=J5AQa*z~3GdM%?(Mi?^1CriQ7H@?L}P)SDO3!o zQC5GxzT}cT+N__e@>o*w5~B+~-FM)@YQ&7|>Ht`Vrpi-d3Sj8;a5D~S5R_Gv=7DKw zW6J0+-`y?>D;`Q#F0Ky%2Fb}c5@<#5tE(q4KAueVyMt|EVS&a@DD5v5Zw0@~bZwbn zK6?UL{iUmGcSJ|SVQqaqJ?`y)tja%wT8VN=B?Mo2+|pq{qxT*760P zdRZH?Ffu;y=FpIr$2JSS5bR03b@$Gl2poF9Fq1}~m+9#}X`IIYNr$#52454x%bS0x zNN=$+kWDM%76u!%H>@G;4smg(k55!obYrqM4whDT8;ToaQBe`>H-O^WKTk%*1nb^p zW=aAS)qi(me?JNLNI7lR4pf{&eej05wA7b=EfVLt&&dhEP*vzv$lLtEM?!x+U3N?6Km@NMgdvA1Yjvgesy) zj5H0s@GdScejMVmGvCf(*7CTb$6XC;mIz6Tj95>@2vt>8weE@)hT2!o#{G3|^a&zU z_B-9JuPO%N-oOj|Slij5XTn0a<3a4|H=!$Tfz}13Nov z&d=st`Gbz#;5&(UDVYRl+3XGVabHQVt@jt7zDoNQ4_%ym%xbo60ZD7SD}njZp@`Qd z#P8_#c!dQPEFcpTQ{M33$022Pb!q44K^>i){t#jpIo&^uH6JmUQBDIGI!%9i33Uf@ zW63eX6oKv}5)e=?cmUnb4?mPHgPc(na_t-fC-a=6jd6*)Wniu@WxD9Y2UJS0 z9P~7>NuHHl8Vl^#lL|IHn-faP8g9rEvvP9k>PEgrZH`yYEQZX6UR`|4iC_x)q%hBp zx5IRpWb68O1|JKW)dr5VRH}`&l5(Gt0dw8(Y2Crc@setw_Mzw;0JajJa{$HJk-%X|DR8MRbgQufbB*!U?o zRaTJC``Oa z(8q&+e3NzMzRD%S0je~Oa7DdEXbMYrGsJO2a+%8@vssxR3! z^?b93?=@gDi||TI&pmNIx!4XJEY!+xtLr(Qo2|iVx`(lh(b?#|-kl|y7%+NfAv86R zp!eW$>~(Qw=21e|xU-#9oUfkTsSU|#X+(u~2%FB!7}68d%_I0cTYF;XX3a9W-!qI2 zsww)h^#h;g)`OYHj&T!CjJASni5-ZT7(ADezb$X5oWwf@>eWn4>O?qcunLRTn~)+4 zqb)Q9Bocey`Jo}A@|#xo47WoxiWm{ue^AS0Ild$76x@7vqs`1P)5g%Ho>!s&_MJPJ zrF!d>f%MWDIFAY0E+aVV=YyH>$#@ zRO(^#D&8yQ2g)HOC|K43yC`gIXmktzL{UGDKa_}2Brw;|y8Ot1D{;QlDV2#qZt0_l z{qGCHr$_`K6+$Z!Zz zdxZu~2mc7+>)RX};#JL+>MY2)o}%20)QsknkhrgFqW7fJP*u%@PE78k|Jon83FXe^ zL4Eyn%OAzc`9G8Jg7iOV)M8p$(Dga=#le&^$NueY;GHSy| zr90-GgK;NVj3_orWfaFH53{JG&l7LH@dgb|Ct&)kwX`V*?Th12d&G5Ee@_o#NP)W3 zc!EFn#_!Jgf{m6FjvzrEarA2$N#DG85A^d*{oZ1VK1Ap*^qD+~=M6dcJ3Uy(`9VRW zR{Y#Cw(6Gr>3^2Tr&deD6XYxFJ4jywm-oSrzh6yG+_eUK} zmK8%E*a|HXXLuW-Fm&J3`EdL`GJat_q41uE=Lstnov(V;6#s4kxx4asDdKu|(IN z>CaN3KNXCO#5$jwTq92W*2SAnB||2U<@111v%0l7LDW{tJ7WMaDYvh4re7B6i;3f`EPVz5~K@y6PEzvF1DWqBraEneDtOWOAl!?RB+4<81J zp_Z0x!s7oMEoQ0{YS{MBHOuWT-+%dXDDKUJC`_hthtWV7``*(3hvl}C?b~p=6?Xr& zN^N(pxI)F-%(FX)?^In~U4&~oSfSbJ9||LLXl1szvg|z*vTdiHmYAKmFf9Fi$i3v- zdX_yWzDz`hsh7E->uytwN3S#e>>H7QnXCnm;Fpizzh1^Z(xq%O!#NRMgb&lDn+DvI z!54b%Oj?%kEt2?nV(!+ZE3=Q1TEzGsTaqhtSXHky2gmoNx_dYJa{`A~7Ryv=!_5)) zGWpjVJVG680aC9nk6NYH&orbjkcAHk^Oa-*14wccK6CV`3(1%>Aq4V9#U~r; zbx{>GH|iY)s1*{L=&u4pULPrair8b%6D(fSVhS^wlJ(!ZI1)Z_B4|1P=`-Iz?XB=v zF(BaeU=MAUbC_Fh`~zc~KVR2Vw?m&8ce@$iFy|oVj(xj`RZsEh3DS3KIs-bBwY9ZJ zl2esdiqIDWXY?C}OVjPaF|*MAh0Z8mN&>F+u__K79i2$Mk^?2oLRp4*bL?z!Uj;Jx z3eFet&YQD!lx<~~FYpZPs5@`Tn!|yT=6h>}yTR;^KVr$*n`XCR>?5k6TV8R@{MOf3 zR9?Ok%U-s_Dw`qBmh>9yC3YiC_T$Coe>y};>KfI^sUz?P&*DYN;(C2YN{nwddo z{TK9!a`{6Qe!G@+P7}XtTR2Rc{sRmnCLwv_m{@Ho5Xi5nV~mT!L)2N@`=lQlh;s_Z z{bFh>4ZECt5|uv|h4cMvapR>XKdC5pS4rtQ`pr>Cn1}Sqac@#lDJRlP0sv3@OgVov zK1%Dk2)Q^I^It0}_+c-Qu$N@wocLRaPS~Ys%Bsv~Iy-(|=4YJgt%2GxBAg#n4u*nQ zs^Rn6q36$_XDe%1V}qVwcco$b=lg3j4c_@>WeE<$TXz5c^ah{j%>VUh7?c{>avgO|8R? z6TFhqpYK{u1Nf!ScO-$UxZa(3t0zx3{a+V_88JP*x~=VpVjcI7dL@fqep7f`mo%R8 zOEvz*m=F1}P}cYEYMRb!A4aGB8c{?5#p(5#%Osv}Ux3;j8v1D%$k6jxN5_3#ySQ+* z*vCP;UBDu^ZB2`!Ij^7Z9~w4z6*2aC|1Y~OFYms;I)qx;fRIM>P|C`(=wV?H=#;{e z5-R|n>45c8F6psJg9f8kK108%e;b^*5irjNo$vOT=l}Jko*QPvf+S@Q-+CZZY2J=0 zC4~+6;6cjpUW*We1jgF2c1PW3U0zLNS%NG&K z&g|pth6XYGYuAPxYdH+7zHD3R!6#K!U(7{pPj)avE?e-1NiTjM9v;qsv2|}{aAjwq z6F8GG=WR4635?O7KYvicl}4q&(J8L^YMdGYbp$Y2VZiY{M>6x{M~?FNXY9^ew5V(` z?|(+kIUO<2GbP>1d&w9<3&^tr4PbSo$g{0kdN$8jV=V+C;xkZ~KoinR1sRO?#yHCo zBWsK}1Da>8baifrz;Kd#xqlbD6p%C<@ijxge_Y;{TR3m z?}+2(TKJIZ(qS)v9^^)&dQNUY7DM}fd2z;@p*ro+$Jul^xsIVcQZniY{rt+87}6}s zK%pNG7G<7j=gFfeMcf#|>weP&GESS|?9_zBE0~WK>rT7(&_R?Y&`W+p^O+f{#Z!O! zfo|=Bu2aPQH?oR@-*Z`2uk7*Pr5S^@Zj;KCt!7^~UENe!8S$#@G+jQK3Z*bW53vpe zW(@E!Y20Q5f!ocBmX>#znVC0c8qx5PsqS5ZS=;+MI1}EPn95nXr1|`;=>If2zJ| zZ@lpAR~U1`^-6SWiT|*_pqG4&9^0w-ZHY-qA2>MNQ%s;;D98=@4b&5)sP>~ra{m6G z6%Qjgrf#@U#VbJZ>m3|inQxD@wzESIPQ@i9eD<>T8G#bGrzquJJNyYNz98-)0!2Vcob((Mdb#Vs74^CE zHQl)S3FSuj(#0=+}B3##m2_^?GGvXFUAWSR9a#` zcuuhEpGkwJ_i3d=Xq^N?lunv?vGy@C&ju4`6%a7v0^>kmqF37CSbKwZJnI@j$AB z%A;UK$C5%7*)G$QQ0cWnsR+}540QX&i)kY&VckH`Gx77M012$Aso4hF!*{#f;O_4D z?NjI62vW5ppUY-LygZ+YIZ~(biW~?PbD_+b_;_YcPR{wtKeJEO3!YRQ9~dj#zmHj2 zS&0Vroq5@^Mi*qJQ1c+5>&9L~wtYi5(oK~gtvG%F)VOz#B=l3kO>WaK!ACQS!NHQ~ z8lhiqD#dWw*0?a~x+?{gz+aFi9Nmhy?aA-(x)o z#LuPC14b5ZYX@dOk>ArGul@Fx_Q#zK=Wclj>YTEYQeJU!EU;1;FtN@R1Vg=n!w^_P zMmW@bGPl~eD;KXz9W%H#AKVnnP5}NJn(<&$JKXlDk&#E*Iy!(v(~zD{b1gFk2ckoD z4+uT#Fap?xPdxrTuCc!ji_QYv!;2RLaL>Vf#=^5CHzUq=-plD`(cRU^`Exksy0SOe znx~N~Mc-2EFTyM1Is$w_E8mq}(a z4cf&nKk8AKT5)JLMD29Rx@t)5B7sPgQ&g;PL>k{dzD^zg9N1r^?EI~(V;mqg_SVj_ z?HdhI(T-jz`W3-vKC?l4Y8@RNN)Pw8@jY=juLFz2#LTQ^W;O^j%gnd+ksDd|Q@8Q6 znq`I%s0Z)Hnpl8)2I&XOFilxq-RIrG;oTsrYx~9#(yhknTqdmS?29Y8p|-ur>3)A+ zDmMKyjeO&cM@&aTvM?%NaW}^=D3FqzX)ZC{rc(Pr) z{nzCy=nl^@7H0RqLuCGg&488%DlXpFgd*amNSUBUKu}1`!lI%DP_X_PnQaKryA=3G zAuCFxQB5}PtvemkXucjqNsQU|WcC^=fn4G80M!u;6^^4Sv9ap@?={qwBk~s{u;jvz zhytWS&P8a1oZS9&;oV010?h@CNRPe1zu$4(0ZZBH0`%DNOkwpBGHAU7RJkubJ>ov@ z&mQF+#>u#xqx&UTX2B=F3I~QKX{j6UXKplTHnD7_E%xjgw1!Ah$FtZ6UFIDAtv8Cm zfN=fvN#wgN|E-{%@UgRZJTlCn!pHXzntuLA*t1c7D6{fo<5m{#J7kj0L?!28 zMhe9>%iK>c&$d}PIKG(kASdd&Wde03pWx90wtr_ck(q$A?h?bVMc{{Vv0?CyA<*RJMB{Yj!!pF}r~n{f{muRTZV-F|EU zSR_|6`mbMj?o%@#M_+pi3#v#`K9GNczm6hA{9-_j@0n&tW*L zG(O{VX}_bDpPzq^ogFR6{tvO0>*|Df@Bq(T`00#Jq}0hDtFRxJv&2Eq_h$31&jifI z)X^#K3TTE?&%DD=X2NKh&>+5#Yrcnas5SE0JZ(_MSJD45j(GloElEe^$(V%z^+dgE zF5`7up6I^k&bUE=lXtU5zs^&3LIrnpbQJN~C|skh6PiRBX@+}XKu4u3yq0bj((WXL zbME$sm@9~N>tK5N@#vt~P~D=19ZCe5l$%?A+7)|BY8gfxMEDE?TnLY(*X5@AZKI?J z>drYF-_JmhS=AyUx($YjjD`2Si+3P*3KKU2Q7(=oE&t)bq_Q3 zTrTZ|k7AYu-cx7P%~!+%KT;>3-pHnCA|UQ~hUyx1k^c9US!8Jc_R1U$f7^nBaDB|% zw|BzAx-X+57J}krLVLQq=*06xu_#~X5PRY>aB~mZTszzUJD-lYZThJq@5f|s3N}~h zRFg#1VGh@s-W}e*V@zz%MHDpc%Q!RWkEF5#-vTzB9xO8utd>CVEXfKp}mh! zpZ&%4sTqyZbZ9}czv|U17_Og)@?41}r?5}RuA|9g?i;naH}8anG{$QW#NDs=;)=!p zqq6V*q*~f99OKR%Ck!{0{QJ1=VtMOK|HCqa-b(*P9!4hkeOFIT2hNJ3)+=0iT^uU%MLwwiJj;(zzN_l!FT{Q z#i)5O#%HX~OXCSa1qRRN^k>rip^?~vHlM8cQO7RJO60VRBS#t5rn19!m(cU@s~i<* zn1PZNp4$0x)78ph5i0*2~s|mW<>mRW4RIn2IXYD zaR9Z6I%jrH!zmCmu!%ns5Tl`=yB#}!D4GG++UCHuvLD22-Cys8#vMM%f4b4xL}YY? zI#?ZwEHi1e6v~YJNletvk31D;>v9sZsx|sMl#eqsG{jjq7Na*-J6bP9C6oNlHJlMN zK4|&tlmR}492y2W5@JpW=DcCenAjwu;<_zt=h7;SJ0o)br)EmFMH@z7!L zS$|#XpIwy8jGN*MAupWx+IT}`4-5lIDV{HuKW;0huwa1ai_Xn`LX!}`=I;CEn`f)o z?e&lB9YK6MBtC!c+}|tOeO>w-;nuBQ!qskrf*NttkHq}q^q_y%6ZFjdA^T}5YsRO< zMiKXQglD{Ts>ibJ|H-4-xY{CGQ!Evq%}M!?kPy;qF#pFqDf^59JBD*xrJ>rGXPi^a~;;6QGu(vCp!ZL#|V`F2} z)@6%3`+%X=sT|Bz&>CdcICnlL{B{&Fp`OpxnQbjqjvz;yq{b`r)wsYKlLI~B z3x)hn$Lmns->hCmFt`m$9tnI7*%;TVbDlzJhQ|x($_ipBB|kz*aQE@`rExyt8(#Ag zyZo2lim3@wQ8I!8f$4m1#Bmeae0f`2+Y}$sq4_^p;6OUn z*lyfGTX1?SgGqTRydFj#gXREl(!O(z(1v)InFgqR&}!lpo|4+TsswT}GuH((MKBy+ zoEgH%KRcmFpE3N-8Tw$ocb&#QMqbx)st!A4PM~$0WsOlgTq>olL52Yp0LLUxU`4I5;34<+TMq znl!EqesH#W@;49+lv?1?0+*3Ntz+s1^1r=J!%sW@-)*ZA5>^GGi3@5chh!C{d3j;_ zW+szumN?;Krh(b?k^$y?8HFDo)f#Q`Vs5HAB)+fvRaf3=cB9RjPYZltdL>Ko!g|SB zSwHh6%Uc>=LEjwa>|?Zt-_(upardHe3+PGM3_3LI#I6F<)~}Bz6yWWIfmF;sV(Gp; zy+ZyKWt)?bj-K9g*bsvq0e}`~w~Ok*x(cfvpRnOJ=UL5QGQZIdFxlb$M_{1;(creQ zRF5FYJ77|{jf)9wK01hTSe4!=A$Cgftp%v>adLKn>hHbQJPk7-;iNl|2_QJXS-nWv z6j&DYoB5K?^!MSsLrO0bhfz&M@6BGVd=78-w}LDy4PbuBFD}N9SLpoR6_>$lrI2zu zR%+Y_gDggDMUj-$Ztj^=YG+wVJUQ}><6?Jw(DA}DOV0Bc(z}%&OKkfAlBubwri2-q zOkoQ7c%KyCOQt&Ptb8#4MQ2fS2JLDpdcYPT1F^8H&d6;~#IsMyIH7Xg$MiWZ@zcw1@J8L)?fvq7N*k%I8%ZF(kfD~Pe)w+_^a`41YM9DizI+L6 zP=!gB4ebkHLxDEjgnEcosuu^UXq!RODg?TSW ze***5bt*6@wq6F9I<9+(0aDTuXo5{()R7rDchEujEx+KFeO`X8$1ftD*bBDdUa$gV zn5Hv1G)SLO;G%vYT(Lr5#Kc(4Hl4thmh`Wn$xFB~kr0V=uzCF3)A0CbEd?B>eXWt0 z_nI6qMtFF5XonimHw|7%Rpl0Z8OMK8G>(s2=azx9)U8#aqoL^o5u8%ohZYL+gMz(Q zrjnA9#mb(`?#As&fn*rp(eCs4ofU9#@$m;%dzXl%UV!aG;$S4mX4x$9`b;)w`!)fB zh{XV<8W$a%bSu!Qj0bGg^|QMA`cbCk*T)Cmr=h7Y8rP7mBorK%S^$R858 zr&m%d3v!LC+p^K)$F#tSykoq0Ck+l@3^0}SzGPGcbp(71Vgt*y1{_3m(p+2#YMDYW zGbW~%eC_P)_RjYPdjXX&cf@#x=e}IWutZ?Ts)3!+e?A;1QpIE!IWaMzn!)!h`NmYG zHVpLeebUv1e4j(}Y|RJDLHph9U{t@_e&|lmXQ!61QO6}1j{iW2LRXm&iCPtLxEm zny7jPn5eC<4>5U{kMAe@&t3p}6BB6OnZbGmU&Vd53#)nda%013c_6!QP?mdvq)VpY6lEW}hfB;=l&dDd-<@cAE z>5wzJaF=A`aY$Qe2#NJd$Rpe58E9Q0-60o>N=g_dC9^q=r5M@RzOip}adFu$bgUQx z^HIeC?b+WSZz3Zc* zv*S|#Po8Q!^%$|d|M218S4L0TC^sB&)8GSLU_75f?)xbRVH>8=8PYW2HJc{3o4XY{ zeS56}G-w0^&y!!d{vd(8R@0oi@$cWi;~wdo>{{9K%7cSmJjOL-|TXoZ^OcIZ+(N}UB2;NQ$j~9dq8$vg)*|rq6nU|khnVU z5TdA|Ufdg$wp;opY#k_Zr59B3rb`D&hZWYTcFMGa%!3?%646~gccVL@`6bNB8LO-I zy8PA^z-8z_+2pAM2B!bwNJHoS&xuDlHbD@e=2N`~0u>CzE(3MMuL$yB?bj=mBftFl zV-11v;Al${bLOKh6dwX1*UKbm^^n%>-$+^4iC9v4Nd`b5ri2bn11ws_zI4(#eNZm} zv5-^rv%M|jy-S=(L9DO`%%{RUj|+x-!T&_koj^z7bnx_)=pV6ZSRp0RCwz?~L1Z7WzuI2oFuXd` zsF9bsECag$9wEV#lM^DVpA?!M*Cp`CT?vc{25}W$P__ep zQm!*91y4QRg#(McJDl(e+L^|w0KV`Jj6qmCdkdVtY&4@~b3WR4rx{`{e}>WU?&74?ui`O7(Pp;0Y>gAWf3 zz?uCxg=!1S8E^?`gkBiCe17(d%zO5lYo|5e?vUcG%8(0iCeQdL%wfyA$%V0niWe~G z`rmh{;ee^ay0AmnWqD1$Tkpe7KVYFaoFND0&z z+=#XxZytPJN{iWFCGo5O3x*gpY=8*S^LMyR?G zmQ@CqrQ`tg{v!;6l_?G`|$^S9?-s42V`2cTdV44+>IrQe)CMsT3?RFb{gKm2RSqml_{ zjSZN0nU`fCb&@s5LOuSzvoMAp=cNeEh!mh{YPq@;heHPd*S!-sBr!QK^d7>&xef=J z<_J6VBS@dHK9M(OoAXe@l*Ude6(j-<%WJU*NHdu<8zOp%HaPltIny<3uQClm6Xu=F z6il<~b4uDOiqbSs$G58F?KF_N{^PSJ1&XK%EqZ~;KeSOl1-i9yct{7n_kEv3Qy_p! z9`jjD1y&LrAJ_9t2}jLwV2L~+>+*BDVS(@Vd9N0b1lH;fdx>=GnMtUa&j#h{a$PJu z>TtL{*Tda99z9E+`uD|lSZy0nfhw3Yvoefd5b@?_7W4~`0>sQT)HW4bLxPpzMMVX_ zx7XzFPv-V*#}tk}5PY9^bm)MCzzv!c93t93e|pcm>zB=^UR05fPnzmG1wSLks=?4A zYaC9x-5}JWSTH;UKI!BX9VKOD7E#e>@7^)JeJf_pBPS;GwecI%w`E`BqBq6GuYvOH znUuA#0A4cNF-iC(W^ZT05uw zvPlYS(%A}HJsp%b{F9lUN##W0@`mN!hGzf?GcdEFO_JXQ_|DNq1U#i=cseI=DIK;L z)7!>%5(AGeGJDAzcv)L`*@#(r*uV>dkB3)?lb4s1Pxuk9fEcf^7{4$(53d*x5B;Z} zs{iKzXIE+YVyu3|&^JEv^~?7!v|n)g!j$qc_~Uob z&_DPCb6Z(Q89}NO&mG(2!~e58UN_W1kPt2e!A2tp?pLrs5hOquL4MgGi0pF&Iq#kM z!9WgvK;WRIp^BX0{>g1DN`}87_P%c6hagmSxPMXUjz)a&mxTVBI%g}!4!RUI(>HID2)xqIeO41|Hhzhl`&0>^QIHbZJ>HL#w=d->>6duvML?eVwIHeYbPZ&pm&ebv~nlPuotmz;U97GV2qZ)z$tG0enyC^1(s%0vVM7$p)%HKNsR z_ygohTAv?>;UQ#REHWIZdZPD^-V7}^2DE;`eAg+PNN~T1hfy9tUytn=t7~@EnlH~t z^CNG`E`8UCkjLelcUy@>ZQuQjVkaV`!d#?MA~YurOKH{XI!pRx{8+s}SxE``9U_n9 z*3?j|7f{*w3kf6A(PuK4P-LB6Z3oY*gQzWo9ah5~)`MQj3X!jvFqC_JA3mw7ipei1 zDD^NfFc>~%qoTTp#UdC20+q^9vq?NOx-tPDQ?-ZpSe=8Epgkp$kB_g^!^BZdP3?1k ze{&5TEv@lUWJH9*qeqW|q-kFu?`&!}Xw(MR?{E^eS>bM2p+Xt0kKD8q`7Mv~kKv@5 z5pb!s9ICWsBfB7}>fqo|8@Vt)U%?PkKJwA>?(;9pd{0`JdeeMPkAto2z4IoT$H&Ko zGk&<{oI{Su?9TC%w<_jyr|vdMV)E!=HIA8-Dd&;j_d3Q7kO3;e%|t3Drbk0V#^SC+ zL~w&L=fw-+F1d%Qn`;b@)tzqLGVvq%nxmNb=63)5ShXX!K*0NQNxU)qc(E${maTkl zo8@p8qNww*!x1qOFNF{WWR@NoZB=6tskIbH7rzq)mwxLqi1+&S>+3o?Y7P#U#F--X z{sfY0CV9`b;WJ;oOWO5>rG2nK!)JX=BvUq^C&d6QhK)p(5mu37uNx6WD=L#Cb9+Ql zloYeh<_Qsz=D*g~RNdYAzkT~w!uYRHC*zXv0N*asNPoW-n|wvj)Q|KDvrN>Kb(-JA7u$~Kev}rJBcxnU13{ewk<7xc_Xk}zDN%f_vC*_t?R%llV6~%$|IYywi>$wD z`vbDz94;TamHwQr%^x4DLJvIGCu+}K(aSD#d#QxC&Bp(=MHV@GlCm#-S-ZD)zIVE=U(LPw@$SQi4`;(4MWboy=CgH8K}9X_0xZP`d(T+Q*w87dn|?H!RC*#_kLGY4O9&b{(BSKi@(i+twh{ken#fX zpQ4q5=teF#O;^dSQlKceeu{`Qk-_o}G=>KHZ%wmoOw@AR-@5%=n``~Y$Mci#JlfxR zOnNVVrn-GZZynXaXpV13!%0Owjgdj3e^oP`WaF-bKhQGhsH(1>uazcfmJs1yX4Hz; zrqTW7OXEE0@m{|oH$T7svakixbdOWCDkc-9vH@SCm|mIE5J|unW+MMHH0oM=T~Dvs zVSDoJorQoe{zMATzc{bYG@m`X=KXWv;%#b@e$*kRh1!5tEI5ZoxeCsPKHZ2~fG6QL zB{ssFJ=C^fF!x$4`OncxHqV9~^-mogI|?jqg!N&6MI(+jq@0|b>|j}*=+a$BL=k?1 zZFvC))na0Z0TXs26<&VzNOA1HCk^nd@BVj*535{5m0JT^#BCRA-n`jat8Bi+!GS*d zv*CBRRHcefAD_%R##VXSNONT7W?Uw>U5FH;l=ZU z)=KK?1frs%xM$I@;YA&yTQm^U_8 zcJgokny;_u)_3-Ye3>$S1dNP~V^#L(Cv1wFpS6V0hqNt(`P{5a;jGb-xPu{rQT|Cj z%Y)Rlemy_T-v8&*IG#QkG zo@0X@si$)zo?$@>@qRjQty$K2K5o5FSP*%3N<>Ds6wZX16MpsT74H6~l{SyzQqsHM znvn)#JF*mN>P_4;2*AO_(^8qCK@2y7b%KJV2}l{RxNE4z(>LhdW4G>vqg@@c?^0UL}cP^ncX9LP{M5kgF9RaZ1fef=k>$Wumw`>ok&&svj&59v8csVlI|NWL!Y0&Pot6~n3J zgo$YYRnXK--Hw5dvD4|~wiAQyJBKYF;F;q^2v?RLMGc9k?<<)i$dq`K4S z0~Oc=+9-B$JYlky`^fLwjhUC4G*f>4jfc%=M~YAuc1?5GjbmHwTKW~w5>ogSyIva= ztp{szVqYOPG-^BiUMIv`_hBV3VwA5V+ss%EWJuP2=DpwTDR_#Xg9U`*OdpSqDWiLz zUhXb!3Qf9fzcx~Sxc;WU%CU<))W#5HM}>U>iFmPGaZVlRfpF@?~+4g|z=qN`b=@zrW z!ODPWfE&*^A#?Bk46ph#h`Ug-2F;=>HiGrC<>KT+|FB=ZdI7?KTToD4Q?omz*{$cs zjT?wLH4Pe#&Kq4TJ-NWZ0O^tlS2F~x-ZkucLA9;(`+b|2kFVNeQu27WSLkpl%{J2_ zSL45`D&e=DKbXp`>i+jd^R5y4uZ=to6?$~;yrA89&8@?oF18IH%p+7^ET@HVPU(Df z3E&&MOGGLN|3*j=y6Q!F(XgwCT?>-Ha+O|Fle~Pw>Ix|V8n-l%w(UnNZvOvV9TkOF z*IZ{>+95G&eLusiiBW1MOzeaIDqdE_2=n!P^31D&WBa}Ooe(a!WLgojIVHnyQGdQSZ1TZbB3 zZ!8^l9jvrfl>0q!&1I^-dUAiF+L2JwYdWlBj7{1bNlE!-ep5nHlHRd1q4lL^vWw59 z^Nzv{+kYm#7WPMNo2kp^G_PML`Vg@8Kq36!Y^s%~^2*mN`HJ?{??u%?I}VT<#}0rYXIz44&<@&9rBjJEw#xGyJ+A-}~vuKWx=hDkgD9{+T`ZEpLjP!yeDb&(yP~YYM zO<&Q?Y|&r~kDiG<`;mR;X$~T%ERT7}3-^U&e3`%YmPD>KqU|r5*(LQGmg?d3k-E=2+D%-@5p8FuKe%HFi~u{>PzF zB8y>oA^n~8`YE;U=2dhZvY;0(*&*49QzNr`0Xb{!x5YDUHH*-K{JI!piJ{46CU z@8!$I9%qe9^hj>#!RF!b?|QE%^U&9mqUYLU7d~z^8BJ*v46@70GVSc_JWNc~@b~x6 zdUNnteSz+FZdDa!OiT=*$hs?^zP`NGn_3UYdS|E$R0j^^d&B3sR83iN{358=>A z2arBizrVfh4GH3ss39+$cSHGcenoFPaG5Tj_u{8OP8vAmu^gj ztd)Cy?@kN)w_3C_V&%p2WE7w(EReFf`SZyDk&G{pSQ-rt&Gq$Xy*rd4!)!Jkd1_}$ zQvufU{`eKyKH6$_Y>mQ~jyw(X__&D?)}-yQyha$krA&^^xk#jfHopR^L^J+r}&jCgy-n_TiRmIv3wm%eE3kw-F={3jc8^M?yvi3`Vn_a1d# zl$K^tJUbTite+#O_)wAsb!iUL!tEz94<6(Ptc_g1etotuXV9hLn(V`_qk~ zj`N@5>Nnm^<_^35C@F>9-IKz%(|sjptY9S#;fl|HzGV7}$OOJ1+eM-_bXA!cYw6oW z^@3I`3N0LQ95hsVd(X6O)>VlaQ&qlOBDmDbJqKzI7db^zn^ZG9;l)#Yk4b z7T!Ov{&;)GDB*$>IfcR@dwzcYREeXmF8OrmmOND2ig!QN1hKF4xdrz=cW~5SgD(oF zOblT|)enwD0O09J)>ByB4L$|H?C>>H#=I#^2FmPuh>o%G5M9AmoPH&rjNdZppRE~+ z0t1^6mJ1i+buuLLV7+vi#{;|j`!#OdAbHcI$iqVnnACT^IJ<-KHoKf0bAkHfwrFCS zDI1BJ$g>FC(~s48*?N3DC7880pw$anY@?cDCv1tO!YC8kkzg6Cs#U$h!sI#=*%GZh z-*>$7(5GOLjea3^d%jnw*@>w=T~$NFR^(s9)ymF6_UH-i` z+V2sfnH0UhHoDMwFx~!2E6shwl3FL>qI^=kI{P*syUMZIWM8NW`lE1(BR`0Umqxg7Sp<1@w+FR-G zg0%=LEoPc{d*?ntRg+{jRn=ULL{_sB@rM6uYDAr!o#&xE+?6VK9WJ5E4%^k7iaa~< z^b3PqRE7QZEi-ay+b<}?a#XT)ES?85_=X>ErPR@>3 zTg}0H&bXRUE9p7tB7R+4Th-OIMDJioh@bzHZR81OJXTdzb++Xm+GVWjq8Hu!y)L%M z+0F|~Z;Wn!@b?L3B@xo*qWPLFAK%xfO?&?Q{SJ8(~)LdF<;IasGh*^#H;z_T{=HMf8T9B zF2S20q9II2=%bq3vI3{$#^0>ePgzu|BwdDTBxPRjZSV2^T$f!Of&1=n363c=d=Zc^ z?jbh#!gN@NzA9Mlpye002XmFtX-#LHk1yjC}|wE&tJ1WlY`3{V2b+iG#*9h8Ypkpo~sMOxrrGBek_jvxDY| z0qM`Y+PVpeswgLdNh_7V`n@eI*kHceISe7;UX%3{Af(Phon68r97}{;-!Qz;*$}+9 z4Hd&I`A)6nRM5g>Pmkr7Tu|J6{{6lK)S2Ygt#=&jkY9o}YDa}#hq%+!w=0~X1V5MZ zV%^={b>Dc0ZjlG}uzYv!q3puV*R`q=808>LDqDX34x6wYVp?vwY7zr;a{qo98xxafRp;sQy^xGC@~XEP!>ASP zd71X|*5D<;)ARzCxq(~LwWe`pmbD}RK0D!opDz^#ymA|@fNRk`AZ2uLtD8ivS5IdU z2}NB(Y(PmacC*LG5gOibz6!rG4xacuS zm1Q-ntUnRxCc3PHM|TEtQG&Kj);hrJq&|K6v~8**vADD}2S>TKB4ZHPLfGlw6_>&M z7^~l74Z&hIp&Js5D=T~(ms)GSe)h}fo*3Oto+VL38bHjmL?50{t%%TGn0cjj9``v< zkyEHcN{OuUw2vc!!vStA?6KL14&f0JN@I+~UP2@ws+8g915M$ffUS5o>wtV%hi=rG zS3AHhe*$d7F$4eAZ)$hWlkp!EN0uM(t1LZ5=lWul8Bp;%Uj0lIq@dBi`Ocx{nOLfZN=Ew&zKHQ7b|O?1djo#2 zXjb1789=e^HMe@b4}JuG?05=E6|ZhOq}1W3h`c-tRKr*6e`J-&l>(xoqK^Ni4?WN= zy4IU2-~*&@(waVasVAj=^TXP66Z!zPg2CC%k6WE^Eq6}02dG0s%IG?b^7gdNR|WDP z?@b;8^+Fw!%o4u}e?ZRi2xPgB9;ZPNA3?MC2%m?yfhHy!@N04O#f0jQ?w%wec`v?C zI>(6v1N#1(Q;bka4Xyd+fb-$j^Ymy-vF_*7^mN>19D$U+yBmtvQaKXJlqdQbrOz0} z?jQ5&UCuZn$Hhee>(g$eC%^R0a@A*{(;n{FSKZR01p9#xJJ%qTqBq;G_puD)^oUDF z9Yna0{a>%7@dH=CapLj_01xlpBSHd#`PW6+ZIET$IX(Y8cy$}=)|>QD_FA(f9l)Fd zL=tt~;c=bEBt4&L87^3+3fs#p-r$h)vbl+4&d;AN*OOE;?q4_;c^7#$dm0`>n2H6GJqicnN_0{g@rO1Y!; zHv?cZwVN^xnj0qAs?ftftau8>KgtiHmhU>`q$R?N|@;} zgF=`zh>r8`4o27ZgZ_-)#$C(mAf6C$ubn<3dh!(ALbaCpoG8ZTl$e+p2M2{+2H5L< z`5Yhmkh01#0HV=mfxuARKk;nKVL{sD0e|zVuR+fC2F4|3R_M=ppMb0l_>)tqVV)TB z-!9%E2oIpCGmy*%B7O5G@bL7&<~2%9%cn{-JUs;o$e5xtnS(EE6&G_uHqTCYb|KGA ztN#AeroZmzT7D@9WhU7hB<))_z|kelKo0PyPK{5^m(; zs#*UK;*Th*B~$izAyHA-b1JAVveUp|(7bAv1*dG>a3w$=_JrtNmLruxSXC)8S?ok? z$n$fZKZGt{#&|XC5CA5mC^toGxp^FTP{@nZXGnRat}+6#Ql>2Cnnau9A)66>@Fzl@~lLbb0T9y+42k5%s)sXjgsG6X~TA5OT5_2zGS`K;)tRS&_ zBZ_!-sjZhUU!H|8s6NvaE}!2ISgaaI%?oRg7LAH@iO!u{u$f+TyKpWY?`ivy-)^k{ zknVD;H&%O!2UC6^h{tLuj5dWI&BG<$rJUd9#~%!nlmYo_`AEi8-^S47?n=}dgj;E)RHLN?4z^<3~ef zh7hof3sjgndh?`{OXdq4>Ip5NOvp`~`Y-pr=)+f`rlx+Hn%cQ$D3j1?r(|kM4lckl6;-nU~rtR2osLZNVA;)GwgDV1ILqFxL zg+2<@3P#Y&4~lg`YHS0_erp%9?_0OgC!?=wGD?cl%F6hma2lEa=-pXXS4v4q`P|!k z&Blfm!NF!6BR4dpo?lon`B;eSAi*wjSg{vF4+*El0N{C5U;ngp(6tr^4U>|Rgn`sT zizfY}Dsrev87%^gY$bdnj4B{PtC3lmk`-M=O1i)XS#tc%?a--1t)yr;AJe;%FFl zFkC7gasn{*T<>F)|=&HUDJx*&la)O@#Xx{{P`k920{jj2d)VEKf@K z{oCJ}wH+Yzllz1eA=WuIjUjW8KJ`DGzk@XBHR4%Q=%DH;l__lqwn^N|fUg8WUh_z4 zsecUXEeA(Q^gZZhAt4`rWf%7L_WEqkDqGYf$w$Y=7Qm%&SsawB7j9qoq-}Z8Z_lQN zx5MFS?P@tI$q3L-SmhsqHqEZ6I8)&WQVNh4=!Bs_J~SSto-i>&NoXPPYc?UPoH!wu zb@Vmh(Zj=qM3GxPw3%|jNwvL@9oke4GQX~r{AFE4>WP#omyw`H5~ytv-9#k ziuZ(k&?ssaEOF<~ost{YB_Hfr6(g9rl3$OU6y)c7ua(!$Ke@UI)C0b4<%r87Q1K2k z+whK~w-uQe=HzjK*BE->{3HvMLLBQqJvpilSTilV`7u?d))e*)AENp`^x5*EEZ+Fy zEvE~-7$?>MjWkQHw0J{sHE>h4NHYeq%A=PwB2ti z(9h8Ngk>IlX)3LUwm3vtWrvbl@RH0B0k;0XL=4J#LfefO1i71M-d^x6QH5`2S*XdI~vYk zB0=R%|uWC0EmV%t=g3TcbyV}%1cCu%XEVb(1U0QySSikZz^i5aMbKs;l! zVc?m|yw=%^8+9|O-6|?710bqagqRp)>@MAMvJLT5aQ%4{H_e zkb`1C7EEN^l*;%5>UEv_X%^wVd-q(vy^Pa7g%j!k(AGNO``Z3<`A|t{SrxtQ^+s%y zX=a%h5$T5#i@zDMlNJj&xBgErH_Ee6(*Ozb$)ndaMl00 zLbxo%+sn7T8;C-|D$;e4umx2{9I2JNy{H&==nWZRZ@}g4)Tm|T(Z*lV69DD|z~47Z zlgC4L6XW7q|Lr&1&9*2Dz9;7&ddtMVwME>o^O`2NGF%XVKqp(IyMth-qhv-kY&D-7 z)%FA)9^P{U?BfekAnYac9#**QK#OM5HCK|kg?ddsy$U+R%nS0|eSbkabj zQ#VH;1|)7%F0ZM2kpmfj%_Lka*x1M*H*KbnuMZ{G<9@33Uwky ztvu6GQgB_~1{2j}E*&QW1U~0JZa7_nsya3;)DFfwm{GL6lQvj2RX}_do?Evp;Iz;E z3@0xoD*PitH0dTm2j=5jgLNw5KDz2Nj}ekL1K8E;`yHIt2^%6o6Tntuf7LOg;a8_ z1OB~Qb@$Lw@-MDDu!jFOnC7*~D=sF|O6!sT^MLGvuig!QK|$x~#gc?(b|UM24!L+m zbwz3#8r<<0+4BZv=s{8vb;ZBx5u$qUIXqydT_%<3a{qo7yemX!*G#{Ovt%dCr7t@v zvbBFq#w<+Nb-)Xb3rX8ID}T_ri4;?x6{J$(mK%2#3gJ5Xq_vC5bfLMHO*%q~zm0 zNR{ebKozfnVr)H&bcLa~H|jO`Z#+@kA`DvpfW6lOEt4`f(6UX2pcQRDgLZ(mRsuPjLLcc# ze~#izxfT^)TF~nv(x=5w6vHJ!%*u?S!|9pZ)WJrlJnjC4uV}G*^dDToUR*};@J`nU)zu`JSfY1^Y{hOD$Ph0d5hUd=v5!O zMZ_AKkeWyY9(#Q6tD>TX^15lmFNWC?&M(3DQ+h0P5^6 za{PCy6gtlxzgKscHed?@ANK210)tt;e}AF`Rl$X$295jl(8{!Er$QoXrWc68EMX1? zA7=Ump{dTNET5q`0wv0Vc*5;%SIH+ha7-roKk19<4 zbeSF#KzBU38^BVp&XrIA!CkO?gP^UCcypL%BKy;yI&+`H3fL^^@rk$OV64TRj!!x9s z84C&Krq7OGEhQaY3@B$jOXmZkZ^x%qsLU)i?<3jhiM==opF)E8&5QJDjv6ypbPK&Xs7{d+|! zYn}7rMU>ylSCbHg32|j4#WG_{)D>$?BP`45#hm+;fG!4=x}4AF?s1YUpa(3;4T?|q z>S_-AB90inoAgZX4wgki8nc5b4E$JIhM^Tf0w2`p9gTR#g#Y(F8a!h9NMF++i$fgNC-`c9Zel?*K&s+GyShdNNFKC=js*Rm^DCp9%- z#pS5>T`oqw!2TVdGbc+aW4UQOpkKZv|6%lY*0AIu-Sn+h>-Hl=c9hn#Mtx?{QgVe9 zG*f_w&$=xXE%jQV;TPP>W_7qni(G_cdcmm%m#AL_mZ>Uv`61Ynk_xGmk`J=&4i}C| zntc(_fN5LM5=$m5FC82mk?S_KfKgN5Kaj2@QnI(dxaSsR|xn4*KiN;4{vehI3{TJLCWG-&zU=d$I9pz z^Q#bZ`S$$~c__#AKifn8c}>0(@QX8uVlOEec6~9dA;*H4VxSEd?^e|IVE_)Hc7~+R zouGS)ocRA@aElm@%pgQ%GIycPnGZm?t#CCfRdhwJyf z;1?1~oIH>Of_v{?ja8AEF4}ky8uC-2Ta9ITO2~}4$AkWbJzNx^s^0$9aY&e}?qXdi zcgV7nK^l@apcw+-<(6;ynOP^uGLZ^_R=+m|^e~HAge^ThvJuD9QsLIEj*0RF%9Q5U zG^^g8Tc%OpXII!lkmqDdf8t#Sa_^N38ra-7#9#>l;fq>8viop%KjR^j^3V$~9*M4P z1?!@#Sb3ob*RI26ra!z0x>bfJtH zv7y2Oet%I0l(qaj$7>E=Pfi zC7!Tx6oQ3SCI}0<^%Ovp=0?*4?{T<2&Jp$znNe}aD8}`*a3bFk%NEG{T zLgDv?I6)LAAl2dfPN8~d@lqG*_0mY_&Yy30mo)p%AuLP@=BW7W*NvnDGuLKs#G`gj zt%s0a6tHPf;;bwFv#GotVbes54^kkm3{%q3v@>P9*9s`a=;3ZMgx)4*;5%;IZaW8D zZ>2n63kLvtf{i7svN50tw3o4Q@gIIfD{<4XvVJYY%u0~u0^0dc&DIw|*cB95aYm6n zYUJ>ft78~J4*VrQ>Z!R=&`MTdK9~X;0{mpkh>*&J&{RS3Gd;?$?T_$^1t?n1^P*h8 zfn{$hcqOYWPu1K#p?_8k7rTi_ePdw*kZQEpvtpAB^sE~dmX}NWdF~MF>D|)u9pbPy6c|r9vBCcfvdRWgmXL6}tdS(swZglE z>^!fjM%N1Ng2sBVMY*L@zTG64v?xG@6`QI|zAD+MFyMOixs2mpnPk`6P6#1D3MGUO z6+OZnx?bG{;&qReTAhL6rGC`x@OV{zz6zI?ZXrIlMBlB3G0%oc%G3+^VE(r;f z*Ct`y*c8*rh2fw^G%{;qKH^)^3Ce5iTzmM3xMbH$NYZ7Iqi0gC&-#`=1f4rÆI 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 Bi6Q_1 literal 0 HcmV?d00001 diff --git a/app/favicon/apple-touch-icon.png b/app/favicon/apple-touch-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..83a08ddf1348549826ab7fa13f8a9eb2c5bfe94f GIT binary patch literal 14250 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 ZL99}dy6(yeeuhUNR20<|isXy~{}*H+Iw$}D literal 0 HcmV?d00001 diff --git a/app/favicon/browserconfig.xml b/app/favicon/browserconfig.xml new file mode 100644 index 0000000..eea97da --- /dev/null +++ b/app/favicon/browserconfig.xml @@ -0,0 +1,9 @@ + + + + + + #da532c + + + diff --git a/app/favicon/favicon-16x16.png b/app/favicon/favicon-16x16.png new file mode 100644 index 0000000000000000000000000000000000000000..df4e45f209475368e5b035536c95ff5ccec5a6c6 GIT binary patch literal 1047 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6e(pbstU$g(vPY0F z14ES>14Ba#1H&(%P{RubhEf9thF1v;3|2E37{m+a>uQ@CkAK|NnnMLBaCn z%a0s6a_Q2gg$ox>o;-Qx%$ZxZY}vDC@8!#vKYaLj^XAP(ix%zPz5Dp_6UUDq-@bkO z+_`i6`ue)NyQfT<5)~B{6chwBVd~VWot>R0PMiSBCL|=xm@#ABx^;W@?8(Z?&d<;P z^XG4RdPY`OmZzs@Sy{QeyZf(Szg=BjtE;Q$&!3-?lCovX)*nB9IyyS;-@iXLHg?*y zY2Utm@9gZ_v16yLt?i2!FFt?%VrOTUk&y|s<;$0^EiEnC+1VE^T(q~h@9F7jZ*RYM z?|xcZ+NV#SZ{EBW9UYyKk+FOCo`!~oef#z&Cnx*(_?$R#^6lGq`uh4nPsPW_dwF@? zzyDzI;>Ft9+DS=C@87?lK7D#+Wu=;$T3lS*+qZ8cBO}Yo$`ln9U%!4G78X`lS0^VY zCo3!a^5x5rkPrz8iRaIs`}z3+L+t6(r^}WtYi@47bLY;32M~J#GE->(_N4b5~#T<0n3U|F-`5bNxO@j$d_|I#4lV zlDE4HLkFv@2av;A;1O92r29aaG5h|tlRyT0iKnkC`vY!iK0*0^;=xWpp{JfMjv*44 zlM@)2+|<&<#M0E<*fbJSgF}MC!U9v%TR&J@T)kpyV!CyU=?;qnpYB-gs*3vci>=M= z*c}Jc9vih~tJ0o{O$%$gW~OG-!?S1Gwz6-0eSYVp^wyo*wrvkjP2M}Xd3ka7%Ixy? z)&0w>;rYW@*SO0uK|n@A=+t=y0Wmo_K~6TehYtgpc$zL68g4915Rez1tZ+i%$=n$) zCbF=d?CjKZ;^{fGGV|lhgb5R;X)%@TTM>~~BqouP-qqbSM@w<$Q#|K2Hs4{-+ zSy58h*}gb^Wsk<0-J6O&adCYr+N5B{kdkREY58AC7wBQt64!{5l*E!$tK_0oAjM#0 zU}&amXsBys9%5)>WoT|?Y^ZHuXk}nfoAIdwMMG|WN@iLmZVf!9UM4^dk{}y`^V3So z6N^$A%FE03GV`*FlM@S4_413-XTP(N0xAlx3W+EQN-S3>D9TUE%t=)!sVqoU$Sf#H zW?-n8^Y{}FM`4(T#wq{PXFQ(m_pwD+_y17GV}vaA`0(oWiWUIYi;~jVmXP loH-(Mg#C1b#{w@shF9W(C7+y3rvj~D@O1TaS?83{1OUrfz&ro| literal 0 HcmV?d00001 diff --git a/app/favicon/favicon-32x32.png b/app/favicon/favicon-32x32.png new file mode 100644 index 0000000000000000000000000000000000000000..1fbe564be088a6cd63038f004bbfc11da2fbeb98 GIT binary patch literal 1870 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%0AywJqAg!0thj5po3F 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 F{~rfY%>)1d literal 0 HcmV?d00001 diff --git a/app/favicon/mstile-150x150.png b/app/favicon/mstile-150x150.png new file mode 100644 index 0000000000000000000000000000000000000000..44b148283e699ba24f9703efb3dd2e6ccff42cde GIT binary patch literal 10998 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 literal 0 HcmV?d00001 diff --git a/app/favicon/mstile-310x150.png b/app/favicon/mstile-310x150.png new file mode 100644 index 0000000000000000000000000000000000000000..f179c81b09876be70e82aed99b3026f17a604fc7 GIT binary patch literal 11765 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 DuADQY literal 0 HcmV?d00001 diff --git a/app/favicon/mstile-310x310.png b/app/favicon/mstile-310x310.png new file mode 100644 index 0000000000000000000000000000000000000000..e3cb406966ce6126829a4ab0fae37d18cb8bda10 GIT binary patch literal 23502 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 literal 0 HcmV?d00001 diff --git a/app/favicon/mstile-70x70.png b/app/favicon/mstile-70x70.png new file mode 100644 index 0000000000000000000000000000000000000000..1fb00b356b472cd5716cd9729830cc34525daba7 GIT binary patch literal 7465 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 + + + +Created by potrace 1.11, written by Peter Selinger 2001-2013 + + + + + + diff --git a/app/index.html b/app/index.html new file mode 100644 index 0000000..6cbf002 --- /dev/null +++ b/app/index.html @@ -0,0 +1,221 @@ + + + + + + + + + + + + + + + + + + +
+
+
+ + + + + diff --git a/app/index.js b/app/index.js new file mode 100644 index 0000000..5e38036 --- /dev/null +++ b/app/index.js @@ -0,0 +1,512 @@ +import url from 'url' +import mumbleConnect from 'mumble-client-websocket' +import CodecsBrowser from 'mumble-client-codecs-browser' +import BufferQueueNode from 'web-audio-buffer-queue' +import MicrophoneStream from 'microphone-stream' +import audioContext from 'audio-context' +import chunker from 'stream-chunker' +import Resampler from 'libsamplerate.js' +import getUserMedia from 'getusermedia' +import ko from 'knockout' +import _dompurify from 'dompurify' + +const dompurify = _dompurify(window) + +function sanitize (html) { + return dompurify.sanitize(html, { + ALLOWED_TAGS: ['br', 'b', 'i', 'u', 'a', 'span', 'p'] + }) +} + +// GUI + +function ConnectDialog () { + var self = this + self.address = ko.observable('') + self.port = ko.observable('443') + self.token = ko.observable('') + self.username = ko.observable('') + self.visible = ko.observable(true) + self.show = self.visible.bind(self.visible, true) + self.hide = self.visible.bind(self.visible, false) + self.connect = function () { + self.hide() + ui.connect(self.username(), self.address(), self.port(), self.token()) + } +} + +function ConnectionInfo () { + var self = this + self.visible = ko.observable(false) + self.show = function () { + self.visible(true) + } +} + +function CommentDialog () { + var self = this + self.visible = ko.observable(false) + self.show = function () { + self.visible(true) + } +} + +function SettingsDialog () { + var self = this + self.visible = ko.observable(false) + self.show = function () { + self.visible(true) + } +} + +class GlobalBindings { + constructor () { + this.client = null + this.connectDialog = new ConnectDialog() + this.connectionInfo = new ConnectionInfo() + this.commentDialog = new CommentDialog() + this.settingsDialog = new SettingsDialog() + this.log = ko.observableArray() + this.thisUser = ko.observable() + this.root = ko.observable() + this.messageBox = ko.observable('') + this.selected = ko.observable() + + this.select = element => { + this.selected(element) + } + + this.getTimeString = () => { + return '[' + new Date().toLocaleTimeString('en-US') + ']' + } + + this.connect = (username, host, port, token) => { + this.resetClient() + + log('Connecting to server ', host) + + // TODO: token + mumbleConnect(`wss://${host}:${port}`, { + username: username, + codecs: CodecsBrowser + }).done(client => { + log('Connected!') + + this.client = client + + // Prepare for connection errors + client.on('error', function (err) { + log('Connection error:', err) + this.resetClient() + }) + + // Register all channels, recursively + const registerChannel = channel => { + this._newChannel(channel) + channel.children.forEach(registerChannel) + } + registerChannel(client.root) + + // Register all users + client.users.forEach(user => this._newUser(user)) + + // Register future channels + client.on('newChannel', channel => this._newChannel(channel)) + // Register future users + client.on('newUser', user => this._newUser(user)) + + // Handle messages + client.on('message', (sender, message, users, channels, trees) => { + ui.log.push({ + type: 'chat-message', + user: sender.__ui, + channel: channels.length > 0, + message: sanitize(message) + }) + }) + + // Set own user and root channel + this.thisUser(client.self.__ui) + this.root(client.root.__ui) + // Upate linked channels + this._updateLinks() + // Log welcome message + if (client.welcomeMessage) { + this.log.push({ + type: 'welcome-message', + message: sanitize(client.welcomeMessage) + }) + } + }, err => { + log('Connection error:', err) + }) + } + + this._newUser = user => { + const simpleProperties = { + uniqueId: 'uid', + username: 'name', + mute: 'mute', + deaf: 'deaf', + suppress: 'suppress', + selfMute: 'selfMute', + selfDeaf: 'selfDeaf', + comment: 'comment' + } + var ui = user.__ui = { + model: user, + talking: ko.observable('off'), + channel: ko.observable() + } + Object.entries(simpleProperties).forEach(key => { + ui[key[1]] = ko.observable(user[key[0]]) + }) + ui.state = ko.pureComputed(userToState, ui) + if (user.channel) { + ui.channel(user.channel.__ui) + ui.channel().users.push(ui) + ui.channel().users.sort(compareUsers) + } + + user.on('update', (actor, properties) => { + Object.entries(simpleProperties).forEach(key => { + if (properties[key[0]] !== undefined) { + ui[key[1]](properties[key[0]]) + } + }) + if (properties.channel !== undefined) { + if (ui.channel()) { + ui.channel().users.remove(ui) + } + ui.channel(properties.channel.__ui) + ui.channel().users.push(ui) + ui.channel().users.sort(compareUsers) + this._updateLinks() + } + }).on('remove', () => { + if (ui.channel()) { + ui.channel().users.remove(ui) + } + }).on('voice', stream => { + console.log(`User ${user.username} started takling`) + var userNode = new BufferQueueNode({ + audioContext: audioContext + }) + userNode.connect(audioContext.destination) + + var resampler = new Resampler({ + unsafe: true, + type: Resampler.Type.ZERO_ORDER_HOLD, + ratio: audioContext.sampleRate / 48000 + }) + resampler.pipe(userNode) + + stream.on('data', data => { + if (data.target === 'normal') { + ui.talking('on') + } else if (data.target === 'shout') { + ui.talking('shout') + } else if (data.target === 'whisper') { + ui.talking('whisper') + } + resampler.write(Buffer.from(data.pcm.buffer)) + }).on('end', () => { + console.log(`User ${user.username} stopped takling`) + ui.talking('off') + resampler.end() + }) + }) + } + + this._newChannel = channel => { + const simpleProperties = { + position: 'position', + name: 'name', + description: 'description' + } + var ui = channel.__ui = { + model: channel, + expanded: ko.observable(true), + parent: ko.observable(), + channels: ko.observableArray(), + users: ko.observableArray(), + linked: ko.observable(false) + } + Object.entries(simpleProperties).forEach(key => { + ui[key[1]] = ko.observable(channel[key[0]]) + }) + if (channel.parent) { + ui.parent(channel.parent.__ui) + ui.parent().channels.push(ui) + ui.parent().channels.sort(compareChannels) + } + this._updateLinks() + + channel.on('update', properties => { + Object.entries(simpleProperties).forEach(key => { + if (properties[key[0]] !== undefined) { + ui[key[1]](properties[key[0]]) + } + }) + if (properties.parent !== undefined) { + if (ui.parent()) { + ui.parent().channel.remove(ui) + } + ui.parent(properties.parent.__ui) + ui.parent().channels.push(ui) + ui.parent().channels.sort(compareChannels) + } + if (properties.links !== undefined) { + this._updateLinks() + } + }).on('remove', () => { + if (ui.parent()) { + ui.parent().channels.remove(ui) + } + this._updateLinks() + }) + } + + this.resetClient = () => { + if (this.client) { + this.client.disconnect() + } + this.client = null + this.thisUser(null).root(null).selected(null) + } + + this.connected = () => this.thisUser() != null + + this.messageBoxHint = ko.pureComputed(() => { + if (!this.thisUser()) { + return '' // Not yet connected + } + var target = this.selected() + if (!target) { + target = this.thisUser() + } + if (target === this.thisUser()) { + target = target.channel() + } + if (target.users) { // Channel + return "Type message to channel '" + target.name() + "' here" + } else { // User + return "Type message to user '" + target.name() + "' here" + } + }) + + this.submitMessageBox = () => { + this.sendMessage(this.selected(), this.messageBox()) + this.messageBox('') + } + + this.sendMessage = (target, message) => { + if (this.connected()) { + // If no target is selected, choose our own user + if (!target) { + target = this.thisUser() + } + // If target is our own user, send to our channel + if (target === this.thisUser()) { + target = target.channel() + } + // Send message + target.model.sendMessage(message) + if (target.users) { // Channel + this.log.push({ + type: 'chat-message-self', + message: sanitize(message), + channel: target + }) + } else { // User + this.log.push({ + type: 'chat-message-self', + message: sanitize(message), + user: target + }) + } + } + } + + this.requestMove = (user, channel) => { + if (this.connected()) { + user.model.setChannel(channel.model) + } + } + + this.requestMute = user => { + if (this.connected()) { + if (user === this.thisUser) { + this.client.setSelfMute(true) + } else { + user.model.setMute(true) + } + } + } + + this.requestDeaf = user => { + if (this.connected()) { + if (user === this.thisUser) { + this.client.setSelfDeaf(true) + } else { + user.model.setDeaf(true) + } + } + } + + this.requestUnmute = user => { + if (this.connected()) { + if (user === this.thisUser) { + this.client.setSelfMute(false) + } else { + user.model.setMute(false) + } + } + } + + this.requestUndeaf = user => { + if (this.connected()) { + if (user === this.thisUser) { + this.client.setSelfDeaf(false) + } else { + user.model.setDeaf(false) + } + } + } + + this._updateLinks = () => { + if (!this.thisUser()) { + return + } + + var allChannels = getAllChannels(this.root(), []) + var ownChannel = this.thisUser().channel().model + var allLinked = findLinks(ownChannel, []) + allChannels.forEach(channel => { + channel.linked(allLinked.indexOf(channel.model) !== -1) + }) + + function findLinks (channel, knownLinks) { + knownLinks.push(channel) + channel.links.forEach(next => { + if (next && knownLinks.indexOf(next) === -1) { + findLinks(next, knownLinks) + } + }) + allChannels.map(c => c.model).forEach(next => { + if (next && knownLinks.indexOf(next) === -1 && next.links.indexOf(channel) !== -1) { + findLinks(next, knownLinks) + } + }) + return knownLinks + } + + function getAllChannels (channel, channels) { + channels.push(channel) + channel.channels().forEach(next => getAllChannels(next, channels)) + return channels + } + } + + this.openSourceCode = () => { + var homepage = require('../package.json').homepage + window.open(homepage, '_blank').focus() + } + } +} +var ui = new GlobalBindings() + +// Used only for debugging +window.mumbleUi = ui + +window.onload = function () { + var queryParams = url.parse(document.location.href, true).query + if (queryParams.address) { + ui.connectDialog.address(queryParams.address) + } + if (queryParams.port) { + ui.connectDialog.port(queryParams.port) + } + if (queryParams.token) { + ui.connectDialog.token(queryParams.token) + } + if (queryParams.username) { + ui.connectDialog.username(queryParams.username) + } + ko.applyBindings(ui) +} + +function log () { + console.log.apply(console, arguments) + var args = [] + for (var i = 0; i < arguments.length; i++) { + args.push(arguments[i]) + } + ui.log.push({ + type: 'generic', + value: args.join(' ') + }) +} + +function compareChannels (c1, c2) { + if (c1.position() === c2.position()) { + return c1.name() === c2.name() ? 0 : c1.name() < c2.name() ? -1 : 1 + } + return c1.position() - c2.position() +} + +function compareUsers (u1, u2) { + return u1.name() === u2.name() ? 0 : u1.name() < u2.name() ? -1 : 1 +} + +function userToState () { + var flags = [] + // TODO: Friend + if (this.uid()) { + flags.push('Authenticated') + } + // TODO: Priority Speaker, Recording + if (this.mute()) { + flags.push('Muted (server)') + } + if (this.deaf()) { + flags.push('Deafened (server)') + } + // TODO: Local Ignore (Text messages), Local Mute + if (this.selfMute()) { + flags.push('Muted (self)') + } + if (this.selfDeaf()) { + flags.push('Deafened (self)') + } + return flags.join(', ') +} + +// Audio input + +var resampler = new Resampler({ + unsafe: true, + type: Resampler.Type.SINC_FASTEST, + ratio: 48000 / audioContext.sampleRate +}) + +var voiceStream +resampler.pipe(chunker(4 * 480)).on('data', function (data) { + if (!voiceStream && ui.client) { + voiceStream = ui.client.createVoiceStream() + } + if (voiceStream) { + voiceStream.write(new Float32Array(data.buffer, data.byteOffset, data.byteLength / 4)) + } +}) + +getUserMedia({ audio: true }, function (err, userMedia) { + if (err) { + log('Cannot initialize user media. Microphone will not work:', err) + } else { + var micStream = new MicrophoneStream(userMedia, { objectMode: true }) + micStream.on('data', function (data) { + resampler.write(Buffer.from(data.getChannelData(0).buffer)) + }) + } +}) diff --git a/package.json b/package.json new file mode 100644 index 0000000..212d37f --- /dev/null +++ b/package.json @@ -0,0 +1,48 @@ +{ + "name": "mumble-web", + "version": "0.0.1", + "description": "An HTML5 Mumble client.", + "scripts": { + "build": "webpack", + "prepublish": "rm -r dist && npm run build", + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "Jonas Herzig ", + "license": "ISC", + "repository": "johni0702/mumble-web", + "homepage": "https://github.com/johni0702/mumble-web", + "files": [ + "dist" + ], + "devDependencies": { + "audio-buffer-utils": "^3.1.2", + "audio-context": "^0.1.0", + "babel-core": "^6.18.2", + "babel-loader": "^6.2.8", + "babel-plugin-transform-runtime": "^6.15.0", + "babel-preset-es2015": "^6.14.0", + "babel-runtime": "^6.18.0", + "brfs": "^1.4.3", + "css-loader": "^0.26.0", + "dompurify": "^0.8.3", + "duplex-maker": "^1.0.0", + "extract-loader": "^0.1.0", + "file-loader": "^0.9.0", + "getusermedia": "^2.0.0", + "html-loader": "^0.4.4", + "json-loader": "^0.5.4", + "knockout": "^3.4.0", + "lodash.assign": "^4.2.0", + "microphone-stream": "^3.0.5", + "raw-loader": "^0.5.1", + "regexp-replace-loader": "0.0.1", + "stream-chunker": "^1.2.8", + "transform-loader": "^0.2.3", + "webpack": "^1.13.3", + "webworkify-webpack-dropin": "^1.1.9", + "libsamplerate.js": "^1.0.0", + "mumble-client-codecs-browser": "^1.0.1", + "mumble-client-websocket": "^1.0.0", + "web-audio-buffer-queue": "^1.0.0" + } +} diff --git a/themes/MetroMumbleLight/loading.css b/themes/MetroMumbleLight/loading.css new file mode 100644 index 0000000..b5d9a41 --- /dev/null +++ b/themes/MetroMumbleLight/loading.css @@ -0,0 +1,33 @@ +.loading-container { + position: absolute; + top: 0; + width: 100%; + height: 100%; + background-color: #eee; + z-index: 1000; +} + +.loading-circle { + box-sizing: border-box; + width: 80px; + height: 80px; + position: absolute; + top: calc(50% - 40px); + left: calc(50% - 40px); + border-radius: 100%; + border: 10px solid #ddd; + border-top-color: #999; + animation: spin 1s infinite linear; +} + +@keyframes spin { + 100% { + transform: rotate(360deg); + } +} + +.loaded { + top: -100%; + transition: top 1s; + transition-delay: 2s; +} diff --git a/themes/MetroMumbleLight/main.css b/themes/MetroMumbleLight/main.css new file mode 100644 index 0000000..c3ad28f --- /dev/null +++ b/themes/MetroMumbleLight/main.css @@ -0,0 +1,252 @@ +html, body { + background-color: #eee; + margin: 0; + overflow: hidden; + height: 100% +} +#container { + height: 98%; + margin: 0 1% 0 1%; +} +#container::before { + display: block; + content: ""; + height: 1%; +} +.channel-root-container { + text-size: 16px; + margin-left: 2px; + background-color: white; + border: 1px solid lightgray; + float: left; + width: calc(60% - 6px); + height: calc(100% - 38px); + border-radius: 3px; + overflow-x: hidden; + overflow-y: auto; +} +.chat { + margin-right: 2px; + float: left; + width: 40%; + height: calc(100% - 38px); +} +.log { + background-color: white; + height: calc(100% - 42px); + padding: 5px; + border: 1px lightgray solid; + border-radius: 3px; + overflow-x: hidden; + overflow-y: scroll; +} +.branch img { + height: 19px; +} +.branch { + float: left; + padding-top: 3px; + padding-bottom: 3px; + background-color: white; + margin-right: +} +.channel-sub { + margin-left: 9px; + border-left: 1px transparent solid; + padding-left: 9px; +} +.channel-wrapper:nth-last-child(n + 2) > .branch:not(:empty) + .channel-sub { + border-left: 1px lightgray solid; +} +.channel-tree, +.user-wrapper { + margin-left: 9px; +} +.channel-tree, +.user-tree { + float: left; +} +.channel-tree::before, +.user-tree::before { + content: ""; + display: block; + position: relative; + width: 9px; + border-left: 1px lightgray solid; + border-bottom: 1px lightgray solid; + height: 14px; +} +.channel-wrapper:nth-last-child(n + 2) > .channel-tree:after, +.user-wrapper:nth-last-child(n + 2) .user-tree:after { + content: ""; + display: block; + position: relative; + width: 0px; + border-left: 1px lightgray solid; + height: 14px; +} +.user { + margin-left: 9px; +} +.user-status, .channel-status { + float: right; +} +.user,.channel{ + height: 23px; + padding: 2px; + border: 1px solid transparent; +} +.selected { + background-color: lightblue !important; + border: 1px solid gray; + border-radius: 3px; +} +.user:hover,.channel:hover { + background-color: lightgray; +} +.thisClient { + font-weight: bold +} +.currentChannel { + font-weight: bold +} +.user-status img, .channel-status img { + margin-top: 2px; + width: 19px; + height: 19px +} +.channel img, .user img { + width: auto; + height: 19px; +} +.channel-name, .user-name { + display: inline; +} +.channel:hover .tooltip, .user:hover .tooltip { + visibility: visible; + height: auto; + transition-delay: 1s; +} +.tooltip { + visibility: hidden; + height: 0px; + background: white; + border: 1px solid gray; + margin-top: 16px; + margin-left: 30px; + padding: 10px; + position: absolute; + z-index: 100; +} +.toolbar { + height: 36px; +} +.toolbar img { + height: 28px; + width: 28px; + padding: 2px; + border: 1px solid transparent; + border-radius: 3px; +} +.toolbar img:hover { + border: 1px solid #bbb; + background-color: #ddd; +} +.toolbar .tb-active { + border: 1px solid #bbb; + background-color: white; +} +.divider { + display: inline-block; + height: 32px; + border-left: 1px lightgray solid; +} +.handle-horizontal { + width: auto !important; + border: none !important; + background-color: #eee !important; +} +.handle-vertical { + display: none; +} +.channel-icon .channel-icon-active { + display: none; +} +.channel-tag { + font-weight: bold; + color: orange; +} +.user-tag { + font-weight: bold; + color: green; +} +#message-box { + width: 100%; + border: none; + background: none; + margin: 5px 0 5px 0; + padding: 0; + height: 20px; +} +form { + margin: 0; + padding: 0; +} +.message-content p { + margin: 0; +} +.tb-information, .tb-record, .tb-comment, .tb-settings{ + filter: grayscale(100%); +} +.dialog-header { + height: 20px; + width: calc(100% - 10px); + padding: 5px; + text-align: center; + color: white; + background-color: gray; + border-bottom: 1px solid darkgray; +} +.dialog-footer { + margin: 10px; + margin-bottom: 0px; +} +.dialog-close { + float: left; +} +.dialog-submit { + float: right; +} +.dialog-close, .dialog-submit { + width: 45%; + font-size: 15px; + border: 1px gray solid; + border-radius: 3px; + background-color: white; + color: black; + padding: 1px; +} +.connect-dialog table { + text-align: center; + width: 100% +} +.connect-dialog { + position: absolute; + width: 300px; + height: 197px; + top: calc(50% - 100px); + left: calc(50% - 150px); + background-color: #eee; + border: 1px gray solid; + box-shadow: 0px 4px 10px rgba(0, 0, 0, 0.25); + z-index: 20; +} +.connect-dialog input[type=text] { + font-size: 15px; + border: 1px gray solid; + border-radius: 3px; + background-color: white; + color: black; + padding: 2px; + width: calc(100% - 8px); +} diff --git a/themes/MetroMumbleLight/svg/applications-internet.svg b/themes/MetroMumbleLight/svg/applications-internet.svg new file mode 100644 index 0000000..85bbbce --- /dev/null +++ b/themes/MetroMumbleLight/svg/applications-internet.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + diff --git a/themes/MetroMumbleLight/svg/audio-input-microphone-muted.svg b/themes/MetroMumbleLight/svg/audio-input-microphone-muted.svg new file mode 100644 index 0000000..b5e433a --- /dev/null +++ b/themes/MetroMumbleLight/svg/audio-input-microphone-muted.svg @@ -0,0 +1,16 @@ + + + + + + + + + diff --git a/themes/MetroMumbleLight/svg/audio-input-microphone.svg b/themes/MetroMumbleLight/svg/audio-input-microphone.svg new file mode 100644 index 0000000..c462f75 --- /dev/null +++ b/themes/MetroMumbleLight/svg/audio-input-microphone.svg @@ -0,0 +1,16 @@ + + + + + + + + + diff --git a/themes/MetroMumbleLight/svg/audio-output-deafened.svg b/themes/MetroMumbleLight/svg/audio-output-deafened.svg new file mode 100644 index 0000000..8e22f09 --- /dev/null +++ b/themes/MetroMumbleLight/svg/audio-output-deafened.svg @@ -0,0 +1,15 @@ + + + + + + + + + + diff --git a/themes/MetroMumbleLight/svg/audio-output.svg b/themes/MetroMumbleLight/svg/audio-output.svg new file mode 100644 index 0000000..bae1168 --- /dev/null +++ b/themes/MetroMumbleLight/svg/audio-output.svg @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/themes/MetroMumbleLight/svg/authenticated.svg b/themes/MetroMumbleLight/svg/authenticated.svg new file mode 100644 index 0000000..81b9886 --- /dev/null +++ b/themes/MetroMumbleLight/svg/authenticated.svg @@ -0,0 +1,7 @@ + + + + + + diff --git a/themes/MetroMumbleLight/svg/branch_closed.svg b/themes/MetroMumbleLight/svg/branch_closed.svg new file mode 100644 index 0000000..56c90d1 --- /dev/null +++ b/themes/MetroMumbleLight/svg/branch_closed.svg @@ -0,0 +1,7 @@ + + + + + + diff --git a/themes/MetroMumbleLight/svg/branch_open.svg b/themes/MetroMumbleLight/svg/branch_open.svg new file mode 100644 index 0000000..57fb6b0 --- /dev/null +++ b/themes/MetroMumbleLight/svg/branch_open.svg @@ -0,0 +1,7 @@ + + + + + + diff --git a/themes/MetroMumbleLight/svg/channel.svg b/themes/MetroMumbleLight/svg/channel.svg new file mode 100644 index 0000000..40c6dd6 --- /dev/null +++ b/themes/MetroMumbleLight/svg/channel.svg @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/themes/MetroMumbleLight/svg/channel_active.svg b/themes/MetroMumbleLight/svg/channel_active.svg new file mode 100644 index 0000000..40c6dd6 --- /dev/null +++ b/themes/MetroMumbleLight/svg/channel_active.svg @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/themes/MetroMumbleLight/svg/channel_linked.svg b/themes/MetroMumbleLight/svg/channel_linked.svg new file mode 100644 index 0000000..ec5892d --- /dev/null +++ b/themes/MetroMumbleLight/svg/channel_linked.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + diff --git a/themes/MetroMumbleLight/svg/comment.svg b/themes/MetroMumbleLight/svg/comment.svg new file mode 100644 index 0000000..a6351af --- /dev/null +++ b/themes/MetroMumbleLight/svg/comment.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + diff --git a/themes/MetroMumbleLight/svg/comment_seen.svg b/themes/MetroMumbleLight/svg/comment_seen.svg new file mode 100644 index 0000000..6261099 --- /dev/null +++ b/themes/MetroMumbleLight/svg/comment_seen.svg @@ -0,0 +1,9 @@ + + + + + + diff --git a/themes/MetroMumbleLight/svg/config_basic.svg b/themes/MetroMumbleLight/svg/config_basic.svg new file mode 100644 index 0000000..f450b30 --- /dev/null +++ b/themes/MetroMumbleLight/svg/config_basic.svg @@ -0,0 +1,24 @@ + + + + + + diff --git a/themes/MetroMumbleLight/svg/deafened_self.svg b/themes/MetroMumbleLight/svg/deafened_self.svg new file mode 100644 index 0000000..8e22f09 --- /dev/null +++ b/themes/MetroMumbleLight/svg/deafened_self.svg @@ -0,0 +1,15 @@ + + + + + + + + + + diff --git a/themes/MetroMumbleLight/svg/deafened_server.svg b/themes/MetroMumbleLight/svg/deafened_server.svg new file mode 100644 index 0000000..e0c7ccd --- /dev/null +++ b/themes/MetroMumbleLight/svg/deafened_server.svg @@ -0,0 +1,15 @@ + + + + + + + + + + diff --git a/themes/MetroMumbleLight/svg/default_avatar.svg b/themes/MetroMumbleLight/svg/default_avatar.svg new file mode 100644 index 0000000..11d787f --- /dev/null +++ b/themes/MetroMumbleLight/svg/default_avatar.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + diff --git a/themes/MetroMumbleLight/svg/filter.svg b/themes/MetroMumbleLight/svg/filter.svg new file mode 100644 index 0000000..1af56f1 --- /dev/null +++ b/themes/MetroMumbleLight/svg/filter.svg @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/themes/MetroMumbleLight/svg/filter_off.svg b/themes/MetroMumbleLight/svg/filter_off.svg new file mode 100644 index 0000000..919fafa --- /dev/null +++ b/themes/MetroMumbleLight/svg/filter_off.svg @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/themes/MetroMumbleLight/svg/filter_on.svg b/themes/MetroMumbleLight/svg/filter_on.svg new file mode 100644 index 0000000..53ed7ad --- /dev/null +++ b/themes/MetroMumbleLight/svg/filter_on.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + diff --git a/themes/MetroMumbleLight/svg/handle_horizontal.svg b/themes/MetroMumbleLight/svg/handle_horizontal.svg new file mode 100644 index 0000000..704a71b --- /dev/null +++ b/themes/MetroMumbleLight/svg/handle_horizontal.svg @@ -0,0 +1,11 @@ + + + + + + + + + + diff --git a/themes/MetroMumbleLight/svg/handle_vertical.svg b/themes/MetroMumbleLight/svg/handle_vertical.svg new file mode 100644 index 0000000..8e0a10f --- /dev/null +++ b/themes/MetroMumbleLight/svg/handle_vertical.svg @@ -0,0 +1,11 @@ + + + + + + + + + + diff --git a/themes/MetroMumbleLight/svg/information_icon.svg b/themes/MetroMumbleLight/svg/information_icon.svg new file mode 100644 index 0000000..8c9b3c7 --- /dev/null +++ b/themes/MetroMumbleLight/svg/information_icon.svg @@ -0,0 +1,13 @@ + + + + + + + + + diff --git a/themes/MetroMumbleLight/svg/layout_classic.svg b/themes/MetroMumbleLight/svg/layout_classic.svg new file mode 100644 index 0000000..27d00af --- /dev/null +++ b/themes/MetroMumbleLight/svg/layout_classic.svg @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + Chatbar + Tree + + + + + Log + + + + + + + + + + + + + diff --git a/themes/MetroMumbleLight/svg/layout_custom.svg b/themes/MetroMumbleLight/svg/layout_custom.svg new file mode 100644 index 0000000..aeb7323 --- /dev/null +++ b/themes/MetroMumbleLight/svg/layout_custom.svg @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + Chatbar + Tree + + + + + Log + + + + + + + + + + + + + + + + + + + + diff --git a/themes/MetroMumbleLight/svg/layout_hybrid.svg b/themes/MetroMumbleLight/svg/layout_hybrid.svg new file mode 100644 index 0000000..ac93498 --- /dev/null +++ b/themes/MetroMumbleLight/svg/layout_hybrid.svg @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + Chatbar + Tree + + + + + Log + + + + + + + + + + + + + diff --git a/themes/MetroMumbleLight/svg/layout_stacked.svg b/themes/MetroMumbleLight/svg/layout_stacked.svg new file mode 100644 index 0000000..d8a7c36 --- /dev/null +++ b/themes/MetroMumbleLight/svg/layout_stacked.svg @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + Chatbar + Tree + + + + + Log + + + + + + + + + + + + + + + diff --git a/themes/MetroMumbleLight/svg/media-record.svg b/themes/MetroMumbleLight/svg/media-record.svg new file mode 100644 index 0000000..fee6d6d --- /dev/null +++ b/themes/MetroMumbleLight/svg/media-record.svg @@ -0,0 +1,12 @@ + + + + + + + diff --git a/themes/MetroMumbleLight/svg/mumble.svg b/themes/MetroMumbleLight/svg/mumble.svg new file mode 100644 index 0000000..9cb60a6 --- /dev/null +++ b/themes/MetroMumbleLight/svg/mumble.svg @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + diff --git a/themes/MetroMumbleLight/svg/muted_local.svg b/themes/MetroMumbleLight/svg/muted_local.svg new file mode 100644 index 0000000..30a5712 --- /dev/null +++ b/themes/MetroMumbleLight/svg/muted_local.svg @@ -0,0 +1,13 @@ + + + + + + + diff --git a/themes/MetroMumbleLight/svg/muted_self.svg b/themes/MetroMumbleLight/svg/muted_self.svg new file mode 100644 index 0000000..8cf934f --- /dev/null +++ b/themes/MetroMumbleLight/svg/muted_self.svg @@ -0,0 +1,15 @@ + + + + + + + + + diff --git a/themes/MetroMumbleLight/svg/muted_server.svg b/themes/MetroMumbleLight/svg/muted_server.svg new file mode 100644 index 0000000..d619427 --- /dev/null +++ b/themes/MetroMumbleLight/svg/muted_server.svg @@ -0,0 +1,15 @@ + + + + + + + + + diff --git a/themes/MetroMumbleLight/svg/muted_suppressed.svg b/themes/MetroMumbleLight/svg/muted_suppressed.svg new file mode 100644 index 0000000..e9702ea --- /dev/null +++ b/themes/MetroMumbleLight/svg/muted_suppressed.svg @@ -0,0 +1,15 @@ + + + + + + + + + diff --git a/themes/MetroMumbleLight/svg/priority_speaker.svg b/themes/MetroMumbleLight/svg/priority_speaker.svg new file mode 100644 index 0000000..793f9df --- /dev/null +++ b/themes/MetroMumbleLight/svg/priority_speaker.svg @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + diff --git a/themes/MetroMumbleLight/svg/self_comment.svg b/themes/MetroMumbleLight/svg/self_comment.svg new file mode 100644 index 0000000..25c99ff --- /dev/null +++ b/themes/MetroMumbleLight/svg/self_comment.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + diff --git a/themes/MetroMumbleLight/svg/source-code.svg b/themes/MetroMumbleLight/svg/source-code.svg new file mode 100644 index 0000000..146f66f --- /dev/null +++ b/themes/MetroMumbleLight/svg/source-code.svg @@ -0,0 +1,3 @@ + + + diff --git a/themes/MetroMumbleLight/svg/talking_alt.svg b/themes/MetroMumbleLight/svg/talking_alt.svg new file mode 100644 index 0000000..293f890 --- /dev/null +++ b/themes/MetroMumbleLight/svg/talking_alt.svg @@ -0,0 +1,13 @@ + + + + + + + + diff --git a/themes/MetroMumbleLight/svg/talking_off.svg b/themes/MetroMumbleLight/svg/talking_off.svg new file mode 100644 index 0000000..ed2fce5 --- /dev/null +++ b/themes/MetroMumbleLight/svg/talking_off.svg @@ -0,0 +1,14 @@ + + + + + + + + diff --git a/themes/MetroMumbleLight/svg/talking_on.svg b/themes/MetroMumbleLight/svg/talking_on.svg new file mode 100644 index 0000000..a9305e2 --- /dev/null +++ b/themes/MetroMumbleLight/svg/talking_on.svg @@ -0,0 +1,14 @@ + + + + + + + + diff --git a/themes/MetroMumbleLight/svg/talking_whisper.svg b/themes/MetroMumbleLight/svg/talking_whisper.svg new file mode 100644 index 0000000..53eff05 --- /dev/null +++ b/themes/MetroMumbleLight/svg/talking_whisper.svg @@ -0,0 +1,13 @@ + + + + + + + + diff --git a/themes/MetroMumbleLight/svg/toolbar-comment.svg b/themes/MetroMumbleLight/svg/toolbar-comment.svg new file mode 100644 index 0000000..a6351af --- /dev/null +++ b/themes/MetroMumbleLight/svg/toolbar-comment.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + diff --git a/webpack.config.js b/webpack.config.js new file mode 100644 index 0000000..2f3c905 --- /dev/null +++ b/webpack.config.js @@ -0,0 +1,93 @@ +var theme = 'MetroMumbleLight' + +var path = require('path') + +module.exports = { + entry: [ + './app/index.js', + './app/index.html' + ], + output: { + filename: 'index.js', + path: './dist' + }, + module: { + postLoaders: [ + { + include: /mumble-streams\/lib\/data.js/, + loader: 'transform-loader?brfs' + } + ], + loaders: [ + { + test: /\.js$/, + exclude: /node_modules/, + loader: 'babel-loader', + query: { + presets: ['es2015'], + plugins: ['transform-runtime'] + } + }, + { + test: /\.html$/, + loaders: [ + 'file-loader?name=[name].[ext]', + 'extract-loader', + 'html-loader?' + JSON.stringify({ + attrs: ['img:src', 'link:href'], + interpolate: 'require', + root: theme + }) + ] + }, + { + test: /\.css$/, + loaders: [ + 'file-loader', + 'extract-loader', + 'css-loader' + ] + }, + { + test: /manifest\.json$|\.xml$/, + loaders: [ + 'file-loader', + 'extract-loader', + 'regexp-replace-loader?' + JSON.stringify({ + match: { + pattern: "#require\\('([^']*)'\\)", + flags: 'g' + }, + replaceWith: '"+require("$1")+"' + }), + 'raw-loader' + ] + }, + { + test: /\.json$/, + exclude: /manifest\.json$/, + loader: 'json-loader' + }, + { + test: /\.(svg|png|ico)$/, + loader: 'file-loader' + } + ] + }, + resolve: { + alias: { + webworkify: 'webworkify-webpack-dropin' + }, + root: [ + path.resolve('./themes/') + ] + }, + includes: { + pattern: function (filepath) { + return { + re: /#require\((.+)\)/, + index: 1 + } + } + } +}