angular-baron-scrollbar
Version:
A wrapper for baron scrollbar library injecting required CSS automatically.
77 lines (66 loc) • 2.4 kB
JavaScript
var angular = require('angular');
var qwery = require('qwery');
var xtend = require('xtend');
var insertcss = require('insert-css');
var css = require('fs').readFileSync(__dirname + '/baron.css', 'utf8');
insertcss(css, {prepend: true});
require('baron/baron.min.js'); // creates window.baron object
module.exports = 'angular-baron-scrollbar';
var template =
' <div class="scroller_wrapper" > ' +
' <div class="scroller" in-view-container ng-transclude></div> ' +
' <div class="scroller__track_v"> ' +
' <div class="scroller__bar_v"></div> ' +
' </div> ' +
' <div class="scroller__track_h"> ' +
' <div class="scroller__bar_h"></div> ' +
' </div> ' +
' </div> ' ;
var defaultOpts = {
scroller: '.scroller',
bar: '.scroller__bar_v',
barOnCls: 'baron',
// Local copy of jQuery-like utility
// Default: window.jQuery
$: function(selector, context) {
return angular.element(qwery(selector, context));
},
};
angular.module(module.exports, [])
.directive('baronScrollbar', ['$parse', function ($parse) {
return {
restrict: 'EA',
transclude: true,
template: template,
replace: true,
link: function (scope, elem, attr) {
var hscroll, vscroll;
var el = elem[0];
var opts = $parse(attr['opts'])(scope);
var hopts = $parse(attr['hopts'])(scope);
var direction = attr['direction'] || 'y';
opts = xtend(defaultOpts, {root: el}, opts);
if (direction.indexOf('x') !== -1) {
hscroll = baron(xtend(opts, {
barOnCls: 'baron_h',
bar: '.scroller__bar_h',
direction: 'h'
}, hopts));
}
if (direction.indexOf('y') !== -1) {
vscroll = baron(opts);
}
scope.$watch('update', function (n, o) {
if (n) {
hscroll && hscroll.update();
vscroll && vscroll.update();
scope.update = false;
}
});
scope.$on('destroy', function () {
hscroll && hscroll.dispose();
vscroll && vscroll.dispose();
});
}
};
}]);