From bdd8427758e55b6fd8e7c4f5999b49609e04f92e Mon Sep 17 00:00:00 2001 From: klmp200 Date: Wed, 10 Oct 2018 02:07:13 +0200 Subject: [PATCH 1/2] sentry: integration with error 500 page --- core/templates/core/500.jinja | 15 + core/views/__init__.py | 14 +- locale/fr/LC_MESSAGES/django.po | 1245 ++++++++++++++++--------------- sith/urls.py | 1 + 4 files changed, 654 insertions(+), 621 deletions(-) create mode 100644 core/templates/core/500.jinja diff --git a/core/templates/core/500.jinja b/core/templates/core/500.jinja new file mode 100644 index 00000000..493d64ba --- /dev/null +++ b/core/templates/core/500.jinja @@ -0,0 +1,15 @@ +{% extends "core/base.jinja" %} +{% block head %} +{{ super() }} + +{% endblock head %} + +{% block content %} +

{% trans %}500, Server Error{% endtrans %}

+ {% if request.sentry_dsn %} + +{% endif %} +{% endblock content %} diff --git a/core/views/__init__.py b/core/views/__init__.py index 7045b7f7..1b9b33e2 100644 --- a/core/views/__init__.py +++ b/core/views/__init__.py @@ -24,8 +24,14 @@ import types +from sentry_sdk import last_event_id from django.shortcuts import render -from django.http import HttpResponseForbidden, HttpResponseNotFound +from django.http import ( + HttpResponseForbidden, + HttpResponseNotFound, + HttpResponseServerError, +) +from django.template import RequestContext from django.core.exceptions import ( PermissionDenied, ObjectDoesNotExist, @@ -65,6 +71,12 @@ def not_found(request): return HttpResponseNotFound(render(request, "core/404.jinja")) +def internal_servor_error(request): + request.sentry_dsn = settings.SENTRY_DSN + request.sentry_last_event_id = last_event_id + return HttpResponseServerError(render(request, "core/500.jinja")) + + def can_edit_prop(obj, user): if obj is None or user.is_owner(obj): return True diff --git a/locale/fr/LC_MESSAGES/django.po b/locale/fr/LC_MESSAGES/django.po index cd7fe02a..e8bb944d 100644 --- a/locale/fr/LC_MESSAGES/django.po +++ b/locale/fr/LC_MESSAGES/django.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-09-20 14:41+0200\n" +"POT-Creation-Date: 2018-10-10 02:17+0200\n" "PO-Revision-Date: 2016-07-18\n" "Last-Translator: Skia \n" "Language-Team: AE info \n" @@ -16,168 +16,169 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: accounting/models.py:59 accounting/models.py:108 accounting/models.py:136 -#: accounting/models.py:195 club/models.py:47 com/models.py:198 -#: com/models.py:212 core/templates/core/base.jinja:297 counter/models.py:113 -#: counter/models.py:140 counter/models.py:184 forum/models.py:54 -#: launderette/models.py:38 launderette/models.py:84 launderette/models.py:110 -#: stock/models.py:38 stock/models.py:54 stock/models.py:77 stock/models.py:97 +#: accounting/models.py:61 accounting/models.py:110 accounting/models.py:138 +#: accounting/models.py:203 club/models.py:48 com/models.py:231 +#: com/models.py:248 core/templates/core/base.jinja:296 counter/models.py:119 +#: counter/models.py:147 counter/models.py:209 forum/models.py:58 +#: launderette/models.py:38 launderette/models.py:90 launderette/models.py:125 +#: stock/models.py:40 stock/models.py:60 stock/models.py:100 +#: stock/models.py:127 msgid "name" msgstr "nom" -#: accounting/models.py:60 +#: accounting/models.py:62 msgid "street" msgstr "rue" -#: accounting/models.py:61 +#: accounting/models.py:63 msgid "city" msgstr "ville" -#: accounting/models.py:62 +#: accounting/models.py:64 msgid "postcode" msgstr "code postal" -#: accounting/models.py:63 +#: accounting/models.py:65 msgid "country" msgstr "pays" -#: accounting/models.py:64 core/models.py:198 +#: accounting/models.py:66 core/models.py:258 msgid "phone" msgstr "téléphone" -#: accounting/models.py:65 +#: accounting/models.py:67 msgid "email" msgstr "email" -#: accounting/models.py:66 +#: accounting/models.py:68 msgid "website" msgstr "site internet" -#: accounting/models.py:69 +#: accounting/models.py:71 msgid "company" msgstr "entreprise" -#: accounting/models.py:109 +#: accounting/models.py:111 msgid "iban" msgstr "IBAN" -#: accounting/models.py:110 +#: accounting/models.py:112 msgid "account number" msgstr "numero de compte" -#: accounting/models.py:111 accounting/models.py:137 club/models.py:227 -#: com/models.py:73 com/models.py:187 com/models.py:214 counter/models.py:149 -#: counter/models.py:185 trombi/models.py:149 +#: accounting/models.py:113 accounting/models.py:139 club/models.py:266 +#: com/models.py:75 com/models.py:219 com/models.py:252 counter/models.py:164 +#: counter/models.py:210 trombi/models.py:205 msgid "club" msgstr "club" -#: accounting/models.py:114 +#: accounting/models.py:116 msgid "Bank account" msgstr "Compte en banque" -#: accounting/models.py:138 +#: accounting/models.py:141 msgid "bank account" msgstr "compte en banque" -#: accounting/models.py:141 +#: accounting/models.py:145 msgid "Club account" msgstr "Compte club" -#: accounting/models.py:186 +#: accounting/models.py:190 #, python-format msgid "%(club_account)s on %(bank_account)s" msgstr "%(club_account)s sur %(bank_account)s" -#: accounting/models.py:193 club/models.py:228 counter/models.py:466 -#: election/models.py:17 launderette/models.py:148 +#: accounting/models.py:201 club/models.py:268 counter/models.py:589 +#: election/models.py:18 launderette/models.py:180 msgid "start date" msgstr "date de début" -#: accounting/models.py:194 club/models.py:229 counter/models.py:467 -#: election/models.py:18 +#: accounting/models.py:202 club/models.py:269 counter/models.py:590 +#: election/models.py:19 msgid "end date" msgstr "date de fin" -#: accounting/models.py:196 +#: accounting/models.py:204 msgid "is closed" msgstr "est fermé" -#: accounting/models.py:197 accounting/models.py:421 +#: accounting/models.py:206 accounting/models.py:521 msgid "club account" msgstr "compte club" -#: accounting/models.py:198 accounting/models.py:255 counter/models.py:53 -#: counter/models.py:298 +#: accounting/models.py:208 accounting/models.py:268 counter/models.py:54 +#: counter/models.py:346 msgid "amount" msgstr "montant" -#: accounting/models.py:199 +#: accounting/models.py:209 msgid "effective_amount" msgstr "montant effectif" -#: accounting/models.py:202 +#: accounting/models.py:212 msgid "General journal" msgstr "Classeur" -#: accounting/models.py:253 +#: accounting/models.py:264 msgid "number" msgstr "numéro" -#: accounting/models.py:254 +#: accounting/models.py:266 msgid "journal" msgstr "classeur" -#: accounting/models.py:256 core/models.py:657 core/models.py:1117 -#: core/models.py:1161 core/models.py:1188 counter/models.py:301 -#: counter/models.py:351 counter/models.py:484 eboutic/models.py:39 -#: eboutic/models.py:73 forum/models.py:248 forum/models.py:323 -#: stock/models.py:76 +#: accounting/models.py:269 core/models.py:805 core/models.py:1341 +#: core/models.py:1387 core/models.py:1416 counter/models.py:351 +#: counter/models.py:444 counter/models.py:613 eboutic/models.py:42 +#: eboutic/models.py:85 forum/models.py:298 forum/models.py:391 +#: stock/models.py:99 msgid "date" msgstr "date" -#: accounting/models.py:257 counter/models.py:115 counter/models.py:485 -#: stock/models.py:79 +#: accounting/models.py:270 counter/models.py:121 counter/models.py:614 +#: stock/models.py:102 msgid "comment" msgstr "commentaire" -#: accounting/models.py:258 counter/models.py:302 counter/models.py:352 -#: subscription/models.py:59 +#: accounting/models.py:272 counter/models.py:353 counter/models.py:446 +#: subscription/models.py:64 msgid "payment method" msgstr "méthode de paiement" -#: accounting/models.py:259 +#: accounting/models.py:277 msgid "cheque number" msgstr "numéro de chèque" -#: accounting/models.py:260 eboutic/models.py:144 +#: accounting/models.py:282 eboutic/models.py:166 msgid "invoice" msgstr "facture" -#: accounting/models.py:261 +#: accounting/models.py:286 msgid "is done" msgstr "est fait" -#: accounting/models.py:263 +#: accounting/models.py:290 msgid "simple type" msgstr "type simplifié" -#: accounting/models.py:265 accounting/models.py:374 +#: accounting/models.py:297 accounting/models.py:462 msgid "accounting type" msgstr "type comptable" -#: accounting/models.py:267 accounting/models.py:369 accounting/models.py:396 -#: accounting/models.py:420 core/models.py:1187 counter/models.py:343 +#: accounting/models.py:304 accounting/models.py:450 accounting/models.py:485 +#: accounting/models.py:519 core/models.py:1415 counter/models.py:410 msgid "label" msgstr "étiquette" -#: accounting/models.py:268 +#: accounting/models.py:310 msgid "target type" msgstr "type de cible" -#: accounting/models.py:269 club/models.py:329 +#: accounting/models.py:313 club/models.py:422 #: club/templates/club/club_members.jinja:8 #: club/templates/club/club_old_members.jinja:8 -#: club/templates/club/mailing.jinja:28 club/views.py:86 +#: club/templates/club/mailing.jinja:28 club/views.py:111 #: counter/templates/counter/cash_summary_list.jinja:32 #: counter/templates/counter/stats.jinja:15 #: counter/templates/counter/stats.jinja:52 @@ -186,7 +187,7 @@ msgstr "type de cible" msgid "User" msgstr "Utilisateur" -#: accounting/models.py:269 club/models.py:270 +#: accounting/models.py:314 club/models.py:329 #: club/templates/club/club_detail.jinja:12 #: com/templates/com/mailing_admin.jinja:11 #: com/templates/com/news_admin_list.jinja:23 @@ -210,36 +211,36 @@ msgstr "Utilisateur" msgid "Club" msgstr "Club" -#: accounting/models.py:269 core/views/user.py:220 +#: accounting/models.py:315 core/views/user.py:295 msgid "Account" msgstr "Compte" -#: accounting/models.py:269 +#: accounting/models.py:316 msgid "Company" msgstr "Entreprise" -#: accounting/models.py:269 sith/settings.py:378 +#: accounting/models.py:317 sith/settings.py:377 #: stock/templates/stock/shopping_list_items.jinja:37 msgid "Other" msgstr "Autre" -#: accounting/models.py:270 +#: accounting/models.py:320 msgid "target id" msgstr "id de la cible" -#: accounting/models.py:271 +#: accounting/models.py:322 msgid "target label" msgstr "nom de la cible" -#: accounting/models.py:272 +#: accounting/models.py:327 msgid "linked operation" msgstr "opération liée" -#: accounting/models.py:288 +#: accounting/models.py:346 msgid "The date must be set." msgstr "La date doit être indiquée." -#: accounting/models.py:290 +#: accounting/models.py:350 #, python-format msgid "" "The date can not be before the start date of the journal, which is\n" @@ -248,16 +249,16 @@ msgstr "" "La date ne peut pas être avant la date de début du journal, qui est\n" "%(start_date)s." -#: accounting/models.py:293 +#: accounting/models.py:360 msgid "Target does not exists" msgstr "La cible n'existe pas." -#: accounting/models.py:295 +#: accounting/models.py:363 msgid "Please add a target label if you set no existing target" msgstr "" "Merci d'ajouter un nom de cible si vous ne spécifiez pas de cible existante" -#: accounting/models.py:297 +#: accounting/models.py:368 msgid "" "You need to provide ether a simplified accounting type or a standard " "accounting type" @@ -265,41 +266,41 @@ msgstr "" "Vous devez fournir soit un type comptable simplifié ou un type comptable " "standard" -#: accounting/models.py:364 counter/models.py:144 +#: accounting/models.py:442 counter/models.py:157 msgid "code" msgstr "code" -#: accounting/models.py:366 +#: accounting/models.py:446 msgid "An accounting type code contains only numbers" msgstr "Un code comptable ne contient que des numéros" -#: accounting/models.py:370 +#: accounting/models.py:452 msgid "movement type" msgstr "type de mouvement" -#: accounting/models.py:370 +#: accounting/models.py:454 #: accounting/templates/accounting/journal_statement_nature.jinja:9 #: accounting/templates/accounting/journal_statement_person.jinja:12 -#: accounting/views.py:482 +#: accounting/views.py:602 msgid "Credit" msgstr "Crédit" -#: accounting/models.py:370 +#: accounting/models.py:455 #: accounting/templates/accounting/journal_statement_nature.jinja:28 #: accounting/templates/accounting/journal_statement_person.jinja:40 -#: accounting/views.py:482 +#: accounting/views.py:602 msgid "Debit" msgstr "Débit" -#: accounting/models.py:371 +#: accounting/models.py:456 msgid "Neutral" msgstr "Neutre" -#: accounting/models.py:398 +#: accounting/models.py:489 msgid "simplified accounting types" msgstr "type simplifié" -#: accounting/models.py:401 +#: accounting/models.py:493 msgid "simplified type" msgstr "type simplifié" @@ -374,7 +375,7 @@ msgstr "Compte en banque : " #: election/templates/election/election_detail.jinja:401 #: forum/templates/forum/macros.jinja:21 forum/templates/forum/macros.jinja:123 #: launderette/templates/launderette/launderette_admin.jinja:16 -#: launderette/views.py:182 sas/templates/sas/album.jinja:26 +#: launderette/views.py:226 sas/templates/sas/album.jinja:26 #: sas/templates/sas/moderation.jinja:18 sas/templates/sas/picture.jinja:74 #: sas/templates/sas/picture.jinja:124 #: stock/templates/stock/stock_shopping_list.jinja:43 @@ -385,7 +386,7 @@ msgid "Delete" msgstr "Supprimer" #: accounting/templates/accounting/bank_account_details.jinja:18 -#: club/views.py:101 core/views/user.py:166 sas/templates/sas/picture.jinja:86 +#: club/views.py:128 core/views/user.py:205 sas/templates/sas/picture.jinja:86 msgid "Infos" msgstr "Infos" @@ -404,7 +405,7 @@ msgstr "Nouveau compte club" #: accounting/templates/accounting/bank_account_details.jinja:27 #: accounting/templates/accounting/bank_account_list.jinja:22 #: accounting/templates/accounting/club_account_details.jinja:58 -#: accounting/templates/accounting/journal_details.jinja:89 club/views.py:129 +#: accounting/templates/accounting/journal_details.jinja:89 club/views.py:174 #: com/templates/com/news_admin_list.jinja:39 #: com/templates/com/news_admin_list.jinja:68 #: com/templates/com/news_admin_list.jinja:115 @@ -418,7 +419,7 @@ msgstr "Nouveau compte club" #: com/templates/com/screen_list.jinja:26 com/templates/com/weekmail.jinja:32 #: com/templates/com/weekmail.jinja:61 core/templates/core/file.jinja:38 #: core/templates/core/page.jinja:35 core/templates/core/poster_list.jinja:40 -#: core/templates/core/user_tools.jinja:41 core/views/user.py:188 +#: core/templates/core/user_tools.jinja:41 core/views/user.py:237 #: counter/templates/counter/cash_summary_list.jinja:53 #: counter/templates/counter/counter_list.jinja:17 #: counter/templates/counter/counter_list.jinja:33 @@ -619,7 +620,7 @@ msgstr "No" #: core/templates/core/user_account_detail.jinja:78 #: counter/templates/counter/cash_summary_list.jinja:34 #: counter/templates/counter/last_ops.jinja:14 -#: counter/templates/counter/last_ops.jinja:39 sas/views.py:285 +#: counter/templates/counter/last_ops.jinja:39 sas/views.py:353 #: stock/templates/stock/stock_shopping_list.jinja:25 #: stock/templates/stock/stock_shopping_list.jinja:54 #: trombi/templates/trombi/user_profile.jinja:40 @@ -655,7 +656,7 @@ msgid "Done" msgstr "Effectuées" #: accounting/templates/accounting/journal_details.jinja:41 -#: counter/templates/counter/cash_summary_list.jinja:37 counter/views.py:855 +#: counter/templates/counter/cash_summary_list.jinja:37 counter/views.py:1091 #: trombi/templates/trombi/comment.jinja:4 #: trombi/templates/trombi/comment.jinja:8 #: trombi/templates/trombi/user_tools.jinja:50 @@ -785,7 +786,7 @@ msgstr "Sauver" #: accounting/templates/accounting/refound_account.jinja:4 #: accounting/templates/accounting/refound_account.jinja:9 -#: accounting/views.py:758 +#: accounting/views.py:933 msgid "Refound account" msgstr "Remboursement de compte" @@ -806,95 +807,95 @@ msgstr "Types simplifiés" msgid "New simplified type" msgstr "Nouveau type simplifié" -#: accounting/views.py:208 accounting/views.py:215 accounting/views.py:465 +#: accounting/views.py:247 accounting/views.py:257 accounting/views.py:577 msgid "Journal" msgstr "Classeur" -#: accounting/views.py:220 +#: accounting/views.py:267 msgid "Statement by nature" msgstr "Bilan par nature" -#: accounting/views.py:225 +#: accounting/views.py:277 msgid "Statement by person" msgstr "Bilan par personne" -#: accounting/views.py:230 +#: accounting/views.py:287 msgid "Accounting statement" msgstr "Bilan comptable" -#: accounting/views.py:307 +#: accounting/views.py:391 msgid "Link this operation to the target account" msgstr "Lier cette opération au compte cible" -#: accounting/views.py:327 +#: accounting/views.py:421 msgid "The target must be set." msgstr "La cible doit être indiquée." -#: accounting/views.py:339 +#: accounting/views.py:436 msgid "The amount must be set." msgstr "Le montant doit être indiqué." -#: accounting/views.py:459 accounting/views.py:465 +#: accounting/views.py:571 accounting/views.py:577 msgid "Operation" msgstr "Opération" -#: accounting/views.py:475 +#: accounting/views.py:586 msgid "Financial proof: " msgstr "Justificatif de libellé : " -#: accounting/views.py:476 +#: accounting/views.py:589 #, python-format msgid "Club: %(club_name)s" msgstr "Club : %(club_name)s" -#: accounting/views.py:477 +#: accounting/views.py:594 #, python-format msgid "Label: %(op_label)s" msgstr "Libellé : %(op_label)s" -#: accounting/views.py:478 +#: accounting/views.py:597 #, python-format msgid "Date: %(date)s" msgstr "Date : %(date)s" -#: accounting/views.py:484 +#: accounting/views.py:605 #, python-format msgid "Amount: %(amount).2f €" msgstr "Montant : %(amount).2f €" -#: accounting/views.py:496 +#: accounting/views.py:620 msgid "Debtor" msgstr "Débiteur" -#: accounting/views.py:496 +#: accounting/views.py:620 msgid "Creditor" msgstr "Créditeur" -#: accounting/views.py:498 +#: accounting/views.py:625 msgid "Comment:" msgstr "Commentaire :" -#: accounting/views.py:517 +#: accounting/views.py:650 msgid "Signature:" msgstr "Signature :" -#: accounting/views.py:574 +#: accounting/views.py:718 msgid "General statement" msgstr "Bilan général" -#: accounting/views.py:577 +#: accounting/views.py:725 msgid "No label operations" msgstr "Opérations sans étiquette" -#: accounting/views.py:719 +#: accounting/views.py:889 msgid "Refound this account" msgstr "Rembourser ce compte" -#: club/models.py:49 +#: club/models.py:51 msgid "unix name" msgstr "nom unix" -#: club/models.py:53 +#: club/models.py:58 msgid "" "Enter a valid unix name. This value may contain only letters, numbers ./-/_ " "characters." @@ -902,98 +903,98 @@ msgstr "" "Entrez un nom UNIX valide. Cette valeur peut contenir uniquement des " "lettres, des nombres, et les caractères ./-/_" -#: club/models.py:58 +#: club/models.py:63 msgid "A club with that unix name already exists." msgstr "Un club avec ce nom UNIX existe déjà." -#: club/models.py:61 +#: club/models.py:66 msgid "logo" msgstr "logo" -#: club/models.py:62 +#: club/models.py:68 msgid "is active" msgstr "actif" -#: club/models.py:63 +#: club/models.py:70 msgid "short description" msgstr "description courte" -#: club/models.py:64 core/models.py:200 +#: club/models.py:72 core/models.py:260 msgid "address" msgstr "Adresse" -#: club/models.py:70 core/models.py:161 +#: club/models.py:89 core/models.py:173 msgid "home" msgstr "home" -#: club/models.py:87 +#: club/models.py:111 msgid "You can not make loops in clubs" msgstr "Vous ne pouvez pas faire de boucles dans les clubs" -#: club/models.py:101 +#: club/models.py:125 msgid "A club with that unix_name already exists" msgstr "Un club avec ce nom UNIX existe déjà." -#: club/models.py:226 counter/models.py:464 counter/models.py:482 -#: eboutic/models.py:38 eboutic/models.py:72 election/models.py:154 -#: launderette/models.py:114 launderette/models.py:152 sas/models.py:185 -#: trombi/models.py:148 +#: club/models.py:260 counter/models.py:585 counter/models.py:608 +#: eboutic/models.py:40 eboutic/models.py:83 election/models.py:180 +#: launderette/models.py:134 launderette/models.py:190 sas/models.py:239 +#: trombi/models.py:203 msgid "user" msgstr "nom d'utilisateur" -#: club/models.py:230 core/models.py:180 election/models.py:153 -#: election/models.py:174 trombi/models.py:150 +#: club/models.py:271 core/models.py:224 election/models.py:178 +#: election/models.py:204 trombi/models.py:206 msgid "role" msgstr "rôle" -#: club/models.py:232 core/models.py:66 counter/models.py:114 -#: counter/models.py:141 election/models.py:14 election/models.py:99 -#: election/models.py:155 forum/models.py:55 forum/models.py:194 +#: club/models.py:276 core/models.py:73 counter/models.py:120 +#: counter/models.py:148 election/models.py:15 election/models.py:117 +#: election/models.py:182 forum/models.py:59 forum/models.py:231 msgid "description" msgstr "description" -#: club/models.py:237 +#: club/models.py:282 msgid "User must be subscriber to take part to a club" msgstr "L'utilisateur doit être cotisant pour faire partie d'un club" -#: club/models.py:239 +#: club/models.py:289 msgid "User is already member of that club" msgstr "L'utilisateur est déjà membre de ce club" -#: club/models.py:243 +#: club/models.py:298 msgid "past member" msgstr "Anciens membres" -#: club/models.py:271 club/models.py:330 +#: club/models.py:332 club/models.py:427 msgid "Email address" msgstr "Adresse email" -#: club/models.py:274 +#: club/models.py:340 msgid "Enter a valid address. Only the root of the address is needed." msgstr "" "Entrez une adresse valide. Seule la racine de l'adresse est nécessaire." -#: club/models.py:276 com/models.py:75 com/models.py:219 core/models.py:658 +#: club/models.py:344 com/models.py:79 com/models.py:260 core/models.py:806 msgid "is moderated" msgstr "est modéré" -#: club/models.py:277 com/models.py:76 com/models.py:220 +#: club/models.py:346 com/models.py:81 com/models.py:264 msgid "moderator" msgstr "modérateur" -#: club/models.py:328 club/templates/club/mailing.jinja:14 +#: club/models.py:415 club/templates/club/mailing.jinja:14 msgid "Mailing" msgstr "Liste de diffusion" -#: club/models.py:337 +#: club/models.py:434 msgid "At least user or email is required" msgstr "Au moins un utilisateur ou un email est nécessaire" -#: club/models.py:342 +#: club/models.py:442 msgid "This email is already suscribed in this mailing" msgstr "Cet email est déjà abonné à cette mailing" -#: club/models.py:366 club/templates/club/mailing.jinja:36 +#: club/models.py:471 club/templates/club/mailing.jinja:36 msgid "Unregistered user" msgstr "Désabonner un utilisateur" @@ -1047,8 +1048,8 @@ msgid "Mark as old" msgstr "Marquer comme ancien" #: club/templates/club/club_members.jinja:30 -#: core/templates/core/file_detail.jinja:19 core/views/forms.py:254 -#: launderette/views.py:182 trombi/templates/trombi/detail.jinja:19 +#: core/templates/core/file_detail.jinja:19 core/views/forms.py:334 +#: launderette/views.py:226 trombi/templates/trombi/detail.jinja:19 msgid "Add" msgstr "Ajouter" @@ -1066,8 +1067,8 @@ msgstr "Du" msgid "To" msgstr "Au" -#: club/templates/club/club_sellings.jinja:5 club/views.py:140 -#: club/views.py:374 counter/templates/counter/counter_main.jinja:19 +#: club/templates/club/club_sellings.jinja:5 club/views.py:194 +#: club/views.py:478 counter/templates/counter/counter_main.jinja:19 #: counter/templates/counter/last_ops.jinja:35 msgid "Sellings" msgstr "Ventes" @@ -1093,10 +1094,10 @@ msgstr "unités" msgid "Benefit: " msgstr "Bénéfice : " -#: club/templates/club/club_sellings.jinja:21 club/views.py:322 +#: club/templates/club/club_sellings.jinja:21 club/views.py:417 #: core/templates/core/user_account_detail.jinja:18 #: core/templates/core/user_account_detail.jinja:51 -#: counter/templates/counter/cash_summary_list.jinja:33 counter/views.py:134 +#: counter/templates/counter/cash_summary_list.jinja:33 counter/views.py:168 msgid "Counter" msgstr "Comptoir" @@ -1241,99 +1242,99 @@ msgstr "Aucune page n'existe pour ce club" msgid "Club stats" msgstr "Statistiques du club" -#: club/views.py:107 +#: club/views.py:138 msgid "Members" msgstr "Membres" -#: club/views.py:112 +#: club/views.py:147 msgid "Old members" msgstr "Anciens membres" -#: club/views.py:118 core/templates/core/page.jinja:33 +#: club/views.py:157 core/templates/core/page.jinja:33 msgid "History" msgstr "Historique" -#: club/views.py:124 core/templates/core/base.jinja:115 core/views/user.py:182 -#: sas/templates/sas/picture.jinja:95 trombi/views.py:55 +#: club/views.py:165 core/templates/core/base.jinja:115 core/views/user.py:228 +#: sas/templates/sas/picture.jinja:95 trombi/views.py:60 msgid "Tools" msgstr "Outils" -#: club/views.py:135 +#: club/views.py:185 msgid "Edit club page" msgstr "Éditer la page de club" -#: club/views.py:145 +#: club/views.py:201 msgid "Mailing list" msgstr "Listes de diffusion" -#: club/views.py:150 com/views.py:116 +#: club/views.py:210 com/views.py:141 msgid "Posters list" msgstr "Liste d'affiches" -#: club/views.py:156 counter/templates/counter/counter_list.jinja:21 +#: club/views.py:220 counter/templates/counter/counter_list.jinja:21 #: counter/templates/counter/counter_list.jinja:43 #: counter/templates/counter/counter_list.jinja:59 msgid "Props" msgstr "Propriétés" -#: club/views.py:251 core/views/forms.py:255 counter/views.py:91 -#: trombi/views.py:124 +#: club/views.py:322 core/views/forms.py:337 counter/views.py:113 +#: trombi/views.py:141 msgid "Select user" msgstr "Choisir un utilisateur" -#: club/views.py:298 sas/views.py:97 sas/views.py:150 sas/views.py:228 +#: club/views.py:381 sas/views.py:129 sas/views.py:195 sas/views.py:286 msgid "You do not have the permission to do that" msgstr "Vous n'avez pas la permission de faire cela" -#: club/views.py:320 counter/views.py:1097 +#: club/views.py:406 counter/views.py:1481 msgid "Begin date" msgstr "Date de début" -#: club/views.py:321 com/views.py:65 com/views.py:177 counter/views.py:1098 -#: election/views.py:135 subscription/views.py:47 +#: club/views.py:412 com/views.py:85 com/views.py:210 counter/views.py:1487 +#: election/views.py:190 subscription/views.py:51 msgid "End date" msgstr "Date de fin" -#: club/views.py:336 core/templates/core/user_stats.jinja:27 -#: counter/views.py:1188 +#: club/views.py:435 core/templates/core/user_stats.jinja:27 +#: counter/views.py:1635 msgid "Product" msgstr "Produit" -#: com/models.py:47 +#: com/models.py:46 msgid "alert message" msgstr "message d'alerte" -#: com/models.py:48 +#: com/models.py:47 msgid "info message" msgstr "message d'info" -#: com/models.py:49 +#: com/models.py:48 msgid "index page" msgstr "page d'accueil" -#: com/models.py:50 +#: com/models.py:49 msgid "weekmail destinations" msgstr "destinataires du weekmail" -#: com/models.py:60 +#: com/models.py:59 msgid "Notice" msgstr "Information" -#: com/models.py:61 +#: com/models.py:60 msgid "Event" msgstr "Événement" -#: com/models.py:62 +#: com/models.py:61 msgid "Weekly" msgstr "Hebdomadaire" -#: com/models.py:63 +#: com/models.py:62 msgid "Call" msgstr "Appel" -#: com/models.py:69 com/models.py:133 com/models.py:184 election/models.py:13 -#: election/models.py:98 election/models.py:134 forum/models.py:198 -#: forum/models.py:246 +#: com/models.py:69 com/models.py:155 com/models.py:213 election/models.py:14 +#: election/models.py:116 election/models.py:156 forum/models.py:242 +#: forum/models.py:296 msgid "title" msgstr "titre" @@ -1341,73 +1342,73 @@ msgstr "titre" msgid "summary" msgstr "résumé" -#: com/models.py:71 com/models.py:185 trombi/models.py:135 +#: com/models.py:71 com/models.py:214 trombi/models.py:188 msgid "content" msgstr "contenu" -#: com/models.py:72 core/models.py:1160 launderette/models.py:86 -#: launderette/models.py:112 launderette/models.py:149 stock/models.py:59 -#: stock/models.py:98 +#: com/models.py:73 core/models.py:1385 launderette/models.py:95 +#: launderette/models.py:130 launderette/models.py:182 stock/models.py:77 +#: stock/models.py:131 msgid "type" msgstr "type" -#: com/models.py:74 com/models.py:186 trombi/models.py:133 +#: com/models.py:77 com/models.py:216 trombi/models.py:183 msgid "author" msgstr "auteur" -#: com/models.py:121 +#: com/models.py:142 msgid "news_date" msgstr "date de la nouvelle" -#: com/models.py:122 +#: com/models.py:143 msgid "start_date" msgstr "date de début" -#: com/models.py:123 +#: com/models.py:144 msgid "end_date" msgstr "date de fin" -#: com/models.py:134 +#: com/models.py:156 msgid "intro" msgstr "intro" -#: com/models.py:135 +#: com/models.py:157 msgid "joke" msgstr "blague" -#: com/models.py:136 +#: com/models.py:158 msgid "protip" msgstr "astuce" -#: com/models.py:137 +#: com/models.py:159 msgid "conclusion" msgstr "conclusion" -#: com/models.py:138 +#: com/models.py:160 msgid "sent" msgstr "envoyé" -#: com/models.py:183 +#: com/models.py:211 msgid "weekmail" msgstr "weekmail" -#: com/models.py:188 +#: com/models.py:221 msgid "rank" msgstr "rang" -#: com/models.py:213 core/models.py:648 core/models.py:664 +#: com/models.py:250 core/models.py:776 core/models.py:820 msgid "file" msgstr "fichier" -#: com/models.py:218 +#: com/models.py:258 msgid "display time" msgstr "temps d'affichage" -#: com/models.py:231 +#: com/models.py:285 msgid "Begin date should be before end date" msgstr "La date de début doit être avant celle de fin" -#: com/templates/com/mailing_admin.jinja:4 com/views.py:111 +#: com/templates/com/mailing_admin.jinja:4 com/views.py:134 #: core/templates/core/user_tools.jinja:89 msgid "Mailing lists administration" msgstr "Administration des mailing listes" @@ -1477,7 +1478,7 @@ msgstr "Informations affichées" #: com/templates/com/news_admin_list.jinja:248 #: com/templates/com/news_admin_list.jinja:285 #: launderette/templates/launderette/launderette_admin.jinja:42 -#: launderette/views.py:184 +#: launderette/views.py:233 msgid "Type" msgstr "Type" @@ -1490,9 +1491,9 @@ msgstr "Type" #: com/templates/com/news_admin_list.jinja:249 #: com/templates/com/news_admin_list.jinja:286 #: com/templates/com/weekmail.jinja:19 com/templates/com/weekmail.jinja:48 -#: core/templates/core/base.jinja:307 forum/templates/forum/forum.jinja:29 +#: core/templates/core/base.jinja:306 forum/templates/forum/forum.jinja:29 #: forum/templates/forum/forum.jinja:48 forum/templates/forum/main.jinja:26 -#: forum/views.py:175 +#: forum/views.py:192 msgid "Title" msgstr "Titre" @@ -1723,7 +1724,7 @@ msgid "Slideshow" msgstr "Diaporama" #: com/templates/com/weekmail.jinja:5 com/templates/com/weekmail.jinja:9 -#: com/views.py:86 core/templates/core/user_tools.jinja:81 +#: com/views.py:108 core/templates/core/user_tools.jinja:81 msgid "Weekmail" msgstr "Weekmail" @@ -1766,7 +1767,7 @@ msgstr "Supprimer du Weekmail" #: com/templates/com/weekmail_preview.jinja:9 #: core/templates/core/user_account_detail.jinja:11 -#: core/templates/core/user_account_detail.jinja:104 launderette/views.py:182 +#: core/templates/core/user_account_detail.jinja:104 launderette/views.py:226 #: stock/templates/stock/shopping_list_items.jinja:9 #: trombi/templates/trombi/comment_moderation.jinja:10 #: trombi/templates/trombi/export.jinja:9 @@ -1810,90 +1811,90 @@ msgstr "Astuce" msgid "Final word" msgstr "Le mot de la fin" -#: com/views.py:63 com/views.py:176 election/views.py:133 -#: subscription/views.py:44 +#: com/views.py:78 com/views.py:204 election/views.py:185 +#: subscription/views.py:45 msgid "Start date" msgstr "Date de début" -#: com/views.py:79 +#: com/views.py:103 msgid "Communication administration" msgstr "Administration de la communication" -#: com/views.py:91 core/templates/core/user_tools.jinja:82 +#: com/views.py:114 core/templates/core/user_tools.jinja:82 msgid "Weekmail destinations" msgstr "Destinataires du Weekmail" -#: com/views.py:96 +#: com/views.py:118 msgid "Index page" msgstr "Page d'accueil" -#: com/views.py:101 +#: com/views.py:121 msgid "Info message" msgstr "Message d'info" -#: com/views.py:106 +#: com/views.py:127 msgid "Alert message" msgstr "Message d'alerte" -#: com/views.py:121 +#: com/views.py:148 msgid "Screens list" msgstr "Liste d'écrans" -#: com/views.py:178 +#: com/views.py:215 msgid "Until" msgstr "Jusqu'à" -#: com/views.py:179 +#: com/views.py:217 msgid "Automoderation" msgstr "Automodération" -#: com/views.py:185 com/views.py:187 com/views.py:191 +#: com/views.py:224 com/views.py:228 com/views.py:238 msgid "This field is required." msgstr "Ce champ est obligatoire." -#: com/views.py:189 +#: com/views.py:234 msgid "You crazy? You can not finish an event before starting it." msgstr "T'es fou? Un événement ne peut pas finir avant même de commencer." -#: com/views.py:371 +#: com/views.py:463 msgid "Delete and save to regenerate" msgstr "Supprimer et sauver pour regénérer" -#: com/views.py:379 +#: com/views.py:472 msgid "Weekmail of the " msgstr "Weekmail du " -#: com/views.py:459 +#: com/views.py:574 msgid "" "You must be a board member of the selected club to post in the Weekmail." msgstr "" "Vous devez êtres un membre du bureau du club sélectionné pour poster dans le " "Weekmail." -#: core/models.py:62 +#: core/models.py:69 msgid "meta group status" msgstr "status du meta-groupe" -#: core/models.py:64 +#: core/models.py:71 msgid "Whether a group is a meta group or not" msgstr "Si un groupe est un meta-groupe ou pas" -#: core/models.py:101 +#: core/models.py:108 #, python-format msgid "%(value)s is not a valid promo (between 0 and %(end)s)" msgstr "%(value)s n'est pas une promo valide (doit être entre 0 et %(end)s)" -#: core/models.py:118 +#: core/models.py:126 msgid "username" msgstr "nom d'utilisateur" -#: core/models.py:121 +#: core/models.py:130 msgid "Required. 254 characters or fewer. Letters, digits and ./+/-/_ only." msgstr "" "Requis. Pas plus de 254 caractères. Uniquement des lettres, numéros, et ./" "+/-/_" -#: core/models.py:125 +#: core/models.py:136 msgid "" "Enter a valid username. This value may contain only letters, numbers and ./" "+/-/_ characters." @@ -1901,43 +1902,43 @@ msgstr "" "Entrez un nom d'utilisateur correct. Uniquement des lettres, numéros, et ./" "+/-/_" -#: core/models.py:130 +#: core/models.py:142 msgid "A user with that username already exists." msgstr "Un utilisateur de ce nom existe déjà" -#: core/models.py:133 +#: core/models.py:144 msgid "first name" msgstr "Prénom" -#: core/models.py:134 +#: core/models.py:145 msgid "last name" msgstr "Nom" -#: core/models.py:135 +#: core/models.py:146 msgid "email address" msgstr "adresse email" -#: core/models.py:136 +#: core/models.py:147 msgid "date of birth" msgstr "date de naissance" -#: core/models.py:137 +#: core/models.py:148 msgid "nick name" msgstr "surnom" -#: core/models.py:139 +#: core/models.py:150 msgid "staff status" msgstr "status \"staff\"" -#: core/models.py:141 +#: core/models.py:152 msgid "Designates whether the user can log into this admin site." msgstr "Est-ce que l'utilisateur peut se logger à la partie admin du site." -#: core/models.py:144 +#: core/models.py:155 msgid "active" msgstr "actif" -#: core/models.py:147 +#: core/models.py:158 msgid "" "Designates whether this user should be treated as active. Unselect this " "instead of deleting accounts." @@ -1945,159 +1946,159 @@ msgstr "" "Est-ce que l'utilisateur doit être traité comme actif. Déselectionnez au " "lieu de supprimer les comptes." -#: core/models.py:151 +#: core/models.py:162 msgid "date joined" msgstr "date d'inscription" -#: core/models.py:152 +#: core/models.py:163 msgid "last update" msgstr "dernière mise à jour" -#: core/models.py:154 +#: core/models.py:165 msgid "superuser" msgstr "super-utilisateur" -#: core/models.py:157 +#: core/models.py:167 msgid "Designates whether this user is a superuser. " msgstr "Est-ce que l'utilisateur est super-utilisateur." -#: core/models.py:163 +#: core/models.py:181 msgid "profile" msgstr "profil" -#: core/models.py:165 +#: core/models.py:189 msgid "avatar" msgstr "avatar" -#: core/models.py:167 +#: core/models.py:197 msgid "scrub" msgstr "blouse" -#: core/models.py:169 +#: core/models.py:203 msgid "sex" msgstr "sexe" -#: core/models.py:169 matmat/views.py:73 +#: core/models.py:205 matmat/views.py:73 msgid "Man" msgstr "Homme" -#: core/models.py:169 matmat/views.py:74 +#: core/models.py:205 matmat/views.py:73 msgid "Woman" msgstr "Femme" -#: core/models.py:170 +#: core/models.py:209 msgid "tshirt size" msgstr "taille de tshirt" -#: core/models.py:171 +#: core/models.py:212 msgid "-" msgstr "-" -#: core/models.py:172 +#: core/models.py:213 msgid "XS" msgstr "XS" -#: core/models.py:173 core/templates/core/base.jinja:320 +#: core/models.py:214 core/templates/core/base.jinja:319 msgid "S" msgstr "S" -#: core/models.py:174 +#: core/models.py:215 msgid "M" msgstr "M" -#: core/models.py:175 +#: core/models.py:216 msgid "L" msgstr "L" -#: core/models.py:176 +#: core/models.py:217 msgid "XL" msgstr "XL" -#: core/models.py:177 +#: core/models.py:218 msgid "XXL" msgstr "XXL" -#: core/models.py:178 +#: core/models.py:219 msgid "XXXL" msgstr "XXXL" -#: core/models.py:181 +#: core/models.py:227 msgid "Student" msgstr "Étudiant" -#: core/models.py:182 +#: core/models.py:228 msgid "Administrative agent" msgstr "Personnel administratif" -#: core/models.py:183 +#: core/models.py:229 msgid "Teacher" msgstr "Enseignant" -#: core/models.py:184 +#: core/models.py:230 msgid "Agent" msgstr "Personnel" -#: core/models.py:185 +#: core/models.py:231 msgid "Doctor" msgstr "Doctorant" -#: core/models.py:186 +#: core/models.py:232 msgid "Former student" msgstr "Ancien étudiant" -#: core/models.py:187 +#: core/models.py:233 msgid "Service" msgstr "Service" -#: core/models.py:189 +#: core/models.py:239 msgid "department" msgstr "département" -#: core/models.py:191 +#: core/models.py:246 msgid "dpt option" msgstr "Filière" -#: core/models.py:192 +#: core/models.py:248 msgid "semester" msgstr "semestre" -#: core/models.py:193 +#: core/models.py:249 msgid "quote" msgstr "citation" -#: core/models.py:194 +#: core/models.py:250 msgid "school" msgstr "école" -#: core/models.py:195 +#: core/models.py:252 msgid "promo" msgstr "promo" -#: core/models.py:196 +#: core/models.py:255 msgid "forum signature" msgstr "signature du forum" -#: core/models.py:197 +#: core/models.py:257 msgid "second email address" msgstr "adresse email secondaire" -#: core/models.py:199 +#: core/models.py:259 msgid "parent phone" msgstr "téléphone des parents" -#: core/models.py:201 +#: core/models.py:262 msgid "parent address" msgstr "adresse des parents" -#: core/models.py:202 +#: core/models.py:265 msgid "is subscriber viewable" msgstr "profil visible par les cotisants" -#: core/models.py:369 +#: core/models.py:476 msgid "A user with that username already exists" msgstr "Un utilisateur de ce nom d'utilisateur existe déjà" -#: core/models.py:494 core/templates/core/macros.jinja:72 +#: core/models.py:614 core/templates/core/macros.jinja:72 #: core/templates/core/macros.jinja:74 core/templates/core/macros.jinja:75 #: core/templates/core/user_detail.jinja:79 #: core/templates/core/user_detail.jinja:80 @@ -2115,109 +2116,109 @@ msgstr "Un utilisateur de ce nom d'utilisateur existe déjà" msgid "Profile" msgstr "Profil" -#: core/models.py:604 +#: core/models.py:734 msgid "Visitor" msgstr "Visiteur" -#: core/models.py:610 +#: core/models.py:740 msgid "do you want to receive the weekmail" msgstr "voulez-vous recevoir le Weekmail" -#: core/models.py:614 +#: core/models.py:742 msgid "show your stats to others" msgstr "montrez vos statistiques aux autres" -#: core/models.py:618 +#: core/models.py:744 msgid "get a notification for every click" msgstr "recevez une notification pour chaque click" -#: core/models.py:622 +#: core/models.py:747 msgid "get a notification for every refilling" msgstr "recevez une notification pour chaque rechargement" -#: core/models.py:646 +#: core/models.py:770 msgid "file name" msgstr "nom du fichier" -#: core/models.py:647 core/models.py:919 +#: core/models.py:772 core/models.py:1111 msgid "parent" msgstr "parent" -#: core/models.py:649 +#: core/models.py:783 msgid "compressed file" msgstr "version allégée" -#: core/models.py:650 +#: core/models.py:790 msgid "thumbnail" msgstr "miniature" -#: core/models.py:651 core/models.py:659 +#: core/models.py:795 core/models.py:810 msgid "owner" msgstr "propriétaire" -#: core/models.py:652 core/models.py:927 core/views/files.py:149 +#: core/models.py:797 core/models.py:1130 core/views/files.py:193 msgid "edit group" msgstr "groupe d'édition" -#: core/models.py:653 core/models.py:928 core/views/files.py:150 +#: core/models.py:800 core/models.py:1133 core/views/files.py:196 msgid "view group" msgstr "groupe de vue" -#: core/models.py:654 +#: core/models.py:802 msgid "is folder" msgstr "est un dossier" -#: core/models.py:655 +#: core/models.py:803 msgid "mime type" msgstr "type mime" -#: core/models.py:656 +#: core/models.py:804 msgid "size" msgstr "taille" -#: core/models.py:660 +#: core/models.py:814 msgid "asked for removal" msgstr "retrait demandé" -#: core/models.py:661 +#: core/models.py:816 msgid "is in the SAS" msgstr "est dans le SAS" -#: core/models.py:700 +#: core/models.py:858 msgid "Character '/' not authorized in name" msgstr "Le caractère '/' n'est pas autorisé dans les noms de fichier" -#: core/models.py:703 core/models.py:708 +#: core/models.py:860 core/models.py:864 msgid "Loop in folder tree" msgstr "Boucle dans l'arborescence des dossiers" -#: core/models.py:712 +#: core/models.py:867 msgid "You can not make a file be a children of a non folder file" msgstr "" "Vous ne pouvez pas mettre un fichier enfant de quelque chose qui n'est pas " "un dossier" -#: core/models.py:716 +#: core/models.py:878 msgid "Duplicate file" msgstr "Un fichier de ce nom existe déjà" -#: core/models.py:730 +#: core/models.py:895 msgid "You must provide a file" msgstr "Vous devez fournir un fichier" -#: core/models.py:857 +#: core/models.py:1035 msgid "Folder: " msgstr "Dossier : " -#: core/models.py:859 +#: core/models.py:1037 msgid "File: " msgstr "Fichier : " -#: core/models.py:911 +#: core/models.py:1094 msgid "page unix name" msgstr "nom unix de la page" -#: core/models.py:915 +#: core/models.py:1100 msgid "" "Enter a valid page name. This value may contain only unaccented letters, " "numbers and ./+/-/_ characters." @@ -2225,51 +2226,51 @@ msgstr "" "Entrez un nom de page correct. Uniquement des lettres non accentuées, " "numéros, et ./+/-/_" -#: core/models.py:922 +#: core/models.py:1118 msgid "page name" msgstr "nom de la page" -#: core/models.py:925 +#: core/models.py:1126 msgid "owner group" msgstr "groupe propriétaire" -#: core/models.py:929 +#: core/models.py:1138 msgid "lock user" msgstr "utilisateur bloquant" -#: core/models.py:930 +#: core/models.py:1144 msgid "lock_timeout" msgstr "décompte du déblocage" -#: core/models.py:957 +#: core/models.py:1175 msgid "Duplicate page" msgstr "Une page de ce nom existe déjà" -#: core/models.py:963 +#: core/models.py:1178 msgid "Loop in page tree" msgstr "Boucle dans l'arborescence des pages" -#: core/models.py:1114 +#: core/models.py:1338 msgid "revision" msgstr "révision" -#: core/models.py:1115 +#: core/models.py:1339 msgid "page title" msgstr "titre de la page" -#: core/models.py:1116 +#: core/models.py:1340 msgid "page content" msgstr "contenu de la page" -#: core/models.py:1158 +#: core/models.py:1382 msgid "url" msgstr "url" -#: core/models.py:1159 +#: core/models.py:1383 msgid "param" msgstr "param" -#: core/models.py:1162 +#: core/models.py:1388 msgid "viewed" msgstr "vue" @@ -2281,6 +2282,10 @@ msgstr "403, Non autorisé" msgid "404, Not Found" msgstr "404. Non trouvé" +#: core/templates/core/500.jinja:8 +msgid "500, Server Error" +msgstr "500, Erreur Serveur" + #: core/templates/core/base.jinja:5 core/templates/core/index.jinja:4 msgid "Welcome!" msgstr "Bienvenue!" @@ -2327,7 +2332,7 @@ msgid "Main" msgstr "Accueil" #: core/templates/core/base.jinja:152 core/templates/core/search.jinja:18 -#: core/views/user.py:199 counter/templates/counter/stats.jinja:17 +#: core/views/user.py:256 counter/templates/counter/stats.jinja:17 msgid "Clubs" msgstr "Clubs" @@ -2360,7 +2365,7 @@ msgid "Services" msgstr "Services" #: core/templates/core/base.jinja:158 core/templates/core/file.jinja:20 -#: core/views/files.py:75 +#: core/views/files.py:86 msgid "Files" msgstr "Fichiers" @@ -2372,67 +2377,67 @@ msgstr "Partenaires" msgid "Help" msgstr "Aide" -#: core/templates/core/base.jinja:200 +#: core/templates/core/base.jinja:199 msgid "Contacts" msgstr "Contacts" -#: core/templates/core/base.jinja:201 +#: core/templates/core/base.jinja:200 msgid "Legal notices" msgstr "Mentions légales" -#: core/templates/core/base.jinja:202 +#: core/templates/core/base.jinja:201 msgid "Intellectual property" msgstr "Propriété intellectuelle" -#: core/templates/core/base.jinja:203 +#: core/templates/core/base.jinja:202 msgid "Help & Documentation" msgstr "Aide & Documentation" -#: core/templates/core/base.jinja:204 +#: core/templates/core/base.jinja:203 msgid "R&D" msgstr "R&D" -#: core/templates/core/base.jinja:205 +#: core/templates/core/base.jinja:204 msgid "Former website" msgstr "Ancien site" -#: core/templates/core/base.jinja:207 +#: core/templates/core/base.jinja:206 msgid "Site made by good people" msgstr "Site réalisé par des gens bons" -#: core/templates/core/base.jinja:304 +#: core/templates/core/base.jinja:303 msgid "https://path/to/image.gif" msgstr "https://chemin/vers/image.gif" -#: core/templates/core/base.jinja:306 +#: core/templates/core/base.jinja:305 msgid "alternative text" msgstr "texte alternatif" -#: core/templates/core/base.jinja:316 +#: core/templates/core/base.jinja:315 msgid "Image" msgstr "Image" -#: core/templates/core/base.jinja:317 +#: core/templates/core/base.jinja:316 msgid "Link" msgstr "Lien" -#: core/templates/core/base.jinja:318 +#: core/templates/core/base.jinja:317 msgid "sup" msgstr "exp" -#: core/templates/core/base.jinja:319 +#: core/templates/core/base.jinja:318 msgid "sub" msgstr "ind" -#: core/templates/core/base.jinja:321 +#: core/templates/core/base.jinja:320 msgid "U" msgstr "S" -#: core/templates/core/base.jinja:322 +#: core/templates/core/base.jinja:321 msgid "I" msgstr "I" -#: core/templates/core/base.jinja:323 +#: core/templates/core/base.jinja:322 msgid "B" msgstr "G" @@ -2620,7 +2625,7 @@ msgstr "Cotisant jusqu'au %(subscription_end)s" msgid "Account number: " msgstr "Numero de compte : " -#: core/templates/core/macros.jinja:88 launderette/models.py:155 +#: core/templates/core/macros.jinja:88 launderette/models.py:193 msgid "Slot" msgstr "Créneau" @@ -2893,7 +2898,7 @@ msgid "Eboutic invoices" msgstr "Facture eboutic" #: core/templates/core/user_account.jinja:57 -#: core/templates/core/user_tools.jinja:35 counter/views.py:601 +#: core/templates/core/user_tools.jinja:35 counter/views.py:745 msgid "Etickets" msgstr "Etickets" @@ -3049,8 +3054,8 @@ msgstr "Parrains de %(user_name)s" msgid "Show family picture" msgstr "Voir une image de la famille" -#: core/templates/core/user_godfathers.jinja:12 core/views/user.py:171 -#: core/views/user.py:395 +#: core/templates/core/user_godfathers.jinja:12 core/views/user.py:214 +#: core/views/user.py:486 msgid "Godfathers" msgstr "Parrains" @@ -3063,7 +3068,7 @@ msgstr "Voir l'arbre des ancêtres" msgid "No godfathers" msgstr "Pas de parrains" -#: core/templates/core/user_godfathers.jinja:25 core/views/user.py:393 +#: core/templates/core/user_godfathers.jinja:25 core/views/user.py:484 msgid "Godchildren" msgstr "Fillots" @@ -3119,11 +3124,11 @@ msgid "%(user_name)s's pictures" msgstr "Photos de %(user_name)s" #: core/templates/core/user_preferences.jinja:4 -#: core/templates/core/user_preferences.jinja:8 core/views/user.py:193 +#: core/templates/core/user_preferences.jinja:8 core/views/user.py:246 msgid "Preferences" msgstr "Préférences" -#: core/templates/core/user_preferences.jinja:14 trombi/views.py:48 +#: core/templates/core/user_preferences.jinja:14 trombi/views.py:55 msgid "Trombi" msgstr "Trombi" @@ -3166,7 +3171,7 @@ msgstr "Outils utilisateurs" msgid "Sith management" msgstr "Gestion de Sith" -#: core/templates/core/user_tools.jinja:14 core/views/user.py:205 +#: core/templates/core/user_tools.jinja:14 core/views/user.py:266 msgid "Groups" msgstr "Groupes" @@ -3184,8 +3189,8 @@ msgstr "Cotisations" msgid "Subscription stats" msgstr "Statistiques de cotisation" -#: core/templates/core/user_tools.jinja:27 counter/views.py:571 -#: counter/views.py:737 +#: core/templates/core/user_tools.jinja:27 counter/views.py:715 +#: counter/views.py:923 msgid "Counters" msgstr "Comptoirs" @@ -3202,16 +3207,16 @@ msgid "Product types management" msgstr "Gestion des types de produit" #: core/templates/core/user_tools.jinja:33 -#: counter/templates/counter/cash_summary_list.jinja:23 counter/views.py:591 +#: counter/templates/counter/cash_summary_list.jinja:23 counter/views.py:735 msgid "Cash register summaries" msgstr "Relevés de caisse" #: core/templates/core/user_tools.jinja:34 -#: counter/templates/counter/invoices_call.jinja:4 counter/views.py:596 +#: counter/templates/counter/invoices_call.jinja:4 counter/views.py:740 msgid "Invoices call" msgstr "Appels à facture" -#: core/templates/core/user_tools.jinja:42 core/views/user.py:215 +#: core/templates/core/user_tools.jinja:42 core/views/user.py:286 #: counter/templates/counter/counter_list.jinja:18 #: counter/templates/counter/counter_list.jinja:34 #: counter/templates/counter/counter_list.jinja:56 @@ -3302,42 +3307,42 @@ msgstr "Convertir de la syntaxe dokuwiki/BBcode vers Markdown" msgid "Trombi tools" msgstr "Outils Trombi" -#: core/views/files.py:74 +#: core/views/files.py:82 msgid "Add a new folder" msgstr "Ajouter un nouveau dossier" -#: core/views/files.py:87 +#: core/views/files.py:103 #, python-format msgid "Error creating folder %(folder_name)s: %(msg)s" msgstr "Erreur de création du dossier %(folder_name)s : %(msg)s" -#: core/views/files.py:97 core/views/forms.py:229 core/views/forms.py:233 -#: sas/views.py:70 +#: core/views/files.py:123 core/views/forms.py:302 core/views/forms.py:309 +#: sas/views.py:93 #, python-format msgid "Error uploading file %(file_name)s: %(msg)s" msgstr "Erreur d'envoi du fichier %(file_name)s : %(msg)s" -#: core/views/files.py:151 sas/views.py:288 +#: core/views/files.py:198 sas/views.py:356 msgid "Apply rights recursively" msgstr "Appliquer les droits récursivement" -#: core/views/forms.py:89 +#: core/views/forms.py:101 msgid "Help on the syntax" msgstr "Aide sur la syntaxe" -#: core/views/forms.py:103 core/views/forms.py:106 +#: core/views/forms.py:118 core/views/forms.py:126 msgid "Choose file" msgstr "Choisir un fichier" -#: core/views/forms.py:118 core/views/forms.py:121 +#: core/views/forms.py:142 core/views/forms.py:150 msgid "Choose user" msgstr "Choisir un utilisateur" -#: core/views/forms.py:145 +#: core/views/forms.py:182 msgid "Username, email, or account number" msgstr "Nom d'utilisateur, email, ou numéro de compte AE" -#: core/views/forms.py:187 +#: core/views/forms.py:248 msgid "" "Profile: you need to be visible on the picture, in order to be recognized (e." "g. by the barmen)" @@ -3345,199 +3350,199 @@ msgstr "" "Photo de profil: vous devez être visible sur la photo afin d'être reconnu " "(par exemple par les barmen)" -#: core/views/forms.py:188 +#: core/views/forms.py:250 msgid "Avatar: used on the forum" msgstr "Avatar : utilisé sur le forum" -#: core/views/forms.py:189 +#: core/views/forms.py:251 msgid "Scrub: let other know how your scrub looks like!" msgstr "Blouse : montrez aux autres à quoi ressemble votre blouse !" -#: core/views/forms.py:234 +#: core/views/forms.py:313 msgid "Bad image format, only jpeg, png, and gif are accepted" msgstr "Mauvais format d'image, seuls les jpeg, png, et gif sont acceptés" -#: core/views/forms.py:254 +#: core/views/forms.py:333 msgid "Godfather" msgstr "Parrain" -#: core/views/forms.py:254 +#: core/views/forms.py:333 msgid "Godchild" msgstr "Fillot" -#: core/views/forms.py:265 core/views/forms.py:278 election/models.py:22 -#: election/views.py:128 +#: core/views/forms.py:350 core/views/forms.py:368 election/models.py:24 +#: election/views.py:167 msgid "edit groups" msgstr "groupe d'édition" -#: core/views/forms.py:266 core/views/forms.py:279 election/models.py:26 -#: election/views.py:129 +#: core/views/forms.py:353 core/views/forms.py:371 election/models.py:31 +#: election/views.py:170 msgid "view groups" msgstr "groupe de vue" -#: core/views/user.py:176 trombi/templates/trombi/export.jinja:25 +#: core/views/user.py:223 trombi/templates/trombi/export.jinja:25 #: trombi/templates/trombi/user_profile.jinja:11 msgid "Pictures" msgstr "Photos" -#: core/views/user.py:397 +#: core/views/user.py:488 msgid "Family" msgstr "Famille" -#: core/views/user.py:480 +#: core/views/user.py:630 msgid "User already has a profile picture" msgstr "L'utilisateur a déjà une photo de profil" -#: counter/migrations/0013_customer_recorded_products.py:23 +#: counter/migrations/0013_customer_recorded_products.py:26 msgid "Ecocup regularization" msgstr "Régularization des ecocups" -#: counter/models.py:52 +#: counter/models.py:53 msgid "account id" msgstr "numéro de compte" -#: counter/models.py:54 +#: counter/models.py:55 msgid "recorded product" msgstr "produits consignés" -#: counter/models.py:57 +#: counter/models.py:58 msgid "customer" msgstr "client" -#: counter/models.py:58 +#: counter/models.py:59 msgid "customers" msgstr "clients" -#: counter/models.py:90 counter/templates/counter/counter_click.jinja:48 +#: counter/models.py:95 counter/templates/counter/counter_click.jinja:48 #: counter/templates/counter/counter_click.jinja:82 msgid "Not enough money" msgstr "Solde insuffisant" -#: counter/models.py:119 counter/models.py:142 +#: counter/models.py:125 counter/models.py:152 msgid "product type" msgstr "type du produit" -#: counter/models.py:145 +#: counter/models.py:158 msgid "purchase price" msgstr "prix d'achat" -#: counter/models.py:146 +#: counter/models.py:159 msgid "selling price" msgstr "prix de vente" -#: counter/models.py:147 +#: counter/models.py:160 msgid "special selling price" msgstr "prix de vente spécial" -#: counter/models.py:148 +#: counter/models.py:162 msgid "icon" msgstr "icône" -#: counter/models.py:150 +#: counter/models.py:165 msgid "limit age" msgstr "âge limite" -#: counter/models.py:151 +#: counter/models.py:166 msgid "tray price" msgstr "prix plateau" -#: counter/models.py:152 +#: counter/models.py:170 msgid "parent product" msgstr "produit parent" -#: counter/models.py:154 +#: counter/models.py:176 msgid "buying groups" msgstr "groupe d'achat" -#: counter/models.py:155 election/models.py:37 +#: counter/models.py:178 election/models.py:52 msgid "archived" msgstr "archivé" -#: counter/models.py:158 counter/models.py:567 +#: counter/models.py:181 counter/models.py:700 msgid "product" msgstr "produit" -#: counter/models.py:186 +#: counter/models.py:212 msgid "products" msgstr "produits" -#: counter/models.py:187 +#: counter/models.py:215 msgid "counter type" msgstr "type de comptoir" -#: counter/models.py:189 +#: counter/models.py:217 msgid "Bar" msgstr "Bar" -#: counter/models.py:189 +#: counter/models.py:217 msgid "Office" msgstr "Bureau" -#: counter/models.py:189 counter/templates/counter/counter_list.jinja:11 +#: counter/models.py:217 counter/templates/counter/counter_list.jinja:11 #: eboutic/templates/eboutic/eboutic_main.jinja:4 #: eboutic/templates/eboutic/eboutic_main.jinja:24 #: eboutic/templates/eboutic/eboutic_makecommand.jinja:8 #: eboutic/templates/eboutic/eboutic_payment_result.jinja:4 -#: sith/settings.py:377 sith/settings.py:385 +#: sith/settings.py:376 sith/settings.py:384 msgid "Eboutic" msgstr "Eboutic" -#: counter/models.py:190 +#: counter/models.py:220 msgid "sellers" msgstr "vendeurs" -#: counter/models.py:193 launderette/models.py:151 +#: counter/models.py:228 launderette/models.py:188 msgid "token" msgstr "jeton" -#: counter/models.py:196 counter/models.py:465 counter/models.py:483 -#: launderette/models.py:39 stock/models.py:39 +#: counter/models.py:231 counter/models.py:587 counter/models.py:611 +#: launderette/models.py:40 stock/models.py:42 msgid "counter" msgstr "comptoir" -#: counter/models.py:304 +#: counter/models.py:359 msgid "bank" msgstr "banque" -#: counter/models.py:306 counter/models.py:354 +#: counter/models.py:361 counter/models.py:451 msgid "is validated" msgstr "est validé" -#: counter/models.py:309 +#: counter/models.py:364 msgid "refilling" msgstr "rechargement" -#: counter/models.py:347 eboutic/models.py:129 +#: counter/models.py:428 eboutic/models.py:146 msgid "unit price" msgstr "prix unitaire" -#: counter/models.py:348 counter/models.py:556 eboutic/models.py:130 +#: counter/models.py:429 counter/models.py:687 eboutic/models.py:147 msgid "quantity" msgstr "quantité" -#: counter/models.py:353 +#: counter/models.py:448 msgid "Sith account" msgstr "Compte utilisateur" -#: counter/models.py:353 sith/settings.py:370 sith/settings.py:375 -#: sith/settings.py:397 +#: counter/models.py:448 sith/settings.py:369 sith/settings.py:374 +#: sith/settings.py:392 msgid "Credit card" msgstr "Carte bancaire" -#: counter/models.py:357 +#: counter/models.py:454 msgid "selling" msgstr "vente" -#: counter/models.py:376 +#: counter/models.py:477 msgid "Unknown event" msgstr "Événement inconnu" -#: counter/models.py:377 +#: counter/models.py:478 #, python-format msgid "Eticket bought for the event %(event)s" msgstr "Eticket acheté pour l'événement %(event)s" -#: counter/models.py:379 counter/models.py:391 +#: counter/models.py:480 counter/models.py:494 #, python-format msgid "" "You bought an eticket for the event %(event)s.\n" @@ -3546,51 +3551,51 @@ msgstr "" "Vous avez acheté un Eticket pour l'événement %(event)s.\n" "Vous pouvez le télécharger sur cette page: %(url)s" -#: counter/models.py:468 +#: counter/models.py:591 msgid "last activity date" msgstr "dernière activité" -#: counter/models.py:471 +#: counter/models.py:594 msgid "permanency" msgstr "permanence" -#: counter/models.py:486 +#: counter/models.py:615 msgid "emptied" msgstr "coffre vidée" -#: counter/models.py:489 +#: counter/models.py:618 msgid "cash register summary" msgstr "relevé de caisse" -#: counter/models.py:554 +#: counter/models.py:684 msgid "cash summary" msgstr "relevé" -#: counter/models.py:555 +#: counter/models.py:686 msgid "value" msgstr "valeur" -#: counter/models.py:557 +#: counter/models.py:688 msgid "check" msgstr "chèque" -#: counter/models.py:560 +#: counter/models.py:691 msgid "cash register summary item" msgstr "élément de relevé de caisse" -#: counter/models.py:568 +#: counter/models.py:703 msgid "banner" msgstr "bannière" -#: counter/models.py:569 +#: counter/models.py:705 msgid "event date" msgstr "date de l'événement" -#: counter/models.py:570 +#: counter/models.py:707 msgid "event title" msgstr "titre de l'événement" -#: counter/models.py:571 +#: counter/models.py:709 msgid "secret" msgstr "secret" @@ -3642,7 +3647,7 @@ msgstr "Liste des relevés de caisse" msgid "Theoric sums" msgstr "Sommes théoriques" -#: counter/templates/counter/cash_summary_list.jinja:36 counter/views.py:856 +#: counter/templates/counter/cash_summary_list.jinja:36 counter/views.py:1092 msgid "Emptied" msgstr "Coffre vidé" @@ -3861,149 +3866,149 @@ msgstr "Temps" msgid "Top 100 barman %(counter_name)s (all semesters)" msgstr "Top 100 barman %(counter_name)s (tous les semestres)" -#: counter/views.py:105 +#: counter/views.py:130 msgid "User not found" msgstr "Utilisateur non trouvé" -#: counter/views.py:141 +#: counter/views.py:187 msgid "Cash summary" msgstr "Relevé de caisse" -#: counter/views.py:147 +#: counter/views.py:201 msgid "Last operations" msgstr "Dernières opérations" -#: counter/views.py:154 +#: counter/views.py:216 msgid "Take items from stock" msgstr "Prendre des éléments du stock" -#: counter/views.py:191 +#: counter/views.py:269 msgid "Bad credentials" msgstr "Mauvais identifiants" -#: counter/views.py:193 +#: counter/views.py:271 msgid "User is not barman" msgstr "L'utilisateur n'est pas barman." -#: counter/views.py:197 +#: counter/views.py:276 msgid "Bad location, someone is already logged in somewhere else" msgstr "Mauvais comptoir, quelqu'un est déjà connecté ailleurs" -#: counter/views.py:425 +#: counter/views.py:544 msgid "END" msgstr "FIN" -#: counter/views.py:427 +#: counter/views.py:546 msgid "CAN" msgstr "ANN" -#: counter/views.py:450 +#: counter/views.py:569 msgid "You have not enough money to buy all the basket" msgstr "Vous n'avez pas assez d'argent pour acheter le panier" -#: counter/views.py:561 +#: counter/views.py:709 msgid "Counter administration" msgstr "Administration des comptoirs" -#: counter/views.py:566 +#: counter/views.py:711 msgid "Stocks" msgstr "Stocks" -#: counter/views.py:576 +#: counter/views.py:720 msgid "Products" msgstr "Produits" -#: counter/views.py:581 +#: counter/views.py:725 msgid "Archived products" msgstr "Produits archivés" -#: counter/views.py:586 +#: counter/views.py:730 msgid "Product types" msgstr "Types de produit" -#: counter/views.py:734 +#: counter/views.py:909 msgid "Parent product" msgstr "Produit parent" -#: counter/views.py:735 +#: counter/views.py:915 msgid "Buying groups" msgstr "Groupes d'achat" -#: counter/views.py:835 +#: counter/views.py:1049 msgid "10 cents" msgstr "10 centimes" -#: counter/views.py:836 +#: counter/views.py:1050 msgid "20 cents" msgstr "20 centimes" -#: counter/views.py:837 +#: counter/views.py:1051 msgid "50 cents" msgstr "50 centimes" -#: counter/views.py:838 +#: counter/views.py:1052 msgid "1 euro" msgstr "1 €" -#: counter/views.py:839 +#: counter/views.py:1053 msgid "2 euros" msgstr "2 €" -#: counter/views.py:840 +#: counter/views.py:1054 msgid "5 euros" msgstr "5 €" -#: counter/views.py:841 +#: counter/views.py:1055 msgid "10 euros" msgstr "10 €" -#: counter/views.py:842 +#: counter/views.py:1056 msgid "20 euros" msgstr "20 €" -#: counter/views.py:843 +#: counter/views.py:1057 msgid "50 euros" msgstr "50 €" -#: counter/views.py:844 +#: counter/views.py:1059 msgid "100 euros" msgstr "100 €" -#: counter/views.py:845 counter/views.py:847 counter/views.py:849 -#: counter/views.py:851 counter/views.py:853 +#: counter/views.py:1062 counter/views.py:1068 counter/views.py:1074 +#: counter/views.py:1080 counter/views.py:1086 msgid "Check amount" msgstr "Montant du chèque" -#: counter/views.py:846 counter/views.py:848 counter/views.py:850 -#: counter/views.py:852 counter/views.py:854 +#: counter/views.py:1065 counter/views.py:1071 counter/views.py:1077 +#: counter/views.py:1083 counter/views.py:1089 msgid "Check quantity" msgstr "Nombre de chèque" -#: counter/views.py:1262 +#: counter/views.py:1725 msgid "people(s)" msgstr "personne(s)" -#: eboutic/models.py:74 +#: eboutic/models.py:86 msgid "validated" msgstr "validé" -#: eboutic/models.py:87 +#: eboutic/models.py:99 msgid "Invoice already validated" msgstr "Facture déjà validée" -#: eboutic/models.py:126 +#: eboutic/models.py:143 msgid "product id" msgstr "ID du produit" -#: eboutic/models.py:127 +#: eboutic/models.py:144 msgid "product name" msgstr "nom du produit" -#: eboutic/models.py:128 +#: eboutic/models.py:145 msgid "product type id" msgstr "id du type du produit" -#: eboutic/models.py:140 +#: eboutic/models.py:161 msgid "basket" msgstr "panier" @@ -4042,39 +4047,39 @@ msgstr "Le paiement a été effectué" msgid "Return to eboutic" msgstr "Retourner à l'eboutic" -#: eboutic/views.py:168 +#: eboutic/views.py:217 msgid "You do not have enough money to buy the basket" msgstr "Vous n'avez pas assez d'argent pour acheter le panier" -#: election/models.py:15 +#: election/models.py:16 msgid "start candidature" msgstr "début des candidatures" -#: election/models.py:16 +#: election/models.py:17 msgid "end candidature" msgstr "fin des candidatures" -#: election/models.py:30 election/views.py:130 +#: election/models.py:38 election/views.py:173 msgid "vote groups" msgstr "groupe de vote" -#: election/models.py:34 election/views.py:131 +#: election/models.py:45 election/views.py:180 msgid "candidature groups" msgstr "groupe de candidature" -#: election/models.py:97 election/models.py:135 +#: election/models.py:114 election/models.py:158 msgid "election" msgstr "élection" -#: election/models.py:100 +#: election/models.py:118 msgid "max choice" msgstr "nombre de choix maxi" -#: election/models.py:156 +#: election/models.py:184 msgid "election list" msgstr "liste électorale" -#: election/models.py:175 +#: election/models.py:206 msgid "candidature" msgstr "candidature" @@ -4122,7 +4127,7 @@ msgstr "Vous avez déjà soumis votre vote." msgid "You have voted in this election." msgstr "Vous avez déjà voté pour cette élection." -#: election/templates/election/election_detail.jinja:266 election/views.py:84 +#: election/templates/election/election_detail.jinja:266 election/views.py:106 msgid "Blank vote" msgstr "Vote blanc" @@ -4191,87 +4196,87 @@ msgstr "au" msgid "Polls open from" msgstr "Votes ouverts du" -#: election/views.py:45 +#: election/views.py:57 msgid "You have selected too much candidates." msgstr "Vous avez sélectionné trop de candidats." -#: election/views.py:60 +#: election/views.py:73 msgid "User to candidate" msgstr "Utilisateur se présentant" -#: election/views.py:104 +#: election/views.py:131 msgid "This role already exists for this election" msgstr "Ce rôle existe déjà pour cette élection" -#: election/views.py:137 +#: election/views.py:194 msgid "Start candidature" msgstr "Début des candidatures" -#: election/views.py:139 +#: election/views.py:200 msgid "End candidature" msgstr "Fin des candidatures" -#: forum/models.py:56 +#: forum/models.py:60 msgid "is a category" msgstr "est une catégorie" -#: forum/models.py:58 +#: forum/models.py:65 msgid "owner club" msgstr "club propriétaire" -#: forum/models.py:64 +#: forum/models.py:81 msgid "number to choose a specific forum ordering" msgstr "numéro spécifiant l'ordre d'affichage" -#: forum/models.py:66 forum/models.py:196 +#: forum/models.py:86 forum/models.py:238 msgid "the last message" msgstr "le dernier message" -#: forum/models.py:67 +#: forum/models.py:90 msgid "number of topics" msgstr "nombre de sujets" -#: forum/models.py:144 +#: forum/models.py:177 msgid "You can not make loops in forums" msgstr "Vous ne pouvez pas faire de boucles dans les forums" -#: forum/models.py:195 +#: forum/models.py:233 msgid "subscribed users" msgstr "utilisateurs abonnés" -#: forum/models.py:199 +#: forum/models.py:243 msgid "number of messages" msgstr "nombre de messages" -#: forum/models.py:247 +#: forum/models.py:297 msgid "message" msgstr "message" -#: forum/models.py:249 +#: forum/models.py:300 msgid "readers" msgstr "lecteurs" -#: forum/models.py:250 +#: forum/models.py:302 msgid "is deleted" msgstr "est supprimé" -#: forum/models.py:314 +#: forum/models.py:382 msgid "Message edited by" msgstr "Message édité par" -#: forum/models.py:315 +#: forum/models.py:383 msgid "Message deleted by" msgstr "Message supprimé par" -#: forum/models.py:316 +#: forum/models.py:384 msgid "Message undeleted by" msgstr "Message restauré par" -#: forum/models.py:324 +#: forum/models.py:392 msgid "action" msgstr "action" -#: forum/models.py:339 +#: forum/models.py:409 msgid "last read date" msgstr "dernière date de lecture" @@ -4347,47 +4352,47 @@ msgstr "Enlever des favoris" msgid "Mark as favorite" msgstr "Ajouter aux favoris" -#: forum/views.py:122 +#: forum/views.py:138 msgid "Apply rights and club owner recursively" msgstr "Appliquer les droits et le club propriétaire récursivement" -#: forum/views.py:312 +#: forum/views.py:356 #, python-format msgid "%(author)s said" msgstr "Citation de %(author)s" -#: launderette/models.py:42 +#: launderette/models.py:44 #: launderette/templates/launderette/launderette_book.jinja:5 #: launderette/templates/launderette/launderette_book_choose.jinja:4 #: launderette/templates/launderette/launderette_main.jinja:4 msgid "Launderette" msgstr "Laverie" -#: launderette/models.py:85 launderette/models.py:111 +#: launderette/models.py:92 launderette/models.py:127 msgid "launderette" msgstr "laverie" -#: launderette/models.py:87 +#: launderette/models.py:97 msgid "is working" msgstr "fonctionne" -#: launderette/models.py:90 +#: launderette/models.py:100 msgid "Machine" msgstr "Machine" -#: launderette/models.py:113 +#: launderette/models.py:132 msgid "borrow date" msgstr "date d'emprunt" -#: launderette/models.py:117 +#: launderette/models.py:138 msgid "Token" msgstr "Jeton" -#: launderette/models.py:123 +#: launderette/models.py:144 msgid "Token name can not be blank" msgstr "Le nom du jeton ne peut pas être vide" -#: launderette/models.py:150 +#: launderette/models.py:185 msgid "machine" msgstr "machine" @@ -4412,12 +4417,12 @@ msgid "Washing and drying" msgstr "Lavage et séchage" #: launderette/templates/launderette/launderette_book.jinja:27 -#: sith/settings.py:575 +#: sith/settings.py:520 msgid "Washing" msgstr "Lavage" #: launderette/templates/launderette/launderette_book.jinja:31 -#: sith/settings.py:575 +#: sith/settings.py:520 msgid "Drying" msgstr "Séchage" @@ -4442,29 +4447,29 @@ msgstr "Éditer la page de présentation" msgid "Book launderette slot" msgstr "Réserver un créneau de laverie" -#: launderette/views.py:183 +#: launderette/views.py:228 msgid "Action" msgstr "Action" -#: launderette/views.py:186 +#: launderette/views.py:240 msgid "Tokens, separated by spaces" msgstr "Jetons, séparés par des espaces" -#: launderette/views.py:201 launderette/views.py:215 +#: launderette/views.py:260 launderette/views.py:282 #, python-format msgid "Token %(token_name)s does not exists" msgstr "Le jeton %(token_name)s n'existe pas" -#: launderette/views.py:209 +#: launderette/views.py:271 #, python-format msgid "Token %(token_name)s already exists" msgstr "Un jeton %(token_name)s existe déjà" -#: launderette/views.py:267 +#: launderette/views.py:338 msgid "User has booked no slot" msgstr "L'utilisateur n'a pas réservé de créneau" -#: launderette/views.py:360 +#: launderette/views.py:452 msgid "Token not found" msgstr "Jeton non trouvé" @@ -4489,7 +4494,7 @@ msgstr "Recherche inversée" msgid "Quick search" msgstr "Recherche rapide" -#: matmat/views.py:75 +#: matmat/views.py:73 msgid "Indifferent" msgstr "Indifferent" @@ -4497,7 +4502,7 @@ msgstr "Indifferent" msgid "Sex" msgstr "Sexe" -#: matmat/views.py:78 +#: matmat/views.py:79 msgid "Last/First name or nickname" msgstr "Nom de famille, prénom ou surnom" @@ -4509,15 +4514,15 @@ msgstr "Fusionner deux utilisateurs" msgid "Merge" msgstr "Fusion" -#: rootplace/views.py:91 +#: rootplace/views.py:92 msgid "User that will be kept" msgstr "Utilisateur qui sera conservé" -#: rootplace/views.py:92 +#: rootplace/views.py:95 msgid "User that will be deleted" msgstr "Utilisateur qui sera supprimé" -#: sas/models.py:186 +#: sas/models.py:243 msgid "picture" msgstr "photo" @@ -4575,24 +4580,24 @@ msgstr "Demander le retrait" msgid "Asked for removal" msgstr "Retrait demandé" -#: sas/views.py:47 +#: sas/views.py:48 msgid "Add a new album" msgstr "Ajouter un nouvel album" -#: sas/views.py:48 +#: sas/views.py:52 msgid "Upload images" msgstr "Envoyer les images" -#: sas/views.py:58 +#: sas/views.py:70 #, python-format msgid "Error creating album %(album)s: %(msg)s" msgstr "Erreur de création de l'album %(album)s : %(msg)s" -#: sas/views.py:78 trombi/templates/trombi/detail.jinja:15 +#: sas/views.py:105 trombi/templates/trombi/detail.jinja:15 msgid "Add user" msgstr "Ajouter une personne" -#: sith/settings.py:214 +#: sith/settings.py:215 msgid "English" msgstr "Anglais" @@ -4600,267 +4605,267 @@ msgstr "Anglais" msgid "French" msgstr "Français" -#: sith/settings.py:351 +#: sith/settings.py:350 msgid "TC" msgstr "TC" -#: sith/settings.py:352 +#: sith/settings.py:351 msgid "IMSI" msgstr "IMSI" -#: sith/settings.py:353 +#: sith/settings.py:352 msgid "IMAP" msgstr "IMAP" -#: sith/settings.py:354 +#: sith/settings.py:353 msgid "INFO" msgstr "INFO" -#: sith/settings.py:355 +#: sith/settings.py:354 msgid "GI" msgstr "GI" -#: sith/settings.py:356 +#: sith/settings.py:355 msgid "E" msgstr "E" -#: sith/settings.py:357 +#: sith/settings.py:356 msgid "EE" msgstr "EE" -#: sith/settings.py:358 +#: sith/settings.py:357 msgid "GESC" msgstr "GESC" -#: sith/settings.py:359 +#: sith/settings.py:358 msgid "GMC" msgstr "GMC" -#: sith/settings.py:360 +#: sith/settings.py:359 msgid "MC" msgstr "MC" -#: sith/settings.py:361 +#: sith/settings.py:360 msgid "EDIM" msgstr "EDIM" -#: sith/settings.py:362 +#: sith/settings.py:361 msgid "Humanities" msgstr "Humanités" -#: sith/settings.py:363 +#: sith/settings.py:362 msgid "N/A" msgstr "N/A" -#: sith/settings.py:367 sith/settings.py:374 sith/settings.py:395 +#: sith/settings.py:366 sith/settings.py:373 sith/settings.py:390 msgid "Check" msgstr "Chèque" -#: sith/settings.py:368 sith/settings.py:376 sith/settings.py:396 +#: sith/settings.py:367 sith/settings.py:375 sith/settings.py:391 msgid "Cash" msgstr "Espèces" -#: sith/settings.py:369 +#: sith/settings.py:368 msgid "Transfert" msgstr "Virement" -#: sith/settings.py:382 +#: sith/settings.py:381 msgid "Belfort" msgstr "Belfort" -#: sith/settings.py:383 +#: sith/settings.py:382 msgid "Sevenans" msgstr "Sevenans" -#: sith/settings.py:384 +#: sith/settings.py:383 msgid "Montbéliard" msgstr "Montbéliard" -#: sith/settings.py:442 +#: sith/settings.py:434 msgid "One semester" msgstr "Un semestre, 15 €" -#: sith/settings.py:447 +#: sith/settings.py:435 msgid "Two semesters" msgstr "Deux semestres, 28 €" -#: sith/settings.py:452 +#: sith/settings.py:437 msgid "Common core cursus" msgstr "Cursus tronc commun, 45 €" -#: sith/settings.py:457 +#: sith/settings.py:441 msgid "Branch cursus" msgstr "Cursus branche, 45 €" -#: sith/settings.py:462 +#: sith/settings.py:442 msgid "Alternating cursus" msgstr "Cursus alternant, 30 €" -#: sith/settings.py:467 +#: sith/settings.py:443 msgid "Honorary member" msgstr "Membre honoraire, 0 €" -#: sith/settings.py:472 +#: sith/settings.py:444 msgid "Assidu member" msgstr "Membre d'Assidu, 0 €" -#: sith/settings.py:477 +#: sith/settings.py:445 msgid "Amicale/DOCEO member" msgstr "Membre de l'Amicale/DOCEO, 0 €" -#: sith/settings.py:482 +#: sith/settings.py:446 msgid "UT network member" msgstr "Cotisant du réseau UT, 0 €" -#: sith/settings.py:487 +#: sith/settings.py:447 msgid "CROUS member" msgstr "Membres du CROUS, 0 €" -#: sith/settings.py:492 +#: sith/settings.py:448 msgid "Sbarro/ESTA member" msgstr "Membre de Sbarro ou de l'ESTA, 15 €" -#: sith/settings.py:497 +#: sith/settings.py:450 msgid "One semester Welcome Week" msgstr "Un semestre Welcome Week" -#: sith/settings.py:502 +#: sith/settings.py:454 msgid "Two months for free" msgstr "Deux mois gratuits" -#: sith/settings.py:507 +#: sith/settings.py:455 msgid "Eurok's volunteer" msgstr "Bénévole Eurockéennes" -#: sith/settings.py:512 +#: sith/settings.py:457 msgid "Six weeks for free" msgstr "6 semaines gratuites" -#: sith/settings.py:517 +#: sith/settings.py:461 msgid "One day" msgstr "Un jour" -#: sith/settings.py:539 +#: sith/settings.py:480 msgid "President" msgstr "Président" -#: sith/settings.py:540 +#: sith/settings.py:481 msgid "Vice-President" msgstr "Vice-Président" -#: sith/settings.py:541 +#: sith/settings.py:482 msgid "Treasurer" msgstr "Trésorier" -#: sith/settings.py:542 +#: sith/settings.py:483 msgid "Communication supervisor" msgstr "Responsable communication" -#: sith/settings.py:543 +#: sith/settings.py:484 msgid "Secretary" msgstr "Secrétaire" -#: sith/settings.py:544 +#: sith/settings.py:485 msgid "IT supervisor" msgstr "Responsable info" -#: sith/settings.py:545 +#: sith/settings.py:486 msgid "Board member" msgstr "Membre du bureau" -#: sith/settings.py:546 +#: sith/settings.py:487 msgid "Active member" msgstr "Membre actif" -#: sith/settings.py:547 +#: sith/settings.py:488 msgid "Curious" msgstr "Curieux" -#: sith/settings.py:582 +#: sith/settings.py:524 msgid "A new poster needs to be moderated" msgstr "Une nouvelle affiche a besoin d'être modérée" -#: sith/settings.py:583 +#: sith/settings.py:525 msgid "A new mailing list needs to be moderated" msgstr "Une nouvelle mailing list a besoin d'être modérée" -#: sith/settings.py:584 +#: sith/settings.py:526 #, python-format msgid "There are %s fresh news to be moderated" msgstr "Il y a %s nouvelles toutes fraîches à modérer" -#: sith/settings.py:585 +#: sith/settings.py:527 msgid "New files to be moderated" msgstr "Nouveaux fichiers à modérer" -#: sith/settings.py:586 +#: sith/settings.py:528 #, python-format msgid "There are %s pictures to be moderated in the SAS" msgstr "Il y a %s photos à modérer dans le SAS" -#: sith/settings.py:587 +#: sith/settings.py:529 msgid "You've been identified on some pictures" msgstr "Vous avez été identifié sur des photos" -#: sith/settings.py:588 +#: sith/settings.py:530 #, python-format msgid "You just refilled of %s €" msgstr "Vous avez rechargé votre compte de %s€" -#: sith/settings.py:589 +#: sith/settings.py:531 #, python-format msgid "You just bought %s" msgstr "Vous avez acheté %s" -#: sith/settings.py:590 +#: sith/settings.py:532 msgid "You have a notification" msgstr "Vous avez une notification" -#: sith/settings.py:602 +#: sith/settings.py:544 msgid "Success!" msgstr "Succès !" -#: sith/settings.py:603 +#: sith/settings.py:545 msgid "Fail!" msgstr "Échec !" -#: sith/settings.py:604 +#: sith/settings.py:546 msgid "You successfully posted an article in the Weekmail" msgstr "Article posté avec succès dans le Weekmail" -#: sith/settings.py:605 +#: sith/settings.py:547 msgid "You successfully edited an article in the Weekmail" msgstr "Article édité avec succès dans le Weekmail" -#: sith/settings.py:606 +#: sith/settings.py:548 msgid "You successfully sent the Weekmail" msgstr "Weekmail envoyé avec succès" -#: sith/settings.py:615 +#: sith/settings.py:556 msgid "AE tee-shirt" msgstr "Tee-shirt AE" -#: stock/models.py:55 +#: stock/models.py:62 msgid "unit quantity" msgstr "quantité unitaire" -#: stock/models.py:55 +#: stock/models.py:62 msgid "number of element in one box" msgstr "nombre d'éléments par boîte" -#: stock/models.py:56 +#: stock/models.py:65 msgid "effective quantity" msgstr "quantité effective" -#: stock/models.py:56 +#: stock/models.py:65 msgid "number of box" msgstr "nombre de boîtes" -#: stock/models.py:57 +#: stock/models.py:68 msgid "minimal quantity" msgstr "quantité minimale" -#: stock/models.py:58 +#: stock/models.py:71 msgid "" "if the effective quantity is less than the minimal, item is added to the " "shopping list" @@ -4868,27 +4873,27 @@ msgstr "" "si la quantité effective est en dessous du minima, l'item est ajouté àla " "liste de courses" -#: stock/models.py:78 +#: stock/models.py:101 msgid "todo" msgstr "à faire" -#: stock/models.py:95 +#: stock/models.py:121 msgid "shopping lists" msgstr "listes de courses" -#: stock/models.py:100 +#: stock/models.py:137 msgid "quantity to buy" msgstr "quantité à acheter" -#: stock/models.py:100 +#: stock/models.py:139 msgid "quantity to buy during the next shopping session" msgstr "quantité à acheter pendant les prochaines courses" -#: stock/models.py:101 +#: stock/models.py:142 msgid "quantity bought" msgstr "quantité achetée" -#: stock/models.py:101 +#: stock/models.py:144 msgid "quantity bought during the last shopping session" msgstr "quantité achetée pendant les dernières courses" @@ -4905,7 +4910,7 @@ msgstr "Quantité demandée" msgid "Quantity bought" msgstr "Quantité achetée" -#: stock/templates/stock/shopping_list_items.jinja:42 stock/views.py:206 +#: stock/templates/stock/shopping_list_items.jinja:42 stock/views.py:278 #: trombi/templates/trombi/export.jinja:70 msgid "Comments" msgstr "Commentaires" @@ -5014,15 +5019,15 @@ msgstr "Mettre à jour les quantités de %(s)s après les courses" msgid "Update stock quantities" msgstr "Mettre à jour les quantités en stock" -#: stock/views.py:198 +#: stock/views.py:257 msgid "Shopping list name" msgstr "Nom de la liste de courses" -#: stock/views.py:204 +#: stock/views.py:267 msgid " left" msgstr " restant" -#: stock/views.py:205 +#: stock/views.py:273 msgid "" "Add here, items to buy that are not reference as a stock item (example : " "sponge, knife, mugs ...)" @@ -5030,11 +5035,11 @@ msgstr "" "Ajouter ici les éléments non référencé comme élément de stock (example : " "éponge, couteau, mugs ...)" -#: stock/views.py:334 +#: stock/views.py:457 msgid " asked" msgstr " demandé" -#: stock/views.py:401 +#: stock/views.py:549 #, python-format msgid "%(effective_quantity)s left" msgstr "%(effective_quantity)s restant" @@ -5047,27 +5052,27 @@ msgstr "Mauvais type de cotisation" msgid "Bad payment method" msgstr "Mauvais type de paiement" -#: subscription/models.py:54 +#: subscription/models.py:55 msgid "subscription type" msgstr "type d'inscription" -#: subscription/models.py:57 +#: subscription/models.py:61 msgid "subscription start" msgstr "début de la cotisation" -#: subscription/models.py:58 +#: subscription/models.py:62 msgid "subscription end" msgstr "fin de la cotisation" -#: subscription/models.py:63 +#: subscription/models.py:71 msgid "location" msgstr "lieu" -#: subscription/models.py:72 +#: subscription/models.py:91 msgid "You can not subscribe many time for the same period" msgstr "Vous ne pouvez pas cotiser plusieurs fois pour la même période" -#: subscription/models.py:76 +#: subscription/models.py:96 msgid "Subscription error" msgstr "Erreur de cotisation" @@ -5088,20 +5093,20 @@ msgid "Eboutic is reserved to specific users. In doubt, don't use it." msgstr "" "Eboutic est réservé à des cas particuliers. Dans le doute, ne l'utilisez pas." -#: subscription/views.py:83 +#: subscription/views.py:98 msgid "A user with that email address already exists" msgstr "Un utilisateur avec cette adresse email existe déjà" -#: subscription/views.py:99 +#: subscription/views.py:119 msgid "You must either choose an existing user or create a new one properly" msgstr "" "Vous devez soit choisir un utilisateur existant, soit en créer un proprement" -#: trombi/models.py:55 +#: trombi/models.py:60 msgid "subscription deadline" msgstr "fin des inscriptions" -#: trombi/models.py:56 +#: trombi/models.py:63 msgid "" "Before this date, users are allowed to subscribe to this Trombi. After this " "date, users subscribed will be allowed to comment on each other." @@ -5110,46 +5115,46 @@ msgstr "" "Après cette date, les utilisateurs inscrits peuvent se soumettre des " "commentaires entre eux." -#: trombi/models.py:59 +#: trombi/models.py:69 msgid "comments deadline" msgstr "fin des commentaires" -#: trombi/models.py:60 +#: trombi/models.py:72 msgid "After this date, users won't be able to make comments anymore." msgstr "" "Après cette date, les utilisateurs ne peuvent plus faire de commentaires." -#: trombi/models.py:62 +#: trombi/models.py:76 msgid "maximum characters" msgstr "nombre de caractères max" -#: trombi/models.py:63 +#: trombi/models.py:78 msgid "Maximum number of characters allowed in a comment." msgstr "Nombre maximum de caractères autorisés dans un commentaire." -#: trombi/models.py:64 +#: trombi/models.py:81 msgid "show users profiles to each other" msgstr "montrer les profils aux inscrits" -#: trombi/models.py:75 +#: trombi/models.py:95 msgid "" "Closing the subscriptions after the comments is definitively not a good idea." msgstr "" "Fermer les inscriptions après les commentaires est vraiment une idée pourrie." -#: trombi/models.py:96 +#: trombi/models.py:120 msgid "trombi user" msgstr "utilisateur trombi" -#: trombi/models.py:97 +#: trombi/models.py:124 msgid "trombi" msgstr "trombi" -#: trombi/models.py:98 +#: trombi/models.py:132 msgid "profile pict" msgstr "photo de profil" -#: trombi/models.py:99 +#: trombi/models.py:136 msgid "" "The profile picture you want in the trombi (warning: this picture may be " "published)" @@ -5157,11 +5162,11 @@ msgstr "" "La photo de profil que vous souhaitez voir dans le Trombi (attention: cette " "photo risque d'être publiée)" -#: trombi/models.py:100 +#: trombi/models.py:141 msgid "scrub pict" msgstr "photo de blouse" -#: trombi/models.py:101 +#: trombi/models.py:145 msgid "" "The scrub picture you want in the trombi (warning: this picture may be " "published)" @@ -5169,19 +5174,19 @@ msgstr "" "La photo de blouse que vous souhaitez voir dans le Trombi (attention: cette " "photo risque d'être publiée)" -#: trombi/models.py:134 +#: trombi/models.py:186 msgid "target" msgstr "cible" -#: trombi/models.py:136 +#: trombi/models.py:189 msgid "is the comment moderated" msgstr "le commentaire est modéré" -#: trombi/models.py:151 +#: trombi/models.py:207 msgid "start" msgstr "début" -#: trombi/models.py:152 +#: trombi/models.py:208 msgid "end" msgstr "fin" @@ -5312,27 +5317,27 @@ msgstr "" msgid "Edit comment" msgstr "Éditer le commentaire" -#: trombi/views.py:60 +#: trombi/views.py:66 msgid "My profile" msgstr "Mon profil" -#: trombi/views.py:65 +#: trombi/views.py:73 msgid "My pictures" msgstr "Mes photos" -#: trombi/views.py:73 +#: trombi/views.py:85 msgid "Admin tools" msgstr "Admin Trombi" -#: trombi/views.py:178 +#: trombi/views.py:205 msgid "Explain why you rejected the comment" msgstr "Expliquez pourquoi vous refusez le commentaire" -#: trombi/views.py:203 +#: trombi/views.py:238 msgid "Rejected comment" msgstr "Commentaire rejeté" -#: trombi/views.py:204 +#: trombi/views.py:240 #, python-format msgid "" "Your comment to %(target)s on the Trombi \"%(trombi)s\" was rejected for the " @@ -5349,16 +5354,16 @@ msgstr "" "\n" "%(content)s" -#: trombi/views.py:228 +#: trombi/views.py:272 #, python-format msgid "%(name)s (deadline: %(date)s)" msgstr "%(name)s (date limite: %(date)s)" -#: trombi/views.py:232 +#: trombi/views.py:282 msgid "Select trombi" msgstr "Choisir un trombi" -#: trombi/views.py:233 +#: trombi/views.py:284 msgid "" "This allows you to subscribe to a Trombi. Be aware that you can subscribe " "only once, so don't play with that, or you will expose yourself to the " @@ -5368,19 +5373,19 @@ msgstr "" "pouvez vous inscrire qu'à un seul Trombi, donc ne jouez pas avec cet option " "ou vous encourerez la colère des admins!" -#: trombi/views.py:284 +#: trombi/views.py:346 msgid "Personal email (not UTBM)" msgstr "Email personnel (pas UTBM)" -#: trombi/views.py:285 +#: trombi/views.py:347 msgid "Phone" msgstr "Téléphone" -#: trombi/views.py:286 +#: trombi/views.py:348 msgid "Native town" msgstr "Ville d'origine" -#: trombi/views.py:359 +#: trombi/views.py:432 msgid "" "You can not yet write comment, you must wait for the subscription deadline " "to be passed." @@ -5388,11 +5393,11 @@ msgstr "" "Vous ne pouvez pas encore écrire de commentaires, vous devez attendre la fin " "des inscriptions" -#: trombi/views.py:362 +#: trombi/views.py:439 msgid "You can not write comment anymore, the deadline is already passed." msgstr "Vous ne pouvez plus écrire de commentaires, la date est passée." -#: trombi/views.py:369 +#: trombi/views.py:452 #, python-format msgid "Maximum characters: %(max_length)s" msgstr "Nombre de caractères max: %(max_length)s" diff --git a/sith/urls.py b/sith/urls.py index 9b85e64e..179724b8 100644 --- a/sith/urls.py +++ b/sith/urls.py @@ -48,6 +48,7 @@ js_info_dict = {"packages": ("sith",)} handler403 = "core.views.forbidden" handler404 = "core.views.not_found" +handler500 = "core.views.internal_servor_error" urlpatterns = [ url(r"^", include("core.urls", namespace="core", app_name="core")), From f4122bbc37a638aeb402430cab81a4591efdceda Mon Sep 17 00:00:00 2001 From: Bartuccio Antoine Date: Wed, 10 Oct 2018 15:27:21 +0200 Subject: [PATCH 2/2] sentry: deal with sentry's js as external resource --- core/static/core/js/sentry/bundle.min.js | 3 +++ core/templates/core/500.jinja | 8 ++++++-- core/views/__init__.py | 1 - 3 files changed, 9 insertions(+), 3 deletions(-) create mode 100644 core/static/core/js/sentry/bundle.min.js diff --git a/core/static/core/js/sentry/bundle.min.js b/core/static/core/js/sentry/bundle.min.js new file mode 100644 index 00000000..b5d86c2e --- /dev/null +++ b/core/static/core/js/sentry/bundle.min.js @@ -0,0 +1,3 @@ +/*! @sentry/browser 4.0.6 (f474d18) | https://github.com/getsentry/sentry-javascript */ +var Sentry=function(t){"use strict";var e=function(t,n){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])})(t,n)};function n(t,n){function r(){this.constructor=t}e(t,n),t.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}var r=function(){return(r=Object.assign||function(t){for(var e,n=1,r=arguments.length;n0&&o[o.length-1])&&(6===i[0]||2===i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0)&&!(r=i.next()).done;)a.push(r.value)}catch(t){o={error:t}}finally{try{r&&!r.done&&(n=i.return)&&n.call(i)}finally{if(o)throw o.error}}return a}function u(){for(var t=[],e=0;e=200&&e<300?t.Success:429===e?t.RateLimit:e>=400&&e<500?t.Invalid:e>=500?t.Failed:t.Unknown}}(e.Status||(e.Status={}))});c(f);var p=f.Severity,h=f.Status,d=l(function(t,e){Object.defineProperty(e,"__esModule",{value:!0}),e.isError=function(t){switch(Object.prototype.toString.call(t)){case"[object Error]":case"[object Exception]":case"[object DOMException]":return!0;default:return t instanceof Error}},e.isErrorEvent=function(t){return"[object ErrorEvent]"===Object.prototype.toString.call(t)},e.isDOMError=function(t){return"[object DOMError]"===Object.prototype.toString.call(t)},e.isDOMException=function(t){return"[object DOMException]"===Object.prototype.toString.call(t)},e.isUndefined=function(t){return void 0===t},e.isFunction=function(t){return"function"==typeof t},e.isString=function(t){return"[object String]"===Object.prototype.toString.call(t)},e.isArray=function(t){return"[object Array]"===Object.prototype.toString.call(t)},e.isPlainObject=function(t){return"[object Object]"===Object.prototype.toString.call(t)},e.isRegExp=function(t){return"[object RegExp]"===Object.prototype.toString.call(t)}});c(d);var v=d.isError,y=d.isErrorEvent,g=d.isDOMError,b=d.isDOMException,m=d.isUndefined,_=d.isFunction,E=d.isString,w=(d.isArray,d.isPlainObject),x=(d.isRegExp,l(function(t,e){function n(){return"undefined"!=typeof window?window:void 0!==s?s:"undefined"!=typeof self?self:{}}function r(t){var e,n,r,o,i,a=[];if(!t||!t.tagName)return"";if(a.push(t.tagName.toLowerCase()),t.id&&a.push("#"+t.id),(e=t.className)&&d.isString(e))for(n=e.split(/\s+/),i=0;i ".length;n&&i++<5&&!("html"===(e=r(n))||i>1&&a+o.length*u+e.length>=80);)o.push(e),a+=e.length,n=n.parentNode;return o.reverse().join(" > ")},e.htmlElementAsString=r,e.parseUrl=function(t){if(!t)return{};var e=t.match(/^(([^:\/?#]+):)?(\/\/([^\/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?$/);if(!e)return{};var n=e[6]||"",r=e[8]||"";return{host:e[4],path:e[5],protocol:e[2],relative:e[5]+n+r}},e.getEventDescription=function(t){if(t.message)return t.message;if(t.exception&&t.exception.values&&t.exception.values[0]){var e=t.exception.values[0];return e.type&&e.value?e.type+": "+e.value:e.type||e.value||t.event_id||""}return t.event_id||""}}));c(x);var S=x.getGlobalObject,k=(x.uuid4,x.htmlTreeAsString),O=(x.htmlElementAsString,x.parseUrl),j=x.getEventDescription,T=l(function(t,e){Object.defineProperty(e,"__esModule",{value:!0});var n=x.getGlobalObject(),r=new(function(){function t(){this.console=n.console,this.disabled=!0}return t.prototype.disable=function(){this.disabled=!0},t.prototype.enable=function(){this.disabled=!1},t.prototype.log=function(t){this.disabled||this.console.log("Sentry Logger [Log]: "+t)},t.prototype.warn=function(t){this.disabled||this.console.warn("Sentry Logger [Warn]: "+t)},t.prototype.error=function(t){this.disabled||this.console.error("Sentry Logger [Error]: "+t)},t}());e.logger=r});c(T);T.logger;var M=l(function(t,e){var n=s&&s.__assign||function(){return(n=Object.assign||function(t){for(var e,n=1,r=arguments.length;n0&&o[o.length-1])&&(6===i[0]||2===i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}}},a=s&&s.__read||function(t,e){var n="function"==typeof Symbol&&t[Symbol.iterator];if(!n)return t;var r,o,i=n.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(r=i.next()).done;)a.push(r.value)}catch(t){o={error:t}}finally{try{r&&!r.done&&(n=i.return)&&n.call(i)}finally{if(o)throw o.error}}return a},u=s&&s.__spread||function(){for(var t=[],e=0;e=0?u(this.breadcrumbs,[t]).slice(-e):u(this.breadcrumbs,[t]),this.notifyScopeListeners()},t.prototype.applyToEvent=function(t,e,i){return r(this,void 0,void 0,function(){return o(this,function(r){return this.extra&&Object.keys(this.extra).length&&(t.extra=n({},this.extra,t.extra)),this.tags&&Object.keys(this.tags).length&&(t.tags=n({},this.tags,t.tags)),this.user&&Object.keys(this.user).length&&(t.user=n({},this.user,t.user)),this.fingerprint&&void 0===t.fingerprint&&(t.fingerprint=this.fingerprint),this.level&&void 0===t.level&&(t.level=this.level),(!t.breadcrumbs||0===t.breadcrumbs.length)&&this.breadcrumbs.length>0&&(t.breadcrumbs=void 0!==i&&i>=0?this.breadcrumbs.slice(-i):this.breadcrumbs),[2,this.notifyEventProcessors(t,e)]})})},t}();e.Scope=c});c(M);M.Scope;var B=l(function(t,e){var n=s&&s.__assign||function(){return(n=Object.assign||function(t){for(var e,n=1,r=arguments.length;n0)&&!(r=i.next()).done;)a.push(r.value)}catch(t){o={error:t}}finally{try{r&&!r.done&&(n=i.return)&&n.call(i)}finally{if(o)throw o.error}}return a},o=s&&s.__spread||function(){for(var t=[],e=0;e0?t[t.length-1].scope:void 0,n=M.Scope.clone(e);return this.getStack().push({client:this.getClient(),scope:n}),n},t.prototype.popScope=function(){return void 0!==this.getStack().pop()},t.prototype.withScope=function(t){var e=this.pushScope();try{t(e)}finally{this.popScope()}},t.prototype.getClient=function(){return this.getStackTop().client},t.prototype.getScope=function(){return this.getStackTop().scope},t.prototype.getStack=function(){return this.stack},t.prototype.getStackTop=function(){return this.stack[this.stack.length-1]},t.prototype.captureException=function(t,e){var r=this._lastEventId=x.uuid4();return this.invokeClientAsync("captureException",t,n({},e,{event_id:r})),r},t.prototype.captureMessage=function(t,e,r){var o=this._lastEventId=x.uuid4();return this.invokeClientAsync("captureMessage",t,e,n({},r,{event_id:o})),o},t.prototype.captureEvent=function(t,e){var r=this._lastEventId=x.uuid4();return this.invokeClientAsync("captureEvent",t,n({},e,{event_id:r})),r},t.prototype.lastEventId=function(){return this._lastEventId},t.prototype.addBreadcrumb=function(t,e){this.invokeClient("addBreadcrumb",t,n({},e))},t.prototype.configureScope=function(t){var e=this.getStackTop();e.scope&&e.client&&t(e.scope)},t.prototype.run=function(t){var e=u(this);try{t(this)}finally{u(e)}},t}();function a(){var t=x.getGlobalObject();return t.__SENTRY__=t.__SENTRY__||{hub:void 0},t.__SENTRY__}function u(t){var e=a(),n=e.hub;return e.hub=t,n}e.Hub=i,e.getMainCarrier=a,e.makeMain=u,e.getCurrentHub=function(){var t=a();return t.hub&&!t.hub.isOlderThan(e.API_VERSION)||(t.hub=new i),t.hub},e.getHubFromCarrier=function(t){return t&&t.__SENTRY__&&t.__SENTRY__.hub?t.__SENTRY__.hub:(t.__SENTRY__={},t.__SENTRY__.hub=new i,t.__SENTRY__.hub)}});c(B);B.API_VERSION,B.Hub,B.getMainCarrier,B.makeMain,B.getCurrentHub,B.getHubFromCarrier;var P=l(function(t,e){Object.defineProperty(e,"__esModule",{value:!0}),e.Scope=M.Scope,e.getCurrentHub=B.getCurrentHub,e.getHubFromCarrier=B.getHubFromCarrier,e.Hub=B.Hub});c(P);P.Scope,P.getCurrentHub,P.getHubFromCarrier,P.Hub;var I=l(function(t,e){var n=s&&s.__read||function(t,e){var n="function"==typeof Symbol&&t[Symbol.iterator];if(!n)return t;var r,o,i=n.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(r=i.next()).done;)a.push(r.value)}catch(t){o={error:t}}finally{try{r&&!r.done&&(n=i.return)&&n.call(i)}finally{if(o)throw o.error}}return a},r=s&&s.__spread||function(){for(var t=[],e=0;e0){var u=t.indexOf(this);-1!==u?(t.splice(u+1),e.splice(u,1/0,o)):(t.push(this),e.push(o)),-1!==t.indexOf(a)&&(a=function(n,r){return t[0]===r?"[Circular ~]":"[Circular ~."+e.slice(0,t.indexOf(r)).join(".")+"]"}.call(this,o,a))}else t.push(a);return a instanceof Error?function(t){var e={message:t.message,name:t.name,stack:t.stack};for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e}(a):a}}function i(t,e){return e===n?NaN:e!==r?e:void 0}function a(t){return JSON.stringify(t,o())}function u(t){return JSON.parse(t,i)}e.serialize=a,e.deserialize=u,e.clone=function(t){return u(a(t))},e.fill=function(t,e,n){if(e in t){var r=t[e],o=n(r);o.__sentry__=!0,o.__sentry_original__=r,o.__sentry_wrapped__=o,t[e]=o}},e.urlEncode=function(t){return Object.keys(t).map(function(e){return encodeURIComponent(e)+"="+encodeURIComponent(t[e])}).join("&")};var s=3,c=51200,l=40;function f(t){return function(t){return~-encodeURI(t).split(/%..|./).length}(JSON.stringify(t))}function p(t){if("string"==typeof t)return t.length<=40?t:t.substr(0,39)+"…";if("number"==typeof t||"boolean"==typeof t||void 0===t)return t;if(Number.isNaN(t))return"[NaN]";if(d.isUndefined(t))return"[undefined]";var e=Object.prototype.toString.call(t);if("[object Object]"===e)return"[Object]";if("[object Array]"===e)return"[Array]";if("[object Function]"===e){var n=t.name;return n?"[Function: "+n+"]":"[Function]"}return t}function h(t,e){if(0===e)return p(t);if(d.isPlainObject(t)){var n={},r=t;return Object.keys(r).forEach(function(t){n[t]=h(r[t],e-1)}),n}return Array.isArray(t)?t.map(function(t){return h(t,e-1)}):p(t)}e.serializeObject=h,e.limitObjectDepthToSize=function t(e,n,r){void 0===n&&(n=s),void 0===r&&(r=c);var o=h(e,n);return f(a(o))>r?t(e,n-1):o},e.serializeKeysToEventMessage=function(t,e){if(void 0===e&&(e=l),!t.length)return"[object has no keys]";if(t[0].length>=e)return t[0];for(var n=t.length;n>0;n--){var r=t.slice(0,n).join(", ");if(!(r.length>e))return n===t.length?r:r+"…"}return""}});c(F);var C=F.serialize,D=F.deserialize,R=(F.clone,F.fill),A=(F.urlEncode,F.serializeObject),L=F.limitObjectDepthToSize,U=F.serializeKeysToEventMessage,H=l(function(t,e){var n,r=s&&s.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,"__esModule",{value:!0});var o=function(t){function e(e){var n=this.constructor,r=t.call(this,e)||this;return r.message=e,r.name=n.prototype.constructor.name,Object.setPrototypeOf(r,n.prototype),r}return r(e,t),e}(Error);e.SentryError=o});c(H);H.SentryError;var N=l(function(t,e){var n=s&&s.__read||function(t,e){var n="function"==typeof Symbol&&t[Symbol.iterator];if(!n)return t;var r,o,i=n.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(r=i.next()).done;)a.push(r.value)}catch(t){o={error:t}}finally{try{r&&!r.done&&(n=i.return)&&n.call(i)}finally{if(o)throw o.error}}return a},r=s&&s.__values||function(t){var e="function"==typeof Symbol&&t[Symbol.iterator],n=0;return e?e.call(t):{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}}};Object.defineProperty(e,"__esModule",{value:!0});var o=/^(?:(\w+):)\/\/(?:(\w+)(?::(\w+))?@)([\w\.-]+)(?::(\d+))?\/(.+)/,i=function(){function t(t){"string"==typeof t?this.fromString(t):this.fromComponents(t),this.validate()}return t.prototype.toString=function(t){void 0===t&&(t=!1);var e=this,n=e.host,r=e.path,o=e.pass,i=e.port,a=e.projectId;return e.protocol+"://"+e.user+(t&&o?":"+o:"")+"@"+n+(i?":"+i:"")+"/"+(r?r+"/":r)+a},t.prototype.fromString=function(t){var e=o.exec(t);if(!e)throw new H.SentryError("Invalid Dsn");var r=n(e.slice(1),6),i=r[0],a=r[1],u=r[2],s=void 0===u?"":u,c=r[3],l=r[4],f=void 0===l?"":l,p="",h=r[5],d=h.split("/");d.length>1&&(p=d.slice(0,-1).join("/"),h=d.pop()),Object.assign(this,{host:c,pass:s,path:p,projectId:h,port:f,protocol:i,user:a})},t.prototype.fromComponents=function(t){this.protocol=t.protocol,this.user=t.user,this.pass=t.pass||"",this.host=t.host,this.port=t.port||"",this.path=t.path||"",this.projectId=t.projectId},t.prototype.validate=function(){var t,e;try{for(var n=r(["protocol","user","host","projectId"]),o=n.next();!o.done;o=n.next()){var i=o.value;if(!this[i])throw new H.SentryError("Invalid Dsn: Missing "+i)}}catch(e){t={error:e}}finally{try{o&&!o.done&&(e=n.return)&&e.call(n)}finally{if(t)throw t.error}}if("http"!==this.protocol&&"https"!==this.protocol)throw new H.SentryError('Invalid Dsn: Unsupported protocol "'+this.protocol+'"');if(this.port&&isNaN(parseInt(this.port,10)))throw new H.SentryError('Invalid Dsn: Invalid port number "'+this.port+'"')},t}();e.Dsn=i});c(N);N.Dsn;var G=l(function(t,e){Object.defineProperty(e,"__esModule",{value:!0});var n=function(){function t(t){this.dsn=t,this.dsnObject=new N.Dsn(t)}return t.prototype.getDsn=function(){return this.dsnObject},t.prototype.getStoreEndpoint=function(){return""+this.getBaseUrl()+this.getStoreEndpointPath()},t.prototype.getStoreEndpointWithUrlEncodedAuth=function(){var t={sentry_key:this.dsnObject.user,sentry_version:"7"};return this.getStoreEndpoint()+"?"+F.urlEncode(t)},t.prototype.getBaseUrl=function(){var t=this.dsnObject,e=t.protocol?t.protocol+":":"",n=t.port?":"+t.port:"";return e+"//"+t.host+n},t.prototype.getStoreEndpointPath=function(){var t=this.dsnObject;return(t.path?"/"+t.path:"")+"/api/"+t.projectId+"/store/"},t.prototype.getRequestHeaders=function(t,e){var n=this.dsnObject,r=["Sentry sentry_version=7"];return r.push("sentry_timestamp="+(new Date).getTime()),r.push("sentry_client="+t+"/"+e),r.push("sentry_key="+n.user),{"Content-Type":"application/json","X-Sentry-Auth":r.join(", ")}},t.prototype.getReportDialogEndpoint=function(t){void 0===t&&(t={});var e=this.dsnObject,n=this.getBaseUrl()+(e.path?"/"+e.path:"")+"/api/embed/error-page/",r=[];for(var o in r.push("dsn="+e.toString()),t)if("user"===o){if(!t.user)continue;t.user.name&&r.push("name="+encodeURIComponent(t.user.name)),t.user.email&&r.push("email="+encodeURIComponent(t.user.email))}else r.push(encodeURIComponent(o)+"="+encodeURIComponent(t[o]));return r.length?n+"?"+r.join("&"):n},t}();e.API=n});c(G);G.API;var $=l(function(t,e){var n=s&&s.__awaiter||function(t,e,n,r){return new(n||(n=Promise))(function(o,i){function a(t){try{s(r.next(t))}catch(t){i(t)}}function u(t){try{s(r.throw(t))}catch(t){i(t)}}function s(t){t.done?o(t.value):new n(function(e){e(t.value)}).then(a,u)}s((r=r.apply(t,e||[])).next())})},r=s&&s.__generator||function(t,e){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:u(0),throw:u(1),return:u(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function u(i){return function(u){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!(o=(o=a.trys).length>0&&o[o.length-1])&&(6===i[0]||2===i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}}};Object.defineProperty(e,"__esModule",{value:!0}),e.truncate=function(t,e){return void 0===e&&(e=0),0!==e&&d.isString(t)?t.length<=e?t:t.substr(0,e)+"…":t},e.snipLine=function(t,e){var n=t,r=n.length;if(r<=150)return n;e>r&&(e=r);var o=Math.max(e-60,0);o<5&&(o=0);var i=Math.min(o+140,r);return i>r-5&&(i=r),i===r&&(o=Math.max(i-140,0)),n=n.slice(o,i),o>0&&(n="'{snip} "+n),i0&&o[o.length-1])&&(6===i[0]||2===i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]Math.random()?[2,{status:f.Status.Skipped}]:[4,this.prepareEvent(t,i,n)]):[2,{status:f.Status.Skipped}];case 1:if(null===(s=o.sent()))return[2,{status:f.Status.Skipped}];c=s,o.label=2;case 2:return o.trys.push([2,5,,6]),n&&n.data&&!0===n.data.__sentry__||!a?[3,4]:[4,a(s,n)];case 3:c=o.sent(),o.label=4;case 4:return[3,6];case 5:return l=o.sent(),$.forget(this.captureException(l,{data:{__sentry__:!0},originalException:l})),[2,{reason:"Event processing in beforeSend method threw an exception",status:f.Status.Invalid}];case 6:return null===c?[2,{reason:"Event dropped due to being discarded by beforeSend method",status:f.Status.Skipped}]:[4,e(c)];case 7:return(p=o.sent()).event=c,p.status,f.Status.RateLimit,[2,p]}})})},t.prototype.close=function(t){return r(this,void 0,void 0,function(){return o(this,function(e){return[2,this.getBackend().getBuffer().drain(t)]})})},t}();e.BaseClient=i});c(V);V.BaseClient;var W=l(function(t,e){var n=s&&s.__awaiter||function(t,e,n,r){return new(n||(n=Promise))(function(o,i){function a(t){try{s(r.next(t))}catch(t){i(t)}}function u(t){try{s(r.throw(t))}catch(t){i(t)}}function s(t){t.done?o(t.value):new n(function(e){e(t.value)}).then(a,u)}s((r=r.apply(t,e||[])).next())})},r=s&&s.__generator||function(t,e){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:u(0),throw:u(1),return:u(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function u(i){return function(u){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!(o=(o=a.trys).length>0&&o[o.length-1])&&(6===i[0]||2===i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&n(!1)},t);Promise.all(e.buffer.values()).then(function(){clearTimeout(r),n(!0)}).catch(function(){n(!0)})})]})})},t}();e.RequestBuffer=o});c(W);W.RequestBuffer;var X=l(function(t,e){var n=s&&s.__awaiter||function(t,e,n,r){return new(n||(n=Promise))(function(o,i){function a(t){try{s(r.next(t))}catch(t){i(t)}}function u(t){try{s(r.throw(t))}catch(t){i(t)}}function s(t){t.done?o(t.value):new n(function(e){e(t.value)}).then(a,u)}s((r=r.apply(t,e||[])).next())})},r=s&&s.__generator||function(t,e){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:u(0),throw:u(1),return:u(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function u(i){return function(u){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!(o=(o=a.trys).length>0&&o[o.length-1])&&(6===i[0]||2===i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0)&&!(r=i.next()).done;)a.push(r.value)}catch(t){o={error:t}}finally{try{r&&!r.done&&(n=i.return)&&n.call(i)}finally{if(o)throw o.error}}return a},r=s&&s.__spread||function(){for(var t=[],e=0;e0&&o[o.length-1])&&(6===i[0]||2===i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&o[o.length-1])&&(6===i[0]||2===i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0)&&!(r=i.next()).done;)a.push(r.value)}catch(t){o={error:t}}finally{try{r&&!r.done&&(n=i.return)&&n.call(i)}finally{if(o)throw o.error}}return a},i=s&&s.__spread||function(){for(var t=[],e=0;e0&&o[o.length-1])&&(6===i[0]||2===i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]>>32-e},rotr:function(t,e){return t<<32-e|t>>>e},endian:function(t){if(t.constructor==Number)return 16711935&n.rotl(t,8)|4278255360&n.rotl(t,24);for(var e=0;e0;t--)e.push(Math.floor(256*Math.random()));return e},bytesToWords:function(t){for(var e=[],n=0,r=0;n>>5]|=t[n]<<24-r%32;return e},wordsToBytes:function(t){for(var e=[],n=0;n<32*t.length;n+=8)e.push(t[n>>>5]>>>24-n%32&255);return e},bytesToHex:function(t){for(var e=[],n=0;n>>4).toString(16)),e.push((15&t[n]).toString(16));return e.join("")},hexToBytes:function(t){for(var e=[],n=0;n>>6*(3-i)&63)):n.push("=");return n.join("")},base64ToBytes:function(t){t=t.replace(/[^A-Z0-9+\/]/gi,"");for(var n=[],r=0,o=0;r>>6-2*o);return n}},t.exports=n}),Mt={utf8:{stringToBytes:function(t){return Mt.bin.stringToBytes(unescape(encodeURIComponent(t)))},bytesToString:function(t){return decodeURIComponent(escape(Mt.bin.bytesToString(t)))}},bin:{stringToBytes:function(t){for(var e=[],n=0;n>>24)|4278255360&(u[h]<<24|u[h]>>>8);u[s>>>5]|=128<>>9<<4)]=s;var d=i._ff,v=i._gg,y=i._hh,g=i._ii;for(h=0;h>>0,l=l+m>>>0,f=f+_>>>0,p=p+E>>>0}return e.endian([c,l,f,p])})._ff=function(t,e,n,r,o,i,a){var u=t+(e&n|~e&r)+(o>>>0)+a;return(u<>>32-i)+e},i._gg=function(t,e,n,r,o,i,a){var u=t+(e&r|n&~r)+(o>>>0)+a;return(u<>>32-i)+e},i._hh=function(t,e,n,r,o,i,a){var u=t+(e^n^r)+(o>>>0)+a;return(u<>>32-i)+e},i._ii=function(t,e,n,r,o,i,a){var u=t+(n^(e|~r))+(o>>>0)+a;return(u<>>32-i)+e},i._blocksize=16,i._digestsize=16,t.exports=function(t,n){if(void 0===t||null===t)throw new Error("Illegal argument "+t);var r=e.wordsToBytes(i(t,n));return n&&n.asBytes?r:n&&n.asString?o.bytesToString(r):e.bytesToHex(r)}}),Ct=Object.freeze({default:Ft,__moduleExports:Ft}),Dt=S(),Rt={wrap:function(){return function(){}},report:!1,collectWindowErrors:!1,computeStackTrace:!1,remoteFetching:!1,linesOfContext:!1,extendToAsynchronousCallbacks:!1},At=[].slice,Lt="?",Ut=/^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/;function Ht(t,e){return Object.prototype.hasOwnProperty.call(t,e)}function Nt(){return"undefined"==typeof document||null==document.location?"":document.location.href}Rt.wrap=function(t){return function(){try{return t.apply(this,arguments)}catch(t){throw Rt.report(t),t}}},Rt.report=function(){var t,e,n,o,i=[],a=null,u=null;function s(t,e,n){var r=null;if(!e||Rt.collectWindowErrors){for(var o in i)if(Ht(i,o))try{i[o](t,e,n)}catch(t){r=t}if(r)throw r}}function c(e,n,o,i,a){if(a=y(a)?a.error:a,e=y(e)?e.message:e,u)Rt.computeStackTrace.augmentStackTraceWithInitialElement(u,n,o,e),f();else if(a&&v(a))s(Rt.computeStackTrace(a),!0,a);else{var c,l={url:n,line:o,column:i},p=e;if("[object String]"==={}.toString.call(e)){var h=e.match(Ut);h&&(c=h[1],p=h[2])}l.func=Rt.computeStackTrace.guessFunctionName(l.url,l.line),l.context=Rt.computeStackTrace.gatherContext(l.url,l.line),s({name:c,message:p,mode:"onerror",stack:[r({},l,{url:l.url||Nt()})]},!0,null)}return!!t&&t.apply(this,arguments)}function l(t){var e=t&&(t.detail?t.detail.reason:t.reason)||t;s(Rt.computeStackTrace(e),!0,e)}function f(){var t=u,e=a;u=null,a=null,s(t,!1,e)}function p(t){if(u){if(a===t)return;f()}var e=Rt.computeStackTrace(t);throw u=e,a=t,setTimeout(function(){a===t&&f()},e.incomplete?2e3:0),t}return p.subscribe=function(t){i.push(t)},p.unsubscribe=function(r){for(var a=i.length-1;a>=0;--a)i[a]===r&&i.splice(a,1);0===i.length&&(e&&(Dt.onerror=t,e=!1),o&&(Dt.onerror=n,o=!1))},p.installGlobalHandler=function(){!0!==e&&(t=Dt.onerror,Dt.onerror=c,e=!0)},p.installGlobalUnhandledRejectionHandler=function(){!0!==o&&(n=Dt.onunhandledrejection,Dt.onunhandledrejection=l,o=!0)},p}(),Rt.computeStackTrace=function(){var t=!1,e={};function n(t){if("string"!=typeof t)return[];if(!Ht(e,t)){var n="",r="";try{r=Dt.document.domain}catch(t){}var o=/(.*)\:\/\/([^:\/]+)([:\d]*)\/{0,1}([\s\S]*)/.exec(t);o&&o[2]===r&&(n=function(t){if(!Rt.remoteFetching)return"";try{var e=function(){try{return new Dt.XMLHttpRequest}catch(t){return new Dt.ActiveXObject("Microsoft.XMLHTTP")}}();return e.open("GET",t,!1),e.send(""),e.responseText}catch(t){return""}}(t)),e[t]=n?n.split("\n"):[]}return e[t]}function r(t,e){var r,o=/function ([^(]*)\(([^)]*)\)/,i=/['"]?([0-9A-Za-z$_]+)['"]?\s*[:=]\s*(function|eval|new Function)/,a="",u=n(t);if(!u.length)return Lt;for(var s=0;s<10;++s)if(a=u[e-s]+a,!m(a)){if(r=i.exec(a))return r[1];if(r=o.exec(a))return r[1]}return Lt}function o(t,e){var r=n(t);if(!r.length)return null;var o=[],i=Math.floor(Rt.linesOfContext/2),a=i+Rt.linesOfContext%2,u=Math.max(0,e-i-1),s=Math.min(r.length,e+a-1);e-=1;for(var c=u;c0?o:null}function i(t){return t.replace(/[\-\[\]{}()*+?.,\\\^$|#]/g,"\\$&")}function a(t){return i(t).replace("<","(?:<|<)").replace(">","(?:>|>)").replace("&","(?:&|&)").replace('"','(?:"|")').replace(/\s+/g,"\\s+")}function u(t,e){for(var r,o,i=0,a=e.length;ir&&(o=u.exec(a[r]))?o.index:null}function c(t){if(!m(Dt&&Dt.document)){for(var e,n,r,o,s=[Nt()],c=Dt.document.getElementsByTagName("script"),l=""+t,f=0;f|[a-z]:|\/).*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i,u=/^\s*(.*?)(?:\((.*?)\))?(?:^|@)((?:file|https?|blob|chrome|webpack|resource|moz-extension).*?:\/.*?|\[native code\]|[^@]*bundle)(?::(\d+))?(?::(\d+))?\s*$/i,c=/^\s*at (?:((?:\[object object\])?.+) )?\(?((?:file|ms-appx|https?|webpack|blob):.*?):(\d+)(?::(\d+))?\)?\s*$/i,l=/(\S+) line (\d+)(?: > eval line \d+)* > eval/i,f=/\((\S*)(?::(\d+))(?::(\d+))\)/,p=t.stack.split("\n"),h=[],d=/^(.*) is undefined$/.exec(t.message),v=0,y=p.length;v eval")>-1&&(e=l.exec(n[3]))?n[3]=e[1]:0!==v||n[5]||m(t.columnNumber)||(h[0].column=t.columnNumber+1),i={url:n[3],func:n[1]||Lt,args:n[2]?n[2].split(","):[],line:n[4]?+n[4]:null,column:n[5]?+n[5]:null}}if(!i.func&&i.line&&(i.func=r(i.url,i.line)),Rt.remoteFetching&&i.url&&"blob:"===i.url.substr(0,5)){var b=new XMLHttpRequest;if(b.open("GET",i.url,!1),b.send(""),200===b.status){var _=b.responseText||"",E=(_=_.slice(-300)).match(/\/\/# sourceMappingURL=(.*)$/);if(E){var w=E[1];"~"===w.charAt(0)&&(w=("undefined"==typeof document||null==document.location?"":document.location.origin?document.location.origin:document.location.protocol+"//"+document.location.hostname+(document.location.port?":"+document.location.port:""))+w.slice(1)),i.url=w.slice(0,-4)}}}i.context=i.line?o(i.url,i.line):null,h.push(i)}return h.length?(h[0]&&h[0].line&&!h[0].column&&d&&(h[0].column=s(d[1],h[0].url,h[0].line)),{mode:"stack",name:t.name,message:t.message,stack:h}):null}function f(t,e,n,i){var a={url:e,line:n};if(a.url&&a.line){t.incomplete=!1,a.func||(a.func=r(a.url,a.line)),a.context||(a.context=o(a.url,a.line));var u=/ '([^']+)' /.exec(i);if(u&&(a.column=s(u[1],a.url,a.line)),t.stack.length>0&&t.stack[0].url===a.url){if(t.stack[0].line===a.line)return!1;if(!t.stack[0].line&&t.stack[0].func===a.func)return t.stack[0].line=a.line,t.stack[0].context=a.context,!1}return t.stack.unshift(a),t.partial=!0,!0}return t.incomplete=!0,!1}function p(t,e){for(var n,o,i,a=/function\s+([_$a-zA-Z\xA0-\uFFFF][_$a-zA-Z0-9\xA0-\uFFFF]*)?\s*\(/i,u=[],l={},d=!1,v=p.caller;v&&!d;v=v.caller)if(v!==h&&v!==Rt.report){if(o={url:null,func:Lt,args:[],line:null,column:null},v.name?o.func=v.name:(n=a.exec(v.toString()))&&(o.func=n[1]),void 0===o.func)try{o.func=n.input.substring(0,n.input.indexOf("{"))}catch(t){}if(i=c(v)){o.url=i.url,o.line=i.line,o.func===Lt&&(o.func=r(o.url,o.line));var y=/ '([^']+)' /.exec(t.message||t.description);y&&(o.column=s(y[1],i.url,i.line))}l[""+v]?d=!0:l[""+v]=!0,u.push(o)}e&&u.splice(0,e);var g={mode:"callers",name:t.name,message:t.message,stack:u};return f(g,t.sourceURL||t.fileName,t.line||t.lineNumber,t.message||t.description),g}function h(e,i){var s=null;i=null==i?0:+i;try{if(s=function(t){var e=t.stacktrace;if(e){for(var n,i=/ line (\d+).*script (?:in )?(\S+)(?:: in function (\S+))?$/i,a=/ line (\d+), column (\d+)\s*(?:in (?:]+)>|([^\)]+))\((.*)\))? in (.*):\s*$/i,u=e.split("\n"),s=[],c=0;c=0&&(y.line=g+m.substring(0,_).split("\n").length)}}}else if(i=l.exec(e[v])){var E=Nt().replace(/#.*$/,""),w=u(new RegExp(a(e[v+1])),[E]);y={url:E,func:"",args:[],line:w?w.line:i[1],column:null}}if(y){y.func||(y.func=r(y.url,y.line));var x=o(y.url,y.line),S=x?x[Math.floor(x.length/2)]:null;x&&S.replace(/^\s*/,"")===e[v+1].replace(/^\s*/,"")?y.context=x:y.context=[e[v+1]],f.push(y)}}return f.length?{mode:"multiline",name:t.name,message:e[0],stack:f}:null}(e))return s}catch(e){if(t)throw e}try{if(s=p(e,i+1))return s}catch(e){if(t)throw e}return{name:e.name,message:e.message,mode:"failed"}}return h.augmentStackTraceWithInitialElement=f,h.computeStackTraceFromStackProp=l,h.guessFunctionName=r,h.gatherContext=o,h.ofCaller=function(t){t=1+(null==t?0:+t);try{throw new Error}catch(e){return h(e,t+1)}},h.getSource=n,h}(),Rt.extendToAsynchronousCallbacks=function(){var t=function(t){var e=Dt[t];Dt[t]=function(){var t=At.call(arguments),n=t[0];return"function"==typeof n&&(t[0]=Rt.wrap(n)),e.apply?e.apply(this,t):e(t[0],t[1])}};t("setTimeout"),t("setInterval")},Rt.remoteFetching=!1,Rt.collectWindowErrors=!0,Rt.linesOfContext=11;var Gt=Rt.report.subscribe,$t=Rt.report.installGlobalHandler,qt=Rt.report.installGlobalUnhandledRejectionHandler,zt=Rt.computeStackTrace,Vt=Ft||Ct,Wt=50;function Xt(t){var e={stacktrace:{frames:Yt(t.stack)},type:t.name,value:t.message};return void 0===e.type&&""===e.value&&(e.value="Unrecoverable error caught"),e}function Kt(t){return{exception:{values:[Xt(t)]},transaction:t.url||t.stack&&t.stack[0].url||""}}function Yt(t){if(!t||!t.length)return[];var e=t,n=e[0].func||"";return(n.includes("captureMessage")||n.includes("captureException"))&&(e=e.slice(1)),e.map(function(t){return{colno:t.column,filename:t.url||e[0].url,function:t.func||"?",in_app:!0,lineno:t.line}}).slice(0,Wt).reverse()}var Jt,Zt,Qt=function(){function t(t){this.options=t,this.url=new vt(this.options.dsn).getStoreEndpointWithUrlEncodedAuth()}return t.prototype.captureEvent=function(t){return o(this,void 0,void 0,function(){return i(this,function(t){throw new bt("Transport Class has to implement `captureEvent` method")})})},t}(),te=S(),ee=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.captureEvent=function(t){return o(this,void 0,void 0,function(){var e,n;return i(this,function(r){switch(r.label){case 0:return e={body:C(t),method:"POST",referrerPolicy:Ot()?"origin":""},[4,te.fetch(this.url,e)];case 1:return n=r.sent(),[2,{status:h.fromHttpCode(n.status)}]}})})},e}(Qt),ne=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.captureEvent=function(t){return o(this,void 0,void 0,function(){var e=this;return i(this,function(n){return[2,new Promise(function(n,r){var o=new XMLHttpRequest;o.onreadystatechange=function(){4===o.readyState&&(200===o.status&&n({status:h.fromHttpCode(o.status)}),r(o))},o.open("POST",e.url),o.send(C(t))})]})})},e}(Qt),re=S(),oe=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.captureEvent=function(t){return o(this,void 0,void 0,function(){var e;return i(this,function(n){return e=C(t),[2,{status:re.navigator.sendBeacon(this.url,e)?h.Success:h.Failed}]})})},e}(Qt),ie=Object.freeze({BaseTransport:Qt,FetchTransport:ee,XHRTransport:ne,BeaconTransport:oe}),ae=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.install=function(){if(!this.options.dsn)throw new bt("Invariant exception: install() must not be called when disabled");return Error.stackTraceLimit=50,!0},e.prototype.eventFromException=function(t,e){return o(this,void 0,void 0,function(){var n,o,a,u;return i(this,function(i){switch(i.label){case 0:return y(t)&&t.error?(t=(u=t).error,n=Kt(zt(t)),[3,7]):[3,1];case 1:return g(t)||b(t)?(o=(u=t).name||(g(u)?"DOMError":"DOMException"),a=u.message?o+": "+u.message:o,[4,this.eventFromMessage(a,void 0,e)]):[3,3];case 2:return n=i.sent(),[3,7];case 3:return v(t)?(n=Kt(zt(t)),[3,7]):[3,4];case 4:return w(t)&&e&&e.syntheticException?(n=function(t,e){var n=Object.keys(t).sort(),r={extra:{__serialized__:L(t)},fingerprint:[Vt(n.join(""))],message:"Non-Error exception captured with keys: "+U(n)};if(e){var o=Yt(zt(e).stack);r.stacktrace={frames:o}}return r}(u=t,e.syntheticException),[3,7]):[3,5];case 5:return u=t,[4,this.eventFromMessage(u,void 0,e)];case 6:n=i.sent(),i.label=7;case 7:return[2,n=r({},n,{event_id:e&&e.event_id,exception:r({},n.exception,{mechanism:{handled:!0,type:"generic"}})})]}})})},e.prototype.eventFromMessage=function(t,e,n){return void 0===e&&(e=p.Info),o(this,void 0,void 0,function(){var r,o,a;return i(this,function(i){return r={event_id:n&&n.event_id,fingerprint:[t],level:e,message:t},this.options.attachStacktrace&&n&&n.syntheticException&&(o=zt(n.syntheticException),a=Yt(o.stack),r.stacktrace={frames:a}),[2,r]})})},e.prototype.sendEvent=function(t){return o(this,void 0,void 0,function(){var e;return i(this,function(n){return this.options.dsn?(this.transport||(e=this.options.transportOptions?this.options.transportOptions:{dsn:this.options.dsn},this.options.transport?this.transport=new this.options.transport({dsn:this.options.dsn}):St()?this.transport=new oe(e):wt()?this.transport=new ee(e):this.transport=new ne(e)),[2,this.transport.captureEvent(t)]):(ot.warn("Event has been skipped because no Dsn is configured."),[2,{status:h.Skipped,reason:"Event has been skipped because no Dsn is configured."}])})})},e}(gt),ue="sentry.javascript.browser",se=function(t){function e(e){return t.call(this,ae,e)||this}return n(e,t),e.prototype.prepareEvent=function(e,n,a){return o(this,void 0,void 0,function(){return i(this,function(o){return e.platform=e.platform||"javascript",e.sdk=r({},e.sdk,{name:ue,packages:u(e.sdk&&e.sdk.packages||[],[{name:"npm:@sentry/browser",version:"4.0.6"}]),version:"4.0.6"}),[2,t.prototype.prepareEvent.call(this,e,n,a)]})})},e.prototype.showReportDialog=function(t){void 0===t&&(t={});var e=S().document;if(e){var n=t.dsn||this.getDsn();if(!t.eventId)throw new bt("Missing `eventId` option in showReportDialog call");if(!n)throw new bt("Missing `Dsn` option in showReportDialog call");var r=e.createElement("script");r.async=!0,r.src=new vt(n).getReportDialogEndpoint(t),(e.head||e.body).appendChild(r)}},e}(yt),ce=1e3,le=0;function fe(t,e,n){if(void 0===e&&(e={}),!_(t))return t;try{if(t.__sentry__)return t;if(t.__sentry_wrapped__)return t.__sentry_wrapped__}catch(e){return t}var a=function(){var a=this;n&&_(n)&&n.apply(this,arguments);var u=Array.prototype.slice.call(arguments);try{var s=u.map(function(t){return fe(t,e)});return t.handleEvent?t.handleEvent.apply(this,s):t.apply(this,s)}catch(t){throw le+=1,setTimeout(function(){le-=1}),lt(function(n){return o(a,void 0,void 0,function(){var a=this;return i(this,function(s){return n.addEventProcessor(function(t){return o(a,void 0,void 0,function(){var n;return i(this,function(o){return n=r({},t),e.mechanism&&(n.exception=n.exception||{},n.exception.mechanism=e.mechanism),n.extra=r({},n.extra,{arguments:A(u,2)}),[2,n]})})}),ft().captureException(t,{originalException:t}),[2]})})}),t}};try{for(var u in t)Object.prototype.hasOwnProperty.call(t,u)&&(a[u]=t[u])}catch(t){}return a.prototype=t.prototype,t.__sentry_wrapped__=a,a.__sentry__=!0,a.__sentry_original__=t,a}function pe(t){return function(e){if(Jt=void 0,Zt!==e){var n;Zt=e;try{n=k(e.target)}catch(t){n=""}ft().addBreadcrumb({category:"ui."+t,message:n},{event:e,name:t})}}}function he(){return function(t){var e;try{e=t.target}catch(t){return}var n=e&&e.tagName;n&&("INPUT"===n||"TEXTAREA"===n||e.isContentEditable)&&(Jt||pe("input")(t),clearTimeout(Jt),Jt=setTimeout(function(){Jt=void 0},ce))}}var de,ve=function(){function t(t){this.name="GlobalHandlers",this.options=r({onerror:!0,onunhandledrejection:!0},t)}return t.prototype.install=function(){var t=this;Gt(function(e,n,r){le>0||ft().captureEvent(t.eventFromGlobalHandler(e),{originalException:r,data:{stack:e}})}),this.options.onerror&&(ot.log("Global Handler attached: onerror"),$t()),this.options.onunhandledrejection&&(ot.log("Global Handler attached: onunhandledrejection"),qt())},t.prototype.eventFromGlobalHandler=function(t){var e=Kt(t);return r({},e,{exception:r({},e.exception,{mechanism:{handled:!1,type:"onerror"===t.mode?"onerror":"onunhandledrejection"}})})},t}(),ye=function(){function t(){this.ignoreOnError=0,this.name="TryCatch"}return t.prototype.wrapTimeFunction=function(t){return function(){for(var e=[],n=0;n"},handled:!0,type:"instrument"}}),t.apply(this,e)}},t.prototype.wrapRAF=function(t){return function(e){return t(fe(e,{mechanism:{data:{function:"requestAnimationFrame",handler:t&&t.name||""},handled:!0,type:"instrument"}}))}},t.prototype.wrapEventTarget=function(t){var e=S(),n=e[t]&&e[t].prototype;n&&n.hasOwnProperty&&n.hasOwnProperty("addEventListener")&&(R(n,"addEventListener",function(e){return function(n,r,o){try{r.handleEvent=fe(r.handleEvent.bind(r),{mechanism:{data:{function:"handleEvent",handler:r&&r.name||"",target:t},handled:!0,type:"instrument"}})}catch(t){}var i,a,u;return"EventTarget"!==t&&"Node"!==t||(a=pe("click"),u=he(),i=function(t){if(t){var e;try{e=t.type}catch(t){return}return"click"===e?a(t):"keypress"===e?u(t):void 0}}),e.call(this,n,fe(r,{mechanism:{data:{function:"addEventListener",handler:r&&r.name||"",target:t},handled:!0,type:"instrument"}},i),o)}}),R(n,"removeEventListener",function(t){return function(e,n,r){var o=n;try{o=o&&(o.__sentry_wrapped__||o)}catch(t){}return t.call(this,e,o,r)}}))},t.prototype.install=function(){this.ignoreOnError=this.ignoreOnError;var t=S();R(t,"setTimeout",this.wrapTimeFunction.bind(this)),R(t,"setInterval",this.wrapTimeFunction.bind(this)),R(t,"requestAnimationFrame",this.wrapRAF.bind(this)),["EventTarget","Window","Node","ApplicationCache","AudioTrackList","ChannelMergerNode","CryptoOperation","EventSource","FileReader","HTMLUnknownElement","IDBDatabase","IDBRequest","IDBTransaction","KeyOperation","MediaController","MessagePort","ModalWindow","Notification","SVGElementInstance","Screen","TextTrack","TextTrackCue","TextTrackList","WebSocket","WebSocketWorker","Worker","XMLHttpRequest","XMLHttpRequestEventTarget","XMLHttpRequestUpload"].forEach(this.wrapEventTarget.bind(this))},t}(),ge=S();function be(t){try{var e=D(t);ft().addBreadcrumb({category:"sentry",event_id:e.event_id,level:e.level||p.fromString("error"),message:j(e)},{event:e})}catch(t){ot.error("Error while adding sentry type breadcrumb")}}var me,_e=function(){function t(t){this.name="Breadcrumbs",this.options=r({beacon:!0,console:!0,dom:!0,fetch:!0,history:!0,sentry:!0,xhr:!0},t)}return t.prototype.instrumentBeacon=function(t){St()&&R(ge.navigator,"sendBeacon",function(e){return function(){for(var n=[],r=0;r2?n[2]:void 0;return o&&e(de,String(o)),t.apply(this,n)}}},t.prototype.instrumentXHR=function(t){if("XMLHttpRequest"in ge){var e=XMLHttpRequest.prototype;R(e,"open",function(e){return function(){for(var n=[],r=0;r"},handled:!0,type:"instrument"}})})}(t,r)}),"onreadystatechange"in r&&_(r.onreadystatechange)?R(r,"onreadystatechange",function(t){return fe(t,{mechanism:{data:{function:"onreadystatechange",handler:t&&t.name||""},handled:!0,type:"instrument"}},o)}):r.onreadystatechange=o,t.apply(this,e)}})}},t.prototype.install=function(t){void 0===t&&(t={});var e=t.dsn&&new vt(t.dsn).getStoreEndpoint();this.options.console&&this.instrumentConsole(),this.options.dom&&this.instrumentDOM(),this.options.xhr&&this.instrumentXHR({filterUrl:e}),this.options.fetch&&this.instrumentFetch({filterUrl:e}),this.options.beacon&&this.instrumentBeacon({filterUrl:e}),this.options.history&&this.instrumentHistory()},t}(),Ee="cause",we=5,xe=function(){function t(t){void 0===t&&(t={}),this.name="LinkedErrors",this.key=t.key||Ee,this.limit=t.limit||we}return t.prototype.install=function(){var t=this;ct(function(e){return e.addEventProcessor(t.handler.bind(t))})},t.prototype.handler=function(t,e){if(!(t.exception&&t.exception.values&&e&&e.originalException instanceof Error))return t;var n=this.walkErrorTree(e.originalException,this.key);return t.exception.values=u(t.exception.values,n),t},t.prototype.walkErrorTree=function(t,e,n){if(void 0===n&&(n=[]),!(t[e]instanceof Error)||n.length>=this.limit)return n;var r=Xt(zt(t[e]));return this.walkErrorTree(t[e],e,u(n,[r]))},t}();!function(t){t.Crash="crash",t.Deprecation="deprecation",t.Intervention="intervention"}(me||(me={}));var Se=function(){function t(t){void 0===t&&(t={types:[me.Crash,me.Deprecation,me.Intervention]}),this.options=t,this.name="ReportingObserver"}return t.prototype.install=function(){kt()&&new(S().ReportingObserver)(this.handler.bind(this),{buffered:!0,types:this.options.types}).observe()},t.prototype.handler=function(t){var e,n,r=function(t){lt(function(e){e.setExtra("url",t.url);var n="ReportingObserver ["+t.type+"]",r="No details available";if(t.body){var o,i={};for(var a in t.body)i[a]=t.body[a];if(e.setExtra("body",i),t.type===me.Crash)r=[(o=t.body).crashId||"",o.reason||""].join(" ").trim()||r;else r=(o=t.body).message||r}st(n+": "+r)})};try{for(var o=function(t){var e="function"==typeof Symbol&&t[Symbol.iterator],n=0;return e?e.call(t):{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}}}(t),i=o.next();!i.done;i=o.next()){r(i.value)}}catch(t){e={error:t}}finally{try{i&&!i.done&&(n=o.return)&&n.call(o)}finally{if(e)throw e.error}}},t}(),ke=S(),Oe=function(){function t(){this.name="UserAgent"}return t.prototype.install=function(){var t=this;ct(function(e){e.addEventProcessor(function(e){return o(t,void 0,void 0,function(){var t;return i(this,function(n){return ke.navigator&&ke.location?((t=e.request||{}).url=t.url||ke.location.href,t.headers=t.headers||{},t.headers["User-Agent"]=ke.navigator.userAgent,[2,r({},e,{request:t})]):[2,e]})})})})},t}(),je=function(){function t(t){void 0===t&&(t={}),this.name="Ember",this.Ember=t.Ember||S().Ember}return t.prototype.install=function(){var t=this;if(this.Ember){var e=this.Ember.onerror;this.Ember.onerror=function(n){lt(function(e){t.addIntegrationToSdkInfo(e),ft().captureException(n,{originalException:n})}),"function"==typeof e&&e.call(t.Ember,n)},this.Ember.RSVP.on("error",function(e){var n=ft().pushScope();e instanceof Error?(n.setExtra("context","Unhandled Promise error detected"),t.addIntegrationToSdkInfo(n),ft().captureException(e,{originalException:e})):(n.setExtra("reason",e),t.addIntegrationToSdkInfo(n),st("Unhandled Promise error detected")),ft().popScope()})}},t.prototype.addIntegrationToSdkInfo=function(t){var e=this;t.addEventProcessor(function(t){return o(e,void 0,void 0,function(){var e;return i(this,function(n){return t.sdk&&(e=t.sdk.integrations||[],t.sdk=r({},t.sdk,{integrations:u(e,["ember"])})),[2,t]})})})},t}(),Te=function(){function t(t){void 0===t&&(t={}),this.name="Vue",this.Vue=t.Vue||S().Vue}return t.prototype.formatComponentName=function(t){if(t.$root===t)return"root instance";var e=t._isVue?t.$options.name||t.$options._componentTag:t.name;return(e?"component <"+e+">":"anonymous component")+(t._isVue&&t.$options.__file?" at "+t.$options.__file:"")},t.prototype.install=function(){var t=this;if(this.Vue&&this.Vue.config){var e=this.Vue.config.errorHandler;this.Vue.config.errorHandler=function(n,a,s){var c={};w(a)&&(c.componentName=t.formatComponentName(a),c.propsData=a.$options.propsData),m(s)||(c.lifecycleHook=s),lt(function(e){Object.keys(c).forEach(function(t){e.setExtra(t,c[t])}),e.addEventProcessor(function(e){return o(t,void 0,void 0,function(){var t;return i(this,function(n){return e.sdk&&(t=e.sdk.integrations||[],e.sdk=r({},e.sdk,{integrations:u(t,["vue"])})),[2,e]})})}),ft().captureException(n,{originalException:n})}),"function"==typeof e&&e.call(t.Vue,n,a,s)}}},t}(),Me=Object.freeze({GlobalHandlers:ve,TryCatch:ye,Breadcrumbs:_e,LinkedErrors:xe,ReportingObserver:Se,UserAgent:Oe,Ember:je,Vue:Te}),Be=[new _t.Dedupe,new _t.InboundFilters,new _t.FunctionToString,new ye,new _e,new ve,new Se,new xe,new Oe];var Pe=r({},_t,Me);return t.Integrations=Pe,t.Transports=ie,t.Severity=p,t.Status=h,t.addBreadcrumb=it,t.captureException=at,t.captureEvent=ut,t.captureMessage=st,t.configureScope=ct,t.withScope=lt,t.getHubFromCarrier=ht,t.getCurrentHub=ft,t.Hub=pt,t.Scope=dt,t.BrowserBackend=ae,t.BrowserClient=se,t.defaultIntegrations=Be,t.forceLoad=function(){},t.init=function(t){mt(se,t,Be)},t.lastEventId=function(){return ft().lastEventId()},t.onLoad=function(t){t()},t.showReportDialog=function(t){void 0===t&&(t={}),t.eventId||(t.eventId=ft().lastEventId()),ft().getClient().showReportDialog(t)},t.SDK_NAME=ue,t.SDK_VERSION="4.0.6",t}({}); +//# sourceMappingURL=bundle.min.js.map diff --git a/core/templates/core/500.jinja b/core/templates/core/500.jinja index 493d64ba..acfadd34 100644 --- a/core/templates/core/500.jinja +++ b/core/templates/core/500.jinja @@ -1,12 +1,16 @@ {% extends "core/base.jinja" %} {% block head %} {{ super() }} - + {% if settings.EXTERNAL_RES %} + + {% else %} + + {% endif %} {% endblock head %} {% block content %}

{% trans %}500, Server Error{% endtrans %}

- {% if request.sentry_dsn %} + {% if settings.SENTRY_DSN %}