Merge pull request #709 from emanuelschuetze/fixes-for-1.4b2

Fixes and improvements for 1.4b2
This commit is contained in:
Emanuel Schütze 2013-06-03 15:58:13 -07:00
commit 37da0cc7bb
29 changed files with 1548 additions and 1906 deletions

View File

@ -42,6 +42,8 @@ Participants:
- Added warning if non-superuser removes his last group containing permission to manage participants.
Other:
- New template based on twitter bootstrap.
- New GUI frontend for the Windows portable version.
- Added command to backup sqlite database.
- Used Tornado web server (instead of Django's default development server).
- New mediafile app (files) to upload/download files via frontend.
- New config app: Apps have to define config vars only once; config pages and

77
THANKS
View File

@ -5,29 +5,84 @@
OpenSlides uses parts of the following projects:
* Django
<https://www.djangoproject.com/>
<https://www.djangoproject.com>
License: BSD
* Django mptt
<https://github.com/django-mptt/django-mptt>
License: BSD
* jQuery
<http://www.jquery.com/>
and some addons: cookie, form, once, templating
<http://www.jquery.com>
License: MIT
and some plugins:
- jQuery DataTables Plugin
<http://www.datatables.net>
License: BSD/GPLv2
- jQuery Cookie Plugin
<https://github.com/carhartl/jquery-cookie/>
License: MIT/GPL
- jQuery Form Plugin
<http://malsup.com/jquery/form/>
License: MIT/GPLv2
- jQuery Once Plugin
<http://plugins.jquery.com/project/once/>
License: MIT/GPL
- jQuery Templating Plugin
<https://github.com/BorisMoore/jquery-tmpl/>
License: MIT/GPLv2
* jQuery UI
<http://jqueryui.com/>
custom ui components: core, widget, mouse, sortable, datepicker, slider
with css theme 'smoothness'
and some addons: slider access, timepicker
* nestedSortable jQuery Plugin
<http://mjsarfatti.com/sandbox/nestedSortable/>
<http://jqueryui.com>
with custom ui components: core, widget, mouse, sortable, datepicker, slider
and css theme 'smoothness'
License: MIT
and some addons:
- jQuery UI Nested Sortable
<http://mjsarfatti.com/code/nestedSortable/>
License: MIT
- jQuery UI Slider Access
<http://trentrichardson.com/examples/jQuery-SliderAccess/>
License: MIT/GPLv2
- jQuery timepicker addon
<http://trentrichardson.com/examples/timepicker/>
License: MIT/GPLv2
* Twitter Bootstrap
<http://twitter.github.com/bootstrap/>
License: Apache License v2.0
* CKEditor
<http://ckeditor.com>
License: GPL, LGPL, MPL
* Beautiful Soup
<http://www.crummy.com/software/BeautifulSoup/>
License: MIT
* Bleach
<https://github.com/jsocol/bleach/>
License: BSD
* Pillow
<https://github.com/python-imaging/Pillow>
License: Standard PIL License
* qrcode
<https://github.com/lincolnloop/python-qrcode>
License: BSD
* ReportLab
<http://www.reportlab.com/software/opensource/rl-toolkit/>
License: BSD
* Tornado
<http://www.tornadoweb.org/en/stable/>
License: Apache License v2.0
* Ubuntu TrueType Font
<http://font.ubuntu.com/>
<http://font.ubuntu.com>
License: Ubuntu Font Licence 1.0
* Sphinx
<http://sphinx-doc.org/>

View File

@ -51,15 +51,15 @@ def setup_agenda_config_page(sender, **kwargs):
validators=[validate_start_time, ],
widget=forms.DateTimeInput(format='%d.%m.%Y %H:%M'),
required=False,
label=_('Begin of event'),
help_text=_('Input format: DD.MM.YYYY HH:MM')))
label=ugettext_lazy('Begin of event'),
help_text=ugettext_lazy('Input format: DD.MM.YYYY HH:MM')))
agenda_show_last_speakers = ConfigVariable(
name='agenda_show_last_speakers',
default_value=1,
form_field=forms.IntegerField(
min_value=0,
label=_('Number of last speakers to be shown on the projector')))
label=ugettext_lazy('Number of last speakers to be shown on the projector')))
extra_stylefiles = ['styles/timepicker.css', 'styles/jquery-ui/jquery-ui.custom.min.css']
extra_javascript = ['javascript/jquery-ui.custom.min.js',

View File

@ -37,6 +37,9 @@ ol.agenda_list {
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#ffffff', endColorstr='#ededed',GradientType=0 );
overflow: auto;
}
.agenda_list li > div.activeline {
background: #bed4de !important;
}
.agenda_list.sortable li > div {
cursor: move;
}
@ -52,13 +55,14 @@ ol.agenda_list {
.agenda_list .openclose { width: 40px; float: left; min-height: 1px; }
.agenda_list .duration { width: 92px; float: right; min-height: 1px; padding-left: 5px; }
.agenda_list .manage { width: 150px; float: right; min-height: 1px; padding-left: 5px; }
.agenda_list .title { float: left; }
.agenda_list .manage { width: 200px; float: right; min-height: 1px; padding-left: 5px; }
.agenda_list .title { float: left; padding-left: 5px;}
.agenda_list .optional { float: left; }
.agenda_list .opener_closer { float: left; margin-right: 10px; }
.agenda_list .opener_closer { float: left; margin-right: 10px; margin-left:-6px;}
.agenda_list .opener_closer .btn { padding: 0 2px; }
.agenda_list .optional { float: right; width: 208px; padding-left: 8px;}
#menu-overview .manage { width: 150px; }
#menu-overview .manage { width: 200px; }
#menu-overview .duration { width: 75px; }
#menu-overview .optional { width: 200px; }

View File

@ -1,15 +1,15 @@
{% load i18n %}
{% load tags %}
<div>
<div class="{% if node.active %}activeline{% endif %}">
{% if perms.agenda.can_manage_agenda or perms.projector.can_manage_projector %}
<div class="manage">
<span style="width: 1px; white-space: nowrap;">
{% if perms.projector.can_manage_projector %}
<a href="{% url 'projector_activate_slide' node.sid %}"
class="activate_link btn {% if node.active and not show_list %}btn-primary{% endif %} btn-mini"
class="activate_link btn {% if node.active and not show_list and not summary %}btn-primary{% endif %} btn-mini"
rel="tooltip" data-original-title="{% trans 'Show agenda item' %}">
<i class="icon-facetime-video {% if node.active and not show_list %}icon-white{% endif %}"></i>
<i class="icon-facetime-video {% if node.active and not show_list and not summary %}icon-white{% endif %}"></i>
</a>
<a href="{% url 'projector_activate_slide' node.sid 'show_list_of_speakers' %}"
class="activate_link btn btn-mini {% if node.active and show_list %}btn-primary{% endif %}"
@ -18,15 +18,22 @@
</a>
{% endif %}
{% if perms.agenda.can_manage_agenda %}
<a href="{% model_url node 'edit' %}" title="{% trans 'Edit' %}" class="btn btn-mini">
<a href="{% model_url node 'edit' %}" rel="tooltip" data-original-title="{% trans 'Edit' %}" class="btn btn-mini">
<i class="icon-pencil"></i>
</a>
<a href="{% model_url node 'delete' %}" title="{% trans 'Delete' %}" class="btn btn-mini">
<a href="{% model_url node 'delete' %}" rel="tooltip" data-original-title="{% trans 'Delete' %}" class="btn btn-mini">
<i class="icon-remove"></i>
</a>
<a href="{% if node.closed %}{% url 'item_open' node.id %}{% else %}{% url 'item_close' node.id %}{% endif %}"
class="close_link btn btn-mini {% if node.closed %}btn-success{% endif %} tooltip-left"
rel="tooltip" data-original-title="{% trans 'Change status (open/closed)' %}">
<i class="{% if node.closed %}icon-checked-new{% else %}icon-unchecked-new{% endif %}"></i>
</a>
{% if not node.is_leaf_node %}
<a href="{% url 'projector_activate_slide' node.sid 'summary' %}" class="activate_link btn btn-mini" title="{% trans 'Show summary for this item' %}">
<i class="icon-summary"></i>
<a href="{% url 'projector_activate_slide' node.sid 'summary' %}"
class="activate_link btn btn-mini {% if node.active and summary %}btn-primary{% endif %}"
title="{% trans 'Show summary for this item' %}">
<i class="icon-summary {% if node.active and summary %}icon-white{% endif %}"></i>
</a>
{% endif %}
{% endif %}
@ -37,36 +44,36 @@
{% if perms.agenda.can_see_orga_items %}
<div class="duration">
{% if node.duration %}
{{ node.duration }}h {% if start and end %}<a {% if node.tooltip %}rel="tooltip" data-original-title="{% trans 'End' %}: {{ node.tooltip|date:"DATETIME_FORMAT" }}"{% endif %}><i class="icon-clock"></i></a>{% endif %}
{{ node.duration }} h
{% if start and end %}
<a rel="tooltip" data-original-title="{% trans 'End' %}:
{{ end|date:"DATETIME_FORMAT" }}"><i class="icon-clock"></i>
</a>
{% endif %}
{% endif %}
</div>
{% endif %}
{% if perms.agenda.can_manage_agenda %}
<div class="optional">
{{ node.comment|first_line }}
{% if node.comment %}
{{ node.comment|first_line }}
<a class="btn btn-mini" rel="popover" data-content="{{ node.comment|linebreaks }}">
<i class="icon icon-search"></i>
</a>
{% endif %}
</div>
{% endif %}
<div class="opener_closer">
<a href="#" class="opener btn btn-mini"><span class="icon-plus"></span></a>
<a href="#" class="closer btn btn-mini"><span class="icon-minus"></span></a>
</div>
<div class="openclose">
{% if perms.agenda.can_manage_agenda %}
<a href="{% if node.closed %}{% url 'item_open' node.id %}{% else %}{% url 'item_close' node.id %}{% endif %}"
class="close_link btn btn-mini {% if node.closed %}btn-success{% endif %}" title="{% trans 'Change status (open/closed)' %}">
<i class="{% if node.closed %}icon-checked-new{% else %}icon-unchecked-new{% endif %}"></i>
</a>
{% else %}
<span class="close_link">
<i class="{% if node.closed %}icon-checked-new{% else %}icon-unchecked-new{% endif %}"></i>
</span>
{% endif %}
<a class="opener btn btn-mini" rel="tooltip" data-original-title="{% trans 'Expand items' %}"><span class="icon-plus"></span></a>
<a class="closer btn btn-mini" rel="tooltip" data-original-title="{% trans 'Collapse items' %}"><span class="icon-minus"></span></a>
</div>
<div class="title">
<a class="closed" rel="tooltip" data-original-title="{% trans 'Item closed' %}">
<i class="{% if node.closed %}icon-checked-new{% endif %}"></i>
</a>
{% with form=node.weight_form %}
{{ form.weight }}
{{ form.self }}

View File

@ -14,18 +14,19 @@
margin: 1em;
z-index: 2;
width: 45%;
min-width: 200px}
min-width: 200px;}
#overlay_list_of_speaker_box h3 {
margin: 5px}
margin: 5px;}
#overlay_list_of_speaker_box ul {
margin: 5px}
list-style-type: none;
margin: 5px;}
#overlay_list_of_speaker_box li {
font-size: 120%;
line-height: 120%}
line-height: 120%;}
#overlay_list_of_speaker_box .old_speaker {
color: #777777}
color: #777777;}
#overlay_list_of_speaker_box .actual_speaker {
margin-bottom: 0em}
margin-bottom: 0em;}
</style>
<div id="overlay_list_of_speaker_box">

