From a7de8d3e7541d7cd440f9af0c8d265f757aa6680 Mon Sep 17 00:00:00 2001 From: Flatlogic Bot Date: Fri, 21 Nov 2025 16:49:36 +0000 Subject: [PATCH] Auto commit: 2025-11-21T16:49:36.652Z --- assets/pasted-20251121-164054-e82b35e0.png | Bin 0 -> 582191 bytes assets/pasted-20251121-164831-ce72092a.png | Bin 0 -> 206696 bytes assets/vm-shot-2025-11-21T16-37-30-131Z.jpg | Bin 0 -> 28781 bytes assets/vm-shot-2025-11-21T16-38-18-805Z.jpg | Bin 0 -> 28781 bytes core/__pycache__/models.cpython-311.pyc | Bin 209 -> 1152 bytes core/__pycache__/urls.cpython-311.pyc | Bin 347 -> 539 bytes core/__pycache__/views.cpython-311.pyc | Bin 1364 -> 2906 bytes core/migrations/0001_initial.py | 26 + .../__pycache__/0001_initial.cpython-311.pyc | Bin 0 -> 1159 bytes core/models.py | 11 +- core/templates/base.html | 31 +- core/templates/core/index.html | 217 +- core/urls.py | 4 +- core/views.py | 21 + static/admin/css/autocomplete.css | 279 + static/admin/css/base.css | 1180 ++ static/admin/css/changelists.css | 343 + static/admin/css/dark_mode.css | 130 + static/admin/css/dashboard.css | 29 + static/admin/css/forms.css | 498 + static/admin/css/login.css | 61 + static/admin/css/nav_sidebar.css | 150 + static/admin/css/responsive.css | 904 ++ static/admin/css/responsive_rtl.css | 89 + static/admin/css/rtl.css | 293 + static/admin/css/unusable_password_field.css | 19 + .../css/vendor/select2/LICENSE-SELECT2.md | 21 + static/admin/css/vendor/select2/select2.css | 481 + .../admin/css/vendor/select2/select2.min.css | 1 + static/admin/css/widgets.css | 613 + static/admin/img/LICENSE | 20 + static/admin/img/README.txt | 7 + static/admin/img/calendar-icons.svg | 63 + static/admin/img/gis/move_vertex_off.svg | 1 + static/admin/img/gis/move_vertex_on.svg | 1 + static/admin/img/icon-addlink.svg | 3 + static/admin/img/icon-alert.svg | 3 + static/admin/img/icon-calendar.svg | 9 + static/admin/img/icon-changelink.svg | 3 + static/admin/img/icon-clock.svg | 9 + static/admin/img/icon-deletelink.svg | 3 + static/admin/img/icon-hidelink.svg | 3 + static/admin/img/icon-no.svg | 3 + static/admin/img/icon-unknown-alt.svg | 3 + static/admin/img/icon-unknown.svg | 3 + static/admin/img/icon-viewlink.svg | 3 + static/admin/img/icon-yes.svg | 3 + static/admin/img/inline-delete.svg | 3 + static/admin/img/search.svg | 3 + static/admin/img/selector-icons.svg | 34 + static/admin/img/sorting-icons.svg | 19 + static/admin/img/tooltag-add.svg | 3 + static/admin/img/tooltag-arrowright.svg | 3 + static/admin/js/SelectBox.js | 116 + static/admin/js/SelectFilter2.js | 311 + static/admin/js/actions.js | 204 + static/admin/js/admin/DateTimeShortcuts.js | 408 + static/admin/js/admin/RelatedObjectLookups.js | 252 + static/admin/js/autocomplete.js | 33 + static/admin/js/calendar.js | 239 + static/admin/js/cancel.js | 29 + static/admin/js/change_form.js | 16 + static/admin/js/core.js | 184 + static/admin/js/filters.js | 30 + static/admin/js/inlines.js | 359 + static/admin/js/jquery.init.js | 8 + static/admin/js/nav_sidebar.js | 79 + static/admin/js/popup_response.js | 15 + static/admin/js/prepopulate.js | 43 + static/admin/js/prepopulate_init.js | 15 + static/admin/js/theme.js | 51 + static/admin/js/unusable_password_field.js | 29 + static/admin/js/urlify.js | 169 + static/admin/js/vendor/jquery/LICENSE.txt | 20 + static/admin/js/vendor/jquery/jquery.js | 10716 ++++++++++++++++ static/admin/js/vendor/jquery/jquery.min.js | 2 + static/admin/js/vendor/select2/LICENSE.md | 21 + static/admin/js/vendor/select2/i18n/af.js | 3 + static/admin/js/vendor/select2/i18n/ar.js | 3 + static/admin/js/vendor/select2/i18n/az.js | 3 + static/admin/js/vendor/select2/i18n/bg.js | 3 + static/admin/js/vendor/select2/i18n/bn.js | 3 + static/admin/js/vendor/select2/i18n/bs.js | 3 + static/admin/js/vendor/select2/i18n/ca.js | 3 + static/admin/js/vendor/select2/i18n/cs.js | 3 + static/admin/js/vendor/select2/i18n/da.js | 3 + static/admin/js/vendor/select2/i18n/de.js | 3 + static/admin/js/vendor/select2/i18n/dsb.js | 3 + static/admin/js/vendor/select2/i18n/el.js | 3 + static/admin/js/vendor/select2/i18n/en.js | 3 + static/admin/js/vendor/select2/i18n/es.js | 3 + static/admin/js/vendor/select2/i18n/et.js | 3 + static/admin/js/vendor/select2/i18n/eu.js | 3 + static/admin/js/vendor/select2/i18n/fa.js | 3 + static/admin/js/vendor/select2/i18n/fi.js | 3 + static/admin/js/vendor/select2/i18n/fr.js | 3 + static/admin/js/vendor/select2/i18n/gl.js | 3 + static/admin/js/vendor/select2/i18n/he.js | 3 + static/admin/js/vendor/select2/i18n/hi.js | 3 + static/admin/js/vendor/select2/i18n/hr.js | 3 + static/admin/js/vendor/select2/i18n/hsb.js | 3 + static/admin/js/vendor/select2/i18n/hu.js | 3 + static/admin/js/vendor/select2/i18n/hy.js | 3 + static/admin/js/vendor/select2/i18n/id.js | 3 + static/admin/js/vendor/select2/i18n/is.js | 3 + static/admin/js/vendor/select2/i18n/it.js | 3 + static/admin/js/vendor/select2/i18n/ja.js | 3 + static/admin/js/vendor/select2/i18n/ka.js | 3 + static/admin/js/vendor/select2/i18n/km.js | 3 + static/admin/js/vendor/select2/i18n/ko.js | 3 + static/admin/js/vendor/select2/i18n/lt.js | 3 + static/admin/js/vendor/select2/i18n/lv.js | 3 + static/admin/js/vendor/select2/i18n/mk.js | 3 + static/admin/js/vendor/select2/i18n/ms.js | 3 + static/admin/js/vendor/select2/i18n/nb.js | 3 + static/admin/js/vendor/select2/i18n/ne.js | 3 + static/admin/js/vendor/select2/i18n/nl.js | 3 + static/admin/js/vendor/select2/i18n/pl.js | 3 + static/admin/js/vendor/select2/i18n/ps.js | 3 + static/admin/js/vendor/select2/i18n/pt-BR.js | 3 + static/admin/js/vendor/select2/i18n/pt.js | 3 + static/admin/js/vendor/select2/i18n/ro.js | 3 + static/admin/js/vendor/select2/i18n/ru.js | 3 + static/admin/js/vendor/select2/i18n/sk.js | 3 + static/admin/js/vendor/select2/i18n/sl.js | 3 + static/admin/js/vendor/select2/i18n/sq.js | 3 + .../admin/js/vendor/select2/i18n/sr-Cyrl.js | 3 + static/admin/js/vendor/select2/i18n/sr.js | 3 + static/admin/js/vendor/select2/i18n/sv.js | 3 + static/admin/js/vendor/select2/i18n/th.js | 3 + static/admin/js/vendor/select2/i18n/tk.js | 3 + static/admin/js/vendor/select2/i18n/tr.js | 3 + static/admin/js/vendor/select2/i18n/uk.js | 3 + static/admin/js/vendor/select2/i18n/vi.js | 3 + static/admin/js/vendor/select2/i18n/zh-CN.js | 3 + static/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 + static/admin/js/vendor/xregexp/LICENSE.txt | 21 + static/admin/js/vendor/xregexp/xregexp.js | 6126 +++++++++ static/admin/js/vendor/xregexp/xregexp.min.js | 17 + static/css/custom.css | 141 + static/js/game.js | 303 + 143 files changed, 32408 insertions(+), 154 deletions(-) create mode 100644 assets/pasted-20251121-164054-e82b35e0.png create mode 100644 assets/pasted-20251121-164831-ce72092a.png create mode 100644 assets/vm-shot-2025-11-21T16-37-30-131Z.jpg create mode 100644 assets/vm-shot-2025-11-21T16-38-18-805Z.jpg create mode 100644 core/migrations/0001_initial.py create mode 100644 core/migrations/__pycache__/0001_initial.cpython-311.pyc create mode 100644 static/admin/css/autocomplete.css create mode 100644 static/admin/css/base.css create mode 100644 static/admin/css/changelists.css create mode 100644 static/admin/css/dark_mode.css create mode 100644 static/admin/css/dashboard.css create mode 100644 static/admin/css/forms.css create mode 100644 static/admin/css/login.css create mode 100644 static/admin/css/nav_sidebar.css create mode 100644 static/admin/css/responsive.css create mode 100644 static/admin/css/responsive_rtl.css create mode 100644 static/admin/css/rtl.css create mode 100644 static/admin/css/unusable_password_field.css create mode 100644 static/admin/css/vendor/select2/LICENSE-SELECT2.md create mode 100644 static/admin/css/vendor/select2/select2.css create mode 100644 static/admin/css/vendor/select2/select2.min.css create mode 100644 static/admin/css/widgets.css create mode 100644 static/admin/img/LICENSE create mode 100644 static/admin/img/README.txt create mode 100644 static/admin/img/calendar-icons.svg create mode 100644 static/admin/img/gis/move_vertex_off.svg create mode 100644 static/admin/img/gis/move_vertex_on.svg create mode 100644 static/admin/img/icon-addlink.svg create mode 100644 static/admin/img/icon-alert.svg create mode 100644 static/admin/img/icon-calendar.svg create mode 100644 static/admin/img/icon-changelink.svg create mode 100644 static/admin/img/icon-clock.svg create mode 100644 static/admin/img/icon-deletelink.svg create mode 100644 static/admin/img/icon-hidelink.svg create mode 100644 static/admin/img/icon-no.svg create mode 100644 static/admin/img/icon-unknown-alt.svg create mode 100644 static/admin/img/icon-unknown.svg create mode 100644 static/admin/img/icon-viewlink.svg create mode 100644 static/admin/img/icon-yes.svg create mode 100644 static/admin/img/inline-delete.svg create mode 100644 static/admin/img/search.svg create mode 100644 static/admin/img/selector-icons.svg create mode 100644 static/admin/img/sorting-icons.svg create mode 100644 static/admin/img/tooltag-add.svg create mode 100644 static/admin/img/tooltag-arrowright.svg create mode 100644 static/admin/js/SelectBox.js create mode 100644 static/admin/js/SelectFilter2.js create mode 100644 static/admin/js/actions.js create mode 100644 static/admin/js/admin/DateTimeShortcuts.js create mode 100644 static/admin/js/admin/RelatedObjectLookups.js create mode 100644 static/admin/js/autocomplete.js create mode 100644 static/admin/js/calendar.js create mode 100644 static/admin/js/cancel.js create mode 100644 static/admin/js/change_form.js create mode 100644 static/admin/js/core.js create mode 100644 static/admin/js/filters.js create mode 100644 static/admin/js/inlines.js create mode 100644 static/admin/js/jquery.init.js create mode 100644 static/admin/js/nav_sidebar.js create mode 100644 static/admin/js/popup_response.js create mode 100644 static/admin/js/prepopulate.js create mode 100644 static/admin/js/prepopulate_init.js create mode 100644 static/admin/js/theme.js create mode 100644 static/admin/js/unusable_password_field.js create mode 100644 static/admin/js/urlify.js create mode 100644 static/admin/js/vendor/jquery/LICENSE.txt create mode 100644 static/admin/js/vendor/jquery/jquery.js create mode 100644 static/admin/js/vendor/jquery/jquery.min.js create mode 100644 static/admin/js/vendor/select2/LICENSE.md create mode 100644 static/admin/js/vendor/select2/i18n/af.js create mode 100644 static/admin/js/vendor/select2/i18n/ar.js create mode 100644 static/admin/js/vendor/select2/i18n/az.js create mode 100644 static/admin/js/vendor/select2/i18n/bg.js create mode 100644 static/admin/js/vendor/select2/i18n/bn.js create mode 100644 static/admin/js/vendor/select2/i18n/bs.js create mode 100644 static/admin/js/vendor/select2/i18n/ca.js create mode 100644 static/admin/js/vendor/select2/i18n/cs.js create mode 100644 static/admin/js/vendor/select2/i18n/da.js create mode 100644 static/admin/js/vendor/select2/i18n/de.js create mode 100644 static/admin/js/vendor/select2/i18n/dsb.js create mode 100644 static/admin/js/vendor/select2/i18n/el.js create mode 100644 static/admin/js/vendor/select2/i18n/en.js create mode 100644 static/admin/js/vendor/select2/i18n/es.js create mode 100644 static/admin/js/vendor/select2/i18n/et.js create mode 100644 static/admin/js/vendor/select2/i18n/eu.js create mode 100644 static/admin/js/vendor/select2/i18n/fa.js create mode 100644 static/admin/js/vendor/select2/i18n/fi.js create mode 100644 static/admin/js/vendor/select2/i18n/fr.js create mode 100644 static/admin/js/vendor/select2/i18n/gl.js create mode 100644 static/admin/js/vendor/select2/i18n/he.js create mode 100644 static/admin/js/vendor/select2/i18n/hi.js create mode 100644 static/admin/js/vendor/select2/i18n/hr.js create mode 100644 static/admin/js/vendor/select2/i18n/hsb.js create mode 100644 static/admin/js/vendor/select2/i18n/hu.js create mode 100644 static/admin/js/vendor/select2/i18n/hy.js create mode 100644 static/admin/js/vendor/select2/i18n/id.js create mode 100644 static/admin/js/vendor/select2/i18n/is.js create mode 100644 static/admin/js/vendor/select2/i18n/it.js create mode 100644 static/admin/js/vendor/select2/i18n/ja.js create mode 100644 static/admin/js/vendor/select2/i18n/ka.js create mode 100644 static/admin/js/vendor/select2/i18n/km.js create mode 100644 static/admin/js/vendor/select2/i18n/ko.js create mode 100644 static/admin/js/vendor/select2/i18n/lt.js create mode 100644 static/admin/js/vendor/select2/i18n/lv.js create mode 100644 static/admin/js/vendor/select2/i18n/mk.js create mode 100644 static/admin/js/vendor/select2/i18n/ms.js create mode 100644 static/admin/js/vendor/select2/i18n/nb.js create mode 100644 static/admin/js/vendor/select2/i18n/ne.js create mode 100644 static/admin/js/vendor/select2/i18n/nl.js create mode 100644 static/admin/js/vendor/select2/i18n/pl.js create mode 100644 static/admin/js/vendor/select2/i18n/ps.js create mode 100644 static/admin/js/vendor/select2/i18n/pt-BR.js create mode 100644 static/admin/js/vendor/select2/i18n/pt.js create mode 100644 static/admin/js/vendor/select2/i18n/ro.js create mode 100644 static/admin/js/vendor/select2/i18n/ru.js create mode 100644 static/admin/js/vendor/select2/i18n/sk.js create mode 100644 static/admin/js/vendor/select2/i18n/sl.js create mode 100644 static/admin/js/vendor/select2/i18n/sq.js create mode 100644 static/admin/js/vendor/select2/i18n/sr-Cyrl.js create mode 100644 static/admin/js/vendor/select2/i18n/sr.js create mode 100644 static/admin/js/vendor/select2/i18n/sv.js create mode 100644 static/admin/js/vendor/select2/i18n/th.js create mode 100644 static/admin/js/vendor/select2/i18n/tk.js create mode 100644 static/admin/js/vendor/select2/i18n/tr.js create mode 100644 static/admin/js/vendor/select2/i18n/uk.js create mode 100644 static/admin/js/vendor/select2/i18n/vi.js create mode 100644 static/admin/js/vendor/select2/i18n/zh-CN.js create mode 100644 static/admin/js/vendor/select2/i18n/zh-TW.js create mode 100644 static/admin/js/vendor/select2/select2.full.js create mode 100644 static/admin/js/vendor/select2/select2.full.min.js create mode 100644 static/admin/js/vendor/xregexp/LICENSE.txt create mode 100644 static/admin/js/vendor/xregexp/xregexp.js create mode 100644 static/admin/js/vendor/xregexp/xregexp.min.js create mode 100644 static/css/custom.css create mode 100644 static/js/game.js diff --git a/assets/pasted-20251121-164054-e82b35e0.png b/assets/pasted-20251121-164054-e82b35e0.png new file mode 100644 index 0000000000000000000000000000000000000000..77199403bace08ddf01d20bbac1a6c9a60ca2387 GIT binary patch literal 582191 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 lSzg7f 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]}OIdmU5X?FFld}Jy#ztk{p@Is+ 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 V7;btVh1RtPFg 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%0DFV2N>M?uw`1ArVpXiYn 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
-
-

