From 29546856965eb09fd6d2c1ff2cc3d4d2d305da8d Mon Sep 17 00:00:00 2001 From: Martin Edenhofer Date: Tue, 18 Jun 2013 22:58:29 +0200 Subject: [PATCH] Improved html title management, added browser tests. --- .../controllers/agent_ticket_create.js.coffee | 1 - .../app/controllers/task_widget.js.coffee | 6 +- .../app/controllers/ticket_zoom.js.coffee | 82 ++++++++----------- .../app/lib/app_post/task_manager.js.coffee | 26 +++--- .../javascripts/app/views/task_widget.jst.eco | 2 +- test/browser_test_helper.rb | 11 +++ 6 files changed, 68 insertions(+), 60 deletions(-) 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 5284f0a65..a4d3a33c4 100644 --- a/app/assets/javascripts/app/controllers/agent_ticket_create.js.coffee +++ b/app/assets/javascripts/app/controllers/agent_ticket_create.js.coffee @@ -71,7 +71,6 @@ class App.TicketCreate extends App.Controller activate: => @navupdate '#' - @title @meta().title changed: => formCurrent = @formParam( @el.find('.ticket-create') ) diff --git a/app/assets/javascripts/app/controllers/task_widget.js.coffee b/app/assets/javascripts/app/controllers/task_widget.js.coffee index 86e2dc662..cedc79fb0 100644 --- a/app/assets/javascripts/app/controllers/task_widget.js.coffee +++ b/app/assets/javascripts/app/controllers/task_widget.js.coffee @@ -69,13 +69,15 @@ class App.TaskWidget extends App.Controller meta = worker.meta() if meta data = meta - data.title = App.i18n.escape( data.title ) - data.head = App.i18n.escape( data.head ) item = {} item.task = task item.data = data item_list.push item + # set title + if task.active + @title data.title + @html App.view('task_widget')( item_list: item_list taskBarActions: @_getTaskActions() diff --git a/app/assets/javascripts/app/controllers/ticket_zoom.js.coffee b/app/assets/javascripts/app/controllers/ticket_zoom.js.coffee index 87bcbc0c5..564f3ef08 100644 --- a/app/assets/javascripts/app/controllers/ticket_zoom.js.coffee +++ b/app/assets/javascripts/app/controllers/ticket_zoom.js.coffee @@ -35,10 +35,6 @@ class App.TicketZoom extends App.Controller activate: => @navupdate '#' - if @ticket - @title App.i18n.translateInline('Ticket Zoom') + ' ' + @ticket.number + ' ' + @ticket.title - else - @title App.i18n.translateInline('Loading...') changed: => formCurrent = @formParam( @el.find('.ticket-update') ) @@ -76,8 +72,8 @@ class App.TicketZoom extends App.Controller success: (data, status, xhr) => if @dataLastCall && !force -# # return if ticket hasnt changed -# return if _.isEqual( @dataLastCall.ticket, data.ticket ) + # return if ticket hasnt changed + return if _.isEqual( @dataLastCall.ticket, data.ticket ) # return if ticket changed by my self return if data.ticket.updated_by_id is @Session.all().id @@ -87,13 +83,8 @@ class App.TicketZoom extends App.Controller console.log('diff', diff) if !_.isEmpty(diff) App.TaskManager.notify( @task_key ) -# if $('[name="body"]').val() -# App.Event.trigger 'notify', { -# type: 'success' -# msg: App.i18n.translateInline('Ticket has changed!') -# timeout: 30000 -# } -# return + + # remember current data @dataLastCall = data @load(data, force) @@ -119,7 +110,6 @@ class App.TicketZoom extends App.Controller # reset old indexes @ticket = undefined - @articles = undefined # get edit form attributes @edit_form = data.edit_form @@ -144,11 +134,6 @@ class App.TicketZoom extends App.Controller # get data if !@ticket @ticket = App.Collection.find( 'Ticket', @ticket_id ) - if !@articles - @articles = [] - for article_id in @ticket.article_ids - article = App.Collection.find( 'TicketArticle', article_id ) - @articles.push article # update taskbar with new meta data App.Event.trigger 'task:render' @@ -157,7 +142,6 @@ class App.TicketZoom extends App.Controller @renderDone = true @html App.view('ticket_zoom')( ticket: @ticket - articles: @articles nav: @nav isCustomer: @isRole('Customer') ) @@ -185,7 +169,6 @@ class App.TicketZoom extends App.Controller TicketTitle: => # show ticket title new TicketTitle( - articles: @articles ticket: @ticket el: @el.find('.ticket-title') ) @@ -193,7 +176,6 @@ class App.TicketZoom extends App.Controller TicketInfo: => # show ticket info new TicketInfo( - articles: @articles ticket: @ticket el: @el.find('.ticket-info') ) @@ -201,7 +183,6 @@ class App.TicketZoom extends App.Controller ArticleView: => # show article new ArticleView( - articles: @articles ticket: @ticket el: @el.find('.article-view') ui: @ @@ -210,7 +191,6 @@ class App.TicketZoom extends App.Controller Edit: => # show edit new Edit( - articles: @articles ticket: @ticket el: @el.find('.edit') form_state: @form_state @@ -222,7 +202,6 @@ class App.TicketZoom extends App.Controller TicketAction: => # show ticket action row new TicketAction( - articles: @articles ticket: @ticket el: @el.find('.ticket-action') ui: @ @@ -238,8 +217,7 @@ class TicketTitle extends App.Controller render: -> @html App.view('ticket_zoom/ticket_title')( - ticket: @ticket - articles: @articles + ticket: @ticket ) update: (e) => @@ -254,9 +232,12 @@ class TicketTitle extends App.Controller .replace(/>/g, '>') if title is '-' title = '' - @ticket.title = title - @ticket.load( title: title ) - @ticket.save() + + # update title + ticket = App.Collection.find( 'Ticket', @ticket.id ) + ticket.title = title + ticket.load( title: title ) + ticket.save() # update taskbar with new meta data App.Event.trigger 'task:render' @@ -269,8 +250,7 @@ class TicketInfo extends App.Controller render: -> @html App.view('ticket_zoom/ticket_info')( - ticket: @ticket - articles: @articles + ticket: @ticket ) class TicketAction extends App.Controller @@ -333,9 +313,10 @@ class Edit extends App.Controller render: -> + ticket = App.Collection.find( 'Ticket', @ticket.id ) + @html App.view('ticket_zoom/edit')( - ticket: @ticket - articles: @articles + ticket: ticket isCustomer: @isRole('Customer') ) @@ -370,13 +351,13 @@ class Edit extends App.Controller ] @form_id = App.ControllerForm.formId() - defaults = @form_state || @ticket + defaults = @form_state || ticket new App.ControllerForm( el: @el.find('.form-ticket-update') form_id: @form_id model: configure_attributes: @configure_attributes_ticket - className: 'update_ticket_' + @ticket.id + className: 'update_ticket_' + ticket.id params: defaults form_data: @edit_form ) @@ -386,7 +367,7 @@ class Edit extends App.Controller form_id: @form_id model: configure_attributes: @configure_attributes_article - className: 'update_ticket_' + @ticket.id + className: 'update_ticket_' + ticket.id form_data: @edit_form params: defaults dependency: [ @@ -426,7 +407,10 @@ class Edit extends App.Controller update: (e) => e.preventDefault() params = @formParam(e.target) - @log 'TicketZoom', 'notice', 'update', params, @ticket + + ticket = App.Collection.find( 'Ticket', @ticket.id ) + + @log 'TicketZoom', 'notice', 'update', params, ticket article_type = App.Collection.find( 'TicketArticleType', params['ticket_article_type_id'] ) # update ticket @@ -440,7 +424,7 @@ class Edit extends App.Controller ticket_update['owner_id'] = 1 # check if title exists - if !ticket_update['title'] && !@ticket.title + if !ticket_update['title'] && !ticket.title alert( App.i18n.translateContent('Title needed') ) return @@ -463,25 +447,25 @@ class Edit extends App.Controller if params['body'].match(/attachment/i) || params['body'].match( attachmentTranslatedRegExp ) return if !confirm( App.i18n.translateContent('You use attachment in text but no attachment is attached. Do you want to continue?') ) - @ticket.load( ticket_update ) - @log 'TicketZoom', 'notice', 'update ticket', ticket_update, @ticket + ticket.load( ticket_update ) + @log 'TicketZoom', 'notice', 'update ticket', ticket_update, ticket # disable form @formDisable(e) - errors = @ticket.validate() + errors = ticket.validate() if errors @log 'TicketZoom', 'error', 'update', errors @formEnable(e) - @ticket.save( + ticket.save( success: (r) => # create article if params['body'] article = new App.TicketArticle params.from = @Session.get( 'firstname' ) + ' ' + @Session.get( 'lastname' ) - params.ticket_id = @ticket.id + params.ticket_id = ticket.id params.form_id = @form_id if !params['internal'] @@ -502,12 +486,12 @@ class Edit extends App.Controller @log 'TicketZoom', 'error', 'update article', errors article.save( success: (r) => - @ui.fetch( @ticket.id, true ) + @ui.fetch( ticket.id, true ) error: (r) => @log 'TicketZoom', 'error', 'update article', r ) else - @ui.fetch( @ticket.id, true ) + @ui.fetch( ticket.id, true ) # reset form after save App.TaskManager.update( @task_key, { 'state': undefined }) @@ -534,6 +518,12 @@ class ArticleView extends App.Controller render: -> + # get all articles + @articles = [] + for article_id in @ticket.article_ids + article = App.Collection.find( 'TicketArticle', article_id ) + @articles.push article + # rework articles for article in @articles new Article( article: article ) 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 ce9273c06..8bd0c1b26 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 @@ -63,6 +63,7 @@ class _Singleton extends App.Controller @include App.Log constructor: -> + super @workers = {} @workersStarted = {} @activeTask = undefined @@ -136,7 +137,8 @@ class _Singleton extends App.Controller if task.key isnt key if task.active task.active = false - task.save() + if !task.isNew() + task.save() else changed = false if !task.active @@ -146,13 +148,15 @@ class _Singleton extends App.Controller changed = true task.notify = false if changed - task.save() + if !task.isNew() + task.save() else for task in tasks if @activeTask isnt task.key if task.active task.active = false - task.save() + if !task.isNew() + task.save() # start worker for task if not exists @startController(key, callback, params, state, to_not_show) @@ -169,7 +173,7 @@ class _Singleton extends App.Controller if worker && worker.activate worker.activate() - # return if controller is alreary started + # return if controller is already started return if @workersStarted[key] @workersStarted[key] = true @@ -207,9 +211,9 @@ class _Singleton extends App.Controller task = @get( key ) if !task throw "No such task with '#{key}' to update" - for item, value of params - task.updateAttribute(item, value) -# task.save() + return if task.isNew() + for item, value of params + task.updateAttribute(item, value) App.Event.trigger 'task:render' remove: ( key, to_not_show = false ) => @@ -229,7 +233,8 @@ class _Singleton extends App.Controller if !task throw "No such task with '#{key}' to notify" task.notify = true - task.save() + if !task.isNew() + task.save() App.Event.trigger 'task:render' reorder: ( order ) => @@ -241,7 +246,8 @@ class _Singleton extends App.Controller prio++ if task.prio isnt prio task.prio = prio - task.save() + if !task.isNew() + task.save() reset: => App.Taskbar.deleteAll() @@ -280,7 +286,7 @@ class _Singleton extends App.Controller => task = tasks.shift() @add(task.key, task.callback, task.params, true, task.state) - task_count * 500 + task_count * 350 ) App.Event.trigger 'taskbar:ready' diff --git a/app/assets/javascripts/app/views/task_widget.jst.eco b/app/assets/javascripts/app/views/task_widget.jst.eco index 109aa8a2e..d9cf6ecf0 100644 --- a/app/assets/javascripts/app/views/task_widget.jst.eco +++ b/app/assets/javascripts/app/views/task_widget.jst.eco @@ -1,6 +1,6 @@
<% for item in @item_list: %> - <%- item.data.head %> + <%= item.data.head %> <% end %> <% if !_.isEmpty( @taskBarActions ): %>
diff --git a/test/browser_test_helper.rb b/test/browser_test_helper.rb index cb6f6fa0d..b3440ba21 100644 --- a/test/browser_test_helper.rb +++ b/test/browser_test_helper.rb @@ -162,6 +162,9 @@ class TestCase < Test::Unit::TestCase def browser_element_action(test, action, instance) #puts "NOTICE: " + action.inspect if action[:css] + if action[:css].match '###stack###' + action[:css].gsub! '###stack###', @stack + end begin if action[:range] == 'all' element = instance.find_elements( { :css => action[:css] } ) @@ -200,6 +203,13 @@ class TestCase < Test::Unit::TestCase end elsif action[:execute] == 'navigate' instance.navigate.to( action[:to] ) + elsif action[:execute] == 'reload' + instance.navigate.refresh + elsif action[:link] + if action[:link].match '###stack###' + action[:link].gsub! '###stack###', @stack + end + element = instance.find_element( { :partial_link_text => action[:link] } ) else assert( false, "(#{test[:name]}) unknow selector for '#{action[:element]}'" ) end @@ -292,6 +302,7 @@ class TestCase < Test::Unit::TestCase elsif action[:execute] == 'check' elsif action[:execute] == 'close_all_tasks' elsif action[:execute] == 'navigate' + elsif action[:execute] == 'reload' else assert( false, "(#{test[:name]}) unknow action '#{action[:execute]}'" ) end