Take CoreUI to life, including our JavaScript plugins. Read about each plugin, our data and programmatic API options, and more.
On this page: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.
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>
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.
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.
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.)
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.
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
}
})
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)
.
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 !!
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
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
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.2.0"
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.
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.
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)
}
})