initial commit
This commit is contained in:
@@ -0,0 +1,106 @@
|
||||
import canUseDOM from 'can-use-dom';
|
||||
|
||||
import SimpleBar from './simplebar';
|
||||
import { getOptions } from './helpers';
|
||||
|
||||
SimpleBar.initDOMLoadedElements = function() {
|
||||
document.removeEventListener('DOMContentLoaded', this.initDOMLoadedElements);
|
||||
window.removeEventListener('load', this.initDOMLoadedElements);
|
||||
|
||||
Array.prototype.forEach.call(
|
||||
document.querySelectorAll('[data-simplebar]'),
|
||||
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 = mutations => {
|
||||
mutations.forEach(mutation => {
|
||||
Array.prototype.forEach.call(mutation.addedNodes, addedNode => {
|
||||
if (addedNode.nodeType === 1) {
|
||||
if (addedNode.hasAttribute('data-simplebar')) {
|
||||
!SimpleBar.instances.has(addedNode) &&
|
||||
document.documentElement.contains(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) &&
|
||||
document.documentElement.contains(el)
|
||||
)
|
||||
new SimpleBar(el, getOptions(el.attributes));
|
||||
}
|
||||
);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
Array.prototype.forEach.call(mutation.removedNodes, removedNode => {
|
||||
if (removedNode.nodeType === 1) {
|
||||
if (removedNode.getAttribute('data-simplebar') === 'init') {
|
||||
SimpleBar.instances.has(removedNode) &&
|
||||
!document.documentElement.contains(removedNode) &&
|
||||
SimpleBar.instances.get(removedNode).unMount();
|
||||
} else {
|
||||
Array.prototype.forEach.call(
|
||||
removedNode.querySelectorAll('[data-simplebar="init"]'),
|
||||
el => {
|
||||
SimpleBar.instances.has(el) &&
|
||||
!document.documentElement.contains(el) &&
|
||||
SimpleBar.instances.get(el).unMount();
|
||||
}
|
||||
);
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
SimpleBar.getOptions = getOptions;
|
||||
|
||||
/**
|
||||
* HTML API
|
||||
* Called only in a browser env.
|
||||
*/
|
||||
if (canUseDOM) {
|
||||
SimpleBar.initHtmlApi();
|
||||
}
|
||||
|
||||
export default SimpleBar;
|
||||
Reference in New Issue
Block a user