Instance
Relapse requires initialization to function, meaning you need to call relapse()
. While configuration is optional, you have the flexibility to control settings through data-attribute annotation (see options). All instances are diligently tracked by Relapse in a global data structure, that is made accessible via a window.relapse
getter.
When initializing Relapse, the nature of the resulting instance is determined by the parameters provided. Specifically, the instance type which will be either an array of Relapse[]
instances or a singular Relapse
instance. This distinction is based on the nature of the parameter argument/s, more on this below.
Single Instance
To initialize and return a singular instance, simply pass an HTMLElement
selector to the relapse
function as the first parameter argument. You can provide either a string
selector or an actual element. When passing a selector, Relapse will return a single instance.
Each single instance is integrated into the global store and can be accessed anywhere in your web application via the relapse.get('id')
method, but only after initialization. This is a streamlined process and ensures that the instance can be readily accessible for future interactions and management within the broader context of your web application.
All the below examples will return a single instance of
Relapse
that be interfaced and controlled directly.
Option 1
Passing a selector and use default options:
import relapse from 'relapse';
const toggle = relapse('.selector'); // => Relapse
Option 2
Passing a element and use default options:
import relapse from 'relapse';
const element = document.querySelector('#xxx');
const toggle = relapse(element); // => Relapse
Option 3
Passing a selector with options:
import relapse from 'relapse';
const toggle = relapse('.selector', {
schema: 'data-relapse',
persist: false,
multiple: false,
unique: true,
fold: {
duration: 220,
easing: 'ease-in-out',
},
fade: {
duration: 120,
transition: 'linear',
}
classes: {
opened: 'opened',
expanded: 'expanded',
disabled: 'disabled'
}
});
Multiple Instances
When dealing with multiple instances of Relapse within the DOM, a convenient approach is to leverage data attribute annotation for initialization. This method, is the default behavior of the module whenever the selector parameter is omitted. Attribute driven initialization is determined by the omission of a selector
(or HTMLElement
) argument.
Simply put, elements containing a data-relapse
attribute or an attribute that matches the specified schema
option will be automatically initialized upon detection in the DOM. To achieve this, you can call relapse()
without any parameters or provide an options object of configuration settings. In scenarios where no selector argument is passed as per the above single instance example, invoking relapse()
results in the return of an array list comprising multiple Relapse instances.
Option 1
Initialize on all elements using data-relapse
attribute. This is the default behavior.
import relapse from 'relapse';
const toggle = relapse(); // => Relapse[]
Option 2
Initialize on all elements using a custom attribute of data-foo
instead of using data-relapse
default.
import relapse from 'relapse';
const toggle = relapse({ schema: 'data-foo' }); // => Relapse[]
Option 3
Initialize on all elements using using data-relapse
and also provide options for the instance.
import relapse from 'relapse';
const toggle = relapse({
schema: 'data-relapse',
persist: false,
multiple: false,
unique: true,
fold: {
duration: 220,
easing: 'ease-in-out',
},
fade: {
duration: 120,
transition: 'linear',
}
classes: {
opened: 'opened',
expanded: 'expanded',
disabled: 'disabled'
}
}); // => Relapse[]
Global Store
As aforementioned, Relapse maintains a store reference for all its instances within a global data structure, accessible through the window.relapse
getter. This global store exposes access to any or all instances of Relapse in the DOM from any part of your web application.
For instance, let’s consider three distinct Relapse occurrences in your web page, identified as foo
, bar
, and baz
. To initialize them succinctly, you can employ the following code snippet in your bundle:
import relapse from 'relapse';
relapse(); // Initialize on all elements using the data-relapse attribute
Subsequently, Relapse makes each instance globally available, allowing you to access them seamlessly:
window.relapse.get('foo'); // => Relapse
window.relapse.get('bar'); // => Relapse
window.relapse.get('baz'); // => Relapse
Alternatively, you can utilize the default import method for a more concise syntax:
import relapse from 'relapse';
relapse.get('foo'); // => Relapse
relapse.get('bar'); // => Relapse
relapse.get('baz'); // => Relapse
Global Methods
The default relapse
export provides a couple of methods that you can interface with. Typically, you’ll use relapse on a per-element basis, but in cases where you need to query the global store, you can reach for the global methods.
import relapse from 'relapse';
relapse.get(); // Returns all instances
relapse.get('foo'); // Returns instance using id of foo
relapse.get(['foo', 'bar']) // Returns instances using ids foo and bar
relapse.has(); // Whether or not instances exist
relapse.has('foo'); // Whether or not instance of foo exists
relapse.has(['foo', 'bar']) // Whether or not instances foo and bar exist
relapse.destroy(); // Teardown and destroy all instances
relapse.destroy('foo'); // Teardown and destroy the foo instance
relapse.destroy(['foo', 'bar']) // Teardown and destroy foo and bar instances
relapse.reinit(); // Reinitialize all instances
relapse.reinit('foo'); // Reinitialize instance using id of foo
relapse.reinit(['foo', 'bar']) // Reinitialize instances using ids foo and bar
relapse.each(instance => {}) // Iterate through all instances, return false the break
Instance Object
The returning Relapse
instance is comprised of references, events and methods that you can reach for when additional control is required. The instance lifespan is persisted and updates are reflective where necessary.
import relapse from 'relapse';
const instance = relapse('#example');
// REFERENCES
instance.id // The relapse key identifier
instance.element // Selector HTMLElement
instance.semantic // Whether or not semantic
instance.active // Last active fold index
instance.opened // Number of opened folds
instance.folds // An array list of folds
instance.options // Returns the current options
// EVENTS
instance.events.toggle // List of toggle events
instance.events.expand // List of expand events
instance.events.collapse // List of collapse events
instance.events.focus // List of focus events
instance.events.destroy // List of destroy events
instance.event.on('focus', (fold) => {}) // Listen for focus button events
instance.event.on('toggle', (fold) => {}) // Listen for open/close events
instance.event.on('expand', (fold) => {}) // Listen for expanded events
instance.event.on('collapse', (fold) => {}) // Listen for collapsed events
instance.event.on('destroy', (fold) => {}) // Listen for destroy events
// METHODS
instance.config() // Update the options of the instance
instance.expand() // Expand a fold by index or id
instance.collapse() // Collapse a fold by index or id
instance.destroy() // Destroy a the relapse instance
instance.reinit() // Reinitialize the instance