Analyzing your requirements and generating your app…

-
- Loading… + + +
+
+
+
+ +
+
+
+
+
+
+

How to Play

+

Use the left and right arrow keys to move your character.

+

Catch as many oranges as you can before you run out of lives!

+
+
+
+
+ +
+
+
+

Leaderboard

+ + + + + + + + + + + +
#PlayerScore
+
+
+
+ + +
-
- Page updated: {{ current_time|date:"Y-m-d H:i:s" }} (UTC) -
+ {% endblock %} \ No newline at end of file diff --git a/core/urls.py b/core/urls.py index 6299e3d..30db662 100644 --- a/core/urls.py +++ b/core/urls.py @@ -1,7 +1,9 @@ from django.urls import path -from .views import home +from .views import home, score_list, score_create urlpatterns = [ path("", home, name="home"), + path("api/scores/", score_list, name="score_list"), + path("api/scores/create/", score_create, name="score_create"), ] diff --git a/core/views.py b/core/views.py index c9aed12..6b55409 100644 --- a/core/views.py +++ b/core/views.py @@ -4,6 +4,10 @@ import platform from django import get_version as django_version from django.shortcuts import render from django.utils import timezone +from django.http import JsonResponse +from django.views.decorators.csrf import csrf_exempt +import json +from .models import Score def home(request): @@ -23,3 +27,20 @@ def home(request): "project_image_url": os.getenv("PROJECT_IMAGE_URL", ""), } return render(request, "core/index.html", context) + + +@csrf_exempt +def score_create(request): + if request.method == 'POST': + data = json.loads(request.body) + score = Score.objects.create( + player_name=data.get('player_name', 'Anonymous'), + score=data.get('score', 0) + ) + return JsonResponse({'status': 'success', 'score_id': score.id}) + return JsonResponse({'status': 'error', 'message': 'Invalid request method'}, status=405) + +def score_list(request): + scores = Score.objects.all().order_by('-score')[:10] + data = list(scores.values('player_name', 'score')) + return JsonResponse(data, safe=False) diff --git a/static/admin/css/autocomplete.css b/static/admin/css/autocomplete.css new file mode 100644 index 0000000..7478c2c --- /dev/null +++ b/static/admin/css/autocomplete.css @@ -0,0 +1,279 @@ +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/static/admin/css/base.css b/static/admin/css/base.css new file mode 100644 index 0000000..3791043 --- /dev/null +++ b/static/admin/css/base.css @@ -0,0 +1,1180 @@ +/* + 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/static/admin/css/changelists.css b/static/admin/css/changelists.css new file mode 100644 index 0000000..005b776 --- /dev/null +++ b/static/admin/css/changelists.css @@ -0,0 +1,343 @@ +/* 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/static/admin/css/dark_mode.css b/static/admin/css/dark_mode.css new file mode 100644 index 0000000..65b58d0 --- /dev/null +++ b/static/admin/css/dark_mode.css @@ -0,0 +1,130 @@ +@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/static/admin/css/dashboard.css b/static/admin/css/dashboard.css new file mode 100644 index 0000000..242b81a --- /dev/null +++ b/static/admin/css/dashboard.css @@ -0,0 +1,29 @@ +/* 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/static/admin/css/forms.css b/static/admin/css/forms.css new file mode 100644 index 0000000..c6ce788 --- /dev/null +++ b/static/admin/css/forms.css @@ -0,0 +1,498 @@ +@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/static/admin/css/login.css b/static/admin/css/login.css new file mode 100644 index 0000000..805a34b --- /dev/null +++ b/static/admin/css/login.css @@ -0,0 +1,61 @@ +/* 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/static/admin/css/nav_sidebar.css b/static/admin/css/nav_sidebar.css new file mode 100644 index 0000000..7eb0de9 --- /dev/null +++ b/static/admin/css/nav_sidebar.css @@ -0,0 +1,150 @@ +.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/static/admin/css/responsive.css b/static/admin/css/responsive.css new file mode 100644 index 0000000..f0fcade --- /dev/null +++ b/static/admin/css/responsive.css @@ -0,0 +1,904 @@ +/* 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/static/admin/css/responsive_rtl.css b/static/admin/css/responsive_rtl.css new file mode 100644 index 0000000..5e8f5c5 --- /dev/null +++ b/static/admin/css/responsive_rtl.css @@ -0,0 +1,89 @@ +/* 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/static/admin/css/rtl.css b/static/admin/css/rtl.css new file mode 100644 index 0000000..a2556d0 --- /dev/null +++ b/static/admin/css/rtl.css @@ -0,0 +1,293 @@ +/* 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/static/admin/css/unusable_password_field.css b/static/admin/css/unusable_password_field.css new file mode 100644 index 0000000..d46eb03 --- /dev/null +++ b/static/admin/css/unusable_password_field.css @@ -0,0 +1,19 @@ +/* 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/static/admin/css/vendor/select2/LICENSE-SELECT2.md b/static/admin/css/vendor/select2/LICENSE-SELECT2.md new file mode 100644 index 0000000..8cb8a2b --- /dev/null +++ b/static/admin/css/vendor/select2/LICENSE-SELECT2.md @@ -0,0 +1,21 @@ +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/static/admin/css/vendor/select2/select2.css b/static/admin/css/vendor/select2/select2.css new file mode 100644 index 0000000..750b320 --- /dev/null +++ b/static/admin/css/vendor/select2/select2.css @@ -0,0 +1,481 @@ +.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/static/admin/css/vendor/select2/select2.min.css b/static/admin/css/vendor/select2/select2.min.css new file mode 100644 index 0000000..7c18ad5 --- /dev/null +++ b/static/admin/css/vendor/select2/select2.min.css @@ -0,0 +1 @@ +.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/static/admin/css/widgets.css b/static/admin/css/widgets.css new file mode 100644 index 0000000..a5f615a --- /dev/null +++ b/static/admin/css/widgets.css @@ -0,0 +1,613 @@ +/* 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/static/admin/img/LICENSE b/static/admin/img/LICENSE new file mode 100644 index 0000000..a4faaa1 --- /dev/null +++ b/static/admin/img/LICENSE @@ -0,0 +1,20 @@ +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/static/admin/img/README.txt b/static/admin/img/README.txt new file mode 100644 index 0000000..bf81f35 --- /dev/null +++ b/static/admin/img/README.txt @@ -0,0 +1,7 @@ +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/static/admin/img/calendar-icons.svg b/static/admin/img/calendar-icons.svg new file mode 100644 index 0000000..04c0274 --- /dev/null +++ b/static/admin/img/calendar-icons.svg @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + diff --git a/static/admin/img/gis/move_vertex_off.svg b/static/admin/img/gis/move_vertex_off.svg new file mode 100644 index 0000000..228854f --- /dev/null +++ b/static/admin/img/gis/move_vertex_off.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/admin/img/gis/move_vertex_on.svg b/static/admin/img/gis/move_vertex_on.svg new file mode 100644 index 0000000..96b87fd --- /dev/null +++ b/static/admin/img/gis/move_vertex_on.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/admin/img/icon-addlink.svg b/static/admin/img/icon-addlink.svg new file mode 100644 index 0000000..8d5c6a3 --- /dev/null +++ b/static/admin/img/icon-addlink.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/admin/img/icon-alert.svg b/static/admin/img/icon-alert.svg new file mode 100644 index 0000000..e51ea83 --- /dev/null +++ b/static/admin/img/icon-alert.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/admin/img/icon-calendar.svg b/static/admin/img/icon-calendar.svg new file mode 100644 index 0000000..97910a9 --- /dev/null +++ b/static/admin/img/icon-calendar.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/static/admin/img/icon-changelink.svg b/static/admin/img/icon-changelink.svg new file mode 100644 index 0000000..592b093 --- /dev/null +++ b/static/admin/img/icon-changelink.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/admin/img/icon-clock.svg b/static/admin/img/icon-clock.svg new file mode 100644 index 0000000..bf9985d --- /dev/null +++ b/static/admin/img/icon-clock.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/static/admin/img/icon-deletelink.svg b/static/admin/img/icon-deletelink.svg new file mode 100644 index 0000000..4059b15 --- /dev/null +++ b/static/admin/img/icon-deletelink.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/admin/img/icon-hidelink.svg b/static/admin/img/icon-hidelink.svg new file mode 100644 index 0000000..2a8b404 --- /dev/null +++ b/static/admin/img/icon-hidelink.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/admin/img/icon-no.svg b/static/admin/img/icon-no.svg new file mode 100644 index 0000000..2e0d383 --- /dev/null +++ b/static/admin/img/icon-no.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/admin/img/icon-unknown-alt.svg b/static/admin/img/icon-unknown-alt.svg new file mode 100644 index 0000000..1c6b99f --- /dev/null +++ b/static/admin/img/icon-unknown-alt.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/admin/img/icon-unknown.svg b/static/admin/img/icon-unknown.svg new file mode 100644 index 0000000..50b4f97 --- /dev/null +++ b/static/admin/img/icon-unknown.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/admin/img/icon-viewlink.svg b/static/admin/img/icon-viewlink.svg new file mode 100644 index 0000000..a1ca1d3 --- /dev/null +++ b/static/admin/img/icon-viewlink.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/admin/img/icon-yes.svg b/static/admin/img/icon-yes.svg new file mode 100644 index 0000000..5883d87 --- /dev/null +++ b/static/admin/img/icon-yes.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/admin/img/inline-delete.svg b/static/admin/img/inline-delete.svg new file mode 100644 index 0000000..8751150 --- /dev/null +++ b/static/admin/img/inline-delete.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/admin/img/search.svg b/static/admin/img/search.svg new file mode 100644 index 0000000..c8c69b2 --- /dev/null +++ b/static/admin/img/search.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/admin/img/selector-icons.svg b/static/admin/img/selector-icons.svg new file mode 100644 index 0000000..926b8e2 --- /dev/null +++ b/static/admin/img/selector-icons.svg @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/admin/img/sorting-icons.svg b/static/admin/img/sorting-icons.svg new file mode 100644 index 0000000..7c31ec9 --- /dev/null +++ b/static/admin/img/sorting-icons.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/static/admin/img/tooltag-add.svg b/static/admin/img/tooltag-add.svg new file mode 100644 index 0000000..1ca64ae --- /dev/null +++ b/static/admin/img/tooltag-add.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/admin/img/tooltag-arrowright.svg b/static/admin/img/tooltag-arrowright.svg new file mode 100644 index 0000000..b664d61 --- /dev/null +++ b/static/admin/img/tooltag-arrowright.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/admin/js/SelectBox.js b/static/admin/js/SelectBox.js new file mode 100644 index 0000000..3db4ec7 --- /dev/null +++ b/static/admin/js/SelectBox.js @@ -0,0 +1,116 @@ +'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/static/admin/js/SelectFilter2.js b/static/admin/js/SelectFilter2.js new file mode 100644 index 0000000..970b511 --- /dev/null +++ b/static/admin/js/SelectFilter2.js @@ -0,0 +1,311 @@ +/*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/static/admin/js/actions.js b/static/admin/js/actions.js new file mode 100644 index 0000000..04b25e9 --- /dev/null +++ b/static/admin/js/actions.js @@ -0,0 +1,204 @@ +/*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/static/admin/js/admin/DateTimeShortcuts.js b/static/admin/js/admin/DateTimeShortcuts.js new file mode 100644 index 0000000..aa1cae9 --- /dev/null +++ b/static/admin/js/admin/DateTimeShortcuts.js @@ -0,0 +1,408 @@ +/*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: + //
    + //

    Choose a time

    + // + //

    Cancel

    + //
    + + 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/static/admin/js/admin/RelatedObjectLookups.js b/static/admin/js/admin/RelatedObjectLookups.js new file mode 100644 index 0000000..1fc03c6 --- /dev/null +++ b/static/admin/js/admin/RelatedObjectLookups.js @@ -0,0 +1,252 @@ +/*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/static/admin/js/autocomplete.js b/static/admin/js/autocomplete.js new file mode 100644 index 0000000..d3daeab --- /dev/null +++ b/static/admin/js/autocomplete.js @@ -0,0 +1,33 @@ +'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/static/admin/js/calendar.js b/static/admin/js/calendar.js new file mode 100644 index 0000000..776310f --- /dev/null +++ b/static/admin/js/calendar.js @@ -0,0 +1,239 @@ +/*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/static/admin/js/cancel.js b/static/admin/js/cancel.js new file mode 100644 index 0000000..3069c6f --- /dev/null +++ b/static/admin/js/cancel.js @@ -0,0 +1,29 @@ +'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/static/admin/js/change_form.js b/static/admin/js/change_form.js new file mode 100644 index 0000000..96a4c62 --- /dev/null +++ b/static/admin/js/change_form.js @@ -0,0 +1,16 @@ +'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/static/admin/js/core.js b/static/admin/js/core.js new file mode 100644 index 0000000..10504d4 --- /dev/null +++ b/static/admin/js/core.js @@ -0,0 +1,184 @@ +// 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/static/admin/js/filters.js b/static/admin/js/filters.js new file mode 100644 index 0000000..f5536eb --- /dev/null +++ b/static/admin/js/filters.js @@ -0,0 +1,30 @@ +/** + * 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/static/admin/js/inlines.js b/static/admin/js/inlines.js new file mode 100644 index 0000000..cd3726c --- /dev/null +++ b/static/admin/js/inlines.js @@ -0,0 +1,359 @@ +/*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/static/admin/js/jquery.init.js b/static/admin/js/jquery.init.js new file mode 100644 index 0000000..f40b27f --- /dev/null +++ b/static/admin/js/jquery.init.js @@ -0,0 +1,8 @@ +/*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/static/admin/js/nav_sidebar.js b/static/admin/js/nav_sidebar.js new file mode 100644 index 0000000..7e735db --- /dev/null +++ b/static/admin/js/nav_sidebar.js @@ -0,0 +1,79 @@ +'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/static/admin/js/popup_response.js b/static/admin/js/popup_response.js new file mode 100644 index 0000000..fecf0f4 --- /dev/null +++ b/static/admin/js/popup_response.js @@ -0,0 +1,15 @@ +'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/static/admin/js/prepopulate.js b/static/admin/js/prepopulate.js new file mode 100644 index 0000000..89e95ab --- /dev/null +++ b/static/admin/js/prepopulate.js @@ -0,0 +1,43 @@ +/*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/static/admin/js/prepopulate_init.js b/static/admin/js/prepopulate_init.js new file mode 100644 index 0000000..a58841f --- /dev/null +++ b/static/admin/js/prepopulate_init.js @@ -0,0 +1,15 @@ +'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/static/admin/js/theme.js b/static/admin/js/theme.js new file mode 100644 index 0000000..e79d375 --- /dev/null +++ b/static/admin/js/theme.js @@ -0,0 +1,51 @@ +'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/static/admin/js/unusable_password_field.js b/static/admin/js/unusable_password_field.js new file mode 100644 index 0000000..ec26238 --- /dev/null +++ b/static/admin/js/unusable_password_field.js @@ -0,0 +1,29 @@ +"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/static/admin/js/urlify.js b/static/admin/js/urlify.js new file mode 100644 index 0000000..9fc0409 --- /dev/null +++ b/static/admin/js/urlify.js @@ -0,0 +1,169 @@ +/*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/static/admin/js/vendor/jquery/LICENSE.txt b/static/admin/js/vendor/jquery/LICENSE.txt new file mode 100644 index 0000000..f642c3f --- /dev/null +++ b/static/admin/js/vendor/jquery/LICENSE.txt @@ -0,0 +1,20 @@ +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/static/admin/js/vendor/jquery/jquery.js b/static/admin/js/vendor/jquery/jquery.js new file mode 100644 index 0000000..1a86433 --- /dev/null +++ b/static/admin/js/vendor/jquery/jquery.js @@ -0,0 +1,10716 @@ +/*! + * 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( "

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 E9}Imh@&Et; literal 0 HcmV?d00001 diff --git a/assets/vm-shot-2025-11-21T16-37-30-131Z.jpg b/assets/vm-shot-2025-11-21T16-37-30-131Z.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ff153c65b68166c5cd2c3aff24a09c9d21062f54 GIT binary patch literal 28781 zcmeFZ30Rufwl_|iwrSHQsddVv_Lx&mG|^C}L`6;;(YBFrIEW-sw9$wWBSsD42yJuH zC=S$CA_Vf! z8_xjd^yX;*AQ5*n`^R%Y5N?w|DW-|6Uo(*D2Ggqt^Rn)CeicRD5XZ|BVP zRWp4&?!Tg=|0_D?M#}H`3(R@^6R+ccf7b8m_Zq(+i$fyJ|KBmcj{;Hwe***qKKs4> z=I`c|!~_7&=m3D--~a2iXc_>(zYPE!9Q)U6fBpdgIPiA>;IZ^yul*|~H?E{y`Iq9} zG=IKW_@PD~y{`fcQ_L2G4QFFbL%&$1WbwDiOBfu8`93TeZ zW~M#?oCW{^-aF%fbAY$seCzGE-hBJ*x8B~f=k0g)ez14%yYKF`+JE5v4{WUt9<;Tx zu{mt_vBTjb$Bx?Ae01`oV@}Q|TuvNvICc8e@zWn4KXLr`LU!%hvuE!+doB0wwLE^< z=J4_VaN2nSuy|*;;w`}LU5rS7N{*SBfMS0)l+gZLV}yXlbICt{;t8Kx}nRgIr)`4 zw{W~`JSUwulhlfMo0C*GKE|HoT)9(@W5n|g>wKcYtsd@Yjm|Gfn@GXKIsYwZXSaO5 zswu|4^e)6hE^W!`w3vch$UDRVwKu>n$Ymj7gANO3Bt~5I{J8@1qkayTD0yg>u6%&OT<06@E2U zR(mp=TwR))HsRxxSFxQ{w7KWBWStbAI5lx~F+J+g=t=^0P?@Io?DJMmai^o{Rb1s< zv?FmsqyR6z?Kb|8ai!wU7Yqr(r?qypN6(s(b`XFe9n$gf8e`V0+t_ort`r;m-!G$9 z_Fo@k&zqseTY?DdhO3vs+~)8LUO|bz{ynAn8z^9X(;1}6ae0JEccIT^$8<5I@{a8+ zg67xjw+;>Gq_E_F>XN1IKUJ^9UzJ∋6>Kuoj(VDAcMKF*WJ8&w!?+{B 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 DAy80C literal 0 HcmV?d00001 diff --git a/assets/vm-shot-2025-11-21T16-38-18-805Z.jpg b/assets/vm-shot-2025-11-21T16-38-18-805Z.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ff153c65b68166c5cd2c3aff24a09c9d21062f54 GIT binary patch literal 28781 zcmeFZ30Rufwl_|iwrSHQsddVv_Lx&mG|^C}L`6;;(YBFrIEW-sw9$wWBSsD42yJuH zC=S$CA_Vf! z8_xjd^yX;*AQ5*n`^R%Y5N?w|DW-|6Uo(*D2Ggqt^Rn)CeicRD5XZ|BVP zRWp4&?!Tg=|0_D?M#}H`3(R@^6R+ccf7b8m_Zq(+i$fyJ|KBmcj{;Hwe***qKKs4> z=I`c|!~_7&=m3D--~a2iXc_>(zYPE!9Q)U6fBpdgIPiA>;IZ^yul*|~H?E{y`Iq9} zG=IKW_@PD~y{`fcQ_L2G4QFFbL%&$1WbwDiOBfu8`93TeZ zW~M#?oCW{^-aF%fbAY$seCzGE-hBJ*x8B~f=k0g)ez14%yYKF`+JE5v4{WUt9<;Tx zu{mt_vBTjb$Bx?Ae01`oV@}Q|TuvNvICc8e@zWn4KXLr`LU!%hvuE!+doB0wwLE^< z=J4_VaN2nSuy|*;;w`}LU5rS7N{*SBfMS0)l+gZLV}yXlbICt{;t8Kx}nRgIr)`4 zw{W~`JSUwulhlfMo0C*GKE|HoT)9(@W5n|g>wKcYtsd@Yjm|Gfn@GXKIsYwZXSaO5 zswu|4^e)6hE^W!`w3vch$UDRVwKu>n$Ymj7gANO3Bt~5I{J8@1qkayTD0yg>u6%&OT<06@E2U zR(mp=TwR))HsRxxSFxQ{w7KWBWStbAI5lx~F+J+g=t=^0P?@Io?DJMmai^o{Rb1s< zv?FmsqyR6z?Kb|8ai!wU7Yqr(r?qypN6(s(b`XFe9n$gf8e`V0+t_ort`r;m-!G$9 z_Fo@k&zqseTY?DdhO3vs+~)8LUO|bz{ynAn8z^9X(;1}6ae0JEccIT^$8<5I@{a8+ zg67xjw+;>Gq_E_F>XN1IKUJ^9UzJ∋6>Kuoj(VDAcMKF*WJ8&w!?+{B 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 DAy80C literal 0 HcmV?d00001 diff --git a/core/__pycache__/models.cpython-311.pyc b/core/__pycache__/models.cpython-311.pyc index 9aa598b9d5171b2bb0d207f045e07f9fbbb95a64..c86a2e04253539600450d1994377c591ec2e74bd 100644 GIT binary patch literal 1152 zcmZuwJ8u&~5Z=9qV>@Ren-B`3yhM;(U`vL=iV#8qf_NlNQeCq;yo+OV_JzH(@(_iK zAf=#iMT!WC0vV7~@EiCAj^x6+mMWbir%J`looz_S-tFwn&d$#F&D?!UB;o|duTOKO zN0gA?XbguwQ2KdL4hScl+N45FN{K?A5w7eJt_oUKh5=2LkQU5vm@3!SNLoKZGfn+S z#o@ws3j=qsXal3)0Of!PVp2{_MIk~h4}FmKNNEDN7R+#%dT=5#w40!`h6XXm0&jG< z!PO(}Qhbc-d&GNFj{@|VudfvxDNZ08Z=F*BkzG+)KLb9q= z5x(wXdPt?Y!hYjo(A;?@yWvzsw)VPK^=etMEeZfbX15&q*4?xUB8xHEu-KW+9e<25 z*OQFxCIT{yDkDl)2bYp2hicc7F6Wpt5L#AMr*HIu=iT&_nk2fs2ToN{y_}%-) z^QtF`Vz7m``-vx(C)P_95gha51u0;IGs~0L@E*KgPN5h9l=!Cv0+YBOK>UL*wa~Z& z<^5i0r*g-sTql*Qzw8>b`^z0;_Sl&381wa~-Q;3ps*_y&dB2^^A1CvjWWN5Qr&0Z0 zkBmfw>N99w7N@v(c7-EEh~TjPFLrWmp2~#~=<2FhLogg@BCd3@HpLj5!Rsj8Tk?3@J>(44TX@K?*b( zZ?Wa(r=;c-`)M-W;!Md(%uCPLOGzqX21>4E_zY6>OHV%|KQ~psG^sSNq*On(A~m_R zB)>?%JijQrxF9h(RX;huC{-U~j9x+IFAf_ZyEG@&u80Guoe_wOWr4&8W=2NF8w@fR Ku%RM0pb7xTsWln^ diff --git a/core/__pycache__/urls.cpython-311.pyc b/core/__pycache__/urls.cpython-311.pyc index 1f807fae1897c89361c99c5e868a26d00799b73f..ada6fc623381f4328e375e6ce185cea31e27bf8e 100644 GIT binary patch literal 539 zcmZ`!O;5r=5Z$HI@=;L38G=_5!^R6IV?yHDi=KKhwY!08OUbqsG$wN77bw5LkLbal zQj#7>PbQwYk#OUpy9E<9Iy<{NGjHDH%|oeFK*HkNZTmy~?=tza>^fKsL~w^FqS!$$ zHZVpsLlr0EDu&{M0j_GO7-bN{6qrKQ7wuj_=vmyArAU?m&HahwnMw=4k+x!JR6j!X z;!F;y;{B&j?d*5iF#qPzMsxa>1k`Civ}SoV7%);p@nEf%N-(> zk?=I^1|eYsW`%*rN#En=e$TWRk&20&+~{2{b9=5wLx=72EkTyM`8VR3D;VP`szg8i z4edt%`&>h6et0k{kB-M$1hom&VyI0aCu-Gk;jt1ya{|p6nrSV{SI5_{jR;y3XvNT) OXJIol)aBtDLc=G_3Xd%S delta 253 zcmbQua+}F%IWI340}vcY|CNyiq#uJgFu)3Be6|5HrZc24q%h_%qH5$j|t#()?;pa{r>VlN=^ftit!@dks;1yuBa sLHq(L`oPA(%Gu!3A=D8vgY5!~{6!Y|D=hLKn3?#Q8n{8QhzDpK0L`L2NB{r; diff --git a/core/__pycache__/views.cpython-311.pyc b/core/__pycache__/views.cpython-311.pyc index 6867ddf286a519cf1754ac97038f9f1e4605fbf2..1959a5977e86c783f7034bddd1b32c2f8dc6703c 100644 GIT binary patch delta 1729 zcmZ`(&u<$=6rTOz_1f!=9fyXLhQ_V(YiSb+N)m)3P*v0hgwm=(LRf@oNPy)6F0o@bxmeDlql znSI}mA7$MgU+a1lf&Kb0mF-iuI(mf7t)W+E5Dr<9d^8;u5Jp(Bw0tZb3u3|2(>e}g z)#}K{({aEe8z`M1F&y1MdywgXrwc6Ii8UBYVqpduu`TP;WkX=Gw;a20n>fpM!6DGs zG7epsBcG7`vin$od4PpxGB*A0;l7wi0>IQ|%XAlPnx|dmX(^?h0g!fb_guLsy&bv$ zp)rGp;BQm72ZQ|C&(Y+xU-R5lefp+`-c&|Bor-P&@OH(%!!-y8LB;1?%JRnwX0; z0EDo*E4H6t1~uuNgCjVKwOtX%9_j6Ap=KS^Oult<<{hR%1&V~u70f(gk*fu}P|Vva z4huO@C_?!m43Q4-_302e7Is!L8R9sG$P~vlUErz#cP@)rh)`sb6vn>jI1TBHV$0Af(pFxYlvq)HOmsERJ&}~V7I$=%3 zp?^yoG#H*^fW&vSTg~BTV^j=!@W(WLg$eZHhsy^F=0GS;u7x z=nNDVh@dF|h36~*I0n<&H4trRfKR2b!{{Z>NP}BPCwlVU?6H3SNIzfIQ@)-$){P_G z*dMOySA6}-;kCothu3`lmG$cZ<+40dVp;kvm!Pu``MZ z9LjWU>WuPhmGZlXjt1HCHYS$ScvBZR%(WdH?;8{>9_arsbrOgx7I}@{fN`!C=LlR~ z5(J_An>lJD^dn>8G*PsZE^!wfZPW*0Y>u=444F1GXTjFH%$Nl diff --git a/core/migrations/0001_initial.py b/core/migrations/0001_initial.py new file mode 100644 index 0000000..d336bf7 --- /dev/null +++ b/core/migrations/0001_initial.py @@ -0,0 +1,26 @@ +# Generated by Django 5.2.7 on 2025-11-21 16:43 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='Score', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('player_name', models.CharField(max_length=100)), + ('score', models.IntegerField()), + ('created_at', models.DateTimeField(auto_now_add=True)), + ], + options={ + 'ordering': ['-score'], + }, + ), + ] diff --git a/core/migrations/__pycache__/0001_initial.cpython-311.pyc b/core/migrations/__pycache__/0001_initial.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f5a967c9a93bb14f91564eadfe2f0b537230bc54 GIT binary patch literal 1159 zcmZuwJ#5oJ6uz?^H+FtVs#ZZokVurDRB9d66+uf;DiE-M5b|QVxx;ly>~MBk%G7~@ zk%@L>DnfK`M;0VTSF%ub6A}}fQJI){=fp+)-1*+UckjFR-o5wywp7v)jE}Dy?!JW3 zS0Q90H)4*j0<(<>BDjls*u*`_lrWOeG9uCoL}ZHBZZi? zp6f6>bbT-2YR@OM8+5XpVo!sC{rEGGZA6iY2{I*uP1!-FA|aYvQw2~AA`ux*#@6yf z8BQ=vh2-|sT?N8`H5`v6GL|B>?1bd^v|S7sSSJ`g#bhy{T~NHw)Cg=8QhgyiB6zR( zw+%-jB~o^kys^<`OH zw=5{+pi6--TGrEn-4(Y$8go52gm8J0&_4AD^*SyMm}m}OSW4e_SF`{Vb>hVvuCoX) zZwqH!TUxc*kS*TwLh8_wRJsXidEoZwP^tTUI%=qQ=vY+d=XGP%?@?p0GVsEIL7&kM zSY^hB&z=N*yF(3;3gdSp8m(6AiZzOLuD{7dgQY|;!9I|!lli4QzO|evctYK}ljMuFrp%i0bXbdONPSqsnrkP5u4? DrMfyn literal 0 HcmV?d00001 diff --git a/core/models.py b/core/models.py index 71a8362..c37351a 100644 --- a/core/models.py +++ b/core/models.py @@ -1,3 +1,12 @@ from django.db import models -# Create your models here. +class Score(models.Model): + player_name = models.CharField(max_length=100) + score = models.IntegerField() + created_at = models.DateTimeField(auto_now_add=True) + + def __str__(self): + return f'{self.player_name}: {self.score}' + + class Meta: + ordering = ['-score'] \ No newline at end of file diff --git a/core/templates/base.html b/core/templates/base.html index 788576e..ae0fe7e 100644 --- a/core/templates/base.html +++ b/core/templates/base.html @@ -1,11 +1,32 @@ +{% load static %} - + - {% block title %}Knowledge Base{% endblock %} + + {% block title %}Orange Catcher{% endblock %} + + + + + + + + + + + + {% block head %}{% endblock %} - - + + + {% block content %}{% endblock %} - + + + + + + + diff --git a/core/templates/core/index.html b/core/templates/core/index.html index 0a3f404..f3d112c 100644 --- a/core/templates/core/index.html +++ b/core/templates/core/index.html @@ -1,154 +1,77 @@ {% extends "base.html" %} -{% block title %}{{ project_name }}{% endblock %} - -{% block head %} -{% if project_description %} - - - -{% endif %} -{% if project_image_url %} - - -{% endif %} - - - - -{% endblock %} +{% block title %}Orange Catcher - A Fun Arcade Game{% endblock %} {% block content %} -