page_scroll.ts 1019 B

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. import coreModule from 'app/core/core_module';
  2. import appEvents from 'app/core/app_events';
  3. export function pageScrollbar() {
  4. return {
  5. restrict: 'A',
  6. link: (scope, elem, attrs) => {
  7. let lastPos = 0;
  8. appEvents.on(
  9. 'dash-scroll',
  10. evt => {
  11. if (evt.restore) {
  12. elem[0].scrollTop = lastPos;
  13. return;
  14. }
  15. lastPos = elem[0].scrollTop;
  16. if (evt.animate) {
  17. elem.animate({ scrollTop: evt.pos }, 500);
  18. } else {
  19. elem[0].scrollTop = evt.pos;
  20. }
  21. },
  22. scope
  23. );
  24. scope.$on('$routeChangeSuccess', () => {
  25. lastPos = 0;
  26. elem[0].scrollTop = 0;
  27. // Focus page to enable scrolling by keyboard
  28. elem[0].focus({ preventScroll: true });
  29. });
  30. elem[0].tabIndex = -1;
  31. // Focus page to enable scrolling by keyboard
  32. elem[0].focus({ preventScroll: true });
  33. },
  34. };
  35. }
  36. coreModule.directive('pageScrollbar', pageScrollbar);