From bb74674c41a0967fbdc032295815828e27809791 Mon Sep 17 00:00:00 2001 From: Stefan Frauenknecht Date: Sat, 5 Jan 2013 12:39:20 +0100 Subject: [PATCH 01/24] Deprecated import django.conf.urls.defaults adjusted. --- openslides/agenda/urls.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openslides/agenda/urls.py b/openslides/agenda/urls.py index 6022bff4d..392adbedf 100644 --- a/openslides/agenda/urls.py +++ b/openslides/agenda/urls.py @@ -10,7 +10,7 @@ :license: GNU GPL, see LICENSE for more details. """ -from django.conf.urls.defaults import url, patterns +from django.conf.urls import url, patterns from openslides.agenda.views import (Overview, View, SetClosed, ItemUpdate, ItemCreate, ItemDelete, AgendaPDF) From aee24425bc49e8f4f03109a17cf1e45f20a76700 Mon Sep 17 00:00:00 2001 From: Stefan Frauenknecht Date: Sat, 5 Jan 2013 23:52:29 +0100 Subject: [PATCH 02/24] Ticket 433 - Organisational items --- AUTHORS | 1 + openslides/agenda/models.py | 9 + openslides/agenda/slides.py | 2 +- openslides/agenda/views.py | 10 +- openslides/locale/de/LC_MESSAGES/django.mo | Bin 36222 -> 36423 bytes openslides/locale/de/LC_MESSAGES/django.po | 292 ++++++++++--------- openslides/locale/de/LC_MESSAGES/djangojs.mo | Bin 482 -> 460 bytes openslides/locale/de/LC_MESSAGES/djangojs.po | 4 +- 8 files changed, 178 insertions(+), 140 deletions(-) diff --git a/AUTHORS b/AUTHORS index f4eeb7de7..b1c6e1f79 100644 --- a/AUTHORS +++ b/AUTHORS @@ -7,3 +7,4 @@ Authors of OpenSlides in chronological order of first contribution: Andy Kittner Moira Brülisauer (French translation) Alexis Roussel (French translation) + Stefan Frauenknecht diff --git a/openslides/agenda/models.py b/openslides/agenda/models.py index 0356607dd..45a8ae1bb 100644 --- a/openslides/agenda/models.py +++ b/openslides/agenda/models.py @@ -31,6 +31,11 @@ class Item(MPTTModel, SlideMixin): """ prefix = 'item' + ITEM_TYPE = ( + ('agd', _('Agenda item')), + ('org', _('Organizational item')), + ) + title = models.CharField(null=True, max_length=255, verbose_name=_("Title")) text = models.TextField(null=True, blank=True, verbose_name=_("Text")) comment = models.TextField(null=True, blank=True, verbose_name=_("Comment")) @@ -38,6 +43,9 @@ class Item(MPTTModel, SlideMixin): weight = models.IntegerField(default=0, verbose_name=_("Weight")) parent = TreeForeignKey('self', null=True, blank=True, related_name='children') + type = models.CharField(max_length=3, choices=ITEM_TYPE, + default='agd', verbose_name=_("Type")) + related_sid = models.CharField(null=True, blank=True, max_length=63) def get_related_slide(self): @@ -170,6 +178,7 @@ class Item(MPTTModel, SlideMixin): permissions = ( ('can_see_agenda', ugettext_noop("Can see agenda")), ('can_manage_agenda', ugettext_noop("Can manage agenda")), + ('can_see_orga_items', ugettext_noop("Can see orga items")), ) class MPTTMeta: diff --git a/openslides/agenda/slides.py b/openslides/agenda/slides.py index c7e24aacd..93dec045c 100644 --- a/openslides/agenda/slides.py +++ b/openslides/agenda/slides.py @@ -16,7 +16,7 @@ from django.utils.translation import ugettext as _ def agenda_show(): from openslides.agenda.models import Item data = {} - items = Item.objects.filter(parent=None) + items = Item.objects.filter(parent=None, type__exact = 'agd') data['title'] = _("Agenda") data['items'] = items data['template'] = 'projector/AgendaSummary.html' diff --git a/openslides/agenda/views.py b/openslides/agenda/views.py index 55b42e204..c66eaf18d 100644 --- a/openslides/agenda/views.py +++ b/openslides/agenda/views.py @@ -39,8 +39,14 @@ class Overview(TemplateView): def get_context_data(self, **kwargs): context = super(Overview, self).get_context_data(**kwargs) + + if self.request.user.has_perm('agenda.can_see_orga_items'): + items = Item.objects.all() + else: + items = Item.objects.filter(type__exact = 'agd') + context.update({ - 'items': Item.objects.all(), + 'items': items, 'active_sid': get_active_slide(only_sid=True), }) return context @@ -192,7 +198,7 @@ class AgendaPDF(PDFView): document_title = ugettext_lazy('Agenda') def append_to_pdf(self, story): - for item in Item.objects.all(): + for item in Item.objects.filter(type__exact = 'agd'): ancestors = item.get_ancestors() if ancestors: space = " " * 6 * ancestors.count() diff --git a/openslides/locale/de/LC_MESSAGES/django.mo b/openslides/locale/de/LC_MESSAGES/django.mo index 642564816818e6e1142b85472c19a866c0aa2780..d5f954adbf2a8b2e0275c307d2cfc998731a8d21 100644 GIT binary patch delta 10624 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 DZQ#3a diff --git a/openslides/locale/de/LC_MESSAGES/django.po b/openslides/locale/de/LC_MESSAGES/django.po index 09644ee43..412c61bf9 100644 --- a/openslides/locale/de/LC_MESSAGES/django.po +++ b/openslides/locale/de/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: OpenSlides 1.x\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-12-09 11:47+0100\n" +"POT-Creation-Date: 2013-01-05 22:30+0100\n" "PO-Revision-Date: 2012-07-28 11:07+0200\n" "Last-Translator: Emanuel Schuetze \n" "Language-Team: support@openslides.de\n" @@ -33,42 +33,61 @@ msgstr "Französisch" msgid "Parent item" msgstr "Elternelement" -#: agenda/models.py:34 config/forms.py:59 motion/forms.py:22 +#: agenda/models.py:35 +msgid "Agenda item" +msgstr "Tagesordnungseintrag" + +#: agenda/models.py:36 +msgid "Organizational item" +msgstr "Organisatorischer Eintrag" + +#: agenda/models.py:39 config/forms.py:59 motion/forms.py:22 #: motion/models.py:539 motion/templates/motion/view.html:246 #: projector/models.py:29 msgid "Title" msgstr "Titel" -#: agenda/models.py:35 motion/forms.py:23 motion/models.py:540 +#: agenda/models.py:40 motion/forms.py:23 motion/models.py:540 #: motion/templates/motion/view.html:247 projector/models.py:30 msgid "Text" msgstr "Text" -#: agenda/models.py:36 agenda/templates/agenda/overview.html:65 +#: agenda/models.py:41 agenda/templates/agenda/overview.html:65 #: agenda/templates/agenda/view.html:13 participant/models.py:60 #: participant/templates/participant/overview.html:72 #: participant/templates/participant/user_detail.html:45 msgid "Comment" msgstr "Kommentar" -#: agenda/models.py:37 +#: agenda/models.py:42 msgid "Closed" msgstr "Abgeschlossen" -#: agenda/models.py:38 agenda/templates/agenda/overview.html:71 +#: agenda/models.py:43 agenda/templates/agenda/overview.html:71 #: projector/models.py:31 msgid "Weight" msgstr "Gewichtung" -#: agenda/models.py:171 +#: agenda/models.py:47 participant/views.py:247 +#: participant/templates/participant/overview.html:37 +#: participant/templates/participant/overview.html:69 +#: participant/templates/participant/user_detail.html:29 +msgid "Type" +msgstr "Typ" + +#: agenda/models.py:179 msgid "Can see agenda" msgstr "Darf die Tagesordnung sehen" -#: agenda/models.py:172 +#: agenda/models.py:180 msgid "Can manage agenda" msgstr "Darf die Tagesordung verwalten" -#: agenda/models.py:180 agenda/slides.py:20 agenda/views.py:191 +#: agenda/models.py:181 +msgid "Can see orga items" +msgstr "Darf Organisationspunkte sehen" + +#: agenda/models.py:189 agenda/slides.py:20 agenda/views.py:191 #: agenda/views.py:192 agenda/views.py:212 agenda/views.py:226 #: agenda/templates/agenda/base_agenda.html:10 #: agenda/templates/agenda/overview.html:8 @@ -231,20 +250,20 @@ msgstr "Möchten Sie die geänderte Reihenfolge der Einträge speichern?" #: assignment/templates/assignment/view.html:172 #: assignment/templates/projector/Assignment.html:78 #: assignment/templates/projector/Assignment.html:82 motion/models.py:574 -#: motion/views.py:830 motion/views.py:881 +#: motion/views.py:824 motion/views.py:875 #: motion/templates/motion/view.html:79 -#: motion/templates/projector/Motion.html:37 utils/utils.py:49 -#: utils/views.py:108 +#: motion/templates/projector/Motion.html:37 utils/utils.py:45 +#: utils/views.py:104 msgid "Yes" msgstr "Ja" #: agenda/templates/agenda/overview.html:47 assignment/models.py:291 #: assignment/views.py:588 assignment/templates/assignment/view.html:169 #: assignment/templates/projector/Assignment.html:79 motion/models.py:574 -#: motion/views.py:830 motion/views.py:882 +#: motion/views.py:824 motion/views.py:876 #: motion/templates/motion/view.html:80 -#: motion/templates/projector/Motion.html:38 utils/utils.py:49 -#: utils/views.py:108 +#: motion/templates/projector/Motion.html:38 utils/utils.py:45 +#: utils/views.py:104 msgid "No" msgstr "Nein" @@ -483,9 +502,9 @@ msgstr "Neue Wahl wurde erfolgreich angelegt." msgid "Election was successfully modified." msgstr "Wahl wurde erfolgreich geändert." -#: assignment/views.py:130 motion/views.py:245 motion/views.py:689 -#: participant/views.py:508 participant/views.py:531 utils/views.py:222 -#: utils/views.py:240 utils/views.py:264 +#: assignment/views.py:130 motion/views.py:239 motion/views.py:683 +#: participant/views.py:504 participant/views.py:528 utils/views.py:218 +#: utils/views.py:236 utils/views.py:260 msgid "Please check the form for errors." msgstr "Bitte kontrollieren Sie das Formular nach Fehlern." @@ -585,7 +604,7 @@ msgstr "Wahlen: %s" msgid "Candidates" msgstr "Kandidaten/innen" -#: assignment/views.py:413 motion/views.py:823 +#: assignment/views.py:413 motion/views.py:817 #: motion/templates/motion/view.html:44 msgid "Vote results" msgstr "Abstimmungsergebnis" @@ -625,7 +644,7 @@ msgstr "Ungültige Stimmen" #: assignment/templates/assignment/view.html:202 #: assignment/templates/assignment/view.html:207 #: assignment/templates/projector/Assignment.html:109 -#: assignment/templates/projector/Assignment.html:115 motion/views.py:830 +#: assignment/templates/projector/Assignment.html:115 motion/views.py:824 #: motion/templates/motion/poll_view.html:35 #: motion/templates/motion/view.html:84 #: motion/templates/projector/Motion.html:42 poll/models.py:76 @@ -660,8 +679,8 @@ msgstr[0] "%d verfügbare Posten" msgstr[1] "%d verfügbare Posten" #: assignment/views.py:588 assignment/templates/assignment/view.html:170 -#: assignment/templates/projector/Assignment.html:80 motion/views.py:830 -#: motion/views.py:883 motion/templates/motion/view.html:81 +#: assignment/templates/projector/Assignment.html:80 motion/views.py:824 +#: motion/views.py:877 motion/templates/motion/view.html:81 #: motion/templates/projector/Motion.html:39 msgid "Abstention" msgstr "Enthaltung" @@ -722,7 +741,7 @@ msgstr "Wahl-Einstellungen" #: assignment/templates/assignment/overview.html:14 #: assignment/templates/assignment/overview.html:27 #: assignment/templates/assignment/view.html:11 -#: assignment/templates/projector/Assignment.html:18 motion/views.py:801 +#: assignment/templates/projector/Assignment.html:18 motion/views.py:795 #: motion/templates/motion/overview.html:20 #: motion/templates/motion/overview.html:40 #: motion/templates/motion/view.html:34 @@ -845,7 +864,7 @@ msgid "was not a
candidate" msgstr "war kein Kandidat" #: assignment/templates/assignment/view.html:191 -#: assignment/templates/projector/Assignment.html:100 motion/views.py:830 +#: assignment/templates/projector/Assignment.html:100 motion/views.py:824 #: motion/templates/motion/view.html:82 #: motion/templates/projector/Motion.html:40 msgid "Invalid" @@ -879,7 +898,7 @@ msgstr "Veranstalter" msgid "Allow access for anonymous guest users" msgstr "Erlaube Zugriff für anonyme Gast-Nutzer" -#: config/forms.py:65 participant/forms.py:123 +#: config/forms.py:65 participant/forms.py:126 msgid "Welcome text" msgstr "Willkommenstext" @@ -905,7 +924,7 @@ msgstr "Allgemein" #: config/models.py:126 config/templates/config/version.html:5 #: config/templates/config/version.html:8 -#: config/templates/config/version.html:11 motion/views.py:815 +#: config/templates/config/version.html:11 motion/views.py:809 #: motion/templates/motion/view.html:214 motion/templates/motion/view.html:244 msgid "Version" msgstr "Version" @@ -935,7 +954,7 @@ msgstr "Willkommens-Widget" msgid "System" msgstr "System" -#: motion/forms.py:25 motion/models.py:541 motion/views.py:849 +#: motion/forms.py:25 motion/models.py:541 motion/views.py:843 #: motion/templates/motion/view.html:229 motion/templates/motion/view.html:249 #: motion/templates/projector/Motion.html:77 msgid "Reason" @@ -949,18 +968,18 @@ msgstr "Triviale Änderung" msgid "Trivial changes don't create a new version." msgstr "Triviale Änderungen erzeugen keine neue Version." -#: motion/forms.py:35 motion/models.py:63 motion/views.py:768 +#: motion/forms.py:35 motion/models.py:63 motion/views.py:762 #: motion/templates/motion/overview.html:41 #: motion/templates/motion/view.html:18 #: motion/templates/projector/Motion.html:55 msgid "Submitter" msgstr "Antragsteller/in" -#: motion/forms.py:44 motion/views.py:788 motion/templates/motion/view.html:22 +#: motion/forms.py:44 motion/views.py:782 motion/templates/motion/view.html:22 msgid "Supporters" msgstr "Unterstützer/innen" -#: motion/forms.py:50 participant/forms.py:111 +#: motion/forms.py:50 participant/forms.py:114 msgid "CSV File" msgstr "CSV-Datei" @@ -1175,32 +1194,32 @@ msgstr "Darf Anträge verwalten" msgid "The assembly may decide," msgstr "Die Versammlung möge beschließen," -#: motion/models.py:603 motion/views.py:718 motion/views.py:943 -#: motion/views.py:954 motion/templates/motion/base_motion.html:9 +#: motion/models.py:603 motion/views.py:712 motion/views.py:937 +#: motion/views.py:948 motion/templates/motion/base_motion.html:9 #: motion/templates/motion/overview.html:7 #: motion/templates/motion/overview.html:10 msgid "Motions" msgstr "Anträge" -#: motion/views.py:173 +#: motion/views.py:167 msgid "You have not the necessary rights to create or edit motions." msgstr "" "Sie haben nicht die nötigen Rechte, um Anträge zu erstellen oder zu " "bearbeiten." -#: motion/views.py:178 +#: motion/views.py:172 msgid "You can not edit this motion." msgstr "Sie dürfen diesen Antrag nicht bearbeiten." -#: motion/views.py:236 +#: motion/views.py:230 msgid "New motion was successfully created." msgstr "Neuer Antrag wurde erfolgreich angelegt." -#: motion/views.py:238 +#: motion/views.py:232 msgid "Motion was successfully modified." msgstr "Antrag wurde erfolgreich geändert." -#: motion/views.py:252 +#: motion/views.py:246 msgid "" "Attention: Do you really want to edit this motion? The supporters will " "not be removed automatically because you can manage motions. Please " @@ -1210,7 +1229,7 @@ msgstr "" "werden nicht automatisch entfernt, da Sie Anträge verwalten dürfen. " "Prüfen Sie, ob die Unterstützungen noch gültig sind." -#: motion/views.py:254 +#: motion/views.py:248 #, python-format msgid "" "Attention: Do you really want to edit this motion? All %s supporters " @@ -1219,128 +1238,128 @@ msgstr "" "Wollen Sie den Antrag wirklich ändern? Alle %s Unterstützer/innen " "werden dann automatisch entfernt. Versuchen Sie diese erneut zu gewinnen." -#: motion/views.py:286 +#: motion/views.py:280 msgid "Motion number was successfully set." msgstr "Antragsnummer wurde erfolgreich gesetzt." -#: motion/views.py:302 +#: motion/views.py:296 msgid "Motion was successfully authorized." msgstr "Antrag wurde erfolgreich zugelassen." -#: motion/views.py:317 +#: motion/views.py:311 msgid "Motion was successfully rejected." msgstr "Antrag wurde erfolgreich verworfen." -#: motion/views.py:333 +#: motion/views.py:327 #, python-format msgid "Motion status was set to: %s." msgstr "Antragsstatus wurde gesetzt auf: %s." -#: motion/views.py:349 +#: motion/views.py:343 msgid "Motion status was reset." msgstr "Antragsstatus wurde zurückgesetzt." -#: motion/views.py:376 +#: motion/views.py:370 msgid "You can not support this motion." msgstr "Sie dürfen diesen Antrag nicht unterstützen." -#: motion/views.py:379 +#: motion/views.py:373 msgid "You can not unsupport this motion." msgstr "Sie dürfen Ihre Unterstützung für diesen Antrag nicht entziehen." -#: motion/views.py:390 +#: motion/views.py:384 msgid "Do you really want to support this motion?" msgstr "Wollen Sie wirklich diesen Antrag unterstützen?" -#: motion/views.py:392 +#: motion/views.py:386 msgid "Do you really want to unsupport this motion?" msgstr "Wollen Sie wirklich Ihre Unterstützung für diesen Antrag entziehen?" -#: motion/views.py:403 +#: motion/views.py:397 msgid "You have supported this motion successfully." msgstr "Sie haben den Antrag erfolgreich unterstützt." -#: motion/views.py:405 +#: motion/views.py:399 msgid "You have unsupported this motion successfully." msgstr "Sie haben dem Antrag erfolgreich Ihre Unterstützung entzogen." -#: motion/views.py:419 +#: motion/views.py:413 msgid "New vote was successfully created." msgstr "Neue Abstimmung erfolgreich angelegt." -#: motion/views.py:435 +#: motion/views.py:429 msgid "Poll deleted" msgstr "Abstimmung gelöscht" -#: motion/views.py:436 +#: motion/views.py:430 msgid "Poll was successfully deleted." msgstr "Abstimmung wurde erfolgreich gelöscht." -#: motion/views.py:438 +#: motion/views.py:432 #, python-format msgid "the %s. poll" msgstr "die %s. Abstimmung" -#: motion/views.py:479 motion/views.py:488 +#: motion/views.py:473 motion/views.py:482 #, python-format msgid "You can not delete motion %s." msgstr "Sie können Antrag %s nicht löschen." -#: motion/views.py:484 motion/views.py:492 +#: motion/views.py:478 motion/views.py:486 #, python-format msgid "Motion %s was successfully deleted." msgstr "Antrag %s wurde erfolgreich gelöscht." -#: motion/views.py:494 +#: motion/views.py:488 msgid "Invalid request" msgstr "Ungültige Anfrage" -#: motion/views.py:518 +#: motion/views.py:512 msgid "Poll was updated" msgstr "Abstimmung wurde aktualisiert" -#: motion/views.py:535 +#: motion/views.py:529 #, python-format msgid "Version %s accepted." msgstr "Version %s akzeptiert." -#: motion/views.py:537 +#: motion/views.py:531 #, python-format msgid "Do you really want to authorize version %s?" msgstr "Soll Version %s wirklich zugelassen werden?" -#: motion/views.py:547 +#: motion/views.py:541 #, python-format msgid "Version %s rejected." msgstr "Version %s zurückgewiesen." -#: motion/views.py:549 +#: motion/views.py:543 msgid "ERROR by rejecting the version." msgstr "FEHLER beim Zurückweisen der Version." -#: motion/views.py:551 +#: motion/views.py:545 #, python-format msgid "Do you really want to reject version %s?" msgstr "Soll Version %s wirklich zurückgewiesen werden?" -#: motion/views.py:587 motion/views.py:591 motion/views.py:597 -#: motion/views.py:600 participant/api.py:81 +#: motion/views.py:581 motion/views.py:585 motion/views.py:591 +#: motion/views.py:594 participant/api.py:78 #, python-format msgid "Ignoring malformed line %d in import file." msgstr "Fehlerhafte Zeile %d der Quelldatei wurde ignoriert." -#: motion/views.py:608 +#: motion/views.py:602 #, python-format msgid "Ignoring line %d because the assigned group may not act as a person." msgstr "" "Fehlerhafte Zeile %d der Quelldatei wurde ignoriert da die verwendete Gruppe " "nicht als Person auftreten darf." -#: motion/views.py:617 +#: motion/views.py:611 msgid "Created by motion import." msgstr "Erstellt durch Antragsimport." -#: motion/views.py:631 +#: motion/views.py:625 #, python-format msgid "" "Ignoring line %d because it contains an incomplete first / last name pair." @@ -1348,52 +1367,52 @@ msgstr "" "Fehlerhafte Zeile %d der Quelldatei wurde ignoriert, da Vor- bzw. Nachname " "Leerstrings enthalten." -#: motion/views.py:669 +#: motion/views.py:663 #, python-format msgid "%d motion was successfully imported." msgid_plural "%d motions were successfully imported." msgstr[0] "%d Antrag wurde erfolgreich importiert." msgstr[1] "%d Anträge wurden erfolgreich importiert." -#: motion/views.py:672 +#: motion/views.py:666 #, python-format msgid "%d motion was successfully modified." msgid_plural "%d motions were successfully modified." msgstr[0] "%d Antrag wurde erfolgreich geändert." msgstr[1] "%d Anträge wurden erfolgreich geändert." -#: motion/views.py:675 +#: motion/views.py:669 #, python-format msgid "%d new user was added." msgid_plural "%d new users were added." msgstr[0] "%d neuer Nutzer wurde erstellt." msgstr[1] "%d neue Nutzer wurden erstellt." -#: motion/views.py:678 +#: motion/views.py:672 #, python-format msgid "%d new group was added." msgid_plural "%d new groups were added." msgstr[0] "%d neue Gruppe wurde erstellt." msgstr[1] "%d neue Gruppen wurden erstellt." -#: motion/views.py:681 +#: motion/views.py:675 #, python-format msgid "%d group assigned to motions." msgid_plural "%d groups assigned to motions." msgstr[0] "%d Gruppe wurde zugewiesen." msgstr[1] "%d Gruppen wurden zugewiesen." -#: motion/views.py:685 participant/api.py:97 +#: motion/views.py:679 participant/api.py:94 msgid "Import aborted because of severe errors in the input file." msgstr "Import auf Grund von schweren Fehlern in der Quelldatei abgebrochen." -#: motion/views.py:687 participant/api.py:99 +#: motion/views.py:681 participant/api.py:96 msgid "Import file has wrong character encoding, only UTF-8 is supported!" msgstr "" "Die Quelldatei benutzt eine ungültige Zeichenkodierung, es wird nur UTF-8 " "wird unterstützt!" -#: motion/views.py:691 +#: motion/views.py:685 msgid "" "Attention: Existing motions will be modified if you import new motions with " "the same number." @@ -1401,7 +1420,7 @@ msgstr "" "Achtung: Existierende Anträge werden geändert wenn Sie neue Anträge mit " "identischer Nummer importieren." -#: motion/views.py:692 +#: motion/views.py:686 msgid "" "Attention: Importing an motions without a number multiple times will create " "duplicates." @@ -1409,7 +1428,7 @@ msgstr "" "Achtung: Bei mehrfachem Import eines Antrags ohne Nummer können Duplikate " "entstehen." -#: motion/views.py:725 motion/views.py:863 +#: motion/views.py:719 motion/views.py:857 #: motion/templates/motion/poll_view.html:7 #: motion/templates/motion/poll_view.html:12 #: motion/templates/motion/view.html:7 motion/templates/motion/view.html:206 @@ -1419,21 +1438,21 @@ msgstr "" msgid "Motion" msgstr "Antrag" -#: motion/views.py:739 motion/templates/motion/overview.html:84 +#: motion/views.py:733 motion/templates/motion/overview.html:84 msgid "No motions available." msgstr "Keine Anträge vorhanden." -#: motion/views.py:744 motion/views.py:746 motion/views.py:761 -#: motion/views.py:763 motion/templates/motion/base_motion.html:24 +#: motion/views.py:738 motion/views.py:740 motion/views.py:755 +#: motion/views.py:757 motion/templates/motion/base_motion.html:24 #: motion/templates/projector/Motion.html:63 msgid "Motion No." msgstr "Antrag Nr." -#: motion/views.py:778 +#: motion/views.py:772 msgid "Signature" msgstr "Unterschrift" -#: motion/views.py:829 motion/templates/motion/base_motion.html:55 +#: motion/views.py:823 motion/templates/motion/base_motion.html:55 #: motion/templates/motion/poll_view.html:8 #: motion/templates/motion/poll_view.html:13 #: motion/templates/motion/view.html:66 motion/templates/motion/view.html:74 @@ -1441,21 +1460,21 @@ msgstr "Unterschrift" msgid "Vote" msgstr "Abstimmung" -#: motion/views.py:863 +#: motion/views.py:857 msgid "Poll" msgstr "Abstimmung" -#: motion/views.py:877 +#: motion/views.py:871 #, python-format msgid "Motion No. %s" msgstr "Antrag Nr. %s" -#: motion/views.py:879 +#: motion/views.py:873 #, python-format msgid "%d. Vote" msgstr "%d. Abstimmung" -#: motion/views.py:936 +#: motion/views.py:930 msgid "Motion settings successfully saved." msgstr "Antrags-Einstellungen wurden erfolgreich gespeichert." @@ -1730,18 +1749,18 @@ msgstr "Keine Abstimmungsergebnisse vorhanden." msgid "Participant" msgstr "Teilnehmer" -#: participant/forms.py:27 participant/views.py:607 +#: participant/forms.py:28 participant/views.py:604 #: participant/templates/participant/group_overview.html:7 #: participant/templates/participant/group_overview.html:10 #: participant/templates/participant/user_detail.html:14 msgid "Groups" msgstr "Gruppen" -#: participant/forms.py:52 +#: participant/forms.py:53 msgid "Permissions" msgstr "Rechte" -#: participant/forms.py:55 participant/views.py:546 participant/views.py:593 +#: participant/forms.py:56 participant/views.py:543 participant/views.py:590 #: participant/templates/participant/base_participant.html:12 #: participant/templates/participant/overview.html:7 #: participant/templates/participant/overview.html:18 @@ -1749,28 +1768,28 @@ msgstr "Rechte" msgid "Participants" msgstr "Teilnehmer/innen" -#: participant/forms.py:92 +#: participant/forms.py:93 msgid "You can not edit the name for this group." msgstr "Sie dürfen den Namen dieser Gruppe nicht bearbeiten." -#: participant/forms.py:96 +#: participant/forms.py:97 #, python-format msgid "Group name \"%s\" is reserved for internal use." msgstr "Der Gruppenname \"%s\" ist für interne Verwendung reserviert." -#: participant/forms.py:118 +#: participant/forms.py:121 msgid "System URL" msgstr "System URL" -#: participant/forms.py:119 participant/forms.py:124 +#: participant/forms.py:122 participant/forms.py:127 msgid "Printed in PDF of first time passwords only." msgstr "Erscheint nur im PDF der Erst-Passwörter" -#: participant/forms.py:127 +#: participant/forms.py:130 msgid "Sort participants by first name" msgstr "Teilnehmer/innen nach Vornamen sortieren" -#: participant/forms.py:128 +#: participant/forms.py:131 msgid "Disable for sorting by last name" msgstr "Deaktivieren für Sortierung nach Nachnamen" @@ -1820,7 +1839,7 @@ msgstr "Nur zum Filtern der Teilnehmerliste." msgid "Typ" msgstr "Typ" -#: participant/models.py:54 participant/views.py:255 +#: participant/models.py:54 participant/views.py:248 #: participant/templates/participant/overview.html:45 #: participant/templates/participant/overview.html:70 #: participant/templates/participant/user_detail.html:34 @@ -1864,96 +1883,90 @@ msgstr "Zum Beispiel als Antragsteller." msgid "Welcome to OpenSlides!" msgstr "Willkommen bei OpenSlides!" -#: participant/views.py:207 +#: participant/views.py:200 msgid "You can not delete yourself." msgstr "Sie dürfen sich nicht selbst löschen." -#: participant/views.py:228 +#: participant/views.py:221 msgid "You can not deactivate yourself." msgstr "Sie dürfen sich nicht selbst deaktivieren." -#: participant/views.py:231 +#: participant/views.py:224 msgid "You can not deactivate the administrator." msgstr "Sie dürfen den Administrator nicht deaktivieren." -#: participant/views.py:250 +#: participant/views.py:243 msgid "Participant-list" msgstr "Teilnehmerliste" -#: participant/views.py:251 +#: participant/views.py:244 msgid "List of Participants" msgstr "Teilnehmerliste" -#: participant/views.py:254 participant/templates/participant/overview.html:67 +#: participant/views.py:247 participant/templates/participant/overview.html:67 msgid "Last Name" msgstr "Nachname" -#: participant/views.py:254 participant/templates/participant/overview.html:66 +#: participant/views.py:247 participant/templates/participant/overview.html:66 msgid "First Name" msgstr "Vorname" -#: participant/views.py:254 +#: participant/views.py:247 #: participant/templates/participant/group_overview.html:13 msgid "Group" msgstr "Gruppe" -#: participant/views.py:254 participant/templates/participant/overview.html:37 -#: participant/templates/participant/overview.html:69 -#: participant/templates/participant/user_detail.html:29 -msgid "Type" -msgstr "Typ" - -#: participant/views.py:286 +#: participant/views.py:279 msgid "Participant-passwords" msgstr "Teilnehmer-Passwoerter" -#: participant/views.py:308 +#: participant/views.py:301 msgid "Account for OpenSlides" msgstr "Zugang für OpenSlides" -#: participant/views.py:310 +#: participant/views.py:303 #, python-format msgid "for %s" msgstr "für %s" -#: participant/views.py:313 +#: participant/views.py:306 #, python-format msgid "User: %s" msgstr "Nutzername: %s" -#: participant/views.py:317 +#: participant/views.py:310 #, python-format msgid "Password: %s" msgstr "Passwort: %s" -#: participant/views.py:322 +#: participant/views.py:315 #, python-format msgid "URL: %s" msgstr "URL: %s" -#: participant/views.py:364 +#: participant/views.py:357 #, python-format msgid "%d new participants were successfully imported." msgstr "%d neue Teilnehmer/innen wurden erfolgreich importiert." -#: participant/views.py:375 +#: participant/views.py:368 msgid "Do you really want to reset the password?" msgstr "Soll das Passwort wirklich zurückgesetzt werden?" -#: participant/views.py:388 +#: participant/views.py:381 #, python-format msgid "The Password for %s was successfully reset." msgstr "Das Passwort für %s wurde erfolgreich zurückgesetzt." -#: participant/views.py:445 +#: participant/views.py:438 msgid "You can not delete this Group." msgstr "Sie dürfen diese Gruppe nicht löschen." -#: participant/views.py:473 +#: participant/views.py:466 msgid "Participants settings successfully saved." msgstr "Teilnehmer/innen-Einstellungen wurden erfolgreich gespeichert." -#: participant/views.py:483 +#: participant/views.py:476 #, python-format msgid "" "Installation was successfully! Use %(user)s (password: %(password)s) for " @@ -1966,15 +1979,15 @@ msgstr "" "Sie das Passwort nach der ersten Anmeldung! Anderenfalls erscheint diese " "Meldung weiterhin für alle und ist ein Sicherheitsrisiko." -#: participant/views.py:506 +#: participant/views.py:502 msgid "User settings successfully saved." msgstr "Nutzereinstellungen wurden erfolgreich gespeichert." -#: participant/views.py:528 +#: participant/views.py:525 msgid "Password successfully changed." msgstr "Passwort wurde erfolgreich geändert." -#: participant/views.py:579 +#: participant/views.py:576 msgid "My motions and elections" msgstr "Meine Anträge und Wahlen" @@ -2334,52 +2347,61 @@ msgstr "" "Nutzen Sie unseren professionellen Support für OpenSlides." -#: utils/pdf.py:227 +#: utils/pdf.py:226 #, python-format msgid "As of: %s" msgstr "Stand: %s" -#: utils/pdf.py:238 utils/pdf.py:247 +#: utils/pdf.py:237 utils/pdf.py:246 #, python-format msgid "Page %s" msgstr "Seite %s" -#: utils/utils.py:63 utils/views.py:287 +#: utils/utils.py:59 utils/views.py:283 #, python-format msgid "Do you really want to delete %s?" msgstr "Soll %s wirklich gelöscht werden?" -#: utils/utils.py:110 +#: utils/utils.py:106 msgid "Sorry, you have no rights to see this page." msgstr "Bedaure, Sie haben keine Berechtigung diese Seite zu sehen." -#: utils/views.py:106 +#: utils/views.py:102 msgid "Are you sure?" msgstr "Sind Sie sicher?" -#: utils/views.py:107 +#: utils/views.py:103 msgid "Thank you for your answer" msgstr "Danke für Ihre Antwort" -#: utils/views.py:244 +#: utils/views.py:240 #, python-format msgid "%s was successfully modified." msgstr "%s wurde erfolgreich bearbeitet." -#: utils/views.py:275 +#: utils/views.py:271 #, python-format msgid "%s was successfully created." msgstr "%s wurde erfolgreich angelegt." -#: utils/views.py:293 +#: utils/views.py:289 #, python-format msgid "%s was successfully deleted." msgstr "%s wurde erfolgreich gelöscht." -#: utils/views.py:308 +#: utils/views.py:304 msgid "undefined-filename" msgstr "undefinierter-dateiname" #: utils/jsonfield/fields.py:22 msgid "Enter valid JSON" msgstr "Gebe valides JSON ein" + +#~ msgid "Visible to all" +#~ msgstr "Für alle sichtbar" + +#~ msgid "Moderators only" +#~ msgstr "Nur für Moderatoren" + +#~ msgid "Visibility" +#~ msgstr "Sichtbarkeit" diff --git a/openslides/locale/de/LC_MESSAGES/djangojs.mo b/openslides/locale/de/LC_MESSAGES/djangojs.mo index 062f0f6684dca5d18c31c265f648e953c9b1b23b..895d2e5180ac5cac0c0596a80e638e552f7b5f38 100644 GIT binary patch delta 64 zcmaFFe1>^~4zCv@14A|g1A{0KZ<}bDt-=-HAEN7Al$uzQnV+ZYl30>zrC?-WXsl~s SsB2)VU}R)vY_Rbj3nKsvVGvgU delta 86 zcmX@Z{D^si4sQY@14A|g1A{0KpP6WxZB<-aP>^3#;*ejEnpd2YnUY$pmtU0572qGD n>s*wYSdy8ar|Xhfl4_-3WMF8d3q%H%3WkPOhDIAturLAuW`Y@y diff --git a/openslides/locale/de/LC_MESSAGES/djangojs.po b/openslides/locale/de/LC_MESSAGES/djangojs.po index 6e0f7367c..e4f5ec9e0 100644 --- a/openslides/locale/de/LC_MESSAGES/djangojs.po +++ b/openslides/locale/de/LC_MESSAGES/djangojs.po @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: OpenSlides 1.3\n" -"Report-Msgid-Bugs-To: support@openslides.org\n" -"POT-Creation-Date: 2012-12-09 11:12+0100\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-01-05 22:30+0100\n" "PO-Revision-Date: 2012-07-28 11:07+0200\n" "Last-Translator: Oskar Hahn \n" "Language: de\n" From bc9dcffff4bdeaa6f2860aee321f9d93939772f2 Mon Sep 17 00:00:00 2001 From: Stefan Frauenknecht Date: Tue, 29 Jan 2013 14:28:42 +0100 Subject: [PATCH 03/24] #41 Time for each agenda item --- openslides/agenda/forms.py | 2 + openslides/agenda/models.py | 5 ++ .../agenda/templates/agenda/item_row.html | 4 ++ .../agenda/templates/agenda/overview.html | 6 ++- openslides/agenda/views.py | 10 ++++ openslides/locale/de/LC_MESSAGES/django.mo | Bin 36423 -> 36454 bytes openslides/locale/de/LC_MESSAGES/django.po | 48 ++++++++++-------- openslides/locale/de/LC_MESSAGES/djangojs.mo | Bin 460 -> 460 bytes openslides/locale/de/LC_MESSAGES/djangojs.po | 2 +- 9 files changed, 53 insertions(+), 24 deletions(-) diff --git a/openslides/agenda/forms.py b/openslides/agenda/forms.py index 66a4ee7a7..f0768f656 100644 --- a/openslides/agenda/forms.py +++ b/openslides/agenda/forms.py @@ -27,6 +27,8 @@ class ItemForm(forms.ModelForm, CssClassMixin): parent = TreeNodeChoiceField( queryset=Item.objects.all(), label=_("Parent item"), required=False) + duration = forms.TimeField(widget=forms.TimeInput(format='%H:%M') , input_formats=('%H:%M', '%H %M', '%M'), required=False) + class Meta: model = Item exclude = ('closed', 'weight', 'related_sid') diff --git a/openslides/agenda/models.py b/openslides/agenda/models.py index 45a8ae1bb..a4c46671d 100644 --- a/openslides/agenda/models.py +++ b/openslides/agenda/models.py @@ -46,6 +46,8 @@ class Item(MPTTModel, SlideMixin): type = models.CharField(max_length=3, choices=ITEM_TYPE, default='agd', verbose_name=_("Type")) + duration = models.TimeField(blank=True, null=True, verbose_name=_('Duration')); + related_sid = models.CharField(null=True, blank=True, max_length=63) def get_related_slide(self): @@ -174,6 +176,7 @@ class Item(MPTTModel, SlideMixin): def __unicode__(self): return self.get_title() + class Meta: permissions = ( ('can_see_agenda', ugettext_noop("Can see agenda")), @@ -185,5 +188,7 @@ class Item(MPTTModel, SlideMixin): order_insertion_by = ['weight'] + + register_slidemodel(Item, control_template='agenda/control_item.html') register_slidefunc('agenda', agenda_show, weight=-1, name=_('Agenda')) diff --git a/openslides/agenda/templates/agenda/item_row.html b/openslides/agenda/templates/agenda/item_row.html index b5e3c084c..89c41aa92 100644 --- a/openslides/agenda/templates/agenda/item_row.html +++ b/openslides/agenda/templates/agenda/item_row.html @@ -27,6 +27,10 @@ {{ item.comment|first_line }} + + {{ item.duration|time:"H:i" }} + + {% endif %} {% if perms.agenda.can_manage_agenda or perms.projector.can_manage_projector %} diff --git a/openslides/agenda/templates/agenda/overview.html b/openslides/agenda/templates/agenda/overview.html index 24ffaca65..8db571b3f 100644 --- a/openslides/agenda/templates/agenda/overview.html +++ b/openslides/agenda/templates/agenda/overview.html @@ -64,6 +64,9 @@ {% if perms.agenda.can_manage_agenda %} {% trans "Comment" %} {% endif %} + {% if perms.agenda.can_manage_agenda %} + {% trans "Duration" %} + {% endif %} {% if perms.agenda.can_manage_agenda or perms.projector.can_manage_projector %} {% trans "Actions" %} {% endif %} @@ -78,6 +81,7 @@ {% if perms.agenda.can_manage_agenda %} + {{ duration|time:"H:i" }} {% endif %} {% if perms.agenda.can_manage_agenda or perms.projector.can_manage_projector %} @@ -99,7 +103,7 @@ {% endfor %} {% else %} - {% trans "No items available." %} + {% trans "No items available." %} {% endif %} diff --git a/openslides/agenda/views.py b/openslides/agenda/views.py index c66eaf18d..d968527d7 100644 --- a/openslides/agenda/views.py +++ b/openslides/agenda/views.py @@ -28,6 +28,7 @@ from openslides.projector.api import get_active_slide from openslides.projector.projector import Widget, SLIDE from .models import Item from .forms import ItemOrderForm, ItemForm +from datetime import datetime, timedelta class Overview(TemplateView): @@ -37,6 +38,8 @@ class Overview(TemplateView): permission_required = 'agenda.can_see_agenda' template_name = 'agenda/overview.html' + + def get_context_data(self, **kwargs): context = super(Overview, self).get_context_data(**kwargs) @@ -45,9 +48,15 @@ class Overview(TemplateView): else: items = Item.objects.filter(type__exact = 'agd') + duration = timedelta() + for agenda_item in Item.objects.filter(closed=False): + if agenda_item.duration is not None: + duration += timedelta(hours=agenda_item.duration.hour, minutes=agenda_item.duration.minute) + context.update({ 'items': items, 'active_sid': get_active_slide(only_sid=True), + 'duration': datetime.strptime(str(duration), '%H:%M:%S'), }) return context @@ -100,6 +109,7 @@ class SetClosed(RedirectView, SingleObjectMixin): url = 'item_overview' model = Item + def get_ajax_context(self, **kwargs): context = super(SetClosed, self).get_ajax_context(**kwargs) closed = kwargs['closed'] diff --git a/openslides/locale/de/LC_MESSAGES/django.mo b/openslides/locale/de/LC_MESSAGES/django.mo index d5f954adbf2a8b2e0275c307d2cfc998731a8d21..f9ea13c1437b53a5b83293ef54d045b586b5c123 100644 GIT binary patch delta 10463 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

