resizer.js 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. class app.views.Resizer extends app.View
  2. @className: '_resizer'
  3. @events:
  4. dragstart: 'onDragStart'
  5. dragend: 'onDragEnd'
  6. @isSupported: ->
  7. 'ondragstart' of document.createElement('div') and !app.isMobile()
  8. init: ->
  9. @el.setAttribute('draggable', 'true')
  10. @appendTo $('._app')
  11. return
  12. MIN = 260
  13. MAX = 600
  14. resize: (value, save) ->
  15. value -= app.el.offsetLeft
  16. return unless value > 0
  17. value = Math.min(Math.max(Math.round(value), MIN), MAX)
  18. newSize = "#{value}px"
  19. document.documentElement.style.setProperty('--sidebarWidth', newSize)
  20. app.settings.setSize(value) if save
  21. return
  22. onDragStart: (event) =>
  23. event.dataTransfer.effectAllowed = 'link'
  24. event.dataTransfer.setData('Text', '')
  25. $.on(window, 'dragover', @onDrag)
  26. return
  27. onDrag: (event) =>
  28. value = event.pageX
  29. return unless value > 0
  30. @lastDragValue = value
  31. return if @lastDrag and @lastDrag > Date.now() - 50
  32. @lastDrag = Date.now()
  33. @resize(value, false)
  34. return
  35. onDragEnd: (event) =>
  36. $.off(window, 'dragover', @onDrag)
  37. value = event.pageX or (event.screenX - window.screenX)
  38. if @lastDragValue and not (@lastDragValue - 5 < value < @lastDragValue + 5) # https://github.com/freeCodeCamp/devdocs/issues/265
  39. value = @lastDragValue
  40. @resize(value, true)
  41. return