-# 1. Modules / API
-
-The noVNC client is a composed of several modular components that handle
-rendering, input, networking, etc. Each of the modules is designed to
-be cross-browser and be useful as a standalone library in other
-projects (see LICENSE.txt).
-
-
-## 1.1 Module List
-
-* __Mouse__ (core/input/devices.js): Mouse input event handler with
-limited touch support.
-
-* __Keyboard__ (core/input/devices.js): Keyboard input event handler with
-non-US keyboard support. Translates keyDown and keyUp events to X11
-keysym values.
-
-* __Display__ (core/display.js): Efficient 2D rendering abstraction
-layered on the HTML5 canvas element.
-
-* __Websock__ (core/websock.js): Websock client from websockify
-with transparent binary data support.
-[Websock API](https://github.com/kanaka/websockify/wiki/websock.js) wiki page.
-
-* __RFB__ (core/rfb.js): Main class that implements the RFB
-protocol and stitches the other classes together.
-
-
-## 1.2 Configuration Attributes
-
-The Mouse, Keyboard, Display and RFB classes have a similar API for
-configuration options. Each configuration option has a default value,
-which can be overridden by a a configuration object passed to the
-constructor. Configuration options can then be read and modified after
-initialization with "get_*" and "set_*" methods respectively. For
-example, the following initializes an RFB object with the 'encrypt'
-configuration option enabled, then confirms it was set, then disables
-it.
-
- var rfb = new RFB({'encrypt': true});
- if (rfb.get_encrypt()) {
- alert("Encryption is set");
- }
- rfb.set_encrypt(false);
-
-Some attributes are read-only and cannot be changed. For example, the
-Display 'render_mode' option will throw an exception if an attempt is
-made to set it. The attribute mode is one of the following:
-
- RO - read only
- RW - read write
- WO - write once
-
-
-## 1.3 Methods
-
-In addition to the getter and setter methods to modify configuration
-attributes, each of the modules has other methods that are available
-in the object instance. For example, the Display module has method
-named 'blitImage' which takes an array of pixel data and draws it to
-the 2D canvas.
-
-## 1.4 Callbacks
-
-Each of the modules has certain events that can be hooked with
-callback functions. For the Mouse, Keyboard, Display and RFB classes
-the callback functions are assigned to configuration attributes. The
-WebSock module has a method named 'on' that takes two parameters: the
-callback event name, and the callback function.
-
-## 2. Modules
-
-## 2.1 Mouse Module
-
-<table>
- <tr>
- <td colspan=5><em>Configuration Attributes</em></td>
- </tr>
- <tr>
- <th>name</th> <th>type</th> <th>mode</th> <th>default</th>
- <th>description</th>
- </tr>
- <tr>
- <td>target</td> <td>DOM</td> <td>WO</td> <td>document</td>
- <td>DOM element that captures mouse input</td>
- </tr>
- <tr>
- <td>focused</td> <td>bool</td> <td>RW</td> <td>true</td>
- <td>Capture and send mouse clicks/movement</td>
- </tr>
- <tr>
- <td>touchButton</td> <td>int</td> <td>RW</td> <td>1</td>
- <td>Button mask (1, 2, 4) for which click to send on touch
- devices. 0 means ignore clicks.</td>
- </tr>
- <tr><td colspan=5> </td></tr>
- <tr>
- <td colspan=5><em>Methods</em></td>
- </tr>
- <tr>
- <th>name</th><th colspan=3>parameters</th><th>description</th>
- </tr>
- <tr>
- <td>grab</td> <td colspan=3>()</td>
- <td>Begin capturing mouse events</td>
- </tr>
- <tr>
- <td>ungrab</td> <td colspan=3>()</td>
- <td>Stop capturing mouse events</td>
- </tr>
- <tr><td colspan=5> </td></tr>
- <tr>
- <td colspan=5><em>Callbacks</em></td>
- </tr>
- <tr>
- <th>name</th><th colspan=3>parameters</th><th>description</th>
- </tr>
- <tr>
- <td>onMouseButton</td> <td colspan=3>(x, y, down, bmask)</td>
- <td>Handler for mouse button click/release</td>
- </tr>
- <tr>
- <td>onMouseMove</td> <td colspan=3>(x, y)</td>
- <td>Handler for mouse movement</td>
- </tr>
-</table>
-
-
-## 2.2 Keyboard Module
-
-<table>
- <tr>
- <td colspan=5><em>Configuration Attributes</em></td>
- </tr>
- <tr>
- <th>name</th> <th>type</th> <th>mode</th> <th>default</th>
- <th>description</th>
- </tr>
- <tr>
- <td>target</td> <td>DOM</td> <td>WO</td> <td>document</td>
- <td>DOM element that captures keyboard input</td>
- </tr>
- <tr>
- <td>focused</td> <td>bool</td> <td>RW</td> <td>document</td>
- <td>Capture and send mouse key events</td>
- </tr>
- <tr><td colspan=5> </td></tr>
- <tr>
- <td colspan=5><em>Methods</em></td>
- </tr>
- <tr>
- <th>name</th><th colspan=3>parameters</th><th>description</th>
- </tr>
- <tr>
- <td>grab</td> <td colspan=3>()</td>
- <td>Begin capturing keyboard events</td>
- </tr>
- <tr>
- <td>ungrab</td> <td colspan=3>()</td>
- <td>Stop capturing keyboard events</td>
- </tr>
- <tr><td colspan=5> </td></tr>
- <tr>
- <td colspan=5><em>Callbacks</em></td>
- </tr>
- <tr>
- <th>name</th><th colspan=3>parameters</th><th>description</th>
- </tr>
- <tr>
- <td>onKeyPress</td> <td colspan=3>(keysym, code, down)</td>
- <td>Handler for key press/release</td>
- </tr>
-</table>
-
-
-## 2.3 Display Module
-
-<table>
- <tr>
- <td colspan=5><em>Configuration Attributes</em></td>
- </tr>
- <tr>
- <th>name</th> <th>type</th> <th>mode</th> <th>default</th>
- <th>description</th>
- </tr>
- <tr>
- <td>target</td> <td>DOM</td> <td>WO</td> <td></td>
- <td>Canvas element for rendering</td>
- </tr>
- <tr>
- <td>context</td> <td>raw</td> <td>RO</td> <td></td>
- <td>Canvas 2D context for rendering</td>
- </tr>
- <tr>
- <td>logo</td> <td>raw</td> <td>RW</td> <td></td>
- <td>Logo to display when cleared: {"width": width, "height": height, "type": mime-type, "data": data}</td>
- </tr>
- <tr>
- <td>scale</td> <td>float</td> <td>RW</td> <td>1.0</td>
- <td>Display area scale factor 0.0 - 1.0</td>
- </tr>
- <tr>
- <td>viewport</td> <td>bool</td> <td>RW</td> <td>false</td>
- <td>Use viewport clipping</td>
- </tr>
- <tr>
- <td>width</td> <td>int</td> <td>RO</td> <td></td>
- <td>Display area width</td>
- </tr>
- <tr>
- <td>height</td> <td>int</td> <td>RO</td> <td></td>
- <td>Display area height</td>
- </tr>
- <tr>
- <td>render_mode</td> <td>str</td> <td>RO</td> <td>''</td>
- <td>Canvas rendering mode</td>
- </tr>
- <tr>
- <td>prefer_js</td> <td>str</td> <td>RW</td> <td></td>
- <td>Prefer JavaScript over canvas methods</td>
- </tr>
- <tr>
- <td>cursor_uri</td> <td>raw</td> <td>RW</td> <td></td>
- <td>Can we render cursor using data URI</td>
- </tr>
- <tr><td colspan=5> </td></tr>
- <tr>
- <td colspan=5><em>Methods</em></td>
- </tr>
- <tr>
- <th>name</th><th colspan=3>parameters</th><th>description</th>
- </tr>
- <tr>
- <td>viewportChangePos</td> <td colspan=3>(deltaX, deltaY)</td>
- <td>Move the viewport relative to the current location</td>
- </tr>
- <tr>
- <td>viewportChangeSize</td> <td colspan=3>(width, height)</td>
- <td>Change size of the viewport</td>
- </tr>
- <tr>
- <td>absX</td> <td colspan=3>(x)</td>
- <td>Return X relative to the remote display</td>
- </tr>
- <tr>
- <td>absY</td> <td colspan=3>(y)</td>
- <td>Return Y relative to the remote display</td>
- </tr>
- <tr>
- <td>resize</td> <td colspan=3>(width, height)</td>
- <td>Set width and height</td>
- </tr>
- <tr>
- <td>flip</td> <td colspan=3>(from_queue)</td>
- <td>Update the visible canvas with the contents of the rendering canvas</td>
- </tr>
- <tr>
- <td>clear</td> <td colspan=3>()</td>
- <td>Clear the display (show logo if set)</td>
- </tr>
- <tr>
- <td>pending</td> <td colspan=3>()</td>
- <td>Check if there are waiting items in the render queue</td>
- </tr>
- <tr>
- <td>flush</td> <td colspan=3>()</td>
- <td>Resume processing the render queue unless it's empty</td>
- </tr>
- <tr>
- <td>fillRect</td> <td colspan=3>(x, y, width, height, color, from_queue)</td>
- <td>Draw a filled in rectangle</td>
- </tr>
- <tr>
- <td>copyImage</td> <td colspan=3>(old_x, old_y, new_x, new_y, width, height, from_queue)</td>
- <td>Copy a rectangular area</td>
- </tr>
- <tr>
- <td>imageRect</td> <td colspan=3>(x, y, mime, arr)</td>
- <td>Draw a rectangle with an image</td>
- </tr>
- <tr>
- <td>startTile</td> <td colspan=3>(x, y, width, height, color)</td>
- <td>Begin updating a tile</td>
- </tr>
- <tr>
- <td>subTile</td> <td colspan=3>(tile, x, y, w, h, color)</td>
- <td>Update a sub-rectangle within the given tile</td>
- </tr>
- <tr>
- <td>finishTile</td> <td colspan=3>()</td>
- <td>Draw the current tile to the display</td>
- </tr>
- <tr>
- <td>blitImage</td> <td colspan=3>(x, y, width, height, arr, offset, from_queue)</td>
- <td>Blit pixels (of R,G,B,A) to the display</td>
- </tr>
- <tr>
- <td>blitRgbImage</td> <td colspan=3>(x, y, width, height, arr, offset, from_queue)</td>
- <td>Blit RGB encoded image to display</td>
- </tr>
- <tr>
- <td>blitRgbxImage</td> <td colspan=3>(x, y, width, height, arr, offset, from_queue)</td>
- <td>Blit RGBX encoded image to display</td>
- </tr>
- <tr>
- <td>drawImage</td> <td colspan=3>(img, x, y)</td>
- <td>Draw image and track damage</td>
- </tr>
- <tr>
- <td>changeCursor</td> <td colspan=3>(pixels, mask, hotx, hoty, w, h)</td>
- <td>Change cursor appearance</td>
- </tr>
- <tr>
- <td>defaultCursor</td> <td colspan=3>()</td>
- <td>Restore default cursor appearance</td>
- </tr>
- <tr>
- <td>disableLocalCursor</td> <td colspan=3>()</td>
- <td>Disable local (client-side) cursor</td>
- </tr>
- <tr>
- <td>clippingDisplay</td> <td colspan=3>()</td>
- <td>Check if the remote display is larger than the client display</td>
- </tr>
- <tr>
- <td>autoscale</td> <td colspan=3>(containerWidth, containerHeight, downscaleOnly)</td>
- <td>Scale the display</td>
- </tr>
- <tr><td colspan=5> </td></tr>
- <tr>
- <td colspan=5><em>Callbacks</em></td>
- </tr>
- <tr>
- <th>name</th><th colspan=3>parameters</th><th>description</th>
- </tr>
- <tr>
- <td>onFlush</td> <td colspan=3>()</td>
- <td>A display flush has been requested and we are now ready to resume FBU processing</td>
- </tr>
-</table>
-
-
-## 2.4 RFB Module
-
-<table>
- <tr>
- <td colspan=5><em>Configuration Attributes</em></td>
- </tr>
- <tr>
- <th>name</th> <th>type</th> <th>mode</th> <th>default</th>
- <th>description</th>
- </tr>
- <tr>
- <td>target</td> <td>DOM</td> <td>WO</td> <td>null</td>
- <td>Canvas element for rendering (passed to Display and Mouse)</td>
- </tr>
- <tr>
- <td>focusContainer</td> <td>DOM</td> <td>WO</td> <td>document</td>
- <td>DOM element that captures keyboard input (passed to Keyboard)</td>
- </tr>
- <tr>
- <td>encrypt</td> <td>bool</td> <td>RW</td> <td>false</td>
- <td>Use TLS/SSL encryption</td>
- </tr>
- <tr>
- <td>local_cursor</td> <td>bool</td> <td>RW</td> <td>false</td>
- <td>Request locally rendered cursor</td>
- </tr>
- <tr>
- <td>shared</td> <td>bool</td> <td>RW</td> <td>true</td>
- <td>Request shared VNC mode</td>
- </tr>
- <tr>
- <td>view_only</td> <td>bool</td> <td>RW</td> <td>false</td>
- <td>Disable client mouse/keyboard</td>
- </tr>
- <tr>
- <td>xvp_password_sep</td> <td>str</td> <td>RW</td> <td>'@'</td>
- <td>Separator for XVP password fields</td>
- </tr>
- <tr>
- <td>disconnectTimeout</td> <td>int</td> <td>RW</td> <td>3</td>
- <td>Time (in seconds) to wait for disconnection</td>
- </tr>
- <tr>
- <td>wsProtocols</td> <td>arr</td> <td>RW</td> <td>['binary']</td>
- <td>Protocols to use in the WebSocket connection</td>
- </tr>
- <tr>
- <td>repeaterID</td> <td>str</td> <td>RW</td> <td>''</td>
- <td>UltraVNC RepeaterID to connect to</td>
- </tr>
- <tr>
- <td>viewportDrag</td> <td>bool</td> <td>RW</td> <td>false</td>
- <td>Move the viewport on mouse drags</td>
- </tr>
- <tr><td colspan=5> </td></tr>
- <tr>
- <td colspan=5><em>Methods</em></td>
- </tr>
- <tr>
- <th>name</th><th colspan=3>parameters</th><th>description</th>
- </tr>
- <tr>
- <td>connect</td> <td colspan=3>(host, port, password, path)</td>
- <td>Connect to the given host:port/path. Optional password and path.</td>
- </tr>
- <tr>
- <td>disconnect</td> <td colspan=3>()</td>
- <td>Disconnect</td>
- </tr>
- <tr>
- <td>sendPassword</td> <td colspan=3>(passwd)</td>
- <td>Send password after onPasswordRequired callback</td>
- </tr>
- <tr>
- <td>sendCtrlAltDel</td> <td colspan=3>()</td>
- <td>Send Ctrl-Alt-Del key sequence</td>
- </tr>
- <tr>
- <td>xvpOp</td> <td colspan=3>(ver, op)</td>
- <td>Send a XVP operation (2=shutdown, 3=reboot, 4=reset)</td>
- </tr>
- <tr>
- <td>xvpShutdown</td> <td colspan=3>()</td>
- <td>Send XVP shutdown.</td>
- </tr>
- <tr>
- <td>xvpReboot</td> <td colspan=3>()</td>
- <td>Send XVP reboot.</td>
- </tr>
- <tr>
- <td>xvpReset</td> <td colspan=3>()</td>
- <td>Send XVP reset.</td>
- </tr>
- <tr>
- <td>sendKey</td> <td colspan=3>(keysym, down)</td>
- <td>Send a key press event. If down not specified, send a down and up event.</td>
- </tr>
- <tr>
- <td>clipboardPasteFrom</td> <td colspan=3>(text)</td>
- <td>Send a clipboard paste event</td>
- </tr>
- <tr>
- <td>requestDesktopSize</td> <td colspan=3>(width, height)</td>
- <td>Send a request to change the remote desktop size.</td>
- </tr>
- <tr><td colspan=5> </td></tr>
- <tr>
- <td colspan=5><em>Callbacks</em></td>
- </tr>
- <tr>
- <th>name</th><th colspan=3>parameters</th><th>description</th>
- </tr>
- <tr>
- <td>onUpdateState</td> <td colspan=3>(rfb, state, oldstate)</td>
- <td>Connection state change (see details below)</td>
- </tr>
- <tr>
- <td>onNotification</td> <td colspan=3>(rfb, msg, level, options)</td>
- <td>Notification for the UI (optional options)</td>
- </tr>
- <tr>
- <td>onDisconnected</td> <td colspan=3>(rfb, reason)</td>
- <td>Disconnection finished with an optional reason. No reason specified means normal disconnect.</td>
- </tr>
- <tr>
- <td>onPasswordRequired</td> <td colspan=3>(rfb, msg)</td>
- <td>VNC password is required (use sendPassword), optionally comes with a message.</td>
- </tr>
- <tr>
- <td>onClipboard</td> <td colspan=3>(rfb, text)</td>
- <td>RFB clipboard contents received</td>
- </tr>
- <tr>
- <td>onBell</td> <td colspan=3>(rfb)</td>
- <td>RFB Bell message received</td>
- </tr>
- <tr>
- <td>onFBUReceive</td> <td colspan=3>(rfb, fbu)</td>
- <td>RFB FBU received but not yet processed (see details below)</td>
- </tr>
- <tr>
- <td>onFBUComplete</td> <td colspan=3>(rfb, fbu)</td>
- <td>RFB FBU received and processed (see details below)</td>
- </tr>
- <tr>
- <td>onFBResize</td> <td colspan=3>(rfb, width, height)</td>
- <td>Frame buffer (remote desktop) size changed</td>
- </tr>
- <tr>
- <td>onDesktopName</td> <td colspan=3>(rfb, name)</td>
- <td>VNC desktop name recieved</td>
- </tr>
- <tr>
- <td>onXvpInit</td> <td colspan=3>(version)</td>
- <td>XVP extensions active for this connection.</td>
- </tr>
-</table>
-
-
-__RFB onUpdateState callback details__
-
-The RFB module has an 'onUpdateState' callback that is invoked after
-the noVNC connection state changes. Here is a list of the states that
-are reported.
-
-<table>
- <tr>
- <td colspan=2><em>Connection States</em></td>
- </tr>
- <tr>
- <th>state</th> <th>description</th>
- </tr>
- <tr>
- <td>connecting</td> <td>starting to connect</td>
- </tr>
- <tr>
- <td>connected</td> <td>connected normally</td>
- </tr>
- <tr>
- <td>disconnecting</td> <td>starting to disconnect</td>
- </tr>
- <tr>
- <td>disconnected</td> <td>disconnected - permanent end-state for this RFB object</td>
- </tr>
-</table>
-
-__RFB onFBUReceive and on FBUComplete callback details__
-
-The onFBUReceive callback is invoked when a frame buffer update
-message has been received from the server but before the RFB class has
-done any additional handling. The onFBUComplete callback is invoked
-with the same information but after the RFB class has handled the
-message.
-
-The 'fbu' parameter is an object with the following structure:
-
- {
- x: FBU_x_position,
- y: FBU_y_position,
- width: FBU_width,
- height: FBU_height,
- encoding: FBU_encoding_number,
- encodingName: FBU_encoding_string
- }
\ No newline at end of file
+# noVNC API
+
+The interface of the noVNC client consists of a single RFB object that
+is instantiated once per connection.
+
+## RFB
+
+The `RFB` object represents a single connection to a VNC server. It
+communicates using a WebSocket that must provide a standard RFB
+protocol stream.
+
+### Constructor
+
+[`RFB()`](#rfb-1)
+ - Creates and returns a new `RFB` object.
+
+### Properties
+
+`viewOnly`
+ - Is a `boolean` indicating if any events (e.g. key presses or mouse
+ movement) should be prevented from being sent to the server.
+ Disabled by default.
+
+`focusOnClick`
+ - Is a `boolean` indicating if keyboard focus should automatically be
+ moved to the remote session when a `mousedown` or `touchstart`
+ event is received. Enabled by default.
+
+`touchButton`
+ - Is a `long` controlling the button mask that should be simulated
+ when a touch event is recieved. Uses the same values as
+ [`MouseEvent.button`](https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/button).
+ Is set to `1` by default.
+
+`clipViewport`
+ - Is a `boolean` indicating if the remote session should be clipped
+ to its container. When disabled scrollbars will be shown to handle
+ the resulting overflow. Disabled by default.
+
+`dragViewport`
+ - Is a `boolean` indicating if mouse events should control the
+ relative position of a clipped remote session. Only relevant if
+ `clipViewport` is enabled. Disabled by default.
+
+`scaleViewport`
+ - Is a `boolean` indicating if the remote session should be scaled
+ locally so it fits its container. When disabled it will be centered
+ if the remote session is smaller than its container, or handled
+ according to `clipViewport` if it is larger. Disabled by default.
+
+`resizeSession`
+ - Is a `boolean` indicating if a request to resize the remote session
+ should be sent whenever the container changes dimensions. Disabled
+ by default.
+
+`showDotCursor`
+ - Is a `boolean` indicating whether a dot cursor should be shown
+ instead of a zero-sized or fully-transparent cursor if the server
+ sets such invisible cursor. Disabled by default.
+
+`background`
+ - Is a valid CSS [background](https://developer.mozilla.org/en-US/docs/Web/CSS/background)
+ style value indicating which background style should be applied
+ to the element containing the remote session screen. The default value is `rgb(40, 40, 40)`
+ (solid gray color).
+
+`qualityLevel`
+ - Is an `int` in range `[0-9]` controlling the desired JPEG quality.
+ Value `0` implies low quality and `9` implies high quality.
+ Default value is `6`.
+
+`compressionLevel`
+ - Is an `int` in range `[0-9]` controlling the desired compression
+ level. Value `0` means no compression. Level 1 uses a minimum of CPU
+ resources and achieves weak compression ratios, while level 9 offers
+ best compression but is slow in terms of CPU consumption on the server
+ side. Use high levels with very slow network connections.
+ Default value is `2`.
+
+`capabilities` *Read only*
+ - Is an `Object` indicating which optional extensions are available
+ on the server. Some methods may only be called if the corresponding
+ capability is set. The following capabilities are defined:
+
+ | name | type | description
+ | -------- | --------- | -----------
+ | `power` | `boolean` | Machine power control is available
+
+### Events
+
+[`connect`](#connect)
+ - The `connect` event is fired when the `RFB` object has completed
+ the connection and handshaking with the server.
+
+[`disconnect`](#disconnected)
+ - The `disconnect` event is fired when the `RFB` object disconnects.
+
+[`credentialsrequired`](#credentialsrequired)
+ - The `credentialsrequired` event is fired when more credentials must
+ be given to continue.
+
+[`securityfailure`](#securityfailure)
+ - The `securityfailure` event is fired when the security negotiation
+ with the server fails.
+
+[`clipboard`](#clipboard)
+ - The `clipboard` event is fired when clipboard data is received from
+ the server.
+
+[`bell`](#bell)
+ - The `bell` event is fired when a audible bell request is received
+ from the server.
+
+[`desktopname`](#desktopname)
+ - The `desktopname` event is fired when the remote desktop name
+ changes.
+
+[`capabilities`](#capabilities)
+ - The `capabilities` event is fired when `RFB.capabilities` is
+ updated.
+
+### Methods
+
+[`RFB.disconnect()`](#rfbdisconnect)
+ - Disconnect from the server.
+
+[`RFB.sendCredentials()`](#rfbsendcredentials)
+ - Send credentials to server. Should be called after the
+ [`credentialsrequired`](#credentialsrequired) event has fired.
+
+[`RFB.sendKey()`](#rfbsendKey)
+ - Send a key event.
+
+[`RFB.sendCtrlAltDel()`](#rfbsendctrlaltdel)
+ - Send Ctrl-Alt-Del key sequence.
+
+[`RFB.focus()`](#rfbfocus)
+ - Move keyboard focus to the remote session.
+
+[`RFB.blur()`](#rfbblur)
+ - Remove keyboard focus from the remote session.
+
+[`RFB.machineShutdown()`](#rfbmachineshutdown)
+ - Request a shutdown of the remote machine.
+
+[`RFB.machineReboot()`](#rfbmachinereboot)
+ - Request a reboot of the remote machine.
+
+[`RFB.machineReset()`](#rfbmachinereset)
+ - Request a reset of the remote machine.
+
+[`RFB.clipboardPasteFrom()`](#rfbclipboardPasteFrom)
+ - Send clipboard contents to server.
+
+### Details
+
+#### RFB()
+
+The `RFB()` constructor returns a new `RFB` object and initiates a new
+connection to a specified VNC server.
+
+##### Syntax
+
+ let rfb = new RFB( target, url [, options] );
+
+###### Parameters
+
+**`target`**
+ - A block [`HTMLElement`](https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement)
+ that specifies where the `RFB` object should attach itself. The
+ existing contents of the `HTMLElement` will be untouched, but new
+ elements will be added during the lifetime of the `RFB` object.
+
+**`url`**
+ - A `DOMString` specifying the VNC server to connect to. This must be
+ a valid WebSocket URL.
+
+**`options`** *Optional*
+ - An `Object` specifying extra details about how the connection
+ should be made.
+
+ Possible options:
+
+ `shared`
+ - A `boolean` indicating if the remote server should be shared or
+ if any other connected clients should be disconnected. Enabled
+ by default.
+
+ `credentials`
+ - An `Object` specifying the credentials to provide to the server
+ when authenticating. The following credentials are possible:
+
+ | name | type | description
+ | ------------ | ----------- | -----------
+ | `"username"` | `DOMString` | The user that authenticates
+ | `"password"` | `DOMString` | Password for the user
+ | `"target"` | `DOMString` | Target machine or session
+
+ `repeaterID`
+ - A `DOMString` specifying the ID to provide to any VNC repeater
+ encountered.
+
+ `wsProtocols`
+ - An `Array` of `DOMString`s specifying the sub-protocols to use
+ in the WebSocket connection. Empty by default.
+
+#### connect
+
+The `connect` event is fired after all the handshaking with the server
+is completed and the connection is fully established. After this event
+the `RFB` object is ready to recieve graphics updates and to send input.
+
+#### disconnect
+
+The `disconnect` event is fired when the connection has been
+terminated. The `detail` property is an `Object` that contains the
+property `clean`. `clean` is a `boolean` indicating if the termination
+was clean or not. In the event of an unexpected termination or an error
+`clean` will be set to false.
+
+#### credentialsrequired
+
+The `credentialsrequired` event is fired when the server requests more
+credentials than were specified to [`RFB()`](#rfb-1). The `detail`
+property is an `Object` containing the property `types` which is an
+`Array` of `DOMString` listing the credentials that are required.
+
+#### securityfailure
+
+The `securityfailure` event is fired when the handshaking process with
+the server fails during the security negotiation step. The `detail`
+property is an `Object` containing the following properties:
+
+| Property | Type | Description
+| -------- | ----------- | -----------
+| `status` | `long` | The failure status code
+| `reason` | `DOMString` | The **optional** reason for the failure
+
+The property `status` corresponds to the
+[SecurityResult](https://github.com/rfbproto/rfbproto/blob/master/rfbproto.rst#securityresult)
+status code in cases of failure. A status of zero will not be sent in
+this event since that indicates a successful security handshaking
+process. The optional property `reason` is provided by the server and
+thus the language of the string is not known. However most servers will
+probably send English strings. The server can choose to not send a
+reason and in these cases the `reason` property will be omitted.
+
+#### clipboard
+
+The `clipboard` event is fired when the server has sent clipboard data.
+The `detail` property is an `Object` containing the property `text`
+which is a `DOMString` with the clipboard data.
+
+#### bell
+
+The `bell` event is fired when the server has requested an audible
+bell.
+
+#### desktopname
+
+The `desktopname` event is fired when the name of the remote desktop
+changes. The `detail` property is an `Object` with the property `name`
+which is a `DOMString` specifying the new name.
+
+#### capabilities
+
+The `capabilities` event is fired whenever an entry is added or removed
+from `RFB.capabilities`. The `detail` property is an `Object` with the
+property `capabilities` containing the new value of `RFB.capabilities`.
+
+#### RFB.disconnect()
+
+The `RFB.disconnect()` method is used to disconnect from the currently
+connected server.
+
+##### Syntax
+
+ RFB.disconnect( );
+
+#### RFB.sendCredentials()
+
+The `RFB.sendCredentials()` method is used to provide the missing
+credentials after a `credentialsrequired` event has been fired.
+
+##### Syntax
+
+ RFB.sendCredentials( credentials );
+
+###### Parameters
+
+**`credentials`**
+ - An `Object` specifying the credentials to provide to the server
+ when authenticating. See [`RFB()`](#rfb-1) for details.
+
+#### RFB.sendKey()
+
+The `RFB.sendKey()` method is used to send a key event to the server.
+
+##### Syntax
+
+ RFB.sendKey( keysym, code [, down] );
+
+###### Parameters
+
+**`keysym`**
+ - A `long` specifying the RFB keysym to send. Can be `0` if a valid
+ **`code`** is specified.
+
+**`code`**
+ - A `DOMString` specifying the physical key to send. Valid values are
+ those that can be specified to
+ [`KeyboardEvent.code`](https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/code).
+ If the physical key cannot be determined then `null` shall be
+ specified.
+
+**`down`** *Optional*
+ - A `boolean` specifying if a press or a release event should be
+ sent. If omitted then both a press and release event are sent.
+
+#### RFB.sendCtrlAltDel()
+
+The `RFB.sendCtrlAltDel()` method is used to send the key sequence
+*left Control*, *left Alt*, *Delete*. This is a convenience wrapper
+around [`RFB.sendKey()`](#rfbsendkey).
+
+##### Syntax
+
+ RFB.sendCtrlAltDel( );
+
+#### RFB.focus()
+
+The `RFB.focus()` method sets the keyboard focus on the remote session.
+Keyboard events will be sent to the remote server after this point.
+
+##### Syntax
+
+ RFB.focus( );
+
+#### RFB.blur()
+
+The `RFB.blur()` method remove keyboard focus on the remote session.
+Keyboard events will no longer be sent to the remote server after this
+point.
+
+##### Syntax
+
+ RFB.blur( );
+
+#### RFB.machineShutdown()
+
+The `RFB.machineShutdown()` method is used to request to shut down the
+remote machine. The capability `power` must be set for this method to
+have any effect.
+
+##### Syntax
+
+ RFB.machineShutdown( );
+
+#### RFB.machineReboot()
+
+The `RFB.machineReboot()` method is used to request a clean reboot of
+the remote machine. The capability `power` must be set for this method
+to have any effect.
+
+##### Syntax
+
+ RFB.machineReboot( );
+
+#### RFB.machineReset()
+
+The `RFB.machineReset()` method is used to request a forced reset of
+the remote machine. The capability `power` must be set for this method
+to have any effect.
+
+##### Syntax
+
+ RFB.machineReset( );
+
+#### RFB.clipboardPasteFrom()
+
+The `RFB.clipboardPasteFrom()` method is used to send clipboard data
+to the remote server.
+
+##### Syntax
+
+ RFB.clipboardPasteFrom( text );
+
+###### Parameters
+
+**`text`**
+ - A `DOMString` specifying the clipboard data to send. Currently only
+ characters from ISO 8859-1 are supported.