View File

@ -46,18 +46,22 @@
</h1>
{% if perms.agenda.can_see_orga_items %}
{% if start and end %}
<table id="agendatime" class="table table-bordered">
<tr>
<td>{% trans "Start of event" %}:</td>
<td>{{ start|date:"DATETIME_FORMAT" }}</td>
</tr>
<tr>
<td>{% trans "Estimated end" %}:</td>
<td>{{ end|date:"DATETIME_FORMAT" }}</td>
</tr>
</table>
{% endif %}
{% if start and end %}
<table id="agendatime" class="table table-bordered">
<tr>
<td>{% trans "Start of event" %}:</td>
<td>{{ start|date:"DATETIME_FORMAT" }}</td>
</tr>
<tr>
<td>{% trans "Estimated end" %}:</td>
<td>{{ end|date:"DATETIME_FORMAT" }}</td>
</tr>
</table>
{% else %}
<div style="float: right;">
<a href="{% url 'config_agenda' %}" class="btn btn-mini">{% trans 'Set start time of event' %}</a>
</div>
{% endif %}
{% endif %}
<label class="checkbox">
<input type="checkbox" id="hide_closed_items"> {% trans "Hide closed items" %}
@ -68,7 +72,6 @@
</i></small>
<table id="menu-overview" class="table table-striped table-bordered">
<tr>
<th class="openclose"></th>
<th class="title">{% trans "Item" %}</th>
{% if perms.agenda.can_manage_agenda %}
<th class="optional">{% trans "Comment" %}</th>
@ -81,7 +84,6 @@
{% endif %}
</tr>
<tr class="topline{% if active_sid == 'agenda' %} activeline{% endif %}">
<td class="openclose"></td>
<td class="title">
{% trans "Agenda" %}
</td>
@ -89,7 +91,7 @@
<td class="optional"></td>
{% endif %}
{% if perms.agenda.can_see_orga_items %}
<td class="duration">{{ duration }}h</td>
<td class="duration">{{ duration }} h</td>
{% endif %}
{% if perms.agenda.can_manage_agenda or perms.projector.can_manage_projector %}
<td class="manage">

