resizer.coffee 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. class app.views.Resizer extends app.View
  2. @className: '_resizer'
  3. @events:
  4. dragstart: 'onDragStart'
  5. dragend: 'onDragEnd'
  6. drag: 'onDrag'
  7. @isSupported: ->
  8. 'ondragstart' of document.createElement('div') and !app.isMobile()
  9. init: ->
  10. @el.setAttribute('draggable', 'true')
  11. @appendTo $('._app')
  12. @style = $('style[data-resizer]')
  13. @size = @style.getAttribute('data-size')
  14. return
  15. MIN = 260
  16. MAX = 600
  17. resize: (value, save) ->
  18. value -= app.el.offsetLeft
  19. return unless value > 0
  20. value = Math.min(Math.max(Math.round(value), MIN), MAX)
  21. newSize = "#{value}px"
  22. @style.innerHTML = @style.innerHTML.replace(new RegExp(@size, 'g'), newSize)
  23. @size = newSize
  24. if save
  25. app.settings.setSize(value)
  26. app.appCache?.updateInBackground()
  27. return
  28. onDragStart: (event) =>
  29. @style.removeAttribute('disabled')
  30. event.dataTransfer.effectAllowed = 'link'
  31. event.dataTransfer.setData('Text', '')
  32. return
  33. onDrag: (event) =>
  34. return if @lastDrag and @lastDrag > Date.now() - 50
  35. @lastDrag = Date.now()
  36. @resize(event.clientX, false)
  37. return
  38. onDragEnd: (event) =>
  39. @resize(event.screenX - window.screenX, true)
  40. return