128 lines
4.5 KiB
JavaScript
128 lines
4.5 KiB
JavaScript
/**
|
|
* simplebar - v6.0.0-beta.10
|
|
* Scrollbars, simpler.
|
|
* https://grsmto.github.io/simplebar/
|
|
*
|
|
* Made by Adrien Denat from a fork by Jonathan Nicol
|
|
* Under MIT License
|
|
*/
|
|
|
|
(function (global, factory) {
|
|
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('can-use-dom'), require('simplebar-core')) :
|
|
typeof define === 'function' && define.amd ? define(['can-use-dom', 'simplebar-core'], factory) :
|
|
(global = global || self, global.SimpleBar = factory(global.canUseDOM, global.SimpleBar));
|
|
}(this, (function (canUseDOM, SimpleBar) { 'use strict';
|
|
|
|
canUseDOM = canUseDOM && Object.prototype.hasOwnProperty.call(canUseDOM, 'default') ? canUseDOM['default'] : canUseDOM;
|
|
SimpleBar = SimpleBar && Object.prototype.hasOwnProperty.call(SimpleBar, 'default') ? SimpleBar['default'] : SimpleBar;
|
|
|
|
// Helper function to retrieve options from element attributes
|
|
var getOptions = function getOptions(obj) {
|
|
var options = Array.prototype.reduce.call(obj, function (acc, attribute) {
|
|
var option = attribute.name.match(/data-simplebar-(.+)/);
|
|
|
|
if (option) {
|
|
var key = option[1].replace(/\W+(.)/g, function (x, chr) {
|
|
return chr.toUpperCase();
|
|
});
|
|
|
|
switch (attribute.value) {
|
|
case 'true':
|
|
acc[key] = true;
|
|
break;
|
|
|
|
case 'false':
|
|
acc[key] = false;
|
|
break;
|
|
|
|
case undefined:
|
|
acc[key] = true;
|
|
break;
|
|
|
|
default:
|
|
acc[key] = attribute.value;
|
|
}
|
|
}
|
|
|
|
return acc;
|
|
}, {});
|
|
return options;
|
|
};
|
|
|
|
SimpleBar.initDOMLoadedElements = function () {
|
|
document.removeEventListener('DOMContentLoaded', this.initDOMLoadedElements);
|
|
window.removeEventListener('load', this.initDOMLoadedElements);
|
|
Array.prototype.forEach.call(document.querySelectorAll('[data-simplebar]'), function (el) {
|
|
if (el.getAttribute('data-simplebar') !== 'init' && !SimpleBar.instances.has(el)) new SimpleBar(el, getOptions(el.attributes));
|
|
});
|
|
};
|
|
|
|
SimpleBar.removeObserver = function () {
|
|
this.globalObserver.disconnect();
|
|
};
|
|
|
|
SimpleBar.initHtmlApi = function () {
|
|
this.initDOMLoadedElements = this.initDOMLoadedElements.bind(this); // MutationObserver is IE11+
|
|
|
|
if (typeof MutationObserver !== 'undefined') {
|
|
// Mutation observer to observe dynamically added elements
|
|
this.globalObserver = new MutationObserver(SimpleBar.handleMutations);
|
|
this.globalObserver.observe(document, {
|
|
childList: true,
|
|
subtree: true
|
|
});
|
|
} // Taken from jQuery `ready` function
|
|
// Instantiate elements already present on the page
|
|
|
|
|
|
if (document.readyState === 'complete' || document.readyState !== 'loading' && !document.documentElement.doScroll) {
|
|
// Handle it asynchronously to allow scripts the opportunity to delay init
|
|
window.setTimeout(this.initDOMLoadedElements);
|
|
} else {
|
|
document.addEventListener('DOMContentLoaded', this.initDOMLoadedElements);
|
|
window.addEventListener('load', this.initDOMLoadedElements);
|
|
}
|
|
};
|
|
|
|
SimpleBar.handleMutations = function (mutations) {
|
|
mutations.forEach(function (mutation) {
|
|
Array.prototype.forEach.call(mutation.addedNodes, function (addedNode) {
|
|
if (addedNode.nodeType === 1) {
|
|
if (addedNode.hasAttribute('data-simplebar')) {
|
|
!SimpleBar.instances.has(addedNode) && new SimpleBar(addedNode, getOptions(addedNode.attributes));
|
|
} else {
|
|
Array.prototype.forEach.call(addedNode.querySelectorAll('[data-simplebar]'), function (el) {
|
|
if (el.getAttribute('data-simplebar') !== 'init' && !SimpleBar.instances.has(el)) new SimpleBar(el, getOptions(el.attributes));
|
|
});
|
|
}
|
|
}
|
|
});
|
|
Array.prototype.forEach.call(mutation.removedNodes, function (removedNode) {
|
|
if (removedNode.nodeType === 1) {
|
|
if (removedNode.hasAttribute('data-simplebar')) {
|
|
SimpleBar.instances.has(removedNode) && SimpleBar.instances.get(removedNode).unMount();
|
|
} else {
|
|
Array.prototype.forEach.call(removedNode.querySelectorAll('[data-simplebar="init"]'), function (el) {
|
|
SimpleBar.instances.has(el) && SimpleBar.instances.get(el).unMount();
|
|
});
|
|
}
|
|
}
|
|
});
|
|
});
|
|
};
|
|
|
|
SimpleBar.getOptions = getOptions;
|
|
SimpleBar.default = SimpleBar;
|
|
/**
|
|
* HTML API
|
|
* Called only in a browser env.
|
|
*/
|
|
|
|
if (canUseDOM) {
|
|
SimpleBar.initHtmlApi();
|
|
}
|
|
|
|
return SimpleBar;
|
|
|
|
})));
|