From ad2e06b5b41346fdfe2279019669311cb04b0f97 Mon Sep 17 00:00:00 2001 From: Martin Edenhofer Date: Fri, 19 Apr 2013 07:30:46 +0200 Subject: [PATCH] Improved task bar issue #57. --- .../controllers/agent_ticket_zoom.js.coffee | 6 ++++- .../app/controllers/task_widget.js.coffee | 23 +++++++++++++++++-- .../app/lib/app_post/task_manager.js.coffee | 20 ++++++++++++---- .../javascripts/app/views/task_widget.jst.eco | 2 +- 4 files changed, 43 insertions(+), 8 deletions(-) diff --git a/app/assets/javascripts/app/controllers/agent_ticket_zoom.js.coffee b/app/assets/javascripts/app/controllers/agent_ticket_zoom.js.coffee index 6bc6b8711..2c67be55c 100644 --- a/app/assets/javascripts/app/controllers/agent_ticket_zoom.js.coffee +++ b/app/assets/javascripts/app/controllers/agent_ticket_zoom.js.coffee @@ -34,6 +34,10 @@ class TicketZoom extends App.Controller @fetch( @ticket_id, false) @interval( update, 30000, @key, 'ticket_zoom' ) + activate: => + @navupdate '#' + @title 'Ticket Zoom ' + @ticket.number + release: => @clearInterval( @key, 'ticket_zoom' ) @el.remove() @@ -586,7 +590,7 @@ class TicketZoomRouter extends App.ControllerPermanent constructor: (params) -> super @log 'zoom router', params - App.TaskManager.add( 'Ticket', @ticket_id, { callback: TicketZoom } ) + App.TaskManager.add( 'Ticket', @ticket_id, TicketZoom, params ) App.Config.set( 'ticket/zoom/:ticket_id', TicketZoomRouter, 'Routes' ) App.Config.set( 'ticket/zoom/:ticket_id/nav/:nav', TicketZoomRouter, 'Routes' ) diff --git a/app/assets/javascripts/app/controllers/task_widget.js.coffee b/app/assets/javascripts/app/controllers/task_widget.js.coffee index eed4a12dc..cc4c0a282 100644 --- a/app/assets/javascripts/app/controllers/task_widget.js.coffee +++ b/app/assets/javascripts/app/controllers/task_widget.js.coffee @@ -24,6 +24,7 @@ class App.TaskWidget extends App.Controller for key, task of tasks item = {} item.key = key + item.task = task item.data = App[task.type].find( task.type_id ) item_list.push item @@ -34,9 +35,27 @@ class App.TaskWidget extends App.Controller remove: (e) => e.preventDefault() key = $(e.target).parent().data('id') + + # check if active task is closed + task_last = undefined + tasks_all = App.TaskManager.all() + active_is_closed = false + for task_key, task of tasks_all + console.log('--', task_key, task) + if task.active && task_key.toString() is key.toString() + active_is_closed = true + + # remove task App.TaskManager.remove( key ) @render() - if _.isEmpty( App.TaskManager.all() ) - @navigate '#' + + # navigate to next task if needed + if active_is_closed + for key, task of tasks_all + task_last = task + if task_last + @navigate task_last.url + if _.isEmpty( tasks_all ) + @navigate '#' App.Config.set( 'task', App.TaskWidget, 'Widgets' ) diff --git a/app/assets/javascripts/app/lib/app_post/task_manager.js.coffee b/app/assets/javascripts/app/lib/app_post/task_manager.js.coffee index 5ca664133..33515ad08 100644 --- a/app/assets/javascripts/app/lib/app_post/task_manager.js.coffee +++ b/app/assets/javascripts/app/lib/app_post/task_manager.js.coffee @@ -9,10 +9,10 @@ class App.TaskManager _instance ?= new _Singleton _instance.all() - @add: ( type, type_id, params ) -> + @add: ( type, type_id, callback, params ) -> if _instance == undefined _instance ?= new _Singleton - _instance.add( type, type_id, params ) + _instance.add( type, type_id, callback, params ) @remove: ( key ) -> if _instance == undefined @@ -34,26 +34,38 @@ class _Singleton extends Spine.Module all: -> @tasks - add: ( type, type_id, params ) -> + add: ( type, type_id, callback, params ) -> for key, task of @tasks if task.type is type && task.type_id is type_id $('#content').empty() $('.content_permanent').hide() $('#content_permanent_' + key ).show() + @tasks[key].worker.activate() + for task_key, task of @tasks + if task_key isnt key + task.active = false + else + task.active = true + App.Event.trigger 'ui:rerender' return key @task_count++ + for task_key, task of @tasks + task.active = false $('#content').empty() $('#content_permanent').append('
') $('.content_permanent').hide() $('#content_permanent_' + @task_count ).show() - a = new params.callback( el: $('#content_permanent_' + @task_count ), ticket_id: type_id ) + params['el'] = $('#content_permanent_' + @task_count ) + a = new callback( params ) task = type: type type_id: type_id params: params + url: window.location.hash worker: a + active: true @tasks[@task_count] = task App.Event.trigger 'ui:rerender' diff --git a/app/assets/javascripts/app/views/task_widget.jst.eco b/app/assets/javascripts/app/views/task_widget.jst.eco index e90ae8b54..e425f6177 100644 --- a/app/assets/javascripts/app/views/task_widget.jst.eco +++ b/app/assets/javascripts/app/views/task_widget.jst.eco @@ -1,5 +1,5 @@
<% for item in @item_list: %> - <%= item.data.title %> + <%= item.data.title %> <% end %>