View File

@ -4,7 +4,7 @@
<p><a href="{% url 'agenda_add_to_current_list_of_speakers' %}" class="btn"><i class="icon icon-speaker"></i> {% trans 'Put me on the current list of speakers' %}</a></p>
{% endif %}
<p><a href="{% url 'agenda_current_list_of_speakers' %}" class="btn"><i class="icon icon-bell"></i> {% trans 'Go to current list of speakers' %}</a></p>
<p><a href="{% url 'agenda_current_list_of_speakers' %}" class="btn"> {% trans 'Go to current list of speakers' %}</a></p>
{% if perms.agenda.can_manage_agenda %}
<hr>

View File

@ -24,7 +24,7 @@
{% if perms.projector.can_manage_projector %}
<a href="{% url 'projector_activate_slide' item.sid %}"
class="activate_link btn btn-mini {% if item.active and not show_list %}btn-primary{% endif %}"
rel="tooltip" data-original-title="{% trans 'Show' %}">
rel="tooltip" data-original-title="{% trans 'Show item' %}">
<i class="icon icon-facetime-video {% if item.active and not show_list %}icon-white{% endif %}"></i>
</a>
{% endif %}
@ -46,7 +46,7 @@
{% if not item.related_sid %}
{{ item.text|safe|linebreaks }}
{% else %}
<a href="{% model_url item.get_related_slide %}" class="btn btn-small">{% trans 'View' %} "{{ item.get_related_slide }}" ({% trans item.get_related_type %})</a>
<a href="{% model_url item.get_related_slide %}" class="btn btn-small">{% trans item.get_related_type %} {{ item.get_related_slide }}</a>
{% endif %}
</p>
@ -124,9 +124,11 @@
{% if speaker_dict.type == 'actual_speaker' %}
<a href="{% url 'agenda_speaker_end_speach' item.pk %}" class="btn btn-mini btn-danger"><i class="icon-bell icon-white"></i> {% trans 'End speach' %}</a>
{% elif speaker_dict.type == 'coming_speaker' %}
<a href="{% url 'agenda_speaker_speak' item.pk speaker_dict.speaker.person.person_id %}" class="btn btn-mini"><i class="icon-bell"></i> {% trans "Begin speach" %}</a>
<a href="{% url 'agenda_speaker_speak' item.pk speaker_dict.speaker.person.person_id %}"
class="btn btn-mini"><i class="icon-bell"></i> {% trans "Begin speach" %}</a>
{% endif %}
<a href="{% model_url speaker_dict.speaker 'delete' %}" title="{% trans 'Delete' %}" class="btn btn-mini">
<a href="{% model_url speaker_dict.speaker 'delete' %}"
rel="tooltip" data-original-title="{% trans 'Delete' %}" class="btn btn-mini">
<i class="icon-remove"></i>
</a>
{% endif %}
@ -138,9 +140,9 @@
<p>
{% if is_on_the_list_of_speakers %}
<a href="{% url 'agenda_speaker_delete' object.id %}" class="btn">{% trans "Remove me from the list" %}</a>
<a href="{% url 'agenda_speaker_delete' object.id %}" class="btn"><i class="icon icon-speaker"></i> {% trans "Remove me from the list" %}</a>
{% elif not object.speaker_list_closed and perms.agenda.can_be_speaker %}
<a href="{% url 'agenda_speaker_append' object.id %}" class="btn">{% trans "Put me on the list" %}</a>
<a href="{% url 'agenda_speaker_append' object.id %}" class="btn"><i class="icon icon-speaker"></i> {% trans "Put me on the list" %}</a>
{% endif %}
</p>
@ -150,9 +152,9 @@
<label>{{ field.label }}:</label>
<div class="control-group input-append {% if field.errors %}error{% endif %}">
{{ field }}
<button class="btn btn-primary" type="submit" title="{% trans 'Apply' %}"><i class="icon-ok icon-white"></i></button>
<button class="btn btn-primary tooltip-bottom" type="submit" data-original-title="{% trans 'Apply' %}"><i class="icon-ok icon-white"></i></button>
{% if perms.participant.can_see_participant and perms.participant.can_manage_participant %}
<a href="{% url 'user_new' %}" class="btn" title="{% trans 'Add new participant' %}"><i class="icon-add-user"></i></a>
<a href="{% url 'user_new' %}" class="btn" rel="tooltip" data-original-title="{% trans 'Add new participant' %}"><i class="icon-add-user"></i></a>
{% endif %}
{% if field.errors %}
<span class="help-inline">{{ field.errors }}</span>

