From c6b191ce167092c3b84a2dd21106e7a08f2ce530 Mon Sep 17 00:00:00 2001 From: Patrick Mayr Date: Sun, 23 Jan 2022 22:48:09 +0000 Subject: [PATCH] add assets --- assets/admin/css/autocomplete.css | 57 +- assets/admin/css/base.css | 272 +- assets/admin/css/changelists.css | 97 +- assets/admin/css/forms.css | 59 +- assets/admin/css/login.css | 34 +- assets/admin/css/nav_sidebar.css | 46 +- assets/admin/css/responsive.css | 35 +- assets/admin/css/rtl.css | 24 +- assets/admin/css/widgets.css | 76 +- assets/admin/js/SelectBox.js | 4 +- assets/admin/js/actions.js | 319 +- assets/admin/js/admin/DateTimeShortcuts.js | 6 +- assets/admin/js/admin/RelatedObjectLookups.js | 8 +- assets/admin/js/autocomplete.js | 31 +- assets/admin/js/calendar.js | 14 + assets/admin/js/cancel.js | 7 +- assets/admin/js/core.js | 9 +- assets/admin/js/inlines.js | 12 +- assets/admin/js/nav_sidebar.js | 54 + assets/admin/js/urlify.js | 17 +- assets/admin/js/vendor/jquery/LICENSE.txt | 2 +- assets/admin/js/vendor/jquery/jquery.js | 227 +- assets/admin/js/vendor/jquery/jquery.min.js | 4 +- assets/ckeditor/ckeditor/CHANGES.md | 107 + assets/ckeditor/ckeditor/LICENSE.md | 1 + assets/ckeditor/ckeditor/build-config.js | 5 +- assets/ckeditor/ckeditor/ckeditor.js | 1346 +++---- assets/ckeditor/ckeditor/lang/af.js | 2 +- assets/ckeditor/ckeditor/lang/ar.js | 2 +- assets/ckeditor/ckeditor/lang/az.js | 2 +- assets/ckeditor/ckeditor/lang/bg.js | 2 +- assets/ckeditor/ckeditor/lang/bn.js | 2 +- assets/ckeditor/ckeditor/lang/bs.js | 2 +- assets/ckeditor/ckeditor/lang/ca.js | 2 +- assets/ckeditor/ckeditor/lang/cs.js | 2 +- assets/ckeditor/ckeditor/lang/cy.js | 2 +- assets/ckeditor/ckeditor/lang/da.js | 2 +- assets/ckeditor/ckeditor/lang/de-ch.js | 2 +- assets/ckeditor/ckeditor/lang/de.js | 2 +- assets/ckeditor/ckeditor/lang/el.js | 2 +- assets/ckeditor/ckeditor/lang/en-au.js | 2 +- assets/ckeditor/ckeditor/lang/en-ca.js | 2 +- assets/ckeditor/ckeditor/lang/en-gb.js | 2 +- assets/ckeditor/ckeditor/lang/en.js | 2 +- assets/ckeditor/ckeditor/lang/eo.js | 2 +- assets/ckeditor/ckeditor/lang/es-mx.js | 2 +- assets/ckeditor/ckeditor/lang/es.js | 2 +- assets/ckeditor/ckeditor/lang/et.js | 2 +- assets/ckeditor/ckeditor/lang/eu.js | 2 +- assets/ckeditor/ckeditor/lang/fa.js | 2 +- assets/ckeditor/ckeditor/lang/fi.js | 2 +- assets/ckeditor/ckeditor/lang/fo.js | 2 +- assets/ckeditor/ckeditor/lang/fr-ca.js | 2 +- assets/ckeditor/ckeditor/lang/fr.js | 2 +- assets/ckeditor/ckeditor/lang/gl.js | 2 +- assets/ckeditor/ckeditor/lang/gu.js | 2 +- assets/ckeditor/ckeditor/lang/he.js | 2 +- assets/ckeditor/ckeditor/lang/hi.js | 2 +- assets/ckeditor/ckeditor/lang/hr.js | 2 +- assets/ckeditor/ckeditor/lang/hu.js | 2 +- assets/ckeditor/ckeditor/lang/id.js | 2 +- assets/ckeditor/ckeditor/lang/is.js | 2 +- assets/ckeditor/ckeditor/lang/it.js | 2 +- assets/ckeditor/ckeditor/lang/ja.js | 2 +- assets/ckeditor/ckeditor/lang/ka.js | 2 +- assets/ckeditor/ckeditor/lang/km.js | 2 +- assets/ckeditor/ckeditor/lang/ko.js | 2 +- assets/ckeditor/ckeditor/lang/ku.js | 2 +- assets/ckeditor/ckeditor/lang/lt.js | 2 +- assets/ckeditor/ckeditor/lang/lv.js | 2 +- assets/ckeditor/ckeditor/lang/mk.js | 2 +- assets/ckeditor/ckeditor/lang/mn.js | 2 +- assets/ckeditor/ckeditor/lang/ms.js | 2 +- assets/ckeditor/ckeditor/lang/nb.js | 2 +- assets/ckeditor/ckeditor/lang/nl.js | 2 +- assets/ckeditor/ckeditor/lang/no.js | 2 +- assets/ckeditor/ckeditor/lang/oc.js | 2 +- assets/ckeditor/ckeditor/lang/pl.js | 2 +- assets/ckeditor/ckeditor/lang/pt-br.js | 2 +- assets/ckeditor/ckeditor/lang/pt.js | 2 +- assets/ckeditor/ckeditor/lang/ro.js | 2 +- assets/ckeditor/ckeditor/lang/ru.js | 2 +- assets/ckeditor/ckeditor/lang/si.js | 2 +- assets/ckeditor/ckeditor/lang/sk.js | 2 +- assets/ckeditor/ckeditor/lang/sl.js | 2 +- assets/ckeditor/ckeditor/lang/sq.js | 2 +- assets/ckeditor/ckeditor/lang/sr-latn.js | 2 +- assets/ckeditor/ckeditor/lang/sr.js | 2 +- assets/ckeditor/ckeditor/lang/sv.js | 2 +- assets/ckeditor/ckeditor/lang/th.js | 2 +- assets/ckeditor/ckeditor/lang/tr.js | 2 +- assets/ckeditor/ckeditor/lang/tt.js | 2 +- assets/ckeditor/ckeditor/lang/ug.js | 2 +- assets/ckeditor/ckeditor/lang/uk.js | 2 +- assets/ckeditor/ckeditor/lang/vi.js | 2 +- assets/ckeditor/ckeditor/lang/zh-cn.js | 2 +- assets/ckeditor/ckeditor/lang/zh.js | 2 +- .../plugins/a11yhelp/dialogs/lang/ar.js | 14 +- .../plugins/a11yhelp/dialogs/lang/bg.js | 4 +- .../plugins/a11yhelp/dialogs/lang/en-gb.js | 14 +- .../plugins/a11yhelp/dialogs/lang/en.js | 14 +- .../plugins/a11yhelp/dialogs/lang/fo.js | 14 +- .../plugins/a11yhelp/dialogs/lang/gu.js | 14 +- .../plugins/a11yhelp/dialogs/lang/hi.js | 14 +- .../plugins/a11yhelp/dialogs/lang/km.js | 14 +- .../plugins/a11yhelp/dialogs/lang/lt.js | 14 +- .../plugins/a11yhelp/dialogs/lang/mk.js | 4 +- .../plugins/a11yhelp/dialogs/lang/mn.js | 14 +- .../plugins/a11yhelp/dialogs/lang/th.js | 14 +- .../plugins/a11yhelp/dialogs/lang/tt.js | 14 +- .../plugins/exportpdf/tests/stylesheets.js | 2 +- assets/ckeditor/ckeditor/plugins/icons.png | Bin 12533 -> 12237 bytes .../ckeditor/ckeditor/plugins/icons_hidpi.png | Bin 39180 -> 38309 bytes .../ckeditor/plugins/link/dialogs/anchor.js | 8 +- .../plugins/specialchar/dialogs/lang/id.js | 18 +- .../plugins/templates/dialogs/templates.js | 13 +- .../ckeditor/ckeditor/plugins/wsc/README.md | 164 +- .../ckeditor/plugins/wsc/dialogs/wsc.js | 87 +- .../ckeditor/plugins/wsc/dialogs/wsc_ie.js | 14 +- .../ckeditor/skins/moono-lisa/dialog.css | 2 +- .../ckeditor/skins/moono-lisa/dialog_ie.css | 2 +- .../ckeditor/skins/moono-lisa/dialog_ie8.css | 2 +- .../skins/moono-lisa/dialog_iequirks.css | 2 +- .../ckeditor/skins/moono-lisa/editor.css | 2 +- .../skins/moono-lisa/editor_gecko.css | 2 +- .../ckeditor/skins/moono-lisa/editor_ie.css | 2 +- .../ckeditor/skins/moono-lisa/editor_ie8.css | 2 +- .../skins/moono-lisa/editor_iequirks.css | 2 +- .../ckeditor/skins/moono-lisa/icons.png | Bin 12533 -> 12237 bytes .../ckeditor/skins/moono-lisa/icons_hidpi.png | Bin 39180 -> 38309 bytes assets/fontawesomefree/LICENSE.txt | 141 +- assets/fontawesomefree/README.md | 2 +- assets/fontawesomefree/css/all.css | 591 +-- assets/fontawesomefree/css/all.min.css | 5 +- assets/fontawesomefree/css/brands.css | 38 +- assets/fontawesomefree/css/brands.min.css | 5 +- assets/fontawesomefree/css/fontawesome.css | 508 ++- .../fontawesomefree/css/fontawesome.min.css | 5 +- assets/fontawesomefree/css/regular.css | 8 +- assets/fontawesomefree/css/regular.min.css | 5 +- assets/fontawesomefree/css/solid.css | 8 +- assets/fontawesomefree/css/solid.min.css | 5 +- assets/fontawesomefree/css/svg-with-js.css | 206 +- .../fontawesomefree/css/svg-with-js.min.css | 5 +- assets/fontawesomefree/css/v4-shims.css | 134 +- assets/fontawesomefree/css/v4-shims.min.css | 5 +- .../fontawesome-common-types/LICENSE.txt | 141 +- .../fontawesome-common-types/attribution.js | 3 +- .../fontawesome-common-types/index.d.ts | 109 +- .../fontawesome-common-types/package.json | 2 +- .../@fortawesome/fontawesome-free/LICENSE.txt | 141 +- .../fontawesome-free/attribution.js | 3 +- .../@fortawesome/fontawesome-free/css/all.css | 591 +-- .../fontawesome-free/css/all.min.css | 5 +- .../fontawesome-free/css/brands.css | 38 +- .../fontawesome-free/css/brands.min.css | 5 +- .../fontawesome-free/css/fontawesome.css | 508 ++- .../fontawesome-free/css/fontawesome.min.css | 5 +- .../fontawesome-free/css/regular.css | 8 +- .../fontawesome-free/css/regular.min.css | 5 +- .../fontawesome-free/css/solid.css | 8 +- .../fontawesome-free/css/solid.min.css | 5 +- .../fontawesome-free/css/svg-with-js.css | 206 +- .../fontawesome-free/css/svg-with-js.min.css | 5 +- .../fontawesome-free/css/v4-shims.css | 134 +- .../fontawesome-free/css/v4-shims.min.css | 5 +- .../@fortawesome/fontawesome-free/js/all.js | 3407 +++++++++-------- .../fontawesome-free/js/all.min.js | 5 +- .../fontawesome-free/js/brands.js | 337 +- .../fontawesome-free/js/brands.min.js | 5 +- .../fontawesome-free/js/conflict-detection.js | 72 +- .../js/conflict-detection.min.js | 5 +- .../fontawesome-free/js/fontawesome.js | 1305 +++---- .../fontawesome-free/js/fontawesome.min.js | 5 +- .../fontawesome-free/js/regular.js | 376 +- .../fontawesome-free/js/regular.min.js | 5 +- .../@fortawesome/fontawesome-free/js/solid.js | 1398 +++---- .../fontawesome-free/js/solid.min.js | 5 +- .../fontawesome-free/js/v4-shims.js | 72 +- .../fontawesome-free/js/v4-shims.min.js | 5 +- .../fontawesome-free/less/_animated.less | 12 +- .../fontawesome-free/less/_shims.less | 113 +- .../fontawesome-free/less/_variables.less | 336 +- .../fontawesome-free/less/brands.less | 8 +- .../fontawesome-free/less/fontawesome.less | 3 +- .../fontawesome-free/less/regular.less | 8 +- .../fontawesome-free/less/solid.less | 8 +- .../fontawesome-free/less/v4-shims.less | 3 +- .../fontawesome-free/package.json | 2 +- .../fontawesome-free/scss/_animated.scss | 12 +- .../fontawesome-free/scss/_core.scss | 1 + .../fontawesome-free/scss/_mixins.scss | 6 +- .../fontawesome-free/scss/_shims.scss | 113 +- .../fontawesome-free/scss/_variables.scss | 341 +- .../fontawesome-free/scss/brands.scss | 9 +- .../fontawesome-free/scss/fontawesome.scss | 4 +- .../fontawesome-free/scss/regular.scss | 9 +- .../fontawesome-free/scss/solid.scss | 9 +- .../fontawesome-free/scss/v4-shims.scss | 4 +- .../fontawesome-free/sprites/brands.svg | 226 +- .../fontawesome-free/sprites/regular.svg | 131 +- .../fontawesome-free/sprites/solid.svg | 729 ++-- .../fontawesome-free/svgs/brands/500px.svg | 2 +- .../svgs/brands/accessible-icon.svg | 2 +- .../fontawesome-free/svgs/brands/accusoft.svg | 2 +- .../svgs/brands/acquisitions-incorporated.svg | 2 +- .../fontawesome-free/svgs/brands/adn.svg | 2 +- .../fontawesome-free/svgs/brands/adversal.svg | 2 +- .../svgs/brands/affiliatetheme.svg | 2 +- .../fontawesome-free/svgs/brands/airbnb.svg | 2 +- .../fontawesome-free/svgs/brands/algolia.svg | 2 +- .../fontawesome-free/svgs/brands/alipay.svg | 2 +- .../svgs/brands/amazon-pay.svg | 2 +- .../fontawesome-free/svgs/brands/amazon.svg | 2 +- .../fontawesome-free/svgs/brands/amilia.svg | 2 +- .../fontawesome-free/svgs/brands/android.svg | 2 +- .../svgs/brands/angellist.svg | 2 +- .../svgs/brands/angrycreative.svg | 2 +- .../fontawesome-free/svgs/brands/angular.svg | 2 +- .../svgs/brands/app-store-ios.svg | 2 +- .../svgs/brands/app-store.svg | 2 +- .../fontawesome-free/svgs/brands/apper.svg | 2 +- .../svgs/brands/apple-pay.svg | 2 +- .../fontawesome-free/svgs/brands/apple.svg | 2 +- .../svgs/brands/artstation.svg | 2 +- .../svgs/brands/asymmetrik.svg | 2 +- .../svgs/brands/atlassian.svg | 2 +- .../fontawesome-free/svgs/brands/audible.svg | 2 +- .../svgs/brands/autoprefixer.svg | 2 +- .../fontawesome-free/svgs/brands/avianex.svg | 2 +- .../fontawesome-free/svgs/brands/aviato.svg | 2 +- .../fontawesome-free/svgs/brands/aws.svg | 2 +- .../fontawesome-free/svgs/brands/bandcamp.svg | 2 +- .../svgs/brands/battle-net.svg | 2 +- .../svgs/brands/behance-square.svg | 2 +- .../fontawesome-free/svgs/brands/behance.svg | 2 +- .../svgs/brands/bimobject.svg | 2 +- .../svgs/brands/bitbucket.svg | 2 +- .../fontawesome-free/svgs/brands/bitcoin.svg | 2 +- .../fontawesome-free/svgs/brands/bity.svg | 2 +- .../svgs/brands/black-tie.svg | 2 +- .../svgs/brands/blackberry.svg | 2 +- .../svgs/brands/blogger-b.svg | 2 +- .../fontawesome-free/svgs/brands/blogger.svg | 2 +- .../svgs/brands/bluetooth-b.svg | 2 +- .../svgs/brands/bluetooth.svg | 2 +- .../svgs/brands/bootstrap.svg | 2 +- .../fontawesome-free/svgs/brands/bots.svg | 2 +- .../fontawesome-free/svgs/brands/btc.svg | 2 +- .../fontawesome-free/svgs/brands/buffer.svg | 2 +- .../svgs/brands/buromobelexperte.svg | 2 +- .../svgs/brands/buy-n-large.svg | 2 +- .../svgs/brands/buysellads.svg | 2 +- .../svgs/brands/canadian-maple-leaf.svg | 2 +- .../svgs/brands/cc-amazon-pay.svg | 2 +- .../fontawesome-free/svgs/brands/cc-amex.svg | 2 +- .../svgs/brands/cc-apple-pay.svg | 2 +- .../svgs/brands/cc-diners-club.svg | 2 +- .../svgs/brands/cc-discover.svg | 2 +- .../fontawesome-free/svgs/brands/cc-jcb.svg | 2 +- .../svgs/brands/cc-mastercard.svg | 2 +- .../svgs/brands/cc-paypal.svg | 2 +- .../svgs/brands/cc-stripe.svg | 2 +- .../fontawesome-free/svgs/brands/cc-visa.svg | 2 +- .../svgs/brands/centercode.svg | 2 +- .../fontawesome-free/svgs/brands/centos.svg | 2 +- .../fontawesome-free/svgs/brands/chrome.svg | 2 +- .../svgs/brands/chromecast.svg | 2 +- .../svgs/brands/cloudflare.svg | 2 +- .../svgs/brands/cloudscale.svg | 2 +- .../svgs/brands/cloudsmith.svg | 2 +- .../svgs/brands/cloudversify.svg | 2 +- .../fontawesome-free/svgs/brands/cmplid.svg | 2 +- .../fontawesome-free/svgs/brands/codepen.svg | 2 +- .../fontawesome-free/svgs/brands/codiepie.svg | 2 +- .../svgs/brands/confluence.svg | 2 +- .../svgs/brands/connectdevelop.svg | 2 +- .../fontawesome-free/svgs/brands/contao.svg | 2 +- .../svgs/brands/cotton-bureau.svg | 2 +- .../fontawesome-free/svgs/brands/cpanel.svg | 2 +- .../svgs/brands/creative-commons-by.svg | 2 +- .../svgs/brands/creative-commons-nc-eu.svg | 2 +- .../svgs/brands/creative-commons-nc-jp.svg | 2 +- .../svgs/brands/creative-commons-nc.svg | 2 +- .../svgs/brands/creative-commons-nd.svg | 2 +- .../svgs/brands/creative-commons-pd-alt.svg | 2 +- .../svgs/brands/creative-commons-pd.svg | 2 +- .../svgs/brands/creative-commons-remix.svg | 2 +- .../svgs/brands/creative-commons-sa.svg | 2 +- .../brands/creative-commons-sampling-plus.svg | 2 +- .../svgs/brands/creative-commons-sampling.svg | 2 +- .../svgs/brands/creative-commons-share.svg | 2 +- .../svgs/brands/creative-commons-zero.svg | 2 +- .../svgs/brands/creative-commons.svg | 2 +- .../svgs/brands/critical-role.svg | 2 +- .../fontawesome-free/svgs/brands/css3-alt.svg | 2 +- .../fontawesome-free/svgs/brands/css3.svg | 2 +- .../svgs/brands/cuttlefish.svg | 2 +- .../svgs/brands/d-and-d-beyond.svg | 2 +- .../fontawesome-free/svgs/brands/d-and-d.svg | 2 +- .../svgs/brands/dailymotion.svg | 2 +- .../fontawesome-free/svgs/brands/dashcube.svg | 2 +- .../fontawesome-free/svgs/brands/deezer.svg | 2 +- .../svgs/brands/delicious.svg | 2 +- .../svgs/brands/deploydog.svg | 2 +- .../fontawesome-free/svgs/brands/deskpro.svg | 2 +- .../fontawesome-free/svgs/brands/dev.svg | 2 +- .../svgs/brands/deviantart.svg | 2 +- .../fontawesome-free/svgs/brands/dhl.svg | 2 +- .../fontawesome-free/svgs/brands/diaspora.svg | 2 +- .../fontawesome-free/svgs/brands/digg.svg | 2 +- .../svgs/brands/digital-ocean.svg | 2 +- .../fontawesome-free/svgs/brands/discord.svg | 2 +- .../svgs/brands/discourse.svg | 2 +- .../fontawesome-free/svgs/brands/dochub.svg | 2 +- .../fontawesome-free/svgs/brands/docker.svg | 2 +- .../svgs/brands/draft2digital.svg | 2 +- .../svgs/brands/dribbble-square.svg | 2 +- .../fontawesome-free/svgs/brands/dribbble.svg | 2 +- .../fontawesome-free/svgs/brands/dropbox.svg | 2 +- .../fontawesome-free/svgs/brands/drupal.svg | 2 +- .../fontawesome-free/svgs/brands/dyalog.svg | 2 +- .../svgs/brands/earlybirds.svg | 2 +- .../fontawesome-free/svgs/brands/ebay.svg | 2 +- .../svgs/brands/edge-legacy.svg | 2 +- .../fontawesome-free/svgs/brands/edge.svg | 2 +- .../svgs/brands/elementor.svg | 2 +- .../fontawesome-free/svgs/brands/ello.svg | 2 +- .../fontawesome-free/svgs/brands/ember.svg | 2 +- .../fontawesome-free/svgs/brands/empire.svg | 2 +- .../fontawesome-free/svgs/brands/envira.svg | 2 +- .../fontawesome-free/svgs/brands/erlang.svg | 2 +- .../fontawesome-free/svgs/brands/ethereum.svg | 2 +- .../fontawesome-free/svgs/brands/etsy.svg | 2 +- .../fontawesome-free/svgs/brands/evernote.svg | 2 +- .../svgs/brands/expeditedssl.svg | 2 +- .../svgs/brands/facebook-f.svg | 2 +- .../svgs/brands/facebook-messenger.svg | 2 +- .../svgs/brands/facebook-square.svg | 2 +- .../fontawesome-free/svgs/brands/facebook.svg | 2 +- .../svgs/brands/fantasy-flight-games.svg | 2 +- .../fontawesome-free/svgs/brands/fedex.svg | 2 +- .../fontawesome-free/svgs/brands/fedora.svg | 2 +- .../fontawesome-free/svgs/brands/figma.svg | 2 +- .../svgs/brands/firefox-browser.svg | 2 +- .../fontawesome-free/svgs/brands/firefox.svg | 2 +- .../svgs/brands/first-order-alt.svg | 2 +- .../svgs/brands/first-order.svg | 2 +- .../svgs/brands/firstdraft.svg | 2 +- .../fontawesome-free/svgs/brands/flickr.svg | 2 +- .../svgs/brands/flipboard.svg | 2 +- .../fontawesome-free/svgs/brands/fly.svg | 2 +- .../svgs/brands/font-awesome.svg | 2 +- .../svgs/brands/fonticons-fi.svg | 2 +- .../svgs/brands/fonticons.svg | 2 +- .../svgs/brands/fort-awesome-alt.svg | 2 +- .../svgs/brands/fort-awesome.svg | 2 +- .../fontawesome-free/svgs/brands/forumbee.svg | 2 +- .../svgs/brands/foursquare.svg | 2 +- .../svgs/brands/free-code-camp.svg | 2 +- .../fontawesome-free/svgs/brands/freebsd.svg | 2 +- .../fontawesome-free/svgs/brands/fulcrum.svg | 2 +- .../svgs/brands/galactic-republic.svg | 2 +- .../svgs/brands/galactic-senate.svg | 2 +- .../svgs/brands/get-pocket.svg | 2 +- .../svgs/brands/gg-circle.svg | 2 +- .../fontawesome-free/svgs/brands/gg.svg | 2 +- .../fontawesome-free/svgs/brands/git-alt.svg | 2 +- .../svgs/brands/git-square.svg | 2 +- .../fontawesome-free/svgs/brands/git.svg | 2 +- .../svgs/brands/github-alt.svg | 2 +- .../svgs/brands/github-square.svg | 2 +- .../fontawesome-free/svgs/brands/github.svg | 2 +- .../svgs/brands/gitkraken.svg | 2 +- .../fontawesome-free/svgs/brands/gitlab.svg | 2 +- .../fontawesome-free/svgs/brands/gitter.svg | 2 +- .../fontawesome-free/svgs/brands/glide-g.svg | 2 +- .../fontawesome-free/svgs/brands/glide.svg | 2 +- .../fontawesome-free/svgs/brands/gofore.svg | 2 +- .../svgs/brands/goodreads-g.svg | 2 +- .../svgs/brands/goodreads.svg | 2 +- .../svgs/brands/google-drive.svg | 2 +- .../svgs/brands/google-pay.svg | 2 +- .../svgs/brands/google-play.svg | 2 +- .../svgs/brands/google-plus-g.svg | 2 +- .../svgs/brands/google-plus-square.svg | 2 +- .../svgs/brands/google-plus.svg | 2 +- .../svgs/brands/google-wallet.svg | 2 +- .../fontawesome-free/svgs/brands/google.svg | 2 +- .../fontawesome-free/svgs/brands/gratipay.svg | 2 +- .../fontawesome-free/svgs/brands/grav.svg | 2 +- .../fontawesome-free/svgs/brands/gripfire.svg | 2 +- .../fontawesome-free/svgs/brands/grunt.svg | 2 +- .../fontawesome-free/svgs/brands/guilded.svg | 2 +- .../fontawesome-free/svgs/brands/gulp.svg | 2 +- .../svgs/brands/hacker-news-square.svg | 2 +- .../svgs/brands/hacker-news.svg | 2 +- .../svgs/brands/hackerrank.svg | 2 +- .../fontawesome-free/svgs/brands/hips.svg | 2 +- .../svgs/brands/hire-a-helper.svg | 2 +- .../fontawesome-free/svgs/brands/hive.svg | 2 +- .../fontawesome-free/svgs/brands/hooli.svg | 2 +- .../fontawesome-free/svgs/brands/hornbill.svg | 2 +- .../fontawesome-free/svgs/brands/hotjar.svg | 2 +- .../fontawesome-free/svgs/brands/houzz.svg | 2 +- .../fontawesome-free/svgs/brands/html5.svg | 2 +- .../fontawesome-free/svgs/brands/hubspot.svg | 2 +- .../fontawesome-free/svgs/brands/ideal.svg | 2 +- .../fontawesome-free/svgs/brands/imdb.svg | 2 +- .../svgs/brands/instagram-square.svg | 2 +- .../svgs/brands/instagram.svg | 2 +- .../fontawesome-free/svgs/brands/instalod.svg | 2 +- .../fontawesome-free/svgs/brands/intercom.svg | 2 +- .../svgs/brands/internet-explorer.svg | 2 +- .../fontawesome-free/svgs/brands/invision.svg | 2 +- .../fontawesome-free/svgs/brands/ioxhost.svg | 2 +- .../fontawesome-free/svgs/brands/itch-io.svg | 2 +- .../svgs/brands/itunes-note.svg | 2 +- .../fontawesome-free/svgs/brands/itunes.svg | 2 +- .../fontawesome-free/svgs/brands/java.svg | 2 +- .../svgs/brands/jedi-order.svg | 2 +- .../fontawesome-free/svgs/brands/jenkins.svg | 2 +- .../fontawesome-free/svgs/brands/jira.svg | 2 +- .../fontawesome-free/svgs/brands/joget.svg | 2 +- .../fontawesome-free/svgs/brands/joomla.svg | 2 +- .../svgs/brands/js-square.svg | 2 +- .../fontawesome-free/svgs/brands/js.svg | 2 +- .../fontawesome-free/svgs/brands/jsfiddle.svg | 2 +- .../fontawesome-free/svgs/brands/kaggle.svg | 2 +- .../fontawesome-free/svgs/brands/keybase.svg | 2 +- .../fontawesome-free/svgs/brands/keycdn.svg | 2 +- .../svgs/brands/kickstarter-k.svg | 2 +- .../svgs/brands/kickstarter.svg | 2 +- .../fontawesome-free/svgs/brands/korvue.svg | 2 +- .../fontawesome-free/svgs/brands/laravel.svg | 2 +- .../svgs/brands/lastfm-square.svg | 2 +- .../fontawesome-free/svgs/brands/lastfm.svg | 2 +- .../fontawesome-free/svgs/brands/leanpub.svg | 2 +- .../fontawesome-free/svgs/brands/less.svg | 2 +- .../fontawesome-free/svgs/brands/line.svg | 2 +- .../svgs/brands/linkedin-in.svg | 2 +- .../fontawesome-free/svgs/brands/linkedin.svg | 2 +- .../fontawesome-free/svgs/brands/linode.svg | 2 +- .../fontawesome-free/svgs/brands/linux.svg | 2 +- .../fontawesome-free/svgs/brands/lyft.svg | 2 +- .../fontawesome-free/svgs/brands/magento.svg | 2 +- .../svgs/brands/mailchimp.svg | 2 +- .../svgs/brands/mandalorian.svg | 2 +- .../fontawesome-free/svgs/brands/markdown.svg | 2 +- .../fontawesome-free/svgs/brands/mastodon.svg | 2 +- .../fontawesome-free/svgs/brands/maxcdn.svg | 2 +- .../fontawesome-free/svgs/brands/mdb.svg | 2 +- .../fontawesome-free/svgs/brands/medapps.svg | 2 +- .../fontawesome-free/svgs/brands/medium.svg | 2 +- .../fontawesome-free/svgs/brands/medrt.svg | 2 +- .../fontawesome-free/svgs/brands/meetup.svg | 2 +- .../fontawesome-free/svgs/brands/megaport.svg | 2 +- .../fontawesome-free/svgs/brands/mendeley.svg | 2 +- .../svgs/brands/microblog.svg | 2 +- .../svgs/brands/microsoft.svg | 2 +- .../fontawesome-free/svgs/brands/mix.svg | 2 +- .../fontawesome-free/svgs/brands/mixcloud.svg | 2 +- .../fontawesome-free/svgs/brands/mixer.svg | 2 +- .../fontawesome-free/svgs/brands/mizuni.svg | 2 +- .../fontawesome-free/svgs/brands/modx.svg | 2 +- .../fontawesome-free/svgs/brands/monero.svg | 2 +- .../fontawesome-free/svgs/brands/napster.svg | 2 +- .../fontawesome-free/svgs/brands/neos.svg | 2 +- .../fontawesome-free/svgs/brands/nimblr.svg | 2 +- .../fontawesome-free/svgs/brands/node-js.svg | 2 +- .../fontawesome-free/svgs/brands/node.svg | 2 +- .../fontawesome-free/svgs/brands/npm.svg | 2 +- .../fontawesome-free/svgs/brands/ns8.svg | 2 +- .../svgs/brands/nutritionix.svg | 2 +- .../svgs/brands/octopus-deploy.svg | 2 +- .../svgs/brands/odnoklassniki-square.svg | 2 +- .../svgs/brands/odnoklassniki.svg | 2 +- .../svgs/brands/old-republic.svg | 2 +- .../fontawesome-free/svgs/brands/opencart.svg | 2 +- .../fontawesome-free/svgs/brands/openid.svg | 2 +- .../fontawesome-free/svgs/brands/opera.svg | 2 +- .../svgs/brands/optin-monster.svg | 2 +- .../fontawesome-free/svgs/brands/orcid.svg | 2 +- .../fontawesome-free/svgs/brands/osi.svg | 2 +- .../fontawesome-free/svgs/brands/page4.svg | 2 +- .../svgs/brands/pagelines.svg | 2 +- .../fontawesome-free/svgs/brands/palfed.svg | 2 +- .../fontawesome-free/svgs/brands/patreon.svg | 2 +- .../fontawesome-free/svgs/brands/paypal.svg | 2 +- .../svgs/brands/penny-arcade.svg | 2 +- .../fontawesome-free/svgs/brands/perbyte.svg | 2 +- .../svgs/brands/periscope.svg | 2 +- .../svgs/brands/phabricator.svg | 2 +- .../svgs/brands/phoenix-framework.svg | 2 +- .../svgs/brands/phoenix-squadron.svg | 2 +- .../fontawesome-free/svgs/brands/php.svg | 2 +- .../svgs/brands/pied-piper-alt.svg | 2 +- .../svgs/brands/pied-piper-hat.svg | 2 +- .../svgs/brands/pied-piper-pp.svg | 2 +- .../svgs/brands/pied-piper-square.svg | 2 +- .../svgs/brands/pied-piper.svg | 2 +- .../svgs/brands/pinterest-p.svg | 2 +- .../svgs/brands/pinterest-square.svg | 2 +- .../svgs/brands/pinterest.svg | 2 +- .../svgs/brands/playstation.svg | 2 +- .../svgs/brands/product-hunt.svg | 2 +- .../fontawesome-free/svgs/brands/pushed.svg | 2 +- .../fontawesome-free/svgs/brands/python.svg | 2 +- .../fontawesome-free/svgs/brands/qq.svg | 2 +- .../svgs/brands/quinscape.svg | 2 +- .../fontawesome-free/svgs/brands/quora.svg | 2 +- .../svgs/brands/r-project.svg | 2 +- .../svgs/brands/raspberry-pi.svg | 2 +- .../fontawesome-free/svgs/brands/ravelry.svg | 2 +- .../fontawesome-free/svgs/brands/react.svg | 2 +- .../svgs/brands/reacteurope.svg | 2 +- .../fontawesome-free/svgs/brands/readme.svg | 2 +- .../fontawesome-free/svgs/brands/rebel.svg | 2 +- .../svgs/brands/red-river.svg | 2 +- .../svgs/brands/reddit-alien.svg | 2 +- .../svgs/brands/reddit-square.svg | 2 +- .../fontawesome-free/svgs/brands/reddit.svg | 2 +- .../fontawesome-free/svgs/brands/redhat.svg | 2 +- .../fontawesome-free/svgs/brands/renren.svg | 2 +- .../fontawesome-free/svgs/brands/replyd.svg | 2 +- .../svgs/brands/researchgate.svg | 2 +- .../svgs/brands/resolving.svg | 2 +- .../fontawesome-free/svgs/brands/rev.svg | 2 +- .../svgs/brands/rocketchat.svg | 2 +- .../fontawesome-free/svgs/brands/rockrms.svg | 2 +- .../fontawesome-free/svgs/brands/rust.svg | 2 +- .../fontawesome-free/svgs/brands/safari.svg | 2 +- .../svgs/brands/salesforce.svg | 2 +- .../fontawesome-free/svgs/brands/sass.svg | 2 +- .../fontawesome-free/svgs/brands/schlix.svg | 2 +- .../fontawesome-free/svgs/brands/scribd.svg | 2 +- .../svgs/brands/searchengin.svg | 2 +- .../fontawesome-free/svgs/brands/sellcast.svg | 2 +- .../fontawesome-free/svgs/brands/sellsy.svg | 2 +- .../svgs/brands/servicestack.svg | 2 +- .../svgs/brands/shirtsinbulk.svg | 2 +- .../fontawesome-free/svgs/brands/shopify.svg | 2 +- .../fontawesome-free/svgs/brands/shopware.svg | 2 +- .../svgs/brands/simplybuilt.svg | 2 +- .../fontawesome-free/svgs/brands/sistrix.svg | 2 +- .../fontawesome-free/svgs/brands/sith.svg | 2 +- .../fontawesome-free/svgs/brands/sketch.svg | 2 +- .../fontawesome-free/svgs/brands/skyatlas.svg | 2 +- .../fontawesome-free/svgs/brands/skype.svg | 2 +- .../fontawesome-free/svgs/brands/slack.svg | 2 +- .../svgs/brands/slideshare.svg | 2 +- .../svgs/brands/snapchat-square.svg | 2 +- .../fontawesome-free/svgs/brands/snapchat.svg | 2 +- .../svgs/brands/soundcloud.svg | 2 +- .../svgs/brands/sourcetree.svg | 2 +- .../fontawesome-free/svgs/brands/speakap.svg | 2 +- .../svgs/brands/speaker-deck.svg | 2 +- .../fontawesome-free/svgs/brands/spotify.svg | 2 +- .../brands/square-font-awesome-stroke.svg | 2 +- .../svgs/brands/square-font-awesome.svg | 2 +- .../svgs/brands/squarespace.svg | 2 +- .../svgs/brands/stack-exchange.svg | 2 +- .../svgs/brands/stack-overflow.svg | 2 +- .../svgs/brands/stackpath.svg | 2 +- .../svgs/brands/staylinked.svg | 2 +- .../svgs/brands/steam-square.svg | 2 +- .../svgs/brands/steam-symbol.svg | 2 +- .../fontawesome-free/svgs/brands/steam.svg | 2 +- .../svgs/brands/sticker-mule.svg | 2 +- .../fontawesome-free/svgs/brands/strava.svg | 2 +- .../fontawesome-free/svgs/brands/stripe-s.svg | 2 +- .../fontawesome-free/svgs/brands/stripe.svg | 2 +- .../svgs/brands/studiovinari.svg | 2 +- .../svgs/brands/stumbleupon-circle.svg | 2 +- .../svgs/brands/stumbleupon.svg | 2 +- .../svgs/brands/superpowers.svg | 2 +- .../fontawesome-free/svgs/brands/supple.svg | 2 +- .../fontawesome-free/svgs/brands/suse.svg | 2 +- .../fontawesome-free/svgs/brands/swift.svg | 2 +- .../fontawesome-free/svgs/brands/symfony.svg | 2 +- .../svgs/brands/teamspeak.svg | 2 +- .../fontawesome-free/svgs/brands/telegram.svg | 2 +- .../svgs/brands/tencent-weibo.svg | 2 +- .../svgs/brands/the-red-yeti.svg | 2 +- .../fontawesome-free/svgs/brands/themeco.svg | 2 +- .../svgs/brands/themeisle.svg | 2 +- .../svgs/brands/think-peaks.svg | 2 +- .../fontawesome-free/svgs/brands/tiktok.svg | 2 +- .../svgs/brands/trade-federation.svg | 2 +- .../fontawesome-free/svgs/brands/trello.svg | 2 +- .../svgs/brands/tumblr-square.svg | 2 +- .../fontawesome-free/svgs/brands/tumblr.svg | 2 +- .../fontawesome-free/svgs/brands/twitch.svg | 2 +- .../svgs/brands/twitter-square.svg | 2 +- .../fontawesome-free/svgs/brands/twitter.svg | 2 +- .../fontawesome-free/svgs/brands/typo3.svg | 2 +- .../fontawesome-free/svgs/brands/uber.svg | 2 +- .../fontawesome-free/svgs/brands/ubuntu.svg | 2 +- .../fontawesome-free/svgs/brands/uikit.svg | 2 +- .../fontawesome-free/svgs/brands/umbraco.svg | 2 +- .../svgs/brands/uncharted.svg | 2 +- .../svgs/brands/uniregistry.svg | 2 +- .../fontawesome-free/svgs/brands/unity.svg | 2 +- .../fontawesome-free/svgs/brands/unsplash.svg | 2 +- .../fontawesome-free/svgs/brands/untappd.svg | 2 +- .../fontawesome-free/svgs/brands/ups.svg | 2 +- .../fontawesome-free/svgs/brands/usb.svg | 2 +- .../fontawesome-free/svgs/brands/usps.svg | 2 +- .../fontawesome-free/svgs/brands/ussunnah.svg | 2 +- .../fontawesome-free/svgs/brands/vaadin.svg | 2 +- .../fontawesome-free/svgs/brands/viacoin.svg | 2 +- .../svgs/brands/viadeo-square.svg | 2 +- .../fontawesome-free/svgs/brands/viadeo.svg | 2 +- .../fontawesome-free/svgs/brands/viber.svg | 2 +- .../svgs/brands/vimeo-square.svg | 2 +- .../fontawesome-free/svgs/brands/vimeo-v.svg | 2 +- .../fontawesome-free/svgs/brands/vimeo.svg | 2 +- .../fontawesome-free/svgs/brands/vine.svg | 2 +- .../fontawesome-free/svgs/brands/vk.svg | 2 +- .../fontawesome-free/svgs/brands/vnv.svg | 2 +- .../fontawesome-free/svgs/brands/vuejs.svg | 2 +- .../svgs/brands/watchman-monitoring.svg | 2 +- .../fontawesome-free/svgs/brands/waze.svg | 2 +- .../fontawesome-free/svgs/brands/weebly.svg | 2 +- .../fontawesome-free/svgs/brands/weibo.svg | 2 +- .../fontawesome-free/svgs/brands/weixin.svg | 2 +- .../svgs/brands/whatsapp-square.svg | 2 +- .../fontawesome-free/svgs/brands/whatsapp.svg | 2 +- .../fontawesome-free/svgs/brands/whmcs.svg | 2 +- .../svgs/brands/wikipedia-w.svg | 2 +- .../fontawesome-free/svgs/brands/windows.svg | 2 +- .../fontawesome-free/svgs/brands/wix.svg | 2 +- .../svgs/brands/wizards-of-the-coast.svg | 2 +- .../fontawesome-free/svgs/brands/wodu.svg | 2 +- .../svgs/brands/wolf-pack-battalion.svg | 2 +- .../svgs/brands/wordpress-simple.svg | 2 +- .../svgs/brands/wordpress.svg | 2 +- .../svgs/brands/wpbeginner.svg | 2 +- .../svgs/brands/wpexplorer.svg | 2 +- .../fontawesome-free/svgs/brands/wpforms.svg | 2 +- .../fontawesome-free/svgs/brands/wpressr.svg | 2 +- .../fontawesome-free/svgs/brands/xbox.svg | 2 +- .../svgs/brands/xing-square.svg | 2 +- .../fontawesome-free/svgs/brands/xing.svg | 2 +- .../svgs/brands/y-combinator.svg | 2 +- .../fontawesome-free/svgs/brands/yahoo.svg | 2 +- .../fontawesome-free/svgs/brands/yammer.svg | 2 +- .../svgs/brands/yandex-international.svg | 2 +- .../fontawesome-free/svgs/brands/yandex.svg | 2 +- .../fontawesome-free/svgs/brands/yarn.svg | 2 +- .../fontawesome-free/svgs/brands/yelp.svg | 2 +- .../fontawesome-free/svgs/brands/yoast.svg | 2 +- .../svgs/brands/youtube-square.svg | 2 +- .../fontawesome-free/svgs/brands/youtube.svg | 2 +- .../fontawesome-free/svgs/brands/zhihu.svg | 2 +- .../svgs/regular/address-book.svg | 2 +- .../svgs/regular/address-card.svg | 2 +- .../svgs/regular/bell-slash.svg | 2 +- .../fontawesome-free/svgs/regular/bell.svg | 2 +- .../svgs/regular/bookmark.svg | 2 +- .../svgs/regular/building.svg | 2 +- .../svgs/regular/calendar-check.svg | 2 +- .../svgs/regular/calendar-days.svg | 2 +- .../svgs/regular/calendar-minus.svg | 2 +- .../svgs/regular/calendar-plus.svg | 2 +- .../svgs/regular/calendar-xmark.svg | 2 +- .../svgs/regular/calendar.svg | 2 +- .../svgs/regular/chart-bar.svg | 2 +- .../svgs/regular/chess-bishop.svg | 2 +- .../svgs/regular/chess-king.svg | 2 +- .../svgs/regular/chess-knight.svg | 2 +- .../svgs/regular/chess-pawn.svg | 2 +- .../svgs/regular/chess-queen.svg | 2 +- .../svgs/regular/chess-rook.svg | 2 +- .../svgs/regular/circle-check.svg | 2 +- .../svgs/regular/circle-dot.svg | 2 +- .../svgs/regular/circle-down.svg | 2 +- .../svgs/regular/circle-left.svg | 2 +- .../svgs/regular/circle-pause.svg | 2 +- .../svgs/regular/circle-play.svg | 2 +- .../svgs/regular/circle-question.svg | 2 +- .../svgs/regular/circle-right.svg | 2 +- .../svgs/regular/circle-stop.svg | 2 +- .../svgs/regular/circle-up.svg | 2 +- .../svgs/regular/circle-user.svg | 2 +- .../svgs/regular/circle-xmark.svg | 2 +- .../fontawesome-free/svgs/regular/circle.svg | 2 +- .../svgs/regular/clipboard.svg | 2 +- .../fontawesome-free/svgs/regular/clock.svg | 2 +- .../fontawesome-free/svgs/regular/clone.svg | 2 +- .../svgs/regular/closed-captioning.svg | 2 +- .../svgs/regular/comment-dots.svg | 2 +- .../fontawesome-free/svgs/regular/comment.svg | 2 +- .../svgs/regular/comments.svg | 2 +- .../fontawesome-free/svgs/regular/compass.svg | 2 +- .../fontawesome-free/svgs/regular/copy.svg | 2 +- .../svgs/regular/copyright.svg | 2 +- .../svgs/regular/credit-card.svg | 2 +- .../svgs/regular/envelope-open.svg | 2 +- .../svgs/regular/envelope.svg | 2 +- .../svgs/regular/eye-slash.svg | 2 +- .../fontawesome-free/svgs/regular/eye.svg | 2 +- .../svgs/regular/face-angry.svg | 2 +- .../svgs/regular/face-dizzy.svg | 2 +- .../svgs/regular/face-flushed.svg | 2 +- .../svgs/regular/face-frown-open.svg | 2 +- .../svgs/regular/face-frown.svg | 2 +- .../svgs/regular/face-grimace.svg | 2 +- .../svgs/regular/face-grin-beam-sweat.svg | 2 +- .../svgs/regular/face-grin-beam.svg | 2 +- .../svgs/regular/face-grin-hearts.svg | 2 +- .../svgs/regular/face-grin-squint-tears.svg | 2 +- .../svgs/regular/face-grin-squint.svg | 2 +- .../svgs/regular/face-grin-stars.svg | 2 +- .../svgs/regular/face-grin-tears.svg | 2 +- .../svgs/regular/face-grin-tongue-squint.svg | 2 +- .../svgs/regular/face-grin-tongue-wink.svg | 2 +- .../svgs/regular/face-grin-tongue.svg | 2 +- .../svgs/regular/face-grin-wide.svg | 2 +- .../svgs/regular/face-grin-wink.svg | 2 +- .../svgs/regular/face-grin.svg | 2 +- .../svgs/regular/face-kiss-beam.svg | 2 +- .../svgs/regular/face-kiss-wink-heart.svg | 2 +- .../svgs/regular/face-kiss.svg | 2 +- .../svgs/regular/face-laugh-beam.svg | 2 +- .../svgs/regular/face-laugh-squint.svg | 2 +- .../svgs/regular/face-laugh-wink.svg | 2 +- .../svgs/regular/face-laugh.svg | 2 +- .../svgs/regular/face-meh-blank.svg | 2 +- .../svgs/regular/face-meh.svg | 2 +- .../svgs/regular/face-rolling-eyes.svg | 2 +- .../svgs/regular/face-sad-cry.svg | 2 +- .../svgs/regular/face-sad-tear.svg | 2 +- .../svgs/regular/face-smile-beam.svg | 2 +- .../svgs/regular/face-smile-wink.svg | 2 +- .../svgs/regular/face-smile.svg | 2 +- .../svgs/regular/face-surprise.svg | 2 +- .../svgs/regular/face-tired.svg | 2 +- .../svgs/regular/file-audio.svg | 2 +- .../svgs/regular/file-code.svg | 2 +- .../svgs/regular/file-excel.svg | 2 +- .../svgs/regular/file-image.svg | 2 +- .../svgs/regular/file-lines.svg | 2 +- .../svgs/regular/file-pdf.svg | 2 +- .../svgs/regular/file-powerpoint.svg | 2 +- .../svgs/regular/file-video.svg | 2 +- .../svgs/regular/file-word.svg | 2 +- .../svgs/regular/file-zipper.svg | 2 +- .../fontawesome-free/svgs/regular/file.svg | 2 +- .../fontawesome-free/svgs/regular/flag.svg | 2 +- .../svgs/regular/floppy-disk.svg | 2 +- .../svgs/regular/folder-open.svg | 2 +- .../fontawesome-free/svgs/regular/folder.svg | 2 +- .../svgs/regular/font-awesome.svg | 2 +- .../fontawesome-free/svgs/regular/futbol.svg | 2 +- .../fontawesome-free/svgs/regular/gem.svg | 2 +- .../svgs/regular/hand-back-fist.svg | 2 +- .../svgs/regular/hand-lizard.svg | 2 +- .../svgs/regular/hand-peace.svg | 2 +- .../svgs/regular/hand-point-down.svg | 2 +- .../svgs/regular/hand-point-left.svg | 2 +- .../svgs/regular/hand-point-right.svg | 2 +- .../svgs/regular/hand-point-up.svg | 2 +- .../svgs/regular/hand-pointer.svg | 2 +- .../svgs/regular/hand-scissors.svg | 2 +- .../svgs/regular/hand-spock.svg | 2 +- .../fontawesome-free/svgs/regular/hand.svg | 2 +- .../svgs/regular/handshake.svg | 2 +- .../svgs/regular/hard-drive.svg | 2 +- .../fontawesome-free/svgs/regular/heart.svg | 2 +- .../svgs/regular/hospital.svg | 2 +- .../svgs/regular/hourglass.svg | 2 +- .../svgs/regular/id-badge.svg | 2 +- .../fontawesome-free/svgs/regular/id-card.svg | 2 +- .../fontawesome-free/svgs/regular/image.svg | 2 +- .../fontawesome-free/svgs/regular/images.svg | 2 +- .../svgs/regular/keyboard.svg | 2 +- .../fontawesome-free/svgs/regular/lemon.svg | 2 +- .../svgs/regular/life-ring.svg | 2 +- .../svgs/regular/lightbulb.svg | 2 +- .../fontawesome-free/svgs/regular/map.svg | 2 +- .../fontawesome-free/svgs/regular/message.svg | 2 +- .../svgs/regular/money-bill-1.svg | 2 +- .../fontawesome-free/svgs/regular/moon.svg | 2 +- .../svgs/regular/newspaper.svg | 2 +- .../svgs/regular/note-sticky.svg | 2 +- .../svgs/regular/object-group.svg | 2 +- .../svgs/regular/object-ungroup.svg | 2 +- .../svgs/regular/paper-plane.svg | 2 +- .../svgs/regular/pen-to-square.svg | 2 +- .../svgs/regular/rectangle-list.svg | 2 +- .../svgs/regular/rectangle-xmark.svg | 2 +- .../svgs/regular/registered.svg | 2 +- .../svgs/regular/share-from-square.svg | 2 +- .../svgs/regular/snowflake.svg | 2 +- .../svgs/regular/square-caret-down.svg | 2 +- .../svgs/regular/square-caret-left.svg | 2 +- .../svgs/regular/square-caret-right.svg | 2 +- .../svgs/regular/square-caret-up.svg | 2 +- .../svgs/regular/square-check.svg | 2 +- .../svgs/regular/square-full.svg | 2 +- .../svgs/regular/square-minus.svg | 2 +- .../svgs/regular/square-plus.svg | 2 +- .../fontawesome-free/svgs/regular/square.svg | 2 +- .../svgs/regular/star-half.svg | 2 +- .../fontawesome-free/svgs/regular/star.svg | 2 +- .../fontawesome-free/svgs/regular/sun.svg | 2 +- .../svgs/regular/thumbs-down.svg | 2 +- .../svgs/regular/thumbs-up.svg | 2 +- .../svgs/regular/trash-can.svg | 2 +- .../fontawesome-free/svgs/regular/user.svg | 2 +- .../svgs/regular/window-maximize.svg | 2 +- .../svgs/regular/window-minimize.svg | 2 +- .../svgs/regular/window-restore.svg | 2 +- .../fontawesome-free/svgs/solid/0.svg | 2 +- .../fontawesome-free/svgs/solid/1.svg | 2 +- .../fontawesome-free/svgs/solid/2.svg | 2 +- .../fontawesome-free/svgs/solid/3.svg | 2 +- .../fontawesome-free/svgs/solid/4.svg | 2 +- .../fontawesome-free/svgs/solid/5.svg | 2 +- .../fontawesome-free/svgs/solid/6.svg | 2 +- .../fontawesome-free/svgs/solid/7.svg | 2 +- .../fontawesome-free/svgs/solid/8.svg | 2 +- .../fontawesome-free/svgs/solid/9.svg | 2 +- .../fontawesome-free/svgs/solid/a.svg | 2 +- .../svgs/solid/address-book.svg | 2 +- .../svgs/solid/address-card.svg | 2 +- .../svgs/solid/align-center.svg | 2 +- .../svgs/solid/align-justify.svg | 2 +- .../svgs/solid/align-left.svg | 2 +- .../svgs/solid/align-right.svg | 2 +- .../fontawesome-free/svgs/solid/anchor.svg | 2 +- .../svgs/solid/angle-down.svg | 2 +- .../svgs/solid/angle-left.svg | 2 +- .../svgs/solid/angle-right.svg | 2 +- .../fontawesome-free/svgs/solid/angle-up.svg | 2 +- .../svgs/solid/angles-down.svg | 2 +- .../svgs/solid/angles-left.svg | 2 +- .../svgs/solid/angles-right.svg | 2 +- .../fontawesome-free/svgs/solid/angles-up.svg | 2 +- .../fontawesome-free/svgs/solid/ankh.svg | 2 +- .../svgs/solid/apple-whole.svg | 2 +- .../fontawesome-free/svgs/solid/archway.svg | 2 +- .../svgs/solid/arrow-down-1-9.svg | 2 +- .../svgs/solid/arrow-down-9-1.svg | 2 +- .../svgs/solid/arrow-down-a-z.svg | 2 +- .../svgs/solid/arrow-down-short-wide.svg | 2 +- .../svgs/solid/arrow-down-wide-short.svg | 2 +- .../svgs/solid/arrow-down-z-a.svg | 2 +- .../svgs/solid/arrow-down.svg | 2 +- .../svgs/solid/arrow-left.svg | 2 +- .../svgs/solid/arrow-pointer.svg | 2 +- .../svgs/solid/arrow-right.svg | 2 +- .../svgs/solid/arrow-rotate-left.svg | 2 +- .../svgs/solid/arrow-rotate-right.svg | 2 +- .../svgs/solid/arrow-trend-down.svg | 2 +- .../svgs/solid/arrow-trend-up.svg | 2 +- .../svgs/solid/arrow-up-1-9.svg | 2 +- .../svgs/solid/arrow-up-9-1.svg | 2 +- .../svgs/solid/arrow-up-a-z.svg | 2 +- .../svgs/solid/arrow-up-from-bracket.svg | 2 +- .../svgs/solid/arrow-up-short-wide.svg | 2 +- .../svgs/solid/arrow-up-wide-short.svg | 2 +- .../svgs/solid/arrow-up-z-a.svg | 2 +- .../fontawesome-free/svgs/solid/arrow-up.svg | 2 +- .../svgs/solid/arrows-rotate.svg | 2 +- .../fontawesome-free/svgs/solid/asterisk.svg | 2 +- .../fontawesome-free/svgs/solid/at.svg | 2 +- .../fontawesome-free/svgs/solid/atom.svg | 2 +- .../svgs/solid/audio-description.svg | 2 +- .../svgs/solid/austral-sign.svg | 2 +- .../fontawesome-free/svgs/solid/award.svg | 2 +- .../fontawesome-free/svgs/solid/b.svg | 2 +- .../svgs/solid/baby-carriage.svg | 2 +- .../fontawesome-free/svgs/solid/baby.svg | 2 +- .../svgs/solid/backward-fast.svg | 2 +- .../svgs/solid/backward-step.svg | 2 +- .../fontawesome-free/svgs/solid/backward.svg | 2 +- .../fontawesome-free/svgs/solid/bacon.svg | 2 +- .../fontawesome-free/svgs/solid/bacteria.svg | 2 +- .../fontawesome-free/svgs/solid/bacterium.svg | 2 +- .../svgs/solid/bag-shopping.svg | 2 +- .../fontawesome-free/svgs/solid/bahai.svg | 2 +- .../fontawesome-free/svgs/solid/baht-sign.svg | 2 +- .../svgs/solid/ban-smoking.svg | 2 +- .../fontawesome-free/svgs/solid/ban.svg | 2 +- .../fontawesome-free/svgs/solid/bandage.svg | 2 +- .../fontawesome-free/svgs/solid/bank.svg | 2 +- .../fontawesome-free/svgs/solid/barcode.svg | 2 +- .../svgs/solid/bars-staggered.svg | 2 +- .../fontawesome-free/svgs/solid/bars.svg | 2 +- .../fontawesome-free/svgs/solid/baseball.svg | 2 +- .../svgs/solid/basket-shopping.svg | 2 +- .../svgs/solid/basketball.svg | 2 +- .../fontawesome-free/svgs/solid/bath.svg | 2 +- .../svgs/solid/battery-empty.svg | 2 +- .../svgs/solid/battery-full.svg | 2 +- .../svgs/solid/battery-half.svg | 2 +- .../svgs/solid/battery-quarter.svg | 2 +- .../svgs/solid/battery-three-quarters.svg | 2 +- .../fontawesome-free/svgs/solid/bed-pulse.svg | 2 +- .../fontawesome-free/svgs/solid/bed.svg | 2 +- .../svgs/solid/beer-mug-empty.svg | 2 +- .../svgs/solid/bell-concierge.svg | 2 +- .../svgs/solid/bell-slash.svg | 2 +- .../fontawesome-free/svgs/solid/bell.svg | 2 +- .../svgs/solid/bezier-curve.svg | 2 +- .../fontawesome-free/svgs/solid/bicycle.svg | 2 +- .../svgs/solid/binoculars.svg | 2 +- .../fontawesome-free/svgs/solid/biohazard.svg | 2 +- .../svgs/solid/bitcoin-sign.svg | 2 +- .../svgs/solid/blender-phone.svg | 2 +- .../fontawesome-free/svgs/solid/blender.svg | 2 +- .../fontawesome-free/svgs/solid/blog.svg | 2 +- .../fontawesome-free/svgs/solid/bold.svg | 2 +- .../fontawesome-free/svgs/solid/bolt.svg | 2 +- .../fontawesome-free/svgs/solid/bomb.svg | 2 +- .../fontawesome-free/svgs/solid/bone.svg | 2 +- .../fontawesome-free/svgs/solid/bong.svg | 2 +- .../svgs/solid/book-atlas.svg | 2 +- .../svgs/solid/book-bible.svg | 2 +- .../svgs/solid/book-journal-whills.svg | 2 +- .../svgs/solid/book-medical.svg | 2 +- .../svgs/solid/book-open-reader.svg | 2 +- .../fontawesome-free/svgs/solid/book-open.svg | 2 +- .../svgs/solid/book-quran.svg | 2 +- .../svgs/solid/book-skull.svg | 2 +- .../fontawesome-free/svgs/solid/book.svg | 2 +- .../fontawesome-free/svgs/solid/bookmark.svg | 2 +- .../svgs/solid/border-all.svg | 2 +- .../svgs/solid/border-none.svg | 2 +- .../svgs/solid/border-top-left.svg | 2 +- .../svgs/solid/bowling-ball.svg | 2 +- .../svgs/solid/box-archive.svg | 2 +- .../fontawesome-free/svgs/solid/box-open.svg | 2 +- .../svgs/solid/box-tissue.svg | 2 +- .../fontawesome-free/svgs/solid/box.svg | 2 +- .../svgs/solid/boxes-stacked.svg | 2 +- .../fontawesome-free/svgs/solid/braille.svg | 2 +- .../fontawesome-free/svgs/solid/brain.svg | 2 +- .../svgs/solid/bread-slice.svg | 2 +- .../svgs/solid/briefcase-medical.svg | 2 +- .../fontawesome-free/svgs/solid/briefcase.svg | 2 +- .../fontawesome-free/svgs/solid/broom.svg | 2 +- .../fontawesome-free/svgs/solid/brush.svg | 2 +- .../fontawesome-free/svgs/solid/bug.svg | 2 +- .../fontawesome-free/svgs/solid/building.svg | 2 +- .../fontawesome-free/svgs/solid/bullhorn.svg | 2 +- .../fontawesome-free/svgs/solid/bullseye.svg | 2 +- .../fontawesome-free/svgs/solid/burger.svg | 2 +- .../svgs/solid/bus-simple.svg | 2 +- .../fontawesome-free/svgs/solid/bus.svg | 2 +- .../fontawesome-free/svgs/solid/c.svg | 2 +- .../svgs/solid/cake-candles.svg | 2 +- .../svgs/solid/calculator.svg | 2 +- .../svgs/solid/calendar-check.svg | 2 +- .../svgs/solid/calendar-day.svg | 2 +- .../svgs/solid/calendar-days.svg | 2 +- .../svgs/solid/calendar-minus.svg | 2 +- .../svgs/solid/calendar-plus.svg | 2 +- .../svgs/solid/calendar-week.svg | 2 +- .../svgs/solid/calendar-xmark.svg | 2 +- .../fontawesome-free/svgs/solid/calendar.svg | 2 +- .../svgs/solid/camera-retro.svg | 2 +- .../svgs/solid/camera-rotate.svg | 2 +- .../fontawesome-free/svgs/solid/camera.svg | 2 +- .../svgs/solid/campground.svg | 2 +- .../svgs/solid/candy-cane.svg | 2 +- .../fontawesome-free/svgs/solid/cannabis.svg | 2 +- .../fontawesome-free/svgs/solid/capsules.svg | 2 +- .../svgs/solid/car-battery.svg | 2 +- .../fontawesome-free/svgs/solid/car-crash.svg | 2 +- .../fontawesome-free/svgs/solid/car-rear.svg | 2 +- .../fontawesome-free/svgs/solid/car-side.svg | 2 +- .../fontawesome-free/svgs/solid/car.svg | 2 +- .../fontawesome-free/svgs/solid/caravan.svg | 2 +- .../svgs/solid/caret-down.svg | 2 +- .../svgs/solid/caret-left.svg | 2 +- .../svgs/solid/caret-right.svg | 2 +- .../fontawesome-free/svgs/solid/caret-up.svg | 2 +- .../fontawesome-free/svgs/solid/carrot.svg | 2 +- .../svgs/solid/cart-arrow-down.svg | 2 +- .../svgs/solid/cart-flatbed-suitcase.svg | 2 +- .../svgs/solid/cart-flatbed.svg | 2 +- .../fontawesome-free/svgs/solid/cart-plus.svg | 2 +- .../svgs/solid/cart-shopping.svg | 2 +- .../svgs/solid/cash-register.svg | 2 +- .../fontawesome-free/svgs/solid/cat.svg | 2 +- .../fontawesome-free/svgs/solid/cedi-sign.svg | 2 +- .../fontawesome-free/svgs/solid/cent-sign.svg | 2 +- .../svgs/solid/certificate.svg | 2 +- .../fontawesome-free/svgs/solid/chair.svg | 2 +- .../svgs/solid/chalkboard-user.svg | 2 +- .../svgs/solid/chalkboard.svg | 2 +- .../svgs/solid/champagne-glasses.svg | 2 +- .../svgs/solid/charging-station.svg | 2 +- .../svgs/solid/chart-area.svg | 2 +- .../fontawesome-free/svgs/solid/chart-bar.svg | 2 +- .../svgs/solid/chart-gantt.svg | 2 +- .../svgs/solid/chart-line.svg | 2 +- 1000 files changed, 9828 insertions(+), 7954 deletions(-) diff --git a/assets/admin/css/autocomplete.css b/assets/admin/css/autocomplete.css index 3ef95d15..69c94e73 100644 --- a/assets/admin/css/autocomplete.css +++ b/assets/admin/css/autocomplete.css @@ -14,7 +14,7 @@ select.admin-autocomplete { .select2-container--admin-autocomplete.select2-container--focus .select2-selection, .select2-container--admin-autocomplete.select2-container--open .select2-selection { - border-color: #999; + border-color: var(--body-quiet-color); min-height: 30px; } @@ -29,13 +29,13 @@ select.admin-autocomplete { } .select2-container--admin-autocomplete .select2-selection--single { - background-color: #fff; - border: 1px solid #ccc; + 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: #444; + color: var(--body-fg); line-height: 30px; } @@ -46,7 +46,7 @@ select.admin-autocomplete { } .select2-container--admin-autocomplete .select2-selection--single .select2-selection__placeholder { - color: #999; + color: var(--body-quiet-color); } .select2-container--admin-autocomplete .select2-selection--single .select2-selection__arrow { @@ -80,7 +80,7 @@ select.admin-autocomplete { } .select2-container--admin-autocomplete.select2-container--disabled .select2-selection--single { - background-color: #eee; + background-color: var(--darkened-bg); cursor: default; } @@ -94,8 +94,8 @@ select.admin-autocomplete { } .select2-container--admin-autocomplete .select2-selection--multiple { - background-color: white; - border: 1px solid #ccc; + background-color: var(--body-bg); + border: 1px solid var(--border-color); border-radius: 4px; cursor: text; } @@ -104,8 +104,10 @@ select.admin-autocomplete { box-sizing: border-box; list-style: none; margin: 0; - padding: 0 5px; + padding: 0 10px 5px 5px; width: 100%; + display: flex; + flex-wrap: wrap; } .select2-container--admin-autocomplete .select2-selection--multiple .select2-selection__rendered li { @@ -113,7 +115,7 @@ select.admin-autocomplete { } .select2-container--admin-autocomplete .select2-selection--multiple .select2-selection__placeholder { - color: #999; + color: var(--body-quiet-color); margin-top: 5px; float: left; } @@ -123,11 +125,13 @@ select.admin-autocomplete { float: right; font-weight: bold; margin: 5px; + position: absolute; + right: 0; } .select2-container--admin-autocomplete .select2-selection--multiple .select2-selection__choice { - background-color: #e4e4e4; - border: 1px solid #ccc; + background-color: var(--darkened-bg); + border: 1px solid var(--border-color); border-radius: 4px; cursor: default; float: left; @@ -137,7 +141,7 @@ select.admin-autocomplete { } .select2-container--admin-autocomplete .select2-selection--multiple .select2-selection__choice__remove { - color: #999; + color: var(--body-quiet-color); cursor: pointer; display: inline-block; font-weight: bold; @@ -145,7 +149,7 @@ select.admin-autocomplete { } .select2-container--admin-autocomplete .select2-selection--multiple .select2-selection__choice__remove:hover { - color: #333; + 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 { @@ -163,12 +167,12 @@ select.admin-autocomplete { } .select2-container--admin-autocomplete.select2-container--focus .select2-selection--multiple { - border: solid #999 1px; + border: solid var(--body-quiet-color) 1px; outline: 0; } .select2-container--admin-autocomplete.select2-container--disabled .select2-selection--multiple { - background-color: #eee; + background-color: var(--darkened-bg); cursor: default; } @@ -186,12 +190,20 @@ select.admin-autocomplete { 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 { - border: 1px solid #ccc; + 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; @@ -201,6 +213,8 @@ select.admin-autocomplete { .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] { @@ -208,11 +222,12 @@ select.admin-autocomplete { } .select2-container--admin-autocomplete .select2-results__option[aria-disabled=true] { - color: #999; + color: var(--body-quiet-color); } .select2-container--admin-autocomplete .select2-results__option[aria-selected=true] { - background-color: #ddd; + background-color: var(--selected-bg); + color: var(--body-fg); } .select2-container--admin-autocomplete .select2-results__option .select2-results__option { @@ -249,8 +264,8 @@ select.admin-autocomplete { } .select2-container--admin-autocomplete .select2-results__option--highlighted[aria-selected] { - background-color: #79aec8; - color: white; + background-color: var(--primary); + color: var(--primary-fg); } .select2-container--admin-autocomplete .select2-results__group { diff --git a/assets/admin/css/base.css b/assets/admin/css/base.css index c4285195..1cb3acdb 100644 --- a/assets/admin/css/base.css +++ b/assets/admin/css/base.css @@ -4,6 +4,93 @@ @import url(fonts.css); +/* VARIABLE DEFINITIONS */ +:root { + --primary: #79aec8; + --secondary: #417690; + --accent: #f5dd5d; + --primary-fg: #fff; + + --body-fg: #333; + --body-bg: #fff; + --body-quiet-color: #666; + --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: var(--primary); + + --link-fg: #447e9b; + --link-hover-color: #036; + --link-selected-fg: #5b80b2; + + --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(--primary); + --button-hover-bg: #609ab6; + --default-button-bg: var(--secondary); + --default-button-hover-bg: #205067; + --close-button-bg: #888; /* Previously #bbb, contrast 1.92 */ + --close-button-hover-bg: #747474; + --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); +} + +@media (prefers-color-scheme: dark) { + :root { + --primary: #264b5d; + --primary-fg: #eee; + + --body-fg: #eeeeee; + --body-bg: #121212; + --body-quiet-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; + } +} + html, body { height: 100%; } @@ -13,19 +100,20 @@ body { padding: 0; font-size: 14px; font-family: "Roboto","Lucida Grande","DejaVu Sans","Bitstream Vera Sans",Verdana,Arial,sans-serif; - color: #333; - background: #fff; + color: var(--body-fg); + background: var(--body-bg); } /* LINKS */ a:link, a:visited { - color: #447e9b; + color: var(--link-fg); text-decoration: none; + transition: color 0.15s, background 0.15s; } a:focus, a:hover { - color: #036; + color: var(--link-hover-color); } a:focus { @@ -37,7 +125,7 @@ a img { } a.section:link, a.section:visited { - color: #fff; + color: var(--header-link-color); text-decoration: none; } @@ -64,7 +152,7 @@ h1 { margin: 0 0 20px; font-weight: 300; font-size: 20px; - color: #666; + color: var(--body-quiet-color); } h2 { @@ -80,7 +168,7 @@ h2.subhead { h3 { font-size: 14px; margin: .8em 0 .3em 0; - color: #666; + color: var(--body-quiet-color); font-weight: bold; } @@ -93,7 +181,7 @@ h4 { h5 { font-size: 10px; margin: 1.5em 0 .5em 0; - color: #666; + color: var(--body-quiet-color); text-transform: uppercase; letter-spacing: 1px; } @@ -131,7 +219,7 @@ fieldset { min-width: 0; padding: 0; border: none; - border-top: 1px solid #eee; + border-top: 1px solid var(--hairline-color); } blockquote { @@ -144,14 +232,14 @@ blockquote { code, pre { font-family: "Bitstream Vera Sans Mono", Monaco, "Courier New", Courier, monospace; - color: #666; + color: var(--body-quiet-color); font-size: 12px; overflow-x: auto; } pre.literal-block { margin: 10px; - background: #eee; + background: var(--darkened-bg); padding: 6px 8px; } @@ -161,8 +249,8 @@ code strong { hr { clear: both; - color: #eee; - background-color: #eee; + color: var(--hairline-color); + background-color: var(--hairline-color); height: 1px; border: none; margin: 0; @@ -183,7 +271,7 @@ hr { .help, p.help, form p.help, div.help, form div.help, div.help li { font-size: 11px; - color: #999; + color: var(--body-quiet-color); } div.help ul { @@ -199,7 +287,7 @@ p img, h1 img, h2 img, h3 img, h4 img, td img { } .quiet, a.quiet:link, a.quiet:visited { - color: #999; + color: var(--body-quiet-color); font-weight: normal; } @@ -211,20 +299,23 @@ p img, h1 img, h2 img, h3 img, h4 img, td img { white-space: nowrap; } +.hidden { + display: none; +} + /* TABLES */ table { border-collapse: collapse; - border-color: #ccc; + border-color: var(--border-color); } td, th { font-size: 13px; line-height: 16px; - border-bottom: 1px solid #eee; + border-bottom: 1px solid var(--hairline-color); vertical-align: top; padding: 8px; - font-family: "Roboto", "Lucida Grande", Verdana, Arial, sans-serif; } th { @@ -234,37 +325,37 @@ th { thead th, tfoot td { - color: #666; + color: var(--body-quiet-color); padding: 5px 10px; font-size: 11px; - background: #fff; + background: var(--body-bg); border: none; - border-top: 1px solid #eee; - border-bottom: 1px solid #eee; + border-top: 1px solid var(--hairline-color); + border-bottom: 1px solid var(--hairline-color); } tfoot td { border-bottom: none; - border-top: 1px solid #eee; + border-top: 1px solid var(--hairline-color); } thead th.required { - color: #000; + color: var(--body-loud-color); } tr.alt { - background: #f6f6f6; + background: var(--darkened-bg); } tr:nth-child(odd), .row-form-errors { - background: #fff; + 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: #f9f9f9; + background: var(--darkened-bg); } /* SORTABLE TABLES */ @@ -273,15 +364,15 @@ thead th { padding: 5px 10px; line-height: normal; text-transform: uppercase; - background: #f6f6f6; + background: var(--darkened-bg); } thead th a:link, thead th a:visited { - color: #666; + color: var(--body-quiet-color); } thead th.sorted { - background: #eee; + background: var(--selected-bg); } thead th.sorted .text { @@ -300,7 +391,7 @@ table thead th .text a { } table thead th .text a:focus, table thead th .text a:hover { - background: #eee; + background: var(--selected-bg); } thead th.sorted a.sortremove { @@ -347,12 +438,12 @@ table thead th.sorted .sortoptions a.sortremove:after { left: 3px; font-weight: 200; font-size: 18px; - color: #999; + color: var(--body-quiet-color); } table thead th.sorted .sortoptions a.sortremove:focus:after, table thead th.sorted .sortoptions a.sortremove:hover:after { - color: #447e9b; + color: var(--link-fg); } table thead th.sorted .sortoptions a.sortremove:focus, @@ -399,16 +490,18 @@ textarea { input[type=text], input[type=password], input[type=email], input[type=url], input[type=number], input[type=tel], textarea, select, .vTextField { - border: 1px solid #ccc; + border: 1px solid var(--border-color); border-radius: 4px; padding: 5px 6px; margin-top: 0; + color: var(--body-fg); + background-color: var(--body-bg); } 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: #999; + border-color: var(--body-quiet-color); } select { @@ -424,12 +517,13 @@ select[multiple] { /* FORM BUTTONS */ .button, input[type=submit], input[type=button], .submit-row input, a.button { - background: #79aec8; + background: var(--button-bg); padding: 10px 15px; border: none; border-radius: 4px; - color: #fff; + color: var(--button-fg); cursor: pointer; + transition: background 0.15s; } a.button { @@ -439,7 +533,7 @@ a.button { .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: #609ab6; + background: var(--button-hover-bg); } .button[disabled], input[type=submit][disabled], input[type=button][disabled] { @@ -450,13 +544,13 @@ a.button { float: right; border: none; font-weight: 400; - background: #417690; + 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: #205067; + background: var(--default-button-hover-bg); } .button[disabled].default, @@ -471,7 +565,7 @@ input[type=button][disabled].default { .module { border: none; margin-bottom: 30px; - background: #fff; + background: var(--body-bg); } .module p, .module ul, .module h3, .module h4, .module dl, .module pre { @@ -497,8 +591,8 @@ input[type=button][disabled].default { font-weight: 400; font-size: 13px; text-align: left; - background: #79aec8; - color: #fff; + background: var(--primary); + color: var(--header-link-color); } .module caption, @@ -525,18 +619,18 @@ ul.messagelist li { font-size: 13px; padding: 10px 10px 10px 65px; margin: 0 0 10px 0; - background: #dfd url(../img/icon-yes.svg) 40px 12px no-repeat; + background: var(--message-success-bg) url(../img/icon-yes.svg) 40px 12px no-repeat; background-size: 16px auto; - color: #333; + color: var(--body-fg); } ul.messagelist li.warning { - background: #ffc url(../img/icon-alert.svg) 40px 14px no-repeat; + background: var(--message-warning-bg) url(../img/icon-alert.svg) 40px 14px no-repeat; background-size: 14px auto; } ul.messagelist li.error { - background: #ffefef url(../img/icon-no.svg) 40px 12px no-repeat; + background: var(--message-error-bg) url(../img/icon-no.svg) 40px 12px no-repeat; background-size: 16px auto; } @@ -546,24 +640,26 @@ ul.messagelist li.error { display: block; padding: 10px 12px; margin: 0 0 10px 0; - color: #ba2121; - border: 1px solid #ba2121; + color: var(--error-fg); + border: 1px solid var(--error-fg); border-radius: 4px; - background-color: #fff; + background-color: var(--body-bg); background-position: 5px 12px; + overflow-wrap: break-word; } ul.errorlist { margin: 0 0 4px; padding: 0; - color: #ba2121; - background: #fff; + color: var(--error-fg); + background: var(--body-bg); } ul.errorlist li { font-size: 13px; display: block; margin-bottom: 4px; + overflow-wrap: break-word; } ul.errorlist li:first-child { @@ -587,7 +683,7 @@ td ul.errorlist li { .form-row.errors { margin: 0; border: none; - border-bottom: 1px solid #eee; + border-bottom: 1px solid var(--hairline-color); background: none; } @@ -597,7 +693,7 @@ td ul.errorlist li { .errors input, .errors select, .errors textarea, td ul.errorlist + input, td ul.errorlist + select, td ul.errorlist + textarea { - border: 1px solid #ba2121; + border: 1px solid var(--error-fg); } .description { @@ -608,20 +704,19 @@ td ul.errorlist + input, td ul.errorlist + select, td ul.errorlist + textarea { /* BREADCRUMBS */ div.breadcrumbs { - background: #79aec8; + background: var(--breadcrumbs-bg); padding: 10px 40px; border: none; - font-size: 14px; - color: #c4dce8; + color: var(--breadcrumbs-fg); text-align: left; } div.breadcrumbs a { - color: #fff; + color: var(--breadcrumbs-link-fg); } div.breadcrumbs a:focus, div.breadcrumbs a:hover { - color: #c4dce8; + color: var(--breadcrumbs-fg); } /* ACTION ICONS */ @@ -647,11 +742,11 @@ div.breadcrumbs a:focus, div.breadcrumbs a:hover { } a.deletelink:link, a.deletelink:visited { - color: #CC3434; + color: #CC3434; /* XXX Probably unused? */ } a.deletelink:focus, a.deletelink:hover { - color: #993333; + color: #993333; /* XXX Probably unused? */ text-decoration: none; } @@ -666,14 +761,6 @@ a.deletelink:focus, a.deletelink:hover { margin-top: -48px; } -.form-row .object-tools { - margin-top: 5px; - margin-bottom: 5px; - float: none; - height: 2em; - padding-left: 3.5em; -} - .object-tools li { display: block; float: left; @@ -689,29 +776,29 @@ a.deletelink:focus, a.deletelink:hover { display: block; float: left; padding: 3px 12px; - background: #999; + background: var(--object-tools-bg); + color: var(--object-tools-fg); font-weight: 400; font-size: 11px; text-transform: uppercase; letter-spacing: 0.5px; - color: #fff; } .object-tools a:focus, .object-tools a:hover { - background-color: #417690; + background-color: var(--object-tools-hover-bg); } .object-tools a:focus{ text-decoration: none; } -.object-tools a.viewsitelink, .object-tools a.golink,.object-tools a.addlink { +.object-tools a.viewsitelink, .object-tools a.addlink { background-repeat: no-repeat; background-position: right 7px center; padding-right: 26px; } -.object-tools a.viewsitelink, .object-tools a.golink { +.object-tools a.viewsitelink { background-image: url(../img/tooltag-arrowright.svg); } @@ -813,13 +900,13 @@ table#change-history tbody th { justify-content: space-between; align-items: center; padding: 10px 40px; - background: #417690; - color: #ffc; + background: var(--header-bg); + color: var(--header-color); overflow: hidden; } #header a:link, #header a:visited { - color: #fff; + color: var(--header-link-color); } #header a:focus , #header a:hover { @@ -835,11 +922,11 @@ table#change-history tbody th { margin: 0 20px 0 0; font-weight: 300; font-size: 24px; - color: #f5dd5d; + color: var(--accent); } #branding h1, #branding h1 a:link, #branding h1 a:visited { - color: #f5dd5d; + color: var(--accent); } #branding h2 { @@ -847,7 +934,7 @@ table#change-history tbody th { font-size: 14px; margin: -8px 0 8px 0; font-weight: normal; - color: #ffc; + color: var(--header-color); } #branding a:hover { @@ -871,14 +958,14 @@ table#change-history tbody th { #user-tools a:focus, #user-tools a:hover { text-decoration: none; - border-bottom-color: #79aec8; - color: #79aec8; + border-bottom-color: var(--primary); + color: var(--primary); } /* SIDEBAR */ #content-related { - background: #f8f8f8; + background: var(--darkened-bg); } #content-related .module { @@ -886,8 +973,7 @@ table#change-history tbody th { } #content-related h3 { - font-size: 14px; - color: #666; + color: var(--body-quiet-color); padding: 0 16px; margin: 0 0 16px; } @@ -916,22 +1002,22 @@ table#change-history tbody th { background: none; padding: 16px; margin-bottom: 16px; - border-bottom: 1px solid #eaeaea; + border-bottom: 1px solid var(--hairline-color); font-size: 18px; - color: #333; + color: var(--body-fg); } .delete-confirmation form input[type="submit"] { - background: #ba2121; + background: var(--delete-button-bg); border-radius: 4px; padding: 10px 15px; - color: #fff; + 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: #a41515; + background: var(--delete-button-hover-bg); } .delete-confirmation form .cancel-link { @@ -939,17 +1025,17 @@ table#change-history tbody th { vertical-align: middle; height: 15px; line-height: 15px; - background: #ddd; border-radius: 4px; padding: 10px 15px; - color: #333; + 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: #ccc; + background: var(--close-button-hover-bg); } /* POPUP */ diff --git a/assets/admin/css/changelists.css b/assets/admin/css/changelists.css index 7b8b9c77..a4baf329 100644 --- a/assets/admin/css/changelists.css +++ b/assets/admin/css/changelists.css @@ -40,13 +40,13 @@ } #changelist .toplinks { - border-bottom: 1px solid #ddd; + border-bottom: 1px solid var(--hairline-color); } #changelist .paginator { - color: #666; - border-bottom: 1px solid #eee; - background: #fff; + color: var(--body-quiet-color); + border-bottom: 1px solid var(--hairline-color); + background: var(--body-bg); overflow: hidden; } @@ -68,7 +68,7 @@ } #changelist table tfoot { - color: #666; + color: var(--body-quiet-color); } /* TOOLBAR */ @@ -76,22 +76,22 @@ #toolbar { padding: 8px 10px; margin-bottom: 15px; - border-top: 1px solid #eee; - border-bottom: 1px solid #eee; - background: #f8f8f8; - color: #666; + 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: 14px; padding: 5px; - color: #333; + color: var(--body-fg); } #toolbar #searchbar { height: 19px; - border: 1px solid #ccc; + border: 1px solid var(--border-color); padding: 2px 5px; margin: 0; vertical-align: top; @@ -100,24 +100,24 @@ } #toolbar #searchbar:focus { - border-color: #999; + border-color: var(--body-quiet-color); } #toolbar form input[type="submit"] { - border: 1px solid #ccc; + border: 1px solid var(--border-color); font-size: 13px; padding: 4px 8px; margin: 0; vertical-align: middle; - background: #fff; + background: var(--body-bg); box-shadow: 0 -15px 20px -10px rgba(0, 0, 0, 0.15) inset; cursor: pointer; - color: #333; + color: var(--body-fg); } #toolbar form input[type="submit"]:focus, #toolbar form input[type="submit"]:hover { - border-color: #999; + border-color: var(--body-quiet-color); } #changelist-search img { @@ -125,12 +125,16 @@ margin-right: 4px; } +#changelist-search .help { + word-break: break-word; +} + /* FILTER COLUMN */ #changelist-filter { + flex: 0 0 240px; order: 1; - width: 240px; - background: #f8f8f8; + background: var(--darkened-bg); border-left: none; margin: 0 0 0 30px; } @@ -146,7 +150,6 @@ #changelist-filter h3 { font-weight: 400; - font-size: 14px; padding: 0 15px; margin-bottom: 10px; } @@ -154,7 +157,7 @@ #changelist-filter ul { margin: 5px 0; padding: 0 15px 15px; - border-bottom: 1px solid #eaeaea; + border-bottom: 1px solid var(--hairline-color); } #changelist-filter ul:last-child { @@ -169,31 +172,31 @@ #changelist-filter a { display: block; - color: #999; + color: var(--body-quiet-color); text-overflow: ellipsis; overflow-x: hidden; } #changelist-filter li.selected { - border-left: 5px solid #eaeaea; + border-left: 5px solid var(--hairline-color); padding-left: 10px; margin-left: -15px; } #changelist-filter li.selected a { - color: #5b80b2; + 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: #036; + color: var(--link-hover-color); } #changelist-filter #changelist-filter-clear a { font-size: 13px; padding-bottom: 10px; - border-bottom: 1px solid #eaeaea; + border-bottom: 1px solid var(--hairline-color); } /* DATE DRILLDOWN */ @@ -214,12 +217,12 @@ } .change-list ul.toplinks .date-back a { - color: #999; + color: var(--body-quiet-color); } .change-list ul.toplinks .date-back a:focus, .change-list ul.toplinks .date-back a:hover { - color: #036; + color: var(--link-hover-color); } /* PAGINATOR */ @@ -230,26 +233,26 @@ padding-bottom: 10px; line-height: 22px; margin: 0; - border-top: 1px solid #ddd; + border-top: 1px solid var(--hairline-color); width: 100%; } .paginator a:link, .paginator a:visited { padding: 2px 6px; - background: #79aec8; + background: var(--button-bg); text-decoration: none; - color: #fff; + color: var(--button-fg); } .paginator a.showall { border: none; background: none; - color: #5b80b2; + color: var(--link-fg); } .paginator a.showall:focus, .paginator a.showall:hover { background: none; - color: #036; + color: var(--link-hover-color); } .paginator .end { @@ -265,7 +268,7 @@ .paginator a:focus, .paginator a:hover { color: white; - background: #036; + background: var(--link-hover-color); } /* ACTIONS */ @@ -280,22 +283,22 @@ } #changelist table tbody tr.selected { - background-color: #FFFFCC; + background-color: var(--selected-row); } #changelist .actions { padding: 10px; - background: #fff; + background: var(--body-bg); border-top: none; border-bottom: none; line-height: 24px; - color: #999; + color: var(--body-quiet-color); width: 100%; } -#changelist .actions.selected { - background: #fffccf; - border-top: 1px solid #fffee8; +#changelist .actions.selected { /* XXX Probably unused? */ + background: var(--body-bg); + border-top: 1px solid var(--body-bg); border-bottom: 1px solid #edecd6; } @@ -305,7 +308,6 @@ #changelist .actions span.question { font-size: 13px; margin: 0 0.5em; - display: none; } #changelist .actions:last-child { @@ -315,9 +317,8 @@ #changelist .actions select { vertical-align: top; height: 24px; - background: none; - color: #000; - border: 1px solid #ccc; + color: var(--body-fg); + border: 1px solid var(--border-color); border-radius: 4px; font-size: 14px; padding: 0 0 0 4px; @@ -326,7 +327,7 @@ } #changelist .actions select:focus { - border-color: #999; + border-color: var(--body-quiet-color); } #changelist .actions label { @@ -337,18 +338,18 @@ #changelist .actions .button { font-size: 13px; - border: 1px solid #ccc; + border: 1px solid var(--border-color); border-radius: 4px; - background: #fff; + background: var(--body-bg); box-shadow: 0 -15px 20px -10px rgba(0, 0, 0, 0.15) inset; cursor: pointer; height: 24px; line-height: 1; padding: 4px 8px; margin: 0; - color: #333; + color: var(--body-fg); } #changelist .actions .button:focus, #changelist .actions .button:hover { - border-color: #999; + border-color: var(--body-quiet-color); } diff --git a/assets/admin/css/forms.css b/assets/admin/css/forms.css index 89d57482..5007d45b 100644 --- a/assets/admin/css/forms.css +++ b/assets/admin/css/forms.css @@ -6,7 +6,7 @@ overflow: hidden; padding: 10px; font-size: 13px; - border-bottom: 1px solid #eee; + border-bottom: 1px solid var(--hairline-color); } .form-row img, .form-row input { @@ -22,21 +22,17 @@ form .form-row p { padding-left: 0; } -.hidden { - display: none; -} - /* FORM LABELS */ label { font-weight: normal; - color: #666; + color: var(--body-quiet-color); font-size: 13px; } .required label, label.required { font-weight: bold; - color: #333; + color: var(--body-fg); } /* RADIO BUTTONS */ @@ -88,6 +84,7 @@ form ul.inline li { margin-top: 0; margin-bottom: 0; margin-left: 170px; + overflow-wrap: break-word; } .aligned ul label { @@ -219,24 +216,24 @@ fieldset.collapsed h2, fieldset.collapsed { } fieldset.collapsed { - border: 1px solid #eee; + border: 1px solid var(--hairline-color); border-radius: 4px; overflow: hidden; } fieldset.collapsed h2 { - background: #f8f8f8; - color: #666; + background: var(--darkened-bg); + color: var(--body-quiet-color); } fieldset .collapse-toggle { - color: #fff; + color: var(--header-link-color); } fieldset.collapsed .collapse-toggle { background: transparent; display: inline; - color: #447e9b; + color: var(--link-fg); } /* MONOSPACE TEXTAREAS */ @@ -250,8 +247,8 @@ fieldset.monospace textarea { .submit-row { padding: 12px 14px; margin: 0 0 20px; - background: #f8f8f8; - border: 1px solid #eee; + background: var(--darkened-bg); + border: 1px solid var(--hairline-color); border-radius: 4px; text-align: right; overflow: hidden; @@ -283,35 +280,35 @@ body.popup .submit-row { .submit-row a.deletelink { display: block; - background: #ba2121; + background: var(--delete-button-bg); border-radius: 4px; padding: 10px 15px; height: 15px; line-height: 15px; - color: #fff; + color: var(--button-fg); } .submit-row a.closelink { display: inline-block; - background: #bbbbbb; + background: var(--close-button-bg); border-radius: 4px; padding: 10px 15px; height: 15px; line-height: 15px; margin: 0 0 0 5px; - color: #fff; + color: var(--button-fg); } .submit-row a.deletelink:focus, .submit-row a.deletelink:hover, .submit-row a.deletelink:active { - background: #a41515; + background: var(--delete-button-hover-bg); } .submit-row a.closelink:focus, .submit-row a.closelink:hover, .submit-row a.closelink:active { - background: #aaaaaa; + background: var(--close-button-hover-bg); } /* CUSTOM FORM FIELDS */ @@ -390,12 +387,12 @@ body.popup .submit-row { .inline-related h3 { margin: 0; - color: #666; + color: var(--body-quiet-color); padding: 5px; font-size: 13px; - background: #f8f8f8; - border-top: 1px solid #eee; - border-bottom: 1px solid #eee; + background: var(--darkened-bg); + border-top: 1px solid var(--hairline-color); + border-bottom: 1px solid var(--hairline-color); } .inline-related h3 span.delete { @@ -409,7 +406,7 @@ body.popup .submit-row { .inline-related fieldset { margin: 0; - background: #fff; + background: var(--body-bg); border: none; width: 100%; } @@ -421,7 +418,7 @@ body.popup .submit-row { text-align: left; font-weight: bold; background: #bcd; - color: #fff; + color: var(--body-bg); } .inline-group .tabular fieldset.module { @@ -460,7 +457,7 @@ body.popup .submit-row { overflow: hidden; font-size: 9px; font-weight: bold; - color: #666; + color: var(--body-quiet-color); _width: 700px; } @@ -477,15 +474,15 @@ body.popup .submit-row { .inline-group div.add-row, .inline-group .tabular tr.add-row td { - color: #666; - background: #f8f8f8; + color: var(--body-quiet-color); + background: var(--darkened-bg); padding: 8px 10px; - border-bottom: 1px solid #eee; + border-bottom: 1px solid var(--hairline-color); } .inline-group .tabular tr.add-row td { padding: 8px 10px; - border-bottom: 1px solid #eee; + border-bottom: 1px solid var(--hairline-color); } .inline-group ul.tools a.add, diff --git a/assets/admin/css/login.css b/assets/admin/css/login.css index 062b36e0..bf4ba8d3 100644 --- a/assets/admin/css/login.css +++ b/assets/admin/css/login.css @@ -1,7 +1,7 @@ /* LOGIN FORM */ .login { - background: #f8f8f8; + background: var(--darkened-bg); height: auto; } @@ -13,10 +13,11 @@ .login #header h1 { font-size: 18px; + margin: 0; } .login #header h1 a { - color: #fff; + color: var(--header-link-color); } .login #content { @@ -24,8 +25,8 @@ } .login #container { - background: #fff; - border: 1px solid #eaeaea; + background: var(--body-bg); + border: 1px solid var(--hairline-color); border-radius: 4px; overflow: hidden; width: 28em; @@ -34,44 +35,25 @@ height: auto; } -.login #content-main { - width: 100%; -} - .login .form-row { padding: 4px 0; - float: left; - width: 100%; - border-bottom: none; } .login .form-row label { - padding-right: 0.5em; + display: block; line-height: 2em; - font-size: 1em; - clear: both; - color: #333; } .login .form-row #id_username, .login .form-row #id_password { - clear: both; padding: 8px; width: 100%; box-sizing: border-box; } -.login span.help { - font-size: 10px; - display: block; -} - .login .submit-row { - clear: both; - padding: 1em 0 0 9.4em; + padding: 1em 0 0 0; margin: 0; - border: none; - background: none; - text-align: left; + text-align: center; } .login .password-reset-link { diff --git a/assets/admin/css/nav_sidebar.css b/assets/admin/css/nav_sidebar.css index 784d0874..0c590ff2 100644 --- a/assets/admin/css/nav_sidebar.css +++ b/assets/admin/css/nav_sidebar.css @@ -12,22 +12,23 @@ justify-content: center; flex: 0 0 23px; width: 23px; - border-right: 1px solid #eaeaea; - background-color: #ffffff; + border: 0; + border-right: 1px solid var(--hairline-color); + background-color: var(--body-bg); cursor: pointer; font-size: 20px; - color: #447e9b; + color: var(--link-fg); padding: 0; } [dir="rtl"] .toggle-nav-sidebar { - border-left: 1px solid #eaeaea; + border-left: 1px solid var(--hairline-color); border-right: 0; } .toggle-nav-sidebar:hover, .toggle-nav-sidebar:focus { - background-color: #f6f6f6; + background-color: var(--darkened-bg); } #nav-sidebar { @@ -36,13 +37,13 @@ left: -276px; margin-left: -276px; border-top: 1px solid transparent; - border-right: 1px solid #eaeaea; - background-color: #ffffff; + border-right: 1px solid var(--hairline-color); + background-color: var(--body-bg); overflow: auto; } [dir="rtl"] #nav-sidebar { - border-left: 1px solid #eaeaea; + border-left: 1px solid var(--hairline-color); border-right: 0; left: 0; margin-left: 0; @@ -59,13 +60,10 @@ } .main.shifted > #nav-sidebar { - left: 24px; margin-left: 0; } [dir="rtl"] .main.shifted > #nav-sidebar { - left: 0; - right: 24px; margin-right: 0; } @@ -91,12 +89,12 @@ #nav-sidebar .current-app .section:link, #nav-sidebar .current-app .section:visited { - color: #ffc; + color: var(--header-color); font-weight: bold; } #nav-sidebar .current-model { - background: #ffc; + background: var(--selected-row); } .main > #nav-sidebar + .content { @@ -117,3 +115,25 @@ 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/assets/admin/css/responsive.css b/assets/admin/css/responsive.css index ef968c23..8c6dd810 100644 --- a/assets/admin/css/responsive.css +++ b/assets/admin/css/responsive.css @@ -140,7 +140,7 @@ input[type="submit"], button { } #changelist .actions select { - background: #fff; + background: var(--body-bg); } #changelist .actions .button { @@ -157,7 +157,7 @@ input[type="submit"], button { } #changelist-filter { - width: 200px; + flex-basis: 200px; } .change-list .filtered .results, @@ -166,7 +166,7 @@ input[type="submit"], button { .filtered .actions, #changelist .paginator { - border-top-color: #eee; + border-top-color: var(--hairline-color); /* XXX Is this used at all? */ } #changelist .results + .paginator { @@ -213,7 +213,7 @@ input[type="submit"], button { fieldset .fieldBox + .fieldBox { margin-top: 10px; padding-top: 10px; - border-top: 1px solid #eee; + border-top: 1px solid var(--hairline-color); } textarea { @@ -399,11 +399,11 @@ input[type="submit"], button { .datetime .timezonewarning { display: block; font-size: 11px; - color: #999; + color: var(--body-quiet-color); } .datetimeshortcuts { - color: #ccc; + color: var(--border-color); /* XXX Redundant, .datetime span also sets #ccc */ } .form-row .datetime input.vDateField, .form-row .datetime input.vTimeField { @@ -655,7 +655,7 @@ input[type="submit"], button { margin-bottom: -3px; } - form .aligned ul.radiolist li + li { + form .aligned ul.radiolist:not(.inline) li + li { margin-top: 5px; } @@ -740,7 +740,7 @@ input[type="submit"], button { /* Inlines */ .inline-group[data-inline-type="stacked"] .inline-related { - border: 2px solid #eee; + border: 1px solid var(--hairline-color); border-radius: 4px; margin-top: 15px; overflow: auto; @@ -750,18 +750,19 @@ input[type="submit"], button { box-sizing: border-box; } - .inline-group[data-inline-type="stacked"] .inline-related + .inline-related { - margin-top: 30px; - } - .inline-group[data-inline-type="stacked"] .inline-related .module { padding: 0 10px; } - .inline-group[data-inline-type="stacked"] .inline-related .module .form-row:last-child { + .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; @@ -791,7 +792,7 @@ input[type="submit"], button { .inline-group[data-inline-type="stacked"] div.add-row { margin-top: 15px; - border: 1px solid #eee; + border: 1px solid var(--hairline-color); border-radius: 4px; } @@ -885,9 +886,7 @@ input[type="submit"], button { } .login .form-row label { - display: block; margin: 0 0 5px; - padding: 0; line-height: 1.2; } @@ -895,7 +894,7 @@ input[type="submit"], button { padding: 15px 0 0; } - .login br, .login .submit-row label { + .login br { display: none; } @@ -963,7 +962,7 @@ input[type="submit"], button { } .timelist a { - background: #fff; + background: var(--body-bg); padding: 4px; } diff --git a/assets/admin/css/rtl.css b/assets/admin/css/rtl.css index a40aad0c..0447f893 100644 --- a/assets/admin/css/rtl.css +++ b/assets/admin/css/rtl.css @@ -1,25 +1,3 @@ -body { - direction: rtl; -} - -/* LOGIN */ - -.login .form-row { - float: right; -} - -.login .form-row label { - float: right; - padding-left: 0.5em; - padding-right: 0; - text-align: left; -} - -.login .submit-row { - clear: both; - padding: 1em 9.4em 0 0; -} - /* GLOBAL */ th { @@ -119,7 +97,7 @@ thead th.sorted .text { border-left: none; padding-left: 10px; margin-left: 0; - border-right: 5px solid #eaeaea; + border-right: 5px solid var(--hairline-color); padding-right: 10px; margin-right: -15px; } diff --git a/assets/admin/css/widgets.css b/assets/admin/css/widgets.css index 14ef12db..c7d64566 100644 --- a/assets/admin/css/widgets.css +++ b/assets/admin/css/widgets.css @@ -22,26 +22,25 @@ } .selector-available h2, .selector-chosen h2 { - border: 1px solid #ccc; + border: 1px solid var(--border-color); border-radius: 4px 4px 0 0; } .selector-chosen h2 { - background: #79aec8; - color: #fff; + background: var(--primary); + color: var(--header-link-color); } .selector .selector-available h2 { - background: #f8f8f8; - color: #666; + background: var(--darkened-bg); + color: var(--body-quiet-color); } .selector .selector-filter { - background: white; - border: 1px solid #ccc; + border: 1px solid var(--border-color); border-width: 0 1px; padding: 8px; - color: #999; + color: var(--body-quiet-color); font-size: 10px; margin: 0; text-align: left; @@ -66,7 +65,7 @@ .selector ul.selector-chooser { float: left; width: 22px; - background-color: #eee; + background-color: var(--selected-bg); border-radius: 10px; margin: 10em 5px 0 5px; padding: 0; @@ -91,7 +90,7 @@ text-indent: -3000px; overflow: hidden; cursor: default; - opacity: 0.3; + opacity: 0.55; } .active.selector-add, .active.selector-remove { @@ -126,14 +125,14 @@ a.selector-chooseall, a.selector-clearall { overflow: hidden; font-weight: bold; line-height: 16px; - color: #666; + color: var(--body-quiet-color); text-decoration: none; - opacity: 0.3; + opacity: 0.55; } a.active.selector-chooseall:focus, a.active.selector-clearall:focus, a.active.selector-chooseall:hover, a.active.selector-clearall:hover { - color: #447e9b; + color: var(--link-fg); } a.active.selector-chooseall, a.active.selector-clearall { @@ -261,7 +260,7 @@ p.datetime { line-height: 20px; margin: 0; padding: 0; - color: #666; + color: var(--body-quiet-color); font-weight: bold; } @@ -269,7 +268,7 @@ p.datetime { white-space: nowrap; font-weight: normal; font-size: 11px; - color: #ccc; + color: var(--body-quiet-color); } .datetime input, .form-row .datetime input.vDateField, .form-row .datetime input.vTimeField { @@ -313,7 +312,7 @@ table p.datetime { .timezonewarning { font-size: 11px; - color: #999; + color: var(--body-quiet-color); } /* URL */ @@ -322,7 +321,7 @@ p.url { line-height: 20px; margin: 0; padding: 0; - color: #666; + color: var(--body-quiet-color); font-size: 11px; font-weight: bold; } @@ -337,7 +336,7 @@ p.file-upload { line-height: 20px; margin: 0; padding: 0; - color: #666; + color: var(--body-quiet-color); font-size: 11px; font-weight: bold; } @@ -355,7 +354,7 @@ p.file-upload { } span.clearable-file-input label { - color: #333; + color: var(--body-fg); font-size: 11px; display: inline; float: none; @@ -368,8 +367,9 @@ span.clearable-file-input label { font-size: 12px; width: 19em; text-align: center; - background: white; - border: 1px solid #ddd; + 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; @@ -397,20 +397,20 @@ span.clearable-file-input label { margin: 0; text-align: center; border-top: none; - background: #f5dd5d; font-weight: 700; font-size: 12px; color: #333; + background: var(--accent); } .calendar th { padding: 8px 5px; - background: #f8f8f8; - border-bottom: 1px solid #ddd; + background: var(--darkened-bg); + border-bottom: 1px solid var(--border-color); font-weight: 400; font-size: 12px; text-align: center; - color: #666; + color: var(--body-quiet-color); } .calendar td { @@ -418,17 +418,17 @@ span.clearable-file-input label { font-size: 12px; text-align: center; padding: 0; - border-top: 1px solid #eee; + border-top: 1px solid var(--hairline-color); border-bottom: none; } .calendar td.selected a { - background: #79aec8; - color: #fff; + background: var(--primary); + color: var(--button-fg); } .calendar td.nonday { - background: #f8f8f8; + background: var(--darkened-bg); } .calendar td.today a { @@ -440,17 +440,17 @@ span.clearable-file-input label { font-weight: 400; padding: 6px; text-decoration: none; - color: #444; + color: var(--body-quiet-color); } .calendar td a:focus, .timelist a:focus, .calendar td a:hover, .timelist a:hover { - background: #79aec8; + background: var(--primary); color: white; } .calendar td a:active, .timelist a:active { - background: #417690; + background: var(--header-bg); color: white; } @@ -464,16 +464,16 @@ span.clearable-file-input label { .calendarnav a:link, #calendarnav a:visited, #calendarnav a:focus, #calendarnav a:hover { - color: #999; + color: var(--body-quiet-color); } .calendar-shortcuts { - background: white; + background: var(--body-bg); + color: var(--body-quiet-color); font-size: 11px; line-height: 11px; - border-top: 1px solid #eee; + border-top: 1px solid var(--hairline-color); padding: 8px 0; - color: #ccc; } .calendarbox .calendarnav-previous, .calendarbox .calendarnav-next { @@ -511,8 +511,8 @@ span.clearable-file-input label { padding: 4px 0; font-size: 12px; background: #eee; - border-top: 1px solid #ddd; - color: #333; + border-top: 1px solid var(--border-color); + color: var(--body-fg); } .calendar-cancel:focus, .calendar-cancel:hover { diff --git a/assets/admin/js/SelectBox.js b/assets/admin/js/SelectBox.js index 1927b4ce..ace6d9df 100644 --- a/assets/admin/js/SelectBox.js +++ b/assets/admin/js/SelectBox.js @@ -13,6 +13,7 @@ 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) { @@ -22,6 +23,7 @@ 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 @@ -31,7 +33,7 @@ node.displayed = 1; const node_text = node.text.toLowerCase(); for (const token of tokens) { - if (node_text.indexOf(token) === -1) { + if (!node_text.includes(token)) { node.displayed = 0; break; // Once the first token isn't found we're done } diff --git a/assets/admin/js/actions.js b/assets/admin/js/actions.js index dae69920..20a5c143 100644 --- a/assets/admin/js/actions.js +++ b/assets/admin/js/actions.js @@ -1,154 +1,201 @@ /*global gettext, interpolate, ngettext*/ 'use strict'; { - const $ = django.jQuery; - let lastChecked; + function show(selector) { + document.querySelectorAll(selector).forEach(function(el) { + el.classList.remove('hidden'); + }); + } - $.fn.actions = function(opts) { - const options = $.extend({}, $.fn.actions.defaults, opts); - const actionCheckboxes = $(this); - let list_editable_changed = false; - const showQuestion = function() { - $(options.acrossClears).hide(); - $(options.acrossQuestions).show(); - $(options.allContainer).hide(); - }, - showClear = function() { - $(options.acrossClears).show(); - $(options.acrossQuestions).hide(); - $(options.actionContainer).toggleClass(options.selectedClass); - $(options.allContainer).show(); - $(options.counterContainer).hide(); - }, - reset = function() { - $(options.acrossClears).hide(); - $(options.acrossQuestions).hide(); - $(options.allContainer).hide(); - $(options.counterContainer).show(); - }, - clearAcross = function() { - reset(); - $(options.acrossInput).val(0); - $(options.actionContainer).removeClass(options.selectedClass); - }, - checker = function(checked) { - if (checked) { - showQuestion(); - } else { - reset(); - } - $(actionCheckboxes).prop("checked", checked) - .parent().parent().toggleClass(options.selectedClass, checked); - }, - updateCounter = function() { - const sel = $(actionCheckboxes).filter(":checked").length; - // data-actions-icnt is defined in the generated HTML - // and contains the total amount of objects in the queryset - const actions_icnt = $('.action-counter').data('actionsIcnt'); - $(options.counterContainer).html(interpolate( - ngettext('%(sel)s of %(cnt)s selected', '%(sel)s of %(cnt)s selected', sel), { - sel: sel, - cnt: actions_icnt - }, true)); - $(options.allToggle).prop("checked", function() { - let value; - if (sel === actionCheckboxes.length) { - value = true; - showQuestion(); - } else { - value = false; - clearAcross(); - } - return value; - }); - }; - // Show counter by default - $(options.counterContainer).show(); - // Check state of checkboxes and reinit state if needed - $(this).filter(":checked").each(function(i) { - $(this).parent().parent().toggleClass(options.selectedClass); - updateCounter(); - if ($(options.acrossInput).val() === 1) { - showClear(); - } + function hide(selector) { + document.querySelectorAll(selector).forEach(function(el) { + el.classList.add('hidden'); }); - $(options.allToggle).show().on('click', function() { - checker($(this).prop("checked")); - updateCounter(); + } + + 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; }); - $("a", options.acrossQuestions).on('click', function(event) { - event.preventDefault(); - $(options.acrossInput).val(1); - showClear(); + 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); }); - $("a", options.acrossClears).on('click', function(event) { - event.preventDefault(); - $(options.allToggle).prop("checked", false); - clearAcross(); - checker(0); - updateCounter(); - }); - lastChecked = null; - $(actionCheckboxes).on('click', function(event) { - if (!event) { event = window.event; } - const target = event.target ? event.target : event.srcElement; - if (lastChecked && $.data(lastChecked) !== $.data(target) && event.shiftKey === true) { - let inrange = false; - $(lastChecked).prop("checked", target.checked) - .parent().parent().toggleClass(options.selectedClass, target.checked); - $(actionCheckboxes).each(function() { - if ($.data(this) === $.data(lastChecked) || $.data(this) === $.data(target)) { - inrange = (inrange) ? false : true; - } - if (inrange) { - $(this).prop("checked", target.checked) - .parent().parent().toggleClass(options.selectedClass, target.checked); - } - }); - } - $(target).parent().parent().toggleClass(options.selectedClass, target.checked); - lastChecked = target; - updateCounter(); - }); - $('form#changelist-form table#result_list tr').on('change', 'td:gt(0) :input', function() { - list_editable_changed = true; - }); - $('form#changelist-form button[name="index"]').on('click', function(event) { - if (list_editable_changed) { - return confirm(gettext("You have unsaved changes on individual editable fields. If you run an action, your unsaved changes will be lost.")); - } - }); - $('form#changelist-form input[name="_save"]').on('click', function(event) { - let action_changed = false; - $('select option:selected', options.actionContainer).each(function() { - if ($(this).val()) { - action_changed = true; - } - }); - if (action_changed) { - if (list_editable_changed) { - return confirm(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.")); - } else { - return confirm(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.")); - } - } - }); - }; - /* Setup plugin defaults */ - $.fn.actions.defaults = { + } + + 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", - allToggle: "#action-toggle", + allToggleId: "action-toggle", selectedClass: "selected" }; - $(document).ready(function() { - const $actionsEls = $('tr input.action-select'); - if ($actionsEls.length > 0) { - $actionsEls.actions(); + + 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(); + } + } + }); + } + }; + + // 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/assets/admin/js/admin/DateTimeShortcuts.js b/assets/admin/js/admin/DateTimeShortcuts.js index 28de4797..9bad0f54 100644 --- a/assets/admin/js/admin/DateTimeShortcuts.js +++ b/assets/admin/js/admin/DateTimeShortcuts.js @@ -28,8 +28,7 @@ timezoneWarningClass: 'timezonewarning', // class of the warning for timezone mismatch timezoneOffset: 0, init: function() { - const body = document.getElementsByTagName('body')[0]; - const serverOffset = body.dataset.adminUtcOffset; + const serverOffset = document.body.dataset.adminUtcOffset; if (serverOffset) { const localOffset = new Date().getTimezoneOffset() * -60; DateTimeShortcuts.timezoneOffset = localOffset - serverOffset; @@ -48,8 +47,7 @@ }, // Return the current time while accounting for the server timezone. now: function() { - const body = document.getElementsByTagName('body')[0]; - const serverOffset = body.dataset.adminUtcOffset; + const serverOffset = document.body.dataset.adminUtcOffset; if (serverOffset) { const localNow = new Date(); const localOffset = localNow.getTimezoneOffset() * -60; diff --git a/assets/admin/js/admin/RelatedObjectLookups.js b/assets/admin/js/admin/RelatedObjectLookups.js index 8c95df7c..289e1cee 100644 --- a/assets/admin/js/admin/RelatedObjectLookups.js +++ b/assets/admin/js/admin/RelatedObjectLookups.js @@ -7,13 +7,9 @@ function showAdminPopup(triggeringLink, name_regexp, add_popup) { const name = triggeringLink.id.replace(name_regexp, ''); - let href = triggeringLink.href; + const href = new URL(triggeringLink.href); if (add_popup) { - if (href.indexOf('?') === -1) { - href += '?_popup=1'; - } else { - href += '&_popup=1'; - } + href.searchParams.set('_popup', 1); } const win = window.open(href, name, 'height=500,width=800,resizable=yes,scrollbars=yes'); win.focus(); diff --git a/assets/admin/js/autocomplete.js b/assets/admin/js/autocomplete.js index c922b303..6095abe2 100644 --- a/assets/admin/js/autocomplete.js +++ b/assets/admin/js/autocomplete.js @@ -1,25 +1,22 @@ 'use strict'; { const $ = django.jQuery; - const init = function($element, options) { - const settings = $.extend({ - ajax: { - data: function(params) { - return { - term: params.term, - page: params.page - }; - } - } - }, options); - $element.select2(settings); - }; - $.fn.djangoAdminSelect2 = function(options) { - const settings = $.extend({}, options); + $.fn.djangoAdminSelect2 = function() { $.each(this, function(i, element) { - const $element = $(element); - init($element, settings); + $(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; }; diff --git a/assets/admin/js/calendar.js b/assets/admin/js/calendar.js index 64598bbb..a62d10a7 100644 --- a/assets/admin/js/calendar.js +++ b/assets/admin/js/calendar.js @@ -21,6 +21,20 @@ depends on core.js for utility functions like removeChildren or quickElement 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: [ pgettext('one letter Sunday', 'S'), pgettext('one letter Monday', 'M'), diff --git a/assets/admin/js/cancel.js b/assets/admin/js/cancel.js index cfe06c27..3069c6f2 100644 --- a/assets/admin/js/cancel.js +++ b/assets/admin/js/cancel.js @@ -14,10 +14,11 @@ ready(function() { function handleClick(event) { event.preventDefault(); - if (window.location.search.indexOf('&_popup=1') === -1) { - window.history.back(); // Go back if not a popup. + const params = new URLSearchParams(window.location.search); + if (params.has('_popup')) { + window.close(); // Close the popup. } else { - window.close(); // Otherwise, close the popup. + window.history.back(); // Otherwise, go back. } } diff --git a/assets/admin/js/core.js b/assets/admin/js/core.js index 8ef27b34..afdae281 100644 --- a/assets/admin/js/core.js +++ b/assets/admin/js/core.js @@ -1,4 +1,4 @@ -// Core javascript helper functions +// Core JavaScript helper functions 'use strict'; // quickElement(tagType, parentReference [, textInChildNode, attribute, attributeValue ...]); @@ -85,6 +85,12 @@ function findPosY(obj) { return (this.getSeconds() < 10) ? '0' + this.getSeconds() : this.getSeconds(); }; + 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() @@ -93,6 +99,7 @@ function findPosY(obj) { Date.prototype.strftime = function(format) { const fields = { + b: this.getAbbrevMonthName(), B: this.getFullMonthName(), c: this.toString(), d: this.getTwoDigitDate(), diff --git a/assets/admin/js/inlines.js b/assets/admin/js/inlines.js index 82ec0272..d9a9032c 100644 --- a/assets/admin/js/inlines.js +++ b/assets/admin/js/inlines.js @@ -218,12 +218,10 @@ // instantiate a new SelectFilter instance for it. if (typeof SelectFilter !== 'undefined') { $('.selectfilter').each(function(index, value) { - const namearr = value.name.split('-'); - SelectFilter.init(value.id, namearr[namearr.length - 1], false); + SelectFilter.init(value.id, this.dataset.fieldName, false); }); $('.selectfilterstacked').each(function(index, value) { - const namearr = value.name.split('-'); - SelectFilter.init(value.id, namearr[namearr.length - 1], true); + SelectFilter.init(value.id, this.dataset.fieldName, true); }); } }; @@ -283,12 +281,10 @@ // If any SelectFilter widgets were added, instantiate a new instance. if (typeof SelectFilter !== "undefined") { $(".selectfilter").each(function(index, value) { - const namearr = value.name.split('-'); - SelectFilter.init(value.id, namearr[namearr.length - 1], false); + SelectFilter.init(value.id, this.dataset.fieldName, false); }); $(".selectfilterstacked").each(function(index, value) { - const namearr = value.name.split('-'); - SelectFilter.init(value.id, namearr[namearr.length - 1], true); + SelectFilter.init(value.id, this.dataset.fieldName, true); }); } }; diff --git a/assets/admin/js/nav_sidebar.js b/assets/admin/js/nav_sidebar.js index efaa7214..86cb1cf8 100644 --- a/assets/admin/js/nav_sidebar.js +++ b/assets/admin/js/nav_sidebar.js @@ -36,4 +36,58 @@ main.classList.toggle('shifted'); }); } + + 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/assets/admin/js/urlify.js b/assets/admin/js/urlify.js index 7faa6591..61dedb23 100644 --- a/assets/admin/js/urlify.js +++ b/assets/admin/js/urlify.js @@ -134,8 +134,7 @@ for (const lookup of ALL_DOWNCODE_MAPS) { Object.assign(Downcoder.map, lookup); } - Downcoder.chars = Object.keys(Downcoder.map); - Downcoder.regex = new RegExp(Downcoder.chars.join('|'), 'g'); + Downcoder.regex = new RegExp(Object.keys(Downcoder.map).join('|'), 'g'); } }; @@ -149,23 +148,9 @@ function URLify(s, num_chars, allowUnicode) { // changes, e.g., "Petty theft" to "petty-theft" - // remove all these words from the string before urlifying if (!allowUnicode) { s = downcode(s); } - const hasUnicodeChars = /[^\u0000-\u007f]/.test(s); - // Remove English words only if the string contains ASCII (English) - // characters. - if (!hasUnicodeChars) { - const removeList = [ - "a", "an", "as", "at", "before", "but", "by", "for", "from", - "is", "in", "into", "like", "of", "off", "on", "onto", "per", - "since", "than", "the", "this", "that", "to", "up", "via", - "with" - ]; - const r = new RegExp('\\b(' + removeList.join('|') + ')\\b', 'gi'); - s = s.replace(r, ''); - } s = s.toLowerCase(); // convert to lowercase // if downcode doesn't hit, the char will be stripped here if (allowUnicode) { diff --git a/assets/admin/js/vendor/jquery/LICENSE.txt b/assets/admin/js/vendor/jquery/LICENSE.txt index e3dbacb9..f642c3f7 100644 --- a/assets/admin/js/vendor/jquery/LICENSE.txt +++ b/assets/admin/js/vendor/jquery/LICENSE.txt @@ -1,4 +1,4 @@ -Copyright JS Foundation and other contributors, https://js.foundation/ +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 diff --git a/assets/admin/js/vendor/jquery/jquery.js b/assets/admin/js/vendor/jquery/jquery.js index 50937333..fc6c299b 100644 --- a/assets/admin/js/vendor/jquery/jquery.js +++ b/assets/admin/js/vendor/jquery/jquery.js @@ -1,15 +1,15 @@ /*! - * jQuery JavaScript Library v3.5.1 + * jQuery JavaScript Library v3.6.0 * https://jquery.com/ * * Includes Sizzle.js * https://sizzlejs.com/ * - * Copyright JS Foundation and other contributors + * Copyright OpenJS Foundation and other contributors * Released under the MIT license * https://jquery.org/license * - * Date: 2020-05-04T22:49Z + * Date: 2021-03-02T17:08Z */ ( function( global, factory ) { @@ -76,12 +76,16 @@ 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. - return typeof obj === "function" && typeof obj.nodeType !== "number"; - }; + // 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 ) { @@ -147,7 +151,7 @@ function toType( obj ) { var - version = "3.5.1", + version = "3.6.0", // Define a local copy of jQuery jQuery = function( selector, context ) { @@ -401,7 +405,7 @@ jQuery.extend( { if ( isArrayLike( Object( arr ) ) ) { jQuery.merge( ret, typeof arr === "string" ? - [ arr ] : arr + [ arr ] : arr ); } else { push.call( ret, arr ); @@ -496,9 +500,9 @@ if ( typeof Symbol === "function" ) { // 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( _i, name ) { + class2type[ "[object " + name + "]" ] = name.toLowerCase(); + } ); function isArrayLike( obj ) { @@ -518,14 +522,14 @@ function isArrayLike( obj ) { } var Sizzle = /*! - * Sizzle CSS Selector Engine v2.3.5 + * Sizzle CSS Selector Engine v2.3.6 * https://sizzlejs.com/ * * Copyright JS Foundation and other contributors * Released under the MIT license * https://js.foundation/ * - * Date: 2020-03-14 + * Date: 2021-02-16 */ ( function( window ) { var i, @@ -1108,8 +1112,8 @@ support = Sizzle.support = {}; * @returns {Boolean} True iff elem is a non-HTML XML node */ isXML = Sizzle.isXML = function( elem ) { - var namespace = elem.namespaceURI, - docElem = ( elem.ownerDocument || elem ).documentElement; + var namespace = elem && elem.namespaceURI, + docElem = elem && ( elem.ownerDocument || elem ).documentElement; // Support: IE <=8 // Assume HTML when documentElement doesn't yet exist, such as inside loading iframes @@ -3024,9 +3028,9 @@ var rneedsContext = jQuery.expr.match.needsContext; function nodeName( elem, name ) { - return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); + return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); -}; +} var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i ); @@ -3997,8 +4001,8 @@ jQuery.extend( { resolveContexts = Array( i ), resolveValues = slice.call( arguments ), - // the master Deferred - master = jQuery.Deferred(), + // the primary Deferred + primary = jQuery.Deferred(), // subordinate callback factory updateFunc = function( i ) { @@ -4006,30 +4010,30 @@ jQuery.extend( { resolveContexts[ i ] = this; resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; if ( !( --remaining ) ) { - master.resolveWith( resolveContexts, resolveValues ); + primary.resolveWith( resolveContexts, resolveValues ); } }; }; // Single- and empty arguments are adopted like Promise.resolve if ( remaining <= 1 ) { - adoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject, + adoptValue( singleValue, primary.done( updateFunc( i ) ).resolve, primary.reject, !remaining ); // Use .then() to unwrap secondary thenables (cf. gh-3000) - if ( master.state() === "pending" || + if ( primary.state() === "pending" || isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) { - return master.then(); + return primary.then(); } } // Multiple arguments are aggregated like Promise.all array elements while ( i-- ) { - adoptValue( resolveValues[ i ], updateFunc( i ), master.reject ); + adoptValue( resolveValues[ i ], updateFunc( i ), primary.reject ); } - return master.promise(); + return primary.promise(); } } ); @@ -4180,8 +4184,8 @@ var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { for ( ; i < len; i++ ) { fn( elems[ i ], key, raw ? - value : - value.call( elems[ i ], i, fn( elems[ i ], key ) ) + value : + value.call( elems[ i ], i, fn( elems[ i ], key ) ) ); } } @@ -5089,10 +5093,7 @@ function buildFragment( elems, context, scripts, selection, ignored ) { } -var - rkeyEvent = /^key/, - rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/, - rtypenamespace = /^([^.]*)(?:\.(.+)|)/; +var rtypenamespace = /^([^.]*)(?:\.(.+)|)/; function returnTrue() { return true; @@ -5387,8 +5388,8 @@ jQuery.event = { event = jQuery.event.fix( nativeEvent ), handlers = ( - dataPriv.get( this, "events" ) || Object.create( null ) - )[ event.type ] || [], + 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 @@ -5512,12 +5513,12 @@ jQuery.event = { get: isFunction( hook ) ? function() { if ( this.originalEvent ) { - return hook( this.originalEvent ); + return hook( this.originalEvent ); } } : function() { if ( this.originalEvent ) { - return this.originalEvent[ name ]; + return this.originalEvent[ name ]; } }, @@ -5656,7 +5657,13 @@ function leverageNative( el, type, expectSync ) { // Cancel the outer synthetic event event.stopImmediatePropagation(); event.preventDefault(); - return result.value; + + // Support: Chrome 86+ + // In Chrome, if an element having a focusout handler is blurred by + // clicking outside of it, it invokes the handler synchronously. If + // that handler calls `.remove()` on the element, the data is cleared, + // leaving `result` undefined. We need to guard against this. + return result && result.value; } // If this is an inner synthetic event for an event with a bubbling surrogate @@ -5821,34 +5828,7 @@ jQuery.each( { targetTouches: true, toElement: true, touches: true, - - which: function( event ) { - var button = event.button; - - // Add which for key events - if ( event.which == null && rkeyEvent.test( event.type ) ) { - return event.charCode != null ? event.charCode : event.keyCode; - } - - // Add which for click: 1 === left; 2 === middle; 3 === right - if ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) { - if ( button & 1 ) { - return 1; - } - - if ( button & 2 ) { - return 3; - } - - if ( button & 4 ) { - return 2; - } - - return 0; - } - - return event.which; - } + which: true }, jQuery.event.addProp ); jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateType ) { @@ -5874,6 +5854,12 @@ jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateTyp return true; }, + // Suppress native focus or blur as it's already being fired + // in leverageNative. + _default: function() { + return true; + }, + delegateType: delegateType }; } ); @@ -6541,6 +6527,10 @@ var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" ); // 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 ) { @@ -6548,17 +6538,32 @@ var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" ); tr = document.createElement( "tr" ); trChild = document.createElement( "div" ); - table.style.cssText = "position:absolute;left:-11111px"; + table.style.cssText = "position:absolute;left:-11111px;border-collapse:separate"; + tr.style.cssText = "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 ) > 3; + reliableTrDimensionsVal = ( parseInt( trStyle.height, 10 ) + + parseInt( trStyle.borderTopWidth, 10 ) + + parseInt( trStyle.borderBottomWidth, 10 ) ) === tr.offsetHeight; documentElement.removeChild( table ); } @@ -7022,10 +7027,10 @@ jQuery.each( [ "height", "width" ], function( _i, dimension ) { // 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 ); + swap( elem, cssShow, function() { + return getWidthOrHeight( elem, dimension, extra ); + } ) : + getWidthOrHeight( elem, dimension, extra ); } }, @@ -7084,7 +7089,7 @@ jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft, swap( elem, { marginLeft: 0 }, function() { return elem.getBoundingClientRect().left; } ) - ) + "px"; + ) + "px"; } } ); @@ -7223,7 +7228,7 @@ Tween.propHooks = { if ( jQuery.fx.step[ tween.prop ] ) { jQuery.fx.step[ tween.prop ]( tween ); } else if ( tween.elem.nodeType === 1 && ( - jQuery.cssHooks[ tween.prop ] || + jQuery.cssHooks[ tween.prop ] || tween.elem.style[ finalPropName( tween.prop ) ] != null ) ) { jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); } else { @@ -7468,7 +7473,7 @@ function defaultPrefilter( elem, props, opts ) { anim.done( function() { - /* eslint-enable no-loop-func */ + /* eslint-enable no-loop-func */ // The final step of a "hide" animation is actually hiding the element if ( !hidden ) { @@ -7588,7 +7593,7 @@ function Animation( elem, properties, options ) { tweens: [], createTween: function( prop, end ) { var tween = jQuery.Tween( elem, animation.opts, prop, end, - animation.opts.specialEasing[ prop ] || animation.opts.easing ); + animation.opts.specialEasing[ prop ] || animation.opts.easing ); animation.tweens.push( tween ); return tween; }, @@ -7761,7 +7766,8 @@ jQuery.fn.extend( { anim.stop( true ); } }; - doAnimation.finish = doAnimation; + + doAnimation.finish = doAnimation; return empty || optall.queue === false ? this.each( doAnimation ) : @@ -8401,8 +8407,8 @@ jQuery.fn.extend( { if ( this.setAttribute ) { this.setAttribute( "class", className || value === false ? - "" : - dataPriv.get( this, "__className__" ) || "" + "" : + dataPriv.get( this, "__className__" ) || "" ); } } @@ -8417,7 +8423,7 @@ jQuery.fn.extend( { while ( ( elem = this[ i++ ] ) ) { if ( elem.nodeType === 1 && ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) { - return true; + return true; } } @@ -8707,9 +8713,7 @@ jQuery.extend( jQuery.event, { special.bindType || type; // jQuery handler - handle = ( - dataPriv.get( cur, "events" ) || Object.create( null ) - )[ event.type ] && + handle = ( dataPriv.get( cur, "events" ) || Object.create( null ) )[ event.type ] && dataPriv.get( cur, "handle" ); if ( handle ) { handle.apply( cur, data ); @@ -8856,7 +8860,7 @@ var rquery = ( /\?/ ); // Cross-browser xml parsing jQuery.parseXML = function( data ) { - var xml; + var xml, parserErrorElem; if ( !data || typeof data !== "string" ) { return null; } @@ -8865,12 +8869,17 @@ jQuery.parseXML = function( data ) { // IE throws on parseFromString with invalid input. try { xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" ); - } catch ( e ) { - xml = undefined; - } + } catch ( e ) {} - if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) { - jQuery.error( "Invalid XML: " + data ); + 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; }; @@ -8971,16 +8980,14 @@ jQuery.fn.extend( { // 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() { + } ).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 ) { + } ).map( function( _i, elem ) { var val = jQuery( this ).val(); if ( val == null ) { @@ -9033,7 +9040,8 @@ var // Anchor tag for parsing the document origin originAnchor = document.createElement( "a" ); - originAnchor.href = location.href; + +originAnchor.href = location.href; // Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport function addToPrefiltersOrTransports( structure ) { @@ -9414,8 +9422,8 @@ jQuery.extend( { // 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, + jQuery( callbackContext ) : + jQuery.event, // Deferreds deferred = jQuery.Deferred(), @@ -9727,8 +9735,10 @@ jQuery.extend( { response = ajaxHandleResponses( s, jqXHR, responses ); } - // Use a noop converter for missing script - if ( !isSuccess && jQuery.inArray( "script", s.dataTypes ) > -1 ) { + // 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() {}; } @@ -10466,12 +10476,6 @@ jQuery.offset = { options.using.call( elem, props ); } else { - if ( typeof props.top === "number" ) { - props.top += "px"; - } - if ( typeof props.left === "number" ) { - props.left += "px"; - } curElem.css( props ); } } @@ -10640,8 +10644,11 @@ jQuery.each( [ "top", "left" ], function( _i, prop ) { // Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods jQuery.each( { Height: "height", Width: "width" }, function( name, type ) { - jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name }, - function( defaultExtra, funcName ) { + jQuery.each( { + padding: "inner" + name, + content: type, + "": "outer" + name + }, function( defaultExtra, funcName ) { // Margin is only for outerHeight, outerWidth jQuery.fn[ funcName ] = function( margin, value ) { @@ -10726,7 +10733,8 @@ jQuery.fn.extend( { } } ); -jQuery.each( ( "blur focus focusin focusout resize scroll click dblclick " + +jQuery.each( + ( "blur focus focusin focusout resize scroll click dblclick " + "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + "change select submit keydown keypress keyup contextmenu" ).split( " " ), function( _i, name ) { @@ -10737,7 +10745,8 @@ jQuery.each( ( "blur focus focusin focusout resize scroll click dblclick " + this.on( name, null, data, fn ) : this.trigger( name ); }; - } ); + } +); diff --git a/assets/admin/js/vendor/jquery/jquery.min.js b/assets/admin/js/vendor/jquery/jquery.min.js index b0614034..c4c6022f 100644 --- a/assets/admin/js/vendor/jquery/jquery.min.js +++ b/assets/admin/js/vendor/jquery/jquery.min.js @@ -1,2 +1,2 @@ -/*! jQuery v3.5.1 | (c) JS Foundation and other contributors | jquery.org/license */ -!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.5.1",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e.namespaceURI,n=(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function D(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||j,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,j=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="",y.option=!!ce.lastChild;var ge={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n",""]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function qe(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function Le(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function He(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Oe(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var Ut,Xt=[],Vt=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Xt.pop()||S.expando+"_"+Ct.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Vt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Vt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Vt,"$1"+r):!1!==e.jsonp&&(e.url+=(Et.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Xt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((Ut=E.implementation.createHTMLDocument("").body).innerHTML="
",2===Ut.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):("number"==typeof f.top&&(f.top+="px"),"number"==typeof f.left&&(f.left+="px"),c.css(f))}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=$e(y.pixelPosition,function(e,t){if(t)return t=Be(e,n),Me.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},j=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||D,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,D=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="",y.option=!!ce.lastChild;var ge={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n",""]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function je(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function qe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Le(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var _t,zt=[],Ut=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=zt.pop()||S.expando+"_"+wt.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Ut.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Ut.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Ut,"$1"+r):!1!==e.jsonp&&(e.url+=(Tt.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,zt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((_t=E.implementation.createHTMLDocument("").body).innerHTML="
",2===_t.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=Fe(y.pixelPosition,function(e,t){if(t)return t=We(e,n),Pe.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0