scroll.ts 1.1 KB

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