rewrote widgets for the dashboard
This commit is contained in:
parent
dfb24ba61a
commit
6b7ea558fc
@ -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')]
|
||||
|
@ -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')]
|
||||
|
@ -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')]
|
||||
|
@ -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")
|
||||
|
@ -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'>
|
||||
|
@ -15,87 +15,51 @@
|
||||
|
||||
{% block content %}
|
||||
<h1>{% trans 'Dashboard' %}</h1>
|
||||
<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>
|
||||
<a class="projector_edit" href="{% url projector_smaller %}" title="{% trans 'Zoom out' %}">
|
||||
<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>
|
||||
<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>
|
||||
{% 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>
|
||||
<a class="projector_edit" href="{% url projector_smaller %}" title="{% trans 'Zoom out' %}">
|
||||
<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>
|
||||
<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">
|
||||
{% for name, widget in widgets.items %}
|
||||
{% if name != 'projector' %}
|
||||
<div class="portlet" id="portlet_{{ widget.get_name }}">
|
||||
<div class="portlet-header">{% trans widget.get_title %}</div>
|
||||
<div class="portlet-content">
|
||||
{{ widget.html }}
|
||||
{% for name, widget in widgets.items %}
|
||||
{% 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">
|
||||
{{ widget.html }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</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>
|
||||
{% 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>
|
||||
</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>
|
||||
<div class="portlet-content">
|
||||
{{ widget.html }}
|
||||
</div>
|
||||
</div> <!-- end portlet-->
|
||||
{% endwith %}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</div> <!-- end column -->
|
||||
{% endblock %}
|
||||
|
@ -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>
|
24
openslides/projector/templates/projector/overlay_widget.html
Normal file
24
openslides/projector/templates/projector/overlay_widget.html
Normal 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>
|
@ -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',
|
||||
context={
|
||||
'slides': ProjectorSlide.objects.all(),
|
||||
'welcomepage_is_active': not bool(config["presentation"])},
|
||||
permission_required = 'projector.can_manage_projector',
|
||||
),
|
||||
]
|
||||
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
|
||||
|
Loading…
Reference in New Issue
Block a user