From 2d07644d3ca871d57f35593681da6ce618090443 Mon Sep 17 00:00:00 2001 From: Oskar Hahn Date: Wed, 6 Nov 2013 14:42:14 +0100 Subject: [PATCH] Fixed some javascript related problems --- openslides/projector/api.py | 5 ++++- openslides/projector/signals.py | 4 +++- openslides/projector/static/javascript/clock.js | 3 +-- openslides/projector/static/javascript/countdown.js | 3 +-- openslides/projector/static/javascript/projector.js | 12 +++++++++--- openslides/projector/templates/projector.html | 2 ++ openslides/projector/views.py | 2 +- tests/projector/test_views.py | 2 +- 8 files changed, 22 insertions(+), 11 deletions(-) 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')