From c9fedb7558effd3b6a06000cadf24bd068df36ba Mon Sep 17 00:00:00 2001 From: Martin Edenhofer Date: Wed, 24 Apr 2013 10:34:18 +0200 Subject: [PATCH] Added support for new task actions. Issue# 55 --- .../app/controllers/_default_navbar.js.coffee | 1 + .../controllers/agent_ticket_create.js.coffee | 16 +++++----- .../controllers/agent_ticket_zoom.js.coffee | 8 +++-- .../app/controllers/navigation.js.coffee | 7 ++++- .../app/controllers/task_widget.js.coffee | 29 ++++++++++++++++++- .../app/lib/app_post/task_manager.js.coffee | 10 ++++++- .../javascripts/app/views/task_widget.jst.eco | 17 ++++++++++- app/assets/stylesheets/zzz.css | 26 +++++++++++++++++ 8 files changed, 101 insertions(+), 13 deletions(-) diff --git a/app/assets/javascripts/app/controllers/_default_navbar.js.coffee b/app/assets/javascripts/app/controllers/_default_navbar.js.coffee index 819548c43..53f7068b2 100644 --- a/app/assets/javascripts/app/controllers/_default_navbar.js.coffee +++ b/app/assets/javascripts/app/controllers/_default_navbar.js.coffee @@ -11,3 +11,4 @@ App.Config.set( 'User', { App.Config.set( 'Admin', { prio: 10000, parent: '', name: 'Manage', target: '#admin', role: ['Admin'] }, 'NavBar' ) App.Config.set( 'Setting', { prio: 20000, parent: '', name: 'Settings', target: '#settings', role: ['Admin'] }, 'NavBar' ) +App.Config.set( 'Misc', { prio: 90000, parent: '', name: 'Tools', target: '#tools' }, 'NavBar' ) diff --git a/app/assets/javascripts/app/controllers/agent_ticket_create.js.coffee b/app/assets/javascripts/app/controllers/agent_ticket_create.js.coffee index c68bc3fdf..34132eda5 100644 --- a/app/assets/javascripts/app/controllers/agent_ticket_create.js.coffee +++ b/app/assets/javascripts/app/controllers/agent_ticket_create.js.coffee @@ -63,6 +63,9 @@ class App.TicketCreate extends App.Controller @navupdate '#' @title @article_attributes['title'] + changed: => + true + release: => # @clearInterval( @key, 'ticket_zoom' ) @el.remove() @@ -195,7 +198,7 @@ class App.TicketCreate extends App.Controller userNew: (e) => e.preventDefault() - new UserNew() + new UserNew( type: @type ) cancel: -> @navigate '#' @@ -332,8 +335,8 @@ class UserNew extends App.ControllerModal # force to reload object callbackReload = (user) -> realname = user.displayName() - $('#create_customer_id').val( user.id ) - $('#create_customer_id_autocompletion').val( realname ) + $('#create_' + ui.type + '_customer_id').val( user.id ) + $('#create_' + ui.type + '_customer_id_autocompletion').val( realname ) # start customer info controller ui.userInfo( user_id: user.id ) @@ -360,8 +363,7 @@ App.Config.set( 'ticket_create', TicketCreateRouter, 'Routes' ) App.Config.set( 'ticket_create/:ticket_id/:article_id', TicketCreateRouter, 'Routes' ) App.Config.set( 'ticket_create/:type', TicketCreateRouter, 'Routes' ) -App.Config.set( 'New', { prio: 8000, parent: '', name: 'New', target: '#new', role: ['Agent'] }, 'NavBarRight' ) -App.Config.set( 'TicketNewCallOutbound', { prio: 8001, parent: '#new', name: 'Call Outbound', target: '#ticket_create/call_outbound', role: ['Agent'] }, 'NavBarRight' ) -App.Config.set( 'TicketNewCallInbound', { prio: 8002, parent: '#new', name: 'Call Inbound', target: '#ticket_create/call_inbound', role: ['Agent'] }, 'NavBarRight' ) -App.Config.set( 'TicketNewEmail', { prio: 8003, parent: '#new', name: 'Email', target: '#ticket_create/email', role: ['Agent'] }, 'NavBarRight' ) +App.Config.set( 'TicketNewCallOutbound', { prio: 8001, name: 'Call Outbound', target: '#ticket_create/call_outbound', role: ['Agent'] }, 'TaskActions' ) +App.Config.set( 'TicketNewCallInbound', { prio: 8002, name: 'Call Inbound', target: '#ticket_create/call_inbound', role: ['Agent'] }, 'TaskActions' ) +App.Config.set( 'TicketNewEmail', { prio: 8003, name: 'Email', target: '#ticket_create/email', role: ['Agent'] }, 'TaskActions' ) 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 aa9f2e52f..20bc766ae 100644 --- a/app/assets/javascripts/app/controllers/agent_ticket_zoom.js.coffee +++ b/app/assets/javascripts/app/controllers/agent_ticket_zoom.js.coffee @@ -47,7 +47,10 @@ class App.TicketZoom extends App.Controller activate: => @navupdate '#' - @title 'Ticket Zoom ' + @ticket.number + if @ticket + @title 'Ticket Zoom ' + @ticket.number +# else +# @title 'Loading...' release: => @clearInterval( @key, 'ticket_zoom' ) @@ -59,7 +62,7 @@ class App.TicketZoom extends App.Controller # get data App.Com.ajax( - id: 'ticket_zoom' + id: 'ticket_zoom_' + ticket_id type: 'GET' url: 'api/ticket_full/' + ticket_id + '?do_not_log=' + @doNotLog data: @@ -70,6 +73,7 @@ class App.TicketZoom extends App.Controller return if _.isEqual( @dataLastCall.ticket, data.ticket) diff = difference( @dataLastCall.ticket, data.ticket ) console.log('diff', diff) + App.TaskManager.notify(@task_key) if $('[name="body"]').val() App.Event.trigger 'notify', { type: 'success' diff --git a/app/assets/javascripts/app/controllers/navigation.js.coffee b/app/assets/javascripts/app/controllers/navigation.js.coffee index b8797cb30..3335d49b8 100644 --- a/app/assets/javascripts/app/controllers/navigation.js.coffee +++ b/app/assets/javascripts/app/controllers/navigation.js.coffee @@ -193,7 +193,12 @@ class App.Navigation extends App.Controller sub = @getOrder( dropdown[ item.parent ] ) itemLevel1.child = sub - nav = @getOrder(level1) + # clean up, only show navbar items with existing childrens + clean_list = [] + for item in level1 + if !item.child || item.child && !_.isEmpty( item.child ) + clean_list.push item + nav = @getOrder(clean_list) return nav getOrder: (data) -> diff --git a/app/assets/javascripts/app/controllers/task_widget.js.coffee b/app/assets/javascripts/app/controllers/task_widget.js.coffee index 0b82cda71..83dc5d651 100644 --- a/app/assets/javascripts/app/controllers/task_widget.js.coffee +++ b/app/assets/javascripts/app/controllers/task_widget.js.coffee @@ -48,7 +48,8 @@ class App.TaskWidget extends App.Controller item_list.push item @html App.view('task_widget')( - item_list: item_list + item_list: item_list + taskBarActions: @_getTaskActions() ) remove: (e) => @@ -77,4 +78,30 @@ class App.TaskWidget extends App.Controller if _.isEmpty( tasks_all ) @navigate '#' + _getTaskActions: -> + roles = App.Session.get( 'roles' ) + navbar = _.values( @Config.get( 'TaskActions' ) ) + level1 = [] + + for item in navbar + if typeof item.callback is 'function' + data = item.callback() || {} + for key, value of data + item[key] = value + if !item.parent + match = 0 + if !item.role + match = 1 + if !roles && item.role + match = _.include( item.role, 'Anybody' ) + if roles + for role in roles + if !match + match = _.include( item.role, role.name ) + + if match + level1.push item + level1 + + 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 297aa4f40..f90a4cc27 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 @@ -19,6 +19,11 @@ class App.TaskManager _instance ?= new _Singleton _instance.remove( key ) + @notify: ( key ) -> + if _instance == undefined + _instance ?= new _Singleton + _instance.notify( key ) + @reset: -> if _instance == undefined _instance ?= new _Singleton @@ -54,6 +59,7 @@ class _Singleton extends App.Controller $('#content_permanent_' + key ).show() $('#content_permanent_' + key ).addClass('active') @tasks[key].worker.activate() + @tasks[key].notify = false for task_key, task of @tasks if task_key isnt key task.active = false @@ -120,6 +126,9 @@ class _Singleton extends App.Controller delete @tasks[key] App.Event.trigger 'ui:rerender' + notify: ( key ) => + @tasks[key].notify = true + reset: => @tasks = {} App.Event.trigger 'ui:rerender' @@ -133,7 +142,6 @@ class _Singleton extends App.Controller type_id: task.type_id params: task.params callback: task.callback - active: task.active store.push item App.Store.write( 'tasks', store ) diff --git a/app/assets/javascripts/app/views/task_widget.jst.eco b/app/assets/javascripts/app/views/task_widget.jst.eco index b44009071..d01b2af76 100644 --- a/app/assets/javascripts/app/views/task_widget.jst.eco +++ b/app/assets/javascripts/app/views/task_widget.jst.eco @@ -1,5 +1,20 @@
<% for item in @item_list: %> - <%- item.data.head %> + <%- item.data.head %> + <% end %> + <% if !_.isEmpty( @taskBarActions ): %> +
+
+ + <%- @T('New') %> + + + +
+
<% end %>
diff --git a/app/assets/stylesheets/zzz.css b/app/assets/stylesheets/zzz.css index 2150d408e..cd465171a 100644 --- a/app/assets/stylesheets/zzz.css +++ b/app/assets/stylesheets/zzz.css @@ -56,18 +56,44 @@ table th, table td { } .task { + margin: -6px; + padding: 0px 4px; display: inline-block; max-width: 120px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } + .task > a, .task > a:hover { color: #ffffff; text-decoration: none; } +.btn-default .task > a, +.btn-default .task > a:hover { + color: #333333; +} + +.taskbar .btn-mini { + margin-top: 2px; +} + +[data-type="close"] { + margin-left: 5px; +} + +.taskbar-new { + float: right; + margin-right: 12px; +} + +.taskbar-new .dropdown-menu { + right: -1px; + left: auto; +} + .max-size-scroll { max-height: 240px; overflow-y: scroll;