#97: Countdown: move countdown config input field from config tab to portlet

This commit is contained in:
René Köcher 2012-04-26 12:43:35 +02:00
parent aac48a0b02
commit 7b7f43b04a
10 changed files with 115 additions and 24 deletions

View File

@ -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

View File

@ -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):

Binary file not shown.

After

Width:  |  Height:  |  Size: 563 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 269 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 255 B

View File

@ -42,17 +42,38 @@ $(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) {
}
});
});
$('.projector_countdown_spindown').click(function(event) {
event.preventDefault();
var count = parseInt($( "#countdown_time" ).val());
$( "#countdown_time" ).val( ((count - 1 >= 0) ? count - 1 : count));
});
$('.projector_countdown_spinup').click(function(event) {
event.preventDefault();
var count = parseInt($( "#countdown_time" ).val());
$( "#countdown_time" ).val(count + 1);
});
$('.countdown_visible_link').click(function(event) {
event.preventDefault();
var link = $(this);

View File

@ -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;

View File

@ -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,30 @@
{# 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="text" value="{{countdown_time}}">
<a class="projector_countdown_spinup" href="#">
<img src="{% static 'images/icons/spin-up.png' %}" />
</a>
<a class="projector_countdown_spindown" href="#">
<img src="{% static 'images/icons/spin-down.png' %}" />
</a>
{% trans "sec" %}
&nbsp;
<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">&nbsp;&nbsp;&nbsp;&nbsp;</span>
<a class="projector_countdown_btn" href="{% url countdown_reset %}" title="{% trans 'Reset countdown' %}">
<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 %}

View File

@ -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'),
)

View File

@ -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')