49 lines
1.9 KiB
JavaScript
49 lines
1.9 KiB
JavaScript
// Inform the world that we have the ability to use BS3 nav/navbar markup in BS4
|
|
window.BS3_COMPAT = true;
|
|
|
|
// This logic needs to execute after both the BS4+ (new) as well as BS3 (legacy)
|
|
// jQuery plugins have been registered. For BS5, plugin registration happens
|
|
// after DOM content is loaded, which is why we do the same here.
|
|
// https://github.com/twbs/bootstrap/blob/08139c22/js/dist/tab.js#L87
|
|
$(function() {
|
|
|
|
// The legacy plugin needs to be registered after the new one
|
|
if (!$.fn.tab.Constructor.VERSION.match(/^3\./)) {
|
|
(console.warn || console.error || console.log)("bs3compat.js couldn't find bs3 tab impl; bs3 tabs will not be properly supported");
|
|
return;
|
|
}
|
|
var legacyTabPlugin = $.fn.tab.noConflict();
|
|
|
|
if (!$.fn.tab || !$.fn.tab.Constructor || !$.fn.tab.noConflict) {
|
|
(console.warn || console.error || console.log)("bs3compat.js couldn't find a jQuery tab impl; bs3 tabs will not be properly supported");
|
|
}
|
|
var newTabPlugin = $.fn.tab.noConflict();
|
|
|
|
// Re-define the tab click event
|
|
// https://github.com/twbs/bootstrap/blob/08139c2/js/src/tab.js#L33
|
|
var EVENT_KEY = "click.bs.tab.data-api";
|
|
$(document).off(EVENT_KEY);
|
|
|
|
var SELECTOR = '[data-toggle="tab"], [data-toggle="pill"], [data-bs-toggle="tab"], [data-bs-toggle="pill"]';
|
|
$(document).on(EVENT_KEY, SELECTOR, function(event) {
|
|
event.preventDefault();
|
|
$(this).tab("show");
|
|
});
|
|
|
|
function TabPlugin(config) {
|
|
// Legacy (bs3) tabs: li.active > a
|
|
// New (bs4+) tabs: li.nav-item > a.active.nav-link
|
|
var legacy = $(this).closest(".nav").find("li:not(.dropdown).active > a").length > 0;
|
|
var plugin = legacy ? legacyTabPlugin : newTabPlugin;
|
|
plugin.call($(this), config);
|
|
}
|
|
|
|
var noconflict = $.fn.tab;
|
|
$.fn.tab = TabPlugin;
|
|
$.fn.tab.Constructor = newTabPlugin.Constructor;
|
|
$.fn.tab.noConflict = function() {
|
|
$.fn.tab = noconflict;
|
|
return TabPlugin;
|
|
};
|
|
});
|