diff --git a/app/assets/javascripts/app/controllers/_application_controller.js.coffee b/app/assets/javascripts/app/controllers/_application_controller.js.coffee index 24b0e9f47..e804c2a4f 100644 --- a/app/assets/javascripts/app/controllers/_application_controller.js.coffee +++ b/app/assets/javascripts/app/controllers/_application_controller.js.coffee @@ -24,6 +24,13 @@ class App.Controller extends Spine.Controller else window.prompt( "Copy to clipboard: Ctrl+C, Enter", text ) + # disable all delay's and interval's + disconnectClient: -> + App.Delay.reset() + App.Interval.reset() + App.WebSocket.close( force: true ) + + # add @notify methode to create notification notify: (data) -> App.Event.trigger 'notify', data @@ -478,7 +485,7 @@ class App.ErrorModal extends App.ControllerModal keyboard: false, ) -class App.SessionReloadModal extends App.ControllerModal +class App.SessionMessage extends App.ControllerModal constructor: -> super @render() @@ -497,15 +504,19 @@ class App.SessionReloadModal extends App.ControllerModal ) # reload page on modal hidden - @el.on('hidden', => - @reload() - ) + if @forceReload + @el.on('hidden', => + @reload() + ) - modalHide: (e) -> - @reload(e) + modalHide: (e) => + if @forceReload + @reload(e) + @el.modal('hide') - submit: (e) -> - @reload(e) + submit: (e) => + if @forceReload + @reload(e) reload: (e) -> if e diff --git a/app/assets/javascripts/app/controllers/maintenance_widget.js.coffee b/app/assets/javascripts/app/controllers/maintenance_widget.js.coffee index 2ff3b14d0..a74bb02b9 100644 --- a/app/assets/javascripts/app/controllers/maintenance_widget.js.coffee +++ b/app/assets/javascripts/app/controllers/maintenance_widget.js.coffee @@ -12,15 +12,19 @@ class Message extends App.ControllerModal @render(@message) render: (message = {}) -> - @html App.view('modal')( - title: message.title, - message: message.message - detail: message.detail - close: message.close - ) - @modalShow( - backdrop: true, - keyboard: true, + + if message.reload + @disconnectClient() + button = 'Reload application' + + new App.SessionMessage( + title: message.title + message: message.message + keyboard: false + backdrop: true + close: true + button: button + forceReload: message.reload ) App.Config.set( 'maintenance', App.MaintenanceWidget, 'Widgets' ) diff --git a/app/assets/javascripts/app/controllers/task_widget.js.coffee b/app/assets/javascripts/app/controllers/task_widget.js.coffee index fdc664f08..466a0fb5b 100644 --- a/app/assets/javascripts/app/controllers/task_widget.js.coffee +++ b/app/assets/javascripts/app/controllers/task_widget.js.coffee @@ -49,19 +49,16 @@ class App.TaskWidget extends App.Controller # only if new client id isnt own client id if data.taskbar_id isnt App.TaskManager.TaskbarId() - @error = new App.SessionReloadModal( - title: 'Session' - message: 'Session taken over... please reload page or work with other browser window.' - keyboard: false - backdrop: true - close: true - button: 'Reload application' + @error = new App.SessionMessage( + title: 'Session' + message: 'Session taken over... please reload page or work with other browser window.' + keyboard: false + backdrop: true + close: true + button: 'Reload application' + forceReload: true ) - - # disable all delay's and interval's - App.Delay.reset() - App.Interval.reset() - App.WebSocket.close( force: true ) + @disconnectClient() render: -> diff --git a/app/assets/javascripts/app/views/maintenance.jst.eco b/app/assets/javascripts/app/views/maintenance.jst.eco index ff626ee77..2133d0604 100644 --- a/app/assets/javascripts/app/views/maintenance.jst.eco +++ b/app/assets/javascripts/app/views/maintenance.jst.eco @@ -5,18 +5,24 @@
- +
- + +
+
+
+ +
+
- +
diff --git a/db/seeds.rb b/db/seeds.rb index 169368b84..eb81b03c9 100644 --- a/db/seeds.rb +++ b/db/seeds.rb @@ -1811,6 +1811,7 @@ Translation.create_if_not_exists( :locale => 'de', :source => "Back to top", :ta Translation.create_if_not_exists( :locale => 'de', :source => "Discard your unsaved changes.", :target => "Verwerfen der ungespeicherten Änderungen." ) Translation.create_if_not_exists( :locale => 'de', :source => "Copy to clipboard: Ctrl+C, Enter", :target => "In die Zwischenablage kopieren: Strg+C, Return" ) Translation.create_if_not_exists( :locale => 'de', :source => "Copy to clipboard", :target => "In die Zwischenablage kopieren" ) +Translation.create_if_not_exists( :locale => 'de', :source => "Send to clients", :target => "An Clients senden" ) #Translation.create_if_not_exists( :locale => 'de', :source => "", :target => "" ) # install all packages in auto_install diff --git a/test/browser/maintenance_message_test.rb b/test/browser/maintenance_message_test.rb index 9fc6d30fa..60a69c626 100644 --- a/test/browser/maintenance_message_test.rb +++ b/test/browser/maintenance_message_test.rb @@ -6,7 +6,7 @@ class MaintenanceMessageTest < TestCase message = 'message 1äöüß ' + rand(99999999999999999).to_s tests = [ { - :name => 'start', + :name => 'check #1', :instance1 => browser_instance, :instance2 => browser_instance, :instance1_username => 'master@example.com', @@ -15,18 +15,6 @@ class MaintenanceMessageTest < TestCase :instance2_password => 'test', :url => browser_url, :action => [ - { - :where => :instance1, - :execute => 'check', - :css => '#login', - :result => false, - }, - { - :where => :instance2, - :execute => 'check', - :css => '#login', - :result => false, - }, { :execute => 'wait', :value => 1, @@ -36,19 +24,11 @@ class MaintenanceMessageTest < TestCase :execute => 'click', :css => 'a[href="#admin"]', }, - { - :execute => 'wait', - :value => 1, - }, { :where => :instance1, :execute => 'click', :css => 'a[href="#maintenance"]', }, - { - :execute => 'wait', - :value => 1, - }, { :where => :instance1, :execute => 'set', @@ -70,6 +50,13 @@ class MaintenanceMessageTest < TestCase :execute => 'wait', :value => 5, }, + { + :where => :instance1, + :execute => 'match', + :css => 'body', + :value => message, + :match_result => false, + }, { :where => :instance2, :execute => 'check', @@ -77,7 +64,7 @@ class MaintenanceMessageTest < TestCase :result => true, }, { - :where => :instance2, + :where => :instance2, :execute => 'match', :css => 'body', :value => message, @@ -86,76 +73,145 @@ class MaintenanceMessageTest < TestCase { :where => :instance2, :execute => 'click', - :css => 'div.modal-backdrop.fade.in', + :css => 'div.modal-header .close', + }, + { + :execute => 'wait', + :value => 2, }, ], }, { - :name => 'start', + :name => 'check #2', :action => [ - { - :where => :instance1, - :execute => 'check', - :css => '#login', - :result => false, - }, - { - :where => :instance2, - :execute => 'check', - :css => '#login', - :result => false, - }, - { - :execute => 'wait', - :value => 1, - }, { :where => :instance1, :execute => 'click', :css => 'a[href="#admin"]', }, - { - :execute => 'wait', - :value => 1, - }, { :where => :instance1, :execute => 'click', :css => 'a[href="#maintenance"]', }, - { - :execute => 'wait', - :value => 1, - }, { :where => :instance1, :execute => 'set', :css => 'input[name="title"]', - :value => message, + :value => message + ' #2', }, { :where => :instance1, :execute => 'set', :css => 'textarea[name="message"]', - :value => message, + :value => message + ' #2', + }, + { + :where => :instance1, + :execute => 'click', + :css => 'button[type="submit"]', }, { :execute => 'wait', :value => 5, }, { - :where => :instance2, + :where => :instance1, + :execute => 'match', + :css => 'body', + :value => message + ' #2', + :match_result => false, + }, + { + :where => :instance1, :execute => 'check', :css => 'div.modal-backdrop.fade.in', :result => false, }, { - :where => :instance2, + :where => :instance2, :execute => 'match', :css => 'body', - :value => message, + :value => message + ' #2', + :match_result => true, + }, + { + :where => :instance2, + :execute => 'click', + :css => 'div.modal-header .close', + }, + { + :execute => 'wait', + :value => 2, + }, + ], + }, + { + :name => 'check #3', + :action => [ + { + :where => :instance1, + :execute => 'click', + :css => 'a[href="#admin"]', + }, + { + :where => :instance1, + :execute => 'click', + :css => 'a[href="#maintenance"]', + }, + { + :where => :instance1, + :execute => 'set', + :css => 'input[name="title"]', + :value => message + ' #3' , + }, + { + :where => :instance1, + :execute => 'set', + :css => 'textarea[name="message"]', + :value => message + ' #3', + }, + { + :where => :instance1, + :execute => 'setCheck', + :css => 'input[name="reload"][value="1"]', + }, + { + :where => :instance1, + :execute => 'click', + :css => 'button[type="submit"]', + }, + { + :execute => 'wait', + :value => 5, + }, + { + :where => :instance1, + :execute => 'check', + :css => 'div.modal-backdrop.fade.in', + :result => false, + }, + { + :where => :instance1, + :execute => 'match', + :css => 'body', + :value => message + ' #3', :match_result => false, }, + { + :where => :instance2, + :execute => 'match', + :css => 'body', + :value => message + ' #3', + :match_result => true, + }, + { + :where => :instance2, + :execute => 'match', + :css => 'body', + :value => 'Reload application', + :match_result => true, + }, ], }, ] diff --git a/test/browser_test_helper.rb b/test/browser_test_helper.rb index 001cb0bed..ccd4a9a54 100644 --- a/test/browser_test_helper.rb +++ b/test/browser_test_helper.rb @@ -248,7 +248,17 @@ class TestCase < Test::Unit::TestCase else assert( false, "(#{test[:name]}) unknow selector for '#{action[:element]}'" ) end - if action[:execute] == 'set' + if action[:execute] == 'setCheck' + checked = element.attribute('checked') + if !checked + element.click + end + elsif action[:execute] == 'setUncheck' + checked = element.attribute('checked') + if checked + element.click + end + elsif action[:execute] == 'set' element.clear if action[:value] == '###stack###' element.send_keys( @stack )