From 91bdd791f119261a1affc5ecfb3a3e37deda2b8e Mon Sep 17 00:00:00 2001 From: fatima Date: Thu, 30 Apr 2026 13:28:53 +0200 Subject: [PATCH] Bug : Affichage des demandes de conges --- SIRH/__init__.py | 0 SIRH/asgi.py | 16 - SIRH/static/SIRH/PS1.jpg | Bin 59768 -> 0 bytes SIRH/static/SIRH/cerfig.jpeg | Bin 184572 -> 0 bytes SIRH/static/SIRH/icons.css | 2078 --- SIRH/static/SIRH/per1.webp | Bin 134594 -> 0 bytes SIRH/static/SIRH/user.jpg | Bin 86713 -> 0 bytes SIRH/static/templates/SIRH/index.html | 157 - SIRH/static/templates/SIRH/login.html | 197 - .../static/templates/SIRH/menu_principal.html | 150 - SIRH/static/templates/SIRH/message.html | 10 - SIRH/static/templates/SIRH/monprofil.html | 384 - SIRH/static/templates/SIRH/parametre.html | 223 - SIRH/static/templates/SIRH/rapport.html | 205 - SIRH/static/templates/SIRH/registration | 0 SIRH/static/templates/SIRH/rest.html | 33 - SIRH/static/templates/SIRH/tiket.html | 620 - SIRH/static/templates/menu_principale.js | 12 - SIRH/templates/SIRH/BASE.html | 31 - SIRH/templates/SIRH/login.html | 43 - SIRH/urls.py | 67 - SIRH/views.py | 37 - SIRH/wsgi.py | 16 - gestion_conge/__init__.py | 0 gestion_conge/admin.py | 3 - gestion_conge/apps.py | 6 - gestion_conge/forms.py | 17 - gestion_conge/migrations/0001_initial.py | 30 - gestion_conge/migrations/__init__.py | 0 gestion_conge/models.py | 36 - .../static/gestion_conge/js/detail_conges.js | 75 - .../static/gestion_conge/js/index.js | 71 - .../templates/gestion_conge/index.html | 51 - .../parts/modalDemandeConge.html | 26 - .../gestion_conge/parts/modalDetailConge.html | 92 - .../parts/modalModificationConge.html | 48 - .../gestion_conge/parts/modalRefus.html | 24 - gestion_conge/tests.py | 3 - gestion_conge/urls.py | 27 - gestion_employe/__init__.py | 0 gestion_employe/admin.py | 14 - gestion_employe/forms.py | 84 - gestion_employe/migrations/0001_initial.py | 88 - .../0002_alter_contrat_type_contrat.py | 18 - gestion_employe/migrations/__init__.py | 0 .../static/gestion_employe/js/index.js | 263 - .../static/gestion_employe/js/mon_profil.js | 46 - .../templates/gestion_employe/index.html | 67 - .../gestion_employe/modifier-profil.html | 105 - .../parts/modalAffectationProjet.html | 28 - .../parts/modalAjoutFormation.html | 21 - .../parts/modalCreationContrat.html | 57 - .../parts/modalDetailEmploye.html | 136 - .../gestion_employe/parts/modalDocument.html | 41 - .../parts/modalListeContratExpirants.html | 17 - .../parts/modificationMotPasse.html | 36 - .../templatetags/tags_personnaliser.py | 24 - gestion_employe/tests.py | 3 - gestion_projet/__init__.py | 0 gestion_projet/admin.py | 6 - gestion_projet/forms.py | 176 - gestion_projet/migrations/0001_initial.py | 107 - gestion_projet/migrations/__init__.py | 0 gestion_projet/models.py | 309 - .../gestion_projet/js/creation_projet.js | 19 - .../js/enregistrement_bailleur.js | 23 - .../js/enregistrement_financement.js | 22 - .../static/gestion_projet/js/index.js | 64 - .../js/liste_documents_projet.js | 20 - .../gestion_projet/js/suivi-activites.js | 59 - .../gestion_projet/ajout-financement.html | 37 - .../gestion_projet/creation_projet.html | 32 - .../templates/gestion_projet/index.html | 61 - .../parts/creation_bailleur.html | 20 - .../parts/liste_document_projet.html | 16 - .../parts/modalAjoutActivite.html | 20 - .../parts/modalAjoutDocument.html | 20 - .../parts/modalAjoutLivrable.html | 20 - .../parts/modalAjoutProjet.html | 21 - .../parts/modalAnnulerActivite.html | 26 - .../parts/modalDetailActivite.html | 58 - .../parts/modalDetailProjet.html | 115 - .../parts/modalFinancement.html | 20 - .../parts/modalMiseAJourDepense.html | 36 - .../gestion_projet/suivi_activite.html | 64 - gestion_projet/tests.py | 3 - gestion_projet/urls.py | 122 - gestion_projet/views.py | 485 - gestion_salle/__init__.py | 0 gestion_salle/admin.py | 3 - gestion_salle/apps.py | 5 - gestion_salle/forms.py | 32 - gestion_salle/migrations/0001_initial.py | 34 - gestion_salle/migrations/__init__.py | 0 .../templates/gestion_salle/index.html | 59 - .../parts/ModalRefusReservation.html | 22 - .../parts/ModaleAjoutLienZoom.html | 26 - .../parts/modalCreationReservation.html | 23 - .../parts/modalDetailResevation.html | 71 - .../parts/modalListeValidation.html | 16 - gestion_salle/tests.py | 3 - gestion_salle/urls.py | 48 - manage.py | 22 - static/css/bootstrap.min.css | 6 - static/css/styles.css | 278 - static/css/tabulator_bootstrap5.min.css | 2 - ...bulator_bootstrap5.min.css:Zone.Identifier | Bin 25 -> 0 bytes static/img/cerfig.jpg | Bin 86605 -> 0 bytes static/js/monprofil.js | 13 - static/js/rapport.js | 102 - static/js/sirh-index.js | 75 - staticfiles/admin/css/autocomplete.css | 279 - staticfiles/admin/css/base.css | 1180 -- staticfiles/admin/css/changelists.css | 343 - staticfiles/admin/css/dark_mode.css | 130 - staticfiles/admin/css/dashboard.css | 29 - staticfiles/admin/css/forms.css | 498 - staticfiles/admin/css/login.css | 61 - staticfiles/admin/css/nav_sidebar.css | 150 - staticfiles/admin/css/responsive.css | 904 -- staticfiles/admin/css/responsive_rtl.css | 89 - staticfiles/admin/css/rtl.css | 293 - .../admin/css/unusable_password_field.css | 19 - .../css/vendor/select2/LICENSE-SELECT2.md | 21 - .../admin/css/vendor/select2/select2.css | 481 - .../admin/css/vendor/select2/select2.min.css | 1 - staticfiles/admin/css/widgets.css | 613 - staticfiles/admin/img/LICENSE | 20 - staticfiles/admin/img/README.txt | 7 - staticfiles/admin/img/calendar-icons.svg | 63 - staticfiles/admin/img/gis/move_vertex_off.svg | 1 - staticfiles/admin/img/gis/move_vertex_on.svg | 1 - staticfiles/admin/img/icon-addlink.svg | 3 - staticfiles/admin/img/icon-alert.svg | 3 - staticfiles/admin/img/icon-calendar.svg | 9 - staticfiles/admin/img/icon-changelink.svg | 3 - staticfiles/admin/img/icon-clock.svg | 9 - staticfiles/admin/img/icon-deletelink.svg | 3 - staticfiles/admin/img/icon-hidelink.svg | 3 - staticfiles/admin/img/icon-no.svg | 3 - staticfiles/admin/img/icon-unknown-alt.svg | 3 - staticfiles/admin/img/icon-unknown.svg | 3 - staticfiles/admin/img/icon-viewlink.svg | 3 - staticfiles/admin/img/icon-yes.svg | 3 - staticfiles/admin/img/inline-delete.svg | 3 - staticfiles/admin/img/search.svg | 3 - staticfiles/admin/img/selector-icons.svg | 34 - staticfiles/admin/img/sorting-icons.svg | 19 - staticfiles/admin/img/tooltag-add.svg | 3 - staticfiles/admin/img/tooltag-arrowright.svg | 3 - staticfiles/admin/js/SelectBox.js | 116 - staticfiles/admin/js/SelectFilter2.js | 311 - staticfiles/admin/js/actions.js | 204 - .../admin/js/admin/DateTimeShortcuts.js | 408 - .../admin/js/admin/RelatedObjectLookups.js | 252 - staticfiles/admin/js/autocomplete.js | 33 - staticfiles/admin/js/calendar.js | 239 - staticfiles/admin/js/cancel.js | 29 - staticfiles/admin/js/change_form.js | 16 - staticfiles/admin/js/core.js | 184 - staticfiles/admin/js/filters.js | 30 - staticfiles/admin/js/inlines.js | 359 - staticfiles/admin/js/jquery.init.js | 8 - staticfiles/admin/js/nav_sidebar.js | 79 - staticfiles/admin/js/popup_response.js | 15 - staticfiles/admin/js/prepopulate.js | 43 - staticfiles/admin/js/prepopulate_init.js | 15 - staticfiles/admin/js/theme.js | 51 - .../admin/js/unusable_password_field.js | 29 - staticfiles/admin/js/urlify.js | 169 - .../admin/js/vendor/jquery/LICENSE.txt | 20 - staticfiles/admin/js/vendor/jquery/jquery.js | 10716 ---------------- .../admin/js/vendor/jquery/jquery.min.js | 2 - .../admin/js/vendor/select2/LICENSE.md | 21 - .../admin/js/vendor/select2/i18n/af.js | 3 - .../admin/js/vendor/select2/i18n/ar.js | 3 - .../admin/js/vendor/select2/i18n/az.js | 3 - .../admin/js/vendor/select2/i18n/bg.js | 3 - .../admin/js/vendor/select2/i18n/bn.js | 3 - .../admin/js/vendor/select2/i18n/bs.js | 3 - .../admin/js/vendor/select2/i18n/ca.js | 3 - .../admin/js/vendor/select2/i18n/cs.js | 3 - .../admin/js/vendor/select2/i18n/da.js | 3 - .../admin/js/vendor/select2/i18n/de.js | 3 - .../admin/js/vendor/select2/i18n/dsb.js | 3 - .../admin/js/vendor/select2/i18n/el.js | 3 - .../admin/js/vendor/select2/i18n/en.js | 3 - .../admin/js/vendor/select2/i18n/es.js | 3 - .../admin/js/vendor/select2/i18n/et.js | 3 - .../admin/js/vendor/select2/i18n/eu.js | 3 - .../admin/js/vendor/select2/i18n/fa.js | 3 - .../admin/js/vendor/select2/i18n/fi.js | 3 - .../admin/js/vendor/select2/i18n/fr.js | 3 - .../admin/js/vendor/select2/i18n/gl.js | 3 - .../admin/js/vendor/select2/i18n/he.js | 3 - .../admin/js/vendor/select2/i18n/hi.js | 3 - .../admin/js/vendor/select2/i18n/hr.js | 3 - .../admin/js/vendor/select2/i18n/hsb.js | 3 - .../admin/js/vendor/select2/i18n/hu.js | 3 - .../admin/js/vendor/select2/i18n/hy.js | 3 - .../admin/js/vendor/select2/i18n/id.js | 3 - .../admin/js/vendor/select2/i18n/is.js | 3 - .../admin/js/vendor/select2/i18n/it.js | 3 - .../admin/js/vendor/select2/i18n/ja.js | 3 - .../admin/js/vendor/select2/i18n/ka.js | 3 - .../admin/js/vendor/select2/i18n/km.js | 3 - .../admin/js/vendor/select2/i18n/ko.js | 3 - .../admin/js/vendor/select2/i18n/lt.js | 3 - .../admin/js/vendor/select2/i18n/lv.js | 3 - .../admin/js/vendor/select2/i18n/mk.js | 3 - .../admin/js/vendor/select2/i18n/ms.js | 3 - .../admin/js/vendor/select2/i18n/nb.js | 3 - .../admin/js/vendor/select2/i18n/ne.js | 3 - .../admin/js/vendor/select2/i18n/nl.js | 3 - .../admin/js/vendor/select2/i18n/pl.js | 3 - .../admin/js/vendor/select2/i18n/ps.js | 3 - .../admin/js/vendor/select2/i18n/pt-BR.js | 3 - .../admin/js/vendor/select2/i18n/pt.js | 3 - .../admin/js/vendor/select2/i18n/ro.js | 3 - .../admin/js/vendor/select2/i18n/ru.js | 3 - .../admin/js/vendor/select2/i18n/sk.js | 3 - .../admin/js/vendor/select2/i18n/sl.js | 3 - .../admin/js/vendor/select2/i18n/sq.js | 3 - .../admin/js/vendor/select2/i18n/sr-Cyrl.js | 3 - .../admin/js/vendor/select2/i18n/sr.js | 3 - .../admin/js/vendor/select2/i18n/sv.js | 3 - .../admin/js/vendor/select2/i18n/th.js | 3 - .../admin/js/vendor/select2/i18n/tk.js | 3 - .../admin/js/vendor/select2/i18n/tr.js | 3 - .../admin/js/vendor/select2/i18n/uk.js | 3 - .../admin/js/vendor/select2/i18n/vi.js | 3 - .../admin/js/vendor/select2/i18n/zh-CN.js | 3 - .../admin/js/vendor/select2/i18n/zh-TW.js | 3 - .../admin/js/vendor/select2/select2.full.js | 6820 ---------- .../js/vendor/select2/select2.full.min.js | 2 - .../admin/js/vendor/xregexp/LICENSE.txt | 21 - .../admin/js/vendor/xregexp/xregexp.js | 6126 --------- .../admin/js/vendor/xregexp/xregexp.min.js | 17 - staticfiles/bootstrap.min.css | 6 - staticfiles/css/bootstrap.min.css | 6 - staticfiles/css/styles.css | 278 - staticfiles/css/tabulator_bootstrap5.min.css | 2 - ...bulator_bootstrap5.min.css:Zone.Identifier | Bin 25 -> 0 bytes staticfiles/gestion_conge/admin.py | 3 - staticfiles/gestion_conge/apps.py | 6 - staticfiles/gestion_conge/js/detail_conges.js | 75 - staticfiles/gestion_conge/js/index.js | 71 - staticfiles/gestion_employe/js/index.js | 263 - staticfiles/gestion_employe/js/mon_profil.js | 42 - .../gestion_projet/js/creation_projet.js | 19 - .../js/enregistrement_bailleur.js | 23 - .../js/enregistrement_financement.js | 22 - staticfiles/gestion_projet/js/index.js | 64 - .../js/liste_documents_projet.js | 20 - .../gestion_projet/js/suivi-activites.js | 59 - staticfiles/gestion_salle/js/index.js | 193 - staticfiles/icons.css | 2078 --- staticfiles/img/cerfig.jpg | Bin 86605 -> 0 bytes staticfiles/js/monprofil.js | 13 - staticfiles/js/rapport.js | 102 - staticfiles/js/sirh-index.js | 75 - staticfiles/styles.css | 278 - 262 files changed, 44163 deletions(-) delete mode 100644 SIRH/__init__.py delete mode 100644 SIRH/asgi.py delete mode 100644 SIRH/static/SIRH/PS1.jpg delete mode 100644 SIRH/static/SIRH/cerfig.jpeg delete mode 100644 SIRH/static/SIRH/icons.css delete mode 100644 SIRH/static/SIRH/per1.webp delete mode 100644 SIRH/static/SIRH/user.jpg delete mode 100644 SIRH/static/templates/SIRH/index.html delete mode 100644 SIRH/static/templates/SIRH/login.html delete mode 100644 SIRH/static/templates/SIRH/menu_principal.html delete mode 100644 SIRH/static/templates/SIRH/message.html delete mode 100644 SIRH/static/templates/SIRH/monprofil.html delete mode 100644 SIRH/static/templates/SIRH/parametre.html delete mode 100644 SIRH/static/templates/SIRH/rapport.html delete mode 100644 SIRH/static/templates/SIRH/registration delete mode 100644 SIRH/static/templates/SIRH/rest.html delete mode 100644 SIRH/static/templates/SIRH/tiket.html delete mode 100644 SIRH/static/templates/menu_principale.js delete mode 100644 SIRH/templates/SIRH/BASE.html delete mode 100644 SIRH/templates/SIRH/login.html delete mode 100644 SIRH/urls.py delete mode 100644 SIRH/views.py delete mode 100644 SIRH/wsgi.py delete mode 100644 gestion_conge/__init__.py delete mode 100644 gestion_conge/admin.py delete mode 100644 gestion_conge/apps.py delete mode 100644 gestion_conge/forms.py delete mode 100644 gestion_conge/migrations/0001_initial.py delete mode 100644 gestion_conge/migrations/__init__.py delete mode 100644 gestion_conge/models.py delete mode 100644 gestion_conge/static/gestion_conge/js/detail_conges.js delete mode 100644 gestion_conge/static/gestion_conge/js/index.js delete mode 100644 gestion_conge/templates/gestion_conge/index.html delete mode 100644 gestion_conge/templates/gestion_conge/parts/modalDemandeConge.html delete mode 100644 gestion_conge/templates/gestion_conge/parts/modalDetailConge.html delete mode 100644 gestion_conge/templates/gestion_conge/parts/modalModificationConge.html delete mode 100644 gestion_conge/templates/gestion_conge/parts/modalRefus.html delete mode 100644 gestion_conge/tests.py delete mode 100644 gestion_conge/urls.py delete mode 100644 gestion_employe/__init__.py delete mode 100644 gestion_employe/admin.py delete mode 100644 gestion_employe/forms.py delete mode 100644 gestion_employe/migrations/0001_initial.py delete mode 100644 gestion_employe/migrations/0002_alter_contrat_type_contrat.py delete mode 100644 gestion_employe/migrations/__init__.py delete mode 100644 gestion_employe/static/gestion_employe/js/index.js delete mode 100644 gestion_employe/static/gestion_employe/js/mon_profil.js delete mode 100644 gestion_employe/templates/gestion_employe/index.html delete mode 100644 gestion_employe/templates/gestion_employe/modifier-profil.html delete mode 100644 gestion_employe/templates/gestion_employe/parts/modalAffectationProjet.html delete mode 100644 gestion_employe/templates/gestion_employe/parts/modalAjoutFormation.html delete mode 100644 gestion_employe/templates/gestion_employe/parts/modalCreationContrat.html delete mode 100644 gestion_employe/templates/gestion_employe/parts/modalDetailEmploye.html delete mode 100644 gestion_employe/templates/gestion_employe/parts/modalDocument.html delete mode 100644 gestion_employe/templates/gestion_employe/parts/modalListeContratExpirants.html delete mode 100644 gestion_employe/templates/gestion_employe/parts/modificationMotPasse.html delete mode 100644 gestion_employe/templatetags/tags_personnaliser.py delete mode 100644 gestion_employe/tests.py delete mode 100644 gestion_projet/__init__.py delete mode 100644 gestion_projet/admin.py delete mode 100644 gestion_projet/forms.py delete mode 100644 gestion_projet/migrations/0001_initial.py delete mode 100644 gestion_projet/migrations/__init__.py delete mode 100644 gestion_projet/models.py delete mode 100644 gestion_projet/static/gestion_projet/js/creation_projet.js delete mode 100644 gestion_projet/static/gestion_projet/js/enregistrement_bailleur.js delete mode 100644 gestion_projet/static/gestion_projet/js/enregistrement_financement.js delete mode 100644 gestion_projet/static/gestion_projet/js/index.js delete mode 100644 gestion_projet/static/gestion_projet/js/liste_documents_projet.js delete mode 100644 gestion_projet/static/gestion_projet/js/suivi-activites.js delete mode 100644 gestion_projet/templates/gestion_projet/ajout-financement.html delete mode 100644 gestion_projet/templates/gestion_projet/creation_projet.html delete mode 100644 gestion_projet/templates/gestion_projet/index.html delete mode 100644 gestion_projet/templates/gestion_projet/parts/creation_bailleur.html delete mode 100644 gestion_projet/templates/gestion_projet/parts/liste_document_projet.html delete mode 100644 gestion_projet/templates/gestion_projet/parts/modalAjoutActivite.html delete mode 100644 gestion_projet/templates/gestion_projet/parts/modalAjoutDocument.html delete mode 100644 gestion_projet/templates/gestion_projet/parts/modalAjoutLivrable.html delete mode 100644 gestion_projet/templates/gestion_projet/parts/modalAjoutProjet.html delete mode 100644 gestion_projet/templates/gestion_projet/parts/modalAnnulerActivite.html delete mode 100644 gestion_projet/templates/gestion_projet/parts/modalDetailActivite.html delete mode 100644 gestion_projet/templates/gestion_projet/parts/modalDetailProjet.html delete mode 100644 gestion_projet/templates/gestion_projet/parts/modalFinancement.html delete mode 100644 gestion_projet/templates/gestion_projet/parts/modalMiseAJourDepense.html delete mode 100644 gestion_projet/templates/gestion_projet/suivi_activite.html delete mode 100644 gestion_projet/tests.py delete mode 100644 gestion_projet/urls.py delete mode 100644 gestion_projet/views.py delete mode 100644 gestion_salle/__init__.py delete mode 100644 gestion_salle/admin.py delete mode 100644 gestion_salle/apps.py delete mode 100644 gestion_salle/forms.py delete mode 100644 gestion_salle/migrations/0001_initial.py delete mode 100644 gestion_salle/migrations/__init__.py delete mode 100644 gestion_salle/templates/gestion_salle/index.html delete mode 100644 gestion_salle/templates/gestion_salle/parts/ModalRefusReservation.html delete mode 100644 gestion_salle/templates/gestion_salle/parts/ModaleAjoutLienZoom.html delete mode 100644 gestion_salle/templates/gestion_salle/parts/modalCreationReservation.html delete mode 100644 gestion_salle/templates/gestion_salle/parts/modalDetailResevation.html delete mode 100644 gestion_salle/templates/gestion_salle/parts/modalListeValidation.html delete mode 100644 gestion_salle/tests.py delete mode 100644 gestion_salle/urls.py delete mode 100644 manage.py delete mode 100644 static/css/bootstrap.min.css delete mode 100644 static/css/styles.css delete mode 100644 static/css/tabulator_bootstrap5.min.css delete mode 100644 static/css/tabulator_bootstrap5.min.css:Zone.Identifier delete mode 100644 static/img/cerfig.jpg delete mode 100644 static/js/monprofil.js delete mode 100644 static/js/rapport.js delete mode 100644 static/js/sirh-index.js delete mode 100644 staticfiles/admin/css/autocomplete.css delete mode 100644 staticfiles/admin/css/base.css delete mode 100644 staticfiles/admin/css/changelists.css delete mode 100644 staticfiles/admin/css/dark_mode.css delete mode 100644 staticfiles/admin/css/dashboard.css delete mode 100644 staticfiles/admin/css/forms.css delete mode 100644 staticfiles/admin/css/login.css delete mode 100644 staticfiles/admin/css/nav_sidebar.css delete mode 100644 staticfiles/admin/css/responsive.css delete mode 100644 staticfiles/admin/css/responsive_rtl.css delete mode 100644 staticfiles/admin/css/rtl.css delete mode 100644 staticfiles/admin/css/unusable_password_field.css delete mode 100644 staticfiles/admin/css/vendor/select2/LICENSE-SELECT2.md delete mode 100644 staticfiles/admin/css/vendor/select2/select2.css delete mode 100644 staticfiles/admin/css/vendor/select2/select2.min.css delete mode 100644 staticfiles/admin/css/widgets.css delete mode 100644 staticfiles/admin/img/LICENSE delete mode 100644 staticfiles/admin/img/README.txt delete mode 100644 staticfiles/admin/img/calendar-icons.svg delete mode 100644 staticfiles/admin/img/gis/move_vertex_off.svg delete mode 100644 staticfiles/admin/img/gis/move_vertex_on.svg delete mode 100644 staticfiles/admin/img/icon-addlink.svg delete mode 100644 staticfiles/admin/img/icon-alert.svg delete mode 100644 staticfiles/admin/img/icon-calendar.svg delete mode 100644 staticfiles/admin/img/icon-changelink.svg delete mode 100644 staticfiles/admin/img/icon-clock.svg delete mode 100644 staticfiles/admin/img/icon-deletelink.svg delete mode 100644 staticfiles/admin/img/icon-hidelink.svg delete mode 100644 staticfiles/admin/img/icon-no.svg delete mode 100644 staticfiles/admin/img/icon-unknown-alt.svg delete mode 100644 staticfiles/admin/img/icon-unknown.svg delete mode 100644 staticfiles/admin/img/icon-viewlink.svg delete mode 100644 staticfiles/admin/img/icon-yes.svg delete mode 100644 staticfiles/admin/img/inline-delete.svg delete mode 100644 staticfiles/admin/img/search.svg delete mode 100644 staticfiles/admin/img/selector-icons.svg delete mode 100644 staticfiles/admin/img/sorting-icons.svg delete mode 100644 staticfiles/admin/img/tooltag-add.svg delete mode 100644 staticfiles/admin/img/tooltag-arrowright.svg delete mode 100644 staticfiles/admin/js/SelectBox.js delete mode 100644 staticfiles/admin/js/SelectFilter2.js delete mode 100644 staticfiles/admin/js/actions.js delete mode 100644 staticfiles/admin/js/admin/DateTimeShortcuts.js delete mode 100644 staticfiles/admin/js/admin/RelatedObjectLookups.js delete mode 100644 staticfiles/admin/js/autocomplete.js delete mode 100644 staticfiles/admin/js/calendar.js delete mode 100644 staticfiles/admin/js/cancel.js delete mode 100644 staticfiles/admin/js/change_form.js delete mode 100644 staticfiles/admin/js/core.js delete mode 100644 staticfiles/admin/js/filters.js delete mode 100644 staticfiles/admin/js/inlines.js delete mode 100644 staticfiles/admin/js/jquery.init.js delete mode 100644 staticfiles/admin/js/nav_sidebar.js delete mode 100644 staticfiles/admin/js/popup_response.js delete mode 100644 staticfiles/admin/js/prepopulate.js delete mode 100644 staticfiles/admin/js/prepopulate_init.js delete mode 100644 staticfiles/admin/js/theme.js delete mode 100644 staticfiles/admin/js/unusable_password_field.js delete mode 100644 staticfiles/admin/js/urlify.js delete mode 100644 staticfiles/admin/js/vendor/jquery/LICENSE.txt delete mode 100644 staticfiles/admin/js/vendor/jquery/jquery.js delete mode 100644 staticfiles/admin/js/vendor/jquery/jquery.min.js delete mode 100644 staticfiles/admin/js/vendor/select2/LICENSE.md delete mode 100644 staticfiles/admin/js/vendor/select2/i18n/af.js delete mode 100644 staticfiles/admin/js/vendor/select2/i18n/ar.js delete mode 100644 staticfiles/admin/js/vendor/select2/i18n/az.js delete mode 100644 staticfiles/admin/js/vendor/select2/i18n/bg.js delete mode 100644 staticfiles/admin/js/vendor/select2/i18n/bn.js delete mode 100644 staticfiles/admin/js/vendor/select2/i18n/bs.js delete mode 100644 staticfiles/admin/js/vendor/select2/i18n/ca.js delete mode 100644 staticfiles/admin/js/vendor/select2/i18n/cs.js delete mode 100644 staticfiles/admin/js/vendor/select2/i18n/da.js delete mode 100644 staticfiles/admin/js/vendor/select2/i18n/de.js delete mode 100644 staticfiles/admin/js/vendor/select2/i18n/dsb.js delete mode 100644 staticfiles/admin/js/vendor/select2/i18n/el.js delete mode 100644 staticfiles/admin/js/vendor/select2/i18n/en.js delete mode 100644 staticfiles/admin/js/vendor/select2/i18n/es.js delete mode 100644 staticfiles/admin/js/vendor/select2/i18n/et.js delete mode 100644 staticfiles/admin/js/vendor/select2/i18n/eu.js delete mode 100644 staticfiles/admin/js/vendor/select2/i18n/fa.js delete mode 100644 staticfiles/admin/js/vendor/select2/i18n/fi.js delete mode 100644 staticfiles/admin/js/vendor/select2/i18n/fr.js delete mode 100644 staticfiles/admin/js/vendor/select2/i18n/gl.js delete mode 100644 staticfiles/admin/js/vendor/select2/i18n/he.js delete mode 100644 staticfiles/admin/js/vendor/select2/i18n/hi.js delete mode 100644 staticfiles/admin/js/vendor/select2/i18n/hr.js delete mode 100644 staticfiles/admin/js/vendor/select2/i18n/hsb.js delete mode 100644 staticfiles/admin/js/vendor/select2/i18n/hu.js delete mode 100644 staticfiles/admin/js/vendor/select2/i18n/hy.js delete mode 100644 staticfiles/admin/js/vendor/select2/i18n/id.js delete mode 100644 staticfiles/admin/js/vendor/select2/i18n/is.js delete mode 100644 staticfiles/admin/js/vendor/select2/i18n/it.js delete mode 100644 staticfiles/admin/js/vendor/select2/i18n/ja.js delete mode 100644 staticfiles/admin/js/vendor/select2/i18n/ka.js delete mode 100644 staticfiles/admin/js/vendor/select2/i18n/km.js delete mode 100644 staticfiles/admin/js/vendor/select2/i18n/ko.js delete mode 100644 staticfiles/admin/js/vendor/select2/i18n/lt.js delete mode 100644 staticfiles/admin/js/vendor/select2/i18n/lv.js delete mode 100644 staticfiles/admin/js/vendor/select2/i18n/mk.js delete mode 100644 staticfiles/admin/js/vendor/select2/i18n/ms.js delete mode 100644 staticfiles/admin/js/vendor/select2/i18n/nb.js delete mode 100644 staticfiles/admin/js/vendor/select2/i18n/ne.js delete mode 100644 staticfiles/admin/js/vendor/select2/i18n/nl.js delete mode 100644 staticfiles/admin/js/vendor/select2/i18n/pl.js delete mode 100644 staticfiles/admin/js/vendor/select2/i18n/ps.js delete mode 100644 staticfiles/admin/js/vendor/select2/i18n/pt-BR.js delete mode 100644 staticfiles/admin/js/vendor/select2/i18n/pt.js delete mode 100644 staticfiles/admin/js/vendor/select2/i18n/ro.js delete mode 100644 staticfiles/admin/js/vendor/select2/i18n/ru.js delete mode 100644 staticfiles/admin/js/vendor/select2/i18n/sk.js delete mode 100644 staticfiles/admin/js/vendor/select2/i18n/sl.js delete mode 100644 staticfiles/admin/js/vendor/select2/i18n/sq.js delete mode 100644 staticfiles/admin/js/vendor/select2/i18n/sr-Cyrl.js delete mode 100644 staticfiles/admin/js/vendor/select2/i18n/sr.js delete mode 100644 staticfiles/admin/js/vendor/select2/i18n/sv.js delete mode 100644 staticfiles/admin/js/vendor/select2/i18n/th.js delete mode 100644 staticfiles/admin/js/vendor/select2/i18n/tk.js delete mode 100644 staticfiles/admin/js/vendor/select2/i18n/tr.js delete mode 100644 staticfiles/admin/js/vendor/select2/i18n/uk.js delete mode 100644 staticfiles/admin/js/vendor/select2/i18n/vi.js delete mode 100644 staticfiles/admin/js/vendor/select2/i18n/zh-CN.js delete mode 100644 staticfiles/admin/js/vendor/select2/i18n/zh-TW.js delete mode 100644 staticfiles/admin/js/vendor/select2/select2.full.js delete mode 100644 staticfiles/admin/js/vendor/select2/select2.full.min.js delete mode 100644 staticfiles/admin/js/vendor/xregexp/LICENSE.txt delete mode 100644 staticfiles/admin/js/vendor/xregexp/xregexp.js delete mode 100644 staticfiles/admin/js/vendor/xregexp/xregexp.min.js delete mode 100644 staticfiles/bootstrap.min.css delete mode 100644 staticfiles/css/bootstrap.min.css delete mode 100644 staticfiles/css/styles.css delete mode 100644 staticfiles/css/tabulator_bootstrap5.min.css delete mode 100644 staticfiles/css/tabulator_bootstrap5.min.css:Zone.Identifier delete mode 100644 staticfiles/gestion_conge/admin.py delete mode 100644 staticfiles/gestion_conge/apps.py delete mode 100644 staticfiles/gestion_conge/js/detail_conges.js delete mode 100644 staticfiles/gestion_conge/js/index.js delete mode 100644 staticfiles/gestion_employe/js/index.js delete mode 100644 staticfiles/gestion_employe/js/mon_profil.js delete mode 100644 staticfiles/gestion_projet/js/creation_projet.js delete mode 100644 staticfiles/gestion_projet/js/enregistrement_bailleur.js delete mode 100644 staticfiles/gestion_projet/js/enregistrement_financement.js delete mode 100644 staticfiles/gestion_projet/js/index.js delete mode 100644 staticfiles/gestion_projet/js/liste_documents_projet.js delete mode 100644 staticfiles/gestion_projet/js/suivi-activites.js delete mode 100644 staticfiles/gestion_salle/js/index.js delete mode 100644 staticfiles/icons.css delete mode 100644 staticfiles/img/cerfig.jpg delete mode 100644 staticfiles/js/monprofil.js delete mode 100644 staticfiles/js/rapport.js delete mode 100644 staticfiles/js/sirh-index.js delete mode 100644 staticfiles/styles.css diff --git a/SIRH/__init__.py b/SIRH/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/SIRH/asgi.py b/SIRH/asgi.py deleted file mode 100644 index 061063b..0000000 --- a/SIRH/asgi.py +++ /dev/null @@ -1,16 +0,0 @@ -""" -ASGI config for SIRH project. - -It exposes the ASGI callable as a module-level variable named ``application``. - -For more information on this file, see -https://docs.djangoproject.com/en/5.2/howto/deployment/asgi/ -""" - -import os - -from django.core.asgi import get_asgi_application - -os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'SIRH.settings') - -application = get_asgi_application() diff --git a/SIRH/static/SIRH/PS1.jpg b/SIRH/static/SIRH/PS1.jpg deleted file mode 100644 index 17bba105289aa9cba45101a33fefe30e86173e4c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 59768 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⪼^)+M}0#-+Q*3#&pwI}2ozwT&EE;^AtEWp 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�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 diff --git a/SIRH/static/SIRH/cerfig.jpeg b/SIRH/static/SIRH/cerfig.jpeg deleted file mode 100644 index da67c8972d876c9490f02c989b711cd546fabb18..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 184572 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

G=N75HO=|Z@3PQjZ&CFp%4TPzu4p~( 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 QOAzTVVOf>NB31wZ0KuFeQ~&?~ diff --git a/SIRH/static/SIRH/user.jpg b/SIRH/static/SIRH/user.jpg deleted file mode 100644 index 7ab6f31dc045c9a28ddb50686ea3f947779d80a9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 86713 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 BBhLT; diff --git a/SIRH/static/templates/SIRH/index.html b/SIRH/static/templates/SIRH/index.html deleted file mode 100644 index 45447a8..0000000 --- a/SIRH/static/templates/SIRH/index.html +++ /dev/null @@ -1,157 +0,0 @@ -{% load static %} - - - - - - - PRINCICALA - - - - - - - - - - - -

-
- - - - -
-

Bienvenue sur le tableau de bord

- - -
-
-
-
Congés en attente
- -

{{ nombre_conges_attente }}

- -
-
-
-
-
Nombre Employés
-

{{ nombre_employes }}

-
- - -
-
-
-
Projets en cours
- -
-
-
-
-

- La liste des employés en congé

- - - - - - - - - - - - - - - {% for employe in personnes_en_conge %} - - - - - - - - {% empty %} - - - - {% endfor %} - -
EmployéType de congéDate de débutDate de finStatut
{{ employe.nom }} {{ employe.prenom }}{{ employe.type }}{{ employe.date_debut }}{{ employe.date_fin }} - {{ employe.statut }} - - -
Personne en conge
-
-
- -
-
- - - diff --git a/SIRH/static/templates/SIRH/login.html b/SIRH/static/templates/SIRH/login.html deleted file mode 100644 index 83546bd..0000000 --- a/SIRH/static/templates/SIRH/login.html +++ /dev/null @@ -1,197 +0,0 @@ -{% load static %} - - - - - - Connexion SI-RH - - - - - - - - - - -
- - - - -{% if messages %} - - - - -{% endif %} -
- {% csrf_token %} -
- - -
-
- - - -
- -
- -

- Mot de passe oublié ? -

-
- - - - - {% if show_politique_modal %} - - - - - - - -> - - -{% endif %} - - - - - - - - - - - - - \ No newline at end of file diff --git a/SIRH/static/templates/SIRH/menu_principal.html b/SIRH/static/templates/SIRH/menu_principal.html deleted file mode 100644 index 974f8bb..0000000 --- a/SIRH/static/templates/SIRH/menu_principal.html +++ /dev/null @@ -1,150 +0,0 @@ -{% load static %} -{% load roles %} - - - - - - - PRINCICALA - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/SIRH/static/templates/SIRH/message.html b/SIRH/static/templates/SIRH/message.html deleted file mode 100644 index 78ba3a4..0000000 --- a/SIRH/static/templates/SIRH/message.html +++ /dev/null @@ -1,10 +0,0 @@ - diff --git a/SIRH/static/templates/SIRH/monprofil.html b/SIRH/static/templates/SIRH/monprofil.html deleted file mode 100644 index 59c672f..0000000 --- a/SIRH/static/templates/SIRH/monprofil.html +++ /dev/null @@ -1,384 +0,0 @@ -{% load static %} - - - - - - Profil utilisateur - - - - - - - - - - -
-
- - {% include 'menu_principal.html' %} - - -
- - {% if messages %} - - - {% endif %} - - - - - -
- - {{ notifications_contrats|length }} -
- - - - - - - -
-
-
-
- -
-

- Mon Profil -

-
- -
- -
-
-

Nom : {{ employe.last_name|default:"Non renseigné" }}

-

Prénom : {{ employe.first_name|default:"Non renseigné" }}

-

Matricule : {{ employe.matricule|default:"Non renseigné" }}

-
-
-

Département : {{ employe.departement|default:"Non renseigné" }}

-

Email : {{ employe.email|default:"Non renseigné" }}

-

Téléphone : {{ employe.telephone|default:"Non renseigné" }}

-
-
- - -
Contrats
- {% for contrat in contrats %} -
-
-
-

Numéro : {{ contrat.numero_contrat }}

-

Type : {{ contrat.type_contrat }}

-

Date début : {{ contrat.date_debut|date:"d/m/Y" }}

-

Date fin : {{ contrat.date_fin|date:"d/m/Y"|default:"Non précisée" }}

-
-
-

Salaire mensuel : - {% if contrat.salaire_mensuel %} - {{ contrat.salaire_mensuel }} GNF - {% else %} - Non précisé - {% endif %} -

-

Statut : - - {{ contrat.statut_auto }} - -

-

Solde congé : {{ contrat.solde_conge|default:"Non précisé" }} jours

-

Fichier : - {% if contrat.fichier_contrat %} - - Télécharger - - {% else %} - Aucun fichier - {% endif %} -

-
-
-
- {% empty %} -

Aucun contrat trouvé.

- {% endfor %} - - -
Projets
-
    - {% for a in affectations %} -
  • -
    - {{ a.projet.nom_projet }} - {{ a.temps_affectation }}% - {% if a.projet.statut %} - - {{ a.projet.statut }} - {% endif %} -
    - -
    - - -
    -
  • - {% empty %} -
  • Aucun projet assigné.
  • - {% endfor %} -
-
- - - -
-
-
-
- - {% for a in affectations %} - - - - {% endfor %} - - -
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/SIRH/static/templates/SIRH/parametre.html b/SIRH/static/templates/SIRH/parametre.html deleted file mode 100644 index 62b46d0..0000000 --- a/SIRH/static/templates/SIRH/parametre.html +++ /dev/null @@ -1,223 +0,0 @@ -{% load static %} - - - - - Paramètres RH - - - - - - - - - -
-
- - {% include 'menu_principal.html' %} - - -
- - -{% if messages %} - - - - - {% endif %} - -

Paramètres Administration

- -
- -
-
-
Départements
- -
- - - - - -
    - {% for d in departements %} -
  • - {{ d.nom }} -
    - - - - - - - -
    - {% csrf_token %} - - - -
    -
    -
  • - - - - - - - {% endfor %} -
-
- - - -
-
-
Groupes et rôles
- -
- -
    - {% for g in groupes %} -
  • - {{ g.name }} - - - -
  • - {% endfor %} -
-
-
- -
-
-
- - - - diff --git a/SIRH/static/templates/SIRH/rapport.html b/SIRH/static/templates/SIRH/rapport.html deleted file mode 100644 index 7131aaa..0000000 --- a/SIRH/static/templates/SIRH/rapport.html +++ /dev/null @@ -1,205 +0,0 @@ -{% load static %} - - - - - Tableau de Bord RH - - - - - - - - - -
-
- {% include 'menu_principal.html' %} - -
-

Tableau de Bord RH

- - - -
-
- -
-
- -
-
- -
-
- - -
-
Total Employés

{{ total_employes }}

-
Hommes

{{ hommes }}

-
Femmes

{{ femmes }}

-
Contrats expirants(2mois)

{{ expirants }}

-
- -
-
Congés en attente
{{ conges_attente }}
-
Projets
(actifs / total)

{{ nb_projets_actifs }} / {{ nb_projets }}

-
Âge moyen
{{ age_moyen }} ans
-
- - -
-
-
Répartition par Département
-
-
-
-
Répartition par genre
-
-
-
- -
-
-
Projets (En cours / Terminés)
-
-
- -
-
Projets par domaine de recherche
-
-
-
- -
-
-
- - - - diff --git a/SIRH/static/templates/SIRH/registration b/SIRH/static/templates/SIRH/registration deleted file mode 100644 index e69de29..0000000 diff --git a/SIRH/static/templates/SIRH/rest.html b/SIRH/static/templates/SIRH/rest.html deleted file mode 100644 index 19f64e1..0000000 --- a/SIRH/static/templates/SIRH/rest.html +++ /dev/null @@ -1,33 +0,0 @@ -{% load static %} - - - - - Mot de passe oublié - - - - -
-

🔑 Réinitialiser le mot de passe

- - {% if messages %} - {% for message in messages %} -
{{ message }}
- {% endfor %} - {% endif %} - -
- {% csrf_token %} -
- - -
- -
-

- Retour à la connexion -

-
- - diff --git a/SIRH/static/templates/SIRH/tiket.html b/SIRH/static/templates/SIRH/tiket.html deleted file mode 100644 index 74b353d..0000000 --- a/SIRH/static/templates/SIRH/tiket.html +++ /dev/null @@ -1,620 +0,0 @@ -{% load static %} -{% load roles %} - - - - - - - Mes demandes - - - - - - -
-
- - -
- - - {% if notifications %} -
- -
- {% endif %} - - -{% if notifications_employe %} -
- -
-{% endif %} - - - - - - - -

La liste des demandes de congés

- -
-
-
-
-
Total Demandes
-

{{ total }}

-
-
-
-
-
-
-
Validés
-

{{ valides }}

-
-
-
-
-
-
-
Refusés
-

{{ refuses }}

-
-
-
-
-
-
-
En attente
-

{{ attentes }}

-
-
-
-
- - - -{% if messages %} - - - - -{% endif %} - - - -
-

Liste

- -
- - - - - - - - - - - - - - - - - - - - - {% for conge in conges %} - - - - - - - - - - - - - - - - - -{% for conge in conges %} - -{% endfor %} - -{% for conge in conges %} - -{% endfor %} - - -{% for conge in conges %} - - -{% endfor %} - - - {% empty %} - - - - {% endfor %} - -
EmployeDate demandeTypeDate débutDate finNombre joursJours restantStatutActions
{{ conge.employe.first_name }} {{ conge.employe.last_name }}{{ conge.date_demande|date:"d/m/Y" }}{{ conge.type }}{{ conge.date_debut|date:"d/m/Y"}}{{ conge.date_fin|date:"d/m/Y" }}{{ conge.nombre_jours }}{{ conge.employe.solde_conge }} - {% if conge.statut == "Refusé" %} - Refusé - {% elif conge.statut == "Validé directeur" %} - Valide - {% elif conge.statut == "Validé chef" %} - Approuvé - {% elif conge.statut == "Refusé par chef" %} - Refusé - {% elif conge.statut == "En attente" %} - En attente - {% endif %} - - -{% if conge.statut == "En attente" and conge.employe == request.user %} - - - - - -{% endif %} - -
Aucune demande trouvée.
- - - - - - - - - - - - - - - -
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/SIRH/static/templates/menu_principale.js b/SIRH/static/templates/menu_principale.js deleted file mode 100644 index 8a835dc..0000000 --- a/SIRH/static/templates/menu_principale.js +++ /dev/null @@ -1,12 +0,0 @@ - - \ No newline at end of file diff --git a/SIRH/templates/SIRH/BASE.html b/SIRH/templates/SIRH/BASE.html deleted file mode 100644 index 5a0f392..0000000 --- a/SIRH/templates/SIRH/BASE.html +++ /dev/null @@ -1,31 +0,0 @@ -{% load static %} -{% load tags_personnaliser %} - - - - - - - - - - {% block 'css' %}{% endblock %} - {% block 'titre_page'%}{% endblock%} - - -
-
- {% include 'parts/menu_principal.html' %} -
- {% block 'contenu' %} {% endblock %} -
-
- {% block 'modal' %} {% endblock %} -
- - - - {% block 'js' %} {% endblock%} - - - diff --git a/SIRH/templates/SIRH/login.html b/SIRH/templates/SIRH/login.html deleted file mode 100644 index 801af39..0000000 --- a/SIRH/templates/SIRH/login.html +++ /dev/null @@ -1,43 +0,0 @@ -{% load static %} - - - - - - - - Login - SIRH - - -
-
-
- -
Bienvenue sur les systèmes de gestion du CERFIG
-
-
-
-

Connexion

- {% if messages %} - {% for message in messages %} -
{{message}}
- {% endfor %} - {% endif %} - {% csrf_token %} -
- - -
-
- - - -
- -
-
-
-
- - \ No newline at end of file diff --git a/SIRH/urls.py b/SIRH/urls.py deleted file mode 100644 index 50b9078..0000000 --- a/SIRH/urls.py +++ /dev/null @@ -1,67 +0,0 @@ -""" -URL configuration for SIRH project. - -The `urlpatterns` list routes URLs to views. For more information please see: - https://docs.djangoproject.com/en/5.2/topics/http/urls/ -Examples: -Function views - 1. Add an import: from my_app import views - 2. Add a URL to urlpatterns: path('', views.home, name='home') -Class-based views - 1. Add an import: from other_app.views import Home - 2. Add a URL to urlpatterns: path('', Home.as_view(), name='home') -Including another URLconf - 1. Import the include() function: from django.urls import include, path - 2. Add a URL to urlpatterns: path('blog/', include('blog.urls')) -""" -from django.contrib import admin -from django.urls import include, path -from django.conf.urls.static import static -from django.conf import settings -# from simple_sso.sso_server.server import Server - -from . import views - -# server_sso = Server() - -urlpatterns = [ - path( - '', - views.login_view, - name='index' - ), - - path('login/', - views.login_view, - name='login' - ), - path( - 'deconnexion/', - views.deconnexion_view, - name='deconnexion' - ), - path( - 'employé/', - include("gestion_employe.urls") - ), - path( - 'gestion-conge/', - include("gestion_conge.urls") - ), - path( - 'gestion-projet/', - include("gestion_projet.urls") - ), - path( - 'gestion-salle/', - include("gestion_salle.urls") - ), - path( - 'admin/', - admin.site.urls - ), - # path( - # 'sso', - # include(server_sso.get_urls()) - # ) -] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) diff --git a/SIRH/views.py b/SIRH/views.py deleted file mode 100644 index 77a057d..0000000 --- a/SIRH/views.py +++ /dev/null @@ -1,37 +0,0 @@ -from django.contrib.auth import authenticate, login, logout -from django.shortcuts import render, redirect -from django.contrib import messages - -def login_view(request): - """ - Gère la connexion des utilisateurs avec redirection selon le rôle et - vérification de l'acceptation de la politique d'utilisation. - """ - if request.method == 'POST': - email = request.POST.get('mail') - password = request.POST.get('mot_de_passe') - - if not (email and password): - messages.error(request, "Veuillez remplir tous les champs.") - return render(request, 'login.html') - - user = authenticate(request, username=email, password=password) - - if user is None: - messages.error(request, "Nom d’utilisateur ou mot de passe incorrect.") - return render(request, 'login.html') - - if not user.is_active: - messages.error(request, "Compte inactif. Contactez l'administrateur.") - return render(request, 'login.html') - - login(request, user) - - return redirect("gestion_conges:conge") - - return render(request, 'login.html') - -def deconnexion_view(request): - """Gère la déconnexion de l'utilisateur.""" - logout(request) - return redirect('login') \ No newline at end of file diff --git a/SIRH/wsgi.py b/SIRH/wsgi.py deleted file mode 100644 index 5f96c06..0000000 --- a/SIRH/wsgi.py +++ /dev/null @@ -1,16 +0,0 @@ -""" -WSGI config for SIRH project. - -It exposes the WSGI callable as a module-level variable named ``application``. - -For more information on this file, see -https://docs.djangoproject.com/en/5.2/howto/deployment/wsgi/ -""" - -import os - -from django.core.wsgi import get_wsgi_application - -os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'SIRH.settings') - -application = get_wsgi_application() diff --git a/gestion_conge/__init__.py b/gestion_conge/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/gestion_conge/admin.py b/gestion_conge/admin.py deleted file mode 100644 index ea5d68b..0000000 --- a/gestion_conge/admin.py +++ /dev/null @@ -1,3 +0,0 @@ -from django.contrib import admin - -# Register your models here. diff --git a/gestion_conge/apps.py b/gestion_conge/apps.py deleted file mode 100644 index c320df3..0000000 --- a/gestion_conge/apps.py +++ /dev/null @@ -1,6 +0,0 @@ -from django.apps import AppConfig - - -class GestionCongeConfig(AppConfig): - default_auto_field = 'django.db.models.BigAutoField' - name = 'gestion_conge' diff --git a/gestion_conge/forms.py b/gestion_conge/forms.py deleted file mode 100644 index 65a7291..0000000 --- a/gestion_conge/forms.py +++ /dev/null @@ -1,17 +0,0 @@ -from django import forms -from .models import Conge - -class CongeForm(forms.ModelForm): - """Formulaire de demande de congé.""" - class Meta: - model = Conge - fields =['type', 'date_debut', 'date_fin'] - widgets = { - 'date_debut': forms.DateInput(attrs={'type': 'date', 'class': 'form-control'}), - 'date_fin': forms.DateInput(attrs={'type': 'date', 'class': 'form-control'}), - 'type': forms.Select(attrs={'class': 'form-select'}), - } - - labels = { - 'nombre_jours':'Nombre de jours', - } \ No newline at end of file diff --git a/gestion_conge/migrations/0001_initial.py b/gestion_conge/migrations/0001_initial.py deleted file mode 100644 index 6a7e09d..0000000 --- a/gestion_conge/migrations/0001_initial.py +++ /dev/null @@ -1,30 +0,0 @@ -# Generated by Django 5.2.13 on 2026-04-17 12:03 - -import django.db.models.deletion -from django.db import migrations, models - - -class Migration(migrations.Migration): - - initial = True - - dependencies = [ - ('gestion_employe', '0001_initial'), - ] - - operations = [ - migrations.CreateModel( - name='Conge', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('date_debut', models.DateField(verbose_name='Date de Début')), - ('date_fin', models.DateField(verbose_name='Date de Fin')), - ('type', models.CharField(choices=[('conge_annuel', 'Conge Annuel')], max_length=100, verbose_name='Type de Congé')), - ('date_demande', models.DateField(auto_now_add=True, verbose_name='Date de Demande')), - ('validation_hierarchique', models.BooleanField(default=None, null=True)), - ('validation_direction', models.BooleanField(default=None, null=True)), - ('motif_refus', models.TextField(blank=True, null=True)), - ('employe', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='employe', to='gestion_employe.employe')), - ], - ), - ] diff --git a/gestion_conge/migrations/__init__.py b/gestion_conge/migrations/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/gestion_conge/models.py b/gestion_conge/models.py deleted file mode 100644 index f72bbe8..0000000 --- a/gestion_conge/models.py +++ /dev/null @@ -1,36 +0,0 @@ -import pandas as pd -from django.db import models -from gestion_employe.models import Employe - -class Conge(models.Model): - """Modèle de création des congés""" - TYPE_CHOICES = [ - # ('maladie', 'Maladie'), - ('conge_annuel', 'Conge Annuel'), - # ('conge_maternite', 'Conge Maternité'), - # ('conge_mariage', 'Conge Mariage'), - # ('conge_naissance', 'Conge de Naissance'), - # ('conge_deces_proche', 'Conge de décès d\'un proche'), - # ('conge_mariage_proche', 'Conge de mariage d\'un proche'), - # ('autre', 'Autre'), - ] - - employe = models.ForeignKey( - Employe, - on_delete=models.CASCADE, - related_name="employe" - ) - date_debut = models.DateField(verbose_name='Date de Début') - date_fin = models.DateField(verbose_name='Date de Fin') - type = models.CharField(max_length=100, choices=TYPE_CHOICES, verbose_name='Type de Congé') - date_demande = models.DateField(auto_now_add=True, verbose_name="Date de Demande") - validation_hierarchique = models.BooleanField(default=None, null=True) - validation_direction = models.BooleanField(default=None, null=True) - - motif_refus = models.TextField(blank=True, null=True) - - @property - def nombre_jours(self): - if self.date_debut and self.date_fin: - jours = pd.bdate_range(start=self.date_debut, end=self.date_fin) - return len(jours) \ No newline at end of file diff --git a/gestion_conge/static/gestion_conge/js/detail_conges.js b/gestion_conge/static/gestion_conge/js/detail_conges.js deleted file mode 100644 index fd39b94..0000000 --- a/gestion_conge/static/gestion_conge/js/detail_conges.js +++ /dev/null @@ -1,75 +0,0 @@ -const bouton_enregistrer_detail = document.getElementById("bouton-enregistrer-detail-conge"); - -if(bouton_enregistrer_detail){ - bouton_enregistrer_detail.addEventListener("click", () => { - const form = document.getElementById("form-detail-conge"); - const csrftoken = new FormData(form).get("csrfmiddlewaretoken"); - const actionUrl = form.action; - const id_conge = document.getElementById("id_conge").value; - const validation_hierarchique_input = document.querySelector('input[name="validation_hierarchique"]:checked'); - const validation_hierarchique = validation_hierarchique_input ? validation_hierarchique_input.value : null; - const validation_direction_input = document.querySelector('input[name="validation_direction"]:checked'); - const validation_direction = validation_direction_input ? validation_direction_input.value : null; - const motif_refus = document.getElementById("motif_refus").value; - - fetch(actionUrl, { - method: "POST", - headers: { - "Content-Type": "application/json", - "X-CSRFToken": csrftoken - }, - body: JSON.stringify({ - id_conge, - validation_hierarchique, - validation_direction, - motif_refus - }) - }) - .then(response => response.json()) - .then(data => { - alert(data.message); - navigation.reload(); - }); - }) -} - -if(document.getElementById("validation_hierarchique_refuse")){ - document.getElementById("validation_hierarchique_refuse").addEventListener('click', function(){ - if(this.checked){ - alert("coucou"); - document.getElementById("motif_refus_container").className="d-block form-group mt-3"; - }else{ - document.getElementById("motif_refus_container").className="d-none"; - } - }) -} - -if(document.getElementById("validation_hierarchique_refuse")){ - document.getElementById("validation_hierarchique_refuse").addEventListener('click', function(){ - if(this.checked){ - document.getElementById("motif_refus_container").className="d-block form-group mt-3"; - }else{ - document.getElementById("motif_refus_container").className="d-none"; - } - }) -} - -if(document.getElementById("validation_hierarchique_valide")){ - document.getElementById("validation_hierarchique_valide").addEventListener('click', function(){ - if(this.checked){ - document.getElementById("motif_refus_container").className="d-none"; - }else{ - document.getElementById("motif_refus_container").className="d-block form-group mt-3"; - } - }) -} - -if(document.getElementById("validation_direction_valide")){ - document.getElementById("validation_direction_valide").addEventListener('click', function(){ - if(this.checked){ - document.getElementById("motif_refus_container").className="d-block form-group mt-3"; - }else{ - document.getElementById("motif_refus_container").className="d-none"; - } - }) -} \ No newline at end of file diff --git a/gestion_conge/static/gestion_conge/js/index.js b/gestion_conge/static/gestion_conge/js/index.js deleted file mode 100644 index 1d156cf..0000000 --- a/gestion_conge/static/gestion_conge/js/index.js +++ /dev/null @@ -1,71 +0,0 @@ -const $ = (element) => document.getElementById(element); - -const url_liste_conge_attente = $("liste-demande-conges").dataset.url - -const tableau_liste_demande_conge = new Tabulator("#liste-demande-conges", { - layout : "fitColumns", - columns: [ - {"title": "Nom et Prénom", "field": "prenom_nom"}, - {"title": "Date de début", "field": "date_debut", formatter:"datetime", formatterParams:{ - inputFormat:"yyyy-MM-dd", - outputFormat:"dd/MM/yy", - }}, - {"title": "Date de fin", "field": "date_fin", formatter:"datetime", formatterParams:{ - inputFormat:"yyyy-MM-dd", - outputFormat:"dd/MM/yy", - }}, - {"title": "Type de congé", "field": "type"}, - {"title": "Date de la demande", "field": "date_demande"}, - {"title": "Validation par supérieur hiérarchique", "field": "validation_hierarchique", formatter:"tickCross", formatterParams :{ - allowEmpty : true , - }}, - {"title": "Validation par supérieur hiérarchique", "field": "validation_direction", formatter:"tickCross", formatterParams :{ - allowEmpty : true , - }}, - ], - pagination: true, - paginationSize: 5 -}) - -const bouton_demande_conges = $("bouton-demande-conge"); - -bouton_demande_conges.addEventListener("click", (e) => { - var modalDemandeConge = new bootstrap.Modal(document.getElementById('modalDemandeConge')); - modalDemandeConge.show(); -}) - -tableau_liste_demande_conge.on("rowClick", function(row, rowData) { - const data = rowData.getData(); - $("id_conge").value = data.id; - $("employe").value = data.prenom_nom; - $("type_conge").value = data.type; - $("date_debut").value = data.date_debut; - $("date_fin").value = data.date_fin; - $("date_demande").value = data.date_demande; - $("nombre_jours").value = data.nombre_jours; - $("solde_restant").value = data.solde_conge; - $("motif_refus").value = data.motif_refus; - - if($("validation_hierarchique_valide") & $("validation_hierarchique_refuse")){ - $("validation_hierarchique_valide").checked = data.validation_hierarchique === true; - $("validation_hierarchique_refuse").checked = data.validation_hierarchique === false; - } - - if($("validation_direction_valide") & $("validation_direction_refuse")){ - $("validation_direction_valide").checked = data.validation_direction === true; - $("validation_direction_refuse").checked = data.validation_direction === false; - } - - const modal = new bootstrap.Modal(document.getElementById('detailsCongeModal')); - modal.show(); -}); - -fetch(url_liste_conge_attente) - .then(response => response.json()) - .then(data => { - if(data.success === true){ - tableau_liste_demande_conge.setData(data.data) - }else{ - alert(data.message) - } - }) diff --git a/gestion_conge/templates/gestion_conge/index.html b/gestion_conge/templates/gestion_conge/index.html deleted file mode 100644 index 17d1ff6..0000000 --- a/gestion_conge/templates/gestion_conge/index.html +++ /dev/null @@ -1,51 +0,0 @@ -{% extends "BASE.html" %} -{% load static %} -{% block 'titre_page' %} Gestion des congés {% endblock %} -{% block 'contenu' %} - {% if messages %} - {% for message in messages %} -
{{message}}
- {% endfor %} - {% endif %} -
-
-
- Congés refusés -
-
-
{{ nombre_conges_refuse }}
-
-
-
-
- Congés en attente -
-
-
{{ nombre_conges_en_attente }}
-
-
-
-
- Congés Validé -
-
-
{{ nombre_conges_valide }}
-
-
-
-

Liste des demandes de congé

- -
-
-
-
-
-{% endblock %} -{% block 'modal' %} - {% include 'gestion_conge/parts/modalDemandeConge.html' %} - {% include 'gestion_conge/parts/modalDetailConge.html' %} -{% endblock %} -{% block 'js' %} - - -{% endblock %} \ No newline at end of file diff --git a/gestion_conge/templates/gestion_conge/parts/modalDemandeConge.html b/gestion_conge/templates/gestion_conge/parts/modalDemandeConge.html deleted file mode 100644 index 511d7dc..0000000 --- a/gestion_conge/templates/gestion_conge/parts/modalDemandeConge.html +++ /dev/null @@ -1,26 +0,0 @@ - \ No newline at end of file diff --git a/gestion_conge/templates/gestion_conge/parts/modalDetailConge.html b/gestion_conge/templates/gestion_conge/parts/modalDetailConge.html deleted file mode 100644 index d3d3051..0000000 --- a/gestion_conge/templates/gestion_conge/parts/modalDetailConge.html +++ /dev/null @@ -1,92 +0,0 @@ - \ No newline at end of file diff --git a/gestion_conge/templates/gestion_conge/parts/modalModificationConge.html b/gestion_conge/templates/gestion_conge/parts/modalModificationConge.html deleted file mode 100644 index 7a920ca..0000000 --- a/gestion_conge/templates/gestion_conge/parts/modalModificationConge.html +++ /dev/null @@ -1,48 +0,0 @@ -{% for conge in conges %} - -{% endfor %} diff --git a/gestion_conge/templates/gestion_conge/parts/modalRefus.html b/gestion_conge/templates/gestion_conge/parts/modalRefus.html deleted file mode 100644 index ab358f2..0000000 --- a/gestion_conge/templates/gestion_conge/parts/modalRefus.html +++ /dev/null @@ -1,24 +0,0 @@ - \ No newline at end of file diff --git a/gestion_conge/tests.py b/gestion_conge/tests.py deleted file mode 100644 index de8bdc0..0000000 --- a/gestion_conge/tests.py +++ /dev/null @@ -1,3 +0,0 @@ -from django.test import TestCase - -# Create your tests here. diff --git a/gestion_conge/urls.py b/gestion_conge/urls.py deleted file mode 100644 index c8b0511..0000000 --- a/gestion_conge/urls.py +++ /dev/null @@ -1,27 +0,0 @@ -from django.urls import path -from . import views - -app_name = "gestion_conges" - -urlpatterns = [ - path( - '', - views.index, - name='conge' - ), - path( - 'demande_conge/', - views.demander_conge, - name='demande-conge' - ), - path( - 'liste-des-conges/', - views.liste_demande_conges, - name='liste-des-conges' - ), - path( - 'validation-des-conges/', - views.validation_de_conge, - name='validation-des-conges' - ), -] \ No newline at end of file diff --git a/gestion_employe/__init__.py b/gestion_employe/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/gestion_employe/admin.py b/gestion_employe/admin.py deleted file mode 100644 index 03e7ed2..0000000 --- a/gestion_employe/admin.py +++ /dev/null @@ -1,14 +0,0 @@ -from django.contrib import admin -from .models import Departement, Employe - -@admin.register(Departement) -class DepartementAdmin(admin.ModelAdmin): - list_display = ("nom", ) - -@admin.register(Employe) -class EmployeAdmin(admin.ModelAdmin): - list_display = ( - "user", - "matricule", - "fonction", - ) \ No newline at end of file diff --git a/gestion_employe/forms.py b/gestion_employe/forms.py deleted file mode 100644 index 55fab64..0000000 --- a/gestion_employe/forms.py +++ /dev/null @@ -1,84 +0,0 @@ -from django import forms -from .models import Contrat, Departement, Employe,Affectation,Formation - -class EmployeForm(forms.ModelForm): - """Formulaire pour modifier les informations de profil d'un employé""" - class Meta: - model = Employe - fields = ( - 'adresse', - 'telephone', - 'CV', - 'diplome', - 'rib', - 'photo', - 'casier_judiciaire' - ) - -class AffectationForm(forms.ModelForm): - class Meta: - model = Affectation - fields = ( - 'projet', - 'date_affectation', - 'date_fin_daffectation', - 'role', - 'pourcentage_temps_affectation' - ) - - widgets = { - 'projet': forms.Select(attrs={'class': 'form-select'}), - 'date_affectation': forms.DateInput(attrs={'class': 'form-control', 'type': 'date'}), - 'date_fin_daffectation': forms.DateInput(attrs={'class': 'form-control', 'type': 'date'}), - 'role': forms.Select(attrs={'class': 'form-select'}), - 'pourcentage_temps_affectation': forms.NumberInput(attrs={'class': 'form-control'}), - } - -class ContratForm(forms.ModelForm): - class Meta: - model = Contrat - fields = [ - "numero_contrat", - "type_contrat", - "date_debut", - "date_fin", - "salaire_mensuel", - "statut", - "fichier_contrat" - ] - - widgets = { - 'numero_contrat': forms.TextInput(attrs={'class': 'form-control'}), - 'type_contrat': forms.Select(attrs={'class': 'form-select'}), - 'date_debut': forms.DateInput(attrs={'class': 'form-control', 'type': 'date'}), - 'date_fin': forms.DateInput(attrs={'class': 'form-control', 'type': 'date'}), - 'salaire_mensuel': forms.TextInput(attrs={'class': 'form-control'}), - 'statut': forms.Select(attrs={'class': 'form-select'}), - 'fichier_contrat': forms.FileInput(attrs={'class': 'form-control'}), - } - -class DepartementForm(forms.ModelForm): - class Meta: - model = Departement - fields = ['nom'] - -class FormationForm(forms.ModelForm): - class Meta: - model = Formation - fields = [ - 'titre', - 'organisme', - 'date_obtention', - 'date_fin', - 'description', - 'certificat' - ] - - widgets = { - 'titre': forms.TextInput(attrs={"class": "form-control"}), - 'organisme': forms.TextInput(attrs={"class": "form-control"}), - 'date_obtention': forms.DateInput(attrs={"class": "form-control", "type": "date"}), - 'date_fin': forms.DateInput(attrs={"class": "form-control", "type": "date"}), - 'description': forms.Textarea(attrs={"class": "form-control"}), - 'certificat': forms.FileInput(attrs={"class": "form-control"}), - } \ No newline at end of file diff --git a/gestion_employe/migrations/0001_initial.py b/gestion_employe/migrations/0001_initial.py deleted file mode 100644 index 26edccb..0000000 --- a/gestion_employe/migrations/0001_initial.py +++ /dev/null @@ -1,88 +0,0 @@ -# Generated by Django 5.2.13 on 2026-04-17 12:03 - -import django.db.models.deletion -from django.conf import settings -from django.db import migrations, models - - -class Migration(migrations.Migration): - - initial = True - - dependencies = [ - ('gestion_projet', '0001_initial'), - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ] - - operations = [ - migrations.CreateModel( - name='Departement', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('nom', models.CharField(max_length=100)), - ], - ), - migrations.CreateModel( - name='Employe', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('matricule', models.CharField(blank=True, max_length=10, null=True, unique=True)), - ('fonction', models.CharField(blank=True, choices=[('directeur', 'Directeur'), ('assistant_direction', 'Assistante de direction'), ('comptable', 'Comptable'), ('raf', 'RAF'), ('data_manager', 'Data Manager'), ('logisticien', 'Logisticien'), ('post_doctorant', 'Post-Doctorant'), ('qualiticien', 'Qualiticien'), ('technicien_surface', 'Technicien de surface'), ('chauffeur', 'Chauffeur')], max_length=50, null=True)), - ('date_embauche', models.DateField(blank=True, null=True)), - ('adresse', models.CharField(blank=True, max_length=100, null=True)), - ('telephone', models.CharField(blank=True, max_length=15, null=True)), - ('sexe', models.CharField(blank=True, choices=[('m', 'Masculin'), ('f', 'Féminin')], max_length=1, null=True)), - ('date_naissance', models.DateField(blank=True, null=True)), - ('CV', models.FileField(blank=True, null=True, upload_to='cv/')), - ('diplome', models.FileField(blank=True, null=True, upload_to='diplomes/')), - ('rib', models.FileField(blank=True, null=True, upload_to='rib/')), - ('photo', models.ImageField(blank=True, null=True, upload_to='photos/')), - ('casier_judiciaire', models.FileField(blank=True, null=True, upload_to='casier/')), - ('chef', models.BooleanField(default=False, verbose_name='Cet utilisateur est-il chef de ce département ?')), - ('departement', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='gestion_employe.departement')), - ('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), - ], - ), - migrations.CreateModel( - name='Contrat', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('numero_contrat', models.CharField(max_length=100, unique=True)), - ('type_contrat', models.CharField(choices=[('contrat_duree_determinee', 'Contrat à Durée Déterminée'), ('contrat_duree_indeterminee', 'Contrat à Durée Indéterminée'), ('contrat_prestation', 'Contrat de Prestation de Service'), ('contrat_stage', 'Contrat de Stage')], max_length=50)), - ('date_debut', models.DateField()), - ('date_fin', models.DateField(blank=True, null=True)), - ('salaire_mensuel', models.DecimalField(blank=True, decimal_places=2, max_digits=10, null=True)), - ('statut', models.CharField(choices=[('actif', 'Actif'), ('termine', 'Terminé'), ('suspendu', 'Suspendu'), ('rupture_contrat', 'Rupture de Contrat')], max_length=50)), - ('fichier_contrat', models.FileField(blank=True, null=True, upload_to='contrats/')), - ('employe', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='gestion_employe.employe')), - ], - ), - migrations.CreateModel( - name='Formation', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('titre', models.CharField(max_length=255, verbose_name='Nom du certificat')), - ('organisme', models.CharField(max_length=255, verbose_name="Nom de l'organisme")), - ('description', models.TextField(blank=True, null=True, verbose_name='Description de la formation')), - ('date_obtention', models.DateField(blank=True, null=True, verbose_name="Date d'obtention")), - ('date_fin', models.DateField(blank=True, null=True, verbose_name='Date de fin de validité')), - ('certificat', models.FileField(blank=True, null=True, upload_to='documents/formations/', verbose_name='Certificat (PDF/Image)')), - ('employe', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='employe_formation', to='gestion_employe.employe')), - ], - ), - migrations.CreateModel( - name='Affectation', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('date_affectation', models.DateField()), - ('date_fin_daffectation', models.DateField(blank=True, null=True)), - ('role', models.CharField(choices=[('chef_projet', 'Chef de projet'), ('doctorant', 'Doctorant'), ('mastorant', 'Mastorant'), ('consultant', 'Consultant'), ('stagiaire', 'Stagiaire'), ('laborantin', 'Laborantin'), ('medecin', 'Médecin'), ('autre', 'Autre')], default='Membre', max_length=20)), - ('pourcentage_temps_affectation', models.DecimalField(decimal_places=2, max_digits=5)), - ('projet', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='gestion_projet.projet')), - ('employe', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='gestion_employe.employe')), - ], - options={ - 'unique_together': {('projet', 'employe')}, - }, - ), - ] diff --git a/gestion_employe/migrations/0002_alter_contrat_type_contrat.py b/gestion_employe/migrations/0002_alter_contrat_type_contrat.py deleted file mode 100644 index 4fd9717..0000000 --- a/gestion_employe/migrations/0002_alter_contrat_type_contrat.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 6.0.4 on 2026-04-29 10:42 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('gestion_employe', '0001_initial'), - ] - - operations = [ - migrations.AlterField( - model_name='contrat', - name='type_contrat', - field=models.CharField(choices=[('contrat_duree_determinee', 'Contrat à Durée Déterminée'), ('contrat_duree_indeterminee', 'Contrat à Durée Indéterminée'), ('contrat_prestation', 'Contrat de Prestation de Service'), ('contrat_stage', 'Contrat de Stage'), ('convention_bourse_entretien', "Convention de bourse d'entretien")], max_length=50), - ), - ] diff --git a/gestion_employe/migrations/__init__.py b/gestion_employe/migrations/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/gestion_employe/static/gestion_employe/js/index.js b/gestion_employe/static/gestion_employe/js/index.js deleted file mode 100644 index 95eb1d8..0000000 --- a/gestion_employe/static/gestion_employe/js/index.js +++ /dev/null @@ -1,263 +0,0 @@ -const $ = (element) => document.getElementById(element); - -const url_liste_employe = $("tableau_liste_employe").dataset.url; -const tableau_liste_employe = new Tabulator("#tableau_liste_employe", { - columns: [ - {"title": "Matricule", "field": "matricule"}, - {"title": "Nom & Prénom", "field": "employe"}, - {"title": "Fonction", "field": "fonction"}, - {"title": "Projet", "field": "projet"}, - {"title": "Téléphone", "field": "telephone"}, - ], - // ajaxURL: url_liste_employe, - pagination: true, - paginationSize: 10, -}) - -fetch(url_liste_employe) - .then(response => response.json()) - .then(data => { - if (data.success){ - console.log(data.data) - tableau_liste_employe.setData(data.data); - }else{ - alert(data.message); - } - } - ) - -tableau_liste_employe.on("rowClick", function (row, rowData) { - const data = rowData.getData(); - document.getElementById('detail-id').value = data.id; - document.getElementById('detail-matricule').value = data.matricule; - document.getElementById('detail-employe').value = data.employe; - document.getElementById('detail-fonction').value = data.fonction; - document.getElementById('detail-departement').value = data.departement; - document.getElementById('detail-sexe').value = ""; - document.getElementById('detail-dateNaissance').value = ""; - document.getElementById('detail-email').value = data.email; - document.getElementById('detail-telephone').value = data.telephone; - document.getElementById('detail-adresse').value = data.adresse; - document.getElementById('detail-dateEmbauche').value = data.date_embauche; - document.getElementById('detail-dateNaissance').value = data.date_naissance; - document.getElementById('detail-sexe').value = data.sexe; - - document.getElementById('document-diplome').href = data.diplome; - document.getElementById('document-diplome').textContent = data.diplome || "Aucun diplôme"; - document.getElementById('document-cv').href = data.CV; - document.getElementById('document-cv').textContent = data.CV || "Aucun CV"; - document.getElementById('document-rib').href = data.rib; - document.getElementById('document-rib').textContent = data.rib || "Aucun RIB"; - document.getElementById('document-casier-judiciaire').href = data.casier_judiciaire; - document.getElementById('document-casier-judiciaire').textContent = data.casier_judiciaire || "Aucun casier judiciaire"; - - document.getElementById("document-employe").innerHTML = data.employe || "Employé inconnu"; - - document.getElementById("formations-list").innerHTML = ""; - for (const formation of data.formations) { - document.getElementById("formations-list").innerHTML += ` -
-
- - -
-
- - -
-
- - -
-
- - -
-
- ` - } - document.getElementById("contrat-employe").innerHTML = data.employe || "Employé inconnu"; - document.getElementById("employeIdInput").value = data.id; - - document.getElementById("contrats-list").innerHTML = ""; - for (const contrat of data.contrats) { - document.getElementById("contrats-list").innerHTML += ` -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - Voir le document -
- -
- ` - }; - - const supprimerButtons = document.getElementsByClassName("btn-supprimer-contrat"); - Array.from(supprimerButtons).forEach(button => { - button.addEventListener("click", function() { - const contratId = this.dataset.contratid; - fetch(`contrat/supprimer/`, { - method: "POST", - headers: { - "Content-Type": "application/json", - "X-CSRFToken": document.querySelector('[name=csrfmiddlewaretoken]').value - }, - body: JSON.stringify({ - "id": contratId - }) - }) - .then(response => response.json()) - .then(data => { - alert(data.message); - location.reload(); - }) - }); - }) - - document.getElementById("affectation-nom-employe").textContent = data.employe || "Employé inconnu"; - document.getElementById("affecter_employe_id").value = data.id; - - document.getElementById("affectations-list").innerHTML = ""; - for (const affectation of data.affectations) { - document.getElementById("affectations-list").innerHTML += ` -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
- -
- ` - } - - Array.from(document.getElementsByClassName("btn-supprimer-affectation")).forEach(button => { - button.addEventListener("click", function() { - const affectationId = this.dataset.contratid; - fetch(`affectation/supprimer/`, { - method: "POST", - headers: { - "Content-Type": "application/json", - "X-CSRFToken": document.querySelector('[name=csrfmiddlewaretoken]').value - }, - body: JSON.stringify({ - "id": affectationId - }) - }) - .then(response => response.json()) - .then(data => { - alert(data.message); - location.reload(); - }) - }); - }) - - const modal = new bootstrap.Modal($("modalDetailEmploye")); - modal.show(); -}) - -$("enregistrerDetail").addEventListener("click", function() { - const id_ = document.getElementById('detail-id').value; - const fonction = document.getElementById('detail-fonction').value; - const dateEmbauche = document.getElementById('detail-dateEmbauche').value; - const matricule = document.getElementById('detail-matricule').value; - - const url_enregistrer_detail = $("modalDetailEmployeBody").dataset.url; - fetch(url_enregistrer_detail, { - method: "POST", - headers: { - "Content-Type": "application/json", - "X-CSRFToken": document.querySelector('[name=csrfmiddlewaretoken]').value - }, - body: JSON.stringify({ - "id": id_, - "fonction": fonction, - "date_embauche": dateEmbauche, - "matricule": matricule - }) - }) - .then(response => response.json()) - .then(data => { - alert(data.message); - location.reload(); - }) -}); - -$("input-recherche").addEventListener("input", function() { - const recherche = this.value; - if (recherche){ - tableau_liste_employe.setFilter("employe", "like", recherche); - }else{ - tableau_liste_employe.clearFilter(); - } -}) - -const listeContratExpirant = new Tabulator("#listeContratExpirant", { - columns: [ - {"title": "Employé", "field": "employe"}, - {"title": "Type de contrat", "field": "type_contrat"}, - {"title": "Date de début", "field": "date_debut", formatter: 'datetime', formatterParams:{ - inputFormat:"yyyy-MM-dd", - outputFormat:"dd/MM/yy", - }}, - {"title": "Date de fin", "field": "date_fin", formatter: 'datetime', formatterParams:{ - inputFormat:"yyyy-MM-dd", - outputFormat:"dd/MM/yy", - }}, - {"title": "Statut", "field": "statut"}, - {"title": "Lien du fichier", "field": "fichier_contrat", formatter:"link", formatterParams:{ - target:"_blank", - } - }, - ], - ajaxURL: $("boutonContratExpirants").dataset.urlexpirants, -}) \ No newline at end of file diff --git a/gestion_employe/static/gestion_employe/js/mon_profil.js b/gestion_employe/static/gestion_employe/js/mon_profil.js deleted file mode 100644 index 77178b4..0000000 --- a/gestion_employe/static/gestion_employe/js/mon_profil.js +++ /dev/null @@ -1,46 +0,0 @@ -const $ = (element) => document.getElementById(element); - -url_certificat = $("tableau-certificat").dataset.url; -const tableau_certificat = new Tabulator("#tableau-certificat", { - columns: [ - {"title": "Nom du certificat", "field": "titre"}, - {"title": "Nom de l'organisme", "field": "organisme"}, - {"title": "Date d'obtention", "field": "date_obtention", formatter:"datetime", formatterParams:{ - inputFormat:"yyyy-MM-dd", - outputFormat:"dd/MM/yy", - }}, - {"title": "Date de fin de validité", "field": "date_fin", formatter:"datetime", formatterParams:{ - inputFormat:"yyyy-MM-dd", - outputFormat:"dd/MM/yy", - }}, - ], - ajaxURL: url_certificat, -}) -const enregistrerProfil = $("enregistrerProfil"); - -enregistrerProfil.addEventListener("click", (e) => { - - const url = $("information-personnelles").dataset.url; - const csrftoken = document.querySelector("[name='csrfmiddlewaretoken']").value; - - const formData = new FormData(); - - formData.append("nom", $("nom").value); - formData.append("prenom", $("prenom").value); - formData.append("email", $("email").value); - formData.append("telephone", $("telephone").value); - formData.append("adresse", $("adresse").value); - formData.append("sexe", $("sexe").value); - formData.append("date_naissance", $("date_naissance").value); - - fetch(url, { - method: "POST", - headers: { - "X-CSRFToken": csrftoken - }, - body: formData - }) - .then(response => response.json()) - .then(data => alert(data.message)) - .catch(error => console.error("Erreur:", error)); -}); \ No newline at end of file diff --git a/gestion_employe/templates/gestion_employe/index.html b/gestion_employe/templates/gestion_employe/index.html deleted file mode 100644 index 825dec9..0000000 --- a/gestion_employe/templates/gestion_employe/index.html +++ /dev/null @@ -1,67 +0,0 @@ -{% extends "BASE.html" %} -{% load static %} -{% block 'titre_page' %} Gestion des projets {% endblock %} -{% block 'css' %} -{% endblock %} -{% block 'contenu' %} -
-

Gestion des employés

- {% if messages %} - {% for message in messages %} - - {% endfor %} - {% endif %} - -
-
- Nombre d'employés -

{{ nombre_employes }}

-
-
- Nombre de prestataires -

{{ nombre_cps }}

-
-
- Nombre de stagiaires -

{{ nombre_stage }}

-
-
-
-
-

- - La liste des employés -

- -
-
-
-
-
- -
-
-
-
-
-
-
-
-
- -{% endblock %} -{% block 'modal' %} - {% include "gestion_employe/parts/modalDetailEmploye.html" %} - {% include "gestion_employe/parts/modalCreationContrat.html" %} - {% include "gestion_employe/parts/modalAffectationProjet.html" %} - {% include "gestion_employe/parts/modalDocument.html" %} - {% include "gestion_employe/parts/modalListeContratExpirants.html" %} -{% endblock %} -{% block 'js' %} - -{% endblock %} \ No newline at end of file diff --git a/gestion_employe/templates/gestion_employe/modifier-profil.html b/gestion_employe/templates/gestion_employe/modifier-profil.html deleted file mode 100644 index c73010e..0000000 --- a/gestion_employe/templates/gestion_employe/modifier-profil.html +++ /dev/null @@ -1,105 +0,0 @@ -{% extends "BASE.html" %} -{% load static %} -{% block 'titre_page' %} Gestion des employés - Mon profil {% endblock %} -{% block 'contenu' %} -
-
-
- Modifier mon profil -
-
-
-
- {% csrf_token %} -
-
-

- -

-
-
-
-
-
- - -
-
- - -
-
- - -
-
-
-
- - -
-
- - -
-
- - -
-
-
-
-
-
-
-

- -

-
-
-
-
-
- - -
-
- - -
-
-
-
- - -
-
- - -
-
-
-
-
-
-
-
- - Annuler - - -
-
-
-
-{% endblock %} -{% block 'modal' %} -{% endblock %} -{% block 'js' %} -{% endblock %} \ No newline at end of file diff --git a/gestion_employe/templates/gestion_employe/parts/modalAffectationProjet.html b/gestion_employe/templates/gestion_employe/parts/modalAffectationProjet.html deleted file mode 100644 index 2abcf46..0000000 --- a/gestion_employe/templates/gestion_employe/parts/modalAffectationProjet.html +++ /dev/null @@ -1,28 +0,0 @@ - \ No newline at end of file diff --git a/gestion_employe/templates/gestion_employe/parts/modalAjoutFormation.html b/gestion_employe/templates/gestion_employe/parts/modalAjoutFormation.html deleted file mode 100644 index 104b791..0000000 --- a/gestion_employe/templates/gestion_employe/parts/modalAjoutFormation.html +++ /dev/null @@ -1,21 +0,0 @@ - - \ No newline at end of file diff --git a/gestion_employe/templates/gestion_employe/parts/modalCreationContrat.html b/gestion_employe/templates/gestion_employe/parts/modalCreationContrat.html deleted file mode 100644 index fa0bb2b..0000000 --- a/gestion_employe/templates/gestion_employe/parts/modalCreationContrat.html +++ /dev/null @@ -1,57 +0,0 @@ - - \ No newline at end of file diff --git a/gestion_employe/templates/gestion_employe/parts/modalDetailEmploye.html b/gestion_employe/templates/gestion_employe/parts/modalDetailEmploye.html deleted file mode 100644 index 187ef49..0000000 --- a/gestion_employe/templates/gestion_employe/parts/modalDetailEmploye.html +++ /dev/null @@ -1,136 +0,0 @@ -{% load tags_personnaliser %} - \ No newline at end of file diff --git a/gestion_employe/templates/gestion_employe/parts/modalDocument.html b/gestion_employe/templates/gestion_employe/parts/modalDocument.html deleted file mode 100644 index 4eeb124..0000000 --- a/gestion_employe/templates/gestion_employe/parts/modalDocument.html +++ /dev/null @@ -1,41 +0,0 @@ - diff --git a/gestion_employe/templates/gestion_employe/parts/modalListeContratExpirants.html b/gestion_employe/templates/gestion_employe/parts/modalListeContratExpirants.html deleted file mode 100644 index 9051355..0000000 --- a/gestion_employe/templates/gestion_employe/parts/modalListeContratExpirants.html +++ /dev/null @@ -1,17 +0,0 @@ - - \ No newline at end of file diff --git a/gestion_employe/templates/gestion_employe/parts/modificationMotPasse.html b/gestion_employe/templates/gestion_employe/parts/modificationMotPasse.html deleted file mode 100644 index 79366ba..0000000 --- a/gestion_employe/templates/gestion_employe/parts/modificationMotPasse.html +++ /dev/null @@ -1,36 +0,0 @@ - - diff --git a/gestion_employe/templatetags/tags_personnaliser.py b/gestion_employe/templatetags/tags_personnaliser.py deleted file mode 100644 index c1859f7..0000000 --- a/gestion_employe/templatetags/tags_personnaliser.py +++ /dev/null @@ -1,24 +0,0 @@ -"""Tags personnalisés pour les templates d'authentification. - -Ce fichier contient des tags personnalisés pour les templates du projet lié à -la gestion de l'accès des utilisateurs aux différentes pages. -""" - -from django import template -from django.utils import timezone -from gestion_employe.models import Affectation - -register = template.Library() - -@register.filter -def has_group(user, group_name): - """Vérifiez si un utilisateur appartient à un groupe spécifique.""" - return user.groups.filter(name=group_name).exists() - -@register.filter -def is_chef_projet(user): - try: - affectation = Affectation.objects.get(employe__user__username = user, date_fin_daffectation__gte = timezone.now().date()) - except Affectation.DoesNotExist: - return False - return affectation.role == "chef_projet" \ No newline at end of file diff --git a/gestion_employe/tests.py b/gestion_employe/tests.py deleted file mode 100644 index de8bdc0..0000000 --- a/gestion_employe/tests.py +++ /dev/null @@ -1,3 +0,0 @@ -from django.test import TestCase - -# Create your tests here. diff --git a/gestion_projet/__init__.py b/gestion_projet/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/gestion_projet/admin.py b/gestion_projet/admin.py deleted file mode 100644 index d0ae965..0000000 --- a/gestion_projet/admin.py +++ /dev/null @@ -1,6 +0,0 @@ -from django.contrib import admin -from .models import DomaineDeRecherche - -@admin.register(DomaineDeRecherche) -class DomaineDeRecherche(admin.ModelAdmin): - list_display = ('nom',) diff --git a/gestion_projet/forms.py b/gestion_projet/forms.py deleted file mode 100644 index 8874d67..0000000 --- a/gestion_projet/forms.py +++ /dev/null @@ -1,176 +0,0 @@ -from django import forms -from gestion_projet.models import Projet -from .models import ( - ActiviteProjet, - Bailleur, - DocumentProjet, - FinancementProjet, - LivrablesLivres, - DomaineDeRecherche -) - -class ProjetForm(forms.ModelForm): - """Formulaire de création et de modification d'un projet, avec validation des dates et personnalisation des champs.""" - class Meta: - model = Projet - fields = ( - 'id_projet', - 'nom_projet', - 'date_debut', - 'date_fin', - 'numero_convention', - 'domaine_recherche', - 'type_projet', - 'budget', - 'budget_RH', - 'description' - ) - # domaine_recherche = forms.ModelMultipleChoiceField( - # queryset=DomaineDeRecherche.objects.all(), - # to_field_name="nom", - # required=False - # ) - widgets = { - 'id_projet': forms.TextInput(attrs={'class': "form-control"}), - 'nom_projet': forms.TextInput(attrs={'class': "form-control"}), - 'numero_convention': forms.TextInput(attrs={'class': "form-control"}), - 'domaine_recherche': forms.SelectMultiple(attrs={'class': "form-control"}), - 'type_projet': forms.Select(attrs={'class': "form-select"}), - 'budget': forms.NumberInput(attrs={'class': "form-control"}), - 'budget_RH': forms.NumberInput(attrs={'class': "form-control"}), - 'description': forms.Textarea(attrs={'class': "form-control"}), - 'date_debut': forms.DateInput(attrs={'type': 'date', 'class': "form-control"}), - 'date_fin': forms.DateInput(attrs={'type': 'date', 'class': "form-control"}), - } - -class BailleurForm(forms.ModelForm): - """ - Formulaire de création et de modification d'un bailleur, - avec validation des champs et personnalisation des labels. - """ - class Meta: - model = Bailleur - fields = ('nom_organisme', 'contact', 'email', 'pays') - widgets = { - 'nom_organisme':forms.TextInput(attrs={ - 'class':'form-control', - }), - 'contact':forms.TextInput(attrs={ - 'class':'form-control', - }), - 'email':forms.TextInput(attrs={ - 'class':'form-control', - }), - 'pays':forms.TextInput(attrs={ - 'class':'form-control', - }), - } - -class DocumentProjetForm(forms.ModelForm): - """ - Formulaire pour ajouter ou modifier un document associé à un projet, - avec validation des champs et personnalisation des labels. - """ - class Meta: - model = DocumentProjet - fields = [ - 'nom_document', - 'numero', - 'date_validite', - 'fichier', - 'description' - ] - widgets = { - 'nom_document': forms.Select(attrs={'class': 'form-select'}), - 'description': forms.Textarea(attrs={'class': 'form-control', 'rows': 3}), - 'numero': forms.TextInput(attrs={'class': 'form-control'}), - 'date_validite': forms.DateInput(attrs={'class': 'form-control', 'type': 'date'}), - 'fichier': forms.ClearableFileInput(attrs={'class': 'form-control'}), - } - -class ActiviteProjetForm(forms.ModelForm): - """Formulaire pour créer ou modifier une activité de projet, avec validation des champs et personnalisation des widgets.""" - class Meta: - model = ActiviteProjet - fields = ( - 'titre', - 'date_debut', - 'date_fin', - 'besoin_ressource_materielle', - 'budget_prevu', - 'description', - ) - - widgets = { - 'titre':forms.TextInput(attrs={ - 'class':'form-control', - 'placeholder':'Titre de l’activité' - }), - 'description':forms.Textarea(attrs={ - 'class':'form-control', - 'rows':3, - 'placeholder':'Description de l’activité' - }), - 'date_debut':forms.DateInput(attrs={ - 'class':'form-control', - 'type':'date' - }), - 'date_fin':forms.DateInput(attrs={ - 'class':'form-control', - 'type':'date' - }), - 'besoin_ressource_materielle': forms.Textarea(attrs={ - 'class':'form-control', - 'rows':3, - 'placeholder':'Besoin de ressources matérielles' - }), - 'budget_prevu': forms.NumberInput(attrs={ - 'class':'form-control', - 'placeholder':'Budget prévu' - }), - } - -class FinancementProjetFrom(forms.ModelForm): - """Formulaire pour créer ou modifier le financement relatif à un projet.""" - class Meta: - model = FinancementProjet - fields = ( - 'projet', - 'bailleur', - 'pourcentage', - ) - - widgets = { - 'projet':forms.Select(attrs={ - 'class':'form-select', - }), - 'bailleur':forms.Select(attrs={ - 'class':'form-select', - }), - 'pourcentage':forms.NumberInput(attrs={ - 'class':'form-control', - }), - } - -class LivrablesLivresForm(forms.ModelForm): - """Formulaire pour créer ou modifier un livrable livré dans le cadre d'une activité de projet.""" - class Meta: - model = LivrablesLivres - fields = ( - 'activite', - 'nom', - 'fichier', - ) - - widgets = { - 'activite': forms.Select(attrs={ - 'class':'form-select', - }), - 'nom': forms.TextInput(attrs={ - 'class':'form-control', - 'placeholder':'Nom du livrable' - }), - 'fichier': forms.ClearableFileInput(attrs={ - 'class':'form-control', - }), - } \ No newline at end of file diff --git a/gestion_projet/migrations/0001_initial.py b/gestion_projet/migrations/0001_initial.py deleted file mode 100644 index c85eb6d..0000000 --- a/gestion_projet/migrations/0001_initial.py +++ /dev/null @@ -1,107 +0,0 @@ -# Generated by Django 5.2.13 on 2026-04-17 12:03 - -import django.db.models.deletion -from django.db import migrations, models - - -class Migration(migrations.Migration): - - initial = True - - dependencies = [ - ] - - operations = [ - migrations.CreateModel( - name='ActiviteProjet', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('titre', models.CharField(max_length=200, verbose_name="Titre de l'activité")), - ('description', models.TextField(blank=True, null=True, verbose_name="Description de l'activité")), - ('date_debut', models.DateField(verbose_name='Date de début')), - ('date_fin', models.DateField(verbose_name='Date de fin')), - ('annuler', models.BooleanField(default=False, verbose_name="Annuler l'activité")), - ('motif_annulation', models.TextField(blank=True, null=True, verbose_name="Motif d'annulation")), - ('motif_changement_budget', models.TextField(blank=True, null=True, verbose_name='Motif de changement de budget')), - ('budget_prevu', models.DecimalField(decimal_places=2, default=0, max_digits=15, verbose_name='Budget prévu')), - ('budget_depense', models.DecimalField(decimal_places=2, default=0, max_digits=15, verbose_name='Budget dépensé')), - ('besoin_ressource_materielle', models.TextField(verbose_name='Besoin de ressources matérielles')), - ], - ), - migrations.CreateModel( - name='Bailleur', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('nom_organisme', models.CharField(max_length=200, unique=True)), - ('contact', models.CharField(blank=True, max_length=100, null=True)), - ('email', models.EmailField(blank=True, max_length=254, null=True)), - ('pays', models.CharField(blank=True, max_length=100, null=True)), - ], - ), - migrations.CreateModel( - name='DomaineDeRecherche', - fields=[ - ('nom', models.CharField(choices=[('sciences_sociales', 'Sciences sociales'), ('naturelles', 'Naturelles'), ('humaines', 'Humaines'), ('veterinaires', 'Vétérinaires')], max_length=100, primary_key=True, serialize=False, verbose_name='Domaine de recherche')), - ], - options={ - 'verbose_name': 'Domaine de recherche', - 'verbose_name_plural': 'Domaines de recherche', - }, - ), - migrations.CreateModel( - name='LivrablesLivres', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('nom', models.CharField(max_length=255, verbose_name='Nom du livrable')), - ('fichier', models.FileField(blank=True, null=True, upload_to='fichier_livrables/')), - ('activite', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='gestion_projet.activiteprojet')), - ], - ), - migrations.CreateModel( - name='Projet', - fields=[ - ('id_projet', models.CharField(blank=True, max_length=100, primary_key=True, serialize=False, unique=True, verbose_name='ID du projet')), - ('nom_projet', models.CharField(max_length=200, verbose_name='Nom du projet')), - ('date_debut', models.DateField(verbose_name='Date de début')), - ('date_fin', models.DateField(verbose_name='Date de fin')), - ('numero_convention', models.CharField(max_length=100, verbose_name='Numéro de convention')), - ('description', models.TextField(verbose_name='Description')), - ('type_projet', models.CharField(choices=[('laboratoire', 'Laboratoire'), ('épidémiologie', 'Épidémiologie'), ('sciences sociales', 'Sciences sociales'), ('cliniques', 'Cliniques'), ('autre', 'Autre')], default='épidémiologie', max_length=100, verbose_name='Type de projet')), - ('budget', models.DecimalField(decimal_places=2, max_digits=12, verbose_name='Budget')), - ('budget_RH', models.DecimalField(decimal_places=2, max_digits=12, verbose_name='Budget RH')), - ('created_at', models.DateTimeField(auto_now_add=True)), - ('bailleur', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='gestion_projet.bailleur', verbose_name='Bailleur de fonds')), - ('domaine_recherche', models.ManyToManyField(to='gestion_projet.domainederecherche')), - ], - ), - migrations.CreateModel( - name='DocumentProjet', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('date_ajout', models.DateTimeField(auto_now_add=True, verbose_name="Date d'ajout")), - ('nom_document', models.CharField(choices=[('protocole', 'Protocole d’étude'), ('ethique', "Approbation du comité d'éthique"), ('autorisation', 'Autorisation (DNLP)'), ('rapport_technique', 'Rapport technique'), ('rapport_financier', 'Rapport financier'), ('rapport_avancement', "Rapport d'avancement"), ('convention', 'Convention'), ('rapport_final', 'Rapport final'), ('autre', 'Autre')], max_length=100, verbose_name='Type de document')), - ('description', models.TextField(blank=True, verbose_name='Description')), - ('numero', models.CharField(blank=True, max_length=100, null=True, verbose_name='Numéro du document')), - ('date_validite', models.DateField(blank=True, null=True, verbose_name='Date de validité')), - ('fichier', models.FileField(upload_to='documents_projets/', verbose_name='Fichier à télécharger')), - ('projet', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='documents', to='gestion_projet.projet', verbose_name='Projet')), - ], - ), - migrations.AddField( - model_name='activiteprojet', - name='projet', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='gestion_projet.projet', verbose_name='Projet'), - ), - migrations.CreateModel( - name='FinancementProjet', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('pourcentage', models.DecimalField(decimal_places=2, max_digits=5)), - ('bailleur', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='gestion_projet.bailleur')), - ('projet', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='gestion_projet.projet')), - ], - options={ - 'unique_together': {('projet', 'bailleur')}, - }, - ), - ] diff --git a/gestion_projet/migrations/__init__.py b/gestion_projet/migrations/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/gestion_projet/models.py b/gestion_projet/models.py deleted file mode 100644 index d5723bb..0000000 --- a/gestion_projet/models.py +++ /dev/null @@ -1,309 +0,0 @@ -from django.db import models -from datetime import date -from django.utils import timezone - -class Bailleur(models.Model): - """Modèle représentant un bailleur de fonds pour les projets de recherche.""" - nom_organisme = models.CharField( - max_length=200, - unique=True - ) - contact = models.CharField( - max_length=100, - blank=True, - null=True - ) - email = models.EmailField( - blank=True, - null=True - ) - pays = models.CharField( - max_length=100, - blank=True, - null=True - ) - - def __str__(self): - return self.nom_organisme - -class DomaineDeRecherche(models.Model): - """Modèle représentant les domaines de recherche""" - - DOMAINE_RECHERCHE = [ - ('sciences_sociales', 'Sciences sociales'), - ('naturelles', 'Naturelles'), - ('humaines', 'Humaines'), - ('veterinaires', 'Vétérinaires') - ] - - nom = models.CharField( - max_length=100, - verbose_name="Domaine de recherche", - choices=DOMAINE_RECHERCHE, - primary_key=True - ) - - class Meta: - verbose_name = 'Domaine de recherche' - verbose_name_plural = 'Domaines de recherche' - - def __str__(self): - return self.nom - -class Projet(models.Model): - """Modèle représentant un projet de recherche avec ses caractéristiques et son bailleur associé.""" - TYPE_PROJET = [ - ('laboratoire', 'Laboratoire'), - ('épidémiologie', 'Épidémiologie'), - ('sciences sociales', 'Sciences sociales'), - ('cliniques', 'Cliniques'), - ('autre', 'Autre'), - ] - id_projet = models.CharField( - max_length=100, - blank=True, - unique=True, - primary_key=True, - verbose_name="ID du projet" - ) - nom_projet = models.CharField( - max_length=200, - verbose_name="Nom du projet" - ) - date_debut = models.DateField( - verbose_name="Date de début" - ) - date_fin = models.DateField( - verbose_name="Date de fin" - ) - numero_convention = models.CharField( - max_length=100, - verbose_name="Numéro de convention" - ) - description = models.TextField( - verbose_name="Description" - ) - type_projet = models.CharField( - max_length=100, - choices=TYPE_PROJET, - default='épidémiologie', - verbose_name="Type de projet" - ) - domaine_recherche = models.ManyToManyField(DomaineDeRecherche) - budget=models.DecimalField( - max_digits=12, - decimal_places=2, - verbose_name="Budget" - ) - budget_RH = models.DecimalField( - max_digits=12, - decimal_places=2, - verbose_name="Budget RH" - ) - created_at = models.DateTimeField(auto_now_add=True) - bailleur = models.ForeignKey( - Bailleur, - on_delete=models.SET_NULL, - null=True, - blank=True, - verbose_name="Bailleur de fonds" - ) - - @property - def statut(self): - if self.date_fin < date.today(): - return "Terminé" - return "En cours" - - @property - def avancement(self): - aujourd_hui = date.today() - if (self.date_debut and self.date_fin) and (self.date_debut < self.date_fin): - duree_projet = (self.date_fin - self.date_debut).days - temps_ecoule = (aujourd_hui - self.date_debut).days - if duree_projet > 0: - return round((temps_ecoule / duree_projet) * 100, 2) - - return 0 - - def __str__(self): - return f"{self.nom_projet}" - -class FinancementProjet(models.Model): - """ - Modèle représentant le financement d'un projet par un bailleur, - avec le pourcentage de contribution. - """ - projet = models.ForeignKey( - Projet, - on_delete=models.CASCADE - ) - bailleur = models.ForeignKey( - Bailleur, - on_delete=models.CASCADE - ) - pourcentage = models.DecimalField( - max_digits = 5, - decimal_places=2 - ) - - class Meta: - unique_together = ('projet', 'bailleur') - - def __str__(self): - return f"{self.bailleur.nom} - {self.projet.nom_projet} ({self.pourcentage}%)" - -class DocumentProjet(models.Model): - """Modèle représentant un document associé à un projet, avec des métadonnées et un fichier attaché.""" - NOM_DOCUMENT_CHOICES = [ - ('protocole', 'Protocole d’étude'), - ('ethique', "Approbation du comité d'éthique"), - ('autorisation', 'Autorisation (DNLP)'), - ('rapport_technique', 'Rapport technique'), - ('rapport_financier', 'Rapport financier'), - ('rapport_avancement', "Rapport d'avancement"), - ('convention', 'Convention'), - ('rapport_final', 'Rapport final'), - ('autre', 'Autre'), - ] - - projet = models.ForeignKey( - Projet, - on_delete=models.CASCADE, - related_name='documents', - verbose_name="Projet" - ) - date_ajout = models.DateTimeField( - auto_now_add=True, - verbose_name="Date d'ajout" - ) - nom_document = models.CharField( - max_length = 100, - choices = NOM_DOCUMENT_CHOICES, - verbose_name="Type de document" - ) - description = models.TextField( - blank = True, - verbose_name = "Description" - ) - numero = models.CharField( - max_length = 100, - blank = True, - null = True, - verbose_name = "Numéro du document" - ) - date_validite = models.DateField( - blank = True, - null = True, - verbose_name = "Date de validité" - ) - fichier = models.FileField( - upload_to = 'documents_projets/', - verbose_name = "Fichier à télécharger" - ) - - def __str__(self): - return f"{self.nom_document} ({self.projet})" - -class ActiviteProjet(models.Model): - """Modèle représentant le planning d'un projet, avec des activités associées et un statut.""" - projet = models.ForeignKey( - Projet, - on_delete = models.CASCADE, - verbose_name = "Projet" - ) - titre = models.CharField( - max_length = 200, - verbose_name = "Titre de l'activité" - ) - description = models.TextField( - blank = True, - null = True, - verbose_name = "Description de l'activité" - ) - date_debut = models.DateField(verbose_name="Date de début") - date_fin = models.DateField(verbose_name="Date de fin") - annuler = models.BooleanField( - default = False, - verbose_name = "Annuler l'activité" - ) - motif_annulation = models.TextField( - blank = True, - null = True, - verbose_name = "Motif d'annulation" - ) - - motif_changement_budget = models.TextField( - blank = True, - null = True, - verbose_name = "Motif de changement de budget" - ) - budget_prevu = models.DecimalField( - max_digits = 15, - decimal_places = 2, - default = 0, - verbose_name = "Budget prévu" - ) - budget_depense = models.DecimalField( - max_digits = 15, - decimal_places = 2, - default = 0, - verbose_name = "Budget dépensé" - ) - besoin_ressource_materielle = models.TextField( - verbose_name="Besoin de ressources matérielles" - ) - - @property - def statut(self): - today = timezone.now().date() - if not self.annuler: - if self.date_fin < today: - return 'Terminé' - elif self.date_debut > today: - return 'À venir' - else: - return 'En cours' - else: - return 'Annulé' - - def __str__(self): - return f"{self.titre} ({self.projet.nom_projet})" - -# class LivrableAttendu(models.Model): -# """ -# Modèle représentant un livrable attendu pour une activité de projet, -# avec des critères de validation. -# """ -# activite = models.ForeignKey( -# ActiviteProjet, -# on_delete = models.CASCADE, -# related_name = "livrables_attendus" -# ) -# nom = models.CharField(max_length=255) - -# def __str__(self): -# return f"{self.nom} (Activité: {self.activite.titre})" - -class LivrablesLivres(models.Model): - """Modèle représentant un livrable livré pour une activité de projet.""" - activite = models.ForeignKey( - ActiviteProjet, - on_delete = models.CASCADE - ) - # nom = models.ForeignKey( - # LivrableAttendu, - # on_delete = models.CASCADE - # ) - nom = models.CharField( - max_length=255, - verbose_name="Nom du livrable" - ) - - fichier = models.FileField( - upload_to = 'fichier_livrables/', - blank = True, - null = True - ) - def __str__(self): - return self.nom \ No newline at end of file diff --git a/gestion_projet/static/gestion_projet/js/creation_projet.js b/gestion_projet/static/gestion_projet/js/creation_projet.js deleted file mode 100644 index 36c1a10..0000000 --- a/gestion_projet/static/gestion_projet/js/creation_projet.js +++ /dev/null @@ -1,19 +0,0 @@ -const boutonEnregistrerProjet = $("btnEnregistrerProjet"); - -boutonEnregistrerProjet.addEventListener("click", function() { - const formulaire = $("formCreationProjet"); - const formData = new FormData(formulaire); - fetch(formulaire.action, { - method: "POST", - body: formData, - headers: { - "X-CSRFToken": formData.get("csrfmiddlewaretoken") - } - }) - .then(response => { - if (response.ok) { - window.location.reload(); - alert("Projet enregistré avec succès !"); - } - }); -}); \ No newline at end of file diff --git a/gestion_projet/static/gestion_projet/js/enregistrement_bailleur.js b/gestion_projet/static/gestion_projet/js/enregistrement_bailleur.js deleted file mode 100644 index afe12ea..0000000 --- a/gestion_projet/static/gestion_projet/js/enregistrement_bailleur.js +++ /dev/null @@ -1,23 +0,0 @@ -const btnEnregistrerBailleur = document.getElementById('btnEnregistrerBailleur'); - -btnEnregistrerBailleur.addEventListener('click', function() { - const form = document.getElementById('formBailleur'); - const formData = new FormData(form); - - fetch(form.action, { - method: 'POST', - body: formData, - headers: { - 'X-CSRFToken': formData.get('csrfmiddlewaretoken') - } - }) - .then(response => response.json()) - .then(data => { - if (data.success) { - alert('Bailleur enregistré avec succès !'); - window.location.reload(); - } else { - alert('Ce bailleur existe déjà dans la base de données.'); - } - }); -}); \ No newline at end of file diff --git a/gestion_projet/static/gestion_projet/js/enregistrement_financement.js b/gestion_projet/static/gestion_projet/js/enregistrement_financement.js deleted file mode 100644 index 1e9646c..0000000 --- a/gestion_projet/static/gestion_projet/js/enregistrement_financement.js +++ /dev/null @@ -1,22 +0,0 @@ -const btn_enregistrer_financement = document.getElementById('btn_enregistrer_financement'); - -btn_enregistrer_financement.addEventListener('click', function() { - const form = document.getElementById('form_financement'); - const formData = new FormData(form); - fetch(form.action, { - method: 'POST', - body: formData, - headers: { - 'X-CSRFToken': formData.get('csrfmiddlewaretoken') - } - }) - .then(response => response.json()) - .then(data => { - if (data.success) { - alert(data.message); - window.location.reload(); - }else { - alert(data.message); - } - }); -}); \ No newline at end of file diff --git a/gestion_projet/static/gestion_projet/js/index.js b/gestion_projet/static/gestion_projet/js/index.js deleted file mode 100644 index eb6285e..0000000 --- a/gestion_projet/static/gestion_projet/js/index.js +++ /dev/null @@ -1,64 +0,0 @@ -const $ = (element) => document.getElementById(element) -const url_liste_projet = $("tableau-liste-projet").dataset.url; -const tableau_liste_projet = new Tabulator("#tableau-liste-projet", { - fitColumns: true, - responsiveLayout : true, - columns: [ - {title: "Projet", field: "nom_projet"}, - {title: "Source de financement", field: "source_financement"}, - {title: "Budget Total", field: "budget"}, - {title: "Budget RH", field: "budget_RH"}, - {title: "Avancement", field: "avancement", formatter: "progress"}, - {title: "Statut", field: "statut"}, - ], - ajaxURL: url_liste_projet -}) - -const employes_affectes_projet = new Tabulator("#employes_affectes_projet", { - columns: [ - {title: "Employé", field: "employe"}, - {title: "Pourcentage d'affectation", field: "pourcentage_affectation"}, - ], - placeholder: "Aucun employé affecté pour ce projet", -}) - -const bailleurs_projet = new Tabulator("#bailleurs_projet", { - columns: [ - {title: "Bailleur", field: "bailleur"}, - {title: "Pourcentage de financement", field: "pourcentage_financement"}, - ], - placeholder: "Aucun bailleur attribué pour ce projet", -}) - -tableau_liste_projet.on("rowClick", function (row, rowData) { - const data = rowData.getData(); - const modal = new bootstrap.Modal($("modalDetailProjet")); - - $("detail_id_projet").value = data.id_projet; - $("detail_nom_projet").value = data.nom_projet; - $("detail_date_debut").value = data.date_debut; - $("detail_date_fin").value = data.date_fin; - $("detail_numero_convention").value = data.numero_convention; - $("detail_type_projet").value = data.type_projet; - Array.from($("detail_domaine_recherche").options).forEach(option => { - if (data.domaine_recherche.includes(option.value)) { - option.selected = true; - } else { - option.selected = false; - } - }); - $("detail_budget").value = data.budget; - $("detail_budget_rh").value = data.budget_RH; - $("detail_description").value = data.description; - $("detail_statut").value = data.statut; - - employes_affectes_projet.setData(`projet/liste-employes-par-projet/${$("detail_id_projet").value}`); - bailleurs_projet.setData(`projet/bailleurs/${data.id_projet}/`); - - modal.show(); -}) - -// $('detail-projet-form').addEventListener('submit', (e) => { -// e.preventDefault(); -// new FormData($("detail-projet-form")); -// }) \ No newline at end of file diff --git a/gestion_projet/static/gestion_projet/js/liste_documents_projet.js b/gestion_projet/static/gestion_projet/js/liste_documents_projet.js deleted file mode 100644 index e586ae1..0000000 --- a/gestion_projet/static/gestion_projet/js/liste_documents_projet.js +++ /dev/null @@ -1,20 +0,0 @@ -const urlListeDocument = document.getElementById('listeDocuments').dataset.urllistedocument; - -const table_liste_documents = new Tabulator(document.getElementById('listeDocuments'), { - layout: "fitColumns", - placeholder: "Aucun document trouvé", - columns: [ - { title: "Nom du Document", field: "nom_document" }, - { title: "Numéro", field: "numero" }, - { title: "Date de Validité", field: "date_validite", formatter: "datetime", formatterParams: { - inputFormat: "yyyy-MM-dd", - outputFormat: "dd/MM/yyyy" - } - }, - { title: "Lien vers le Document", field: "lien_document", formatter:"link", formatterParams:{ - target:"_blank", - } - }, - ], - ajaxURL: urlListeDocument, -}); \ No newline at end of file diff --git a/gestion_projet/static/gestion_projet/js/suivi-activites.js b/gestion_projet/static/gestion_projet/js/suivi-activites.js deleted file mode 100644 index d0775d7..0000000 --- a/gestion_projet/static/gestion_projet/js/suivi-activites.js +++ /dev/null @@ -1,59 +0,0 @@ -const $ = (element) => document.getElementById(element) - -const url_liste_activite = $("tableau-liste-activite").dataset.urllisteactivite -const tableau_liste_activite = new Tabulator("#tableau-liste-activite", { - columns: [ - {title: "Activité", field: "titre"}, - {title: "Date début", field: "date_debut"}, - {title: "Date fin", field: "date_fin"}, - {title: "Budget prévu", field: "budget_prevu"}, - {title: "Budget dépensé", field: "budget_depense"}, - {title: "Motif de changement de budget", field: "motif_changement_budget"}, - {title: "Statut", field: "statut"}, - ], - ajaxURL: url_liste_activite, -}) -tableau_liste_activite.on("rowClick", function (row, rowData) { - const data = rowData.getData(); - $("idDetailActivite").value = data.id; - $("titreDetailActivite").value = data.titre; - $("descriptionDetailActivite").value = data.description; - $("date_debutDetailActivite").value = data.date_debut; - $("date_finDetailActivite").value = data.date_fin; - $("statutDetailActivite").value = data.statut; - $("budget_prevuDetailActivite").value = data.budget_prevu; - $("besoin_ressources_materiellesDetailActivite").value = data.besoin_ressource_materielle; - const modal = new bootstrap.Modal($("modalDetailActivite")); - modal.show(); - - fetch(`liste-des-livrables/${data.id}/`) - .then(response => response.json()) - .then(livrables => { - tableau_liste_livrable.setData(livrables); - }) -}) - -const tableau_liste_livrable = new Tabulator("#listeLivrables", { - columns: [ - {title: "Livrable", field: "titre"}, - {title: "Lien du livrable", field: "lien", formatter: "link", formatterParams: {blank: true}}, - ], - placeholder: "Aucun livrable trouvé", -}) - -$("btnMiseAJourDepense").addEventListener("click", function() { - const modal = new bootstrap.Modal($("modalDepenseActivite")); - bootstrap.Modal.getOrCreateInstance($("modalDetailActivite")).hide(); - const idActivite = $("idDetailActivite").value; - const budgetPrevu = $("budget_prevuDetailActivite").value; - - $("id_activite_depense").value = idActivite; - $("budget_prevu").value = budgetPrevu; - modal.show(); -}) - -$("btnAnnulerActivite").addEventListener("click", function(event) { - new bootstrap.Modal($("modalAnnulerActivite")).show(); - $("id_activite_annulation").value = $("idDetailActivite").value; - bootstrap.Modal.getOrCreateInstance($("modalDetailActivite")).hide(); -}) \ No newline at end of file diff --git a/gestion_projet/templates/gestion_projet/ajout-financement.html b/gestion_projet/templates/gestion_projet/ajout-financement.html deleted file mode 100644 index 642fc29..0000000 --- a/gestion_projet/templates/gestion_projet/ajout-financement.html +++ /dev/null @@ -1,37 +0,0 @@ -{% extends "BASE.html" %} -{% load static %} -{% block 'titre_page' %} Gestion des projets {% endblock %} -{% block 'contenu' %} - - - {% if messages %} - {% for message in messages %} - - {% endfor %} - {% endif %} -
-
-
Ajout du financement au projet (Nom du projet ici)
-
-
- {% csrf_token %} - {{ formulaire_creation_projet.as_p }} - -
-
-
-{% endblock %} -{% block 'modal' %} - {% include "gestion_projet/parts/modalAjoutProjet.html" %} -{% endblock %} -{% block 'js' %} - -{% endblock %} \ No newline at end of file diff --git a/gestion_projet/templates/gestion_projet/creation_projet.html b/gestion_projet/templates/gestion_projet/creation_projet.html deleted file mode 100644 index c04c5d4..0000000 --- a/gestion_projet/templates/gestion_projet/creation_projet.html +++ /dev/null @@ -1,32 +0,0 @@ -{% extends "BASE.html" %} -{% load static %} -{% block 'titre_page' %} Gestion des projets {% endblock %} -{% block 'contenu' %} - {% if messages %} - {% for message in messages %} - - {% endfor %} - {% endif %} - {% comment %}

Enregistrement d'un nouveau projet

{% endcomment %} -
-
-
Enregistrement d'un nouveau projet
-
-
- {% csrf_token %} - {{ formulaire_creation_projet.as_p }} -
- - -
-
-
-
-{% endblock %} -{% block 'modal' %} -{% endblock %} -{% block 'js' %} -{% endblock %} \ No newline at end of file diff --git a/gestion_projet/templates/gestion_projet/index.html b/gestion_projet/templates/gestion_projet/index.html deleted file mode 100644 index 70ba584..0000000 --- a/gestion_projet/templates/gestion_projet/index.html +++ /dev/null @@ -1,61 +0,0 @@ -{% extends "BASE.html" %} -{% load static %} -{% load tags_personnaliser %} -{% block 'titre_page' %} Gestion des projets {% endblock %} -{% block 'contenu' %} -

Gestion des projets

-{% if messages %} - {% for message in messages %} - - {% endfor %} -{% endif %} -
-
- Projets en cours -

{{projet_en_cours}}

-
-
- Budget Total (GNF) -

{{budget_total}}

-
-
- Personnel sous projet -

{{nombre_personnel}}

-
-
-
-
-
La liste des projets
- {% if user|has_group:"ressource_humaine" %} -
- - -
- {% endif %} -
-
-
-
-
-
-
-{% endblock %} -{% block 'modal' %} - {% include "gestion_projet/parts/modalAjoutProjet.html" %} - {% include "gestion_projet/parts/modalFinancement.html" %} - {% include "gestion_projet/parts/creation_bailleur.html" %} - {% include "gestion_projet/parts/modalDetailProjet.html" %} -{% endblock %} -{% block 'js' %} - - - - -{% endblock %} \ No newline at end of file diff --git a/gestion_projet/templates/gestion_projet/parts/creation_bailleur.html b/gestion_projet/templates/gestion_projet/parts/creation_bailleur.html deleted file mode 100644 index 6fe4194..0000000 --- a/gestion_projet/templates/gestion_projet/parts/creation_bailleur.html +++ /dev/null @@ -1,20 +0,0 @@ - diff --git a/gestion_projet/templates/gestion_projet/parts/liste_document_projet.html b/gestion_projet/templates/gestion_projet/parts/liste_document_projet.html deleted file mode 100644 index eb63ad2..0000000 --- a/gestion_projet/templates/gestion_projet/parts/liste_document_projet.html +++ /dev/null @@ -1,16 +0,0 @@ - \ No newline at end of file diff --git a/gestion_projet/templates/gestion_projet/parts/modalAjoutActivite.html b/gestion_projet/templates/gestion_projet/parts/modalAjoutActivite.html deleted file mode 100644 index d253eb3..0000000 --- a/gestion_projet/templates/gestion_projet/parts/modalAjoutActivite.html +++ /dev/null @@ -1,20 +0,0 @@ - \ No newline at end of file diff --git a/gestion_projet/templates/gestion_projet/parts/modalAjoutDocument.html b/gestion_projet/templates/gestion_projet/parts/modalAjoutDocument.html deleted file mode 100644 index 6787fad..0000000 --- a/gestion_projet/templates/gestion_projet/parts/modalAjoutDocument.html +++ /dev/null @@ -1,20 +0,0 @@ - \ No newline at end of file diff --git a/gestion_projet/templates/gestion_projet/parts/modalAjoutLivrable.html b/gestion_projet/templates/gestion_projet/parts/modalAjoutLivrable.html deleted file mode 100644 index 6b2bb68..0000000 --- a/gestion_projet/templates/gestion_projet/parts/modalAjoutLivrable.html +++ /dev/null @@ -1,20 +0,0 @@ - \ No newline at end of file diff --git a/gestion_projet/templates/gestion_projet/parts/modalAjoutProjet.html b/gestion_projet/templates/gestion_projet/parts/modalAjoutProjet.html deleted file mode 100644 index 1be46ce..0000000 --- a/gestion_projet/templates/gestion_projet/parts/modalAjoutProjet.html +++ /dev/null @@ -1,21 +0,0 @@ - - \ No newline at end of file diff --git a/gestion_projet/templates/gestion_projet/parts/modalAnnulerActivite.html b/gestion_projet/templates/gestion_projet/parts/modalAnnulerActivite.html deleted file mode 100644 index 7793aaf..0000000 --- a/gestion_projet/templates/gestion_projet/parts/modalAnnulerActivite.html +++ /dev/null @@ -1,26 +0,0 @@ - \ No newline at end of file diff --git a/gestion_projet/templates/gestion_projet/parts/modalDetailActivite.html b/gestion_projet/templates/gestion_projet/parts/modalDetailActivite.html deleted file mode 100644 index fba8cd9..0000000 --- a/gestion_projet/templates/gestion_projet/parts/modalDetailActivite.html +++ /dev/null @@ -1,58 +0,0 @@ - \ No newline at end of file diff --git a/gestion_projet/templates/gestion_projet/parts/modalDetailProjet.html b/gestion_projet/templates/gestion_projet/parts/modalDetailProjet.html deleted file mode 100644 index a7f6087..0000000 --- a/gestion_projet/templates/gestion_projet/parts/modalDetailProjet.html +++ /dev/null @@ -1,115 +0,0 @@ -{% load tags_personnaliser %} - \ No newline at end of file diff --git a/gestion_projet/templates/gestion_projet/parts/modalFinancement.html b/gestion_projet/templates/gestion_projet/parts/modalFinancement.html deleted file mode 100644 index a075b41..0000000 --- a/gestion_projet/templates/gestion_projet/parts/modalFinancement.html +++ /dev/null @@ -1,20 +0,0 @@ - \ No newline at end of file diff --git a/gestion_projet/templates/gestion_projet/parts/modalMiseAJourDepense.html b/gestion_projet/templates/gestion_projet/parts/modalMiseAJourDepense.html deleted file mode 100644 index d796bb4..0000000 --- a/gestion_projet/templates/gestion_projet/parts/modalMiseAJourDepense.html +++ /dev/null @@ -1,36 +0,0 @@ - \ No newline at end of file diff --git a/gestion_projet/templates/gestion_projet/suivi_activite.html b/gestion_projet/templates/gestion_projet/suivi_activite.html deleted file mode 100644 index 24d44a6..0000000 --- a/gestion_projet/templates/gestion_projet/suivi_activite.html +++ /dev/null @@ -1,64 +0,0 @@ -{% extends "BASE.html" %} -{% load static %} -{% block 'titre_page' %} Gestion des projets {% endblock %} -{% block 'contenu' %} - {% if messages %} - {% for message in messages %} - - {% endfor %} - {% endif %} -
- Suivi des Activités ({{ nom_projet }} ) -
-
-
- Budget Total (GNF) -

{{ budget_total }}

-
-
- Budget RH (GNF) -

{{ budget_RH }}

-
-
- Budget Dépensé (GNF) -

{{budget_depense}}

-
-
-
-
-
La liste des Activités
-
- - - -
-
-
- -
-
-
-{% endblock %} -{% block 'modal' %} - {% include "gestion_projet/parts/modalAjoutActivite.html" %} - {% include "gestion_projet/parts/modalDetailActivite.html" %} - {% include "gestion_projet/parts/modalAjoutDocument.html" %} - {% include "gestion_projet/parts/modalMiseAJourDepense.html" %} - {% include "gestion_projet/parts/modalAjoutLivrable.html" %} - {% include "gestion_projet/parts/liste_document_projet.html" %} - {% include "gestion_projet/parts/modalAnnulerActivite.html" %} -{% endblock %} -{% block 'js' %} - - -{% endblock %} - \ No newline at end of file diff --git a/gestion_projet/tests.py b/gestion_projet/tests.py deleted file mode 100644 index de8bdc0..0000000 --- a/gestion_projet/tests.py +++ /dev/null @@ -1,3 +0,0 @@ -from django.test import TestCase - -# Create your tests here. diff --git a/gestion_projet/urls.py b/gestion_projet/urls.py deleted file mode 100644 index 6e3f087..0000000 --- a/gestion_projet/urls.py +++ /dev/null @@ -1,122 +0,0 @@ -from django.urls import path -from . import views - -app_name = 'gestion_projet' - -urlpatterns = [ - path( - '', - views.index, - name='index' - ), - path( - 'modifier-financement//', - views.modifier_financement_projet, - name='modifier-financement' - ), - path( - 'projet/creation/', - views.creation_projet, - name='creation-projet' - ), - path( - 'projet/modifier//', - views.modification_projet, - name='modifier-projet' - ), - path( - 'liste-projet/', - views.liste_projet, - name='liste-projet' - ), - path( - 'projet/suppression//', - views.suppression_projet, - name='projet-suppression' - ), - path( - 'projet/ajouter-financement', - views.ajouter_financement_projet, - name='ajouter_financement' - ), - path( - 'creation-bailleur', - views.creation_bailleur, - name='creation-bailleur' - ), - path( - 'projet/affectation/', - views.affecter_employe_projet, - name='affecter-employe-projet' - ), - path( - 'projet/ajout-de-document/', - views.ajouter_document_projet, - name='ajouter-document' - ), - path( - 'projet/bailleurs//', - views.liste_bailleurs, - name='liste-bailleurs' - ), - path( - 'activite/', - views.activites_projet, - name='activites-projet' - ), - path( - 'activite/ajouter/', - views.ajouter_activite_projet, - name='ajouter-activite' - ), - path( - 'activite/modifier//', - views.modifier_activite_projet, - name='modifier-activite' - ), - path( - 'activite/annuler/', - views.annuler_activite_projet, - name='annuler-activite' - ), - path( - 'activite/liste/', - views.liste_activites_projet, - name='liste-activites-projet' - ), - # path( - # 'projet/ajout-de-document/', - # views.ajouter_document_projet, - # name='ajouter-document' - # ), - path( - 'projet/liste-des-documents/', - views.liste_documents_projet, - name='liste-documents-projet' - ), - path( - 'activite/liste-des-livrables//', - views.liste_livrables_activite, - name='liste-livrables-activite' - ), - path( - 'projet/ajout-de-livrable/', - views.ajouter_livrables_projet, - name='ajouter-livrable' - ), - path( - 'activite/mise-a-jour-depense/', - views.mises_a_jour_depense_activite, - name='mettre-a-jour-depense' - ), - path( - 'projet/liste-employes-par-projet/', - views.liste_employes_affectes, - name='liste-employes-affectes' - ), - path( - 'projet/mises-a-jour-projet', - views.mises_a_jour_projet, - name='mises-a-jour-projet' - ) -] \ No newline at end of file diff --git a/gestion_projet/views.py b/gestion_projet/views.py deleted file mode 100644 index 69bd619..0000000 --- a/gestion_projet/views.py +++ /dev/null @@ -1,485 +0,0 @@ -from datetime import date -from decimal import Decimal, InvalidOperation -from django.http import JsonResponse -from django.shortcuts import redirect, render -from django.utils import timezone -from django.contrib import messages -from django.contrib.auth.decorators import login_required -from django.db.models import Sum -from django.forms.models import model_to_dict -from gestion_employe.forms import AffectationForm -from gestion_employe.models import Affectation, Employe -from gestion_projet.forms import ProjetForm -from gestion_projet.models import Projet -from .models import ( - DocumentProjet, - Bailleur, - FinancementProjet, - ActiviteProjet, - LivrablesLivres, -) -from .forms import ( - ActiviteProjetForm, - DocumentProjetForm, - FinancementProjetFrom, - BailleurForm, - LivrablesLivresForm -) - -def liste_projet(request): - """ Vue pour retourner la liste de tous les projet """ - projets = Projet.objects.all().order_by('-created_at') - - data = [] - for p in projets: - financement = FinancementProjet.objects.filter(projet=p).select_related('bailleur') - data.append({ - "id_projet": p.id_projet, - "nom_projet": p.nom_projet, - "date_debut": p.date_debut, - "date_fin": p.date_fin, - "numero_convention": p.numero_convention, - "description": p.description, - "type_projet": p.type_projet, - "budget": p.budget, - "budget_RH": p.budget_RH, - "created_at": p.created_at, - "statut": p.statut, - "avancement": p.avancement, - "domaine_recherche": [d.nom for d in p.domaine_recherche.all()], - "source_financement": [f.bailleur.nom_organisme for f in financement], - }) - - return JsonResponse(data, safe=False) - -def liste_employes_affectes(request, projet_id): - """ Vue pour retourner la liste des employés affectés à un projet spécifique """ - employes = Employe.objects.filter(affectation__projet_id=projet_id).distinct() - data = [] - for employe in employes: - data.append({ - "employe": f"{employe.user.first_name} {employe.user.last_name}", - "pourcentage_affectation": Affectation.objects.get(employe=employe, projet__id_projet=projet_id).pourcentage_temps_affectation - }) - return JsonResponse(data, safe=False) - -def liste_bailleurs(request, projet_id): - """ Vue pour retourner la liste des bailleurs associés à un projet spécifique """ - bailleurs = FinancementProjet.objects.filter(projet_id=projet_id).select_related('bailleur') - data = [] - for b in bailleurs: - data.append({ - "bailleur": b.bailleur.nom_organisme, - "pourcentage_financement": b.pourcentage - }) - - return JsonResponse(data, safe=False) - -@login_required -def index(request): - projets = Projet.objects.all().order_by('-created_at') - nombre_personnel = Affectation.objects.values('employe_id').distinct().count() - budget_total = sum([projet.budget for projet in projets if projet.budget or 0]) - context = { - 'form': AffectationForm(), - 'form_ajout_financement': FinancementProjetFrom(), - 'form_ajout_bailleur': BailleurForm(), - 'bailleurs': Bailleur.objects.all(), - 'nombre_personnel': nombre_personnel, - 'budget_total': budget_total, - 'formulaire_creation_projet': ProjetForm(), - 'projet_en_cours': Projet.objects.filter(date_fin__gte=date.today()).count(), - } - - return render(request, 'gestion_projet/index.html', context) - -@login_required -def creation_projet(request): - """Vue pour créer un nouveau projet via un formulaire""" - formulaire_creation_projet = ProjetForm() - if request.method == "POST": - form = ProjetForm(request.POST) - - if form.is_valid(): - form.save() - messages.success(request, "Projet créé avec succès.") - else: - messages.error(request, "Le formulaire transmis est invalide.") - else: - form = ProjetForm() - return render( - request, - "gestion_projet/creation_projet.html", - { - "formulaire_creation_projet": formulaire_creation_projet - } - ) - -@login_required -def mises_a_jour_projet(request): - """ Vue de mises à jour des informations du projet """ - if request.method == "POST": - try: - projet = Projet.objects.get(id_projet = request.POST["id_projet"]) - except Projet.DoesNotExist: - messages.error(request, "Ce projet n'existe pas.") - else: - projet_form = ProjetForm(request.POST, instance=projet) - if projet_form.is_valid(): - projet_form.save() - messages.success(request, f"Le projet d'identifiant {request.POST['id_projet']} a été mis à jour avec succès.") - else: - messages.error(request, f"Les informations de modification transmises pour la modification du projet {request.POST['id_projet']} ne sont pas valides.") - else: - messages.error(request, "La méthode de transmission des données n'est pas valide.") - return redirect('gestion_projet:index') - -@login_required -def creation_bailleur(request): - form = BailleurForm(request.POST) - if request.method == 'POST': - if form.is_valid(): - form.save() - return JsonResponse({'success': True}) - return JsonResponse({'success': False}) - -@login_required -def ajouter_financement_projet(request): - """Ajoute un financement à un projet en vérifiant que le total ne dépasse pas 100%""" - - if request.method == 'POST': - pourcentage_recuperer = request.POST.get('pourcentage') - bailleur_id = request.POST.get('bailleur') - projet_id = request.POST.get('projet') - try: - projet = Projet.objects.get(id_projet=projet_id) - except Projet.DoesNotExist: - return JsonResponse({'success': False, 'message': "Le projet spécifié n’existe pas."}) - - try: - pourcentage_nouveau = Decimal(pourcentage_recuperer) if pourcentage_recuperer else Decimal(0) - except (InvalidOperation, TypeError): - return JsonResponse({'success': False, 'message': "Le pourcentage saisi n’est pas valide."}) - - financement_total_actuel = sum(financement.pourcentage for financement in FinancementProjet.objects.filter(projet=projet)) - if financement_total_actuel + pourcentage_nouveau > 100: - return JsonResponse({'success': False, 'message': "Le total des financements dépasse 100%."}) - - if bailleur_id: - FinancementProjet.objects.create( - projet=projet, - bailleur_id=bailleur_id, - pourcentage=pourcentage_nouveau - ) - return JsonResponse({'success': True, 'message': "Financement ajouté avec succès."}) - else: - return JsonResponse({'success': False, 'message': "Aucun bailleur sélectionné."}) - return JsonResponse({'success': False, 'message': "Requête invalide."}) - -@login_required -def modification_projet(request, projet_id): - """Vue pour éditer un projet existant via un formulaire pré-rempli""" - try: - projet = Projet.objects.get(id=projet_id) - except Projet.DoesNotExist: - messages.error(request, "Le projet spécifié n’existe pas.") - return redirect('projet-index') - - if request.method == "POST": - form = ProjetForm(request.POST) - if form.is_valid(): - form.save() - messages.success(request, "Le projet a été modifié avec succès.") - return redirect('projet-index') - messages.error(request, "Erreur lors de la modification du projet.") - form = ProjetForm(instance=projet) - return render(request, 'gestion_projet/projet-edit.html', {'form': form, 'projets': projet}) - -@login_required -def suppression_projet(request, id): - """Vue pour supprimer un projet spécifique après confirmation de l'utilisateur""" - try: - projet = Projet.objects.get(id=id) - except Projet.DoesNotExist: - messages.error(request, "Le projet spécifié n’existe pas.") - return redirect('projet-index') - - if request.method == "POST": - projet.delete() - messages.success(request, "Le projet a été supprimé avec succès.") - return redirect('projet-index') - -@login_required -def affecter_employe_projet(request, projet_id): - """Vue pour affecter un employé à un projet avec vérification des contraintes d'affectation""" - try: - projet = Projet.objects.get(id=projet_id) - except Projet.DoesNotExist: - messages.error(request, "Le projet spécifié n’existe pas.") - return redirect('projet-index') - - if request.method == 'POST': - form = AffectationForm(request.POST) - if form.is_valid(): - employe = Employe.objects.get(id=form.cleaned_data['employe'].id) - date_fin_affectation = form.cleaned_data['date_fin_daffectation'] - temps_nouveau = form.cleaned_data['temps_affectation'] - date_affectation = form.cleaned_data['date_affectation'] - - if (date_fin_affectation and date_affectation): - total_affectation = ( - Affectation.objects.filter(employe=employe) - .aggregate(total_pourcentage_affectation=Sum('temps_affectation')) - ['total_pourcentage_affectation'] or 0 - ) - if (date_fin_affectation < date_affectation): - messages.warning(request, "La date de fin d'affectation ne peut pas être antérieure à la date de début.") - return redirect('projet-index') - elif date_fin_affectation > projet.date_fin: - messages.warning(request, f"La date de fin de l'affectation ({date_fin_affectation}) ne peut pas dépasser la date de fin du projet ({projet.date_fin}).") - return redirect('projet-index') - elif total_affectation + temps_nouveau > 100: - messages.warning( - request, - f"Les pourcentages d'affectation de l'employé {employe.first_name} {employe.last_name} dépasse 100% sur les différents projets ({total_affectation + temps_nouveau}%)." - ) - return redirect('projet-index') - - Affectation.objects.update_or_create( - projet=projet, - employe=employe, - defaults={ - 'date_affectation': form.cleaned_data['date_affectation'], - 'date_fin_daffectation': date_fin_affectation, - 'role': form.cleaned_data['role'], - 'temps_affectation': temps_nouveau - } - ) - form = AffectationForm(initial={'projet': projet}) - messages.error(request, "Erreur : Formulaire non valide.") - return redirect('projet-index') - -def modifier_financement_projet(request, financement_id): - try: - financement = FinancementProjet.objects.get(id=financement_id) - except FinancementProjet.DoesNotExist: - messages.error(request, "Le financement spécifié n’existe pas.") - return redirect('projet-index') - projet = financement.projet - if request.method == 'POST': - try: - nouveau_pourcentage = Decimal(request.POST.get('pourcentage', '0')) - except InvalidOperation: - messages.error(request, "Le pourcentage saisi est invalide.") - return redirect('projet-index') - pourcentage_total_financement = ( - FinancementProjet.objects.filter(projet=projet) - .exclude(id=financement.id) - .aggregate(total_financement=Sum('pourcentage'))['pourcentage_total_financement'] or 0 - ) - if pourcentage_total_financement + nouveau_pourcentage > 100: - messages.error(request, f"Le total des financements dépasse 100% ({pourcentage_total_financement + nouveau_pourcentage}%).") - return redirect('projet-index') - financement.pourcentage = nouveau_pourcentage - financement.save() - messages.success(request, "Financement modifié avec succès.") - return redirect('projet-index') - -@login_required -def activites_projet(request): - try: - employe = Employe.objects.get(user=request.user) - except Employe.DoesNotExist: - messages.error(request, "Impossible d'accéder au menu 'Suivi des activités' car votre profil Utilisateur n'est lié à aucun profil Employe. Veuillez contacter l'administrateur.") - return redirect("gestion_conges:conge") - - try: - Affectation.objects.get(employe=employe, date_fin_daffectation__gte = timezone.now().date(), role='chef_projet') - except Affectation.DoesNotExist : - messages.error(request, "Seuls les chefs de projet ont accès à l'onglet 'Suivi des Activités'") - return redirect("gestion_conges:conge") - - projet = Affectation.objects.filter(employe=employe, role='chef_projet', date_fin_daffectation__gte=timezone.now().date()).select_related('projet').first() - if projet : - context = { - **model_to_dict(projet), - "nom_projet": projet.projet.nom_projet, - "budget_total": projet.projet.budget, - "budget_RH": projet.projet.budget_RH, - "form_ajout_activite": ActiviteProjetForm(), - "form_ajout_document": DocumentProjetForm(), - "form_ajout_livrable": LivrablesLivresForm(), - } - else : - context = { - "form_ajout_activite": ActiviteProjetForm(), - "form_ajout_document": DocumentProjetForm(), - "form_ajout_livrable": LivrablesLivresForm(), - } - return render(request, 'gestion_projet/suivi_activite.html', context) - -@login_required -def ajouter_activite_projet(request): - """Vue pour ajouter une activité à un projet spécifique via un formulaire""" - employe = Employe.objects.get(user=request.user) - projet = Affectation.objects.filter(employe=employe, role='chef_projet', date_fin_daffectation__gte=timezone.now().date()).select_related('projet').first() - - if request.method == "POST": - form = ActiviteProjetForm(request.POST) - if form.is_valid(): - activite = form.save(commit=False) - activite.projet = projet.projet - activite.budget_depense = request.POST["budget_prevu"] - activite.save() - messages.success(request, "Activité ajoutée avec succès !") - else: - messages.error(request, "Erreur : vérifiez les informations saisies.") - return redirect('gestion_projet:activites-projet') - -@login_required -def liste_activites_projet(request): - """Vue pour retourner la liste des activités d'un projet spécifique""" - employe = Employe.objects.get(user=request.user) - projet = Affectation.objects.filter(employe=employe, role='chef_projet', date_fin_daffectation__gte=timezone.now().date()).select_related('projet').first() - if projet: - activites = ActiviteProjet.objects.filter(projet_id=projet.projet.id_projet).order_by('-date_debut') - else: - activites = [] - data = [] - for a in activites: - data.append({ - "id": a.id, - "titre": a.titre, - "date_debut": a.date_debut, - "date_fin": a.date_fin, - "statut": a.statut, - "budget_prevu": a.budget_prevu, - "budget_depense": a.budget_depense, - "motif_changement_budget": a.motif_changement_budget, - "besoin_ressource_materielle": a.besoin_ressource_materielle, - "description": a.description, - }) - return JsonResponse(data, safe=False) - -@login_required -def liste_livrables_activite(request, activite_id): - """Vue pour retourner la liste des livrables attendus d'une activité spécifique""" - livrables = LivrablesLivres.objects.filter(activite__id=activite_id) - data = [] - for livrable in livrables: - print(livrable.fichier.url) - data.append({ - "titre": livrable.nom, - "lien": livrable.fichier.url if livrable.fichier else "", - }) - return JsonResponse(data, safe=False) - -@login_required -def mises_a_jour_depense_activite(request): - """Vue pour retourner la liste des activités d'un projet spécifique avec leurs dépenses mises à jour""" - if request.method == "POST": - activite_id = request.POST.get("id_activite") - budget_depense = request.POST.get("budget_depense") - motif = request.POST.get("motif", "").strip() - try: - activite = ActiviteProjet.objects.get(id=activite_id) - activite.budget_depense = Decimal(budget_depense) - if Decimal(budget_depense) != activite.budget_prevu: - activite.motif_changement_budget = motif - else: - activite.motif_changement_budget = "" - activite.save() - messages.success(request, f"Dépenses mises à jour pour l’activité '{activite.titre}'.") - except (ActiviteProjet.DoesNotExist, InvalidOperation): - messages.error(request, "Erreur lors de la mise à jour des dépenses.") - return redirect("gestion_projet:activites-projet") - -@login_required -def ajouter_livrables_projet(request): - """Vue pour ajouter un livrable à une activité de projet spécifique via un formulaire""" - - if request.method == "POST": - form = LivrablesLivresForm(request.POST, request.FILES) - if form.is_valid(): - form.save() - messages.success(request, "Livrable ajouté avec succès !") - else: - messages.error(request, "Erreur : vérifiez les informations saisies.") - return redirect('gestion_projet:activites-projet') - -@login_required -def ajouter_document_projet(request): - """Ajoute un document à un projet""" - employe = Employe.objects.get(user=request.user) - projet = Affectation.objects.filter(employe=employe, role='chef_projet', date_fin_daffectation__gte=timezone.now().date()).select_related('projet').first() - if request.method == "POST": - form = DocumentProjetForm(request.POST, request.FILES) - if form.is_valid(): - document = form.save(commit=False) - document.projet = projet.projet - document.save() - messages.success(request, "Document ajouté avec succès !") - else: - messages.error(request, "Erreur : le document n’a pas pu être enregistré.") - return redirect('gestion_projet:activites-projet') - -def liste_documents_projet(request): - employe = Employe.objects.get(user=request.user) - projet = Affectation.objects.filter(employe=employe, role='chef_projet', date_fin_daffectation__gte=timezone.now().date()).select_related('projet').first() - if projet: - documents = DocumentProjet.objects.filter(projet__id_projet=projet.projet.id_projet) - else: - documents = [] - data = [] - for d in documents: - data.append({ - "nom_document": d.nom_document, - "numero": d.numero, - "date_validite": d.date_validite, - "lien_document": d.fichier.url if d.fichier else "", - }) - return JsonResponse(data, safe=False) - -def modifier_activite_projet(request, id): - """Vue pour modifier une activité de projet spécifique via un formulaire pré-rempli""" - try: - activite = ActiviteProjet.objects.get(id=id) - except ActiviteProjet.DoesNotExist: - messages.error(request, "L'activité spécifiée n’existe pas.") - return redirect('activites-projet') - if request.method == 'POST': - form = ActiviteProjetForm(request.POST, instance=activite) - if form.is_valid(): - activite.besoin_ressource_materielle = bool(request.POST.get("besoin_ressource_materielle")) - form.save() - messages.success(request, f"Activité « {activite.titre} » modifiée avec succès.") - else: - messages.error(request, "Erreur lors de la modification de l'activité.") - return redirect('activites-projet') - - form = ActiviteProjetForm(instance=activite) - return render( - request, - 'gestion_projet/activite.html', { - 'form': form, - 'activite': activite, - } - ) - -def annuler_activite_projet(request): - """Vue pour annuler une activité de projet spécifique après confirmation de l'utilisateur""" - print(request.POST) - if request.method != "POST": - messages.error(request, "Requête invalide.") - return redirect('gestion_projet:activites-projet') - try: - activite = ActiviteProjet.objects.get(id=request.POST.get('id_activite')) - except ActiviteProjet.DoesNotExist: - messages.error(request, "L'activité spécifiée n’existe pas.") - return redirect('gestion_projet:activites-projet') - if request.method == "POST": - activite.annuler = True - activite.motif_annulation = request.POST.get("motif_annulation", "").strip() - activite.save() - messages.success(request, f"L'activité '{activite.titre}' a été annulée avec succès.") - return redirect('gestion_projet:activites-projet') \ No newline at end of file diff --git a/gestion_salle/__init__.py b/gestion_salle/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/gestion_salle/admin.py b/gestion_salle/admin.py deleted file mode 100644 index ea5d68b..0000000 --- a/gestion_salle/admin.py +++ /dev/null @@ -1,3 +0,0 @@ -from django.contrib import admin - -# Register your models here. diff --git a/gestion_salle/apps.py b/gestion_salle/apps.py deleted file mode 100644 index 569d365..0000000 --- a/gestion_salle/apps.py +++ /dev/null @@ -1,5 +0,0 @@ -from django.apps import AppConfig - - -class GestionSalleConfig(AppConfig): - name = 'gestion_salle' diff --git a/gestion_salle/forms.py b/gestion_salle/forms.py deleted file mode 100644 index e40caf0..0000000 --- a/gestion_salle/forms.py +++ /dev/null @@ -1,32 +0,0 @@ -from django import forms -from .models import Reservation - -class ReservationForm(forms.ModelForm): - class Meta: - model = Reservation - fields = ['salle', 'date_debut', 'date_fin', 'heure_debut', 'heure_fin', 'motif_reservation', 'besoin_zoom', 'besoin_ordi'] - widgets = { - 'date_debut': forms.DateInput(attrs={'type': 'date', 'class': 'form-control'}), - 'date_fin': forms.DateInput(attrs={'type': 'date', 'class': 'form-control'}), - 'heure_debut': forms.TimeInput(attrs={'type': 'time', 'class': 'form-control'}), - 'heure_fin': forms.TimeInput(attrs={'type': 'time', 'class': 'form-control'}), - 'motif_reservation': forms.Textarea(attrs={'rows': 3, 'cols': 40, 'style':'resize:none;', 'class': 'form-control'}), - 'salle': forms.Select(attrs={'class': 'form-select'}), - } - besoin_zoom = forms.BooleanField( - required=False, - label="Besoin d'un lien Zoom ?", - widget=forms.CheckboxInput(attrs={'class': 'form-check-input', 'id': 'id_besoin_zoom'}) - ) - besoin_ordi = forms.BooleanField( - required=False, - label="Besoin d'ordinateur ?", - widget=forms.CheckboxInput(attrs={'class': 'form-check-input', 'id': 'id_besoin_ordi'}) - ) - -class RefusReservationForm(forms.Form): - motif_refus = forms.CharField( - label= "Motif du refus", - widget=forms.Textarea(attrs={'rows': 3, 'cols': 40, 'style': 'resize:none;'}), - required=True - ) diff --git a/gestion_salle/migrations/0001_initial.py b/gestion_salle/migrations/0001_initial.py deleted file mode 100644 index f477d96..0000000 --- a/gestion_salle/migrations/0001_initial.py +++ /dev/null @@ -1,34 +0,0 @@ -# Generated by Django 5.2.13 on 2026-04-17 12:03 - -import django.db.models.deletion -from django.db import migrations, models - - -class Migration(migrations.Migration): - - initial = True - - dependencies = [ - ('gestion_employe', '0001_initial'), - ] - - operations = [ - migrations.CreateModel( - name='Reservation', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('salle', models.CharField(choices=[('formation', 'Salle de formation'), ('reunion', 'Salle de réunion'), ('lien_zoom', 'Lien Zoom')], max_length=100)), - ('date_demande', models.DateTimeField(auto_now_add=True)), - ('date_debut', models.DateField()), - ('date_fin', models.DateField(blank=True, null=True)), - ('heure_debut', models.TimeField()), - ('heure_fin', models.TimeField()), - ('besoin_zoom', models.BooleanField(default=False, verbose_name="Besoin d'un lien Zoom ?")), - ('besoin_ordi', models.BooleanField(default=False, verbose_name="Besoin d'un ordinateur ?")), - ('lien_zoom', models.URLField(blank=True, null=True, verbose_name='Lien Zoom')), - ('motif_reservation', models.TextField()), - ('statut', models.CharField(choices=[('en_attente', 'En attente'), ('validee', 'Validée'), ('refusee', 'Refusée'), ('annulee', 'Annulée')], default='en_attente', max_length=25)), - ('employe', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='gestion_employe.employe')), - ], - ), - ] diff --git a/gestion_salle/migrations/__init__.py b/gestion_salle/migrations/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/gestion_salle/templates/gestion_salle/index.html b/gestion_salle/templates/gestion_salle/index.html deleted file mode 100644 index b0fa88e..0000000 --- a/gestion_salle/templates/gestion_salle/index.html +++ /dev/null @@ -1,59 +0,0 @@ -{% extends "BASE.html" %} -{% load static %} -{% block 'titre_page' %} Gestion des projets {% endblock %} -{% block 'css' %} - - -{% endblock %} -{% block 'contenu' %} - {% if messages %} - {% for message in messages %} - - {% endfor %} - {% endif %} -
-
-

Reservation de salle

-
-
-
- - -
-
- - -
-
-
-
- - -
-
-
-
-
-
-{% endblock %} -{% block 'modal' %} - {% include 'gestion_salle/parts/modalCreationReservation.html' %} - {% include 'gestion_salle/parts/ModaleAjoutLienZoom.html' %} - {% include 'gestion_salle/parts/ModalRefusReservation.html' %} - {% include 'gestion_salle/parts/modalDetailResevation.html' %} - {% include 'gestion_salle/parts/modalListeValidation.html' %} -{% endblock %} -{% block 'js' %} - - - -{% endblock %} \ No newline at end of file diff --git a/gestion_salle/templates/gestion_salle/parts/ModalRefusReservation.html b/gestion_salle/templates/gestion_salle/parts/ModalRefusReservation.html deleted file mode 100644 index 96d358d..0000000 --- a/gestion_salle/templates/gestion_salle/parts/ModalRefusReservation.html +++ /dev/null @@ -1,22 +0,0 @@ - \ No newline at end of file diff --git a/gestion_salle/templates/gestion_salle/parts/ModaleAjoutLienZoom.html b/gestion_salle/templates/gestion_salle/parts/ModaleAjoutLienZoom.html deleted file mode 100644 index 0c7c534..0000000 --- a/gestion_salle/templates/gestion_salle/parts/ModaleAjoutLienZoom.html +++ /dev/null @@ -1,26 +0,0 @@ - - \ No newline at end of file diff --git a/gestion_salle/templates/gestion_salle/parts/modalCreationReservation.html b/gestion_salle/templates/gestion_salle/parts/modalCreationReservation.html deleted file mode 100644 index 0db15f8..0000000 --- a/gestion_salle/templates/gestion_salle/parts/modalCreationReservation.html +++ /dev/null @@ -1,23 +0,0 @@ - - \ No newline at end of file diff --git a/gestion_salle/templates/gestion_salle/parts/modalDetailResevation.html b/gestion_salle/templates/gestion_salle/parts/modalDetailResevation.html deleted file mode 100644 index fb84ee8..0000000 --- a/gestion_salle/templates/gestion_salle/parts/modalDetailResevation.html +++ /dev/null @@ -1,71 +0,0 @@ - - \ No newline at end of file diff --git a/gestion_salle/templates/gestion_salle/parts/modalListeValidation.html b/gestion_salle/templates/gestion_salle/parts/modalListeValidation.html deleted file mode 100644 index 0f50e01..0000000 --- a/gestion_salle/templates/gestion_salle/parts/modalListeValidation.html +++ /dev/null @@ -1,16 +0,0 @@ - - \ No newline at end of file diff --git a/gestion_salle/tests.py b/gestion_salle/tests.py deleted file mode 100644 index de8bdc0..0000000 --- a/gestion_salle/tests.py +++ /dev/null @@ -1,3 +0,0 @@ -from django.test import TestCase - -# Create your tests here. diff --git a/gestion_salle/urls.py b/gestion_salle/urls.py deleted file mode 100644 index d13ee3e..0000000 --- a/gestion_salle/urls.py +++ /dev/null @@ -1,48 +0,0 @@ -from django.urls import path -from . import views - -app_name = "gestion_salle" - -urlpatterns = [ - path( - 'revervation/', - views.index, - name='reservation-salle' - ), - path( - 'revervation/details/', - views.detail_reservation, - name='detail-reservation' - ), - - path( - 'reservation/annuler', - views.annuler_reservation, - name='annuler-reservation' - ), - path( - 'reservation/valider', - views.valider_reservation, - name='valider-reservation' - ), - path( - 'reservation/refuser', - views.refuser_reservation, - name='refuser-reservation' - ), - path( - 'reservation/ajout-de-lien-zoom', - views.ajouter_lien_zoom, - name='ajouter-lien_zoom' - ), - path( - 'liste-reservation', - views.liste_reservation, - name='liste-reservation' - ), - path( - 'liste-reservation-attente', - views.liste_reservation_attente, - name="liste-reservation-attente" - ) -] \ No newline at end of file diff --git a/manage.py b/manage.py deleted file mode 100644 index 98b1355..0000000 --- a/manage.py +++ /dev/null @@ -1,22 +0,0 @@ -#!/usr/bin/env python -"""Django's command-line utility for administrative tasks.""" -import os -import sys - - -def main(): - """Run administrative tasks.""" - os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'SIRH.settings') - try: - from django.core.management import execute_from_command_line - except ImportError as exc: - raise ImportError( - "Couldn't import Django. Are you sure it's installed and " - "available on your PYTHONPATH environment variable? Did you " - "forget to activate a virtual environment?" - ) from exc - execute_from_command_line(sys.argv) - - -if __name__ == '__main__': - main() diff --git a/static/css/bootstrap.min.css b/static/css/bootstrap.min.css deleted file mode 100644 index 955575a..0000000 --- a/static/css/bootstrap.min.css +++ /dev/null @@ -1,6 +0,0 @@ -@charset "UTF-8";/*! - * Bootstrap v5.3.7 (https://getbootstrap.com/) - * Copyright 2011-2025 The Bootstrap Authors - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) - */:root,[data-bs-theme=light]{--bs-blue:#0d6efd;--bs-indigo:#6610f2;--bs-purple:#6f42c1;--bs-pink:#d63384;--bs-red:#dc3545;--bs-orange:#fd7e14;--bs-yellow:#ffc107;--bs-green:#198754;--bs-teal:#20c997;--bs-cyan:#0dcaf0;--bs-black:#000;--bs-white:#fff;--bs-gray:#6c757d;--bs-gray-dark:#343a40;--bs-gray-100:#f8f9fa;--bs-gray-200:#e9ecef;--bs-gray-300:#dee2e6;--bs-gray-400:#ced4da;--bs-gray-500:#adb5bd;--bs-gray-600:#6c757d;--bs-gray-700:#495057;--bs-gray-800:#343a40;--bs-gray-900:#212529;--bs-primary:#0d6efd;--bs-secondary:#6c757d;--bs-success:#198754;--bs-info:#0dcaf0;--bs-warning:#ffc107;--bs-danger:#dc3545;--bs-light:#f8f9fa;--bs-dark:#212529;--bs-primary-rgb:13,110,253;--bs-secondary-rgb:108,117,125;--bs-success-rgb:25,135,84;--bs-info-rgb:13,202,240;--bs-warning-rgb:255,193,7;--bs-danger-rgb:220,53,69;--bs-light-rgb:248,249,250;--bs-dark-rgb:33,37,41;--bs-primary-text-emphasis:#052c65;--bs-secondary-text-emphasis:#2b2f32;--bs-success-text-emphasis:#0a3622;--bs-info-text-emphasis:#055160;--bs-warning-text-emphasis:#664d03;--bs-danger-text-emphasis:#58151c;--bs-light-text-emphasis:#495057;--bs-dark-text-emphasis:#495057;--bs-primary-bg-subtle:#cfe2ff;--bs-secondary-bg-subtle:#e2e3e5;--bs-success-bg-subtle:#d1e7dd;--bs-info-bg-subtle:#cff4fc;--bs-warning-bg-subtle:#fff3cd;--bs-danger-bg-subtle:#f8d7da;--bs-light-bg-subtle:#fcfcfd;--bs-dark-bg-subtle:#ced4da;--bs-primary-border-subtle:#9ec5fe;--bs-secondary-border-subtle:#c4c8cb;--bs-success-border-subtle:#a3cfbb;--bs-info-border-subtle:#9eeaf9;--bs-warning-border-subtle:#ffe69c;--bs-danger-border-subtle:#f1aeb5;--bs-light-border-subtle:#e9ecef;--bs-dark-border-subtle:#adb5bd;--bs-white-rgb:255,255,255;--bs-black-rgb:0,0,0;--bs-font-sans-serif:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue","Noto Sans","Liberation Sans",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--bs-font-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--bs-gradient:linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));--bs-body-font-family:var(--bs-font-sans-serif);--bs-body-font-size:1rem;--bs-body-font-weight:400;--bs-body-line-height:1.5;--bs-body-color:#212529;--bs-body-color-rgb:33,37,41;--bs-body-bg:#fff;--bs-body-bg-rgb:255,255,255;--bs-emphasis-color:#000;--bs-emphasis-color-rgb:0,0,0;--bs-secondary-color:rgba(33, 37, 41, 0.75);--bs-secondary-color-rgb:33,37,41;--bs-secondary-bg:#e9ecef;--bs-secondary-bg-rgb:233,236,239;--bs-tertiary-color:rgba(33, 37, 41, 0.5);--bs-tertiary-color-rgb:33,37,41;--bs-tertiary-bg:#f8f9fa;--bs-tertiary-bg-rgb:248,249,250;--bs-heading-color:inherit;--bs-link-color:#0d6efd;--bs-link-color-rgb:13,110,253;--bs-link-decoration:underline;--bs-link-hover-color:#0a58ca;--bs-link-hover-color-rgb:10,88,202;--bs-code-color:#d63384;--bs-highlight-color:#212529;--bs-highlight-bg:#fff3cd;--bs-border-width:1px;--bs-border-style:solid;--bs-border-color:#dee2e6;--bs-border-color-translucent:rgba(0, 0, 0, 0.175);--bs-border-radius:0.375rem;--bs-border-radius-sm:0.25rem;--bs-border-radius-lg:0.5rem;--bs-border-radius-xl:1rem;--bs-border-radius-xxl:2rem;--bs-border-radius-2xl:var(--bs-border-radius-xxl);--bs-border-radius-pill:50rem;--bs-box-shadow:0 0.5rem 1rem rgba(0, 0, 0, 0.15);--bs-box-shadow-sm:0 0.125rem 0.25rem rgba(0, 0, 0, 0.075);--bs-box-shadow-lg:0 1rem 3rem rgba(0, 0, 0, 0.175);--bs-box-shadow-inset:inset 0 1px 2px rgba(0, 0, 0, 0.075);--bs-focus-ring-width:0.25rem;--bs-focus-ring-opacity:0.25;--bs-focus-ring-color:rgba(13, 110, 253, 0.25);--bs-form-valid-color:#198754;--bs-form-valid-border-color:#198754;--bs-form-invalid-color:#dc3545;--bs-form-invalid-border-color:#dc3545}[data-bs-theme=dark]{color-scheme:dark;--bs-body-color:#dee2e6;--bs-body-color-rgb:222,226,230;--bs-body-bg:#212529;--bs-body-bg-rgb:33,37,41;--bs-emphasis-color:#fff;--bs-emphasis-color-rgb:255,255,255;--bs-secondary-color:rgba(222, 226, 230, 0.75);--bs-secondary-color-rgb:222,226,230;--bs-secondary-bg:#343a40;--bs-secondary-bg-rgb:52,58,64;--bs-tertiary-color:rgba(222, 226, 230, 0.5);--bs-tertiary-color-rgb:222,226,230;--bs-tertiary-bg:#2b3035;--bs-tertiary-bg-rgb:43,48,53;--bs-primary-text-emphasis:#6ea8fe;--bs-secondary-text-emphasis:#a7acb1;--bs-success-text-emphasis:#75b798;--bs-info-text-emphasis:#6edff6;--bs-warning-text-emphasis:#ffda6a;--bs-danger-text-emphasis:#ea868f;--bs-light-text-emphasis:#f8f9fa;--bs-dark-text-emphasis:#dee2e6;--bs-primary-bg-subtle:#031633;--bs-secondary-bg-subtle:#161719;--bs-success-bg-subtle:#051b11;--bs-info-bg-subtle:#032830;--bs-warning-bg-subtle:#332701;--bs-danger-bg-subtle:#2c0b0e;--bs-light-bg-subtle:#343a40;--bs-dark-bg-subtle:#1a1d20;--bs-primary-border-subtle:#084298;--bs-secondary-border-subtle:#41464b;--bs-success-border-subtle:#0f5132;--bs-info-border-subtle:#087990;--bs-warning-border-subtle:#997404;--bs-danger-border-subtle:#842029;--bs-light-border-subtle:#495057;--bs-dark-border-subtle:#343a40;--bs-heading-color:inherit;--bs-link-color:#6ea8fe;--bs-link-hover-color:#8bb9fe;--bs-link-color-rgb:110,168,254;--bs-link-hover-color-rgb:139,185,254;--bs-code-color:#e685b5;--bs-highlight-color:#dee2e6;--bs-highlight-bg:#664d03;--bs-border-color:#495057;--bs-border-color-translucent:rgba(255, 255, 255, 0.15);--bs-form-valid-color:#75b798;--bs-form-valid-border-color:#75b798;--bs-form-invalid-color:#ea868f;--bs-form-invalid-border-color:#ea868f}*,::after,::before{box-sizing:border-box}@media (prefers-reduced-motion:no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:var(--bs-body-font-family);font-size:var(--bs-body-font-size);font-weight:var(--bs-body-font-weight);line-height:var(--bs-body-line-height);color:var(--bs-body-color);text-align:var(--bs-body-text-align);background-color:var(--bs-body-bg);-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}hr{margin:1rem 0;color:inherit;border:0;border-top:var(--bs-border-width) solid;opacity:.25}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2;color:var(--bs-heading-color)}.h1,h1{font-size:calc(1.375rem + 1.5vw)}@media (min-width:1200px){.h1,h1{font-size:2.5rem}}.h2,h2{font-size:calc(1.325rem + .9vw)}@media (min-width:1200px){.h2,h2{font-size:2rem}}.h3,h3{font-size:calc(1.3rem + .6vw)}@media (min-width:1200px){.h3,h3{font-size:1.75rem}}.h4,h4{font-size:calc(1.275rem + .3vw)}@media (min-width:1200px){.h4,h4{font-size:1.5rem}}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}.small,small{font-size:.875em}.mark,mark{padding:.1875em;color:var(--bs-highlight-color);background-color:var(--bs-highlight-bg)}sub,sup{position:relative;font-size:.75em;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:rgba(var(--bs-link-color-rgb),var(--bs-link-opacity,1));text-decoration:underline}a:hover{--bs-link-color-rgb:var(--bs-link-hover-color-rgb)}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:var(--bs-font-monospace);font-size:1em}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:.875em;color:var(--bs-code-color);word-wrap:break-word}a>code{color:inherit}kbd{padding:.1875rem .375rem;font-size:.875em;color:var(--bs-body-bg);background-color:var(--bs-body-color);border-radius:.25rem}kbd kbd{padding:0;font-size:1em}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:var(--bs-secondary-color);text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}tbody,td,tfoot,th,thead,tr{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]:not([type=date]):not([type=datetime-local]):not([type=month]):not([type=week]):not([type=time])::-webkit-calendar-picker-indicator{display:none!important}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:left;width:100%;padding:0;margin-bottom:.5rem;line-height:inherit;font-size:calc(1.275rem + .3vw)}@media (min-width:1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-text,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}::file-selector-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none!important}.lead{font-size:1.25rem;font-weight:300}.display-1{font-weight:300;line-height:1.2;font-size:calc(1.625rem + 4.5vw)}@media (min-width:1200px){.display-1{font-size:5rem}}.display-2{font-weight:300;line-height:1.2;font-size:calc(1.575rem + 3.9vw)}@media (min-width:1200px){.display-2{font-size:4.5rem}}.display-3{font-weight:300;line-height:1.2;font-size:calc(1.525rem + 3.3vw)}@media (min-width:1200px){.display-3{font-size:4rem}}.display-4{font-weight:300;line-height:1.2;font-size:calc(1.475rem + 2.7vw)}@media (min-width:1200px){.display-4{font-size:3.5rem}}.display-5{font-weight:300;line-height:1.2;font-size:calc(1.425rem + 2.1vw)}@media (min-width:1200px){.display-5{font-size:3rem}}.display-6{font-weight:300;line-height:1.2;font-size:calc(1.375rem + 1.5vw)}@media (min-width:1200px){.display-6{font-size:2.5rem}}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:.875em;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote>:last-child{margin-bottom:0}.blockquote-footer{margin-top:-1rem;margin-bottom:1rem;font-size:.875em;color:#6c757d}.blockquote-footer::before{content:"— "}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:var(--bs-body-bg);border:var(--bs-border-width) solid var(--bs-border-color);border-radius:var(--bs-border-radius);max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:.875em;color:var(--bs-secondary-color)}.container,.container-fluid,.container-lg,.container-md,.container-sm,.container-xl,.container-xxl{--bs-gutter-x:1.5rem;--bs-gutter-y:0;width:100%;padding-right:calc(var(--bs-gutter-x) * .5);padding-left:calc(var(--bs-gutter-x) * .5);margin-right:auto;margin-left:auto}@media (min-width:576px){.container,.container-sm{max-width:540px}}@media (min-width:768px){.container,.container-md,.container-sm{max-width:720px}}@media (min-width:992px){.container,.container-lg,.container-md,.container-sm{max-width:960px}}@media (min-width:1200px){.container,.container-lg,.container-md,.container-sm,.container-xl{max-width:1140px}}@media (min-width:1400px){.container,.container-lg,.container-md,.container-sm,.container-xl,.container-xxl{max-width:1320px}}:root{--bs-breakpoint-xs:0;--bs-breakpoint-sm:576px;--bs-breakpoint-md:768px;--bs-breakpoint-lg:992px;--bs-breakpoint-xl:1200px;--bs-breakpoint-xxl:1400px}.row{--bs-gutter-x:1.5rem;--bs-gutter-y:0;display:flex;flex-wrap:wrap;margin-top:calc(-1 * var(--bs-gutter-y));margin-right:calc(-.5 * var(--bs-gutter-x));margin-left:calc(-.5 * var(--bs-gutter-x))}.row>*{flex-shrink:0;width:100%;max-width:100%;padding-right:calc(var(--bs-gutter-x) * .5);padding-left:calc(var(--bs-gutter-x) * .5);margin-top:var(--bs-gutter-y)}.col{flex:1 0 0}.row-cols-auto>*{flex:0 0 auto;width:auto}.row-cols-1>*{flex:0 0 auto;width:100%}.row-cols-2>*{flex:0 0 auto;width:50%}.row-cols-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-4>*{flex:0 0 auto;width:25%}.row-cols-5>*{flex:0 0 auto;width:20%}.row-cols-6>*{flex:0 0 auto;width:16.66666667%}.col-auto{flex:0 0 auto;width:auto}.col-1{flex:0 0 auto;width:8.33333333%}.col-2{flex:0 0 auto;width:16.66666667%}.col-3{flex:0 0 auto;width:25%}.col-4{flex:0 0 auto;width:33.33333333%}.col-5{flex:0 0 auto;width:41.66666667%}.col-6{flex:0 0 auto;width:50%}.col-7{flex:0 0 auto;width:58.33333333%}.col-8{flex:0 0 auto;width:66.66666667%}.col-9{flex:0 0 auto;width:75%}.col-10{flex:0 0 auto;width:83.33333333%}.col-11{flex:0 0 auto;width:91.66666667%}.col-12{flex:0 0 auto;width:100%}.offset-1{margin-left:8.33333333%}.offset-2{margin-left:16.66666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.33333333%}.offset-5{margin-left:41.66666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.33333333%}.offset-8{margin-left:66.66666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.33333333%}.offset-11{margin-left:91.66666667%}.g-0,.gx-0{--bs-gutter-x:0}.g-0,.gy-0{--bs-gutter-y:0}.g-1,.gx-1{--bs-gutter-x:0.25rem}.g-1,.gy-1{--bs-gutter-y:0.25rem}.g-2,.gx-2{--bs-gutter-x:0.5rem}.g-2,.gy-2{--bs-gutter-y:0.5rem}.g-3,.gx-3{--bs-gutter-x:1rem}.g-3,.gy-3{--bs-gutter-y:1rem}.g-4,.gx-4{--bs-gutter-x:1.5rem}.g-4,.gy-4{--bs-gutter-y:1.5rem}.g-5,.gx-5{--bs-gutter-x:3rem}.g-5,.gy-5{--bs-gutter-y:3rem}@media (min-width:576px){.col-sm{flex:1 0 0}.row-cols-sm-auto>*{flex:0 0 auto;width:auto}.row-cols-sm-1>*{flex:0 0 auto;width:100%}.row-cols-sm-2>*{flex:0 0 auto;width:50%}.row-cols-sm-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-sm-4>*{flex:0 0 auto;width:25%}.row-cols-sm-5>*{flex:0 0 auto;width:20%}.row-cols-sm-6>*{flex:0 0 auto;width:16.66666667%}.col-sm-auto{flex:0 0 auto;width:auto}.col-sm-1{flex:0 0 auto;width:8.33333333%}.col-sm-2{flex:0 0 auto;width:16.66666667%}.col-sm-3{flex:0 0 auto;width:25%}.col-sm-4{flex:0 0 auto;width:33.33333333%}.col-sm-5{flex:0 0 auto;width:41.66666667%}.col-sm-6{flex:0 0 auto;width:50%}.col-sm-7{flex:0 0 auto;width:58.33333333%}.col-sm-8{flex:0 0 auto;width:66.66666667%}.col-sm-9{flex:0 0 auto;width:75%}.col-sm-10{flex:0 0 auto;width:83.33333333%}.col-sm-11{flex:0 0 auto;width:91.66666667%}.col-sm-12{flex:0 0 auto;width:100%}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.33333333%}.offset-sm-2{margin-left:16.66666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.33333333%}.offset-sm-5{margin-left:41.66666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.33333333%}.offset-sm-8{margin-left:66.66666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.33333333%}.offset-sm-11{margin-left:91.66666667%}.g-sm-0,.gx-sm-0{--bs-gutter-x:0}.g-sm-0,.gy-sm-0{--bs-gutter-y:0}.g-sm-1,.gx-sm-1{--bs-gutter-x:0.25rem}.g-sm-1,.gy-sm-1{--bs-gutter-y:0.25rem}.g-sm-2,.gx-sm-2{--bs-gutter-x:0.5rem}.g-sm-2,.gy-sm-2{--bs-gutter-y:0.5rem}.g-sm-3,.gx-sm-3{--bs-gutter-x:1rem}.g-sm-3,.gy-sm-3{--bs-gutter-y:1rem}.g-sm-4,.gx-sm-4{--bs-gutter-x:1.5rem}.g-sm-4,.gy-sm-4{--bs-gutter-y:1.5rem}.g-sm-5,.gx-sm-5{--bs-gutter-x:3rem}.g-sm-5,.gy-sm-5{--bs-gutter-y:3rem}}@media (min-width:768px){.col-md{flex:1 0 0}.row-cols-md-auto>*{flex:0 0 auto;width:auto}.row-cols-md-1>*{flex:0 0 auto;width:100%}.row-cols-md-2>*{flex:0 0 auto;width:50%}.row-cols-md-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-md-4>*{flex:0 0 auto;width:25%}.row-cols-md-5>*{flex:0 0 auto;width:20%}.row-cols-md-6>*{flex:0 0 auto;width:16.66666667%}.col-md-auto{flex:0 0 auto;width:auto}.col-md-1{flex:0 0 auto;width:8.33333333%}.col-md-2{flex:0 0 auto;width:16.66666667%}.col-md-3{flex:0 0 auto;width:25%}.col-md-4{flex:0 0 auto;width:33.33333333%}.col-md-5{flex:0 0 auto;width:41.66666667%}.col-md-6{flex:0 0 auto;width:50%}.col-md-7{flex:0 0 auto;width:58.33333333%}.col-md-8{flex:0 0 auto;width:66.66666667%}.col-md-9{flex:0 0 auto;width:75%}.col-md-10{flex:0 0 auto;width:83.33333333%}.col-md-11{flex:0 0 auto;width:91.66666667%}.col-md-12{flex:0 0 auto;width:100%}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.33333333%}.offset-md-2{margin-left:16.66666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.33333333%}.offset-md-5{margin-left:41.66666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.33333333%}.offset-md-8{margin-left:66.66666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.33333333%}.offset-md-11{margin-left:91.66666667%}.g-md-0,.gx-md-0{--bs-gutter-x:0}.g-md-0,.gy-md-0{--bs-gutter-y:0}.g-md-1,.gx-md-1{--bs-gutter-x:0.25rem}.g-md-1,.gy-md-1{--bs-gutter-y:0.25rem}.g-md-2,.gx-md-2{--bs-gutter-x:0.5rem}.g-md-2,.gy-md-2{--bs-gutter-y:0.5rem}.g-md-3,.gx-md-3{--bs-gutter-x:1rem}.g-md-3,.gy-md-3{--bs-gutter-y:1rem}.g-md-4,.gx-md-4{--bs-gutter-x:1.5rem}.g-md-4,.gy-md-4{--bs-gutter-y:1.5rem}.g-md-5,.gx-md-5{--bs-gutter-x:3rem}.g-md-5,.gy-md-5{--bs-gutter-y:3rem}}@media (min-width:992px){.col-lg{flex:1 0 0}.row-cols-lg-auto>*{flex:0 0 auto;width:auto}.row-cols-lg-1>*{flex:0 0 auto;width:100%}.row-cols-lg-2>*{flex:0 0 auto;width:50%}.row-cols-lg-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-lg-4>*{flex:0 0 auto;width:25%}.row-cols-lg-5>*{flex:0 0 auto;width:20%}.row-cols-lg-6>*{flex:0 0 auto;width:16.66666667%}.col-lg-auto{flex:0 0 auto;width:auto}.col-lg-1{flex:0 0 auto;width:8.33333333%}.col-lg-2{flex:0 0 auto;width:16.66666667%}.col-lg-3{flex:0 0 auto;width:25%}.col-lg-4{flex:0 0 auto;width:33.33333333%}.col-lg-5{flex:0 0 auto;width:41.66666667%}.col-lg-6{flex:0 0 auto;width:50%}.col-lg-7{flex:0 0 auto;width:58.33333333%}.col-lg-8{flex:0 0 auto;width:66.66666667%}.col-lg-9{flex:0 0 auto;width:75%}.col-lg-10{flex:0 0 auto;width:83.33333333%}.col-lg-11{flex:0 0 auto;width:91.66666667%}.col-lg-12{flex:0 0 auto;width:100%}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.33333333%}.offset-lg-2{margin-left:16.66666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.33333333%}.offset-lg-5{margin-left:41.66666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.33333333%}.offset-lg-8{margin-left:66.66666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.33333333%}.offset-lg-11{margin-left:91.66666667%}.g-lg-0,.gx-lg-0{--bs-gutter-x:0}.g-lg-0,.gy-lg-0{--bs-gutter-y:0}.g-lg-1,.gx-lg-1{--bs-gutter-x:0.25rem}.g-lg-1,.gy-lg-1{--bs-gutter-y:0.25rem}.g-lg-2,.gx-lg-2{--bs-gutter-x:0.5rem}.g-lg-2,.gy-lg-2{--bs-gutter-y:0.5rem}.g-lg-3,.gx-lg-3{--bs-gutter-x:1rem}.g-lg-3,.gy-lg-3{--bs-gutter-y:1rem}.g-lg-4,.gx-lg-4{--bs-gutter-x:1.5rem}.g-lg-4,.gy-lg-4{--bs-gutter-y:1.5rem}.g-lg-5,.gx-lg-5{--bs-gutter-x:3rem}.g-lg-5,.gy-lg-5{--bs-gutter-y:3rem}}@media (min-width:1200px){.col-xl{flex:1 0 0}.row-cols-xl-auto>*{flex:0 0 auto;width:auto}.row-cols-xl-1>*{flex:0 0 auto;width:100%}.row-cols-xl-2>*{flex:0 0 auto;width:50%}.row-cols-xl-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-xl-4>*{flex:0 0 auto;width:25%}.row-cols-xl-5>*{flex:0 0 auto;width:20%}.row-cols-xl-6>*{flex:0 0 auto;width:16.66666667%}.col-xl-auto{flex:0 0 auto;width:auto}.col-xl-1{flex:0 0 auto;width:8.33333333%}.col-xl-2{flex:0 0 auto;width:16.66666667%}.col-xl-3{flex:0 0 auto;width:25%}.col-xl-4{flex:0 0 auto;width:33.33333333%}.col-xl-5{flex:0 0 auto;width:41.66666667%}.col-xl-6{flex:0 0 auto;width:50%}.col-xl-7{flex:0 0 auto;width:58.33333333%}.col-xl-8{flex:0 0 auto;width:66.66666667%}.col-xl-9{flex:0 0 auto;width:75%}.col-xl-10{flex:0 0 auto;width:83.33333333%}.col-xl-11{flex:0 0 auto;width:91.66666667%}.col-xl-12{flex:0 0 auto;width:100%}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.33333333%}.offset-xl-2{margin-left:16.66666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.33333333%}.offset-xl-5{margin-left:41.66666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.33333333%}.offset-xl-8{margin-left:66.66666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.33333333%}.offset-xl-11{margin-left:91.66666667%}.g-xl-0,.gx-xl-0{--bs-gutter-x:0}.g-xl-0,.gy-xl-0{--bs-gutter-y:0}.g-xl-1,.gx-xl-1{--bs-gutter-x:0.25rem}.g-xl-1,.gy-xl-1{--bs-gutter-y:0.25rem}.g-xl-2,.gx-xl-2{--bs-gutter-x:0.5rem}.g-xl-2,.gy-xl-2{--bs-gutter-y:0.5rem}.g-xl-3,.gx-xl-3{--bs-gutter-x:1rem}.g-xl-3,.gy-xl-3{--bs-gutter-y:1rem}.g-xl-4,.gx-xl-4{--bs-gutter-x:1.5rem}.g-xl-4,.gy-xl-4{--bs-gutter-y:1.5rem}.g-xl-5,.gx-xl-5{--bs-gutter-x:3rem}.g-xl-5,.gy-xl-5{--bs-gutter-y:3rem}}@media (min-width:1400px){.col-xxl{flex:1 0 0}.row-cols-xxl-auto>*{flex:0 0 auto;width:auto}.row-cols-xxl-1>*{flex:0 0 auto;width:100%}.row-cols-xxl-2>*{flex:0 0 auto;width:50%}.row-cols-xxl-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-xxl-4>*{flex:0 0 auto;width:25%}.row-cols-xxl-5>*{flex:0 0 auto;width:20%}.row-cols-xxl-6>*{flex:0 0 auto;width:16.66666667%}.col-xxl-auto{flex:0 0 auto;width:auto}.col-xxl-1{flex:0 0 auto;width:8.33333333%}.col-xxl-2{flex:0 0 auto;width:16.66666667%}.col-xxl-3{flex:0 0 auto;width:25%}.col-xxl-4{flex:0 0 auto;width:33.33333333%}.col-xxl-5{flex:0 0 auto;width:41.66666667%}.col-xxl-6{flex:0 0 auto;width:50%}.col-xxl-7{flex:0 0 auto;width:58.33333333%}.col-xxl-8{flex:0 0 auto;width:66.66666667%}.col-xxl-9{flex:0 0 auto;width:75%}.col-xxl-10{flex:0 0 auto;width:83.33333333%}.col-xxl-11{flex:0 0 auto;width:91.66666667%}.col-xxl-12{flex:0 0 auto;width:100%}.offset-xxl-0{margin-left:0}.offset-xxl-1{margin-left:8.33333333%}.offset-xxl-2{margin-left:16.66666667%}.offset-xxl-3{margin-left:25%}.offset-xxl-4{margin-left:33.33333333%}.offset-xxl-5{margin-left:41.66666667%}.offset-xxl-6{margin-left:50%}.offset-xxl-7{margin-left:58.33333333%}.offset-xxl-8{margin-left:66.66666667%}.offset-xxl-9{margin-left:75%}.offset-xxl-10{margin-left:83.33333333%}.offset-xxl-11{margin-left:91.66666667%}.g-xxl-0,.gx-xxl-0{--bs-gutter-x:0}.g-xxl-0,.gy-xxl-0{--bs-gutter-y:0}.g-xxl-1,.gx-xxl-1{--bs-gutter-x:0.25rem}.g-xxl-1,.gy-xxl-1{--bs-gutter-y:0.25rem}.g-xxl-2,.gx-xxl-2{--bs-gutter-x:0.5rem}.g-xxl-2,.gy-xxl-2{--bs-gutter-y:0.5rem}.g-xxl-3,.gx-xxl-3{--bs-gutter-x:1rem}.g-xxl-3,.gy-xxl-3{--bs-gutter-y:1rem}.g-xxl-4,.gx-xxl-4{--bs-gutter-x:1.5rem}.g-xxl-4,.gy-xxl-4{--bs-gutter-y:1.5rem}.g-xxl-5,.gx-xxl-5{--bs-gutter-x:3rem}.g-xxl-5,.gy-xxl-5{--bs-gutter-y:3rem}}.table{--bs-table-color-type:initial;--bs-table-bg-type:initial;--bs-table-color-state:initial;--bs-table-bg-state:initial;--bs-table-color:var(--bs-emphasis-color);--bs-table-bg:var(--bs-body-bg);--bs-table-border-color:var(--bs-border-color);--bs-table-accent-bg:transparent;--bs-table-striped-color:var(--bs-emphasis-color);--bs-table-striped-bg:rgba(var(--bs-emphasis-color-rgb), 0.05);--bs-table-active-color:var(--bs-emphasis-color);--bs-table-active-bg:rgba(var(--bs-emphasis-color-rgb), 0.1);--bs-table-hover-color:var(--bs-emphasis-color);--bs-table-hover-bg:rgba(var(--bs-emphasis-color-rgb), 0.075);width:100%;margin-bottom:1rem;vertical-align:top;border-color:var(--bs-table-border-color)}.table>:not(caption)>*>*{padding:.5rem .5rem;color:var(--bs-table-color-state,var(--bs-table-color-type,var(--bs-table-color)));background-color:var(--bs-table-bg);border-bottom-width:var(--bs-border-width);box-shadow:inset 0 0 0 9999px var(--bs-table-bg-state,var(--bs-table-bg-type,var(--bs-table-accent-bg)))}.table>tbody{vertical-align:inherit}.table>thead{vertical-align:bottom}.table-group-divider{border-top:calc(var(--bs-border-width) * 2) solid currentcolor}.caption-top{caption-side:top}.table-sm>:not(caption)>*>*{padding:.25rem .25rem}.table-bordered>:not(caption)>*{border-width:var(--bs-border-width) 0}.table-bordered>:not(caption)>*>*{border-width:0 var(--bs-border-width)}.table-borderless>:not(caption)>*>*{border-bottom-width:0}.table-borderless>:not(:first-child){border-top-width:0}.table-striped>tbody>tr:nth-of-type(odd)>*{--bs-table-color-type:var(--bs-table-striped-color);--bs-table-bg-type:var(--bs-table-striped-bg)}.table-striped-columns>:not(caption)>tr>:nth-child(2n){--bs-table-color-type:var(--bs-table-striped-color);--bs-table-bg-type:var(--bs-table-striped-bg)}.table-active{--bs-table-color-state:var(--bs-table-active-color);--bs-table-bg-state:var(--bs-table-active-bg)}.table-hover>tbody>tr:hover>*{--bs-table-color-state:var(--bs-table-hover-color);--bs-table-bg-state:var(--bs-table-hover-bg)}.table-primary{--bs-table-color:#000;--bs-table-bg:#cfe2ff;--bs-table-border-color:#a6b5cc;--bs-table-striped-bg:#c5d7f2;--bs-table-striped-color:#000;--bs-table-active-bg:#bacbe6;--bs-table-active-color:#000;--bs-table-hover-bg:#bfd1ec;--bs-table-hover-color:#000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-secondary{--bs-table-color:#000;--bs-table-bg:#e2e3e5;--bs-table-border-color:#b5b6b7;--bs-table-striped-bg:#d7d8da;--bs-table-striped-color:#000;--bs-table-active-bg:#cbccce;--bs-table-active-color:#000;--bs-table-hover-bg:#d1d2d4;--bs-table-hover-color:#000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-success{--bs-table-color:#000;--bs-table-bg:#d1e7dd;--bs-table-border-color:#a7b9b1;--bs-table-striped-bg:#c7dbd2;--bs-table-striped-color:#000;--bs-table-active-bg:#bcd0c7;--bs-table-active-color:#000;--bs-table-hover-bg:#c1d6cc;--bs-table-hover-color:#000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-info{--bs-table-color:#000;--bs-table-bg:#cff4fc;--bs-table-border-color:#a6c3ca;--bs-table-striped-bg:#c5e8ef;--bs-table-striped-color:#000;--bs-table-active-bg:#badce3;--bs-table-active-color:#000;--bs-table-hover-bg:#bfe2e9;--bs-table-hover-color:#000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-warning{--bs-table-color:#000;--bs-table-bg:#fff3cd;--bs-table-border-color:#ccc2a4;--bs-table-striped-bg:#f2e7c3;--bs-table-striped-color:#000;--bs-table-active-bg:#e6dbb9;--bs-table-active-color:#000;--bs-table-hover-bg:#ece1be;--bs-table-hover-color:#000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-danger{--bs-table-color:#000;--bs-table-bg:#f8d7da;--bs-table-border-color:#c6acae;--bs-table-striped-bg:#eccccf;--bs-table-striped-color:#000;--bs-table-active-bg:#dfc2c4;--bs-table-active-color:#000;--bs-table-hover-bg:#e5c7ca;--bs-table-hover-color:#000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-light{--bs-table-color:#000;--bs-table-bg:#f8f9fa;--bs-table-border-color:#c6c7c8;--bs-table-striped-bg:#ecedee;--bs-table-striped-color:#000;--bs-table-active-bg:#dfe0e1;--bs-table-active-color:#000;--bs-table-hover-bg:#e5e6e7;--bs-table-hover-color:#000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-dark{--bs-table-color:#fff;--bs-table-bg:#212529;--bs-table-border-color:#4d5154;--bs-table-striped-bg:#2c3034;--bs-table-striped-color:#fff;--bs-table-active-bg:#373b3e;--bs-table-active-color:#fff;--bs-table-hover-bg:#323539;--bs-table-hover-color:#fff;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-responsive{overflow-x:auto;-webkit-overflow-scrolling:touch}@media (max-width:575.98px){.table-responsive-sm{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width:767.98px){.table-responsive-md{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width:991.98px){.table-responsive-lg{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width:1199.98px){.table-responsive-xl{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width:1399.98px){.table-responsive-xxl{overflow-x:auto;-webkit-overflow-scrolling:touch}}.form-label{margin-bottom:.5rem}.col-form-label{padding-top:calc(.375rem + var(--bs-border-width));padding-bottom:calc(.375rem + var(--bs-border-width));margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + var(--bs-border-width));padding-bottom:calc(.5rem + var(--bs-border-width));font-size:1.25rem}.col-form-label-sm{padding-top:calc(.25rem + var(--bs-border-width));padding-bottom:calc(.25rem + var(--bs-border-width));font-size:.875rem}.form-text{margin-top:.25rem;font-size:.875em;color:var(--bs-secondary-color)}.form-control{display:block;width:100%;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:var(--bs-body-color);-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:var(--bs-body-bg);background-clip:padding-box;border:var(--bs-border-width) solid var(--bs-border-color);border-radius:var(--bs-border-radius);transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control{transition:none}}.form-control[type=file]{overflow:hidden}.form-control[type=file]:not(:disabled):not([readonly]){cursor:pointer}.form-control:focus{color:var(--bs-body-color);background-color:var(--bs-body-bg);border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.form-control::-webkit-date-and-time-value{min-width:85px;height:1.5em;margin:0}.form-control::-webkit-datetime-edit{display:block;padding:0}.form-control::placeholder{color:var(--bs-secondary-color);opacity:1}.form-control:disabled{background-color:var(--bs-secondary-bg);opacity:1}.form-control::-webkit-file-upload-button{padding:.375rem .75rem;margin:-.375rem -.75rem;-webkit-margin-end:.75rem;margin-inline-end:.75rem;color:var(--bs-body-color);background-color:var(--bs-tertiary-bg);pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:var(--bs-border-width);border-radius:0;-webkit-transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}.form-control::file-selector-button{padding:.375rem .75rem;margin:-.375rem -.75rem;-webkit-margin-end:.75rem;margin-inline-end:.75rem;color:var(--bs-body-color);background-color:var(--bs-tertiary-bg);pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:var(--bs-border-width);border-radius:0;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control::-webkit-file-upload-button{-webkit-transition:none;transition:none}.form-control::file-selector-button{transition:none}}.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button{background-color:var(--bs-secondary-bg)}.form-control:hover:not(:disabled):not([readonly])::file-selector-button{background-color:var(--bs-secondary-bg)}.form-control-plaintext{display:block;width:100%;padding:.375rem 0;margin-bottom:0;line-height:1.5;color:var(--bs-body-color);background-color:transparent;border:solid transparent;border-width:var(--bs-border-width) 0}.form-control-plaintext:focus{outline:0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{padding-right:0;padding-left:0}.form-control-sm{min-height:calc(1.5em + .5rem + calc(var(--bs-border-width) * 2));padding:.25rem .5rem;font-size:.875rem;border-radius:var(--bs-border-radius-sm)}.form-control-sm::-webkit-file-upload-button{padding:.25rem .5rem;margin:-.25rem -.5rem;-webkit-margin-end:.5rem;margin-inline-end:.5rem}.form-control-sm::file-selector-button{padding:.25rem .5rem;margin:-.25rem -.5rem;-webkit-margin-end:.5rem;margin-inline-end:.5rem}.form-control-lg{min-height:calc(1.5em + 1rem + calc(var(--bs-border-width) * 2));padding:.5rem 1rem;font-size:1.25rem;border-radius:var(--bs-border-radius-lg)}.form-control-lg::-webkit-file-upload-button{padding:.5rem 1rem;margin:-.5rem -1rem;-webkit-margin-end:1rem;margin-inline-end:1rem}.form-control-lg::file-selector-button{padding:.5rem 1rem;margin:-.5rem -1rem;-webkit-margin-end:1rem;margin-inline-end:1rem}textarea.form-control{min-height:calc(1.5em + .75rem + calc(var(--bs-border-width) * 2))}textarea.form-control-sm{min-height:calc(1.5em + .5rem + calc(var(--bs-border-width) * 2))}textarea.form-control-lg{min-height:calc(1.5em + 1rem + calc(var(--bs-border-width) * 2))}.form-control-color{width:3rem;height:calc(1.5em + .75rem + calc(var(--bs-border-width) * 2));padding:.375rem}.form-control-color:not(:disabled):not([readonly]){cursor:pointer}.form-control-color::-moz-color-swatch{border:0!important;border-radius:var(--bs-border-radius)}.form-control-color::-webkit-color-swatch{border:0!important;border-radius:var(--bs-border-radius)}.form-control-color.form-control-sm{height:calc(1.5em + .5rem + calc(var(--bs-border-width) * 2))}.form-control-color.form-control-lg{height:calc(1.5em + 1rem + calc(var(--bs-border-width) * 2))}.form-select{--bs-form-select-bg-img:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e");display:block;width:100%;padding:.375rem 2.25rem .375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:var(--bs-body-color);-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:var(--bs-body-bg);background-image:var(--bs-form-select-bg-img),var(--bs-form-select-bg-icon,none);background-repeat:no-repeat;background-position:right .75rem center;background-size:16px 12px;border:var(--bs-border-width) solid var(--bs-border-color);border-radius:var(--bs-border-radius);transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-select{transition:none}}.form-select:focus{border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.form-select[multiple],.form-select[size]:not([size="1"]){padding-right:.75rem;background-image:none}.form-select:disabled{background-color:var(--bs-secondary-bg)}.form-select:-moz-focusring{color:transparent;text-shadow:0 0 0 var(--bs-body-color)}.form-select-sm{padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:.875rem;border-radius:var(--bs-border-radius-sm)}.form-select-lg{padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.25rem;border-radius:var(--bs-border-radius-lg)}[data-bs-theme=dark] .form-select{--bs-form-select-bg-img:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23dee2e6' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e")}.form-check{display:block;min-height:1.5rem;padding-left:1.5em;margin-bottom:.125rem}.form-check .form-check-input{float:left;margin-left:-1.5em}.form-check-reverse{padding-right:1.5em;padding-left:0;text-align:right}.form-check-reverse .form-check-input{float:right;margin-right:-1.5em;margin-left:0}.form-check-input{--bs-form-check-bg:var(--bs-body-bg);flex-shrink:0;width:1em;height:1em;margin-top:.25em;vertical-align:top;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:var(--bs-form-check-bg);background-image:var(--bs-form-check-bg-image);background-repeat:no-repeat;background-position:center;background-size:contain;border:var(--bs-border-width) solid var(--bs-border-color);-webkit-print-color-adjust:exact;color-adjust:exact;print-color-adjust:exact}.form-check-input[type=checkbox]{border-radius:.25em}.form-check-input[type=radio]{border-radius:50%}.form-check-input:active{filter:brightness(90%)}.form-check-input:focus{border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.form-check-input:checked{background-color:#0d6efd;border-color:#0d6efd}.form-check-input:checked[type=checkbox]{--bs-form-check-bg-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/%3e%3c/svg%3e")}.form-check-input:checked[type=radio]{--bs-form-check-bg-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e")}.form-check-input[type=checkbox]:indeterminate{background-color:#0d6efd;border-color:#0d6efd;--bs-form-check-bg-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e")}.form-check-input:disabled{pointer-events:none;filter:none;opacity:.5}.form-check-input:disabled~.form-check-label,.form-check-input[disabled]~.form-check-label{cursor:default;opacity:.5}.form-switch{padding-left:2.5em}.form-switch .form-check-input{--bs-form-switch-bg:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280, 0, 0, 0.25%29'/%3e%3c/svg%3e");width:2em;margin-left:-2.5em;background-image:var(--bs-form-switch-bg);background-position:left center;border-radius:2em;transition:background-position .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-switch .form-check-input{transition:none}}.form-switch .form-check-input:focus{--bs-form-switch-bg:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%2386b7fe'/%3e%3c/svg%3e")}.form-switch .form-check-input:checked{background-position:right center;--bs-form-switch-bg:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e")}.form-switch.form-check-reverse{padding-right:2.5em;padding-left:0}.form-switch.form-check-reverse .form-check-input{margin-right:-2.5em;margin-left:0}.form-check-inline{display:inline-block;margin-right:1rem}.btn-check{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.btn-check:disabled+.btn,.btn-check[disabled]+.btn{pointer-events:none;filter:none;opacity:.65}[data-bs-theme=dark] .form-switch .form-check-input:not(:checked):not(:focus){--bs-form-switch-bg:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%28255, 255, 255, 0.25%29'/%3e%3c/svg%3e")}.form-range{width:100%;height:1.5rem;padding:0;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:transparent}.form-range:focus{outline:0}.form-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(13,110,253,.25)}.form-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(13,110,253,.25)}.form-range::-moz-focus-outer{border:0}.form-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;-webkit-appearance:none;appearance:none;background-color:#0d6efd;border:0;border-radius:1rem;-webkit-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-range::-webkit-slider-thumb{-webkit-transition:none;transition:none}}.form-range::-webkit-slider-thumb:active{background-color:#b6d4fe}.form-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:var(--bs-secondary-bg);border-color:transparent;border-radius:1rem}.form-range::-moz-range-thumb{width:1rem;height:1rem;-moz-appearance:none;appearance:none;background-color:#0d6efd;border:0;border-radius:1rem;-moz-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-range::-moz-range-thumb{-moz-transition:none;transition:none}}.form-range::-moz-range-thumb:active{background-color:#b6d4fe}.form-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:var(--bs-secondary-bg);border-color:transparent;border-radius:1rem}.form-range:disabled{pointer-events:none}.form-range:disabled::-webkit-slider-thumb{background-color:var(--bs-secondary-color)}.form-range:disabled::-moz-range-thumb{background-color:var(--bs-secondary-color)}.form-floating{position:relative}.form-floating>.form-control,.form-floating>.form-control-plaintext,.form-floating>.form-select{height:calc(3.5rem + calc(var(--bs-border-width) * 2));min-height:calc(3.5rem + calc(var(--bs-border-width) * 2));line-height:1.25}.form-floating>label{position:absolute;top:0;left:0;z-index:2;max-width:100%;height:100%;padding:1rem .75rem;overflow:hidden;color:rgba(var(--bs-body-color-rgb),.65);text-align:start;text-overflow:ellipsis;white-space:nowrap;pointer-events:none;border:var(--bs-border-width) solid transparent;transform-origin:0 0;transition:opacity .1s ease-in-out,transform .1s ease-in-out}@media (prefers-reduced-motion:reduce){.form-floating>label{transition:none}}.form-floating>.form-control,.form-floating>.form-control-plaintext{padding:1rem .75rem}.form-floating>.form-control-plaintext::placeholder,.form-floating>.form-control::placeholder{color:transparent}.form-floating>.form-control-plaintext:focus,.form-floating>.form-control-plaintext:not(:placeholder-shown),.form-floating>.form-control:focus,.form-floating>.form-control:not(:placeholder-shown){padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control-plaintext:-webkit-autofill,.form-floating>.form-control:-webkit-autofill{padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-select{padding-top:1.625rem;padding-bottom:.625rem;padding-left:.75rem}.form-floating>.form-control-plaintext~label,.form-floating>.form-control:focus~label,.form-floating>.form-control:not(:placeholder-shown)~label,.form-floating>.form-select~label{transform:scale(.85) translateY(-.5rem) translateX(.15rem)}.form-floating>.form-control:-webkit-autofill~label{transform:scale(.85) translateY(-.5rem) translateX(.15rem)}.form-floating>textarea:focus~label::after,.form-floating>textarea:not(:placeholder-shown)~label::after{position:absolute;inset:1rem 0.375rem;z-index:-1;height:1.5em;content:"";background-color:var(--bs-body-bg);border-radius:var(--bs-border-radius)}.form-floating>textarea:disabled~label::after{background-color:var(--bs-secondary-bg)}.form-floating>.form-control-plaintext~label{border-width:var(--bs-border-width) 0}.form-floating>.form-control:disabled~label,.form-floating>:disabled~label{color:#6c757d}.input-group{position:relative;display:flex;flex-wrap:wrap;align-items:stretch;width:100%}.input-group>.form-control,.input-group>.form-floating,.input-group>.form-select{position:relative;flex:1 1 auto;width:1%;min-width:0}.input-group>.form-control:focus,.input-group>.form-floating:focus-within,.input-group>.form-select:focus{z-index:5}.input-group .btn{position:relative;z-index:2}.input-group .btn:focus{z-index:5}.input-group-text{display:flex;align-items:center;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:var(--bs-body-color);text-align:center;white-space:nowrap;background-color:var(--bs-tertiary-bg);border:var(--bs-border-width) solid var(--bs-border-color);border-radius:var(--bs-border-radius)}.input-group-lg>.btn,.input-group-lg>.form-control,.input-group-lg>.form-select,.input-group-lg>.input-group-text{padding:.5rem 1rem;font-size:1.25rem;border-radius:var(--bs-border-radius-lg)}.input-group-sm>.btn,.input-group-sm>.form-control,.input-group-sm>.form-select,.input-group-sm>.input-group-text{padding:.25rem .5rem;font-size:.875rem;border-radius:var(--bs-border-radius-sm)}.input-group-lg>.form-select,.input-group-sm>.form-select{padding-right:3rem}.input-group:not(.has-validation)>.dropdown-toggle:nth-last-child(n+3),.input-group:not(.has-validation)>.form-floating:not(:last-child)>.form-control,.input-group:not(.has-validation)>.form-floating:not(:last-child)>.form-select,.input-group:not(.has-validation)>:not(:last-child):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating){border-top-right-radius:0;border-bottom-right-radius:0}.input-group.has-validation>.dropdown-toggle:nth-last-child(n+4),.input-group.has-validation>.form-floating:nth-last-child(n+3)>.form-control,.input-group.has-validation>.form-floating:nth-last-child(n+3)>.form-select,.input-group.has-validation>:nth-last-child(n+3):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>:not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback){margin-left:calc(-1 * var(--bs-border-width));border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.form-floating:not(:first-child)>.form-control,.input-group>.form-floating:not(:first-child)>.form-select{border-top-left-radius:0;border-bottom-left-radius:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:.875em;color:var(--bs-form-valid-color)}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;color:#fff;background-color:var(--bs-success);border-radius:var(--bs-border-radius)}.is-valid~.valid-feedback,.is-valid~.valid-tooltip,.was-validated :valid~.valid-feedback,.was-validated :valid~.valid-tooltip{display:block}.form-control.is-valid,.was-validated .form-control:valid{border-color:var(--bs-form-valid-border-color);padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-valid:focus,.was-validated .form-control:valid:focus{border-color:var(--bs-form-valid-border-color);box-shadow:0 0 0 .25rem rgba(var(--bs-success-rgb),.25)}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.form-select.is-valid,.was-validated .form-select:valid{border-color:var(--bs-form-valid-border-color)}.form-select.is-valid:not([multiple]):not([size]),.form-select.is-valid:not([multiple])[size="1"],.was-validated .form-select:valid:not([multiple]):not([size]),.was-validated .form-select:valid:not([multiple])[size="1"]{--bs-form-select-bg-icon:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1'/%3e%3c/svg%3e");padding-right:4.125rem;background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(.75em + .375rem) calc(.75em + .375rem)}.form-select.is-valid:focus,.was-validated .form-select:valid:focus{border-color:var(--bs-form-valid-border-color);box-shadow:0 0 0 .25rem rgba(var(--bs-success-rgb),.25)}.form-control-color.is-valid,.was-validated .form-control-color:valid{width:calc(3rem + calc(1.5em + .75rem))}.form-check-input.is-valid,.was-validated .form-check-input:valid{border-color:var(--bs-form-valid-border-color)}.form-check-input.is-valid:checked,.was-validated .form-check-input:valid:checked{background-color:var(--bs-form-valid-color)}.form-check-input.is-valid:focus,.was-validated .form-check-input:valid:focus{box-shadow:0 0 0 .25rem rgba(var(--bs-success-rgb),.25)}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:var(--bs-form-valid-color)}.form-check-inline .form-check-input~.valid-feedback{margin-left:.5em}.input-group>.form-control:not(:focus).is-valid,.input-group>.form-floating:not(:focus-within).is-valid,.input-group>.form-select:not(:focus).is-valid,.was-validated .input-group>.form-control:not(:focus):valid,.was-validated .input-group>.form-floating:not(:focus-within):valid,.was-validated .input-group>.form-select:not(:focus):valid{z-index:3}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:.875em;color:var(--bs-form-invalid-color)}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;color:#fff;background-color:var(--bs-danger);border-radius:var(--bs-border-radius)}.is-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip,.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip{display:block}.form-control.is-invalid,.was-validated .form-control:invalid{border-color:var(--bs-form-invalid-border-color);padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-invalid:focus,.was-validated .form-control:invalid:focus{border-color:var(--bs-form-invalid-border-color);box-shadow:0 0 0 .25rem rgba(var(--bs-danger-rgb),.25)}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.form-select.is-invalid,.was-validated .form-select:invalid{border-color:var(--bs-form-invalid-border-color)}.form-select.is-invalid:not([multiple]):not([size]),.form-select.is-invalid:not([multiple])[size="1"],.was-validated .form-select:invalid:not([multiple]):not([size]),.was-validated .form-select:invalid:not([multiple])[size="1"]{--bs-form-select-bg-icon:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");padding-right:4.125rem;background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(.75em + .375rem) calc(.75em + .375rem)}.form-select.is-invalid:focus,.was-validated .form-select:invalid:focus{border-color:var(--bs-form-invalid-border-color);box-shadow:0 0 0 .25rem rgba(var(--bs-danger-rgb),.25)}.form-control-color.is-invalid,.was-validated .form-control-color:invalid{width:calc(3rem + calc(1.5em + .75rem))}.form-check-input.is-invalid,.was-validated .form-check-input:invalid{border-color:var(--bs-form-invalid-border-color)}.form-check-input.is-invalid:checked,.was-validated .form-check-input:invalid:checked{background-color:var(--bs-form-invalid-color)}.form-check-input.is-invalid:focus,.was-validated .form-check-input:invalid:focus{box-shadow:0 0 0 .25rem rgba(var(--bs-danger-rgb),.25)}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:var(--bs-form-invalid-color)}.form-check-inline .form-check-input~.invalid-feedback{margin-left:.5em}.input-group>.form-control:not(:focus).is-invalid,.input-group>.form-floating:not(:focus-within).is-invalid,.input-group>.form-select:not(:focus).is-invalid,.was-validated .input-group>.form-control:not(:focus):invalid,.was-validated .input-group>.form-floating:not(:focus-within):invalid,.was-validated .input-group>.form-select:not(:focus):invalid{z-index:4}.btn{--bs-btn-padding-x:0.75rem;--bs-btn-padding-y:0.375rem;--bs-btn-font-family: ;--bs-btn-font-size:1rem;--bs-btn-font-weight:400;--bs-btn-line-height:1.5;--bs-btn-color:var(--bs-body-color);--bs-btn-bg:transparent;--bs-btn-border-width:var(--bs-border-width);--bs-btn-border-color:transparent;--bs-btn-border-radius:var(--bs-border-radius);--bs-btn-hover-border-color:transparent;--bs-btn-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.15),0 1px 1px rgba(0, 0, 0, 0.075);--bs-btn-disabled-opacity:0.65;--bs-btn-focus-box-shadow:0 0 0 0.25rem rgba(var(--bs-btn-focus-shadow-rgb), .5);display:inline-block;padding:var(--bs-btn-padding-y) var(--bs-btn-padding-x);font-family:var(--bs-btn-font-family);font-size:var(--bs-btn-font-size);font-weight:var(--bs-btn-font-weight);line-height:var(--bs-btn-line-height);color:var(--bs-btn-color);text-align:center;text-decoration:none;vertical-align:middle;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;border:var(--bs-btn-border-width) solid var(--bs-btn-border-color);border-radius:var(--bs-btn-border-radius);background-color:var(--bs-btn-bg);transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.btn{transition:none}}.btn:hover{color:var(--bs-btn-hover-color);background-color:var(--bs-btn-hover-bg);border-color:var(--bs-btn-hover-border-color)}.btn-check+.btn:hover{color:var(--bs-btn-color);background-color:var(--bs-btn-bg);border-color:var(--bs-btn-border-color)}.btn:focus-visible{color:var(--bs-btn-hover-color);background-color:var(--bs-btn-hover-bg);border-color:var(--bs-btn-hover-border-color);outline:0;box-shadow:var(--bs-btn-focus-box-shadow)}.btn-check:focus-visible+.btn{border-color:var(--bs-btn-hover-border-color);outline:0;box-shadow:var(--bs-btn-focus-box-shadow)}.btn-check:checked+.btn,.btn.active,.btn.show,.btn:first-child:active,:not(.btn-check)+.btn:active{color:var(--bs-btn-active-color);background-color:var(--bs-btn-active-bg);border-color:var(--bs-btn-active-border-color)}.btn-check:checked+.btn:focus-visible,.btn.active:focus-visible,.btn.show:focus-visible,.btn:first-child:active:focus-visible,:not(.btn-check)+.btn:active:focus-visible{box-shadow:var(--bs-btn-focus-box-shadow)}.btn-check:checked:focus-visible+.btn{box-shadow:var(--bs-btn-focus-box-shadow)}.btn.disabled,.btn:disabled,fieldset:disabled .btn{color:var(--bs-btn-disabled-color);pointer-events:none;background-color:var(--bs-btn-disabled-bg);border-color:var(--bs-btn-disabled-border-color);opacity:var(--bs-btn-disabled-opacity)}.btn-primary{--bs-btn-color:#fff;--bs-btn-bg:#0d6efd;--bs-btn-border-color:#0d6efd;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#0b5ed7;--bs-btn-hover-border-color:#0a58ca;--bs-btn-focus-shadow-rgb:49,132,253;--bs-btn-active-color:#fff;--bs-btn-active-bg:#0a58ca;--bs-btn-active-border-color:#0a53be;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#fff;--bs-btn-disabled-bg:#0d6efd;--bs-btn-disabled-border-color:#0d6efd}.btn-secondary{--bs-btn-color:#fff;--bs-btn-bg:#6c757d;--bs-btn-border-color:#6c757d;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#5c636a;--bs-btn-hover-border-color:#565e64;--bs-btn-focus-shadow-rgb:130,138,145;--bs-btn-active-color:#fff;--bs-btn-active-bg:#565e64;--bs-btn-active-border-color:#51585e;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#fff;--bs-btn-disabled-bg:#6c757d;--bs-btn-disabled-border-color:#6c757d}.btn-success{--bs-btn-color:#fff;--bs-btn-bg:#198754;--bs-btn-border-color:#198754;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#157347;--bs-btn-hover-border-color:#146c43;--bs-btn-focus-shadow-rgb:60,153,110;--bs-btn-active-color:#fff;--bs-btn-active-bg:#146c43;--bs-btn-active-border-color:#13653f;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#fff;--bs-btn-disabled-bg:#198754;--bs-btn-disabled-border-color:#198754}.btn-info{--bs-btn-color:#000;--bs-btn-bg:#0dcaf0;--bs-btn-border-color:#0dcaf0;--bs-btn-hover-color:#000;--bs-btn-hover-bg:#31d2f2;--bs-btn-hover-border-color:#25cff2;--bs-btn-focus-shadow-rgb:11,172,204;--bs-btn-active-color:#000;--bs-btn-active-bg:#3dd5f3;--bs-btn-active-border-color:#25cff2;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#000;--bs-btn-disabled-bg:#0dcaf0;--bs-btn-disabled-border-color:#0dcaf0}.btn-warning{--bs-btn-color:#000;--bs-btn-bg:#ffc107;--bs-btn-border-color:#ffc107;--bs-btn-hover-color:#000;--bs-btn-hover-bg:#ffca2c;--bs-btn-hover-border-color:#ffc720;--bs-btn-focus-shadow-rgb:217,164,6;--bs-btn-active-color:#000;--bs-btn-active-bg:#ffcd39;--bs-btn-active-border-color:#ffc720;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#000;--bs-btn-disabled-bg:#ffc107;--bs-btn-disabled-border-color:#ffc107}.btn-danger{--bs-btn-color:#fff;--bs-btn-bg:#dc3545;--bs-btn-border-color:#dc3545;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#bb2d3b;--bs-btn-hover-border-color:#b02a37;--bs-btn-focus-shadow-rgb:225,83,97;--bs-btn-active-color:#fff;--bs-btn-active-bg:#b02a37;--bs-btn-active-border-color:#a52834;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#fff;--bs-btn-disabled-bg:#dc3545;--bs-btn-disabled-border-color:#dc3545}.btn-light{--bs-btn-color:#000;--bs-btn-bg:#f8f9fa;--bs-btn-border-color:#f8f9fa;--bs-btn-hover-color:#000;--bs-btn-hover-bg:#d3d4d5;--bs-btn-hover-border-color:#c6c7c8;--bs-btn-focus-shadow-rgb:211,212,213;--bs-btn-active-color:#000;--bs-btn-active-bg:#c6c7c8;--bs-btn-active-border-color:#babbbc;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#000;--bs-btn-disabled-bg:#f8f9fa;--bs-btn-disabled-border-color:#f8f9fa}.btn-dark{--bs-btn-color:#fff;--bs-btn-bg:#212529;--bs-btn-border-color:#212529;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#424649;--bs-btn-hover-border-color:#373b3e;--bs-btn-focus-shadow-rgb:66,70,73;--bs-btn-active-color:#fff;--bs-btn-active-bg:#4d5154;--bs-btn-active-border-color:#373b3e;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#fff;--bs-btn-disabled-bg:#212529;--bs-btn-disabled-border-color:#212529}.btn-outline-primary{--bs-btn-color:#0d6efd;--bs-btn-border-color:#0d6efd;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#0d6efd;--bs-btn-hover-border-color:#0d6efd;--bs-btn-focus-shadow-rgb:13,110,253;--bs-btn-active-color:#fff;--bs-btn-active-bg:#0d6efd;--bs-btn-active-border-color:#0d6efd;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#0d6efd;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#0d6efd;--bs-gradient:none}.btn-outline-secondary{--bs-btn-color:#6c757d;--bs-btn-border-color:#6c757d;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#6c757d;--bs-btn-hover-border-color:#6c757d;--bs-btn-focus-shadow-rgb:108,117,125;--bs-btn-active-color:#fff;--bs-btn-active-bg:#6c757d;--bs-btn-active-border-color:#6c757d;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#6c757d;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#6c757d;--bs-gradient:none}.btn-outline-success{--bs-btn-color:#198754;--bs-btn-border-color:#198754;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#198754;--bs-btn-hover-border-color:#198754;--bs-btn-focus-shadow-rgb:25,135,84;--bs-btn-active-color:#fff;--bs-btn-active-bg:#198754;--bs-btn-active-border-color:#198754;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#198754;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#198754;--bs-gradient:none}.btn-outline-info{--bs-btn-color:#0dcaf0;--bs-btn-border-color:#0dcaf0;--bs-btn-hover-color:#000;--bs-btn-hover-bg:#0dcaf0;--bs-btn-hover-border-color:#0dcaf0;--bs-btn-focus-shadow-rgb:13,202,240;--bs-btn-active-color:#000;--bs-btn-active-bg:#0dcaf0;--bs-btn-active-border-color:#0dcaf0;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#0dcaf0;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#0dcaf0;--bs-gradient:none}.btn-outline-warning{--bs-btn-color:#ffc107;--bs-btn-border-color:#ffc107;--bs-btn-hover-color:#000;--bs-btn-hover-bg:#ffc107;--bs-btn-hover-border-color:#ffc107;--bs-btn-focus-shadow-rgb:255,193,7;--bs-btn-active-color:#000;--bs-btn-active-bg:#ffc107;--bs-btn-active-border-color:#ffc107;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#ffc107;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#ffc107;--bs-gradient:none}.btn-outline-danger{--bs-btn-color:#dc3545;--bs-btn-border-color:#dc3545;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#dc3545;--bs-btn-hover-border-color:#dc3545;--bs-btn-focus-shadow-rgb:220,53,69;--bs-btn-active-color:#fff;--bs-btn-active-bg:#dc3545;--bs-btn-active-border-color:#dc3545;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#dc3545;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#dc3545;--bs-gradient:none}.btn-outline-light{--bs-btn-color:#f8f9fa;--bs-btn-border-color:#f8f9fa;--bs-btn-hover-color:#000;--bs-btn-hover-bg:#f8f9fa;--bs-btn-hover-border-color:#f8f9fa;--bs-btn-focus-shadow-rgb:248,249,250;--bs-btn-active-color:#000;--bs-btn-active-bg:#f8f9fa;--bs-btn-active-border-color:#f8f9fa;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#f8f9fa;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#f8f9fa;--bs-gradient:none}.btn-outline-dark{--bs-btn-color:#212529;--bs-btn-border-color:#212529;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#212529;--bs-btn-hover-border-color:#212529;--bs-btn-focus-shadow-rgb:33,37,41;--bs-btn-active-color:#fff;--bs-btn-active-bg:#212529;--bs-btn-active-border-color:#212529;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#212529;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#212529;--bs-gradient:none}.btn-link{--bs-btn-font-weight:400;--bs-btn-color:var(--bs-link-color);--bs-btn-bg:transparent;--bs-btn-border-color:transparent;--bs-btn-hover-color:var(--bs-link-hover-color);--bs-btn-hover-border-color:transparent;--bs-btn-active-color:var(--bs-link-hover-color);--bs-btn-active-border-color:transparent;--bs-btn-disabled-color:#6c757d;--bs-btn-disabled-border-color:transparent;--bs-btn-box-shadow:0 0 0 #000;--bs-btn-focus-shadow-rgb:49,132,253;text-decoration:underline}.btn-link:focus-visible{color:var(--bs-btn-color)}.btn-link:hover{color:var(--bs-btn-hover-color)}.btn-group-lg>.btn,.btn-lg{--bs-btn-padding-y:0.5rem;--bs-btn-padding-x:1rem;--bs-btn-font-size:1.25rem;--bs-btn-border-radius:var(--bs-border-radius-lg)}.btn-group-sm>.btn,.btn-sm{--bs-btn-padding-y:0.25rem;--bs-btn-padding-x:0.5rem;--bs-btn-font-size:0.875rem;--bs-btn-border-radius:var(--bs-border-radius-sm)}.fade{transition:opacity .15s linear}@media (prefers-reduced-motion:reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{height:0;overflow:hidden;transition:height .35s ease}@media (prefers-reduced-motion:reduce){.collapsing{transition:none}}.collapsing.collapse-horizontal{width:0;height:auto;transition:width .35s ease}@media (prefers-reduced-motion:reduce){.collapsing.collapse-horizontal{transition:none}}.dropdown,.dropdown-center,.dropend,.dropstart,.dropup,.dropup-center{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{--bs-dropdown-zindex:1000;--bs-dropdown-min-width:10rem;--bs-dropdown-padding-x:0;--bs-dropdown-padding-y:0.5rem;--bs-dropdown-spacer:0.125rem;--bs-dropdown-font-size:1rem;--bs-dropdown-color:var(--bs-body-color);--bs-dropdown-bg:var(--bs-body-bg);--bs-dropdown-border-color:var(--bs-border-color-translucent);--bs-dropdown-border-radius:var(--bs-border-radius);--bs-dropdown-border-width:var(--bs-border-width);--bs-dropdown-inner-border-radius:calc(var(--bs-border-radius) - var(--bs-border-width));--bs-dropdown-divider-bg:var(--bs-border-color-translucent);--bs-dropdown-divider-margin-y:0.5rem;--bs-dropdown-box-shadow:var(--bs-box-shadow);--bs-dropdown-link-color:var(--bs-body-color);--bs-dropdown-link-hover-color:var(--bs-body-color);--bs-dropdown-link-hover-bg:var(--bs-tertiary-bg);--bs-dropdown-link-active-color:#fff;--bs-dropdown-link-active-bg:#0d6efd;--bs-dropdown-link-disabled-color:var(--bs-tertiary-color);--bs-dropdown-item-padding-x:1rem;--bs-dropdown-item-padding-y:0.25rem;--bs-dropdown-header-color:#6c757d;--bs-dropdown-header-padding-x:1rem;--bs-dropdown-header-padding-y:0.5rem;position:absolute;z-index:var(--bs-dropdown-zindex);display:none;min-width:var(--bs-dropdown-min-width);padding:var(--bs-dropdown-padding-y) var(--bs-dropdown-padding-x);margin:0;font-size:var(--bs-dropdown-font-size);color:var(--bs-dropdown-color);text-align:left;list-style:none;background-color:var(--bs-dropdown-bg);background-clip:padding-box;border:var(--bs-dropdown-border-width) solid var(--bs-dropdown-border-color);border-radius:var(--bs-dropdown-border-radius)}.dropdown-menu[data-bs-popper]{top:100%;left:0;margin-top:var(--bs-dropdown-spacer)}.dropdown-menu-start{--bs-position:start}.dropdown-menu-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-end{--bs-position:end}.dropdown-menu-end[data-bs-popper]{right:0;left:auto}@media (min-width:576px){.dropdown-menu-sm-start{--bs-position:start}.dropdown-menu-sm-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-sm-end{--bs-position:end}.dropdown-menu-sm-end[data-bs-popper]{right:0;left:auto}}@media (min-width:768px){.dropdown-menu-md-start{--bs-position:start}.dropdown-menu-md-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-md-end{--bs-position:end}.dropdown-menu-md-end[data-bs-popper]{right:0;left:auto}}@media (min-width:992px){.dropdown-menu-lg-start{--bs-position:start}.dropdown-menu-lg-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-lg-end{--bs-position:end}.dropdown-menu-lg-end[data-bs-popper]{right:0;left:auto}}@media (min-width:1200px){.dropdown-menu-xl-start{--bs-position:start}.dropdown-menu-xl-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-xl-end{--bs-position:end}.dropdown-menu-xl-end[data-bs-popper]{right:0;left:auto}}@media (min-width:1400px){.dropdown-menu-xxl-start{--bs-position:start}.dropdown-menu-xxl-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-xxl-end{--bs-position:end}.dropdown-menu-xxl-end[data-bs-popper]{right:0;left:auto}}.dropup .dropdown-menu[data-bs-popper]{top:auto;bottom:100%;margin-top:0;margin-bottom:var(--bs-dropdown-spacer)}.dropup .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropend .dropdown-menu[data-bs-popper]{top:0;right:auto;left:100%;margin-top:0;margin-left:var(--bs-dropdown-spacer)}.dropend .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropend .dropdown-toggle:empty::after{margin-left:0}.dropend .dropdown-toggle::after{vertical-align:0}.dropstart .dropdown-menu[data-bs-popper]{top:0;right:100%;left:auto;margin-top:0;margin-right:var(--bs-dropdown-spacer)}.dropstart .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:""}.dropstart .dropdown-toggle::after{display:none}.dropstart .dropdown-toggle::before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropstart .dropdown-toggle:empty::after{margin-left:0}.dropstart .dropdown-toggle::before{vertical-align:0}.dropdown-divider{height:0;margin:var(--bs-dropdown-divider-margin-y) 0;overflow:hidden;border-top:1px solid var(--bs-dropdown-divider-bg);opacity:1}.dropdown-item{display:block;width:100%;padding:var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x);clear:both;font-weight:400;color:var(--bs-dropdown-link-color);text-align:inherit;text-decoration:none;white-space:nowrap;background-color:transparent;border:0;border-radius:var(--bs-dropdown-item-border-radius,0)}.dropdown-item:focus,.dropdown-item:hover{color:var(--bs-dropdown-link-hover-color);background-color:var(--bs-dropdown-link-hover-bg)}.dropdown-item.active,.dropdown-item:active{color:var(--bs-dropdown-link-active-color);text-decoration:none;background-color:var(--bs-dropdown-link-active-bg)}.dropdown-item.disabled,.dropdown-item:disabled{color:var(--bs-dropdown-link-disabled-color);pointer-events:none;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:var(--bs-dropdown-header-padding-y) var(--bs-dropdown-header-padding-x);margin-bottom:0;font-size:.875rem;color:var(--bs-dropdown-header-color);white-space:nowrap}.dropdown-item-text{display:block;padding:var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x);color:var(--bs-dropdown-link-color)}.dropdown-menu-dark{--bs-dropdown-color:#dee2e6;--bs-dropdown-bg:#343a40;--bs-dropdown-border-color:var(--bs-border-color-translucent);--bs-dropdown-box-shadow: ;--bs-dropdown-link-color:#dee2e6;--bs-dropdown-link-hover-color:#fff;--bs-dropdown-divider-bg:var(--bs-border-color-translucent);--bs-dropdown-link-hover-bg:rgba(255, 255, 255, 0.15);--bs-dropdown-link-active-color:#fff;--bs-dropdown-link-active-bg:#0d6efd;--bs-dropdown-link-disabled-color:#adb5bd;--bs-dropdown-header-color:#adb5bd}.btn-group,.btn-group-vertical{position:relative;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;flex:1 1 auto}.btn-group-vertical>.btn-check:checked+.btn,.btn-group-vertical>.btn-check:focus+.btn,.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn-check:checked+.btn,.btn-group>.btn-check:focus+.btn,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:1}.btn-toolbar{display:flex;flex-wrap:wrap;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group{border-radius:var(--bs-border-radius)}.btn-group>.btn-group:not(:first-child),.btn-group>:not(.btn-check:first-child)+.btn{margin-left:calc(-1 * var(--bs-border-width))}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn.dropdown-toggle-split:first-child,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:nth-child(n+3),.btn-group>:not(.btn-check)+.btn{border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after,.dropend .dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after{margin-left:0}.dropstart .dropdown-toggle-split::before{margin-right:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{flex-direction:column;align-items:flex-start;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn-group:not(:first-child),.btn-group-vertical>.btn:not(:first-child){margin-top:calc(-1 * var(--bs-border-width))}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn:nth-child(n+3),.btn-group-vertical>:not(.btn-check)+.btn{border-top-left-radius:0;border-top-right-radius:0}.nav{--bs-nav-link-padding-x:1rem;--bs-nav-link-padding-y:0.5rem;--bs-nav-link-font-weight: ;--bs-nav-link-color:var(--bs-link-color);--bs-nav-link-hover-color:var(--bs-link-hover-color);--bs-nav-link-disabled-color:var(--bs-secondary-color);display:flex;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:var(--bs-nav-link-padding-y) var(--bs-nav-link-padding-x);font-size:var(--bs-nav-link-font-size);font-weight:var(--bs-nav-link-font-weight);color:var(--bs-nav-link-color);text-decoration:none;background:0 0;border:0;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out}@media (prefers-reduced-motion:reduce){.nav-link{transition:none}}.nav-link:focus,.nav-link:hover{color:var(--bs-nav-link-hover-color)}.nav-link:focus-visible{outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.nav-link.disabled,.nav-link:disabled{color:var(--bs-nav-link-disabled-color);pointer-events:none;cursor:default}.nav-tabs{--bs-nav-tabs-border-width:var(--bs-border-width);--bs-nav-tabs-border-color:var(--bs-border-color);--bs-nav-tabs-border-radius:var(--bs-border-radius);--bs-nav-tabs-link-hover-border-color:var(--bs-secondary-bg) var(--bs-secondary-bg) var(--bs-border-color);--bs-nav-tabs-link-active-color:var(--bs-emphasis-color);--bs-nav-tabs-link-active-bg:var(--bs-body-bg);--bs-nav-tabs-link-active-border-color:var(--bs-border-color) var(--bs-border-color) var(--bs-body-bg);border-bottom:var(--bs-nav-tabs-border-width) solid var(--bs-nav-tabs-border-color)}.nav-tabs .nav-link{margin-bottom:calc(-1 * var(--bs-nav-tabs-border-width));border:var(--bs-nav-tabs-border-width) solid transparent;border-top-left-radius:var(--bs-nav-tabs-border-radius);border-top-right-radius:var(--bs-nav-tabs-border-radius)}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{isolation:isolate;border-color:var(--bs-nav-tabs-link-hover-border-color)}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:var(--bs-nav-tabs-link-active-color);background-color:var(--bs-nav-tabs-link-active-bg);border-color:var(--bs-nav-tabs-link-active-border-color)}.nav-tabs .dropdown-menu{margin-top:calc(-1 * var(--bs-nav-tabs-border-width));border-top-left-radius:0;border-top-right-radius:0}.nav-pills{--bs-nav-pills-border-radius:var(--bs-border-radius);--bs-nav-pills-link-active-color:#fff;--bs-nav-pills-link-active-bg:#0d6efd}.nav-pills .nav-link{border-radius:var(--bs-nav-pills-border-radius)}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:var(--bs-nav-pills-link-active-color);background-color:var(--bs-nav-pills-link-active-bg)}.nav-underline{--bs-nav-underline-gap:1rem;--bs-nav-underline-border-width:0.125rem;--bs-nav-underline-link-active-color:var(--bs-emphasis-color);gap:var(--bs-nav-underline-gap)}.nav-underline .nav-link{padding-right:0;padding-left:0;border-bottom:var(--bs-nav-underline-border-width) solid transparent}.nav-underline .nav-link:focus,.nav-underline .nav-link:hover{border-bottom-color:currentcolor}.nav-underline .nav-link.active,.nav-underline .show>.nav-link{font-weight:700;color:var(--bs-nav-underline-link-active-color);border-bottom-color:currentcolor}.nav-fill .nav-item,.nav-fill>.nav-link{flex:1 1 auto;text-align:center}.nav-justified .nav-item,.nav-justified>.nav-link{flex-grow:1;flex-basis:0;text-align:center}.nav-fill .nav-item .nav-link,.nav-justified .nav-item .nav-link{width:100%}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{--bs-navbar-padding-x:0;--bs-navbar-padding-y:0.5rem;--bs-navbar-color:rgba(var(--bs-emphasis-color-rgb), 0.65);--bs-navbar-hover-color:rgba(var(--bs-emphasis-color-rgb), 0.8);--bs-navbar-disabled-color:rgba(var(--bs-emphasis-color-rgb), 0.3);--bs-navbar-active-color:rgba(var(--bs-emphasis-color-rgb), 1);--bs-navbar-brand-padding-y:0.3125rem;--bs-navbar-brand-margin-end:1rem;--bs-navbar-brand-font-size:1.25rem;--bs-navbar-brand-color:rgba(var(--bs-emphasis-color-rgb), 1);--bs-navbar-brand-hover-color:rgba(var(--bs-emphasis-color-rgb), 1);--bs-navbar-nav-link-padding-x:0.5rem;--bs-navbar-toggler-padding-y:0.25rem;--bs-navbar-toggler-padding-x:0.75rem;--bs-navbar-toggler-font-size:1.25rem;--bs-navbar-toggler-icon-bg:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%2833, 37, 41, 0.75%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e");--bs-navbar-toggler-border-color:rgba(var(--bs-emphasis-color-rgb), 0.15);--bs-navbar-toggler-border-radius:var(--bs-border-radius);--bs-navbar-toggler-focus-width:0.25rem;--bs-navbar-toggler-transition:box-shadow 0.15s ease-in-out;position:relative;display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;padding:var(--bs-navbar-padding-y) var(--bs-navbar-padding-x)}.navbar>.container,.navbar>.container-fluid,.navbar>.container-lg,.navbar>.container-md,.navbar>.container-sm,.navbar>.container-xl,.navbar>.container-xxl{display:flex;flex-wrap:inherit;align-items:center;justify-content:space-between}.navbar-brand{padding-top:var(--bs-navbar-brand-padding-y);padding-bottom:var(--bs-navbar-brand-padding-y);margin-right:var(--bs-navbar-brand-margin-end);font-size:var(--bs-navbar-brand-font-size);color:var(--bs-navbar-brand-color);text-decoration:none;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{color:var(--bs-navbar-brand-hover-color)}.navbar-nav{--bs-nav-link-padding-x:0;--bs-nav-link-padding-y:0.5rem;--bs-nav-link-font-weight: ;--bs-nav-link-color:var(--bs-navbar-color);--bs-nav-link-hover-color:var(--bs-navbar-hover-color);--bs-nav-link-disabled-color:var(--bs-navbar-disabled-color);display:flex;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link.active,.navbar-nav .nav-link.show{color:var(--bs-navbar-active-color)}.navbar-nav .dropdown-menu{position:static}.navbar-text{padding-top:.5rem;padding-bottom:.5rem;color:var(--bs-navbar-color)}.navbar-text a,.navbar-text a:focus,.navbar-text a:hover{color:var(--bs-navbar-active-color)}.navbar-collapse{flex-grow:1;flex-basis:100%;align-items:center}.navbar-toggler{padding:var(--bs-navbar-toggler-padding-y) var(--bs-navbar-toggler-padding-x);font-size:var(--bs-navbar-toggler-font-size);line-height:1;color:var(--bs-navbar-color);background-color:transparent;border:var(--bs-border-width) solid var(--bs-navbar-toggler-border-color);border-radius:var(--bs-navbar-toggler-border-radius);transition:var(--bs-navbar-toggler-transition)}@media (prefers-reduced-motion:reduce){.navbar-toggler{transition:none}}.navbar-toggler:hover{text-decoration:none}.navbar-toggler:focus{text-decoration:none;outline:0;box-shadow:0 0 0 var(--bs-navbar-toggler-focus-width)}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;background-image:var(--bs-navbar-toggler-icon-bg);background-repeat:no-repeat;background-position:center;background-size:100%}.navbar-nav-scroll{max-height:var(--bs-scroll-height,75vh);overflow-y:auto}@media (min-width:576px){.navbar-expand-sm{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-sm .navbar-nav{flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-sm .navbar-nav-scroll{overflow:visible}.navbar-expand-sm .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}.navbar-expand-sm .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto!important;height:auto!important;visibility:visible!important;background-color:transparent!important;border:0!important;transform:none!important;transition:none}.navbar-expand-sm .offcanvas .offcanvas-header{display:none}.navbar-expand-sm .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media (min-width:768px){.navbar-expand-md{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-md .navbar-nav{flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-md .navbar-nav-scroll{overflow:visible}.navbar-expand-md .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}.navbar-expand-md .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto!important;height:auto!important;visibility:visible!important;background-color:transparent!important;border:0!important;transform:none!important;transition:none}.navbar-expand-md .offcanvas .offcanvas-header{display:none}.navbar-expand-md .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media (min-width:992px){.navbar-expand-lg{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-lg .navbar-nav-scroll{overflow:visible}.navbar-expand-lg .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}.navbar-expand-lg .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto!important;height:auto!important;visibility:visible!important;background-color:transparent!important;border:0!important;transform:none!important;transition:none}.navbar-expand-lg .offcanvas .offcanvas-header{display:none}.navbar-expand-lg .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media (min-width:1200px){.navbar-expand-xl{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-xl .navbar-nav{flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-xl .navbar-nav-scroll{overflow:visible}.navbar-expand-xl .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}.navbar-expand-xl .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto!important;height:auto!important;visibility:visible!important;background-color:transparent!important;border:0!important;transform:none!important;transition:none}.navbar-expand-xl .offcanvas .offcanvas-header{display:none}.navbar-expand-xl .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media (min-width:1400px){.navbar-expand-xxl{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-xxl .navbar-nav{flex-direction:row}.navbar-expand-xxl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xxl .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-xxl .navbar-nav-scroll{overflow:visible}.navbar-expand-xxl .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-xxl .navbar-toggler{display:none}.navbar-expand-xxl .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto!important;height:auto!important;visibility:visible!important;background-color:transparent!important;border:0!important;transform:none!important;transition:none}.navbar-expand-xxl .offcanvas .offcanvas-header{display:none}.navbar-expand-xxl .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}.navbar-expand{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand .navbar-nav{flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand .navbar-nav-scroll{overflow:visible}.navbar-expand .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-expand .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto!important;height:auto!important;visibility:visible!important;background-color:transparent!important;border:0!important;transform:none!important;transition:none}.navbar-expand .offcanvas .offcanvas-header{display:none}.navbar-expand .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}.navbar-dark,.navbar[data-bs-theme=dark]{--bs-navbar-color:rgba(255, 255, 255, 0.55);--bs-navbar-hover-color:rgba(255, 255, 255, 0.75);--bs-navbar-disabled-color:rgba(255, 255, 255, 0.25);--bs-navbar-active-color:#fff;--bs-navbar-brand-color:#fff;--bs-navbar-brand-hover-color:#fff;--bs-navbar-toggler-border-color:rgba(255, 255, 255, 0.1);--bs-navbar-toggler-icon-bg:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}[data-bs-theme=dark] .navbar-toggler-icon{--bs-navbar-toggler-icon-bg:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.card{--bs-card-spacer-y:1rem;--bs-card-spacer-x:1rem;--bs-card-title-spacer-y:0.5rem;--bs-card-title-color: ;--bs-card-subtitle-color: ;--bs-card-border-width:var(--bs-border-width);--bs-card-border-color:var(--bs-border-color-translucent);--bs-card-border-radius:var(--bs-border-radius);--bs-card-box-shadow: ;--bs-card-inner-border-radius:calc(var(--bs-border-radius) - (var(--bs-border-width)));--bs-card-cap-padding-y:0.5rem;--bs-card-cap-padding-x:1rem;--bs-card-cap-bg:rgba(var(--bs-body-color-rgb), 0.03);--bs-card-cap-color: ;--bs-card-height: ;--bs-card-color: ;--bs-card-bg:var(--bs-body-bg);--bs-card-img-overlay-padding:1rem;--bs-card-group-margin:0.75rem;position:relative;display:flex;flex-direction:column;min-width:0;height:var(--bs-card-height);color:var(--bs-body-color);word-wrap:break-word;background-color:var(--bs-card-bg);background-clip:border-box;border:var(--bs-card-border-width) solid var(--bs-card-border-color);border-radius:var(--bs-card-border-radius)}.card>hr{margin-right:0;margin-left:0}.card>.list-group{border-top:inherit;border-bottom:inherit}.card>.list-group:first-child{border-top-width:0;border-top-left-radius:var(--bs-card-inner-border-radius);border-top-right-radius:var(--bs-card-inner-border-radius)}.card>.list-group:last-child{border-bottom-width:0;border-bottom-right-radius:var(--bs-card-inner-border-radius);border-bottom-left-radius:var(--bs-card-inner-border-radius)}.card>.card-header+.list-group,.card>.list-group+.card-footer{border-top:0}.card-body{flex:1 1 auto;padding:var(--bs-card-spacer-y) var(--bs-card-spacer-x);color:var(--bs-card-color)}.card-title{margin-bottom:var(--bs-card-title-spacer-y);color:var(--bs-card-title-color)}.card-subtitle{margin-top:calc(-.5 * var(--bs-card-title-spacer-y));margin-bottom:0;color:var(--bs-card-subtitle-color)}.card-text:last-child{margin-bottom:0}.card-link+.card-link{margin-left:var(--bs-card-spacer-x)}.card-header{padding:var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x);margin-bottom:0;color:var(--bs-card-cap-color);background-color:var(--bs-card-cap-bg);border-bottom:var(--bs-card-border-width) solid var(--bs-card-border-color)}.card-header:first-child{border-radius:var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius) 0 0}.card-footer{padding:var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x);color:var(--bs-card-cap-color);background-color:var(--bs-card-cap-bg);border-top:var(--bs-card-border-width) solid var(--bs-card-border-color)}.card-footer:last-child{border-radius:0 0 var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius)}.card-header-tabs{margin-right:calc(-.5 * var(--bs-card-cap-padding-x));margin-bottom:calc(-1 * var(--bs-card-cap-padding-y));margin-left:calc(-.5 * var(--bs-card-cap-padding-x));border-bottom:0}.card-header-tabs .nav-link.active{background-color:var(--bs-card-bg);border-bottom-color:var(--bs-card-bg)}.card-header-pills{margin-right:calc(-.5 * var(--bs-card-cap-padding-x));margin-left:calc(-.5 * var(--bs-card-cap-padding-x))}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:var(--bs-card-img-overlay-padding);border-radius:var(--bs-card-inner-border-radius)}.card-img,.card-img-bottom,.card-img-top{width:100%}.card-img,.card-img-top{border-top-left-radius:var(--bs-card-inner-border-radius);border-top-right-radius:var(--bs-card-inner-border-radius)}.card-img,.card-img-bottom{border-bottom-right-radius:var(--bs-card-inner-border-radius);border-bottom-left-radius:var(--bs-card-inner-border-radius)}.card-group>.card{margin-bottom:var(--bs-card-group-margin)}@media (min-width:576px){.card-group{display:flex;flex-flow:row wrap}.card-group>.card{flex:1 0 0;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:last-child)>.card-header,.card-group>.card:not(:last-child)>.card-img-top{border-top-right-radius:0}.card-group>.card:not(:last-child)>.card-footer,.card-group>.card:not(:last-child)>.card-img-bottom{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:first-child)>.card-header,.card-group>.card:not(:first-child)>.card-img-top{border-top-left-radius:0}.card-group>.card:not(:first-child)>.card-footer,.card-group>.card:not(:first-child)>.card-img-bottom{border-bottom-left-radius:0}}.accordion{--bs-accordion-color:var(--bs-body-color);--bs-accordion-bg:var(--bs-body-bg);--bs-accordion-transition:color 0.15s ease-in-out,background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out,border-radius 0.15s ease;--bs-accordion-border-color:var(--bs-border-color);--bs-accordion-border-width:var(--bs-border-width);--bs-accordion-border-radius:var(--bs-border-radius);--bs-accordion-inner-border-radius:calc(var(--bs-border-radius) - (var(--bs-border-width)));--bs-accordion-btn-padding-x:1.25rem;--bs-accordion-btn-padding-y:1rem;--bs-accordion-btn-color:var(--bs-body-color);--bs-accordion-btn-bg:var(--bs-accordion-bg);--bs-accordion-btn-icon:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23212529' stroke-linecap='round' stroke-linejoin='round'%3e%3cpath d='m2 5 6 6 6-6'/%3e%3c/svg%3e");--bs-accordion-btn-icon-width:1.25rem;--bs-accordion-btn-icon-transform:rotate(-180deg);--bs-accordion-btn-icon-transition:transform 0.2s ease-in-out;--bs-accordion-btn-active-icon:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23052c65' stroke-linecap='round' stroke-linejoin='round'%3e%3cpath d='m2 5 6 6 6-6'/%3e%3c/svg%3e");--bs-accordion-btn-focus-box-shadow:0 0 0 0.25rem rgba(13, 110, 253, 0.25);--bs-accordion-body-padding-x:1.25rem;--bs-accordion-body-padding-y:1rem;--bs-accordion-active-color:var(--bs-primary-text-emphasis);--bs-accordion-active-bg:var(--bs-primary-bg-subtle)}.accordion-button{position:relative;display:flex;align-items:center;width:100%;padding:var(--bs-accordion-btn-padding-y) var(--bs-accordion-btn-padding-x);font-size:1rem;color:var(--bs-accordion-btn-color);text-align:left;background-color:var(--bs-accordion-btn-bg);border:0;border-radius:0;overflow-anchor:none;transition:var(--bs-accordion-transition)}@media (prefers-reduced-motion:reduce){.accordion-button{transition:none}}.accordion-button:not(.collapsed){color:var(--bs-accordion-active-color);background-color:var(--bs-accordion-active-bg);box-shadow:inset 0 calc(-1 * var(--bs-accordion-border-width)) 0 var(--bs-accordion-border-color)}.accordion-button:not(.collapsed)::after{background-image:var(--bs-accordion-btn-active-icon);transform:var(--bs-accordion-btn-icon-transform)}.accordion-button::after{flex-shrink:0;width:var(--bs-accordion-btn-icon-width);height:var(--bs-accordion-btn-icon-width);margin-left:auto;content:"";background-image:var(--bs-accordion-btn-icon);background-repeat:no-repeat;background-size:var(--bs-accordion-btn-icon-width);transition:var(--bs-accordion-btn-icon-transition)}@media (prefers-reduced-motion:reduce){.accordion-button::after{transition:none}}.accordion-button:hover{z-index:2}.accordion-button:focus{z-index:3;outline:0;box-shadow:var(--bs-accordion-btn-focus-box-shadow)}.accordion-header{margin-bottom:0}.accordion-item{color:var(--bs-accordion-color);background-color:var(--bs-accordion-bg);border:var(--bs-accordion-border-width) solid var(--bs-accordion-border-color)}.accordion-item:first-of-type{border-top-left-radius:var(--bs-accordion-border-radius);border-top-right-radius:var(--bs-accordion-border-radius)}.accordion-item:first-of-type>.accordion-header .accordion-button{border-top-left-radius:var(--bs-accordion-inner-border-radius);border-top-right-radius:var(--bs-accordion-inner-border-radius)}.accordion-item:not(:first-of-type){border-top:0}.accordion-item:last-of-type{border-bottom-right-radius:var(--bs-accordion-border-radius);border-bottom-left-radius:var(--bs-accordion-border-radius)}.accordion-item:last-of-type>.accordion-header .accordion-button.collapsed{border-bottom-right-radius:var(--bs-accordion-inner-border-radius);border-bottom-left-radius:var(--bs-accordion-inner-border-radius)}.accordion-item:last-of-type>.accordion-collapse{border-bottom-right-radius:var(--bs-accordion-border-radius);border-bottom-left-radius:var(--bs-accordion-border-radius)}.accordion-body{padding:var(--bs-accordion-body-padding-y) var(--bs-accordion-body-padding-x)}.accordion-flush>.accordion-item{border-right:0;border-left:0;border-radius:0}.accordion-flush>.accordion-item:first-child{border-top:0}.accordion-flush>.accordion-item:last-child{border-bottom:0}.accordion-flush>.accordion-item>.accordion-collapse,.accordion-flush>.accordion-item>.accordion-header .accordion-button,.accordion-flush>.accordion-item>.accordion-header .accordion-button.collapsed{border-radius:0}[data-bs-theme=dark] .accordion-button::after{--bs-accordion-btn-icon:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%236ea8fe'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708'/%3e%3c/svg%3e");--bs-accordion-btn-active-icon:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%236ea8fe'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708'/%3e%3c/svg%3e")}.breadcrumb{--bs-breadcrumb-padding-x:0;--bs-breadcrumb-padding-y:0;--bs-breadcrumb-margin-bottom:1rem;--bs-breadcrumb-bg: ;--bs-breadcrumb-border-radius: ;--bs-breadcrumb-divider-color:var(--bs-secondary-color);--bs-breadcrumb-item-padding-x:0.5rem;--bs-breadcrumb-item-active-color:var(--bs-secondary-color);display:flex;flex-wrap:wrap;padding:var(--bs-breadcrumb-padding-y) var(--bs-breadcrumb-padding-x);margin-bottom:var(--bs-breadcrumb-margin-bottom);font-size:var(--bs-breadcrumb-font-size);list-style:none;background-color:var(--bs-breadcrumb-bg);border-radius:var(--bs-breadcrumb-border-radius)}.breadcrumb-item+.breadcrumb-item{padding-left:var(--bs-breadcrumb-item-padding-x)}.breadcrumb-item+.breadcrumb-item::before{float:left;padding-right:var(--bs-breadcrumb-item-padding-x);color:var(--bs-breadcrumb-divider-color);content:var(--bs-breadcrumb-divider, "/")}.breadcrumb-item.active{color:var(--bs-breadcrumb-item-active-color)}.pagination{--bs-pagination-padding-x:0.75rem;--bs-pagination-padding-y:0.375rem;--bs-pagination-font-size:1rem;--bs-pagination-color:var(--bs-link-color);--bs-pagination-bg:var(--bs-body-bg);--bs-pagination-border-width:var(--bs-border-width);--bs-pagination-border-color:var(--bs-border-color);--bs-pagination-border-radius:var(--bs-border-radius);--bs-pagination-hover-color:var(--bs-link-hover-color);--bs-pagination-hover-bg:var(--bs-tertiary-bg);--bs-pagination-hover-border-color:var(--bs-border-color);--bs-pagination-focus-color:var(--bs-link-hover-color);--bs-pagination-focus-bg:var(--bs-secondary-bg);--bs-pagination-focus-box-shadow:0 0 0 0.25rem rgba(13, 110, 253, 0.25);--bs-pagination-active-color:#fff;--bs-pagination-active-bg:#0d6efd;--bs-pagination-active-border-color:#0d6efd;--bs-pagination-disabled-color:var(--bs-secondary-color);--bs-pagination-disabled-bg:var(--bs-secondary-bg);--bs-pagination-disabled-border-color:var(--bs-border-color);display:flex;padding-left:0;list-style:none}.page-link{position:relative;display:block;padding:var(--bs-pagination-padding-y) var(--bs-pagination-padding-x);font-size:var(--bs-pagination-font-size);color:var(--bs-pagination-color);text-decoration:none;background-color:var(--bs-pagination-bg);border:var(--bs-pagination-border-width) solid var(--bs-pagination-border-color);transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.page-link{transition:none}}.page-link:hover{z-index:2;color:var(--bs-pagination-hover-color);background-color:var(--bs-pagination-hover-bg);border-color:var(--bs-pagination-hover-border-color)}.page-link:focus{z-index:3;color:var(--bs-pagination-focus-color);background-color:var(--bs-pagination-focus-bg);outline:0;box-shadow:var(--bs-pagination-focus-box-shadow)}.active>.page-link,.page-link.active{z-index:3;color:var(--bs-pagination-active-color);background-color:var(--bs-pagination-active-bg);border-color:var(--bs-pagination-active-border-color)}.disabled>.page-link,.page-link.disabled{color:var(--bs-pagination-disabled-color);pointer-events:none;background-color:var(--bs-pagination-disabled-bg);border-color:var(--bs-pagination-disabled-border-color)}.page-item:not(:first-child) .page-link{margin-left:calc(-1 * var(--bs-border-width))}.page-item:first-child .page-link{border-top-left-radius:var(--bs-pagination-border-radius);border-bottom-left-radius:var(--bs-pagination-border-radius)}.page-item:last-child .page-link{border-top-right-radius:var(--bs-pagination-border-radius);border-bottom-right-radius:var(--bs-pagination-border-radius)}.pagination-lg{--bs-pagination-padding-x:1.5rem;--bs-pagination-padding-y:0.75rem;--bs-pagination-font-size:1.25rem;--bs-pagination-border-radius:var(--bs-border-radius-lg)}.pagination-sm{--bs-pagination-padding-x:0.5rem;--bs-pagination-padding-y:0.25rem;--bs-pagination-font-size:0.875rem;--bs-pagination-border-radius:var(--bs-border-radius-sm)}.badge{--bs-badge-padding-x:0.65em;--bs-badge-padding-y:0.35em;--bs-badge-font-size:0.75em;--bs-badge-font-weight:700;--bs-badge-color:#fff;--bs-badge-border-radius:var(--bs-border-radius);display:inline-block;padding:var(--bs-badge-padding-y) var(--bs-badge-padding-x);font-size:var(--bs-badge-font-size);font-weight:var(--bs-badge-font-weight);line-height:1;color:var(--bs-badge-color);text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:var(--bs-badge-border-radius)}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.alert{--bs-alert-bg:transparent;--bs-alert-padding-x:1rem;--bs-alert-padding-y:1rem;--bs-alert-margin-bottom:1rem;--bs-alert-color:inherit;--bs-alert-border-color:transparent;--bs-alert-border:var(--bs-border-width) solid var(--bs-alert-border-color);--bs-alert-border-radius:var(--bs-border-radius);--bs-alert-link-color:inherit;position:relative;padding:var(--bs-alert-padding-y) var(--bs-alert-padding-x);margin-bottom:var(--bs-alert-margin-bottom);color:var(--bs-alert-color);background-color:var(--bs-alert-bg);border:var(--bs-alert-border);border-radius:var(--bs-alert-border-radius)}.alert-heading{color:inherit}.alert-link{font-weight:700;color:var(--bs-alert-link-color)}.alert-dismissible{padding-right:3rem}.alert-dismissible .btn-close{position:absolute;top:0;right:0;z-index:2;padding:1.25rem 1rem}.alert-primary{--bs-alert-color:var(--bs-primary-text-emphasis);--bs-alert-bg:var(--bs-primary-bg-subtle);--bs-alert-border-color:var(--bs-primary-border-subtle);--bs-alert-link-color:var(--bs-primary-text-emphasis)}.alert-secondary{--bs-alert-color:var(--bs-secondary-text-emphasis);--bs-alert-bg:var(--bs-secondary-bg-subtle);--bs-alert-border-color:var(--bs-secondary-border-subtle);--bs-alert-link-color:var(--bs-secondary-text-emphasis)}.alert-success{--bs-alert-color:var(--bs-success-text-emphasis);--bs-alert-bg:var(--bs-success-bg-subtle);--bs-alert-border-color:var(--bs-success-border-subtle);--bs-alert-link-color:var(--bs-success-text-emphasis)}.alert-info{--bs-alert-color:var(--bs-info-text-emphasis);--bs-alert-bg:var(--bs-info-bg-subtle);--bs-alert-border-color:var(--bs-info-border-subtle);--bs-alert-link-color:var(--bs-info-text-emphasis)}.alert-warning{--bs-alert-color:var(--bs-warning-text-emphasis);--bs-alert-bg:var(--bs-warning-bg-subtle);--bs-alert-border-color:var(--bs-warning-border-subtle);--bs-alert-link-color:var(--bs-warning-text-emphasis)}.alert-danger{--bs-alert-color:var(--bs-danger-text-emphasis);--bs-alert-bg:var(--bs-danger-bg-subtle);--bs-alert-border-color:var(--bs-danger-border-subtle);--bs-alert-link-color:var(--bs-danger-text-emphasis)}.alert-light{--bs-alert-color:var(--bs-light-text-emphasis);--bs-alert-bg:var(--bs-light-bg-subtle);--bs-alert-border-color:var(--bs-light-border-subtle);--bs-alert-link-color:var(--bs-light-text-emphasis)}.alert-dark{--bs-alert-color:var(--bs-dark-text-emphasis);--bs-alert-bg:var(--bs-dark-bg-subtle);--bs-alert-border-color:var(--bs-dark-border-subtle);--bs-alert-link-color:var(--bs-dark-text-emphasis)}@keyframes progress-bar-stripes{0%{background-position-x:var(--bs-progress-height)}}.progress,.progress-stacked{--bs-progress-height:1rem;--bs-progress-font-size:0.75rem;--bs-progress-bg:var(--bs-secondary-bg);--bs-progress-border-radius:var(--bs-border-radius);--bs-progress-box-shadow:var(--bs-box-shadow-inset);--bs-progress-bar-color:#fff;--bs-progress-bar-bg:#0d6efd;--bs-progress-bar-transition:width 0.6s ease;display:flex;height:var(--bs-progress-height);overflow:hidden;font-size:var(--bs-progress-font-size);background-color:var(--bs-progress-bg);border-radius:var(--bs-progress-border-radius)}.progress-bar{display:flex;flex-direction:column;justify-content:center;overflow:hidden;color:var(--bs-progress-bar-color);text-align:center;white-space:nowrap;background-color:var(--bs-progress-bar-bg);transition:var(--bs-progress-bar-transition)}@media (prefers-reduced-motion:reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:var(--bs-progress-height) var(--bs-progress-height)}.progress-stacked>.progress{overflow:visible}.progress-stacked>.progress>.progress-bar{width:100%}.progress-bar-animated{animation:1s linear infinite progress-bar-stripes}@media (prefers-reduced-motion:reduce){.progress-bar-animated{animation:none}}.list-group{--bs-list-group-color:var(--bs-body-color);--bs-list-group-bg:var(--bs-body-bg);--bs-list-group-border-color:var(--bs-border-color);--bs-list-group-border-width:var(--bs-border-width);--bs-list-group-border-radius:var(--bs-border-radius);--bs-list-group-item-padding-x:1rem;--bs-list-group-item-padding-y:0.5rem;--bs-list-group-action-color:var(--bs-secondary-color);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-tertiary-bg);--bs-list-group-action-active-color:var(--bs-body-color);--bs-list-group-action-active-bg:var(--bs-secondary-bg);--bs-list-group-disabled-color:var(--bs-secondary-color);--bs-list-group-disabled-bg:var(--bs-body-bg);--bs-list-group-active-color:#fff;--bs-list-group-active-bg:#0d6efd;--bs-list-group-active-border-color:#0d6efd;display:flex;flex-direction:column;padding-left:0;margin-bottom:0;border-radius:var(--bs-list-group-border-radius)}.list-group-numbered{list-style-type:none;counter-reset:section}.list-group-numbered>.list-group-item::before{content:counters(section, ".") ". ";counter-increment:section}.list-group-item{position:relative;display:block;padding:var(--bs-list-group-item-padding-y) var(--bs-list-group-item-padding-x);color:var(--bs-list-group-color);text-decoration:none;background-color:var(--bs-list-group-bg);border:var(--bs-list-group-border-width) solid var(--bs-list-group-border-color)}.list-group-item:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}.list-group-item:last-child{border-bottom-right-radius:inherit;border-bottom-left-radius:inherit}.list-group-item.disabled,.list-group-item:disabled{color:var(--bs-list-group-disabled-color);pointer-events:none;background-color:var(--bs-list-group-disabled-bg)}.list-group-item.active{z-index:2;color:var(--bs-list-group-active-color);background-color:var(--bs-list-group-active-bg);border-color:var(--bs-list-group-active-border-color)}.list-group-item+.list-group-item{border-top-width:0}.list-group-item+.list-group-item.active{margin-top:calc(-1 * var(--bs-list-group-border-width));border-top-width:var(--bs-list-group-border-width)}.list-group-item-action{width:100%;color:var(--bs-list-group-action-color);text-align:inherit}.list-group-item-action:not(.active):focus,.list-group-item-action:not(.active):hover{z-index:1;color:var(--bs-list-group-action-hover-color);text-decoration:none;background-color:var(--bs-list-group-action-hover-bg)}.list-group-item-action:not(.active):active{color:var(--bs-list-group-action-active-color);background-color:var(--bs-list-group-action-active-bg)}.list-group-horizontal{flex-direction:row}.list-group-horizontal>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal>.list-group-item.active{margin-top:0}.list-group-horizontal>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal>.list-group-item+.list-group-item.active{margin-left:calc(-1 * var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}@media (min-width:576px){.list-group-horizontal-sm{flex-direction:row}.list-group-horizontal-sm>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-sm>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-sm>.list-group-item.active{margin-top:0}.list-group-horizontal-sm>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-sm>.list-group-item+.list-group-item.active{margin-left:calc(-1 * var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}@media (min-width:768px){.list-group-horizontal-md{flex-direction:row}.list-group-horizontal-md>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-md>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-md>.list-group-item.active{margin-top:0}.list-group-horizontal-md>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-md>.list-group-item+.list-group-item.active{margin-left:calc(-1 * var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}@media (min-width:992px){.list-group-horizontal-lg{flex-direction:row}.list-group-horizontal-lg>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-lg>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-lg>.list-group-item.active{margin-top:0}.list-group-horizontal-lg>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-lg>.list-group-item+.list-group-item.active{margin-left:calc(-1 * var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}@media (min-width:1200px){.list-group-horizontal-xl{flex-direction:row}.list-group-horizontal-xl>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-xl>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-xl>.list-group-item.active{margin-top:0}.list-group-horizontal-xl>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-xl>.list-group-item+.list-group-item.active{margin-left:calc(-1 * var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}@media (min-width:1400px){.list-group-horizontal-xxl{flex-direction:row}.list-group-horizontal-xxl>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-xxl>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-xxl>.list-group-item.active{margin-top:0}.list-group-horizontal-xxl>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-xxl>.list-group-item+.list-group-item.active{margin-left:calc(-1 * var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}.list-group-flush{border-radius:0}.list-group-flush>.list-group-item{border-width:0 0 var(--bs-list-group-border-width)}.list-group-flush>.list-group-item:last-child{border-bottom-width:0}.list-group-item-primary{--bs-list-group-color:var(--bs-primary-text-emphasis);--bs-list-group-bg:var(--bs-primary-bg-subtle);--bs-list-group-border-color:var(--bs-primary-border-subtle);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-primary-border-subtle);--bs-list-group-action-active-color:var(--bs-emphasis-color);--bs-list-group-action-active-bg:var(--bs-primary-border-subtle);--bs-list-group-active-color:var(--bs-primary-bg-subtle);--bs-list-group-active-bg:var(--bs-primary-text-emphasis);--bs-list-group-active-border-color:var(--bs-primary-text-emphasis)}.list-group-item-secondary{--bs-list-group-color:var(--bs-secondary-text-emphasis);--bs-list-group-bg:var(--bs-secondary-bg-subtle);--bs-list-group-border-color:var(--bs-secondary-border-subtle);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-secondary-border-subtle);--bs-list-group-action-active-color:var(--bs-emphasis-color);--bs-list-group-action-active-bg:var(--bs-secondary-border-subtle);--bs-list-group-active-color:var(--bs-secondary-bg-subtle);--bs-list-group-active-bg:var(--bs-secondary-text-emphasis);--bs-list-group-active-border-color:var(--bs-secondary-text-emphasis)}.list-group-item-success{--bs-list-group-color:var(--bs-success-text-emphasis);--bs-list-group-bg:var(--bs-success-bg-subtle);--bs-list-group-border-color:var(--bs-success-border-subtle);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-success-border-subtle);--bs-list-group-action-active-color:var(--bs-emphasis-color);--bs-list-group-action-active-bg:var(--bs-success-border-subtle);--bs-list-group-active-color:var(--bs-success-bg-subtle);--bs-list-group-active-bg:var(--bs-success-text-emphasis);--bs-list-group-active-border-color:var(--bs-success-text-emphasis)}.list-group-item-info{--bs-list-group-color:var(--bs-info-text-emphasis);--bs-list-group-bg:var(--bs-info-bg-subtle);--bs-list-group-border-color:var(--bs-info-border-subtle);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-info-border-subtle);--bs-list-group-action-active-color:var(--bs-emphasis-color);--bs-list-group-action-active-bg:var(--bs-info-border-subtle);--bs-list-group-active-color:var(--bs-info-bg-subtle);--bs-list-group-active-bg:var(--bs-info-text-emphasis);--bs-list-group-active-border-color:var(--bs-info-text-emphasis)}.list-group-item-warning{--bs-list-group-color:var(--bs-warning-text-emphasis);--bs-list-group-bg:var(--bs-warning-bg-subtle);--bs-list-group-border-color:var(--bs-warning-border-subtle);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-warning-border-subtle);--bs-list-group-action-active-color:var(--bs-emphasis-color);--bs-list-group-action-active-bg:var(--bs-warning-border-subtle);--bs-list-group-active-color:var(--bs-warning-bg-subtle);--bs-list-group-active-bg:var(--bs-warning-text-emphasis);--bs-list-group-active-border-color:var(--bs-warning-text-emphasis)}.list-group-item-danger{--bs-list-group-color:var(--bs-danger-text-emphasis);--bs-list-group-bg:var(--bs-danger-bg-subtle);--bs-list-group-border-color:var(--bs-danger-border-subtle);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-danger-border-subtle);--bs-list-group-action-active-color:var(--bs-emphasis-color);--bs-list-group-action-active-bg:var(--bs-danger-border-subtle);--bs-list-group-active-color:var(--bs-danger-bg-subtle);--bs-list-group-active-bg:var(--bs-danger-text-emphasis);--bs-list-group-active-border-color:var(--bs-danger-text-emphasis)}.list-group-item-light{--bs-list-group-color:var(--bs-light-text-emphasis);--bs-list-group-bg:var(--bs-light-bg-subtle);--bs-list-group-border-color:var(--bs-light-border-subtle);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-light-border-subtle);--bs-list-group-action-active-color:var(--bs-emphasis-color);--bs-list-group-action-active-bg:var(--bs-light-border-subtle);--bs-list-group-active-color:var(--bs-light-bg-subtle);--bs-list-group-active-bg:var(--bs-light-text-emphasis);--bs-list-group-active-border-color:var(--bs-light-text-emphasis)}.list-group-item-dark{--bs-list-group-color:var(--bs-dark-text-emphasis);--bs-list-group-bg:var(--bs-dark-bg-subtle);--bs-list-group-border-color:var(--bs-dark-border-subtle);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-dark-border-subtle);--bs-list-group-action-active-color:var(--bs-emphasis-color);--bs-list-group-action-active-bg:var(--bs-dark-border-subtle);--bs-list-group-active-color:var(--bs-dark-bg-subtle);--bs-list-group-active-bg:var(--bs-dark-text-emphasis);--bs-list-group-active-border-color:var(--bs-dark-text-emphasis)}.btn-close{--bs-btn-close-color:#000;--bs-btn-close-bg:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414'/%3e%3c/svg%3e");--bs-btn-close-opacity:0.5;--bs-btn-close-hover-opacity:0.75;--bs-btn-close-focus-shadow:0 0 0 0.25rem rgba(13, 110, 253, 0.25);--bs-btn-close-focus-opacity:1;--bs-btn-close-disabled-opacity:0.25;box-sizing:content-box;width:1em;height:1em;padding:.25em .25em;color:var(--bs-btn-close-color);background:transparent var(--bs-btn-close-bg) center/1em auto no-repeat;filter:var(--bs-btn-close-filter);border:0;border-radius:.375rem;opacity:var(--bs-btn-close-opacity)}.btn-close:hover{color:var(--bs-btn-close-color);text-decoration:none;opacity:var(--bs-btn-close-hover-opacity)}.btn-close:focus{outline:0;box-shadow:var(--bs-btn-close-focus-shadow);opacity:var(--bs-btn-close-focus-opacity)}.btn-close.disabled,.btn-close:disabled{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;opacity:var(--bs-btn-close-disabled-opacity)}.btn-close-white{--bs-btn-close-filter:invert(1) grayscale(100%) brightness(200%)}:root,[data-bs-theme=light]{--bs-btn-close-filter: }[data-bs-theme=dark]{--bs-btn-close-filter:invert(1) grayscale(100%) brightness(200%)}.toast{--bs-toast-zindex:1090;--bs-toast-padding-x:0.75rem;--bs-toast-padding-y:0.5rem;--bs-toast-spacing:1.5rem;--bs-toast-max-width:350px;--bs-toast-font-size:0.875rem;--bs-toast-color: ;--bs-toast-bg:rgba(var(--bs-body-bg-rgb), 0.85);--bs-toast-border-width:var(--bs-border-width);--bs-toast-border-color:var(--bs-border-color-translucent);--bs-toast-border-radius:var(--bs-border-radius);--bs-toast-box-shadow:var(--bs-box-shadow);--bs-toast-header-color:var(--bs-secondary-color);--bs-toast-header-bg:rgba(var(--bs-body-bg-rgb), 0.85);--bs-toast-header-border-color:var(--bs-border-color-translucent);width:var(--bs-toast-max-width);max-width:100%;font-size:var(--bs-toast-font-size);color:var(--bs-toast-color);pointer-events:auto;background-color:var(--bs-toast-bg);background-clip:padding-box;border:var(--bs-toast-border-width) solid var(--bs-toast-border-color);box-shadow:var(--bs-toast-box-shadow);border-radius:var(--bs-toast-border-radius)}.toast.showing{opacity:0}.toast:not(.show){display:none}.toast-container{--bs-toast-zindex:1090;position:absolute;z-index:var(--bs-toast-zindex);width:-webkit-max-content;width:-moz-max-content;width:max-content;max-width:100%;pointer-events:none}.toast-container>:not(:last-child){margin-bottom:var(--bs-toast-spacing)}.toast-header{display:flex;align-items:center;padding:var(--bs-toast-padding-y) var(--bs-toast-padding-x);color:var(--bs-toast-header-color);background-color:var(--bs-toast-header-bg);background-clip:padding-box;border-bottom:var(--bs-toast-border-width) solid var(--bs-toast-header-border-color);border-top-left-radius:calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width));border-top-right-radius:calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width))}.toast-header .btn-close{margin-right:calc(-.5 * var(--bs-toast-padding-x));margin-left:var(--bs-toast-padding-x)}.toast-body{padding:var(--bs-toast-padding-x);word-wrap:break-word}.modal{--bs-modal-zindex:1055;--bs-modal-width:500px;--bs-modal-padding:1rem;--bs-modal-margin:0.5rem;--bs-modal-color:var(--bs-body-color);--bs-modal-bg:var(--bs-body-bg);--bs-modal-border-color:var(--bs-border-color-translucent);--bs-modal-border-width:var(--bs-border-width);--bs-modal-border-radius:var(--bs-border-radius-lg);--bs-modal-box-shadow:var(--bs-box-shadow-sm);--bs-modal-inner-border-radius:calc(var(--bs-border-radius-lg) - (var(--bs-border-width)));--bs-modal-header-padding-x:1rem;--bs-modal-header-padding-y:1rem;--bs-modal-header-padding:1rem 1rem;--bs-modal-header-border-color:var(--bs-border-color);--bs-modal-header-border-width:var(--bs-border-width);--bs-modal-title-line-height:1.5;--bs-modal-footer-gap:0.5rem;--bs-modal-footer-bg: ;--bs-modal-footer-border-color:var(--bs-border-color);--bs-modal-footer-border-width:var(--bs-border-width);position:fixed;top:0;left:0;z-index:var(--bs-modal-zindex);display:none;width:100%;height:100%;overflow-x:hidden;overflow-y:auto;outline:0}.modal-dialog{position:relative;width:auto;margin:var(--bs-modal-margin);pointer-events:none}.modal.fade .modal-dialog{transform:translate(0,-50px);transition:transform .3s ease-out}@media (prefers-reduced-motion:reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{transform:none}.modal.modal-static .modal-dialog{transform:scale(1.02)}.modal-dialog-scrollable{height:calc(100% - var(--bs-modal-margin) * 2)}.modal-dialog-scrollable .modal-content{max-height:100%;overflow:hidden}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:flex;align-items:center;min-height:calc(100% - var(--bs-modal-margin) * 2)}.modal-content{position:relative;display:flex;flex-direction:column;width:100%;color:var(--bs-modal-color);pointer-events:auto;background-color:var(--bs-modal-bg);background-clip:padding-box;border:var(--bs-modal-border-width) solid var(--bs-modal-border-color);border-radius:var(--bs-modal-border-radius);outline:0}.modal-backdrop{--bs-backdrop-zindex:1050;--bs-backdrop-bg:#000;--bs-backdrop-opacity:0.5;position:fixed;top:0;left:0;z-index:var(--bs-backdrop-zindex);width:100vw;height:100vh;background-color:var(--bs-backdrop-bg)}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:var(--bs-backdrop-opacity)}.modal-header{display:flex;flex-shrink:0;align-items:center;padding:var(--bs-modal-header-padding);border-bottom:var(--bs-modal-header-border-width) solid var(--bs-modal-header-border-color);border-top-left-radius:var(--bs-modal-inner-border-radius);border-top-right-radius:var(--bs-modal-inner-border-radius)}.modal-header .btn-close{padding:calc(var(--bs-modal-header-padding-y) * .5) calc(var(--bs-modal-header-padding-x) * .5);margin-top:calc(-.5 * var(--bs-modal-header-padding-y));margin-right:calc(-.5 * var(--bs-modal-header-padding-x));margin-bottom:calc(-.5 * var(--bs-modal-header-padding-y));margin-left:auto}.modal-title{margin-bottom:0;line-height:var(--bs-modal-title-line-height)}.modal-body{position:relative;flex:1 1 auto;padding:var(--bs-modal-padding)}.modal-footer{display:flex;flex-shrink:0;flex-wrap:wrap;align-items:center;justify-content:flex-end;padding:calc(var(--bs-modal-padding) - var(--bs-modal-footer-gap) * .5);background-color:var(--bs-modal-footer-bg);border-top:var(--bs-modal-footer-border-width) solid var(--bs-modal-footer-border-color);border-bottom-right-radius:var(--bs-modal-inner-border-radius);border-bottom-left-radius:var(--bs-modal-inner-border-radius)}.modal-footer>*{margin:calc(var(--bs-modal-footer-gap) * .5)}@media (min-width:576px){.modal{--bs-modal-margin:1.75rem;--bs-modal-box-shadow:var(--bs-box-shadow)}.modal-dialog{max-width:var(--bs-modal-width);margin-right:auto;margin-left:auto}.modal-sm{--bs-modal-width:300px}}@media (min-width:992px){.modal-lg,.modal-xl{--bs-modal-width:800px}}@media (min-width:1200px){.modal-xl{--bs-modal-width:1140px}}.modal-fullscreen{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen .modal-footer,.modal-fullscreen .modal-header{border-radius:0}.modal-fullscreen .modal-body{overflow-y:auto}@media (max-width:575.98px){.modal-fullscreen-sm-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-sm-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-sm-down .modal-footer,.modal-fullscreen-sm-down .modal-header{border-radius:0}.modal-fullscreen-sm-down .modal-body{overflow-y:auto}}@media (max-width:767.98px){.modal-fullscreen-md-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-md-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-md-down .modal-footer,.modal-fullscreen-md-down .modal-header{border-radius:0}.modal-fullscreen-md-down .modal-body{overflow-y:auto}}@media (max-width:991.98px){.modal-fullscreen-lg-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-lg-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-lg-down .modal-footer,.modal-fullscreen-lg-down .modal-header{border-radius:0}.modal-fullscreen-lg-down .modal-body{overflow-y:auto}}@media (max-width:1199.98px){.modal-fullscreen-xl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xl-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-xl-down .modal-footer,.modal-fullscreen-xl-down .modal-header{border-radius:0}.modal-fullscreen-xl-down .modal-body{overflow-y:auto}}@media (max-width:1399.98px){.modal-fullscreen-xxl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xxl-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-xxl-down .modal-footer,.modal-fullscreen-xxl-down .modal-header{border-radius:0}.modal-fullscreen-xxl-down .modal-body{overflow-y:auto}}.tooltip{--bs-tooltip-zindex:1080;--bs-tooltip-max-width:200px;--bs-tooltip-padding-x:0.5rem;--bs-tooltip-padding-y:0.25rem;--bs-tooltip-margin: ;--bs-tooltip-font-size:0.875rem;--bs-tooltip-color:var(--bs-body-bg);--bs-tooltip-bg:var(--bs-emphasis-color);--bs-tooltip-border-radius:var(--bs-border-radius);--bs-tooltip-opacity:0.9;--bs-tooltip-arrow-width:0.8rem;--bs-tooltip-arrow-height:0.4rem;z-index:var(--bs-tooltip-zindex);display:block;margin:var(--bs-tooltip-margin);font-family:var(--bs-font-sans-serif);font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;white-space:normal;word-spacing:normal;line-break:auto;font-size:var(--bs-tooltip-font-size);word-wrap:break-word;opacity:0}.tooltip.show{opacity:var(--bs-tooltip-opacity)}.tooltip .tooltip-arrow{display:block;width:var(--bs-tooltip-arrow-width);height:var(--bs-tooltip-arrow-height)}.tooltip .tooltip-arrow::before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow,.bs-tooltip-top .tooltip-arrow{bottom:calc(-1 * var(--bs-tooltip-arrow-height))}.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow::before,.bs-tooltip-top .tooltip-arrow::before{top:-1px;border-width:var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width) * .5) 0;border-top-color:var(--bs-tooltip-bg)}.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow,.bs-tooltip-end .tooltip-arrow{left:calc(-1 * var(--bs-tooltip-arrow-height));width:var(--bs-tooltip-arrow-height);height:var(--bs-tooltip-arrow-width)}.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow::before,.bs-tooltip-end .tooltip-arrow::before{right:-1px;border-width:calc(var(--bs-tooltip-arrow-width) * .5) var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width) * .5) 0;border-right-color:var(--bs-tooltip-bg)}.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow,.bs-tooltip-bottom .tooltip-arrow{top:calc(-1 * var(--bs-tooltip-arrow-height))}.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow::before,.bs-tooltip-bottom .tooltip-arrow::before{bottom:-1px;border-width:0 calc(var(--bs-tooltip-arrow-width) * .5) var(--bs-tooltip-arrow-height);border-bottom-color:var(--bs-tooltip-bg)}.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow,.bs-tooltip-start .tooltip-arrow{right:calc(-1 * var(--bs-tooltip-arrow-height));width:var(--bs-tooltip-arrow-height);height:var(--bs-tooltip-arrow-width)}.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow::before,.bs-tooltip-start .tooltip-arrow::before{left:-1px;border-width:calc(var(--bs-tooltip-arrow-width) * .5) 0 calc(var(--bs-tooltip-arrow-width) * .5) var(--bs-tooltip-arrow-height);border-left-color:var(--bs-tooltip-bg)}.tooltip-inner{max-width:var(--bs-tooltip-max-width);padding:var(--bs-tooltip-padding-y) var(--bs-tooltip-padding-x);color:var(--bs-tooltip-color);text-align:center;background-color:var(--bs-tooltip-bg);border-radius:var(--bs-tooltip-border-radius)}.popover{--bs-popover-zindex:1070;--bs-popover-max-width:276px;--bs-popover-font-size:0.875rem;--bs-popover-bg:var(--bs-body-bg);--bs-popover-border-width:var(--bs-border-width);--bs-popover-border-color:var(--bs-border-color-translucent);--bs-popover-border-radius:var(--bs-border-radius-lg);--bs-popover-inner-border-radius:calc(var(--bs-border-radius-lg) - var(--bs-border-width));--bs-popover-box-shadow:var(--bs-box-shadow);--bs-popover-header-padding-x:1rem;--bs-popover-header-padding-y:0.5rem;--bs-popover-header-font-size:1rem;--bs-popover-header-color:inherit;--bs-popover-header-bg:var(--bs-secondary-bg);--bs-popover-body-padding-x:1rem;--bs-popover-body-padding-y:1rem;--bs-popover-body-color:var(--bs-body-color);--bs-popover-arrow-width:1rem;--bs-popover-arrow-height:0.5rem;--bs-popover-arrow-border:var(--bs-popover-border-color);z-index:var(--bs-popover-zindex);display:block;max-width:var(--bs-popover-max-width);font-family:var(--bs-font-sans-serif);font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;white-space:normal;word-spacing:normal;line-break:auto;font-size:var(--bs-popover-font-size);word-wrap:break-word;background-color:var(--bs-popover-bg);background-clip:padding-box;border:var(--bs-popover-border-width) solid var(--bs-popover-border-color);border-radius:var(--bs-popover-border-radius)}.popover .popover-arrow{display:block;width:var(--bs-popover-arrow-width);height:var(--bs-popover-arrow-height)}.popover .popover-arrow::after,.popover .popover-arrow::before{position:absolute;display:block;content:"";border-color:transparent;border-style:solid;border-width:0}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow,.bs-popover-top>.popover-arrow{bottom:calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width))}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::before,.bs-popover-top>.popover-arrow::after,.bs-popover-top>.popover-arrow::before{border-width:var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width) * .5) 0}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::before,.bs-popover-top>.popover-arrow::before{bottom:0;border-top-color:var(--bs-popover-arrow-border)}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::after,.bs-popover-top>.popover-arrow::after{bottom:var(--bs-popover-border-width);border-top-color:var(--bs-popover-bg)}.bs-popover-auto[data-popper-placement^=right]>.popover-arrow,.bs-popover-end>.popover-arrow{left:calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));width:var(--bs-popover-arrow-height);height:var(--bs-popover-arrow-width)}.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::before,.bs-popover-end>.popover-arrow::after,.bs-popover-end>.popover-arrow::before{border-width:calc(var(--bs-popover-arrow-width) * .5) var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width) * .5) 0}.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::before,.bs-popover-end>.popover-arrow::before{left:0;border-right-color:var(--bs-popover-arrow-border)}.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::after,.bs-popover-end>.popover-arrow::after{left:var(--bs-popover-border-width);border-right-color:var(--bs-popover-bg)}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow,.bs-popover-bottom>.popover-arrow{top:calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width))}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::before,.bs-popover-bottom>.popover-arrow::after,.bs-popover-bottom>.popover-arrow::before{border-width:0 calc(var(--bs-popover-arrow-width) * .5) var(--bs-popover-arrow-height)}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::before,.bs-popover-bottom>.popover-arrow::before{top:0;border-bottom-color:var(--bs-popover-arrow-border)}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::after,.bs-popover-bottom>.popover-arrow::after{top:var(--bs-popover-border-width);border-bottom-color:var(--bs-popover-bg)}.bs-popover-auto[data-popper-placement^=bottom] .popover-header::before,.bs-popover-bottom .popover-header::before{position:absolute;top:0;left:50%;display:block;width:var(--bs-popover-arrow-width);margin-left:calc(-.5 * var(--bs-popover-arrow-width));content:"";border-bottom:var(--bs-popover-border-width) solid var(--bs-popover-header-bg)}.bs-popover-auto[data-popper-placement^=left]>.popover-arrow,.bs-popover-start>.popover-arrow{right:calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));width:var(--bs-popover-arrow-height);height:var(--bs-popover-arrow-width)}.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::before,.bs-popover-start>.popover-arrow::after,.bs-popover-start>.popover-arrow::before{border-width:calc(var(--bs-popover-arrow-width) * .5) 0 calc(var(--bs-popover-arrow-width) * .5) var(--bs-popover-arrow-height)}.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::before,.bs-popover-start>.popover-arrow::before{right:0;border-left-color:var(--bs-popover-arrow-border)}.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::after,.bs-popover-start>.popover-arrow::after{right:var(--bs-popover-border-width);border-left-color:var(--bs-popover-bg)}.popover-header{padding:var(--bs-popover-header-padding-y) var(--bs-popover-header-padding-x);margin-bottom:0;font-size:var(--bs-popover-header-font-size);color:var(--bs-popover-header-color);background-color:var(--bs-popover-header-bg);border-bottom:var(--bs-popover-border-width) solid var(--bs-popover-border-color);border-top-left-radius:var(--bs-popover-inner-border-radius);border-top-right-radius:var(--bs-popover-inner-border-radius)}.popover-header:empty{display:none}.popover-body{padding:var(--bs-popover-body-padding-y) var(--bs-popover-body-padding-x);color:var(--bs-popover-body-color)}.carousel{position:relative}.carousel.pointer-event{touch-action:pan-y}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner::after{display:block;clear:both;content:""}.carousel-item{position:relative;display:none;float:left;width:100%;margin-right:-100%;-webkit-backface-visibility:hidden;backface-visibility:hidden;transition:transform .6s ease-in-out}@media (prefers-reduced-motion:reduce){.carousel-item{transition:none}}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.active.carousel-item-end,.carousel-item-next:not(.carousel-item-start){transform:translateX(100%)}.active.carousel-item-start,.carousel-item-prev:not(.carousel-item-end){transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;transition-property:opacity;transform:none}.carousel-fade .carousel-item-next.carousel-item-start,.carousel-fade .carousel-item-prev.carousel-item-end,.carousel-fade .carousel-item.active{z-index:1;opacity:1}.carousel-fade .active.carousel-item-end,.carousel-fade .active.carousel-item-start{z-index:0;opacity:0;transition:opacity 0s .6s}@media (prefers-reduced-motion:reduce){.carousel-fade .active.carousel-item-end,.carousel-fade .active.carousel-item-start{transition:none}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;z-index:1;display:flex;align-items:center;justify-content:center;width:15%;padding:0;color:#fff;text-align:center;background:0 0;filter:var(--bs-carousel-control-icon-filter);border:0;opacity:.5;transition:opacity .15s ease}@media (prefers-reduced-motion:reduce){.carousel-control-next,.carousel-control-prev{transition:none}}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:2rem;height:2rem;background-repeat:no-repeat;background-position:50%;background-size:100% 100%}.carousel-control-prev-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0'/%3e%3c/svg%3e")}.carousel-control-next-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708'/%3e%3c/svg%3e")}.carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:2;display:flex;justify-content:center;padding:0;margin-right:15%;margin-bottom:1rem;margin-left:15%}.carousel-indicators [data-bs-target]{box-sizing:content-box;flex:0 1 auto;width:30px;height:3px;padding:0;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:var(--bs-carousel-indicator-active-bg);background-clip:padding-box;border:0;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;transition:opacity .6s ease}@media (prefers-reduced-motion:reduce){.carousel-indicators [data-bs-target]{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{position:absolute;right:15%;bottom:1.25rem;left:15%;padding-top:1.25rem;padding-bottom:1.25rem;color:var(--bs-carousel-caption-color);text-align:center}.carousel-dark{--bs-carousel-indicator-active-bg:#000;--bs-carousel-caption-color:#000;--bs-carousel-control-icon-filter:invert(1) grayscale(100)}:root,[data-bs-theme=light]{--bs-carousel-indicator-active-bg:#fff;--bs-carousel-caption-color:#fff;--bs-carousel-control-icon-filter: }[data-bs-theme=dark]{--bs-carousel-indicator-active-bg:#000;--bs-carousel-caption-color:#000;--bs-carousel-control-icon-filter:invert(1) grayscale(100)}.spinner-border,.spinner-grow{display:inline-block;width:var(--bs-spinner-width);height:var(--bs-spinner-height);vertical-align:var(--bs-spinner-vertical-align);border-radius:50%;animation:var(--bs-spinner-animation-speed) linear infinite var(--bs-spinner-animation-name)}@keyframes spinner-border{to{transform:rotate(360deg)}}.spinner-border{--bs-spinner-width:2rem;--bs-spinner-height:2rem;--bs-spinner-vertical-align:-0.125em;--bs-spinner-border-width:0.25em;--bs-spinner-animation-speed:0.75s;--bs-spinner-animation-name:spinner-border;border:var(--bs-spinner-border-width) solid currentcolor;border-right-color:transparent}.spinner-border-sm{--bs-spinner-width:1rem;--bs-spinner-height:1rem;--bs-spinner-border-width:0.2em}@keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1;transform:none}}.spinner-grow{--bs-spinner-width:2rem;--bs-spinner-height:2rem;--bs-spinner-vertical-align:-0.125em;--bs-spinner-animation-speed:0.75s;--bs-spinner-animation-name:spinner-grow;background-color:currentcolor;opacity:0}.spinner-grow-sm{--bs-spinner-width:1rem;--bs-spinner-height:1rem}@media (prefers-reduced-motion:reduce){.spinner-border,.spinner-grow{--bs-spinner-animation-speed:1.5s}}.offcanvas,.offcanvas-lg,.offcanvas-md,.offcanvas-sm,.offcanvas-xl,.offcanvas-xxl{--bs-offcanvas-zindex:1045;--bs-offcanvas-width:400px;--bs-offcanvas-height:30vh;--bs-offcanvas-padding-x:1rem;--bs-offcanvas-padding-y:1rem;--bs-offcanvas-color:var(--bs-body-color);--bs-offcanvas-bg:var(--bs-body-bg);--bs-offcanvas-border-width:var(--bs-border-width);--bs-offcanvas-border-color:var(--bs-border-color-translucent);--bs-offcanvas-box-shadow:var(--bs-box-shadow-sm);--bs-offcanvas-transition:transform 0.3s ease-in-out;--bs-offcanvas-title-line-height:1.5}@media (max-width:575.98px){.offcanvas-sm{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}}@media (max-width:575.98px) and (prefers-reduced-motion:reduce){.offcanvas-sm{transition:none}}@media (max-width:575.98px){.offcanvas-sm.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}.offcanvas-sm.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}.offcanvas-sm.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-sm.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-sm.show:not(.hiding),.offcanvas-sm.showing{transform:none}.offcanvas-sm.hiding,.offcanvas-sm.show,.offcanvas-sm.showing{visibility:visible}}@media (min-width:576px){.offcanvas-sm{--bs-offcanvas-height:auto;--bs-offcanvas-border-width:0;background-color:transparent!important}.offcanvas-sm .offcanvas-header{display:none}.offcanvas-sm .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible;background-color:transparent!important}}@media (max-width:767.98px){.offcanvas-md{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}}@media (max-width:767.98px) and (prefers-reduced-motion:reduce){.offcanvas-md{transition:none}}@media (max-width:767.98px){.offcanvas-md.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}.offcanvas-md.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}.offcanvas-md.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-md.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-md.show:not(.hiding),.offcanvas-md.showing{transform:none}.offcanvas-md.hiding,.offcanvas-md.show,.offcanvas-md.showing{visibility:visible}}@media (min-width:768px){.offcanvas-md{--bs-offcanvas-height:auto;--bs-offcanvas-border-width:0;background-color:transparent!important}.offcanvas-md .offcanvas-header{display:none}.offcanvas-md .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible;background-color:transparent!important}}@media (max-width:991.98px){.offcanvas-lg{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}}@media (max-width:991.98px) and (prefers-reduced-motion:reduce){.offcanvas-lg{transition:none}}@media (max-width:991.98px){.offcanvas-lg.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}.offcanvas-lg.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}.offcanvas-lg.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-lg.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-lg.show:not(.hiding),.offcanvas-lg.showing{transform:none}.offcanvas-lg.hiding,.offcanvas-lg.show,.offcanvas-lg.showing{visibility:visible}}@media (min-width:992px){.offcanvas-lg{--bs-offcanvas-height:auto;--bs-offcanvas-border-width:0;background-color:transparent!important}.offcanvas-lg .offcanvas-header{display:none}.offcanvas-lg .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible;background-color:transparent!important}}@media (max-width:1199.98px){.offcanvas-xl{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}}@media (max-width:1199.98px) and (prefers-reduced-motion:reduce){.offcanvas-xl{transition:none}}@media (max-width:1199.98px){.offcanvas-xl.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}.offcanvas-xl.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}.offcanvas-xl.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-xl.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-xl.show:not(.hiding),.offcanvas-xl.showing{transform:none}.offcanvas-xl.hiding,.offcanvas-xl.show,.offcanvas-xl.showing{visibility:visible}}@media (min-width:1200px){.offcanvas-xl{--bs-offcanvas-height:auto;--bs-offcanvas-border-width:0;background-color:transparent!important}.offcanvas-xl .offcanvas-header{display:none}.offcanvas-xl .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible;background-color:transparent!important}}@media (max-width:1399.98px){.offcanvas-xxl{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}}@media (max-width:1399.98px) and (prefers-reduced-motion:reduce){.offcanvas-xxl{transition:none}}@media (max-width:1399.98px){.offcanvas-xxl.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}.offcanvas-xxl.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}.offcanvas-xxl.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-xxl.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-xxl.show:not(.hiding),.offcanvas-xxl.showing{transform:none}.offcanvas-xxl.hiding,.offcanvas-xxl.show,.offcanvas-xxl.showing{visibility:visible}}@media (min-width:1400px){.offcanvas-xxl{--bs-offcanvas-height:auto;--bs-offcanvas-border-width:0;background-color:transparent!important}.offcanvas-xxl .offcanvas-header{display:none}.offcanvas-xxl .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible;background-color:transparent!important}}.offcanvas{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}@media (prefers-reduced-motion:reduce){.offcanvas{transition:none}}.offcanvas.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}.offcanvas.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}.offcanvas.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas.show:not(.hiding),.offcanvas.showing{transform:none}.offcanvas.hiding,.offcanvas.show,.offcanvas.showing{visibility:visible}.offcanvas-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#000}.offcanvas-backdrop.fade{opacity:0}.offcanvas-backdrop.show{opacity:.5}.offcanvas-header{display:flex;align-items:center;padding:var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x)}.offcanvas-header .btn-close{padding:calc(var(--bs-offcanvas-padding-y) * .5) calc(var(--bs-offcanvas-padding-x) * .5);margin-top:calc(-.5 * var(--bs-offcanvas-padding-y));margin-right:calc(-.5 * var(--bs-offcanvas-padding-x));margin-bottom:calc(-.5 * var(--bs-offcanvas-padding-y));margin-left:auto}.offcanvas-title{margin-bottom:0;line-height:var(--bs-offcanvas-title-line-height)}.offcanvas-body{flex-grow:1;padding:var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x);overflow-y:auto}.placeholder{display:inline-block;min-height:1em;vertical-align:middle;cursor:wait;background-color:currentcolor;opacity:.5}.placeholder.btn::before{display:inline-block;content:""}.placeholder-xs{min-height:.6em}.placeholder-sm{min-height:.8em}.placeholder-lg{min-height:1.2em}.placeholder-glow .placeholder{animation:placeholder-glow 2s ease-in-out infinite}@keyframes placeholder-glow{50%{opacity:.2}}.placeholder-wave{-webkit-mask-image:linear-gradient(130deg,#000 55%,rgba(0,0,0,0.8) 75%,#000 95%);mask-image:linear-gradient(130deg,#000 55%,rgba(0,0,0,0.8) 75%,#000 95%);-webkit-mask-size:200% 100%;mask-size:200% 100%;animation:placeholder-wave 2s linear infinite}@keyframes placeholder-wave{100%{-webkit-mask-position:-200% 0%;mask-position:-200% 0%}}.clearfix::after{display:block;clear:both;content:""}.text-bg-primary{color:#fff!important;background-color:RGBA(var(--bs-primary-rgb),var(--bs-bg-opacity,1))!important}.text-bg-secondary{color:#fff!important;background-color:RGBA(var(--bs-secondary-rgb),var(--bs-bg-opacity,1))!important}.text-bg-success{color:#fff!important;background-color:RGBA(var(--bs-success-rgb),var(--bs-bg-opacity,1))!important}.text-bg-info{color:#000!important;background-color:RGBA(var(--bs-info-rgb),var(--bs-bg-opacity,1))!important}.text-bg-warning{color:#000!important;background-color:RGBA(var(--bs-warning-rgb),var(--bs-bg-opacity,1))!important}.text-bg-danger{color:#fff!important;background-color:RGBA(var(--bs-danger-rgb),var(--bs-bg-opacity,1))!important}.text-bg-light{color:#000!important;background-color:RGBA(var(--bs-light-rgb),var(--bs-bg-opacity,1))!important}.text-bg-dark{color:#fff!important;background-color:RGBA(var(--bs-dark-rgb),var(--bs-bg-opacity,1))!important}.link-primary{color:RGBA(var(--bs-primary-rgb),var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--bs-primary-rgb),var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--bs-primary-rgb),var(--bs-link-underline-opacity,1))!important}.link-primary:focus,.link-primary:hover{color:RGBA(10,88,202,var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(10,88,202,var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(10,88,202,var(--bs-link-underline-opacity,1))!important}.link-secondary{color:RGBA(var(--bs-secondary-rgb),var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--bs-secondary-rgb),var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--bs-secondary-rgb),var(--bs-link-underline-opacity,1))!important}.link-secondary:focus,.link-secondary:hover{color:RGBA(86,94,100,var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(86,94,100,var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(86,94,100,var(--bs-link-underline-opacity,1))!important}.link-success{color:RGBA(var(--bs-success-rgb),var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--bs-success-rgb),var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--bs-success-rgb),var(--bs-link-underline-opacity,1))!important}.link-success:focus,.link-success:hover{color:RGBA(20,108,67,var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(20,108,67,var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(20,108,67,var(--bs-link-underline-opacity,1))!important}.link-info{color:RGBA(var(--bs-info-rgb),var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--bs-info-rgb),var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--bs-info-rgb),var(--bs-link-underline-opacity,1))!important}.link-info:focus,.link-info:hover{color:RGBA(61,213,243,var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(61,213,243,var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(61,213,243,var(--bs-link-underline-opacity,1))!important}.link-warning{color:RGBA(var(--bs-warning-rgb),var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--bs-warning-rgb),var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--bs-warning-rgb),var(--bs-link-underline-opacity,1))!important}.link-warning:focus,.link-warning:hover{color:RGBA(255,205,57,var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(255,205,57,var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(255,205,57,var(--bs-link-underline-opacity,1))!important}.link-danger{color:RGBA(var(--bs-danger-rgb),var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--bs-danger-rgb),var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--bs-danger-rgb),var(--bs-link-underline-opacity,1))!important}.link-danger:focus,.link-danger:hover{color:RGBA(176,42,55,var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(176,42,55,var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(176,42,55,var(--bs-link-underline-opacity,1))!important}.link-light{color:RGBA(var(--bs-light-rgb),var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--bs-light-rgb),var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--bs-light-rgb),var(--bs-link-underline-opacity,1))!important}.link-light:focus,.link-light:hover{color:RGBA(249,250,251,var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(249,250,251,var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(249,250,251,var(--bs-link-underline-opacity,1))!important}.link-dark{color:RGBA(var(--bs-dark-rgb),var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--bs-dark-rgb),var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--bs-dark-rgb),var(--bs-link-underline-opacity,1))!important}.link-dark:focus,.link-dark:hover{color:RGBA(26,30,33,var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(26,30,33,var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(26,30,33,var(--bs-link-underline-opacity,1))!important}.link-body-emphasis{color:RGBA(var(--bs-emphasis-color-rgb),var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--bs-emphasis-color-rgb),var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--bs-emphasis-color-rgb),var(--bs-link-underline-opacity,1))!important}.link-body-emphasis:focus,.link-body-emphasis:hover{color:RGBA(var(--bs-emphasis-color-rgb),var(--bs-link-opacity,.75))!important;-webkit-text-decoration-color:RGBA(var(--bs-emphasis-color-rgb),var(--bs-link-underline-opacity,0.75))!important;text-decoration-color:RGBA(var(--bs-emphasis-color-rgb),var(--bs-link-underline-opacity,0.75))!important}.focus-ring:focus{outline:0;box-shadow:var(--bs-focus-ring-x,0) var(--bs-focus-ring-y,0) var(--bs-focus-ring-blur,0) var(--bs-focus-ring-width) var(--bs-focus-ring-color)}.icon-link{display:inline-flex;gap:.375rem;align-items:center;-webkit-text-decoration-color:rgba(var(--bs-link-color-rgb),var(--bs-link-opacity,0.5));text-decoration-color:rgba(var(--bs-link-color-rgb),var(--bs-link-opacity,0.5));text-underline-offset:0.25em;-webkit-backface-visibility:hidden;backface-visibility:hidden}.icon-link>.bi{flex-shrink:0;width:1em;height:1em;fill:currentcolor;transition:.2s ease-in-out transform}@media (prefers-reduced-motion:reduce){.icon-link>.bi{transition:none}}.icon-link-hover:focus-visible>.bi,.icon-link-hover:hover>.bi{transform:var(--bs-icon-link-transform,translate3d(.25em,0,0))}.ratio{position:relative;width:100%}.ratio::before{display:block;padding-top:var(--bs-aspect-ratio);content:""}.ratio>*{position:absolute;top:0;left:0;width:100%;height:100%}.ratio-1x1{--bs-aspect-ratio:100%}.ratio-4x3{--bs-aspect-ratio:75%}.ratio-16x9{--bs-aspect-ratio:56.25%}.ratio-21x9{--bs-aspect-ratio:42.8571428571%}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}.sticky-bottom{position:-webkit-sticky;position:sticky;bottom:0;z-index:1020}@media (min-width:576px){.sticky-sm-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}.sticky-sm-bottom{position:-webkit-sticky;position:sticky;bottom:0;z-index:1020}}@media (min-width:768px){.sticky-md-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}.sticky-md-bottom{position:-webkit-sticky;position:sticky;bottom:0;z-index:1020}}@media (min-width:992px){.sticky-lg-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}.sticky-lg-bottom{position:-webkit-sticky;position:sticky;bottom:0;z-index:1020}}@media (min-width:1200px){.sticky-xl-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}.sticky-xl-bottom{position:-webkit-sticky;position:sticky;bottom:0;z-index:1020}}@media (min-width:1400px){.sticky-xxl-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}.sticky-xxl-bottom{position:-webkit-sticky;position:sticky;bottom:0;z-index:1020}}.hstack{display:flex;flex-direction:row;align-items:center;align-self:stretch}.vstack{display:flex;flex:1 1 auto;flex-direction:column;align-self:stretch}.visually-hidden,.visually-hidden-focusable:not(:focus):not(:focus-within){width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border:0!important}.visually-hidden-focusable:not(:focus):not(:focus-within):not(caption),.visually-hidden:not(caption){position:absolute!important}.visually-hidden *,.visually-hidden-focusable:not(:focus):not(:focus-within) *{overflow:hidden!important}.stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;content:""}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vr{display:inline-block;align-self:stretch;width:var(--bs-border-width);min-height:1em;background-color:currentcolor;opacity:.25}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.float-start{float:left!important}.float-end{float:right!important}.float-none{float:none!important}.object-fit-contain{-o-object-fit:contain!important;object-fit:contain!important}.object-fit-cover{-o-object-fit:cover!important;object-fit:cover!important}.object-fit-fill{-o-object-fit:fill!important;object-fit:fill!important}.object-fit-scale{-o-object-fit:scale-down!important;object-fit:scale-down!important}.object-fit-none{-o-object-fit:none!important;object-fit:none!important}.opacity-0{opacity:0!important}.opacity-25{opacity:.25!important}.opacity-50{opacity:.5!important}.opacity-75{opacity:.75!important}.opacity-100{opacity:1!important}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!important}.overflow-visible{overflow:visible!important}.overflow-scroll{overflow:scroll!important}.overflow-x-auto{overflow-x:auto!important}.overflow-x-hidden{overflow-x:hidden!important}.overflow-x-visible{overflow-x:visible!important}.overflow-x-scroll{overflow-x:scroll!important}.overflow-y-auto{overflow-y:auto!important}.overflow-y-hidden{overflow-y:hidden!important}.overflow-y-visible{overflow-y:visible!important}.overflow-y-scroll{overflow-y:scroll!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-grid{display:grid!important}.d-inline-grid{display:inline-grid!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:flex!important}.d-inline-flex{display:inline-flex!important}.d-none{display:none!important}.shadow{box-shadow:var(--bs-box-shadow)!important}.shadow-sm{box-shadow:var(--bs-box-shadow-sm)!important}.shadow-lg{box-shadow:var(--bs-box-shadow-lg)!important}.shadow-none{box-shadow:none!important}.focus-ring-primary{--bs-focus-ring-color:rgba(var(--bs-primary-rgb), var(--bs-focus-ring-opacity))}.focus-ring-secondary{--bs-focus-ring-color:rgba(var(--bs-secondary-rgb), var(--bs-focus-ring-opacity))}.focus-ring-success{--bs-focus-ring-color:rgba(var(--bs-success-rgb), var(--bs-focus-ring-opacity))}.focus-ring-info{--bs-focus-ring-color:rgba(var(--bs-info-rgb), var(--bs-focus-ring-opacity))}.focus-ring-warning{--bs-focus-ring-color:rgba(var(--bs-warning-rgb), var(--bs-focus-ring-opacity))}.focus-ring-danger{--bs-focus-ring-color:rgba(var(--bs-danger-rgb), var(--bs-focus-ring-opacity))}.focus-ring-light{--bs-focus-ring-color:rgba(var(--bs-light-rgb), var(--bs-focus-ring-opacity))}.focus-ring-dark{--bs-focus-ring-color:rgba(var(--bs-dark-rgb), var(--bs-focus-ring-opacity))}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;position:sticky!important}.top-0{top:0!important}.top-50{top:50%!important}.top-100{top:100%!important}.bottom-0{bottom:0!important}.bottom-50{bottom:50%!important}.bottom-100{bottom:100%!important}.start-0{left:0!important}.start-50{left:50%!important}.start-100{left:100%!important}.end-0{right:0!important}.end-50{right:50%!important}.end-100{right:100%!important}.translate-middle{transform:translate(-50%,-50%)!important}.translate-middle-x{transform:translateX(-50%)!important}.translate-middle-y{transform:translateY(-50%)!important}.border{border:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color)!important}.border-0{border:0!important}.border-top{border-top:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color)!important}.border-top-0{border-top:0!important}.border-end{border-right:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color)!important}.border-end-0{border-right:0!important}.border-bottom{border-bottom:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color)!important}.border-bottom-0{border-bottom:0!important}.border-start{border-left:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color)!important}.border-start-0{border-left:0!important}.border-primary{--bs-border-opacity:1;border-color:rgba(var(--bs-primary-rgb),var(--bs-border-opacity))!important}.border-secondary{--bs-border-opacity:1;border-color:rgba(var(--bs-secondary-rgb),var(--bs-border-opacity))!important}.border-success{--bs-border-opacity:1;border-color:rgba(var(--bs-success-rgb),var(--bs-border-opacity))!important}.border-info{--bs-border-opacity:1;border-color:rgba(var(--bs-info-rgb),var(--bs-border-opacity))!important}.border-warning{--bs-border-opacity:1;border-color:rgba(var(--bs-warning-rgb),var(--bs-border-opacity))!important}.border-danger{--bs-border-opacity:1;border-color:rgba(var(--bs-danger-rgb),var(--bs-border-opacity))!important}.border-light{--bs-border-opacity:1;border-color:rgba(var(--bs-light-rgb),var(--bs-border-opacity))!important}.border-dark{--bs-border-opacity:1;border-color:rgba(var(--bs-dark-rgb),var(--bs-border-opacity))!important}.border-black{--bs-border-opacity:1;border-color:rgba(var(--bs-black-rgb),var(--bs-border-opacity))!important}.border-white{--bs-border-opacity:1;border-color:rgba(var(--bs-white-rgb),var(--bs-border-opacity))!important}.border-primary-subtle{border-color:var(--bs-primary-border-subtle)!important}.border-secondary-subtle{border-color:var(--bs-secondary-border-subtle)!important}.border-success-subtle{border-color:var(--bs-success-border-subtle)!important}.border-info-subtle{border-color:var(--bs-info-border-subtle)!important}.border-warning-subtle{border-color:var(--bs-warning-border-subtle)!important}.border-danger-subtle{border-color:var(--bs-danger-border-subtle)!important}.border-light-subtle{border-color:var(--bs-light-border-subtle)!important}.border-dark-subtle{border-color:var(--bs-dark-border-subtle)!important}.border-1{border-width:1px!important}.border-2{border-width:2px!important}.border-3{border-width:3px!important}.border-4{border-width:4px!important}.border-5{border-width:5px!important}.border-opacity-10{--bs-border-opacity:0.1}.border-opacity-25{--bs-border-opacity:0.25}.border-opacity-50{--bs-border-opacity:0.5}.border-opacity-75{--bs-border-opacity:0.75}.border-opacity-100{--bs-border-opacity:1}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.mw-100{max-width:100%!important}.vw-100{width:100vw!important}.min-vw-100{min-width:100vw!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mh-100{max-height:100%!important}.vh-100{height:100vh!important}.min-vh-100{min-height:100vh!important}.flex-fill{flex:1 1 auto!important}.flex-row{flex-direction:row!important}.flex-column{flex-direction:column!important}.flex-row-reverse{flex-direction:row-reverse!important}.flex-column-reverse{flex-direction:column-reverse!important}.flex-grow-0{flex-grow:0!important}.flex-grow-1{flex-grow:1!important}.flex-shrink-0{flex-shrink:0!important}.flex-shrink-1{flex-shrink:1!important}.flex-wrap{flex-wrap:wrap!important}.flex-nowrap{flex-wrap:nowrap!important}.flex-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-start{justify-content:flex-start!important}.justify-content-end{justify-content:flex-end!important}.justify-content-center{justify-content:center!important}.justify-content-between{justify-content:space-between!important}.justify-content-around{justify-content:space-around!important}.justify-content-evenly{justify-content:space-evenly!important}.align-items-start{align-items:flex-start!important}.align-items-end{align-items:flex-end!important}.align-items-center{align-items:center!important}.align-items-baseline{align-items:baseline!important}.align-items-stretch{align-items:stretch!important}.align-content-start{align-content:flex-start!important}.align-content-end{align-content:flex-end!important}.align-content-center{align-content:center!important}.align-content-between{align-content:space-between!important}.align-content-around{align-content:space-around!important}.align-content-stretch{align-content:stretch!important}.align-self-auto{align-self:auto!important}.align-self-start{align-self:flex-start!important}.align-self-end{align-self:flex-end!important}.align-self-center{align-self:center!important}.align-self-baseline{align-self:baseline!important}.align-self-stretch{align-self:stretch!important}.order-first{order:-1!important}.order-0{order:0!important}.order-1{order:1!important}.order-2{order:2!important}.order-3{order:3!important}.order-4{order:4!important}.order-5{order:5!important}.order-last{order:6!important}.m-0{margin:0!important}.m-1{margin:.25rem!important}.m-2{margin:.5rem!important}.m-3{margin:1rem!important}.m-4{margin:1.5rem!important}.m-5{margin:3rem!important}.m-auto{margin:auto!important}.mx-0{margin-right:0!important;margin-left:0!important}.mx-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-3{margin-right:1rem!important;margin-left:1rem!important}.mx-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-5{margin-right:3rem!important;margin-left:3rem!important}.mx-auto{margin-right:auto!important;margin-left:auto!important}.my-0{margin-top:0!important;margin-bottom:0!important}.my-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-0{margin-top:0!important}.mt-1{margin-top:.25rem!important}.mt-2{margin-top:.5rem!important}.mt-3{margin-top:1rem!important}.mt-4{margin-top:1.5rem!important}.mt-5{margin-top:3rem!important}.mt-auto{margin-top:auto!important}.me-0{margin-right:0!important}.me-1{margin-right:.25rem!important}.me-2{margin-right:.5rem!important}.me-3{margin-right:1rem!important}.me-4{margin-right:1.5rem!important}.me-5{margin-right:3rem!important}.me-auto{margin-right:auto!important}.mb-0{margin-bottom:0!important}.mb-1{margin-bottom:.25rem!important}.mb-2{margin-bottom:.5rem!important}.mb-3{margin-bottom:1rem!important}.mb-4{margin-bottom:1.5rem!important}.mb-5{margin-bottom:3rem!important}.mb-auto{margin-bottom:auto!important}.ms-0{margin-left:0!important}.ms-1{margin-left:.25rem!important}.ms-2{margin-left:.5rem!important}.ms-3{margin-left:1rem!important}.ms-4{margin-left:1.5rem!important}.ms-5{margin-left:3rem!important}.ms-auto{margin-left:auto!important}.p-0{padding:0!important}.p-1{padding:.25rem!important}.p-2{padding:.5rem!important}.p-3{padding:1rem!important}.p-4{padding:1.5rem!important}.p-5{padding:3rem!important}.px-0{padding-right:0!important;padding-left:0!important}.px-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-3{padding-right:1rem!important;padding-left:1rem!important}.px-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-5{padding-right:3rem!important;padding-left:3rem!important}.py-0{padding-top:0!important;padding-bottom:0!important}.py-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-0{padding-top:0!important}.pt-1{padding-top:.25rem!important}.pt-2{padding-top:.5rem!important}.pt-3{padding-top:1rem!important}.pt-4{padding-top:1.5rem!important}.pt-5{padding-top:3rem!important}.pe-0{padding-right:0!important}.pe-1{padding-right:.25rem!important}.pe-2{padding-right:.5rem!important}.pe-3{padding-right:1rem!important}.pe-4{padding-right:1.5rem!important}.pe-5{padding-right:3rem!important}.pb-0{padding-bottom:0!important}.pb-1{padding-bottom:.25rem!important}.pb-2{padding-bottom:.5rem!important}.pb-3{padding-bottom:1rem!important}.pb-4{padding-bottom:1.5rem!important}.pb-5{padding-bottom:3rem!important}.ps-0{padding-left:0!important}.ps-1{padding-left:.25rem!important}.ps-2{padding-left:.5rem!important}.ps-3{padding-left:1rem!important}.ps-4{padding-left:1.5rem!important}.ps-5{padding-left:3rem!important}.gap-0{gap:0!important}.gap-1{gap:.25rem!important}.gap-2{gap:.5rem!important}.gap-3{gap:1rem!important}.gap-4{gap:1.5rem!important}.gap-5{gap:3rem!important}.row-gap-0{row-gap:0!important}.row-gap-1{row-gap:.25rem!important}.row-gap-2{row-gap:.5rem!important}.row-gap-3{row-gap:1rem!important}.row-gap-4{row-gap:1.5rem!important}.row-gap-5{row-gap:3rem!important}.column-gap-0{-moz-column-gap:0!important;column-gap:0!important}.column-gap-1{-moz-column-gap:0.25rem!important;column-gap:.25rem!important}.column-gap-2{-moz-column-gap:0.5rem!important;column-gap:.5rem!important}.column-gap-3{-moz-column-gap:1rem!important;column-gap:1rem!important}.column-gap-4{-moz-column-gap:1.5rem!important;column-gap:1.5rem!important}.column-gap-5{-moz-column-gap:3rem!important;column-gap:3rem!important}.font-monospace{font-family:var(--bs-font-monospace)!important}.fs-1{font-size:calc(1.375rem + 1.5vw)!important}.fs-2{font-size:calc(1.325rem + .9vw)!important}.fs-3{font-size:calc(1.3rem + .6vw)!important}.fs-4{font-size:calc(1.275rem + .3vw)!important}.fs-5{font-size:1.25rem!important}.fs-6{font-size:1rem!important}.fst-italic{font-style:italic!important}.fst-normal{font-style:normal!important}.fw-lighter{font-weight:lighter!important}.fw-light{font-weight:300!important}.fw-normal{font-weight:400!important}.fw-medium{font-weight:500!important}.fw-semibold{font-weight:600!important}.fw-bold{font-weight:700!important}.fw-bolder{font-weight:bolder!important}.lh-1{line-height:1!important}.lh-sm{line-height:1.25!important}.lh-base{line-height:1.5!important}.lh-lg{line-height:2!important}.text-start{text-align:left!important}.text-end{text-align:right!important}.text-center{text-align:center!important}.text-decoration-none{text-decoration:none!important}.text-decoration-underline{text-decoration:underline!important}.text-decoration-line-through{text-decoration:line-through!important}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.text-wrap{white-space:normal!important}.text-nowrap{white-space:nowrap!important}.text-break{word-wrap:break-word!important;word-break:break-word!important}.text-primary{--bs-text-opacity:1;color:rgba(var(--bs-primary-rgb),var(--bs-text-opacity))!important}.text-secondary{--bs-text-opacity:1;color:rgba(var(--bs-secondary-rgb),var(--bs-text-opacity))!important}.text-success{--bs-text-opacity:1;color:rgba(var(--bs-success-rgb),var(--bs-text-opacity))!important}.text-info{--bs-text-opacity:1;color:rgba(var(--bs-info-rgb),var(--bs-text-opacity))!important}.text-warning{--bs-text-opacity:1;color:rgba(var(--bs-warning-rgb),var(--bs-text-opacity))!important}.text-danger{--bs-text-opacity:1;color:rgba(var(--bs-danger-rgb),var(--bs-text-opacity))!important}.text-light{--bs-text-opacity:1;color:rgba(var(--bs-light-rgb),var(--bs-text-opacity))!important}.text-dark{--bs-text-opacity:1;color:rgba(var(--bs-dark-rgb),var(--bs-text-opacity))!important}.text-black{--bs-text-opacity:1;color:rgba(var(--bs-black-rgb),var(--bs-text-opacity))!important}.text-white{--bs-text-opacity:1;color:rgba(var(--bs-white-rgb),var(--bs-text-opacity))!important}.text-body{--bs-text-opacity:1;color:rgba(var(--bs-body-color-rgb),var(--bs-text-opacity))!important}.text-muted{--bs-text-opacity:1;color:var(--bs-secondary-color)!important}.text-black-50{--bs-text-opacity:1;color:rgba(0,0,0,.5)!important}.text-white-50{--bs-text-opacity:1;color:rgba(255,255,255,.5)!important}.text-body-secondary{--bs-text-opacity:1;color:var(--bs-secondary-color)!important}.text-body-tertiary{--bs-text-opacity:1;color:var(--bs-tertiary-color)!important}.text-body-emphasis{--bs-text-opacity:1;color:var(--bs-emphasis-color)!important}.text-reset{--bs-text-opacity:1;color:inherit!important}.text-opacity-25{--bs-text-opacity:0.25}.text-opacity-50{--bs-text-opacity:0.5}.text-opacity-75{--bs-text-opacity:0.75}.text-opacity-100{--bs-text-opacity:1}.text-primary-emphasis{color:var(--bs-primary-text-emphasis)!important}.text-secondary-emphasis{color:var(--bs-secondary-text-emphasis)!important}.text-success-emphasis{color:var(--bs-success-text-emphasis)!important}.text-info-emphasis{color:var(--bs-info-text-emphasis)!important}.text-warning-emphasis{color:var(--bs-warning-text-emphasis)!important}.text-danger-emphasis{color:var(--bs-danger-text-emphasis)!important}.text-light-emphasis{color:var(--bs-light-text-emphasis)!important}.text-dark-emphasis{color:var(--bs-dark-text-emphasis)!important}.link-opacity-10{--bs-link-opacity:0.1}.link-opacity-10-hover:hover{--bs-link-opacity:0.1}.link-opacity-25{--bs-link-opacity:0.25}.link-opacity-25-hover:hover{--bs-link-opacity:0.25}.link-opacity-50{--bs-link-opacity:0.5}.link-opacity-50-hover:hover{--bs-link-opacity:0.5}.link-opacity-75{--bs-link-opacity:0.75}.link-opacity-75-hover:hover{--bs-link-opacity:0.75}.link-opacity-100{--bs-link-opacity:1}.link-opacity-100-hover:hover{--bs-link-opacity:1}.link-offset-1{text-underline-offset:0.125em!important}.link-offset-1-hover:hover{text-underline-offset:0.125em!important}.link-offset-2{text-underline-offset:0.25em!important}.link-offset-2-hover:hover{text-underline-offset:0.25em!important}.link-offset-3{text-underline-offset:0.375em!important}.link-offset-3-hover:hover{text-underline-offset:0.375em!important}.link-underline-primary{--bs-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--bs-primary-rgb),var(--bs-link-underline-opacity))!important;text-decoration-color:rgba(var(--bs-primary-rgb),var(--bs-link-underline-opacity))!important}.link-underline-secondary{--bs-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--bs-secondary-rgb),var(--bs-link-underline-opacity))!important;text-decoration-color:rgba(var(--bs-secondary-rgb),var(--bs-link-underline-opacity))!important}.link-underline-success{--bs-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--bs-success-rgb),var(--bs-link-underline-opacity))!important;text-decoration-color:rgba(var(--bs-success-rgb),var(--bs-link-underline-opacity))!important}.link-underline-info{--bs-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--bs-info-rgb),var(--bs-link-underline-opacity))!important;text-decoration-color:rgba(var(--bs-info-rgb),var(--bs-link-underline-opacity))!important}.link-underline-warning{--bs-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--bs-warning-rgb),var(--bs-link-underline-opacity))!important;text-decoration-color:rgba(var(--bs-warning-rgb),var(--bs-link-underline-opacity))!important}.link-underline-danger{--bs-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--bs-danger-rgb),var(--bs-link-underline-opacity))!important;text-decoration-color:rgba(var(--bs-danger-rgb),var(--bs-link-underline-opacity))!important}.link-underline-light{--bs-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--bs-light-rgb),var(--bs-link-underline-opacity))!important;text-decoration-color:rgba(var(--bs-light-rgb),var(--bs-link-underline-opacity))!important}.link-underline-dark{--bs-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--bs-dark-rgb),var(--bs-link-underline-opacity))!important;text-decoration-color:rgba(var(--bs-dark-rgb),var(--bs-link-underline-opacity))!important}.link-underline{--bs-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--bs-link-color-rgb),var(--bs-link-underline-opacity,1))!important;text-decoration-color:rgba(var(--bs-link-color-rgb),var(--bs-link-underline-opacity,1))!important}.link-underline-opacity-0{--bs-link-underline-opacity:0}.link-underline-opacity-0-hover:hover{--bs-link-underline-opacity:0}.link-underline-opacity-10{--bs-link-underline-opacity:0.1}.link-underline-opacity-10-hover:hover{--bs-link-underline-opacity:0.1}.link-underline-opacity-25{--bs-link-underline-opacity:0.25}.link-underline-opacity-25-hover:hover{--bs-link-underline-opacity:0.25}.link-underline-opacity-50{--bs-link-underline-opacity:0.5}.link-underline-opacity-50-hover:hover{--bs-link-underline-opacity:0.5}.link-underline-opacity-75{--bs-link-underline-opacity:0.75}.link-underline-opacity-75-hover:hover{--bs-link-underline-opacity:0.75}.link-underline-opacity-100{--bs-link-underline-opacity:1}.link-underline-opacity-100-hover:hover{--bs-link-underline-opacity:1}.bg-primary{--bs-bg-opacity:1;background-color:rgba(var(--bs-primary-rgb),var(--bs-bg-opacity))!important}.bg-secondary{--bs-bg-opacity:1;background-color:rgba(var(--bs-secondary-rgb),var(--bs-bg-opacity))!important}.bg-success{--bs-bg-opacity:1;background-color:rgba(var(--bs-success-rgb),var(--bs-bg-opacity))!important}.bg-info{--bs-bg-opacity:1;background-color:rgba(var(--bs-info-rgb),var(--bs-bg-opacity))!important}.bg-warning{--bs-bg-opacity:1;background-color:rgba(var(--bs-warning-rgb),var(--bs-bg-opacity))!important}.bg-danger{--bs-bg-opacity:1;background-color:rgba(var(--bs-danger-rgb),var(--bs-bg-opacity))!important}.bg-light{--bs-bg-opacity:1;background-color:rgba(var(--bs-light-rgb),var(--bs-bg-opacity))!important}.bg-dark{--bs-bg-opacity:1;background-color:rgba(var(--bs-dark-rgb),var(--bs-bg-opacity))!important}.bg-black{--bs-bg-opacity:1;background-color:rgba(var(--bs-black-rgb),var(--bs-bg-opacity))!important}.bg-white{--bs-bg-opacity:1;background-color:rgba(var(--bs-white-rgb),var(--bs-bg-opacity))!important}.bg-body{--bs-bg-opacity:1;background-color:rgba(var(--bs-body-bg-rgb),var(--bs-bg-opacity))!important}.bg-transparent{--bs-bg-opacity:1;background-color:transparent!important}.bg-body-secondary{--bs-bg-opacity:1;background-color:rgba(var(--bs-secondary-bg-rgb),var(--bs-bg-opacity))!important}.bg-body-tertiary{--bs-bg-opacity:1;background-color:rgba(var(--bs-tertiary-bg-rgb),var(--bs-bg-opacity))!important}.bg-opacity-10{--bs-bg-opacity:0.1}.bg-opacity-25{--bs-bg-opacity:0.25}.bg-opacity-50{--bs-bg-opacity:0.5}.bg-opacity-75{--bs-bg-opacity:0.75}.bg-opacity-100{--bs-bg-opacity:1}.bg-primary-subtle{background-color:var(--bs-primary-bg-subtle)!important}.bg-secondary-subtle{background-color:var(--bs-secondary-bg-subtle)!important}.bg-success-subtle{background-color:var(--bs-success-bg-subtle)!important}.bg-info-subtle{background-color:var(--bs-info-bg-subtle)!important}.bg-warning-subtle{background-color:var(--bs-warning-bg-subtle)!important}.bg-danger-subtle{background-color:var(--bs-danger-bg-subtle)!important}.bg-light-subtle{background-color:var(--bs-light-bg-subtle)!important}.bg-dark-subtle{background-color:var(--bs-dark-bg-subtle)!important}.bg-gradient{background-image:var(--bs-gradient)!important}.user-select-all{-webkit-user-select:all!important;-moz-user-select:all!important;user-select:all!important}.user-select-auto{-webkit-user-select:auto!important;-moz-user-select:auto!important;user-select:auto!important}.user-select-none{-webkit-user-select:none!important;-moz-user-select:none!important;user-select:none!important}.pe-none{pointer-events:none!important}.pe-auto{pointer-events:auto!important}.rounded{border-radius:var(--bs-border-radius)!important}.rounded-0{border-radius:0!important}.rounded-1{border-radius:var(--bs-border-radius-sm)!important}.rounded-2{border-radius:var(--bs-border-radius)!important}.rounded-3{border-radius:var(--bs-border-radius-lg)!important}.rounded-4{border-radius:var(--bs-border-radius-xl)!important}.rounded-5{border-radius:var(--bs-border-radius-xxl)!important}.rounded-circle{border-radius:50%!important}.rounded-pill{border-radius:var(--bs-border-radius-pill)!important}.rounded-top{border-top-left-radius:var(--bs-border-radius)!important;border-top-right-radius:var(--bs-border-radius)!important}.rounded-top-0{border-top-left-radius:0!important;border-top-right-radius:0!important}.rounded-top-1{border-top-left-radius:var(--bs-border-radius-sm)!important;border-top-right-radius:var(--bs-border-radius-sm)!important}.rounded-top-2{border-top-left-radius:var(--bs-border-radius)!important;border-top-right-radius:var(--bs-border-radius)!important}.rounded-top-3{border-top-left-radius:var(--bs-border-radius-lg)!important;border-top-right-radius:var(--bs-border-radius-lg)!important}.rounded-top-4{border-top-left-radius:var(--bs-border-radius-xl)!important;border-top-right-radius:var(--bs-border-radius-xl)!important}.rounded-top-5{border-top-left-radius:var(--bs-border-radius-xxl)!important;border-top-right-radius:var(--bs-border-radius-xxl)!important}.rounded-top-circle{border-top-left-radius:50%!important;border-top-right-radius:50%!important}.rounded-top-pill{border-top-left-radius:var(--bs-border-radius-pill)!important;border-top-right-radius:var(--bs-border-radius-pill)!important}.rounded-end{border-top-right-radius:var(--bs-border-radius)!important;border-bottom-right-radius:var(--bs-border-radius)!important}.rounded-end-0{border-top-right-radius:0!important;border-bottom-right-radius:0!important}.rounded-end-1{border-top-right-radius:var(--bs-border-radius-sm)!important;border-bottom-right-radius:var(--bs-border-radius-sm)!important}.rounded-end-2{border-top-right-radius:var(--bs-border-radius)!important;border-bottom-right-radius:var(--bs-border-radius)!important}.rounded-end-3{border-top-right-radius:var(--bs-border-radius-lg)!important;border-bottom-right-radius:var(--bs-border-radius-lg)!important}.rounded-end-4{border-top-right-radius:var(--bs-border-radius-xl)!important;border-bottom-right-radius:var(--bs-border-radius-xl)!important}.rounded-end-5{border-top-right-radius:var(--bs-border-radius-xxl)!important;border-bottom-right-radius:var(--bs-border-radius-xxl)!important}.rounded-end-circle{border-top-right-radius:50%!important;border-bottom-right-radius:50%!important}.rounded-end-pill{border-top-right-radius:var(--bs-border-radius-pill)!important;border-bottom-right-radius:var(--bs-border-radius-pill)!important}.rounded-bottom{border-bottom-right-radius:var(--bs-border-radius)!important;border-bottom-left-radius:var(--bs-border-radius)!important}.rounded-bottom-0{border-bottom-right-radius:0!important;border-bottom-left-radius:0!important}.rounded-bottom-1{border-bottom-right-radius:var(--bs-border-radius-sm)!important;border-bottom-left-radius:var(--bs-border-radius-sm)!important}.rounded-bottom-2{border-bottom-right-radius:var(--bs-border-radius)!important;border-bottom-left-radius:var(--bs-border-radius)!important}.rounded-bottom-3{border-bottom-right-radius:var(--bs-border-radius-lg)!important;border-bottom-left-radius:var(--bs-border-radius-lg)!important}.rounded-bottom-4{border-bottom-right-radius:var(--bs-border-radius-xl)!important;border-bottom-left-radius:var(--bs-border-radius-xl)!important}.rounded-bottom-5{border-bottom-right-radius:var(--bs-border-radius-xxl)!important;border-bottom-left-radius:var(--bs-border-radius-xxl)!important}.rounded-bottom-circle{border-bottom-right-radius:50%!important;border-bottom-left-radius:50%!important}.rounded-bottom-pill{border-bottom-right-radius:var(--bs-border-radius-pill)!important;border-bottom-left-radius:var(--bs-border-radius-pill)!important}.rounded-start{border-bottom-left-radius:var(--bs-border-radius)!important;border-top-left-radius:var(--bs-border-radius)!important}.rounded-start-0{border-bottom-left-radius:0!important;border-top-left-radius:0!important}.rounded-start-1{border-bottom-left-radius:var(--bs-border-radius-sm)!important;border-top-left-radius:var(--bs-border-radius-sm)!important}.rounded-start-2{border-bottom-left-radius:var(--bs-border-radius)!important;border-top-left-radius:var(--bs-border-radius)!important}.rounded-start-3{border-bottom-left-radius:var(--bs-border-radius-lg)!important;border-top-left-radius:var(--bs-border-radius-lg)!important}.rounded-start-4{border-bottom-left-radius:var(--bs-border-radius-xl)!important;border-top-left-radius:var(--bs-border-radius-xl)!important}.rounded-start-5{border-bottom-left-radius:var(--bs-border-radius-xxl)!important;border-top-left-radius:var(--bs-border-radius-xxl)!important}.rounded-start-circle{border-bottom-left-radius:50%!important;border-top-left-radius:50%!important}.rounded-start-pill{border-bottom-left-radius:var(--bs-border-radius-pill)!important;border-top-left-radius:var(--bs-border-radius-pill)!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}.z-n1{z-index:-1!important}.z-0{z-index:0!important}.z-1{z-index:1!important}.z-2{z-index:2!important}.z-3{z-index:3!important}@media (min-width:576px){.float-sm-start{float:left!important}.float-sm-end{float:right!important}.float-sm-none{float:none!important}.object-fit-sm-contain{-o-object-fit:contain!important;object-fit:contain!important}.object-fit-sm-cover{-o-object-fit:cover!important;object-fit:cover!important}.object-fit-sm-fill{-o-object-fit:fill!important;object-fit:fill!important}.object-fit-sm-scale{-o-object-fit:scale-down!important;object-fit:scale-down!important}.object-fit-sm-none{-o-object-fit:none!important;object-fit:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-grid{display:grid!important}.d-sm-inline-grid{display:inline-grid!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:flex!important}.d-sm-inline-flex{display:inline-flex!important}.d-sm-none{display:none!important}.flex-sm-fill{flex:1 1 auto!important}.flex-sm-row{flex-direction:row!important}.flex-sm-column{flex-direction:column!important}.flex-sm-row-reverse{flex-direction:row-reverse!important}.flex-sm-column-reverse{flex-direction:column-reverse!important}.flex-sm-grow-0{flex-grow:0!important}.flex-sm-grow-1{flex-grow:1!important}.flex-sm-shrink-0{flex-shrink:0!important}.flex-sm-shrink-1{flex-shrink:1!important}.flex-sm-wrap{flex-wrap:wrap!important}.flex-sm-nowrap{flex-wrap:nowrap!important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-sm-start{justify-content:flex-start!important}.justify-content-sm-end{justify-content:flex-end!important}.justify-content-sm-center{justify-content:center!important}.justify-content-sm-between{justify-content:space-between!important}.justify-content-sm-around{justify-content:space-around!important}.justify-content-sm-evenly{justify-content:space-evenly!important}.align-items-sm-start{align-items:flex-start!important}.align-items-sm-end{align-items:flex-end!important}.align-items-sm-center{align-items:center!important}.align-items-sm-baseline{align-items:baseline!important}.align-items-sm-stretch{align-items:stretch!important}.align-content-sm-start{align-content:flex-start!important}.align-content-sm-end{align-content:flex-end!important}.align-content-sm-center{align-content:center!important}.align-content-sm-between{align-content:space-between!important}.align-content-sm-around{align-content:space-around!important}.align-content-sm-stretch{align-content:stretch!important}.align-self-sm-auto{align-self:auto!important}.align-self-sm-start{align-self:flex-start!important}.align-self-sm-end{align-self:flex-end!important}.align-self-sm-center{align-self:center!important}.align-self-sm-baseline{align-self:baseline!important}.align-self-sm-stretch{align-self:stretch!important}.order-sm-first{order:-1!important}.order-sm-0{order:0!important}.order-sm-1{order:1!important}.order-sm-2{order:2!important}.order-sm-3{order:3!important}.order-sm-4{order:4!important}.order-sm-5{order:5!important}.order-sm-last{order:6!important}.m-sm-0{margin:0!important}.m-sm-1{margin:.25rem!important}.m-sm-2{margin:.5rem!important}.m-sm-3{margin:1rem!important}.m-sm-4{margin:1.5rem!important}.m-sm-5{margin:3rem!important}.m-sm-auto{margin:auto!important}.mx-sm-0{margin-right:0!important;margin-left:0!important}.mx-sm-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-sm-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-sm-3{margin-right:1rem!important;margin-left:1rem!important}.mx-sm-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-sm-5{margin-right:3rem!important;margin-left:3rem!important}.mx-sm-auto{margin-right:auto!important;margin-left:auto!important}.my-sm-0{margin-top:0!important;margin-bottom:0!important}.my-sm-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-sm-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-sm-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-sm-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-sm-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-sm-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-sm-0{margin-top:0!important}.mt-sm-1{margin-top:.25rem!important}.mt-sm-2{margin-top:.5rem!important}.mt-sm-3{margin-top:1rem!important}.mt-sm-4{margin-top:1.5rem!important}.mt-sm-5{margin-top:3rem!important}.mt-sm-auto{margin-top:auto!important}.me-sm-0{margin-right:0!important}.me-sm-1{margin-right:.25rem!important}.me-sm-2{margin-right:.5rem!important}.me-sm-3{margin-right:1rem!important}.me-sm-4{margin-right:1.5rem!important}.me-sm-5{margin-right:3rem!important}.me-sm-auto{margin-right:auto!important}.mb-sm-0{margin-bottom:0!important}.mb-sm-1{margin-bottom:.25rem!important}.mb-sm-2{margin-bottom:.5rem!important}.mb-sm-3{margin-bottom:1rem!important}.mb-sm-4{margin-bottom:1.5rem!important}.mb-sm-5{margin-bottom:3rem!important}.mb-sm-auto{margin-bottom:auto!important}.ms-sm-0{margin-left:0!important}.ms-sm-1{margin-left:.25rem!important}.ms-sm-2{margin-left:.5rem!important}.ms-sm-3{margin-left:1rem!important}.ms-sm-4{margin-left:1.5rem!important}.ms-sm-5{margin-left:3rem!important}.ms-sm-auto{margin-left:auto!important}.p-sm-0{padding:0!important}.p-sm-1{padding:.25rem!important}.p-sm-2{padding:.5rem!important}.p-sm-3{padding:1rem!important}.p-sm-4{padding:1.5rem!important}.p-sm-5{padding:3rem!important}.px-sm-0{padding-right:0!important;padding-left:0!important}.px-sm-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-sm-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-sm-3{padding-right:1rem!important;padding-left:1rem!important}.px-sm-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-sm-5{padding-right:3rem!important;padding-left:3rem!important}.py-sm-0{padding-top:0!important;padding-bottom:0!important}.py-sm-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-sm-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-sm-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-sm-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-sm-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-sm-0{padding-top:0!important}.pt-sm-1{padding-top:.25rem!important}.pt-sm-2{padding-top:.5rem!important}.pt-sm-3{padding-top:1rem!important}.pt-sm-4{padding-top:1.5rem!important}.pt-sm-5{padding-top:3rem!important}.pe-sm-0{padding-right:0!important}.pe-sm-1{padding-right:.25rem!important}.pe-sm-2{padding-right:.5rem!important}.pe-sm-3{padding-right:1rem!important}.pe-sm-4{padding-right:1.5rem!important}.pe-sm-5{padding-right:3rem!important}.pb-sm-0{padding-bottom:0!important}.pb-sm-1{padding-bottom:.25rem!important}.pb-sm-2{padding-bottom:.5rem!important}.pb-sm-3{padding-bottom:1rem!important}.pb-sm-4{padding-bottom:1.5rem!important}.pb-sm-5{padding-bottom:3rem!important}.ps-sm-0{padding-left:0!important}.ps-sm-1{padding-left:.25rem!important}.ps-sm-2{padding-left:.5rem!important}.ps-sm-3{padding-left:1rem!important}.ps-sm-4{padding-left:1.5rem!important}.ps-sm-5{padding-left:3rem!important}.gap-sm-0{gap:0!important}.gap-sm-1{gap:.25rem!important}.gap-sm-2{gap:.5rem!important}.gap-sm-3{gap:1rem!important}.gap-sm-4{gap:1.5rem!important}.gap-sm-5{gap:3rem!important}.row-gap-sm-0{row-gap:0!important}.row-gap-sm-1{row-gap:.25rem!important}.row-gap-sm-2{row-gap:.5rem!important}.row-gap-sm-3{row-gap:1rem!important}.row-gap-sm-4{row-gap:1.5rem!important}.row-gap-sm-5{row-gap:3rem!important}.column-gap-sm-0{-moz-column-gap:0!important;column-gap:0!important}.column-gap-sm-1{-moz-column-gap:0.25rem!important;column-gap:.25rem!important}.column-gap-sm-2{-moz-column-gap:0.5rem!important;column-gap:.5rem!important}.column-gap-sm-3{-moz-column-gap:1rem!important;column-gap:1rem!important}.column-gap-sm-4{-moz-column-gap:1.5rem!important;column-gap:1.5rem!important}.column-gap-sm-5{-moz-column-gap:3rem!important;column-gap:3rem!important}.text-sm-start{text-align:left!important}.text-sm-end{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.float-md-start{float:left!important}.float-md-end{float:right!important}.float-md-none{float:none!important}.object-fit-md-contain{-o-object-fit:contain!important;object-fit:contain!important}.object-fit-md-cover{-o-object-fit:cover!important;object-fit:cover!important}.object-fit-md-fill{-o-object-fit:fill!important;object-fit:fill!important}.object-fit-md-scale{-o-object-fit:scale-down!important;object-fit:scale-down!important}.object-fit-md-none{-o-object-fit:none!important;object-fit:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-grid{display:grid!important}.d-md-inline-grid{display:inline-grid!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:flex!important}.d-md-inline-flex{display:inline-flex!important}.d-md-none{display:none!important}.flex-md-fill{flex:1 1 auto!important}.flex-md-row{flex-direction:row!important}.flex-md-column{flex-direction:column!important}.flex-md-row-reverse{flex-direction:row-reverse!important}.flex-md-column-reverse{flex-direction:column-reverse!important}.flex-md-grow-0{flex-grow:0!important}.flex-md-grow-1{flex-grow:1!important}.flex-md-shrink-0{flex-shrink:0!important}.flex-md-shrink-1{flex-shrink:1!important}.flex-md-wrap{flex-wrap:wrap!important}.flex-md-nowrap{flex-wrap:nowrap!important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-md-start{justify-content:flex-start!important}.justify-content-md-end{justify-content:flex-end!important}.justify-content-md-center{justify-content:center!important}.justify-content-md-between{justify-content:space-between!important}.justify-content-md-around{justify-content:space-around!important}.justify-content-md-evenly{justify-content:space-evenly!important}.align-items-md-start{align-items:flex-start!important}.align-items-md-end{align-items:flex-end!important}.align-items-md-center{align-items:center!important}.align-items-md-baseline{align-items:baseline!important}.align-items-md-stretch{align-items:stretch!important}.align-content-md-start{align-content:flex-start!important}.align-content-md-end{align-content:flex-end!important}.align-content-md-center{align-content:center!important}.align-content-md-between{align-content:space-between!important}.align-content-md-around{align-content:space-around!important}.align-content-md-stretch{align-content:stretch!important}.align-self-md-auto{align-self:auto!important}.align-self-md-start{align-self:flex-start!important}.align-self-md-end{align-self:flex-end!important}.align-self-md-center{align-self:center!important}.align-self-md-baseline{align-self:baseline!important}.align-self-md-stretch{align-self:stretch!important}.order-md-first{order:-1!important}.order-md-0{order:0!important}.order-md-1{order:1!important}.order-md-2{order:2!important}.order-md-3{order:3!important}.order-md-4{order:4!important}.order-md-5{order:5!important}.order-md-last{order:6!important}.m-md-0{margin:0!important}.m-md-1{margin:.25rem!important}.m-md-2{margin:.5rem!important}.m-md-3{margin:1rem!important}.m-md-4{margin:1.5rem!important}.m-md-5{margin:3rem!important}.m-md-auto{margin:auto!important}.mx-md-0{margin-right:0!important;margin-left:0!important}.mx-md-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-md-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-md-3{margin-right:1rem!important;margin-left:1rem!important}.mx-md-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-md-5{margin-right:3rem!important;margin-left:3rem!important}.mx-md-auto{margin-right:auto!important;margin-left:auto!important}.my-md-0{margin-top:0!important;margin-bottom:0!important}.my-md-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-md-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-md-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-md-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-md-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-md-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-md-0{margin-top:0!important}.mt-md-1{margin-top:.25rem!important}.mt-md-2{margin-top:.5rem!important}.mt-md-3{margin-top:1rem!important}.mt-md-4{margin-top:1.5rem!important}.mt-md-5{margin-top:3rem!important}.mt-md-auto{margin-top:auto!important}.me-md-0{margin-right:0!important}.me-md-1{margin-right:.25rem!important}.me-md-2{margin-right:.5rem!important}.me-md-3{margin-right:1rem!important}.me-md-4{margin-right:1.5rem!important}.me-md-5{margin-right:3rem!important}.me-md-auto{margin-right:auto!important}.mb-md-0{margin-bottom:0!important}.mb-md-1{margin-bottom:.25rem!important}.mb-md-2{margin-bottom:.5rem!important}.mb-md-3{margin-bottom:1rem!important}.mb-md-4{margin-bottom:1.5rem!important}.mb-md-5{margin-bottom:3rem!important}.mb-md-auto{margin-bottom:auto!important}.ms-md-0{margin-left:0!important}.ms-md-1{margin-left:.25rem!important}.ms-md-2{margin-left:.5rem!important}.ms-md-3{margin-left:1rem!important}.ms-md-4{margin-left:1.5rem!important}.ms-md-5{margin-left:3rem!important}.ms-md-auto{margin-left:auto!important}.p-md-0{padding:0!important}.p-md-1{padding:.25rem!important}.p-md-2{padding:.5rem!important}.p-md-3{padding:1rem!important}.p-md-4{padding:1.5rem!important}.p-md-5{padding:3rem!important}.px-md-0{padding-right:0!important;padding-left:0!important}.px-md-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-md-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-md-3{padding-right:1rem!important;padding-left:1rem!important}.px-md-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-md-5{padding-right:3rem!important;padding-left:3rem!important}.py-md-0{padding-top:0!important;padding-bottom:0!important}.py-md-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-md-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-md-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-md-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-md-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-md-0{padding-top:0!important}.pt-md-1{padding-top:.25rem!important}.pt-md-2{padding-top:.5rem!important}.pt-md-3{padding-top:1rem!important}.pt-md-4{padding-top:1.5rem!important}.pt-md-5{padding-top:3rem!important}.pe-md-0{padding-right:0!important}.pe-md-1{padding-right:.25rem!important}.pe-md-2{padding-right:.5rem!important}.pe-md-3{padding-right:1rem!important}.pe-md-4{padding-right:1.5rem!important}.pe-md-5{padding-right:3rem!important}.pb-md-0{padding-bottom:0!important}.pb-md-1{padding-bottom:.25rem!important}.pb-md-2{padding-bottom:.5rem!important}.pb-md-3{padding-bottom:1rem!important}.pb-md-4{padding-bottom:1.5rem!important}.pb-md-5{padding-bottom:3rem!important}.ps-md-0{padding-left:0!important}.ps-md-1{padding-left:.25rem!important}.ps-md-2{padding-left:.5rem!important}.ps-md-3{padding-left:1rem!important}.ps-md-4{padding-left:1.5rem!important}.ps-md-5{padding-left:3rem!important}.gap-md-0{gap:0!important}.gap-md-1{gap:.25rem!important}.gap-md-2{gap:.5rem!important}.gap-md-3{gap:1rem!important}.gap-md-4{gap:1.5rem!important}.gap-md-5{gap:3rem!important}.row-gap-md-0{row-gap:0!important}.row-gap-md-1{row-gap:.25rem!important}.row-gap-md-2{row-gap:.5rem!important}.row-gap-md-3{row-gap:1rem!important}.row-gap-md-4{row-gap:1.5rem!important}.row-gap-md-5{row-gap:3rem!important}.column-gap-md-0{-moz-column-gap:0!important;column-gap:0!important}.column-gap-md-1{-moz-column-gap:0.25rem!important;column-gap:.25rem!important}.column-gap-md-2{-moz-column-gap:0.5rem!important;column-gap:.5rem!important}.column-gap-md-3{-moz-column-gap:1rem!important;column-gap:1rem!important}.column-gap-md-4{-moz-column-gap:1.5rem!important;column-gap:1.5rem!important}.column-gap-md-5{-moz-column-gap:3rem!important;column-gap:3rem!important}.text-md-start{text-align:left!important}.text-md-end{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.float-lg-start{float:left!important}.float-lg-end{float:right!important}.float-lg-none{float:none!important}.object-fit-lg-contain{-o-object-fit:contain!important;object-fit:contain!important}.object-fit-lg-cover{-o-object-fit:cover!important;object-fit:cover!important}.object-fit-lg-fill{-o-object-fit:fill!important;object-fit:fill!important}.object-fit-lg-scale{-o-object-fit:scale-down!important;object-fit:scale-down!important}.object-fit-lg-none{-o-object-fit:none!important;object-fit:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-grid{display:grid!important}.d-lg-inline-grid{display:inline-grid!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:flex!important}.d-lg-inline-flex{display:inline-flex!important}.d-lg-none{display:none!important}.flex-lg-fill{flex:1 1 auto!important}.flex-lg-row{flex-direction:row!important}.flex-lg-column{flex-direction:column!important}.flex-lg-row-reverse{flex-direction:row-reverse!important}.flex-lg-column-reverse{flex-direction:column-reverse!important}.flex-lg-grow-0{flex-grow:0!important}.flex-lg-grow-1{flex-grow:1!important}.flex-lg-shrink-0{flex-shrink:0!important}.flex-lg-shrink-1{flex-shrink:1!important}.flex-lg-wrap{flex-wrap:wrap!important}.flex-lg-nowrap{flex-wrap:nowrap!important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-lg-start{justify-content:flex-start!important}.justify-content-lg-end{justify-content:flex-end!important}.justify-content-lg-center{justify-content:center!important}.justify-content-lg-between{justify-content:space-between!important}.justify-content-lg-around{justify-content:space-around!important}.justify-content-lg-evenly{justify-content:space-evenly!important}.align-items-lg-start{align-items:flex-start!important}.align-items-lg-end{align-items:flex-end!important}.align-items-lg-center{align-items:center!important}.align-items-lg-baseline{align-items:baseline!important}.align-items-lg-stretch{align-items:stretch!important}.align-content-lg-start{align-content:flex-start!important}.align-content-lg-end{align-content:flex-end!important}.align-content-lg-center{align-content:center!important}.align-content-lg-between{align-content:space-between!important}.align-content-lg-around{align-content:space-around!important}.align-content-lg-stretch{align-content:stretch!important}.align-self-lg-auto{align-self:auto!important}.align-self-lg-start{align-self:flex-start!important}.align-self-lg-end{align-self:flex-end!important}.align-self-lg-center{align-self:center!important}.align-self-lg-baseline{align-self:baseline!important}.align-self-lg-stretch{align-self:stretch!important}.order-lg-first{order:-1!important}.order-lg-0{order:0!important}.order-lg-1{order:1!important}.order-lg-2{order:2!important}.order-lg-3{order:3!important}.order-lg-4{order:4!important}.order-lg-5{order:5!important}.order-lg-last{order:6!important}.m-lg-0{margin:0!important}.m-lg-1{margin:.25rem!important}.m-lg-2{margin:.5rem!important}.m-lg-3{margin:1rem!important}.m-lg-4{margin:1.5rem!important}.m-lg-5{margin:3rem!important}.m-lg-auto{margin:auto!important}.mx-lg-0{margin-right:0!important;margin-left:0!important}.mx-lg-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-lg-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-lg-3{margin-right:1rem!important;margin-left:1rem!important}.mx-lg-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-lg-5{margin-right:3rem!important;margin-left:3rem!important}.mx-lg-auto{margin-right:auto!important;margin-left:auto!important}.my-lg-0{margin-top:0!important;margin-bottom:0!important}.my-lg-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-lg-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-lg-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-lg-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-lg-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-lg-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-lg-0{margin-top:0!important}.mt-lg-1{margin-top:.25rem!important}.mt-lg-2{margin-top:.5rem!important}.mt-lg-3{margin-top:1rem!important}.mt-lg-4{margin-top:1.5rem!important}.mt-lg-5{margin-top:3rem!important}.mt-lg-auto{margin-top:auto!important}.me-lg-0{margin-right:0!important}.me-lg-1{margin-right:.25rem!important}.me-lg-2{margin-right:.5rem!important}.me-lg-3{margin-right:1rem!important}.me-lg-4{margin-right:1.5rem!important}.me-lg-5{margin-right:3rem!important}.me-lg-auto{margin-right:auto!important}.mb-lg-0{margin-bottom:0!important}.mb-lg-1{margin-bottom:.25rem!important}.mb-lg-2{margin-bottom:.5rem!important}.mb-lg-3{margin-bottom:1rem!important}.mb-lg-4{margin-bottom:1.5rem!important}.mb-lg-5{margin-bottom:3rem!important}.mb-lg-auto{margin-bottom:auto!important}.ms-lg-0{margin-left:0!important}.ms-lg-1{margin-left:.25rem!important}.ms-lg-2{margin-left:.5rem!important}.ms-lg-3{margin-left:1rem!important}.ms-lg-4{margin-left:1.5rem!important}.ms-lg-5{margin-left:3rem!important}.ms-lg-auto{margin-left:auto!important}.p-lg-0{padding:0!important}.p-lg-1{padding:.25rem!important}.p-lg-2{padding:.5rem!important}.p-lg-3{padding:1rem!important}.p-lg-4{padding:1.5rem!important}.p-lg-5{padding:3rem!important}.px-lg-0{padding-right:0!important;padding-left:0!important}.px-lg-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-lg-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-lg-3{padding-right:1rem!important;padding-left:1rem!important}.px-lg-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-lg-5{padding-right:3rem!important;padding-left:3rem!important}.py-lg-0{padding-top:0!important;padding-bottom:0!important}.py-lg-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-lg-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-lg-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-lg-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-lg-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-lg-0{padding-top:0!important}.pt-lg-1{padding-top:.25rem!important}.pt-lg-2{padding-top:.5rem!important}.pt-lg-3{padding-top:1rem!important}.pt-lg-4{padding-top:1.5rem!important}.pt-lg-5{padding-top:3rem!important}.pe-lg-0{padding-right:0!important}.pe-lg-1{padding-right:.25rem!important}.pe-lg-2{padding-right:.5rem!important}.pe-lg-3{padding-right:1rem!important}.pe-lg-4{padding-right:1.5rem!important}.pe-lg-5{padding-right:3rem!important}.pb-lg-0{padding-bottom:0!important}.pb-lg-1{padding-bottom:.25rem!important}.pb-lg-2{padding-bottom:.5rem!important}.pb-lg-3{padding-bottom:1rem!important}.pb-lg-4{padding-bottom:1.5rem!important}.pb-lg-5{padding-bottom:3rem!important}.ps-lg-0{padding-left:0!important}.ps-lg-1{padding-left:.25rem!important}.ps-lg-2{padding-left:.5rem!important}.ps-lg-3{padding-left:1rem!important}.ps-lg-4{padding-left:1.5rem!important}.ps-lg-5{padding-left:3rem!important}.gap-lg-0{gap:0!important}.gap-lg-1{gap:.25rem!important}.gap-lg-2{gap:.5rem!important}.gap-lg-3{gap:1rem!important}.gap-lg-4{gap:1.5rem!important}.gap-lg-5{gap:3rem!important}.row-gap-lg-0{row-gap:0!important}.row-gap-lg-1{row-gap:.25rem!important}.row-gap-lg-2{row-gap:.5rem!important}.row-gap-lg-3{row-gap:1rem!important}.row-gap-lg-4{row-gap:1.5rem!important}.row-gap-lg-5{row-gap:3rem!important}.column-gap-lg-0{-moz-column-gap:0!important;column-gap:0!important}.column-gap-lg-1{-moz-column-gap:0.25rem!important;column-gap:.25rem!important}.column-gap-lg-2{-moz-column-gap:0.5rem!important;column-gap:.5rem!important}.column-gap-lg-3{-moz-column-gap:1rem!important;column-gap:1rem!important}.column-gap-lg-4{-moz-column-gap:1.5rem!important;column-gap:1.5rem!important}.column-gap-lg-5{-moz-column-gap:3rem!important;column-gap:3rem!important}.text-lg-start{text-align:left!important}.text-lg-end{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.float-xl-start{float:left!important}.float-xl-end{float:right!important}.float-xl-none{float:none!important}.object-fit-xl-contain{-o-object-fit:contain!important;object-fit:contain!important}.object-fit-xl-cover{-o-object-fit:cover!important;object-fit:cover!important}.object-fit-xl-fill{-o-object-fit:fill!important;object-fit:fill!important}.object-fit-xl-scale{-o-object-fit:scale-down!important;object-fit:scale-down!important}.object-fit-xl-none{-o-object-fit:none!important;object-fit:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-grid{display:grid!important}.d-xl-inline-grid{display:inline-grid!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:flex!important}.d-xl-inline-flex{display:inline-flex!important}.d-xl-none{display:none!important}.flex-xl-fill{flex:1 1 auto!important}.flex-xl-row{flex-direction:row!important}.flex-xl-column{flex-direction:column!important}.flex-xl-row-reverse{flex-direction:row-reverse!important}.flex-xl-column-reverse{flex-direction:column-reverse!important}.flex-xl-grow-0{flex-grow:0!important}.flex-xl-grow-1{flex-grow:1!important}.flex-xl-shrink-0{flex-shrink:0!important}.flex-xl-shrink-1{flex-shrink:1!important}.flex-xl-wrap{flex-wrap:wrap!important}.flex-xl-nowrap{flex-wrap:nowrap!important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-xl-start{justify-content:flex-start!important}.justify-content-xl-end{justify-content:flex-end!important}.justify-content-xl-center{justify-content:center!important}.justify-content-xl-between{justify-content:space-between!important}.justify-content-xl-around{justify-content:space-around!important}.justify-content-xl-evenly{justify-content:space-evenly!important}.align-items-xl-start{align-items:flex-start!important}.align-items-xl-end{align-items:flex-end!important}.align-items-xl-center{align-items:center!important}.align-items-xl-baseline{align-items:baseline!important}.align-items-xl-stretch{align-items:stretch!important}.align-content-xl-start{align-content:flex-start!important}.align-content-xl-end{align-content:flex-end!important}.align-content-xl-center{align-content:center!important}.align-content-xl-between{align-content:space-between!important}.align-content-xl-around{align-content:space-around!important}.align-content-xl-stretch{align-content:stretch!important}.align-self-xl-auto{align-self:auto!important}.align-self-xl-start{align-self:flex-start!important}.align-self-xl-end{align-self:flex-end!important}.align-self-xl-center{align-self:center!important}.align-self-xl-baseline{align-self:baseline!important}.align-self-xl-stretch{align-self:stretch!important}.order-xl-first{order:-1!important}.order-xl-0{order:0!important}.order-xl-1{order:1!important}.order-xl-2{order:2!important}.order-xl-3{order:3!important}.order-xl-4{order:4!important}.order-xl-5{order:5!important}.order-xl-last{order:6!important}.m-xl-0{margin:0!important}.m-xl-1{margin:.25rem!important}.m-xl-2{margin:.5rem!important}.m-xl-3{margin:1rem!important}.m-xl-4{margin:1.5rem!important}.m-xl-5{margin:3rem!important}.m-xl-auto{margin:auto!important}.mx-xl-0{margin-right:0!important;margin-left:0!important}.mx-xl-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-xl-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-xl-3{margin-right:1rem!important;margin-left:1rem!important}.mx-xl-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-xl-5{margin-right:3rem!important;margin-left:3rem!important}.mx-xl-auto{margin-right:auto!important;margin-left:auto!important}.my-xl-0{margin-top:0!important;margin-bottom:0!important}.my-xl-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-xl-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-xl-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-xl-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-xl-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-xl-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-xl-0{margin-top:0!important}.mt-xl-1{margin-top:.25rem!important}.mt-xl-2{margin-top:.5rem!important}.mt-xl-3{margin-top:1rem!important}.mt-xl-4{margin-top:1.5rem!important}.mt-xl-5{margin-top:3rem!important}.mt-xl-auto{margin-top:auto!important}.me-xl-0{margin-right:0!important}.me-xl-1{margin-right:.25rem!important}.me-xl-2{margin-right:.5rem!important}.me-xl-3{margin-right:1rem!important}.me-xl-4{margin-right:1.5rem!important}.me-xl-5{margin-right:3rem!important}.me-xl-auto{margin-right:auto!important}.mb-xl-0{margin-bottom:0!important}.mb-xl-1{margin-bottom:.25rem!important}.mb-xl-2{margin-bottom:.5rem!important}.mb-xl-3{margin-bottom:1rem!important}.mb-xl-4{margin-bottom:1.5rem!important}.mb-xl-5{margin-bottom:3rem!important}.mb-xl-auto{margin-bottom:auto!important}.ms-xl-0{margin-left:0!important}.ms-xl-1{margin-left:.25rem!important}.ms-xl-2{margin-left:.5rem!important}.ms-xl-3{margin-left:1rem!important}.ms-xl-4{margin-left:1.5rem!important}.ms-xl-5{margin-left:3rem!important}.ms-xl-auto{margin-left:auto!important}.p-xl-0{padding:0!important}.p-xl-1{padding:.25rem!important}.p-xl-2{padding:.5rem!important}.p-xl-3{padding:1rem!important}.p-xl-4{padding:1.5rem!important}.p-xl-5{padding:3rem!important}.px-xl-0{padding-right:0!important;padding-left:0!important}.px-xl-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-xl-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-xl-3{padding-right:1rem!important;padding-left:1rem!important}.px-xl-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-xl-5{padding-right:3rem!important;padding-left:3rem!important}.py-xl-0{padding-top:0!important;padding-bottom:0!important}.py-xl-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-xl-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-xl-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-xl-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-xl-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-xl-0{padding-top:0!important}.pt-xl-1{padding-top:.25rem!important}.pt-xl-2{padding-top:.5rem!important}.pt-xl-3{padding-top:1rem!important}.pt-xl-4{padding-top:1.5rem!important}.pt-xl-5{padding-top:3rem!important}.pe-xl-0{padding-right:0!important}.pe-xl-1{padding-right:.25rem!important}.pe-xl-2{padding-right:.5rem!important}.pe-xl-3{padding-right:1rem!important}.pe-xl-4{padding-right:1.5rem!important}.pe-xl-5{padding-right:3rem!important}.pb-xl-0{padding-bottom:0!important}.pb-xl-1{padding-bottom:.25rem!important}.pb-xl-2{padding-bottom:.5rem!important}.pb-xl-3{padding-bottom:1rem!important}.pb-xl-4{padding-bottom:1.5rem!important}.pb-xl-5{padding-bottom:3rem!important}.ps-xl-0{padding-left:0!important}.ps-xl-1{padding-left:.25rem!important}.ps-xl-2{padding-left:.5rem!important}.ps-xl-3{padding-left:1rem!important}.ps-xl-4{padding-left:1.5rem!important}.ps-xl-5{padding-left:3rem!important}.gap-xl-0{gap:0!important}.gap-xl-1{gap:.25rem!important}.gap-xl-2{gap:.5rem!important}.gap-xl-3{gap:1rem!important}.gap-xl-4{gap:1.5rem!important}.gap-xl-5{gap:3rem!important}.row-gap-xl-0{row-gap:0!important}.row-gap-xl-1{row-gap:.25rem!important}.row-gap-xl-2{row-gap:.5rem!important}.row-gap-xl-3{row-gap:1rem!important}.row-gap-xl-4{row-gap:1.5rem!important}.row-gap-xl-5{row-gap:3rem!important}.column-gap-xl-0{-moz-column-gap:0!important;column-gap:0!important}.column-gap-xl-1{-moz-column-gap:0.25rem!important;column-gap:.25rem!important}.column-gap-xl-2{-moz-column-gap:0.5rem!important;column-gap:.5rem!important}.column-gap-xl-3{-moz-column-gap:1rem!important;column-gap:1rem!important}.column-gap-xl-4{-moz-column-gap:1.5rem!important;column-gap:1.5rem!important}.column-gap-xl-5{-moz-column-gap:3rem!important;column-gap:3rem!important}.text-xl-start{text-align:left!important}.text-xl-end{text-align:right!important}.text-xl-center{text-align:center!important}}@media (min-width:1400px){.float-xxl-start{float:left!important}.float-xxl-end{float:right!important}.float-xxl-none{float:none!important}.object-fit-xxl-contain{-o-object-fit:contain!important;object-fit:contain!important}.object-fit-xxl-cover{-o-object-fit:cover!important;object-fit:cover!important}.object-fit-xxl-fill{-o-object-fit:fill!important;object-fit:fill!important}.object-fit-xxl-scale{-o-object-fit:scale-down!important;object-fit:scale-down!important}.object-fit-xxl-none{-o-object-fit:none!important;object-fit:none!important}.d-xxl-inline{display:inline!important}.d-xxl-inline-block{display:inline-block!important}.d-xxl-block{display:block!important}.d-xxl-grid{display:grid!important}.d-xxl-inline-grid{display:inline-grid!important}.d-xxl-table{display:table!important}.d-xxl-table-row{display:table-row!important}.d-xxl-table-cell{display:table-cell!important}.d-xxl-flex{display:flex!important}.d-xxl-inline-flex{display:inline-flex!important}.d-xxl-none{display:none!important}.flex-xxl-fill{flex:1 1 auto!important}.flex-xxl-row{flex-direction:row!important}.flex-xxl-column{flex-direction:column!important}.flex-xxl-row-reverse{flex-direction:row-reverse!important}.flex-xxl-column-reverse{flex-direction:column-reverse!important}.flex-xxl-grow-0{flex-grow:0!important}.flex-xxl-grow-1{flex-grow:1!important}.flex-xxl-shrink-0{flex-shrink:0!important}.flex-xxl-shrink-1{flex-shrink:1!important}.flex-xxl-wrap{flex-wrap:wrap!important}.flex-xxl-nowrap{flex-wrap:nowrap!important}.flex-xxl-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-xxl-start{justify-content:flex-start!important}.justify-content-xxl-end{justify-content:flex-end!important}.justify-content-xxl-center{justify-content:center!important}.justify-content-xxl-between{justify-content:space-between!important}.justify-content-xxl-around{justify-content:space-around!important}.justify-content-xxl-evenly{justify-content:space-evenly!important}.align-items-xxl-start{align-items:flex-start!important}.align-items-xxl-end{align-items:flex-end!important}.align-items-xxl-center{align-items:center!important}.align-items-xxl-baseline{align-items:baseline!important}.align-items-xxl-stretch{align-items:stretch!important}.align-content-xxl-start{align-content:flex-start!important}.align-content-xxl-end{align-content:flex-end!important}.align-content-xxl-center{align-content:center!important}.align-content-xxl-between{align-content:space-between!important}.align-content-xxl-around{align-content:space-around!important}.align-content-xxl-stretch{align-content:stretch!important}.align-self-xxl-auto{align-self:auto!important}.align-self-xxl-start{align-self:flex-start!important}.align-self-xxl-end{align-self:flex-end!important}.align-self-xxl-center{align-self:center!important}.align-self-xxl-baseline{align-self:baseline!important}.align-self-xxl-stretch{align-self:stretch!important}.order-xxl-first{order:-1!important}.order-xxl-0{order:0!important}.order-xxl-1{order:1!important}.order-xxl-2{order:2!important}.order-xxl-3{order:3!important}.order-xxl-4{order:4!important}.order-xxl-5{order:5!important}.order-xxl-last{order:6!important}.m-xxl-0{margin:0!important}.m-xxl-1{margin:.25rem!important}.m-xxl-2{margin:.5rem!important}.m-xxl-3{margin:1rem!important}.m-xxl-4{margin:1.5rem!important}.m-xxl-5{margin:3rem!important}.m-xxl-auto{margin:auto!important}.mx-xxl-0{margin-right:0!important;margin-left:0!important}.mx-xxl-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-xxl-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-xxl-3{margin-right:1rem!important;margin-left:1rem!important}.mx-xxl-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-xxl-5{margin-right:3rem!important;margin-left:3rem!important}.mx-xxl-auto{margin-right:auto!important;margin-left:auto!important}.my-xxl-0{margin-top:0!important;margin-bottom:0!important}.my-xxl-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-xxl-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-xxl-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-xxl-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-xxl-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-xxl-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-xxl-0{margin-top:0!important}.mt-xxl-1{margin-top:.25rem!important}.mt-xxl-2{margin-top:.5rem!important}.mt-xxl-3{margin-top:1rem!important}.mt-xxl-4{margin-top:1.5rem!important}.mt-xxl-5{margin-top:3rem!important}.mt-xxl-auto{margin-top:auto!important}.me-xxl-0{margin-right:0!important}.me-xxl-1{margin-right:.25rem!important}.me-xxl-2{margin-right:.5rem!important}.me-xxl-3{margin-right:1rem!important}.me-xxl-4{margin-right:1.5rem!important}.me-xxl-5{margin-right:3rem!important}.me-xxl-auto{margin-right:auto!important}.mb-xxl-0{margin-bottom:0!important}.mb-xxl-1{margin-bottom:.25rem!important}.mb-xxl-2{margin-bottom:.5rem!important}.mb-xxl-3{margin-bottom:1rem!important}.mb-xxl-4{margin-bottom:1.5rem!important}.mb-xxl-5{margin-bottom:3rem!important}.mb-xxl-auto{margin-bottom:auto!important}.ms-xxl-0{margin-left:0!important}.ms-xxl-1{margin-left:.25rem!important}.ms-xxl-2{margin-left:.5rem!important}.ms-xxl-3{margin-left:1rem!important}.ms-xxl-4{margin-left:1.5rem!important}.ms-xxl-5{margin-left:3rem!important}.ms-xxl-auto{margin-left:auto!important}.p-xxl-0{padding:0!important}.p-xxl-1{padding:.25rem!important}.p-xxl-2{padding:.5rem!important}.p-xxl-3{padding:1rem!important}.p-xxl-4{padding:1.5rem!important}.p-xxl-5{padding:3rem!important}.px-xxl-0{padding-right:0!important;padding-left:0!important}.px-xxl-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-xxl-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-xxl-3{padding-right:1rem!important;padding-left:1rem!important}.px-xxl-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-xxl-5{padding-right:3rem!important;padding-left:3rem!important}.py-xxl-0{padding-top:0!important;padding-bottom:0!important}.py-xxl-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-xxl-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-xxl-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-xxl-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-xxl-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-xxl-0{padding-top:0!important}.pt-xxl-1{padding-top:.25rem!important}.pt-xxl-2{padding-top:.5rem!important}.pt-xxl-3{padding-top:1rem!important}.pt-xxl-4{padding-top:1.5rem!important}.pt-xxl-5{padding-top:3rem!important}.pe-xxl-0{padding-right:0!important}.pe-xxl-1{padding-right:.25rem!important}.pe-xxl-2{padding-right:.5rem!important}.pe-xxl-3{padding-right:1rem!important}.pe-xxl-4{padding-right:1.5rem!important}.pe-xxl-5{padding-right:3rem!important}.pb-xxl-0{padding-bottom:0!important}.pb-xxl-1{padding-bottom:.25rem!important}.pb-xxl-2{padding-bottom:.5rem!important}.pb-xxl-3{padding-bottom:1rem!important}.pb-xxl-4{padding-bottom:1.5rem!important}.pb-xxl-5{padding-bottom:3rem!important}.ps-xxl-0{padding-left:0!important}.ps-xxl-1{padding-left:.25rem!important}.ps-xxl-2{padding-left:.5rem!important}.ps-xxl-3{padding-left:1rem!important}.ps-xxl-4{padding-left:1.5rem!important}.ps-xxl-5{padding-left:3rem!important}.gap-xxl-0{gap:0!important}.gap-xxl-1{gap:.25rem!important}.gap-xxl-2{gap:.5rem!important}.gap-xxl-3{gap:1rem!important}.gap-xxl-4{gap:1.5rem!important}.gap-xxl-5{gap:3rem!important}.row-gap-xxl-0{row-gap:0!important}.row-gap-xxl-1{row-gap:.25rem!important}.row-gap-xxl-2{row-gap:.5rem!important}.row-gap-xxl-3{row-gap:1rem!important}.row-gap-xxl-4{row-gap:1.5rem!important}.row-gap-xxl-5{row-gap:3rem!important}.column-gap-xxl-0{-moz-column-gap:0!important;column-gap:0!important}.column-gap-xxl-1{-moz-column-gap:0.25rem!important;column-gap:.25rem!important}.column-gap-xxl-2{-moz-column-gap:0.5rem!important;column-gap:.5rem!important}.column-gap-xxl-3{-moz-column-gap:1rem!important;column-gap:1rem!important}.column-gap-xxl-4{-moz-column-gap:1.5rem!important;column-gap:1.5rem!important}.column-gap-xxl-5{-moz-column-gap:3rem!important;column-gap:3rem!important}.text-xxl-start{text-align:left!important}.text-xxl-end{text-align:right!important}.text-xxl-center{text-align:center!important}}@media (min-width:1200px){.fs-1{font-size:2.5rem!important}.fs-2{font-size:2rem!important}.fs-3{font-size:1.75rem!important}.fs-4{font-size:1.5rem!important}}@media print{.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-grid{display:grid!important}.d-print-inline-grid{display:inline-grid!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:flex!important}.d-print-inline-flex{display:inline-flex!important}.d-print-none{display:none!important}} -/*# sourceMappingURL=bootstrap.min.css.map */ \ No newline at end of file diff --git a/static/css/styles.css b/static/css/styles.css deleted file mode 100644 index 3b4d9ff..0000000 --- a/static/css/styles.css +++ /dev/null @@ -1,278 +0,0 @@ -/* === Print === */ -@media print { - nav, .btn, .sidebar, .form-select, .form-control { - display: none !important; - } - body { - font-size: 12pt; - color: black; - } - table { - border-collapse: collapse; - } -} - - -@media (max-width: 768px) { - main { - margin-left: 0; - } -} - -/* === Body & Container === */ -body { - background-color: #e4dccc; - background-attachment: fixed; -} - -.dashboard-container { - background-color: #ffffff; - box-shadow: 0 0 10px rgba(0,0,0,0.05); - border-radius: 8px; - padding: 20px; - margin: 30px auto; - max-width: 1200px; -} - - - - -.sidebar { - position: fixed; - width: 220px; -} -main { - margin-left: 220px; -} - - - - - -/* === Sidebar === */ -.sidebar { - background: linear-gradient(180deg, #b35400, #993d00); /* dégradé orange foncé */ - color: white; - min-height: 100vh; /* prend toute la hauteur */ - top: 0; - z-index: 1000; - overflow-y: auto; - padding: 1rem; -} - -.sidebar .nav-link { - color: white; - font-weight: 700; -} - -.sidebar .nav-link:hover { - background-color: rgba(255, 255, 255, 0.1); - border-radius: 5px; - color: white; -} - -.sidebar .dropdown-menu { - display: none; - position: relative; - left: 10px; - top: -5px; - border: none; - padding-left: 1rem; - box-shadow: none; -} - -.sidebar .dropdown:hover .dropdown-menu { - display: block; -} - -.sidebar a { - color: white; -} - -.sidebar a:hover { - color: white; -} - -/* === Navbar / Logo / Profil === */ -.logo { - max-width: 80px; -} - -.img-profil { - width: 80px !important; - height: 80px !important; - object-fit: cover; - border-radius: 50%; -} - -/* === Cards === */ -.card { - border: 1px solid #dee2e6; - box-shadow: 0 2px 4px rgba(0,0,0,0.05); - border-radius: 8px; - transition: transform 0.3s ease; -} - -.card:hover { - transform: scale(1.02); -} - -.card-header { - background-color: #f8f9fa; - font-weight: bold !important; - color: black !important; - font-size: 1rem; - border-bottom: none; -} - -.card-body h5 { - color: black !important; - font-weight: bold; - font-size: 2.2rem; -} - -/* === Stat cards === */ -.stat-card { - background: #fff; - padding: 20px; - border-radius: 8px; - box-shadow: 0 2px 5px rgba(113, 11, 11, 0.1); -} - -/* === Employé / Projet details === */ -.employe-detail { - background-color: #f9f9f9; - border-radius: 8px; - box-shadow: 0 2px 6px rgba(0,0,0,0.1); -} - -.employe-detail .card-title { - font-size: 1.8rem; - margin-bottom: 0.5rem; -} - -.employe-detail p { - margin-bottom: 0.4rem; - font-size: 1rem; -} - -.employe-detail a.btn { - font-weight: 500; -} - -.employe-card, .projet-card { - background-color: #fff; - border-radius: 10px; - box-shadow: 0 4px 12px rgba(0,0,0,0.1); - padding: 2.5rem; - max-width: 1400px; - margin: 0 auto; - font-size: 1.1rem; -} - -/* === Forms === */ -.form-wrapper { - max-width: 1000px; - margin: auto; - background-color: rgba(255, 255, 255, 0.95); -} - -form label { - font-weight: 600; - margin-top: 1rem; - display: block; -} - -form input, form select, form textarea { - width: 100%; - padding: 0.5rem; - margin-top: 0.3rem; - border-radius: 5px; - border: 1px solid #ccc; -} - -/* === Formation badges === */ -.formation-badge { - position: relative; - display: inline-block; -} - -.formation-actions { - position: absolute; - top: -5px; - right: -5px; - display: none; -} - -.formation-badge:hover .formation-actions { - display: inline-block; -} - -.formation-actions button { - background: none; - border: none; - color: #fff; - margin-left: 5px; - font-size: 0.9rem; -} - -/* === Context menu === */ -#contextMenu { - width: 150px; -} - -/* === Transitions / Animations === */ -.fade-out { - opacity: 0; - transition: opacity 0.5s ease; -} - -#main-content { - transition: opacity 0.3s ease; -} - - -.login-box { - background: linear-gradient(to right, #f5f7fa, #c3cfe2); - border-radius: 10px; - box-shadow: 0 0 10px rgba(0,0,0,0.3); - width: 100%; - max-width: 400px; -} - -/* === Responsive === */ -@media (max-width: 576px) { - .modal-dialog { - max-width: 100%; - margin: 0; - height: 100%; - } - - .modal-content { - height: 100%; - border-radius: 0; - } - - .modal-body { - overflow-y: auto; - } - - .modal-footer button { - width: 100%; - } - - .img-profil { - width: 50px; - height: 50px; - } - - .sidebar { - width: 100%; - padding: 0.5rem 1rem; - } - - .sidebar .nav-link { - font-size: 0.9rem; - padding: 0.5rem 1rem; - } -} diff --git a/static/css/tabulator_bootstrap5.min.css b/static/css/tabulator_bootstrap5.min.css deleted file mode 100644 index c5cdfdb..0000000 --- a/static/css/tabulator_bootstrap5.min.css +++ /dev/null @@ -1,2 +0,0 @@ -.tabulator{border:1px solid #dee2e6;font-size:16px;overflow:hidden;position:relative;text-align:left;-webkit-transform:translateZ(0);-moz-transform:translateZ(0);-ms-transform:translateZ(0);-o-transform:translateZ(0);transform:translateZ(0)}.tabulator[tabulator-layout=fitDataFill] .tabulator-tableholder .tabulator-table{min-width:100%}.tabulator[tabulator-layout=fitDataTable]{display:inline-block}.tabulator.tabulator-block-select,.tabulator.tabulator-ranges .tabulator-cell:not(.tabulator-editing){user-select:none}.tabulator .tabulator-header{background-color:#fff;border-bottom:1px solid #dee2e6;box-sizing:border-box;color:#555;font-weight:700;outline:none;overflow:hidden;position:relative;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none;white-space:nowrap;width:100%}.tabulator .tabulator-header.tabulator-header-hidden{display:none}.tabulator .tabulator-header .tabulator-header-contents{overflow:hidden;position:relative}.tabulator .tabulator-header .tabulator-header-contents .tabulator-headers{display:inline-block}.tabulator .tabulator-header .tabulator-col{background:#fff;border-right:1px solid #aaa;box-sizing:border-box;display:inline-flex;flex-direction:column;justify-content:flex-start;overflow:hidden;position:relative;text-align:left;vertical-align:bottom}.tabulator .tabulator-header .tabulator-col.tabulator-moving{background:#e6e6e6;border:1px solid #dee2e6;pointer-events:none;position:absolute}.tabulator .tabulator-header .tabulator-col.tabulator-range-highlight{background-color:#d6d6d6;color:#000}.tabulator .tabulator-header .tabulator-col.tabulator-range-selected{background-color:#3876ca;color:#fff}.tabulator .tabulator-header .tabulator-col .tabulator-col-content{box-sizing:border-box;padding:4px;position:relative}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-popup-button{padding:0 8px}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-popup-button:hover{cursor:pointer;opacity:.6}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title-holder{position:relative}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title{box-sizing:border-box;overflow:hidden;text-overflow:ellipsis;vertical-align:bottom;white-space:nowrap;width:100%}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title.tabulator-col-title-wrap{text-overflow:clip;white-space:normal}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-title-editor{background:#fff;border:1px solid #999;box-sizing:border-box;padding:1px;width:100%}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-header-popup-button+.tabulator-title-editor{width:calc(100% - 22px)}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter{align-items:center;bottom:0;display:flex;position:absolute;right:4px;top:0}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter .tabulator-arrow{border-bottom:6px solid #bbb;border-left:6px solid transparent;border-right:6px solid transparent;height:0;width:0}.tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols{border-top:1px solid #aaa;display:flex;margin-right:-1px;overflow:hidden;position:relative}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter{box-sizing:border-box;margin-top:2px;position:relative;text-align:center;width:100%}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter textarea{height:auto!important}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter svg{margin-top:3px}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter input::-ms-clear{height:0;width:0}.tabulator .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title{padding-right:25px}@media (hover:hover) and (pointer:fine){.tabulator .tabulator-header .tabulator-col.tabulator-sortable.tabulator-col-sorter-element:hover{background-color:#e6e6e6;cursor:pointer}}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=none] .tabulator-col-content .tabulator-col-sorter{color:#bbb}@media (hover:hover) and (pointer:fine){.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=none] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover{border-bottom:6px solid #555;cursor:pointer}}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=none] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow{border-bottom:6px solid #bbb;border-top:none}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=ascending] .tabulator-col-content .tabulator-col-sorter{color:#666}@media (hover:hover) and (pointer:fine){.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=ascending] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover{border-bottom:6px solid #555;cursor:pointer}}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=ascending] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow{border-bottom:6px solid #666;border-top:none}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=descending] .tabulator-col-content .tabulator-col-sorter{color:#666}@media (hover:hover) and (pointer:fine){.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=descending] .tabulator-col-content .tabulator-col-sorter.tabulator-col-sorter-element .tabulator-arrow:hover{border-top:6px solid #555;cursor:pointer}}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=descending] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow{border-bottom:none;border-top:6px solid #666;color:#666}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical .tabulator-col-content .tabulator-col-title{align-items:center;display:flex;justify-content:center;text-orientation:mixed;writing-mode:vertical-rl}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-col-vertical-flip .tabulator-col-title{transform:rotate(180deg)}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-title{padding-right:0;padding-top:20px}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable.tabulator-col-vertical-flip .tabulator-col-title{padding-bottom:20px;padding-right:0}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-sorter{bottom:auto;justify-content:center;left:0;right:0;top:4px}.tabulator .tabulator-header .tabulator-frozen{left:0;position:sticky;z-index:11}.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-left{border-right:2px solid #dee2e6}.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-right{border-left:2px solid #dee2e6}.tabulator .tabulator-header .tabulator-calcs-holder{background:#fff!important;border-bottom:1px solid #aaa;border-top:1px solid #dee2e6;box-sizing:border-box;display:inline-block}.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row{background:#fff!important}.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle{display:none}.tabulator .tabulator-header .tabulator-frozen-rows-holder{display:inline-block;padding-top:1em}.tabulator .tabulator-header .tabulator-frozen-rows-holder:empty{display:none}.tabulator .tabulator-tableholder{-webkit-overflow-scrolling:touch;overflow:auto;position:relative;white-space:nowrap;width:100%}.tabulator .tabulator-tableholder:focus{outline:none}.tabulator .tabulator-tableholder .tabulator-placeholder{align-items:center;box-sizing:border-box;display:flex;justify-content:center;min-width:100%;width:100%}.tabulator .tabulator-tableholder .tabulator-placeholder[tabulator-render-mode=virtual]{min-height:100%}.tabulator .tabulator-tableholder .tabulator-placeholder .tabulator-placeholder-contents{color:#ccc;display:inline-block;font-size:20px;font-weight:700;padding:10px;text-align:center;white-space:normal}.tabulator .tabulator-tableholder .tabulator-table{background-color:#fff;color:#333;display:inline-block;overflow:visible;position:relative;white-space:nowrap}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs{background:#dadfe4!important;font-weight:700}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-top{border-bottom:2px solid #dee2e6}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-bottom{border-top:2px solid #dee2e6}.tabulator .tabulator-tableholder .tabulator-range-overlay{inset:0;pointer-events:none;position:absolute;z-index:10}.tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range{border:1px solid #2975dd;box-sizing:border-box;position:absolute}.tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range.tabulator-range-active:after{background-color:#2975dd;border-radius:999px;bottom:-3px;content:"";height:6px;position:absolute;right:-3px;width:6px}.tabulator .tabulator-tableholder .tabulator-range-overlay .tabulator-range-cell-active{border:2px solid #2975dd;box-sizing:border-box;position:absolute}.tabulator .tabulator-footer{background-color:#e6e6e6;border-top:1px solid #dee2e6;color:#555;font-weight:700;user-select:none;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none;white-space:nowrap}.tabulator .tabulator-footer .tabulator-footer-contents{align-items:center;display:flex;flex-direction:row;justify-content:space-between;padding:5px 10px}.tabulator .tabulator-footer .tabulator-footer-contents:empty{display:none}.tabulator .tabulator-footer .tabulator-spreadsheet-tabs{margin-top:-5px;overflow-x:auto}.tabulator .tabulator-footer .tabulator-spreadsheet-tabs .tabulator-spreadsheet-tab{border:1px solid #dee2e6;border-bottom-left-radius:5px;border-bottom-right-radius:5px;border-top:none;display:inline-block;font-size:.9em;padding:5px}.tabulator .tabulator-footer .tabulator-spreadsheet-tabs .tabulator-spreadsheet-tab:hover{cursor:pointer;opacity:.7}.tabulator .tabulator-footer .tabulator-spreadsheet-tabs .tabulator-spreadsheet-tab.tabulator-spreadsheet-tab-active{background:#fff}.tabulator .tabulator-footer .tabulator-calcs-holder{background:#f3f3f3!important;border-bottom:1px solid #dee2e6;border-top:1px solid #dee2e6;box-sizing:border-box;overflow:hidden;text-align:left;width:100%}.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row{background:#f3f3f3!important;display:inline-block}.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle{display:none}.tabulator .tabulator-footer .tabulator-calcs-holder:only-child{border-bottom:none;margin-bottom:-5px}.tabulator .tabulator-footer>*+.tabulator-page-counter{margin-left:10px}.tabulator .tabulator-footer .tabulator-page-counter{font-weight:400}.tabulator .tabulator-footer .tabulator-paginator{color:#555;flex:1;font-family:inherit;font-size:inherit;font-weight:inherit;text-align:right}.tabulator .tabulator-footer .tabulator-page-size{border:1px solid #dee2e6;border-radius:3px;display:inline-block;margin:0 5px;padding:2px 5px}.tabulator .tabulator-footer .tabulator-pages{margin:0 7px}.tabulator .tabulator-footer .tabulator-page{background:hsla(0,0%,100%,.2);border:1px solid #dee2e6;border-radius:3px;display:inline-block;margin:0 2px;padding:2px 5px}.tabulator .tabulator-footer .tabulator-page:disabled{opacity:.5}@media (hover:hover) and (pointer:fine){.tabulator .tabulator-footer .tabulator-page:not(disabled):hover{background:rgba(0,0,0,.2);color:#fff;cursor:pointer}}.tabulator .tabulator-col-resize-handle{display:inline-block;margin-left:-3px;margin-right:-3px;position:relative;vertical-align:middle;width:6px;z-index:11}@media (hover:hover) and (pointer:fine){.tabulator .tabulator-col-resize-handle:hover{cursor:ew-resize}}.tabulator .tabulator-col-resize-handle:last-of-type{margin-right:0;width:3px}.tabulator .tabulator-col-resize-guide{background-color:#999;height:100%;margin-left:-.5px;opacity:.5;position:absolute;top:0;width:4px}.tabulator .tabulator-row-resize-guide{background-color:#999;height:4px;left:0;margin-top:-.5px;opacity:.5;position:absolute;width:100%}.tabulator .tabulator-alert{align-items:center;background:rgba(0,0,0,.4);display:flex;height:100%;left:0;position:absolute;text-align:center;top:0;width:100%;z-index:100}.tabulator .tabulator-alert .tabulator-alert-msg{background:#fff;border-radius:10px;display:inline-block;font-size:16px;font-weight:700;margin:0 auto;padding:10px 20px}.tabulator .tabulator-alert .tabulator-alert-msg.tabulator-alert-state-msg{border:4px solid #333;color:#000}.tabulator .tabulator-alert .tabulator-alert-msg.tabulator-alert-state-error{border:4px solid #d00;color:#590000}.tabulator-row{background-color:#fff;box-sizing:border-box;min-height:24px;position:relative}.tabulator-row.tabulator-row-even{background-color:#e9ecef}@media (hover:hover) and (pointer:fine){.tabulator-row.tabulator-selectable:hover{background-color:#ced4da;cursor:pointer}}.tabulator-row.tabulator-selected{background-color:#9abcea}@media (hover:hover) and (pointer:fine){.tabulator-row.tabulator-selected:hover{background-color:#769bcc;cursor:pointer}}.tabulator-row.tabulator-row-moving{background:#fff;border:1px solid #000}.tabulator-row.tabulator-moving{border-bottom:1px solid #dee2e6;border-top:1px solid #dee2e6;pointer-events:none;position:absolute;z-index:15}.tabulator-row.tabulator-range-highlight .tabulator-cell.tabulator-range-row-header{background-color:#d6d6d6;color:#000}.tabulator-row.tabulator-range-highlight.tabulator-range-selected .tabulator-cell.tabulator-range-row-header,.tabulator-row.tabulator-range-selected .tabulator-cell.tabulator-range-row-header{background-color:#3876ca;color:#fff}.tabulator-row .tabulator-row-resize-handle{bottom:0;height:5px;left:0;position:absolute;right:0}.tabulator-row .tabulator-row-resize-handle.prev{bottom:auto;top:0}@media (hover:hover) and (pointer:fine){.tabulator-row .tabulator-row-resize-handle:hover{cursor:ns-resize}}.tabulator-row .tabulator-responsive-collapse{border-bottom:1px solid #dee2e6;border-top:1px solid #dee2e6;box-sizing:border-box;padding:5px}.tabulator-row .tabulator-responsive-collapse:empty{display:none}.tabulator-row .tabulator-responsive-collapse table{font-size:16px}.tabulator-row .tabulator-responsive-collapse table tr td{position:relative}.tabulator-row .tabulator-responsive-collapse table tr td:first-of-type{padding-right:10px}.tabulator-row .tabulator-cell{border-right:1px solid #dee2e6;box-sizing:border-box;display:inline-block;outline:none;overflow:hidden;padding:4px;position:relative;text-overflow:ellipsis;vertical-align:middle;white-space:nowrap}.tabulator-row .tabulator-cell.tabulator-row-header{border-bottom:1px solid #dee2e6}.tabulator-row .tabulator-cell.tabulator-frozen{background-color:inherit;display:inline-block;left:0;position:sticky;z-index:11}.tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-left{border-right:2px solid #dee2e6}.tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-right{border-left:2px solid #dee2e6}.tabulator-row .tabulator-cell.tabulator-editing{border:1px solid #1d68cd;outline:none;padding:0}.tabulator-row .tabulator-cell.tabulator-editing input,.tabulator-row .tabulator-cell.tabulator-editing select{background:transparent;border:1px;outline:none}.tabulator-row .tabulator-cell.tabulator-validation-fail{border:1px solid #d00}.tabulator-row .tabulator-cell.tabulator-validation-fail input,.tabulator-row .tabulator-cell.tabulator-validation-fail select{background:transparent;border:1px;color:#d00}.tabulator-row .tabulator-cell.tabulator-row-handle{align-items:center;display:inline-flex;justify-content:center;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none}.tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box{width:80%}.tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box .tabulator-row-handle-bar{background:#666;height:3px;margin-top:2px;width:100%}.tabulator-row .tabulator-cell.tabulator-range-selected:not(.tabulator-range-only-cell-selected):not(.tabulator-range-row-header){background-color:#9abcea}.tabulator-row .tabulator-cell .tabulator-data-tree-branch-empty{display:inline-block;width:7px}.tabulator-row .tabulator-cell .tabulator-data-tree-branch{border-bottom:2px solid #dee2e6;border-bottom-left-radius:1px;border-left:2px solid #dee2e6;display:inline-block;height:9px;margin-right:5px;margin-top:-9px;vertical-align:middle;width:7px}.tabulator-row .tabulator-cell .tabulator-data-tree-control{align-items:center;background:rgba(0,0,0,.1);border:1px solid #333;border-radius:2px;display:inline-flex;height:11px;justify-content:center;margin-right:5px;overflow:hidden;vertical-align:middle;width:11px}@media (hover:hover) and (pointer:fine){.tabulator-row .tabulator-cell .tabulator-data-tree-control:hover{background:rgba(0,0,0,.2);cursor:pointer}}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse{background:transparent;display:inline-block;height:7px;position:relative;width:1px}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after{background:#333;content:"";height:1px;left:-3px;position:absolute;top:3px;width:7px}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand{background:#333;display:inline-block;height:7px;position:relative;width:1px}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand:after{background:#333;content:"";height:1px;left:-3px;position:absolute;top:3px;width:7px}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle{align-items:center;background:#666;border-radius:20px;color:#fff;display:inline-flex;font-size:1.1em;font-weight:700;height:15px;justify-content:center;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none;width:15px}@media (hover:hover) and (pointer:fine){.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle:hover{cursor:pointer;opacity:.7}}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-close{display:initial}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-open{display:none}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle svg{stroke:#fff}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle .tabulator-responsive-collapse-toggle-close{display:none}.tabulator-row .tabulator-cell .tabulator-traffic-light{border-radius:14px;display:inline-block;height:14px;width:14px}.tabulator-row.tabulator-group{background:#ccc;border-bottom:1px solid #999;border-right:1px solid #dee2e6;border-top:1px solid #999;box-sizing:border-box;font-weight:700;min-width:100%;padding:5px 5px 5px 10px}@media (hover:hover) and (pointer:fine){.tabulator-row.tabulator-group:hover{background-color:rgba(0,0,0,.1);cursor:pointer}}.tabulator-row.tabulator-group.tabulator-group-visible .tabulator-arrow{border-bottom:0;border-left:6px solid transparent;border-right:6px solid transparent;border-top:6px solid #666;margin-right:10px}.tabulator-row.tabulator-group.tabulator-group-level-1{padding-left:30px}.tabulator-row.tabulator-group.tabulator-group-level-2{padding-left:50px}.tabulator-row.tabulator-group.tabulator-group-level-3{padding-left:70px}.tabulator-row.tabulator-group.tabulator-group-level-4{padding-left:90px}.tabulator-row.tabulator-group.tabulator-group-level-5{padding-left:110px}.tabulator-row.tabulator-group .tabulator-group-toggle{display:inline-block}.tabulator-row.tabulator-group .tabulator-arrow{border-bottom:6px solid transparent;border-left:6px solid #666;border-right:0;border-top:6px solid transparent;display:inline-block;height:0;margin-right:16px;vertical-align:middle;width:0}.tabulator-row.tabulator-group span{color:#d00;margin-left:10px}.tabulator-toggle{background:#dcdcdc;border:1px solid #ccc;box-sizing:border-box;display:flex;flex-direction:row}.tabulator-toggle.tabulator-toggle-on{background:#1c6cc2}.tabulator-toggle .tabulator-toggle-switch{background:#fff;border:1px solid #ccc;box-sizing:border-box}.tabulator-popup-container{-webkit-overflow-scrolling:touch;border:1px solid #dee2e6;box-shadow:0 0 5px 0 rgba(0,0,0,.2);box-sizing:border-box;display:inline-block;font-size:16px;overflow-y:auto;position:absolute;z-index:10000}.tabulator-popup{border-radius:3px;padding:5px}.tabulator-tooltip{border-radius:2px;box-shadow:none;font-size:12px;max-width:min(500px,100%);padding:3px 5px;pointer-events:none}.tabulator-menu .tabulator-menu-item{box-sizing:border-box;padding:5px 10px;position:relative;user-select:none}.tabulator-menu .tabulator-menu-item.tabulator-menu-item-disabled{opacity:.5}@media (hover:hover) and (pointer:fine){.tabulator-menu .tabulator-menu-item:not(.tabulator-menu-item-disabled):hover{background:#e9ecef;cursor:pointer}}.tabulator-menu .tabulator-menu-item.tabulator-menu-item-submenu{padding-right:25px}.tabulator-menu .tabulator-menu-item.tabulator-menu-item-submenu:after{border-color:#dee2e6;border-style:solid;border-width:1px 1px 0 0;content:"";display:inline-block;height:7px;position:absolute;right:10px;top:calc(5px + .4em);transform:rotate(45deg);vertical-align:top;width:7px}.tabulator-menu .tabulator-menu-separator{border-top:1px solid #dee2e6}.tabulator-edit-list{-webkit-overflow-scrolling:touch;font-size:16px;max-height:200px;overflow-y:auto}.tabulator-edit-list .tabulator-edit-list-item{color:#333;outline:none;padding:4px}.tabulator-edit-list .tabulator-edit-list-item.active{background:#1d68cd}.tabulator-edit-list .tabulator-edit-list-item.focused{outline:1px solid #1d68cd}@media (hover:hover) and (pointer:fine){.tabulator-edit-list .tabulator-edit-list-item:hover{background:#1d68cd;color:#fff;cursor:pointer}}.tabulator-edit-list .tabulator-edit-list-placeholder{color:#333;padding:4px;text-align:center}.tabulator-edit-list .tabulator-edit-list-group{border-bottom:1px solid #dee2e6;color:#333;font-weight:700;padding:6px 4px 4px}.tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-2,.tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-2{padding-left:12px}.tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-3,.tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-3{padding-left:20px}.tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-4,.tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-4{padding-left:28px}.tabulator-edit-list .tabulator-edit-list-group.tabulator-edit-list-group-level-5,.tabulator-edit-list .tabulator-edit-list-item.tabulator-edit-list-group-level-5{padding-left:36px}.tabulator.tabulator-ltr{direction:ltr}.tabulator.tabulator-rtl{direction:rtl;text-align:initial}.tabulator.tabulator-rtl .tabulator-header .tabulator-col{border-left:1px solid #aaa;border-right:initial}.tabulator.tabulator-rtl .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols{margin-left:-1px;margin-right:0}.tabulator.tabulator-rtl .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title{padding-left:25px;padding-right:0}.tabulator.tabulator-rtl .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter{left:8px;right:auto}.tabulator.tabulator-rtl .tabulator-tableholder .tabulator-range-overlay .tabulator-range.tabulator-range-active:after{background-color:#2975dd;border-radius:999px;bottom:-3px;content:"";height:6px;left:-3px;position:absolute;right:auto;width:6px}.tabulator.tabulator-rtl .tabulator-row .tabulator-cell{border-left:1px solid #dee2e6;border-right:initial}.tabulator.tabulator-rtl .tabulator-row .tabulator-cell .tabulator-data-tree-branch{border-bottom-left-radius:0;border-bottom-right-radius:1px;border-left:initial;border-right:2px solid #dee2e6;margin-left:5px;margin-right:0}.tabulator.tabulator-rtl .tabulator-row .tabulator-cell .tabulator-data-tree-control{margin-left:5px;margin-right:0}.tabulator.tabulator-rtl .tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-left{border-left:2px solid #dee2e6}.tabulator.tabulator-rtl .tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-right{border-right:2px solid #dee2e6}.tabulator.tabulator-rtl .tabulator-row .tabulator-col-resize-handle:last-of-type{margin-left:0;margin-right:-3px;width:3px}.tabulator.tabulator-rtl .tabulator-footer .tabulator-calcs-holder{text-align:initial}.tabulator-print-fullscreen{bottom:0;left:0;position:absolute;right:0;top:0;z-index:10000}body.tabulator-print-fullscreen-hide>:not(.tabulator-print-fullscreen){display:none!important}.tabulator-print-table{border-collapse:collapse}.tabulator-print-table .tabulator-data-tree-branch{border-bottom:2px solid #dee2e6;border-bottom-left-radius:1px;border-left:2px solid #dee2e6;display:inline-block;height:9px;margin-right:5px;margin-top:-9px;vertical-align:middle;width:7px}.tabulator-print-table .tabulator-print-table-group{background:#ccc;border-bottom:1px solid #999;border-right:1px solid #dee2e6;border-top:1px solid #999;box-sizing:border-box;font-weight:700;min-width:100%;padding:5px 5px 5px 10px}@media (hover:hover) and (pointer:fine){.tabulator-print-table .tabulator-print-table-group:hover{background-color:rgba(0,0,0,.1);cursor:pointer}}.tabulator-print-table .tabulator-print-table-group.tabulator-group-visible .tabulator-arrow{border-bottom:0;border-left:6px solid transparent;border-right:6px solid transparent;border-top:6px solid #666;margin-right:10px}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-1 td{padding-left:30px!important}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-2 td{padding-left:50px!important}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-3 td{padding-left:70px!important}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-4 td{padding-left:90px!important}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-5 td{padding-left:110px!important}.tabulator-print-table .tabulator-print-table-group .tabulator-group-toggle{display:inline-block}.tabulator-print-table .tabulator-print-table-group .tabulator-arrow{border-bottom:6px solid transparent;border-left:6px solid #666;border-right:0;border-top:6px solid transparent;display:inline-block;height:0;margin-right:16px;vertical-align:middle;width:0}.tabulator-print-table .tabulator-print-table-group span{color:#d00;margin-left:10px}.tabulator-print-table .tabulator-data-tree-control{align-items:center;background:rgba(0,0,0,.1);border:1px solid #333;border-radius:2px;display:inline-flex;height:11px;justify-content:center;margin-right:5px;overflow:hidden;vertical-align:middle;width:11px}@media (hover:hover) and (pointer:fine){.tabulator-print-table .tabulator-data-tree-control:hover{background:rgba(0,0,0,.2);cursor:pointer}}.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse{background:transparent;display:inline-block;height:7px;position:relative;width:1px}.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after{background:#333;content:"";height:1px;left:-3px;position:absolute;top:3px;width:7px}.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand{background:#333;display:inline-block;height:7px;position:relative;width:1px}.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand:after{background:#333;content:"";height:1px;left:-3px;position:absolute;top:3px;width:7px}.tabulator{background-color:#fff;border:none}.tabulator .tabulator-header{border-bottom:2px solid #dee2e6;border-top:1px solid #dee2e6;color:inherit}.tabulator .tabulator-header .tabulator-col{background-color:#fff;border-right:none}.tabulator .tabulator-header .tabulator-col .tabulator-col-content{padding:12px}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter{right:0}.tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols{border-top:1px solid #dee2e6}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter input{background-clip:padding-box;background-color:#fff;border:1px solid #ced4da;border-radius:.25rem;color:#495057;font-size:1rem;line-height:1.5;padding:.375rem .75rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter input:focus{background-color:#fff;border:1px solid #1d68cd;color:#495057;outline:0}.tabulator .tabulator-header .tabulator-calcs-holder{border-bottom:1px solid #dee2e6;width:100%}.tabulator .tabulator-tableholder .tabulator-placeholder span{color:#000}.tabulator .tabulator-footer,.tabulator .tabulator-tableholder .tabulator-table{color:inherit}.tabulator .tabulator-footer .tabulator-spreadsheet-tabs .tabulator-spreadsheet-tab{background-color:#fff;font-weight:400}.tabulator .tabulator-footer .tabulator-spreadsheet-tabs .tabulator-spreadsheet-tab.tabulator-spreadsheet-tab-active{background-color:#0d6efd;color:#fff}.tabulator .tabulator-footer .tabulator-paginator{color:inherit}.tabulator .tabulator-footer .tabulator-pages{margin:0}.tabulator .tabulator-footer .tabulator-page{margin:5px 0 0;padding:8px 12px}.tabulator .tabulator-footer .tabulator-page[data-page=first]{border-bottom-left-radius:4px;border-top-left-radius:4px}.tabulator .tabulator-footer .tabulator-page[data-page=last]{border:1px solid #dee2e6;border-bottom-right-radius:4px;border-top-right-radius:4px}.tabulator .tabulator-footer .tabulator-page.active{background-color:#0d6efd;border-color:#0d6efd;color:#fff}.tabulator .tabulator-footer .tabulator-page:disabled{background:#fff;border-color:#dee2e6;color:#6c757d}@media (hover:hover) and (pointer:fine){.tabulator .tabulator-footer .tabulator-page:not(.disabled):hover{background:#e9ecef;border-color:#dee2e6;color:#0a58ca}}.tabulator.table{background-color:#fff}.tabulator.table:not(.thead-light) .tabulator-header,.tabulator.table:not(.thead-light) .tabulator-header .tabulator-col{background-color:#fff;border-color:#dee2e6;color:#212529}.tabulator.table .tabulator-tableholder{color:#212529}.tabulator.table .tabulator-row{background-color:#fff;border-color:#dee2e6;color:#212529}@media (hover:hover) and (pointer:fine){.tabulator.table .tabulator-row:hover{background-color:#dee2e6}.tabulator.table .tabulator-row:hover .tabulator-cell{background-color:#ced4da}}.tabulator.table .tabulator-row.tabulator-selected{background-color:#9abcea}.tabulator.table .tabulator-footer{border-color:#dee2e6!important}.tabulator.table .tabulator-footer .tabulator-calcs-holder{background:#fff!important;border-color:#dee2e6!important}.tabulator.table .tabulator-footer .tabulator-calcs-holder .tabulator-row{background-color:#fff!important;border-color:#dee2e6!important;color:#212529!important}.tabulator.table-striped:not(.table) .tabulator-row.tabulator-row-even{background-color:#e9ecef}.tabulator.table-striped:not(.table) .tabulator-row.tabulator-row-even.tabulator-selected{background-color:#9abcea}@media (hover:hover) and (pointer:fine){.tabulator.table-striped:not(.table) .tabulator-row.tabulator-row-even.tabulator-selectable:hover{background-color:#ced4da;cursor:pointer}.tabulator.table-striped:not(.table) .tabulator-row.tabulator-row-even.tabulator-selected:hover{background-color:#769bcc;cursor:pointer}}.tabulator.table-striped.table .tabulator-row:nth-child(2n) .tabulator-cell{background-color:transparent}.tabulator.table-bordered{border:1px solid #dee2e6}.tabulator.table-bordered .tabulator-header .tabulator-col,.tabulator.table-bordered .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell{border-right:1px solid #dee2e6}.tabulator.table-borderless .tabulator-header,.tabulator.table-borderless .tabulator-row{border:none}.tabulator.table-sm .tabulator-header .tabulator-col .tabulator-col-content{padding:5px!important}.tabulator.table-sm .tabulator-tableholder .tabulator-table .tabulator-row{min-height:26px}.tabulator.table-sm .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell{padding:5px!important}.tabulator.table-sm .tabulator-row{padding-bottom:0;padding-top:0}.tabulator.table-sm .tabulator-col-resize-handle{padding:0}.tabulator.thead-dark .tabulator-header,.tabulator.thead-dark .tabulator-header .tabulator-col{background-color:#212529;border-color:#4d5154;color:#fff}.tabulator.table-striped:not(.table-dark) .tabulator-row.tabulator-row-even,html:not([data-bs-theme=dark]) .tabulator.table-striped .tabulator-row.tabulator-row-even{background-color:#e9ecef}.tabulator.table-striped:not(.table-dark) .tabulator-row.tabulator-row-even.tabulator-selected,html:not([data-bs-theme=dark]) .tabulator.table-striped .tabulator-row.tabulator-row-even.tabulator-selected{background-color:#9abcea}@media (hover:hover) and (pointer:fine){.tabulator.table-striped:not(.table-dark) .tabulator-row.tabulator-row-even.tabulator-selectable:hover,html:not([data-bs-theme=dark]) .tabulator.table-striped .tabulator-row.tabulator-row-even.tabulator-selectable:hover{background-color:#ced4da;cursor:pointer}.tabulator.table-striped:not(.table-dark) .tabulator-row.tabulator-row-even.tabulator-selected:hover,html:not([data-bs-theme=dark]) .tabulator.table-striped .tabulator-row.tabulator-row-even.tabulator-selected:hover{background-color:#769bcc;cursor:pointer}}.tabulator.table-striped.table-dark .tabulator-row:nth-child(2n),html[data-bs-theme=dark] .tabulator.table-striped .tabulator-row:nth-child(2n){background-color:#2c3034!important}.tabulator.table-striped.table-dark .tabulator-row:nth-child(2n) .tabulator-cell,html[data-bs-theme=dark] .tabulator.table-striped .tabulator-row:nth-child(2n) .tabulator-cell{background-color:inherit}.tabulator.table-dark,html[data-bs-theme=dark] .tabulator{background-color:#212529}.tabulator.table-dark:not(.thead-light) .tabulator-header,.tabulator.table-dark:not(.thead-light) .tabulator-header .tabulator-col,html[data-bs-theme=dark] .tabulator:not(.thead-light) .tabulator-header,html[data-bs-theme=dark] .tabulator:not(.thead-light) .tabulator-header .tabulator-col{background-color:#212529;border-color:#4d5154;color:#fff}.tabulator.table-dark .tabulator-tableholder,html[data-bs-theme=dark] .tabulator .tabulator-tableholder{color:#fff}.tabulator.table-dark .tabulator-cell,.tabulator.table-dark .tabulator-row,html[data-bs-theme=dark] .tabulator .tabulator-cell,html[data-bs-theme=dark] .tabulator .tabulator-row{background-color:#212529;border-color:#4d5154;color:#fff}@media (hover:hover) and (pointer:fine){.tabulator.table-dark .tabulator-row:hover,html[data-bs-theme=dark] .tabulator .tabulator-row:hover{background-color:#4d5154}.tabulator.table-dark .tabulator-row:hover .tabulator-cell,html[data-bs-theme=dark] .tabulator .tabulator-row:hover .tabulator-cell{background-color:#323539}}.tabulator.table-dark .tabulator-row.tabulator-selected,html[data-bs-theme=dark] .tabulator .tabulator-row.tabulator-selected{background-color:#373b3e}.tabulator.table-dark .tabulator-footer,html[data-bs-theme=dark] .tabulator .tabulator-footer{border-color:#4d5154!important;color:#212529!important}.tabulator.table-dark .tabulator-footer .tabulator-calcs-holder,html[data-bs-theme=dark] .tabulator .tabulator-footer .tabulator-calcs-holder{background:#212529!important;border-color:#4d5154!important}.tabulator.table-dark .tabulator-footer .tabulator-calcs-holder .tabulator-row,html[data-bs-theme=dark] .tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row{background-color:#212529!important;border-color:#4d5154!important;color:#fff!important}.tabulator.table-dark input,html[data-bs-theme=dark] .tabulator input{background-color:#6c757d!important;color:#fff!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.table-primary{background:#cfe2ff!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.table-secondary{background:#e2e3e5!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.table-success{background:#d1e7dd!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.table-info{background:#cff4fc!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.table-warning{background:#fff3cd!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.table-danger{background:#f8d7da!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.table-light{background:#f8f9fa!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.table{background:#212529!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.table-active{background:#6c757d!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.bg-primary{background:#cfe2ff!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.bg-secondary{background:#e2e3e5!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.bg-success{background:#d1e7dd!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.bg-info{background:#cff4fc!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.bg-warning{background:#fff3cd!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.bg-danger{background:#f8d7da!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.bg-light{background:#f8f9fa!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.bg-dark{background:#212529!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.bg-active{background:#6c757d!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.table-primary{background:#cfe2ff!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.table-secondary{background:#e2e3e5!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.table-success{background:#d1e7dd!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.table-info{background:#cff4fc!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.table-warning{background:#fff3cd!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.table-danger{background:#f8d7da!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.table-light{background:#f8f9fa!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.table{background:#212529!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.table-active{background:#6c757d!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.bg-primary{background:#cfe2ff!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.bg-secondary{background:#e2e3e5!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.bg-success{background:#d1e7dd!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.bg-info{background:#cff4fc!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.bg-warning{background:#fff3cd!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.bg-danger{background:#f8d7da!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.bg-light{background:#f8f9fa!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.bg-dark{background:#212529!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.bg-active{background:#6c757d!important}.tabulator-row{border-bottom:1px solid #dee2e6;min-height:40px}.tabulator-row .tabulator-cell{border-right:none;padding:12px}.tabulator-row .tabulator-cell:last-of-type{border-right:none}.tabulator-row .tabulator-cell.tabulator-row-header{background:#fff;border-bottom:none;border-right:1px solid #dee2e6}.tabulator-row .tabulator-cell .tabulator-data-tree-control{border:1px solid #ccc}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after,.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand,.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand:after{background:#ccc}.tabulator-row.tabulator-group{background:#fafafa}.tabulator-row.tabulator-group span{color:#666}.tabulator-edit-select-list{background:#fff}.tabulator-edit-select-list .tabulator-edit-select-list-item.active{color:#fff}.tabulator-edit-select-list .tabulator-edit-select-list-item.active.focused{outline:1px solid hsla(0,0%,100%,.5)}@media (hover:hover) and (pointer:fine){.tabulator-edit-select-list .tabulator-edit-select-list-item:hover{color:#fff}}.tabulator-edit-select-list .tabulator-edit-select-list-group,.tabulator-edit-select-list .tabulator-edit-select-list-notice{color:inherit}.tabulator.tabulator-rtl .tabulator-header .tabulator-col{border-left:initial;text-align:initial}.tabulator-print-table .tabulator-print-table-group{background:#fafafa}.tabulator-print-table .tabulator-print-table-group span{color:#666}.tabulator-print-table .tabulator-data-tree-control{color:inherit}.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after,.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand,.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand:after{background:#ccc}.tabulator-popup-container{background:#fff}.tabulator-edit-list .tabulator-edit-list-item.active{color:#fff}.tabulator-edit-list .tabulator-edit-list-item.active.focused{outline:1px solid hsla(0,0%,100%,.5)}@media (hover:hover) and (pointer:fine){.tabulator-edit-list .tabulator-edit-list-item:hover{color:#fff}} -/*# sourceMappingURL=tabulator_bootstrap5.min.css.map */ \ No newline at end of file diff --git a/static/css/tabulator_bootstrap5.min.css:Zone.Identifier b/static/css/tabulator_bootstrap5.min.css:Zone.Identifier deleted file mode 100644 index d6c1ec682968c796b9f5e9e080cc6f674b57c766..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25 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≦jiZgHHd0;wqxyimP?PQ#>eV?;)nk$W2jY31K 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 diff --git a/static/js/monprofil.js b/static/js/monprofil.js deleted file mode 100644 index dc53e6c..0000000 --- a/static/js/monprofil.js +++ /dev/null @@ -1,13 +0,0 @@ - - - diff --git a/static/js/rapport.js b/static/js/rapport.js deleted file mode 100644 index b0f0e6d..0000000 --- a/static/js/rapport.js +++ /dev/null @@ -1,102 +0,0 @@ -if ('serviceWorker' in navigator) { - window.addEventListener('load', function() { - navigator.serviceWorker.register('{% static "sw.js" %}').then(function(reg) { - console.log('Service worker registered.', reg); - }).catch(function(err) { - console.warn('Service worker registration failed:', err); - }); - }); -} - -const couleursOrange = ['#b35400', '#ff9f1c', '#ffc107', '#ffb84d', '#ffcc80']; -const departementLabels = {{ departement_labels|safe }}; -const departementCounts = {{ departement_counts|safe }}; -const sexeLabels = {{ sexe_labels|safe }}; -const sexeCounts = {{ sexe_counts|safe }}; -const projetLabels = {{ projet_labels|safe }}; -const projetCounts = {{ projet_counts|safe }}; -const ticketsLabels = ["Traités", "Non traités"]; -const ticketsCounts = [{{ tickets_traite }}, {{ tickets_non_traite }}]; -const domaineLabels = {{ domaine_labels|safe }}; -const domaineCounts = {{ domaine_counts|safe }}; - -new Chart(document.getElementById("chartDepartement"), { - type: 'pie', - plugins: [ChartDataLabels], - data: { - labels: departementLabels, - datasets: [{ data: departementCounts, backgroundColor: couleursOrange }] - }, - options: { - plugins: { - legend: { position: 'bottom' }, - datalabels: { color: '#fff', font: { weight: 'bold', size: 14 }, formatter: v => v } - } - } -}); - -new Chart(document.getElementById("chartSexe"), { - type: 'doughnut', - plugins: [ChartDataLabels], - data: { - labels: sexeLabels, - datasets: [{ data: sexeCounts, backgroundColor: couleursOrange }] - }, - options: { - plugins: { - legend: { position: 'bottom' }, - datalabels: { color: '#fff', font: { weight: 'bold', size: 14 }, formatter: v => v } - } - } -}); - -new Chart(document.getElementById("chartProjets"), { - type: 'bar', - plugins: [ChartDataLabels], - data: { - labels: projetLabels, - datasets: [{ label:'Nombre de projets', data: projetCounts, backgroundColor: couleursOrange }] - }, - options: { - responsive: true, - plugins: { - legend: { display: false }, - datalabels: { anchor:'end', align:'top', color:'#000', font:{ weight:'bold', size:16 }, formatter:v => v } - }, - scales: { - y: { beginAtZero:true, ticks:{ stepSize:1, precision:0 }, title:{ display:true, text:'Nombre de projets' } }, - x: { title:{ display:true, text:'' } } - } - } -}); - -new Chart(document.getElementById("chartDomaine"), { - type: 'bar', - plugins: [ChartDataLabels], - data: { - labels: domaineLabels, - datasets: [{ label:'Nombre de projets', data: domaineCounts, backgroundColor: couleursOrange }] - }, - options: { - responsive: true, - plugins: { - legend: { display: false }, - datalabels: { anchor:'end', align:'top', color:'#000', font:{ weight:'bold', size:14 }, formatter:v => v } - }, - scales: { - y: { beginAtZero:true, title:{ display:true, text:'Nombre de projets' }, ticks:{ precision:0, stepSize:1 } }, - x: { - ticks:{ autoSkip:false, maxRotation:100, minRotation:30, callback: function(value){ return this.getLabelForValue(value); } } - } - } - } -}); - -document.getElementById('btnVoirRapport').addEventListener('click', function() { - const projetId = document.getElementById('projetId').value; - if(!projetId) return alert("Veuillez sélectionner un projet."); - fetch(`/rapports/projet/${projetId}/`) - .then(resp => { if(!resp.ok) throw new Error("Projet non trouvé"); return resp.text(); }) - .then(html => { document.getElementById('contenuRapportProjet').innerHTML = html; }) - .catch(err => { document.getElementById('contenuRapportProjet').innerHTML = "

    Erreur lors du chargement.

    "; console.error(err); }); -}); \ No newline at end of file diff --git a/static/js/sirh-index.js b/static/js/sirh-index.js deleted file mode 100644 index 242fed3..0000000 --- a/static/js/sirh-index.js +++ /dev/null @@ -1,75 +0,0 @@ - - - - - - - -> - - -{% endif %} - - - - - - \ No newline at end of file diff --git a/staticfiles/admin/css/autocomplete.css b/staticfiles/admin/css/autocomplete.css deleted file mode 100644 index 7478c2c..0000000 --- a/staticfiles/admin/css/autocomplete.css +++ /dev/null @@ -1,279 +0,0 @@ -select.admin-autocomplete { - width: 20em; -} - -.select2-container--admin-autocomplete.select2-container { - min-height: 30px; -} - -.select2-container--admin-autocomplete .select2-selection--single, -.select2-container--admin-autocomplete .select2-selection--multiple { - min-height: 30px; - padding: 0; -} - -.select2-container--admin-autocomplete.select2-container--focus .select2-selection, -.select2-container--admin-autocomplete.select2-container--open .select2-selection { - border-color: var(--body-quiet-color); - min-height: 30px; -} - -.select2-container--admin-autocomplete.select2-container--focus .select2-selection.select2-selection--single, -.select2-container--admin-autocomplete.select2-container--open .select2-selection.select2-selection--single { - padding: 0; -} - -.select2-container--admin-autocomplete.select2-container--focus .select2-selection.select2-selection--multiple, -.select2-container--admin-autocomplete.select2-container--open .select2-selection.select2-selection--multiple { - padding: 0; -} - -.select2-container--admin-autocomplete .select2-selection--single { - background-color: var(--body-bg); - border: 1px solid var(--border-color); - border-radius: 4px; -} - -.select2-container--admin-autocomplete .select2-selection--single .select2-selection__rendered { - color: var(--body-fg); - line-height: 30px; -} - -.select2-container--admin-autocomplete .select2-selection--single .select2-selection__clear { - cursor: pointer; - float: right; - font-weight: bold; -} - -.select2-container--admin-autocomplete .select2-selection--single .select2-selection__placeholder { - color: var(--body-quiet-color); -} - -.select2-container--admin-autocomplete .select2-selection--single .select2-selection__arrow { - height: 26px; - position: absolute; - top: 1px; - right: 1px; - width: 20px; -} - -.select2-container--admin-autocomplete .select2-selection--single .select2-selection__arrow b { - border-color: #888 transparent transparent transparent; - border-style: solid; - border-width: 5px 4px 0 4px; - height: 0; - left: 50%; - margin-left: -4px; - margin-top: -2px; - position: absolute; - top: 50%; - width: 0; -} - -.select2-container--admin-autocomplete[dir="rtl"] .select2-selection--single .select2-selection__clear { - float: left; -} - -.select2-container--admin-autocomplete[dir="rtl"] .select2-selection--single .select2-selection__arrow { - left: 1px; - right: auto; -} - -.select2-container--admin-autocomplete.select2-container--disabled .select2-selection--single { - background-color: var(--darkened-bg); - cursor: default; -} - -.select2-container--admin-autocomplete.select2-container--disabled .select2-selection--single .select2-selection__clear { - display: none; -} - -.select2-container--admin-autocomplete.select2-container--open .select2-selection--single .select2-selection__arrow b { - border-color: transparent transparent #888 transparent; - border-width: 0 4px 5px 4px; -} - -.select2-container--admin-autocomplete .select2-selection--multiple { - background-color: var(--body-bg); - border: 1px solid var(--border-color); - border-radius: 4px; - cursor: text; -} - -.select2-container--admin-autocomplete .select2-selection--multiple .select2-selection__rendered { - box-sizing: border-box; - list-style: none; - margin: 0; - padding: 0 10px 5px 5px; - width: 100%; - display: flex; - flex-wrap: wrap; -} - -.select2-container--admin-autocomplete .select2-selection--multiple .select2-selection__rendered li { - list-style: none; -} - -.select2-container--admin-autocomplete .select2-selection--multiple .select2-selection__placeholder { - color: var(--body-quiet-color); - margin-top: 5px; - float: left; -} - -.select2-container--admin-autocomplete .select2-selection--multiple .select2-selection__clear { - cursor: pointer; - float: right; - font-weight: bold; - margin: 5px; - position: absolute; - right: 0; -} - -.select2-container--admin-autocomplete .select2-selection--multiple .select2-selection__choice { - background-color: var(--darkened-bg); - border: 1px solid var(--border-color); - border-radius: 4px; - cursor: default; - float: left; - margin-right: 5px; - margin-top: 5px; - padding: 0 5px; -} - -.select2-container--admin-autocomplete .select2-selection--multiple .select2-selection__choice__remove { - color: var(--body-quiet-color); - cursor: pointer; - display: inline-block; - font-weight: bold; - margin-right: 2px; -} - -.select2-container--admin-autocomplete .select2-selection--multiple .select2-selection__choice__remove:hover { - color: var(--body-fg); -} - -.select2-container--admin-autocomplete[dir="rtl"] .select2-selection--multiple .select2-selection__choice, .select2-container--admin-autocomplete[dir="rtl"] .select2-selection--multiple .select2-selection__placeholder, .select2-container--admin-autocomplete[dir="rtl"] .select2-selection--multiple .select2-search--inline { - float: right; -} - -.select2-container--admin-autocomplete[dir="rtl"] .select2-selection--multiple .select2-selection__choice { - margin-left: 5px; - margin-right: auto; -} - -.select2-container--admin-autocomplete[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove { - margin-left: 2px; - margin-right: auto; -} - -.select2-container--admin-autocomplete.select2-container--focus .select2-selection--multiple { - border: solid var(--body-quiet-color) 1px; - outline: 0; -} - -.select2-container--admin-autocomplete.select2-container--disabled .select2-selection--multiple { - background-color: var(--darkened-bg); - cursor: default; -} - -.select2-container--admin-autocomplete.select2-container--disabled .select2-selection__choice__remove { - display: none; -} - -.select2-container--admin-autocomplete.select2-container--open.select2-container--above .select2-selection--single, .select2-container--admin-autocomplete.select2-container--open.select2-container--above .select2-selection--multiple { - border-top-left-radius: 0; - border-top-right-radius: 0; -} - -.select2-container--admin-autocomplete.select2-container--open.select2-container--below .select2-selection--single, .select2-container--admin-autocomplete.select2-container--open.select2-container--below .select2-selection--multiple { - border-bottom-left-radius: 0; - border-bottom-right-radius: 0; -} - -.select2-container--admin-autocomplete .select2-search--dropdown { - background: var(--darkened-bg); -} - -.select2-container--admin-autocomplete .select2-search--dropdown .select2-search__field { - background: var(--body-bg); - color: var(--body-fg); - border: 1px solid var(--border-color); - border-radius: 4px; -} - -.select2-container--admin-autocomplete .select2-search--inline .select2-search__field { - background: transparent; - color: var(--body-fg); - border: none; - outline: 0; - box-shadow: none; - -webkit-appearance: textfield; -} - -.select2-container--admin-autocomplete .select2-results > .select2-results__options { - max-height: 200px; - overflow-y: auto; - color: var(--body-fg); - background: var(--body-bg); -} - -.select2-container--admin-autocomplete .select2-results__option[role=group] { - padding: 0; -} - -.select2-container--admin-autocomplete .select2-results__option[aria-disabled=true] { - color: var(--body-quiet-color); -} - -.select2-container--admin-autocomplete .select2-results__option[aria-selected=true] { - background-color: var(--selected-bg); - color: var(--body-fg); -} - -.select2-container--admin-autocomplete .select2-results__option .select2-results__option { - padding-left: 1em; -} - -.select2-container--admin-autocomplete .select2-results__option .select2-results__option .select2-results__group { - padding-left: 0; -} - -.select2-container--admin-autocomplete .select2-results__option .select2-results__option .select2-results__option { - margin-left: -1em; - padding-left: 2em; -} - -.select2-container--admin-autocomplete .select2-results__option .select2-results__option .select2-results__option .select2-results__option { - margin-left: -2em; - padding-left: 3em; -} - -.select2-container--admin-autocomplete .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option { - margin-left: -3em; - padding-left: 4em; -} - -.select2-container--admin-autocomplete .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option { - margin-left: -4em; - padding-left: 5em; -} - -.select2-container--admin-autocomplete .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option { - margin-left: -5em; - padding-left: 6em; -} - -.select2-container--admin-autocomplete .select2-results__option--highlighted[aria-selected] { - background-color: var(--primary); - color: var(--primary-fg); -} - -.select2-container--admin-autocomplete .select2-results__group { - cursor: default; - display: block; - padding: 6px; -} - -.errors .select2-selection { - border: 1px solid var(--error-fg); -} diff --git a/staticfiles/admin/css/base.css b/staticfiles/admin/css/base.css deleted file mode 100644 index 3791043..0000000 --- a/staticfiles/admin/css/base.css +++ /dev/null @@ -1,1180 +0,0 @@ -/* - DJANGO Admin styles -*/ - -/* VARIABLE DEFINITIONS */ -html[data-theme="light"], -:root { - --primary: #79aec8; - --secondary: #417690; - --accent: #f5dd5d; - --primary-fg: #fff; - - --body-fg: #333; - --body-bg: #fff; - --body-quiet-color: #666; - --body-medium-color: #444; - --body-loud-color: #000; - - --header-color: #ffc; - --header-branding-color: var(--accent); - --header-bg: var(--secondary); - --header-link-color: var(--primary-fg); - - --breadcrumbs-fg: #c4dce8; - --breadcrumbs-link-fg: var(--body-bg); - --breadcrumbs-bg: #264b5d; - - --link-fg: #417893; - --link-hover-color: #036; - --link-selected-fg: var(--secondary); - - --hairline-color: #e8e8e8; - --border-color: #ccc; - - --error-fg: #ba2121; - - --message-success-bg: #dfd; - --message-warning-bg: #ffc; - --message-error-bg: #ffefef; - - --darkened-bg: #f8f8f8; /* A bit darker than --body-bg */ - --selected-bg: #e4e4e4; /* E.g. selected table cells */ - --selected-row: #ffc; - - --button-fg: #fff; - --button-bg: var(--secondary); - --button-hover-bg: #205067; - --default-button-bg: #205067; - --default-button-hover-bg: var(--secondary); - --close-button-bg: #747474; - --close-button-hover-bg: #333; - --delete-button-bg: #ba2121; - --delete-button-hover-bg: #a41515; - - --object-tools-fg: var(--button-fg); - --object-tools-bg: var(--close-button-bg); - --object-tools-hover-bg: var(--close-button-hover-bg); - - --font-family-primary: - "Segoe UI", - system-ui, - Roboto, - "Helvetica Neue", - Arial, - sans-serif, - "Apple Color Emoji", - "Segoe UI Emoji", - "Segoe UI Symbol", - "Noto Color Emoji"; - --font-family-monospace: - ui-monospace, - Menlo, - Monaco, - "Cascadia Mono", - "Segoe UI Mono", - "Roboto Mono", - "Oxygen Mono", - "Ubuntu Monospace", - "Source Code Pro", - "Fira Mono", - "Droid Sans Mono", - "Courier New", - monospace, - "Apple Color Emoji", - "Segoe UI Emoji", - "Segoe UI Symbol", - "Noto Color Emoji"; - - color-scheme: light; -} - -html, body { - height: 100%; -} - -body { - margin: 0; - padding: 0; - font-size: 0.875rem; - font-family: var(--font-family-primary); - color: var(--body-fg); - background: var(--body-bg); -} - -/* LINKS */ - -a:link, a:visited { - color: var(--link-fg); - text-decoration: none; - transition: color 0.15s, background 0.15s; -} - -a:focus, a:hover { - color: var(--link-hover-color); -} - -a:focus { - text-decoration: underline; -} - -a img { - border: none; -} - -a.section:link, a.section:visited { - color: var(--header-link-color); - text-decoration: none; -} - -a.section:focus, a.section:hover { - text-decoration: underline; -} - -/* GLOBAL DEFAULTS */ - -p, ol, ul, dl { - margin: .2em 0 .8em 0; -} - -p { - padding: 0; - line-height: 140%; -} - -h1,h2,h3,h4,h5 { - font-weight: bold; -} - -h1 { - margin: 0 0 20px; - font-weight: 300; - font-size: 1.25rem; -} - -h2 { - font-size: 1rem; - margin: 1em 0 .5em 0; -} - -h2.subhead { - font-weight: normal; - margin-top: 0; -} - -h3 { - font-size: 0.875rem; - margin: .8em 0 .3em 0; - color: var(--body-medium-color); - font-weight: bold; -} - -h4 { - font-size: 0.75rem; - margin: 1em 0 .8em 0; - padding-bottom: 3px; - color: var(--body-medium-color); -} - -h5 { - font-size: 0.625rem; - margin: 1.5em 0 .5em 0; - color: var(--body-quiet-color); - text-transform: uppercase; - letter-spacing: 1px; -} - -ul > li { - list-style-type: square; - padding: 1px 0; -} - -li ul { - margin-bottom: 0; -} - -li, dt, dd { - font-size: 0.8125rem; - line-height: 1.25rem; -} - -dt { - font-weight: bold; - margin-top: 4px; -} - -dd { - margin-left: 0; -} - -form { - margin: 0; - padding: 0; -} - -fieldset { - margin: 0; - min-width: 0; - padding: 0; - border: none; - border-top: 1px solid var(--hairline-color); -} - -details summary { - cursor: pointer; -} - -blockquote { - font-size: 0.6875rem; - color: #777; - margin-left: 2px; - padding-left: 10px; - border-left: 5px solid #ddd; -} - -code, pre { - font-family: var(--font-family-monospace); - color: var(--body-quiet-color); - font-size: 0.75rem; - overflow-x: auto; -} - -pre.literal-block { - margin: 10px; - background: var(--darkened-bg); - padding: 6px 8px; -} - -code strong { - color: #930; -} - -hr { - clear: both; - color: var(--hairline-color); - background-color: var(--hairline-color); - height: 1px; - border: none; - margin: 0; - padding: 0; - line-height: 1px; -} - -/* TEXT STYLES & MODIFIERS */ - -.small { - font-size: 0.6875rem; -} - -.mini { - font-size: 0.625rem; -} - -.help, p.help, form p.help, div.help, form div.help, div.help li { - font-size: 0.6875rem; - color: var(--body-quiet-color); -} - -div.help ul { - margin-bottom: 0; -} - -.help-tooltip { - cursor: help; -} - -p img, h1 img, h2 img, h3 img, h4 img, td img { - vertical-align: middle; -} - -.quiet, a.quiet:link, a.quiet:visited { - color: var(--body-quiet-color); - font-weight: normal; -} - -.clear { - clear: both; -} - -.nowrap { - white-space: nowrap; -} - -.hidden { - display: none !important; -} - -/* TABLES */ - -table { - border-collapse: collapse; - border-color: var(--border-color); -} - -td, th { - font-size: 0.8125rem; - line-height: 1rem; - border-bottom: 1px solid var(--hairline-color); - vertical-align: top; - padding: 8px; -} - -th { - font-weight: 500; - text-align: left; -} - -thead th, -tfoot td { - color: var(--body-quiet-color); - padding: 5px 10px; - font-size: 0.6875rem; - background: var(--body-bg); - border: none; - border-top: 1px solid var(--hairline-color); - border-bottom: 1px solid var(--hairline-color); -} - -tfoot td { - border-bottom: none; - border-top: 1px solid var(--hairline-color); -} - -thead th.required { - font-weight: bold; -} - -tr.alt { - background: var(--darkened-bg); -} - -tr:nth-child(odd), .row-form-errors { - background: var(--body-bg); -} - -tr:nth-child(even), -tr:nth-child(even) .errorlist, -tr:nth-child(odd) + .row-form-errors, -tr:nth-child(odd) + .row-form-errors .errorlist { - background: var(--darkened-bg); -} - -/* SORTABLE TABLES */ - -thead th { - padding: 5px 10px; - line-height: normal; - text-transform: uppercase; - background: var(--darkened-bg); -} - -thead th a:link, thead th a:visited { - color: var(--body-quiet-color); -} - -thead th.sorted { - background: var(--selected-bg); -} - -thead th.sorted .text { - padding-right: 42px; -} - -table thead th .text span { - padding: 8px 10px; - display: block; -} - -table thead th .text a { - display: block; - cursor: pointer; - padding: 8px 10px; -} - -table thead th .text a:focus, table thead th .text a:hover { - background: var(--selected-bg); -} - -thead th.sorted a.sortremove { - visibility: hidden; -} - -table thead th.sorted:hover a.sortremove { - visibility: visible; -} - -table thead th.sorted .sortoptions { - display: block; - padding: 9px 5px 0 5px; - float: right; - text-align: right; -} - -table thead th.sorted .sortpriority { - font-size: .8em; - min-width: 12px; - text-align: center; - vertical-align: 3px; - margin-left: 2px; - margin-right: 2px; -} - -table thead th.sorted .sortoptions a { - position: relative; - width: 14px; - height: 14px; - display: inline-block; - background: url(../img/sorting-icons.svg) 0 0 no-repeat; - background-size: 14px auto; -} - -table thead th.sorted .sortoptions a.sortremove { - background-position: 0 0; -} - -table thead th.sorted .sortoptions a.sortremove:after { - content: '\\'; - position: absolute; - top: -6px; - left: 3px; - font-weight: 200; - font-size: 1.125rem; - color: var(--body-quiet-color); -} - -table thead th.sorted .sortoptions a.sortremove:focus:after, -table thead th.sorted .sortoptions a.sortremove:hover:after { - color: var(--link-fg); -} - -table thead th.sorted .sortoptions a.sortremove:focus, -table thead th.sorted .sortoptions a.sortremove:hover { - background-position: 0 -14px; -} - -table thead th.sorted .sortoptions a.ascending { - background-position: 0 -28px; -} - -table thead th.sorted .sortoptions a.ascending:focus, -table thead th.sorted .sortoptions a.ascending:hover { - background-position: 0 -42px; -} - -table thead th.sorted .sortoptions a.descending { - top: 1px; - background-position: 0 -56px; -} - -table thead th.sorted .sortoptions a.descending:focus, -table thead th.sorted .sortoptions a.descending:hover { - background-position: 0 -70px; -} - -/* FORM DEFAULTS */ - -input, textarea, select, .form-row p, form .button { - margin: 2px 0; - padding: 2px 3px; - vertical-align: middle; - font-family: var(--font-family-primary); - font-weight: normal; - font-size: 0.8125rem; -} -.form-row div.help { - padding: 2px 3px; -} - -textarea { - vertical-align: top; -} - -/* -Minifiers remove the default (text) "type" attribute from "input" HTML tags. -Add input:not([type]) to make the CSS stylesheet work the same. -*/ -input:not([type]), input[type=text], input[type=password], input[type=email], -input[type=url], input[type=number], input[type=tel], textarea, select, -.vTextField { - border: 1px solid var(--border-color); - border-radius: 4px; - padding: 5px 6px; - margin-top: 0; - color: var(--body-fg); - background-color: var(--body-bg); -} - -/* -Minifiers remove the default (text) "type" attribute from "input" HTML tags. -Add input:not([type]) to make the CSS stylesheet work the same. -*/ -input:not([type]):focus, input[type=text]:focus, input[type=password]:focus, -input[type=email]:focus, input[type=url]:focus, input[type=number]:focus, -input[type=tel]:focus, textarea:focus, select:focus, .vTextField:focus { - border-color: var(--body-quiet-color); -} - -select { - height: 1.875rem; -} - -select[multiple] { - /* Allow HTML size attribute to override the height in the rule above. */ - height: auto; - min-height: 150px; -} - -/* FORM BUTTONS */ - -.button, input[type=submit], input[type=button], .submit-row input, a.button { - background: var(--button-bg); - padding: 10px 15px; - border: none; - border-radius: 4px; - color: var(--button-fg); - cursor: pointer; - transition: background 0.15s; -} - -a.button { - padding: 4px 5px; -} - -.button:active, input[type=submit]:active, input[type=button]:active, -.button:focus, input[type=submit]:focus, input[type=button]:focus, -.button:hover, input[type=submit]:hover, input[type=button]:hover { - background: var(--button-hover-bg); -} - -.button[disabled], input[type=submit][disabled], input[type=button][disabled] { - opacity: 0.4; -} - -.button.default, input[type=submit].default, .submit-row input.default { - border: none; - font-weight: 400; - background: var(--default-button-bg); -} - -.button.default:active, input[type=submit].default:active, -.button.default:focus, input[type=submit].default:focus, -.button.default:hover, input[type=submit].default:hover { - background: var(--default-button-hover-bg); -} - -.button[disabled].default, -input[type=submit][disabled].default, -input[type=button][disabled].default { - opacity: 0.4; -} - - -/* MODULES */ - -.module { - border: none; - margin-bottom: 30px; - background: var(--body-bg); -} - -.module p, .module ul, .module h3, .module h4, .module dl, .module pre { - padding-left: 10px; - padding-right: 10px; -} - -.module blockquote { - margin-left: 12px; -} - -.module ul, .module ol { - margin-left: 1.5em; -} - -.module h3 { - margin-top: .6em; -} - -.module h2, .module caption, .inline-group h2 { - margin: 0; - padding: 8px; - font-weight: 400; - font-size: 0.8125rem; - text-align: left; - background: var(--header-bg); - color: var(--header-link-color); -} - -.module caption, -.inline-group h2 { - font-size: 0.75rem; - letter-spacing: 0.5px; - text-transform: uppercase; -} - -.module table { - border-collapse: collapse; -} - -/* MESSAGES & ERRORS */ - -ul.messagelist { - padding: 0; - margin: 0; -} - -ul.messagelist li { - display: block; - font-weight: 400; - font-size: 0.8125rem; - padding: 10px 10px 10px 65px; - margin: 0 0 10px 0; - background: var(--message-success-bg) url(../img/icon-yes.svg) 40px 12px no-repeat; - background-size: 16px auto; - color: var(--body-fg); - word-break: break-word; -} - -ul.messagelist li.warning { - background: var(--message-warning-bg) url(../img/icon-alert.svg) 40px 14px no-repeat; - background-size: 14px auto; -} - -ul.messagelist li.error { - background: var(--message-error-bg) url(../img/icon-no.svg) 40px 12px no-repeat; - background-size: 16px auto; -} - -.errornote { - font-size: 0.875rem; - font-weight: 700; - display: block; - padding: 10px 12px; - margin: 0 0 10px 0; - color: var(--error-fg); - border: 1px solid var(--error-fg); - border-radius: 4px; - background-color: var(--body-bg); - background-position: 5px 12px; - overflow-wrap: break-word; -} - -ul.errorlist { - margin: 0 0 4px; - padding: 0; - color: var(--error-fg); - background: var(--body-bg); -} - -ul.errorlist li { - font-size: 0.8125rem; - display: block; - margin-bottom: 4px; - overflow-wrap: break-word; -} - -ul.errorlist li:first-child { - margin-top: 0; -} - -ul.errorlist li a { - color: inherit; - text-decoration: underline; -} - -td ul.errorlist { - margin: 0; - padding: 0; -} - -td ul.errorlist li { - margin: 0; -} - -.form-row.errors { - margin: 0; - border: none; - border-bottom: 1px solid var(--hairline-color); - background: none; -} - -.form-row.errors ul.errorlist li { - padding-left: 0; -} - -.errors input, .errors select, .errors textarea, -td ul.errorlist + input, td ul.errorlist + select, td ul.errorlist + textarea { - border: 1px solid var(--error-fg); -} - -.description { - font-size: 0.75rem; - padding: 5px 0 0 12px; -} - -/* BREADCRUMBS */ - -div.breadcrumbs { - background: var(--breadcrumbs-bg); - padding: 10px 40px; - border: none; - color: var(--breadcrumbs-fg); - text-align: left; -} - -div.breadcrumbs a { - color: var(--breadcrumbs-link-fg); -} - -div.breadcrumbs a:focus, div.breadcrumbs a:hover { - color: var(--breadcrumbs-fg); -} - -/* ACTION ICONS */ - -.viewlink, .inlineviewlink { - padding-left: 16px; - background: url(../img/icon-viewlink.svg) 0 1px no-repeat; -} - -.hidelink { - padding-left: 16px; - background: url(../img/icon-hidelink.svg) 0 1px no-repeat; -} - -.addlink { - padding-left: 16px; - background: url(../img/icon-addlink.svg) 0 1px no-repeat; -} - -.changelink, .inlinechangelink { - padding-left: 16px; - background: url(../img/icon-changelink.svg) 0 1px no-repeat; -} - -.deletelink { - padding-left: 16px; - background: url(../img/icon-deletelink.svg) 0 1px no-repeat; -} - -a.deletelink:link, a.deletelink:visited { - color: #CC3434; /* XXX Probably unused? */ -} - -a.deletelink:focus, a.deletelink:hover { - color: #993333; /* XXX Probably unused? */ - text-decoration: none; -} - -/* OBJECT TOOLS */ - -.object-tools { - font-size: 0.625rem; - font-weight: bold; - padding-left: 0; - float: right; - position: relative; - margin-top: -48px; -} - -.object-tools li { - display: block; - float: left; - margin-left: 5px; - height: 1rem; -} - -.object-tools a { - border-radius: 15px; -} - -.object-tools a:link, .object-tools a:visited { - display: block; - float: left; - padding: 3px 12px; - background: var(--object-tools-bg); - color: var(--object-tools-fg); - font-weight: 400; - font-size: 0.6875rem; - text-transform: uppercase; - letter-spacing: 0.5px; -} - -.object-tools a:focus, .object-tools a:hover { - background-color: var(--object-tools-hover-bg); -} - -.object-tools a:focus{ - text-decoration: none; -} - -.object-tools a.viewsitelink, .object-tools a.addlink { - background-repeat: no-repeat; - background-position: right 7px center; - padding-right: 26px; -} - -.object-tools a.viewsitelink { - background-image: url(../img/tooltag-arrowright.svg); -} - -.object-tools a.addlink { - background-image: url(../img/tooltag-add.svg); -} - -/* OBJECT HISTORY */ - -#change-history table { - width: 100%; -} - -#change-history table tbody th { - width: 16em; -} - -#change-history .paginator { - color: var(--body-quiet-color); - border-bottom: 1px solid var(--hairline-color); - background: var(--body-bg); - overflow: hidden; -} - -/* PAGE STRUCTURE */ - -#container { - position: relative; - width: 100%; - min-width: 980px; - padding: 0; - display: flex; - flex-direction: column; - height: 100%; -} - -#container > .main { - display: flex; - flex: 1 0 auto; -} - -.main > .content { - flex: 1 0; - max-width: 100%; -} - -.skip-to-content-link { - position: absolute; - top: -999px; - margin: 5px; - padding: 5px; - background: var(--body-bg); - z-index: 1; -} - -.skip-to-content-link:focus { - left: 0px; - top: 0px; -} - -#content { - padding: 20px 40px; -} - -.dashboard #content { - width: 600px; -} - -#content-main { - float: left; - width: 100%; -} - -#content-related { - float: right; - width: 260px; - position: relative; - margin-right: -300px; -} - -@media (forced-colors: active) { - #content-related { - border: 1px solid; - } -} - -/* COLUMN TYPES */ - -.colMS { - margin-right: 300px; -} - -.colSM { - margin-left: 300px; -} - -.colSM #content-related { - float: left; - margin-right: 0; - margin-left: -300px; -} - -.colSM #content-main { - float: right; -} - -.popup .colM { - width: auto; -} - -/* HEADER */ - -#header { - width: auto; - height: auto; - display: flex; - justify-content: space-between; - align-items: center; - padding: 10px 40px; - background: var(--header-bg); - color: var(--header-color); -} - -#header a:link, #header a:visited, #logout-form button { - color: var(--header-link-color); -} - -#header a:focus , #header a:hover { - text-decoration: underline; -} - -@media (forced-colors: active) { - #header { - border-bottom: 1px solid; - } -} - -#branding { - display: flex; -} - -#site-name { - padding: 0; - margin: 0; - margin-inline-end: 20px; - font-weight: 300; - font-size: 1.5rem; - color: var(--header-branding-color); -} - -#site-name a:link, #site-name a:visited { - color: var(--accent); -} - -#branding h2 { - padding: 0 10px; - font-size: 0.875rem; - margin: -8px 0 8px 0; - font-weight: normal; - color: var(--header-color); -} - -#branding a:hover { - text-decoration: none; -} - -#logout-form { - display: inline; -} - -#logout-form button { - background: none; - border: 0; - cursor: pointer; - font-family: var(--font-family-primary); -} - -#user-tools { - float: right; - margin: 0 0 0 20px; - text-align: right; -} - -#user-tools, #logout-form button{ - padding: 0; - font-weight: 300; - font-size: 0.6875rem; - letter-spacing: 0.5px; - text-transform: uppercase; -} - -#user-tools a, #logout-form button { - border-bottom: 1px solid rgba(255, 255, 255, 0.25); -} - -#user-tools a:focus, #user-tools a:hover, -#logout-form button:active, #logout-form button:hover { - text-decoration: none; - border-bottom: 0; -} - -#logout-form button:active, #logout-form button:hover { - margin-bottom: 1px; -} - -/* SIDEBAR */ - -#content-related { - background: var(--darkened-bg); -} - -#content-related .module { - background: none; -} - -#content-related h3 { - color: var(--body-quiet-color); - padding: 0 16px; - margin: 0 0 16px; -} - -#content-related h4 { - font-size: 0.8125rem; -} - -#content-related p { - padding-left: 16px; - padding-right: 16px; -} - -#content-related .actionlist { - padding: 0; - margin: 16px; -} - -#content-related .actionlist li { - line-height: 1.2; - margin-bottom: 10px; - padding-left: 18px; -} - -#content-related .module h2 { - background: none; - padding: 16px; - margin-bottom: 16px; - border-bottom: 1px solid var(--hairline-color); - font-size: 1.125rem; - color: var(--body-fg); -} - -.delete-confirmation form input[type="submit"] { - background: var(--delete-button-bg); - border-radius: 4px; - padding: 10px 15px; - color: var(--button-fg); -} - -.delete-confirmation form input[type="submit"]:active, -.delete-confirmation form input[type="submit"]:focus, -.delete-confirmation form input[type="submit"]:hover { - background: var(--delete-button-hover-bg); -} - -.delete-confirmation form .cancel-link { - display: inline-block; - vertical-align: middle; - height: 0.9375rem; - line-height: 0.9375rem; - border-radius: 4px; - padding: 10px 15px; - color: var(--button-fg); - background: var(--close-button-bg); - margin: 0 0 0 10px; -} - -.delete-confirmation form .cancel-link:active, -.delete-confirmation form .cancel-link:focus, -.delete-confirmation form .cancel-link:hover { - background: var(--close-button-hover-bg); -} - -/* POPUP */ -.popup #content { - padding: 20px; -} - -.popup #container { - min-width: 0; -} - -.popup #header { - padding: 10px 20px; -} - -/* PAGINATOR */ - -.paginator { - display: flex; - align-items: center; - gap: 4px; - font-size: 0.8125rem; - padding-top: 10px; - padding-bottom: 10px; - line-height: 22px; - margin: 0; - border-top: 1px solid var(--hairline-color); - width: 100%; - box-sizing: border-box; -} - -.paginator a:link, .paginator a:visited { - padding: 2px 6px; - background: var(--button-bg); - text-decoration: none; - color: var(--button-fg); -} - -.paginator a.showall { - border: none; - background: none; - color: var(--link-fg); -} - -.paginator a.showall:focus, .paginator a.showall:hover { - background: none; - color: var(--link-hover-color); -} - -.paginator .end { - margin-right: 6px; -} - -.paginator .this-page { - padding: 2px 6px; - font-weight: bold; - font-size: 0.8125rem; - vertical-align: top; -} - -.paginator a:focus, .paginator a:hover { - color: white; - background: var(--link-hover-color); -} - -.paginator input { - margin-left: auto; -} - -.base-svgs { - display: none; -} - -.visually-hidden { - position: absolute; - width: 1px; - height: 1px; - padding: 0; - overflow: hidden; - clip: rect(0,0,0,0); - white-space: nowrap; - border: 0; - color: var(--body-fg); - background-color: var(--body-bg); -} diff --git a/staticfiles/admin/css/changelists.css b/staticfiles/admin/css/changelists.css deleted file mode 100644 index 005b776..0000000 --- a/staticfiles/admin/css/changelists.css +++ /dev/null @@ -1,343 +0,0 @@ -/* CHANGELISTS */ - -#changelist { - display: flex; - align-items: flex-start; - justify-content: space-between; -} - -#changelist .changelist-form-container { - flex: 1 1 auto; - min-width: 0; -} - -#changelist table { - width: 100%; -} - -.change-list .hiddenfields { display:none; } - -.change-list .filtered table { - border-right: none; -} - -.change-list .filtered { - min-height: 400px; -} - -.change-list .filtered .results, .change-list .filtered .paginator, -.filtered #toolbar, .filtered div.xfull { - width: auto; -} - -.change-list .filtered table tbody th { - padding-right: 1em; -} - -#changelist-form .results { - overflow-x: auto; - width: 100%; -} - -#changelist .toplinks { - border-bottom: 1px solid var(--hairline-color); -} - -#changelist .paginator { - color: var(--body-quiet-color); - border-bottom: 1px solid var(--hairline-color); - background: var(--body-bg); - overflow: hidden; -} - -/* CHANGELIST TABLES */ - -#changelist table thead th { - padding: 0; - white-space: nowrap; - vertical-align: middle; -} - -#changelist table thead th.action-checkbox-column { - width: 1.5em; - text-align: center; -} - -#changelist table tbody td.action-checkbox { - text-align: center; -} - -#changelist table tfoot { - color: var(--body-quiet-color); -} - -/* TOOLBAR */ - -#toolbar { - padding: 8px 10px; - margin-bottom: 15px; - border-top: 1px solid var(--hairline-color); - border-bottom: 1px solid var(--hairline-color); - background: var(--darkened-bg); - color: var(--body-quiet-color); -} - -#toolbar form input { - border-radius: 4px; - font-size: 0.875rem; - padding: 5px; - color: var(--body-fg); -} - -#toolbar #searchbar { - height: 1.1875rem; - border: 1px solid var(--border-color); - padding: 2px 5px; - margin: 0; - vertical-align: top; - font-size: 0.8125rem; - max-width: 100%; -} - -#toolbar #searchbar:focus { - border-color: var(--body-quiet-color); -} - -#toolbar form input[type="submit"] { - border: 1px solid var(--border-color); - font-size: 0.8125rem; - padding: 4px 8px; - margin: 0; - vertical-align: middle; - background: var(--body-bg); - box-shadow: 0 -15px 20px -10px rgba(0, 0, 0, 0.15) inset; - cursor: pointer; - color: var(--body-fg); -} - -#toolbar form input[type="submit"]:focus, -#toolbar form input[type="submit"]:hover { - border-color: var(--body-quiet-color); -} - -#changelist-search img { - vertical-align: middle; - margin-right: 4px; -} - -#changelist-search .help { - word-break: break-word; -} - -/* FILTER COLUMN */ - -#changelist-filter { - flex: 0 0 240px; - order: 1; - background: var(--darkened-bg); - border-left: none; - margin: 0 0 0 30px; -} - -@media (forced-colors: active) { - #changelist-filter { - border: 1px solid; - } -} - -#changelist-filter h2 { - font-size: 0.875rem; - text-transform: uppercase; - letter-spacing: 0.5px; - padding: 5px 15px; - margin-bottom: 12px; - border-bottom: none; -} - -#changelist-filter h3, -#changelist-filter details summary { - font-weight: 400; - padding: 0 15px; - margin-bottom: 10px; -} - -#changelist-filter details summary > * { - display: inline; -} - -#changelist-filter details > summary { - list-style-type: none; -} - -#changelist-filter details > summary::-webkit-details-marker { - display: none; -} - -#changelist-filter details > summary::before { - content: '→'; - font-weight: bold; - color: var(--link-hover-color); -} - -#changelist-filter details[open] > summary::before { - content: '↓'; -} - -#changelist-filter ul { - margin: 5px 0; - padding: 0 15px 15px; - border-bottom: 1px solid var(--hairline-color); -} - -#changelist-filter ul:last-child { - border-bottom: none; -} - -#changelist-filter li { - list-style-type: none; - margin-left: 0; - padding-left: 0; -} - -#changelist-filter a { - display: block; - color: var(--body-quiet-color); - word-break: break-word; -} - -#changelist-filter li.selected { - border-left: 5px solid var(--hairline-color); - padding-left: 10px; - margin-left: -15px; -} - -#changelist-filter li.selected a { - color: var(--link-selected-fg); -} - -#changelist-filter a:focus, #changelist-filter a:hover, -#changelist-filter li.selected a:focus, -#changelist-filter li.selected a:hover { - color: var(--link-hover-color); -} - -#changelist-filter #changelist-filter-extra-actions { - font-size: 0.8125rem; - margin-bottom: 10px; - border-bottom: 1px solid var(--hairline-color); -} - -/* DATE DRILLDOWN */ - -.change-list .toplinks { - display: flex; - padding-bottom: 5px; - flex-wrap: wrap; - gap: 3px 17px; - font-weight: bold; -} - -.change-list .toplinks a { - font-size: 0.8125rem; -} - -.change-list .toplinks .date-back { - color: var(--body-quiet-color); -} - -.change-list .toplinks .date-back:focus, -.change-list .toplinks .date-back:hover { - color: var(--link-hover-color); -} - -/* ACTIONS */ - -.filtered .actions { - border-right: none; -} - -#changelist table input { - margin: 0; - vertical-align: baseline; -} - -/* Once the :has() pseudo-class is supported by all browsers, the tr.selected - selector and the JS adding the class can be removed. */ -#changelist tbody tr.selected { - background-color: var(--selected-row); -} - -#changelist tbody tr:has(.action-select:checked) { - background-color: var(--selected-row); -} - -@media (forced-colors: active) { - #changelist tbody tr.selected { - background-color: SelectedItem; - } - #changelist tbody tr:has(.action-select:checked) { - background-color: SelectedItem; - } -} - -#changelist .actions { - padding: 10px; - background: var(--body-bg); - border-top: none; - border-bottom: none; - line-height: 1.5rem; - color: var(--body-quiet-color); - width: 100%; -} - -#changelist .actions span.all, -#changelist .actions span.action-counter, -#changelist .actions span.clear, -#changelist .actions span.question { - font-size: 0.8125rem; - margin: 0 0.5em; -} - -#changelist .actions:last-child { - border-bottom: none; -} - -#changelist .actions select { - vertical-align: top; - height: 1.5rem; - color: var(--body-fg); - border: 1px solid var(--border-color); - border-radius: 4px; - font-size: 0.875rem; - padding: 0 0 0 4px; - margin: 0; - margin-left: 10px; -} - -#changelist .actions select:focus { - border-color: var(--body-quiet-color); -} - -#changelist .actions label { - display: inline-block; - vertical-align: middle; - font-size: 0.8125rem; -} - -#changelist .actions .button { - font-size: 0.8125rem; - border: 1px solid var(--border-color); - border-radius: 4px; - background: var(--body-bg); - box-shadow: 0 -15px 20px -10px rgba(0, 0, 0, 0.15) inset; - cursor: pointer; - height: 1.5rem; - line-height: 1; - padding: 4px 8px; - margin: 0; - color: var(--body-fg); -} - -#changelist .actions .button:focus, #changelist .actions .button:hover { - border-color: var(--body-quiet-color); -} diff --git a/staticfiles/admin/css/dark_mode.css b/staticfiles/admin/css/dark_mode.css deleted file mode 100644 index 65b58d0..0000000 --- a/staticfiles/admin/css/dark_mode.css +++ /dev/null @@ -1,130 +0,0 @@ -@media (prefers-color-scheme: dark) { - :root { - --primary: #264b5d; - --primary-fg: #f7f7f7; - - --body-fg: #eeeeee; - --body-bg: #121212; - --body-quiet-color: #d0d0d0; - --body-medium-color: #e0e0e0; - --body-loud-color: #ffffff; - - --breadcrumbs-link-fg: #e0e0e0; - --breadcrumbs-bg: var(--primary); - - --link-fg: #81d4fa; - --link-hover-color: #4ac1f7; - --link-selected-fg: #6f94c6; - - --hairline-color: #272727; - --border-color: #353535; - - --error-fg: #e35f5f; - --message-success-bg: #006b1b; - --message-warning-bg: #583305; - --message-error-bg: #570808; - - --darkened-bg: #212121; - --selected-bg: #1b1b1b; - --selected-row: #00363a; - - --close-button-bg: #333333; - --close-button-hover-bg: #666666; - - color-scheme: dark; - } - } - - -html[data-theme="dark"] { - --primary: #264b5d; - --primary-fg: #f7f7f7; - - --body-fg: #eeeeee; - --body-bg: #121212; - --body-quiet-color: #d0d0d0; - --body-medium-color: #e0e0e0; - --body-loud-color: #ffffff; - - --breadcrumbs-link-fg: #e0e0e0; - --breadcrumbs-bg: var(--primary); - - --link-fg: #81d4fa; - --link-hover-color: #4ac1f7; - --link-selected-fg: #6f94c6; - - --hairline-color: #272727; - --border-color: #353535; - - --error-fg: #e35f5f; - --message-success-bg: #006b1b; - --message-warning-bg: #583305; - --message-error-bg: #570808; - - --darkened-bg: #212121; - --selected-bg: #1b1b1b; - --selected-row: #00363a; - - --close-button-bg: #333333; - --close-button-hover-bg: #666666; - - color-scheme: dark; -} - -/* THEME SWITCH */ -.theme-toggle { - cursor: pointer; - border: none; - padding: 0; - background: transparent; - vertical-align: middle; - margin-inline-start: 5px; - margin-top: -1px; -} - -.theme-toggle svg { - vertical-align: middle; - height: 1.5rem; - width: 1.5rem; - display: none; -} - -/* -Fully hide screen reader text so we only show the one matching the current -theme. -*/ -.theme-toggle .visually-hidden { - display: none; -} - -html[data-theme="auto"] .theme-toggle .theme-label-when-auto { - display: block; -} - -html[data-theme="dark"] .theme-toggle .theme-label-when-dark { - display: block; -} - -html[data-theme="light"] .theme-toggle .theme-label-when-light { - display: block; -} - -/* ICONS */ -.theme-toggle svg.theme-icon-when-auto, -.theme-toggle svg.theme-icon-when-dark, -.theme-toggle svg.theme-icon-when-light { - fill: var(--header-link-color); - color: var(--header-bg); -} - -html[data-theme="auto"] .theme-toggle svg.theme-icon-when-auto { - display: block; -} - -html[data-theme="dark"] .theme-toggle svg.theme-icon-when-dark { - display: block; -} - -html[data-theme="light"] .theme-toggle svg.theme-icon-when-light { - display: block; -} diff --git a/staticfiles/admin/css/dashboard.css b/staticfiles/admin/css/dashboard.css deleted file mode 100644 index 242b81a..0000000 --- a/staticfiles/admin/css/dashboard.css +++ /dev/null @@ -1,29 +0,0 @@ -/* DASHBOARD */ -.dashboard td, .dashboard th { - word-break: break-word; -} - -.dashboard .module table th { - width: 100%; -} - -.dashboard .module table td { - white-space: nowrap; -} - -.dashboard .module table td a { - display: block; - padding-right: .6em; -} - -/* RECENT ACTIONS MODULE */ - -.module ul.actionlist { - margin-left: 0; -} - -ul.actionlist li { - list-style-type: none; - overflow: hidden; - text-overflow: ellipsis; -} diff --git a/staticfiles/admin/css/forms.css b/staticfiles/admin/css/forms.css deleted file mode 100644 index c6ce788..0000000 --- a/staticfiles/admin/css/forms.css +++ /dev/null @@ -1,498 +0,0 @@ -@import url('widgets.css'); - -/* FORM ROWS */ - -.form-row { - overflow: hidden; - padding: 10px; - font-size: 0.8125rem; - border-bottom: 1px solid var(--hairline-color); -} - -.form-row img, .form-row input { - vertical-align: middle; -} - -.form-row label input[type="checkbox"] { - margin-top: 0; - vertical-align: 0; -} - -form .form-row p { - padding-left: 0; -} - -.flex-container { - display: flex; -} - -.form-multiline { - flex-wrap: wrap; -} - -.form-multiline > div { - padding-bottom: 10px; -} - -/* FORM LABELS */ - -label { - font-weight: normal; - color: var(--body-quiet-color); - font-size: 0.8125rem; -} - -.required label, label.required { - font-weight: bold; -} - -/* RADIO BUTTONS */ - -form div.radiolist div { - padding-right: 7px; -} - -form div.radiolist.inline div { - display: inline-block; -} - -form div.radiolist label { - width: auto; -} - -form div.radiolist input[type="radio"] { - margin: -2px 4px 0 0; - padding: 0; -} - -form ul.inline { - margin-left: 0; - padding: 0; -} - -form ul.inline li { - float: left; - padding-right: 7px; -} - -/* FIELDSETS */ - -fieldset .fieldset-heading, -fieldset .inline-heading, -:not(.inline-related) .collapse summary { - border: 1px solid var(--header-bg); - margin: 0; - padding: 8px; - font-weight: 400; - font-size: 0.8125rem; - background: var(--header-bg); - color: var(--header-link-color); -} - -/* ALIGNED FIELDSETS */ - -.aligned label { - display: block; - padding: 4px 10px 0 0; - min-width: 160px; - width: 160px; - word-wrap: break-word; -} - -.aligned label:not(.vCheckboxLabel):after { - content: ''; - display: inline-block; - vertical-align: middle; -} - -.aligned label + p, .aligned .checkbox-row + div.help, .aligned label + div.readonly { - padding: 6px 0; - margin-top: 0; - margin-bottom: 0; - margin-left: 0; - overflow-wrap: break-word; -} - -.aligned ul label { - display: inline; - float: none; - width: auto; -} - -.aligned .form-row input { - margin-bottom: 0; -} - -.colMS .aligned .vLargeTextField, .colMS .aligned .vXMLLargeTextField { - width: 350px; -} - -form .aligned ul { - margin-left: 160px; - padding-left: 10px; -} - -form .aligned div.radiolist { - display: inline-block; - margin: 0; - padding: 0; -} - -form .aligned p.help, -form .aligned div.help { - margin-top: 0; - margin-left: 160px; - padding-left: 10px; -} - -form .aligned p.date div.help.timezonewarning, -form .aligned p.datetime div.help.timezonewarning, -form .aligned p.time div.help.timezonewarning { - margin-left: 0; - padding-left: 0; - font-weight: normal; -} - -form .aligned p.help:last-child, -form .aligned div.help:last-child { - margin-bottom: 0; - padding-bottom: 0; -} - -form .aligned input + p.help, -form .aligned textarea + p.help, -form .aligned select + p.help, -form .aligned input + div.help, -form .aligned textarea + div.help, -form .aligned select + div.help { - margin-left: 160px; - padding-left: 10px; -} - -form .aligned select option:checked { - background-color: var(--selected-row); -} - -form .aligned ul li { - list-style: none; -} - -form .aligned table p { - margin-left: 0; - padding-left: 0; -} - -.aligned .vCheckboxLabel { - padding: 1px 0 0 5px; -} - -.aligned .vCheckboxLabel + p.help, -.aligned .vCheckboxLabel + div.help { - margin-top: -4px; -} - -.colM .aligned .vLargeTextField, .colM .aligned .vXMLLargeTextField { - width: 610px; -} - -fieldset .fieldBox { - margin-right: 20px; -} - -/* WIDE FIELDSETS */ - -.wide label { - width: 200px; -} - -form .wide p.help, -form .wide ul.errorlist, -form .wide div.help { - padding-left: 50px; -} - -form div.help ul { - padding-left: 0; - margin-left: 0; -} - -.colM fieldset.wide .vLargeTextField, .colM fieldset.wide .vXMLLargeTextField { - width: 450px; -} - -/* COLLAPSIBLE FIELDSETS */ - -.collapse summary .fieldset-heading, -.collapse summary .inline-heading { - background: transparent; - border: none; - color: currentColor; - display: inline; - margin: 0; - padding: 0; -} - -/* MONOSPACE TEXTAREAS */ - -fieldset.monospace textarea { - font-family: var(--font-family-monospace); -} - -/* SUBMIT ROW */ - -.submit-row { - padding: 12px 14px 12px; - margin: 0 0 20px; - background: var(--darkened-bg); - border: 1px solid var(--hairline-color); - border-radius: 4px; - overflow: hidden; - display: flex; - gap: 10px; - flex-wrap: wrap; -} - -body.popup .submit-row { - overflow: auto; -} - -.submit-row input { - height: 2.1875rem; - line-height: 0.9375rem; -} - -.submit-row input, .submit-row a { - margin: 0; -} - -.submit-row input.default { - text-transform: uppercase; -} - -.submit-row a.deletelink { - margin-left: auto; -} - -.submit-row a.deletelink { - display: block; - background: var(--delete-button-bg); - border-radius: 4px; - padding: 0.625rem 0.9375rem; - height: 0.9375rem; - line-height: 0.9375rem; - color: var(--button-fg); -} - -.submit-row a.closelink { - display: inline-block; - background: var(--close-button-bg); - border-radius: 4px; - padding: 10px 15px; - height: 0.9375rem; - line-height: 0.9375rem; - color: var(--button-fg); -} - -.submit-row a.deletelink:focus, -.submit-row a.deletelink:hover, -.submit-row a.deletelink:active { - background: var(--delete-button-hover-bg); - text-decoration: none; -} - -.submit-row a.closelink:focus, -.submit-row a.closelink:hover, -.submit-row a.closelink:active { - background: var(--close-button-hover-bg); - text-decoration: none; -} - -/* CUSTOM FORM FIELDS */ - -.vSelectMultipleField { - vertical-align: top; -} - -.vCheckboxField { - border: none; -} - -.vDateField, .vTimeField { - margin-right: 2px; - margin-bottom: 4px; -} - -.vDateField { - min-width: 6.85em; -} - -.vTimeField { - min-width: 4.7em; -} - -.vURLField { - width: 30em; -} - -.vLargeTextField, .vXMLLargeTextField { - width: 48em; -} - -.flatpages-flatpage #id_content { - height: 40.2em; -} - -.module table .vPositiveSmallIntegerField { - width: 2.2em; -} - -.vIntegerField { - width: 5em; -} - -.vBigIntegerField { - width: 10em; -} - -.vForeignKeyRawIdAdminField { - width: 5em; -} - -.vTextField, .vUUIDField { - width: 20em; -} - -/* INLINES */ - -.inline-group { - padding: 0; - margin: 0 0 30px; -} - -.inline-group thead th { - padding: 8px 10px; -} - -.inline-group .aligned label { - width: 160px; -} - -.inline-related { - position: relative; -} - -.inline-related h4, -.inline-related:not(.tabular) .collapse summary { - margin: 0; - color: var(--body-medium-color); - padding: 5px; - font-size: 0.8125rem; - background: var(--darkened-bg); - border: 1px solid var(--hairline-color); - border-left-color: var(--darkened-bg); - border-right-color: var(--darkened-bg); -} - -.inline-related h3 span.delete { - float: right; -} - -.inline-related h3 span.delete label { - margin-left: 2px; - font-size: 0.6875rem; -} - -.inline-related fieldset { - margin: 0; - background: var(--body-bg); - border: none; - width: 100%; -} - -.inline-group .tabular fieldset.module { - border: none; -} - -.inline-related.tabular fieldset.module table { - width: 100%; - overflow-x: scroll; -} - -.last-related fieldset { - border: none; -} - -.inline-group .tabular tr.has_original td { - padding-top: 2em; -} - -.inline-group .tabular tr td.original { - padding: 2px 0 0 0; - width: 0; - _position: relative; -} - -.inline-group .tabular th.original { - width: 0px; - padding: 0; -} - -.inline-group .tabular td.original p { - position: absolute; - left: 0; - height: 1.1em; - padding: 2px 9px; - overflow: hidden; - font-size: 0.5625rem; - font-weight: bold; - color: var(--body-quiet-color); - _width: 700px; -} - -.inline-group div.add-row, -.inline-group .tabular tr.add-row td { - color: var(--body-quiet-color); - background: var(--darkened-bg); - padding: 8px 10px; - border-bottom: 1px solid var(--hairline-color); -} - -.inline-group .tabular tr.add-row td { - padding: 8px 10px; - border-bottom: 1px solid var(--hairline-color); -} - -.inline-group div.add-row a, -.inline-group .tabular tr.add-row td a { - font-size: 0.75rem; -} - -.empty-form { - display: none; -} - -/* RELATED FIELD ADD ONE / LOOKUP */ - -.related-lookup { - margin-left: 5px; - display: inline-block; - vertical-align: middle; - background-repeat: no-repeat; - background-size: 14px; -} - -.related-lookup { - width: 1rem; - height: 1rem; - background-image: url(../img/search.svg); -} - -form .related-widget-wrapper ul { - display: inline-block; - margin-left: 0; - padding-left: 0; -} - -.clearable-file-input input { - margin-top: 0; -} diff --git a/staticfiles/admin/css/login.css b/staticfiles/admin/css/login.css deleted file mode 100644 index 805a34b..0000000 --- a/staticfiles/admin/css/login.css +++ /dev/null @@ -1,61 +0,0 @@ -/* LOGIN FORM */ - -.login { - background: var(--darkened-bg); - height: auto; -} - -.login #header { - height: auto; - padding: 15px 16px; - justify-content: center; -} - -.login #header h1 { - font-size: 1.125rem; - margin: 0; -} - -.login #header h1 a { - color: var(--header-link-color); -} - -.login #content { - padding: 20px; -} - -.login #container { - background: var(--body-bg); - border: 1px solid var(--hairline-color); - border-radius: 4px; - overflow: hidden; - width: 28em; - min-width: 300px; - margin: 100px auto; - height: auto; -} - -.login .form-row { - padding: 4px 0; -} - -.login .form-row label { - display: block; - line-height: 2em; -} - -.login .form-row #id_username, .login .form-row #id_password { - padding: 8px; - width: 100%; - box-sizing: border-box; -} - -.login .submit-row { - padding: 1em 0 0 0; - margin: 0; - text-align: center; -} - -.login .password-reset-link { - text-align: center; -} diff --git a/staticfiles/admin/css/nav_sidebar.css b/staticfiles/admin/css/nav_sidebar.css deleted file mode 100644 index 7eb0de9..0000000 --- a/staticfiles/admin/css/nav_sidebar.css +++ /dev/null @@ -1,150 +0,0 @@ -.sticky { - position: sticky; - top: 0; - max-height: 100vh; -} - -.toggle-nav-sidebar { - z-index: 20; - left: 0; - display: flex; - align-items: center; - justify-content: center; - flex: 0 0 23px; - width: 23px; - border: 0; - border-right: 1px solid var(--hairline-color); - background-color: var(--body-bg); - cursor: pointer; - font-size: 1.25rem; - color: var(--link-fg); - padding: 0; -} - -[dir="rtl"] .toggle-nav-sidebar { - border-left: 1px solid var(--hairline-color); - border-right: 0; -} - -.toggle-nav-sidebar:hover, -.toggle-nav-sidebar:focus { - background-color: var(--darkened-bg); -} - -#nav-sidebar { - z-index: 15; - flex: 0 0 275px; - left: -276px; - margin-left: -276px; - border-top: 1px solid transparent; - border-right: 1px solid var(--hairline-color); - background-color: var(--body-bg); - overflow: auto; -} - -[dir="rtl"] #nav-sidebar { - border-left: 1px solid var(--hairline-color); - border-right: 0; - left: 0; - margin-left: 0; - right: -276px; - margin-right: -276px; -} - -.toggle-nav-sidebar::before { - content: '\00BB'; -} - -.main.shifted .toggle-nav-sidebar::before { - content: '\00AB'; -} - -.main > #nav-sidebar { - visibility: hidden; -} - -.main.shifted > #nav-sidebar { - margin-left: 0; - visibility: visible; -} - -[dir="rtl"] .main.shifted > #nav-sidebar { - margin-right: 0; -} - -#nav-sidebar .module th { - width: 100%; - overflow-wrap: anywhere; -} - -#nav-sidebar .module th, -#nav-sidebar .module caption { - padding-left: 16px; -} - -#nav-sidebar .module td { - white-space: nowrap; -} - -[dir="rtl"] #nav-sidebar .module th, -[dir="rtl"] #nav-sidebar .module caption { - padding-left: 8px; - padding-right: 16px; -} - -#nav-sidebar .current-app .section:link, -#nav-sidebar .current-app .section:visited { - color: var(--header-color); - font-weight: bold; -} - -#nav-sidebar .current-model { - background: var(--selected-row); -} - -@media (forced-colors: active) { - #nav-sidebar .current-model { - background-color: SelectedItem; - } -} - -.main > #nav-sidebar + .content { - max-width: calc(100% - 23px); -} - -.main.shifted > #nav-sidebar + .content { - max-width: calc(100% - 299px); -} - -@media (max-width: 767px) { - #nav-sidebar, #toggle-nav-sidebar { - display: none; - } - - .main > #nav-sidebar + .content, - .main.shifted > #nav-sidebar + .content { - max-width: 100%; - } -} - -#nav-filter { - width: 100%; - box-sizing: border-box; - padding: 2px 5px; - margin: 5px 0; - border: 1px solid var(--border-color); - background-color: var(--darkened-bg); - color: var(--body-fg); -} - -#nav-filter:focus { - border-color: var(--body-quiet-color); -} - -#nav-filter.no-results { - background: var(--message-error-bg); -} - -#nav-sidebar table { - width: 100%; -} diff --git a/staticfiles/admin/css/responsive.css b/staticfiles/admin/css/responsive.css deleted file mode 100644 index f0fcade..0000000 --- a/staticfiles/admin/css/responsive.css +++ /dev/null @@ -1,904 +0,0 @@ -/* Tablets */ - -input[type="submit"], button { - -webkit-appearance: none; - appearance: none; -} - -@media (max-width: 1024px) { - /* Basic */ - - html { - -webkit-text-size-adjust: 100%; - } - - td, th { - padding: 10px; - font-size: 0.875rem; - } - - .small { - font-size: 0.75rem; - } - - /* Layout */ - - #container { - min-width: 0; - } - - #content { - padding: 15px 20px 20px; - } - - div.breadcrumbs { - padding: 10px 30px; - } - - /* Header */ - - #header { - flex-direction: column; - padding: 15px 30px; - justify-content: flex-start; - } - - #site-name { - margin: 0 0 8px; - line-height: 1.2; - } - - #user-tools { - margin: 0; - font-weight: 400; - line-height: 1.85; - text-align: left; - } - - #user-tools a { - display: inline-block; - line-height: 1.4; - } - - /* Dashboard */ - - .dashboard #content { - width: auto; - } - - #content-related { - margin-right: -290px; - } - - .colSM #content-related { - margin-left: -290px; - } - - .colMS { - margin-right: 290px; - } - - .colSM { - margin-left: 290px; - } - - .dashboard .module table td a { - padding-right: 0; - } - - td .changelink, td .addlink { - font-size: 0.8125rem; - } - - /* Changelist */ - - #toolbar { - border: none; - padding: 15px; - } - - #changelist-search > div { - display: flex; - flex-wrap: nowrap; - max-width: 480px; - } - - #changelist-search label { - line-height: 1.375rem; - } - - #toolbar form #searchbar { - flex: 1 0 auto; - width: 0; - height: 1.375rem; - margin: 0 10px 0 6px; - } - - #toolbar form input[type=submit] { - flex: 0 1 auto; - } - - #changelist-search .quiet { - width: 0; - flex: 1 0 auto; - margin: 5px 0 0 25px; - } - - #changelist .actions { - display: flex; - flex-wrap: wrap; - padding: 15px 0; - } - - #changelist .actions label { - display: flex; - } - - #changelist .actions select { - background: var(--body-bg); - } - - #changelist .actions .button { - min-width: 48px; - margin: 0 10px; - } - - #changelist .actions span.all, - #changelist .actions span.clear, - #changelist .actions span.question, - #changelist .actions span.action-counter { - font-size: 0.6875rem; - margin: 0 10px 0 0; - } - - #changelist-filter { - flex-basis: 200px; - } - - .change-list .filtered .results, - .change-list .filtered .paginator, - .filtered #toolbar, - .filtered .actions, - - #changelist .paginator { - border-top-color: var(--hairline-color); /* XXX Is this used at all? */ - } - - #changelist .results + .paginator { - border-top: none; - } - - /* Forms */ - - label { - font-size: 1rem; - } - - /* - Minifiers remove the default (text) "type" attribute from "input" HTML - tags. Add input:not([type]) to make the CSS stylesheet work the same. - */ - .form-row input:not([type]), - .form-row input[type=text], - .form-row input[type=password], - .form-row input[type=email], - .form-row input[type=url], - .form-row input[type=tel], - .form-row input[type=number], - .form-row textarea, - .form-row select, - .form-row .vTextField { - box-sizing: border-box; - margin: 0; - padding: 6px 8px; - min-height: 2.25rem; - font-size: 1rem; - } - - .form-row select { - height: 2.25rem; - } - - .form-row select[multiple] { - height: auto; - min-height: 0; - } - - fieldset .fieldBox + .fieldBox { - margin-top: 10px; - padding-top: 10px; - border-top: 1px solid var(--hairline-color); - } - - textarea { - max-width: 100%; - max-height: 120px; - } - - .aligned label { - padding-top: 6px; - } - - .aligned .related-lookup, - .aligned .datetimeshortcuts, - .aligned .related-lookup + strong { - align-self: center; - margin-left: 15px; - } - - form .aligned div.radiolist { - margin-left: 2px; - } - - .submit-row { - padding: 8px; - } - - .submit-row a.deletelink { - padding: 10px 7px; - } - - .button, input[type=submit], input[type=button], .submit-row input, a.button { - padding: 7px; - } - - /* Selector */ - - .selector { - display: flex; - width: 100%; - } - - .selector .selector-filter { - display: flex; - align-items: center; - } - - .selector .selector-filter input { - width: 100%; - min-height: 0; - flex: 1 1; - } - - .selector-available, .selector-chosen { - width: auto; - flex: 1 1; - display: flex; - flex-direction: column; - } - - .selector select { - width: 100%; - flex: 1 0 auto; - margin-bottom: 5px; - } - - .selector-chooseall, .selector-clearall { - align-self: center; - } - - .stacked { - flex-direction: column; - max-width: 480px; - } - - .stacked > * { - flex: 0 1 auto; - } - - .stacked select { - margin-bottom: 0; - } - - .stacked .selector-available, .stacked .selector-chosen { - width: auto; - } - - .stacked ul.selector-chooser { - padding: 0 2px; - transform: none; - } - - .stacked .selector-chooser li { - padding: 3px; - } - - .help-tooltip, .selector .help-icon { - display: none; - } - - .datetime input { - width: 50%; - max-width: 120px; - } - - .datetime span { - font-size: 0.8125rem; - } - - .datetime .timezonewarning { - display: block; - font-size: 0.6875rem; - color: var(--body-quiet-color); - } - - .datetimeshortcuts { - color: var(--border-color); /* XXX Redundant, .datetime span also sets #ccc */ - } - - .form-row .datetime input.vDateField, .form-row .datetime input.vTimeField { - width: 75%; - } - - .inline-group { - overflow: auto; - } - - /* Messages */ - - ul.messagelist li { - padding-left: 55px; - background-position: 30px 12px; - } - - ul.messagelist li.error { - background-position: 30px 12px; - } - - ul.messagelist li.warning { - background-position: 30px 14px; - } - - /* Login */ - - .login #header { - padding: 15px 20px; - } - - .login #site-name { - margin: 0; - } - - /* GIS */ - - div.olMap { - max-width: calc(100vw - 30px); - max-height: 300px; - } - - .olMap + .clear_features { - display: block; - margin-top: 10px; - } - - /* Docs */ - - .module table.xfull { - width: 100%; - } - - pre.literal-block { - overflow: auto; - } -} - -/* Mobile */ - -@media (max-width: 767px) { - /* Layout */ - - #header, #content { - padding: 15px; - } - - div.breadcrumbs { - padding: 10px 15px; - } - - /* Dashboard */ - - .colMS, .colSM { - margin: 0; - } - - #content-related, .colSM #content-related { - width: 100%; - margin: 0; - } - - #content-related .module { - margin-bottom: 0; - } - - #content-related .module h2 { - padding: 10px 15px; - font-size: 1rem; - } - - /* Changelist */ - - #changelist { - align-items: stretch; - flex-direction: column; - } - - #toolbar { - padding: 10px; - } - - #changelist-filter { - margin-left: 0; - } - - #changelist .actions label { - flex: 1 1; - } - - #changelist .actions select { - flex: 1 0; - width: 100%; - } - - #changelist .actions span { - flex: 1 0 100%; - } - - #changelist-filter { - position: static; - width: auto; - margin-top: 30px; - } - - .object-tools { - float: none; - margin: 0 0 15px; - padding: 0; - overflow: hidden; - } - - .object-tools li { - height: auto; - margin-left: 0; - } - - .object-tools li + li { - margin-left: 15px; - } - - /* Forms */ - - .form-row { - padding: 15px 0; - } - - .aligned .form-row, - .aligned .form-row > div { - max-width: 100vw; - } - - .aligned .form-row > div { - width: calc(100vw - 30px); - } - - .flex-container { - flex-flow: column; - } - - .flex-container.checkbox-row { - flex-flow: row; - } - - textarea { - max-width: none; - } - - .vURLField { - width: auto; - } - - fieldset .fieldBox + .fieldBox { - margin-top: 15px; - padding-top: 15px; - } - - .aligned label { - width: 100%; - min-width: auto; - padding: 0 0 10px; - } - - .aligned label:after { - max-height: 0; - } - - .aligned .form-row input, - .aligned .form-row select, - .aligned .form-row textarea { - flex: 1 1 auto; - max-width: 100%; - } - - .aligned .checkbox-row input { - flex: 0 1 auto; - margin: 0; - } - - .aligned .vCheckboxLabel { - flex: 1 0; - padding: 1px 0 0 5px; - } - - .aligned label + p, - .aligned label + div.help, - .aligned label + div.readonly { - padding: 0; - margin-left: 0; - } - - .aligned p.file-upload { - font-size: 0.8125rem; - } - - span.clearable-file-input { - margin-left: 15px; - } - - span.clearable-file-input label { - font-size: 0.8125rem; - padding-bottom: 0; - } - - .aligned .timezonewarning { - flex: 1 0 100%; - margin-top: 5px; - } - - form .aligned .form-row div.help { - width: 100%; - margin: 5px 0 0; - padding: 0; - } - - form .aligned ul, - form .aligned ul.errorlist { - margin-left: 0; - padding-left: 0; - } - - form .aligned div.radiolist { - margin-top: 5px; - margin-right: 15px; - margin-bottom: -3px; - } - - form .aligned div.radiolist:not(.inline) div + div { - margin-top: 5px; - } - - /* Related widget */ - - .related-widget-wrapper { - width: 100%; - display: flex; - align-items: flex-start; - } - - .related-widget-wrapper .selector { - order: 1; - flex: 1 0 auto; - } - - .related-widget-wrapper > a { - order: 2; - } - - .related-widget-wrapper .radiolist ~ a { - align-self: flex-end; - } - - .related-widget-wrapper > select ~ a { - align-self: center; - } - - /* Selector */ - - .selector { - flex-direction: column; - gap: 10px 0; - } - - .selector-available, .selector-chosen { - flex: 1 1 auto; - } - - .selector select { - max-height: 96px; - } - - .selector ul.selector-chooser { - display: flex; - width: 60px; - height: 30px; - padding: 0 2px; - transform: none; - } - - .selector ul.selector-chooser li { - float: left; - } - - .selector-remove { - background-position: 0 0; - } - - :enabled.selector-remove:focus, :enabled.selector-remove:hover { - background-position: 0 -24px; - } - - .selector-add { - background-position: 0 -48px; - } - - :enabled.selector-add:focus, :enabled.selector-add:hover { - background-position: 0 -72px; - } - - /* Inlines */ - - .inline-group[data-inline-type="stacked"] .inline-related { - border: 1px solid var(--hairline-color); - border-radius: 4px; - margin-top: 15px; - overflow: auto; - } - - .inline-group[data-inline-type="stacked"] .inline-related > * { - box-sizing: border-box; - } - - .inline-group[data-inline-type="stacked"] .inline-related .module { - padding: 0 10px; - } - - .inline-group[data-inline-type="stacked"] .inline-related .module .form-row { - border-top: 1px solid var(--hairline-color); - border-bottom: none; - } - - .inline-group[data-inline-type="stacked"] .inline-related .module .form-row:first-child { - border-top: none; - } - - .inline-group[data-inline-type="stacked"] .inline-related h3 { - padding: 10px; - border-top-width: 0; - border-bottom-width: 2px; - display: flex; - flex-wrap: wrap; - align-items: center; - } - - .inline-group[data-inline-type="stacked"] .inline-related h3 .inline_label { - margin-right: auto; - } - - .inline-group[data-inline-type="stacked"] .inline-related h3 span.delete { - float: none; - flex: 1 1 100%; - margin-top: 5px; - } - - .inline-group[data-inline-type="stacked"] .aligned .form-row > div:not([class]) { - width: 100%; - } - - .inline-group[data-inline-type="stacked"] .aligned label { - width: 100%; - } - - .inline-group[data-inline-type="stacked"] div.add-row { - margin-top: 15px; - border: 1px solid var(--hairline-color); - border-radius: 4px; - } - - .inline-group div.add-row, - .inline-group .tabular tr.add-row td { - padding: 0; - } - - .inline-group div.add-row a, - .inline-group .tabular tr.add-row td a { - display: block; - padding: 8px 10px 8px 26px; - background-position: 8px 9px; - } - - /* Submit row */ - - .submit-row { - padding: 10px; - margin: 0 0 15px; - flex-direction: column; - gap: 8px; - } - - .submit-row input, .submit-row input.default, .submit-row a { - text-align: center; - } - - .submit-row a.closelink { - padding: 10px 0; - text-align: center; - } - - .submit-row a.deletelink { - margin: 0; - } - - /* Messages */ - - ul.messagelist li { - padding-left: 40px; - background-position: 15px 12px; - } - - ul.messagelist li.error { - background-position: 15px 12px; - } - - ul.messagelist li.warning { - background-position: 15px 14px; - } - - /* Paginator */ - - .paginator .this-page, .paginator a:link, .paginator a:visited { - padding: 4px 10px; - } - - /* Login */ - - body.login { - padding: 0 15px; - } - - .login #container { - width: auto; - max-width: 480px; - margin: 50px auto; - } - - .login #header, - .login #content { - padding: 15px; - } - - .login #content-main { - float: none; - } - - .login .form-row { - padding: 0; - } - - .login .form-row + .form-row { - margin-top: 15px; - } - - .login .form-row label { - margin: 0 0 5px; - line-height: 1.2; - } - - .login .submit-row { - padding: 15px 0 0; - } - - .login br { - display: none; - } - - .login .submit-row input { - margin: 0; - text-transform: uppercase; - } - - .errornote { - margin: 0 0 20px; - padding: 8px 12px; - font-size: 0.8125rem; - } - - /* Calendar and clock */ - - .calendarbox, .clockbox { - position: fixed !important; - top: 50% !important; - left: 50% !important; - transform: translate(-50%, -50%); - margin: 0; - border: none; - overflow: visible; - } - - .calendarbox:before, .clockbox:before { - content: ''; - position: fixed; - top: 50%; - left: 50%; - width: 100vw; - height: 100vh; - background: rgba(0, 0, 0, 0.75); - transform: translate(-50%, -50%); - } - - .calendarbox > *, .clockbox > * { - position: relative; - z-index: 1; - } - - .calendarbox > div:first-child { - z-index: 2; - } - - .calendarbox .calendar, .clockbox h2 { - border-radius: 4px 4px 0 0; - overflow: hidden; - } - - .calendarbox .calendar-cancel, .clockbox .calendar-cancel { - border-radius: 0 0 4px 4px; - overflow: hidden; - } - - .calendar-shortcuts { - padding: 10px 0; - font-size: 0.75rem; - line-height: 0.75rem; - } - - .calendar-shortcuts a { - margin: 0 4px; - } - - .timelist a { - background: var(--body-bg); - padding: 4px; - } - - .calendar-cancel { - padding: 8px 10px; - } - - .clockbox h2 { - padding: 8px 15px; - } - - .calendar caption { - padding: 10px; - } - - .calendarbox .calendarnav-previous, .calendarbox .calendarnav-next { - z-index: 1; - top: 10px; - } - - /* History */ - - table#change-history tbody th, table#change-history tbody td { - font-size: 0.8125rem; - word-break: break-word; - } - - table#change-history tbody th { - width: auto; - } - - /* Docs */ - - table.model tbody th, table.model tbody td { - font-size: 0.8125rem; - word-break: break-word; - } -} diff --git a/staticfiles/admin/css/responsive_rtl.css b/staticfiles/admin/css/responsive_rtl.css deleted file mode 100644 index 5e8f5c5..0000000 --- a/staticfiles/admin/css/responsive_rtl.css +++ /dev/null @@ -1,89 +0,0 @@ -/* TABLETS */ - -@media (max-width: 1024px) { - [dir="rtl"] .colMS { - margin-right: 0; - } - - [dir="rtl"] #user-tools { - text-align: right; - } - - [dir="rtl"] #changelist .actions label { - padding-left: 10px; - padding-right: 0; - } - - [dir="rtl"] #changelist .actions select { - margin-left: 0; - margin-right: 15px; - } - - [dir="rtl"] .change-list .filtered .results, - [dir="rtl"] .change-list .filtered .paginator, - [dir="rtl"] .filtered #toolbar, - [dir="rtl"] .filtered div.xfull, - [dir="rtl"] .filtered .actions, - [dir="rtl"] #changelist-filter { - margin-left: 0; - } - - [dir="rtl"] .inline-group div.add-row a, - [dir="rtl"] .inline-group .tabular tr.add-row td a { - padding: 8px 26px 8px 10px; - background-position: calc(100% - 8px) 9px; - } - - [dir="rtl"] .object-tools li { - float: right; - } - - [dir="rtl"] .object-tools li + li { - margin-left: 0; - margin-right: 15px; - } - - [dir="rtl"] .dashboard .module table td a { - padding-left: 0; - padding-right: 16px; - } -} - -/* MOBILE */ - -@media (max-width: 767px) { - [dir="rtl"] .aligned .related-lookup, - [dir="rtl"] .aligned .datetimeshortcuts { - margin-left: 0; - margin-right: 15px; - } - - [dir="rtl"] .aligned ul, - [dir="rtl"] form .aligned ul.errorlist { - margin-right: 0; - } - - [dir="rtl"] #changelist-filter { - margin-left: 0; - margin-right: 0; - } - [dir="rtl"] .aligned .vCheckboxLabel { - padding: 1px 5px 0 0; - } - - [dir="rtl"] .selector-remove { - background-position: 0 0; - } - - [dir="rtl"] :enabled.selector-remove:focus, :enabled.selector-remove:hover { - background-position: 0 -24px; - } - - [dir="rtl"] .selector-add { - background-position: 0 -48px; - } - - [dir="rtl"] :enabled.selector-add:focus, :enabled.selector-add:hover { - background-position: 0 -72px; - } -} diff --git a/staticfiles/admin/css/rtl.css b/staticfiles/admin/css/rtl.css deleted file mode 100644 index a2556d0..0000000 --- a/staticfiles/admin/css/rtl.css +++ /dev/null @@ -1,293 +0,0 @@ -/* GLOBAL */ - -th { - text-align: right; -} - -.module h2, .module caption { - text-align: right; -} - -.module ul, .module ol { - margin-left: 0; - margin-right: 1.5em; -} - -.viewlink, .addlink, .changelink, .hidelink { - padding-left: 0; - padding-right: 16px; - background-position: 100% 1px; -} - -.deletelink { - padding-left: 0; - padding-right: 16px; - background-position: 100% 1px; -} - -.object-tools { - float: left; -} - -thead th:first-child, -tfoot td:first-child { - border-left: none; -} - -/* LAYOUT */ - -#user-tools { - right: auto; - left: 0; - text-align: left; -} - -div.breadcrumbs { - text-align: right; -} - -#content-main { - float: right; -} - -#content-related { - float: left; - margin-left: -300px; - margin-right: auto; -} - -.colMS { - margin-left: 300px; - margin-right: 0; -} - -/* SORTABLE TABLES */ - -table thead th.sorted .sortoptions { - float: left; -} - -thead th.sorted .text { - padding-right: 0; - padding-left: 42px; -} - -/* dashboard styles */ - -.dashboard .module table td a { - padding-left: .6em; - padding-right: 16px; -} - -/* changelists styles */ - -.change-list .filtered table { - border-left: none; - border-right: 0px none; -} - -#changelist-filter { - border-left: none; - border-right: none; - margin-left: 0; - margin-right: 30px; -} - -#changelist-filter li.selected { - border-left: none; - padding-left: 10px; - margin-left: 0; - border-right: 5px solid var(--hairline-color); - padding-right: 10px; - margin-right: -15px; -} - -#changelist table tbody td:first-child, #changelist table tbody th:first-child { - border-right: none; - border-left: none; -} - -.paginator .end { - margin-left: 6px; - margin-right: 0; -} - -.paginator input { - margin-left: 0; - margin-right: auto; -} - -/* FORMS */ - -.aligned label { - padding: 0 0 3px 1em; -} - -.submit-row a.deletelink { - margin-left: 0; - margin-right: auto; -} - -.vDateField, .vTimeField { - margin-left: 2px; -} - -.aligned .form-row input { - margin-left: 5px; -} - -form .aligned ul { - margin-right: 163px; - padding-right: 10px; - margin-left: 0; - padding-left: 0; -} - -form ul.inline li { - float: right; - padding-right: 0; - padding-left: 7px; -} - -form .aligned p.help, -form .aligned div.help { - margin-left: 0; - margin-right: 160px; - padding-right: 10px; -} - -form div.help ul, -form .aligned .checkbox-row + .help, -form .aligned p.date div.help.timezonewarning, -form .aligned p.datetime div.help.timezonewarning, -form .aligned p.time div.help.timezonewarning { - margin-right: 0; - padding-right: 0; -} - -form .wide p.help, -form .wide ul.errorlist, -form .wide div.help { - padding-left: 0; - padding-right: 50px; -} - -.submit-row { - text-align: right; -} - -fieldset .fieldBox { - margin-left: 20px; - margin-right: 0; -} - -.errorlist li { - background-position: 100% 12px; - padding: 0; -} - -.errornote { - background-position: 100% 12px; - padding: 10px 12px; -} - -/* WIDGETS */ - -.calendarnav-previous { - top: 0; - left: auto; - right: 10px; - background: url(../img/calendar-icons.svg) 0 -15px no-repeat; -} - -.calendarnav-next { - top: 0; - right: auto; - left: 10px; - background: url(../img/calendar-icons.svg) 0 0 no-repeat; -} - -.calendar caption, .calendarbox h2 { - text-align: center; -} - -.selector { - float: right; -} - -.selector .selector-filter { - text-align: right; -} - -.selector-add { - background: url(../img/selector-icons.svg) 0 -96px no-repeat; - background-size: 24px auto; -} - -:enabled.selector-add:focus, :enabled.selector-add:hover { - background-position: 0 -120px; -} - -.selector-remove { - background: url(../img/selector-icons.svg) 0 -144px no-repeat; - background-size: 24px auto; -} - -:enabled.selector-remove:focus, :enabled.selector-remove:hover { - background-position: 0 -168px; -} - -.selector-chooseall { - background: url(../img/selector-icons.svg) right -128px no-repeat; -} - -:enabled.selector-chooseall:focus, :enabled.selector-chooseall:hover { - background-position: 100% -144px; -} - -.selector-clearall { - background: url(../img/selector-icons.svg) 0 -160px no-repeat; -} - -:enabled.selector-clearall:focus, :enabled.selector-clearall:hover { - background-position: 0 -176px; -} - -.inline-deletelink { - float: left; -} - -form .form-row p.datetime { - overflow: hidden; -} - -.related-widget-wrapper { - float: right; -} - -/* MISC */ - -.inline-related h2, .inline-group h2 { - text-align: right -} - -.inline-related h3 span.delete { - padding-right: 20px; - padding-left: inherit; - left: 10px; - right: inherit; - float:left; -} - -.inline-related h3 span.delete label { - margin-left: inherit; - margin-right: 2px; -} - -.inline-group .tabular td.original p { - right: 0; -} - -.selector .selector-chooser { - margin: 0; -} diff --git a/staticfiles/admin/css/unusable_password_field.css b/staticfiles/admin/css/unusable_password_field.css deleted file mode 100644 index d46eb03..0000000 --- a/staticfiles/admin/css/unusable_password_field.css +++ /dev/null @@ -1,19 +0,0 @@ -/* Hide warnings fields if usable password is selected */ -form:has(#id_usable_password input[value="true"]:checked) .messagelist { - display: none; -} - -/* Hide password fields if unusable password is selected */ -form:has(#id_usable_password input[value="false"]:checked) .field-password1, -form:has(#id_usable_password input[value="false"]:checked) .field-password2 { - display: none; -} - -/* Select appropriate submit button */ -form:has(#id_usable_password input[value="true"]:checked) input[type="submit"].unset-password { - display: none; -} - -form:has(#id_usable_password input[value="false"]:checked) input[type="submit"].set-password { - display: none; -} diff --git a/staticfiles/admin/css/vendor/select2/LICENSE-SELECT2.md b/staticfiles/admin/css/vendor/select2/LICENSE-SELECT2.md deleted file mode 100644 index 8cb8a2b..0000000 --- a/staticfiles/admin/css/vendor/select2/LICENSE-SELECT2.md +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2012-2017 Kevin Brown, Igor Vaynberg, and Select2 contributors - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/staticfiles/admin/css/vendor/select2/select2.css b/staticfiles/admin/css/vendor/select2/select2.css deleted file mode 100644 index 750b320..0000000 --- a/staticfiles/admin/css/vendor/select2/select2.css +++ /dev/null @@ -1,481 +0,0 @@ -.select2-container { - box-sizing: border-box; - display: inline-block; - margin: 0; - position: relative; - vertical-align: middle; } - .select2-container .select2-selection--single { - box-sizing: border-box; - cursor: pointer; - display: block; - height: 28px; - user-select: none; - -webkit-user-select: none; } - .select2-container .select2-selection--single .select2-selection__rendered { - display: block; - padding-left: 8px; - padding-right: 20px; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; } - .select2-container .select2-selection--single .select2-selection__clear { - position: relative; } - .select2-container[dir="rtl"] .select2-selection--single .select2-selection__rendered { - padding-right: 8px; - padding-left: 20px; } - .select2-container .select2-selection--multiple { - box-sizing: border-box; - cursor: pointer; - display: block; - min-height: 32px; - user-select: none; - -webkit-user-select: none; } - .select2-container .select2-selection--multiple .select2-selection__rendered { - display: inline-block; - overflow: hidden; - padding-left: 8px; - text-overflow: ellipsis; - white-space: nowrap; } - .select2-container .select2-search--inline { - float: left; } - .select2-container .select2-search--inline .select2-search__field { - box-sizing: border-box; - border: none; - font-size: 100%; - margin-top: 5px; - padding: 0; } - .select2-container .select2-search--inline .select2-search__field::-webkit-search-cancel-button { - -webkit-appearance: none; } - -.select2-dropdown { - background-color: white; - border: 1px solid #aaa; - border-radius: 4px; - box-sizing: border-box; - display: block; - position: absolute; - left: -100000px; - width: 100%; - z-index: 1051; } - -.select2-results { - display: block; } - -.select2-results__options { - list-style: none; - margin: 0; - padding: 0; } - -.select2-results__option { - padding: 6px; - user-select: none; - -webkit-user-select: none; } - .select2-results__option[aria-selected] { - cursor: pointer; } - -.select2-container--open .select2-dropdown { - left: 0; } - -.select2-container--open .select2-dropdown--above { - border-bottom: none; - border-bottom-left-radius: 0; - border-bottom-right-radius: 0; } - -.select2-container--open .select2-dropdown--below { - border-top: none; - border-top-left-radius: 0; - border-top-right-radius: 0; } - -.select2-search--dropdown { - display: block; - padding: 4px; } - .select2-search--dropdown .select2-search__field { - padding: 4px; - width: 100%; - box-sizing: border-box; } - .select2-search--dropdown .select2-search__field::-webkit-search-cancel-button { - -webkit-appearance: none; } - .select2-search--dropdown.select2-search--hide { - display: none; } - -.select2-close-mask { - border: 0; - margin: 0; - padding: 0; - display: block; - position: fixed; - left: 0; - top: 0; - min-height: 100%; - min-width: 100%; - height: auto; - width: auto; - opacity: 0; - z-index: 99; - background-color: #fff; - filter: alpha(opacity=0); } - -.select2-hidden-accessible { - border: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(50%) !important; - clip-path: inset(50%) !important; - height: 1px !important; - overflow: hidden !important; - padding: 0 !important; - position: absolute !important; - width: 1px !important; - white-space: nowrap !important; } - -.select2-container--default .select2-selection--single { - background-color: #fff; - border: 1px solid #aaa; - border-radius: 4px; } - .select2-container--default .select2-selection--single .select2-selection__rendered { - color: #444; - line-height: 28px; } - .select2-container--default .select2-selection--single .select2-selection__clear { - cursor: pointer; - float: right; - font-weight: bold; } - .select2-container--default .select2-selection--single .select2-selection__placeholder { - color: #999; } - .select2-container--default .select2-selection--single .select2-selection__arrow { - height: 26px; - position: absolute; - top: 1px; - right: 1px; - width: 20px; } - .select2-container--default .select2-selection--single .select2-selection__arrow b { - border-color: #888 transparent transparent transparent; - border-style: solid; - border-width: 5px 4px 0 4px; - height: 0; - left: 50%; - margin-left: -4px; - margin-top: -2px; - position: absolute; - top: 50%; - width: 0; } - -.select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__clear { - float: left; } - -.select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__arrow { - left: 1px; - right: auto; } - -.select2-container--default.select2-container--disabled .select2-selection--single { - background-color: #eee; - cursor: default; } - .select2-container--default.select2-container--disabled .select2-selection--single .select2-selection__clear { - display: none; } - -.select2-container--default.select2-container--open .select2-selection--single .select2-selection__arrow b { - border-color: transparent transparent #888 transparent; - border-width: 0 4px 5px 4px; } - -.select2-container--default .select2-selection--multiple { - background-color: white; - border: 1px solid #aaa; - border-radius: 4px; - cursor: text; } - .select2-container--default .select2-selection--multiple .select2-selection__rendered { - box-sizing: border-box; - list-style: none; - margin: 0; - padding: 0 5px; - width: 100%; } - .select2-container--default .select2-selection--multiple .select2-selection__rendered li { - list-style: none; } - .select2-container--default .select2-selection--multiple .select2-selection__clear { - cursor: pointer; - float: right; - font-weight: bold; - margin-top: 5px; - margin-right: 10px; - padding: 1px; } - .select2-container--default .select2-selection--multiple .select2-selection__choice { - background-color: #e4e4e4; - border: 1px solid #aaa; - border-radius: 4px; - cursor: default; - float: left; - margin-right: 5px; - margin-top: 5px; - padding: 0 5px; } - .select2-container--default .select2-selection--multiple .select2-selection__choice__remove { - color: #999; - cursor: pointer; - display: inline-block; - font-weight: bold; - margin-right: 2px; } - .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover { - color: #333; } - -.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice, .select2-container--default[dir="rtl"] .select2-selection--multiple .select2-search--inline { - float: right; } - -.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice { - margin-left: 5px; - margin-right: auto; } - -.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove { - margin-left: 2px; - margin-right: auto; } - -.select2-container--default.select2-container--focus .select2-selection--multiple { - border: solid black 1px; - outline: 0; } - -.select2-container--default.select2-container--disabled .select2-selection--multiple { - background-color: #eee; - cursor: default; } - -.select2-container--default.select2-container--disabled .select2-selection__choice__remove { - display: none; } - -.select2-container--default.select2-container--open.select2-container--above .select2-selection--single, .select2-container--default.select2-container--open.select2-container--above .select2-selection--multiple { - border-top-left-radius: 0; - border-top-right-radius: 0; } - -.select2-container--default.select2-container--open.select2-container--below .select2-selection--single, .select2-container--default.select2-container--open.select2-container--below .select2-selection--multiple { - border-bottom-left-radius: 0; - border-bottom-right-radius: 0; } - -.select2-container--default .select2-search--dropdown .select2-search__field { - border: 1px solid #aaa; } - -.select2-container--default .select2-search--inline .select2-search__field { - background: transparent; - border: none; - outline: 0; - box-shadow: none; - -webkit-appearance: textfield; } - -.select2-container--default .select2-results > .select2-results__options { - max-height: 200px; - overflow-y: auto; } - -.select2-container--default .select2-results__option[role=group] { - padding: 0; } - -.select2-container--default .select2-results__option[aria-disabled=true] { - color: #999; } - -.select2-container--default .select2-results__option[aria-selected=true] { - background-color: #ddd; } - -.select2-container--default .select2-results__option .select2-results__option { - padding-left: 1em; } - .select2-container--default .select2-results__option .select2-results__option .select2-results__group { - padding-left: 0; } - .select2-container--default .select2-results__option .select2-results__option .select2-results__option { - margin-left: -1em; - padding-left: 2em; } - .select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option { - margin-left: -2em; - padding-left: 3em; } - .select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option { - margin-left: -3em; - padding-left: 4em; } - .select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option { - margin-left: -4em; - padding-left: 5em; } - .select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option { - margin-left: -5em; - padding-left: 6em; } - -.select2-container--default .select2-results__option--highlighted[aria-selected] { - background-color: #5897fb; - color: white; } - -.select2-container--default .select2-results__group { - cursor: default; - display: block; - padding: 6px; } - -.select2-container--classic .select2-selection--single { - background-color: #f7f7f7; - border: 1px solid #aaa; - border-radius: 4px; - outline: 0; - background-image: -webkit-linear-gradient(top, white 50%, #eeeeee 100%); - background-image: -o-linear-gradient(top, white 50%, #eeeeee 100%); - background-image: linear-gradient(to bottom, white 50%, #eeeeee 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0); } - .select2-container--classic .select2-selection--single:focus { - border: 1px solid #5897fb; } - .select2-container--classic .select2-selection--single .select2-selection__rendered { - color: #444; - line-height: 28px; } - .select2-container--classic .select2-selection--single .select2-selection__clear { - cursor: pointer; - float: right; - font-weight: bold; - margin-right: 10px; } - .select2-container--classic .select2-selection--single .select2-selection__placeholder { - color: #999; } - .select2-container--classic .select2-selection--single .select2-selection__arrow { - background-color: #ddd; - border: none; - border-left: 1px solid #aaa; - border-top-right-radius: 4px; - border-bottom-right-radius: 4px; - height: 26px; - position: absolute; - top: 1px; - right: 1px; - width: 20px; - background-image: -webkit-linear-gradient(top, #eeeeee 50%, #cccccc 100%); - background-image: -o-linear-gradient(top, #eeeeee 50%, #cccccc 100%); - background-image: linear-gradient(to bottom, #eeeeee 50%, #cccccc 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFCCCCCC', GradientType=0); } - .select2-container--classic .select2-selection--single .select2-selection__arrow b { - border-color: #888 transparent transparent transparent; - border-style: solid; - border-width: 5px 4px 0 4px; - height: 0; - left: 50%; - margin-left: -4px; - margin-top: -2px; - position: absolute; - top: 50%; - width: 0; } - -.select2-container--classic[dir="rtl"] .select2-selection--single .select2-selection__clear { - float: left; } - -.select2-container--classic[dir="rtl"] .select2-selection--single .select2-selection__arrow { - border: none; - border-right: 1px solid #aaa; - border-radius: 0; - border-top-left-radius: 4px; - border-bottom-left-radius: 4px; - left: 1px; - right: auto; } - -.select2-container--classic.select2-container--open .select2-selection--single { - border: 1px solid #5897fb; } - .select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow { - background: transparent; - border: none; } - .select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow b { - border-color: transparent transparent #888 transparent; - border-width: 0 4px 5px 4px; } - -.select2-container--classic.select2-container--open.select2-container--above .select2-selection--single { - border-top: none; - border-top-left-radius: 0; - border-top-right-radius: 0; - background-image: -webkit-linear-gradient(top, white 0%, #eeeeee 50%); - background-image: -o-linear-gradient(top, white 0%, #eeeeee 50%); - background-image: linear-gradient(to bottom, white 0%, #eeeeee 50%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0); } - -.select2-container--classic.select2-container--open.select2-container--below .select2-selection--single { - border-bottom: none; - border-bottom-left-radius: 0; - border-bottom-right-radius: 0; - background-image: -webkit-linear-gradient(top, #eeeeee 50%, white 100%); - background-image: -o-linear-gradient(top, #eeeeee 50%, white 100%); - background-image: linear-gradient(to bottom, #eeeeee 50%, white 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFFFFFFF', GradientType=0); } - -.select2-container--classic .select2-selection--multiple { - background-color: white; - border: 1px solid #aaa; - border-radius: 4px; - cursor: text; - outline: 0; } - .select2-container--classic .select2-selection--multiple:focus { - border: 1px solid #5897fb; } - .select2-container--classic .select2-selection--multiple .select2-selection__rendered { - list-style: none; - margin: 0; - padding: 0 5px; } - .select2-container--classic .select2-selection--multiple .select2-selection__clear { - display: none; } - .select2-container--classic .select2-selection--multiple .select2-selection__choice { - background-color: #e4e4e4; - border: 1px solid #aaa; - border-radius: 4px; - cursor: default; - float: left; - margin-right: 5px; - margin-top: 5px; - padding: 0 5px; } - .select2-container--classic .select2-selection--multiple .select2-selection__choice__remove { - color: #888; - cursor: pointer; - display: inline-block; - font-weight: bold; - margin-right: 2px; } - .select2-container--classic .select2-selection--multiple .select2-selection__choice__remove:hover { - color: #555; } - -.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice { - float: right; - margin-left: 5px; - margin-right: auto; } - -.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove { - margin-left: 2px; - margin-right: auto; } - -.select2-container--classic.select2-container--open .select2-selection--multiple { - border: 1px solid #5897fb; } - -.select2-container--classic.select2-container--open.select2-container--above .select2-selection--multiple { - border-top: none; - border-top-left-radius: 0; - border-top-right-radius: 0; } - -.select2-container--classic.select2-container--open.select2-container--below .select2-selection--multiple { - border-bottom: none; - border-bottom-left-radius: 0; - border-bottom-right-radius: 0; } - -.select2-container--classic .select2-search--dropdown .select2-search__field { - border: 1px solid #aaa; - outline: 0; } - -.select2-container--classic .select2-search--inline .select2-search__field { - outline: 0; - box-shadow: none; } - -.select2-container--classic .select2-dropdown { - background-color: white; - border: 1px solid transparent; } - -.select2-container--classic .select2-dropdown--above { - border-bottom: none; } - -.select2-container--classic .select2-dropdown--below { - border-top: none; } - -.select2-container--classic .select2-results > .select2-results__options { - max-height: 200px; - overflow-y: auto; } - -.select2-container--classic .select2-results__option[role=group] { - padding: 0; } - -.select2-container--classic .select2-results__option[aria-disabled=true] { - color: grey; } - -.select2-container--classic .select2-results__option--highlighted[aria-selected] { - background-color: #3875d7; - color: white; } - -.select2-container--classic .select2-results__group { - cursor: default; - display: block; - padding: 6px; } - -.select2-container--classic.select2-container--open .select2-dropdown { - border-color: #5897fb; } diff --git a/staticfiles/admin/css/vendor/select2/select2.min.css b/staticfiles/admin/css/vendor/select2/select2.min.css deleted file mode 100644 index 7c18ad5..0000000 --- a/staticfiles/admin/css/vendor/select2/select2.min.css +++ /dev/null @@ -1 +0,0 @@ -.select2-container{box-sizing:border-box;display:inline-block;margin:0;position:relative;vertical-align:middle}.select2-container .select2-selection--single{box-sizing:border-box;cursor:pointer;display:block;height:28px;user-select:none;-webkit-user-select:none}.select2-container .select2-selection--single .select2-selection__rendered{display:block;padding-left:8px;padding-right:20px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.select2-container .select2-selection--single .select2-selection__clear{position:relative}.select2-container[dir="rtl"] .select2-selection--single .select2-selection__rendered{padding-right:8px;padding-left:20px}.select2-container .select2-selection--multiple{box-sizing:border-box;cursor:pointer;display:block;min-height:32px;user-select:none;-webkit-user-select:none}.select2-container .select2-selection--multiple .select2-selection__rendered{display:inline-block;overflow:hidden;padding-left:8px;text-overflow:ellipsis;white-space:nowrap}.select2-container .select2-search--inline{float:left}.select2-container .select2-search--inline .select2-search__field{box-sizing:border-box;border:none;font-size:100%;margin-top:5px;padding:0}.select2-container .select2-search--inline .select2-search__field::-webkit-search-cancel-button{-webkit-appearance:none}.select2-dropdown{background-color:white;border:1px solid #aaa;border-radius:4px;box-sizing:border-box;display:block;position:absolute;left:-100000px;width:100%;z-index:1051}.select2-results{display:block}.select2-results__options{list-style:none;margin:0;padding:0}.select2-results__option{padding:6px;user-select:none;-webkit-user-select:none}.select2-results__option[aria-selected]{cursor:pointer}.select2-container--open .select2-dropdown{left:0}.select2-container--open .select2-dropdown--above{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--open .select2-dropdown--below{border-top:none;border-top-left-radius:0;border-top-right-radius:0}.select2-search--dropdown{display:block;padding:4px}.select2-search--dropdown .select2-search__field{padding:4px;width:100%;box-sizing:border-box}.select2-search--dropdown .select2-search__field::-webkit-search-cancel-button{-webkit-appearance:none}.select2-search--dropdown.select2-search--hide{display:none}.select2-close-mask{border:0;margin:0;padding:0;display:block;position:fixed;left:0;top:0;min-height:100%;min-width:100%;height:auto;width:auto;opacity:0;z-index:99;background-color:#fff;filter:alpha(opacity=0)}.select2-hidden-accessible{border:0 !important;clip:rect(0 0 0 0) !important;-webkit-clip-path:inset(50%) !important;clip-path:inset(50%) !important;height:1px !important;overflow:hidden !important;padding:0 !important;position:absolute !important;width:1px !important;white-space:nowrap !important}.select2-container--default .select2-selection--single{background-color:#fff;border:1px solid #aaa;border-radius:4px}.select2-container--default .select2-selection--single .select2-selection__rendered{color:#444;line-height:28px}.select2-container--default .select2-selection--single .select2-selection__clear{cursor:pointer;float:right;font-weight:bold}.select2-container--default .select2-selection--single .select2-selection__placeholder{color:#999}.select2-container--default .select2-selection--single .select2-selection__arrow{height:26px;position:absolute;top:1px;right:1px;width:20px}.select2-container--default .select2-selection--single .select2-selection__arrow b{border-color:#888 transparent transparent transparent;border-style:solid;border-width:5px 4px 0 4px;height:0;left:50%;margin-left:-4px;margin-top:-2px;position:absolute;top:50%;width:0}.select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__clear{float:left}.select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__arrow{left:1px;right:auto}.select2-container--default.select2-container--disabled .select2-selection--single{background-color:#eee;cursor:default}.select2-container--default.select2-container--disabled .select2-selection--single .select2-selection__clear{display:none}.select2-container--default.select2-container--open .select2-selection--single .select2-selection__arrow b{border-color:transparent transparent #888 transparent;border-width:0 4px 5px 4px}.select2-container--default .select2-selection--multiple{background-color:white;border:1px solid #aaa;border-radius:4px;cursor:text}.select2-container--default .select2-selection--multiple .select2-selection__rendered{box-sizing:border-box;list-style:none;margin:0;padding:0 5px;width:100%}.select2-container--default .select2-selection--multiple .select2-selection__rendered li{list-style:none}.select2-container--default .select2-selection--multiple .select2-selection__clear{cursor:pointer;float:right;font-weight:bold;margin-top:5px;margin-right:10px;padding:1px}.select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#e4e4e4;border:1px solid #aaa;border-radius:4px;cursor:default;float:left;margin-right:5px;margin-top:5px;padding:0 5px}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:#999;cursor:pointer;display:inline-block;font-weight:bold;margin-right:2px}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#333}.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice,.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-search--inline{float:right}.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice{margin-left:5px;margin-right:auto}.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove{margin-left:2px;margin-right:auto}.select2-container--default.select2-container--focus .select2-selection--multiple{border:solid black 1px;outline:0}.select2-container--default.select2-container--disabled .select2-selection--multiple{background-color:#eee;cursor:default}.select2-container--default.select2-container--disabled .select2-selection__choice__remove{display:none}.select2-container--default.select2-container--open.select2-container--above .select2-selection--single,.select2-container--default.select2-container--open.select2-container--above .select2-selection--multiple{border-top-left-radius:0;border-top-right-radius:0}.select2-container--default.select2-container--open.select2-container--below .select2-selection--single,.select2-container--default.select2-container--open.select2-container--below .select2-selection--multiple{border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--default .select2-search--dropdown .select2-search__field{border:1px solid #aaa}.select2-container--default .select2-search--inline .select2-search__field{background:transparent;border:none;outline:0;box-shadow:none;-webkit-appearance:textfield}.select2-container--default .select2-results>.select2-results__options{max-height:200px;overflow-y:auto}.select2-container--default .select2-results__option[role=group]{padding:0}.select2-container--default .select2-results__option[aria-disabled=true]{color:#999}.select2-container--default .select2-results__option[aria-selected=true]{background-color:#ddd}.select2-container--default .select2-results__option .select2-results__option{padding-left:1em}.select2-container--default .select2-results__option .select2-results__option .select2-results__group{padding-left:0}.select2-container--default .select2-results__option .select2-results__option .select2-results__option{margin-left:-1em;padding-left:2em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-2em;padding-left:3em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-3em;padding-left:4em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-4em;padding-left:5em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-5em;padding-left:6em}.select2-container--default .select2-results__option--highlighted[aria-selected]{background-color:#5897fb;color:white}.select2-container--default .select2-results__group{cursor:default;display:block;padding:6px}.select2-container--classic .select2-selection--single{background-color:#f7f7f7;border:1px solid #aaa;border-radius:4px;outline:0;background-image:-webkit-linear-gradient(top, #fff 50%, #eee 100%);background-image:-o-linear-gradient(top, #fff 50%, #eee 100%);background-image:linear-gradient(to bottom, #fff 50%, #eee 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0)}.select2-container--classic .select2-selection--single:focus{border:1px solid #5897fb}.select2-container--classic .select2-selection--single .select2-selection__rendered{color:#444;line-height:28px}.select2-container--classic .select2-selection--single .select2-selection__clear{cursor:pointer;float:right;font-weight:bold;margin-right:10px}.select2-container--classic .select2-selection--single .select2-selection__placeholder{color:#999}.select2-container--classic .select2-selection--single .select2-selection__arrow{background-color:#ddd;border:none;border-left:1px solid #aaa;border-top-right-radius:4px;border-bottom-right-radius:4px;height:26px;position:absolute;top:1px;right:1px;width:20px;background-image:-webkit-linear-gradient(top, #eee 50%, #ccc 100%);background-image:-o-linear-gradient(top, #eee 50%, #ccc 100%);background-image:linear-gradient(to bottom, #eee 50%, #ccc 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFCCCCCC', GradientType=0)}.select2-container--classic .select2-selection--single .select2-selection__arrow b{border-color:#888 transparent transparent transparent;border-style:solid;border-width:5px 4px 0 4px;height:0;left:50%;margin-left:-4px;margin-top:-2px;position:absolute;top:50%;width:0}.select2-container--classic[dir="rtl"] .select2-selection--single .select2-selection__clear{float:left}.select2-container--classic[dir="rtl"] .select2-selection--single .select2-selection__arrow{border:none;border-right:1px solid #aaa;border-radius:0;border-top-left-radius:4px;border-bottom-left-radius:4px;left:1px;right:auto}.select2-container--classic.select2-container--open .select2-selection--single{border:1px solid #5897fb}.select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow{background:transparent;border:none}.select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow b{border-color:transparent transparent #888 transparent;border-width:0 4px 5px 4px}.select2-container--classic.select2-container--open.select2-container--above .select2-selection--single{border-top:none;border-top-left-radius:0;border-top-right-radius:0;background-image:-webkit-linear-gradient(top, #fff 0%, #eee 50%);background-image:-o-linear-gradient(top, #fff 0%, #eee 50%);background-image:linear-gradient(to bottom, #fff 0%, #eee 50%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0)}.select2-container--classic.select2-container--open.select2-container--below .select2-selection--single{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0;background-image:-webkit-linear-gradient(top, #eee 50%, #fff 100%);background-image:-o-linear-gradient(top, #eee 50%, #fff 100%);background-image:linear-gradient(to bottom, #eee 50%, #fff 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFFFFFFF', GradientType=0)}.select2-container--classic .select2-selection--multiple{background-color:white;border:1px solid #aaa;border-radius:4px;cursor:text;outline:0}.select2-container--classic .select2-selection--multiple:focus{border:1px solid #5897fb}.select2-container--classic .select2-selection--multiple .select2-selection__rendered{list-style:none;margin:0;padding:0 5px}.select2-container--classic .select2-selection--multiple .select2-selection__clear{display:none}.select2-container--classic .select2-selection--multiple .select2-selection__choice{background-color:#e4e4e4;border:1px solid #aaa;border-radius:4px;cursor:default;float:left;margin-right:5px;margin-top:5px;padding:0 5px}.select2-container--classic .select2-selection--multiple .select2-selection__choice__remove{color:#888;cursor:pointer;display:inline-block;font-weight:bold;margin-right:2px}.select2-container--classic .select2-selection--multiple .select2-selection__choice__remove:hover{color:#555}.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice{float:right;margin-left:5px;margin-right:auto}.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove{margin-left:2px;margin-right:auto}.select2-container--classic.select2-container--open .select2-selection--multiple{border:1px solid #5897fb}.select2-container--classic.select2-container--open.select2-container--above .select2-selection--multiple{border-top:none;border-top-left-radius:0;border-top-right-radius:0}.select2-container--classic.select2-container--open.select2-container--below .select2-selection--multiple{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--classic .select2-search--dropdown .select2-search__field{border:1px solid #aaa;outline:0}.select2-container--classic .select2-search--inline .select2-search__field{outline:0;box-shadow:none}.select2-container--classic .select2-dropdown{background-color:#fff;border:1px solid transparent}.select2-container--classic .select2-dropdown--above{border-bottom:none}.select2-container--classic .select2-dropdown--below{border-top:none}.select2-container--classic .select2-results>.select2-results__options{max-height:200px;overflow-y:auto}.select2-container--classic .select2-results__option[role=group]{padding:0}.select2-container--classic .select2-results__option[aria-disabled=true]{color:grey}.select2-container--classic .select2-results__option--highlighted[aria-selected]{background-color:#3875d7;color:#fff}.select2-container--classic .select2-results__group{cursor:default;display:block;padding:6px}.select2-container--classic.select2-container--open .select2-dropdown{border-color:#5897fb} diff --git a/staticfiles/admin/css/widgets.css b/staticfiles/admin/css/widgets.css deleted file mode 100644 index a5f615a..0000000 --- a/staticfiles/admin/css/widgets.css +++ /dev/null @@ -1,613 +0,0 @@ -/* SELECTOR (FILTER INTERFACE) */ - -.selector { - display: flex; - flex: 1; - gap: 0 10px; -} - -.selector select { - height: 17.2em; - flex: 1 0 auto; - overflow: scroll; - width: 100%; -} - -.selector-available, .selector-chosen { - display: flex; - flex-direction: column; - flex: 1 1; -} - -.selector-available-title, .selector-chosen-title { - border: 1px solid var(--border-color); - border-radius: 4px 4px 0 0; -} - -.selector .helptext { - font-size: 0.6875rem; -} - -.selector-chosen .list-footer-display { - border: 1px solid var(--border-color); - border-top: none; - border-radius: 0 0 4px 4px; - margin: 0 0 10px; - padding: 8px; - text-align: center; - background: var(--primary); - color: var(--header-link-color); - cursor: pointer; -} -.selector-chosen .list-footer-display__clear { - color: var(--breadcrumbs-fg); -} - -.selector-chosen-title { - background: var(--secondary); - color: var(--header-link-color); - padding: 8px; -} - -.selector-chosen-title label { - color: var(--header-link-color); - width: 100%; -} - -.selector-available-title { - background: var(--darkened-bg); - color: var(--body-quiet-color); - padding: 8px; -} - -.selector-available-title label { - width: 100%; -} - -.selector .selector-filter { - border: 1px solid var(--border-color); - border-width: 0 1px; - padding: 8px; - color: var(--body-quiet-color); - font-size: 0.625rem; - margin: 0; - text-align: left; - display: flex; - gap: 8px; -} - -.selector .selector-filter label, -.inline-group .aligned .selector .selector-filter label { - float: left; - margin: 7px 0 0; - width: 18px; - height: 18px; - padding: 0; - overflow: hidden; - line-height: 1; - min-width: auto; -} - -.selector-filter input { - flex-grow: 1; -} - -.selector ul.selector-chooser { - align-self: center; - width: 30px; - background-color: var(--selected-bg); - border-radius: 10px; - margin: 0; - padding: 0; - transform: translateY(-17px); -} - -.selector-chooser li { - margin: 0; - padding: 3px; - list-style-type: none; -} - -.selector select { - padding: 0 10px; - margin: 0 0 10px; - border-radius: 0 0 4px 4px; -} -.selector .selector-chosen--with-filtered select { - margin: 0; - border-radius: 0; - height: 14em; -} - -.selector .selector-chosen:not(.selector-chosen--with-filtered) .list-footer-display { - display: none; -} - -.selector-add, .selector-remove { - width: 24px; - height: 24px; - display: block; - text-indent: -3000px; - overflow: hidden; - cursor: default; - opacity: 0.55; - border: none; -} - -:enabled.selector-add, :enabled.selector-remove { - opacity: 1; -} - -:enabled.selector-add:hover, :enabled.selector-remove:hover { - cursor: pointer; -} - -.selector-add { - background: url(../img/selector-icons.svg) 0 -144px no-repeat; - background-size: 24px auto; -} - -:enabled.selector-add:focus, :enabled.selector-add:hover { - background-position: 0 -168px; -} - -.selector-remove { - background: url(../img/selector-icons.svg) 0 -96px no-repeat; - background-size: 24px auto; -} - -:enabled.selector-remove:focus, :enabled.selector-remove:hover { - background-position: 0 -120px; -} - -.selector-chooseall, .selector-clearall { - display: inline-block; - height: 16px; - text-align: left; - margin: 0 auto; - overflow: hidden; - font-weight: bold; - line-height: 16px; - color: var(--body-quiet-color); - text-decoration: none; - opacity: 0.55; - border: none; -} - -:enabled.selector-chooseall:focus, :enabled.selector-clearall:focus, -:enabled.selector-chooseall:hover, :enabled.selector-clearall:hover { - color: var(--link-fg); -} - -:enabled.selector-chooseall, :enabled.selector-clearall { - opacity: 1; -} - -:enabled.selector-chooseall:hover, :enabled.selector-clearall:hover { - cursor: pointer; -} - -.selector-chooseall { - padding: 0 18px 0 0; - background: url(../img/selector-icons.svg) right -160px no-repeat; - cursor: default; -} - -:enabled.selector-chooseall:focus, :enabled.selector-chooseall:hover { - background-position: 100% -176px; -} - -.selector-clearall { - padding: 0 0 0 18px; - background: url(../img/selector-icons.svg) 0 -128px no-repeat; - cursor: default; -} - -:enabled.selector-clearall:focus, :enabled.selector-clearall:hover { - background-position: 0 -144px; -} - -/* STACKED SELECTORS */ - -.stacked { - float: left; - width: 490px; - display: block; -} - -.stacked select { - width: 480px; - height: 10.1em; -} - -.stacked .selector-available, .stacked .selector-chosen { - width: 480px; -} - -.stacked .selector-available { - margin-bottom: 0; -} - -.stacked .selector-available input { - width: 422px; -} - -.stacked ul.selector-chooser { - display: flex; - height: 30px; - width: 64px; - margin: 0 0 10px 40%; - background-color: #eee; - border-radius: 10px; - transform: none; -} - -.stacked .selector-chooser li { - float: left; - padding: 3px 3px 3px 5px; -} - -.stacked .selector-chooseall, .stacked .selector-clearall { - display: none; -} - -.stacked .selector-add { - background: url(../img/selector-icons.svg) 0 -48px no-repeat; - background-size: 24px auto; - cursor: default; -} - -.stacked :enabled.selector-add { - background-position: 0 -48px; - cursor: pointer; -} - -.stacked :enabled.selector-add:focus, .stacked :enabled.selector-add:hover { - background-position: 0 -72px; - cursor: pointer; -} - -.stacked .selector-remove { - background: url(../img/selector-icons.svg) 0 0 no-repeat; - background-size: 24px auto; - cursor: default; -} - -.stacked :enabled.selector-remove { - background-position: 0 0px; - cursor: pointer; -} - -.stacked :enabled.selector-remove:focus, .stacked :enabled.selector-remove:hover { - background-position: 0 -24px; - cursor: pointer; -} - -.selector .help-icon { - background: url(../img/icon-unknown.svg) 0 0 no-repeat; - display: inline-block; - vertical-align: middle; - margin: -2px 0 0 2px; - width: 13px; - height: 13px; -} - -.selector .selector-chosen .help-icon { - background: url(../img/icon-unknown-alt.svg) 0 0 no-repeat; -} - -.selector .search-label-icon { - background: url(../img/search.svg) 0 0 no-repeat; - display: inline-block; - height: 1.125rem; - width: 1.125rem; -} - -/* DATE AND TIME */ - -p.datetime { - line-height: 20px; - margin: 0; - padding: 0; - color: var(--body-quiet-color); - font-weight: bold; -} - -.datetime span { - white-space: nowrap; - font-weight: normal; - font-size: 0.6875rem; - color: var(--body-quiet-color); -} - -.datetime input, .form-row .datetime input.vDateField, .form-row .datetime input.vTimeField { - margin-left: 5px; - margin-bottom: 4px; -} - -table p.datetime { - font-size: 0.6875rem; - margin-left: 0; - padding-left: 0; -} - -.datetimeshortcuts .clock-icon, .datetimeshortcuts .date-icon { - position: relative; - display: inline-block; - vertical-align: middle; - height: 24px; - width: 24px; - overflow: hidden; -} - -.datetimeshortcuts .clock-icon { - background: url(../img/icon-clock.svg) 0 0 no-repeat; - background-size: 24px auto; -} - -.datetimeshortcuts a:focus .clock-icon, -.datetimeshortcuts a:hover .clock-icon { - background-position: 0 -24px; -} - -.datetimeshortcuts .date-icon { - background: url(../img/icon-calendar.svg) 0 0 no-repeat; - background-size: 24px auto; - top: -1px; -} - -.datetimeshortcuts a:focus .date-icon, -.datetimeshortcuts a:hover .date-icon { - background-position: 0 -24px; -} - -.timezonewarning { - font-size: 0.6875rem; - color: var(--body-quiet-color); -} - -/* URL */ - -p.url { - line-height: 20px; - margin: 0; - padding: 0; - color: var(--body-quiet-color); - font-size: 0.6875rem; - font-weight: bold; -} - -.url a { - font-weight: normal; -} - -/* FILE UPLOADS */ - -p.file-upload { - line-height: 20px; - margin: 0; - padding: 0; - color: var(--body-quiet-color); - font-size: 0.6875rem; - font-weight: bold; -} - -.file-upload a { - font-weight: normal; -} - -.file-upload .deletelink { - margin-left: 5px; -} - -span.clearable-file-input label { - color: var(--body-fg); - font-size: 0.6875rem; - display: inline; - float: none; -} - -/* CALENDARS & CLOCKS */ - -.calendarbox, .clockbox { - margin: 5px auto; - font-size: 0.75rem; - width: 19em; - text-align: center; - background: var(--body-bg); - color: var(--body-fg); - border: 1px solid var(--hairline-color); - border-radius: 4px; - box-shadow: 0 2px 4px rgba(0, 0, 0, 0.15); - overflow: hidden; - position: relative; -} - -.clockbox { - width: auto; -} - -.calendar { - margin: 0; - padding: 0; -} - -.calendar table { - margin: 0; - padding: 0; - border-collapse: collapse; - background: white; - width: 100%; -} - -.calendar caption, .calendarbox h2 { - margin: 0; - text-align: center; - border-top: none; - font-weight: 700; - font-size: 0.75rem; - color: #333; - background: var(--accent); -} - -.calendar th { - padding: 8px 5px; - background: var(--darkened-bg); - border-bottom: 1px solid var(--border-color); - font-weight: 400; - font-size: 0.75rem; - text-align: center; - color: var(--body-quiet-color); -} - -.calendar td { - font-weight: 400; - font-size: 0.75rem; - text-align: center; - padding: 0; - border-top: 1px solid var(--hairline-color); - border-bottom: none; -} - -.calendar td.selected a { - background: var(--secondary); - color: var(--button-fg); -} - -.calendar td.nonday { - background: var(--darkened-bg); -} - -.calendar td.today a { - font-weight: 700; -} - -.calendar td a, .timelist a { - display: block; - font-weight: 400; - padding: 6px; - text-decoration: none; - color: var(--body-quiet-color); -} - -.calendar td a:focus, .timelist a:focus, -.calendar td a:hover, .timelist a:hover { - background: var(--primary); - color: white; -} - -.calendar td a:active, .timelist a:active { - background: var(--header-bg); - color: white; -} - -.calendarnav { - font-size: 0.625rem; - text-align: center; - color: #ccc; - margin: 0; - padding: 1px 3px; -} - -.calendarnav a:link, #calendarnav a:visited, -#calendarnav a:focus, #calendarnav a:hover { - color: var(--body-quiet-color); -} - -.calendar-shortcuts { - background: var(--body-bg); - color: var(--body-quiet-color); - font-size: 0.6875rem; - line-height: 0.6875rem; - border-top: 1px solid var(--hairline-color); - padding: 8px 0; -} - -.calendarbox .calendarnav-previous, .calendarbox .calendarnav-next { - display: block; - position: absolute; - top: 8px; - width: 15px; - height: 15px; - text-indent: -9999px; - padding: 0; -} - -.calendarnav-previous { - left: 10px; - background: url(../img/calendar-icons.svg) 0 0 no-repeat; -} - -.calendarnav-next { - right: 10px; - background: url(../img/calendar-icons.svg) 0 -15px no-repeat; -} - -.calendar-cancel { - margin: 0; - padding: 4px 0; - font-size: 0.75rem; - background: var(--close-button-bg); - border-top: 1px solid var(--border-color); - color: var(--button-fg); -} - -.calendar-cancel:focus, .calendar-cancel:hover { - background: var(--close-button-hover-bg); -} - -.calendar-cancel a { - color: var(--button-fg); - display: block; -} - -ul.timelist, .timelist li { - list-style-type: none; - margin: 0; - padding: 0; -} - -.timelist a { - padding: 2px; -} - -/* EDIT INLINE */ - -.inline-deletelink { - float: right; - text-indent: -9999px; - background: url(../img/inline-delete.svg) 0 0 no-repeat; - width: 1.5rem; - height: 1.5rem; - border: 0px none; - margin-bottom: .25rem; -} - -.inline-deletelink:focus, .inline-deletelink:hover { - cursor: pointer; -} - -/* RELATED WIDGET WRAPPER */ -.related-widget-wrapper { - display: flex; - gap: 0 10px; - flex-grow: 1; - flex-wrap: wrap; - margin-bottom: 5px; -} - -.related-widget-wrapper-link { - opacity: .6; - filter: grayscale(1); -} - -.related-widget-wrapper-link:link { - opacity: 1; - filter: grayscale(0); -} - -/* GIS MAPS */ -.dj_map { - width: 600px; - height: 400px; -} diff --git a/staticfiles/admin/img/LICENSE b/staticfiles/admin/img/LICENSE deleted file mode 100644 index a4faaa1..0000000 --- a/staticfiles/admin/img/LICENSE +++ /dev/null @@ -1,20 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2014 Code Charm Ltd - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/staticfiles/admin/img/README.txt b/staticfiles/admin/img/README.txt deleted file mode 100644 index bf81f35..0000000 --- a/staticfiles/admin/img/README.txt +++ /dev/null @@ -1,7 +0,0 @@ -All icons are taken from Font Awesome (https://fontawesome.com/) project. -The Font Awesome font is licensed under the SIL OFL 1.1: -- https://scripts.sil.org/OFL - -SVG icons source: https://github.com/encharm/Font-Awesome-SVG-PNG -Font-Awesome-SVG-PNG is licensed under the MIT license (see file license -in current folder). diff --git a/staticfiles/admin/img/calendar-icons.svg b/staticfiles/admin/img/calendar-icons.svg deleted file mode 100644 index 04c0274..0000000 --- a/staticfiles/admin/img/calendar-icons.svg +++ /dev/null @@ -1,63 +0,0 @@ - - - - - - - - - - - - - - diff --git a/staticfiles/admin/img/gis/move_vertex_off.svg b/staticfiles/admin/img/gis/move_vertex_off.svg deleted file mode 100644 index 228854f..0000000 --- a/staticfiles/admin/img/gis/move_vertex_off.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/staticfiles/admin/img/gis/move_vertex_on.svg b/staticfiles/admin/img/gis/move_vertex_on.svg deleted file mode 100644 index 96b87fd..0000000 --- a/staticfiles/admin/img/gis/move_vertex_on.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/staticfiles/admin/img/icon-addlink.svg b/staticfiles/admin/img/icon-addlink.svg deleted file mode 100644 index 8d5c6a3..0000000 --- a/staticfiles/admin/img/icon-addlink.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/staticfiles/admin/img/icon-alert.svg b/staticfiles/admin/img/icon-alert.svg deleted file mode 100644 index e51ea83..0000000 --- a/staticfiles/admin/img/icon-alert.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/staticfiles/admin/img/icon-calendar.svg b/staticfiles/admin/img/icon-calendar.svg deleted file mode 100644 index 97910a9..0000000 --- a/staticfiles/admin/img/icon-calendar.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/staticfiles/admin/img/icon-changelink.svg b/staticfiles/admin/img/icon-changelink.svg deleted file mode 100644 index 592b093..0000000 --- a/staticfiles/admin/img/icon-changelink.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/staticfiles/admin/img/icon-clock.svg b/staticfiles/admin/img/icon-clock.svg deleted file mode 100644 index bf9985d..0000000 --- a/staticfiles/admin/img/icon-clock.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/staticfiles/admin/img/icon-deletelink.svg b/staticfiles/admin/img/icon-deletelink.svg deleted file mode 100644 index 4059b15..0000000 --- a/staticfiles/admin/img/icon-deletelink.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/staticfiles/admin/img/icon-hidelink.svg b/staticfiles/admin/img/icon-hidelink.svg deleted file mode 100644 index 2a8b404..0000000 --- a/staticfiles/admin/img/icon-hidelink.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/staticfiles/admin/img/icon-no.svg b/staticfiles/admin/img/icon-no.svg deleted file mode 100644 index 2e0d383..0000000 --- a/staticfiles/admin/img/icon-no.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/staticfiles/admin/img/icon-unknown-alt.svg b/staticfiles/admin/img/icon-unknown-alt.svg deleted file mode 100644 index 1c6b99f..0000000 --- a/staticfiles/admin/img/icon-unknown-alt.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/staticfiles/admin/img/icon-unknown.svg b/staticfiles/admin/img/icon-unknown.svg deleted file mode 100644 index 50b4f97..0000000 --- a/staticfiles/admin/img/icon-unknown.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/staticfiles/admin/img/icon-viewlink.svg b/staticfiles/admin/img/icon-viewlink.svg deleted file mode 100644 index a1ca1d3..0000000 --- a/staticfiles/admin/img/icon-viewlink.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/staticfiles/admin/img/icon-yes.svg b/staticfiles/admin/img/icon-yes.svg deleted file mode 100644 index 5883d87..0000000 --- a/staticfiles/admin/img/icon-yes.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/staticfiles/admin/img/inline-delete.svg b/staticfiles/admin/img/inline-delete.svg deleted file mode 100644 index 8751150..0000000 --- a/staticfiles/admin/img/inline-delete.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/staticfiles/admin/img/search.svg b/staticfiles/admin/img/search.svg deleted file mode 100644 index c8c69b2..0000000 --- a/staticfiles/admin/img/search.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/staticfiles/admin/img/selector-icons.svg b/staticfiles/admin/img/selector-icons.svg deleted file mode 100644 index 926b8e2..0000000 --- a/staticfiles/admin/img/selector-icons.svg +++ /dev/null @@ -1,34 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/staticfiles/admin/img/sorting-icons.svg b/staticfiles/admin/img/sorting-icons.svg deleted file mode 100644 index 7c31ec9..0000000 --- a/staticfiles/admin/img/sorting-icons.svg +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - - - - - - - - - - - diff --git a/staticfiles/admin/img/tooltag-add.svg b/staticfiles/admin/img/tooltag-add.svg deleted file mode 100644 index 1ca64ae..0000000 --- a/staticfiles/admin/img/tooltag-add.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/staticfiles/admin/img/tooltag-arrowright.svg b/staticfiles/admin/img/tooltag-arrowright.svg deleted file mode 100644 index b664d61..0000000 --- a/staticfiles/admin/img/tooltag-arrowright.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/staticfiles/admin/js/SelectBox.js b/staticfiles/admin/js/SelectBox.js deleted file mode 100644 index 3db4ec7..0000000 --- a/staticfiles/admin/js/SelectBox.js +++ /dev/null @@ -1,116 +0,0 @@ -'use strict'; -{ - const SelectBox = { - cache: {}, - init: function(id) { - const box = document.getElementById(id); - SelectBox.cache[id] = []; - const cache = SelectBox.cache[id]; - for (const node of box.options) { - cache.push({value: node.value, text: node.text, displayed: 1}); - } - }, - redisplay: function(id) { - // Repopulate HTML select box from cache - const box = document.getElementById(id); - const scroll_value_from_top = box.scrollTop; - box.innerHTML = ''; - for (const node of SelectBox.cache[id]) { - if (node.displayed) { - const new_option = new Option(node.text, node.value, false, false); - // Shows a tooltip when hovering over the option - new_option.title = node.text; - box.appendChild(new_option); - } - } - box.scrollTop = scroll_value_from_top; - }, - filter: function(id, text) { - // Redisplay the HTML select box, displaying only the choices containing ALL - // the words in text. (It's an AND search.) - const tokens = text.toLowerCase().split(/\s+/); - for (const node of SelectBox.cache[id]) { - node.displayed = 1; - const node_text = node.text.toLowerCase(); - for (const token of tokens) { - if (!node_text.includes(token)) { - node.displayed = 0; - break; // Once the first token isn't found we're done - } - } - } - SelectBox.redisplay(id); - }, - get_hidden_node_count(id) { - const cache = SelectBox.cache[id] || []; - return cache.filter(node => node.displayed === 0).length; - }, - delete_from_cache: function(id, value) { - let delete_index = null; - const cache = SelectBox.cache[id]; - for (const [i, node] of cache.entries()) { - if (node.value === value) { - delete_index = i; - break; - } - } - cache.splice(delete_index, 1); - }, - add_to_cache: function(id, option) { - SelectBox.cache[id].push({value: option.value, text: option.text, displayed: 1}); - }, - cache_contains: function(id, value) { - // Check if an item is contained in the cache - for (const node of SelectBox.cache[id]) { - if (node.value === value) { - return true; - } - } - return false; - }, - move: function(from, to) { - const from_box = document.getElementById(from); - for (const option of from_box.options) { - const option_value = option.value; - if (option.selected && SelectBox.cache_contains(from, option_value)) { - SelectBox.add_to_cache(to, {value: option_value, text: option.text, displayed: 1}); - SelectBox.delete_from_cache(from, option_value); - } - } - SelectBox.redisplay(from); - SelectBox.redisplay(to); - }, - move_all: function(from, to) { - const from_box = document.getElementById(from); - for (const option of from_box.options) { - const option_value = option.value; - if (SelectBox.cache_contains(from, option_value)) { - SelectBox.add_to_cache(to, {value: option_value, text: option.text, displayed: 1}); - SelectBox.delete_from_cache(from, option_value); - } - } - SelectBox.redisplay(from); - SelectBox.redisplay(to); - }, - sort: function(id) { - SelectBox.cache[id].sort(function(a, b) { - a = a.text.toLowerCase(); - b = b.text.toLowerCase(); - if (a > b) { - return 1; - } - if (a < b) { - return -1; - } - return 0; - } ); - }, - select_all: function(id) { - const box = document.getElementById(id); - for (const option of box.options) { - option.selected = true; - } - } - }; - window.SelectBox = SelectBox; -} diff --git a/staticfiles/admin/js/SelectFilter2.js b/staticfiles/admin/js/SelectFilter2.js deleted file mode 100644 index 970b511..0000000 --- a/staticfiles/admin/js/SelectFilter2.js +++ /dev/null @@ -1,311 +0,0 @@ -/*global SelectBox, gettext, ngettext, interpolate, quickElement, SelectFilter*/ -/* -SelectFilter2 - Turns a multiple-select box into a filter interface. - -Requires core.js and SelectBox.js. -*/ -'use strict'; -{ - window.SelectFilter = { - init: function(field_id, field_name, is_stacked) { - if (field_id.match(/__prefix__/)) { - // Don't initialize on empty forms. - return; - } - const from_box = document.getElementById(field_id); - from_box.id += '_from'; // change its ID - from_box.className = 'filtered'; - from_box.setAttribute('aria-labelledby', field_id + '_from_title'); - - for (const p of from_box.parentNode.getElementsByTagName('p')) { - if (p.classList.contains("info")) { - // Remove

    , because it just gets in the way. - from_box.parentNode.removeChild(p); - } else if (p.classList.contains("help")) { - // Move help text up to the top so it isn't below the select - // boxes or wrapped off on the side to the right of the add - // button: - from_box.parentNode.insertBefore(p, from_box.parentNode.firstChild); - } - } - - //

    or
    - const selector_div = quickElement('div', from_box.parentNode); - // Make sure the selector div is at the beginning so that the - // add link would be displayed to the right of the widget. - from_box.parentNode.prepend(selector_div); - selector_div.className = is_stacked ? 'selector stacked' : 'selector'; - - //
    - const selector_available = quickElement('div', selector_div); - selector_available.className = 'selector-available'; - const selector_available_title = quickElement('div', selector_available); - selector_available_title.id = field_id + '_from_title'; - selector_available_title.className = 'selector-available-title'; - quickElement('label', selector_available_title, interpolate(gettext('Available %s') + ' ', [field_name]), 'for', field_id + '_from'); - quickElement( - 'p', - selector_available_title, - interpolate(gettext('Choose %s by selecting them and then select the "Choose" arrow button.'), [field_name]), - 'class', 'helptext' - ); - - const filter_p = quickElement('p', selector_available, '', 'id', field_id + '_filter'); - filter_p.className = 'selector-filter'; - - const search_filter_label = quickElement('label', filter_p, '', 'for', field_id + '_input'); - - quickElement( - 'span', search_filter_label, '', - 'class', 'help-tooltip search-label-icon', - 'aria-label', interpolate(gettext("Type into this box to filter down the list of available %s."), [field_name]) - ); - - filter_p.appendChild(document.createTextNode(' ')); - - const filter_input = quickElement('input', filter_p, '', 'type', 'text', 'placeholder', gettext("Filter")); - filter_input.id = field_id + '_input'; - - selector_available.appendChild(from_box); - const choose_all = quickElement( - 'button', - selector_available, - interpolate(gettext('Choose all %s'), [field_name]), - 'id', field_id + '_add_all', - 'class', 'selector-chooseall', - 'type', 'button' - ); - - //
      - const selector_chooser = quickElement('ul', selector_div); - selector_chooser.className = 'selector-chooser'; - const add_button = quickElement( - 'button', - quickElement('li', selector_chooser), - interpolate(gettext('Choose selected %s'), [field_name]), - 'id', field_id + '_add', - 'class', 'selector-add', - 'type', 'button' - ); - const remove_button = quickElement( - 'button', - quickElement('li', selector_chooser), - interpolate(gettext('Remove selected %s'), [field_name]), - 'id', field_id + '_remove', - 'class', 'selector-remove', - 'type', 'button' - ); - - //
      - const selector_chosen = quickElement('div', selector_div, '', 'id', field_id + '_selector_chosen'); - selector_chosen.className = 'selector-chosen'; - const selector_chosen_title = quickElement('div', selector_chosen); - selector_chosen_title.className = 'selector-chosen-title'; - selector_chosen_title.id = field_id + '_to_title'; - quickElement('label', selector_chosen_title, interpolate(gettext('Chosen %s') + ' ', [field_name]), 'for', field_id + '_to'); - quickElement( - 'p', - selector_chosen_title, - interpolate(gettext('Remove %s by selecting them and then select the "Remove" arrow button.'), [field_name]), - 'class', 'helptext' - ); - - const filter_selected_p = quickElement('p', selector_chosen, '', 'id', field_id + '_filter_selected'); - filter_selected_p.className = 'selector-filter'; - - const search_filter_selected_label = quickElement('label', filter_selected_p, '', 'for', field_id + '_selected_input'); - - quickElement( - 'span', search_filter_selected_label, '', - 'class', 'help-tooltip search-label-icon', - 'aria-label', interpolate(gettext("Type into this box to filter down the list of selected %s."), [field_name]) - ); - - filter_selected_p.appendChild(document.createTextNode(' ')); - - const filter_selected_input = quickElement('input', filter_selected_p, '', 'type', 'text', 'placeholder', gettext("Filter")); - filter_selected_input.id = field_id + '_selected_input'; - - quickElement( - 'select', - selector_chosen, - '', - 'id', field_id + '_to', - 'multiple', '', - 'size', from_box.size, - 'name', from_box.name, - 'aria-labelledby', field_id + '_to_title', - 'class', 'filtered' - ); - const warning_footer = quickElement('div', selector_chosen, '', 'class', 'list-footer-display'); - quickElement('span', warning_footer, '', 'id', field_id + '_list-footer-display-text'); - quickElement('span', warning_footer, ' ' + gettext('(click to clear)'), 'class', 'list-footer-display__clear'); - const clear_all = quickElement( - 'button', - selector_chosen, - interpolate(gettext('Remove all %s'), [field_name]), - 'id', field_id + '_remove_all', - 'class', 'selector-clearall', - 'type', 'button' - ); - - from_box.name = from_box.name + '_old'; - - // Set up the JavaScript event handlers for the select box filter interface - const move_selection = function(e, elem, move_func, from, to) { - if (!elem.hasAttribute('disabled')) { - move_func(from, to); - SelectFilter.refresh_icons(field_id); - SelectFilter.refresh_filtered_selects(field_id); - SelectFilter.refresh_filtered_warning(field_id); - } - e.preventDefault(); - }; - choose_all.addEventListener('click', function(e) { - move_selection(e, this, SelectBox.move_all, field_id + '_from', field_id + '_to'); - }); - add_button.addEventListener('click', function(e) { - move_selection(e, this, SelectBox.move, field_id + '_from', field_id + '_to'); - }); - remove_button.addEventListener('click', function(e) { - move_selection(e, this, SelectBox.move, field_id + '_to', field_id + '_from'); - }); - clear_all.addEventListener('click', function(e) { - move_selection(e, this, SelectBox.move_all, field_id + '_to', field_id + '_from'); - }); - warning_footer.addEventListener('click', function(e) { - filter_selected_input.value = ''; - SelectBox.filter(field_id + '_to', ''); - SelectFilter.refresh_filtered_warning(field_id); - SelectFilter.refresh_icons(field_id); - }); - filter_input.addEventListener('keypress', function(e) { - SelectFilter.filter_key_press(e, field_id, '_from', '_to'); - }); - filter_input.addEventListener('keyup', function(e) { - SelectFilter.filter_key_up(e, field_id, '_from'); - }); - filter_input.addEventListener('keydown', function(e) { - SelectFilter.filter_key_down(e, field_id, '_from', '_to'); - }); - filter_selected_input.addEventListener('keypress', function(e) { - SelectFilter.filter_key_press(e, field_id, '_to', '_from'); - }); - filter_selected_input.addEventListener('keyup', function(e) { - SelectFilter.filter_key_up(e, field_id, '_to', '_selected_input'); - }); - filter_selected_input.addEventListener('keydown', function(e) { - SelectFilter.filter_key_down(e, field_id, '_to', '_from'); - }); - selector_div.addEventListener('change', function(e) { - if (e.target.tagName === 'SELECT') { - SelectFilter.refresh_icons(field_id); - } - }); - selector_div.addEventListener('dblclick', function(e) { - if (e.target.tagName === 'OPTION') { - if (e.target.closest('select').id === field_id + '_to') { - SelectBox.move(field_id + '_to', field_id + '_from'); - } else { - SelectBox.move(field_id + '_from', field_id + '_to'); - } - SelectFilter.refresh_icons(field_id); - } - }); - from_box.closest('form').addEventListener('submit', function() { - SelectBox.filter(field_id + '_to', ''); - SelectBox.select_all(field_id + '_to'); - }); - SelectBox.init(field_id + '_from'); - SelectBox.init(field_id + '_to'); - // Move selected from_box options to to_box - SelectBox.move(field_id + '_from', field_id + '_to'); - - // Initial icon refresh - SelectFilter.refresh_icons(field_id); - }, - any_selected: function(field) { - // Temporarily add the required attribute and check validity. - field.required = true; - const any_selected = field.checkValidity(); - field.required = false; - return any_selected; - }, - refresh_filtered_warning: function(field_id) { - const count = SelectBox.get_hidden_node_count(field_id + '_to'); - const selector = document.getElementById(field_id + '_selector_chosen'); - const warning = document.getElementById(field_id + '_list-footer-display-text'); - selector.className = selector.className.replace('selector-chosen--with-filtered', ''); - warning.textContent = interpolate(ngettext( - '%s selected option not visible', - '%s selected options not visible', - count - ), [count]); - if(count > 0) { - selector.className += ' selector-chosen--with-filtered'; - } - }, - refresh_filtered_selects: function(field_id) { - SelectBox.filter(field_id + '_from', document.getElementById(field_id + "_input").value); - SelectBox.filter(field_id + '_to', document.getElementById(field_id + "_selected_input").value); - }, - refresh_icons: function(field_id) { - const from = document.getElementById(field_id + '_from'); - const to = document.getElementById(field_id + '_to'); - // Disabled if no items are selected. - document.getElementById(field_id + '_add').disabled = !SelectFilter.any_selected(from); - document.getElementById(field_id + '_remove').disabled = !SelectFilter.any_selected(to); - // Disabled if the corresponding box is empty. - document.getElementById(field_id + '_add_all').disabled = !from.querySelector('option'); - document.getElementById(field_id + '_remove_all').disabled = !to.querySelector('option'); - }, - filter_key_press: function(event, field_id, source, target) { - const source_box = document.getElementById(field_id + source); - // don't submit form if user pressed Enter - if ((event.which && event.which === 13) || (event.keyCode && event.keyCode === 13)) { - source_box.selectedIndex = 0; - SelectBox.move(field_id + source, field_id + target); - source_box.selectedIndex = 0; - event.preventDefault(); - } - }, - filter_key_up: function(event, field_id, source, filter_input) { - const input = filter_input || '_input'; - const source_box = document.getElementById(field_id + source); - const temp = source_box.selectedIndex; - SelectBox.filter(field_id + source, document.getElementById(field_id + input).value); - source_box.selectedIndex = temp; - SelectFilter.refresh_filtered_warning(field_id); - SelectFilter.refresh_icons(field_id); - }, - filter_key_down: function(event, field_id, source, target) { - const source_box = document.getElementById(field_id + source); - // right key (39) or left key (37) - const direction = source === '_from' ? 39 : 37; - // right arrow -- move across - if ((event.which && event.which === direction) || (event.keyCode && event.keyCode === direction)) { - const old_index = source_box.selectedIndex; - SelectBox.move(field_id + source, field_id + target); - SelectFilter.refresh_filtered_selects(field_id); - SelectFilter.refresh_filtered_warning(field_id); - source_box.selectedIndex = (old_index === source_box.length) ? source_box.length - 1 : old_index; - return; - } - // down arrow -- wrap around - if ((event.which && event.which === 40) || (event.keyCode && event.keyCode === 40)) { - source_box.selectedIndex = (source_box.length === source_box.selectedIndex + 1) ? 0 : source_box.selectedIndex + 1; - } - // up arrow -- wrap around - if ((event.which && event.which === 38) || (event.keyCode && event.keyCode === 38)) { - source_box.selectedIndex = (source_box.selectedIndex === 0) ? source_box.length - 1 : source_box.selectedIndex - 1; - } - } - }; - - window.addEventListener('load', function(e) { - document.querySelectorAll('select.selectfilter, select.selectfilterstacked').forEach(function(el) { - const data = el.dataset; - SelectFilter.init(el.id, data.fieldName, parseInt(data.isStacked, 10)); - }); - }); -} diff --git a/staticfiles/admin/js/actions.js b/staticfiles/admin/js/actions.js deleted file mode 100644 index 04b25e9..0000000 --- a/staticfiles/admin/js/actions.js +++ /dev/null @@ -1,204 +0,0 @@ -/*global gettext, interpolate, ngettext, Actions*/ -'use strict'; -{ - function show(selector) { - document.querySelectorAll(selector).forEach(function(el) { - el.classList.remove('hidden'); - }); - } - - function hide(selector) { - document.querySelectorAll(selector).forEach(function(el) { - el.classList.add('hidden'); - }); - } - - function showQuestion(options) { - hide(options.acrossClears); - show(options.acrossQuestions); - hide(options.allContainer); - } - - function showClear(options) { - show(options.acrossClears); - hide(options.acrossQuestions); - document.querySelector(options.actionContainer).classList.remove(options.selectedClass); - show(options.allContainer); - hide(options.counterContainer); - } - - function reset(options) { - hide(options.acrossClears); - hide(options.acrossQuestions); - hide(options.allContainer); - show(options.counterContainer); - } - - function clearAcross(options) { - reset(options); - const acrossInputs = document.querySelectorAll(options.acrossInput); - acrossInputs.forEach(function(acrossInput) { - acrossInput.value = 0; - }); - document.querySelector(options.actionContainer).classList.remove(options.selectedClass); - } - - function checker(actionCheckboxes, options, checked) { - if (checked) { - showQuestion(options); - } else { - reset(options); - } - actionCheckboxes.forEach(function(el) { - el.checked = checked; - el.closest('tr').classList.toggle(options.selectedClass, checked); - }); - } - - function updateCounter(actionCheckboxes, options) { - const sel = Array.from(actionCheckboxes).filter(function(el) { - return el.checked; - }).length; - const counter = document.querySelector(options.counterContainer); - // data-actions-icnt is defined in the generated HTML - // and contains the total amount of objects in the queryset - const actions_icnt = Number(counter.dataset.actionsIcnt); - counter.textContent = interpolate( - ngettext('%(sel)s of %(cnt)s selected', '%(sel)s of %(cnt)s selected', sel), { - sel: sel, - cnt: actions_icnt - }, true); - const allToggle = document.getElementById(options.allToggleId); - allToggle.checked = sel === actionCheckboxes.length; - if (allToggle.checked) { - showQuestion(options); - } else { - clearAcross(options); - } - } - - const defaults = { - actionContainer: "div.actions", - counterContainer: "span.action-counter", - allContainer: "div.actions span.all", - acrossInput: "div.actions input.select-across", - acrossQuestions: "div.actions span.question", - acrossClears: "div.actions span.clear", - allToggleId: "action-toggle", - selectedClass: "selected" - }; - - window.Actions = function(actionCheckboxes, options) { - options = Object.assign({}, defaults, options); - let list_editable_changed = false; - let lastChecked = null; - let shiftPressed = false; - - document.addEventListener('keydown', (event) => { - shiftPressed = event.shiftKey; - }); - - document.addEventListener('keyup', (event) => { - shiftPressed = event.shiftKey; - }); - - document.getElementById(options.allToggleId).addEventListener('click', function(event) { - checker(actionCheckboxes, options, this.checked); - updateCounter(actionCheckboxes, options); - }); - - document.querySelectorAll(options.acrossQuestions + " a").forEach(function(el) { - el.addEventListener('click', function(event) { - event.preventDefault(); - const acrossInputs = document.querySelectorAll(options.acrossInput); - acrossInputs.forEach(function(acrossInput) { - acrossInput.value = 1; - }); - showClear(options); - }); - }); - - document.querySelectorAll(options.acrossClears + " a").forEach(function(el) { - el.addEventListener('click', function(event) { - event.preventDefault(); - document.getElementById(options.allToggleId).checked = false; - clearAcross(options); - checker(actionCheckboxes, options, false); - updateCounter(actionCheckboxes, options); - }); - }); - - function affectedCheckboxes(target, withModifier) { - const multiSelect = (lastChecked && withModifier && lastChecked !== target); - if (!multiSelect) { - return [target]; - } - const checkboxes = Array.from(actionCheckboxes); - const targetIndex = checkboxes.findIndex(el => el === target); - const lastCheckedIndex = checkboxes.findIndex(el => el === lastChecked); - const startIndex = Math.min(targetIndex, lastCheckedIndex); - const endIndex = Math.max(targetIndex, lastCheckedIndex); - const filtered = checkboxes.filter((el, index) => (startIndex <= index) && (index <= endIndex)); - return filtered; - }; - - Array.from(document.getElementById('result_list').tBodies).forEach(function(el) { - el.addEventListener('change', function(event) { - const target = event.target; - if (target.classList.contains('action-select')) { - const checkboxes = affectedCheckboxes(target, shiftPressed); - checker(checkboxes, options, target.checked); - updateCounter(actionCheckboxes, options); - lastChecked = target; - } else { - list_editable_changed = true; - } - }); - }); - - document.querySelector('#changelist-form button[name=index]').addEventListener('click', function(event) { - if (list_editable_changed) { - const confirmed = confirm(gettext("You have unsaved changes on individual editable fields. If you run an action, your unsaved changes will be lost.")); - if (!confirmed) { - event.preventDefault(); - } - } - }); - - const el = document.querySelector('#changelist-form input[name=_save]'); - // The button does not exist if no fields are editable. - if (el) { - el.addEventListener('click', function(event) { - if (document.querySelector('[name=action]').value) { - const text = list_editable_changed - ? gettext("You have selected an action, but you haven’t saved your changes to individual fields yet. Please click OK to save. You’ll need to re-run the action.") - : gettext("You have selected an action, and you haven’t made any changes on individual fields. You’re probably looking for the Go button rather than the Save button."); - if (!confirm(text)) { - event.preventDefault(); - } - } - }); - } - // Sync counter when navigating to the page, such as through the back - // button. - window.addEventListener('pageshow', (event) => updateCounter(actionCheckboxes, options)); - }; - - // Call function fn when the DOM is loaded and ready. If it is already - // loaded, call the function now. - // http://youmightnotneedjquery.com/#ready - function ready(fn) { - if (document.readyState !== 'loading') { - fn(); - } else { - document.addEventListener('DOMContentLoaded', fn); - } - } - - ready(function() { - const actionsEls = document.querySelectorAll('tr input.action-select'); - if (actionsEls.length > 0) { - Actions(actionsEls); - } - }); -} diff --git a/staticfiles/admin/js/admin/DateTimeShortcuts.js b/staticfiles/admin/js/admin/DateTimeShortcuts.js deleted file mode 100644 index aa1cae9..0000000 --- a/staticfiles/admin/js/admin/DateTimeShortcuts.js +++ /dev/null @@ -1,408 +0,0 @@ -/*global Calendar, findPosX, findPosY, get_format, gettext, gettext_noop, interpolate, ngettext, quickElement*/ -// Inserts shortcut buttons after all of the following: -// -// -'use strict'; -{ - const DateTimeShortcuts = { - calendars: [], - calendarInputs: [], - clockInputs: [], - clockHours: { - default_: [ - [gettext_noop('Now'), -1], - [gettext_noop('Midnight'), 0], - [gettext_noop('6 a.m.'), 6], - [gettext_noop('Noon'), 12], - [gettext_noop('6 p.m.'), 18] - ] - }, - dismissClockFunc: [], - dismissCalendarFunc: [], - calendarDivName1: 'calendarbox', // name of calendar
      that gets toggled - calendarDivName2: 'calendarin', // name of
      that contains calendar - calendarLinkName: 'calendarlink', // name of the link that is used to toggle - clockDivName: 'clockbox', // name of clock
      that gets toggled - clockLinkName: 'clocklink', // name of the link that is used to toggle - shortCutsClass: 'datetimeshortcuts', // class of the clock and cal shortcuts - timezoneWarningClass: 'timezonewarning', // class of the warning for timezone mismatch - timezoneOffset: 0, - init: function() { - const serverOffset = document.body.dataset.adminUtcOffset; - if (serverOffset) { - const localOffset = new Date().getTimezoneOffset() * -60; - DateTimeShortcuts.timezoneOffset = localOffset - serverOffset; - } - - for (const inp of document.getElementsByTagName('input')) { - if (inp.type === 'text' && inp.classList.contains('vTimeField')) { - DateTimeShortcuts.addClock(inp); - DateTimeShortcuts.addTimezoneWarning(inp); - } - else if (inp.type === 'text' && inp.classList.contains('vDateField')) { - DateTimeShortcuts.addCalendar(inp); - DateTimeShortcuts.addTimezoneWarning(inp); - } - } - }, - // Return the current time while accounting for the server timezone. - now: function() { - const serverOffset = document.body.dataset.adminUtcOffset; - if (serverOffset) { - const localNow = new Date(); - const localOffset = localNow.getTimezoneOffset() * -60; - localNow.setTime(localNow.getTime() + 1000 * (serverOffset - localOffset)); - return localNow; - } else { - return new Date(); - } - }, - // Add a warning when the time zone in the browser and backend do not match. - addTimezoneWarning: function(inp) { - const warningClass = DateTimeShortcuts.timezoneWarningClass; - let timezoneOffset = DateTimeShortcuts.timezoneOffset / 3600; - - // Only warn if there is a time zone mismatch. - if (!timezoneOffset) { - return; - } - - // Check if warning is already there. - if (inp.parentNode.querySelectorAll('.' + warningClass).length) { - return; - } - - let message; - if (timezoneOffset > 0) { - message = ngettext( - 'Note: You are %s hour ahead of server time.', - 'Note: You are %s hours ahead of server time.', - timezoneOffset - ); - } - else { - timezoneOffset *= -1; - message = ngettext( - 'Note: You are %s hour behind server time.', - 'Note: You are %s hours behind server time.', - timezoneOffset - ); - } - message = interpolate(message, [timezoneOffset]); - - const warning = document.createElement('div'); - warning.classList.add('help', warningClass); - warning.textContent = message; - inp.parentNode.appendChild(warning); - }, - // Add clock widget to a given field - addClock: function(inp) { - const num = DateTimeShortcuts.clockInputs.length; - DateTimeShortcuts.clockInputs[num] = inp; - DateTimeShortcuts.dismissClockFunc[num] = function() { DateTimeShortcuts.dismissClock(num); return true; }; - - // Shortcut links (clock icon and "Now" link) - const shortcuts_span = document.createElement('span'); - shortcuts_span.className = DateTimeShortcuts.shortCutsClass; - inp.parentNode.insertBefore(shortcuts_span, inp.nextSibling); - const now_link = document.createElement('a'); - now_link.href = "#"; - now_link.textContent = gettext('Now'); - now_link.addEventListener('click', function(e) { - e.preventDefault(); - DateTimeShortcuts.handleClockQuicklink(num, -1); - }); - const clock_link = document.createElement('a'); - clock_link.href = '#'; - clock_link.id = DateTimeShortcuts.clockLinkName + num; - clock_link.addEventListener('click', function(e) { - e.preventDefault(); - // avoid triggering the document click handler to dismiss the clock - e.stopPropagation(); - DateTimeShortcuts.openClock(num); - }); - - quickElement( - 'span', clock_link, '', - 'class', 'clock-icon', - 'title', gettext('Choose a Time') - ); - shortcuts_span.appendChild(document.createTextNode('\u00A0')); - shortcuts_span.appendChild(now_link); - shortcuts_span.appendChild(document.createTextNode('\u00A0|\u00A0')); - shortcuts_span.appendChild(clock_link); - - // Create clock link div - // - // Markup looks like: - // - - const clock_box = document.createElement('div'); - clock_box.style.display = 'none'; - clock_box.style.position = 'absolute'; - clock_box.className = 'clockbox module'; - clock_box.id = DateTimeShortcuts.clockDivName + num; - document.body.appendChild(clock_box); - clock_box.addEventListener('click', function(e) { e.stopPropagation(); }); - - quickElement('h2', clock_box, gettext('Choose a time')); - const time_list = quickElement('ul', clock_box); - time_list.className = 'timelist'; - // The list of choices can be overridden in JavaScript like this: - // DateTimeShortcuts.clockHours.name = [['3 a.m.', 3]]; - // where name is the name attribute of the . - const name = typeof DateTimeShortcuts.clockHours[inp.name] === 'undefined' ? 'default_' : inp.name; - DateTimeShortcuts.clockHours[name].forEach(function(element) { - const time_link = quickElement('a', quickElement('li', time_list), gettext(element[0]), 'href', '#'); - time_link.addEventListener('click', function(e) { - e.preventDefault(); - DateTimeShortcuts.handleClockQuicklink(num, element[1]); - }); - }); - - const cancel_p = quickElement('p', clock_box); - cancel_p.className = 'calendar-cancel'; - const cancel_link = quickElement('a', cancel_p, gettext('Cancel'), 'href', '#'); - cancel_link.addEventListener('click', function(e) { - e.preventDefault(); - DateTimeShortcuts.dismissClock(num); - }); - - document.addEventListener('keyup', function(event) { - if (event.which === 27) { - // ESC key closes popup - DateTimeShortcuts.dismissClock(num); - event.preventDefault(); - } - }); - }, - openClock: function(num) { - const clock_box = document.getElementById(DateTimeShortcuts.clockDivName + num); - const clock_link = document.getElementById(DateTimeShortcuts.clockLinkName + num); - - // Recalculate the clockbox position - // is it left-to-right or right-to-left layout ? - if (window.getComputedStyle(document.body).direction !== 'rtl') { - clock_box.style.left = findPosX(clock_link) + 17 + 'px'; - } - else { - // since style's width is in em, it'd be tough to calculate - // px value of it. let's use an estimated px for now - clock_box.style.left = findPosX(clock_link) - 110 + 'px'; - } - clock_box.style.top = Math.max(0, findPosY(clock_link) - 30) + 'px'; - - // Show the clock box - clock_box.style.display = 'block'; - document.addEventListener('click', DateTimeShortcuts.dismissClockFunc[num]); - }, - dismissClock: function(num) { - document.getElementById(DateTimeShortcuts.clockDivName + num).style.display = 'none'; - document.removeEventListener('click', DateTimeShortcuts.dismissClockFunc[num]); - }, - handleClockQuicklink: function(num, val) { - let d; - if (val === -1) { - d = DateTimeShortcuts.now(); - } - else { - d = new Date(1970, 1, 1, val, 0, 0, 0); - } - DateTimeShortcuts.clockInputs[num].value = d.strftime(get_format('TIME_INPUT_FORMATS')[0]); - DateTimeShortcuts.clockInputs[num].focus(); - DateTimeShortcuts.dismissClock(num); - }, - // Add calendar widget to a given field. - addCalendar: function(inp) { - const num = DateTimeShortcuts.calendars.length; - - DateTimeShortcuts.calendarInputs[num] = inp; - DateTimeShortcuts.dismissCalendarFunc[num] = function() { DateTimeShortcuts.dismissCalendar(num); return true; }; - - // Shortcut links (calendar icon and "Today" link) - const shortcuts_span = document.createElement('span'); - shortcuts_span.className = DateTimeShortcuts.shortCutsClass; - inp.parentNode.insertBefore(shortcuts_span, inp.nextSibling); - const today_link = document.createElement('a'); - today_link.href = '#'; - today_link.appendChild(document.createTextNode(gettext('Today'))); - today_link.addEventListener('click', function(e) { - e.preventDefault(); - DateTimeShortcuts.handleCalendarQuickLink(num, 0); - }); - const cal_link = document.createElement('a'); - cal_link.href = '#'; - cal_link.id = DateTimeShortcuts.calendarLinkName + num; - cal_link.addEventListener('click', function(e) { - e.preventDefault(); - // avoid triggering the document click handler to dismiss the calendar - e.stopPropagation(); - DateTimeShortcuts.openCalendar(num); - }); - quickElement( - 'span', cal_link, '', - 'class', 'date-icon', - 'title', gettext('Choose a Date') - ); - shortcuts_span.appendChild(document.createTextNode('\u00A0')); - shortcuts_span.appendChild(today_link); - shortcuts_span.appendChild(document.createTextNode('\u00A0|\u00A0')); - shortcuts_span.appendChild(cal_link); - - // Create calendarbox div. - // - // Markup looks like: - // - //
      - //

      - // - // February 2003 - //

      - //
      - // - //
      - //
      - // Yesterday | Today | Tomorrow - //
      - //

      Cancel

      - //
      - const cal_box = document.createElement('div'); - cal_box.style.display = 'none'; - cal_box.style.position = 'absolute'; - cal_box.className = 'calendarbox module'; - cal_box.id = DateTimeShortcuts.calendarDivName1 + num; - document.body.appendChild(cal_box); - cal_box.addEventListener('click', function(e) { e.stopPropagation(); }); - - // next-prev links - const cal_nav = quickElement('div', cal_box); - const cal_nav_prev = quickElement('a', cal_nav, '<', 'href', '#'); - cal_nav_prev.className = 'calendarnav-previous'; - cal_nav_prev.addEventListener('click', function(e) { - e.preventDefault(); - DateTimeShortcuts.drawPrev(num); - }); - - const cal_nav_next = quickElement('a', cal_nav, '>', 'href', '#'); - cal_nav_next.className = 'calendarnav-next'; - cal_nav_next.addEventListener('click', function(e) { - e.preventDefault(); - DateTimeShortcuts.drawNext(num); - }); - - // main box - const cal_main = quickElement('div', cal_box, '', 'id', DateTimeShortcuts.calendarDivName2 + num); - cal_main.className = 'calendar'; - DateTimeShortcuts.calendars[num] = new Calendar(DateTimeShortcuts.calendarDivName2 + num, DateTimeShortcuts.handleCalendarCallback(num)); - DateTimeShortcuts.calendars[num].drawCurrent(); - - // calendar shortcuts - const shortcuts = quickElement('div', cal_box); - shortcuts.className = 'calendar-shortcuts'; - let day_link = quickElement('a', shortcuts, gettext('Yesterday'), 'href', '#'); - day_link.addEventListener('click', function(e) { - e.preventDefault(); - DateTimeShortcuts.handleCalendarQuickLink(num, -1); - }); - shortcuts.appendChild(document.createTextNode('\u00A0|\u00A0')); - day_link = quickElement('a', shortcuts, gettext('Today'), 'href', '#'); - day_link.addEventListener('click', function(e) { - e.preventDefault(); - DateTimeShortcuts.handleCalendarQuickLink(num, 0); - }); - shortcuts.appendChild(document.createTextNode('\u00A0|\u00A0')); - day_link = quickElement('a', shortcuts, gettext('Tomorrow'), 'href', '#'); - day_link.addEventListener('click', function(e) { - e.preventDefault(); - DateTimeShortcuts.handleCalendarQuickLink(num, +1); - }); - - // cancel bar - const cancel_p = quickElement('p', cal_box); - cancel_p.className = 'calendar-cancel'; - const cancel_link = quickElement('a', cancel_p, gettext('Cancel'), 'href', '#'); - cancel_link.addEventListener('click', function(e) { - e.preventDefault(); - DateTimeShortcuts.dismissCalendar(num); - }); - document.addEventListener('keyup', function(event) { - if (event.which === 27) { - // ESC key closes popup - DateTimeShortcuts.dismissCalendar(num); - event.preventDefault(); - } - }); - }, - openCalendar: function(num) { - const cal_box = document.getElementById(DateTimeShortcuts.calendarDivName1 + num); - const cal_link = document.getElementById(DateTimeShortcuts.calendarLinkName + num); - const inp = DateTimeShortcuts.calendarInputs[num]; - - // Determine if the current value in the input has a valid date. - // If so, draw the calendar with that date's year and month. - if (inp.value) { - const format = get_format('DATE_INPUT_FORMATS')[0]; - const selected = inp.value.strptime(format); - const year = selected.getUTCFullYear(); - const month = selected.getUTCMonth() + 1; - const re = /\d{4}/; - if (re.test(year.toString()) && month >= 1 && month <= 12) { - DateTimeShortcuts.calendars[num].drawDate(month, year, selected); - } - } - - // Recalculate the clockbox position - // is it left-to-right or right-to-left layout ? - if (window.getComputedStyle(document.body).direction !== 'rtl') { - cal_box.style.left = findPosX(cal_link) + 17 + 'px'; - } - else { - // since style's width is in em, it'd be tough to calculate - // px value of it. let's use an estimated px for now - cal_box.style.left = findPosX(cal_link) - 180 + 'px'; - } - cal_box.style.top = Math.max(0, findPosY(cal_link) - 75) + 'px'; - - cal_box.style.display = 'block'; - document.addEventListener('click', DateTimeShortcuts.dismissCalendarFunc[num]); - }, - dismissCalendar: function(num) { - document.getElementById(DateTimeShortcuts.calendarDivName1 + num).style.display = 'none'; - document.removeEventListener('click', DateTimeShortcuts.dismissCalendarFunc[num]); - }, - drawPrev: function(num) { - DateTimeShortcuts.calendars[num].drawPreviousMonth(); - }, - drawNext: function(num) { - DateTimeShortcuts.calendars[num].drawNextMonth(); - }, - handleCalendarCallback: function(num) { - const format = get_format('DATE_INPUT_FORMATS')[0]; - return function(y, m, d) { - DateTimeShortcuts.calendarInputs[num].value = new Date(y, m - 1, d).strftime(format); - DateTimeShortcuts.calendarInputs[num].focus(); - document.getElementById(DateTimeShortcuts.calendarDivName1 + num).style.display = 'none'; - }; - }, - handleCalendarQuickLink: function(num, offset) { - const d = DateTimeShortcuts.now(); - d.setDate(d.getDate() + offset); - DateTimeShortcuts.calendarInputs[num].value = d.strftime(get_format('DATE_INPUT_FORMATS')[0]); - DateTimeShortcuts.calendarInputs[num].focus(); - DateTimeShortcuts.dismissCalendar(num); - } - }; - - window.addEventListener('load', DateTimeShortcuts.init); - window.DateTimeShortcuts = DateTimeShortcuts; -} diff --git a/staticfiles/admin/js/admin/RelatedObjectLookups.js b/staticfiles/admin/js/admin/RelatedObjectLookups.js deleted file mode 100644 index 1fc03c6..0000000 --- a/staticfiles/admin/js/admin/RelatedObjectLookups.js +++ /dev/null @@ -1,252 +0,0 @@ -/*global SelectBox, interpolate*/ -// Handles related-objects functionality: lookup link for raw_id_fields -// and Add Another links. -'use strict'; -{ - const $ = django.jQuery; - let popupIndex = 0; - const relatedWindows = []; - - function dismissChildPopups() { - relatedWindows.forEach(function(win) { - if(!win.closed) { - win.dismissChildPopups(); - win.close(); - } - }); - } - - function setPopupIndex() { - if(document.getElementsByName("_popup").length > 0) { - const index = window.name.lastIndexOf("__") + 2; - popupIndex = parseInt(window.name.substring(index)); - } else { - popupIndex = 0; - } - } - - function addPopupIndex(name) { - return name + "__" + (popupIndex + 1); - } - - function removePopupIndex(name) { - return name.replace(new RegExp("__" + (popupIndex + 1) + "$"), ''); - } - - function showAdminPopup(triggeringLink, name_regexp, add_popup) { - const name = addPopupIndex(triggeringLink.id.replace(name_regexp, '')); - const href = new URL(triggeringLink.href); - if (add_popup) { - href.searchParams.set('_popup', 1); - } - const win = window.open(href, name, 'height=500,width=800,resizable=yes,scrollbars=yes'); - relatedWindows.push(win); - win.focus(); - return false; - } - - function showRelatedObjectLookupPopup(triggeringLink) { - return showAdminPopup(triggeringLink, /^lookup_/, true); - } - - function dismissRelatedLookupPopup(win, chosenId) { - const name = removePopupIndex(win.name); - const elem = document.getElementById(name); - if (elem.classList.contains('vManyToManyRawIdAdminField') && elem.value) { - elem.value += ',' + chosenId; - } else { - elem.value = chosenId; - } - $(elem).trigger('change'); - const index = relatedWindows.indexOf(win); - if (index > -1) { - relatedWindows.splice(index, 1); - } - win.close(); - } - - function showRelatedObjectPopup(triggeringLink) { - return showAdminPopup(triggeringLink, /^(change|add|delete)_/, false); - } - - function updateRelatedObjectLinks(triggeringLink) { - const $this = $(triggeringLink); - const siblings = $this.nextAll('.view-related, .change-related, .delete-related'); - if (!siblings.length) { - return; - } - const value = $this.val(); - if (value) { - siblings.each(function() { - const elm = $(this); - elm.attr('href', elm.attr('data-href-template').replace('__fk__', value)); - elm.removeAttr('aria-disabled'); - }); - } else { - siblings.removeAttr('href'); - siblings.attr('aria-disabled', true); - } - } - - function updateRelatedSelectsOptions(currentSelect, win, objId, newRepr, newId, skipIds = []) { - // After create/edit a model from the options next to the current - // select (+ or :pencil:) update ForeignKey PK of the rest of selects - // in the page. - - const path = win.location.pathname; - // Extract the model from the popup url '...//add/' or - // '...///change/' depending the action (add or change). - const modelName = path.split('/')[path.split('/').length - (objId ? 4 : 3)]; - // Select elements with a specific model reference and context of "available-source". - const selectsRelated = document.querySelectorAll(`[data-model-ref="${modelName}"] [data-context="available-source"]`); - - selectsRelated.forEach(function(select) { - if (currentSelect === select || skipIds && skipIds.includes(select.id)) { - return; - } - - let option = select.querySelector(`option[value="${objId}"]`); - - if (!option) { - option = new Option(newRepr, newId); - select.options.add(option); - // Update SelectBox cache for related fields. - if (window.SelectBox !== undefined && !SelectBox.cache[currentSelect.id]) { - SelectBox.add_to_cache(select.id, option); - SelectBox.redisplay(select.id); - } - return; - } - - option.textContent = newRepr; - option.value = newId; - }); - } - - function dismissAddRelatedObjectPopup(win, newId, newRepr) { - const name = removePopupIndex(win.name); - const elem = document.getElementById(name); - if (elem) { - const elemName = elem.nodeName.toUpperCase(); - if (elemName === 'SELECT') { - elem.options[elem.options.length] = new Option(newRepr, newId, true, true); - updateRelatedSelectsOptions(elem, win, null, newRepr, newId); - } else if (elemName === 'INPUT') { - if (elem.classList.contains('vManyToManyRawIdAdminField') && elem.value) { - elem.value += ',' + newId; - } else { - elem.value = newId; - } - } - // Trigger a change event to update related links if required. - $(elem).trigger('change'); - } else { - const toId = name + "_to"; - const toElem = document.getElementById(toId); - const o = new Option(newRepr, newId); - SelectBox.add_to_cache(toId, o); - SelectBox.redisplay(toId); - if (toElem && toElem.nodeName.toUpperCase() === 'SELECT') { - const skipIds = [name + "_from"]; - updateRelatedSelectsOptions(toElem, win, null, newRepr, newId, skipIds); - } - } - const index = relatedWindows.indexOf(win); - if (index > -1) { - relatedWindows.splice(index, 1); - } - win.close(); - } - - function dismissChangeRelatedObjectPopup(win, objId, newRepr, newId) { - const id = removePopupIndex(win.name.replace(/^edit_/, '')); - const selectsSelector = interpolate('#%s, #%s_from, #%s_to', [id, id, id]); - const selects = $(selectsSelector); - selects.find('option').each(function() { - if (this.value === objId) { - this.textContent = newRepr; - this.value = newId; - } - }).trigger('change'); - updateRelatedSelectsOptions(selects[0], win, objId, newRepr, newId); - selects.next().find('.select2-selection__rendered').each(function() { - // The element can have a clear button as a child. - // Use the lastChild to modify only the displayed value. - this.lastChild.textContent = newRepr; - this.title = newRepr; - }); - const index = relatedWindows.indexOf(win); - if (index > -1) { - relatedWindows.splice(index, 1); - } - win.close(); - } - - function dismissDeleteRelatedObjectPopup(win, objId) { - const id = removePopupIndex(win.name.replace(/^delete_/, '')); - const selectsSelector = interpolate('#%s, #%s_from, #%s_to', [id, id, id]); - const selects = $(selectsSelector); - selects.find('option').each(function() { - if (this.value === objId) { - $(this).remove(); - } - }).trigger('change'); - const index = relatedWindows.indexOf(win); - if (index > -1) { - relatedWindows.splice(index, 1); - } - win.close(); - } - - window.showRelatedObjectLookupPopup = showRelatedObjectLookupPopup; - window.dismissRelatedLookupPopup = dismissRelatedLookupPopup; - window.showRelatedObjectPopup = showRelatedObjectPopup; - window.updateRelatedObjectLinks = updateRelatedObjectLinks; - window.dismissAddRelatedObjectPopup = dismissAddRelatedObjectPopup; - window.dismissChangeRelatedObjectPopup = dismissChangeRelatedObjectPopup; - window.dismissDeleteRelatedObjectPopup = dismissDeleteRelatedObjectPopup; - window.dismissChildPopups = dismissChildPopups; - window.relatedWindows = relatedWindows; - - // Kept for backward compatibility - window.showAddAnotherPopup = showRelatedObjectPopup; - window.dismissAddAnotherPopup = dismissAddRelatedObjectPopup; - - window.addEventListener('unload', function(evt) { - window.dismissChildPopups(); - }); - - $(document).ready(function() { - setPopupIndex(); - $("a[data-popup-opener]").on('click', function(event) { - event.preventDefault(); - opener.dismissRelatedLookupPopup(window, $(this).data("popup-opener")); - }); - $('body').on('click', '.related-widget-wrapper-link[data-popup="yes"]', function(e) { - e.preventDefault(); - if (this.href) { - const event = $.Event('django:show-related', {href: this.href}); - $(this).trigger(event); - if (!event.isDefaultPrevented()) { - showRelatedObjectPopup(this); - } - } - }); - $('body').on('change', '.related-widget-wrapper select', function(e) { - const event = $.Event('django:update-related'); - $(this).trigger(event); - if (!event.isDefaultPrevented()) { - updateRelatedObjectLinks(this); - } - }); - $('.related-widget-wrapper select').trigger('change'); - $('body').on('click', '.related-lookup', function(e) { - e.preventDefault(); - const event = $.Event('django:lookup-related'); - $(this).trigger(event); - if (!event.isDefaultPrevented()) { - showRelatedObjectLookupPopup(this); - } - }); - }); -} diff --git a/staticfiles/admin/js/autocomplete.js b/staticfiles/admin/js/autocomplete.js deleted file mode 100644 index d3daeab..0000000 --- a/staticfiles/admin/js/autocomplete.js +++ /dev/null @@ -1,33 +0,0 @@ -'use strict'; -{ - const $ = django.jQuery; - - $.fn.djangoAdminSelect2 = function() { - $.each(this, function(i, element) { - $(element).select2({ - ajax: { - data: (params) => { - return { - term: params.term, - page: params.page, - app_label: element.dataset.appLabel, - model_name: element.dataset.modelName, - field_name: element.dataset.fieldName - }; - } - } - }); - }); - return this; - }; - - $(function() { - // Initialize all autocomplete widgets except the one in the template - // form used when a new formset is added. - $('.admin-autocomplete').not('[name*=__prefix__]').djangoAdminSelect2(); - }); - - document.addEventListener('formset:added', (event) => { - $(event.target).find('.admin-autocomplete').djangoAdminSelect2(); - }); -} diff --git a/staticfiles/admin/js/calendar.js b/staticfiles/admin/js/calendar.js deleted file mode 100644 index 776310f..0000000 --- a/staticfiles/admin/js/calendar.js +++ /dev/null @@ -1,239 +0,0 @@ -/*global gettext, pgettext, get_format, quickElement, removeChildren*/ -/* -calendar.js - Calendar functions by Adrian Holovaty -depends on core.js for utility functions like removeChildren or quickElement -*/ -'use strict'; -{ - // CalendarNamespace -- Provides a collection of HTML calendar-related helper functions - const CalendarNamespace = { - monthsOfYear: [ - gettext('January'), - gettext('February'), - gettext('March'), - gettext('April'), - gettext('May'), - gettext('June'), - gettext('July'), - gettext('August'), - gettext('September'), - gettext('October'), - gettext('November'), - gettext('December') - ], - monthsOfYearAbbrev: [ - pgettext('abbrev. month January', 'Jan'), - pgettext('abbrev. month February', 'Feb'), - pgettext('abbrev. month March', 'Mar'), - pgettext('abbrev. month April', 'Apr'), - pgettext('abbrev. month May', 'May'), - pgettext('abbrev. month June', 'Jun'), - pgettext('abbrev. month July', 'Jul'), - pgettext('abbrev. month August', 'Aug'), - pgettext('abbrev. month September', 'Sep'), - pgettext('abbrev. month October', 'Oct'), - pgettext('abbrev. month November', 'Nov'), - pgettext('abbrev. month December', 'Dec') - ], - daysOfWeek: [ - gettext('Sunday'), - gettext('Monday'), - gettext('Tuesday'), - gettext('Wednesday'), - gettext('Thursday'), - gettext('Friday'), - gettext('Saturday') - ], - daysOfWeekAbbrev: [ - pgettext('abbrev. day Sunday', 'Sun'), - pgettext('abbrev. day Monday', 'Mon'), - pgettext('abbrev. day Tuesday', 'Tue'), - pgettext('abbrev. day Wednesday', 'Wed'), - pgettext('abbrev. day Thursday', 'Thur'), - pgettext('abbrev. day Friday', 'Fri'), - pgettext('abbrev. day Saturday', 'Sat') - ], - daysOfWeekInitial: [ - pgettext('one letter Sunday', 'S'), - pgettext('one letter Monday', 'M'), - pgettext('one letter Tuesday', 'T'), - pgettext('one letter Wednesday', 'W'), - pgettext('one letter Thursday', 'T'), - pgettext('one letter Friday', 'F'), - pgettext('one letter Saturday', 'S') - ], - firstDayOfWeek: parseInt(get_format('FIRST_DAY_OF_WEEK')), - isLeapYear: function(year) { - return (((year % 4) === 0) && ((year % 100) !== 0 ) || ((year % 400) === 0)); - }, - getDaysInMonth: function(month, year) { - let days; - if (month === 1 || month === 3 || month === 5 || month === 7 || month === 8 || month === 10 || month === 12) { - days = 31; - } - else if (month === 4 || month === 6 || month === 9 || month === 11) { - days = 30; - } - else if (month === 2 && CalendarNamespace.isLeapYear(year)) { - days = 29; - } - else { - days = 28; - } - return days; - }, - draw: function(month, year, div_id, callback, selected) { // month = 1-12, year = 1-9999 - const today = new Date(); - const todayDay = today.getDate(); - const todayMonth = today.getMonth() + 1; - const todayYear = today.getFullYear(); - let todayClass = ''; - - // Use UTC functions here because the date field does not contain time - // and using the UTC function variants prevent the local time offset - // from altering the date, specifically the day field. For example: - // - // ``` - // var x = new Date('2013-10-02'); - // var day = x.getDate(); - // ``` - // - // The day variable above will be 1 instead of 2 in, say, US Pacific time - // zone. - let isSelectedMonth = false; - if (typeof selected !== 'undefined') { - isSelectedMonth = (selected.getUTCFullYear() === year && (selected.getUTCMonth() + 1) === month); - } - - month = parseInt(month); - year = parseInt(year); - const calDiv = document.getElementById(div_id); - removeChildren(calDiv); - const calTable = document.createElement('table'); - quickElement('caption', calTable, CalendarNamespace.monthsOfYear[month - 1] + ' ' + year); - const tableBody = quickElement('tbody', calTable); - - // Draw days-of-week header - let tableRow = quickElement('tr', tableBody); - for (let i = 0; i < 7; i++) { - quickElement('th', tableRow, CalendarNamespace.daysOfWeekInitial[(i + CalendarNamespace.firstDayOfWeek) % 7]); - } - - const startingPos = new Date(year, month - 1, 1 - CalendarNamespace.firstDayOfWeek).getDay(); - const days = CalendarNamespace.getDaysInMonth(month, year); - - let nonDayCell; - - // Draw blanks before first of month - tableRow = quickElement('tr', tableBody); - for (let i = 0; i < startingPos; i++) { - nonDayCell = quickElement('td', tableRow, ' '); - nonDayCell.className = "nonday"; - } - - function calendarMonth(y, m) { - function onClick(e) { - e.preventDefault(); - callback(y, m, this.textContent); - } - return onClick; - } - - // Draw days of month - let currentDay = 1; - for (let i = startingPos; currentDay <= days; i++) { - if (i % 7 === 0 && currentDay !== 1) { - tableRow = quickElement('tr', tableBody); - } - if ((currentDay === todayDay) && (month === todayMonth) && (year === todayYear)) { - todayClass = 'today'; - } else { - todayClass = ''; - } - - // use UTC function; see above for explanation. - if (isSelectedMonth && currentDay === selected.getUTCDate()) { - if (todayClass !== '') { - todayClass += " "; - } - todayClass += "selected"; - } - - const cell = quickElement('td', tableRow, '', 'class', todayClass); - const link = quickElement('a', cell, currentDay, 'href', '#'); - link.addEventListener('click', calendarMonth(year, month)); - currentDay++; - } - - // Draw blanks after end of month (optional, but makes for valid code) - while (tableRow.childNodes.length < 7) { - nonDayCell = quickElement('td', tableRow, ' '); - nonDayCell.className = "nonday"; - } - - calDiv.appendChild(calTable); - } - }; - - // Calendar -- A calendar instance - function Calendar(div_id, callback, selected) { - // div_id (string) is the ID of the element in which the calendar will - // be displayed - // callback (string) is the name of a JavaScript function that will be - // called with the parameters (year, month, day) when a day in the - // calendar is clicked - this.div_id = div_id; - this.callback = callback; - this.today = new Date(); - this.currentMonth = this.today.getMonth() + 1; - this.currentYear = this.today.getFullYear(); - if (typeof selected !== 'undefined') { - this.selected = selected; - } - } - Calendar.prototype = { - drawCurrent: function() { - CalendarNamespace.draw(this.currentMonth, this.currentYear, this.div_id, this.callback, this.selected); - }, - drawDate: function(month, year, selected) { - this.currentMonth = month; - this.currentYear = year; - - if(selected) { - this.selected = selected; - } - - this.drawCurrent(); - }, - drawPreviousMonth: function() { - if (this.currentMonth === 1) { - this.currentMonth = 12; - this.currentYear--; - } - else { - this.currentMonth--; - } - this.drawCurrent(); - }, - drawNextMonth: function() { - if (this.currentMonth === 12) { - this.currentMonth = 1; - this.currentYear++; - } - else { - this.currentMonth++; - } - this.drawCurrent(); - }, - drawPreviousYear: function() { - this.currentYear--; - this.drawCurrent(); - }, - drawNextYear: function() { - this.currentYear++; - this.drawCurrent(); - } - }; - window.Calendar = Calendar; - window.CalendarNamespace = CalendarNamespace; -} diff --git a/staticfiles/admin/js/cancel.js b/staticfiles/admin/js/cancel.js deleted file mode 100644 index 3069c6f..0000000 --- a/staticfiles/admin/js/cancel.js +++ /dev/null @@ -1,29 +0,0 @@ -'use strict'; -{ - // Call function fn when the DOM is loaded and ready. If it is already - // loaded, call the function now. - // http://youmightnotneedjquery.com/#ready - function ready(fn) { - if (document.readyState !== 'loading') { - fn(); - } else { - document.addEventListener('DOMContentLoaded', fn); - } - } - - ready(function() { - function handleClick(event) { - event.preventDefault(); - const params = new URLSearchParams(window.location.search); - if (params.has('_popup')) { - window.close(); // Close the popup. - } else { - window.history.back(); // Otherwise, go back. - } - } - - document.querySelectorAll('.cancel-link').forEach(function(el) { - el.addEventListener('click', handleClick); - }); - }); -} diff --git a/staticfiles/admin/js/change_form.js b/staticfiles/admin/js/change_form.js deleted file mode 100644 index 96a4c62..0000000 --- a/staticfiles/admin/js/change_form.js +++ /dev/null @@ -1,16 +0,0 @@ -'use strict'; -{ - const inputTags = ['BUTTON', 'INPUT', 'SELECT', 'TEXTAREA']; - const modelName = document.getElementById('django-admin-form-add-constants').dataset.modelName; - if (modelName) { - const form = document.getElementById(modelName + '_form'); - for (const element of form.elements) { - // HTMLElement.offsetParent returns null when the element is not - // rendered. - if (inputTags.includes(element.tagName) && !element.disabled && element.offsetParent) { - element.focus(); - break; - } - } - } -} diff --git a/staticfiles/admin/js/core.js b/staticfiles/admin/js/core.js deleted file mode 100644 index 10504d4..0000000 --- a/staticfiles/admin/js/core.js +++ /dev/null @@ -1,184 +0,0 @@ -// Core JavaScript helper functions -'use strict'; - -// quickElement(tagType, parentReference [, textInChildNode, attribute, attributeValue ...]); -function quickElement() { - const obj = document.createElement(arguments[0]); - if (arguments[2]) { - const textNode = document.createTextNode(arguments[2]); - obj.appendChild(textNode); - } - const len = arguments.length; - for (let i = 3; i < len; i += 2) { - obj.setAttribute(arguments[i], arguments[i + 1]); - } - arguments[1].appendChild(obj); - return obj; -} - -// "a" is reference to an object -function removeChildren(a) { - while (a.hasChildNodes()) { - a.removeChild(a.lastChild); - } -} - -// ---------------------------------------------------------------------------- -// Find-position functions by PPK -// See https://www.quirksmode.org/js/findpos.html -// ---------------------------------------------------------------------------- -function findPosX(obj) { - let curleft = 0; - if (obj.offsetParent) { - while (obj.offsetParent) { - curleft += obj.offsetLeft - obj.scrollLeft; - obj = obj.offsetParent; - } - } else if (obj.x) { - curleft += obj.x; - } - return curleft; -} - -function findPosY(obj) { - let curtop = 0; - if (obj.offsetParent) { - while (obj.offsetParent) { - curtop += obj.offsetTop - obj.scrollTop; - obj = obj.offsetParent; - } - } else if (obj.y) { - curtop += obj.y; - } - return curtop; -} - -//----------------------------------------------------------------------------- -// Date object extensions -// ---------------------------------------------------------------------------- -{ - Date.prototype.getTwelveHours = function() { - return this.getHours() % 12 || 12; - }; - - Date.prototype.getTwoDigitMonth = function() { - return (this.getMonth() < 9) ? '0' + (this.getMonth() + 1) : (this.getMonth() + 1); - }; - - Date.prototype.getTwoDigitDate = function() { - return (this.getDate() < 10) ? '0' + this.getDate() : this.getDate(); - }; - - Date.prototype.getTwoDigitTwelveHour = function() { - return (this.getTwelveHours() < 10) ? '0' + this.getTwelveHours() : this.getTwelveHours(); - }; - - Date.prototype.getTwoDigitHour = function() { - return (this.getHours() < 10) ? '0' + this.getHours() : this.getHours(); - }; - - Date.prototype.getTwoDigitMinute = function() { - return (this.getMinutes() < 10) ? '0' + this.getMinutes() : this.getMinutes(); - }; - - Date.prototype.getTwoDigitSecond = function() { - return (this.getSeconds() < 10) ? '0' + this.getSeconds() : this.getSeconds(); - }; - - Date.prototype.getAbbrevDayName = function() { - return typeof window.CalendarNamespace === "undefined" - ? '0' + this.getDay() - : window.CalendarNamespace.daysOfWeekAbbrev[this.getDay()]; - }; - - Date.prototype.getFullDayName = function() { - return typeof window.CalendarNamespace === "undefined" - ? '0' + this.getDay() - : window.CalendarNamespace.daysOfWeek[this.getDay()]; - }; - - Date.prototype.getAbbrevMonthName = function() { - return typeof window.CalendarNamespace === "undefined" - ? this.getTwoDigitMonth() - : window.CalendarNamespace.monthsOfYearAbbrev[this.getMonth()]; - }; - - Date.prototype.getFullMonthName = function() { - return typeof window.CalendarNamespace === "undefined" - ? this.getTwoDigitMonth() - : window.CalendarNamespace.monthsOfYear[this.getMonth()]; - }; - - Date.prototype.strftime = function(format) { - const fields = { - a: this.getAbbrevDayName(), - A: this.getFullDayName(), - b: this.getAbbrevMonthName(), - B: this.getFullMonthName(), - c: this.toString(), - d: this.getTwoDigitDate(), - H: this.getTwoDigitHour(), - I: this.getTwoDigitTwelveHour(), - m: this.getTwoDigitMonth(), - M: this.getTwoDigitMinute(), - p: (this.getHours() >= 12) ? 'PM' : 'AM', - S: this.getTwoDigitSecond(), - w: '0' + this.getDay(), - x: this.toLocaleDateString(), - X: this.toLocaleTimeString(), - y: ('' + this.getFullYear()).substr(2, 4), - Y: '' + this.getFullYear(), - '%': '%' - }; - let result = '', i = 0; - while (i < format.length) { - if (format.charAt(i) === '%') { - result += fields[format.charAt(i + 1)]; - ++i; - } - else { - result += format.charAt(i); - } - ++i; - } - return result; - }; - - // ---------------------------------------------------------------------------- - // String object extensions - // ---------------------------------------------------------------------------- - String.prototype.strptime = function(format) { - const split_format = format.split(/[.\-/]/); - const date = this.split(/[.\-/]/); - let i = 0; - let day, month, year; - while (i < split_format.length) { - switch (split_format[i]) { - case "%d": - day = date[i]; - break; - case "%m": - month = date[i] - 1; - break; - case "%Y": - year = date[i]; - break; - case "%y": - // A %y value in the range of [00, 68] is in the current - // century, while [69, 99] is in the previous century, - // according to the Open Group Specification. - if (parseInt(date[i], 10) >= 69) { - year = date[i]; - } else { - year = (new Date(Date.UTC(date[i], 0))).getUTCFullYear() + 100; - } - break; - } - ++i; - } - // Create Date object from UTC since the parsed value is supposed to be - // in UTC, not local time. Also, the calendar uses UTC functions for - // date extraction. - return new Date(Date.UTC(year, month, day)); - }; -} diff --git a/staticfiles/admin/js/filters.js b/staticfiles/admin/js/filters.js deleted file mode 100644 index f5536eb..0000000 --- a/staticfiles/admin/js/filters.js +++ /dev/null @@ -1,30 +0,0 @@ -/** - * Persist changelist filters state (collapsed/expanded). - */ -'use strict'; -{ - // Init filters. - let filters = JSON.parse(sessionStorage.getItem('django.admin.filtersState')); - - if (!filters) { - filters = {}; - } - - Object.entries(filters).forEach(([key, value]) => { - const detailElement = document.querySelector(`[data-filter-title='${CSS.escape(key)}']`); - - // Check if the filter is present, it could be from other view. - if (detailElement) { - value ? detailElement.setAttribute('open', '') : detailElement.removeAttribute('open'); - } - }); - - // Save filter state when clicks. - const details = document.querySelectorAll('details'); - details.forEach(detail => { - detail.addEventListener('toggle', event => { - filters[`${event.target.dataset.filterTitle}`] = detail.open; - sessionStorage.setItem('django.admin.filtersState', JSON.stringify(filters)); - }); - }); -} diff --git a/staticfiles/admin/js/inlines.js b/staticfiles/admin/js/inlines.js deleted file mode 100644 index cd3726c..0000000 --- a/staticfiles/admin/js/inlines.js +++ /dev/null @@ -1,359 +0,0 @@ -/*global DateTimeShortcuts, SelectFilter*/ -/** - * Django admin inlines - * - * Based on jQuery Formset 1.1 - * @author Stanislaus Madueke (stan DOT madueke AT gmail DOT com) - * @requires jQuery 1.2.6 or later - * - * Copyright (c) 2009, Stanislaus Madueke - * All rights reserved. - * - * Spiced up with Code from Zain Memon's GSoC project 2009 - * and modified for Django by Jannis Leidel, Travis Swicegood and Julien Phalip. - * - * Licensed under the New BSD License - * See: https://opensource.org/licenses/bsd-license.php - */ -'use strict'; -{ - const $ = django.jQuery; - $.fn.formset = function(opts) { - const options = $.extend({}, $.fn.formset.defaults, opts); - const $this = $(this); - const $parent = $this.parent(); - const updateElementIndex = function(el, prefix, ndx) { - const id_regex = new RegExp("(" + prefix + "-(\\d+|__prefix__))"); - const replacement = prefix + "-" + ndx; - if ($(el).prop("for")) { - $(el).prop("for", $(el).prop("for").replace(id_regex, replacement)); - } - if (el.id) { - el.id = el.id.replace(id_regex, replacement); - } - if (el.name) { - el.name = el.name.replace(id_regex, replacement); - } - }; - const totalForms = $("#id_" + options.prefix + "-TOTAL_FORMS").prop("autocomplete", "off"); - let nextIndex = parseInt(totalForms.val(), 10); - const maxForms = $("#id_" + options.prefix + "-MAX_NUM_FORMS").prop("autocomplete", "off"); - const minForms = $("#id_" + options.prefix + "-MIN_NUM_FORMS").prop("autocomplete", "off"); - let addButton; - - /** - * The "Add another MyModel" button below the inline forms. - */ - const addInlineAddButton = function() { - if (addButton === null) { - if ($this.prop("tagName") === "TR") { - // If forms are laid out as table rows, insert the - // "add" button in a new table row: - const numCols = $this.eq(-1).children().length; - $parent.append('' + options.addText + ""); - addButton = $parent.find("tr:last a"); - } else { - // Otherwise, insert it immediately after the last form: - $this.filter(":last").after('"); - addButton = $this.filter(":last").next().find("a"); - } - } - addButton.on('click', addInlineClickHandler); - }; - - const addInlineClickHandler = function(e) { - e.preventDefault(); - const template = $("#" + options.prefix + "-empty"); - const row = template.clone(true); - row.removeClass(options.emptyCssClass) - .addClass(options.formCssClass) - .attr("id", options.prefix + "-" + nextIndex); - addInlineDeleteButton(row); - row.find("*").each(function() { - updateElementIndex(this, options.prefix, totalForms.val()); - }); - // Insert the new form when it has been fully edited. - row.insertBefore($(template)); - // Update number of total forms. - $(totalForms).val(parseInt(totalForms.val(), 10) + 1); - nextIndex += 1; - // Hide the add button if there's a limit and it's been reached. - if ((maxForms.val() !== '') && (maxForms.val() - totalForms.val()) <= 0) { - addButton.parent().hide(); - } - // Show the remove buttons if there are more than min_num. - toggleDeleteButtonVisibility(row.closest('.inline-group')); - - // Pass the new form to the post-add callback, if provided. - if (options.added) { - options.added(row); - } - row.get(0).dispatchEvent(new CustomEvent("formset:added", { - bubbles: true, - detail: { - formsetName: options.prefix - } - })); - }; - - /** - * The "X" button that is part of every unsaved inline. - * (When saved, it is replaced with a "Delete" checkbox.) - */ - const addInlineDeleteButton = function(row) { - if (row.is("tr")) { - // If the forms are laid out in table rows, insert - // the remove button into the last table cell: - row.children(":last").append('"); - } else if (row.is("ul") || row.is("ol")) { - // If they're laid out as an ordered/unordered list, - // insert an
    • after the last list item: - row.append('
    • ' + options.deleteText + "
    • "); - } else { - // Otherwise, just insert the remove button as the - // last child element of the form's container: - row.children(":first").append('' + options.deleteText + ""); - } - // Add delete handler for each row. - row.find("a." + options.deleteCssClass).on('click', inlineDeleteHandler.bind(this)); - }; - - const inlineDeleteHandler = function(e1) { - e1.preventDefault(); - const deleteButton = $(e1.target); - const row = deleteButton.closest('.' + options.formCssClass); - const inlineGroup = row.closest('.inline-group'); - // Remove the parent form containing this button, - // and also remove the relevant row with non-field errors: - const prevRow = row.prev(); - if (prevRow.length && prevRow.hasClass('row-form-errors')) { - prevRow.remove(); - } - row.remove(); - nextIndex -= 1; - // Pass the deleted form to the post-delete callback, if provided. - if (options.removed) { - options.removed(row); - } - document.dispatchEvent(new CustomEvent("formset:removed", { - detail: { - formsetName: options.prefix - } - })); - // Update the TOTAL_FORMS form count. - const forms = $("." + options.formCssClass); - $("#id_" + options.prefix + "-TOTAL_FORMS").val(forms.length); - // Show add button again once below maximum number. - if ((maxForms.val() === '') || (maxForms.val() - forms.length) > 0) { - addButton.parent().show(); - } - // Hide the remove buttons if at min_num. - toggleDeleteButtonVisibility(inlineGroup); - // Also, update names and ids for all remaining form controls so - // they remain in sequence: - let i, formCount; - const updateElementCallback = function() { - updateElementIndex(this, options.prefix, i); - }; - for (i = 0, formCount = forms.length; i < formCount; i++) { - updateElementIndex($(forms).get(i), options.prefix, i); - $(forms.get(i)).find("*").each(updateElementCallback); - } - }; - - const toggleDeleteButtonVisibility = function(inlineGroup) { - if ((minForms.val() !== '') && (minForms.val() - totalForms.val()) >= 0) { - inlineGroup.find('.inline-deletelink').hide(); - } else { - inlineGroup.find('.inline-deletelink').show(); - } - }; - - $this.each(function(i) { - $(this).not("." + options.emptyCssClass).addClass(options.formCssClass); - }); - - // Create the delete buttons for all unsaved inlines: - $this.filter('.' + options.formCssClass + ':not(.has_original):not(.' + options.emptyCssClass + ')').each(function() { - addInlineDeleteButton($(this)); - }); - toggleDeleteButtonVisibility($this); - - // Create the add button, initially hidden. - addButton = options.addButton; - addInlineAddButton(); - - // Show the add button if allowed to add more items. - // Note that max_num = None translates to a blank string. - const showAddButton = maxForms.val() === '' || (maxForms.val() - totalForms.val()) > 0; - if ($this.length && showAddButton) { - addButton.parent().show(); - } else { - addButton.parent().hide(); - } - - return this; - }; - - /* Setup plugin defaults */ - $.fn.formset.defaults = { - prefix: "form", // The form prefix for your django formset - addText: "add another", // Text for the add link - deleteText: "remove", // Text for the delete link - addCssClass: "add-row", // CSS class applied to the add link - deleteCssClass: "delete-row", // CSS class applied to the delete link - emptyCssClass: "empty-row", // CSS class applied to the empty row - formCssClass: "dynamic-form", // CSS class applied to each form in a formset - added: null, // Function called each time a new form is added - removed: null, // Function called each time a form is deleted - addButton: null // Existing add button to use - }; - - - // Tabular inlines --------------------------------------------------------- - $.fn.tabularFormset = function(selector, options) { - const $rows = $(this); - - const reinitDateTimeShortCuts = function() { - // Reinitialize the calendar and clock widgets by force - if (typeof DateTimeShortcuts !== "undefined") { - $(".datetimeshortcuts").remove(); - DateTimeShortcuts.init(); - } - }; - - const updateSelectFilter = function() { - // If any SelectFilter widgets are a part of the new form, - // instantiate a new SelectFilter instance for it. - if (typeof SelectFilter !== 'undefined') { - $('.selectfilter').each(function(index, value) { - SelectFilter.init(value.id, this.dataset.fieldName, false); - }); - $('.selectfilterstacked').each(function(index, value) { - SelectFilter.init(value.id, this.dataset.fieldName, true); - }); - } - }; - - const initPrepopulatedFields = function(row) { - row.find('.prepopulated_field').each(function() { - const field = $(this), - input = field.find('input, select, textarea'), - dependency_list = input.data('dependency_list') || [], - dependencies = []; - $.each(dependency_list, function(i, field_name) { - dependencies.push('#' + row.find('.field-' + field_name).find('input, select, textarea').attr('id')); - }); - if (dependencies.length) { - input.prepopulate(dependencies, input.attr('maxlength')); - } - }); - }; - - $rows.formset({ - prefix: options.prefix, - addText: options.addText, - formCssClass: "dynamic-" + options.prefix, - deleteCssClass: "inline-deletelink", - deleteText: options.deleteText, - emptyCssClass: "empty-form", - added: function(row) { - initPrepopulatedFields(row); - reinitDateTimeShortCuts(); - updateSelectFilter(); - }, - addButton: options.addButton - }); - - return $rows; - }; - - // Stacked inlines --------------------------------------------------------- - $.fn.stackedFormset = function(selector, options) { - const $rows = $(this); - const updateInlineLabel = function(row) { - $(selector).find(".inline_label").each(function(i) { - const count = i + 1; - $(this).html($(this).html().replace(/(#\d+)/g, "#" + count)); - }); - }; - - const reinitDateTimeShortCuts = function() { - // Reinitialize the calendar and clock widgets by force, yuck. - if (typeof DateTimeShortcuts !== "undefined") { - $(".datetimeshortcuts").remove(); - DateTimeShortcuts.init(); - } - }; - - const updateSelectFilter = function() { - // If any SelectFilter widgets were added, instantiate a new instance. - if (typeof SelectFilter !== "undefined") { - $(".selectfilter").each(function(index, value) { - SelectFilter.init(value.id, this.dataset.fieldName, false); - }); - $(".selectfilterstacked").each(function(index, value) { - SelectFilter.init(value.id, this.dataset.fieldName, true); - }); - } - }; - - const initPrepopulatedFields = function(row) { - row.find('.prepopulated_field').each(function() { - const field = $(this), - input = field.find('input, select, textarea'), - dependency_list = input.data('dependency_list') || [], - dependencies = []; - $.each(dependency_list, function(i, field_name) { - // Dependency in a fieldset. - let field_element = row.find('.form-row .field-' + field_name); - // Dependency without a fieldset. - if (!field_element.length) { - field_element = row.find('.form-row.field-' + field_name); - } - dependencies.push('#' + field_element.find('input, select, textarea').attr('id')); - }); - if (dependencies.length) { - input.prepopulate(dependencies, input.attr('maxlength')); - } - }); - }; - - $rows.formset({ - prefix: options.prefix, - addText: options.addText, - formCssClass: "dynamic-" + options.prefix, - deleteCssClass: "inline-deletelink", - deleteText: options.deleteText, - emptyCssClass: "empty-form", - removed: updateInlineLabel, - added: function(row) { - initPrepopulatedFields(row); - reinitDateTimeShortCuts(); - updateSelectFilter(); - updateInlineLabel(row); - }, - addButton: options.addButton - }); - - return $rows; - }; - - $(document).ready(function() { - $(".js-inline-admin-formset").each(function() { - const data = $(this).data(), - inlineOptions = data.inlineFormset; - let selector; - switch(data.inlineType) { - case "stacked": - selector = inlineOptions.name + "-group .inline-related"; - $(selector).stackedFormset(selector, inlineOptions.options); - break; - case "tabular": - selector = inlineOptions.name + "-group .tabular.inline-related tbody:first > tr.form-row"; - $(selector).tabularFormset(selector, inlineOptions.options); - break; - } - }); - }); -} diff --git a/staticfiles/admin/js/jquery.init.js b/staticfiles/admin/js/jquery.init.js deleted file mode 100644 index f40b27f..0000000 --- a/staticfiles/admin/js/jquery.init.js +++ /dev/null @@ -1,8 +0,0 @@ -/*global jQuery:false*/ -'use strict'; -/* Puts the included jQuery into our own namespace using noConflict and passing - * it 'true'. This ensures that the included jQuery doesn't pollute the global - * namespace (i.e. this preserves pre-existing values for both window.$ and - * window.jQuery). - */ -window.django = {jQuery: jQuery.noConflict(true)}; diff --git a/staticfiles/admin/js/nav_sidebar.js b/staticfiles/admin/js/nav_sidebar.js deleted file mode 100644 index 7e735db..0000000 --- a/staticfiles/admin/js/nav_sidebar.js +++ /dev/null @@ -1,79 +0,0 @@ -'use strict'; -{ - const toggleNavSidebar = document.getElementById('toggle-nav-sidebar'); - if (toggleNavSidebar !== null) { - const navSidebar = document.getElementById('nav-sidebar'); - const main = document.getElementById('main'); - let navSidebarIsOpen = localStorage.getItem('django.admin.navSidebarIsOpen'); - if (navSidebarIsOpen === null) { - navSidebarIsOpen = 'true'; - } - main.classList.toggle('shifted', navSidebarIsOpen === 'true'); - navSidebar.setAttribute('aria-expanded', navSidebarIsOpen); - - toggleNavSidebar.addEventListener('click', function() { - if (navSidebarIsOpen === 'true') { - navSidebarIsOpen = 'false'; - } else { - navSidebarIsOpen = 'true'; - } - localStorage.setItem('django.admin.navSidebarIsOpen', navSidebarIsOpen); - main.classList.toggle('shifted'); - navSidebar.setAttribute('aria-expanded', navSidebarIsOpen); - }); - } - - function initSidebarQuickFilter() { - const options = []; - const navSidebar = document.getElementById('nav-sidebar'); - if (!navSidebar) { - return; - } - navSidebar.querySelectorAll('th[scope=row] a').forEach((container) => { - options.push({title: container.innerHTML, node: container}); - }); - - function checkValue(event) { - let filterValue = event.target.value; - if (filterValue) { - filterValue = filterValue.toLowerCase(); - } - if (event.key === 'Escape') { - filterValue = ''; - event.target.value = ''; // clear input - } - let matches = false; - for (const o of options) { - let displayValue = ''; - if (filterValue) { - if (o.title.toLowerCase().indexOf(filterValue) === -1) { - displayValue = 'none'; - } else { - matches = true; - } - } - // show/hide parent - o.node.parentNode.parentNode.style.display = displayValue; - } - if (!filterValue || matches) { - event.target.classList.remove('no-results'); - } else { - event.target.classList.add('no-results'); - } - sessionStorage.setItem('django.admin.navSidebarFilterValue', filterValue); - } - - const nav = document.getElementById('nav-filter'); - nav.addEventListener('change', checkValue, false); - nav.addEventListener('input', checkValue, false); - nav.addEventListener('keyup', checkValue, false); - - const storedValue = sessionStorage.getItem('django.admin.navSidebarFilterValue'); - if (storedValue) { - nav.value = storedValue; - checkValue({target: nav, key: ''}); - } - } - window.initSidebarQuickFilter = initSidebarQuickFilter; - initSidebarQuickFilter(); -} diff --git a/staticfiles/admin/js/popup_response.js b/staticfiles/admin/js/popup_response.js deleted file mode 100644 index fecf0f4..0000000 --- a/staticfiles/admin/js/popup_response.js +++ /dev/null @@ -1,15 +0,0 @@ -'use strict'; -{ - const initData = JSON.parse(document.getElementById('django-admin-popup-response-constants').dataset.popupResponse); - switch(initData.action) { - case 'change': - opener.dismissChangeRelatedObjectPopup(window, initData.value, initData.obj, initData.new_value); - break; - case 'delete': - opener.dismissDeleteRelatedObjectPopup(window, initData.value); - break; - default: - opener.dismissAddRelatedObjectPopup(window, initData.value, initData.obj); - break; - } -} diff --git a/staticfiles/admin/js/prepopulate.js b/staticfiles/admin/js/prepopulate.js deleted file mode 100644 index 89e95ab..0000000 --- a/staticfiles/admin/js/prepopulate.js +++ /dev/null @@ -1,43 +0,0 @@ -/*global URLify*/ -'use strict'; -{ - const $ = django.jQuery; - $.fn.prepopulate = function(dependencies, maxLength, allowUnicode) { - /* - Depends on urlify.js - Populates a selected field with the values of the dependent fields, - URLifies and shortens the string. - dependencies - array of dependent fields ids - maxLength - maximum length of the URLify'd string - allowUnicode - Unicode support of the URLify'd string - */ - return this.each(function() { - const prepopulatedField = $(this); - - const populate = function() { - // Bail if the field's value has been changed by the user - if (prepopulatedField.data('_changed')) { - return; - } - - const values = []; - $.each(dependencies, function(i, field) { - field = $(field); - if (field.val().length > 0) { - values.push(field.val()); - } - }); - prepopulatedField.val(URLify(values.join(' '), maxLength, allowUnicode)); - }; - - prepopulatedField.data('_changed', false); - prepopulatedField.on('change', function() { - prepopulatedField.data('_changed', true); - }); - - if (!prepopulatedField.val()) { - $(dependencies.join(',')).on('keyup change focus', populate); - } - }); - }; -} diff --git a/staticfiles/admin/js/prepopulate_init.js b/staticfiles/admin/js/prepopulate_init.js deleted file mode 100644 index a58841f..0000000 --- a/staticfiles/admin/js/prepopulate_init.js +++ /dev/null @@ -1,15 +0,0 @@ -'use strict'; -{ - const $ = django.jQuery; - const fields = $('#django-admin-prepopulated-fields-constants').data('prepopulatedFields'); - $.each(fields, function(index, field) { - $( - '.empty-form .form-row .field-' + field.name + - ', .empty-form.form-row .field-' + field.name + - ', .empty-form .form-row.field-' + field.name - ).addClass('prepopulated_field'); - $(field.id).data('dependency_list', field.dependency_list).prepopulate( - field.dependency_ids, field.maxLength, field.allowUnicode - ); - }); -} diff --git a/staticfiles/admin/js/theme.js b/staticfiles/admin/js/theme.js deleted file mode 100644 index e79d375..0000000 --- a/staticfiles/admin/js/theme.js +++ /dev/null @@ -1,51 +0,0 @@ -'use strict'; -{ - function setTheme(mode) { - if (mode !== "light" && mode !== "dark" && mode !== "auto") { - console.error(`Got invalid theme mode: ${mode}. Resetting to auto.`); - mode = "auto"; - } - document.documentElement.dataset.theme = mode; - localStorage.setItem("theme", mode); - } - - function cycleTheme() { - const currentTheme = localStorage.getItem("theme") || "auto"; - const prefersDark = window.matchMedia("(prefers-color-scheme: dark)").matches; - - if (prefersDark) { - // Auto (dark) -> Light -> Dark - if (currentTheme === "auto") { - setTheme("light"); - } else if (currentTheme === "light") { - setTheme("dark"); - } else { - setTheme("auto"); - } - } else { - // Auto (light) -> Dark -> Light - if (currentTheme === "auto") { - setTheme("dark"); - } else if (currentTheme === "dark") { - setTheme("light"); - } else { - setTheme("auto"); - } - } - } - - function initTheme() { - // set theme defined in localStorage if there is one, or fallback to auto mode - const currentTheme = localStorage.getItem("theme"); - currentTheme ? setTheme(currentTheme) : setTheme("auto"); - } - - window.addEventListener('load', function(_) { - const buttons = document.getElementsByClassName("theme-toggle"); - Array.from(buttons).forEach((btn) => { - btn.addEventListener("click", cycleTheme); - }); - }); - - initTheme(); -} diff --git a/staticfiles/admin/js/unusable_password_field.js b/staticfiles/admin/js/unusable_password_field.js deleted file mode 100644 index ec26238..0000000 --- a/staticfiles/admin/js/unusable_password_field.js +++ /dev/null @@ -1,29 +0,0 @@ -"use strict"; -// Fallback JS for browsers which do not support :has selector used in -// admin/css/unusable_password_fields.css -// Remove file once all supported browsers support :has selector -try { - // If browser does not support :has selector this will raise an error - document.querySelector("form:has(input)"); -} catch (error) { - console.log("Defaulting to javascript for usable password form management: " + error); - // JS replacement for unsupported :has selector - document.querySelectorAll('input[name="usable_password"]').forEach(option => { - option.addEventListener('change', function() { - const usablePassword = (this.value === "true" ? this.checked : !this.checked); - const submit1 = document.querySelector('input[type="submit"].set-password'); - const submit2 = document.querySelector('input[type="submit"].unset-password'); - const messages = document.querySelector('#id_unusable_warning'); - document.getElementById('id_password1').closest('.form-row').hidden = !usablePassword; - document.getElementById('id_password2').closest('.form-row').hidden = !usablePassword; - if (messages) { - messages.hidden = usablePassword; - } - if (submit1 && submit2) { - submit1.hidden = !usablePassword; - submit2.hidden = usablePassword; - } - }); - option.dispatchEvent(new Event('change')); - }); -} diff --git a/staticfiles/admin/js/urlify.js b/staticfiles/admin/js/urlify.js deleted file mode 100644 index 9fc0409..0000000 --- a/staticfiles/admin/js/urlify.js +++ /dev/null @@ -1,169 +0,0 @@ -/*global XRegExp*/ -'use strict'; -{ - const LATIN_MAP = { - 'À': 'A', 'Á': 'A', 'Â': 'A', 'Ã': 'A', 'Ä': 'A', 'Å': 'A', 'Æ': 'AE', - 'Ç': 'C', 'È': 'E', 'É': 'E', 'Ê': 'E', 'Ë': 'E', 'Ì': 'I', 'Í': 'I', - 'Î': 'I', 'Ï': 'I', 'Ð': 'D', 'Ñ': 'N', 'Ò': 'O', 'Ó': 'O', 'Ô': 'O', - 'Õ': 'O', 'Ö': 'O', 'Ő': 'O', 'Ø': 'O', 'Ù': 'U', 'Ú': 'U', 'Û': 'U', - 'Ü': 'U', 'Ű': 'U', 'Ý': 'Y', 'Þ': 'TH', 'Ÿ': 'Y', 'ß': 'ss', 'à': 'a', - 'á': 'a', 'â': 'a', 'ã': 'a', 'ä': 'a', 'å': 'a', 'æ': 'ae', 'ç': 'c', - 'è': 'e', 'é': 'e', 'ê': 'e', 'ë': 'e', 'ì': 'i', 'í': 'i', 'î': 'i', - 'ï': 'i', 'ð': 'd', 'ñ': 'n', 'ò': 'o', 'ó': 'o', 'ô': 'o', 'õ': 'o', - 'ö': 'o', 'ő': 'o', 'ø': 'o', 'ù': 'u', 'ú': 'u', 'û': 'u', 'ü': 'u', - 'ű': 'u', 'ý': 'y', 'þ': 'th', 'ÿ': 'y' - }; - const LATIN_SYMBOLS_MAP = { - '©': '(c)' - }; - const GREEK_MAP = { - 'α': 'a', 'β': 'b', 'γ': 'g', 'δ': 'd', 'ε': 'e', 'ζ': 'z', 'η': 'h', - 'θ': '8', 'ι': 'i', 'κ': 'k', 'λ': 'l', 'μ': 'm', 'ν': 'n', 'ξ': '3', - 'ο': 'o', 'π': 'p', 'ρ': 'r', 'σ': 's', 'τ': 't', 'υ': 'y', 'φ': 'f', - 'χ': 'x', 'ψ': 'ps', 'ω': 'w', 'ά': 'a', 'έ': 'e', 'ί': 'i', 'ό': 'o', - 'ύ': 'y', 'ή': 'h', 'ώ': 'w', 'ς': 's', 'ϊ': 'i', 'ΰ': 'y', 'ϋ': 'y', - 'ΐ': 'i', 'Α': 'A', 'Β': 'B', 'Γ': 'G', 'Δ': 'D', 'Ε': 'E', 'Ζ': 'Z', - 'Η': 'H', 'Θ': '8', 'Ι': 'I', 'Κ': 'K', 'Λ': 'L', 'Μ': 'M', 'Ν': 'N', - 'Ξ': '3', 'Ο': 'O', 'Π': 'P', 'Ρ': 'R', 'Σ': 'S', 'Τ': 'T', 'Υ': 'Y', - 'Φ': 'F', 'Χ': 'X', 'Ψ': 'PS', 'Ω': 'W', 'Ά': 'A', 'Έ': 'E', 'Ί': 'I', - 'Ό': 'O', 'Ύ': 'Y', 'Ή': 'H', 'Ώ': 'W', 'Ϊ': 'I', 'Ϋ': 'Y' - }; - const TURKISH_MAP = { - 'ş': 's', 'Ş': 'S', 'ı': 'i', 'İ': 'I', 'ç': 'c', 'Ç': 'C', 'ü': 'u', - 'Ü': 'U', 'ö': 'o', 'Ö': 'O', 'ğ': 'g', 'Ğ': 'G' - }; - const ROMANIAN_MAP = { - 'ă': 'a', 'î': 'i', 'ș': 's', 'ț': 't', 'â': 'a', - 'Ă': 'A', 'Î': 'I', 'Ș': 'S', 'Ț': 'T', 'Â': 'A' - }; - const RUSSIAN_MAP = { - 'а': 'a', 'б': 'b', 'в': 'v', 'г': 'g', 'д': 'd', 'е': 'e', 'ё': 'yo', - 'ж': 'zh', 'з': 'z', 'и': 'i', 'й': 'j', 'к': 'k', 'л': 'l', 'м': 'm', - 'н': 'n', 'о': 'o', 'п': 'p', 'р': 'r', 'с': 's', 'т': 't', 'у': 'u', - 'ф': 'f', 'х': 'h', 'ц': 'c', 'ч': 'ch', 'ш': 'sh', 'щ': 'sh', 'ъ': '', - 'ы': 'y', 'ь': '', 'э': 'e', 'ю': 'yu', 'я': 'ya', - 'А': 'A', 'Б': 'B', 'В': 'V', 'Г': 'G', 'Д': 'D', 'Е': 'E', 'Ё': 'Yo', - 'Ж': 'Zh', 'З': 'Z', 'И': 'I', 'Й': 'J', 'К': 'K', 'Л': 'L', 'М': 'M', - 'Н': 'N', 'О': 'O', 'П': 'P', 'Р': 'R', 'С': 'S', 'Т': 'T', 'У': 'U', - 'Ф': 'F', 'Х': 'H', 'Ц': 'C', 'Ч': 'Ch', 'Ш': 'Sh', 'Щ': 'Sh', 'Ъ': '', - 'Ы': 'Y', 'Ь': '', 'Э': 'E', 'Ю': 'Yu', 'Я': 'Ya' - }; - const UKRAINIAN_MAP = { - 'Є': 'Ye', 'І': 'I', 'Ї': 'Yi', 'Ґ': 'G', 'є': 'ye', 'і': 'i', - 'ї': 'yi', 'ґ': 'g' - }; - const CZECH_MAP = { - 'č': 'c', 'ď': 'd', 'ě': 'e', 'ň': 'n', 'ř': 'r', 'š': 's', 'ť': 't', - 'ů': 'u', 'ž': 'z', 'Č': 'C', 'Ď': 'D', 'Ě': 'E', 'Ň': 'N', 'Ř': 'R', - 'Š': 'S', 'Ť': 'T', 'Ů': 'U', 'Ž': 'Z' - }; - const SLOVAK_MAP = { - 'á': 'a', 'ä': 'a', 'č': 'c', 'ď': 'd', 'é': 'e', 'í': 'i', 'ľ': 'l', - 'ĺ': 'l', 'ň': 'n', 'ó': 'o', 'ô': 'o', 'ŕ': 'r', 'š': 's', 'ť': 't', - 'ú': 'u', 'ý': 'y', 'ž': 'z', - 'Á': 'a', 'Ä': 'A', 'Č': 'C', 'Ď': 'D', 'É': 'E', 'Í': 'I', 'Ľ': 'L', - 'Ĺ': 'L', 'Ň': 'N', 'Ó': 'O', 'Ô': 'O', 'Ŕ': 'R', 'Š': 'S', 'Ť': 'T', - 'Ú': 'U', 'Ý': 'Y', 'Ž': 'Z' - }; - const POLISH_MAP = { - 'ą': 'a', 'ć': 'c', 'ę': 'e', 'ł': 'l', 'ń': 'n', 'ó': 'o', 'ś': 's', - 'ź': 'z', 'ż': 'z', - 'Ą': 'A', 'Ć': 'C', 'Ę': 'E', 'Ł': 'L', 'Ń': 'N', 'Ó': 'O', 'Ś': 'S', - 'Ź': 'Z', 'Ż': 'Z' - }; - const LATVIAN_MAP = { - 'ā': 'a', 'č': 'c', 'ē': 'e', 'ģ': 'g', 'ī': 'i', 'ķ': 'k', 'ļ': 'l', - 'ņ': 'n', 'š': 's', 'ū': 'u', 'ž': 'z', - 'Ā': 'A', 'Č': 'C', 'Ē': 'E', 'Ģ': 'G', 'Ī': 'I', 'Ķ': 'K', 'Ļ': 'L', - 'Ņ': 'N', 'Š': 'S', 'Ū': 'U', 'Ž': 'Z' - }; - const ARABIC_MAP = { - 'أ': 'a', 'ب': 'b', 'ت': 't', 'ث': 'th', 'ج': 'g', 'ح': 'h', 'خ': 'kh', 'د': 'd', - 'ذ': 'th', 'ر': 'r', 'ز': 'z', 'س': 's', 'ش': 'sh', 'ص': 's', 'ض': 'd', 'ط': 't', - 'ظ': 'th', 'ع': 'aa', 'غ': 'gh', 'ف': 'f', 'ق': 'k', 'ك': 'k', 'ل': 'l', 'م': 'm', - 'ن': 'n', 'ه': 'h', 'و': 'o', 'ي': 'y' - }; - const LITHUANIAN_MAP = { - 'ą': 'a', 'č': 'c', 'ę': 'e', 'ė': 'e', 'į': 'i', 'š': 's', 'ų': 'u', - 'ū': 'u', 'ž': 'z', - 'Ą': 'A', 'Č': 'C', 'Ę': 'E', 'Ė': 'E', 'Į': 'I', 'Š': 'S', 'Ų': 'U', - 'Ū': 'U', 'Ž': 'Z' - }; - const SERBIAN_MAP = { - 'ђ': 'dj', 'ј': 'j', 'љ': 'lj', 'њ': 'nj', 'ћ': 'c', 'џ': 'dz', - 'đ': 'dj', 'Ђ': 'Dj', 'Ј': 'j', 'Љ': 'Lj', 'Њ': 'Nj', 'Ћ': 'C', - 'Џ': 'Dz', 'Đ': 'Dj' - }; - const AZERBAIJANI_MAP = { - 'ç': 'c', 'ə': 'e', 'ğ': 'g', 'ı': 'i', 'ö': 'o', 'ş': 's', 'ü': 'u', - 'Ç': 'C', 'Ə': 'E', 'Ğ': 'G', 'İ': 'I', 'Ö': 'O', 'Ş': 'S', 'Ü': 'U' - }; - const GEORGIAN_MAP = { - 'ა': 'a', 'ბ': 'b', 'გ': 'g', 'დ': 'd', 'ე': 'e', 'ვ': 'v', 'ზ': 'z', - 'თ': 't', 'ი': 'i', 'კ': 'k', 'ლ': 'l', 'მ': 'm', 'ნ': 'n', 'ო': 'o', - 'პ': 'p', 'ჟ': 'j', 'რ': 'r', 'ს': 's', 'ტ': 't', 'უ': 'u', 'ფ': 'f', - 'ქ': 'q', 'ღ': 'g', 'ყ': 'y', 'შ': 'sh', 'ჩ': 'ch', 'ც': 'c', 'ძ': 'dz', - 'წ': 'w', 'ჭ': 'ch', 'ხ': 'x', 'ჯ': 'j', 'ჰ': 'h' - }; - - const ALL_DOWNCODE_MAPS = [ - LATIN_MAP, - LATIN_SYMBOLS_MAP, - GREEK_MAP, - TURKISH_MAP, - ROMANIAN_MAP, - RUSSIAN_MAP, - UKRAINIAN_MAP, - CZECH_MAP, - SLOVAK_MAP, - POLISH_MAP, - LATVIAN_MAP, - ARABIC_MAP, - LITHUANIAN_MAP, - SERBIAN_MAP, - AZERBAIJANI_MAP, - GEORGIAN_MAP - ]; - - const Downcoder = { - 'Initialize': function() { - if (Downcoder.map) { // already made - return; - } - Downcoder.map = {}; - for (const lookup of ALL_DOWNCODE_MAPS) { - Object.assign(Downcoder.map, lookup); - } - Downcoder.regex = new RegExp(Object.keys(Downcoder.map).join('|'), 'g'); - } - }; - - function downcode(slug) { - Downcoder.Initialize(); - return slug.replace(Downcoder.regex, function(m) { - return Downcoder.map[m]; - }); - } - - - function URLify(s, num_chars, allowUnicode) { - // changes, e.g., "Petty theft" to "petty-theft" - if (!allowUnicode) { - s = downcode(s); - } - s = s.toLowerCase(); // convert to lowercase - // if downcode doesn't hit, the char will be stripped here - if (allowUnicode) { - // Keep Unicode letters including both lowercase and uppercase - // characters, whitespace, and dash; remove other characters. - s = XRegExp.replace(s, XRegExp('[^-_\\p{L}\\p{N}\\s]', 'g'), ''); - } else { - s = s.replace(/[^-\w\s]/g, ''); // remove unneeded chars - } - s = s.replace(/^\s+|\s+$/g, ''); // trim leading/trailing spaces - s = s.replace(/[-\s]+/g, '-'); // convert spaces to hyphens - s = s.substring(0, num_chars); // trim to first num_chars chars - return s.replace(/-+$/g, ''); // trim any trailing hyphens - } - window.URLify = URLify; -} diff --git a/staticfiles/admin/js/vendor/jquery/LICENSE.txt b/staticfiles/admin/js/vendor/jquery/LICENSE.txt deleted file mode 100644 index f642c3f..0000000 --- a/staticfiles/admin/js/vendor/jquery/LICENSE.txt +++ /dev/null @@ -1,20 +0,0 @@ -Copyright OpenJS Foundation and other contributors, https://openjsf.org/ - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/staticfiles/admin/js/vendor/jquery/jquery.js b/staticfiles/admin/js/vendor/jquery/jquery.js deleted file mode 100644 index 1a86433..0000000 --- a/staticfiles/admin/js/vendor/jquery/jquery.js +++ /dev/null @@ -1,10716 +0,0 @@ -/*! - * jQuery JavaScript Library v3.7.1 - * https://jquery.com/ - * - * Copyright OpenJS Foundation and other contributors - * Released under the MIT license - * https://jquery.org/license - * - * Date: 2023-08-28T13:37Z - */ -( function( global, factory ) { - - "use strict"; - - if ( typeof module === "object" && typeof module.exports === "object" ) { - - // For CommonJS and CommonJS-like environments where a proper `window` - // is present, execute the factory and get jQuery. - // For environments that do not have a `window` with a `document` - // (such as Node.js), expose a factory as module.exports. - // This accentuates the need for the creation of a real `window`. - // e.g. var jQuery = require("jquery")(window); - // See ticket trac-14549 for more info. - module.exports = global.document ? - factory( global, true ) : - function( w ) { - if ( !w.document ) { - throw new Error( "jQuery requires a window with a document" ); - } - return factory( w ); - }; - } else { - factory( global ); - } - -// Pass this if window is not defined yet -} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) { - -// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1 -// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode -// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common -// enough that all such attempts are guarded in a try block. -"use strict"; - -var arr = []; - -var getProto = Object.getPrototypeOf; - -var slice = arr.slice; - -var flat = arr.flat ? function( array ) { - return arr.flat.call( array ); -} : function( array ) { - return arr.concat.apply( [], array ); -}; - - -var push = arr.push; - -var indexOf = arr.indexOf; - -var class2type = {}; - -var toString = class2type.toString; - -var hasOwn = class2type.hasOwnProperty; - -var fnToString = hasOwn.toString; - -var ObjectFunctionString = fnToString.call( Object ); - -var support = {}; - -var isFunction = function isFunction( obj ) { - - // Support: Chrome <=57, Firefox <=52 - // In some browsers, typeof returns "function" for HTML elements - // (i.e., `typeof document.createElement( "object" ) === "function"`). - // We don't want to classify *any* DOM node as a function. - // Support: QtWeb <=3.8.5, WebKit <=534.34, wkhtmltopdf tool <=0.12.5 - // Plus for old WebKit, typeof returns "function" for HTML collections - // (e.g., `typeof document.getElementsByTagName("div") === "function"`). (gh-4756) - return typeof obj === "function" && typeof obj.nodeType !== "number" && - typeof obj.item !== "function"; - }; - - -var isWindow = function isWindow( obj ) { - return obj != null && obj === obj.window; - }; - - -var document = window.document; - - - - var preservedScriptAttributes = { - type: true, - src: true, - nonce: true, - noModule: true - }; - - function DOMEval( code, node, doc ) { - doc = doc || document; - - var i, val, - script = doc.createElement( "script" ); - - script.text = code; - if ( node ) { - for ( i in preservedScriptAttributes ) { - - // Support: Firefox 64+, Edge 18+ - // Some browsers don't support the "nonce" property on scripts. - // On the other hand, just using `getAttribute` is not enough as - // the `nonce` attribute is reset to an empty string whenever it - // becomes browsing-context connected. - // See https://github.com/whatwg/html/issues/2369 - // See https://html.spec.whatwg.org/#nonce-attributes - // The `node.getAttribute` check was added for the sake of - // `jQuery.globalEval` so that it can fake a nonce-containing node - // via an object. - val = node[ i ] || node.getAttribute && node.getAttribute( i ); - if ( val ) { - script.setAttribute( i, val ); - } - } - } - doc.head.appendChild( script ).parentNode.removeChild( script ); - } - - -function toType( obj ) { - if ( obj == null ) { - return obj + ""; - } - - // Support: Android <=2.3 only (functionish RegExp) - return typeof obj === "object" || typeof obj === "function" ? - class2type[ toString.call( obj ) ] || "object" : - typeof obj; -} -/* global Symbol */ -// Defining this global in .eslintrc.json would create a danger of using the global -// unguarded in another place, it seems safer to define global only for this module - - - -var version = "3.7.1", - - rhtmlSuffix = /HTML$/i, - - // Define a local copy of jQuery - jQuery = function( selector, context ) { - - // The jQuery object is actually just the init constructor 'enhanced' - // Need init if jQuery is called (just allow error to be thrown if not included) - return new jQuery.fn.init( selector, context ); - }; - -jQuery.fn = jQuery.prototype = { - - // The current version of jQuery being used - jquery: version, - - constructor: jQuery, - - // The default length of a jQuery object is 0 - length: 0, - - toArray: function() { - return slice.call( this ); - }, - - // Get the Nth element in the matched element set OR - // Get the whole matched element set as a clean array - get: function( num ) { - - // Return all the elements in a clean array - if ( num == null ) { - return slice.call( this ); - } - - // Return just the one element from the set - return num < 0 ? this[ num + this.length ] : this[ num ]; - }, - - // Take an array of elements and push it onto the stack - // (returning the new matched element set) - pushStack: function( elems ) { - - // Build a new jQuery matched element set - var ret = jQuery.merge( this.constructor(), elems ); - - // Add the old object onto the stack (as a reference) - ret.prevObject = this; - - // Return the newly-formed element set - return ret; - }, - - // Execute a callback for every element in the matched set. - each: function( callback ) { - return jQuery.each( this, callback ); - }, - - map: function( callback ) { - return this.pushStack( jQuery.map( this, function( elem, i ) { - return callback.call( elem, i, elem ); - } ) ); - }, - - slice: function() { - return this.pushStack( slice.apply( this, arguments ) ); - }, - - first: function() { - return this.eq( 0 ); - }, - - last: function() { - return this.eq( -1 ); - }, - - even: function() { - return this.pushStack( jQuery.grep( this, function( _elem, i ) { - return ( i + 1 ) % 2; - } ) ); - }, - - odd: function() { - return this.pushStack( jQuery.grep( this, function( _elem, i ) { - return i % 2; - } ) ); - }, - - eq: function( i ) { - var len = this.length, - j = +i + ( i < 0 ? len : 0 ); - return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] ); - }, - - end: function() { - return this.prevObject || this.constructor(); - }, - - // For internal use only. - // Behaves like an Array's method, not like a jQuery method. - push: push, - sort: arr.sort, - splice: arr.splice -}; - -jQuery.extend = jQuery.fn.extend = function() { - var options, name, src, copy, copyIsArray, clone, - target = arguments[ 0 ] || {}, - i = 1, - length = arguments.length, - deep = false; - - // Handle a deep copy situation - if ( typeof target === "boolean" ) { - deep = target; - - // Skip the boolean and the target - target = arguments[ i ] || {}; - i++; - } - - // Handle case when target is a string or something (possible in deep copy) - if ( typeof target !== "object" && !isFunction( target ) ) { - target = {}; - } - - // Extend jQuery itself if only one argument is passed - if ( i === length ) { - target = this; - i--; - } - - for ( ; i < length; i++ ) { - - // Only deal with non-null/undefined values - if ( ( options = arguments[ i ] ) != null ) { - - // Extend the base object - for ( name in options ) { - copy = options[ name ]; - - // Prevent Object.prototype pollution - // Prevent never-ending loop - if ( name === "__proto__" || target === copy ) { - continue; - } - - // Recurse if we're merging plain objects or arrays - if ( deep && copy && ( jQuery.isPlainObject( copy ) || - ( copyIsArray = Array.isArray( copy ) ) ) ) { - src = target[ name ]; - - // Ensure proper type for the source value - if ( copyIsArray && !Array.isArray( src ) ) { - clone = []; - } else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) { - clone = {}; - } else { - clone = src; - } - copyIsArray = false; - - // Never move original objects, clone them - target[ name ] = jQuery.extend( deep, clone, copy ); - - // Don't bring in undefined values - } else if ( copy !== undefined ) { - target[ name ] = copy; - } - } - } - } - - // Return the modified object - return target; -}; - -jQuery.extend( { - - // Unique for each copy of jQuery on the page - expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), - - // Assume jQuery is ready without the ready module - isReady: true, - - error: function( msg ) { - throw new Error( msg ); - }, - - noop: function() {}, - - isPlainObject: function( obj ) { - var proto, Ctor; - - // Detect obvious negatives - // Use toString instead of jQuery.type to catch host objects - if ( !obj || toString.call( obj ) !== "[object Object]" ) { - return false; - } - - proto = getProto( obj ); - - // Objects with no prototype (e.g., `Object.create( null )`) are plain - if ( !proto ) { - return true; - } - - // Objects with prototype are plain iff they were constructed by a global Object function - Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor; - return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString; - }, - - isEmptyObject: function( obj ) { - var name; - - for ( name in obj ) { - return false; - } - return true; - }, - - // Evaluates a script in a provided context; falls back to the global one - // if not specified. - globalEval: function( code, options, doc ) { - DOMEval( code, { nonce: options && options.nonce }, doc ); - }, - - each: function( obj, callback ) { - var length, i = 0; - - if ( isArrayLike( obj ) ) { - length = obj.length; - for ( ; i < length; i++ ) { - if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { - break; - } - } - } else { - for ( i in obj ) { - if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { - break; - } - } - } - - return obj; - }, - - - // Retrieve the text value of an array of DOM nodes - text: function( elem ) { - var node, - ret = "", - i = 0, - nodeType = elem.nodeType; - - if ( !nodeType ) { - - // If no nodeType, this is expected to be an array - while ( ( node = elem[ i++ ] ) ) { - - // Do not traverse comment nodes - ret += jQuery.text( node ); - } - } - if ( nodeType === 1 || nodeType === 11 ) { - return elem.textContent; - } - if ( nodeType === 9 ) { - return elem.documentElement.textContent; - } - if ( nodeType === 3 || nodeType === 4 ) { - return elem.nodeValue; - } - - // Do not include comment or processing instruction nodes - - return ret; - }, - - // results is for internal usage only - makeArray: function( arr, results ) { - var ret = results || []; - - if ( arr != null ) { - if ( isArrayLike( Object( arr ) ) ) { - jQuery.merge( ret, - typeof arr === "string" ? - [ arr ] : arr - ); - } else { - push.call( ret, arr ); - } - } - - return ret; - }, - - inArray: function( elem, arr, i ) { - return arr == null ? -1 : indexOf.call( arr, elem, i ); - }, - - isXMLDoc: function( elem ) { - var namespace = elem && elem.namespaceURI, - docElem = elem && ( elem.ownerDocument || elem ).documentElement; - - // Assume HTML when documentElement doesn't yet exist, such as inside - // document fragments. - return !rhtmlSuffix.test( namespace || docElem && docElem.nodeName || "HTML" ); - }, - - // Support: Android <=4.0 only, PhantomJS 1 only - // push.apply(_, arraylike) throws on ancient WebKit - merge: function( first, second ) { - var len = +second.length, - j = 0, - i = first.length; - - for ( ; j < len; j++ ) { - first[ i++ ] = second[ j ]; - } - - first.length = i; - - return first; - }, - - grep: function( elems, callback, invert ) { - var callbackInverse, - matches = [], - i = 0, - length = elems.length, - callbackExpect = !invert; - - // Go through the array, only saving the items - // that pass the validator function - for ( ; i < length; i++ ) { - callbackInverse = !callback( elems[ i ], i ); - if ( callbackInverse !== callbackExpect ) { - matches.push( elems[ i ] ); - } - } - - return matches; - }, - - // arg is for internal usage only - map: function( elems, callback, arg ) { - var length, value, - i = 0, - ret = []; - - // Go through the array, translating each of the items to their new values - if ( isArrayLike( elems ) ) { - length = elems.length; - for ( ; i < length; i++ ) { - value = callback( elems[ i ], i, arg ); - - if ( value != null ) { - ret.push( value ); - } - } - - // Go through every key on the object, - } else { - for ( i in elems ) { - value = callback( elems[ i ], i, arg ); - - if ( value != null ) { - ret.push( value ); - } - } - } - - // Flatten any nested arrays - return flat( ret ); - }, - - // A global GUID counter for objects - guid: 1, - - // jQuery.support is not used in Core but other projects attach their - // properties to it so it needs to exist. - support: support -} ); - -if ( typeof Symbol === "function" ) { - jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ]; -} - -// Populate the class2type map -jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), - function( _i, name ) { - class2type[ "[object " + name + "]" ] = name.toLowerCase(); - } ); - -function isArrayLike( obj ) { - - // Support: real iOS 8.2 only (not reproducible in simulator) - // `in` check used to prevent JIT error (gh-2145) - // hasOwn isn't used here due to false negatives - // regarding Nodelist length in IE - var length = !!obj && "length" in obj && obj.length, - type = toType( obj ); - - if ( isFunction( obj ) || isWindow( obj ) ) { - return false; - } - - return type === "array" || length === 0 || - typeof length === "number" && length > 0 && ( length - 1 ) in obj; -} - - -function nodeName( elem, name ) { - - return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); - -} -var pop = arr.pop; - - -var sort = arr.sort; - - -var splice = arr.splice; - - -var whitespace = "[\\x20\\t\\r\\n\\f]"; - - -var rtrimCSS = new RegExp( - "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", - "g" -); - - - - -// Note: an element does not contain itself -jQuery.contains = function( a, b ) { - var bup = b && b.parentNode; - - return a === bup || !!( bup && bup.nodeType === 1 && ( - - // Support: IE 9 - 11+ - // IE doesn't have `contains` on SVG. - a.contains ? - a.contains( bup ) : - a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 - ) ); -}; - - - - -// CSS string/identifier serialization -// https://drafts.csswg.org/cssom/#common-serializing-idioms -var rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g; - -function fcssescape( ch, asCodePoint ) { - if ( asCodePoint ) { - - // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER - if ( ch === "\0" ) { - return "\uFFFD"; - } - - // Control characters and (dependent upon position) numbers get escaped as code points - return ch.slice( 0, -1 ) + "\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " "; - } - - // Other potentially-special ASCII characters get backslash-escaped - return "\\" + ch; -} - -jQuery.escapeSelector = function( sel ) { - return ( sel + "" ).replace( rcssescape, fcssescape ); -}; - - - - -var preferredDoc = document, - pushNative = push; - -( function() { - -var i, - Expr, - outermostContext, - sortInput, - hasDuplicate, - push = pushNative, - - // Local document vars - document, - documentElement, - documentIsHTML, - rbuggyQSA, - matches, - - // Instance-specific data - expando = jQuery.expando, - dirruns = 0, - done = 0, - classCache = createCache(), - tokenCache = createCache(), - compilerCache = createCache(), - nonnativeSelectorCache = createCache(), - sortOrder = function( a, b ) { - if ( a === b ) { - hasDuplicate = true; - } - return 0; - }, - - booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|" + - "loop|multiple|open|readonly|required|scoped", - - // Regular expressions - - // https://www.w3.org/TR/css-syntax-3/#ident-token-diagram - identifier = "(?:\\\\[\\da-fA-F]{1,6}" + whitespace + - "?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+", - - // Attribute selectors: https://www.w3.org/TR/selectors/#attribute-selectors - attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + - - // Operator (capture 2) - "*([*^$|!~]?=)" + whitespace + - - // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]" - "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + - whitespace + "*\\]", - - pseudos = ":(" + identifier + ")(?:\\((" + - - // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: - // 1. quoted (capture 3; capture 4 or capture 5) - "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + - - // 2. simple (capture 6) - "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + - - // 3. anything else (capture 2) - ".*" + - ")\\)|)", - - // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter - rwhitespace = new RegExp( whitespace + "+", "g" ), - - rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), - rleadingCombinator = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + - whitespace + "*" ), - rdescend = new RegExp( whitespace + "|>" ), - - rpseudo = new RegExp( pseudos ), - ridentifier = new RegExp( "^" + identifier + "$" ), - - matchExpr = { - ID: new RegExp( "^#(" + identifier + ")" ), - CLASS: new RegExp( "^\\.(" + identifier + ")" ), - TAG: new RegExp( "^(" + identifier + "|[*])" ), - ATTR: new RegExp( "^" + attributes ), - PSEUDO: new RegExp( "^" + pseudos ), - CHILD: new RegExp( - "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + - whitespace + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + - whitespace + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), - bool: new RegExp( "^(?:" + booleans + ")$", "i" ), - - // For use in libraries implementing .is() - // We use this for POS matching in `select` - needsContext: new RegExp( "^" + whitespace + - "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace + - "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) - }, - - rinputs = /^(?:input|select|textarea|button)$/i, - rheader = /^h\d$/i, - - // Easily-parseable/retrievable ID or TAG or CLASS selectors - rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, - - rsibling = /[+~]/, - - // CSS escapes - // https://www.w3.org/TR/CSS21/syndata.html#escaped-characters - runescape = new RegExp( "\\\\[\\da-fA-F]{1,6}" + whitespace + - "?|\\\\([^\\r\\n\\f])", "g" ), - funescape = function( escape, nonHex ) { - var high = "0x" + escape.slice( 1 ) - 0x10000; - - if ( nonHex ) { - - // Strip the backslash prefix from a non-hex escape sequence - return nonHex; - } - - // Replace a hexadecimal escape sequence with the encoded Unicode code point - // Support: IE <=11+ - // For values outside the Basic Multilingual Plane (BMP), manually construct a - // surrogate pair - return high < 0 ? - String.fromCharCode( high + 0x10000 ) : - String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); - }, - - // Used for iframes; see `setDocument`. - // Support: IE 9 - 11+, Edge 12 - 18+ - // Removing the function wrapper causes a "Permission Denied" - // error in IE/Edge. - unloadHandler = function() { - setDocument(); - }, - - inDisabledFieldset = addCombinator( - function( elem ) { - return elem.disabled === true && nodeName( elem, "fieldset" ); - }, - { dir: "parentNode", next: "legend" } - ); - -// Support: IE <=9 only -// Accessing document.activeElement can throw unexpectedly -// https://bugs.jquery.com/ticket/13393 -function safeActiveElement() { - try { - return document.activeElement; - } catch ( err ) { } -} - -// Optimize for push.apply( _, NodeList ) -try { - push.apply( - ( arr = slice.call( preferredDoc.childNodes ) ), - preferredDoc.childNodes - ); - - // Support: Android <=4.0 - // Detect silently failing push.apply - // eslint-disable-next-line no-unused-expressions - arr[ preferredDoc.childNodes.length ].nodeType; -} catch ( e ) { - push = { - apply: function( target, els ) { - pushNative.apply( target, slice.call( els ) ); - }, - call: function( target ) { - pushNative.apply( target, slice.call( arguments, 1 ) ); - } - }; -} - -function find( selector, context, results, seed ) { - var m, i, elem, nid, match, groups, newSelector, - newContext = context && context.ownerDocument, - - // nodeType defaults to 9, since context defaults to document - nodeType = context ? context.nodeType : 9; - - results = results || []; - - // Return early from calls with invalid selector or context - if ( typeof selector !== "string" || !selector || - nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { - - return results; - } - - // Try to shortcut find operations (as opposed to filters) in HTML documents - if ( !seed ) { - setDocument( context ); - context = context || document; - - if ( documentIsHTML ) { - - // If the selector is sufficiently simple, try using a "get*By*" DOM method - // (excepting DocumentFragment context, where the methods don't exist) - if ( nodeType !== 11 && ( match = rquickExpr.exec( selector ) ) ) { - - // ID selector - if ( ( m = match[ 1 ] ) ) { - - // Document context - if ( nodeType === 9 ) { - if ( ( elem = context.getElementById( m ) ) ) { - - // Support: IE 9 only - // getElementById can match elements by name instead of ID - if ( elem.id === m ) { - push.call( results, elem ); - return results; - } - } else { - return results; - } - - // Element context - } else { - - // Support: IE 9 only - // getElementById can match elements by name instead of ID - if ( newContext && ( elem = newContext.getElementById( m ) ) && - find.contains( context, elem ) && - elem.id === m ) { - - push.call( results, elem ); - return results; - } - } - - // Type selector - } else if ( match[ 2 ] ) { - push.apply( results, context.getElementsByTagName( selector ) ); - return results; - - // Class selector - } else if ( ( m = match[ 3 ] ) && context.getElementsByClassName ) { - push.apply( results, context.getElementsByClassName( m ) ); - return results; - } - } - - // Take advantage of querySelectorAll - if ( !nonnativeSelectorCache[ selector + " " ] && - ( !rbuggyQSA || !rbuggyQSA.test( selector ) ) ) { - - newSelector = selector; - newContext = context; - - // qSA considers elements outside a scoping root when evaluating child or - // descendant combinators, which is not what we want. - // In such cases, we work around the behavior by prefixing every selector in the - // list with an ID selector referencing the scope context. - // The technique has to be used as well when a leading combinator is used - // as such selectors are not recognized by querySelectorAll. - // Thanks to Andrew Dupont for this technique. - if ( nodeType === 1 && - ( rdescend.test( selector ) || rleadingCombinator.test( selector ) ) ) { - - // Expand context for sibling selectors - newContext = rsibling.test( selector ) && testContext( context.parentNode ) || - context; - - // We can use :scope instead of the ID hack if the browser - // supports it & if we're not changing the context. - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when - // strict-comparing two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - if ( newContext != context || !support.scope ) { - - // Capture the context ID, setting it first if necessary - if ( ( nid = context.getAttribute( "id" ) ) ) { - nid = jQuery.escapeSelector( nid ); - } else { - context.setAttribute( "id", ( nid = expando ) ); - } - } - - // Prefix every selector in the list - groups = tokenize( selector ); - i = groups.length; - while ( i-- ) { - groups[ i ] = ( nid ? "#" + nid : ":scope" ) + " " + - toSelector( groups[ i ] ); - } - newSelector = groups.join( "," ); - } - - try { - push.apply( results, - newContext.querySelectorAll( newSelector ) - ); - return results; - } catch ( qsaError ) { - nonnativeSelectorCache( selector, true ); - } finally { - if ( nid === expando ) { - context.removeAttribute( "id" ); - } - } - } - } - } - - // All others - return select( selector.replace( rtrimCSS, "$1" ), context, results, seed ); -} - -/** - * Create key-value caches of limited size - * @returns {function(string, object)} Returns the Object data after storing it on itself with - * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) - * deleting the oldest entry - */ -function createCache() { - var keys = []; - - function cache( key, value ) { - - // Use (key + " ") to avoid collision with native prototype properties - // (see https://github.com/jquery/sizzle/issues/157) - if ( keys.push( key + " " ) > Expr.cacheLength ) { - - // Only keep the most recent entries - delete cache[ keys.shift() ]; - } - return ( cache[ key + " " ] = value ); - } - return cache; -} - -/** - * Mark a function for special use by jQuery selector module - * @param {Function} fn The function to mark - */ -function markFunction( fn ) { - fn[ expando ] = true; - return fn; -} - -/** - * Support testing using an element - * @param {Function} fn Passed the created element and returns a boolean result - */ -function assert( fn ) { - var el = document.createElement( "fieldset" ); - - try { - return !!fn( el ); - } catch ( e ) { - return false; - } finally { - - // Remove from its parent by default - if ( el.parentNode ) { - el.parentNode.removeChild( el ); - } - - // release memory in IE - el = null; - } -} - -/** - * Returns a function to use in pseudos for input types - * @param {String} type - */ -function createInputPseudo( type ) { - return function( elem ) { - return nodeName( elem, "input" ) && elem.type === type; - }; -} - -/** - * Returns a function to use in pseudos for buttons - * @param {String} type - */ -function createButtonPseudo( type ) { - return function( elem ) { - return ( nodeName( elem, "input" ) || nodeName( elem, "button" ) ) && - elem.type === type; - }; -} - -/** - * Returns a function to use in pseudos for :enabled/:disabled - * @param {Boolean} disabled true for :disabled; false for :enabled - */ -function createDisabledPseudo( disabled ) { - - // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable - return function( elem ) { - - // Only certain elements can match :enabled or :disabled - // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled - // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled - if ( "form" in elem ) { - - // Check for inherited disabledness on relevant non-disabled elements: - // * listed form-associated elements in a disabled fieldset - // https://html.spec.whatwg.org/multipage/forms.html#category-listed - // https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled - // * option elements in a disabled optgroup - // https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled - // All such elements have a "form" property. - if ( elem.parentNode && elem.disabled === false ) { - - // Option elements defer to a parent optgroup if present - if ( "label" in elem ) { - if ( "label" in elem.parentNode ) { - return elem.parentNode.disabled === disabled; - } else { - return elem.disabled === disabled; - } - } - - // Support: IE 6 - 11+ - // Use the isDisabled shortcut property to check for disabled fieldset ancestors - return elem.isDisabled === disabled || - - // Where there is no isDisabled, check manually - elem.isDisabled !== !disabled && - inDisabledFieldset( elem ) === disabled; - } - - return elem.disabled === disabled; - - // Try to winnow out elements that can't be disabled before trusting the disabled property. - // Some victims get caught in our net (label, legend, menu, track), but it shouldn't - // even exist on them, let alone have a boolean value. - } else if ( "label" in elem ) { - return elem.disabled === disabled; - } - - // Remaining elements are neither :enabled nor :disabled - return false; - }; -} - -/** - * Returns a function to use in pseudos for positionals - * @param {Function} fn - */ -function createPositionalPseudo( fn ) { - return markFunction( function( argument ) { - argument = +argument; - return markFunction( function( seed, matches ) { - var j, - matchIndexes = fn( [], seed.length, argument ), - i = matchIndexes.length; - - // Match elements found at the specified indexes - while ( i-- ) { - if ( seed[ ( j = matchIndexes[ i ] ) ] ) { - seed[ j ] = !( matches[ j ] = seed[ j ] ); - } - } - } ); - } ); -} - -/** - * Checks a node for validity as a jQuery selector context - * @param {Element|Object=} context - * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value - */ -function testContext( context ) { - return context && typeof context.getElementsByTagName !== "undefined" && context; -} - -/** - * Sets document-related variables once based on the current document - * @param {Element|Object} [node] An element or document object to use to set the document - * @returns {Object} Returns the current document - */ -function setDocument( node ) { - var subWindow, - doc = node ? node.ownerDocument || node : preferredDoc; - - // Return early if doc is invalid or already selected - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - if ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) { - return document; - } - - // Update global variables - document = doc; - documentElement = document.documentElement; - documentIsHTML = !jQuery.isXMLDoc( document ); - - // Support: iOS 7 only, IE 9 - 11+ - // Older browsers didn't support unprefixed `matches`. - matches = documentElement.matches || - documentElement.webkitMatchesSelector || - documentElement.msMatchesSelector; - - // Support: IE 9 - 11+, Edge 12 - 18+ - // Accessing iframe documents after unload throws "permission denied" errors - // (see trac-13936). - // Limit the fix to IE & Edge Legacy; despite Edge 15+ implementing `matches`, - // all IE 9+ and Edge Legacy versions implement `msMatchesSelector` as well. - if ( documentElement.msMatchesSelector && - - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - preferredDoc != document && - ( subWindow = document.defaultView ) && subWindow.top !== subWindow ) { - - // Support: IE 9 - 11+, Edge 12 - 18+ - subWindow.addEventListener( "unload", unloadHandler ); - } - - // Support: IE <10 - // Check if getElementById returns elements by name - // The broken getElementById methods don't pick up programmatically-set names, - // so use a roundabout getElementsByName test - support.getById = assert( function( el ) { - documentElement.appendChild( el ).id = jQuery.expando; - return !document.getElementsByName || - !document.getElementsByName( jQuery.expando ).length; - } ); - - // Support: IE 9 only - // Check to see if it's possible to do matchesSelector - // on a disconnected node. - support.disconnectedMatch = assert( function( el ) { - return matches.call( el, "*" ); - } ); - - // Support: IE 9 - 11+, Edge 12 - 18+ - // IE/Edge don't support the :scope pseudo-class. - support.scope = assert( function() { - return document.querySelectorAll( ":scope" ); - } ); - - // Support: Chrome 105 - 111 only, Safari 15.4 - 16.3 only - // Make sure the `:has()` argument is parsed unforgivingly. - // We include `*` in the test to detect buggy implementations that are - // _selectively_ forgiving (specifically when the list includes at least - // one valid selector). - // Note that we treat complete lack of support for `:has()` as if it were - // spec-compliant support, which is fine because use of `:has()` in such - // environments will fail in the qSA path and fall back to jQuery traversal - // anyway. - support.cssHas = assert( function() { - try { - document.querySelector( ":has(*,:jqfake)" ); - return false; - } catch ( e ) { - return true; - } - } ); - - // ID filter and find - if ( support.getById ) { - Expr.filter.ID = function( id ) { - var attrId = id.replace( runescape, funescape ); - return function( elem ) { - return elem.getAttribute( "id" ) === attrId; - }; - }; - Expr.find.ID = function( id, context ) { - if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { - var elem = context.getElementById( id ); - return elem ? [ elem ] : []; - } - }; - } else { - Expr.filter.ID = function( id ) { - var attrId = id.replace( runescape, funescape ); - return function( elem ) { - var node = typeof elem.getAttributeNode !== "undefined" && - elem.getAttributeNode( "id" ); - return node && node.value === attrId; - }; - }; - - // Support: IE 6 - 7 only - // getElementById is not reliable as a find shortcut - Expr.find.ID = function( id, context ) { - if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { - var node, i, elems, - elem = context.getElementById( id ); - - if ( elem ) { - - // Verify the id attribute - node = elem.getAttributeNode( "id" ); - if ( node && node.value === id ) { - return [ elem ]; - } - - // Fall back on getElementsByName - elems = context.getElementsByName( id ); - i = 0; - while ( ( elem = elems[ i++ ] ) ) { - node = elem.getAttributeNode( "id" ); - if ( node && node.value === id ) { - return [ elem ]; - } - } - } - - return []; - } - }; - } - - // Tag - Expr.find.TAG = function( tag, context ) { - if ( typeof context.getElementsByTagName !== "undefined" ) { - return context.getElementsByTagName( tag ); - - // DocumentFragment nodes don't have gEBTN - } else { - return context.querySelectorAll( tag ); - } - }; - - // Class - Expr.find.CLASS = function( className, context ) { - if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) { - return context.getElementsByClassName( className ); - } - }; - - /* QSA/matchesSelector - ---------------------------------------------------------------------- */ - - // QSA and matchesSelector support - - rbuggyQSA = []; - - // Build QSA regex - // Regex strategy adopted from Diego Perini - assert( function( el ) { - - var input; - - documentElement.appendChild( el ).innerHTML = - "" + - ""; - - // Support: iOS <=7 - 8 only - // Boolean attributes and "value" are not treated correctly in some XML documents - if ( !el.querySelectorAll( "[selected]" ).length ) { - rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); - } - - // Support: iOS <=7 - 8 only - if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) { - rbuggyQSA.push( "~=" ); - } - - // Support: iOS 8 only - // https://bugs.webkit.org/show_bug.cgi?id=136851 - // In-page `selector#id sibling-combinator selector` fails - if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) { - rbuggyQSA.push( ".#.+[+~]" ); - } - - // Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+ - // In some of the document kinds, these selectors wouldn't work natively. - // This is probably OK but for backwards compatibility we want to maintain - // handling them through jQuery traversal in jQuery 3.x. - if ( !el.querySelectorAll( ":checked" ).length ) { - rbuggyQSA.push( ":checked" ); - } - - // Support: Windows 8 Native Apps - // The type and name attributes are restricted during .innerHTML assignment - input = document.createElement( "input" ); - input.setAttribute( "type", "hidden" ); - el.appendChild( input ).setAttribute( "name", "D" ); - - // Support: IE 9 - 11+ - // IE's :disabled selector does not pick up the children of disabled fieldsets - // Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+ - // In some of the document kinds, these selectors wouldn't work natively. - // This is probably OK but for backwards compatibility we want to maintain - // handling them through jQuery traversal in jQuery 3.x. - documentElement.appendChild( el ).disabled = true; - if ( el.querySelectorAll( ":disabled" ).length !== 2 ) { - rbuggyQSA.push( ":enabled", ":disabled" ); - } - - // Support: IE 11+, Edge 15 - 18+ - // IE 11/Edge don't find elements on a `[name='']` query in some cases. - // Adding a temporary attribute to the document before the selection works - // around the issue. - // Interestingly, IE 10 & older don't seem to have the issue. - input = document.createElement( "input" ); - input.setAttribute( "name", "" ); - el.appendChild( input ); - if ( !el.querySelectorAll( "[name='']" ).length ) { - rbuggyQSA.push( "\\[" + whitespace + "*name" + whitespace + "*=" + - whitespace + "*(?:''|\"\")" ); - } - } ); - - if ( !support.cssHas ) { - - // Support: Chrome 105 - 110+, Safari 15.4 - 16.3+ - // Our regular `try-catch` mechanism fails to detect natively-unsupported - // pseudo-classes inside `:has()` (such as `:has(:contains("Foo"))`) - // in browsers that parse the `:has()` argument as a forgiving selector list. - // https://drafts.csswg.org/selectors/#relational now requires the argument - // to be parsed unforgivingly, but browsers have not yet fully adjusted. - rbuggyQSA.push( ":has" ); - } - - rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( "|" ) ); - - /* Sorting - ---------------------------------------------------------------------- */ - - // Document order sorting - sortOrder = function( a, b ) { - - // Flag for duplicate removal - if ( a === b ) { - hasDuplicate = true; - return 0; - } - - // Sort on method existence if only one input has compareDocumentPosition - var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; - if ( compare ) { - return compare; - } - - // Calculate position if both inputs belong to the same document - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - compare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ? - a.compareDocumentPosition( b ) : - - // Otherwise we know they are disconnected - 1; - - // Disconnected nodes - if ( compare & 1 || - ( !support.sortDetached && b.compareDocumentPosition( a ) === compare ) ) { - - // Choose the first element that is related to our preferred document - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - if ( a === document || a.ownerDocument == preferredDoc && - find.contains( preferredDoc, a ) ) { - return -1; - } - - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - if ( b === document || b.ownerDocument == preferredDoc && - find.contains( preferredDoc, b ) ) { - return 1; - } - - // Maintain original order - return sortInput ? - ( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) : - 0; - } - - return compare & 4 ? -1 : 1; - }; - - return document; -} - -find.matches = function( expr, elements ) { - return find( expr, null, null, elements ); -}; - -find.matchesSelector = function( elem, expr ) { - setDocument( elem ); - - if ( documentIsHTML && - !nonnativeSelectorCache[ expr + " " ] && - ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { - - try { - var ret = matches.call( elem, expr ); - - // IE 9's matchesSelector returns false on disconnected nodes - if ( ret || support.disconnectedMatch || - - // As well, disconnected nodes are said to be in a document - // fragment in IE 9 - elem.document && elem.document.nodeType !== 11 ) { - return ret; - } - } catch ( e ) { - nonnativeSelectorCache( expr, true ); - } - } - - return find( expr, document, null, [ elem ] ).length > 0; -}; - -find.contains = function( context, elem ) { - - // Set document vars if needed - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - if ( ( context.ownerDocument || context ) != document ) { - setDocument( context ); - } - return jQuery.contains( context, elem ); -}; - - -find.attr = function( elem, name ) { - - // Set document vars if needed - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - if ( ( elem.ownerDocument || elem ) != document ) { - setDocument( elem ); - } - - var fn = Expr.attrHandle[ name.toLowerCase() ], - - // Don't get fooled by Object.prototype properties (see trac-13807) - val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? - fn( elem, name, !documentIsHTML ) : - undefined; - - if ( val !== undefined ) { - return val; - } - - return elem.getAttribute( name ); -}; - -find.error = function( msg ) { - throw new Error( "Syntax error, unrecognized expression: " + msg ); -}; - -/** - * Document sorting and removing duplicates - * @param {ArrayLike} results - */ -jQuery.uniqueSort = function( results ) { - var elem, - duplicates = [], - j = 0, - i = 0; - - // Unless we *know* we can detect duplicates, assume their presence - // - // Support: Android <=4.0+ - // Testing for detecting duplicates is unpredictable so instead assume we can't - // depend on duplicate detection in all browsers without a stable sort. - hasDuplicate = !support.sortStable; - sortInput = !support.sortStable && slice.call( results, 0 ); - sort.call( results, sortOrder ); - - if ( hasDuplicate ) { - while ( ( elem = results[ i++ ] ) ) { - if ( elem === results[ i ] ) { - j = duplicates.push( i ); - } - } - while ( j-- ) { - splice.call( results, duplicates[ j ], 1 ); - } - } - - // Clear input after sorting to release objects - // See https://github.com/jquery/sizzle/pull/225 - sortInput = null; - - return results; -}; - -jQuery.fn.uniqueSort = function() { - return this.pushStack( jQuery.uniqueSort( slice.apply( this ) ) ); -}; - -Expr = jQuery.expr = { - - // Can be adjusted by the user - cacheLength: 50, - - createPseudo: markFunction, - - match: matchExpr, - - attrHandle: {}, - - find: {}, - - relative: { - ">": { dir: "parentNode", first: true }, - " ": { dir: "parentNode" }, - "+": { dir: "previousSibling", first: true }, - "~": { dir: "previousSibling" } - }, - - preFilter: { - ATTR: function( match ) { - match[ 1 ] = match[ 1 ].replace( runescape, funescape ); - - // Move the given value to match[3] whether quoted or unquoted - match[ 3 ] = ( match[ 3 ] || match[ 4 ] || match[ 5 ] || "" ) - .replace( runescape, funescape ); - - if ( match[ 2 ] === "~=" ) { - match[ 3 ] = " " + match[ 3 ] + " "; - } - - return match.slice( 0, 4 ); - }, - - CHILD: function( match ) { - - /* matches from matchExpr["CHILD"] - 1 type (only|nth|...) - 2 what (child|of-type) - 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) - 4 xn-component of xn+y argument ([+-]?\d*n|) - 5 sign of xn-component - 6 x of xn-component - 7 sign of y-component - 8 y of y-component - */ - match[ 1 ] = match[ 1 ].toLowerCase(); - - if ( match[ 1 ].slice( 0, 3 ) === "nth" ) { - - // nth-* requires argument - if ( !match[ 3 ] ) { - find.error( match[ 0 ] ); - } - - // numeric x and y parameters for Expr.filter.CHILD - // remember that false/true cast respectively to 0/1 - match[ 4 ] = +( match[ 4 ] ? - match[ 5 ] + ( match[ 6 ] || 1 ) : - 2 * ( match[ 3 ] === "even" || match[ 3 ] === "odd" ) - ); - match[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === "odd" ); - - // other types prohibit arguments - } else if ( match[ 3 ] ) { - find.error( match[ 0 ] ); - } - - return match; - }, - - PSEUDO: function( match ) { - var excess, - unquoted = !match[ 6 ] && match[ 2 ]; - - if ( matchExpr.CHILD.test( match[ 0 ] ) ) { - return null; - } - - // Accept quoted arguments as-is - if ( match[ 3 ] ) { - match[ 2 ] = match[ 4 ] || match[ 5 ] || ""; - - // Strip excess characters from unquoted arguments - } else if ( unquoted && rpseudo.test( unquoted ) && - - // Get excess from tokenize (recursively) - ( excess = tokenize( unquoted, true ) ) && - - // advance to the next closing parenthesis - ( excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length ) ) { - - // excess is a negative index - match[ 0 ] = match[ 0 ].slice( 0, excess ); - match[ 2 ] = unquoted.slice( 0, excess ); - } - - // Return only captures needed by the pseudo filter method (type and argument) - return match.slice( 0, 3 ); - } - }, - - filter: { - - TAG: function( nodeNameSelector ) { - var expectedNodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); - return nodeNameSelector === "*" ? - function() { - return true; - } : - function( elem ) { - return nodeName( elem, expectedNodeName ); - }; - }, - - CLASS: function( className ) { - var pattern = classCache[ className + " " ]; - - return pattern || - ( pattern = new RegExp( "(^|" + whitespace + ")" + className + - "(" + whitespace + "|$)" ) ) && - classCache( className, function( elem ) { - return pattern.test( - typeof elem.className === "string" && elem.className || - typeof elem.getAttribute !== "undefined" && - elem.getAttribute( "class" ) || - "" - ); - } ); - }, - - ATTR: function( name, operator, check ) { - return function( elem ) { - var result = find.attr( elem, name ); - - if ( result == null ) { - return operator === "!="; - } - if ( !operator ) { - return true; - } - - result += ""; - - if ( operator === "=" ) { - return result === check; - } - if ( operator === "!=" ) { - return result !== check; - } - if ( operator === "^=" ) { - return check && result.indexOf( check ) === 0; - } - if ( operator === "*=" ) { - return check && result.indexOf( check ) > -1; - } - if ( operator === "$=" ) { - return check && result.slice( -check.length ) === check; - } - if ( operator === "~=" ) { - return ( " " + result.replace( rwhitespace, " " ) + " " ) - .indexOf( check ) > -1; - } - if ( operator === "|=" ) { - return result === check || result.slice( 0, check.length + 1 ) === check + "-"; - } - - return false; - }; - }, - - CHILD: function( type, what, _argument, first, last ) { - var simple = type.slice( 0, 3 ) !== "nth", - forward = type.slice( -4 ) !== "last", - ofType = what === "of-type"; - - return first === 1 && last === 0 ? - - // Shortcut for :nth-*(n) - function( elem ) { - return !!elem.parentNode; - } : - - function( elem, _context, xml ) { - var cache, outerCache, node, nodeIndex, start, - dir = simple !== forward ? "nextSibling" : "previousSibling", - parent = elem.parentNode, - name = ofType && elem.nodeName.toLowerCase(), - useCache = !xml && !ofType, - diff = false; - - if ( parent ) { - - // :(first|last|only)-(child|of-type) - if ( simple ) { - while ( dir ) { - node = elem; - while ( ( node = node[ dir ] ) ) { - if ( ofType ? - nodeName( node, name ) : - node.nodeType === 1 ) { - - return false; - } - } - - // Reverse direction for :only-* (if we haven't yet done so) - start = dir = type === "only" && !start && "nextSibling"; - } - return true; - } - - start = [ forward ? parent.firstChild : parent.lastChild ]; - - // non-xml :nth-child(...) stores cache data on `parent` - if ( forward && useCache ) { - - // Seek `elem` from a previously-cached index - outerCache = parent[ expando ] || ( parent[ expando ] = {} ); - cache = outerCache[ type ] || []; - nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; - diff = nodeIndex && cache[ 2 ]; - node = nodeIndex && parent.childNodes[ nodeIndex ]; - - while ( ( node = ++nodeIndex && node && node[ dir ] || - - // Fallback to seeking `elem` from the start - ( diff = nodeIndex = 0 ) || start.pop() ) ) { - - // When found, cache indexes on `parent` and break - if ( node.nodeType === 1 && ++diff && node === elem ) { - outerCache[ type ] = [ dirruns, nodeIndex, diff ]; - break; - } - } - - } else { - - // Use previously-cached element index if available - if ( useCache ) { - outerCache = elem[ expando ] || ( elem[ expando ] = {} ); - cache = outerCache[ type ] || []; - nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; - diff = nodeIndex; - } - - // xml :nth-child(...) - // or :nth-last-child(...) or :nth(-last)?-of-type(...) - if ( diff === false ) { - - // Use the same loop as above to seek `elem` from the start - while ( ( node = ++nodeIndex && node && node[ dir ] || - ( diff = nodeIndex = 0 ) || start.pop() ) ) { - - if ( ( ofType ? - nodeName( node, name ) : - node.nodeType === 1 ) && - ++diff ) { - - // Cache the index of each encountered element - if ( useCache ) { - outerCache = node[ expando ] || - ( node[ expando ] = {} ); - outerCache[ type ] = [ dirruns, diff ]; - } - - if ( node === elem ) { - break; - } - } - } - } - } - - // Incorporate the offset, then check against cycle size - diff -= last; - return diff === first || ( diff % first === 0 && diff / first >= 0 ); - } - }; - }, - - PSEUDO: function( pseudo, argument ) { - - // pseudo-class names are case-insensitive - // https://www.w3.org/TR/selectors/#pseudo-classes - // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters - // Remember that setFilters inherits from pseudos - var args, - fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || - find.error( "unsupported pseudo: " + pseudo ); - - // The user may use createPseudo to indicate that - // arguments are needed to create the filter function - // just as jQuery does - if ( fn[ expando ] ) { - return fn( argument ); - } - - // But maintain support for old signatures - if ( fn.length > 1 ) { - args = [ pseudo, pseudo, "", argument ]; - return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? - markFunction( function( seed, matches ) { - var idx, - matched = fn( seed, argument ), - i = matched.length; - while ( i-- ) { - idx = indexOf.call( seed, matched[ i ] ); - seed[ idx ] = !( matches[ idx ] = matched[ i ] ); - } - } ) : - function( elem ) { - return fn( elem, 0, args ); - }; - } - - return fn; - } - }, - - pseudos: { - - // Potentially complex pseudos - not: markFunction( function( selector ) { - - // Trim the selector passed to compile - // to avoid treating leading and trailing - // spaces as combinators - var input = [], - results = [], - matcher = compile( selector.replace( rtrimCSS, "$1" ) ); - - return matcher[ expando ] ? - markFunction( function( seed, matches, _context, xml ) { - var elem, - unmatched = matcher( seed, null, xml, [] ), - i = seed.length; - - // Match elements unmatched by `matcher` - while ( i-- ) { - if ( ( elem = unmatched[ i ] ) ) { - seed[ i ] = !( matches[ i ] = elem ); - } - } - } ) : - function( elem, _context, xml ) { - input[ 0 ] = elem; - matcher( input, null, xml, results ); - - // Don't keep the element - // (see https://github.com/jquery/sizzle/issues/299) - input[ 0 ] = null; - return !results.pop(); - }; - } ), - - has: markFunction( function( selector ) { - return function( elem ) { - return find( selector, elem ).length > 0; - }; - } ), - - contains: markFunction( function( text ) { - text = text.replace( runescape, funescape ); - return function( elem ) { - return ( elem.textContent || jQuery.text( elem ) ).indexOf( text ) > -1; - }; - } ), - - // "Whether an element is represented by a :lang() selector - // is based solely on the element's language value - // being equal to the identifier C, - // or beginning with the identifier C immediately followed by "-". - // The matching of C against the element's language value is performed case-insensitively. - // The identifier C does not have to be a valid language name." - // https://www.w3.org/TR/selectors/#lang-pseudo - lang: markFunction( function( lang ) { - - // lang value must be a valid identifier - if ( !ridentifier.test( lang || "" ) ) { - find.error( "unsupported lang: " + lang ); - } - lang = lang.replace( runescape, funescape ).toLowerCase(); - return function( elem ) { - var elemLang; - do { - if ( ( elemLang = documentIsHTML ? - elem.lang : - elem.getAttribute( "xml:lang" ) || elem.getAttribute( "lang" ) ) ) { - - elemLang = elemLang.toLowerCase(); - return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; - } - } while ( ( elem = elem.parentNode ) && elem.nodeType === 1 ); - return false; - }; - } ), - - // Miscellaneous - target: function( elem ) { - var hash = window.location && window.location.hash; - return hash && hash.slice( 1 ) === elem.id; - }, - - root: function( elem ) { - return elem === documentElement; - }, - - focus: function( elem ) { - return elem === safeActiveElement() && - document.hasFocus() && - !!( elem.type || elem.href || ~elem.tabIndex ); - }, - - // Boolean properties - enabled: createDisabledPseudo( false ), - disabled: createDisabledPseudo( true ), - - checked: function( elem ) { - - // In CSS3, :checked should return both checked and selected elements - // https://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked - return ( nodeName( elem, "input" ) && !!elem.checked ) || - ( nodeName( elem, "option" ) && !!elem.selected ); - }, - - selected: function( elem ) { - - // Support: IE <=11+ - // Accessing the selectedIndex property - // forces the browser to treat the default option as - // selected when in an optgroup. - if ( elem.parentNode ) { - // eslint-disable-next-line no-unused-expressions - elem.parentNode.selectedIndex; - } - - return elem.selected === true; - }, - - // Contents - empty: function( elem ) { - - // https://www.w3.org/TR/selectors/#empty-pseudo - // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), - // but not by others (comment: 8; processing instruction: 7; etc.) - // nodeType < 6 works because attributes (2) do not appear as children - for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { - if ( elem.nodeType < 6 ) { - return false; - } - } - return true; - }, - - parent: function( elem ) { - return !Expr.pseudos.empty( elem ); - }, - - // Element/input types - header: function( elem ) { - return rheader.test( elem.nodeName ); - }, - - input: function( elem ) { - return rinputs.test( elem.nodeName ); - }, - - button: function( elem ) { - return nodeName( elem, "input" ) && elem.type === "button" || - nodeName( elem, "button" ); - }, - - text: function( elem ) { - var attr; - return nodeName( elem, "input" ) && elem.type === "text" && - - // Support: IE <10 only - // New HTML5 attribute values (e.g., "search") appear - // with elem.type === "text" - ( ( attr = elem.getAttribute( "type" ) ) == null || - attr.toLowerCase() === "text" ); - }, - - // Position-in-collection - first: createPositionalPseudo( function() { - return [ 0 ]; - } ), - - last: createPositionalPseudo( function( _matchIndexes, length ) { - return [ length - 1 ]; - } ), - - eq: createPositionalPseudo( function( _matchIndexes, length, argument ) { - return [ argument < 0 ? argument + length : argument ]; - } ), - - even: createPositionalPseudo( function( matchIndexes, length ) { - var i = 0; - for ( ; i < length; i += 2 ) { - matchIndexes.push( i ); - } - return matchIndexes; - } ), - - odd: createPositionalPseudo( function( matchIndexes, length ) { - var i = 1; - for ( ; i < length; i += 2 ) { - matchIndexes.push( i ); - } - return matchIndexes; - } ), - - lt: createPositionalPseudo( function( matchIndexes, length, argument ) { - var i; - - if ( argument < 0 ) { - i = argument + length; - } else if ( argument > length ) { - i = length; - } else { - i = argument; - } - - for ( ; --i >= 0; ) { - matchIndexes.push( i ); - } - return matchIndexes; - } ), - - gt: createPositionalPseudo( function( matchIndexes, length, argument ) { - var i = argument < 0 ? argument + length : argument; - for ( ; ++i < length; ) { - matchIndexes.push( i ); - } - return matchIndexes; - } ) - } -}; - -Expr.pseudos.nth = Expr.pseudos.eq; - -// Add button/input type pseudos -for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { - Expr.pseudos[ i ] = createInputPseudo( i ); -} -for ( i in { submit: true, reset: true } ) { - Expr.pseudos[ i ] = createButtonPseudo( i ); -} - -// Easy API for creating new setFilters -function setFilters() {} -setFilters.prototype = Expr.filters = Expr.pseudos; -Expr.setFilters = new setFilters(); - -function tokenize( selector, parseOnly ) { - var matched, match, tokens, type, - soFar, groups, preFilters, - cached = tokenCache[ selector + " " ]; - - if ( cached ) { - return parseOnly ? 0 : cached.slice( 0 ); - } - - soFar = selector; - groups = []; - preFilters = Expr.preFilter; - - while ( soFar ) { - - // Comma and first run - if ( !matched || ( match = rcomma.exec( soFar ) ) ) { - if ( match ) { - - // Don't consume trailing commas as valid - soFar = soFar.slice( match[ 0 ].length ) || soFar; - } - groups.push( ( tokens = [] ) ); - } - - matched = false; - - // Combinators - if ( ( match = rleadingCombinator.exec( soFar ) ) ) { - matched = match.shift(); - tokens.push( { - value: matched, - - // Cast descendant combinators to space - type: match[ 0 ].replace( rtrimCSS, " " ) - } ); - soFar = soFar.slice( matched.length ); - } - - // Filters - for ( type in Expr.filter ) { - if ( ( match = matchExpr[ type ].exec( soFar ) ) && ( !preFilters[ type ] || - ( match = preFilters[ type ]( match ) ) ) ) { - matched = match.shift(); - tokens.push( { - value: matched, - type: type, - matches: match - } ); - soFar = soFar.slice( matched.length ); - } - } - - if ( !matched ) { - break; - } - } - - // Return the length of the invalid excess - // if we're just parsing - // Otherwise, throw an error or return tokens - if ( parseOnly ) { - return soFar.length; - } - - return soFar ? - find.error( selector ) : - - // Cache the tokens - tokenCache( selector, groups ).slice( 0 ); -} - -function toSelector( tokens ) { - var i = 0, - len = tokens.length, - selector = ""; - for ( ; i < len; i++ ) { - selector += tokens[ i ].value; - } - return selector; -} - -function addCombinator( matcher, combinator, base ) { - var dir = combinator.dir, - skip = combinator.next, - key = skip || dir, - checkNonElements = base && key === "parentNode", - doneName = done++; - - return combinator.first ? - - // Check against closest ancestor/preceding element - function( elem, context, xml ) { - while ( ( elem = elem[ dir ] ) ) { - if ( elem.nodeType === 1 || checkNonElements ) { - return matcher( elem, context, xml ); - } - } - return false; - } : - - // Check against all ancestor/preceding elements - function( elem, context, xml ) { - var oldCache, outerCache, - newCache = [ dirruns, doneName ]; - - // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching - if ( xml ) { - while ( ( elem = elem[ dir ] ) ) { - if ( elem.nodeType === 1 || checkNonElements ) { - if ( matcher( elem, context, xml ) ) { - return true; - } - } - } - } else { - while ( ( elem = elem[ dir ] ) ) { - if ( elem.nodeType === 1 || checkNonElements ) { - outerCache = elem[ expando ] || ( elem[ expando ] = {} ); - - if ( skip && nodeName( elem, skip ) ) { - elem = elem[ dir ] || elem; - } else if ( ( oldCache = outerCache[ key ] ) && - oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { - - // Assign to newCache so results back-propagate to previous elements - return ( newCache[ 2 ] = oldCache[ 2 ] ); - } else { - - // Reuse newcache so results back-propagate to previous elements - outerCache[ key ] = newCache; - - // A match means we're done; a fail means we have to keep checking - if ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) { - return true; - } - } - } - } - } - return false; - }; -} - -function elementMatcher( matchers ) { - return matchers.length > 1 ? - function( elem, context, xml ) { - var i = matchers.length; - while ( i-- ) { - if ( !matchers[ i ]( elem, context, xml ) ) { - return false; - } - } - return true; - } : - matchers[ 0 ]; -} - -function multipleContexts( selector, contexts, results ) { - var i = 0, - len = contexts.length; - for ( ; i < len; i++ ) { - find( selector, contexts[ i ], results ); - } - return results; -} - -function condense( unmatched, map, filter, context, xml ) { - var elem, - newUnmatched = [], - i = 0, - len = unmatched.length, - mapped = map != null; - - for ( ; i < len; i++ ) { - if ( ( elem = unmatched[ i ] ) ) { - if ( !filter || filter( elem, context, xml ) ) { - newUnmatched.push( elem ); - if ( mapped ) { - map.push( i ); - } - } - } - } - - return newUnmatched; -} - -function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { - if ( postFilter && !postFilter[ expando ] ) { - postFilter = setMatcher( postFilter ); - } - if ( postFinder && !postFinder[ expando ] ) { - postFinder = setMatcher( postFinder, postSelector ); - } - return markFunction( function( seed, results, context, xml ) { - var temp, i, elem, matcherOut, - preMap = [], - postMap = [], - preexisting = results.length, - - // Get initial elements from seed or context - elems = seed || - multipleContexts( selector || "*", - context.nodeType ? [ context ] : context, [] ), - - // Prefilter to get matcher input, preserving a map for seed-results synchronization - matcherIn = preFilter && ( seed || !selector ) ? - condense( elems, preMap, preFilter, context, xml ) : - elems; - - if ( matcher ) { - - // If we have a postFinder, or filtered seed, or non-seed postFilter - // or preexisting results, - matcherOut = postFinder || ( seed ? preFilter : preexisting || postFilter ) ? - - // ...intermediate processing is necessary - [] : - - // ...otherwise use results directly - results; - - // Find primary matches - matcher( matcherIn, matcherOut, context, xml ); - } else { - matcherOut = matcherIn; - } - - // Apply postFilter - if ( postFilter ) { - temp = condense( matcherOut, postMap ); - postFilter( temp, [], context, xml ); - - // Un-match failing elements by moving them back to matcherIn - i = temp.length; - while ( i-- ) { - if ( ( elem = temp[ i ] ) ) { - matcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem ); - } - } - } - - if ( seed ) { - if ( postFinder || preFilter ) { - if ( postFinder ) { - - // Get the final matcherOut by condensing this intermediate into postFinder contexts - temp = []; - i = matcherOut.length; - while ( i-- ) { - if ( ( elem = matcherOut[ i ] ) ) { - - // Restore matcherIn since elem is not yet a final match - temp.push( ( matcherIn[ i ] = elem ) ); - } - } - postFinder( null, ( matcherOut = [] ), temp, xml ); - } - - // Move matched elements from seed to results to keep them synchronized - i = matcherOut.length; - while ( i-- ) { - if ( ( elem = matcherOut[ i ] ) && - ( temp = postFinder ? indexOf.call( seed, elem ) : preMap[ i ] ) > -1 ) { - - seed[ temp ] = !( results[ temp ] = elem ); - } - } - } - - // Add elements to results, through postFinder if defined - } else { - matcherOut = condense( - matcherOut === results ? - matcherOut.splice( preexisting, matcherOut.length ) : - matcherOut - ); - if ( postFinder ) { - postFinder( null, results, matcherOut, xml ); - } else { - push.apply( results, matcherOut ); - } - } - } ); -} - -function matcherFromTokens( tokens ) { - var checkContext, matcher, j, - len = tokens.length, - leadingRelative = Expr.relative[ tokens[ 0 ].type ], - implicitRelative = leadingRelative || Expr.relative[ " " ], - i = leadingRelative ? 1 : 0, - - // The foundational matcher ensures that elements are reachable from top-level context(s) - matchContext = addCombinator( function( elem ) { - return elem === checkContext; - }, implicitRelative, true ), - matchAnyContext = addCombinator( function( elem ) { - return indexOf.call( checkContext, elem ) > -1; - }, implicitRelative, true ), - matchers = [ function( elem, context, xml ) { - - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - var ret = ( !leadingRelative && ( xml || context != outermostContext ) ) || ( - ( checkContext = context ).nodeType ? - matchContext( elem, context, xml ) : - matchAnyContext( elem, context, xml ) ); - - // Avoid hanging onto element - // (see https://github.com/jquery/sizzle/issues/299) - checkContext = null; - return ret; - } ]; - - for ( ; i < len; i++ ) { - if ( ( matcher = Expr.relative[ tokens[ i ].type ] ) ) { - matchers = [ addCombinator( elementMatcher( matchers ), matcher ) ]; - } else { - matcher = Expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches ); - - // Return special upon seeing a positional matcher - if ( matcher[ expando ] ) { - - // Find the next relative operator (if any) for proper handling - j = ++i; - for ( ; j < len; j++ ) { - if ( Expr.relative[ tokens[ j ].type ] ) { - break; - } - } - return setMatcher( - i > 1 && elementMatcher( matchers ), - i > 1 && toSelector( - - // If the preceding token was a descendant combinator, insert an implicit any-element `*` - tokens.slice( 0, i - 1 ) - .concat( { value: tokens[ i - 2 ].type === " " ? "*" : "" } ) - ).replace( rtrimCSS, "$1" ), - matcher, - i < j && matcherFromTokens( tokens.slice( i, j ) ), - j < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ), - j < len && toSelector( tokens ) - ); - } - matchers.push( matcher ); - } - } - - return elementMatcher( matchers ); -} - -function matcherFromGroupMatchers( elementMatchers, setMatchers ) { - var bySet = setMatchers.length > 0, - byElement = elementMatchers.length > 0, - superMatcher = function( seed, context, xml, results, outermost ) { - var elem, j, matcher, - matchedCount = 0, - i = "0", - unmatched = seed && [], - setMatched = [], - contextBackup = outermostContext, - - // We must always have either seed elements or outermost context - elems = seed || byElement && Expr.find.TAG( "*", outermost ), - - // Use integer dirruns iff this is the outermost matcher - dirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 ), - len = elems.length; - - if ( outermost ) { - - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - outermostContext = context == document || context || outermost; - } - - // Add elements passing elementMatchers directly to results - // Support: iOS <=7 - 9 only - // Tolerate NodeList properties (IE: "length"; Safari: ) matching - // elements by id. (see trac-14142) - for ( ; i !== len && ( elem = elems[ i ] ) != null; i++ ) { - if ( byElement && elem ) { - j = 0; - - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - if ( !context && elem.ownerDocument != document ) { - setDocument( elem ); - xml = !documentIsHTML; - } - while ( ( matcher = elementMatchers[ j++ ] ) ) { - if ( matcher( elem, context || document, xml ) ) { - push.call( results, elem ); - break; - } - } - if ( outermost ) { - dirruns = dirrunsUnique; - } - } - - // Track unmatched elements for set filters - if ( bySet ) { - - // They will have gone through all possible matchers - if ( ( elem = !matcher && elem ) ) { - matchedCount--; - } - - // Lengthen the array for every element, matched or not - if ( seed ) { - unmatched.push( elem ); - } - } - } - - // `i` is now the count of elements visited above, and adding it to `matchedCount` - // makes the latter nonnegative. - matchedCount += i; - - // Apply set filters to unmatched elements - // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount` - // equals `i`), unless we didn't visit _any_ elements in the above loop because we have - // no element matchers and no seed. - // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that - // case, which will result in a "00" `matchedCount` that differs from `i` but is also - // numerically zero. - if ( bySet && i !== matchedCount ) { - j = 0; - while ( ( matcher = setMatchers[ j++ ] ) ) { - matcher( unmatched, setMatched, context, xml ); - } - - if ( seed ) { - - // Reintegrate element matches to eliminate the need for sorting - if ( matchedCount > 0 ) { - while ( i-- ) { - if ( !( unmatched[ i ] || setMatched[ i ] ) ) { - setMatched[ i ] = pop.call( results ); - } - } - } - - // Discard index placeholder values to get only actual matches - setMatched = condense( setMatched ); - } - - // Add matches to results - push.apply( results, setMatched ); - - // Seedless set matches succeeding multiple successful matchers stipulate sorting - if ( outermost && !seed && setMatched.length > 0 && - ( matchedCount + setMatchers.length ) > 1 ) { - - jQuery.uniqueSort( results ); - } - } - - // Override manipulation of globals by nested matchers - if ( outermost ) { - dirruns = dirrunsUnique; - outermostContext = contextBackup; - } - - return unmatched; - }; - - return bySet ? - markFunction( superMatcher ) : - superMatcher; -} - -function compile( selector, match /* Internal Use Only */ ) { - var i, - setMatchers = [], - elementMatchers = [], - cached = compilerCache[ selector + " " ]; - - if ( !cached ) { - - // Generate a function of recursive functions that can be used to check each element - if ( !match ) { - match = tokenize( selector ); - } - i = match.length; - while ( i-- ) { - cached = matcherFromTokens( match[ i ] ); - if ( cached[ expando ] ) { - setMatchers.push( cached ); - } else { - elementMatchers.push( cached ); - } - } - - // Cache the compiled function - cached = compilerCache( selector, - matcherFromGroupMatchers( elementMatchers, setMatchers ) ); - - // Save selector and tokenization - cached.selector = selector; - } - return cached; -} - -/** - * A low-level selection function that works with jQuery's compiled - * selector functions - * @param {String|Function} selector A selector or a pre-compiled - * selector function built with jQuery selector compile - * @param {Element} context - * @param {Array} [results] - * @param {Array} [seed] A set of elements to match against - */ -function select( selector, context, results, seed ) { - var i, tokens, token, type, find, - compiled = typeof selector === "function" && selector, - match = !seed && tokenize( ( selector = compiled.selector || selector ) ); - - results = results || []; - - // Try to minimize operations if there is only one selector in the list and no seed - // (the latter of which guarantees us context) - if ( match.length === 1 ) { - - // Reduce context if the leading compound selector is an ID - tokens = match[ 0 ] = match[ 0 ].slice( 0 ); - if ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === "ID" && - context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) { - - context = ( Expr.find.ID( - token.matches[ 0 ].replace( runescape, funescape ), - context - ) || [] )[ 0 ]; - if ( !context ) { - return results; - - // Precompiled matchers will still verify ancestry, so step up a level - } else if ( compiled ) { - context = context.parentNode; - } - - selector = selector.slice( tokens.shift().value.length ); - } - - // Fetch a seed set for right-to-left matching - i = matchExpr.needsContext.test( selector ) ? 0 : tokens.length; - while ( i-- ) { - token = tokens[ i ]; - - // Abort if we hit a combinator - if ( Expr.relative[ ( type = token.type ) ] ) { - break; - } - if ( ( find = Expr.find[ type ] ) ) { - - // Search, expanding context for leading sibling combinators - if ( ( seed = find( - token.matches[ 0 ].replace( runescape, funescape ), - rsibling.test( tokens[ 0 ].type ) && - testContext( context.parentNode ) || context - ) ) ) { - - // If seed is empty or no tokens remain, we can return early - tokens.splice( i, 1 ); - selector = seed.length && toSelector( tokens ); - if ( !selector ) { - push.apply( results, seed ); - return results; - } - - break; - } - } - } - } - - // Compile and execute a filtering function if one is not provided - // Provide `match` to avoid retokenization if we modified the selector above - ( compiled || compile( selector, match ) )( - seed, - context, - !documentIsHTML, - results, - !context || rsibling.test( selector ) && testContext( context.parentNode ) || context - ); - return results; -} - -// One-time assignments - -// Support: Android <=4.0 - 4.1+ -// Sort stability -support.sortStable = expando.split( "" ).sort( sortOrder ).join( "" ) === expando; - -// Initialize against the default document -setDocument(); - -// Support: Android <=4.0 - 4.1+ -// Detached nodes confoundingly follow *each other* -support.sortDetached = assert( function( el ) { - - // Should return 1, but returns 4 (following) - return el.compareDocumentPosition( document.createElement( "fieldset" ) ) & 1; -} ); - -jQuery.find = find; - -// Deprecated -jQuery.expr[ ":" ] = jQuery.expr.pseudos; -jQuery.unique = jQuery.uniqueSort; - -// These have always been private, but they used to be documented as part of -// Sizzle so let's maintain them for now for backwards compatibility purposes. -find.compile = compile; -find.select = select; -find.setDocument = setDocument; -find.tokenize = tokenize; - -find.escape = jQuery.escapeSelector; -find.getText = jQuery.text; -find.isXML = jQuery.isXMLDoc; -find.selectors = jQuery.expr; -find.support = jQuery.support; -find.uniqueSort = jQuery.uniqueSort; - - /* eslint-enable */ - -} )(); - - -var dir = function( elem, dir, until ) { - var matched = [], - truncate = until !== undefined; - - while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) { - if ( elem.nodeType === 1 ) { - if ( truncate && jQuery( elem ).is( until ) ) { - break; - } - matched.push( elem ); - } - } - return matched; -}; - - -var siblings = function( n, elem ) { - var matched = []; - - for ( ; n; n = n.nextSibling ) { - if ( n.nodeType === 1 && n !== elem ) { - matched.push( n ); - } - } - - return matched; -}; - - -var rneedsContext = jQuery.expr.match.needsContext; - -var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i ); - - - -// Implement the identical functionality for filter and not -function winnow( elements, qualifier, not ) { - if ( isFunction( qualifier ) ) { - return jQuery.grep( elements, function( elem, i ) { - return !!qualifier.call( elem, i, elem ) !== not; - } ); - } - - // Single element - if ( qualifier.nodeType ) { - return jQuery.grep( elements, function( elem ) { - return ( elem === qualifier ) !== not; - } ); - } - - // Arraylike of elements (jQuery, arguments, Array) - if ( typeof qualifier !== "string" ) { - return jQuery.grep( elements, function( elem ) { - return ( indexOf.call( qualifier, elem ) > -1 ) !== not; - } ); - } - - // Filtered directly for both simple and complex selectors - return jQuery.filter( qualifier, elements, not ); -} - -jQuery.filter = function( expr, elems, not ) { - var elem = elems[ 0 ]; - - if ( not ) { - expr = ":not(" + expr + ")"; - } - - if ( elems.length === 1 && elem.nodeType === 1 ) { - return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : []; - } - - return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { - return elem.nodeType === 1; - } ) ); -}; - -jQuery.fn.extend( { - find: function( selector ) { - var i, ret, - len = this.length, - self = this; - - if ( typeof selector !== "string" ) { - return this.pushStack( jQuery( selector ).filter( function() { - for ( i = 0; i < len; i++ ) { - if ( jQuery.contains( self[ i ], this ) ) { - return true; - } - } - } ) ); - } - - ret = this.pushStack( [] ); - - for ( i = 0; i < len; i++ ) { - jQuery.find( selector, self[ i ], ret ); - } - - return len > 1 ? jQuery.uniqueSort( ret ) : ret; - }, - filter: function( selector ) { - return this.pushStack( winnow( this, selector || [], false ) ); - }, - not: function( selector ) { - return this.pushStack( winnow( this, selector || [], true ) ); - }, - is: function( selector ) { - return !!winnow( - this, - - // If this is a positional/relative selector, check membership in the returned set - // so $("p:first").is("p:last") won't return true for a doc with two "p". - typeof selector === "string" && rneedsContext.test( selector ) ? - jQuery( selector ) : - selector || [], - false - ).length; - } -} ); - - -// Initialize a jQuery object - - -// A central reference to the root jQuery(document) -var rootjQuery, - - // A simple way to check for HTML strings - // Prioritize #id over to avoid XSS via location.hash (trac-9521) - // Strict HTML recognition (trac-11290: must start with <) - // Shortcut simple #id case for speed - rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/, - - init = jQuery.fn.init = function( selector, context, root ) { - var match, elem; - - // HANDLE: $(""), $(null), $(undefined), $(false) - if ( !selector ) { - return this; - } - - // Method init() accepts an alternate rootjQuery - // so migrate can support jQuery.sub (gh-2101) - root = root || rootjQuery; - - // Handle HTML strings - if ( typeof selector === "string" ) { - if ( selector[ 0 ] === "<" && - selector[ selector.length - 1 ] === ">" && - selector.length >= 3 ) { - - // Assume that strings that start and end with <> are HTML and skip the regex check - match = [ null, selector, null ]; - - } else { - match = rquickExpr.exec( selector ); - } - - // Match html or make sure no context is specified for #id - if ( match && ( match[ 1 ] || !context ) ) { - - // HANDLE: $(html) -> $(array) - if ( match[ 1 ] ) { - context = context instanceof jQuery ? context[ 0 ] : context; - - // Option to run scripts is true for back-compat - // Intentionally let the error be thrown if parseHTML is not present - jQuery.merge( this, jQuery.parseHTML( - match[ 1 ], - context && context.nodeType ? context.ownerDocument || context : document, - true - ) ); - - // HANDLE: $(html, props) - if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) { - for ( match in context ) { - - // Properties of context are called as methods if possible - if ( isFunction( this[ match ] ) ) { - this[ match ]( context[ match ] ); - - // ...and otherwise set as attributes - } else { - this.attr( match, context[ match ] ); - } - } - } - - return this; - - // HANDLE: $(#id) - } else { - elem = document.getElementById( match[ 2 ] ); - - if ( elem ) { - - // Inject the element directly into the jQuery object - this[ 0 ] = elem; - this.length = 1; - } - return this; - } - - // HANDLE: $(expr, $(...)) - } else if ( !context || context.jquery ) { - return ( context || root ).find( selector ); - - // HANDLE: $(expr, context) - // (which is just equivalent to: $(context).find(expr) - } else { - return this.constructor( context ).find( selector ); - } - - // HANDLE: $(DOMElement) - } else if ( selector.nodeType ) { - this[ 0 ] = selector; - this.length = 1; - return this; - - // HANDLE: $(function) - // Shortcut for document ready - } else if ( isFunction( selector ) ) { - return root.ready !== undefined ? - root.ready( selector ) : - - // Execute immediately if ready is not present - selector( jQuery ); - } - - return jQuery.makeArray( selector, this ); - }; - -// Give the init function the jQuery prototype for later instantiation -init.prototype = jQuery.fn; - -// Initialize central reference -rootjQuery = jQuery( document ); - - -var rparentsprev = /^(?:parents|prev(?:Until|All))/, - - // Methods guaranteed to produce a unique set when starting from a unique set - guaranteedUnique = { - children: true, - contents: true, - next: true, - prev: true - }; - -jQuery.fn.extend( { - has: function( target ) { - var targets = jQuery( target, this ), - l = targets.length; - - return this.filter( function() { - var i = 0; - for ( ; i < l; i++ ) { - if ( jQuery.contains( this, targets[ i ] ) ) { - return true; - } - } - } ); - }, - - closest: function( selectors, context ) { - var cur, - i = 0, - l = this.length, - matched = [], - targets = typeof selectors !== "string" && jQuery( selectors ); - - // Positional selectors never match, since there's no _selection_ context - if ( !rneedsContext.test( selectors ) ) { - for ( ; i < l; i++ ) { - for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) { - - // Always skip document fragments - if ( cur.nodeType < 11 && ( targets ? - targets.index( cur ) > -1 : - - // Don't pass non-elements to jQuery#find - cur.nodeType === 1 && - jQuery.find.matchesSelector( cur, selectors ) ) ) { - - matched.push( cur ); - break; - } - } - } - } - - return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched ); - }, - - // Determine the position of an element within the set - index: function( elem ) { - - // No argument, return index in parent - if ( !elem ) { - return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1; - } - - // Index in selector - if ( typeof elem === "string" ) { - return indexOf.call( jQuery( elem ), this[ 0 ] ); - } - - // Locate the position of the desired element - return indexOf.call( this, - - // If it receives a jQuery object, the first element is used - elem.jquery ? elem[ 0 ] : elem - ); - }, - - add: function( selector, context ) { - return this.pushStack( - jQuery.uniqueSort( - jQuery.merge( this.get(), jQuery( selector, context ) ) - ) - ); - }, - - addBack: function( selector ) { - return this.add( selector == null ? - this.prevObject : this.prevObject.filter( selector ) - ); - } -} ); - -function sibling( cur, dir ) { - while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {} - return cur; -} - -jQuery.each( { - parent: function( elem ) { - var parent = elem.parentNode; - return parent && parent.nodeType !== 11 ? parent : null; - }, - parents: function( elem ) { - return dir( elem, "parentNode" ); - }, - parentsUntil: function( elem, _i, until ) { - return dir( elem, "parentNode", until ); - }, - next: function( elem ) { - return sibling( elem, "nextSibling" ); - }, - prev: function( elem ) { - return sibling( elem, "previousSibling" ); - }, - nextAll: function( elem ) { - return dir( elem, "nextSibling" ); - }, - prevAll: function( elem ) { - return dir( elem, "previousSibling" ); - }, - nextUntil: function( elem, _i, until ) { - return dir( elem, "nextSibling", until ); - }, - prevUntil: function( elem, _i, until ) { - return dir( elem, "previousSibling", until ); - }, - siblings: function( elem ) { - return siblings( ( elem.parentNode || {} ).firstChild, elem ); - }, - children: function( elem ) { - return siblings( elem.firstChild ); - }, - contents: function( elem ) { - if ( elem.contentDocument != null && - - // Support: IE 11+ - // elements with no `data` attribute has an object - // `contentDocument` with a `null` prototype. - getProto( elem.contentDocument ) ) { - - return elem.contentDocument; - } - - // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only - // Treat the template element as a regular one in browsers that - // don't support it. - if ( nodeName( elem, "template" ) ) { - elem = elem.content || elem; - } - - return jQuery.merge( [], elem.childNodes ); - } -}, function( name, fn ) { - jQuery.fn[ name ] = function( until, selector ) { - var matched = jQuery.map( this, fn, until ); - - if ( name.slice( -5 ) !== "Until" ) { - selector = until; - } - - if ( selector && typeof selector === "string" ) { - matched = jQuery.filter( selector, matched ); - } - - if ( this.length > 1 ) { - - // Remove duplicates - if ( !guaranteedUnique[ name ] ) { - jQuery.uniqueSort( matched ); - } - - // Reverse order for parents* and prev-derivatives - if ( rparentsprev.test( name ) ) { - matched.reverse(); - } - } - - return this.pushStack( matched ); - }; -} ); -var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g ); - - - -// Convert String-formatted options into Object-formatted ones -function createOptions( options ) { - var object = {}; - jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) { - object[ flag ] = true; - } ); - return object; -} - -/* - * Create a callback list using the following parameters: - * - * options: an optional list of space-separated options that will change how - * the callback list behaves or a more traditional option object - * - * By default a callback list will act like an event callback list and can be - * "fired" multiple times. - * - * Possible options: - * - * once: will ensure the callback list can only be fired once (like a Deferred) - * - * memory: will keep track of previous values and will call any callback added - * after the list has been fired right away with the latest "memorized" - * values (like a Deferred) - * - * unique: will ensure a callback can only be added once (no duplicate in the list) - * - * stopOnFalse: interrupt callings when a callback returns false - * - */ -jQuery.Callbacks = function( options ) { - - // Convert options from String-formatted to Object-formatted if needed - // (we check in cache first) - options = typeof options === "string" ? - createOptions( options ) : - jQuery.extend( {}, options ); - - var // Flag to know if list is currently firing - firing, - - // Last fire value for non-forgettable lists - memory, - - // Flag to know if list was already fired - fired, - - // Flag to prevent firing - locked, - - // Actual callback list - list = [], - - // Queue of execution data for repeatable lists - queue = [], - - // Index of currently firing callback (modified by add/remove as needed) - firingIndex = -1, - - // Fire callbacks - fire = function() { - - // Enforce single-firing - locked = locked || options.once; - - // Execute callbacks for all pending executions, - // respecting firingIndex overrides and runtime changes - fired = firing = true; - for ( ; queue.length; firingIndex = -1 ) { - memory = queue.shift(); - while ( ++firingIndex < list.length ) { - - // Run callback and check for early termination - if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false && - options.stopOnFalse ) { - - // Jump to end and forget the data so .add doesn't re-fire - firingIndex = list.length; - memory = false; - } - } - } - - // Forget the data if we're done with it - if ( !options.memory ) { - memory = false; - } - - firing = false; - - // Clean up if we're done firing for good - if ( locked ) { - - // Keep an empty list if we have data for future add calls - if ( memory ) { - list = []; - - // Otherwise, this object is spent - } else { - list = ""; - } - } - }, - - // Actual Callbacks object - self = { - - // Add a callback or a collection of callbacks to the list - add: function() { - if ( list ) { - - // If we have memory from a past run, we should fire after adding - if ( memory && !firing ) { - firingIndex = list.length - 1; - queue.push( memory ); - } - - ( function add( args ) { - jQuery.each( args, function( _, arg ) { - if ( isFunction( arg ) ) { - if ( !options.unique || !self.has( arg ) ) { - list.push( arg ); - } - } else if ( arg && arg.length && toType( arg ) !== "string" ) { - - // Inspect recursively - add( arg ); - } - } ); - } )( arguments ); - - if ( memory && !firing ) { - fire(); - } - } - return this; - }, - - // Remove a callback from the list - remove: function() { - jQuery.each( arguments, function( _, arg ) { - var index; - while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { - list.splice( index, 1 ); - - // Handle firing indexes - if ( index <= firingIndex ) { - firingIndex--; - } - } - } ); - return this; - }, - - // Check if a given callback is in the list. - // If no argument is given, return whether or not list has callbacks attached. - has: function( fn ) { - return fn ? - jQuery.inArray( fn, list ) > -1 : - list.length > 0; - }, - - // Remove all callbacks from the list - empty: function() { - if ( list ) { - list = []; - } - return this; - }, - - // Disable .fire and .add - // Abort any current/pending executions - // Clear all callbacks and values - disable: function() { - locked = queue = []; - list = memory = ""; - return this; - }, - disabled: function() { - return !list; - }, - - // Disable .fire - // Also disable .add unless we have memory (since it would have no effect) - // Abort any pending executions - lock: function() { - locked = queue = []; - if ( !memory && !firing ) { - list = memory = ""; - } - return this; - }, - locked: function() { - return !!locked; - }, - - // Call all callbacks with the given context and arguments - fireWith: function( context, args ) { - if ( !locked ) { - args = args || []; - args = [ context, args.slice ? args.slice() : args ]; - queue.push( args ); - if ( !firing ) { - fire(); - } - } - return this; - }, - - // Call all the callbacks with the given arguments - fire: function() { - self.fireWith( this, arguments ); - return this; - }, - - // To know if the callbacks have already been called at least once - fired: function() { - return !!fired; - } - }; - - return self; -}; - - -function Identity( v ) { - return v; -} -function Thrower( ex ) { - throw ex; -} - -function adoptValue( value, resolve, reject, noValue ) { - var method; - - try { - - // Check for promise aspect first to privilege synchronous behavior - if ( value && isFunction( ( method = value.promise ) ) ) { - method.call( value ).done( resolve ).fail( reject ); - - // Other thenables - } else if ( value && isFunction( ( method = value.then ) ) ) { - method.call( value, resolve, reject ); - - // Other non-thenables - } else { - - // Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer: - // * false: [ value ].slice( 0 ) => resolve( value ) - // * true: [ value ].slice( 1 ) => resolve() - resolve.apply( undefined, [ value ].slice( noValue ) ); - } - - // For Promises/A+, convert exceptions into rejections - // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in - // Deferred#then to conditionally suppress rejection. - } catch ( value ) { - - // Support: Android 4.0 only - // Strict mode functions invoked without .call/.apply get global-object context - reject.apply( undefined, [ value ] ); - } -} - -jQuery.extend( { - - Deferred: function( func ) { - var tuples = [ - - // action, add listener, callbacks, - // ... .then handlers, argument index, [final state] - [ "notify", "progress", jQuery.Callbacks( "memory" ), - jQuery.Callbacks( "memory" ), 2 ], - [ "resolve", "done", jQuery.Callbacks( "once memory" ), - jQuery.Callbacks( "once memory" ), 0, "resolved" ], - [ "reject", "fail", jQuery.Callbacks( "once memory" ), - jQuery.Callbacks( "once memory" ), 1, "rejected" ] - ], - state = "pending", - promise = { - state: function() { - return state; - }, - always: function() { - deferred.done( arguments ).fail( arguments ); - return this; - }, - "catch": function( fn ) { - return promise.then( null, fn ); - }, - - // Keep pipe for back-compat - pipe: function( /* fnDone, fnFail, fnProgress */ ) { - var fns = arguments; - - return jQuery.Deferred( function( newDefer ) { - jQuery.each( tuples, function( _i, tuple ) { - - // Map tuples (progress, done, fail) to arguments (done, fail, progress) - var fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ]; - - // deferred.progress(function() { bind to newDefer or newDefer.notify }) - // deferred.done(function() { bind to newDefer or newDefer.resolve }) - // deferred.fail(function() { bind to newDefer or newDefer.reject }) - deferred[ tuple[ 1 ] ]( function() { - var returned = fn && fn.apply( this, arguments ); - if ( returned && isFunction( returned.promise ) ) { - returned.promise() - .progress( newDefer.notify ) - .done( newDefer.resolve ) - .fail( newDefer.reject ); - } else { - newDefer[ tuple[ 0 ] + "With" ]( - this, - fn ? [ returned ] : arguments - ); - } - } ); - } ); - fns = null; - } ).promise(); - }, - then: function( onFulfilled, onRejected, onProgress ) { - var maxDepth = 0; - function resolve( depth, deferred, handler, special ) { - return function() { - var that = this, - args = arguments, - mightThrow = function() { - var returned, then; - - // Support: Promises/A+ section 2.3.3.3.3 - // https://promisesaplus.com/#point-59 - // Ignore double-resolution attempts - if ( depth < maxDepth ) { - return; - } - - returned = handler.apply( that, args ); - - // Support: Promises/A+ section 2.3.1 - // https://promisesaplus.com/#point-48 - if ( returned === deferred.promise() ) { - throw new TypeError( "Thenable self-resolution" ); - } - - // Support: Promises/A+ sections 2.3.3.1, 3.5 - // https://promisesaplus.com/#point-54 - // https://promisesaplus.com/#point-75 - // Retrieve `then` only once - then = returned && - - // Support: Promises/A+ section 2.3.4 - // https://promisesaplus.com/#point-64 - // Only check objects and functions for thenability - ( typeof returned === "object" || - typeof returned === "function" ) && - returned.then; - - // Handle a returned thenable - if ( isFunction( then ) ) { - - // Special processors (notify) just wait for resolution - if ( special ) { - then.call( - returned, - resolve( maxDepth, deferred, Identity, special ), - resolve( maxDepth, deferred, Thrower, special ) - ); - - // Normal processors (resolve) also hook into progress - } else { - - // ...and disregard older resolution values - maxDepth++; - - then.call( - returned, - resolve( maxDepth, deferred, Identity, special ), - resolve( maxDepth, deferred, Thrower, special ), - resolve( maxDepth, deferred, Identity, - deferred.notifyWith ) - ); - } - - // Handle all other returned values - } else { - - // Only substitute handlers pass on context - // and multiple values (non-spec behavior) - if ( handler !== Identity ) { - that = undefined; - args = [ returned ]; - } - - // Process the value(s) - // Default process is resolve - ( special || deferred.resolveWith )( that, args ); - } - }, - - // Only normal processors (resolve) catch and reject exceptions - process = special ? - mightThrow : - function() { - try { - mightThrow(); - } catch ( e ) { - - if ( jQuery.Deferred.exceptionHook ) { - jQuery.Deferred.exceptionHook( e, - process.error ); - } - - // Support: Promises/A+ section 2.3.3.3.4.1 - // https://promisesaplus.com/#point-61 - // Ignore post-resolution exceptions - if ( depth + 1 >= maxDepth ) { - - // Only substitute handlers pass on context - // and multiple values (non-spec behavior) - if ( handler !== Thrower ) { - that = undefined; - args = [ e ]; - } - - deferred.rejectWith( that, args ); - } - } - }; - - // Support: Promises/A+ section 2.3.3.3.1 - // https://promisesaplus.com/#point-57 - // Re-resolve promises immediately to dodge false rejection from - // subsequent errors - if ( depth ) { - process(); - } else { - - // Call an optional hook to record the error, in case of exception - // since it's otherwise lost when execution goes async - if ( jQuery.Deferred.getErrorHook ) { - process.error = jQuery.Deferred.getErrorHook(); - - // The deprecated alias of the above. While the name suggests - // returning the stack, not an error instance, jQuery just passes - // it directly to `console.warn` so both will work; an instance - // just better cooperates with source maps. - } else if ( jQuery.Deferred.getStackHook ) { - process.error = jQuery.Deferred.getStackHook(); - } - window.setTimeout( process ); - } - }; - } - - return jQuery.Deferred( function( newDefer ) { - - // progress_handlers.add( ... ) - tuples[ 0 ][ 3 ].add( - resolve( - 0, - newDefer, - isFunction( onProgress ) ? - onProgress : - Identity, - newDefer.notifyWith - ) - ); - - // fulfilled_handlers.add( ... ) - tuples[ 1 ][ 3 ].add( - resolve( - 0, - newDefer, - isFunction( onFulfilled ) ? - onFulfilled : - Identity - ) - ); - - // rejected_handlers.add( ... ) - tuples[ 2 ][ 3 ].add( - resolve( - 0, - newDefer, - isFunction( onRejected ) ? - onRejected : - Thrower - ) - ); - } ).promise(); - }, - - // Get a promise for this deferred - // If obj is provided, the promise aspect is added to the object - promise: function( obj ) { - return obj != null ? jQuery.extend( obj, promise ) : promise; - } - }, - deferred = {}; - - // Add list-specific methods - jQuery.each( tuples, function( i, tuple ) { - var list = tuple[ 2 ], - stateString = tuple[ 5 ]; - - // promise.progress = list.add - // promise.done = list.add - // promise.fail = list.add - promise[ tuple[ 1 ] ] = list.add; - - // Handle state - if ( stateString ) { - list.add( - function() { - - // state = "resolved" (i.e., fulfilled) - // state = "rejected" - state = stateString; - }, - - // rejected_callbacks.disable - // fulfilled_callbacks.disable - tuples[ 3 - i ][ 2 ].disable, - - // rejected_handlers.disable - // fulfilled_handlers.disable - tuples[ 3 - i ][ 3 ].disable, - - // progress_callbacks.lock - tuples[ 0 ][ 2 ].lock, - - // progress_handlers.lock - tuples[ 0 ][ 3 ].lock - ); - } - - // progress_handlers.fire - // fulfilled_handlers.fire - // rejected_handlers.fire - list.add( tuple[ 3 ].fire ); - - // deferred.notify = function() { deferred.notifyWith(...) } - // deferred.resolve = function() { deferred.resolveWith(...) } - // deferred.reject = function() { deferred.rejectWith(...) } - deferred[ tuple[ 0 ] ] = function() { - deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments ); - return this; - }; - - // deferred.notifyWith = list.fireWith - // deferred.resolveWith = list.fireWith - // deferred.rejectWith = list.fireWith - deferred[ tuple[ 0 ] + "With" ] = list.fireWith; - } ); - - // Make the deferred a promise - promise.promise( deferred ); - - // Call given func if any - if ( func ) { - func.call( deferred, deferred ); - } - - // All done! - return deferred; - }, - - // Deferred helper - when: function( singleValue ) { - var - - // count of uncompleted subordinates - remaining = arguments.length, - - // count of unprocessed arguments - i = remaining, - - // subordinate fulfillment data - resolveContexts = Array( i ), - resolveValues = slice.call( arguments ), - - // the primary Deferred - primary = jQuery.Deferred(), - - // subordinate callback factory - updateFunc = function( i ) { - return function( value ) { - resolveContexts[ i ] = this; - resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; - if ( !( --remaining ) ) { - primary.resolveWith( resolveContexts, resolveValues ); - } - }; - }; - - // Single- and empty arguments are adopted like Promise.resolve - if ( remaining <= 1 ) { - adoptValue( singleValue, primary.done( updateFunc( i ) ).resolve, primary.reject, - !remaining ); - - // Use .then() to unwrap secondary thenables (cf. gh-3000) - if ( primary.state() === "pending" || - isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) { - - return primary.then(); - } - } - - // Multiple arguments are aggregated like Promise.all array elements - while ( i-- ) { - adoptValue( resolveValues[ i ], updateFunc( i ), primary.reject ); - } - - return primary.promise(); - } -} ); - - -// These usually indicate a programmer mistake during development, -// warn about them ASAP rather than swallowing them by default. -var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/; - -// If `jQuery.Deferred.getErrorHook` is defined, `asyncError` is an error -// captured before the async barrier to get the original error cause -// which may otherwise be hidden. -jQuery.Deferred.exceptionHook = function( error, asyncError ) { - - // Support: IE 8 - 9 only - // Console exists when dev tools are open, which can happen at any time - if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) { - window.console.warn( "jQuery.Deferred exception: " + error.message, - error.stack, asyncError ); - } -}; - - - - -jQuery.readyException = function( error ) { - window.setTimeout( function() { - throw error; - } ); -}; - - - - -// The deferred used on DOM ready -var readyList = jQuery.Deferred(); - -jQuery.fn.ready = function( fn ) { - - readyList - .then( fn ) - - // Wrap jQuery.readyException in a function so that the lookup - // happens at the time of error handling instead of callback - // registration. - .catch( function( error ) { - jQuery.readyException( error ); - } ); - - return this; -}; - -jQuery.extend( { - - // Is the DOM ready to be used? Set to true once it occurs. - isReady: false, - - // A counter to track how many items to wait for before - // the ready event fires. See trac-6781 - readyWait: 1, - - // Handle when the DOM is ready - ready: function( wait ) { - - // Abort if there are pending holds or we're already ready - if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { - return; - } - - // Remember that the DOM is ready - jQuery.isReady = true; - - // If a normal DOM Ready event fired, decrement, and wait if need be - if ( wait !== true && --jQuery.readyWait > 0 ) { - return; - } - - // If there are functions bound, to execute - readyList.resolveWith( document, [ jQuery ] ); - } -} ); - -jQuery.ready.then = readyList.then; - -// The ready event handler and self cleanup method -function completed() { - document.removeEventListener( "DOMContentLoaded", completed ); - window.removeEventListener( "load", completed ); - jQuery.ready(); -} - -// Catch cases where $(document).ready() is called -// after the browser event has already occurred. -// Support: IE <=9 - 10 only -// Older IE sometimes signals "interactive" too soon -if ( document.readyState === "complete" || - ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) { - - // Handle it asynchronously to allow scripts the opportunity to delay ready - window.setTimeout( jQuery.ready ); - -} else { - - // Use the handy event callback - document.addEventListener( "DOMContentLoaded", completed ); - - // A fallback to window.onload, that will always work - window.addEventListener( "load", completed ); -} - - - - -// Multifunctional method to get and set values of a collection -// The value/s can optionally be executed if it's a function -var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { - var i = 0, - len = elems.length, - bulk = key == null; - - // Sets many values - if ( toType( key ) === "object" ) { - chainable = true; - for ( i in key ) { - access( elems, fn, i, key[ i ], true, emptyGet, raw ); - } - - // Sets one value - } else if ( value !== undefined ) { - chainable = true; - - if ( !isFunction( value ) ) { - raw = true; - } - - if ( bulk ) { - - // Bulk operations run against the entire set - if ( raw ) { - fn.call( elems, value ); - fn = null; - - // ...except when executing function values - } else { - bulk = fn; - fn = function( elem, _key, value ) { - return bulk.call( jQuery( elem ), value ); - }; - } - } - - if ( fn ) { - for ( ; i < len; i++ ) { - fn( - elems[ i ], key, raw ? - value : - value.call( elems[ i ], i, fn( elems[ i ], key ) ) - ); - } - } - } - - if ( chainable ) { - return elems; - } - - // Gets - if ( bulk ) { - return fn.call( elems ); - } - - return len ? fn( elems[ 0 ], key ) : emptyGet; -}; - - -// Matches dashed string for camelizing -var rmsPrefix = /^-ms-/, - rdashAlpha = /-([a-z])/g; - -// Used by camelCase as callback to replace() -function fcamelCase( _all, letter ) { - return letter.toUpperCase(); -} - -// Convert dashed to camelCase; used by the css and data modules -// Support: IE <=9 - 11, Edge 12 - 15 -// Microsoft forgot to hump their vendor prefix (trac-9572) -function camelCase( string ) { - return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); -} -var acceptData = function( owner ) { - - // Accepts only: - // - Node - // - Node.ELEMENT_NODE - // - Node.DOCUMENT_NODE - // - Object - // - Any - return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType ); -}; - - - - -function Data() { - this.expando = jQuery.expando + Data.uid++; -} - -Data.uid = 1; - -Data.prototype = { - - cache: function( owner ) { - - // Check if the owner object already has a cache - var value = owner[ this.expando ]; - - // If not, create one - if ( !value ) { - value = {}; - - // We can accept data for non-element nodes in modern browsers, - // but we should not, see trac-8335. - // Always return an empty object. - if ( acceptData( owner ) ) { - - // If it is a node unlikely to be stringify-ed or looped over - // use plain assignment - if ( owner.nodeType ) { - owner[ this.expando ] = value; - - // Otherwise secure it in a non-enumerable property - // configurable must be true to allow the property to be - // deleted when data is removed - } else { - Object.defineProperty( owner, this.expando, { - value: value, - configurable: true - } ); - } - } - } - - return value; - }, - set: function( owner, data, value ) { - var prop, - cache = this.cache( owner ); - - // Handle: [ owner, key, value ] args - // Always use camelCase key (gh-2257) - if ( typeof data === "string" ) { - cache[ camelCase( data ) ] = value; - - // Handle: [ owner, { properties } ] args - } else { - - // Copy the properties one-by-one to the cache object - for ( prop in data ) { - cache[ camelCase( prop ) ] = data[ prop ]; - } - } - return cache; - }, - get: function( owner, key ) { - return key === undefined ? - this.cache( owner ) : - - // Always use camelCase key (gh-2257) - owner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ]; - }, - access: function( owner, key, value ) { - - // In cases where either: - // - // 1. No key was specified - // 2. A string key was specified, but no value provided - // - // Take the "read" path and allow the get method to determine - // which value to return, respectively either: - // - // 1. The entire cache object - // 2. The data stored at the key - // - if ( key === undefined || - ( ( key && typeof key === "string" ) && value === undefined ) ) { - - return this.get( owner, key ); - } - - // When the key is not a string, or both a key and value - // are specified, set or extend (existing objects) with either: - // - // 1. An object of properties - // 2. A key and value - // - this.set( owner, key, value ); - - // Since the "set" path can have two possible entry points - // return the expected data based on which path was taken[*] - return value !== undefined ? value : key; - }, - remove: function( owner, key ) { - var i, - cache = owner[ this.expando ]; - - if ( cache === undefined ) { - return; - } - - if ( key !== undefined ) { - - // Support array or space separated string of keys - if ( Array.isArray( key ) ) { - - // If key is an array of keys... - // We always set camelCase keys, so remove that. - key = key.map( camelCase ); - } else { - key = camelCase( key ); - - // If a key with the spaces exists, use it. - // Otherwise, create an array by matching non-whitespace - key = key in cache ? - [ key ] : - ( key.match( rnothtmlwhite ) || [] ); - } - - i = key.length; - - while ( i-- ) { - delete cache[ key[ i ] ]; - } - } - - // Remove the expando if there's no more data - if ( key === undefined || jQuery.isEmptyObject( cache ) ) { - - // Support: Chrome <=35 - 45 - // Webkit & Blink performance suffers when deleting properties - // from DOM nodes, so set to undefined instead - // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted) - if ( owner.nodeType ) { - owner[ this.expando ] = undefined; - } else { - delete owner[ this.expando ]; - } - } - }, - hasData: function( owner ) { - var cache = owner[ this.expando ]; - return cache !== undefined && !jQuery.isEmptyObject( cache ); - } -}; -var dataPriv = new Data(); - -var dataUser = new Data(); - - - -// Implementation Summary -// -// 1. Enforce API surface and semantic compatibility with 1.9.x branch -// 2. Improve the module's maintainability by reducing the storage -// paths to a single mechanism. -// 3. Use the same single mechanism to support "private" and "user" data. -// 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData) -// 5. Avoid exposing implementation details on user objects (eg. expando properties) -// 6. Provide a clear path for implementation upgrade to WeakMap in 2014 - -var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, - rmultiDash = /[A-Z]/g; - -function getData( data ) { - if ( data === "true" ) { - return true; - } - - if ( data === "false" ) { - return false; - } - - if ( data === "null" ) { - return null; - } - - // Only convert to a number if it doesn't change the string - if ( data === +data + "" ) { - return +data; - } - - if ( rbrace.test( data ) ) { - return JSON.parse( data ); - } - - return data; -} - -function dataAttr( elem, key, data ) { - var name; - - // If nothing was found internally, try to fetch any - // data from the HTML5 data-* attribute - if ( data === undefined && elem.nodeType === 1 ) { - name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase(); - data = elem.getAttribute( name ); - - if ( typeof data === "string" ) { - try { - data = getData( data ); - } catch ( e ) {} - - // Make sure we set the data so it isn't changed later - dataUser.set( elem, key, data ); - } else { - data = undefined; - } - } - return data; -} - -jQuery.extend( { - hasData: function( elem ) { - return dataUser.hasData( elem ) || dataPriv.hasData( elem ); - }, - - data: function( elem, name, data ) { - return dataUser.access( elem, name, data ); - }, - - removeData: function( elem, name ) { - dataUser.remove( elem, name ); - }, - - // TODO: Now that all calls to _data and _removeData have been replaced - // with direct calls to dataPriv methods, these can be deprecated. - _data: function( elem, name, data ) { - return dataPriv.access( elem, name, data ); - }, - - _removeData: function( elem, name ) { - dataPriv.remove( elem, name ); - } -} ); - -jQuery.fn.extend( { - data: function( key, value ) { - var i, name, data, - elem = this[ 0 ], - attrs = elem && elem.attributes; - - // Gets all values - if ( key === undefined ) { - if ( this.length ) { - data = dataUser.get( elem ); - - if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) { - i = attrs.length; - while ( i-- ) { - - // Support: IE 11 only - // The attrs elements can be null (trac-14894) - if ( attrs[ i ] ) { - name = attrs[ i ].name; - if ( name.indexOf( "data-" ) === 0 ) { - name = camelCase( name.slice( 5 ) ); - dataAttr( elem, name, data[ name ] ); - } - } - } - dataPriv.set( elem, "hasDataAttrs", true ); - } - } - - return data; - } - - // Sets multiple values - if ( typeof key === "object" ) { - return this.each( function() { - dataUser.set( this, key ); - } ); - } - - return access( this, function( value ) { - var data; - - // The calling jQuery object (element matches) is not empty - // (and therefore has an element appears at this[ 0 ]) and the - // `value` parameter was not undefined. An empty jQuery object - // will result in `undefined` for elem = this[ 0 ] which will - // throw an exception if an attempt to read a data cache is made. - if ( elem && value === undefined ) { - - // Attempt to get data from the cache - // The key will always be camelCased in Data - data = dataUser.get( elem, key ); - if ( data !== undefined ) { - return data; - } - - // Attempt to "discover" the data in - // HTML5 custom data-* attrs - data = dataAttr( elem, key ); - if ( data !== undefined ) { - return data; - } - - // We tried really hard, but the data doesn't exist. - return; - } - - // Set the data... - this.each( function() { - - // We always store the camelCased key - dataUser.set( this, key, value ); - } ); - }, null, value, arguments.length > 1, null, true ); - }, - - removeData: function( key ) { - return this.each( function() { - dataUser.remove( this, key ); - } ); - } -} ); - - -jQuery.extend( { - queue: function( elem, type, data ) { - var queue; - - if ( elem ) { - type = ( type || "fx" ) + "queue"; - queue = dataPriv.get( elem, type ); - - // Speed up dequeue by getting out quickly if this is just a lookup - if ( data ) { - if ( !queue || Array.isArray( data ) ) { - queue = dataPriv.access( elem, type, jQuery.makeArray( data ) ); - } else { - queue.push( data ); - } - } - return queue || []; - } - }, - - dequeue: function( elem, type ) { - type = type || "fx"; - - var queue = jQuery.queue( elem, type ), - startLength = queue.length, - fn = queue.shift(), - hooks = jQuery._queueHooks( elem, type ), - next = function() { - jQuery.dequeue( elem, type ); - }; - - // If the fx queue is dequeued, always remove the progress sentinel - if ( fn === "inprogress" ) { - fn = queue.shift(); - startLength--; - } - - if ( fn ) { - - // Add a progress sentinel to prevent the fx queue from being - // automatically dequeued - if ( type === "fx" ) { - queue.unshift( "inprogress" ); - } - - // Clear up the last queue stop function - delete hooks.stop; - fn.call( elem, next, hooks ); - } - - if ( !startLength && hooks ) { - hooks.empty.fire(); - } - }, - - // Not public - generate a queueHooks object, or return the current one - _queueHooks: function( elem, type ) { - var key = type + "queueHooks"; - return dataPriv.get( elem, key ) || dataPriv.access( elem, key, { - empty: jQuery.Callbacks( "once memory" ).add( function() { - dataPriv.remove( elem, [ type + "queue", key ] ); - } ) - } ); - } -} ); - -jQuery.fn.extend( { - queue: function( type, data ) { - var setter = 2; - - if ( typeof type !== "string" ) { - data = type; - type = "fx"; - setter--; - } - - if ( arguments.length < setter ) { - return jQuery.queue( this[ 0 ], type ); - } - - return data === undefined ? - this : - this.each( function() { - var queue = jQuery.queue( this, type, data ); - - // Ensure a hooks for this queue - jQuery._queueHooks( this, type ); - - if ( type === "fx" && queue[ 0 ] !== "inprogress" ) { - jQuery.dequeue( this, type ); - } - } ); - }, - dequeue: function( type ) { - return this.each( function() { - jQuery.dequeue( this, type ); - } ); - }, - clearQueue: function( type ) { - return this.queue( type || "fx", [] ); - }, - - // Get a promise resolved when queues of a certain type - // are emptied (fx is the type by default) - promise: function( type, obj ) { - var tmp, - count = 1, - defer = jQuery.Deferred(), - elements = this, - i = this.length, - resolve = function() { - if ( !( --count ) ) { - defer.resolveWith( elements, [ elements ] ); - } - }; - - if ( typeof type !== "string" ) { - obj = type; - type = undefined; - } - type = type || "fx"; - - while ( i-- ) { - tmp = dataPriv.get( elements[ i ], type + "queueHooks" ); - if ( tmp && tmp.empty ) { - count++; - tmp.empty.add( resolve ); - } - } - resolve(); - return defer.promise( obj ); - } -} ); -var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source; - -var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ); - - -var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; - -var documentElement = document.documentElement; - - - - var isAttached = function( elem ) { - return jQuery.contains( elem.ownerDocument, elem ); - }, - composed = { composed: true }; - - // Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only - // Check attachment across shadow DOM boundaries when possible (gh-3504) - // Support: iOS 10.0-10.2 only - // Early iOS 10 versions support `attachShadow` but not `getRootNode`, - // leading to errors. We need to check for `getRootNode`. - if ( documentElement.getRootNode ) { - isAttached = function( elem ) { - return jQuery.contains( elem.ownerDocument, elem ) || - elem.getRootNode( composed ) === elem.ownerDocument; - }; - } -var isHiddenWithinTree = function( elem, el ) { - - // isHiddenWithinTree might be called from jQuery#filter function; - // in that case, element will be second argument - elem = el || elem; - - // Inline style trumps all - return elem.style.display === "none" || - elem.style.display === "" && - - // Otherwise, check computed style - // Support: Firefox <=43 - 45 - // Disconnected elements can have computed display: none, so first confirm that elem is - // in the document. - isAttached( elem ) && - - jQuery.css( elem, "display" ) === "none"; - }; - - - -function adjustCSS( elem, prop, valueParts, tween ) { - var adjusted, scale, - maxIterations = 20, - currentValue = tween ? - function() { - return tween.cur(); - } : - function() { - return jQuery.css( elem, prop, "" ); - }, - initial = currentValue(), - unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), - - // Starting value computation is required for potential unit mismatches - initialInUnit = elem.nodeType && - ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) && - rcssNum.exec( jQuery.css( elem, prop ) ); - - if ( initialInUnit && initialInUnit[ 3 ] !== unit ) { - - // Support: Firefox <=54 - // Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144) - initial = initial / 2; - - // Trust units reported by jQuery.css - unit = unit || initialInUnit[ 3 ]; - - // Iteratively approximate from a nonzero starting point - initialInUnit = +initial || 1; - - while ( maxIterations-- ) { - - // Evaluate and update our best guess (doubling guesses that zero out). - // Finish if the scale equals or crosses 1 (making the old*new product non-positive). - jQuery.style( elem, prop, initialInUnit + unit ); - if ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) { - maxIterations = 0; - } - initialInUnit = initialInUnit / scale; - - } - - initialInUnit = initialInUnit * 2; - jQuery.style( elem, prop, initialInUnit + unit ); - - // Make sure we update the tween properties later on - valueParts = valueParts || []; - } - - if ( valueParts ) { - initialInUnit = +initialInUnit || +initial || 0; - - // Apply relative offset (+=/-=) if specified - adjusted = valueParts[ 1 ] ? - initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] : - +valueParts[ 2 ]; - if ( tween ) { - tween.unit = unit; - tween.start = initialInUnit; - tween.end = adjusted; - } - } - return adjusted; -} - - -var defaultDisplayMap = {}; - -function getDefaultDisplay( elem ) { - var temp, - doc = elem.ownerDocument, - nodeName = elem.nodeName, - display = defaultDisplayMap[ nodeName ]; - - if ( display ) { - return display; - } - - temp = doc.body.appendChild( doc.createElement( nodeName ) ); - display = jQuery.css( temp, "display" ); - - temp.parentNode.removeChild( temp ); - - if ( display === "none" ) { - display = "block"; - } - defaultDisplayMap[ nodeName ] = display; - - return display; -} - -function showHide( elements, show ) { - var display, elem, - values = [], - index = 0, - length = elements.length; - - // Determine new display value for elements that need to change - for ( ; index < length; index++ ) { - elem = elements[ index ]; - if ( !elem.style ) { - continue; - } - - display = elem.style.display; - if ( show ) { - - // Since we force visibility upon cascade-hidden elements, an immediate (and slow) - // check is required in this first loop unless we have a nonempty display value (either - // inline or about-to-be-restored) - if ( display === "none" ) { - values[ index ] = dataPriv.get( elem, "display" ) || null; - if ( !values[ index ] ) { - elem.style.display = ""; - } - } - if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) { - values[ index ] = getDefaultDisplay( elem ); - } - } else { - if ( display !== "none" ) { - values[ index ] = "none"; - - // Remember what we're overwriting - dataPriv.set( elem, "display", display ); - } - } - } - - // Set the display of the elements in a second loop to avoid constant reflow - for ( index = 0; index < length; index++ ) { - if ( values[ index ] != null ) { - elements[ index ].style.display = values[ index ]; - } - } - - return elements; -} - -jQuery.fn.extend( { - show: function() { - return showHide( this, true ); - }, - hide: function() { - return showHide( this ); - }, - toggle: function( state ) { - if ( typeof state === "boolean" ) { - return state ? this.show() : this.hide(); - } - - return this.each( function() { - if ( isHiddenWithinTree( this ) ) { - jQuery( this ).show(); - } else { - jQuery( this ).hide(); - } - } ); - } -} ); -var rcheckableType = ( /^(?:checkbox|radio)$/i ); - -var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]*)/i ); - -var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i ); - - - -( function() { - var fragment = document.createDocumentFragment(), - div = fragment.appendChild( document.createElement( "div" ) ), - input = document.createElement( "input" ); - - // Support: Android 4.0 - 4.3 only - // Check state lost if the name is set (trac-11217) - // Support: Windows Web Apps (WWA) - // `name` and `type` must use .setAttribute for WWA (trac-14901) - input.setAttribute( "type", "radio" ); - input.setAttribute( "checked", "checked" ); - input.setAttribute( "name", "t" ); - - div.appendChild( input ); - - // Support: Android <=4.1 only - // Older WebKit doesn't clone checked state correctly in fragments - support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; - - // Support: IE <=11 only - // Make sure textarea (and checkbox) defaultValue is properly cloned - div.innerHTML = ""; - support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; - - // Support: IE <=9 only - // IE <=9 replaces "; - support.option = !!div.lastChild; -} )(); - - -// We have to close these tags to support XHTML (trac-13200) -var wrapMap = { - - // XHTML parsers do not magically insert elements in the - // same way that tag soup parsers do. So we cannot shorten - // this by omitting or other required elements. - thead: [ 1, "", "
      " ], - col: [ 2, "", "
      " ], - tr: [ 2, "", "
      " ], - td: [ 3, "", "
      " ], - - _default: [ 0, "", "" ] -}; - -wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; -wrapMap.th = wrapMap.td; - -// Support: IE <=9 only -if ( !support.option ) { - wrapMap.optgroup = wrapMap.option = [ 1, "" ]; -} - - -function getAll( context, tag ) { - - // Support: IE <=9 - 11 only - // Use typeof to avoid zero-argument method invocation on host objects (trac-15151) - var ret; - - if ( typeof context.getElementsByTagName !== "undefined" ) { - ret = context.getElementsByTagName( tag || "*" ); - - } else if ( typeof context.querySelectorAll !== "undefined" ) { - ret = context.querySelectorAll( tag || "*" ); - - } else { - ret = []; - } - - if ( tag === undefined || tag && nodeName( context, tag ) ) { - return jQuery.merge( [ context ], ret ); - } - - return ret; -} - - -// Mark scripts as having already been evaluated -function setGlobalEval( elems, refElements ) { - var i = 0, - l = elems.length; - - for ( ; i < l; i++ ) { - dataPriv.set( - elems[ i ], - "globalEval", - !refElements || dataPriv.get( refElements[ i ], "globalEval" ) - ); - } -} - - -var rhtml = /<|&#?\w+;/; - -function buildFragment( elems, context, scripts, selection, ignored ) { - var elem, tmp, tag, wrap, attached, j, - fragment = context.createDocumentFragment(), - nodes = [], - i = 0, - l = elems.length; - - for ( ; i < l; i++ ) { - elem = elems[ i ]; - - if ( elem || elem === 0 ) { - - // Add nodes directly - if ( toType( elem ) === "object" ) { - - // Support: Android <=4.0 only, PhantomJS 1 only - // push.apply(_, arraylike) throws on ancient WebKit - jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); - - // Convert non-html into a text node - } else if ( !rhtml.test( elem ) ) { - nodes.push( context.createTextNode( elem ) ); - - // Convert html into DOM nodes - } else { - tmp = tmp || fragment.appendChild( context.createElement( "div" ) ); - - // Deserialize a standard representation - tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase(); - wrap = wrapMap[ tag ] || wrapMap._default; - tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ]; - - // Descend through wrappers to the right content - j = wrap[ 0 ]; - while ( j-- ) { - tmp = tmp.lastChild; - } - - // Support: Android <=4.0 only, PhantomJS 1 only - // push.apply(_, arraylike) throws on ancient WebKit - jQuery.merge( nodes, tmp.childNodes ); - - // Remember the top-level container - tmp = fragment.firstChild; - - // Ensure the created nodes are orphaned (trac-12392) - tmp.textContent = ""; - } - } - } - - // Remove wrapper from fragment - fragment.textContent = ""; - - i = 0; - while ( ( elem = nodes[ i++ ] ) ) { - - // Skip elements already in the context collection (trac-4087) - if ( selection && jQuery.inArray( elem, selection ) > -1 ) { - if ( ignored ) { - ignored.push( elem ); - } - continue; - } - - attached = isAttached( elem ); - - // Append to fragment - tmp = getAll( fragment.appendChild( elem ), "script" ); - - // Preserve script evaluation history - if ( attached ) { - setGlobalEval( tmp ); - } - - // Capture executables - if ( scripts ) { - j = 0; - while ( ( elem = tmp[ j++ ] ) ) { - if ( rscriptType.test( elem.type || "" ) ) { - scripts.push( elem ); - } - } - } - } - - return fragment; -} - - -var rtypenamespace = /^([^.]*)(?:\.(.+)|)/; - -function returnTrue() { - return true; -} - -function returnFalse() { - return false; -} - -function on( elem, types, selector, data, fn, one ) { - var origFn, type; - - // Types can be a map of types/handlers - if ( typeof types === "object" ) { - - // ( types-Object, selector, data ) - if ( typeof selector !== "string" ) { - - // ( types-Object, data ) - data = data || selector; - selector = undefined; - } - for ( type in types ) { - on( elem, type, selector, data, types[ type ], one ); - } - return elem; - } - - if ( data == null && fn == null ) { - - // ( types, fn ) - fn = selector; - data = selector = undefined; - } else if ( fn == null ) { - if ( typeof selector === "string" ) { - - // ( types, selector, fn ) - fn = data; - data = undefined; - } else { - - // ( types, data, fn ) - fn = data; - data = selector; - selector = undefined; - } - } - if ( fn === false ) { - fn = returnFalse; - } else if ( !fn ) { - return elem; - } - - if ( one === 1 ) { - origFn = fn; - fn = function( event ) { - - // Can use an empty set, since event contains the info - jQuery().off( event ); - return origFn.apply( this, arguments ); - }; - - // Use same guid so caller can remove using origFn - fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); - } - return elem.each( function() { - jQuery.event.add( this, types, fn, data, selector ); - } ); -} - -/* - * Helper functions for managing events -- not part of the public interface. - * Props to Dean Edwards' addEvent library for many of the ideas. - */ -jQuery.event = { - - global: {}, - - add: function( elem, types, handler, data, selector ) { - - var handleObjIn, eventHandle, tmp, - events, t, handleObj, - special, handlers, type, namespaces, origType, - elemData = dataPriv.get( elem ); - - // Only attach events to objects that accept data - if ( !acceptData( elem ) ) { - return; - } - - // Caller can pass in an object of custom data in lieu of the handler - if ( handler.handler ) { - handleObjIn = handler; - handler = handleObjIn.handler; - selector = handleObjIn.selector; - } - - // Ensure that invalid selectors throw exceptions at attach time - // Evaluate against documentElement in case elem is a non-element node (e.g., document) - if ( selector ) { - jQuery.find.matchesSelector( documentElement, selector ); - } - - // Make sure that the handler has a unique ID, used to find/remove it later - if ( !handler.guid ) { - handler.guid = jQuery.guid++; - } - - // Init the element's event structure and main handler, if this is the first - if ( !( events = elemData.events ) ) { - events = elemData.events = Object.create( null ); - } - if ( !( eventHandle = elemData.handle ) ) { - eventHandle = elemData.handle = function( e ) { - - // Discard the second event of a jQuery.event.trigger() and - // when an event is called after a page has unloaded - return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ? - jQuery.event.dispatch.apply( elem, arguments ) : undefined; - }; - } - - // Handle multiple events separated by a space - types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; - t = types.length; - while ( t-- ) { - tmp = rtypenamespace.exec( types[ t ] ) || []; - type = origType = tmp[ 1 ]; - namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); - - // There *must* be a type, no attaching namespace-only handlers - if ( !type ) { - continue; - } - - // If event changes its type, use the special event handlers for the changed type - special = jQuery.event.special[ type ] || {}; - - // If selector defined, determine special event api type, otherwise given type - type = ( selector ? special.delegateType : special.bindType ) || type; - - // Update special based on newly reset type - special = jQuery.event.special[ type ] || {}; - - // handleObj is passed to all event handlers - handleObj = jQuery.extend( { - type: type, - origType: origType, - data: data, - handler: handler, - guid: handler.guid, - selector: selector, - needsContext: selector && jQuery.expr.match.needsContext.test( selector ), - namespace: namespaces.join( "." ) - }, handleObjIn ); - - // Init the event handler queue if we're the first - if ( !( handlers = events[ type ] ) ) { - handlers = events[ type ] = []; - handlers.delegateCount = 0; - - // Only use addEventListener if the special events handler returns false - if ( !special.setup || - special.setup.call( elem, data, namespaces, eventHandle ) === false ) { - - if ( elem.addEventListener ) { - elem.addEventListener( type, eventHandle ); - } - } - } - - if ( special.add ) { - special.add.call( elem, handleObj ); - - if ( !handleObj.handler.guid ) { - handleObj.handler.guid = handler.guid; - } - } - - // Add to the element's handler list, delegates in front - if ( selector ) { - handlers.splice( handlers.delegateCount++, 0, handleObj ); - } else { - handlers.push( handleObj ); - } - - // Keep track of which events have ever been used, for event optimization - jQuery.event.global[ type ] = true; - } - - }, - - // Detach an event or set of events from an element - remove: function( elem, types, handler, selector, mappedTypes ) { - - var j, origCount, tmp, - events, t, handleObj, - special, handlers, type, namespaces, origType, - elemData = dataPriv.hasData( elem ) && dataPriv.get( elem ); - - if ( !elemData || !( events = elemData.events ) ) { - return; - } - - // Once for each type.namespace in types; type may be omitted - types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; - t = types.length; - while ( t-- ) { - tmp = rtypenamespace.exec( types[ t ] ) || []; - type = origType = tmp[ 1 ]; - namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); - - // Unbind all events (on this namespace, if provided) for the element - if ( !type ) { - for ( type in events ) { - jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); - } - continue; - } - - special = jQuery.event.special[ type ] || {}; - type = ( selector ? special.delegateType : special.bindType ) || type; - handlers = events[ type ] || []; - tmp = tmp[ 2 ] && - new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ); - - // Remove matching events - origCount = j = handlers.length; - while ( j-- ) { - handleObj = handlers[ j ]; - - if ( ( mappedTypes || origType === handleObj.origType ) && - ( !handler || handler.guid === handleObj.guid ) && - ( !tmp || tmp.test( handleObj.namespace ) ) && - ( !selector || selector === handleObj.selector || - selector === "**" && handleObj.selector ) ) { - handlers.splice( j, 1 ); - - if ( handleObj.selector ) { - handlers.delegateCount--; - } - if ( special.remove ) { - special.remove.call( elem, handleObj ); - } - } - } - - // Remove generic event handler if we removed something and no more handlers exist - // (avoids potential for endless recursion during removal of special event handlers) - if ( origCount && !handlers.length ) { - if ( !special.teardown || - special.teardown.call( elem, namespaces, elemData.handle ) === false ) { - - jQuery.removeEvent( elem, type, elemData.handle ); - } - - delete events[ type ]; - } - } - - // Remove data and the expando if it's no longer used - if ( jQuery.isEmptyObject( events ) ) { - dataPriv.remove( elem, "handle events" ); - } - }, - - dispatch: function( nativeEvent ) { - - var i, j, ret, matched, handleObj, handlerQueue, - args = new Array( arguments.length ), - - // Make a writable jQuery.Event from the native event object - event = jQuery.event.fix( nativeEvent ), - - handlers = ( - dataPriv.get( this, "events" ) || Object.create( null ) - )[ event.type ] || [], - special = jQuery.event.special[ event.type ] || {}; - - // Use the fix-ed jQuery.Event rather than the (read-only) native event - args[ 0 ] = event; - - for ( i = 1; i < arguments.length; i++ ) { - args[ i ] = arguments[ i ]; - } - - event.delegateTarget = this; - - // Call the preDispatch hook for the mapped type, and let it bail if desired - if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { - return; - } - - // Determine handlers - handlerQueue = jQuery.event.handlers.call( this, event, handlers ); - - // Run delegates first; they may want to stop propagation beneath us - i = 0; - while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) { - event.currentTarget = matched.elem; - - j = 0; - while ( ( handleObj = matched.handlers[ j++ ] ) && - !event.isImmediatePropagationStopped() ) { - - // If the event is namespaced, then each handler is only invoked if it is - // specially universal or its namespaces are a superset of the event's. - if ( !event.rnamespace || handleObj.namespace === false || - event.rnamespace.test( handleObj.namespace ) ) { - - event.handleObj = handleObj; - event.data = handleObj.data; - - ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle || - handleObj.handler ).apply( matched.elem, args ); - - if ( ret !== undefined ) { - if ( ( event.result = ret ) === false ) { - event.preventDefault(); - event.stopPropagation(); - } - } - } - } - } - - // Call the postDispatch hook for the mapped type - if ( special.postDispatch ) { - special.postDispatch.call( this, event ); - } - - return event.result; - }, - - handlers: function( event, handlers ) { - var i, handleObj, sel, matchedHandlers, matchedSelectors, - handlerQueue = [], - delegateCount = handlers.delegateCount, - cur = event.target; - - // Find delegate handlers - if ( delegateCount && - - // Support: IE <=9 - // Black-hole SVG instance trees (trac-13180) - cur.nodeType && - - // Support: Firefox <=42 - // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861) - // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click - // Support: IE 11 only - // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343) - !( event.type === "click" && event.button >= 1 ) ) { - - for ( ; cur !== this; cur = cur.parentNode || this ) { - - // Don't check non-elements (trac-13208) - // Don't process clicks on disabled elements (trac-6911, trac-8165, trac-11382, trac-11764) - if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) { - matchedHandlers = []; - matchedSelectors = {}; - for ( i = 0; i < delegateCount; i++ ) { - handleObj = handlers[ i ]; - - // Don't conflict with Object.prototype properties (trac-13203) - sel = handleObj.selector + " "; - - if ( matchedSelectors[ sel ] === undefined ) { - matchedSelectors[ sel ] = handleObj.needsContext ? - jQuery( sel, this ).index( cur ) > -1 : - jQuery.find( sel, this, null, [ cur ] ).length; - } - if ( matchedSelectors[ sel ] ) { - matchedHandlers.push( handleObj ); - } - } - if ( matchedHandlers.length ) { - handlerQueue.push( { elem: cur, handlers: matchedHandlers } ); - } - } - } - } - - // Add the remaining (directly-bound) handlers - cur = this; - if ( delegateCount < handlers.length ) { - handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } ); - } - - return handlerQueue; - }, - - addProp: function( name, hook ) { - Object.defineProperty( jQuery.Event.prototype, name, { - enumerable: true, - configurable: true, - - get: isFunction( hook ) ? - function() { - if ( this.originalEvent ) { - return hook( this.originalEvent ); - } - } : - function() { - if ( this.originalEvent ) { - return this.originalEvent[ name ]; - } - }, - - set: function( value ) { - Object.defineProperty( this, name, { - enumerable: true, - configurable: true, - writable: true, - value: value - } ); - } - } ); - }, - - fix: function( originalEvent ) { - return originalEvent[ jQuery.expando ] ? - originalEvent : - new jQuery.Event( originalEvent ); - }, - - special: { - load: { - - // Prevent triggered image.load events from bubbling to window.load - noBubble: true - }, - click: { - - // Utilize native event to ensure correct state for checkable inputs - setup: function( data ) { - - // For mutual compressibility with _default, replace `this` access with a local var. - // `|| data` is dead code meant only to preserve the variable through minification. - var el = this || data; - - // Claim the first handler - if ( rcheckableType.test( el.type ) && - el.click && nodeName( el, "input" ) ) { - - // dataPriv.set( el, "click", ... ) - leverageNative( el, "click", true ); - } - - // Return false to allow normal processing in the caller - return false; - }, - trigger: function( data ) { - - // For mutual compressibility with _default, replace `this` access with a local var. - // `|| data` is dead code meant only to preserve the variable through minification. - var el = this || data; - - // Force setup before triggering a click - if ( rcheckableType.test( el.type ) && - el.click && nodeName( el, "input" ) ) { - - leverageNative( el, "click" ); - } - - // Return non-false to allow normal event-path propagation - return true; - }, - - // For cross-browser consistency, suppress native .click() on links - // Also prevent it if we're currently inside a leveraged native-event stack - _default: function( event ) { - var target = event.target; - return rcheckableType.test( target.type ) && - target.click && nodeName( target, "input" ) && - dataPriv.get( target, "click" ) || - nodeName( target, "a" ); - } - }, - - beforeunload: { - postDispatch: function( event ) { - - // Support: Firefox 20+ - // Firefox doesn't alert if the returnValue field is not set. - if ( event.result !== undefined && event.originalEvent ) { - event.originalEvent.returnValue = event.result; - } - } - } - } -}; - -// Ensure the presence of an event listener that handles manually-triggered -// synthetic events by interrupting progress until reinvoked in response to -// *native* events that it fires directly, ensuring that state changes have -// already occurred before other listeners are invoked. -function leverageNative( el, type, isSetup ) { - - // Missing `isSetup` indicates a trigger call, which must force setup through jQuery.event.add - if ( !isSetup ) { - if ( dataPriv.get( el, type ) === undefined ) { - jQuery.event.add( el, type, returnTrue ); - } - return; - } - - // Register the controller as a special universal handler for all event namespaces - dataPriv.set( el, type, false ); - jQuery.event.add( el, type, { - namespace: false, - handler: function( event ) { - var result, - saved = dataPriv.get( this, type ); - - if ( ( event.isTrigger & 1 ) && this[ type ] ) { - - // Interrupt processing of the outer synthetic .trigger()ed event - if ( !saved ) { - - // Store arguments for use when handling the inner native event - // There will always be at least one argument (an event object), so this array - // will not be confused with a leftover capture object. - saved = slice.call( arguments ); - dataPriv.set( this, type, saved ); - - // Trigger the native event and capture its result - this[ type ](); - result = dataPriv.get( this, type ); - dataPriv.set( this, type, false ); - - if ( saved !== result ) { - - // Cancel the outer synthetic event - event.stopImmediatePropagation(); - event.preventDefault(); - - return result; - } - - // If this is an inner synthetic event for an event with a bubbling surrogate - // (focus or blur), assume that the surrogate already propagated from triggering - // the native event and prevent that from happening again here. - // This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the - // bubbling surrogate propagates *after* the non-bubbling base), but that seems - // less bad than duplication. - } else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) { - event.stopPropagation(); - } - - // If this is a native event triggered above, everything is now in order - // Fire an inner synthetic event with the original arguments - } else if ( saved ) { - - // ...and capture the result - dataPriv.set( this, type, jQuery.event.trigger( - saved[ 0 ], - saved.slice( 1 ), - this - ) ); - - // Abort handling of the native event by all jQuery handlers while allowing - // native handlers on the same element to run. On target, this is achieved - // by stopping immediate propagation just on the jQuery event. However, - // the native event is re-wrapped by a jQuery one on each level of the - // propagation so the only way to stop it for jQuery is to stop it for - // everyone via native `stopPropagation()`. This is not a problem for - // focus/blur which don't bubble, but it does also stop click on checkboxes - // and radios. We accept this limitation. - event.stopPropagation(); - event.isImmediatePropagationStopped = returnTrue; - } - } - } ); -} - -jQuery.removeEvent = function( elem, type, handle ) { - - // This "if" is needed for plain objects - if ( elem.removeEventListener ) { - elem.removeEventListener( type, handle ); - } -}; - -jQuery.Event = function( src, props ) { - - // Allow instantiation without the 'new' keyword - if ( !( this instanceof jQuery.Event ) ) { - return new jQuery.Event( src, props ); - } - - // Event object - if ( src && src.type ) { - this.originalEvent = src; - this.type = src.type; - - // Events bubbling up the document may have been marked as prevented - // by a handler lower down the tree; reflect the correct value. - this.isDefaultPrevented = src.defaultPrevented || - src.defaultPrevented === undefined && - - // Support: Android <=2.3 only - src.returnValue === false ? - returnTrue : - returnFalse; - - // Create target properties - // Support: Safari <=6 - 7 only - // Target should not be a text node (trac-504, trac-13143) - this.target = ( src.target && src.target.nodeType === 3 ) ? - src.target.parentNode : - src.target; - - this.currentTarget = src.currentTarget; - this.relatedTarget = src.relatedTarget; - - // Event type - } else { - this.type = src; - } - - // Put explicitly provided properties onto the event object - if ( props ) { - jQuery.extend( this, props ); - } - - // Create a timestamp if incoming event doesn't have one - this.timeStamp = src && src.timeStamp || Date.now(); - - // Mark it as fixed - this[ jQuery.expando ] = true; -}; - -// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding -// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html -jQuery.Event.prototype = { - constructor: jQuery.Event, - isDefaultPrevented: returnFalse, - isPropagationStopped: returnFalse, - isImmediatePropagationStopped: returnFalse, - isSimulated: false, - - preventDefault: function() { - var e = this.originalEvent; - - this.isDefaultPrevented = returnTrue; - - if ( e && !this.isSimulated ) { - e.preventDefault(); - } - }, - stopPropagation: function() { - var e = this.originalEvent; - - this.isPropagationStopped = returnTrue; - - if ( e && !this.isSimulated ) { - e.stopPropagation(); - } - }, - stopImmediatePropagation: function() { - var e = this.originalEvent; - - this.isImmediatePropagationStopped = returnTrue; - - if ( e && !this.isSimulated ) { - e.stopImmediatePropagation(); - } - - this.stopPropagation(); - } -}; - -// Includes all common event props including KeyEvent and MouseEvent specific props -jQuery.each( { - altKey: true, - bubbles: true, - cancelable: true, - changedTouches: true, - ctrlKey: true, - detail: true, - eventPhase: true, - metaKey: true, - pageX: true, - pageY: true, - shiftKey: true, - view: true, - "char": true, - code: true, - charCode: true, - key: true, - keyCode: true, - button: true, - buttons: true, - clientX: true, - clientY: true, - offsetX: true, - offsetY: true, - pointerId: true, - pointerType: true, - screenX: true, - screenY: true, - targetTouches: true, - toElement: true, - touches: true, - which: true -}, jQuery.event.addProp ); - -jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateType ) { - - function focusMappedHandler( nativeEvent ) { - if ( document.documentMode ) { - - // Support: IE 11+ - // Attach a single focusin/focusout handler on the document while someone wants - // focus/blur. This is because the former are synchronous in IE while the latter - // are async. In other browsers, all those handlers are invoked synchronously. - - // `handle` from private data would already wrap the event, but we need - // to change the `type` here. - var handle = dataPriv.get( this, "handle" ), - event = jQuery.event.fix( nativeEvent ); - event.type = nativeEvent.type === "focusin" ? "focus" : "blur"; - event.isSimulated = true; - - // First, handle focusin/focusout - handle( nativeEvent ); - - // ...then, handle focus/blur - // - // focus/blur don't bubble while focusin/focusout do; simulate the former by only - // invoking the handler at the lower level. - if ( event.target === event.currentTarget ) { - - // The setup part calls `leverageNative`, which, in turn, calls - // `jQuery.event.add`, so event handle will already have been set - // by this point. - handle( event ); - } - } else { - - // For non-IE browsers, attach a single capturing handler on the document - // while someone wants focusin/focusout. - jQuery.event.simulate( delegateType, nativeEvent.target, - jQuery.event.fix( nativeEvent ) ); - } - } - - jQuery.event.special[ type ] = { - - // Utilize native event if possible so blur/focus sequence is correct - setup: function() { - - var attaches; - - // Claim the first handler - // dataPriv.set( this, "focus", ... ) - // dataPriv.set( this, "blur", ... ) - leverageNative( this, type, true ); - - if ( document.documentMode ) { - - // Support: IE 9 - 11+ - // We use the same native handler for focusin & focus (and focusout & blur) - // so we need to coordinate setup & teardown parts between those events. - // Use `delegateType` as the key as `type` is already used by `leverageNative`. - attaches = dataPriv.get( this, delegateType ); - if ( !attaches ) { - this.addEventListener( delegateType, focusMappedHandler ); - } - dataPriv.set( this, delegateType, ( attaches || 0 ) + 1 ); - } else { - - // Return false to allow normal processing in the caller - return false; - } - }, - trigger: function() { - - // Force setup before trigger - leverageNative( this, type ); - - // Return non-false to allow normal event-path propagation - return true; - }, - - teardown: function() { - var attaches; - - if ( document.documentMode ) { - attaches = dataPriv.get( this, delegateType ) - 1; - if ( !attaches ) { - this.removeEventListener( delegateType, focusMappedHandler ); - dataPriv.remove( this, delegateType ); - } else { - dataPriv.set( this, delegateType, attaches ); - } - } else { - - // Return false to indicate standard teardown should be applied - return false; - } - }, - - // Suppress native focus or blur if we're currently inside - // a leveraged native-event stack - _default: function( event ) { - return dataPriv.get( event.target, type ); - }, - - delegateType: delegateType - }; - - // Support: Firefox <=44 - // Firefox doesn't have focus(in | out) events - // Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787 - // - // Support: Chrome <=48 - 49, Safari <=9.0 - 9.1 - // focus(in | out) events fire after focus & blur events, - // which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order - // Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857 - // - // Support: IE 9 - 11+ - // To preserve relative focusin/focus & focusout/blur event order guaranteed on the 3.x branch, - // attach a single handler for both events in IE. - jQuery.event.special[ delegateType ] = { - setup: function() { - - // Handle: regular nodes (via `this.ownerDocument`), window - // (via `this.document`) & document (via `this`). - var doc = this.ownerDocument || this.document || this, - dataHolder = document.documentMode ? this : doc, - attaches = dataPriv.get( dataHolder, delegateType ); - - // Support: IE 9 - 11+ - // We use the same native handler for focusin & focus (and focusout & blur) - // so we need to coordinate setup & teardown parts between those events. - // Use `delegateType` as the key as `type` is already used by `leverageNative`. - if ( !attaches ) { - if ( document.documentMode ) { - this.addEventListener( delegateType, focusMappedHandler ); - } else { - doc.addEventListener( type, focusMappedHandler, true ); - } - } - dataPriv.set( dataHolder, delegateType, ( attaches || 0 ) + 1 ); - }, - teardown: function() { - var doc = this.ownerDocument || this.document || this, - dataHolder = document.documentMode ? this : doc, - attaches = dataPriv.get( dataHolder, delegateType ) - 1; - - if ( !attaches ) { - if ( document.documentMode ) { - this.removeEventListener( delegateType, focusMappedHandler ); - } else { - doc.removeEventListener( type, focusMappedHandler, true ); - } - dataPriv.remove( dataHolder, delegateType ); - } else { - dataPriv.set( dataHolder, delegateType, attaches ); - } - } - }; -} ); - -// Create mouseenter/leave events using mouseover/out and event-time checks -// so that event delegation works in jQuery. -// Do the same for pointerenter/pointerleave and pointerover/pointerout -// -// Support: Safari 7 only -// Safari sends mouseenter too often; see: -// https://bugs.chromium.org/p/chromium/issues/detail?id=470258 -// for the description of the bug (it existed in older Chrome versions as well). -jQuery.each( { - mouseenter: "mouseover", - mouseleave: "mouseout", - pointerenter: "pointerover", - pointerleave: "pointerout" -}, function( orig, fix ) { - jQuery.event.special[ orig ] = { - delegateType: fix, - bindType: fix, - - handle: function( event ) { - var ret, - target = this, - related = event.relatedTarget, - handleObj = event.handleObj; - - // For mouseenter/leave call the handler if related is outside the target. - // NB: No relatedTarget if the mouse left/entered the browser window - if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) { - event.type = handleObj.origType; - ret = handleObj.handler.apply( this, arguments ); - event.type = fix; - } - return ret; - } - }; -} ); - -jQuery.fn.extend( { - - on: function( types, selector, data, fn ) { - return on( this, types, selector, data, fn ); - }, - one: function( types, selector, data, fn ) { - return on( this, types, selector, data, fn, 1 ); - }, - off: function( types, selector, fn ) { - var handleObj, type; - if ( types && types.preventDefault && types.handleObj ) { - - // ( event ) dispatched jQuery.Event - handleObj = types.handleObj; - jQuery( types.delegateTarget ).off( - handleObj.namespace ? - handleObj.origType + "." + handleObj.namespace : - handleObj.origType, - handleObj.selector, - handleObj.handler - ); - return this; - } - if ( typeof types === "object" ) { - - // ( types-object [, selector] ) - for ( type in types ) { - this.off( type, selector, types[ type ] ); - } - return this; - } - if ( selector === false || typeof selector === "function" ) { - - // ( types [, fn] ) - fn = selector; - selector = undefined; - } - if ( fn === false ) { - fn = returnFalse; - } - return this.each( function() { - jQuery.event.remove( this, types, fn, selector ); - } ); - } -} ); - - -var - - // Support: IE <=10 - 11, Edge 12 - 13 only - // In IE/Edge using regex groups here causes severe slowdowns. - // See https://connect.microsoft.com/IE/feedback/details/1736512/ - rnoInnerhtml = /\s*$/g; - -// Prefer a tbody over its parent table for containing new rows -function manipulationTarget( elem, content ) { - if ( nodeName( elem, "table" ) && - nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) { - - return jQuery( elem ).children( "tbody" )[ 0 ] || elem; - } - - return elem; -} - -// Replace/restore the type attribute of script elements for safe DOM manipulation -function disableScript( elem ) { - elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type; - return elem; -} -function restoreScript( elem ) { - if ( ( elem.type || "" ).slice( 0, 5 ) === "true/" ) { - elem.type = elem.type.slice( 5 ); - } else { - elem.removeAttribute( "type" ); - } - - return elem; -} - -function cloneCopyEvent( src, dest ) { - var i, l, type, pdataOld, udataOld, udataCur, events; - - if ( dest.nodeType !== 1 ) { - return; - } - - // 1. Copy private data: events, handlers, etc. - if ( dataPriv.hasData( src ) ) { - pdataOld = dataPriv.get( src ); - events = pdataOld.events; - - if ( events ) { - dataPriv.remove( dest, "handle events" ); - - for ( type in events ) { - for ( i = 0, l = events[ type ].length; i < l; i++ ) { - jQuery.event.add( dest, type, events[ type ][ i ] ); - } - } - } - } - - // 2. Copy user data - if ( dataUser.hasData( src ) ) { - udataOld = dataUser.access( src ); - udataCur = jQuery.extend( {}, udataOld ); - - dataUser.set( dest, udataCur ); - } -} - -// Fix IE bugs, see support tests -function fixInput( src, dest ) { - var nodeName = dest.nodeName.toLowerCase(); - - // Fails to persist the checked state of a cloned checkbox or radio button. - if ( nodeName === "input" && rcheckableType.test( src.type ) ) { - dest.checked = src.checked; - - // Fails to return the selected option to the default selected state when cloning options - } else if ( nodeName === "input" || nodeName === "textarea" ) { - dest.defaultValue = src.defaultValue; - } -} - -function domManip( collection, args, callback, ignored ) { - - // Flatten any nested arrays - args = flat( args ); - - var fragment, first, scripts, hasScripts, node, doc, - i = 0, - l = collection.length, - iNoClone = l - 1, - value = args[ 0 ], - valueIsFunction = isFunction( value ); - - // We can't cloneNode fragments that contain checked, in WebKit - if ( valueIsFunction || - ( l > 1 && typeof value === "string" && - !support.checkClone && rchecked.test( value ) ) ) { - return collection.each( function( index ) { - var self = collection.eq( index ); - if ( valueIsFunction ) { - args[ 0 ] = value.call( this, index, self.html() ); - } - domManip( self, args, callback, ignored ); - } ); - } - - if ( l ) { - fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored ); - first = fragment.firstChild; - - if ( fragment.childNodes.length === 1 ) { - fragment = first; - } - - // Require either new content or an interest in ignored elements to invoke the callback - if ( first || ignored ) { - scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); - hasScripts = scripts.length; - - // Use the original fragment for the last item - // instead of the first because it can end up - // being emptied incorrectly in certain situations (trac-8070). - for ( ; i < l; i++ ) { - node = fragment; - - if ( i !== iNoClone ) { - node = jQuery.clone( node, true, true ); - - // Keep references to cloned scripts for later restoration - if ( hasScripts ) { - - // Support: Android <=4.0 only, PhantomJS 1 only - // push.apply(_, arraylike) throws on ancient WebKit - jQuery.merge( scripts, getAll( node, "script" ) ); - } - } - - callback.call( collection[ i ], node, i ); - } - - if ( hasScripts ) { - doc = scripts[ scripts.length - 1 ].ownerDocument; - - // Re-enable scripts - jQuery.map( scripts, restoreScript ); - - // Evaluate executable scripts on first document insertion - for ( i = 0; i < hasScripts; i++ ) { - node = scripts[ i ]; - if ( rscriptType.test( node.type || "" ) && - !dataPriv.access( node, "globalEval" ) && - jQuery.contains( doc, node ) ) { - - if ( node.src && ( node.type || "" ).toLowerCase() !== "module" ) { - - // Optional AJAX dependency, but won't run scripts if not present - if ( jQuery._evalUrl && !node.noModule ) { - jQuery._evalUrl( node.src, { - nonce: node.nonce || node.getAttribute( "nonce" ) - }, doc ); - } - } else { - - // Unwrap a CDATA section containing script contents. This shouldn't be - // needed as in XML documents they're already not visible when - // inspecting element contents and in HTML documents they have no - // meaning but we're preserving that logic for backwards compatibility. - // This will be removed completely in 4.0. See gh-4904. - DOMEval( node.textContent.replace( rcleanScript, "" ), node, doc ); - } - } - } - } - } - } - - return collection; -} - -function remove( elem, selector, keepData ) { - var node, - nodes = selector ? jQuery.filter( selector, elem ) : elem, - i = 0; - - for ( ; ( node = nodes[ i ] ) != null; i++ ) { - if ( !keepData && node.nodeType === 1 ) { - jQuery.cleanData( getAll( node ) ); - } - - if ( node.parentNode ) { - if ( keepData && isAttached( node ) ) { - setGlobalEval( getAll( node, "script" ) ); - } - node.parentNode.removeChild( node ); - } - } - - return elem; -} - -jQuery.extend( { - htmlPrefilter: function( html ) { - return html; - }, - - clone: function( elem, dataAndEvents, deepDataAndEvents ) { - var i, l, srcElements, destElements, - clone = elem.cloneNode( true ), - inPage = isAttached( elem ); - - // Fix IE cloning issues - if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && - !jQuery.isXMLDoc( elem ) ) { - - // We eschew jQuery#find here for performance reasons: - // https://jsperf.com/getall-vs-sizzle/2 - destElements = getAll( clone ); - srcElements = getAll( elem ); - - for ( i = 0, l = srcElements.length; i < l; i++ ) { - fixInput( srcElements[ i ], destElements[ i ] ); - } - } - - // Copy the events from the original to the clone - if ( dataAndEvents ) { - if ( deepDataAndEvents ) { - srcElements = srcElements || getAll( elem ); - destElements = destElements || getAll( clone ); - - for ( i = 0, l = srcElements.length; i < l; i++ ) { - cloneCopyEvent( srcElements[ i ], destElements[ i ] ); - } - } else { - cloneCopyEvent( elem, clone ); - } - } - - // Preserve script evaluation history - destElements = getAll( clone, "script" ); - if ( destElements.length > 0 ) { - setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); - } - - // Return the cloned set - return clone; - }, - - cleanData: function( elems ) { - var data, elem, type, - special = jQuery.event.special, - i = 0; - - for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) { - if ( acceptData( elem ) ) { - if ( ( data = elem[ dataPriv.expando ] ) ) { - if ( data.events ) { - for ( type in data.events ) { - if ( special[ type ] ) { - jQuery.event.remove( elem, type ); - - // This is a shortcut to avoid jQuery.event.remove's overhead - } else { - jQuery.removeEvent( elem, type, data.handle ); - } - } - } - - // Support: Chrome <=35 - 45+ - // Assign undefined instead of using delete, see Data#remove - elem[ dataPriv.expando ] = undefined; - } - if ( elem[ dataUser.expando ] ) { - - // Support: Chrome <=35 - 45+ - // Assign undefined instead of using delete, see Data#remove - elem[ dataUser.expando ] = undefined; - } - } - } - } -} ); - -jQuery.fn.extend( { - detach: function( selector ) { - return remove( this, selector, true ); - }, - - remove: function( selector ) { - return remove( this, selector ); - }, - - text: function( value ) { - return access( this, function( value ) { - return value === undefined ? - jQuery.text( this ) : - this.empty().each( function() { - if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { - this.textContent = value; - } - } ); - }, null, value, arguments.length ); - }, - - append: function() { - return domManip( this, arguments, function( elem ) { - if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { - var target = manipulationTarget( this, elem ); - target.appendChild( elem ); - } - } ); - }, - - prepend: function() { - return domManip( this, arguments, function( elem ) { - if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { - var target = manipulationTarget( this, elem ); - target.insertBefore( elem, target.firstChild ); - } - } ); - }, - - before: function() { - return domManip( this, arguments, function( elem ) { - if ( this.parentNode ) { - this.parentNode.insertBefore( elem, this ); - } - } ); - }, - - after: function() { - return domManip( this, arguments, function( elem ) { - if ( this.parentNode ) { - this.parentNode.insertBefore( elem, this.nextSibling ); - } - } ); - }, - - empty: function() { - var elem, - i = 0; - - for ( ; ( elem = this[ i ] ) != null; i++ ) { - if ( elem.nodeType === 1 ) { - - // Prevent memory leaks - jQuery.cleanData( getAll( elem, false ) ); - - // Remove any remaining nodes - elem.textContent = ""; - } - } - - return this; - }, - - clone: function( dataAndEvents, deepDataAndEvents ) { - dataAndEvents = dataAndEvents == null ? false : dataAndEvents; - deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; - - return this.map( function() { - return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); - } ); - }, - - html: function( value ) { - return access( this, function( value ) { - var elem = this[ 0 ] || {}, - i = 0, - l = this.length; - - if ( value === undefined && elem.nodeType === 1 ) { - return elem.innerHTML; - } - - // See if we can take a shortcut and just use innerHTML - if ( typeof value === "string" && !rnoInnerhtml.test( value ) && - !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { - - value = jQuery.htmlPrefilter( value ); - - try { - for ( ; i < l; i++ ) { - elem = this[ i ] || {}; - - // Remove element nodes and prevent memory leaks - if ( elem.nodeType === 1 ) { - jQuery.cleanData( getAll( elem, false ) ); - elem.innerHTML = value; - } - } - - elem = 0; - - // If using innerHTML throws an exception, use the fallback method - } catch ( e ) {} - } - - if ( elem ) { - this.empty().append( value ); - } - }, null, value, arguments.length ); - }, - - replaceWith: function() { - var ignored = []; - - // Make the changes, replacing each non-ignored context element with the new content - return domManip( this, arguments, function( elem ) { - var parent = this.parentNode; - - if ( jQuery.inArray( this, ignored ) < 0 ) { - jQuery.cleanData( getAll( this ) ); - if ( parent ) { - parent.replaceChild( elem, this ); - } - } - - // Force callback invocation - }, ignored ); - } -} ); - -jQuery.each( { - appendTo: "append", - prependTo: "prepend", - insertBefore: "before", - insertAfter: "after", - replaceAll: "replaceWith" -}, function( name, original ) { - jQuery.fn[ name ] = function( selector ) { - var elems, - ret = [], - insert = jQuery( selector ), - last = insert.length - 1, - i = 0; - - for ( ; i <= last; i++ ) { - elems = i === last ? this : this.clone( true ); - jQuery( insert[ i ] )[ original ]( elems ); - - // Support: Android <=4.0 only, PhantomJS 1 only - // .get() because push.apply(_, arraylike) throws on ancient WebKit - push.apply( ret, elems.get() ); - } - - return this.pushStack( ret ); - }; -} ); -var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); - -var rcustomProp = /^--/; - - -var getStyles = function( elem ) { - - // Support: IE <=11 only, Firefox <=30 (trac-15098, trac-14150) - // IE throws on elements created in popups - // FF meanwhile throws on frame elements through "defaultView.getComputedStyle" - var view = elem.ownerDocument.defaultView; - - if ( !view || !view.opener ) { - view = window; - } - - return view.getComputedStyle( elem ); - }; - -var swap = function( elem, options, callback ) { - var ret, name, - old = {}; - - // Remember the old values, and insert the new ones - for ( name in options ) { - old[ name ] = elem.style[ name ]; - elem.style[ name ] = options[ name ]; - } - - ret = callback.call( elem ); - - // Revert the old values - for ( name in options ) { - elem.style[ name ] = old[ name ]; - } - - return ret; -}; - - -var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" ); - - - -( function() { - - // Executing both pixelPosition & boxSizingReliable tests require only one layout - // so they're executed at the same time to save the second computation. - function computeStyleTests() { - - // This is a singleton, we need to execute it only once - if ( !div ) { - return; - } - - container.style.cssText = "position:absolute;left:-11111px;width:60px;" + - "margin-top:1px;padding:0;border:0"; - div.style.cssText = - "position:relative;display:block;box-sizing:border-box;overflow:scroll;" + - "margin:auto;border:1px;padding:1px;" + - "width:60%;top:1%"; - documentElement.appendChild( container ).appendChild( div ); - - var divStyle = window.getComputedStyle( div ); - pixelPositionVal = divStyle.top !== "1%"; - - // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44 - reliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12; - - // Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3 - // Some styles come back with percentage values, even though they shouldn't - div.style.right = "60%"; - pixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36; - - // Support: IE 9 - 11 only - // Detect misreporting of content dimensions for box-sizing:border-box elements - boxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36; - - // Support: IE 9 only - // Detect overflow:scroll screwiness (gh-3699) - // Support: Chrome <=64 - // Don't get tricked when zoom affects offsetWidth (gh-4029) - div.style.position = "absolute"; - scrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12; - - documentElement.removeChild( container ); - - // Nullify the div so it wouldn't be stored in the memory and - // it will also be a sign that checks already performed - div = null; - } - - function roundPixelMeasures( measure ) { - return Math.round( parseFloat( measure ) ); - } - - var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal, - reliableTrDimensionsVal, reliableMarginLeftVal, - container = document.createElement( "div" ), - div = document.createElement( "div" ); - - // Finish early in limited (non-browser) environments - if ( !div.style ) { - return; - } - - // Support: IE <=9 - 11 only - // Style of cloned element affects source element cloned (trac-8908) - div.style.backgroundClip = "content-box"; - div.cloneNode( true ).style.backgroundClip = ""; - support.clearCloneStyle = div.style.backgroundClip === "content-box"; - - jQuery.extend( support, { - boxSizingReliable: function() { - computeStyleTests(); - return boxSizingReliableVal; - }, - pixelBoxStyles: function() { - computeStyleTests(); - return pixelBoxStylesVal; - }, - pixelPosition: function() { - computeStyleTests(); - return pixelPositionVal; - }, - reliableMarginLeft: function() { - computeStyleTests(); - return reliableMarginLeftVal; - }, - scrollboxSize: function() { - computeStyleTests(); - return scrollboxSizeVal; - }, - - // Support: IE 9 - 11+, Edge 15 - 18+ - // IE/Edge misreport `getComputedStyle` of table rows with width/height - // set in CSS while `offset*` properties report correct values. - // Behavior in IE 9 is more subtle than in newer versions & it passes - // some versions of this test; make sure not to make it pass there! - // - // Support: Firefox 70+ - // Only Firefox includes border widths - // in computed dimensions. (gh-4529) - reliableTrDimensions: function() { - var table, tr, trChild, trStyle; - if ( reliableTrDimensionsVal == null ) { - table = document.createElement( "table" ); - tr = document.createElement( "tr" ); - trChild = document.createElement( "div" ); - - table.style.cssText = "position:absolute;left:-11111px;border-collapse:separate"; - tr.style.cssText = "box-sizing:content-box;border:1px solid"; - - // Support: Chrome 86+ - // Height set through cssText does not get applied. - // Computed height then comes back as 0. - tr.style.height = "1px"; - trChild.style.height = "9px"; - - // Support: Android 8 Chrome 86+ - // In our bodyBackground.html iframe, - // display for all div elements is set to "inline", - // which causes a problem only in Android 8 Chrome 86. - // Ensuring the div is `display: block` - // gets around this issue. - trChild.style.display = "block"; - - documentElement - .appendChild( table ) - .appendChild( tr ) - .appendChild( trChild ); - - trStyle = window.getComputedStyle( tr ); - reliableTrDimensionsVal = ( parseInt( trStyle.height, 10 ) + - parseInt( trStyle.borderTopWidth, 10 ) + - parseInt( trStyle.borderBottomWidth, 10 ) ) === tr.offsetHeight; - - documentElement.removeChild( table ); - } - return reliableTrDimensionsVal; - } - } ); -} )(); - - -function curCSS( elem, name, computed ) { - var width, minWidth, maxWidth, ret, - isCustomProp = rcustomProp.test( name ), - - // Support: Firefox 51+ - // Retrieving style before computed somehow - // fixes an issue with getting wrong values - // on detached elements - style = elem.style; - - computed = computed || getStyles( elem ); - - // getPropertyValue is needed for: - // .css('filter') (IE 9 only, trac-12537) - // .css('--customProperty) (gh-3144) - if ( computed ) { - - // Support: IE <=9 - 11+ - // IE only supports `"float"` in `getPropertyValue`; in computed styles - // it's only available as `"cssFloat"`. We no longer modify properties - // sent to `.css()` apart from camelCasing, so we need to check both. - // Normally, this would create difference in behavior: if - // `getPropertyValue` returns an empty string, the value returned - // by `.css()` would be `undefined`. This is usually the case for - // disconnected elements. However, in IE even disconnected elements - // with no styles return `"none"` for `getPropertyValue( "float" )` - ret = computed.getPropertyValue( name ) || computed[ name ]; - - if ( isCustomProp && ret ) { - - // Support: Firefox 105+, Chrome <=105+ - // Spec requires trimming whitespace for custom properties (gh-4926). - // Firefox only trims leading whitespace. Chrome just collapses - // both leading & trailing whitespace to a single space. - // - // Fall back to `undefined` if empty string returned. - // This collapses a missing definition with property defined - // and set to an empty string but there's no standard API - // allowing us to differentiate them without a performance penalty - // and returning `undefined` aligns with older jQuery. - // - // rtrimCSS treats U+000D CARRIAGE RETURN and U+000C FORM FEED - // as whitespace while CSS does not, but this is not a problem - // because CSS preprocessing replaces them with U+000A LINE FEED - // (which *is* CSS whitespace) - // https://www.w3.org/TR/css-syntax-3/#input-preprocessing - ret = ret.replace( rtrimCSS, "$1" ) || undefined; - } - - if ( ret === "" && !isAttached( elem ) ) { - ret = jQuery.style( elem, name ); - } - - // A tribute to the "awesome hack by Dean Edwards" - // Android Browser returns percentage for some values, - // but width seems to be reliably pixels. - // This is against the CSSOM draft spec: - // https://drafts.csswg.org/cssom/#resolved-values - if ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) { - - // Remember the original values - width = style.width; - minWidth = style.minWidth; - maxWidth = style.maxWidth; - - // Put in the new values to get a computed value out - style.minWidth = style.maxWidth = style.width = ret; - ret = computed.width; - - // Revert the changed values - style.width = width; - style.minWidth = minWidth; - style.maxWidth = maxWidth; - } - } - - return ret !== undefined ? - - // Support: IE <=9 - 11 only - // IE returns zIndex value as an integer. - ret + "" : - ret; -} - - -function addGetHookIf( conditionFn, hookFn ) { - - // Define the hook, we'll check on the first run if it's really needed. - return { - get: function() { - if ( conditionFn() ) { - - // Hook not needed (or it's not possible to use it due - // to missing dependency), remove it. - delete this.get; - return; - } - - // Hook needed; redefine it so that the support test is not executed again. - return ( this.get = hookFn ).apply( this, arguments ); - } - }; -} - - -var cssPrefixes = [ "Webkit", "Moz", "ms" ], - emptyStyle = document.createElement( "div" ).style, - vendorProps = {}; - -// Return a vendor-prefixed property or undefined -function vendorPropName( name ) { - - // Check for vendor prefixed names - var capName = name[ 0 ].toUpperCase() + name.slice( 1 ), - i = cssPrefixes.length; - - while ( i-- ) { - name = cssPrefixes[ i ] + capName; - if ( name in emptyStyle ) { - return name; - } - } -} - -// Return a potentially-mapped jQuery.cssProps or vendor prefixed property -function finalPropName( name ) { - var final = jQuery.cssProps[ name ] || vendorProps[ name ]; - - if ( final ) { - return final; - } - if ( name in emptyStyle ) { - return name; - } - return vendorProps[ name ] = vendorPropName( name ) || name; -} - - -var - - // Swappable if display is none or starts with table - // except "table", "table-cell", or "table-caption" - // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display - rdisplayswap = /^(none|table(?!-c[ea]).+)/, - cssShow = { position: "absolute", visibility: "hidden", display: "block" }, - cssNormalTransform = { - letterSpacing: "0", - fontWeight: "400" - }; - -function setPositiveNumber( _elem, value, subtract ) { - - // Any relative (+/-) values have already been - // normalized at this point - var matches = rcssNum.exec( value ); - return matches ? - - // Guard against undefined "subtract", e.g., when used as in cssHooks - Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) : - value; -} - -function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) { - var i = dimension === "width" ? 1 : 0, - extra = 0, - delta = 0, - marginDelta = 0; - - // Adjustment may not be necessary - if ( box === ( isBorderBox ? "border" : "content" ) ) { - return 0; - } - - for ( ; i < 4; i += 2 ) { - - // Both box models exclude margin - // Count margin delta separately to only add it after scroll gutter adjustment. - // This is needed to make negative margins work with `outerHeight( true )` (gh-3982). - if ( box === "margin" ) { - marginDelta += jQuery.css( elem, box + cssExpand[ i ], true, styles ); - } - - // If we get here with a content-box, we're seeking "padding" or "border" or "margin" - if ( !isBorderBox ) { - - // Add padding - delta += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); - - // For "border" or "margin", add border - if ( box !== "padding" ) { - delta += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); - - // But still keep track of it otherwise - } else { - extra += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); - } - - // If we get here with a border-box (content + padding + border), we're seeking "content" or - // "padding" or "margin" - } else { - - // For "content", subtract padding - if ( box === "content" ) { - delta -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); - } - - // For "content" or "padding", subtract border - if ( box !== "margin" ) { - delta -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); - } - } - } - - // Account for positive content-box scroll gutter when requested by providing computedVal - if ( !isBorderBox && computedVal >= 0 ) { - - // offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border - // Assuming integer scroll gutter, subtract the rest and round down - delta += Math.max( 0, Math.ceil( - elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - - computedVal - - delta - - extra - - 0.5 - - // If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter - // Use an explicit zero to avoid NaN (gh-3964) - ) ) || 0; - } - - return delta + marginDelta; -} - -function getWidthOrHeight( elem, dimension, extra ) { - - // Start with computed style - var styles = getStyles( elem ), - - // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322). - // Fake content-box until we know it's needed to know the true value. - boxSizingNeeded = !support.boxSizingReliable() || extra, - isBorderBox = boxSizingNeeded && - jQuery.css( elem, "boxSizing", false, styles ) === "border-box", - valueIsBorderBox = isBorderBox, - - val = curCSS( elem, dimension, styles ), - offsetProp = "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ); - - // Support: Firefox <=54 - // Return a confounding non-pixel value or feign ignorance, as appropriate. - if ( rnumnonpx.test( val ) ) { - if ( !extra ) { - return val; - } - val = "auto"; - } - - - // Support: IE 9 - 11 only - // Use offsetWidth/offsetHeight for when box sizing is unreliable. - // In those cases, the computed value can be trusted to be border-box. - if ( ( !support.boxSizingReliable() && isBorderBox || - - // Support: IE 10 - 11+, Edge 15 - 18+ - // IE/Edge misreport `getComputedStyle` of table rows with width/height - // set in CSS while `offset*` properties report correct values. - // Interestingly, in some cases IE 9 doesn't suffer from this issue. - !support.reliableTrDimensions() && nodeName( elem, "tr" ) || - - // Fall back to offsetWidth/offsetHeight when value is "auto" - // This happens for inline elements with no explicit setting (gh-3571) - val === "auto" || - - // Support: Android <=4.1 - 4.3 only - // Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602) - !parseFloat( val ) && jQuery.css( elem, "display", false, styles ) === "inline" ) && - - // Make sure the element is visible & connected - elem.getClientRects().length ) { - - isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; - - // Where available, offsetWidth/offsetHeight approximate border box dimensions. - // Where not available (e.g., SVG), assume unreliable box-sizing and interpret the - // retrieved value as a content box dimension. - valueIsBorderBox = offsetProp in elem; - if ( valueIsBorderBox ) { - val = elem[ offsetProp ]; - } - } - - // Normalize "" and auto - val = parseFloat( val ) || 0; - - // Adjust for the element's box model - return ( val + - boxModelAdjustment( - elem, - dimension, - extra || ( isBorderBox ? "border" : "content" ), - valueIsBorderBox, - styles, - - // Provide the current computed size to request scroll gutter calculation (gh-3589) - val - ) - ) + "px"; -} - -jQuery.extend( { - - // Add in style property hooks for overriding the default - // behavior of getting and setting a style property - cssHooks: { - opacity: { - get: function( elem, computed ) { - if ( computed ) { - - // We should always get a number back from opacity - var ret = curCSS( elem, "opacity" ); - return ret === "" ? "1" : ret; - } - } - } - }, - - // Don't automatically add "px" to these possibly-unitless properties - cssNumber: { - animationIterationCount: true, - aspectRatio: true, - borderImageSlice: true, - columnCount: true, - flexGrow: true, - flexShrink: true, - fontWeight: true, - gridArea: true, - gridColumn: true, - gridColumnEnd: true, - gridColumnStart: true, - gridRow: true, - gridRowEnd: true, - gridRowStart: true, - lineHeight: true, - opacity: true, - order: true, - orphans: true, - scale: true, - widows: true, - zIndex: true, - zoom: true, - - // SVG-related - fillOpacity: true, - floodOpacity: true, - stopOpacity: true, - strokeMiterlimit: true, - strokeOpacity: true - }, - - // Add in properties whose names you wish to fix before - // setting or getting the value - cssProps: {}, - - // Get and set the style property on a DOM Node - style: function( elem, name, value, extra ) { - - // Don't set styles on text and comment nodes - if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { - return; - } - - // Make sure that we're working with the right name - var ret, type, hooks, - origName = camelCase( name ), - isCustomProp = rcustomProp.test( name ), - style = elem.style; - - // Make sure that we're working with the right name. We don't - // want to query the value if it is a CSS custom property - // since they are user-defined. - if ( !isCustomProp ) { - name = finalPropName( origName ); - } - - // Gets hook for the prefixed version, then unprefixed version - hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; - - // Check if we're setting a value - if ( value !== undefined ) { - type = typeof value; - - // Convert "+=" or "-=" to relative numbers (trac-7345) - if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) { - value = adjustCSS( elem, name, ret ); - - // Fixes bug trac-9237 - type = "number"; - } - - // Make sure that null and NaN values aren't set (trac-7116) - if ( value == null || value !== value ) { - return; - } - - // If a number was passed in, add the unit (except for certain CSS properties) - // The isCustomProp check can be removed in jQuery 4.0 when we only auto-append - // "px" to a few hardcoded values. - if ( type === "number" && !isCustomProp ) { - value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" ); - } - - // background-* props affect original clone's values - if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) { - style[ name ] = "inherit"; - } - - // If a hook was provided, use that value, otherwise just set the specified value - if ( !hooks || !( "set" in hooks ) || - ( value = hooks.set( elem, value, extra ) ) !== undefined ) { - - if ( isCustomProp ) { - style.setProperty( name, value ); - } else { - style[ name ] = value; - } - } - - } else { - - // If a hook was provided get the non-computed value from there - if ( hooks && "get" in hooks && - ( ret = hooks.get( elem, false, extra ) ) !== undefined ) { - - return ret; - } - - // Otherwise just get the value from the style object - return style[ name ]; - } - }, - - css: function( elem, name, extra, styles ) { - var val, num, hooks, - origName = camelCase( name ), - isCustomProp = rcustomProp.test( name ); - - // Make sure that we're working with the right name. We don't - // want to modify the value if it is a CSS custom property - // since they are user-defined. - if ( !isCustomProp ) { - name = finalPropName( origName ); - } - - // Try prefixed name followed by the unprefixed name - hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; - - // If a hook was provided get the computed value from there - if ( hooks && "get" in hooks ) { - val = hooks.get( elem, true, extra ); - } - - // Otherwise, if a way to get the computed value exists, use that - if ( val === undefined ) { - val = curCSS( elem, name, styles ); - } - - // Convert "normal" to computed value - if ( val === "normal" && name in cssNormalTransform ) { - val = cssNormalTransform[ name ]; - } - - // Make numeric if forced or a qualifier was provided and val looks numeric - if ( extra === "" || extra ) { - num = parseFloat( val ); - return extra === true || isFinite( num ) ? num || 0 : val; - } - - return val; - } -} ); - -jQuery.each( [ "height", "width" ], function( _i, dimension ) { - jQuery.cssHooks[ dimension ] = { - get: function( elem, computed, extra ) { - if ( computed ) { - - // Certain elements can have dimension info if we invisibly show them - // but it must have a current display style that would benefit - return rdisplayswap.test( jQuery.css( elem, "display" ) ) && - - // Support: Safari 8+ - // Table columns in Safari have non-zero offsetWidth & zero - // getBoundingClientRect().width unless display is changed. - // Support: IE <=11 only - // Running getBoundingClientRect on a disconnected node - // in IE throws an error. - ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ? - swap( elem, cssShow, function() { - return getWidthOrHeight( elem, dimension, extra ); - } ) : - getWidthOrHeight( elem, dimension, extra ); - } - }, - - set: function( elem, value, extra ) { - var matches, - styles = getStyles( elem ), - - // Only read styles.position if the test has a chance to fail - // to avoid forcing a reflow. - scrollboxSizeBuggy = !support.scrollboxSize() && - styles.position === "absolute", - - // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991) - boxSizingNeeded = scrollboxSizeBuggy || extra, - isBorderBox = boxSizingNeeded && - jQuery.css( elem, "boxSizing", false, styles ) === "border-box", - subtract = extra ? - boxModelAdjustment( - elem, - dimension, - extra, - isBorderBox, - styles - ) : - 0; - - // Account for unreliable border-box dimensions by comparing offset* to computed and - // faking a content-box to get border and padding (gh-3699) - if ( isBorderBox && scrollboxSizeBuggy ) { - subtract -= Math.ceil( - elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - - parseFloat( styles[ dimension ] ) - - boxModelAdjustment( elem, dimension, "border", false, styles ) - - 0.5 - ); - } - - // Convert to pixels if value adjustment is needed - if ( subtract && ( matches = rcssNum.exec( value ) ) && - ( matches[ 3 ] || "px" ) !== "px" ) { - - elem.style[ dimension ] = value; - value = jQuery.css( elem, dimension ); - } - - return setPositiveNumber( elem, value, subtract ); - } - }; -} ); - -jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft, - function( elem, computed ) { - if ( computed ) { - return ( parseFloat( curCSS( elem, "marginLeft" ) ) || - elem.getBoundingClientRect().left - - swap( elem, { marginLeft: 0 }, function() { - return elem.getBoundingClientRect().left; - } ) - ) + "px"; - } - } -); - -// These hooks are used by animate to expand properties -jQuery.each( { - margin: "", - padding: "", - border: "Width" -}, function( prefix, suffix ) { - jQuery.cssHooks[ prefix + suffix ] = { - expand: function( value ) { - var i = 0, - expanded = {}, - - // Assumes a single number if not a string - parts = typeof value === "string" ? value.split( " " ) : [ value ]; - - for ( ; i < 4; i++ ) { - expanded[ prefix + cssExpand[ i ] + suffix ] = - parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; - } - - return expanded; - } - }; - - if ( prefix !== "margin" ) { - jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; - } -} ); - -jQuery.fn.extend( { - css: function( name, value ) { - return access( this, function( elem, name, value ) { - var styles, len, - map = {}, - i = 0; - - if ( Array.isArray( name ) ) { - styles = getStyles( elem ); - len = name.length; - - for ( ; i < len; i++ ) { - map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles ); - } - - return map; - } - - return value !== undefined ? - jQuery.style( elem, name, value ) : - jQuery.css( elem, name ); - }, name, value, arguments.length > 1 ); - } -} ); - - -function Tween( elem, options, prop, end, easing ) { - return new Tween.prototype.init( elem, options, prop, end, easing ); -} -jQuery.Tween = Tween; - -Tween.prototype = { - constructor: Tween, - init: function( elem, options, prop, end, easing, unit ) { - this.elem = elem; - this.prop = prop; - this.easing = easing || jQuery.easing._default; - this.options = options; - this.start = this.now = this.cur(); - this.end = end; - this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" ); - }, - cur: function() { - var hooks = Tween.propHooks[ this.prop ]; - - return hooks && hooks.get ? - hooks.get( this ) : - Tween.propHooks._default.get( this ); - }, - run: function( percent ) { - var eased, - hooks = Tween.propHooks[ this.prop ]; - - if ( this.options.duration ) { - this.pos = eased = jQuery.easing[ this.easing ]( - percent, this.options.duration * percent, 0, 1, this.options.duration - ); - } else { - this.pos = eased = percent; - } - this.now = ( this.end - this.start ) * eased + this.start; - - if ( this.options.step ) { - this.options.step.call( this.elem, this.now, this ); - } - - if ( hooks && hooks.set ) { - hooks.set( this ); - } else { - Tween.propHooks._default.set( this ); - } - return this; - } -}; - -Tween.prototype.init.prototype = Tween.prototype; - -Tween.propHooks = { - _default: { - get: function( tween ) { - var result; - - // Use a property on the element directly when it is not a DOM element, - // or when there is no matching style property that exists. - if ( tween.elem.nodeType !== 1 || - tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) { - return tween.elem[ tween.prop ]; - } - - // Passing an empty string as a 3rd parameter to .css will automatically - // attempt a parseFloat and fallback to a string if the parse fails. - // Simple values such as "10px" are parsed to Float; - // complex values such as "rotate(1rad)" are returned as-is. - result = jQuery.css( tween.elem, tween.prop, "" ); - - // Empty strings, null, undefined and "auto" are converted to 0. - return !result || result === "auto" ? 0 : result; - }, - set: function( tween ) { - - // Use step hook for back compat. - // Use cssHook if its there. - // Use .style if available and use plain properties where available. - if ( jQuery.fx.step[ tween.prop ] ) { - jQuery.fx.step[ tween.prop ]( tween ); - } else if ( tween.elem.nodeType === 1 && ( - jQuery.cssHooks[ tween.prop ] || - tween.elem.style[ finalPropName( tween.prop ) ] != null ) ) { - jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); - } else { - tween.elem[ tween.prop ] = tween.now; - } - } - } -}; - -// Support: IE <=9 only -// Panic based approach to setting things on disconnected nodes -Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { - set: function( tween ) { - if ( tween.elem.nodeType && tween.elem.parentNode ) { - tween.elem[ tween.prop ] = tween.now; - } - } -}; - -jQuery.easing = { - linear: function( p ) { - return p; - }, - swing: function( p ) { - return 0.5 - Math.cos( p * Math.PI ) / 2; - }, - _default: "swing" -}; - -jQuery.fx = Tween.prototype.init; - -// Back compat <1.8 extension point -jQuery.fx.step = {}; - - - - -var - fxNow, inProgress, - rfxtypes = /^(?:toggle|show|hide)$/, - rrun = /queueHooks$/; - -function schedule() { - if ( inProgress ) { - if ( document.hidden === false && window.requestAnimationFrame ) { - window.requestAnimationFrame( schedule ); - } else { - window.setTimeout( schedule, jQuery.fx.interval ); - } - - jQuery.fx.tick(); - } -} - -// Animations created synchronously will run synchronously -function createFxNow() { - window.setTimeout( function() { - fxNow = undefined; - } ); - return ( fxNow = Date.now() ); -} - -// Generate parameters to create a standard animation -function genFx( type, includeWidth ) { - var which, - i = 0, - attrs = { height: type }; - - // If we include width, step value is 1 to do all cssExpand values, - // otherwise step value is 2 to skip over Left and Right - includeWidth = includeWidth ? 1 : 0; - for ( ; i < 4; i += 2 - includeWidth ) { - which = cssExpand[ i ]; - attrs[ "margin" + which ] = attrs[ "padding" + which ] = type; - } - - if ( includeWidth ) { - attrs.opacity = attrs.width = type; - } - - return attrs; -} - -function createTween( value, prop, animation ) { - var tween, - collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ), - index = 0, - length = collection.length; - for ( ; index < length; index++ ) { - if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) { - - // We're done with this property - return tween; - } - } -} - -function defaultPrefilter( elem, props, opts ) { - var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display, - isBox = "width" in props || "height" in props, - anim = this, - orig = {}, - style = elem.style, - hidden = elem.nodeType && isHiddenWithinTree( elem ), - dataShow = dataPriv.get( elem, "fxshow" ); - - // Queue-skipping animations hijack the fx hooks - if ( !opts.queue ) { - hooks = jQuery._queueHooks( elem, "fx" ); - if ( hooks.unqueued == null ) { - hooks.unqueued = 0; - oldfire = hooks.empty.fire; - hooks.empty.fire = function() { - if ( !hooks.unqueued ) { - oldfire(); - } - }; - } - hooks.unqueued++; - - anim.always( function() { - - // Ensure the complete handler is called before this completes - anim.always( function() { - hooks.unqueued--; - if ( !jQuery.queue( elem, "fx" ).length ) { - hooks.empty.fire(); - } - } ); - } ); - } - - // Detect show/hide animations - for ( prop in props ) { - value = props[ prop ]; - if ( rfxtypes.test( value ) ) { - delete props[ prop ]; - toggle = toggle || value === "toggle"; - if ( value === ( hidden ? "hide" : "show" ) ) { - - // Pretend to be hidden if this is a "show" and - // there is still data from a stopped show/hide - if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) { - hidden = true; - - // Ignore all other no-op show/hide data - } else { - continue; - } - } - orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop ); - } - } - - // Bail out if this is a no-op like .hide().hide() - propTween = !jQuery.isEmptyObject( props ); - if ( !propTween && jQuery.isEmptyObject( orig ) ) { - return; - } - - // Restrict "overflow" and "display" styles during box animations - if ( isBox && elem.nodeType === 1 ) { - - // Support: IE <=9 - 11, Edge 12 - 15 - // Record all 3 overflow attributes because IE does not infer the shorthand - // from identically-valued overflowX and overflowY and Edge just mirrors - // the overflowX value there. - opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; - - // Identify a display type, preferring old show/hide data over the CSS cascade - restoreDisplay = dataShow && dataShow.display; - if ( restoreDisplay == null ) { - restoreDisplay = dataPriv.get( elem, "display" ); - } - display = jQuery.css( elem, "display" ); - if ( display === "none" ) { - if ( restoreDisplay ) { - display = restoreDisplay; - } else { - - // Get nonempty value(s) by temporarily forcing visibility - showHide( [ elem ], true ); - restoreDisplay = elem.style.display || restoreDisplay; - display = jQuery.css( elem, "display" ); - showHide( [ elem ] ); - } - } - - // Animate inline elements as inline-block - if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) { - if ( jQuery.css( elem, "float" ) === "none" ) { - - // Restore the original display value at the end of pure show/hide animations - if ( !propTween ) { - anim.done( function() { - style.display = restoreDisplay; - } ); - if ( restoreDisplay == null ) { - display = style.display; - restoreDisplay = display === "none" ? "" : display; - } - } - style.display = "inline-block"; - } - } - } - - if ( opts.overflow ) { - style.overflow = "hidden"; - anim.always( function() { - style.overflow = opts.overflow[ 0 ]; - style.overflowX = opts.overflow[ 1 ]; - style.overflowY = opts.overflow[ 2 ]; - } ); - } - - // Implement show/hide animations - propTween = false; - for ( prop in orig ) { - - // General show/hide setup for this element animation - if ( !propTween ) { - if ( dataShow ) { - if ( "hidden" in dataShow ) { - hidden = dataShow.hidden; - } - } else { - dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } ); - } - - // Store hidden/visible for toggle so `.stop().toggle()` "reverses" - if ( toggle ) { - dataShow.hidden = !hidden; - } - - // Show elements before animating them - if ( hidden ) { - showHide( [ elem ], true ); - } - - /* eslint-disable no-loop-func */ - - anim.done( function() { - - /* eslint-enable no-loop-func */ - - // The final step of a "hide" animation is actually hiding the element - if ( !hidden ) { - showHide( [ elem ] ); - } - dataPriv.remove( elem, "fxshow" ); - for ( prop in orig ) { - jQuery.style( elem, prop, orig[ prop ] ); - } - } ); - } - - // Per-property setup - propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim ); - if ( !( prop in dataShow ) ) { - dataShow[ prop ] = propTween.start; - if ( hidden ) { - propTween.end = propTween.start; - propTween.start = 0; - } - } - } -} - -function propFilter( props, specialEasing ) { - var index, name, easing, value, hooks; - - // camelCase, specialEasing and expand cssHook pass - for ( index in props ) { - name = camelCase( index ); - easing = specialEasing[ name ]; - value = props[ index ]; - if ( Array.isArray( value ) ) { - easing = value[ 1 ]; - value = props[ index ] = value[ 0 ]; - } - - if ( index !== name ) { - props[ name ] = value; - delete props[ index ]; - } - - hooks = jQuery.cssHooks[ name ]; - if ( hooks && "expand" in hooks ) { - value = hooks.expand( value ); - delete props[ name ]; - - // Not quite $.extend, this won't overwrite existing keys. - // Reusing 'index' because we have the correct "name" - for ( index in value ) { - if ( !( index in props ) ) { - props[ index ] = value[ index ]; - specialEasing[ index ] = easing; - } - } - } else { - specialEasing[ name ] = easing; - } - } -} - -function Animation( elem, properties, options ) { - var result, - stopped, - index = 0, - length = Animation.prefilters.length, - deferred = jQuery.Deferred().always( function() { - - // Don't match elem in the :animated selector - delete tick.elem; - } ), - tick = function() { - if ( stopped ) { - return false; - } - var currentTime = fxNow || createFxNow(), - remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), - - // Support: Android 2.3 only - // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (trac-12497) - temp = remaining / animation.duration || 0, - percent = 1 - temp, - index = 0, - length = animation.tweens.length; - - for ( ; index < length; index++ ) { - animation.tweens[ index ].run( percent ); - } - - deferred.notifyWith( elem, [ animation, percent, remaining ] ); - - // If there's more to do, yield - if ( percent < 1 && length ) { - return remaining; - } - - // If this was an empty animation, synthesize a final progress notification - if ( !length ) { - deferred.notifyWith( elem, [ animation, 1, 0 ] ); - } - - // Resolve the animation and report its conclusion - deferred.resolveWith( elem, [ animation ] ); - return false; - }, - animation = deferred.promise( { - elem: elem, - props: jQuery.extend( {}, properties ), - opts: jQuery.extend( true, { - specialEasing: {}, - easing: jQuery.easing._default - }, options ), - originalProperties: properties, - originalOptions: options, - startTime: fxNow || createFxNow(), - duration: options.duration, - tweens: [], - createTween: function( prop, end ) { - var tween = jQuery.Tween( elem, animation.opts, prop, end, - animation.opts.specialEasing[ prop ] || animation.opts.easing ); - animation.tweens.push( tween ); - return tween; - }, - stop: function( gotoEnd ) { - var index = 0, - - // If we are going to the end, we want to run all the tweens - // otherwise we skip this part - length = gotoEnd ? animation.tweens.length : 0; - if ( stopped ) { - return this; - } - stopped = true; - for ( ; index < length; index++ ) { - animation.tweens[ index ].run( 1 ); - } - - // Resolve when we played the last frame; otherwise, reject - if ( gotoEnd ) { - deferred.notifyWith( elem, [ animation, 1, 0 ] ); - deferred.resolveWith( elem, [ animation, gotoEnd ] ); - } else { - deferred.rejectWith( elem, [ animation, gotoEnd ] ); - } - return this; - } - } ), - props = animation.props; - - propFilter( props, animation.opts.specialEasing ); - - for ( ; index < length; index++ ) { - result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts ); - if ( result ) { - if ( isFunction( result.stop ) ) { - jQuery._queueHooks( animation.elem, animation.opts.queue ).stop = - result.stop.bind( result ); - } - return result; - } - } - - jQuery.map( props, createTween, animation ); - - if ( isFunction( animation.opts.start ) ) { - animation.opts.start.call( elem, animation ); - } - - // Attach callbacks from options - animation - .progress( animation.opts.progress ) - .done( animation.opts.done, animation.opts.complete ) - .fail( animation.opts.fail ) - .always( animation.opts.always ); - - jQuery.fx.timer( - jQuery.extend( tick, { - elem: elem, - anim: animation, - queue: animation.opts.queue - } ) - ); - - return animation; -} - -jQuery.Animation = jQuery.extend( Animation, { - - tweeners: { - "*": [ function( prop, value ) { - var tween = this.createTween( prop, value ); - adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween ); - return tween; - } ] - }, - - tweener: function( props, callback ) { - if ( isFunction( props ) ) { - callback = props; - props = [ "*" ]; - } else { - props = props.match( rnothtmlwhite ); - } - - var prop, - index = 0, - length = props.length; - - for ( ; index < length; index++ ) { - prop = props[ index ]; - Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || []; - Animation.tweeners[ prop ].unshift( callback ); - } - }, - - prefilters: [ defaultPrefilter ], - - prefilter: function( callback, prepend ) { - if ( prepend ) { - Animation.prefilters.unshift( callback ); - } else { - Animation.prefilters.push( callback ); - } - } -} ); - -jQuery.speed = function( speed, easing, fn ) { - var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { - complete: fn || !fn && easing || - isFunction( speed ) && speed, - duration: speed, - easing: fn && easing || easing && !isFunction( easing ) && easing - }; - - // Go to the end state if fx are off - if ( jQuery.fx.off ) { - opt.duration = 0; - - } else { - if ( typeof opt.duration !== "number" ) { - if ( opt.duration in jQuery.fx.speeds ) { - opt.duration = jQuery.fx.speeds[ opt.duration ]; - - } else { - opt.duration = jQuery.fx.speeds._default; - } - } - } - - // Normalize opt.queue - true/undefined/null -> "fx" - if ( opt.queue == null || opt.queue === true ) { - opt.queue = "fx"; - } - - // Queueing - opt.old = opt.complete; - - opt.complete = function() { - if ( isFunction( opt.old ) ) { - opt.old.call( this ); - } - - if ( opt.queue ) { - jQuery.dequeue( this, opt.queue ); - } - }; - - return opt; -}; - -jQuery.fn.extend( { - fadeTo: function( speed, to, easing, callback ) { - - // Show any hidden elements after setting opacity to 0 - return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show() - - // Animate to the value specified - .end().animate( { opacity: to }, speed, easing, callback ); - }, - animate: function( prop, speed, easing, callback ) { - var empty = jQuery.isEmptyObject( prop ), - optall = jQuery.speed( speed, easing, callback ), - doAnimation = function() { - - // Operate on a copy of prop so per-property easing won't be lost - var anim = Animation( this, jQuery.extend( {}, prop ), optall ); - - // Empty animations, or finishing resolves immediately - if ( empty || dataPriv.get( this, "finish" ) ) { - anim.stop( true ); - } - }; - - doAnimation.finish = doAnimation; - - return empty || optall.queue === false ? - this.each( doAnimation ) : - this.queue( optall.queue, doAnimation ); - }, - stop: function( type, clearQueue, gotoEnd ) { - var stopQueue = function( hooks ) { - var stop = hooks.stop; - delete hooks.stop; - stop( gotoEnd ); - }; - - if ( typeof type !== "string" ) { - gotoEnd = clearQueue; - clearQueue = type; - type = undefined; - } - if ( clearQueue ) { - this.queue( type || "fx", [] ); - } - - return this.each( function() { - var dequeue = true, - index = type != null && type + "queueHooks", - timers = jQuery.timers, - data = dataPriv.get( this ); - - if ( index ) { - if ( data[ index ] && data[ index ].stop ) { - stopQueue( data[ index ] ); - } - } else { - for ( index in data ) { - if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) { - stopQueue( data[ index ] ); - } - } - } - - for ( index = timers.length; index--; ) { - if ( timers[ index ].elem === this && - ( type == null || timers[ index ].queue === type ) ) { - - timers[ index ].anim.stop( gotoEnd ); - dequeue = false; - timers.splice( index, 1 ); - } - } - - // Start the next in the queue if the last step wasn't forced. - // Timers currently will call their complete callbacks, which - // will dequeue but only if they were gotoEnd. - if ( dequeue || !gotoEnd ) { - jQuery.dequeue( this, type ); - } - } ); - }, - finish: function( type ) { - if ( type !== false ) { - type = type || "fx"; - } - return this.each( function() { - var index, - data = dataPriv.get( this ), - queue = data[ type + "queue" ], - hooks = data[ type + "queueHooks" ], - timers = jQuery.timers, - length = queue ? queue.length : 0; - - // Enable finishing flag on private data - data.finish = true; - - // Empty the queue first - jQuery.queue( this, type, [] ); - - if ( hooks && hooks.stop ) { - hooks.stop.call( this, true ); - } - - // Look for any active animations, and finish them - for ( index = timers.length; index--; ) { - if ( timers[ index ].elem === this && timers[ index ].queue === type ) { - timers[ index ].anim.stop( true ); - timers.splice( index, 1 ); - } - } - - // Look for any animations in the old queue and finish them - for ( index = 0; index < length; index++ ) { - if ( queue[ index ] && queue[ index ].finish ) { - queue[ index ].finish.call( this ); - } - } - - // Turn off finishing flag - delete data.finish; - } ); - } -} ); - -jQuery.each( [ "toggle", "show", "hide" ], function( _i, name ) { - var cssFn = jQuery.fn[ name ]; - jQuery.fn[ name ] = function( speed, easing, callback ) { - return speed == null || typeof speed === "boolean" ? - cssFn.apply( this, arguments ) : - this.animate( genFx( name, true ), speed, easing, callback ); - }; -} ); - -// Generate shortcuts for custom animations -jQuery.each( { - slideDown: genFx( "show" ), - slideUp: genFx( "hide" ), - slideToggle: genFx( "toggle" ), - fadeIn: { opacity: "show" }, - fadeOut: { opacity: "hide" }, - fadeToggle: { opacity: "toggle" } -}, function( name, props ) { - jQuery.fn[ name ] = function( speed, easing, callback ) { - return this.animate( props, speed, easing, callback ); - }; -} ); - -jQuery.timers = []; -jQuery.fx.tick = function() { - var timer, - i = 0, - timers = jQuery.timers; - - fxNow = Date.now(); - - for ( ; i < timers.length; i++ ) { - timer = timers[ i ]; - - // Run the timer and safely remove it when done (allowing for external removal) - if ( !timer() && timers[ i ] === timer ) { - timers.splice( i--, 1 ); - } - } - - if ( !timers.length ) { - jQuery.fx.stop(); - } - fxNow = undefined; -}; - -jQuery.fx.timer = function( timer ) { - jQuery.timers.push( timer ); - jQuery.fx.start(); -}; - -jQuery.fx.interval = 13; -jQuery.fx.start = function() { - if ( inProgress ) { - return; - } - - inProgress = true; - schedule(); -}; - -jQuery.fx.stop = function() { - inProgress = null; -}; - -jQuery.fx.speeds = { - slow: 600, - fast: 200, - - // Default speed - _default: 400 -}; - - -// Based off of the plugin by Clint Helfers, with permission. -jQuery.fn.delay = function( time, type ) { - time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; - type = type || "fx"; - - return this.queue( type, function( next, hooks ) { - var timeout = window.setTimeout( next, time ); - hooks.stop = function() { - window.clearTimeout( timeout ); - }; - } ); -}; - - -( function() { - var input = document.createElement( "input" ), - select = document.createElement( "select" ), - opt = select.appendChild( document.createElement( "option" ) ); - - input.type = "checkbox"; - - // Support: Android <=4.3 only - // Default value for a checkbox should be "on" - support.checkOn = input.value !== ""; - - // Support: IE <=11 only - // Must access selectedIndex to make default options select - support.optSelected = opt.selected; - - // Support: IE <=11 only - // An input loses its value after becoming a radio - input = document.createElement( "input" ); - input.value = "t"; - input.type = "radio"; - support.radioValue = input.value === "t"; -} )(); - - -var boolHook, - attrHandle = jQuery.expr.attrHandle; - -jQuery.fn.extend( { - attr: function( name, value ) { - return access( this, jQuery.attr, name, value, arguments.length > 1 ); - }, - - removeAttr: function( name ) { - return this.each( function() { - jQuery.removeAttr( this, name ); - } ); - } -} ); - -jQuery.extend( { - attr: function( elem, name, value ) { - var ret, hooks, - nType = elem.nodeType; - - // Don't get/set attributes on text, comment and attribute nodes - if ( nType === 3 || nType === 8 || nType === 2 ) { - return; - } - - // Fallback to prop when attributes are not supported - if ( typeof elem.getAttribute === "undefined" ) { - return jQuery.prop( elem, name, value ); - } - - // Attribute hooks are determined by the lowercase version - // Grab necessary hook if one is defined - if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { - hooks = jQuery.attrHooks[ name.toLowerCase() ] || - ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined ); - } - - if ( value !== undefined ) { - if ( value === null ) { - jQuery.removeAttr( elem, name ); - return; - } - - if ( hooks && "set" in hooks && - ( ret = hooks.set( elem, value, name ) ) !== undefined ) { - return ret; - } - - elem.setAttribute( name, value + "" ); - return value; - } - - if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { - return ret; - } - - ret = jQuery.find.attr( elem, name ); - - // Non-existent attributes return null, we normalize to undefined - return ret == null ? undefined : ret; - }, - - attrHooks: { - type: { - set: function( elem, value ) { - if ( !support.radioValue && value === "radio" && - nodeName( elem, "input" ) ) { - var val = elem.value; - elem.setAttribute( "type", value ); - if ( val ) { - elem.value = val; - } - return value; - } - } - } - }, - - removeAttr: function( elem, value ) { - var name, - i = 0, - - // Attribute names can contain non-HTML whitespace characters - // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2 - attrNames = value && value.match( rnothtmlwhite ); - - if ( attrNames && elem.nodeType === 1 ) { - while ( ( name = attrNames[ i++ ] ) ) { - elem.removeAttribute( name ); - } - } - } -} ); - -// Hooks for boolean attributes -boolHook = { - set: function( elem, value, name ) { - if ( value === false ) { - - // Remove boolean attributes when set to false - jQuery.removeAttr( elem, name ); - } else { - elem.setAttribute( name, name ); - } - return name; - } -}; - -jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( _i, name ) { - var getter = attrHandle[ name ] || jQuery.find.attr; - - attrHandle[ name ] = function( elem, name, isXML ) { - var ret, handle, - lowercaseName = name.toLowerCase(); - - if ( !isXML ) { - - // Avoid an infinite loop by temporarily removing this function from the getter - handle = attrHandle[ lowercaseName ]; - attrHandle[ lowercaseName ] = ret; - ret = getter( elem, name, isXML ) != null ? - lowercaseName : - null; - attrHandle[ lowercaseName ] = handle; - } - return ret; - }; -} ); - - - - -var rfocusable = /^(?:input|select|textarea|button)$/i, - rclickable = /^(?:a|area)$/i; - -jQuery.fn.extend( { - prop: function( name, value ) { - return access( this, jQuery.prop, name, value, arguments.length > 1 ); - }, - - removeProp: function( name ) { - return this.each( function() { - delete this[ jQuery.propFix[ name ] || name ]; - } ); - } -} ); - -jQuery.extend( { - prop: function( elem, name, value ) { - var ret, hooks, - nType = elem.nodeType; - - // Don't get/set properties on text, comment and attribute nodes - if ( nType === 3 || nType === 8 || nType === 2 ) { - return; - } - - if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { - - // Fix name and attach hooks - name = jQuery.propFix[ name ] || name; - hooks = jQuery.propHooks[ name ]; - } - - if ( value !== undefined ) { - if ( hooks && "set" in hooks && - ( ret = hooks.set( elem, value, name ) ) !== undefined ) { - return ret; - } - - return ( elem[ name ] = value ); - } - - if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { - return ret; - } - - return elem[ name ]; - }, - - propHooks: { - tabIndex: { - get: function( elem ) { - - // Support: IE <=9 - 11 only - // elem.tabIndex doesn't always return the - // correct value when it hasn't been explicitly set - // Use proper attribute retrieval (trac-12072) - var tabindex = jQuery.find.attr( elem, "tabindex" ); - - if ( tabindex ) { - return parseInt( tabindex, 10 ); - } - - if ( - rfocusable.test( elem.nodeName ) || - rclickable.test( elem.nodeName ) && - elem.href - ) { - return 0; - } - - return -1; - } - } - }, - - propFix: { - "for": "htmlFor", - "class": "className" - } -} ); - -// Support: IE <=11 only -// Accessing the selectedIndex property -// forces the browser to respect setting selected -// on the option -// The getter ensures a default option is selected -// when in an optgroup -// eslint rule "no-unused-expressions" is disabled for this code -// since it considers such accessions noop -if ( !support.optSelected ) { - jQuery.propHooks.selected = { - get: function( elem ) { - - /* eslint no-unused-expressions: "off" */ - - var parent = elem.parentNode; - if ( parent && parent.parentNode ) { - parent.parentNode.selectedIndex; - } - return null; - }, - set: function( elem ) { - - /* eslint no-unused-expressions: "off" */ - - var parent = elem.parentNode; - if ( parent ) { - parent.selectedIndex; - - if ( parent.parentNode ) { - parent.parentNode.selectedIndex; - } - } - } - }; -} - -jQuery.each( [ - "tabIndex", - "readOnly", - "maxLength", - "cellSpacing", - "cellPadding", - "rowSpan", - "colSpan", - "useMap", - "frameBorder", - "contentEditable" -], function() { - jQuery.propFix[ this.toLowerCase() ] = this; -} ); - - - - - // Strip and collapse whitespace according to HTML spec - // https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace - function stripAndCollapse( value ) { - var tokens = value.match( rnothtmlwhite ) || []; - return tokens.join( " " ); - } - - -function getClass( elem ) { - return elem.getAttribute && elem.getAttribute( "class" ) || ""; -} - -function classesToArray( value ) { - if ( Array.isArray( value ) ) { - return value; - } - if ( typeof value === "string" ) { - return value.match( rnothtmlwhite ) || []; - } - return []; -} - -jQuery.fn.extend( { - addClass: function( value ) { - var classNames, cur, curValue, className, i, finalValue; - - if ( isFunction( value ) ) { - return this.each( function( j ) { - jQuery( this ).addClass( value.call( this, j, getClass( this ) ) ); - } ); - } - - classNames = classesToArray( value ); - - if ( classNames.length ) { - return this.each( function() { - curValue = getClass( this ); - cur = this.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); - - if ( cur ) { - for ( i = 0; i < classNames.length; i++ ) { - className = classNames[ i ]; - if ( cur.indexOf( " " + className + " " ) < 0 ) { - cur += className + " "; - } - } - - // Only assign if different to avoid unneeded rendering. - finalValue = stripAndCollapse( cur ); - if ( curValue !== finalValue ) { - this.setAttribute( "class", finalValue ); - } - } - } ); - } - - return this; - }, - - removeClass: function( value ) { - var classNames, cur, curValue, className, i, finalValue; - - if ( isFunction( value ) ) { - return this.each( function( j ) { - jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) ); - } ); - } - - if ( !arguments.length ) { - return this.attr( "class", "" ); - } - - classNames = classesToArray( value ); - - if ( classNames.length ) { - return this.each( function() { - curValue = getClass( this ); - - // This expression is here for better compressibility (see addClass) - cur = this.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); - - if ( cur ) { - for ( i = 0; i < classNames.length; i++ ) { - className = classNames[ i ]; - - // Remove *all* instances - while ( cur.indexOf( " " + className + " " ) > -1 ) { - cur = cur.replace( " " + className + " ", " " ); - } - } - - // Only assign if different to avoid unneeded rendering. - finalValue = stripAndCollapse( cur ); - if ( curValue !== finalValue ) { - this.setAttribute( "class", finalValue ); - } - } - } ); - } - - return this; - }, - - toggleClass: function( value, stateVal ) { - var classNames, className, i, self, - type = typeof value, - isValidValue = type === "string" || Array.isArray( value ); - - if ( isFunction( value ) ) { - return this.each( function( i ) { - jQuery( this ).toggleClass( - value.call( this, i, getClass( this ), stateVal ), - stateVal - ); - } ); - } - - if ( typeof stateVal === "boolean" && isValidValue ) { - return stateVal ? this.addClass( value ) : this.removeClass( value ); - } - - classNames = classesToArray( value ); - - return this.each( function() { - if ( isValidValue ) { - - // Toggle individual class names - self = jQuery( this ); - - for ( i = 0; i < classNames.length; i++ ) { - className = classNames[ i ]; - - // Check each className given, space separated list - if ( self.hasClass( className ) ) { - self.removeClass( className ); - } else { - self.addClass( className ); - } - } - - // Toggle whole class name - } else if ( value === undefined || type === "boolean" ) { - className = getClass( this ); - if ( className ) { - - // Store className if set - dataPriv.set( this, "__className__", className ); - } - - // If the element has a class name or if we're passed `false`, - // then remove the whole classname (if there was one, the above saved it). - // Otherwise bring back whatever was previously saved (if anything), - // falling back to the empty string if nothing was stored. - if ( this.setAttribute ) { - this.setAttribute( "class", - className || value === false ? - "" : - dataPriv.get( this, "__className__" ) || "" - ); - } - } - } ); - }, - - hasClass: function( selector ) { - var className, elem, - i = 0; - - className = " " + selector + " "; - while ( ( elem = this[ i++ ] ) ) { - if ( elem.nodeType === 1 && - ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) { - return true; - } - } - - return false; - } -} ); - - - - -var rreturn = /\r/g; - -jQuery.fn.extend( { - val: function( value ) { - var hooks, ret, valueIsFunction, - elem = this[ 0 ]; - - if ( !arguments.length ) { - if ( elem ) { - hooks = jQuery.valHooks[ elem.type ] || - jQuery.valHooks[ elem.nodeName.toLowerCase() ]; - - if ( hooks && - "get" in hooks && - ( ret = hooks.get( elem, "value" ) ) !== undefined - ) { - return ret; - } - - ret = elem.value; - - // Handle most common string cases - if ( typeof ret === "string" ) { - return ret.replace( rreturn, "" ); - } - - // Handle cases where value is null/undef or number - return ret == null ? "" : ret; - } - - return; - } - - valueIsFunction = isFunction( value ); - - return this.each( function( i ) { - var val; - - if ( this.nodeType !== 1 ) { - return; - } - - if ( valueIsFunction ) { - val = value.call( this, i, jQuery( this ).val() ); - } else { - val = value; - } - - // Treat null/undefined as ""; convert numbers to string - if ( val == null ) { - val = ""; - - } else if ( typeof val === "number" ) { - val += ""; - - } else if ( Array.isArray( val ) ) { - val = jQuery.map( val, function( value ) { - return value == null ? "" : value + ""; - } ); - } - - hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; - - // If set returns undefined, fall back to normal setting - if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) { - this.value = val; - } - } ); - } -} ); - -jQuery.extend( { - valHooks: { - option: { - get: function( elem ) { - - var val = jQuery.find.attr( elem, "value" ); - return val != null ? - val : - - // Support: IE <=10 - 11 only - // option.text throws exceptions (trac-14686, trac-14858) - // Strip and collapse whitespace - // https://html.spec.whatwg.org/#strip-and-collapse-whitespace - stripAndCollapse( jQuery.text( elem ) ); - } - }, - select: { - get: function( elem ) { - var value, option, i, - options = elem.options, - index = elem.selectedIndex, - one = elem.type === "select-one", - values = one ? null : [], - max = one ? index + 1 : options.length; - - if ( index < 0 ) { - i = max; - - } else { - i = one ? index : 0; - } - - // Loop through all the selected options - for ( ; i < max; i++ ) { - option = options[ i ]; - - // Support: IE <=9 only - // IE8-9 doesn't update selected after form reset (trac-2551) - if ( ( option.selected || i === index ) && - - // Don't return options that are disabled or in a disabled optgroup - !option.disabled && - ( !option.parentNode.disabled || - !nodeName( option.parentNode, "optgroup" ) ) ) { - - // Get the specific value for the option - value = jQuery( option ).val(); - - // We don't need an array for one selects - if ( one ) { - return value; - } - - // Multi-Selects return an array - values.push( value ); - } - } - - return values; - }, - - set: function( elem, value ) { - var optionSet, option, - options = elem.options, - values = jQuery.makeArray( value ), - i = options.length; - - while ( i-- ) { - option = options[ i ]; - - /* eslint-disable no-cond-assign */ - - if ( option.selected = - jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1 - ) { - optionSet = true; - } - - /* eslint-enable no-cond-assign */ - } - - // Force browsers to behave consistently when non-matching value is set - if ( !optionSet ) { - elem.selectedIndex = -1; - } - return values; - } - } - } -} ); - -// Radios and checkboxes getter/setter -jQuery.each( [ "radio", "checkbox" ], function() { - jQuery.valHooks[ this ] = { - set: function( elem, value ) { - if ( Array.isArray( value ) ) { - return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 ); - } - } - }; - if ( !support.checkOn ) { - jQuery.valHooks[ this ].get = function( elem ) { - return elem.getAttribute( "value" ) === null ? "on" : elem.value; - }; - } -} ); - - - - -// Return jQuery for attributes-only inclusion -var location = window.location; - -var nonce = { guid: Date.now() }; - -var rquery = ( /\?/ ); - - - -// Cross-browser xml parsing -jQuery.parseXML = function( data ) { - var xml, parserErrorElem; - if ( !data || typeof data !== "string" ) { - return null; - } - - // Support: IE 9 - 11 only - // IE throws on parseFromString with invalid input. - try { - xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" ); - } catch ( e ) {} - - parserErrorElem = xml && xml.getElementsByTagName( "parsererror" )[ 0 ]; - if ( !xml || parserErrorElem ) { - jQuery.error( "Invalid XML: " + ( - parserErrorElem ? - jQuery.map( parserErrorElem.childNodes, function( el ) { - return el.textContent; - } ).join( "\n" ) : - data - ) ); - } - return xml; -}; - - -var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, - stopPropagationCallback = function( e ) { - e.stopPropagation(); - }; - -jQuery.extend( jQuery.event, { - - trigger: function( event, data, elem, onlyHandlers ) { - - var i, cur, tmp, bubbleType, ontype, handle, special, lastElement, - eventPath = [ elem || document ], - type = hasOwn.call( event, "type" ) ? event.type : event, - namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : []; - - cur = lastElement = tmp = elem = elem || document; - - // Don't do events on text and comment nodes - if ( elem.nodeType === 3 || elem.nodeType === 8 ) { - return; - } - - // focus/blur morphs to focusin/out; ensure we're not firing them right now - if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { - return; - } - - if ( type.indexOf( "." ) > -1 ) { - - // Namespaced trigger; create a regexp to match event type in handle() - namespaces = type.split( "." ); - type = namespaces.shift(); - namespaces.sort(); - } - ontype = type.indexOf( ":" ) < 0 && "on" + type; - - // Caller can pass in a jQuery.Event object, Object, or just an event type string - event = event[ jQuery.expando ] ? - event : - new jQuery.Event( type, typeof event === "object" && event ); - - // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) - event.isTrigger = onlyHandlers ? 2 : 3; - event.namespace = namespaces.join( "." ); - event.rnamespace = event.namespace ? - new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) : - null; - - // Clean up the event in case it is being reused - event.result = undefined; - if ( !event.target ) { - event.target = elem; - } - - // Clone any incoming data and prepend the event, creating the handler arg list - data = data == null ? - [ event ] : - jQuery.makeArray( data, [ event ] ); - - // Allow special events to draw outside the lines - special = jQuery.event.special[ type ] || {}; - if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { - return; - } - - // Determine event propagation path in advance, per W3C events spec (trac-9951) - // Bubble up to document, then to window; watch for a global ownerDocument var (trac-9724) - if ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) { - - bubbleType = special.delegateType || type; - if ( !rfocusMorph.test( bubbleType + type ) ) { - cur = cur.parentNode; - } - for ( ; cur; cur = cur.parentNode ) { - eventPath.push( cur ); - tmp = cur; - } - - // Only add window if we got to document (e.g., not plain obj or detached DOM) - if ( tmp === ( elem.ownerDocument || document ) ) { - eventPath.push( tmp.defaultView || tmp.parentWindow || window ); - } - } - - // Fire handlers on the event path - i = 0; - while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) { - lastElement = cur; - event.type = i > 1 ? - bubbleType : - special.bindType || type; - - // jQuery handler - handle = ( dataPriv.get( cur, "events" ) || Object.create( null ) )[ event.type ] && - dataPriv.get( cur, "handle" ); - if ( handle ) { - handle.apply( cur, data ); - } - - // Native handler - handle = ontype && cur[ ontype ]; - if ( handle && handle.apply && acceptData( cur ) ) { - event.result = handle.apply( cur, data ); - if ( event.result === false ) { - event.preventDefault(); - } - } - } - event.type = type; - - // If nobody prevented the default action, do it now - if ( !onlyHandlers && !event.isDefaultPrevented() ) { - - if ( ( !special._default || - special._default.apply( eventPath.pop(), data ) === false ) && - acceptData( elem ) ) { - - // Call a native DOM method on the target with the same name as the event. - // Don't do default actions on window, that's where global variables be (trac-6170) - if ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) { - - // Don't re-trigger an onFOO event when we call its FOO() method - tmp = elem[ ontype ]; - - if ( tmp ) { - elem[ ontype ] = null; - } - - // Prevent re-triggering of the same event, since we already bubbled it above - jQuery.event.triggered = type; - - if ( event.isPropagationStopped() ) { - lastElement.addEventListener( type, stopPropagationCallback ); - } - - elem[ type ](); - - if ( event.isPropagationStopped() ) { - lastElement.removeEventListener( type, stopPropagationCallback ); - } - - jQuery.event.triggered = undefined; - - if ( tmp ) { - elem[ ontype ] = tmp; - } - } - } - } - - return event.result; - }, - - // Piggyback on a donor event to simulate a different one - // Used only for `focus(in | out)` events - simulate: function( type, elem, event ) { - var e = jQuery.extend( - new jQuery.Event(), - event, - { - type: type, - isSimulated: true - } - ); - - jQuery.event.trigger( e, null, elem ); - } - -} ); - -jQuery.fn.extend( { - - trigger: function( type, data ) { - return this.each( function() { - jQuery.event.trigger( type, data, this ); - } ); - }, - triggerHandler: function( type, data ) { - var elem = this[ 0 ]; - if ( elem ) { - return jQuery.event.trigger( type, data, elem, true ); - } - } -} ); - - -var - rbracket = /\[\]$/, - rCRLF = /\r?\n/g, - rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, - rsubmittable = /^(?:input|select|textarea|keygen)/i; - -function buildParams( prefix, obj, traditional, add ) { - var name; - - if ( Array.isArray( obj ) ) { - - // Serialize array item. - jQuery.each( obj, function( i, v ) { - if ( traditional || rbracket.test( prefix ) ) { - - // Treat each array item as a scalar. - add( prefix, v ); - - } else { - - // Item is non-scalar (array or object), encode its numeric index. - buildParams( - prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]", - v, - traditional, - add - ); - } - } ); - - } else if ( !traditional && toType( obj ) === "object" ) { - - // Serialize object item. - for ( name in obj ) { - buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); - } - - } else { - - // Serialize scalar item. - add( prefix, obj ); - } -} - -// Serialize an array of form elements or a set of -// key/values into a query string -jQuery.param = function( a, traditional ) { - var prefix, - s = [], - add = function( key, valueOrFunction ) { - - // If value is a function, invoke it and use its return value - var value = isFunction( valueOrFunction ) ? - valueOrFunction() : - valueOrFunction; - - s[ s.length ] = encodeURIComponent( key ) + "=" + - encodeURIComponent( value == null ? "" : value ); - }; - - if ( a == null ) { - return ""; - } - - // If an array was passed in, assume that it is an array of form elements. - if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { - - // Serialize the form elements - jQuery.each( a, function() { - add( this.name, this.value ); - } ); - - } else { - - // If traditional, encode the "old" way (the way 1.3.2 or older - // did it), otherwise encode params recursively. - for ( prefix in a ) { - buildParams( prefix, a[ prefix ], traditional, add ); - } - } - - // Return the resulting serialization - return s.join( "&" ); -}; - -jQuery.fn.extend( { - serialize: function() { - return jQuery.param( this.serializeArray() ); - }, - serializeArray: function() { - return this.map( function() { - - // Can add propHook for "elements" to filter or add form elements - var elements = jQuery.prop( this, "elements" ); - return elements ? jQuery.makeArray( elements ) : this; - } ).filter( function() { - var type = this.type; - - // Use .is( ":disabled" ) so that fieldset[disabled] works - return this.name && !jQuery( this ).is( ":disabled" ) && - rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) && - ( this.checked || !rcheckableType.test( type ) ); - } ).map( function( _i, elem ) { - var val = jQuery( this ).val(); - - if ( val == null ) { - return null; - } - - if ( Array.isArray( val ) ) { - return jQuery.map( val, function( val ) { - return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; - } ); - } - - return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; - } ).get(); - } -} ); - - -var - r20 = /%20/g, - rhash = /#.*$/, - rantiCache = /([?&])_=[^&]*/, - rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg, - - // trac-7653, trac-8125, trac-8152: local protocol detection - rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, - rnoContent = /^(?:GET|HEAD)$/, - rprotocol = /^\/\//, - - /* Prefilters - * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) - * 2) These are called: - * - BEFORE asking for a transport - * - AFTER param serialization (s.data is a string if s.processData is true) - * 3) key is the dataType - * 4) the catchall symbol "*" can be used - * 5) execution will start with transport dataType and THEN continue down to "*" if needed - */ - prefilters = {}, - - /* Transports bindings - * 1) key is the dataType - * 2) the catchall symbol "*" can be used - * 3) selection will start with transport dataType and THEN go to "*" if needed - */ - transports = {}, - - // Avoid comment-prolog char sequence (trac-10098); must appease lint and evade compression - allTypes = "*/".concat( "*" ), - - // Anchor tag for parsing the document origin - originAnchor = document.createElement( "a" ); - -originAnchor.href = location.href; - -// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport -function addToPrefiltersOrTransports( structure ) { - - // dataTypeExpression is optional and defaults to "*" - return function( dataTypeExpression, func ) { - - if ( typeof dataTypeExpression !== "string" ) { - func = dataTypeExpression; - dataTypeExpression = "*"; - } - - var dataType, - i = 0, - dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || []; - - if ( isFunction( func ) ) { - - // For each dataType in the dataTypeExpression - while ( ( dataType = dataTypes[ i++ ] ) ) { - - // Prepend if requested - if ( dataType[ 0 ] === "+" ) { - dataType = dataType.slice( 1 ) || "*"; - ( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func ); - - // Otherwise append - } else { - ( structure[ dataType ] = structure[ dataType ] || [] ).push( func ); - } - } - } - }; -} - -// Base inspection function for prefilters and transports -function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) { - - var inspected = {}, - seekingTransport = ( structure === transports ); - - function inspect( dataType ) { - var selected; - inspected[ dataType ] = true; - jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) { - var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR ); - if ( typeof dataTypeOrTransport === "string" && - !seekingTransport && !inspected[ dataTypeOrTransport ] ) { - - options.dataTypes.unshift( dataTypeOrTransport ); - inspect( dataTypeOrTransport ); - return false; - } else if ( seekingTransport ) { - return !( selected = dataTypeOrTransport ); - } - } ); - return selected; - } - - return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" ); -} - -// A special extend for ajax options -// that takes "flat" options (not to be deep extended) -// Fixes trac-9887 -function ajaxExtend( target, src ) { - var key, deep, - flatOptions = jQuery.ajaxSettings.flatOptions || {}; - - for ( key in src ) { - if ( src[ key ] !== undefined ) { - ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ]; - } - } - if ( deep ) { - jQuery.extend( true, target, deep ); - } - - return target; -} - -/* Handles responses to an ajax request: - * - finds the right dataType (mediates between content-type and expected dataType) - * - returns the corresponding response - */ -function ajaxHandleResponses( s, jqXHR, responses ) { - - var ct, type, finalDataType, firstDataType, - contents = s.contents, - dataTypes = s.dataTypes; - - // Remove auto dataType and get content-type in the process - while ( dataTypes[ 0 ] === "*" ) { - dataTypes.shift(); - if ( ct === undefined ) { - ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" ); - } - } - - // Check if we're dealing with a known content-type - if ( ct ) { - for ( type in contents ) { - if ( contents[ type ] && contents[ type ].test( ct ) ) { - dataTypes.unshift( type ); - break; - } - } - } - - // Check to see if we have a response for the expected dataType - if ( dataTypes[ 0 ] in responses ) { - finalDataType = dataTypes[ 0 ]; - } else { - - // Try convertible dataTypes - for ( type in responses ) { - if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) { - finalDataType = type; - break; - } - if ( !firstDataType ) { - firstDataType = type; - } - } - - // Or just use first one - finalDataType = finalDataType || firstDataType; - } - - // If we found a dataType - // We add the dataType to the list if needed - // and return the corresponding response - if ( finalDataType ) { - if ( finalDataType !== dataTypes[ 0 ] ) { - dataTypes.unshift( finalDataType ); - } - return responses[ finalDataType ]; - } -} - -/* Chain conversions given the request and the original response - * Also sets the responseXXX fields on the jqXHR instance - */ -function ajaxConvert( s, response, jqXHR, isSuccess ) { - var conv2, current, conv, tmp, prev, - converters = {}, - - // Work with a copy of dataTypes in case we need to modify it for conversion - dataTypes = s.dataTypes.slice(); - - // Create converters map with lowercased keys - if ( dataTypes[ 1 ] ) { - for ( conv in s.converters ) { - converters[ conv.toLowerCase() ] = s.converters[ conv ]; - } - } - - current = dataTypes.shift(); - - // Convert to each sequential dataType - while ( current ) { - - if ( s.responseFields[ current ] ) { - jqXHR[ s.responseFields[ current ] ] = response; - } - - // Apply the dataFilter if provided - if ( !prev && isSuccess && s.dataFilter ) { - response = s.dataFilter( response, s.dataType ); - } - - prev = current; - current = dataTypes.shift(); - - if ( current ) { - - // There's only work to do if current dataType is non-auto - if ( current === "*" ) { - - current = prev; - - // Convert response if prev dataType is non-auto and differs from current - } else if ( prev !== "*" && prev !== current ) { - - // Seek a direct converter - conv = converters[ prev + " " + current ] || converters[ "* " + current ]; - - // If none found, seek a pair - if ( !conv ) { - for ( conv2 in converters ) { - - // If conv2 outputs current - tmp = conv2.split( " " ); - if ( tmp[ 1 ] === current ) { - - // If prev can be converted to accepted input - conv = converters[ prev + " " + tmp[ 0 ] ] || - converters[ "* " + tmp[ 0 ] ]; - if ( conv ) { - - // Condense equivalence converters - if ( conv === true ) { - conv = converters[ conv2 ]; - - // Otherwise, insert the intermediate dataType - } else if ( converters[ conv2 ] !== true ) { - current = tmp[ 0 ]; - dataTypes.unshift( tmp[ 1 ] ); - } - break; - } - } - } - } - - // Apply converter (if not an equivalence) - if ( conv !== true ) { - - // Unless errors are allowed to bubble, catch and return them - if ( conv && s.throws ) { - response = conv( response ); - } else { - try { - response = conv( response ); - } catch ( e ) { - return { - state: "parsererror", - error: conv ? e : "No conversion from " + prev + " to " + current - }; - } - } - } - } - } - } - - return { state: "success", data: response }; -} - -jQuery.extend( { - - // Counter for holding the number of active queries - active: 0, - - // Last-Modified header cache for next request - lastModified: {}, - etag: {}, - - ajaxSettings: { - url: location.href, - type: "GET", - isLocal: rlocalProtocol.test( location.protocol ), - global: true, - processData: true, - async: true, - contentType: "application/x-www-form-urlencoded; charset=UTF-8", - - /* - timeout: 0, - data: null, - dataType: null, - username: null, - password: null, - cache: null, - throws: false, - traditional: false, - headers: {}, - */ - - accepts: { - "*": allTypes, - text: "text/plain", - html: "text/html", - xml: "application/xml, text/xml", - json: "application/json, text/javascript" - }, - - contents: { - xml: /\bxml\b/, - html: /\bhtml/, - json: /\bjson\b/ - }, - - responseFields: { - xml: "responseXML", - text: "responseText", - json: "responseJSON" - }, - - // Data converters - // Keys separate source (or catchall "*") and destination types with a single space - converters: { - - // Convert anything to text - "* text": String, - - // Text to html (true = no transformation) - "text html": true, - - // Evaluate text as a json expression - "text json": JSON.parse, - - // Parse text as xml - "text xml": jQuery.parseXML - }, - - // For options that shouldn't be deep extended: - // you can add your own custom options here if - // and when you create one that shouldn't be - // deep extended (see ajaxExtend) - flatOptions: { - url: true, - context: true - } - }, - - // Creates a full fledged settings object into target - // with both ajaxSettings and settings fields. - // If target is omitted, writes into ajaxSettings. - ajaxSetup: function( target, settings ) { - return settings ? - - // Building a settings object - ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) : - - // Extending ajaxSettings - ajaxExtend( jQuery.ajaxSettings, target ); - }, - - ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), - ajaxTransport: addToPrefiltersOrTransports( transports ), - - // Main method - ajax: function( url, options ) { - - // If url is an object, simulate pre-1.5 signature - if ( typeof url === "object" ) { - options = url; - url = undefined; - } - - // Force options to be an object - options = options || {}; - - var transport, - - // URL without anti-cache param - cacheURL, - - // Response headers - responseHeadersString, - responseHeaders, - - // timeout handle - timeoutTimer, - - // Url cleanup var - urlAnchor, - - // Request state (becomes false upon send and true upon completion) - completed, - - // To know if global events are to be dispatched - fireGlobals, - - // Loop variable - i, - - // uncached part of the url - uncached, - - // Create the final options object - s = jQuery.ajaxSetup( {}, options ), - - // Callbacks context - callbackContext = s.context || s, - - // Context for global events is callbackContext if it is a DOM node or jQuery collection - globalEventContext = s.context && - ( callbackContext.nodeType || callbackContext.jquery ) ? - jQuery( callbackContext ) : - jQuery.event, - - // Deferreds - deferred = jQuery.Deferred(), - completeDeferred = jQuery.Callbacks( "once memory" ), - - // Status-dependent callbacks - statusCode = s.statusCode || {}, - - // Headers (they are sent all at once) - requestHeaders = {}, - requestHeadersNames = {}, - - // Default abort message - strAbort = "canceled", - - // Fake xhr - jqXHR = { - readyState: 0, - - // Builds headers hashtable if needed - getResponseHeader: function( key ) { - var match; - if ( completed ) { - if ( !responseHeaders ) { - responseHeaders = {}; - while ( ( match = rheaders.exec( responseHeadersString ) ) ) { - responseHeaders[ match[ 1 ].toLowerCase() + " " ] = - ( responseHeaders[ match[ 1 ].toLowerCase() + " " ] || [] ) - .concat( match[ 2 ] ); - } - } - match = responseHeaders[ key.toLowerCase() + " " ]; - } - return match == null ? null : match.join( ", " ); - }, - - // Raw string - getAllResponseHeaders: function() { - return completed ? responseHeadersString : null; - }, - - // Caches the header - setRequestHeader: function( name, value ) { - if ( completed == null ) { - name = requestHeadersNames[ name.toLowerCase() ] = - requestHeadersNames[ name.toLowerCase() ] || name; - requestHeaders[ name ] = value; - } - return this; - }, - - // Overrides response content-type header - overrideMimeType: function( type ) { - if ( completed == null ) { - s.mimeType = type; - } - return this; - }, - - // Status-dependent callbacks - statusCode: function( map ) { - var code; - if ( map ) { - if ( completed ) { - - // Execute the appropriate callbacks - jqXHR.always( map[ jqXHR.status ] ); - } else { - - // Lazy-add the new callbacks in a way that preserves old ones - for ( code in map ) { - statusCode[ code ] = [ statusCode[ code ], map[ code ] ]; - } - } - } - return this; - }, - - // Cancel the request - abort: function( statusText ) { - var finalText = statusText || strAbort; - if ( transport ) { - transport.abort( finalText ); - } - done( 0, finalText ); - return this; - } - }; - - // Attach deferreds - deferred.promise( jqXHR ); - - // Add protocol if not provided (prefilters might expect it) - // Handle falsy url in the settings object (trac-10093: consistency with old signature) - // We also use the url parameter if available - s.url = ( ( url || s.url || location.href ) + "" ) - .replace( rprotocol, location.protocol + "//" ); - - // Alias method option to type as per ticket trac-12004 - s.type = options.method || options.type || s.method || s.type; - - // Extract dataTypes list - s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ]; - - // A cross-domain request is in order when the origin doesn't match the current origin. - if ( s.crossDomain == null ) { - urlAnchor = document.createElement( "a" ); - - // Support: IE <=8 - 11, Edge 12 - 15 - // IE throws exception on accessing the href property if url is malformed, - // e.g. http://example.com:80x/ - try { - urlAnchor.href = s.url; - - // Support: IE <=8 - 11 only - // Anchor's host property isn't correctly set when s.url is relative - urlAnchor.href = urlAnchor.href; - s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !== - urlAnchor.protocol + "//" + urlAnchor.host; - } catch ( e ) { - - // If there is an error parsing the URL, assume it is crossDomain, - // it can be rejected by the transport if it is invalid - s.crossDomain = true; - } - } - - // Convert data if not already a string - if ( s.data && s.processData && typeof s.data !== "string" ) { - s.data = jQuery.param( s.data, s.traditional ); - } - - // Apply prefilters - inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); - - // If request was aborted inside a prefilter, stop there - if ( completed ) { - return jqXHR; - } - - // We can fire global events as of now if asked to - // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (trac-15118) - fireGlobals = jQuery.event && s.global; - - // Watch for a new set of requests - if ( fireGlobals && jQuery.active++ === 0 ) { - jQuery.event.trigger( "ajaxStart" ); - } - - // Uppercase the type - s.type = s.type.toUpperCase(); - - // Determine if request has content - s.hasContent = !rnoContent.test( s.type ); - - // Save the URL in case we're toying with the If-Modified-Since - // and/or If-None-Match header later on - // Remove hash to simplify url manipulation - cacheURL = s.url.replace( rhash, "" ); - - // More options handling for requests with no content - if ( !s.hasContent ) { - - // Remember the hash so we can put it back - uncached = s.url.slice( cacheURL.length ); - - // If data is available and should be processed, append data to url - if ( s.data && ( s.processData || typeof s.data === "string" ) ) { - cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data; - - // trac-9682: remove data so that it's not used in an eventual retry - delete s.data; - } - - // Add or update anti-cache param if needed - if ( s.cache === false ) { - cacheURL = cacheURL.replace( rantiCache, "$1" ); - uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce.guid++ ) + - uncached; - } - - // Put hash and anti-cache on the URL that will be requested (gh-1732) - s.url = cacheURL + uncached; - - // Change '%20' to '+' if this is encoded form body content (gh-2658) - } else if ( s.data && s.processData && - ( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) { - s.data = s.data.replace( r20, "+" ); - } - - // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. - if ( s.ifModified ) { - if ( jQuery.lastModified[ cacheURL ] ) { - jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] ); - } - if ( jQuery.etag[ cacheURL ] ) { - jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] ); - } - } - - // Set the correct header, if data is being sent - if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { - jqXHR.setRequestHeader( "Content-Type", s.contentType ); - } - - // Set the Accepts header for the server, depending on the dataType - jqXHR.setRequestHeader( - "Accept", - s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ? - s.accepts[ s.dataTypes[ 0 ] ] + - ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : - s.accepts[ "*" ] - ); - - // Check for headers option - for ( i in s.headers ) { - jqXHR.setRequestHeader( i, s.headers[ i ] ); - } - - // Allow custom headers/mimetypes and early abort - if ( s.beforeSend && - ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) { - - // Abort if not done already and return - return jqXHR.abort(); - } - - // Aborting is no longer a cancellation - strAbort = "abort"; - - // Install callbacks on deferreds - completeDeferred.add( s.complete ); - jqXHR.done( s.success ); - jqXHR.fail( s.error ); - - // Get transport - transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); - - // If no transport, we auto-abort - if ( !transport ) { - done( -1, "No Transport" ); - } else { - jqXHR.readyState = 1; - - // Send global event - if ( fireGlobals ) { - globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); - } - - // If request was aborted inside ajaxSend, stop there - if ( completed ) { - return jqXHR; - } - - // Timeout - if ( s.async && s.timeout > 0 ) { - timeoutTimer = window.setTimeout( function() { - jqXHR.abort( "timeout" ); - }, s.timeout ); - } - - try { - completed = false; - transport.send( requestHeaders, done ); - } catch ( e ) { - - // Rethrow post-completion exceptions - if ( completed ) { - throw e; - } - - // Propagate others as results - done( -1, e ); - } - } - - // Callback for when everything is done - function done( status, nativeStatusText, responses, headers ) { - var isSuccess, success, error, response, modified, - statusText = nativeStatusText; - - // Ignore repeat invocations - if ( completed ) { - return; - } - - completed = true; - - // Clear timeout if it exists - if ( timeoutTimer ) { - window.clearTimeout( timeoutTimer ); - } - - // Dereference transport for early garbage collection - // (no matter how long the jqXHR object will be used) - transport = undefined; - - // Cache response headers - responseHeadersString = headers || ""; - - // Set readyState - jqXHR.readyState = status > 0 ? 4 : 0; - - // Determine if successful - isSuccess = status >= 200 && status < 300 || status === 304; - - // Get response data - if ( responses ) { - response = ajaxHandleResponses( s, jqXHR, responses ); - } - - // Use a noop converter for missing script but not if jsonp - if ( !isSuccess && - jQuery.inArray( "script", s.dataTypes ) > -1 && - jQuery.inArray( "json", s.dataTypes ) < 0 ) { - s.converters[ "text script" ] = function() {}; - } - - // Convert no matter what (that way responseXXX fields are always set) - response = ajaxConvert( s, response, jqXHR, isSuccess ); - - // If successful, handle type chaining - if ( isSuccess ) { - - // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. - if ( s.ifModified ) { - modified = jqXHR.getResponseHeader( "Last-Modified" ); - if ( modified ) { - jQuery.lastModified[ cacheURL ] = modified; - } - modified = jqXHR.getResponseHeader( "etag" ); - if ( modified ) { - jQuery.etag[ cacheURL ] = modified; - } - } - - // if no content - if ( status === 204 || s.type === "HEAD" ) { - statusText = "nocontent"; - - // if not modified - } else if ( status === 304 ) { - statusText = "notmodified"; - - // If we have data, let's convert it - } else { - statusText = response.state; - success = response.data; - error = response.error; - isSuccess = !error; - } - } else { - - // Extract error from statusText and normalize for non-aborts - error = statusText; - if ( status || !statusText ) { - statusText = "error"; - if ( status < 0 ) { - status = 0; - } - } - } - - // Set data for the fake xhr object - jqXHR.status = status; - jqXHR.statusText = ( nativeStatusText || statusText ) + ""; - - // Success/Error - if ( isSuccess ) { - deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); - } else { - deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); - } - - // Status-dependent callbacks - jqXHR.statusCode( statusCode ); - statusCode = undefined; - - if ( fireGlobals ) { - globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError", - [ jqXHR, s, isSuccess ? success : error ] ); - } - - // Complete - completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] ); - - if ( fireGlobals ) { - globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); - - // Handle the global AJAX counter - if ( !( --jQuery.active ) ) { - jQuery.event.trigger( "ajaxStop" ); - } - } - } - - return jqXHR; - }, - - getJSON: function( url, data, callback ) { - return jQuery.get( url, data, callback, "json" ); - }, - - getScript: function( url, callback ) { - return jQuery.get( url, undefined, callback, "script" ); - } -} ); - -jQuery.each( [ "get", "post" ], function( _i, method ) { - jQuery[ method ] = function( url, data, callback, type ) { - - // Shift arguments if data argument was omitted - if ( isFunction( data ) ) { - type = type || callback; - callback = data; - data = undefined; - } - - // The url can be an options object (which then must have .url) - return jQuery.ajax( jQuery.extend( { - url: url, - type: method, - dataType: type, - data: data, - success: callback - }, jQuery.isPlainObject( url ) && url ) ); - }; -} ); - -jQuery.ajaxPrefilter( function( s ) { - var i; - for ( i in s.headers ) { - if ( i.toLowerCase() === "content-type" ) { - s.contentType = s.headers[ i ] || ""; - } - } -} ); - - -jQuery._evalUrl = function( url, options, doc ) { - return jQuery.ajax( { - url: url, - - // Make this explicit, since user can override this through ajaxSetup (trac-11264) - type: "GET", - dataType: "script", - cache: true, - async: false, - global: false, - - // Only evaluate the response if it is successful (gh-4126) - // dataFilter is not invoked for failure responses, so using it instead - // of the default converter is kludgy but it works. - converters: { - "text script": function() {} - }, - dataFilter: function( response ) { - jQuery.globalEval( response, options, doc ); - } - } ); -}; - - -jQuery.fn.extend( { - wrapAll: function( html ) { - var wrap; - - if ( this[ 0 ] ) { - if ( isFunction( html ) ) { - html = html.call( this[ 0 ] ); - } - - // The elements to wrap the target around - wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true ); - - if ( this[ 0 ].parentNode ) { - wrap.insertBefore( this[ 0 ] ); - } - - wrap.map( function() { - var elem = this; - - while ( elem.firstElementChild ) { - elem = elem.firstElementChild; - } - - return elem; - } ).append( this ); - } - - return this; - }, - - wrapInner: function( html ) { - if ( isFunction( html ) ) { - return this.each( function( i ) { - jQuery( this ).wrapInner( html.call( this, i ) ); - } ); - } - - return this.each( function() { - var self = jQuery( this ), - contents = self.contents(); - - if ( contents.length ) { - contents.wrapAll( html ); - - } else { - self.append( html ); - } - } ); - }, - - wrap: function( html ) { - var htmlIsFunction = isFunction( html ); - - return this.each( function( i ) { - jQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html ); - } ); - }, - - unwrap: function( selector ) { - this.parent( selector ).not( "body" ).each( function() { - jQuery( this ).replaceWith( this.childNodes ); - } ); - return this; - } -} ); - - -jQuery.expr.pseudos.hidden = function( elem ) { - return !jQuery.expr.pseudos.visible( elem ); -}; -jQuery.expr.pseudos.visible = function( elem ) { - return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length ); -}; - - - - -jQuery.ajaxSettings.xhr = function() { - try { - return new window.XMLHttpRequest(); - } catch ( e ) {} -}; - -var xhrSuccessStatus = { - - // File protocol always yields status code 0, assume 200 - 0: 200, - - // Support: IE <=9 only - // trac-1450: sometimes IE returns 1223 when it should be 204 - 1223: 204 - }, - xhrSupported = jQuery.ajaxSettings.xhr(); - -support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported ); -support.ajax = xhrSupported = !!xhrSupported; - -jQuery.ajaxTransport( function( options ) { - var callback, errorCallback; - - // Cross domain only allowed if supported through XMLHttpRequest - if ( support.cors || xhrSupported && !options.crossDomain ) { - return { - send: function( headers, complete ) { - var i, - xhr = options.xhr(); - - xhr.open( - options.type, - options.url, - options.async, - options.username, - options.password - ); - - // Apply custom fields if provided - if ( options.xhrFields ) { - for ( i in options.xhrFields ) { - xhr[ i ] = options.xhrFields[ i ]; - } - } - - // Override mime type if needed - if ( options.mimeType && xhr.overrideMimeType ) { - xhr.overrideMimeType( options.mimeType ); - } - - // X-Requested-With header - // For cross-domain requests, seeing as conditions for a preflight are - // akin to a jigsaw puzzle, we simply never set it to be sure. - // (it can always be set on a per-request basis or even using ajaxSetup) - // For same-domain requests, won't change header if already provided. - if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) { - headers[ "X-Requested-With" ] = "XMLHttpRequest"; - } - - // Set headers - for ( i in headers ) { - xhr.setRequestHeader( i, headers[ i ] ); - } - - // Callback - callback = function( type ) { - return function() { - if ( callback ) { - callback = errorCallback = xhr.onload = - xhr.onerror = xhr.onabort = xhr.ontimeout = - xhr.onreadystatechange = null; - - if ( type === "abort" ) { - xhr.abort(); - } else if ( type === "error" ) { - - // Support: IE <=9 only - // On a manual native abort, IE9 throws - // errors on any property access that is not readyState - if ( typeof xhr.status !== "number" ) { - complete( 0, "error" ); - } else { - complete( - - // File: protocol always yields status 0; see trac-8605, trac-14207 - xhr.status, - xhr.statusText - ); - } - } else { - complete( - xhrSuccessStatus[ xhr.status ] || xhr.status, - xhr.statusText, - - // Support: IE <=9 only - // IE9 has no XHR2 but throws on binary (trac-11426) - // For XHR2 non-text, let the caller handle it (gh-2498) - ( xhr.responseType || "text" ) !== "text" || - typeof xhr.responseText !== "string" ? - { binary: xhr.response } : - { text: xhr.responseText }, - xhr.getAllResponseHeaders() - ); - } - } - }; - }; - - // Listen to events - xhr.onload = callback(); - errorCallback = xhr.onerror = xhr.ontimeout = callback( "error" ); - - // Support: IE 9 only - // Use onreadystatechange to replace onabort - // to handle uncaught aborts - if ( xhr.onabort !== undefined ) { - xhr.onabort = errorCallback; - } else { - xhr.onreadystatechange = function() { - - // Check readyState before timeout as it changes - if ( xhr.readyState === 4 ) { - - // Allow onerror to be called first, - // but that will not handle a native abort - // Also, save errorCallback to a variable - // as xhr.onerror cannot be accessed - window.setTimeout( function() { - if ( callback ) { - errorCallback(); - } - } ); - } - }; - } - - // Create the abort callback - callback = callback( "abort" ); - - try { - - // Do send the request (this may raise an exception) - xhr.send( options.hasContent && options.data || null ); - } catch ( e ) { - - // trac-14683: Only rethrow if this hasn't been notified as an error yet - if ( callback ) { - throw e; - } - } - }, - - abort: function() { - if ( callback ) { - callback(); - } - } - }; - } -} ); - - - - -// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432) -jQuery.ajaxPrefilter( function( s ) { - if ( s.crossDomain ) { - s.contents.script = false; - } -} ); - -// Install script dataType -jQuery.ajaxSetup( { - accepts: { - script: "text/javascript, application/javascript, " + - "application/ecmascript, application/x-ecmascript" - }, - contents: { - script: /\b(?:java|ecma)script\b/ - }, - converters: { - "text script": function( text ) { - jQuery.globalEval( text ); - return text; - } - } -} ); - -// Handle cache's special case and crossDomain -jQuery.ajaxPrefilter( "script", function( s ) { - if ( s.cache === undefined ) { - s.cache = false; - } - if ( s.crossDomain ) { - s.type = "GET"; - } -} ); - -// Bind script tag hack transport -jQuery.ajaxTransport( "script", function( s ) { - - // This transport only deals with cross domain or forced-by-attrs requests - if ( s.crossDomain || s.scriptAttrs ) { - var script, callback; - return { - send: function( _, complete ) { - script = jQuery( " - - diff --git a/staticfiles/js/rapport.js b/staticfiles/js/rapport.js deleted file mode 100644 index b0f0e6d..0000000 --- a/staticfiles/js/rapport.js +++ /dev/null @@ -1,102 +0,0 @@ -if ('serviceWorker' in navigator) { - window.addEventListener('load', function() { - navigator.serviceWorker.register('{% static "sw.js" %}').then(function(reg) { - console.log('Service worker registered.', reg); - }).catch(function(err) { - console.warn('Service worker registration failed:', err); - }); - }); -} - -const couleursOrange = ['#b35400', '#ff9f1c', '#ffc107', '#ffb84d', '#ffcc80']; -const departementLabels = {{ departement_labels|safe }}; -const departementCounts = {{ departement_counts|safe }}; -const sexeLabels = {{ sexe_labels|safe }}; -const sexeCounts = {{ sexe_counts|safe }}; -const projetLabels = {{ projet_labels|safe }}; -const projetCounts = {{ projet_counts|safe }}; -const ticketsLabels = ["Traités", "Non traités"]; -const ticketsCounts = [{{ tickets_traite }}, {{ tickets_non_traite }}]; -const domaineLabels = {{ domaine_labels|safe }}; -const domaineCounts = {{ domaine_counts|safe }}; - -new Chart(document.getElementById("chartDepartement"), { - type: 'pie', - plugins: [ChartDataLabels], - data: { - labels: departementLabels, - datasets: [{ data: departementCounts, backgroundColor: couleursOrange }] - }, - options: { - plugins: { - legend: { position: 'bottom' }, - datalabels: { color: '#fff', font: { weight: 'bold', size: 14 }, formatter: v => v } - } - } -}); - -new Chart(document.getElementById("chartSexe"), { - type: 'doughnut', - plugins: [ChartDataLabels], - data: { - labels: sexeLabels, - datasets: [{ data: sexeCounts, backgroundColor: couleursOrange }] - }, - options: { - plugins: { - legend: { position: 'bottom' }, - datalabels: { color: '#fff', font: { weight: 'bold', size: 14 }, formatter: v => v } - } - } -}); - -new Chart(document.getElementById("chartProjets"), { - type: 'bar', - plugins: [ChartDataLabels], - data: { - labels: projetLabels, - datasets: [{ label:'Nombre de projets', data: projetCounts, backgroundColor: couleursOrange }] - }, - options: { - responsive: true, - plugins: { - legend: { display: false }, - datalabels: { anchor:'end', align:'top', color:'#000', font:{ weight:'bold', size:16 }, formatter:v => v } - }, - scales: { - y: { beginAtZero:true, ticks:{ stepSize:1, precision:0 }, title:{ display:true, text:'Nombre de projets' } }, - x: { title:{ display:true, text:'' } } - } - } -}); - -new Chart(document.getElementById("chartDomaine"), { - type: 'bar', - plugins: [ChartDataLabels], - data: { - labels: domaineLabels, - datasets: [{ label:'Nombre de projets', data: domaineCounts, backgroundColor: couleursOrange }] - }, - options: { - responsive: true, - plugins: { - legend: { display: false }, - datalabels: { anchor:'end', align:'top', color:'#000', font:{ weight:'bold', size:14 }, formatter:v => v } - }, - scales: { - y: { beginAtZero:true, title:{ display:true, text:'Nombre de projets' }, ticks:{ precision:0, stepSize:1 } }, - x: { - ticks:{ autoSkip:false, maxRotation:100, minRotation:30, callback: function(value){ return this.getLabelForValue(value); } } - } - } - } -}); - -document.getElementById('btnVoirRapport').addEventListener('click', function() { - const projetId = document.getElementById('projetId').value; - if(!projetId) return alert("Veuillez sélectionner un projet."); - fetch(`/rapports/projet/${projetId}/`) - .then(resp => { if(!resp.ok) throw new Error("Projet non trouvé"); return resp.text(); }) - .then(html => { document.getElementById('contenuRapportProjet').innerHTML = html; }) - .catch(err => { document.getElementById('contenuRapportProjet').innerHTML = "

      Erreur lors du chargement.

      "; console.error(err); }); -}); \ No newline at end of file diff --git a/staticfiles/js/sirh-index.js b/staticfiles/js/sirh-index.js deleted file mode 100644 index 242fed3..0000000 --- a/staticfiles/js/sirh-index.js +++ /dev/null @@ -1,75 +0,0 @@ - - - - - - - -> - - -{% endif %} - - - - - - \ No newline at end of file diff --git a/staticfiles/styles.css b/staticfiles/styles.css deleted file mode 100644 index 3b4d9ff..0000000 --- a/staticfiles/styles.css +++ /dev/null @@ -1,278 +0,0 @@ -/* === Print === */ -@media print { - nav, .btn, .sidebar, .form-select, .form-control { - display: none !important; - } - body { - font-size: 12pt; - color: black; - } - table { - border-collapse: collapse; - } -} - - -@media (max-width: 768px) { - main { - margin-left: 0; - } -} - -/* === Body & Container === */ -body { - background-color: #e4dccc; - background-attachment: fixed; -} - -.dashboard-container { - background-color: #ffffff; - box-shadow: 0 0 10px rgba(0,0,0,0.05); - border-radius: 8px; - padding: 20px; - margin: 30px auto; - max-width: 1200px; -} - - - - -.sidebar { - position: fixed; - width: 220px; -} -main { - margin-left: 220px; -} - - - - - -/* === Sidebar === */ -.sidebar { - background: linear-gradient(180deg, #b35400, #993d00); /* dégradé orange foncé */ - color: white; - min-height: 100vh; /* prend toute la hauteur */ - top: 0; - z-index: 1000; - overflow-y: auto; - padding: 1rem; -} - -.sidebar .nav-link { - color: white; - font-weight: 700; -} - -.sidebar .nav-link:hover { - background-color: rgba(255, 255, 255, 0.1); - border-radius: 5px; - color: white; -} - -.sidebar .dropdown-menu { - display: none; - position: relative; - left: 10px; - top: -5px; - border: none; - padding-left: 1rem; - box-shadow: none; -} - -.sidebar .dropdown:hover .dropdown-menu { - display: block; -} - -.sidebar a { - color: white; -} - -.sidebar a:hover { - color: white; -} - -/* === Navbar / Logo / Profil === */ -.logo { - max-width: 80px; -} - -.img-profil { - width: 80px !important; - height: 80px !important; - object-fit: cover; - border-radius: 50%; -} - -/* === Cards === */ -.card { - border: 1px solid #dee2e6; - box-shadow: 0 2px 4px rgba(0,0,0,0.05); - border-radius: 8px; - transition: transform 0.3s ease; -} - -.card:hover { - transform: scale(1.02); -} - -.card-header { - background-color: #f8f9fa; - font-weight: bold !important; - color: black !important; - font-size: 1rem; - border-bottom: none; -} - -.card-body h5 { - color: black !important; - font-weight: bold; - font-size: 2.2rem; -} - -/* === Stat cards === */ -.stat-card { - background: #fff; - padding: 20px; - border-radius: 8px; - box-shadow: 0 2px 5px rgba(113, 11, 11, 0.1); -} - -/* === Employé / Projet details === */ -.employe-detail { - background-color: #f9f9f9; - border-radius: 8px; - box-shadow: 0 2px 6px rgba(0,0,0,0.1); -} - -.employe-detail .card-title { - font-size: 1.8rem; - margin-bottom: 0.5rem; -} - -.employe-detail p { - margin-bottom: 0.4rem; - font-size: 1rem; -} - -.employe-detail a.btn { - font-weight: 500; -} - -.employe-card, .projet-card { - background-color: #fff; - border-radius: 10px; - box-shadow: 0 4px 12px rgba(0,0,0,0.1); - padding: 2.5rem; - max-width: 1400px; - margin: 0 auto; - font-size: 1.1rem; -} - -/* === Forms === */ -.form-wrapper { - max-width: 1000px; - margin: auto; - background-color: rgba(255, 255, 255, 0.95); -} - -form label { - font-weight: 600; - margin-top: 1rem; - display: block; -} - -form input, form select, form textarea { - width: 100%; - padding: 0.5rem; - margin-top: 0.3rem; - border-radius: 5px; - border: 1px solid #ccc; -} - -/* === Formation badges === */ -.formation-badge { - position: relative; - display: inline-block; -} - -.formation-actions { - position: absolute; - top: -5px; - right: -5px; - display: none; -} - -.formation-badge:hover .formation-actions { - display: inline-block; -} - -.formation-actions button { - background: none; - border: none; - color: #fff; - margin-left: 5px; - font-size: 0.9rem; -} - -/* === Context menu === */ -#contextMenu { - width: 150px; -} - -/* === Transitions / Animations === */ -.fade-out { - opacity: 0; - transition: opacity 0.5s ease; -} - -#main-content { - transition: opacity 0.3s ease; -} - - -.login-box { - background: linear-gradient(to right, #f5f7fa, #c3cfe2); - border-radius: 10px; - box-shadow: 0 0 10px rgba(0,0,0,0.3); - width: 100%; - max-width: 400px; -} - -/* === Responsive === */ -@media (max-width: 576px) { - .modal-dialog { - max-width: 100%; - margin: 0; - height: 100%; - } - - .modal-content { - height: 100%; - border-radius: 0; - } - - .modal-body { - overflow-y: auto; - } - - .modal-footer button { - width: 100%; - } - - .img-profil { - width: 50px; - height: 50px; - } - - .sidebar { - width: 100%; - padding: 0.5rem 1rem; - } - - .sidebar .nav-link { - font-size: 0.9rem; - padding: 0.5rem 1rem; - } -}