View File

@ -9,15 +9,15 @@
/* List of speakers projector slide */
ul#list_of_speakers {
list-style-type: none;
padding: 0}
padding: 0;}
#list_of_speakers li {
font-size: 130%;
line-height: 150%}
line-height: 150%;}
#list_of_speakers .old_speaker {
color: #9FA9B7}
color: #9FA9B7;}
#list_of_speakers .actual_speaker {
font-weight: bold;
margin-bottom: 0.5em}
margin-bottom: 0.5em;}
</style>
{% endblock %}

View File

@ -83,6 +83,7 @@ class Overview(TemplateView):
'duration': duration,
'start': start,
'end': end,
'summary': config['presentation_argument'] == 'summary',
'show_list': config['presentation_argument'] == 'show_list_of_speakers'})
return context

View File

@ -53,20 +53,25 @@
<td>
<span style="width: 1px; white-space: nowrap;">
{% if perms.projector.can_manage_projector %}
<a href="{% url 'projector_activate_slide' assignment.sid %}" class="activate_link btn {% if assignment.active %}btn-primary{% endif %} btn-mini" title="{% trans 'Show' %}">
<a href="{% url 'projector_activate_slide' assignment.sid %}"
class="activate_link btn {% if assignment.active %}btn-primary{% endif %} btn-mini"
rel="tooltip" data-original-title="{% trans 'Show election' %}">
<i class="icon-facetime-video {% if assignment.active %}icon-white{% endif %}"></i>
</a>
{% endif %}
{% if perms.assignment.can_manage_assignment %}
<a href="{% url 'assignment_edit' assignment.id %}" title="{% trans 'Edit' %}" class="btn btn-mini">
<i class="icon-pencil"></i>
<a href="{% url 'assignment_edit' assignment.id %}"
rel="tooltip" data-original-title="{% trans 'Edit' %}"
class="btn btn-mini"><i class="icon-pencil"></i>
</a>
<a href="{% url 'assignment_delete' assignment.id %}" title="{% trans 'Delete' %}" class="btn btn-mini">
<i class="icon-remove"></i>
<a href="{% url 'assignment_delete' assignment.id %}"
rel="tooltip" data-original-title="{% trans 'Delete' %}"
class="btn btn-mini"><i class="icon-remove"></i>
</a>
{% endif %}
<a href="{% url 'print_assignment' assignment.id %}" class="btn btn-mini" title="{% trans 'Print election as PDF' %}" target="_blank">
<i class="icon-print"></i> PDF
<a href="{% url 'print_assignment' assignment.id %}"
data-original-title="{% trans 'Print election as PDF' %}" target="_blank"
class="btn btn-mini tooltip-left"><i class="icon-print"></i> PDF
</a>
</span>
</td>

View File

@ -106,9 +106,11 @@
<label>{{ field.label }}:</label>
<div class="input-append">
{{ field }}
<button class="btn btn-primary" type="submit" title="{% trans 'Apply' %}"><i class="icon-ok icon-white"></i></button>
<button class="btn btn-primary tooltip-bottom" type="submit"
data-original-title="{% trans 'Apply' %}"><i class="icon-ok icon-white"></i></button>
{% if perms.participant.can_see_participant and perms.participant.can_manage_participant %}
<a href="{% url 'user_new' %}" target="_blank" class="btn" title="{% trans 'Add new participant' %}"><i class="icon-add-user"></i></a>
<a href="{% url 'user_new' %}" target="_blank" class="btn"
rel="tooltip" data-original-title="{% trans 'Add new participant' %}"><i class="icon-add-user"></i></a>
{% endif %}
</div>
{% endfor %}
@ -124,7 +126,8 @@
{% for person in blocked_candidates %}
<li>
<a href="{% model_url person 'view' %}">{{ person }}</a>
<a class="btn btn-mini" href="{% url 'assignment_delother' assignment.id person.person_id %}" title="{% trans 'Remove candidate' %}">
<a class="btn btn-mini" href="{% url 'assignment_delother' assignment.id person.person_id %}"
rel="tooltip" data-original-title="{% trans 'Remove candidate' %}">
<i class="icon-ban-circle"></i>
</a>
</li>
@ -164,8 +167,10 @@
<i class="icon-unchecked-new"></i>
{% endif %}
</a>
<a href="{% url 'assignment_poll_view' poll.id %}" class="btn btn-mini" title="{% trans 'Edit' %}"><i class="icon-pencil"></i></a>
<a href="{% url 'assignment_poll_delete' poll.id %}" class="btn btn-mini" title="{% trans 'Delete' %}"><i class="icon-remove"></i></a>
<a href="{% url 'assignment_poll_view' poll.id %}" class="btn btn-mini"
rel="tooltip" data-original-title="{% trans 'Edit' %}"><i class="icon-pencil"></i></a>
<a href="{% url 'assignment_poll_delete' poll.id %}" class="btn btn-mini"
rel="tooltip" data-original-title="{% trans 'Delete' %}"><i class="icon-remove"></i></a>
{% endif %}
</th>
{% endfor %}
@ -182,10 +187,11 @@
<td>
{% if candidate in assignment.elected %}
{% if perms.assignment.can_manage_assignment %}
<a class="election_link elected" href="{% url 'assignment_user_not_elected' assignment.id candidate.person_id %}"></a>
<a class="election_link elected" href="{% url 'assignment_user_not_elected' assignment.id candidate.person_id %}"
rel="tooltip" data-original-title="{% trans 'Mark candidate as elected' %}"></a>
{% else %}
<a class="elected">
<img src="{% static 'img/voting-yes.png' %}" title="{% trans 'Candidate is elected' %}">
<img src="{% static 'img/voting-yes.png' %}" class="tooltip-bottom" data-original-title="{% trans 'Candidate is elected' %}">
</a>
{% endif %}
{% else %}
@ -198,11 +204,11 @@
{% for vote in poll_list %}
<td style="white-space:nowrap;">
{% if 'Yes' in vote and 'No' in vote and 'Abstain' in vote %}
<img src="{% static 'img/voting-yes.png' %}" title="{% trans 'Yes' %}"> {{ vote.Yes }}<br>
<img src="{% static 'img/voting-no.png' %}" title="{% trans 'No' %}"> {{ vote.No }}<br>
<img src="{% static 'img/voting-abstention.png' %}" title="{% trans 'Abstention' %}"> {{ vote.Abstain }}<br>
<img src="{% static 'img/voting-yes.png' %}" class="tooltip-left" data-original-title="{% trans 'Yes' %}"> {{ vote.Yes }}<br>
<img src="{% static 'img/voting-no.png' %}" class="tooltip-left" data-original-title="{% trans 'No' %}"> {{ vote.No }}<br>
<img src="{% static 'img/voting-abstention.png' %}" class="tooltip-left" data-original-title="{% trans 'Abstention' %}"> {{ vote.Abstain }}<br>
{% elif 'Votes' in vote %}
<img src="{% static 'img/voting-yes.png' %}" title="{% trans 'Yes' %}"> {{ vote.Votes }}
<img src="{% static 'img/voting-yes.png' %}" class="tooltip-left" data-original-title="{% trans 'Yes' %}"> {{ vote.Votes }}
{% elif vote == None %}
{% trans 'was not a <br> candidate'%}
{% else %}
@ -221,7 +227,7 @@
{% if poll.published or perms.assignment.can_manage_assignment %}
<td style="white-space:nowrap;">
{% if poll.has_votes %}
<img src="{% static 'img/voting-invalid.png' %}" title="{% trans 'Invalid' %}">
<img src="{% static 'img/voting-invalid.png' %}" class="tooltip-left" data-original-title="{% trans 'Invalid' %}">
{{ poll.print_votesinvalid }}
{% endif %}
</td>
@ -237,7 +243,7 @@
{% if poll.published or perms.assignment.can_manage_assignment %}
<td style="white-space:nowrap;">
{% if poll.has_votes %}
<img src="{% static 'img/voting-total.png' %}" title="{% trans 'Votes cast' %}">
<img src="{% static 'img/voting-total.png' %}" class="tooltip-left" data-original-title="{% trans 'Votes cast' %}">
<strong>{{ poll.print_votescast }}</strong>
{% endif %}
</td>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-06-01 21:13+0200\n"
"POT-Creation-Date: 2013-06-03 22:50+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"

