resizer.js 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. // TODO: This file was created by bulk-decaffeinate.
  2. // Sanity-check the conversion and remove this comment.
  3. /*
  4. * decaffeinate suggestions:
  5. * DS002: Fix invalid constructor
  6. * DS102: Remove unnecessary code created because of implicit returns
  7. * DS206: Consider reworking classes to avoid initClass
  8. * Full docs: https://github.com/decaffeinate/decaffeinate/blob/main/docs/suggestions.md
  9. */
  10. (function() {
  11. let MIN = undefined;
  12. let MAX = undefined;
  13. const Cls = (app.views.Resizer = class Resizer extends app.View {
  14. constructor(...args) {
  15. this.onDragStart = this.onDragStart.bind(this);
  16. this.onDrag = this.onDrag.bind(this);
  17. this.onDragEnd = this.onDragEnd.bind(this);
  18. super(...args);
  19. }
  20. static initClass() {
  21. this.className = '_resizer';
  22. this.events = {
  23. dragstart: 'onDragStart',
  24. dragend: 'onDragEnd'
  25. };
  26. MIN = 260;
  27. MAX = 600;
  28. }
  29. static isSupported() {
  30. return 'ondragstart' in document.createElement('div') && !app.isMobile();
  31. }
  32. init() {
  33. this.el.setAttribute('draggable', 'true');
  34. this.appendTo($('._app'));
  35. }
  36. resize(value, save) {
  37. value -= app.el.offsetLeft;
  38. if (!(value > 0)) { return; }
  39. value = Math.min(Math.max(Math.round(value), MIN), MAX);
  40. const newSize = `${value}px`;
  41. document.documentElement.style.setProperty('--sidebarWidth', newSize);
  42. if (save) { app.settings.setSize(value); }
  43. }
  44. onDragStart(event) {
  45. event.dataTransfer.effectAllowed = 'link';
  46. event.dataTransfer.setData('Text', '');
  47. $.on(window, 'dragover', this.onDrag);
  48. }
  49. onDrag(event) {
  50. const value = event.pageX;
  51. if (!(value > 0)) { return; }
  52. this.lastDragValue = value;
  53. if (this.lastDrag && (this.lastDrag > (Date.now() - 50))) { return; }
  54. this.lastDrag = Date.now();
  55. this.resize(value, false);
  56. }
  57. onDragEnd(event) {
  58. $.off(window, 'dragover', this.onDrag);
  59. let value = event.pageX || (event.screenX - window.screenX);
  60. if (this.lastDragValue && !(this.lastDragValue - 5 < value && value < this.lastDragValue + 5)) { // https://github.com/freeCodeCamp/devdocs/issues/265
  61. value = this.lastDragValue;
  62. }
  63. this.resize(value, true);
  64. }
  65. });
  66. Cls.initClass();
  67. return Cls;
  68. })();