C@jXbY#<4n3zEHpq<;aVsUpl$#h~J zomsd6Up(s2SVZ6FL>2Pya6J|zrjthyI({Oq5QlC16nfK+w(Z*ZKicbvL4-Z{Pf=te zIoZqhe2K?sze%hiZ$^wDe}24Vb06!6&revFS@o0Ej4?Yg3(MH?_O#<6@$+I2jN!zU z7f$}0{1;B<5_`!fqmFLm7wxzfrpsANJBE12_WuXJvF8qwe@0%_o>TWm^4j+N1@Zvx zfvLnBbbf~2?8$}r7V!yv33!b7lzbrSp90?!I*QTPj<`dv{rnMmHr69_RHm(CJF$>_ zKwgW#(%?%(zuWxrl-R_{`KW(%Otu%z#6`4k60eeb6CLb1Kl*h1Zg3vqDPpHR{}1_o zq9yTZ?w*J+x2`?Ym!A6MCGZDAM@ix`F`xc9#0SJmov_FIw4Wb6$SV;?h79<%@GB@}8s9-mYmX3bJ0Gq2llGvrh9%r5> zn8Ucy*a907t6w-bj`mlyOJPM~0{NB~&ZpAXg-9V1RgHX{tVKh|CZaI$1<{tiR>T-` z9q*DS5Qm7biQe>0C0^4>j_--CL>lKlCbp3eCDxPcsBCa1(r!&NoczDULn4mQ(T3R1xw+UJbwuG1EJO4r??jxi=PF=+4dNIB`sW_O7CKXNm)rvLx| delta 10445 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\n" "Language-Team: support@openslides.de\n" @@ -63,7 +63,7 @@ msgstr "Kommentar" msgid "Closed" msgstr "Abgeschlossen" -#: agenda/models.py:43 agenda/templates/agenda/overview.html:71 +#: agenda/models.py:43 agenda/templates/agenda/overview.html:74 #: projector/models.py:31 msgid "Weight" msgstr "Gewichtung" @@ -75,57 +75,61 @@ msgstr "Gewichtung" msgid "Type" msgstr "Typ" -#: agenda/models.py:179 +#: agenda/models.py:49 agenda/templates/agenda/overview.html:68 +msgid "Duration" +msgstr "Dauer" + +#: agenda/models.py:182 msgid "Can see agenda" msgstr "Darf die Tagesordnung sehen" -#: agenda/models.py:180 +#: agenda/models.py:183 msgid "Can manage agenda" msgstr "Darf die Tagesordung verwalten" -#: agenda/models.py:181 +#: agenda/models.py:184 msgid "Can see orga items" msgstr "Darf Organisationspunkte sehen" -#: agenda/models.py:189 agenda/slides.py:20 agenda/views.py:191 -#: agenda/views.py:192 agenda/views.py:212 agenda/views.py:226 +#: agenda/models.py:194 agenda/slides.py:20 agenda/views.py:207 +#: agenda/views.py:208 agenda/views.py:228 agenda/views.py:242 #: agenda/templates/agenda/base_agenda.html:10 #: agenda/templates/agenda/overview.html:8 #: agenda/templates/agenda/overview.html:52 -#: agenda/templates/agenda/overview.html:77 +#: agenda/templates/agenda/overview.html:80 #: agenda/templates/projector/AgendaSummary.html:6 #: agenda/templates/projector/AgendaSummary.html:10 msgid "Agenda" msgstr "Tagesordnung" -#: agenda/views.py:54 +#: agenda/views.py:69 msgid "You are not authorized to manage the agenda." msgstr "Sie sind nicht berechtigt die Tagesordnung zu ändern." -#: agenda/views.py:70 +#: agenda/views.py:85 msgid "Errors when reordering of the agenda" msgstr "Fehler beim Neusortieren der Tagesordnung" -#: agenda/views.py:131 +#: agenda/views.py:147 #, python-format msgid "Item %s was successfully modified." msgstr "Eintrag %s wurde erfolgreich bearbeitet." -#: agenda/views.py:152 +#: agenda/views.py:168 #, python-format msgid "Item %s was successfully created." msgstr "Eintrag %s wurde erfolgreich angelegt." -#: agenda/views.py:169 +#: agenda/views.py:185 msgid "Yes, with all child items." msgstr "Ja, mit allen Kindelementen." -#: agenda/views.py:177 +#: agenda/views.py:193 #, python-format msgid "Item %s and his children were successfully deleted." msgstr "Eintrag %s und seine Kindelemente wurde erfolgreich gelöscht." -#: agenda/views.py:182 +#: agenda/views.py:198 #, python-format msgid "Item %s was successfully deleted." msgstr "Eintrag %s wurde erfolgreich gelöscht." @@ -149,12 +153,12 @@ msgstr "Eintrag anzeigen" #: agenda/templates/agenda/base_agenda.html:31 #: agenda/templates/agenda/edit.html:8 agenda/templates/agenda/edit.html:16 -#: agenda/templates/agenda/item_row.html:40 +#: agenda/templates/agenda/item_row.html:44 msgid "Edit item" msgstr "Eintrag bearbeiten" #: agenda/templates/agenda/base_agenda.html:33 -#: agenda/templates/agenda/item_row.html:41 +#: agenda/templates/agenda/item_row.html:45 msgid "Delete item" msgstr "Eintrag löschen" @@ -231,12 +235,12 @@ msgstr "Eintrag als erledigt markieren" msgid "Item closed" msgstr "Eintrag erledigt" -#: agenda/templates/agenda/item_row.html:35 -#: agenda/templates/agenda/overview.html:86 +#: agenda/templates/agenda/item_row.html:39 +#: agenda/templates/agenda/overview.html:90 msgid "Activate item" msgstr "Eintrag projizieren" -#: agenda/templates/agenda/item_row.html:44 +#: agenda/templates/agenda/item_row.html:48 #: agenda/templates/agenda/widget.html:35 msgid "Activate summary for this item" msgstr "Zusammenfassung für diesen Eintrag projizieren" @@ -292,7 +296,7 @@ msgstr "Erledigt" msgid "Item" msgstr "Eintrag" -#: agenda/templates/agenda/overview.html:68 +#: agenda/templates/agenda/overview.html:71 #: assignment/templates/assignment/overview.html:28 #: motion/templates/motion/overview.html:43 #: participant/templates/participant/group_overview.html:14 @@ -300,7 +304,7 @@ msgstr "Eintrag" msgid "Actions" msgstr "Aktionen" -#: agenda/templates/agenda/overview.html:102 +#: agenda/templates/agenda/overview.html:106 #: agenda/templates/agenda/widget.html:46 #: projector/templates/projector/custom_slide_widget.html:36 msgid "No items available." diff --git a/openslides/locale/de/LC_MESSAGES/djangojs.mo b/openslides/locale/de/LC_MESSAGES/djangojs.mo index 895d2e5180ac5cac0c0596a80e638e552f7b5f38..7c267c9ba7caabcc595d4448fefc78333ad7f350 100644 GIT binary patch delta 19 acmX@Ze1>_#0S+Sz1tViCQ;Ur!SQr69>;?+} delta 19 acmX@Ze1>_#0S*IG1tTLXV}p$+SQr69cLn\n" "Language: de\n" From 65ebcbc991481c9c5e930b5d478fac8e925a95c4 Mon Sep 17 00:00:00 2001 From: Stefan Frauenknecht Date: Wed, 30 Jan 2013 17:39:53 +0100 Subject: [PATCH 04/24] #41 Time for each agenda item finished --- openslides/agenda/forms.py | 15 +++- openslides/agenda/models.py | 2 +- openslides/agenda/static/styles/agenda.css | 6 ++ .../agenda/templates/agenda/overview.html | 11 ++- openslides/agenda/views.py | 33 ++++++++- openslides/locale/de/LC_MESSAGES/django.mo | Bin 36454 -> 36810 bytes openslides/locale/de/LC_MESSAGES/django.po | 66 ++++++++++++------ openslides/locale/de/LC_MESSAGES/djangojs.mo | Bin 460 -> 460 bytes openslides/locale/de/LC_MESSAGES/djangojs.po | 2 +- 9 files changed, 106 insertions(+), 29 deletions(-) diff --git a/openslides/agenda/forms.py b/openslides/agenda/forms.py index f0768f656..68983a09f 100644 --- a/openslides/agenda/forms.py +++ b/openslides/agenda/forms.py @@ -27,7 +27,12 @@ class ItemForm(forms.ModelForm, CssClassMixin): parent = TreeNodeChoiceField( queryset=Item.objects.all(), label=_("Parent item"), required=False) - duration = forms.TimeField(widget=forms.TimeInput(format='%H:%M') , input_formats=('%H:%M', '%H %M', '%M'), required=False) + duration = forms.TimeField( + widget=forms.TimeInput(format='%H:%M') , + input_formats=('%H:%M', '%H %M'), + required=False, + label=_("Duration (hh:mm)") + ) class Meta: model = Item @@ -55,3 +60,11 @@ class ItemOrderForm(forms.Form, CssClassMixin): parent = forms.IntegerField( widget=forms.HiddenInput(attrs={'class': 'menu-plid'}), ) + +class ConfigForm(forms.Form, CssClassMixin): + agenda_start_event_time = forms.TimeField( + widget=forms.TimeInput(format='%H:%M') , + input_formats=('%H:%M', '%H:%M:%S'), + required=False, + label=_("Begin of event (hh:mm)"), + ) diff --git a/openslides/agenda/models.py b/openslides/agenda/models.py index a4c46671d..288bf1676 100644 --- a/openslides/agenda/models.py +++ b/openslides/agenda/models.py @@ -46,7 +46,7 @@ class Item(MPTTModel, SlideMixin): type = models.CharField(max_length=3, choices=ITEM_TYPE, default='agd', verbose_name=_("Type")) - duration = models.TimeField(blank=True, null=True, verbose_name=_('Duration')); + duration = models.TimeField(blank=True, null=True, verbose_name=_("Duration (hh:mm)")); related_sid = models.CharField(null=True, blank=True, max_length=63) diff --git a/openslides/agenda/static/styles/agenda.css b/openslides/agenda/static/styles/agenda.css index 611d19646..e6f75636b 100644 --- a/openslides/agenda/static/styles/agenda.css +++ b/openslides/agenda/static/styles/agenda.css @@ -22,3 +22,9 @@ table#menu-overview { white-space: nowrap; } + +table#agendatime { + float: right; + width: 15%; + margin-bottom: 1em; +} \ No newline at end of file diff --git a/openslides/agenda/templates/agenda/overview.html b/openslides/agenda/templates/agenda/overview.html index 8db571b3f..110f0e1f7 100644 --- a/openslides/agenda/templates/agenda/overview.html +++ b/openslides/agenda/templates/agenda/overview.html @@ -50,7 +50,16 @@ {% endif %}

