+

Search Tips   |   Advanced Search

Custom drag sources and drop targets

Drag sources and drop targets must be created according to the HTML 5 specification. In HTML 5, the DataTransfer object is used to exchange data from source to target.

The source sets the data with dataTransfer.setData(format, data) and the target reads the data with dataTransfer.getData(format). WebSphere Portal always uses format = "Text". The data is a stringified JSON object with the following structure:

    { "uri" : URI }

In the previous example, the URI is the URI of the object that is dragged. If more than one object is dragged, the structure looks like this example.

    { "uri" : [ URI_1, URI_2, ... ] }

Each URI can have a list of parameters. In this case, the JSON object has the following structure.

    { "uri" : [ { key_11 : value_11, key_12 : value_12, ... }, URI_1, { key_21 : value_21, key_22 : value_22, ... }, URI_2, ... ] }

In the previous example, key_1x:value_1x are the parameters of URI_1 and key_2x:value_2x are the parameters of URI_2.

The theme module i$.dnd provides two convenience functions that simplify the creation of HTML 5 drag sources and drop targets. To create a drag source, use the following code.

    i$.dnd.addSource(parameter)

In the previous example, the parameter object needs to have the following elements:

    {DOMNode} parameter.node
    The DOM node that acts as the drag source.

    {String} parameter.type
    The type of data that is transferred, typically "Text".

    {Object} parameter.data
    The data to transfer when dropped. When we exchang data with a standard WebSphere Portal drop target, it must be a stringified JSON object with the structure described before.

    {DOMNode} parameter.avatar
    The DOM node to use as the DnD avatar. (optional)

    {Function} parameter.dragstart
    A function to start when dragstart is called. (optional) The following parameters are passed to this function:

      {Event} e
      The event. For example, use the event to set e.dataTransfer.effectAllowed = "copy";.

      {DOMNode} n
      The DomNode of the source area.

    {Function} parameter.dragend
    A function to start when dragend is called. It has the same parameters as parameter.dragstart. (optional)

To create a drop target, use the following code.

    i$.dnd.addTarget(parameter)

In the previous example, the parameter object must have the following elements:

    {DOMNode} parameter.node
    The DOMnode acting as the drop target.

    {String} parameter.type
    The type of data that is transferred, typically "Text".

    {Function} parameter.drop
    Function to handle the drop event. The following parameters are passed to this function:

      {Event} e
      The drop event.

      {DOMNode} n
      The DOM node of the drop target.

      {String} type
      The type of data that is transferred.

      {Object} data
      The data that was transferred from the drag source. When receiving data from standard WebSphere Portal drag sources, it is a stringified JSON object with the structure described before.

    {Function} parameter.dragenter
    Function to start when dragenter is called. (optional) The following parameters are passed to this function:

      {Event} e
      The event.

      {DOMNode} n
      The DOM node of the drop target.

    {Function} parameter.dragleave
    Function to start when dragend is called with the same parameters as dragenter. (optional)

    {Function} parameter.dragover
    Function to start when dragover is called with the same parameters as dragenter. (optional)


Parent Drag-and-drop