File diff suppressed because it is too large Load Diff

View File

@ -3,13 +3,14 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
# <moosline@savvy.ch>, 2012.
# moosline <moosline@savvy.ch>, 2013
# moosline <moosline@savvy.ch>, 2012
msgid ""
msgstr ""
"Project-Id-Version: OpenSlides\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-06-01 21:13+0200\n"
"PO-Revision-Date: 2012-12-09 11:46+0000\n"
"POT-Creation-Date: 2013-06-04 00:21+0200\n"
"PO-Revision-Date: 2013-06-03 15:05+0000\n"
"Last-Translator: moosline <moosline@savvy.ch>\n"
"Language-Team: French (http://www.transifex.com/projects/p/openslides/"
"language/fr/)\n"
@ -22,191 +23,191 @@ msgstr ""
#: agenda/static/javascript/agenda-config-datepicker.js:9
#: agenda/static/javascript/agenda-config-datepicker.js:39
msgid "en"
msgstr ""
msgstr "en"
#: agenda/static/javascript/agenda-config-datepicker.js:10
msgid "previous month"
msgstr ""
msgstr "le mois dernier"
#: agenda/static/javascript/agenda-config-datepicker.js:11
msgid "next month"
msgstr ""
msgstr "le mois prochain"
#: agenda/static/javascript/agenda-config-datepicker.js:13
msgid "January"
msgstr ""
msgstr "Janvier"
#: agenda/static/javascript/agenda-config-datepicker.js:13
msgid "February"
msgstr ""
msgstr "Février"
#: agenda/static/javascript/agenda-config-datepicker.js:13
msgid "March"
msgstr ""
msgstr "Mars"
#: agenda/static/javascript/agenda-config-datepicker.js:14
msgid "April"
msgstr ""
msgstr "Avril"
#: agenda/static/javascript/agenda-config-datepicker.js:14
#: agenda/static/javascript/agenda-config-datepicker.js:20
msgid "May"
msgstr ""
msgstr "Mai"
#: agenda/static/javascript/agenda-config-datepicker.js:14
msgid "June"
msgstr ""
msgstr "Juin"
#: agenda/static/javascript/agenda-config-datepicker.js:15
msgid "July"
msgstr ""
msgstr "Juillet"
#: agenda/static/javascript/agenda-config-datepicker.js:15
msgid "August"
msgstr ""
msgstr "Août"
#: agenda/static/javascript/agenda-config-datepicker.js:15
msgid "September"
msgstr ""
msgstr "Septembre"
#: agenda/static/javascript/agenda-config-datepicker.js:16
msgid "October"
msgstr ""
msgstr "Octobre"
#: agenda/static/javascript/agenda-config-datepicker.js:16
msgid "November"
msgstr ""
msgstr "Novembre"
#: agenda/static/javascript/agenda-config-datepicker.js:16
msgid "December"
msgstr ""
msgstr "Décembre"
#: agenda/static/javascript/agenda-config-datepicker.js:19
msgid "Jan"
msgstr ""
msgstr "Jan"
#: agenda/static/javascript/agenda-config-datepicker.js:19
msgid "Feb"
msgstr ""
msgstr "Feb"
#: agenda/static/javascript/agenda-config-datepicker.js:19
msgid "Mar"
msgstr ""
msgstr "Mar"
#: agenda/static/javascript/agenda-config-datepicker.js:20
msgid "Apr"
msgstr ""
msgstr "Apr"
#: agenda/static/javascript/agenda-config-datepicker.js:20
msgid "Jun"
msgstr ""
msgstr "Jui"
#: agenda/static/javascript/agenda-config-datepicker.js:21
msgid "Jul"
msgstr ""
msgstr "Jul"
#: agenda/static/javascript/agenda-config-datepicker.js:21
msgid "Aug"
msgstr ""
msgstr "Aou"
#: agenda/static/javascript/agenda-config-datepicker.js:21
msgid "Sep"
msgstr ""
msgstr "Sep"
#: agenda/static/javascript/agenda-config-datepicker.js:22
msgid "Oct"
msgstr ""
msgstr "Oct"
#: agenda/static/javascript/agenda-config-datepicker.js:22
msgid "Nov"
msgstr ""
msgstr "Nov"
#: agenda/static/javascript/agenda-config-datepicker.js:22
msgid "Dec"
msgstr ""
msgstr "Déc"
#: agenda/static/javascript/agenda-config-datepicker.js:25
msgid "Sunday"
msgstr ""
msgstr "Dimanche"
#: agenda/static/javascript/agenda-config-datepicker.js:25
msgid "Monday"
msgstr ""
msgstr "Lundi"
#: agenda/static/javascript/agenda-config-datepicker.js:25
msgid "Tuesdey"
msgstr ""
msgstr "Mardi"
#: agenda/static/javascript/agenda-config-datepicker.js:25
msgid "Wednesday"
msgstr ""
msgstr "Mecredi"
#: agenda/static/javascript/agenda-config-datepicker.js:26
msgid "Thursday"
msgstr ""
msgstr "Jeudi"
#: agenda/static/javascript/agenda-config-datepicker.js:26
msgid "Friday"
msgstr ""
msgstr "Vendredi"
#: agenda/static/javascript/agenda-config-datepicker.js:26
msgid "Saturday"
msgstr ""
msgstr "Samedi"
#: agenda/static/javascript/agenda-config-datepicker.js:29
#: agenda/static/javascript/agenda-config-datepicker.js:33
msgid "Su"
msgstr ""
msgstr "Di"
#: agenda/static/javascript/agenda-config-datepicker.js:29
#: agenda/static/javascript/agenda-config-datepicker.js:33
msgid "Mo"
msgstr ""
msgstr "Lu"
#: agenda/static/javascript/agenda-config-datepicker.js:29
#: agenda/static/javascript/agenda-config-datepicker.js:33
msgid "Tu"
msgstr ""
msgstr "Ma"
#: agenda/static/javascript/agenda-config-datepicker.js:29
#: agenda/static/javascript/agenda-config-datepicker.js:33
msgid "We"
msgstr ""
msgstr "Me"
#: agenda/static/javascript/agenda-config-datepicker.js:30
#: agenda/static/javascript/agenda-config-datepicker.js:34
msgid "Th"
msgstr ""
msgstr "Je"
#: agenda/static/javascript/agenda-config-datepicker.js:30
#: agenda/static/javascript/agenda-config-datepicker.js:34
msgid "Fr"
msgstr ""
msgstr "Ve"
#: agenda/static/javascript/agenda-config-datepicker.js:30
#: agenda/static/javascript/agenda-config-datepicker.js:34
msgid "Sa"
msgstr ""
msgstr "Sa"
#: agenda/static/javascript/agenda-config-datepicker.js:45
msgid "Time"
msgstr ""
msgstr "Heure"
#: agenda/static/javascript/agenda-config-datepicker.js:46
msgid "Hour"
msgstr ""
msgstr "Heure"
#: agenda/static/javascript/agenda-config-datepicker.js:47
msgid "Minute"
msgstr ""
msgstr "Minute"
#: agenda/static/javascript/agenda-config-datepicker.js:48
msgid "Current time"
msgstr ""
msgstr "heure actuelle"
#: agenda/static/javascript/agenda-config-datepicker.js:49
msgid "Close"
msgstr ""
msgstr "Fermer"
#: agenda/static/javascript/agenda.js:17
#, c-format
@ -215,40 +216,40 @@ msgstr ", dans %s sont cachés"
#: static/javascript/dataTables.bootstrap.js:19
msgid "_MENU_ entries per page"
msgstr ""
msgstr "_MENU_ Entrées par page"
#: static/javascript/dataTables.bootstrap.js:20
msgid "Search:"
msgstr ""
msgstr "Recherche:"
#: static/javascript/dataTables.bootstrap.js:21
msgid "Showing _START_ to _END_ of _TOTAL_ entries"
msgstr ""
msgstr "Voici _START_ à _END_ sur _TOTAL_ entrées"
#: static/javascript/dataTables.bootstrap.js:22
msgid "Showing 0 entries"
msgstr ""
msgstr "Affichage de 0 entrées"
#: static/javascript/dataTables.bootstrap.js:23
msgid "(filtered from _MAX_ total entries)"
msgstr ""
msgstr "(filtrée à partir des entrées totales _Max_)"
#: static/javascript/dataTables.bootstrap.js:24
msgid "No matching records found"
msgstr ""
msgstr "Aucun enregistrement correspondant n'a été trouvé"
#: static/javascript/dataTables.bootstrap.js:26
msgid "First"
msgstr ""
msgstr "Premier"
#: static/javascript/dataTables.bootstrap.js:27
msgid "Last"
msgstr ""
msgstr "Dernier"
#: static/javascript/dataTables.bootstrap.js:28
msgid "Next"
msgstr ""
msgstr "Prochain"
#: static/javascript/dataTables.bootstrap.js:29
msgid "Previous"
msgstr ""
msgstr "Avant"

