mirror of
				https://github.com/retspen/webvirtcloud
				synced 2025-07-31 12:41:08 +00:00 
			
		
		
		
	Merge pull request #176 from catborise/master
console fn-keys functionality correction
This commit is contained in:
		
						commit
						bcd13c29fe
					
				
					 58 changed files with 64763 additions and 17445 deletions
				
			
		| 
						 | 
				
			
			@ -66,30 +66,30 @@
 | 
			
		|||
        <div class="collapse navbar-collapse">
 | 
			
		||||
            <ul class="nav navbar-nav">
 | 
			
		||||
                <li class="dropdown">
 | 
			
		||||
                  <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">Send key(s) <span class="caret"></span></a>
 | 
			
		||||
                  <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">{% trans "Send key(s)" %} <span class="caret"></span></a>
 | 
			
		||||
                  <ul class="dropdown-menu" role="menu">
 | 
			
		||||
                      <li onclick='sendCtrlAltDel();'><a href='#'>Ctrl+Alt+Del</a></li>
 | 
			
		||||
                      <li id="ctrlaltdel"><a href='#'>Ctrl+Alt+Del</a></li>
 | 
			
		||||
                      <li class="divider"></li>
 | 
			
		||||
                      <li onclick='sendCtrlAltFN(0);'><a href='#'>Ctrl+Alt+F1</a></li>
 | 
			
		||||
                      <li onclick='sendCtrlAltFN(1);'><a href='#'>Ctrl+Alt+F2</a></li>
 | 
			
		||||
                      <li onclick='sendCtrlAltFN(2);'><a href='#'>Ctrl+Alt+F3</a></li>
 | 
			
		||||
                      <li onclick='sendCtrlAltFN(3);'><a href='#'>Ctrl+Alt+F4</a></li>
 | 
			
		||||
                      <li onclick='sendCtrlAltFN(4);'><a href='#'>Ctrl+Alt+F5</a></li>
 | 
			
		||||
                      <li onclick='sendCtrlAltFN(5);'><a href='#'>Ctrl+Alt+F6</a></li>
 | 
			
		||||
                      <li onclick='sendCtrlAltFN(6);'><a href='#'>Ctrl+Alt+F7</a></li>
 | 
			
		||||
                      <li onclick='sendCtrlAltFN(7);'><a href='#'>Ctrl+Alt+F8</a></li>
 | 
			
		||||
                      <li onclick='sendCtrlAltFN(8);'><a href='#'>Ctrl+Alt+F9</a></li>
 | 
			
		||||
                      <li onclick='sendCtrlAltFN(9);'><a href='#'>Ctrl+Alt+F10</a></li>
 | 
			
		||||
                      <li onclick='sendCtrlAltFN(10);'><a href='#'>Ctrl+Alt+F11</a></li>
 | 
			
		||||
                      <li onclick='sendCtrlAltFN(11);'><a href='#'>Ctrl+Alt+F12</a></li>
 | 
			
		||||
                      <li id="ctrlaltf1"><a href='#'>Ctrl+Alt+F1</a></li>
 | 
			
		||||
                      <li id="ctrlaltf2"><a href='#'>Ctrl+Alt+F2</a></li>
 | 
			
		||||
                      <li id="ctrlaltf3"><a href='#'>Ctrl+Alt+F3</a></li>
 | 
			
		||||
                      <li id="ctrlaltf4"><a href='#'>Ctrl+Alt+F4</a></li>
 | 
			
		||||
                      <li id="ctrlaltf5"><a href='#'>Ctrl+Alt+F5</a></li>
 | 
			
		||||
                      <li id="ctrlaltf6"><a href='#'>Ctrl+Alt+F6</a></li>
 | 
			
		||||
                      <li id="ctrlaltf7"><a href='#'>Ctrl+Alt+F7</a></li>
 | 
			
		||||
                      <li id="ctrlaltf8"><a href='#'>Ctrl+Alt+F8</a></li>
 | 
			
		||||
                      <li id="ctrlaltf9"><a href='#'>Ctrl+Alt+F9</a></li>
 | 
			
		||||
                      <li id="ctrlaltf10"><a href='#'>Ctrl+Alt+F10</a></li>
 | 
			
		||||
                      <li id="ctrlaltf11"><a href='#'>Ctrl+Alt+F11</a></li>
 | 
			
		||||
                      <li id="ctrlaltf12"><a href='#'>Ctrl+Alt+F12</a></li>
 | 
			
		||||
                  </ul>
 | 
			
		||||
                </li>
 | 
			
		||||
                <li id="fullscreen_button"><a href='#'>{% trans "Fullscreen" %}</a></li>
 | 
			
		||||
               </li>
 | 
			
		||||
               <li id="fullscreen_button"><a href='#'>{% trans "Fullscreen" %}</a></li>
 | 
			
		||||
{% block navbarmenu %}{% endblock %}
 | 
			
		||||
            </ul>
 | 
			
		||||
        </div>
 | 
			
		||||
    </div>
 | 
			
		||||
</nav>
 | 
			
		||||
           </ul>
 | 
			
		||||
       </div>
 | 
			
		||||
   </div>
 | 
			
		||||
/nav>
 | 
			
		||||
<div id='main_container' class="container">
 | 
			
		||||
{% block content %}{% endblock %}
 | 
			
		||||
</div>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -63,7 +63,7 @@
 | 
			
		|||
 | 
			
		||||
{% block content %}
 | 
			
		||||
 | 
			
		||||
        <div id="login">
 | 
			
		||||
        <div id="login" hidden>
 | 
			
		||||
            <span class="logo">SPICE</span>
 | 
			
		||||
            <label for="host">Host:</label> <input type='text' id='host' value='{{ ws_host }}'> <!-- localhost -->
 | 
			
		||||
            <label for="port">Port:</label> <input type='text' id='port' value='{{ ws_port }}'>
 | 
			
		||||
| 
						 | 
				
			
			@ -188,32 +188,8 @@
 | 
			
		|||
                resize_helper(sc);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            function sendCtrlAltFN(f) {
 | 
			
		||||
                if (sc && sc.inputs && sc.inputs.state === "ready"){
 | 
			
		||||
                    var keys_code=[KEY_F1,KEY_F2,KEY_F3,KEY_F4,KEY_F5,KEY_F6,KEY_F7,KEY_F8,KEY_F9,KEY_F10,KEY_F11,KEY_F12];
 | 
			
		||||
 | 
			
		||||
                    if (keys_code[f]==undefined) {
 | 
			
		||||
                        return;
 | 
			
		||||
                    }
 | 
			
		||||
                    var key = new SpiceMsgcKeyDown();
 | 
			
		||||
                    var msg = new SpiceMiniData();
 | 
			
		||||
 | 
			
		||||
                    update_modifier(true, KEY_LCtrl, sc);
 | 
			
		||||
                    update_modifier(true, KEY_Alt, sc);
 | 
			
		||||
 | 
			
		||||
                    key.code = keys_code[f];
 | 
			
		||||
                    msg.build_msg(SPICE_MSGC_INPUTS_KEY_DOWN, key);
 | 
			
		||||
                    sc.inputs.send_msg(msg);
 | 
			
		||||
                    msg.build_msg(SPICE_MSGC_INPUTS_KEY_UP, key);
 | 
			
		||||
                    sc.inputs.send_msg(msg);
 | 
			
		||||
 | 
			
		||||
                    if(Ctrl_state == false) update_modifier(false, KEY_LCtrl, sc);
 | 
			
		||||
                    if(Alt_state == false) update_modifier(false, KEY_Alt, sc);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
             function fullscreen() {
 | 
			
		||||
                var screen=document.getElementById('spice-area');
 | 
			
		||||
            function fullscreen() {
 | 
			
		||||
                var screen=document.getElementById('spice-screen');
 | 
			
		||||
                if(screen.requestFullscreen) {
 | 
			
		||||
                    screen.requestFullscreen();
 | 
			
		||||
                } else if(screen.mozRequestFullScreen) {
 | 
			
		||||
| 
						 | 
				
			
			@ -236,7 +212,19 @@
 | 
			
		|||
            });
 | 
			
		||||
            */
 | 
			
		||||
            document.getElementById("fullscreen_button").addEventListener('click', fullscreen);
 | 
			
		||||
 | 
			
		||||
            document.getElementById('ctrlaltdel').addEventListener('click', sendCtrlAltDel);
 | 
			
		||||
            document.getElementById('ctrlaltf1').addEventListener('click', function(){sendCtrlAltFN(0);});
 | 
			
		||||
            document.getElementById('ctrlaltf2').addEventListener('click', function(){sendCtrlAltFN(1);});
 | 
			
		||||
            document.getElementById('ctrlaltf3').addEventListener('click', function(){sendCtrlAltFN(2);});
 | 
			
		||||
            document.getElementById('ctrlaltf4').addEventListener('click', function(){sendCtrlAltFN(3);});
 | 
			
		||||
            document.getElementById('ctrlaltf5').addEventListener('click', function(){sendCtrlAltFN(4);});
 | 
			
		||||
            document.getElementById('ctrlaltf6').addEventListener('click', function(){sendCtrlAltFN(5);});
 | 
			
		||||
            document.getElementById('ctrlaltf7').addEventListener('click', function(){sendCtrlAltFN(6);});
 | 
			
		||||
            document.getElementById('ctrlaltf8').addEventListener('click', function(){sendCtrlAltFN(7);});
 | 
			
		||||
            document.getElementById('ctrlaltf9').addEventListener('click', function(){sendCtrlAltFN(8);});
 | 
			
		||||
            document.getElementById('ctrlaltf10').addEventListener('click', function(){sendCtrlAltFN(9);});
 | 
			
		||||
            document.getElementById('ctrlaltf11').addEventListener('click', function(){sendCtrlAltFN(10);});
 | 
			
		||||
            document.getElementById('ctrlaltf12').addEventListener('click', function(){sendCtrlAltFN(11);});
 | 
			
		||||
            connect();
 | 
			
		||||
        </script>
 | 
			
		||||
{% endblock %}
 | 
			
		||||
{% endblock %}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -27,7 +27,7 @@
 | 
			
		|||
{% load staticfiles %}
 | 
			
		||||
{% block head %}
 | 
			
		||||
 | 
			
		||||
        <title>Spice Javascript client</title>
 | 
			
		||||
        <title>WebVirtCloud - Spice - Lite</title>
 | 
			
		||||
        <script src="{% static "js/spice-html5/spicearraybuffer.js" %}"></script>
 | 
			
		||||
        <script src="{% static "js/spice-html5/enums.js" %}"></script>
 | 
			
		||||
        <script src="{% static "js/spice-html5/atKeynames.js" %}"></script>
 | 
			
		||||
| 
						 | 
				
			
			@ -140,6 +140,8 @@
 | 
			
		|||
 | 
			
		||||
                //password = spice_query_var('password', '');
 | 
			
		||||
                password = '{{ console_passwd | safe }}';
 | 
			
		||||
                if (password === 'None') password = '';
 | 
			
		||||
 | 
			
		||||
                path = spice_query_var('path', 'websockify');
 | 
			
		||||
 | 
			
		||||
                if ((!host) || (!port)) {
 | 
			
		||||
| 
						 | 
				
			
			@ -208,32 +210,8 @@
 | 
			
		|||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            function sendCtrlAltFN(f) {
 | 
			
		||||
                if (sc && sc.inputs && sc.inputs.state === "ready"){
 | 
			
		||||
                    var keys_code=[KEY_F1,KEY_F2,KEY_F3,KEY_F4,KEY_F5,KEY_F6,KEY_F7,KEY_F8,KEY_F9,KEY_F10,KEY_F11,KEY_F12];
 | 
			
		||||
 | 
			
		||||
                    if (keys_code[f]==undefined) {
 | 
			
		||||
                        return;
 | 
			
		||||
                    }
 | 
			
		||||
                    var key = new SpiceMsgcKeyDown();
 | 
			
		||||
                    var msg = new SpiceMiniData();
 | 
			
		||||
 | 
			
		||||
                    update_modifier(true, KEY_LCtrl, sc);
 | 
			
		||||
                    update_modifier(true, KEY_Alt, sc);
 | 
			
		||||
 | 
			
		||||
                    key.code = keys_code[f];
 | 
			
		||||
                    msg.build_msg(SPICE_MSGC_INPUTS_KEY_DOWN, key);
 | 
			
		||||
                    sc.inputs.send_msg(msg);
 | 
			
		||||
                    msg.build_msg(SPICE_MSGC_INPUTS_KEY_UP, key);
 | 
			
		||||
                    sc.inputs.send_msg(msg);
 | 
			
		||||
 | 
			
		||||
                    if(Ctrl_state == false) update_modifier(false, KEY_LCtrl, sc);
 | 
			
		||||
                    if(Alt_state == false) update_modifier(false, KEY_Alt, sc);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            function fullscreen() {
 | 
			
		||||
                var screen=document.getElementById('spice-area');
 | 
			
		||||
                var screen=document.getElementById('spice-screen');
 | 
			
		||||
                if(screen.requestFullscreen) {
 | 
			
		||||
                    screen.requestFullscreen();
 | 
			
		||||
                } else if(screen.mozRequestFullScreen) {
 | 
			
		||||
| 
						 | 
				
			
			@ -257,6 +235,19 @@
 | 
			
		|||
            });
 | 
			
		||||
            */
 | 
			
		||||
            document.getElementById("fullscreen_button").addEventListener('click', fullscreen);
 | 
			
		||||
            document.getElementById('ctrlaltdel').addEventListener('click', sendCtrlAltDel);
 | 
			
		||||
            document.getElementById('ctrlaltf1').addEventListener('click', function(){sendCtrlAltFN(0);});
 | 
			
		||||
            document.getElementById('ctrlaltf2').addEventListener('click', function(){sendCtrlAltFN(1);});
 | 
			
		||||
            document.getElementById('ctrlaltf3').addEventListener('click', function(){sendCtrlAltFN(2);});
 | 
			
		||||
            document.getElementById('ctrlaltf4').addEventListener('click', function(){sendCtrlAltFN(3);});
 | 
			
		||||
            document.getElementById('ctrlaltf5').addEventListener('click', function(){sendCtrlAltFN(4);});
 | 
			
		||||
            document.getElementById('ctrlaltf6').addEventListener('click', function(){sendCtrlAltFN(5);});
 | 
			
		||||
            document.getElementById('ctrlaltf7').addEventListener('click', function(){sendCtrlAltFN(6);});
 | 
			
		||||
            document.getElementById('ctrlaltf8').addEventListener('click', function(){sendCtrlAltFN(7);});
 | 
			
		||||
            document.getElementById('ctrlaltf9').addEventListener('click', function(){sendCtrlAltFN(8);});
 | 
			
		||||
            document.getElementById('ctrlaltf10').addEventListener('click', function(){sendCtrlAltFN(9);});
 | 
			
		||||
            document.getElementById('ctrlaltf11').addEventListener('click', function(){sendCtrlAltFN(10);});
 | 
			
		||||
            document.getElementById('ctrlaltf12').addEventListener('click', function(){sendCtrlAltFN(11);});
 | 
			
		||||
            connect();
 | 
			
		||||
        </script>
 | 
			
		||||
{% endblock %}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -16,7 +16,7 @@
 | 
			
		|||
    or the fragment:
 | 
			
		||||
        http://example.com/#host=HOST&port=PORT&encrypt=1
 | 
			
		||||
    -->
 | 
			
		||||
    <title xmlns="http://www.w3.org/1999/html">WebVirtCloud - noVNC</title>
 | 
			
		||||
    <title>WebVirtCloud - noVNC</title>
 | 
			
		||||
 | 
			
		||||
    <meta charset="utf-8" />
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -65,12 +65,26 @@
 | 
			
		|||
    <script type="text/javascript" src="{% static "js/novnc/app/error-handler.js" %}"></script>
 | 
			
		||||
 | 
			
		||||
    <!-- begin scripts -->
 | 
			
		||||
    <script src="{% static "js/novnc/app.js" %}"></script>
 | 
			
		||||
    <!-- promise polyfills promises for IE11 -->
 | 
			
		||||
    <script src="{% static "js/novnc/vendor/promise.js" %}"></script>
 | 
			
		||||
    <!-- ES2015/ES6 modules polyfill -->
 | 
			
		||||
    <script type="module">
 | 
			
		||||
        window._noVNC_has_module_support = true;
 | 
			
		||||
    </script>
 | 
			
		||||
    <script>
 | 
			
		||||
        window.addEventListener("load", function() {
 | 
			
		||||
            if (window._noVNC_has_module_support) return;
 | 
			
		||||
            var loader = document.createElement("script");
 | 
			
		||||
            loader.src = "{% static "js/novnc/vendor/browser-es-module-loader/dist/browser-es-module-loader.js" %}";
 | 
			
		||||
            document.head.appendChild(loader);
 | 
			
		||||
        });
 | 
			
		||||
    </script>
 | 
			
		||||
    <!-- actual script modules -->
 | 
			
		||||
    <script type="module" crossorigin="anonymous" src="{% static "js/novnc/app/ui.js" %}"></script>
 | 
			
		||||
    <!-- end scripts -->
 | 
			
		||||
{% endblock %}
 | 
			
		||||
 | 
			
		||||
{% block content %}
 | 
			
		||||
 | 
			
		||||
    <div id="noVNC_fallback_error" class="noVNC_center">
 | 
			
		||||
        <div>
 | 
			
		||||
            <div>noVNC encountered an error:</div>
 | 
			
		||||
| 
						 | 
				
			
			@ -217,7 +231,7 @@
 | 
			
		|||
                                    <li>
 | 
			
		||||
                                        <label><input id="noVNC_setting_encrypt" type="checkbox" /> Encrypt</label>
 | 
			
		||||
                                    </li>
 | 
			
		||||
                                    <li>
 | 
			
		||||
                                     <li>
 | 
			
		||||
                                        <label for="noVNC_setting_host">Host:</label>
 | 
			
		||||
                                        <input id="noVNC_setting_host" value="{{ ws_host }}"/>
 | 
			
		||||
                                    </li>
 | 
			
		||||
| 
						 | 
				
			
			@ -274,9 +288,7 @@
 | 
			
		|||
        <div id="noVNC_connect_dlg">
 | 
			
		||||
            <div class="noVNC_logo" translate="no"><span>no</span>VNC</div>
 | 
			
		||||
            <div id="noVNC_connect_button">
 | 
			
		||||
                <div>
 | 
			
		||||
                <img src="{% static "js/novnc/app/images/connect.svg" %}"> Connect
 | 
			
		||||
                </div>
 | 
			
		||||
                <div><img src="{% static "js/novnc/app/images/connect.svg" %}"> Connect</div>
 | 
			
		||||
            </div>
 | 
			
		||||
        </div>
 | 
			
		||||
    </div>
 | 
			
		||||
| 
						 | 
				
			
			@ -320,4 +332,4 @@
 | 
			
		|||
        <source src="{% static "js/novnc/app/sounds/bell.oga" %}" type="audio/ogg">
 | 
			
		||||
        <source src="{% static "js/novnc/app/sounds/bell.mp3" %}" type="audio/mpeg">
 | 
			
		||||
    </audio>
 | 
			
		||||
{% endblock %}
 | 
			
		||||
{% endblock %}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,6 +1,7 @@
 | 
			
		|||
{% extends "console-base.html" %}
 | 
			
		||||
{% load i18n %}
 | 
			
		||||
{% load staticfiles %}
 | 
			
		||||
 | 
			
		||||
{% block head %}
 | 
			
		||||
    <!--
 | 
			
		||||
    noVNC example: lightweight example using minimal UI and features
 | 
			
		||||
| 
						 | 
				
			
			@ -14,7 +15,7 @@
 | 
			
		|||
    or the fragment:
 | 
			
		||||
        http://example.com/#host=HOST&port=PORT&encrypt=1
 | 
			
		||||
    -->
 | 
			
		||||
    <title>noVNC</title>
 | 
			
		||||
    <title>WebVirtCloud - noVNC - Lite</title>
 | 
			
		||||
 | 
			
		||||
    <meta charset="utf-8">
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -63,9 +64,7 @@
 | 
			
		|||
    <!-- promise polyfills promises for IE11 -->
 | 
			
		||||
    <script src="{% static "js/novnc/vendor/promise.js" %}"></script>
 | 
			
		||||
    <!-- ES2015/ES6 modules polyfill -->
 | 
			
		||||
    <script type="module">
 | 
			
		||||
        window._noVNC_has_module_support = true;
 | 
			
		||||
    </script>
 | 
			
		||||
    <script type="module"> window._noVNC_has_module_support = true;</script>
 | 
			
		||||
    <script>
 | 
			
		||||
        window.addEventListener("load", function() {
 | 
			
		||||
            if (window._noVNC_has_module_support) return;
 | 
			
		||||
| 
						 | 
				
			
			@ -74,28 +73,8 @@
 | 
			
		|||
            document.head.appendChild(loader);
 | 
			
		||||
        });
 | 
			
		||||
    </script>
 | 
			
		||||
{% endblock %}
 | 
			
		||||
 | 
			
		||||
{% block content %}
 | 
			
		||||
 | 
			
		||||
    <div id="noVNC_status_bar">
 | 
			
		||||
        <div id="noVNC_left_dummy_elem"></div>
 | 
			
		||||
        <div id="noVNC_status">Loading</div>
 | 
			
		||||
        <div id="noVNC_buttons">
 | 
			
		||||
            <input type=button value="Send CtrlAltDel" id="sendCtrlAltDelButton" class="noVNC_shown">
 | 
			
		||||
            <span id="noVNC_power_buttons" class="noVNC_hidden">
 | 
			
		||||
                <input type=button value="Shutdown" id="machineShutdownButton">
 | 
			
		||||
                <input type=button value="Reboot" id="machineRebootButton">
 | 
			
		||||
                <input type=button value="Reset" id="machineResetButton">
 | 
			
		||||
            </span>
 | 
			
		||||
        </div>
 | 
			
		||||
    </div>
 | 
			
		||||
    <div id='vnc_container'></div>
 | 
			
		||||
 | 
			
		||||
{% endblock %}
 | 
			
		||||
 | 
			
		||||
{% block foot %}
 | 
			
		||||
        <!-- actual script modules -->
 | 
			
		||||
            <!-- actual script modules -->
 | 
			
		||||
    <script type="module" crossorigin="anonymous">
 | 
			
		||||
        // Load supporting scripts
 | 
			
		||||
        import * as WebUtil from '{% static "js/novnc/app/webutil.js" %}';
 | 
			
		||||
| 
						 | 
				
			
			@ -125,6 +104,37 @@
 | 
			
		|||
            rfb.sendCredentials({ password: document.getElementById('password_input').value });
 | 
			
		||||
            return false;
 | 
			
		||||
        }
 | 
			
		||||
        function fullscreen() {
 | 
			
		||||
            if (document.fullscreenElement || // alternative standard method
 | 
			
		||||
                document.mozFullScreenElement || // currently working methods
 | 
			
		||||
                document.webkitFullscreenElement ||
 | 
			
		||||
                document.msFullscreenElement) {
 | 
			
		||||
                if (document.exitFullscreen) {
 | 
			
		||||
                    document.exitFullscreen();
 | 
			
		||||
                } else if (document.mozCancelFullScreen) {
 | 
			
		||||
                    document.mozCancelFullScreen();
 | 
			
		||||
                } else if (document.webkitExitFullscreen) {
 | 
			
		||||
                    document.webkitExitFullscreen();
 | 
			
		||||
                } else if (document.msExitFullscreen) {
 | 
			
		||||
                    document.msExitFullscreen();
 | 
			
		||||
                }
 | 
			
		||||
            } else {
 | 
			
		||||
                if (document.documentElement.requestFullscreen) {
 | 
			
		||||
                    document.documentElement.requestFullscreen();
 | 
			
		||||
                } else if (document.documentElement.mozRequestFullScreen) {
 | 
			
		||||
                    document.documentElement.mozRequestFullScreen();
 | 
			
		||||
                } else if (document.documentElement.webkitRequestFullscreen) {
 | 
			
		||||
                    document.documentElement.webkitRequestFullscreen(Element.ALLOW_KEYBOARD_INPUT);
 | 
			
		||||
                } else if (document.body.msRequestFullscreen) {
 | 
			
		||||
                    document.body.msRequestFullscreen();
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            return false;
 | 
			
		||||
        }
 | 
			
		||||
        function sendCtrlAltFN(f) {
 | 
			
		||||
            rfb.sendCtrlAltFN(f);
 | 
			
		||||
            return false;
 | 
			
		||||
        }
 | 
			
		||||
        function sendCtrlAltDel() {
 | 
			
		||||
            rfb.sendCtrlAltDel();
 | 
			
		||||
            return false;
 | 
			
		||||
| 
						 | 
				
			
			@ -187,6 +197,21 @@
 | 
			
		|||
        document.getElementById('machineShutdownButton').onclick = machineShutdown;
 | 
			
		||||
        document.getElementById('machineRebootButton').onclick = machineReboot;
 | 
			
		||||
        document.getElementById('machineResetButton').onclick = machineReset;
 | 
			
		||||
        document.getElementById('fullscreen_button').onclick = fullscreen;
 | 
			
		||||
 | 
			
		||||
        document.getElementById('ctrlaltdel').addEventListener('click', sendCtrlAltDel);
 | 
			
		||||
        document.getElementById('ctrlaltf1').addEventListener('click', function(){sendCtrlAltFN(0);});
 | 
			
		||||
        document.getElementById('ctrlaltf2').addEventListener('click', function(){sendCtrlAltFN(1);});
 | 
			
		||||
        document.getElementById('ctrlaltf3').addEventListener('click', function(){sendCtrlAltFN(2);});
 | 
			
		||||
        document.getElementById('ctrlaltf4').addEventListener('click', function(){sendCtrlAltFN(3);});
 | 
			
		||||
        document.getElementById('ctrlaltf5').addEventListener('click', function(){sendCtrlAltFN(4);});
 | 
			
		||||
        document.getElementById('ctrlaltf6').addEventListener('click', function(){sendCtrlAltFN(5);});
 | 
			
		||||
        document.getElementById('ctrlaltf7').addEventListener('click', function(){sendCtrlAltFN(6);});
 | 
			
		||||
        document.getElementById('ctrlaltf8').addEventListener('click', function(){sendCtrlAltFN(7);});
 | 
			
		||||
        document.getElementById('ctrlaltf9').addEventListener('click', function(){sendCtrlAltFN(8);});
 | 
			
		||||
        document.getElementById('ctrlaltf10').addEventListener('click', function(){sendCtrlAltFN(9);});
 | 
			
		||||
        document.getElementById('ctrlaltf11').addEventListener('click', function(){sendCtrlAltFN(10);});
 | 
			
		||||
        document.getElementById('ctrlaltf12').addEventListener('click', function(){sendCtrlAltFN(11);});
 | 
			
		||||
 | 
			
		||||
        WebUtil.init_logging(WebUtil.getConfigVar('logging', 'warn'));
 | 
			
		||||
        document.title = WebUtil.getConfigVar('title', 'noVNC');
 | 
			
		||||
| 
						 | 
				
			
			@ -244,11 +269,11 @@
 | 
			
		|||
            }
 | 
			
		||||
            url += '/' + path;
 | 
			
		||||
 | 
			
		||||
//            rfb = new RFB(document.body, url,
 | 
			
		||||
 //                         { repeaterID: WebUtil.getConfigVar('repeaterID', ''),
 | 
			
		||||
   //                         shared: WebUtil.getConfigVar('shared', true),
 | 
			
		||||
     //                       credentials: { password: password } });
 | 
			
		||||
            rfb = new RFB(document.getElementById('vnc_container'), url,
 | 
			
		||||
          //rfb = new RFB(document.body, url,
 | 
			
		||||
          //             { repeaterID: WebUtil.getConfigVar('repeaterID', ''),
 | 
			
		||||
          //               shared: WebUtil.getConfigVar('shared', true),
 | 
			
		||||
          //               credentials: { password: password } });
 | 
			
		||||
            rfb = new RFB(document.getElementById('noVNC_container'), url,
 | 
			
		||||
                         { repeaterID: WebUtil.getConfigVar('repeaterID', ''),
 | 
			
		||||
                           shared: WebUtil.getConfigVar('shared', true),
 | 
			
		||||
                           credentials: { password: password } });
 | 
			
		||||
| 
						 | 
				
			
			@ -263,4 +288,21 @@
 | 
			
		|||
            rfb.resizeSession = WebUtil.getConfigVar('resize', false);
 | 
			
		||||
        })();
 | 
			
		||||
    </script>
 | 
			
		||||
{% endblock %}
 | 
			
		||||
{% endblock %}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
{% block content %}
 | 
			
		||||
    <div id="noVNC_status_bar">
 | 
			
		||||
        <div id="noVNC_left_dummy_elem"></div>
 | 
			
		||||
        <div id="noVNC_status">Loading</div>
 | 
			
		||||
        <div id="noVNC_buttons">
 | 
			
		||||
            <input type=button value="Send CtrlAltDel" id="sendCtrlAltDelButton" class="noVNC_shown">
 | 
			
		||||
            <span id="noVNC_power_buttons" class="noVNC_hidden">
 | 
			
		||||
                <input type=button value="Shutdown" id="machineShutdownButton">
 | 
			
		||||
                <input type=button value="Reboot" id="machineRebootButton">
 | 
			
		||||
                <input type=button value="Reset" id="machineResetButton">
 | 
			
		||||
            </span>
 | 
			
		||||
        </div>
 | 
			
		||||
    </div>
 | 
			
		||||
    <div id='noVNC_container'></div>
 | 
			
		||||
{% endblock %}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -111,7 +111,7 @@
 | 
			
		|||
                                                                <button class="btn btn-sm btn-default disabled" title="{% trans "Power Cycle" %}">
 | 
			
		||||
                                                                    <span class="glyphicon glyphicon-refresh"></span>
 | 
			
		||||
                                                                </button>
 | 
			
		||||
                                                                <button class="btn btn-sm btn-default disabled" title="{% trans "VNC Console" %}">
 | 
			
		||||
                                                                <button class="btn btn-sm btn-default disabled" title="{% trans "VNC/Spice Console" %}">
 | 
			
		||||
                                                                    <span class="glyphicon glyphicon-eye-open"></span>
 | 
			
		||||
                                                                </button>
 | 
			
		||||
                                                            {% endifequal %}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										12069
									
								
								static/js/novnc/app.js
									
										
									
									
									
								
							
							
						
						
									
										12069
									
								
								static/js/novnc/app.js
									
										
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							| 
						 | 
				
			
			@ -1,9 +1,3 @@
 | 
			
		|||
'use strict';
 | 
			
		||||
 | 
			
		||||
Object.defineProperty(exports, "__esModule", {
 | 
			
		||||
    value: true
 | 
			
		||||
});
 | 
			
		||||
exports.Localizer = Localizer;
 | 
			
		||||
/*
 | 
			
		||||
 * noVNC: HTML5 VNC client
 | 
			
		||||
 * Copyright (C) 2012 Joel Martin
 | 
			
		||||
| 
						 | 
				
			
			@ -16,7 +10,7 @@ exports.Localizer = Localizer;
 | 
			
		|||
 * Localization Utilities
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
function Localizer() {
 | 
			
		||||
export function Localizer() {
 | 
			
		||||
    // Currently configured language
 | 
			
		||||
    this.language = 'en';
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -41,40 +35,45 @@ Localizer.prototype = {
 | 
			
		|||
            userLanguages = [navigator.language || navigator.userLanguage];
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        for (var i = 0; i < userLanguages.length; i++) {
 | 
			
		||||
        for (var i = 0;i < userLanguages.length;i++) {
 | 
			
		||||
            var userLang = userLanguages[i];
 | 
			
		||||
            userLang = userLang.toLowerCase();
 | 
			
		||||
            userLang = userLang.replace("_", "-");
 | 
			
		||||
            userLang = userLang.split("-");
 | 
			
		||||
 | 
			
		||||
            // Built-in default?
 | 
			
		||||
            if (userLang[0] === 'en' && (userLang[1] === undefined || userLang[1] === 'us')) {
 | 
			
		||||
            if ((userLang[0] === 'en') &&
 | 
			
		||||
                ((userLang[1] === undefined) || (userLang[1] === 'us'))) {
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            // First pass: perfect match
 | 
			
		||||
            for (var j = 0; j < supportedLanguages.length; j++) {
 | 
			
		||||
            for (var j = 0;j < supportedLanguages.length;j++) {
 | 
			
		||||
                var supLang = supportedLanguages[j];
 | 
			
		||||
                supLang = supLang.toLowerCase();
 | 
			
		||||
                supLang = supLang.replace("_", "-");
 | 
			
		||||
                supLang = supLang.split("-");
 | 
			
		||||
 | 
			
		||||
                if (userLang[0] !== supLang[0]) continue;
 | 
			
		||||
                if (userLang[1] !== supLang[1]) continue;
 | 
			
		||||
                if (userLang[0] !== supLang[0])
 | 
			
		||||
                    continue;
 | 
			
		||||
                if (userLang[1] !== supLang[1])
 | 
			
		||||
                    continue;
 | 
			
		||||
 | 
			
		||||
                this.language = supportedLanguages[j];
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            // Second pass: fallback
 | 
			
		||||
            for (var j = 0; j < supportedLanguages.length; j++) {
 | 
			
		||||
            for (var j = 0;j < supportedLanguages.length;j++) {
 | 
			
		||||
                supLang = supportedLanguages[j];
 | 
			
		||||
                supLang = supLang.toLowerCase();
 | 
			
		||||
                supLang = supLang.replace("_", "-");
 | 
			
		||||
                supLang = supLang.split("-");
 | 
			
		||||
 | 
			
		||||
                if (userLang[0] !== supLang[0]) continue;
 | 
			
		||||
                if (supLang[1] !== undefined) continue;
 | 
			
		||||
                if (userLang[0] !== supLang[0])
 | 
			
		||||
                    continue;
 | 
			
		||||
                if (supLang[1] !== undefined)
 | 
			
		||||
                    continue;
 | 
			
		||||
 | 
			
		||||
                this.language = supportedLanguages[j];
 | 
			
		||||
                return;
 | 
			
		||||
| 
						 | 
				
			
			@ -121,31 +120,39 @@ Localizer.prototype = {
 | 
			
		|||
            }
 | 
			
		||||
 | 
			
		||||
            if (enabled) {
 | 
			
		||||
                if (elem.hasAttribute("abbr") && elem.tagName === "TH") {
 | 
			
		||||
                if (elem.hasAttribute("abbr") &&
 | 
			
		||||
                    elem.tagName === "TH") {
 | 
			
		||||
                    translateAttribute(elem, "abbr");
 | 
			
		||||
                }
 | 
			
		||||
                if (elem.hasAttribute("alt") && isAnyOf(elem.tagName, ["AREA", "IMG", "INPUT"])) {
 | 
			
		||||
                if (elem.hasAttribute("alt") &&
 | 
			
		||||
                    isAnyOf(elem.tagName, ["AREA", "IMG", "INPUT"])) {
 | 
			
		||||
                    translateAttribute(elem, "alt");
 | 
			
		||||
                }
 | 
			
		||||
                if (elem.hasAttribute("download") && isAnyOf(elem.tagName, ["A", "AREA"])) {
 | 
			
		||||
                if (elem.hasAttribute("download") &&
 | 
			
		||||
                    isAnyOf(elem.tagName, ["A", "AREA"])) {
 | 
			
		||||
                    translateAttribute(elem, "download");
 | 
			
		||||
                }
 | 
			
		||||
                if (elem.hasAttribute("label") && isAnyOf(elem.tagName, ["MENUITEM", "MENU", "OPTGROUP", "OPTION", "TRACK"])) {
 | 
			
		||||
                if (elem.hasAttribute("label") &&
 | 
			
		||||
                    isAnyOf(elem.tagName, ["MENUITEM", "MENU", "OPTGROUP",
 | 
			
		||||
                                   "OPTION", "TRACK"])) {
 | 
			
		||||
                    translateAttribute(elem, "label");
 | 
			
		||||
                }
 | 
			
		||||
                // FIXME: Should update "lang"
 | 
			
		||||
                if (elem.hasAttribute("placeholder") && isAnyOf(elem.tagName, ["INPUT", "TEXTAREA"])) {
 | 
			
		||||
                if (elem.hasAttribute("placeholder") &&
 | 
			
		||||
                    isAnyOf(elem.tagName, ["INPUT", "TEXTAREA"])) {
 | 
			
		||||
                    translateAttribute(elem, "placeholder");
 | 
			
		||||
                }
 | 
			
		||||
                if (elem.hasAttribute("title")) {
 | 
			
		||||
                    translateAttribute(elem, "title");
 | 
			
		||||
                }
 | 
			
		||||
                if (elem.hasAttribute("value") && elem.tagName === "INPUT" && isAnyOf(elem.getAttribute("type"), ["reset", "button", "submit"])) {
 | 
			
		||||
                if (elem.hasAttribute("value") &&
 | 
			
		||||
                    elem.tagName === "INPUT" &&
 | 
			
		||||
                    isAnyOf(elem.getAttribute("type"), ["reset", "button", "submit"])) {
 | 
			
		||||
                    translateAttribute(elem, "value");
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            for (var i = 0; i < elem.childNodes.length; i++) {
 | 
			
		||||
            for (var i = 0;i < elem.childNodes.length;i++) {
 | 
			
		||||
                var node = elem.childNodes[i];
 | 
			
		||||
                if (node.nodeType === node.ELEMENT_NODE) {
 | 
			
		||||
                    process(node, enabled);
 | 
			
		||||
| 
						 | 
				
			
			@ -156,8 +163,8 @@ Localizer.prototype = {
 | 
			
		|||
        }
 | 
			
		||||
 | 
			
		||||
        process(document.body, true);
 | 
			
		||||
    }
 | 
			
		||||
    },
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
var l10n = exports.l10n = new Localizer();
 | 
			
		||||
exports.default = l10n.get.bind(l10n);
 | 
			
		||||
export var l10n = new Localizer();
 | 
			
		||||
export default l10n.get.bind(l10n);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							| 
						 | 
				
			
			@ -1,54 +1,31 @@
 | 
			
		|||
"use strict";
 | 
			
		||||
/*
 | 
			
		||||
 * noVNC: HTML5 VNC client
 | 
			
		||||
 * Copyright (C) 2012 Joel Martin
 | 
			
		||||
 * Copyright (C) 2013 NTT corp.
 | 
			
		||||
 * Licensed under MPL 2.0 (see LICENSE.txt)
 | 
			
		||||
 *
 | 
			
		||||
 * See README.md for usage and integration instructions.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
Object.defineProperty(exports, "__esModule", {
 | 
			
		||||
    value: true
 | 
			
		||||
});
 | 
			
		||||
exports.init_logging = init_logging;
 | 
			
		||||
exports.getQueryVar = getQueryVar;
 | 
			
		||||
exports.getHashVar = getHashVar;
 | 
			
		||||
exports.getConfigVar = getConfigVar;
 | 
			
		||||
exports.createCookie = createCookie;
 | 
			
		||||
exports.readCookie = readCookie;
 | 
			
		||||
exports.eraseCookie = eraseCookie;
 | 
			
		||||
exports.initSettings = initSettings;
 | 
			
		||||
exports.writeSetting = writeSetting;
 | 
			
		||||
exports.readSetting = readSetting;
 | 
			
		||||
exports.eraseSetting = eraseSetting;
 | 
			
		||||
exports.injectParamIfMissing = injectParamIfMissing;
 | 
			
		||||
exports.fetchJSON = fetchJSON;
 | 
			
		||||
 | 
			
		||||
var _logging = require("../core/util/logging.js");
 | 
			
		||||
import { init_logging as main_init_logging } from '../core/util/logging.js';
 | 
			
		||||
 | 
			
		||||
// init log level reading the logging HTTP param
 | 
			
		||||
function init_logging(level) {
 | 
			
		||||
export function init_logging (level) {
 | 
			
		||||
    "use strict";
 | 
			
		||||
 | 
			
		||||
    if (typeof level !== "undefined") {
 | 
			
		||||
        (0, _logging.init_logging)(level);
 | 
			
		||||
        main_init_logging(level);
 | 
			
		||||
    } else {
 | 
			
		||||
        var param = document.location.href.match(/logging=([A-Za-z0-9\._\-]*)/);
 | 
			
		||||
        (0, _logging.init_logging)(param || undefined);
 | 
			
		||||
        main_init_logging(param || undefined);
 | 
			
		||||
    }
 | 
			
		||||
} /*
 | 
			
		||||
   * noVNC: HTML5 VNC client
 | 
			
		||||
   * Copyright (C) 2012 Joel Martin
 | 
			
		||||
   * Copyright (C) 2013 NTT corp.
 | 
			
		||||
   * Licensed under MPL 2.0 (see LICENSE.txt)
 | 
			
		||||
   *
 | 
			
		||||
   * See README.md for usage and integration instructions.
 | 
			
		||||
   */
 | 
			
		||||
 | 
			
		||||
;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// Read a query string variable
 | 
			
		||||
function getQueryVar(name, defVal) {
 | 
			
		||||
export function getQueryVar (name, defVal) {
 | 
			
		||||
    "use strict";
 | 
			
		||||
 | 
			
		||||
    var re = new RegExp('.*[?&]' + name + '=([^&#]*)'),
 | 
			
		||||
        match = document.location.href.match(re);
 | 
			
		||||
    if (typeof defVal === 'undefined') {
 | 
			
		||||
        defVal = null;
 | 
			
		||||
    }
 | 
			
		||||
    if (typeof defVal === 'undefined') { defVal = null; }
 | 
			
		||||
    if (match) {
 | 
			
		||||
        return decodeURIComponent(match[1]);
 | 
			
		||||
    } else {
 | 
			
		||||
| 
						 | 
				
			
			@ -57,14 +34,11 @@ function getQueryVar(name, defVal) {
 | 
			
		|||
};
 | 
			
		||||
 | 
			
		||||
// Read a hash fragment variable
 | 
			
		||||
function getHashVar(name, defVal) {
 | 
			
		||||
export function getHashVar (name, defVal) {
 | 
			
		||||
    "use strict";
 | 
			
		||||
 | 
			
		||||
    var re = new RegExp('.*[&#]' + name + '=([^&]*)'),
 | 
			
		||||
        match = document.location.hash.match(re);
 | 
			
		||||
    if (typeof defVal === 'undefined') {
 | 
			
		||||
        defVal = null;
 | 
			
		||||
    }
 | 
			
		||||
    if (typeof defVal === 'undefined') { defVal = null; }
 | 
			
		||||
    if (match) {
 | 
			
		||||
        return decodeURIComponent(match[1]);
 | 
			
		||||
    } else {
 | 
			
		||||
| 
						 | 
				
			
			@ -74,9 +48,8 @@ function getHashVar(name, defVal) {
 | 
			
		|||
 | 
			
		||||
// Read a variable from the fragment or the query string
 | 
			
		||||
// Fragment takes precedence
 | 
			
		||||
function getConfigVar(name, defVal) {
 | 
			
		||||
export function getConfigVar (name, defVal) {
 | 
			
		||||
    "use strict";
 | 
			
		||||
 | 
			
		||||
    var val = getHashVar(name);
 | 
			
		||||
    if (val === null) {
 | 
			
		||||
        val = getQueryVar(name, defVal);
 | 
			
		||||
| 
						 | 
				
			
			@ -89,13 +62,12 @@ function getConfigVar(name, defVal) {
 | 
			
		|||
 */
 | 
			
		||||
 | 
			
		||||
// No days means only for this browser session
 | 
			
		||||
function createCookie(name, value, days) {
 | 
			
		||||
export function createCookie (name, value, days) {
 | 
			
		||||
    "use strict";
 | 
			
		||||
 | 
			
		||||
    var date, expires;
 | 
			
		||||
    if (days) {
 | 
			
		||||
        date = new Date();
 | 
			
		||||
        date.setTime(date.getTime() + days * 24 * 60 * 60 * 1000);
 | 
			
		||||
        date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
 | 
			
		||||
        expires = "; expires=" + date.toGMTString();
 | 
			
		||||
    } else {
 | 
			
		||||
        expires = "";
 | 
			
		||||
| 
						 | 
				
			
			@ -110,27 +82,21 @@ function createCookie(name, value, days) {
 | 
			
		|||
    document.cookie = name + "=" + value + expires + "; path=/" + secure;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
function readCookie(name, defaultValue) {
 | 
			
		||||
export function readCookie (name, defaultValue) {
 | 
			
		||||
    "use strict";
 | 
			
		||||
 | 
			
		||||
    var nameEQ = name + "=",
 | 
			
		||||
        ca = document.cookie.split(';');
 | 
			
		||||
 | 
			
		||||
    for (var i = 0; i < ca.length; i += 1) {
 | 
			
		||||
        var c = ca[i];
 | 
			
		||||
        while (c.charAt(0) === ' ') {
 | 
			
		||||
            c = c.substring(1, c.length);
 | 
			
		||||
        }
 | 
			
		||||
        if (c.indexOf(nameEQ) === 0) {
 | 
			
		||||
            return c.substring(nameEQ.length, c.length);
 | 
			
		||||
        }
 | 
			
		||||
        while (c.charAt(0) === ' ') { c = c.substring(1, c.length); }
 | 
			
		||||
        if (c.indexOf(nameEQ) === 0) { return c.substring(nameEQ.length, c.length); }
 | 
			
		||||
    }
 | 
			
		||||
    return typeof defaultValue !== 'undefined' ? defaultValue : null;
 | 
			
		||||
    return (typeof defaultValue !== 'undefined') ? defaultValue : null;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
function eraseCookie(name) {
 | 
			
		||||
export function eraseCookie (name) {
 | 
			
		||||
    "use strict";
 | 
			
		||||
 | 
			
		||||
    createCookie(name, "", -1);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -140,9 +106,8 @@ function eraseCookie(name) {
 | 
			
		|||
 | 
			
		||||
var settings = {};
 | 
			
		||||
 | 
			
		||||
function initSettings(callback /*, ...callbackArgs */) {
 | 
			
		||||
export function initSettings (callback /*, ...callbackArgs */) {
 | 
			
		||||
    "use strict";
 | 
			
		||||
 | 
			
		||||
    var callbackArgs = Array.prototype.slice.call(arguments, 1);
 | 
			
		||||
    if (window.chrome && window.chrome.storage) {
 | 
			
		||||
        window.chrome.storage.sync.get(function (cfg) {
 | 
			
		||||
| 
						 | 
				
			
			@ -160,9 +125,8 @@ function initSettings(callback /*, ...callbackArgs */) {
 | 
			
		|||
};
 | 
			
		||||
 | 
			
		||||
// No days means only for this browser session
 | 
			
		||||
function writeSetting(name, value) {
 | 
			
		||||
export function writeSetting (name, value) {
 | 
			
		||||
    "use strict";
 | 
			
		||||
 | 
			
		||||
    if (window.chrome && window.chrome.storage) {
 | 
			
		||||
        if (settings[name] !== value) {
 | 
			
		||||
            settings[name] = value;
 | 
			
		||||
| 
						 | 
				
			
			@ -173,9 +137,8 @@ function writeSetting(name, value) {
 | 
			
		|||
    }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
function readSetting(name, defaultValue) {
 | 
			
		||||
export function readSetting (name, defaultValue) {
 | 
			
		||||
    "use strict";
 | 
			
		||||
 | 
			
		||||
    var value;
 | 
			
		||||
    if (window.chrome && window.chrome.storage) {
 | 
			
		||||
        value = settings[name];
 | 
			
		||||
| 
						 | 
				
			
			@ -192,9 +155,8 @@ function readSetting(name, defaultValue) {
 | 
			
		|||
    }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
function eraseSetting(name) {
 | 
			
		||||
export function eraseSetting (name) {
 | 
			
		||||
    "use strict";
 | 
			
		||||
 | 
			
		||||
    if (window.chrome && window.chrome.storage) {
 | 
			
		||||
        window.chrome.storage.sync.remove(name);
 | 
			
		||||
        delete settings[name];
 | 
			
		||||
| 
						 | 
				
			
			@ -203,7 +165,7 @@ function eraseSetting(name) {
 | 
			
		|||
    }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
function injectParamIfMissing(path, param, value) {
 | 
			
		||||
export function injectParamIfMissing (path, param, value) {
 | 
			
		||||
    // force pretend that we're dealing with a relative path
 | 
			
		||||
    // (assume that we wanted an extra if we pass one in)
 | 
			
		||||
    path = "/" + path;
 | 
			
		||||
| 
						 | 
				
			
			@ -219,9 +181,7 @@ function injectParamIfMissing(path, param, value) {
 | 
			
		|||
        query = [];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (!query.some(function (v) {
 | 
			
		||||
        return v.startsWith(param_eq);
 | 
			
		||||
    })) {
 | 
			
		||||
    if (!query.some(function (v) { return v.startsWith(param_eq); })) {
 | 
			
		||||
        query.push(param_eq + encodeURIComponent(value));
 | 
			
		||||
        elem.search = "?" + query.join("&");
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			@ -239,7 +199,7 @@ function injectParamIfMissing(path, param, value) {
 | 
			
		|||
// IE11 support or polyfill promises and fetch in IE11.
 | 
			
		||||
// resolve will receive an object on success, while reject
 | 
			
		||||
// will receive either an event or an error on failure.
 | 
			
		||||
function fetchJSON(path, resolve, reject) {
 | 
			
		||||
export function fetchJSON(path, resolve, reject) {
 | 
			
		||||
    // NB: IE11 doesn't support JSON as a responseType
 | 
			
		||||
    var req = new XMLHttpRequest();
 | 
			
		||||
    req.open('GET', path);
 | 
			
		||||
| 
						 | 
				
			
			@ -267,4 +227,4 @@ function fetchJSON(path, resolve, reject) {
 | 
			
		|||
    };
 | 
			
		||||
 | 
			
		||||
    req.send();
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,30 +1,25 @@
 | 
			
		|||
'use strict';
 | 
			
		||||
/* This Source Code Form is subject to the terms of the Mozilla Public
 | 
			
		||||
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 | 
			
		||||
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 | 
			
		||||
 | 
			
		||||
Object.defineProperty(exports, "__esModule", {
 | 
			
		||||
    value: true
 | 
			
		||||
});
 | 
			
		||||
// From: http://hg.mozilla.org/mozilla-central/raw-file/ec10630b1a54/js/src/devtools/jint/sunspider/string-base64.js
 | 
			
		||||
 | 
			
		||||
var _logging = require('./util/logging.js');
 | 
			
		||||
import * as Log from './util/logging.js';
 | 
			
		||||
 | 
			
		||||
var Log = _interopRequireWildcard(_logging);
 | 
			
		||||
 | 
			
		||||
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
 | 
			
		||||
 | 
			
		||||
exports.default = {
 | 
			
		||||
export default {
 | 
			
		||||
    /* Convert data (an array of integers) to a Base64 string. */
 | 
			
		||||
    toBase64Table: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='.split(''),
 | 
			
		||||
    base64Pad: '=',
 | 
			
		||||
    toBase64Table : 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='.split(''),
 | 
			
		||||
    base64Pad     : '=',
 | 
			
		||||
 | 
			
		||||
    encode: function (data) {
 | 
			
		||||
        "use strict";
 | 
			
		||||
 | 
			
		||||
        var result = '';
 | 
			
		||||
        var toBase64Table = this.toBase64Table;
 | 
			
		||||
        var length = data.length;
 | 
			
		||||
        var lengthpad = length % 3;
 | 
			
		||||
        var lengthpad = (length % 3);
 | 
			
		||||
        // Convert every three bytes to 4 ascii characters.
 | 
			
		||||
 | 
			
		||||
        for (var i = 0; i < length - 2; i += 3) {
 | 
			
		||||
        for (var i = 0; i < (length - 2); i += 3) {
 | 
			
		||||
            result += toBase64Table[data[i] >> 2];
 | 
			
		||||
            result += toBase64Table[((data[i] & 0x03) << 4) + (data[i + 1] >> 4)];
 | 
			
		||||
            result += toBase64Table[((data[i + 1] & 0x0f) << 2) + (data[i + 2] >> 6)];
 | 
			
		||||
| 
						 | 
				
			
			@ -51,12 +46,20 @@ exports.default = {
 | 
			
		|||
    },
 | 
			
		||||
 | 
			
		||||
    /* Convert Base64 data to a string */
 | 
			
		||||
    toBinaryTable: [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 62, -1, -1, -1, 63, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -1, -1, -1, 0, -1, -1, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, -1, -1, -1, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, -1, -1, -1, -1, -1],
 | 
			
		||||
    toBinaryTable : [
 | 
			
		||||
        -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1,
 | 
			
		||||
        -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1,
 | 
			
		||||
        -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,62, -1,-1,-1,63,
 | 
			
		||||
        52,53,54,55, 56,57,58,59, 60,61,-1,-1, -1, 0,-1,-1,
 | 
			
		||||
        -1, 0, 1, 2,  3, 4, 5, 6,  7, 8, 9,10, 11,12,13,14,
 | 
			
		||||
        15,16,17,18, 19,20,21,22, 23,24,25,-1, -1,-1,-1,-1,
 | 
			
		||||
        -1,26,27,28, 29,30,31,32, 33,34,35,36, 37,38,39,40,
 | 
			
		||||
        41,42,43,44, 45,46,47,48, 49,50,51,-1, -1,-1,-1,-1
 | 
			
		||||
    ],
 | 
			
		||||
 | 
			
		||||
    decode: function (data, offset) {
 | 
			
		||||
        "use strict";
 | 
			
		||||
 | 
			
		||||
        offset = typeof offset !== 'undefined' ? offset : 0;
 | 
			
		||||
        offset = typeof(offset) !== 'undefined' ? offset : 0;
 | 
			
		||||
        var toBinaryTable = this.toBinaryTable;
 | 
			
		||||
        var base64Pad = this.base64Pad;
 | 
			
		||||
        var result, result_length;
 | 
			
		||||
| 
						 | 
				
			
			@ -64,18 +67,16 @@ exports.default = {
 | 
			
		|||
        var leftdata = 0; // bits decoded, but yet to be appended
 | 
			
		||||
        var data_length = data.indexOf('=') - offset;
 | 
			
		||||
 | 
			
		||||
        if (data_length < 0) {
 | 
			
		||||
            data_length = data.length - offset;
 | 
			
		||||
        }
 | 
			
		||||
        if (data_length < 0) { data_length = data.length - offset; }
 | 
			
		||||
 | 
			
		||||
        /* Every four characters is 3 resulting numbers */
 | 
			
		||||
        result_length = (data_length >> 2) * 3 + Math.floor(data_length % 4 / 1.5);
 | 
			
		||||
        result_length = (data_length >> 2) * 3 + Math.floor((data_length % 4) / 1.5);
 | 
			
		||||
        result = new Array(result_length);
 | 
			
		||||
 | 
			
		||||
        // Convert one by one.
 | 
			
		||||
        for (var idx = 0, i = offset; i < data.length; i++) {
 | 
			
		||||
            var c = toBinaryTable[data.charCodeAt(i) & 0x7f];
 | 
			
		||||
            var padding = data.charAt(i) === base64Pad;
 | 
			
		||||
            var padding = (data.charAt(i) === base64Pad);
 | 
			
		||||
            // Skip illegal characters and whitespace
 | 
			
		||||
            if (c === -1) {
 | 
			
		||||
                Log.Error("Illegal character code " + data.charCodeAt(i) + " at position " + i);
 | 
			
		||||
| 
						 | 
				
			
			@ -83,7 +84,7 @@ exports.default = {
 | 
			
		|||
            }
 | 
			
		||||
 | 
			
		||||
            // Collect data into leftdata, update bitcount
 | 
			
		||||
            leftdata = leftdata << 6 | c;
 | 
			
		||||
            leftdata = (leftdata << 6) | c;
 | 
			
		||||
            leftbits += 6;
 | 
			
		||||
 | 
			
		||||
            // If we have 8 or more bits, append 8 bits to the result
 | 
			
		||||
| 
						 | 
				
			
			@ -91,7 +92,7 @@ exports.default = {
 | 
			
		|||
                leftbits -= 8;
 | 
			
		||||
                // Append if not padding.
 | 
			
		||||
                if (!padding) {
 | 
			
		||||
                    result[idx++] = leftdata >> leftbits & 0xff;
 | 
			
		||||
                    result[idx++] = (leftdata >> leftbits) & 0xff;
 | 
			
		||||
                }
 | 
			
		||||
                leftdata &= (1 << leftbits) - 1;
 | 
			
		||||
            }
 | 
			
		||||
| 
						 | 
				
			
			@ -107,8 +108,3 @@ exports.default = {
 | 
			
		|||
        return result;
 | 
			
		||||
    }
 | 
			
		||||
}; /* End of Base64 namespace */
 | 
			
		||||
/* This Source Code Form is subject to the terms of the Mozilla Public
 | 
			
		||||
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 | 
			
		||||
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 | 
			
		||||
 | 
			
		||||
// From: http://hg.mozilla.org/mozilla-central/raw-file/ec10630b1a54/js/src/devtools/jint/sunspider/string-base64.js
 | 
			
		||||
| 
						 | 
				
			
			@ -1,9 +1,3 @@
 | 
			
		|||
"use strict";
 | 
			
		||||
 | 
			
		||||
Object.defineProperty(exports, "__esModule", {
 | 
			
		||||
    value: true
 | 
			
		||||
});
 | 
			
		||||
exports.default = DES;
 | 
			
		||||
/*
 | 
			
		||||
 * Ported from Flashlight VNC ActionScript implementation:
 | 
			
		||||
 *     http://www.wizhelp.com/flashlight-vnc/
 | 
			
		||||
| 
						 | 
				
			
			@ -81,67 +75,67 @@ exports.default = DES;
 | 
			
		|||
 * fine Java utilities: http://www.acme.com/java/
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
function DES(passwd) {
 | 
			
		||||
export default function DES(passwd) {
 | 
			
		||||
    "use strict";
 | 
			
		||||
 | 
			
		||||
    // Tables, permutations, S-boxes, etc.
 | 
			
		||||
 | 
			
		||||
    var PC2 = [13, 16, 10, 23, 0, 4, 2, 27, 14, 5, 20, 9, 22, 18, 11, 3, 25, 7, 15, 6, 26, 19, 12, 1, 40, 51, 30, 36, 46, 54, 29, 39, 50, 44, 32, 47, 43, 48, 38, 55, 33, 52, 45, 41, 49, 35, 28, 31],
 | 
			
		||||
        totrot = [1, 2, 4, 6, 8, 10, 12, 14, 15, 17, 19, 21, 23, 25, 27, 28],
 | 
			
		||||
        z = 0x0,
 | 
			
		||||
        a,
 | 
			
		||||
        b,
 | 
			
		||||
        c,
 | 
			
		||||
        d,
 | 
			
		||||
        e,
 | 
			
		||||
        f,
 | 
			
		||||
        SP1,
 | 
			
		||||
        SP2,
 | 
			
		||||
        SP3,
 | 
			
		||||
        SP4,
 | 
			
		||||
        SP5,
 | 
			
		||||
        SP6,
 | 
			
		||||
        SP7,
 | 
			
		||||
        SP8,
 | 
			
		||||
    var PC2 = [13,16,10,23, 0, 4, 2,27,14, 5,20, 9,22,18,11, 3,
 | 
			
		||||
               25, 7,15, 6,26,19,12, 1,40,51,30,36,46,54,29,39,
 | 
			
		||||
               50,44,32,47,43,48,38,55,33,52,45,41,49,35,28,31 ],
 | 
			
		||||
        totrot = [ 1, 2, 4, 6, 8,10,12,14,15,17,19,21,23,25,27,28],
 | 
			
		||||
        z = 0x0, a,b,c,d,e,f, SP1,SP2,SP3,SP4,SP5,SP6,SP7,SP8,
 | 
			
		||||
        keys = [];
 | 
			
		||||
 | 
			
		||||
    a = 1 << 16;b = 1 << 24;c = a | b;d = 1 << 2;e = 1 << 10;f = d | e;
 | 
			
		||||
    SP1 = [c | e, z | z, a | z, c | f, c | d, a | f, z | d, a | z, z | e, c | e, c | f, z | e, b | f, c | d, b | z, z | d, z | f, b | e, b | e, a | e, a | e, c | z, c | z, b | f, a | d, b | d, b | d, a | d, z | z, z | f, a | f, b | z, a | z, c | f, z | d, c | z, c | e, b | z, b | z, z | e, c | d, a | z, a | e, b | d, z | e, z | d, b | f, a | f, c | f, a | d, c | z, b | f, b | d, z | f, a | f, c | e, z | f, b | e, b | e, z | z, a | d, a | e, z | z, c | d];
 | 
			
		||||
    a = 1 << 20;b = 1 << 31;c = a | b;d = 1 << 5;e = 1 << 15;f = d | e;
 | 
			
		||||
    SP2 = [c | f, b | e, z | e, a | f, a | z, z | d, c | d, b | f, b | d, c | f, c | e, b | z, b | e, a | z, z | d, c | d, a | e, a | d, b | f, z | z, b | z, z | e, a | f, c | z, a | d, b | d, z | z, a | e, z | f, c | e, c | z, z | f, z | z, a | f, c | d, a | z, b | f, c | z, c | e, z | e, c | z, b | e, z | d, c | f, a | f, z | d, z | e, b | z, z | f, c | e, a | z, b | d, a | d, b | f, b | d, a | d, a | e, z | z, b | e, z | f, b | z, c | d, c | f, a | e];
 | 
			
		||||
    a = 1 << 17;b = 1 << 27;c = a | b;d = 1 << 3;e = 1 << 9;f = d | e;
 | 
			
		||||
    SP3 = [z | f, c | e, z | z, c | d, b | e, z | z, a | f, b | e, a | d, b | d, b | d, a | z, c | f, a | d, c | z, z | f, b | z, z | d, c | e, z | e, a | e, c | z, c | d, a | f, b | f, a | e, a | z, b | f, z | d, c | f, z | e, b | z, c | e, b | z, a | d, z | f, a | z, c | e, b | e, z | z, z | e, a | d, c | f, b | e, b | d, z | e, z | z, c | d, b | f, a | z, b | z, c | f, z | d, a | f, a | e, b | d, c | z, b | f, z | f, c | z, a | f, z | d, c | d, a | e];
 | 
			
		||||
    a = 1 << 13;b = 1 << 23;c = a | b;d = 1 << 0;e = 1 << 7;f = d | e;
 | 
			
		||||
    SP4 = [c | d, a | f, a | f, z | e, c | e, b | f, b | d, a | d, z | z, c | z, c | z, c | f, z | f, z | z, b | e, b | d, z | d, a | z, b | z, c | d, z | e, b | z, a | d, a | e, b | f, z | d, a | e, b | e, a | z, c | e, c | f, z | f, b | e, b | d, c | z, c | f, z | f, z | z, z | z, c | z, a | e, b | e, b | f, z | d, c | d, a | f, a | f, z | e, c | f, z | f, z | d, a | z, b | d, a | d, c | e, b | f, a | d, a | e, b | z, c | d, z | e, b | z, a | z, c | e];
 | 
			
		||||
    a = 1 << 25;b = 1 << 30;c = a | b;d = 1 << 8;e = 1 << 19;f = d | e;
 | 
			
		||||
    SP5 = [z | d, a | f, a | e, c | d, z | e, z | d, b | z, a | e, b | f, z | e, a | d, b | f, c | d, c | e, z | f, b | z, a | z, b | e, b | e, z | z, b | d, c | f, c | f, a | d, c | e, b | d, z | z, c | z, a | f, a | z, c | z, z | f, z | e, c | d, z | d, a | z, b | z, a | e, c | d, b | f, a | d, b | z, c | e, a | f, b | f, z | d, a | z, c | e, c | f, z | f, c | z, c | f, a | e, z | z, b | e, c | z, z | f, a | d, b | d, z | e, z | z, b | e, a | f, b | d];
 | 
			
		||||
    a = 1 << 22;b = 1 << 29;c = a | b;d = 1 << 4;e = 1 << 14;f = d | e;
 | 
			
		||||
    SP6 = [b | d, c | z, z | e, c | f, c | z, z | d, c | f, a | z, b | e, a | f, a | z, b | d, a | d, b | e, b | z, z | f, z | z, a | d, b | f, z | e, a | e, b | f, z | d, c | d, c | d, z | z, a | f, c | e, z | f, a | e, c | e, b | z, b | e, z | d, c | d, a | e, c | f, a | z, z | f, b | d, a | z, b | e, b | z, z | f, b | d, c | f, a | e, c | z, a | f, c | e, z | z, c | d, z | d, z | e, c | z, a | f, z | e, a | d, b | f, z | z, c | e, b | z, a | d, b | f];
 | 
			
		||||
    a = 1 << 21;b = 1 << 26;c = a | b;d = 1 << 1;e = 1 << 11;f = d | e;
 | 
			
		||||
    SP7 = [a | z, c | d, b | f, z | z, z | e, b | f, a | f, c | e, c | f, a | z, z | z, b | d, z | d, b | z, c | d, z | f, b | e, a | f, a | d, b | e, b | d, c | z, c | e, a | d, c | z, z | e, z | f, c | f, a | e, z | d, b | z, a | e, b | z, a | e, a | z, b | f, b | f, c | d, c | d, z | d, a | d, b | z, b | e, a | z, c | e, z | f, a | f, c | e, z | f, b | d, c | f, c | z, a | e, z | z, z | d, c | f, z | z, a | f, c | z, z | e, b | d, b | e, z | e, a | d];
 | 
			
		||||
    a = 1 << 18;b = 1 << 28;c = a | b;d = 1 << 6;e = 1 << 12;f = d | e;
 | 
			
		||||
    SP8 = [b | f, z | e, a | z, c | f, b | z, b | f, z | d, b | z, a | d, c | z, c | f, a | e, c | e, a | f, z | e, z | d, c | z, b | d, b | e, z | f, a | e, a | d, c | d, c | e, z | f, z | z, z | z, c | d, b | d, b | e, a | f, a | z, a | f, a | z, c | e, z | e, z | d, c | d, z | e, a | f, b | e, z | d, b | d, c | z, c | d, b | z, a | z, b | f, z | z, c | f, a | d, b | d, c | z, b | e, b | f, z | z, c | f, a | e, a | e, z | f, z | f, a | d, b | z, c | e];
 | 
			
		||||
    a=1<<16; b=1<<24; c=a|b; d=1<<2; e=1<<10; f=d|e;
 | 
			
		||||
    SP1 = [c|e,z|z,a|z,c|f,c|d,a|f,z|d,a|z,z|e,c|e,c|f,z|e,b|f,c|d,b|z,z|d,
 | 
			
		||||
           z|f,b|e,b|e,a|e,a|e,c|z,c|z,b|f,a|d,b|d,b|d,a|d,z|z,z|f,a|f,b|z,
 | 
			
		||||
           a|z,c|f,z|d,c|z,c|e,b|z,b|z,z|e,c|d,a|z,a|e,b|d,z|e,z|d,b|f,a|f,
 | 
			
		||||
           c|f,a|d,c|z,b|f,b|d,z|f,a|f,c|e,z|f,b|e,b|e,z|z,a|d,a|e,z|z,c|d];
 | 
			
		||||
    a=1<<20; b=1<<31; c=a|b; d=1<<5; e=1<<15; f=d|e;
 | 
			
		||||
    SP2 = [c|f,b|e,z|e,a|f,a|z,z|d,c|d,b|f,b|d,c|f,c|e,b|z,b|e,a|z,z|d,c|d,
 | 
			
		||||
           a|e,a|d,b|f,z|z,b|z,z|e,a|f,c|z,a|d,b|d,z|z,a|e,z|f,c|e,c|z,z|f,
 | 
			
		||||
           z|z,a|f,c|d,a|z,b|f,c|z,c|e,z|e,c|z,b|e,z|d,c|f,a|f,z|d,z|e,b|z,
 | 
			
		||||
           z|f,c|e,a|z,b|d,a|d,b|f,b|d,a|d,a|e,z|z,b|e,z|f,b|z,c|d,c|f,a|e];
 | 
			
		||||
    a=1<<17; b=1<<27; c=a|b; d=1<<3; e=1<<9; f=d|e;
 | 
			
		||||
    SP3 = [z|f,c|e,z|z,c|d,b|e,z|z,a|f,b|e,a|d,b|d,b|d,a|z,c|f,a|d,c|z,z|f,
 | 
			
		||||
           b|z,z|d,c|e,z|e,a|e,c|z,c|d,a|f,b|f,a|e,a|z,b|f,z|d,c|f,z|e,b|z,
 | 
			
		||||
           c|e,b|z,a|d,z|f,a|z,c|e,b|e,z|z,z|e,a|d,c|f,b|e,b|d,z|e,z|z,c|d,
 | 
			
		||||
           b|f,a|z,b|z,c|f,z|d,a|f,a|e,b|d,c|z,b|f,z|f,c|z,a|f,z|d,c|d,a|e];
 | 
			
		||||
    a=1<<13; b=1<<23; c=a|b; d=1<<0; e=1<<7; f=d|e;
 | 
			
		||||
    SP4 = [c|d,a|f,a|f,z|e,c|e,b|f,b|d,a|d,z|z,c|z,c|z,c|f,z|f,z|z,b|e,b|d,
 | 
			
		||||
           z|d,a|z,b|z,c|d,z|e,b|z,a|d,a|e,b|f,z|d,a|e,b|e,a|z,c|e,c|f,z|f,
 | 
			
		||||
           b|e,b|d,c|z,c|f,z|f,z|z,z|z,c|z,a|e,b|e,b|f,z|d,c|d,a|f,a|f,z|e,
 | 
			
		||||
           c|f,z|f,z|d,a|z,b|d,a|d,c|e,b|f,a|d,a|e,b|z,c|d,z|e,b|z,a|z,c|e];
 | 
			
		||||
    a=1<<25; b=1<<30; c=a|b; d=1<<8; e=1<<19; f=d|e;
 | 
			
		||||
    SP5 = [z|d,a|f,a|e,c|d,z|e,z|d,b|z,a|e,b|f,z|e,a|d,b|f,c|d,c|e,z|f,b|z,
 | 
			
		||||
           a|z,b|e,b|e,z|z,b|d,c|f,c|f,a|d,c|e,b|d,z|z,c|z,a|f,a|z,c|z,z|f,
 | 
			
		||||
           z|e,c|d,z|d,a|z,b|z,a|e,c|d,b|f,a|d,b|z,c|e,a|f,b|f,z|d,a|z,c|e,
 | 
			
		||||
           c|f,z|f,c|z,c|f,a|e,z|z,b|e,c|z,z|f,a|d,b|d,z|e,z|z,b|e,a|f,b|d];
 | 
			
		||||
    a=1<<22; b=1<<29; c=a|b; d=1<<4; e=1<<14; f=d|e;
 | 
			
		||||
    SP6 = [b|d,c|z,z|e,c|f,c|z,z|d,c|f,a|z,b|e,a|f,a|z,b|d,a|d,b|e,b|z,z|f,
 | 
			
		||||
           z|z,a|d,b|f,z|e,a|e,b|f,z|d,c|d,c|d,z|z,a|f,c|e,z|f,a|e,c|e,b|z,
 | 
			
		||||
           b|e,z|d,c|d,a|e,c|f,a|z,z|f,b|d,a|z,b|e,b|z,z|f,b|d,c|f,a|e,c|z,
 | 
			
		||||
           a|f,c|e,z|z,c|d,z|d,z|e,c|z,a|f,z|e,a|d,b|f,z|z,c|e,b|z,a|d,b|f];
 | 
			
		||||
    a=1<<21; b=1<<26; c=a|b; d=1<<1; e=1<<11; f=d|e;
 | 
			
		||||
    SP7 = [a|z,c|d,b|f,z|z,z|e,b|f,a|f,c|e,c|f,a|z,z|z,b|d,z|d,b|z,c|d,z|f,
 | 
			
		||||
           b|e,a|f,a|d,b|e,b|d,c|z,c|e,a|d,c|z,z|e,z|f,c|f,a|e,z|d,b|z,a|e,
 | 
			
		||||
           b|z,a|e,a|z,b|f,b|f,c|d,c|d,z|d,a|d,b|z,b|e,a|z,c|e,z|f,a|f,c|e,
 | 
			
		||||
           z|f,b|d,c|f,c|z,a|e,z|z,z|d,c|f,z|z,a|f,c|z,z|e,b|d,b|e,z|e,a|d];
 | 
			
		||||
    a=1<<18; b=1<<28; c=a|b; d=1<<6; e=1<<12; f=d|e;
 | 
			
		||||
    SP8 = [b|f,z|e,a|z,c|f,b|z,b|f,z|d,b|z,a|d,c|z,c|f,a|e,c|e,a|f,z|e,z|d,
 | 
			
		||||
           c|z,b|d,b|e,z|f,a|e,a|d,c|d,c|e,z|f,z|z,z|z,c|d,b|d,b|e,a|f,a|z,
 | 
			
		||||
           a|f,a|z,c|e,z|e,z|d,c|d,z|e,a|f,b|e,z|d,b|d,c|z,c|d,b|z,a|z,b|f,
 | 
			
		||||
           z|z,c|f,a|d,b|d,c|z,b|e,b|f,z|z,c|f,a|e,a|e,z|f,z|f,a|d,b|z,c|e];
 | 
			
		||||
 | 
			
		||||
    // Set the key.
 | 
			
		||||
    function setKeys(keyBlock) {
 | 
			
		||||
        var i,
 | 
			
		||||
            j,
 | 
			
		||||
            l,
 | 
			
		||||
            m,
 | 
			
		||||
            n,
 | 
			
		||||
            o,
 | 
			
		||||
            pc1m = [],
 | 
			
		||||
            pcr = [],
 | 
			
		||||
            kn = [],
 | 
			
		||||
            raw0,
 | 
			
		||||
            raw1,
 | 
			
		||||
            rawi,
 | 
			
		||||
            KnLi;
 | 
			
		||||
        var i, j, l, m, n, o, pc1m = [], pcr = [], kn = [],
 | 
			
		||||
            raw0, raw1, rawi, KnLi;
 | 
			
		||||
 | 
			
		||||
        for (j = 0, l = 56; j < 56; ++j, l -= 8) {
 | 
			
		||||
            l += l < -5 ? 65 : l < -3 ? 31 : l < -1 ? 63 : l === 27 ? 35 : 0; // PC1
 | 
			
		||||
            m = l & 0x7;
 | 
			
		||||
            pc1m[j] = (keyBlock[l >>> 3] & 1 << m) !== 0 ? 1 : 0;
 | 
			
		||||
            pc1m[j] = ((keyBlock[l >>> 3] & (1<<m)) !== 0) ? 1: 0;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        for (i = 0; i < 16; ++i) {
 | 
			
		||||
| 
						 | 
				
			
			@ -160,10 +154,10 @@ function DES(passwd) {
 | 
			
		|||
            }
 | 
			
		||||
            for (j = 0; j < 24; ++j) {
 | 
			
		||||
                if (pcr[PC2[j]] !== 0) {
 | 
			
		||||
                    kn[m] |= 1 << 23 - j;
 | 
			
		||||
                    kn[m] |= 1 << (23 - j);
 | 
			
		||||
                }
 | 
			
		||||
                if (pcr[PC2[j + 24]] !== 0) {
 | 
			
		||||
                    kn[n] |= 1 << 23 - j;
 | 
			
		||||
                    kn[n] |= 1 << (23 - j);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			@ -180,95 +174,88 @@ function DES(passwd) {
 | 
			
		|||
            keys[KnLi] = (raw0 & 0x0003f000) << 12;
 | 
			
		||||
            keys[KnLi] |= (raw0 & 0x0000003f) << 16;
 | 
			
		||||
            keys[KnLi] |= (raw1 & 0x0003f000) >>> 4;
 | 
			
		||||
            keys[KnLi] |= raw1 & 0x0000003f;
 | 
			
		||||
            keys[KnLi] |= (raw1 & 0x0000003f);
 | 
			
		||||
            ++KnLi;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Encrypt 8 bytes of text
 | 
			
		||||
    function enc8(text) {
 | 
			
		||||
        var i = 0,
 | 
			
		||||
            b = text.slice(),
 | 
			
		||||
            fval,
 | 
			
		||||
            keysi = 0,
 | 
			
		||||
            l,
 | 
			
		||||
            r,
 | 
			
		||||
            x; // left, right, accumulator
 | 
			
		||||
        var i = 0, b = text.slice(), fval, keysi = 0,
 | 
			
		||||
            l, r, x; // left, right, accumulator
 | 
			
		||||
 | 
			
		||||
        // Squash 8 bytes to 2 ints
 | 
			
		||||
        l = b[i++] << 24 | b[i++] << 16 | b[i++] << 8 | b[i++];
 | 
			
		||||
        r = b[i++] << 24 | b[i++] << 16 | b[i++] << 8 | b[i++];
 | 
			
		||||
        l = b[i++]<<24 | b[i++]<<16 | b[i++]<<8 | b[i++];
 | 
			
		||||
        r = b[i++]<<24 | b[i++]<<16 | b[i++]<<8 | b[i++];
 | 
			
		||||
 | 
			
		||||
        x = (l >>> 4 ^ r) & 0x0f0f0f0f;
 | 
			
		||||
        x = ((l >>> 4) ^ r) & 0x0f0f0f0f;
 | 
			
		||||
        r ^= x;
 | 
			
		||||
        l ^= x << 4;
 | 
			
		||||
        x = (l >>> 16 ^ r) & 0x0000ffff;
 | 
			
		||||
        l ^= (x << 4);
 | 
			
		||||
        x = ((l >>> 16) ^ r) & 0x0000ffff;
 | 
			
		||||
        r ^= x;
 | 
			
		||||
        l ^= x << 16;
 | 
			
		||||
        x = (r >>> 2 ^ l) & 0x33333333;
 | 
			
		||||
        l ^= (x << 16);
 | 
			
		||||
        x = ((r >>> 2) ^ l) & 0x33333333;
 | 
			
		||||
        l ^= x;
 | 
			
		||||
        r ^= x << 2;
 | 
			
		||||
        x = (r >>> 8 ^ l) & 0x00ff00ff;
 | 
			
		||||
        r ^= (x << 2);
 | 
			
		||||
        x = ((r >>> 8) ^ l) & 0x00ff00ff;
 | 
			
		||||
        l ^= x;
 | 
			
		||||
        r ^= x << 8;
 | 
			
		||||
        r = r << 1 | r >>> 31 & 1;
 | 
			
		||||
        r ^= (x << 8);
 | 
			
		||||
        r = (r << 1) | ((r >>> 31) & 1);
 | 
			
		||||
        x = (l ^ r) & 0xaaaaaaaa;
 | 
			
		||||
        l ^= x;
 | 
			
		||||
        r ^= x;
 | 
			
		||||
        l = l << 1 | l >>> 31 & 1;
 | 
			
		||||
        l = (l << 1) | ((l >>> 31) & 1);
 | 
			
		||||
 | 
			
		||||
        for (i = 0; i < 8; ++i) {
 | 
			
		||||
            x = r << 28 | r >>> 4;
 | 
			
		||||
            x = (r << 28) | (r >>> 4);
 | 
			
		||||
            x ^= keys[keysi++];
 | 
			
		||||
            fval = SP7[x & 0x3f];
 | 
			
		||||
            fval |= SP5[x >>> 8 & 0x3f];
 | 
			
		||||
            fval |= SP3[x >>> 16 & 0x3f];
 | 
			
		||||
            fval |= SP1[x >>> 24 & 0x3f];
 | 
			
		||||
            fval =  SP7[x & 0x3f];
 | 
			
		||||
            fval |= SP5[(x >>> 8) & 0x3f];
 | 
			
		||||
            fval |= SP3[(x >>> 16) & 0x3f];
 | 
			
		||||
            fval |= SP1[(x >>> 24) & 0x3f];
 | 
			
		||||
            x = r ^ keys[keysi++];
 | 
			
		||||
            fval |= SP8[x & 0x3f];
 | 
			
		||||
            fval |= SP6[x >>> 8 & 0x3f];
 | 
			
		||||
            fval |= SP4[x >>> 16 & 0x3f];
 | 
			
		||||
            fval |= SP2[x >>> 24 & 0x3f];
 | 
			
		||||
            fval |= SP6[(x >>> 8) & 0x3f];
 | 
			
		||||
            fval |= SP4[(x >>> 16) & 0x3f];
 | 
			
		||||
            fval |= SP2[(x >>> 24) & 0x3f];
 | 
			
		||||
            l ^= fval;
 | 
			
		||||
            x = l << 28 | l >>> 4;
 | 
			
		||||
            x = (l << 28) | (l >>> 4);
 | 
			
		||||
            x ^= keys[keysi++];
 | 
			
		||||
            fval = SP7[x & 0x3f];
 | 
			
		||||
            fval |= SP5[x >>> 8 & 0x3f];
 | 
			
		||||
            fval |= SP3[x >>> 16 & 0x3f];
 | 
			
		||||
            fval |= SP1[x >>> 24 & 0x3f];
 | 
			
		||||
            fval =  SP7[x & 0x3f];
 | 
			
		||||
            fval |= SP5[(x >>> 8) & 0x3f];
 | 
			
		||||
            fval |= SP3[(x >>> 16) & 0x3f];
 | 
			
		||||
            fval |= SP1[(x >>> 24) & 0x3f];
 | 
			
		||||
            x = l ^ keys[keysi++];
 | 
			
		||||
            fval |= SP8[x & 0x0000003f];
 | 
			
		||||
            fval |= SP6[x >>> 8 & 0x3f];
 | 
			
		||||
            fval |= SP4[x >>> 16 & 0x3f];
 | 
			
		||||
            fval |= SP2[x >>> 24 & 0x3f];
 | 
			
		||||
            fval |= SP6[(x >>> 8) & 0x3f];
 | 
			
		||||
            fval |= SP4[(x >>> 16) & 0x3f];
 | 
			
		||||
            fval |= SP2[(x >>> 24) & 0x3f];
 | 
			
		||||
            r ^= fval;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        r = r << 31 | r >>> 1;
 | 
			
		||||
        r = (r << 31) | (r >>> 1);
 | 
			
		||||
        x = (l ^ r) & 0xaaaaaaaa;
 | 
			
		||||
        l ^= x;
 | 
			
		||||
        r ^= x;
 | 
			
		||||
        l = l << 31 | l >>> 1;
 | 
			
		||||
        x = (l >>> 8 ^ r) & 0x00ff00ff;
 | 
			
		||||
        l = (l << 31) | (l >>> 1);
 | 
			
		||||
        x = ((l >>> 8) ^ r) & 0x00ff00ff;
 | 
			
		||||
        r ^= x;
 | 
			
		||||
        l ^= x << 8;
 | 
			
		||||
        x = (l >>> 2 ^ r) & 0x33333333;
 | 
			
		||||
        l ^= (x << 8);
 | 
			
		||||
        x = ((l >>> 2) ^ r) & 0x33333333;
 | 
			
		||||
        r ^= x;
 | 
			
		||||
        l ^= x << 2;
 | 
			
		||||
        x = (r >>> 16 ^ l) & 0x0000ffff;
 | 
			
		||||
        l ^= (x << 2);
 | 
			
		||||
        x = ((r >>> 16) ^ l) & 0x0000ffff;
 | 
			
		||||
        l ^= x;
 | 
			
		||||
        r ^= x << 16;
 | 
			
		||||
        x = (r >>> 4 ^ l) & 0x0f0f0f0f;
 | 
			
		||||
        r ^= (x << 16);
 | 
			
		||||
        x = ((r >>> 4) ^ l) & 0x0f0f0f0f;
 | 
			
		||||
        l ^= x;
 | 
			
		||||
        r ^= x << 4;
 | 
			
		||||
        r ^= (x << 4);
 | 
			
		||||
 | 
			
		||||
        // Spread ints to bytes
 | 
			
		||||
        x = [r, l];
 | 
			
		||||
        for (i = 0; i < 8; i++) {
 | 
			
		||||
            b[i] = (x[i >>> 2] >>> 8 * (3 - i % 4)) % 256;
 | 
			
		||||
            if (b[i] < 0) {
 | 
			
		||||
                b[i] += 256;
 | 
			
		||||
            } // unsigned
 | 
			
		||||
            b[i] = (x[i>>>2] >>> (8 * (3 - (i % 4)))) % 256;
 | 
			
		||||
            if (b[i] < 0) { b[i] += 256; } // unsigned
 | 
			
		||||
        }
 | 
			
		||||
        return b;
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			@ -278,6 +265,7 @@ function DES(passwd) {
 | 
			
		|||
        return enc8(t.slice(0, 8)).concat(enc8(t.slice(8, 16)));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    setKeys(passwd); // Setup keys
 | 
			
		||||
    return { 'encrypt': encrypt }; // Public interface
 | 
			
		||||
}; // function DES
 | 
			
		||||
    setKeys(passwd);             // Setup keys
 | 
			
		||||
    return {'encrypt': encrypt}; // Public interface
 | 
			
		||||
 | 
			
		||||
}; // function DES
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,22 +1,3 @@
 | 
			
		|||
"use strict";
 | 
			
		||||
 | 
			
		||||
Object.defineProperty(exports, "__esModule", {
 | 
			
		||||
    value: true
 | 
			
		||||
});
 | 
			
		||||
exports.default = Display;
 | 
			
		||||
 | 
			
		||||
var _logging = require("./util/logging.js");
 | 
			
		||||
 | 
			
		||||
var Log = _interopRequireWildcard(_logging);
 | 
			
		||||
 | 
			
		||||
var _base = require("./base64.js");
 | 
			
		||||
 | 
			
		||||
var _base2 = _interopRequireDefault(_base);
 | 
			
		||||
 | 
			
		||||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
 | 
			
		||||
 | 
			
		||||
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * noVNC: HTML5 VNC client
 | 
			
		||||
 * Copyright (C) 2012 Joel Martin
 | 
			
		||||
| 
						 | 
				
			
			@ -26,11 +7,14 @@ function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj;
 | 
			
		|||
 * See README.md for usage and integration instructions.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
function Display(target) {
 | 
			
		||||
import * as Log from './util/logging.js';
 | 
			
		||||
import Base64 from "./base64.js";
 | 
			
		||||
 | 
			
		||||
export default function Display(target) {
 | 
			
		||||
    this._drawCtx = null;
 | 
			
		||||
    this._c_forceCanvas = false;
 | 
			
		||||
 | 
			
		||||
    this._renderQ = []; // queue drawing actions for in-oder rendering
 | 
			
		||||
    this._renderQ = [];  // queue drawing actions for in-oder rendering
 | 
			
		||||
    this._flushing = false;
 | 
			
		||||
 | 
			
		||||
    // the full frame buffer (logical canvas) size
 | 
			
		||||
| 
						 | 
				
			
			@ -69,9 +53,9 @@ function Display(target) {
 | 
			
		|||
    this._backbuffer = document.createElement('canvas');
 | 
			
		||||
    this._drawCtx = this._backbuffer.getContext('2d');
 | 
			
		||||
 | 
			
		||||
    this._damageBounds = { left: 0, top: 0,
 | 
			
		||||
        right: this._backbuffer.width,
 | 
			
		||||
        bottom: this._backbuffer.height };
 | 
			
		||||
    this._damageBounds = { left:0, top:0,
 | 
			
		||||
                           right: this._backbuffer.width,
 | 
			
		||||
                           bottom: this._backbuffer.height };
 | 
			
		||||
 | 
			
		||||
    Log.Debug("User Agent: " + navigator.userAgent);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -98,17 +82,13 @@ Display.prototype = {
 | 
			
		|||
    // ===== PROPERTIES =====
 | 
			
		||||
 | 
			
		||||
    _scale: 1.0,
 | 
			
		||||
    get scale() {
 | 
			
		||||
        return this._scale;
 | 
			
		||||
    },
 | 
			
		||||
    get scale() { return this._scale; },
 | 
			
		||||
    set scale(scale) {
 | 
			
		||||
        this._rescale(scale);
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _clipViewport: false,
 | 
			
		||||
    get clipViewport() {
 | 
			
		||||
        return this._clipViewport;
 | 
			
		||||
    },
 | 
			
		||||
    get clipViewport() { return this._clipViewport; },
 | 
			
		||||
    set clipViewport(viewport) {
 | 
			
		||||
        this._clipViewport = viewport;
 | 
			
		||||
        // May need to readjust the viewport dimensions
 | 
			
		||||
| 
						 | 
				
			
			@ -128,7 +108,7 @@ Display.prototype = {
 | 
			
		|||
 | 
			
		||||
    // ===== EVENT HANDLERS =====
 | 
			
		||||
 | 
			
		||||
    onflush: function () {}, // A flush request has finished
 | 
			
		||||
    onflush: function () {},        // A flush request has finished
 | 
			
		||||
 | 
			
		||||
    // ===== PUBLIC METHODS =====
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -138,7 +118,7 @@ Display.prototype = {
 | 
			
		|||
        deltaY = Math.floor(deltaY);
 | 
			
		||||
 | 
			
		||||
        if (!this._clipViewport) {
 | 
			
		||||
            deltaX = -vp.w; // clamped later of out of bounds
 | 
			
		||||
            deltaX = -vp.w;  // clamped later of out of bounds
 | 
			
		||||
            deltaY = -vp.h;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -158,7 +138,7 @@ Display.prototype = {
 | 
			
		|||
            deltaY = -vp.y;
 | 
			
		||||
        }
 | 
			
		||||
        if (vy2 + deltaY >= this._fb_height) {
 | 
			
		||||
            deltaY -= vy2 + deltaY - this._fb_height + 1;
 | 
			
		||||
            deltaY -= (vy2 + deltaY - this._fb_height + 1);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (deltaX === 0 && deltaY === 0) {
 | 
			
		||||
| 
						 | 
				
			
			@ -174,9 +154,11 @@ Display.prototype = {
 | 
			
		|||
        this.flip();
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    viewportChangeSize: function (width, height) {
 | 
			
		||||
    viewportChangeSize: function(width, height) {
 | 
			
		||||
 | 
			
		||||
        if (!this._clipViewport || typeof width === "undefined" || typeof height === "undefined") {
 | 
			
		||||
        if (!this._clipViewport ||
 | 
			
		||||
            typeof(width) === "undefined" ||
 | 
			
		||||
            typeof(height) === "undefined") {
 | 
			
		||||
 | 
			
		||||
            Log.Debug("Setting viewport to full display region");
 | 
			
		||||
            width = this._fb_width;
 | 
			
		||||
| 
						 | 
				
			
			@ -253,24 +235,24 @@ Display.prototype = {
 | 
			
		|||
    },
 | 
			
		||||
 | 
			
		||||
    // Track what parts of the visible canvas that need updating
 | 
			
		||||
    _damage: function (x, y, w, h) {
 | 
			
		||||
    _damage: function(x, y, w, h) {
 | 
			
		||||
        if (x < this._damageBounds.left) {
 | 
			
		||||
            this._damageBounds.left = x;
 | 
			
		||||
        }
 | 
			
		||||
        if (y < this._damageBounds.top) {
 | 
			
		||||
            this._damageBounds.top = y;
 | 
			
		||||
        }
 | 
			
		||||
        if (x + w > this._damageBounds.right) {
 | 
			
		||||
        if ((x + w) > this._damageBounds.right) {
 | 
			
		||||
            this._damageBounds.right = x + w;
 | 
			
		||||
        }
 | 
			
		||||
        if (y + h > this._damageBounds.bottom) {
 | 
			
		||||
        if ((y + h) > this._damageBounds.bottom) {
 | 
			
		||||
            this._damageBounds.bottom = y + h;
 | 
			
		||||
        }
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    // Update the visible canvas with the contents of the
 | 
			
		||||
    // rendering canvas
 | 
			
		||||
    flip: function (from_queue) {
 | 
			
		||||
    flip: function(from_queue) {
 | 
			
		||||
        if (this._renderQ.length !== 0 && !from_queue) {
 | 
			
		||||
            this._renderQ_push({
 | 
			
		||||
                'type': 'flip'
 | 
			
		||||
| 
						 | 
				
			
			@ -297,18 +279,20 @@ Display.prototype = {
 | 
			
		|||
                vy = 0;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if (vx + w > this._viewportLoc.w) {
 | 
			
		||||
            if ((vx + w) > this._viewportLoc.w) {
 | 
			
		||||
                w = this._viewportLoc.w - vx;
 | 
			
		||||
            }
 | 
			
		||||
            if (vy + h > this._viewportLoc.h) {
 | 
			
		||||
            if ((vy + h) > this._viewportLoc.h) {
 | 
			
		||||
                h = this._viewportLoc.h - vy;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if (w > 0 && h > 0) {
 | 
			
		||||
            if ((w > 0) && (h > 0)) {
 | 
			
		||||
                // FIXME: We may need to disable image smoothing here
 | 
			
		||||
                //        as well (see copyImage()), but we haven't
 | 
			
		||||
                //        noticed any problem yet.
 | 
			
		||||
                this._targetCtx.drawImage(this._backbuffer, x, y, w, h, vx, vy, w, h);
 | 
			
		||||
                this._targetCtx.drawImage(this._backbuffer,
 | 
			
		||||
                                          x, y, w, h,
 | 
			
		||||
                                          vx, vy, w, h);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            this._damageBounds.left = this._damageBounds.top = 65535;
 | 
			
		||||
| 
						 | 
				
			
			@ -327,11 +311,11 @@ Display.prototype = {
 | 
			
		|||
        this.flip();
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    pending: function () {
 | 
			
		||||
    pending: function() {
 | 
			
		||||
        return this._renderQ.length > 0;
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    flush: function () {
 | 
			
		||||
    flush: function() {
 | 
			
		||||
        if (this._renderQ.length === 0) {
 | 
			
		||||
            this.onflush();
 | 
			
		||||
        } else {
 | 
			
		||||
| 
						 | 
				
			
			@ -365,7 +349,7 @@ Display.prototype = {
 | 
			
		|||
                'x': new_x,
 | 
			
		||||
                'y': new_y,
 | 
			
		||||
                'width': w,
 | 
			
		||||
                'height': h
 | 
			
		||||
                'height': h,
 | 
			
		||||
            });
 | 
			
		||||
        } else {
 | 
			
		||||
            // Due to this bug among others [1] we need to disable the image-smoothing to
 | 
			
		||||
| 
						 | 
				
			
			@ -380,14 +364,16 @@ Display.prototype = {
 | 
			
		|||
            this._drawCtx.msImageSmoothingEnabled = false;
 | 
			
		||||
            this._drawCtx.imageSmoothingEnabled = false;
 | 
			
		||||
 | 
			
		||||
            this._drawCtx.drawImage(this._backbuffer, old_x, old_y, w, h, new_x, new_y, w, h);
 | 
			
		||||
            this._drawCtx.drawImage(this._backbuffer,
 | 
			
		||||
                                    old_x, old_y, w, h,
 | 
			
		||||
                                    new_x, new_y, w, h);
 | 
			
		||||
            this._damage(new_x, new_y, w, h);
 | 
			
		||||
        }
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    imageRect: function (x, y, mime, arr) {
 | 
			
		||||
    imageRect: function(x, y, mime, arr) {
 | 
			
		||||
        var img = new Image();
 | 
			
		||||
        img.src = "data: " + mime + ";base64," + _base2.default.encode(arr);
 | 
			
		||||
        img.src = "data: " + mime + ";base64," + Base64.encode(arr);
 | 
			
		||||
        this._renderQ_push({
 | 
			
		||||
            'type': 'img',
 | 
			
		||||
            'img': img,
 | 
			
		||||
| 
						 | 
				
			
			@ -431,7 +417,7 @@ Display.prototype = {
 | 
			
		|||
        var width = this._tile.width;
 | 
			
		||||
        for (var j = y; j < yend; j++) {
 | 
			
		||||
            for (var i = x; i < xend; i++) {
 | 
			
		||||
                var p = (i + j * width) * 4;
 | 
			
		||||
                var p = (i + (j * width)) * 4;
 | 
			
		||||
                data[p] = red;
 | 
			
		||||
                data[p + 1] = green;
 | 
			
		||||
                data[p + 2] = blue;
 | 
			
		||||
| 
						 | 
				
			
			@ -443,7 +429,8 @@ Display.prototype = {
 | 
			
		|||
    // draw the current tile to the screen
 | 
			
		||||
    finishTile: function () {
 | 
			
		||||
        this._drawCtx.putImageData(this._tile, this._tile_x, this._tile_y);
 | 
			
		||||
        this._damage(this._tile_x, this._tile_y, this._tile.width, this._tile.height);
 | 
			
		||||
        this._damage(this._tile_x, this._tile_y,
 | 
			
		||||
                     this._tile.width, this._tile.height);
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    blitImage: function (x, y, width, height, arr, offset, from_queue) {
 | 
			
		||||
| 
						 | 
				
			
			@ -459,14 +446,14 @@ Display.prototype = {
 | 
			
		|||
                'x': x,
 | 
			
		||||
                'y': y,
 | 
			
		||||
                'width': width,
 | 
			
		||||
                'height': height
 | 
			
		||||
                'height': height,
 | 
			
		||||
            });
 | 
			
		||||
        } else {
 | 
			
		||||
            this._bgrxImageData(x, y, width, height, arr, offset);
 | 
			
		||||
        }
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    blitRgbImage: function (x, y, width, height, arr, offset, from_queue) {
 | 
			
		||||
    blitRgbImage: function (x, y , width, height, arr, offset, from_queue) {
 | 
			
		||||
        if (this._renderQ.length !== 0 && !from_queue) {
 | 
			
		||||
            // NB(directxman12): it's technically more performant here to use preallocated arrays,
 | 
			
		||||
            // but it's a lot of extra work for not a lot of payoff -- if we're using the render queue,
 | 
			
		||||
| 
						 | 
				
			
			@ -479,7 +466,7 @@ Display.prototype = {
 | 
			
		|||
                'x': x,
 | 
			
		||||
                'y': y,
 | 
			
		||||
                'width': width,
 | 
			
		||||
                'height': height
 | 
			
		||||
                'height': height,
 | 
			
		||||
            });
 | 
			
		||||
        } else {
 | 
			
		||||
            this._rgbImageData(x, y, width, height, arr, offset);
 | 
			
		||||
| 
						 | 
				
			
			@ -499,7 +486,7 @@ Display.prototype = {
 | 
			
		|||
                'x': x,
 | 
			
		||||
                'y': y,
 | 
			
		||||
                'width': width,
 | 
			
		||||
                'height': height
 | 
			
		||||
                'height': height,
 | 
			
		||||
            });
 | 
			
		||||
        } else {
 | 
			
		||||
            this._rgbxImageData(x, y, width, height, arr, offset);
 | 
			
		||||
| 
						 | 
				
			
			@ -551,7 +538,8 @@ Display.prototype = {
 | 
			
		|||
        var width = Math.round(factor * vp.w) + 'px';
 | 
			
		||||
        var height = Math.round(factor * vp.h) + 'px';
 | 
			
		||||
 | 
			
		||||
        if (this._target.style.width !== width || this._target.style.height !== height) {
 | 
			
		||||
        if ((this._target.style.width !== width) ||
 | 
			
		||||
            (this._target.style.height !== height)) {
 | 
			
		||||
            this._target.style.width = width;
 | 
			
		||||
            this._target.style.height = height;
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			@ -569,10 +557,10 @@ Display.prototype = {
 | 
			
		|||
        var img = this._drawCtx.createImageData(width, height);
 | 
			
		||||
        var data = img.data;
 | 
			
		||||
        for (var i = 0, j = offset; i < width * height * 4; i += 4, j += 3) {
 | 
			
		||||
            data[i] = arr[j];
 | 
			
		||||
            data[i]     = arr[j];
 | 
			
		||||
            data[i + 1] = arr[j + 1];
 | 
			
		||||
            data[i + 2] = arr[j + 2];
 | 
			
		||||
            data[i + 3] = 255; // Alpha
 | 
			
		||||
            data[i + 3] = 255;  // Alpha
 | 
			
		||||
        }
 | 
			
		||||
        this._drawCtx.putImageData(img, x, y);
 | 
			
		||||
        this._damage(x, y, img.width, img.height);
 | 
			
		||||
| 
						 | 
				
			
			@ -582,10 +570,10 @@ Display.prototype = {
 | 
			
		|||
        var img = this._drawCtx.createImageData(width, height);
 | 
			
		||||
        var data = img.data;
 | 
			
		||||
        for (var i = 0, j = offset; i < width * height * 4; i += 4, j += 4) {
 | 
			
		||||
            data[i] = arr[j + 2];
 | 
			
		||||
            data[i]     = arr[j + 2];
 | 
			
		||||
            data[i + 1] = arr[j + 1];
 | 
			
		||||
            data[i + 2] = arr[j];
 | 
			
		||||
            data[i + 3] = 255; // Alpha
 | 
			
		||||
            data[i + 3] = 255;  // Alpha
 | 
			
		||||
        }
 | 
			
		||||
        this._drawCtx.putImageData(img, x, y);
 | 
			
		||||
        this._damage(x, y, img.width, img.height);
 | 
			
		||||
| 
						 | 
				
			
			@ -613,7 +601,7 @@ Display.prototype = {
 | 
			
		|||
        }
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _resume_renderQ: function () {
 | 
			
		||||
    _resume_renderQ: function() {
 | 
			
		||||
        // "this" is the object that is ready, not the
 | 
			
		||||
        // display object
 | 
			
		||||
        this.removeEventListener('load', this._noVNC_display._resume_renderQ);
 | 
			
		||||
| 
						 | 
				
			
			@ -665,27 +653,27 @@ Display.prototype = {
 | 
			
		|||
            this._flushing = false;
 | 
			
		||||
            this.onflush();
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    },
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// Class Methods
 | 
			
		||||
Display.changeCursor = function (target, pixels, mask, hotx, hoty, w, h) {
 | 
			
		||||
    if (w === 0 || h === 0) {
 | 
			
		||||
    if ((w === 0) || (h === 0)) {
 | 
			
		||||
        target.style.cursor = 'none';
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    var cur = [];
 | 
			
		||||
    var cur = []
 | 
			
		||||
    var y, x;
 | 
			
		||||
    for (y = 0; y < h; y++) {
 | 
			
		||||
        for (x = 0; x < w; x++) {
 | 
			
		||||
            var idx = y * Math.ceil(w / 8) + Math.floor(x / 8);
 | 
			
		||||
            var alpha = mask[idx] << x % 8 & 0x80 ? 255 : 0;
 | 
			
		||||
            idx = (w * y + x) * 4;
 | 
			
		||||
            var alpha = (mask[idx] << (x % 8)) & 0x80 ? 255 : 0;
 | 
			
		||||
            idx = ((w * y) + x) * 4;
 | 
			
		||||
            cur.push(pixels[idx + 2]); // red
 | 
			
		||||
            cur.push(pixels[idx + 1]); // green
 | 
			
		||||
            cur.push(pixels[idx]); // blue
 | 
			
		||||
            cur.push(alpha); // alpha
 | 
			
		||||
            cur.push(pixels[idx]);     // blue
 | 
			
		||||
            cur.push(alpha);           // alpha
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -707,4 +695,4 @@ Display.changeCursor = function (target, pixels, mask, hotx, hoty, w, h) {
 | 
			
		|||
 | 
			
		||||
    var url = canvas.toDataURL();
 | 
			
		||||
    target.style.cursor = 'url(' + url + ')' + hotx + ' ' + hoty + ', default';
 | 
			
		||||
};
 | 
			
		||||
};
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,9 +1,3 @@
 | 
			
		|||
"use strict";
 | 
			
		||||
 | 
			
		||||
Object.defineProperty(exports, "__esModule", {
 | 
			
		||||
    value: true
 | 
			
		||||
});
 | 
			
		||||
exports.encodingName = encodingName;
 | 
			
		||||
/*
 | 
			
		||||
 * noVNC: HTML5 VNC client
 | 
			
		||||
 * Copyright (C) 2017 Pierre Ossman for Cendio AB
 | 
			
		||||
| 
						 | 
				
			
			@ -12,7 +6,7 @@ exports.encodingName = encodingName;
 | 
			
		|||
 * See README.md for usage and integration instructions.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
var encodings = exports.encodings = {
 | 
			
		||||
export var encodings = {
 | 
			
		||||
    encodingRaw: 0,
 | 
			
		||||
    encodingCopyRect: 1,
 | 
			
		||||
    encodingRRE: 2,
 | 
			
		||||
| 
						 | 
				
			
			@ -31,22 +25,16 @@ var encodings = exports.encodings = {
 | 
			
		|||
    pseudoEncodingFence: -312,
 | 
			
		||||
    pseudoEncodingContinuousUpdates: -313,
 | 
			
		||||
    pseudoEncodingCompressLevel9: -247,
 | 
			
		||||
    pseudoEncodingCompressLevel0: -256
 | 
			
		||||
    pseudoEncodingCompressLevel0: -256,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
function encodingName(num) {
 | 
			
		||||
export function encodingName(num) {
 | 
			
		||||
    switch (num) {
 | 
			
		||||
        case encodings.encodingRaw:
 | 
			
		||||
            return "Raw";
 | 
			
		||||
        case encodings.encodingCopyRect:
 | 
			
		||||
            return "CopyRect";
 | 
			
		||||
        case encodings.encodingRRE:
 | 
			
		||||
            return "RRE";
 | 
			
		||||
        case encodings.encodingHextile:
 | 
			
		||||
            return "Hextile";
 | 
			
		||||
        case encodings.encodingTight:
 | 
			
		||||
            return "Tight";
 | 
			
		||||
        default:
 | 
			
		||||
            return "[unknown encoding " + num + "]";
 | 
			
		||||
        case encodings.encodingRaw:      return "Raw";
 | 
			
		||||
        case encodings.encodingCopyRect: return "CopyRect";
 | 
			
		||||
        case encodings.encodingRRE:      return "RRE";
 | 
			
		||||
        case encodings.encodingHextile:  return "Hextile";
 | 
			
		||||
        case encodings.encodingTight:    return "Tight";
 | 
			
		||||
        default:                         return "[unknown encoding " + num + "]";
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,17 +1,5 @@
 | 
			
		|||
"use strict";
 | 
			
		||||
 | 
			
		||||
Object.defineProperty(exports, "__esModule", {
 | 
			
		||||
    value: true
 | 
			
		||||
});
 | 
			
		||||
exports.default = Inflate;
 | 
			
		||||
 | 
			
		||||
var _inflate = require("../vendor/pako/lib/zlib/inflate.js");
 | 
			
		||||
 | 
			
		||||
var _zstream = require("../vendor/pako/lib/zlib/zstream.js");
 | 
			
		||||
 | 
			
		||||
var _zstream2 = _interopRequireDefault(_zstream);
 | 
			
		||||
 | 
			
		||||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
 | 
			
		||||
import { inflateInit, inflate, inflateReset } from "../vendor/pako/lib/zlib/inflate.js";
 | 
			
		||||
import ZStream from "../vendor/pako/lib/zlib/zstream.js";
 | 
			
		||||
 | 
			
		||||
Inflate.prototype = {
 | 
			
		||||
    inflate: function (data, flush, expected) {
 | 
			
		||||
| 
						 | 
				
			
			@ -30,21 +18,21 @@ Inflate.prototype = {
 | 
			
		|||
 | 
			
		||||
        this.strm.avail_out = this.chunkSize;
 | 
			
		||||
 | 
			
		||||
        (0, _inflate.inflate)(this.strm, flush);
 | 
			
		||||
        inflate(this.strm, flush);
 | 
			
		||||
 | 
			
		||||
        return new Uint8Array(this.strm.output.buffer, 0, this.strm.next_out);
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    reset: function () {
 | 
			
		||||
        (0, _inflate.inflateReset)(this.strm);
 | 
			
		||||
        inflateReset(this.strm);
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
function Inflate() {
 | 
			
		||||
    this.strm = new _zstream2.default();
 | 
			
		||||
export default function Inflate() {
 | 
			
		||||
    this.strm = new ZStream();
 | 
			
		||||
    this.chunkSize = 1024 * 10 * 10;
 | 
			
		||||
    this.strm.output = new Uint8Array(this.chunkSize);
 | 
			
		||||
    this.windowBits = 5;
 | 
			
		||||
 | 
			
		||||
    (0, _inflate.inflateInit)(this.strm, this.windowBits);
 | 
			
		||||
};
 | 
			
		||||
    inflateInit(this.strm, this.windowBits);
 | 
			
		||||
};
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,14 +1,10 @@
 | 
			
		|||
"use strict";
 | 
			
		||||
/*
 | 
			
		||||
 * noVNC: HTML5 VNC client
 | 
			
		||||
 * Copyright (C) 2017 Pierre Ossman for Cendio AB
 | 
			
		||||
 * Licensed under MPL 2.0 or any later version (see LICENSE.txt)
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
Object.defineProperty(exports, "__esModule", {
 | 
			
		||||
    value: true
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
var _keysym = require("./keysym.js");
 | 
			
		||||
 | 
			
		||||
var _keysym2 = _interopRequireDefault(_keysym);
 | 
			
		||||
 | 
			
		||||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
 | 
			
		||||
import KeyTable from "./keysym.js";
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Mapping between HTML key values and VNC/X11 keysyms for "special"
 | 
			
		||||
| 
						 | 
				
			
			@ -17,26 +13,25 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
 | 
			
		|||
 * See https://www.w3.org/TR/uievents-key/ for possible values.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
var DOMKeyTable = {}; /*
 | 
			
		||||
                       * noVNC: HTML5 VNC client
 | 
			
		||||
                       * Copyright (C) 2017 Pierre Ossman for Cendio AB
 | 
			
		||||
                       * Licensed under MPL 2.0 or any later version (see LICENSE.txt)
 | 
			
		||||
                       */
 | 
			
		||||
var DOMKeyTable = {};
 | 
			
		||||
 | 
			
		||||
function addStandard(key, standard) {
 | 
			
		||||
function addStandard(key, standard)
 | 
			
		||||
{
 | 
			
		||||
    if (standard === undefined) throw "Undefined keysym for key \"" + key + "\"";
 | 
			
		||||
    if (key in DOMKeyTable) throw "Duplicate entry for key \"" + key + "\"";
 | 
			
		||||
    DOMKeyTable[key] = [standard, standard, standard, standard];
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function addLeftRight(key, left, right) {
 | 
			
		||||
function addLeftRight(key, left, right)
 | 
			
		||||
{
 | 
			
		||||
    if (left === undefined) throw "Undefined keysym for key \"" + key + "\"";
 | 
			
		||||
    if (right === undefined) throw "Undefined keysym for key \"" + key + "\"";
 | 
			
		||||
    if (key in DOMKeyTable) throw "Duplicate entry for key \"" + key + "\"";
 | 
			
		||||
    DOMKeyTable[key] = [left, left, right, left];
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function addNumpad(key, standard, numpad) {
 | 
			
		||||
function addNumpad(key, standard, numpad)
 | 
			
		||||
{
 | 
			
		||||
    if (standard === undefined) throw "Undefined keysym for key \"" + key + "\"";
 | 
			
		||||
    if (numpad === undefined) throw "Undefined keysym for key \"" + key + "\"";
 | 
			
		||||
    if (key in DOMKeyTable) throw "Duplicate entry for key \"" + key + "\"";
 | 
			
		||||
| 
						 | 
				
			
			@ -45,177 +40,177 @@ function addNumpad(key, standard, numpad) {
 | 
			
		|||
 | 
			
		||||
// 2.2. Modifier Keys
 | 
			
		||||
 | 
			
		||||
addLeftRight("Alt", _keysym2.default.XK_Alt_L, _keysym2.default.XK_Alt_R);
 | 
			
		||||
addStandard("AltGraph", _keysym2.default.XK_ISO_Level3_Shift);
 | 
			
		||||
addStandard("CapsLock", _keysym2.default.XK_Caps_Lock);
 | 
			
		||||
addLeftRight("Control", _keysym2.default.XK_Control_L, _keysym2.default.XK_Control_R);
 | 
			
		||||
addLeftRight("Alt", KeyTable.XK_Alt_L, KeyTable.XK_Alt_R);
 | 
			
		||||
addStandard("AltGraph", KeyTable.XK_ISO_Level3_Shift);
 | 
			
		||||
addStandard("CapsLock", KeyTable.XK_Caps_Lock);
 | 
			
		||||
addLeftRight("Control", KeyTable.XK_Control_L, KeyTable.XK_Control_R);
 | 
			
		||||
// - Fn
 | 
			
		||||
// - FnLock
 | 
			
		||||
addLeftRight("Hyper", _keysym2.default.XK_Super_L, _keysym2.default.XK_Super_R);
 | 
			
		||||
addLeftRight("Meta", _keysym2.default.XK_Super_L, _keysym2.default.XK_Super_R);
 | 
			
		||||
addStandard("NumLock", _keysym2.default.XK_Num_Lock);
 | 
			
		||||
addStandard("ScrollLock", _keysym2.default.XK_Scroll_Lock);
 | 
			
		||||
addLeftRight("Shift", _keysym2.default.XK_Shift_L, _keysym2.default.XK_Shift_R);
 | 
			
		||||
addLeftRight("Super", _keysym2.default.XK_Super_L, _keysym2.default.XK_Super_R);
 | 
			
		||||
addLeftRight("Hyper", KeyTable.XK_Super_L, KeyTable.XK_Super_R);
 | 
			
		||||
addLeftRight("Meta", KeyTable.XK_Super_L, KeyTable.XK_Super_R);
 | 
			
		||||
addStandard("NumLock", KeyTable.XK_Num_Lock);
 | 
			
		||||
addStandard("ScrollLock", KeyTable.XK_Scroll_Lock);
 | 
			
		||||
addLeftRight("Shift", KeyTable.XK_Shift_L, KeyTable.XK_Shift_R);
 | 
			
		||||
addLeftRight("Super", KeyTable.XK_Super_L, KeyTable.XK_Super_R);
 | 
			
		||||
// - Symbol
 | 
			
		||||
// - SymbolLock
 | 
			
		||||
 | 
			
		||||
// 2.3. Whitespace Keys
 | 
			
		||||
 | 
			
		||||
addNumpad("Enter", _keysym2.default.XK_Return, _keysym2.default.XK_KP_Enter);
 | 
			
		||||
addStandard("Tab", _keysym2.default.XK_Tab);
 | 
			
		||||
addNumpad(" ", _keysym2.default.XK_space, _keysym2.default.XK_KP_Space);
 | 
			
		||||
addNumpad("Enter", KeyTable.XK_Return, KeyTable.XK_KP_Enter);
 | 
			
		||||
addStandard("Tab", KeyTable.XK_Tab);
 | 
			
		||||
addNumpad(" ", KeyTable.XK_space, KeyTable.XK_KP_Space);
 | 
			
		||||
 | 
			
		||||
// 2.4. Navigation Keys
 | 
			
		||||
 | 
			
		||||
addNumpad("ArrowDown", _keysym2.default.XK_Down, _keysym2.default.XK_KP_Down);
 | 
			
		||||
addNumpad("ArrowUp", _keysym2.default.XK_Up, _keysym2.default.XK_KP_Up);
 | 
			
		||||
addNumpad("ArrowLeft", _keysym2.default.XK_Left, _keysym2.default.XK_KP_Left);
 | 
			
		||||
addNumpad("ArrowRight", _keysym2.default.XK_Right, _keysym2.default.XK_KP_Right);
 | 
			
		||||
addNumpad("End", _keysym2.default.XK_End, _keysym2.default.XK_KP_End);
 | 
			
		||||
addNumpad("Home", _keysym2.default.XK_Home, _keysym2.default.XK_KP_Home);
 | 
			
		||||
addNumpad("PageDown", _keysym2.default.XK_Next, _keysym2.default.XK_KP_Next);
 | 
			
		||||
addNumpad("PageUp", _keysym2.default.XK_Prior, _keysym2.default.XK_KP_Prior);
 | 
			
		||||
addNumpad("ArrowDown", KeyTable.XK_Down, KeyTable.XK_KP_Down);
 | 
			
		||||
addNumpad("ArrowUp", KeyTable.XK_Up, KeyTable.XK_KP_Up);
 | 
			
		||||
addNumpad("ArrowLeft", KeyTable.XK_Left, KeyTable.XK_KP_Left);
 | 
			
		||||
addNumpad("ArrowRight", KeyTable.XK_Right, KeyTable.XK_KP_Right);
 | 
			
		||||
addNumpad("End", KeyTable.XK_End, KeyTable.XK_KP_End);
 | 
			
		||||
addNumpad("Home", KeyTable.XK_Home, KeyTable.XK_KP_Home);
 | 
			
		||||
addNumpad("PageDown", KeyTable.XK_Next, KeyTable.XK_KP_Next);
 | 
			
		||||
addNumpad("PageUp", KeyTable.XK_Prior, KeyTable.XK_KP_Prior);
 | 
			
		||||
 | 
			
		||||
// 2.5. Editing Keys
 | 
			
		||||
 | 
			
		||||
addStandard("Backspace", _keysym2.default.XK_BackSpace);
 | 
			
		||||
addStandard("Clear", _keysym2.default.XK_Clear);
 | 
			
		||||
addStandard("Copy", _keysym2.default.XF86XK_Copy);
 | 
			
		||||
addStandard("Backspace", KeyTable.XK_BackSpace);
 | 
			
		||||
addStandard("Clear", KeyTable.XK_Clear);
 | 
			
		||||
addStandard("Copy", KeyTable.XF86XK_Copy);
 | 
			
		||||
// - CrSel
 | 
			
		||||
addStandard("Cut", _keysym2.default.XF86XK_Cut);
 | 
			
		||||
addNumpad("Delete", _keysym2.default.XK_Delete, _keysym2.default.XK_KP_Delete);
 | 
			
		||||
addStandard("Cut", KeyTable.XF86XK_Cut);
 | 
			
		||||
addNumpad("Delete", KeyTable.XK_Delete, KeyTable.XK_KP_Delete);
 | 
			
		||||
// - EraseEof
 | 
			
		||||
// - ExSel
 | 
			
		||||
addNumpad("Insert", _keysym2.default.XK_Insert, _keysym2.default.XK_KP_Insert);
 | 
			
		||||
addStandard("Paste", _keysym2.default.XF86XK_Paste);
 | 
			
		||||
addStandard("Redo", _keysym2.default.XK_Redo);
 | 
			
		||||
addStandard("Undo", _keysym2.default.XK_Undo);
 | 
			
		||||
addNumpad("Insert", KeyTable.XK_Insert, KeyTable.XK_KP_Insert);
 | 
			
		||||
addStandard("Paste", KeyTable.XF86XK_Paste);
 | 
			
		||||
addStandard("Redo", KeyTable.XK_Redo);
 | 
			
		||||
addStandard("Undo", KeyTable.XK_Undo);
 | 
			
		||||
 | 
			
		||||
// 2.6. UI Keys
 | 
			
		||||
 | 
			
		||||
// - Accept
 | 
			
		||||
// - Again (could just be XK_Redo)
 | 
			
		||||
// - Attn
 | 
			
		||||
addStandard("Cancel", _keysym2.default.XK_Cancel);
 | 
			
		||||
addStandard("ContextMenu", _keysym2.default.XK_Menu);
 | 
			
		||||
addStandard("Escape", _keysym2.default.XK_Escape);
 | 
			
		||||
addStandard("Execute", _keysym2.default.XK_Execute);
 | 
			
		||||
addStandard("Find", _keysym2.default.XK_Find);
 | 
			
		||||
addStandard("Help", _keysym2.default.XK_Help);
 | 
			
		||||
addStandard("Pause", _keysym2.default.XK_Pause);
 | 
			
		||||
addStandard("Cancel", KeyTable.XK_Cancel);
 | 
			
		||||
addStandard("ContextMenu", KeyTable.XK_Menu);
 | 
			
		||||
addStandard("Escape", KeyTable.XK_Escape);
 | 
			
		||||
addStandard("Execute", KeyTable.XK_Execute);
 | 
			
		||||
addStandard("Find", KeyTable.XK_Find);
 | 
			
		||||
addStandard("Help", KeyTable.XK_Help);
 | 
			
		||||
addStandard("Pause", KeyTable.XK_Pause);
 | 
			
		||||
// - Play
 | 
			
		||||
// - Props
 | 
			
		||||
addStandard("Select", _keysym2.default.XK_Select);
 | 
			
		||||
addStandard("ZoomIn", _keysym2.default.XF86XK_ZoomIn);
 | 
			
		||||
addStandard("ZoomOut", _keysym2.default.XF86XK_ZoomOut);
 | 
			
		||||
addStandard("Select", KeyTable.XK_Select);
 | 
			
		||||
addStandard("ZoomIn", KeyTable.XF86XK_ZoomIn);
 | 
			
		||||
addStandard("ZoomOut", KeyTable.XF86XK_ZoomOut);
 | 
			
		||||
 | 
			
		||||
// 2.7. Device Keys
 | 
			
		||||
 | 
			
		||||
addStandard("BrightnessDown", _keysym2.default.XF86XK_MonBrightnessDown);
 | 
			
		||||
addStandard("BrightnessUp", _keysym2.default.XF86XK_MonBrightnessUp);
 | 
			
		||||
addStandard("Eject", _keysym2.default.XF86XK_Eject);
 | 
			
		||||
addStandard("LogOff", _keysym2.default.XF86XK_LogOff);
 | 
			
		||||
addStandard("Power", _keysym2.default.XF86XK_PowerOff);
 | 
			
		||||
addStandard("PowerOff", _keysym2.default.XF86XK_PowerDown);
 | 
			
		||||
addStandard("PrintScreen", _keysym2.default.XK_Print);
 | 
			
		||||
addStandard("Hibernate", _keysym2.default.XF86XK_Hibernate);
 | 
			
		||||
addStandard("Standby", _keysym2.default.XF86XK_Standby);
 | 
			
		||||
addStandard("WakeUp", _keysym2.default.XF86XK_WakeUp);
 | 
			
		||||
addStandard("BrightnessDown", KeyTable.XF86XK_MonBrightnessDown);
 | 
			
		||||
addStandard("BrightnessUp", KeyTable.XF86XK_MonBrightnessUp);
 | 
			
		||||
addStandard("Eject", KeyTable.XF86XK_Eject);
 | 
			
		||||
addStandard("LogOff", KeyTable.XF86XK_LogOff);
 | 
			
		||||
addStandard("Power", KeyTable.XF86XK_PowerOff);
 | 
			
		||||
addStandard("PowerOff", KeyTable.XF86XK_PowerDown);
 | 
			
		||||
addStandard("PrintScreen", KeyTable.XK_Print);
 | 
			
		||||
addStandard("Hibernate", KeyTable.XF86XK_Hibernate);
 | 
			
		||||
addStandard("Standby", KeyTable.XF86XK_Standby);
 | 
			
		||||
addStandard("WakeUp", KeyTable.XF86XK_WakeUp);
 | 
			
		||||
 | 
			
		||||
// 2.8. IME and Composition Keys
 | 
			
		||||
 | 
			
		||||
addStandard("AllCandidates", _keysym2.default.XK_MultipleCandidate);
 | 
			
		||||
addStandard("Alphanumeric", _keysym2.default.XK_Eisu_Shift); // could also be _Eisu_Toggle
 | 
			
		||||
addStandard("CodeInput", _keysym2.default.XK_Codeinput);
 | 
			
		||||
addStandard("Compose", _keysym2.default.XK_Multi_key);
 | 
			
		||||
addStandard("Convert", _keysym2.default.XK_Henkan);
 | 
			
		||||
addStandard("AllCandidates", KeyTable.XK_MultipleCandidate);
 | 
			
		||||
addStandard("Alphanumeric", KeyTable.XK_Eisu_Shift); // could also be _Eisu_Toggle
 | 
			
		||||
addStandard("CodeInput", KeyTable.XK_Codeinput);
 | 
			
		||||
addStandard("Compose", KeyTable.XK_Multi_key);
 | 
			
		||||
addStandard("Convert", KeyTable.XK_Henkan);
 | 
			
		||||
// - Dead
 | 
			
		||||
// - FinalMode
 | 
			
		||||
addStandard("GroupFirst", _keysym2.default.XK_ISO_First_Group);
 | 
			
		||||
addStandard("GroupLast", _keysym2.default.XK_ISO_Last_Group);
 | 
			
		||||
addStandard("GroupNext", _keysym2.default.XK_ISO_Next_Group);
 | 
			
		||||
addStandard("GroupPrevious", _keysym2.default.XK_ISO_Prev_Group);
 | 
			
		||||
addStandard("GroupFirst", KeyTable.XK_ISO_First_Group);
 | 
			
		||||
addStandard("GroupLast", KeyTable.XK_ISO_Last_Group);
 | 
			
		||||
addStandard("GroupNext", KeyTable.XK_ISO_Next_Group);
 | 
			
		||||
addStandard("GroupPrevious", KeyTable.XK_ISO_Prev_Group);
 | 
			
		||||
// - ModeChange (XK_Mode_switch is often used for AltGr)
 | 
			
		||||
// - NextCandidate
 | 
			
		||||
addStandard("NonConvert", _keysym2.default.XK_Muhenkan);
 | 
			
		||||
addStandard("PreviousCandidate", _keysym2.default.XK_PreviousCandidate);
 | 
			
		||||
addStandard("NonConvert", KeyTable.XK_Muhenkan);
 | 
			
		||||
addStandard("PreviousCandidate", KeyTable.XK_PreviousCandidate);
 | 
			
		||||
// - Process
 | 
			
		||||
addStandard("SingleCandidate", _keysym2.default.XK_SingleCandidate);
 | 
			
		||||
addStandard("HangulMode", _keysym2.default.XK_Hangul);
 | 
			
		||||
addStandard("HanjaMode", _keysym2.default.XK_Hangul_Hanja);
 | 
			
		||||
addStandard("JunjuaMode", _keysym2.default.XK_Hangul_Jeonja);
 | 
			
		||||
addStandard("Eisu", _keysym2.default.XK_Eisu_toggle);
 | 
			
		||||
addStandard("Hankaku", _keysym2.default.XK_Hankaku);
 | 
			
		||||
addStandard("Hiragana", _keysym2.default.XK_Hiragana);
 | 
			
		||||
addStandard("HiraganaKatakana", _keysym2.default.XK_Hiragana_Katakana);
 | 
			
		||||
addStandard("KanaMode", _keysym2.default.XK_Kana_Shift); // could also be _Kana_Lock
 | 
			
		||||
addStandard("KanjiMode", _keysym2.default.XK_Kanji);
 | 
			
		||||
addStandard("Katakana", _keysym2.default.XK_Katakana);
 | 
			
		||||
addStandard("Romaji", _keysym2.default.XK_Romaji);
 | 
			
		||||
addStandard("Zenkaku", _keysym2.default.XK_Zenkaku);
 | 
			
		||||
addStandard("ZenkakuHanaku", _keysym2.default.XK_Zenkaku_Hankaku);
 | 
			
		||||
addStandard("SingleCandidate", KeyTable.XK_SingleCandidate);
 | 
			
		||||
addStandard("HangulMode", KeyTable.XK_Hangul);
 | 
			
		||||
addStandard("HanjaMode", KeyTable.XK_Hangul_Hanja);
 | 
			
		||||
addStandard("JunjuaMode", KeyTable.XK_Hangul_Jeonja);
 | 
			
		||||
addStandard("Eisu", KeyTable.XK_Eisu_toggle);
 | 
			
		||||
addStandard("Hankaku", KeyTable.XK_Hankaku);
 | 
			
		||||
addStandard("Hiragana", KeyTable.XK_Hiragana);
 | 
			
		||||
addStandard("HiraganaKatakana", KeyTable.XK_Hiragana_Katakana);
 | 
			
		||||
addStandard("KanaMode", KeyTable.XK_Kana_Shift); // could also be _Kana_Lock
 | 
			
		||||
addStandard("KanjiMode", KeyTable.XK_Kanji);
 | 
			
		||||
addStandard("Katakana", KeyTable.XK_Katakana);
 | 
			
		||||
addStandard("Romaji", KeyTable.XK_Romaji);
 | 
			
		||||
addStandard("Zenkaku", KeyTable.XK_Zenkaku);
 | 
			
		||||
addStandard("ZenkakuHanaku", KeyTable.XK_Zenkaku_Hankaku);
 | 
			
		||||
 | 
			
		||||
// 2.9. General-Purpose Function Keys
 | 
			
		||||
 | 
			
		||||
addStandard("F1", _keysym2.default.XK_F1);
 | 
			
		||||
addStandard("F2", _keysym2.default.XK_F2);
 | 
			
		||||
addStandard("F3", _keysym2.default.XK_F3);
 | 
			
		||||
addStandard("F4", _keysym2.default.XK_F4);
 | 
			
		||||
addStandard("F5", _keysym2.default.XK_F5);
 | 
			
		||||
addStandard("F6", _keysym2.default.XK_F6);
 | 
			
		||||
addStandard("F7", _keysym2.default.XK_F7);
 | 
			
		||||
addStandard("F8", _keysym2.default.XK_F8);
 | 
			
		||||
addStandard("F9", _keysym2.default.XK_F9);
 | 
			
		||||
addStandard("F10", _keysym2.default.XK_F10);
 | 
			
		||||
addStandard("F11", _keysym2.default.XK_F11);
 | 
			
		||||
addStandard("F12", _keysym2.default.XK_F12);
 | 
			
		||||
addStandard("F13", _keysym2.default.XK_F13);
 | 
			
		||||
addStandard("F14", _keysym2.default.XK_F14);
 | 
			
		||||
addStandard("F15", _keysym2.default.XK_F15);
 | 
			
		||||
addStandard("F16", _keysym2.default.XK_F16);
 | 
			
		||||
addStandard("F17", _keysym2.default.XK_F17);
 | 
			
		||||
addStandard("F18", _keysym2.default.XK_F18);
 | 
			
		||||
addStandard("F19", _keysym2.default.XK_F19);
 | 
			
		||||
addStandard("F20", _keysym2.default.XK_F20);
 | 
			
		||||
addStandard("F21", _keysym2.default.XK_F21);
 | 
			
		||||
addStandard("F22", _keysym2.default.XK_F22);
 | 
			
		||||
addStandard("F23", _keysym2.default.XK_F23);
 | 
			
		||||
addStandard("F24", _keysym2.default.XK_F24);
 | 
			
		||||
addStandard("F25", _keysym2.default.XK_F25);
 | 
			
		||||
addStandard("F26", _keysym2.default.XK_F26);
 | 
			
		||||
addStandard("F27", _keysym2.default.XK_F27);
 | 
			
		||||
addStandard("F28", _keysym2.default.XK_F28);
 | 
			
		||||
addStandard("F29", _keysym2.default.XK_F29);
 | 
			
		||||
addStandard("F30", _keysym2.default.XK_F30);
 | 
			
		||||
addStandard("F31", _keysym2.default.XK_F31);
 | 
			
		||||
addStandard("F32", _keysym2.default.XK_F32);
 | 
			
		||||
addStandard("F33", _keysym2.default.XK_F33);
 | 
			
		||||
addStandard("F34", _keysym2.default.XK_F34);
 | 
			
		||||
addStandard("F35", _keysym2.default.XK_F35);
 | 
			
		||||
addStandard("F1", KeyTable.XK_F1);
 | 
			
		||||
addStandard("F2", KeyTable.XK_F2);
 | 
			
		||||
addStandard("F3", KeyTable.XK_F3);
 | 
			
		||||
addStandard("F4", KeyTable.XK_F4);
 | 
			
		||||
addStandard("F5", KeyTable.XK_F5);
 | 
			
		||||
addStandard("F6", KeyTable.XK_F6);
 | 
			
		||||
addStandard("F7", KeyTable.XK_F7);
 | 
			
		||||
addStandard("F8", KeyTable.XK_F8);
 | 
			
		||||
addStandard("F9", KeyTable.XK_F9);
 | 
			
		||||
addStandard("F10", KeyTable.XK_F10);
 | 
			
		||||
addStandard("F11", KeyTable.XK_F11);
 | 
			
		||||
addStandard("F12", KeyTable.XK_F12);
 | 
			
		||||
addStandard("F13", KeyTable.XK_F13);
 | 
			
		||||
addStandard("F14", KeyTable.XK_F14);
 | 
			
		||||
addStandard("F15", KeyTable.XK_F15);
 | 
			
		||||
addStandard("F16", KeyTable.XK_F16);
 | 
			
		||||
addStandard("F17", KeyTable.XK_F17);
 | 
			
		||||
addStandard("F18", KeyTable.XK_F18);
 | 
			
		||||
addStandard("F19", KeyTable.XK_F19);
 | 
			
		||||
addStandard("F20", KeyTable.XK_F20);
 | 
			
		||||
addStandard("F21", KeyTable.XK_F21);
 | 
			
		||||
addStandard("F22", KeyTable.XK_F22);
 | 
			
		||||
addStandard("F23", KeyTable.XK_F23);
 | 
			
		||||
addStandard("F24", KeyTable.XK_F24);
 | 
			
		||||
addStandard("F25", KeyTable.XK_F25);
 | 
			
		||||
addStandard("F26", KeyTable.XK_F26);
 | 
			
		||||
addStandard("F27", KeyTable.XK_F27);
 | 
			
		||||
addStandard("F28", KeyTable.XK_F28);
 | 
			
		||||
addStandard("F29", KeyTable.XK_F29);
 | 
			
		||||
addStandard("F30", KeyTable.XK_F30);
 | 
			
		||||
addStandard("F31", KeyTable.XK_F31);
 | 
			
		||||
addStandard("F32", KeyTable.XK_F32);
 | 
			
		||||
addStandard("F33", KeyTable.XK_F33);
 | 
			
		||||
addStandard("F34", KeyTable.XK_F34);
 | 
			
		||||
addStandard("F35", KeyTable.XK_F35);
 | 
			
		||||
// - Soft1...
 | 
			
		||||
 | 
			
		||||
// 2.10. Multimedia Keys
 | 
			
		||||
 | 
			
		||||
// - ChannelDown
 | 
			
		||||
// - ChannelUp
 | 
			
		||||
addStandard("Close", _keysym2.default.XF86XK_Close);
 | 
			
		||||
addStandard("MailForward", _keysym2.default.XF86XK_MailForward);
 | 
			
		||||
addStandard("MailReply", _keysym2.default.XF86XK_Reply);
 | 
			
		||||
addStandard("MainSend", _keysym2.default.XF86XK_Send);
 | 
			
		||||
addStandard("MediaFastForward", _keysym2.default.XF86XK_AudioForward);
 | 
			
		||||
addStandard("MediaPause", _keysym2.default.XF86XK_AudioPause);
 | 
			
		||||
addStandard("MediaPlay", _keysym2.default.XF86XK_AudioPlay);
 | 
			
		||||
addStandard("MediaRecord", _keysym2.default.XF86XK_AudioRecord);
 | 
			
		||||
addStandard("MediaRewind", _keysym2.default.XF86XK_AudioRewind);
 | 
			
		||||
addStandard("MediaStop", _keysym2.default.XF86XK_AudioStop);
 | 
			
		||||
addStandard("MediaTrackNext", _keysym2.default.XF86XK_AudioNext);
 | 
			
		||||
addStandard("MediaTrackPrevious", _keysym2.default.XF86XK_AudioPrev);
 | 
			
		||||
addStandard("New", _keysym2.default.XF86XK_New);
 | 
			
		||||
addStandard("Open", _keysym2.default.XF86XK_Open);
 | 
			
		||||
addStandard("Print", _keysym2.default.XK_Print);
 | 
			
		||||
addStandard("Save", _keysym2.default.XF86XK_Save);
 | 
			
		||||
addStandard("SpellCheck", _keysym2.default.XF86XK_Spell);
 | 
			
		||||
addStandard("Close", KeyTable.XF86XK_Close);
 | 
			
		||||
addStandard("MailForward", KeyTable.XF86XK_MailForward);
 | 
			
		||||
addStandard("MailReply", KeyTable.XF86XK_Reply);
 | 
			
		||||
addStandard("MainSend", KeyTable.XF86XK_Send);
 | 
			
		||||
addStandard("MediaFastForward", KeyTable.XF86XK_AudioForward);
 | 
			
		||||
addStandard("MediaPause", KeyTable.XF86XK_AudioPause);
 | 
			
		||||
addStandard("MediaPlay", KeyTable.XF86XK_AudioPlay);
 | 
			
		||||
addStandard("MediaRecord", KeyTable.XF86XK_AudioRecord);
 | 
			
		||||
addStandard("MediaRewind", KeyTable.XF86XK_AudioRewind);
 | 
			
		||||
addStandard("MediaStop", KeyTable.XF86XK_AudioStop);
 | 
			
		||||
addStandard("MediaTrackNext", KeyTable.XF86XK_AudioNext);
 | 
			
		||||
addStandard("MediaTrackPrevious", KeyTable.XF86XK_AudioPrev);
 | 
			
		||||
addStandard("New", KeyTable.XF86XK_New);
 | 
			
		||||
addStandard("Open", KeyTable.XF86XK_Open);
 | 
			
		||||
addStandard("Print", KeyTable.XK_Print);
 | 
			
		||||
addStandard("Save", KeyTable.XF86XK_Save);
 | 
			
		||||
addStandard("SpellCheck", KeyTable.XF86XK_Spell);
 | 
			
		||||
 | 
			
		||||
// 2.11. Multimedia Numpad Keys
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -236,13 +231,13 @@ addStandard("SpellCheck", _keysym2.default.XF86XK_Spell);
 | 
			
		|||
// - AudioSurroundModeNext
 | 
			
		||||
// - AudioTrebleDown
 | 
			
		||||
// - AudioTrebleUp
 | 
			
		||||
addStandard("AudioVolumeDown", _keysym2.default.XF86XK_AudioLowerVolume);
 | 
			
		||||
addStandard("AudioVolumeUp", _keysym2.default.XF86XK_AudioRaiseVolume);
 | 
			
		||||
addStandard("AudioVolumeMute", _keysym2.default.XF86XK_AudioMute);
 | 
			
		||||
addStandard("AudioVolumeDown", KeyTable.XF86XK_AudioLowerVolume);
 | 
			
		||||
addStandard("AudioVolumeUp", KeyTable.XF86XK_AudioRaiseVolume);
 | 
			
		||||
addStandard("AudioVolumeMute", KeyTable.XF86XK_AudioMute);
 | 
			
		||||
// - MicrophoneToggle
 | 
			
		||||
// - MicrophoneVolumeDown
 | 
			
		||||
// - MicrophoneVolumeUp
 | 
			
		||||
addStandard("MicrophoneVolumeMute", _keysym2.default.XF86XK_AudioMicMute);
 | 
			
		||||
addStandard("MicrophoneVolumeMute", KeyTable.XF86XK_AudioMicMute);
 | 
			
		||||
 | 
			
		||||
// 2.13. Speech Keys
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -251,28 +246,28 @@ addStandard("MicrophoneVolumeMute", _keysym2.default.XF86XK_AudioMicMute);
 | 
			
		|||
 | 
			
		||||
// 2.14. Application Keys
 | 
			
		||||
 | 
			
		||||
addStandard("LaunchCalculator", _keysym2.default.XF86XK_Calculator);
 | 
			
		||||
addStandard("LaunchCalendar", _keysym2.default.XF86XK_Calendar);
 | 
			
		||||
addStandard("LaunchMail", _keysym2.default.XF86XK_Mail);
 | 
			
		||||
addStandard("LaunchMediaPlayer", _keysym2.default.XF86XK_AudioMedia);
 | 
			
		||||
addStandard("LaunchMusicPlayer", _keysym2.default.XF86XK_Music);
 | 
			
		||||
addStandard("LaunchMyComputer", _keysym2.default.XF86XK_MyComputer);
 | 
			
		||||
addStandard("LaunchPhone", _keysym2.default.XF86XK_Phone);
 | 
			
		||||
addStandard("LaunchScreenSaver", _keysym2.default.XF86XK_ScreenSaver);
 | 
			
		||||
addStandard("LaunchSpreadsheet", _keysym2.default.XF86XK_Excel);
 | 
			
		||||
addStandard("LaunchWebBrowser", _keysym2.default.XF86XK_WWW);
 | 
			
		||||
addStandard("LaunchWebCam", _keysym2.default.XF86XK_WebCam);
 | 
			
		||||
addStandard("LaunchWordProcessor", _keysym2.default.XF86XK_Word);
 | 
			
		||||
addStandard("LaunchCalculator", KeyTable.XF86XK_Calculator);
 | 
			
		||||
addStandard("LaunchCalendar", KeyTable.XF86XK_Calendar);
 | 
			
		||||
addStandard("LaunchMail", KeyTable.XF86XK_Mail);
 | 
			
		||||
addStandard("LaunchMediaPlayer", KeyTable.XF86XK_AudioMedia);
 | 
			
		||||
addStandard("LaunchMusicPlayer", KeyTable.XF86XK_Music);
 | 
			
		||||
addStandard("LaunchMyComputer", KeyTable.XF86XK_MyComputer);
 | 
			
		||||
addStandard("LaunchPhone", KeyTable.XF86XK_Phone);
 | 
			
		||||
addStandard("LaunchScreenSaver", KeyTable.XF86XK_ScreenSaver);
 | 
			
		||||
addStandard("LaunchSpreadsheet", KeyTable.XF86XK_Excel);
 | 
			
		||||
addStandard("LaunchWebBrowser", KeyTable.XF86XK_WWW);
 | 
			
		||||
addStandard("LaunchWebCam", KeyTable.XF86XK_WebCam);
 | 
			
		||||
addStandard("LaunchWordProcessor", KeyTable.XF86XK_Word);
 | 
			
		||||
 | 
			
		||||
// 2.15. Browser Keys
 | 
			
		||||
 | 
			
		||||
addStandard("BrowserBack", _keysym2.default.XF86XK_Back);
 | 
			
		||||
addStandard("BrowserFavorites", _keysym2.default.XF86XK_Favorites);
 | 
			
		||||
addStandard("BrowserForward", _keysym2.default.XF86XK_Forward);
 | 
			
		||||
addStandard("BrowserHome", _keysym2.default.XF86XK_HomePage);
 | 
			
		||||
addStandard("BrowserRefresh", _keysym2.default.XF86XK_Refresh);
 | 
			
		||||
addStandard("BrowserSearch", _keysym2.default.XF86XK_Search);
 | 
			
		||||
addStandard("BrowserStop", _keysym2.default.XF86XK_Stop);
 | 
			
		||||
addStandard("BrowserBack", KeyTable.XF86XK_Back);
 | 
			
		||||
addStandard("BrowserFavorites", KeyTable.XF86XK_Favorites);
 | 
			
		||||
addStandard("BrowserForward", KeyTable.XF86XK_Forward);
 | 
			
		||||
addStandard("BrowserHome", KeyTable.XF86XK_HomePage);
 | 
			
		||||
addStandard("BrowserRefresh", KeyTable.XF86XK_Refresh);
 | 
			
		||||
addStandard("BrowserSearch", KeyTable.XF86XK_Search);
 | 
			
		||||
addStandard("BrowserStop", KeyTable.XF86XK_Stop);
 | 
			
		||||
 | 
			
		||||
// 2.16. Mobile Phone Keys
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -285,31 +280,31 @@ addStandard("BrowserStop", _keysym2.default.XF86XK_Stop);
 | 
			
		|||
// 2.18. Media Controller Keys
 | 
			
		||||
 | 
			
		||||
// - A whole bunch...
 | 
			
		||||
addStandard("Dimmer", _keysym2.default.XF86XK_BrightnessAdjust);
 | 
			
		||||
addStandard("MediaAudioTrack", _keysym2.default.XF86XK_AudioCycleTrack);
 | 
			
		||||
addStandard("RandomToggle", _keysym2.default.XF86XK_AudioRandomPlay);
 | 
			
		||||
addStandard("SplitScreenToggle", _keysym2.default.XF86XK_SplitScreen);
 | 
			
		||||
addStandard("Subtitle", _keysym2.default.XF86XK_Subtitle);
 | 
			
		||||
addStandard("VideoModeNext", _keysym2.default.XF86XK_Next_VMode);
 | 
			
		||||
addStandard("Dimmer", KeyTable.XF86XK_BrightnessAdjust);
 | 
			
		||||
addStandard("MediaAudioTrack", KeyTable.XF86XK_AudioCycleTrack);
 | 
			
		||||
addStandard("RandomToggle", KeyTable.XF86XK_AudioRandomPlay);
 | 
			
		||||
addStandard("SplitScreenToggle", KeyTable.XF86XK_SplitScreen);
 | 
			
		||||
addStandard("Subtitle", KeyTable.XF86XK_Subtitle);
 | 
			
		||||
addStandard("VideoModeNext", KeyTable.XF86XK_Next_VMode);
 | 
			
		||||
 | 
			
		||||
// Extra: Numpad
 | 
			
		||||
 | 
			
		||||
addNumpad("=", _keysym2.default.XK_equal, _keysym2.default.XK_KP_Equal);
 | 
			
		||||
addNumpad("+", _keysym2.default.XK_plus, _keysym2.default.XK_KP_Add);
 | 
			
		||||
addNumpad("-", _keysym2.default.XK_minus, _keysym2.default.XK_KP_Subtract);
 | 
			
		||||
addNumpad("*", _keysym2.default.XK_asterisk, _keysym2.default.XK_KP_Multiply);
 | 
			
		||||
addNumpad("/", _keysym2.default.XK_slash, _keysym2.default.XK_KP_Divide);
 | 
			
		||||
addNumpad(".", _keysym2.default.XK_period, _keysym2.default.XK_KP_Decimal);
 | 
			
		||||
addNumpad(",", _keysym2.default.XK_comma, _keysym2.default.XK_KP_Separator);
 | 
			
		||||
addNumpad("0", _keysym2.default.XK_0, _keysym2.default.XK_KP_0);
 | 
			
		||||
addNumpad("1", _keysym2.default.XK_1, _keysym2.default.XK_KP_1);
 | 
			
		||||
addNumpad("2", _keysym2.default.XK_2, _keysym2.default.XK_KP_2);
 | 
			
		||||
addNumpad("3", _keysym2.default.XK_3, _keysym2.default.XK_KP_3);
 | 
			
		||||
addNumpad("4", _keysym2.default.XK_4, _keysym2.default.XK_KP_4);
 | 
			
		||||
addNumpad("5", _keysym2.default.XK_5, _keysym2.default.XK_KP_5);
 | 
			
		||||
addNumpad("6", _keysym2.default.XK_6, _keysym2.default.XK_KP_6);
 | 
			
		||||
addNumpad("7", _keysym2.default.XK_7, _keysym2.default.XK_KP_7);
 | 
			
		||||
addNumpad("8", _keysym2.default.XK_8, _keysym2.default.XK_KP_8);
 | 
			
		||||
addNumpad("9", _keysym2.default.XK_9, _keysym2.default.XK_KP_9);
 | 
			
		||||
addNumpad("=", KeyTable.XK_equal, KeyTable.XK_KP_Equal);
 | 
			
		||||
addNumpad("+", KeyTable.XK_plus, KeyTable.XK_KP_Add);
 | 
			
		||||
addNumpad("-", KeyTable.XK_minus, KeyTable.XK_KP_Subtract);
 | 
			
		||||
addNumpad("*", KeyTable.XK_asterisk, KeyTable.XK_KP_Multiply);
 | 
			
		||||
addNumpad("/", KeyTable.XK_slash, KeyTable.XK_KP_Divide);
 | 
			
		||||
addNumpad(".", KeyTable.XK_period, KeyTable.XK_KP_Decimal);
 | 
			
		||||
addNumpad(",", KeyTable.XK_comma, KeyTable.XK_KP_Separator);
 | 
			
		||||
addNumpad("0", KeyTable.XK_0, KeyTable.XK_KP_0);
 | 
			
		||||
addNumpad("1", KeyTable.XK_1, KeyTable.XK_KP_1);
 | 
			
		||||
addNumpad("2", KeyTable.XK_2, KeyTable.XK_KP_2);
 | 
			
		||||
addNumpad("3", KeyTable.XK_3, KeyTable.XK_KP_3);
 | 
			
		||||
addNumpad("4", KeyTable.XK_4, KeyTable.XK_KP_4);
 | 
			
		||||
addNumpad("5", KeyTable.XK_5, KeyTable.XK_KP_5);
 | 
			
		||||
addNumpad("6", KeyTable.XK_6, KeyTable.XK_KP_6);
 | 
			
		||||
addNumpad("7", KeyTable.XK_7, KeyTable.XK_KP_7);
 | 
			
		||||
addNumpad("8", KeyTable.XK_8, KeyTable.XK_KP_8);
 | 
			
		||||
addNumpad("9", KeyTable.XK_9, KeyTable.XK_KP_9);
 | 
			
		||||
 | 
			
		||||
exports.default = DOMKeyTable;
 | 
			
		||||
export default DOMKeyTable;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,8 +1,3 @@
 | 
			
		|||
'use strict';
 | 
			
		||||
 | 
			
		||||
Object.defineProperty(exports, "__esModule", {
 | 
			
		||||
    value: true
 | 
			
		||||
});
 | 
			
		||||
/*
 | 
			
		||||
 * noVNC: HTML5 VNC client
 | 
			
		||||
 * Copyright (C) 2017 Pierre Ossman for Cendio AB
 | 
			
		||||
| 
						 | 
				
			
			@ -19,114 +14,114 @@ Object.defineProperty(exports, "__esModule", {
 | 
			
		|||
 * See https://www.w3.org/TR/uievents-key/ for possible values.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
exports.default = {
 | 
			
		||||
export default {
 | 
			
		||||
 | 
			
		||||
    // 3.1.1.1. Writing System Keys
 | 
			
		||||
// 3.1.1.1. Writing System Keys
 | 
			
		||||
 | 
			
		||||
    'Backspace': 'Backspace',
 | 
			
		||||
    'Backspace':        'Backspace',
 | 
			
		||||
 | 
			
		||||
    // 3.1.1.2. Functional Keys
 | 
			
		||||
// 3.1.1.2. Functional Keys
 | 
			
		||||
 | 
			
		||||
    'AltLeft': 'Alt',
 | 
			
		||||
    'AltRight': 'Alt', // This could also be 'AltGraph'
 | 
			
		||||
    'CapsLock': 'CapsLock',
 | 
			
		||||
    'ContextMenu': 'ContextMenu',
 | 
			
		||||
    'ControlLeft': 'Control',
 | 
			
		||||
    'ControlRight': 'Control',
 | 
			
		||||
    'Enter': 'Enter',
 | 
			
		||||
    'MetaLeft': 'Meta',
 | 
			
		||||
    'MetaRight': 'Meta',
 | 
			
		||||
    'ShiftLeft': 'Shift',
 | 
			
		||||
    'ShiftRight': 'Shift',
 | 
			
		||||
    'Tab': 'Tab',
 | 
			
		||||
    'AltLeft':          'Alt',
 | 
			
		||||
    'AltRight':         'Alt', // This could also be 'AltGraph'
 | 
			
		||||
    'CapsLock':         'CapsLock',
 | 
			
		||||
    'ContextMenu':      'ContextMenu',
 | 
			
		||||
    'ControlLeft':      'Control',
 | 
			
		||||
    'ControlRight':     'Control',
 | 
			
		||||
    'Enter':            'Enter',
 | 
			
		||||
    'MetaLeft':         'Meta',
 | 
			
		||||
    'MetaRight':        'Meta',
 | 
			
		||||
    'ShiftLeft':        'Shift',
 | 
			
		||||
    'ShiftRight':       'Shift',
 | 
			
		||||
    'Tab':              'Tab',
 | 
			
		||||
    // FIXME: Japanese/Korean keys
 | 
			
		||||
 | 
			
		||||
    // 3.1.2. Control Pad Section
 | 
			
		||||
// 3.1.2. Control Pad Section
 | 
			
		||||
 | 
			
		||||
    'Delete': 'Delete',
 | 
			
		||||
    'End': 'End',
 | 
			
		||||
    'Help': 'Help',
 | 
			
		||||
    'Home': 'Home',
 | 
			
		||||
    'Insert': 'Insert',
 | 
			
		||||
    'PageDown': 'PageDown',
 | 
			
		||||
    'PageUp': 'PageUp',
 | 
			
		||||
    'Delete':           'Delete',
 | 
			
		||||
    'End':              'End',
 | 
			
		||||
    'Help':             'Help',
 | 
			
		||||
    'Home':             'Home',
 | 
			
		||||
    'Insert':           'Insert',
 | 
			
		||||
    'PageDown':         'PageDown',
 | 
			
		||||
    'PageUp':           'PageUp',
 | 
			
		||||
 | 
			
		||||
    // 3.1.3. Arrow Pad Section
 | 
			
		||||
// 3.1.3. Arrow Pad Section
 | 
			
		||||
 | 
			
		||||
    'ArrowDown': 'ArrowDown',
 | 
			
		||||
    'ArrowLeft': 'ArrowLeft',
 | 
			
		||||
    'ArrowRight': 'ArrowRight',
 | 
			
		||||
    'ArrowUp': 'ArrowUp',
 | 
			
		||||
    'ArrowDown':        'ArrowDown',
 | 
			
		||||
    'ArrowLeft':        'ArrowLeft',
 | 
			
		||||
    'ArrowRight':       'ArrowRight',
 | 
			
		||||
    'ArrowUp':          'ArrowUp',
 | 
			
		||||
 | 
			
		||||
    // 3.1.4. Numpad Section
 | 
			
		||||
// 3.1.4. Numpad Section
 | 
			
		||||
 | 
			
		||||
    'NumLock': 'NumLock',
 | 
			
		||||
    'NumpadBackspace': 'Backspace',
 | 
			
		||||
    'NumpadClear': 'Clear',
 | 
			
		||||
    'NumLock':          'NumLock',
 | 
			
		||||
    'NumpadBackspace':  'Backspace',
 | 
			
		||||
    'NumpadClear':      'Clear',
 | 
			
		||||
 | 
			
		||||
    // 3.1.5. Function Section
 | 
			
		||||
// 3.1.5. Function Section
 | 
			
		||||
 | 
			
		||||
    'Escape': 'Escape',
 | 
			
		||||
    'F1': 'F1',
 | 
			
		||||
    'F2': 'F2',
 | 
			
		||||
    'F3': 'F3',
 | 
			
		||||
    'F4': 'F4',
 | 
			
		||||
    'F5': 'F5',
 | 
			
		||||
    'F6': 'F6',
 | 
			
		||||
    'F7': 'F7',
 | 
			
		||||
    'F8': 'F8',
 | 
			
		||||
    'F9': 'F9',
 | 
			
		||||
    'F10': 'F10',
 | 
			
		||||
    'F11': 'F11',
 | 
			
		||||
    'F12': 'F12',
 | 
			
		||||
    'F13': 'F13',
 | 
			
		||||
    'F14': 'F14',
 | 
			
		||||
    'F15': 'F15',
 | 
			
		||||
    'F16': 'F16',
 | 
			
		||||
    'F17': 'F17',
 | 
			
		||||
    'F18': 'F18',
 | 
			
		||||
    'F19': 'F19',
 | 
			
		||||
    'F20': 'F20',
 | 
			
		||||
    'F21': 'F21',
 | 
			
		||||
    'F22': 'F22',
 | 
			
		||||
    'F23': 'F23',
 | 
			
		||||
    'F24': 'F24',
 | 
			
		||||
    'F25': 'F25',
 | 
			
		||||
    'F26': 'F26',
 | 
			
		||||
    'F27': 'F27',
 | 
			
		||||
    'F28': 'F28',
 | 
			
		||||
    'F29': 'F29',
 | 
			
		||||
    'F30': 'F30',
 | 
			
		||||
    'F31': 'F31',
 | 
			
		||||
    'F32': 'F32',
 | 
			
		||||
    'F33': 'F33',
 | 
			
		||||
    'F34': 'F34',
 | 
			
		||||
    'F35': 'F35',
 | 
			
		||||
    'PrintScreen': 'PrintScreen',
 | 
			
		||||
    'ScrollLock': 'ScrollLock',
 | 
			
		||||
    'Pause': 'Pause',
 | 
			
		||||
    'Escape':           'Escape',
 | 
			
		||||
    'F1':               'F1',
 | 
			
		||||
    'F2':               'F2',
 | 
			
		||||
    'F3':               'F3',
 | 
			
		||||
    'F4':               'F4',
 | 
			
		||||
    'F5':               'F5',
 | 
			
		||||
    'F6':               'F6',
 | 
			
		||||
    'F7':               'F7',
 | 
			
		||||
    'F8':               'F8',
 | 
			
		||||
    'F9':               'F9',
 | 
			
		||||
    'F10':              'F10',
 | 
			
		||||
    'F11':              'F11',
 | 
			
		||||
    'F12':              'F12',
 | 
			
		||||
    'F13':              'F13',
 | 
			
		||||
    'F14':              'F14',
 | 
			
		||||
    'F15':              'F15',
 | 
			
		||||
    'F16':              'F16',
 | 
			
		||||
    'F17':              'F17',
 | 
			
		||||
    'F18':              'F18',
 | 
			
		||||
    'F19':              'F19',
 | 
			
		||||
    'F20':              'F20',
 | 
			
		||||
    'F21':              'F21',
 | 
			
		||||
    'F22':              'F22',
 | 
			
		||||
    'F23':              'F23',
 | 
			
		||||
    'F24':              'F24',
 | 
			
		||||
    'F25':              'F25',
 | 
			
		||||
    'F26':              'F26',
 | 
			
		||||
    'F27':              'F27',
 | 
			
		||||
    'F28':              'F28',
 | 
			
		||||
    'F29':              'F29',
 | 
			
		||||
    'F30':              'F30',
 | 
			
		||||
    'F31':              'F31',
 | 
			
		||||
    'F32':              'F32',
 | 
			
		||||
    'F33':              'F33',
 | 
			
		||||
    'F34':              'F34',
 | 
			
		||||
    'F35':              'F35',
 | 
			
		||||
    'PrintScreen':      'PrintScreen',
 | 
			
		||||
    'ScrollLock':       'ScrollLock',
 | 
			
		||||
    'Pause':            'Pause',
 | 
			
		||||
 | 
			
		||||
    // 3.1.6. Media Keys
 | 
			
		||||
// 3.1.6. Media Keys
 | 
			
		||||
 | 
			
		||||
    'BrowserBack': 'BrowserBack',
 | 
			
		||||
    'BrowserBack':      'BrowserBack',
 | 
			
		||||
    'BrowserFavorites': 'BrowserFavorites',
 | 
			
		||||
    'BrowserForward': 'BrowserForward',
 | 
			
		||||
    'BrowserHome': 'BrowserHome',
 | 
			
		||||
    'BrowserRefresh': 'BrowserRefresh',
 | 
			
		||||
    'BrowserSearch': 'BrowserSearch',
 | 
			
		||||
    'BrowserStop': 'BrowserStop',
 | 
			
		||||
    'Eject': 'Eject',
 | 
			
		||||
    'LaunchApp1': 'LaunchMyComputer',
 | 
			
		||||
    'LaunchApp2': 'LaunchCalendar',
 | 
			
		||||
    'LaunchMail': 'LaunchMail',
 | 
			
		||||
    'MediaPlayPause': 'MediaPlay',
 | 
			
		||||
    'MediaStop': 'MediaStop',
 | 
			
		||||
    'MediaTrackNext': 'MediaTrackNext',
 | 
			
		||||
    'BrowserForward':   'BrowserForward',
 | 
			
		||||
    'BrowserHome':      'BrowserHome',
 | 
			
		||||
    'BrowserRefresh':   'BrowserRefresh',
 | 
			
		||||
    'BrowserSearch':    'BrowserSearch',
 | 
			
		||||
    'BrowserStop':      'BrowserStop',
 | 
			
		||||
    'Eject':            'Eject',
 | 
			
		||||
    'LaunchApp1':       'LaunchMyComputer',
 | 
			
		||||
    'LaunchApp2':       'LaunchCalendar',
 | 
			
		||||
    'LaunchMail':       'LaunchMail',
 | 
			
		||||
    'MediaPlayPause':   'MediaPlay',
 | 
			
		||||
    'MediaStop':        'MediaStop',
 | 
			
		||||
    'MediaTrackNext':   'MediaTrackNext',
 | 
			
		||||
    'MediaTrackPrevious': 'MediaTrackPrevious',
 | 
			
		||||
    'Power': 'Power',
 | 
			
		||||
    'Sleep': 'Sleep',
 | 
			
		||||
    'AudioVolumeDown': 'AudioVolumeDown',
 | 
			
		||||
    'AudioVolumeMute': 'AudioVolumeMute',
 | 
			
		||||
    'AudioVolumeUp': 'AudioVolumeUp',
 | 
			
		||||
    'WakeUp': 'WakeUp'
 | 
			
		||||
};
 | 
			
		||||
    'Power':            'Power',
 | 
			
		||||
    'Sleep':            'Sleep',
 | 
			
		||||
    'AudioVolumeDown':  'AudioVolumeDown',
 | 
			
		||||
    'AudioVolumeMute':  'AudioVolumeMute',
 | 
			
		||||
    'AudioVolumeUp':    'AudioVolumeUp',
 | 
			
		||||
    'WakeUp':           'WakeUp',
 | 
			
		||||
};
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,42 +1,26 @@
 | 
			
		|||
'use strict';
 | 
			
		||||
/*
 | 
			
		||||
 * noVNC: HTML5 VNC client
 | 
			
		||||
 * Copyright (C) 2012 Joel Martin
 | 
			
		||||
 * Copyright (C) 2013 Samuel Mannehed for Cendio AB
 | 
			
		||||
 * Licensed under MPL 2.0 or any later version (see LICENSE.txt)
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
Object.defineProperty(exports, "__esModule", {
 | 
			
		||||
    value: true
 | 
			
		||||
});
 | 
			
		||||
exports.default = Keyboard;
 | 
			
		||||
 | 
			
		||||
var _logging = require('../util/logging.js');
 | 
			
		||||
 | 
			
		||||
var Log = _interopRequireWildcard(_logging);
 | 
			
		||||
 | 
			
		||||
var _events = require('../util/events.js');
 | 
			
		||||
 | 
			
		||||
var _util = require('./util.js');
 | 
			
		||||
 | 
			
		||||
var KeyboardUtil = _interopRequireWildcard(_util);
 | 
			
		||||
 | 
			
		||||
var _keysym = require('./keysym.js');
 | 
			
		||||
 | 
			
		||||
var _keysym2 = _interopRequireDefault(_keysym);
 | 
			
		||||
 | 
			
		||||
var _browser = require('../util/browser.js');
 | 
			
		||||
 | 
			
		||||
var browser = _interopRequireWildcard(_browser);
 | 
			
		||||
 | 
			
		||||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
 | 
			
		||||
 | 
			
		||||
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
 | 
			
		||||
import * as Log from '../util/logging.js';
 | 
			
		||||
import { stopEvent } from '../util/events.js';
 | 
			
		||||
import * as KeyboardUtil from "./util.js";
 | 
			
		||||
import KeyTable from "./keysym.js";
 | 
			
		||||
import * as browser from "../util/browser.js";
 | 
			
		||||
 | 
			
		||||
//
 | 
			
		||||
// Keyboard event handler
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
function Keyboard(target) {
 | 
			
		||||
export default function Keyboard(target) {
 | 
			
		||||
    this._target = target || null;
 | 
			
		||||
 | 
			
		||||
    this._keyDownList = {}; // List of depressed keys
 | 
			
		||||
    // (even if they are happy)
 | 
			
		||||
    this._pendingKey = null; // Key waiting for keypress
 | 
			
		||||
    this._keyDownList = {};         // List of depressed keys
 | 
			
		||||
                                    // (even if they are happy)
 | 
			
		||||
    this._pendingKey = null;        // Key waiting for keypress
 | 
			
		||||
 | 
			
		||||
    // keep these here so we can refer to them later
 | 
			
		||||
    this._eventHandlers = {
 | 
			
		||||
| 
						 | 
				
			
			@ -45,24 +29,18 @@ function Keyboard(target) {
 | 
			
		|||
        'keypress': this._handleKeyPress.bind(this),
 | 
			
		||||
        'blur': this._allKeysUp.bind(this)
 | 
			
		||||
    };
 | 
			
		||||
} /*
 | 
			
		||||
   * noVNC: HTML5 VNC client
 | 
			
		||||
   * Copyright (C) 2012 Joel Martin
 | 
			
		||||
   * Copyright (C) 2013 Samuel Mannehed for Cendio AB
 | 
			
		||||
   * Licensed under MPL 2.0 or any later version (see LICENSE.txt)
 | 
			
		||||
   */
 | 
			
		||||
 | 
			
		||||
;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
Keyboard.prototype = {
 | 
			
		||||
    // ===== EVENT HANDLERS =====
 | 
			
		||||
 | 
			
		||||
    onkeyevent: function () {}, // Handler for key press/release
 | 
			
		||||
    onkeyevent: function () {},     // Handler for key press/release
 | 
			
		||||
 | 
			
		||||
    // ===== PRIVATE METHODS =====
 | 
			
		||||
 | 
			
		||||
    _sendKeyEvent: function (keysym, code, down) {
 | 
			
		||||
        Log.Debug("onkeyevent " + (down ? "down" : "up") + ", keysym: " + keysym, ", code: " + code);
 | 
			
		||||
        Log.Debug("onkeyevent " + (down ? "down" : "up") +
 | 
			
		||||
                  ", keysym: " + keysym, ", code: " + code);
 | 
			
		||||
 | 
			
		||||
        // Windows sends CtrlLeft+AltRight when you press
 | 
			
		||||
        // AltGraph, which tends to confuse the hell out of
 | 
			
		||||
| 
						 | 
				
			
			@ -70,18 +48,25 @@ Keyboard.prototype = {
 | 
			
		|||
        // there is a way to detect AltGraph properly.
 | 
			
		||||
        var fakeAltGraph = false;
 | 
			
		||||
        if (down && browser.isWindows()) {
 | 
			
		||||
            if (code !== 'ControlLeft' && code !== 'AltRight' && 'ControlLeft' in this._keyDownList && 'AltRight' in this._keyDownList) {
 | 
			
		||||
            if ((code !== 'ControlLeft') &&
 | 
			
		||||
                (code !== 'AltRight') &&
 | 
			
		||||
                ('ControlLeft' in this._keyDownList) &&
 | 
			
		||||
                ('AltRight' in this._keyDownList)) {
 | 
			
		||||
                fakeAltGraph = true;
 | 
			
		||||
                this.onkeyevent(this._keyDownList['AltRight'], 'AltRight', false);
 | 
			
		||||
                this.onkeyevent(this._keyDownList['ControlLeft'], 'ControlLeft', false);
 | 
			
		||||
                this.onkeyevent(this._keyDownList['AltRight'],
 | 
			
		||||
                                 'AltRight', false);
 | 
			
		||||
                this.onkeyevent(this._keyDownList['ControlLeft'],
 | 
			
		||||
                                 'ControlLeft', false);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        this.onkeyevent(keysym, code, down);
 | 
			
		||||
 | 
			
		||||
        if (fakeAltGraph) {
 | 
			
		||||
            this.onkeyevent(this._keyDownList['ControlLeft'], 'ControlLeft', true);
 | 
			
		||||
            this.onkeyevent(this._keyDownList['AltRight'], 'AltRight', true);
 | 
			
		||||
            this.onkeyevent(this._keyDownList['ControlLeft'],
 | 
			
		||||
                             'ControlLeft', true);
 | 
			
		||||
            this.onkeyevent(this._keyDownList['AltRight'],
 | 
			
		||||
                             'AltRight', true);
 | 
			
		||||
        }
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -94,7 +79,7 @@ Keyboard.prototype = {
 | 
			
		|||
        // Unstable, but we don't have anything else to go on
 | 
			
		||||
        // (don't use it for 'keypress' events thought since
 | 
			
		||||
        // WebKit sets it to the same as charCode)
 | 
			
		||||
        if (e.keyCode && e.type !== 'keypress') {
 | 
			
		||||
        if (e.keyCode && (e.type !== 'keypress')) {
 | 
			
		||||
            // 229 is used for composition events
 | 
			
		||||
            if (e.keyCode !== 229) {
 | 
			
		||||
                return 'Platform' + e.keyCode;
 | 
			
		||||
| 
						 | 
				
			
			@ -128,7 +113,7 @@ Keyboard.prototype = {
 | 
			
		|||
        // to deal with virtual keyboards which omit key info
 | 
			
		||||
        // (iOS omits tracking info on keyup events, which forces us to
 | 
			
		||||
        // special treat that platform here)
 | 
			
		||||
        if (code === 'Unidentified' || browser.isIOS()) {
 | 
			
		||||
        if ((code === 'Unidentified') || browser.isIOS()) {
 | 
			
		||||
            if (keysym) {
 | 
			
		||||
                // If it's a virtual keyboard then it should be
 | 
			
		||||
                // sufficient to just send press and release right
 | 
			
		||||
| 
						 | 
				
			
			@ -137,7 +122,7 @@ Keyboard.prototype = {
 | 
			
		|||
                this._sendKeyEvent(keysym, code, false);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            (0, _events.stopEvent)(e);
 | 
			
		||||
            stopEvent(e);
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -147,18 +132,18 @@ Keyboard.prototype = {
 | 
			
		|||
        // possibly others).
 | 
			
		||||
        if (browser.isMac()) {
 | 
			
		||||
            switch (keysym) {
 | 
			
		||||
                case _keysym2.default.XK_Super_L:
 | 
			
		||||
                    keysym = _keysym2.default.XK_Alt_L;
 | 
			
		||||
                    break;
 | 
			
		||||
                case _keysym2.default.XK_Super_R:
 | 
			
		||||
                    keysym = _keysym2.default.XK_Super_L;
 | 
			
		||||
                    break;
 | 
			
		||||
                case _keysym2.default.XK_Alt_L:
 | 
			
		||||
                    keysym = _keysym2.default.XK_Mode_switch;
 | 
			
		||||
                    break;
 | 
			
		||||
                case _keysym2.default.XK_Alt_R:
 | 
			
		||||
                    keysym = _keysym2.default.XK_ISO_Level3_Shift;
 | 
			
		||||
                    break;
 | 
			
		||||
            case KeyTable.XK_Super_L:
 | 
			
		||||
                keysym = KeyTable.XK_Alt_L;
 | 
			
		||||
                break;
 | 
			
		||||
            case KeyTable.XK_Super_R:
 | 
			
		||||
                keysym = KeyTable.XK_Super_L;
 | 
			
		||||
                break;
 | 
			
		||||
            case KeyTable.XK_Alt_L:
 | 
			
		||||
                keysym = KeyTable.XK_Mode_switch;
 | 
			
		||||
                break;
 | 
			
		||||
            case KeyTable.XK_Alt_R:
 | 
			
		||||
                keysym = KeyTable.XK_ISO_Level3_Shift;
 | 
			
		||||
                break;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -172,10 +157,10 @@ Keyboard.prototype = {
 | 
			
		|||
        // state change events. That gets extra confusing for CapsLock
 | 
			
		||||
        // which toggles on each press, but not on release. So pretend
 | 
			
		||||
        // it was a quick press and release of the button.
 | 
			
		||||
        if (browser.isMac() && code === 'CapsLock') {
 | 
			
		||||
            this._sendKeyEvent(_keysym2.default.XK_Caps_Lock, 'CapsLock', true);
 | 
			
		||||
            this._sendKeyEvent(_keysym2.default.XK_Caps_Lock, 'CapsLock', false);
 | 
			
		||||
            (0, _events.stopEvent)(e);
 | 
			
		||||
        if (browser.isMac() && (code === 'CapsLock')) {
 | 
			
		||||
            this._sendKeyEvent(KeyTable.XK_Caps_Lock, 'CapsLock', true);
 | 
			
		||||
            this._sendKeyEvent(KeyTable.XK_Caps_Lock, 'CapsLock', false);
 | 
			
		||||
            stopEvent(e);
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -193,7 +178,7 @@ Keyboard.prototype = {
 | 
			
		|||
        }
 | 
			
		||||
 | 
			
		||||
        this._pendingKey = null;
 | 
			
		||||
        (0, _events.stopEvent)(e);
 | 
			
		||||
        stopEvent(e);
 | 
			
		||||
 | 
			
		||||
        this._keyDownList[code] = keysym;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -202,7 +187,7 @@ Keyboard.prototype = {
 | 
			
		|||
 | 
			
		||||
    // Legacy event for browsers without code/key
 | 
			
		||||
    _handleKeyPress: function (e) {
 | 
			
		||||
        (0, _events.stopEvent)(e);
 | 
			
		||||
        stopEvent(e);
 | 
			
		||||
 | 
			
		||||
        // Are we expecting a keypress?
 | 
			
		||||
        if (this._pendingKey === null) {
 | 
			
		||||
| 
						 | 
				
			
			@ -213,7 +198,7 @@ Keyboard.prototype = {
 | 
			
		|||
        var keysym = KeyboardUtil.getKeysym(e);
 | 
			
		||||
 | 
			
		||||
        // The key we were waiting for?
 | 
			
		||||
        if (code !== 'Unidentified' && code != this._pendingKey) {
 | 
			
		||||
        if ((code !== 'Unidentified') && (code != this._pendingKey)) {
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -243,14 +228,17 @@ Keyboard.prototype = {
 | 
			
		|||
        // We have no way of knowing the proper keysym with the
 | 
			
		||||
        // information given, but the following are true for most
 | 
			
		||||
        // layouts
 | 
			
		||||
        if (e.keyCode >= 0x30 && e.keyCode <= 0x39) {
 | 
			
		||||
        if ((e.keyCode >= 0x30) && (e.keyCode <= 0x39)) {
 | 
			
		||||
            // Digit
 | 
			
		||||
            keysym = e.keyCode;
 | 
			
		||||
        } else if (e.keyCode >= 0x41 && e.keyCode <= 0x5a) {
 | 
			
		||||
        } else if ((e.keyCode >= 0x41) && (e.keyCode <= 0x5a)) {
 | 
			
		||||
            // Character (A-Z)
 | 
			
		||||
            var char = String.fromCharCode(e.keyCode);
 | 
			
		||||
            // A feeble attempt at the correct case
 | 
			
		||||
            if (e.shiftKey) char = char.toUpperCase();else char = char.toLowerCase();
 | 
			
		||||
            if (e.shiftKey)
 | 
			
		||||
                char = char.toUpperCase();
 | 
			
		||||
            else
 | 
			
		||||
                char = char.toLowerCase();
 | 
			
		||||
            keysym = char.charCodeAt();
 | 
			
		||||
        } else {
 | 
			
		||||
            // Unknown, give up
 | 
			
		||||
| 
						 | 
				
			
			@ -263,14 +251,14 @@ Keyboard.prototype = {
 | 
			
		|||
    },
 | 
			
		||||
 | 
			
		||||
    _handleKeyUp: function (e) {
 | 
			
		||||
        (0, _events.stopEvent)(e);
 | 
			
		||||
        stopEvent(e);
 | 
			
		||||
 | 
			
		||||
        var code = this._getKeyCode(e);
 | 
			
		||||
 | 
			
		||||
        // See comment in _handleKeyDown()
 | 
			
		||||
        if (browser.isMac() && code === 'CapsLock') {
 | 
			
		||||
            this._sendKeyEvent(_keysym2.default.XK_Caps_Lock, 'CapsLock', true);
 | 
			
		||||
            this._sendKeyEvent(_keysym2.default.XK_Caps_Lock, 'CapsLock', false);
 | 
			
		||||
        if (browser.isMac() && (code === 'CapsLock')) {
 | 
			
		||||
            this._sendKeyEvent(KeyTable.XK_Caps_Lock, 'CapsLock', true);
 | 
			
		||||
            this._sendKeyEvent(KeyTable.XK_Caps_Lock, 'CapsLock', false);
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -322,5 +310,5 @@ Keyboard.prototype = {
 | 
			
		|||
        this._allKeysUp();
 | 
			
		||||
 | 
			
		||||
        //Log.Debug(">> Keyboard.ungrab");
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
    },
 | 
			
		||||
};
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							| 
						 | 
				
			
			@ -1,8 +1,3 @@
 | 
			
		|||
"use strict";
 | 
			
		||||
 | 
			
		||||
Object.defineProperty(exports, "__esModule", {
 | 
			
		||||
    value: true
 | 
			
		||||
});
 | 
			
		||||
/*
 | 
			
		||||
 * Mapping from Unicode codepoints to X11/RFB keysyms
 | 
			
		||||
 *
 | 
			
		||||
| 
						 | 
				
			
			@ -671,13 +666,13 @@ var codepoints = {
 | 
			
		|||
    0x30f2: 0x04a6, // XK_kana_WO
 | 
			
		||||
    0x30f3: 0x04dd, // XK_kana_N
 | 
			
		||||
    0x30fb: 0x04a5, // XK_kana_conjunctive
 | 
			
		||||
    0x30fc: 0x04b0 // XK_prolongedsound
 | 
			
		||||
    0x30fc: 0x04b0, // XK_prolongedsound
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
exports.default = {
 | 
			
		||||
    lookup: function (u) {
 | 
			
		||||
export default {
 | 
			
		||||
    lookup : function(u) {
 | 
			
		||||
        // Latin-1 is one-to-one mapping
 | 
			
		||||
        if (u >= 0x20 && u <= 0xff) {
 | 
			
		||||
        if ((u >= 0x20) && (u <= 0xff)) {
 | 
			
		||||
            return u;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -689,5 +684,5 @@ exports.default = {
 | 
			
		|||
 | 
			
		||||
        // General mapping as final fallback
 | 
			
		||||
        return 0x01000000 | u;
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
    },
 | 
			
		||||
};
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,21 +1,3 @@
 | 
			
		|||
'use strict';
 | 
			
		||||
 | 
			
		||||
Object.defineProperty(exports, "__esModule", {
 | 
			
		||||
    value: true
 | 
			
		||||
});
 | 
			
		||||
exports.default = Mouse;
 | 
			
		||||
 | 
			
		||||
var _logging = require('../util/logging.js');
 | 
			
		||||
 | 
			
		||||
var Log = _interopRequireWildcard(_logging);
 | 
			
		||||
 | 
			
		||||
var _browser = require('../util/browser.js');
 | 
			
		||||
 | 
			
		||||
var _events = require('../util/events.js');
 | 
			
		||||
 | 
			
		||||
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
 | 
			
		||||
 | 
			
		||||
var WHEEL_STEP = 10; // Delta threshold for a mouse wheel step
 | 
			
		||||
/*
 | 
			
		||||
 * noVNC: HTML5 VNC client
 | 
			
		||||
 * Copyright (C) 2012 Joel Martin
 | 
			
		||||
| 
						 | 
				
			
			@ -23,10 +5,15 @@ var WHEEL_STEP = 10; // Delta threshold for a mouse wheel step
 | 
			
		|||
 * Licensed under MPL 2.0 or any later version (see LICENSE.txt)
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
import * as Log from '../util/logging.js';
 | 
			
		||||
import { isTouchDevice } from '../util/browser.js';
 | 
			
		||||
import { setCapture, stopEvent, getPointerEvent } from '../util/events.js';
 | 
			
		||||
 | 
			
		||||
var WHEEL_STEP = 10; // Delta threshold for a mouse wheel step
 | 
			
		||||
var WHEEL_STEP_TIMEOUT = 50; // ms
 | 
			
		||||
var WHEEL_LINE_HEIGHT = 19;
 | 
			
		||||
 | 
			
		||||
function Mouse(target) {
 | 
			
		||||
export default function Mouse(target) {
 | 
			
		||||
    this._target = target || document;
 | 
			
		||||
 | 
			
		||||
    this._doubleClickTimer = null;
 | 
			
		||||
| 
						 | 
				
			
			@ -50,12 +37,12 @@ function Mouse(target) {
 | 
			
		|||
Mouse.prototype = {
 | 
			
		||||
    // ===== PROPERTIES =====
 | 
			
		||||
 | 
			
		||||
    touchButton: 1, // Button mask (1, 2, 4) for touch devices (0 means ignore clicks)
 | 
			
		||||
    touchButton: 1,                 // Button mask (1, 2, 4) for touch devices (0 means ignore clicks)
 | 
			
		||||
 | 
			
		||||
    // ===== EVENT HANDLERS =====
 | 
			
		||||
 | 
			
		||||
    onmousebutton: function () {}, // Handler for mouse button click/release
 | 
			
		||||
    onmousemove: function () {}, // Handler for mouse movement
 | 
			
		||||
    onmousebutton: function () {},  // Handler for mouse button click/release
 | 
			
		||||
    onmousemove: function () {},    // Handler for mouse movement
 | 
			
		||||
 | 
			
		||||
    // ===== PRIVATE METHODS =====
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -85,7 +72,7 @@ Mouse.prototype = {
 | 
			
		|||
 | 
			
		||||
                    var xs = this._lastTouchPos.x - pos.x;
 | 
			
		||||
                    var ys = this._lastTouchPos.y - pos.y;
 | 
			
		||||
                    var d = Math.sqrt(xs * xs + ys * ys);
 | 
			
		||||
                    var d = Math.sqrt((xs * xs) + (ys * ys));
 | 
			
		||||
 | 
			
		||||
                    // The goal is to trigger on a certain physical width, the
 | 
			
		||||
                    // devicePixelRatio brings us a bit closer but is not optimal.
 | 
			
		||||
| 
						 | 
				
			
			@ -103,21 +90,22 @@ Mouse.prototype = {
 | 
			
		|||
            bmask = 1 << e.button;
 | 
			
		||||
        } else {
 | 
			
		||||
            /* IE including 9 */
 | 
			
		||||
            bmask = (e.button & 0x1) + // Left
 | 
			
		||||
            (e.button & 0x2) * 2 + // Right
 | 
			
		||||
            (e.button & 0x4) / 2; // Middle
 | 
			
		||||
            bmask = (e.button & 0x1) +      // Left
 | 
			
		||||
                    (e.button & 0x2) * 2 +  // Right
 | 
			
		||||
                    (e.button & 0x4) / 2;   // Middle
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        Log.Debug("onmousebutton " + (down ? "down" : "up") + ", x: " + pos.x + ", y: " + pos.y + ", bmask: " + bmask);
 | 
			
		||||
        Log.Debug("onmousebutton " + (down ? "down" : "up") +
 | 
			
		||||
                  ", x: " + pos.x + ", y: " + pos.y + ", bmask: " + bmask);
 | 
			
		||||
        this.onmousebutton(pos.x, pos.y, down, bmask);
 | 
			
		||||
 | 
			
		||||
        (0, _events.stopEvent)(e);
 | 
			
		||||
        stopEvent(e);
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _handleMouseDown: function (e) {
 | 
			
		||||
        // Touch events have implicit capture
 | 
			
		||||
        if (e.type === "mousedown") {
 | 
			
		||||
            (0, _events.setCapture)(this._target);
 | 
			
		||||
            setCapture(this._target);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        this._handleMouseButton(e, 1);
 | 
			
		||||
| 
						 | 
				
			
			@ -191,21 +179,25 @@ Mouse.prototype = {
 | 
			
		|||
        if (Math.abs(this._accumulatedWheelDeltaX) > WHEEL_STEP) {
 | 
			
		||||
            this._generateWheelStepX();
 | 
			
		||||
        } else {
 | 
			
		||||
            this._wheelStepXTimer = window.setTimeout(this._generateWheelStepX.bind(this), WHEEL_STEP_TIMEOUT);
 | 
			
		||||
            this._wheelStepXTimer =
 | 
			
		||||
                window.setTimeout(this._generateWheelStepX.bind(this),
 | 
			
		||||
                                  WHEEL_STEP_TIMEOUT);
 | 
			
		||||
        }
 | 
			
		||||
        if (Math.abs(this._accumulatedWheelDeltaY) > WHEEL_STEP) {
 | 
			
		||||
            this._generateWheelStepY();
 | 
			
		||||
        } else {
 | 
			
		||||
            this._wheelStepYTimer = window.setTimeout(this._generateWheelStepY.bind(this), WHEEL_STEP_TIMEOUT);
 | 
			
		||||
            this._wheelStepYTimer =
 | 
			
		||||
                window.setTimeout(this._generateWheelStepY.bind(this),
 | 
			
		||||
                                  WHEEL_STEP_TIMEOUT);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        (0, _events.stopEvent)(e);
 | 
			
		||||
        stopEvent(e);
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _handleMouseMove: function (e) {
 | 
			
		||||
        this._updateMousePosition(e);
 | 
			
		||||
        this.onmousemove(this._pos.x, this._pos.y);
 | 
			
		||||
        (0, _events.stopEvent)(e);
 | 
			
		||||
        stopEvent(e);
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _handleMouseDisable: function (e) {
 | 
			
		||||
| 
						 | 
				
			
			@ -216,13 +208,13 @@ Mouse.prototype = {
 | 
			
		|||
         *       to listen on the document element instead.
 | 
			
		||||
         */
 | 
			
		||||
        if (e.target == this._target) {
 | 
			
		||||
            (0, _events.stopEvent)(e);
 | 
			
		||||
            stopEvent(e);
 | 
			
		||||
        }
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    // Update coordinates relative to target
 | 
			
		||||
    _updateMousePosition: function (e) {
 | 
			
		||||
        e = (0, _events.getPointerEvent)(e);
 | 
			
		||||
    _updateMousePosition: function(e) {
 | 
			
		||||
        e = getPointerEvent(e);
 | 
			
		||||
        var bounds = this._target.getBoundingClientRect();
 | 
			
		||||
        var x, y;
 | 
			
		||||
        // Clip to target bounds
 | 
			
		||||
| 
						 | 
				
			
			@ -240,7 +232,7 @@ Mouse.prototype = {
 | 
			
		|||
        } else {
 | 
			
		||||
            y = e.clientY - bounds.top;
 | 
			
		||||
        }
 | 
			
		||||
        this._pos = { x: x, y: y };
 | 
			
		||||
        this._pos = {x:x, y:y};
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    // ===== PUBLIC METHODS =====
 | 
			
		||||
| 
						 | 
				
			
			@ -248,7 +240,7 @@ Mouse.prototype = {
 | 
			
		|||
    grab: function () {
 | 
			
		||||
        var c = this._target;
 | 
			
		||||
 | 
			
		||||
        if (_browser.isTouchDevice) {
 | 
			
		||||
        if (isTouchDevice) {
 | 
			
		||||
            c.addEventListener('touchstart', this._eventHandlers.mousedown);
 | 
			
		||||
            c.addEventListener('touchend', this._eventHandlers.mouseup);
 | 
			
		||||
            c.addEventListener('touchmove', this._eventHandlers.mousemove);
 | 
			
		||||
| 
						 | 
				
			
			@ -271,7 +263,7 @@ Mouse.prototype = {
 | 
			
		|||
 | 
			
		||||
        this._resetWheelStepTimers();
 | 
			
		||||
 | 
			
		||||
        if (_browser.isTouchDevice) {
 | 
			
		||||
        if (isTouchDevice) {
 | 
			
		||||
            c.removeEventListener('touchstart', this._eventHandlers.mousedown);
 | 
			
		||||
            c.removeEventListener('touchend', this._eventHandlers.mouseup);
 | 
			
		||||
            c.removeEventListener('touchmove', this._eventHandlers.mousemove);
 | 
			
		||||
| 
						 | 
				
			
			@ -285,4 +277,4 @@ Mouse.prototype = {
 | 
			
		|||
 | 
			
		||||
        c.removeEventListener('contextmenu', this._eventHandlers.mousedisable);
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
};
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,42 +1,12 @@
 | 
			
		|||
"use strict";
 | 
			
		||||
 | 
			
		||||
Object.defineProperty(exports, "__esModule", {
 | 
			
		||||
    value: true
 | 
			
		||||
});
 | 
			
		||||
exports.getKeycode = getKeycode;
 | 
			
		||||
exports.getKey = getKey;
 | 
			
		||||
exports.getKeysym = getKeysym;
 | 
			
		||||
 | 
			
		||||
var _keysym = require("./keysym.js");
 | 
			
		||||
 | 
			
		||||
var _keysym2 = _interopRequireDefault(_keysym);
 | 
			
		||||
 | 
			
		||||
var _keysymdef = require("./keysymdef.js");
 | 
			
		||||
 | 
			
		||||
var _keysymdef2 = _interopRequireDefault(_keysymdef);
 | 
			
		||||
 | 
			
		||||
var _vkeys = require("./vkeys.js");
 | 
			
		||||
 | 
			
		||||
var _vkeys2 = _interopRequireDefault(_vkeys);
 | 
			
		||||
 | 
			
		||||
var _fixedkeys = require("./fixedkeys.js");
 | 
			
		||||
 | 
			
		||||
var _fixedkeys2 = _interopRequireDefault(_fixedkeys);
 | 
			
		||||
 | 
			
		||||
var _domkeytable = require("./domkeytable.js");
 | 
			
		||||
 | 
			
		||||
var _domkeytable2 = _interopRequireDefault(_domkeytable);
 | 
			
		||||
 | 
			
		||||
var _browser = require("../util/browser.js");
 | 
			
		||||
 | 
			
		||||
var browser = _interopRequireWildcard(_browser);
 | 
			
		||||
 | 
			
		||||
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
 | 
			
		||||
 | 
			
		||||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
 | 
			
		||||
import KeyTable from "./keysym.js";
 | 
			
		||||
import keysyms from "./keysymdef.js";
 | 
			
		||||
import vkeys from "./vkeys.js";
 | 
			
		||||
import fixedkeys from "./fixedkeys.js";
 | 
			
		||||
import DOMKeyTable from "./domkeytable.js";
 | 
			
		||||
import * as browser from "../util/browser.js";
 | 
			
		||||
 | 
			
		||||
// Get 'KeyboardEvent.code', handling legacy browsers
 | 
			
		||||
function getKeycode(evt) {
 | 
			
		||||
export function getKeycode(evt){
 | 
			
		||||
    // Are we getting proper key identifiers?
 | 
			
		||||
    // (unfortunately Firefox and Chrome are crappy here and gives
 | 
			
		||||
    // us an empty string on some platforms, rather than leaving it
 | 
			
		||||
| 
						 | 
				
			
			@ -44,10 +14,8 @@ function getKeycode(evt) {
 | 
			
		|||
    if (evt.code) {
 | 
			
		||||
        // Mozilla isn't fully in sync with the spec yet
 | 
			
		||||
        switch (evt.code) {
 | 
			
		||||
            case 'OSLeft':
 | 
			
		||||
                return 'MetaLeft';
 | 
			
		||||
            case 'OSRight':
 | 
			
		||||
                return 'MetaRight';
 | 
			
		||||
            case 'OSLeft': return 'MetaLeft';
 | 
			
		||||
            case 'OSRight': return 'MetaRight';
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return evt.code;
 | 
			
		||||
| 
						 | 
				
			
			@ -56,11 +24,11 @@ function getKeycode(evt) {
 | 
			
		|||
    // The de-facto standard is to use Windows Virtual-Key codes
 | 
			
		||||
    // in the 'keyCode' field for non-printable characters. However
 | 
			
		||||
    // Webkit sets it to the same as charCode in 'keypress' events.
 | 
			
		||||
    if (evt.type !== 'keypress' && evt.keyCode in _vkeys2.default) {
 | 
			
		||||
        var code = _vkeys2.default[evt.keyCode];
 | 
			
		||||
    if ((evt.type !== 'keypress') && (evt.keyCode in vkeys)) {
 | 
			
		||||
        var code = vkeys[evt.keyCode];
 | 
			
		||||
 | 
			
		||||
        // macOS has messed up this code for some reason
 | 
			
		||||
        if (browser.isMac() && code === 'ContextMenu') {
 | 
			
		||||
        if (browser.isMac() && (code === 'ContextMenu')) {
 | 
			
		||||
            code = 'MetaRight';
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -68,40 +36,26 @@ function getKeycode(evt) {
 | 
			
		|||
        // for the standard modifiers
 | 
			
		||||
        if (evt.location === 2) {
 | 
			
		||||
            switch (code) {
 | 
			
		||||
                case 'ShiftLeft':
 | 
			
		||||
                    return 'ShiftRight';
 | 
			
		||||
                case 'ControlLeft':
 | 
			
		||||
                    return 'ControlRight';
 | 
			
		||||
                case 'AltLeft':
 | 
			
		||||
                    return 'AltRight';
 | 
			
		||||
                case 'ShiftLeft': return 'ShiftRight';
 | 
			
		||||
                case 'ControlLeft': return 'ControlRight';
 | 
			
		||||
                case 'AltLeft': return 'AltRight';
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // Nor a bunch of the numpad keys
 | 
			
		||||
        if (evt.location === 3) {
 | 
			
		||||
            switch (code) {
 | 
			
		||||
                case 'Delete':
 | 
			
		||||
                    return 'NumpadDecimal';
 | 
			
		||||
                case 'Insert':
 | 
			
		||||
                    return 'Numpad0';
 | 
			
		||||
                case 'End':
 | 
			
		||||
                    return 'Numpad1';
 | 
			
		||||
                case 'ArrowDown':
 | 
			
		||||
                    return 'Numpad2';
 | 
			
		||||
                case 'PageDown':
 | 
			
		||||
                    return 'Numpad3';
 | 
			
		||||
                case 'ArrowLeft':
 | 
			
		||||
                    return 'Numpad4';
 | 
			
		||||
                case 'ArrowRight':
 | 
			
		||||
                    return 'Numpad6';
 | 
			
		||||
                case 'Home':
 | 
			
		||||
                    return 'Numpad7';
 | 
			
		||||
                case 'ArrowUp':
 | 
			
		||||
                    return 'Numpad8';
 | 
			
		||||
                case 'PageUp':
 | 
			
		||||
                    return 'Numpad9';
 | 
			
		||||
                case 'Enter':
 | 
			
		||||
                    return 'NumpadEnter';
 | 
			
		||||
                case 'Delete': return 'NumpadDecimal';
 | 
			
		||||
                case 'Insert': return 'Numpad0';
 | 
			
		||||
                case 'End': return 'Numpad1';
 | 
			
		||||
                case 'ArrowDown': return 'Numpad2';
 | 
			
		||||
                case 'PageDown': return 'Numpad3';
 | 
			
		||||
                case 'ArrowLeft': return 'Numpad4';
 | 
			
		||||
                case 'ArrowRight': return 'Numpad6';
 | 
			
		||||
                case 'Home': return 'Numpad7';
 | 
			
		||||
                case 'ArrowUp': return 'Numpad8';
 | 
			
		||||
                case 'PageUp': return 'Numpad9';
 | 
			
		||||
                case 'Enter': return 'NumpadEnter';
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -112,75 +66,54 @@ function getKeycode(evt) {
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
// Get 'KeyboardEvent.key', handling legacy browsers
 | 
			
		||||
function getKey(evt) {
 | 
			
		||||
export function getKey(evt) {
 | 
			
		||||
    // Are we getting a proper key value?
 | 
			
		||||
    if (evt.key !== undefined) {
 | 
			
		||||
        // IE and Edge use some ancient version of the spec
 | 
			
		||||
        // https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/8860571/
 | 
			
		||||
        switch (evt.key) {
 | 
			
		||||
            case 'Spacebar':
 | 
			
		||||
                return ' ';
 | 
			
		||||
            case 'Esc':
 | 
			
		||||
                return 'Escape';
 | 
			
		||||
            case 'Scroll':
 | 
			
		||||
                return 'ScrollLock';
 | 
			
		||||
            case 'Win':
 | 
			
		||||
                return 'Meta';
 | 
			
		||||
            case 'Apps':
 | 
			
		||||
                return 'ContextMenu';
 | 
			
		||||
            case 'Up':
 | 
			
		||||
                return 'ArrowUp';
 | 
			
		||||
            case 'Left':
 | 
			
		||||
                return 'ArrowLeft';
 | 
			
		||||
            case 'Right':
 | 
			
		||||
                return 'ArrowRight';
 | 
			
		||||
            case 'Down':
 | 
			
		||||
                return 'ArrowDown';
 | 
			
		||||
            case 'Del':
 | 
			
		||||
                return 'Delete';
 | 
			
		||||
            case 'Divide':
 | 
			
		||||
                return '/';
 | 
			
		||||
            case 'Multiply':
 | 
			
		||||
                return '*';
 | 
			
		||||
            case 'Subtract':
 | 
			
		||||
                return '-';
 | 
			
		||||
            case 'Add':
 | 
			
		||||
                return '+';
 | 
			
		||||
            case 'Decimal':
 | 
			
		||||
                return evt.char;
 | 
			
		||||
            case 'Spacebar': return ' ';
 | 
			
		||||
            case 'Esc': return 'Escape';
 | 
			
		||||
            case 'Scroll': return 'ScrollLock';
 | 
			
		||||
            case 'Win': return 'Meta';
 | 
			
		||||
            case 'Apps': return 'ContextMenu';
 | 
			
		||||
            case 'Up': return 'ArrowUp';
 | 
			
		||||
            case 'Left': return 'ArrowLeft';
 | 
			
		||||
            case 'Right': return 'ArrowRight';
 | 
			
		||||
            case 'Down': return 'ArrowDown';
 | 
			
		||||
            case 'Del': return 'Delete';
 | 
			
		||||
            case 'Divide': return '/';
 | 
			
		||||
            case 'Multiply': return '*';
 | 
			
		||||
            case 'Subtract': return '-';
 | 
			
		||||
            case 'Add': return '+';
 | 
			
		||||
            case 'Decimal': return evt.char;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // Mozilla isn't fully in sync with the spec yet
 | 
			
		||||
        switch (evt.key) {
 | 
			
		||||
            case 'OS':
 | 
			
		||||
                return 'Meta';
 | 
			
		||||
            case 'OS': return 'Meta';
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // iOS leaks some OS names
 | 
			
		||||
        switch (evt.key) {
 | 
			
		||||
            case 'UIKeyInputUpArrow':
 | 
			
		||||
                return 'ArrowUp';
 | 
			
		||||
            case 'UIKeyInputDownArrow':
 | 
			
		||||
                return 'ArrowDown';
 | 
			
		||||
            case 'UIKeyInputLeftArrow':
 | 
			
		||||
                return 'ArrowLeft';
 | 
			
		||||
            case 'UIKeyInputRightArrow':
 | 
			
		||||
                return 'ArrowRight';
 | 
			
		||||
            case 'UIKeyInputEscape':
 | 
			
		||||
                return 'Escape';
 | 
			
		||||
            case 'UIKeyInputUpArrow': return 'ArrowUp';
 | 
			
		||||
            case 'UIKeyInputDownArrow': return 'ArrowDown';
 | 
			
		||||
            case 'UIKeyInputLeftArrow': return 'ArrowLeft';
 | 
			
		||||
            case 'UIKeyInputRightArrow': return 'ArrowRight';
 | 
			
		||||
            case 'UIKeyInputEscape': return 'Escape';
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // IE and Edge have broken handling of AltGraph so we cannot
 | 
			
		||||
        // trust them for printable characters
 | 
			
		||||
        if (evt.key.length !== 1 || !browser.isIE() && !browser.isEdge()) {
 | 
			
		||||
        if ((evt.key.length !== 1) || (!browser.isIE() && !browser.isEdge())) {
 | 
			
		||||
            return evt.key;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Try to deduce it based on the physical key
 | 
			
		||||
    var code = getKeycode(evt);
 | 
			
		||||
    if (code in _fixedkeys2.default) {
 | 
			
		||||
        return _fixedkeys2.default[code];
 | 
			
		||||
    if (code in fixedkeys) {
 | 
			
		||||
        return fixedkeys[code];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // If that failed, then see if we have a printable character
 | 
			
		||||
| 
						 | 
				
			
			@ -193,7 +126,7 @@ function getKey(evt) {
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
// Get the most reliable keysym value we can get from a key event
 | 
			
		||||
function getKeysym(evt) {
 | 
			
		||||
export function getKeysym(evt){
 | 
			
		||||
    var key = getKey(evt);
 | 
			
		||||
 | 
			
		||||
    if (key === 'Unidentified') {
 | 
			
		||||
| 
						 | 
				
			
			@ -201,19 +134,19 @@ function getKeysym(evt) {
 | 
			
		|||
    }
 | 
			
		||||
 | 
			
		||||
    // First look up special keys
 | 
			
		||||
    if (key in _domkeytable2.default) {
 | 
			
		||||
    if (key in DOMKeyTable) {
 | 
			
		||||
        var location = evt.location;
 | 
			
		||||
 | 
			
		||||
        // Safari screws up location for the right cmd key
 | 
			
		||||
        if (key === 'Meta' && location === 0) {
 | 
			
		||||
        if ((key === 'Meta') && (location === 0)) {
 | 
			
		||||
            location = 2;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (location === undefined || location > 3) {
 | 
			
		||||
        if ((location === undefined) || (location > 3)) {
 | 
			
		||||
            location = 0;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return _domkeytable2.default[key][location];
 | 
			
		||||
        return DOMKeyTable[key][location];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Now we need to look at the Unicode symbol instead
 | 
			
		||||
| 
						 | 
				
			
			@ -227,8 +160,8 @@ function getKeysym(evt) {
 | 
			
		|||
 | 
			
		||||
    codepoint = key.charCodeAt();
 | 
			
		||||
    if (codepoint) {
 | 
			
		||||
        return _keysymdef2.default.lookup(codepoint);
 | 
			
		||||
        return keysyms.lookup(codepoint);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return null;
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,8 +1,3 @@
 | 
			
		|||
'use strict';
 | 
			
		||||
 | 
			
		||||
Object.defineProperty(exports, "__esModule", {
 | 
			
		||||
  value: true
 | 
			
		||||
});
 | 
			
		||||
/*
 | 
			
		||||
 * noVNC: HTML5 VNC client
 | 
			
		||||
 * Copyright (C) 2017 Pierre Ossman for Cendio AB
 | 
			
		||||
| 
						 | 
				
			
			@ -14,108 +9,108 @@ Object.defineProperty(exports, "__esModule", {
 | 
			
		|||
 * HTML key codes.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
exports.default = {
 | 
			
		||||
  0x08: 'Backspace',
 | 
			
		||||
  0x09: 'Tab',
 | 
			
		||||
  0x0a: 'NumpadClear',
 | 
			
		||||
  0x0d: 'Enter',
 | 
			
		||||
  0x10: 'ShiftLeft',
 | 
			
		||||
  0x11: 'ControlLeft',
 | 
			
		||||
  0x12: 'AltLeft',
 | 
			
		||||
  0x13: 'Pause',
 | 
			
		||||
  0x14: 'CapsLock',
 | 
			
		||||
  0x15: 'Lang1',
 | 
			
		||||
  0x19: 'Lang2',
 | 
			
		||||
  0x1b: 'Escape',
 | 
			
		||||
  0x1c: 'Convert',
 | 
			
		||||
  0x1d: 'NonConvert',
 | 
			
		||||
  0x20: 'Space',
 | 
			
		||||
  0x21: 'PageUp',
 | 
			
		||||
  0x22: 'PageDown',
 | 
			
		||||
  0x23: 'End',
 | 
			
		||||
  0x24: 'Home',
 | 
			
		||||
  0x25: 'ArrowLeft',
 | 
			
		||||
  0x26: 'ArrowUp',
 | 
			
		||||
  0x27: 'ArrowRight',
 | 
			
		||||
  0x28: 'ArrowDown',
 | 
			
		||||
  0x29: 'Select',
 | 
			
		||||
  0x2c: 'PrintScreen',
 | 
			
		||||
  0x2d: 'Insert',
 | 
			
		||||
  0x2e: 'Delete',
 | 
			
		||||
  0x2f: 'Help',
 | 
			
		||||
  0x30: 'Digit0',
 | 
			
		||||
  0x31: 'Digit1',
 | 
			
		||||
  0x32: 'Digit2',
 | 
			
		||||
  0x33: 'Digit3',
 | 
			
		||||
  0x34: 'Digit4',
 | 
			
		||||
  0x35: 'Digit5',
 | 
			
		||||
  0x36: 'Digit6',
 | 
			
		||||
  0x37: 'Digit7',
 | 
			
		||||
  0x38: 'Digit8',
 | 
			
		||||
  0x39: 'Digit9',
 | 
			
		||||
  0x5b: 'MetaLeft',
 | 
			
		||||
  0x5c: 'MetaRight',
 | 
			
		||||
  0x5d: 'ContextMenu',
 | 
			
		||||
  0x5f: 'Sleep',
 | 
			
		||||
  0x60: 'Numpad0',
 | 
			
		||||
  0x61: 'Numpad1',
 | 
			
		||||
  0x62: 'Numpad2',
 | 
			
		||||
  0x63: 'Numpad3',
 | 
			
		||||
  0x64: 'Numpad4',
 | 
			
		||||
  0x65: 'Numpad5',
 | 
			
		||||
  0x66: 'Numpad6',
 | 
			
		||||
  0x67: 'Numpad7',
 | 
			
		||||
  0x68: 'Numpad8',
 | 
			
		||||
  0x69: 'Numpad9',
 | 
			
		||||
  0x6a: 'NumpadMultiply',
 | 
			
		||||
  0x6b: 'NumpadAdd',
 | 
			
		||||
  0x6c: 'NumpadDecimal',
 | 
			
		||||
  0x6d: 'NumpadSubtract',
 | 
			
		||||
  0x6e: 'NumpadDecimal', // Duplicate, because buggy on Windows
 | 
			
		||||
  0x6f: 'NumpadDivide',
 | 
			
		||||
  0x70: 'F1',
 | 
			
		||||
  0x71: 'F2',
 | 
			
		||||
  0x72: 'F3',
 | 
			
		||||
  0x73: 'F4',
 | 
			
		||||
  0x74: 'F5',
 | 
			
		||||
  0x75: 'F6',
 | 
			
		||||
  0x76: 'F7',
 | 
			
		||||
  0x77: 'F8',
 | 
			
		||||
  0x78: 'F9',
 | 
			
		||||
  0x79: 'F10',
 | 
			
		||||
  0x7a: 'F11',
 | 
			
		||||
  0x7b: 'F12',
 | 
			
		||||
  0x7c: 'F13',
 | 
			
		||||
  0x7d: 'F14',
 | 
			
		||||
  0x7e: 'F15',
 | 
			
		||||
  0x7f: 'F16',
 | 
			
		||||
  0x80: 'F17',
 | 
			
		||||
  0x81: 'F18',
 | 
			
		||||
  0x82: 'F19',
 | 
			
		||||
  0x83: 'F20',
 | 
			
		||||
  0x84: 'F21',
 | 
			
		||||
  0x85: 'F22',
 | 
			
		||||
  0x86: 'F23',
 | 
			
		||||
  0x87: 'F24',
 | 
			
		||||
  0x90: 'NumLock',
 | 
			
		||||
  0x91: 'ScrollLock',
 | 
			
		||||
  0xa6: 'BrowserBack',
 | 
			
		||||
  0xa7: 'BrowserForward',
 | 
			
		||||
  0xa8: 'BrowserRefresh',
 | 
			
		||||
  0xa9: 'BrowserStop',
 | 
			
		||||
  0xaa: 'BrowserSearch',
 | 
			
		||||
  0xab: 'BrowserFavorites',
 | 
			
		||||
  0xac: 'BrowserHome',
 | 
			
		||||
  0xad: 'AudioVolumeMute',
 | 
			
		||||
  0xae: 'AudioVolumeDown',
 | 
			
		||||
  0xaf: 'AudioVolumeUp',
 | 
			
		||||
  0xb0: 'MediaTrackNext',
 | 
			
		||||
  0xb1: 'MediaTrackPrevious',
 | 
			
		||||
  0xb2: 'MediaStop',
 | 
			
		||||
  0xb3: 'MediaPlayPause',
 | 
			
		||||
  0xb4: 'LaunchMail',
 | 
			
		||||
  0xb5: 'MediaSelect',
 | 
			
		||||
  0xb6: 'LaunchApp1',
 | 
			
		||||
  0xb7: 'LaunchApp2',
 | 
			
		||||
  0xe1: 'AltRight' // Only when it is AltGraph
 | 
			
		||||
};
 | 
			
		||||
export default {
 | 
			
		||||
    0x08: 'Backspace',
 | 
			
		||||
    0x09: 'Tab',
 | 
			
		||||
    0x0a: 'NumpadClear',
 | 
			
		||||
    0x0d: 'Enter',
 | 
			
		||||
    0x10: 'ShiftLeft',
 | 
			
		||||
    0x11: 'ControlLeft',
 | 
			
		||||
    0x12: 'AltLeft',
 | 
			
		||||
    0x13: 'Pause',
 | 
			
		||||
    0x14: 'CapsLock',
 | 
			
		||||
    0x15: 'Lang1',
 | 
			
		||||
    0x19: 'Lang2',
 | 
			
		||||
    0x1b: 'Escape',
 | 
			
		||||
    0x1c: 'Convert',
 | 
			
		||||
    0x1d: 'NonConvert',
 | 
			
		||||
    0x20: 'Space',
 | 
			
		||||
    0x21: 'PageUp',
 | 
			
		||||
    0x22: 'PageDown',
 | 
			
		||||
    0x23: 'End',
 | 
			
		||||
    0x24: 'Home',
 | 
			
		||||
    0x25: 'ArrowLeft',
 | 
			
		||||
    0x26: 'ArrowUp',
 | 
			
		||||
    0x27: 'ArrowRight',
 | 
			
		||||
    0x28: 'ArrowDown',
 | 
			
		||||
    0x29: 'Select',
 | 
			
		||||
    0x2c: 'PrintScreen',
 | 
			
		||||
    0x2d: 'Insert',
 | 
			
		||||
    0x2e: 'Delete',
 | 
			
		||||
    0x2f: 'Help',
 | 
			
		||||
    0x30: 'Digit0',
 | 
			
		||||
    0x31: 'Digit1',
 | 
			
		||||
    0x32: 'Digit2',
 | 
			
		||||
    0x33: 'Digit3',
 | 
			
		||||
    0x34: 'Digit4',
 | 
			
		||||
    0x35: 'Digit5',
 | 
			
		||||
    0x36: 'Digit6',
 | 
			
		||||
    0x37: 'Digit7',
 | 
			
		||||
    0x38: 'Digit8',
 | 
			
		||||
    0x39: 'Digit9',
 | 
			
		||||
    0x5b: 'MetaLeft',
 | 
			
		||||
    0x5c: 'MetaRight',
 | 
			
		||||
    0x5d: 'ContextMenu',
 | 
			
		||||
    0x5f: 'Sleep',
 | 
			
		||||
    0x60: 'Numpad0',
 | 
			
		||||
    0x61: 'Numpad1',
 | 
			
		||||
    0x62: 'Numpad2',
 | 
			
		||||
    0x63: 'Numpad3',
 | 
			
		||||
    0x64: 'Numpad4',
 | 
			
		||||
    0x65: 'Numpad5',
 | 
			
		||||
    0x66: 'Numpad6',
 | 
			
		||||
    0x67: 'Numpad7',
 | 
			
		||||
    0x68: 'Numpad8',
 | 
			
		||||
    0x69: 'Numpad9',
 | 
			
		||||
    0x6a: 'NumpadMultiply',
 | 
			
		||||
    0x6b: 'NumpadAdd',
 | 
			
		||||
    0x6c: 'NumpadDecimal',
 | 
			
		||||
    0x6d: 'NumpadSubtract',
 | 
			
		||||
    0x6e: 'NumpadDecimal', // Duplicate, because buggy on Windows
 | 
			
		||||
    0x6f: 'NumpadDivide',
 | 
			
		||||
    0x70: 'F1',
 | 
			
		||||
    0x71: 'F2',
 | 
			
		||||
    0x72: 'F3',
 | 
			
		||||
    0x73: 'F4',
 | 
			
		||||
    0x74: 'F5',
 | 
			
		||||
    0x75: 'F6',
 | 
			
		||||
    0x76: 'F7',
 | 
			
		||||
    0x77: 'F8',
 | 
			
		||||
    0x78: 'F9',
 | 
			
		||||
    0x79: 'F10',
 | 
			
		||||
    0x7a: 'F11',
 | 
			
		||||
    0x7b: 'F12',
 | 
			
		||||
    0x7c: 'F13',
 | 
			
		||||
    0x7d: 'F14',
 | 
			
		||||
    0x7e: 'F15',
 | 
			
		||||
    0x7f: 'F16',
 | 
			
		||||
    0x80: 'F17',
 | 
			
		||||
    0x81: 'F18',
 | 
			
		||||
    0x82: 'F19',
 | 
			
		||||
    0x83: 'F20',
 | 
			
		||||
    0x84: 'F21',
 | 
			
		||||
    0x85: 'F22',
 | 
			
		||||
    0x86: 'F23',
 | 
			
		||||
    0x87: 'F24',
 | 
			
		||||
    0x90: 'NumLock',
 | 
			
		||||
    0x91: 'ScrollLock',
 | 
			
		||||
    0xa6: 'BrowserBack',
 | 
			
		||||
    0xa7: 'BrowserForward',
 | 
			
		||||
    0xa8: 'BrowserRefresh',
 | 
			
		||||
    0xa9: 'BrowserStop',
 | 
			
		||||
    0xaa: 'BrowserSearch',
 | 
			
		||||
    0xab: 'BrowserFavorites',
 | 
			
		||||
    0xac: 'BrowserHome',
 | 
			
		||||
    0xad: 'AudioVolumeMute',
 | 
			
		||||
    0xae: 'AudioVolumeDown',
 | 
			
		||||
    0xaf: 'AudioVolumeUp',
 | 
			
		||||
    0xb0: 'MediaTrackNext',
 | 
			
		||||
    0xb1: 'MediaTrackPrevious',
 | 
			
		||||
    0xb2: 'MediaStop',
 | 
			
		||||
    0xb3: 'MediaPlayPause',
 | 
			
		||||
    0xb4: 'LaunchMail',
 | 
			
		||||
    0xb5: 'MediaSelect',
 | 
			
		||||
    0xb6: 'LaunchApp1',
 | 
			
		||||
    0xb7: 'LaunchApp2',
 | 
			
		||||
    0xe1: 'AltRight', // Only when it is AltGraph
 | 
			
		||||
};
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,15 +1,10 @@
 | 
			
		|||
"use strict";
 | 
			
		||||
 | 
			
		||||
Object.defineProperty(exports, "__esModule", {
 | 
			
		||||
  value: true
 | 
			
		||||
});
 | 
			
		||||
/*
 | 
			
		||||
 * This file is auto-generated from keymaps.csv on 2017-05-31 16:20
 | 
			
		||||
 * Database checksum sha256(92fd165507f2a3b8c5b3fa56e425d45788dbcb98cf067a307527d91ce22cab94)
 | 
			
		||||
 * To re-generate, run:
 | 
			
		||||
 *   keymap-gen --lang=js code-map keymaps.csv html atset1
 | 
			
		||||
*/
 | 
			
		||||
exports.default = {
 | 
			
		||||
export default {
 | 
			
		||||
  "Again": 0xe005, /* html:Again (Again) -> linux:129 (KEY_AGAIN) -> atset1:57349 */
 | 
			
		||||
  "AltLeft": 0x38, /* html:AltLeft (AltLeft) -> linux:56 (KEY_LEFTALT) -> atset1:56 */
 | 
			
		||||
  "AltRight": 0xe038, /* html:AltRight (AltRight) -> linux:100 (KEY_RIGHTALT) -> atset1:57400 */
 | 
			
		||||
| 
						 | 
				
			
			@ -172,5 +167,5 @@ exports.default = {
 | 
			
		|||
  "Suspend": 0xe025, /* html:Suspend (Suspend) -> linux:205 (KEY_SUSPEND) -> atset1:57381 */
 | 
			
		||||
  "Tab": 0xf, /* html:Tab (Tab) -> linux:15 (KEY_TAB) -> atset1:15 */
 | 
			
		||||
  "Undo": 0xe007, /* html:Undo (Undo) -> linux:131 (KEY_UNDO) -> atset1:57351 */
 | 
			
		||||
  "WakeUp": 0xe063 /* html:WakeUp (WakeUp) -> linux:143 (KEY_WAKEUP) -> atset1:57443 */
 | 
			
		||||
};
 | 
			
		||||
  "WakeUp": 0xe063, /* html:WakeUp (WakeUp) -> linux:143 (KEY_WAKEUP) -> atset1:57443 */
 | 
			
		||||
};
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							| 
						 | 
				
			
			@ -1,43 +1,28 @@
 | 
			
		|||
'use strict';
 | 
			
		||||
/*
 | 
			
		||||
 * noVNC: HTML5 VNC client
 | 
			
		||||
 * Copyright (C) 2012 Joel Martin
 | 
			
		||||
 * Licensed under MPL 2.0 (see LICENSE.txt)
 | 
			
		||||
 *
 | 
			
		||||
 * See README.md for usage and integration instructions.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
Object.defineProperty(exports, "__esModule", {
 | 
			
		||||
    value: true
 | 
			
		||||
});
 | 
			
		||||
exports.isTouchDevice = undefined;
 | 
			
		||||
exports.supportsCursorURIs = supportsCursorURIs;
 | 
			
		||||
exports.isMac = isMac;
 | 
			
		||||
exports.isIE = isIE;
 | 
			
		||||
exports.isEdge = isEdge;
 | 
			
		||||
exports.isWindows = isWindows;
 | 
			
		||||
exports.isIOS = isIOS;
 | 
			
		||||
 | 
			
		||||
var _logging = require('./logging.js');
 | 
			
		||||
 | 
			
		||||
var Log = _interopRequireWildcard(_logging);
 | 
			
		||||
 | 
			
		||||
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
 | 
			
		||||
import * as Log from './logging.js';
 | 
			
		||||
 | 
			
		||||
// Touch detection
 | 
			
		||||
var isTouchDevice = exports.isTouchDevice = 'ontouchstart' in document.documentElement ||
 | 
			
		||||
// requried for Chrome debugger
 | 
			
		||||
document.ontouchstart !== undefined ||
 | 
			
		||||
// required for MS Surface
 | 
			
		||||
navigator.maxTouchPoints > 0 || navigator.msMaxTouchPoints > 0; /*
 | 
			
		||||
                                                                 * noVNC: HTML5 VNC client
 | 
			
		||||
                                                                 * Copyright (C) 2012 Joel Martin
 | 
			
		||||
                                                                 * Licensed under MPL 2.0 (see LICENSE.txt)
 | 
			
		||||
                                                                 *
 | 
			
		||||
                                                                 * See README.md for usage and integration instructions.
 | 
			
		||||
                                                                 */
 | 
			
		||||
 | 
			
		||||
export var isTouchDevice = ('ontouchstart' in document.documentElement) ||
 | 
			
		||||
                                 // requried for Chrome debugger
 | 
			
		||||
                                 (document.ontouchstart !== undefined) ||
 | 
			
		||||
                                 // required for MS Surface
 | 
			
		||||
                                 (navigator.maxTouchPoints > 0) ||
 | 
			
		||||
                                 (navigator.msMaxTouchPoints > 0);
 | 
			
		||||
window.addEventListener('touchstart', function onFirstTouch() {
 | 
			
		||||
    exports.isTouchDevice = isTouchDevice = true;
 | 
			
		||||
    isTouchDevice = true;
 | 
			
		||||
    window.removeEventListener('touchstart', onFirstTouch, false);
 | 
			
		||||
}, false);
 | 
			
		||||
 | 
			
		||||
var _cursor_uris_supported = null;
 | 
			
		||||
 | 
			
		||||
function supportsCursorURIs() {
 | 
			
		||||
export function supportsCursorURIs () {
 | 
			
		||||
    if (_cursor_uris_supported === null) {
 | 
			
		||||
        try {
 | 
			
		||||
            var target = document.createElement('canvas');
 | 
			
		||||
| 
						 | 
				
			
			@ -59,22 +44,26 @@ function supportsCursorURIs() {
 | 
			
		|||
    return _cursor_uris_supported;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
function isMac() {
 | 
			
		||||
    return navigator && !!/mac/i.exec(navigator.platform);
 | 
			
		||||
export function isMac() {
 | 
			
		||||
    return navigator && !!(/mac/i).exec(navigator.platform);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function isIE() {
 | 
			
		||||
    return navigator && !!/trident/i.exec(navigator.userAgent);
 | 
			
		||||
export function isIE() {
 | 
			
		||||
    return navigator && !!(/trident/i).exec(navigator.userAgent);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function isEdge() {
 | 
			
		||||
    return navigator && !!/edge/i.exec(navigator.userAgent);
 | 
			
		||||
export function isEdge() {
 | 
			
		||||
    return navigator && !!(/edge/i).exec(navigator.userAgent);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function isWindows() {
 | 
			
		||||
    return navigator && !!/win/i.exec(navigator.platform);
 | 
			
		||||
export function isWindows() {
 | 
			
		||||
    return navigator && !!(/win/i).exec(navigator.platform);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export function isIOS() {
 | 
			
		||||
    return navigator &&
 | 
			
		||||
           (!!(/ipad/i).exec(navigator.platform) ||
 | 
			
		||||
            !!(/iphone/i).exec(navigator.platform) ||
 | 
			
		||||
            !!(/ipod/i).exec(navigator.platform));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function isIOS() {
 | 
			
		||||
    return navigator && (!!/ipad/i.exec(navigator.platform) || !!/iphone/i.exec(navigator.platform) || !!/ipod/i.exec(navigator.platform));
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,12 +1,3 @@
 | 
			
		|||
"use strict";
 | 
			
		||||
 | 
			
		||||
Object.defineProperty(exports, "__esModule", {
 | 
			
		||||
    value: true
 | 
			
		||||
});
 | 
			
		||||
exports.getPointerEvent = getPointerEvent;
 | 
			
		||||
exports.stopEvent = stopEvent;
 | 
			
		||||
exports.setCapture = setCapture;
 | 
			
		||||
exports.releaseCapture = releaseCapture;
 | 
			
		||||
/*
 | 
			
		||||
 * noVNC: HTML5 VNC client
 | 
			
		||||
 * Copyright (C) 2012 Joel Martin
 | 
			
		||||
| 
						 | 
				
			
			@ -19,11 +10,11 @@ exports.releaseCapture = releaseCapture;
 | 
			
		|||
 * Cross-browser event and position routines
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
function getPointerEvent(e) {
 | 
			
		||||
export function getPointerEvent (e) {
 | 
			
		||||
    return e.changedTouches ? e.changedTouches[0] : e.touches ? e.touches[0] : e;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
function stopEvent(e) {
 | 
			
		||||
export function stopEvent (e) {
 | 
			
		||||
    e.stopPropagation();
 | 
			
		||||
    e.preventDefault();
 | 
			
		||||
};
 | 
			
		||||
| 
						 | 
				
			
			@ -65,13 +56,14 @@ var _captureObserver = new MutationObserver(_captureElemChanged);
 | 
			
		|||
 | 
			
		||||
var _captureIndex = 0;
 | 
			
		||||
 | 
			
		||||
function setCapture(elem) {
 | 
			
		||||
export function setCapture (elem) {
 | 
			
		||||
    if (elem.setCapture) {
 | 
			
		||||
 | 
			
		||||
        elem.setCapture();
 | 
			
		||||
 | 
			
		||||
        // IE releases capture on 'click' events which might not trigger
 | 
			
		||||
        elem.addEventListener('mouseup', releaseCapture);
 | 
			
		||||
 | 
			
		||||
    } else {
 | 
			
		||||
        // Release any existing capture in case this method is
 | 
			
		||||
        // called multiple times without coordination
 | 
			
		||||
| 
						 | 
				
			
			@ -103,7 +95,7 @@ function setCapture(elem) {
 | 
			
		|||
        _captureIndex++;
 | 
			
		||||
 | 
			
		||||
        // Track cursor and get initial cursor
 | 
			
		||||
        _captureObserver.observe(elem, { attributes: true });
 | 
			
		||||
        _captureObserver.observe(elem, {attributes:true});
 | 
			
		||||
        _captureElemChanged();
 | 
			
		||||
 | 
			
		||||
        captureElem.style.display = "";
 | 
			
		||||
| 
						 | 
				
			
			@ -115,10 +107,11 @@ function setCapture(elem) {
 | 
			
		|||
    }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
function releaseCapture() {
 | 
			
		||||
export function releaseCapture () {
 | 
			
		||||
    if (document.releaseCapture) {
 | 
			
		||||
 | 
			
		||||
        document.releaseCapture();
 | 
			
		||||
 | 
			
		||||
    } else {
 | 
			
		||||
        if (!_captureElem) {
 | 
			
		||||
            return;
 | 
			
		||||
| 
						 | 
				
			
			@ -126,7 +119,7 @@ function releaseCapture() {
 | 
			
		|||
 | 
			
		||||
        // There might be events already queued, so we need to wait for
 | 
			
		||||
        // them to flush. E.g. contextmenu in Microsoft Edge
 | 
			
		||||
        window.setTimeout(function (expected) {
 | 
			
		||||
        window.setTimeout(function(expected) {
 | 
			
		||||
            // Only clear it if it's the expected grab (i.e. no one
 | 
			
		||||
            // else has initiated a new grab)
 | 
			
		||||
            if (_captureIndex === expected) {
 | 
			
		||||
| 
						 | 
				
			
			@ -142,4 +135,4 @@ function releaseCapture() {
 | 
			
		|||
        window.removeEventListener('mousemove', _captureProxy);
 | 
			
		||||
        window.removeEventListener('mouseup', _captureProxy);
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
};
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,8 +1,3 @@
 | 
			
		|||
"use strict";
 | 
			
		||||
 | 
			
		||||
Object.defineProperty(exports, "__esModule", {
 | 
			
		||||
   value: true
 | 
			
		||||
});
 | 
			
		||||
/*
 | 
			
		||||
 * noVNC: HTML5 VNC client
 | 
			
		||||
 * Copyright 2017 Pierre Ossman for Cendio AB
 | 
			
		||||
| 
						 | 
				
			
			@ -12,9 +7,9 @@ Object.defineProperty(exports, "__esModule", {
 | 
			
		|||
 */
 | 
			
		||||
 | 
			
		||||
var EventTargetMixin = {
 | 
			
		||||
   _listeners: null,
 | 
			
		||||
    _listeners: null,
 | 
			
		||||
 | 
			
		||||
   addEventListener: function (type, callback) {
 | 
			
		||||
   addEventListener: function(type, callback) {
 | 
			
		||||
      if (!this._listeners) {
 | 
			
		||||
         this._listeners = new Map();
 | 
			
		||||
      }
 | 
			
		||||
| 
						 | 
				
			
			@ -24,14 +19,14 @@ var EventTargetMixin = {
 | 
			
		|||
      this._listeners.get(type).add(callback);
 | 
			
		||||
   },
 | 
			
		||||
 | 
			
		||||
   removeEventListener: function (type, callback) {
 | 
			
		||||
   removeEventListener: function(type, callback) {
 | 
			
		||||
      if (!this._listeners || !this._listeners.has(type)) {
 | 
			
		||||
         return;
 | 
			
		||||
      }
 | 
			
		||||
      this._listeners.get(type).delete(callback);
 | 
			
		||||
   },
 | 
			
		||||
 | 
			
		||||
   dispatchEvent: function (event) {
 | 
			
		||||
   dispatchEvent: function(event) {
 | 
			
		||||
      if (!this._listeners || !this._listeners.has(event.type)) {
 | 
			
		||||
         return true;
 | 
			
		||||
      }
 | 
			
		||||
| 
						 | 
				
			
			@ -39,7 +34,7 @@ var EventTargetMixin = {
 | 
			
		|||
         callback.call(this, event);
 | 
			
		||||
      }, this);
 | 
			
		||||
      return !event.defaultPrevented;
 | 
			
		||||
   }
 | 
			
		||||
   },
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
exports.default = EventTargetMixin;
 | 
			
		||||
export default EventTargetMixin;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,10 +1,3 @@
 | 
			
		|||
'use strict';
 | 
			
		||||
 | 
			
		||||
Object.defineProperty(exports, "__esModule", {
 | 
			
		||||
    value: true
 | 
			
		||||
});
 | 
			
		||||
exports.init_logging = init_logging;
 | 
			
		||||
exports.get_logging = get_logging;
 | 
			
		||||
/*
 | 
			
		||||
 * noVNC: HTML5 VNC client
 | 
			
		||||
 * Copyright (C) 2012 Joel Martin
 | 
			
		||||
| 
						 | 
				
			
			@ -24,24 +17,24 @@ var Info = function (msg) {};
 | 
			
		|||
var Warn = function (msg) {};
 | 
			
		||||
var Error = function (msg) {};
 | 
			
		||||
 | 
			
		||||
function init_logging(level) {
 | 
			
		||||
export function init_logging (level) {
 | 
			
		||||
    if (typeof level === 'undefined') {
 | 
			
		||||
        level = _log_level;
 | 
			
		||||
    } else {
 | 
			
		||||
        _log_level = level;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    exports.Debug = Debug = exports.Info = Info = exports.Warn = Warn = exports.Error = Error = function (msg) {};
 | 
			
		||||
    Debug = Info = Warn = Error = function (msg) {};
 | 
			
		||||
    if (typeof window.console !== "undefined") {
 | 
			
		||||
        switch (level) {
 | 
			
		||||
            case 'debug':
 | 
			
		||||
                exports.Debug = Debug = console.debug.bind(window.console);
 | 
			
		||||
                Debug = console.debug.bind(window.console);
 | 
			
		||||
            case 'info':
 | 
			
		||||
                exports.Info = Info = console.info.bind(window.console);
 | 
			
		||||
                Info  = console.info.bind(window.console);
 | 
			
		||||
            case 'warn':
 | 
			
		||||
                exports.Warn = Warn = console.warn.bind(window.console);
 | 
			
		||||
                Warn  = console.warn.bind(window.console);
 | 
			
		||||
            case 'error':
 | 
			
		||||
                exports.Error = Error = console.error.bind(window.console);
 | 
			
		||||
                Error = console.error.bind(window.console);
 | 
			
		||||
            case 'none':
 | 
			
		||||
                break;
 | 
			
		||||
            default:
 | 
			
		||||
| 
						 | 
				
			
			@ -49,14 +42,10 @@ function init_logging(level) {
 | 
			
		|||
        }
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
function get_logging() {
 | 
			
		||||
export function get_logging () {
 | 
			
		||||
    return _log_level;
 | 
			
		||||
};
 | 
			
		||||
exports.Debug = Debug;
 | 
			
		||||
exports.Info = Info;
 | 
			
		||||
exports.Warn = Warn;
 | 
			
		||||
exports.Error = Error;
 | 
			
		||||
export { Debug, Info, Warn, Error };
 | 
			
		||||
 | 
			
		||||
// Initialize logging level
 | 
			
		||||
 | 
			
		||||
init_logging();
 | 
			
		||||
init_logging();
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,5 +1,3 @@
 | 
			
		|||
'use strict';
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * noVNC: HTML5 VNC client
 | 
			
		||||
 * Copyright 2017 Pierre Ossman for noVNC
 | 
			
		||||
| 
						 | 
				
			
			@ -12,12 +10,9 @@
 | 
			
		|||
if (typeof Object.assign != 'function') {
 | 
			
		||||
    // Must be writable: true, enumerable: false, configurable: true
 | 
			
		||||
    Object.defineProperty(Object, "assign", {
 | 
			
		||||
        value: function assign(target, varArgs) {
 | 
			
		||||
            // .length of function is 2
 | 
			
		||||
        value: function assign(target, varArgs) { // .length of function is 2
 | 
			
		||||
            'use strict';
 | 
			
		||||
 | 
			
		||||
            if (target == null) {
 | 
			
		||||
                // TypeError if undefined or null
 | 
			
		||||
            if (target == null) { // TypeError if undefined or null
 | 
			
		||||
                throw new TypeError('Cannot convert undefined or null to object');
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -26,8 +21,7 @@ if (typeof Object.assign != 'function') {
 | 
			
		|||
            for (var index = 1; index < arguments.length; index++) {
 | 
			
		||||
                var nextSource = arguments[index];
 | 
			
		||||
 | 
			
		||||
                if (nextSource != null) {
 | 
			
		||||
                    // Skip over if undefined or null
 | 
			
		||||
                if (nextSource != null) { // Skip over if undefined or null
 | 
			
		||||
                    for (var nextKey in nextSource) {
 | 
			
		||||
                        // Avoid bugs when hasOwnProperty is shadowed
 | 
			
		||||
                        if (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) {
 | 
			
		||||
| 
						 | 
				
			
			@ -45,10 +39,10 @@ if (typeof Object.assign != 'function') {
 | 
			
		|||
 | 
			
		||||
/* CustomEvent constructor (taken from MDN) */
 | 
			
		||||
(function () {
 | 
			
		||||
    function CustomEvent(event, params) {
 | 
			
		||||
    function CustomEvent ( event, params ) {
 | 
			
		||||
        params = params || { bubbles: false, cancelable: false, detail: undefined };
 | 
			
		||||
        var evt = document.createEvent('CustomEvent');
 | 
			
		||||
        evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);
 | 
			
		||||
        var evt = document.createEvent( 'CustomEvent' );
 | 
			
		||||
        evt.initCustomEvent( event, params.bubbles, params.cancelable, params.detail );
 | 
			
		||||
        return evt;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -57,4 +51,4 @@ if (typeof Object.assign != 'function') {
 | 
			
		|||
    if (typeof window.CustomEvent !== "function") {
 | 
			
		||||
        window.CustomEvent = CustomEvent;
 | 
			
		||||
    }
 | 
			
		||||
})();
 | 
			
		||||
})();
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,9 +1,3 @@
 | 
			
		|||
"use strict";
 | 
			
		||||
 | 
			
		||||
Object.defineProperty(exports, "__esModule", {
 | 
			
		||||
  value: true
 | 
			
		||||
});
 | 
			
		||||
exports.decodeUTF8 = decodeUTF8;
 | 
			
		||||
/*
 | 
			
		||||
 * noVNC: HTML5 VNC client
 | 
			
		||||
 * Copyright (C) 2012 Joel Martin
 | 
			
		||||
| 
						 | 
				
			
			@ -15,8 +9,7 @@ exports.decodeUTF8 = decodeUTF8;
 | 
			
		|||
/*
 | 
			
		||||
 * Decode from UTF-8
 | 
			
		||||
 */
 | 
			
		||||
function decodeUTF8(utf8string) {
 | 
			
		||||
  "use strict";
 | 
			
		||||
 | 
			
		||||
  return decodeURIComponent(escape(utf8string));
 | 
			
		||||
};
 | 
			
		||||
export function decodeUTF8 (utf8string) {
 | 
			
		||||
    "use strict";
 | 
			
		||||
    return decodeURIComponent(escape(utf8string));
 | 
			
		||||
};
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,32 +1,35 @@
 | 
			
		|||
'use strict';
 | 
			
		||||
/*
 | 
			
		||||
 * Websock: high-performance binary WebSockets
 | 
			
		||||
 * Copyright (C) 2012 Joel Martin
 | 
			
		||||
 * Licensed under MPL 2.0 (see LICENSE.txt)
 | 
			
		||||
 *
 | 
			
		||||
 * Websock is similar to the standard WebSocket object but with extra
 | 
			
		||||
 * buffer handling.
 | 
			
		||||
 *
 | 
			
		||||
 * Websock has built-in receive queue buffering; the message event
 | 
			
		||||
 * does not contain actual data but is simply a notification that
 | 
			
		||||
 * there is new data available. Several rQ* methods are available to
 | 
			
		||||
 * read binary data off of the receive queue.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
Object.defineProperty(exports, "__esModule", {
 | 
			
		||||
    value: true
 | 
			
		||||
});
 | 
			
		||||
exports.default = Websock;
 | 
			
		||||
import * as Log from './util/logging.js';
 | 
			
		||||
 | 
			
		||||
var _logging = require('./util/logging.js');
 | 
			
		||||
 | 
			
		||||
var Log = _interopRequireWildcard(_logging);
 | 
			
		||||
 | 
			
		||||
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
 | 
			
		||||
 | 
			
		||||
function Websock() {
 | 
			
		||||
export default function Websock() {
 | 
			
		||||
    "use strict";
 | 
			
		||||
 | 
			
		||||
    this._websocket = null; // WebSocket object
 | 
			
		||||
    this._websocket = null;  // WebSocket object
 | 
			
		||||
 | 
			
		||||
    this._rQi = 0; // Receive queue index
 | 
			
		||||
    this._rQlen = 0; // Next write position in the receive queue
 | 
			
		||||
    this._rQi = 0;           // Receive queue index
 | 
			
		||||
    this._rQlen = 0;         // Next write position in the receive queue
 | 
			
		||||
    this._rQbufferSize = 1024 * 1024 * 4; // Receive queue buffer size (4 MiB)
 | 
			
		||||
    this._rQmax = this._rQbufferSize / 8;
 | 
			
		||||
    // called in init: this._rQ = new Uint8Array(this._rQbufferSize);
 | 
			
		||||
    this._rQ = null; // Receive queue
 | 
			
		||||
 | 
			
		||||
    this._sQbufferSize = 1024 * 10; // 10 KiB
 | 
			
		||||
    this._sQbufferSize = 1024 * 10;  // 10 KiB
 | 
			
		||||
    // called in init: this._sQ = new Uint8Array(this._sQbufferSize);
 | 
			
		||||
    this._sQlen = 0;
 | 
			
		||||
    this._sQ = null; // Send queue
 | 
			
		||||
    this._sQ = null;  // Send queue
 | 
			
		||||
 | 
			
		||||
    this._eventHandlers = {
 | 
			
		||||
        'message': function () {},
 | 
			
		||||
| 
						 | 
				
			
			@ -34,44 +37,29 @@ function Websock() {
 | 
			
		|||
        'close': function () {},
 | 
			
		||||
        'error': function () {}
 | 
			
		||||
    };
 | 
			
		||||
} /*
 | 
			
		||||
   * Websock: high-performance binary WebSockets
 | 
			
		||||
   * Copyright (C) 2012 Joel Martin
 | 
			
		||||
   * Licensed under MPL 2.0 (see LICENSE.txt)
 | 
			
		||||
   *
 | 
			
		||||
   * Websock is similar to the standard WebSocket object but with extra
 | 
			
		||||
   * buffer handling.
 | 
			
		||||
   *
 | 
			
		||||
   * Websock has built-in receive queue buffering; the message event
 | 
			
		||||
   * does not contain actual data but is simply a notification that
 | 
			
		||||
   * there is new data available. Several rQ* methods are available to
 | 
			
		||||
   * read binary data off of the receive queue.
 | 
			
		||||
   */
 | 
			
		||||
 | 
			
		||||
;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// this has performance issues in some versions Chromium, and
 | 
			
		||||
// doesn't gain a tremendous amount of performance increase in Firefox
 | 
			
		||||
// at the moment.  It may be valuable to turn it on in the future.
 | 
			
		||||
var ENABLE_COPYWITHIN = false;
 | 
			
		||||
 | 
			
		||||
var MAX_RQ_GROW_SIZE = 40 * 1024 * 1024; // 40 MiB
 | 
			
		||||
var MAX_RQ_GROW_SIZE = 40 * 1024 * 1024;  // 40 MiB
 | 
			
		||||
 | 
			
		||||
var typedArrayToString = function () {
 | 
			
		||||
var typedArrayToString = (function () {
 | 
			
		||||
    // This is only for PhantomJS, which doesn't like apply-ing
 | 
			
		||||
    // with Typed Arrays
 | 
			
		||||
    try {
 | 
			
		||||
        var arr = new Uint8Array([1, 2, 3]);
 | 
			
		||||
        String.fromCharCode.apply(null, arr);
 | 
			
		||||
        return function (a) {
 | 
			
		||||
            return String.fromCharCode.apply(null, a);
 | 
			
		||||
        };
 | 
			
		||||
        return function (a) { return String.fromCharCode.apply(null, a); };
 | 
			
		||||
    } catch (ex) {
 | 
			
		||||
        return function (a) {
 | 
			
		||||
            return String.fromCharCode.apply(null, Array.prototype.slice.call(a));
 | 
			
		||||
            return String.fromCharCode.apply(
 | 
			
		||||
                null, Array.prototype.slice.call(a));
 | 
			
		||||
        };
 | 
			
		||||
    }
 | 
			
		||||
}();
 | 
			
		||||
})();
 | 
			
		||||
 | 
			
		||||
Websock.prototype = {
 | 
			
		||||
    // Getters and Setters
 | 
			
		||||
| 
						 | 
				
			
			@ -114,34 +102,32 @@ Websock.prototype = {
 | 
			
		|||
 | 
			
		||||
    // TODO(directxman12): test performance with these vs a DataView
 | 
			
		||||
    rQshift16: function () {
 | 
			
		||||
        return (this._rQ[this._rQi++] << 8) + this._rQ[this._rQi++];
 | 
			
		||||
        return (this._rQ[this._rQi++] << 8) +
 | 
			
		||||
               this._rQ[this._rQi++];
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    rQshift32: function () {
 | 
			
		||||
        return (this._rQ[this._rQi++] << 24) + (this._rQ[this._rQi++] << 16) + (this._rQ[this._rQi++] << 8) + this._rQ[this._rQi++];
 | 
			
		||||
        return (this._rQ[this._rQi++] << 24) +
 | 
			
		||||
               (this._rQ[this._rQi++] << 16) +
 | 
			
		||||
               (this._rQ[this._rQi++] << 8) +
 | 
			
		||||
               this._rQ[this._rQi++];
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    rQshiftStr: function (len) {
 | 
			
		||||
        if (typeof len === 'undefined') {
 | 
			
		||||
            len = this.rQlen();
 | 
			
		||||
        }
 | 
			
		||||
        if (typeof(len) === 'undefined') { len = this.rQlen(); }
 | 
			
		||||
        var arr = new Uint8Array(this._rQ.buffer, this._rQi, len);
 | 
			
		||||
        this._rQi += len;
 | 
			
		||||
        return typedArrayToString(arr);
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    rQshiftBytes: function (len) {
 | 
			
		||||
        if (typeof len === 'undefined') {
 | 
			
		||||
            len = this.rQlen();
 | 
			
		||||
        }
 | 
			
		||||
        if (typeof(len) === 'undefined') { len = this.rQlen(); }
 | 
			
		||||
        this._rQi += len;
 | 
			
		||||
        return new Uint8Array(this._rQ.buffer, this._rQi - len, len);
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    rQshiftTo: function (target, len) {
 | 
			
		||||
        if (len === undefined) {
 | 
			
		||||
            len = this.rQlen();
 | 
			
		||||
        }
 | 
			
		||||
        if (len === undefined) { len = this.rQlen(); }
 | 
			
		||||
        // TODO: make this just use set with views when using a ArrayBuffer to store the rQ
 | 
			
		||||
        target.set(new Uint8Array(this._rQ.buffer, this._rQi, len));
 | 
			
		||||
        this._rQi += len;
 | 
			
		||||
| 
						 | 
				
			
			@ -225,7 +211,7 @@ Websock.prototype = {
 | 
			
		|||
        this._websocket.binaryType = 'arraybuffer';
 | 
			
		||||
 | 
			
		||||
        this._websocket.onmessage = this._recv_message.bind(this);
 | 
			
		||||
        this._websocket.onopen = function () {
 | 
			
		||||
        this._websocket.onopen = (function () {
 | 
			
		||||
            Log.Debug('>> WebSock.onopen');
 | 
			
		||||
            if (this._websocket.protocol) {
 | 
			
		||||
                Log.Info("Server choose sub-protocol: " + this._websocket.protocol);
 | 
			
		||||
| 
						 | 
				
			
			@ -233,29 +219,28 @@ Websock.prototype = {
 | 
			
		|||
 | 
			
		||||
            this._eventHandlers.open();
 | 
			
		||||
            Log.Debug("<< WebSock.onopen");
 | 
			
		||||
        }.bind(this);
 | 
			
		||||
        this._websocket.onclose = function (e) {
 | 
			
		||||
        }).bind(this);
 | 
			
		||||
        this._websocket.onclose = (function (e) {
 | 
			
		||||
            Log.Debug(">> WebSock.onclose");
 | 
			
		||||
            this._eventHandlers.close(e);
 | 
			
		||||
            Log.Debug("<< WebSock.onclose");
 | 
			
		||||
        }.bind(this);
 | 
			
		||||
        this._websocket.onerror = function (e) {
 | 
			
		||||
        }).bind(this);
 | 
			
		||||
        this._websocket.onerror = (function (e) {
 | 
			
		||||
            Log.Debug(">> WebSock.onerror: " + e);
 | 
			
		||||
            this._eventHandlers.error(e);
 | 
			
		||||
            Log.Debug("<< WebSock.onerror: " + e);
 | 
			
		||||
        }.bind(this);
 | 
			
		||||
        }).bind(this);
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    close: function () {
 | 
			
		||||
        if (this._websocket) {
 | 
			
		||||
            if (this._websocket.readyState === WebSocket.OPEN || this._websocket.readyState === WebSocket.CONNECTING) {
 | 
			
		||||
            if ((this._websocket.readyState === WebSocket.OPEN) ||
 | 
			
		||||
                    (this._websocket.readyState === WebSocket.CONNECTING)) {
 | 
			
		||||
                Log.Info("Closing WebSocket connection");
 | 
			
		||||
                this._websocket.close();
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            this._websocket.onmessage = function (e) {
 | 
			
		||||
                return;
 | 
			
		||||
            };
 | 
			
		||||
            this._websocket.onmessage = function (e) { return; };
 | 
			
		||||
        }
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -328,4 +313,4 @@ Websock.prototype = {
 | 
			
		|||
            Log.Debug("Ignoring empty message");
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
};
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										0
									
								
								static/js/novnc/vendor/browser-es-module-loader/.npmignore
									
										
									
									
										vendored
									
									
										Executable file
									
								
							
							
						
						
									
										0
									
								
								static/js/novnc/vendor/browser-es-module-loader/.npmignore
									
										
									
									
										vendored
									
									
										Executable file
									
								
							
							
								
								
									
										15
									
								
								static/js/novnc/vendor/browser-es-module-loader/README.md
									
										
									
									
										vendored
									
									
										Executable file
									
								
							
							
						
						
									
										15
									
								
								static/js/novnc/vendor/browser-es-module-loader/README.md
									
										
									
									
										vendored
									
									
										Executable file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,15 @@
 | 
			
		|||
Custom Browser ES Module Loader
 | 
			
		||||
===============================
 | 
			
		||||
 | 
			
		||||
This is a module loader using babel and the ES Module Loader polyfill.
 | 
			
		||||
It's based heavily on
 | 
			
		||||
https://github.com/ModuleLoader/browser-es-module-loader, but uses
 | 
			
		||||
WebWorkers to compile the modules in the background.
 | 
			
		||||
 | 
			
		||||
To generate, run `rollup -c` in this directory, and then run `browserify
 | 
			
		||||
src/babel-worker.js > dist/babel-worker.js`.
 | 
			
		||||
 | 
			
		||||
LICENSE
 | 
			
		||||
-------
 | 
			
		||||
 | 
			
		||||
MIT
 | 
			
		||||
							
								
								
									
										44024
									
								
								static/js/novnc/vendor/browser-es-module-loader/dist/babel-worker.js
									
										
									
									
										vendored
									
									
										Executable file
									
								
							
							
						
						
									
										44024
									
								
								static/js/novnc/vendor/browser-es-module-loader/dist/babel-worker.js
									
										
									
									
										vendored
									
									
										Executable file
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										1420
									
								
								static/js/novnc/vendor/browser-es-module-loader/dist/browser-es-module-loader.js
									
										
									
									
										vendored
									
									
										Executable file
									
								
							
							
						
						
									
										1420
									
								
								static/js/novnc/vendor/browser-es-module-loader/dist/browser-es-module-loader.js
									
										
									
									
										vendored
									
									
										Executable file
									
								
							
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							
							
								
								
									
										1
									
								
								static/js/novnc/vendor/browser-es-module-loader/dist/browser-es-module-loader.js.map
									
										
									
									
										vendored
									
									
										Executable file
									
								
							
							
						
						
									
										1
									
								
								static/js/novnc/vendor/browser-es-module-loader/dist/browser-es-module-loader.js.map
									
										
									
									
										vendored
									
									
										Executable file
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										16
									
								
								static/js/novnc/vendor/browser-es-module-loader/rollup.config.js
									
										
									
									
										vendored
									
									
										Executable file
									
								
							
							
						
						
									
										16
									
								
								static/js/novnc/vendor/browser-es-module-loader/rollup.config.js
									
										
									
									
										vendored
									
									
										Executable file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,16 @@
 | 
			
		|||
import nodeResolve from 'rollup-plugin-node-resolve';
 | 
			
		||||
 | 
			
		||||
export default {
 | 
			
		||||
  entry: 'src/browser-es-module-loader.js',
 | 
			
		||||
  dest: 'dist/browser-es-module-loader.js',
 | 
			
		||||
  format: 'umd',
 | 
			
		||||
  moduleName: 'BrowserESModuleLoader',
 | 
			
		||||
  sourceMap: true,
 | 
			
		||||
 | 
			
		||||
  plugins: [
 | 
			
		||||
    nodeResolve(),
 | 
			
		||||
  ],
 | 
			
		||||
 | 
			
		||||
  // skip rollup warnings (specifically the eval warning)
 | 
			
		||||
  onwarn: function() {}
 | 
			
		||||
};
 | 
			
		||||
							
								
								
									
										23
									
								
								static/js/novnc/vendor/browser-es-module-loader/src/babel-worker.js
									
										
									
									
										vendored
									
									
										Executable file
									
								
							
							
						
						
									
										23
									
								
								static/js/novnc/vendor/browser-es-module-loader/src/babel-worker.js
									
										
									
									
										vendored
									
									
										Executable file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,23 @@
 | 
			
		|||
/*import { transform as babelTransform } from 'babel-core';
 | 
			
		||||
import babelTransformDynamicImport from 'babel-plugin-syntax-dynamic-import';
 | 
			
		||||
import babelTransformES2015ModulesSystemJS from 'babel-plugin-transform-es2015-modules-systemjs';*/
 | 
			
		||||
 | 
			
		||||
// sadly, due to how rollup works, we can't use es6 imports here
 | 
			
		||||
var babelTransform = require('babel-core').transform;
 | 
			
		||||
var babelTransformDynamicImport = require('babel-plugin-syntax-dynamic-import');
 | 
			
		||||
var babelTransformES2015ModulesSystemJS = require('babel-plugin-transform-es2015-modules-systemjs');
 | 
			
		||||
 | 
			
		||||
self.onmessage = function (evt) {
 | 
			
		||||
    // transform source with Babel
 | 
			
		||||
    var output = babelTransform(evt.data.source, {
 | 
			
		||||
      compact: false,
 | 
			
		||||
      filename: evt.data.key + '!transpiled',
 | 
			
		||||
      sourceFileName: evt.data.key,
 | 
			
		||||
      moduleIds: false,
 | 
			
		||||
      sourceMaps: 'inline',
 | 
			
		||||
      babelrc: false,
 | 
			
		||||
      plugins: [babelTransformDynamicImport, babelTransformES2015ModulesSystemJS],
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    self.postMessage({key: evt.data.key, code: output.code, source: evt.data.source});
 | 
			
		||||
};
 | 
			
		||||
							
								
								
									
										273
									
								
								static/js/novnc/vendor/browser-es-module-loader/src/browser-es-module-loader.js
									
										
									
									
										vendored
									
									
										Executable file
									
								
							
							
						
						
									
										273
									
								
								static/js/novnc/vendor/browser-es-module-loader/src/browser-es-module-loader.js
									
										
									
									
										vendored
									
									
										Executable file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,273 @@
 | 
			
		|||
import RegisterLoader from 'es-module-loader/core/register-loader.js';
 | 
			
		||||
import { InternalModuleNamespace as ModuleNamespace } from 'es-module-loader/core/loader-polyfill.js';
 | 
			
		||||
 | 
			
		||||
import { baseURI, global, isBrowser } from 'es-module-loader/core/common.js';
 | 
			
		||||
import { resolveIfNotPlain } from 'es-module-loader/core/resolve.js';
 | 
			
		||||
 | 
			
		||||
var loader;
 | 
			
		||||
 | 
			
		||||
// <script type="module"> support
 | 
			
		||||
var anonSources = {};
 | 
			
		||||
if (typeof document != 'undefined' && document.getElementsByTagName) {
 | 
			
		||||
  var handleError = function(err) {
 | 
			
		||||
    // dispatch an error event so that we can display in errors in browsers
 | 
			
		||||
    // that don't yet support unhandledrejection
 | 
			
		||||
    if (window.onunhandledrejection === undefined) {
 | 
			
		||||
      try {
 | 
			
		||||
        var evt = new Event('error');
 | 
			
		||||
      } catch (_eventError) {
 | 
			
		||||
        var evt = document.createEvent('Event');
 | 
			
		||||
        evt.initEvent('error', true, true);
 | 
			
		||||
      }
 | 
			
		||||
      evt.message = err.message;
 | 
			
		||||
      if (err.fileName) {
 | 
			
		||||
        evt.filename = err.fileName;
 | 
			
		||||
        evt.lineno = err.lineNumber;
 | 
			
		||||
        evt.colno = err.columnNumber;
 | 
			
		||||
      } else if (err.sourceURL) {
 | 
			
		||||
        evt.filename = err.sourceURL;
 | 
			
		||||
        evt.lineno = err.line;
 | 
			
		||||
        evt.colno = err.column;
 | 
			
		||||
      }
 | 
			
		||||
      evt.error = err;
 | 
			
		||||
      window.dispatchEvent(evt);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // throw so it still shows up in the console
 | 
			
		||||
    throw err;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  var ready = function() {
 | 
			
		||||
    document.removeEventListener('DOMContentLoaded', ready, false );
 | 
			
		||||
 | 
			
		||||
    var anonCnt = 0;
 | 
			
		||||
 | 
			
		||||
    var scripts = document.getElementsByTagName('script');
 | 
			
		||||
    for (var i = 0; i < scripts.length; i++) {
 | 
			
		||||
      var script = scripts[i];
 | 
			
		||||
      if (script.type == 'module' && !script.loaded) {
 | 
			
		||||
        script.loaded = true;
 | 
			
		||||
        if (script.src) {
 | 
			
		||||
          loader.import(script.src).catch(handleError);
 | 
			
		||||
        }
 | 
			
		||||
        // anonymous modules supported via a custom naming scheme and registry
 | 
			
		||||
        else {
 | 
			
		||||
          var uri = './<anon' + ++anonCnt + '>.js';
 | 
			
		||||
          if (script.id !== ""){
 | 
			
		||||
            uri = "./" + script.id;
 | 
			
		||||
          }
 | 
			
		||||
 | 
			
		||||
          var anonName = resolveIfNotPlain(uri, baseURI);
 | 
			
		||||
          anonSources[anonName] = script.innerHTML;
 | 
			
		||||
          loader.import(anonName).catch(handleError);
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  // simple DOM ready
 | 
			
		||||
  if (document.readyState === 'complete')
 | 
			
		||||
    setTimeout(ready);
 | 
			
		||||
  else
 | 
			
		||||
    document.addEventListener('DOMContentLoaded', ready, false);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function BrowserESModuleLoader(baseKey) {
 | 
			
		||||
  if (baseKey)
 | 
			
		||||
    this.baseKey = resolveIfNotPlain(baseKey, baseURI) || resolveIfNotPlain('./' + baseKey, baseURI);
 | 
			
		||||
 | 
			
		||||
  RegisterLoader.call(this);
 | 
			
		||||
 | 
			
		||||
  var loader = this;
 | 
			
		||||
 | 
			
		||||
  // ensure System.register is available
 | 
			
		||||
  global.System = global.System || {};
 | 
			
		||||
  if (typeof global.System.register == 'function')
 | 
			
		||||
    var prevRegister = global.System.register;
 | 
			
		||||
  global.System.register = function() {
 | 
			
		||||
    loader.register.apply(loader, arguments);
 | 
			
		||||
    if (prevRegister)
 | 
			
		||||
      prevRegister.apply(this, arguments);
 | 
			
		||||
  };
 | 
			
		||||
}
 | 
			
		||||
BrowserESModuleLoader.prototype = Object.create(RegisterLoader.prototype);
 | 
			
		||||
 | 
			
		||||
// normalize is never given a relative name like "./x", that part is already handled
 | 
			
		||||
BrowserESModuleLoader.prototype[RegisterLoader.resolve] = function(key, parent) {
 | 
			
		||||
  var resolved = RegisterLoader.prototype[RegisterLoader.resolve].call(this, key, parent || this.baseKey) || key;
 | 
			
		||||
  if (!resolved)
 | 
			
		||||
    throw new RangeError('ES module loader does not resolve plain module names, resolving "' + key + '" to ' + parent);
 | 
			
		||||
 | 
			
		||||
  return resolved;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
function xhrFetch(url, resolve, reject) {
 | 
			
		||||
  var xhr = new XMLHttpRequest();
 | 
			
		||||
  var load = function(source) {
 | 
			
		||||
    resolve(xhr.responseText);
 | 
			
		||||
  }
 | 
			
		||||
  var error = function() {
 | 
			
		||||
    reject(new Error('XHR error' + (xhr.status ? ' (' + xhr.status + (xhr.statusText ? ' ' + xhr.statusText  : '') + ')' : '') + ' loading ' + url));
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  xhr.onreadystatechange = function () {
 | 
			
		||||
    if (xhr.readyState === 4) {
 | 
			
		||||
      // in Chrome on file:/// URLs, status is 0
 | 
			
		||||
      if (xhr.status == 0) {
 | 
			
		||||
        if (xhr.responseText) {
 | 
			
		||||
          load();
 | 
			
		||||
        }
 | 
			
		||||
        else {
 | 
			
		||||
          // when responseText is empty, wait for load or error event
 | 
			
		||||
          // to inform if it is a 404 or empty file
 | 
			
		||||
          xhr.addEventListener('error', error);
 | 
			
		||||
          xhr.addEventListener('load', load);
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
      else if (xhr.status === 200) {
 | 
			
		||||
        load();
 | 
			
		||||
      }
 | 
			
		||||
      else {
 | 
			
		||||
        error();
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  };
 | 
			
		||||
  xhr.open("GET", url, true);
 | 
			
		||||
  xhr.send(null);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
var WorkerPool = function (script, size) {
 | 
			
		||||
  var current = document.currentScript;
 | 
			
		||||
  // IE doesn't support currentScript
 | 
			
		||||
  if (!current) {
 | 
			
		||||
    // We should be the last loaded script
 | 
			
		||||
    var scripts = document.getElementsByTagName('script');
 | 
			
		||||
    current = scripts[scripts.length - 1];
 | 
			
		||||
  }
 | 
			
		||||
  script = current.src.substr(0, current.src.lastIndexOf("/")) + "/" + script;
 | 
			
		||||
  this._workers = new Array(size);
 | 
			
		||||
  this._ind = 0;
 | 
			
		||||
  this._size = size;
 | 
			
		||||
  this._jobs = 0;
 | 
			
		||||
  this.onmessage = undefined;
 | 
			
		||||
  this._stopTimeout = undefined;
 | 
			
		||||
  for (var i = 0; i < size; i++) {
 | 
			
		||||
    var wrkr = new Worker(script);
 | 
			
		||||
    wrkr._count = 0;
 | 
			
		||||
    wrkr._ind = i;
 | 
			
		||||
    wrkr.onmessage = this._onmessage.bind(this, wrkr);
 | 
			
		||||
    wrkr.onerror = this._onerror.bind(this);
 | 
			
		||||
    this._workers[i] = wrkr;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  this._checkJobs();
 | 
			
		||||
};
 | 
			
		||||
WorkerPool.prototype = {
 | 
			
		||||
  postMessage: function (msg) {
 | 
			
		||||
    if (this._stopTimeout !== undefined) {
 | 
			
		||||
      clearTimeout(this._stopTimeout);
 | 
			
		||||
      this._stopTimeout = undefined;
 | 
			
		||||
    }
 | 
			
		||||
    var wrkr = this._workers[this._ind % this._size];
 | 
			
		||||
    wrkr._count++;
 | 
			
		||||
    this._jobs++;
 | 
			
		||||
    wrkr.postMessage(msg);
 | 
			
		||||
    this._ind++;
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  _onmessage: function (wrkr, evt) {
 | 
			
		||||
    wrkr._count--;
 | 
			
		||||
    this._jobs--;
 | 
			
		||||
    this.onmessage(evt, wrkr);
 | 
			
		||||
    this._checkJobs();
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  _onerror: function(err) {
 | 
			
		||||
    try {
 | 
			
		||||
        var evt = new Event('error');
 | 
			
		||||
    } catch (_eventError) {
 | 
			
		||||
        var evt = document.createEvent('Event');
 | 
			
		||||
        evt.initEvent('error', true, true);
 | 
			
		||||
    }
 | 
			
		||||
    evt.message = err.message;
 | 
			
		||||
    evt.filename = err.filename;
 | 
			
		||||
    evt.lineno = err.lineno;
 | 
			
		||||
    evt.colno = err.colno;
 | 
			
		||||
    evt.error = err.error;
 | 
			
		||||
    window.dispatchEvent(evt);
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  _checkJobs: function () {
 | 
			
		||||
    if (this._jobs === 0 && this._stopTimeout === undefined) {
 | 
			
		||||
      // wait for 2s of inactivity before stopping (that should be enough for local loading)
 | 
			
		||||
      this._stopTimeout = setTimeout(this._stop.bind(this), 2000);
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  _stop: function () {
 | 
			
		||||
    this._workers.forEach(function(wrkr) {
 | 
			
		||||
      wrkr.terminate();
 | 
			
		||||
    });
 | 
			
		||||
  }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
var promiseMap = new Map();
 | 
			
		||||
var babelWorker = new WorkerPool('babel-worker.js', 3);
 | 
			
		||||
babelWorker.onmessage = function (evt) {
 | 
			
		||||
    var promFuncs = promiseMap.get(evt.data.key);
 | 
			
		||||
    promFuncs.resolve(evt.data);
 | 
			
		||||
    promiseMap.delete(evt.data.key);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// instantiate just needs to run System.register
 | 
			
		||||
// so we fetch the source, convert into the Babel System module format, then evaluate it
 | 
			
		||||
BrowserESModuleLoader.prototype[RegisterLoader.instantiate] = function(key, processAnonRegister) {
 | 
			
		||||
  var loader = this;
 | 
			
		||||
 | 
			
		||||
  // load as ES with Babel converting into System.register
 | 
			
		||||
  return new Promise(function(resolve, reject) {
 | 
			
		||||
    // anonymous module
 | 
			
		||||
    if (anonSources[key]) {
 | 
			
		||||
      resolve(anonSources[key])
 | 
			
		||||
      anonSources[key] = undefined;
 | 
			
		||||
    }
 | 
			
		||||
    // otherwise we fetch
 | 
			
		||||
    else {
 | 
			
		||||
      xhrFetch(key, resolve, reject);
 | 
			
		||||
    }
 | 
			
		||||
  })
 | 
			
		||||
  .then(function(source) {
 | 
			
		||||
    // check our cache first
 | 
			
		||||
    var cacheEntry = localStorage.getItem(key);
 | 
			
		||||
    if (cacheEntry) {
 | 
			
		||||
      cacheEntry = JSON.parse(cacheEntry);
 | 
			
		||||
      // TODO: store a hash instead
 | 
			
		||||
      if (cacheEntry.source === source) {
 | 
			
		||||
        return Promise.resolve({key: key, code: cacheEntry.code, source: cacheEntry.source});
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
    return new Promise(function (resolve, reject) {
 | 
			
		||||
      promiseMap.set(key, {resolve: resolve, reject: reject});
 | 
			
		||||
      babelWorker.postMessage({key: key, source: source});
 | 
			
		||||
    });
 | 
			
		||||
  }).then(function (data) {
 | 
			
		||||
    // evaluate without require, exports and module variables
 | 
			
		||||
    // we leave module in for now to allow module.require access
 | 
			
		||||
    try {
 | 
			
		||||
      var cacheEntry = JSON.stringify({source: data.source, code: data.code});
 | 
			
		||||
      localStorage.setItem(key, cacheEntry);
 | 
			
		||||
    } catch (e) {
 | 
			
		||||
      if (window.console) {
 | 
			
		||||
        window.console.warn('Unable to cache transpiled version of ' + key + ': ' + e);
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
    (0, eval)(data.code + '\n//# sourceURL=' + data.key + '!transpiled');
 | 
			
		||||
    processAnonRegister();
 | 
			
		||||
  });
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// create a default loader instance in the browser
 | 
			
		||||
if (isBrowser)
 | 
			
		||||
  loader = new BrowserESModuleLoader();
 | 
			
		||||
 | 
			
		||||
export default BrowserESModuleLoader;
 | 
			
		||||
							
								
								
									
										21
									
								
								static/js/novnc/vendor/pako/LICENSE
									
										
									
									
										vendored
									
									
										Executable file
									
								
							
							
						
						
									
										21
									
								
								static/js/novnc/vendor/pako/LICENSE
									
										
									
									
										vendored
									
									
										Executable file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,21 @@
 | 
			
		|||
(The MIT License)
 | 
			
		||||
 | 
			
		||||
Copyright (C) 2014-2016 by Vitaly Puzrin
 | 
			
		||||
 | 
			
		||||
Permission is hereby granted, free of charge, to any person obtaining a copy
 | 
			
		||||
of this software and associated documentation files (the "Software"), to deal
 | 
			
		||||
in the Software without restriction, including without limitation the rights
 | 
			
		||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 | 
			
		||||
copies of the Software, and to permit persons to whom the Software is
 | 
			
		||||
furnished to do so, subject to the following conditions:
 | 
			
		||||
 | 
			
		||||
The above copyright notice and this permission notice shall be included in
 | 
			
		||||
all copies or substantial portions of the Software.
 | 
			
		||||
 | 
			
		||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 | 
			
		||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 | 
			
		||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 | 
			
		||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 | 
			
		||||
THE SOFTWARE.
 | 
			
		||||
							
								
								
									
										6
									
								
								static/js/novnc/vendor/pako/README.md
									
										
									
									
										vendored
									
									
										Executable file
									
								
							
							
						
						
									
										6
									
								
								static/js/novnc/vendor/pako/README.md
									
										
									
									
										vendored
									
									
										Executable file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,6 @@
 | 
			
		|||
This is an ES6-modules-compatible version of
 | 
			
		||||
https://github.com/nodeca/pako, based on pako version 1.0.3.
 | 
			
		||||
 | 
			
		||||
It's more-or-less a direct translation of the original, with unused parts
 | 
			
		||||
removed, and the dynamic support for non-typed arrays removed (since ES6
 | 
			
		||||
modules don't work well with dynamic exports).
 | 
			
		||||
							
								
								
									
										29
									
								
								static/js/novnc/vendor/pako/lib/utils/common.js
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										29
									
								
								static/js/novnc/vendor/pako/lib/utils/common.js
									
										
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -1,24 +1,13 @@
 | 
			
		|||
"use strict";
 | 
			
		||||
 | 
			
		||||
Object.defineProperty(exports, "__esModule", {
 | 
			
		||||
  value: true
 | 
			
		||||
});
 | 
			
		||||
exports.shrinkBuf = shrinkBuf;
 | 
			
		||||
exports.arraySet = arraySet;
 | 
			
		||||
exports.flattenChunks = flattenChunks;
 | 
			
		||||
// reduce buffer size, avoiding mem copy
 | 
			
		||||
function shrinkBuf(buf, size) {
 | 
			
		||||
  if (buf.length === size) {
 | 
			
		||||
    return buf;
 | 
			
		||||
  }
 | 
			
		||||
  if (buf.subarray) {
 | 
			
		||||
    return buf.subarray(0, size);
 | 
			
		||||
  }
 | 
			
		||||
export function shrinkBuf (buf, size) {
 | 
			
		||||
  if (buf.length === size) { return buf; }
 | 
			
		||||
  if (buf.subarray) { return buf.subarray(0, size); }
 | 
			
		||||
  buf.length = size;
 | 
			
		||||
  return buf;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
function arraySet(dest, src, src_offs, len, dest_offs) {
 | 
			
		||||
 | 
			
		||||
export function arraySet (dest, src, src_offs, len, dest_offs) {
 | 
			
		||||
  if (src.subarray && dest.subarray) {
 | 
			
		||||
    dest.set(src.subarray(src_offs, src_offs + len), dest_offs);
 | 
			
		||||
    return;
 | 
			
		||||
| 
						 | 
				
			
			@ -30,7 +19,7 @@ function arraySet(dest, src, src_offs, len, dest_offs) {
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
// Join array of chunks to single array.
 | 
			
		||||
function flattenChunks(chunks) {
 | 
			
		||||
export function flattenChunks (chunks) {
 | 
			
		||||
  var i, l, len, pos, chunk, result;
 | 
			
		||||
 | 
			
		||||
  // calculate data length
 | 
			
		||||
| 
						 | 
				
			
			@ -51,6 +40,6 @@ function flattenChunks(chunks) {
 | 
			
		|||
  return result;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
var Buf8 = exports.Buf8 = Uint8Array;
 | 
			
		||||
var Buf16 = exports.Buf16 = Uint16Array;
 | 
			
		||||
var Buf32 = exports.Buf32 = Int32Array;
 | 
			
		||||
export var Buf8  = Uint8Array;
 | 
			
		||||
export var Buf16 = Uint16Array;
 | 
			
		||||
export var Buf32 = Int32Array;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										20
									
								
								static/js/novnc/vendor/pako/lib/zlib/adler32.js
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										20
									
								
								static/js/novnc/vendor/pako/lib/zlib/adler32.js
									
										
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -1,16 +1,10 @@
 | 
			
		|||
"use strict";
 | 
			
		||||
 | 
			
		||||
Object.defineProperty(exports, "__esModule", {
 | 
			
		||||
  value: true
 | 
			
		||||
});
 | 
			
		||||
exports.default = adler32;
 | 
			
		||||
// Note: adler32 takes 12% for level 0 and 2% for level 6.
 | 
			
		||||
// It doesn't worth to make additional optimizationa as in original.
 | 
			
		||||
// Small size is preferable.
 | 
			
		||||
 | 
			
		||||
function adler32(adler, buf, len, pos) {
 | 
			
		||||
  var s1 = adler & 0xffff | 0,
 | 
			
		||||
      s2 = adler >>> 16 & 0xffff | 0,
 | 
			
		||||
export default function adler32(adler, buf, len, pos) {
 | 
			
		||||
  var s1 = (adler & 0xffff) |0,
 | 
			
		||||
      s2 = ((adler >>> 16) & 0xffff) |0,
 | 
			
		||||
      n = 0;
 | 
			
		||||
 | 
			
		||||
  while (len !== 0) {
 | 
			
		||||
| 
						 | 
				
			
			@ -21,13 +15,13 @@ function adler32(adler, buf, len, pos) {
 | 
			
		|||
    len -= n;
 | 
			
		||||
 | 
			
		||||
    do {
 | 
			
		||||
      s1 = s1 + buf[pos++] | 0;
 | 
			
		||||
      s2 = s2 + s1 | 0;
 | 
			
		||||
      s1 = (s1 + buf[pos++]) |0;
 | 
			
		||||
      s2 = (s2 + s1) |0;
 | 
			
		||||
    } while (--n);
 | 
			
		||||
 | 
			
		||||
    s1 %= 65521;
 | 
			
		||||
    s2 %= 65521;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  return s1 | s2 << 16 | 0;
 | 
			
		||||
}
 | 
			
		||||
  return (s1 | (s2 << 16)) |0;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,51 +1,47 @@
 | 
			
		|||
"use strict";
 | 
			
		||||
 | 
			
		||||
Object.defineProperty(exports, "__esModule", {
 | 
			
		||||
  value: true
 | 
			
		||||
});
 | 
			
		||||
exports.default = {
 | 
			
		||||
export default {
 | 
			
		||||
 | 
			
		||||
  /* Allowed flush values; see deflate() and inflate() below for details */
 | 
			
		||||
  Z_NO_FLUSH: 0,
 | 
			
		||||
  Z_PARTIAL_FLUSH: 1,
 | 
			
		||||
  Z_SYNC_FLUSH: 2,
 | 
			
		||||
  Z_FULL_FLUSH: 3,
 | 
			
		||||
  Z_FINISH: 4,
 | 
			
		||||
  Z_BLOCK: 5,
 | 
			
		||||
  Z_TREES: 6,
 | 
			
		||||
  Z_NO_FLUSH:         0,
 | 
			
		||||
  Z_PARTIAL_FLUSH:    1,
 | 
			
		||||
  Z_SYNC_FLUSH:       2,
 | 
			
		||||
  Z_FULL_FLUSH:       3,
 | 
			
		||||
  Z_FINISH:           4,
 | 
			
		||||
  Z_BLOCK:            5,
 | 
			
		||||
  Z_TREES:            6,
 | 
			
		||||
 | 
			
		||||
  /* Return codes for the compression/decompression functions. Negative values
 | 
			
		||||
  * are errors, positive values are used for special but normal events.
 | 
			
		||||
  */
 | 
			
		||||
  Z_OK: 0,
 | 
			
		||||
  Z_STREAM_END: 1,
 | 
			
		||||
  Z_NEED_DICT: 2,
 | 
			
		||||
  Z_ERRNO: -1,
 | 
			
		||||
  Z_STREAM_ERROR: -2,
 | 
			
		||||
  Z_DATA_ERROR: -3,
 | 
			
		||||
  Z_OK:               0,
 | 
			
		||||
  Z_STREAM_END:       1,
 | 
			
		||||
  Z_NEED_DICT:        2,
 | 
			
		||||
  Z_ERRNO:           -1,
 | 
			
		||||
  Z_STREAM_ERROR:    -2,
 | 
			
		||||
  Z_DATA_ERROR:      -3,
 | 
			
		||||
  //Z_MEM_ERROR:     -4,
 | 
			
		||||
  Z_BUF_ERROR: -5,
 | 
			
		||||
  Z_BUF_ERROR:       -5,
 | 
			
		||||
  //Z_VERSION_ERROR: -6,
 | 
			
		||||
 | 
			
		||||
  /* compression levels */
 | 
			
		||||
  Z_NO_COMPRESSION: 0,
 | 
			
		||||
  Z_BEST_SPEED: 1,
 | 
			
		||||
  Z_BEST_COMPRESSION: 9,
 | 
			
		||||
  Z_DEFAULT_COMPRESSION: -1,
 | 
			
		||||
  Z_NO_COMPRESSION:         0,
 | 
			
		||||
  Z_BEST_SPEED:             1,
 | 
			
		||||
  Z_BEST_COMPRESSION:       9,
 | 
			
		||||
  Z_DEFAULT_COMPRESSION:   -1,
 | 
			
		||||
 | 
			
		||||
  Z_FILTERED: 1,
 | 
			
		||||
  Z_HUFFMAN_ONLY: 2,
 | 
			
		||||
  Z_RLE: 3,
 | 
			
		||||
  Z_FIXED: 4,
 | 
			
		||||
  Z_DEFAULT_STRATEGY: 0,
 | 
			
		||||
 | 
			
		||||
  Z_FILTERED:               1,
 | 
			
		||||
  Z_HUFFMAN_ONLY:           2,
 | 
			
		||||
  Z_RLE:                    3,
 | 
			
		||||
  Z_FIXED:                  4,
 | 
			
		||||
  Z_DEFAULT_STRATEGY:       0,
 | 
			
		||||
 | 
			
		||||
  /* Possible values of the data_type field (though see inflate()) */
 | 
			
		||||
  Z_BINARY: 0,
 | 
			
		||||
  Z_TEXT: 1,
 | 
			
		||||
  Z_BINARY:                 0,
 | 
			
		||||
  Z_TEXT:                   1,
 | 
			
		||||
  //Z_ASCII:                1, // = Z_TEXT (deprecated)
 | 
			
		||||
  Z_UNKNOWN: 2,
 | 
			
		||||
  Z_UNKNOWN:                2,
 | 
			
		||||
 | 
			
		||||
  /* The deflate compression method */
 | 
			
		||||
  Z_DEFLATED: 8
 | 
			
		||||
  Z_DEFLATED:               8
 | 
			
		||||
  //Z_NULL:                 null // Use -1 or null inline, depending on var type
 | 
			
		||||
};
 | 
			
		||||
};
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										20
									
								
								static/js/novnc/vendor/pako/lib/zlib/crc32.js
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										20
									
								
								static/js/novnc/vendor/pako/lib/zlib/crc32.js
									
										
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -1,23 +1,16 @@
 | 
			
		|||
"use strict";
 | 
			
		||||
 | 
			
		||||
Object.defineProperty(exports, "__esModule", {
 | 
			
		||||
  value: true
 | 
			
		||||
});
 | 
			
		||||
exports.default = makeTable;
 | 
			
		||||
// Note: we can't get significant speed boost here.
 | 
			
		||||
// So write code to minimize size - no pregenerated tables
 | 
			
		||||
// and array tools dependencies.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
// Use ordinary array, since untyped makes no boost here
 | 
			
		||||
function makeTable() {
 | 
			
		||||
  var c,
 | 
			
		||||
      table = [];
 | 
			
		||||
export default function makeTable() {
 | 
			
		||||
  var c, table = [];
 | 
			
		||||
 | 
			
		||||
  for (var n = 0; n < 256; n++) {
 | 
			
		||||
    c = n;
 | 
			
		||||
    for (var k = 0; k < 8; k++) {
 | 
			
		||||
      c = c & 1 ? 0xEDB88320 ^ c >>> 1 : c >>> 1;
 | 
			
		||||
      c = ((c & 1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1));
 | 
			
		||||
    }
 | 
			
		||||
    table[n] = c;
 | 
			
		||||
  }
 | 
			
		||||
| 
						 | 
				
			
			@ -28,6 +21,7 @@ function makeTable() {
 | 
			
		|||
// Create table on load. Just 255 signed longs. Not a problem.
 | 
			
		||||
var crcTable = makeTable();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
function crc32(crc, buf, len, pos) {
 | 
			
		||||
  var t = crcTable,
 | 
			
		||||
      end = pos + len;
 | 
			
		||||
| 
						 | 
				
			
			@ -35,8 +29,8 @@ function crc32(crc, buf, len, pos) {
 | 
			
		|||
  crc ^= -1;
 | 
			
		||||
 | 
			
		||||
  for (var i = pos; i < end; i++) {
 | 
			
		||||
    crc = crc >>> 8 ^ t[(crc ^ buf[i]) & 0xFF];
 | 
			
		||||
    crc = (crc >>> 8) ^ t[(crc ^ buf[i]) & 0xFF];
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  return crc ^ -1; // >>> 0;
 | 
			
		||||
}
 | 
			
		||||
  return (crc ^ (-1)); // >>> 0;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										872
									
								
								static/js/novnc/vendor/pako/lib/zlib/deflate.js
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										872
									
								
								static/js/novnc/vendor/pako/lib/zlib/deflate.js
									
										
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							
							
								
								
									
										32
									
								
								static/js/novnc/vendor/pako/lib/zlib/gzheader.js
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										32
									
								
								static/js/novnc/vendor/pako/lib/zlib/gzheader.js
									
										
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -1,23 +1,17 @@
 | 
			
		|||
'use strict';
 | 
			
		||||
 | 
			
		||||
Object.defineProperty(exports, "__esModule", {
 | 
			
		||||
  value: true
 | 
			
		||||
});
 | 
			
		||||
exports.default = GZheader;
 | 
			
		||||
function GZheader() {
 | 
			
		||||
export default function GZheader() {
 | 
			
		||||
  /* true if compressed data believed to be text */
 | 
			
		||||
  this.text = 0;
 | 
			
		||||
  this.text       = 0;
 | 
			
		||||
  /* modification time */
 | 
			
		||||
  this.time = 0;
 | 
			
		||||
  this.time       = 0;
 | 
			
		||||
  /* extra flags (not used when writing a gzip file) */
 | 
			
		||||
  this.xflags = 0;
 | 
			
		||||
  this.xflags     = 0;
 | 
			
		||||
  /* operating system */
 | 
			
		||||
  this.os = 0;
 | 
			
		||||
  this.os         = 0;
 | 
			
		||||
  /* pointer to extra field or Z_NULL if none */
 | 
			
		||||
  this.extra = null;
 | 
			
		||||
  this.extra      = null;
 | 
			
		||||
  /* extra field length (valid if extra != Z_NULL) */
 | 
			
		||||
  this.extra_len = 0; // Actually, we don't need it in JS,
 | 
			
		||||
  // but leave for few code modifications
 | 
			
		||||
  this.extra_len  = 0; // Actually, we don't need it in JS,
 | 
			
		||||
                       // but leave for few code modifications
 | 
			
		||||
 | 
			
		||||
  //
 | 
			
		||||
  // Setup limits is not necessary because in js we should not preallocate memory
 | 
			
		||||
| 
						 | 
				
			
			@ -27,15 +21,15 @@ function GZheader() {
 | 
			
		|||
  /* space at extra (only when reading header) */
 | 
			
		||||
  // this.extra_max  = 0;
 | 
			
		||||
  /* pointer to zero-terminated file name or Z_NULL */
 | 
			
		||||
  this.name = '';
 | 
			
		||||
  this.name       = '';
 | 
			
		||||
  /* space at name (only when reading header) */
 | 
			
		||||
  // this.name_max   = 0;
 | 
			
		||||
  /* pointer to zero-terminated comment or Z_NULL */
 | 
			
		||||
  this.comment = '';
 | 
			
		||||
  this.comment    = '';
 | 
			
		||||
  /* space at comment (only when reading header) */
 | 
			
		||||
  // this.comm_max   = 0;
 | 
			
		||||
  /* true if there was or will be a header crc */
 | 
			
		||||
  this.hcrc = 0;
 | 
			
		||||
  this.hcrc       = 0;
 | 
			
		||||
  /* true when done reading gzip header (not used when writing a gzip file) */
 | 
			
		||||
  this.done = false;
 | 
			
		||||
}
 | 
			
		||||
  this.done       = false;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										227
									
								
								static/js/novnc/vendor/pako/lib/zlib/inffast.js
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										227
									
								
								static/js/novnc/vendor/pako/lib/zlib/inffast.js
									
										
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -1,12 +1,6 @@
 | 
			
		|||
'use strict';
 | 
			
		||||
 | 
			
		||||
Object.defineProperty(exports, "__esModule", {
 | 
			
		||||
  value: true
 | 
			
		||||
});
 | 
			
		||||
exports.default = inflate_fast;
 | 
			
		||||
// See state defs from inflate.js
 | 
			
		||||
var BAD = 30; /* got a data error -- remain here until reset */
 | 
			
		||||
var TYPE = 12; /* i: waiting for type bits, including last-flag bit */
 | 
			
		||||
var BAD = 30;       /* got a data error -- remain here until reset */
 | 
			
		||||
var TYPE = 12;      /* i: waiting for type bits, including last-flag bit */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
   Decode literal, length, and distance codes and write out the resulting
 | 
			
		||||
| 
						 | 
				
			
			@ -43,35 +37,36 @@ var TYPE = 12; /* i: waiting for type bits, including last-flag bit */
 | 
			
		|||
      requires strm.avail_out >= 258 for each loop to avoid checking for
 | 
			
		||||
      output space.
 | 
			
		||||
 */
 | 
			
		||||
function inflate_fast(strm, start) {
 | 
			
		||||
export default function inflate_fast(strm, start) {
 | 
			
		||||
  var state;
 | 
			
		||||
  var _in; /* local strm.input */
 | 
			
		||||
  var last; /* have enough input while in < last */
 | 
			
		||||
  var _out; /* local strm.output */
 | 
			
		||||
  var beg; /* inflate()'s initial strm.output */
 | 
			
		||||
  var end; /* while out < end, enough space available */
 | 
			
		||||
  //#ifdef INFLATE_STRICT
 | 
			
		||||
  var dmax; /* maximum distance from zlib header */
 | 
			
		||||
  //#endif
 | 
			
		||||
  var wsize; /* window size or zero if not using window */
 | 
			
		||||
  var whave; /* valid bytes in the window */
 | 
			
		||||
  var wnext; /* window write index */
 | 
			
		||||
  var _in;                    /* local strm.input */
 | 
			
		||||
  var last;                   /* have enough input while in < last */
 | 
			
		||||
  var _out;                   /* local strm.output */
 | 
			
		||||
  var beg;                    /* inflate()'s initial strm.output */
 | 
			
		||||
  var end;                    /* while out < end, enough space available */
 | 
			
		||||
//#ifdef INFLATE_STRICT
 | 
			
		||||
  var dmax;                   /* maximum distance from zlib header */
 | 
			
		||||
//#endif
 | 
			
		||||
  var wsize;                  /* window size or zero if not using window */
 | 
			
		||||
  var whave;                  /* valid bytes in the window */
 | 
			
		||||
  var wnext;                  /* window write index */
 | 
			
		||||
  // Use `s_window` instead `window`, avoid conflict with instrumentation tools
 | 
			
		||||
  var s_window; /* allocated sliding window, if wsize != 0 */
 | 
			
		||||
  var hold; /* local strm.hold */
 | 
			
		||||
  var bits; /* local strm.bits */
 | 
			
		||||
  var lcode; /* local strm.lencode */
 | 
			
		||||
  var dcode; /* local strm.distcode */
 | 
			
		||||
  var lmask; /* mask for first level of length codes */
 | 
			
		||||
  var dmask; /* mask for first level of distance codes */
 | 
			
		||||
  var here; /* retrieved table entry */
 | 
			
		||||
  var op; /* code bits, operation, extra bits, or */
 | 
			
		||||
  /*  window position, window bytes to copy */
 | 
			
		||||
  var len; /* match length, unused bytes */
 | 
			
		||||
  var dist; /* match distance */
 | 
			
		||||
  var from; /* where to copy match from */
 | 
			
		||||
  var s_window;               /* allocated sliding window, if wsize != 0 */
 | 
			
		||||
  var hold;                   /* local strm.hold */
 | 
			
		||||
  var bits;                   /* local strm.bits */
 | 
			
		||||
  var lcode;                  /* local strm.lencode */
 | 
			
		||||
  var dcode;                  /* local strm.distcode */
 | 
			
		||||
  var lmask;                  /* mask for first level of length codes */
 | 
			
		||||
  var dmask;                  /* mask for first level of distance codes */
 | 
			
		||||
  var here;                   /* retrieved table entry */
 | 
			
		||||
  var op;                     /* code bits, operation, extra bits, or */
 | 
			
		||||
                              /*  window position, window bytes to copy */
 | 
			
		||||
  var len;                    /* match length, unused bytes */
 | 
			
		||||
  var dist;                   /* match distance */
 | 
			
		||||
  var from;                   /* where to copy match from */
 | 
			
		||||
  var from_source;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  var input, output; // JS specific, because we have no pointers
 | 
			
		||||
 | 
			
		||||
  /* copy state to local variables */
 | 
			
		||||
| 
						 | 
				
			
			@ -84,9 +79,9 @@ function inflate_fast(strm, start) {
 | 
			
		|||
  output = strm.output;
 | 
			
		||||
  beg = _out - (start - strm.avail_out);
 | 
			
		||||
  end = _out + (strm.avail_out - 257);
 | 
			
		||||
  //#ifdef INFLATE_STRICT
 | 
			
		||||
//#ifdef INFLATE_STRICT
 | 
			
		||||
  dmax = state.dmax;
 | 
			
		||||
  //#endif
 | 
			
		||||
//#endif
 | 
			
		||||
  wsize = state.wsize;
 | 
			
		||||
  whave = state.whave;
 | 
			
		||||
  wnext = state.wnext;
 | 
			
		||||
| 
						 | 
				
			
			@ -98,10 +93,12 @@ function inflate_fast(strm, start) {
 | 
			
		|||
  lmask = (1 << state.lenbits) - 1;
 | 
			
		||||
  dmask = (1 << state.distbits) - 1;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  /* decode literals and length/distances until end-of-block or not enough
 | 
			
		||||
     input data or output space */
 | 
			
		||||
 | 
			
		||||
  top: do {
 | 
			
		||||
  top:
 | 
			
		||||
  do {
 | 
			
		||||
    if (bits < 15) {
 | 
			
		||||
      hold += input[_in++] << bits;
 | 
			
		||||
      bits += 8;
 | 
			
		||||
| 
						 | 
				
			
			@ -111,28 +108,27 @@ function inflate_fast(strm, start) {
 | 
			
		|||
 | 
			
		||||
    here = lcode[hold & lmask];
 | 
			
		||||
 | 
			
		||||
    dolen: for (;;) {
 | 
			
		||||
      // Goto emulation
 | 
			
		||||
      op = here >>> 24 /*here.bits*/;
 | 
			
		||||
    dolen:
 | 
			
		||||
    for (;;) { // Goto emulation
 | 
			
		||||
      op = here >>> 24/*here.bits*/;
 | 
			
		||||
      hold >>>= op;
 | 
			
		||||
      bits -= op;
 | 
			
		||||
      op = here >>> 16 & 0xff /*here.op*/;
 | 
			
		||||
      if (op === 0) {
 | 
			
		||||
        /* literal */
 | 
			
		||||
      op = (here >>> 16) & 0xff/*here.op*/;
 | 
			
		||||
      if (op === 0) {                          /* literal */
 | 
			
		||||
        //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?
 | 
			
		||||
        //        "inflate:         literal '%c'\n" :
 | 
			
		||||
        //        "inflate:         literal 0x%02x\n", here.val));
 | 
			
		||||
        output[_out++] = here & 0xffff /*here.val*/;
 | 
			
		||||
      } else if (op & 16) {
 | 
			
		||||
        /* length base */
 | 
			
		||||
        len = here & 0xffff /*here.val*/;
 | 
			
		||||
        op &= 15; /* number of extra bits */
 | 
			
		||||
        output[_out++] = here & 0xffff/*here.val*/;
 | 
			
		||||
      }
 | 
			
		||||
      else if (op & 16) {                     /* length base */
 | 
			
		||||
        len = here & 0xffff/*here.val*/;
 | 
			
		||||
        op &= 15;                           /* number of extra bits */
 | 
			
		||||
        if (op) {
 | 
			
		||||
          if (bits < op) {
 | 
			
		||||
            hold += input[_in++] << bits;
 | 
			
		||||
            bits += 8;
 | 
			
		||||
          }
 | 
			
		||||
          len += hold & (1 << op) - 1;
 | 
			
		||||
          len += hold & ((1 << op) - 1);
 | 
			
		||||
          hold >>>= op;
 | 
			
		||||
          bits -= op;
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			@ -145,17 +141,16 @@ function inflate_fast(strm, start) {
 | 
			
		|||
        }
 | 
			
		||||
        here = dcode[hold & dmask];
 | 
			
		||||
 | 
			
		||||
        dodist: for (;;) {
 | 
			
		||||
          // goto emulation
 | 
			
		||||
          op = here >>> 24 /*here.bits*/;
 | 
			
		||||
        dodist:
 | 
			
		||||
        for (;;) { // goto emulation
 | 
			
		||||
          op = here >>> 24/*here.bits*/;
 | 
			
		||||
          hold >>>= op;
 | 
			
		||||
          bits -= op;
 | 
			
		||||
          op = here >>> 16 & 0xff /*here.op*/;
 | 
			
		||||
          op = (here >>> 16) & 0xff/*here.op*/;
 | 
			
		||||
 | 
			
		||||
          if (op & 16) {
 | 
			
		||||
            /* distance base */
 | 
			
		||||
            dist = here & 0xffff /*here.val*/;
 | 
			
		||||
            op &= 15; /* number of extra bits */
 | 
			
		||||
          if (op & 16) {                      /* distance base */
 | 
			
		||||
            dist = here & 0xffff/*here.val*/;
 | 
			
		||||
            op &= 15;                       /* number of extra bits */
 | 
			
		||||
            if (bits < op) {
 | 
			
		||||
              hold += input[_in++] << bits;
 | 
			
		||||
              bits += 8;
 | 
			
		||||
| 
						 | 
				
			
			@ -164,21 +159,20 @@ function inflate_fast(strm, start) {
 | 
			
		|||
                bits += 8;
 | 
			
		||||
              }
 | 
			
		||||
            }
 | 
			
		||||
            dist += hold & (1 << op) - 1;
 | 
			
		||||
            //#ifdef INFLATE_STRICT
 | 
			
		||||
            dist += hold & ((1 << op) - 1);
 | 
			
		||||
//#ifdef INFLATE_STRICT
 | 
			
		||||
            if (dist > dmax) {
 | 
			
		||||
              strm.msg = 'invalid distance too far back';
 | 
			
		||||
              state.mode = BAD;
 | 
			
		||||
              break top;
 | 
			
		||||
            }
 | 
			
		||||
            //#endif
 | 
			
		||||
//#endif
 | 
			
		||||
            hold >>>= op;
 | 
			
		||||
            bits -= op;
 | 
			
		||||
            //Tracevv((stderr, "inflate:         distance %u\n", dist));
 | 
			
		||||
            op = _out - beg; /* max distance in output */
 | 
			
		||||
            if (dist > op) {
 | 
			
		||||
              /* see if copy from window */
 | 
			
		||||
              op = dist - op; /* distance back in window */
 | 
			
		||||
            op = _out - beg;                /* max distance in output */
 | 
			
		||||
            if (dist > op) {                /* see if copy from window */
 | 
			
		||||
              op = dist - op;               /* distance back in window */
 | 
			
		||||
              if (op > whave) {
 | 
			
		||||
                if (state.sane) {
 | 
			
		||||
                  strm.msg = 'invalid distance too far back';
 | 
			
		||||
| 
						 | 
				
			
			@ -186,74 +180,69 @@ function inflate_fast(strm, start) {
 | 
			
		|||
                  break top;
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                // (!) This block is disabled in zlib defailts,
 | 
			
		||||
                // don't enable it for binary compatibility
 | 
			
		||||
                //#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR
 | 
			
		||||
                //                if (len <= op - whave) {
 | 
			
		||||
                //                  do {
 | 
			
		||||
                //                    output[_out++] = 0;
 | 
			
		||||
                //                  } while (--len);
 | 
			
		||||
                //                  continue top;
 | 
			
		||||
                //                }
 | 
			
		||||
                //                len -= op - whave;
 | 
			
		||||
                //                do {
 | 
			
		||||
                //                  output[_out++] = 0;
 | 
			
		||||
                //                } while (--op > whave);
 | 
			
		||||
                //                if (op === 0) {
 | 
			
		||||
                //                  from = _out - dist;
 | 
			
		||||
                //                  do {
 | 
			
		||||
                //                    output[_out++] = output[from++];
 | 
			
		||||
                //                  } while (--len);
 | 
			
		||||
                //                  continue top;
 | 
			
		||||
                //                }
 | 
			
		||||
                //#endif
 | 
			
		||||
// (!) This block is disabled in zlib defailts,
 | 
			
		||||
// don't enable it for binary compatibility
 | 
			
		||||
//#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR
 | 
			
		||||
//                if (len <= op - whave) {
 | 
			
		||||
//                  do {
 | 
			
		||||
//                    output[_out++] = 0;
 | 
			
		||||
//                  } while (--len);
 | 
			
		||||
//                  continue top;
 | 
			
		||||
//                }
 | 
			
		||||
//                len -= op - whave;
 | 
			
		||||
//                do {
 | 
			
		||||
//                  output[_out++] = 0;
 | 
			
		||||
//                } while (--op > whave);
 | 
			
		||||
//                if (op === 0) {
 | 
			
		||||
//                  from = _out - dist;
 | 
			
		||||
//                  do {
 | 
			
		||||
//                    output[_out++] = output[from++];
 | 
			
		||||
//                  } while (--len);
 | 
			
		||||
//                  continue top;
 | 
			
		||||
//                }
 | 
			
		||||
//#endif
 | 
			
		||||
              }
 | 
			
		||||
              from = 0; // window index
 | 
			
		||||
              from_source = s_window;
 | 
			
		||||
              if (wnext === 0) {
 | 
			
		||||
                /* very common case */
 | 
			
		||||
              if (wnext === 0) {           /* very common case */
 | 
			
		||||
                from += wsize - op;
 | 
			
		||||
                if (op < len) {
 | 
			
		||||
                  /* some from window */
 | 
			
		||||
                if (op < len) {         /* some from window */
 | 
			
		||||
                  len -= op;
 | 
			
		||||
                  do {
 | 
			
		||||
                    output[_out++] = s_window[from++];
 | 
			
		||||
                  } while (--op);
 | 
			
		||||
                  from = _out - dist; /* rest from output */
 | 
			
		||||
                  from = _out - dist;  /* rest from output */
 | 
			
		||||
                  from_source = output;
 | 
			
		||||
                }
 | 
			
		||||
              } else if (wnext < op) {
 | 
			
		||||
                /* wrap around window */
 | 
			
		||||
              }
 | 
			
		||||
              else if (wnext < op) {      /* wrap around window */
 | 
			
		||||
                from += wsize + wnext - op;
 | 
			
		||||
                op -= wnext;
 | 
			
		||||
                if (op < len) {
 | 
			
		||||
                  /* some from end of window */
 | 
			
		||||
                if (op < len) {         /* some from end of window */
 | 
			
		||||
                  len -= op;
 | 
			
		||||
                  do {
 | 
			
		||||
                    output[_out++] = s_window[from++];
 | 
			
		||||
                  } while (--op);
 | 
			
		||||
                  from = 0;
 | 
			
		||||
                  if (wnext < len) {
 | 
			
		||||
                    /* some from start of window */
 | 
			
		||||
                  if (wnext < len) {  /* some from start of window */
 | 
			
		||||
                    op = wnext;
 | 
			
		||||
                    len -= op;
 | 
			
		||||
                    do {
 | 
			
		||||
                      output[_out++] = s_window[from++];
 | 
			
		||||
                    } while (--op);
 | 
			
		||||
                    from = _out - dist; /* rest from output */
 | 
			
		||||
                    from = _out - dist;      /* rest from output */
 | 
			
		||||
                    from_source = output;
 | 
			
		||||
                  }
 | 
			
		||||
                }
 | 
			
		||||
              } else {
 | 
			
		||||
                /* contiguous in window */
 | 
			
		||||
              }
 | 
			
		||||
              else {                      /* contiguous in window */
 | 
			
		||||
                from += wnext - op;
 | 
			
		||||
                if (op < len) {
 | 
			
		||||
                  /* some from window */
 | 
			
		||||
                if (op < len) {         /* some from window */
 | 
			
		||||
                  len -= op;
 | 
			
		||||
                  do {
 | 
			
		||||
                    output[_out++] = s_window[from++];
 | 
			
		||||
                  } while (--op);
 | 
			
		||||
                  from = _out - dist; /* rest from output */
 | 
			
		||||
                  from = _out - dist;  /* rest from output */
 | 
			
		||||
                  from_source = output;
 | 
			
		||||
                }
 | 
			
		||||
              }
 | 
			
		||||
| 
						 | 
				
			
			@ -269,10 +258,10 @@ function inflate_fast(strm, start) {
 | 
			
		|||
                  output[_out++] = from_source[from++];
 | 
			
		||||
                }
 | 
			
		||||
              }
 | 
			
		||||
            } else {
 | 
			
		||||
              from = _out - dist; /* copy direct from output */
 | 
			
		||||
              do {
 | 
			
		||||
                /* minimum length is three */
 | 
			
		||||
            }
 | 
			
		||||
            else {
 | 
			
		||||
              from = _out - dist;          /* copy direct from output */
 | 
			
		||||
              do {                        /* minimum length is three */
 | 
			
		||||
                output[_out++] = output[from++];
 | 
			
		||||
                output[_out++] = output[from++];
 | 
			
		||||
                output[_out++] = output[from++];
 | 
			
		||||
| 
						 | 
				
			
			@ -285,11 +274,12 @@ function inflate_fast(strm, start) {
 | 
			
		|||
                }
 | 
			
		||||
              }
 | 
			
		||||
            }
 | 
			
		||||
          } else if ((op & 64) === 0) {
 | 
			
		||||
            /* 2nd level distance code */
 | 
			
		||||
            here = dcode[(here & 0xffff) + ( /*here.val*/hold & (1 << op) - 1)];
 | 
			
		||||
          }
 | 
			
		||||
          else if ((op & 64) === 0) {          /* 2nd level distance code */
 | 
			
		||||
            here = dcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))];
 | 
			
		||||
            continue dodist;
 | 
			
		||||
          } else {
 | 
			
		||||
          }
 | 
			
		||||
          else {
 | 
			
		||||
            strm.msg = 'invalid distance code';
 | 
			
		||||
            state.mode = BAD;
 | 
			
		||||
            break top;
 | 
			
		||||
| 
						 | 
				
			
			@ -297,16 +287,17 @@ function inflate_fast(strm, start) {
 | 
			
		|||
 | 
			
		||||
          break; // need to emulate goto via "continue"
 | 
			
		||||
        }
 | 
			
		||||
      } else if ((op & 64) === 0) {
 | 
			
		||||
        /* 2nd level length code */
 | 
			
		||||
        here = lcode[(here & 0xffff) + ( /*here.val*/hold & (1 << op) - 1)];
 | 
			
		||||
      }
 | 
			
		||||
      else if ((op & 64) === 0) {              /* 2nd level length code */
 | 
			
		||||
        here = lcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))];
 | 
			
		||||
        continue dolen;
 | 
			
		||||
      } else if (op & 32) {
 | 
			
		||||
        /* end-of-block */
 | 
			
		||||
      }
 | 
			
		||||
      else if (op & 32) {                     /* end-of-block */
 | 
			
		||||
        //Tracevv((stderr, "inflate:         end of block\n"));
 | 
			
		||||
        state.mode = TYPE;
 | 
			
		||||
        break top;
 | 
			
		||||
      } else {
 | 
			
		||||
      }
 | 
			
		||||
      else {
 | 
			
		||||
        strm.msg = 'invalid literal/length code';
 | 
			
		||||
        state.mode = BAD;
 | 
			
		||||
        break top;
 | 
			
		||||
| 
						 | 
				
			
			@ -325,9 +316,9 @@ function inflate_fast(strm, start) {
 | 
			
		|||
  /* update state and return */
 | 
			
		||||
  strm.next_in = _in;
 | 
			
		||||
  strm.next_out = _out;
 | 
			
		||||
  strm.avail_in = _in < last ? 5 + (last - _in) : 5 - (_in - last);
 | 
			
		||||
  strm.avail_out = _out < end ? 257 + (end - _out) : 257 - (_out - end);
 | 
			
		||||
  strm.avail_in = (_in < last ? 5 + (last - _in) : 5 - (_in - last));
 | 
			
		||||
  strm.avail_out = (_out < end ? 257 + (end - _out) : 257 - (_out - end));
 | 
			
		||||
  state.hold = hold;
 | 
			
		||||
  state.bits = bits;
 | 
			
		||||
  return;
 | 
			
		||||
};
 | 
			
		||||
};
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										2214
									
								
								static/js/novnc/vendor/pako/lib/zlib/inflate.js
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										2214
									
								
								static/js/novnc/vendor/pako/lib/zlib/inflate.js
									
										
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							
							
								
								
									
										185
									
								
								static/js/novnc/vendor/pako/lib/zlib/inftrees.js
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										185
									
								
								static/js/novnc/vendor/pako/lib/zlib/inftrees.js
									
										
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -1,15 +1,4 @@
 | 
			
		|||
"use strict";
 | 
			
		||||
 | 
			
		||||
Object.defineProperty(exports, "__esModule", {
 | 
			
		||||
  value: true
 | 
			
		||||
});
 | 
			
		||||
exports.default = inflate_table;
 | 
			
		||||
 | 
			
		||||
var _common = require("../utils/common.js");
 | 
			
		||||
 | 
			
		||||
var utils = _interopRequireWildcard(_common);
 | 
			
		||||
 | 
			
		||||
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
 | 
			
		||||
import * as utils from "../utils/common.js";
 | 
			
		||||
 | 
			
		||||
var MAXBITS = 15;
 | 
			
		||||
var ENOUGH_LENS = 852;
 | 
			
		||||
| 
						 | 
				
			
			@ -20,41 +9,51 @@ var CODES = 0;
 | 
			
		|||
var LENS = 1;
 | 
			
		||||
var DISTS = 2;
 | 
			
		||||
 | 
			
		||||
var lbase = [/* Length codes 257..285 base */
 | 
			
		||||
3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0];
 | 
			
		||||
var lbase = [ /* Length codes 257..285 base */
 | 
			
		||||
  3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31,
 | 
			
		||||
  35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0
 | 
			
		||||
];
 | 
			
		||||
 | 
			
		||||
var lext = [/* Length codes 257..285 extra */
 | 
			
		||||
16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18, 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 72, 78];
 | 
			
		||||
var lext = [ /* Length codes 257..285 extra */
 | 
			
		||||
  16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18,
 | 
			
		||||
  19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 72, 78
 | 
			
		||||
];
 | 
			
		||||
 | 
			
		||||
var dbase = [/* Distance codes 0..29 base */
 | 
			
		||||
1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, 8193, 12289, 16385, 24577, 0, 0];
 | 
			
		||||
var dbase = [ /* Distance codes 0..29 base */
 | 
			
		||||
  1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193,
 | 
			
		||||
  257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145,
 | 
			
		||||
  8193, 12289, 16385, 24577, 0, 0
 | 
			
		||||
];
 | 
			
		||||
 | 
			
		||||
var dext = [/* Distance codes 0..29 extra */
 | 
			
		||||
16, 16, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22, 23, 23, 24, 24, 25, 25, 26, 26, 27, 27, 28, 28, 29, 29, 64, 64];
 | 
			
		||||
var dext = [ /* Distance codes 0..29 extra */
 | 
			
		||||
  16, 16, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22,
 | 
			
		||||
  23, 23, 24, 24, 25, 25, 26, 26, 27, 27,
 | 
			
		||||
  28, 28, 29, 29, 64, 64
 | 
			
		||||
];
 | 
			
		||||
 | 
			
		||||
function inflate_table(type, lens, lens_index, codes, table, table_index, work, opts) {
 | 
			
		||||
export default function inflate_table(type, lens, lens_index, codes, table, table_index, work, opts)
 | 
			
		||||
{
 | 
			
		||||
  var bits = opts.bits;
 | 
			
		||||
  //here = opts.here; /* table entry for duplication */
 | 
			
		||||
      //here = opts.here; /* table entry for duplication */
 | 
			
		||||
 | 
			
		||||
  var len = 0; /* a code's length in bits */
 | 
			
		||||
  var sym = 0; /* index of code symbols */
 | 
			
		||||
  var min = 0,
 | 
			
		||||
      max = 0; /* minimum and maximum code lengths */
 | 
			
		||||
  var root = 0; /* number of index bits for root table */
 | 
			
		||||
  var curr = 0; /* number of index bits for current table */
 | 
			
		||||
  var drop = 0; /* code bits to drop for sub-table */
 | 
			
		||||
  var left = 0; /* number of prefix codes available */
 | 
			
		||||
  var used = 0; /* code entries in table used */
 | 
			
		||||
  var huff = 0; /* Huffman code */
 | 
			
		||||
  var incr; /* for incrementing code, index */
 | 
			
		||||
  var fill; /* index for replicating entries */
 | 
			
		||||
  var low; /* low bits for current root entry */
 | 
			
		||||
  var mask; /* mask for low root bits */
 | 
			
		||||
  var next; /* next available space in table */
 | 
			
		||||
  var base = null; /* base value table to use */
 | 
			
		||||
  var len = 0;               /* a code's length in bits */
 | 
			
		||||
  var sym = 0;               /* index of code symbols */
 | 
			
		||||
  var min = 0, max = 0;          /* minimum and maximum code lengths */
 | 
			
		||||
  var root = 0;              /* number of index bits for root table */
 | 
			
		||||
  var curr = 0;              /* number of index bits for current table */
 | 
			
		||||
  var drop = 0;              /* code bits to drop for sub-table */
 | 
			
		||||
  var left = 0;                   /* number of prefix codes available */
 | 
			
		||||
  var used = 0;              /* code entries in table used */
 | 
			
		||||
  var huff = 0;              /* Huffman code */
 | 
			
		||||
  var incr;              /* for incrementing code, index */
 | 
			
		||||
  var fill;              /* index for replicating entries */
 | 
			
		||||
  var low;               /* low bits for current root entry */
 | 
			
		||||
  var mask;              /* mask for low root bits */
 | 
			
		||||
  var next;             /* next available space in table */
 | 
			
		||||
  var base = null;     /* base value table to use */
 | 
			
		||||
  var base_index = 0;
 | 
			
		||||
  //  var shoextra;    /* extra bits table to use */
 | 
			
		||||
  var end; /* use base and extra for symbol > end */
 | 
			
		||||
//  var shoextra;    /* extra bits table to use */
 | 
			
		||||
  var end;                    /* use base and extra for symbol > end */
 | 
			
		||||
  var count = new utils.Buf16(MAXBITS + 1); //[MAXBITS+1];    /* number of codes of each length */
 | 
			
		||||
  var offs = new utils.Buf16(MAXBITS + 1); //[MAXBITS+1];     /* offsets in table for each length */
 | 
			
		||||
  var extra = null;
 | 
			
		||||
| 
						 | 
				
			
			@ -74,16 +73,19 @@ function inflate_table(type, lens, lens_index, codes, table, table_index, work,
 | 
			
		|||
   from their more natural integer increment ordering, and so when the
 | 
			
		||||
   decoding tables are built in the large loop below, the integer codes
 | 
			
		||||
   are incremented backwards.
 | 
			
		||||
    This routine assumes, but does not check, that all of the entries in
 | 
			
		||||
 | 
			
		||||
   This routine assumes, but does not check, that all of the entries in
 | 
			
		||||
   lens[] are in the range 0..MAXBITS.  The caller must assure this.
 | 
			
		||||
   1..MAXBITS is interpreted as that code length.  zero means that that
 | 
			
		||||
   symbol does not occur in this code.
 | 
			
		||||
    The codes are sorted by computing a count of codes for each length,
 | 
			
		||||
 | 
			
		||||
   The codes are sorted by computing a count of codes for each length,
 | 
			
		||||
   creating from that a table of starting indices for each length in the
 | 
			
		||||
   sorted table, and then entering the symbols in order in the sorted
 | 
			
		||||
   table.  The sorted table is work[], with that space being provided by
 | 
			
		||||
   the caller.
 | 
			
		||||
    The length counts are used for other purposes as well, i.e. finding
 | 
			
		||||
 | 
			
		||||
   The length counts are used for other purposes as well, i.e. finding
 | 
			
		||||
   the minimum and maximum length codes, determining if there are any
 | 
			
		||||
   codes at all, checking for a valid set of lengths, and looking ahead
 | 
			
		||||
   at length counts to determine sub-table sizes when building the
 | 
			
		||||
| 
						 | 
				
			
			@ -101,32 +103,28 @@ function inflate_table(type, lens, lens_index, codes, table, table_index, work,
 | 
			
		|||
  /* bound code lengths, force root to be within code lengths */
 | 
			
		||||
  root = bits;
 | 
			
		||||
  for (max = MAXBITS; max >= 1; max--) {
 | 
			
		||||
    if (count[max] !== 0) {
 | 
			
		||||
      break;
 | 
			
		||||
    }
 | 
			
		||||
    if (count[max] !== 0) { break; }
 | 
			
		||||
  }
 | 
			
		||||
  if (root > max) {
 | 
			
		||||
    root = max;
 | 
			
		||||
  }
 | 
			
		||||
  if (max === 0) {
 | 
			
		||||
    /* no symbols to code at all */
 | 
			
		||||
  if (max === 0) {                     /* no symbols to code at all */
 | 
			
		||||
    //table.op[opts.table_index] = 64;  //here.op = (var char)64;    /* invalid code marker */
 | 
			
		||||
    //table.bits[opts.table_index] = 1;   //here.bits = (var char)1;
 | 
			
		||||
    //table.val[opts.table_index++] = 0;   //here.val = (var short)0;
 | 
			
		||||
    table[table_index++] = 1 << 24 | 64 << 16 | 0;
 | 
			
		||||
    table[table_index++] = (1 << 24) | (64 << 16) | 0;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    //table.op[opts.table_index] = 64;
 | 
			
		||||
    //table.bits[opts.table_index] = 1;
 | 
			
		||||
    //table.val[opts.table_index++] = 0;
 | 
			
		||||
    table[table_index++] = 1 << 24 | 64 << 16 | 0;
 | 
			
		||||
    table[table_index++] = (1 << 24) | (64 << 16) | 0;
 | 
			
		||||
 | 
			
		||||
    opts.bits = 1;
 | 
			
		||||
    return 0; /* no symbols, but wait for decoding to report error */
 | 
			
		||||
    return 0;     /* no symbols, but wait for decoding to report error */
 | 
			
		||||
  }
 | 
			
		||||
  for (min = 1; min < max; min++) {
 | 
			
		||||
    if (count[min] !== 0) {
 | 
			
		||||
      break;
 | 
			
		||||
    }
 | 
			
		||||
    if (count[min] !== 0) { break; }
 | 
			
		||||
  }
 | 
			
		||||
  if (root < min) {
 | 
			
		||||
    root = min;
 | 
			
		||||
| 
						 | 
				
			
			@ -139,10 +137,10 @@ function inflate_table(type, lens, lens_index, codes, table, table_index, work,
 | 
			
		|||
    left -= count[len];
 | 
			
		||||
    if (left < 0) {
 | 
			
		||||
      return -1;
 | 
			
		||||
    } /* over-subscribed */
 | 
			
		||||
    }        /* over-subscribed */
 | 
			
		||||
  }
 | 
			
		||||
  if (left > 0 && (type === CODES || max !== 1)) {
 | 
			
		||||
    return -1; /* incomplete set */
 | 
			
		||||
    return -1;                      /* incomplete set */
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /* generate offsets into symbol table for each length for sorting */
 | 
			
		||||
| 
						 | 
				
			
			@ -165,21 +163,25 @@ function inflate_table(type, lens, lens_index, codes, table, table_index, work,
 | 
			
		|||
   bits off of the bottom.  For codes where len is less than drop + curr,
 | 
			
		||||
   those top drop + curr - len bits are incremented through all values to
 | 
			
		||||
   fill the table with replicated entries.
 | 
			
		||||
    root is the number of index bits for the root table.  When len exceeds
 | 
			
		||||
 | 
			
		||||
   root is the number of index bits for the root table.  When len exceeds
 | 
			
		||||
   root, sub-tables are created pointed to by the root entry with an index
 | 
			
		||||
   of the low root bits of huff.  This is saved in low to check for when a
 | 
			
		||||
   new sub-table should be started.  drop is zero when the root table is
 | 
			
		||||
   being filled, and drop is root when sub-tables are being filled.
 | 
			
		||||
    When a new sub-table is needed, it is necessary to look ahead in the
 | 
			
		||||
 | 
			
		||||
   When a new sub-table is needed, it is necessary to look ahead in the
 | 
			
		||||
   code lengths to determine what size sub-table is needed.  The length
 | 
			
		||||
   counts are used for this, and so count[] is decremented as codes are
 | 
			
		||||
   entered in the tables.
 | 
			
		||||
    used keeps track of how many table entries have been allocated from the
 | 
			
		||||
 | 
			
		||||
   used keeps track of how many table entries have been allocated from the
 | 
			
		||||
   provided *table space.  It is checked for LENS and DIST tables against
 | 
			
		||||
   the constants ENOUGH_LENS and ENOUGH_DISTS to guard against changes in
 | 
			
		||||
   the initial root table size constants.  See the comments in inftrees.h
 | 
			
		||||
   for more information.
 | 
			
		||||
    sym increments through all symbols, and the loop terminates when
 | 
			
		||||
 | 
			
		||||
   sym increments through all symbols, and the loop terminates when
 | 
			
		||||
   all codes of length max, i.e. all codes, have been processed.  This
 | 
			
		||||
   routine permits incomplete codes, so another loop after this one fills
 | 
			
		||||
   in the rest of the decoding tables with invalid code markers.
 | 
			
		||||
| 
						 | 
				
			
			@ -189,34 +191,36 @@ function inflate_table(type, lens, lens_index, codes, table, table_index, work,
 | 
			
		|||
  // poor man optimization - use if-else instead of switch,
 | 
			
		||||
  // to avoid deopts in old v8
 | 
			
		||||
  if (type === CODES) {
 | 
			
		||||
    base = extra = work; /* dummy value--not used */
 | 
			
		||||
    base = extra = work;    /* dummy value--not used */
 | 
			
		||||
    end = 19;
 | 
			
		||||
 | 
			
		||||
  } else if (type === LENS) {
 | 
			
		||||
    base = lbase;
 | 
			
		||||
    base_index -= 257;
 | 
			
		||||
    extra = lext;
 | 
			
		||||
    extra_index -= 257;
 | 
			
		||||
    end = 256;
 | 
			
		||||
  } else {
 | 
			
		||||
    /* DISTS */
 | 
			
		||||
 | 
			
		||||
  } else {                    /* DISTS */
 | 
			
		||||
    base = dbase;
 | 
			
		||||
    extra = dext;
 | 
			
		||||
    end = -1;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /* initialize opts for loop */
 | 
			
		||||
  huff = 0; /* starting code */
 | 
			
		||||
  sym = 0; /* starting code symbol */
 | 
			
		||||
  len = min; /* starting code length */
 | 
			
		||||
  next = table_index; /* current table to fill in */
 | 
			
		||||
  curr = root; /* current table index bits */
 | 
			
		||||
  drop = 0; /* current bits to drop from code for index */
 | 
			
		||||
  low = -1; /* trigger new sub-table when len > root */
 | 
			
		||||
  used = 1 << root; /* use root table entries */
 | 
			
		||||
  mask = used - 1; /* mask for comparing low */
 | 
			
		||||
  huff = 0;                   /* starting code */
 | 
			
		||||
  sym = 0;                    /* starting code symbol */
 | 
			
		||||
  len = min;                  /* starting code length */
 | 
			
		||||
  next = table_index;              /* current table to fill in */
 | 
			
		||||
  curr = root;                /* current table index bits */
 | 
			
		||||
  drop = 0;                   /* current bits to drop from code for index */
 | 
			
		||||
  low = -1;                   /* trigger new sub-table when len > root */
 | 
			
		||||
  used = 1 << root;          /* use root table entries */
 | 
			
		||||
  mask = used - 1;            /* mask for comparing low */
 | 
			
		||||
 | 
			
		||||
  /* check available table space */
 | 
			
		||||
  if (type === LENS && used > ENOUGH_LENS || type === DISTS && used > ENOUGH_DISTS) {
 | 
			
		||||
  if ((type === LENS && used > ENOUGH_LENS) ||
 | 
			
		||||
    (type === DISTS && used > ENOUGH_DISTS)) {
 | 
			
		||||
    return 1;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -227,25 +231,27 @@ function inflate_table(type, lens, lens_index, codes, table, table_index, work,
 | 
			
		|||
    if (work[sym] < end) {
 | 
			
		||||
      here_op = 0;
 | 
			
		||||
      here_val = work[sym];
 | 
			
		||||
    } else if (work[sym] > end) {
 | 
			
		||||
    }
 | 
			
		||||
    else if (work[sym] > end) {
 | 
			
		||||
      here_op = extra[extra_index + work[sym]];
 | 
			
		||||
      here_val = base[base_index + work[sym]];
 | 
			
		||||
    } else {
 | 
			
		||||
      here_op = 32 + 64; /* end of block */
 | 
			
		||||
    }
 | 
			
		||||
    else {
 | 
			
		||||
      here_op = 32 + 64;         /* end of block */
 | 
			
		||||
      here_val = 0;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /* replicate for those indices with low len bits equal to huff */
 | 
			
		||||
    incr = 1 << len - drop;
 | 
			
		||||
    incr = 1 << (len - drop);
 | 
			
		||||
    fill = 1 << curr;
 | 
			
		||||
    min = fill; /* save offset to next table */
 | 
			
		||||
    min = fill;                 /* save offset to next table */
 | 
			
		||||
    do {
 | 
			
		||||
      fill -= incr;
 | 
			
		||||
      table[next + (huff >> drop) + fill] = here_bits << 24 | here_op << 16 | here_val | 0;
 | 
			
		||||
      table[next + (huff >> drop) + fill] = (here_bits << 24) | (here_op << 16) | here_val |0;
 | 
			
		||||
    } while (fill !== 0);
 | 
			
		||||
 | 
			
		||||
    /* backwards increment the len-bit code huff */
 | 
			
		||||
    incr = 1 << len - 1;
 | 
			
		||||
    incr = 1 << (len - 1);
 | 
			
		||||
    while (huff & incr) {
 | 
			
		||||
      incr >>= 1;
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			@ -259,9 +265,7 @@ function inflate_table(type, lens, lens_index, codes, table, table_index, work,
 | 
			
		|||
    /* go to next symbol, update count, len */
 | 
			
		||||
    sym++;
 | 
			
		||||
    if (--count[len] === 0) {
 | 
			
		||||
      if (len === max) {
 | 
			
		||||
        break;
 | 
			
		||||
      }
 | 
			
		||||
      if (len === max) { break; }
 | 
			
		||||
      len = lens[lens_index + work[sym]];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -273,23 +277,22 @@ function inflate_table(type, lens, lens_index, codes, table, table_index, work,
 | 
			
		|||
      }
 | 
			
		||||
 | 
			
		||||
      /* increment past last table */
 | 
			
		||||
      next += min; /* here min is 1 << curr */
 | 
			
		||||
      next += min;            /* here min is 1 << curr */
 | 
			
		||||
 | 
			
		||||
      /* determine length of next table */
 | 
			
		||||
      curr = len - drop;
 | 
			
		||||
      left = 1 << curr;
 | 
			
		||||
      while (curr + drop < max) {
 | 
			
		||||
        left -= count[curr + drop];
 | 
			
		||||
        if (left <= 0) {
 | 
			
		||||
          break;
 | 
			
		||||
        }
 | 
			
		||||
        if (left <= 0) { break; }
 | 
			
		||||
        curr++;
 | 
			
		||||
        left <<= 1;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      /* check for enough space */
 | 
			
		||||
      used += 1 << curr;
 | 
			
		||||
      if (type === LENS && used > ENOUGH_LENS || type === DISTS && used > ENOUGH_DISTS) {
 | 
			
		||||
      if ((type === LENS && used > ENOUGH_LENS) ||
 | 
			
		||||
        (type === DISTS && used > ENOUGH_DISTS)) {
 | 
			
		||||
        return 1;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -298,7 +301,7 @@ function inflate_table(type, lens, lens_index, codes, table, table_index, work,
 | 
			
		|||
      /*table.op[low] = curr;
 | 
			
		||||
      table.bits[low] = root;
 | 
			
		||||
      table.val[low] = next - opts.table_index;*/
 | 
			
		||||
      table[low] = root << 24 | curr << 16 | next - table_index | 0;
 | 
			
		||||
      table[low] = (root << 24) | (curr << 16) | (next - table_index) |0;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -309,11 +312,11 @@ function inflate_table(type, lens, lens_index, codes, table, table_index, work,
 | 
			
		|||
    //table.op[next + huff] = 64;            /* invalid code marker */
 | 
			
		||||
    //table.bits[next + huff] = len - drop;
 | 
			
		||||
    //table.val[next + huff] = 0;
 | 
			
		||||
    table[next + huff] = len - drop << 24 | 64 << 16 | 0;
 | 
			
		||||
    table[next + huff] = ((len - drop) << 24) | (64 << 16) |0;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /* set return parameters */
 | 
			
		||||
  //opts.table_index += used;
 | 
			
		||||
  opts.bits = root;
 | 
			
		||||
  return 0;
 | 
			
		||||
};
 | 
			
		||||
};
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										27
									
								
								static/js/novnc/vendor/pako/lib/zlib/messages.js
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										27
									
								
								static/js/novnc/vendor/pako/lib/zlib/messages.js
									
										
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -1,16 +1,11 @@
 | 
			
		|||
'use strict';
 | 
			
		||||
 | 
			
		||||
Object.defineProperty(exports, "__esModule", {
 | 
			
		||||
  value: true
 | 
			
		||||
});
 | 
			
		||||
exports.default = {
 | 
			
		||||
  2: 'need dictionary', /* Z_NEED_DICT       2  */
 | 
			
		||||
  1: 'stream end', /* Z_STREAM_END      1  */
 | 
			
		||||
  0: '', /* Z_OK              0  */
 | 
			
		||||
  '-1': 'file error', /* Z_ERRNO         (-1) */
 | 
			
		||||
  '-2': 'stream error', /* Z_STREAM_ERROR  (-2) */
 | 
			
		||||
  '-3': 'data error', /* Z_DATA_ERROR    (-3) */
 | 
			
		||||
  '-4': 'insufficient memory', /* Z_MEM_ERROR     (-4) */
 | 
			
		||||
  '-5': 'buffer error', /* Z_BUF_ERROR     (-5) */
 | 
			
		||||
  '-6': 'incompatible version' /* Z_VERSION_ERROR (-6) */
 | 
			
		||||
};
 | 
			
		||||
export default {
 | 
			
		||||
  2:      'need dictionary',     /* Z_NEED_DICT       2  */
 | 
			
		||||
  1:      'stream end',          /* Z_STREAM_END      1  */
 | 
			
		||||
  0:      '',                    /* Z_OK              0  */
 | 
			
		||||
  '-1':   'file error',          /* Z_ERRNO         (-1) */
 | 
			
		||||
  '-2':   'stream error',        /* Z_STREAM_ERROR  (-2) */
 | 
			
		||||
  '-3':   'data error',          /* Z_DATA_ERROR    (-3) */
 | 
			
		||||
  '-4':   'insufficient memory', /* Z_MEM_ERROR     (-4) */
 | 
			
		||||
  '-5':   'buffer error',        /* Z_BUF_ERROR     (-5) */
 | 
			
		||||
  '-6':   'incompatible version' /* Z_VERSION_ERROR (-6) */
 | 
			
		||||
};
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										543
									
								
								static/js/novnc/vendor/pako/lib/zlib/trees.js
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										543
									
								
								static/js/novnc/vendor/pako/lib/zlib/trees.js
									
										
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							
							
								
								
									
										14
									
								
								static/js/novnc/vendor/pako/lib/zlib/zstream.js
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										14
									
								
								static/js/novnc/vendor/pako/lib/zlib/zstream.js
									
										
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -1,10 +1,4 @@
 | 
			
		|||
'use strict';
 | 
			
		||||
 | 
			
		||||
Object.defineProperty(exports, "__esModule", {
 | 
			
		||||
  value: true
 | 
			
		||||
});
 | 
			
		||||
exports.default = ZStream;
 | 
			
		||||
function ZStream() {
 | 
			
		||||
export default function ZStream() {
 | 
			
		||||
  /* next input byte */
 | 
			
		||||
  this.input = null; // JS specific, because we have no pointers
 | 
			
		||||
  this.next_in = 0;
 | 
			
		||||
| 
						 | 
				
			
			@ -20,11 +14,11 @@ function ZStream() {
 | 
			
		|||
  /* total number of bytes output so far */
 | 
			
		||||
  this.total_out = 0;
 | 
			
		||||
  /* last error message, NULL if no error */
 | 
			
		||||
  this.msg = '' /*Z_NULL*/;
 | 
			
		||||
  this.msg = ''/*Z_NULL*/;
 | 
			
		||||
  /* not visible by applications */
 | 
			
		||||
  this.state = null;
 | 
			
		||||
  /* best guess about the data type: binary or text */
 | 
			
		||||
  this.data_type = 2 /*Z_UNKNOWN*/;
 | 
			
		||||
  this.data_type = 2/*Z_UNKNOWN*/;
 | 
			
		||||
  /* adler32 value of the uncompressed data */
 | 
			
		||||
  this.adler = 0;
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										255
									
								
								static/js/novnc/vendor/promise.js
									
										
									
									
										vendored
									
									
										Executable file
									
								
							
							
						
						
									
										255
									
								
								static/js/novnc/vendor/promise.js
									
										
									
									
										vendored
									
									
										Executable file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,255 @@
 | 
			
		|||
/* Copyright (c) 2014 Taylor Hakes
 | 
			
		||||
 * Copyright (c) 2014 Forbes Lindesay
 | 
			
		||||
 *
 | 
			
		||||
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 | 
			
		||||
 * of this software and associated documentation files (the "Software"), to deal
 | 
			
		||||
 * in the Software without restriction, including without limitation the rights
 | 
			
		||||
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 | 
			
		||||
 * copies of the Software, and to permit persons to whom the Software is
 | 
			
		||||
 * furnished to do so, subject to the following conditions:
 | 
			
		||||
 *
 | 
			
		||||
 * The above copyright notice and this permission notice shall be included in
 | 
			
		||||
 * all copies or substantial portions of the Software.
 | 
			
		||||
 *
 | 
			
		||||
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 | 
			
		||||
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 | 
			
		||||
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 | 
			
		||||
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 | 
			
		||||
 * THE SOFTWARE.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
(function (root) {
 | 
			
		||||
 | 
			
		||||
  // Store setTimeout reference so promise-polyfill will be unaffected by
 | 
			
		||||
  // other code modifying setTimeout (like sinon.useFakeTimers())
 | 
			
		||||
  var setTimeoutFunc = setTimeout;
 | 
			
		||||
 | 
			
		||||
  function noop() {}
 | 
			
		||||
  
 | 
			
		||||
  // Polyfill for Function.prototype.bind
 | 
			
		||||
  function bind(fn, thisArg) {
 | 
			
		||||
    return function () {
 | 
			
		||||
      fn.apply(thisArg, arguments);
 | 
			
		||||
    };
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  function Promise(fn) {
 | 
			
		||||
    if (typeof this !== 'object') throw new TypeError('Promises must be constructed via new');
 | 
			
		||||
    if (typeof fn !== 'function') throw new TypeError('not a function');
 | 
			
		||||
    this._state = 0;
 | 
			
		||||
    this._handled = false;
 | 
			
		||||
    this._value = undefined;
 | 
			
		||||
    this._deferreds = [];
 | 
			
		||||
 | 
			
		||||
    doResolve(fn, this);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  function handle(self, deferred) {
 | 
			
		||||
    while (self._state === 3) {
 | 
			
		||||
      self = self._value;
 | 
			
		||||
    }
 | 
			
		||||
    if (self._state === 0) {
 | 
			
		||||
      self._deferreds.push(deferred);
 | 
			
		||||
      return;
 | 
			
		||||
    }
 | 
			
		||||
    self._handled = true;
 | 
			
		||||
    Promise._immediateFn(function () {
 | 
			
		||||
      var cb = self._state === 1 ? deferred.onFulfilled : deferred.onRejected;
 | 
			
		||||
      if (cb === null) {
 | 
			
		||||
        (self._state === 1 ? resolve : reject)(deferred.promise, self._value);
 | 
			
		||||
        return;
 | 
			
		||||
      }
 | 
			
		||||
      var ret;
 | 
			
		||||
      try {
 | 
			
		||||
        ret = cb(self._value);
 | 
			
		||||
      } catch (e) {
 | 
			
		||||
        reject(deferred.promise, e);
 | 
			
		||||
        return;
 | 
			
		||||
      }
 | 
			
		||||
      resolve(deferred.promise, ret);
 | 
			
		||||
    });
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  function resolve(self, newValue) {
 | 
			
		||||
    try {
 | 
			
		||||
      // Promise Resolution Procedure: https://github.com/promises-aplus/promises-spec#the-promise-resolution-procedure
 | 
			
		||||
      if (newValue === self) throw new TypeError('A promise cannot be resolved with itself.');
 | 
			
		||||
      if (newValue && (typeof newValue === 'object' || typeof newValue === 'function')) {
 | 
			
		||||
        var then = newValue.then;
 | 
			
		||||
        if (newValue instanceof Promise) {
 | 
			
		||||
          self._state = 3;
 | 
			
		||||
          self._value = newValue;
 | 
			
		||||
          finale(self);
 | 
			
		||||
          return;
 | 
			
		||||
        } else if (typeof then === 'function') {
 | 
			
		||||
          doResolve(bind(then, newValue), self);
 | 
			
		||||
          return;
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
      self._state = 1;
 | 
			
		||||
      self._value = newValue;
 | 
			
		||||
      finale(self);
 | 
			
		||||
    } catch (e) {
 | 
			
		||||
      reject(self, e);
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  function reject(self, newValue) {
 | 
			
		||||
    self._state = 2;
 | 
			
		||||
    self._value = newValue;
 | 
			
		||||
    finale(self);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  function finale(self) {
 | 
			
		||||
    if (self._state === 2 && self._deferreds.length === 0) {
 | 
			
		||||
      Promise._immediateFn(function() {
 | 
			
		||||
        if (!self._handled) {
 | 
			
		||||
          Promise._unhandledRejectionFn(self._value);
 | 
			
		||||
        }
 | 
			
		||||
      });
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    for (var i = 0, len = self._deferreds.length; i < len; i++) {
 | 
			
		||||
      handle(self, self._deferreds[i]);
 | 
			
		||||
    }
 | 
			
		||||
    self._deferreds = null;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  function Handler(onFulfilled, onRejected, promise) {
 | 
			
		||||
    this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null;
 | 
			
		||||
    this.onRejected = typeof onRejected === 'function' ? onRejected : null;
 | 
			
		||||
    this.promise = promise;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Take a potentially misbehaving resolver function and make sure
 | 
			
		||||
   * onFulfilled and onRejected are only called once.
 | 
			
		||||
   *
 | 
			
		||||
   * Makes no guarantees about asynchrony.
 | 
			
		||||
   */
 | 
			
		||||
  function doResolve(fn, self) {
 | 
			
		||||
    var done = false;
 | 
			
		||||
    try {
 | 
			
		||||
      fn(function (value) {
 | 
			
		||||
        if (done) return;
 | 
			
		||||
        done = true;
 | 
			
		||||
        resolve(self, value);
 | 
			
		||||
      }, function (reason) {
 | 
			
		||||
        if (done) return;
 | 
			
		||||
        done = true;
 | 
			
		||||
        reject(self, reason);
 | 
			
		||||
      });
 | 
			
		||||
    } catch (ex) {
 | 
			
		||||
      if (done) return;
 | 
			
		||||
      done = true;
 | 
			
		||||
      reject(self, ex);
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  Promise.prototype['catch'] = function (onRejected) {
 | 
			
		||||
    return this.then(null, onRejected);
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  Promise.prototype.then = function (onFulfilled, onRejected) {
 | 
			
		||||
    var prom = new (this.constructor)(noop);
 | 
			
		||||
 | 
			
		||||
    handle(this, new Handler(onFulfilled, onRejected, prom));
 | 
			
		||||
    return prom;
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  Promise.all = function (arr) {
 | 
			
		||||
    var args = Array.prototype.slice.call(arr);
 | 
			
		||||
 | 
			
		||||
    return new Promise(function (resolve, reject) {
 | 
			
		||||
      if (args.length === 0) return resolve([]);
 | 
			
		||||
      var remaining = args.length;
 | 
			
		||||
 | 
			
		||||
      function res(i, val) {
 | 
			
		||||
        try {
 | 
			
		||||
          if (val && (typeof val === 'object' || typeof val === 'function')) {
 | 
			
		||||
            var then = val.then;
 | 
			
		||||
            if (typeof then === 'function') {
 | 
			
		||||
              then.call(val, function (val) {
 | 
			
		||||
                res(i, val);
 | 
			
		||||
              }, reject);
 | 
			
		||||
              return;
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
          args[i] = val;
 | 
			
		||||
          if (--remaining === 0) {
 | 
			
		||||
            resolve(args);
 | 
			
		||||
          }
 | 
			
		||||
        } catch (ex) {
 | 
			
		||||
          reject(ex);
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      for (var i = 0; i < args.length; i++) {
 | 
			
		||||
        res(i, args[i]);
 | 
			
		||||
      }
 | 
			
		||||
    });
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  Promise.resolve = function (value) {
 | 
			
		||||
    if (value && typeof value === 'object' && value.constructor === Promise) {
 | 
			
		||||
      return value;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return new Promise(function (resolve) {
 | 
			
		||||
      resolve(value);
 | 
			
		||||
    });
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  Promise.reject = function (value) {
 | 
			
		||||
    return new Promise(function (resolve, reject) {
 | 
			
		||||
      reject(value);
 | 
			
		||||
    });
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  Promise.race = function (values) {
 | 
			
		||||
    return new Promise(function (resolve, reject) {
 | 
			
		||||
      for (var i = 0, len = values.length; i < len; i++) {
 | 
			
		||||
        values[i].then(resolve, reject);
 | 
			
		||||
      }
 | 
			
		||||
    });
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  // Use polyfill for setImmediate for performance gains
 | 
			
		||||
  Promise._immediateFn = (typeof setImmediate === 'function' && function (fn) { setImmediate(fn); }) ||
 | 
			
		||||
    function (fn) {
 | 
			
		||||
      setTimeoutFunc(fn, 0);
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
  Promise._unhandledRejectionFn = function _unhandledRejectionFn(err) {
 | 
			
		||||
    if (typeof console !== 'undefined' && console) {
 | 
			
		||||
      console.warn('Possible Unhandled Promise Rejection:', err); // eslint-disable-line no-console
 | 
			
		||||
    }
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Set the immediate function to execute callbacks
 | 
			
		||||
   * @param fn {function} Function to execute
 | 
			
		||||
   * @deprecated
 | 
			
		||||
   */
 | 
			
		||||
  Promise._setImmediateFn = function _setImmediateFn(fn) {
 | 
			
		||||
    Promise._immediateFn = fn;
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Change the function to execute on unhandled rejection
 | 
			
		||||
   * @param {function} fn Function to execute on unhandled rejection
 | 
			
		||||
   * @deprecated
 | 
			
		||||
   */
 | 
			
		||||
  Promise._setUnhandledRejectionFn = function _setUnhandledRejectionFn(fn) {
 | 
			
		||||
    Promise._unhandledRejectionFn = fn;
 | 
			
		||||
  };
 | 
			
		||||
  
 | 
			
		||||
  if (typeof module !== 'undefined' && module.exports) {
 | 
			
		||||
    module.exports = Promise;
 | 
			
		||||
  } else if (!root.Promise) {
 | 
			
		||||
    root.Promise = Promise;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
})(this);
 | 
			
		||||
							
								
								
									
										14043
									
								
								static/js/novnc/vendor/sinon.js
									
										
									
									
										vendored
									
									
										Executable file
									
								
							
							
						
						
									
										14043
									
								
								static/js/novnc/vendor/sinon.js
									
										
									
									
										vendored
									
									
										Executable file
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							| 
						 | 
				
			
			@ -1,323 +0,0 @@
 | 
			
		|||
{% extends "console-base.html" %}
 | 
			
		||||
{% load i18n %}
 | 
			
		||||
{% load staticfiles %}
 | 
			
		||||
 | 
			
		||||
{% block head %}
 | 
			
		||||
    <!--
 | 
			
		||||
    noVNC example: simple example using default UI
 | 
			
		||||
    Copyright (C) 2012 Joel Martin
 | 
			
		||||
    Copyright (C) 2016 Samuel Mannehed for Cendio AB
 | 
			
		||||
    Copyright (C) 2016 Pierre Ossman for Cendio AB
 | 
			
		||||
    noVNC is licensed under the MPL 2.0 (see LICENSE.txt)
 | 
			
		||||
    This file is licensed under the 2-Clause BSD license (see LICENSE.txt).
 | 
			
		||||
 | 
			
		||||
    Connect parameters are provided in query string:
 | 
			
		||||
        http://example.com/?host=HOST&port=PORT&encrypt=1
 | 
			
		||||
    or the fragment:
 | 
			
		||||
        http://example.com/#host=HOST&port=PORT&encrypt=1
 | 
			
		||||
    -->
 | 
			
		||||
    <title xmlns="http://www.w3.org/1999/html">noVNC</title>
 | 
			
		||||
 | 
			
		||||
    <meta charset="utf-8" />
 | 
			
		||||
 | 
			
		||||
    <!-- Always force latest IE rendering engine (even in intranet) & Chrome Frame
 | 
			
		||||
                Remove this if you use the .htaccess -->
 | 
			
		||||
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
 | 
			
		||||
 | 
			
		||||
    <!-- Icons (see Makefile for what the sizes are for) -->
 | 
			
		||||
    <link rel="icon" sizes="16x16" type="image/png" href="{% static "js/novnc/app/images/icons/novnc-16x16.png" %}">
 | 
			
		||||
    <link rel="icon" sizes="24x24" type="image/png" href="{% static "js/novnc/app/images/icons/novnc-24x24.png" %}">
 | 
			
		||||
    <link rel="icon" sizes="32x32" type="image/png" href="{% static "js/novnc/app/images/icons/novnc-32x32.png" %}">
 | 
			
		||||
    <link rel="icon" sizes="48x48" type="image/png" href="{% static "js/novnc/app/images/icons/novnc-48x48.png" %}">
 | 
			
		||||
    <link rel="icon" sizes="60x60" type="image/png" href="{% static "js/novnc/app/images/icons/novnc-60x60.png" %}">
 | 
			
		||||
    <link rel="icon" sizes="64x64" type="image/png" href="{% static "js/novnc/app/images/icons/novnc-64x64.png" %}">
 | 
			
		||||
    <link rel="icon" sizes="72x72" type="image/png" href="{% static "js/novnc/app/images/icons/novnc-72x72.png" %}">
 | 
			
		||||
    <link rel="icon" sizes="76x76" type="image/png" href="{% static "js/novnc/app/images/icons/novnc-76x76.png" %}">
 | 
			
		||||
    <link rel="icon" sizes="96x96" type="image/png" href="{% static "js/novnc/app/images/icons/novnc-96x96.png" %}">
 | 
			
		||||
    <link rel="icon" sizes="120x120" type="image/png" href="{% static "js/novnc/app/images/icons/novnc-120x120.png" %}">
 | 
			
		||||
    <link rel="icon" sizes="144x144" type="image/png" href="{% static "js/novnc/app/images/icons/novnc-144x144.png" %}">
 | 
			
		||||
    <link rel="icon" sizes="152x152" type="image/png" href="{% static "js/novnc/app/images/icons/novnc-152x152.png" %}">
 | 
			
		||||
    <link rel="icon" sizes="192x192" type="image/png" href="{% static "js/novnc/app/images/icons/novnc-192x192.png" %}">
 | 
			
		||||
    <!-- Firefox currently mishandles SVG, see #1419039
 | 
			
		||||
    <link rel="icon" sizes="any" type="image/svg+xml" href="{% static "js/novnc/app/images/icons/novnc-icon.svg" %}">
 | 
			
		||||
    -->
 | 
			
		||||
    <!-- Repeated last so that legacy handling will pick this -->
 | 
			
		||||
    <link rel="icon" sizes="16x16" type="image/png" href="{% static "js/novnc/app/images/icons/novnc-16x16.png" %}">
 | 
			
		||||
 | 
			
		||||
    <!-- Apple iOS Safari settings -->
 | 
			
		||||
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
 | 
			
		||||
    <meta name="apple-mobile-web-app-capable" content="yes" />
 | 
			
		||||
    <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" />
 | 
			
		||||
    <!-- Home Screen Icons (favourites and bookmarks use the normal icons) -->
 | 
			
		||||
    <link rel="apple-touch-icon" sizes="60x60" type="image/png" href="{% static "js/novnc/app/images/icons/novnc-60x60.png" %}">
 | 
			
		||||
    <link rel="apple-touch-icon" sizes="76x76" type="image/png" href="{% static "js/novnc/app/images/icons/novnc-76x76.png" %}">
 | 
			
		||||
    <link rel="apple-touch-icon" sizes="120x120" type="image/png" href="{% static "js/novnc/app/images/icons/novnc-120x120.png" %}">
 | 
			
		||||
    <link rel="apple-touch-icon" sizes="152x152" type="image/png" href="{% static "js/novnc/app/images/icons/novnc-152x152.png" %}">
 | 
			
		||||
 | 
			
		||||
    <!-- Stylesheets -->
 | 
			
		||||
    <link rel="stylesheet" href="{% static "js/novnc/app/styles/base.css" %}"/>
 | 
			
		||||
 | 
			
		||||
    <!--
 | 
			
		||||
    <script type='text/javascript' src='http://getfirebug.com/releases/lite/1.2/firebug-lite-compressed.js'></script>
 | 
			
		||||
    -->
 | 
			
		||||
 | 
			
		||||
    <!-- this is included as a normal file in order to catch script-loading errors as well -->
 | 
			
		||||
    <script type="text/javascript" src="{% static "js/novnc/app/error-handler.js" %}"></script>
 | 
			
		||||
 | 
			
		||||
    <!-- begin scripts -->
 | 
			
		||||
    <script src="{% static "js/novnc/app.js" %}"></script>
 | 
			
		||||
    <!-- end scripts -->
 | 
			
		||||
{% endblock %}
 | 
			
		||||
 | 
			
		||||
{% block content %}
 | 
			
		||||
 | 
			
		||||
    <div id="noVNC_fallback_error" class="noVNC_center">
 | 
			
		||||
        <div>
 | 
			
		||||
            <div>noVNC encountered an error:</div>
 | 
			
		||||
            <br>
 | 
			
		||||
            <div id="noVNC_fallback_errormsg"></div>
 | 
			
		||||
        </div>
 | 
			
		||||
    </div>
 | 
			
		||||
 | 
			
		||||
    <!-- noVNC Control Bar -->
 | 
			
		||||
    <div id="noVNC_control_bar_anchor" class="noVNC_vcenter">
 | 
			
		||||
 | 
			
		||||
        <div id="noVNC_control_bar">
 | 
			
		||||
            <div id="noVNC_control_bar_handle" title="Hide/Show the control bar"><div></div></div>
 | 
			
		||||
 | 
			
		||||
            <div class="noVNC_scroll">
 | 
			
		||||
 | 
			
		||||
            <h1 class="noVNC_logo" translate="no"><span>no</span><br />VNC</h1>
 | 
			
		||||
 | 
			
		||||
            <!-- Drag/Pan the viewport -->
 | 
			
		||||
            <input type="image" alt="viewport drag" src="{% static "js/novnc/app/images/drag.svg" %}"
 | 
			
		||||
                id="noVNC_view_drag_button" class="noVNC_button noVNC_hidden"
 | 
			
		||||
                title="Move/Drag Viewport" />
 | 
			
		||||
 | 
			
		||||
            <!--noVNC Touch Device only buttons-->
 | 
			
		||||
            <div id="noVNC_mobile_buttons">
 | 
			
		||||
                <input type="image" alt="No mousebutton" src="{% static "js/novnc/app/images/mouse_none.svg" %}"
 | 
			
		||||
                    id="noVNC_mouse_button0" class="noVNC_button"
 | 
			
		||||
                    title="Active Mouse Button"/>
 | 
			
		||||
                <input type="image" alt="Left mousebutton" src="{% static "js/novnc/app/images/mouse_left.svg" %}"
 | 
			
		||||
                    id="noVNC_mouse_button1" class="noVNC_button"
 | 
			
		||||
                    title="Active Mouse Button"/>
 | 
			
		||||
                <input type="image" alt="Middle mousebutton" src="{% static "js/novnc/app/images/mouse_middle.svg" %}"
 | 
			
		||||
                    id="noVNC_mouse_button2" class="noVNC_button"
 | 
			
		||||
                    title="Active Mouse Button"/>
 | 
			
		||||
                <input type="image" alt="Right mousebutton" src="{% static "js/novnc/app/images/mouse_right.svg" %}"
 | 
			
		||||
                    id="noVNC_mouse_button4" class="noVNC_button"
 | 
			
		||||
                    title="Active Mouse Button"/>
 | 
			
		||||
                <input type="image" alt="Keyboard" src="{% static "js/novnc/app/images/keyboard.svg" %}"
 | 
			
		||||
                    id="noVNC_keyboard_button" class="noVNC_button"
 | 
			
		||||
                    value="Keyboard" title="Show Keyboard" />
 | 
			
		||||
            </div>
 | 
			
		||||
 | 
			
		||||
            <!-- Extra manual keys -->
 | 
			
		||||
            <div id="noVNC_extra_keys">
 | 
			
		||||
                <input type="image" alt="Extra keys" src="{% static "js/novnc/app/images/toggleextrakeys.svg" %}"
 | 
			
		||||
                    id="noVNC_toggle_extra_keys_button" class="noVNC_button"
 | 
			
		||||
                    title="Show Extra Keys"/>
 | 
			
		||||
                <div class="noVNC_vcenter">
 | 
			
		||||
                <div id="noVNC_modifiers" class="noVNC_panel">
 | 
			
		||||
                    <input type="image" alt="Ctrl" src="{% static "js/novnc/app/images/ctrl.svg" %}"
 | 
			
		||||
                        id="noVNC_toggle_ctrl_button" class="noVNC_button"
 | 
			
		||||
                        title="Toggle Ctrl"/>
 | 
			
		||||
                    <input type="image" alt="Alt" src="{% static "js/novnc/app/images/alt.svg" %}"
 | 
			
		||||
                        id="noVNC_toggle_alt_button" class="noVNC_button"
 | 
			
		||||
                        title="Toggle Alt"/>
 | 
			
		||||
                    <input type="image" alt="Tab" src="{% static "js/novnc/app/images/tab.svg" %}"
 | 
			
		||||
                        id="noVNC_send_tab_button" class="noVNC_button"
 | 
			
		||||
                        title="Send Tab"/>
 | 
			
		||||
                    <input type="image" alt="Esc" src="{% static "js/novnc/app/images/esc.svg" %}"
 | 
			
		||||
                        id="noVNC_send_esc_button" class="noVNC_button"
 | 
			
		||||
                        title="Send Escape"/>
 | 
			
		||||
                    <input type="image" alt="Ctrl+Alt+Del" src="{% static "js/novnc/app/images/ctrlaltdel.svg" %}"
 | 
			
		||||
                        id="noVNC_send_ctrl_alt_del_button" class="noVNC_button"
 | 
			
		||||
                        title="Send Ctrl-Alt-Del" />
 | 
			
		||||
                </div>
 | 
			
		||||
                </div>
 | 
			
		||||
            </div>
 | 
			
		||||
 | 
			
		||||
            <!-- Shutdown/Reboot -->
 | 
			
		||||
            <input type="image" alt="Shutdown/Reboot" src="{% static "js/novnc/app/images/power.svg" %}"
 | 
			
		||||
                id="noVNC_power_button" class="noVNC_button"
 | 
			
		||||
                title="Shutdown/Reboot..." />
 | 
			
		||||
            <div class="noVNC_vcenter">
 | 
			
		||||
            <div id="noVNC_power" class="noVNC_panel">
 | 
			
		||||
                <div class="noVNC_heading">
 | 
			
		||||
                    <img src="{% static "js/novnc/app/images/power.svg" %}"> Power
 | 
			
		||||
                </div>
 | 
			
		||||
                <input type="button" id="noVNC_shutdown_button" value="Shutdown" />
 | 
			
		||||
                <input type="button" id="noVNC_reboot_button" value="Reboot" />
 | 
			
		||||
                <input type="button" id="noVNC_reset_button" value="Reset" />
 | 
			
		||||
            </div>
 | 
			
		||||
            </div>
 | 
			
		||||
 | 
			
		||||
            <!-- Clipboard -->
 | 
			
		||||
            <input type="image" alt="Clipboard" src="{% static "js/novnc/app/images/clipboard.svg" %}"
 | 
			
		||||
                id="noVNC_clipboard_button" class="noVNC_button"
 | 
			
		||||
                title="Clipboard" />
 | 
			
		||||
            <div class="noVNC_vcenter">
 | 
			
		||||
            <div id="noVNC_clipboard" class="noVNC_panel">
 | 
			
		||||
                <div class="noVNC_heading">
 | 
			
		||||
                    <img src="{% static "js/novnc/app/images/clipboard.svg" %}"> Clipboard
 | 
			
		||||
                </div>
 | 
			
		||||
                <textarea id="noVNC_clipboard_text" rows=5></textarea>
 | 
			
		||||
                <br />
 | 
			
		||||
                <input id="noVNC_clipboard_clear_button" type="button"
 | 
			
		||||
                    value="Clear" class="noVNC_submit" />
 | 
			
		||||
            </div>
 | 
			
		||||
            </div>
 | 
			
		||||
 | 
			
		||||
            <!-- Toggle fullscreen -->
 | 
			
		||||
            <input type="image" alt="Fullscreen" src="{% static "js/novnc/app/images/fullscreen.svg" %}"
 | 
			
		||||
                id="noVNC_fullscreen_button" class="noVNC_button noVNC_hidden"
 | 
			
		||||
                title="Fullscreen" />
 | 
			
		||||
 | 
			
		||||
            <!-- Settings -->
 | 
			
		||||
            <input type="image" alt="Settings" src="{% static "js/novnc/app/images/settings.svg" %}"
 | 
			
		||||
                id="noVNC_settings_button" class="noVNC_button"
 | 
			
		||||
                title="Settings" />
 | 
			
		||||
            <div class="noVNC_vcenter">
 | 
			
		||||
            <div id="noVNC_settings" class="noVNC_panel">
 | 
			
		||||
                <ul>
 | 
			
		||||
                    <li class="noVNC_heading">
 | 
			
		||||
                        <img src="{% static "js/novnc/app/images/settings.svg" %}"> Settings
 | 
			
		||||
                    </li>
 | 
			
		||||
                    <li>
 | 
			
		||||
                        <label><input id="noVNC_setting_shared" type="checkbox" /> Shared Mode</label>
 | 
			
		||||
                    </li>
 | 
			
		||||
                    <li>
 | 
			
		||||
                        <label><input id="noVNC_setting_view_only" type="checkbox" /> View Only</label>
 | 
			
		||||
                    </li>
 | 
			
		||||
                    <li><hr></li>
 | 
			
		||||
                    <li>
 | 
			
		||||
                        <label><input id="noVNC_setting_view_clip" type="checkbox" /> Clip to Window</label>
 | 
			
		||||
                    </li>
 | 
			
		||||
                    <li>
 | 
			
		||||
                        <label for="noVNC_setting_resize">Scaling Mode:</label>
 | 
			
		||||
                        <select id="noVNC_setting_resize" name="vncResize">
 | 
			
		||||
                            <option value="off">None</option>
 | 
			
		||||
                            <option value="scale">Local Scaling</option>
 | 
			
		||||
                            <option value="remote">Remote Resizing</option>
 | 
			
		||||
                        </select>
 | 
			
		||||
                    </li>
 | 
			
		||||
                    <li><hr></li>
 | 
			
		||||
                    <li>
 | 
			
		||||
                        <div class="noVNC_expander">Advanced</div>
 | 
			
		||||
                        <div><ul>
 | 
			
		||||
                            <li>
 | 
			
		||||
                                <label for="noVNC_setting_repeaterID">Repeater ID:</label>
 | 
			
		||||
                                <input id="noVNC_setting_repeaterID" type="input" value="" />
 | 
			
		||||
                            </li>
 | 
			
		||||
                            <li>
 | 
			
		||||
                                <div class="noVNC_expander">WebSocket</div>
 | 
			
		||||
                                <div><ul>
 | 
			
		||||
                                    <li>
 | 
			
		||||
                                        <label><input id="noVNC_setting_encrypt" type="checkbox" /> Encrypt</label>
 | 
			
		||||
                                    </li>
 | 
			
		||||
                                    <li>
 | 
			
		||||
                                        <label for="noVNC_setting_host">Host:</label>
 | 
			
		||||
                                        <input id="noVNC_setting_host" value="{{ ws_host }}"/>
 | 
			
		||||
                                    </li>
 | 
			
		||||
                                    <li>
 | 
			
		||||
                                        <label for="noVNC_setting_port">Port:</label>
 | 
			
		||||
                                        <input id="noVNC_setting_port" value="{{ ws_port }}" type="number" />
 | 
			
		||||
                                    </li>
 | 
			
		||||
                                    <li>
 | 
			
		||||
                                        <label for="noVNC_setting_path">Path:</label>
 | 
			
		||||
                                        <input id="noVNC_setting_path" type="input" value="websockify" />
 | 
			
		||||
                                    </li>
 | 
			
		||||
                                </ul></div>
 | 
			
		||||
                            </li>
 | 
			
		||||
                            <li><hr></li>
 | 
			
		||||
                            <li>
 | 
			
		||||
                                <label><input id="noVNC_setting_reconnect" type="checkbox" /> Automatic Reconnect</label>
 | 
			
		||||
                                <input id="noVNC_setting_autoconnect" type="checkbox" value="true" hidden/>
 | 
			
		||||
                            </li>
 | 
			
		||||
                            <li>
 | 
			
		||||
                                <label for="noVNC_setting_reconnect_delay">Reconnect Delay (ms):</label>
 | 
			
		||||
                                <input id="noVNC_setting_reconnect_delay" type="number" />
 | 
			
		||||
                            </li>
 | 
			
		||||
                            <li><hr></li>
 | 
			
		||||
                            <!-- Logging selection dropdown -->
 | 
			
		||||
                            <li>
 | 
			
		||||
                                <label>Logging:
 | 
			
		||||
                                    <select id="noVNC_setting_logging" name="vncLogging">
 | 
			
		||||
                                    </select>
 | 
			
		||||
                                </label>
 | 
			
		||||
                            </li>
 | 
			
		||||
                        </ul></div>
 | 
			
		||||
                    </li>
 | 
			
		||||
                </ul>
 | 
			
		||||
            </div>
 | 
			
		||||
            </div>
 | 
			
		||||
 | 
			
		||||
            <!-- Connection Controls -->
 | 
			
		||||
            <input type="image" alt="Disconnect" src="{% static "js/novnc/app/images/disconnect.svg" %}"
 | 
			
		||||
                id="noVNC_disconnect_button" class="noVNC_button"
 | 
			
		||||
                title="Disconnect" />
 | 
			
		||||
 | 
			
		||||
            </div>
 | 
			
		||||
        </div>
 | 
			
		||||
 | 
			
		||||
        <div id="noVNC_control_bar_hint"></div>
 | 
			
		||||
 | 
			
		||||
    </div> <!-- End of noVNC_control_bar -->
 | 
			
		||||
 | 
			
		||||
    <!-- Status Dialog -->
 | 
			
		||||
    <div id="noVNC_status"></div>
 | 
			
		||||
 | 
			
		||||
    <!-- Connect button -->
 | 
			
		||||
    <div class="noVNC_center">
 | 
			
		||||
        <div id="noVNC_connect_dlg">
 | 
			
		||||
            <div class="noVNC_logo" translate="no"><span>no</span>VNC</div>
 | 
			
		||||
            <div id="noVNC_connect_button">
 | 
			
		||||
                <div>
 | 
			
		||||
                <img src="{% static "js/novnc/app/images/connect.svg" %}"> Connect
 | 
			
		||||
                </div>
 | 
			
		||||
            </div>
 | 
			
		||||
        </div>
 | 
			
		||||
    </div>
 | 
			
		||||
 | 
			
		||||
    <!-- Password Dialog -->
 | 
			
		||||
    <div class="noVNC_center noVNC_connect_layer">
 | 
			
		||||
    <div id="noVNC_password_dlg" class="noVNC_panel"><form>
 | 
			
		||||
        <ul>
 | 
			
		||||
            <li>
 | 
			
		||||
                <label>Password:</label>
 | 
			
		||||
                <input id="noVNC_password_input" type="password" />
 | 
			
		||||
            </li>
 | 
			
		||||
            <li>
 | 
			
		||||
                <input id="noVNC_password_button" type="submit" value="Send Password" class="noVNC_submit" />
 | 
			
		||||
            </li>
 | 
			
		||||
        </ul>
 | 
			
		||||
    </form></div>
 | 
			
		||||
    </div>
 | 
			
		||||
 | 
			
		||||
    <!-- Transition Screens -->
 | 
			
		||||
    <div id="noVNC_transition">
 | 
			
		||||
        <div id="noVNC_transition_text"></div>
 | 
			
		||||
        <div>
 | 
			
		||||
        <input type="button" id="noVNC_cancel_reconnect_button" value="Cancel" class="noVNC_submit" />
 | 
			
		||||
        </div>
 | 
			
		||||
        <div class="noVNC_spinner"></div>
 | 
			
		||||
    </div>
 | 
			
		||||
 | 
			
		||||
    <!-- This is where the RFB elements will attach -->
 | 
			
		||||
    <div id="noVNC_container">
 | 
			
		||||
        <!-- Note that Google Chrome on Android doesn't respect any of these,
 | 
			
		||||
             html attributes which attempt to disable text suggestions on the
 | 
			
		||||
             on-screen keyboard. Let's hope Chrome implements the ime-mode
 | 
			
		||||
             style for example -->
 | 
			
		||||
        <textarea id="noVNC_keyboardinput" autocapitalize="off"
 | 
			
		||||
            autocorrect="off" autocomplete="off" spellcheck="false"
 | 
			
		||||
            mozactionhint="Enter" tabindex="-1"></textarea>
 | 
			
		||||
    </div>
 | 
			
		||||
 | 
			
		||||
    <audio id="noVNC_bell">
 | 
			
		||||
        <source src="{% static "js/novnc/app/sounds/bell.oga" %}" type="audio/ogg">
 | 
			
		||||
        <source src="{% static "js/novnc/app/sounds/bell.mp3" %}" type="audio/mpeg">
 | 
			
		||||
    </audio>
 | 
			
		||||
{% endblock %}
 | 
			
		||||
| 
						 | 
				
			
			@ -204,6 +204,30 @@ function sendCtrlAltDel()
 | 
			
		|||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function sendCtrlAltFN(f) {
 | 
			
		||||
    if (sc && sc.inputs && sc.inputs.state === "ready"){
 | 
			
		||||
        var keys_code=[KEY_F1,KEY_F2,KEY_F3,KEY_F4,KEY_F5,KEY_F6,KEY_F7,KEY_F8,KEY_F9,KEY_F10,KEY_F11,KEY_F12];
 | 
			
		||||
 | 
			
		||||
        if (keys_code[f]==undefined) {
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
        var key = new SpiceMsgcKeyDown();
 | 
			
		||||
        var msg = new SpiceMiniData();
 | 
			
		||||
 | 
			
		||||
        update_modifier(true, KEY_LCtrl, sc);
 | 
			
		||||
        update_modifier(true, KEY_Alt, sc);
 | 
			
		||||
 | 
			
		||||
        key.code = keys_code[f];
 | 
			
		||||
        msg.build_msg(SPICE_MSGC_INPUTS_KEY_DOWN, key);
 | 
			
		||||
        sc.inputs.send_msg(msg);
 | 
			
		||||
        msg.build_msg(SPICE_MSGC_INPUTS_KEY_UP, key);
 | 
			
		||||
        sc.inputs.send_msg(msg);
 | 
			
		||||
 | 
			
		||||
        if(Ctrl_state == false) update_modifier(false, KEY_LCtrl, sc);
 | 
			
		||||
        if(Alt_state == false) update_modifier(false, KEY_Alt, sc);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function update_modifier(state, code, sc)
 | 
			
		||||
{
 | 
			
		||||
    var msg = new SpiceMiniData();
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue