diff --git a/openslides/projector/api.py b/openslides/projector/api.py
index 75d994102..2ab8ea176 100644
--- a/openslides/projector/api.py
+++ b/openslides/projector/api.py
@@ -1,5 +1,6 @@
# -*- coding: utf-8 -*-
+from json import dumps
from time import time
from django.conf import settings
@@ -116,7 +117,7 @@ def get_projector_overlays():
return render_to_string('projector/all_overlays.html', {'overlays': overlays})
-def get_projector_overlays_js():
+def get_projector_overlays_js(as_json=False):
"""
Returns JS-Code for the active overlays.
@@ -127,6 +128,8 @@ def get_projector_overlays_js():
if overlay.is_active():
overlay_js = overlay.get_javascript()
if overlay_js:
+ if as_json:
+ overlay_js = dumps(overlay_js)
javascript.append(overlay_js)
return javascript
diff --git a/openslides/projector/signals.py b/openslides/projector/signals.py
index 64838469b..ea90e5c9f 100644
--- a/openslides/projector/signals.py
+++ b/openslides/projector/signals.py
@@ -106,6 +106,7 @@ def countdown(sender, **kwargs):
return {
'load_file': static('javascript/countdown.js'),
+ 'call': 'update_countdown();',
'projector_countdown_start': start,
'projector_countdown_duration': duration,
'projector_countdown_pause': pause,
@@ -164,8 +165,9 @@ def projector_clock(sender, **kwargs):
"""
Returns JavaScript for the projector
"""
+ javascript = 'projector.set_server_time(%d);update_clock();' % int(time())
return {'load_file': static('javascript/clock.js'),
- 'server_time': int(time())}
+ 'call': javascript}
return Overlay(name, None, get_projector_html, get_projector_js,
allways_active=True)
diff --git a/openslides/projector/static/javascript/clock.js b/openslides/projector/static/javascript/clock.js
index 35bfe0833..23438a5a7 100644
--- a/openslides/projector/static/javascript/clock.js
+++ b/openslides/projector/static/javascript/clock.js
@@ -5,10 +5,9 @@ function update_clock() {
currentHours = normalise(currentHours);
currentMinutes = normalise(currentMinutes);
$('#currentTime').html(currentHours + ':' + currentMinutes);
- setTimeout('update_clock()', 200);
}
-update_clock();
+setInterval('update_clock()', 200);
function normalise(i) {
if (i < 10) {
diff --git a/openslides/projector/static/javascript/countdown.js b/openslides/projector/static/javascript/countdown.js
index 2b248b63e..9a52631df 100644
--- a/openslides/projector/static/javascript/countdown.js
+++ b/openslides/projector/static/javascript/countdown.js
@@ -38,10 +38,9 @@ function update_countdown() {
if(seconds !== undefined) {
$('#overlay_countdown_inner').html(seconds);
}
- setTimeout('update_countdown()', 200);
}
-update_countdown();
+setInterval('update_countdown()', 200);
function normalise(i) {
if(i < 10) {
diff --git a/openslides/projector/static/javascript/projector.js b/openslides/projector/static/javascript/projector.js
index 0a105e378..3f267c7e0 100644
--- a/openslides/projector/static/javascript/projector.js
+++ b/openslides/projector/static/javascript/projector.js
@@ -37,13 +37,19 @@ var projector = {
return date;
},
+ set_server_time: function(value) {
+ var local_time = Date.parse(new Date().toUTCString());
+ projector.server_time_offset = local_time - value * 1000;
+ },
+
update_data: function(data) {
$.each(data, function (key, value) {
if (key === 'load_file')
projector.load_file(value);
- else if (key === 'server_time') {
- var local_time = Date.parse(new Date().toUTCString());
- projector.server_time_offset = local_time - value * 1000;
+ else if (key === 'call') {
+ try {
+ eval(value);
+ } catch (e) {}
} else
projector[key] = value;
});
diff --git a/openslides/projector/templates/projector.html b/openslides/projector/templates/projector.html
index 463dd22e3..52aa5f387 100644
--- a/openslides/projector/templates/projector.html
+++ b/openslides/projector/templates/projector.html
@@ -14,12 +14,14 @@
diff --git a/openslides/projector/views.py b/openslides/projector/views.py
index 504fd8885..15048b82a 100644
--- a/openslides/projector/views.py
+++ b/openslides/projector/views.py
@@ -51,7 +51,7 @@ class ProjectorView(TemplateView):
kwargs.update({
'content': get_projector_content(),
'overlays': get_projector_overlays(),
- 'overlay_js': get_projector_overlays_js(),
+ 'overlay_js': get_projector_overlays_js(as_json=True),
'reload': True,
'calls': config['projector_js_cache']})
# For the Preview
diff --git a/tests/projector/test_views.py b/tests/projector/test_views.py
index 8b533fa96..467293474 100644
--- a/tests/projector/test_views.py
+++ b/tests/projector/test_views.py
@@ -33,7 +33,7 @@ class ProjectorViewTest(TestCase):
context = view.get_context_data()
mock_get_projector_content.assert_called_with()
mock_get_projector_overlays.assert_called_with()
- mock_get_projector_overlays_js.assert_called_with()
+ mock_get_projector_overlays_js.assert_called_with(as_json=True)
self.assertTrue(context['reload'])
self.assertEqual(context['calls'], 'js_cache')