{% trans "Agenda" %}

- + + + + + + + + + +
{% trans "Start of event" %}{{ start|time:"H:i" }}
{% trans "Estimated end" %}{{ end|time:"H:i" }}

{% trans "Filter" %}: {% trans "Hide closed items" %} diff --git a/openslides/agenda/views.py b/openslides/agenda/views.py index d968527d7..dada8c65e 100644 --- a/openslides/agenda/views.py +++ b/openslides/agenda/views.py @@ -18,10 +18,12 @@ from django.db.models import Model from django.utils.translation import ugettext as _, ugettext_lazy from django.views.generic.detail import SingleObjectMixin +from openslides.config.models import config +from openslides.agenda.forms import ConfigForm from openslides.utils.pdf import stylesheet from openslides.utils.views import ( TemplateView, RedirectView, UpdateView, CreateView, DeleteView, PDFView, - DetailView) + DetailView, FormView) from openslides.utils.template import Tab from openslides.utils.utils import html_strong from openslides.projector.api import get_active_slide @@ -53,10 +55,20 @@ class Overview(TemplateView): if agenda_item.duration is not None: duration += timedelta(hours=agenda_item.duration.hour, minutes=agenda_item.duration.minute) + start = config['agenda_start_event_time'] + if start is None: + start = u'0:00:00' + + start = datetime.strptime(start, '%H:%M:%S') + end = start + duration + duration = datetime.strptime(str(duration), '%H:%M:%S') + context.update({ 'items': items, 'active_sid': get_active_slide(only_sid=True), - 'duration': datetime.strptime(str(duration), '%H:%M:%S'), + 'duration': duration, + 'start': start, + 'end': end, }) return context @@ -218,6 +230,23 @@ class AgendaPDF(PDFView): else: story.append(Paragraph(item.get_title(), stylesheet['Item'])) +class Config(FormView): + """ + Config page for the agenda app. + """ + permission_required = 'config.can_manage_config' + form_class = ConfigForm + template_name = 'agenda/config.html' + + def get_initial(self): + return { + 'agenda_start_event_time': config['agenda_start_event_time'], + } + + def form_valid(self, form): + config['agenda_start_event_time'] = form.cleaned_data['agenda_start_event_time'] + messages.success(self.request, _('Agenda settings successfully saved.')) + return super(Config, self).form_valid(form) def register_tab(request): """ diff --git a/openslides/locale/de/LC_MESSAGES/django.mo b/openslides/locale/de/LC_MESSAGES/django.mo index f9ea13c1437b53a5b83293ef54d045b586b5c123..55f3077b44ed18eec1a3ebb00b378df27c6665d9 100644 GIT binary patch delta 10895 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 SEGaOk#s729ytFB9e*Xc^A19;$ delta 10586 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 diff --git a/openslides/locale/de/LC_MESSAGES/django.po b/openslides/locale/de/LC_MESSAGES/django.po index 389f332e1..5377c58f9 100644 --- a/openslides/locale/de/LC_MESSAGES/django.po +++ b/openslides/locale/de/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: OpenSlides 1.x\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-01-28 23:58+0100\n" +"POT-Creation-Date: 2013-01-30 17:20+0100\n" "PO-Revision-Date: 2012-07-28 11:07+0200\n" "Last-Translator: Emanuel Schuetze \n" "Language-Team: support@openslides.de\n" @@ -33,6 +33,10 @@ msgstr "Französisch" msgid "Parent item" msgstr "Elternelement" +#: agenda/forms.py:64 +msgid "Begin of event (hh:mm)" +msgstr "Beginn der Veranstaltung (ss:mm)" + #: agenda/models.py:35 msgid "Agenda item" msgstr "Tagesordnungseintrag" @@ -52,7 +56,7 @@ msgstr "Titel" msgid "Text" msgstr "Text" -#: agenda/models.py:41 agenda/templates/agenda/overview.html:65 +#: agenda/models.py:41 agenda/templates/agenda/overview.html:74 #: agenda/templates/agenda/view.html:13 participant/models.py:60 #: participant/templates/participant/overview.html:72 #: participant/templates/participant/user_detail.html:45 @@ -63,7 +67,7 @@ msgstr "Kommentar" msgid "Closed" msgstr "Abgeschlossen" -#: agenda/models.py:43 agenda/templates/agenda/overview.html:74 +#: agenda/models.py:43 agenda/templates/agenda/overview.html:83 #: projector/models.py:31 msgid "Weight" msgstr "Gewichtung" @@ -75,9 +79,9 @@ msgstr "Gewichtung" msgid "Type" msgstr "Typ" -#: agenda/models.py:49 agenda/templates/agenda/overview.html:68 -msgid "Duration" -msgstr "Dauer" +#: agenda/models.py:49 +msgid "Duration (hh:mm)" +msgstr "Dauer (ss:mm)" #: agenda/models.py:182 msgid "Can see agenda" @@ -91,49 +95,53 @@ msgstr "Darf die Tagesordung verwalten" msgid "Can see orga items" msgstr "Darf Organisationspunkte sehen" -#: agenda/models.py:194 agenda/slides.py:20 agenda/views.py:207 -#: agenda/views.py:208 agenda/views.py:228 agenda/views.py:242 +#: agenda/models.py:194 agenda/slides.py:20 agenda/views.py:219 +#: agenda/views.py:220 agenda/views.py:257 agenda/views.py:271 #: agenda/templates/agenda/base_agenda.html:10 #: agenda/templates/agenda/overview.html:8 #: agenda/templates/agenda/overview.html:52 -#: agenda/templates/agenda/overview.html:80 +#: agenda/templates/agenda/overview.html:89 #: agenda/templates/projector/AgendaSummary.html:6 #: agenda/templates/projector/AgendaSummary.html:10 msgid "Agenda" msgstr "Tagesordnung" -#: agenda/views.py:69 +#: agenda/views.py:81 msgid "You are not authorized to manage the agenda." msgstr "Sie sind nicht berechtigt die Tagesordnung zu ändern." -#: agenda/views.py:85 +#: agenda/views.py:97 msgid "Errors when reordering of the agenda" msgstr "Fehler beim Neusortieren der Tagesordnung" -#: agenda/views.py:147 +#: agenda/views.py:159 #, python-format msgid "Item %s was successfully modified." msgstr "Eintrag %s wurde erfolgreich bearbeitet." -#: agenda/views.py:168 +#: agenda/views.py:180 #, python-format msgid "Item %s was successfully created." msgstr "Eintrag %s wurde erfolgreich angelegt." -#: agenda/views.py:185 +#: agenda/views.py:197 msgid "Yes, with all child items." msgstr "Ja, mit allen Kindelementen." -#: agenda/views.py:193 +#: agenda/views.py:205 #, python-format msgid "Item %s and his children were successfully deleted." msgstr "Eintrag %s und seine Kindelemente wurde erfolgreich gelöscht." -#: agenda/views.py:198 +#: agenda/views.py:210 #, python-format msgid "Item %s was successfully deleted." msgstr "Eintrag %s wurde erfolgreich gelöscht." +#: agenda/views.py:248 +msgid "Agenda settings successfully saved." +msgstr "Tagesordnung Einstellungen erfolgreich gespeichert." + #: agenda/templates/agenda/base_agenda.html:12 msgid "All items" msgstr "Alle Einträge" @@ -236,7 +244,7 @@ msgid "Item closed" msgstr "Eintrag erledigt" #: agenda/templates/agenda/item_row.html:39 -#: agenda/templates/agenda/overview.html:90 +#: agenda/templates/agenda/overview.html:99 msgid "Activate item" msgstr "Eintrag projizieren" @@ -272,31 +280,43 @@ msgid "No" msgstr "Nein" #: agenda/templates/agenda/overview.html:55 +msgid "Start of event" +msgstr "Beginn der Veranstaltung" + +#: agenda/templates/agenda/overview.html:59 +msgid "Estimated end" +msgstr "Voraussichtliches Ende" + +#: agenda/templates/agenda/overview.html:64 #: assignment/templates/assignment/overview.html:12 #: motion/templates/motion/overview.html:12 #: participant/templates/participant/overview.html:22 msgid "Filter" msgstr "Filter" -#: agenda/templates/agenda/overview.html:56 +#: agenda/templates/agenda/overview.html:65 msgid "Hide closed items" msgstr "Verstecke abgeschlossene Einträge" -#: agenda/templates/agenda/overview.html:59 +#: agenda/templates/agenda/overview.html:68 msgid "item" msgid_plural "items" msgstr[0] "Eintrag" msgstr[1] "Einträge" -#: agenda/templates/agenda/overview.html:62 +#: agenda/templates/agenda/overview.html:71 msgid "Done" msgstr "Erledigt" -#: agenda/templates/agenda/overview.html:63 +#: agenda/templates/agenda/overview.html:72 msgid "Item" msgstr "Eintrag" -#: agenda/templates/agenda/overview.html:71 +#: agenda/templates/agenda/overview.html:77 +msgid "Duration" +msgstr "Dauer" + +#: agenda/templates/agenda/overview.html:80 #: assignment/templates/assignment/overview.html:28 #: motion/templates/motion/overview.html:43 #: participant/templates/participant/group_overview.html:14 @@ -304,7 +324,7 @@ msgstr "Eintrag" msgid "Actions" msgstr "Aktionen" -#: agenda/templates/agenda/overview.html:106 +#: agenda/templates/agenda/overview.html:115 #: agenda/templates/agenda/widget.html:46 #: projector/templates/projector/custom_slide_widget.html:36 msgid "No items available." diff --git a/openslides/locale/de/LC_MESSAGES/djangojs.mo b/openslides/locale/de/LC_MESSAGES/djangojs.mo index 7c267c9ba7caabcc595d4448fefc78333ad7f350..cfba14c7aa5e3ac9ba95d617398ff62606be5cda 100644 GIT binary patch delta 19 acmX@Ze1>_#0S;pW1w%6{6Vr_+SQr69ng#*@ delta 19 acmX@Ze1>_#0S+Sz1tViCQ;Ur!SQr69>;?+} diff --git a/openslides/locale/de/LC_MESSAGES/djangojs.po b/openslides/locale/de/LC_MESSAGES/djangojs.po index f528ae5fb..81c122520 100644 --- a/openslides/locale/de/LC_MESSAGES/djangojs.po +++ b/openslides/locale/de/LC_MESSAGES/djangojs.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: OpenSlides 1.3\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-01-28 23:58+0100\n" +"POT-Creation-Date: 2013-01-30 16:45+0100\n" "PO-Revision-Date: 2012-07-28 11:07+0200\n" "Last-Translator: Oskar Hahn \n" "Language: de\n" From 4cea5309178adaf6562782487f10cea4411033a8 Mon Sep 17 00:00:00 2001 From: Stefan Frauenknecht Date: Wed, 30 Jan 2013 18:07:28 +0100 Subject: [PATCH 05/24] gitignore modified --- .gitignore | 1 + requirements.txt | 6 +++--- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/.gitignore b/.gitignore index b8b12bc11..4d4a81520 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,7 @@ *.pyc *.swp *~ +.idea/* settings.py database.sqlite diff --git a/requirements.txt b/requirements.txt index 8602f17e8..8e6d80b8f 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,7 +1,7 @@ -Django==1.5b2 +Django==1.5c1 django-mptt==0.5.5 reportlab==2.6 PIL==1.1.7 -coverage==3.6b1 +coverage==3.6b3 django-discover-runner==0.2.2 -pep8==1.3.3 +pep8==1.4 From 3dfd16558a7e7b352cdc9dbd6398f8aa44a844aa Mon Sep 17 00:00:00 2001 From: Stefan Frauenknecht Date: Thu, 31 Jan 2013 18:35:52 +0100 Subject: [PATCH 06/24] Blanks removed --- openslides/agenda/models.py | 2 -- openslides/agenda/slides.py | 2 +- openslides/agenda/views.py | 2 -- 3 files changed, 1 insertion(+), 5 deletions(-) diff --git a/openslides/agenda/models.py b/openslides/agenda/models.py index 288bf1676..4e057ab5b 100644 --- a/openslides/agenda/models.py +++ b/openslides/agenda/models.py @@ -188,7 +188,5 @@ class Item(MPTTModel, SlideMixin): order_insertion_by = ['weight'] - - register_slidemodel(Item, control_template='agenda/control_item.html') register_slidefunc('agenda', agenda_show, weight=-1, name=_('Agenda')) diff --git a/openslides/agenda/slides.py b/openslides/agenda/slides.py index 93dec045c..f5b544b1d 100644 --- a/openslides/agenda/slides.py +++ b/openslides/agenda/slides.py @@ -16,7 +16,7 @@ from django.utils.translation import ugettext as _ def agenda_show(): from openslides.agenda.models import Item data = {} - items = Item.objects.filter(parent=None, type__exact = 'agd') + items = Item.objects.filter(parent=None, type__exact='agd') data['title'] = _("Agenda") data['items'] = items data['template'] = 'projector/AgendaSummary.html' diff --git a/openslides/agenda/views.py b/openslides/agenda/views.py index dada8c65e..e035891c8 100644 --- a/openslides/agenda/views.py +++ b/openslides/agenda/views.py @@ -41,7 +41,6 @@ class Overview(TemplateView): template_name = 'agenda/overview.html' - def get_context_data(self, **kwargs): context = super(Overview, self).get_context_data(**kwargs) @@ -121,7 +120,6 @@ class SetClosed(RedirectView, SingleObjectMixin): url = 'item_overview' model = Item - def get_ajax_context(self, **kwargs): context = super(SetClosed, self).get_ajax_context(**kwargs) closed = kwargs['closed'] From 9746b3818fa0817d690037a30b5f07f2a48b550c Mon Sep 17 00:00:00 2001 From: Stefan Frauenknecht Date: Thu, 31 Jan 2013 20:32:29 +0100 Subject: [PATCH 07/24] Rework code to ommit unnecessary filter call. --- openslides/agenda/views.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/openslides/agenda/views.py b/openslides/agenda/views.py index e035891c8..954868ba2 100644 --- a/openslides/agenda/views.py +++ b/openslides/agenda/views.py @@ -50,9 +50,11 @@ class Overview(TemplateView): items = Item.objects.filter(type__exact = 'agd') duration = timedelta() - for agenda_item in Item.objects.filter(closed=False): - if agenda_item.duration is not None: - duration += timedelta(hours=agenda_item.duration.hour, minutes=agenda_item.duration.minute) + + for item in items: + if not item.closed and item.duration is not None: + duration += timedelta(hours=item.duration.hour, + minutes=item.duration.minute) start = config['agenda_start_event_time'] if start is None: From 5a9b7fdca5eb0420cd7589f01bbbb56f768487d8 Mon Sep 17 00:00:00 2001 From: Stefan Frauenknecht Date: Thu, 31 Jan 2013 20:37:55 +0100 Subject: [PATCH 08/24] Use permission 'can_see_orga_items' also to show/hide duration column and agenda time scheduling. (via Emanuel) --- openslides/agenda/models.py | 2 +- .../agenda/templates/agenda/item_row.html | 9 ++- .../agenda/templates/agenda/overview.html | 19 ++++-- openslides/locale/de/LC_MESSAGES/django.mo | Bin 36810 -> 36877 bytes openslides/locale/de/LC_MESSAGES/django.po | 61 +++++++++--------- 5 files changed, 51 insertions(+), 40 deletions(-) diff --git a/openslides/agenda/models.py b/openslides/agenda/models.py index 4e057ab5b..72300d699 100644 --- a/openslides/agenda/models.py +++ b/openslides/agenda/models.py @@ -181,7 +181,7 @@ class Item(MPTTModel, SlideMixin): permissions = ( ('can_see_agenda', ugettext_noop("Can see agenda")), ('can_manage_agenda', ugettext_noop("Can manage agenda")), - ('can_see_orga_items', ugettext_noop("Can see orga items")), + ('can_see_orga_items', ugettext_noop("Can see orga items and time scheduling of agenda")), ) class MPTTMeta: diff --git a/openslides/agenda/templates/agenda/item_row.html b/openslides/agenda/templates/agenda/item_row.html index 89c41aa92..3d644543e 100644 --- a/openslides/agenda/templates/agenda/item_row.html +++ b/openslides/agenda/templates/agenda/item_row.html @@ -25,12 +25,15 @@ {% if perms.agenda.can_manage_agenda %} - {{ item.comment|first_line }} + {{ item.comment|first_line }} + {% endif %} + {% if perms.agenda.can_see_orga_items %} - {{ item.duration|time:"H:i" }} + {% if item.duration %} + {{ item.duration|time:"H:i" }}h + {% endif %} - {% endif %} {% if perms.agenda.can_manage_agenda or perms.projector.can_manage_projector %} diff --git a/openslides/agenda/templates/agenda/overview.html b/openslides/agenda/templates/agenda/overview.html index 110f0e1f7..d815605ff 100644 --- a/openslides/agenda/templates/agenda/overview.html +++ b/openslides/agenda/templates/agenda/overview.html @@ -49,17 +49,20 @@ {% endif %} -

{% trans "Agenda" %}

- +

{% trans "Agenda" %} + {% if perms.agenda.can_see_orga_items %} +

- + - + -
{% trans "Start of event" %}{% trans "Start of event" %}: {{ start|time:"H:i" }}
{% trans "Estimated end" %}{% trans "Estimated end" %}: {{ end|time:"H:i" }}
+ + {% endif %} +

{% trans "Filter" %}: {% trans "Hide closed items" %} @@ -73,7 +76,7 @@ {% if perms.agenda.can_manage_agenda %} {% trans "Comment" %} {% endif %} - {% if perms.agenda.can_manage_agenda %} + {% if perms.agenda.can_see_orga_items %} {% trans "Duration" %} {% endif %} {% if perms.agenda.can_manage_agenda or perms.projector.can_manage_projector %} @@ -90,7 +93,9 @@ {% if perms.agenda.can_manage_agenda %} - {{ duration|time:"H:i" }} + {% endif %} + {% if perms.agenda.can_see_orga_items %} + {{duration|time:"H:i"}}h {% endif %} {% if perms.agenda.can_manage_agenda or perms.projector.can_manage_projector %} diff --git a/openslides/locale/de/LC_MESSAGES/django.mo b/openslides/locale/de/LC_MESSAGES/django.mo index 55f3077b44ed18eec1a3ebb00b378df27c6665d9..c367970c06d1ce431958a49e8a9280fb09dee4c0 100644 GIT binary patch delta 7430 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 No1)mN2F3Th{|DNEp2`3K diff --git a/openslides/locale/de/LC_MESSAGES/django.po b/openslides/locale/de/LC_MESSAGES/django.po index 5377c58f9..c00022f33 100644 --- a/openslides/locale/de/LC_MESSAGES/django.po +++ b/openslides/locale/de/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: OpenSlides 1.x\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-01-30 17:20+0100\n" +"POT-Creation-Date: 2013-01-31 20:14+0100\n" "PO-Revision-Date: 2012-07-28 11:07+0200\n" "Last-Translator: Emanuel Schuetze \n" "Language-Team: support@openslides.de\n" @@ -33,7 +33,11 @@ msgstr "Französisch" msgid "Parent item" msgstr "Elternelement" -#: agenda/forms.py:64 +#: agenda/forms.py:34 agenda/models.py:49 +msgid "Duration (hh:mm)" +msgstr "Dauer (ss:mm)" + +#: agenda/forms.py:69 msgid "Begin of event (hh:mm)" msgstr "Beginn der Veranstaltung (ss:mm)" @@ -56,7 +60,7 @@ msgstr "Titel" msgid "Text" msgstr "Text" -#: agenda/models.py:41 agenda/templates/agenda/overview.html:74 +#: agenda/models.py:41 agenda/templates/agenda/overview.html:77 #: agenda/templates/agenda/view.html:13 participant/models.py:60 #: participant/templates/participant/overview.html:72 #: participant/templates/participant/user_detail.html:45 @@ -67,7 +71,7 @@ msgstr "Kommentar" msgid "Closed" msgstr "Abgeschlossen" -#: agenda/models.py:43 agenda/templates/agenda/overview.html:83 +#: agenda/models.py:43 agenda/templates/agenda/overview.html:86 #: projector/models.py:31 msgid "Weight" msgstr "Gewichtung" @@ -79,10 +83,6 @@ msgstr "Gewichtung" msgid "Type" msgstr "Typ" -#: agenda/models.py:49 -msgid "Duration (hh:mm)" -msgstr "Dauer (ss:mm)" - #: agenda/models.py:182 msgid "Can see agenda" msgstr "Darf die Tagesordnung sehen" @@ -92,25 +92,25 @@ msgid "Can manage agenda" msgstr "Darf die Tagesordung verwalten" #: agenda/models.py:184 -msgid "Can see orga items" -msgstr "Darf Organisationspunkte sehen" +msgid "Can see orga items and time scheduling of agenda" +msgstr "Darf Organisationspunkte und Zeitmanagement der Tagesordnung sehen " -#: agenda/models.py:194 agenda/slides.py:20 agenda/views.py:219 +#: agenda/models.py:192 agenda/slides.py:20 agenda/views.py:219 #: agenda/views.py:220 agenda/views.py:257 agenda/views.py:271 #: agenda/templates/agenda/base_agenda.html:10 #: agenda/templates/agenda/overview.html:8 #: agenda/templates/agenda/overview.html:52 -#: agenda/templates/agenda/overview.html:89 +#: agenda/templates/agenda/overview.html:92 #: agenda/templates/projector/AgendaSummary.html:6 #: agenda/templates/projector/AgendaSummary.html:10 msgid "Agenda" msgstr "Tagesordnung" -#: agenda/views.py:81 +#: agenda/views.py:82 msgid "You are not authorized to manage the agenda." msgstr "Sie sind nicht berechtigt die Tagesordnung zu ändern." -#: agenda/views.py:97 +#: agenda/views.py:98 msgid "Errors when reordering of the agenda" msgstr "Fehler beim Neusortieren der Tagesordnung" @@ -161,12 +161,12 @@ msgstr "Eintrag anzeigen" #: agenda/templates/agenda/base_agenda.html:31 #: agenda/templates/agenda/edit.html:8 agenda/templates/agenda/edit.html:16 -#: agenda/templates/agenda/item_row.html:44 +#: agenda/templates/agenda/item_row.html:47 msgid "Edit item" msgstr "Eintrag bearbeiten" #: agenda/templates/agenda/base_agenda.html:33 -#: agenda/templates/agenda/item_row.html:45 +#: agenda/templates/agenda/item_row.html:48 msgid "Delete item" msgstr "Eintrag löschen" @@ -243,12 +243,12 @@ msgstr "Eintrag als erledigt markieren" msgid "Item closed" msgstr "Eintrag erledigt" -#: agenda/templates/agenda/item_row.html:39 -#: agenda/templates/agenda/overview.html:99 +#: agenda/templates/agenda/item_row.html:42 +#: agenda/templates/agenda/overview.html:104 msgid "Activate item" msgstr "Eintrag projizieren" -#: agenda/templates/agenda/item_row.html:48 +#: agenda/templates/agenda/item_row.html:51 #: agenda/templates/agenda/widget.html:35 msgid "Activate summary for this item" msgstr "Zusammenfassung für diesen Eintrag projizieren" @@ -279,44 +279,44 @@ msgstr "Ja" msgid "No" msgstr "Nein" -#: agenda/templates/agenda/overview.html:55 +#: agenda/templates/agenda/overview.html:56 msgid "Start of event" msgstr "Beginn der Veranstaltung" -#: agenda/templates/agenda/overview.html:59 +#: agenda/templates/agenda/overview.html:60 msgid "Estimated end" msgstr "Voraussichtliches Ende" -#: agenda/templates/agenda/overview.html:64 +#: agenda/templates/agenda/overview.html:67 #: assignment/templates/assignment/overview.html:12 #: motion/templates/motion/overview.html:12 #: participant/templates/participant/overview.html:22 msgid "Filter" msgstr "Filter" -#: agenda/templates/agenda/overview.html:65 +#: agenda/templates/agenda/overview.html:68 msgid "Hide closed items" msgstr "Verstecke abgeschlossene Einträge" -#: agenda/templates/agenda/overview.html:68 +#: agenda/templates/agenda/overview.html:71 msgid "item" msgid_plural "items" msgstr[0] "Eintrag" msgstr[1] "Einträge" -#: agenda/templates/agenda/overview.html:71 +#: agenda/templates/agenda/overview.html:74 msgid "Done" msgstr "Erledigt" -#: agenda/templates/agenda/overview.html:72 +#: agenda/templates/agenda/overview.html:75 msgid "Item" msgstr "Eintrag" -#: agenda/templates/agenda/overview.html:77 +#: agenda/templates/agenda/overview.html:80 msgid "Duration" msgstr "Dauer" -#: agenda/templates/agenda/overview.html:80 +#: agenda/templates/agenda/overview.html:83 #: assignment/templates/assignment/overview.html:28 #: motion/templates/motion/overview.html:43 #: participant/templates/participant/group_overview.html:14 @@ -324,7 +324,7 @@ msgstr "Dauer" msgid "Actions" msgstr "Aktionen" -#: agenda/templates/agenda/overview.html:115 +#: agenda/templates/agenda/overview.html:120 #: agenda/templates/agenda/widget.html:46 #: projector/templates/projector/custom_slide_widget.html:36 msgid "No items available." @@ -2421,6 +2421,9 @@ msgstr "undefinierter-dateiname" msgid "Enter valid JSON" msgstr "Gebe valides JSON ein" +#~ msgid "Can see orga items" +#~ msgstr "Darf Organisationspunkte sehen" + #~ msgid "Visible to all" #~ msgstr "Für alle sichtbar" From d3b679442c36d0aed0030de449f8e061b12be4e5 Mon Sep 17 00:00:00 2001 From: Emanuel Schuetze Date: Fri, 1 Feb 2013 12:55:04 +0100 Subject: [PATCH 09/24] Agenda orga items and time scheduling: Formatting improved. Use permission 'can_see_orga_items' also to show/hide duration column and agenda time scheduling. --- openslides/agenda/forms.py | 4 +- openslides/agenda/models.py | 2 +- openslides/agenda/static/styles/agenda.css | 5 +- .../agenda/templates/agenda/item_row.html | 9 ++- .../agenda/templates/agenda/overview.html | 19 ++++-- .../agenda/templates/agenda/widget.html | 2 +- openslides/locale/de/LC_MESSAGES/django.mo | Bin 36810 -> 36866 bytes openslides/locale/de/LC_MESSAGES/django.po | 62 ++++++++---------- openslides/static/styles/base.css | 1 + 9 files changed, 54 insertions(+), 50 deletions(-) diff --git a/openslides/agenda/forms.py b/openslides/agenda/forms.py index 68983a09f..f87bf1d47 100644 --- a/openslides/agenda/forms.py +++ b/openslides/agenda/forms.py @@ -63,8 +63,8 @@ class ItemOrderForm(forms.Form, CssClassMixin): class ConfigForm(forms.Form, CssClassMixin): agenda_start_event_time = forms.TimeField( - widget=forms.TimeInput(format='%H:%M') , - input_formats=('%H:%M', '%H:%M:%S'), + widget=forms.TimeInput(format='%H:%M'), + input_formats=['%H:%M'], required=False, label=_("Begin of event (hh:mm)"), ) diff --git a/openslides/agenda/models.py b/openslides/agenda/models.py index 288bf1676..525015178 100644 --- a/openslides/agenda/models.py +++ b/openslides/agenda/models.py @@ -181,7 +181,7 @@ class Item(MPTTModel, SlideMixin): permissions = ( ('can_see_agenda', ugettext_noop("Can see agenda")), ('can_manage_agenda', ugettext_noop("Can manage agenda")), - ('can_see_orga_items', ugettext_noop("Can see orga items")), + ('can_see_orga_items', ugettext_noop("Can see orga items and time scheduling of agenda")), ) class MPTTMeta: diff --git a/openslides/agenda/static/styles/agenda.css b/openslides/agenda/static/styles/agenda.css index e6f75636b..b875f9976 100644 --- a/openslides/agenda/static/styles/agenda.css +++ b/openslides/agenda/static/styles/agenda.css @@ -25,6 +25,9 @@ table#menu-overview { table#agendatime { float: right; - width: 15%; + width: 25%; margin-bottom: 1em; +} +table#agendatime td { + padding: 5px; } \ No newline at end of file diff --git a/openslides/agenda/templates/agenda/item_row.html b/openslides/agenda/templates/agenda/item_row.html index 89c41aa92..208e66bbf 100644 --- a/openslides/agenda/templates/agenda/item_row.html +++ b/openslides/agenda/templates/agenda/item_row.html @@ -20,17 +20,20 @@ {% if perms.agenda.can_manage_agenda %}

{% endif %} - {{ item }} + {% if item.type == "org" %}[{% endif %}{{ item }}{% if item.type == "org" %}]{% endif %} {{ item.get_title_supplement|safe }} {% if perms.agenda.can_manage_agenda %} {{ item.comment|first_line }} + {% endif %} + {% if perms.agenda.can_see_orga_items %} - {{ item.duration|time:"H:i" }} + {% if item.duration %} + {{ item.duration|time:"H:i" }}h + {% endif %} - {% endif %} {% if perms.agenda.can_manage_agenda or perms.projector.can_manage_projector %} diff --git a/openslides/agenda/templates/agenda/overview.html b/openslides/agenda/templates/agenda/overview.html index 110f0e1f7..d815605ff 100644 --- a/openslides/agenda/templates/agenda/overview.html +++ b/openslides/agenda/templates/agenda/overview.html @@ -49,17 +49,20 @@ {% endif %} -

{% trans "Agenda" %}

- +

{% trans "Agenda" %} + {% if perms.agenda.can_see_orga_items %} +

- + - + -
{% trans "Start of event" %}{% trans "Start of event" %}: {{ start|time:"H:i" }}
{% trans "Estimated end" %}{% trans "Estimated end" %}: {{ end|time:"H:i" }}
+ + {% endif %} +

{% trans "Filter" %}: {% trans "Hide closed items" %} @@ -73,7 +76,7 @@ {% if perms.agenda.can_manage_agenda %} {% trans "Comment" %} {% endif %} - {% if perms.agenda.can_manage_agenda %} + {% if perms.agenda.can_see_orga_items %} {% trans "Duration" %} {% endif %} {% if perms.agenda.can_manage_agenda or perms.projector.can_manage_projector %} @@ -90,7 +93,9 @@ {% if perms.agenda.can_manage_agenda %} - {{ duration|time:"H:i" }} + {% endif %} + {% if perms.agenda.can_see_orga_items %} + {{duration|time:"H:i"}}h {% endif %} {% if perms.agenda.can_manage_agenda or perms.projector.can_manage_projector %} diff --git a/openslides/agenda/templates/agenda/widget.html b/openslides/agenda/templates/agenda/widget.html index b1dc4bdd2..e1b8644a7 100644 --- a/openslides/agenda/templates/agenda/widget.html +++ b/openslides/agenda/templates/agenda/widget.html @@ -39,7 +39,7 @@ {% for p in item.get_ancestors %}   {% endfor %} - {{ item }} + {% if item.type == "org" %}[{% endif %}{{ item }}{% if item.type == "org" %}]{% endif %} {{ item.get_title_supplement|safe }} {% empty %} diff --git a/openslides/locale/de/LC_MESSAGES/django.mo b/openslides/locale/de/LC_MESSAGES/django.mo index 55f3077b44ed18eec1a3ebb00b378df27c6665d9..fe5e93edf9f33a9b538a1797f04bf0138f3e3916 100644 GIT binary patch delta 7394 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 J^(|i3>i@{`tkeJi delta 7345 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 PrC(98p9W`*U)=ovzpkLy diff --git a/openslides/locale/de/LC_MESSAGES/django.po b/openslides/locale/de/LC_MESSAGES/django.po index 5377c58f9..5e6a6c3b1 100644 --- a/openslides/locale/de/LC_MESSAGES/django.po +++ b/openslides/locale/de/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: OpenSlides 1.x\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-01-30 17:20+0100\n" +"POT-Creation-Date: 2013-01-30 21:40+0100\n" "PO-Revision-Date: 2012-07-28 11:07+0200\n" "Last-Translator: Emanuel Schuetze \n" "Language-Team: support@openslides.de\n" @@ -33,9 +33,13 @@ msgstr "Französisch" msgid "Parent item" msgstr "Elternelement" -#: agenda/forms.py:64 +#: agenda/forms.py:34 agenda/models.py:49 +msgid "Duration (hh:mm)" +msgstr "Dauer (hh:mm)" + +#: agenda/forms.py:69 msgid "Begin of event (hh:mm)" -msgstr "Beginn der Veranstaltung (ss:mm)" +msgstr "Beginn der Veranstaltung (hh:mm)" #: agenda/models.py:35 msgid "Agenda item" @@ -56,7 +60,7 @@ msgstr "Titel" msgid "Text" msgstr "Text" -#: agenda/models.py:41 agenda/templates/agenda/overview.html:74 +#: agenda/models.py:41 agenda/templates/agenda/overview.html:77 #: agenda/templates/agenda/view.html:13 participant/models.py:60 #: participant/templates/participant/overview.html:72 #: participant/templates/participant/user_detail.html:45 @@ -67,7 +71,7 @@ msgstr "Kommentar" msgid "Closed" msgstr "Abgeschlossen" -#: agenda/models.py:43 agenda/templates/agenda/overview.html:83 +#: agenda/models.py:43 agenda/templates/agenda/overview.html:86 #: projector/models.py:31 msgid "Weight" msgstr "Gewichtung" @@ -79,10 +83,6 @@ msgstr "Gewichtung" msgid "Type" msgstr "Typ" -#: agenda/models.py:49 -msgid "Duration (hh:mm)" -msgstr "Dauer (ss:mm)" - #: agenda/models.py:182 msgid "Can see agenda" msgstr "Darf die Tagesordnung sehen" @@ -92,15 +92,15 @@ msgid "Can manage agenda" msgstr "Darf die Tagesordung verwalten" #: agenda/models.py:184 -msgid "Can see orga items" -msgstr "Darf Organisationspunkte sehen" +msgid "Can see orga items and time scheduling of agenda" +msgstr "Darf Organisationspunkte und Tagesordnung-Zeitplan sehen" #: agenda/models.py:194 agenda/slides.py:20 agenda/views.py:219 #: agenda/views.py:220 agenda/views.py:257 agenda/views.py:271 #: agenda/templates/agenda/base_agenda.html:10 #: agenda/templates/agenda/overview.html:8 #: agenda/templates/agenda/overview.html:52 -#: agenda/templates/agenda/overview.html:89 +#: agenda/templates/agenda/overview.html:92 #: agenda/templates/projector/AgendaSummary.html:6 #: agenda/templates/projector/AgendaSummary.html:10 msgid "Agenda" @@ -161,12 +161,12 @@ msgstr "Eintrag anzeigen" #: agenda/templates/agenda/base_agenda.html:31 #: agenda/templates/agenda/edit.html:8 agenda/templates/agenda/edit.html:16 -#: agenda/templates/agenda/item_row.html:44 +#: agenda/templates/agenda/item_row.html:47 msgid "Edit item" msgstr "Eintrag bearbeiten" #: agenda/templates/agenda/base_agenda.html:33 -#: agenda/templates/agenda/item_row.html:45 +#: agenda/templates/agenda/item_row.html:48 msgid "Delete item" msgstr "Eintrag löschen" @@ -243,12 +243,12 @@ msgstr "Eintrag als erledigt markieren" msgid "Item closed" msgstr "Eintrag erledigt" -#: agenda/templates/agenda/item_row.html:39 -#: agenda/templates/agenda/overview.html:99 +#: agenda/templates/agenda/item_row.html:42 +#: agenda/templates/agenda/overview.html:104 msgid "Activate item" msgstr "Eintrag projizieren" -#: agenda/templates/agenda/item_row.html:48 +#: agenda/templates/agenda/item_row.html:51 #: agenda/templates/agenda/widget.html:35 msgid "Activate summary for this item" msgstr "Zusammenfassung für diesen Eintrag projizieren" @@ -279,44 +279,44 @@ msgstr "Ja" msgid "No" msgstr "Nein" -#: agenda/templates/agenda/overview.html:55 +#: agenda/templates/agenda/overview.html:56 msgid "Start of event" msgstr "Beginn der Veranstaltung" -#: agenda/templates/agenda/overview.html:59 +#: agenda/templates/agenda/overview.html:60 msgid "Estimated end" msgstr "Voraussichtliches Ende" -#: agenda/templates/agenda/overview.html:64 +#: agenda/templates/agenda/overview.html:67 #: assignment/templates/assignment/overview.html:12 #: motion/templates/motion/overview.html:12 #: participant/templates/participant/overview.html:22 msgid "Filter" msgstr "Filter" -#: agenda/templates/agenda/overview.html:65 +#: agenda/templates/agenda/overview.html:68 msgid "Hide closed items" msgstr "Verstecke abgeschlossene Einträge" -#: agenda/templates/agenda/overview.html:68 +#: agenda/templates/agenda/overview.html:71 msgid "item" msgid_plural "items" msgstr[0] "Eintrag" msgstr[1] "Einträge" -#: agenda/templates/agenda/overview.html:71 +#: agenda/templates/agenda/overview.html:74 msgid "Done" msgstr "Erledigt" -#: agenda/templates/agenda/overview.html:72 +#: agenda/templates/agenda/overview.html:75 msgid "Item" msgstr "Eintrag" -#: agenda/templates/agenda/overview.html:77 +#: agenda/templates/agenda/overview.html:80 msgid "Duration" msgstr "Dauer" -#: agenda/templates/agenda/overview.html:80 +#: agenda/templates/agenda/overview.html:83 #: assignment/templates/assignment/overview.html:28 #: motion/templates/motion/overview.html:43 #: participant/templates/participant/group_overview.html:14 @@ -324,7 +324,7 @@ msgstr "Dauer" msgid "Actions" msgstr "Aktionen" -#: agenda/templates/agenda/overview.html:115 +#: agenda/templates/agenda/overview.html:120 #: agenda/templates/agenda/widget.html:46 #: projector/templates/projector/custom_slide_widget.html:36 msgid "No items available." @@ -2421,11 +2421,3 @@ msgstr "undefinierter-dateiname" msgid "Enter valid JSON" msgstr "Gebe valides JSON ein" -#~ msgid "Visible to all" -#~ msgstr "Für alle sichtbar" - -#~ msgid "Moderators only" -#~ msgstr "Nur für Moderatoren" - -#~ msgid "Visibility" -#~ msgstr "Sichtbarkeit" diff --git a/openslides/static/styles/base.css b/openslides/static/styles/base.css index 6cbc8b5bf..31fa40882 100644 --- a/openslides/static/styles/base.css +++ b/openslides/static/styles/base.css @@ -318,6 +318,7 @@ input[type="submit"], input[type="button"] { } #id_permissions, #id_users { height: 310px; + width: 412px; } .button { border: 1px solid #D3D3D3; From 9f3dae80596bde9477081785f2ec1e0fb719ad67 Mon Sep 17 00:00:00 2001 From: Stefan Frauenknecht Date: Fri, 1 Feb 2013 14:47:51 +0100 Subject: [PATCH 10/24] ConfigForm: Base classes reordered --- openslides/agenda/forms.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openslides/agenda/forms.py b/openslides/agenda/forms.py index f87bf1d47..ffa933f54 100644 --- a/openslides/agenda/forms.py +++ b/openslides/agenda/forms.py @@ -61,7 +61,7 @@ class ItemOrderForm(forms.Form, CssClassMixin): widget=forms.HiddenInput(attrs={'class': 'menu-plid'}), ) -class ConfigForm(forms.Form, CssClassMixin): +class ConfigForm(CssClassMixin, forms.Form): agenda_start_event_time = forms.TimeField( widget=forms.TimeInput(format='%H:%M'), input_formats=['%H:%M'], From 7f03e02e9a0928405cf2f2d3f14335421f4b9592 Mon Sep 17 00:00:00 2001 From: Stefan Frauenknecht Date: Fri, 1 Feb 2013 15:13:40 +0100 Subject: [PATCH 11/24] Item type changed from CharField to IntegerField. Constant type names added. --- openslides/agenda/models.py | 13 ++++++++----- openslides/agenda/slides.py | 2 +- openslides/agenda/templates/agenda/item_row.html | 2 +- openslides/agenda/templates/agenda/widget.html | 2 +- openslides/agenda/views.py | 4 ++-- 5 files changed, 13 insertions(+), 10 deletions(-) diff --git a/openslides/agenda/models.py b/openslides/agenda/models.py index 72300d699..60395e730 100644 --- a/openslides/agenda/models.py +++ b/openslides/agenda/models.py @@ -31,10 +31,13 @@ class Item(MPTTModel, SlideMixin): """ prefix = 'item' + AGENDA_ITEM = 1 + ORGANIZATIONAL_ITEM = 2 + ITEM_TYPE = ( - ('agd', _('Agenda item')), - ('org', _('Organizational item')), - ) + (AGENDA_ITEM, _('Agenda item')), + (ORGANIZATIONAL_ITEM, _('Organizational item')), + ) title = models.CharField(null=True, max_length=255, verbose_name=_("Title")) text = models.TextField(null=True, blank=True, verbose_name=_("Text")) @@ -43,8 +46,8 @@ class Item(MPTTModel, SlideMixin): weight = models.IntegerField(default=0, verbose_name=_("Weight")) parent = TreeForeignKey('self', null=True, blank=True, related_name='children') - type = models.CharField(max_length=3, choices=ITEM_TYPE, - default='agd', verbose_name=_("Type")) + type = models.IntegerField(max_length=1, choices=ITEM_TYPE, + default=AGENDA_ITEM, verbose_name=_("Type")) duration = models.TimeField(blank=True, null=True, verbose_name=_("Duration (hh:mm)")); diff --git a/openslides/agenda/slides.py b/openslides/agenda/slides.py index f5b544b1d..51acb35c2 100644 --- a/openslides/agenda/slides.py +++ b/openslides/agenda/slides.py @@ -16,7 +16,7 @@ from django.utils.translation import ugettext as _ def agenda_show(): from openslides.agenda.models import Item data = {} - items = Item.objects.filter(parent=None, type__exact='agd') + items = Item.objects.filter(parent=None, type__exact=Item.AGENDA_ITEM) data['title'] = _("Agenda") data['items'] = items data['template'] = 'projector/AgendaSummary.html' diff --git a/openslides/agenda/templates/agenda/item_row.html b/openslides/agenda/templates/agenda/item_row.html index a7943b6cf..edadcdbe1 100644 --- a/openslides/agenda/templates/agenda/item_row.html +++ b/openslides/agenda/templates/agenda/item_row.html @@ -20,7 +20,7 @@ {% if perms.agenda.can_manage_agenda %}

