/**
* HSScrollBar component.
*
* @author Htmlstream
* @version 1.0
* @requires malihu jquery custom scrollbar plugin (v3.1.5.)
*
*/
;(function ($) {
'use strict';
$.HSCore.components.HSScrollBar = {
/**
* Base configuration.
*
* @private
*/
_baseConfig: {
scrollInertia: 150,
theme: 'minimal-dark'
},
/**
* Collection of all initalized items on the page.
*
* @private
*/
_pageCollection: $(),
/**
* Initialization of HSScrollBar component.
*
* @param {jQuery} collection
* @param {Object} config
*
* @return {jQuery}
*/
init: function (collection, config) {
if(!collection || !collection.length) return;
var self = this;
config = config && $.isPlainObject(config) ? $.extend(true, {}, config, this._baseConfig) : this._baseConfig;
return collection.each(function(i, el){
var $this = $(el),
scrollBar,
scrollBarThumb,
itemConfig = $.extend(true, {}, config, $this.data());
$this.mCustomScrollbar(itemConfig);
scrollBar = $this.find('.mCSB_scrollTools');
scrollBarThumb = $this.find('.mCSB_dragger_bar');
if(scrollBar.length && $this.data('scroll-classes')) {
scrollBar.addClass($this.data('scroll-classes'));
}
if(scrollBarThumb.length && $this.data('scroll-thumb-classes')) {
scrollBarThumb.addClass($this.data('scroll-thumb-classes'));
}
self._pageCollection = self._pageCollection.add($this);
});
},
/**
* Destroys the component.
*
* @param {jQuery} collection
*
* @return {jQuery}
*/
destroy: function( collection ) {
if( !collection && !collection.length ) return $();
var _self = this;
return collection.each(function(i, el){
var $this = $(el);
$this.mCustomScrollbar('destroy');
_self._pageCollection = _self._pageCollection.not( $this );
});
}
}
})(jQuery);