taskbar_widget.js.coffee 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. class App.TaskbarWidget extends App.Controller
  2. events:
  3. 'click .js-close': 'remove'
  4. constructor: ->
  5. super
  6. @render()
  7. # render on generic ui call
  8. @bind 'ui:rerender', => @render()
  9. # render view
  10. @bind 'task:render', => @render()
  11. # render on login
  12. @bind 'auth:login', => @render()
  13. # reset current tasks on logout
  14. @bind 'auth:logout', => @render()
  15. render: ->
  16. return if !@Session.get()
  17. tasks = App.TaskManager.all()
  18. item_list = []
  19. for task in tasks
  20. # collect meta data of task for task bar item
  21. data =
  22. url: '#'
  23. id: false
  24. iconClass: 'loading'
  25. title: App.i18n.translateInline('Loading...')
  26. head: App.i18n.translateInline('Loading...')
  27. worker = App.TaskManager.worker( task.key )
  28. if worker
  29. meta = worker.meta()
  30. # apply meta data of controller
  31. if meta
  32. for key, value of meta
  33. data[key] = value
  34. # collect new task bar items
  35. item = {}
  36. item.task = task
  37. item.data = data
  38. item_list.push item
  39. # set title
  40. if task.active
  41. @title data.title
  42. @html App.view('task_widget_tasks')(
  43. item_list: item_list
  44. )
  45. dndOptions =
  46. tolerance: 'pointer'
  47. distance: 15
  48. opacity: 0.6
  49. forcePlaceholderSize: true
  50. items: '> a'
  51. update: =>
  52. items = @el.find('> a')
  53. order = []
  54. for item in items
  55. key = $(item).data('key')
  56. if !key
  57. throw "No such key attributes found for task item"
  58. order.push key
  59. App.TaskManager.reorder( order )
  60. @el.sortable( dndOptions )
  61. remove: (e, key = false, force = false) =>
  62. e.preventDefault()
  63. if !key
  64. key = $(e.target).parents('a').data('key')
  65. if !key
  66. throw "No such key attributes found for task item"
  67. # check if input has changed
  68. worker = App.TaskManager.worker( key )
  69. if !force && worker && worker.changed
  70. if worker.changed()
  71. new Remove(
  72. key: key
  73. ui: @
  74. )
  75. return
  76. # check if active task is closed
  77. currentTask = App.TaskManager.get( key )
  78. tasks = App.TaskManager.all()
  79. active_is_closed = false
  80. for task in tasks
  81. if currentTask.active && task.key is key
  82. active_is_closed = true
  83. # remove task
  84. App.TaskManager.remove( key )
  85. # if we do not need to move to an other task
  86. return if !active_is_closed
  87. # get new task url
  88. nextTaskUrl = App.TaskManager.nextTaskUrl()
  89. if nextTaskUrl
  90. @navigate nextTaskUrl
  91. return
  92. @navigate '#'
  93. class Remove extends App.ControllerModal
  94. constructor: ->
  95. super
  96. @head = 'Confirm'
  97. @message = 'Tab has changed, you really want to close it?'
  98. @cancel = true
  99. @close = true
  100. @button = 'Discared changes'
  101. @buttonClass = 'btn--danger'
  102. @show()
  103. onSubmit: (e) =>
  104. e.preventDefault()
  105. @hide()
  106. @ui.remove(e, @key, true)