<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  <head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8" />
    <meta name="generator" content="JsDoc Toolkit" />
    
    <title>JsDoc Reference - rap</title>

    <style type="text/css">
      /* default.css */
body
{
	font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif;
	width: 800px;
}

.header
{
	clear: both;
	background-color: #ccc;
	padding: 8px;
}

h1
{
	font-size: 150%;
	font-weight: bold;
	padding: 0;
	margin: 1em 0 0 .3em;
}

hr
{
	border: none 0;
	border-top: 1px solid #7F8FB1;
	height: 1px;
}

pre.code
{
	display: block;
	padding: 8px;
	border: 1px dashed #ccc;
}

#index
{
	margin-top: 24px;
	float: left;
	width: 160px;
	position: absolute;
	left: 8px;
	background-color: #F3F3F3;
	padding: 8px;
}

#content
{
	margin-left: 190px;
	width: 600px;
}

.classList
{
	list-style-type: none;
	padding: 0;
	margin: 0 0 0 8px;
	font-family: arial, sans-serif;
	font-size: 1em;
	overflow: auto;
}

.classList li
{
	padding: 0;
	margin: 0 0 8px 0;
}

.summaryTable { width: 100%; }

h1.classTitle
{
	font-size:170%;
	line-height:130%;
}

h2 { font-size: 110%; }
caption, div.sectionTitle
{
	background-color: #7F8FB1;
	color: #fff;
	font-size:130%;
	text-align: left;
	padding: 2px 6px 2px 6px;
	border: 1px #7F8FB1 solid;
}

div.sectionTitle { margin-bottom: 8px; }
.summaryTable thead { display: none; }

.summaryTable td
{
	vertical-align: top;
	padding: 4px;
	border-bottom: 1px #7F8FB1 solid;
	border-right: 1px #7F8FB1 solid;
}

/*col#summaryAttributes {}*/
.summaryTable td.attributes
{
	border-left: 1px #7F8FB1 solid;
	width: 140px;
	text-align: right;
}

td.attributes, .fixedFont
{
	line-height: 15px;
	color: #002EBE;
	font-family: "Courier New",Courier,monospace;
	font-size: 13px;
}

.summaryTable td.nameDescription
{
	text-align: left;
	font-size: 13px;
	line-height: 15px;
}

.summaryTable td.nameDescription, .description
{
	line-height: 15px;
	padding: 4px;
	padding-left: 4px;
}

.summaryTable { margin-bottom: 8px; }

ul.inheritsList
{
	list-style: square;
	margin-left: 20px;
	padding-left: 0;
}

.detailList {
	margin-left: 20px; 
	line-height: 15px;
}
.detailList dt { margin-left: 20px; }

.detailList .heading
{
	font-weight: bold;
	padding-bottom: 6px;
	margin-left: 0;
}

.light, td.attributes, .light a:link, .light a:visited
{
	color: #777;
	font-style: italic;
}

.fineprint
{
	text-align: right;
	font-size: 10px;
}
    </style>
  </head>

  <body>
<!-- ============================== header ================================= -->
    <!-- begin static/header.html -->
    <div id="header">
</div>
    <!-- end static/header.html -->

<!-- ============================== classes index ============================ -->
    <div id="index">
      <!-- begin publish.classesIndex -->
      <div align="center"><a href="../index.html">Index</a></div>
<hr />
<h2>Global Objects</h2>
<ul class="classList">
  
  <li></li>
  
  <li></li>
  
  <li></li>
  
  <li></li>
  
  <li></li>
  
  <li></li>
  
  <li></li>
  
  <li></li>
  
  <li></li>
  
  <li></li>
  
  <li></li>
  
  <li></li>
  
  <li></li>
  
  <li></li>
  
  <li></li>
  
  <li></li>
  
  <li></li>
  
  <li><a href="../symbols/rap.html">rap</a></li>
  
  <li><a href="../symbols/SWT.html">SWT</a></li>
  
