scroll.ts 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  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. console.log('scroll');
  18. if (attrs.grafanaScrollbar && attrs.grafanaScrollbar === 'scrollonroot') {
  19. scrollRoot = scroller;
  20. }
  21. scrollRoot.addClass(scrollRootClass);
  22. $(scrollBarHTML).appendTo(scrollRoot);
  23. elem.addClass(scrollerClass);
  24. const scrollParams = {
  25. root: scrollRoot[0],
  26. scroller: scroller[0],
  27. bar: '.baron__bar',
  28. barOnCls: '_scrollbar',
  29. scrollingCls: '_scrolling',
  30. track: '.baron__track',
  31. direction: 'v',
  32. };
  33. const scrollbar = baron(scrollParams);
  34. scope.$on('$destroy', () => {
  35. scrollbar.dispose();
  36. });
  37. },
  38. };
  39. }
  40. coreModule.directive('grafanaScrollbar', geminiScrollbar);