grafana/public/app/angular/components/scroll.ts

51 lines
1.1 KiB
TypeScript
Raw Normal View History

// @ts-ignore
2018-03-27 15:27:23 -05:00
import baron from 'baron';
import $ from 'jquery';
import coreModule from 'app/angular/core_module';
2017-08-15 04:51:47 -05:00
2018-03-27 15:27:23 -05:00
const scrollBarHTML = `
<div class="baron__track">
<div class="baron__bar"></div>
</div>
`;
const scrollRootClass = 'baron baron__root';
const scrollerClass = 'baron__scroller';
2017-08-15 04:51:47 -05:00
export function geminiScrollbar() {
return {
2017-12-20 05:33:33 -06:00
restrict: 'A',
link: (scope: any, elem: any, attrs: any) => {
2018-03-27 15:27:23 -05:00
let scrollRoot = elem.parent();
const scroller = elem;
2018-03-27 15:27:23 -05:00
if (attrs.grafanaScrollbar && attrs.grafanaScrollbar === 'scrollonroot') {
scrollRoot = scroller;
}
scrollRoot.addClass(scrollRootClass);
$(scrollBarHTML).appendTo(scrollRoot);
elem.addClass(scrollerClass);
const scrollParams = {
2018-03-27 15:27:23 -05:00
root: scrollRoot[0],
scroller: scroller[0],
bar: '.baron__bar',
barOnCls: '_scrollbar',
scrollingCls: '_scrolling',
track: '.baron__track',
2018-04-04 11:21:17 -05:00
direction: 'v',
};
const scrollbar = baron(scrollParams);
2017-12-20 05:33:33 -06:00
scope.$on('$destroy', () => {
2018-03-27 15:27:23 -05:00
scrollbar.dispose();
});
2017-12-20 05:33:33 -06:00
},
2017-08-15 04:51:47 -05:00
};
}
2017-12-20 05:33:33 -06:00
coreModule.directive('grafanaScrollbar', geminiScrollbar);