Element: <oj-conveyor-belt>

Oracle® JavaScript Extension Toolkit (JET)
4.2.0

E91398-01

QuickNav

Attributes

PREVIEW: This is a preview API. Preview APIs are production quality, but can be changed on a major version without a deprecation path.

Version:
  • 4.2.0
Since:
  • 0.6

JET Custom Elements

JET components are implemented as custom HTML elements. A detailed description of working with these elements can be found in: JET Custom Element Usage.

JET ConveyorBelt

Description: Container element that manages overflow for its child elements and allows scrolling among them.

Child elements of the ConveyorBelt must all be siblings at the same level. The size of the ConveyorBelt must somehow be constrained in order for there to be overflow to manage, for example by specifying CSS max-width or max-height.

If the elements to be scrolled among are direct children of the ConveyorBelt, then ConveyorBelt will ensure that they are laid out appropriately for its orientation. However, if the elements to be scrolled among are contained by a single nested descendant element, the content-parent, then it is up to calling code to ensure that the elements are laid out appropriately. For example, elements can be forced horizontal by using CSS white-space:nowrap, or vertical by using display:block.


<oj-conveyor-belt>
  <oj-button>Alpha</oj-button>
  <oj-button>Beta</oj-button>
  <oj-button>Gamma</oj-button>
  <oj-button>Delta</oj-button>
  <oj-button>Epsilon</oj-button>
  <oj-button>Zeta</oj-button>
</oj-conveyor-belt>

Touch End User Information

Target Gesture Action
ConveyorBelt Swipe Transition to an adjacent logical page of child items.
Navigation Arrow Tap Transition to an adjacent logical page of child items.

Keyboard End User Information

ConveyorBelt is for layout only and does not directly support keyboard interaction. It is up to the application to provide keyboard support.

Keyboard Application Developer Information

Providing keyboard support for the items in the conveyor belt is the responsibility of the application developer, if the items do not already support keyboard interaction. This could be done, for example, by specifying tabindex on each item to enable tab navigation. Alternatively, this could be done by adding a keyboard listener and responding to key events, like pressing the arrow keys.

Accessibility

ConveyorBelt itself does nothing special for accessibility. It is the responsibility of the application developer to make the items in the conveyor accessible. Sighted keyboard-only users need to be able to access the items in the conveyor just by using the keyboard. It is up to the child items of the ConveyorBelt to support keyboard navigation. If child items support tab navigation, the browser may scroll them into view when they receive focus. If child items support other forms of keyboard navigation, for example by using the arrow keys, it is up to the child items to scroll themselves into view. This may be done, for example, by calling the DOM function focus() or scrollIntoView() on the item. ConveyorBelt will be aware of tab based or programmatic scrolling and will honor it, updating itself to toggle visibility of the overflow indicators as needed.

Reading direction

As with any JET element, in the unusual case that the directionality (LTR or RTL) changes post-init, the conveyorBelt must be refresh()ed.

Note: Application logic should not interact with the component's properties or invoke its methods until the BusyContext indicates that the component is ready for interaction.

Slots

JET elements can have up to two types of child content:

  • Any child element with a slot attribute will be moved into that named slot, e.g. <span slot='startIcon'>...</span>. All supported named slots are documented below. Child elements with unsupported named slots will be removed from the DOM.
  • Any child element lacking a slot attribute will be moved to the default slot, also known as a regular child. This is documented under the "Default" heading below.

Default

The <oj-conveyor-belt> element manages overflow for its child elements and allows scrolling among them. Child elements of the <oj-conveyor-belt> must all be siblings at the same level.

If the elements to be scrolled among are nested descendants and not direct children of the conveyor belt, the content-parent attribute should specify the nested elements direct parent.

Examples

Initialize the conveyor belt with child content specified:

<oj-conveyor-belt>
  <oj-button>Alpha</oj-button>
  <oj-button>Beta</oj-button>
  <oj-button>Gamma</oj-button>
  <oj-button>Delta</oj-button>
  <oj-button>Epsilon</oj-button>
  <oj-button>Zeta</oj-button>
</oj-conveyor-belt>

Initialize the conveyor belt with nested child content specified:

<oj-conveyor-belt content-parent='#myContentElem'>
  <div id='myContentElem'>
    <oj-button>Item 1</oj-button>
    <oj-button>Item 2</oj-button>
    <oj-button>Item 3</oj-button>
    <oj-button>Item 4</oj-button>
    <oj-button>Item 5</oj-button>
  </div>
</oj-conveyor-belt>

contextMenu

The contextMenu slot is set on the oj-menu within this element. This is used to designate the JET Menu that this component should launch as a context menu on right-click, Shift-F10, Press & Hold, or component-specific gesture. If specified, the browser's native context menu will be replaced by the JET Menu specified in this slot.

The application can register a listener for the Menu's ojBeforeOpen event. The listener can cancel the launch via event.preventDefault(), or it can customize the menu contents by editing the menu DOM directly, and then calling refresh() on the Menu.

To help determine whether it's appropriate to cancel the launch or customize the menu, the ojBeforeOpen listener can use component API's to determine which table cell, chart item, etc., is the target of the context menu. See the JSDoc and demos of the individual components for details.