</ul>
<h2>Types</h2>
<ul class="classList">
  
  <li><a href="../symbols/%24.html">$</a></li>
  
  <li><a href="../symbols/Button.html">Button</a></li>
  
  <li><a href="../symbols/Canvas.html">Canvas</a></li>
  
  <li><a href="../symbols/Client.html">Client</a></li>
  
  <li><a href="../symbols/Combo.html">Combo</a></li>
  
  <li><a href="../symbols/Composite.html">Composite</a></li>
  
  <li><a href="../symbols/Control.html">Control</a></li>
  
  <li><a href="../symbols/Event.html">Event</a></li>
  
  <li><a href="../symbols/Label.html">Label</a></li>
  
  <li><a href="../symbols/ProgressBar.html">ProgressBar</a></li>
  
  <li><a href="../symbols/RemoteObject.html">RemoteObject</a></li>
  
  <li><a href="../symbols/Scale.html">Scale</a></li>
  
  <li><a href="../symbols/ScrolledComposite.html">ScrolledComposite</a></li>
  
  <li><a href="../symbols/Slider.html">Slider</a></li>
  
  <li><a href="../symbols/Spinner.html">Spinner</a></li>
  
  <li><a href="../symbols/Text.html">Text</a></li>
  
  <li><a href="../symbols/Widget.html">Widget</a></li>
  
  <li></li>
  
  <li></li>
  
</ul>
<hr />
      <!-- end publish.classesIndex -->
    </div>

    <div id="content">
<!-- ============================== class title ============================ -->
      <h1 class="classTitle">
        
        Object rap
      </h1>

<!-- ============================== class summary ========================== -->
      <p class="description">
        
        

        Holds all global public methods of the RAP WebClient.

      </p>

<!-- ============================== constructor summary ==================== -->
      
      <table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class rap.">
        <caption>Object Summary</caption>
        <thead>
          <tr>
            <th scope="col">Constructor Attributes</th>
            <th scope="col">Constructor Name and Description</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td class="attributes">&nbsp;</td>
            <td class="nameDescription" >
              <div class="fixedFont">
                <b><a href="../symbols/rap.html#constructor">rap</a></b>
              </div>
              <div class="description">Contains methods required for custom widget development and RWT Scripting.</div>
            </td>
          </tr>
        </tbody>
      </table>
      

<!-- ============================== properties summary ===================== -->
      

<!-- ============================== methods summary ======================== -->
      
        
        
        <table class="summaryTable" cellspacing="0" summary="A summary of the methods documented in the class rap.">
          <caption>Method Summary</caption>
          <thead>
            <tr>
              <th scope="col">Method Attributes</th>
              <th scope="col">Method Name and Description</th>
            </tr>
          </thead>
          <tbody>
          
            <tr>
              <td class="attributes">&lt;static&gt; &nbsp;</td>
              <td class="nameDescription">
                <div class="fixedFont">rap.<b><a href="../symbols/rap.html#.getClient">getClient</a></b>()
                </div>
                <div class="description">Returns an instance of Client object used for basic client detection.</div>
              </td>
            </tr>
          
            <tr>
              <td class="attributes">&lt;static&gt; &nbsp;</td>
              <td class="nameDescription">
                <div class="fixedFont">rap.<b><a href="../symbols/rap.html#.getObject">getObject</a></b>(id)
                </div>
                <div class="description">Returns the client object associated with the given id as returned
