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', template='agenda/widget.html',
context={ context={
'agenda': SLIDE['agenda'], '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): def get_widgets(request):
return [ return [
Widget(name='applications', template='application/widget.html', Widget(
context={'applications': Application.objects.all()}) 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): def get_widgets(request):
return [ return [
Widget(name=_('Assignments'), template='assignment/widget.html', Widget(
context={'assignments': Assignment.objects.all()}) 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. Class for a Widget for the Projector-Tab.
""" """
def __init__(self, name, html=None, template=None, context={}, def __init__(self, name, html=None, template=None, context={},
permission_required=None): permission_required=None, display_name=None, default_column=1):
self.name = name self.name = name
if display_name is None:
self.display_name = name.capitalize()
else:
self.display_name = display_name
if html is not None: if html is not None:
self.html = html self.html = html
elif template is not None: elif template is not None:
self.html = render_to_string(template, context) self.html = render_to_string(template, context)
self.permission_required = permission_required self.permission_required = permission_required
self.default_column = default_column
def get_name(self): def get_name(self):
return self.name.lower() return self.name.lower()
@ -121,7 +128,10 @@ class Widget(object):
return self.html return self.html
def get_title(self): 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") @receiver(projector_overlays, dispatch_uid="projector_countdown")

View File

@ -1,6 +1,7 @@
{% load staticfiles %} {% load staticfiles %}
{% load i18n %} {% load i18n %}
{% load tags %} {% load tags %}
<form id="overlay_message" action="" method="post" style="display:inline">{% csrf_token %} <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' %}"> <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'> <button type="submit" class="button" name='message'>

View File

@ -15,87 +15,51 @@
{% block content %} {% block content %}
<h1>{% trans 'Dashboard' %}</h1> <h1>{% trans 'Dashboard' %}</h1>
<div style="text-align: right; padding: 0 10px 5px 0; margin-top:-20px;"> {% if perms.projector.can_manage_projector %}
<!-- projector control --> <div style="text-align: right; padding: 0 10px 5px 0; margin-top:-20px;">
{% trans "Adjust projector view" %}: <!-- projector control -->
<a class="projector_edit" href="{% url projector_bigger %}" title="{% trans 'Zoom in' %}"> {% trans "Adjust projector view" %}:
<img src="{% static 'images/icons/zoom-in.png' %}" /></a> <a class="projector_edit" href="{% url projector_bigger %}" title="{% trans 'Zoom in' %}">
<a class="projector_edit" href="{% url projector_smaller %}" title="{% trans 'Zoom out' %}"> <img src="{% static 'images/icons/zoom-in.png' %}" />
<img src="{% static 'images/icons/zoom-out.png' %}" /></a> </a>
<a class="projector_edit" href="{% url projector_up %}" title="{% trans 'Scroll text up' %}"> <a class="projector_edit" href="{% url projector_smaller %}" title="{% trans 'Zoom out' %}">
<img src="{% static 'images/icons/go-up.png' %}" /></a> <img src="{% static 'images/icons/zoom-out.png' %}" />
<a class="projector_edit" href="{% url projector_down %}" title="{% trans 'Scroll text down' %}"> </a>
<img src="{% static 'images/icons/go-down.png' %}" /></a> <a class="projector_edit" href="{% url projector_up %}" title="{% trans 'Scroll text up' %}">
<a class="projector_edit" href="{% url projector_clean %}" title="{% trans 'Reset projector view' %}"> <img src="{% static 'images/icons/go-up.png' %}" />
<img src="{% static 'images/icons/view-reset.png' %}" /></a> </a>
</div> <a class="projector_edit" href="{% url projector_down %}" title="{% trans 'Scroll text down' %}">
<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>
</div>
{% endif %}
<div class="column" id="col1"> <div class="column" id="col1">
{% for name, widget in widgets.items %} {% 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" id="portlet_{{ widget.get_name }}">
<div class="portlet-header">{% trans widget.get_title %}</div> <div class="portlet-header">{% trans widget.get_title %}</div>
<div class="portlet-content"> <div class="portlet-content">
{{ widget.html }} {{ widget.html }}
</div>
</div> </div>
</div> {% endif %}
{% endif %} {% endfor %}
{% endfor %}
</div> <!-- end column--> </div> <!-- end column-->
<div class="column" id="col2"> <div class="column" id="col2">
<!-- Projector Live View --> {% for name, widget in widgets.items %}
<div class="portlet" id="portlet_liveview"> {% if widget.default_column == 2 %}
<div class="portlet-header"> <div class="portlet" id="portlet_{{ widget.get_name }}">
{% trans "Projector Live View" %} <div class="portlet-header">{% trans widget.get_title %}</div>
</div> <div class="portlet-content">
<div class="portlet-content"> {{ widget.html }}
<a href="{% url projector_show %}" target="_blank" title="{% trans 'Open Projector view' %}" > </div>
<div id="iframewrapper">
<iframe id="iframe" src="{% url projector_show %}" frameborder="0"></iframe>
<div id="iframeoverlay"></div>
</div> </div>
</a> {% endif %}
</div> {% endfor %}
</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>
<div class="portlet-content">
{{ widget.html }}
</div>
</div> <!-- end portlet-->
{% endwith %}
</div> <!-- end column --> </div> <!-- end column -->
{% endblock %} {% 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' template_name = 'projector/dashboard.html'
permission_required = 'projector.can_see_dashboard' 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): def post(self, request, *args, **kwargs):
# TODO: Try to put this code in the widget
if 'message' in request.POST: if 'message' in request.POST:
projector_message_set(request.POST['message_text']) projector_message_set(request.POST['message_text'])
elif 'message-clean' in request.POST: elif 'message-clean' in request.POST:
@ -88,16 +74,13 @@ class DashboardView(TemplateView, AjaxMixin):
continue continue
for widget in modul_widgets: 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 widgets[widget.get_name()] = widget
print widget, widget.permission_required
context.update({ context['widgets'] = widgets
'countdown_time': config['countdown_time'],
'countdown_state' : config['countdown_state'],
'overlays': self.get_projector_overlays(),
'widgets': widgets,
})
return context return context
@ -350,15 +333,51 @@ def register_tab(request):
def get_widgets(request): def get_widgets(request):
""" """
Return the custom slide widget. Return the widgets of the projector app
""" """
return [ widgets = []
Widget(
name='projector', # Projector live view widget
template='projector/widget.html', widgets.append(Widget(
context={ name='live_view',
'slides': ProjectorSlide.objects.all(), display_name=_('Projector live view'),
'welcomepage_is_active': not bool(config["presentation"])}, template='projector/live_view_widget.html',
permission_required = 'projector.can_manage_projector', 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