Keep in mind that any such logic must work whether the context menu was launched via right-click, Shift-F10, Press & Hold, or component-specific touch gesture.

Example

Initialize the component with a context menu:

<oj-some-element>
    <-- use the contextMenu slot to designate this as the context menu for this component -->
    <oj-menu slot="contextMenu" style="display:none" aria-label="Some element's context menu">
...
    </oj-menu>
</oj-some-element>

Attributes

content-parent :string

Specify the selector of the descendant DOM element in the conveyorBelt that directly contains the items to scroll among.

This attribute value is null by default, meaning that the items to scroll among are direct children of the oj-conveyor-belt. In some cases, the items to scroll among are not direct children of the oj-conveyor-belt, but are instead nested in a descendant DOM element. In such cases, this attribute should be specified to point to the descendant DOM element whose direct children are the items to scroll among. For example, if the items to scroll among are buttons in a buttonset, the buttons are direct children of the DOM element representing the buttonset. The buttonset would be the direct child of the conveyorBelt. If the id of the buttonset DOM element were 'myContentElem', then content-parent would be specified as '#myContentElem'.

WARNING: The selector specified for this attribute should match only a single descendant DOM element. If multiple elements are matched, then only the first one will be used. Applications should not depend on this behavior because we reserve the right to change it in the future in order to allow and use multiple matching elements.

Default Value:
  • null
Names
Item Name
Property contentParent
Property change event contentParentChanged
Property change listener attribute (must be of type function) on-content-parent-changed
Examples

Initialize the conveyorBelt with the content-parent attribute specified:

<oj-conveyor-belt content-parent='#myContentElem'>
  <div id='myContentElem'>
    <oj-button>Item 1</oj-button>
    <oj-button>Item 2</oj-button>
    <oj-button>Item 3</oj-button>
    <oj-button>Item 4</oj-button>
    <oj-button>Item 5</oj-button>
  </div>
</oj-conveyor-belt>

Get or set the contentParent property after initialization:

// getter
var contentParent = myConveyorBelt.contentParent;

// setter
myConveyorBelt.contentParent = '#myContentElem';

orientation :string

Specify the orientation of the conveyorBelt.
Supported Values:
Name Type Description
"horizontal" string Orient the conveyorBelt horizontally.
"vertical" string Orient the conveyorBelt vertically.
Default Value:
  • "horizontal"
Names
Item Name
Property orientation
Property change event orientationChanged
Property change listener attribute (must be of type function) on-orientation-changed
Examples

Initialize the conveyorBelt with the orientation attribute specified:

<oj-conveyor-belt orientation='vertical'>
</oj-conveyor-belt>

Get or set the orientation property after initialization:

// getter
var orientation = myConveyorBelt.orientation;

// setter
myConveyorBelt.orientation = 'vertical';

translations :Object

A collection of translated resources from the translation bundle, or null if this component has no resources. Resources may be accessed and overridden individually or collectively, as seen in the examples.

If this component has translations, their documentation immediately follows this doc entry.

Default Value:
  • an object containing all resources relevant to the component, or null if none
Names
Item Name
Property translations
Property change event translationsChanged
Property change listener attribute (must be of type function) on-translations-changed
Examples

Initialize the component, overriding some translated resources and leaving the others intact:

<!-- Using dot notation -->
<oj-some-element translations.some-key='some value' translations.some-other-key='some other value'></oj-some-element>

<!-- Using JSON notation -->
<oj-some-element translations='{"someKey":"some value", "someOtherKey":"some other value"}'></oj-some-element>

Get or set the translations property after initialization:

// Get one
var value = myComponent.translations.someKey;

// Set one, leaving the others intact. Always use the setProperty API for 
// subproperties rather than setting a subproperty directly.
myComponent.setProperty('translations.someKey', 'some value');

// Get all
var values = myComponent.translations;

// Set all.  Must list every resource key, as those not listed are lost.
myComponent.translations = {
    someKey: 'some value',
    someOtherKey: 'some other value'
};

Methods

getProperty(property) → {*}

Retrieves a value for a property or a single subproperty for complex properties.
Parameters:
Name Type Description
property string The property name to get. Supports dot notation for subproperty access.
Returns:
Type
*
Example

Get a single subproperty of a complex property:

var subpropValue = myComponent.getProperty('complexProperty.subProperty1.subProperty2');

refresh()

Refreshes the visual state of the conveyorBelt. JET elements require a refresh() after the DOM is programmatically changed underneath the element.

This method does not accept any arguments.

Example

Invoke the refresh method:

myConveyorBelt.refresh();

setProperties(properties)

Performs a batch set of properties.
Parameters:
Name Type Description
properties Object An object containing the property and value pairs to set.
Example

Set a batch of properties:

myComponent.setProperties({"prop1": "value1", "prop2.subprop": "value2", "prop3": "value3"});

setProperty(property, value)

Sets a property or a single subproperty for complex properties and notifies the component of the change, triggering a [property]Changed event.
Parameters:
Name Type Description
property string The property name to set. Supports dot notation for subproperty access.
value * The new value to set the property to.
Example

Set a single subproperty of a complex property:

myComponent.setProperty('complexProperty.subProperty1.subProperty2', "someValue");