View File

@ -34,8 +34,8 @@
{% if perms.mediafile.can_manage %}
<td>
<span style="width: 1px; white-space: nowrap;">
<a href="{% model_url mediafile 'update' %}" title="{% trans 'Edit' %}" class="btn btn-mini"><i class="icon-pencil"></i></a>
<a href="{% model_url mediafile 'delete' %}" title="{% trans 'Delete' %}" class="btn btn-mini"><i class="icon-remove"></i></a>
<a href="{% model_url mediafile 'update' %}" rel="tooltip" data-original-title="{% trans 'Edit' %}" class="btn btn-mini"><i class="icon-pencil"></i></a>
<a href="{% model_url mediafile 'delete' %}" rel="tooltip" data-original-title="{% trans 'Delete' %}" class="btn btn-mini"><i class="icon-remove"></i></a>
</span>
</td>
{% endif %}

View File

@ -27,11 +27,11 @@
<td>{{ category.prefix }}</td>
<td><a href="{% model_url category 'update' %}">{{ category }}</a></td>
<td><span style="width: 1px; white-space: nowrap;">
<a href="{% model_url category 'update' %}" title="{% trans 'Edit' %}" class="btn btn-mini">
<i class="icon-pencil"></i>
<a href="{% model_url category 'update' %}" rel="tooltip" data-original-title="{% trans 'Edit' %}"
class="btn btn-mini"><i class="icon-pencil"></i>
</a>
<a href="{% model_url category 'delete' %}" title="{% trans 'Delete' %}" class="btn btn-mini">
<i class="icon-remove"></i>
<a href="{% model_url category 'delete' %}" rel="tooltip" data-original-title="{% trans 'Delete' %}"
class="btn btn-mini"><i class="icon-remove"></i>
</a>
</span>
</td>

