Element: <oj-collapsible>

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 Collapsible

Description: A JET Collapsible displays a header that can be expanded to show additional content beneath it. The child element of the oj-collapsible in the named header slot is displayed in the header, while the child element in the default slot is displayed as the content

Note for performance reasons, if the collapsible content is expensive to render, you should wrap it in an oj-defer element (API doc oj.ojDefer) to defer the rendering of that content.
See the Collapsible - Deferred Rendering demo for an example.


<oj-collapsible>
  <h3 slot='header'>Header 1</h3>
  <p>Content 1</p>
</oj-collapsible>

Touch End User Information

Target Gesture Action
Header Tap Toggle disclosure state

Keyboard End User Information

Target Key Action
Header Space or Enter Toggle disclosure state.

Disabled items can receive keyboard focus, but do not allow any other interaction.

Reading direction

In the unusual case that the directionality (LTR or RTL) changes post-init, the collapsible 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 default slot is the collapsible's content.

Example

Initialize the Collapsible with child content specified:

<oj-collapsible>
  <h3 slot='header'>Header 1</h3>
  <p>Content 1</p>
</oj-collapsible>

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>

The header slot is the collapsible's header. If not specified, the header contains only an open/close icon. Note that the header text is required for JET collapsible for accessibility purposes.

Example

Initialize the Collapsible with the header slot specified:

<oj-collapsible>
  <h3 slot='header'>Header 1</h3>
  <p>Content 1</p>
</oj-collapsible>

Attributes

disabled :boolean

Disables the collapsible if set to true.
Default Value:
  • false
Names
Item Name
Property disabled
Property change event disabledChanged
Property change listener attribute (must be of type function) on-disabled-changed
Examples

Initialize the collapsible with the disabled attribute specified:

<oj-collapsible disabled='true'></oj-collapsible>

Get or set the disabled property after initialization:

// getter
var disabledValue = myCollapsible.disabled;

// setter
myCollapsible.disabled = false;

expand-area :string

Where in the header to click to toggle disclosure.
Supported Values:
Name Type Description
"disclosureIcon" string click the disclosureIcon to toggle disclosure
"header" string click any where in the header to toggle disclosure
Default Value:
  • "header"
Names
Item Name
Property expandArea
Property change event expandAreaChanged
Property change listener attribute (must be of type function) on-expand-area-changed
Examples

Initialize the collapsible with the expand-area attribute specified:

<oj-collapsible expand-area='disclosureIcon'></oj-collapsible>

Get or set the expand-area property after initialization:

// getter
var expandAreaValue = myCollapsible.expandArea;

// setter
myCollapsible.expandArea = 'disclosureIcon';

expanded :boolean

Specifies if the content is expanded.
Default Value:
  • false
Supports writeback:
  • true
Names
Item Name
Property expanded
Property change event expandedChanged
Property change listener attribute (must be of type function) on-expanded-changed
Examples

Initialize the collapsible with the expanded attribute specified:

<oj-collapsible expanded='true'></oj-collapsible>

Get or set the expanded property after initialization:

// getter
var expandedValue = myCollapsible.expanded;

// setter
myCollapsible.expanded = false;

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'
};

Events

ojBeforeCollapse

Triggered immediately before the collapsible is collapsed. Call event.preventDefault() in the event listener to veto the event, which prevents the content from collapsing.
Properties:

All of the event payloads listed below can be found under event.detail.

Name Type Description
header Element The header that is about to be collapsed.
content Element The content that is about to be collapsed.
Examples

Specify an ojBeforeCollapse listener via the DOM attribute:

<oj-collapsible on-oj-before-collapse='[[listener]]'></oj-collapsible>

Specify an ojBeforeCollapse listener via the JavaScript property:

myCollapsible.onOjBeforeCollapse = listener;

Add an ojBeforeCollapse listener via the addEventListener API:

myCollapsible.addEventListener('ojBeforeCollapse', listener);

ojBeforeExpand

Triggered immediately before the collapsible is expanded. Call event.preventDefault() in the event listener to veto the event, which prevents the content from expanding.
Properties:

All of the event payloads listed below can be found under event.detail.

Name Type Description
header Element The header that is about to be expanded.
content Element The content that is about to be expanded.
Examples

Specify an ojBeforeExpand listener via the DOM attribute:

<oj-collapsible on-oj-before-expand='[[listener]]'></oj-collapsible>

Specify an ojBeforeExpand listener via the JavaScript property:

myCollapsible.onOjBeforeExpand = listener;

Add an ojBeforeExpand listener via the addEventListener API:

myCollapsible.addEventListener('ojBeforeExpand', listener);

ojCollapse

Triggered after the collapsible has been collapsed.
Properties:

All of the event payloads listed below can be found under event.detail.

Name Type Description
header Element The header that was just collapsed.
content Element The content that was just collapsed.
Examples

Specify an ojCollapse listener via the DOM attribute:

<oj-collapsible on-oj-collapse='[[listener]]'></oj-collapsible>

Specify an ojCollapse listener via the JavaScript property:

myCollapsible.onOjCollapse = listener;

Add an ojCollapse listener via the addEventListener API:

myCollapsible.addEventListener('ojCollapse', listener);

ojExpand

Triggered after the collapsible has been expanded (after animation completes).
Properties:

All of the event payloads listed below can be found under event.detail.

Name Type Description
header Element The header that was just expanded.
content Element The content that was just expanded.
Examples

Specify an ojExpand listener via the DOM attribute:

<oj-collapsible on-oj-expand='[[listener]]'></oj-collapsible>

Specify an ojExpand listener via the JavaScript property:

myCollapsible.onOjExpand = listener;

Add an ojExpand listener via the addEventListener API:

myCollapsible.addEventListener('ojExpand', listener);

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 collapsible.

This method does not accept any arguments.

Example

Invoke the refresh method:

myCollapsible.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");