From a46312f78ee17b6091438805ff81c0de9bd3c8db Mon Sep 17 00:00:00 2001 From: "Andrey K. Choi" Date: Tue, 25 Nov 2025 06:34:16 +0900 Subject: [PATCH] Auto backup before update 2025-11-25 06:34:16 --- BACKUP_SETUP_COMPLETE.md | 80 + COMMIT_SUMMARY.md | 70 + smartsoltech/static/img/favicon.png | Bin 0 -> 137315 bytes smartsoltech/static/img/logo.jpg | Bin 0 -> 139438 bytes smartsoltech/static/img/logo.png | Bin 0 -> 137315 bytes .../static/img/{logo.svg => logo__old.svg} | 0 smartsoltech/static/manifest.json | 4 +- .../staticfiles/admin/css/autocomplete.css | 279 - smartsoltech/staticfiles/admin/css/base.css | 1179 -- .../staticfiles/admin/css/changelists.css | 343 - .../staticfiles/admin/css/dark_mode.css | 130 - .../staticfiles/admin/css/dashboard.css | 29 - smartsoltech/staticfiles/admin/css/forms.css | 508 - smartsoltech/staticfiles/admin/css/login.css | 61 - .../staticfiles/admin/css/nav_sidebar.css | 150 - .../staticfiles/admin/css/responsive.css | 967 -- .../staticfiles/admin/css/responsive_rtl.css | 111 - smartsoltech/staticfiles/admin/css/rtl.css | 291 - .../admin/css/unusable_password_field.css | 19 - .../css/vendor/select2/LICENSE-SELECT2.md | 21 - .../admin/css/vendor/select2/select2.css | 481 - .../admin/css/vendor/select2/select2.min.css | 1 - .../staticfiles/admin/css/widgets.css | 593 - smartsoltech/staticfiles/admin/img/LICENSE | 20 - smartsoltech/staticfiles/admin/img/README.txt | 7 - .../staticfiles/admin/img/calendar-icons.svg | 63 - .../admin/img/gis/move_vertex_off.svg | 1 - .../admin/img/gis/move_vertex_on.svg | 1 - .../staticfiles/admin/img/icon-addlink.svg | 3 - .../staticfiles/admin/img/icon-alert.svg | 3 - .../staticfiles/admin/img/icon-calendar.svg | 9 - .../staticfiles/admin/img/icon-changelink.svg | 3 - .../staticfiles/admin/img/icon-clock.svg | 9 - .../staticfiles/admin/img/icon-deletelink.svg | 3 - .../staticfiles/admin/img/icon-hidelink.svg | 3 - .../staticfiles/admin/img/icon-no.svg | 3 - .../admin/img/icon-unknown-alt.svg | 3 - .../staticfiles/admin/img/icon-unknown.svg | 3 - .../staticfiles/admin/img/icon-viewlink.svg | 3 - .../staticfiles/admin/img/icon-yes.svg | 3 - .../staticfiles/admin/img/inline-delete.svg | 3 - smartsoltech/staticfiles/admin/img/search.svg | 3 - .../staticfiles/admin/img/selector-icons.svg | 34 - .../staticfiles/admin/img/sorting-icons.svg | 19 - .../staticfiles/admin/img/tooltag-add.svg | 3 - .../admin/img/tooltag-arrowright.svg | 3 - .../staticfiles/admin/js/SelectBox.js | 116 - .../staticfiles/admin/js/SelectFilter2.js | 286 - smartsoltech/staticfiles/admin/js/actions.js | 204 - .../admin/js/admin/DateTimeShortcuts.js | 408 - .../admin/js/admin/RelatedObjectLookups.js | 240 - .../staticfiles/admin/js/autocomplete.js | 33 - smartsoltech/staticfiles/admin/js/calendar.js | 239 - .../staticfiles/admin/js/change_form.js | 16 - smartsoltech/staticfiles/admin/js/core.js | 184 - smartsoltech/staticfiles/admin/js/filters.js | 30 - smartsoltech/staticfiles/admin/js/inlines.js | 359 - .../staticfiles/admin/js/jquery.init.js | 8 - .../staticfiles/admin/js/nav_sidebar.js | 79 - .../staticfiles/admin/js/prepopulate.js | 43 - .../staticfiles/admin/js/prepopulate_init.js | 15 - smartsoltech/staticfiles/admin/js/theme.js | 51 - .../admin/js/unusable_password_field.js | 29 - smartsoltech/staticfiles/admin/js/urlify.js | 169 - .../admin/js/vendor/jquery/LICENSE.txt | 20 - .../admin/js/vendor/jquery/jquery.js | 10716 ---------------- .../admin/js/vendor/jquery/jquery.min.js | 2 - .../admin/js/vendor/select2/LICENSE.md | 21 - .../admin/js/vendor/select2/i18n/af.js | 3 - .../admin/js/vendor/select2/i18n/ar.js | 3 - .../admin/js/vendor/select2/i18n/az.js | 3 - .../admin/js/vendor/select2/i18n/bg.js | 3 - .../admin/js/vendor/select2/i18n/bn.js | 3 - .../admin/js/vendor/select2/i18n/bs.js | 3 - .../admin/js/vendor/select2/i18n/ca.js | 3 - .../admin/js/vendor/select2/i18n/cs.js | 3 - .../admin/js/vendor/select2/i18n/da.js | 3 - .../admin/js/vendor/select2/i18n/de.js | 3 - .../admin/js/vendor/select2/i18n/dsb.js | 3 - .../admin/js/vendor/select2/i18n/el.js | 3 - .../admin/js/vendor/select2/i18n/en.js | 3 - .../admin/js/vendor/select2/i18n/es.js | 3 - .../admin/js/vendor/select2/i18n/et.js | 3 - .../admin/js/vendor/select2/i18n/eu.js | 3 - .../admin/js/vendor/select2/i18n/fa.js | 3 - .../admin/js/vendor/select2/i18n/fi.js | 3 - .../admin/js/vendor/select2/i18n/fr.js | 3 - .../admin/js/vendor/select2/i18n/gl.js | 3 - .../admin/js/vendor/select2/i18n/he.js | 3 - .../admin/js/vendor/select2/i18n/hi.js | 3 - .../admin/js/vendor/select2/i18n/hr.js | 3 - .../admin/js/vendor/select2/i18n/hsb.js | 3 - .../admin/js/vendor/select2/i18n/hu.js | 3 - .../admin/js/vendor/select2/i18n/hy.js | 3 - .../admin/js/vendor/select2/i18n/id.js | 3 - .../admin/js/vendor/select2/i18n/is.js | 3 - .../admin/js/vendor/select2/i18n/it.js | 3 - .../admin/js/vendor/select2/i18n/ja.js | 3 - .../admin/js/vendor/select2/i18n/ka.js | 3 - .../admin/js/vendor/select2/i18n/km.js | 3 - .../admin/js/vendor/select2/i18n/ko.js | 3 - .../admin/js/vendor/select2/i18n/lt.js | 3 - .../admin/js/vendor/select2/i18n/lv.js | 3 - .../admin/js/vendor/select2/i18n/mk.js | 3 - .../admin/js/vendor/select2/i18n/ms.js | 3 - .../admin/js/vendor/select2/i18n/nb.js | 3 - .../admin/js/vendor/select2/i18n/ne.js | 3 - .../admin/js/vendor/select2/i18n/nl.js | 3 - .../admin/js/vendor/select2/i18n/pl.js | 3 - .../admin/js/vendor/select2/i18n/ps.js | 3 - .../admin/js/vendor/select2/i18n/pt-BR.js | 3 - .../admin/js/vendor/select2/i18n/pt.js | 3 - .../admin/js/vendor/select2/i18n/ro.js | 3 - .../admin/js/vendor/select2/i18n/ru.js | 3 - .../admin/js/vendor/select2/i18n/sk.js | 3 - .../admin/js/vendor/select2/i18n/sl.js | 3 - .../admin/js/vendor/select2/i18n/sq.js | 3 - .../admin/js/vendor/select2/i18n/sr-Cyrl.js | 3 - .../admin/js/vendor/select2/i18n/sr.js | 3 - .../admin/js/vendor/select2/i18n/sv.js | 3 - .../admin/js/vendor/select2/i18n/th.js | 3 - .../admin/js/vendor/select2/i18n/tk.js | 3 - .../admin/js/vendor/select2/i18n/tr.js | 3 - .../admin/js/vendor/select2/i18n/uk.js | 3 - .../admin/js/vendor/select2/i18n/vi.js | 3 - .../admin/js/vendor/select2/i18n/zh-CN.js | 3 - .../admin/js/vendor/select2/i18n/zh-TW.js | 3 - .../admin/js/vendor/select2/select2.full.js | 6820 ---------- .../js/vendor/select2/select2.full.min.js | 2 - .../admin/js/vendor/xregexp/LICENSE.txt | 21 - .../admin/js/vendor/xregexp/xregexp.js | 6126 --------- .../admin/js/vendor/xregexp/xregexp.min.js | 17 - smartsoltech/staticfiles/jazzmin/css/main.css | 927 -- .../jazzmin/img/calendar-icons.svg | 14 - .../staticfiles/jazzmin/img/default-log.svg | 23 - .../staticfiles/jazzmin/img/default.jpg | Bin 7070 -> 0 bytes .../staticfiles/jazzmin/img/icon-calendar.svg | 9 - .../jazzmin/img/icon-changelink.svg | 3 - .../jazzmin/img/selector-icons.svg | 34 - .../staticfiles/jazzmin/js/change_form.js | 151 - .../staticfiles/jazzmin/js/change_list.js | 64 - smartsoltech/staticfiles/jazzmin/js/main.js | 67 - .../staticfiles/jazzmin/js/related-modal.js | 188 - .../staticfiles/jazzmin/js/ui-builder.js | 343 - .../bootstrap-show-modal.min.js | 1 - .../vendor/adminlte/css/adminlte.min.css | 12 - .../vendor/adminlte/css/adminlte.min.css.map | 1 - .../vendor/adminlte/img/AdminLTELogo.png | Bin 2637 -> 0 bytes .../staticfiles/vendor/adminlte/img/icons.png | Bin 1139 -> 0 bytes .../vendor/adminlte/img/user2-160x160.jpg | Bin 5357 -> 0 bytes .../vendor/adminlte/js/adminlte.min.js | 7 - .../vendor/adminlte/js/adminlte.min.js.map | 1 - .../vendor/bootstrap/js/bootstrap.min.js | 7 - .../vendor/bootstrap/js/bootstrap.min.js.map | 1 - .../bootswatch/cerulean/bootstrap.min.css | 12 - .../vendor/bootswatch/cosmo/bootstrap.min.css | 12 - .../bootswatch/cyborg/bootstrap.min.css | 12 - .../bootswatch/darkly/bootstrap.min.css | 12 - .../bootswatch/default/bootstrap.min.css | 6 - .../bootswatch/flatly/bootstrap.min.css | 12 - .../bootswatch/journal/bootstrap.min.css | 12 - .../bootswatch/litera/bootstrap.min.css | 12 - .../vendor/bootswatch/lumen/bootstrap.min.css | 12 - .../vendor/bootswatch/lux/bootstrap.min.css | 12 - .../bootswatch/materia/bootstrap.min.css | 12 - .../vendor/bootswatch/minty/bootstrap.min.css | 12 - .../vendor/bootswatch/pulse/bootstrap.min.css | 12 - .../bootswatch/sandstone/bootstrap.min.css | 12 - .../bootswatch/simplex/bootstrap.min.css | 12 - .../bootswatch/sketchy/bootstrap.min.css | 12 - .../vendor/bootswatch/slate/bootstrap.min.css | 12 - .../vendor/bootswatch/solar/bootstrap.min.css | 12 - .../bootswatch/spacelab/bootstrap.min.css | 12 - .../bootswatch/superhero/bootstrap.min.css | 12 - .../bootswatch/united/bootstrap.min.css | 12 - .../vendor/bootswatch/yeti/bootstrap.min.css | 12 - .../vendor/fontawesome-free/css/all.min.css | 5 - .../webfonts/fa-brands-400.eot | Bin 134346 -> 0 bytes .../webfonts/fa-brands-400.svg | 3717 ------ .../webfonts/fa-brands-400.ttf | Bin 134040 -> 0 bytes .../webfonts/fa-brands-400.woff | Bin 90060 -> 0 bytes .../webfonts/fa-brands-400.woff2 | Bin 76764 -> 0 bytes .../webfonts/fa-regular-400.eot | Bin 34034 -> 0 bytes .../webfonts/fa-regular-400.svg | 801 -- .../webfonts/fa-regular-400.ttf | Bin 33736 -> 0 bytes .../webfonts/fa-regular-400.woff | Bin 16276 -> 0 bytes .../webfonts/fa-regular-400.woff2 | Bin 13276 -> 0 bytes .../webfonts/fa-solid-900.eot | Bin 203030 -> 0 bytes .../webfonts/fa-solid-900.svg | 5034 -------- .../webfonts/fa-solid-900.ttf | Bin 202744 -> 0 bytes .../webfonts/fa-solid-900.woff | Bin 101652 -> 0 bytes .../webfonts/fa-solid-900.woff2 | Bin 78196 -> 0 bytes .../vendor/select2/css/select2.min.css | 1 - .../vendor/select2/js/select2.min.js | 2 - start.sh | 67 + stop.sh | 91 + update.sh | 306 + 197 files changed, 616 insertions(+), 43472 deletions(-) create mode 100644 BACKUP_SETUP_COMPLETE.md create mode 100644 COMMIT_SUMMARY.md create mode 100644 smartsoltech/static/img/favicon.png create mode 100644 smartsoltech/static/img/logo.jpg create mode 100644 smartsoltech/static/img/logo.png rename smartsoltech/static/img/{logo.svg => logo__old.svg} (100%) delete mode 100644 smartsoltech/staticfiles/admin/css/autocomplete.css delete mode 100644 smartsoltech/staticfiles/admin/css/base.css delete mode 100644 smartsoltech/staticfiles/admin/css/changelists.css delete mode 100644 smartsoltech/staticfiles/admin/css/dark_mode.css delete mode 100644 smartsoltech/staticfiles/admin/css/dashboard.css delete mode 100644 smartsoltech/staticfiles/admin/css/forms.css delete mode 100644 smartsoltech/staticfiles/admin/css/login.css delete mode 100644 smartsoltech/staticfiles/admin/css/nav_sidebar.css delete mode 100644 smartsoltech/staticfiles/admin/css/responsive.css delete mode 100644 smartsoltech/staticfiles/admin/css/responsive_rtl.css delete mode 100644 smartsoltech/staticfiles/admin/css/rtl.css delete mode 100644 smartsoltech/staticfiles/admin/css/unusable_password_field.css delete mode 100644 smartsoltech/staticfiles/admin/css/vendor/select2/LICENSE-SELECT2.md delete mode 100644 smartsoltech/staticfiles/admin/css/vendor/select2/select2.css delete mode 100644 smartsoltech/staticfiles/admin/css/vendor/select2/select2.min.css delete mode 100644 smartsoltech/staticfiles/admin/css/widgets.css delete mode 100644 smartsoltech/staticfiles/admin/img/LICENSE delete mode 100644 smartsoltech/staticfiles/admin/img/README.txt delete mode 100644 smartsoltech/staticfiles/admin/img/calendar-icons.svg delete mode 100644 smartsoltech/staticfiles/admin/img/gis/move_vertex_off.svg delete mode 100644 smartsoltech/staticfiles/admin/img/gis/move_vertex_on.svg delete mode 100644 smartsoltech/staticfiles/admin/img/icon-addlink.svg delete mode 100644 smartsoltech/staticfiles/admin/img/icon-alert.svg delete mode 100644 smartsoltech/staticfiles/admin/img/icon-calendar.svg delete mode 100644 smartsoltech/staticfiles/admin/img/icon-changelink.svg delete mode 100644 smartsoltech/staticfiles/admin/img/icon-clock.svg delete mode 100644 smartsoltech/staticfiles/admin/img/icon-deletelink.svg delete mode 100644 smartsoltech/staticfiles/admin/img/icon-hidelink.svg delete mode 100644 smartsoltech/staticfiles/admin/img/icon-no.svg delete mode 100644 smartsoltech/staticfiles/admin/img/icon-unknown-alt.svg delete mode 100644 smartsoltech/staticfiles/admin/img/icon-unknown.svg delete mode 100644 smartsoltech/staticfiles/admin/img/icon-viewlink.svg delete mode 100644 smartsoltech/staticfiles/admin/img/icon-yes.svg delete mode 100644 smartsoltech/staticfiles/admin/img/inline-delete.svg delete mode 100644 smartsoltech/staticfiles/admin/img/search.svg delete mode 100644 smartsoltech/staticfiles/admin/img/selector-icons.svg delete mode 100644 smartsoltech/staticfiles/admin/img/sorting-icons.svg delete mode 100644 smartsoltech/staticfiles/admin/img/tooltag-add.svg delete mode 100644 smartsoltech/staticfiles/admin/img/tooltag-arrowright.svg delete mode 100644 smartsoltech/staticfiles/admin/js/SelectBox.js delete mode 100644 smartsoltech/staticfiles/admin/js/SelectFilter2.js delete mode 100644 smartsoltech/staticfiles/admin/js/actions.js delete mode 100644 smartsoltech/staticfiles/admin/js/admin/DateTimeShortcuts.js delete mode 100644 smartsoltech/staticfiles/admin/js/admin/RelatedObjectLookups.js delete mode 100644 smartsoltech/staticfiles/admin/js/autocomplete.js delete mode 100644 smartsoltech/staticfiles/admin/js/calendar.js delete mode 100644 smartsoltech/staticfiles/admin/js/change_form.js delete mode 100644 smartsoltech/staticfiles/admin/js/core.js delete mode 100644 smartsoltech/staticfiles/admin/js/filters.js delete mode 100644 smartsoltech/staticfiles/admin/js/inlines.js delete mode 100644 smartsoltech/staticfiles/admin/js/jquery.init.js delete mode 100644 smartsoltech/staticfiles/admin/js/nav_sidebar.js delete mode 100644 smartsoltech/staticfiles/admin/js/prepopulate.js delete mode 100644 smartsoltech/staticfiles/admin/js/prepopulate_init.js delete mode 100644 smartsoltech/staticfiles/admin/js/theme.js delete mode 100644 smartsoltech/staticfiles/admin/js/unusable_password_field.js delete mode 100644 smartsoltech/staticfiles/admin/js/urlify.js delete mode 100644 smartsoltech/staticfiles/admin/js/vendor/jquery/LICENSE.txt delete mode 100644 smartsoltech/staticfiles/admin/js/vendor/jquery/jquery.js delete mode 100644 smartsoltech/staticfiles/admin/js/vendor/jquery/jquery.min.js delete mode 100644 smartsoltech/staticfiles/admin/js/vendor/select2/LICENSE.md delete mode 100644 smartsoltech/staticfiles/admin/js/vendor/select2/i18n/af.js delete mode 100644 smartsoltech/staticfiles/admin/js/vendor/select2/i18n/ar.js delete mode 100644 smartsoltech/staticfiles/admin/js/vendor/select2/i18n/az.js delete mode 100644 smartsoltech/staticfiles/admin/js/vendor/select2/i18n/bg.js delete mode 100644 smartsoltech/staticfiles/admin/js/vendor/select2/i18n/bn.js delete mode 100644 smartsoltech/staticfiles/admin/js/vendor/select2/i18n/bs.js delete mode 100644 smartsoltech/staticfiles/admin/js/vendor/select2/i18n/ca.js delete mode 100644 smartsoltech/staticfiles/admin/js/vendor/select2/i18n/cs.js delete mode 100644 smartsoltech/staticfiles/admin/js/vendor/select2/i18n/da.js delete mode 100644 smartsoltech/staticfiles/admin/js/vendor/select2/i18n/de.js delete mode 100644 smartsoltech/staticfiles/admin/js/vendor/select2/i18n/dsb.js delete mode 100644 smartsoltech/staticfiles/admin/js/vendor/select2/i18n/el.js delete mode 100644 smartsoltech/staticfiles/admin/js/vendor/select2/i18n/en.js delete mode 100644 smartsoltech/staticfiles/admin/js/vendor/select2/i18n/es.js delete mode 100644 smartsoltech/staticfiles/admin/js/vendor/select2/i18n/et.js delete mode 100644 smartsoltech/staticfiles/admin/js/vendor/select2/i18n/eu.js delete mode 100644 smartsoltech/staticfiles/admin/js/vendor/select2/i18n/fa.js delete mode 100644 smartsoltech/staticfiles/admin/js/vendor/select2/i18n/fi.js delete mode 100644 smartsoltech/staticfiles/admin/js/vendor/select2/i18n/fr.js delete mode 100644 smartsoltech/staticfiles/admin/js/vendor/select2/i18n/gl.js delete mode 100644 smartsoltech/staticfiles/admin/js/vendor/select2/i18n/he.js delete mode 100644 smartsoltech/staticfiles/admin/js/vendor/select2/i18n/hi.js delete mode 100644 smartsoltech/staticfiles/admin/js/vendor/select2/i18n/hr.js delete mode 100644 smartsoltech/staticfiles/admin/js/vendor/select2/i18n/hsb.js delete mode 100644 smartsoltech/staticfiles/admin/js/vendor/select2/i18n/hu.js delete mode 100644 smartsoltech/staticfiles/admin/js/vendor/select2/i18n/hy.js delete mode 100644 smartsoltech/staticfiles/admin/js/vendor/select2/i18n/id.js delete mode 100644 smartsoltech/staticfiles/admin/js/vendor/select2/i18n/is.js delete mode 100644 smartsoltech/staticfiles/admin/js/vendor/select2/i18n/it.js delete mode 100644 smartsoltech/staticfiles/admin/js/vendor/select2/i18n/ja.js delete mode 100644 smartsoltech/staticfiles/admin/js/vendor/select2/i18n/ka.js delete mode 100644 smartsoltech/staticfiles/admin/js/vendor/select2/i18n/km.js delete mode 100644 smartsoltech/staticfiles/admin/js/vendor/select2/i18n/ko.js delete mode 100644 smartsoltech/staticfiles/admin/js/vendor/select2/i18n/lt.js delete mode 100644 smartsoltech/staticfiles/admin/js/vendor/select2/i18n/lv.js delete mode 100644 smartsoltech/staticfiles/admin/js/vendor/select2/i18n/mk.js delete mode 100644 smartsoltech/staticfiles/admin/js/vendor/select2/i18n/ms.js delete mode 100644 smartsoltech/staticfiles/admin/js/vendor/select2/i18n/nb.js delete mode 100644 smartsoltech/staticfiles/admin/js/vendor/select2/i18n/ne.js delete mode 100644 smartsoltech/staticfiles/admin/js/vendor/select2/i18n/nl.js delete mode 100644 smartsoltech/staticfiles/admin/js/vendor/select2/i18n/pl.js delete mode 100644 smartsoltech/staticfiles/admin/js/vendor/select2/i18n/ps.js delete mode 100644 smartsoltech/staticfiles/admin/js/vendor/select2/i18n/pt-BR.js delete mode 100644 smartsoltech/staticfiles/admin/js/vendor/select2/i18n/pt.js delete mode 100644 smartsoltech/staticfiles/admin/js/vendor/select2/i18n/ro.js delete mode 100644 smartsoltech/staticfiles/admin/js/vendor/select2/i18n/ru.js delete mode 100644 smartsoltech/staticfiles/admin/js/vendor/select2/i18n/sk.js delete mode 100644 smartsoltech/staticfiles/admin/js/vendor/select2/i18n/sl.js delete mode 100644 smartsoltech/staticfiles/admin/js/vendor/select2/i18n/sq.js delete mode 100644 smartsoltech/staticfiles/admin/js/vendor/select2/i18n/sr-Cyrl.js delete mode 100644 smartsoltech/staticfiles/admin/js/vendor/select2/i18n/sr.js delete mode 100644 smartsoltech/staticfiles/admin/js/vendor/select2/i18n/sv.js delete mode 100644 smartsoltech/staticfiles/admin/js/vendor/select2/i18n/th.js delete mode 100644 smartsoltech/staticfiles/admin/js/vendor/select2/i18n/tk.js delete mode 100644 smartsoltech/staticfiles/admin/js/vendor/select2/i18n/tr.js delete mode 100644 smartsoltech/staticfiles/admin/js/vendor/select2/i18n/uk.js delete mode 100644 smartsoltech/staticfiles/admin/js/vendor/select2/i18n/vi.js delete mode 100644 smartsoltech/staticfiles/admin/js/vendor/select2/i18n/zh-CN.js delete mode 100644 smartsoltech/staticfiles/admin/js/vendor/select2/i18n/zh-TW.js delete mode 100644 smartsoltech/staticfiles/admin/js/vendor/select2/select2.full.js delete mode 100644 smartsoltech/staticfiles/admin/js/vendor/select2/select2.full.min.js delete mode 100644 smartsoltech/staticfiles/admin/js/vendor/xregexp/LICENSE.txt delete mode 100644 smartsoltech/staticfiles/admin/js/vendor/xregexp/xregexp.js delete mode 100644 smartsoltech/staticfiles/admin/js/vendor/xregexp/xregexp.min.js delete mode 100644 smartsoltech/staticfiles/jazzmin/css/main.css delete mode 100644 smartsoltech/staticfiles/jazzmin/img/calendar-icons.svg delete mode 100644 smartsoltech/staticfiles/jazzmin/img/default-log.svg delete mode 100644 smartsoltech/staticfiles/jazzmin/img/default.jpg delete mode 100644 smartsoltech/staticfiles/jazzmin/img/icon-calendar.svg delete mode 100644 smartsoltech/staticfiles/jazzmin/img/icon-changelink.svg delete mode 100644 smartsoltech/staticfiles/jazzmin/img/selector-icons.svg delete mode 100644 smartsoltech/staticfiles/jazzmin/js/change_form.js delete mode 100644 smartsoltech/staticfiles/jazzmin/js/change_list.js delete mode 100644 smartsoltech/staticfiles/jazzmin/js/main.js delete mode 100644 smartsoltech/staticfiles/jazzmin/js/related-modal.js delete mode 100644 smartsoltech/staticfiles/jazzmin/js/ui-builder.js delete mode 100644 smartsoltech/staticfiles/jazzmin/plugins/bootstrap-show-modal/bootstrap-show-modal.min.js delete mode 100644 smartsoltech/staticfiles/vendor/adminlte/css/adminlte.min.css delete mode 100644 smartsoltech/staticfiles/vendor/adminlte/css/adminlte.min.css.map delete mode 100644 smartsoltech/staticfiles/vendor/adminlte/img/AdminLTELogo.png delete mode 100644 smartsoltech/staticfiles/vendor/adminlte/img/icons.png delete mode 100644 smartsoltech/staticfiles/vendor/adminlte/img/user2-160x160.jpg delete mode 100644 smartsoltech/staticfiles/vendor/adminlte/js/adminlte.min.js delete mode 100644 smartsoltech/staticfiles/vendor/adminlte/js/adminlte.min.js.map delete mode 100644 smartsoltech/staticfiles/vendor/bootstrap/js/bootstrap.min.js delete mode 100644 smartsoltech/staticfiles/vendor/bootstrap/js/bootstrap.min.js.map delete mode 100644 smartsoltech/staticfiles/vendor/bootswatch/cerulean/bootstrap.min.css delete mode 100644 smartsoltech/staticfiles/vendor/bootswatch/cosmo/bootstrap.min.css delete mode 100644 smartsoltech/staticfiles/vendor/bootswatch/cyborg/bootstrap.min.css delete mode 100644 smartsoltech/staticfiles/vendor/bootswatch/darkly/bootstrap.min.css delete mode 100644 smartsoltech/staticfiles/vendor/bootswatch/default/bootstrap.min.css delete mode 100644 smartsoltech/staticfiles/vendor/bootswatch/flatly/bootstrap.min.css delete mode 100644 smartsoltech/staticfiles/vendor/bootswatch/journal/bootstrap.min.css delete mode 100644 smartsoltech/staticfiles/vendor/bootswatch/litera/bootstrap.min.css delete mode 100644 smartsoltech/staticfiles/vendor/bootswatch/lumen/bootstrap.min.css delete mode 100644 smartsoltech/staticfiles/vendor/bootswatch/lux/bootstrap.min.css delete mode 100644 smartsoltech/staticfiles/vendor/bootswatch/materia/bootstrap.min.css delete mode 100644 smartsoltech/staticfiles/vendor/bootswatch/minty/bootstrap.min.css delete mode 100644 smartsoltech/staticfiles/vendor/bootswatch/pulse/bootstrap.min.css delete mode 100644 smartsoltech/staticfiles/vendor/bootswatch/sandstone/bootstrap.min.css delete mode 100644 smartsoltech/staticfiles/vendor/bootswatch/simplex/bootstrap.min.css delete mode 100644 smartsoltech/staticfiles/vendor/bootswatch/sketchy/bootstrap.min.css delete mode 100644 smartsoltech/staticfiles/vendor/bootswatch/slate/bootstrap.min.css delete mode 100644 smartsoltech/staticfiles/vendor/bootswatch/solar/bootstrap.min.css delete mode 100644 smartsoltech/staticfiles/vendor/bootswatch/spacelab/bootstrap.min.css delete mode 100644 smartsoltech/staticfiles/vendor/bootswatch/superhero/bootstrap.min.css delete mode 100644 smartsoltech/staticfiles/vendor/bootswatch/united/bootstrap.min.css delete mode 100644 smartsoltech/staticfiles/vendor/bootswatch/yeti/bootstrap.min.css delete mode 100644 smartsoltech/staticfiles/vendor/fontawesome-free/css/all.min.css delete mode 100644 smartsoltech/staticfiles/vendor/fontawesome-free/webfonts/fa-brands-400.eot delete mode 100644 smartsoltech/staticfiles/vendor/fontawesome-free/webfonts/fa-brands-400.svg delete mode 100644 smartsoltech/staticfiles/vendor/fontawesome-free/webfonts/fa-brands-400.ttf delete mode 100644 smartsoltech/staticfiles/vendor/fontawesome-free/webfonts/fa-brands-400.woff delete mode 100644 smartsoltech/staticfiles/vendor/fontawesome-free/webfonts/fa-brands-400.woff2 delete mode 100644 smartsoltech/staticfiles/vendor/fontawesome-free/webfonts/fa-regular-400.eot delete mode 100644 smartsoltech/staticfiles/vendor/fontawesome-free/webfonts/fa-regular-400.svg delete mode 100644 smartsoltech/staticfiles/vendor/fontawesome-free/webfonts/fa-regular-400.ttf delete mode 100644 smartsoltech/staticfiles/vendor/fontawesome-free/webfonts/fa-regular-400.woff delete mode 100644 smartsoltech/staticfiles/vendor/fontawesome-free/webfonts/fa-regular-400.woff2 delete mode 100644 smartsoltech/staticfiles/vendor/fontawesome-free/webfonts/fa-solid-900.eot delete mode 100644 smartsoltech/staticfiles/vendor/fontawesome-free/webfonts/fa-solid-900.svg delete mode 100644 smartsoltech/staticfiles/vendor/fontawesome-free/webfonts/fa-solid-900.ttf delete mode 100644 smartsoltech/staticfiles/vendor/fontawesome-free/webfonts/fa-solid-900.woff delete mode 100644 smartsoltech/staticfiles/vendor/fontawesome-free/webfonts/fa-solid-900.woff2 delete mode 100644 smartsoltech/staticfiles/vendor/select2/css/select2.min.css delete mode 100644 smartsoltech/staticfiles/vendor/select2/js/select2.min.js create mode 100644 start.sh create mode 100644 stop.sh create mode 100755 update.sh diff --git a/BACKUP_SETUP_COMPLETE.md b/BACKUP_SETUP_COMPLETE.md new file mode 100644 index 0000000..17bfae7 --- /dev/null +++ b/BACKUP_SETUP_COMPLETE.md @@ -0,0 +1,80 @@ +# 🎯 Git Pull и Backup Репозиторий - Успешно настроено! + +## ✅ Выполненные действия: + +### 1. **Решение конфликта с staticfiles** +- **Проблема:** Git pull блокировался неотслеживаемыми файлами в `smartsoltech/staticfiles/` +- **Решение:** + - Удалили папку `staticfiles` (которая генерируется автоматически Django) + - Обновили `.gitignore` для исключения этой папки в будущем + - Успешно выполнили `git pull` + +### 2. **Git Pull выполнен успешно** +```bash +git pull +# Результат: Fast-forward 37d7fc7..8c29c74 +# 80 files changed, 4097 insertions(+), 43 deletions(-) +``` + +**Получены обновления:** +- ✅ QR-код система с Telegram интеграцией +- ✅ Современные шаблоны (about_modern.html, home_modern.html, services_modern.html) +- ✅ CSS анимации и стили (modern-styles.css) +- ✅ JavaScript исправления (modern-scripts.js) +- ✅ Документация (QR_CODE_FEATURE_SUMMARY.md, real_confirmation_process.html) + +### 3. **Backup репозиторий добавлен** +```bash +git remote add backup ssh://git@git.smartsoltech.kr:2222/trevor/smartsoltech_site.git +``` + +### 4. **Синхронизация с backup** +```bash +git push backup master --force +# Результат: Успешно запушено в backup репозиторий +``` + +## 🔗 Текущие удаленные репозитории: + +| Название | URL | Назначение | +|----------|-----|------------| +| **origin** | `git@github.com:smartsoltech/smartsoltech.kr.git` | Основной GitHub репозиторий | +| **backup** | `ssh://git@git.smartsoltech.kr:2222/trevor/smartsoltech_site.git` | Backup на собственном сервере | + +## 📊 Статистика синхронизации: + +- **Всего объектов:** 758 +- **Сжатых объектов:** 563 +- **Размер данных:** 34.48 МБ +- **Скорость загрузки:** 20.54 МБ/с +- **Статус:** ✅ Успешно + +## 🔧 Обновленный .gitignore: + +```gitignore +.env +__pycache__ +.venv +.history +static/qr_codes +smartsoltech/staticfiles/ # ← Новое правило +*.pyc +*.pyo +``` + +## 🎯 Результат: + +1. **Локальный репозиторий** обновлен до последней версии с ветки `master` +2. **Backup репозиторий** настроен и синхронизирован +3. **Конфликты с staticfiles** решены навсегда +4. **Вся функциональность** (QR-коды, современные шаблоны, анимации) теперь доступна + +## 📝 Следующие шаги: + +Теперь вы можете: +- Работать с обновленным кодом +- Пушить изменения как в `origin`, так и в `backup` +- Использовать современный дизайн и QR-код систему +- Не беспокоиться о конфликтах со staticfiles + +Все готово к работе! 🚀 \ No newline at end of file diff --git a/COMMIT_SUMMARY.md b/COMMIT_SUMMARY.md new file mode 100644 index 0000000..c14c2a1 --- /dev/null +++ b/COMMIT_SUMMARY.md @@ -0,0 +1,70 @@ +# 🎉 Коммит успешно создан и запушен! + +## 📝 Детали коммита: + +**Коммит:** `76c3260` +**Ветка:** `frontend-redesign` +**Статус:** ✅ Запушен в origin + +## 📦 Что включено в коммит: + +### 🔧 Основные файлы: +- `smartsoltech/static/assets/css/modern-styles.css` - CSS анимации галочки успеха +- `smartsoltech/static/assets/js/modern-scripts.js` - Исправленный JavaScript без синтаксических ошибок +- `smartsoltech/web/templates/web/services_modern.html` - Модальное окно с QR-кодом и анимацией +- `smartsoltech/web/urls.py` - Новый endpoint для проверки статуса +- `smartsoltech/web/views.py` - API для проверки подтверждения заявки + +### 📚 Документация: +- `QR_CODE_FEATURE_SUMMARY.md` - Техническое описание функциональности +- `real_confirmation_process.html` - Демо и инструкции по тестированию + +## ⭐ Ключевые особенности: + +### 🎯 QR-код система: +- ✅ Генерация QR-кода для заявок +- ✅ Интеграция с Telegram ботом +- ✅ Реальная проверка подтверждения +- ✅ Отцентрированное отображение + +### 🎬 UX улучшения: +- ✅ Анимированная галочка успеха +- ✅ Автоматическое закрытие модального окна +- ✅ Статус "Ожидаем подтверждения..." +- ✅ Polling проверка каждые 3 секунды + +### 🛠️ Технические исправления: +- ✅ Исправлены синтаксические ошибки JavaScript +- ✅ Решена проблема с бесконечным загрузочным экраном +- ✅ Добавлен новый API endpoint +- ✅ Правильная очистка интервалов + +## 🔄 Workflow заявки: + +1. **Заполнение формы** → пользователь вводит данные +2. **Создание заявки** → система создает ServiceRequest +3. **QR-код** → отображается центрированный QR-код +4. **Ожидание** → показывается "Ожидаем подтверждения..." +5. **Telegram** → пользователь подтверждает в боте +6. **Проверка** → система обнаруживает is_verified=True +7. **Успех** → анимированная галочка + автозакрытие + +## 🧪 Тестирование: + +Откройте: http://localhost:8000/services/ +1. Нажмите "Заказать услугу" +2. Заполните форму +3. Дождитесь QR-кода +4. Перейдите в Telegram +5. Нажмите "Start" в боте +6. Вернитесь в браузер - увидите анимацию успеха + +## 📊 Статистика изменений: + +- **7 файлов изменено** +- **600 добавлений, 294 удалений** +- **2 новых файла** (документация) + +## 🚀 Готово к продакшену! + +Все изменения протестированы и готовы к развертыванию. Система полностью интегрирована с существующим Telegram ботом и использует все настроенные компоненты. \ No newline at end of file diff --git a/smartsoltech/static/img/favicon.png b/smartsoltech/static/img/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..f5bdc0606c02bf2623e5ee6a05b5bf89e43801a6 GIT binary patch literal 137315 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 E2R?^}1ONa4 literal 0 HcmV?d00001 diff --git a/smartsoltech/static/img/logo.jpg b/smartsoltech/static/img/logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..95cdc584221abb79f96a52f30501ec7bed1f62a9 GIT binary patch literal 139438 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 K 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 U)fD+|=H{>8>TG3bP``-&21PCDm;e9( literal 0 HcmV?d00001 diff --git a/smartsoltech/static/img/logo.png b/smartsoltech/static/img/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..f5bdc0606c02bf2623e5ee6a05b5bf89e43801a6 GIT binary patch literal 137315 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 E2R?^}1ONa4 literal 0 HcmV?d00001 diff --git a/smartsoltech/static/img/logo.svg b/smartsoltech/static/img/logo__old.svg similarity index 100% rename from smartsoltech/static/img/logo.svg rename to smartsoltech/static/img/logo__old.svg diff --git a/smartsoltech/static/manifest.json b/smartsoltech/static/manifest.json index 05e032a..cd6690b 100644 --- a/smartsoltech/static/manifest.json +++ b/smartsoltech/static/manifest.json @@ -3,12 +3,12 @@ "name": "Smartsoltech", "icons": [ { - "src": "/static/img/photo_2024-10-06_10-06-08.jpg", + "src": "/static/img/logo.jpg", "type": "image/jpeg", "sizes": "1011x702" }, { - "src": "/static/img/photo_2024-10-06_10-06-08.jpg", + "src": "/static/img/logo.jpg", "type": "image/jpeg", "sizes": "1011x702" } diff --git a/smartsoltech/staticfiles/admin/css/autocomplete.css b/smartsoltech/staticfiles/admin/css/autocomplete.css deleted file mode 100644 index 7478c2c..0000000 --- a/smartsoltech/staticfiles/admin/css/autocomplete.css +++ /dev/null @@ -1,279 +0,0 @@ -select.admin-autocomplete { - width: 20em; -} - -.select2-container--admin-autocomplete.select2-container { - min-height: 30px; -} - -.select2-container--admin-autocomplete .select2-selection--single, -.select2-container--admin-autocomplete .select2-selection--multiple { - min-height: 30px; - padding: 0; -} - -.select2-container--admin-autocomplete.select2-container--focus .select2-selection, -.select2-container--admin-autocomplete.select2-container--open .select2-selection { - border-color: var(--body-quiet-color); - min-height: 30px; -} - -.select2-container--admin-autocomplete.select2-container--focus .select2-selection.select2-selection--single, -.select2-container--admin-autocomplete.select2-container--open .select2-selection.select2-selection--single { - padding: 0; -} - -.select2-container--admin-autocomplete.select2-container--focus .select2-selection.select2-selection--multiple, -.select2-container--admin-autocomplete.select2-container--open .select2-selection.select2-selection--multiple { - padding: 0; -} - -.select2-container--admin-autocomplete .select2-selection--single { - background-color: var(--body-bg); - border: 1px solid var(--border-color); - border-radius: 4px; -} - -.select2-container--admin-autocomplete .select2-selection--single .select2-selection__rendered { - color: var(--body-fg); - line-height: 30px; -} - -.select2-container--admin-autocomplete .select2-selection--single .select2-selection__clear { - cursor: pointer; - float: right; - font-weight: bold; -} - -.select2-container--admin-autocomplete .select2-selection--single .select2-selection__placeholder { - color: var(--body-quiet-color); -} - -.select2-container--admin-autocomplete .select2-selection--single .select2-selection__arrow { - height: 26px; - position: absolute; - top: 1px; - right: 1px; - width: 20px; -} - -.select2-container--admin-autocomplete .select2-selection--single .select2-selection__arrow b { - border-color: #888 transparent transparent transparent; - border-style: solid; - border-width: 5px 4px 0 4px; - height: 0; - left: 50%; - margin-left: -4px; - margin-top: -2px; - position: absolute; - top: 50%; - width: 0; -} - -.select2-container--admin-autocomplete[dir="rtl"] .select2-selection--single .select2-selection__clear { - float: left; -} - -.select2-container--admin-autocomplete[dir="rtl"] .select2-selection--single .select2-selection__arrow { - left: 1px; - right: auto; -} - -.select2-container--admin-autocomplete.select2-container--disabled .select2-selection--single { - background-color: var(--darkened-bg); - cursor: default; -} - -.select2-container--admin-autocomplete.select2-container--disabled .select2-selection--single .select2-selection__clear { - display: none; -} - -.select2-container--admin-autocomplete.select2-container--open .select2-selection--single .select2-selection__arrow b { - border-color: transparent transparent #888 transparent; - border-width: 0 4px 5px 4px; -} - -.select2-container--admin-autocomplete .select2-selection--multiple { - background-color: var(--body-bg); - border: 1px solid var(--border-color); - border-radius: 4px; - cursor: text; -} - -.select2-container--admin-autocomplete .select2-selection--multiple .select2-selection__rendered { - box-sizing: border-box; - list-style: none; - margin: 0; - padding: 0 10px 5px 5px; - width: 100%; - display: flex; - flex-wrap: wrap; -} - -.select2-container--admin-autocomplete .select2-selection--multiple .select2-selection__rendered li { - list-style: none; -} - -.select2-container--admin-autocomplete .select2-selection--multiple .select2-selection__placeholder { - color: var(--body-quiet-color); - margin-top: 5px; - float: left; -} - -.select2-container--admin-autocomplete .select2-selection--multiple .select2-selection__clear { - cursor: pointer; - float: right; - font-weight: bold; - margin: 5px; - position: absolute; - right: 0; -} - -.select2-container--admin-autocomplete .select2-selection--multiple .select2-selection__choice { - background-color: var(--darkened-bg); - border: 1px solid var(--border-color); - border-radius: 4px; - cursor: default; - float: left; - margin-right: 5px; - margin-top: 5px; - padding: 0 5px; -} - -.select2-container--admin-autocomplete .select2-selection--multiple .select2-selection__choice__remove { - color: var(--body-quiet-color); - cursor: pointer; - display: inline-block; - font-weight: bold; - margin-right: 2px; -} - -.select2-container--admin-autocomplete .select2-selection--multiple .select2-selection__choice__remove:hover { - color: var(--body-fg); -} - -.select2-container--admin-autocomplete[dir="rtl"] .select2-selection--multiple .select2-selection__choice, .select2-container--admin-autocomplete[dir="rtl"] .select2-selection--multiple .select2-selection__placeholder, .select2-container--admin-autocomplete[dir="rtl"] .select2-selection--multiple .select2-search--inline { - float: right; -} - -.select2-container--admin-autocomplete[dir="rtl"] .select2-selection--multiple .select2-selection__choice { - margin-left: 5px; - margin-right: auto; -} - -.select2-container--admin-autocomplete[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove { - margin-left: 2px; - margin-right: auto; -} - -.select2-container--admin-autocomplete.select2-container--focus .select2-selection--multiple { - border: solid var(--body-quiet-color) 1px; - outline: 0; -} - -.select2-container--admin-autocomplete.select2-container--disabled .select2-selection--multiple { - background-color: var(--darkened-bg); - cursor: default; -} - -.select2-container--admin-autocomplete.select2-container--disabled .select2-selection__choice__remove { - display: none; -} - -.select2-container--admin-autocomplete.select2-container--open.select2-container--above .select2-selection--single, .select2-container--admin-autocomplete.select2-container--open.select2-container--above .select2-selection--multiple { - border-top-left-radius: 0; - border-top-right-radius: 0; -} - -.select2-container--admin-autocomplete.select2-container--open.select2-container--below .select2-selection--single, .select2-container--admin-autocomplete.select2-container--open.select2-container--below .select2-selection--multiple { - border-bottom-left-radius: 0; - border-bottom-right-radius: 0; -} - -.select2-container--admin-autocomplete .select2-search--dropdown { - background: var(--darkened-bg); -} - -.select2-container--admin-autocomplete .select2-search--dropdown .select2-search__field { - background: var(--body-bg); - color: var(--body-fg); - border: 1px solid var(--border-color); - border-radius: 4px; -} - -.select2-container--admin-autocomplete .select2-search--inline .select2-search__field { - background: transparent; - color: var(--body-fg); - border: none; - outline: 0; - box-shadow: none; - -webkit-appearance: textfield; -} - -.select2-container--admin-autocomplete .select2-results > .select2-results__options { - max-height: 200px; - overflow-y: auto; - color: var(--body-fg); - background: var(--body-bg); -} - -.select2-container--admin-autocomplete .select2-results__option[role=group] { - padding: 0; -} - -.select2-container--admin-autocomplete .select2-results__option[aria-disabled=true] { - color: var(--body-quiet-color); -} - -.select2-container--admin-autocomplete .select2-results__option[aria-selected=true] { - background-color: var(--selected-bg); - color: var(--body-fg); -} - -.select2-container--admin-autocomplete .select2-results__option .select2-results__option { - padding-left: 1em; -} - -.select2-container--admin-autocomplete .select2-results__option .select2-results__option .select2-results__group { - padding-left: 0; -} - -.select2-container--admin-autocomplete .select2-results__option .select2-results__option .select2-results__option { - margin-left: -1em; - padding-left: 2em; -} - -.select2-container--admin-autocomplete .select2-results__option .select2-results__option .select2-results__option .select2-results__option { - margin-left: -2em; - padding-left: 3em; -} - -.select2-container--admin-autocomplete .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option { - margin-left: -3em; - padding-left: 4em; -} - -.select2-container--admin-autocomplete .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option { - margin-left: -4em; - padding-left: 5em; -} - -.select2-container--admin-autocomplete .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option { - margin-left: -5em; - padding-left: 6em; -} - -.select2-container--admin-autocomplete .select2-results__option--highlighted[aria-selected] { - background-color: var(--primary); - color: var(--primary-fg); -} - -.select2-container--admin-autocomplete .select2-results__group { - cursor: default; - display: block; - padding: 6px; -} - -.errors .select2-selection { - border: 1px solid var(--error-fg); -} diff --git a/smartsoltech/staticfiles/admin/css/base.css b/smartsoltech/staticfiles/admin/css/base.css deleted file mode 100644 index ac28326..0000000 --- a/smartsoltech/staticfiles/admin/css/base.css +++ /dev/null @@ -1,1179 +0,0 @@ -/* - DJANGO Admin styles -*/ - -/* VARIABLE DEFINITIONS */ -html[data-theme="light"], -:root { - --primary: #79aec8; - --secondary: #417690; - --accent: #f5dd5d; - --primary-fg: #fff; - - --body-fg: #333; - --body-bg: #fff; - --body-quiet-color: #666; - --body-medium-color: #444; - --body-loud-color: #000; - - --header-color: #ffc; - --header-branding-color: var(--accent); - --header-bg: var(--secondary); - --header-link-color: var(--primary-fg); - - --breadcrumbs-fg: #c4dce8; - --breadcrumbs-link-fg: var(--body-bg); - --breadcrumbs-bg: #264b5d; - - --link-fg: #417893; - --link-hover-color: #036; - --link-selected-fg: var(--secondary); - - --hairline-color: #e8e8e8; - --border-color: #ccc; - - --error-fg: #ba2121; - - --message-success-bg: #dfd; - --message-warning-bg: #ffc; - --message-error-bg: #ffefef; - - --darkened-bg: #f8f8f8; /* A bit darker than --body-bg */ - --selected-bg: #e4e4e4; /* E.g. selected table cells */ - --selected-row: #ffc; - - --button-fg: #fff; - --button-bg: var(--secondary); - --button-hover-bg: #205067; - --default-button-bg: #205067; - --default-button-hover-bg: var(--secondary); - --close-button-bg: #747474; - --close-button-hover-bg: #333; - --delete-button-bg: #ba2121; - --delete-button-hover-bg: #a41515; - - --object-tools-fg: var(--button-fg); - --object-tools-bg: var(--close-button-bg); - --object-tools-hover-bg: var(--close-button-hover-bg); - - --font-family-primary: - "Segoe UI", - system-ui, - Roboto, - "Helvetica Neue", - Arial, - sans-serif, - "Apple Color Emoji", - "Segoe UI Emoji", - "Segoe UI Symbol", - "Noto Color Emoji"; - --font-family-monospace: - ui-monospace, - Menlo, - Monaco, - "Cascadia Mono", - "Segoe UI Mono", - "Roboto Mono", - "Oxygen Mono", - "Ubuntu Monospace", - "Source Code Pro", - "Fira Mono", - "Droid Sans Mono", - "Courier New", - monospace, - "Apple Color Emoji", - "Segoe UI Emoji", - "Segoe UI Symbol", - "Noto Color Emoji"; - - color-scheme: light; -} - -html, body { - height: 100%; -} - -body { - margin: 0; - padding: 0; - font-size: 0.875rem; - font-family: var(--font-family-primary); - color: var(--body-fg); - background: var(--body-bg); -} - -/* LINKS */ - -a:link, a:visited { - color: var(--link-fg); - text-decoration: none; - transition: color 0.15s, background 0.15s; -} - -a:focus, a:hover { - color: var(--link-hover-color); -} - -a:focus { - text-decoration: underline; -} - -a img { - border: none; -} - -a.section:link, a.section:visited { - color: var(--header-link-color); - text-decoration: none; -} - -a.section:focus, a.section:hover { - text-decoration: underline; -} - -/* GLOBAL DEFAULTS */ - -p, ol, ul, dl { - margin: .2em 0 .8em 0; -} - -p { - padding: 0; - line-height: 140%; -} - -h1,h2,h3,h4,h5 { - font-weight: bold; -} - -h1 { - margin: 0 0 20px; - font-weight: 300; - font-size: 1.25rem; -} - -h2 { - font-size: 1rem; - margin: 1em 0 .5em 0; -} - -h2.subhead { - font-weight: normal; - margin-top: 0; -} - -h3 { - font-size: 0.875rem; - margin: .8em 0 .3em 0; - color: var(--body-medium-color); - font-weight: bold; -} - -h4 { - font-size: 0.75rem; - margin: 1em 0 .8em 0; - padding-bottom: 3px; - color: var(--body-medium-color); -} - -h5 { - font-size: 0.625rem; - margin: 1.5em 0 .5em 0; - color: var(--body-quiet-color); - text-transform: uppercase; - letter-spacing: 1px; -} - -ul > li { - list-style-type: square; - padding: 1px 0; -} - -li ul { - margin-bottom: 0; -} - -li, dt, dd { - font-size: 0.8125rem; - line-height: 1.25rem; -} - -dt { - font-weight: bold; - margin-top: 4px; -} - -dd { - margin-left: 0; -} - -form { - margin: 0; - padding: 0; -} - -fieldset { - margin: 0; - min-width: 0; - padding: 0; - border: none; - border-top: 1px solid var(--hairline-color); -} - -details summary { - cursor: pointer; -} - -blockquote { - font-size: 0.6875rem; - color: #777; - margin-left: 2px; - padding-left: 10px; - border-left: 5px solid #ddd; -} - -code, pre { - font-family: var(--font-family-monospace); - color: var(--body-quiet-color); - font-size: 0.75rem; - overflow-x: auto; -} - -pre.literal-block { - margin: 10px; - background: var(--darkened-bg); - padding: 6px 8px; -} - -code strong { - color: #930; -} - -hr { - clear: both; - color: var(--hairline-color); - background-color: var(--hairline-color); - height: 1px; - border: none; - margin: 0; - padding: 0; - line-height: 1px; -} - -/* TEXT STYLES & MODIFIERS */ - -.small { - font-size: 0.6875rem; -} - -.mini { - font-size: 0.625rem; -} - -.help, p.help, form p.help, div.help, form div.help, div.help li { - font-size: 0.6875rem; - color: var(--body-quiet-color); -} - -div.help ul { - margin-bottom: 0; -} - -.help-tooltip { - cursor: help; -} - -p img, h1 img, h2 img, h3 img, h4 img, td img { - vertical-align: middle; -} - -.quiet, a.quiet:link, a.quiet:visited { - color: var(--body-quiet-color); - font-weight: normal; -} - -.clear { - clear: both; -} - -.nowrap { - white-space: nowrap; -} - -.hidden { - display: none !important; -} - -/* TABLES */ - -table { - border-collapse: collapse; - border-color: var(--border-color); -} - -td, th { - font-size: 0.8125rem; - line-height: 1rem; - border-bottom: 1px solid var(--hairline-color); - vertical-align: top; - padding: 8px; -} - -th { - font-weight: 500; - text-align: left; -} - -thead th, -tfoot td { - color: var(--body-quiet-color); - padding: 5px 10px; - font-size: 0.6875rem; - background: var(--body-bg); - border: none; - border-top: 1px solid var(--hairline-color); - border-bottom: 1px solid var(--hairline-color); -} - -tfoot td { - border-bottom: none; - border-top: 1px solid var(--hairline-color); -} - -thead th.required { - font-weight: bold; -} - -tr.alt { - background: var(--darkened-bg); -} - -tr:nth-child(odd), .row-form-errors { - background: var(--body-bg); -} - -tr:nth-child(even), -tr:nth-child(even) .errorlist, -tr:nth-child(odd) + .row-form-errors, -tr:nth-child(odd) + .row-form-errors .errorlist { - background: var(--darkened-bg); -} - -/* SORTABLE TABLES */ - -thead th { - padding: 5px 10px; - line-height: normal; - text-transform: uppercase; - background: var(--darkened-bg); -} - -thead th a:link, thead th a:visited { - color: var(--body-quiet-color); -} - -thead th.sorted { - background: var(--selected-bg); -} - -thead th.sorted .text { - padding-right: 42px; -} - -table thead th .text span { - padding: 8px 10px; - display: block; -} - -table thead th .text a { - display: block; - cursor: pointer; - padding: 8px 10px; -} - -table thead th .text a:focus, table thead th .text a:hover { - background: var(--selected-bg); -} - -thead th.sorted a.sortremove { - visibility: hidden; -} - -table thead th.sorted:hover a.sortremove { - visibility: visible; -} - -table thead th.sorted .sortoptions { - display: block; - padding: 9px 5px 0 5px; - float: right; - text-align: right; -} - -table thead th.sorted .sortpriority { - font-size: .8em; - min-width: 12px; - text-align: center; - vertical-align: 3px; - margin-left: 2px; - margin-right: 2px; -} - -table thead th.sorted .sortoptions a { - position: relative; - width: 14px; - height: 14px; - display: inline-block; - background: url(../img/sorting-icons.svg) 0 0 no-repeat; - background-size: 14px auto; -} - -table thead th.sorted .sortoptions a.sortremove { - background-position: 0 0; -} - -table thead th.sorted .sortoptions a.sortremove:after { - content: '\\'; - position: absolute; - top: -6px; - left: 3px; - font-weight: 200; - font-size: 1.125rem; - color: var(--body-quiet-color); -} - -table thead th.sorted .sortoptions a.sortremove:focus:after, -table thead th.sorted .sortoptions a.sortremove:hover:after { - color: var(--link-fg); -} - -table thead th.sorted .sortoptions a.sortremove:focus, -table thead th.sorted .sortoptions a.sortremove:hover { - background-position: 0 -14px; -} - -table thead th.sorted .sortoptions a.ascending { - background-position: 0 -28px; -} - -table thead th.sorted .sortoptions a.ascending:focus, -table thead th.sorted .sortoptions a.ascending:hover { - background-position: 0 -42px; -} - -table thead th.sorted .sortoptions a.descending { - top: 1px; - background-position: 0 -56px; -} - -table thead th.sorted .sortoptions a.descending:focus, -table thead th.sorted .sortoptions a.descending:hover { - background-position: 0 -70px; -} - -/* FORM DEFAULTS */ - -input, textarea, select, .form-row p, form .button { - margin: 2px 0; - padding: 2px 3px; - vertical-align: middle; - font-family: var(--font-family-primary); - font-weight: normal; - font-size: 0.8125rem; -} -.form-row div.help { - padding: 2px 3px; -} - -textarea { - vertical-align: top; -} - -/* -Minifiers remove the default (text) "type" attribute from "input" HTML tags. -Add input:not([type]) to make the CSS stylesheet work the same. -*/ -input:not([type]), input[type=text], input[type=password], input[type=email], -input[type=url], input[type=number], input[type=tel], textarea, select, -.vTextField { - border: 1px solid var(--border-color); - border-radius: 4px; - padding: 5px 6px; - margin-top: 0; - color: var(--body-fg); - background-color: var(--body-bg); -} - -/* -Minifiers remove the default (text) "type" attribute from "input" HTML tags. -Add input:not([type]) to make the CSS stylesheet work the same. -*/ -input:not([type]):focus, input[type=text]:focus, input[type=password]:focus, -input[type=email]:focus, input[type=url]:focus, input[type=number]:focus, -input[type=tel]:focus, textarea:focus, select:focus, .vTextField:focus { - border-color: var(--body-quiet-color); -} - -select { - height: 1.875rem; -} - -select[multiple] { - /* Allow HTML size attribute to override the height in the rule above. */ - height: auto; - min-height: 150px; -} - -/* FORM BUTTONS */ - -.button, input[type=submit], input[type=button], .submit-row input, a.button { - background: var(--button-bg); - padding: 10px 15px; - border: none; - border-radius: 4px; - color: var(--button-fg); - cursor: pointer; - transition: background 0.15s; -} - -a.button { - padding: 4px 5px; -} - -.button:active, input[type=submit]:active, input[type=button]:active, -.button:focus, input[type=submit]:focus, input[type=button]:focus, -.button:hover, input[type=submit]:hover, input[type=button]:hover { - background: var(--button-hover-bg); -} - -.button[disabled], input[type=submit][disabled], input[type=button][disabled] { - opacity: 0.4; -} - -.button.default, input[type=submit].default, .submit-row input.default { - border: none; - font-weight: 400; - background: var(--default-button-bg); -} - -.button.default:active, input[type=submit].default:active, -.button.default:focus, input[type=submit].default:focus, -.button.default:hover, input[type=submit].default:hover { - background: var(--default-button-hover-bg); -} - -.button[disabled].default, -input[type=submit][disabled].default, -input[type=button][disabled].default { - opacity: 0.4; -} - - -/* MODULES */ - -.module { - border: none; - margin-bottom: 30px; - background: var(--body-bg); -} - -.module p, .module ul, .module h3, .module h4, .module dl, .module pre { - padding-left: 10px; - padding-right: 10px; -} - -.module blockquote { - margin-left: 12px; -} - -.module ul, .module ol { - margin-left: 1.5em; -} - -.module h3 { - margin-top: .6em; -} - -.module h2, .module caption, .inline-group h2 { - margin: 0; - padding: 8px; - font-weight: 400; - font-size: 0.8125rem; - text-align: left; - background: var(--header-bg); - color: var(--header-link-color); -} - -.module caption, -.inline-group h2 { - font-size: 0.75rem; - letter-spacing: 0.5px; - text-transform: uppercase; -} - -.module table { - border-collapse: collapse; -} - -/* MESSAGES & ERRORS */ - -ul.messagelist { - padding: 0; - margin: 0; -} - -ul.messagelist li { - display: block; - font-weight: 400; - font-size: 0.8125rem; - padding: 10px 10px 10px 65px; - margin: 0 0 10px 0; - background: var(--message-success-bg) url(../img/icon-yes.svg) 40px 12px no-repeat; - background-size: 16px auto; - color: var(--body-fg); - word-break: break-word; -} - -ul.messagelist li.warning { - background: var(--message-warning-bg) url(../img/icon-alert.svg) 40px 14px no-repeat; - background-size: 14px auto; -} - -ul.messagelist li.error { - background: var(--message-error-bg) url(../img/icon-no.svg) 40px 12px no-repeat; - background-size: 16px auto; -} - -.errornote { - font-size: 0.875rem; - font-weight: 700; - display: block; - padding: 10px 12px; - margin: 0 0 10px 0; - color: var(--error-fg); - border: 1px solid var(--error-fg); - border-radius: 4px; - background-color: var(--body-bg); - background-position: 5px 12px; - overflow-wrap: break-word; -} - -ul.errorlist { - margin: 0 0 4px; - padding: 0; - color: var(--error-fg); - background: var(--body-bg); -} - -ul.errorlist li { - font-size: 0.8125rem; - display: block; - margin-bottom: 4px; - overflow-wrap: break-word; -} - -ul.errorlist li:first-child { - margin-top: 0; -} - -ul.errorlist li a { - color: inherit; - text-decoration: underline; -} - -td ul.errorlist { - margin: 0; - padding: 0; -} - -td ul.errorlist li { - margin: 0; -} - -.form-row.errors { - margin: 0; - border: none; - border-bottom: 1px solid var(--hairline-color); - background: none; -} - -.form-row.errors ul.errorlist li { - padding-left: 0; -} - -.errors input, .errors select, .errors textarea, -td ul.errorlist + input, td ul.errorlist + select, td ul.errorlist + textarea { - border: 1px solid var(--error-fg); -} - -.description { - font-size: 0.75rem; - padding: 5px 0 0 12px; -} - -/* BREADCRUMBS */ - -div.breadcrumbs { - background: var(--breadcrumbs-bg); - padding: 10px 40px; - border: none; - color: var(--breadcrumbs-fg); - text-align: left; -} - -div.breadcrumbs a { - color: var(--breadcrumbs-link-fg); -} - -div.breadcrumbs a:focus, div.breadcrumbs a:hover { - color: var(--breadcrumbs-fg); -} - -/* ACTION ICONS */ - -.viewlink, .inlineviewlink { - padding-left: 16px; - background: url(../img/icon-viewlink.svg) 0 1px no-repeat; -} - -.hidelink { - padding-left: 16px; - background: url(../img/icon-hidelink.svg) 0 1px no-repeat; -} - -.addlink { - padding-left: 16px; - background: url(../img/icon-addlink.svg) 0 1px no-repeat; -} - -.changelink, .inlinechangelink { - padding-left: 16px; - background: url(../img/icon-changelink.svg) 0 1px no-repeat; -} - -.deletelink { - padding-left: 16px; - background: url(../img/icon-deletelink.svg) 0 1px no-repeat; -} - -a.deletelink:link, a.deletelink:visited { - color: #CC3434; /* XXX Probably unused? */ -} - -a.deletelink:focus, a.deletelink:hover { - color: #993333; /* XXX Probably unused? */ - text-decoration: none; -} - -/* OBJECT TOOLS */ - -.object-tools { - font-size: 0.625rem; - font-weight: bold; - padding-left: 0; - float: right; - position: relative; - margin-top: -48px; -} - -.object-tools li { - display: block; - float: left; - margin-left: 5px; - height: 1rem; -} - -.object-tools a { - border-radius: 15px; -} - -.object-tools a:link, .object-tools a:visited { - display: block; - float: left; - padding: 3px 12px; - background: var(--object-tools-bg); - color: var(--object-tools-fg); - font-weight: 400; - font-size: 0.6875rem; - text-transform: uppercase; - letter-spacing: 0.5px; -} - -.object-tools a:focus, .object-tools a:hover { - background-color: var(--object-tools-hover-bg); -} - -.object-tools a:focus{ - text-decoration: none; -} - -.object-tools a.viewsitelink, .object-tools a.addlink { - background-repeat: no-repeat; - background-position: right 7px center; - padding-right: 26px; -} - -.object-tools a.viewsitelink { - background-image: url(../img/tooltag-arrowright.svg); -} - -.object-tools a.addlink { - background-image: url(../img/tooltag-add.svg); -} - -/* OBJECT HISTORY */ - -#change-history table { - width: 100%; -} - -#change-history table tbody th { - width: 16em; -} - -#change-history .paginator { - color: var(--body-quiet-color); - border-bottom: 1px solid var(--hairline-color); - background: var(--body-bg); - overflow: hidden; -} - -/* PAGE STRUCTURE */ - -#container { - position: relative; - width: 100%; - min-width: 980px; - padding: 0; - display: flex; - flex-direction: column; - height: 100%; -} - -#container > .main { - display: flex; - flex: 1 0 auto; -} - -.main > .content { - flex: 1 0; - max-width: 100%; -} - -.skip-to-content-link { - position: absolute; - top: -999px; - margin: 5px; - padding: 5px; - background: var(--body-bg); - z-index: 1; -} - -.skip-to-content-link:focus { - left: 0px; - top: 0px; -} - -#content { - padding: 20px 40px; -} - -.dashboard #content { - width: 600px; -} - -#content-main { - float: left; - width: 100%; -} - -#content-related { - float: right; - width: 260px; - position: relative; - margin-right: -300px; -} - -@media (forced-colors: active) { - #content-related { - border: 1px solid; - } -} - -/* COLUMN TYPES */ - -.colMS { - margin-right: 300px; -} - -.colSM { - margin-left: 300px; -} - -.colSM #content-related { - float: left; - margin-right: 0; - margin-left: -300px; -} - -.colSM #content-main { - float: right; -} - -.popup .colM { - width: auto; -} - -/* HEADER */ - -#header { - width: auto; - height: auto; - display: flex; - justify-content: space-between; - align-items: center; - padding: 10px 40px; - background: var(--header-bg); - color: var(--header-color); -} - -#header a:link, #header a:visited, #logout-form button { - color: var(--header-link-color); -} - -#header a:focus , #header a:hover { - text-decoration: underline; -} - -@media (forced-colors: active) { - #header { - border-bottom: 1px solid; - } -} - -#branding { - display: flex; -} - -#site-name { - padding: 0; - margin: 0; - margin-inline-end: 20px; - font-weight: 300; - font-size: 1.5rem; - color: var(--header-branding-color); -} - -#site-name a:link, #site-name a:visited { - color: var(--accent); -} - -#branding h2 { - padding: 0 10px; - font-size: 0.875rem; - margin: -8px 0 8px 0; - font-weight: normal; - color: var(--header-color); -} - -#branding a:hover { - text-decoration: none; -} - -#logout-form { - display: inline; -} - -#logout-form button { - background: none; - border: 0; - cursor: pointer; - font-family: var(--font-family-primary); -} - -#user-tools { - float: right; - margin: 0 0 0 20px; - text-align: right; -} - -#user-tools, #logout-form button{ - padding: 0; - font-weight: 300; - font-size: 0.6875rem; - letter-spacing: 0.5px; - text-transform: uppercase; -} - -#user-tools a, #logout-form button { - border-bottom: 1px solid rgba(255, 255, 255, 0.25); -} - -#user-tools a:focus, #user-tools a:hover, -#logout-form button:active, #logout-form button:hover { - text-decoration: none; - border-bottom: 0; -} - -#logout-form button:active, #logout-form button:hover { - margin-bottom: 1px; -} - -/* SIDEBAR */ - -#content-related { - background: var(--darkened-bg); -} - -#content-related .module { - background: none; -} - -#content-related h3 { - color: var(--body-quiet-color); - padding: 0 16px; - margin: 0 0 16px; -} - -#content-related h4 { - font-size: 0.8125rem; -} - -#content-related p { - padding-left: 16px; - padding-right: 16px; -} - -#content-related .actionlist { - padding: 0; - margin: 16px; -} - -#content-related .actionlist li { - line-height: 1.2; - margin-bottom: 10px; - padding-left: 18px; -} - -#content-related .module h2 { - background: none; - padding: 16px; - margin-bottom: 16px; - border-bottom: 1px solid var(--hairline-color); - font-size: 1.125rem; - color: var(--body-fg); -} - -.delete-confirmation form input[type="submit"] { - background: var(--delete-button-bg); - border-radius: 4px; - padding: 10px 15px; - color: var(--button-fg); -} - -.delete-confirmation form input[type="submit"]:active, -.delete-confirmation form input[type="submit"]:focus, -.delete-confirmation form input[type="submit"]:hover { - background: var(--delete-button-hover-bg); -} - -.delete-confirmation form .cancel-link { - display: inline-block; - vertical-align: middle; - height: 0.9375rem; - line-height: 0.9375rem; - border-radius: 4px; - padding: 10px 15px; - color: var(--button-fg); - background: var(--close-button-bg); - margin: 0 0 0 10px; -} - -.delete-confirmation form .cancel-link:active, -.delete-confirmation form .cancel-link:focus, -.delete-confirmation form .cancel-link:hover { - background: var(--close-button-hover-bg); -} - -/* POPUP */ -.popup #content { - padding: 20px; -} - -.popup #container { - min-width: 0; -} - -.popup #header { - padding: 10px 20px; -} - -/* PAGINATOR */ - -.paginator { - display: flex; - align-items: center; - gap: 4px; - font-size: 0.8125rem; - padding-top: 10px; - padding-bottom: 10px; - line-height: 22px; - margin: 0; - border-top: 1px solid var(--hairline-color); - width: 100%; -} - -.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/smartsoltech/staticfiles/admin/css/changelists.css b/smartsoltech/staticfiles/admin/css/changelists.css deleted file mode 100644 index 005b776..0000000 --- a/smartsoltech/staticfiles/admin/css/changelists.css +++ /dev/null @@ -1,343 +0,0 @@ -/* CHANGELISTS */ - -#changelist { - display: flex; - align-items: flex-start; - justify-content: space-between; -} - -#changelist .changelist-form-container { - flex: 1 1 auto; - min-width: 0; -} - -#changelist table { - width: 100%; -} - -.change-list .hiddenfields { display:none; } - -.change-list .filtered table { - border-right: none; -} - -.change-list .filtered { - min-height: 400px; -} - -.change-list .filtered .results, .change-list .filtered .paginator, -.filtered #toolbar, .filtered div.xfull { - width: auto; -} - -.change-list .filtered table tbody th { - padding-right: 1em; -} - -#changelist-form .results { - overflow-x: auto; - width: 100%; -} - -#changelist .toplinks { - border-bottom: 1px solid var(--hairline-color); -} - -#changelist .paginator { - color: var(--body-quiet-color); - border-bottom: 1px solid var(--hairline-color); - background: var(--body-bg); - overflow: hidden; -} - -/* CHANGELIST TABLES */ - -#changelist table thead th { - padding: 0; - white-space: nowrap; - vertical-align: middle; -} - -#changelist table thead th.action-checkbox-column { - width: 1.5em; - text-align: center; -} - -#changelist table tbody td.action-checkbox { - text-align: center; -} - -#changelist table tfoot { - color: var(--body-quiet-color); -} - -/* TOOLBAR */ - -#toolbar { - padding: 8px 10px; - margin-bottom: 15px; - border-top: 1px solid var(--hairline-color); - border-bottom: 1px solid var(--hairline-color); - background: var(--darkened-bg); - color: var(--body-quiet-color); -} - -#toolbar form input { - border-radius: 4px; - font-size: 0.875rem; - padding: 5px; - color: var(--body-fg); -} - -#toolbar #searchbar { - height: 1.1875rem; - border: 1px solid var(--border-color); - padding: 2px 5px; - margin: 0; - vertical-align: top; - font-size: 0.8125rem; - max-width: 100%; -} - -#toolbar #searchbar:focus { - border-color: var(--body-quiet-color); -} - -#toolbar form input[type="submit"] { - border: 1px solid var(--border-color); - font-size: 0.8125rem; - padding: 4px 8px; - margin: 0; - vertical-align: middle; - background: var(--body-bg); - box-shadow: 0 -15px 20px -10px rgba(0, 0, 0, 0.15) inset; - cursor: pointer; - color: var(--body-fg); -} - -#toolbar form input[type="submit"]:focus, -#toolbar form input[type="submit"]:hover { - border-color: var(--body-quiet-color); -} - -#changelist-search img { - vertical-align: middle; - margin-right: 4px; -} - -#changelist-search .help { - word-break: break-word; -} - -/* FILTER COLUMN */ - -#changelist-filter { - flex: 0 0 240px; - order: 1; - background: var(--darkened-bg); - border-left: none; - margin: 0 0 0 30px; -} - -@media (forced-colors: active) { - #changelist-filter { - border: 1px solid; - } -} - -#changelist-filter h2 { - font-size: 0.875rem; - text-transform: uppercase; - letter-spacing: 0.5px; - padding: 5px 15px; - margin-bottom: 12px; - border-bottom: none; -} - -#changelist-filter h3, -#changelist-filter details summary { - font-weight: 400; - padding: 0 15px; - margin-bottom: 10px; -} - -#changelist-filter details summary > * { - display: inline; -} - -#changelist-filter details > summary { - list-style-type: none; -} - -#changelist-filter details > summary::-webkit-details-marker { - display: none; -} - -#changelist-filter details > summary::before { - content: '→'; - font-weight: bold; - color: var(--link-hover-color); -} - -#changelist-filter details[open] > summary::before { - content: '↓'; -} - -#changelist-filter ul { - margin: 5px 0; - padding: 0 15px 15px; - border-bottom: 1px solid var(--hairline-color); -} - -#changelist-filter ul:last-child { - border-bottom: none; -} - -#changelist-filter li { - list-style-type: none; - margin-left: 0; - padding-left: 0; -} - -#changelist-filter a { - display: block; - color: var(--body-quiet-color); - word-break: break-word; -} - -#changelist-filter li.selected { - border-left: 5px solid var(--hairline-color); - padding-left: 10px; - margin-left: -15px; -} - -#changelist-filter li.selected a { - color: var(--link-selected-fg); -} - -#changelist-filter a:focus, #changelist-filter a:hover, -#changelist-filter li.selected a:focus, -#changelist-filter li.selected a:hover { - color: var(--link-hover-color); -} - -#changelist-filter #changelist-filter-extra-actions { - font-size: 0.8125rem; - margin-bottom: 10px; - border-bottom: 1px solid var(--hairline-color); -} - -/* DATE DRILLDOWN */ - -.change-list .toplinks { - display: flex; - padding-bottom: 5px; - flex-wrap: wrap; - gap: 3px 17px; - font-weight: bold; -} - -.change-list .toplinks a { - font-size: 0.8125rem; -} - -.change-list .toplinks .date-back { - color: var(--body-quiet-color); -} - -.change-list .toplinks .date-back:focus, -.change-list .toplinks .date-back:hover { - color: var(--link-hover-color); -} - -/* ACTIONS */ - -.filtered .actions { - border-right: none; -} - -#changelist table input { - margin: 0; - vertical-align: baseline; -} - -/* Once the :has() pseudo-class is supported by all browsers, the tr.selected - selector and the JS adding the class can be removed. */ -#changelist tbody tr.selected { - background-color: var(--selected-row); -} - -#changelist tbody tr:has(.action-select:checked) { - background-color: var(--selected-row); -} - -@media (forced-colors: active) { - #changelist tbody tr.selected { - background-color: SelectedItem; - } - #changelist tbody tr:has(.action-select:checked) { - background-color: SelectedItem; - } -} - -#changelist .actions { - padding: 10px; - background: var(--body-bg); - border-top: none; - border-bottom: none; - line-height: 1.5rem; - color: var(--body-quiet-color); - width: 100%; -} - -#changelist .actions span.all, -#changelist .actions span.action-counter, -#changelist .actions span.clear, -#changelist .actions span.question { - font-size: 0.8125rem; - margin: 0 0.5em; -} - -#changelist .actions:last-child { - border-bottom: none; -} - -#changelist .actions select { - vertical-align: top; - height: 1.5rem; - color: var(--body-fg); - border: 1px solid var(--border-color); - border-radius: 4px; - font-size: 0.875rem; - padding: 0 0 0 4px; - margin: 0; - margin-left: 10px; -} - -#changelist .actions select:focus { - border-color: var(--body-quiet-color); -} - -#changelist .actions label { - display: inline-block; - vertical-align: middle; - font-size: 0.8125rem; -} - -#changelist .actions .button { - font-size: 0.8125rem; - border: 1px solid var(--border-color); - border-radius: 4px; - background: var(--body-bg); - box-shadow: 0 -15px 20px -10px rgba(0, 0, 0, 0.15) inset; - cursor: pointer; - height: 1.5rem; - line-height: 1; - padding: 4px 8px; - margin: 0; - color: var(--body-fg); -} - -#changelist .actions .button:focus, #changelist .actions .button:hover { - border-color: var(--body-quiet-color); -} diff --git a/smartsoltech/staticfiles/admin/css/dark_mode.css b/smartsoltech/staticfiles/admin/css/dark_mode.css deleted file mode 100644 index 7e12a81..0000000 --- a/smartsoltech/staticfiles/admin/css/dark_mode.css +++ /dev/null @@ -1,130 +0,0 @@ -@media (prefers-color-scheme: dark) { - :root { - --primary: #264b5d; - --primary-fg: #f7f7f7; - - --body-fg: #eeeeee; - --body-bg: #121212; - --body-quiet-color: #d0d0d0; - --body-medium-color: #e0e0e0; - --body-loud-color: #ffffff; - - --breadcrumbs-link-fg: #e0e0e0; - --breadcrumbs-bg: var(--primary); - - --link-fg: #81d4fa; - --link-hover-color: #4ac1f7; - --link-selected-fg: #6f94c6; - - --hairline-color: #272727; - --border-color: #353535; - - --error-fg: #e35f5f; - --message-success-bg: #006b1b; - --message-warning-bg: #583305; - --message-error-bg: #570808; - - --darkened-bg: #212121; - --selected-bg: #1b1b1b; - --selected-row: #00363a; - - --close-button-bg: #333333; - --close-button-hover-bg: #666666; - - color-scheme: dark; - } - } - - -html[data-theme="dark"] { - --primary: #264b5d; - --primary-fg: #f7f7f7; - - --body-fg: #eeeeee; - --body-bg: #121212; - --body-quiet-color: #d0d0d0; - --body-medium-color: #e0e0e0; - --body-loud-color: #ffffff; - - --breadcrumbs-link-fg: #e0e0e0; - --breadcrumbs-bg: var(--primary); - - --link-fg: #81d4fa; - --link-hover-color: #4ac1f7; - --link-selected-fg: #6f94c6; - - --hairline-color: #272727; - --border-color: #353535; - - --error-fg: #e35f5f; - --message-success-bg: #006b1b; - --message-warning-bg: #583305; - --message-error-bg: #570808; - - --darkened-bg: #212121; - --selected-bg: #1b1b1b; - --selected-row: #00363a; - - --close-button-bg: #333333; - --close-button-hover-bg: #666666; - - color-scheme: dark; -} - -/* THEME SWITCH */ -.theme-toggle { - cursor: pointer; - border: none; - padding: 0; - background: transparent; - vertical-align: middle; - margin-inline-start: 5px; - margin-top: -1px; -} - -.theme-toggle svg { - vertical-align: middle; - height: 1rem; - width: 1rem; - 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/smartsoltech/staticfiles/admin/css/dashboard.css b/smartsoltech/staticfiles/admin/css/dashboard.css deleted file mode 100644 index 242b81a..0000000 --- a/smartsoltech/staticfiles/admin/css/dashboard.css +++ /dev/null @@ -1,29 +0,0 @@ -/* DASHBOARD */ -.dashboard td, .dashboard th { - word-break: break-word; -} - -.dashboard .module table th { - width: 100%; -} - -.dashboard .module table td { - white-space: nowrap; -} - -.dashboard .module table td a { - display: block; - padding-right: .6em; -} - -/* RECENT ACTIONS MODULE */ - -.module ul.actionlist { - margin-left: 0; -} - -ul.actionlist li { - list-style-type: none; - overflow: hidden; - text-overflow: ellipsis; -} diff --git a/smartsoltech/staticfiles/admin/css/forms.css b/smartsoltech/staticfiles/admin/css/forms.css deleted file mode 100644 index 776a920..0000000 --- a/smartsoltech/staticfiles/admin/css/forms.css +++ /dev/null @@ -1,508 +0,0 @@ -@import url('widgets.css'); - -/* FORM ROWS */ - -.form-row { - overflow: hidden; - padding: 10px; - font-size: 0.8125rem; - border-bottom: 1px solid var(--hairline-color); -} - -.form-row img, .form-row input { - vertical-align: middle; -} - -.form-row label input[type="checkbox"] { - margin-top: 0; - vertical-align: 0; -} - -form .form-row p { - padding-left: 0; -} - -.flex-container { - display: flex; -} - -.form-multiline { - flex-wrap: wrap; -} - -.form-multiline > div { - padding-bottom: 10px; -} - -/* FORM LABELS */ - -label { - font-weight: normal; - color: var(--body-quiet-color); - font-size: 0.8125rem; -} - -.required label, label.required { - font-weight: bold; -} - -/* RADIO BUTTONS */ - -form div.radiolist div { - padding-right: 7px; -} - -form div.radiolist.inline div { - display: inline-block; -} - -form div.radiolist label { - width: auto; -} - -form div.radiolist input[type="radio"] { - margin: -2px 4px 0 0; - padding: 0; -} - -form ul.inline { - margin-left: 0; - padding: 0; -} - -form ul.inline li { - float: left; - padding-right: 7px; -} - -/* FIELDSETS */ - -fieldset .fieldset-heading, -fieldset .inline-heading, -:not(.inline-related) .collapse summary { - border: 1px solid var(--header-bg); - margin: 0; - padding: 8px; - font-weight: 400; - font-size: 0.8125rem; - background: var(--header-bg); - color: var(--header-link-color); -} - -/* ALIGNED FIELDSETS */ - -.aligned label { - display: block; - padding: 4px 10px 0 0; - min-width: 160px; - width: 160px; - word-wrap: break-word; -} - -.aligned label:not(.vCheckboxLabel):after { - content: ''; - display: inline-block; - vertical-align: middle; -} - -.aligned label + p, .aligned .checkbox-row + div.help, .aligned label + div.readonly { - padding: 6px 0; - margin-top: 0; - margin-bottom: 0; - margin-left: 0; - overflow-wrap: break-word; -} - -.aligned ul label { - display: inline; - float: none; - width: auto; -} - -.aligned .form-row input { - margin-bottom: 0; -} - -.colMS .aligned .vLargeTextField, .colMS .aligned .vXMLLargeTextField { - width: 350px; -} - -form .aligned ul { - margin-left: 160px; - padding-left: 10px; -} - -form .aligned div.radiolist { - display: inline-block; - margin: 0; - padding: 0; -} - -form .aligned p.help, -form .aligned div.help { - margin-top: 0; - margin-left: 160px; - padding-left: 10px; -} - -form .aligned p.date div.help.timezonewarning, -form .aligned p.datetime div.help.timezonewarning, -form .aligned p.time div.help.timezonewarning { - margin-left: 0; - padding-left: 0; - font-weight: normal; -} - -form .aligned p.help:last-child, -form .aligned div.help:last-child { - margin-bottom: 0; - padding-bottom: 0; -} - -form .aligned input + p.help, -form .aligned textarea + p.help, -form .aligned select + p.help, -form .aligned input + div.help, -form .aligned textarea + div.help, -form .aligned select + div.help { - margin-left: 160px; - padding-left: 10px; -} - -form .aligned 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 ul.tools { - padding: 0; - margin: 0; - list-style: none; -} - -.inline-group ul.tools li { - display: inline; - padding: 0 5px; -} - -.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 ul.tools a.add, -.inline-group div.add-row a, -.inline-group .tabular tr.add-row td a { - background: url(../img/icon-addlink.svg) 0 1px no-repeat; - padding-left: 16px; - 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/smartsoltech/staticfiles/admin/css/login.css b/smartsoltech/staticfiles/admin/css/login.css deleted file mode 100644 index 805a34b..0000000 --- a/smartsoltech/staticfiles/admin/css/login.css +++ /dev/null @@ -1,61 +0,0 @@ -/* LOGIN FORM */ - -.login { - background: var(--darkened-bg); - height: auto; -} - -.login #header { - height: auto; - padding: 15px 16px; - justify-content: center; -} - -.login #header h1 { - font-size: 1.125rem; - margin: 0; -} - -.login #header h1 a { - color: var(--header-link-color); -} - -.login #content { - padding: 20px; -} - -.login #container { - background: var(--body-bg); - border: 1px solid var(--hairline-color); - border-radius: 4px; - overflow: hidden; - width: 28em; - min-width: 300px; - margin: 100px auto; - height: auto; -} - -.login .form-row { - padding: 4px 0; -} - -.login .form-row label { - display: block; - line-height: 2em; -} - -.login .form-row #id_username, .login .form-row #id_password { - padding: 8px; - width: 100%; - box-sizing: border-box; -} - -.login .submit-row { - padding: 1em 0 0 0; - margin: 0; - text-align: center; -} - -.login .password-reset-link { - text-align: center; -} diff --git a/smartsoltech/staticfiles/admin/css/nav_sidebar.css b/smartsoltech/staticfiles/admin/css/nav_sidebar.css deleted file mode 100644 index 7eb0de9..0000000 --- a/smartsoltech/staticfiles/admin/css/nav_sidebar.css +++ /dev/null @@ -1,150 +0,0 @@ -.sticky { - position: sticky; - top: 0; - max-height: 100vh; -} - -.toggle-nav-sidebar { - z-index: 20; - left: 0; - display: flex; - align-items: center; - justify-content: center; - flex: 0 0 23px; - width: 23px; - border: 0; - border-right: 1px solid var(--hairline-color); - background-color: var(--body-bg); - cursor: pointer; - font-size: 1.25rem; - color: var(--link-fg); - padding: 0; -} - -[dir="rtl"] .toggle-nav-sidebar { - border-left: 1px solid var(--hairline-color); - border-right: 0; -} - -.toggle-nav-sidebar:hover, -.toggle-nav-sidebar:focus { - background-color: var(--darkened-bg); -} - -#nav-sidebar { - z-index: 15; - flex: 0 0 275px; - left: -276px; - margin-left: -276px; - border-top: 1px solid transparent; - border-right: 1px solid var(--hairline-color); - background-color: var(--body-bg); - overflow: auto; -} - -[dir="rtl"] #nav-sidebar { - border-left: 1px solid var(--hairline-color); - border-right: 0; - left: 0; - margin-left: 0; - right: -276px; - margin-right: -276px; -} - -.toggle-nav-sidebar::before { - content: '\00BB'; -} - -.main.shifted .toggle-nav-sidebar::before { - content: '\00AB'; -} - -.main > #nav-sidebar { - visibility: hidden; -} - -.main.shifted > #nav-sidebar { - margin-left: 0; - visibility: visible; -} - -[dir="rtl"] .main.shifted > #nav-sidebar { - margin-right: 0; -} - -#nav-sidebar .module th { - width: 100%; - overflow-wrap: anywhere; -} - -#nav-sidebar .module th, -#nav-sidebar .module caption { - padding-left: 16px; -} - -#nav-sidebar .module td { - white-space: nowrap; -} - -[dir="rtl"] #nav-sidebar .module th, -[dir="rtl"] #nav-sidebar .module caption { - padding-left: 8px; - padding-right: 16px; -} - -#nav-sidebar .current-app .section:link, -#nav-sidebar .current-app .section:visited { - color: var(--header-color); - font-weight: bold; -} - -#nav-sidebar .current-model { - background: var(--selected-row); -} - -@media (forced-colors: active) { - #nav-sidebar .current-model { - background-color: SelectedItem; - } -} - -.main > #nav-sidebar + .content { - max-width: calc(100% - 23px); -} - -.main.shifted > #nav-sidebar + .content { - max-width: calc(100% - 299px); -} - -@media (max-width: 767px) { - #nav-sidebar, #toggle-nav-sidebar { - display: none; - } - - .main > #nav-sidebar + .content, - .main.shifted > #nav-sidebar + .content { - max-width: 100%; - } -} - -#nav-filter { - width: 100%; - box-sizing: border-box; - padding: 2px 5px; - margin: 5px 0; - border: 1px solid var(--border-color); - background-color: var(--darkened-bg); - color: var(--body-fg); -} - -#nav-filter:focus { - border-color: var(--body-quiet-color); -} - -#nav-filter.no-results { - background: var(--message-error-bg); -} - -#nav-sidebar table { - width: 100%; -} diff --git a/smartsoltech/staticfiles/admin/css/responsive.css b/smartsoltech/staticfiles/admin/css/responsive.css deleted file mode 100644 index 932e824..0000000 --- a/smartsoltech/staticfiles/admin/css/responsive.css +++ /dev/null @@ -1,967 +0,0 @@ -/* Tablets */ - -input[type="submit"], button { - -webkit-appearance: none; - appearance: none; -} - -@media (max-width: 1024px) { - /* Basic */ - - html { - -webkit-text-size-adjust: 100%; - } - - td, th { - padding: 10px; - font-size: 0.875rem; - } - - .small { - font-size: 0.75rem; - } - - /* Layout */ - - #container { - min-width: 0; - } - - #content { - padding: 15px 20px 20px; - } - - div.breadcrumbs { - padding: 10px 30px; - } - - /* Header */ - - #header { - flex-direction: column; - padding: 15px 30px; - justify-content: flex-start; - } - - #site-name { - margin: 0 0 8px; - line-height: 1.2; - } - - #user-tools { - margin: 0; - font-weight: 400; - line-height: 1.85; - text-align: left; - } - - #user-tools a { - display: inline-block; - line-height: 1.4; - } - - /* Dashboard */ - - .dashboard #content { - width: auto; - } - - #content-related { - margin-right: -290px; - } - - .colSM #content-related { - margin-left: -290px; - } - - .colMS { - margin-right: 290px; - } - - .colSM { - margin-left: 290px; - } - - .dashboard .module table td a { - padding-right: 0; - } - - td .changelink, td .addlink { - font-size: 0.8125rem; - } - - /* Changelist */ - - #toolbar { - border: none; - padding: 15px; - } - - #changelist-search > div { - display: flex; - flex-wrap: nowrap; - max-width: 480px; - } - - #changelist-search label { - line-height: 1.375rem; - } - - #toolbar form #searchbar { - flex: 1 0 auto; - width: 0; - height: 1.375rem; - margin: 0 10px 0 6px; - } - - #toolbar form input[type=submit] { - flex: 0 1 auto; - } - - #changelist-search .quiet { - width: 0; - flex: 1 0 auto; - margin: 5px 0 0 25px; - } - - #changelist .actions { - display: flex; - flex-wrap: wrap; - padding: 15px 0; - } - - #changelist .actions label { - display: flex; - } - - #changelist .actions select { - background: var(--body-bg); - } - - #changelist .actions .button { - min-width: 48px; - margin: 0 10px; - } - - #changelist .actions span.all, - #changelist .actions span.clear, - #changelist .actions span.question, - #changelist .actions span.action-counter { - font-size: 0.6875rem; - margin: 0 10px 0 0; - } - - #changelist-filter { - flex-basis: 200px; - } - - .change-list .filtered .results, - .change-list .filtered .paginator, - .filtered #toolbar, - .filtered .actions, - - #changelist .paginator { - border-top-color: var(--hairline-color); /* XXX Is this used at all? */ - } - - #changelist .results + .paginator { - border-top: none; - } - - /* Forms */ - - label { - font-size: 1rem; - } - - /* - Minifiers remove the default (text) "type" attribute from "input" HTML - tags. Add input:not([type]) to make the CSS stylesheet work the same. - */ - .form-row input:not([type]), - .form-row input[type=text], - .form-row input[type=password], - .form-row input[type=email], - .form-row input[type=url], - .form-row input[type=tel], - .form-row input[type=number], - .form-row textarea, - .form-row select, - .form-row .vTextField { - box-sizing: border-box; - margin: 0; - padding: 6px 8px; - min-height: 2.25rem; - font-size: 1rem; - } - - .form-row select { - height: 2.25rem; - } - - .form-row select[multiple] { - height: auto; - min-height: 0; - } - - fieldset .fieldBox + .fieldBox { - margin-top: 10px; - padding-top: 10px; - border-top: 1px solid var(--hairline-color); - } - - textarea { - max-width: 100%; - max-height: 120px; - } - - .aligned label { - padding-top: 6px; - } - - .aligned .related-lookup, - .aligned .datetimeshortcuts, - .aligned .related-lookup + strong { - align-self: center; - margin-left: 15px; - } - - form .aligned div.radiolist { - margin-left: 2px; - } - - .submit-row { - padding: 8px; - } - - .submit-row a.deletelink { - padding: 10px 7px; - } - - .button, input[type=submit], input[type=button], .submit-row input, a.button { - padding: 7px; - } - - /* Selector */ - - .selector { - display: flex; - width: 100%; - } - - .selector .selector-filter { - display: flex; - align-items: center; - } - - .selector .selector-filter label { - margin: 0 8px 0 0; - } - - .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 ul.selector-chooser { - width: 26px; - height: 52px; - padding: 2px 0; - border-radius: 20px; - transform: translateY(-10px); - } - - .selector-add, .selector-remove { - width: 20px; - height: 20px; - background-size: 20px auto; - } - - .selector-add { - background-position: 0 -120px; - } - - .selector-remove { - background-position: 0 -80px; - } - - a.selector-chooseall, a.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 { - width: 52px; - height: 26px; - padding: 0 2px; - transform: none; - } - - .stacked .selector-chooser li { - padding: 3px; - } - - .stacked .selector-add, .stacked .selector-remove { - background-size: 20px auto; - } - - .stacked .selector-add { - background-position: 0 -40px; - } - - .stacked .active.selector-add { - background-position: 0 -40px; - } - - .active.selector-add:focus, .active.selector-add:hover { - background-position: 0 -140px; - } - - .stacked .active.selector-add:focus, .stacked .active.selector-add:hover { - background-position: 0 -60px; - } - - .stacked .selector-remove { - background-position: 0 0; - } - - .stacked .active.selector-remove { - background-position: 0 0; - } - - .active.selector-remove:focus, .active.selector-remove:hover { - background-position: 0 -100px; - } - - .stacked .active.selector-remove:focus, .stacked .active.selector-remove:hover { - background-position: 0 -20px; - } - - .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; - } - - .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: block; - width: 52px; - height: 26px; - padding: 0 2px; - transform: none; - } - - .selector ul.selector-chooser li { - float: left; - } - - .selector-remove { - background-position: 0 0; - } - - .active.selector-remove:focus, .active.selector-remove:hover { - background-position: 0 -20px; - } - - .selector-add { - background-position: 0 -40px; - } - - .active.selector-add:focus, .active.selector-add:hover { - background-position: 0 -60px; - } - - /* 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/smartsoltech/staticfiles/admin/css/responsive_rtl.css b/smartsoltech/staticfiles/admin/css/responsive_rtl.css deleted file mode 100644 index 33b5784..0000000 --- a/smartsoltech/staticfiles/admin/css/responsive_rtl.css +++ /dev/null @@ -1,111 +0,0 @@ -/* TABLETS */ - -@media (max-width: 1024px) { - [dir="rtl"] .colMS { - margin-right: 0; - } - - [dir="rtl"] #user-tools { - text-align: right; - } - - [dir="rtl"] #changelist .actions label { - padding-left: 10px; - padding-right: 0; - } - - [dir="rtl"] #changelist .actions select { - margin-left: 0; - margin-right: 15px; - } - - [dir="rtl"] .change-list .filtered .results, - [dir="rtl"] .change-list .filtered .paginator, - [dir="rtl"] .filtered #toolbar, - [dir="rtl"] .filtered div.xfull, - [dir="rtl"] .filtered .actions, - [dir="rtl"] #changelist-filter { - margin-left: 0; - } - - [dir="rtl"] .inline-group ul.tools a.add, - [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"] .selector .selector-filter label { - margin-right: 0; - margin-left: 8px; - } - - [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; - } - - [dir="rtl"] .selector-add { - background-position: 0 -80px; - } - - [dir="rtl"] .selector-remove { - background-position: 0 -120px; - } - - [dir="rtl"] .active.selector-add:focus, .active.selector-add:hover { - background-position: 0 -100px; - } - - [dir="rtl"] .active.selector-remove:focus, .active.selector-remove:hover { - background-position: 0 -140px; - } -} - -/* 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"] .active.selector-remove:focus, .active.selector-remove:hover { - background-position: 0 -20px; - } - - [dir="rtl"] .selector-add { - background-position: 0 -40px; - } - - [dir="rtl"] .active.selector-add:focus, .active.selector-add:hover { - background-position: 0 -60px; - } -} diff --git a/smartsoltech/staticfiles/admin/css/rtl.css b/smartsoltech/staticfiles/admin/css/rtl.css deleted file mode 100644 index b8f60e0..0000000 --- a/smartsoltech/staticfiles/admin/css/rtl.css +++ /dev/null @@ -1,291 +0,0 @@ -/* GLOBAL */ - -th { - text-align: right; -} - -.module h2, .module caption { - text-align: right; -} - -.module ul, .module ol { - margin-left: 0; - margin-right: 1.5em; -} - -.viewlink, .addlink, .changelink, .hidelink { - padding-left: 0; - padding-right: 16px; - background-position: 100% 1px; -} - -.deletelink { - padding-left: 0; - padding-right: 16px; - background-position: 100% 1px; -} - -.object-tools { - float: left; -} - -thead th:first-child, -tfoot td:first-child { - border-left: none; -} - -/* LAYOUT */ - -#user-tools { - right: auto; - left: 0; - text-align: left; -} - -div.breadcrumbs { - text-align: right; -} - -#content-main { - float: right; -} - -#content-related { - float: left; - margin-left: -300px; - margin-right: auto; -} - -.colMS { - margin-left: 300px; - margin-right: 0; -} - -/* SORTABLE TABLES */ - -table thead th.sorted .sortoptions { - float: left; -} - -thead th.sorted .text { - padding-right: 0; - padding-left: 42px; -} - -/* dashboard styles */ - -.dashboard .module table td a { - padding-left: .6em; - padding-right: 16px; -} - -/* changelists styles */ - -.change-list .filtered table { - border-left: none; - border-right: 0px none; -} - -#changelist-filter { - border-left: none; - border-right: none; - margin-left: 0; - margin-right: 30px; -} - -#changelist-filter li.selected { - border-left: none; - padding-left: 10px; - margin-left: 0; - border-right: 5px solid var(--hairline-color); - padding-right: 10px; - margin-right: -15px; -} - -#changelist table tbody td:first-child, #changelist table tbody th:first-child { - border-right: none; - border-left: none; -} - -.paginator .end { - margin-left: 6px; - margin-right: 0; -} - -.paginator input { - margin-left: 0; - margin-right: auto; -} - -/* FORMS */ - -.aligned label { - padding: 0 0 3px 1em; -} - -.submit-row a.deletelink { - margin-left: 0; - margin-right: auto; -} - -.vDateField, .vTimeField { - margin-left: 2px; -} - -.aligned .form-row input { - margin-left: 5px; -} - -form .aligned ul { - margin-right: 163px; - padding-right: 10px; - margin-left: 0; - padding-left: 0; -} - -form ul.inline li { - float: right; - padding-right: 0; - padding-left: 7px; -} - -form .aligned p.help, -form .aligned div.help { - margin-left: 0; - margin-right: 160px; - padding-right: 10px; -} - -form div.help ul, -form .aligned .checkbox-row + .help, -form .aligned p.date div.help.timezonewarning, -form .aligned p.datetime div.help.timezonewarning, -form .aligned p.time div.help.timezonewarning { - margin-right: 0; - padding-right: 0; -} - -form .wide p.help, -form .wide ul.errorlist, -form .wide div.help { - padding-left: 0; - padding-right: 50px; -} - -.submit-row { - text-align: right; -} - -fieldset .fieldBox { - margin-left: 20px; - margin-right: 0; -} - -.errorlist li { - background-position: 100% 12px; - padding: 0; -} - -.errornote { - background-position: 100% 12px; - padding: 10px 12px; -} - -/* WIDGETS */ - -.calendarnav-previous { - top: 0; - left: auto; - right: 10px; - background: url(../img/calendar-icons.svg) 0 -15px no-repeat; -} - -.calendarnav-next { - top: 0; - right: auto; - left: 10px; - background: url(../img/calendar-icons.svg) 0 0 no-repeat; -} - -.calendar caption, .calendarbox h2 { - text-align: center; -} - -.selector { - float: right; -} - -.selector .selector-filter { - text-align: right; -} - -.selector-add { - background: url(../img/selector-icons.svg) 0 -64px no-repeat; -} - -.active.selector-add:focus, .active.selector-add:hover { - background-position: 0 -80px; -} - -.selector-remove { - background: url(../img/selector-icons.svg) 0 -96px no-repeat; -} - -.active.selector-remove:focus, .active.selector-remove:hover { - background-position: 0 -112px; -} - -a.selector-chooseall { - background: url(../img/selector-icons.svg) right -128px no-repeat; -} - -a.active.selector-chooseall:focus, a.active.selector-chooseall:hover { - background-position: 100% -144px; -} - -a.selector-clearall { - background: url(../img/selector-icons.svg) 0 -160px no-repeat; -} - -a.active.selector-clearall:focus, a.active.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/smartsoltech/staticfiles/admin/css/unusable_password_field.css b/smartsoltech/staticfiles/admin/css/unusable_password_field.css deleted file mode 100644 index d46eb03..0000000 --- a/smartsoltech/staticfiles/admin/css/unusable_password_field.css +++ /dev/null @@ -1,19 +0,0 @@ -/* Hide warnings fields if usable password is selected */ -form:has(#id_usable_password input[value="true"]:checked) .messagelist { - display: none; -} - -/* Hide password fields if unusable password is selected */ -form:has(#id_usable_password input[value="false"]:checked) .field-password1, -form:has(#id_usable_password input[value="false"]:checked) .field-password2 { - display: none; -} - -/* Select appropriate submit button */ -form:has(#id_usable_password input[value="true"]:checked) input[type="submit"].unset-password { - display: none; -} - -form:has(#id_usable_password input[value="false"]:checked) input[type="submit"].set-password { - display: none; -} diff --git a/smartsoltech/staticfiles/admin/css/vendor/select2/LICENSE-SELECT2.md b/smartsoltech/staticfiles/admin/css/vendor/select2/LICENSE-SELECT2.md deleted file mode 100644 index 8cb8a2b..0000000 --- a/smartsoltech/staticfiles/admin/css/vendor/select2/LICENSE-SELECT2.md +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2012-2017 Kevin Brown, Igor Vaynberg, and Select2 contributors - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/smartsoltech/staticfiles/admin/css/vendor/select2/select2.css b/smartsoltech/staticfiles/admin/css/vendor/select2/select2.css deleted file mode 100644 index 750b320..0000000 --- a/smartsoltech/staticfiles/admin/css/vendor/select2/select2.css +++ /dev/null @@ -1,481 +0,0 @@ -.select2-container { - box-sizing: border-box; - display: inline-block; - margin: 0; - position: relative; - vertical-align: middle; } - .select2-container .select2-selection--single { - box-sizing: border-box; - cursor: pointer; - display: block; - height: 28px; - user-select: none; - -webkit-user-select: none; } - .select2-container .select2-selection--single .select2-selection__rendered { - display: block; - padding-left: 8px; - padding-right: 20px; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; } - .select2-container .select2-selection--single .select2-selection__clear { - position: relative; } - .select2-container[dir="rtl"] .select2-selection--single .select2-selection__rendered { - padding-right: 8px; - padding-left: 20px; } - .select2-container .select2-selection--multiple { - box-sizing: border-box; - cursor: pointer; - display: block; - min-height: 32px; - user-select: none; - -webkit-user-select: none; } - .select2-container .select2-selection--multiple .select2-selection__rendered { - display: inline-block; - overflow: hidden; - padding-left: 8px; - text-overflow: ellipsis; - white-space: nowrap; } - .select2-container .select2-search--inline { - float: left; } - .select2-container .select2-search--inline .select2-search__field { - box-sizing: border-box; - border: none; - font-size: 100%; - margin-top: 5px; - padding: 0; } - .select2-container .select2-search--inline .select2-search__field::-webkit-search-cancel-button { - -webkit-appearance: none; } - -.select2-dropdown { - background-color: white; - border: 1px solid #aaa; - border-radius: 4px; - box-sizing: border-box; - display: block; - position: absolute; - left: -100000px; - width: 100%; - z-index: 1051; } - -.select2-results { - display: block; } - -.select2-results__options { - list-style: none; - margin: 0; - padding: 0; } - -.select2-results__option { - padding: 6px; - user-select: none; - -webkit-user-select: none; } - .select2-results__option[aria-selected] { - cursor: pointer; } - -.select2-container--open .select2-dropdown { - left: 0; } - -.select2-container--open .select2-dropdown--above { - border-bottom: none; - border-bottom-left-radius: 0; - border-bottom-right-radius: 0; } - -.select2-container--open .select2-dropdown--below { - border-top: none; - border-top-left-radius: 0; - border-top-right-radius: 0; } - -.select2-search--dropdown { - display: block; - padding: 4px; } - .select2-search--dropdown .select2-search__field { - padding: 4px; - width: 100%; - box-sizing: border-box; } - .select2-search--dropdown .select2-search__field::-webkit-search-cancel-button { - -webkit-appearance: none; } - .select2-search--dropdown.select2-search--hide { - display: none; } - -.select2-close-mask { - border: 0; - margin: 0; - padding: 0; - display: block; - position: fixed; - left: 0; - top: 0; - min-height: 100%; - min-width: 100%; - height: auto; - width: auto; - opacity: 0; - z-index: 99; - background-color: #fff; - filter: alpha(opacity=0); } - -.select2-hidden-accessible { - border: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(50%) !important; - clip-path: inset(50%) !important; - height: 1px !important; - overflow: hidden !important; - padding: 0 !important; - position: absolute !important; - width: 1px !important; - white-space: nowrap !important; } - -.select2-container--default .select2-selection--single { - background-color: #fff; - border: 1px solid #aaa; - border-radius: 4px; } - .select2-container--default .select2-selection--single .select2-selection__rendered { - color: #444; - line-height: 28px; } - .select2-container--default .select2-selection--single .select2-selection__clear { - cursor: pointer; - float: right; - font-weight: bold; } - .select2-container--default .select2-selection--single .select2-selection__placeholder { - color: #999; } - .select2-container--default .select2-selection--single .select2-selection__arrow { - height: 26px; - position: absolute; - top: 1px; - right: 1px; - width: 20px; } - .select2-container--default .select2-selection--single .select2-selection__arrow b { - border-color: #888 transparent transparent transparent; - border-style: solid; - border-width: 5px 4px 0 4px; - height: 0; - left: 50%; - margin-left: -4px; - margin-top: -2px; - position: absolute; - top: 50%; - width: 0; } - -.select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__clear { - float: left; } - -.select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__arrow { - left: 1px; - right: auto; } - -.select2-container--default.select2-container--disabled .select2-selection--single { - background-color: #eee; - cursor: default; } - .select2-container--default.select2-container--disabled .select2-selection--single .select2-selection__clear { - display: none; } - -.select2-container--default.select2-container--open .select2-selection--single .select2-selection__arrow b { - border-color: transparent transparent #888 transparent; - border-width: 0 4px 5px 4px; } - -.select2-container--default .select2-selection--multiple { - background-color: white; - border: 1px solid #aaa; - border-radius: 4px; - cursor: text; } - .select2-container--default .select2-selection--multiple .select2-selection__rendered { - box-sizing: border-box; - list-style: none; - margin: 0; - padding: 0 5px; - width: 100%; } - .select2-container--default .select2-selection--multiple .select2-selection__rendered li { - list-style: none; } - .select2-container--default .select2-selection--multiple .select2-selection__clear { - cursor: pointer; - float: right; - font-weight: bold; - margin-top: 5px; - margin-right: 10px; - padding: 1px; } - .select2-container--default .select2-selection--multiple .select2-selection__choice { - background-color: #e4e4e4; - border: 1px solid #aaa; - border-radius: 4px; - cursor: default; - float: left; - margin-right: 5px; - margin-top: 5px; - padding: 0 5px; } - .select2-container--default .select2-selection--multiple .select2-selection__choice__remove { - color: #999; - cursor: pointer; - display: inline-block; - font-weight: bold; - margin-right: 2px; } - .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover { - color: #333; } - -.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice, .select2-container--default[dir="rtl"] .select2-selection--multiple .select2-search--inline { - float: right; } - -.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice { - margin-left: 5px; - margin-right: auto; } - -.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove { - margin-left: 2px; - margin-right: auto; } - -.select2-container--default.select2-container--focus .select2-selection--multiple { - border: solid black 1px; - outline: 0; } - -.select2-container--default.select2-container--disabled .select2-selection--multiple { - background-color: #eee; - cursor: default; } - -.select2-container--default.select2-container--disabled .select2-selection__choice__remove { - display: none; } - -.select2-container--default.select2-container--open.select2-container--above .select2-selection--single, .select2-container--default.select2-container--open.select2-container--above .select2-selection--multiple { - border-top-left-radius: 0; - border-top-right-radius: 0; } - -.select2-container--default.select2-container--open.select2-container--below .select2-selection--single, .select2-container--default.select2-container--open.select2-container--below .select2-selection--multiple { - border-bottom-left-radius: 0; - border-bottom-right-radius: 0; } - -.select2-container--default .select2-search--dropdown .select2-search__field { - border: 1px solid #aaa; } - -.select2-container--default .select2-search--inline .select2-search__field { - background: transparent; - border: none; - outline: 0; - box-shadow: none; - -webkit-appearance: textfield; } - -.select2-container--default .select2-results > .select2-results__options { - max-height: 200px; - overflow-y: auto; } - -.select2-container--default .select2-results__option[role=group] { - padding: 0; } - -.select2-container--default .select2-results__option[aria-disabled=true] { - color: #999; } - -.select2-container--default .select2-results__option[aria-selected=true] { - background-color: #ddd; } - -.select2-container--default .select2-results__option .select2-results__option { - padding-left: 1em; } - .select2-container--default .select2-results__option .select2-results__option .select2-results__group { - padding-left: 0; } - .select2-container--default .select2-results__option .select2-results__option .select2-results__option { - margin-left: -1em; - padding-left: 2em; } - .select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option { - margin-left: -2em; - padding-left: 3em; } - .select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option { - margin-left: -3em; - padding-left: 4em; } - .select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option { - margin-left: -4em; - padding-left: 5em; } - .select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option { - margin-left: -5em; - padding-left: 6em; } - -.select2-container--default .select2-results__option--highlighted[aria-selected] { - background-color: #5897fb; - color: white; } - -.select2-container--default .select2-results__group { - cursor: default; - display: block; - padding: 6px; } - -.select2-container--classic .select2-selection--single { - background-color: #f7f7f7; - border: 1px solid #aaa; - border-radius: 4px; - outline: 0; - background-image: -webkit-linear-gradient(top, white 50%, #eeeeee 100%); - background-image: -o-linear-gradient(top, white 50%, #eeeeee 100%); - background-image: linear-gradient(to bottom, white 50%, #eeeeee 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0); } - .select2-container--classic .select2-selection--single:focus { - border: 1px solid #5897fb; } - .select2-container--classic .select2-selection--single .select2-selection__rendered { - color: #444; - line-height: 28px; } - .select2-container--classic .select2-selection--single .select2-selection__clear { - cursor: pointer; - float: right; - font-weight: bold; - margin-right: 10px; } - .select2-container--classic .select2-selection--single .select2-selection__placeholder { - color: #999; } - .select2-container--classic .select2-selection--single .select2-selection__arrow { - background-color: #ddd; - border: none; - border-left: 1px solid #aaa; - border-top-right-radius: 4px; - border-bottom-right-radius: 4px; - height: 26px; - position: absolute; - top: 1px; - right: 1px; - width: 20px; - background-image: -webkit-linear-gradient(top, #eeeeee 50%, #cccccc 100%); - background-image: -o-linear-gradient(top, #eeeeee 50%, #cccccc 100%); - background-image: linear-gradient(to bottom, #eeeeee 50%, #cccccc 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFCCCCCC', GradientType=0); } - .select2-container--classic .select2-selection--single .select2-selection__arrow b { - border-color: #888 transparent transparent transparent; - border-style: solid; - border-width: 5px 4px 0 4px; - height: 0; - left: 50%; - margin-left: -4px; - margin-top: -2px; - position: absolute; - top: 50%; - width: 0; } - -.select2-container--classic[dir="rtl"] .select2-selection--single .select2-selection__clear { - float: left; } - -.select2-container--classic[dir="rtl"] .select2-selection--single .select2-selection__arrow { - border: none; - border-right: 1px solid #aaa; - border-radius: 0; - border-top-left-radius: 4px; - border-bottom-left-radius: 4px; - left: 1px; - right: auto; } - -.select2-container--classic.select2-container--open .select2-selection--single { - border: 1px solid #5897fb; } - .select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow { - background: transparent; - border: none; } - .select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow b { - border-color: transparent transparent #888 transparent; - border-width: 0 4px 5px 4px; } - -.select2-container--classic.select2-container--open.select2-container--above .select2-selection--single { - border-top: none; - border-top-left-radius: 0; - border-top-right-radius: 0; - background-image: -webkit-linear-gradient(top, white 0%, #eeeeee 50%); - background-image: -o-linear-gradient(top, white 0%, #eeeeee 50%); - background-image: linear-gradient(to bottom, white 0%, #eeeeee 50%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0); } - -.select2-container--classic.select2-container--open.select2-container--below .select2-selection--single { - border-bottom: none; - border-bottom-left-radius: 0; - border-bottom-right-radius: 0; - background-image: -webkit-linear-gradient(top, #eeeeee 50%, white 100%); - background-image: -o-linear-gradient(top, #eeeeee 50%, white 100%); - background-image: linear-gradient(to bottom, #eeeeee 50%, white 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFFFFFFF', GradientType=0); } - -.select2-container--classic .select2-selection--multiple { - background-color: white; - border: 1px solid #aaa; - border-radius: 4px; - cursor: text; - outline: 0; } - .select2-container--classic .select2-selection--multiple:focus { - border: 1px solid #5897fb; } - .select2-container--classic .select2-selection--multiple .select2-selection__rendered { - list-style: none; - margin: 0; - padding: 0 5px; } - .select2-container--classic .select2-selection--multiple .select2-selection__clear { - display: none; } - .select2-container--classic .select2-selection--multiple .select2-selection__choice { - background-color: #e4e4e4; - border: 1px solid #aaa; - border-radius: 4px; - cursor: default; - float: left; - margin-right: 5px; - margin-top: 5px; - padding: 0 5px; } - .select2-container--classic .select2-selection--multiple .select2-selection__choice__remove { - color: #888; - cursor: pointer; - display: inline-block; - font-weight: bold; - margin-right: 2px; } - .select2-container--classic .select2-selection--multiple .select2-selection__choice__remove:hover { - color: #555; } - -.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice { - float: right; - margin-left: 5px; - margin-right: auto; } - -.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove { - margin-left: 2px; - margin-right: auto; } - -.select2-container--classic.select2-container--open .select2-selection--multiple { - border: 1px solid #5897fb; } - -.select2-container--classic.select2-container--open.select2-container--above .select2-selection--multiple { - border-top: none; - border-top-left-radius: 0; - border-top-right-radius: 0; } - -.select2-container--classic.select2-container--open.select2-container--below .select2-selection--multiple { - border-bottom: none; - border-bottom-left-radius: 0; - border-bottom-right-radius: 0; } - -.select2-container--classic .select2-search--dropdown .select2-search__field { - border: 1px solid #aaa; - outline: 0; } - -.select2-container--classic .select2-search--inline .select2-search__field { - outline: 0; - box-shadow: none; } - -.select2-container--classic .select2-dropdown { - background-color: white; - border: 1px solid transparent; } - -.select2-container--classic .select2-dropdown--above { - border-bottom: none; } - -.select2-container--classic .select2-dropdown--below { - border-top: none; } - -.select2-container--classic .select2-results > .select2-results__options { - max-height: 200px; - overflow-y: auto; } - -.select2-container--classic .select2-results__option[role=group] { - padding: 0; } - -.select2-container--classic .select2-results__option[aria-disabled=true] { - color: grey; } - -.select2-container--classic .select2-results__option--highlighted[aria-selected] { - background-color: #3875d7; - color: white; } - -.select2-container--classic .select2-results__group { - cursor: default; - display: block; - padding: 6px; } - -.select2-container--classic.select2-container--open .select2-dropdown { - border-color: #5897fb; } diff --git a/smartsoltech/staticfiles/admin/css/vendor/select2/select2.min.css b/smartsoltech/staticfiles/admin/css/vendor/select2/select2.min.css deleted file mode 100644 index 7c18ad5..0000000 --- a/smartsoltech/staticfiles/admin/css/vendor/select2/select2.min.css +++ /dev/null @@ -1 +0,0 @@ -.select2-container{box-sizing:border-box;display:inline-block;margin:0;position:relative;vertical-align:middle}.select2-container .select2-selection--single{box-sizing:border-box;cursor:pointer;display:block;height:28px;user-select:none;-webkit-user-select:none}.select2-container .select2-selection--single .select2-selection__rendered{display:block;padding-left:8px;padding-right:20px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.select2-container .select2-selection--single .select2-selection__clear{position:relative}.select2-container[dir="rtl"] .select2-selection--single .select2-selection__rendered{padding-right:8px;padding-left:20px}.select2-container .select2-selection--multiple{box-sizing:border-box;cursor:pointer;display:block;min-height:32px;user-select:none;-webkit-user-select:none}.select2-container .select2-selection--multiple .select2-selection__rendered{display:inline-block;overflow:hidden;padding-left:8px;text-overflow:ellipsis;white-space:nowrap}.select2-container .select2-search--inline{float:left}.select2-container .select2-search--inline .select2-search__field{box-sizing:border-box;border:none;font-size:100%;margin-top:5px;padding:0}.select2-container .select2-search--inline .select2-search__field::-webkit-search-cancel-button{-webkit-appearance:none}.select2-dropdown{background-color:white;border:1px solid #aaa;border-radius:4px;box-sizing:border-box;display:block;position:absolute;left:-100000px;width:100%;z-index:1051}.select2-results{display:block}.select2-results__options{list-style:none;margin:0;padding:0}.select2-results__option{padding:6px;user-select:none;-webkit-user-select:none}.select2-results__option[aria-selected]{cursor:pointer}.select2-container--open .select2-dropdown{left:0}.select2-container--open .select2-dropdown--above{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--open .select2-dropdown--below{border-top:none;border-top-left-radius:0;border-top-right-radius:0}.select2-search--dropdown{display:block;padding:4px}.select2-search--dropdown .select2-search__field{padding:4px;width:100%;box-sizing:border-box}.select2-search--dropdown .select2-search__field::-webkit-search-cancel-button{-webkit-appearance:none}.select2-search--dropdown.select2-search--hide{display:none}.select2-close-mask{border:0;margin:0;padding:0;display:block;position:fixed;left:0;top:0;min-height:100%;min-width:100%;height:auto;width:auto;opacity:0;z-index:99;background-color:#fff;filter:alpha(opacity=0)}.select2-hidden-accessible{border:0 !important;clip:rect(0 0 0 0) !important;-webkit-clip-path:inset(50%) !important;clip-path:inset(50%) !important;height:1px !important;overflow:hidden !important;padding:0 !important;position:absolute !important;width:1px !important;white-space:nowrap !important}.select2-container--default .select2-selection--single{background-color:#fff;border:1px solid #aaa;border-radius:4px}.select2-container--default .select2-selection--single .select2-selection__rendered{color:#444;line-height:28px}.select2-container--default .select2-selection--single .select2-selection__clear{cursor:pointer;float:right;font-weight:bold}.select2-container--default .select2-selection--single .select2-selection__placeholder{color:#999}.select2-container--default .select2-selection--single .select2-selection__arrow{height:26px;position:absolute;top:1px;right:1px;width:20px}.select2-container--default .select2-selection--single .select2-selection__arrow b{border-color:#888 transparent transparent transparent;border-style:solid;border-width:5px 4px 0 4px;height:0;left:50%;margin-left:-4px;margin-top:-2px;position:absolute;top:50%;width:0}.select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__clear{float:left}.select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__arrow{left:1px;right:auto}.select2-container--default.select2-container--disabled .select2-selection--single{background-color:#eee;cursor:default}.select2-container--default.select2-container--disabled .select2-selection--single .select2-selection__clear{display:none}.select2-container--default.select2-container--open .select2-selection--single .select2-selection__arrow b{border-color:transparent transparent #888 transparent;border-width:0 4px 5px 4px}.select2-container--default .select2-selection--multiple{background-color:white;border:1px solid #aaa;border-radius:4px;cursor:text}.select2-container--default .select2-selection--multiple .select2-selection__rendered{box-sizing:border-box;list-style:none;margin:0;padding:0 5px;width:100%}.select2-container--default .select2-selection--multiple .select2-selection__rendered li{list-style:none}.select2-container--default .select2-selection--multiple .select2-selection__clear{cursor:pointer;float:right;font-weight:bold;margin-top:5px;margin-right:10px;padding:1px}.select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#e4e4e4;border:1px solid #aaa;border-radius:4px;cursor:default;float:left;margin-right:5px;margin-top:5px;padding:0 5px}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:#999;cursor:pointer;display:inline-block;font-weight:bold;margin-right:2px}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#333}.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice,.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-search--inline{float:right}.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice{margin-left:5px;margin-right:auto}.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove{margin-left:2px;margin-right:auto}.select2-container--default.select2-container--focus .select2-selection--multiple{border:solid black 1px;outline:0}.select2-container--default.select2-container--disabled .select2-selection--multiple{background-color:#eee;cursor:default}.select2-container--default.select2-container--disabled .select2-selection__choice__remove{display:none}.select2-container--default.select2-container--open.select2-container--above .select2-selection--single,.select2-container--default.select2-container--open.select2-container--above .select2-selection--multiple{border-top-left-radius:0;border-top-right-radius:0}.select2-container--default.select2-container--open.select2-container--below .select2-selection--single,.select2-container--default.select2-container--open.select2-container--below .select2-selection--multiple{border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--default .select2-search--dropdown .select2-search__field{border:1px solid #aaa}.select2-container--default .select2-search--inline .select2-search__field{background:transparent;border:none;outline:0;box-shadow:none;-webkit-appearance:textfield}.select2-container--default .select2-results>.select2-results__options{max-height:200px;overflow-y:auto}.select2-container--default .select2-results__option[role=group]{padding:0}.select2-container--default .select2-results__option[aria-disabled=true]{color:#999}.select2-container--default .select2-results__option[aria-selected=true]{background-color:#ddd}.select2-container--default .select2-results__option .select2-results__option{padding-left:1em}.select2-container--default .select2-results__option .select2-results__option .select2-results__group{padding-left:0}.select2-container--default .select2-results__option .select2-results__option .select2-results__option{margin-left:-1em;padding-left:2em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-2em;padding-left:3em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-3em;padding-left:4em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-4em;padding-left:5em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-5em;padding-left:6em}.select2-container--default .select2-results__option--highlighted[aria-selected]{background-color:#5897fb;color:white}.select2-container--default .select2-results__group{cursor:default;display:block;padding:6px}.select2-container--classic .select2-selection--single{background-color:#f7f7f7;border:1px solid #aaa;border-radius:4px;outline:0;background-image:-webkit-linear-gradient(top, #fff 50%, #eee 100%);background-image:-o-linear-gradient(top, #fff 50%, #eee 100%);background-image:linear-gradient(to bottom, #fff 50%, #eee 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0)}.select2-container--classic .select2-selection--single:focus{border:1px solid #5897fb}.select2-container--classic .select2-selection--single .select2-selection__rendered{color:#444;line-height:28px}.select2-container--classic .select2-selection--single .select2-selection__clear{cursor:pointer;float:right;font-weight:bold;margin-right:10px}.select2-container--classic .select2-selection--single .select2-selection__placeholder{color:#999}.select2-container--classic .select2-selection--single .select2-selection__arrow{background-color:#ddd;border:none;border-left:1px solid #aaa;border-top-right-radius:4px;border-bottom-right-radius:4px;height:26px;position:absolute;top:1px;right:1px;width:20px;background-image:-webkit-linear-gradient(top, #eee 50%, #ccc 100%);background-image:-o-linear-gradient(top, #eee 50%, #ccc 100%);background-image:linear-gradient(to bottom, #eee 50%, #ccc 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFCCCCCC', GradientType=0)}.select2-container--classic .select2-selection--single .select2-selection__arrow b{border-color:#888 transparent transparent transparent;border-style:solid;border-width:5px 4px 0 4px;height:0;left:50%;margin-left:-4px;margin-top:-2px;position:absolute;top:50%;width:0}.select2-container--classic[dir="rtl"] .select2-selection--single .select2-selection__clear{float:left}.select2-container--classic[dir="rtl"] .select2-selection--single .select2-selection__arrow{border:none;border-right:1px solid #aaa;border-radius:0;border-top-left-radius:4px;border-bottom-left-radius:4px;left:1px;right:auto}.select2-container--classic.select2-container--open .select2-selection--single{border:1px solid #5897fb}.select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow{background:transparent;border:none}.select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow b{border-color:transparent transparent #888 transparent;border-width:0 4px 5px 4px}.select2-container--classic.select2-container--open.select2-container--above .select2-selection--single{border-top:none;border-top-left-radius:0;border-top-right-radius:0;background-image:-webkit-linear-gradient(top, #fff 0%, #eee 50%);background-image:-o-linear-gradient(top, #fff 0%, #eee 50%);background-image:linear-gradient(to bottom, #fff 0%, #eee 50%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0)}.select2-container--classic.select2-container--open.select2-container--below .select2-selection--single{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0;background-image:-webkit-linear-gradient(top, #eee 50%, #fff 100%);background-image:-o-linear-gradient(top, #eee 50%, #fff 100%);background-image:linear-gradient(to bottom, #eee 50%, #fff 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFFFFFFF', GradientType=0)}.select2-container--classic .select2-selection--multiple{background-color:white;border:1px solid #aaa;border-radius:4px;cursor:text;outline:0}.select2-container--classic .select2-selection--multiple:focus{border:1px solid #5897fb}.select2-container--classic .select2-selection--multiple .select2-selection__rendered{list-style:none;margin:0;padding:0 5px}.select2-container--classic .select2-selection--multiple .select2-selection__clear{display:none}.select2-container--classic .select2-selection--multiple .select2-selection__choice{background-color:#e4e4e4;border:1px solid #aaa;border-radius:4px;cursor:default;float:left;margin-right:5px;margin-top:5px;padding:0 5px}.select2-container--classic .select2-selection--multiple .select2-selection__choice__remove{color:#888;cursor:pointer;display:inline-block;font-weight:bold;margin-right:2px}.select2-container--classic .select2-selection--multiple .select2-selection__choice__remove:hover{color:#555}.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice{float:right;margin-left:5px;margin-right:auto}.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove{margin-left:2px;margin-right:auto}.select2-container--classic.select2-container--open .select2-selection--multiple{border:1px solid #5897fb}.select2-container--classic.select2-container--open.select2-container--above .select2-selection--multiple{border-top:none;border-top-left-radius:0;border-top-right-radius:0}.select2-container--classic.select2-container--open.select2-container--below .select2-selection--multiple{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--classic .select2-search--dropdown .select2-search__field{border:1px solid #aaa;outline:0}.select2-container--classic .select2-search--inline .select2-search__field{outline:0;box-shadow:none}.select2-container--classic .select2-dropdown{background-color:#fff;border:1px solid transparent}.select2-container--classic .select2-dropdown--above{border-bottom:none}.select2-container--classic .select2-dropdown--below{border-top:none}.select2-container--classic .select2-results>.select2-results__options{max-height:200px;overflow-y:auto}.select2-container--classic .select2-results__option[role=group]{padding:0}.select2-container--classic .select2-results__option[aria-disabled=true]{color:grey}.select2-container--classic .select2-results__option--highlighted[aria-selected]{background-color:#3875d7;color:#fff}.select2-container--classic .select2-results__group{cursor:default;display:block;padding:6px}.select2-container--classic.select2-container--open .select2-dropdown{border-color:#5897fb} diff --git a/smartsoltech/staticfiles/admin/css/widgets.css b/smartsoltech/staticfiles/admin/css/widgets.css deleted file mode 100644 index cc64811..0000000 --- a/smartsoltech/staticfiles/admin/css/widgets.css +++ /dev/null @@ -1,593 +0,0 @@ -/* SELECTOR (FILTER INTERFACE) */ - -.selector { - display: flex; - flex-grow: 1; - gap: 0 10px; -} - -.selector select { - height: 17.2em; - flex: 1 0 auto; - overflow: scroll; - width: 100%; -} - -.selector-available, .selector-chosen { - text-align: center; - display: flex; - flex-direction: column; - flex: 1 1; -} - -.selector-available h2, .selector-chosen h2 { - border: 1px solid var(--border-color); - border-radius: 4px 4px 0 0; -} - -.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 h2 { - background: var(--secondary); - color: var(--header-link-color); -} - -.selector .selector-available h2 { - background: var(--darkened-bg); - color: var(--body-quiet-color); -} - -.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; -} - -.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 .selector-available input, -.selector .selector-chosen input { - margin-left: 8px; -} - -.selector ul.selector-chooser { - align-self: center; - width: 22px; - 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: 16px; - height: 16px; - display: block; - text-indent: -3000px; - overflow: hidden; - cursor: default; - opacity: 0.55; -} - -.active.selector-add, .active.selector-remove { - opacity: 1; -} - -.active.selector-add:hover, .active.selector-remove:hover { - cursor: pointer; -} - -.selector-add { - background: url(../img/selector-icons.svg) 0 -96px no-repeat; -} - -.active.selector-add:focus, .active.selector-add:hover { - background-position: 0 -112px; -} - -.selector-remove { - background: url(../img/selector-icons.svg) 0 -64px no-repeat; -} - -.active.selector-remove:focus, .active.selector-remove:hover { - background-position: 0 -80px; -} - -a.selector-chooseall, a.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; -} - -a.active.selector-chooseall:focus, a.active.selector-clearall:focus, -a.active.selector-chooseall:hover, a.active.selector-clearall:hover { - color: var(--link-fg); -} - -a.active.selector-chooseall, a.active.selector-clearall { - opacity: 1; -} - -a.active.selector-chooseall:hover, a.active.selector-clearall:hover { - cursor: pointer; -} - -a.selector-chooseall { - padding: 0 18px 0 0; - background: url(../img/selector-icons.svg) right -160px no-repeat; - cursor: default; -} - -a.active.selector-chooseall:focus, a.active.selector-chooseall:hover { - background-position: 100% -176px; -} - -a.selector-clearall { - padding: 0 0 0 18px; - background: url(../img/selector-icons.svg) 0 -128px no-repeat; - cursor: default; -} - -a.active.selector-clearall:focus, a.active.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 { - height: 22px; - width: 50px; - 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 -32px no-repeat; - cursor: default; -} - -.stacked .active.selector-add { - background-position: 0 -32px; - cursor: pointer; -} - -.stacked .active.selector-add:focus, .stacked .active.selector-add:hover { - background-position: 0 -48px; - cursor: pointer; -} - -.stacked .selector-remove { - background: url(../img/selector-icons.svg) 0 0 no-repeat; - cursor: default; -} - -.stacked .active.selector-remove { - background-position: 0 0px; - cursor: pointer; -} - -.stacked .active.selector-remove:focus, .stacked .active.selector-remove:hover { - background-position: 0 -16px; - 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: 16px; - width: 16px; - overflow: hidden; -} - -.datetimeshortcuts .clock-icon { - background: url(../img/icon-clock.svg) 0 0 no-repeat; -} - -.datetimeshortcuts a:focus .clock-icon, -.datetimeshortcuts a:hover .clock-icon { - background-position: 0 -16px; -} - -.datetimeshortcuts .date-icon { - background: url(../img/icon-calendar.svg) 0 0 no-repeat; - top: -1px; -} - -.datetimeshortcuts a:focus .date-icon, -.datetimeshortcuts a:hover .date-icon { - background-position: 0 -16px; -} - -.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: 16px; - height: 16px; - border: 0px none; -} - -.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/smartsoltech/staticfiles/admin/img/LICENSE b/smartsoltech/staticfiles/admin/img/LICENSE deleted file mode 100644 index a4faaa1..0000000 --- a/smartsoltech/staticfiles/admin/img/LICENSE +++ /dev/null @@ -1,20 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2014 Code Charm Ltd - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/smartsoltech/staticfiles/admin/img/README.txt b/smartsoltech/staticfiles/admin/img/README.txt deleted file mode 100644 index bf81f35..0000000 --- a/smartsoltech/staticfiles/admin/img/README.txt +++ /dev/null @@ -1,7 +0,0 @@ -All icons are taken from Font Awesome (https://fontawesome.com/) project. -The Font Awesome font is licensed under the SIL OFL 1.1: -- https://scripts.sil.org/OFL - -SVG icons source: https://github.com/encharm/Font-Awesome-SVG-PNG -Font-Awesome-SVG-PNG is licensed under the MIT license (see file license -in current folder). diff --git a/smartsoltech/staticfiles/admin/img/calendar-icons.svg b/smartsoltech/staticfiles/admin/img/calendar-icons.svg deleted file mode 100644 index 04c0274..0000000 --- a/smartsoltech/staticfiles/admin/img/calendar-icons.svg +++ /dev/null @@ -1,63 +0,0 @@ - - - - - - - - - - - - - - diff --git a/smartsoltech/staticfiles/admin/img/gis/move_vertex_off.svg b/smartsoltech/staticfiles/admin/img/gis/move_vertex_off.svg deleted file mode 100644 index 228854f..0000000 --- a/smartsoltech/staticfiles/admin/img/gis/move_vertex_off.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/smartsoltech/staticfiles/admin/img/gis/move_vertex_on.svg b/smartsoltech/staticfiles/admin/img/gis/move_vertex_on.svg deleted file mode 100644 index 96b87fd..0000000 --- a/smartsoltech/staticfiles/admin/img/gis/move_vertex_on.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/smartsoltech/staticfiles/admin/img/icon-addlink.svg b/smartsoltech/staticfiles/admin/img/icon-addlink.svg deleted file mode 100644 index 8d5c6a3..0000000 --- a/smartsoltech/staticfiles/admin/img/icon-addlink.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/smartsoltech/staticfiles/admin/img/icon-alert.svg b/smartsoltech/staticfiles/admin/img/icon-alert.svg deleted file mode 100644 index e51ea83..0000000 --- a/smartsoltech/staticfiles/admin/img/icon-alert.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/smartsoltech/staticfiles/admin/img/icon-calendar.svg b/smartsoltech/staticfiles/admin/img/icon-calendar.svg deleted file mode 100644 index 97910a9..0000000 --- a/smartsoltech/staticfiles/admin/img/icon-calendar.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/smartsoltech/staticfiles/admin/img/icon-changelink.svg b/smartsoltech/staticfiles/admin/img/icon-changelink.svg deleted file mode 100644 index 592b093..0000000 --- a/smartsoltech/staticfiles/admin/img/icon-changelink.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/smartsoltech/staticfiles/admin/img/icon-clock.svg b/smartsoltech/staticfiles/admin/img/icon-clock.svg deleted file mode 100644 index bf9985d..0000000 --- a/smartsoltech/staticfiles/admin/img/icon-clock.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/smartsoltech/staticfiles/admin/img/icon-deletelink.svg b/smartsoltech/staticfiles/admin/img/icon-deletelink.svg deleted file mode 100644 index 4059b15..0000000 --- a/smartsoltech/staticfiles/admin/img/icon-deletelink.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/smartsoltech/staticfiles/admin/img/icon-hidelink.svg b/smartsoltech/staticfiles/admin/img/icon-hidelink.svg deleted file mode 100644 index 2a8b404..0000000 --- a/smartsoltech/staticfiles/admin/img/icon-hidelink.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/smartsoltech/staticfiles/admin/img/icon-no.svg b/smartsoltech/staticfiles/admin/img/icon-no.svg deleted file mode 100644 index 2e0d383..0000000 --- a/smartsoltech/staticfiles/admin/img/icon-no.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/smartsoltech/staticfiles/admin/img/icon-unknown-alt.svg b/smartsoltech/staticfiles/admin/img/icon-unknown-alt.svg deleted file mode 100644 index 1c6b99f..0000000 --- a/smartsoltech/staticfiles/admin/img/icon-unknown-alt.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/smartsoltech/staticfiles/admin/img/icon-unknown.svg b/smartsoltech/staticfiles/admin/img/icon-unknown.svg deleted file mode 100644 index 50b4f97..0000000 --- a/smartsoltech/staticfiles/admin/img/icon-unknown.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/smartsoltech/staticfiles/admin/img/icon-viewlink.svg b/smartsoltech/staticfiles/admin/img/icon-viewlink.svg deleted file mode 100644 index a1ca1d3..0000000 --- a/smartsoltech/staticfiles/admin/img/icon-viewlink.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/smartsoltech/staticfiles/admin/img/icon-yes.svg b/smartsoltech/staticfiles/admin/img/icon-yes.svg deleted file mode 100644 index 5883d87..0000000 --- a/smartsoltech/staticfiles/admin/img/icon-yes.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/smartsoltech/staticfiles/admin/img/inline-delete.svg b/smartsoltech/staticfiles/admin/img/inline-delete.svg deleted file mode 100644 index 17d1ad6..0000000 --- a/smartsoltech/staticfiles/admin/img/inline-delete.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/smartsoltech/staticfiles/admin/img/search.svg b/smartsoltech/staticfiles/admin/img/search.svg deleted file mode 100644 index c8c69b2..0000000 --- a/smartsoltech/staticfiles/admin/img/search.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/smartsoltech/staticfiles/admin/img/selector-icons.svg b/smartsoltech/staticfiles/admin/img/selector-icons.svg deleted file mode 100644 index 926b8e2..0000000 --- a/smartsoltech/staticfiles/admin/img/selector-icons.svg +++ /dev/null @@ -1,34 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/smartsoltech/staticfiles/admin/img/sorting-icons.svg b/smartsoltech/staticfiles/admin/img/sorting-icons.svg deleted file mode 100644 index 7c31ec9..0000000 --- a/smartsoltech/staticfiles/admin/img/sorting-icons.svg +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - - - - - - - - - - - diff --git a/smartsoltech/staticfiles/admin/img/tooltag-add.svg b/smartsoltech/staticfiles/admin/img/tooltag-add.svg deleted file mode 100644 index 1ca64ae..0000000 --- a/smartsoltech/staticfiles/admin/img/tooltag-add.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/smartsoltech/staticfiles/admin/img/tooltag-arrowright.svg b/smartsoltech/staticfiles/admin/img/tooltag-arrowright.svg deleted file mode 100644 index b664d61..0000000 --- a/smartsoltech/staticfiles/admin/img/tooltag-arrowright.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/smartsoltech/staticfiles/admin/js/SelectBox.js b/smartsoltech/staticfiles/admin/js/SelectBox.js deleted file mode 100644 index 3db4ec7..0000000 --- a/smartsoltech/staticfiles/admin/js/SelectBox.js +++ /dev/null @@ -1,116 +0,0 @@ -'use strict'; -{ - const SelectBox = { - cache: {}, - init: function(id) { - const box = document.getElementById(id); - SelectBox.cache[id] = []; - const cache = SelectBox.cache[id]; - for (const node of box.options) { - cache.push({value: node.value, text: node.text, displayed: 1}); - } - }, - redisplay: function(id) { - // Repopulate HTML select box from cache - const box = document.getElementById(id); - const scroll_value_from_top = box.scrollTop; - box.innerHTML = ''; - for (const node of SelectBox.cache[id]) { - if (node.displayed) { - const new_option = new Option(node.text, node.value, false, false); - // Shows a tooltip when hovering over the option - new_option.title = node.text; - box.appendChild(new_option); - } - } - box.scrollTop = scroll_value_from_top; - }, - filter: function(id, text) { - // Redisplay the HTML select box, displaying only the choices containing ALL - // the words in text. (It's an AND search.) - const tokens = text.toLowerCase().split(/\s+/); - for (const node of SelectBox.cache[id]) { - node.displayed = 1; - const node_text = node.text.toLowerCase(); - for (const token of tokens) { - if (!node_text.includes(token)) { - node.displayed = 0; - break; // Once the first token isn't found we're done - } - } - } - SelectBox.redisplay(id); - }, - get_hidden_node_count(id) { - const cache = SelectBox.cache[id] || []; - return cache.filter(node => node.displayed === 0).length; - }, - delete_from_cache: function(id, value) { - let delete_index = null; - const cache = SelectBox.cache[id]; - for (const [i, node] of cache.entries()) { - if (node.value === value) { - delete_index = i; - break; - } - } - cache.splice(delete_index, 1); - }, - add_to_cache: function(id, option) { - SelectBox.cache[id].push({value: option.value, text: option.text, displayed: 1}); - }, - cache_contains: function(id, value) { - // Check if an item is contained in the cache - for (const node of SelectBox.cache[id]) { - if (node.value === value) { - return true; - } - } - return false; - }, - move: function(from, to) { - const from_box = document.getElementById(from); - for (const option of from_box.options) { - const option_value = option.value; - if (option.selected && SelectBox.cache_contains(from, option_value)) { - SelectBox.add_to_cache(to, {value: option_value, text: option.text, displayed: 1}); - SelectBox.delete_from_cache(from, option_value); - } - } - SelectBox.redisplay(from); - SelectBox.redisplay(to); - }, - move_all: function(from, to) { - const from_box = document.getElementById(from); - for (const option of from_box.options) { - const option_value = option.value; - if (SelectBox.cache_contains(from, option_value)) { - SelectBox.add_to_cache(to, {value: option_value, text: option.text, displayed: 1}); - SelectBox.delete_from_cache(from, option_value); - } - } - SelectBox.redisplay(from); - SelectBox.redisplay(to); - }, - sort: function(id) { - SelectBox.cache[id].sort(function(a, b) { - a = a.text.toLowerCase(); - b = b.text.toLowerCase(); - if (a > b) { - return 1; - } - if (a < b) { - return -1; - } - return 0; - } ); - }, - select_all: function(id) { - const box = document.getElementById(id); - for (const option of box.options) { - option.selected = true; - } - } - }; - window.SelectBox = SelectBox; -} diff --git a/smartsoltech/staticfiles/admin/js/SelectFilter2.js b/smartsoltech/staticfiles/admin/js/SelectFilter2.js deleted file mode 100644 index 6957412..0000000 --- a/smartsoltech/staticfiles/admin/js/SelectFilter2.js +++ /dev/null @@ -1,286 +0,0 @@ -/*global SelectBox, gettext, ngettext, interpolate, quickElement, SelectFilter*/ -/* -SelectFilter2 - Turns a multiple-select box into a filter interface. - -Requires core.js and SelectBox.js. -*/ -'use strict'; -{ - window.SelectFilter = { - init: function(field_id, field_name, is_stacked) { - if (field_id.match(/__prefix__/)) { - // Don't initialize on empty forms. - return; - } - const from_box = document.getElementById(field_id); - from_box.id += '_from'; // change its ID - from_box.className = 'filtered'; - - 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 title_available = quickElement('h2', selector_available, interpolate(gettext('Available %s') + ' ', [field_name])); - quickElement( - 'span', title_available, '', - 'class', 'help help-tooltip help-icon', - 'title', interpolate( - gettext( - 'This is the list of available %s. You may choose some by ' + - 'selecting them in the box below and then clicking the ' + - '"Choose" arrow between the two boxes.' - ), - [field_name] - ) - ); - - 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', - 'title', 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('a', selector_available, gettext('Choose all'), 'title', interpolate(gettext('Click to choose all %s at once.'), [field_name]), 'href', '#', 'id', field_id + '_add_all_link'); - choose_all.className = 'selector-chooseall'; - - //
    - const selector_chooser = quickElement('ul', selector_div); - selector_chooser.className = 'selector-chooser'; - const add_link = quickElement('a', quickElement('li', selector_chooser), gettext('Choose'), 'title', gettext('Choose'), 'href', '#', 'id', field_id + '_add_link'); - add_link.className = 'selector-add'; - const remove_link = quickElement('a', quickElement('li', selector_chooser), gettext('Remove'), 'title', gettext('Remove'), 'href', '#', 'id', field_id + '_remove_link'); - remove_link.className = 'selector-remove'; - - //
    - const selector_chosen = quickElement('div', selector_div, '', 'id', field_id + '_selector_chosen'); - selector_chosen.className = 'selector-chosen'; - const title_chosen = quickElement('h2', selector_chosen, interpolate(gettext('Chosen %s') + ' ', [field_name])); - quickElement( - 'span', title_chosen, '', - 'class', 'help help-tooltip help-icon', - 'title', interpolate( - gettext( - 'This is the list of chosen %s. You may remove some by ' + - 'selecting them in the box below and then clicking the ' + - '"Remove" arrow between the two boxes.' - ), - [field_name] - ) - ); - - 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', - 'title', 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'; - - const to_box = quickElement('select', selector_chosen, '', 'id', field_id + '_to', 'multiple', '', 'size', from_box.size, 'name', from_box.name); - to_box.className = '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, ' (click to clear)', 'class', 'list-footer-display__clear'); - - const clear_all = quickElement('a', selector_chosen, gettext('Remove all'), 'title', interpolate(gettext('Click to remove all chosen %s at once.'), [field_name]), 'href', '#', 'id', field_id + '_remove_all_link'); - clear_all.className = 'selector-clearall'; - - 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.classList.contains('active')) { - 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_link.addEventListener('click', function(e) { - move_selection(e, this, SelectBox.move, field_id + '_from', field_id + '_to'); - }); - remove_link.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'); - // Active if at least one item is selected - document.getElementById(field_id + '_add_link').classList.toggle('active', SelectFilter.any_selected(from)); - document.getElementById(field_id + '_remove_link').classList.toggle('active', SelectFilter.any_selected(to)); - // Active if the corresponding box isn't empty - document.getElementById(field_id + '_add_all_link').classList.toggle('active', from.querySelector('option')); - document.getElementById(field_id + '_remove_all_link').classList.toggle('active', to.querySelector('option')); - SelectFilter.refresh_filtered_warning(field_id); - }, - 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/smartsoltech/staticfiles/admin/js/actions.js b/smartsoltech/staticfiles/admin/js/actions.js deleted file mode 100644 index 04b25e9..0000000 --- a/smartsoltech/staticfiles/admin/js/actions.js +++ /dev/null @@ -1,204 +0,0 @@ -/*global gettext, interpolate, ngettext, Actions*/ -'use strict'; -{ - function show(selector) { - document.querySelectorAll(selector).forEach(function(el) { - el.classList.remove('hidden'); - }); - } - - function hide(selector) { - document.querySelectorAll(selector).forEach(function(el) { - el.classList.add('hidden'); - }); - } - - function showQuestion(options) { - hide(options.acrossClears); - show(options.acrossQuestions); - hide(options.allContainer); - } - - function showClear(options) { - show(options.acrossClears); - hide(options.acrossQuestions); - document.querySelector(options.actionContainer).classList.remove(options.selectedClass); - show(options.allContainer); - hide(options.counterContainer); - } - - function reset(options) { - hide(options.acrossClears); - hide(options.acrossQuestions); - hide(options.allContainer); - show(options.counterContainer); - } - - function clearAcross(options) { - reset(options); - const acrossInputs = document.querySelectorAll(options.acrossInput); - acrossInputs.forEach(function(acrossInput) { - acrossInput.value = 0; - }); - document.querySelector(options.actionContainer).classList.remove(options.selectedClass); - } - - function checker(actionCheckboxes, options, checked) { - if (checked) { - showQuestion(options); - } else { - reset(options); - } - actionCheckboxes.forEach(function(el) { - el.checked = checked; - el.closest('tr').classList.toggle(options.selectedClass, checked); - }); - } - - function updateCounter(actionCheckboxes, options) { - const sel = Array.from(actionCheckboxes).filter(function(el) { - return el.checked; - }).length; - const counter = document.querySelector(options.counterContainer); - // data-actions-icnt is defined in the generated HTML - // and contains the total amount of objects in the queryset - const actions_icnt = Number(counter.dataset.actionsIcnt); - counter.textContent = interpolate( - ngettext('%(sel)s of %(cnt)s selected', '%(sel)s of %(cnt)s selected', sel), { - sel: sel, - cnt: actions_icnt - }, true); - const allToggle = document.getElementById(options.allToggleId); - allToggle.checked = sel === actionCheckboxes.length; - if (allToggle.checked) { - showQuestion(options); - } else { - clearAcross(options); - } - } - - const defaults = { - actionContainer: "div.actions", - counterContainer: "span.action-counter", - allContainer: "div.actions span.all", - acrossInput: "div.actions input.select-across", - acrossQuestions: "div.actions span.question", - acrossClears: "div.actions span.clear", - allToggleId: "action-toggle", - selectedClass: "selected" - }; - - window.Actions = function(actionCheckboxes, options) { - options = Object.assign({}, defaults, options); - let list_editable_changed = false; - let lastChecked = null; - let shiftPressed = false; - - document.addEventListener('keydown', (event) => { - shiftPressed = event.shiftKey; - }); - - document.addEventListener('keyup', (event) => { - shiftPressed = event.shiftKey; - }); - - document.getElementById(options.allToggleId).addEventListener('click', function(event) { - checker(actionCheckboxes, options, this.checked); - updateCounter(actionCheckboxes, options); - }); - - document.querySelectorAll(options.acrossQuestions + " a").forEach(function(el) { - el.addEventListener('click', function(event) { - event.preventDefault(); - const acrossInputs = document.querySelectorAll(options.acrossInput); - acrossInputs.forEach(function(acrossInput) { - acrossInput.value = 1; - }); - showClear(options); - }); - }); - - document.querySelectorAll(options.acrossClears + " a").forEach(function(el) { - el.addEventListener('click', function(event) { - event.preventDefault(); - document.getElementById(options.allToggleId).checked = false; - clearAcross(options); - checker(actionCheckboxes, options, false); - updateCounter(actionCheckboxes, options); - }); - }); - - function affectedCheckboxes(target, withModifier) { - const multiSelect = (lastChecked && withModifier && lastChecked !== target); - if (!multiSelect) { - return [target]; - } - const checkboxes = Array.from(actionCheckboxes); - const targetIndex = checkboxes.findIndex(el => el === target); - const lastCheckedIndex = checkboxes.findIndex(el => el === lastChecked); - const startIndex = Math.min(targetIndex, lastCheckedIndex); - const endIndex = Math.max(targetIndex, lastCheckedIndex); - const filtered = checkboxes.filter((el, index) => (startIndex <= index) && (index <= endIndex)); - return filtered; - }; - - Array.from(document.getElementById('result_list').tBodies).forEach(function(el) { - el.addEventListener('change', function(event) { - const target = event.target; - if (target.classList.contains('action-select')) { - const checkboxes = affectedCheckboxes(target, shiftPressed); - checker(checkboxes, options, target.checked); - updateCounter(actionCheckboxes, options); - lastChecked = target; - } else { - list_editable_changed = true; - } - }); - }); - - document.querySelector('#changelist-form button[name=index]').addEventListener('click', function(event) { - if (list_editable_changed) { - const confirmed = confirm(gettext("You have unsaved changes on individual editable fields. If you run an action, your unsaved changes will be lost.")); - if (!confirmed) { - event.preventDefault(); - } - } - }); - - const el = document.querySelector('#changelist-form input[name=_save]'); - // The button does not exist if no fields are editable. - if (el) { - el.addEventListener('click', function(event) { - if (document.querySelector('[name=action]').value) { - const text = list_editable_changed - ? gettext("You have selected an action, but you haven’t saved your changes to individual fields yet. Please click OK to save. You’ll need to re-run the action.") - : gettext("You have selected an action, and you haven’t made any changes on individual fields. You’re probably looking for the Go button rather than the Save button."); - if (!confirm(text)) { - event.preventDefault(); - } - } - }); - } - // Sync counter when navigating to the page, such as through the back - // button. - window.addEventListener('pageshow', (event) => updateCounter(actionCheckboxes, options)); - }; - - // Call function fn when the DOM is loaded and ready. If it is already - // loaded, call the function now. - // http://youmightnotneedjquery.com/#ready - function ready(fn) { - if (document.readyState !== 'loading') { - fn(); - } else { - document.addEventListener('DOMContentLoaded', fn); - } - } - - ready(function() { - const actionsEls = document.querySelectorAll('tr input.action-select'); - if (actionsEls.length > 0) { - Actions(actionsEls); - } - }); -} diff --git a/smartsoltech/staticfiles/admin/js/admin/DateTimeShortcuts.js b/smartsoltech/staticfiles/admin/js/admin/DateTimeShortcuts.js deleted file mode 100644 index aa1cae9..0000000 --- a/smartsoltech/staticfiles/admin/js/admin/DateTimeShortcuts.js +++ /dev/null @@ -1,408 +0,0 @@ -/*global Calendar, findPosX, findPosY, get_format, gettext, gettext_noop, interpolate, ngettext, quickElement*/ -// Inserts shortcut buttons after all of the following: -// -// -'use strict'; -{ - const DateTimeShortcuts = { - calendars: [], - calendarInputs: [], - clockInputs: [], - clockHours: { - default_: [ - [gettext_noop('Now'), -1], - [gettext_noop('Midnight'), 0], - [gettext_noop('6 a.m.'), 6], - [gettext_noop('Noon'), 12], - [gettext_noop('6 p.m.'), 18] - ] - }, - dismissClockFunc: [], - dismissCalendarFunc: [], - calendarDivName1: 'calendarbox', // name of calendar
    that gets toggled - calendarDivName2: 'calendarin', // name of
    that contains calendar - calendarLinkName: 'calendarlink', // name of the link that is used to toggle - clockDivName: 'clockbox', // name of clock
    that gets toggled - clockLinkName: 'clocklink', // name of the link that is used to toggle - shortCutsClass: 'datetimeshortcuts', // class of the clock and cal shortcuts - timezoneWarningClass: 'timezonewarning', // class of the warning for timezone mismatch - timezoneOffset: 0, - init: function() { - const serverOffset = document.body.dataset.adminUtcOffset; - if (serverOffset) { - const localOffset = new Date().getTimezoneOffset() * -60; - DateTimeShortcuts.timezoneOffset = localOffset - serverOffset; - } - - for (const inp of document.getElementsByTagName('input')) { - if (inp.type === 'text' && inp.classList.contains('vTimeField')) { - DateTimeShortcuts.addClock(inp); - DateTimeShortcuts.addTimezoneWarning(inp); - } - else if (inp.type === 'text' && inp.classList.contains('vDateField')) { - DateTimeShortcuts.addCalendar(inp); - DateTimeShortcuts.addTimezoneWarning(inp); - } - } - }, - // Return the current time while accounting for the server timezone. - now: function() { - const serverOffset = document.body.dataset.adminUtcOffset; - if (serverOffset) { - const localNow = new Date(); - const localOffset = localNow.getTimezoneOffset() * -60; - localNow.setTime(localNow.getTime() + 1000 * (serverOffset - localOffset)); - return localNow; - } else { - return new Date(); - } - }, - // Add a warning when the time zone in the browser and backend do not match. - addTimezoneWarning: function(inp) { - const warningClass = DateTimeShortcuts.timezoneWarningClass; - let timezoneOffset = DateTimeShortcuts.timezoneOffset / 3600; - - // Only warn if there is a time zone mismatch. - if (!timezoneOffset) { - return; - } - - // Check if warning is already there. - if (inp.parentNode.querySelectorAll('.' + warningClass).length) { - return; - } - - let message; - if (timezoneOffset > 0) { - message = ngettext( - 'Note: You are %s hour ahead of server time.', - 'Note: You are %s hours ahead of server time.', - timezoneOffset - ); - } - else { - timezoneOffset *= -1; - message = ngettext( - 'Note: You are %s hour behind server time.', - 'Note: You are %s hours behind server time.', - timezoneOffset - ); - } - message = interpolate(message, [timezoneOffset]); - - const warning = document.createElement('div'); - warning.classList.add('help', warningClass); - warning.textContent = message; - inp.parentNode.appendChild(warning); - }, - // Add clock widget to a given field - addClock: function(inp) { - const num = DateTimeShortcuts.clockInputs.length; - DateTimeShortcuts.clockInputs[num] = inp; - DateTimeShortcuts.dismissClockFunc[num] = function() { DateTimeShortcuts.dismissClock(num); return true; }; - - // Shortcut links (clock icon and "Now" link) - const shortcuts_span = document.createElement('span'); - shortcuts_span.className = DateTimeShortcuts.shortCutsClass; - inp.parentNode.insertBefore(shortcuts_span, inp.nextSibling); - const now_link = document.createElement('a'); - now_link.href = "#"; - now_link.textContent = gettext('Now'); - now_link.addEventListener('click', function(e) { - e.preventDefault(); - DateTimeShortcuts.handleClockQuicklink(num, -1); - }); - const clock_link = document.createElement('a'); - clock_link.href = '#'; - clock_link.id = DateTimeShortcuts.clockLinkName + num; - clock_link.addEventListener('click', function(e) { - e.preventDefault(); - // avoid triggering the document click handler to dismiss the clock - e.stopPropagation(); - DateTimeShortcuts.openClock(num); - }); - - quickElement( - 'span', clock_link, '', - 'class', 'clock-icon', - 'title', gettext('Choose a Time') - ); - shortcuts_span.appendChild(document.createTextNode('\u00A0')); - shortcuts_span.appendChild(now_link); - shortcuts_span.appendChild(document.createTextNode('\u00A0|\u00A0')); - shortcuts_span.appendChild(clock_link); - - // Create clock link div - // - // Markup looks like: - //
    - //

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