View File

@ -20,8 +20,12 @@
{% trans "Version" %} {{ version.version_number }}
</small>
<small class="pull-right">
<a href="{% url 'motion_list' %}" class="btn btn-mini"><i class="icon-chevron-left"></i> {% trans "Back to overview" %}</a>
<a href="{% url 'motion_detail_pdf' motion.id %}" class="btn btn-mini" rel="tooltip" data-original-title="{% trans 'Print motion as PDF' %}" target="_blank"><i class="icon-print"></i> PDF</a>
<a href="{% url 'motion_list' %}" class="btn btn-mini"
rel="tooltip" data-original-title="{% trans 'Show item' %}">
<i class="icon-chevron-left"></i> {% trans "Back to overview" %}</a>
<a href="{% url 'motion_detail_pdf' motion.id %}" class="btn btn-mini"
rel="tooltip" data-original-title="{% trans 'Print motion as PDF' %}" target="_blank">
<i class="icon-print"></i> PDF</a>
<!-- activate projector -->
{% if perms.projector.can_manage_projector %}
<a href="{% url 'projector_activate_slide' motion.sid %}" class="activate_link btn {% if motion.active %}btn-primary{% endif %} btn-mini" rel="tooltip" data-original-title="{% trans 'Show motion' %}">
@ -34,11 +38,11 @@
{% trans 'More actions' %} <span class="caret"></span>
</a>
<ul class="dropdown-menu pull-right">
<!-- edit -->
{% if allowed_actions.edit %}
<li><a href="{% model_url motion 'edit' %}"><i class="icon-pencil"></i> {% trans 'Edit motion' %}</a></li>
{% endif %}
{% if perms.motion.can_manage_motion %}
<!-- edit -->
{% if allowed_actions.edit %}
<li><a href="{% model_url motion 'edit' %}"><i class="icon-pencil"></i> {% trans 'Edit motion' %}</a></li>
{% endif %}
<!-- delete -->
{% if allowed_actions.delete %}
<li><a href="{% model_url motion 'delete' %}"><i class="icon-remove"></i> {% trans 'Delete motion' %}</a></li>
@ -136,6 +140,7 @@
<!-- Log -->
{% if perms.motion.can_manage_motion %}
<p>
<div class="btn-group" data-toggle="buttons-checkbox">
<button type="button" class="btn" data-toggle="collapse" data-target="#log">
{% trans "Show log" %}
@ -148,6 +153,7 @@
{% endfor %}
</ul>
</div>
</p>
{% endif %}
</div> <!--/span-->

View File

@ -25,7 +25,7 @@
{% endif %}
{% endif %}
{% if perms.motion.can_manage_motion %}
<a href="{% url 'motion_category_list' %}" class="btn btn-mini"><i class="icon-th-large"></i> {% trans 'Categories' %}</a>
<a href="{% url 'motion_category_list' %}" class="btn btn-mini" rel="tooltip" data-original-title="{% trans 'Manage categories' %}"><i class="icon-th-large"></i> {% trans 'Categories' %}</a>
<a href="{% url 'motion_csv_import' %}" class="btn btn-mini" rel="tooltip" data-original-title="{% trans 'Import motions' %}"><i class="icon-import"></i> {% trans 'Import' %}</a>
{% endif %}
<a href="{% url 'motion_list_pdf' %}" class="btn btn-mini" rel="tooltip" data-original-title="{% trans 'Print all motions as PDF' %}" target="_blank"><i class="icon-print"></i> PDF</a>
@ -79,15 +79,15 @@
</a>
{% endif %}
{% if perms.motion.can_manage_motion %}
<a href="{% model_url motion 'edit' %}" title="{% trans 'Edit' %}" class="btn btn-mini">
<i class="icon-pencil"></i>
<a href="{% model_url motion 'edit' %}" rel="tooltip" data-original-title="{% trans 'Edit' %}"
class="btn btn-mini"><i class="icon-pencil"></i>
</a>
<a href="{% model_url motion 'delete' %}" title="{% trans 'Delete' %}" class="btn btn-mini">
<i class="icon-remove"></i>
<a href="{% model_url motion 'delete' %}" rel="tooltip" data-original-title="{% trans 'Delete' %}"
class="btn btn-mini"><i class="icon-remove"></i>
</a>
{% endif %}
<a href="{% url 'motion_detail_pdf' motion.id %}" class="btn btn-mini" title="{% trans 'Print motion as PDF' %}" target="_blank">
<i class="icon-print"></i> PDF
<a href="{% url 'motion_detail_pdf' motion.id %}" data-original-title="{% trans 'Print motion as PDF' %}"
class="btn btn-mini tooltip-left" target="_blank"><i class="icon-print"></i> PDF
</a>
</span>
</td>

View File

