resizer.coffee 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. class app.views.Resizer extends app.View
  2. @className: '_resizer'
  3. @attributes:
  4. title: 'Click to toggle sidebar on/off'
  5. @events:
  6. dragstart: 'onDragStart'
  7. dragend: 'onDragEnd'
  8. click: 'onClick'
  9. @isSupported: ->
  10. 'ondragstart' of document.createElement('div') and !app.isMobile()
  11. init: ->
  12. @el.setAttribute('draggable', 'true')
  13. @appendTo $('._app')
  14. @style = $('style[data-resizer]')
  15. @size = @style.getAttribute('data-size')
  16. return
  17. MIN = 260
  18. MAX = 600
  19. resize: (value, save) ->
  20. value -= app.el.offsetLeft
  21. return unless value > 0
  22. value = Math.min(Math.max(Math.round(value), MIN), MAX)
  23. newSize = "#{value}px"
  24. @style.innerHTML = @style.innerHTML.replace(new RegExp(@size, 'g'), newSize)
  25. @size = newSize
  26. if save
  27. app.settings.setSize(value)
  28. app.appCache?.updateInBackground()
  29. return
  30. onClick: ->
  31. app.document.toggleSidebarLayout()
  32. return
  33. onDragStart: (event) =>
  34. @style.removeAttribute('disabled')
  35. event.dataTransfer.effectAllowed = 'link'
  36. event.dataTransfer.setData('Text', '')
  37. $.on(window, 'dragover', @onDrag)
  38. return
  39. onDrag: (event) =>
  40. value = event.pageX
  41. return unless value > 0
  42. @lastDragValue = value
  43. return if @lastDrag and @lastDrag > Date.now() - 50
  44. @lastDrag = Date.now()
  45. @resize(value, false)
  46. return
  47. onDragEnd: (event) =>
  48. $.off(window, 'dragover', @onDrag)
  49. value = event.pageX or (event.screenX - window.screenX)
  50. if @lastDragValue and not (@lastDragValue - 5 < value < @lastDragValue + 5) # https://github.com/Thibaut/devdocs/issues/265
  51. value = @lastDragValue
  52. @resize(value, true)
  53. return