by <code>org.eclipse.rap.rwt.widget.WidgetUtil.getId</code> and
<code>org.eclipse.rap.rwt.remote.RemoteObject.getId</code>.</div>
              </td>
            </tr>
          
            <tr>
              <td class="attributes">&lt;static&gt; &nbsp;</td>
              <td class="nameDescription">
                <div class="fixedFont">rap.<b><a href="../symbols/rap.html#.getRemoteObject">getRemoteObject</a></b>(object)
                </div>
                <div class="description">Returns an instance of <a href="../symbols/RemoteObject.html">RemoteObject</a> for the given client object.</div>
              </td>
            </tr>
          
            <tr>
              <td class="attributes">&lt;static&gt; &nbsp;</td>
              <td class="nameDescription">
                <div class="fixedFont">rap.<b><a href="../symbols/rap.html#.off">off</a></b>(type, listener)
                </div>
                <div class="description">De-register the function as a listener of the given type.</div>
              </td>
            </tr>
          
            <tr>
              <td class="attributes">&lt;static&gt; &nbsp;</td>
              <td class="nameDescription">
                <div class="fixedFont">rap.<b><a href="../symbols/rap.html#.on">on</a></b>(type, listener)
                </div>
                <div class="description">Register the function as a listener of the given type.</div>
              </td>
            </tr>
          
            <tr>
              <td class="attributes">&lt;static&gt; &nbsp;</td>
              <td class="nameDescription">
                <div class="fixedFont">rap.<b><a href="../symbols/rap.html#.registerTypeHandler">registerTypeHandler</a></b>(type, handler)
                </div>
                <div class="description">Registers a RAP protocol type handler for a specific type of client objects.</div>
              </td>
            </tr>
          
          </tbody>
        </table>
        

        
      
<!-- ============================== events summary ======================== -->
      
        
        
        <table class="summaryTable" cellspacing="0" summary="A summary of the events documented in the class rap.">
          <caption>Event Summary</caption>
          <thead>
            <tr>
              <th scope="col">Event Attributes</th>
              <th scope="col">Event Name and Description</th>
            </tr>
          </thead>
          <tbody>
          
            <tr>
              <td class="attributes">&nbsp;</td>
              <td class="nameDescription">
                <div class="fixedFont">
                  
                  <b><a href="../symbols/rap.html#event:render">render</a></b>
                </div>
                <div class="description">Sent after a message has been processed.</div>
              </td>
            </tr>
          
            <tr>
              <td class="attributes">&nbsp;</td>
              <td class="nameDescription">
                <div class="fixedFont">
                  
                  <b><a href="../symbols/rap.html#event:send">send</a></b>
                </div>
                <div class="description">Sent right before a message is send to the server.</div>
              </td>
            </tr>
          
          </tbody>
        </table>
        

        
      

<!-- ============================== constructor details ==================== -->
      
      <div class="details"><a name="constructor"> </a>
        <div class="sectionTitle">
          Object Detail
        </div>

        <div class="fixedFont">
            <b>rap</b>
        </div>

        <div class="description">
          Contains methods required for custom widget development and RWT Scripting.
          
        </div>

        


          
          
          
            <dl class="detailList">
            <dt class="heading">Since:</dt>
              <dd>2.0</dd>
            </dl>
          
          
          
          
          

      </div>
      

<!-- ============================== field details ========================== -->
      

<!-- ============================== method details ========================= -->
      
        <div class="sectionTitle">
          Method Detail
        </div>
        
          <a name=".getClient"> </a>
          <div class="fixedFont">&lt;static&gt; 

          <span class="light">{<a href="../symbols/Client.html">Client</a>}</span>
          <span class="light">rap.</span><b>getClient</b>()

          </div>
          <div class="description">
            Returns an instance of Client object used for basic client detection.
            
          </div>

          

            
            
            
              <dl class="detailList">
              <dt class="heading">Since:</dt>
                <dd>3.2</dd>
              </dl>
              </dl>
            
            
            
              <dl class="detailList">
              <dt class="heading">Returns:</dt>
              
                <dd><span class="light fixedFont">{<a href="../symbols/Client.html">Client</a>}</span> </dd>
              
              </dl>
            
            
            

          <hr />
        
          <a name=".getObject"> </a>
          <div class="fixedFont">&lt;static&gt; 

          <span class="light">{Object}</span>
          <span class="light">rap.</span><b>getObject</b>(id)

          </div>
          <div class="description">
            Returns the client object associated with the given id as returned