@ -731,7 +731,10 @@ class MotionCSVImportView(FormView):
if count_success:
messages.success(
self.request,
"<strong>%s</strong><br>%s" % (_('Summary'), _('%d of %d motions successfully imported.') % (count_success, count_lines)))
"<strong>%s</strong><br>%s" % (
_('Summary'),
_('%(counts)d of %(total)d motions successfully imported.')
% {'counts': count_success, 'total': count_lines}))
return super(MotionCSVImportView, self).form_valid(form)
motion_csv_import = MotionCSVImportView.as_view()

View File

@ -46,8 +46,7 @@
<tr>
<th>{% trans "Present" %}</th>
<th class="optional">{% trans "Title" %}</th>
<th>{% trans "First Name" %}</th>
<th>{% trans "Last Name" %}</th>
<th>{% trans "Name" %}</th>
<th class="optional">{% trans "Structure level" %}</th>
<th class="optional">{% trans "Group" %}</th>
<th class="optional">{% trans "Committee" %}</th>
@ -65,19 +64,24 @@
{% if user != request_user and not user.is_superuser %}
<a href="{% url 'user_status_toggle' user.id %}"
class="status_link btn btn-mini {% if user.is_active %}btn-success{% endif %}"
title="{% if user.is_active %}{% trans 'present' %}{% else %}{% trans 'absent' %}{% endif %}">
rel="tooltip" data-original-title="{% if user.is_active %}{% trans 'present' %}{% else %}{% trans 'absent' %}{% endif %}">
<i class="{% if user.is_active %}icon-on{% else %}icon-off{% endif %}"></i>
</a>
{% endif %}
{% else %}
<span class="status_link">
<i class="status_link {% if user.is_active %}icon-on{% else %}icon-off{% endif %}"
title="{% if user.is_active %}{% trans 'present' %}{% else %}{% trans 'absent' %}{% endif %}"></i>
<i class="status_link {% if user.is_active %}icon-on{% else %}icon-off{% endif %} tooltip-bottom"
data-original-title="{% if user.is_active %}{% trans 'present' %}{% else %}{% trans 'absent' %}{% endif %}"></i>
{% endif %}
</td>
<td class="optional">{{ user.title }}</td>
<td><a href="{% url 'user_view' user.id %}">{{ user.first_name }}</a></td>
<td><a href="{% url 'user_view' user.id %}">{{ user.last_name }}</a></td>
<td>
{% if 'participant_sort_users_by_first_name'|get_config %}
<a href="{% url 'user_view' user.id %}">{{ user.first_name }} {{ user.last_name }}</a>
{% else %}
<a href="{% url 'user_view' user.id %}">{{ user.last_name }}, {{ user.first_name }}</a>
{% endif %}
</td>
<td class="optional">{{ user.structure_level }}</td>
<td class="optional">
{% for group in user.groups.all %}
@ -89,7 +93,13 @@
</td>
<td class="optional">{{ user.committee }}</td>
{% if perms.participant.can_manage_participant %}
<td class="optional">{{ user.comment|first_line }}</td>
<td class="optional">
{% if user.comment %}
<a class="btn btn-mini" rel="popover" data-content="{{ user.comment|linebreaks }}">
<i class="icon icon-search"></i>
</a>
{% endif %}
</td>
<td class="optional">
{% if user.last_login > user.date_joined %}
{{ user.last_login }}
@ -98,15 +108,18 @@
<td>
<span style="width: 1px; white-space: nowrap;">
{% if perms.projector.can_manage_projector %}
<a href="{% url 'projector_activate_slide' user.sid %}" class="activate_link btn {% if user.active %}btn-primary{% endif %} btn-mini" title="{% trans 'Show' %}">
<i class="icon-facetime-video {% if user.active %}icon-white{% endif %}"></i>
</a>
<a href="{% url 'projector_activate_slide' user.sid %}" class="activate_link btn {% if user.active %}btn-primary{% endif %} btn-mini"
rel="tooltip" data-original-title="{% trans 'Show participant' %}">
<i class="icon-facetime-video {% if user.active %}icon-white{% endif %}"></i>
</a>
{% endif %}
<a href="{% url 'user_edit' user.id %}" title="{% trans 'Edit' %}" class="btn btn-mini">
<a href="{% url 'user_edit' user.id %}" rel="tooltip" data-original-title="{% trans 'Edit' %}"
class="btn btn-mini">
<i class="icon-pencil"></i>
</a>
{% if user != request_user %}
<a href="{% url 'user_delete' user.id %}" title="{% trans 'Delete' %}" class="btn btn-mini">
<a href="{% url 'user_delete' user.id %}" rel="tooltip" data-original-title="{% trans 'Delete' %}"
class="btn btn-mini">
<i class="icon-remove"></i>
</a>
{% endif %}

View File

@ -29,14 +29,19 @@ $(function () {
success: function(data) {
$('.activate_link').removeClass('btn-primary');
$('.activate_link i').removeClass('icon-white');
$('tr').removeClass('activeline');
$('div').removeClass('activeline');
$('li').removeClass('activeline');
// is table line
if ( link.parent().parent().parent().is("tr") ) {
$('tr').removeClass('activeline');
link.parent().parent().parent().addClass('activeline');
}
// is sortable list (agenda)
if ( link.parent().parent().parent().is("div") ) {
link.parent().parent().parent().addClass('activeline');
}
// is widget list item
if ( link.parent().is("li") ) {
$('li').removeClass('activeline');
link.parent().addClass('activeline');
}
link.addClass('btn-primary');
@ -165,6 +170,13 @@ $(document).ready(function(){
$('.tooltip-bottom').tooltip({
placement: 'bottom'
});
//Popover
$(this).popover({
selector: "a[rel=popover]",
placement: 'bottom',
html: true
});
// Resize menu and content container
function iconmenu(){
$('.leftmenu').removeClass('span2').addClass('lefticon').addClass('span1');

View File

@ -39,8 +39,8 @@ def first_line(text):
lines = text.split('\n')
except AttributeError:
return ''
if len(lines) > 1 or len(lines[0]) > 40:
if len(lines) > 1 or len(lines[0]) > 30:
s = "%s ..."
else:
s = "%s"
return s % lines[0][:40]
return s % lines[0][:30]