core-logo

JavaScript

Take CoreUI to life, including our JavaScript plugins. Read about each plugin, our data and programmatic API options, and more.

On this page:



Individual or compiled

Plugins can be easily added separately (using CoreUI’s individual js/dist/*.js), or all at once using coreui.js or the minified coreui.min.js

If you utilize a bundler (Webpack, Rollup…), you can use /js/dist/*.js files which are UMD ready.

Using CoreUI as a module

We provide a version of CoreUI created as ESM (coreui.esm.js and coreui.esm.min.js), which lets you use CoreUI as a module in your browser if your targeted browsers support it.

<script type="module">
  import { Toast } from 'coreui.esm.min.js'

  Array.from(document.querySelectorAll('.toast'))
    .forEach(toastNode => new Toast(toastNode))
</script>

Incompatible plugins

Due to browser limitations, some of our plugins, namely Dropdown, Tooltip, and Popover plugins, cannot be used in a <script> tag with module type because they depend on Popper.js. For more information about the issue, see here.

Dependencies

Some of our plugins and components depend on other plugins. If you insert plugins individually, make sure to check for these dependencies in the docs.

Data attributes

Nearly all Bootstrap plugins can be enabled and configured through HTML alone with data attributes (our preferred way of using JavaScript functionality). Be sure to only use one set of data attributes on a single element (e.g., you cannot trigger a tooltip and modal from the same button.)

Selectors

Currently, to query DOM elements, we use the methods querySelector and querySelectorAll for performance reasons, so you should to use valid selectors. If you have to use special selectors, ex.: collapse:Example be sure to escape them.

Events

CoreUI provides custom events for most plugins’ individual actions. Generally, these come in an infinitive and past participle form - where the infinitive (ex. show) is triggered at the start of an event and its past participle form (ex. shown) is triggered on the completion of an action.

All infinitive events provide preventDefault() functionality. This provides the ability to stop the execution of an action before it starts. Returning false from an event handler will also automatically call preventDefault().

var myModal = document.getElementById('myModal')

myModal.addEventListener('show.coreui.modal', function (e) {
  if (!data) {
    return e.preventDefault() // stops modal from being shown
  }
})

Programmatic API

We also believe you should be able to use all CoreUI plugins purely through the JavaScript API. All public APIs are single, chainable methods, and return the collection acted upon.

var myModalEl = document.getElementById('myModal')

var modal = new coreui.Modal(myModalEl) // initialized with defaults
var modal = new coreui.Modal(myModalEl, { keyboard: false }) // initialized with no keyboard

If you’d like to get a particular plugin instance, each plugin exposes a _getInstance method. In order to retrieve it directly from an element, do this: coreui.Popover._getInstance(myPopoverEl).

Asynchronous functions and transitions

All programmatic API methods are asynchronous and return to the caller once the transition is started but before it ends.

In order to execute an action once the transition is complete, you can listen to the corresponding event.

var myCollapseEl = document.getElementById('#myCollapse')

myCollapseEl.addEventListener('shown.coreui.collapse', function (e) {
  // Action to execute once the collapsible area is expanded
})

In addition a method call on a transitioning component will be ignored.

var myCarouselEl = document.getElementById('myCarousel')
var carousel = coreui.Carousel._getInstance(myCarouselEl) // Retrieve a Carousel instance

myCarouselEl.addEventListener('slid.coreui.carousel', function (e) {
  carousel.to('2') // Will slide to the slide 2 as soon as the transition to slide 1 is finished
})

carousel.to('1') // Will start sliding to the slide 1 and returns to the caller
carousel.to('2') // !! Will be ignored, as the transition to the slide 1 is not finished !!

Default settings

You can change the default settings for a plugin by modifying the plugin’s Constructor.Default object:

// changes default for the modal plugin's `keyboard` option to false
coreui.Modal.Default.keyboard = false

No conflict

Sometimes it is necessary to use CoreUI plugins with other UI frameworks. In these circumstances, namespace collisions can occasionally occur. If this happens, you may call .noConflict on the plugin you wish to revert the value of.

var bootstrapButton = $.fn.button.noConflict() // return $.fn.button to previously assigned value
$.fn.bootstrapBtn = bootstrapButton // give $().bootstrapBtn the Bootstrap functionality

Version numbers

The version of each of CoreUI’s plugins can be accessed via the VERSION property of the plugin’s constructor. For example, for the tooltip plugin:

coreui.Tooltip.VERSION // => "3.0.0-beta.1"

No special fallbacks when JavaScript is disabled

CoreUI’s plugins don’t fall back particularly gracefully when JavaScript is disabled. If you care about the user experience in this case, use <noscript> to explain the situation (and how to re-enable JavaScript) to your users, and/or add your own custom fallbacks.

Third-party libraries

CoreUI does not officially support third-party JavaScript libraries like Prototype or jQuery UI. Despite .noConflict and namespaced events, there may be compatibility problems that you need to fix on your own.

Sanitizer

Tooltips and Popovers use our built-in sanitizer to sanitize options that accept HTML.

The default whiteList value is the following:

var ARIA_ATTRIBUTE_PATTERN = /^aria-[\w-]*$/i
var DefaultWhitelist = {
  // Global attributes allowed on any supplied element below.
  '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],
  a: ['target', 'href', 'title', 'rel'],
  area: [],
  b: [],
  br: [],
  col: [],
  code: [],
  div: [],
  em: [],
  hr: [],
  h1: [],
  h2: [],
  h3: [],
  h4: [],
  h5: [],
  h6: [],
  i: [],
  img: ['src', 'alt', 'title', 'width', 'height'],
  li: [],
  ol: [],
  p: [],
  pre: [],
  s: [],
  small: [],
  span: [],
  sub: [],
  sup: [],
  strong: [],
  u: [],
  ul: []
}

If you want to add new values to this default whiteList you can do the following:

var myDefaultWhiteList = $.fn.tooltip.Constructor.Default.whiteList

// To allow table elements
myDefaultWhiteList.table = []

// To allow td elements and data-option attributes on td elements
myDefaultWhiteList.td = ['data-option']

// You can push your custom regex to validate your attributes.
// Be careful about your regular expressions being too lax
var myCustomRegex = /^data-my-app-[\w-]+/
myDefaultWhiteList['*'].push(myCustomRegex)

If you want to bypass our sanitizer because you prefer to use a dedicated library, for example DOMPurify, you should do the following:

var yourTooltipEl = document.getElementById('yourTooltip')
var tooltip = new coreui.Tooltip(yourTooltipEl, {
  sanitizeFn: function (content) {
    return DOMPurify.sanitize(content)
  }
})