scroll.ts 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. import $ from 'jquery';
  2. // @ts-ignore
  3. import baron from 'baron';
  4. import coreModule from 'app/core/core_module';
  5. const scrollBarHTML = `
  6. <div class="baron__track">
  7. <div class="baron__bar"></div>
  8. </div>
  9. `;
  10. const scrollRootClass = 'baron baron__root';
  11. const scrollerClass = 'baron__scroller';
  12. export function geminiScrollbar() {
  13. return {
  14. restrict: 'A',
  15. link: (scope: any, elem: any, attrs: any) => {
  16. let scrollRoot = elem.parent();
  17. const scroller = elem;
  18. console.log('scroll');
  19. if (attrs.grafanaScrollbar && attrs.grafanaScrollbar === 'scrollonroot') {
  20. scrollRoot = scroller;
  21. }
  22. scrollRoot.addClass(scrollRootClass);
  23. $(scrollBarHTML).appendTo(scrollRoot);
  24. elem.addClass(scrollerClass);
  25. const scrollParams = {
  26. root: scrollRoot[0],
  27. scroller: scroller[0],
  28. bar: '.baron__bar',
  29. barOnCls: '_scrollbar',
  30. scrollingCls: '_scrolling',
  31. track: '.baron__track',
  32. direction: 'v',
  33. };
  34. const scrollbar = baron(scrollParams);
  35. scope.$on('$destroy', () => {
  36. scrollbar.dispose();
  37. });
  38. },
  39. };
  40. }
  41. coreModule.directive('grafanaScrollbar', geminiScrollbar);