Automated merge with ssh://openslides.org/openslides
This commit is contained in:
commit
8ed8ca0c58
@ -44,4 +44,5 @@ class ItemOrderForm(Form, CssClassMixin):
|
||||
|
||||
|
||||
class ConfigForm(Form, CssClassMixin):
|
||||
agenda_countdown_time = IntegerField(widget=TextInput(attrs={'class':'small-input'}),label=_("Countdown (in seconds)"),initial=60, min_value=0)
|
||||
pass
|
||||
|
||||
|
@ -167,18 +167,20 @@ class AgendaPDF(PDFView):
|
||||
story.append(Paragraph(item.get_title(), stylesheet['Item']))
|
||||
|
||||
|
||||
class Config(FormView):
|
||||
permission_required = 'config.can_manage_config'
|
||||
form_class = ConfigForm
|
||||
template_name = 'agenda/config.html'
|
||||
|
||||
def get_initial(self):
|
||||
return {'agenda_countdown_time': config['agenda_countdown_time']}
|
||||
|
||||
def form_valid(self, form):
|
||||
config['agenda_countdown_time'] = form.cleaned_data['agenda_countdown_time']
|
||||
messages.success(self.request, _('Agenda settings successfully saved.'))
|
||||
return super(Config, self).form_valid(form)
|
||||
#
|
||||
# rene: empty for now so comment it out to keep it from appearing in the settings
|
||||
#
|
||||
#class Config(FormView):
|
||||
# permission_required = 'config.can_manage_config'
|
||||
# form_class = ConfigForm
|
||||
# template_name = 'agenda/config.html'
|
||||
#
|
||||
# def get_initial(self):
|
||||
# return {}
|
||||
#
|
||||
# def form_valid(self, form):
|
||||
# messages.success(self.request, _('Agenda settings successfully saved.'))
|
||||
# return super(Config, self).form_valid(form)
|
||||
|
||||
|
||||
def register_tab(request):
|
||||
|
@ -22,10 +22,8 @@ import webbrowser
|
||||
from contextlib import nested
|
||||
|
||||
import django.conf
|
||||
from django.db import DatabaseError
|
||||
from django.core.management import execute_from_command_line
|
||||
from django.utils.crypto import get_random_string
|
||||
from django.contrib.auth.models import User
|
||||
|
||||
import openslides
|
||||
|
||||
@ -143,6 +141,10 @@ def run_syncdb():
|
||||
|
||||
def check_database():
|
||||
"""Detect if database was deleted and recreate if necessary"""
|
||||
# can't be imported in global scope as they already require
|
||||
# the settings module during import
|
||||
from django.db import DatabaseError
|
||||
from django.contrib.auth.models import User
|
||||
|
||||
try:
|
||||
User.objects.count()
|
||||
@ -153,7 +155,9 @@ def check_database():
|
||||
return False
|
||||
|
||||
def create_or_reset_admin_user():
|
||||
|
||||
# can't be imported in global scope as it already requires
|
||||
# the settings module during import
|
||||
from django.contrib.auth.models import User
|
||||
try:
|
||||
obj = User.objects.get(username = "admin")
|
||||
except User.DoesNotExist:
|
||||
|
BIN
openslides/projector/static/images/icons/document-save.png
Normal file
BIN
openslides/projector/static/images/icons/document-save.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 563 B |
BIN
openslides/projector/static/images/icons/spin-down.png
Normal file
BIN
openslides/projector/static/images/icons/spin-down.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 269 B |
BIN
openslides/projector/static/images/icons/spin-up.png
Normal file
BIN
openslides/projector/static/images/icons/spin-up.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 255 B |
@ -42,17 +42,24 @@ $(function() {
|
||||
});
|
||||
|
||||
// control countdown
|
||||
$('.projector_countdown').click(function(event) {
|
||||
$('.projector_countdown_btn').click(function(event) {
|
||||
event.preventDefault();
|
||||
var link = $(this);
|
||||
var requestData = {};
|
||||
|
||||
if (link.attr('id') == "countdown_set") {
|
||||
requestData = { "countdown_time" : $( "#countdown_time" ).val() };
|
||||
}
|
||||
$.ajax({
|
||||
type: 'GET',
|
||||
url: link.attr('href'),
|
||||
data: requestData,
|
||||
dataType: 'json',
|
||||
success: function(data) {
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
$('.countdown_visible_link').click(function(event) {
|
||||
event.preventDefault();
|
||||
var link = $(this);
|
||||
|
@ -38,6 +38,35 @@
|
||||
visibility: hidden;
|
||||
}
|
||||
|
||||
/*.projector_countdown_spinval {*/
|
||||
#countdown_time {
|
||||
width: 40px;
|
||||
height: 16px;
|
||||
}
|
||||
|
||||
.projector_countdown_spinbox {
|
||||
height: 16px;
|
||||
width: auto;
|
||||
position: relative;
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.projector_countdown_spinup {
|
||||
position: absolute;
|
||||
top: 0px;
|
||||
left: 35px;
|
||||
}
|
||||
|
||||
.projector_countdown_spindown {
|
||||
position: absolute;
|
||||
top: 8px;
|
||||
left: 35px;
|
||||
}
|
||||
|
||||
.projector_countdown_btn {
|
||||
margin-top: auto;
|
||||
}
|
||||
|
||||
/* iframe */
|
||||
#iframe {
|
||||
-ms-zoom: 0.25;
|
||||
|
@ -25,6 +25,17 @@
|
||||
return true;
|
||||
};
|
||||
|
||||
function spinCount(delta) {
|
||||
var count = parseInt($( "#countdown_time" ).val());
|
||||
|
||||
if (count + delta < 0) {
|
||||
delta = 0;
|
||||
}
|
||||
|
||||
$( "#countdown_time" ).val(count + delta);
|
||||
return false;
|
||||
};
|
||||
|
||||
$(function() {
|
||||
$( ".column" ).sortable({
|
||||
connectWith: ".column"
|
||||
@ -132,16 +143,24 @@
|
||||
{# Countdown #}
|
||||
{% if overlay.def_name == "Countdown" %}
|
||||
|
|
||||
<a href="{% url config_agenda %}">{{countdown_time}}{% trans "sec" %}</a>
|
||||
<a class="projector_countdown" href="{% url countdown_reset %}" title="{% trans 'Reset countdown' %}">
|
||||
<span class="projector_countdown_spinbox">
|
||||
<input class="projector_countdown_spinval" id="countdown_time" name="countdown_time" type="number" min="0" value="{{countdown_time}}">
|
||||
{% trans "sec" %}
|
||||
|
||||
<a id="countdown_set" class="projector_countdown_btn" href="{% url countdown_set_default %}" title="{% trans 'Save as default' %}">
|
||||
<img src="{% static 'images/icons/document-save.png' %}" />
|
||||
</a>
|
||||
<span class="icon clear"> </span>
|
||||
<a class="projector_countdown_btn" href="{% url countdown_reset %}" title="{% trans 'Reset countdown' %}" onclick="javascript:switchButtons('play')">
|
||||
<img src="{% static 'images/icons/skip-backward.png' %}" />
|
||||
</a>
|
||||
<a id="countdown_play" class="projector_countdown" href="{% url countdown_start %}" title="{% trans 'Start countdown' %}" onclick="javascript:switchButtons('stop')">
|
||||
<a id="countdown_play" class="projector_countdown_btn" href="{% url countdown_start %}" title="{% trans 'Start countdown' %}" onclick="javascript:switchButtons('stop')">
|
||||
<img src="{% static 'images/icons/play.png' %}" />
|
||||
</a>
|
||||
<a id="countdown_stop" class="projector_countdown" href="{% url countdown_stop %}" title="{% trans 'Stop countdown' %}" onclick="javascript:switchButtons('play')">
|
||||
<a id="countdown_stop" class="projector_countdown_btn" href="{% url countdown_stop %}" title="{% trans 'Stop countdown' %}" onclick="javascript:switchButtons('play')">
|
||||
<img src="{% static 'images/icons/pause.png' %}" />
|
||||
</a>
|
||||
</span>
|
||||
{% endif %}
|
||||
{% if overlay.def_name == "Message" %}
|
||||
<form action="" method="post">{% csrf_token %}
|
||||
|
@ -85,4 +85,7 @@ urlpatterns = patterns('projector.views',
|
||||
|
||||
url(r'^countdown/stop/$', 'projector_countdown', {'command': 'stop'},
|
||||
name='countdown_stop'),
|
||||
|
||||
url(r'^countdown/set-default/$', 'projector_countdown', {'command': 'set_default'},
|
||||
name='countdown_set_default'),
|
||||
)
|
||||
|
@ -221,6 +221,16 @@ def projector_countdown(request, command):
|
||||
config['countdown_pause_stamp'] = time()
|
||||
config['countdown_state'] = 'paused'
|
||||
|
||||
elif command == 'set_default':
|
||||
try:
|
||||
config['agenda_countdown_time'] = int(request.GET['countdown_time'])
|
||||
|
||||
except ValueError:
|
||||
pass
|
||||
|
||||
except AttributeError:
|
||||
pass
|
||||
|
||||
if request.is_ajax():
|
||||
if command == "show":
|
||||
link = reverse('countdown_close')
|
||||
|
Loading…
Reference in New Issue
Block a user