by <code>org.eclipse.rap.rwt.widget.WidgetUtil.getId</code> and
<code>org.eclipse.rap.rwt.remote.RemoteObject.getId</code>.
If there is no object registered for the given id, <code>null</code> is returned.
For custom widgets, that is the result of the type handler factory.
For SWT/RWT widgets (any Control or Item) a wrapper (instance of <a href="../symbols/Widget.html">Widget</a>) is returned that approximates
a subset of the API of its Java analog. Getting objects of other types is unsupported.
            
          </div>

          

            
              <dl class="detailList">
              <dt class="heading">Parameters:</dt>
              
                <dt>
                  <span class="light fixedFont">{string}</span> <b>id</b>
                  
                </dt>
                <dd>The protocol id for a client object.</dd>
              
              </dl>
            
            
            
            
            
              <dl class="detailList">
              <dt class="heading">Returns:</dt>
              
                <dd><span class="light fixedFont">{Object}</span> The client object associated with the id.</dd>
              
              </dl>
            
            
            
              <dl class="detailList">
              <dt class="heading">See:</dt>
              
                <dd><a href="../symbols/Widget.html">Widget</a></dd>
              
                <dd><a href="../symbols/rap.html#.registerTypeHandler">rap.registerTypeHandler</a></dd>
              
              </dl>
            

          <hr />
        
          <a name=".getRemoteObject"> </a>
          <div class="fixedFont">&lt;static&gt; 

          <span class="light">{<a href="../symbols/RemoteObject.html">RemoteObject</a>}</span>
          <span class="light">rap.</span><b>getRemoteObject</b>(object)

          </div>
          <div class="description">
            Returns an instance of <a href="../symbols/RemoteObject.html">RemoteObject</a> for the given client object.
A client object is any object that was created by an type handler factory method.
Multiple calls for the same object will return the same RemoteObject
instance.
            
          </div>

          

            
              <dl class="detailList">
              <dt class="heading">Parameters:</dt>
              
                <dt>
                  <span class="light fixedFont">{Object}</span> <b>object</b>
                  
                </dt>
                <dd>The client object.</dd>
              
              </dl>
            
            
            
            
            
              <dl class="detailList">
              <dt class="heading">Returns:</dt>
              
                <dd><span class="light fixedFont">{<a href="../symbols/RemoteObject.html">RemoteObject</a>}</span> </dd>
              
              </dl>
            
            
            
              <dl class="detailList">
              <dt class="heading">See:</dt>
              
                <dd><a href="../symbols/rap.html#.registerTypeHandler">rap.registerTypeHandler</a></dd>
              
              </dl>
            

          <hr />
        
          <a name=".off"> </a>
          <div class="fixedFont">&lt;static&gt; 

          
          <span class="light">rap.</span><b>off</b>(type, listener)

          </div>
          <div class="description">
            De-register the function as a listener of the given type.
            
          </div>

          

            
              <dl class="detailList">
              <dt class="heading">Parameters:</dt>
              
                <dt>
                  <span class="light fixedFont">{string}</span> <b>type</b>
                  
                </dt>
                <dd>The type of the event</dd>
              
                <dt>
                  <span class="light fixedFont">{Function}</span> <b>listener</b>
                  
                </dt>
                <dd>The callback function</dd>
              
              </dl>
            
            
            
            
            
            
            

          <hr />
        
          <a name=".on"> </a>
          <div class="fixedFont">&lt;static&gt; 

          
          <span class="light">rap.</span><b>on</b>(type, listener)

          </div>
          <div class="description">
            Register the function as a listener of the given type. Registering unknown
types throws an Error.
            
          </div>

          

            
              <dl class="detailList">
              <dt class="heading">Parameters:</dt>
              
                <dt>
                  <span class="light fixedFont">{string}</span> <b>type</b>
                  
                </dt>
                <dd>The type of the event (e.g. "send").</dd>
              
                <dt>
                  <span class="light fixedFont">{Function}</span> <b>listener</b>
                  
                </dt>
                <dd>The callback function. It is executed in global context.</dd>
              
              </dl>
            
            
            
            
            
            
            

          <hr />
        
          <a name=".registerTypeHandler"> </a>
          <div class="fixedFont">&lt;static&gt; 

          
          <span class="light">rap.</span><b>registerTypeHandler</b>(type, handler)

          </div>
          <div class="description">
            Registers a RAP protocol type handler for a specific type of client objects.