{% endif %} - {% if item.type == "org" %}[{% endif %}{{ item }}{% if item.type == "org" %}]{% endif %} + {% if item.type == item.ORGANIZATIONAL_ITEM %}[{% endif %}{{ item }}{% if item.type == item.ORGANIZATIONAL_ITEM %}]{% endif %} {{ item.get_title_supplement|safe }} {% if perms.agenda.can_manage_agenda %} diff --git a/openslides/agenda/templates/agenda/widget.html b/openslides/agenda/templates/agenda/widget.html index e1b8644a7..32c44bca8 100644 --- a/openslides/agenda/templates/agenda/widget.html +++ b/openslides/agenda/templates/agenda/widget.html @@ -39,7 +39,7 @@ {% for p in item.get_ancestors %}   {% endfor %} - {% if item.type == "org" %}[{% endif %}{{ item }}{% if item.type == "org" %}]{% endif %} + {% if item.type == item.ORGANIZATIONAL_ITEM %}[{% endif %}{{ item }}{% if item.type == item.ORGANIZATIONAL_ITEM %}]{% endif %} {{ item.get_title_supplement|safe }} {% empty %} diff --git a/openslides/agenda/views.py b/openslides/agenda/views.py index 954868ba2..7ce1ca831 100644 --- a/openslides/agenda/views.py +++ b/openslides/agenda/views.py @@ -47,7 +47,7 @@ class Overview(TemplateView): if self.request.user.has_perm('agenda.can_see_orga_items'): items = Item.objects.all() else: - items = Item.objects.filter(type__exact = 'agd') + items = Item.objects.filter(type__exact=Item.AGENDA_ITEM) duration = timedelta() @@ -220,7 +220,7 @@ class AgendaPDF(PDFView): document_title = ugettext_lazy('Agenda') def append_to_pdf(self, story): - for item in Item.objects.filter(type__exact = 'agd'): + for item in Item.objects.filter(type__exact=Item.AGENDA_ITEM): ancestors = item.get_ancestors() if ancestors: space = " " * 6 * ancestors.count() From d6084f7c8bb94a2f173092ba4e89977ce5fb3150 Mon Sep 17 00:00:00 2001 From: Stefan Frauenknecht Date: Tue, 5 Feb 2013 16:36:57 +0100 Subject: [PATCH 12/24] Create items with duration loger than 23:59. Show start and end date. Duration has tooltip showing end date and time. --- openslides/agenda/forms.py | 17 +- openslides/agenda/models.py | 2 +- .../javascript/ui/jquery-ui-1.10.0.min.js | 5 + .../javascript/ui/jquery-ui-sliderAccess.js | 89 + .../ui/jquery-ui-timepicker-addon.js | 1919 +++++++++++++++++ .../agenda/static/styles/timepicker.css | 11 + .../agenda/templates/agenda/config.html | 61 + .../agenda/templates/agenda/item_row.html | 4 +- .../agenda/templates/agenda/overview.html | 8 +- openslides/agenda/views.py | 28 +- openslides/locale/de/LC_MESSAGES/django.mo | Bin 36866 -> 38259 bytes openslides/locale/de/LC_MESSAGES/django.po | 274 ++- openslides/locale/de/LC_MESSAGES/djangojs.mo | Bin 460 -> 460 bytes openslides/locale/de/LC_MESSAGES/djangojs.po | 2 +- 14 files changed, 2349 insertions(+), 71 deletions(-) create mode 100644 openslides/agenda/static/javascript/ui/jquery-ui-1.10.0.min.js create mode 100644 openslides/agenda/static/javascript/ui/jquery-ui-sliderAccess.js create mode 100644 openslides/agenda/static/javascript/ui/jquery-ui-timepicker-addon.js create mode 100644 openslides/agenda/static/styles/timepicker.css diff --git a/openslides/agenda/forms.py b/openslides/agenda/forms.py index ffa933f54..77c3dbe83 100644 --- a/openslides/agenda/forms.py +++ b/openslides/agenda/forms.py @@ -12,13 +12,14 @@ from django import forms from django.utils.translation import ugettext_lazy as _ - +from django.contrib.admin.widgets import AdminTimeWidget from mptt.forms import TreeNodeChoiceField from openslides.utils.forms import CssClassMixin from openslides.agenda.models import Item +import re class ItemForm(forms.ModelForm, CssClassMixin): """ @@ -27,9 +28,10 @@ class ItemForm(forms.ModelForm, CssClassMixin): parent = TreeNodeChoiceField( queryset=Item.objects.all(), label=_("Parent item"), required=False) - duration = forms.TimeField( - widget=forms.TimeInput(format='%H:%M') , - input_formats=('%H:%M', '%H %M'), + duration = forms.RegexField( + regex=re.compile('[0-99]:[0-5][0-9]'), + error_message=_("Invalid format. Hours from 0 to 99 and minutes from 00 to 59"), + max_length=5, required=False, label=_("Duration (hh:mm)") ) @@ -62,9 +64,8 @@ class ItemOrderForm(forms.Form, CssClassMixin): ) class ConfigForm(CssClassMixin, forms.Form): - agenda_start_event_time = forms.TimeField( - widget=forms.TimeInput(format='%H:%M'), - input_formats=['%H:%M'], + agenda_start_event_date_time = forms.CharField( + widget=forms.DateTimeInput(format='%d.%m.%Y %H:%M'), required=False, - label=_("Begin of event (hh:mm)"), + label=_("Begin of event") ) diff --git a/openslides/agenda/models.py b/openslides/agenda/models.py index 60395e730..8f74d8339 100644 --- a/openslides/agenda/models.py +++ b/openslides/agenda/models.py @@ -49,7 +49,7 @@ class Item(MPTTModel, SlideMixin): type = models.IntegerField(max_length=1, choices=ITEM_TYPE, default=AGENDA_ITEM, verbose_name=_("Type")) - duration = models.TimeField(blank=True, null=True, verbose_name=_("Duration (hh:mm)")); + duration = models.CharField(null=True, blank=True, max_length=5, verbose_name=_("Duration (hh:mm)")) related_sid = models.CharField(null=True, blank=True, max_length=63) diff --git a/openslides/agenda/static/javascript/ui/jquery-ui-1.10.0.min.js b/openslides/agenda/static/javascript/ui/jquery-ui-1.10.0.min.js new file mode 100644 index 000000000..b15bcf647 --- /dev/null +++ b/openslides/agenda/static/javascript/ui/jquery-ui-1.10.0.min.js @@ -0,0 +1,5 @@ +/*! jQuery UI - v1.10.0 - 2013-01-17 +* http://jqueryui.com +* Includes: jquery.ui.core.js, jquery.ui.widget.js, jquery.ui.mouse.js, jquery.ui.draggable.js, jquery.ui.droppable.js, jquery.ui.resizable.js, jquery.ui.selectable.js, jquery.ui.sortable.js, jquery.ui.effect.js, jquery.ui.accordion.js, jquery.ui.autocomplete.js, jquery.ui.button.js, jquery.ui.datepicker.js, jquery.ui.dialog.js, jquery.ui.effect-blind.js, jquery.ui.effect-bounce.js, jquery.ui.effect-clip.js, jquery.ui.effect-drop.js, jquery.ui.effect-explode.js, jquery.ui.effect-fade.js, jquery.ui.effect-fold.js, jquery.ui.effect-highlight.js, jquery.ui.effect-pulsate.js, jquery.ui.effect-scale.js, jquery.ui.effect-shake.js, jquery.ui.effect-slide.js, jquery.ui.effect-transfer.js, jquery.ui.menu.js, jquery.ui.position.js, jquery.ui.progressbar.js, jquery.ui.slider.js, jquery.ui.spinner.js, jquery.ui.tabs.js, jquery.ui.tooltip.js +* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */ +(function(e,t){function i(t,n){var r,i,o,u=t.nodeName.toLowerCase();return"area"===u?(r=t.parentNode,i=r.name,!t.href||!i||r.nodeName.toLowerCase()!=="map"?!1:(o=e("img[usemap=#"+i+"]")[0],!!o&&s(o))):(/input|select|textarea|button|object/.test(u)?!t.disabled:"a"===u?t.href||n:n)&&s(t)}function s(t){return e.expr.filters.visible(t)&&!e(t).parents().addBack().filter(function(){return e.css(this,"visibility")==="hidden"}).length}var n=0,r=/^ui-id-\d+$/;e.ui=e.ui||{};if(e.ui.version)return;e.extend(e.ui,{version:"1.10.0",keyCode:{BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38}}),e.fn.extend({_focus:e.fn.focus,focus:function(t,n){return typeof t=="number"?this.each(function(){var r=this;setTimeout(function(){e(r).focus(),n&&n.call(r)},t)}):this._focus.apply(this,arguments)},scrollParent:function(){var t;return e.ui.ie&&/(static|relative)/.test(this.css("position"))||/absolute/.test(this.css("position"))?t=this.parents().filter(function(){return/(relative|absolute|fixed)/.test(e.css(this,"position"))&&/(auto|scroll)/.test(e.css(this,"overflow")+e.css(this,"overflow-y")+e.css(this,"overflow-x"))}).eq(0):t=this.parents().filter(function(){return/(auto|scroll)/.test(e.css(this,"overflow")+e.css(this,"overflow-y")+e.css(this,"overflow-x"))}).eq(0),/fixed/.test(this.css("position"))||!t.length?e(document):t},zIndex:function(n){if(n!==t)return this.css("zIndex",n);if(this.length){var r=e(this[0]),i,s;while(r.length&&r[0]!==document){i=r.css("position");if(i==="absolute"||i==="relative"||i==="fixed"){s=parseInt(r.css("zIndex"),10);if(!isNaN(s)&&s!==0)return s}r=r.parent()}}return 0},uniqueId:function(){return this.each(function(){this.id||(this.id="ui-id-"+ ++n)})},removeUniqueId:function(){return this.each(function(){r.test(this.id)&&e(this).removeAttr("id")})}}),e.extend(e.expr[":"],{data:e.expr.createPseudo?e.expr.createPseudo(function(t){return function(n){return!!e.data(n,t)}}):function(t,n,r){return!!e.data(t,r[3])},focusable:function(t){return i(t,!isNaN(e.attr(t,"tabindex")))},tabbable:function(t){var n=e.attr(t,"tabindex"),r=isNaN(n);return(r||n>=0)&&i(t,!r)}}),e("").outerWidth(1).jquery||e.each(["Width","Height"],function(n,r){function u(t,n,r,s){return e.each(i,function(){n-=parseFloat(e.css(t,"padding"+this))||0,r&&(n-=parseFloat(e.css(t,"border"+this+"Width"))||0),s&&(n-=parseFloat(e.css(t,"margin"+this))||0)}),n}var i=r==="Width"?["Left","Right"]:["Top","Bottom"],s=r.toLowerCase(),o={innerWidth:e.fn.innerWidth,innerHeight:e.fn.innerHeight,outerWidth:e.fn.outerWidth,outerHeight:e.fn.outerHeight};e.fn["inner"+r]=function(n){return n===t?o["inner"+r].call(this):this.each(function(){e(this).css(s,u(this,n)+"px")})},e.fn["outer"+r]=function(t,n){return typeof t!="number"?o["outer"+r].call(this,t):this.each(function(){e(this).css(s,u(this,t,!0,n)+"px")})}}),e.fn.addBack||(e.fn.addBack=function(e){return this.add(e==null?this.prevObject:this.prevObject.filter(e))}),e("").data("a-b","a").removeData("a-b").data("a-b")&&(e.fn.removeData=function(t){return function(n){return arguments.length?t.call(this,e.camelCase(n)):t.call(this)}}(e.fn.removeData)),e.ui.ie=!!/msie [\w.]+/.exec(navigator.userAgent.toLowerCase()),e.support.selectstart="onselectstart"in document.createElement("div"),e.fn.extend({disableSelection:function(){return this.bind((e.support.selectstart?"selectstart":"mousedown")+".ui-disableSelection",function(e){e.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}}),e.extend(e.ui,{plugin:{add:function(t,n,r){var i,s=e.ui[t].prototype;for(i in r)s.plugins[i]=s.plugins[i]||[],s.plugins[i].push([n,r[i]])},call:function(e,t,n){var r,i=e.plugins[t];if(!i||!e.element[0].parentNode||e.element[0].parentNode.nodeType===11)return;for(r=0;r0?!0:(t[r]=1,i=t[r]>0,t[r]=0,i)}})})(jQuery),function(e,t){var n=0,r=Array.prototype.slice,i=e.cleanData;e.cleanData=function(t){for(var n=0,r;(r=t[n])!=null;n++)try{e(r).triggerHandler("remove")}catch(s){}i(t)},e.widget=function(t,n,r){var i,s,o,u,a={},f=t.split(".")[0];t=t.split(".")[1],i=f+"-"+t,r||(r=n,n=e.Widget),e.expr[":"][i.toLowerCase()]=function(t){return!!e.data(t,i)},e[f]=e[f]||{},s=e[f][t],o=e[f][t]=function(e,t){if(!this._createWidget)return new o(e,t);arguments.length&&this._createWidget(e,t)},e.extend(o,s,{version:r.version,_proto:e.extend({},r),_childConstructors:[]}),u=new n,u.options=e.widget.extend({},u.options),e.each(r,function(t,r){if(!e.isFunction(r)){a[t]=r;return}a[t]=function(){var e=function(){return n.prototype[t].apply(this,arguments)},i=function(e){return n.prototype[t].apply(this,e)};return function(){var t=this._super,n=this._superApply,s;return this._super=e,this._superApply=i,s=r.apply(this,arguments),this._super=t,this._superApply=n,s}}()}),o.prototype=e.widget.extend(u,{widgetEventPrefix:s?u.widgetEventPrefix:t},a,{constructor:o,namespace:f,widgetName:t,widgetFullName:i}),s?(e.each(s._childConstructors,function(t,n){var r=n.prototype;e.widget(r.namespace+"."+r.widgetName,o,n._proto)}),delete s._childConstructors):n._childConstructors.push(o),e.widget.bridge(t,o)},e.widget.extend=function(n){var i=r.call(arguments,1),s=0,o=i.length,u,a;for(;s",options:{disabled:!1,create:null},_createWidget:function(t,r){r=e(r||this.defaultElement||this)[0],this.element=e(r),this.uuid=n++,this.eventNamespace="."+this.widgetName+this.uuid,this.options=e.widget.extend({},this.options,this._getCreateOptions(),t),this.bindings=e(),this.hoverable=e(),this.focusable=e(),r!==this&&(e.data(r,this.widgetFullName,this),this._on(!0,this.element,{remove:function(e){e.target===r&&this.destroy()}}),this.document=e(r.style?r.ownerDocument:r.document||r),this.window=e(this.document[0].defaultView||this.document[0].parentWindow)),this._create(),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:e.noop,_getCreateEventData:e.noop,_create:e.noop,_init:e.noop,destroy:function(){this._destroy(),this.element.unbind(this.eventNamespace).removeData(this.widgetName).removeData(this.widgetFullName).removeData(e.camelCase(this.widgetFullName)),this.widget().unbind(this.eventNamespace).removeAttr("aria-disabled").removeClass(this.widgetFullName+"-disabled "+"ui-state-disabled"),this.bindings.unbind(this.eventNamespace),this.hoverable.removeClass("ui-state-hover"),this.focusable.removeClass("ui-state-focus")},_destroy:e.noop,widget:function(){return this.element},option:function(n,r){var i=n,s,o,u;if(arguments.length===0)return e.widget.extend({},this.options);if(typeof n=="string"){i={},s=n.split("."),n=s.shift();if(s.length){o=i[n]=e.widget.extend({},this.options[n]);for(u=0;u=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}})}(jQuery),function(e,t){e.widget("ui.draggable",e.ui.mouse,{version:"1.10.0",widgetEventPrefix:"drag",options:{addClasses:!0,appendTo:"parent",axis:!1,connectToSortable:!1,containment:!1,cursor:"auto",cursorAt:!1,grid:!1,handle:!1,helper:"original",iframeFix:!1,opacity:!1,refreshPositions:!1,revert:!1,revertDuration:500,scope:"default",scroll:!0,scrollSensitivity:20,scrollSpeed:20,snap:!1,snapMode:"both",snapTolerance:20,stack:!1,zIndex:!1,drag:null,start:null,stop:null},_create:function(){this.options.helper==="original"&&!/^(?:r|a|f)/.test(this.element.css("position"))&&(this.element[0].style.position="relative"),this.options.addClasses&&this.element.addClass("ui-draggable"),this.options.disabled&&this.element.addClass("ui-draggable-disabled"),this._mouseInit()},_destroy:function(){this.element.removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled"),this._mouseDestroy()},_mouseCapture:function(t){var n=this.options;return this.helper||n.disabled||e(t.target).closest(".ui-resizable-handle").length>0?!1:(this.handle=this._getHandle(t),this.handle?(e(n.iframeFix===!0?"iframe":n.iframeFix).each(function(){e("
").css({width:this.offsetWidth+"px",height:this.offsetHeight+"px",position:"absolute",opacity:"0.001",zIndex:1e3}).css(e(this).offset()).appendTo("body")}),!0):!1)},_mouseStart:function(t){var n=this.options;return this.helper=this._createHelper(t),this.helper.addClass("ui-draggable-dragging"),this._cacheHelperProportions(),e.ui.ddmanager&&(e.ui.ddmanager.current=this),this._cacheMargins(),this.cssPosition=this.helper.css("position"),this.scrollParent=this.helper.scrollParent(),this.offset=this.positionAbs=this.element.offset(),this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left},e.extend(this.offset,{click:{left:t.pageX-this.offset.left,top:t.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()}),this.originalPosition=this.position=this._generatePosition(t),this.originalPageX=t.pageX,this.originalPageY=t.pageY,n.cursorAt&&this._adjustOffsetFromHelper(n.cursorAt),n.containment&&this._setContainment(),this._trigger("start",t)===!1?(this._clear(),!1):(this._cacheHelperProportions(),e.ui.ddmanager&&!n.dropBehaviour&&e.ui.ddmanager.prepareOffsets(this,t),this._mouseDrag(t,!0),e.ui.ddmanager&&e.ui.ddmanager.dragStart(this,t),!0)},_mouseDrag:function(t,n){this.position=this._generatePosition(t),this.positionAbs=this._convertPositionTo("absolute");if(!n){var r=this._uiHash();if(this._trigger("drag",t,r)===!1)return this._mouseUp({}),!1;this.position=r.position}if(!this.options.axis||this.options.axis!=="y")this.helper[0].style.left=this.position.left+"px";if(!this.options.axis||this.options.axis!=="x")this.helper[0].style.top=this.position.top+"px";return e.ui.ddmanager&&e.ui.ddmanager.drag(this,t),!1},_mouseStop:function(t){var n,r=this,i=!1,s=!1;e.ui.ddmanager&&!this.options.dropBehaviour&&(s=e.ui.ddmanager.drop(this,t)),this.dropped&&(s=this.dropped,this.dropped=!1),n=this.element[0];while(n&&(n=n.parentNode))n===document&&(i=!0);return!i&&this.options.helper==="original"?!1:(this.options.revert==="invalid"&&!s||this.options.revert==="valid"&&s||this.options.revert===!0||e.isFunction(this.options.revert)&&this.options.revert.call(this.element,s)?e(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,10),function(){r._trigger("stop",t)!==!1&&r._clear()}):this._trigger("stop",t)!==!1&&this._clear(),!1)},_mouseUp:function(t){return e("div.ui-draggable-iframeFix").each(function(){this.parentNode.removeChild(this)}),e.ui.ddmanager&&e.ui.ddmanager.dragStop(this,t),e.ui.mouse.prototype._mouseUp.call(this,t)},cancel:function(){return this.helper.is(".ui-draggable-dragging")?this._mouseUp({}):this._clear(),this},_getHandle:function(t){var n=!this.options.handle||!e(this.options.handle,this.element).length?!0:!1;return e(this.options.handle,this.element).find("*").addBack().each(function(){this===t.target&&(n=!0)}),n},_createHelper:function(t){var n=this.options,r=e.isFunction(n.helper)?e(n.helper.apply(this.element[0],[t])):n.helper==="clone"?this.element.clone().removeAttr("id"):this.element;return r.parents("body").length||r.appendTo(n.appendTo==="parent"?this.element[0].parentNode:n.appendTo),r[0]!==this.element[0]&&!/(fixed|absolute)/.test(r.css("position"))&&r.css("position","absolute"),r},_adjustOffsetFromHelper:function(t){typeof t=="string"&&(t=t.split(" ")),e.isArray(t)&&(t={left:+t[0],top:+t[1]||0}),"left"in t&&(this.offset.click.left=t.left+this.margins.left),"right"in t&&(this.offset.click.left=this.helperProportions.width-t.right+this.margins.left),"top"in t&&(this.offset.click.top=t.top+this.margins.top),"bottom"in t&&(this.offset.click.top=this.helperProportions.height-t.bottom+this.margins.top)},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var t=this.offsetParent.offset();this.cssPosition==="absolute"&&this.scrollParent[0]!==document&&e.contains(this.scrollParent[0],this.offsetParent[0])&&(t.left+=this.scrollParent.scrollLeft(),t.top+=this.scrollParent.scrollTop());if(this.offsetParent[0]===document.body||this.offsetParent[0].tagName&&this.offsetParent[0].tagName.toLowerCase()==="html"&&e.ui.ie)t={top:0,left:0};return{top:t.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:t.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if(this.cssPosition==="relative"){var e=this.element.position();return{top:e.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:e.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.element.css("marginLeft"),10)||0,top:parseInt(this.element.css("marginTop"),10)||0,right:parseInt(this.element.css("marginRight"),10)||0,bottom:parseInt(this.element.css("marginBottom"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var t,n,r,i=this.options;i.containment==="parent"&&(i.containment=this.helper[0].parentNode);if(i.containment==="document"||i.containment==="window")this.containment=[i.containment==="document"?0:e(window).scrollLeft()-this.offset.relative.left-this.offset.parent.left,i.containment==="document"?0:e(window).scrollTop()-this.offset.relative.top-this.offset.parent.top,(i.containment==="document"?0:e(window).scrollLeft())+e(i.containment==="document"?document:window).width()-this.helperProportions.width-this.margins.left,(i.containment==="document"?0:e(window).scrollTop())+(e(i.containment==="document"?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top];if(!/^(document|window|parent)$/.test(i.containment)&&i.containment.constructor!==Array){n=e(i.containment),r=n[0];if(!r)return;t=e(r).css("overflow")!=="hidden",this.containment=[(parseInt(e(r).css("borderLeftWidth"),10)||0)+(parseInt(e(r).css("paddingLeft"),10)||0),(parseInt(e(r).css("borderTopWidth"),10)||0)+(parseInt(e(r).css("paddingTop"),10)||0),(t?Math.max(r.scrollWidth,r.offsetWidth):r.offsetWidth)-(parseInt(e(r).css("borderLeftWidth"),10)||0)-(parseInt(e(r).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left-this.margins.right,(t?Math.max(r.scrollHeight,r.offsetHeight):r.offsetHeight)-(parseInt(e(r).css("borderTopWidth"),10)||0)-(parseInt(e(r).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top-this.margins.bottom],this.relative_container=n}else i.containment.constructor===Array&&(this.containment=i.containment)},_convertPositionTo:function(t,n){n||(n=this.position);var r=t==="absolute"?1:-1,i=this.cssPosition!=="absolute"||this.scrollParent[0]!==document&&!!e.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,s=/(html|body)/i.test(i[0].tagName);return{top:n.top+this.offset.relative.top*r+this.offset.parent.top*r-(this.cssPosition==="fixed"?-this.scrollParent.scrollTop():s?0:i.scrollTop())*r,left:n.left+this.offset.relative.left*r+this.offset.parent.left*r-(this.cssPosition==="fixed"?-this.scrollParent.scrollLeft():s?0:i.scrollLeft())*r}},_generatePosition:function(t){var n,r,i,s,o=this.options,u=this.cssPosition!=="absolute"||this.scrollParent[0]!==document&&!!e.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,a=/(html|body)/i.test(u[0].tagName),f=t.pageX,l=t.pageY;return this.originalPosition&&(this.containment&&(this.relative_container?(r=this.relative_container.offset(),n=[this.containment[0]+r.left,this.containment[1]+r.top,this.containment[2]+r.left,this.containment[3]+r.top]):n=this.containment,t.pageX-this.offset.click.leftn[2]&&(f=n[2]+this.offset.click.left),t.pageY-this.offset.click.top>n[3]&&(l=n[3]+this.offset.click.top)),o.grid&&(i=o.grid[1]?this.originalPageY+Math.round((l-this.originalPageY)/o.grid[1])*o.grid[1]:this.originalPageY,l=n?i-this.offset.click.top>=n[1]||i-this.offset.click.top>n[3]?i:i-this.offset.click.top>=n[1]?i-o.grid[1]:i+o.grid[1]:i,s=o.grid[0]?this.originalPageX+Math.round((f-this.originalPageX)/o.grid[0])*o.grid[0]:this.originalPageX,f=n?s-this.offset.click.left>=n[0]||s-this.offset.click.left>n[2]?s:s-this.offset.click.left>=n[0]?s-o.grid[0]:s+o.grid[0]:s)),{top:l-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+(this.cssPosition==="fixed"?-this.scrollParent.scrollTop():a?0:u.scrollTop()),left:f-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+(this.cssPosition==="fixed"?-this.scrollParent.scrollLeft():a?0:u.scrollLeft())}},_clear:function(){this.helper.removeClass("ui-draggable-dragging"),this.helper[0]!==this.element[0]&&!this.cancelHelperRemoval&&this.helper.remove(),this.helper=null,this.cancelHelperRemoval=!1},_trigger:function(t,n,r){return r=r||this._uiHash(),e.ui.plugin.call(this,t,[n,r]),t==="drag"&&(this.positionAbs=this._convertPositionTo("absolute")),e.Widget.prototype._trigger.call(this,t,n,r)},plugins:{},_uiHash:function(){return{helper:this.helper,position:this.position,originalPosition:this.originalPosition,offset:this.positionAbs}}}),e.ui.plugin.add("draggable","connectToSortable",{start:function(t,n){var r=e(this).data("ui-draggable"),i=r.options,s=e.extend({},n,{item:r.element});r.sortables=[],e(i.connectToSortable).each(function(){var n=e.data(this,"ui-sortable");n&&!n.options.disabled&&(r.sortables.push({instance:n,shouldRevert:n.options.revert}),n.refreshPositions(),n._trigger("activate",t,s))})},stop:function(t,n){var r=e(this).data("ui-draggable"),i=e.extend({},n,{item:r.element});e.each(r.sortables,function(){this.instance.isOver?(this.instance.isOver=0,r.cancelHelperRemoval=!0,this.instance.cancelHelperRemoval=!1,this.shouldRevert&&(this.instance.options.revert=!0),this.instance._mouseStop(t),this.instance.options.helper=this.instance.options._helper,r.options.helper==="original"&&this.instance.currentItem.css({top:"auto",left:"auto"})):(this.instance.cancelHelperRemoval=!1,this.instance._trigger("deactivate",t,i))})},drag:function(t,n){var r=e(this).data("ui-draggable"),i=this;e.each(r.sortables,function(){var s=!1,o=this;this.instance.positionAbs=r.positionAbs,this.instance.helperProportions=r.helperProportions,this.instance.offset.click=r.offset.click,this.instance._intersectsWith(this.instance.containerCache)&&(s=!0,e.each(r.sortables,function(){return this.instance.positionAbs=r.positionAbs,this.instance.helperProportions=r.helperProportions,this.instance.offset.click=r.offset.click,this!==o&&this.instance._intersectsWith(this.instance.containerCache)&&e.ui.contains(o.instance.element[0],this.instance.element[0])&&(s=!1),s})),s?(this.instance.isOver||(this.instance.isOver=1,this.instance.currentItem=e(i).clone().removeAttr("id").appendTo(this.instance.element).data("ui-sortable-item",!0),this.instance.options._helper=this.instance.options.helper,this.instance.options.helper=function(){return n.helper[0]},t.target=this.instance.currentItem[0],this.instance._mouseCapture(t,!0),this.instance._mouseStart(t,!0,!0),this.instance.offset.click.top=r.offset.click.top,this.instance.offset.click.left=r.offset.click.left,this.instance.offset.parent.left-=r.offset.parent.left-this.instance.offset.parent.left,this.instance.offset.parent.top-=r.offset.parent.top-this.instance.offset.parent.top,r._trigger("toSortable",t),r.dropped=this.instance.element,r.currentItem=r.element,this.instance.fromOutside=r),this.instance.currentItem&&this.instance._mouseDrag(t)):this.instance.isOver&&(this.instance.isOver=0,this.instance.cancelHelperRemoval=!0,this.instance.options.revert=!1,this.instance._trigger("out",t,this.instance._uiHash(this.instance)),this.instance._mouseStop(t,!0),this.instance.options.helper=this.instance.options._helper,this.instance.currentItem.remove(),this.instance.placeholder&&this.instance.placeholder.remove(),r._trigger("fromSortable",t),r.dropped=!1)})}}),e.ui.plugin.add("draggable","cursor",{start:function(){var t=e("body"),n=e(this).data("ui-draggable").options;t.css("cursor")&&(n._cursor=t.css("cursor")),t.css("cursor",n.cursor)},stop:function(){var t=e(this).data("ui-draggable").options;t._cursor&&e("body").css("cursor",t._cursor)}}),e.ui.plugin.add("draggable","opacity",{start:function(t,n){var r=e(n.helper),i=e(this).data("ui-draggable").options;r.css("opacity")&&(i._opacity=r.css("opacity")),r.css("opacity",i.opacity)},stop:function(t,n){var r=e(this).data("ui-draggable").options;r._opacity&&e(n.helper).css("opacity",r._opacity)}}),e.ui.plugin.add("draggable","scroll",{start:function(){var t=e(this).data("ui-draggable");t.scrollParent[0]!==document&&t.scrollParent[0].tagName!=="HTML"&&(t.overflowOffset=t.scrollParent.offset())},drag:function(t){var n=e(this).data("ui-draggable"),r=n.options,i=!1;if(n.scrollParent[0]!==document&&n.scrollParent[0].tagName!=="HTML"){if(!r.axis||r.axis!=="x")n.overflowOffset.top+n.scrollParent[0].offsetHeight-t.pageY=0;c--){u=p.snapElements[c].left,a=u+p.snapElements[c].width,f=p.snapElements[c].top,l=f+p.snapElements[c].height;if(!(u-vt&&e=h&&a<=p||f>=h&&f<=p||ap)&&(o>=l&&o<=c||u>=l&&u<=c||oc);default:return!1}},e.ui.ddmanager={current:null,droppables:{"default":[]},prepareOffsets:function(t,n){var r,i,s=e.ui.ddmanager.droppables[t.options.scope]||[],o=n?n.type:null,u=(t.currentItem||t.element).find(":data(ui-droppable)").addBack();e:for(r=0;r").css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),this.element=this.element.parent().data("ui-resizable",this.element.data("ui-resizable")),this.elementIsWrapper=!0,this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")}),this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0}),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css({margin:this.originalElement.css("margin")}),this._proportionallyResize()),this.handles=u.handles||(e(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se");if(this.handles.constructor===String){this.handles==="all"&&(this.handles="n,e,s,w,se,sw,ne,nw"),t=this.handles.split(","),this.handles={};for(n=0;n"),i.css({zIndex:u.zIndex}),"se"===r&&i.addClass("ui-icon ui-icon-gripsmall-diagonal-se"),this.handles[r]=".ui-resizable-"+r,this.element.append(i)}this._renderAxis=function(t){var n,r,i,s;t=t||this.element;for(n in this.handles){this.handles[n].constructor===String&&(this.handles[n]=e(this.handles[n],this.element).show()),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)&&(r=e(this.handles[n],this.element),s=/sw|ne|nw|se|n|s/.test(n)?r.outerHeight():r.outerWidth(),i=["padding",/ne|nw|n/.test(n)?"Top":/se|sw|s/.test(n)?"Bottom":/^e$/.test(n)?"Right":"Left"].join(""),t.css(i,s),this._proportionallyResize());if(!e(this.handles[n]).length)continue}},this._renderAxis(this.element),this._handles=e(".ui-resizable-handle",this.element).disableSelection(),this._handles.mouseover(function(){o.resizing||(this.className&&(i=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),o.axis=i&&i[1]?i[1]:"se")}),u.autoHide&&(this._handles.hide(),e(this.element).addClass("ui-resizable-autohide").mouseenter(function(){if(u.disabled)return;e(this).removeClass("ui-resizable-autohide"),o._handles.show()}).mouseleave(function(){if(u.disabled)return;o.resizing||(e(this).addClass("ui-resizable-autohide"),o._handles.hide())})),this._mouseInit()},_destroy:function(){this._mouseDestroy();var t,n=function(t){e(t).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").removeData("ui-resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};return this.elementIsWrapper&&(n(this.element),t=this.element,this.originalElement.css({position:t.css("position"),width:t.outerWidth(),height:t.outerHeight(),top:t.css("top"),left:t.css("left")}).insertAfter(t),t.remove()),this.originalElement.css("resize",this.originalResizeStyle),n(this.originalElement),this},_mouseCapture:function(t){var n,r,i=!1;for(n in this.handles){r=e(this.handles[n])[0];if(r===t.target||e.contains(r,t.target))i=!0}return!this.options.disabled&&i},_mouseStart:function(t){var r,i,s,o=this.options,u=this.element.position(),a=this.element;return this.resizing=!0,/absolute/.test(a.css("position"))?a.css({position:"absolute",top:a.css("top"),left:a.css("left")}):a.is(".ui-draggable")&&a.css({position:"absolute",top:u.top,left:u.left}),this._renderProxy(),r=n(this.helper.css("left")),i=n(this.helper.css("top")),o.containment&&(r+=e(o.containment).scrollLeft()||0,i+=e(o.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:r,top:i},this.size=this._helper?{width:a.outerWidth(),height:a.outerHeight()}:{width:a.width(),height:a.height()},this.originalSize=this._helper?{width:a.outerWidth(),height:a.outerHeight()}:{width:a.width(),height:a.height()},this.originalPosition={left:r,top:i},this.sizeDiff={width:a.outerWidth()-a.width(),height:a.outerHeight()-a.height()},this.originalMousePosition={left:t.pageX,top:t.pageY},this.aspectRatio=typeof o.aspectRatio=="number"?o.aspectRatio:this.originalSize.width/this.originalSize.height||1,s=e(".ui-resizable-"+this.axis).css("cursor"),e("body").css("cursor",s==="auto"?this.axis+"-resize":s),a.addClass("ui-resizable-resizing"),this._propagate("start",t),!0},_mouseDrag:function(t){var n,r=this.helper,i={},s=this.originalMousePosition,o=this.axis,u=this.position.top,a=this.position.left,f=this.size.width,l=this.size.height,c=t.pageX-s.left||0,h=t.pageY-s.top||0,p=this._change[o];if(!p)return!1;n=p.apply(this,[t,c,h]),this._updateVirtualBoundaries(t.shiftKey);if(this._aspectRatio||t.shiftKey)n=this._updateRatio(n,t);return n=this._respectSize(n,t),this._updateCache(n),this._propagate("resize",t),this.position.top!==u&&(i.top=this.position.top+"px"),this.position.left!==a&&(i.left=this.position.left+"px"),this.size.width!==f&&(i.width=this.size.width+"px"),this.size.height!==l&&(i.height=this.size.height+"px"),r.css(i),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),e.isEmptyObject(i)||this._trigger("resize",t,this.ui()),!1},_mouseStop:function(t){this.resizing=!1;var n,r,i,s,o,u,a,f=this.options,l=this;return this._helper&&(n=this._proportionallyResizeElements,r=n.length&&/textarea/i.test(n[0].nodeName),i=r&&e.ui.hasScroll(n[0],"left")?0:l.sizeDiff.height,s=r?0:l.sizeDiff.width,o={width:l.helper.width()-s,height:l.helper.height()-i},u=parseInt(l.element.css("left"),10)+(l.position.left-l.originalPosition.left)||null,a=parseInt(l.element.css("top"),10)+(l.position.top-l.originalPosition.top)||null,f.animate||this.element.css(e.extend(o,{top:a,left:u})),l.helper.height(l.size.height),l.helper.width(l.size.width),this._helper&&!f.animate&&this._proportionallyResize()),e("body").css("cursor","auto"),this.element.removeClass("ui-resizable-resizing"),this._propagate("stop",t),this._helper&&this.helper.remove(),!1},_updateVirtualBoundaries:function(e){var t,n,i,s,o,u=this.options;o={minWidth:r(u.minWidth)?u.minWidth:0,maxWidth:r(u.maxWidth)?u.maxWidth:Infinity,minHeight:r(u.minHeight)?u.minHeight:0,maxHeight:r(u.maxHeight)?u.maxHeight:Infinity};if(this._aspectRatio||e)t=o.minHeight*this.aspectRatio,i=o.minWidth/this.aspectRatio,n=o.maxHeight*this.aspectRatio,s=o.maxWidth/this.aspectRatio,t>o.minWidth&&(o.minWidth=t),i>o.minHeight&&(o.minHeight=i),ne.width,u=r(e.height)&&t.minHeight&&t.minHeight>e.height,a=this.originalPosition.left+this.originalSize.width,f=this.position.top+this.size.height,l=/sw|nw|w/.test(n),c=/nw|ne|n/.test(n);return o&&(e.width=t.minWidth),u&&(e.height=t.minHeight),i&&(e.width=t.maxWidth),s&&(e.height=t.maxHeight),o&&l&&(e.left=a-t.minWidth),i&&l&&(e.left=a-t.maxWidth),u&&c&&(e.top=f-t.minHeight),s&&c&&(e.top=f-t.maxHeight),!e.width&&!e.height&&!e.left&&e.top?e.top=null:!e.width&&!e.height&&!e.top&&e.left&&(e.left=null),e},_proportionallyResize:function(){if(!this._proportionallyResizeElements.length)return;var e,t,n,r,i,s=this.helper||this.element;for(e=0;e"),this.helper.addClass(this._helper).css({width:this.element.outerWidth()-1,height:this.element.outerHeight()-1,position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++n.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element},_change:{e:function(e,t){return{width:this.originalSize.width+t}},w:function(e,t){var n=this.originalSize,r=this.originalPosition;return{left:r.left+t,width:n.width-t}},n:function(e,t,n){var r=this.originalSize,i=this.originalPosition;return{top:i.top+n,height:r.height-n}},s:function(e,t,n){return{height:this.originalSize.height+n}},se:function(t,n,r){return e.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[t,n,r]))},sw:function(t,n,r){return e.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[t,n,r]))},ne:function(t,n,r){return e.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[t,n,r]))},nw:function(t,n,r){return e.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[t,n,r]))}},_propagate:function(t,n){e.ui.plugin.call(this,t,[n,this.ui()]),t!=="resize"&&this._trigger(t,n,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),e.ui.plugin.add("resizable","animate",{stop:function(t){var n=e(this).data("ui-resizable"),r=n.options,i=n._proportionallyResizeElements,s=i.length&&/textarea/i.test(i[0].nodeName),o=s&&e.ui.hasScroll(i[0],"left")?0:n.sizeDiff.height,u=s?0:n.sizeDiff.width,a={width:n.size.width-u,height:n.size.height-o},f=parseInt(n.element.css("left"),10)+(n.position.left-n.originalPosition.left)||null,l=parseInt(n.element.css("top"),10)+(n.position.top-n.originalPosition.top)||null;n.element.animate(e.extend(a,l&&f?{top:l,left:f}:{}),{duration:r.animateDuration,easing:r.animateEasing,step:function(){var r={width:parseInt(n.element.css("width"),10),height:parseInt(n.element.css("height"),10),top:parseInt(n.element.css("top"),10),left:parseInt(n.element.css("left"),10)};i&&i.length&&e(i[0]).css({width:r.width,height:r.height}),n._updateCache(r),n._propagate("resize",t)}})}}),e.ui.plugin.add("resizable","containment",{start:function(){var t,r,i,s,o,u,a,f=e(this).data("ui-resizable"),l=f.options,c=f.element,h=l.containment,p=h instanceof e?h.get(0):/parent/.test(h)?c.parent().get(0):h;if(!p)return;f.containerElement=e(p),/document/.test(h)||h===document?(f.containerOffset={left:0,top:0},f.containerPosition={left:0,top:0},f.parentData={element:e(document),left:0,top:0,width:e(document).width(),height:e(document).height()||document.body.parentNode.scrollHeight}):(t=e(p),r=[],e(["Top","Right","Left","Bottom"]).each(function(e,i){r[e]=n(t.css("padding"+i))}),f.containerOffset=t.offset(),f.containerPosition=t.position(),f.containerSize={height:t.innerHeight()-r[3],width:t.innerWidth()-r[1]},i=f.containerOffset,s=f.containerSize.height,o=f.containerSize.width,u=e.ui.hasScroll(p,"left")?p.scrollWidth:o,a=e.ui.hasScroll(p)?p.scrollHeight:s,f.parentData={element:p,left:i.left,top:i.top,width:u,height:a})},resize:function(t){var n,r,i,s,o=e(this).data("ui-resizable"),u=o.options,a=o.containerOffset,f=o.position,l=o._aspectRatio||t.shiftKey,c={top:0,left:0},h=o.containerElement;h[0]!==document&&/static/.test(h.css("position"))&&(c=a),f.left<(o._helper?a.left:0)&&(o.size.width=o.size.width+(o._helper?o.position.left-a.left:o.position.left-c.left),l&&(o.size.height=o.size.width/o.aspectRatio),o.position.left=u.helper?a.left:0),f.top<(o._helper?a.top:0)&&(o.size.height=o.size.height+(o._helper?o.position.top-a.top:o.position.top),l&&(o.size.width=o.size.height*o.aspectRatio),o.position.top=o._helper?a.top:0),o.offset.left=o.parentData.left+o.position.left,o.offset.top=o.parentData.top+o.position.top,n=Math.abs((o._helper?o.offset.left-c.left:o.offset.left-c.left)+o.sizeDiff.width),r=Math.abs((o._helper?o.offset.top-c.top:o.offset.top-a.top)+o.sizeDiff.height),i=o.containerElement.get(0)===o.element.parent().get(0),s=/relative|absolute/.test(o.containerElement.css("position")),i&&s&&(n-=o.parentData.left),n+o.size.width>=o.parentData.width&&(o.size.width=o.parentData.width-n,l&&(o.size.height=o.size.width/o.aspectRatio)),r+o.size.height>=o.parentData.height&&(o.size.height=o.parentData.height-r,l&&(o.size.width=o.size.height*o.aspectRatio))},stop:function(){var t=e(this).data("ui-resizable"),n=t.options,r=t.containerOffset,i=t.containerPosition,s=t.containerElement,o=e(t.helper),u=o.offset(),a=o.outerWidth()-t.sizeDiff.width,f=o.outerHeight()-t.sizeDiff.height;t._helper&&!n.animate&&/relative/.test(s.css("position"))&&e(this).css({left:u.left-i.left-r.left,width:a,height:f}),t._helper&&!n.animate&&/static/.test(s.css("position"))&&e(this).css({left:u.left-i.left-r.left,width:a,height:f})}}),e.ui.plugin.add("resizable","alsoResize",{start:function(){var t=e(this).data("ui-resizable"),n=t.options,r=function(t){e(t).each(function(){var t=e(this);t.data("ui-resizable-alsoresize",{width:parseInt(t.width(),10),height:parseInt(t.height(),10),left:parseInt(t.css("left"),10),top:parseInt(t.css("top"),10)})})};typeof n.alsoResize=="object"&&!n.alsoResize.parentNode?n.alsoResize.length?(n.alsoResize=n.alsoResize[0],r(n.alsoResize)):e.each(n.alsoResize,function(e){r(e)}):r(n.alsoResize)},resize:function(t,n){var r=e(this).data("ui-resizable"),i=r.options,s=r.originalSize,o=r.originalPosition,u={height:r.size.height-s.height||0,width:r.size.width-s.width||0,top:r.position.top-o.top||0,left:r.position.left-o.left||0},a=function(t,r){e(t).each(function(){var t=e(this),i=e(this).data("ui-resizable-alsoresize"),s={},o=r&&r.length?r:t.parents(n.originalElement[0]).length?["width","height"]:["width","height","top","left"];e.each(o,function(e,t){var n=(i[t]||0)+(u[t]||0);n&&n>=0&&(s[t]=n||null)}),t.css(s)})};typeof i.alsoResize=="object"&&!i.alsoResize.nodeType?e.each(i.alsoResize,function(e,t){a(e,t)}):a(i.alsoResize)},stop:function(){e(this).removeData("resizable-alsoresize")}}),e.ui.plugin.add("resizable","ghost",{start:function(){var t=e(this).data("ui-resizable"),n=t.options,r=t.size;t.ghost=t.originalElement.clone(),t.ghost.css({opacity:.25,display:"block",position:"relative",height:r.height,width:r.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass(typeof n.ghost=="string"?n.ghost:""),t.ghost.appendTo(t.helper)},resize:function(){var t=e(this).data("ui-resizable");t.ghost&&t.ghost.css({position:"relative",height:t.size.height,width:t.size.width})},stop:function(){var t=e(this).data("ui-resizable");t.ghost&&t.helper&&t.helper.get(0).removeChild(t.ghost.get(0))}}),e.ui.plugin.add("resizable","grid",{resize:function(){var t=e(this).data("ui-resizable"),n=t.options,r=t.size,i=t.originalSize,s=t.originalPosition,o=t.axis,u=typeof n.grid=="number"?[n.grid,n.grid]:n.grid,a=u[0]||1,f=u[1]||1,l=Math.round((r.width-i.width)/a)*a,c=Math.round((r.height-i.height)/f)*f,h=i.width+l,p=i.height+c,d=n.maxWidth&&n.maxWidthh,g=n.minHeight&&n.minHeight>p;n.grid=u,m&&(h+=a),g&&(p+=f),d&&(h-=a),v&&(p-=f),/^(se|s|e)$/.test(o)?(t.size.width=h,t.size.height=p):/^(ne)$/.test(o)?(t.size.width=h,t.size.height=p,t.position.top=s.top-c):/^(sw)$/.test(o)?(t.size.width=h,t.size.height=p,t.position.left=s.left-l):(t.size.width=h,t.size.height=p,t.position.top=s.top-c,t.position.left=s.left-l)}})}(jQuery),function(e,t){e.widget("ui.selectable",e.ui.mouse,{version:"1.10.0",options:{appendTo:"body",autoRefresh:!0,distance:0,filter:"*",tolerance:"touch",selected:null,selecting:null,start:null,stop:null,unselected:null,unselecting:null},_create:function(){var t,n=this;this.element.addClass("ui-selectable"),this.dragged=!1,this.refresh=function(){t=e(n.options.filter,n.element[0]),t.addClass("ui-selectee"),t.each(function(){var t=e(this),n=t.offset();e.data(this,"selectable-item",{element:this,$element:t,left:n.left,top:n.top,right:n.left+t.outerWidth(),bottom:n.top+t.outerHeight(),startselected:!1,selected:t.hasClass("ui-selected"),selecting:t.hasClass("ui-selecting"),unselecting:t.hasClass("ui-unselecting")})})},this.refresh(),this.selectees=t.addClass("ui-selectee"),this._mouseInit(),this.helper=e("
")},_destroy:function(){this.selectees.removeClass("ui-selectee").removeData("selectable-item"),this.element.removeClass("ui-selectable ui-selectable-disabled"),this._mouseDestroy()},_mouseStart:function(t){var n=this,r=this.options;this.opos=[t.pageX,t.pageY];if(this.options.disabled)return;this.selectees=e(r.filter,this.element[0]),this._trigger("start",t),e(r.appendTo).append(this.helper),this.helper.css({left:t.pageX,top:t.pageY,width:0,height:0}),r.autoRefresh&&this.refresh(),this.selectees.filter(".ui-selected").each(function(){var r=e.data(this,"selectable-item");r.startselected=!0,!t.metaKey&&!t.ctrlKey&&(r.$element.removeClass("ui-selected"),r.selected=!1,r.$element.addClass("ui-unselecting"),r.unselecting=!0,n._trigger("unselecting",t,{unselecting:r.element}))}),e(t.target).parents().addBack().each(function(){var r,i=e.data(this,"selectable-item");if(i)return r=!t.metaKey&&!t.ctrlKey||!i.$element.hasClass("ui-selected"),i.$element.removeClass(r?"ui-unselecting":"ui-selected").addClass(r?"ui-selecting":"ui-unselecting"),i.unselecting=!r,i.selecting=r,i.selected=r,r?n._trigger("selecting",t,{selecting:i.element}):n._trigger("unselecting",t,{unselecting:i.element}),!1})},_mouseDrag:function(t){this.dragged=!0;if(this.options.disabled)return;var n,r=this,i=this.options,s=this.opos[0],o=this.opos[1],u=t.pageX,a=t.pageY;return s>u&&(n=u,u=s,s=n),o>a&&(n=a,a=o,o=n),this.helper.css({left:s,top:o,width:u-s,height:a-o}),this.selectees.each(function(){var n=e.data(this,"selectable-item"),f=!1;if(!n||n.element===r.element[0])return;i.tolerance==="touch"?f=!(n.left>u||n.righta||n.bottoms&&n.righto&&n.bottomt&&e *",opacity:!1,placeholder:!1,revert:!1,scroll:!0,scrollSensitivity:20,scrollSpeed:20,scope:"default",tolerance:"intersect",zIndex:1e3,activate:null,beforeStop:null,change:null,deactivate:null,out:null,over:null,receive:null,remove:null,sort:null,start:null,stop:null,update:null},_create:function(){var e=this.options;this.containerCache={},this.element.addClass("ui-sortable"),this.refresh(),this.floating=this.items.length?e.axis==="x"||/left|right/.test(this.items[0].item.css("float"))||/inline|table-cell/.test(this.items[0].item.css("display")):!1,this.offset=this.element.offset(),this._mouseInit(),this.ready=!0},_destroy:function(){this.element.removeClass("ui-sortable ui-sortable-disabled"),this._mouseDestroy();for(var e=this.items.length-1;e>=0;e--)this.items[e].item.removeData(this.widgetName+"-item");return this},_setOption:function(t,n){t==="disabled"?(this.options[t]=n,this.widget().toggleClass("ui-sortable-disabled",!!n)):e.Widget.prototype._setOption.apply(this,arguments)},_mouseCapture:function(t,n){var r=null,i=!1,s=this;if(this.reverting)return!1;if(this.options.disabled||this.options.type==="static")return!1;this._refreshItems(t),e(t.target).parents().each(function(){if(e.data(this,s.widgetName+"-item")===s)return r=e(this),!1}),e.data(t.target,s.widgetName+"-item")===s&&(r=e(t.target));if(!r)return!1;if(this.options.handle&&!n){e(this.options.handle,r).find("*").addBack().each(function(){this===t.target&&(i=!0)});if(!i)return!1}return this.currentItem=r,this._removeCurrentsFromItems(),!0},_mouseStart:function(t,n,r){var i,s=this.options;this.currentContainer=this,this.refreshPositions(),this.helper=this._createHelper(t),this._cacheHelperProportions(),this._cacheMargins(),this.scrollParent=this.helper.scrollParent(),this.offset=this.currentItem.offset(),this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left},e.extend(this.offset,{click:{left:t.pageX-this.offset.left,top:t.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()}),this.helper.css("position","absolute"),this.cssPosition=this.helper.css("position"),this.originalPosition=this._generatePosition(t),this.originalPageX=t.pageX,this.originalPageY=t.pageY,s.cursorAt&&this._adjustOffsetFromHelper(s.cursorAt),this.domPosition={prev:this.currentItem.prev()[0],parent:this.currentItem.parent()[0]},this.helper[0]!==this.currentItem[0]&&this.currentItem.hide(),this._createPlaceholder(),s.containment&&this._setContainment(),s.cursor&&(e("body").css("cursor")&&(this._storedCursor=e("body").css("cursor")),e("body").css("cursor",s.cursor)),s.opacity&&(this.helper.css("opacity")&&(this._storedOpacity=this.helper.css("opacity")),this.helper.css("opacity",s.opacity)),s.zIndex&&(this.helper.css("zIndex")&&(this._storedZIndex=this.helper.css("zIndex")),this.helper.css("zIndex",s.zIndex)),this.scrollParent[0]!==document&&this.scrollParent[0].tagName!=="HTML"&&(this.overflowOffset=this.scrollParent.offset()),this._trigger("start",t,this._uiHash()),this._preserveHelperProportions||this._cacheHelperProportions();if(!r)for(i=this.containers.length-1;i>=0;i--)this.containers[i]._trigger("activate",t,this._uiHash(this));return e.ui.ddmanager&&(e.ui.ddmanager.current=this),e.ui.ddmanager&&!s.dropBehaviour&&e.ui.ddmanager.prepareOffsets(this,t),this.dragging=!0,this.helper.addClass("ui-sortable-helper"),this._mouseDrag(t),!0},_mouseDrag:function(t){var n,r,i,s,o=this.options,u=!1;this.position=this._generatePosition(t),this.positionAbs=this._convertPositionTo("absolute"),this.lastPositionAbs||(this.lastPositionAbs=this.positionAbs),this.options.scroll&&(this.scrollParent[0]!==document&&this.scrollParent[0].tagName!=="HTML"?(this.overflowOffset.top+this.scrollParent[0].offsetHeight-t.pageY=0;n--){r=this.items[n],i=r.item[0],s=this._intersectsWithPointer(r);if(!s)continue;if(r.instance!==this.currentContainer)continue;if(i!==this.currentItem[0]&&this.placeholder[s===1?"next":"prev"]()[0]!==i&&!e.contains(this.placeholder[0],i)&&(this.options.type==="semi-dynamic"?!e.contains(this.element[0],i):!0)){this.direction=s===1?"down":"up";if(this.options.tolerance!=="pointer"&&!this._intersectsWithSides(r))break;this._rearrange(t,r),this._trigger("change",t,this._uiHash());break}}return this._contactContainers(t),e.ui.ddmanager&&e.ui.ddmanager.drag(this,t),this._trigger("sort",t,this._uiHash()),this.lastPositionAbs=this.positionAbs,!1},_mouseStop:function(t,n){if(!t)return;e.ui.ddmanager&&!this.options.dropBehaviour&&e.ui.ddmanager.drop(this,t);if(this.options.revert){var r=this,i=this.placeholder.offset();this.reverting=!0,e(this.helper).animate({left:i.left-this.offset.parent.left-this.margins.left+(this.offsetParent[0]===document.body?0:this.offsetParent[0].scrollLeft),top:i.top-this.offset.parent.top-this.margins.top+(this.offsetParent[0]===document.body?0:this.offsetParent[0].scrollTop)},parseInt(this.options.revert,10)||500,function(){r._clear(t)})}else this._clear(t,n);return!1},cancel:function(){if(this.dragging){this._mouseUp({target:null}),this.options.helper==="original"?this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper"):this.currentItem.show();for(var t=this.containers.length-1;t>=0;t--)this.containers[t]._trigger("deactivate",null,this._uiHash(this)),this.containers[t].containerCache.over&&(this.containers[t]._trigger("out",null,this._uiHash(this)),this.containers[t].containerCache.over=0)}return this.placeholder&&(this.placeholder[0].parentNode&&this.placeholder[0].parentNode.removeChild(this.placeholder[0]),this.options.helper!=="original"&&this.helper&&this.helper[0].parentNode&&this.helper.remove(),e.extend(this,{helper:null,dragging:!1,reverting:!1,_noFinalSort:null}),this.domPosition.prev?e(this.domPosition.prev).after(this.currentItem):e(this.domPosition.parent).prepend(this.currentItem)),this},serialize:function(t){var n=this._getItemsAsjQuery(t&&t.connected),r=[];return t=t||{},e(n).each(function(){var n=(e(t.item||this).attr(t.attribute||"id")||"").match(t.expression||/(.+)[\-=_](.+)/);n&&r.push((t.key||n[1]+"[]")+"="+(t.key&&t.expression?n[1]:n[2]))}),!r.length&&t.key&&r.push(t.key+"="),r.join("&")},toArray:function(t){var n=this._getItemsAsjQuery(t&&t.connected),r=[];return t=t||{},n.each(function(){r.push(e(t.item||this).attr(t.attribute||"id")||"")}),r},_intersectsWith:function(e){var t=this.positionAbs.left,n=t+this.helperProportions.width,r=this.positionAbs.top,i=r+this.helperProportions.height,s=e.left,o=s+e.width,u=e.top,a=u+e.height,f=this.offset.click.top,l=this.offset.click.left,c=r+f>u&&r+fs&&t+le[this.floating?"width":"height"]?c:s0?"down":"up")},_getDragHorizontalDirection:function(){var e=this.positionAbs.left-this.lastPositionAbs.left;return e!==0&&(e>0?"right":"left")},refresh:function(e){return this._refreshItems(e),this.refreshPositions(),this},_connectWith:function(){var e=this.options;return e.connectWith.constructor===String?[e.connectWith]:e.connectWith},_getItemsAsjQuery:function(t){var n,r,i,s,o=[],u=[],a=this._connectWith();if(a&&t)for(n=a.length-1;n>=0;n--){i=e(a[n]);for(r=i.length-1;r>=0;r--)s=e.data(i[r],this.widgetFullName),s&&s!==this&&!s.options.disabled&&u.push([e.isFunction(s.options.items)?s.options.items.call(s.element):e(s.options.items,s.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),s])}u.push([e.isFunction(this.options.items)?this.options.items.call(this.element,null,{options:this.options,item:this.currentItem}):e(this.options.items,this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),this]);for(n=u.length-1;n>=0;n--)u[n][0].each(function(){o.push(this)});return e(o)},_removeCurrentsFromItems:function(){var t=this.currentItem.find(":data("+this.widgetName+"-item)");this.items=e.grep(this.items,function(e){for(var n=0;n=0;n--){i=e(h[n]);for(r=i.length-1;r>=0;r--)s=e.data(i[r],this.widgetFullName),s&&s!==this&&!s.options.disabled&&(c.push([e.isFunction(s.options.items)?s.options.items.call(s.element[0],t,{item:this.currentItem}):e(s.options.items,s.element),s]),this.containers.push(s))}for(n=c.length-1;n>=0;n--){o=c[n][1],u=c[n][0];for(r=0,f=u.length;r=0;n--){r=this.items[n];if(r.instance!==this.currentContainer&&this.currentContainer&&r.item[0]!==this.currentItem[0])continue;i=this.options.toleranceElement?e(this.options.toleranceElement,r.item):r.item,t||(r.width=i.outerWidth(),r.height=i.outerHeight()),s=i.offset(),r.left=s.left,r.top=s.top}if(this.options.custom&&this.options.custom.refreshContainers)this.options.custom.refreshContainers.call(this);else for(n=this.containers.length-1;n>=0;n--)s=this.containers[n].element.offset(),this.containers[n].containerCache.left=s.left,this.containers[n].containerCache.top=s.top,this.containers[n].containerCache.width=this.containers[n].element.outerWidth(),this.containers[n].containerCache.height=this.containers[n].element.outerHeight();return this},_createPlaceholder:function(t){t=t||this;var n,r=t.options;if(!r.placeholder||r.placeholder.constructor===String)n=r.placeholder,r.placeholder={element:function(){var r=e(document.createElement(t.currentItem[0].nodeName)).addClass(n||t.currentItem[0].className+" ui-sortable-placeholder").removeClass("ui-sortable-helper")[0];return n||(r.style.visibility="hidden"),r},update:function(e,i){if(n&&!r.forcePlaceholderSize)return;i.height()||i.height(t.currentItem.innerHeight()-parseInt(t.currentItem.css("paddingTop")||0,10)-parseInt(t.currentItem.css("paddingBottom")||0,10)),i.width()||i.width(t.currentItem.innerWidth()-parseInt(t.currentItem.css("paddingLeft")||0,10)-parseInt(t.currentItem.css("paddingRight")||0,10))}};t.placeholder=e(r.placeholder.element.call(t.element,t.currentItem)),t.currentItem.after(t.placeholder),r.placeholder.update(t,t.placeholder)},_contactContainers:function(t){var n,r,i,s,o,u,a,f,l,c=null,h=null;for(n=this.containers.length-1;n>=0;n--){if(e.contains(this.currentItem[0],this.containers[n].element[0]))continue;if(this._intersectsWith(this.containers[n].containerCache)){if(c&&e.contains(this.containers[n].element[0],c.element[0]))continue;c=this.containers[n],h=n}else this.containers[n].containerCache.over&&(this.containers[n]._trigger("out",t,this._uiHash(this)),this.containers[n].containerCache.over=0)}if(!c)return;if(this.containers.length===1)this.containers[h]._trigger("over",t,this._uiHash(this)),this.containers[h].containerCache.over=1;else{i=1e4,s=null,o=this.containers[h].floating?"left":"top",u=this.containers[h].floating?"width":"height",a=this.positionAbs[o]+this.offset.click[o];for(r=this.items.length-1;r>=0;r--){if(!e.contains(this.containers[h].element[0],this.items[r].item[0]))continue;if(this.items[r].item[0]===this.currentItem[0])continue;f=this.items[r].item.offset()[o],l=!1,Math.abs(f-a)>Math.abs(f+this.items[r][u]-a)&&(l=!0,f+=this.items[r][u]),Math.abs(f-a)this.containment[2]&&(s=this.containment[2]+this.offset.click.left),t.pageY-this.offset.click.top>this.containment[3]&&(o=this.containment[3]+this.offset.click.top)),i.grid&&(n=this.originalPageY+Math.round((o-this.originalPageY)/i.grid[1])*i.grid[1],o=this.containment?n-this.offset.click.top>=this.containment[1]&&n-this.offset.click.top<=this.containment[3]?n:n-this.offset.click.top>=this.containment[1]?n-i.grid[1]:n+i.grid[1]:n,r=this.originalPageX+Math.round((s-this.originalPageX)/i.grid[0])*i.grid[0],s=this.containment?r-this.offset.click.left>=this.containment[0]&&r-this.offset.click.left<=this.containment[2]?r:r-this.offset.click.left>=this.containment[0]?r-i.grid[0]:r+i.grid[0]:r)),{top:o-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+(this.cssPosition==="fixed"?-this.scrollParent.scrollTop():a?0:u.scrollTop()),left:s-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+(this.cssPosition==="fixed"?-this.scrollParent.scrollLeft():a?0:u.scrollLeft())}},_rearrange:function(e,t,n,r){n?n[0].appendChild(this.placeholder[0]):t.item[0].parentNode.insertBefore(this.placeholder[0],this.direction==="down"?t.item[0]:t.item[0].nextSibling),this.counter=this.counter?++this.counter:1;var i=this.counter;this._delay(function(){i===this.counter&&this.refreshPositions(!r)})},_clear:function(t,n){this.reverting=!1;var r,i=[];!this._noFinalSort&&this.currentItem.parent().length&&this.placeholder.before(this.currentItem),this._noFinalSort=null;if(this.helper[0]===this.currentItem[0]){for(r in this._storedCSS)if(this._storedCSS[r]==="auto"||this._storedCSS[r]==="static")this._storedCSS[r]="";this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper")}else this.currentItem.show();this.fromOutside&&!n&&i.push(function(e){this._trigger("receive",e,this._uiHash(this.fromOutside))}),(this.fromOutside||this.domPosition.prev!==this.currentItem.prev().not(".ui-sortable-helper")[0]||this.domPosition.parent!==this.currentItem.parent()[0])&&!n&&i.push(function(e){this._trigger("update",e,this._uiHash())}),this!==this.currentContainer&&(n||(i.push(function(e){this._trigger("remove",e,this._uiHash())}),i.push(function(e){return function(t){e._trigger("receive",t,this._uiHash(this))}}.call(this,this.currentContainer)),i.push(function(e){return function(t){e._trigger("update",t,this._uiHash(this))}}.call(this,this.currentContainer))));for(r=this.containers.length-1;r>=0;r--)n||i.push(function(e){return function(t){e._trigger("deactivate",t,this._uiHash(this))}}.call(this,this.containers[r])),this.containers[r].containerCache.over&&(i.push(function(e){return function(t){e._trigger("out",t,this._uiHash(this))}}.call(this,this.containers[r])),this.containers[r].containerCache.over=0);this._storedCursor&&e("body").css("cursor",this._storedCursor),this._storedOpacity&&this.helper.css("opacity",this._storedOpacity),this._storedZIndex&&this.helper.css("zIndex",this._storedZIndex==="auto"?"":this._storedZIndex),this.dragging=!1;if(this.cancelHelperRemoval){if(!n){this._trigger("beforeStop",t,this._uiHash());for(r=0;re?0:r.max")[0],l,c=e.each;f.style.cssText="background-color:rgba(1,1,1,.5)",a.rgba=f.style.backgroundColor.indexOf("rgba")>-1,c(o,function(e,t){t.cache="_"+e,t.props.alpha={idx:3,type:"percent",def:1}}),s.fn=e.extend(s.prototype,{parse:function(n,r,i,u){if(n===t)return this._rgba=[null,null,null,null],this;if(n.jquery||n.nodeType)n=e(n).css(r),r=t;var a=this,f=e.type(n),d=this._rgba=[];r!==t&&(n=[n,r,i,u],f="array");if(f==="string")return this.parse(p(n)||l._default);if(f==="array")return c(o.rgba.props,function(e,t){d[t.idx]=h(n[t.idx],t)}),this;if(f==="object")return n instanceof s?c(o,function(e,t){n[t.cache]&&(a[t.cache]=n[t.cache].slice())}):c(o,function(t,r){var i=r.cache;c(r.props,function(e,t){if(!a[i]&&r.to){if(e==="alpha"||n[e]==null)return;a[i]=r.to(a._rgba)}a[i][t.idx]=h(n[e],t,!0)}),a[i]&&e.inArray(null,a[i].slice(0,3))<0&&(a[i][3]=1,r.from&&(a._rgba=r.from(a[i])))}),this},is:function(e){var t=s(e),n=!0,r=this;return c(o,function(e,i){var s,o=t[i.cache];return o&&(s=r[i.cache]||i.to&&i.to(r._rgba)||[],c(i.props,function(e,t){if(o[t.idx]!=null)return n=o[t.idx]===s[t.idx],n})),n}),n},_space:function(){var e=[],t=this;return c(o,function(n,r){t[r.cache]&&e.push(n)}),e.pop()},transition:function(e,t){var n=s(e),r=n._space(),i=o[r],a=this.alpha()===0?s("transparent"):this,f=a[i.cache]||i.to(a._rgba),l=f.slice();return n=n[i.cache],c(i.props,function(e,r){var i=r.idx,s=f[i],o=n[i],a=u[r.type]||{};if(o===null)return;s===null?l[i]=o:(a.mod&&(o-s>a.mod/2?s+=a.mod:s-o>a.mod/2&&(s-=a.mod)),l[i]=h((o-s)*t+s,r))}),this[r](l)},blend:function(t){if(this._rgba[3]===1)return this;var n=this._rgba.slice(),r=n.pop(),i=s(t)._rgba;return s(e.map(n,function(e,t){return(1-r)*i[t]+r*e}))},toRgbaString:function(){var t="rgba(",n=e.map(this._rgba,function(e,t){return e==null?t>2?1:0:e});return n[3]===1&&(n.pop(),t="rgb("),t+n.join()+")"},toHslaString:function(){var t="hsla(",n=e.map(this.hsla(),function(e,t){return e==null&&(e=t>2?1:0),t&&t<3&&(e=Math.round(e*100)+"%"),e});return n[3]===1&&(n.pop(),t="hsl("),t+n.join()+")"},toHexString:function(t){var n=this._rgba.slice(),r=n.pop();return t&&n.push(~~(r*255)),"#"+e.map(n,function(e){return e=(e||0).toString(16),e.length===1?"0"+e:e}).join("")},toString:function(){return this._rgba[3]===0?"transparent":this.toRgbaString()}}),s.fn.parse.prototype=s.fn,o.hsla.to=function(e){if(e[0]==null||e[1]==null||e[2]==null)return[null,null,null,e[3]];var t=e[0]/255,n=e[1]/255,r=e[2]/255,i=e[3],s=Math.max(t,n,r),o=Math.min(t,n,r),u=s-o,a=s+o,f=a*.5,l,c;return o===s?l=0:t===s?l=60*(n-r)/u+360:n===s?l=60*(r-t)/u+120:l=60*(t-n)/u+240,u===0?c=0:f<=.5?c=u/a:c=u/(2-a),[Math.round(l)%360,c,f,i==null?1:i]},o.hsla.from=function(e){if(e[0]==null||e[1]==null||e[2]==null)return[null,null,null,e[3]];var t=e[0]/360,n=e[1],r=e[2],i=e[3],s=r<=.5?r*(1+n):r+n-r*n,o=2*r-s;return[Math.round(d(o,s,t+1/3)*255),Math.round(d(o,s,t)*255),Math.round(d(o,s,t-1/3)*255),i]},c(o,function(n,i){var o=i.props,u=i.cache,a=i.to,f=i.from;s.fn[n]=function(n){a&&!this[u]&&(this[u]=a(this._rgba));if(n===t)return this[u].slice();var r,i=e.type(n),l=i==="array"||i==="object"?n:arguments,p=this[u].slice();return c(o,function(e,t){var n=l[i==="object"?e:t.idx];n==null&&(n=p[t.idx]),p[t.idx]=h(n,t)}),f?(r=s(f(p)),r[u]=p,r):s(p)},c(o,function(t,i){if(s.fn[t])return;s.fn[t]=function(s){var o=e.type(s),u=t==="alpha"?this._hsla?"hsla":"rgba":n,a=this[u](),f=a[i.idx],l;return o==="undefined"?f:(o==="function"&&(s=s.call(this,f),o=e.type(s)),s==null&&i.empty?this:(o==="string"&&(l=r.exec(s),l&&(s=f+parseFloat(l[2])*(l[1]==="+"?1:-1))),a[i.idx]=s,this[u](a)))}})}),s.hook=function(t){var n=t.split(" ");c(n,function(t,n){e.cssHooks[n]={set:function(t,r){var i,o,u="";if(r!=="transparent"&&(e.type(r)!=="string"||(i=p(r)))){r=s(i||r);if(!a.rgba&&r._rgba[3]!==1){o=n==="backgroundColor"?t.parentNode:t;while((u===""||u==="transparent")&&o&&o.style)try{u=e.css(o,"backgroundColor"),o=o.parentNode}catch(f){}r=r.blend(u&&u!=="transparent"?u:"_default")}r=r.toRgbaString()}try{t.style[n]=r}catch(f){}}},e.fx.step[n]=function(t){t.colorInit||(t.start=s(t.elem,n),t.end=s(t.end),t.colorInit=!0),e.cssHooks[n].set(t.elem,t.start.transition(t.end,t.pos))}})},s.hook(n),e.cssHooks.borderColor={expand:function(e){var t={};return c(["Top","Right","Bottom","Left"],function(n,r){t["border"+r+"Color"]=e}),t}},l=e.Color.names={aqua:"#00ffff",black:"#000000",blue:"#0000ff",fuchsia:"#ff00ff",gray:"#808080",green:"#008000",lime:"#00ff00",maroon:"#800000",navy:"#000080",olive:"#808000",purple:"#800080",red:"#ff0000",silver:"#c0c0c0",teal:"#008080",white:"#ffffff",yellow:"#ffff00",transparent:[null,null,null,0],_default:"#ffffff"}}(jQuery),function(){function i(t){var n,r,i=t.ownerDocument.defaultView?t.ownerDocument.defaultView.getComputedStyle(t,null):t.currentStyle,s={};if(i&&i.length&&i[0]&&i[i[0]]){r=i.length;while(r--)n=i[r],typeof i[n]=="string"&&(s[e.camelCase(n)]=i[n])}else for(n in i)typeof i[n]=="string"&&(s[n]=i[n]);return s}function s(t,n){var i={},s,o;for(s in n)o=n[s],t[s]!==o&&!r[s]&&(e.fx.step[s]||!isNaN(parseFloat(o)))&&(i[s]=o);return i}var n=["add","remove","toggle"],r={border:1,borderBottom:1,borderColor:1,borderLeft:1,borderRight:1,borderTop:1,borderWidth:1,margin:1,padding:1};e.each(["borderLeftStyle","borderRightStyle","borderBottomStyle","borderTopStyle"],function(t,n){e.fx.step[n]=function(e){if(e.end!=="none"&&!e.setAttr||e.pos===1&&!e.setAttr)jQuery.style(e.elem,n,e.end),e.setAttr=!0}}),e.fn.addBack||(e.fn.addBack=function(e){return this.add(e==null?this.prevObject:this.prevObject.filter(e))}),e.effects.animateClass=function(t,r,o,u){var a=e.speed(r,o,u);return this.queue(function(){var r=e(this),o=r.attr("class")||"",u,f=a.children?r.find("*").addBack():r;f=f.map(function(){var t=e(this);return{el:t,start:i(this)}}),u=function(){e.each(n,function(e,n){t[n]&&r[n+"Class"](t[n])})},u(),f=f.map(function(){return this.end=i(this.el[0]),this.diff=s(this.start,this.end),this}),r.attr("class",o),f=f.map(function(){var t=this,n=e.Deferred(),r=e.extend({},a,{queue:!1,complete:function(){n.resolve(t)}});return this.el.animate(this.diff,r),n.promise()}),e.when.apply(e,f.get()).done(function(){u(),e.each(arguments,function(){var t=this.el;e.each(this.diff,function(e){t.css(e,"")})}),a.complete.call(r[0])})})},e.fn.extend({_addClass:e.fn.addClass,addClass:function(t,n,r,i){return n?e.effects.animateClass.call(this,{add:t},n,r,i):this._addClass(t)},_removeClass:e.fn.removeClass,removeClass:function(t,n,r,i){return n?e.effects.animateClass.call(this,{remove:t},n,r,i):this._removeClass(t)},_toggleClass:e.fn.toggleClass,toggleClass:function(n,r,i,s,o){return typeof r=="boolean"||r===t?i?e.effects.animateClass.call(this,r?{add:n}:{remove:n},i,s,o):this._toggleClass(n,r):e.effects.animateClass.call(this,{toggle:n},r,i,s)},switchClass:function(t,n,r,i,s){return e.effects.animateClass.call(this,{add:n,remove:t},r,i,s)}})}(),function(){function r(t,n,r,i){e.isPlainObject(t)&&(n=t,t=t.effect),t={effect:t},n==null&&(n={}),e.isFunction(n)&&(i=n,r=null,n={});if(typeof n=="number"||e.fx.speeds[n])i=r,r=n,n={};return e.isFunction(r)&&(i=r,r=null),n&&e.extend(t,n),r=r||n.duration,t.duration=e.fx.off?0:typeof r=="number"?r:r in e.fx.speeds?e.fx.speeds[r]:e.fx.speeds._default,t.complete=i||n.complete,t}function i(t){return!t||typeof t=="number"||e.fx.speeds[t]?!0:typeof t=="string"&&!e.effects.effect[t]}e.extend(e.effects,{version:"1.10.0",save:function(e,t){for(var r=0;r").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0}),i={width:t.width(),height:t.height()},s=document.activeElement;try{s.id}catch(o){s=document.body}return t.wrap(r),(t[0]===s||e.contains(t[0],s))&&e(s).focus(),r=t.parent(),t.css("position")==="static"?(r.css({position:"relative"}),t.css({position:"relative"})):(e.extend(n,{position:t.css("position"),zIndex:t.css("z-index")}),e.each(["top","left","bottom","right"],function(e,r){n[r]=t.css(r),isNaN(parseInt(n[r],10))&&(n[r]="auto")}),t.css({position:"relative",top:0,left:0,right:"auto",bottom:"auto"})),t.css(i),r.css(n).show()},removeWrapper:function(t){var n=document.activeElement;return t.parent().is(".ui-effects-wrapper")&&(t.parent().replaceWith(t),(t[0]===n||e.contains(t[0],n))&&e(n).focus()),t},setTransition:function(t,n,r,i){return i=i||{},e.each(n,function(e,n){var s=t.cssUnit(n);s[0]>0&&(i[n]=s[0]*r+s[1])}),i}}),e.fn.extend({effect:function(){function o(n){function u(){e.isFunction(i)&&i.call(r[0]),e.isFunction(n)&&n()}var r=e(this),i=t.complete,o=t.mode;(r.is(":hidden")?o==="hide":o==="show")?u():s.call(r[0],t,u)}var t=r.apply(this,arguments),n=t.mode,i=t.queue,s=e.effects.effect[t.effect];return e.fx.off||!s?n?this[n](t.duration,t.complete):this.each(function(){t.complete&&t.complete.call(this)}):i===!1?this.each(o):this.queue(i||"fx",o)},_show:e.fn.show,show:function(e){if(i(e))return this._show.apply(this,arguments);var t=r.apply(this,arguments);return t.mode="show",this.effect.call(this,t)},_hide:e.fn.hide,hide:function(e){if(i(e))return this._hide.apply(this,arguments);var t=r.apply(this,arguments);return t.mode="hide",this.effect.call(this,t)},__toggle:e.fn.toggle,toggle:function(t){if(i(t)||typeof t=="boolean"||e.isFunction(t))return this.__toggle.apply(this,arguments);var n=r.apply(this,arguments);return n.mode="toggle",this.effect.call(this,n)},cssUnit:function(t){var n=this.css(t),r=[];return e.each(["em","px","%","pt"],function(e,t){n.indexOf(t)>0&&(r=[parseFloat(n),t])}),r}})}(),function(){var t={};e.each(["Quad","Cubic","Quart","Quint","Expo"],function(e,n){t[n]=function(t){return Math.pow(t,e+2)}}),e.extend(t,{Sine:function(e){return 1-Math.cos(e*Math.PI/2)},Circ:function(e){return 1-Math.sqrt(1-e*e)},Elastic:function(e){return e===0||e===1?e:-Math.pow(2,8*(e-1))*Math.sin(((e-1)*80-7.5)*Math.PI/15)},Back:function(e){return e*e*(3*e-2)},Bounce:function(e){var t,n=4;while(e<((t=Math.pow(2,--n))-1)/11);return 1/Math.pow(4,3-n)-7.5625*Math.pow((t*3-2)/22-e,2)}}),e.each(t,function(t,n){e.easing["easeIn"+t]=n,e.easing["easeOut"+t]=function(e){return 1-n(1-e)},e.easing["easeInOut"+t]=function(e){return e<.5?n(e*2)/2:1-n(e*-2+2)/2}})}()}(jQuery),function(e,t){var n=0,r={},i={};r.height=r.paddingTop=r.paddingBottom=r.borderTopWidth=r.borderBottomWidth="hide",i.height=i.paddingTop=i.paddingBottom=i.borderTopWidth=i.borderBottomWidth="show",e.widget("ui.accordion",{version:"1.10.0",options:{active:0,animate:{},collapsible:!1,event:"click",header:"> li > :first-child,> :not(li):even",heightStyle:"auto",icons:{activeHeader:"ui-icon-triangle-1-s",header:"ui-icon-triangle-1-e"},activate:null,beforeActivate:null},_create:function(){var t=this.options;this.prevShow=this.prevHide=e(),this.element.addClass("ui-accordion ui-widget ui-helper-reset").attr("role","tablist"),!t.collapsible&&(t.active===!1||t.active==null)&&(t.active=0),this._processPanels(),t.active<0&&(t.active+=this.headers.length),this._refresh()},_getCreateEventData:function(){return{header:this.active,content:this.active.length?this.active.next():e()}},_createIcons:function(){var t=this.options.icons;t&&(e("").addClass("ui-accordion-header-icon ui-icon "+t.header).prependTo(this.headers),this.active.children(".ui-accordion-header-icon").removeClass(t.header).addClass(t.activeHeader),this.headers.addClass("ui-accordion-icons"))},_destroyIcons:function(){this.headers.removeClass("ui-accordion-icons").children(".ui-accordion-header-icon").remove()},_destroy:function(){var e;this.element.removeClass("ui-accordion ui-widget ui-helper-reset").removeAttr("role"),this.headers.removeClass("ui-accordion-header ui-accordion-header-active ui-helper-reset ui-state-default ui-corner-all ui-state-active ui-state-disabled ui-corner-top").removeAttr("role").removeAttr("aria-selected").removeAttr("aria-controls").removeAttr("tabIndex").each(function(){/^ui-accordion/.test(this.id)&&this.removeAttribute("id")}),this._destroyIcons(),e=this.headers.next().css("display","").removeAttr("role").removeAttr("aria-expanded").removeAttr("aria-hidden").removeAttr("aria-labelledby").removeClass("ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active ui-state-disabled").each(function(){/^ui-accordion/.test(this.id)&&this.removeAttribute("id")}),this.options.heightStyle!=="content"&&e.css("height","")},_setOption:function(e,t){if(e==="active"){this._activate(t);return}e==="event"&&(this.options.event&&this._off(this.headers,this.options.event),this._setupEvents(t)),this._super(e,t),e==="collapsible"&&!t&&this.options.active===!1&&this._activate(0),e==="icons"&&(this._destroyIcons(),t&&this._createIcons()),e==="disabled"&&this.headers.add(this.headers.next()).toggleClass("ui-state-disabled",!!t)},_keydown:function(t){if(t.altKey||t.ctrlKey)return;var n=e.ui.keyCode,r=this.headers.length,i=this.headers.index(t.target),s=!1;switch(t.keyCode){case n.RIGHT:case n.DOWN:s=this.headers[(i+1)%r];break;case n.LEFT:case n.UP:s=this.headers[(i-1+r)%r];break;case n.SPACE:case n.ENTER:this._eventHandler(t);break;case n.HOME:s=this.headers[0];break;case n.END:s=this.headers[r-1]}s&&(e(t.target).attr("tabIndex",-1),e(s).attr("tabIndex",0),s.focus(),t.preventDefault())},_panelKeyDown:function(t){t.keyCode===e.ui.keyCode.UP&&t.ctrlKey&&e(t.currentTarget).prev().focus()},refresh:function(){var t=this.options;this._processPanels();if(t.active===!1&&t.collapsible===!0||!this.headers.length)t.active=!1,this.active=e();t.active===!1?this._activate(0):this.active.length&&!e.contains(this.element[0],this.active[0])?this.headers.length===this.headers.find(".ui-state-disabled").length?(t.active=!1,this.active=e()):this._activate(Math.max(0,t.active-1)):t.active=this.headers.index(this.active),this._destroyIcons(),this._refresh()},_processPanels:function(){this.headers=this.element.find(this.options.header).addClass("ui-accordion-header ui-helper-reset ui-state-default ui-corner-all"),this.headers.next().addClass("ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom").filter(":not(.ui-accordion-content-active)").hide()},_refresh:function(){var t,r=this.options,i=r.heightStyle,s=this.element.parent(),o=this.accordionId="ui-accordion-"+(this.element.attr("id")||++n);this.active=this._findActive(r.active).addClass("ui-accordion-header-active ui-state-active").toggleClass("ui-corner-all ui-corner-top"),this.active.next().addClass("ui-accordion-content-active").show(),this.headers.attr("role","tab").each(function(t){var n=e(this),r=n.attr("id"),i=n.next(),s=i.attr("id");r||(r=o+"-header-"+t,n.attr("id",r)),s||(s=o+"-panel-"+t,i.attr("id",s)),n.attr("aria-controls",s),i.attr("aria-labelledby",r)}).next().attr("role","tabpanel"),this.headers.not(this.active).attr({"aria-selected":"false",tabIndex:-1}).next().attr({"aria-expanded":"false","aria-hidden":"true"}).hide(),this.active.length?this.active.attr({"aria-selected":"true",tabIndex:0}).next().attr({"aria-expanded":"true","aria-hidden":"false"}):this.headers.eq(0).attr("tabIndex",0),this._createIcons(),this._setupEvents(r.event),i==="fill"?(t=s.height(),this.element.siblings(":visible").each(function(){var n=e(this),r=n.css("position");if(r==="absolute"||r==="fixed")return;t-=n.outerHeight(!0)}),this.headers.each(function(){t-=e(this).outerHeight(!0)}),this.headers.next().each(function(){e(this).height(Math.max(0,t-e(this).innerHeight()+e(this).height()))}).css("overflow","auto")):i==="auto"&&(t=0,this.headers.next().each(function(){t=Math.max(t,e(this).css("height","").height())}).height(t))},_activate:function(t){var n=this._findActive(t)[0];if(n===this.active[0])return;n=n||this.active[0],this._eventHandler({target:n,currentTarget:n,preventDefault:e.noop})},_findActive:function(t){return typeof t=="number"?this.headers.eq(t):e()},_setupEvents:function(t){var n={keydown:"_keydown"};t&&e.each(t.split(" "),function(e,t){n[t]="_eventHandler"}),this._off(this.headers.add(this.headers.next())),this._on(this.headers,n),this._on(this.headers.next(),{keydown:"_panelKeyDown"}),this._hoverable(this.headers),this._focusable(this.headers)},_eventHandler:function(t){var n=this.options,r=this.active,i=e(t.currentTarget),s=i[0]===r[0],o=s&&n.collapsible,u=o?e():i.next(),a=r.next(),f={oldHeader:r,oldPanel:a,newHeader:o?e():i,newPanel:u};t.preventDefault();if(s&&!n.collapsible||this._trigger("beforeActivate",t,f)===!1)return;n.active=o?!1:this.headers.index(i),this.active=s?e():i,this._toggle(f),r.removeClass("ui-accordion-header-active ui-state-active"),n.icons&&r.children(".ui-accordion-header-icon").removeClass(n.icons.activeHeader).addClass(n.icons.header),s||(i.removeClass("ui-corner-all").addClass("ui-accordion-header-active ui-state-active ui-corner-top"),n.icons&&i.children(".ui-accordion-header-icon").removeClass(n.icons.header).addClass(n.icons.activeHeader),i.next().addClass("ui-accordion-content-active"))},_toggle:function(t){var n=t.newPanel,r=this.prevShow.length?this.prevShow:t.oldPanel;this.prevShow.add(this.prevHide).stop(!0,!0),this.prevShow=n,this.prevHide=r,this.options.animate?this._animate(n,r,t):(r.hide(),n.show(),this._toggleComplete(t)),r.attr({"aria-expanded":"false","aria-hidden":"true"}),r.prev().attr("aria-selected","false"),n.length&&r.length?r.prev().attr("tabIndex",-1):n.length&&this.headers.filter(function(){return e(this).attr("tabIndex")===0}).attr("tabIndex",-1),n.attr({"aria-expanded":"true","aria-hidden":"false"}).prev().attr({"aria-selected":"true",tabIndex:0})},_animate:function(e,t,n){var s,o,u,a=this,f=0,l=e.length&&(!t.length||e.index()",options:{appendTo:null,autoFocus:!1,delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null,change:null,close:null,focus:null,open:null,response:null,search:null,select:null},pending:0,_create:function(){var t,n,r;this.isMultiLine=this._isMultiLine(),this.valueMethod=this.element[this.element.is("input,textarea")?"val":"text"],this.isNewMenu=!0,this.element.addClass("ui-autocomplete-input").attr("autocomplete","off"),this._on(this.element,{keydown:function(i){if(this.element.prop("readOnly")){t=!0,r=!0,n=!0;return}t=!1,r=!1,n=!1;var s=e.ui.keyCode;switch(i.keyCode){case s.PAGE_UP:t=!0,this._move("previousPage",i);break;case s.PAGE_DOWN:t=!0,this._move("nextPage",i);break;case s.UP:t=!0,this._keyEvent("previous",i);break;case s.DOWN:t=!0,this._keyEvent("next",i);break;case s.ENTER:case s.NUMPAD_ENTER:this.menu.active&&(t=!0,i.preventDefault(),this.menu.select(i));break;case s.TAB:this.menu.active&&this.menu.select(i);break;case s.ESCAPE:this.menu.element.is(":visible")&&(this._value(this.term),this.close(i),i.preventDefault());break;default:n=!0,this._searchTimeout(i)}},keypress:function(r){if(t){t=!1,r.preventDefault();return}if(n)return;var i=e.ui.keyCode;switch(r.keyCode){case i.PAGE_UP:this._move("previousPage",r);break;case i.PAGE_DOWN:this._move("nextPage",r);break;case i.UP:this._keyEvent("previous",r);break;case i.DOWN:this._keyEvent("next",r)}},input:function(e){if(r){r=!1,e.preventDefault();return}this._searchTimeout(e)},focus:function(){this.selectedItem=null,this.previous=this._value()},blur:function(e){if(this.cancelBlur){delete this.cancelBlur;return}clearTimeout(this.searching),this.close(e),this._change(e)}}),this._initSource(),this.menu=e("