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 )