The handler is used by the protocol message processor to process operations that target
any client object of this type. Example:
            
          </div>

          
          
          <pre class="code">rap.registerTypeHandler( "project.MyWidget", {
  factory : function( properties ) {
    return new MyWidget();
  },
  properties : [ "propA", "propB" ]
} );</pre>
          
          

            
              <dl class="detailList">
              <dt class="heading">Parameters:</dt>
              
                <dt>
                  <span class="light fixedFont">{string}</span> <b>type</b>
                  
                </dt>
                <dd></dd>
              
                <dt>
                  <span class="light fixedFont">{Object}</span> <b>handler</b>
                  
                </dt>
                <dd>The handler object.</dd>
              
                <dt>
                  <span class="light fixedFont">{Function}</span> <b>handler.factory</b>
                  
                </dt>
                <dd>Called for create operations.
Is given a properties object as the first argument, which may contain any number for
properties/fields set by the server. Has to return a "client object" representing an instance
of the type of this handler. <em>Required for all type handler</em>.</dd>
              
                <dt>
                  <span class="light fixedFont">{string}</span> <b>handler.destructor</b>
                  
                </dt>
                <dd>Name of the method that is called for destroy operations.
If the string is given, the client object <em>has</em> to implement a method with the given
name. <em>Optional</em></dd>
              
                <dt>
                  <span class="light fixedFont">{string[]}</span> <b>handler.properties</b>
                  
                </dt>
                <dd>List of properties supported by this type.
The order in the list controls the order in which the properties are applied by the message
processor. The client object <em>has</em> to implement a setter for each supported property.
For example, if the property is "bounds", <code>setBounds</code> will be called on the client
object. Properties given by the server that are not in this list will be ignored. (One
exception is the factory, which gets an object with <i>all</i> properties set by the server
at that time.)  If the property changes on the client, <a href="../symbols/RemoteObject.html#set">RemoteObject#set</a> can be
used to synchronize the value with the server.
<em>Optional.</em></dd>
              
                <dt>
                  <span class="light fixedFont">{string[]}</span> <b>handler.methods</b>
                  
                </dt>
                <dd>List of methods supported by this type.
The order in the list is meaningless, "call" operations are processed in the order in which
they are given by the server. The client object has to implement a method of the same name.
One argument will be given, which is a properties object with any number of properties/fields.
A "call" operation given by the server for a method that is not in this list will be ignored.
<em>Optional.</em></dd>
              
                <dt>
                  <span class="light fixedFont">{string[]}</span> <b>handler.events</b>
                  
                </dt>
                <dd>List of event types supported by this type.
The server may instruct the client object with "listen" operations to start or stop sending
notifications when events of he given event type occur. Notifications may and can only be
sent for types that are given in this list and are listened to by the server. See also
<a href="../symbols/RemoteObject.html#notify">RemoteObject#notify</a>.
<em>Optional.</em></dd>
              
              </dl>
            
            
            
            
            
            
            

          
        
      

<!-- ============================== event details ========================= -->
      
        <div class="sectionTitle">
          Event Detail
        </div>
        
          <a name="event:render"> </a>
          <div class="fixedFont">

          
          <b>render</b>

          </div>
          <div class="description">
            Sent after a message has been processed.
            
          </div>

          

            
            
            
            
            
            
            

          <hr />
        
          <a name="event:send"> </a>
          <div class="fixedFont">

          
          <b>send</b>

          </div>
          <div class="description">
            Sent right before a message is send to the server.
            
          </div>

          

            
            
            
            
            
            
            

          
        
      

      <hr />
    </div>


<!-- ============================== footer ================================= -->
    <div class="fineprint" style="clear:both">
      Copyright (c) EclipseSource and others 2013, 2022. All rights reserved.
    </div>
  </body>
</html>
