rewrote widgets for the dashboard

This commit is contained in:
Oskar Hahn 2012-08-15 11:56:43 +02:00
parent dfb24ba61a
commit 6b7ea558fc
10 changed files with 150 additions and 120 deletions

View File

@ -229,7 +229,5 @@ def get_widgets(request):
template='agenda/widget.html',
context={
'agenda': SLIDE['agenda'],
'items': Item.objects.all(),
}
),
]
'items': Item.objects.all()},
permission_required='agenda.can_manage_agenda')]

View File

@ -917,6 +917,8 @@ def register_tab(request):
def get_widgets(request):
return [
Widget(name='applications', template='application/widget.html',
context={'applications': Application.objects.all()})
]
Widget(
name='applications',
template='application/widget.html',
context={'applications': Application.objects.all()},
permission_required='application.can_manage_application')]

View File

@ -657,6 +657,8 @@ def register_tab(request):
def get_widgets(request):
return [
Widget(name=_('Assignments'), template='assignment/widget.html',
context={'assignments': Assignment.objects.all()})
]
Widget(
name=_('Assignments'),
template='assignment/widget.html',
context={'assignments': Assignment.objects.all()},
permission_required='assignment.can_manage_assignment')]

View File

@ -106,13 +106,20 @@ class Widget(object):
Class for a Widget for the Projector-Tab.
"""
def __init__(self, name, html=None, template=None, context={},
permission_required=None):
permission_required=None, display_name=None, default_column=1):
self.name = name
if display_name is None:
self.display_name = name.capitalize()
else:
self.display_name = display_name
if html is not None:
self.html = html
elif template is not None:
self.html = render_to_string(template, context)
self.permission_required = permission_required
self.default_column = default_column
def get_name(self):
return self.name.lower()
@ -121,7 +128,10 @@ class Widget(object):
return self.html
def get_title(self):
return self.name.capitalize()
return self.display_name
def __repr__(self):
return self.get_name()
@receiver(projector_overlays, dispatch_uid="projector_countdown")

View File

@ -1,6 +1,7 @@
{% load staticfiles %}
{% load i18n %}
{% load tags %}
<form id="overlay_message" action="" method="post" style="display:inline">{% csrf_token %}
<input id="overlay_message_text" name='message_text' type='text' style='width: 40%' value="{% get_config 'projector_message' %}">
<button type="submit" class="button" name='message'>

View File

@ -15,24 +15,31 @@
{% block content %}
<h1>{% trans 'Dashboard' %}</h1>
{% if perms.projector.can_manage_projector %}
<div style="text-align: right; padding: 0 10px 5px 0; margin-top:-20px;">
<!-- projector control -->
{% trans "Adjust projector view" %}:
<a class="projector_edit" href="{% url projector_bigger %}" title="{% trans 'Zoom in' %}">
<img src="{% static 'images/icons/zoom-in.png' %}" /></a>
<img src="{% static 'images/icons/zoom-in.png' %}" />
</a>
<a class="projector_edit" href="{% url projector_smaller %}" title="{% trans 'Zoom out' %}">
<img src="{% static 'images/icons/zoom-out.png' %}" /></a>
<img src="{% static 'images/icons/zoom-out.png' %}" />
</a>
<a class="projector_edit" href="{% url projector_up %}" title="{% trans 'Scroll text up' %}">
<img src="{% static 'images/icons/go-up.png' %}" /></a>
<img src="{% static 'images/icons/go-up.png' %}" />
</a>
<a class="projector_edit" href="{% url projector_down %}" title="{% trans 'Scroll text down' %}">
<img src="{% static 'images/icons/go-down.png' %}" /></a>
<img src="{% static 'images/icons/go-down.png' %}" />
</a>
<a class="projector_edit" href="{% url projector_clean %}" title="{% trans 'Reset projector view' %}">
<img src="{% static 'images/icons/view-reset.png' %}" /></a>
<img src="{% static 'images/icons/view-reset.png' %}" />
</a>
</div>
{% endif %}
<div class="column" id="col1">
{% for name, widget in widgets.items %}
{% if name != 'projector' %}
{% if widget.default_column == 1 %}
<div class="portlet" id="portlet_{{ widget.get_name }}">
<div class="portlet-header">{% trans widget.get_title %}</div>
<div class="portlet-content">
@ -44,58 +51,15 @@
</div> <!-- end column-->
<div class="column" id="col2">
<!-- Projector Live View -->
<div class="portlet" id="portlet_liveview">
<div class="portlet-header">
{% trans "Projector Live View" %}
</div>
<div class="portlet-content">
<a href="{% url projector_show %}" target="_blank" title="{% trans 'Open Projector view' %}" >
<div id="iframewrapper">
<iframe id="iframe" src="{% url projector_show %}" frameborder="0"></iframe>
<div id="iframeoverlay"></div>
</div>
</a>
</div>
</div> <!-- end portlet-->
<!-- Overlays (Countdown etc.)-->
<div class="portlet" id="portlet_overlays">
<div class="portlet-header">{% trans 'Overlays' %}</div>
<div class="portlet-content">
<ul>
{% for overlay in overlays %}
<li>
<a id="{{ overlay.def_name }}_inactive" href="{% url projector_overlay_activate overlay.def_name %}" class="overlay"{% if overlay.active %} style="display:none"{% endif %}>
<div></div>
</a>
<a id="{{ overlay.def_name }}_active" href="{% url projector_overlay_deactivate overlay.def_name %}" class="overlay active"{% if not overlay.active %} style="display:none"{% endif %}>
<div></div>
</a>
{{ overlay }}:
{# TODO: Call the html via overlay.html #}
{# Countdown #}
{% if overlay.def_name == "Countdown" %}
{% include 'projector/control_countdown.html' %}
{% endif %}
{% if overlay.def_name == "Message" %}
{% include 'projector/control_overlay_message.html' %}
{% endif %}
</li>
{% endfor %}
</ul>
</div>
</div> <!-- end portlet-->
<!-- Custom slides -->
{% with widget=widgets.projector %}
<div class="portlet" id="portlet_customslides">
<div class="portlet-header">{% trans "Custom slides" %}</div>
{% for name, widget in widgets.items %}
{% if widget.default_column == 2 %}
<div class="portlet" id="portlet_{{ widget.get_name }}">
<div class="portlet-header">{% trans widget.get_title %}</div>
<div class="portlet-content">
{{ widget.html }}
</div>
</div> <!-- end portlet-->
{% endwith %}
</div>
{% endif %}
{% endfor %}
</div> <!-- end column -->
{% endblock %}

View File

@ -0,0 +1,10 @@
{% load i18n %}
{% load tags %}
<a href="{% url projector_show %}" target="_blank">
<div id="iframewrapper">
<iframe id="iframe" src="{% url projector_show %}" frameborder="0"></iframe>
<div id="iframeoverlay"></div>
</div>
</a>

View File

@ -0,0 +1,24 @@
{% load i18n %}
{% load tags %}
<ul>
{% for overlay in overlays %}
<li>
<a id="{{ overlay.def_name }}_inactive" href="{% url projector_overlay_activate overlay.def_name %}" class="overlay"{% if overlay.active %} style="display:none"{% endif %}>
<div></div>
</a>
<a id="{{ overlay.def_name }}_active" href="{% url projector_overlay_deactivate overlay.def_name %}" class="overlay active"{% if not overlay.active %} style="display:none"{% endif %}>
<div></div>
</a>
{{ overlay }}:
{# TODO: Call the html via overlay.html #}
{% if overlay.def_name == "Countdown" %}
{% include 'projector/control_countdown.html' %}
{% endif %}
{% if overlay.def_name == "Message" %}
{% include 'projector/control_overlay_message.html' %}
{% endif %}
</li>
{% endfor %}
</ul>

View File

@ -43,22 +43,8 @@ class DashboardView(TemplateView, AjaxMixin):
template_name = 'projector/dashboard.html'
permission_required = 'projector.can_see_dashboard'
def get_projector_overlays(self):
overlays = []
for receiver, name in projector_overlays.send(sender='registerer',
register=True):
if name is not None:
try:
projector_overlay = ProjectorOverlay.objects.get(
def_name=name)
except ProjectorOverlay.DoesNotExist:
projector_overlay = ProjectorOverlay(def_name=name,
active=False)
projector_overlay.save()
overlays.append(projector_overlay)
return overlays
def post(self, request, *args, **kwargs):
# TODO: Try to put this code in the widget
if 'message' in request.POST:
projector_message_set(request.POST['message_text'])
elif 'message-clean' in request.POST:
@ -88,16 +74,13 @@ class DashboardView(TemplateView, AjaxMixin):
continue
for widget in modul_widgets:
if self.request.user.has_perm(widget.permission_required):
if (widget.permission_required is None or
self.request.user.has_perm(widget.permission_required)):
widgets[widget.get_name()] = widget
print widget, widget.permission_required
context.update({
'countdown_time': config['countdown_time'],
'countdown_state' : config['countdown_state'],
'overlays': self.get_projector_overlays(),
'widgets': widgets,
})
context['widgets'] = widgets
return context
@ -350,15 +333,51 @@ def register_tab(request):
def get_widgets(request):
"""
Return the custom slide widget.
Return the widgets of the projector app
"""
return [
Widget(
name='projector',
template='projector/widget.html',
widgets = []
# Projector live view widget
widgets.append(Widget(
name='live_view',
display_name=_('Projector live view'),
template='projector/live_view_widget.html',
permission_required='projector.can_see_projector',
default_column=2))
# Overlay Widget
overlays = []
for receiver, name in projector_overlays.send(sender='registerer',
register=True):
if name is not None:
try:
projector_overlay = ProjectorOverlay.objects.get(
def_name=name)
except ProjectorOverlay.DoesNotExist:
projector_overlay = ProjectorOverlay(def_name=name,
active=False)
projector_overlay.save()
overlays.append(projector_overlay)
widgets.append(Widget(
name='overlays',
display_name=_('Manage Overlays'),
template='projector/overlay_widget.html',
permission_required='projector.can_manage_projector',
default_column=2,
context={
'overlays':overlays,
'countdown_time': config['countdown_time'],
'countdown_state' : config['countdown_state']}))
# Custom slide widget
widgets.append(Widget(
name='custom_slide',
display_name=_('Custom Slide'),
template='projector/custom_slide_widget.html',
context={
'slides': ProjectorSlide.objects.all(),
'welcomepage_is_active': not bool(config["presentation"])},
permission_required='projector.can_manage_projector',
),
]
default_column=2))
return widgets