2019-05-12 20:15:23 +08:00
|
|
|
// @ts-ignore
|
2018-03-28 04:27:23 +08:00
|
|
|
import baron from 'baron';
|
2022-04-22 21:33:13 +08:00
|
|
|
import $ from 'jquery';
|
|
|
|
|
2021-11-09 15:37:16 +08:00
|
|
|
import coreModule from 'app/angular/core_module';
|
2017-08-15 17:51:47 +08:00
|
|
|
|
2018-03-28 04:27:23 +08: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 17:51:47 +08:00
|
|
|
export function geminiScrollbar() {
|
|
|
|
return {
|
2017-12-20 19:33:33 +08:00
|
|
|
restrict: 'A',
|
2019-05-12 20:15:23 +08:00
|
|
|
link: (scope: any, elem: any, attrs: any) => {
|
2018-03-28 04:27:23 +08:00
|
|
|
let scrollRoot = elem.parent();
|
2018-08-26 23:14:40 +08:00
|
|
|
const scroller = elem;
|
2018-03-28 04:27:23 +08:00
|
|
|
|
|
|
|
if (attrs.grafanaScrollbar && attrs.grafanaScrollbar === 'scrollonroot') {
|
|
|
|
scrollRoot = scroller;
|
|
|
|
}
|
|
|
|
|
|
|
|
scrollRoot.addClass(scrollRootClass);
|
|
|
|
$(scrollBarHTML).appendTo(scrollRoot);
|
|
|
|
elem.addClass(scrollerClass);
|
|
|
|
|
2018-08-26 23:14:40 +08:00
|
|
|
const scrollParams = {
|
2018-03-28 04:27:23 +08:00
|
|
|
root: scrollRoot[0],
|
|
|
|
scroller: scroller[0],
|
|
|
|
bar: '.baron__bar',
|
|
|
|
barOnCls: '_scrollbar',
|
|
|
|
scrollingCls: '_scrolling',
|
|
|
|
track: '.baron__track',
|
2018-04-05 00:21:17 +08:00
|
|
|
direction: 'v',
|
|
|
|
};
|
|
|
|
|
2018-08-26 23:14:40 +08:00
|
|
|
const scrollbar = baron(scrollParams);
|
2017-11-30 22:59:53 +08:00
|
|
|
|
2017-12-20 19:33:33 +08:00
|
|
|
scope.$on('$destroy', () => {
|
2018-03-28 04:27:23 +08:00
|
|
|
scrollbar.dispose();
|
2017-08-17 18:06:51 +08:00
|
|
|
});
|
2017-12-20 19:33:33 +08:00
|
|
|
},
|
2017-08-15 17:51:47 +08:00
|
|
|
};
|
|
|
|
}
|
|
|
|
|
2017-12-20 19:33:33 +08:00
|
|
|
coreModule.directive('grafanaScrollbar', geminiScrollbar);
|