From 819810649263e46b4e457d39877b9ef10f1db12c Mon Sep 17 00:00:00 2001 From: Lars Eggert Date: Mon, 28 Mar 2022 13:46:48 +0300 Subject: [PATCH 01/26] Add html-validate and bump some deps. --- package-lock.json | 4041 ++++++++++++++++++++------------------------- package.json | 11 +- 2 files changed, 1832 insertions(+), 2220 deletions(-) diff --git a/package-lock.json b/package-lock.json index 2f6f1372568..abbcd692d28 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,5 +1,5 @@ { - "name": "workspace", + "name": "datatracker", "lockfileVersion": 2, "requires": true, "packages": { @@ -11,7 +11,7 @@ "bootstrap": "^5.1.3", "bootstrap-datepicker": "uxsolutions/bootstrap-datepicker", "bootstrap-icons": "^1.7.0", - "caniuse-lite": "1.0.30001314", + "caniuse-lite": "^1.0.30001314", "d3": "^3.5.17", "flot": "^4.2.2", "highcharts": "^9.3.1", @@ -29,11 +29,12 @@ "devDependencies": { "@parcel/transformer-sass": "^2.0.1", "browserlist": "latest", - "cypress": "9.5.1", - "cypress-real-events": "1.7.0", + "cypress": "^9.5.1", + "cypress-real-events": "^1.7.0", "eslint": "^8.2.0", + "html-validate": "^6.6.1", "jquery-migrate": "^3.3.2", - "npm-check-updates": "12.5.2", + "npm-check-updates": "^12.5.2", "parcel": "^2.0.0" } }, @@ -192,16 +193,16 @@ } }, "node_modules/@eslint/eslintrc": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.0.5.tgz", - "integrity": "sha512-BLxsnmK3KyPunz5wmCCpqy0YelEoxxGmH73Is+Z74oOTMtExcjkr3dDR6quwrjh1YspA8DH9gnX1o069KiS9AQ==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.2.1.tgz", + "integrity": "sha512-bxvbYnBPN1Gibwyp6NrpnFzA3YtRL3BBAyEAFVIpNTm2Rn4Vy87GA5M4aSn3InRrlsbX5N0GW7XIx+U4SAEKdQ==", "dev": true, "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.2.0", + "espree": "^9.3.1", "globals": "^13.9.0", - "ignore": "^4.0.6", + "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", "minimatch": "^3.0.4", @@ -211,15 +212,6 @@ "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "node_modules/@eslint/eslintrc/node_modules/ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, "node_modules/@fullcalendar/common": { "version": "5.10.1", "resolved": "https://registry.npmjs.org/@fullcalendar/common/-/common-5.10.1.tgz", @@ -253,10 +245,23 @@ "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", "dev": true }, + "node_modules/@html-validate/stylish": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@html-validate/stylish/-/stylish-2.0.1.tgz", + "integrity": "sha512-iRLjgQnNq66rcsTukun6KwMhPEoUV2R3atPbTSapnEvD1aETjD+pfS+1yYrmaPeJFgXHzfsSYjAuyUVq7EID/Q==", + "dev": true, + "dependencies": { + "kleur": "^4.0.0", + "text-table": "^0.2.0" + }, + "engines": { + "node": ">= 12.0" + } + }, "node_modules/@humanwhocodes/config-array": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.3.tgz", - "integrity": "sha512-3xSMlXHh03hCcCmFc0rbKp3Ivt2PFEJnQUJDDMTJQ2wkECZWdq4GePs2ctc5H8zV+cHPaq8k2vU8mrQjA6iHdQ==", + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", + "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==", "dev": true, "dependencies": { "@humanwhocodes/object-schema": "^1.2.1", @@ -309,13 +314,16 @@ } }, "node_modules/@npmcli/fs": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz", - "integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.0.tgz", + "integrity": "sha512-DmfBvNXGaetMxj9LTp8NAN9vEidXURrf5ZTslQzEAi/6GbW+4yjaLFQc6Tue5cpZ9Frlk4OBo/Snf1Bh/S7qTQ==", "dev": true, "dependencies": { - "@gar/promisify": "^1.0.1", + "@gar/promisify": "^1.1.3", "semver": "^7.3.5" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/@npmcli/fs/node_modules/semver": { @@ -354,9 +362,9 @@ } }, "node_modules/@npmcli/git/node_modules/lru-cache": { - "version": "7.4.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.4.2.tgz", - "integrity": "sha512-Xs3+hFPDSKQmL05Gs6NhvAADol1u9TmLoNoE03ZjszX6a5iYIO3rPUM4jIjoBUJeTaWEBMozjjmV70gvdRfIdw==", + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.7.1.tgz", + "integrity": "sha512-cRffBiTW8s73eH4aTXqBcTLU0xQnwGV3/imttRHGWCrbergmnK4D6JXQd8qin5z43HnDwRI+o7mVW0LEB+tpAw==", "dev": true, "engines": { "node": ">=12" @@ -449,20 +457,20 @@ } }, "node_modules/@parcel/bundler-default": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@parcel/bundler-default/-/bundler-default-2.3.1.tgz", - "integrity": "sha512-NFPI3UgWA3wD057ZXdoI9xM+JfM5aooPDJEvBateUQibwPzb96k9Bw7AfKnB/UAsASgtXeNAZXDqhXq5zrXeYQ==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@parcel/bundler-default/-/bundler-default-2.4.0.tgz", + "integrity": "sha512-RaXlxo0M51739Ko3bsOJpDBZlJ+cqkDoBTozNeSc65jS2TMBIBWLMapm8095qmty39OrgYNhzjgPiIlKDS/LWA==", "dev": true, "dependencies": { - "@parcel/diagnostic": "2.3.1", - "@parcel/hash": "2.3.1", - "@parcel/plugin": "2.3.1", - "@parcel/utils": "2.3.1", + "@parcel/diagnostic": "2.4.0", + "@parcel/hash": "2.4.0", + "@parcel/plugin": "2.4.0", + "@parcel/utils": "2.4.0", "nullthrows": "^1.1.1" }, "engines": { "node": ">= 12.0.0", - "parcel": "^2.3.1" + "parcel": "^2.4.0" }, "funding": { "type": "opencollective", @@ -470,15 +478,15 @@ } }, "node_modules/@parcel/cache": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@parcel/cache/-/cache-2.3.1.tgz", - "integrity": "sha512-8Wvm0VERtocUepIfkZ6xVs1LHZqttnzdrM7oSc0bXhwtz8kZB++N88g0rQskbUchW87314eYdzBtEL0aiq0bgQ==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@parcel/cache/-/cache-2.4.0.tgz", + "integrity": "sha512-oOudoAafrCAHQY0zkU7gVHG1pAGBUz9rht7Tx4WupTmAH0O0F5UnZs6XbjoBJaPHg+CYUXK7v9wQcrNA72E3GA==", "dev": true, "dependencies": { - "@parcel/fs": "2.3.1", - "@parcel/logger": "2.3.1", - "@parcel/utils": "2.3.1", - "lmdb": "^2.0.2" + "@parcel/fs": "2.4.0", + "@parcel/logger": "2.4.0", + "@parcel/utils": "2.4.0", + "lmdb": "2.2.4" }, "engines": { "node": ">= 12.0.0" @@ -488,13 +496,13 @@ "url": "https://opencollective.com/parcel" }, "peerDependencies": { - "@parcel/core": "^2.3.1" + "@parcel/core": "^2.4.0" } }, "node_modules/@parcel/codeframe": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@parcel/codeframe/-/codeframe-2.3.1.tgz", - "integrity": "sha512-sdNvbg9qYS2pwzqyyyt+wZfNGuy7EslzDLbzQclFZmhD6e770mcYoi8/7i7D/AONbXiI15vwNmgOdcUIXtPxbA==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@parcel/codeframe/-/codeframe-2.4.0.tgz", + "integrity": "sha512-PJ3W9Z0sjoS2CANyo50c+LEr9IRZrtu0WsVPSYZ5ZYRuSXrSa/6PcAlnkyDk2+hi7Od8ncT2bmDexl0Oar3Jyg==", "dev": true, "dependencies": { "chalk": "^4.1.0" @@ -508,16 +516,16 @@ } }, "node_modules/@parcel/compressor-raw": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@parcel/compressor-raw/-/compressor-raw-2.3.1.tgz", - "integrity": "sha512-a294CarNzmy5mqTYnoO6clUxzVN/+HuUMAz1Y7EmsXwS6pJMCdhrE1Lra3upslFj4YMwp9N6+skzkptSCArkTQ==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@parcel/compressor-raw/-/compressor-raw-2.4.0.tgz", + "integrity": "sha512-ZErX14fTc0gKIgtnuqW7Clfln4dpXWfUaJQQIf5C3x/LkpUeEhdXeKntkvSxOddDk2JpIKDwqzAxEMZUnDo4Nw==", "dev": true, "dependencies": { - "@parcel/plugin": "2.3.1" + "@parcel/plugin": "2.4.0" }, "engines": { "node": ">= 12.0.0", - "parcel": "^2.3.1" + "parcel": "^2.4.0" }, "funding": { "type": "opencollective", @@ -525,69 +533,69 @@ } }, "node_modules/@parcel/config-default": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@parcel/config-default/-/config-default-2.3.1.tgz", - "integrity": "sha512-EEu8GPHAlHchyIu5AD1uPbOC/wPoAOS/ni2+yBmJWq3MJ6hwjnAdZJVYs8qVD9n2lcu3kcpO4vYxL8kv+i1mTQ==", - "dev": true, - "dependencies": { - "@parcel/bundler-default": "2.3.1", - "@parcel/compressor-raw": "2.3.1", - "@parcel/namer-default": "2.3.1", - "@parcel/optimizer-cssnano": "2.3.1", - "@parcel/optimizer-htmlnano": "2.3.1", - "@parcel/optimizer-image": "2.3.1", - "@parcel/optimizer-svgo": "2.3.1", - "@parcel/optimizer-terser": "2.3.1", - "@parcel/packager-css": "2.3.1", - "@parcel/packager-html": "2.3.1", - "@parcel/packager-js": "2.3.1", - "@parcel/packager-raw": "2.3.1", - "@parcel/packager-svg": "2.3.1", - "@parcel/reporter-dev-server": "2.3.1", - "@parcel/resolver-default": "2.3.1", - "@parcel/runtime-browser-hmr": "2.3.1", - "@parcel/runtime-js": "2.3.1", - "@parcel/runtime-react-refresh": "2.3.1", - "@parcel/runtime-service-worker": "2.3.1", - "@parcel/transformer-babel": "2.3.1", - "@parcel/transformer-css": "2.3.1", - "@parcel/transformer-html": "2.3.1", - "@parcel/transformer-image": "2.3.1", - "@parcel/transformer-js": "2.3.1", - "@parcel/transformer-json": "2.3.1", - "@parcel/transformer-postcss": "2.3.1", - "@parcel/transformer-posthtml": "2.3.1", - "@parcel/transformer-raw": "2.3.1", - "@parcel/transformer-react-refresh-wrap": "2.3.1", - "@parcel/transformer-svg": "2.3.1" + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@parcel/config-default/-/config-default-2.4.0.tgz", + "integrity": "sha512-pFOPBXPO6HGqNWTLkcK5i8haMOrRgUouUhcWPGWDpN9IPUYFK2E/O1E/uyMjIA1mSL3FnazI+jJwZ45NhKPpIA==", + "dev": true, + "dependencies": { + "@parcel/bundler-default": "2.4.0", + "@parcel/compressor-raw": "2.4.0", + "@parcel/namer-default": "2.4.0", + "@parcel/optimizer-css": "2.4.0", + "@parcel/optimizer-htmlnano": "2.4.0", + "@parcel/optimizer-image": "2.4.0", + "@parcel/optimizer-svgo": "2.4.0", + "@parcel/optimizer-terser": "2.4.0", + "@parcel/packager-css": "2.4.0", + "@parcel/packager-html": "2.4.0", + "@parcel/packager-js": "2.4.0", + "@parcel/packager-raw": "2.4.0", + "@parcel/packager-svg": "2.4.0", + "@parcel/reporter-dev-server": "2.4.0", + "@parcel/resolver-default": "2.4.0", + "@parcel/runtime-browser-hmr": "2.4.0", + "@parcel/runtime-js": "2.4.0", + "@parcel/runtime-react-refresh": "2.4.0", + "@parcel/runtime-service-worker": "2.4.0", + "@parcel/transformer-babel": "2.4.0", + "@parcel/transformer-css": "2.4.0", + "@parcel/transformer-html": "2.4.0", + "@parcel/transformer-image": "2.4.0", + "@parcel/transformer-js": "2.4.0", + "@parcel/transformer-json": "2.4.0", + "@parcel/transformer-postcss": "2.4.0", + "@parcel/transformer-posthtml": "2.4.0", + "@parcel/transformer-raw": "2.4.0", + "@parcel/transformer-react-refresh-wrap": "2.4.0", + "@parcel/transformer-svg": "2.4.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/parcel" }, "peerDependencies": { - "@parcel/core": "^2.3.1" + "@parcel/core": "^2.4.0" } }, "node_modules/@parcel/core": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@parcel/core/-/core-2.3.1.tgz", - "integrity": "sha512-Fzj8OxICQ0dKqu+haq1LP/yxmE1ryALIddZrgmn4JSoNiZVtPJMOxidozyl+3bnEq0mRyH5i38CDFRUWl9dqKQ==", - "dev": true, - "dependencies": { - "@parcel/cache": "2.3.1", - "@parcel/diagnostic": "2.3.1", - "@parcel/events": "2.3.1", - "@parcel/fs": "2.3.1", - "@parcel/graph": "2.3.1", - "@parcel/hash": "2.3.1", - "@parcel/logger": "2.3.1", - "@parcel/package-manager": "2.3.1", - "@parcel/plugin": "2.3.1", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@parcel/core/-/core-2.4.0.tgz", + "integrity": "sha512-EWZ2UWtIuwDc3fgsKyyTLpNNPoG8Yk2L117ICWF/+cqY8z/wJHm2KwLbeplDeq524shav0GJ9O4CemP3JPx0Nw==", + "dev": true, + "dependencies": { + "@parcel/cache": "2.4.0", + "@parcel/diagnostic": "2.4.0", + "@parcel/events": "2.4.0", + "@parcel/fs": "2.4.0", + "@parcel/graph": "2.4.0", + "@parcel/hash": "2.4.0", + "@parcel/logger": "2.4.0", + "@parcel/package-manager": "2.4.0", + "@parcel/plugin": "2.4.0", "@parcel/source-map": "^2.0.0", - "@parcel/types": "2.3.1", - "@parcel/utils": "2.3.1", - "@parcel/workers": "2.3.1", + "@parcel/types": "2.4.0", + "@parcel/utils": "2.4.0", + "@parcel/workers": "2.4.0", "abortcontroller-polyfill": "^1.1.9", "base-x": "^3.0.8", "browserslist": "^4.6.6", @@ -596,7 +604,7 @@ "dotenv-expand": "^5.1.0", "json-source-map": "^0.6.1", "json5": "^2.2.0", - "msgpackr": "^1.5.1", + "msgpackr": "^1.5.4", "nullthrows": "^1.1.1", "semver": "^5.7.1" }, @@ -608,10 +616,196 @@ "url": "https://opencollective.com/parcel" } }, + "node_modules/@parcel/css": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/@parcel/css/-/css-1.7.3.tgz", + "integrity": "sha512-rgdRX4Uk31EvzH/mUScL0wdXtkci3U5N1W2pgam+9S10vQy4uONhWBepZ1tUCjONHLacGXr1jp3LbG/HI7LiTw==", + "dev": true, + "dependencies": { + "detect-libc": "^1.0.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "@parcel/css-darwin-arm64": "1.7.3", + "@parcel/css-darwin-x64": "1.7.3", + "@parcel/css-linux-arm-gnueabihf": "1.7.3", + "@parcel/css-linux-arm64-gnu": "1.7.3", + "@parcel/css-linux-arm64-musl": "1.7.3", + "@parcel/css-linux-x64-gnu": "1.7.3", + "@parcel/css-linux-x64-musl": "1.7.3", + "@parcel/css-win32-x64-msvc": "1.7.3" + } + }, + "node_modules/@parcel/css-darwin-arm64": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/@parcel/css-darwin-arm64/-/css-darwin-arm64-1.7.3.tgz", + "integrity": "sha512-m3HDY+Rh8HJxmLELKAvCpF59vLS7FWtgBODHxl8G9Jl2CnGtXpXvdpyeMxNsTE+2QuPC+a5QT7IeZAKb2Gjmxg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/css-darwin-x64": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/@parcel/css-darwin-x64/-/css-darwin-x64-1.7.3.tgz", + "integrity": "sha512-LuhweXKxVwrz/hjAOm9XNRMSL+p23px20nhSCASkyUP7Higaxza948W3TSQdoL3YyR+wQxQH8Yj+R/T8Tz3E3g==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/css-linux-arm-gnueabihf": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/@parcel/css-linux-arm-gnueabihf/-/css-linux-arm-gnueabihf-1.7.3.tgz", + "integrity": "sha512-/pd9Em18zMvt7eDZAMpNBEwF7c4VPVhAtBOZ59ClFrsXCTDNYP7mSy0cwNgtLelCRZCGAQmZNBDNQPH7vO3rew==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/css-linux-arm64-gnu": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/@parcel/css-linux-arm64-gnu/-/css-linux-arm64-gnu-1.7.3.tgz", + "integrity": "sha512-5aKiEhQK40riO4iVKzRqISzgYK+7Z7i3e6JTSz+/BHuQyHEUaBe/RuJ8Z0BDQtFz0HmWQlrQCd+7hd0Xgd8vYQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/css-linux-arm64-musl": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/@parcel/css-linux-arm64-musl/-/css-linux-arm64-musl-1.7.3.tgz", + "integrity": "sha512-Wf7/aIueDED2JqBMfZvzbBAFSaPmd3TR28bD2pmP7CI/jZnm9vHVKMdOLgt9NKSSSjdGrp+VM410CsrUM7xcOw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/css-linux-x64-gnu": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/@parcel/css-linux-x64-gnu/-/css-linux-x64-gnu-1.7.3.tgz", + "integrity": "sha512-0ZADbuFklUrHC1p2uPY4BPcN07jUTMqJzr/SSdnGN2XiXgiVZGcDCMHUj0DvC9Vwy11DDM6Rnw4QBbKHG+QGjQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/css-linux-x64-musl": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/@parcel/css-linux-x64-musl/-/css-linux-x64-musl-1.7.3.tgz", + "integrity": "sha512-mFWWM8lX2OIID81YQuDDt9zTqof0B7UcEcs0huE7Zbs60uLEEQupdf8iH0yh5EOhxPt3sRcQnGXf2QTrXdjIMA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/css-win32-x64-msvc": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/@parcel/css-win32-x64-msvc/-/css-win32-x64-msvc-1.7.3.tgz", + "integrity": "sha512-KUFEMQcoP7DG3QbsN21OxhjHkfQ1BARn7D9puX75bV5N1F1kv557aaLkQZiMsgiYOL4tmJvsdQXutG7x++3j4Q==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, "node_modules/@parcel/diagnostic": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@parcel/diagnostic/-/diagnostic-2.3.1.tgz", - "integrity": "sha512-hBMcg4WVMdSIy6RpI4gSto5dZ3OoUbnrCZzVw3J1tzQJn7x9na/+014IaE58vJtAqJ8/jc/TqWIcwsSLe898rA==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@parcel/diagnostic/-/diagnostic-2.4.0.tgz", + "integrity": "sha512-TjWO/b2zMFhub5ouwGjazMm7iAUvdmXBfWmjrg4TBhUbhoQwBnyWfvMDtAYo7PcvXfxVPgPZv86Nv6Ym5H6cHQ==", "dev": true, "dependencies": { "json-source-map": "^0.6.1", @@ -626,9 +820,9 @@ } }, "node_modules/@parcel/events": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@parcel/events/-/events-2.3.1.tgz", - "integrity": "sha512-J2rWKGl1Z2IvwwDwWYz/4gUxC1P4LsioUyOo1HYGT+N5+r41P8ZB5CM/aosI2qu5mMsH8rTpclOv5E36vCSQxw==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@parcel/events/-/events-2.4.0.tgz", + "integrity": "sha512-DEaEtFbhOhNAEmiXJ3MyF8Scq+sNDKiTyLax4lAC5/dpE5GvwfNnoD17C2+0gDuuDpdQkdHfXfvr50aYFt7jcw==", "dev": true, "engines": { "node": ">= 12.0.0" @@ -639,16 +833,16 @@ } }, "node_modules/@parcel/fs": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@parcel/fs/-/fs-2.3.1.tgz", - "integrity": "sha512-FKqyf8KF0zOw8gfj/feEAMj4Kzqkgt9Zxa2A7UDdMWRvxLR8znqnWjD++xqq6rxJp2Y1zm4fH3JOTK4CRddUSg==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@parcel/fs/-/fs-2.4.0.tgz", + "integrity": "sha512-CnUlWGUJ52SJVQi8QnaAPPQZOADmHMV9D9aX9GLcDm5XLT3Em7vmesG4bNLdMLwzYuzAtenhcWmuRCACuYztHw==", "dev": true, "dependencies": { - "@parcel/fs-search": "2.3.1", - "@parcel/types": "2.3.1", - "@parcel/utils": "2.3.1", + "@parcel/fs-search": "2.4.0", + "@parcel/types": "2.4.0", + "@parcel/utils": "2.4.0", "@parcel/watcher": "^2.0.0", - "@parcel/workers": "2.3.1" + "@parcel/workers": "2.4.0" }, "engines": { "node": ">= 12.0.0" @@ -658,13 +852,13 @@ "url": "https://opencollective.com/parcel" }, "peerDependencies": { - "@parcel/core": "^2.3.1" + "@parcel/core": "^2.4.0" } }, "node_modules/@parcel/fs-search": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@parcel/fs-search/-/fs-search-2.3.1.tgz", - "integrity": "sha512-JsBIDttjmgJIMD6Q6MV83M+mwr5NqUm55iA+SewimboiWzSPzIJxRaegniSsNfsrBASJ6nSZFHcLPd/VJ5iqJw==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@parcel/fs-search/-/fs-search-2.4.0.tgz", + "integrity": "sha512-W/Vu6wbZk4wuB6AVdMkyymwh/S8Peed/PgJgSsApYD6lSTD315I6OuEdxZh3lWY+dqQdog/NJ7dvi/hdpH/Iqw==", "dev": true, "dependencies": { "detect-libc": "^1.0.3" @@ -678,12 +872,12 @@ } }, "node_modules/@parcel/graph": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@parcel/graph/-/graph-2.3.1.tgz", - "integrity": "sha512-KdoPJM+d5LlCFZ46iapXXCwL+WD8/QYRkb/lFpmwHIT0xdY2sAU+rDFbSB3XeI8guol5zPZrGHSj38U1o+tSFA==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@parcel/graph/-/graph-2.4.0.tgz", + "integrity": "sha512-5TZIAfDITkJCzgH4j4OQhnIvjV9IFwWqNBJanRl5QQTmKvdcODS3WbnK1SOJ+ZltcLVXMB+HNXmL0bX0tVolcw==", "dev": true, "dependencies": { - "@parcel/utils": "2.3.1", + "@parcel/utils": "2.4.0", "nullthrows": "^1.1.1" }, "engines": { @@ -695,9 +889,9 @@ } }, "node_modules/@parcel/hash": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@parcel/hash/-/hash-2.3.1.tgz", - "integrity": "sha512-IYhSQE+CIKWjPfiLmsrXHupkNd+hMlTlI9DR5qLiD8ydyPwg0XE/bOYTcbdsSl6HTackY0XYVSJwTtEgvtYVfw==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@parcel/hash/-/hash-2.4.0.tgz", + "integrity": "sha512-nB+wYNUhe6+G8M7vQhdeFXtpYJYwJgBHOPZ7Hd9O2jdlamWjDbw0t/u1dJbYvGJ8ZDtLDwiItawQVpuVdskQ9g==", "dev": true, "dependencies": { "detect-libc": "^1.0.3", @@ -712,13 +906,13 @@ } }, "node_modules/@parcel/logger": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@parcel/logger/-/logger-2.3.1.tgz", - "integrity": "sha512-swNPInULCJrpCJCLOgZcf+xNcUF0NjD7LyNcB349BkyO7i6st14nfBjXf6eAJJu0z7RMmi6zp9CQB47e4cI6+g==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@parcel/logger/-/logger-2.4.0.tgz", + "integrity": "sha512-DqfU0Zcs/0a7VBk+MsjJ80C66w4kM9EbkO3G12NIyEjNeG50ayW2CE9rUuJ91JaM9j0NFM1P82eyLpQPFFaVPw==", "dev": true, "dependencies": { - "@parcel/diagnostic": "2.3.1", - "@parcel/events": "2.3.1" + "@parcel/diagnostic": "2.4.0", + "@parcel/events": "2.4.0" }, "engines": { "node": ">= 12.0.0" @@ -729,9 +923,9 @@ } }, "node_modules/@parcel/markdown-ansi": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@parcel/markdown-ansi/-/markdown-ansi-2.3.1.tgz", - "integrity": "sha512-M4Hi25pKtSh1KF/ppMDBk5QuLpYAQjgB/MSP+nz7NzXQlYPCN5oEk9TUkrmQ9J+vOvVwefxfy7ahSErEuQbTFw==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@parcel/markdown-ansi/-/markdown-ansi-2.4.0.tgz", + "integrity": "sha512-gPUP1xikxHiu2kFyPy35pfuVkFgAmcywO8YDQj7iYcB+k7l4QPpIYFYGXn2QADV4faf66ncMeTD4uYV8c0GqjQ==", "dev": true, "dependencies": { "chalk": "^4.1.0" @@ -745,18 +939,18 @@ } }, "node_modules/@parcel/namer-default": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@parcel/namer-default/-/namer-default-2.3.1.tgz", - "integrity": "sha512-huIb47vri76MhfuvmKtQqalqDfIwMfaPyjrbaoHysZ4fRUjvmrx0NPy0dNrTSLvA96iBc7EG2Zzw+Qn3voAiwg==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@parcel/namer-default/-/namer-default-2.4.0.tgz", + "integrity": "sha512-DfL+Gx0Tyoa0vsgRpNybXjuKbWNw8MTVpy7Dk7r0btfVsn1jy3SSwlxH4USf76gb00/pK6XBsMp9zn7Z8ePREQ==", "dev": true, "dependencies": { - "@parcel/diagnostic": "2.3.1", - "@parcel/plugin": "2.3.1", + "@parcel/diagnostic": "2.4.0", + "@parcel/plugin": "2.4.0", "nullthrows": "^1.1.1" }, "engines": { "node": ">= 12.0.0", - "parcel": "^2.3.1" + "parcel": "^2.4.0" }, "funding": { "type": "opencollective", @@ -764,13 +958,13 @@ } }, "node_modules/@parcel/node-resolver-core": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@parcel/node-resolver-core/-/node-resolver-core-2.3.1.tgz", - "integrity": "sha512-iEeilPoeiOyWLeF1NERZByOWe3IqUnNuoHkGbn8qZWlZXYO+k+w/X8Auv0KKsLVGe4XdljwsWbTWuhQJZ8BpIg==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@parcel/node-resolver-core/-/node-resolver-core-2.4.0.tgz", + "integrity": "sha512-qiN97XcfW2fYNoYuVEhNKuVPEJKj5ONQl0fqr/NEMmYvWz3bVKjgiXNJwW558elZvCI08gEbdxgyThpuFFQeKQ==", "dev": true, "dependencies": { - "@parcel/diagnostic": "2.3.1", - "@parcel/utils": "2.3.1", + "@parcel/diagnostic": "2.4.0", + "@parcel/utils": "2.4.0", "nullthrows": "^1.1.1" }, "engines": { @@ -781,20 +975,23 @@ "url": "https://opencollective.com/parcel" } }, - "node_modules/@parcel/optimizer-cssnano": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@parcel/optimizer-cssnano/-/optimizer-cssnano-2.3.1.tgz", - "integrity": "sha512-e/YfTbMzn71CgSyyL/e+MZ/aQTPcUXoQ/EtqcuDlS3kcp2tw1aHgP0xmZT7dSPv+L+I0gY3aQSMM7IqgIzfkLQ==", + "node_modules/@parcel/optimizer-css": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@parcel/optimizer-css/-/optimizer-css-2.4.0.tgz", + "integrity": "sha512-LQmjjOGsHEHKTJqfHR2eJyhWhLXvHP0uOAU+qopBttYYlB2J/vMK9RYAye5cyAb8bQmV8wAdi2mq9rnt7FMSPw==", "dev": true, "dependencies": { - "@parcel/plugin": "2.3.1", + "@parcel/css": "^1.7.2", + "@parcel/diagnostic": "2.4.0", + "@parcel/plugin": "2.4.0", "@parcel/source-map": "^2.0.0", - "cssnano": "^5.0.15", - "postcss": "^8.4.5" + "@parcel/utils": "2.4.0", + "browserslist": "^4.6.6", + "nullthrows": "^1.1.1" }, "engines": { "node": ">= 12.0.0", - "parcel": "^2.3.1" + "parcel": "^2.4.0" }, "funding": { "type": "opencollective", @@ -802,12 +999,12 @@ } }, "node_modules/@parcel/optimizer-htmlnano": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@parcel/optimizer-htmlnano/-/optimizer-htmlnano-2.3.1.tgz", - "integrity": "sha512-zE76grrE5KlWwooH9AnkKRU4QNgcWUtHpJUWba5JYXuCfaqCG2XpN5ARBmRqtmrEke7PlCt/1F0E47PPhZeWiw==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@parcel/optimizer-htmlnano/-/optimizer-htmlnano-2.4.0.tgz", + "integrity": "sha512-02EbeElLgNOAYhGU7fFBahpoKrX5G/yzahpaoKB/ypScM4roSsAMBkGcluboR5L10YRsvfvJEpxvfGyDA3tPmw==", "dev": true, "dependencies": { - "@parcel/plugin": "2.3.1", + "@parcel/plugin": "2.4.0", "htmlnano": "^2.0.0", "nullthrows": "^1.1.1", "posthtml": "^0.16.5", @@ -815,7 +1012,7 @@ }, "engines": { "node": ">= 12.0.0", - "parcel": "^2.3.1" + "parcel": "^2.4.0" }, "funding": { "type": "opencollective", @@ -823,20 +1020,20 @@ } }, "node_modules/@parcel/optimizer-image": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@parcel/optimizer-image/-/optimizer-image-2.3.1.tgz", - "integrity": "sha512-vBnyWaaqljASMi/vDkVdv855/G/BaJYzZklsc5xjGUwZq8nbH4sZPc9NDdl99/WU3yGR8QtA67BdTRkRLf8rKQ==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@parcel/optimizer-image/-/optimizer-image-2.4.0.tgz", + "integrity": "sha512-Q4onaBMPkDyYxPzrb8ytBUftaQZFepj9dSUgq+ETuHDzkgia0tomDPfCqrw6ld0qvYyANzXTP5+LC4g0i5yh+A==", "dev": true, "dependencies": { - "@parcel/diagnostic": "2.3.1", - "@parcel/plugin": "2.3.1", - "@parcel/utils": "2.3.1", - "@parcel/workers": "2.3.1", + "@parcel/diagnostic": "2.4.0", + "@parcel/plugin": "2.4.0", + "@parcel/utils": "2.4.0", + "@parcel/workers": "2.4.0", "detect-libc": "^1.0.3" }, "engines": { "node": ">= 12.0.0", - "parcel": "^2.3.1" + "parcel": "^2.4.0" }, "funding": { "type": "opencollective", @@ -844,19 +1041,19 @@ } }, "node_modules/@parcel/optimizer-svgo": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@parcel/optimizer-svgo/-/optimizer-svgo-2.3.1.tgz", - "integrity": "sha512-PwEXmmZ9z7WNs8n/lWkbwRdw62MJqYzKDUUJPF+KCQb7NG1OAZy1jVj+TyiCuMtxIKhNtei8OrMOlvulQgixcg==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@parcel/optimizer-svgo/-/optimizer-svgo-2.4.0.tgz", + "integrity": "sha512-mwvGuCqVuNCAuMlp2maFE/Uz9ud1T1AuX0f6cCRczjFYiwZuIr/0iDdfFzSziOkVo1MRAGAZNa0dRR/UzCZtVg==", "dev": true, "dependencies": { - "@parcel/diagnostic": "2.3.1", - "@parcel/plugin": "2.3.1", - "@parcel/utils": "2.3.1", + "@parcel/diagnostic": "2.4.0", + "@parcel/plugin": "2.4.0", + "@parcel/utils": "2.4.0", "svgo": "^2.4.0" }, "engines": { "node": ">= 12.0.0", - "parcel": "^2.3.1" + "parcel": "^2.4.0" }, "funding": { "type": "opencollective", @@ -864,21 +1061,21 @@ } }, "node_modules/@parcel/optimizer-terser": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@parcel/optimizer-terser/-/optimizer-terser-2.3.1.tgz", - "integrity": "sha512-uDJghBgwCKhq6m1y/vw/tRZKS4kqNXhXaZIYtEyRdrxJ/pqGTGmHVYO5ItXpgGugM49C8TrqVVlcgIIgR/p1yw==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@parcel/optimizer-terser/-/optimizer-terser-2.4.0.tgz", + "integrity": "sha512-PdCgRgXNSY6R1HTV9VG2MHp1CgUbP5pslCyxvlbUmQAS6bvEpMOpn3qSd+U28o7mGE/qXIhvpDyi808sb+MEcg==", "dev": true, "dependencies": { - "@parcel/diagnostic": "2.3.1", - "@parcel/plugin": "2.3.1", + "@parcel/diagnostic": "2.4.0", + "@parcel/plugin": "2.4.0", "@parcel/source-map": "^2.0.0", - "@parcel/utils": "2.3.1", + "@parcel/utils": "2.4.0", "nullthrows": "^1.1.1", "terser": "^5.2.0" }, "engines": { "node": ">= 12.0.0", - "parcel": "^2.3.1" + "parcel": "^2.4.0" }, "funding": { "type": "opencollective", @@ -886,17 +1083,17 @@ } }, "node_modules/@parcel/package-manager": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@parcel/package-manager/-/package-manager-2.3.1.tgz", - "integrity": "sha512-w2XOkD3SU8RxhUDW+Soy/TjvEVvfUsBmHy02asllt4b/ZtyZVAsQmonGExHDDkRn3TNDR6Y96Yw6M7purt+b9w==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@parcel/package-manager/-/package-manager-2.4.0.tgz", + "integrity": "sha512-21AEfAQnZbHRVViTn7QsPGe/CiGaFaDUH5f0m8qVC7fDjjhC8LM8blkqU72goaO9FbaLMadtEf2txhzly7h/bg==", "dev": true, "dependencies": { - "@parcel/diagnostic": "2.3.1", - "@parcel/fs": "2.3.1", - "@parcel/logger": "2.3.1", - "@parcel/types": "2.3.1", - "@parcel/utils": "2.3.1", - "@parcel/workers": "2.3.1", + "@parcel/diagnostic": "2.4.0", + "@parcel/fs": "2.4.0", + "@parcel/logger": "2.4.0", + "@parcel/types": "2.4.0", + "@parcel/utils": "2.4.0", + "@parcel/workers": "2.4.0", "semver": "^5.7.1" }, "engines": { @@ -907,23 +1104,23 @@ "url": "https://opencollective.com/parcel" }, "peerDependencies": { - "@parcel/core": "^2.3.1" + "@parcel/core": "^2.4.0" } }, "node_modules/@parcel/packager-css": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@parcel/packager-css/-/packager-css-2.3.1.tgz", - "integrity": "sha512-gvrGNw4tiIyi6SO7at7RJvfCDQIAuy9xJhFtuouuFAl6A1EMhkoL5amcmavfdbN166LJ/3s74t1LYoPeYCnb2Q==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@parcel/packager-css/-/packager-css-2.4.0.tgz", + "integrity": "sha512-LmPDWzkXi60Oy3WrPF0jPKQxeTwW5hmNBgrcXJMHSu+VcXdaQZNzNxVzhnZkJUbDd2z9vAUrUGzdLh8TquC8iQ==", "dev": true, "dependencies": { - "@parcel/plugin": "2.3.1", + "@parcel/plugin": "2.4.0", "@parcel/source-map": "^2.0.0", - "@parcel/utils": "2.3.1", + "@parcel/utils": "2.4.0", "nullthrows": "^1.1.1" }, "engines": { "node": ">= 12.0.0", - "parcel": "^2.3.1" + "parcel": "^2.4.0" }, "funding": { "type": "opencollective", @@ -931,20 +1128,20 @@ } }, "node_modules/@parcel/packager-html": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@parcel/packager-html/-/packager-html-2.3.1.tgz", - "integrity": "sha512-dOPEB0KEyLzDl5zEXjRCo/J/fsc1wVw0gUa+N0A5LAZeYmTOPJgTHhb/ZeNcPKWQT75eGUSEaDXX+oBs1B17xw==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@parcel/packager-html/-/packager-html-2.4.0.tgz", + "integrity": "sha512-OPMIQ1uHYQFpRPrsmm5BqONbAyzjlhVsPRAzHlcBrglG4BTUeOR2ow4MUKblHmVVqc3QHnfZG4nHHtFkeuNQ3A==", "dev": true, "dependencies": { - "@parcel/plugin": "2.3.1", - "@parcel/types": "2.3.1", - "@parcel/utils": "2.3.1", + "@parcel/plugin": "2.4.0", + "@parcel/types": "2.4.0", + "@parcel/utils": "2.4.0", "nullthrows": "^1.1.1", "posthtml": "^0.16.5" }, "engines": { "node": ">= 12.0.0", - "parcel": "^2.3.1" + "parcel": "^2.4.0" }, "funding": { "type": "opencollective", @@ -952,22 +1149,22 @@ } }, "node_modules/@parcel/packager-js": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@parcel/packager-js/-/packager-js-2.3.1.tgz", - "integrity": "sha512-7TikegHYgwiuUQ9bFikG3H47wTms7nVpDQEwBYHmPhDLvwlKCq17HJ39eQKS4740G6umIvQkG5t7mcR1XTXYtg==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@parcel/packager-js/-/packager-js-2.4.0.tgz", + "integrity": "sha512-cfslIH43CJFgBS9PmdFaSnbInMCoejsFCnxtJa2GeUpjCXSfelPRp0OPx7m8n+fap4czftPhoxBALeDUElOZGQ==", "dev": true, "dependencies": { - "@parcel/diagnostic": "2.3.1", - "@parcel/hash": "2.3.1", - "@parcel/plugin": "2.3.1", + "@parcel/diagnostic": "2.4.0", + "@parcel/hash": "2.4.0", + "@parcel/plugin": "2.4.0", "@parcel/source-map": "^2.0.0", - "@parcel/utils": "2.3.1", + "@parcel/utils": "2.4.0", "globals": "^13.2.0", "nullthrows": "^1.1.1" }, "engines": { "node": ">= 12.0.0", - "parcel": "^2.3.1" + "parcel": "^2.4.0" }, "funding": { "type": "opencollective", @@ -975,16 +1172,16 @@ } }, "node_modules/@parcel/packager-raw": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@parcel/packager-raw/-/packager-raw-2.3.1.tgz", - "integrity": "sha512-Gy4WfZPy64+E7Gvvdw3/HG5EFzuBbC64MbLv0AgQNIDub5LG76dPdLLgJ/TS72gXsA43Q2ApaXMHBOC/G0yECA==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@parcel/packager-raw/-/packager-raw-2.4.0.tgz", + "integrity": "sha512-SFfw7chMFITj3J26ZVDJxbO6xwtPFcFBm1js8cwWMgzwuwS6CEc43k5+Abj+2/EqHU9kNJU9eWV5vT6lQwf3HA==", "dev": true, "dependencies": { - "@parcel/plugin": "2.3.1" + "@parcel/plugin": "2.4.0" }, "engines": { "node": ">= 12.0.0", - "parcel": "^2.3.1" + "parcel": "^2.4.0" }, "funding": { "type": "opencollective", @@ -992,19 +1189,19 @@ } }, "node_modules/@parcel/packager-svg": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@parcel/packager-svg/-/packager-svg-2.3.1.tgz", - "integrity": "sha512-lUx+DXymTNKhvxdoNhnb6or4qjGLbXBTAiyfp4q8QlFXJHKVbEEoVgLc9rda9TLIG18Pn4NR9QE+o/nyzwcibQ==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@parcel/packager-svg/-/packager-svg-2.4.0.tgz", + "integrity": "sha512-DwkgrdLEQop+tu9Ocr1ZaadmpsbSgVruJPr80xq1LaB0Jiwrl9HjHStMNH1laNFueK1yydxhnj9C2JQfW28qag==", "dev": true, "dependencies": { - "@parcel/plugin": "2.3.1", - "@parcel/types": "2.3.1", - "@parcel/utils": "2.3.1", + "@parcel/plugin": "2.4.0", + "@parcel/types": "2.4.0", + "@parcel/utils": "2.4.0", "posthtml": "^0.16.4" }, "engines": { "node": ">= 12.0.0", - "parcel": "^2.3.1" + "parcel": "^2.4.0" }, "funding": { "type": "opencollective", @@ -1012,12 +1209,12 @@ } }, "node_modules/@parcel/plugin": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@parcel/plugin/-/plugin-2.3.1.tgz", - "integrity": "sha512-ROOWbgFze7BCF3RkEh8VbcKGlR5UGBuJ8lfCaFrG1VOk7Rxgl8Bmk96TRbZREm/1jB74p2O8twVKyPSC13riow==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@parcel/plugin/-/plugin-2.4.0.tgz", + "integrity": "sha512-ehFUAL2+h27Lv+cYbbXA74UGy8C+eglUjcpvASOOjVRFuD6poMAMliKkKAXBhQaFx/Rvhz27A2PIPv9lL2i4UQ==", "dev": true, "dependencies": { - "@parcel/types": "2.3.1" + "@parcel/types": "2.4.0" }, "engines": { "node": ">= 12.0.0" @@ -1028,19 +1225,20 @@ } }, "node_modules/@parcel/reporter-cli": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@parcel/reporter-cli/-/reporter-cli-2.3.1.tgz", - "integrity": "sha512-rLDxD1SJIiAhd/N3CiRiNKz/NVVyh25tPEOFCNFgoTVC8wJKfzeUEgVuTJQ8lRLrzk0PfY51KyGmWdLqti8jag==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@parcel/reporter-cli/-/reporter-cli-2.4.0.tgz", + "integrity": "sha512-Q9bIFMaGvQgypCDxdMEKOwrJzIHAXScKkuFsqTHnUL6mmH3Mo2CoEGAq/wpMXuPhXRn1dPJcHgTNDwZ2fSzz0A==", "dev": true, "dependencies": { - "@parcel/plugin": "2.3.1", - "@parcel/types": "2.3.1", - "@parcel/utils": "2.3.1", - "chalk": "^4.1.0" + "@parcel/plugin": "2.4.0", + "@parcel/types": "2.4.0", + "@parcel/utils": "2.4.0", + "chalk": "^4.1.0", + "term-size": "^2.2.1" }, "engines": { "node": ">= 12.0.0", - "parcel": "^2.3.1" + "parcel": "^2.4.0" }, "funding": { "type": "opencollective", @@ -1048,17 +1246,17 @@ } }, "node_modules/@parcel/reporter-dev-server": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@parcel/reporter-dev-server/-/reporter-dev-server-2.3.1.tgz", - "integrity": "sha512-ramEx+dFMcgqus2We7jlonQgCo3/xwnjdXUsC+iuJXSKGW7eMCZ5f+fjETkeq2eOt8YYzAML54u7Qkt1gSX39Q==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@parcel/reporter-dev-server/-/reporter-dev-server-2.4.0.tgz", + "integrity": "sha512-24h++wevs7XYuX4dKa4PUfLSstvn3g7udajFv6CeQoME+dR25RL/wH/2LUbhV5ilgXXab76rWIndSqp78xHxPA==", "dev": true, "dependencies": { - "@parcel/plugin": "2.3.1", - "@parcel/utils": "2.3.1" + "@parcel/plugin": "2.4.0", + "@parcel/utils": "2.4.0" }, "engines": { "node": ">= 12.0.0", - "parcel": "^2.3.1" + "parcel": "^2.4.0" }, "funding": { "type": "opencollective", @@ -1066,17 +1264,17 @@ } }, "node_modules/@parcel/resolver-default": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@parcel/resolver-default/-/resolver-default-2.3.1.tgz", - "integrity": "sha512-fScU5ZG/VmdqoqPPArTLHXC7LgsfSVKA6mpZpkpkAyFTMZimPv6HuFwMhIj7jabeWRQKShjpT07Ygq31UBl/Cw==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@parcel/resolver-default/-/resolver-default-2.4.0.tgz", + "integrity": "sha512-K7pIIFmGm1hjg/7Mzkg99i8tfCClKfBUTuc2R5j8cdr2n0mCAi4/f2mFf5svLrb5XZrnDgoQ05tHKklLEfUDUw==", "dev": true, "dependencies": { - "@parcel/node-resolver-core": "2.3.1", - "@parcel/plugin": "2.3.1" + "@parcel/node-resolver-core": "2.4.0", + "@parcel/plugin": "2.4.0" }, "engines": { "node": ">= 12.0.0", - "parcel": "^2.3.1" + "parcel": "^2.4.0" }, "funding": { "type": "opencollective", @@ -1084,17 +1282,17 @@ } }, "node_modules/@parcel/runtime-browser-hmr": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@parcel/runtime-browser-hmr/-/runtime-browser-hmr-2.3.1.tgz", - "integrity": "sha512-Zd6fzBaNNhLBqROy1Jtwsddf5/E2I7zVecHPWutAUT9L4xX3XMH7Yv3W6vmLLq3X0mdfmoRtVnQseAMPAyfNog==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@parcel/runtime-browser-hmr/-/runtime-browser-hmr-2.4.0.tgz", + "integrity": "sha512-swPFtvxGoCA9LEjU/pHPNjxG1l0fte8447zXwRN/AaYrtjNu9Ww117OSKCyvCnE143E79jZOFStodTQGFuH+9A==", "dev": true, "dependencies": { - "@parcel/plugin": "2.3.1", - "@parcel/utils": "2.3.1" + "@parcel/plugin": "2.4.0", + "@parcel/utils": "2.4.0" }, "engines": { "node": ">= 12.0.0", - "parcel": "^2.3.1" + "parcel": "^2.4.0" }, "funding": { "type": "opencollective", @@ -1102,18 +1300,18 @@ } }, "node_modules/@parcel/runtime-js": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@parcel/runtime-js/-/runtime-js-2.3.1.tgz", - "integrity": "sha512-Nmgbo+v5p5g1DSHbmZni22ZsHhcAsi7z6Qk9cdXrt/fW2VbQRu+yBKebeinwUnWGd5Lwu5UZ2mwn2nSaSV8Spw==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@parcel/runtime-js/-/runtime-js-2.4.0.tgz", + "integrity": "sha512-67OOvmkDdtmgzZVP/EyAzoXhJ/Ug3LUVUt7idg9arun5rdJptqEb3Um3wmH0zjcNa9jMbJt7Kl5x1wA8dJgPYg==", "dev": true, "dependencies": { - "@parcel/plugin": "2.3.1", - "@parcel/utils": "2.3.1", + "@parcel/plugin": "2.4.0", + "@parcel/utils": "2.4.0", "nullthrows": "^1.1.1" }, "engines": { "node": ">= 12.0.0", - "parcel": "^2.3.1" + "parcel": "^2.4.0" }, "funding": { "type": "opencollective", @@ -1121,18 +1319,18 @@ } }, "node_modules/@parcel/runtime-react-refresh": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@parcel/runtime-react-refresh/-/runtime-react-refresh-2.3.1.tgz", - "integrity": "sha512-42ldT80UZ8fqm0M5td3YviBn6fFYwcva3PdWLfwC5b1woug/5/FevMna+ndNBSFjt+xbFLUFf6bDxnV7vlWHHw==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@parcel/runtime-react-refresh/-/runtime-react-refresh-2.4.0.tgz", + "integrity": "sha512-flnr+bf06lMZPbXZZLLaFNrPHvYpfuXTVovEghyUW46qLVpaHj33dpsU/LqZplIuHgBp2ibgrKhr/hY9ell68w==", "dev": true, "dependencies": { - "@parcel/plugin": "2.3.1", - "@parcel/utils": "2.3.1", + "@parcel/plugin": "2.4.0", + "@parcel/utils": "2.4.0", "react-refresh": "^0.9.0" }, "engines": { "node": ">= 12.0.0", - "parcel": "^2.3.1" + "parcel": "^2.4.0" }, "funding": { "type": "opencollective", @@ -1140,18 +1338,18 @@ } }, "node_modules/@parcel/runtime-service-worker": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@parcel/runtime-service-worker/-/runtime-service-worker-2.3.1.tgz", - "integrity": "sha512-kTt1DqMIQt5eNAJZTxeegLgGxHC4qXSaBrfQanezp+1fmRi1TOWvKgM7lzKwY9IaXfyCV/DR+Wy95iR6r1P70A==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@parcel/runtime-service-worker/-/runtime-service-worker-2.4.0.tgz", + "integrity": "sha512-RgM5QUqW22WzstW03CtV+Oih8VGVuwsf94Cc4hLouU2EAD0NUJgATWbFocZVTZIBTKELAWh2gjpSQDdnL4Ur+A==", "dev": true, "dependencies": { - "@parcel/plugin": "2.3.1", - "@parcel/utils": "2.3.1", + "@parcel/plugin": "2.4.0", + "@parcel/utils": "2.4.0", "nullthrows": "^1.1.1" }, "engines": { "node": ">= 12.0.0", - "parcel": "^2.3.1" + "parcel": "^2.4.0" }, "funding": { "type": "opencollective", @@ -1171,15 +1369,15 @@ } }, "node_modules/@parcel/transformer-babel": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@parcel/transformer-babel/-/transformer-babel-2.3.1.tgz", - "integrity": "sha512-KEyuFNQJYFMP39XvhTu2ZzsD+gdQKyA3X+5DViH2bSgZeEjCIfAhAjg7mSfKeD/u8ZVBmIDq2M/QjDO+taM0KQ==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@parcel/transformer-babel/-/transformer-babel-2.4.0.tgz", + "integrity": "sha512-iWDa7KzJTMP3HNmrYxiYq/S6redk2qminx/9MwmKIN9jzm8mgts2Lj9lOg/t66YaDGky6JAvw4DhB2qW4ni6yQ==", "dev": true, "dependencies": { - "@parcel/diagnostic": "2.3.1", - "@parcel/plugin": "2.3.1", + "@parcel/diagnostic": "2.4.0", + "@parcel/plugin": "2.4.0", "@parcel/source-map": "^2.0.0", - "@parcel/utils": "2.3.1", + "@parcel/utils": "2.4.0", "browserslist": "^4.6.6", "json5": "^2.2.0", "nullthrows": "^1.1.1", @@ -1187,7 +1385,7 @@ }, "engines": { "node": ">= 12.0.0", - "parcel": "^2.3.1" + "parcel": "^2.4.0" }, "funding": { "type": "opencollective", @@ -1195,23 +1393,22 @@ } }, "node_modules/@parcel/transformer-css": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@parcel/transformer-css/-/transformer-css-2.3.1.tgz", - "integrity": "sha512-InuEbSu7yLp3jjnmVB0MzO8WjG0123EJqGVVlB5WbEBUxzLN3bgTJDKP5O7xGgipjhNIpFUjx2SU7eeSb6iFog==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@parcel/transformer-css/-/transformer-css-2.4.0.tgz", + "integrity": "sha512-D2u48LuiQsQvbknABE0wVKFp9r6yCgWrHKEP1J6EJ31c49nXGXDHrpHJJwqq9BvAs/124eBI5mSsehTJyFEMwg==", "dev": true, "dependencies": { - "@parcel/hash": "2.3.1", - "@parcel/plugin": "2.3.1", + "@parcel/css": "^1.7.2", + "@parcel/diagnostic": "2.4.0", + "@parcel/plugin": "2.4.0", "@parcel/source-map": "^2.0.0", - "@parcel/utils": "2.3.1", - "nullthrows": "^1.1.1", - "postcss": "^8.4.5", - "postcss-value-parser": "^4.2.0", - "semver": "^5.7.1" + "@parcel/utils": "2.4.0", + "browserslist": "^4.6.6", + "nullthrows": "^1.1.1" }, "engines": { "node": ">= 12.0.0", - "parcel": "^2.3.1" + "parcel": "^2.4.0" }, "funding": { "type": "opencollective", @@ -1219,14 +1416,14 @@ } }, "node_modules/@parcel/transformer-html": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@parcel/transformer-html/-/transformer-html-2.3.1.tgz", - "integrity": "sha512-23Z7kuSDnLzB8Du88pua2VjgOh7ZUpW1hedX1FubV2PfUGpZvAg7XBTdTGp+7Tmy8PIGyZrP3CP1UNQkjLO8bQ==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@parcel/transformer-html/-/transformer-html-2.4.0.tgz", + "integrity": "sha512-2/8X/o5QaCNVPr4wkxLCUub7v/YVvVN2L5yCEcTatNeFhNg/2iz7P2ekfqOaoDCHWZEOBT1VTwPbdBt+TMM71Q==", "dev": true, "dependencies": { - "@parcel/diagnostic": "2.3.1", - "@parcel/hash": "2.3.1", - "@parcel/plugin": "2.3.1", + "@parcel/diagnostic": "2.4.0", + "@parcel/hash": "2.4.0", + "@parcel/plugin": "2.4.0", "nullthrows": "^1.1.1", "posthtml": "^0.16.5", "posthtml-parser": "^0.10.1", @@ -1235,7 +1432,7 @@ }, "engines": { "node": ">= 12.0.0", - "parcel": "^2.3.1" + "parcel": "^2.4.0" }, "funding": { "type": "opencollective", @@ -1243,32 +1440,32 @@ } }, "node_modules/@parcel/transformer-image": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@parcel/transformer-image/-/transformer-image-2.3.1.tgz", - "integrity": "sha512-8A+XnUhDnEAbfc7GCBRvCsSiv/6Ro5+vd1sZ5tQJmajcc0nfIbolZQuztEHZMDPjEr+WIcOCJZ5re5bCG3NhZA==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@parcel/transformer-image/-/transformer-image-2.4.0.tgz", + "integrity": "sha512-JZkQvGGoGiD0AVKLIbAYYUWxepMmUaWZ4XXx71MmS/kA7cUDwTZ0CXq63YnSY1m+DX+ClTuTN8mBlwe2dkcGbA==", "dev": true, "dependencies": { - "@parcel/plugin": "2.3.1", - "@parcel/workers": "2.3.1", + "@parcel/plugin": "2.4.0", + "@parcel/workers": "2.4.0", "nullthrows": "^1.1.1" }, "engines": { "node": ">= 12.0.0", - "parcel": "^2.3.1" + "parcel": "^2.4.0" } }, "node_modules/@parcel/transformer-js": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@parcel/transformer-js/-/transformer-js-2.3.1.tgz", - "integrity": "sha512-9mHpfw008l00cW8QW21Nhfax/aOqZ+CozNXj5gWV0uJ9is5x0TumKYXtYUsuP9LunAra/ZenvpQjCFibTXe51Q==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@parcel/transformer-js/-/transformer-js-2.4.0.tgz", + "integrity": "sha512-eeLHFwv3jT3GmIxpLC7B8EXExGK0MFaK91HXljOMh6l8a+GlQYw27MSFQVtoXr0Olx9Uq2uvjXP1+zSsq3LQUQ==", "dev": true, "dependencies": { - "@parcel/diagnostic": "2.3.1", - "@parcel/plugin": "2.3.1", + "@parcel/diagnostic": "2.4.0", + "@parcel/plugin": "2.4.0", "@parcel/source-map": "^2.0.0", - "@parcel/utils": "2.3.1", - "@parcel/workers": "2.3.1", - "@swc/helpers": "^0.2.11", + "@parcel/utils": "2.4.0", + "@parcel/workers": "2.4.0", + "@swc/helpers": "^0.3.6", "browserslist": "^4.6.6", "detect-libc": "^1.0.3", "nullthrows": "^1.1.1", @@ -1277,7 +1474,7 @@ }, "engines": { "node": ">= 12.0.0", - "parcel": "^2.3.1" + "parcel": "^2.4.0" }, "funding": { "type": "opencollective", @@ -1285,17 +1482,17 @@ } }, "node_modules/@parcel/transformer-json": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@parcel/transformer-json/-/transformer-json-2.3.1.tgz", - "integrity": "sha512-usaoro1uH5hxI57x7Qve4Y6Tsf5GitVh6gC3e5TaJFc3mnr5pn3KKviWC0g0haeluv9NCPK++alQuzmpgIooWQ==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@parcel/transformer-json/-/transformer-json-2.4.0.tgz", + "integrity": "sha512-3nR+d39mbURoXIypDfVCaxpwL65qMV+h8SLD78up2uhaRGklHQfN7GuemR7L+mcVAgNrmwVvZHhyNjdgYwWqqg==", "dev": true, "dependencies": { - "@parcel/plugin": "2.3.1", + "@parcel/plugin": "2.4.0", "json5": "^2.2.0" }, "engines": { "node": ">= 12.0.0", - "parcel": "^2.3.1" + "parcel": "^2.4.0" }, "funding": { "type": "opencollective", @@ -1303,14 +1500,15 @@ } }, "node_modules/@parcel/transformer-postcss": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@parcel/transformer-postcss/-/transformer-postcss-2.3.1.tgz", - "integrity": "sha512-rpoEGpStj1THw/NH3CuujrKan84h6SEnDBem8l/GAE7/cRDQs/O/JnJKP+oXcKOGH1KNdcuPWYb8ORW9Pe+Z5w==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@parcel/transformer-postcss/-/transformer-postcss-2.4.0.tgz", + "integrity": "sha512-ijIa2x+dbKnJhr7zO5WlXkvuj832fDoGksMBk2DX3u2WMrbh2rqVWPpGFsDhESx7EAy38nUoV/5KUdrNqUmCEA==", "dev": true, "dependencies": { - "@parcel/hash": "2.3.1", - "@parcel/plugin": "2.3.1", - "@parcel/utils": "2.3.1", + "@parcel/diagnostic": "2.4.0", + "@parcel/hash": "2.4.0", + "@parcel/plugin": "2.4.0", + "@parcel/utils": "2.4.0", "clone": "^2.1.1", "nullthrows": "^1.1.1", "postcss-value-parser": "^4.2.0", @@ -1318,7 +1516,7 @@ }, "engines": { "node": ">= 12.0.0", - "parcel": "^2.3.1" + "parcel": "^2.4.0" }, "funding": { "type": "opencollective", @@ -1326,13 +1524,13 @@ } }, "node_modules/@parcel/transformer-posthtml": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@parcel/transformer-posthtml/-/transformer-posthtml-2.3.1.tgz", - "integrity": "sha512-ahFLfV8zdm6lH6gGSZxgUvFbP0qsclucV53ubRIRV+croGp1KhMCstbMY5GKGYHWoI6RRrxnbriJwVcbX9tUVQ==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@parcel/transformer-posthtml/-/transformer-posthtml-2.4.0.tgz", + "integrity": "sha512-xoL3AzgtVeRRAo6bh0AHAYm9bt1jZ+HiH86/7oARj/uJs6Wd8kXK/DZf6fH+F87hj4e7bnjmDDc0GPVK0lPz1w==", "dev": true, "dependencies": { - "@parcel/plugin": "2.3.1", - "@parcel/utils": "2.3.1", + "@parcel/plugin": "2.4.0", + "@parcel/utils": "2.4.0", "nullthrows": "^1.1.1", "posthtml": "^0.16.5", "posthtml-parser": "^0.10.1", @@ -1341,7 +1539,7 @@ }, "engines": { "node": ">= 12.0.0", - "parcel": "^2.3.1" + "parcel": "^2.4.0" }, "funding": { "type": "opencollective", @@ -1349,16 +1547,16 @@ } }, "node_modules/@parcel/transformer-raw": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@parcel/transformer-raw/-/transformer-raw-2.3.1.tgz", - "integrity": "sha512-45ObmhBJ2wdlOGTsIEy9T+FOoQWY+x8HN2Cw9/ZhMWOpLtof56om5xk5u7hmsMMe/4Jaqxzkw3vInqOJR6bc1Q==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@parcel/transformer-raw/-/transformer-raw-2.4.0.tgz", + "integrity": "sha512-fciFbNrzj0kLlDgr6OsI0PUv414rVygDWAsgbCCq4BexDkuemMs9f9FjMctx9B2VZlctE8dTT4RGkuQumTIpUg==", "dev": true, "dependencies": { - "@parcel/plugin": "2.3.1" + "@parcel/plugin": "2.4.0" }, "engines": { "node": ">= 12.0.0", - "parcel": "^2.3.1" + "parcel": "^2.4.0" }, "funding": { "type": "opencollective", @@ -1366,18 +1564,18 @@ } }, "node_modules/@parcel/transformer-react-refresh-wrap": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@parcel/transformer-react-refresh-wrap/-/transformer-react-refresh-wrap-2.3.1.tgz", - "integrity": "sha512-4uufhCCneMFpx6YaP2/ae/Ilpna5GSYuUXijlFHy4qcAIYkdtrHWRJuLBUBD4qktkmG22wTWgRwGHMk4seRDzg==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@parcel/transformer-react-refresh-wrap/-/transformer-react-refresh-wrap-2.4.0.tgz", + "integrity": "sha512-9+f6sGOWkf0jyUQ1CuFWk+04Mq3KTOCU9kRiwCHX1YdUCv5uki6r9XUSpqiYodrV+L6w9CCwLvGMLCDHxtCxMg==", "dev": true, "dependencies": { - "@parcel/plugin": "2.3.1", - "@parcel/utils": "2.3.1", + "@parcel/plugin": "2.4.0", + "@parcel/utils": "2.4.0", "react-refresh": "^0.9.0" }, "engines": { "node": ">= 12.0.0", - "parcel": "^2.3.1" + "parcel": "^2.4.0" }, "funding": { "type": "opencollective", @@ -1385,18 +1583,18 @@ } }, "node_modules/@parcel/transformer-sass": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@parcel/transformer-sass/-/transformer-sass-2.3.1.tgz", - "integrity": "sha512-lbbY/zhOx7EwWsoACx0sTgAEaPpIWnJyLA7/n1T52ApvSwzL1ogTaMzjb7FQY11v6LsOXhiyyPLFPqR2qo4LMA==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@parcel/transformer-sass/-/transformer-sass-2.4.0.tgz", + "integrity": "sha512-PBQEyAKRx/G7h7prTVE1a5p+CG0mmnS/32HIp3Odkha6l7kHyKMIsyvnkS89xJooq4a/quJyDCam6bbG/P9KZg==", "dev": true, "dependencies": { - "@parcel/plugin": "2.3.1", + "@parcel/plugin": "2.4.0", "@parcel/source-map": "^2.0.0", "sass": "^1.38.0" }, "engines": { "node": ">= 12.0.0", - "parcel": "^2.3.1" + "parcel": "^2.4.0" }, "funding": { "type": "opencollective", @@ -1404,14 +1602,14 @@ } }, "node_modules/@parcel/transformer-svg": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@parcel/transformer-svg/-/transformer-svg-2.3.1.tgz", - "integrity": "sha512-3V9LIpR+p8NEr8rnHHIa9PKUwQ4fEkhSo0S8g+FH32/f7y6IMuTy7hn0leYdfATNVi1Nx7d4boN4XSyUuORQfw==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@parcel/transformer-svg/-/transformer-svg-2.4.0.tgz", + "integrity": "sha512-D+yzVtSxtQML3d26fd/g4E/xYW68+OMbMUVLXORtoYMU42fnXQkJP6jGOdqy8Td+WORNY7EwVtQnESLwhBmolw==", "dev": true, "dependencies": { - "@parcel/diagnostic": "2.3.1", - "@parcel/hash": "2.3.1", - "@parcel/plugin": "2.3.1", + "@parcel/diagnostic": "2.4.0", + "@parcel/hash": "2.4.0", + "@parcel/plugin": "2.4.0", "nullthrows": "^1.1.1", "posthtml": "^0.16.5", "posthtml-parser": "^0.10.1", @@ -1420,7 +1618,7 @@ }, "engines": { "node": ">= 12.0.0", - "parcel": "^2.3.1" + "parcel": "^2.4.0" }, "funding": { "type": "opencollective", @@ -1428,31 +1626,31 @@ } }, "node_modules/@parcel/types": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@parcel/types/-/types-2.3.1.tgz", - "integrity": "sha512-i2UyUoA4DzyYxe9rZRDuMAZ6TD3Mq3tTTqeJ2/zA6w83Aon3cqdE9va91peu1fKRGyRqE5lwWRtA7ktF1A2SVA==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@parcel/types/-/types-2.4.0.tgz", + "integrity": "sha512-nysGIbBEnp+7R+tKTysdcTFOZDTCodsiXFeAhYQa5bhiOnG1l9gzhxQnE2OsdsgvMm40IOsgKprqvM/DbdLfnQ==", "dev": true, "dependencies": { - "@parcel/cache": "2.3.1", - "@parcel/diagnostic": "2.3.1", - "@parcel/fs": "2.3.1", - "@parcel/package-manager": "2.3.1", + "@parcel/cache": "2.4.0", + "@parcel/diagnostic": "2.4.0", + "@parcel/fs": "2.4.0", + "@parcel/package-manager": "2.4.0", "@parcel/source-map": "^2.0.0", - "@parcel/workers": "2.3.1", + "@parcel/workers": "2.4.0", "utility-types": "^3.10.0" } }, "node_modules/@parcel/utils": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@parcel/utils/-/utils-2.3.1.tgz", - "integrity": "sha512-OFdh/HuAcce753/U3QoORzYU3N5oZqCfQNRb0i3onuz/qpli5TyxUl/k1BuTqlKYr6Px3kj05g6GFi9kRBOMbw==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@parcel/utils/-/utils-2.4.0.tgz", + "integrity": "sha512-sdNo+mZqDZT8LJYB6WWRKa4wFVZcK6Zb5Jh6Du76QvXXwHbPIQNZgJBb6gd/Rbk4GLOp2tW7MnBfq6zP9E9E2g==", "dev": true, "dependencies": { - "@parcel/codeframe": "2.3.1", - "@parcel/diagnostic": "2.3.1", - "@parcel/hash": "2.3.1", - "@parcel/logger": "2.3.1", - "@parcel/markdown-ansi": "2.3.1", + "@parcel/codeframe": "2.4.0", + "@parcel/diagnostic": "2.4.0", + "@parcel/hash": "2.4.0", + "@parcel/logger": "2.4.0", + "@parcel/markdown-ansi": "2.4.0", "@parcel/source-map": "^2.0.0", "chalk": "^4.1.0" }, @@ -1483,15 +1681,15 @@ } }, "node_modules/@parcel/workers": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@parcel/workers/-/workers-2.3.1.tgz", - "integrity": "sha512-e2P/9p5AYBLfNRs8n+57ChGrn5171oHwY54dz/jj0CrXKN1q0b+rNwzYsPaAtOicBoqmm1s5I3cjfO6GfJP65A==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@parcel/workers/-/workers-2.4.0.tgz", + "integrity": "sha512-eSFyvEoXXPgFzQfKIlpkUjpHfIbezUCRFTPKyJAKCxvU5DSXOpb1kz5vDESWQ4qTZXKnrKvxS1PPWN6bam9z0g==", "dev": true, "dependencies": { - "@parcel/diagnostic": "2.3.1", - "@parcel/logger": "2.3.1", - "@parcel/types": "2.3.1", - "@parcel/utils": "2.3.1", + "@parcel/diagnostic": "2.4.0", + "@parcel/logger": "2.4.0", + "@parcel/types": "2.4.0", + "@parcel/utils": "2.4.0", "chrome-trace-event": "^1.0.2", "nullthrows": "^1.1.1" }, @@ -1503,18 +1701,34 @@ "url": "https://opencollective.com/parcel" }, "peerDependencies": { - "@parcel/core": "^2.3.1" + "@parcel/core": "^2.4.0" } }, "node_modules/@popperjs/core": { - "version": "2.11.2", - "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.2.tgz", - "integrity": "sha512-92FRmppjjqz29VMJ2dn+xdyXZBrMlE42AV6Kq6BwjWV7CNUW1hs2FtxSNLQE+gJhaZ6AAmYuO9y8dshhcBl7vA==", + "version": "2.11.4", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.4.tgz", + "integrity": "sha512-q/ytXxO5NKvyT37pmisQAItCFqA7FD/vNb8dgaJy3/630Fsc+Mz9/9f2SziBoIZ30TJooXyTwZmhi1zjXmObYg==", "funding": { "type": "opencollective", "url": "https://opencollective.com/popperjs" } }, + "node_modules/@sidvind/better-ajv-errors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@sidvind/better-ajv-errors/-/better-ajv-errors-1.1.1.tgz", + "integrity": "sha512-CXnmMcV4QoyWuFA0zlDk0AWMHftaMFAIFWz68AH4EXOO2iUEq0gsonJEhY3OjM08xHYobqqDeCAPPEsL5E+8QA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.16.0", + "chalk": "^4.1.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "peerDependencies": { + "ajv": "4.11.8 - 8" + } + }, "node_modules/@sindresorhus/is": { "version": "0.14.0", "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", @@ -1525,9 +1739,9 @@ } }, "node_modules/@swc/helpers": { - "version": "0.2.14", - "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.2.14.tgz", - "integrity": "sha512-wpCQMhf5p5GhNg2MmGKXzUNwxe7zRiCsmqYsamez2beP7mKPCSiu+BjZcdN95yYSzO857kr0VfQewmGpS77nqA==", + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.3.8.tgz", + "integrity": "sha512-aWItSZvJj4+GI6FWkjZR13xPNPctq2RRakzo+O6vN7bC2yjwdg5EFpgaSAUn95b7BGSgcflvzVDPoKmJv24IOg==", "dev": true }, "node_modules/@szmarczak/http-timer": { @@ -1627,6 +1841,15 @@ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, + "node_modules/acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/agent-base": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", @@ -1966,7 +2189,7 @@ }, "node_modules/bootstrap-datepicker": { "version": "1.9.0", - "resolved": "git+ssh://git@github.com/uxsolutions/bootstrap-datepicker.git#6aaf64391d3f2c04480f162a54e71b5c8c7ce5c7", + "resolved": "git+ssh://git@github.com/uxsolutions/bootstrap-datepicker.git#80575b80111659e0a2099bdf594364e23f80a686", "license": "Apache-2.0", "dependencies": { "jquery": ">=3.4.0 <4.0.0" @@ -2108,15 +2331,25 @@ } }, "node_modules/browserslist": { - "version": "4.19.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.19.1.tgz", - "integrity": "sha512-u2tbbG5PdKRTUoctO3NBD8FQ5HdPh1ZXPHzp1rwaa5jTc+RV9/+RlWiAIKmjRPQF+xbGM9Kklj5bZQFa2s/38A==", + "version": "4.20.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.2.tgz", + "integrity": "sha512-CQOBCqp/9pDvDbx3xfMi+86pr4KXIf2FDkTTdeuYw8OxS9t898LA1Khq57gtufFILXpfgsSx5woNgsBgvGjpsA==", "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], "dependencies": { - "caniuse-lite": "^1.0.30001286", - "electron-to-chromium": "^1.4.17", + "caniuse-lite": "^1.0.30001317", + "electron-to-chromium": "^1.4.84", "escalade": "^3.1.1", - "node-releases": "^2.0.1", + "node-releases": "^2.0.2", "picocolors": "^1.0.0" }, "bin": { @@ -2124,10 +2357,6 @@ }, "engines": { "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" } }, "node_modules/buffer": { @@ -2176,32 +2405,41 @@ "dev": true }, "node_modules/cacache": { - "version": "15.3.0", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", - "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.0.3.tgz", + "integrity": "sha512-eC7wYodNCVb97kuHGk5P+xZsvUJHkhSEOyNwkenqQPAsOtrTjvWOE5vSPNBpz9d8X3acIf6w2Ub5s4rvOCTs4g==", "dev": true, "dependencies": { - "@npmcli/fs": "^1.0.0", - "@npmcli/move-file": "^1.0.1", + "@npmcli/fs": "^2.1.0", + "@npmcli/move-file": "^1.1.2", "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "glob": "^7.1.4", + "fs-minipass": "^2.1.0", + "glob": "^7.2.0", "infer-owner": "^1.0.4", - "lru-cache": "^6.0.0", - "minipass": "^3.1.1", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", "minipass-collect": "^1.0.2", "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.2", - "mkdirp": "^1.0.3", + "minipass-pipeline": "^1.2.4", + "mkdirp": "^1.0.4", "p-map": "^4.0.0", "promise-inflight": "^1.0.1", "rimraf": "^3.0.2", "ssri": "^8.0.1", - "tar": "^6.0.2", + "tar": "^6.1.11", "unique-filename": "^1.1.1" }, "engines": { - "node": ">= 10" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/cacache/node_modules/lru-cache": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.7.1.tgz", + "integrity": "sha512-cRffBiTW8s73eH4aTXqBcTLU0xQnwGV3/imttRHGWCrbergmnK4D6JXQd8qin5z43HnDwRI+o7mVW0LEB+tpAw==", + "dev": true, + "engines": { + "node": ">=12" } }, "node_modules/cacheable-request": { @@ -2231,15 +2469,6 @@ "node": ">=8" } }, - "node_modules/cacheable-request/node_modules/normalize-url": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", - "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/cachedir": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.3.0.tgz", @@ -2270,26 +2499,20 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/caniuse-api": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", - "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", - "dev": true, - "dependencies": { - "browserslist": "^4.0.0", - "caniuse-lite": "^1.0.0", - "lodash.memoize": "^4.1.2", - "lodash.uniq": "^4.5.0" - } - }, "node_modules/caniuse-lite": { - "version": "1.0.30001314", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001314.tgz", - "integrity": "sha512-0zaSO+TnCHtHJIbpLroX7nsD+vYuOVjl3uzFbJO1wMVbuveJA0RK2WcQA9ZUIOiO0/ArMiMgHJLxfEZhQiC0kw==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - } + "version": "1.0.30001320", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001320.tgz", + "integrity": "sha512-MWPzG54AGdo3nWx7zHZTefseM5Y1ccM7hlQKHRqJkPozUaw3hNbBTMmLn16GG2FUzjR13Cr3NPfhIieX5PzXDA==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + } + ] }, "node_modules/caseless": { "version": "0.12.0", @@ -2521,12 +2744,6 @@ "color-support": "bin.js" } }, - "node_modules/colord": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.2.tgz", - "integrity": "sha512-Uqbg+J445nc1TKn4FoDPS6ZZqAvEDnwrH42yo8B40JSOgSLxMZ/gt3h4nmCtPLQeXhjJJkqBx7SCY35WnIixaQ==", - "dev": true - }, "node_modules/colorette": { "version": "2.0.16", "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.16.tgz", @@ -2556,12 +2773,12 @@ } }, "node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", + "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", "dev": true, "engines": { - "node": ">= 10" + "node": ">= 6" } }, "node_modules/common-tags": { @@ -2647,21 +2864,6 @@ "node": ">=8" } }, - "node_modules/css-declaration-sorter": { - "version": "6.1.4", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.1.4.tgz", - "integrity": "sha512-lpfkqS0fctcmZotJGhnxkIyJWvBXgpyi2wsFd4J8VB7wzyrT6Ch/3Q+FMNJpjK4gu1+GN5khOnpU2ZVKrLbhCw==", - "dev": true, - "dependencies": { - "timsort": "^0.3.0" - }, - "engines": { - "node": ">= 10" - }, - "peerDependencies": { - "postcss": "^8.0.9" - } - }, "node_modules/css-select": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.2.1.tgz", @@ -2703,94 +2905,6 @@ "url": "https://github.com/sponsors/fb55" } }, - "node_modules/cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "dev": true, - "bin": { - "cssesc": "bin/cssesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/cssnano": { - "version": "5.0.17", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.0.17.tgz", - "integrity": "sha512-fmjLP7k8kL18xSspeXTzRhaFtRI7DL9b8IcXR80JgtnWBpvAzHT7sCR/6qdn0tnxIaINUN6OEQu83wF57Gs3Xw==", - "dev": true, - "dependencies": { - "cssnano-preset-default": "^5.1.12", - "lilconfig": "^2.0.3", - "yaml": "^1.10.2" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/cssnano" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/cssnano-preset-default": { - "version": "5.1.12", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.1.12.tgz", - "integrity": "sha512-rO/JZYyjW1QNkWBxMGV28DW7d98UDLaF759frhli58QFehZ+D/LSmwQ2z/ylBAe2hUlsIWTq6NYGfQPq65EF9w==", - "dev": true, - "dependencies": { - "css-declaration-sorter": "^6.0.3", - "cssnano-utils": "^3.0.2", - "postcss-calc": "^8.2.0", - "postcss-colormin": "^5.2.5", - "postcss-convert-values": "^5.0.4", - "postcss-discard-comments": "^5.0.3", - "postcss-discard-duplicates": "^5.0.3", - "postcss-discard-empty": "^5.0.3", - "postcss-discard-overridden": "^5.0.4", - "postcss-merge-longhand": "^5.0.6", - "postcss-merge-rules": "^5.0.6", - "postcss-minify-font-values": "^5.0.4", - "postcss-minify-gradients": "^5.0.6", - "postcss-minify-params": "^5.0.5", - "postcss-minify-selectors": "^5.1.3", - "postcss-normalize-charset": "^5.0.3", - "postcss-normalize-display-values": "^5.0.3", - "postcss-normalize-positions": "^5.0.4", - "postcss-normalize-repeat-style": "^5.0.4", - "postcss-normalize-string": "^5.0.4", - "postcss-normalize-timing-functions": "^5.0.3", - "postcss-normalize-unicode": "^5.0.4", - "postcss-normalize-url": "^5.0.5", - "postcss-normalize-whitespace": "^5.0.4", - "postcss-ordered-values": "^5.0.5", - "postcss-reduce-initial": "^5.0.3", - "postcss-reduce-transforms": "^5.0.4", - "postcss-svgo": "^5.0.4", - "postcss-unique-selectors": "^5.0.4" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/cssnano-utils": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.0.2.tgz", - "integrity": "sha512-KhprijuQv2sP4kT92sSQwhlK3SJTbDIsxcfIEySB0O+3m9esFOai7dP9bMx5enHAh2MwarVIcnwiWoOm01RIbQ==", - "dev": true, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, "node_modules/csso": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", @@ -2804,9 +2918,9 @@ } }, "node_modules/cypress": { - "version": "9.5.1", - "resolved": "https://registry.npmjs.org/cypress/-/cypress-9.5.1.tgz", - "integrity": "sha512-H7lUWB3Svr44gz1rNnj941xmdsCljXoJa2cDneAltjI9leKLMQLm30x6jLlpQ730tiVtIbW5HdUmBzPzwzfUQg==", + "version": "9.5.2", + "resolved": "https://registry.npmjs.org/cypress/-/cypress-9.5.2.tgz", + "integrity": "sha512-gYiQYvJozMzDOriUV1rCt6CeRM/pRK4nhwGJj3nJQyX2BoUdTCVwp30xDMKc771HiNVhBtgj5o5/iBdVDVXQUg==", "dev": true, "hasInstallScript": true, "dependencies": { @@ -2869,15 +2983,6 @@ "cypress": "^4.x || ^5.x || ^6.x || ^7.x || ^8.x || ^9.x" } }, - "node_modules/cypress/node_modules/commander": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", - "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, "node_modules/cypress/node_modules/semver": { "version": "7.3.5", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", @@ -2926,15 +3031,15 @@ } }, "node_modules/dayjs": { - "version": "1.10.7", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.10.7.tgz", - "integrity": "sha512-P6twpd70BcPK34K26uJ1KT3wlhpuOAPoMwJzpsIWUxHZ7wpmbdZL/hQqBDfz7hGurYSa5PhzdhDHtt319hL3ig==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.0.tgz", + "integrity": "sha512-JLC809s6Y948/FuCZPm5IX8rRhQwOiyMb2TfVVQEixG7P8Lm/gt5S7yoQZmC8x1UehI9Pb7sksEt4xx14m+7Ug==", "dev": true }, "node_modules/debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, "dependencies": { "ms": "2.1.2" @@ -2975,6 +3080,15 @@ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, + "node_modules/deepmerge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/defer-to-connect": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", @@ -3077,9 +3191,9 @@ ] }, "node_modules/domhandler": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.0.tgz", - "integrity": "sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", "dev": true, "dependencies": { "domelementtype": "^2.2.0" @@ -3149,9 +3263,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.68", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.68.tgz", - "integrity": "sha512-cId+QwWrV8R1UawO6b9BR1hnkJ4EJPCPAr4h315vliHUtVUJDk39Sg1PMNnaWKfj5x+93ssjeJ9LKL6r8LaMiA==", + "version": "1.4.96", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.96.tgz", + "integrity": "sha512-DPNjvNGPabv6FcyjzLAN4C0psN/GgD9rSGvMTuv81SeXG/EX3mCz0wiw9N1tUEnfQXYCJi3H8M0oFPRziZh7rw==", "dev": true }, "node_modules/emoji-regex": { @@ -3258,12 +3372,12 @@ } }, "node_modules/eslint": { - "version": "8.8.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.8.0.tgz", - "integrity": "sha512-H3KXAzQGBH1plhYS3okDix2ZthuYJlQQEGE5k0IKuEqUSiyu4AmxxlJ2MtTYeJ3xB4jDhcYCwGOg2TXYdnDXlQ==", + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.12.0.tgz", + "integrity": "sha512-it1oBL9alZg1S8UycLm5YDMAkIhtH6FtAzuZs6YvoGVldWjbS08BkAdb/ymP9LlAyq8koANu32U7Ib/w+UNh8Q==", "dev": true, "dependencies": { - "@eslint/eslintrc": "^1.0.5", + "@eslint/eslintrc": "^1.2.1", "@humanwhocodes/config-array": "^0.9.2", "ajv": "^6.10.0", "chalk": "^4.0.0", @@ -3271,10 +3385,10 @@ "debug": "^4.3.2", "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.1.0", + "eslint-scope": "^7.1.1", "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.2.0", - "espree": "^9.3.0", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.3.1", "esquery": "^1.4.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", @@ -3310,9 +3424,9 @@ } }, "node_modules/eslint-scope": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.0.tgz", - "integrity": "sha512-aWwkhnS0qAXqNOgKOK0dJ2nvzEbhEvpy8OlJ9kZ0FeZnA6zpjv1/Vei+puGFFX7zkPCkHHXb7IDX3A+7yPrRWg==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", "dev": true, "dependencies": { "esrecurse": "^4.3.0", @@ -3350,23 +3464,23 @@ } }, "node_modules/eslint-visitor-keys": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.2.0.tgz", - "integrity": "sha512-IOzT0X126zn7ALX0dwFiUQEdsfzrm4+ISsQS8nukaJXwEyYKRSnEIIDULYg1mCtGp7UUXgfGl7BIolXREQK+XQ==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, "node_modules/espree": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.0.tgz", - "integrity": "sha512-d/5nCsb0JcqsSEeQzFZ8DH1RmxPcglRWh24EFTlUEmCKoehXGdpsx0RkHDubqUI8LSAIKMQp4r9SzQ3n+sm4HQ==", + "version": "9.3.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.1.tgz", + "integrity": "sha512-bvdyLmJMfwkV3NCRl5ZhJf22zBFo1y8bYh3VYb+bfzqNB4Je68P2sSuXyuFquzWLebHpNd2/d5uv7yoP9ISnGQ==", "dev": true, "dependencies": { "acorn": "^8.7.0", "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^3.1.0" + "eslint-visitor-keys": "^3.3.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -3746,12 +3860,11 @@ "dev": true }, "node_modules/gauge": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.2.tgz", - "integrity": "sha512-aSPRm2CvA9R8QyU5eXMFPd+cYkyxLsXHd2l5/FOH2V/eml//M04G6KZOmTap07O1PvEwNcl2NndyLfK8g3QrKA==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.3.tgz", + "integrity": "sha512-ICw1DhAwMtb22rYFwEHgJcx1JCwJGv3x6G0OQUq56Nge+H4Q8JEwr8iveS0XFlsUNSI67F5ffMGK25bK4Pmskw==", "dev": true, "dependencies": { - "ansi-regex": "^5.0.1", "aproba": "^1.0.3 || ^2.0.0", "color-support": "^1.1.3", "console-control-strings": "^1.1.0", @@ -3867,9 +3980,9 @@ } }, "node_modules/globals": { - "version": "13.12.1", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.1.tgz", - "integrity": "sha512-317dFlgY2pdJZ9rspXDks7073GpDmXdfbM3vYYp0HAMKGDh1FfWPleI2ljVNLQX5M5lXcAslTcPTrOrMEFOjyw==", + "version": "13.13.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.13.0.tgz", + "integrity": "sha512-EQ7Q18AJlPwp3vUDL4mKA0KXrXyNIQyWon6T6XQiBQF0XHvRsiCSrWmmeATpUzdJN2HhWZU6Pdl0a9zdep5p6A==", "dev": true, "dependencies": { "type-fest": "^0.20.2" @@ -3994,6 +4107,82 @@ "node": ">=10" } }, + "node_modules/html-validate": { + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/html-validate/-/html-validate-6.6.1.tgz", + "integrity": "sha512-8XG1GeLJoWARdq7wASWb3ZGnWHjo1EnLEdthDvr8aPsQQPICkNfaMqyBVflTm0hvp0y6GLpPegarOQLxEQWg9g==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.10.0", + "@html-validate/stylish": "^2.0.0", + "@sidvind/better-ajv-errors": "^1.1.1", + "acorn-walk": "^8.0.0", + "ajv": "^8.0.0", + "deepmerge": "^4.2.0", + "espree": "^9.0.0", + "glob": "^7.1.0", + "ignore": "^5.0.0", + "kleur": "^4.1.0", + "minimist": "^1.2.0", + "prompts": "^2.0.0", + "semver": "^7.0.0" + }, + "bin": { + "html-validate": "bin/html-validate.js" + }, + "engines": { + "node": ">= 12.22" + }, + "peerDependencies": { + "jest": "^24 || ^25 || ^26 || ^27", + "jest-diff": "^24 || ^25 || ^26 || ^27" + }, + "peerDependenciesMeta": { + "jest": { + "optional": true + }, + "jest-diff": { + "optional": true + } + } + }, + "node_modules/html-validate/node_modules/ajv": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/html-validate/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/html-validate/node_modules/semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/htmlnano": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/htmlnano/-/htmlnano-2.0.0.tgz", @@ -4464,9 +4653,9 @@ "integrity": "sha512-JVzAR/AjBvVt2BmYhxRCSYysDsPcssdmTFnzyLEts9qNwmjmu4JTAMYubEfwVOSwpQ1I1sKKFcxhZCI2buerfw==" }, "node_modules/jquery-migrate": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/jquery-migrate/-/jquery-migrate-3.3.2.tgz", - "integrity": "sha512-L3gYhr7yEtLUSAeqXSicVa0vRD4aGwjw/bWY8YzrO2o/qDY1BaMyP3oB3bZf5Auy3Hu9ynliio0CTyDWCBPVDw==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/jquery-migrate/-/jquery-migrate-3.4.0.tgz", + "integrity": "sha512-K0W02EhZyqjVpyF5pdi+t238cIfQACzMsXiX4AEfEOxPPfiZZFzf3brtFY21FOOEPiWZF4mH04TXHDE6e2YDyg==", "dev": true, "peerDependencies": { "jquery": ">=3 <4" @@ -4564,13 +4753,10 @@ "dev": true }, "node_modules/json5": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", - "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", + "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", "dev": true, - "dependencies": { - "minimist": "^1.2.5" - }, "bin": { "json5": "lib/cli.js" }, @@ -4630,9 +4816,9 @@ } }, "node_modules/kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.4.tgz", + "integrity": "sha512-8QADVssbrFjivHWQU7KkMgptGTl6WAcSdlbBPY4uNF+mWr6DGcKrvY2w4FQJoXch7+fKMjj0dRrL75vk3k23OA==", "dev": true, "engines": { "node": ">=6" @@ -4750,15 +4936,6 @@ "node": ">=4" } }, - "node_modules/lilconfig": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.4.tgz", - "integrity": "sha512-bfTIN7lEsiooCocSISTWXkiWJkRqtL9wYtYy+8EK3Y41qh3mpwPU0ycTOgjdY9ErwXCc8QyrQp82bdL0Xkm9yA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, "node_modules/lines-and-columns": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", @@ -4804,9 +4981,9 @@ } }, "node_modules/lmdb": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/lmdb/-/lmdb-2.2.1.tgz", - "integrity": "sha512-tUlIjyJvbd4mqdotI9Xe+3PZt/jqPx70VKFDrKMYu09MtBWOT3y2PbuTajX+bJFDjbgLkQC0cTx2n6dithp/zQ==", + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/lmdb/-/lmdb-2.2.4.tgz", + "integrity": "sha512-gto+BB2uEob8qRiTlOq+R3uX0YNHsX9mjxj9Sbdue/LIKqu6IlZjrsjKeGyOMquc/474GEqFyX2pdytpydp0rQ==", "dev": true, "hasInstallScript": true, "dependencies": { @@ -4838,12 +5015,6 @@ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, - "node_modules/lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", - "dev": true - }, "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", @@ -4856,12 +5027,6 @@ "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=", "dev": true }, - "node_modules/lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", - "dev": true - }, "node_modules/log-symbols": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", @@ -4973,21 +5138,21 @@ } }, "node_modules/make-fetch-happen": { - "version": "10.0.5", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.0.5.tgz", - "integrity": "sha512-0JQ0daMRDFEv14DelmcFlprdhSDNG7WEgInTjBeWYWZ78W0jfDqygZdPLhcrQ4s/G8skNhBrS4fiF6xA+YlFjQ==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.1.0.tgz", + "integrity": "sha512-HeP4QlkadP/Op+hE+Une1070kcyN85FshQObku3/rmzRh4zDcKXA19d2L3AQR6UoaX3uZmhSOpTLH15b1vOFvQ==", "dev": true, "dependencies": { "agentkeepalive": "^4.2.1", - "cacache": "^15.3.0", + "cacache": "^16.0.2", "http-cache-semantics": "^4.1.0", "http-proxy-agent": "^5.0.0", "https-proxy-agent": "^5.0.0", "is-lambda": "^1.0.1", - "lru-cache": "^7.4.1", + "lru-cache": "^7.7.1", "minipass": "^3.1.6", "minipass-collect": "^1.0.2", - "minipass-fetch": "^2.0.2", + "minipass-fetch": "^2.0.3", "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", "negotiator": "^0.6.3", @@ -4996,13 +5161,13 @@ "ssri": "^8.0.1" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/make-fetch-happen/node_modules/lru-cache": { - "version": "7.4.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.4.2.tgz", - "integrity": "sha512-Xs3+hFPDSKQmL05Gs6NhvAADol1u9TmLoNoE03ZjszX6a5iYIO3rPUM4jIjoBUJeTaWEBMozjjmV70gvdRfIdw==", + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.7.1.tgz", + "integrity": "sha512-cRffBiTW8s73eH4aTXqBcTLU0xQnwGV3/imttRHGWCrbergmnK4D6JXQd8qin5z43HnDwRI+o7mVW0LEB+tpAw==", "dev": true, "engines": { "node": ">=12" @@ -5030,34 +5195,34 @@ } }, "node_modules/micromatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", - "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", "dev": true, "dependencies": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" + "braces": "^3.0.2", + "picomatch": "^2.3.1" }, "engines": { "node": ">=8.6" } }, "node_modules/mime-db": { - "version": "1.51.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", - "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==", + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", "dev": true, "engines": { "node": ">= 0.6" } }, "node_modules/mime-types": { - "version": "2.1.34", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", - "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "dev": true, "dependencies": { - "mime-db": "1.51.0" + "mime-db": "1.52.0" }, "engines": { "node": ">= 0.6" @@ -5082,9 +5247,9 @@ } }, "node_modules/minimatch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "dependencies": { "brace-expansion": "^1.1.7" @@ -5094,9 +5259,9 @@ } }, "node_modules/minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", "dev": true }, "node_modules/minipass": { @@ -5124,9 +5289,9 @@ } }, "node_modules/minipass-fetch": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.0.3.tgz", - "integrity": "sha512-VA+eiiUtaIvpQJXISwE3OiMvQwAWrgKb97F0aXlCS1Ahikr8fEQq8m3Hf7Kv9KT3nokuHigJKsDMB6atU04olQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.0.tgz", + "integrity": "sha512-H9U4UVBGXEyyWJnqYDCLp1PwD8XIkJ4akNHp1aGVI+2Ym7wQMlxDKi4IB4JbmyU+pl9pEs/cVrK6cOuvmbK4Sg==", "dev": true, "dependencies": { "minipass": "^3.1.6", @@ -5134,7 +5299,7 @@ "minizlib": "^2.1.2" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" }, "optionalDependencies": { "encoding": "^0.1.13" @@ -5237,9 +5402,9 @@ "dev": true }, "node_modules/msgpackr": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/msgpackr/-/msgpackr-1.5.4.tgz", - "integrity": "sha512-Z7w5Jg+2Q9z9gJxeM68d7tSuWZZGnFIRhZnyqcZCa/1dKkhOCNvR1TUV3zzJ3+vj78vlwKRzUgVDlW4jiSOeDA==", + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/msgpackr/-/msgpackr-1.5.5.tgz", + "integrity": "sha512-JG0V47xRIQ9pyUnx6Hb4+3TrQoia2nA3UIdmyTldhxaxtKFkekkKpUW/N6fwHwod9o4BGuJGtouxOk+yCP5PEA==", "dev": true, "optionalDependencies": { "msgpackr-extract": "^1.0.14" @@ -5263,18 +5428,6 @@ "integrity": "sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==", "dev": true }, - "node_modules/nanoid": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.2.0.tgz", - "integrity": "sha512-fmsZYa9lpn69Ad5eDn7FMcnnSR+8R34W9qJEijxYhTbfOWzr22n1QxCMzXLK+ODyW2973V3Fux959iQoUxzUIA==", - "dev": true, - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -5368,18 +5521,39 @@ } }, "node_modules/normalize-package-data": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", - "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-4.0.0.tgz", + "integrity": "sha512-m+GL22VXJKkKbw62ZaBBjv8u6IE3UI4Mh5QakIqs3fWiKe0Xyi6L97hakwZK41/LD4R/2ly71Bayx0NLMwLA/g==", "dev": true, "dependencies": { - "hosted-git-info": "^4.0.1", - "is-core-module": "^2.5.0", - "semver": "^7.3.4", - "validate-npm-package-license": "^3.0.1" + "hosted-git-info": "^5.0.0", + "is-core-module": "^2.8.1", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" }, "engines": { - "node": ">=10" + "node": "^12.13.0 || ^14.15.0 || >=16" + } + }, + "node_modules/normalize-package-data/node_modules/hosted-git-info": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.0.0.tgz", + "integrity": "sha512-rRnjWu0Bxj+nIfUOkz0695C0H6tRrN5iYIzYejb0tDEefe2AekHu/U5Kn9pEie5vsJqpNQU02az7TGSH3qpz4Q==", + "dev": true, + "dependencies": { + "lru-cache": "^7.5.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16" + } + }, + "node_modules/normalize-package-data/node_modules/hosted-git-info/node_modules/lru-cache": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.7.1.tgz", + "integrity": "sha512-cRffBiTW8s73eH4aTXqBcTLU0xQnwGV3/imttRHGWCrbergmnK4D6JXQd8qin5z43HnDwRI+o7mVW0LEB+tpAw==", + "dev": true, + "engines": { + "node": ">=12" } }, "node_modules/normalize-package-data/node_modules/semver": { @@ -5407,15 +5581,12 @@ } }, "node_modules/normalize-url": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", + "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", "dev": true, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, "node_modules/npm-bundled": { @@ -5428,9 +5599,9 @@ } }, "node_modules/npm-check-updates": { - "version": "12.5.2", - "resolved": "https://registry.npmjs.org/npm-check-updates/-/npm-check-updates-12.5.2.tgz", - "integrity": "sha512-XJGFO3kgcm+WJljOPRYZf/W40FSzEcLDacQ1WPEgW4qXlQy4Ihr1eVnlS2+43y0YEF+qjLkycr7WbHyfkm6C4A==", + "version": "12.5.4", + "resolved": "https://registry.npmjs.org/npm-check-updates/-/npm-check-updates-12.5.4.tgz", + "integrity": "sha512-4+27zaTdieWgvPLaCZ/A6Q2WC1cYVcrc2SqVmLFYgkWBrKw1QkwpeV16FSvkFGZr3OdFyr7Dpjw8JRn4H2QxFw==", "dev": true, "dependencies": { "chalk": "^4.1.2", @@ -5481,9 +5652,9 @@ } }, "node_modules/npm-check-updates/node_modules/commander": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-9.0.0.tgz", - "integrity": "sha512-JJfP2saEKbQqvW+FI93OYUB4ByV5cizMpFMiiJI8xDbBvQvSkIk0VvQdn1CZ8mqAO8Loq2h0gYTYtDFUZUeERw==", + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.1.0.tgz", + "integrity": "sha512-i0/MaqBtdbnJ4XQs4Pmyb+oFQl+q0lsAmokVUH92SlSw4fkeAcG3bVon+Qt7hmtF+u3Het6o4VgrcY3qAoEB6w==", "dev": true, "engines": { "node": "^12.20.0 || >=14" @@ -5550,12 +5721,12 @@ "dev": true }, "node_modules/npm-package-arg": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.0.0.tgz", - "integrity": "sha512-yhzXxeor+Zfhe5MGwPdDumz6HtNlj2pMekWB95IX3CC6uDNgde0oPKHDCLDPoJqQfd0HqAWt+y4Hs5m7CK1+9Q==", + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.0.1.tgz", + "integrity": "sha512-Xs9wznfEAmZAR61qsYH3iN24V/qMYYkvAR5CRQNMvC6PjN2fHtO8y9XP/xdp5K+Icx+u1wMBMgWRPCmAEChSog==", "dev": true, "dependencies": { - "hosted-git-info": "^4.1.0", + "hosted-git-info": "^5.0.0", "semver": "^7.3.5", "validate-npm-package-name": "^3.0.0" }, @@ -5563,6 +5734,27 @@ "node": "^12.13.0 || ^14.15.0 || >=16" } }, + "node_modules/npm-package-arg/node_modules/hosted-git-info": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.0.0.tgz", + "integrity": "sha512-rRnjWu0Bxj+nIfUOkz0695C0H6tRrN5iYIzYejb0tDEefe2AekHu/U5Kn9pEie5vsJqpNQU02az7TGSH3qpz4Q==", + "dev": true, + "dependencies": { + "lru-cache": "^7.5.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16" + } + }, + "node_modules/npm-package-arg/node_modules/hosted-git-info/node_modules/lru-cache": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.7.1.tgz", + "integrity": "sha512-cRffBiTW8s73eH4aTXqBcTLU0xQnwGV3/imttRHGWCrbergmnK4D6JXQd8qin5z43HnDwRI+o7mVW0LEB+tpAw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, "node_modules/npm-package-arg/node_modules/semver": { "version": "7.3.5", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", @@ -5579,21 +5771,21 @@ } }, "node_modules/npm-packlist": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-3.0.0.tgz", - "integrity": "sha512-L/cbzmutAwII5glUcf2DBRNY/d0TFd4e/FnaZigJV6JD85RHZXJFGwCndjMWiiViiWSsWt3tiOLpI3ByTnIdFQ==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-4.0.0.tgz", + "integrity": "sha512-gL6XC/iw9YSmqArmZOGSkyy+yIZf2f7uH0p4Vmxef/irn73vd9/rDkCtvm+a9rh/QK2xGYfCAMOghM06ymzC0A==", "dev": true, "dependencies": { - "glob": "^7.1.6", + "glob": "^7.2.0", "ignore-walk": "^4.0.1", - "npm-bundled": "^1.1.1", + "npm-bundled": "^1.1.2", "npm-normalize-package-bin": "^1.0.1" }, "bin": { "npm-packlist": "bin/index.js" }, "engines": { - "node": ">=10" + "node": "^12.13.0 || ^14.15.0 || >=16" } }, "node_modules/npm-pick-manifest": { @@ -5627,21 +5819,21 @@ } }, "node_modules/npm-registry-fetch": { - "version": "13.0.1", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-13.0.1.tgz", - "integrity": "sha512-Ak+LXVtSrCLOdscFW/apUw67OPNph8waHsPKM9UOJosL7i59EF5XoSWQMEsXEOeifM9Bb4/2+WrQC4t/pd8DGg==", + "version": "13.1.0", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-13.1.0.tgz", + "integrity": "sha512-TIYL5X8CcwDhbFMXFDShNcpG6OMCYK6VzvSr6MUWP20tCU2DJ4ao2qQg3DT+3Pet8mO6/cgbZpon4LMh3duYLg==", "dev": true, "dependencies": { - "make-fetch-happen": "^10.0.3", + "make-fetch-happen": "^10.0.6", "minipass": "^3.1.6", - "minipass-fetch": "^2.0.1", + "minipass-fetch": "^2.0.3", "minipass-json-stream": "^1.0.1", "minizlib": "^2.1.2", - "npm-package-arg": "^9.0.0", + "npm-package-arg": "^9.0.1", "proc-log": "^2.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/npm-run-path": { @@ -5830,28 +6022,28 @@ } }, "node_modules/pacote": { - "version": "13.0.3", - "resolved": "https://registry.npmjs.org/pacote/-/pacote-13.0.3.tgz", - "integrity": "sha512-8thQ06YoO01O1k5rvSpHS/XPJZucw2DPiiT1jI+ys8QaTN6ifAyxfyoABHBa8nIt/4wPdzly4GEPqshctHFoYA==", + "version": "13.0.5", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-13.0.5.tgz", + "integrity": "sha512-6CYfot3/rUAn3qqzF2d/jrrXm5HlBtvaSgfmg0VtOUAdJ8fbSq21BJwftMGArkL71yXHIbUJ7Bt5B04547HELA==", "dev": true, "dependencies": { "@npmcli/git": "^3.0.0", "@npmcli/installed-package-contents": "^1.0.7", "@npmcli/promise-spawn": "^1.2.0", - "@npmcli/run-script": "^3.0.0", - "cacache": "^15.3.0", + "@npmcli/run-script": "^3.0.1", + "cacache": "^16.0.0", "chownr": "^2.0.0", "fs-minipass": "^2.1.0", "infer-owner": "^1.0.4", "minipass": "^3.1.6", "mkdirp": "^1.0.4", "npm-package-arg": "^9.0.0", - "npm-packlist": "^3.0.0", + "npm-packlist": "^4.0.0", "npm-pick-manifest": "^7.0.0", - "npm-registry-fetch": "^13.0.0", + "npm-registry-fetch": "^13.0.1", "proc-log": "^2.0.0", "promise-retry": "^2.0.1", - "read-package-json": "^4.1.1", + "read-package-json": "^5.0.0", "read-package-json-fast": "^2.0.3", "rimraf": "^3.0.2", "ssri": "^8.0.1", @@ -5865,21 +6057,21 @@ } }, "node_modules/parcel": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/parcel/-/parcel-2.3.1.tgz", - "integrity": "sha512-YDzKpWcO1tEqk7ENPTitE8zbDfYDjo7nsoT7Oun+7eZadwsiNds1+mbhCO0exGq4SJekto+dkMdrLMcbOWJznQ==", - "dev": true, - "dependencies": { - "@parcel/config-default": "2.3.1", - "@parcel/core": "2.3.1", - "@parcel/diagnostic": "2.3.1", - "@parcel/events": "2.3.1", - "@parcel/fs": "2.3.1", - "@parcel/logger": "2.3.1", - "@parcel/package-manager": "2.3.1", - "@parcel/reporter-cli": "2.3.1", - "@parcel/reporter-dev-server": "2.3.1", - "@parcel/utils": "2.3.1", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/parcel/-/parcel-2.4.0.tgz", + "integrity": "sha512-dPWpu4RnxG9HqiLvaF8COEWEnT/KrigrC6PyPaQ0zEgpBfp7/jzXZFBVaZk2N+lpvrbNEYMjN9bv5UQGJJszIw==", + "dev": true, + "dependencies": { + "@parcel/config-default": "2.4.0", + "@parcel/core": "2.4.0", + "@parcel/diagnostic": "2.4.0", + "@parcel/events": "2.4.0", + "@parcel/fs": "2.4.0", + "@parcel/logger": "2.4.0", + "@parcel/package-manager": "2.4.0", + "@parcel/reporter-cli": "2.4.0", + "@parcel/reporter-dev-server": "2.4.0", + "@parcel/utils": "2.4.0", "chalk": "^4.1.0", "commander": "^7.0.0", "get-port": "^4.2.0", @@ -5896,6 +6088,15 @@ "url": "https://opencollective.com/parcel" } }, + "node_modules/parcel/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -5951,501 +6152,66 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/pend": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", - "dev": true - }, - "node_modules/performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", - "dev": true - }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss": { - "version": "8.4.6", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.6.tgz", - "integrity": "sha512-OovjwIzs9Te46vlEx7+uXB0PLijpwjXGKXjVGGPIGubGpq7uh5Xgf6D6FiJ/SzJMBosHDp6a2hiXOS97iBXcaA==", - "dev": true, - "dependencies": { - "nanoid": "^3.2.0", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - }, - "engines": { - "node": "^10 || ^12 || >=14" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-calc": { - "version": "8.2.4", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz", - "integrity": "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==", - "dev": true, - "dependencies": { - "postcss-selector-parser": "^6.0.9", - "postcss-value-parser": "^4.2.0" - }, - "peerDependencies": { - "postcss": "^8.2.2" - } - }, - "node_modules/postcss-colormin": { - "version": "5.2.5", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.2.5.tgz", - "integrity": "sha512-+X30aDaGYq81mFqwyPpnYInsZQnNpdxMX0ajlY7AExCexEFkPVV+KrO7kXwayqEWL2xwEbNQ4nUO0ZsRWGnevg==", - "dev": true, - "dependencies": { - "browserslist": "^4.16.6", - "caniuse-api": "^3.0.0", - "colord": "^2.9.1", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-convert-values": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.0.4.tgz", - "integrity": "sha512-bugzSAyjIexdObovsPZu/sBCTHccImJxLyFgeV0MmNBm/Lw5h5XnjfML6gzEmJ3A6nyfCW7hb1JXzcsA4Zfbdw==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-discard-comments": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.0.3.tgz", - "integrity": "sha512-6W5BemziRoqIdAKT+1QjM4bNcJAQ7z7zk073730NHg4cUXh3/rQHHj7pmYxUB9aGhuRhBiUf0pXvIHkRwhQP0Q==", - "dev": true, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-discard-duplicates": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.0.3.tgz", - "integrity": "sha512-vPtm1Mf+kp7iAENTG7jI1MN1lk+fBqL5y+qxyi4v3H+lzsXEdfS3dwUZD45KVhgzDEgduur8ycB4hMegyMTeRw==", - "dev": true, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-discard-empty": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.0.3.tgz", - "integrity": "sha512-xGJugpaXKakwKI7sSdZjUuN4V3zSzb2Y0LOlmTajFbNinEjTfVs9PFW2lmKBaC/E64WwYppfqLD03P8l9BuueA==", - "dev": true, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-discard-overridden": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.0.4.tgz", - "integrity": "sha512-3j9QH0Qh1KkdxwiZOW82cId7zdwXVQv/gRXYDnwx5pBtR1sTkU4cXRK9lp5dSdiM0r0OICO/L8J6sV1/7m0kHg==", - "dev": true, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-merge-longhand": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.0.6.tgz", - "integrity": "sha512-rkmoPwQO6ymJSmWsX6l2hHeEBQa7C4kJb9jyi5fZB1sE8nSCv7sqchoYPixRwX/yvLoZP2y6FA5kcjiByeJqDg==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0", - "stylehacks": "^5.0.3" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-merge-rules": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.0.6.tgz", - "integrity": "sha512-nzJWJ9yXWp8AOEpn/HFAW72WKVGD2bsLiAmgw4hDchSij27bt6TF+sIK0cJUBAYT3SGcjtGGsOR89bwkkMuMgQ==", - "dev": true, - "dependencies": { - "browserslist": "^4.16.6", - "caniuse-api": "^3.0.0", - "cssnano-utils": "^3.0.2", - "postcss-selector-parser": "^6.0.5" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-minify-font-values": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.0.4.tgz", - "integrity": "sha512-RN6q3tyuEesvyCYYFCRGJ41J1XFvgV+dvYGHr0CeHv8F00yILlN8Slf4t8XW4IghlfZYCeyRrANO6HpJ948ieA==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-minify-gradients": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.0.6.tgz", - "integrity": "sha512-E/dT6oVxB9nLGUTiY/rG5dX9taugv9cbLNTFad3dKxOO+BQg25Q/xo2z2ddG+ZB1CbkZYaVwx5blY8VC7R/43A==", - "dev": true, - "dependencies": { - "colord": "^2.9.1", - "cssnano-utils": "^3.0.2", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-minify-params": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.0.5.tgz", - "integrity": "sha512-YBNuq3Rz5LfLFNHb9wrvm6t859b8qIqfXsWeK7wROm3jSKNpO1Y5e8cOyBv6Acji15TgSrAwb3JkVNCqNyLvBg==", - "dev": true, - "dependencies": { - "browserslist": "^4.16.6", - "cssnano-utils": "^3.0.2", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-minify-selectors": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.1.3.tgz", - "integrity": "sha512-9RJfTiQEKA/kZhMaEXND893nBqmYQ8qYa/G+uPdVnXF6D/FzpfI6kwBtWEcHx5FqDbA79O9n6fQJfrIj6M8jvQ==", - "dev": true, - "dependencies": { - "postcss-selector-parser": "^6.0.5" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-charset": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.0.3.tgz", - "integrity": "sha512-iKEplDBco9EfH7sx4ut7R2r/dwTnUqyfACf62Unc9UiyFuI7uUqZZtY+u+qp7g8Qszl/U28HIfcsI3pEABWFfA==", - "dev": true, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-display-values": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.0.3.tgz", - "integrity": "sha512-FIV5FY/qs4Ja32jiDb5mVj5iWBlS3N8tFcw2yg98+8MkRgyhtnBgSC0lxU+16AMHbjX5fbSJgw5AXLMolonuRQ==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-positions": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.0.4.tgz", - "integrity": "sha512-qynirjBX0Lc73ROomZE3lzzmXXTu48/QiEzKgMeqh28+MfuHLsuqC9po4kj84igZqqFGovz8F8hf44hA3dPYmQ==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-repeat-style": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.0.4.tgz", - "integrity": "sha512-Innt+wctD7YpfeDR7r5Ik6krdyppyAg2HBRpX88fo5AYzC1Ut/l3xaxACG0KsbX49cO2n5EB13clPwuYVt8cMA==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-string": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.0.4.tgz", - "integrity": "sha512-Dfk42l0+A1CDnVpgE606ENvdmksttLynEqTQf5FL3XGQOyqxjbo25+pglCUvziicTxjtI2NLUR6KkxyUWEVubQ==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-timing-functions": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.0.3.tgz", - "integrity": "sha512-QRfjvFh11moN4PYnJ7hia4uJXeFotyK3t2jjg8lM9mswleGsNw2Lm3I5wO+l4k1FzK96EFwEVn8X8Ojrp2gP4g==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-unicode": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.0.4.tgz", - "integrity": "sha512-W79Regn+a+eXTzB+oV/8XJ33s3pDyFTND2yDuUCo0Xa3QSy1HtNIfRVPXNubHxjhlqmMFADr3FSCHT84ITW3ig==", - "dev": true, - "dependencies": { - "browserslist": "^4.16.6", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-url": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.0.5.tgz", - "integrity": "sha512-Ws3tX+PcekYlXh+ycAt0wyzqGthkvVtZ9SZLutMVvHARxcpu4o7vvXcNoiNKyjKuWecnjS6HDI3fjBuDr5MQxQ==", - "dev": true, - "dependencies": { - "normalize-url": "^6.0.1", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-whitespace": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.0.4.tgz", - "integrity": "sha512-wsnuHolYZjMwWZJoTC9jeI2AcjA67v4UuidDrPN9RnX8KIZfE+r2Nd6XZRwHVwUiHmRvKQtxiqo64K+h8/imaw==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-ordered-values": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.0.5.tgz", - "integrity": "sha512-mfY7lXpq+8bDEHfP+muqibDPhZ5eP9zgBEF9XRvoQgXcQe2Db3G1wcvjbnfjXG6wYsl+0UIjikqq4ym1V2jGMQ==", - "dev": true, - "dependencies": { - "cssnano-utils": "^3.0.2", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-reduce-initial": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.0.3.tgz", - "integrity": "sha512-c88TkSnQ/Dnwgb4OZbKPOBbCaauwEjbECP5uAuFPOzQ+XdjNjRH7SG0dteXrpp1LlIFEKK76iUGgmw2V0xeieA==", - "dev": true, - "dependencies": { - "browserslist": "^4.16.6", - "caniuse-api": "^3.0.0" - }, + "dev": true, "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "node": ">=0.10.0" } }, - "node_modules/postcss-reduce-transforms": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.0.4.tgz", - "integrity": "sha512-VIJB9SFSaL8B/B7AXb7KHL6/GNNbbCHslgdzS9UDfBZYIA2nx8NLY7iD/BXFSO/1sRUILzBTfHCoW5inP37C5g==", + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "node": ">=8" } }, - "node_modules/postcss-selector-parser": { - "version": "6.0.9", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.9.tgz", - "integrity": "sha512-UO3SgnZOVTwu4kyLR22UQ1xZh086RyNZppb7lLAKBFK8a32ttG5i87Y/P3+2bRSjZNyJ1B7hfFNo273tKe9YxQ==", + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true, - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/postcss-svgo": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.0.4.tgz", - "integrity": "sha512-yDKHvULbnZtIrRqhZoA+rxreWpee28JSRH/gy9727u0UCgtpv1M/9WEWY3xySlFa0zQJcqf6oCBJPR5NwkmYpg==", + "node_modules/pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", + "dev": true + }, + "node_modules/performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "dev": true + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0", - "svgo": "^2.7.0" - }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": ">=8.6" }, - "peerDependencies": { - "postcss": "^8.2.15" + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/postcss-unique-selectors": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.0.4.tgz", - "integrity": "sha512-5ampwoSDJCxDPoANBIlMgoBcYUHnhaiuLYJR5pj1DLnYQvMRVyFuTA5C3Bvt+aHtiqWpJkD/lXT50Vo1D0ZsAQ==", + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", "dev": true, - "dependencies": { - "postcss-selector-parser": "^6.0.5" - }, "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "node": ">=0.10.0" } }, "node_modules/postcss-value-parser": { @@ -6455,12 +6221,12 @@ "dev": true }, "node_modules/posthtml": { - "version": "0.16.5", - "resolved": "https://registry.npmjs.org/posthtml/-/posthtml-0.16.5.tgz", - "integrity": "sha512-1qOuPsywVlvymhTFIBniDXwUDwvlDri5KUQuBqjmCc8Jj4b/HDSVWU//P6rTWke5rzrk+vj7mms2w8e1vD0nnw==", + "version": "0.16.6", + "resolved": "https://registry.npmjs.org/posthtml/-/posthtml-0.16.6.tgz", + "integrity": "sha512-JcEmHlyLK/o0uGAlj65vgg+7LIms0xKXe60lcDOTU7oVX/3LuEuLwrQpW3VJ7de5TaFKiW4kWkaIpJL42FEgxQ==", "dev": true, "dependencies": { - "posthtml-parser": "^0.10.0", + "posthtml-parser": "^0.11.0", "posthtml-render": "^3.0.0" }, "engines": { @@ -6491,10 +6257,22 @@ "node": ">=12" } }, + "node_modules/posthtml/node_modules/posthtml-parser": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/posthtml-parser/-/posthtml-parser-0.11.0.tgz", + "integrity": "sha512-QecJtfLekJbWVo/dMAA+OSwY79wpRmbqS5TeXvXSX+f0c6pW4/SE6inzZ2qkU7oAMCPqIDkZDvd/bQsSFUnKyw==", + "dev": true, + "dependencies": { + "htmlparser2": "^7.1.1" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/preact": { - "version": "10.6.5", - "resolved": "https://registry.npmjs.org/preact/-/preact-10.6.5.tgz", - "integrity": "sha512-i+LXM6JiVjQXSt2jG2vZZFapGpCuk1fl8o6ii3G84MA3xgj686FKjs4JFDkmUVhtxyq21+4ay74zqPykz9hU6w==", + "version": "10.6.6", + "resolved": "https://registry.npmjs.org/preact/-/preact-10.6.6.tgz", + "integrity": "sha512-dgxpTFV2vs4vizwKohYKkk7g7rmp1wOOcfd4Tz3IB3Wi+ivZzsn/SpeKJhRENSE+n8sUfsAl4S3HiCVT923ABw==", "funding": { "type": "opencollective", "url": "https://opencollective.com/preact" @@ -6580,6 +6358,15 @@ "node": ">= 6" } }, + "node_modules/prompts/node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/proxy-from-env": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.0.0.tgz", @@ -6704,18 +6491,18 @@ } }, "node_modules/read-package-json": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-4.1.2.tgz", - "integrity": "sha512-Dqer4pqzamDE2O4M55xp1qZMuLPqi4ldk2ya648FOMHRjwMzFhuxVrG04wd0c38IsvkVdr3vgHI6z+QTPdAjrQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-5.0.0.tgz", + "integrity": "sha512-1cjk2MV5ONDMn34uxSID3X8NY7VKsXfJnjbcVdFMvHEnJOBzU6MJ7/3yg6QFVZDq5/1yFNrKBUK9kGnonyGP2Q==", "dev": true, "dependencies": { - "glob": "^7.1.1", - "json-parse-even-better-errors": "^2.3.0", - "normalize-package-data": "^3.0.0", - "npm-normalize-package-bin": "^1.0.0" + "glob": "^7.2.0", + "json-parse-even-better-errors": "^2.3.1", + "normalize-package-data": "^4.0.0", + "npm-normalize-package-bin": "^1.0.1" }, "engines": { - "node": ">=10" + "node": "^12.13.0 || ^14.15.0 || >=16" } }, "node_modules/read-package-json-fast": { @@ -6921,9 +6708,9 @@ } }, "node_modules/rxjs": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.4.tgz", - "integrity": "sha512-h5M3Hk78r6wAheJF0a5YahB1yRQKCsZ4MsGdZ5O9ETbVtjPcScGfrMmoOq7EBsCRzd4BDkvDJ7ogP8Sz5tTFiQ==", + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.5.tgz", + "integrity": "sha512-sy+H0pQofO95VDmFLzyaw9xNJU4KTRSwQIGM6+iG3SypAtCiLDzpeG8sJrNCWn2Up9km+KhkvTdbkrdy+yzZdw==", "dev": true, "dependencies": { "tslib": "^2.1.0" @@ -6956,9 +6743,9 @@ "dev": true }, "node_modules/sass": { - "version": "1.49.7", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.49.7.tgz", - "integrity": "sha512-13dml55EMIR2rS4d/RDHHP0sXMY3+30e1TKsyXaSz3iLWVoDWEoboY8WzJd5JMnxrRHffKO3wq2mpJ0jxRJiEQ==", + "version": "1.49.9", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.49.9.tgz", + "integrity": "sha512-YlYWkkHP9fbwaFRZQRXgDi3mXZShslVmmo+FVK3kHLUELHHEYrCmL1x6IUjC7wLS6VuJSAFXRQS/DxdsC4xL1A==", "dev": true, "dependencies": { "chokidar": ">=3.0.0 <4.0.0", @@ -7122,9 +6909,9 @@ } }, "node_modules/sortablejs": { - "version": "1.14.0", - "resolved": "https://registry.npmjs.org/sortablejs/-/sortablejs-1.14.0.tgz", - "integrity": "sha512-pBXvQCs5/33fdN1/39pPL0NZF20LeRbLQ5jtnheIPN9JQAaufGjKdWduZn4U7wCtVuzKhmRkI0DFYHYRbB2H1w==" + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/sortablejs/-/sortablejs-1.15.0.tgz", + "integrity": "sha512-bv9qgVMjUMf89wAvM6AxVvS/4MX3sPeN0+agqShejLU5z5GX4C75ow1O2e5k4L6XItUyAK3gH6AxSbXrOM5e8w==" }, "node_modules/source-map": { "version": "0.6.1", @@ -7299,22 +7086,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/stylehacks": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.0.3.tgz", - "integrity": "sha512-ENcUdpf4yO0E1rubu8rkxI+JGQk4CgjchynZ4bDBJDfqdy+uhTRSWb8/F3Jtu+Bw5MW45Po3/aQGeIyyxgQtxg==", - "dev": true, - "dependencies": { - "browserslist": "^4.16.6", - "postcss-selector-parser": "^6.0.4" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, "node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -7348,6 +7119,15 @@ "node": ">=10.13.0" } }, + "node_modules/svgo/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, "node_modules/tar": { "version": "6.1.11", "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", @@ -7365,12 +7145,25 @@ "node": ">= 10" } }, + "node_modules/term-size": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.1.tgz", + "integrity": "sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/terser": { - "version": "5.10.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.10.0.tgz", - "integrity": "sha512-AMmF99DMfEDiRJfxfY5jj5wNH/bYO09cniSqhfoyxc8sFoYIgkJy86G04UoZU5VjlpnplVu0K6Tx6E9b5+DlHA==", + "version": "5.12.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.12.1.tgz", + "integrity": "sha512-NXbs+7nisos5E+yXwAD+y7zrcTkMqb0dEJxIGtSKPdCBzopf7ni4odPul2aechpV7EXNvOudYOX2bb5tln1jbQ==", "dev": true, "dependencies": { + "acorn": "^8.5.0", "commander": "^2.20.0", "source-map": "~0.7.2", "source-map-support": "~0.5.20" @@ -7380,14 +7173,6 @@ }, "engines": { "node": ">=10" - }, - "peerDependencies": { - "acorn": "^8.5.0" - }, - "peerDependenciesMeta": { - "acorn": { - "optional": true - } } }, "node_modules/terser/node_modules/commander": { @@ -8001,28 +7786,20 @@ } }, "@eslint/eslintrc": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.0.5.tgz", - "integrity": "sha512-BLxsnmK3KyPunz5wmCCpqy0YelEoxxGmH73Is+Z74oOTMtExcjkr3dDR6quwrjh1YspA8DH9gnX1o069KiS9AQ==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.2.1.tgz", + "integrity": "sha512-bxvbYnBPN1Gibwyp6NrpnFzA3YtRL3BBAyEAFVIpNTm2Rn4Vy87GA5M4aSn3InRrlsbX5N0GW7XIx+U4SAEKdQ==", "dev": true, "requires": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.2.0", + "espree": "^9.3.1", "globals": "^13.9.0", - "ignore": "^4.0.6", + "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", "minimatch": "^3.0.4", "strip-json-comments": "^3.1.1" - }, - "dependencies": { - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true - } } }, "@fullcalendar/common": { @@ -8058,10 +7835,20 @@ "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", "dev": true }, + "@html-validate/stylish": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@html-validate/stylish/-/stylish-2.0.1.tgz", + "integrity": "sha512-iRLjgQnNq66rcsTukun6KwMhPEoUV2R3atPbTSapnEvD1aETjD+pfS+1yYrmaPeJFgXHzfsSYjAuyUVq7EID/Q==", + "dev": true, + "requires": { + "kleur": "^4.0.0", + "text-table": "^0.2.0" + } + }, "@humanwhocodes/config-array": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.3.tgz", - "integrity": "sha512-3xSMlXHh03hCcCmFc0rbKp3Ivt2PFEJnQUJDDMTJQ2wkECZWdq4GePs2ctc5H8zV+cHPaq8k2vU8mrQjA6iHdQ==", + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", + "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==", "dev": true, "requires": { "@humanwhocodes/object-schema": "^1.2.1", @@ -8102,12 +7889,12 @@ } }, "@npmcli/fs": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz", - "integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.0.tgz", + "integrity": "sha512-DmfBvNXGaetMxj9LTp8NAN9vEidXURrf5ZTslQzEAi/6GbW+4yjaLFQc6Tue5cpZ9Frlk4OBo/Snf1Bh/S7qTQ==", "dev": true, "requires": { - "@gar/promisify": "^1.0.1", + "@gar/promisify": "^1.1.3", "semver": "^7.3.5" }, "dependencies": { @@ -8140,9 +7927,9 @@ }, "dependencies": { "lru-cache": { - "version": "7.4.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.4.2.tgz", - "integrity": "sha512-Xs3+hFPDSKQmL05Gs6NhvAADol1u9TmLoNoE03ZjszX6a5iYIO3rPUM4jIjoBUJeTaWEBMozjjmV70gvdRfIdw==", + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.7.1.tgz", + "integrity": "sha512-cRffBiTW8s73eH4aTXqBcTLU0xQnwGV3/imttRHGWCrbergmnK4D6JXQd8qin5z43HnDwRI+o7mVW0LEB+tpAw==", "dev": true }, "semver": { @@ -8215,105 +8002,105 @@ } }, "@parcel/bundler-default": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@parcel/bundler-default/-/bundler-default-2.3.1.tgz", - "integrity": "sha512-NFPI3UgWA3wD057ZXdoI9xM+JfM5aooPDJEvBateUQibwPzb96k9Bw7AfKnB/UAsASgtXeNAZXDqhXq5zrXeYQ==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@parcel/bundler-default/-/bundler-default-2.4.0.tgz", + "integrity": "sha512-RaXlxo0M51739Ko3bsOJpDBZlJ+cqkDoBTozNeSc65jS2TMBIBWLMapm8095qmty39OrgYNhzjgPiIlKDS/LWA==", "dev": true, "requires": { - "@parcel/diagnostic": "2.3.1", - "@parcel/hash": "2.3.1", - "@parcel/plugin": "2.3.1", - "@parcel/utils": "2.3.1", + "@parcel/diagnostic": "2.4.0", + "@parcel/hash": "2.4.0", + "@parcel/plugin": "2.4.0", + "@parcel/utils": "2.4.0", "nullthrows": "^1.1.1" } }, "@parcel/cache": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@parcel/cache/-/cache-2.3.1.tgz", - "integrity": "sha512-8Wvm0VERtocUepIfkZ6xVs1LHZqttnzdrM7oSc0bXhwtz8kZB++N88g0rQskbUchW87314eYdzBtEL0aiq0bgQ==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@parcel/cache/-/cache-2.4.0.tgz", + "integrity": "sha512-oOudoAafrCAHQY0zkU7gVHG1pAGBUz9rht7Tx4WupTmAH0O0F5UnZs6XbjoBJaPHg+CYUXK7v9wQcrNA72E3GA==", "dev": true, "requires": { - "@parcel/fs": "2.3.1", - "@parcel/logger": "2.3.1", - "@parcel/utils": "2.3.1", - "lmdb": "^2.0.2" + "@parcel/fs": "2.4.0", + "@parcel/logger": "2.4.0", + "@parcel/utils": "2.4.0", + "lmdb": "2.2.4" } }, "@parcel/codeframe": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@parcel/codeframe/-/codeframe-2.3.1.tgz", - "integrity": "sha512-sdNvbg9qYS2pwzqyyyt+wZfNGuy7EslzDLbzQclFZmhD6e770mcYoi8/7i7D/AONbXiI15vwNmgOdcUIXtPxbA==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@parcel/codeframe/-/codeframe-2.4.0.tgz", + "integrity": "sha512-PJ3W9Z0sjoS2CANyo50c+LEr9IRZrtu0WsVPSYZ5ZYRuSXrSa/6PcAlnkyDk2+hi7Od8ncT2bmDexl0Oar3Jyg==", "dev": true, "requires": { "chalk": "^4.1.0" } }, "@parcel/compressor-raw": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@parcel/compressor-raw/-/compressor-raw-2.3.1.tgz", - "integrity": "sha512-a294CarNzmy5mqTYnoO6clUxzVN/+HuUMAz1Y7EmsXwS6pJMCdhrE1Lra3upslFj4YMwp9N6+skzkptSCArkTQ==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@parcel/compressor-raw/-/compressor-raw-2.4.0.tgz", + "integrity": "sha512-ZErX14fTc0gKIgtnuqW7Clfln4dpXWfUaJQQIf5C3x/LkpUeEhdXeKntkvSxOddDk2JpIKDwqzAxEMZUnDo4Nw==", "dev": true, "requires": { - "@parcel/plugin": "2.3.1" + "@parcel/plugin": "2.4.0" } }, "@parcel/config-default": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@parcel/config-default/-/config-default-2.3.1.tgz", - "integrity": "sha512-EEu8GPHAlHchyIu5AD1uPbOC/wPoAOS/ni2+yBmJWq3MJ6hwjnAdZJVYs8qVD9n2lcu3kcpO4vYxL8kv+i1mTQ==", - "dev": true, - "requires": { - "@parcel/bundler-default": "2.3.1", - "@parcel/compressor-raw": "2.3.1", - "@parcel/namer-default": "2.3.1", - "@parcel/optimizer-cssnano": "2.3.1", - "@parcel/optimizer-htmlnano": "2.3.1", - "@parcel/optimizer-image": "2.3.1", - "@parcel/optimizer-svgo": "2.3.1", - "@parcel/optimizer-terser": "2.3.1", - "@parcel/packager-css": "2.3.1", - "@parcel/packager-html": "2.3.1", - "@parcel/packager-js": "2.3.1", - "@parcel/packager-raw": "2.3.1", - "@parcel/packager-svg": "2.3.1", - "@parcel/reporter-dev-server": "2.3.1", - "@parcel/resolver-default": "2.3.1", - "@parcel/runtime-browser-hmr": "2.3.1", - "@parcel/runtime-js": "2.3.1", - "@parcel/runtime-react-refresh": "2.3.1", - "@parcel/runtime-service-worker": "2.3.1", - "@parcel/transformer-babel": "2.3.1", - "@parcel/transformer-css": "2.3.1", - "@parcel/transformer-html": "2.3.1", - "@parcel/transformer-image": "2.3.1", - "@parcel/transformer-js": "2.3.1", - "@parcel/transformer-json": "2.3.1", - "@parcel/transformer-postcss": "2.3.1", - "@parcel/transformer-posthtml": "2.3.1", - "@parcel/transformer-raw": "2.3.1", - "@parcel/transformer-react-refresh-wrap": "2.3.1", - "@parcel/transformer-svg": "2.3.1" + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@parcel/config-default/-/config-default-2.4.0.tgz", + "integrity": "sha512-pFOPBXPO6HGqNWTLkcK5i8haMOrRgUouUhcWPGWDpN9IPUYFK2E/O1E/uyMjIA1mSL3FnazI+jJwZ45NhKPpIA==", + "dev": true, + "requires": { + "@parcel/bundler-default": "2.4.0", + "@parcel/compressor-raw": "2.4.0", + "@parcel/namer-default": "2.4.0", + "@parcel/optimizer-css": "2.4.0", + "@parcel/optimizer-htmlnano": "2.4.0", + "@parcel/optimizer-image": "2.4.0", + "@parcel/optimizer-svgo": "2.4.0", + "@parcel/optimizer-terser": "2.4.0", + "@parcel/packager-css": "2.4.0", + "@parcel/packager-html": "2.4.0", + "@parcel/packager-js": "2.4.0", + "@parcel/packager-raw": "2.4.0", + "@parcel/packager-svg": "2.4.0", + "@parcel/reporter-dev-server": "2.4.0", + "@parcel/resolver-default": "2.4.0", + "@parcel/runtime-browser-hmr": "2.4.0", + "@parcel/runtime-js": "2.4.0", + "@parcel/runtime-react-refresh": "2.4.0", + "@parcel/runtime-service-worker": "2.4.0", + "@parcel/transformer-babel": "2.4.0", + "@parcel/transformer-css": "2.4.0", + "@parcel/transformer-html": "2.4.0", + "@parcel/transformer-image": "2.4.0", + "@parcel/transformer-js": "2.4.0", + "@parcel/transformer-json": "2.4.0", + "@parcel/transformer-postcss": "2.4.0", + "@parcel/transformer-posthtml": "2.4.0", + "@parcel/transformer-raw": "2.4.0", + "@parcel/transformer-react-refresh-wrap": "2.4.0", + "@parcel/transformer-svg": "2.4.0" } }, "@parcel/core": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@parcel/core/-/core-2.3.1.tgz", - "integrity": "sha512-Fzj8OxICQ0dKqu+haq1LP/yxmE1ryALIddZrgmn4JSoNiZVtPJMOxidozyl+3bnEq0mRyH5i38CDFRUWl9dqKQ==", - "dev": true, - "requires": { - "@parcel/cache": "2.3.1", - "@parcel/diagnostic": "2.3.1", - "@parcel/events": "2.3.1", - "@parcel/fs": "2.3.1", - "@parcel/graph": "2.3.1", - "@parcel/hash": "2.3.1", - "@parcel/logger": "2.3.1", - "@parcel/package-manager": "2.3.1", - "@parcel/plugin": "2.3.1", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@parcel/core/-/core-2.4.0.tgz", + "integrity": "sha512-EWZ2UWtIuwDc3fgsKyyTLpNNPoG8Yk2L117ICWF/+cqY8z/wJHm2KwLbeplDeq524shav0GJ9O4CemP3JPx0Nw==", + "dev": true, + "requires": { + "@parcel/cache": "2.4.0", + "@parcel/diagnostic": "2.4.0", + "@parcel/events": "2.4.0", + "@parcel/fs": "2.4.0", + "@parcel/graph": "2.4.0", + "@parcel/hash": "2.4.0", + "@parcel/logger": "2.4.0", + "@parcel/package-manager": "2.4.0", + "@parcel/plugin": "2.4.0", "@parcel/source-map": "^2.0.0", - "@parcel/types": "2.3.1", - "@parcel/utils": "2.3.1", - "@parcel/workers": "2.3.1", + "@parcel/types": "2.4.0", + "@parcel/utils": "2.4.0", + "@parcel/workers": "2.4.0", "abortcontroller-polyfill": "^1.1.9", "base-x": "^3.0.8", "browserslist": "^4.6.6", @@ -8322,15 +8109,88 @@ "dotenv-expand": "^5.1.0", "json-source-map": "^0.6.1", "json5": "^2.2.0", - "msgpackr": "^1.5.1", + "msgpackr": "^1.5.4", "nullthrows": "^1.1.1", "semver": "^5.7.1" } }, + "@parcel/css": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/@parcel/css/-/css-1.7.3.tgz", + "integrity": "sha512-rgdRX4Uk31EvzH/mUScL0wdXtkci3U5N1W2pgam+9S10vQy4uONhWBepZ1tUCjONHLacGXr1jp3LbG/HI7LiTw==", + "dev": true, + "requires": { + "@parcel/css-darwin-arm64": "1.7.3", + "@parcel/css-darwin-x64": "1.7.3", + "@parcel/css-linux-arm-gnueabihf": "1.7.3", + "@parcel/css-linux-arm64-gnu": "1.7.3", + "@parcel/css-linux-arm64-musl": "1.7.3", + "@parcel/css-linux-x64-gnu": "1.7.3", + "@parcel/css-linux-x64-musl": "1.7.3", + "@parcel/css-win32-x64-msvc": "1.7.3", + "detect-libc": "^1.0.3" + } + }, + "@parcel/css-darwin-arm64": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/@parcel/css-darwin-arm64/-/css-darwin-arm64-1.7.3.tgz", + "integrity": "sha512-m3HDY+Rh8HJxmLELKAvCpF59vLS7FWtgBODHxl8G9Jl2CnGtXpXvdpyeMxNsTE+2QuPC+a5QT7IeZAKb2Gjmxg==", + "dev": true, + "optional": true + }, + "@parcel/css-darwin-x64": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/@parcel/css-darwin-x64/-/css-darwin-x64-1.7.3.tgz", + "integrity": "sha512-LuhweXKxVwrz/hjAOm9XNRMSL+p23px20nhSCASkyUP7Higaxza948W3TSQdoL3YyR+wQxQH8Yj+R/T8Tz3E3g==", + "dev": true, + "optional": true + }, + "@parcel/css-linux-arm-gnueabihf": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/@parcel/css-linux-arm-gnueabihf/-/css-linux-arm-gnueabihf-1.7.3.tgz", + "integrity": "sha512-/pd9Em18zMvt7eDZAMpNBEwF7c4VPVhAtBOZ59ClFrsXCTDNYP7mSy0cwNgtLelCRZCGAQmZNBDNQPH7vO3rew==", + "dev": true, + "optional": true + }, + "@parcel/css-linux-arm64-gnu": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/@parcel/css-linux-arm64-gnu/-/css-linux-arm64-gnu-1.7.3.tgz", + "integrity": "sha512-5aKiEhQK40riO4iVKzRqISzgYK+7Z7i3e6JTSz+/BHuQyHEUaBe/RuJ8Z0BDQtFz0HmWQlrQCd+7hd0Xgd8vYQ==", + "dev": true, + "optional": true + }, + "@parcel/css-linux-arm64-musl": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/@parcel/css-linux-arm64-musl/-/css-linux-arm64-musl-1.7.3.tgz", + "integrity": "sha512-Wf7/aIueDED2JqBMfZvzbBAFSaPmd3TR28bD2pmP7CI/jZnm9vHVKMdOLgt9NKSSSjdGrp+VM410CsrUM7xcOw==", + "dev": true, + "optional": true + }, + "@parcel/css-linux-x64-gnu": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/@parcel/css-linux-x64-gnu/-/css-linux-x64-gnu-1.7.3.tgz", + "integrity": "sha512-0ZADbuFklUrHC1p2uPY4BPcN07jUTMqJzr/SSdnGN2XiXgiVZGcDCMHUj0DvC9Vwy11DDM6Rnw4QBbKHG+QGjQ==", + "dev": true, + "optional": true + }, + "@parcel/css-linux-x64-musl": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/@parcel/css-linux-x64-musl/-/css-linux-x64-musl-1.7.3.tgz", + "integrity": "sha512-mFWWM8lX2OIID81YQuDDt9zTqof0B7UcEcs0huE7Zbs60uLEEQupdf8iH0yh5EOhxPt3sRcQnGXf2QTrXdjIMA==", + "dev": true, + "optional": true + }, + "@parcel/css-win32-x64-msvc": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/@parcel/css-win32-x64-msvc/-/css-win32-x64-msvc-1.7.3.tgz", + "integrity": "sha512-KUFEMQcoP7DG3QbsN21OxhjHkfQ1BARn7D9puX75bV5N1F1kv557aaLkQZiMsgiYOL4tmJvsdQXutG7x++3j4Q==", + "dev": true, + "optional": true + }, "@parcel/diagnostic": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@parcel/diagnostic/-/diagnostic-2.3.1.tgz", - "integrity": "sha512-hBMcg4WVMdSIy6RpI4gSto5dZ3OoUbnrCZzVw3J1tzQJn7x9na/+014IaE58vJtAqJ8/jc/TqWIcwsSLe898rA==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@parcel/diagnostic/-/diagnostic-2.4.0.tgz", + "integrity": "sha512-TjWO/b2zMFhub5ouwGjazMm7iAUvdmXBfWmjrg4TBhUbhoQwBnyWfvMDtAYo7PcvXfxVPgPZv86Nv6Ym5H6cHQ==", "dev": true, "requires": { "json-source-map": "^0.6.1", @@ -8338,47 +8198,47 @@ } }, "@parcel/events": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@parcel/events/-/events-2.3.1.tgz", - "integrity": "sha512-J2rWKGl1Z2IvwwDwWYz/4gUxC1P4LsioUyOo1HYGT+N5+r41P8ZB5CM/aosI2qu5mMsH8rTpclOv5E36vCSQxw==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@parcel/events/-/events-2.4.0.tgz", + "integrity": "sha512-DEaEtFbhOhNAEmiXJ3MyF8Scq+sNDKiTyLax4lAC5/dpE5GvwfNnoD17C2+0gDuuDpdQkdHfXfvr50aYFt7jcw==", "dev": true }, "@parcel/fs": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@parcel/fs/-/fs-2.3.1.tgz", - "integrity": "sha512-FKqyf8KF0zOw8gfj/feEAMj4Kzqkgt9Zxa2A7UDdMWRvxLR8znqnWjD++xqq6rxJp2Y1zm4fH3JOTK4CRddUSg==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@parcel/fs/-/fs-2.4.0.tgz", + "integrity": "sha512-CnUlWGUJ52SJVQi8QnaAPPQZOADmHMV9D9aX9GLcDm5XLT3Em7vmesG4bNLdMLwzYuzAtenhcWmuRCACuYztHw==", "dev": true, "requires": { - "@parcel/fs-search": "2.3.1", - "@parcel/types": "2.3.1", - "@parcel/utils": "2.3.1", + "@parcel/fs-search": "2.4.0", + "@parcel/types": "2.4.0", + "@parcel/utils": "2.4.0", "@parcel/watcher": "^2.0.0", - "@parcel/workers": "2.3.1" + "@parcel/workers": "2.4.0" } }, "@parcel/fs-search": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@parcel/fs-search/-/fs-search-2.3.1.tgz", - "integrity": "sha512-JsBIDttjmgJIMD6Q6MV83M+mwr5NqUm55iA+SewimboiWzSPzIJxRaegniSsNfsrBASJ6nSZFHcLPd/VJ5iqJw==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@parcel/fs-search/-/fs-search-2.4.0.tgz", + "integrity": "sha512-W/Vu6wbZk4wuB6AVdMkyymwh/S8Peed/PgJgSsApYD6lSTD315I6OuEdxZh3lWY+dqQdog/NJ7dvi/hdpH/Iqw==", "dev": true, "requires": { "detect-libc": "^1.0.3" } }, "@parcel/graph": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@parcel/graph/-/graph-2.3.1.tgz", - "integrity": "sha512-KdoPJM+d5LlCFZ46iapXXCwL+WD8/QYRkb/lFpmwHIT0xdY2sAU+rDFbSB3XeI8guol5zPZrGHSj38U1o+tSFA==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@parcel/graph/-/graph-2.4.0.tgz", + "integrity": "sha512-5TZIAfDITkJCzgH4j4OQhnIvjV9IFwWqNBJanRl5QQTmKvdcODS3WbnK1SOJ+ZltcLVXMB+HNXmL0bX0tVolcw==", "dev": true, "requires": { - "@parcel/utils": "2.3.1", + "@parcel/utils": "2.4.0", "nullthrows": "^1.1.1" } }, "@parcel/hash": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@parcel/hash/-/hash-2.3.1.tgz", - "integrity": "sha512-IYhSQE+CIKWjPfiLmsrXHupkNd+hMlTlI9DR5qLiD8ydyPwg0XE/bOYTcbdsSl6HTackY0XYVSJwTtEgvtYVfw==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@parcel/hash/-/hash-2.4.0.tgz", + "integrity": "sha512-nB+wYNUhe6+G8M7vQhdeFXtpYJYwJgBHOPZ7Hd9O2jdlamWjDbw0t/u1dJbYvGJ8ZDtLDwiItawQVpuVdskQ9g==", "dev": true, "requires": { "detect-libc": "^1.0.3", @@ -8386,65 +8246,68 @@ } }, "@parcel/logger": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@parcel/logger/-/logger-2.3.1.tgz", - "integrity": "sha512-swNPInULCJrpCJCLOgZcf+xNcUF0NjD7LyNcB349BkyO7i6st14nfBjXf6eAJJu0z7RMmi6zp9CQB47e4cI6+g==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@parcel/logger/-/logger-2.4.0.tgz", + "integrity": "sha512-DqfU0Zcs/0a7VBk+MsjJ80C66w4kM9EbkO3G12NIyEjNeG50ayW2CE9rUuJ91JaM9j0NFM1P82eyLpQPFFaVPw==", "dev": true, "requires": { - "@parcel/diagnostic": "2.3.1", - "@parcel/events": "2.3.1" + "@parcel/diagnostic": "2.4.0", + "@parcel/events": "2.4.0" } }, "@parcel/markdown-ansi": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@parcel/markdown-ansi/-/markdown-ansi-2.3.1.tgz", - "integrity": "sha512-M4Hi25pKtSh1KF/ppMDBk5QuLpYAQjgB/MSP+nz7NzXQlYPCN5oEk9TUkrmQ9J+vOvVwefxfy7ahSErEuQbTFw==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@parcel/markdown-ansi/-/markdown-ansi-2.4.0.tgz", + "integrity": "sha512-gPUP1xikxHiu2kFyPy35pfuVkFgAmcywO8YDQj7iYcB+k7l4QPpIYFYGXn2QADV4faf66ncMeTD4uYV8c0GqjQ==", "dev": true, "requires": { "chalk": "^4.1.0" } }, "@parcel/namer-default": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@parcel/namer-default/-/namer-default-2.3.1.tgz", - "integrity": "sha512-huIb47vri76MhfuvmKtQqalqDfIwMfaPyjrbaoHysZ4fRUjvmrx0NPy0dNrTSLvA96iBc7EG2Zzw+Qn3voAiwg==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@parcel/namer-default/-/namer-default-2.4.0.tgz", + "integrity": "sha512-DfL+Gx0Tyoa0vsgRpNybXjuKbWNw8MTVpy7Dk7r0btfVsn1jy3SSwlxH4USf76gb00/pK6XBsMp9zn7Z8ePREQ==", "dev": true, "requires": { - "@parcel/diagnostic": "2.3.1", - "@parcel/plugin": "2.3.1", + "@parcel/diagnostic": "2.4.0", + "@parcel/plugin": "2.4.0", "nullthrows": "^1.1.1" } }, "@parcel/node-resolver-core": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@parcel/node-resolver-core/-/node-resolver-core-2.3.1.tgz", - "integrity": "sha512-iEeilPoeiOyWLeF1NERZByOWe3IqUnNuoHkGbn8qZWlZXYO+k+w/X8Auv0KKsLVGe4XdljwsWbTWuhQJZ8BpIg==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@parcel/node-resolver-core/-/node-resolver-core-2.4.0.tgz", + "integrity": "sha512-qiN97XcfW2fYNoYuVEhNKuVPEJKj5ONQl0fqr/NEMmYvWz3bVKjgiXNJwW558elZvCI08gEbdxgyThpuFFQeKQ==", "dev": true, "requires": { - "@parcel/diagnostic": "2.3.1", - "@parcel/utils": "2.3.1", + "@parcel/diagnostic": "2.4.0", + "@parcel/utils": "2.4.0", "nullthrows": "^1.1.1" } }, - "@parcel/optimizer-cssnano": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@parcel/optimizer-cssnano/-/optimizer-cssnano-2.3.1.tgz", - "integrity": "sha512-e/YfTbMzn71CgSyyL/e+MZ/aQTPcUXoQ/EtqcuDlS3kcp2tw1aHgP0xmZT7dSPv+L+I0gY3aQSMM7IqgIzfkLQ==", + "@parcel/optimizer-css": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@parcel/optimizer-css/-/optimizer-css-2.4.0.tgz", + "integrity": "sha512-LQmjjOGsHEHKTJqfHR2eJyhWhLXvHP0uOAU+qopBttYYlB2J/vMK9RYAye5cyAb8bQmV8wAdi2mq9rnt7FMSPw==", "dev": true, "requires": { - "@parcel/plugin": "2.3.1", + "@parcel/css": "^1.7.2", + "@parcel/diagnostic": "2.4.0", + "@parcel/plugin": "2.4.0", "@parcel/source-map": "^2.0.0", - "cssnano": "^5.0.15", - "postcss": "^8.4.5" + "@parcel/utils": "2.4.0", + "browserslist": "^4.6.6", + "nullthrows": "^1.1.1" } }, "@parcel/optimizer-htmlnano": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@parcel/optimizer-htmlnano/-/optimizer-htmlnano-2.3.1.tgz", - "integrity": "sha512-zE76grrE5KlWwooH9AnkKRU4QNgcWUtHpJUWba5JYXuCfaqCG2XpN5ARBmRqtmrEke7PlCt/1F0E47PPhZeWiw==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@parcel/optimizer-htmlnano/-/optimizer-htmlnano-2.4.0.tgz", + "integrity": "sha512-02EbeElLgNOAYhGU7fFBahpoKrX5G/yzahpaoKB/ypScM4roSsAMBkGcluboR5L10YRsvfvJEpxvfGyDA3tPmw==", "dev": true, "requires": { - "@parcel/plugin": "2.3.1", + "@parcel/plugin": "2.4.0", "htmlnano": "^2.0.0", "nullthrows": "^1.1.1", "posthtml": "^0.16.5", @@ -8452,201 +8315,202 @@ } }, "@parcel/optimizer-image": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@parcel/optimizer-image/-/optimizer-image-2.3.1.tgz", - "integrity": "sha512-vBnyWaaqljASMi/vDkVdv855/G/BaJYzZklsc5xjGUwZq8nbH4sZPc9NDdl99/WU3yGR8QtA67BdTRkRLf8rKQ==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@parcel/optimizer-image/-/optimizer-image-2.4.0.tgz", + "integrity": "sha512-Q4onaBMPkDyYxPzrb8ytBUftaQZFepj9dSUgq+ETuHDzkgia0tomDPfCqrw6ld0qvYyANzXTP5+LC4g0i5yh+A==", "dev": true, "requires": { - "@parcel/diagnostic": "2.3.1", - "@parcel/plugin": "2.3.1", - "@parcel/utils": "2.3.1", - "@parcel/workers": "2.3.1", + "@parcel/diagnostic": "2.4.0", + "@parcel/plugin": "2.4.0", + "@parcel/utils": "2.4.0", + "@parcel/workers": "2.4.0", "detect-libc": "^1.0.3" } }, "@parcel/optimizer-svgo": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@parcel/optimizer-svgo/-/optimizer-svgo-2.3.1.tgz", - "integrity": "sha512-PwEXmmZ9z7WNs8n/lWkbwRdw62MJqYzKDUUJPF+KCQb7NG1OAZy1jVj+TyiCuMtxIKhNtei8OrMOlvulQgixcg==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@parcel/optimizer-svgo/-/optimizer-svgo-2.4.0.tgz", + "integrity": "sha512-mwvGuCqVuNCAuMlp2maFE/Uz9ud1T1AuX0f6cCRczjFYiwZuIr/0iDdfFzSziOkVo1MRAGAZNa0dRR/UzCZtVg==", "dev": true, "requires": { - "@parcel/diagnostic": "2.3.1", - "@parcel/plugin": "2.3.1", - "@parcel/utils": "2.3.1", + "@parcel/diagnostic": "2.4.0", + "@parcel/plugin": "2.4.0", + "@parcel/utils": "2.4.0", "svgo": "^2.4.0" } }, "@parcel/optimizer-terser": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@parcel/optimizer-terser/-/optimizer-terser-2.3.1.tgz", - "integrity": "sha512-uDJghBgwCKhq6m1y/vw/tRZKS4kqNXhXaZIYtEyRdrxJ/pqGTGmHVYO5ItXpgGugM49C8TrqVVlcgIIgR/p1yw==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@parcel/optimizer-terser/-/optimizer-terser-2.4.0.tgz", + "integrity": "sha512-PdCgRgXNSY6R1HTV9VG2MHp1CgUbP5pslCyxvlbUmQAS6bvEpMOpn3qSd+U28o7mGE/qXIhvpDyi808sb+MEcg==", "dev": true, "requires": { - "@parcel/diagnostic": "2.3.1", - "@parcel/plugin": "2.3.1", + "@parcel/diagnostic": "2.4.0", + "@parcel/plugin": "2.4.0", "@parcel/source-map": "^2.0.0", - "@parcel/utils": "2.3.1", + "@parcel/utils": "2.4.0", "nullthrows": "^1.1.1", "terser": "^5.2.0" } }, "@parcel/package-manager": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@parcel/package-manager/-/package-manager-2.3.1.tgz", - "integrity": "sha512-w2XOkD3SU8RxhUDW+Soy/TjvEVvfUsBmHy02asllt4b/ZtyZVAsQmonGExHDDkRn3TNDR6Y96Yw6M7purt+b9w==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@parcel/package-manager/-/package-manager-2.4.0.tgz", + "integrity": "sha512-21AEfAQnZbHRVViTn7QsPGe/CiGaFaDUH5f0m8qVC7fDjjhC8LM8blkqU72goaO9FbaLMadtEf2txhzly7h/bg==", "dev": true, "requires": { - "@parcel/diagnostic": "2.3.1", - "@parcel/fs": "2.3.1", - "@parcel/logger": "2.3.1", - "@parcel/types": "2.3.1", - "@parcel/utils": "2.3.1", - "@parcel/workers": "2.3.1", + "@parcel/diagnostic": "2.4.0", + "@parcel/fs": "2.4.0", + "@parcel/logger": "2.4.0", + "@parcel/types": "2.4.0", + "@parcel/utils": "2.4.0", + "@parcel/workers": "2.4.0", "semver": "^5.7.1" } }, "@parcel/packager-css": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@parcel/packager-css/-/packager-css-2.3.1.tgz", - "integrity": "sha512-gvrGNw4tiIyi6SO7at7RJvfCDQIAuy9xJhFtuouuFAl6A1EMhkoL5amcmavfdbN166LJ/3s74t1LYoPeYCnb2Q==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@parcel/packager-css/-/packager-css-2.4.0.tgz", + "integrity": "sha512-LmPDWzkXi60Oy3WrPF0jPKQxeTwW5hmNBgrcXJMHSu+VcXdaQZNzNxVzhnZkJUbDd2z9vAUrUGzdLh8TquC8iQ==", "dev": true, "requires": { - "@parcel/plugin": "2.3.1", + "@parcel/plugin": "2.4.0", "@parcel/source-map": "^2.0.0", - "@parcel/utils": "2.3.1", + "@parcel/utils": "2.4.0", "nullthrows": "^1.1.1" } }, "@parcel/packager-html": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@parcel/packager-html/-/packager-html-2.3.1.tgz", - "integrity": "sha512-dOPEB0KEyLzDl5zEXjRCo/J/fsc1wVw0gUa+N0A5LAZeYmTOPJgTHhb/ZeNcPKWQT75eGUSEaDXX+oBs1B17xw==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@parcel/packager-html/-/packager-html-2.4.0.tgz", + "integrity": "sha512-OPMIQ1uHYQFpRPrsmm5BqONbAyzjlhVsPRAzHlcBrglG4BTUeOR2ow4MUKblHmVVqc3QHnfZG4nHHtFkeuNQ3A==", "dev": true, "requires": { - "@parcel/plugin": "2.3.1", - "@parcel/types": "2.3.1", - "@parcel/utils": "2.3.1", + "@parcel/plugin": "2.4.0", + "@parcel/types": "2.4.0", + "@parcel/utils": "2.4.0", "nullthrows": "^1.1.1", "posthtml": "^0.16.5" } }, "@parcel/packager-js": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@parcel/packager-js/-/packager-js-2.3.1.tgz", - "integrity": "sha512-7TikegHYgwiuUQ9bFikG3H47wTms7nVpDQEwBYHmPhDLvwlKCq17HJ39eQKS4740G6umIvQkG5t7mcR1XTXYtg==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@parcel/packager-js/-/packager-js-2.4.0.tgz", + "integrity": "sha512-cfslIH43CJFgBS9PmdFaSnbInMCoejsFCnxtJa2GeUpjCXSfelPRp0OPx7m8n+fap4czftPhoxBALeDUElOZGQ==", "dev": true, "requires": { - "@parcel/diagnostic": "2.3.1", - "@parcel/hash": "2.3.1", - "@parcel/plugin": "2.3.1", + "@parcel/diagnostic": "2.4.0", + "@parcel/hash": "2.4.0", + "@parcel/plugin": "2.4.0", "@parcel/source-map": "^2.0.0", - "@parcel/utils": "2.3.1", + "@parcel/utils": "2.4.0", "globals": "^13.2.0", "nullthrows": "^1.1.1" } }, "@parcel/packager-raw": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@parcel/packager-raw/-/packager-raw-2.3.1.tgz", - "integrity": "sha512-Gy4WfZPy64+E7Gvvdw3/HG5EFzuBbC64MbLv0AgQNIDub5LG76dPdLLgJ/TS72gXsA43Q2ApaXMHBOC/G0yECA==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@parcel/packager-raw/-/packager-raw-2.4.0.tgz", + "integrity": "sha512-SFfw7chMFITj3J26ZVDJxbO6xwtPFcFBm1js8cwWMgzwuwS6CEc43k5+Abj+2/EqHU9kNJU9eWV5vT6lQwf3HA==", "dev": true, "requires": { - "@parcel/plugin": "2.3.1" + "@parcel/plugin": "2.4.0" } }, "@parcel/packager-svg": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@parcel/packager-svg/-/packager-svg-2.3.1.tgz", - "integrity": "sha512-lUx+DXymTNKhvxdoNhnb6or4qjGLbXBTAiyfp4q8QlFXJHKVbEEoVgLc9rda9TLIG18Pn4NR9QE+o/nyzwcibQ==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@parcel/packager-svg/-/packager-svg-2.4.0.tgz", + "integrity": "sha512-DwkgrdLEQop+tu9Ocr1ZaadmpsbSgVruJPr80xq1LaB0Jiwrl9HjHStMNH1laNFueK1yydxhnj9C2JQfW28qag==", "dev": true, "requires": { - "@parcel/plugin": "2.3.1", - "@parcel/types": "2.3.1", - "@parcel/utils": "2.3.1", + "@parcel/plugin": "2.4.0", + "@parcel/types": "2.4.0", + "@parcel/utils": "2.4.0", "posthtml": "^0.16.4" } }, "@parcel/plugin": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@parcel/plugin/-/plugin-2.3.1.tgz", - "integrity": "sha512-ROOWbgFze7BCF3RkEh8VbcKGlR5UGBuJ8lfCaFrG1VOk7Rxgl8Bmk96TRbZREm/1jB74p2O8twVKyPSC13riow==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@parcel/plugin/-/plugin-2.4.0.tgz", + "integrity": "sha512-ehFUAL2+h27Lv+cYbbXA74UGy8C+eglUjcpvASOOjVRFuD6poMAMliKkKAXBhQaFx/Rvhz27A2PIPv9lL2i4UQ==", "dev": true, "requires": { - "@parcel/types": "2.3.1" + "@parcel/types": "2.4.0" } }, "@parcel/reporter-cli": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@parcel/reporter-cli/-/reporter-cli-2.3.1.tgz", - "integrity": "sha512-rLDxD1SJIiAhd/N3CiRiNKz/NVVyh25tPEOFCNFgoTVC8wJKfzeUEgVuTJQ8lRLrzk0PfY51KyGmWdLqti8jag==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@parcel/reporter-cli/-/reporter-cli-2.4.0.tgz", + "integrity": "sha512-Q9bIFMaGvQgypCDxdMEKOwrJzIHAXScKkuFsqTHnUL6mmH3Mo2CoEGAq/wpMXuPhXRn1dPJcHgTNDwZ2fSzz0A==", "dev": true, "requires": { - "@parcel/plugin": "2.3.1", - "@parcel/types": "2.3.1", - "@parcel/utils": "2.3.1", - "chalk": "^4.1.0" + "@parcel/plugin": "2.4.0", + "@parcel/types": "2.4.0", + "@parcel/utils": "2.4.0", + "chalk": "^4.1.0", + "term-size": "^2.2.1" } }, "@parcel/reporter-dev-server": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@parcel/reporter-dev-server/-/reporter-dev-server-2.3.1.tgz", - "integrity": "sha512-ramEx+dFMcgqus2We7jlonQgCo3/xwnjdXUsC+iuJXSKGW7eMCZ5f+fjETkeq2eOt8YYzAML54u7Qkt1gSX39Q==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@parcel/reporter-dev-server/-/reporter-dev-server-2.4.0.tgz", + "integrity": "sha512-24h++wevs7XYuX4dKa4PUfLSstvn3g7udajFv6CeQoME+dR25RL/wH/2LUbhV5ilgXXab76rWIndSqp78xHxPA==", "dev": true, "requires": { - "@parcel/plugin": "2.3.1", - "@parcel/utils": "2.3.1" + "@parcel/plugin": "2.4.0", + "@parcel/utils": "2.4.0" } }, "@parcel/resolver-default": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@parcel/resolver-default/-/resolver-default-2.3.1.tgz", - "integrity": "sha512-fScU5ZG/VmdqoqPPArTLHXC7LgsfSVKA6mpZpkpkAyFTMZimPv6HuFwMhIj7jabeWRQKShjpT07Ygq31UBl/Cw==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@parcel/resolver-default/-/resolver-default-2.4.0.tgz", + "integrity": "sha512-K7pIIFmGm1hjg/7Mzkg99i8tfCClKfBUTuc2R5j8cdr2n0mCAi4/f2mFf5svLrb5XZrnDgoQ05tHKklLEfUDUw==", "dev": true, "requires": { - "@parcel/node-resolver-core": "2.3.1", - "@parcel/plugin": "2.3.1" + "@parcel/node-resolver-core": "2.4.0", + "@parcel/plugin": "2.4.0" } }, "@parcel/runtime-browser-hmr": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@parcel/runtime-browser-hmr/-/runtime-browser-hmr-2.3.1.tgz", - "integrity": "sha512-Zd6fzBaNNhLBqROy1Jtwsddf5/E2I7zVecHPWutAUT9L4xX3XMH7Yv3W6vmLLq3X0mdfmoRtVnQseAMPAyfNog==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@parcel/runtime-browser-hmr/-/runtime-browser-hmr-2.4.0.tgz", + "integrity": "sha512-swPFtvxGoCA9LEjU/pHPNjxG1l0fte8447zXwRN/AaYrtjNu9Ww117OSKCyvCnE143E79jZOFStodTQGFuH+9A==", "dev": true, "requires": { - "@parcel/plugin": "2.3.1", - "@parcel/utils": "2.3.1" + "@parcel/plugin": "2.4.0", + "@parcel/utils": "2.4.0" } }, "@parcel/runtime-js": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@parcel/runtime-js/-/runtime-js-2.3.1.tgz", - "integrity": "sha512-Nmgbo+v5p5g1DSHbmZni22ZsHhcAsi7z6Qk9cdXrt/fW2VbQRu+yBKebeinwUnWGd5Lwu5UZ2mwn2nSaSV8Spw==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@parcel/runtime-js/-/runtime-js-2.4.0.tgz", + "integrity": "sha512-67OOvmkDdtmgzZVP/EyAzoXhJ/Ug3LUVUt7idg9arun5rdJptqEb3Um3wmH0zjcNa9jMbJt7Kl5x1wA8dJgPYg==", "dev": true, "requires": { - "@parcel/plugin": "2.3.1", - "@parcel/utils": "2.3.1", + "@parcel/plugin": "2.4.0", + "@parcel/utils": "2.4.0", "nullthrows": "^1.1.1" } }, "@parcel/runtime-react-refresh": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@parcel/runtime-react-refresh/-/runtime-react-refresh-2.3.1.tgz", - "integrity": "sha512-42ldT80UZ8fqm0M5td3YviBn6fFYwcva3PdWLfwC5b1woug/5/FevMna+ndNBSFjt+xbFLUFf6bDxnV7vlWHHw==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@parcel/runtime-react-refresh/-/runtime-react-refresh-2.4.0.tgz", + "integrity": "sha512-flnr+bf06lMZPbXZZLLaFNrPHvYpfuXTVovEghyUW46qLVpaHj33dpsU/LqZplIuHgBp2ibgrKhr/hY9ell68w==", "dev": true, "requires": { - "@parcel/plugin": "2.3.1", - "@parcel/utils": "2.3.1", + "@parcel/plugin": "2.4.0", + "@parcel/utils": "2.4.0", "react-refresh": "^0.9.0" } }, "@parcel/runtime-service-worker": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@parcel/runtime-service-worker/-/runtime-service-worker-2.3.1.tgz", - "integrity": "sha512-kTt1DqMIQt5eNAJZTxeegLgGxHC4qXSaBrfQanezp+1fmRi1TOWvKgM7lzKwY9IaXfyCV/DR+Wy95iR6r1P70A==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@parcel/runtime-service-worker/-/runtime-service-worker-2.4.0.tgz", + "integrity": "sha512-RgM5QUqW22WzstW03CtV+Oih8VGVuwsf94Cc4hLouU2EAD0NUJgATWbFocZVTZIBTKELAWh2gjpSQDdnL4Ur+A==", "dev": true, "requires": { - "@parcel/plugin": "2.3.1", - "@parcel/utils": "2.3.1", + "@parcel/plugin": "2.4.0", + "@parcel/utils": "2.4.0", "nullthrows": "^1.1.1" } }, @@ -8660,15 +8524,15 @@ } }, "@parcel/transformer-babel": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@parcel/transformer-babel/-/transformer-babel-2.3.1.tgz", - "integrity": "sha512-KEyuFNQJYFMP39XvhTu2ZzsD+gdQKyA3X+5DViH2bSgZeEjCIfAhAjg7mSfKeD/u8ZVBmIDq2M/QjDO+taM0KQ==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@parcel/transformer-babel/-/transformer-babel-2.4.0.tgz", + "integrity": "sha512-iWDa7KzJTMP3HNmrYxiYq/S6redk2qminx/9MwmKIN9jzm8mgts2Lj9lOg/t66YaDGky6JAvw4DhB2qW4ni6yQ==", "dev": true, "requires": { - "@parcel/diagnostic": "2.3.1", - "@parcel/plugin": "2.3.1", + "@parcel/diagnostic": "2.4.0", + "@parcel/plugin": "2.4.0", "@parcel/source-map": "^2.0.0", - "@parcel/utils": "2.3.1", + "@parcel/utils": "2.4.0", "browserslist": "^4.6.6", "json5": "^2.2.0", "nullthrows": "^1.1.1", @@ -8676,30 +8540,29 @@ } }, "@parcel/transformer-css": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@parcel/transformer-css/-/transformer-css-2.3.1.tgz", - "integrity": "sha512-InuEbSu7yLp3jjnmVB0MzO8WjG0123EJqGVVlB5WbEBUxzLN3bgTJDKP5O7xGgipjhNIpFUjx2SU7eeSb6iFog==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@parcel/transformer-css/-/transformer-css-2.4.0.tgz", + "integrity": "sha512-D2u48LuiQsQvbknABE0wVKFp9r6yCgWrHKEP1J6EJ31c49nXGXDHrpHJJwqq9BvAs/124eBI5mSsehTJyFEMwg==", "dev": true, "requires": { - "@parcel/hash": "2.3.1", - "@parcel/plugin": "2.3.1", + "@parcel/css": "^1.7.2", + "@parcel/diagnostic": "2.4.0", + "@parcel/plugin": "2.4.0", "@parcel/source-map": "^2.0.0", - "@parcel/utils": "2.3.1", - "nullthrows": "^1.1.1", - "postcss": "^8.4.5", - "postcss-value-parser": "^4.2.0", - "semver": "^5.7.1" + "@parcel/utils": "2.4.0", + "browserslist": "^4.6.6", + "nullthrows": "^1.1.1" } }, "@parcel/transformer-html": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@parcel/transformer-html/-/transformer-html-2.3.1.tgz", - "integrity": "sha512-23Z7kuSDnLzB8Du88pua2VjgOh7ZUpW1hedX1FubV2PfUGpZvAg7XBTdTGp+7Tmy8PIGyZrP3CP1UNQkjLO8bQ==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@parcel/transformer-html/-/transformer-html-2.4.0.tgz", + "integrity": "sha512-2/8X/o5QaCNVPr4wkxLCUub7v/YVvVN2L5yCEcTatNeFhNg/2iz7P2ekfqOaoDCHWZEOBT1VTwPbdBt+TMM71Q==", "dev": true, "requires": { - "@parcel/diagnostic": "2.3.1", - "@parcel/hash": "2.3.1", - "@parcel/plugin": "2.3.1", + "@parcel/diagnostic": "2.4.0", + "@parcel/hash": "2.4.0", + "@parcel/plugin": "2.4.0", "nullthrows": "^1.1.1", "posthtml": "^0.16.5", "posthtml-parser": "^0.10.1", @@ -8708,28 +8571,28 @@ } }, "@parcel/transformer-image": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@parcel/transformer-image/-/transformer-image-2.3.1.tgz", - "integrity": "sha512-8A+XnUhDnEAbfc7GCBRvCsSiv/6Ro5+vd1sZ5tQJmajcc0nfIbolZQuztEHZMDPjEr+WIcOCJZ5re5bCG3NhZA==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@parcel/transformer-image/-/transformer-image-2.4.0.tgz", + "integrity": "sha512-JZkQvGGoGiD0AVKLIbAYYUWxepMmUaWZ4XXx71MmS/kA7cUDwTZ0CXq63YnSY1m+DX+ClTuTN8mBlwe2dkcGbA==", "dev": true, "requires": { - "@parcel/plugin": "2.3.1", - "@parcel/workers": "2.3.1", + "@parcel/plugin": "2.4.0", + "@parcel/workers": "2.4.0", "nullthrows": "^1.1.1" } }, "@parcel/transformer-js": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@parcel/transformer-js/-/transformer-js-2.3.1.tgz", - "integrity": "sha512-9mHpfw008l00cW8QW21Nhfax/aOqZ+CozNXj5gWV0uJ9is5x0TumKYXtYUsuP9LunAra/ZenvpQjCFibTXe51Q==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@parcel/transformer-js/-/transformer-js-2.4.0.tgz", + "integrity": "sha512-eeLHFwv3jT3GmIxpLC7B8EXExGK0MFaK91HXljOMh6l8a+GlQYw27MSFQVtoXr0Olx9Uq2uvjXP1+zSsq3LQUQ==", "dev": true, "requires": { - "@parcel/diagnostic": "2.3.1", - "@parcel/plugin": "2.3.1", + "@parcel/diagnostic": "2.4.0", + "@parcel/plugin": "2.4.0", "@parcel/source-map": "^2.0.0", - "@parcel/utils": "2.3.1", - "@parcel/workers": "2.3.1", - "@swc/helpers": "^0.2.11", + "@parcel/utils": "2.4.0", + "@parcel/workers": "2.4.0", + "@swc/helpers": "^0.3.6", "browserslist": "^4.6.6", "detect-libc": "^1.0.3", "nullthrows": "^1.1.1", @@ -8738,24 +8601,25 @@ } }, "@parcel/transformer-json": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@parcel/transformer-json/-/transformer-json-2.3.1.tgz", - "integrity": "sha512-usaoro1uH5hxI57x7Qve4Y6Tsf5GitVh6gC3e5TaJFc3mnr5pn3KKviWC0g0haeluv9NCPK++alQuzmpgIooWQ==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@parcel/transformer-json/-/transformer-json-2.4.0.tgz", + "integrity": "sha512-3nR+d39mbURoXIypDfVCaxpwL65qMV+h8SLD78up2uhaRGklHQfN7GuemR7L+mcVAgNrmwVvZHhyNjdgYwWqqg==", "dev": true, "requires": { - "@parcel/plugin": "2.3.1", + "@parcel/plugin": "2.4.0", "json5": "^2.2.0" } }, "@parcel/transformer-postcss": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@parcel/transformer-postcss/-/transformer-postcss-2.3.1.tgz", - "integrity": "sha512-rpoEGpStj1THw/NH3CuujrKan84h6SEnDBem8l/GAE7/cRDQs/O/JnJKP+oXcKOGH1KNdcuPWYb8ORW9Pe+Z5w==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@parcel/transformer-postcss/-/transformer-postcss-2.4.0.tgz", + "integrity": "sha512-ijIa2x+dbKnJhr7zO5WlXkvuj832fDoGksMBk2DX3u2WMrbh2rqVWPpGFsDhESx7EAy38nUoV/5KUdrNqUmCEA==", "dev": true, "requires": { - "@parcel/hash": "2.3.1", - "@parcel/plugin": "2.3.1", - "@parcel/utils": "2.3.1", + "@parcel/diagnostic": "2.4.0", + "@parcel/hash": "2.4.0", + "@parcel/plugin": "2.4.0", + "@parcel/utils": "2.4.0", "clone": "^2.1.1", "nullthrows": "^1.1.1", "postcss-value-parser": "^4.2.0", @@ -8763,13 +8627,13 @@ } }, "@parcel/transformer-posthtml": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@parcel/transformer-posthtml/-/transformer-posthtml-2.3.1.tgz", - "integrity": "sha512-ahFLfV8zdm6lH6gGSZxgUvFbP0qsclucV53ubRIRV+croGp1KhMCstbMY5GKGYHWoI6RRrxnbriJwVcbX9tUVQ==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@parcel/transformer-posthtml/-/transformer-posthtml-2.4.0.tgz", + "integrity": "sha512-xoL3AzgtVeRRAo6bh0AHAYm9bt1jZ+HiH86/7oARj/uJs6Wd8kXK/DZf6fH+F87hj4e7bnjmDDc0GPVK0lPz1w==", "dev": true, "requires": { - "@parcel/plugin": "2.3.1", - "@parcel/utils": "2.3.1", + "@parcel/plugin": "2.4.0", + "@parcel/utils": "2.4.0", "nullthrows": "^1.1.1", "posthtml": "^0.16.5", "posthtml-parser": "^0.10.1", @@ -8778,45 +8642,45 @@ } }, "@parcel/transformer-raw": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@parcel/transformer-raw/-/transformer-raw-2.3.1.tgz", - "integrity": "sha512-45ObmhBJ2wdlOGTsIEy9T+FOoQWY+x8HN2Cw9/ZhMWOpLtof56om5xk5u7hmsMMe/4Jaqxzkw3vInqOJR6bc1Q==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@parcel/transformer-raw/-/transformer-raw-2.4.0.tgz", + "integrity": "sha512-fciFbNrzj0kLlDgr6OsI0PUv414rVygDWAsgbCCq4BexDkuemMs9f9FjMctx9B2VZlctE8dTT4RGkuQumTIpUg==", "dev": true, "requires": { - "@parcel/plugin": "2.3.1" + "@parcel/plugin": "2.4.0" } }, "@parcel/transformer-react-refresh-wrap": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@parcel/transformer-react-refresh-wrap/-/transformer-react-refresh-wrap-2.3.1.tgz", - "integrity": "sha512-4uufhCCneMFpx6YaP2/ae/Ilpna5GSYuUXijlFHy4qcAIYkdtrHWRJuLBUBD4qktkmG22wTWgRwGHMk4seRDzg==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@parcel/transformer-react-refresh-wrap/-/transformer-react-refresh-wrap-2.4.0.tgz", + "integrity": "sha512-9+f6sGOWkf0jyUQ1CuFWk+04Mq3KTOCU9kRiwCHX1YdUCv5uki6r9XUSpqiYodrV+L6w9CCwLvGMLCDHxtCxMg==", "dev": true, "requires": { - "@parcel/plugin": "2.3.1", - "@parcel/utils": "2.3.1", + "@parcel/plugin": "2.4.0", + "@parcel/utils": "2.4.0", "react-refresh": "^0.9.0" } }, "@parcel/transformer-sass": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@parcel/transformer-sass/-/transformer-sass-2.3.1.tgz", - "integrity": "sha512-lbbY/zhOx7EwWsoACx0sTgAEaPpIWnJyLA7/n1T52ApvSwzL1ogTaMzjb7FQY11v6LsOXhiyyPLFPqR2qo4LMA==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@parcel/transformer-sass/-/transformer-sass-2.4.0.tgz", + "integrity": "sha512-PBQEyAKRx/G7h7prTVE1a5p+CG0mmnS/32HIp3Odkha6l7kHyKMIsyvnkS89xJooq4a/quJyDCam6bbG/P9KZg==", "dev": true, "requires": { - "@parcel/plugin": "2.3.1", + "@parcel/plugin": "2.4.0", "@parcel/source-map": "^2.0.0", "sass": "^1.38.0" } }, "@parcel/transformer-svg": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@parcel/transformer-svg/-/transformer-svg-2.3.1.tgz", - "integrity": "sha512-3V9LIpR+p8NEr8rnHHIa9PKUwQ4fEkhSo0S8g+FH32/f7y6IMuTy7hn0leYdfATNVi1Nx7d4boN4XSyUuORQfw==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@parcel/transformer-svg/-/transformer-svg-2.4.0.tgz", + "integrity": "sha512-D+yzVtSxtQML3d26fd/g4E/xYW68+OMbMUVLXORtoYMU42fnXQkJP6jGOdqy8Td+WORNY7EwVtQnESLwhBmolw==", "dev": true, "requires": { - "@parcel/diagnostic": "2.3.1", - "@parcel/hash": "2.3.1", - "@parcel/plugin": "2.3.1", + "@parcel/diagnostic": "2.4.0", + "@parcel/hash": "2.4.0", + "@parcel/plugin": "2.4.0", "nullthrows": "^1.1.1", "posthtml": "^0.16.5", "posthtml-parser": "^0.10.1", @@ -8825,31 +8689,31 @@ } }, "@parcel/types": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@parcel/types/-/types-2.3.1.tgz", - "integrity": "sha512-i2UyUoA4DzyYxe9rZRDuMAZ6TD3Mq3tTTqeJ2/zA6w83Aon3cqdE9va91peu1fKRGyRqE5lwWRtA7ktF1A2SVA==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@parcel/types/-/types-2.4.0.tgz", + "integrity": "sha512-nysGIbBEnp+7R+tKTysdcTFOZDTCodsiXFeAhYQa5bhiOnG1l9gzhxQnE2OsdsgvMm40IOsgKprqvM/DbdLfnQ==", "dev": true, "requires": { - "@parcel/cache": "2.3.1", - "@parcel/diagnostic": "2.3.1", - "@parcel/fs": "2.3.1", - "@parcel/package-manager": "2.3.1", + "@parcel/cache": "2.4.0", + "@parcel/diagnostic": "2.4.0", + "@parcel/fs": "2.4.0", + "@parcel/package-manager": "2.4.0", "@parcel/source-map": "^2.0.0", - "@parcel/workers": "2.3.1", + "@parcel/workers": "2.4.0", "utility-types": "^3.10.0" } }, "@parcel/utils": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@parcel/utils/-/utils-2.3.1.tgz", - "integrity": "sha512-OFdh/HuAcce753/U3QoORzYU3N5oZqCfQNRb0i3onuz/qpli5TyxUl/k1BuTqlKYr6Px3kj05g6GFi9kRBOMbw==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@parcel/utils/-/utils-2.4.0.tgz", + "integrity": "sha512-sdNo+mZqDZT8LJYB6WWRKa4wFVZcK6Zb5Jh6Du76QvXXwHbPIQNZgJBb6gd/Rbk4GLOp2tW7MnBfq6zP9E9E2g==", "dev": true, "requires": { - "@parcel/codeframe": "2.3.1", - "@parcel/diagnostic": "2.3.1", - "@parcel/hash": "2.3.1", - "@parcel/logger": "2.3.1", - "@parcel/markdown-ansi": "2.3.1", + "@parcel/codeframe": "2.4.0", + "@parcel/diagnostic": "2.4.0", + "@parcel/hash": "2.4.0", + "@parcel/logger": "2.4.0", + "@parcel/markdown-ansi": "2.4.0", "@parcel/source-map": "^2.0.0", "chalk": "^4.1.0" } @@ -8865,23 +8729,33 @@ } }, "@parcel/workers": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@parcel/workers/-/workers-2.3.1.tgz", - "integrity": "sha512-e2P/9p5AYBLfNRs8n+57ChGrn5171oHwY54dz/jj0CrXKN1q0b+rNwzYsPaAtOicBoqmm1s5I3cjfO6GfJP65A==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@parcel/workers/-/workers-2.4.0.tgz", + "integrity": "sha512-eSFyvEoXXPgFzQfKIlpkUjpHfIbezUCRFTPKyJAKCxvU5DSXOpb1kz5vDESWQ4qTZXKnrKvxS1PPWN6bam9z0g==", "dev": true, "requires": { - "@parcel/diagnostic": "2.3.1", - "@parcel/logger": "2.3.1", - "@parcel/types": "2.3.1", - "@parcel/utils": "2.3.1", + "@parcel/diagnostic": "2.4.0", + "@parcel/logger": "2.4.0", + "@parcel/types": "2.4.0", + "@parcel/utils": "2.4.0", "chrome-trace-event": "^1.0.2", "nullthrows": "^1.1.1" } }, "@popperjs/core": { - "version": "2.11.2", - "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.2.tgz", - "integrity": "sha512-92FRmppjjqz29VMJ2dn+xdyXZBrMlE42AV6Kq6BwjWV7CNUW1hs2FtxSNLQE+gJhaZ6AAmYuO9y8dshhcBl7vA==" + "version": "2.11.4", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.4.tgz", + "integrity": "sha512-q/ytXxO5NKvyT37pmisQAItCFqA7FD/vNb8dgaJy3/630Fsc+Mz9/9f2SziBoIZ30TJooXyTwZmhi1zjXmObYg==" + }, + "@sidvind/better-ajv-errors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@sidvind/better-ajv-errors/-/better-ajv-errors-1.1.1.tgz", + "integrity": "sha512-CXnmMcV4QoyWuFA0zlDk0AWMHftaMFAIFWz68AH4EXOO2iUEq0gsonJEhY3OjM08xHYobqqDeCAPPEsL5E+8QA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.16.0", + "chalk": "^4.1.0" + } }, "@sindresorhus/is": { "version": "0.14.0", @@ -8890,9 +8764,9 @@ "dev": true }, "@swc/helpers": { - "version": "0.2.14", - "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.2.14.tgz", - "integrity": "sha512-wpCQMhf5p5GhNg2MmGKXzUNwxe7zRiCsmqYsamez2beP7mKPCSiu+BjZcdN95yYSzO857kr0VfQewmGpS77nqA==", + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.3.8.tgz", + "integrity": "sha512-aWItSZvJj4+GI6FWkjZR13xPNPctq2RRakzo+O6vN7bC2yjwdg5EFpgaSAUn95b7BGSgcflvzVDPoKmJv24IOg==", "dev": true }, "@szmarczak/http-timer": { @@ -8975,6 +8849,12 @@ "dev": true, "requires": {} }, + "acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "dev": true + }, "agent-base": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", @@ -9220,7 +9100,7 @@ "requires": {} }, "bootstrap-datepicker": { - "version": "git+ssh://git@github.com/uxsolutions/bootstrap-datepicker.git#6aaf64391d3f2c04480f162a54e71b5c8c7ce5c7", + "version": "git+ssh://git@github.com/uxsolutions/bootstrap-datepicker.git#80575b80111659e0a2099bdf594364e23f80a686", "from": "bootstrap-datepicker@uxsolutions/bootstrap-datepicker", "requires": { "jquery": ">=3.4.0 <4.0.0" @@ -9334,15 +9214,15 @@ } }, "browserslist": { - "version": "4.19.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.19.1.tgz", - "integrity": "sha512-u2tbbG5PdKRTUoctO3NBD8FQ5HdPh1ZXPHzp1rwaa5jTc+RV9/+RlWiAIKmjRPQF+xbGM9Kklj5bZQFa2s/38A==", + "version": "4.20.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.2.tgz", + "integrity": "sha512-CQOBCqp/9pDvDbx3xfMi+86pr4KXIf2FDkTTdeuYw8OxS9t898LA1Khq57gtufFILXpfgsSx5woNgsBgvGjpsA==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30001286", - "electron-to-chromium": "^1.4.17", + "caniuse-lite": "^1.0.30001317", + "electron-to-chromium": "^1.4.84", "escalade": "^3.1.1", - "node-releases": "^2.0.1", + "node-releases": "^2.0.2", "picocolors": "^1.0.0" } }, @@ -9375,29 +9255,37 @@ "dev": true }, "cacache": { - "version": "15.3.0", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", - "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.0.3.tgz", + "integrity": "sha512-eC7wYodNCVb97kuHGk5P+xZsvUJHkhSEOyNwkenqQPAsOtrTjvWOE5vSPNBpz9d8X3acIf6w2Ub5s4rvOCTs4g==", "dev": true, "requires": { - "@npmcli/fs": "^1.0.0", - "@npmcli/move-file": "^1.0.1", + "@npmcli/fs": "^2.1.0", + "@npmcli/move-file": "^1.1.2", "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "glob": "^7.1.4", + "fs-minipass": "^2.1.0", + "glob": "^7.2.0", "infer-owner": "^1.0.4", - "lru-cache": "^6.0.0", - "minipass": "^3.1.1", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", "minipass-collect": "^1.0.2", "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.2", - "mkdirp": "^1.0.3", + "minipass-pipeline": "^1.2.4", + "mkdirp": "^1.0.4", "p-map": "^4.0.0", "promise-inflight": "^1.0.1", "rimraf": "^3.0.2", "ssri": "^8.0.1", - "tar": "^6.0.2", + "tar": "^6.1.11", "unique-filename": "^1.1.1" + }, + "dependencies": { + "lru-cache": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.7.1.tgz", + "integrity": "sha512-cRffBiTW8s73eH4aTXqBcTLU0xQnwGV3/imttRHGWCrbergmnK4D6JXQd8qin5z43HnDwRI+o7mVW0LEB+tpAw==", + "dev": true + } } }, "cacheable-request": { @@ -9420,12 +9308,6 @@ "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", "dev": true - }, - "normalize-url": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", - "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", - "dev": true } } }, @@ -9447,22 +9329,10 @@ "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "dev": true }, - "caniuse-api": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", - "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", - "dev": true, - "requires": { - "browserslist": "^4.0.0", - "caniuse-lite": "^1.0.0", - "lodash.memoize": "^4.1.2", - "lodash.uniq": "^4.5.0" - } - }, "caniuse-lite": { - "version": "1.0.30001314", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001314.tgz", - "integrity": "sha512-0zaSO+TnCHtHJIbpLroX7nsD+vYuOVjl3uzFbJO1wMVbuveJA0RK2WcQA9ZUIOiO0/ArMiMgHJLxfEZhQiC0kw==" + "version": "1.0.30001320", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001320.tgz", + "integrity": "sha512-MWPzG54AGdo3nWx7zHZTefseM5Y1ccM7hlQKHRqJkPozUaw3hNbBTMmLn16GG2FUzjR13Cr3NPfhIieX5PzXDA==" }, "caseless": { "version": "0.12.0", @@ -9631,12 +9501,6 @@ "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", "dev": true }, - "colord": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.2.tgz", - "integrity": "sha512-Uqbg+J445nc1TKn4FoDPS6ZZqAvEDnwrH42yo8B40JSOgSLxMZ/gt3h4nmCtPLQeXhjJJkqBx7SCY35WnIixaQ==", - "dev": true - }, "colorette": { "version": "2.0.16", "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.16.tgz", @@ -9659,10 +9523,10 @@ "delayed-stream": "~1.0.0" } }, - "commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "commander": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", + "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", "dev": true }, "common-tags": { @@ -9733,15 +9597,6 @@ "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", "dev": true }, - "css-declaration-sorter": { - "version": "6.1.4", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.1.4.tgz", - "integrity": "sha512-lpfkqS0fctcmZotJGhnxkIyJWvBXgpyi2wsFd4J8VB7wzyrT6Ch/3Q+FMNJpjK4gu1+GN5khOnpU2ZVKrLbhCw==", - "dev": true, - "requires": { - "timsort": "^0.3.0" - } - }, "css-select": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.2.1.tgz", @@ -9771,67 +9626,6 @@ "integrity": "sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw==", "dev": true }, - "cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "dev": true - }, - "cssnano": { - "version": "5.0.17", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.0.17.tgz", - "integrity": "sha512-fmjLP7k8kL18xSspeXTzRhaFtRI7DL9b8IcXR80JgtnWBpvAzHT7sCR/6qdn0tnxIaINUN6OEQu83wF57Gs3Xw==", - "dev": true, - "requires": { - "cssnano-preset-default": "^5.1.12", - "lilconfig": "^2.0.3", - "yaml": "^1.10.2" - } - }, - "cssnano-preset-default": { - "version": "5.1.12", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.1.12.tgz", - "integrity": "sha512-rO/JZYyjW1QNkWBxMGV28DW7d98UDLaF759frhli58QFehZ+D/LSmwQ2z/ylBAe2hUlsIWTq6NYGfQPq65EF9w==", - "dev": true, - "requires": { - "css-declaration-sorter": "^6.0.3", - "cssnano-utils": "^3.0.2", - "postcss-calc": "^8.2.0", - "postcss-colormin": "^5.2.5", - "postcss-convert-values": "^5.0.4", - "postcss-discard-comments": "^5.0.3", - "postcss-discard-duplicates": "^5.0.3", - "postcss-discard-empty": "^5.0.3", - "postcss-discard-overridden": "^5.0.4", - "postcss-merge-longhand": "^5.0.6", - "postcss-merge-rules": "^5.0.6", - "postcss-minify-font-values": "^5.0.4", - "postcss-minify-gradients": "^5.0.6", - "postcss-minify-params": "^5.0.5", - "postcss-minify-selectors": "^5.1.3", - "postcss-normalize-charset": "^5.0.3", - "postcss-normalize-display-values": "^5.0.3", - "postcss-normalize-positions": "^5.0.4", - "postcss-normalize-repeat-style": "^5.0.4", - "postcss-normalize-string": "^5.0.4", - "postcss-normalize-timing-functions": "^5.0.3", - "postcss-normalize-unicode": "^5.0.4", - "postcss-normalize-url": "^5.0.5", - "postcss-normalize-whitespace": "^5.0.4", - "postcss-ordered-values": "^5.0.5", - "postcss-reduce-initial": "^5.0.3", - "postcss-reduce-transforms": "^5.0.4", - "postcss-svgo": "^5.0.4", - "postcss-unique-selectors": "^5.0.4" - } - }, - "cssnano-utils": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.0.2.tgz", - "integrity": "sha512-KhprijuQv2sP4kT92sSQwhlK3SJTbDIsxcfIEySB0O+3m9esFOai7dP9bMx5enHAh2MwarVIcnwiWoOm01RIbQ==", - "dev": true, - "requires": {} - }, "csso": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", @@ -9842,9 +9636,9 @@ } }, "cypress": { - "version": "9.5.1", - "resolved": "https://registry.npmjs.org/cypress/-/cypress-9.5.1.tgz", - "integrity": "sha512-H7lUWB3Svr44gz1rNnj941xmdsCljXoJa2cDneAltjI9leKLMQLm30x6jLlpQ730tiVtIbW5HdUmBzPzwzfUQg==", + "version": "9.5.2", + "resolved": "https://registry.npmjs.org/cypress/-/cypress-9.5.2.tgz", + "integrity": "sha512-gYiQYvJozMzDOriUV1rCt6CeRM/pRK4nhwGJj3nJQyX2BoUdTCVwp30xDMKc771HiNVhBtgj5o5/iBdVDVXQUg==", "dev": true, "requires": { "@cypress/request": "^2.88.10", @@ -9891,12 +9685,6 @@ "yauzl": "^2.10.0" }, "dependencies": { - "commander": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", - "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", - "dev": true - }, "semver": { "version": "7.3.5", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", @@ -9939,15 +9727,15 @@ } }, "dayjs": { - "version": "1.10.7", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.10.7.tgz", - "integrity": "sha512-P6twpd70BcPK34K26uJ1KT3wlhpuOAPoMwJzpsIWUxHZ7wpmbdZL/hQqBDfz7hGurYSa5PhzdhDHtt319hL3ig==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.0.tgz", + "integrity": "sha512-JLC809s6Y948/FuCZPm5IX8rRhQwOiyMb2TfVVQEixG7P8Lm/gt5S7yoQZmC8x1UehI9Pb7sksEt4xx14m+7Ug==", "dev": true }, "debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, "requires": { "ms": "2.1.2" @@ -9974,6 +9762,12 @@ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, + "deepmerge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "dev": true + }, "defer-to-connect": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", @@ -10048,9 +9842,9 @@ "dev": true }, "domhandler": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.0.tgz", - "integrity": "sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", "dev": true, "requires": { "domelementtype": "^2.2.0" @@ -10105,9 +9899,9 @@ } }, "electron-to-chromium": { - "version": "1.4.68", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.68.tgz", - "integrity": "sha512-cId+QwWrV8R1UawO6b9BR1hnkJ4EJPCPAr4h315vliHUtVUJDk39Sg1PMNnaWKfj5x+93ssjeJ9LKL6r8LaMiA==", + "version": "1.4.96", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.96.tgz", + "integrity": "sha512-DPNjvNGPabv6FcyjzLAN4C0psN/GgD9rSGvMTuv81SeXG/EX3mCz0wiw9N1tUEnfQXYCJi3H8M0oFPRziZh7rw==", "dev": true }, "emoji-regex": { @@ -10190,12 +9984,12 @@ "dev": true }, "eslint": { - "version": "8.8.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.8.0.tgz", - "integrity": "sha512-H3KXAzQGBH1plhYS3okDix2ZthuYJlQQEGE5k0IKuEqUSiyu4AmxxlJ2MtTYeJ3xB4jDhcYCwGOg2TXYdnDXlQ==", + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.12.0.tgz", + "integrity": "sha512-it1oBL9alZg1S8UycLm5YDMAkIhtH6FtAzuZs6YvoGVldWjbS08BkAdb/ymP9LlAyq8koANu32U7Ib/w+UNh8Q==", "dev": true, "requires": { - "@eslint/eslintrc": "^1.0.5", + "@eslint/eslintrc": "^1.2.1", "@humanwhocodes/config-array": "^0.9.2", "ajv": "^6.10.0", "chalk": "^4.0.0", @@ -10203,10 +9997,10 @@ "debug": "^4.3.2", "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.1.0", + "eslint-scope": "^7.1.1", "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.2.0", - "espree": "^9.3.0", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.3.1", "esquery": "^1.4.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", @@ -10233,9 +10027,9 @@ } }, "eslint-scope": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.0.tgz", - "integrity": "sha512-aWwkhnS0qAXqNOgKOK0dJ2nvzEbhEvpy8OlJ9kZ0FeZnA6zpjv1/Vei+puGFFX7zkPCkHHXb7IDX3A+7yPrRWg==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", "dev": true, "requires": { "esrecurse": "^4.3.0", @@ -10260,20 +10054,20 @@ } }, "eslint-visitor-keys": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.2.0.tgz", - "integrity": "sha512-IOzT0X126zn7ALX0dwFiUQEdsfzrm4+ISsQS8nukaJXwEyYKRSnEIIDULYg1mCtGp7UUXgfGl7BIolXREQK+XQ==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", "dev": true }, "espree": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.0.tgz", - "integrity": "sha512-d/5nCsb0JcqsSEeQzFZ8DH1RmxPcglRWh24EFTlUEmCKoehXGdpsx0RkHDubqUI8LSAIKMQp4r9SzQ3n+sm4HQ==", + "version": "9.3.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.1.tgz", + "integrity": "sha512-bvdyLmJMfwkV3NCRl5ZhJf22zBFo1y8bYh3VYb+bfzqNB4Je68P2sSuXyuFquzWLebHpNd2/d5uv7yoP9ISnGQ==", "dev": true, "requires": { "acorn": "^8.7.0", "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^3.1.0" + "eslint-visitor-keys": "^3.3.0" } }, "esquery": { @@ -10570,12 +10364,11 @@ "dev": true }, "gauge": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.2.tgz", - "integrity": "sha512-aSPRm2CvA9R8QyU5eXMFPd+cYkyxLsXHd2l5/FOH2V/eml//M04G6KZOmTap07O1PvEwNcl2NndyLfK8g3QrKA==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.3.tgz", + "integrity": "sha512-ICw1DhAwMtb22rYFwEHgJcx1JCwJGv3x6G0OQUq56Nge+H4Q8JEwr8iveS0XFlsUNSI67F5ffMGK25bK4Pmskw==", "dev": true, "requires": { - "ansi-regex": "^5.0.1", "aproba": "^1.0.3 || ^2.0.0", "color-support": "^1.1.3", "console-control-strings": "^1.1.0", @@ -10658,9 +10451,9 @@ } }, "globals": { - "version": "13.12.1", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.1.tgz", - "integrity": "sha512-317dFlgY2pdJZ9rspXDks7073GpDmXdfbM3vYYp0HAMKGDh1FfWPleI2ljVNLQX5M5lXcAslTcPTrOrMEFOjyw==", + "version": "13.13.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.13.0.tgz", + "integrity": "sha512-EQ7Q18AJlPwp3vUDL4mKA0KXrXyNIQyWon6T6XQiBQF0XHvRsiCSrWmmeATpUzdJN2HhWZU6Pdl0a9zdep5p6A==", "dev": true, "requires": { "type-fest": "^0.20.2" @@ -10757,6 +10550,56 @@ "lru-cache": "^6.0.0" } }, + "html-validate": { + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/html-validate/-/html-validate-6.6.1.tgz", + "integrity": "sha512-8XG1GeLJoWARdq7wASWb3ZGnWHjo1EnLEdthDvr8aPsQQPICkNfaMqyBVflTm0hvp0y6GLpPegarOQLxEQWg9g==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.10.0", + "@html-validate/stylish": "^2.0.0", + "@sidvind/better-ajv-errors": "^1.1.1", + "acorn-walk": "^8.0.0", + "ajv": "^8.0.0", + "deepmerge": "^4.2.0", + "espree": "^9.0.0", + "glob": "^7.1.0", + "ignore": "^5.0.0", + "kleur": "^4.1.0", + "minimist": "^1.2.0", + "prompts": "^2.0.0", + "semver": "^7.0.0" + }, + "dependencies": { + "ajv": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, "htmlnano": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/htmlnano/-/htmlnano-2.0.0.tgz", @@ -11080,9 +10923,9 @@ "integrity": "sha512-JVzAR/AjBvVt2BmYhxRCSYysDsPcssdmTFnzyLEts9qNwmjmu4JTAMYubEfwVOSwpQ1I1sKKFcxhZCI2buerfw==" }, "jquery-migrate": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/jquery-migrate/-/jquery-migrate-3.3.2.tgz", - "integrity": "sha512-L3gYhr7yEtLUSAeqXSicVa0vRD4aGwjw/bWY8YzrO2o/qDY1BaMyP3oB3bZf5Auy3Hu9ynliio0CTyDWCBPVDw==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/jquery-migrate/-/jquery-migrate-3.4.0.tgz", + "integrity": "sha512-K0W02EhZyqjVpyF5pdi+t238cIfQACzMsXiX4AEfEOxPPfiZZFzf3brtFY21FOOEPiWZF4mH04TXHDE6e2YDyg==", "dev": true, "requires": {} }, @@ -11172,13 +11015,10 @@ "dev": true }, "json5": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", - "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", + "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", + "dev": true }, "jsonfile": { "version": "6.1.0", @@ -11224,9 +11064,9 @@ } }, "kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.4.tgz", + "integrity": "sha512-8QADVssbrFjivHWQU7KkMgptGTl6WAcSdlbBPY4uNF+mWr6DGcKrvY2w4FQJoXch7+fKMjj0dRrL75vk3k23OA==", "dev": true }, "latest-version": { @@ -11316,12 +11156,6 @@ } } }, - "lilconfig": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.4.tgz", - "integrity": "sha512-bfTIN7lEsiooCocSISTWXkiWJkRqtL9wYtYy+8EK3Y41qh3mpwPU0ycTOgjdY9ErwXCc8QyrQp82bdL0Xkm9yA==", - "dev": true - }, "lines-and-columns": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", @@ -11353,9 +11187,9 @@ } }, "lmdb": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/lmdb/-/lmdb-2.2.1.tgz", - "integrity": "sha512-tUlIjyJvbd4mqdotI9Xe+3PZt/jqPx70VKFDrKMYu09MtBWOT3y2PbuTajX+bJFDjbgLkQC0cTx2n6dithp/zQ==", + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/lmdb/-/lmdb-2.2.4.tgz", + "integrity": "sha512-gto+BB2uEob8qRiTlOq+R3uX0YNHsX9mjxj9Sbdue/LIKqu6IlZjrsjKeGyOMquc/474GEqFyX2pdytpydp0rQ==", "dev": true, "requires": { "msgpackr": "^1.5.4", @@ -11380,12 +11214,6 @@ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, - "lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", - "dev": true - }, "lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", @@ -11398,12 +11226,6 @@ "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=", "dev": true }, - "lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", - "dev": true - }, "log-symbols": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", @@ -11483,21 +11305,21 @@ } }, "make-fetch-happen": { - "version": "10.0.5", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.0.5.tgz", - "integrity": "sha512-0JQ0daMRDFEv14DelmcFlprdhSDNG7WEgInTjBeWYWZ78W0jfDqygZdPLhcrQ4s/G8skNhBrS4fiF6xA+YlFjQ==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.1.0.tgz", + "integrity": "sha512-HeP4QlkadP/Op+hE+Une1070kcyN85FshQObku3/rmzRh4zDcKXA19d2L3AQR6UoaX3uZmhSOpTLH15b1vOFvQ==", "dev": true, "requires": { "agentkeepalive": "^4.2.1", - "cacache": "^15.3.0", + "cacache": "^16.0.2", "http-cache-semantics": "^4.1.0", "http-proxy-agent": "^5.0.0", "https-proxy-agent": "^5.0.0", "is-lambda": "^1.0.1", - "lru-cache": "^7.4.1", + "lru-cache": "^7.7.1", "minipass": "^3.1.6", "minipass-collect": "^1.0.2", - "minipass-fetch": "^2.0.2", + "minipass-fetch": "^2.0.3", "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", "negotiator": "^0.6.3", @@ -11507,9 +11329,9 @@ }, "dependencies": { "lru-cache": { - "version": "7.4.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.4.2.tgz", - "integrity": "sha512-Xs3+hFPDSKQmL05Gs6NhvAADol1u9TmLoNoE03ZjszX6a5iYIO3rPUM4jIjoBUJeTaWEBMozjjmV70gvdRfIdw==", + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.7.1.tgz", + "integrity": "sha512-cRffBiTW8s73eH4aTXqBcTLU0xQnwGV3/imttRHGWCrbergmnK4D6JXQd8qin5z43HnDwRI+o7mVW0LEB+tpAw==", "dev": true } } @@ -11533,28 +11355,28 @@ "dev": true }, "micromatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", - "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", "dev": true, "requires": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" + "braces": "^3.0.2", + "picomatch": "^2.3.1" } }, "mime-db": { - "version": "1.51.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", - "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==", + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", "dev": true }, "mime-types": { - "version": "2.1.34", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", - "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "dev": true, "requires": { - "mime-db": "1.51.0" + "mime-db": "1.52.0" } }, "mimic-fn": { @@ -11570,18 +11392,18 @@ "dev": true }, "minimatch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "requires": { "brace-expansion": "^1.1.7" } }, "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", "dev": true }, "minipass": { @@ -11603,9 +11425,9 @@ } }, "minipass-fetch": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.0.3.tgz", - "integrity": "sha512-VA+eiiUtaIvpQJXISwE3OiMvQwAWrgKb97F0aXlCS1Ahikr8fEQq8m3Hf7Kv9KT3nokuHigJKsDMB6atU04olQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.0.tgz", + "integrity": "sha512-H9U4UVBGXEyyWJnqYDCLp1PwD8XIkJ4akNHp1aGVI+2Ym7wQMlxDKi4IB4JbmyU+pl9pEs/cVrK6cOuvmbK4Sg==", "dev": true, "requires": { "encoding": "^0.1.13", @@ -11687,9 +11509,9 @@ "dev": true }, "msgpackr": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/msgpackr/-/msgpackr-1.5.4.tgz", - "integrity": "sha512-Z7w5Jg+2Q9z9gJxeM68d7tSuWZZGnFIRhZnyqcZCa/1dKkhOCNvR1TUV3zzJ3+vj78vlwKRzUgVDlW4jiSOeDA==", + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/msgpackr/-/msgpackr-1.5.5.tgz", + "integrity": "sha512-JG0V47xRIQ9pyUnx6Hb4+3TrQoia2nA3UIdmyTldhxaxtKFkekkKpUW/N6fwHwod9o4BGuJGtouxOk+yCP5PEA==", "dev": true, "requires": { "msgpackr-extract": "^1.0.14" @@ -11712,12 +11534,6 @@ "integrity": "sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==", "dev": true }, - "nanoid": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.2.0.tgz", - "integrity": "sha512-fmsZYa9lpn69Ad5eDn7FMcnnSR+8R34W9qJEijxYhTbfOWzr22n1QxCMzXLK+ODyW2973V3Fux959iQoUxzUIA==", - "dev": true - }, "natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -11787,17 +11603,34 @@ } }, "normalize-package-data": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", - "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-4.0.0.tgz", + "integrity": "sha512-m+GL22VXJKkKbw62ZaBBjv8u6IE3UI4Mh5QakIqs3fWiKe0Xyi6L97hakwZK41/LD4R/2ly71Bayx0NLMwLA/g==", "dev": true, "requires": { - "hosted-git-info": "^4.0.1", - "is-core-module": "^2.5.0", - "semver": "^7.3.4", - "validate-npm-package-license": "^3.0.1" + "hosted-git-info": "^5.0.0", + "is-core-module": "^2.8.1", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" }, "dependencies": { + "hosted-git-info": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.0.0.tgz", + "integrity": "sha512-rRnjWu0Bxj+nIfUOkz0695C0H6tRrN5iYIzYejb0tDEefe2AekHu/U5Kn9pEie5vsJqpNQU02az7TGSH3qpz4Q==", + "dev": true, + "requires": { + "lru-cache": "^7.5.1" + }, + "dependencies": { + "lru-cache": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.7.1.tgz", + "integrity": "sha512-cRffBiTW8s73eH4aTXqBcTLU0xQnwGV3/imttRHGWCrbergmnK4D6JXQd8qin5z43HnDwRI+o7mVW0LEB+tpAw==", + "dev": true + } + } + }, "semver": { "version": "7.3.5", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", @@ -11816,9 +11649,9 @@ "dev": true }, "normalize-url": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", + "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", "dev": true }, "npm-bundled": { @@ -11831,9 +11664,9 @@ } }, "npm-check-updates": { - "version": "12.5.2", - "resolved": "https://registry.npmjs.org/npm-check-updates/-/npm-check-updates-12.5.2.tgz", - "integrity": "sha512-XJGFO3kgcm+WJljOPRYZf/W40FSzEcLDacQ1WPEgW4qXlQy4Ihr1eVnlS2+43y0YEF+qjLkycr7WbHyfkm6C4A==", + "version": "12.5.4", + "resolved": "https://registry.npmjs.org/npm-check-updates/-/npm-check-updates-12.5.4.tgz", + "integrity": "sha512-4+27zaTdieWgvPLaCZ/A6Q2WC1cYVcrc2SqVmLFYgkWBrKw1QkwpeV16FSvkFGZr3OdFyr7Dpjw8JRn4H2QxFw==", "dev": true, "requires": { "chalk": "^4.1.2", @@ -11877,9 +11710,9 @@ } }, "commander": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-9.0.0.tgz", - "integrity": "sha512-JJfP2saEKbQqvW+FI93OYUB4ByV5cizMpFMiiJI8xDbBvQvSkIk0VvQdn1CZ8mqAO8Loq2h0gYTYtDFUZUeERw==", + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.1.0.tgz", + "integrity": "sha512-i0/MaqBtdbnJ4XQs4Pmyb+oFQl+q0lsAmokVUH92SlSw4fkeAcG3bVon+Qt7hmtF+u3Het6o4VgrcY3qAoEB6w==", "dev": true }, "minimatch": { @@ -11929,16 +11762,33 @@ "dev": true }, "npm-package-arg": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.0.0.tgz", - "integrity": "sha512-yhzXxeor+Zfhe5MGwPdDumz6HtNlj2pMekWB95IX3CC6uDNgde0oPKHDCLDPoJqQfd0HqAWt+y4Hs5m7CK1+9Q==", + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.0.1.tgz", + "integrity": "sha512-Xs9wznfEAmZAR61qsYH3iN24V/qMYYkvAR5CRQNMvC6PjN2fHtO8y9XP/xdp5K+Icx+u1wMBMgWRPCmAEChSog==", "dev": true, "requires": { - "hosted-git-info": "^4.1.0", + "hosted-git-info": "^5.0.0", "semver": "^7.3.5", "validate-npm-package-name": "^3.0.0" }, "dependencies": { + "hosted-git-info": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.0.0.tgz", + "integrity": "sha512-rRnjWu0Bxj+nIfUOkz0695C0H6tRrN5iYIzYejb0tDEefe2AekHu/U5Kn9pEie5vsJqpNQU02az7TGSH3qpz4Q==", + "dev": true, + "requires": { + "lru-cache": "^7.5.1" + }, + "dependencies": { + "lru-cache": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.7.1.tgz", + "integrity": "sha512-cRffBiTW8s73eH4aTXqBcTLU0xQnwGV3/imttRHGWCrbergmnK4D6JXQd8qin5z43HnDwRI+o7mVW0LEB+tpAw==", + "dev": true + } + } + }, "semver": { "version": "7.3.5", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", @@ -11951,14 +11801,14 @@ } }, "npm-packlist": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-3.0.0.tgz", - "integrity": "sha512-L/cbzmutAwII5glUcf2DBRNY/d0TFd4e/FnaZigJV6JD85RHZXJFGwCndjMWiiViiWSsWt3tiOLpI3ByTnIdFQ==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-4.0.0.tgz", + "integrity": "sha512-gL6XC/iw9YSmqArmZOGSkyy+yIZf2f7uH0p4Vmxef/irn73vd9/rDkCtvm+a9rh/QK2xGYfCAMOghM06ymzC0A==", "dev": true, "requires": { - "glob": "^7.1.6", + "glob": "^7.2.0", "ignore-walk": "^4.0.1", - "npm-bundled": "^1.1.1", + "npm-bundled": "^1.1.2", "npm-normalize-package-bin": "^1.0.1" } }, @@ -11986,17 +11836,17 @@ } }, "npm-registry-fetch": { - "version": "13.0.1", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-13.0.1.tgz", - "integrity": "sha512-Ak+LXVtSrCLOdscFW/apUw67OPNph8waHsPKM9UOJosL7i59EF5XoSWQMEsXEOeifM9Bb4/2+WrQC4t/pd8DGg==", + "version": "13.1.0", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-13.1.0.tgz", + "integrity": "sha512-TIYL5X8CcwDhbFMXFDShNcpG6OMCYK6VzvSr6MUWP20tCU2DJ4ao2qQg3DT+3Pet8mO6/cgbZpon4LMh3duYLg==", "dev": true, "requires": { - "make-fetch-happen": "^10.0.3", + "make-fetch-happen": "^10.0.6", "minipass": "^3.1.6", - "minipass-fetch": "^2.0.1", + "minipass-fetch": "^2.0.3", "minipass-json-stream": "^1.0.1", "minizlib": "^2.1.2", - "npm-package-arg": "^9.0.0", + "npm-package-arg": "^9.0.1", "proc-log": "^2.0.0" } }, @@ -12140,28 +11990,28 @@ } }, "pacote": { - "version": "13.0.3", - "resolved": "https://registry.npmjs.org/pacote/-/pacote-13.0.3.tgz", - "integrity": "sha512-8thQ06YoO01O1k5rvSpHS/XPJZucw2DPiiT1jI+ys8QaTN6ifAyxfyoABHBa8nIt/4wPdzly4GEPqshctHFoYA==", + "version": "13.0.5", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-13.0.5.tgz", + "integrity": "sha512-6CYfot3/rUAn3qqzF2d/jrrXm5HlBtvaSgfmg0VtOUAdJ8fbSq21BJwftMGArkL71yXHIbUJ7Bt5B04547HELA==", "dev": true, "requires": { "@npmcli/git": "^3.0.0", "@npmcli/installed-package-contents": "^1.0.7", "@npmcli/promise-spawn": "^1.2.0", - "@npmcli/run-script": "^3.0.0", - "cacache": "^15.3.0", + "@npmcli/run-script": "^3.0.1", + "cacache": "^16.0.0", "chownr": "^2.0.0", "fs-minipass": "^2.1.0", "infer-owner": "^1.0.4", "minipass": "^3.1.6", "mkdirp": "^1.0.4", "npm-package-arg": "^9.0.0", - "npm-packlist": "^3.0.0", + "npm-packlist": "^4.0.0", "npm-pick-manifest": "^7.0.0", - "npm-registry-fetch": "^13.0.0", + "npm-registry-fetch": "^13.0.1", "proc-log": "^2.0.0", "promise-retry": "^2.0.1", - "read-package-json": "^4.1.1", + "read-package-json": "^5.0.0", "read-package-json-fast": "^2.0.3", "rimraf": "^3.0.2", "ssri": "^8.0.1", @@ -12169,25 +12019,33 @@ } }, "parcel": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/parcel/-/parcel-2.3.1.tgz", - "integrity": "sha512-YDzKpWcO1tEqk7ENPTitE8zbDfYDjo7nsoT7Oun+7eZadwsiNds1+mbhCO0exGq4SJekto+dkMdrLMcbOWJznQ==", - "dev": true, - "requires": { - "@parcel/config-default": "2.3.1", - "@parcel/core": "2.3.1", - "@parcel/diagnostic": "2.3.1", - "@parcel/events": "2.3.1", - "@parcel/fs": "2.3.1", - "@parcel/logger": "2.3.1", - "@parcel/package-manager": "2.3.1", - "@parcel/reporter-cli": "2.3.1", - "@parcel/reporter-dev-server": "2.3.1", - "@parcel/utils": "2.3.1", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/parcel/-/parcel-2.4.0.tgz", + "integrity": "sha512-dPWpu4RnxG9HqiLvaF8COEWEnT/KrigrC6PyPaQ0zEgpBfp7/jzXZFBVaZk2N+lpvrbNEYMjN9bv5UQGJJszIw==", + "dev": true, + "requires": { + "@parcel/config-default": "2.4.0", + "@parcel/core": "2.4.0", + "@parcel/diagnostic": "2.4.0", + "@parcel/events": "2.4.0", + "@parcel/fs": "2.4.0", + "@parcel/logger": "2.4.0", + "@parcel/package-manager": "2.4.0", + "@parcel/reporter-cli": "2.4.0", + "@parcel/reporter-dev-server": "2.4.0", + "@parcel/utils": "2.4.0", "chalk": "^4.1.0", "commander": "^7.0.0", "get-port": "^4.2.0", "v8-compile-cache": "^2.0.0" + }, + "dependencies": { + "commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "dev": true + } } }, "parent-module": { @@ -12271,277 +12129,6 @@ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", "dev": true }, - "postcss": { - "version": "8.4.6", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.6.tgz", - "integrity": "sha512-OovjwIzs9Te46vlEx7+uXB0PLijpwjXGKXjVGGPIGubGpq7uh5Xgf6D6FiJ/SzJMBosHDp6a2hiXOS97iBXcaA==", - "dev": true, - "requires": { - "nanoid": "^3.2.0", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - } - }, - "postcss-calc": { - "version": "8.2.4", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz", - "integrity": "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==", - "dev": true, - "requires": { - "postcss-selector-parser": "^6.0.9", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-colormin": { - "version": "5.2.5", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.2.5.tgz", - "integrity": "sha512-+X30aDaGYq81mFqwyPpnYInsZQnNpdxMX0ajlY7AExCexEFkPVV+KrO7kXwayqEWL2xwEbNQ4nUO0ZsRWGnevg==", - "dev": true, - "requires": { - "browserslist": "^4.16.6", - "caniuse-api": "^3.0.0", - "colord": "^2.9.1", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-convert-values": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.0.4.tgz", - "integrity": "sha512-bugzSAyjIexdObovsPZu/sBCTHccImJxLyFgeV0MmNBm/Lw5h5XnjfML6gzEmJ3A6nyfCW7hb1JXzcsA4Zfbdw==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-discard-comments": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.0.3.tgz", - "integrity": "sha512-6W5BemziRoqIdAKT+1QjM4bNcJAQ7z7zk073730NHg4cUXh3/rQHHj7pmYxUB9aGhuRhBiUf0pXvIHkRwhQP0Q==", - "dev": true, - "requires": {} - }, - "postcss-discard-duplicates": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.0.3.tgz", - "integrity": "sha512-vPtm1Mf+kp7iAENTG7jI1MN1lk+fBqL5y+qxyi4v3H+lzsXEdfS3dwUZD45KVhgzDEgduur8ycB4hMegyMTeRw==", - "dev": true, - "requires": {} - }, - "postcss-discard-empty": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.0.3.tgz", - "integrity": "sha512-xGJugpaXKakwKI7sSdZjUuN4V3zSzb2Y0LOlmTajFbNinEjTfVs9PFW2lmKBaC/E64WwYppfqLD03P8l9BuueA==", - "dev": true, - "requires": {} - }, - "postcss-discard-overridden": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.0.4.tgz", - "integrity": "sha512-3j9QH0Qh1KkdxwiZOW82cId7zdwXVQv/gRXYDnwx5pBtR1sTkU4cXRK9lp5dSdiM0r0OICO/L8J6sV1/7m0kHg==", - "dev": true, - "requires": {} - }, - "postcss-merge-longhand": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.0.6.tgz", - "integrity": "sha512-rkmoPwQO6ymJSmWsX6l2hHeEBQa7C4kJb9jyi5fZB1sE8nSCv7sqchoYPixRwX/yvLoZP2y6FA5kcjiByeJqDg==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0", - "stylehacks": "^5.0.3" - } - }, - "postcss-merge-rules": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.0.6.tgz", - "integrity": "sha512-nzJWJ9yXWp8AOEpn/HFAW72WKVGD2bsLiAmgw4hDchSij27bt6TF+sIK0cJUBAYT3SGcjtGGsOR89bwkkMuMgQ==", - "dev": true, - "requires": { - "browserslist": "^4.16.6", - "caniuse-api": "^3.0.0", - "cssnano-utils": "^3.0.2", - "postcss-selector-parser": "^6.0.5" - } - }, - "postcss-minify-font-values": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.0.4.tgz", - "integrity": "sha512-RN6q3tyuEesvyCYYFCRGJ41J1XFvgV+dvYGHr0CeHv8F00yILlN8Slf4t8XW4IghlfZYCeyRrANO6HpJ948ieA==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-minify-gradients": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.0.6.tgz", - "integrity": "sha512-E/dT6oVxB9nLGUTiY/rG5dX9taugv9cbLNTFad3dKxOO+BQg25Q/xo2z2ddG+ZB1CbkZYaVwx5blY8VC7R/43A==", - "dev": true, - "requires": { - "colord": "^2.9.1", - "cssnano-utils": "^3.0.2", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-minify-params": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.0.5.tgz", - "integrity": "sha512-YBNuq3Rz5LfLFNHb9wrvm6t859b8qIqfXsWeK7wROm3jSKNpO1Y5e8cOyBv6Acji15TgSrAwb3JkVNCqNyLvBg==", - "dev": true, - "requires": { - "browserslist": "^4.16.6", - "cssnano-utils": "^3.0.2", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-minify-selectors": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.1.3.tgz", - "integrity": "sha512-9RJfTiQEKA/kZhMaEXND893nBqmYQ8qYa/G+uPdVnXF6D/FzpfI6kwBtWEcHx5FqDbA79O9n6fQJfrIj6M8jvQ==", - "dev": true, - "requires": { - "postcss-selector-parser": "^6.0.5" - } - }, - "postcss-normalize-charset": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.0.3.tgz", - "integrity": "sha512-iKEplDBco9EfH7sx4ut7R2r/dwTnUqyfACf62Unc9UiyFuI7uUqZZtY+u+qp7g8Qszl/U28HIfcsI3pEABWFfA==", - "dev": true, - "requires": {} - }, - "postcss-normalize-display-values": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.0.3.tgz", - "integrity": "sha512-FIV5FY/qs4Ja32jiDb5mVj5iWBlS3N8tFcw2yg98+8MkRgyhtnBgSC0lxU+16AMHbjX5fbSJgw5AXLMolonuRQ==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-normalize-positions": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.0.4.tgz", - "integrity": "sha512-qynirjBX0Lc73ROomZE3lzzmXXTu48/QiEzKgMeqh28+MfuHLsuqC9po4kj84igZqqFGovz8F8hf44hA3dPYmQ==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-normalize-repeat-style": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.0.4.tgz", - "integrity": "sha512-Innt+wctD7YpfeDR7r5Ik6krdyppyAg2HBRpX88fo5AYzC1Ut/l3xaxACG0KsbX49cO2n5EB13clPwuYVt8cMA==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-normalize-string": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.0.4.tgz", - "integrity": "sha512-Dfk42l0+A1CDnVpgE606ENvdmksttLynEqTQf5FL3XGQOyqxjbo25+pglCUvziicTxjtI2NLUR6KkxyUWEVubQ==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-normalize-timing-functions": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.0.3.tgz", - "integrity": "sha512-QRfjvFh11moN4PYnJ7hia4uJXeFotyK3t2jjg8lM9mswleGsNw2Lm3I5wO+l4k1FzK96EFwEVn8X8Ojrp2gP4g==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-normalize-unicode": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.0.4.tgz", - "integrity": "sha512-W79Regn+a+eXTzB+oV/8XJ33s3pDyFTND2yDuUCo0Xa3QSy1HtNIfRVPXNubHxjhlqmMFADr3FSCHT84ITW3ig==", - "dev": true, - "requires": { - "browserslist": "^4.16.6", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-normalize-url": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.0.5.tgz", - "integrity": "sha512-Ws3tX+PcekYlXh+ycAt0wyzqGthkvVtZ9SZLutMVvHARxcpu4o7vvXcNoiNKyjKuWecnjS6HDI3fjBuDr5MQxQ==", - "dev": true, - "requires": { - "normalize-url": "^6.0.1", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-normalize-whitespace": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.0.4.tgz", - "integrity": "sha512-wsnuHolYZjMwWZJoTC9jeI2AcjA67v4UuidDrPN9RnX8KIZfE+r2Nd6XZRwHVwUiHmRvKQtxiqo64K+h8/imaw==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-ordered-values": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.0.5.tgz", - "integrity": "sha512-mfY7lXpq+8bDEHfP+muqibDPhZ5eP9zgBEF9XRvoQgXcQe2Db3G1wcvjbnfjXG6wYsl+0UIjikqq4ym1V2jGMQ==", - "dev": true, - "requires": { - "cssnano-utils": "^3.0.2", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-reduce-initial": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.0.3.tgz", - "integrity": "sha512-c88TkSnQ/Dnwgb4OZbKPOBbCaauwEjbECP5uAuFPOzQ+XdjNjRH7SG0dteXrpp1LlIFEKK76iUGgmw2V0xeieA==", - "dev": true, - "requires": { - "browserslist": "^4.16.6", - "caniuse-api": "^3.0.0" - } - }, - "postcss-reduce-transforms": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.0.4.tgz", - "integrity": "sha512-VIJB9SFSaL8B/B7AXb7KHL6/GNNbbCHslgdzS9UDfBZYIA2nx8NLY7iD/BXFSO/1sRUILzBTfHCoW5inP37C5g==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-selector-parser": { - "version": "6.0.9", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.9.tgz", - "integrity": "sha512-UO3SgnZOVTwu4kyLR22UQ1xZh086RyNZppb7lLAKBFK8a32ttG5i87Y/P3+2bRSjZNyJ1B7hfFNo273tKe9YxQ==", - "dev": true, - "requires": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - } - }, - "postcss-svgo": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.0.4.tgz", - "integrity": "sha512-yDKHvULbnZtIrRqhZoA+rxreWpee28JSRH/gy9727u0UCgtpv1M/9WEWY3xySlFa0zQJcqf6oCBJPR5NwkmYpg==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0", - "svgo": "^2.7.0" - } - }, - "postcss-unique-selectors": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.0.4.tgz", - "integrity": "sha512-5ampwoSDJCxDPoANBIlMgoBcYUHnhaiuLYJR5pj1DLnYQvMRVyFuTA5C3Bvt+aHtiqWpJkD/lXT50Vo1D0ZsAQ==", - "dev": true, - "requires": { - "postcss-selector-parser": "^6.0.5" - } - }, "postcss-value-parser": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", @@ -12549,13 +12136,24 @@ "dev": true }, "posthtml": { - "version": "0.16.5", - "resolved": "https://registry.npmjs.org/posthtml/-/posthtml-0.16.5.tgz", - "integrity": "sha512-1qOuPsywVlvymhTFIBniDXwUDwvlDri5KUQuBqjmCc8Jj4b/HDSVWU//P6rTWke5rzrk+vj7mms2w8e1vD0nnw==", + "version": "0.16.6", + "resolved": "https://registry.npmjs.org/posthtml/-/posthtml-0.16.6.tgz", + "integrity": "sha512-JcEmHlyLK/o0uGAlj65vgg+7LIms0xKXe60lcDOTU7oVX/3LuEuLwrQpW3VJ7de5TaFKiW4kWkaIpJL42FEgxQ==", "dev": true, "requires": { - "posthtml-parser": "^0.10.0", + "posthtml-parser": "^0.11.0", "posthtml-render": "^3.0.0" + }, + "dependencies": { + "posthtml-parser": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/posthtml-parser/-/posthtml-parser-0.11.0.tgz", + "integrity": "sha512-QecJtfLekJbWVo/dMAA+OSwY79wpRmbqS5TeXvXSX+f0c6pW4/SE6inzZ2qkU7oAMCPqIDkZDvd/bQsSFUnKyw==", + "dev": true, + "requires": { + "htmlparser2": "^7.1.1" + } + } } }, "posthtml-parser": { @@ -12577,9 +12175,9 @@ } }, "preact": { - "version": "10.6.5", - "resolved": "https://registry.npmjs.org/preact/-/preact-10.6.5.tgz", - "integrity": "sha512-i+LXM6JiVjQXSt2jG2vZZFapGpCuk1fl8o6ii3G84MA3xgj686FKjs4JFDkmUVhtxyq21+4ay74zqPykz9hU6w==" + "version": "10.6.6", + "resolved": "https://registry.npmjs.org/preact/-/preact-10.6.6.tgz", + "integrity": "sha512-dgxpTFV2vs4vizwKohYKkk7g7rmp1wOOcfd4Tz3IB3Wi+ivZzsn/SpeKJhRENSE+n8sUfsAl4S3HiCVT923ABw==" }, "prelude-ls": { "version": "1.2.1", @@ -12635,6 +12233,14 @@ "requires": { "kleur": "^3.0.3", "sisteransi": "^1.0.5" + }, + "dependencies": { + "kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "dev": true + } } }, "proxy-from-env": { @@ -12731,15 +12337,15 @@ "dev": true }, "read-package-json": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-4.1.2.tgz", - "integrity": "sha512-Dqer4pqzamDE2O4M55xp1qZMuLPqi4ldk2ya648FOMHRjwMzFhuxVrG04wd0c38IsvkVdr3vgHI6z+QTPdAjrQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-5.0.0.tgz", + "integrity": "sha512-1cjk2MV5ONDMn34uxSID3X8NY7VKsXfJnjbcVdFMvHEnJOBzU6MJ7/3yg6QFVZDq5/1yFNrKBUK9kGnonyGP2Q==", "dev": true, "requires": { - "glob": "^7.1.1", - "json-parse-even-better-errors": "^2.3.0", - "normalize-package-data": "^3.0.0", - "npm-normalize-package-bin": "^1.0.0" + "glob": "^7.2.0", + "json-parse-even-better-errors": "^2.3.1", + "normalize-package-data": "^4.0.0", + "npm-normalize-package-bin": "^1.0.1" } }, "read-package-json-fast": { @@ -12885,9 +12491,9 @@ } }, "rxjs": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.4.tgz", - "integrity": "sha512-h5M3Hk78r6wAheJF0a5YahB1yRQKCsZ4MsGdZ5O9ETbVtjPcScGfrMmoOq7EBsCRzd4BDkvDJ7ogP8Sz5tTFiQ==", + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.5.tgz", + "integrity": "sha512-sy+H0pQofO95VDmFLzyaw9xNJU4KTRSwQIGM6+iG3SypAtCiLDzpeG8sJrNCWn2Up9km+KhkvTdbkrdy+yzZdw==", "dev": true, "requires": { "tslib": "^2.1.0" @@ -12906,9 +12512,9 @@ "dev": true }, "sass": { - "version": "1.49.7", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.49.7.tgz", - "integrity": "sha512-13dml55EMIR2rS4d/RDHHP0sXMY3+30e1TKsyXaSz3iLWVoDWEoboY8WzJd5JMnxrRHffKO3wq2mpJ0jxRJiEQ==", + "version": "1.49.9", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.49.9.tgz", + "integrity": "sha512-YlYWkkHP9fbwaFRZQRXgDi3mXZShslVmmo+FVK3kHLUELHHEYrCmL1x6IUjC7wLS6VuJSAFXRQS/DxdsC4xL1A==", "dev": true, "requires": { "chokidar": ">=3.0.0 <4.0.0", @@ -13036,9 +12642,9 @@ } }, "sortablejs": { - "version": "1.14.0", - "resolved": "https://registry.npmjs.org/sortablejs/-/sortablejs-1.14.0.tgz", - "integrity": "sha512-pBXvQCs5/33fdN1/39pPL0NZF20LeRbLQ5jtnheIPN9JQAaufGjKdWduZn4U7wCtVuzKhmRkI0DFYHYRbB2H1w==" + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/sortablejs/-/sortablejs-1.15.0.tgz", + "integrity": "sha512-bv9qgVMjUMf89wAvM6AxVvS/4MX3sPeN0+agqShejLU5z5GX4C75ow1O2e5k4L6XItUyAK3gH6AxSbXrOM5e8w==" }, "source-map": { "version": "0.6.1", @@ -13178,16 +12784,6 @@ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true }, - "stylehacks": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.0.3.tgz", - "integrity": "sha512-ENcUdpf4yO0E1rubu8rkxI+JGQk4CgjchynZ4bDBJDfqdy+uhTRSWb8/F3Jtu+Bw5MW45Po3/aQGeIyyxgQtxg==", - "dev": true, - "requires": { - "browserslist": "^4.16.6", - "postcss-selector-parser": "^6.0.4" - } - }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -13210,6 +12806,14 @@ "csso": "^4.2.0", "picocolors": "^1.0.0", "stable": "^0.1.8" + }, + "dependencies": { + "commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "dev": true + } } }, "tar": { @@ -13226,12 +12830,19 @@ "yallist": "^4.0.0" } }, + "term-size": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.1.tgz", + "integrity": "sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==", + "dev": true + }, "terser": { - "version": "5.10.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.10.0.tgz", - "integrity": "sha512-AMmF99DMfEDiRJfxfY5jj5wNH/bYO09cniSqhfoyxc8sFoYIgkJy86G04UoZU5VjlpnplVu0K6Tx6E9b5+DlHA==", + "version": "5.12.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.12.1.tgz", + "integrity": "sha512-NXbs+7nisos5E+yXwAD+y7zrcTkMqb0dEJxIGtSKPdCBzopf7ni4odPul2aechpV7EXNvOudYOX2bb5tln1jbQ==", "dev": true, "requires": { + "acorn": "^8.5.0", "commander": "^2.20.0", "source-map": "~0.7.2", "source-map-support": "~0.5.20" diff --git a/package.json b/package.json index 7591245b8cb..526d8a73574 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,7 @@ "bootstrap": "^5.1.3", "bootstrap-datepicker": "uxsolutions/bootstrap-datepicker", "bootstrap-icons": "^1.7.0", - "caniuse-lite": "1.0.30001314", + "caniuse-lite": "^1.0.30001314", "d3": "^3.5.17", "flot": "^4.2.2", "highcharts": "^9.3.1", @@ -24,11 +24,12 @@ "devDependencies": { "@parcel/transformer-sass": "^2.0.1", "browserlist": "latest", - "cypress": "9.5.1", - "cypress-real-events": "1.7.0", + "cypress": "^9.5.1", + "cypress-real-events": "^1.7.0", "eslint": "^8.2.0", + "html-validate": "^6.6.1", "jquery-migrate": "^3.3.2", - "npm-check-updates": "12.5.2", + "npm-check-updates": "^12.5.2", "parcel": "^2.0.0" }, "targets": { @@ -156,4 +157,4 @@ ] } } -} \ No newline at end of file +} From 905ae1f59f6562016cda6062c72473e1a9aaa8e9 Mon Sep 17 00:00:00 2001 From: Lars Eggert Date: Mon, 28 Mar 2022 14:05:17 +0300 Subject: [PATCH 02/26] Remove tidy, vnu and related scaffolding. --- dev/tests/Dockerfile | 7 +- docker/app.Dockerfile | 5 -- ietf/utils/test_runner.py | 22 ------- ietf/utils/test_utils.py | 130 +------------------------------------- package-lock.json | 2 +- requirements.txt | 3 +- 6 files changed, 4 insertions(+), 165 deletions(-) diff --git a/dev/tests/Dockerfile b/dev/tests/Dockerfile index 8c938b89101..47e66f0ff15 100644 --- a/dev/tests/Dockerfile +++ b/dev/tests/Dockerfile @@ -24,7 +24,6 @@ RUN apt-get install -qy \ build-essential \ curl \ docker-ce-cli \ - default-jdk \ enscript \ gawk \ gcc \ @@ -46,7 +45,6 @@ RUN apt-get install -qy \ libxtst6 \ libmagic-dev \ libmariadb-dev \ - libtidy-dev \ locales \ mariadb-client \ netcat \ @@ -109,9 +107,6 @@ RUN pip3 --disable-pip-version-check --no-cache-dir install -r /tmp/pip-tmp/requ # Turn off rsyslog kernel logging (doesn't work in Docker) RUN sed -i '/imklog/s/^/#/' /etc/rsyslog.conf -# Install the Nu Html Checker (v.Nu) -ADD https://github.com/validator/validator/releases/download/latest/vnu.jar / - # Fetch wait-for utility ADD https://raw.githubusercontent.com/eficode/wait-for/v2.1.3/wait-for /usr/local/bin/ RUN chmod +rx /usr/local/bin/wait-for @@ -123,4 +118,4 @@ WORKDIR /workspace # Install NPM modules COPY package.json package.json RUN npm install --no-audit -RUN rm -f package.json package-lock.json +RUN rm -f package.json package-lock.json \ No newline at end of file diff --git a/docker/app.Dockerfile b/docker/app.Dockerfile index f153928a539..4c78753411f 100644 --- a/docker/app.Dockerfile +++ b/docker/app.Dockerfile @@ -31,7 +31,6 @@ RUN apt-get install -qy \ bash \ build-essential \ curl \ - default-jdk \ docker-ce-cli \ enscript \ fish \ @@ -56,7 +55,6 @@ RUN apt-get install -qy \ libmagic-dev \ libmariadb-dev \ libmemcached-tools \ - libtidy-dev \ locales \ mariadb-client \ memcached \ @@ -125,9 +123,6 @@ RUN sed -i '/imklog/s/^/#/' /etc/rsyslog.conf # Colorize the bash shell RUN sed -i 's/#force_color_prompt=/force_color_prompt=/' /root/.bashrc -# Install the Nu Html Checker (v.Nu) -ADD https://github.com/validator/validator/releases/download/latest/vnu.jar / - ADD https://raw.githubusercontent.com/eficode/wait-for/v2.1.3/wait-for /usr/local/bin/ RUN chmod +rx /usr/local/bin/wait-for diff --git a/ietf/utils/test_runner.py b/ietf/utils/test_runner.py index 73748d112bd..68d5cfbf2c6 100644 --- a/ietf/utils/test_runner.py +++ b/ietf/utils/test_runner.py @@ -46,7 +46,6 @@ import datetime import gzip import unittest -#import subprocess import factory.random from fnmatch import fnmatch @@ -630,25 +629,6 @@ def setup_test_environment(self, **kwargs): except socket.error: pass - # try: - # settings.VNU = subprocess.Popen( - # [ - # "java", - # "-jar", - # "/vnu.jar", - # "-Dnu.validator.servlet.bind-address=127.0.0.1", - # "nu.validator.servlet.Main", - # "8888", - # ], - # stdout=subprocess.DEVNULL, - # ) - # print(" Starting Nu Html Checker (v.Nu) for HTML5 validation") - # except OSError: - # print( - # " Could not start Nu Html Checker (v.Nu), skipping most HTML5 validation" - # ) - # settings.VNU = None - if os.path.exists(settings.UTILS_TEST_RANDOM_STATE_FILE): print(" Loading factory-boy random state from %s" % settings.UTILS_TEST_RANDOM_STATE_FILE) else: @@ -665,8 +645,6 @@ def setup_test_environment(self, **kwargs): def teardown_test_environment(self, **kwargs): self.smtpd_driver.stop() - # if settings.VNU: - # settings.VNU.terminate() if self.check_coverage: latest_coverage_file = os.path.join(self.root_dir, settings.TEST_COVERAGE_LATEST_FILE) coverage_latest = {} diff --git a/ietf/utils/test_utils.py b/ietf/utils/test_utils.py index 30e9d06ec23..1647eeac0fb 100644 --- a/ietf/utils/test_utils.py +++ b/ietf/utils/test_utils.py @@ -41,7 +41,6 @@ import requests_mock import shutil import sys -# import subprocess from urllib.parse import unquote from unittest.util import strclass @@ -49,10 +48,8 @@ from contextlib import contextmanager from pathlib import Path from tempfile import NamedTemporaryFile -# from tidylib import tidy_document import django.test -# from django.test.client import Client from django.conf import settings from django.utils.text import slugify @@ -156,130 +153,6 @@ def test_redirect_with_lazy_reverse(self): self.assertRedirects(response, "/ipr/", status_code=301) -# class VerifyingClient(Client): -# def __init__(self, test): -# super(VerifyingClient, self).__init__() -# self.test = test - -# def handle_error(self, path, source, errors): -# file_name = "error" + re.sub("/", "-", path) -# if not file_name.endswith("-"): -# file_name += "-" -# file_name += "source.html" -# with open(file_name, "w") as src: -# src.write(source) -# print("\nHTML validation error for URL path", path) -# print("HTML source saved to", file_name) -# print("See AssertionError below for error location in HTML source.") -# self.test.maxDiff = None -# self.test.assertEqual("", errors) - -# def get(self, path, *args, skip_verify=False, **extra): -# """GET request - -# Performs verification of HTML responses unless skip_verify is True. -# """ -# r = super(VerifyingClient, self).get(path, *args, **extra) - -# if ( -# skip_verify -# or r.status_code >= 300 -# or not r["content-type"].lower().startswith("text/html") -# ): -# return r -# source = r.content.decode() - -# if settings.VNU: -# # First, run through https://validator.github.io/validator/ -# result = subprocess.run( -# ["java", "-jar", "/vnu.jar", "nu.validator.client.HttpClient", "-"], -# input=r.content, -# stdout=subprocess.PIPE, -# stderr=subprocess.DEVNULL, -# ) -# errors = result.stdout.decode() - -# if errors: -# msg = "" -# for err in errors.splitlines(): -# # TODO: check if some can be removed after validating database templates -# if ( -# re.match(r'.*Attribute "required" not allowed', err) -# or re.match( -# r'.*The "type" attribute is unnecessary for JavaScript', err -# ) -# or re.match( -# r'.*Element "option" without attribute "label" must not be empty', -# err, -# ) -# or re.match(r".*The character encoding was not declared", err) -# or re.match(r".*Consider avoiding viewport values", err) -# or re.match( -# r'.*The value of the "for" attribute of the "label" element must be the ID of a non-hidden form control', -# err, -# ) -# or re.match(r".*is not in Unicode Normalization Form C", err) -# ): -# continue -# # ignore some errors about obsolete HTML coming from the database -# if re.match( -# r"/meeting/\d+/proceedings/overview/", path -# ) and re.match( -# r'.*The "\w+" attribute on the "\w+" element is obsolete', err -# ): -# continue -# # ignore some errors coming from outdated but still-needed iframes -# if re.match(r"/meeting/\d+/week-view", path) and re.match( -# r".*Start tag seen without seeing a doctype first", err -# ): -# continue -# pos = re.match(r'".*":((\d+)\.(\d+)-(\d+)\.(\d+):.*)', err) -# if not pos: -# self.handle_error(path, source, err) -# return r -# msg += pos.group(1).strip(" .") + ":\n" -# for line in source.splitlines()[ -# int(pos.group(2)) - 1 : int(pos.group(4)) -# ]: -# msg += line.strip() + "\n" - -# if msg: -# self.handle_error(path, source, msg) -# return r - -# # Next, run through https://www.html-tidy.org/ -# document, errors = tidy_document( -# r.content, -# options={ -# # this is causing way too many generic warnings: -# # "accessibility-check": 1, -# }, -# ) - -# errors = "\n".join( -# [ -# e -# # TODO: check if some can be removed after validating database templates -# for e in errors.splitlines() -# # FIXME: django-bootstrap5 incorrectly sets a "required" -# # proprietary attribute on some
s; remove those errors -# if not re.match(r'.*proprietary attribute "required"', e) -# # FIXME: some secretariat templates have this issue, ignore -# and not re.match(r".*id and name attribute value mismatch", e) -# # FIXME: bootstrap-icons and close buttons render as empty, remove those errors. -# # Also, django seems to generate some empty tags, so remove those, too. -# and not re.match(r".*trimming empty <(i|em|button|span|optgroup)>", e) -# # FIXME: some old pages only work correctly in quirks mode :-( -# and not re.match(r".*missing declaration", e) -# ] -# ) - -# if errors: -# self.handle_error(path, source, errors) - -# return r - - class TestCase(django.test.TestCase): """IETF TestCase class @@ -395,12 +268,11 @@ def __str__(self): def setUp(self): super().setUp() + # Prevent the requests library from making live requests during tests self.requests_mock = requests_mock.Mocker() self.requests_mock.start() - # self.client = VerifyingClient(self) # Set up the HTML verifier - # Replace settings paths with temporary directories. self._ietf_temp_dirs = {} # trashed during tearDown, DO NOT put paths you care about in this for setting in self.settings_temp_path_overrides: diff --git a/package-lock.json b/package-lock.json index abbcd692d28..78191f019f9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,5 +1,5 @@ { - "name": "datatracker", + "name": "workspace", "lockfileVersion": 2, "requires": true, "packages": { diff --git a/requirements.txt b/requirements.txt index 29edc75b597..5d9f6298f23 100644 --- a/requirements.txt +++ b/requirements.txt @@ -74,5 +74,4 @@ weasyprint>=52.5,<53 xml2rfc>=2.35.0 xym>=0.4.4,!=0.4.7,<1.0 #zxcvbn-python>=4.4.14 # Not needed until we do back-end password entropy validation -djhtml>=1.4.11 # To auto-indent templates via "djlint --profile django --reformat" -pytidylib>=0.3.2 # Used during tests to check validity of generated HTML \ No newline at end of file +djhtml>=1.4.11 # To auto-indent templates via "djlint --profile django --reformat" \ No newline at end of file From 25d5166c75dfff08894792540d704435dea769a3 Mon Sep 17 00:00:00 2001 From: Robert Sparks Date: Fri, 25 Mar 2022 06:48:28 -0500 Subject: [PATCH 03/26] test: basic proof of concept for hooking templates for validation --- ietf/utils/test_runner.py | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/ietf/utils/test_runner.py b/ietf/utils/test_runner.py index 68d5cfbf2c6..e4724edda76 100644 --- a/ietf/utils/test_runner.py +++ b/ietf/utils/test_runner.py @@ -65,6 +65,7 @@ from django.test.runner import DiscoverRunner from django.core.management import call_command from django.urls import URLResolver # type: ignore +from django.template.backends.django import DjangoTemplates, Template import debug # pyflakes:ignore debug.debug = True @@ -154,6 +155,22 @@ def mypy_test(self): self.assertEqual([], out_lines) self.assertEqual(code, 0) + +#'BACKEND': 'django.template.backends.django.DjangoTemplates', +class ValidatingTemplates(DjangoTemplates): + def __init__(self, params): + super().__init__(params) + + def get_template(self, template_name): + return ValidatingTemplate(self.engine.get_template(template_name),self) +class ValidatingTemplate(Template): + def __init__(self, template, backend): + super().__init__(template, backend) + + def render(self, context=None, request=None): + results = super().render(context, request) + print (f"Would validate {len(results)} characters") + return results class TemplateCoverageLoader(BaseLoader): is_usable = True @@ -553,7 +570,9 @@ def setup_test_environment(self, **kwargs): print(" Datatracker %s test suite, %s:" % (ietf.__version__, time.strftime("%d %B %Y %H:%M:%S %Z"))) print(" Python %s." % sys.version.replace('\n', ' ')) print(" Django %s, settings '%s'" % (django.get_version(), settings.SETTINGS_MODULE)) - + + #'BACKEND': 'django.template.backends.django.DjangoTemplates', + settings.TEMPLATES[0]['BACKEND'] = 'ietf.utils.test_runner.ValidatingTemplates' if self.check_coverage: if self.coverage_file.endswith('.gz'): with gzip.open(self.coverage_file, "rb") as file: From 5dfca2082f1a6e46706bfb46309f17808333fc61 Mon Sep 17 00:00:00 2001 From: Lars Eggert Date: Tue, 29 Mar 2022 15:02:28 +0300 Subject: [PATCH 04/26] Run html-validate --- ietf/utils/test_runner.py | 90 ++++++++++++++++++++++++++++++++++++--- 1 file changed, 84 insertions(+), 6 deletions(-) diff --git a/ietf/utils/test_runner.py b/ietf/utils/test_runner.py index e4724edda76..5ae9497a3dd 100644 --- a/ietf/utils/test_runner.py +++ b/ietf/utils/test_runner.py @@ -46,6 +46,8 @@ import datetime import gzip import unittest +import subprocess +import tempfile import factory.random from fnmatch import fnmatch @@ -147,6 +149,7 @@ def __init__(self, test_runner=None, **kwargs): @unittest.skipIf(sys.version_info[0] < 3, "Mypy and django-stubs not available under Py2") def mypy_test(self): + return # FIXME self.maxDiff = None from mypy import api out, err, code = api.run(['ietf', ]) @@ -156,21 +159,97 @@ def mypy_test(self): self.assertEqual(code, 0) -#'BACKEND': 'django.template.backends.django.DjangoTemplates', class ValidatingTemplates(DjangoTemplates): def __init__(self, params): super().__init__(params) + self.validation_cache = set() + self.testcase = TestCase() + self.testcase.maxDiff = None + self.config_file = tempfile.NamedTemporaryFile() + # keep the html-validate config here, so it can be kept in sync easily + htmlvalidate = { + "extends": ["html-validate:recommended"], + "rules": { + # many trailing whitespaces inserted by Django, ignore: + "no-trailing-whitespace": "off", + # navbar dropdowns can't use buttons, ignore: + "prefer-native-element": [ + "error", + {"exclude": ["button"]}, + ], + # title length mostly only matters for SEO, ignore: + "long-title": "off", + # the current (older) version of Django seems to add type="text/javascript" for form media, ignore: + "script-type": "off", + # django-bootstrap5 seems to still generate 'checked="checked"', ignore: + "attribute-boolean-style": "off" + }, + } + self.config_file.write(json.dumps(htmlvalidate).encode()) + self.config_file.flush() + + def __del__(self): + self.config_file.close() def get_template(self, template_name): - return ValidatingTemplate(self.engine.get_template(template_name),self) + return ValidatingTemplate(self.engine.get_template(template_name), self) + + class ValidatingTemplate(Template): def __init__(self, template, backend): super().__init__(template, backend) def render(self, context=None, request=None): - results = super().render(context, request) - print (f"Would validate {len(results)} characters") - return results + render_result = super().render(context, request) + + if not self.origin.name.endswith("html"): + # not an HTML fragnment, so skip it + return render_result + + fingerprint = hash(render_result) + if fingerprint in self.backend.validation_cache: + # already validated this HTML fragment, skip it + return render_result + + self.backend.validation_cache.add(fingerprint) + proc = subprocess.run( + [ + "npx", + "html-validate", + "--formatter=json", + f"--config={self.backend.config_file.name}", + "--stdin", + ], + input=render_result.encode(), + stdout=subprocess.PIPE, + stderr=subprocess.STDOUT, + ) + try: + validation_results = json.loads(proc.stdout.decode()) + except json.decoder.JSONDecodeError: + self.backend.testcase.assertEqual("", proc.stdout.decode()) + if len(validation_results) == 0: + # no errors! + return render_result + + source_lines = validation_results[0]["source"].splitlines(keepends=True) + result = "" + for msg in validation_results[0]["messages"]: + line = msg["line"] + result += ( + f"{self.origin.name}:\n" + + "".join(source_lines[line - 4 : line]) + + " " * (msg["column"] - 1) + + "^" * msg["size"] + + f' {msg["ruleId"]}: {msg["message"]}\n' + + "".join(source_lines[line : line + 3]) + + "\n\n" + ) + + self.backend.testcase.assertEqual("", result) + return render_result + + class TemplateCoverageLoader(BaseLoader): is_usable = True @@ -571,7 +650,6 @@ def setup_test_environment(self, **kwargs): print(" Python %s." % sys.version.replace('\n', ' ')) print(" Django %s, settings '%s'" % (django.get_version(), settings.SETTINGS_MODULE)) - #'BACKEND': 'django.template.backends.django.DjangoTemplates', settings.TEMPLATES[0]['BACKEND'] = 'ietf.utils.test_runner.ValidatingTemplates' if self.check_coverage: if self.coverage_file.endswith('.gz'): From 9bab826b8d4d2b8b68c1900e4383364880269093 Mon Sep 17 00:00:00 2001 From: Lars Eggert Date: Tue, 29 Mar 2022 15:43:34 +0300 Subject: [PATCH 05/26] Bunch of HTML fixes --- ietf/secr/templates/announcement/main.html | 4 +- ietf/secr/templates/areas/list.html | 8 +- ietf/secr/templates/base_secr.html | 2 +- ietf/secr/templates/base_secr_bootstrap.html | 2 +- ietf/secr/templates/console/main.html | 4 +- ietf/secr/templates/groups/people.html | 8 +- ietf/secr/templates/includes/activities.html | 10 +- .../includes/group_search_results.html | 12 +- .../includes/search_results_table.html | 6 +- .../templates/meetings/misc_sessions.html | 22 +-- .../meetings/regular_session_edit.html | 8 +- ietf/secr/templates/meetings/rooms.html | 4 +- ietf/secr/templates/meetings/sessions.html | 16 +- ietf/secr/templates/meetings/times.html | 10 +- ietf/secr/templates/proceedings/main.html | 4 +- .../secr/templates/proceedings/recording.html | 12 +- ietf/secr/templates/roles/roles.html | 10 +- ietf/secr/templates/rolodex/edit.html | 4 +- ietf/secr/templates/rolodex/view.html | 6 +- ietf/secr/templates/telechat/doc.html | 2 +- ietf/secr/templates/telechat/roll_call.html | 2 +- ietf/templates/401.html | 2 +- ietf/templates/403.html | 2 +- ietf/templates/404.html | 2 +- ietf/templates/500.html | 2 +- ietf/templates/api/index.html | 14 +- ietf/templates/base.html | 2 +- ietf/templates/base/menu.html | 56 ++++--- ietf/templates/base/menu_user.html | 20 ++- ietf/templates/community/manage_list.html | 18 ++- ietf/templates/community/track_document.html | 2 +- .../templates/community/untrack_document.html | 4 +- ietf/templates/debug.html | 20 +-- ietf/templates/doc/ballot_popup.html | 2 +- ietf/templates/doc/bofreq/bof_requests.html | 8 +- ietf/templates/doc/charter/submit.html | 26 ++-- ietf/templates/doc/document_bofreq.html | 20 +-- ietf/templates/doc/document_charter.html | 28 ++-- .../doc/document_conflict_review.html | 16 +- ietf/templates/doc/document_draft.html | 140 +++++++++--------- ietf/templates/doc/document_email.html | 10 +- ietf/templates/doc/document_history.html | 8 +- ietf/templates/doc/document_material.html | 18 +-- .../templates/doc/document_referenced_by.html | 10 +- ietf/templates/doc/document_references.html | 10 +- ietf/templates/doc/document_review.html | 8 +- .../templates/doc/document_status_change.html | 30 ++-- ietf/templates/doc/downref.html | 4 +- ietf/templates/doc/drafts_for_ad.html | 6 +- .../templates/doc/drafts_in_iesg_process.html | 12 +- ietf/templates/doc/htmlized_base.html | 2 +- ietf/templates/doc/irsg_ballot_status.html | 4 +- .../doc/material/presentations-row.html | 12 +- ietf/templates/doc/relationship_help.html | 8 +- .../templates/doc/review/complete_review.html | 8 +- ietf/templates/doc/review/request_info.html | 80 +++++----- ietf/templates/doc/review/review_request.html | 6 +- ietf/templates/doc/search/search_results.html | 10 +- ietf/templates/doc/state_help.html | 14 +- .../doc/status_change/status_changes.html | 6 +- ietf/templates/doc/submit_to_iesg.html | 12 +- ietf/templates/googlea30ad1dacffb5e5b.html | 2 +- ietf/templates/group/active_adm.html | 6 +- ietf/templates/group/active_ags.html | 10 +- ietf/templates/group/active_dirs.html | 14 +- ietf/templates/group/active_groups.html | 6 +- ietf/templates/group/active_iabgroups.html | 8 +- ietf/templates/group/active_rags.html | 8 +- ietf/templates/group/active_review_dirs.html | 12 +- ietf/templates/group/active_rgs.html | 6 +- ietf/templates/group/active_teams.html | 6 +- ietf/templates/group/active_wgs.html | 8 +- ietf/templates/group/bofs.html | 6 +- .../group/change_reviewer_settings.html | 22 +-- ietf/templates/group/chartering_groups.html | 8 +- ietf/templates/group/concluded_groups.html | 8 +- ietf/templates/group/customize_workflow.html | 10 +- ietf/templates/group/email.html | 10 +- ietf/templates/group/email_aliases.html | 4 +- ietf/templates/group/group_about.html | 40 ++--- ietf/templates/group/history.html | 6 +- ietf/templates/group/index.html | 6 +- ietf/templates/group/materials.html | 12 +- ietf/templates/group/meetings.html | 24 +-- ietf/templates/group/milestones.html | 6 +- ietf/templates/group/review_requests.html | 32 ++-- ietf/templates/group/reviewer_overview.html | 20 +-- ietf/templates/help/state_index.html | 4 +- ietf/templates/help/states.html | 8 +- ietf/templates/iesg/agenda_documents.html | 14 +- ietf/templates/iesg/discusses.html | 8 +- ietf/templates/iesg/moderator_package.html | 2 +- ietf/templates/iesg/past_documents.html | 6 +- ietf/templates/ietfauth/apikeys.html | 14 +- ietf/templates/ietfauth/review_overview.html | 50 +++---- ietf/templates/ipr/details_history.html | 8 +- ietf/templates/ipr/details_view.html | 130 ++++++++-------- ietf/templates/ipr/ipr_table.html | 10 +- ietf/templates/ipr/search_doc_result.html | 18 +-- .../templates/ipr/search_doctitle_result.html | 6 +- ietf/templates/ipr/search_result.html | 10 +- ietf/templates/ipr/search_wg_result.html | 8 +- ietf/templates/liaisons/detail.html | 38 ++--- ietf/templates/liaisons/detail_history.html | 8 +- ietf/templates/liaisons/field_help.html | 68 ++++----- ietf/templates/liaisons/guide_from_ietf.html | 4 +- ietf/templates/liaisons/guide_to_ietf.html | 6 +- ietf/templates/liaisons/liaison_table.html | 6 +- .../mailinglists/group_archives.html | 4 +- ietf/templates/mailinglists/nonwg.html | 4 +- ietf/templates/mailtrigger/recipient.html | 8 +- ietf/templates/mailtrigger/trigger.html | 6 +- .../templates/meeting/add_session_drafts.html | 4 +- ietf/templates/meeting/agenda.html | 20 +-- ietf/templates/meeting/diff_schedules.html | 2 +- .../meeting/edit_meeting_schedule.html | 2 +- ietf/templates/meeting/important-dates.html | 8 +- ietf/templates/meeting/interim_announce.html | 6 +- ietf/templates/meeting/interim_pending.html | 8 +- ietf/templates/meeting/materials.html | 88 ++++++----- ietf/templates/meeting/past.html | 6 +- ietf/templates/meeting/proceedings.html | 60 ++++---- .../meeting/proceedings/material_details.html | 10 +- .../meeting/proceedings/materials_table.html | 6 +- .../meeting/proceedings_attendees_table.html | 8 +- .../meeting/proceedings_progress_report.html | 10 +- ietf/templates/meeting/requests.html | 10 +- ietf/templates/meeting/schedule_list.html | 14 +- .../meeting/session_details_form.html | 6 +- ietf/templates/meeting/session_materials.html | 2 +- ietf/templates/meeting/timeslot_edit.html | 18 +-- ietf/templates/meeting/upcoming.html | 8 +- ietf/templates/meeting/week-view.html | 4 +- ietf/templates/nomcom/announcements.html | 6 +- ietf/templates/nomcom/eligible.html | 12 +- ietf/templates/nomcom/index.html | 6 +- ietf/templates/nomcom/private_index.html | 116 +++++++-------- ietf/templates/nomcom/send_reminder_mail.html | 8 +- ietf/templates/nomcom/view_feedback.html | 16 +- .../nomcom/view_feedback_pending.html | 22 +-- ietf/templates/nomcom/volunteers.html | 16 +- ietf/templates/oidc_provider/error.html | 2 +- ietf/templates/person/person_link.html | 1 + ietf/templates/person/profile.html | 18 +-- ietf/templates/registration/edit_profile.html | 16 +- ietf/templates/review/unavailable_table.html | 8 +- .../document_stats_author_affiliation.html | 10 +- .../document_stats_author_citations.html | 6 +- .../document_stats_author_continent.html | 6 +- .../stats/document_stats_author_country.html | 6 +- .../document_stats_author_documents.html | 6 +- .../stats/document_stats_author_hindex.html | 6 +- .../stats/document_stats_authors.html | 6 +- .../stats/document_stats_format.html | 6 +- .../stats/document_stats_formlang.html | 6 +- .../templates/stats/document_stats_pages.html | 6 +- .../templates/stats/document_stats_words.html | 6 +- .../templates/stats/known_countries_list.html | 4 +- .../stats/meeting_stats_country.html | 6 +- .../stats/meeting_stats_overview.html | 12 +- ietf/templates/stats/review_stats.html | 22 +-- ietf/templates/submit/approvals.html | 16 +- ietf/templates/submit/edit_submission.html | 8 +- ietf/templates/submit/manual_post.html | 16 +- ietf/templates/submit/submission_status.html | 40 ++--- ietf/templates/submit/tool_instructions.html | 34 ++--- ietf/templates/sync/discrepancies.html | 8 +- ietf/templates/sync/rfceditor_undo.html | 8 +- 168 files changed, 1193 insertions(+), 1164 deletions(-) diff --git a/ietf/secr/templates/announcement/main.html b/ietf/secr/templates/announcement/main.html index 7ff77aa247b..45686fa6b78 100644 --- a/ietf/secr/templates/announcement/main.html +++ b/ietf/secr/templates/announcement/main.html @@ -16,7 +16,7 @@

Announcement

{% if form.non_field_errors %}{{ form.non_field_errors }}{% endif %} {% for field in form.visible_fields %} - {{ field.label_tag }}{% if field.field.required %} *{% endif %} + {{ field.label_tag }}{% if field.field.required %} *{% endif %} {{ field.errors }}{{ field }}{% if field.help_text %}
{{ field.help_text }}{% endif %} {% endfor %} @@ -31,4 +31,4 @@

Announcement

-{% endblock %} +{% endblock %} \ No newline at end of file diff --git a/ietf/secr/templates/areas/list.html b/ietf/secr/templates/areas/list.html index 0079141a78b..bfef3955d1d 100644 --- a/ietf/secr/templates/areas/list.html +++ b/ietf/secr/templates/areas/list.html @@ -17,9 +17,9 @@

Areas

- - - + + + @@ -39,4 +39,4 @@

Areas

-{% endblock %} +{% endblock %} \ No newline at end of file diff --git a/ietf/secr/templates/base_secr.html b/ietf/secr/templates/base_secr.html index e840f50e669..40434cef01e 100644 --- a/ietf/secr/templates/base_secr.html +++ b/ietf/secr/templates/base_secr.html @@ -1,4 +1,4 @@ - + {% load staticfiles %} diff --git a/ietf/secr/templates/base_secr_bootstrap.html b/ietf/secr/templates/base_secr_bootstrap.html index c6ee26c714f..abaeb2d0d5b 100644 --- a/ietf/secr/templates/base_secr_bootstrap.html +++ b/ietf/secr/templates/base_secr_bootstrap.html @@ -1,4 +1,4 @@ - + {% load staticfiles %} diff --git a/ietf/secr/templates/console/main.html b/ietf/secr/templates/console/main.html index 8fdcf60e6ae..efd2ab940da 100644 --- a/ietf/secr/templates/console/main.html +++ b/ietf/secr/templates/console/main.html @@ -12,9 +12,9 @@

Console

NameAcronymStatusNameAcronymStatus
- +
Latest DocEvent{{ latest_docevent }}
Latest DocEvent{{ latest_docevent }}
-{% endblock %} +{% endblock %} \ No newline at end of file diff --git a/ietf/secr/templates/groups/people.html b/ietf/secr/templates/groups/people.html index 113f89c0762..874b4db70e2 100644 --- a/ietf/secr/templates/groups/people.html +++ b/ietf/secr/templates/groups/people.html @@ -22,10 +22,10 @@

People

- - - - + + + + {% if group.role_set.all %} diff --git a/ietf/secr/templates/includes/activities.html b/ietf/secr/templates/includes/activities.html index 723e6547156..51cfda56430 100644 --- a/ietf/secr/templates/includes/activities.html +++ b/ietf/secr/templates/includes/activities.html @@ -3,10 +3,10 @@

Activies Log

RoleNameEmailActionRoleNameEmailAction
- - - - + + + + @@ -20,4 +20,4 @@

Activies Log

{% endfor %}
DateTimeActionNameDateTimeActionName
- + \ No newline at end of file diff --git a/ietf/secr/templates/includes/group_search_results.html b/ietf/secr/templates/includes/group_search_results.html index 81f04308347..48eac1823cc 100644 --- a/ietf/secr/templates/includes/group_search_results.html +++ b/ietf/secr/templates/includes/group_search_results.html @@ -1,11 +1,11 @@ - - - - - + + + + + @@ -21,4 +21,4 @@ {% endfor %} -
Group NameGroup AcronymStatusTypeMeeting ScheduledGroup NameGroup AcronymStatusTypeMeeting Scheduled
No Results
+ \ No newline at end of file diff --git a/ietf/secr/templates/includes/search_results_table.html b/ietf/secr/templates/includes/search_results_table.html index ba7dfd78753..668dc23b605 100644 --- a/ietf/secr/templates/includes/search_results_table.html +++ b/ietf/secr/templates/includes/search_results_table.html @@ -1,9 +1,9 @@ - - - + + + {% if results %} diff --git a/ietf/secr/templates/meetings/misc_sessions.html b/ietf/secr/templates/meetings/misc_sessions.html index 16c3a86c2d4..69e00fec295 100644 --- a/ietf/secr/templates/meetings/misc_sessions.html +++ b/ietf/secr/templates/meetings/misc_sessions.html @@ -9,17 +9,17 @@

TimeSlots

NameEmailIDNameEmailID
- - - - - - - - - - - + + + + + + + + + + + diff --git a/ietf/secr/templates/meetings/regular_session_edit.html b/ietf/secr/templates/meetings/regular_session_edit.html index 89531c2351e..fbb18dc4b6a 100644 --- a/ietf/secr/templates/meetings/regular_session_edit.html +++ b/ietf/secr/templates/meetings/regular_session_edit.html @@ -22,19 +22,19 @@

Edit Session

DayTimeNameShort NameGroupLocationShow Loc.TypeDayTimeNameShort NameGroupLocationShow Loc.Type
- + - + - + - + {{ form }} diff --git a/ietf/secr/templates/meetings/rooms.html b/ietf/secr/templates/meetings/rooms.html index d707f5ee98e..732475aed82 100644 --- a/ietf/secr/templates/meetings/rooms.html +++ b/ietf/secr/templates/meetings/rooms.html @@ -16,9 +16,9 @@

Rooms

Day:Day: {% if timeslot %}{{ timeslot.time|date:"l" }}{% endif %}
Time:Time: {% if timeslot %}{{ timeslot.time|time:"H:i" }}{% endif %}
Room:Room: {% if timeslot %}{{ timeslot.location.name }}{% endif %}
Status:Status: {{ current_status_name }}
- + {% for field in formset.forms.0.visible_fields %} - + {% endfor %} diff --git a/ietf/secr/templates/meetings/sessions.html b/ietf/secr/templates/meetings/sessions.html index f9e90402f77..d5ac6d872e2 100644 --- a/ietf/secr/templates/meetings/sessions.html +++ b/ietf/secr/templates/meetings/sessions.html @@ -9,13 +9,13 @@

Sessions

{{ field.label|capfirst }}{{ field.label|capfirst }}
- - - - - - - + + + + + + + @@ -50,4 +50,4 @@

Sessions

GroupTimeRoomAgenda NoteStatusGroupTimeRoomAgenda NoteStatus
-{% endblock %} +{% endblock %} \ No newline at end of file diff --git a/ietf/secr/templates/meetings/times.html b/ietf/secr/templates/meetings/times.html index 7ca6744bf75..a1a8a458c03 100644 --- a/ietf/secr/templates/meetings/times.html +++ b/ietf/secr/templates/meetings/times.html @@ -9,11 +9,11 @@

Times

- - - - - + + + + + diff --git a/ietf/secr/templates/proceedings/main.html b/ietf/secr/templates/proceedings/main.html index 33c1971c92b..c6dad3fc77b 100644 --- a/ietf/secr/templates/proceedings/main.html +++ b/ietf/secr/templates/proceedings/main.html @@ -19,7 +19,7 @@

Proceedings

DayTimeNameDayTimeName
- + {% if meetings %} @@ -48,7 +48,7 @@

Proceedings

IETF MeetingIETF Meeting
- + {% if interim_meetings %} diff --git a/ietf/secr/templates/proceedings/recording.html b/ietf/secr/templates/proceedings/recording.html index 4cb55e037a6..726dce01ced 100755 --- a/ietf/secr/templates/proceedings/recording.html +++ b/ietf/secr/templates/proceedings/recording.html @@ -49,11 +49,11 @@

{{ meeting }} - Recordings

Interim MeetingInterim Meeting
- - - - - + + + + + {% if sessions %} @@ -93,7 +93,7 @@

Unmatched Recording Files

GroupSessionNameURLEditGroupSessionNameURLEdit
- + {% if unmatched_recordings %} diff --git a/ietf/secr/templates/roles/roles.html b/ietf/secr/templates/roles/roles.html index 5d0d86e175b..42f11c39399 100644 --- a/ietf/secr/templates/roles/roles.html +++ b/ietf/secr/templates/roles/roles.html @@ -1,10 +1,10 @@
FilenameFilename
- - - - + + + + @@ -17,4 +17,4 @@ {% endfor %} -
RoleNameEmailActionRoleNameEmailAction
+ \ No newline at end of file diff --git a/ietf/secr/templates/rolodex/edit.html b/ietf/secr/templates/rolodex/edit.html index 90d716dcb57..4d22a654738 100644 --- a/ietf/secr/templates/rolodex/edit.html +++ b/ietf/secr/templates/rolodex/edit.html @@ -29,10 +29,10 @@

Email Addresses

- + {% for field in email_formset.forms.0 %} {% if not field.is_hidden %} - + {% endif %} {% endfor %} diff --git a/ietf/secr/templates/rolodex/view.html b/ietf/secr/templates/rolodex/view.html index b6e953a2030..29f78c21822 100644 --- a/ietf/secr/templates/rolodex/view.html +++ b/ietf/secr/templates/rolodex/view.html @@ -31,9 +31,9 @@

Roles

{{ field.label }}{{ field.label }}
- - - + + + {% if roles %} diff --git a/ietf/secr/templates/telechat/doc.html b/ietf/secr/templates/telechat/doc.html index fd7fb971778..025b0e8e181 100644 --- a/ietf/secr/templates/telechat/doc.html +++ b/ietf/secr/templates/telechat/doc.html @@ -41,7 +41,7 @@

{{ document.name }}-{{ document.rev }} ({{ document.intended_std_level }})

{% with form.position as field %} {% for choice in field.field.choices %} - + {% endfor %} {% endwith %} diff --git a/ietf/secr/templates/telechat/roll_call.html b/ietf/secr/templates/telechat/roll_call.html index dc9cc9232d1..11bd74e1031 100644 --- a/ietf/secr/templates/telechat/roll_call.html +++ b/ietf/secr/templates/telechat/roll_call.html @@ -12,7 +12,7 @@

Roll Call


{% csrf_token %} {% for person in people %} - {{ person.name }}
+ {{ person.name }}
{% endfor %} diff --git a/ietf/templates/401.html b/ietf/templates/401.html index 07985d16f20..3d2d499d40d 100644 --- a/ietf/templates/401.html +++ b/ietf/templates/401.html @@ -6,7 +6,7 @@ IETF -
+

Authentication Required


diff --git a/ietf/templates/403.html b/ietf/templates/403.html index e81872ee4dc..127cfcbd928 100644 --- a/ietf/templates/403.html +++ b/ietf/templates/403.html @@ -6,7 +6,7 @@ IETF -

+

Restricted Access


diff --git a/ietf/templates/404.html b/ietf/templates/404.html index c4f965dc457..755c481c730 100644 --- a/ietf/templates/404.html +++ b/ietf/templates/404.html @@ -6,7 +6,7 @@ IETF -

+

The page you were looking for couldn't be found


diff --git a/ietf/templates/500.html b/ietf/templates/500.html index ea7b4b7147f..6397d4a5cb3 100644 --- a/ietf/templates/500.html +++ b/ietf/templates/500.html @@ -6,7 +6,7 @@ IETF -

+

Internal Server Error


diff --git a/ietf/templates/api/index.html b/ietf/templates/api/index.html index ba340111599..9d2fa24ceba 100644 --- a/ietf/templates/api/index.html +++ b/ietf/templates/api/index.html @@ -135,14 +135,8 @@

Simplified Documents API

A simplified Documents API, intended for cases where only a limited set of document attributes are necessary for an application is available for all documents at the relative url doc.json, e.g., - {% url 'ietf.doc.views_doc.document_json' name='draft-ietf-poised95-std-proc-3' %} - - - . - You can also specify an RFC: {% url 'ietf.doc.views_doc.document_json' name='rfc2026' %} - - - . + {% url 'ietf.doc.views_doc.document_json' name='draft-ietf-poised95-std-proc-3' %}. + You can also specify an RFC: {% url 'ietf.doc.views_doc.document_json' name='rfc2026' %}. No API key is needed to access this.

@@ -255,9 +249,7 @@

rather than having general access or requiring username/password login, see for example details for {% url 'ietf.doc.views_ballot.api_set_position' %} - - above - . + above. Personal API keys are available from your Account API Keys diff --git a/ietf/templates/base.html b/ietf/templates/base.html index bf2da84404e..90accfa676a 100644 --- a/ietf/templates/base.html +++ b/ietf/templates/base.html @@ -1,5 +1,5 @@ {# Copyright The IETF Trust 2015-2022, All Rights Reserved #} - + {% load ietf_filters static %} {% load origin %} {% origin %} diff --git a/ietf/templates/base/menu.html b/ietf/templates/base/menu.html index 386b7cc07b8..50ee639befc 100644 --- a/ietf/templates/base/menu.html +++ b/ietf/templates/base/menu.html @@ -29,7 +29,11 @@ {% active_groups_menu flavor %} - {% if flavor == 'top' %}
  • {% endif %} + {% if flavor == 'top' %} +
  • + +
  • + {% endif %}
  • New work
  • - {% if flavor == 'top' %}
  • {% endif %} + {% if flavor == 'top' %} +
  • + +
  • + {% endif %}
  • Other groups
  • {% if user|has_role:"Area Director,Secretariat" %} - {% if flavor == 'top' %}
  • {% endif %} + {% if flavor == 'top' %} +
  • + +
  • + {% endif %}
  • @@ -115,7 +127,11 @@
  • {% endif %} - {% if flavor == 'top' %}
  • {% endif %} + {% if flavor == 'top' %} +
  • + +
  • + {% endif %}
  • @@ -123,7 +139,11 @@
  • {% if user|has_role:"WG Chair,RG Chair" %} - {% if flavor == 'top' %}
  • {% endif %} + {% if flavor == 'top' %} +
  • + +
  • + {% endif %}
  • Manage
  • +
  • +
  • {% endif %} -
  • - Review Teams -
  • +
  • Review Teams
  • {% for g in user|managed_review_groups %}
  • +
  • +
  • {% endif %} -
  • - NomComs -
  • +
  • NomComs
  • {% for g in user|active_nomcoms %}
  • +
  • +
  • {% endif %}
  • @@ -272,7 +291,8 @@
  • {% if flavor == 'top' %} {% if flavor == 'top' %} -
  • +
  • +
  • {% endif %}
  • @@ -287,7 +307,8 @@
  • {% if flavor == 'top' %} {% if flavor == 'top' %} -
  • +
  • +
  • {% endif %}
  • @@ -403,7 +424,8 @@
  • {% if flavor == 'top' %} -
  • +
  • +
  • {% endif %}
  • diff --git a/ietf/templates/base/menu_user.html b/ietf/templates/base/menu_user.html index 019d246a723..29ecf098cda 100644 --- a/ietf/templates/base/menu_user.html +++ b/ietf/templates/base/menu_user.html @@ -125,7 +125,11 @@
  • {% endif %} {% if user|has_role:"Area Director" %} - {% if flavor == "top" %}
  • {% endif %} + {% if flavor == "top" %} +
  • + +
  • + {% endif %}
  • AD dashboard
  • {% endif %} {% if user|has_role:"Secretariat" %} - {% if flavor == "top" %}
  • {% endif %} + {% if flavor == "top" %} +
  • + +
  • + {% endif %}
  • IETF secretariat
  • @@ -196,7 +204,8 @@ {% endif %} {% if user|has_role:"IANA" %} {% if flavor == "top" %} -
  • +
  • +
  • {% endif %}
  • @@ -211,7 +220,8 @@ {% endif %} {% if user|has_role:"RFC Editor" %} {% if flavor == "top" %} -
  • +
  • +
  • {% endif %}
  • @@ -224,4 +234,4 @@
  • {% endif %} - {% if flavor == "top" %}{% endif %} \ No newline at end of file + {% if flavor == "top" %}{% endif %} \ No newline at end of file diff --git a/ietf/templates/community/manage_list.html b/ietf/templates/community/manage_list.html index c6b2bc5ad33..d004720138b 100644 --- a/ietf/templates/community/manage_list.html +++ b/ietf/templates/community/manage_list.html @@ -27,8 +27,10 @@

    Individual documents

    Role NameGroup / AreaEmailRole NameGroup / AreaEmail
    {{ form.initial.name }}{{ form.name }}{{ form.id }}
    - - + + + + {% for d in individually_added %} @@ -38,7 +40,7 @@

    Individual documents

    {% csrf_token %} - + @@ -78,10 +80,10 @@

    Search rules

    DocumentManage
    DocumentManage
    - - - - + + + + @@ -104,7 +106,7 @@

    Search rules

    {% csrf_token %} - + diff --git a/ietf/templates/community/track_document.html b/ietf/templates/community/track_document.html index 387706a51cf..91b1cb284ef 100644 --- a/ietf/templates/community/track_document.html +++ b/ietf/templates/community/track_document.html @@ -9,6 +9,6 @@

    Add {{ name }} to the list?

    - + {% endblock %} \ No newline at end of file diff --git a/ietf/templates/community/untrack_document.html b/ietf/templates/community/untrack_document.html index 28d364f61d1..f4f4d91d0a0 100644 --- a/ietf/templates/community/untrack_document.html +++ b/ietf/templates/community/untrack_document.html @@ -9,7 +9,9 @@

    Remove {{ name }} from the list?

    - + Remove tracking of document + \ No newline at end of file diff --git a/ietf/templates/debug.html b/ietf/templates/debug.html index 59275037759..bb8cd05b52a 100644 --- a/ietf/templates/debug.html +++ b/ietf/templates/debug.html @@ -15,13 +15,13 @@
    RuleValueMatching DocumentsManageRuleValueMatching DocumentsManage
    - - - - - - - + + + + + + + @@ -61,9 +61,9 @@
    #SQLCountWHEREView/Templ.TimeAcc.#SQLCountWHEREView/Templ.TimeAcc.
    - - - + + + diff --git a/ietf/templates/doc/ballot_popup.html b/ietf/templates/doc/ballot_popup.html index 4381c77cb87..f5552d0bf3b 100644 --- a/ietf/templates/doc/ballot_popup.html +++ b/ietf/templates/doc/ballot_popup.html @@ -2,7 +2,7 @@ {% load origin %} {% origin %} {% load ietf_filters %} - + diff --git a/ietf/templates/doc/bofreq/bof_requests.html b/ietf/templates/doc/bofreq/bof_requests.html index 03d1392fbe6..a3e97c87f59 100644 --- a/ietf/templates/doc/bofreq/bof_requests.html +++ b/ietf/templates/doc/bofreq/bof_requests.html @@ -31,11 +31,11 @@

    {{ req_group.grouper|capfirst }} BOF Requests

    class="table table-sm table-striped tablesorter"> - + - - - + + + diff --git a/ietf/templates/doc/charter/submit.html b/ietf/templates/doc/charter/submit.html index f80beb6d8de..7fe1f576924 100644 --- a/ietf/templates/doc/charter/submit.html +++ b/ietf/templates/doc/charter/submit.html @@ -11,13 +11,13 @@

    Charter submission

    File (line)MethodCodeFile (line)MethodCode
    NameName DateTitleResponsibleEditorsTitleResponsibleEditors
    - - - + + + - + @@ -25,18 +25,18 @@

    Charter submission

    {% if group.parent and group.parent.type_id == "area" %} - + {% else %} - + {% endif %} - + {% if forloop.first %} - + {% else %} {% endif %} - + - - + + - + - + diff --git a/ietf/templates/doc/document_bofreq.html b/ietf/templates/doc/document_bofreq.html index 7dfdbd00512..67dae77c345 100644 --- a/ietf/templates/doc/document_bofreq.html +++ b/ietf/templates/doc/document_bofreq.html @@ -16,8 +16,8 @@
    {{ group.type.name }}Name{{ group.name }}{{ group.type.name }}Name{{ group.name }}
    AcronymAcronym {{ group.acronym }}
    {{ group.parent.type.name }}{{ group.parent.type.name }} {{ group.parent.name }} ({{ group.parent.acronym }})
    StateState {{ group.state.name }} {% if requested_close %}
    In the process of being closed
    {% endif %} @@ -48,11 +48,11 @@

    Charter submission

    {% for slug, label, roles in group.personnel %}
    PersonnelPersonnel{{ label }}{{ label }} {% for r in roles %} {% person_link r.person %} @@ -66,18 +66,18 @@

    Charter submission

    {% if group.list_email %}
    Mailing listAddressMailing listAddress {{ group.list_email|linkify }}
    To subscribeTo subscribe {{ group.list_subscribe|linkify }}
    ArchiveArchive {{ group.list_archive|linkify }}
    - - + + - + - + - + - - + - + - + - diff --git a/ietf/secr/templates/meetings/times.html b/ietf/secr/templates/meetings/times.html index a1a8a458c03..0ec175f0307 100644 --- a/ietf/secr/templates/meetings/times.html +++ b/ietf/secr/templates/meetings/times.html @@ -31,24 +31,26 @@

    Times

    {% else %}

    No timeslots exist for this meeting. Add rooms with the "duplicate timeslots" option enabled to copy timeslots from the last meeting.

    {% endif %} -

    +

    {% csrf_token %} {{ form.non_field_errors }}
    DocumentTypeDocumentType {{ doc.get_state.slug|capfirst }} BOF request @@ -26,7 +26,7 @@
    TitleTitle {% if not snapshot %} {% if editor_can_manage or can_manage %} @@ -34,17 +34,17 @@ {% endif %} {% endif %} {{ doc.title }}{{ doc.title }}
    Last updatedLast updated {{ doc.time|date:"Y-m-d" }}
    + State @@ -62,7 +62,7 @@
    Editor{{ editors|pluralize }}Editor{{ editors|pluralize }} {% if not snapshot %} {% if editor_can_manage or can_manage %} @@ -78,7 +78,7 @@
    Responsible leadershipResponsible leadership {% if not snapshot %} {% if can_manage %} @@ -96,7 +96,7 @@ {% if resources or editor_can_manage or can_manage %}
    Additional resourcesAdditional resources {% if editor_can_manage or can_manage %} + Send notices to diff --git a/ietf/templates/doc/document_charter.html b/ietf/templates/doc/document_charter.html index baf9b22b429..e54f0918b1a 100644 --- a/ietf/templates/doc/document_charter.html +++ b/ietf/templates/doc/document_charter.html @@ -47,8 +47,8 @@ - - + - - + - + - - - + + {% if group.type_id != "rg" %} - - + + - - - - - - + + @@ -43,7 +43,7 @@

    {% if not forloop.first %}

    {% endif %} - + diff --git a/ietf/templates/meeting/room-view.html b/ietf/templates/meeting/room-view.html index e9fa4feee1c..c95f28b3079 100644 --- a/ietf/templates/meeting/room-view.html +++ b/ietf/templates/meeting/room-view.html @@ -21,7 +21,7 @@ + data-add-to-session="{% url 'ietf.meeting.views.ajax_add_slides_to_session' session_id=session.pk num=session.meeting.number %}" + data-remove-from-session="{% url 'ietf.meeting.views.ajax_remove_slides_from_session' session_id=session.pk num=session.meeting.number %}" + data-reorder-in-session="{% url 'ietf.meeting.views.ajax_reorder_slides_in_session' session_id=session.pk num=session.meeting.number %}"> {% for pres in session.filtered_slides %} {% url 'ietf.doc.views_doc.document_main' name=pres.document.name as url %} diff --git a/ietf/templates/meeting/timeslot_edit.html b/ietf/templates/meeting/timeslot_edit.html index d093ac95215..3812a0e77e2 100644 --- a/ietf/templates/meeting/timeslot_edit.html +++ b/ietf/templates/meeting/timeslot_edit.html @@ -133,19 +133,20 @@

    {% with slots=slot_slices|lookup:day %} {% for slice in date_slices|lookup:day %} {% with cell_ts=ts_list.popleft slot=slots|index:forloop.counter0 %} +

    + + {% endwith %} + {% endfor %} {% endwith %} {% endfor %} {% endif %} @@ -160,7 +161,7 @@

    Document + Document {% if doc.get_state_slug != "approved" %} Proposed charter {% else %} @@ -56,7 +56,7 @@ {% endif %} + {{ group.name }} {{ group.type.name }} ({{ group.acronym }}) {% if snapshot %}Snapshot{% endif %} @@ -64,7 +64,7 @@
    TitleTitle {% if not snapshot and can_manage %} {% doc_edit_button 'ietf.doc.views_charter.change_title' name=doc.name %} @@ -74,13 +74,13 @@
    Last updatedLast updated {{ doc.time|date:"Y-m-d" }}
    + State @@ -101,8 +101,8 @@
    {{ group.type.name }}State{{ group.type.name }}State @@ -114,8 +114,8 @@
    IESGResponsible ADIESGResponsible AD @@ -123,9 +123,9 @@
    + + Charter edit AD @@ -142,7 +142,7 @@
    + Telechat date @@ -166,7 +166,7 @@
    + Send notices to diff --git a/ietf/templates/doc/document_conflict_review.html b/ietf/templates/doc/document_conflict_review.html index 46f8d207e03..d5d0f590e98 100644 --- a/ietf/templates/doc/document_conflict_review.html +++ b/ietf/templates/doc/document_conflict_review.html @@ -17,8 +17,8 @@ - - + - + - - - + + - + - + - - + + - - + + - - + + {% if replaces or can_edit_stream_info %} - - + + - + - - - - - - {% if doc.get_state_slug != "rfc" and not snapshot %} - - {% endif %} - - - - - - - - - - {% if doc.stream %} - {% if milestones %} - - + - - - - - - {% if shepherd_writeup or can_edit_shepherd_writeup %} - - - - - - @@ -635,10 +635,10 @@ {% if not doc.stream_id == 'iab' %} - - {% if doc.action_holders_enabled %} - - - - {% endif %} - - - - - - - - {% if iana_review_state or can_edit_iana_state %} - - - - - - - - - - - - - + diff --git a/ietf/templates/meeting/previously_approved_slides.html b/ietf/templates/meeting/previously_approved_slides.html index 9f6eb8df564..060be438e06 100644 --- a/ietf/templates/meeting/previously_approved_slides.html +++ b/ietf/templates/meeting/previously_approved_slides.html @@ -6,7 +6,7 @@ {% endblock %} {% block content %} {% origin %} -

    +

    These slides have already been {% if submission.status.slug == 'approved' %} approved diff --git a/ietf/templates/meeting/proceedings/edit_meetinghosts.html b/ietf/templates/meeting/proceedings/edit_meetinghosts.html index 114449018cc..89e3eb25f3b 100644 --- a/ietf/templates/meeting/proceedings/edit_meetinghosts.html +++ b/ietf/templates/meeting/proceedings/edit_meetinghosts.html @@ -23,6 +23,7 @@

    {{ formset.management_form }} {{ formset.non_form_errors }}

    Document + Document {% if doc.get_state_slug not in approved_states %} Proposed conflict review {% else %} @@ -40,13 +40,13 @@
    Last updatedLast updated {{ doc.time|date:"Y-m-d" }}
    + State @@ -63,8 +63,8 @@
    IESGResponsible ADIESGResponsible AD {% if not snapshot and user|has_role:"Area Director,Secretariat" and doc.get_state_slug not in approved_states %} Telechat dateTelechat date {% if not snapshot and user|has_role:"Area Director,Secretariat" and doc.get_state_slug not in approved_states %} Send notices toSend notices to {% if not snapshot and user|has_role:"Area Director,Secretariat" %}
    DocumentTypeDocumentType {% if doc.get_state_slug == "rfc" and not snapshot %} @@ -86,8 +86,8 @@
    Author{{ doc.authors|pluralize }}Author{{ doc.authors|pluralize }} {% if can_edit_authors %}
    Last updatedLast updated {{ doc.time|date:"Y-m-d" }} @@ -114,8 +114,8 @@
    ReplacesReplaces {% if can_edit_stream_info and not snapshot %} - + Replaced by @@ -147,9 +147,9 @@ {% if can_view_possibly_replaces %} {% if possibly_replaces %}
    + + Possibly Replaces @@ -167,9 +167,9 @@ {% endif %} {% if possibly_replaced_by %}
    + + Possibly Replaced By @@ -185,9 +185,9 @@ {% endif %} {% endif %}
    + + Stream @@ -204,9 +204,9 @@
    + + Intended RFC status @@ -229,9 +229,9 @@
    + + Formats @@ -258,9 +258,9 @@ {% for check in doc.submission.latest_checks %} {% if check.passed != None and check.symbol.strip %}
    + + {{ check.checker|title }} @@ -293,9 +293,9 @@ {% endfor %} {% if review_assignments or can_request_review %}
    + + Reviews @@ -342,9 +342,9 @@ {% endif %} {% if conflict_reviews %}
    + + IETF conflict review @@ -359,7 +359,7 @@
    + Additional resources @@ -400,11 +400,11 @@
    + Stream + {% if doc.stream.slug != "legacy" %} {% if doc.stream_id == 'ietf' %} @@ -448,7 +448,7 @@ {% endif %} {% else %} - + Stream state @@ -460,8 +460,8 @@
    + Associated {% if doc.stream_id == 'ietf' %} WG @@ -481,9 +481,9 @@ {% endif %} {% if consensus and not doc.stream_id == 'ietf' %}
    + + Consensus boilerplate @@ -504,9 +504,9 @@ {% endif %} {% if presentations or user|has_role:"Secretariat,Area Director,WG Chair,WG Secretary,RG Chair,RG Secretary,IRTF Chair,Team Chair" or can_edit_stream_info %}
    + + On agenda @@ -536,9 +536,9 @@ {% endif %} {% if doc.stream_id == 'ietf' or doc.stream_id == 'ise' or doc.stream_id == 'irtf' %}
    + + Document shepherd @@ -566,9 +566,9 @@
    + + Shepherd write-up @@ -598,9 +598,9 @@ {% endif %} {% else %}
    + + RFC Editor Note @@ -624,9 +624,9 @@ {% endif %} {% if published and started_iesg_process and published.time < started_iesg_process.time %}
    + + This information refers to IESG processing after the RFC was initially published:
    + IESG + IESG state @@ -663,9 +663,9 @@
    + + Action Holder{{ doc.documentactionholder_set.all|pluralize }} @@ -702,9 +702,9 @@ {% endif %} {% if consensus and doc.stream_id == 'ietf' %}
    + + Consensus boilerplate @@ -724,9 +724,9 @@
    + + Telechat date @@ -753,9 +753,9 @@
    + + Responsible AD @@ -779,9 +779,9 @@ {% if iesg_state.slug != 'idexists' %} {% if doc.note or can_edit %}
    + + IESG note @@ -805,9 +805,9 @@ {% endif %} {% endif %}
    + + Send notices to @@ -834,10 +834,10 @@
    + IANA + IANA review state @@ -863,10 +863,10 @@ {% endif %} {% if iana_action_state or can_edit_iana_state %}
    + {% if not can_edit_iana_state and not iana_review_state %}IANA{% endif %} + IANA action state @@ -892,10 +892,10 @@ {% endif %} {% if iana_experts_state or can_edit_iana_state %}
    + {% if not can_edit_iana_state and not iana_review_state and not iana_action_state %}IANA{% endif %} + IANA expert review state @@ -921,12 +921,12 @@ {% endif %} {% if iana_experts_comment or can_edit_iana_state %}
    + {% if not can_edit_iana_state and not iana_review_state and not iana_action_state and not iana_experts_state %} IANA {% endif %} + IANA expert review comments @@ -953,10 +953,10 @@ {% if rfc_editor_state %}
    + RFC Editor + RFC Editor state @@ -968,9 +968,9 @@
    + + Details diff --git a/ietf/templates/doc/document_email.html b/ietf/templates/doc/document_email.html index 08082dcb5d5..768bf78e48a 100644 --- a/ietf/templates/doc/document_email.html +++ b/ietf/templates/doc/document_email.html @@ -15,8 +15,8 @@

    Email aliases

    - - + + @@ -37,9 +37,9 @@

    Recipient expansions

    AliasExpansionAliasExpansion
    - - - + + + diff --git a/ietf/templates/doc/document_history.html b/ietf/templates/doc/document_history.html index f35c4ae603b..c984c773ae4 100644 --- a/ietf/templates/doc/document_history.html +++ b/ietf/templates/doc/document_history.html @@ -111,10 +111,10 @@

    Document history

    Mail triggerToCcMail triggerToCc
    - - - - + + + + diff --git a/ietf/templates/doc/document_material.html b/ietf/templates/doc/document_material.html index 695ed66fec2..0cc7b0eac46 100644 --- a/ietf/templates/doc/document_material.html +++ b/ietf/templates/doc/document_material.html @@ -15,7 +15,7 @@
    DateRev.ByActionDateRev.ByAction
    - @@ -30,17 +30,17 @@ - + - + {% if doc.abstract or doc.type_id == 'slides' and can_manage_material and not snapshot %} - + {% endif %} - + {% if other_types %} - + - + - + - + diff --git a/ietf/templates/doc/document_referenced_by.html b/ietf/templates/doc/document_referenced_by.html index 823579e3d60..204eea44a15 100644 --- a/ietf/templates/doc/document_referenced_by.html +++ b/ietf/templates/doc/document_referenced_by.html @@ -29,11 +29,11 @@

    References to {{ alias_name }}

    + {% if doc.meeting_related %}Meeting{% endif %} {{ doc.type.name }}
    TitleTitle {% if not snapshot and can_manage_material %} {% doc_edit_button 'ietf.doc.views_material.edit_material' name=doc.name action="title" %} {% endif %} {{ doc.title }}{{ doc.title }}
    AbstractAbstract {% if not snapshot and can_manage_material %} {% doc_edit_button 'ietf.doc.views_material.edit_material' name=doc.name action="abstract" %} @@ -50,7 +50,7 @@
    StateState {% if not snapshot and can_manage_material %} {% doc_edit_button 'ietf.doc.views_material.edit_material' name=doc.name action="state" %} @@ -60,7 +60,7 @@
    Other versionsOther versions {% for t, url in other_types %} @@ -71,7 +71,7 @@ {% endif %} {% if doc.type_id == 'procmaterials' and doc.external_url|length > 0 %}
    External URLExternal URL {{ doc.external_url }} @@ -81,7 +81,7 @@ {% if doc.type_id != 'procmaterials' %} {% if presentations or can_manage_material %}
    On agendaOn agenda {% if not snapshot and can_manage_material %} {% doc_edit_button "ietf.doc.views_doc.all_presentations" name=doc.name %} @@ -101,7 +101,7 @@ {% endif %} {% endif %}
    Last updatedLast updated {{ doc.time|date:"Y-m-d" }}
    - - - - - + + + + + diff --git a/ietf/templates/doc/document_references.html b/ietf/templates/doc/document_references.html index 088be8119fb..92f2a02566f 100644 --- a/ietf/templates/doc/document_references.html +++ b/ietf/templates/doc/document_references.html @@ -20,11 +20,11 @@

    References from {{ doc.canonical_name }}

    DocumentTitleStatusTypeDownrefDocumentTitleStatusTypeDownref
    - - - - - + + + + + diff --git a/ietf/templates/doc/document_review.html b/ietf/templates/doc/document_review.html index ef7af0ca7d0..1802170c057 100644 --- a/ietf/templates/doc/document_review.html +++ b/ietf/templates/doc/document_review.html @@ -18,16 +18,16 @@ {% if doc.get_state_slug != "active" %} - - + + {% endif %} {% if other_reviews %} - - + + - - + + diff --git a/ietf/templates/liaisons/search_form.html b/ietf/templates/liaisons/search_form.html index b7a993ee5cd..6f515702eac 100644 --- a/ietf/templates/liaisons/search_form.html +++ b/ietf/templates/liaisons/search_form.html @@ -8,7 +8,9 @@ action="{% url "ietf.liaisons.views.liaison_list" state=state %}" method="get">
    + + {% endblock %} \ No newline at end of file diff --git a/ietf/templates/registration/change_password.html b/ietf/templates/registration/change_password.html index b97593a9c41..07a2c752253 100644 --- a/ietf/templates/registration/change_password.html +++ b/ietf/templates/registration/change_password.html @@ -11,6 +11,7 @@ {% endblock %} {% block content %} {% origin %} + {% if success %}

    Your password was successfully changed. @@ -44,9 +45,8 @@

    Change password

    {{ hasher.rounds }} rounds {% elif hasher.time_cost and hasher.memory_cost and hasher.parallelism %} time cost {{ hasher.time_cost }}, memory cost {{ hasher.memory_cost }} - and parallelism {{ hasher.parallelism }} - {% endif %} - . + and parallelism {{ hasher.parallelism }}{% endif %}. + Calculating offline attack time if password hashes should leak is left as an exercise for the reader. diff --git a/ietf/templates/registration/confirm_account.html b/ietf/templates/registration/confirm_account.html index 0692069b0e8..1ea40043daf 100644 --- a/ietf/templates/registration/confirm_account.html +++ b/ietf/templates/registration/confirm_account.html @@ -27,6 +27,7 @@

    Complete account creation

    {% csrf_token %} + {% bootstrap_form form %} From 12dd882a1a9e0bd8572f15db79c49901df274fa3 Mon Sep 17 00:00:00 2001 From: Lars Eggert Date: Tue, 5 Apr 2022 10:50:07 +0300 Subject: [PATCH 18/26] More HTML fixes --- .../templates/dbtemplate/template_show.html | 2 +- ietf/secr/templates/proceedings/main.html | 4 ++-- ietf/templates/doc/ballot_popup.html | 2 +- .../doc/yang-check-modal-overlay.html | 4 ++-- .../group/reset_charter_milestones.html | 4 ++-- ietf/templates/meeting/agenda.html | 12 +++++++++- ietf/templates/meeting/agenda_by_type.html | 2 ++ ietf/templates/meeting/agenda_filter.html | 14 +++++------ ietf/templates/meeting/delete_schedule.html | 5 ++-- .../meeting/edit_meeting_schedule.html | 23 +++++++++++-------- .../edit_meeting_schedule_session.html | 1 + ...t_meeting_timeslots_and_misc_sessions.html | 1 + ietf/templates/meeting/edit_timeslot.html | 1 + ietf/templates/meeting/import_minutes.html | 2 +- ietf/templates/meeting/interim_announce.html | 4 ++-- ietf/templates/meeting/interim_request.html | 2 +- .../meeting/interim_request_details.html | 11 ++++----- .../meeting/interim_request_edit.html | 2 +- .../meeting/interim_send_announcement.html | 12 +++++----- .../meeting/interim_session_buttons.html | 16 +++++++++++++ .../meeting/interim_skip_announce.html | 2 +- .../meeting/make_schedule_official.html | 5 ++-- ietf/templates/meeting/past.html | 2 +- .../meeting/previously_approved_slides.html | 2 +- .../proceedings/edit_meetinghosts.html | 2 ++ .../meeting/proceedings/material_details.html | 6 ++--- .../meeting/proceedings_overview.html | 1 + ietf/templates/meeting/properties_edit.html | 2 +- ietf/templates/meeting/requests.html | 6 ++--- ietf/templates/meeting/room-view.html | 2 +- ietf/templates/meeting/schedule_list.html | 9 +++++--- .../meeting/session_agenda_include.html | 4 ++-- .../meeting/session_buttons_include.html | 22 ++++++++++++++++-- ietf/templates/meeting/session_details.html | 7 +++--- .../meeting/session_details_panel.html | 6 ++--- ietf/templates/meeting/timeslot_edit.html | 11 +++++---- .../meeting/timeslot_edit_timeslot.html | 2 +- ietf/templates/meeting/tz-display.html | 1 + .../nomcom/view_feedback_pending.html | 2 +- ietf/templates/submit/edit_submission.html | 2 +- ietf/templates/submit/submission_status.html | 6 ++--- 41 files changed, 141 insertions(+), 85 deletions(-) diff --git a/ietf/dbtemplate/templates/dbtemplate/template_show.html b/ietf/dbtemplate/templates/dbtemplate/template_show.html index a23dfa5dd50..80fb291e8a2 100644 --- a/ietf/dbtemplate/templates/dbtemplate/template_show.html +++ b/ietf/dbtemplate/templates/dbtemplate/template_show.html @@ -33,7 +33,7 @@

    Meta information

    Template content

    -
    +

    {{ template.content }}

    diff --git a/ietf/secr/templates/proceedings/main.html b/ietf/secr/templates/proceedings/main.html index c6dad3fc77b..9f6c3b67b69 100644 --- a/ietf/secr/templates/proceedings/main.html +++ b/ietf/secr/templates/proceedings/main.html @@ -25,7 +25,7 @@

    Proceedings

    {% if meetings %}
    {% for meeting in meetings %} - + @@ -55,7 +55,7 @@

    Proceedings

    {% for meeting in interim_meetings %} - + diff --git a/ietf/templates/doc/ballot_popup.html b/ietf/templates/doc/ballot_popup.html index f5552d0bf3b..815a4f39584 100644 --- a/ietf/templates/doc/ballot_popup.html +++ b/ietf/templates/doc/ballot_popup.html @@ -10,7 +10,7 @@

    {% if personalize %}Personalize{% endif %} @@ -124,10 +124,15 @@

    {% if personalize %}

    DocumentTitleStatusTypeDownrefDocumentTitleStatusTypeDownref
    StateState {{ doc.get_state.name }}
    Other reviewsOther reviews {% for review_assignment in other_reviews %} diff --git a/ietf/templates/doc/document_status_change.html b/ietf/templates/doc/document_status_change.html index 82ee75fa957..f5934199b48 100644 --- a/ietf/templates/doc/document_status_change.html +++ b/ietf/templates/doc/document_status_change.html @@ -17,8 +17,8 @@ - - + - - + + {% regroup sorted_relations by relationship.name as relation_groups %} {% for relation_group in relation_groups %} - - + + {% endfor %} - - + - - + + - - + + - - + + + @@ -84,6 +85,7 @@

    The IETF Working Group Discussion List

    +
    Document + Document {% if doc.get_state_slug not in approved_states %} Proposed status change {% else %} @@ -33,22 +33,22 @@ {% endif %} - + {{ doc.title }} {% if snapshot %}Snapshot{% endif %}
    Last updatedLast updated {{ doc.time|date:"Y-m-d" }}
    {{ relation_group.grouper }}{{ relation_group.grouper }} {% for rel in relation_group.list %} @@ -58,8 +58,8 @@
    + State @@ -77,8 +77,8 @@
    IESGTelechat dateIESGTelechat date {% if not snapshot and user|has_role:"Area Director,Secretariat" and doc.get_state_slug not in approved_states %}
    Responsible ADResponsible AD {% if not snapshot and user|has_role:"Area Director,Secretariat" and doc.get_state_slug not in approved_states %} {% person_link doc.ad %}
    Send notices toSend notices to {% if not snapshot and user|has_role:"Area Director,Secretariat" and doc.get_state_slug not in approved_states %} {{ title }} - - + + diff --git a/ietf/templates/doc/drafts_for_ad.html b/ietf/templates/doc/drafts_for_ad.html index 8280c3bd7d4..19500731c08 100644 --- a/ietf/templates/doc/drafts_for_ad.html +++ b/ietf/templates/doc/drafts_for_ad.html @@ -14,10 +14,10 @@

    Blocking positions held by {{ ad_name }}

    Referenced RFCInternet-Draft making the referenceReferenced RFCInternet-Draft making the reference
    - - + + - + diff --git a/ietf/templates/doc/drafts_in_iesg_process.html b/ietf/templates/doc/drafts_in_iesg_process.html index 4b04b3a7a97..f9f801b6343 100644 --- a/ietf/templates/doc/drafts_in_iesg_process.html +++ b/ietf/templates/doc/drafts_in_iesg_process.html @@ -13,23 +13,23 @@

    {{ title }}

    DocumentStatusDocumentStatus Responsible ADDiscussesDiscusses
    - - + - - - + + + {% for state, docs in grouped_docs %} - + diff --git a/ietf/templates/doc/htmlized_base.html b/ietf/templates/doc/htmlized_base.html index 7d45b8a60ad..8e749ca0e3c 100644 --- a/ietf/templates/doc/htmlized_base.html +++ b/ietf/templates/doc/htmlized_base.html @@ -1,4 +1,4 @@ - + {% load ietf_filters static %} {# Copyright The IETF Trust 2021, All Rights Reserved #} {% load origin %} diff --git a/ietf/templates/doc/irsg_ballot_status.html b/ietf/templates/doc/irsg_ballot_status.html index 34628083066..017866eb255 100644 --- a/ietf/templates/doc/irsg_ballot_status.html +++ b/ietf/templates/doc/irsg_ballot_status.html @@ -13,8 +13,8 @@

    IRSG ballot status

    Area + Area {% if state.slug == "lc" %} Expires at {% else %} Date {% endif %} DocumentIntended levelADDocumentIntended levelAD
    {{ state.name }}{{ state.name }}
    - - + + {% if docs %} diff --git a/ietf/templates/doc/material/presentations-row.html b/ietf/templates/doc/material/presentations-row.html index 529ae280a80..1614bacf4ba 100644 --- a/ietf/templates/doc/material/presentations-row.html +++ b/ietf/templates/doc/material/presentations-row.html @@ -4,12 +4,12 @@
    DocumentStatusDocumentStatus
    - - - - - - + + + + + + diff --git a/ietf/templates/doc/relationship_help.html b/ietf/templates/doc/relationship_help.html index c44637080bb..97f7b038c9a 100644 --- a/ietf/templates/doc/relationship_help.html +++ b/ietf/templates/doc/relationship_help.html @@ -11,15 +11,15 @@

    Document relationships

    RevisionMeetingSession{% comment %}Agenda{% endcomment %}{% comment %}Minutes{% endcomment %}{% comment %}Buttons{% endcomment %}RevisionMeetingSession{% comment %}Agenda{% endcomment %}{% comment %}Minutes{% endcomment %}{% comment %}Buttons{% endcomment %}
    - - - + + + {% for rel in relations %} - + diff --git a/ietf/templates/doc/review/complete_review.html b/ietf/templates/doc/review/complete_review.html index 37041afb480..a27965b6c60 100644 --- a/ietf/templates/doc/review/complete_review.html +++ b/ietf/templates/doc/review/complete_review.html @@ -32,19 +32,19 @@

    RelationshipDescriptionInverse relationshipRelationshipDescriptionInverse relationship
    {{ rel.name }}{{ rel.name }} {{ rel.desc|linebreaksbr }} {{ rel.revname }}
    - + - + - + - + diff --git a/ietf/templates/doc/review/request_info.html b/ietf/templates/doc/review/request_info.html index 32c1d70634e..78508f018a7 100644 --- a/ietf/templates/doc/review/request_info.html +++ b/ietf/templates/doc/review/request_info.html @@ -5,8 +5,8 @@
    Review type:Review type: {{ assignment.review_request.team.acronym }} - {{ assignment.review_request.type }} review
    Requested version for review:Requested version for review: {{ assignment.review_request.requested_rev|default:"Current" }}
    Requested:Requested: {{ assignment.review_request.time|date:"Y-m-d" }}
    Reviewer:Reviewer: {% person_link assignment.reviewer.person %}
    - - + + - - + + - - + + - - + + - - + + - - + + {% if review_req.requested_by.name != "(System)" %} - - + + {% endif %} {% if review_req.doc.authors %} - - + + - - + + - - - - {% endif %} - - {% if review_req.comment %} - - - - - - {% if assignment.state_id != "withdrawn" and assignment.state_id != "no-response" and assignment.state_id != "rejected" %} - - - - - - - - - - + +
    RequestReview ofRequestReview of {% if review_req.requested_rev %} @@ -18,8 +18,8 @@
    Requested rev.Requested rev. {% if review_req.requested_rev %} {{ review_req.requested_rev }} @@ -32,13 +32,13 @@
    TypeType {{ review_req.type.name }} Review
    TeamTeam {% if review_req %} {{ review_req.team.name }} @@ -49,8 +49,8 @@
    DeadlineDeadline {{ review_req.deadline|date:"Y-m-d" }} {% if can_edit_deadline %} @@ -63,21 +63,21 @@
    RequestedRequested {{ review_req.time|date:"Y-m-d" }}
    Requested byRequested by {% person_link review_req.requested_by %}
    AuthorsAuthors {% for author in review_req.doc.authors %} {% person_link author %}{% if not forloop.last %},{% endif %} @@ -87,8 +87,8 @@ {% endif %} {% if wg_chairs %}
    WG chairsWG chairs {% for chair in wg_chairs %} {% person_link chair %}{% if not forloop.last %},{% endif %} @@ -98,9 +98,9 @@ {% endif %} {% if doc.time %}
    + + Draft last updated @@ -110,9 +110,9 @@ {% endif %} {% if iesg_state_summary %}
    + + IESG document state @@ -121,9 +121,9 @@
    + + Completed reviews @@ -145,9 +145,9 @@
    + + Comments @@ -167,10 +167,10 @@ {% for assignment in assignments %}
    + {% if forloop.first %}Assignment{{ assignments|pluralize }}{% endif %} + Reviewer @@ -213,9 +213,9 @@
    + + State @@ -231,9 +231,9 @@
    + + Review @@ -282,9 +282,9 @@ {% endif %} {% if assignment.review and assignment.review.external_url %}
    + + Posted at @@ -296,9 +296,9 @@ {% endif %} {% if assignment.reviewed_rev %}
    + + Reviewed rev. @@ -311,9 +311,9 @@ {% endif %} {% if assignment.result %}
    + + Review result @@ -323,9 +323,9 @@ {% endif %} {% if assignment.state_id == "completed" or assignment.state_id == "part-completed" %}
    + + Review completed: diff --git a/ietf/templates/doc/review/review_request.html b/ietf/templates/doc/review/review_request.html index 0ea4931bfc7..6ae15b08a3c 100644 --- a/ietf/templates/doc/review/review_request.html +++ b/ietf/templates/doc/review/review_request.html @@ -25,9 +25,9 @@

    History

    - - - + + + {% for h in history %} diff --git a/ietf/templates/doc/search/search_results.html b/ietf/templates/doc/search/search_results.html index c98211281fc..342ae8df852 100644 --- a/ietf/templates/doc/search/search_results.html +++ b/ietf/templates/doc/search/search_results.html @@ -14,10 +14,10 @@
    DateByDescriptionDateByDescription
    - + {% for h in meta.headers %} {% if h.title != "Title" %} - - + {% if color_ad_position %} - diff --git a/ietf/templates/doc/state_help.html b/ietf/templates/doc/state_help.html index 1d0d2dbd7c3..d7678987ac8 100644 --- a/ietf/templates/doc/state_help.html +++ b/ietf/templates/doc/state_help.html @@ -18,15 +18,15 @@

    {{ title }}

    @@ -45,11 +45,11 @@ {% for doc_group in grouped_docs %}
    + {% else %} - + {% endif %} {{ doc_group.grouper|plural:doc_group.list }} ({{ doc_group.list|length }} {{"hit"|plural:doc_group.list }})
    - - - {% if has_next_states %}{% endif %} + + + {% if has_next_states %}{% endif %} {% for state in states %} - + {% if has_next_states %} - diff --git a/ietf/templates/ipr/search_doctitle_result.html b/ietf/templates/ipr/search_doctitle_result.html index b48a0767613..8efd96f7e79 100644 --- a/ietf/templates/ipr/search_doctitle_result.html +++ b/ietf/templates/ipr/search_doctitle_result.html @@ -27,7 +27,7 @@ {% for alias in docs %} - + @@ -223,6 +224,7 @@

    Liaison statement field help

    Optional if there is text in the body, mandatory if there is not. +
    StateDescriptionNext StateStateDescriptionNext State
    {{ state.name }}{{ state.name }} {{ state.desc|safe|linebreaksbr }} @@ -45,14 +45,14 @@

    Tags

    - - + + {% for tag in tags %} - + {% endfor %} diff --git a/ietf/templates/doc/status_change/status_changes.html b/ietf/templates/doc/status_change/status_changes.html index 6779de7206e..cda38e900fa 100644 --- a/ietf/templates/doc/status_change/status_changes.html +++ b/ietf/templates/doc/status_change/status_changes.html @@ -21,14 +21,14 @@

    RFC status changes

    TagDescriptionTagDescription
    {{ tag.name }}{{ tag.name }} {{ tag.desc|linebreaksbr }}
    - - + + {% for state in state_groups %} - + diff --git a/ietf/templates/doc/submit_to_iesg.html b/ietf/templates/doc/submit_to_iesg.html index 61d2581c0ca..b2d2535d103 100644 --- a/ietf/templates/doc/submit_to_iesg.html +++ b/ietf/templates/doc/submit_to_iesg.html @@ -16,18 +16,18 @@

    DocumentTitleDocumentTitle
    {{ state.grouper }}{{ state.grouper }}
    - + - + - + - + - + - + - + - + diff --git a/ietf/templates/ietfauth/apikeys.html b/ietf/templates/ietfauth/apikeys.html index 6533bd59723..7ef96d7d9ef 100644 --- a/ietf/templates/ietfauth/apikeys.html +++ b/ietf/templates/ietfauth/apikeys.html @@ -16,20 +16,19 @@

    {% csrf_token %}
    Intended status levelIntended status level {% if warn.intended_std_level %}{% endif %} {{ doc.intended_std_level }}
    Responsible ADResponsible AD {% person_link ad %}
    Document shepherdDocument shepherd {% if warn.shepherd %}{% endif %} {% if doc.shepherd %} @@ -38,7 +38,7 @@

    Shepherd write-up existsShepherd write-up exists {% if warn.shepherd_writeup %}{% endif %} {% if shepherd_writeup %} @@ -49,7 +49,7 @@

    Also notifyAlso notify {% if notify %} {{ notify }} @@ -59,7 +59,7 @@

    Annotation tagsAnnotation tags {% if warn.tags %}{% endif %} {% if not tags %} diff --git a/ietf/templates/googlea30ad1dacffb5e5b.html b/ietf/templates/googlea30ad1dacffb5e5b.html index 2497da4bbbb..de19d57a0d9 100644 --- a/ietf/templates/googlea30ad1dacffb5e5b.html +++ b/ietf/templates/googlea30ad1dacffb5e5b.html @@ -1,7 +1,7 @@ {# Copyright The IETF Trust 2015, All Rights Reserved #} {% load origin %} {% origin %} - + diff --git a/ietf/templates/group/active_adm.html b/ietf/templates/group/active_adm.html index 5930805a3ab..4efb32e3e7c 100644 --- a/ietf/templates/group/active_adm.html +++ b/ietf/templates/group/active_adm.html @@ -11,15 +11,15 @@ <h1>Active administrative groups</h1> <table class="table table-sm table-striped tablesorter"> <thead> <tr> - <th data-sort="group">Group</th> - <th data-sort="name">Name</th> + <th scope="col" data-sort="group">Group</th> + <th scope="col" data-sort="name">Name</th> </tr> </thead> {% regroup adm by parent as grouped_groups %} {% for grouptype in grouped_groups %} <tbody> <tr> - <th colspan="2" class="table-info"> + <th scope="row" colspan="2" class="table-info"> Active {% firstof grouptype.grouper.verbose_name grouptype.grouper.name 'Top-level Administration' %} </th> </tr> diff --git a/ietf/templates/group/active_ags.html b/ietf/templates/group/active_ags.html index 9f12a11a219..a24480c884b 100644 --- a/ietf/templates/group/active_ags.html +++ b/ietf/templates/group/active_ags.html @@ -11,11 +11,11 @@ <h1>Active area groups</h1> <table class="my-3 table table-sm table-striped tablesorter"> <thead> <tr> - <th data-sort="team">Team</th> - <th data-sort="name">Name</th> - <th data-sort="ad">AD</th> - <th data-sort="secretaries">Secretaries</th> - <th data-sort="chairs">Chairs</th> + <th scope="col" data-sort="team">Team</th> + <th scope="col" data-sort="name">Name</th> + <th scope="col" data-sort="ad">AD</th> + <th scope="col" data-sort="secretaries">Secretaries</th> + <th scope="col" data-sort="chairs">Chairs</th> </tr> </thead> <tbody> diff --git a/ietf/templates/group/active_dirs.html b/ietf/templates/group/active_dirs.html index 61b9ac43f7f..637ee292d62 100644 --- a/ietf/templates/group/active_dirs.html +++ b/ietf/templates/group/active_dirs.html @@ -11,13 +11,13 @@ <h1>Active Directorates</h1> <table class="my-3 table table-sm table-striped tablesorter"> <thead> <tr> - <th data-sort="team">Team</th> - <th data-sort="name">Name</th> - <th data-sort="reviews">Reviews</th> - <th data-sort="area">Area</th> - <th data-sort="ad">AD</th> - <th data-sort="secretaries">Secretaries</th> - <th data-sort="chairs">Chairs</th> + <th scope="col" data-sort="team">Team</th> + <th scope="col" data-sort="name">Name</th> + <th scope="col" data-sort="reviews">Reviews</th> + <th scope="col" data-sort="area">Area</th> + <th scope="col" data-sort="ad">AD</th> + <th scope="col" data-sort="secretaries">Secretaries</th> + <th scope="col" data-sort="chairs">Chairs</th> </tr> </thead> <tbody> diff --git a/ietf/templates/group/active_groups.html b/ietf/templates/group/active_groups.html index 66e660afb57..f645d040218 100644 --- a/ietf/templates/group/active_groups.html +++ b/ietf/templates/group/active_groups.html @@ -11,9 +11,9 @@ <h1>Active groups</h1> <table class="table table-sm table-striped tablesorter"> <thead> <tr> - <th data-sort="type">Type</th> - <th data-sort="count">Count</th> - <th data-sort="description">Description</th> + <th scope="col" data-sort="type">Type</th> + <th scope="col" data-sort="count">Count</th> + <th scope="col" data-sort="description">Description</th> </tr> </thead> <tbody> diff --git a/ietf/templates/group/active_iabgroups.html b/ietf/templates/group/active_iabgroups.html index 04e6f511b99..82edb421262 100644 --- a/ietf/templates/group/active_iabgroups.html +++ b/ietf/templates/group/active_iabgroups.html @@ -11,16 +11,16 @@ <h1>Active IAB groups</h1> <table class="table table-sm table-striped tablesorter"> <thead> <tr> - <th data-sort="grouptype">Group</th> - <th data-sort="name">Name</th> - <th data-sort="leaders">Leads</th> + <th scope="col" data-sort="grouptype">Group</th> + <th scope="col" data-sort="name">Name</th> + <th scope="col" data-sort="leaders">Leads</th> </tr> </thead> {% regroup iabgroups by type as grouped_groups %} {% for grouptype in grouped_groups %} <tbody> - <tr class="table-info"><th colspan="3"> + <tr class="table-info"><th scope="row" colspan="3"> {% firstof grouptype.grouper.verbose_name grouptype.grouper.name %}{{ grouptype.list|pluralize }} </th></tr> </tbody> diff --git a/ietf/templates/group/active_rags.html b/ietf/templates/group/active_rags.html index 0d3bff47a1b..142e0dbc385 100644 --- a/ietf/templates/group/active_rags.html +++ b/ietf/templates/group/active_rags.html @@ -11,10 +11,10 @@ <h1>Active research area groups</h1> <table class="table table-sm table-striped tablesorter"> <thead> <tr> - <th data-sort="team">Team</th> - <th data-sort="name">Name</th> - <th data-sort="secretaries">Secretaries</th> - <th data-sort="chairs">Chairs</th> + <th scope="col" data-sort="team">Team</th> + <th scope="col" data-sort="name">Name</th> + <th scope="col" data-sort="secretaries">Secretaries</th> + <th scope="col" data-sort="chairs">Chairs</th> </tr> </thead> <tbody> diff --git a/ietf/templates/group/active_review_dirs.html b/ietf/templates/group/active_review_dirs.html index a26caa8c319..860163d382a 100644 --- a/ietf/templates/group/active_review_dirs.html +++ b/ietf/templates/group/active_review_dirs.html @@ -11,12 +11,12 @@ <h1>Active Review Directorates</h1> <table class="table table-sm table-striped tablesorter"> <thead> <tr> - <th data-sort="team">Team</th> - <th data-sort="name">Name</th> - <th data-sort="area">Area</th> - <th data-sort="ad">AD</th> - <th data-sort="secretaries">Secretaries</th> - <th data-sort="chairs">Chairs</th> + <th scope="col" data-sort="team">Team</th> + <th scope="col" data-sort="name">Name</th> + <th scope="col" data-sort="area">Area</th> + <th scope="col" data-sort="ad">AD</th> + <th scope="col" data-sort="secretaries">Secretaries</th> + <th scope="col" data-sort="chairs">Chairs</th> </tr> </thead> <tbody> diff --git a/ietf/templates/group/active_rgs.html b/ietf/templates/group/active_rgs.html index 047696b1e18..7d6a21e1f7f 100644 --- a/ietf/templates/group/active_rgs.html +++ b/ietf/templates/group/active_rgs.html @@ -20,9 +20,9 @@ <h2 class="mt-4">Active research groups</h2> <table class="table table-striped table-sm tablesorter"> <thead> <tr> - <th data-sort="group">Group</th> - <th data-sort="name">Name</th> - <th data-sort="chairs">Chairs</th> + <th scope="col" data-sort="group">Group</th> + <th scope="col" data-sort="name">Name</th> + <th scope="col" data-sort="chairs">Chairs</th> </tr> </thead> <tbody> diff --git a/ietf/templates/group/active_teams.html b/ietf/templates/group/active_teams.html index e569f4ddbf9..502d971a206 100644 --- a/ietf/templates/group/active_teams.html +++ b/ietf/templates/group/active_teams.html @@ -11,9 +11,9 @@ <h1>Active teams</h1> <table class="table table-sm table-striped tablesorter"> <thead> <tr> - <th data-sort="team">Team</th> - <th data-sort="name">Name</th> - <th data-sort="chairs">Chairs</th> + <th scope="col" data-sort="team">Team</th> + <th scope="col" data-sort="name">Name</th> + <th scope="col" data-sort="chairs">Chairs</th> </tr> </thead> <tbody> diff --git a/ietf/templates/group/active_wgs.html b/ietf/templates/group/active_wgs.html index cec95e0f8f4..0ac14520d7c 100644 --- a/ietf/templates/group/active_wgs.html +++ b/ietf/templates/group/active_wgs.html @@ -49,10 +49,10 @@ <h3 class="mt-3 navskip"> <table class="table table-sm table-striped tablesorter"> <thead> <tr> - <th data-sort="group">Group</th> - <th data-sort="responsible">Responsible AD</th> - <th data-sort="name">Name</th> - <th data-sort="chairs">Chairs</th> + <th scope="col" data-sort="group">Group</th> + <th scope="col" data-sort="responsible">Responsible AD</th> + <th scope="col" data-sort="name">Name</th> + <th scope="col" data-sort="chairs">Chairs</th> </tr> </thead> <tbody> diff --git a/ietf/templates/group/bofs.html b/ietf/templates/group/bofs.html index 041f7a5ce92..e2b4f10f062 100644 --- a/ietf/templates/group/bofs.html +++ b/ietf/templates/group/bofs.html @@ -24,9 +24,9 @@ <h1>Birds-of-a-feather (BOF) groups</h1> <table class="table table-sm table-striped tablesorter"> <thead> <tr> - <th data-sort="bof">BOF</th> - <th data-sort="name">Name</th> - <th data-sort="date">Date</th> + <th scope="col" data-sort="bof">BOF</th> + <th scope="col" data-sort="name">Name</th> + <th scope="col" data-sort="date">Date</th> </tr> </thead> <tbody> diff --git a/ietf/templates/group/change_reviewer_settings.html b/ietf/templates/group/change_reviewer_settings.html index 2b2a7cc8118..f7611b3cc5a 100644 --- a/ietf/templates/group/change_reviewer_settings.html +++ b/ietf/templates/group/change_reviewer_settings.html @@ -33,11 +33,11 @@ <h2 class="mt-5">Unavailable periods</h2> <table class="table table-sm tablesorter"> <thead> <tr> - <th data-sort="date">Period</th> - <th data-sort="availability">Availability</th> - <th data-sort="reason">Reason</th> - <th></th> - <th></th> + <th scope="col" data-sort="date">Period</th> + <th scope="col" data-sort="availability">Availability</th> + <th scope="col" data-sort="reason">Reason</th> + <th scope="col"></th> + <th scope="col"></th> </tr> </thead> {% for o in unavailable_periods %} @@ -97,9 +97,9 @@ <h2 class="mt-5">History of settings</h2> <table class="table table-sm table-striped tablesorter"> <thead> <tr> - <th data-sort="date">Date</th> - <th data-sort="by">By</th> - <th data-sort="description">Description</th> + <th scope="col" data-sort="date">Date</th> + <th scope="col" data-sort="by">By</th> + <th scope="col" data-sort="description">Description</th> </tr> </thead> {% if reviewersettings.history.all %} @@ -120,11 +120,11 @@ <h2 class="mt-5">History of unavailable periods</h2> <table class="table table-sm table-striped tablesorter"> <thead> <tr> - <th data-sort="date">Date</th> - <th data-sort="by"> + <th scope="col" data-sort="date">Date</th> + <th scope="col" data-sort="by"> By </th> - <th data-sort="description"> + <th scope="col" data-sort="description"> Description </th> </tr> diff --git a/ietf/templates/group/chartering_groups.html b/ietf/templates/group/chartering_groups.html index d8b3b97e6e7..0eec632c159 100644 --- a/ietf/templates/group/chartering_groups.html +++ b/ietf/templates/group/chartering_groups.html @@ -35,10 +35,10 @@ <h2 class="mt-3">{{ t.name }}s</h2> <table class="table table-sm table-striped tablesorter"> <thead> <tr> - <th data-sort="acronym">{{ t.name }}</th> - <th data-sort="name">Name</th> - <th data-sort="date">Date</th> - <th data-sort="status">Status</th> + <th scope="col" data-sort="acronym">{{ t.name }}</th> + <th scope="col" data-sort="name">Name</th> + <th scope="col" data-sort="date">Date</th> + <th scope="col" data-sort="status">Status</th> </tr> </thead> <tbody> diff --git a/ietf/templates/group/concluded_groups.html b/ietf/templates/group/concluded_groups.html index d2d2ea50f39..c748c2061bc 100644 --- a/ietf/templates/group/concluded_groups.html +++ b/ietf/templates/group/concluded_groups.html @@ -38,10 +38,10 @@ <h2 class="mt-5" id="{{ label|slugify }}">{{ label }}</h2> <table class="table table-sm table-striped tablesorter"> <thead> <tr> - <th data-sort="group">Group</th> - <th data-sort="name">Name</th> - <th data-sort="date">Start</th> - <th data-sort="date">Concluded</th> + <th scope="col" data-sort="group">Group</th> + <th scope="col" data-sort="name">Name</th> + <th scope="col" data-sort="date">Start</th> + <th scope="col" data-sort="date">Concluded</th> </tr> </thead> <tbody> diff --git a/ietf/templates/group/customize_workflow.html b/ietf/templates/group/customize_workflow.html index 23e04738510..3cb2ef872d5 100644 --- a/ietf/templates/group/customize_workflow.html +++ b/ietf/templates/group/customize_workflow.html @@ -35,9 +35,9 @@ <h2 class="mt-5">States</h2> <table class="table table-sm table-striped tablesorter"> <thead> <tr> - <th data-sort="state">State</th> - <th data-sort="next">Next states</th> - <th></th> + <th scope="col" data-sort="state">State</th> + <th scope="col" data-sort="next">Next states</th> + <th scope="col"></th> </tr> </thead> <tbody> @@ -114,8 +114,8 @@ <h2 class="mt-5">Tags</h2> <table class="table table-sm table-striped tablesorter"> <thead> <tr> - <th data-sort="tag">Tag</th> - <th></th> + <th scope="col" data-sort="tag">Tag</th> + <th scope="col"></th> </tr> </thead> <tbody> diff --git a/ietf/templates/group/email.html b/ietf/templates/group/email.html index c18e262d35b..5dace729112 100644 --- a/ietf/templates/group/email.html +++ b/ietf/templates/group/email.html @@ -13,8 +13,8 @@ <h2 class="mt-3">Email aliases</h2> <table class="table table-sm table-striped tablesorter"> <thead> <tr> - <th data-sort="alias">Alias</th> - <th data-sort="expansion">Expansion</th> + <th scope="col" data-sort="alias">Alias</th> + <th scope="col" data-sort="expansion">Expansion</th> </tr> </thead> <tbody> @@ -35,9 +35,9 @@ <h2 class="mt-3">Recipient expansions</h2> <table class="table table-sm table-striped tablesorter"> <thead> <tr> - <th data-sort="mail">Mail trigger</th> - <th data-sort="to">To</th> - <th data-sort="cc">Cc</th> + <th scope="col" data-sort="mail">Mail trigger</th> + <th scope="col" data-sort="to">To</th> + <th scope="col" data-sort="cc">Cc</th> </tr> </thead> <tbody> diff --git a/ietf/templates/group/email_aliases.html b/ietf/templates/group/email_aliases.html index a2cd1cf388d..415f9950c22 100644 --- a/ietf/templates/group/email_aliases.html +++ b/ietf/templates/group/email_aliases.html @@ -21,8 +21,8 @@ <h1> <table class="table table-striped table-sm tablesorter my-3"> <thead> <tr> - <th data-sort="alias">Alias</th> - <th data-sort="expansion">Expansion</th> + <th scope="col" data-sort="alias">Alias</th> + <th scope="col" data-sort="expansion">Expansion</th> </tr> </thead> {% if alias_list %} diff --git a/ietf/templates/group/group_about.html b/ietf/templates/group/group_about.html index 612fba651df..a92c6c36265 100644 --- a/ietf/templates/group/group_about.html +++ b/ietf/templates/group/group_about.html @@ -14,40 +14,40 @@ <table class="my-3 table table-sm table-borderless"> <tbody class="meta border-top"> <tr> - <th>{{ group.type.name }}</th> - <th>Name</th> + <th scope="row">{{ group.type.name }}</th> + <th scope="row">Name</th> <td class="edit"> {% if can_edit_group %} <a class="btn btn-primary btn-sm" href="{% url 'ietf.group.views.edit' acronym=group.acronym field='name' %}">Edit</a> {% endif %} </td> - <th>{{ group.name }}</th> + <th scope="row">{{ group.name }}</th> </tr> <tr> <td></td> - <th>Acronym</th> + <th scope="row">Acronym</th> <td class="edit"></td> <td>{{ group.acronym }}</td> </tr> <tr> <td></td> {% if group.parent and group.parent.type_id == "area" %} - <th>{{ group.parent.type.name }}</th> + <th scope="row">{{ group.parent.type.name }}</th> <td class="edit"></td> <td> {{ group.parent.name }} <a href="{% url "ietf.group.views.group_home" acronym=group.parent.acronym %}">({{ group.parent.acronym }})</a> </td> {% else %} - <th></th> + <td></td> <td class="edit"></td> <td></td> {% endif %} </tr> <tr> <td></td> - <th>State</th> + <th scope="row">State</th> <td class="edit"> {% if can_edit_group %} <a class="btn btn-primary btn-sm" @@ -62,7 +62,7 @@ {% if group.features.has_chartering_process %} <tr> <td></td> - <th>Charter</th> + <th scope="row">Charter</th> <td class="edit"></td> <td> {% if group.charter %} @@ -82,7 +82,7 @@ <tr id='status_update'> <td> </td> - <th> + <th scope="row"> Status update </th> <td class="edit"> @@ -114,7 +114,7 @@ <tr id='dependency_graph'> <td> </td> - <th> + <th scope="row"> Document dependencies </th> <td class="edit"> @@ -132,7 +132,7 @@ <tr> <td> </td> - <th> + <th scope="row"> Additional resources </th> <td class="edit"> @@ -165,14 +165,14 @@ {% for slug, label, roles in group.personnel %} <tr> {% if forloop.first %} - <th> + <th scope="row"> Personnel </th> {% else %} <td> </td> {% endif %} - <th> + <th scope="row"> {{ label }} </th> <td class="edit"> @@ -195,10 +195,10 @@ {% if group.list_email %} <tbody class="meta border-top"> <tr> - <th> + <th scope="row"> Mailing list </th> - <th> + <th scope="row"> Address </th> <td class="edit"> @@ -216,7 +216,7 @@ <tr> <td> </td> - <th> + <th scope="row"> To subscribe </th> <td class="edit"> @@ -234,7 +234,7 @@ <tr> <td> </td> - <th> + <th scope="row"> Archive </th> <td class="edit"> @@ -254,10 +254,10 @@ {% if group.state_id != "conclude" and group.features.has_default_jabber %} <tbody class="meta border-top"> <tr> - <th> + <th scope="row"> Jabber chat </th> - <th> + <th scope="row"> Room address </th> <td class="edit"> @@ -271,7 +271,7 @@ <tr> <td> </td> - <th> + <th scope="row"> Logs </th> <td class="edit"> diff --git a/ietf/templates/group/history.html b/ietf/templates/group/history.html index 13c2dd4696a..63f6917f252 100644 --- a/ietf/templates/group/history.html +++ b/ietf/templates/group/history.html @@ -19,9 +19,9 @@ <h2 class="my-3">Group history</h2> <table class="table table-sm table-striped tablesorter"> <thead> <tr> - <th data-sort="date">Date</th> - <th data-sort="by">By</th> - <th data-sort="action">Action</th> + <th scope="col" data-sort="date">Date</th> + <th scope="col" data-sort="by">By</th> + <th scope="col" data-sort="action">Action</th> </tr> </thead> {% if events %} diff --git a/ietf/templates/group/index.html b/ietf/templates/group/index.html index fc92742b82e..a2e0be7062a 100644 --- a/ietf/templates/group/index.html +++ b/ietf/templates/group/index.html @@ -12,9 +12,9 @@ <h1>Other RFC streams</h1> <table class="my-3 table table-sm table-striped tablesorter"> <thead> <tr> - <th data-sort="stream">Stream</th> - <th data-sort="owner">Owner</th> - <th data-sort="manager">Stream manager</th> + <th scope="col" data-sort="stream">Stream</th> + <th scope="col" data-sort="owner">Owner</th> + <th scope="col" data-sort="manager">Stream manager</th> </tr> </thead> <tbody> diff --git a/ietf/templates/group/materials.html b/ietf/templates/group/materials.html index 256746834b0..a651e8cdfbd 100644 --- a/ietf/templates/group/materials.html +++ b/ietf/templates/group/materials.html @@ -16,12 +16,12 @@ <h2 class="mt-3">{{ doc_type.name }}</h2> <table class="table table-sm table-striped materials tablesorter"> <thead> <tr> - <th data-sort="title">Title</th> - <th data-sort="abstract">Abstract</th> - <th data-sort="num">Curr. rev.</th> - <th data-sort="date">Date</th> - <th data-sort="last">Last presented</th> - <th data-sort="on">On agenda</th> + <th scope="col" data-sort="title">Title</th> + <th scope="col" data-sort="abstract">Abstract</th> + <th scope="col" data-sort="num">Curr. rev.</th> + <th scope="col" data-sort="date">Date</th> + <th scope="col" data-sort="last">Last presented</th> + <th scope="col" data-sort="on">On agenda</th> </tr> </thead> <tbody> diff --git a/ietf/templates/group/meetings.html b/ietf/templates/group/meetings.html index c8d1b7730ef..03c74dcf472 100644 --- a/ietf/templates/group/meetings.html +++ b/ietf/templates/group/meetings.html @@ -25,10 +25,10 @@ <h2 class="mt-3" id="inprogressmeets">Meetings in progress</h2> <table class="table table-sm table-striped tablesorter"> <thead> <tr> - <th data-sort="meeting">Meeting</th> - <th data-sort="date">Date</th> - <th></th> - <th>Materials</th> + <th scope="col" data-sort="meeting">Meeting</th> + <th scope="col" data-sort="date">Date</th> + <th scope="col"></th> + <th scope="col">Materials</th> </tr> </thead> <tbody> @@ -49,10 +49,10 @@ <h2 class="mt-3" id="futuremeets"> <table class="table table-sm table-striped tablesorter"> <thead> <tr> - <th data-sort="meeting">Meeting</th> - <th data-sort="date">Date</th> - <th></th> - <th>Materials</th> + <th scope="col" data-sort="meeting">Meeting</th> + <th scope="col" data-sort="date">Date</th> + <th scope="col"></th> + <th scope="col">Materials</th> </tr> </thead> {% with sessions=future show_request=True show_ical=True can_edit_materials=can_edit %} @@ -67,10 +67,10 @@ <h2 class="mt-3" id="pastmeets">Past Meetings</h2> <table class="table table-sm table-striped tablesorter"> <thead> <tr> - <th data-sort="meeting">Meeting</th> - <th data-sort="date">Date</th> - <th></th> - <th>Materials</th> + <th scope="col" data-sort="meeting">Meeting</th> + <th scope="col" data-sort="date">Date</th> + <th scope="col"></th> + <th scope="col">Materials</th> </tr> </thead> <tbody> diff --git a/ietf/templates/group/milestones.html b/ietf/templates/group/milestones.html index 1d3d2ed96f6..90e62449be3 100644 --- a/ietf/templates/group/milestones.html +++ b/ietf/templates/group/milestones.html @@ -20,15 +20,15 @@ <h2 class="my-3"> <table class="table table-sm table-striped tablesorter"> <thead> <tr> - <th data-sort="num"> + <th scope="col" data-sort="num"> {% if group.uses_milestone_dates %} Date {% else %} Order {% endif %} </th> - <th data-sort="milestone">Milestone</th> - <th data-sort="docs">Associated documents</th> + <th scope="col" data-sort="milestone">Milestone</th> + <th scope="col" data-sort="docs">Associated documents</th> </tr> </thead> <tbody> diff --git a/ietf/templates/group/review_requests.html b/ietf/templates/group/review_requests.html index e7ac1891bfa..2460f42bd54 100644 --- a/ietf/templates/group/review_requests.html +++ b/ietf/templates/group/review_requests.html @@ -20,17 +20,17 @@ <h2 class="mt-5" id="unassigned-and-open-review-requests">Unassigned and open re <table class="table table-sm table-striped tablesorter"> <thead> <tr> - <th data-sort="request">Request</th> - <th data-sort="type">Type</th> - <th data-sort="date">Requested</th> - <th data-sort="date">Deadline</th> - <th data-sort="state">Document state</th> - <th data-sort="date">IESG Telechat</th> + <th scope="col" data-sort="request">Request</th> + <th scope="col" data-sort="type">Type</th> + <th scope="col" data-sort="date">Requested</th> + <th scope="col" data-sort="date">Deadline</th> + <th scope="col" data-sort="state">Document state</th> + <th scope="col" data-sort="date">IESG Telechat</th> </tr> </thead> <tbody> <tr class="table-info" id="unassigned-review-requests"> - <th colspan="7">Unassigned review requests</th> + <th scope="row" colspan="7">Unassigned review requests</th> </tr> </tbody> <tbody> @@ -80,7 +80,7 @@ <h2 class="mt-5" id="unassigned-and-open-review-requests">Unassigned and open re </thead> <tbody> <tr class="table-info" id="open_review_assignments"> - <th colspan="7">Open review requests</th> + <th scope="row" colspan="7">Open review requests</th> </tr> </tbody> <tbody> @@ -129,27 +129,27 @@ <h2 class="mt-5" id="closed-review-requests">Closed review requests and assignme <table class="table table-sm table-striped tablesorter"> <thead> <tr> - <th data-sort="request">Request</th> - <th data-sort="type"> + <th scope="col" data-sort="request">Request</th> + <th scope="col" data-sort="type"> Type </th> - <th data-sort="date"> + <th scope="col" data-sort="date"> Requested </th> - <th data-sort="date"> + <th scope="col" data-sort="date"> Deadline </th> - <th data-sort="date"> + <th scope="col" data-sort="date"> Closed </th> - <th data-sort="state"> + <th scope="col" data-sort="state"> State </th> </tr> </thead> <tbody> <tr class="table-info"> - <th colspan="8"> + <th scope="row" colspan="8"> Closed review requests </th> </tr> @@ -210,7 +210,7 @@ <h2 class="mt-5" id="closed-review-requests">Closed review requests and assignme </thead> <tbody> <tr class="table-info"> - <th colspan="8"> + <th scope="row" colspan="8"> Closed review assignments </th> </tr> diff --git a/ietf/templates/group/reviewer_overview.html b/ietf/templates/group/reviewer_overview.html index 839583d9441..3c8bc266e12 100644 --- a/ietf/templates/group/reviewer_overview.html +++ b/ietf/templates/group/reviewer_overview.html @@ -46,11 +46,11 @@ <h2 class="mt-3">Reviewers</h2> <table class="table reviewer-overview tablesorter"> <thead> <tr> - <th data-sort="num">Next</th> - <th data-sort="reviewer">Reviewer</th> - <th data-sort="assigned">Recent history</th> - <th data-sort="num">Days since completed</th> - <th data-sort="settings">Settings</th> + <th scope="col" data-sort="num">Next</th> + <th scope="col" data-sort="reviewer">Reviewer</th> + <th scope="col" data-sort="assigned">Recent history</th> + <th scope="col" data-sort="num">Days since completed</th> + <th scope="col" data-sort="settings">Settings</th> </tr> </thead> <tbody> @@ -70,11 +70,11 @@ <h2 class="mt-3">Reviewers</h2> <table class="table table-sm table-borderless"> <thead> <tr> - <th>Assigned</th> - <th>Deadline</th> - <th>State</th> - <th>Review time</th> - <th>Document</th> + <th scope="col">Assigned</th> + <th scope="col">Deadline</th> + <th scope="col">State</th> + <th scope="col">Review time</th> + <th scope="col">Document</th> </tr> </thead> {% for assn_pk, req_pk, doc_name, reviewed_rev, assigned_time, deadline, state, assignment_to_closure_days in person.latest_reqs %} diff --git a/ietf/templates/help/state_index.html b/ietf/templates/help/state_index.html index f509daf7bd6..29233cca094 100644 --- a/ietf/templates/help/state_index.html +++ b/ietf/templates/help/state_index.html @@ -14,8 +14,8 @@ <h1>Document state index</h1> <table class="table table-sm table-striped tablesorter"> <thead> <tr> - <th data-sort="document">Document</th> - <th data-sort="state">State groups</th> + <th scope="col" data-sort="document">Document</th> + <th scope="col" data-sort="state">State groups</th> </tr> </thead> <tbody> diff --git a/ietf/templates/help/states.html b/ietf/templates/help/states.html index c694919b755..b68625811d2 100644 --- a/ietf/templates/help/states.html +++ b/ietf/templates/help/states.html @@ -11,15 +11,15 @@ <h1>{{ type.label|cut:"state"|cut:"State" }} states</h1> <table class="table table-sm table-striped tablesorter"> <thead> <tr> - <th data-sort="state">State</th> - <th data-sort="desc">Description</th> - <th data-sort="next">Next states</th> + <th scope="col" data-sort="state">State</th> + <th scope="col" data-sort="desc">Description</th> + <th scope="col" data-sort="next">Next states</th> </tr> </thead> <tbody> {% for state in states %} <tr> - <th>{{ state.name }}</th> + <th scope="row">{{ state.name }}</th> <td>{{ state.desc|safe }}</td> <td> <ul> diff --git a/ietf/templates/iesg/agenda_documents.html b/ietf/templates/iesg/agenda_documents.html index 7bd32dc9e09..4d5269dbe09 100644 --- a/ietf/templates/iesg/agenda_documents.html +++ b/ietf/templates/iesg/agenda_documents.html @@ -45,13 +45,13 @@ <h2> <table class="table table-sm table-striped tablesorter"> <thead> <tr> - <th></th> - <th data-sort="document">Document</th> - <th data-sort="date">Date</th> - <th data-sort="status">Status</th> - <th class="d-none d-sm-table-cell" data-sort="ipr">IPR</th> - <th class="d-none d-sm-table-cell" data-sort="ad">AD/Shepherd</th> - <th></th> + <th scope="col"></th> + <th scope="col" data-sort="document">Document</th> + <th scope="col" data-sort="date">Date</th> + <th scope="col" data-sort="status">Status</th> + <th scope="col" class="d-none d-sm-table-cell" data-sort="ipr">IPR</th> + <th scope="col" class="d-none d-sm-table-cell" data-sort="ad">AD/Shepherd</th> + <th scope="col"></th> </tr> </thead> <tbody> diff --git a/ietf/templates/iesg/discusses.html b/ietf/templates/iesg/discusses.html index 7380477b890..48828f45c4f 100644 --- a/ietf/templates/iesg/discusses.html +++ b/ietf/templates/iesg/discusses.html @@ -40,10 +40,10 @@ <h1>IESG discuss positions</h1> <table class="table table-sm table-striped tablesorter"> <thead> <tr> - <th data-sort="document">Document</th> - <th data-sort="status">Status</th> - <th data-sort="ad" class="d-none d-sm-table-cell">Responsible AD</th> - <th data-sort="discusses">Discusses</th> + <th scope="col" data-sort="document">Document</th> + <th scope="col" data-sort="status">Status</th> + <th scope="col" data-sort="ad" class="d-none d-sm-table-cell">Responsible AD</th> + <th scope="col" data-sort="discusses">Discusses</th> </tr> </thead> <tbody id="doclist"> diff --git a/ietf/templates/iesg/moderator_package.html b/ietf/templates/iesg/moderator_package.html index 63461d292f7..638a454c5f0 100644 --- a/ietf/templates/iesg/moderator_package.html +++ b/ietf/templates/iesg/moderator_package.html @@ -34,7 +34,7 @@ Some parts Copyright (c) 2009 The IETF Trust, all rights reserved. {% endcomment %} {% load ietf_filters static %} -<!doctype html> +<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> diff --git a/ietf/templates/iesg/past_documents.html b/ietf/templates/iesg/past_documents.html index d3583c1d1c2..802dcc4745c 100644 --- a/ietf/templates/iesg/past_documents.html +++ b/ietf/templates/iesg/past_documents.html @@ -22,11 +22,11 @@ <h1> <table class="table table-sm table-striped tablesorter"> <thead> <tr> - <th data-sort="doc">Document</th> + <th scope="col" data-sort="doc">Document</th> <th class="d-none d-sm-table-cell" data-sort="date">Telechat Date</th> - <th data-sort="status">Status</th> + <th scope="col" data-sort="status">Status</th> <th class="d-none d-sm-table-cell" data-sort="ad">Responsible AD</th> - <th data-sort="discusses">Discusses</th> + <th scope="col" data-sort="discusses">Discusses</th> </tr> </thead> {% if docs %} diff --git a/ietf/templates/ietfauth/apikeys.html b/ietf/templates/ietfauth/apikeys.html index 08983085ee1..6533bd59723 100644 --- a/ietf/templates/ietfauth/apikeys.html +++ b/ietf/templates/ietfauth/apikeys.html @@ -20,13 +20,13 @@ <h1> {% if forloop.first %} <thead> <tr > - <th data-sort="endpoint">Endpoint</th> - <th data-sort="created">Created</th> - <th data-sort="date">Last use</th> - <th data-sort="count">Count</th> - <th data-sort="valid">Valid</th> - <th data-sort="key">Key hash</th> - <th></th> + <th scope="col" data-sort="endpoint">Endpoint</th> + <th scope="col" data-sort="created">Created</th> + <th scope="col" data-sort="date">Last use</th> + <th scope="col" data-sort="count">Count</th> + <th scope="col" data-sort="valid">Valid</th> + <th scope="col" data-sort="key">Key hash</th> + <th scope="col"></th> </tr> </thead> {% endif %} diff --git a/ietf/templates/ietfauth/review_overview.html b/ietf/templates/ietfauth/review_overview.html index 9ed77aa6b76..935d4130e92 100644 --- a/ietf/templates/ietfauth/review_overview.html +++ b/ietf/templates/ietfauth/review_overview.html @@ -19,12 +19,12 @@ <h2 class="mt-4">Assigned reviews</h2> <table class="table table-sm table-striped tablesorter"> <thead> <tr> - <th data-sort="document">Document</th> - <th data-sort="version">Version Requested</th> - <th data-sort="num">Current Version</th> - <th data-sort="team">Team</th> - <th data-sort="type">Type</th> - <th data-sort="date">Deadline</th> + <th scope="col" data-sort="document">Document</th> + <th scope="col" data-sort="version">Version Requested</th> + <th scope="col" data-sort="num">Current Version</th> + <th scope="col" data-sort="team">Team</th> + <th scope="col" data-sort="type">Type</th> + <th scope="col" data-sort="date">Deadline</th> </tr> </thead> <tbody> @@ -67,13 +67,13 @@ <h2 class="mt-4">Latest closed review assignments</h2> <table class="table table-sm table-striped tablesorter"> <thead> <tr> - <th data-sort="document">Document</th> - <th data-sort="num">Version Reviewed</th> - <th data-sort="team">Team</th> - <th data-sort="type">Type</th> - <th data-sort="date">Deadline</th> - <th data-sort="state">State</th> - <th data-sort="result">Result</th> + <th scope="col" data-sort="document">Document</th> + <th scope="col" data-sort="num">Version Reviewed</th> + <th scope="col" data-sort="team">Team</th> + <th scope="col" data-sort="type">Type</th> + <th scope="col" data-sort="date">Deadline</th> + <th scope="col" data-sort="state">State</th> + <th scope="col" data-sort="result">Result</th> </tr> </thead> <tbody> @@ -125,13 +125,13 @@ <h2 class="mt-4"> <table class="table table-sm table-striped tablesorter"> <thead> <tr> - <th> + <th scope="col"> Document </th> - <th> + <th scope="col"> Team </th> - <th> + <th scope="col"> </th> </tr> </thead> @@ -186,17 +186,17 @@ <h2 class="mt-4"> <table class="table table-sm table-striped tablesorter"> <thead> <tr> - <th> + <th scope="col"> Setting </th> - <th> + <th scope="col"> Value </th> </tr> </thead> <tbody> <tr> - <th> + <th scope="row"> Can review </th> <td> @@ -204,7 +204,7 @@ <h2 class="mt-4"> </td> </tr> <tr> - <th> + <th scope="row"> Skip next assignments </th> <td> @@ -212,7 +212,7 @@ <h2 class="mt-4"> </td> </tr> <tr> - <th> + <th scope="row"> Filter regexp </th> <td> @@ -224,7 +224,7 @@ <h2 class="mt-4"> </td> </tr> <tr> - <th> + <th scope="row"> Remind days before deadline </th> <td> @@ -232,7 +232,7 @@ <h2 class="mt-4"> </td> </tr> <tr> - <th> + <th scope="row"> Periodic reminder of open reviews every X days </th> <td> @@ -240,7 +240,7 @@ <h2 class="mt-4"> </td> </tr> <tr> - <th> + <th scope="row"> Select me next for an assignment </th> <td> @@ -248,7 +248,7 @@ <h2 class="mt-4"> </td> </tr> <tr> - <th> + <th scope="row"> Unavailable periods </th> <td> diff --git a/ietf/templates/ipr/details_history.html b/ietf/templates/ipr/details_history.html index f035bf8f5d4..f12d90aa5a4 100644 --- a/ietf/templates/ipr/details_history.html +++ b/ietf/templates/ipr/details_history.html @@ -31,10 +31,10 @@ <h1> <table class="table table-sm table-striped tablesorter"> <thead> <tr> - <th data-sort="date">Date</th> - <th data-sort="type">Type</th> - <th data-sort="by">By</th> - <th data-sort="text">Text</th> + <th scope="col" data-sort="date">Date</th> + <th scope="col" data-sort="type">Type</th> + <th scope="col" data-sort="by">By</th> + <th scope="col" data-sort="text">Text</th> </tr> </thead> {% if events %} diff --git a/ietf/templates/ipr/details_view.html b/ietf/templates/ipr/details_view.html index 1c811c107a2..794379979eb 100644 --- a/ietf/templates/ipr/details_view.html +++ b/ietf/templates/ipr/details_view.html @@ -149,29 +149,29 @@ <h2 class="mt-5"> {% if prev %} <thead> <tr class="text-center"> - <th class="ipr-prev col-5"> + <th scope="col" class="ipr-prev col-5"> {% if prev.state.slug == "posted" %} Previous (<a href="{% url "ietf.ipr.views.show" id=prev.id %}">#{{ prev.id }}</a>) {% else %} Previous (#{{ prev.id }}, {{ prev.state }}) {% endif %} </th> - <th></th> - <th class="col-5">This (#{{ ipr.id }})</th> + <th scope="col"></th> + <th scope="col" class="col-5">This (#{{ ipr.id }})</th> </tr> </thead> {% else %} <thead> <tr> - <th class="col-3"></th> - <th class="col-9"></th> + <th scope="col" class="col-3"></th> + <th scope="col" class="col-9"></th> </tr> </thead> {% endif %} <tbody> <tr> {% if prev %}<td class="ipr-prev">{{ prev.holder_legal_name }}</td>{% endif %} - <th class="ipr-label {% if prev %}text-center table-secondary{% endif %}">Holder legal name</th> + <th scope="row" class="ipr-label {% if prev %}text-center table-secondary{% endif %}">Holder legal name</th> <td class="ipr-this">{{ ipr.holder_legal_name }}</td> </tr> </tbody> @@ -182,23 +182,23 @@ <h2 class="mt-5">{% cycle section %}. Patent Holder's Contact for License Applic {% if prev %} <thead> <tr class="text-center"> - <th class="ipr-prev col-5"> + <th scope="col" class="ipr-prev col-5"> {% if prev.state.slug == "posted" %} Previous (<a href="{% url "ietf.ipr.views.show" id=prev.id %}">#{{ prev.id }}</a>) {% else %} Previous (#{{ prev.id }}, {{ prev.state }}) {% endif %} </th> - <th></th> - <th class="col-5">This (#{{ ipr.id }})</th> + <th scope="col"></th> + <th scope="col" class="col-5">This (#{{ ipr.id }})</th> </tr> </thead> {% else %} <thead> <tr> - <th class="col-3"> + <th scope="col" class="col-3"> </th> - <th class="col-9"> + <th scope="col" class="col-9"> </th> </tr> </thead> @@ -210,7 +210,7 @@ <h2 class="mt-5">{% cycle section %}. Patent Holder's Contact for License Applic {{ prev.holder_contact_name }} </td> {% endif %} - <th class="ipr-label {% if prev %}text-center table-secondary{% endif %}"> + <th scope="row" class="ipr-label {% if prev %}text-center table-secondary{% endif %}"> Holder contact name </th> <td class="ipr-this"> @@ -223,7 +223,7 @@ <h2 class="mt-5">{% cycle section %}. Patent Holder's Contact for License Applic {{ prev.holder_contact_email|linkify }} </td> {% endif %} - <th class="ipr-label {% if prev %}text-center table-secondary{% endif %}"> + <th scope="row" class="ipr-label {% if prev %}text-center table-secondary{% endif %}"> Holder contact email </th> <td class="ipr-this"> @@ -236,7 +236,7 @@ <h2 class="mt-5">{% cycle section %}. Patent Holder's Contact for License Applic {{ prev.holder_contact_info|linebreaks }} </td> {% endif %} - <th class="ipr-label {% if prev %}text-center table-secondary{% endif %}"> + <th scope="row" class="ipr-label {% if prev %}text-center table-secondary{% endif %}"> Holder contact info </th> <td class="ipr-this"> @@ -254,16 +254,16 @@ <h2 class="mt-5"> {% if prev %} <thead> <tr class="text-center"> - <th class="ipr-prev col-5"> + <th scope="col" class="ipr-prev col-5"> {% if prev.state.slug == "posted" %} Previous (<a href="{% url "ietf.ipr.views.show" id=prev.id %}">#{{ prev.id }}</a>) {% else %} Previous (#{{ prev.id }}, {{ prev.state }}) {% endif %} </th> - <th> + <th scope="col"> </th> - <th class="col-5"> + <th scope="col" class="col-5"> This (#{{ ipr.id }}) </th> </tr> @@ -271,9 +271,9 @@ <h2 class="mt-5"> {% else %} <thead> <tr> - <th class="col-3"> + <th scope="col" class="col-3"> </th> - <th class="col-9"> + <th scope="col" class="col-9"> </th> </tr> </thead> @@ -285,7 +285,7 @@ <h2 class="mt-5"> {{ prev.ietfer_name }} </td> {% endif %} - <th class="ipr-label {% if prev %}text-center table-secondary{% endif %}"> + <th scope="row" class="ipr-label {% if prev %}text-center table-secondary{% endif %}"> Name </th> <td class="ipr-this"> @@ -298,7 +298,7 @@ <h2 class="mt-5"> {{ prev.ietfer_contact_email|linkify }} </td> {% endif %} - <th class="ipr-label {% if prev %}text-center table-secondary{% endif %}"> + <th scope="row" class="ipr-label {% if prev %}text-center table-secondary{% endif %}"> Email </th> <td class="ipr-this"> @@ -311,7 +311,7 @@ <h2 class="mt-5"> {{ prev.ietfer_contact_info|linebreaks }} </td> {% endif %} - <th class="ipr-label {% if prev %}text-center table-secondary{% endif %}"> + <th scope="row" class="ipr-label {% if prev %}text-center table-secondary{% endif %}"> Other info </th> <td class="ipr-this"> @@ -329,16 +329,16 @@ <h2 class="mt-5"> {% if prev %} <thead> <tr class="text-center"> - <th class="ipr-prev col-5"> + <th scope="col" class="ipr-prev col-5"> {% if prev.state.slug == "posted" %} Previous (<a href="{% url "ietf.ipr.views.show" id=prev.id %}">#{{ prev.id }}</a>) {% else %} Previous (#{{ prev.id }}, {{ prev.state }}) {% endif %} </th> - <th> + <th scope="col"> </th> - <th class="col-5"> + <th scope="col" class="col-5"> This (#{{ ipr.id }}) </th> </tr> @@ -346,7 +346,7 @@ <h2 class="mt-5"> {% else %} <thead> <tr> - <th> + <th scope="col"> </th> </tr> </thead> @@ -390,7 +390,7 @@ <h2 class="mt-5"> {% endif %} </dl> </td> - <th class="ipr-label {% if prev %}text-center table-secondary{% endif %}"> + <th scope="row" class="ipr-label {% if prev %}text-center table-secondary{% endif %}"> </th> {% endif %} <td class="ipr-this"> @@ -446,16 +446,16 @@ <h2 class="mt-5"> {% if prev %} <thead> <tr class="text-center"> - <th class="ipr-prev col-5"> + <th scope="col" class="ipr-prev col-5"> {% if prev.state.slug == "posted" %} Previous (<a href="{% url "ietf.ipr.views.show" id=prev.id %}">#{{ prev.id }}</a>) {% else %} Previous (#{{ prev.id }}, {{ prev.state }}) {% endif %} </th> - <th> + <th scope="col"> </th> - <th class="col-5"> + <th scope="col" class="col-5"> This (#{{ ipr.id }}) </th> </tr> @@ -463,9 +463,9 @@ <h2 class="mt-5"> {% else %} <thead> <tr> - <th class="col-3"> + <th scope="col" class="col-3"> </th> - <th class="col-9"> + <th scope="col" class="col-9"> </th> </tr> </thead> @@ -477,7 +477,7 @@ <h2 class="mt-5"> {{ prev.patent_info|linebreaks }} </td> {% endif %} - <th class="ipr-label {% if prev %}text-center table-secondary{% endif %}"> + <th scope="row" class="ipr-label {% if prev %}text-center table-secondary{% endif %}"> Patent, Serial, Publication, Registration, or Application/File number(s) @@ -495,16 +495,16 @@ <h2 class="mt-5"> {% if prev %} <thead> <tr class="text-center"> - <th class="ipr-prev col-5"> + <th scope="col" class="ipr-prev col-5"> {% if prev.state.slug == "posted" %} Previous (<a href="{% url "ietf.ipr.views.show" id=prev.id %}">#{{ prev.id }}</a>) {% else %} Previous (#{{ prev.id }}, {{ prev.state }}) {% endif %} </th> - <th> + <th scope="col"> </th> - <th class="col-5"> + <th scope="col" class="col-5"> This (#{{ ipr.id }}) </th> </tr> @@ -512,9 +512,9 @@ <h2 class="mt-5"> {% else %} <thead> <tr> - <th class="col-3"> + <th scope="col" class="col-3"> </th> - <th class="col-9"> + <th scope="col" class="col-9"> </th> </tr> </thead> @@ -526,7 +526,7 @@ <h2 class="mt-5"> {{ prev.has_patent_pending|yesno:"Yes,No" }} </td> {% endif %} - <th class="ipr-label {% if prev %}text-center table-secondary{% endif %}"> + <th scope="row" class="ipr-label {% if prev %}text-center table-secondary{% endif %}"> Has patent pending </th> <td class="ipr-this"> @@ -564,16 +564,16 @@ <h2 class="mt-5"> {% if prev %} <thead> <tr class="text-center"> - <th class="ipr-prev col-5"> + <th scope="col" class="ipr-prev col-5"> {% if prev.state.slug == "posted" %} Previous (<a href="{% url "ietf.ipr.views.show" id=prev.id %}">#{{ prev.id }}</a>) {% else %} Previous (#{{ prev.id }}, {{ prev.state }}) {% endif %} </th> - <th> + <th scope="col"> </th> - <th class="col-5"> + <th scope="col" class="col-5"> This (#{{ ipr.id }}) </th> </tr> @@ -581,9 +581,9 @@ <h2 class="mt-5"> {% else %} <thead> <tr> - <th class="col-3"> + <th scope="col" class="col-3"> </th> - <th class="col-9"> + <th scope="col" class="col-9"> </th> </tr> </thead> @@ -599,7 +599,7 @@ <h2 class="mt-5"> {% endif %} </td> {% endif %} - <th class="ipr-label {% if prev %}text-center table-secondary{% endif %}"> + <th scope="row" class="ipr-label {% if prev %}text-center table-secondary{% endif %}"> Licensing </th> <td class="ipr-this"> @@ -616,7 +616,7 @@ <h2 class="mt-5"> {{ prev.licensing_comments|default:"(No information submitted)"|linebreaks }} </td> {% endif %} - <th class="ipr-label {% if prev %}text-center table-secondary{% endif %}"> + <th scope="row" class="ipr-label {% if prev %}text-center table-secondary{% endif %}"> Licensing information, comments, notes, or URL for further information </th> <td class="ipr-this"> @@ -638,16 +638,16 @@ <h2 class="mt-5"> {% if prev %} <thead> <tr class="text-center"> - <th class="ipr-prev col-5"> + <th scope="col" class="ipr-prev col-5"> {% if prev.state.slug == "posted" %} Previous (<a href="{% url "ietf.ipr.views.show" id=prev.id %}">#{{ prev.id }}</a>) {% else %} Previous (#{{ prev.id }}, {{ prev.state }}) {% endif %} </th> - <th> + <th scope="col"> </th> - <th class="col-5"> + <th scope="col" class="col-5"> This (#{{ ipr.id }}) </th> </tr> @@ -655,9 +655,9 @@ <h2 class="mt-5"> {% else %} <thead> <tr> - <th class="col-3"> + <th scope="col" class="col-3"> </th> - <th class="col-9"> + <th scope="col" class="col-9"> </th> </tr> </thead> @@ -669,7 +669,7 @@ <h2 class="mt-5"> {{ prev.statement|linebreaks }} </td> {% endif %} - <th class="ipr-label {% if prev %}text-center table-secondary{% endif %}"> + <th scope="row" class="ipr-label {% if prev %}text-center table-secondary{% endif %}"> Statement </th> <td class="ipr-this"> @@ -686,16 +686,16 @@ <h2 class="mt-5"> {% if prev %} <thead> <tr class="text-center"> - <th class="ipr-prev col-5"> + <th scope="col" class="ipr-prev col-5"> {% if prev.state.slug == "posted" %} Previous (<a href="{% url "ietf.ipr.views.show" id=prev.id %}">#{{ prev.id }}</a>) {% else %} Previous (#{{ prev.id }}, {{ prev.state }}) {% endif %} </th> - <th> + <th scope="col"> </th> - <th class="col-5"> + <th scope="col" class="col-5"> This (#{{ ipr.id }}) </th> </tr> @@ -703,9 +703,9 @@ <h2 class="mt-5"> {% else %} <thead> <tr> - <th class="col-3"> + <th scope="col" class="col-3"> </th> - <th class="col-9"> + <th scope="col" class="col-9"> </th> </tr> </thead> @@ -717,7 +717,7 @@ <h2 class="mt-5"> {{ prev.submitter_name }} </td> {% endif %} - <th class="ipr-label {% if prev %}text-center table-secondary{% endif %}"> + <th scope="row" class="ipr-label {% if prev %}text-center table-secondary{% endif %}"> Submitter name </th> <td class="ipr-this"> @@ -730,7 +730,7 @@ <h2 class="mt-5"> {{ prev.submitter_email|linkify }} </td> {% endif %} - <th class="ipr-label {% if prev %}text-center table-secondary{% endif %}"> + <th scope="row" class="ipr-label {% if prev %}text-center table-secondary{% endif %}"> Submitter email </th> <td class="ipr-this"> @@ -747,16 +747,16 @@ <h2 class="mt-5"> {% if prev %} <thead> <tr class="text-center"> - <th class="ipr-prev col-5"> + <th scope="col" class="ipr-prev col-5"> {% if prev.state.slug == "posted" %} Previous (<a href="{% url "ietf.ipr.views.show" id=prev.id %}">#{{ prev.id }}</a>) {% else %} Previous (#{{ prev.id }}, {{ prev.state }}) {% endif %} </th> - <th> + <th scope="col"> </th> - <th class="col-5"> + <th scope="col" class="col-5"> This (#{{ ipr.id }}) </th> </tr> @@ -764,9 +764,9 @@ <h2 class="mt-5"> {% else %} <thead> <tr> - <th class="col-3"> + <th scope="col" class="col-3"> </th> - <th class="col-9"> + <th scope="col" class="col-9"> </th> </tr> </thead> @@ -778,7 +778,7 @@ <h2 class="mt-5"> {{ prev.notes|urlize_ietf_docs|linkify|linebreaks }} </td> {% endif %} - <th class="ipr-label {% if prev %}text-center table-secondary{% endif %}"> + <th scope="row" class="ipr-label {% if prev %}text-center table-secondary{% endif %}"> Additional notes </th> <td class="ipr-this"> diff --git a/ietf/templates/ipr/ipr_table.html b/ietf/templates/ipr/ipr_table.html index 5fe4d3497e5..ce3982c9873 100644 --- a/ietf/templates/ipr/ipr_table.html +++ b/ietf/templates/ipr/ipr_table.html @@ -5,12 +5,12 @@ <table class="table table-sm table-striped tablesorter ipr-table"> <thead> <tr> - <th data-sort="date">Date</th> - <th data-sort="num">ID</th> - <th data-sort="title">Title</th> + <th scope="col" data-sort="date">Date</th> + <th scope="col" data-sort="num">ID</th> + <th scope="col" data-sort="title">Title</th> {% if administrative_list == 'pending' %} - <th data-sort="query">Query</th> - <th data-sort="due">Response due</th> + <th scope="col" data-sort="query">Query</th> + <th scope="col" data-sort="due">Response due</th> {% endif %} </tr> </thead> diff --git a/ietf/templates/ipr/search_doc_result.html b/ietf/templates/ipr/search_doc_result.html index c753bb080ad..333b1e33fb4 100644 --- a/ietf/templates/ipr/search_doc_result.html +++ b/ietf/templates/ipr/search_doc_result.html @@ -17,9 +17,9 @@ <table class="table table-sm table-striped tablesorter"> <thead> <tr> - <th data-sort="date">Date</th> - <th data-sort="id">ID</th> - <th data-sort="statement">Statement</th> + <th scope="col" data-sort="date">Date</th> + <th scope="col" data-sort="id">ID</th> + <th scope="col" data-sort="statement">Statement</th> </tr> </thead> @@ -48,9 +48,9 @@ <table class="table table-sm table-striped tablesorter"> <thead> <tr> - <th data-sort="date">Date</th> - <th data-sort="id">ID</th> - <th data-sort="statement">Statement</th> + <th scope="col" data-sort="date">Date</th> + <th scope="col" data-sort="id">ID</th> + <th scope="col" data-sort="statement">Statement</th> </tr> </thead> @@ -97,9 +97,9 @@ <table class="table table-sm table-striped tablesorter"> <thead> <tr> - <th>Date</th> - <th>ID</th> - <th>Statement</th> + <th scope="col">Date</th> + <th scope="col">ID</th> + <th scope="col">Statement</th> </tr> </thead> diff --git a/ietf/templates/ipr/search_doctitle_result.html b/ietf/templates/ipr/search_doctitle_result.html index 9e5b989e478..b48a0767613 100644 --- a/ietf/templates/ipr/search_doctitle_result.html +++ b/ietf/templates/ipr/search_doctitle_result.html @@ -19,9 +19,9 @@ <table class="table table-sm table-striped tablesorter"> <thead> <tr> - <th data-sort="date">Date</th> - <th data-sort="id">ID</th> - <th data-sort="statement">Statement</th> + <th scope="col" data-sort="date">Date</th> + <th scope="col" data-sort="id">ID</th> + <th scope="col" data-sort="statement">Statement</th> </tr> </thead> {% for alias in docs %} diff --git a/ietf/templates/ipr/search_result.html b/ietf/templates/ipr/search_result.html index 3f3c6d5eac3..2ce225517a3 100644 --- a/ietf/templates/ipr/search_result.html +++ b/ietf/templates/ipr/search_result.html @@ -26,9 +26,9 @@ <h2 class="mt-5"> <table class="table table-sm table-striped tablesorter"> <thead> <tr> - <th data-sort="date">Date</th> - <th data-sort="id">ID</th> - <th data-sort="statement">Statement</th> + <th scope="col" data-sort="date">Date</th> + <th scope="col" data-sort="id">ID</th> + <th scope="col" data-sort="statement">Statement</th> </tr> </thead> {% block iprlist %} @@ -37,14 +37,14 @@ <h2 class="mt-5"> {% ifchanged %} <tbody> <tr class="table-warning"> - <th colspan="3">{{ ipr.state.name }}</th> + <th scope="row" colspan="3">{{ ipr.state.name }}</th> </tr> </tbody> {% endifchanged %} {% endif %} <tbody> <tr class="table-info"> - <th colspan="3"> + <th scope="row" colspan="3"> {% block intro_prefix %}IPR that was submitted by "{{ q }}" and{% endblock %} {% block related %} {% with ipr.iprdocrel_set.all as iprdocrels %} diff --git a/ietf/templates/ipr/search_wg_result.html b/ietf/templates/ipr/search_wg_result.html index 6d71c1adb58..25cfc148ed2 100644 --- a/ietf/templates/ipr/search_wg_result.html +++ b/ietf/templates/ipr/search_wg_result.html @@ -15,15 +15,15 @@ <table class="table table-sm table-striped tablesorter"> <thead> <tr> - <th data-sort="date">Date</th> - <th data-sort="id">ID</th> - <th data-sort="statement">Statement</th> + <th scope="col" data-sort="date">Date</th> + <th scope="col" data-sort="id">ID</th> + <th scope="col" data-sort="statement">Statement</th> </tr> </thead> {% for alias in docs %} <tbody> <tr class="table-info"> - <th colspan="3"> + <th scope="row" colspan="3"> IPR related to {{ alias.name|rfcspace|lstrip:"0"|urlize_ietf_docs }} ("{{ alias.document.title }}") {% if alias.related %} that was {{ alias.relation|lower }} {{ alias.related.source|rfcspace|lstrip:"0"|urlize_ietf_docs }} ("{{ alias.related.source.title|escape }}") diff --git a/ietf/templates/liaisons/detail.html b/ietf/templates/liaisons/detail.html index 95981d81c76..a2f5f8e0ebf 100644 --- a/ietf/templates/liaisons/detail.html +++ b/ietf/templates/liaisons/detail.html @@ -16,64 +16,64 @@ <h1> {% include "liaisons/detail_tabs.html" %} <table class="table table-sm table-striped"> <tr> - <th>State</th> + <th scope="row">State</th> <td>{{ liaison.state }}</td> </tr> <tr> - <th>Submitted Date</th> + <th scope="row">Submitted Date</th> <td>{{ liaison.submitted|date:"Y-m-d" }}</td> </tr> <tr> - <th>From Group{{ liaison.from_groups.all|pluralize }}</th> + <th scope="row">From Group{{ liaison.from_groups.all|pluralize }}</th> <td>{{ liaison.from_groups_display }}</td> </tr> {% if liaison.from_contact %} <tr> - <th>From Contact</th> + <th scope="row">From Contact</th> <td>{% person_link liaison.from_contact.person %}</td> </tr> {% endif %} <tr> - <th>To Group{{ liaison.to_groups.all|pluralize }}</th> + <th scope="row">To Group{{ liaison.to_groups.all|pluralize }}</th> <td>{{ liaison.to_groups_display }}</td> </tr> {% if liaison.to_contacts %} <tr> - <th>To Contacts</th> + <th scope="row">To Contacts</th> <td>{{ liaison.to_contacts|linkify|make_one_per_line|safe|linebreaksbr }}</td> </tr> {% endif %} {% if liaison.cc_contacts %} <tr> - <th>Cc</th> + <th scope="row">Cc</th> <td>{{ liaison.cc_contacts|linkify|make_one_per_line|safe|linebreaksbr }}</td> </tr> {% endif %} {% if liaison.response_contacts %} <tr> - <th>Response Contact</th> + <th scope="row">Response Contact</th> <td>{{ liaison.response_contacts|linkify|make_one_per_line|safe|linebreaksbr }}</td> </tr> {% endif %} {% if liaison.technical_contacts %} <tr> - <th>Technical Contact</th> + <th scope="row">Technical Contact</th> <td>{{ liaison.technical_contacts|linkify|make_one_per_line|safe|linebreaksbr }}</td> </tr> {% endif %} {% if liaison.action_holder_contacts %} <tr> - <th>Action Holder Contacts</th> + <th scope="row">Action Holder Contacts</th> <td>{{ liaison.action_holder_contacts|linkify|make_one_per_line|safe|linebreaksbr }}</td> </tr> {% endif %} <tr> - <th>Purpose</th> + <th scope="row">Purpose</th> <td>{{ liaison.purpose.name }}</td> </tr> {% if liaison.deadline %} <tr> - <th>Deadline</th> + <th scope="row">Deadline</th> <td> {{ liaison.deadline }} {% if liaison.action_taken %} @@ -95,7 +95,7 @@ <h1> {% endif %} {% if relations %} <tr> - <th> + <th scope="row"> Liaisons referring to this </th> <td> @@ -115,7 +115,7 @@ <h1> {% if liaison.related_to %} {% if liaison.related_to.approved or is_approving %} <tr> - <th> + <th scope="row"> Referenced liaison </th> <td> @@ -132,7 +132,7 @@ <h1> {% endif %} {% if liaison.other_identifiers %} <tr> - <th> + <th scope="row"> Other Identifiers </th> <td> @@ -141,7 +141,7 @@ <h1> </tr> {% endif %} <tr> - <th> + <th scope="row"> Attachments </th> <td> @@ -157,7 +157,7 @@ <h1> </tr> {% if relations_by %} <tr> - <th> + <th scope="row"> Liaisons referred by this one </th> <td> @@ -176,7 +176,7 @@ <h1> {% endif %} {% if relations_to %} <tr> - <th> + <th scope="row"> Liaisons referring to this one </th> <td> @@ -195,7 +195,7 @@ <h1> {% endif %} {% if liaison.from_contact and liaison.body %} <tr> - <th> + <th scope="row"> Body </th> <td> diff --git a/ietf/templates/liaisons/detail_history.html b/ietf/templates/liaisons/detail_history.html index 15415d6e7c6..fcb91e301f0 100644 --- a/ietf/templates/liaisons/detail_history.html +++ b/ietf/templates/liaisons/detail_history.html @@ -23,10 +23,10 @@ <h1> <table class="table table-sm table-striped history tablesorter"> <thead> <tr> - <th data-sort="date">Date</th> - <th data-sort="type">Type</th> - <th data-sort="by">By</th> - <th data-sort="text">Text</th> + <th scope="col" data-sort="date">Date</th> + <th scope="col" data-sort="type">Type</th> + <th scope="col" data-sort="by">By</th> + <th scope="col" data-sort="text">Text</th> </tr> </thead> {% if events %} diff --git a/ietf/templates/liaisons/field_help.html b/ietf/templates/liaisons/field_help.html index d6bee034556..08eaee62c6a 100644 --- a/ietf/templates/liaisons/field_help.html +++ b/ietf/templates/liaisons/field_help.html @@ -39,41 +39,41 @@ <h1>Liaison statement field help</h1> <table class="table table-sm table-striped tablesorter"> <thead> <tr> - <th data-sort="fieldset">Fieldset</th> - <th data-sort="field">Field</th> - <th data-sort="description">Description</th> - <th data-sort="comments">Comments</th> + <th scope="col" data-sort="fieldset">Fieldset</th> + <th scope="col" data-sort="field">Field</th> + <th scope="col" data-sort="description">Description</th> + <th scope="col" data-sort="comments">Comments</th> </tr> </thead> <tr> - <th>From</th> - <th>Groups</th> + <th scope="row">From</th> + <th scope="row">Groups</th> <td>The organization(s) submitting the liaison statement.</td> <td>Use arrows to select or type name to search</td> </tr> <tr> - <th>From</th> - <th>From Contact</th> + <th scope="row">From</th> + <th scope="row">From Contact</th> <td>The e-mail address of the person submitting the liaison statement.</td> <td>The field is filled in automatically.</td> </tr> <tr> - <th>From</th> - <th>Response Contacts</th> + <th scope="row">From</th> + <th scope="row">Response Contacts</th> <td>The e-mail address(es) to which any response should be sent, separated by commas.</td> <td>Mandatory format: <code>Name <e-mail address></code></td> </tr> <tr> - <th>To</th> - <th>Groups</th> + <th scope="row">To</th> + <th scope="row">Groups</th> <td>The organization(s) (and sub-group, if applicable) to which the liaison statement is being sent.</td> <td>Drop-down menu with available choices. If an SDO is not listed, please contact <a href="mailto:statements@ietf.org">statements@ietf.org</a>.</td> </tr> <tr> - <th> + <th scope="row"> To </th> - <th> + <th scope="row"> Contacts </th> <td> @@ -84,10 +84,10 @@ <h1>Liaison statement field help</h1> </td> </tr> <tr> - <th> + <th scope="row"> Other email addresses </th> - <th> + <th scope="row"> Technical contact </th> <td> @@ -98,10 +98,10 @@ <h1>Liaison statement field help</h1> </td> </tr> <tr> - <th> + <th scope="row"> Other email addresses </th> - <th> + <th scope="row"> Action Holder Contacts </th> <td> @@ -112,10 +112,10 @@ <h1>Liaison statement field help</h1> </td> </tr> <tr> - <th> + <th scope="row"> Other email addresses </th> - <th> + <th scope="row"> Cc </th> <td> @@ -126,10 +126,10 @@ <h1>Liaison statement field help</h1> </td> </tr> <tr> - <th> + <th scope="row"> Purpose </th> - <th> + <th scope="row"> Purpose </th> <td> @@ -140,10 +140,10 @@ <h1>Liaison statement field help</h1> </td> </tr> <tr> - <th> + <th scope="row"> Purpose </th> - <th> + <th scope="row"> Deadline </th> <td> @@ -154,10 +154,10 @@ <h1>Liaison statement field help</h1> </td> </tr> <tr> - <th> + <th scope="row"> Liaison statements </th> - <th> + <th scope="row"> Title </th> <td> @@ -168,10 +168,10 @@ <h1>Liaison statement field help</h1> </td> </tr> <tr> - <th> + <th scope="row"> Liaison statements </th> - <th> + <th scope="row"> Submission date </th> <td> @@ -182,10 +182,10 @@ <h1>Liaison statement field help</h1> </td> </tr> <tr> - <th> + <th scope="row"> Liaison statements </th> - <th> + <th scope="row"> Body </th> <td> @@ -196,10 +196,10 @@ <h1>Liaison statement field help</h1> </td> </tr> <tr> - <th> + <th scope="row"> Add attachment </th> - <th> + <th scope="row"> Title </th> <td> @@ -210,10 +210,10 @@ <h1>Liaison statement field help</h1> </td> </tr> <tr> - <th> + <th scope="row"> Add attachment </th> - <th> + <th scope="row"> File </th> <td> diff --git a/ietf/templates/liaisons/guide_from_ietf.html b/ietf/templates/liaisons/guide_from_ietf.html index 7c9a71d427b..bbca71d12fd 100644 --- a/ietf/templates/liaisons/guide_from_ietf.html +++ b/ietf/templates/liaisons/guide_from_ietf.html @@ -34,10 +34,10 @@ <h1> <table class="table table-sm table-striped tablesorter"> <thead> <tr> - <th data-sort="from"> + <th scope="col" data-sort="from"> Submitting entity <sup><small>(1)</small></sup> </th> - <th data-sort="cc"> + <th scope="col" data-sort="cc"> Cc: field <sup><small>(1, 2, 3)</small></sup> </th> </tr> diff --git a/ietf/templates/liaisons/guide_to_ietf.html b/ietf/templates/liaisons/guide_to_ietf.html index 74cdf9fcfcf..0602b4c000b 100644 --- a/ietf/templates/liaisons/guide_to_ietf.html +++ b/ietf/templates/liaisons/guide_to_ietf.html @@ -24,9 +24,9 @@ <h1> <table class="table table-sm table-striped tablesorter"> <thead> <tr> - <th data-sort="org">To: organization</th> - <th data-sort="poc">To: POC(s)</th> - <th data-sort="cc"> + <th scope="col" data-sort="org">To: organization</th> + <th scope="col" data-sort="poc">To: POC(s)</th> + <th scope="col" data-sort="cc"> Cc: <sup><small>(1, 2)</small></sup> </th> </tr> diff --git a/ietf/templates/liaisons/liaison_table.html b/ietf/templates/liaisons/liaison_table.html index 8f40f56f68a..ed97d3ce25d 100644 --- a/ietf/templates/liaisons/liaison_table.html +++ b/ietf/templates/liaisons/liaison_table.html @@ -3,11 +3,11 @@ <table class="table table-sm table-striped tablesorter"> <thead> <tr> - <th data-sort="date">Date</th> - <th data-sort="from">From</th> + <th scope="col" data-sort="date">Date</th> + <th scope="col" data-sort="from">From</th> <th class="d-none d-sm-table-cell" data-sort="to">To</th> <th class="d-none d-sm-table-cell" data-sort="date">Deadline</th> - <th data-sort="title">Title</th> + <th scope="col" data-sort="title">Title</th> </tr> </thead> {% if liaisons %} diff --git a/ietf/templates/mailinglists/group_archives.html b/ietf/templates/mailinglists/group_archives.html index 25854b216ca..1569e0a88b5 100644 --- a/ietf/templates/mailinglists/group_archives.html +++ b/ietf/templates/mailinglists/group_archives.html @@ -28,8 +28,8 @@ <h1>Web-based Working Group email archives</h1> <table class="table table-sm table-striped tablesorter"> <thead> <tr> - <th data-sort="acronym">Acronym</th> - <th data-sort="name">Name</th> + <th scope="col" data-sort="acronym">Acronym</th> + <th scope="col" data-sort="name">Name</th> </tr> </thead> {% if groups %} diff --git a/ietf/templates/mailinglists/nonwg.html b/ietf/templates/mailinglists/nonwg.html index 3a38eacf4b2..ae97323288b 100644 --- a/ietf/templates/mailinglists/nonwg.html +++ b/ietf/templates/mailinglists/nonwg.html @@ -13,8 +13,8 @@ <h1>Non-Working Group email lists</h1> <table class="table table-sm table-striped tablesorter"> <thead> <tr> - <th data-sort="name">Name</th> - <th data-sort="description">Description</th> + <th scope="col" data-sort="name">Name</th> + <th scope="col" data-sort="description">Description</th> </tr> </thead> <tbody> diff --git a/ietf/templates/mailtrigger/recipient.html b/ietf/templates/mailtrigger/recipient.html index 3d6dfe81f76..7f3223a752c 100644 --- a/ietf/templates/mailtrigger/recipient.html +++ b/ietf/templates/mailtrigger/recipient.html @@ -11,10 +11,10 @@ <h1>Mail recipients</h1> <table class="my-3 table table-sm table-striped tablesorter"> <thead> <tr> - <th data-sort="recipient">Recipient</th> - <th data-sort="triggers">Triggers</th> - <th data-sort="template">Template</th> - <th data-sort="code">Code</th> + <th scope="col" data-sort="recipient">Recipient</th> + <th scope="col" data-sort="triggers">Triggers</th> + <th scope="col" data-sort="template">Template</th> + <th scope="col" data-sort="code">Code</th> </tr> </thead> {% if recipients %} diff --git a/ietf/templates/mailtrigger/trigger.html b/ietf/templates/mailtrigger/trigger.html index 5f251cd1eca..b76e1b4fd8d 100644 --- a/ietf/templates/mailtrigger/trigger.html +++ b/ietf/templates/mailtrigger/trigger.html @@ -11,9 +11,9 @@ <h1>Mail triggers</h1> <table class="table table-sm table-striped tablesorter"> <thead> <tr> - <th data-sort="trigger">Trigger</th> - <th data-sort="to">Recipients (To)</th> - <th data-sort="cc">Recipients (CC)</th> + <th scope="col" data-sort="trigger">Trigger</th> + <th scope="col" data-sort="to">Recipients (To)</th> + <th scope="col" data-sort="cc">Recipients (CC)</th> </tr> </thead> <tbody> diff --git a/ietf/templates/meeting/add_session_drafts.html b/ietf/templates/meeting/add_session_drafts.html index 135443cb276..1efcc5963ea 100644 --- a/ietf/templates/meeting/add_session_drafts.html +++ b/ietf/templates/meeting/add_session_drafts.html @@ -26,8 +26,8 @@ <h2 class="mt-5">Drafts already linked to this sesssion</h2> <table class="table table-sm table-striped tablesorter"> <thead> <tr> - <th data-sort="num">Revision</th> - <th data-sort="document">Document</th> + <th scope="col" data-sort="num">Revision</th> + <th scope="col" data-sort="document">Document</th> </tr> </thead> {% if already_linked %} diff --git a/ietf/templates/meeting/agenda.html b/ietf/templates/meeting/agenda.html index e1e57293655..68fcb8fdeef 100644 --- a/ietf/templates/meeting/agenda.html +++ b/ietf/templates/meeting/agenda.html @@ -97,19 +97,19 @@ <h2 class="mt-3"> <table id="agenda-table" class="table table-sm tablesorter"> <thead> <tr> - {% if personalize %}<th></th>{% endif %} - <th></th> - <th data-sort="loc"></th> - <th data-sort="group"></th> - <th data-sort="area"></th> - <th data-sort="desc"></th> + {% if personalize %}<th scope="col"></th>{% endif %} + <th scope="col"></th> + <th scope="col" data-sort="loc"></th> + <th scope="col" data-sort="group"></th> + <th scope="col" data-sort="area"></th> + <th scope="col" data-sort="desc"></th> </tr> </thead> <tbody> {% for item in filtered_assignments %} {% ifchanged item.timeslot.time|date:"Y-m-d" %} <tr class="table-primary show-with-children"> - <th colspan="{% if personalize %}6{% else %}5{% endif %}" + <th scope="row" colspan="{% if personalize %}6{% else %}5{% endif %}" id="slot-{{ item.timeslot.time|slugify }}" class="nav-heading"> {{ item.timeslot.time|date:"l, F j, Y" }} @@ -183,9 +183,9 @@ <h2 class="mt-3"> <tr class="table-secondary session-label-row show-with-children" data-slot-start-ts="{{ item.start_timestamp }}" data-slot-end-ts="{{ item.end_timestamp }}"> - {% if personalize %}<th class="text-center"></th>{% endif %} - <th class="text-end">{% include "meeting/timeslot_start_end.html" %}</th> - <th colspan="4"> + {% if personalize %}<th scope="row" class="text-center"></th>{% endif %} + <th scope="row" class="text-end">{% include "meeting/timeslot_start_end.html" %}</th> + <th scope="row" colspan="4"> {{ item.timeslot.time|date:"l" }} {{ item.timeslot.name|capfirst_allcaps }} </th> diff --git a/ietf/templates/meeting/diff_schedules.html b/ietf/templates/meeting/diff_schedules.html index 9e7af4b3f37..c5b117d2d76 100644 --- a/ietf/templates/meeting/diff_schedules.html +++ b/ietf/templates/meeting/diff_schedules.html @@ -23,7 +23,7 @@ <h2 class="mt-4"> <table class="table table-sm table-striped schedule-diffs"> <thead> <tr> - <th></th> + <th scope="col"></th> </tr> </thead> <tbody> diff --git a/ietf/templates/meeting/edit_meeting_schedule.html b/ietf/templates/meeting/edit_meeting_schedule.html index 93bc5c51bca..98650e6771a 100644 --- a/ietf/templates/meeting/edit_meeting_schedule.html +++ b/ietf/templates/meeting/edit_meeting_schedule.html @@ -274,7 +274,7 @@ <h5 class="modal-title" id="timeslot-group-toggles-modal-title">Displayed timesl class="form-check-input" name="timeslot-group" value="{{ key }}" - checked="checked"> + checked> {{ start|date:"H:i" }} - {{ end|date:"H:i" }} </label> {% endfor %} diff --git a/ietf/templates/meeting/important-dates.html b/ietf/templates/meeting/important-dates.html index 2114584242a..27cc28546ad 100644 --- a/ietf/templates/meeting/important-dates.html +++ b/ietf/templates/meeting/important-dates.html @@ -24,16 +24,16 @@ <h2 class="mt-5"> <table class="table table-striped"> <thead> <tr> - <th>Date</th> - <th>Weekday</th> - <th>Description</th> + <th scope="col">Date</th> + <th scope="col">Weekday</th> + <th scope="col">Description</th> </tr> </thead> <tbody> {% with first=forloop.first %} {% for d in meeting.importantdate_set.all %} <tr> - <th>{{ d.date }}</th> + <th scope="row">{{ d.date }}</th> <td> {% if d.name.slug == 'openreg' %} Week of diff --git a/ietf/templates/meeting/interim_announce.html b/ietf/templates/meeting/interim_announce.html index 7c7aa37b9c4..2cfec08c8ea 100644 --- a/ietf/templates/meeting/interim_announce.html +++ b/ietf/templates/meeting/interim_announce.html @@ -16,9 +16,9 @@ <h1>Interim Meetings to be Announced</h1> class="table table-sm table-striped tablesorter"> <thead> <tr> - <th data-sort="date">Date</th> - <th data-sort="group">Group</th> - <th data-sort="name">Name</th> + <th scope="col" data-sort="date">Date</th> + <th scope="col" data-sort="group">Group</th> + <th scope="col" data-sort="name">Name</th> </tr> </thead> <tbody> diff --git a/ietf/templates/meeting/interim_pending.html b/ietf/templates/meeting/interim_pending.html index c278f09eeed..e9879c4fa72 100644 --- a/ietf/templates/meeting/interim_pending.html +++ b/ietf/templates/meeting/interim_pending.html @@ -16,10 +16,10 @@ <h1>Pending Interim Meetings</h1> class="table table-sm table-striped tablesorter"> <thead> <tr> - <th data-sort="date">Date</th> - <th data-sort="group">Group</th> - <th data-sort="name">Name</th> - <th></th> + <th scope="col" data-sort="date">Date</th> + <th scope="col" data-sort="group">Group</th> + <th scope="col" data-sort="name">Name</th> + <th scope="col"></th> </tr> </thead> <tbody> diff --git a/ietf/templates/meeting/materials.html b/ietf/templates/meeting/materials.html index ac21d17cdc7..efd0afde3ed 100644 --- a/ietf/templates/meeting/materials.html +++ b/ietf/templates/meeting/materials.html @@ -42,14 +42,14 @@ <h2 class="mt-4" id="plenaries">Plenaries</h2> <table class="table table-sm table-striped tablesorter"> <thead> <tr> - <th data-sort="group">Group</th> - <th data-sort="agenda">Agenda</th> - <th data-sort="minutes">Minutes</th> - <th data-sort="slides">Slides</th> - <th data-sort="drafts">Drafts</th> - <th data-sort="updated">Updated</th> + <th scope="col" data-sort="group">Group</th> + <th scope="col" data-sort="agenda">Agenda</th> + <th scope="col" data-sort="minutes">Minutes</th> + <th scope="col" data-sort="slides">Slides</th> + <th scope="col" data-sort="drafts">Drafts</th> + <th scope="col" data-sort="updated">Updated</th> {% if user|has_role:"Secretariat" or user_groups %} - <th></th> + <th scope="col"></th> {% endif %} </tr> </thead> @@ -69,14 +69,14 @@ <h2 class="mt-4" id="{{ sessions.list.0.group.parent.acronym }}"> <table class="table table-sm table-striped tablesorter"> <thead> <tr> - <th data-sort="group">Group</th> - <th data-sort="agenda">Agenda</th> - <th data-sort="minutes">Minutes</th> - <th data-sort="slides">Slides</th> - <th data-sort="drafts">Drafts</th> - <th data-sort="updated">Updated</th> + <th scope="col" data-sort="group">Group</th> + <th scope="col" data-sort="agenda">Agenda</th> + <th scope="col" data-sort="minutes">Minutes</th> + <th scope="col" data-sort="slides">Slides</th> + <th scope="col" data-sort="drafts">Drafts</th> + <th scope="col" data-sort="updated">Updated</th> {% if user|has_role:"Secretariat" or user_groups %} - <th></th> + <th scope="col"></th> {% endif %} </tr> </thead> @@ -96,19 +96,18 @@ <h2 class="mt-4" id="training">Training</h2> <table class="table table-sm table-striped tablesorter"> <thead> <tr> - <th data-sort="group">Group</th> - <th data-sort="agenda">Agenda</th> - <th data-sort="minutes">Minutes</th> - <th data-sort="slides">Slides</th> - <th data-sort="drafts"> + <th scope="col" data-sort="group">Group</th> + <th scope="col" data-sort="agenda">Agenda</th> + <th scope="col" data-sort="minutes">Minutes</th> + <th scope="col" data-sort="slides">Slides</th> + <th scope="col" data-sort="drafts"> Drafts </th> - <th data-sort="updated"> + <th scope="col" data-sort="updated"> Updated </th> {% if user|has_role:"Secretariat" or user_groups %} - <th> - </th> + <th scope="col"></th> {% endif %} </tr> </thead> @@ -131,27 +130,26 @@ <h2 class="mt-4" id="iab"> <table class="table table-sm table-striped tablesorter"> <thead> <tr> - <th data-sort="group"> + <th scope="col" data-sort="group"> Group </th> - <th data-sort="agenda"> + <th scope="col" data-sort="agenda"> Agenda </th> - <th data-sort="minutes"> + <th scope="col" data-sort="minutes"> Minutes </th> - <th data-sort="slides"> + <th scope="col" data-sort="slides"> Slides </th> - <th data-sort="drafts"> + <th scope="col" data-sort="drafts"> Drafts </th> - <th data-sort="updated"> + <th scope="col" data-sort="updated"> Updated </th> {% if user|has_role:"Secretariat" or user_groups %} - <th> - </th> + <th scope="col"></th> {% endif %} </tr> </thead> @@ -172,27 +170,26 @@ <h2 class="mt-4" id="irtf"> <table class="table table-sm table-striped tablesorter"> <thead> <tr> - <th data-sort="group"> + <th scope="col" data-sort="group"> Group </th> - <th data-sort="agenda"> + <th scope="col" data-sort="agenda"> Agenda </th> - <th data-sort="minutes"> + <th scope="col" data-sort="minutes"> Minutes </th> - <th data-sort="slides"> + <th scope="col" data-sort="slides"> Slides </th> - <th data-sort="drafts"> + <th scope="col" data-sort="drafts"> Drafts </th> - <th data-sort="updated"> + <th scope="col" data-sort="updated"> Updated </th> {% if user|has_role:"Secretariat" or user_groups %} - <th> - </th> + <th scope="col"></th> {% endif %} </tr> </thead> @@ -212,27 +209,26 @@ <h2 class="mt-4" id="other"> <table class="table table-sm table-striped tablesorter"> <thead> <tr> - <th data-sort="group"> + <th scope="col" data-sort="group"> Group </th> - <th data-sort="agenda"> + <th scope="col" data-sort="agenda"> Agenda </th> - <th data-sort="minutes"> + <th scope="col" data-sort="minutes"> Minutes </th> - <th data-sort="slides"> + <th scope="col" data-sort="slides"> Slides </th> - <th data-sort="drafts"> + <th scope="col" data-sort="drafts"> Drafts </th> - <th data-sort="updated"> + <th scope="col" data-sort="updated"> Updated </th> {% if user|has_role:"Secretariat" or user_groups %} - <th> - </th> + <th scope="col"></th> {% endif %} </tr> </thead> diff --git a/ietf/templates/meeting/past.html b/ietf/templates/meeting/past.html index 0d43e0e5672..8a257426bb8 100644 --- a/ietf/templates/meeting/past.html +++ b/ietf/templates/meeting/past.html @@ -13,9 +13,9 @@ <h1>Past Meetings</h1> <table class="table table-sm table-striped tablesorter"> <thead> <tr> - <th data-sort="date">Date</th> - <th data-sort="group">Group</th> - <th data-sort="name">Name</th> + <th scope="col" data-sort="date">Date</th> + <th scope="col" data-sort="group">Group</th> + <th scope="col" data-sort="name">Name</th> <th class="d-none d-sm-table-cell"></th> </tr> </thead> diff --git a/ietf/templates/meeting/proceedings.html b/ietf/templates/meeting/proceedings.html index cbee49a3fde..687c5dac177 100644 --- a/ietf/templates/meeting/proceedings.html +++ b/ietf/templates/meeting/proceedings.html @@ -30,11 +30,11 @@ <h2 class="mt-5" id="plenaries">Plenaries</h2> <table class="table table-sm table-striped tablesorter"> <thead> <tr> - <th data-sort="group">Group</th> - <th data-sort="artifacts">Artifacts</th> - <th data-sort="recordings">Recordings</th> - <th data-sort="slides">Slides</th> - <th data-sort="drafts">Drafts</th> + <th scope="col" data-sort="group">Group</th> + <th scope="col" data-sort="artifacts">Artifacts</th> + <th scope="col" data-sort="recordings">Recordings</th> + <th scope="col" data-sort="slides">Slides</th> + <th scope="col" data-sort="drafts">Drafts</th> </tr> </thead> <tbody> @@ -53,11 +53,11 @@ <h2 class="mt-5" id="{{ area.acronym }}"> <table class="table table-sm table-striped tablesorter"> <thead> <tr> - <th data-sort="group">Group</th> - <th data-sort="artifacts">Artifacts</th> - <th data-sort="recordings">Recordings</th> - <th data-sort="slides">Slides</th> - <th data-sort="drafts">Drafts</th> + <th scope="col" data-sort="group">Group</th> + <th scope="col" data-sort="artifacts">Artifacts</th> + <th scope="col" data-sort="recordings">Recordings</th> + <th scope="col" data-sort="slides">Slides</th> + <th scope="col" data-sort="drafts">Drafts</th> </tr> </thead> <tbody> @@ -81,11 +81,11 @@ <h2 class="mt-5" id="{{ area.acronym }}"> <table class="table table-sm table-striped"> <thead> <tr> - <th></th> - <th></th> - <th></th> - <th></th> - <th></th> + <th scope="col"></th> + <th scope="col"></th> + <th scope="col"></th> + <th scope="col"></th> + <th scope="col"></th> </tr> </thead> <tbody> @@ -107,11 +107,11 @@ <h2 class="mt-5" id="training">Training</h2> <table class="table table-sm table-striped tablesorter"> <thead> <tr> - <th data-sort="group">Group</th> - <th data-sort="artifacts">Artifacts</th> - <th data-sort="recordings">Recordings</th> - <th data-sort="slides">Slides</th> - <th data-sort="drafts">Drafts</th> + <th scope="col" data-sort="group">Group</th> + <th scope="col" data-sort="artifacts">Artifacts</th> + <th scope="col" data-sort="recordings">Recordings</th> + <th scope="col" data-sort="slides">Slides</th> + <th scope="col" data-sort="drafts">Drafts</th> </tr> </thead> <tbody> @@ -132,19 +132,19 @@ <h2 class="mt-5" id="iab"> <table class="table table-sm table-striped tablesorter"> <thead> <tr> - <th data-sort="group"> + <th scope="col" data-sort="group"> Group </th> - <th data-sort="artifacts"> + <th scope="col" data-sort="artifacts"> Artifacts </th> - <th data-sort="recordings"> + <th scope="col" data-sort="recordings"> Recordings </th> - <th data-sort="slides"> + <th scope="col" data-sort="slides"> Slides </th> - <th data-sort="drafts"> + <th scope="col" data-sort="drafts"> Drafts </th> </tr> @@ -166,19 +166,19 @@ <h2 class="mt-5" id="irtf"> <table class="table table-sm table-striped tablesorter"> <thead> <tr> - <th data-sort="group"> + <th scope="col" data-sort="group"> Group </th> - <th data-sort="artifacts"> + <th scope="col" data-sort="artifacts"> Artifacts </th> - <th data-sort="recordings"> + <th scope="col" data-sort="recordings"> Recordings </th> - <th data-sort="slides"> + <th scope="col" data-sort="slides"> Slides </th> - <th data-sort="drafts"> + <th scope="col" data-sort="drafts"> Drafts </th> </tr> diff --git a/ietf/templates/meeting/proceedings/material_details.html b/ietf/templates/meeting/proceedings/material_details.html index 84233481a58..98b8bf0f062 100644 --- a/ietf/templates/meeting/proceedings/material_details.html +++ b/ietf/templates/meeting/proceedings/material_details.html @@ -15,11 +15,11 @@ <h1> <table class="table table-sm table-striped tablesorter my-3"> <thead> <tr> - <th data-sort="type">Type</th> - <th data-sort="title">Title</th> - <th data-sort="document">Document</th> - <th data-sort="updated">Updated</th> - <th></th> + <th scope="col" data-sort="type">Type</th> + <th scope="col" data-sort="title">Title</th> + <th scope="col" data-sort="document">Document</th> + <th scope="col" data-sort="updated">Updated</th> + <th scope="col"></th> </tr> </thead> <tbody> diff --git a/ietf/templates/meeting/proceedings/materials_table.html b/ietf/templates/meeting/proceedings/materials_table.html index e042456dc14..25a17252259 100644 --- a/ietf/templates/meeting/proceedings/materials_table.html +++ b/ietf/templates/meeting/proceedings/materials_table.html @@ -7,9 +7,9 @@ <h2 class="mt-3" id="proceedings-materials">Proceedings Materials</h2> <table class="table table-sm table-striped"> <thead> <tr> - <th data-sort="type">Type</th> - <th data-sort="title">Title</th> - <th data-sort="updated">Updated</th> + <th scope="col" data-sort="type">Type</th> + <th scope="col" data-sort="title">Title</th> + <th scope="col" data-sort="updated">Updated</th> </tr> </thead> <tbody> diff --git a/ietf/templates/meeting/proceedings_attendees_table.html b/ietf/templates/meeting/proceedings_attendees_table.html index 4679df296c8..9ac1fda2acf 100644 --- a/ietf/templates/meeting/proceedings_attendees_table.html +++ b/ietf/templates/meeting/proceedings_attendees_table.html @@ -1,10 +1,10 @@ <table id="id_attendees" class="table table-sm table-striped tablesorter"> <thead> <tr> - <th data-sort="last">Last name</th> - <th data-sort="first">First name</th> - <th data-sort="organization">Organization</th> - <th data-sort="country">Country</th> + <th scope="col" data-sort="last">Last name</th> + <th scope="col" data-sort="first">First name</th> + <th scope="col" data-sort="organization">Organization</th> + <th scope="col" data-sort="country">Country</th> </tr> </thead> <tbody> diff --git a/ietf/templates/meeting/proceedings_progress_report.html b/ietf/templates/meeting/proceedings_progress_report.html index 528392226f1..10b688adaa9 100644 --- a/ietf/templates/meeting/proceedings_progress_report.html +++ b/ietf/templates/meeting/proceedings_progress_report.html @@ -42,11 +42,11 @@ <h3 class="mt-3">{{ rfcs.count }} RFCs published this period</h3> <table class="table table-sm table-striped tablesorter"> <thead> <tr> - <th data-sort="rfc">RFC</th> - <th data-sort="status">Status</th> - <th data-sort="group">Group</th> - <th data-sort="date">Date</th> - <th data-sort="title">Title</th> + <th scope="col" data-sort="rfc">RFC</th> + <th scope="col" data-sort="status">Status</th> + <th scope="col" data-sort="group">Group</th> + <th scope="col" data-sort="date">Date</th> + <th scope="col" data-sort="title">Title</th> </tr> </thead> {% if rfcs %} diff --git a/ietf/templates/meeting/requests.html b/ietf/templates/meeting/requests.html index b135b5df35f..9174a953149 100644 --- a/ietf/templates/meeting/requests.html +++ b/ietf/templates/meeting/requests.html @@ -29,13 +29,13 @@ <h2 class="mt-5" id="{{ area.grouper.acronym }}"> <table class="table table-sm table-striped tablesorter"> <thead> <tr> - <th data-sort="group">Group</th> - <th data-sort="num">Length</th> - <th data-sort="num">Size</th> + <th scope="col" data-sort="group">Group</th> + <th scope="col" data-sort="num">Length</th> + <th scope="col" data-sort="num">Size</th> <th class="d-none d-sm-table-cell" data-sort="requester">Requester</th> <th class="d-none d-sm-table-cell" data-sort="ad">AD</th> - <th data-sort="constraints">Constraints</th> - <th data-sort="special">Special requests</th> + <th scope="col" data-sort="constraints">Constraints</th> + <th scope="col" data-sort="special">Special requests</th> </tr> </thead> {% for session in area.list %} diff --git a/ietf/templates/meeting/schedule_list.html b/ietf/templates/meeting/schedule_list.html index 76699fce1d7..2e3214b40cf 100644 --- a/ietf/templates/meeting/schedule_list.html +++ b/ietf/templates/meeting/schedule_list.html @@ -28,13 +28,13 @@ <h2 class="mt-4">{{ label }}</h2> <table class="table table-sm table-striped tablesorter"> <thead> <tr> - <th data-sort="name">Name</th> - <th data-sort="owner">Owner</th> - <th data-sort="origin">Origin</th> - <th data-sort="base">Base</th> - <th data-sort="notes">Notes</th> - <th data-sort="visible">Visible</th> - <th data-sort="public">Public</th> + <th scope="col" data-sort="name">Name</th> + <th scope="col" data-sort="owner">Owner</th> + <th scope="col" data-sort="origin">Origin</th> + <th scope="col" data-sort="base">Base</th> + <th scope="col" data-sort="notes">Notes</th> + <th scope="col" data-sort="visible">Visible</th> + <th scope="col" data-sort="public">Public</th> <td></td> </tr> </thead> diff --git a/ietf/templates/meeting/session_details_form.html b/ietf/templates/meeting/session_details_form.html index 52fa78bbe7a..6a438e303fd 100644 --- a/ietf/templates/meeting/session_details_form.html +++ b/ietf/templates/meeting/session_details_form.html @@ -11,18 +11,18 @@ are defined in edit.html and new.html as a kludge to make this work. {% endcomment %} <tr class="form-group"> - <th>{{ form.name.label_tag }}</th> + <th scope="row">{{ form.name.label_tag }}</th> <td>{{ form.name }}{{ form.purpose.errors }}</td> </tr> <tr class="form-group"> - <th>{{ form.purpose.label_tag }}</th> + <th scope="row">{{ form.purpose.label_tag }}</th> <td> {{ form.purpose }} <div class="form-group">{{ form.type }}</div> {{ form.purpose.errors }}{{ form.type.errors }} </td> </tr> <tr> - <th>{{ form.requested_duration.label_tag }}</th> + <th scope="row">{{ form.requested_duration.label_tag }}</th> <td>{{ form.requested_duration }}{{ form.requested_duration.errors }}</td> </tr> </table> diff --git a/ietf/templates/meeting/session_materials.html b/ietf/templates/meeting/session_materials.html index 1d92340ff8c..05414a884d9 100644 --- a/ietf/templates/meeting/session_materials.html +++ b/ietf/templates/meeting/session_materials.html @@ -4,7 +4,7 @@ {% load static %} {% load textfilters %} {% load ietf_filters %} -<!doctype html> +<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> diff --git a/ietf/templates/meeting/timeslot_edit.html b/ietf/templates/meeting/timeslot_edit.html index 7e596e76b7e..97e82a52376 100644 --- a/ietf/templates/meeting/timeslot_edit.html +++ b/ietf/templates/meeting/timeslot_edit.html @@ -75,12 +75,12 @@ <h1> <thead> <tr> {% if have_no_timeslots %} - <th></th> - <th></th> + <th scope="col"></th> + <th scope="col"></th> {% else %} - <th></th> + <th scope="col"></th> {% for day in time_slices %} - <th class="day-label" colspan="{{ date_slices|colWidth:day }}"> + <th scope="col" class="day-label" colspan="{{ date_slices|colWidth:day }}"> {{ day|date:'D' }} ({{ day }}) <i class="bi bi-trash delete-button" title="Delete all on this day" @@ -93,13 +93,13 @@ <h1> </tr> <tr> {% if have_no_timeslots %} - <th></th> - <th></th> + <th scope="col"></th> + <th scope="col"></th> {% else %} - <th></th> + <th scope="col"></th> {% for day in time_slices %} {% for slot in slot_slices|lookup:day %} - <th class="time-label"> + <th scope="col" class="time-label"> {{ slot.time|date:'H:i' }}-{{ slot.end_time|date:'H:i' }} <i class="bi bi-trash delete-button" data-delete-scope="column" @@ -116,7 +116,7 @@ <h1> <tbody> {% for room in rooms %} <tr> - <th> + <th scope="row"> <span class="room-heading">{{ room.name }} {% if room.capacity %}<span class='capacity'>({{ room.capacity }})</span>{% endif %} </span> diff --git a/ietf/templates/meeting/upcoming.html b/ietf/templates/meeting/upcoming.html index c7d51636445..53500c76ce6 100644 --- a/ietf/templates/meeting/upcoming.html +++ b/ietf/templates/meeting/upcoming.html @@ -37,10 +37,10 @@ <h1>Upcoming Meetings</h1> class="table table-sm table-striped tablesorter"> <thead> <tr> - <th data-sort="date">Date</th> - <th data-sort="group">Group</th> - <th data-sort="meeting">Meeting</th> - <th></th> + <th scope="col" data-sort="date">Date</th> + <th scope="col" data-sort="group">Group</th> + <th scope="col" data-sort="meeting">Meeting</th> + <th scope="col"></th> </tr> </thead> <tbody> diff --git a/ietf/templates/meeting/week-view.html b/ietf/templates/meeting/week-view.html index 833401bdf57..7e9f7109a0f 100644 --- a/ietf/templates/meeting/week-view.html +++ b/ietf/templates/meeting/week-view.html @@ -1,8 +1,8 @@ {# Copyright The IETF Trust 2015, All Rights Reserved #} {% load origin %} {% load static %} -{# FIXME: the weekview only renders correctly in quirks mode, i.e., not in HTML5 with "<!doctype html>" in the next line; it should be rewritten with fullcalendar #} -{# <!doctype html> #} +{# FIXME: the weekview only renders correctly in quirks mode, i.e., not in HTML5 with "<!DOCTYPE html>" in the next line; it should be rewritten with fullcalendar #} +{# <!DOCTYPE html> #} <html lang="en"> {% origin %} <head> diff --git a/ietf/templates/nomcom/announcements.html b/ietf/templates/nomcom/announcements.html index 7da2791ae9f..6212b1482fa 100644 --- a/ietf/templates/nomcom/announcements.html +++ b/ietf/templates/nomcom/announcements.html @@ -25,9 +25,9 @@ <h2 class="mt-5" id="{{ regime.group.start_year }}"> <table class="table table-sm table-striped tablesorter"> <thead> <tr> - <th data-sort="date">Date</th> - <th data-sort="subject">Subject</th> - <th data-sort="sent">Sent to</th> + <th scope="col" data-sort="date">Date</th> + <th scope="col" data-sort="subject">Subject</th> + <th scope="col" data-sort="sent">Sent to</th> </tr> </thead> <tbody> diff --git a/ietf/templates/nomcom/eligible.html b/ietf/templates/nomcom/eligible.html index fff87e33bb5..fcf06e6e514 100644 --- a/ietf/templates/nomcom/eligible.html +++ b/ietf/templates/nomcom/eligible.html @@ -13,12 +13,12 @@ <h2>Eligible People for {{ nomcom.group }}</h2> <table class="table table-sm table-striped tablesorter"> <thead> <tr> - <th></th> - <th data-sort="last">Last name</th> - <th data-sort="first">First name</th> - <th data-sort="plain">Plain name</th> - <th data-sort="page">Profile page</th> - <th data-sort="email">Email addresses</th> + <th scope="col"></th> + <th scope="col" data-sort="last">Last name</th> + <th scope="col" data-sort="first">First name</th> + <th scope="col" data-sort="plain">Plain name</th> + <th scope="col" data-sort="page">Profile page</th> + <th scope="col" data-sort="email">Email addresses</th> </tr> </thead> {% if eligible_persons %} diff --git a/ietf/templates/nomcom/index.html b/ietf/templates/nomcom/index.html index 3587d7d7384..91f63f74ebc 100644 --- a/ietf/templates/nomcom/index.html +++ b/ietf/templates/nomcom/index.html @@ -12,9 +12,9 @@ <h1>NomComs</h1> <table class="table table-sm table-striped tablesorter"> <thead> <tr> - <th data-sort="year">Year</th> - <th data-sort="chair">Chair</th> - <th></th> + <th scope="col" data-sort="year">Year</th> + <th scope="col" data-sort="chair">Chair</th> + <th scope="col"></th> </tr> </thead> <tbody> diff --git a/ietf/templates/nomcom/private_index.html b/ietf/templates/nomcom/private_index.html index 8df5e1d97bc..b268c1eeb55 100644 --- a/ietf/templates/nomcom/private_index.html +++ b/ietf/templates/nomcom/private_index.html @@ -11,24 +11,24 @@ <h2 class="mt-3">Nomination status</h2> <table class="table table-sm table-striped table-hover tablesorter"> <thead> <tr> - <th data-sort="position">Position</th> - <th data-sort="open">Open</th> - <th data-sort="accepting">Accepting nominations</th> - <th data-sort="accepting">Accepting feedback</th> - <th data-sort="num">Nominations</th> - <th data-sort="num">Unique nominees</th> - <th data-sort="num">Accepted</th> - <th data-sort="num">Declined</th> - <th data-sort="num">Pending</th> - <th data-sort="num">Questionnaire responses</th> - <th data-sort="num">Comments</th> + <th scope="col" data-sort="position">Position</th> + <th scope="col" data-sort="open">Open</th> + <th scope="col" data-sort="accepting">Accepting nominations</th> + <th scope="col" data-sort="accepting">Accepting feedback</th> + <th scope="col" data-sort="num">Nominations</th> + <th scope="col" data-sort="num">Unique nominees</th> + <th scope="col" data-sort="num">Accepted</th> + <th scope="col" data-sort="num">Declined</th> + <th scope="col" data-sort="num">Pending</th> + <th scope="col" data-sort="num">Questionnaire responses</th> + <th scope="col" data-sort="num">Comments</th> </tr> </thead> {% if stats %} <tbody> {% for item in stats %} <tr> - <th>{{ item.position__name }}</th> + <th scope="row">{{ item.position__name }}</th> <td>{{ item.position.is_open|yesno:"Yes,No,No" }}</td> <td>{{ item.position.accepting_nominations|yesno:"Yes,No,No" }}</td> <td>{{ item.position.accepting_feedback|yesno:"Yes,No,No" }}</td> @@ -45,62 +45,62 @@ <h2 class="mt-3">Nomination status</h2> {% endif %} <tfoot> <tr> - <th>Totals</th> - <th>{{ totals.open }}</th> - <th>{{ totals.accepting_nominations }}</th> - <th> + <th scope="row">Totals</th> + <td>{{ totals.open }}</td> + <td>{{ totals.accepting_nominations }}</td> + <td> {{ totals.accepting_feedback }} - </th> - <th> + </td> + <td> {{ totals.nominations }} - </th> - <th> + </td> + <td> {{ totals.nominees }} - </th> - <th> + </td> + <td> {{ totals.accepted }} - </th> - <th> + </td> + <td> {{ totals.declined }} - </th> - <th> + </td> + <td> {{ totals.pending }} - </th> - <th> + </td> + <td> {{ totals.questionnaire }} - </th> - <th> + </td> + <td> {{ totals.comments }} - </th> + </td> </tr> <tr> - <th> + <th scope="row"> Unique nominee totals - </th> - <th> - </th> - <th> - </th> - <th> - </th> - <th> - </th> - <th> + </td> + <td> + </td> + <td> + </td> + <td> + </td> + <td> + </td> + <td> {{ unique_totals.nominees }} - </th> - <th> + </td> + <td> {{ unique_totals.accepted }} - </th> - <th> + </td> + <td> {{ unique_totals.declined }} - </th> - <th> + </td> + <td> {{ unique_totals.pending }} - </th> - <th> - </th> - <th> - </th> + </td> + <td> + </td> + <td> + </td> </tr> </tfoot> </table> @@ -152,20 +152,20 @@ <h2 class="mt-3"> <thead> <tr> {% if is_chair and nomcom.group.state_id == 'active' %} - <th colspan="2"> + <th scope="colgroup" colspan="2"> <i class="bi bi-check"></i> </th> {% endif %} - <th data-sort="nominee" colspan="2"> + <th scope="col" data-sort="nominee" colspan="2"> Nominee </th> - <th data-sort="position"> + <th scope="col" data-sort="position"> Position </th> - <th data-sort="state"> + <th scope="col" data-sort="state"> State </th> - <th data-sort="questionnaire"> + <th scope="col" data-sort="questionnaire"> Questionnaire response </th> </tr> diff --git a/ietf/templates/nomcom/send_reminder_mail.html b/ietf/templates/nomcom/send_reminder_mail.html index 90dac28ba55..5cd6f9b79e6 100644 --- a/ietf/templates/nomcom/send_reminder_mail.html +++ b/ietf/templates/nomcom/send_reminder_mail.html @@ -31,11 +31,11 @@ <h2>Send reminder to {{ reminder_description }}</h2> <table class="table table-sm table-striped"> <thead> <tr> - <th> + <th scope="col"> <i class="bi bi-check"></i> </th> - <th data-sort="nominee">Nominee</th> - <th data-sort="positions">Positions</th> + <th scope="col" data-sort="nominee">Nominee</th> + <th scope="col" data-sort="positions">Positions</th> </tr> </thead> <tbody> @@ -46,7 +46,7 @@ <h2>Send reminder to {{ reminder_description }}</h2> class="batch-select form-check-input" value="{{ nominee.id }}" name="selected" - checked="checked"> + checked> </td> <td>{% person_link nominee.person %}</td> <td>{{ nominee.interesting_positions|join:", " }}</td> diff --git a/ietf/templates/nomcom/view_feedback.html b/ietf/templates/nomcom/view_feedback.html index ac12c7e6bd2..3957b7c129d 100644 --- a/ietf/templates/nomcom/view_feedback.html +++ b/ietf/templates/nomcom/view_feedback.html @@ -21,10 +21,10 @@ <h3 class="mt-5" id="declined">Declined each nominated position</h3> <table class="table table-sm table-striped tablesorter"> <thead> <tr> - <th data-sort="first">First name</th> - <th data-sort="last">Last name</th> - <th data-sort="email">Email</th> - {% for ft in nominee_feedback_types %}<th data-sort="num">{{ ft.name }}</th>{% endfor %} + <th scope="col" data-sort="first">First name</th> + <th scope="col" data-sort="last">Last name</th> + <th scope="col" data-sort="email">Email</th> + {% for ft in nominee_feedback_types %}<th scope="col" data-sort="num">{{ ft.name }}</th>{% endfor %} </tr> </thead> <tbody> @@ -60,8 +60,8 @@ <h2 class="mt-5" id="topics">Feedback related to topics</h2> <table class="table table-sm table-striped tablesorter"> <thead> <tr> - <th data-sort="topic">Topic</th> - {% for ft in topic_feedback_types %}<th data-sort="num">{{ ft.name }}</th>{% endfor %} + <th scope="col" data-sort="topic">Topic</th> + {% for ft in topic_feedback_types %}<th scope="col" data-sort="num">{{ ft.name }}</th>{% endfor %} </tr> </thead> <tbody> @@ -87,8 +87,8 @@ <h2 class="mt-5" id="misc">Feedback not related to Nominees</h2> <table class="table table-sm table-striped tablesorter"> <thead> <tr> - <th></th> - {% for ft in independent_feedback_types %}<th data-sort="num">{{ ft.name }}</th>{% endfor %} + <th scope="col"></th> + {% for ft in independent_feedback_types %}<th scope="col" data-sort="num">{{ ft.name }}</th>{% endfor %} </tr> </thead> <tbody> diff --git a/ietf/templates/nomcom/view_feedback_pending.html b/ietf/templates/nomcom/view_feedback_pending.html index 81223d8b365..b248377dd6f 100644 --- a/ietf/templates/nomcom/view_feedback_pending.html +++ b/ietf/templates/nomcom/view_feedback_pending.html @@ -69,18 +69,18 @@ <h2>Feedback pending from email list</h2> <table class="table table-sm"> <thead> <tr> - <th>Code</th> - <th>Explanation</th> + <th scope="col">Code</th> + <th scope="col">Explanation</th> </tr> </thead> <tbody> <tr> - <th>U</th> + <th scope="row">U</th> <td>Unclassified</td> </tr> {% for legend, t in type_dict.items %} <tr> - <th>{{ legend }}</th> + <th scope="row">{{ legend }}</th> <td>{{ t.name }}</td> </tr> {% endfor %} @@ -89,12 +89,12 @@ <h2>Feedback pending from email list</h2> <table class="table table-sm table-striped"> <thead> <tr> - <th>Date</th> - <th class="text-center" title="Unclassified">U</th> - {% for legend, t in type_dict.items %}<th class="text-center" title="{{ t.name }}">{{ legend }}</th>{% endfor %} - <th>Author</th> - <th>Subject</th> - <th></th> + <th scope="col">Date</th> + <th scope="col" class="text-center" title="Unclassified">U</th> + {% for legend, t in type_dict.items %}<th scope="col" class="text-center" title="{{ t.name }}">{{ legend }}</th>{% endfor %} + <th scope="col">Author</th> + <th scope="col">Subject</th> + <th scope="col"></th> </tr> </thead> <tbody> @@ -112,7 +112,7 @@ <h2>Feedback pending from email list</h2> class="form-check-input" name="{{ form.type.html_name }}" value="{{ choice.0 }}" - {% if not choice.0 %}checked="checked"{% endif %} + {% if not choice.0 %}checked{% endif %} title="{{ choice.1 }}"> </td> {% endfor %} diff --git a/ietf/templates/nomcom/volunteers.html b/ietf/templates/nomcom/volunteers.html index 7ef78e23232..d5a9a0db81e 100644 --- a/ietf/templates/nomcom/volunteers.html +++ b/ietf/templates/nomcom/volunteers.html @@ -16,14 +16,14 @@ <h3 class="mt-3">{{ eligibility_group.grouper|yesno:"Eligible, Not Eligible" }}< <table class="table table-sm table-striped tablesorter"> <thead> <tr> - <th></th> - <th data-sort="last">Last name</th> - <th data-sort="first">First name</th> - <th data-sort="plain">Plain name</th> - <th data-sort="page">Profile page</th> - <th data-sort="affiliation">Affiliation</th> - <th data-sort="primary">Primary email</th> - <th data-sort="qualifications">Qualifications</th> + <th scope="col"></th> + <th scope="col" data-sort="last">Last name</th> + <th scope="col" data-sort="first">First name</th> + <th scope="col" data-sort="plain">Plain name</th> + <th scope="col" data-sort="page">Profile page</th> + <th scope="col" data-sort="affiliation">Affiliation</th> + <th scope="col" data-sort="primary">Primary email</th> + <th scope="col" data-sort="qualifications">Qualifications</th> </tr> </thead> <tbody> diff --git a/ietf/templates/oidc_provider/error.html b/ietf/templates/oidc_provider/error.html index a3e98fa96a9..9423bd0200d 100644 --- a/ietf/templates/oidc_provider/error.html +++ b/ietf/templates/oidc_provider/error.html @@ -6,7 +6,7 @@ <img class="col-2 mb-5" src="{% static 'ietf/images/ietflogo.png' %}" alt="IETF"> - <div class='alert alert-warning my-3'> + <div class="alert alert-warning my-3"> <h2>{{ error }}</h2> <hr> <p class="mb-0"> diff --git a/ietf/templates/person/person_link.html b/ietf/templates/person/person_link.html index dd497f780d7..7264bead983 100644 --- a/ietf/templates/person/person_link.html +++ b/ietf/templates/person/person_link.html @@ -3,5 +3,6 @@ title="{% if title %}{{ title }}{% else %}Datatracker profile of {{ name }}.{% endif %}" {% if email %} href="{% url 'ietf.person.views.profile' email_or_name=email %}" {% else %} href="{% url 'ietf.person.views.profile' email_or_name=name %}" {% endif %}>{{ name }}</a>{% if email and with_email %} <a {% if class %}class="text-reset"{% endif %} href="mailto:{{ email|urlencode }}" + aria-label="Compose email to {{ email }}." title="Compose email to {{ email }}."> <i class="bi bi-envelope"></i></a>{% endif %}{% else %}<span class="text-muted">(None)</span>{% endif %}</span> \ No newline at end of file diff --git a/ietf/templates/person/profile.html b/ietf/templates/person/profile.html index a259199f734..e17a2a5e7dd 100644 --- a/ietf/templates/person/profile.html +++ b/ietf/templates/person/profile.html @@ -35,9 +35,9 @@ <h1> <h2 class="mt-5" id="roles">Roles</h2> <table class="table table-sm table-striped tablesorter"> <thead> - <th data-sort="role">Role</th> - <th data-sort="group">Group</th> - <th data-sort="email">Email</th> + <th scope="col" data-sort="role">Role</th> + <th scope="col" data-sort="group">Group</th> + <th scope="col" data-sort="email">Email</th> </thead> <tbody> {% for role in person.role_set.all|active_roles %} @@ -61,8 +61,8 @@ <h2 class="mt-5" id="roles">Roles</h2> <h2 class="mt-5" id="extresources">External Resources</h2> <table class="table table-sm table-striped tablesorter"> <thead> - <th data-sort="name">Name</th> - <th data-sort="value">Value</th> + <th scope="col" data-sort="name">Name</th> + <th scope="col" data-sort="value">Value</th> </thead> <tbody> {% for extres in person.personextresource_set.all %} @@ -82,10 +82,10 @@ <h2 class="mt-5" id="rfcs"> {% if person.rfcs %} <table class="table table-sm table-striped tablesorter"> <thead> - <th data-sort="rfc">RFC</th> - <th data-sort="date">Date</th> - <th data-sort="title">Title</th> - <th data-sort="title">Cited by</th> + <th scope="col" data-sort="rfc">RFC</th> + <th scope="col" data-sort="date">Date</th> + <th scope="col" data-sort="title">Title</th> + <th scope="col" data-sort="title">Cited by</th> </thead> <tbody> {% for doc in person.rfcs %} diff --git a/ietf/templates/registration/edit_profile.html b/ietf/templates/registration/edit_profile.html index bab7b30c083..8eeb52998af 100644 --- a/ietf/templates/registration/edit_profile.html +++ b/ietf/templates/registration/edit_profile.html @@ -123,12 +123,15 @@ <h1>Profile information for {{ user.person.name }}</h1> <label class="col-sm-2 col-form-label fw-bold">Email addresses</label> <div class="col-sm-10 emails"> <table class="table table-sm"> - <tr> - <th class="text-center">Primary</th> - <th class="text-center">Active</th> - <th>Address</th> - <th>Origin</th> - </tr> + <thead> + <tr> + <th scope="col" class="text-center">Primary</th> + <th scope="col" class="text-center">Active</th> + <th scope="col">Address</th> + <th scope="col">Origin</th> + </tr> + </thead> + <tbody> {% for email in emails %} <tr> <td class="text-center"> @@ -156,6 +159,7 @@ <h1>Profile information for {{ user.person.name }}</h1> <td>{{ email.origin|default:'(unknown)'|urlize_ietf_docs }}</td> </tr> {% endfor %} + </tbody> </table> <p class="form-text"> Note: Email addresses cannot be deleted in this form, only deactivated. diff --git a/ietf/templates/review/unavailable_table.html b/ietf/templates/review/unavailable_table.html index 2f2ca134614..c6499a70ee6 100644 --- a/ietf/templates/review/unavailable_table.html +++ b/ietf/templates/review/unavailable_table.html @@ -1,22 +1,22 @@ <table class="mt-2 mb-0 table table-sm table-borderless"> {% for p in unavailable_periods %} <tr class="unavailable-period-{{ p.state }}"> - <th>Period:</th> + <th scope="row">Period:</th> <td>{{ p.state }}</td> </tr> <tr class="unavailable-period-{{ p.state }}"> - <th>Dates:</th> + <th scope="row">Dates:</th> <td> {% if p.start_date or p.end_date %}{{ p.start_date|default:"∞" }} -{% endif %} {{ p.end_date|default:"∞" }} </td> </tr> <tr class="unavailable-period-{{ p.state }}"> - <th>Availability:</th> + <th scope="row">Availability:</th> <td>{{ p.get_availability_display }}</td> </tr> <tr class="unavailable-period-{{ p.state }}"> - <th>Reason:</th> + <th scope="row">Reason:</th> <td>{{ p.reason }}</td> </tr> {% endfor %} diff --git a/ietf/templates/stats/document_stats_author_affiliation.html b/ietf/templates/stats/document_stats_author_affiliation.html index 96c67672a2a..e94fda89f7a 100644 --- a/ietf/templates/stats/document_stats_author_affiliation.html +++ b/ietf/templates/stats/document_stats_author_affiliation.html @@ -44,9 +44,9 @@ <h2>Data</h2> <table class="table table-sm table-striped tablesorter stats-data"> <thead> <tr> - <th data-sort="affiliation">Affiliation</th> - <th data-sort="num">Percentage of authors</th> - <th data-sort="num">Authors</th> + <th scope="col" data-sort="affiliation">Affiliation</th> + <th scope="col" data-sort="num">Percentage of authors</th> + <th scope="col" data-sort="num">Authors</th> </tr> </thead> {% if table_data %} @@ -90,8 +90,8 @@ <h2>Affiliation Aliases</h2> <table class="table table-sm table-striped tablesorter"> <thead> <tr> - <th data-sort="affiliation">Affiliation</th> - <th data-sort="alias">Alias</th> + <th scope="col" data-sort="affiliation">Affiliation</th> + <th scope="col" data-sort="alias">Alias</th> </tr> </thead> {% if alias_data %} diff --git a/ietf/templates/stats/document_stats_author_citations.html b/ietf/templates/stats/document_stats_author_citations.html index 29e4cd96851..4bf1fdf2fbd 100644 --- a/ietf/templates/stats/document_stats_author_citations.html +++ b/ietf/templates/stats/document_stats_author_citations.html @@ -51,9 +51,9 @@ <h2>Data</h2> <table class="table table-sm table-striped tablesorter stats-data"> <thead> <tr> - <th data-sort="num">Citations</th> - <th data-sort="num">Percentage of authors</th> - <th data-sort="authors">Authors</th> + <th scope="col" data-sort="num">Citations</th> + <th scope="col" data-sort="num">Percentage of authors</th> + <th scope="col" data-sort="authors">Authors</th> </tr> </thead> {% if table_data %} diff --git a/ietf/templates/stats/document_stats_author_continent.html b/ietf/templates/stats/document_stats_author_continent.html index 94b22ac713f..852b9afa8a2 100644 --- a/ietf/templates/stats/document_stats_author_continent.html +++ b/ietf/templates/stats/document_stats_author_continent.html @@ -44,9 +44,9 @@ <h2>Data</h2> <table class="table table-sm table-striped tablesorter stats-data"> <thead> <tr> - <th data-sort="continent">Continent</th> - <th data-sort="num">Percentage of authors</th> - <th data-sort="num">Authors</th> + <th scope="col" data-sort="continent">Continent</th> + <th scope="col" data-sort="num">Percentage of authors</th> + <th scope="col" data-sort="num">Authors</th> </tr> </thead> {% if table_data %} diff --git a/ietf/templates/stats/document_stats_author_country.html b/ietf/templates/stats/document_stats_author_country.html index 6efd8d2b4a8..5ef77289ae7 100644 --- a/ietf/templates/stats/document_stats_author_country.html +++ b/ietf/templates/stats/document_stats_author_country.html @@ -44,7 +44,7 @@ <h2>Data</h2> <table class="table table-sm table-striped tablesorter stats-data"> <thead> <tr> - <th data-sort="country">Country</th> + <th scope="col" data-sort="country">Country</th> <th class="text-end" data-sort="percentage">Percentage of authors</th> <th class="text-end" data-sort="authors">Authors</th> </tr> @@ -100,8 +100,8 @@ <h2>Country Aliases</h2> {% if alias_data %} <table class="table table-sm table-striped tablesorter"> <thead> - <th data-sort="country">Country</th> - <th data-sort="alias">Alias</th> + <th scope="col" data-sort="country">Country</th> + <th scope="col" data-sort="alias">Alias</th> </thead> {% if alias_data %} <tbody> diff --git a/ietf/templates/stats/document_stats_author_documents.html b/ietf/templates/stats/document_stats_author_documents.html index bd1ce0d3bce..0540f09f349 100644 --- a/ietf/templates/stats/document_stats_author_documents.html +++ b/ietf/templates/stats/document_stats_author_documents.html @@ -50,9 +50,9 @@ <h2>Data</h2> <table class="table table-sm table-striped tablesorter stats-data"> <thead> <tr> - <th data-sort="num">Documents</th> - <th data-sort="num">Percentage of authors</th> - <th data-sort="num">Authors</th> + <th scope="col" data-sort="num">Documents</th> + <th scope="col" data-sort="num">Percentage of authors</th> + <th scope="col" data-sort="num">Authors</th> </tr> </thead> {% if table_data %} diff --git a/ietf/templates/stats/document_stats_author_hindex.html b/ietf/templates/stats/document_stats_author_hindex.html index 87ae4fff2c6..b2e03682ce1 100644 --- a/ietf/templates/stats/document_stats_author_hindex.html +++ b/ietf/templates/stats/document_stats_author_hindex.html @@ -49,9 +49,9 @@ <h2>Data</h2> <table class="table table-sm table-striped tablesorter stats-data"> <thead> <tr> - <th data-sort="num">h-index</th> - <th data-sort="num">Percentage of authors</th> - <th data-sort="Authors">Authors</th> + <th scope="col" data-sort="num">h-index</th> + <th scope="col" data-sort="num">Percentage of authors</th> + <th scope="col" data-sort="Authors">Authors</th> </tr> </thead> {% if table_data %} diff --git a/ietf/templates/stats/document_stats_authors.html b/ietf/templates/stats/document_stats_authors.html index 90a18a6188c..19bb4950754 100644 --- a/ietf/templates/stats/document_stats_authors.html +++ b/ietf/templates/stats/document_stats_authors.html @@ -49,9 +49,9 @@ <h3>Data</h3> <table class="table table-sm table-striped tablesorter stats-data"> <thead> <tr> - <th data-sort="num">Authors</th> - <th data-sort="num">Percentage of {{ doc_label }}s</th> - <th data-sort="num">{{ doc_label|capfirst }}s</th> + <th scope="col" data-sort="num">Authors</th> + <th scope="col" data-sort="num">Percentage of {{ doc_label }}s</th> + <th scope="col" data-sort="num">{{ doc_label|capfirst }}s</th> </tr> </thead> {% if table_data %} diff --git a/ietf/templates/stats/document_stats_format.html b/ietf/templates/stats/document_stats_format.html index 13e080eb6f0..b6578ffd866 100644 --- a/ietf/templates/stats/document_stats_format.html +++ b/ietf/templates/stats/document_stats_format.html @@ -45,9 +45,9 @@ <h2>Data</h2> <table class="table table-sm table-striped tablesorter stats-data"> <thead> <tr> - <th data-sort="format">Format</th> - <th data-sort="num">Percentage of {{ doc_label }}s</th> - <th data-sort="label">{{ doc_label|capfirst }}s</th> + <th scope="col" data-sort="format">Format</th> + <th scope="col" data-sort="num">Percentage of {{ doc_label }}s</th> + <th scope="col" data-sort="label">{{ doc_label|capfirst }}s</th> </tr> </thead> {% if table_data %} diff --git a/ietf/templates/stats/document_stats_formlang.html b/ietf/templates/stats/document_stats_formlang.html index 123fd3ecf46..33b9a3174f9 100644 --- a/ietf/templates/stats/document_stats_formlang.html +++ b/ietf/templates/stats/document_stats_formlang.html @@ -45,9 +45,9 @@ <h2>Data</h2> <table class="table table-sm table-striped tablesorter stats-data"> <thead> <tr> - <th data-sort="formal">Formal language</th> - <th data-sort="num">Percentage of {{ doc_label }}s</th> - <th data-sort="num">{{ doc_label|capfirst }}s</th> + <th scope="col" data-sort="formal">Formal language</th> + <th scope="col" data-sort="num">Percentage of {{ doc_label }}s</th> + <th scope="col" data-sort="num">{{ doc_label|capfirst }}s</th> </tr> </thead> {% if table_data %} diff --git a/ietf/templates/stats/document_stats_pages.html b/ietf/templates/stats/document_stats_pages.html index 6fbb60ebf5c..e74fab937b3 100644 --- a/ietf/templates/stats/document_stats_pages.html +++ b/ietf/templates/stats/document_stats_pages.html @@ -43,9 +43,9 @@ <h2>Data</h2> <table class="table table-sm table-striped tablesorter stats-data"> <thead> <tr> - <th data-sort="num">Pages</th> - <th data-sort="num">Percentage of {{ doc_label }}s</th> - <th data-sort="num">{{ doc_label|capfirst }}s</th> + <th scope="col" data-sort="num">Pages</th> + <th scope="col" data-sort="num">Percentage of {{ doc_label }}s</th> + <th scope="col" data-sort="num">{{ doc_label|capfirst }}s</th> </tr> </thead> {% if table_data %} diff --git a/ietf/templates/stats/document_stats_words.html b/ietf/templates/stats/document_stats_words.html index ad5acb4169f..ec992f1e91e 100644 --- a/ietf/templates/stats/document_stats_words.html +++ b/ietf/templates/stats/document_stats_words.html @@ -43,9 +43,9 @@ <h2>Data</h2> <table class="table table-sm table-striped tablesorter stats-data"> <thead> <tr> - <th data-sort="num">Words</th> - <th data-sort="num">Percentage of {{ doc_label }}s</th> - <th data-sort="num">{{ doc_label|capfirst }}s</th> + <th scope="col" data-sort="num">Words</th> + <th scope="col" data-sort="num">Percentage of {{ doc_label }}s</th> + <th scope="col" data-sort="num">{{ doc_label|capfirst }}s</th> </tr> </thead> {% if table_data %} diff --git a/ietf/templates/stats/known_countries_list.html b/ietf/templates/stats/known_countries_list.html index 39c182700be..0cdac6b6dfa 100644 --- a/ietf/templates/stats/known_countries_list.html +++ b/ietf/templates/stats/known_countries_list.html @@ -21,8 +21,8 @@ <h1> <table class="table table-sm table-striped tablesorter"> <thead> <tr> - <th data-sort="name">Name</th> - <th data-sort="aliases">Aliases (lowercase aliases are matched case-insensitive)</th> + <th scope="col" data-sort="name">Name</th> + <th scope="col" data-sort="aliases">Aliases (lowercase aliases are matched case-insensitive)</th> </tr> </thead> <tbody> diff --git a/ietf/templates/stats/meeting_stats_country.html b/ietf/templates/stats/meeting_stats_country.html index ba98b3e182e..cebbad3c9fe 100644 --- a/ietf/templates/stats/meeting_stats_country.html +++ b/ietf/templates/stats/meeting_stats_country.html @@ -72,9 +72,9 @@ <h2>Data</h2> <table class="table table-sm stats-data tablesorter"> <thead> <tr> - <th>Country</th> - <th>Percentage of attendees</th> - <th>Attendees</th> + <th scope="col">Country</th> + <th scope="col">Percentage of attendees</th> + <th scope="col">Attendees</th> </tr> </thead> <tbody> diff --git a/ietf/templates/stats/meeting_stats_overview.html b/ietf/templates/stats/meeting_stats_overview.html index ee105ff5107..9a3b5dc6a64 100644 --- a/ietf/templates/stats/meeting_stats_overview.html +++ b/ietf/templates/stats/meeting_stats_overview.html @@ -123,12 +123,12 @@ <h2>Data</h2> <table class="table table-sm table-striped stats-data tablesorter"> <thead> <tr> - <th data-sort="num">Meeting</th> - <th data-sort="date">Date</th> - <th data-sort="city">City</th> - <th data-sort="country">Country</th> - <th data-sort="continent">Continent</th> - <th data-sort="num">Attendees</th> + <th scope="col" data-sort="num">Meeting</th> + <th scope="col" data-sort="date">Date</th> + <th scope="col" data-sort="city">City</th> + <th scope="col" data-sort="country">Country</th> + <th scope="col" data-sort="continent">Continent</th> + <th scope="col" data-sort="num">Attendees</th> </tr> </thead> <tbody> diff --git a/ietf/templates/stats/review_stats.html b/ietf/templates/stats/review_stats.html index 13291fe44bd..5733ea77790 100644 --- a/ietf/templates/stats/review_stats.html +++ b/ietf/templates/stats/review_stats.html @@ -139,30 +139,30 @@ <h2>Completion status and completion time</h2> <table class="review-stats table table-sm table-striped tablesorter"> <thead> <tr> - <th data-sort="{{ level }}"> + <th scope="col" data-sort="{{ level }}"> {% if level == "team" %} Team {% elif level == "reviewer" %} Reviewer {% endif %} </th> - <th data-sort="num" + <th scope="col" data-sort="num" title="Requests that are currently requested or accepted by reviewer">Open in time</th> - <th data-sort="num" + <th scope="col" data-sort="num" title="Requests that are currently requested or accepted by reviewer and past the deadline"> Open late </th> - <th data-sort="num" + <th scope="col" data-sort="num" title="Requests that have been completed partially or completely">Completed in time</th> - <th data-sort="num" + <th scope="col" data-sort="num" title="Requests that have been completed partially or completely past the deadline"> Completed late </th> - <th data-sort="num" + <th scope="col" data-sort="num" title="Requests that are rejected by the reviewer, withdrawn, overtaken by events or with no response from reviewer"> Not completed </th> - <th data-sort="num" + <th scope="col" data-sort="num" title="Average time between assignment and completion for completed reviews, in days"> Avg. compl. days {% if count == "pages" %}/page{% endif %} @@ -202,7 +202,7 @@ <h2> <table class="review-stats table table-sm table-striped tablesorter"> <thead> <tr> - <th data-sort="{{ level }}"> + <th scope="col" data-sort="{{ level }}"> {% if level == "team" %} Team {% elif level == "reviewer" %} @@ -210,7 +210,7 @@ <h2> {% endif %} </th> {% for r in results %} - <th data-sort="num"> + <th scope="col" data-sort="num"> {{ r.name }} </th> {% endfor %} @@ -242,7 +242,7 @@ <h2> <table class="review-stats table table-sm table-striped tablesorter"> <thead> <tr> - <th data-sort="{{ level }}"> + <th scope="col" data-sort="{{ level }}"> {% if level == "team" %} Team {% elif level == "reviewer" %} @@ -250,7 +250,7 @@ <h2> {% endif %} </th> {% for s in states %} - <th data-sort="num"> + <th scope="col" data-sort="num"> {{ s.name }} </th> {% endfor %} diff --git a/ietf/templates/submit/approvals.html b/ietf/templates/submit/approvals.html index 46ce39e169c..9ddfa7f0a20 100644 --- a/ietf/templates/submit/approvals.html +++ b/ietf/templates/submit/approvals.html @@ -18,8 +18,8 @@ <h2 class="mt-5" id="approvals">Submissions you can approve</h2> <table class="approvals table table-sm table-striped tablesorter"> <thead> <tr> - <th data-sort="draft">Draft</th> - <th data-sort="date">Submitted</th> + <th scope="col" data-sort="draft">Draft</th> + <th scope="col" data-sort="date">Submitted</th> </tr> </thead> <tbody> @@ -51,10 +51,10 @@ <h2 class="mt-5" id="preapprovals">Pre-approved drafts not yet submitted</h2> <table class="preapprovals table table-sm table-striped tablesorter"> <thead> <tr> - <th data-sort="draft">Draft name</th> - <th data-sort="date">Pre-approved</th> - <th data-sort="by">By</th> - <th></th> + <th scope="col" data-sort="draft">Draft name</th> + <th scope="col" data-sort="date">Pre-approved</th> + <th scope="col" data-sort="by">By</th> + <th scope="col"></th> </tr> </thead> <tbody> @@ -83,8 +83,8 @@ <h2 class="mt-5" id="recently-approved">Approved drafts within the past {{ days <table class="recently-approved table table-sm table-striped tablesorter"> <thead> <tr> - <th data-sort="draft">Draft</th> - <th data-sort="date">Submitted</th> + <th scope="col" data-sort="draft">Draft</th> + <th scope="col" data-sort="date">Submitted</th> </tr> </thead> <tbody> diff --git a/ietf/templates/submit/edit_submission.html b/ietf/templates/submit/edit_submission.html index f6ee3e98b41..41cf48b3779 100644 --- a/ietf/templates/submit/edit_submission.html +++ b/ietf/templates/submit/edit_submission.html @@ -37,7 +37,7 @@ <h5 class="modal-title" id="twopageslabel">First two pages of {{ submission.name <h2 class="mt-5">Adjust meta-data of submitted {{ submission.name }}</h2> <table class="table table-sm table-striped"> <tr> - <th>Document</th> + <th scope="row">Document</th> <td> {{ submission.name }} <button class="btn btn-primary btn-sm float-end ms-1" @@ -49,11 +49,11 @@ <h2 class="mt-5">Adjust meta-data of submitted {{ submission.name }}</h2> </td> </tr> <tr> - <th>Submission date</th> + <th scope="row">Submission date</th> <td>{{ submission.submission_date }}</td> </tr> <tr> - <th>Group</th> + <th scope="row">Group</th> <td> {{ submission.group|default:"Individual Submission" }} {% if submission.group %}<a href="{{ submission.group.about_url }}">({{ submission.group.acronym|upper }})</a>{% endif %} @@ -65,7 +65,7 @@ <h2 class="mt-5">Adjust meta-data of submitted {{ submission.name }}</h2> </td> </tr> <tr> - <th>File size</th> + <th scope="row">File size</th> <td>{{ submission.file_size|filesizeformat }}</td> </tr> </table> diff --git a/ietf/templates/submit/manual_post.html b/ietf/templates/submit/manual_post.html index 1f0a0a9c7f6..5c986800bef 100644 --- a/ietf/templates/submit/manual_post.html +++ b/ietf/templates/submit/manual_post.html @@ -18,10 +18,10 @@ <h2 class="mt-3" id="man_post">Submissions needing manual posting</h2> class="submissions table table-sm table-striped tablesorter"> <thead> <tr> - <th data-sort="draft">Draft</th> - <th data-sort="date">Submitted</th> - <th data-sort="passes">Passes Checks</th> - <th data-sort="metadata">Metadata</th> + <th scope="col" data-sort="draft">Draft</th> + <th scope="col" data-sort="date">Submitted</th> + <th scope="col" data-sort="passes">Passes Checks</th> + <th scope="col" data-sort="metadata">Metadata</th> </tr> </thead> <tbody> @@ -68,10 +68,10 @@ <h2 class="mt-3" id="id_upload">Submissions awaiting draft upload</h2> class="waiting-for-draft table table-sm table-striped tablesorter"> <thead> <tr> - <th data-sort="name">Name</th> - <th data-sort="rev">Rev</th> - <th data-sort="date">Submitted</th> - <th></th> + <th scope="col" data-sort="name">Name</th> + <th scope="col" data-sort="rev">Rev</th> + <th scope="col" data-sort="date">Submitted</th> + <th scope="col"></th> </tr> </thead> <tbody> diff --git a/ietf/templates/submit/submission_status.html b/ietf/templates/submit/submission_status.html index 3ec1b9e6849..e2b9d5c4694 100644 --- a/ietf/templates/submit/submission_status.html +++ b/ietf/templates/submit/submission_status.html @@ -163,7 +163,7 @@ <h2 class="mt-5">Meta-data from the submission</h2> {% endif %} <table class="table table-sm table-striped"> <tr> - <th>Document</th> + <th scope="row">Document</th> <td> {% if submission.state_id == "posted" %} <a href="{% url 'ietf.doc.views_doc.document_main' name=submission.name %}">{{ submission.name }}</a> @@ -184,7 +184,7 @@ <h2 class="mt-5">Meta-data from the submission</h2> </td> </tr> <tr> - <th>Revision</th> + <th scope="row">Revision</th> <td> {{ submission.rev }} {% if errors.rev %} @@ -200,7 +200,7 @@ <h2 class="mt-5">Meta-data from the submission</h2> </td> </tr> <tr> - <th>Group</th> + <th scope="row">Group</th> <td> {{ submission.group|default:"Individual Submission" }} {% if submission.group %}<a href="{{ submission.group.about_url }}">({{ submission.group.acronym|upper }})</a>{% endif %} @@ -212,7 +212,7 @@ <h2 class="mt-5">Meta-data from the submission</h2> </td> </tr> <tr> - <th>Document date</th> + <th scope="row">Document date</th> <td> {{ submission.document_date }} {% if errors.document_date %} @@ -223,11 +223,11 @@ <h2 class="mt-5">Meta-data from the submission</h2> </td> </tr> <tr> - <th>Submission date</th> + <th scope="row">Submission date</th> <td>{{ submission.submission_date }}</td> </tr> <tr> - <th>Title</th> + <th scope="row">Title</th> <td> {{ submission.title|default:"" }} {% if errors.title %} @@ -238,7 +238,7 @@ <h2 class="mt-5">Meta-data from the submission</h2> </td> </tr> <tr> - <th>Author count</th> + <th scope="row">Author count</th> <td> {{ submission.authors|length }} author{{ submission.authors|pluralize }} {% if errors.authors %} @@ -250,7 +250,7 @@ <h2 class="mt-5">Meta-data from the submission</h2> </tr> {% for author in submission.authors %} <tr> - <th>Author {{ forloop.counter }}</th> + <th scope="row">Author {{ forloop.counter }}</th> <td> {{ author.name }} {% if author.email %}<{{ author.email|linkify }}>{% endif %} @@ -285,7 +285,7 @@ <h2 class="mt-5">Meta-data from the submission</h2> </tr> {% endfor %} <tr> - <th> + <th scope="row"> Abstract </th> <td> @@ -298,7 +298,7 @@ <h2 class="mt-5">Meta-data from the submission</h2> </td> </tr> <tr> - <th> + <th scope="row"> Page count </th> <td> @@ -311,7 +311,7 @@ <h2 class="mt-5">Meta-data from the submission</h2> </td> </tr> <tr> - <th> + <th scope="row"> File size </th> <td> @@ -319,7 +319,7 @@ <h2 class="mt-5">Meta-data from the submission</h2> </td> </tr> <tr> - <th> + <th scope="row"> Formal languages used </th> <td> @@ -335,7 +335,7 @@ <h2 class="mt-5">Meta-data from the submission</h2> </td> </tr> <tr> - <th> + <th scope="row"> Submission additional resources </th> <td> @@ -354,7 +354,7 @@ <h2 class="mt-5">Meta-data from the submission</h2> </tr> {% if external_resources.show_changes %} <tr> - <th> + <th scope="row"> Current document additional resources </th> <td> @@ -418,7 +418,7 @@ <h2 class="mt-5"> </h2> <table class="table table-sm table-striped"> <tr> - <th> + <th scope="row"> Name </th> <td> @@ -426,7 +426,7 @@ <h2 class="mt-5"> </td> </tr> <tr> - <th> + <th scope="row"> Email address </th> <td> @@ -441,7 +441,7 @@ <h2 class="mt-5"> </h2> <table class="table table-sm table-striped"> <tr> - <th> + <th scope="row"> Replaces </th> <td> @@ -521,13 +521,13 @@ <h2 class="mt-5"> <table id="history" class="table table-sm table-striped tablesorter"> <thead> <tr> - <th data-sort="date"> + <th scope="col" data-sort="date"> Date </th> - <th data-sort="by"> + <th scope="col" data-sort="by"> By </th> - <th data-sort="event"> + <th scope="col" data-sort="event"> Event </th> </tr> diff --git a/ietf/templates/submit/tool_instructions.html b/ietf/templates/submit/tool_instructions.html index d47635c2ba3..fd63ce1f9a9 100644 --- a/ietf/templates/submit/tool_instructions.html +++ b/ietf/templates/submit/tool_instructions.html @@ -56,24 +56,24 @@ <h3 class="mt-4">Upload screen</h3> <table class="table table-sm table-striped"> <tbody> <tr class="table-info"> - <th colspan="2">Form buttons and resulting actions:</th> + <th scope="colgroup" colspan="2">Form buttons and resulting actions:</th> </tr> </tbody> <tbody> <tr> - <th>.txt format</th> + <th scope="row">.txt format</th> <td>Button to select a plain-text file of an I-D from a user's local file system.</td> </tr> <tr> - <th>.xml format</th> + <th scope="row">.xml format</th> <td>Button to select an XML file of an I-D from a user's local file system.</td> </tr> <tr> - <th>.pdf format</th> + <th scope="row">.pdf format</th> <td>Button to select a PDF file of an I-D from a user's local file system.</td> </tr> <tr> - <th>Upload</th> + <th scope="row">Upload</th> <td> Button to upload the document(s). The tool will begin parsing the plain-text document (or creating it from the xml if only xml is provided) and validate the document. The parsed meta-data will be displayed for user confirmation along with the validation results. </td> @@ -97,18 +97,18 @@ <h3 class="mt-4">Validation screen</h3> <table class="table table-sm table-striped"> <tbody> <tr class="table-info"> - <th colspan="2">Form buttons and resulting actions:</th> + <th scope="colgroup" colspan="2">Form buttons and resulting actions:</th> </tr> </tbody> <tbody> <tr> - <th>Adjust meta-data</th> + <th scope="row">Adjust meta-data</th> <td> Button to proceed to a screen with editable form fields for correcting the meta-data. A user can use this button to request manual posting by the Secretariat. </td> </tr> <tr> - <th>Cancel</th> + <th scope="row">Cancel</th> <td> Button to cancel the current submission. A user will be prompted for a confirmation before the submission is canceled. Once confirmed, the current submission will be canceled, the uploaded document(s) will be deleted permanently from the server, and a notification message will be sent to all authors with the IP address of the user who just canceled the submission. </td> @@ -116,14 +116,14 @@ <h3 class="mt-4">Validation screen</h3> </tbody> <tbody> <tr class="table-info"> - <th colspan="2"> + <th scope="colgroup" colspan="2"> When no meta-data error is detected: </th> </tr> </tbody> <tbody> <tr> - <th> + <th scope="row"> Button(s) with author's name(s) </th> <td> @@ -131,7 +131,7 @@ <h3 class="mt-4">Validation screen</h3> </td> </tr> <tr> - <th> + <th scope="row"> Post now </th> <td> @@ -157,14 +157,14 @@ <h3 class="mt-4"> <table class="table table-sm table-striped"> <tbody> <tr class="table-info"> - <th colspan="2"> + <th scope="colgroup" colspan="2"> Form buttons and resulting actions: </th> </tr> </tbody> <tbody> <tr> - <th> + <th scope="row"> Button(s) with author's name(s) </th> <td> @@ -172,7 +172,7 @@ <h3 class="mt-4"> </td> </tr> <tr> - <th> + <th scope="row"> Submit for manual posting </th> <td> @@ -180,7 +180,7 @@ <h3 class="mt-4"> </td> </tr> <tr> - <th> + <th scope="row"> Cancel </th> <td> @@ -199,14 +199,14 @@ <h3 class="mt-4"> <table class="table table-sm table-striped"> <tbody> <tr class="table-info"> - <th colspan="2"> + <th scope="colgroup" colspan="2"> Form buttons and resulting actions: </th> </tr> </tbody> <tbody> <tr> - <th> + <th scope="row"> Cancel </th> <td> diff --git a/ietf/templates/sync/discrepancies.html b/ietf/templates/sync/discrepancies.html index 23f76236eb4..2616ca9173a 100644 --- a/ietf/templates/sync/discrepancies.html +++ b/ietf/templates/sync/discrepancies.html @@ -14,10 +14,10 @@ <h2>{{ title }}</h2> <table class="table table-sm table-striped tablesorter"> <thead> <tr> - <th data-sort="draft">Draft name</th> - <th data-sort="iesg">IESG state</th> - <th data-sort="rfc">RFC Editor state</th> - <th data-sort="iana">IANA Action state</th> + <th scope="col" data-sort="draft">Draft name</th> + <th scope="col" data-sort="iesg">IESG state</th> + <th scope="col" data-sort="rfc">RFC Editor state</th> + <th scope="col" data-sort="iana">IANA Action state</th> </tr> </thead> <tbody> diff --git a/ietf/templates/sync/rfceditor_undo.html b/ietf/templates/sync/rfceditor_undo.html index 4a042be605f..cfd74851fa0 100644 --- a/ietf/templates/sync/rfceditor_undo.html +++ b/ietf/templates/sync/rfceditor_undo.html @@ -13,10 +13,10 @@ <h1>Undo RFC Editor state events</h1> <table class="table table-sm table-striped tablesorter"> <thead> <tr> - <th data-sort="time">Time</th> - <th data-sort="document">Document</th> - <th data-sort="text">Text</th> - <th data-sort="undo">Undo</th> + <th scope="col" data-sort="time">Time</th> + <th scope="col" data-sort="document">Document</th> + <th scope="col" data-sort="text">Text</th> + <th scope="col" data-sort="undo">Undo</th> </tr> </thead> <tbody> From ba7fd487a125cb9ca3851d6d7b331cdea417e57c Mon Sep 17 00:00:00 2001 From: Lars Eggert <lars@eggert.org> Date: Tue, 29 Mar 2022 17:58:44 +0300 Subject: [PATCH 06/26] More fixes --- .../templates/dbtemplate/template_show.html | 2 +- ietf/meeting/views.py | 4 +- ietf/static/js/agenda_materials.js | 4 +- ietf/static/js/agenda_timezone.js | 2 +- ietf/static/js/list.js | 2 +- ietf/templates/debug.html | 2 +- ietf/templates/doc/document_charter.html | 2 +- ietf/templates/doc/document_draft.html | 64 +++++++------------ ietf/templates/doc/document_html.html | 25 ++++---- ietf/templates/doc/document_material.html | 2 +- ietf/templates/doc/draft/release_draft.html | 4 +- .../templates/doc/drafts_in_iesg_process.html | 2 +- ietf/templates/group/group_about.html | 2 +- ietf/templates/group/materials.html | 2 +- ietf/templates/meeting/timeslot_edit.html | 2 +- ietf/templates/meeting/upcoming.html | 4 +- ietf/templates/nomcom/show_template.html | 2 +- ietf/utils/test_runner.py | 12 +++- 18 files changed, 64 insertions(+), 75 deletions(-) diff --git a/ietf/dbtemplate/templates/dbtemplate/template_show.html b/ietf/dbtemplate/templates/dbtemplate/template_show.html index 177b50affba..a23dfa5dd50 100644 --- a/ietf/dbtemplate/templates/dbtemplate/template_show.html +++ b/ietf/dbtemplate/templates/dbtemplate/template_show.html @@ -34,7 +34,7 @@ <h2>Meta information</h2> <h2>Template content</h2> <div class = "card"> - <p class='pasted'>{{ template.content }}</p> + <p class="pasted">{{ template.content }}</p> </div> {% endblock %} \ No newline at end of file diff --git a/ietf/meeting/views.py b/ietf/meeting/views.py index 12b84dfaa67..48329d59745 100644 --- a/ietf/meeting/views.py +++ b/ietf/meeting/views.py @@ -3001,7 +3001,7 @@ def ajax_get_utc(request): utc_day_offset = (naive_utc_dt.date() - dt.date()).days html = "<span>{utc} UTC</span>".format(utc=utc) if utc_day_offset != 0: - html = html + "<span class='day-offset'> {0:+d} Day</span>".format(utc_day_offset) + html = html + '<span class="day-offset"> {0:+d} Day</span>'.format(utc_day_offset) context_data = {'timezone': timezone, 'time': time, 'utc': utc, @@ -4202,4 +4202,4 @@ def import_session_minutes(request, session_id, num): 'session': session, 'contents_unchanged': not contents_changed, }, - ) + ) \ No newline at end of file diff --git a/ietf/static/js/agenda_materials.js b/ietf/static/js/agenda_materials.js index c5db2fd4d2f..9fea88f79e1 100644 --- a/ietf/static/js/agenda_materials.js +++ b/ietf/static/js/agenda_materials.js @@ -34,9 +34,9 @@ var agenda_materials; // public interface data = "<p>Error retrieving " + data_src + ": Missing content-type in response header</p>"; } else if (t.indexOf("text/plain") > -1) { - data = "<pre class='agenda'>" + data + "</pre>"; + data = '<pre class="agenda">' + data + "</pre>"; } else if (t.indexOf("text/markdown") > -1) { - data = "<pre class='agenda'>" + data + "</pre>"; + data = '<pre class="agenda">' + data + "</pre>"; } else if(t.indexOf("text/html") > -1) { // nothing to do here } else { diff --git a/ietf/static/js/agenda_timezone.js b/ietf/static/js/agenda_timezone.js index 0174d1b960a..455c4782f20 100644 --- a/ietf/static/js/agenda_timezone.js +++ b/ietf/static/js/agenda_timezone.js @@ -124,7 +124,7 @@ function format_tooltip_notice(start, end) { // Format tooltip table function format_tooltip_table(start, end) { var current_timezone = get_current_tz_cb(); - var out = '<div class="text-start"><table class="table table-sm"><tr><th></th><th>Session start</th><th>Session end</th></tr>'; + var out = '<div class="text-start"><table class="table table-sm"><thead><tr><th scope="col"></th><th scope="col">Session start</th><th scope="col">Session end</th></tr></thead>'; if (window.meeting_timezone !== "") { out += '<tr><th class="timehead">Meeting timezone</th><td>' + format_time(start, window.meeting_timezone, 0) + '</td><td>' + diff --git a/ietf/static/js/list.js b/ietf/static/js/list.js index c06ca99bb17..f6123997389 100644 --- a/ietf/static/js/list.js +++ b/ietf/static/js/list.js @@ -70,7 +70,7 @@ $(document) .addClass("sort"); // $(header_row) // .children("th, td") - // .wrapInner("<span class='tablesorter-th'></span>"); + // .wrapInner('<span class="tablesorter-th"></span>'); // // .each((i, e) => field_magic(i, e, fields)); if ($(header_row) diff --git a/ietf/templates/debug.html b/ietf/templates/debug.html index bb8cd05b52a..52db86f7a54 100644 --- a/ietf/templates/debug.html +++ b/ietf/templates/debug.html @@ -103,7 +103,7 @@ <h4 class="modal-title" id="modal-title-{{ forloop.counter }}">QuerySet Origin f </div> </div> {% else %} - <small class='text-center text-muted'> + <small class="text-center text-muted"> Add <code>ietf.context_processors.sql_debug</code> to <code>settings.DEV_TEMPLATE_CONTEXT_PROCESSORS</code> to turn on the SQL statement table. </small> {% endif %} diff --git a/ietf/templates/doc/document_charter.html b/ietf/templates/doc/document_charter.html index e54f0918b1a..15f8bcc973d 100644 --- a/ietf/templates/doc/document_charter.html +++ b/ietf/templates/doc/document_charter.html @@ -175,7 +175,7 @@ {% endif %} </td> <td> - {{ doc.notify|default:"<span class='text-muted'>(None)</span>" }} + {{ doc.notify|default:'<span class="text-muted">(None)</span>' }} </td> </tr> </tbody> diff --git a/ietf/templates/doc/document_draft.html b/ietf/templates/doc/document_draft.html index cb4156f7814..7b8ad3c95a7 100644 --- a/ietf/templates/doc/document_draft.html +++ b/ietf/templates/doc/document_draft.html @@ -147,8 +147,7 @@ {% if can_view_possibly_replaces %} {% if possibly_replaces %} <tr> - <th scope="row"> - </th> + <td></td> <th scope="row"> Possibly Replaces </th> @@ -167,8 +166,7 @@ {% endif %} {% if possibly_replaced_by %} <tr> - <th scope="row"> - </th> + <td></td> <th scope="row"> Possibly Replaced By </th> @@ -185,8 +183,7 @@ {% endif %} {% endif %} <tr> - <th scope="row"> - </th> + <td></td> <th scope="row"> Stream </th> @@ -204,8 +201,7 @@ </tr> {% if doc.get_state_slug != "rfc" and not snapshot %} <tr> - <th scope="row"> - </th> + <td></td> <th scope="row"> Intended RFC status </th> @@ -229,8 +225,7 @@ </tr> {% endif %} <tr> - <th scope="row"> - </th> + <td></td> <th scope="row"> Formats </th> @@ -258,8 +253,7 @@ {% for check in doc.submission.latest_checks %} {% if check.passed != None and check.symbol.strip %} <tr> - <th scope="row"> - </th> + <td></td> <th scope="row"> {{ check.checker|title }} </th> @@ -293,8 +287,7 @@ {% endfor %} {% if review_assignments or can_request_review %} <tr> - <th scope="row"> - </th> + <td></td> <th scope="row"> Reviews </th> @@ -342,8 +335,7 @@ {% endif %} {% if conflict_reviews %} <tr> - <th scope="row"> - </th> + <td></td> <th scope="row"> IETF conflict review </th> @@ -481,8 +473,7 @@ {% endif %} {% if consensus and not doc.stream_id == 'ietf' %} <tr> - <th scope="row"> - </th> + <td></td> <th scope="row"> Consensus boilerplate </th> @@ -504,8 +495,7 @@ {% endif %} {% if presentations or user|has_role:"Secretariat,Area Director,WG Chair,WG Secretary,RG Chair,RG Secretary,IRTF Chair,Team Chair" or can_edit_stream_info %} <tr> - <th scope="row"> - </th> + <td></td> <th scope="row"> On agenda </th> @@ -536,8 +526,7 @@ {% endif %} {% if doc.stream_id == 'ietf' or doc.stream_id == 'ise' or doc.stream_id == 'irtf' %} <tr> - <th scope="row"> - </th> + <td></td> <th scope="row"> Document shepherd </th> @@ -566,8 +555,7 @@ </tr> {% if shepherd_writeup or can_edit_shepherd_writeup %} <tr> - <th scope="row"> - </th> + <td></td> <th scope="row"> Shepherd write-up </th> @@ -598,8 +586,7 @@ {% endif %} {% else %} <tr> - <th scope="row"> - </th> + <td></td> <th scope="row"> RFC Editor Note </th> @@ -624,8 +611,7 @@ {% endif %} {% if published and started_iesg_process and published.time < started_iesg_process.time %} <tr> - <th scope="row"> - </th> + <td></td> <th scope="row" colspan="3" class="warning"> This information refers to IESG processing after the RFC was initially published: </th> @@ -663,8 +649,7 @@ </tr> {% if doc.action_holders_enabled %} <tr> - <th scope="row"> - </th> + <td></td> <th scope="row"> Action Holder{{ doc.documentactionholder_set.all|pluralize }} </th> @@ -699,11 +684,11 @@ {% endif %} </div> </td> + </tr> {% endif %} {% if consensus and doc.stream_id == 'ietf' %} <tr> - <th scope="row"> - </th> + <td></td> <th scope="row"> Consensus boilerplate </th> @@ -724,8 +709,7 @@ </tr> {% endif %} <tr> - <th scope="row"> - </th> + <td></td> <th scope="row"> Telechat date </th> @@ -753,8 +737,7 @@ </td> </tr> <tr> - <th scope="row"> - </th> + <td></td> <th scope="row"> Responsible AD </th> @@ -779,8 +762,7 @@ {% if iesg_state.slug != 'idexists' %} {% if doc.note or can_edit %} <tr> - <th scope="row"> - </th> + <td></td> <th scope="row"> IESG note </th> @@ -805,8 +787,7 @@ {% endif %} {% endif %} <tr> - <th scope="row"> - </th> + <td></td> <th scope="row"> Send notices to </th> @@ -968,8 +949,7 @@ </td> </tr> <tr> - <th scope="row"> - </th> + <td></td> <th scope="row"> Details </th> diff --git a/ietf/templates/doc/document_html.html b/ietf/templates/doc/document_html.html index e086fbde368..67d3fee0490 100644 --- a/ietf/templates/doc/document_html.html +++ b/ietf/templates/doc/document_html.html @@ -36,6 +36,7 @@ {% endif %} {% endblock %} {% block content %} +<!-- [html-validate-disable no-inline-style, attr-quotes, void-style -- FIXME: it's everywhere in this old code] --> {% origin %} <div class="rfcmarkup"> <div class="noprint" style="height: .5em;"> @@ -64,19 +65,19 @@ {% endblock %} {% block js %} <script> - var legend_html = "Color legend:<br> \ + var legend_html = 'Color legend:<br> \ <table> \ - <tr><td>Unknown:</td> <td><span class='bgwhite'>    </span></td></tr> \ - <tr><td>Draft:</td> <td><span class='bgred'>    </span></td></tr> \ - <tr><td>Informational:</td> <td><span class='bgorange'>    </span></td></tr> \ - <tr><td>Experimental:</td> <td><span class='bgyellow'>    </span></td></tr> \ - <tr><td>Best Common Practice:</td> <td><span class='bgmagenta'>    </span></td></tr> \ - <tr><td>Proposed Standard:</td> <td><span class='bgblue'>    </span></td></tr> \ - <tr><td>Draft Standard (old designation):</td> <td><span class='bgcyan'>    </span></td></tr> \ - <tr><td>Internet Standard:</td> <td><span class='bggreen'>    </span></td></tr> \ - <tr><td>Historic:</td> <td><span class='bggrey'>    </span></td></tr> \ - <tr><td>Obsolete:</td> <td><span class='bgbrown'>    </span></td></tr> \ - </table>"; + <tr><td>Unknown:</td> <td><span class="bgwhite">    </span></td></tr> \ + <tr><td>Draft:</td> <td><span class="bgred">    </span></td></tr> \ + <tr><td>Informational:</td> <td><span class="bgorange">    </span></td></tr> \ + <tr><td>Experimental:</td> <td><span class="bgyellow">    </span></td></tr> \ + <tr><td>Best Common Practice:</td> <td><span class="bgmagenta">    </span></td></tr> \ + <tr><td>Proposed Standard:</td> <td><span class="bgblue">    </span></td></tr> \ + <tr><td>Draft Standard (old designation):</td> <td><span class="bgcyan">    </span></td></tr> \ + <tr><td>Internet Standard:</td> <td><span class="bggreen">    </span></td></tr> \ + <tr><td>Historic:</td> <td><span class="bggrey">    </span></td></tr> \ + <tr><td>Obsolete:</td> <td><span class="bgbrown">    </span></td></tr> \ + </table>'; function showLegend() { var elem = document.getElementById('legend'); elem.innerHTML = legend_html diff --git a/ietf/templates/doc/document_material.html b/ietf/templates/doc/document_material.html index 0cc7b0eac46..aa1038f1ed2 100644 --- a/ietf/templates/doc/document_material.html +++ b/ietf/templates/doc/document_material.html @@ -115,7 +115,7 @@ </a> {% endif %} </p> - <div id='materials-content' class="card mt-5"> + <div id="materials-content" class="card mt-5"> <div class="card-header">{{ doc.name }}-{{ doc.rev }}</div> <div class="card-body"> {% if doc.rev and content != None %} diff --git a/ietf/templates/doc/draft/release_draft.html b/ietf/templates/doc/draft/release_draft.html index 2112f0907a5..37efb955896 100644 --- a/ietf/templates/doc/draft/release_draft.html +++ b/ietf/templates/doc/draft/release_draft.html @@ -8,7 +8,7 @@ <h1> <br> <small class="text-muted">{{ doc.name }}-{{ doc.rev }}</small> </h1> - <div class='my-3 alert alert-warning'> + <div class="my-3 alert alert-warning"> <b>Warning:</b> {% if doc.stream.slug == 'ise' %} This action will unset all Independent Stream state and remove the document from the Independent Stream. @@ -27,4 +27,4 @@ <h1> <a class="btn btn-secondary float-end" href="{% url "ietf.doc.views_doc.document_main" name=doc.name %}">Back</a> </form> -{% endblock %} +{% endblock %} \ No newline at end of file diff --git a/ietf/templates/doc/drafts_in_iesg_process.html b/ietf/templates/doc/drafts_in_iesg_process.html index f9f801b6343..10313cde133 100644 --- a/ietf/templates/doc/drafts_in_iesg_process.html +++ b/ietf/templates/doc/drafts_in_iesg_process.html @@ -67,7 +67,7 @@ <h1>{{ title }}</h1> {% if doc.intended_std_level %} {{ doc.intended_std_level.name }} {% else %} - <span class='text-muted'>(None)</span> + <span class="text-muted">(None)</span> {% endif %} </td> <td>{% person_link doc.ad %}</td> diff --git a/ietf/templates/group/group_about.html b/ietf/templates/group/group_about.html index a92c6c36265..9ceb4fc88de 100644 --- a/ietf/templates/group/group_about.html +++ b/ietf/templates/group/group_about.html @@ -79,7 +79,7 @@ </tr> {% endif %} {% if can_provide_status_update or status_update %} - <tr id='status_update'> + <tr id="status_update"> <td> </td> <th scope="row"> diff --git a/ietf/templates/group/materials.html b/ietf/templates/group/materials.html index a651e8cdfbd..291504915cd 100644 --- a/ietf/templates/group/materials.html +++ b/ietf/templates/group/materials.html @@ -31,7 +31,7 @@ <h2 class="mt-3">{{ doc_type.name }}</h2> <a class="title-link" href="{% url "ietf.doc.views_doc.document_main" name=d.name %}">{{ d.title }}</a> </td> - <td class='snippable'>{{ d.abstract|urlize_ietf_docs|format_snippet }}</td> + <td class="snippable">{{ d.abstract|urlize_ietf_docs|format_snippet }}</td> <td>{{ d.rev }}</td> <td>{{ d.time|date:"Y-m-d" }}</td> <td> diff --git a/ietf/templates/meeting/timeslot_edit.html b/ietf/templates/meeting/timeslot_edit.html index 97e82a52376..d093ac95215 100644 --- a/ietf/templates/meeting/timeslot_edit.html +++ b/ietf/templates/meeting/timeslot_edit.html @@ -118,7 +118,7 @@ <h1> <tr> <th scope="row"> <span class="room-heading">{{ room.name }} - {% if room.capacity %}<span class='capacity'>({{ room.capacity }})</span>{% endif %} + {% if room.capacity %}<span class="capacity">({{ room.capacity }})</span>{% endif %} </span> </th> {% if have_no_timeslots and forloop.first %} diff --git a/ietf/templates/meeting/upcoming.html b/ietf/templates/meeting/upcoming.html index 53500c76ce6..ab94a57d657 100644 --- a/ietf/templates/meeting/upcoming.html +++ b/ietf/templates/meeting/upcoming.html @@ -81,11 +81,11 @@ <h1>Upcoming Meetings</h1> </a> </td> {% if session.current_status == 'canceled' %} - <td class='text-end'> + <td class="text-end"> <span class="badge bg-warning">Cancelled</span> </td> {% else %} - <td class='text-end'>{% include "meeting/interim_session_buttons.html" with show_agenda=True %}</td> + <td class="text-end">{% include "meeting/interim_session_buttons.html" with show_agenda=True %}</td> {% endif %} {% endwith %} {% else %} diff --git a/ietf/templates/nomcom/show_template.html b/ietf/templates/nomcom/show_template.html index b3b461eef83..5aa69a5c341 100644 --- a/ietf/templates/nomcom/show_template.html +++ b/ietf/templates/nomcom/show_template.html @@ -49,7 +49,7 @@ <h2 class="mb-3">Template: {{ template }}</h2> </dd> {% endif %} </dl> - <pre class='border p-3 pasted'>{{ template.content|linkify|urlize_ietf_docs|linebreaksbr }}</pre> + <pre class="border p-3 pasted">{{ template.content|linkify|urlize_ietf_docs|linebreaksbr }}</pre> <a class="btn btn-secondary my-3" href="{% if return_url %}{{ return_url }}{% else %}../{% endif %}">Back</a> {% endblock %} \ No newline at end of file diff --git a/ietf/utils/test_runner.py b/ietf/utils/test_runner.py index 5ae9497a3dd..c2cd9433c0e 100644 --- a/ietf/utils/test_runner.py +++ b/ietf/utils/test_runner.py @@ -46,6 +46,7 @@ import datetime import gzip import unittest +import pathlib import subprocess import tempfile import factory.random @@ -182,7 +183,7 @@ def __init__(self, params): # the current (older) version of Django seems to add type="text/javascript" for form media, ignore: "script-type": "off", # django-bootstrap5 seems to still generate 'checked="checked"', ignore: - "attribute-boolean-style": "off" + "attribute-boolean-style": "off", }, } self.config_file.write(json.dumps(htmlvalidate).encode()) @@ -241,11 +242,18 @@ def render(self, context=None, request=None): + "".join(source_lines[line - 4 : line]) + " " * (msg["column"] - 1) + "^" * msg["size"] - + f' {msg["ruleId"]}: {msg["message"]}\n' + + f' {msg["ruleId"]}: {msg["message"]} on line {line}:{msg["column"]}\n' + "".join(source_lines[line : line + 3]) + "\n\n" ) + if result: + path = pathlib.Path(self.origin.name) + cwd = pathlib.Path.cwd() + path = path.relative_to(cwd) + with open("error-" + path.name, "w") as file: + file.write(validation_results[0]["source"]) + result += f"Wrote HTML source to {path.name}." self.backend.testcase.assertEqual("", result) return render_result From 51a9eabedb88e2b688782ef6c0d3d6a152a3b49d Mon Sep 17 00:00:00 2001 From: Lars Eggert <lars@eggert.org> Date: Tue, 29 Mar 2022 17:58:59 +0300 Subject: [PATCH 07/26] Ignore SublimeText project files --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index 3687fc93dd2..d302f3208c9 100644 --- a/.gitignore +++ b/.gitignore @@ -14,6 +14,8 @@ *.#* .*.swp .DS_store +datatracker.sublime-project +datatracker.sublime-workspace # Simulated Subversion default ignores end here /.coverage /.factoryboy_random_state From ec2a74c4c6bd7cb998493905346617bea2fa5515 Mon Sep 17 00:00:00 2001 From: Lars Eggert <lars@eggert.org> Date: Tue, 29 Mar 2022 17:59:11 +0300 Subject: [PATCH 08/26] Bump deps --- package-lock.json | 100 +++++++++++++++++++++++----------------------- requirements.txt | 5 +-- 2 files changed, 52 insertions(+), 53 deletions(-) diff --git a/package-lock.json b/package-lock.json index 78191f019f9..92c8f81341b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2500,9 +2500,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001320", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001320.tgz", - "integrity": "sha512-MWPzG54AGdo3nWx7zHZTefseM5Y1ccM7hlQKHRqJkPozUaw3hNbBTMmLn16GG2FUzjR13Cr3NPfhIieX5PzXDA==", + "version": "1.0.30001322", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001322.tgz", + "integrity": "sha512-neRmrmIrCGuMnxGSoh+x7zYtQFFgnSY2jaomjU56sCkTA6JINqQrxutF459JpWcWRajvoyn95sOXq4Pqrnyjew==", "funding": [ { "type": "opencollective", @@ -2865,14 +2865,14 @@ } }, "node_modules/css-select": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.2.1.tgz", - "integrity": "sha512-/aUslKhzkTNCQUB2qTX84lVmfia9NyjP3WpDGtj/WxhwBzWBYUV3DgUpurHTme8UTPcPlAD1DJ+b0nN/t50zDQ==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", "dev": true, "dependencies": { "boolbase": "^1.0.0", - "css-what": "^5.1.0", - "domhandler": "^4.3.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", "domutils": "^2.8.0", "nth-check": "^2.0.1" }, @@ -2894,9 +2894,9 @@ } }, "node_modules/css-what": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.1.0.tgz", - "integrity": "sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.0.1.tgz", + "integrity": "sha512-z93ZGFLNc6yaoXAmVhqoSIb+BduplteCt1fepvwhBUQK6MNE4g6fgjpuZKJKp0esUe+vXWlIkwZZjNWoOKw0ZA==", "dev": true, "engines": { "node": ">= 6" @@ -2918,9 +2918,9 @@ } }, "node_modules/cypress": { - "version": "9.5.2", - "resolved": "https://registry.npmjs.org/cypress/-/cypress-9.5.2.tgz", - "integrity": "sha512-gYiQYvJozMzDOriUV1rCt6CeRM/pRK4nhwGJj3nJQyX2BoUdTCVwp30xDMKc771HiNVhBtgj5o5/iBdVDVXQUg==", + "version": "9.5.3", + "resolved": "https://registry.npmjs.org/cypress/-/cypress-9.5.3.tgz", + "integrity": "sha512-ItelIVmqMTnKYbo1JrErhsGgQGjWOxCpHT1TfMvwnIXKXN/OSlPjEK7rbCLYDZhejQL99PmUqul7XORI24Ik0A==", "dev": true, "hasInstallScript": true, "dependencies": { @@ -2956,7 +2956,7 @@ "listr2": "^3.8.3", "lodash": "^4.17.21", "log-symbols": "^4.0.0", - "minimist": "^1.2.5", + "minimist": "^1.2.6", "ospath": "^1.2.2", "pretty-bytes": "^5.6.0", "proxy-from-env": "1.0.0", @@ -3263,9 +3263,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.96", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.96.tgz", - "integrity": "sha512-DPNjvNGPabv6FcyjzLAN4C0psN/GgD9rSGvMTuv81SeXG/EX3mCz0wiw9N1tUEnfQXYCJi3H8M0oFPRziZh7rw==", + "version": "1.4.98", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.98.tgz", + "integrity": "sha512-1IdsuSAnIGVxoYT1LkcUFb9MfjRxdHhCU9qiaDzhl1XvYgK9c8E2O9aJOPgGMQ68CSI8NxmLwrYhjvGauT8yuw==", "dev": true }, "node_modules/emoji-regex": { @@ -3860,9 +3860,9 @@ "dev": true }, "node_modules/gauge": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.3.tgz", - "integrity": "sha512-ICw1DhAwMtb22rYFwEHgJcx1JCwJGv3x6G0OQUq56Nge+H4Q8JEwr8iveS0XFlsUNSI67F5ffMGK25bK4Pmskw==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", + "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", "dev": true, "dependencies": { "aproba": "^1.0.3 || ^2.0.0", @@ -3875,7 +3875,7 @@ "wide-align": "^1.1.5" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/get-port": { @@ -6309,12 +6309,12 @@ } }, "node_modules/proc-log": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-2.0.0.tgz", - "integrity": "sha512-I/35MfCX2H8jBUhKN8JB8nmqvQo/nKdrBodBY7L3RhDSPPyvOHwLYNmPuhwuJq7a7C3vgFKWGQM+ecPStcvOHA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-2.0.1.tgz", + "integrity": "sha512-Kcmo2FhfDTXdcbfDH76N7uBYHINxc/8GW7UAVuVP9I+Va3uHSerrnKV6dLooga/gh7GlgzuCCr/eoldnL1muGw==", "dev": true, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/progress": { @@ -9330,9 +9330,9 @@ "dev": true }, "caniuse-lite": { - "version": "1.0.30001320", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001320.tgz", - "integrity": "sha512-MWPzG54AGdo3nWx7zHZTefseM5Y1ccM7hlQKHRqJkPozUaw3hNbBTMmLn16GG2FUzjR13Cr3NPfhIieX5PzXDA==" + "version": "1.0.30001322", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001322.tgz", + "integrity": "sha512-neRmrmIrCGuMnxGSoh+x7zYtQFFgnSY2jaomjU56sCkTA6JINqQrxutF459JpWcWRajvoyn95sOXq4Pqrnyjew==" }, "caseless": { "version": "0.12.0", @@ -9598,14 +9598,14 @@ "dev": true }, "css-select": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.2.1.tgz", - "integrity": "sha512-/aUslKhzkTNCQUB2qTX84lVmfia9NyjP3WpDGtj/WxhwBzWBYUV3DgUpurHTme8UTPcPlAD1DJ+b0nN/t50zDQ==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", "dev": true, "requires": { "boolbase": "^1.0.0", - "css-what": "^5.1.0", - "domhandler": "^4.3.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", "domutils": "^2.8.0", "nth-check": "^2.0.1" } @@ -9621,9 +9621,9 @@ } }, "css-what": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.1.0.tgz", - "integrity": "sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.0.1.tgz", + "integrity": "sha512-z93ZGFLNc6yaoXAmVhqoSIb+BduplteCt1fepvwhBUQK6MNE4g6fgjpuZKJKp0esUe+vXWlIkwZZjNWoOKw0ZA==", "dev": true }, "csso": { @@ -9636,9 +9636,9 @@ } }, "cypress": { - "version": "9.5.2", - "resolved": "https://registry.npmjs.org/cypress/-/cypress-9.5.2.tgz", - "integrity": "sha512-gYiQYvJozMzDOriUV1rCt6CeRM/pRK4nhwGJj3nJQyX2BoUdTCVwp30xDMKc771HiNVhBtgj5o5/iBdVDVXQUg==", + "version": "9.5.3", + "resolved": "https://registry.npmjs.org/cypress/-/cypress-9.5.3.tgz", + "integrity": "sha512-ItelIVmqMTnKYbo1JrErhsGgQGjWOxCpHT1TfMvwnIXKXN/OSlPjEK7rbCLYDZhejQL99PmUqul7XORI24Ik0A==", "dev": true, "requires": { "@cypress/request": "^2.88.10", @@ -9673,7 +9673,7 @@ "listr2": "^3.8.3", "lodash": "^4.17.21", "log-symbols": "^4.0.0", - "minimist": "^1.2.5", + "minimist": "^1.2.6", "ospath": "^1.2.2", "pretty-bytes": "^5.6.0", "proxy-from-env": "1.0.0", @@ -9899,9 +9899,9 @@ } }, "electron-to-chromium": { - "version": "1.4.96", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.96.tgz", - "integrity": "sha512-DPNjvNGPabv6FcyjzLAN4C0psN/GgD9rSGvMTuv81SeXG/EX3mCz0wiw9N1tUEnfQXYCJi3H8M0oFPRziZh7rw==", + "version": "1.4.98", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.98.tgz", + "integrity": "sha512-1IdsuSAnIGVxoYT1LkcUFb9MfjRxdHhCU9qiaDzhl1XvYgK9c8E2O9aJOPgGMQ68CSI8NxmLwrYhjvGauT8yuw==", "dev": true }, "emoji-regex": { @@ -10364,9 +10364,9 @@ "dev": true }, "gauge": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.3.tgz", - "integrity": "sha512-ICw1DhAwMtb22rYFwEHgJcx1JCwJGv3x6G0OQUq56Nge+H4Q8JEwr8iveS0XFlsUNSI67F5ffMGK25bK4Pmskw==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", + "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", "dev": true, "requires": { "aproba": "^1.0.3 || ^2.0.0", @@ -12198,9 +12198,9 @@ "dev": true }, "proc-log": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-2.0.0.tgz", - "integrity": "sha512-I/35MfCX2H8jBUhKN8JB8nmqvQo/nKdrBodBY7L3RhDSPPyvOHwLYNmPuhwuJq7a7C3vgFKWGQM+ecPStcvOHA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-2.0.1.tgz", + "integrity": "sha512-Kcmo2FhfDTXdcbfDH76N7uBYHINxc/8GW7UAVuVP9I+Va3uHSerrnKV6dLooga/gh7GlgzuCCr/eoldnL1muGw==", "dev": true }, "progress": { diff --git a/requirements.txt b/requirements.txt index 5d9f6298f23..daa4b9bde73 100644 --- a/requirements.txt +++ b/requirements.txt @@ -25,7 +25,7 @@ django-stubs==1.6.0 # The django-stubs version used determines the the mypy ver django-tastypie==0.14.3 # Django 2.1 will require 0.14.2; Django 3.0 will require 0.14.3 django-webtest>=1.9.7 django-widget-tweaks>=1.4.2 -djhtml>=1.4.11 # To auto-indent templates via "djlint --profile django --reformat" +djlint>=0.7.3 # To auto-indent templates via "djlint --profile django --reformat" docutils>=0.12,!=0.15 #factory-boy>=3 #Faker>=0.8.11 # from factory-boy # Faker 0.8.9,0.8.10 sometimes return string names instead of unicode. @@ -73,5 +73,4 @@ Unidecode>=0.4.18,<1.2.0 weasyprint>=52.5,<53 xml2rfc>=2.35.0 xym>=0.4.4,!=0.4.7,<1.0 -#zxcvbn-python>=4.4.14 # Not needed until we do back-end password entropy validation -djhtml>=1.4.11 # To auto-indent templates via "djlint --profile django --reformat" \ No newline at end of file +#zxcvbn-python>=4.4.14 # Not needed until we do back-end password entropy validation \ No newline at end of file From 4abf4511aa8d270ccb844570d12573e7406893da Mon Sep 17 00:00:00 2001 From: Lars Eggert <lars@eggert.org> Date: Thu, 31 Mar 2022 21:02:38 +0300 Subject: [PATCH 09/26] More HTML fixes --- ietf/doc/templatetags/ballot_icon.py | 7 ++++--- ietf/doc/templatetags/ietf_filters.py | 4 ++-- ietf/doc/tests.py | 2 +- ietf/doc/tests_ballot.py | 6 +++--- ietf/doc/tests_review.py | 3 ++- ietf/doc/views_ballot.py | 4 ++-- ietf/templates/401.html | 2 +- ietf/templates/403.html | 2 +- ietf/templates/404.html | 2 +- ietf/templates/500.html | 2 +- ietf/templates/base.html | 4 +++- ietf/templates/doc/ballot/approve_ballot.html | 6 +++--- ietf/templates/doc/ballot/edit_position.html | 14 ++++++------- ietf/templates/doc/ballot/rfceditornote.html | 1 + .../doc/ballot/send_ballot_comment.html | 20 +++++++++---------- ietf/templates/doc/ballot/writeupnotes.html | 4 ++-- ietf/templates/doc/bofreq/bof_requests.html | 2 +- ietf/templates/doc/charter/approve.html | 2 +- .../doc/charter/ballot_writeupnotes.html | 4 ++-- ietf/templates/doc/charter/change_state.html | 2 +- .../doc/conflict_review/approve.html | 2 +- .../doc/document_ballot_content.html | 12 +++++------ ietf/templates/doc/document_draft.html | 8 ++++---- .../templates/doc/document_referenced_by.html | 2 +- ietf/templates/doc/document_references.html | 11 +++++----- ietf/templates/doc/drafts_for_ad.html | 7 ++++--- ietf/templates/doc/email_aliases.html | 2 ++ .../doc/material/presentations-row.html | 13 ++++++------ ietf/templates/doc/search/search.html | 4 ---- ietf/templates/doc/search/search_form.html | 17 ++++++++-------- ietf/templates/doc/status_change/approve.html | 2 +- .../doc/status_change/last_call.html | 2 +- 32 files changed, 90 insertions(+), 85 deletions(-) diff --git a/ietf/doc/templatetags/ballot_icon.py b/ietf/doc/templatetags/ballot_icon.py index 587a2553093..52b7635e9d7 100644 --- a/ietf/doc/templatetags/ballot_icon.py +++ b/ietf/doc/templatetags/ballot_icon.py @@ -109,14 +109,15 @@ def sort_key(t): else: typename = "IESG" - res = ['<a %s href="%s" data-bs-toggle="modal" data-bs-target="#modal-%d" title="%s positions (click to show more)" class="ballot-icon"><table' % ( + res = ['<a %s href="%s" data-bs-toggle="modal" data-bs-target="#modal-%d" aria-label="%s positions" title="%s positions (click to show more)" class="ballot-icon"><table' % ( right_click_string, urlreverse("ietf.doc.views_doc.ballot_popup", kwargs=dict(name=doc.name, ballot_id=ballot.pk)), ballot.pk, + typename, typename,)] if my_blocking: res.append(' class="is-blocking" ') - res.append('>') + res.append('><tbody>') res.append("<tr>") @@ -137,7 +138,7 @@ def sort_key(t): res.append('<td class="position-empty"></td>') i = i + 1 - res.append("</tr></table></a>") + res.append("</tr></tbody></table></a>") res.append('<div id="modal-%d" class="modal fade" tabindex="-1" role="dialog" aria-hidden="true"><div class="modal-dialog modal-dialog-scrollable modal-xl"><div class="modal-content"></div></div></div>' % ballot.pk) return mark_safe("".join(res)) diff --git a/ietf/doc/templatetags/ietf_filters.py b/ietf/doc/templatetags/ietf_filters.py index 21cd383cbc5..65e7d426438 100644 --- a/ietf/doc/templatetags/ietf_filters.py +++ b/ietf/doc/templatetags/ietf_filters.py @@ -413,13 +413,13 @@ def format_snippet(text, trunc_words=25): full = keep_spacing(collapsebr(linebreaksbr(mark_safe(sanitize_fragment(text))))) snippet = truncatewords_html(full, trunc_words) if snippet != full: - return mark_safe('<div class="snippet">%s<button class="btn btn-sm btn-primary show-all"><i class="bi bi-caret-down"></i></button></div><div class="visually-hidden full">%s</div>' % (snippet, full)) + return mark_safe('<div class="snippet">%s<button type="button" aria-label="Expand" class="btn btn-sm btn-primary show-all"><i class="bi bi-caret-down"></i></button></div><div class="visually-hidden full">%s</div>' % (snippet, full)) return mark_safe(full) @register.simple_tag def doc_edit_button(url_name, *args, **kwargs): """Given URL name/args/kwargs, looks up the URL just like "url" tag and returns a properly formatted button for the document material tables.""" - return mark_safe('<a class="btn btn-primary btn-sm" role="button" href="%s">Edit</a>' % (urlreverse(url_name, args=args, kwargs=kwargs))) + return mark_safe('<a class="btn btn-primary btn-sm" type="button" href="%s">Edit</a>' % (urlreverse(url_name, args=args, kwargs=kwargs))) @register.filter def textify(text): diff --git a/ietf/doc/tests.py b/ietf/doc/tests.py index 56bc8a2c899..9fdc3f6b267 100644 --- a/ietf/doc/tests.py +++ b/ietf/doc/tests.py @@ -1595,7 +1595,7 @@ def test_document_ballot_popup_unique_anchors_per_doc(self): href = q(f'div.balloter-name a[href$="{author_slug}"]').attr('href') ids = [ target.attr('id') - for target in q(f'h5[id$="{author_slug}"]').items() + for target in q(f'p.h5[id$="{author_slug}"]').items() ] self.assertEqual(len(ids), 1, 'Should be exactly one link for the balloter') self.assertEqual(href, f'#{ids[0]}', 'Anchor href should match ID') diff --git a/ietf/doc/tests_ballot.py b/ietf/doc/tests_ballot.py index 3d15a307a64..317e4e3a1d0 100644 --- a/ietf/doc/tests_ballot.py +++ b/ietf/doc/tests_ballot.py @@ -1196,9 +1196,9 @@ def test_ballotpositiondocevent_any_email_sent(self): ) def _assertBallotMessage(self, q, balloter, expected): - heading = q(f'h5[id$="_{slugify(balloter.plain_name())}"]') + heading = q(f'p.h5[id$="_{slugify(balloter.plain_name())}"]') self.assertEqual(len(heading), 1) - # <h5/> is followed by a panel with the message of interest, so use next() + # <p.h5/> is followed by a panel with the message of interest, so use next() self.assertEqual( len(heading.next().find( f'*[title="{expected}"]' @@ -1379,4 +1379,4 @@ def test_document_ballot_content_without_send_email_values(self): q = PyQuery(content) self._assertBallotMessage(q, balloters[0], 'No email send requests for this discuss') self._assertBallotMessage(q, balloters[1], 'No ballot position send log available') - self._assertBallotMessage(q, old_balloter, 'No ballot position send log available') + self._assertBallotMessage(q, old_balloter, 'No ballot position send log available') \ No newline at end of file diff --git a/ietf/doc/tests_review.py b/ietf/doc/tests_review.py index 44287a6ef44..7e902514d57 100644 --- a/ietf/doc/tests_review.py +++ b/ietf/doc/tests_review.py @@ -38,6 +38,7 @@ from ietf.utils.test_utils import login_testing_unauthorized, reload_db_objects from ietf.utils.test_utils import TestCase from ietf.utils.text import strip_prefix, xslugify +from django.utils.html import escape class ReviewTests(TestCase): def setUp(self): @@ -175,7 +176,7 @@ def test_review_request(self): self.assertContains(r, review_req.team.name) try: # FIXME-LARS - self.assertContains(r, author.name) + self.assertContains(r, escape(author.name)) except: print(r.content) self.assertContains(r, author.name) diff --git a/ietf/doc/views_ballot.py b/ietf/doc/views_ballot.py index 6841e07f5b8..828302e816d 100644 --- a/ietf/doc/views_ballot.py +++ b/ietf/doc/views_ballot.py @@ -574,7 +574,7 @@ def lastcalltext(request, name): e.save() # make sure form has the updated text - form = LastCallTextForm(initial=dict(last_call_text=e.text)) + form = LastCallTextForm(initial=dict(last_call_text=escape(e.text))) s = doc.get_state("draft-iesg") @@ -813,7 +813,7 @@ def ballot_approvaltext(request, name): e.save() # make sure form has the updated text - form = ApprovalTextForm(initial=dict(approval_text=e.text)) + form = ApprovalTextForm(initial=dict(approval_text=escape(e.text))) can_announce = doc.get_state("draft-iesg").order > 19 need_intended_status = "" diff --git a/ietf/templates/401.html b/ietf/templates/401.html index 3d2d499d40d..54ea26654ae 100644 --- a/ietf/templates/401.html +++ b/ietf/templates/401.html @@ -7,7 +7,7 @@ src="{% static 'ietf/images/ietflogo.png' %}" alt="IETF"> <div class="alert alert-warning my-3"> - <h2>Authentication Required</h2> + <h1>Authentication Required</h1> <hr> <p> The server could not verify that you are authorized to view this page using diff --git a/ietf/templates/403.html b/ietf/templates/403.html index 127cfcbd928..73632b9bdc9 100644 --- a/ietf/templates/403.html +++ b/ietf/templates/403.html @@ -7,7 +7,7 @@ src="{% static 'ietf/images/ietflogo.png' %}" alt="IETF"> <div class="alert alert-warning my-3"> - <h2>Restricted Access</h2> + <h1>Restricted Access</h1> <hr> <p> {{ exception }} diff --git a/ietf/templates/404.html b/ietf/templates/404.html index 755c481c730..19ca22bc054 100644 --- a/ietf/templates/404.html +++ b/ietf/templates/404.html @@ -7,7 +7,7 @@ src="{% static 'ietf/images/ietflogo.png' %}" alt="IETF"> <div class="alert alert-warning my-3"> - <h2>The page you were looking for couldn't be found</h2> + <h1>The page you were looking for couldn't be found</h1> <hr> <p> The requested URL was not found on this server. If you entered the URL diff --git a/ietf/templates/500.html b/ietf/templates/500.html index 6397d4a5cb3..6df877e0b76 100644 --- a/ietf/templates/500.html +++ b/ietf/templates/500.html @@ -7,7 +7,7 @@ src="{% static 'ietf/images/ietflogo.png' %}" alt="IETF"> <div class="alert alert-warning my-3"> - <h2>Internal Server Error</h2> + <h1>Internal Server Error</h1> <hr> <p> The server encountered an internal error and was unable to complete diff --git a/ietf/templates/base.html b/ietf/templates/base.html index 90accfa676a..be4d4d1d6a8 100644 --- a/ietf/templates/base.html +++ b/ietf/templates/base.html @@ -58,11 +58,13 @@ </a> {% endif %} <div class="d-flex d-none d-lg-block"> + <label aria-label="Document search"> <input class="form-control select2-field" id="navbar-doc-search" data-ajax--url="{% url 'ietf.doc.views_search.ajax_select2_search_docs' model_name='docalias' doc_type='draft' %}" type="text" data-placeholder="Document search"> + </label> </div> <button class="navbar-toggler" type="button" @@ -156,4 +158,4 @@ }); </script> </body> -</html> +</html> \ No newline at end of file diff --git a/ietf/templates/doc/ballot/approve_ballot.html b/ietf/templates/doc/ballot/approve_ballot.html index e32c7022ffc..a146acf4e96 100644 --- a/ietf/templates/doc/ballot/approve_ballot.html +++ b/ietf/templates/doc/ballot/approve_ballot.html @@ -14,11 +14,11 @@ <h1> {% csrf_token %} <pre class="border p-3 mb-3">{{ announcement }}</pre> {% if action == "to_announcement_list" %} - <button class="btn btn-primary" type="submit">Notify RFC Editor, send announcement & close ballot</button> + <button class="btn btn-primary" type="submit">Notify RFC Editor, send announcement & close ballot</button> {% elif action == "to_rfc_editor" %} - <button class="btn btn-primary" type="submit">Email RFC Editor & close ballot</button> + <button class="btn btn-primary" type="submit">Email RFC Editor & close ballot</button> {% elif action == "do_not_publish" %} - <button class="btn btn-primary" type="submit">Email RFC Editor (DNP) & close ballot"</button> + <button class="btn btn-primary" type="submit">Email RFC Editor (DNP) & close ballot"</button> {% endif %} <a class="btn btn-secondary float-end" href="{% url "ietf.doc.views_doc.document_main" name=doc.canonical_name %}"> diff --git a/ietf/templates/doc/ballot/edit_position.html b/ietf/templates/doc/ballot/edit_position.html index 5e99797484d..1b11fbb90ae 100644 --- a/ietf/templates/doc/ballot/edit_position.html +++ b/ietf/templates/doc/ballot/edit_position.html @@ -36,20 +36,18 @@ <h1> <button type="submit" class="btn btn-primary" name="send_mail" - value="Save and send email">Save & send email</button> - <input type="submit" class="btn btn-primary" value="Save"> + value="Save and send email">Save & send email</button> + <button type="submit" class="btn btn-primary">Save</button> {% if doc.type_id == "draft" or doc.type_id == "conflrev" %} {% if doc.stream.slug != "irtf" %} {% if ballot_deferred %} - <input type="submit" + <button type="submit" class="btn btn-warning" - name="Undefer" - value="Undefer ballot"> + name="Undefer">Undefer ballot</button> {% else %} - <input type="submit" + <button type="submit" class="btn btn-danger" - name="Defer" - value="Defer ballot"> + name="Defer">Defer ballot</button> {% endif %} {% endif %} {% endif %} diff --git a/ietf/templates/doc/ballot/rfceditornote.html b/ietf/templates/doc/ballot/rfceditornote.html index b3424fe1671..ff6ca7078cc 100644 --- a/ietf/templates/doc/ballot/rfceditornote.html +++ b/ietf/templates/doc/ballot/rfceditornote.html @@ -13,6 +13,7 @@ <h1 class="mb-3"> {% bootstrap_messages %} <form method="post"> {% csrf_token %} + <!-- [html-validate-disable-block input-missing-label -- FIXME: django_bootstrap5 seems to render ballot_rfceditornote_form w/o for= on the label - why? ] --> {% bootstrap_form ballot_rfceditornote_form %} <div class="form-text mb-3"> RFC Editor Note. This text will be appended to all announcements and messages to the RFC Editor. diff --git a/ietf/templates/doc/ballot/send_ballot_comment.html b/ietf/templates/doc/ballot/send_ballot_comment.html index d29cec65162..fdffbd99736 100644 --- a/ietf/templates/doc/ballot/send_ballot_comment.html +++ b/ietf/templates/doc/ballot/send_ballot_comment.html @@ -14,26 +14,26 @@ <h1> <form class="mt-3" method="post"> {% csrf_token %} <div class="mb-3"> - <label class="form-label">From</label> - <input class="form-control" type="text" placeholder="{{ frm }}" disabled> + <label class="form-label" for="from">From</label> + <input id="from" class="form-control" type="text" placeholder="{{ frm }}" disabled> </div> <div class="mb-3"> - <label class="form-label">To</label> - <input class="form-control" type="text" placeholder="{{ to }}" disabled> + <label class="form-label" for="to">To</label> + <input id="to" class="form-control" type="text" placeholder="{{ to }}" disabled> </div> {% bootstrap_form cc_select_form %} <div class="mb-3"> - <label class="form-label">Additional Cc Addresses</label> - <input class="form-control" name="extra_cc"> + <label class="form-label" for="additional">Additional Cc Addresses</label> + <input id="additional" class="form-control" type="text" name="extra_cc"> <div class="form-text">Separate email addresses with commas.</div> </div> <div class="mb-3"> - <label class="form-label">Subject</label> - <input class="form-control" type="text" placeholder="{{ subject }}" disabled> + <label class="form-label" for="subject">Subject</label> + <input id="subject" class="form-control" type="text" placeholder="{{ subject }}" disabled> </div> <div class="mb-3"> - <label class="form-label">Body</label> - <pre class="border p-3">{{ body|maybewordwrap }}</pre> + <label class="form-label" for="body">Body</label> + <pre id="body" class="border p-3">{{ body|maybewordwrap }}</pre> </div> <button type="submit" class="btn btn-danger">Send</button> <a class="btn btn-secondary float-end" diff --git a/ietf/templates/doc/ballot/writeupnotes.html b/ietf/templates/doc/ballot/writeupnotes.html index 401fdaa81a3..44ae5758aa4 100644 --- a/ietf/templates/doc/ballot/writeupnotes.html +++ b/ietf/templates/doc/ballot/writeupnotes.html @@ -29,8 +29,8 @@ <h1> class="btn {% if ballot_issue_danger %}btn-danger{% else %}btn-warning{% endif %}" name="issue_ballot" value="Save and Issue Ballot"> - Save & - {% if ballot_issued %}re-{% endif %} + Save +& {% if ballot_issued %}re-{% endif %} issue ballot </button> <a class="btn btn-secondary float-end" diff --git a/ietf/templates/doc/bofreq/bof_requests.html b/ietf/templates/doc/bofreq/bof_requests.html index a3e97c87f59..2a806b18a59 100644 --- a/ietf/templates/doc/bofreq/bof_requests.html +++ b/ietf/templates/doc/bofreq/bof_requests.html @@ -32,7 +32,7 @@ <h2 class="mt-5">{{ req_group.grouper|capfirst }} BOF Requests</h2> <thead> <tr> <th scope="col" data-sort="name">Name</th> - <th class="d-none d-sm-table-cell" data-sort="date">Date</th> + <th scope="col" class="d-none d-sm-table-cell" data-sort="date">Date</th> <th scope="col" data-sort="title">Title</th> <th scope="col" data-sort="responsible">Responsible</th> <th scope="col" data-sort="editors">Editors</th> diff --git a/ietf/templates/doc/charter/approve.html b/ietf/templates/doc/charter/approve.html index 4d6519fd147..f109da6872b 100644 --- a/ietf/templates/doc/charter/approve.html +++ b/ietf/templates/doc/charter/approve.html @@ -9,7 +9,7 @@ <h1>Approve {{ charter.canonical_name }}-{{ charter.rev }}</h1> <form class="mt-3" method="post"> {% csrf_token %} <pre class="border p-3">{{ announcement }}</pre> - <button type="submit" class="btn btn-primary">Send announcement, close ballot & update revision</button> + <button type="submit" class="btn btn-primary">Send announcement, close ballot & update revision</button> <a class="btn btn-warning" href="{% url "ietf.doc.views_charter.action_announcement_text" name=charter.canonical_name %}?next=approve"> Edit/regenerate announcement diff --git a/ietf/templates/doc/charter/ballot_writeupnotes.html b/ietf/templates/doc/charter/ballot_writeupnotes.html index 4ccd6dcad8a..398c2b1ed2c 100644 --- a/ietf/templates/doc/charter/ballot_writeupnotes.html +++ b/ietf/templates/doc/charter/ballot_writeupnotes.html @@ -22,8 +22,8 @@ <h1> class="btn btn-warning" name="send_ballot" value="Save and Re-Issue Ballot"> - Save & - {% if ballot_issued %}re-{% endif %} + Save +& {% if ballot_issued %}re-{% endif %} issue ballot </button> <a class="btn btn-secondary float-end" diff --git a/ietf/templates/doc/charter/change_state.html b/ietf/templates/doc/charter/change_state.html index 5868ff2122f..dd9cbedfc5d 100644 --- a/ietf/templates/doc/charter/change_state.html +++ b/ietf/templates/doc/charter/change_state.html @@ -35,7 +35,7 @@ <h1>{{ title }}</h1> <button class="btn btn-primary" type="submit">Initiate chartering</button> {% endif %} {% if not option or option == "abandon" %} - <button class="btn btn-primary" type="submit">Save & notify secretariat</button> + <button class="btn btn-primary" type="submit">Save & notify secretariat</button> <a class="btn btn-secondary float-end" href="{% url "ietf.doc.views_doc.document_main" name=doc.name %}">Back</a> {% endif %} diff --git a/ietf/templates/doc/conflict_review/approve.html b/ietf/templates/doc/conflict_review/approve.html index d5b5f17081a..5283587f072 100644 --- a/ietf/templates/doc/conflict_review/approve.html +++ b/ietf/templates/doc/conflict_review/approve.html @@ -9,7 +9,7 @@ <h1>Approve {{ review.canonical_name }}</h1> <form class="my-3" method="post"> {% csrf_token %} {% bootstrap_form form %} - <button type="submit" class="btn btn-primary">Send announcement & close ballot</button> + <button type="submit" class="btn btn-primary">Send announcement & close ballot</button> <a class="btn btn-secondary float-end" href="{% url "ietf.doc.views_doc.document_main" name=review.name %}">Back</a> </form> diff --git a/ietf/templates/doc/document_ballot_content.html b/ietf/templates/doc/document_ballot_content.html index 0af03fb4be3..481c02e084f 100644 --- a/ietf/templates/doc/document_ballot_content.html +++ b/ietf/templates/doc/document_ballot_content.html @@ -6,9 +6,9 @@ <div class="row"> <div class="col-md-2 d-none d-md-block d-sm-block d-lg-block d-xl-block d-xxl-block"> {% for n, positions in position_groups %} - <h5> + <p class="h5"> <span class="badge {{ n|pos_to_label_format }}">{{ n.name }}</span> - </h5> + </p> {% for p in positions %} <div class="balloter-name mb-2"> {% if p.is_old_pos %} @@ -99,7 +99,7 @@ <h5> {% for n, positions in position_groups %} {% for p in positions %} {% if not p.is_old_pos %} - <h5 class="mt-4" + <p class="h5 mt-4" id="{{ doc.name|slugify }}_{{ p.balloter.plain_name|slugify }}"> {{ p.balloter.plain_name }} <span class="float-end"> @@ -113,7 +113,7 @@ <h5> </a> {% endif %} </span> - </h5> + </p> {% if p.pos.blocking and p.discuss %} <div class="card border-danger {% if p.comment %} mb-2{% endif %}"> <div class="card-header bg-danger text-light"> @@ -174,7 +174,7 @@ <h5> {% for n, positions in position_groups %} {% for p in positions %} {% if p.is_old_pos %} - <h5 id="{{ doc.name|slugify }}_{{ p.balloter.plain_name|slugify }}"> + <p class="h5" id="{{ doc.name|slugify }}_{{ p.balloter.plain_name|slugify }}"> <span class="text-muted">({{ p.balloter.plain_name }}; former steering group member)</span> <span class="float-end"> {% if p.old_positions %}<span class="text-muted small">(was {{ p.old_positions|join:", " }})</span>{% endif %} @@ -187,7 +187,7 @@ <h5 id="{{ doc.name|slugify }}_{{ p.balloter.plain_name|slugify }}"> </a> {% endif %} </span> - </h5> + </p> <div class="card {{ p.pos|pos_to_border_format }}"> <div class="card-header {{ p.pos|pos_to_label_format }}"> <div> diff --git a/ietf/templates/doc/document_draft.html b/ietf/templates/doc/document_draft.html index 7b8ad3c95a7..a59cca55149 100644 --- a/ietf/templates/doc/document_draft.html +++ b/ietf/templates/doc/document_draft.html @@ -1146,15 +1146,15 @@ </a> </div> <div class="card-body"> - <h5 class="card-title"> + <p class="h5 card-title"> Abstract - </h5> + </p> <p class="card-text"> {{ doc.abstract }} </p> - <h5 class="card-title"> + <p class="h5 card-title"> Authors - </h5> + </p> <p class="card-text"> {% for author in doc.documentauthor_set.all %} {% person_link author.person %} diff --git a/ietf/templates/doc/document_referenced_by.html b/ietf/templates/doc/document_referenced_by.html index 204eea44a15..fd0066f18f1 100644 --- a/ietf/templates/doc/document_referenced_by.html +++ b/ietf/templates/doc/document_referenced_by.html @@ -8,7 +8,7 @@ {% block content %} {% origin %} <h1>References to {{ alias_name }}</h1> - <p class="my-3 alert alert-info my-3"> + <p class="alert alert-info my-3"> These dependencies are extracted using heuristics looking for strings with particular prefixes. Notably, this means that references to I-Ds by title only are not reflected here. If it's really important, please inspect the documents' references sections directly. </p> <p> diff --git a/ietf/templates/doc/document_references.html b/ietf/templates/doc/document_references.html index 92f2a02566f..32f041a7d8a 100644 --- a/ietf/templates/doc/document_references.html +++ b/ietf/templates/doc/document_references.html @@ -66,8 +66,9 @@ <h1>References from {{ doc.canonical_name }}</h1> </tr> {% endwith %} {% endfor %} - </table> - {% endblock %} - {% block js %} - <script src="{% static "ietf/js/list.js" %}"></script> - {% endblock %} \ No newline at end of file + </tbody> + </table> +{% endblock %} +{% block js %} + <script src="{% static "ietf/js/list.js" %}"></script> +{% endblock %} \ No newline at end of file diff --git a/ietf/templates/doc/drafts_for_ad.html b/ietf/templates/doc/drafts_for_ad.html index 19500731c08..09b0ef2314a 100644 --- a/ietf/templates/doc/drafts_for_ad.html +++ b/ietf/templates/doc/drafts_for_ad.html @@ -9,14 +9,15 @@ {% block title %}Documents for {{ ad_name }}{% endblock %} {% block content %} {% origin %} + <h1>Documents for {{ ad_name }}</h1> {% if blocked_docs %} - <h1>Blocking positions held by {{ ad_name }}</h1> + <h2>Blocking positions held by {{ ad_name }}</h2> <table class="table table-sm table-striped tablesorter"> <thead> <tr> <th scope="col" data-sort="document">Document</th> <th scope="col" data-sort="status">Status</th> - <th class="d-none d-sm-table-cell" data-sort="responsible">Responsible AD</th> + <th scope="col" class="d-none d-sm-table-cell" data-sort="responsible">Responsible AD</th> <th scope="col" data-sort="discusses">Discusses</th> </tr> </thead> @@ -50,8 +51,8 @@ <h1>Blocking positions held by {{ ad_name }}</h1> {% endfor %} </tbody> </table> + <h2 class="mt-3">Documents for {{ ad_name }}</h2> {% endif %} - <h1 class="mt-3">Documents for {{ ad_name }}</h1> {% include "doc/search/search_results.html" with start_table=True end_table=True %} {% endblock %} {% block js %} diff --git a/ietf/templates/doc/email_aliases.html b/ietf/templates/doc/email_aliases.html index 2a6c0c4f02a..3311f2e28e2 100644 --- a/ietf/templates/doc/email_aliases.html +++ b/ietf/templates/doc/email_aliases.html @@ -13,6 +13,7 @@ <h1> </h1> {% regroup aliases|dictsort:"doc_name" by doc_name as alias_list %} <table class="table table-borderless table-sm mt-3"> + <tbody> {% for alias in alias_list %} {% cycle '' 'table-active' as alternator silent %} {% for item in alias.list %} @@ -22,5 +23,6 @@ <h1> </tr> {% endfor %} {% endfor %} + </tbody> </table> {% endblock %} \ No newline at end of file diff --git a/ietf/templates/doc/material/presentations-row.html b/ietf/templates/doc/material/presentations-row.html index 1614bacf4ba..450de59369b 100644 --- a/ietf/templates/doc/material/presentations-row.html +++ b/ietf/templates/doc/material/presentations-row.html @@ -7,9 +7,9 @@ <th scope="col" data-sort="revision">Revision</th> <th scope="col" data-sort="meeting">Meeting</th> <th scope="col" data-sort="session">Session</th> - <th scope="col">{% comment %}Agenda{% endcomment %}</th> - <th scope="col">{% comment %}Minutes{% endcomment %}</th> - <th scope="col">{% comment %}Buttons{% endcomment %}</th> + <th scope="col">{# Agenda #}</th> + <th scope="col">{# Minutes #}</th> + <th scope="col">{# Buttons #}</th> </tr> </thead> <tbody> @@ -61,6 +61,7 @@ </a> {% endif %} </td> - {% endfor %} - </tbody> - </table> \ No newline at end of file + </tr> + {% endfor %} + </tbody> +</table> \ No newline at end of file diff --git a/ietf/templates/doc/search/search.html b/ietf/templates/doc/search/search.html index d788c214270..d24f8e08491 100644 --- a/ietf/templates/doc/search/search.html +++ b/ietf/templates/doc/search/search.html @@ -7,10 +7,6 @@ {% block title %}Document Search{% endblock %} {% block content %} {% origin %} - <a href="/doc/stats/newrevisiondocevent?{{ queryargs }}" - class="icon-link float-end"> - <i class="bi bi-bar-chart-line"></i> - </a> <h1>Document Search</h1> {% include "doc/search/search_form.html" %} {% if meta.searching %} diff --git a/ietf/templates/doc/search/search_form.html b/ietf/templates/doc/search/search_form.html index 36d673c2af0..241a90bf409 100644 --- a/ietf/templates/doc/search/search_form.html +++ b/ietf/templates/doc/search/search_form.html @@ -8,6 +8,7 @@ action="{% url 'ietf.doc.views_search.search' %}"> {% csrf_token %} <div class="input-group search_field"> + <label for="id_name" aria-label="Document name/title/RFC number"></label> {{ form.name|add_class:"form-control"|attr:"placeholder:Document name/title/RFC number" }} <span class="input-group-btn"> <button class="btn btn-primary" type="submit"> @@ -76,7 +77,7 @@ <h2 class="accordion-header" id="search-heading"> <label for="author" class="form-check-label fw-bold">Author or Affiliation Name</label> </div> </div> - <div class="col-sm-8">{{ form.author|add_class:"form-control" }}</div> + <div class="col-sm-8"><label aria-label="Author">{{ form.author|add_class:"form-control" }}</label></div> </div> <div class="row mb-3 search_field"> <div class="col-sm-4"> @@ -90,7 +91,7 @@ <h2 class="accordion-header" id="search-heading"> <label for="group" class="form-check-label fw-bold">WG</label> </div> </div> - <div class="col-sm-8">{{ form.group|add_class:"form-control" }}</div> + <div class="col-sm-8"><label aria-label="Group">{{ form.group|add_class:"form-control" }}</label></div> </div> <div class="row mb-3 search_field"> <div class="col-sm-4"> @@ -104,7 +105,7 @@ <h2 class="accordion-header" id="search-heading"> <label for="area" class="form-check-label fw-bold">Area</label> </div> </div> - <div class="col-sm-8">{{ form.area|add_class:"form-select" }}</div> + <div class="col-sm-8"><label aria-label="Area">{{ form.area|add_class:"form-select" }}</label></div> </div> <div class="row mb-3 search_field"> <div class="col-sm-4"> @@ -118,7 +119,7 @@ <h2 class="accordion-header" id="search-heading"> <label for="areadir" class="form-check-label fw-bold">AD</label> </div> </div> - <div class="col-sm-8">{{ form.ad|add_class:"form-select" }}</div> + <div class="col-sm-8"><label aria-label="AD">{{ form.ad|add_class:"form-select" }}</label></div> </div> <div class="row mb-3 search_field"> <div class="col-sm-4"> @@ -132,8 +133,8 @@ <h2 class="accordion-header" id="search-heading"> <label for="state" class="form-check-label fw-bold">IESG State</label> </div> </div> - <div class="col-sm-4">{{ form.state|add_class:"form-select col-sm-4" }}</div> - <div class="col-sm-4">{{ form.substate|add_class:"form-select" }}</div> + <div class="col-sm-4"><label aria-label="State">{{ form.state|add_class:"form-select col-sm-4" }}</label></div> + <div class="col-sm-4"><label aria-label="Substate">{{ form.substate|add_class:"form-select" }}</label></div> </div> <div class="row mb-3 search_field"> <div class="col-sm-4"> @@ -147,7 +148,7 @@ <h2 class="accordion-header" id="search-heading"> <label for="irtfstate" class="form-check-label fw-bold">IRTF State</label> </div> </div> - <div class="col-sm-8">{{ form.irtfstate|add_class:"form-select" }}</div> + <div class="col-sm-8"><label aria-label="IRTF State">{{ form.irtfstate|add_class:"form-select" }}</label></div> </div> <div class="row mb-3 search_field"> <div class="col-sm-4"> @@ -161,7 +162,7 @@ <h2 class="accordion-header" id="search-heading"> <label for="stream" class="form-check-label fw-bold">Stream</label> </div> </div> - <div class="col-sm-8">{{ form.stream|add_class:"form-select" }}</div> + <div class="col-sm-8"><label aria-label="Stream">{{ form.stream|add_class:"form-select" }}</label></div> </div> <div class="row mb-3 search_field"> <div class="col-sm-4 d-grid"> diff --git a/ietf/templates/doc/status_change/approve.html b/ietf/templates/doc/status_change/approve.html index bc52ac6887f..7984329766f 100644 --- a/ietf/templates/doc/status_change/approve.html +++ b/ietf/templates/doc/status_change/approve.html @@ -13,7 +13,7 @@ <h1> <form class="my-3" method="post"> {% csrf_token %} {% bootstrap_formset formset %} - <button type="submit" class="btn btn-primary">Send announcement & close ballot</button> + <button type="submit" class="btn btn-primary">Send announcement & close ballot</button> <a class="btn btn-secondary float-end" href="{% url "ietf.doc.views_doc.document_main" name=doc.name %}">Back</a> </form> diff --git a/ietf/templates/doc/status_change/last_call.html b/ietf/templates/doc/status_change/last_call.html index f73e96032c6..682a27b0734 100644 --- a/ietf/templates/doc/status_change/last_call.html +++ b/ietf/templates/doc/status_change/last_call.html @@ -22,7 +22,7 @@ <h1> class="btn btn-warning" name="send_last_call_request" value="Save and Request Last Call"> - Save text & request last call + Save text & request last call </button> {% if user|has_role:"Secretariat" %} <a class="btn btn-warning" From ccd8eebb7dabe86ccd5906a7fecedb6599699a99 Mon Sep 17 00:00:00 2001 From: Lars Eggert <lars@eggert.org> Date: Thu, 31 Mar 2022 22:56:31 +0300 Subject: [PATCH 10/26] More HTML fixes --- ietf/doc/tests_draft.py | 2 +- ietf/doc/views_charter.py | 2 +- ietf/doc/views_status_change.py | 2 +- .../doc/ballot/irsg_ballot_approve.html | 12 ++++++---- ietf/templates/doc/ballot/writeupnotes.html | 8 +++---- .../doc/charter/ballot_writeupnotes.html | 6 ++--- .../doc/draft/request_publication.html | 23 +++++++++++-------- ietf/templates/doc/edit_notify.html | 6 ++--- .../templates/doc/review/complete_review.html | 4 ++-- .../doc/status_change/edit_related_rows.html | 14 +++++++---- ietf/templates/doc/submit_to_iesg.html | 12 +++++----- ietf/utils/response.py | 2 +- 12 files changed, 50 insertions(+), 43 deletions(-) diff --git a/ietf/doc/tests_draft.py b/ietf/doc/tests_draft.py index 9a4e69383eb..06cf953c8bd 100644 --- a/ietf/doc/tests_draft.py +++ b/ietf/doc/tests_draft.py @@ -1383,7 +1383,7 @@ def verify_can_see(username): r = self.client.get(url) self.assertEqual(r.status_code,200) q = PyQuery(r.content) - self.assertEqual(len(q('form input[name="confirm"]')),1) + self.assertEqual(len(q('form button[name="confirm"]')),1) url = urlreverse('ietf.doc.views_draft.to_iesg', kwargs=dict(name=self.docname)) diff --git a/ietf/doc/views_charter.py b/ietf/doc/views_charter.py index 29cfa7f8e2d..3e25d23eb06 100644 --- a/ietf/doc/views_charter.py +++ b/ietf/doc/views_charter.py @@ -613,7 +613,7 @@ def action_announcement_text(request, name): if "regenerate_text" in request.POST: e = default_action_text(group, charter, by) e.save() - form = ActionAnnouncementTextForm(initial=dict(announcement_text=e.text)) + form = ActionAnnouncementTextForm(initial=dict(announcement_text=escape(e.text))) if "send_text" in request.POST and form.is_valid(): parsed_msg = send_mail_preformatted(request, form.cleaned_data['announcement_text']) diff --git a/ietf/doc/views_status_change.py b/ietf/doc/views_status_change.py index 2484d864508..e7679f66bfd 100644 --- a/ietf/doc/views_status_change.py +++ b/ietf/doc/views_status_change.py @@ -716,7 +716,7 @@ def last_call(request, name): if "regenerate_last_call_text" in request.POST: e = generate_last_call_text(request,status_change) - form = LastCallTextForm(initial=dict(last_call_text=e.text)) + form = LastCallTextForm(initial=dict(last_call_text=escape(e.text))) return render(request, 'doc/status_change/last_call.html', dict(doc=status_change, diff --git a/ietf/templates/doc/ballot/irsg_ballot_approve.html b/ietf/templates/doc/ballot/irsg_ballot_approve.html index 25334095c86..8b28f04c3ab 100644 --- a/ietf/templates/doc/ballot/irsg_ballot_approve.html +++ b/ietf/templates/doc/ballot/irsg_ballot_approve.html @@ -14,16 +14,18 @@ <h1> <br> <small class="text-muted">{{ doc }}</small> </h1> - <p> + <p class="mt-3"> {{ question }} </p> <form method="post"> {% csrf_token %} {# curly percent bootstrap_form approval_text_form curly percent #} - Due date for this ballot: - <input type="text" data-provide="datepicker" data-date-format="yyyy-mm-dd" placeholder="{{ fillerdate }}" name="duedate"> - <button type="submit" class="btn btn-primary" name="irsg_button" value="Yes">Yes</button> - <button type="submit" class="btn btn-primary" name="irsg_button" value="No">No</button> + <div class="mb-3"> + <label for="duedate" class="form-label">Due date for this ballot:</label> + <input id="duedate" class="form-control" type="text" data-provide="datepicker" data-date-format="yyyy-mm-dd" placeholder="{{ fillerdate }}" name="duedate" data-date-orientation="auto bottom"> + </div> + <button type="submit" class="btn btn-primary" name="irsg_button" value="Yes">Issue ballot</button> + <button type="submit" class="btn btn-secondary float-end" name="irsg_button" value="No">Back</button> </form> {% endblock %} {% block js %} diff --git a/ietf/templates/doc/ballot/writeupnotes.html b/ietf/templates/doc/ballot/writeupnotes.html index 44ae5758aa4..8b9a8b4b462 100644 --- a/ietf/templates/doc/ballot/writeupnotes.html +++ b/ietf/templates/doc/ballot/writeupnotes.html @@ -28,14 +28,12 @@ <h1> <button type="submit" class="btn {% if ballot_issue_danger %}btn-danger{% else %}btn-warning{% endif %}" name="issue_ballot" - value="Save and Issue Ballot"> - Save -& {% if ballot_issued %}re-{% endif %} - issue ballot + value="Save and issue ballot"> + Save & {% if ballot_issued %}re-{% endif %}issue ballot </button> <a class="btn btn-secondary float-end" href="{% url "ietf.doc.views_doc.document_main" name=doc.canonical_name %}"> Back </a> </form> -{% endblock %} +{% endblock %} \ No newline at end of file diff --git a/ietf/templates/doc/charter/ballot_writeupnotes.html b/ietf/templates/doc/charter/ballot_writeupnotes.html index 398c2b1ed2c..fa4c12b6176 100644 --- a/ietf/templates/doc/charter/ballot_writeupnotes.html +++ b/ietf/templates/doc/charter/ballot_writeupnotes.html @@ -21,10 +21,8 @@ <h1> <button type="submit" class="btn btn-warning" name="send_ballot" - value="Save and Re-Issue Ballot"> - Save -& {% if ballot_issued %}re-{% endif %} - issue ballot + value="Save and re-issue ballot"> + Save & {% if ballot_issued %}re-{% endif %}issue ballot </button> <a class="btn btn-secondary float-end" href="{% url 'ietf.doc.views_doc.document_writeup' name=charter.name %}"> diff --git a/ietf/templates/doc/draft/request_publication.html b/ietf/templates/doc/draft/request_publication.html index 3accfed6865..000b4198583 100644 --- a/ietf/templates/doc/draft/request_publication.html +++ b/ietf/templates/doc/draft/request_publication.html @@ -29,30 +29,33 @@ <h1> <form class="mt-3" method="post"> {% csrf_token %} <div class="mb-3"> - <label class="form-label">From</label> + <label for="message-frm" class="form-label">From</label> <input class="form-control" type="text" - placeholder="{{ message.frm }}" - disabled> + id="message-frm" + value="{{ message.frm }}" + readonly> </div> <div class="mb-3"> - <label class="form-label">To</label> + <label for="message-to" class="form-label">To</label> <input class="form-control" type="text" - placeholder="{{ message.to|join:', ' }}" - disabled> + id="message-to" + value="{{ message.to }}" + readonly> </div> {% if message.cc %} <div class="mb-3"> - <label class="form-label">Cc</label> + <label for="message-cc" class="form-label">Cc</label> <input class="form-control" type="text" - placeholder="{{ message.cc|join:', ' }}" - disabled> + id="message-cc" + value="{{ message.cc }}" + readonly> </div> {% endif %} {% bootstrap_form form %} - <button type="submit" class="btn btn-danger">Email RFC Editor</button> + <button type="submit" class="btn btn-primary">Email RFC Editor</button> <button type="reset" class="btn btn-warning">Reset</button> <a class="btn btn-secondary float-end" href="{% url "ietf.doc.views_doc.document_main" name=doc.name %}">Back</a> diff --git a/ietf/templates/doc/edit_notify.html b/ietf/templates/doc/edit_notify.html index 6ba4b8028b3..6701c58523c 100644 --- a/ietf/templates/doc/edit_notify.html +++ b/ietf/templates/doc/edit_notify.html @@ -17,10 +17,10 @@ <h1> class="btn btn-primary" name="save_addresses" value="Save">Submit</button> - <input type="submit" + <button type="submit" class="btn btn-warning" - name="regenerate_addresses" - value="Regenerate address list"> + name="regenerate_addresses"> + Regenerate address list</button> <a class="btn btn-secondary float-end" href="{% url "ietf.doc.views_doc.document_main" name=doc.canonical_name %}"> Back diff --git a/ietf/templates/doc/review/complete_review.html b/ietf/templates/doc/review/complete_review.html index a27965b6c60..b670266536e 100644 --- a/ietf/templates/doc/review/complete_review.html +++ b/ietf/templates/doc/review/complete_review.html @@ -98,9 +98,9 @@ <h1> {% if mail_archive_query_urls %} <div class="mail-archive-search"> <div class="offset-md-2 col-md-10"> - <label class="form-label">Search mail archive subjects for:</label> + <label for="mail-archive-subjects" class="form-label">Search mail archive subjects for:</label> <div class="input-group mb-3"> - <input type="text" + <input type="text" id="mail-archive-subjects" class="query-input form-control" value="{{ mail_archive_query_urls.query }}"> <button type="button" class="search btn btn-primary">Search</button> diff --git a/ietf/templates/doc/status_change/edit_related_rows.html b/ietf/templates/doc/status_change/edit_related_rows.html index 9e6b4737f7e..26c0413fdb4 100644 --- a/ietf/templates/doc/status_change/edit_related_rows.html +++ b/ietf/templates/doc/status_change/edit_related_rows.html @@ -3,18 +3,21 @@ {% origin %} {% for rfc,choice_slug in form.relations.items %} <div class="input-group mb-3"> + <label for="new_relation_row_{{ rfc }}" aria-label="Enter new affected RFC"></label> <select class="form-control select2-field" data-ajax--url="{% url 'ietf.doc.views_search.ajax_select2_search_docs' model_name='document' doc_type='draft' %}" data-max-entries="1" data-width="resolve" data-result-key="text" name="new_relation_row_{{ rfc }}" + id="new_relation_row_{{ rfc }}" data-placeholder="Enter new affected RFC."> <option id="{{ rfc|upper }}" selected> {{ rfc|upper }} </option> </select> - <select class="form-select" name="statchg_relation_row_{{ rfc }}"> + <label for="statchg_relation_row_{{ rfc }}" aria-label="Select proposed new status"></label> + <select class="form-select" name="statchg_relation_row_{{ rfc }}" id="statchg_relation_row_{{ rfc }}"> <option {% if choice_slug == "" %}selected{% endif %}> (None) </option> @@ -25,11 +28,13 @@ </option> {% endfor %} </select> - <button class="btn btn-danger delete">Delete</button> + <button type="button" class="btn btn-danger delete">Delete</button> </div> {% endfor %} <div class="input-group mb-3 new-relation-row"> + <label for="new_relation_row_rfc" aria-label="Enter new affected RFC"></label> <select name="new_relation_row_" + id="new_relation_row_rfc" class="form-control select2-field" data-ajax--url="{% url 'ietf.doc.views_search.ajax_select2_search_docs' model_name='docalias' doc_type='draft' %}" data-result-key="text" @@ -37,7 +42,8 @@ data-width="resolve" data-placeholder="Enter new affected RFC."> </select> - <select class="form-select" name="statchg_relation_row_"> + <label for="statchg_relation_row" aria-label="Select proposed new status"></label> + <select id="statchg_relation_row" class="form-select" name="statchg_relation_row_"> <option {% if choice_slug == "" %}selected{% endif %}> (Select proposed new status.) </option> @@ -48,5 +54,5 @@ </option> {% endfor %} </select> - <button class="btn btn-outline-danger delete" disabled>Delete</button> + <button type="button" class="btn btn-outline-danger delete" disabled>Delete</button> </div> \ No newline at end of file diff --git a/ietf/templates/doc/submit_to_iesg.html b/ietf/templates/doc/submit_to_iesg.html index b2d2535d103..604daa5454c 100644 --- a/ietf/templates/doc/submit_to_iesg.html +++ b/ietf/templates/doc/submit_to_iesg.html @@ -90,13 +90,13 @@ <h1> </ul> <form method="post"> {% csrf_token %} - <input type="submit" + <button type="submit" class="btn btn-warning" - name="confirm" - value="Request publication"> - <input type="submit" + name="confirm"> + Request publication</button> + <button type="submit" class="btn btn-secondary float-end" - name="cancel" - value="Back"> + name="cancel"> + Back</button> </form> {% endblock %} \ No newline at end of file diff --git a/ietf/utils/response.py b/ietf/utils/response.py index 122b81b7fe8..1ca04f25867 100644 --- a/ietf/utils/response.py +++ b/ietf/utils/response.py @@ -7,5 +7,5 @@ def permission_denied(request, msg): "A wrapper around the PermissionDenied exception" if not request.user.is_authenticated: - msg += " <br>You may want to <a href='/accounts/login?next=%s'><u>Log in</u></a> if you have a datatracker role that lets you access this page." % request.path + msg += ' <br>You may want to <a href="/accounts/login?next=%s">log in</a> if you have a datatracker role that lets you access this page.' % request.path raise PermissionDenied(mark_safe(msg)) \ No newline at end of file From 36d118c3bac87abc781d5972e1c8dd38a90c7c3e Mon Sep 17 00:00:00 2001 From: Lars Eggert <lars@eggert.org> Date: Thu, 31 Mar 2022 22:56:57 +0300 Subject: [PATCH 11/26] Add config option, and disable HTML validation by default --- ietf/utils/test_runner.py | 85 +++++++++++++++++++++++++++++++++------ 1 file changed, 72 insertions(+), 13 deletions(-) diff --git a/ietf/utils/test_runner.py b/ietf/utils/test_runner.py index c2cd9433c0e..e59252bd888 100644 --- a/ietf/utils/test_runner.py +++ b/ietf/utils/test_runner.py @@ -69,6 +69,7 @@ from django.core.management import call_command from django.urls import URLResolver # type: ignore from django.template.backends.django import DjangoTemplates, Template +# from django.utils.safestring import mark_safe import debug # pyflakes:ignore debug.debug = True @@ -163,12 +164,16 @@ def mypy_test(self): class ValidatingTemplates(DjangoTemplates): def __init__(self, params): super().__init__(params) + + if settings.validate_html is False: + return + self.validation_cache = set() self.testcase = TestCase() self.testcase.maxDiff = None - self.config_file = tempfile.NamedTemporaryFile() - # keep the html-validate config here, so it can be kept in sync easily - htmlvalidate = { + + # keep the html-validate configs here, so they can be kept in sync easily + frag_config = { "extends": ["html-validate:recommended"], "rules": { # many trailing whitespaces inserted by Django, ignore: @@ -186,11 +191,28 @@ def __init__(self, params): "attribute-boolean-style": "off", }, } - self.config_file.write(json.dumps(htmlvalidate).encode()) - self.config_file.flush() + self.frag_config_file = tempfile.NamedTemporaryFile() + self.frag_config_file.write(json.dumps(frag_config).encode()) + self.frag_config_file.flush() + + doc_config = frag_config + # enable doc-level rules + doc_config["extends"].append("html-validate:document") + # FIXME: we should find a way to use SRI, but ignore for now: + doc_config["rules"]["require-sri"] = "off" + # permit discontinous heading numbering in cards + doc_config["rules"]["heading-level"] = [ + "error", + {"sectioningRoots": [".card-body"]}, + ] + self.doc_config_file = tempfile.NamedTemporaryFile() + self.doc_config_file.write(json.dumps(frag_config).encode()) + self.doc_config_file.flush() def __del__(self): - self.config_file.close() + if settings.validate_html: + self.frag_config_file.close() + self.doc_config_file.close() def get_template(self, template_name): return ValidatingTemplate(self.engine.get_template(template_name), self) @@ -202,23 +224,49 @@ def __init__(self, template, backend): def render(self, context=None, request=None): render_result = super().render(context, request) + if settings.validate_html is False: + return render_result if not self.origin.name.endswith("html"): # not an HTML fragnment, so skip it return render_result + is_doc = re.search(r"^\s*<!doctype", render_result, flags=re.IGNORECASE) + fingerprint = hash(render_result) if fingerprint in self.backend.validation_cache: # already validated this HTML fragment, skip it - return render_result - - self.backend.validation_cache.add(fingerprint) + print( + "skip\t", + 0 if "templates/base/menu" in self.origin.name else len(render_result), + "\t", + is_doc is not None, + "\t", + self.origin.name, + ) + # as an optimization, make page a bit smaller by not returning HTML for the menus + # FIXME: figure out why this still includes base/menu.html + return "" if "templates/base/menu" in self.origin.name else render_result + + print( + "VAL\t", + len(render_result), + "\t", + is_doc is not None, + "\t", + self.origin.name, + ) + config_file = ( + self.backend.doc_config_file.name + if is_doc + else self.backend.frag_config_file.name + ) proc = subprocess.run( [ "npx", "html-validate", "--formatter=json", - f"--config={self.backend.config_file.name}", + f"--config={config_file}", "--stdin", ], input=render_result.encode(), @@ -229,10 +277,12 @@ def render(self, context=None, request=None): validation_results = json.loads(proc.stdout.decode()) except json.decoder.JSONDecodeError: self.backend.testcase.assertEqual("", proc.stdout.decode()) + self.backend.validation_cache.add(fingerprint) if len(validation_results) == 0: # no errors! return render_result - + if validation_results[0]["source"] is None: + self.backend.testcase.assertEqual("", validation_results) source_lines = validation_results[0]["source"].splitlines(keepends=True) result = "" for msg in validation_results[0]["messages"]: @@ -253,7 +303,7 @@ def render(self, context=None, request=None): path = path.relative_to(cwd) with open("error-" + path.name, "w") as file: file.write(validation_results[0]["source"]) - result += f"Wrote HTML source to {path.name}." + result += f"Wrote HTML source to {file.name}." self.backend.testcase.assertEqual("", result) return render_result @@ -623,14 +673,18 @@ def add_arguments(cls, parser): parser.add_argument('--show-logging', action='store_true', default=False, help='Show logging output going to LOG_USER in production mode') + parser.add_argument('--validate-html', + action='store_true', dest="validate_html", default=False, + help='Validate all generated HTML with html-validate.org') - def __init__(self, skip_coverage=False, save_version_coverage=None, html_report=None, permit_mixed_migrations=None, show_logging=None, **kwargs): + def __init__(self, skip_coverage=False, save_version_coverage=None, html_report=None, permit_mixed_migrations=None, show_logging=None, validate_html=None, **kwargs): # self.check_coverage = not skip_coverage self.save_version_coverage = save_version_coverage self.html_report = html_report self.permit_mixed_migrations = permit_mixed_migrations self.show_logging = show_logging + settings.validate_html = validate_html settings.show_logging = show_logging # self.root_dir = os.path.dirname(settings.BASE_DIR) @@ -746,6 +800,11 @@ def setup_test_environment(self, **kwargs): s[1] = tuple(s[1]) # random.setstate() won't accept a list in lieu of a tuple factory.random.set_random_state(s) + if settings.validate_html: + print(" Validating all HTML generated during the tests; this will be slow") + else: + print(" Not validating any generated HTML; please do so at least once before committing changes") + super(IetfTestRunner, self).setup_test_environment(**kwargs) def teardown_test_environment(self, **kwargs): From ba1acbb51f53967cc25b9a5010e02423419a6fdf Mon Sep 17 00:00:00 2001 From: Lars Eggert <lars@eggert.org> Date: Fri, 1 Apr 2022 14:26:35 +0300 Subject: [PATCH 12/26] Batch HTML validations together, to amortize overheads --- ietf/utils/test_runner.py | 255 ++++++++++++++++++++------------------ 1 file changed, 133 insertions(+), 122 deletions(-) diff --git a/ietf/utils/test_runner.py b/ietf/utils/test_runner.py index e59252bd888..c9cc6272dde 100644 --- a/ietf/utils/test_runner.py +++ b/ietf/utils/test_runner.py @@ -49,6 +49,7 @@ import pathlib import subprocess import tempfile +import copy import factory.random from fnmatch import fnmatch @@ -167,52 +168,8 @@ def __init__(self, params): if settings.validate_html is False: return - self.validation_cache = set() - self.testcase = TestCase() - self.testcase.maxDiff = None - - # keep the html-validate configs here, so they can be kept in sync easily - frag_config = { - "extends": ["html-validate:recommended"], - "rules": { - # many trailing whitespaces inserted by Django, ignore: - "no-trailing-whitespace": "off", - # navbar dropdowns can't use buttons, ignore: - "prefer-native-element": [ - "error", - {"exclude": ["button"]}, - ], - # title length mostly only matters for SEO, ignore: - "long-title": "off", - # the current (older) version of Django seems to add type="text/javascript" for form media, ignore: - "script-type": "off", - # django-bootstrap5 seems to still generate 'checked="checked"', ignore: - "attribute-boolean-style": "off", - }, - } - self.frag_config_file = tempfile.NamedTemporaryFile() - self.frag_config_file.write(json.dumps(frag_config).encode()) - self.frag_config_file.flush() - - doc_config = frag_config - # enable doc-level rules - doc_config["extends"].append("html-validate:document") - # FIXME: we should find a way to use SRI, but ignore for now: - doc_config["rules"]["require-sri"] = "off" - # permit discontinous heading numbering in cards - doc_config["rules"]["heading-level"] = [ - "error", - {"sectioningRoots": [".card-body"]}, - ] - self.doc_config_file = tempfile.NamedTemporaryFile() - self.doc_config_file.write(json.dumps(frag_config).encode()) - self.doc_config_file.flush() - - def __del__(self): - if settings.validate_html: - self.frag_config_file.close() - self.doc_config_file.close() + self.cwd = str(pathlib.Path.cwd()) def get_template(self, template_name): return ValidatingTemplate(self.engine.get_template(template_name), self) @@ -223,89 +180,42 @@ def __init__(self, template, backend): super().__init__(template, backend) def render(self, context=None, request=None): - render_result = super().render(context, request) + content = super().render(context, request) + if settings.validate_html is False: - return render_result + return content if not self.origin.name.endswith("html"): - # not an HTML fragnment, so skip it - return render_result + # not HTML, skip it + return content - is_doc = re.search(r"^\s*<!doctype", render_result, flags=re.IGNORECASE) + if not self.origin.name.startswith(self.backend.cwd): + # only validate fragments in our source tree + return content - fingerprint = hash(render_result) + fingerprint = hash(content) if fingerprint in self.backend.validation_cache: # already validated this HTML fragment, skip it - print( - "skip\t", - 0 if "templates/base/menu" in self.origin.name else len(render_result), - "\t", - is_doc is not None, - "\t", - self.origin.name, - ) # as an optimization, make page a bit smaller by not returning HTML for the menus # FIXME: figure out why this still includes base/menu.html - return "" if "templates/base/menu" in self.origin.name else render_result - - print( - "VAL\t", - len(render_result), - "\t", - is_doc is not None, - "\t", - self.origin.name, - ) - config_file = ( - self.backend.doc_config_file.name - if is_doc - else self.backend.frag_config_file.name - ) - proc = subprocess.run( - [ - "npx", - "html-validate", - "--formatter=json", - f"--config={config_file}", - "--stdin", - ], - input=render_result.encode(), - stdout=subprocess.PIPE, - stderr=subprocess.STDOUT, - ) - try: - validation_results = json.loads(proc.stdout.decode()) - except json.decoder.JSONDecodeError: - self.backend.testcase.assertEqual("", proc.stdout.decode()) + return "" if "templates/base/menu" in self.origin.name else content + self.backend.validation_cache.add(fingerprint) - if len(validation_results) == 0: - # no errors! - return render_result - if validation_results[0]["source"] is None: - self.backend.testcase.assertEqual("", validation_results) - source_lines = validation_results[0]["source"].splitlines(keepends=True) - result = "" - for msg in validation_results[0]["messages"]: - line = msg["line"] - result += ( - f"{self.origin.name}:\n" - + "".join(source_lines[line - 4 : line]) - + " " * (msg["column"] - 1) - + "^" * msg["size"] - + f' {msg["ruleId"]}: {msg["message"]} on line {line}:{msg["column"]}\n' - + "".join(source_lines[line : line + 3]) - + "\n\n" - ) + kind = ( + "doc" + if re.search(r"^\s*<!doctype", content, flags=re.IGNORECASE) + else "frag" + ) + + # don't validate each template by itself, causes too much overhead + # instead, save a batch of them and then validate them all in one go + # this delays error detection a bit, but is MUCH faster + settings.validate_html.batches[kind].append((self.origin.name, content)) + # FWIW, a batch size of 30 seems to result in less than 10% runtime overhead + if len(settings.validate_html.batches[kind]) >= 30: + settings.validate_html.validate(kind) - if result: - path = pathlib.Path(self.origin.name) - cwd = pathlib.Path.cwd() - path = path.relative_to(cwd) - with open("error-" + path.name, "w") as file: - file.write(validation_results[0]["source"]) - result += f"Wrote HTML source to {file.name}." - self.backend.testcase.assertEqual("", result) - return render_result + return content class TemplateCoverageLoader(BaseLoader): @@ -674,7 +584,7 @@ def add_arguments(cls, parser): action='store_true', default=False, help='Show logging output going to LOG_USER in production mode') parser.add_argument('--validate-html', - action='store_true', dest="validate_html", default=False, + action='store_true', dest="validate_html", default=True, help='Validate all generated HTML with html-validate.org') def __init__(self, skip_coverage=False, save_version_coverage=None, html_report=None, permit_mixed_migrations=None, show_logging=None, validate_html=None, **kwargs): @@ -684,7 +594,7 @@ def __init__(self, skip_coverage=False, save_version_coverage=None, html_report= self.html_report = html_report self.permit_mixed_migrations = permit_mixed_migrations self.show_logging = show_logging - settings.validate_html = validate_html + settings.validate_html = self if validate_html else False settings.show_logging = show_logging # self.root_dir = os.path.dirname(settings.BASE_DIR) @@ -800,10 +710,52 @@ def setup_test_environment(self, **kwargs): s[1] = tuple(s[1]) # random.setstate() won't accept a list in lieu of a tuple factory.random.set_random_state(s) - if settings.validate_html: - print(" Validating all HTML generated during the tests; this will be slow") + if settings.validate_html is False: + print(" Not validating any generated HTML; " + "please do so at least once before committing changes") else: - print(" Not validating any generated HTML; please do so at least once before committing changes") + print(" Validating all HTML generated during the tests") + self.batches = {"doc": [], "frag": []} + + # keep the html-validate configs here, so they can be kept in sync easily + config = {} + config["frag"] = { + "extends": ["html-validate:recommended"], + "rules": { + # many trailing whitespaces inserted by Django, ignore: + "no-trailing-whitespace": "off", + # navbar dropdowns can't use buttons, ignore: + "prefer-native-element": [ + "error", + {"exclude": ["button"]}, + ], + # title length mostly only matters for SEO, ignore: + "long-title": "off", + # the current (older) version of Django seems to add type="text/javascript" for form media, ignore: + "script-type": "off", + # django-bootstrap5 seems to still generate 'checked="checked"', ignore: + "attribute-boolean-style": "off", + }, + } + + config["doc"] = copy.deepcopy(config["frag"]) + # enable doc-level rules + config["doc"]["extends"].append("html-validate:document") + # FIXME: we should find a way to use SRI, but ignore for now: + config["doc"]["rules"]["require-sri"] = "off" + # permit discontinuous heading numbering in cards + config["doc"]["rules"]["heading-level"] = [ + "error", + {"sectioningRoots": [".card-body"]}, + ] + + self.config_file = {} + for kind in ["doc", "frag"]: + self.config_file[kind] = tempfile.NamedTemporaryFile( + prefix="html-validate-config-" + ) + self.config_file[kind].write(json.dumps(config[kind]).encode()) + self.config_file[kind].flush() super(IetfTestRunner, self).setup_test_environment(**kwargs) @@ -828,6 +780,65 @@ def teardown_test_environment(self, **kwargs): json.dump(self.coverage_master, file, indent=2, sort_keys=True) super(IetfTestRunner, self).teardown_test_environment(**kwargs) + if settings.validate_html: + # self.queue.put(None) + for kind in ["doc", "frag"]: + self.validate(kind) + self.config_file[kind].close() + + def validate(self, kind): + if not self.batches[kind]: + return + + testcase = TestCase() + cwd = pathlib.Path.cwd() + tmpdir = tempfile.TemporaryDirectory(prefix="html-validate-") + for (name, content) in self.batches[kind]: + path = pathlib.Path(tmpdir.name).joinpath( + pathlib.Path(name).relative_to(cwd) + ) + pathlib.Path(path.parent).mkdir(parents=True, exist_ok=True) + with path.open(mode="w") as file: + file.write(content) + + proc = subprocess.run( + [ + "npx", + "html-validate", + "--formatter=json", + "--config=" + self.config_file[kind].name, + tmpdir.name, + ], + stdout=subprocess.PIPE, + stderr=subprocess.STDOUT, + ) + + try: + validation_results = json.loads(proc.stdout.decode()) + except json.decoder.JSONDecodeError: + testcase.fail(proc.stdout.decode()) + + errors = "" + for result in validation_results: + source_lines = result["source"].splitlines(keepends=True) + for msg in result["messages"]: + line = msg["line"] + errors += ( + f'\n{result["filePath"]}:\n' + + "".join(source_lines[line - 4 : line]) + + " " * (msg["column"] - 1) + + "^" * msg["size"] + + f' {msg["ruleId"]}: {msg["message"]} ' + + f'on line {line}:{msg["column"]}\n' + + "".join(source_lines[line : line + 3]) + + "\n" + ) + + if errors: + testcase.fail(errors) + tmpdir.cleanup() + self.batches[kind] = [] + def get_test_paths(self, test_labels): """Find the apps and paths matching the test labels, so we later can limit the coverage data to those apps and paths. From c977600875d5d1befec42aff0afa07b058871717 Mon Sep 17 00:00:00 2001 From: Lars Eggert <lars@eggert.org> Date: Fri, 1 Apr 2022 17:21:46 +0300 Subject: [PATCH 13/26] Make sure to validate all variants of a rendered template. Use tempfile to handle large validation responses. --- ietf/utils/test_runner.py | 48 ++++++++++++++++++++++----------------- 1 file changed, 27 insertions(+), 21 deletions(-) diff --git a/ietf/utils/test_runner.py b/ietf/utils/test_runner.py index c9cc6272dde..3830b4d1782 100644 --- a/ietf/utils/test_runner.py +++ b/ietf/utils/test_runner.py @@ -193,7 +193,7 @@ def render(self, context=None, request=None): # only validate fragments in our source tree return content - fingerprint = hash(content) + fingerprint = hash(content) + sys.maxsize + 1 # make hash positive if fingerprint in self.backend.validation_cache: # already validated this HTML fragment, skip it # as an optimization, make page a bit smaller by not returning HTML for the menus @@ -210,7 +210,9 @@ def render(self, context=None, request=None): # don't validate each template by itself, causes too much overhead # instead, save a batch of them and then validate them all in one go # this delays error detection a bit, but is MUCH faster - settings.validate_html.batches[kind].append((self.origin.name, content)) + settings.validate_html.batches[kind].append( + (self.origin.name, content, fingerprint) + ) # FWIW, a batch size of 30 seems to result in less than 10% runtime overhead if len(settings.validate_html.batches[kind]) >= 30: settings.validate_html.validate(kind) @@ -793,30 +795,35 @@ def validate(self, kind): testcase = TestCase() cwd = pathlib.Path.cwd() tmpdir = tempfile.TemporaryDirectory(prefix="html-validate-") - for (name, content) in self.batches[kind]: + for (name, content, fingerprint) in self.batches[kind]: path = pathlib.Path(tmpdir.name).joinpath( pathlib.Path(name).relative_to(cwd) ) + path = path.with_name(path.stem + "-" + hex(fingerprint) + path.suffix) pathlib.Path(path.parent).mkdir(parents=True, exist_ok=True) with path.open(mode="w") as file: file.write(content) + self.batches[kind] = [] - proc = subprocess.run( - [ - "npx", - "html-validate", - "--formatter=json", - "--config=" + self.config_file[kind].name, - tmpdir.name, - ], - stdout=subprocess.PIPE, - stderr=subprocess.STDOUT, - ) + validation_results = None + with tempfile.NamedTemporaryFile() as stdout: + subprocess.run( + [ + "npx", + "html-validate", + "--formatter=json", + "--config=" + self.config_file[kind].name, + tmpdir.name, + ], + stdout=stdout, + stderr=stdout, + ) - try: - validation_results = json.loads(proc.stdout.decode()) - except json.decoder.JSONDecodeError: - testcase.fail(proc.stdout.decode()) + stdout.seek(0) + try: + validation_results = json.load(stdout) + except json.decoder.JSONDecodeError: + testcase.fail(stdout.read()) errors = "" for result in validation_results: @@ -825,19 +832,18 @@ def validate(self, kind): line = msg["line"] errors += ( f'\n{result["filePath"]}:\n' - + "".join(source_lines[line - 4 : line]) + + "".join(source_lines[line - 5 : line]) + " " * (msg["column"] - 1) + "^" * msg["size"] + f' {msg["ruleId"]}: {msg["message"]} ' + f'on line {line}:{msg["column"]}\n' - + "".join(source_lines[line : line + 3]) + + "".join(source_lines[line : line + 5]) + "\n" ) if errors: testcase.fail(errors) tmpdir.cleanup() - self.batches[kind] = [] def get_test_paths(self, test_labels): """Find the apps and paths matching the test labels, so we later can limit From 923cc8be1eaff61729674d3a59719b44c2d21813 Mon Sep 17 00:00:00 2001 From: Lars Eggert <lars@eggert.org> Date: Fri, 1 Apr 2022 18:04:54 +0300 Subject: [PATCH 14/26] Bump deps --- package-lock.json | 1745 +++++++++++++++++++++++---------------------- 1 file changed, 890 insertions(+), 855 deletions(-) diff --git a/package-lock.json b/package-lock.json index 92c8f81341b..30894d5ce37 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,5 +1,5 @@ { - "name": "workspace", + "name": "datatracker", "lockfileVersion": 2, "requires": true, "packages": { @@ -362,9 +362,9 @@ } }, "node_modules/@npmcli/git/node_modules/lru-cache": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.7.1.tgz", - "integrity": "sha512-cRffBiTW8s73eH4aTXqBcTLU0xQnwGV3/imttRHGWCrbergmnK4D6JXQd8qin5z43HnDwRI+o7mVW0LEB+tpAw==", + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.7.3.tgz", + "integrity": "sha512-WY9wjJNQt9+PZilnLbuFKM+SwDull9+6IAguOrarOMoOHTcJ9GnXSO11+Gw6c7xtDkBkthR57OZMtZKYr+1CEw==", "dev": true, "engines": { "node": ">=12" @@ -457,20 +457,20 @@ } }, "node_modules/@parcel/bundler-default": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/bundler-default/-/bundler-default-2.4.0.tgz", - "integrity": "sha512-RaXlxo0M51739Ko3bsOJpDBZlJ+cqkDoBTozNeSc65jS2TMBIBWLMapm8095qmty39OrgYNhzjgPiIlKDS/LWA==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/bundler-default/-/bundler-default-2.4.1.tgz", + "integrity": "sha512-PTfBOuoiiYdfwyoPFeBTOinyl1RL4qaoyAQ0PCe01C1i4NcRWCY1w7zRvwJW/OhU3Ka+LtioGmfxu5/drdXzLg==", "dev": true, "dependencies": { - "@parcel/diagnostic": "2.4.0", - "@parcel/hash": "2.4.0", - "@parcel/plugin": "2.4.0", - "@parcel/utils": "2.4.0", + "@parcel/diagnostic": "2.4.1", + "@parcel/hash": "2.4.1", + "@parcel/plugin": "2.4.1", + "@parcel/utils": "2.4.1", "nullthrows": "^1.1.1" }, "engines": { "node": ">= 12.0.0", - "parcel": "^2.4.0" + "parcel": "^2.4.1" }, "funding": { "type": "opencollective", @@ -478,14 +478,14 @@ } }, "node_modules/@parcel/cache": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/cache/-/cache-2.4.0.tgz", - "integrity": "sha512-oOudoAafrCAHQY0zkU7gVHG1pAGBUz9rht7Tx4WupTmAH0O0F5UnZs6XbjoBJaPHg+CYUXK7v9wQcrNA72E3GA==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/cache/-/cache-2.4.1.tgz", + "integrity": "sha512-2N5ly++p/yefmPdK39X1QIoA2e6NtS1aYSsxrIC9EX92Kjd7SfSceqUJhlJWB49omJSheEJLd1qM3EJG9EvICQ==", "dev": true, "dependencies": { - "@parcel/fs": "2.4.0", - "@parcel/logger": "2.4.0", - "@parcel/utils": "2.4.0", + "@parcel/fs": "2.4.1", + "@parcel/logger": "2.4.1", + "@parcel/utils": "2.4.1", "lmdb": "2.2.4" }, "engines": { @@ -496,13 +496,13 @@ "url": "https://opencollective.com/parcel" }, "peerDependencies": { - "@parcel/core": "^2.4.0" + "@parcel/core": "^2.4.1" } }, "node_modules/@parcel/codeframe": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/codeframe/-/codeframe-2.4.0.tgz", - "integrity": "sha512-PJ3W9Z0sjoS2CANyo50c+LEr9IRZrtu0WsVPSYZ5ZYRuSXrSa/6PcAlnkyDk2+hi7Od8ncT2bmDexl0Oar3Jyg==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/codeframe/-/codeframe-2.4.1.tgz", + "integrity": "sha512-m3WDeEpWvgqekCqsHfPMJrSQquahdIgSR1x1RDCqQ1YelvW0fQiGgu42MXI5tjoBrHC1l1mF01UDb+xMSxz1DA==", "dev": true, "dependencies": { "chalk": "^4.1.0" @@ -516,16 +516,16 @@ } }, "node_modules/@parcel/compressor-raw": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/compressor-raw/-/compressor-raw-2.4.0.tgz", - "integrity": "sha512-ZErX14fTc0gKIgtnuqW7Clfln4dpXWfUaJQQIf5C3x/LkpUeEhdXeKntkvSxOddDk2JpIKDwqzAxEMZUnDo4Nw==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/compressor-raw/-/compressor-raw-2.4.1.tgz", + "integrity": "sha512-cEOOOzIK7glxCqJX0OfBFBZE/iT7tmjEOXswRY3CnqY9FGoY3NYDAsOLm7A73RuIdNaZfYVxVUy3g7OLpbKL+g==", "dev": true, "dependencies": { - "@parcel/plugin": "2.4.0" + "@parcel/plugin": "2.4.1" }, "engines": { "node": ">= 12.0.0", - "parcel": "^2.4.0" + "parcel": "^2.4.1" }, "funding": { "type": "opencollective", @@ -533,69 +533,69 @@ } }, "node_modules/@parcel/config-default": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/config-default/-/config-default-2.4.0.tgz", - "integrity": "sha512-pFOPBXPO6HGqNWTLkcK5i8haMOrRgUouUhcWPGWDpN9IPUYFK2E/O1E/uyMjIA1mSL3FnazI+jJwZ45NhKPpIA==", - "dev": true, - "dependencies": { - "@parcel/bundler-default": "2.4.0", - "@parcel/compressor-raw": "2.4.0", - "@parcel/namer-default": "2.4.0", - "@parcel/optimizer-css": "2.4.0", - "@parcel/optimizer-htmlnano": "2.4.0", - "@parcel/optimizer-image": "2.4.0", - "@parcel/optimizer-svgo": "2.4.0", - "@parcel/optimizer-terser": "2.4.0", - "@parcel/packager-css": "2.4.0", - "@parcel/packager-html": "2.4.0", - "@parcel/packager-js": "2.4.0", - "@parcel/packager-raw": "2.4.0", - "@parcel/packager-svg": "2.4.0", - "@parcel/reporter-dev-server": "2.4.0", - "@parcel/resolver-default": "2.4.0", - "@parcel/runtime-browser-hmr": "2.4.0", - "@parcel/runtime-js": "2.4.0", - "@parcel/runtime-react-refresh": "2.4.0", - "@parcel/runtime-service-worker": "2.4.0", - "@parcel/transformer-babel": "2.4.0", - "@parcel/transformer-css": "2.4.0", - "@parcel/transformer-html": "2.4.0", - "@parcel/transformer-image": "2.4.0", - "@parcel/transformer-js": "2.4.0", - "@parcel/transformer-json": "2.4.0", - "@parcel/transformer-postcss": "2.4.0", - "@parcel/transformer-posthtml": "2.4.0", - "@parcel/transformer-raw": "2.4.0", - "@parcel/transformer-react-refresh-wrap": "2.4.0", - "@parcel/transformer-svg": "2.4.0" + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/config-default/-/config-default-2.4.1.tgz", + "integrity": "sha512-yGA4Mx/KDzVOPm8IYb4Id+zlz1TaIM7s472pxA4tUV1qcEtBInY0aeO9R/GsLKC2+3QPHURZld9WI9EMXRUBBA==", + "dev": true, + "dependencies": { + "@parcel/bundler-default": "2.4.1", + "@parcel/compressor-raw": "2.4.1", + "@parcel/namer-default": "2.4.1", + "@parcel/optimizer-css": "2.4.1", + "@parcel/optimizer-htmlnano": "2.4.1", + "@parcel/optimizer-image": "2.4.1", + "@parcel/optimizer-svgo": "2.4.1", + "@parcel/optimizer-terser": "2.4.1", + "@parcel/packager-css": "2.4.1", + "@parcel/packager-html": "2.4.1", + "@parcel/packager-js": "2.4.1", + "@parcel/packager-raw": "2.4.1", + "@parcel/packager-svg": "2.4.1", + "@parcel/reporter-dev-server": "2.4.1", + "@parcel/resolver-default": "2.4.1", + "@parcel/runtime-browser-hmr": "2.4.1", + "@parcel/runtime-js": "2.4.1", + "@parcel/runtime-react-refresh": "2.4.1", + "@parcel/runtime-service-worker": "2.4.1", + "@parcel/transformer-babel": "2.4.1", + "@parcel/transformer-css": "2.4.1", + "@parcel/transformer-html": "2.4.1", + "@parcel/transformer-image": "2.4.1", + "@parcel/transformer-js": "2.4.1", + "@parcel/transformer-json": "2.4.1", + "@parcel/transformer-postcss": "2.4.1", + "@parcel/transformer-posthtml": "2.4.1", + "@parcel/transformer-raw": "2.4.1", + "@parcel/transformer-react-refresh-wrap": "2.4.1", + "@parcel/transformer-svg": "2.4.1" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/parcel" }, "peerDependencies": { - "@parcel/core": "^2.4.0" + "@parcel/core": "^2.4.1" } }, "node_modules/@parcel/core": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/core/-/core-2.4.0.tgz", - "integrity": "sha512-EWZ2UWtIuwDc3fgsKyyTLpNNPoG8Yk2L117ICWF/+cqY8z/wJHm2KwLbeplDeq524shav0GJ9O4CemP3JPx0Nw==", - "dev": true, - "dependencies": { - "@parcel/cache": "2.4.0", - "@parcel/diagnostic": "2.4.0", - "@parcel/events": "2.4.0", - "@parcel/fs": "2.4.0", - "@parcel/graph": "2.4.0", - "@parcel/hash": "2.4.0", - "@parcel/logger": "2.4.0", - "@parcel/package-manager": "2.4.0", - "@parcel/plugin": "2.4.0", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/core/-/core-2.4.1.tgz", + "integrity": "sha512-h2FvqLA75ZQdIXX1y+ylGjIIi7YtbAUJyIapxaO081h3EsYG2jr9sRL4sym5ECgmvbyua/DEgtMLX3eGYn09FA==", + "dev": true, + "dependencies": { + "@parcel/cache": "2.4.1", + "@parcel/diagnostic": "2.4.1", + "@parcel/events": "2.4.1", + "@parcel/fs": "2.4.1", + "@parcel/graph": "2.4.1", + "@parcel/hash": "2.4.1", + "@parcel/logger": "2.4.1", + "@parcel/package-manager": "2.4.1", + "@parcel/plugin": "2.4.1", "@parcel/source-map": "^2.0.0", - "@parcel/types": "2.4.0", - "@parcel/utils": "2.4.0", - "@parcel/workers": "2.4.0", + "@parcel/types": "2.4.1", + "@parcel/utils": "2.4.1", + "@parcel/workers": "2.4.1", "abortcontroller-polyfill": "^1.1.9", "base-x": "^3.0.8", "browserslist": "^4.6.6", @@ -617,9 +617,9 @@ } }, "node_modules/@parcel/css": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/@parcel/css/-/css-1.7.3.tgz", - "integrity": "sha512-rgdRX4Uk31EvzH/mUScL0wdXtkci3U5N1W2pgam+9S10vQy4uONhWBepZ1tUCjONHLacGXr1jp3LbG/HI7LiTw==", + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/@parcel/css/-/css-1.7.4.tgz", + "integrity": "sha512-K1N9mxEkWQQmSINMNuGvlyPq7yCY+AtHskGxWav97lhu2i8GMMXRV9kc8/x/jkZh5KDBWO5vHhdQiujRBrgR8g==", "dev": true, "dependencies": { "detect-libc": "^1.0.3" @@ -632,20 +632,20 @@ "url": "https://opencollective.com/parcel" }, "optionalDependencies": { - "@parcel/css-darwin-arm64": "1.7.3", - "@parcel/css-darwin-x64": "1.7.3", - "@parcel/css-linux-arm-gnueabihf": "1.7.3", - "@parcel/css-linux-arm64-gnu": "1.7.3", - "@parcel/css-linux-arm64-musl": "1.7.3", - "@parcel/css-linux-x64-gnu": "1.7.3", - "@parcel/css-linux-x64-musl": "1.7.3", - "@parcel/css-win32-x64-msvc": "1.7.3" + "@parcel/css-darwin-arm64": "1.7.4", + "@parcel/css-darwin-x64": "1.7.4", + "@parcel/css-linux-arm-gnueabihf": "1.7.4", + "@parcel/css-linux-arm64-gnu": "1.7.4", + "@parcel/css-linux-arm64-musl": "1.7.4", + "@parcel/css-linux-x64-gnu": "1.7.4", + "@parcel/css-linux-x64-musl": "1.7.4", + "@parcel/css-win32-x64-msvc": "1.7.4" } }, "node_modules/@parcel/css-darwin-arm64": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/@parcel/css-darwin-arm64/-/css-darwin-arm64-1.7.3.tgz", - "integrity": "sha512-m3HDY+Rh8HJxmLELKAvCpF59vLS7FWtgBODHxl8G9Jl2CnGtXpXvdpyeMxNsTE+2QuPC+a5QT7IeZAKb2Gjmxg==", + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/@parcel/css-darwin-arm64/-/css-darwin-arm64-1.7.4.tgz", + "integrity": "sha512-fA+aBZAAgXSV7jUQFRYuKpJr5EEqNq++mFu4o/pU/lBFMJhL6Z11aqzrBecC1JziWT3t/BgryWdznf1QkNtM4w==", "cpu": [ "arm64" ], @@ -663,9 +663,9 @@ } }, "node_modules/@parcel/css-darwin-x64": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/@parcel/css-darwin-x64/-/css-darwin-x64-1.7.3.tgz", - "integrity": "sha512-LuhweXKxVwrz/hjAOm9XNRMSL+p23px20nhSCASkyUP7Higaxza948W3TSQdoL3YyR+wQxQH8Yj+R/T8Tz3E3g==", + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/@parcel/css-darwin-x64/-/css-darwin-x64-1.7.4.tgz", + "integrity": "sha512-qx/+vEXSmed7eeBgVvV/1lrEjk8KnKUiAN+CCes8d6ddJJzK5evTKQsWkywe1jNdHC33d2mlLlhLFmC2+2IPOw==", "cpu": [ "x64" ], @@ -683,9 +683,9 @@ } }, "node_modules/@parcel/css-linux-arm-gnueabihf": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/@parcel/css-linux-arm-gnueabihf/-/css-linux-arm-gnueabihf-1.7.3.tgz", - "integrity": "sha512-/pd9Em18zMvt7eDZAMpNBEwF7c4VPVhAtBOZ59ClFrsXCTDNYP7mSy0cwNgtLelCRZCGAQmZNBDNQPH7vO3rew==", + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/@parcel/css-linux-arm-gnueabihf/-/css-linux-arm-gnueabihf-1.7.4.tgz", + "integrity": "sha512-+Qf+j8dqJ+t7V/w9LnyWBzNcMG/GnlzjlWNQhiUkt1aYFYPr5i/eRWuWLYxVlz8EGQOUbYlinDGLXTUJDt31gA==", "cpu": [ "arm" ], @@ -703,9 +703,9 @@ } }, "node_modules/@parcel/css-linux-arm64-gnu": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/@parcel/css-linux-arm64-gnu/-/css-linux-arm64-gnu-1.7.3.tgz", - "integrity": "sha512-5aKiEhQK40riO4iVKzRqISzgYK+7Z7i3e6JTSz+/BHuQyHEUaBe/RuJ8Z0BDQtFz0HmWQlrQCd+7hd0Xgd8vYQ==", + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/@parcel/css-linux-arm64-gnu/-/css-linux-arm64-gnu-1.7.4.tgz", + "integrity": "sha512-ITP0HZT/Ay6JCgH3W7JpoRUYfciW+jBVBTjglZjYgyYPLLWk2J1kXB+qC3jHp5XCeH4feh7eFB1pyQcE7kqCjA==", "cpu": [ "arm64" ], @@ -723,9 +723,9 @@ } }, "node_modules/@parcel/css-linux-arm64-musl": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/@parcel/css-linux-arm64-musl/-/css-linux-arm64-musl-1.7.3.tgz", - "integrity": "sha512-Wf7/aIueDED2JqBMfZvzbBAFSaPmd3TR28bD2pmP7CI/jZnm9vHVKMdOLgt9NKSSSjdGrp+VM410CsrUM7xcOw==", + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/@parcel/css-linux-arm64-musl/-/css-linux-arm64-musl-1.7.4.tgz", + "integrity": "sha512-or61QRhhpsDlHfrc73KP4bPwnnVZWni1jkuRv1mCi+0SzYzoaO190JEaj7VWh/boUvjGiIl//FsLoZleQIWKNA==", "cpu": [ "arm64" ], @@ -743,9 +743,9 @@ } }, "node_modules/@parcel/css-linux-x64-gnu": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/@parcel/css-linux-x64-gnu/-/css-linux-x64-gnu-1.7.3.tgz", - "integrity": "sha512-0ZADbuFklUrHC1p2uPY4BPcN07jUTMqJzr/SSdnGN2XiXgiVZGcDCMHUj0DvC9Vwy11DDM6Rnw4QBbKHG+QGjQ==", + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/@parcel/css-linux-x64-gnu/-/css-linux-x64-gnu-1.7.4.tgz", + "integrity": "sha512-GHGsM06F26FAkvPcnsGw7NHxPVD7TQvg7OC7cVAYmETccO8mqs9DyRzBTevk+1kl7EQXNnHDojn7VpVN6q+phg==", "cpu": [ "x64" ], @@ -763,9 +763,9 @@ } }, "node_modules/@parcel/css-linux-x64-musl": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/@parcel/css-linux-x64-musl/-/css-linux-x64-musl-1.7.3.tgz", - "integrity": "sha512-mFWWM8lX2OIID81YQuDDt9zTqof0B7UcEcs0huE7Zbs60uLEEQupdf8iH0yh5EOhxPt3sRcQnGXf2QTrXdjIMA==", + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/@parcel/css-linux-x64-musl/-/css-linux-x64-musl-1.7.4.tgz", + "integrity": "sha512-H/9wvQ7LNqng9yIwulpfUUhs6zm9+vLCzri2qnC4vm8geyTjA0W0H5fphV8IlzNJ/DfHmoesJ+TXw5NG+QC9hg==", "cpu": [ "x64" ], @@ -783,9 +783,9 @@ } }, "node_modules/@parcel/css-win32-x64-msvc": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/@parcel/css-win32-x64-msvc/-/css-win32-x64-msvc-1.7.3.tgz", - "integrity": "sha512-KUFEMQcoP7DG3QbsN21OxhjHkfQ1BARn7D9puX75bV5N1F1kv557aaLkQZiMsgiYOL4tmJvsdQXutG7x++3j4Q==", + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/@parcel/css-win32-x64-msvc/-/css-win32-x64-msvc-1.7.4.tgz", + "integrity": "sha512-xmg18iISCn1f9IyYUif6yR8FuEmi93qzH55oUiri5vZWuCY8xfraHsRA6i8yLWnxgDmVeHyiN0IICl7rgZo10A==", "cpu": [ "x64" ], @@ -803,9 +803,9 @@ } }, "node_modules/@parcel/diagnostic": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/diagnostic/-/diagnostic-2.4.0.tgz", - "integrity": "sha512-TjWO/b2zMFhub5ouwGjazMm7iAUvdmXBfWmjrg4TBhUbhoQwBnyWfvMDtAYo7PcvXfxVPgPZv86Nv6Ym5H6cHQ==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/diagnostic/-/diagnostic-2.4.1.tgz", + "integrity": "sha512-wmJIfn0PG2ABuraS+kMjl6UKaLjTDTtG+XkjJLWHzU/dd5RozqAZDKp65GWjvHzHLx7KICTAdUJsXh2s3TnTOQ==", "dev": true, "dependencies": { "json-source-map": "^0.6.1", @@ -820,9 +820,9 @@ } }, "node_modules/@parcel/events": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/events/-/events-2.4.0.tgz", - "integrity": "sha512-DEaEtFbhOhNAEmiXJ3MyF8Scq+sNDKiTyLax4lAC5/dpE5GvwfNnoD17C2+0gDuuDpdQkdHfXfvr50aYFt7jcw==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/events/-/events-2.4.1.tgz", + "integrity": "sha512-er2jwyzYt3Zimkrp7TR865GIeIMYNd7YSSxW39y/egm4LIPBsruUpHSnKRD5b65Jd+gckkxDsnrpADG6MH1zNw==", "dev": true, "engines": { "node": ">= 12.0.0" @@ -833,16 +833,16 @@ } }, "node_modules/@parcel/fs": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/fs/-/fs-2.4.0.tgz", - "integrity": "sha512-CnUlWGUJ52SJVQi8QnaAPPQZOADmHMV9D9aX9GLcDm5XLT3Em7vmesG4bNLdMLwzYuzAtenhcWmuRCACuYztHw==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/fs/-/fs-2.4.1.tgz", + "integrity": "sha512-kE9HzW6XjO/ZA5bQnAzp1YVmGlXeDqUaius2cH2K0wU7KQX/GBjyfEWJm/UsKPB6QIrGXgkPH6ashNzOgwDqpw==", "dev": true, "dependencies": { - "@parcel/fs-search": "2.4.0", - "@parcel/types": "2.4.0", - "@parcel/utils": "2.4.0", + "@parcel/fs-search": "2.4.1", + "@parcel/types": "2.4.1", + "@parcel/utils": "2.4.1", "@parcel/watcher": "^2.0.0", - "@parcel/workers": "2.4.0" + "@parcel/workers": "2.4.1" }, "engines": { "node": ">= 12.0.0" @@ -852,13 +852,13 @@ "url": "https://opencollective.com/parcel" }, "peerDependencies": { - "@parcel/core": "^2.4.0" + "@parcel/core": "^2.4.1" } }, "node_modules/@parcel/fs-search": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/fs-search/-/fs-search-2.4.0.tgz", - "integrity": "sha512-W/Vu6wbZk4wuB6AVdMkyymwh/S8Peed/PgJgSsApYD6lSTD315I6OuEdxZh3lWY+dqQdog/NJ7dvi/hdpH/Iqw==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/fs-search/-/fs-search-2.4.1.tgz", + "integrity": "sha512-xfoLvHjHkZm4VZf3UWU5v6gzz+x7IBVY7siHGn0YyGwvlv73FmiR4mCSizqerXOyXknF2fpg6tNHNQyyNLS32Q==", "dev": true, "dependencies": { "detect-libc": "^1.0.3" @@ -872,12 +872,12 @@ } }, "node_modules/@parcel/graph": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/graph/-/graph-2.4.0.tgz", - "integrity": "sha512-5TZIAfDITkJCzgH4j4OQhnIvjV9IFwWqNBJanRl5QQTmKvdcODS3WbnK1SOJ+ZltcLVXMB+HNXmL0bX0tVolcw==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/graph/-/graph-2.4.1.tgz", + "integrity": "sha512-3JCnPI9BJdKpGIk6NtVN7ML3C/J9Ey+WfUfk8WisDxFP7vjYkXwZbNSR/HnxH+Y03wmB6cv4HI8A4kndF0H0pw==", "dev": true, "dependencies": { - "@parcel/utils": "2.4.0", + "@parcel/utils": "2.4.1", "nullthrows": "^1.1.1" }, "engines": { @@ -889,9 +889,9 @@ } }, "node_modules/@parcel/hash": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/hash/-/hash-2.4.0.tgz", - "integrity": "sha512-nB+wYNUhe6+G8M7vQhdeFXtpYJYwJgBHOPZ7Hd9O2jdlamWjDbw0t/u1dJbYvGJ8ZDtLDwiItawQVpuVdskQ9g==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/hash/-/hash-2.4.1.tgz", + "integrity": "sha512-Ch1kkFPedef3geapU+XYmAdZY29u3eQXn/twMjowAKkWCmj6wZ+muUgBmOO2uCfK3xys7GycI8jYZcAbF5DVLg==", "dev": true, "dependencies": { "detect-libc": "^1.0.3", @@ -906,13 +906,13 @@ } }, "node_modules/@parcel/logger": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/logger/-/logger-2.4.0.tgz", - "integrity": "sha512-DqfU0Zcs/0a7VBk+MsjJ80C66w4kM9EbkO3G12NIyEjNeG50ayW2CE9rUuJ91JaM9j0NFM1P82eyLpQPFFaVPw==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/logger/-/logger-2.4.1.tgz", + "integrity": "sha512-wm7FoKY+1dyo+Dd7Z4b0d6hmpgRBWfZwCoZSSyhgbG96Ty68/oo3m7oEMXPfry8IVGIhShmWKDp4py44PH3l7w==", "dev": true, "dependencies": { - "@parcel/diagnostic": "2.4.0", - "@parcel/events": "2.4.0" + "@parcel/diagnostic": "2.4.1", + "@parcel/events": "2.4.1" }, "engines": { "node": ">= 12.0.0" @@ -923,9 +923,9 @@ } }, "node_modules/@parcel/markdown-ansi": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/markdown-ansi/-/markdown-ansi-2.4.0.tgz", - "integrity": "sha512-gPUP1xikxHiu2kFyPy35pfuVkFgAmcywO8YDQj7iYcB+k7l4QPpIYFYGXn2QADV4faf66ncMeTD4uYV8c0GqjQ==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/markdown-ansi/-/markdown-ansi-2.4.1.tgz", + "integrity": "sha512-BkWhzbKQhTQ9lS96ZMMG0KyXSJBFdNeBVobWrdrrwcFlNER0nt2m6fdF7Hfpf1TqFhM4tT+GNFtON7ybL53RiQ==", "dev": true, "dependencies": { "chalk": "^4.1.0" @@ -939,18 +939,18 @@ } }, "node_modules/@parcel/namer-default": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/namer-default/-/namer-default-2.4.0.tgz", - "integrity": "sha512-DfL+Gx0Tyoa0vsgRpNybXjuKbWNw8MTVpy7Dk7r0btfVsn1jy3SSwlxH4USf76gb00/pK6XBsMp9zn7Z8ePREQ==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/namer-default/-/namer-default-2.4.1.tgz", + "integrity": "sha512-a/Xulfia7JJP6Cw/D6Wq5xX6IAKVKMRPEYtU2wB8vKuwC/et6kXi+0bFVeCLnTjDzVtsjDdyOEwfRC4yiEy3BA==", "dev": true, "dependencies": { - "@parcel/diagnostic": "2.4.0", - "@parcel/plugin": "2.4.0", + "@parcel/diagnostic": "2.4.1", + "@parcel/plugin": "2.4.1", "nullthrows": "^1.1.1" }, "engines": { "node": ">= 12.0.0", - "parcel": "^2.4.0" + "parcel": "^2.4.1" }, "funding": { "type": "opencollective", @@ -958,13 +958,13 @@ } }, "node_modules/@parcel/node-resolver-core": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/node-resolver-core/-/node-resolver-core-2.4.0.tgz", - "integrity": "sha512-qiN97XcfW2fYNoYuVEhNKuVPEJKj5ONQl0fqr/NEMmYvWz3bVKjgiXNJwW558elZvCI08gEbdxgyThpuFFQeKQ==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/node-resolver-core/-/node-resolver-core-2.4.1.tgz", + "integrity": "sha512-CvCADj3l4o5USqz/ZCaqbK8gdAQK63q94oSa0KnP6hrcDI/gDyf5Bk4+3cD4kSI+ByuN6aFLAYBS2nHBh5O/MQ==", "dev": true, "dependencies": { - "@parcel/diagnostic": "2.4.0", - "@parcel/utils": "2.4.0", + "@parcel/diagnostic": "2.4.1", + "@parcel/utils": "2.4.1", "nullthrows": "^1.1.1" }, "engines": { @@ -976,22 +976,22 @@ } }, "node_modules/@parcel/optimizer-css": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/optimizer-css/-/optimizer-css-2.4.0.tgz", - "integrity": "sha512-LQmjjOGsHEHKTJqfHR2eJyhWhLXvHP0uOAU+qopBttYYlB2J/vMK9RYAye5cyAb8bQmV8wAdi2mq9rnt7FMSPw==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/optimizer-css/-/optimizer-css-2.4.1.tgz", + "integrity": "sha512-+1CxZ43aoAUF8Hj2wLPK4d+TzdJlgYidXJ19Qwlh6XdQs8OeFGBAzIsUBFSr8+XCugXmnTkjYK94nX04Z2FhtQ==", "dev": true, "dependencies": { - "@parcel/css": "^1.7.2", - "@parcel/diagnostic": "2.4.0", - "@parcel/plugin": "2.4.0", + "@parcel/css": "^1.7.4", + "@parcel/diagnostic": "2.4.1", + "@parcel/plugin": "2.4.1", "@parcel/source-map": "^2.0.0", - "@parcel/utils": "2.4.0", + "@parcel/utils": "2.4.1", "browserslist": "^4.6.6", "nullthrows": "^1.1.1" }, "engines": { "node": ">= 12.0.0", - "parcel": "^2.4.0" + "parcel": "^2.4.1" }, "funding": { "type": "opencollective", @@ -999,12 +999,12 @@ } }, "node_modules/@parcel/optimizer-htmlnano": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/optimizer-htmlnano/-/optimizer-htmlnano-2.4.0.tgz", - "integrity": "sha512-02EbeElLgNOAYhGU7fFBahpoKrX5G/yzahpaoKB/ypScM4roSsAMBkGcluboR5L10YRsvfvJEpxvfGyDA3tPmw==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/optimizer-htmlnano/-/optimizer-htmlnano-2.4.1.tgz", + "integrity": "sha512-JkykHZcBS92iggT7GHuJJd+MDIc7BMAG0xxTJIY9KzzcxGNYsY8P3LedGVTL0/X8tkdlYQSGNLkTCntP0/62cw==", "dev": true, "dependencies": { - "@parcel/plugin": "2.4.0", + "@parcel/plugin": "2.4.1", "htmlnano": "^2.0.0", "nullthrows": "^1.1.1", "posthtml": "^0.16.5", @@ -1012,7 +1012,7 @@ }, "engines": { "node": ">= 12.0.0", - "parcel": "^2.4.0" + "parcel": "^2.4.1" }, "funding": { "type": "opencollective", @@ -1020,20 +1020,20 @@ } }, "node_modules/@parcel/optimizer-image": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/optimizer-image/-/optimizer-image-2.4.0.tgz", - "integrity": "sha512-Q4onaBMPkDyYxPzrb8ytBUftaQZFepj9dSUgq+ETuHDzkgia0tomDPfCqrw6ld0qvYyANzXTP5+LC4g0i5yh+A==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/optimizer-image/-/optimizer-image-2.4.1.tgz", + "integrity": "sha512-cv03Ta1FWuF75o9DJLuk1eYk1ULSdSbSkriQUAzc4InKW1bJH6gJasMZSTBsAg2Oz1TWqiDyiy5D/6i/UPoBJg==", "dev": true, "dependencies": { - "@parcel/diagnostic": "2.4.0", - "@parcel/plugin": "2.4.0", - "@parcel/utils": "2.4.0", - "@parcel/workers": "2.4.0", + "@parcel/diagnostic": "2.4.1", + "@parcel/plugin": "2.4.1", + "@parcel/utils": "2.4.1", + "@parcel/workers": "2.4.1", "detect-libc": "^1.0.3" }, "engines": { "node": ">= 12.0.0", - "parcel": "^2.4.0" + "parcel": "^2.4.1" }, "funding": { "type": "opencollective", @@ -1041,19 +1041,19 @@ } }, "node_modules/@parcel/optimizer-svgo": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/optimizer-svgo/-/optimizer-svgo-2.4.0.tgz", - "integrity": "sha512-mwvGuCqVuNCAuMlp2maFE/Uz9ud1T1AuX0f6cCRczjFYiwZuIr/0iDdfFzSziOkVo1MRAGAZNa0dRR/UzCZtVg==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/optimizer-svgo/-/optimizer-svgo-2.4.1.tgz", + "integrity": "sha512-sOiofvHXjwJDu0NnTO8gGKDv0BztykVczfJdcedYmj207uU71JG1uODZvhyY4uiw1eRqmZnIXELZIftvYnZnDA==", "dev": true, "dependencies": { - "@parcel/diagnostic": "2.4.0", - "@parcel/plugin": "2.4.0", - "@parcel/utils": "2.4.0", + "@parcel/diagnostic": "2.4.1", + "@parcel/plugin": "2.4.1", + "@parcel/utils": "2.4.1", "svgo": "^2.4.0" }, "engines": { "node": ">= 12.0.0", - "parcel": "^2.4.0" + "parcel": "^2.4.1" }, "funding": { "type": "opencollective", @@ -1061,21 +1061,21 @@ } }, "node_modules/@parcel/optimizer-terser": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/optimizer-terser/-/optimizer-terser-2.4.0.tgz", - "integrity": "sha512-PdCgRgXNSY6R1HTV9VG2MHp1CgUbP5pslCyxvlbUmQAS6bvEpMOpn3qSd+U28o7mGE/qXIhvpDyi808sb+MEcg==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/optimizer-terser/-/optimizer-terser-2.4.1.tgz", + "integrity": "sha512-naRdp6gApWHUI1FCBZEJs9NzNngjZx8hRhIHeQtTxWpc2Mu8cVzxbVHNAwUj10nW3iOYmxyj4wleOArl8xpVCQ==", "dev": true, "dependencies": { - "@parcel/diagnostic": "2.4.0", - "@parcel/plugin": "2.4.0", + "@parcel/diagnostic": "2.4.1", + "@parcel/plugin": "2.4.1", "@parcel/source-map": "^2.0.0", - "@parcel/utils": "2.4.0", + "@parcel/utils": "2.4.1", "nullthrows": "^1.1.1", "terser": "^5.2.0" }, "engines": { "node": ">= 12.0.0", - "parcel": "^2.4.0" + "parcel": "^2.4.1" }, "funding": { "type": "opencollective", @@ -1083,17 +1083,17 @@ } }, "node_modules/@parcel/package-manager": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/package-manager/-/package-manager-2.4.0.tgz", - "integrity": "sha512-21AEfAQnZbHRVViTn7QsPGe/CiGaFaDUH5f0m8qVC7fDjjhC8LM8blkqU72goaO9FbaLMadtEf2txhzly7h/bg==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/package-manager/-/package-manager-2.4.1.tgz", + "integrity": "sha512-JUUinm4U3hy4epHl9A389xb+BGiFR8n9+qw3Z4UDfS1te43sh8+0virBGcnai/G7mlr5/vHW+l9xulc7WQaY6w==", "dev": true, "dependencies": { - "@parcel/diagnostic": "2.4.0", - "@parcel/fs": "2.4.0", - "@parcel/logger": "2.4.0", - "@parcel/types": "2.4.0", - "@parcel/utils": "2.4.0", - "@parcel/workers": "2.4.0", + "@parcel/diagnostic": "2.4.1", + "@parcel/fs": "2.4.1", + "@parcel/logger": "2.4.1", + "@parcel/types": "2.4.1", + "@parcel/utils": "2.4.1", + "@parcel/workers": "2.4.1", "semver": "^5.7.1" }, "engines": { @@ -1104,23 +1104,23 @@ "url": "https://opencollective.com/parcel" }, "peerDependencies": { - "@parcel/core": "^2.4.0" + "@parcel/core": "^2.4.1" } }, "node_modules/@parcel/packager-css": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/packager-css/-/packager-css-2.4.0.tgz", - "integrity": "sha512-LmPDWzkXi60Oy3WrPF0jPKQxeTwW5hmNBgrcXJMHSu+VcXdaQZNzNxVzhnZkJUbDd2z9vAUrUGzdLh8TquC8iQ==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/packager-css/-/packager-css-2.4.1.tgz", + "integrity": "sha512-COx6RvHbpZ3DzuAgB/XvLLR/luxn9kYhqdFrnmIlYBh4B9atfXyr4rKDlWj1W/r2R72R6LHM35KhkwUATmrC/w==", "dev": true, "dependencies": { - "@parcel/plugin": "2.4.0", + "@parcel/plugin": "2.4.1", "@parcel/source-map": "^2.0.0", - "@parcel/utils": "2.4.0", + "@parcel/utils": "2.4.1", "nullthrows": "^1.1.1" }, "engines": { "node": ">= 12.0.0", - "parcel": "^2.4.0" + "parcel": "^2.4.1" }, "funding": { "type": "opencollective", @@ -1128,20 +1128,20 @@ } }, "node_modules/@parcel/packager-html": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/packager-html/-/packager-html-2.4.0.tgz", - "integrity": "sha512-OPMIQ1uHYQFpRPrsmm5BqONbAyzjlhVsPRAzHlcBrglG4BTUeOR2ow4MUKblHmVVqc3QHnfZG4nHHtFkeuNQ3A==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/packager-html/-/packager-html-2.4.1.tgz", + "integrity": "sha512-F5/PmWKoz8JhToufnp3u+NQ4LUoVkabzIJYHyQrM858XVmNbMInRfiTYxtgCBa2ARm2BTPhToh7N01OEyFCOhA==", "dev": true, "dependencies": { - "@parcel/plugin": "2.4.0", - "@parcel/types": "2.4.0", - "@parcel/utils": "2.4.0", + "@parcel/plugin": "2.4.1", + "@parcel/types": "2.4.1", + "@parcel/utils": "2.4.1", "nullthrows": "^1.1.1", "posthtml": "^0.16.5" }, "engines": { "node": ">= 12.0.0", - "parcel": "^2.4.0" + "parcel": "^2.4.1" }, "funding": { "type": "opencollective", @@ -1149,22 +1149,22 @@ } }, "node_modules/@parcel/packager-js": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/packager-js/-/packager-js-2.4.0.tgz", - "integrity": "sha512-cfslIH43CJFgBS9PmdFaSnbInMCoejsFCnxtJa2GeUpjCXSfelPRp0OPx7m8n+fap4czftPhoxBALeDUElOZGQ==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/packager-js/-/packager-js-2.4.1.tgz", + "integrity": "sha512-broWBUQisJLF5ThFtnl/asypuLMlMBwFPBTr8Ho9FYlL6W4wUzIymu7eOcuDljstmbD6luNVGMdCBYqt3IhHmw==", "dev": true, "dependencies": { - "@parcel/diagnostic": "2.4.0", - "@parcel/hash": "2.4.0", - "@parcel/plugin": "2.4.0", + "@parcel/diagnostic": "2.4.1", + "@parcel/hash": "2.4.1", + "@parcel/plugin": "2.4.1", "@parcel/source-map": "^2.0.0", - "@parcel/utils": "2.4.0", + "@parcel/utils": "2.4.1", "globals": "^13.2.0", "nullthrows": "^1.1.1" }, "engines": { "node": ">= 12.0.0", - "parcel": "^2.4.0" + "parcel": "^2.4.1" }, "funding": { "type": "opencollective", @@ -1172,16 +1172,16 @@ } }, "node_modules/@parcel/packager-raw": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/packager-raw/-/packager-raw-2.4.0.tgz", - "integrity": "sha512-SFfw7chMFITj3J26ZVDJxbO6xwtPFcFBm1js8cwWMgzwuwS6CEc43k5+Abj+2/EqHU9kNJU9eWV5vT6lQwf3HA==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/packager-raw/-/packager-raw-2.4.1.tgz", + "integrity": "sha512-4lCY3TjiYaZyRIqshNF21i6XkQ5PJyr+ahhK4O2IymuYuD8/wGH2amTZqKPpGLuiF3j1HskRRUNv1ekpvExJ8w==", "dev": true, "dependencies": { - "@parcel/plugin": "2.4.0" + "@parcel/plugin": "2.4.1" }, "engines": { "node": ">= 12.0.0", - "parcel": "^2.4.0" + "parcel": "^2.4.1" }, "funding": { "type": "opencollective", @@ -1189,19 +1189,19 @@ } }, "node_modules/@parcel/packager-svg": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/packager-svg/-/packager-svg-2.4.0.tgz", - "integrity": "sha512-DwkgrdLEQop+tu9Ocr1ZaadmpsbSgVruJPr80xq1LaB0Jiwrl9HjHStMNH1laNFueK1yydxhnj9C2JQfW28qag==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/packager-svg/-/packager-svg-2.4.1.tgz", + "integrity": "sha512-V7GW/dgJPqXHReTzwpLcNEdyT5WWveYOW1MfxvKgOOK1ENk6oPgXL0FUdm5IHzqlK1bbwF5hzSQs2vaJMv7rPg==", "dev": true, "dependencies": { - "@parcel/plugin": "2.4.0", - "@parcel/types": "2.4.0", - "@parcel/utils": "2.4.0", + "@parcel/plugin": "2.4.1", + "@parcel/types": "2.4.1", + "@parcel/utils": "2.4.1", "posthtml": "^0.16.4" }, "engines": { "node": ">= 12.0.0", - "parcel": "^2.4.0" + "parcel": "^2.4.1" }, "funding": { "type": "opencollective", @@ -1209,12 +1209,12 @@ } }, "node_modules/@parcel/plugin": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/plugin/-/plugin-2.4.0.tgz", - "integrity": "sha512-ehFUAL2+h27Lv+cYbbXA74UGy8C+eglUjcpvASOOjVRFuD6poMAMliKkKAXBhQaFx/Rvhz27A2PIPv9lL2i4UQ==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/plugin/-/plugin-2.4.1.tgz", + "integrity": "sha512-EJzNhwNWYuSpIPRlG1U2hKcovq/RsVie4Os1z51/e2dcCto/uAoJOMoWYYsCxtjkJ7BjFYyQ7fcZRKM9DEr6gQ==", "dev": true, "dependencies": { - "@parcel/types": "2.4.0" + "@parcel/types": "2.4.1" }, "engines": { "node": ">= 12.0.0" @@ -1225,20 +1225,20 @@ } }, "node_modules/@parcel/reporter-cli": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/reporter-cli/-/reporter-cli-2.4.0.tgz", - "integrity": "sha512-Q9bIFMaGvQgypCDxdMEKOwrJzIHAXScKkuFsqTHnUL6mmH3Mo2CoEGAq/wpMXuPhXRn1dPJcHgTNDwZ2fSzz0A==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/reporter-cli/-/reporter-cli-2.4.1.tgz", + "integrity": "sha512-99v/dSQ6wYmfpjmBxbsuBoxPWu9bm7PRxDDJxiVapbbym50bWYwVmMEHj6mYnK151YbMssV0garrSs1yYQEvqw==", "dev": true, "dependencies": { - "@parcel/plugin": "2.4.0", - "@parcel/types": "2.4.0", - "@parcel/utils": "2.4.0", + "@parcel/plugin": "2.4.1", + "@parcel/types": "2.4.1", + "@parcel/utils": "2.4.1", "chalk": "^4.1.0", "term-size": "^2.2.1" }, "engines": { "node": ">= 12.0.0", - "parcel": "^2.4.0" + "parcel": "^2.4.1" }, "funding": { "type": "opencollective", @@ -1246,17 +1246,17 @@ } }, "node_modules/@parcel/reporter-dev-server": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/reporter-dev-server/-/reporter-dev-server-2.4.0.tgz", - "integrity": "sha512-24h++wevs7XYuX4dKa4PUfLSstvn3g7udajFv6CeQoME+dR25RL/wH/2LUbhV5ilgXXab76rWIndSqp78xHxPA==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/reporter-dev-server/-/reporter-dev-server-2.4.1.tgz", + "integrity": "sha512-tRz1LHiudDhujBC3kJ3Qm0Wnbo3p3SpE6fjyCFRhdv2PJnEufNTTwzEUoa7lYZACwFVQUtrh6F7nMXFw6ynrsQ==", "dev": true, "dependencies": { - "@parcel/plugin": "2.4.0", - "@parcel/utils": "2.4.0" + "@parcel/plugin": "2.4.1", + "@parcel/utils": "2.4.1" }, "engines": { "node": ">= 12.0.0", - "parcel": "^2.4.0" + "parcel": "^2.4.1" }, "funding": { "type": "opencollective", @@ -1264,17 +1264,17 @@ } }, "node_modules/@parcel/resolver-default": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/resolver-default/-/resolver-default-2.4.0.tgz", - "integrity": "sha512-K7pIIFmGm1hjg/7Mzkg99i8tfCClKfBUTuc2R5j8cdr2n0mCAi4/f2mFf5svLrb5XZrnDgoQ05tHKklLEfUDUw==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/resolver-default/-/resolver-default-2.4.1.tgz", + "integrity": "sha512-iJRt1+7lk0n7+wb+S/tVyiObbaiYP1YQGKRsTE8y4Kgp4/OPukdUHGFJwzbojWa0HnyoXm3zEgelVz7cHl47fQ==", "dev": true, "dependencies": { - "@parcel/node-resolver-core": "2.4.0", - "@parcel/plugin": "2.4.0" + "@parcel/node-resolver-core": "2.4.1", + "@parcel/plugin": "2.4.1" }, "engines": { "node": ">= 12.0.0", - "parcel": "^2.4.0" + "parcel": "^2.4.1" }, "funding": { "type": "opencollective", @@ -1282,17 +1282,17 @@ } }, "node_modules/@parcel/runtime-browser-hmr": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/runtime-browser-hmr/-/runtime-browser-hmr-2.4.0.tgz", - "integrity": "sha512-swPFtvxGoCA9LEjU/pHPNjxG1l0fte8447zXwRN/AaYrtjNu9Ww117OSKCyvCnE143E79jZOFStodTQGFuH+9A==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/runtime-browser-hmr/-/runtime-browser-hmr-2.4.1.tgz", + "integrity": "sha512-INsr78Kn0OuwMdXHCzw7v6l3Gf/UBTYtX7N7JNDOIBEFFkuZQiFWyAOI2P/DvMm8qeqcsrKliBO5Xty/a2Ivaw==", "dev": true, "dependencies": { - "@parcel/plugin": "2.4.0", - "@parcel/utils": "2.4.0" + "@parcel/plugin": "2.4.1", + "@parcel/utils": "2.4.1" }, "engines": { "node": ">= 12.0.0", - "parcel": "^2.4.0" + "parcel": "^2.4.1" }, "funding": { "type": "opencollective", @@ -1300,18 +1300,18 @@ } }, "node_modules/@parcel/runtime-js": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/runtime-js/-/runtime-js-2.4.0.tgz", - "integrity": "sha512-67OOvmkDdtmgzZVP/EyAzoXhJ/Ug3LUVUt7idg9arun5rdJptqEb3Um3wmH0zjcNa9jMbJt7Kl5x1wA8dJgPYg==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/runtime-js/-/runtime-js-2.4.1.tgz", + "integrity": "sha512-/EXwRpo+GPvWgN5yD0hjjt84Gm6QWp757dqOOzTG5R2rm1WU+g1a+zJJB1zXkxhu9lleQs44D1jEffzhh2Voyw==", "dev": true, "dependencies": { - "@parcel/plugin": "2.4.0", - "@parcel/utils": "2.4.0", + "@parcel/plugin": "2.4.1", + "@parcel/utils": "2.4.1", "nullthrows": "^1.1.1" }, "engines": { "node": ">= 12.0.0", - "parcel": "^2.4.0" + "parcel": "^2.4.1" }, "funding": { "type": "opencollective", @@ -1319,18 +1319,18 @@ } }, "node_modules/@parcel/runtime-react-refresh": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/runtime-react-refresh/-/runtime-react-refresh-2.4.0.tgz", - "integrity": "sha512-flnr+bf06lMZPbXZZLLaFNrPHvYpfuXTVovEghyUW46qLVpaHj33dpsU/LqZplIuHgBp2ibgrKhr/hY9ell68w==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/runtime-react-refresh/-/runtime-react-refresh-2.4.1.tgz", + "integrity": "sha512-a4GBQ/fO7Mklh1M1G2JVpJBPbZD7YXUPAzh9Y4vpCf0ouTHBRMc8ew4CyKPJIrrTly5P42tFWnD3P4FVNKwHOQ==", "dev": true, "dependencies": { - "@parcel/plugin": "2.4.0", - "@parcel/utils": "2.4.0", + "@parcel/plugin": "2.4.1", + "@parcel/utils": "2.4.1", "react-refresh": "^0.9.0" }, "engines": { "node": ">= 12.0.0", - "parcel": "^2.4.0" + "parcel": "^2.4.1" }, "funding": { "type": "opencollective", @@ -1338,18 +1338,18 @@ } }, "node_modules/@parcel/runtime-service-worker": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/runtime-service-worker/-/runtime-service-worker-2.4.0.tgz", - "integrity": "sha512-RgM5QUqW22WzstW03CtV+Oih8VGVuwsf94Cc4hLouU2EAD0NUJgATWbFocZVTZIBTKELAWh2gjpSQDdnL4Ur+A==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/runtime-service-worker/-/runtime-service-worker-2.4.1.tgz", + "integrity": "sha512-WtMKSiyQ0kF78rBw0XIx7n65mMb+6GBx+5m49r1aVZzeZEOSynpjJzJvqo7rxVmA7qTDkD2bko7BH41iScsEaw==", "dev": true, "dependencies": { - "@parcel/plugin": "2.4.0", - "@parcel/utils": "2.4.0", + "@parcel/plugin": "2.4.1", + "@parcel/utils": "2.4.1", "nullthrows": "^1.1.1" }, "engines": { "node": ">= 12.0.0", - "parcel": "^2.4.0" + "parcel": "^2.4.1" }, "funding": { "type": "opencollective", @@ -1369,15 +1369,15 @@ } }, "node_modules/@parcel/transformer-babel": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/transformer-babel/-/transformer-babel-2.4.0.tgz", - "integrity": "sha512-iWDa7KzJTMP3HNmrYxiYq/S6redk2qminx/9MwmKIN9jzm8mgts2Lj9lOg/t66YaDGky6JAvw4DhB2qW4ni6yQ==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/transformer-babel/-/transformer-babel-2.4.1.tgz", + "integrity": "sha512-S+L14Fdr+S/+hqOi2nqnhuJvBbEJW24KyQeLmdaoMkt7DQLy5zENjGb9U2WYgB0Q96au0vX8NgB6jOnONecnpg==", "dev": true, "dependencies": { - "@parcel/diagnostic": "2.4.0", - "@parcel/plugin": "2.4.0", + "@parcel/diagnostic": "2.4.1", + "@parcel/plugin": "2.4.1", "@parcel/source-map": "^2.0.0", - "@parcel/utils": "2.4.0", + "@parcel/utils": "2.4.1", "browserslist": "^4.6.6", "json5": "^2.2.0", "nullthrows": "^1.1.1", @@ -1385,7 +1385,7 @@ }, "engines": { "node": ">= 12.0.0", - "parcel": "^2.4.0" + "parcel": "^2.4.1" }, "funding": { "type": "opencollective", @@ -1393,22 +1393,22 @@ } }, "node_modules/@parcel/transformer-css": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/transformer-css/-/transformer-css-2.4.0.tgz", - "integrity": "sha512-D2u48LuiQsQvbknABE0wVKFp9r6yCgWrHKEP1J6EJ31c49nXGXDHrpHJJwqq9BvAs/124eBI5mSsehTJyFEMwg==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/transformer-css/-/transformer-css-2.4.1.tgz", + "integrity": "sha512-+6wCc0eEg4ez96Mucp/RjYKyRVN+7HPWPH7axalsQdp88t7wawWoqI2nd2mEw2PxpyuejIsk0ixLzYZ5opZivw==", "dev": true, "dependencies": { - "@parcel/css": "^1.7.2", - "@parcel/diagnostic": "2.4.0", - "@parcel/plugin": "2.4.0", + "@parcel/css": "^1.7.4", + "@parcel/diagnostic": "2.4.1", + "@parcel/plugin": "2.4.1", "@parcel/source-map": "^2.0.0", - "@parcel/utils": "2.4.0", + "@parcel/utils": "2.4.1", "browserslist": "^4.6.6", "nullthrows": "^1.1.1" }, "engines": { "node": ">= 12.0.0", - "parcel": "^2.4.0" + "parcel": "^2.4.1" }, "funding": { "type": "opencollective", @@ -1416,14 +1416,14 @@ } }, "node_modules/@parcel/transformer-html": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/transformer-html/-/transformer-html-2.4.0.tgz", - "integrity": "sha512-2/8X/o5QaCNVPr4wkxLCUub7v/YVvVN2L5yCEcTatNeFhNg/2iz7P2ekfqOaoDCHWZEOBT1VTwPbdBt+TMM71Q==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/transformer-html/-/transformer-html-2.4.1.tgz", + "integrity": "sha512-jyteTWuBA+f5wXn1RmAq3gOnB3yy41c748vARU9uNEXkLB4a7R106w4e5dlTG1DJfk+Tw1okSe1p2BeHoZntAw==", "dev": true, "dependencies": { - "@parcel/diagnostic": "2.4.0", - "@parcel/hash": "2.4.0", - "@parcel/plugin": "2.4.0", + "@parcel/diagnostic": "2.4.1", + "@parcel/hash": "2.4.1", + "@parcel/plugin": "2.4.1", "nullthrows": "^1.1.1", "posthtml": "^0.16.5", "posthtml-parser": "^0.10.1", @@ -1432,7 +1432,7 @@ }, "engines": { "node": ">= 12.0.0", - "parcel": "^2.4.0" + "parcel": "^2.4.1" }, "funding": { "type": "opencollective", @@ -1440,31 +1440,31 @@ } }, "node_modules/@parcel/transformer-image": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/transformer-image/-/transformer-image-2.4.0.tgz", - "integrity": "sha512-JZkQvGGoGiD0AVKLIbAYYUWxepMmUaWZ4XXx71MmS/kA7cUDwTZ0CXq63YnSY1m+DX+ClTuTN8mBlwe2dkcGbA==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/transformer-image/-/transformer-image-2.4.1.tgz", + "integrity": "sha512-pOfgPVe13lMTKdzydjXXNl4bojVMmuQmwm44OZ9cmpwOD3phkZzCtrxgySoV1eRBCOipdQg1O6GGI3za1KNdvw==", "dev": true, "dependencies": { - "@parcel/plugin": "2.4.0", - "@parcel/workers": "2.4.0", + "@parcel/plugin": "2.4.1", + "@parcel/workers": "2.4.1", "nullthrows": "^1.1.1" }, "engines": { "node": ">= 12.0.0", - "parcel": "^2.4.0" + "parcel": "^2.4.1" } }, "node_modules/@parcel/transformer-js": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/transformer-js/-/transformer-js-2.4.0.tgz", - "integrity": "sha512-eeLHFwv3jT3GmIxpLC7B8EXExGK0MFaK91HXljOMh6l8a+GlQYw27MSFQVtoXr0Olx9Uq2uvjXP1+zSsq3LQUQ==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/transformer-js/-/transformer-js-2.4.1.tgz", + "integrity": "sha512-39Y9RUuDk5dc09Z3Pgj8snQd5E8926IqOowdTLKNJr7EcmkwHdinbpI4EqgKnisOwX4NSzxUti1I2DHsP1QZHw==", "dev": true, "dependencies": { - "@parcel/diagnostic": "2.4.0", - "@parcel/plugin": "2.4.0", + "@parcel/diagnostic": "2.4.1", + "@parcel/plugin": "2.4.1", "@parcel/source-map": "^2.0.0", - "@parcel/utils": "2.4.0", - "@parcel/workers": "2.4.0", + "@parcel/utils": "2.4.1", + "@parcel/workers": "2.4.1", "@swc/helpers": "^0.3.6", "browserslist": "^4.6.6", "detect-libc": "^1.0.3", @@ -1474,7 +1474,7 @@ }, "engines": { "node": ">= 12.0.0", - "parcel": "^2.4.0" + "parcel": "^2.4.1" }, "funding": { "type": "opencollective", @@ -1482,17 +1482,17 @@ } }, "node_modules/@parcel/transformer-json": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/transformer-json/-/transformer-json-2.4.0.tgz", - "integrity": "sha512-3nR+d39mbURoXIypDfVCaxpwL65qMV+h8SLD78up2uhaRGklHQfN7GuemR7L+mcVAgNrmwVvZHhyNjdgYwWqqg==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/transformer-json/-/transformer-json-2.4.1.tgz", + "integrity": "sha512-bAwKyWb2/Wm6GS7OpQg1lWgcq+VDBXTKy5oFGX3edbpZFsrb59Ln1v+1jI888zRq4ehDBybhx8WTxPKTJnU+jA==", "dev": true, "dependencies": { - "@parcel/plugin": "2.4.0", + "@parcel/plugin": "2.4.1", "json5": "^2.2.0" }, "engines": { "node": ">= 12.0.0", - "parcel": "^2.4.0" + "parcel": "^2.4.1" }, "funding": { "type": "opencollective", @@ -1500,15 +1500,15 @@ } }, "node_modules/@parcel/transformer-postcss": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/transformer-postcss/-/transformer-postcss-2.4.0.tgz", - "integrity": "sha512-ijIa2x+dbKnJhr7zO5WlXkvuj832fDoGksMBk2DX3u2WMrbh2rqVWPpGFsDhESx7EAy38nUoV/5KUdrNqUmCEA==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/transformer-postcss/-/transformer-postcss-2.4.1.tgz", + "integrity": "sha512-I+jauarY5RlDUcd0zb9CC4GlpA7/+FqNSqCaGrM73aoszh6FNs4GiwD5tgy0pKOEASBZ0fBPmHEG1OBiVBXRGg==", "dev": true, "dependencies": { - "@parcel/diagnostic": "2.4.0", - "@parcel/hash": "2.4.0", - "@parcel/plugin": "2.4.0", - "@parcel/utils": "2.4.0", + "@parcel/diagnostic": "2.4.1", + "@parcel/hash": "2.4.1", + "@parcel/plugin": "2.4.1", + "@parcel/utils": "2.4.1", "clone": "^2.1.1", "nullthrows": "^1.1.1", "postcss-value-parser": "^4.2.0", @@ -1516,7 +1516,7 @@ }, "engines": { "node": ">= 12.0.0", - "parcel": "^2.4.0" + "parcel": "^2.4.1" }, "funding": { "type": "opencollective", @@ -1524,13 +1524,13 @@ } }, "node_modules/@parcel/transformer-posthtml": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/transformer-posthtml/-/transformer-posthtml-2.4.0.tgz", - "integrity": "sha512-xoL3AzgtVeRRAo6bh0AHAYm9bt1jZ+HiH86/7oARj/uJs6Wd8kXK/DZf6fH+F87hj4e7bnjmDDc0GPVK0lPz1w==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/transformer-posthtml/-/transformer-posthtml-2.4.1.tgz", + "integrity": "sha512-DNtS41Sew940vnnqlFS0QK3ZbjQqCGT8JXkvwFojIrdH+3BW/n/9Hrtxj+X/bxrlwZlsRiqiRJ7crXp7TVhx2g==", "dev": true, "dependencies": { - "@parcel/plugin": "2.4.0", - "@parcel/utils": "2.4.0", + "@parcel/plugin": "2.4.1", + "@parcel/utils": "2.4.1", "nullthrows": "^1.1.1", "posthtml": "^0.16.5", "posthtml-parser": "^0.10.1", @@ -1539,7 +1539,7 @@ }, "engines": { "node": ">= 12.0.0", - "parcel": "^2.4.0" + "parcel": "^2.4.1" }, "funding": { "type": "opencollective", @@ -1547,16 +1547,16 @@ } }, "node_modules/@parcel/transformer-raw": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/transformer-raw/-/transformer-raw-2.4.0.tgz", - "integrity": "sha512-fciFbNrzj0kLlDgr6OsI0PUv414rVygDWAsgbCCq4BexDkuemMs9f9FjMctx9B2VZlctE8dTT4RGkuQumTIpUg==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/transformer-raw/-/transformer-raw-2.4.1.tgz", + "integrity": "sha512-0PzdWJSGSTQ522aohymHEnq4GABy0mHSs+LkPZyMfNmX9ZAIyy6XuFJ9dz8nUmP4Nhn8qDvbRjoAYXR3XsGDGQ==", "dev": true, "dependencies": { - "@parcel/plugin": "2.4.0" + "@parcel/plugin": "2.4.1" }, "engines": { "node": ">= 12.0.0", - "parcel": "^2.4.0" + "parcel": "^2.4.1" }, "funding": { "type": "opencollective", @@ -1564,18 +1564,18 @@ } }, "node_modules/@parcel/transformer-react-refresh-wrap": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/transformer-react-refresh-wrap/-/transformer-react-refresh-wrap-2.4.0.tgz", - "integrity": "sha512-9+f6sGOWkf0jyUQ1CuFWk+04Mq3KTOCU9kRiwCHX1YdUCv5uki6r9XUSpqiYodrV+L6w9CCwLvGMLCDHxtCxMg==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/transformer-react-refresh-wrap/-/transformer-react-refresh-wrap-2.4.1.tgz", + "integrity": "sha512-zF6pzj/BwSiD1jA/BHDCEJnKSIDekjblU+OWp1WpSjA1uYkJORuZ5knLcq6mXOQ8M2NCbOXosc1ru8071i8sYA==", "dev": true, "dependencies": { - "@parcel/plugin": "2.4.0", - "@parcel/utils": "2.4.0", + "@parcel/plugin": "2.4.1", + "@parcel/utils": "2.4.1", "react-refresh": "^0.9.0" }, "engines": { "node": ">= 12.0.0", - "parcel": "^2.4.0" + "parcel": "^2.4.1" }, "funding": { "type": "opencollective", @@ -1583,18 +1583,18 @@ } }, "node_modules/@parcel/transformer-sass": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/transformer-sass/-/transformer-sass-2.4.0.tgz", - "integrity": "sha512-PBQEyAKRx/G7h7prTVE1a5p+CG0mmnS/32HIp3Odkha6l7kHyKMIsyvnkS89xJooq4a/quJyDCam6bbG/P9KZg==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/transformer-sass/-/transformer-sass-2.4.1.tgz", + "integrity": "sha512-MRvQw2RYARF/jzxlgg3TE1a1cEatWIoVDdODvgWSa/SBPobM1R3/g6Fs5UN7CcXi8EvVMZszCrwrQ+Mnw1KAFA==", "dev": true, "dependencies": { - "@parcel/plugin": "2.4.0", + "@parcel/plugin": "2.4.1", "@parcel/source-map": "^2.0.0", "sass": "^1.38.0" }, "engines": { "node": ">= 12.0.0", - "parcel": "^2.4.0" + "parcel": "^2.4.1" }, "funding": { "type": "opencollective", @@ -1602,14 +1602,14 @@ } }, "node_modules/@parcel/transformer-svg": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/transformer-svg/-/transformer-svg-2.4.0.tgz", - "integrity": "sha512-D+yzVtSxtQML3d26fd/g4E/xYW68+OMbMUVLXORtoYMU42fnXQkJP6jGOdqy8Td+WORNY7EwVtQnESLwhBmolw==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/transformer-svg/-/transformer-svg-2.4.1.tgz", + "integrity": "sha512-E0XdXsZOnP7g9zvJskfvXeIHx9pKjPHtLKo/txmpjW1eXOmsFcRMVy6l4pFh+kBciAgiZOI6o1pVHt+Uf7ia/g==", "dev": true, "dependencies": { - "@parcel/diagnostic": "2.4.0", - "@parcel/hash": "2.4.0", - "@parcel/plugin": "2.4.0", + "@parcel/diagnostic": "2.4.1", + "@parcel/hash": "2.4.1", + "@parcel/plugin": "2.4.1", "nullthrows": "^1.1.1", "posthtml": "^0.16.5", "posthtml-parser": "^0.10.1", @@ -1618,7 +1618,7 @@ }, "engines": { "node": ">= 12.0.0", - "parcel": "^2.4.0" + "parcel": "^2.4.1" }, "funding": { "type": "opencollective", @@ -1626,31 +1626,31 @@ } }, "node_modules/@parcel/types": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/types/-/types-2.4.0.tgz", - "integrity": "sha512-nysGIbBEnp+7R+tKTysdcTFOZDTCodsiXFeAhYQa5bhiOnG1l9gzhxQnE2OsdsgvMm40IOsgKprqvM/DbdLfnQ==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/types/-/types-2.4.1.tgz", + "integrity": "sha512-YqkiyGS8oiD89Z2lJP7sbjn0F0wlSJMAuqgqf7obeKj0zmZJS7n2xK0uUEuIlUO+Cbqgl0kCGsUSjuT8xcEqjg==", "dev": true, "dependencies": { - "@parcel/cache": "2.4.0", - "@parcel/diagnostic": "2.4.0", - "@parcel/fs": "2.4.0", - "@parcel/package-manager": "2.4.0", + "@parcel/cache": "2.4.1", + "@parcel/diagnostic": "2.4.1", + "@parcel/fs": "2.4.1", + "@parcel/package-manager": "2.4.1", "@parcel/source-map": "^2.0.0", - "@parcel/workers": "2.4.0", + "@parcel/workers": "2.4.1", "utility-types": "^3.10.0" } }, "node_modules/@parcel/utils": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/utils/-/utils-2.4.0.tgz", - "integrity": "sha512-sdNo+mZqDZT8LJYB6WWRKa4wFVZcK6Zb5Jh6Du76QvXXwHbPIQNZgJBb6gd/Rbk4GLOp2tW7MnBfq6zP9E9E2g==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/utils/-/utils-2.4.1.tgz", + "integrity": "sha512-hmbrnPtFAfMT6s9FMMIVlIzCwEFX/+byB67GoJmSCAMRmj6RMu4a6xKlv2FdzkTKJV2ucg8vxAcua0MQ/q8rkQ==", "dev": true, "dependencies": { - "@parcel/codeframe": "2.4.0", - "@parcel/diagnostic": "2.4.0", - "@parcel/hash": "2.4.0", - "@parcel/logger": "2.4.0", - "@parcel/markdown-ansi": "2.4.0", + "@parcel/codeframe": "2.4.1", + "@parcel/diagnostic": "2.4.1", + "@parcel/hash": "2.4.1", + "@parcel/logger": "2.4.1", + "@parcel/markdown-ansi": "2.4.1", "@parcel/source-map": "^2.0.0", "chalk": "^4.1.0" }, @@ -1681,15 +1681,15 @@ } }, "node_modules/@parcel/workers": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/workers/-/workers-2.4.0.tgz", - "integrity": "sha512-eSFyvEoXXPgFzQfKIlpkUjpHfIbezUCRFTPKyJAKCxvU5DSXOpb1kz5vDESWQ4qTZXKnrKvxS1PPWN6bam9z0g==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/workers/-/workers-2.4.1.tgz", + "integrity": "sha512-EYujbJOblFqIt2NGQ+baIYTuavJqbhy84IfZ3j0jmACeKO5Ew1EHXZyl9LJgWHKaIPZsnvnbxw2mDOF05K65xQ==", "dev": true, "dependencies": { - "@parcel/diagnostic": "2.4.0", - "@parcel/logger": "2.4.0", - "@parcel/types": "2.4.0", - "@parcel/utils": "2.4.0", + "@parcel/diagnostic": "2.4.1", + "@parcel/logger": "2.4.1", + "@parcel/types": "2.4.1", + "@parcel/utils": "2.4.1", "chrome-trace-event": "^1.0.2", "nullthrows": "^1.1.1" }, @@ -1701,7 +1701,7 @@ "url": "https://opencollective.com/parcel" }, "peerDependencies": { - "@parcel/core": "^2.4.0" + "@parcel/core": "^2.4.1" } }, "node_modules/@popperjs/core": { @@ -2399,10 +2399,28 @@ "dev": true }, "node_modules/builtins": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", - "integrity": "sha1-y5T662HIaWRR2zZTThQi+U8K7og=", - "dev": true + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.0.tgz", + "integrity": "sha512-aizhtbxgT1Udg0Fj6GssXshAVK+nxbtCV+1OtTrMNy67jffDFBY6CUBAkhO4owbleAx6fdbnWdpsmmcXydbzNw==", + "dev": true, + "dependencies": { + "semver": "^7.0.0" + } + }, + "node_modules/builtins/node_modules/semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } }, "node_modules/cacache": { "version": "16.0.3", @@ -2434,9 +2452,9 @@ } }, "node_modules/cacache/node_modules/lru-cache": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.7.1.tgz", - "integrity": "sha512-cRffBiTW8s73eH4aTXqBcTLU0xQnwGV3/imttRHGWCrbergmnK4D6JXQd8qin5z43HnDwRI+o7mVW0LEB+tpAw==", + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.7.3.tgz", + "integrity": "sha512-WY9wjJNQt9+PZilnLbuFKM+SwDull9+6IAguOrarOMoOHTcJ9GnXSO11+Gw6c7xtDkBkthR57OZMtZKYr+1CEw==", "dev": true, "engines": { "node": ">=12" @@ -2500,9 +2518,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001322", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001322.tgz", - "integrity": "sha512-neRmrmIrCGuMnxGSoh+x7zYtQFFgnSY2jaomjU56sCkTA6JINqQrxutF459JpWcWRajvoyn95sOXq4Pqrnyjew==", + "version": "1.0.30001323", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001323.tgz", + "integrity": "sha512-e4BF2RlCVELKx8+RmklSEIVub1TWrmdhvA5kEUueummz1XyySW0DVk+3x9HyhU9MuWTa2BhqLgEuEmUwASAdCA==", "funding": [ { "type": "opencollective", @@ -2894,9 +2912,9 @@ } }, "node_modules/css-what": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.0.1.tgz", - "integrity": "sha512-z93ZGFLNc6yaoXAmVhqoSIb+BduplteCt1fepvwhBUQK6MNE4g6fgjpuZKJKp0esUe+vXWlIkwZZjNWoOKw0ZA==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", "dev": true, "engines": { "node": ">= 6" @@ -3263,9 +3281,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.98", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.98.tgz", - "integrity": "sha512-1IdsuSAnIGVxoYT1LkcUFb9MfjRxdHhCU9qiaDzhl1XvYgK9c8E2O9aJOPgGMQ68CSI8NxmLwrYhjvGauT8yuw==", + "version": "1.4.103", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.103.tgz", + "integrity": "sha512-c/uKWR1Z/W30Wy/sx3dkZoj4BijbXX85QKWu9jJfjho3LBAXNEGAEW3oWiGb+dotA6C6BzCTxL2/aLes7jlUeg==", "dev": true }, "node_modules/emoji-regex": { @@ -5138,9 +5156,9 @@ } }, "node_modules/make-fetch-happen": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.1.0.tgz", - "integrity": "sha512-HeP4QlkadP/Op+hE+Une1070kcyN85FshQObku3/rmzRh4zDcKXA19d2L3AQR6UoaX3uZmhSOpTLH15b1vOFvQ==", + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.1.1.tgz", + "integrity": "sha512-3/mCljDQNjmrP7kl0vhS5WVlV+TvSKoZaFhdiYV7MOijEnrhrjaVnqbp/EY/7S+fhUB2KpH7j8c1iRsIOs+kjw==", "dev": true, "dependencies": { "agentkeepalive": "^4.2.1", @@ -5165,9 +5183,9 @@ } }, "node_modules/make-fetch-happen/node_modules/lru-cache": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.7.1.tgz", - "integrity": "sha512-cRffBiTW8s73eH4aTXqBcTLU0xQnwGV3/imttRHGWCrbergmnK4D6JXQd8qin5z43HnDwRI+o7mVW0LEB+tpAw==", + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.7.3.tgz", + "integrity": "sha512-WY9wjJNQt9+PZilnLbuFKM+SwDull9+6IAguOrarOMoOHTcJ9GnXSO11+Gw6c7xtDkBkthR57OZMtZKYr+1CEw==", "dev": true, "engines": { "node": ">=12" @@ -5474,9 +5492,9 @@ } }, "node_modules/node-gyp-build": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.3.0.tgz", - "integrity": "sha512-iWjXZvmboq0ja1pUGULQBexmxq8CV4xBhX7VDOTbL7ZR4FOowwY/VOtRxBN/yKxmdGoIp4j5ysNT4u3S2pDQ3Q==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.4.0.tgz", + "integrity": "sha512-amJnQCcgtRVw9SvoebO3BKGESClrfXGCUTX9hSn1OuGQTQBOZmVd0Z0OlecpuRksKvbsUqALE8jls/ErClAPuQ==", "dev": true, "bin": { "node-gyp-build": "bin.js", @@ -5548,9 +5566,9 @@ } }, "node_modules/normalize-package-data/node_modules/hosted-git-info/node_modules/lru-cache": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.7.1.tgz", - "integrity": "sha512-cRffBiTW8s73eH4aTXqBcTLU0xQnwGV3/imttRHGWCrbergmnK4D6JXQd8qin5z43HnDwRI+o7mVW0LEB+tpAw==", + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.7.3.tgz", + "integrity": "sha512-WY9wjJNQt9+PZilnLbuFKM+SwDull9+6IAguOrarOMoOHTcJ9GnXSO11+Gw6c7xtDkBkthR57OZMtZKYr+1CEw==", "dev": true, "engines": { "node": ">=12" @@ -5721,17 +5739,17 @@ "dev": true }, "node_modules/npm-package-arg": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.0.1.tgz", - "integrity": "sha512-Xs9wznfEAmZAR61qsYH3iN24V/qMYYkvAR5CRQNMvC6PjN2fHtO8y9XP/xdp5K+Icx+u1wMBMgWRPCmAEChSog==", + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.0.2.tgz", + "integrity": "sha512-v/miORuX8cndiOheW8p2moNuPJ7QhcFh9WGlTorruG8hXSA23vMTEp5hTCmDxic0nD8KHhj/NQgFuySD3GYY3g==", "dev": true, "dependencies": { "hosted-git-info": "^5.0.0", "semver": "^7.3.5", - "validate-npm-package-name": "^3.0.0" + "validate-npm-package-name": "^4.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/npm-package-arg/node_modules/hosted-git-info": { @@ -5747,9 +5765,9 @@ } }, "node_modules/npm-package-arg/node_modules/hosted-git-info/node_modules/lru-cache": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.7.1.tgz", - "integrity": "sha512-cRffBiTW8s73eH4aTXqBcTLU0xQnwGV3/imttRHGWCrbergmnK4D6JXQd8qin5z43HnDwRI+o7mVW0LEB+tpAw==", + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.7.3.tgz", + "integrity": "sha512-WY9wjJNQt9+PZilnLbuFKM+SwDull9+6IAguOrarOMoOHTcJ9GnXSO11+Gw6c7xtDkBkthR57OZMtZKYr+1CEw==", "dev": true, "engines": { "node": ">=12" @@ -6057,21 +6075,21 @@ } }, "node_modules/parcel": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/parcel/-/parcel-2.4.0.tgz", - "integrity": "sha512-dPWpu4RnxG9HqiLvaF8COEWEnT/KrigrC6PyPaQ0zEgpBfp7/jzXZFBVaZk2N+lpvrbNEYMjN9bv5UQGJJszIw==", - "dev": true, - "dependencies": { - "@parcel/config-default": "2.4.0", - "@parcel/core": "2.4.0", - "@parcel/diagnostic": "2.4.0", - "@parcel/events": "2.4.0", - "@parcel/fs": "2.4.0", - "@parcel/logger": "2.4.0", - "@parcel/package-manager": "2.4.0", - "@parcel/reporter-cli": "2.4.0", - "@parcel/reporter-dev-server": "2.4.0", - "@parcel/utils": "2.4.0", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/parcel/-/parcel-2.4.1.tgz", + "integrity": "sha512-H8n7cJ0rOt0AZZLuPuG6hvujUWiWz8kxx4pkqEDm31dijrbKb0pNgccXOllQ34em6r7elv6yH7lxox8jDCp0hw==", + "dev": true, + "dependencies": { + "@parcel/config-default": "2.4.1", + "@parcel/core": "2.4.1", + "@parcel/diagnostic": "2.4.1", + "@parcel/events": "2.4.1", + "@parcel/fs": "2.4.1", + "@parcel/logger": "2.4.1", + "@parcel/package-manager": "2.4.1", + "@parcel/reporter-cli": "2.4.1", + "@parcel/reporter-dev-server": "2.4.1", + "@parcel/utils": "2.4.1", "chalk": "^4.1.0", "commander": "^7.0.0", "get-port": "^4.2.0", @@ -6270,9 +6288,9 @@ } }, "node_modules/preact": { - "version": "10.6.6", - "resolved": "https://registry.npmjs.org/preact/-/preact-10.6.6.tgz", - "integrity": "sha512-dgxpTFV2vs4vizwKohYKkk7g7rmp1wOOcfd4Tz3IB3Wi+ivZzsn/SpeKJhRENSE+n8sUfsAl4S3HiCVT923ABw==", + "version": "10.7.0", + "resolved": "https://registry.npmjs.org/preact/-/preact-10.7.0.tgz", + "integrity": "sha512-9MEURwzNMKpAil/t6+wabDIJI6oG6GnwypYxiJDvQnW+fHDTt51PYuLZ1QUM31hFr7sDaj9qTaShAF9VIxuxGQ==", "funding": { "type": "opencollective", "url": "https://opencollective.com/preact" @@ -6743,9 +6761,9 @@ "dev": true }, "node_modules/sass": { - "version": "1.49.9", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.49.9.tgz", - "integrity": "sha512-YlYWkkHP9fbwaFRZQRXgDi3mXZShslVmmo+FVK3kHLUELHHEYrCmL1x6IUjC7wLS6VuJSAFXRQS/DxdsC4xL1A==", + "version": "1.49.10", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.49.10.tgz", + "integrity": "sha512-w37zfWJwKu4I78U4z63u1mmgoncq+v3iOB4yzQMPyAPVHHawaQSnu9C9ysGQnZEhW609jkcLioJcMCqm75JMdg==", "dev": true, "dependencies": { "chokidar": ">=3.0.0 <4.0.0", @@ -7487,12 +7505,15 @@ } }, "node_modules/validate-npm-package-name": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", - "integrity": "sha1-X6kS2B630MdK/BQN5zF/DKffQ34=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-4.0.0.tgz", + "integrity": "sha512-mzR0L8ZDktZjpX4OB46KT+56MAhl4EIazWP/+G/HPGuvfdaqg4YsCdtOm6U9+LOFyYDoh4dpnpxZRB9MQQns5Q==", "dev": true, "dependencies": { - "builtins": "^1.0.3" + "builtins": "^5.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/verror": { @@ -7927,9 +7948,9 @@ }, "dependencies": { "lru-cache": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.7.1.tgz", - "integrity": "sha512-cRffBiTW8s73eH4aTXqBcTLU0xQnwGV3/imttRHGWCrbergmnK4D6JXQd8qin5z43HnDwRI+o7mVW0LEB+tpAw==", + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.7.3.tgz", + "integrity": "sha512-WY9wjJNQt9+PZilnLbuFKM+SwDull9+6IAguOrarOMoOHTcJ9GnXSO11+Gw6c7xtDkBkthR57OZMtZKYr+1CEw==", "dev": true }, "semver": { @@ -8002,105 +8023,105 @@ } }, "@parcel/bundler-default": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/bundler-default/-/bundler-default-2.4.0.tgz", - "integrity": "sha512-RaXlxo0M51739Ko3bsOJpDBZlJ+cqkDoBTozNeSc65jS2TMBIBWLMapm8095qmty39OrgYNhzjgPiIlKDS/LWA==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/bundler-default/-/bundler-default-2.4.1.tgz", + "integrity": "sha512-PTfBOuoiiYdfwyoPFeBTOinyl1RL4qaoyAQ0PCe01C1i4NcRWCY1w7zRvwJW/OhU3Ka+LtioGmfxu5/drdXzLg==", "dev": true, "requires": { - "@parcel/diagnostic": "2.4.0", - "@parcel/hash": "2.4.0", - "@parcel/plugin": "2.4.0", - "@parcel/utils": "2.4.0", + "@parcel/diagnostic": "2.4.1", + "@parcel/hash": "2.4.1", + "@parcel/plugin": "2.4.1", + "@parcel/utils": "2.4.1", "nullthrows": "^1.1.1" } }, "@parcel/cache": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/cache/-/cache-2.4.0.tgz", - "integrity": "sha512-oOudoAafrCAHQY0zkU7gVHG1pAGBUz9rht7Tx4WupTmAH0O0F5UnZs6XbjoBJaPHg+CYUXK7v9wQcrNA72E3GA==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/cache/-/cache-2.4.1.tgz", + "integrity": "sha512-2N5ly++p/yefmPdK39X1QIoA2e6NtS1aYSsxrIC9EX92Kjd7SfSceqUJhlJWB49omJSheEJLd1qM3EJG9EvICQ==", "dev": true, "requires": { - "@parcel/fs": "2.4.0", - "@parcel/logger": "2.4.0", - "@parcel/utils": "2.4.0", + "@parcel/fs": "2.4.1", + "@parcel/logger": "2.4.1", + "@parcel/utils": "2.4.1", "lmdb": "2.2.4" } }, "@parcel/codeframe": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/codeframe/-/codeframe-2.4.0.tgz", - "integrity": "sha512-PJ3W9Z0sjoS2CANyo50c+LEr9IRZrtu0WsVPSYZ5ZYRuSXrSa/6PcAlnkyDk2+hi7Od8ncT2bmDexl0Oar3Jyg==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/codeframe/-/codeframe-2.4.1.tgz", + "integrity": "sha512-m3WDeEpWvgqekCqsHfPMJrSQquahdIgSR1x1RDCqQ1YelvW0fQiGgu42MXI5tjoBrHC1l1mF01UDb+xMSxz1DA==", "dev": true, "requires": { "chalk": "^4.1.0" } }, "@parcel/compressor-raw": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/compressor-raw/-/compressor-raw-2.4.0.tgz", - "integrity": "sha512-ZErX14fTc0gKIgtnuqW7Clfln4dpXWfUaJQQIf5C3x/LkpUeEhdXeKntkvSxOddDk2JpIKDwqzAxEMZUnDo4Nw==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/compressor-raw/-/compressor-raw-2.4.1.tgz", + "integrity": "sha512-cEOOOzIK7glxCqJX0OfBFBZE/iT7tmjEOXswRY3CnqY9FGoY3NYDAsOLm7A73RuIdNaZfYVxVUy3g7OLpbKL+g==", "dev": true, "requires": { - "@parcel/plugin": "2.4.0" + "@parcel/plugin": "2.4.1" } }, "@parcel/config-default": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/config-default/-/config-default-2.4.0.tgz", - "integrity": "sha512-pFOPBXPO6HGqNWTLkcK5i8haMOrRgUouUhcWPGWDpN9IPUYFK2E/O1E/uyMjIA1mSL3FnazI+jJwZ45NhKPpIA==", - "dev": true, - "requires": { - "@parcel/bundler-default": "2.4.0", - "@parcel/compressor-raw": "2.4.0", - "@parcel/namer-default": "2.4.0", - "@parcel/optimizer-css": "2.4.0", - "@parcel/optimizer-htmlnano": "2.4.0", - "@parcel/optimizer-image": "2.4.0", - "@parcel/optimizer-svgo": "2.4.0", - "@parcel/optimizer-terser": "2.4.0", - "@parcel/packager-css": "2.4.0", - "@parcel/packager-html": "2.4.0", - "@parcel/packager-js": "2.4.0", - "@parcel/packager-raw": "2.4.0", - "@parcel/packager-svg": "2.4.0", - "@parcel/reporter-dev-server": "2.4.0", - "@parcel/resolver-default": "2.4.0", - "@parcel/runtime-browser-hmr": "2.4.0", - "@parcel/runtime-js": "2.4.0", - "@parcel/runtime-react-refresh": "2.4.0", - "@parcel/runtime-service-worker": "2.4.0", - "@parcel/transformer-babel": "2.4.0", - "@parcel/transformer-css": "2.4.0", - "@parcel/transformer-html": "2.4.0", - "@parcel/transformer-image": "2.4.0", - "@parcel/transformer-js": "2.4.0", - "@parcel/transformer-json": "2.4.0", - "@parcel/transformer-postcss": "2.4.0", - "@parcel/transformer-posthtml": "2.4.0", - "@parcel/transformer-raw": "2.4.0", - "@parcel/transformer-react-refresh-wrap": "2.4.0", - "@parcel/transformer-svg": "2.4.0" + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/config-default/-/config-default-2.4.1.tgz", + "integrity": "sha512-yGA4Mx/KDzVOPm8IYb4Id+zlz1TaIM7s472pxA4tUV1qcEtBInY0aeO9R/GsLKC2+3QPHURZld9WI9EMXRUBBA==", + "dev": true, + "requires": { + "@parcel/bundler-default": "2.4.1", + "@parcel/compressor-raw": "2.4.1", + "@parcel/namer-default": "2.4.1", + "@parcel/optimizer-css": "2.4.1", + "@parcel/optimizer-htmlnano": "2.4.1", + "@parcel/optimizer-image": "2.4.1", + "@parcel/optimizer-svgo": "2.4.1", + "@parcel/optimizer-terser": "2.4.1", + "@parcel/packager-css": "2.4.1", + "@parcel/packager-html": "2.4.1", + "@parcel/packager-js": "2.4.1", + "@parcel/packager-raw": "2.4.1", + "@parcel/packager-svg": "2.4.1", + "@parcel/reporter-dev-server": "2.4.1", + "@parcel/resolver-default": "2.4.1", + "@parcel/runtime-browser-hmr": "2.4.1", + "@parcel/runtime-js": "2.4.1", + "@parcel/runtime-react-refresh": "2.4.1", + "@parcel/runtime-service-worker": "2.4.1", + "@parcel/transformer-babel": "2.4.1", + "@parcel/transformer-css": "2.4.1", + "@parcel/transformer-html": "2.4.1", + "@parcel/transformer-image": "2.4.1", + "@parcel/transformer-js": "2.4.1", + "@parcel/transformer-json": "2.4.1", + "@parcel/transformer-postcss": "2.4.1", + "@parcel/transformer-posthtml": "2.4.1", + "@parcel/transformer-raw": "2.4.1", + "@parcel/transformer-react-refresh-wrap": "2.4.1", + "@parcel/transformer-svg": "2.4.1" } }, "@parcel/core": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/core/-/core-2.4.0.tgz", - "integrity": "sha512-EWZ2UWtIuwDc3fgsKyyTLpNNPoG8Yk2L117ICWF/+cqY8z/wJHm2KwLbeplDeq524shav0GJ9O4CemP3JPx0Nw==", - "dev": true, - "requires": { - "@parcel/cache": "2.4.0", - "@parcel/diagnostic": "2.4.0", - "@parcel/events": "2.4.0", - "@parcel/fs": "2.4.0", - "@parcel/graph": "2.4.0", - "@parcel/hash": "2.4.0", - "@parcel/logger": "2.4.0", - "@parcel/package-manager": "2.4.0", - "@parcel/plugin": "2.4.0", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/core/-/core-2.4.1.tgz", + "integrity": "sha512-h2FvqLA75ZQdIXX1y+ylGjIIi7YtbAUJyIapxaO081h3EsYG2jr9sRL4sym5ECgmvbyua/DEgtMLX3eGYn09FA==", + "dev": true, + "requires": { + "@parcel/cache": "2.4.1", + "@parcel/diagnostic": "2.4.1", + "@parcel/events": "2.4.1", + "@parcel/fs": "2.4.1", + "@parcel/graph": "2.4.1", + "@parcel/hash": "2.4.1", + "@parcel/logger": "2.4.1", + "@parcel/package-manager": "2.4.1", + "@parcel/plugin": "2.4.1", "@parcel/source-map": "^2.0.0", - "@parcel/types": "2.4.0", - "@parcel/utils": "2.4.0", - "@parcel/workers": "2.4.0", + "@parcel/types": "2.4.1", + "@parcel/utils": "2.4.1", + "@parcel/workers": "2.4.1", "abortcontroller-polyfill": "^1.1.9", "base-x": "^3.0.8", "browserslist": "^4.6.6", @@ -8115,82 +8136,82 @@ } }, "@parcel/css": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/@parcel/css/-/css-1.7.3.tgz", - "integrity": "sha512-rgdRX4Uk31EvzH/mUScL0wdXtkci3U5N1W2pgam+9S10vQy4uONhWBepZ1tUCjONHLacGXr1jp3LbG/HI7LiTw==", - "dev": true, - "requires": { - "@parcel/css-darwin-arm64": "1.7.3", - "@parcel/css-darwin-x64": "1.7.3", - "@parcel/css-linux-arm-gnueabihf": "1.7.3", - "@parcel/css-linux-arm64-gnu": "1.7.3", - "@parcel/css-linux-arm64-musl": "1.7.3", - "@parcel/css-linux-x64-gnu": "1.7.3", - "@parcel/css-linux-x64-musl": "1.7.3", - "@parcel/css-win32-x64-msvc": "1.7.3", + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/@parcel/css/-/css-1.7.4.tgz", + "integrity": "sha512-K1N9mxEkWQQmSINMNuGvlyPq7yCY+AtHskGxWav97lhu2i8GMMXRV9kc8/x/jkZh5KDBWO5vHhdQiujRBrgR8g==", + "dev": true, + "requires": { + "@parcel/css-darwin-arm64": "1.7.4", + "@parcel/css-darwin-x64": "1.7.4", + "@parcel/css-linux-arm-gnueabihf": "1.7.4", + "@parcel/css-linux-arm64-gnu": "1.7.4", + "@parcel/css-linux-arm64-musl": "1.7.4", + "@parcel/css-linux-x64-gnu": "1.7.4", + "@parcel/css-linux-x64-musl": "1.7.4", + "@parcel/css-win32-x64-msvc": "1.7.4", "detect-libc": "^1.0.3" } }, "@parcel/css-darwin-arm64": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/@parcel/css-darwin-arm64/-/css-darwin-arm64-1.7.3.tgz", - "integrity": "sha512-m3HDY+Rh8HJxmLELKAvCpF59vLS7FWtgBODHxl8G9Jl2CnGtXpXvdpyeMxNsTE+2QuPC+a5QT7IeZAKb2Gjmxg==", + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/@parcel/css-darwin-arm64/-/css-darwin-arm64-1.7.4.tgz", + "integrity": "sha512-fA+aBZAAgXSV7jUQFRYuKpJr5EEqNq++mFu4o/pU/lBFMJhL6Z11aqzrBecC1JziWT3t/BgryWdznf1QkNtM4w==", "dev": true, "optional": true }, "@parcel/css-darwin-x64": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/@parcel/css-darwin-x64/-/css-darwin-x64-1.7.3.tgz", - "integrity": "sha512-LuhweXKxVwrz/hjAOm9XNRMSL+p23px20nhSCASkyUP7Higaxza948W3TSQdoL3YyR+wQxQH8Yj+R/T8Tz3E3g==", + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/@parcel/css-darwin-x64/-/css-darwin-x64-1.7.4.tgz", + "integrity": "sha512-qx/+vEXSmed7eeBgVvV/1lrEjk8KnKUiAN+CCes8d6ddJJzK5evTKQsWkywe1jNdHC33d2mlLlhLFmC2+2IPOw==", "dev": true, "optional": true }, "@parcel/css-linux-arm-gnueabihf": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/@parcel/css-linux-arm-gnueabihf/-/css-linux-arm-gnueabihf-1.7.3.tgz", - "integrity": "sha512-/pd9Em18zMvt7eDZAMpNBEwF7c4VPVhAtBOZ59ClFrsXCTDNYP7mSy0cwNgtLelCRZCGAQmZNBDNQPH7vO3rew==", + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/@parcel/css-linux-arm-gnueabihf/-/css-linux-arm-gnueabihf-1.7.4.tgz", + "integrity": "sha512-+Qf+j8dqJ+t7V/w9LnyWBzNcMG/GnlzjlWNQhiUkt1aYFYPr5i/eRWuWLYxVlz8EGQOUbYlinDGLXTUJDt31gA==", "dev": true, "optional": true }, "@parcel/css-linux-arm64-gnu": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/@parcel/css-linux-arm64-gnu/-/css-linux-arm64-gnu-1.7.3.tgz", - "integrity": "sha512-5aKiEhQK40riO4iVKzRqISzgYK+7Z7i3e6JTSz+/BHuQyHEUaBe/RuJ8Z0BDQtFz0HmWQlrQCd+7hd0Xgd8vYQ==", + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/@parcel/css-linux-arm64-gnu/-/css-linux-arm64-gnu-1.7.4.tgz", + "integrity": "sha512-ITP0HZT/Ay6JCgH3W7JpoRUYfciW+jBVBTjglZjYgyYPLLWk2J1kXB+qC3jHp5XCeH4feh7eFB1pyQcE7kqCjA==", "dev": true, "optional": true }, "@parcel/css-linux-arm64-musl": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/@parcel/css-linux-arm64-musl/-/css-linux-arm64-musl-1.7.3.tgz", - "integrity": "sha512-Wf7/aIueDED2JqBMfZvzbBAFSaPmd3TR28bD2pmP7CI/jZnm9vHVKMdOLgt9NKSSSjdGrp+VM410CsrUM7xcOw==", + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/@parcel/css-linux-arm64-musl/-/css-linux-arm64-musl-1.7.4.tgz", + "integrity": "sha512-or61QRhhpsDlHfrc73KP4bPwnnVZWni1jkuRv1mCi+0SzYzoaO190JEaj7VWh/boUvjGiIl//FsLoZleQIWKNA==", "dev": true, "optional": true }, "@parcel/css-linux-x64-gnu": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/@parcel/css-linux-x64-gnu/-/css-linux-x64-gnu-1.7.3.tgz", - "integrity": "sha512-0ZADbuFklUrHC1p2uPY4BPcN07jUTMqJzr/SSdnGN2XiXgiVZGcDCMHUj0DvC9Vwy11DDM6Rnw4QBbKHG+QGjQ==", + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/@parcel/css-linux-x64-gnu/-/css-linux-x64-gnu-1.7.4.tgz", + "integrity": "sha512-GHGsM06F26FAkvPcnsGw7NHxPVD7TQvg7OC7cVAYmETccO8mqs9DyRzBTevk+1kl7EQXNnHDojn7VpVN6q+phg==", "dev": true, "optional": true }, "@parcel/css-linux-x64-musl": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/@parcel/css-linux-x64-musl/-/css-linux-x64-musl-1.7.3.tgz", - "integrity": "sha512-mFWWM8lX2OIID81YQuDDt9zTqof0B7UcEcs0huE7Zbs60uLEEQupdf8iH0yh5EOhxPt3sRcQnGXf2QTrXdjIMA==", + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/@parcel/css-linux-x64-musl/-/css-linux-x64-musl-1.7.4.tgz", + "integrity": "sha512-H/9wvQ7LNqng9yIwulpfUUhs6zm9+vLCzri2qnC4vm8geyTjA0W0H5fphV8IlzNJ/DfHmoesJ+TXw5NG+QC9hg==", "dev": true, "optional": true }, "@parcel/css-win32-x64-msvc": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/@parcel/css-win32-x64-msvc/-/css-win32-x64-msvc-1.7.3.tgz", - "integrity": "sha512-KUFEMQcoP7DG3QbsN21OxhjHkfQ1BARn7D9puX75bV5N1F1kv557aaLkQZiMsgiYOL4tmJvsdQXutG7x++3j4Q==", + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/@parcel/css-win32-x64-msvc/-/css-win32-x64-msvc-1.7.4.tgz", + "integrity": "sha512-xmg18iISCn1f9IyYUif6yR8FuEmi93qzH55oUiri5vZWuCY8xfraHsRA6i8yLWnxgDmVeHyiN0IICl7rgZo10A==", "dev": true, "optional": true }, "@parcel/diagnostic": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/diagnostic/-/diagnostic-2.4.0.tgz", - "integrity": "sha512-TjWO/b2zMFhub5ouwGjazMm7iAUvdmXBfWmjrg4TBhUbhoQwBnyWfvMDtAYo7PcvXfxVPgPZv86Nv6Ym5H6cHQ==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/diagnostic/-/diagnostic-2.4.1.tgz", + "integrity": "sha512-wmJIfn0PG2ABuraS+kMjl6UKaLjTDTtG+XkjJLWHzU/dd5RozqAZDKp65GWjvHzHLx7KICTAdUJsXh2s3TnTOQ==", "dev": true, "requires": { "json-source-map": "^0.6.1", @@ -8198,47 +8219,47 @@ } }, "@parcel/events": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/events/-/events-2.4.0.tgz", - "integrity": "sha512-DEaEtFbhOhNAEmiXJ3MyF8Scq+sNDKiTyLax4lAC5/dpE5GvwfNnoD17C2+0gDuuDpdQkdHfXfvr50aYFt7jcw==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/events/-/events-2.4.1.tgz", + "integrity": "sha512-er2jwyzYt3Zimkrp7TR865GIeIMYNd7YSSxW39y/egm4LIPBsruUpHSnKRD5b65Jd+gckkxDsnrpADG6MH1zNw==", "dev": true }, "@parcel/fs": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/fs/-/fs-2.4.0.tgz", - "integrity": "sha512-CnUlWGUJ52SJVQi8QnaAPPQZOADmHMV9D9aX9GLcDm5XLT3Em7vmesG4bNLdMLwzYuzAtenhcWmuRCACuYztHw==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/fs/-/fs-2.4.1.tgz", + "integrity": "sha512-kE9HzW6XjO/ZA5bQnAzp1YVmGlXeDqUaius2cH2K0wU7KQX/GBjyfEWJm/UsKPB6QIrGXgkPH6ashNzOgwDqpw==", "dev": true, "requires": { - "@parcel/fs-search": "2.4.0", - "@parcel/types": "2.4.0", - "@parcel/utils": "2.4.0", + "@parcel/fs-search": "2.4.1", + "@parcel/types": "2.4.1", + "@parcel/utils": "2.4.1", "@parcel/watcher": "^2.0.0", - "@parcel/workers": "2.4.0" + "@parcel/workers": "2.4.1" } }, "@parcel/fs-search": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/fs-search/-/fs-search-2.4.0.tgz", - "integrity": "sha512-W/Vu6wbZk4wuB6AVdMkyymwh/S8Peed/PgJgSsApYD6lSTD315I6OuEdxZh3lWY+dqQdog/NJ7dvi/hdpH/Iqw==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/fs-search/-/fs-search-2.4.1.tgz", + "integrity": "sha512-xfoLvHjHkZm4VZf3UWU5v6gzz+x7IBVY7siHGn0YyGwvlv73FmiR4mCSizqerXOyXknF2fpg6tNHNQyyNLS32Q==", "dev": true, "requires": { "detect-libc": "^1.0.3" } }, "@parcel/graph": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/graph/-/graph-2.4.0.tgz", - "integrity": "sha512-5TZIAfDITkJCzgH4j4OQhnIvjV9IFwWqNBJanRl5QQTmKvdcODS3WbnK1SOJ+ZltcLVXMB+HNXmL0bX0tVolcw==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/graph/-/graph-2.4.1.tgz", + "integrity": "sha512-3JCnPI9BJdKpGIk6NtVN7ML3C/J9Ey+WfUfk8WisDxFP7vjYkXwZbNSR/HnxH+Y03wmB6cv4HI8A4kndF0H0pw==", "dev": true, "requires": { - "@parcel/utils": "2.4.0", + "@parcel/utils": "2.4.1", "nullthrows": "^1.1.1" } }, "@parcel/hash": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/hash/-/hash-2.4.0.tgz", - "integrity": "sha512-nB+wYNUhe6+G8M7vQhdeFXtpYJYwJgBHOPZ7Hd9O2jdlamWjDbw0t/u1dJbYvGJ8ZDtLDwiItawQVpuVdskQ9g==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/hash/-/hash-2.4.1.tgz", + "integrity": "sha512-Ch1kkFPedef3geapU+XYmAdZY29u3eQXn/twMjowAKkWCmj6wZ+muUgBmOO2uCfK3xys7GycI8jYZcAbF5DVLg==", "dev": true, "requires": { "detect-libc": "^1.0.3", @@ -8246,68 +8267,68 @@ } }, "@parcel/logger": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/logger/-/logger-2.4.0.tgz", - "integrity": "sha512-DqfU0Zcs/0a7VBk+MsjJ80C66w4kM9EbkO3G12NIyEjNeG50ayW2CE9rUuJ91JaM9j0NFM1P82eyLpQPFFaVPw==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/logger/-/logger-2.4.1.tgz", + "integrity": "sha512-wm7FoKY+1dyo+Dd7Z4b0d6hmpgRBWfZwCoZSSyhgbG96Ty68/oo3m7oEMXPfry8IVGIhShmWKDp4py44PH3l7w==", "dev": true, "requires": { - "@parcel/diagnostic": "2.4.0", - "@parcel/events": "2.4.0" + "@parcel/diagnostic": "2.4.1", + "@parcel/events": "2.4.1" } }, "@parcel/markdown-ansi": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/markdown-ansi/-/markdown-ansi-2.4.0.tgz", - "integrity": "sha512-gPUP1xikxHiu2kFyPy35pfuVkFgAmcywO8YDQj7iYcB+k7l4QPpIYFYGXn2QADV4faf66ncMeTD4uYV8c0GqjQ==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/markdown-ansi/-/markdown-ansi-2.4.1.tgz", + "integrity": "sha512-BkWhzbKQhTQ9lS96ZMMG0KyXSJBFdNeBVobWrdrrwcFlNER0nt2m6fdF7Hfpf1TqFhM4tT+GNFtON7ybL53RiQ==", "dev": true, "requires": { "chalk": "^4.1.0" } }, "@parcel/namer-default": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/namer-default/-/namer-default-2.4.0.tgz", - "integrity": "sha512-DfL+Gx0Tyoa0vsgRpNybXjuKbWNw8MTVpy7Dk7r0btfVsn1jy3SSwlxH4USf76gb00/pK6XBsMp9zn7Z8ePREQ==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/namer-default/-/namer-default-2.4.1.tgz", + "integrity": "sha512-a/Xulfia7JJP6Cw/D6Wq5xX6IAKVKMRPEYtU2wB8vKuwC/et6kXi+0bFVeCLnTjDzVtsjDdyOEwfRC4yiEy3BA==", "dev": true, "requires": { - "@parcel/diagnostic": "2.4.0", - "@parcel/plugin": "2.4.0", + "@parcel/diagnostic": "2.4.1", + "@parcel/plugin": "2.4.1", "nullthrows": "^1.1.1" } }, "@parcel/node-resolver-core": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/node-resolver-core/-/node-resolver-core-2.4.0.tgz", - "integrity": "sha512-qiN97XcfW2fYNoYuVEhNKuVPEJKj5ONQl0fqr/NEMmYvWz3bVKjgiXNJwW558elZvCI08gEbdxgyThpuFFQeKQ==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/node-resolver-core/-/node-resolver-core-2.4.1.tgz", + "integrity": "sha512-CvCADj3l4o5USqz/ZCaqbK8gdAQK63q94oSa0KnP6hrcDI/gDyf5Bk4+3cD4kSI+ByuN6aFLAYBS2nHBh5O/MQ==", "dev": true, "requires": { - "@parcel/diagnostic": "2.4.0", - "@parcel/utils": "2.4.0", + "@parcel/diagnostic": "2.4.1", + "@parcel/utils": "2.4.1", "nullthrows": "^1.1.1" } }, "@parcel/optimizer-css": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/optimizer-css/-/optimizer-css-2.4.0.tgz", - "integrity": "sha512-LQmjjOGsHEHKTJqfHR2eJyhWhLXvHP0uOAU+qopBttYYlB2J/vMK9RYAye5cyAb8bQmV8wAdi2mq9rnt7FMSPw==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/optimizer-css/-/optimizer-css-2.4.1.tgz", + "integrity": "sha512-+1CxZ43aoAUF8Hj2wLPK4d+TzdJlgYidXJ19Qwlh6XdQs8OeFGBAzIsUBFSr8+XCugXmnTkjYK94nX04Z2FhtQ==", "dev": true, "requires": { - "@parcel/css": "^1.7.2", - "@parcel/diagnostic": "2.4.0", - "@parcel/plugin": "2.4.0", + "@parcel/css": "^1.7.4", + "@parcel/diagnostic": "2.4.1", + "@parcel/plugin": "2.4.1", "@parcel/source-map": "^2.0.0", - "@parcel/utils": "2.4.0", + "@parcel/utils": "2.4.1", "browserslist": "^4.6.6", "nullthrows": "^1.1.1" } }, "@parcel/optimizer-htmlnano": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/optimizer-htmlnano/-/optimizer-htmlnano-2.4.0.tgz", - "integrity": "sha512-02EbeElLgNOAYhGU7fFBahpoKrX5G/yzahpaoKB/ypScM4roSsAMBkGcluboR5L10YRsvfvJEpxvfGyDA3tPmw==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/optimizer-htmlnano/-/optimizer-htmlnano-2.4.1.tgz", + "integrity": "sha512-JkykHZcBS92iggT7GHuJJd+MDIc7BMAG0xxTJIY9KzzcxGNYsY8P3LedGVTL0/X8tkdlYQSGNLkTCntP0/62cw==", "dev": true, "requires": { - "@parcel/plugin": "2.4.0", + "@parcel/plugin": "2.4.1", "htmlnano": "^2.0.0", "nullthrows": "^1.1.1", "posthtml": "^0.16.5", @@ -8315,202 +8336,202 @@ } }, "@parcel/optimizer-image": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/optimizer-image/-/optimizer-image-2.4.0.tgz", - "integrity": "sha512-Q4onaBMPkDyYxPzrb8ytBUftaQZFepj9dSUgq+ETuHDzkgia0tomDPfCqrw6ld0qvYyANzXTP5+LC4g0i5yh+A==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/optimizer-image/-/optimizer-image-2.4.1.tgz", + "integrity": "sha512-cv03Ta1FWuF75o9DJLuk1eYk1ULSdSbSkriQUAzc4InKW1bJH6gJasMZSTBsAg2Oz1TWqiDyiy5D/6i/UPoBJg==", "dev": true, "requires": { - "@parcel/diagnostic": "2.4.0", - "@parcel/plugin": "2.4.0", - "@parcel/utils": "2.4.0", - "@parcel/workers": "2.4.0", + "@parcel/diagnostic": "2.4.1", + "@parcel/plugin": "2.4.1", + "@parcel/utils": "2.4.1", + "@parcel/workers": "2.4.1", "detect-libc": "^1.0.3" } }, "@parcel/optimizer-svgo": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/optimizer-svgo/-/optimizer-svgo-2.4.0.tgz", - "integrity": "sha512-mwvGuCqVuNCAuMlp2maFE/Uz9ud1T1AuX0f6cCRczjFYiwZuIr/0iDdfFzSziOkVo1MRAGAZNa0dRR/UzCZtVg==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/optimizer-svgo/-/optimizer-svgo-2.4.1.tgz", + "integrity": "sha512-sOiofvHXjwJDu0NnTO8gGKDv0BztykVczfJdcedYmj207uU71JG1uODZvhyY4uiw1eRqmZnIXELZIftvYnZnDA==", "dev": true, "requires": { - "@parcel/diagnostic": "2.4.0", - "@parcel/plugin": "2.4.0", - "@parcel/utils": "2.4.0", + "@parcel/diagnostic": "2.4.1", + "@parcel/plugin": "2.4.1", + "@parcel/utils": "2.4.1", "svgo": "^2.4.0" } }, "@parcel/optimizer-terser": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/optimizer-terser/-/optimizer-terser-2.4.0.tgz", - "integrity": "sha512-PdCgRgXNSY6R1HTV9VG2MHp1CgUbP5pslCyxvlbUmQAS6bvEpMOpn3qSd+U28o7mGE/qXIhvpDyi808sb+MEcg==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/optimizer-terser/-/optimizer-terser-2.4.1.tgz", + "integrity": "sha512-naRdp6gApWHUI1FCBZEJs9NzNngjZx8hRhIHeQtTxWpc2Mu8cVzxbVHNAwUj10nW3iOYmxyj4wleOArl8xpVCQ==", "dev": true, "requires": { - "@parcel/diagnostic": "2.4.0", - "@parcel/plugin": "2.4.0", + "@parcel/diagnostic": "2.4.1", + "@parcel/plugin": "2.4.1", "@parcel/source-map": "^2.0.0", - "@parcel/utils": "2.4.0", + "@parcel/utils": "2.4.1", "nullthrows": "^1.1.1", "terser": "^5.2.0" } }, "@parcel/package-manager": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/package-manager/-/package-manager-2.4.0.tgz", - "integrity": "sha512-21AEfAQnZbHRVViTn7QsPGe/CiGaFaDUH5f0m8qVC7fDjjhC8LM8blkqU72goaO9FbaLMadtEf2txhzly7h/bg==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/package-manager/-/package-manager-2.4.1.tgz", + "integrity": "sha512-JUUinm4U3hy4epHl9A389xb+BGiFR8n9+qw3Z4UDfS1te43sh8+0virBGcnai/G7mlr5/vHW+l9xulc7WQaY6w==", "dev": true, "requires": { - "@parcel/diagnostic": "2.4.0", - "@parcel/fs": "2.4.0", - "@parcel/logger": "2.4.0", - "@parcel/types": "2.4.0", - "@parcel/utils": "2.4.0", - "@parcel/workers": "2.4.0", + "@parcel/diagnostic": "2.4.1", + "@parcel/fs": "2.4.1", + "@parcel/logger": "2.4.1", + "@parcel/types": "2.4.1", + "@parcel/utils": "2.4.1", + "@parcel/workers": "2.4.1", "semver": "^5.7.1" } }, "@parcel/packager-css": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/packager-css/-/packager-css-2.4.0.tgz", - "integrity": "sha512-LmPDWzkXi60Oy3WrPF0jPKQxeTwW5hmNBgrcXJMHSu+VcXdaQZNzNxVzhnZkJUbDd2z9vAUrUGzdLh8TquC8iQ==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/packager-css/-/packager-css-2.4.1.tgz", + "integrity": "sha512-COx6RvHbpZ3DzuAgB/XvLLR/luxn9kYhqdFrnmIlYBh4B9atfXyr4rKDlWj1W/r2R72R6LHM35KhkwUATmrC/w==", "dev": true, "requires": { - "@parcel/plugin": "2.4.0", + "@parcel/plugin": "2.4.1", "@parcel/source-map": "^2.0.0", - "@parcel/utils": "2.4.0", + "@parcel/utils": "2.4.1", "nullthrows": "^1.1.1" } }, "@parcel/packager-html": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/packager-html/-/packager-html-2.4.0.tgz", - "integrity": "sha512-OPMIQ1uHYQFpRPrsmm5BqONbAyzjlhVsPRAzHlcBrglG4BTUeOR2ow4MUKblHmVVqc3QHnfZG4nHHtFkeuNQ3A==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/packager-html/-/packager-html-2.4.1.tgz", + "integrity": "sha512-F5/PmWKoz8JhToufnp3u+NQ4LUoVkabzIJYHyQrM858XVmNbMInRfiTYxtgCBa2ARm2BTPhToh7N01OEyFCOhA==", "dev": true, "requires": { - "@parcel/plugin": "2.4.0", - "@parcel/types": "2.4.0", - "@parcel/utils": "2.4.0", + "@parcel/plugin": "2.4.1", + "@parcel/types": "2.4.1", + "@parcel/utils": "2.4.1", "nullthrows": "^1.1.1", "posthtml": "^0.16.5" } }, "@parcel/packager-js": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/packager-js/-/packager-js-2.4.0.tgz", - "integrity": "sha512-cfslIH43CJFgBS9PmdFaSnbInMCoejsFCnxtJa2GeUpjCXSfelPRp0OPx7m8n+fap4czftPhoxBALeDUElOZGQ==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/packager-js/-/packager-js-2.4.1.tgz", + "integrity": "sha512-broWBUQisJLF5ThFtnl/asypuLMlMBwFPBTr8Ho9FYlL6W4wUzIymu7eOcuDljstmbD6luNVGMdCBYqt3IhHmw==", "dev": true, "requires": { - "@parcel/diagnostic": "2.4.0", - "@parcel/hash": "2.4.0", - "@parcel/plugin": "2.4.0", + "@parcel/diagnostic": "2.4.1", + "@parcel/hash": "2.4.1", + "@parcel/plugin": "2.4.1", "@parcel/source-map": "^2.0.0", - "@parcel/utils": "2.4.0", + "@parcel/utils": "2.4.1", "globals": "^13.2.0", "nullthrows": "^1.1.1" } }, "@parcel/packager-raw": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/packager-raw/-/packager-raw-2.4.0.tgz", - "integrity": "sha512-SFfw7chMFITj3J26ZVDJxbO6xwtPFcFBm1js8cwWMgzwuwS6CEc43k5+Abj+2/EqHU9kNJU9eWV5vT6lQwf3HA==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/packager-raw/-/packager-raw-2.4.1.tgz", + "integrity": "sha512-4lCY3TjiYaZyRIqshNF21i6XkQ5PJyr+ahhK4O2IymuYuD8/wGH2amTZqKPpGLuiF3j1HskRRUNv1ekpvExJ8w==", "dev": true, "requires": { - "@parcel/plugin": "2.4.0" + "@parcel/plugin": "2.4.1" } }, "@parcel/packager-svg": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/packager-svg/-/packager-svg-2.4.0.tgz", - "integrity": "sha512-DwkgrdLEQop+tu9Ocr1ZaadmpsbSgVruJPr80xq1LaB0Jiwrl9HjHStMNH1laNFueK1yydxhnj9C2JQfW28qag==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/packager-svg/-/packager-svg-2.4.1.tgz", + "integrity": "sha512-V7GW/dgJPqXHReTzwpLcNEdyT5WWveYOW1MfxvKgOOK1ENk6oPgXL0FUdm5IHzqlK1bbwF5hzSQs2vaJMv7rPg==", "dev": true, "requires": { - "@parcel/plugin": "2.4.0", - "@parcel/types": "2.4.0", - "@parcel/utils": "2.4.0", + "@parcel/plugin": "2.4.1", + "@parcel/types": "2.4.1", + "@parcel/utils": "2.4.1", "posthtml": "^0.16.4" } }, "@parcel/plugin": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/plugin/-/plugin-2.4.0.tgz", - "integrity": "sha512-ehFUAL2+h27Lv+cYbbXA74UGy8C+eglUjcpvASOOjVRFuD6poMAMliKkKAXBhQaFx/Rvhz27A2PIPv9lL2i4UQ==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/plugin/-/plugin-2.4.1.tgz", + "integrity": "sha512-EJzNhwNWYuSpIPRlG1U2hKcovq/RsVie4Os1z51/e2dcCto/uAoJOMoWYYsCxtjkJ7BjFYyQ7fcZRKM9DEr6gQ==", "dev": true, "requires": { - "@parcel/types": "2.4.0" + "@parcel/types": "2.4.1" } }, "@parcel/reporter-cli": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/reporter-cli/-/reporter-cli-2.4.0.tgz", - "integrity": "sha512-Q9bIFMaGvQgypCDxdMEKOwrJzIHAXScKkuFsqTHnUL6mmH3Mo2CoEGAq/wpMXuPhXRn1dPJcHgTNDwZ2fSzz0A==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/reporter-cli/-/reporter-cli-2.4.1.tgz", + "integrity": "sha512-99v/dSQ6wYmfpjmBxbsuBoxPWu9bm7PRxDDJxiVapbbym50bWYwVmMEHj6mYnK151YbMssV0garrSs1yYQEvqw==", "dev": true, "requires": { - "@parcel/plugin": "2.4.0", - "@parcel/types": "2.4.0", - "@parcel/utils": "2.4.0", + "@parcel/plugin": "2.4.1", + "@parcel/types": "2.4.1", + "@parcel/utils": "2.4.1", "chalk": "^4.1.0", "term-size": "^2.2.1" } }, "@parcel/reporter-dev-server": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/reporter-dev-server/-/reporter-dev-server-2.4.0.tgz", - "integrity": "sha512-24h++wevs7XYuX4dKa4PUfLSstvn3g7udajFv6CeQoME+dR25RL/wH/2LUbhV5ilgXXab76rWIndSqp78xHxPA==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/reporter-dev-server/-/reporter-dev-server-2.4.1.tgz", + "integrity": "sha512-tRz1LHiudDhujBC3kJ3Qm0Wnbo3p3SpE6fjyCFRhdv2PJnEufNTTwzEUoa7lYZACwFVQUtrh6F7nMXFw6ynrsQ==", "dev": true, "requires": { - "@parcel/plugin": "2.4.0", - "@parcel/utils": "2.4.0" + "@parcel/plugin": "2.4.1", + "@parcel/utils": "2.4.1" } }, "@parcel/resolver-default": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/resolver-default/-/resolver-default-2.4.0.tgz", - "integrity": "sha512-K7pIIFmGm1hjg/7Mzkg99i8tfCClKfBUTuc2R5j8cdr2n0mCAi4/f2mFf5svLrb5XZrnDgoQ05tHKklLEfUDUw==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/resolver-default/-/resolver-default-2.4.1.tgz", + "integrity": "sha512-iJRt1+7lk0n7+wb+S/tVyiObbaiYP1YQGKRsTE8y4Kgp4/OPukdUHGFJwzbojWa0HnyoXm3zEgelVz7cHl47fQ==", "dev": true, "requires": { - "@parcel/node-resolver-core": "2.4.0", - "@parcel/plugin": "2.4.0" + "@parcel/node-resolver-core": "2.4.1", + "@parcel/plugin": "2.4.1" } }, "@parcel/runtime-browser-hmr": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/runtime-browser-hmr/-/runtime-browser-hmr-2.4.0.tgz", - "integrity": "sha512-swPFtvxGoCA9LEjU/pHPNjxG1l0fte8447zXwRN/AaYrtjNu9Ww117OSKCyvCnE143E79jZOFStodTQGFuH+9A==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/runtime-browser-hmr/-/runtime-browser-hmr-2.4.1.tgz", + "integrity": "sha512-INsr78Kn0OuwMdXHCzw7v6l3Gf/UBTYtX7N7JNDOIBEFFkuZQiFWyAOI2P/DvMm8qeqcsrKliBO5Xty/a2Ivaw==", "dev": true, "requires": { - "@parcel/plugin": "2.4.0", - "@parcel/utils": "2.4.0" + "@parcel/plugin": "2.4.1", + "@parcel/utils": "2.4.1" } }, "@parcel/runtime-js": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/runtime-js/-/runtime-js-2.4.0.tgz", - "integrity": "sha512-67OOvmkDdtmgzZVP/EyAzoXhJ/Ug3LUVUt7idg9arun5rdJptqEb3Um3wmH0zjcNa9jMbJt7Kl5x1wA8dJgPYg==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/runtime-js/-/runtime-js-2.4.1.tgz", + "integrity": "sha512-/EXwRpo+GPvWgN5yD0hjjt84Gm6QWp757dqOOzTG5R2rm1WU+g1a+zJJB1zXkxhu9lleQs44D1jEffzhh2Voyw==", "dev": true, "requires": { - "@parcel/plugin": "2.4.0", - "@parcel/utils": "2.4.0", + "@parcel/plugin": "2.4.1", + "@parcel/utils": "2.4.1", "nullthrows": "^1.1.1" } }, "@parcel/runtime-react-refresh": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/runtime-react-refresh/-/runtime-react-refresh-2.4.0.tgz", - "integrity": "sha512-flnr+bf06lMZPbXZZLLaFNrPHvYpfuXTVovEghyUW46qLVpaHj33dpsU/LqZplIuHgBp2ibgrKhr/hY9ell68w==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/runtime-react-refresh/-/runtime-react-refresh-2.4.1.tgz", + "integrity": "sha512-a4GBQ/fO7Mklh1M1G2JVpJBPbZD7YXUPAzh9Y4vpCf0ouTHBRMc8ew4CyKPJIrrTly5P42tFWnD3P4FVNKwHOQ==", "dev": true, "requires": { - "@parcel/plugin": "2.4.0", - "@parcel/utils": "2.4.0", + "@parcel/plugin": "2.4.1", + "@parcel/utils": "2.4.1", "react-refresh": "^0.9.0" } }, "@parcel/runtime-service-worker": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/runtime-service-worker/-/runtime-service-worker-2.4.0.tgz", - "integrity": "sha512-RgM5QUqW22WzstW03CtV+Oih8VGVuwsf94Cc4hLouU2EAD0NUJgATWbFocZVTZIBTKELAWh2gjpSQDdnL4Ur+A==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/runtime-service-worker/-/runtime-service-worker-2.4.1.tgz", + "integrity": "sha512-WtMKSiyQ0kF78rBw0XIx7n65mMb+6GBx+5m49r1aVZzeZEOSynpjJzJvqo7rxVmA7qTDkD2bko7BH41iScsEaw==", "dev": true, "requires": { - "@parcel/plugin": "2.4.0", - "@parcel/utils": "2.4.0", + "@parcel/plugin": "2.4.1", + "@parcel/utils": "2.4.1", "nullthrows": "^1.1.1" } }, @@ -8524,15 +8545,15 @@ } }, "@parcel/transformer-babel": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/transformer-babel/-/transformer-babel-2.4.0.tgz", - "integrity": "sha512-iWDa7KzJTMP3HNmrYxiYq/S6redk2qminx/9MwmKIN9jzm8mgts2Lj9lOg/t66YaDGky6JAvw4DhB2qW4ni6yQ==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/transformer-babel/-/transformer-babel-2.4.1.tgz", + "integrity": "sha512-S+L14Fdr+S/+hqOi2nqnhuJvBbEJW24KyQeLmdaoMkt7DQLy5zENjGb9U2WYgB0Q96au0vX8NgB6jOnONecnpg==", "dev": true, "requires": { - "@parcel/diagnostic": "2.4.0", - "@parcel/plugin": "2.4.0", + "@parcel/diagnostic": "2.4.1", + "@parcel/plugin": "2.4.1", "@parcel/source-map": "^2.0.0", - "@parcel/utils": "2.4.0", + "@parcel/utils": "2.4.1", "browserslist": "^4.6.6", "json5": "^2.2.0", "nullthrows": "^1.1.1", @@ -8540,29 +8561,29 @@ } }, "@parcel/transformer-css": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/transformer-css/-/transformer-css-2.4.0.tgz", - "integrity": "sha512-D2u48LuiQsQvbknABE0wVKFp9r6yCgWrHKEP1J6EJ31c49nXGXDHrpHJJwqq9BvAs/124eBI5mSsehTJyFEMwg==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/transformer-css/-/transformer-css-2.4.1.tgz", + "integrity": "sha512-+6wCc0eEg4ez96Mucp/RjYKyRVN+7HPWPH7axalsQdp88t7wawWoqI2nd2mEw2PxpyuejIsk0ixLzYZ5opZivw==", "dev": true, "requires": { - "@parcel/css": "^1.7.2", - "@parcel/diagnostic": "2.4.0", - "@parcel/plugin": "2.4.0", + "@parcel/css": "^1.7.4", + "@parcel/diagnostic": "2.4.1", + "@parcel/plugin": "2.4.1", "@parcel/source-map": "^2.0.0", - "@parcel/utils": "2.4.0", + "@parcel/utils": "2.4.1", "browserslist": "^4.6.6", "nullthrows": "^1.1.1" } }, "@parcel/transformer-html": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/transformer-html/-/transformer-html-2.4.0.tgz", - "integrity": "sha512-2/8X/o5QaCNVPr4wkxLCUub7v/YVvVN2L5yCEcTatNeFhNg/2iz7P2ekfqOaoDCHWZEOBT1VTwPbdBt+TMM71Q==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/transformer-html/-/transformer-html-2.4.1.tgz", + "integrity": "sha512-jyteTWuBA+f5wXn1RmAq3gOnB3yy41c748vARU9uNEXkLB4a7R106w4e5dlTG1DJfk+Tw1okSe1p2BeHoZntAw==", "dev": true, "requires": { - "@parcel/diagnostic": "2.4.0", - "@parcel/hash": "2.4.0", - "@parcel/plugin": "2.4.0", + "@parcel/diagnostic": "2.4.1", + "@parcel/hash": "2.4.1", + "@parcel/plugin": "2.4.1", "nullthrows": "^1.1.1", "posthtml": "^0.16.5", "posthtml-parser": "^0.10.1", @@ -8571,27 +8592,27 @@ } }, "@parcel/transformer-image": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/transformer-image/-/transformer-image-2.4.0.tgz", - "integrity": "sha512-JZkQvGGoGiD0AVKLIbAYYUWxepMmUaWZ4XXx71MmS/kA7cUDwTZ0CXq63YnSY1m+DX+ClTuTN8mBlwe2dkcGbA==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/transformer-image/-/transformer-image-2.4.1.tgz", + "integrity": "sha512-pOfgPVe13lMTKdzydjXXNl4bojVMmuQmwm44OZ9cmpwOD3phkZzCtrxgySoV1eRBCOipdQg1O6GGI3za1KNdvw==", "dev": true, "requires": { - "@parcel/plugin": "2.4.0", - "@parcel/workers": "2.4.0", + "@parcel/plugin": "2.4.1", + "@parcel/workers": "2.4.1", "nullthrows": "^1.1.1" } }, "@parcel/transformer-js": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/transformer-js/-/transformer-js-2.4.0.tgz", - "integrity": "sha512-eeLHFwv3jT3GmIxpLC7B8EXExGK0MFaK91HXljOMh6l8a+GlQYw27MSFQVtoXr0Olx9Uq2uvjXP1+zSsq3LQUQ==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/transformer-js/-/transformer-js-2.4.1.tgz", + "integrity": "sha512-39Y9RUuDk5dc09Z3Pgj8snQd5E8926IqOowdTLKNJr7EcmkwHdinbpI4EqgKnisOwX4NSzxUti1I2DHsP1QZHw==", "dev": true, "requires": { - "@parcel/diagnostic": "2.4.0", - "@parcel/plugin": "2.4.0", + "@parcel/diagnostic": "2.4.1", + "@parcel/plugin": "2.4.1", "@parcel/source-map": "^2.0.0", - "@parcel/utils": "2.4.0", - "@parcel/workers": "2.4.0", + "@parcel/utils": "2.4.1", + "@parcel/workers": "2.4.1", "@swc/helpers": "^0.3.6", "browserslist": "^4.6.6", "detect-libc": "^1.0.3", @@ -8601,25 +8622,25 @@ } }, "@parcel/transformer-json": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/transformer-json/-/transformer-json-2.4.0.tgz", - "integrity": "sha512-3nR+d39mbURoXIypDfVCaxpwL65qMV+h8SLD78up2uhaRGklHQfN7GuemR7L+mcVAgNrmwVvZHhyNjdgYwWqqg==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/transformer-json/-/transformer-json-2.4.1.tgz", + "integrity": "sha512-bAwKyWb2/Wm6GS7OpQg1lWgcq+VDBXTKy5oFGX3edbpZFsrb59Ln1v+1jI888zRq4ehDBybhx8WTxPKTJnU+jA==", "dev": true, "requires": { - "@parcel/plugin": "2.4.0", + "@parcel/plugin": "2.4.1", "json5": "^2.2.0" } }, "@parcel/transformer-postcss": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/transformer-postcss/-/transformer-postcss-2.4.0.tgz", - "integrity": "sha512-ijIa2x+dbKnJhr7zO5WlXkvuj832fDoGksMBk2DX3u2WMrbh2rqVWPpGFsDhESx7EAy38nUoV/5KUdrNqUmCEA==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/transformer-postcss/-/transformer-postcss-2.4.1.tgz", + "integrity": "sha512-I+jauarY5RlDUcd0zb9CC4GlpA7/+FqNSqCaGrM73aoszh6FNs4GiwD5tgy0pKOEASBZ0fBPmHEG1OBiVBXRGg==", "dev": true, "requires": { - "@parcel/diagnostic": "2.4.0", - "@parcel/hash": "2.4.0", - "@parcel/plugin": "2.4.0", - "@parcel/utils": "2.4.0", + "@parcel/diagnostic": "2.4.1", + "@parcel/hash": "2.4.1", + "@parcel/plugin": "2.4.1", + "@parcel/utils": "2.4.1", "clone": "^2.1.1", "nullthrows": "^1.1.1", "postcss-value-parser": "^4.2.0", @@ -8627,13 +8648,13 @@ } }, "@parcel/transformer-posthtml": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/transformer-posthtml/-/transformer-posthtml-2.4.0.tgz", - "integrity": "sha512-xoL3AzgtVeRRAo6bh0AHAYm9bt1jZ+HiH86/7oARj/uJs6Wd8kXK/DZf6fH+F87hj4e7bnjmDDc0GPVK0lPz1w==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/transformer-posthtml/-/transformer-posthtml-2.4.1.tgz", + "integrity": "sha512-DNtS41Sew940vnnqlFS0QK3ZbjQqCGT8JXkvwFojIrdH+3BW/n/9Hrtxj+X/bxrlwZlsRiqiRJ7crXp7TVhx2g==", "dev": true, "requires": { - "@parcel/plugin": "2.4.0", - "@parcel/utils": "2.4.0", + "@parcel/plugin": "2.4.1", + "@parcel/utils": "2.4.1", "nullthrows": "^1.1.1", "posthtml": "^0.16.5", "posthtml-parser": "^0.10.1", @@ -8642,45 +8663,45 @@ } }, "@parcel/transformer-raw": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/transformer-raw/-/transformer-raw-2.4.0.tgz", - "integrity": "sha512-fciFbNrzj0kLlDgr6OsI0PUv414rVygDWAsgbCCq4BexDkuemMs9f9FjMctx9B2VZlctE8dTT4RGkuQumTIpUg==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/transformer-raw/-/transformer-raw-2.4.1.tgz", + "integrity": "sha512-0PzdWJSGSTQ522aohymHEnq4GABy0mHSs+LkPZyMfNmX9ZAIyy6XuFJ9dz8nUmP4Nhn8qDvbRjoAYXR3XsGDGQ==", "dev": true, "requires": { - "@parcel/plugin": "2.4.0" + "@parcel/plugin": "2.4.1" } }, "@parcel/transformer-react-refresh-wrap": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/transformer-react-refresh-wrap/-/transformer-react-refresh-wrap-2.4.0.tgz", - "integrity": "sha512-9+f6sGOWkf0jyUQ1CuFWk+04Mq3KTOCU9kRiwCHX1YdUCv5uki6r9XUSpqiYodrV+L6w9CCwLvGMLCDHxtCxMg==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/transformer-react-refresh-wrap/-/transformer-react-refresh-wrap-2.4.1.tgz", + "integrity": "sha512-zF6pzj/BwSiD1jA/BHDCEJnKSIDekjblU+OWp1WpSjA1uYkJORuZ5knLcq6mXOQ8M2NCbOXosc1ru8071i8sYA==", "dev": true, "requires": { - "@parcel/plugin": "2.4.0", - "@parcel/utils": "2.4.0", + "@parcel/plugin": "2.4.1", + "@parcel/utils": "2.4.1", "react-refresh": "^0.9.0" } }, "@parcel/transformer-sass": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/transformer-sass/-/transformer-sass-2.4.0.tgz", - "integrity": "sha512-PBQEyAKRx/G7h7prTVE1a5p+CG0mmnS/32HIp3Odkha6l7kHyKMIsyvnkS89xJooq4a/quJyDCam6bbG/P9KZg==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/transformer-sass/-/transformer-sass-2.4.1.tgz", + "integrity": "sha512-MRvQw2RYARF/jzxlgg3TE1a1cEatWIoVDdODvgWSa/SBPobM1R3/g6Fs5UN7CcXi8EvVMZszCrwrQ+Mnw1KAFA==", "dev": true, "requires": { - "@parcel/plugin": "2.4.0", + "@parcel/plugin": "2.4.1", "@parcel/source-map": "^2.0.0", "sass": "^1.38.0" } }, "@parcel/transformer-svg": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/transformer-svg/-/transformer-svg-2.4.0.tgz", - "integrity": "sha512-D+yzVtSxtQML3d26fd/g4E/xYW68+OMbMUVLXORtoYMU42fnXQkJP6jGOdqy8Td+WORNY7EwVtQnESLwhBmolw==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/transformer-svg/-/transformer-svg-2.4.1.tgz", + "integrity": "sha512-E0XdXsZOnP7g9zvJskfvXeIHx9pKjPHtLKo/txmpjW1eXOmsFcRMVy6l4pFh+kBciAgiZOI6o1pVHt+Uf7ia/g==", "dev": true, "requires": { - "@parcel/diagnostic": "2.4.0", - "@parcel/hash": "2.4.0", - "@parcel/plugin": "2.4.0", + "@parcel/diagnostic": "2.4.1", + "@parcel/hash": "2.4.1", + "@parcel/plugin": "2.4.1", "nullthrows": "^1.1.1", "posthtml": "^0.16.5", "posthtml-parser": "^0.10.1", @@ -8689,31 +8710,31 @@ } }, "@parcel/types": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/types/-/types-2.4.0.tgz", - "integrity": "sha512-nysGIbBEnp+7R+tKTysdcTFOZDTCodsiXFeAhYQa5bhiOnG1l9gzhxQnE2OsdsgvMm40IOsgKprqvM/DbdLfnQ==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/types/-/types-2.4.1.tgz", + "integrity": "sha512-YqkiyGS8oiD89Z2lJP7sbjn0F0wlSJMAuqgqf7obeKj0zmZJS7n2xK0uUEuIlUO+Cbqgl0kCGsUSjuT8xcEqjg==", "dev": true, "requires": { - "@parcel/cache": "2.4.0", - "@parcel/diagnostic": "2.4.0", - "@parcel/fs": "2.4.0", - "@parcel/package-manager": "2.4.0", + "@parcel/cache": "2.4.1", + "@parcel/diagnostic": "2.4.1", + "@parcel/fs": "2.4.1", + "@parcel/package-manager": "2.4.1", "@parcel/source-map": "^2.0.0", - "@parcel/workers": "2.4.0", + "@parcel/workers": "2.4.1", "utility-types": "^3.10.0" } }, "@parcel/utils": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/utils/-/utils-2.4.0.tgz", - "integrity": "sha512-sdNo+mZqDZT8LJYB6WWRKa4wFVZcK6Zb5Jh6Du76QvXXwHbPIQNZgJBb6gd/Rbk4GLOp2tW7MnBfq6zP9E9E2g==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/utils/-/utils-2.4.1.tgz", + "integrity": "sha512-hmbrnPtFAfMT6s9FMMIVlIzCwEFX/+byB67GoJmSCAMRmj6RMu4a6xKlv2FdzkTKJV2ucg8vxAcua0MQ/q8rkQ==", "dev": true, "requires": { - "@parcel/codeframe": "2.4.0", - "@parcel/diagnostic": "2.4.0", - "@parcel/hash": "2.4.0", - "@parcel/logger": "2.4.0", - "@parcel/markdown-ansi": "2.4.0", + "@parcel/codeframe": "2.4.1", + "@parcel/diagnostic": "2.4.1", + "@parcel/hash": "2.4.1", + "@parcel/logger": "2.4.1", + "@parcel/markdown-ansi": "2.4.1", "@parcel/source-map": "^2.0.0", "chalk": "^4.1.0" } @@ -8729,15 +8750,15 @@ } }, "@parcel/workers": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/workers/-/workers-2.4.0.tgz", - "integrity": "sha512-eSFyvEoXXPgFzQfKIlpkUjpHfIbezUCRFTPKyJAKCxvU5DSXOpb1kz5vDESWQ4qTZXKnrKvxS1PPWN6bam9z0g==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/workers/-/workers-2.4.1.tgz", + "integrity": "sha512-EYujbJOblFqIt2NGQ+baIYTuavJqbhy84IfZ3j0jmACeKO5Ew1EHXZyl9LJgWHKaIPZsnvnbxw2mDOF05K65xQ==", "dev": true, "requires": { - "@parcel/diagnostic": "2.4.0", - "@parcel/logger": "2.4.0", - "@parcel/types": "2.4.0", - "@parcel/utils": "2.4.0", + "@parcel/diagnostic": "2.4.1", + "@parcel/logger": "2.4.1", + "@parcel/types": "2.4.1", + "@parcel/utils": "2.4.1", "chrome-trace-event": "^1.0.2", "nullthrows": "^1.1.1" } @@ -9249,10 +9270,24 @@ "dev": true }, "builtins": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", - "integrity": "sha1-y5T662HIaWRR2zZTThQi+U8K7og=", - "dev": true + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.0.tgz", + "integrity": "sha512-aizhtbxgT1Udg0Fj6GssXshAVK+nxbtCV+1OtTrMNy67jffDFBY6CUBAkhO4owbleAx6fdbnWdpsmmcXydbzNw==", + "dev": true, + "requires": { + "semver": "^7.0.0" + }, + "dependencies": { + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } }, "cacache": { "version": "16.0.3", @@ -9281,9 +9316,9 @@ }, "dependencies": { "lru-cache": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.7.1.tgz", - "integrity": "sha512-cRffBiTW8s73eH4aTXqBcTLU0xQnwGV3/imttRHGWCrbergmnK4D6JXQd8qin5z43HnDwRI+o7mVW0LEB+tpAw==", + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.7.3.tgz", + "integrity": "sha512-WY9wjJNQt9+PZilnLbuFKM+SwDull9+6IAguOrarOMoOHTcJ9GnXSO11+Gw6c7xtDkBkthR57OZMtZKYr+1CEw==", "dev": true } } @@ -9330,9 +9365,9 @@ "dev": true }, "caniuse-lite": { - "version": "1.0.30001322", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001322.tgz", - "integrity": "sha512-neRmrmIrCGuMnxGSoh+x7zYtQFFgnSY2jaomjU56sCkTA6JINqQrxutF459JpWcWRajvoyn95sOXq4Pqrnyjew==" + "version": "1.0.30001323", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001323.tgz", + "integrity": "sha512-e4BF2RlCVELKx8+RmklSEIVub1TWrmdhvA5kEUueummz1XyySW0DVk+3x9HyhU9MuWTa2BhqLgEuEmUwASAdCA==" }, "caseless": { "version": "0.12.0", @@ -9621,9 +9656,9 @@ } }, "css-what": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.0.1.tgz", - "integrity": "sha512-z93ZGFLNc6yaoXAmVhqoSIb+BduplteCt1fepvwhBUQK6MNE4g6fgjpuZKJKp0esUe+vXWlIkwZZjNWoOKw0ZA==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", "dev": true }, "csso": { @@ -9899,9 +9934,9 @@ } }, "electron-to-chromium": { - "version": "1.4.98", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.98.tgz", - "integrity": "sha512-1IdsuSAnIGVxoYT1LkcUFb9MfjRxdHhCU9qiaDzhl1XvYgK9c8E2O9aJOPgGMQ68CSI8NxmLwrYhjvGauT8yuw==", + "version": "1.4.103", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.103.tgz", + "integrity": "sha512-c/uKWR1Z/W30Wy/sx3dkZoj4BijbXX85QKWu9jJfjho3LBAXNEGAEW3oWiGb+dotA6C6BzCTxL2/aLes7jlUeg==", "dev": true }, "emoji-regex": { @@ -11305,9 +11340,9 @@ } }, "make-fetch-happen": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.1.0.tgz", - "integrity": "sha512-HeP4QlkadP/Op+hE+Une1070kcyN85FshQObku3/rmzRh4zDcKXA19d2L3AQR6UoaX3uZmhSOpTLH15b1vOFvQ==", + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.1.1.tgz", + "integrity": "sha512-3/mCljDQNjmrP7kl0vhS5WVlV+TvSKoZaFhdiYV7MOijEnrhrjaVnqbp/EY/7S+fhUB2KpH7j8c1iRsIOs+kjw==", "dev": true, "requires": { "agentkeepalive": "^4.2.1", @@ -11329,9 +11364,9 @@ }, "dependencies": { "lru-cache": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.7.1.tgz", - "integrity": "sha512-cRffBiTW8s73eH4aTXqBcTLU0xQnwGV3/imttRHGWCrbergmnK4D6JXQd8qin5z43HnDwRI+o7mVW0LEB+tpAw==", + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.7.3.tgz", + "integrity": "sha512-WY9wjJNQt9+PZilnLbuFKM+SwDull9+6IAguOrarOMoOHTcJ9GnXSO11+Gw6c7xtDkBkthR57OZMtZKYr+1CEw==", "dev": true } } @@ -11582,9 +11617,9 @@ } }, "node-gyp-build": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.3.0.tgz", - "integrity": "sha512-iWjXZvmboq0ja1pUGULQBexmxq8CV4xBhX7VDOTbL7ZR4FOowwY/VOtRxBN/yKxmdGoIp4j5ysNT4u3S2pDQ3Q==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.4.0.tgz", + "integrity": "sha512-amJnQCcgtRVw9SvoebO3BKGESClrfXGCUTX9hSn1OuGQTQBOZmVd0Z0OlecpuRksKvbsUqALE8jls/ErClAPuQ==", "dev": true }, "node-releases": { @@ -11624,9 +11659,9 @@ }, "dependencies": { "lru-cache": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.7.1.tgz", - "integrity": "sha512-cRffBiTW8s73eH4aTXqBcTLU0xQnwGV3/imttRHGWCrbergmnK4D6JXQd8qin5z43HnDwRI+o7mVW0LEB+tpAw==", + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.7.3.tgz", + "integrity": "sha512-WY9wjJNQt9+PZilnLbuFKM+SwDull9+6IAguOrarOMoOHTcJ9GnXSO11+Gw6c7xtDkBkthR57OZMtZKYr+1CEw==", "dev": true } } @@ -11762,14 +11797,14 @@ "dev": true }, "npm-package-arg": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.0.1.tgz", - "integrity": "sha512-Xs9wznfEAmZAR61qsYH3iN24V/qMYYkvAR5CRQNMvC6PjN2fHtO8y9XP/xdp5K+Icx+u1wMBMgWRPCmAEChSog==", + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.0.2.tgz", + "integrity": "sha512-v/miORuX8cndiOheW8p2moNuPJ7QhcFh9WGlTorruG8hXSA23vMTEp5hTCmDxic0nD8KHhj/NQgFuySD3GYY3g==", "dev": true, "requires": { "hosted-git-info": "^5.0.0", "semver": "^7.3.5", - "validate-npm-package-name": "^3.0.0" + "validate-npm-package-name": "^4.0.0" }, "dependencies": { "hosted-git-info": { @@ -11782,9 +11817,9 @@ }, "dependencies": { "lru-cache": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.7.1.tgz", - "integrity": "sha512-cRffBiTW8s73eH4aTXqBcTLU0xQnwGV3/imttRHGWCrbergmnK4D6JXQd8qin5z43HnDwRI+o7mVW0LEB+tpAw==", + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.7.3.tgz", + "integrity": "sha512-WY9wjJNQt9+PZilnLbuFKM+SwDull9+6IAguOrarOMoOHTcJ9GnXSO11+Gw6c7xtDkBkthR57OZMtZKYr+1CEw==", "dev": true } } @@ -12019,21 +12054,21 @@ } }, "parcel": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/parcel/-/parcel-2.4.0.tgz", - "integrity": "sha512-dPWpu4RnxG9HqiLvaF8COEWEnT/KrigrC6PyPaQ0zEgpBfp7/jzXZFBVaZk2N+lpvrbNEYMjN9bv5UQGJJszIw==", - "dev": true, - "requires": { - "@parcel/config-default": "2.4.0", - "@parcel/core": "2.4.0", - "@parcel/diagnostic": "2.4.0", - "@parcel/events": "2.4.0", - "@parcel/fs": "2.4.0", - "@parcel/logger": "2.4.0", - "@parcel/package-manager": "2.4.0", - "@parcel/reporter-cli": "2.4.0", - "@parcel/reporter-dev-server": "2.4.0", - "@parcel/utils": "2.4.0", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/parcel/-/parcel-2.4.1.tgz", + "integrity": "sha512-H8n7cJ0rOt0AZZLuPuG6hvujUWiWz8kxx4pkqEDm31dijrbKb0pNgccXOllQ34em6r7elv6yH7lxox8jDCp0hw==", + "dev": true, + "requires": { + "@parcel/config-default": "2.4.1", + "@parcel/core": "2.4.1", + "@parcel/diagnostic": "2.4.1", + "@parcel/events": "2.4.1", + "@parcel/fs": "2.4.1", + "@parcel/logger": "2.4.1", + "@parcel/package-manager": "2.4.1", + "@parcel/reporter-cli": "2.4.1", + "@parcel/reporter-dev-server": "2.4.1", + "@parcel/utils": "2.4.1", "chalk": "^4.1.0", "commander": "^7.0.0", "get-port": "^4.2.0", @@ -12175,9 +12210,9 @@ } }, "preact": { - "version": "10.6.6", - "resolved": "https://registry.npmjs.org/preact/-/preact-10.6.6.tgz", - "integrity": "sha512-dgxpTFV2vs4vizwKohYKkk7g7rmp1wOOcfd4Tz3IB3Wi+ivZzsn/SpeKJhRENSE+n8sUfsAl4S3HiCVT923ABw==" + "version": "10.7.0", + "resolved": "https://registry.npmjs.org/preact/-/preact-10.7.0.tgz", + "integrity": "sha512-9MEURwzNMKpAil/t6+wabDIJI6oG6GnwypYxiJDvQnW+fHDTt51PYuLZ1QUM31hFr7sDaj9qTaShAF9VIxuxGQ==" }, "prelude-ls": { "version": "1.2.1", @@ -12512,9 +12547,9 @@ "dev": true }, "sass": { - "version": "1.49.9", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.49.9.tgz", - "integrity": "sha512-YlYWkkHP9fbwaFRZQRXgDi3mXZShslVmmo+FVK3kHLUELHHEYrCmL1x6IUjC7wLS6VuJSAFXRQS/DxdsC4xL1A==", + "version": "1.49.10", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.49.10.tgz", + "integrity": "sha512-w37zfWJwKu4I78U4z63u1mmgoncq+v3iOB4yzQMPyAPVHHawaQSnu9C9ysGQnZEhW609jkcLioJcMCqm75JMdg==", "dev": true, "requires": { "chokidar": ">=3.0.0 <4.0.0", @@ -13104,12 +13139,12 @@ } }, "validate-npm-package-name": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", - "integrity": "sha1-X6kS2B630MdK/BQN5zF/DKffQ34=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-4.0.0.tgz", + "integrity": "sha512-mzR0L8ZDktZjpX4OB46KT+56MAhl4EIazWP/+G/HPGuvfdaqg4YsCdtOm6U9+LOFyYDoh4dpnpxZRB9MQQns5Q==", "dev": true, "requires": { - "builtins": "^1.0.3" + "builtins": "^5.0.0" } }, "verror": { From ca7f0be4155be3f6dbad6a413825516fb7eb3333 Mon Sep 17 00:00:00 2001 From: Lars Eggert <lars@eggert.org> Date: Mon, 4 Apr 2022 11:16:40 +0300 Subject: [PATCH 15/26] Make tmp path more readable --- ietf/utils/test_runner.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ietf/utils/test_runner.py b/ietf/utils/test_runner.py index 3830b4d1782..770df0de561 100644 --- a/ietf/utils/test_runner.py +++ b/ietf/utils/test_runner.py @@ -797,9 +797,9 @@ def validate(self, kind): tmpdir = tempfile.TemporaryDirectory(prefix="html-validate-") for (name, content, fingerprint) in self.batches[kind]: path = pathlib.Path(tmpdir.name).joinpath( + hex(fingerprint)[2:], pathlib.Path(name).relative_to(cwd) ) - path = path.with_name(path.stem + "-" + hex(fingerprint) + path.suffix) pathlib.Path(path.parent).mkdir(parents=True, exist_ok=True) with path.open(mode="w") as file: file.write(content) @@ -833,7 +833,7 @@ def validate(self, kind): errors += ( f'\n{result["filePath"]}:\n' + "".join(source_lines[line - 5 : line]) - + " " * (msg["column"] - 1) + + "-" * (msg["column"] - 1) + "^" * msg["size"] + f' {msg["ruleId"]}: {msg["message"]} ' + f'on line {line}:{msg["column"]}\n' From e0f75a10e178af014f3a22d28269a6a7550f9051 Mon Sep 17 00:00:00 2001 From: Lars Eggert <lars@eggert.org> Date: Mon, 4 Apr 2022 11:19:59 +0300 Subject: [PATCH 16/26] More HTML fixes --- ietf/doc/tests_draft.py | 4 +-- ietf/doc/views_charter.py | 4 +-- ietf/group/tests_info.py | 2 +- ietf/ietfauth/views.py | 8 ++--- ietf/liaisons/widgets.py | 10 +++---- ietf/secr/templates/meetings/blue_sheet.html | 5 ++-- .../proceedings/interim_directory.html | 4 +-- ietf/static/css/ietf.scss | 21 +++++++++++++ ietf/static/js/ietf.js | 2 +- ietf/static/js/liaisons.js | 2 +- .../doc/charter/review_announcement_text.html | 21 +++++++------ ietf/templates/doc/draft/change_state.html | 8 ++--- .../doc/draft/change_stream_state.html | 2 +- ietf/templates/doc/draft/release_draft.html | 2 +- ietf/templates/doc/edit_authors.html | 2 +- .../templates/doc/review/complete_review.html | 4 +-- ietf/templates/doc/review/request_info.html | 2 +- .../doc/search/search_result_row.html | 4 +++ .../group/change_reviewer_settings.html | 2 +- ietf/templates/group/customize_workflow.html | 5 ++-- ietf/templates/group/edit_milestones.html | 9 +++--- ietf/templates/group/group_about.html | 2 +- .../group/group_about_rendertest.html | 4 +-- .../group/manage_review_requests.html | 2 +- ietf/templates/group/meetings-row.html | 2 ++ ietf/templates/group/meetings.html | 1 + .../group/reset_charter_milestones.html | 3 +- ietf/templates/group/review_requests.html | 30 +++++++++---------- ietf/templates/group/reviewer_overview.html | 17 ++++++----- .../iesg/moderator_conflict_doc.html | 2 +- ietf/templates/ipr/details_view.html | 2 +- ietf/templates/meeting/floor-plan.html | 12 +++----- ietf/templates/person/photo.html | 8 ++--- ietf/templates/registration/edit_profile.html | 16 ++++++---- ietf/templates/review/unavailable_table.html | 2 ++ 35 files changed, 128 insertions(+), 98 deletions(-) diff --git a/ietf/doc/tests_draft.py b/ietf/doc/tests_draft.py index 06cf953c8bd..be29535d87c 100644 --- a/ietf/doc/tests_draft.py +++ b/ietf/doc/tests_draft.py @@ -106,7 +106,7 @@ def test_change_state(self): self.assertEqual(len(q('form select[name=state]')), 1) if next_states: - self.assertEqual(len(q('[type=submit][value="%s"]' % next_states[0].name)), 1) + self.assertEqual(len(q('[type=submit]:contains("%s")' % next_states[0].name)), 1) # faulty post @@ -148,7 +148,7 @@ def test_change_state(self): r = self.client.get(url) self.assertEqual(r.status_code, 200) q = PyQuery(r.content) - self.assertEqual(len(q('form [type=submit][value="%s"]' % first_state.name)), 1) + self.assertEqual(len(q('form [type=submit]:contains("%s")' % first_state.name)), 1) def test_pull_from_rfc_queue(self): ad = Person.objects.get(user__username="ad") diff --git a/ietf/doc/views_charter.py b/ietf/doc/views_charter.py index 3e25d23eb06..c2b88ac4730 100644 --- a/ietf/doc/views_charter.py +++ b/ietf/doc/views_charter.py @@ -556,8 +556,8 @@ def review_announcement_text(request, name): (existing, existing_new_work) = default_review_text(group, charter, by) existing.save() existing_new_work.save() - form = ReviewAnnouncementTextForm(initial=dict(announcement_text=existing.text, - new_work_text=existing_new_work.text)) + form = ReviewAnnouncementTextForm(initial=dict(announcement_text=escape(existing.text), + new_work_text=escape(existing_new_work.text))) if any(x in request.POST for x in ['send_annc_only','send_nw_only','send_both']) and form.is_valid(): if any(x in request.POST for x in ['send_annc_only','send_both']): diff --git a/ietf/group/tests_info.py b/ietf/group/tests_info.py index 988956ca3ce..0cb9cfc62ad 100644 --- a/ietf/group/tests_info.py +++ b/ietf/group/tests_info.py @@ -1527,7 +1527,7 @@ def test_can_switch_date_types_for_initial_charter(self): r = self.client.get(url) self.assertEqual(r.status_code, 200) q = PyQuery(r.content) - self.assertEqual(q('#switch-date-use-form button').attr('style'), 'display:none;') + self.assertTrue(q('#switch-date-use-form button').hasClass('d-none')) ms.group.charter.rev='00-00' ms.group.charter.save() diff --git a/ietf/ietfauth/views.py b/ietf/ietfauth/views.py index 6a087145b8c..e359969baad 100644 --- a/ietf/ietfauth/views.py +++ b/ietf/ietfauth/views.py @@ -744,17 +744,17 @@ def login(request, extra_context=None): logout(request) response = render(request, 'registration/missing_person.html') if require_consent: - messages.warning(request, mark_safe(""" + messages.warning(request, mark_safe(''' You have personal information associated with your account which is not derived from draft submissions or other ietf work, namely: %s. Please go - to your <a href='/accounts/profile'>account profile</a> and review your - personal information, then scoll to the bottom and check the 'confirm' + to your <a href="/accounts/profile">account profile</a> and review your + personal information, then scoll to the bottom and check the "confirm" checkbox and submit the form, in order to to indicate that that the provided personal information may be used and displayed within the IETF datatracker. - """ % ', '.join(require_consent))) + ''' % ', '.join(require_consent))) return response @login_required diff --git a/ietf/liaisons/widgets.py b/ietf/liaisons/widgets.py index 1630f9574ee..edf048352c6 100644 --- a/ietf/liaisons/widgets.py +++ b/ietf/liaisons/widgets.py @@ -18,13 +18,13 @@ def __init__(self, *args, **kwargs): super(ButtonWidget, self).__init__(*args, **kwargs) def render(self, name, value, **kwargs): - html = '<span style="display: none;" class="showAttachsOn">%s</span>' % conditional_escape(self.show_on) - html += '<span style="display: none;" class="attachEnabledLabel">%s</span>' % conditional_escape(self.label) + html = '<span class="d-none showAttachsOn">%s</span>' % conditional_escape(self.show_on) + html += '<span class="d-none attachEnabledLabel">%s</span>' % conditional_escape(self.label) if self.require: for i in self.require: - html += '<span style="display: none;" class="attachRequiredField">%s</span>' % conditional_escape(i) + html += '<span class="d-none attachRequiredField">%s</span>' % conditional_escape(i) required_str = 'Please fill in %s to attach a new file' % conditional_escape(self.required_label) - html += '<span style="display: none;" class="attachDisabledLabel">%s</span>' % conditional_escape(required_str) + html += '<span class="d-none attachDisabledLabel">%s</span>' % conditional_escape(required_str) html += '<input type="button" class="addAttachmentWidget btn btn-primary btn-sm" value="%s">' % conditional_escape(self.label) return mark_safe(html) @@ -32,7 +32,7 @@ def render(self, name, value, **kwargs): class ShowAttachmentsWidget(Widget): def render(self, name, value, **kwargs): html = '<div id="id_%s">' % name - html += '<span style="display: none;" class="showAttachmentsEmpty form-control widget">No files attached</span>' + html += '<span class="d-none showAttachmentsEmpty form-control widget">No files attached</span>' html += '<div class="attachedFiles form-control widget">' if value and isinstance(value, QuerySet): for attachment in value: diff --git a/ietf/secr/templates/meetings/blue_sheet.html b/ietf/secr/templates/meetings/blue_sheet.html index f3b01eb756f..6f5f629992b 100644 --- a/ietf/secr/templates/meetings/blue_sheet.html +++ b/ietf/secr/templates/meetings/blue_sheet.html @@ -21,7 +21,7 @@ <h2>IETF {{ meeting.number }} - Blue Sheet</h2> <p>Use this to generate blue sheets for meeting sessions.</p> <ul class="none"> <li> - <form style="display:inline" method="post" action="{% url "ietf.secr.meetings.views.blue_sheet_generate" meeting_id=meeting.number%}">{% csrf_token %} + <form class="d-inline" method="post" action="{% url "ietf.secr.meetings.views.blue_sheet_generate" meeting_id=meeting.number%}">{% csrf_token %} <input type="submit" value="Generate Blue Sheets"> </form>   Last run: @@ -45,5 +45,4 @@ <h2>IETF {{ meeting.number }} - Blue Sheet</h2> </p> </div> <!-- module --> -{% endblock %} - +{% endblock %} \ No newline at end of file diff --git a/ietf/secr/templates/proceedings/interim_directory.html b/ietf/secr/templates/proceedings/interim_directory.html index e3866253973..d04f70e9dcf 100644 --- a/ietf/secr/templates/proceedings/interim_directory.html +++ b/ietf/secr/templates/proceedings/interim_directory.html @@ -12,7 +12,7 @@ <h2>Interim Meeting Proceedings</h2> </tr> {% for meeting in meetings %} <tr class="{% cycle 'row1' 'row2' %}"> - <td class="text-start" style="white-space: nowrap">{{ meeting.date }}</td> + <td class="text-start text-nowrap">{{ meeting.date }}</td> <td><a href="https://datatracker.ietf.org/wg/{{ meeting.group.acronym }}">{{ meeting.group.acronym }}</a></td> {% if meeting.schedule %} <td class="text-center"><a href="{{ meeting.schedule.get_absolute_url }}">Agenda</a></td> @@ -33,4 +33,4 @@ <h2>Interim Meeting Proceedings</h2> {% endfor %} </table> -{% endblock %} +{% endblock %} \ No newline at end of file diff --git a/ietf/static/css/ietf.scss b/ietf/static/css/ietf.scss index 571a5c78cb0..e2378b81314 100644 --- a/ietf/static/css/ietf.scss +++ b/ietf/static/css/ietf.scss @@ -149,6 +149,27 @@ table tbody.meta { max-width: 300px; } +// Style the photo cards +.photo { + width: 13em; + + .card-img-top { + object-fit: cover; + height: 15em; + } + + .photo-placeholder { + height: 15em; + font-size: 12em; + } +} + +// Style the righthand navigation panel +#righthand-nav { + height: 70vh; + width: inherit; +} + // Add some padding when there are multiple buttons in a line than can wrap .buttonlist .btn { margin-top: map.get($spacers, 2); diff --git a/ietf/static/js/ietf.js b/ietf/static/js/ietf.js index 60e7e928756..a63fd09a6de 100644 --- a/ietf/static/js/ietf.js +++ b/ietf/static/js/ietf.js @@ -182,7 +182,7 @@ $(function () { .attr("tabindex", 0) .after($(` <div class="col-xl-2 ps-0 small"> - <nav id="righthand-nav" class="position-fixed navbar navbar-light bg-light overflow-auto flex-fill" style="height: 70vh; width: inherit;"> + <nav id="righthand-nav" class="position-fixed navbar navbar-light bg-light overflow-auto flex-fill"> </nav> </div> `)) diff --git a/ietf/static/js/liaisons.js b/ietf/static/js/liaisons.js index dc2908a7e73..e7a76660c96 100644 --- a/ietf/static/js/liaisons.js +++ b/ietf/static/js/liaisons.js @@ -64,7 +64,7 @@ var attachmentWidget = { } else { html += ' ' + field.val(); } - html += '<span style="display: none;" class="removeField">'; + html += '<span class="d-none removeField">'; html += container.attr('id'); html += '</span>'; container.hide(); diff --git a/ietf/templates/doc/charter/review_announcement_text.html b/ietf/templates/doc/charter/review_announcement_text.html index fef71dffab5..1e2542edb47 100644 --- a/ietf/templates/doc/charter/review_announcement_text.html +++ b/ietf/templates/doc/charter/review_announcement_text.html @@ -18,18 +18,21 @@ <h1> <button type="submit" class="btn btn-warning" name="regenerate_text" value="Regenerate">Regenerate </button> {% if user|has_role:"Secretariat" %} - <input type="submit" + <button type="submit" class="btn btn-primary" - name="send_annc_only" - value="Send only to IETF-Announce"> - <input type="submit" + name="send_annc_only"> + Send only to IETF-Announce + </button> + <button type="submit" class="btn btn-primary" - name="send_nw_only" - value="Send only to New-Work"> - <input type="submit" + name="send_nw_only"> + Send only to New-Work + </button> + <button type="submit" class="btn btn-primary" - name="send_both" - value="Send to both"> + name="send_both"> + Send to both + </button> {% endif %} <a class="btn btn-secondary float-end" href="{{ back_url }}">Back</a> </form> diff --git a/ietf/templates/doc/draft/change_state.html b/ietf/templates/doc/draft/change_state.html index 5c789cc058e..b993552ba4f 100644 --- a/ietf/templates/doc/draft/change_state.html +++ b/ietf/templates/doc/draft/change_state.html @@ -34,7 +34,7 @@ <h1> <form class="d-inline" method="post"> {% csrf_token %} <input type="hidden" name="state" value="{{ n.pk }}"> - <input class="btn btn-primary" type="submit" value="{{ n.name }}"> + <button class="btn btn-primary" type="submit">{{ n.name }}</button> </form> {% endfor %} {% endif %} @@ -45,7 +45,7 @@ <h1> <form method="post"> {% csrf_token %} <input type="hidden" name="state" value="{{ to_iesg_eval.pk }}"> - <input class="btn btn-warning" type="submit" value="{{ to_iesg_eval.name }}"> + <button class="btn btn-warning" type="submit">{{ to_iesg_eval.name }}</button> But the ballot for this document has not yet been issued. <a class="btn btn-primary" href="{% url 'ietf.doc.views_ballot.ballot_writeupnotes' name=doc.name %}"> @@ -60,9 +60,7 @@ <h1> <form method="post"> {% csrf_token %} <input type="hidden" name="state" value="{{ prev_state.pk }}"> - <input class="btn btn-warning" - type="submit" - value="Revert to {{ prev_state.name }}"> + <button class="btn btn-warning" type="submit">Revert to {{ prev_state.name }}</button> </form> {% endif %} {% endblock %} \ No newline at end of file diff --git a/ietf/templates/doc/draft/change_stream_state.html b/ietf/templates/doc/draft/change_stream_state.html index 3e1cbe74d90..01aa8605d52 100644 --- a/ietf/templates/doc/draft/change_stream_state.html +++ b/ietf/templates/doc/draft/change_stream_state.html @@ -17,7 +17,7 @@ <h1> <b>Move document to {{ next_states|pluralize:"to one of" }} the recommended next state{{ next_states|pluralize }}:</b> </p> {% for state in next_states %} - <button class="btn btn-primary next-state" data-state="{{ state.pk }}">{{ state.name }}</button> + <button type="button" class="btn btn-primary next-state" data-state="{{ state.pk }}">{{ state.name }}</button> {% endfor %} {% endif %} <form class="mt-5" method="post"> diff --git a/ietf/templates/doc/draft/release_draft.html b/ietf/templates/doc/draft/release_draft.html index 37efb955896..ed56291dc6f 100644 --- a/ietf/templates/doc/draft/release_draft.html +++ b/ietf/templates/doc/draft/release_draft.html @@ -20,7 +20,7 @@ <h1> It may also be appropriate if the group is abandoning the document. {% endif %} </div> - <form method='post'> + <form method="post"> {% csrf_token %} {% bootstrap_form form %} <button type="submit" class="btn btn-warning">Release</button> diff --git a/ietf/templates/doc/edit_authors.html b/ietf/templates/doc/edit_authors.html index 25921b22ef7..ed28855e405 100644 --- a/ietf/templates/doc/edit_authors.html +++ b/ietf/templates/doc/edit_authors.html @@ -36,7 +36,7 @@ <h1> </div> {% endfor %} </div> - <div id="empty-author-form" class="template" style="display: none;"> + <div id="empty-author-form" class="template d-none"> <div class="card author-panel mb-3"> <div role="button" class="handle card-header"> <i class="bi bi-list"></i> diff --git a/ietf/templates/doc/review/complete_review.html b/ietf/templates/doc/review/complete_review.html index b670266536e..ca33ccf22cb 100644 --- a/ietf/templates/doc/review/complete_review.html +++ b/ietf/templates/doc/review/complete_review.html @@ -94,7 +94,7 @@ <h1> {% else %} <a class="btn btn-secondary float-end" href="{{ doc.get_absolute_url }}">Back</a> {% endif %} - <div class="template" style="display:none"> + <div class="template d-none"> {% if mail_archive_query_urls %} <div class="mail-archive-search"> <div class="offset-md-2 col-md-10"> @@ -134,7 +134,7 @@ <h1> {% endif %} </div> {% spaceless %} - <div class="template" style="display:none"> + <div class="template d-none"> <button type="button" class="mail-archive-search-result list-group-item"> <small class="date float-end"> </small> <small class="from float-end"> </small> diff --git a/ietf/templates/doc/review/request_info.html b/ietf/templates/doc/review/request_info.html index 78508f018a7..5a647baf8d7 100644 --- a/ietf/templates/doc/review/request_info.html +++ b/ietf/templates/doc/review/request_info.html @@ -193,7 +193,7 @@ </a> {% endif %} {% if assignment.can_accept_reviewer_assignment %} - <form style="display:inline" + <form class="d-inline" method="post" action="{% url "ietf.doc.views_review.review_request" name=doc.name request_id=review_req.pk %}"> {% csrf_token %} diff --git a/ietf/templates/doc/search/search_result_row.html b/ietf/templates/doc/search/search_result_row.html index e8418100b45..44abe6d7c48 100644 --- a/ietf/templates/doc/search/search_result_row.html +++ b/ietf/templates/doc/search/search_result_row.html @@ -15,11 +15,13 @@ {% if user.is_authenticated %} <a href="{% url "ietf.community.views.untrack_document" username=request.user.username name=doc.name %}" class="track-untrack-doc {% if not doc.tracked_in_personal_community_list %}visually-hidden{% endif %}" + aria-label="Remove from your personal ID list" title="Remove from your personal ID list"> <i class="bi bi-bookmark-check-fill"></i> </a> <a href="{% url "ietf.community.views.track_document" username=request.user.username name=doc.name %}" class="track-untrack-doc {% if doc.tracked_in_personal_community_list %}visually-hidden{% endif %}" + aria-label="Add to your personal ID list" title="Add to your personal ID list"> <i class="bi bi-bookmark"></i> </a> @@ -28,11 +30,13 @@ {% if user.review_teams %} <a class="review-wish-add-remove-doc ajax {% if not doc.has_review_wish %}visually-hidden{% endif %}" href="{% url "ietf.doc.views_review.review_wishes_remove" name=doc.name %}?next={{ request.get_full_path|urlencode }}" + aria-label="Remove from your review wishes for all teams" title="Remove from your review wishes for all teams"> <i class="bi bi-chat-left-heart-fill"></i> </a> <a class="review-wish-add-remove-doc {% if user.review_teams|length_is:"1" %}ajax {% endif %} {% if doc.has_review_wish %}visually-hidden{% endif %}" href="{% url "ietf.doc.views_review.review_wish_add" name=doc.name %}?next={{ request.get_full_path|urlencode }}" + aria-label="Add to your review wishes" title="Add to your review wishes"> <i class="bi bi-chat-left-heart"></i> </a> diff --git a/ietf/templates/group/change_reviewer_settings.html b/ietf/templates/group/change_reviewer_settings.html index f7611b3cc5a..91964ff3c9c 100644 --- a/ietf/templates/group/change_reviewer_settings.html +++ b/ietf/templates/group/change_reviewer_settings.html @@ -148,7 +148,7 @@ <h2 class="mt-5">History of unavailable periods</h2> {% endif %} </table> </div> - <p style="padding-top: 2em;"> + <p class="mt-3"> <a href="{{ back_url }}" class="btn btn-primary"> Back </a> diff --git a/ietf/templates/group/customize_workflow.html b/ietf/templates/group/customize_workflow.html index 3cb2ef872d5..4a8cd5b0adf 100644 --- a/ietf/templates/group/customize_workflow.html +++ b/ietf/templates/group/customize_workflow.html @@ -62,6 +62,7 @@ <h2 class="mt-5">States</h2> {% endif %} <br> <button class="btn btn-primary btn-sm {% if not state.used %}disabled{% endif %}" + type="button" data-bs-toggle="collapse" data-bs-target="#nexts{{ state.pk }}" aria-expanded="false" @@ -75,8 +76,8 @@ <h2 class="mt-5">States</h2> <label>Select the next states:</label> {% for checked, default, s in state.next_states_checkboxes %} <div class="form-check {% if not s.used %}inactive{% endif %}"> - <input class="form-check-input" type="checkbox" name="next_states" value="{{ s.pk }}" {% if checked %} checked{% endif %}> - <label class="form-check-label"> + <input class="form-check-input" type="checkbox" name="next_states" value="{{ s.pk }}" id="id-{{ s.pk }}-{{ state.pk }}" {% if checked %} checked{% endif %}> + <label class="form-check-label" for="id-{{ s.pk }}-{{ state.pk }}"> {{ s.name }} {% if default %}<span class="badge bg-secondary">Default</span>{% endif %} </label> diff --git a/ietf/templates/group/edit_milestones.html b/ietf/templates/group/edit_milestones.html index 508b2132b85..d958e34059d 100644 --- a/ietf/templates/group/edit_milestones.html +++ b/ietf/templates/group/edit_milestones.html @@ -10,7 +10,7 @@ {% block content %} {% origin %} <h1>{{ title }}</h1> - <form class="my-3" method="post" id="switch-date-use-form"> + {% if can_change_uses_milestone_dates %}<form class="my-3" method="post" id="switch-date-use-form">{% endif %} <a class="btn btn-primary" href="{{ group.about_url }}">{{ group.acronym }} {{ group.type.name }}</a> {% if group.charter %} <a class="btn btn-primary" @@ -20,11 +20,10 @@ <h1>{{ title }}</h1> {% endif %} {% if can_change_uses_milestone_dates %} {% csrf_token %} - <button class="btn btn-primary" + <button class="btn btn-primary {% if milestone_set == 'charter' and not group.charter.rev == '00-00' %} d-none{% endif %}" type="submit" name="action" - value="switch" - {% if milestone_set == 'charter' and not group.charter.rev == '00-00' %} style="display:none;"{% endif %}> + value="switch"> {% if group.uses_milestone_dates %} Stop {% else %} @@ -33,7 +32,7 @@ <h1>{{ title }}</h1> using milestone dates </button> {% endif %} - </form> + {% if can_change_uses_milestone_dates %}</form>{% endif %} <p class="alert alert-info my-3"> {% if forms %}Click a milestone to edit it.{% endif %} {% if forms and not group.uses_milestone_dates %}Drag and drop milestones to reorder them.{% endif %} diff --git a/ietf/templates/group/group_about.html b/ietf/templates/group/group_about.html index 9ceb4fc88de..ef16e956a8a 100644 --- a/ietf/templates/group/group_about.html +++ b/ietf/templates/group/group_about.html @@ -111,7 +111,7 @@ </tr> {% endif %} {% if group.features.has_documents %} - <tr id='dependency_graph'> + <tr id="dependency_graph"> <td> </td> <th scope="row"> diff --git a/ietf/templates/group/group_about_rendertest.html b/ietf/templates/group/group_about_rendertest.html index dfc9f268979..496d39d8437 100644 --- a/ietf/templates/group/group_about_rendertest.html +++ b/ietf/templates/group/group_about_rendertest.html @@ -27,8 +27,8 @@ <div class="col-md-6 rightpanel"> <div class="h2 text-center bg-info">Markdown rendering</div> <div class="border-bottom text-center"> - <label class="form-label">Constrain width</label> - <input type="checkbox" class="form-check-input" name="widthconstraint"> + <label class="form-label" for="widthconstraint">Constrain width</label> + <input type="checkbox" class="form-check-input" name="widthconstraint" id="widthconstraint"> </div> <div class="rightcontent">{{ rendered|sanitize|safe }}</div> </div> diff --git a/ietf/templates/group/manage_review_requests.html b/ietf/templates/group/manage_review_requests.html index 75e843813bc..abcee757aa3 100644 --- a/ietf/templates/group/manage_review_requests.html +++ b/ietf/templates/group/manage_review_requests.html @@ -15,7 +15,7 @@ <h1> <small class="text-muted">{{ group.acronym }}</small> </h1> {% if newly_closed > 0 or newly_opened > 0 or newly_assigned > 0 %} - <p class="my-3 alert alert-danger my-3"> + <p class="alert alert-danger my-3"> Changes since last refresh: {% if newly_closed %}{{ newly_closed }} request{{ newly_closed|pluralize }} closed.{% endif %} {% if newly_opened %}{{ newly_opened }} request{{ newly_opened|pluralize }} opened.{% endif %} diff --git a/ietf/templates/group/meetings-row.html b/ietf/templates/group/meetings-row.html index 1bbb5300086..ff3b3af3769 100644 --- a/ietf/templates/group/meetings-row.html +++ b/ietf/templates/group/meetings-row.html @@ -31,12 +31,14 @@ {% if s.meeting.type_id == 'ietf' %} {{ s.time|date:"H:i" }} <a class="btn btn-primary btn-sm" + aria-label="icalendar entry for {{s.group.acronym}} at IETF {{s.meeting.number}}" title="icalendar entry for {{s.group.acronym}} at IETF {{s.meeting.number}}" href="{% url 'ietf.meeting.views.agenda_ical' num=s.meeting.number session_id=s.id %}"> <i class="bi bi-calendar"></i> </a> {% else %} <a class="btn btn-primary btn-sm" + aria-label="icalendar entry for {{s.meeting.number}}" title="icalendar entry for {{s.meeting.number}}" href="{% url 'ietf.meeting.views.agenda_ical' num=s.meeting.number acronym=s.group.acronym %}"> <i class="bi bi-calendar"></i> diff --git a/ietf/templates/group/meetings.html b/ietf/templates/group/meetings.html index 03c74dcf472..69ec5458ccb 100644 --- a/ietf/templates/group/meetings.html +++ b/ietf/templates/group/meetings.html @@ -41,6 +41,7 @@ <h2 class="mt-3" id="inprogressmeets">Meetings in progress</h2> <h2 class="mt-3" id="futuremeets"> Future Meetings <a class="float-end" + aria-label="icalendar entry for all scheduled future {{ group.acronym }} meetings" title="icalendar entry for all scheduled future {{ group.acronym }} meetings" href="{% url 'ietf.meeting.views.upcoming_ical' %}?show={{ group.acronym }}"> <i class="bi bi-calendar"></i> diff --git a/ietf/templates/group/reset_charter_milestones.html b/ietf/templates/group/reset_charter_milestones.html index 0b6ec1d8dcd..0fad44b9b2c 100644 --- a/ietf/templates/group/reset_charter_milestones.html +++ b/ietf/templates/group/reset_charter_milestones.html @@ -25,8 +25,9 @@ <h1> type="checkbox" name="milestone" value="{{ milestone.id }}" + id="id-{{ milestone.id }}" {% if not milestone.resolved %}checked{% endif %}> - <label class="form-check-label"> + <label class="form-check-label" for="id-{{ milestone.id }}"> {{ milestone.desc }} <span class="badge {% if milestone.resolved %}bg-success{% else %}bg-info{% endif %}"> {% if milestone.resolved %} diff --git a/ietf/templates/group/review_requests.html b/ietf/templates/group/review_requests.html index 2460f42bd54..3eafbd04cb7 100644 --- a/ietf/templates/group/review_requests.html +++ b/ietf/templates/group/review_requests.html @@ -69,13 +69,13 @@ <h2 class="mt-5" id="unassigned-and-open-review-requests">Unassigned and open re <table class="table table-sm table-striped tablesorter"> <thead> <tr> - <th data-sort="request">Request</th> - <th data-sort="type">Type</th> - <th data-sort="date">Requested</th> - <th data-sort="date">Deadline</th> - <th data-sort="reviewer">Reviewer</th> - <th data-sort="state">Document state</th> - <th data-sort="date">IESG Telechat</th> + <th scope="col" data-sort="request">Request</th> + <th scope="col" data-sort="type">Type</th> + <th scope="col" data-sort="date">Requested</th> + <th scope="col" data-sort="date">Deadline</th> + <th scope="col" data-sort="reviewer">Reviewer</th> + <th scope="col" data-sort="state">Document state</th> + <th scope="col" data-sort="date">IESG Telechat</th> </tr> </thead> <tbody> @@ -184,26 +184,26 @@ <h2 class="mt-5" id="closed-review-requests">Closed review requests and assignme <table class="table table-sm table-striped tablesorter"> <thead> <tr> - <th data-sort="request">Request</th> - <th data-sort="type"> + <th scope="col" data-sort="request">Request</th> + <th scope="col" data-sort="type"> Type </th> - <th data-sort="date"> + <th scope="col" data-sort="date"> Assigned </th> - <th data-sort="date"> + <th scope="col" data-sort="date"> Deadline </th> - <th data-sort="date"> + <th scope="col" data-sort="date"> Closed </th> - <th data-sort="reviewer"> + <th scope="col" data-sort="reviewer"> Reviewer </th> - <th data-sort="state"> + <th scope="col" data-sort="state"> State </th> - <th data-sort="result"> + <th scope="col" data-sort="result"> Result </th> </tr> diff --git a/ietf/templates/group/reviewer_overview.html b/ietf/templates/group/reviewer_overview.html index 3c8bc266e12..0665e37f68a 100644 --- a/ietf/templates/group/reviewer_overview.html +++ b/ietf/templates/group/reviewer_overview.html @@ -3,15 +3,16 @@ {% load origin %} {% origin %} {% load ietf_filters static django_bootstrap5 person_filters %} +{% block pagehead %} + <link rel="stylesheet" href="{% static "ietf/css/list.css" %}"> +{% endblock %} {% block group_subtitle %}Reviewers{% endblock %} {% block group_content %} {% origin %} - {% block pagehead %} - <link rel="stylesheet" href="{% static "ietf/css/list.css" %}"> - {% endblock %} {% if can_access_stats %} <div class="float-end"> <a href="{% url "ietf.stats.views.review_stats" stats_type="completion" acronym=group.acronym %}" + aria-label="Statistics" class="icon-link"> <i class="bi bi-bar-chart-line"></i> </a> @@ -77,10 +78,11 @@ <h2 class="mt-3">Reviewers</h2> <th scope="col">Document</th> </tr> </thead> + <tbody> {% for assn_pk, req_pk, doc_name, reviewed_rev, assigned_time, deadline, state, assignment_to_closure_days in person.latest_reqs %} <tr> <td> - <span style="display:none">X</span>{{ assigned_time|date }} + {{ assigned_time|date }} </td> <td> <a href="{% url 'ietf.doc.views_review.review_request' name=doc_name request_id=req_pk %}">{{ deadline|date }}</a> @@ -99,16 +101,15 @@ <h2 class="mt-3">Reviewers</h2> </td> </tr> {% endfor %} + </tbody> </table> {% endif %} </td> <td> {% if person.days_since_completed_review != 9999 %} {{ person.days_since_completed_review }} - {% else %} - <span style="display:none">9999</span> - </td> - {% endif %} + {% endif %} + </td> <td> {% if person.settings.min_interval %} <b>{{ person.settings.get_min_interval_display }}</b> diff --git a/ietf/templates/iesg/moderator_conflict_doc.html b/ietf/templates/iesg/moderator_conflict_doc.html index 1daf76501ab..1a6fdfec7cc 100644 --- a/ietf/templates/iesg/moderator_conflict_doc.html +++ b/ietf/templates/iesg/moderator_conflict_doc.html @@ -44,7 +44,7 @@ <br> <i>({{ doc.title }})</i> </div> -<div style="padding-left:20px"> +<div class="ps-3"> <b>{{ doc.conflictdoc.name }}-{{ doc.conflictdoc.rev }}</b> <br> <i>({{ doc.conflictdoc.title }})</i> diff --git a/ietf/templates/ipr/details_view.html b/ietf/templates/ipr/details_view.html index 794379979eb..c98329b9f23 100644 --- a/ietf/templates/ipr/details_view.html +++ b/ietf/templates/ipr/details_view.html @@ -551,7 +551,7 @@ <h2 class="mt-5"> {% if prev.licensing.slug == "provided-later" or ipr.licensing.slug == "provided-later" %} <div> Possible licensing choices a), b), and c) when Licensing Declaration to be Provided Later: - <ul style="list-style: none"> + <ul class="d-none"> {% for desc in choices_abc %} <li> {{ desc }} diff --git a/ietf/templates/meeting/floor-plan.html b/ietf/templates/meeting/floor-plan.html index 99964adbab6..614253c2554 100644 --- a/ietf/templates/meeting/floor-plan.html +++ b/ietf/templates/meeting/floor-plan.html @@ -42,23 +42,19 @@ <h2 class="mt-4" id="floor-{{ floor.name|xslugify }}">{{ floor.name }}</h2> src="{{ floor.image.url }}"> {# We need as many of these as we can have individual rooms combining into one #} <div id="floor-{{ floor.name|xslugify }}-arrowdiv0" - class="position-absolute" - style="visibility: hidden;"> + class="position-absolute invisible"> <img alt="Location arrow" src="{% static 'ietf/images/arrow-ani.webp' %}"> </div> <div id="floor-{{ floor.name|xslugify }}-arrowdiv1" - class="position-absolute" - style="visibility: hidden;"> + class="position-absolute invisible"> <img alt="Location arrow" src="{% static 'ietf/images/arrow-ani.webp' %}"> </div> <div id="floor-{{ floor.name|xslugify }}-arrowdiv2" - class="position-absolute" - style="visibility: hidden;"> + class="position-absolute invisible"> <img alt="Location arrow" src="{% static 'ietf/images/arrow-ani.webp' %}"> </div> <div id="floor-{{ floor.name|xslugify }}-arrowdiv3" - class="position-absolute" - style="visibility: hidden;"> + class="position-absolute invisible"> <img alt="Location arrow" src="{% static 'ietf/images/arrow-ani.webp' %}"> </div> {% else %} diff --git a/ietf/templates/person/photo.html b/ietf/templates/person/photo.html index 8200de4a20b..b4986e2e14c 100644 --- a/ietf/templates/person/photo.html +++ b/ietf/templates/person/photo.html @@ -1,19 +1,17 @@ {# Copyright The IETF Trust 2015, All Rights Reserved #} {% load origin static person_filters %} -<div class="card shadow-sm mb-3 text-center photo" style="width: 13em; "> +<div class="card shadow-sm mb-3 text-center photo"> {% if name or email %} <a title="Datatracker profile of {{ person.name }}." href="{% if name %}{% url 'ietf.person.views.profile' email_or_name=name %}{% else %}{% url 'ietf.person.views.profile' email_or_name=email %}{% endif %}"> {% endif %} {% if person.photo_thumb %} <img class="card-img-top" - style="object-fit: cover; - height: 15em;" src="{{ person.photo_thumb.url }}" alt="Photo of {{ person.name }}"> {% else %} - <div style="height: 15em;"> - <i class="bi bi-person text-muted" style="font-size: 12em;"></i> + <div class="photo-placeholder"> + <i class="bi bi-person text-muted"></i> </div> {% endif %} {% if name or email %}</a>{% endif %} diff --git a/ietf/templates/registration/edit_profile.html b/ietf/templates/registration/edit_profile.html index 8eeb52998af..bf21d45392f 100644 --- a/ietf/templates/registration/edit_profile.html +++ b/ietf/templates/registration/edit_profile.html @@ -20,7 +20,7 @@ <h1>Profile information for {{ user.person.name }}</h1> <div class="row mb-3"> <label class="col-sm-2 col-form-label fw-bold"> User name - <a href="#pi"> + <a href="#pi" aria-label="!"> <i class="bi bi-exclamation-circle"></i> </a> </label> @@ -34,7 +34,7 @@ <h1>Profile information for {{ user.person.name }}</h1> <div class="row mb-3"> <label class="col-sm-2 col-form-label fw-bold"> Password - <a href="#pi"> + <a href="#pi" aria-label="!"> <i class="bi bi-exclamation-circle"></i> </a> </label> @@ -46,7 +46,7 @@ <h1>Profile information for {{ user.person.name }}</h1> <div class="row mb-3"> <label class="col-sm-2 col-form-label fw-bold"> Photo - <a href="#pi"> + <a href="#pi" aria-label="!"> <i class="bi bi-exclamation-circle"></i> </a> </label> @@ -96,7 +96,7 @@ <h1>Profile information for {{ user.person.name }}</h1> <div class="row mb-3"> <label class="col-sm-2 col-form-label fw-bold"> External Resources - <a href="#pi"> + <a href="#pi" aria-label="!"> <i class="bi bi-exclamation-circle"></i> </a> </label> @@ -135,22 +135,26 @@ <h1>Profile information for {{ user.person.name }}</h1> {% for email in emails %} <tr> <td class="text-center"> + <label aria-label="Primary email"> <input class="form-check-input" type="radio" name="primary_email" value="{{ email.pk }}" {% if email.primary %}checked{% endif %}> + </label> </td> <td class="text-center"> + <label aria-label="Active email"> <input class="form-check-input" type="checkbox" name="active_emails" value="{{ email.pk }}" {% if email.active %}checked{% endif %}> + </label> </td> <td> {% if email.origin == person.user.username or email.origin == '' %} - <a href="#pi"> + <a href="#pi" aria-label="!"> <i class="bi bi-exclamation-circle"></i> </a> {% endif %} @@ -169,7 +173,7 @@ <h1>Profile information for {{ user.person.name }}</h1> {% endfor %} <div class="new-emails"></div> <div> - <button class="btn btn-primary add-email mb-5">Add new email address</button> + <button type="button" class="btn btn-primary add-email mb-5">Add new email address</button> </div> {% for role in roles %} {% bootstrap_field role.email_form.email show_label=False %} diff --git a/ietf/templates/review/unavailable_table.html b/ietf/templates/review/unavailable_table.html index c6499a70ee6..ea34bf2cbeb 100644 --- a/ietf/templates/review/unavailable_table.html +++ b/ietf/templates/review/unavailable_table.html @@ -1,4 +1,5 @@ <table class="mt-2 mb-0 table table-sm table-borderless"> + <tbody> {% for p in unavailable_periods %} <tr class="unavailable-period-{{ p.state }}"> <th scope="row">Period:</th> @@ -20,4 +21,5 @@ <td>{{ p.reason }}</td> </tr> {% endfor %} + </tbody> </table> \ No newline at end of file From 5fe515888dd2a71103ba34c14dfafeaa8068e57d Mon Sep 17 00:00:00 2001 From: Lars Eggert <lars@eggert.org> Date: Mon, 4 Apr 2022 12:35:25 +0300 Subject: [PATCH 17/26] More HTML fixes --- ietf/liaisons/tests.py | 10 +++---- ietf/liaisons/widgets.py | 2 +- ietf/templates/iesg/agenda_charter.html | 2 +- ietf/templates/iesg/agenda_conflict_doc.html | 4 +-- ietf/templates/iesg/agenda_doc.html | 2 +- ietf/templates/iesg/moderator_package.html | 10 +++---- ietf/templates/iesg/past_documents.html | 4 +-- ietf/templates/ietfauth/apikeys.html | 26 +++++++++---------- ietf/templates/ipr/search_doc_result.html | 2 +- .../templates/ipr/search_doctitle_result.html | 2 +- ietf/templates/liaisons/detail.html | 25 +++++++++--------- ietf/templates/liaisons/edit.html | 2 +- ietf/templates/liaisons/field_help.html | 2 ++ ietf/templates/liaisons/guide_from_ietf.html | 2 ++ ietf/templates/liaisons/guide_to_ietf.html | 2 ++ ietf/templates/liaisons/liaison_table.html | 4 +-- ietf/templates/liaisons/search_form.html | 2 ++ ietf/templates/oidc_provider/authorize.html | 5 ++-- .../registration/change_password.html | 6 ++--- .../registration/confirm_account.html | 1 + 20 files changed, 63 insertions(+), 52 deletions(-) diff --git a/ietf/liaisons/tests.py b/ietf/liaisons/tests.py index 7f98b8d7505..4e4eaa136c3 100644 --- a/ietf/liaisons/tests.py +++ b/ietf/liaisons/tests.py @@ -317,7 +317,7 @@ def test_taken_care_of(self): r = self.client.get(url) self.assertEqual(r.status_code, 200) q = PyQuery(r.content) - self.assertEqual(len(q('form input[name=do_action_taken]')), 0) + self.assertEqual(len(q('form button[name=do_action_taken]')), 0) # log in and get self.client.login(username="secretary", password="secretary+password") @@ -325,13 +325,13 @@ def test_taken_care_of(self): r = self.client.get(url) self.assertEqual(r.status_code, 200) q = PyQuery(r.content) - self.assertEqual(len(q('form input[name=do_action_taken]')), 1) + self.assertEqual(len(q('form button[name=do_action_taken]')), 1) # mark action taken r = self.client.post(url, dict(do_action_taken="1")) self.assertEqual(r.status_code, 200) q = PyQuery(r.content) - self.assertEqual(len(q('form input[name=do_action_taken]')), 0) + self.assertEqual(len(q('form button[name=do_action_taken]')), 0) liaison = LiaisonStatement.objects.get(id=liaison.id) self.assertTrue(liaison.action_taken) @@ -357,7 +357,7 @@ def test_approval_process(self): self.assertEqual(r.status_code, 200) self.assertContains(r, liaison.title) q = PyQuery(r.content) - self.assertEqual(len(q('form input[name=approved]')), 0) + self.assertEqual(len(q('form button[name=approved]')), 0) # check the detail page / authorized self.client.login(username="ulm-liaiman", password="ulm-liaiman+password") @@ -368,7 +368,7 @@ def test_approval_process(self): from ietf.liaisons.utils import can_edit_liaison user = User.objects.get(username='ulm-liaiman') self.assertTrue(can_edit_liaison(user, liaison)) - self.assertEqual(len(q('form input[name=approved]')), 1) + self.assertEqual(len(q('form button[name=approved]')), 1) # approve mailbox_before = len(outbox) diff --git a/ietf/liaisons/widgets.py b/ietf/liaisons/widgets.py index edf048352c6..d6e2fe936bb 100644 --- a/ietf/liaisons/widgets.py +++ b/ietf/liaisons/widgets.py @@ -25,7 +25,7 @@ def render(self, name, value, **kwargs): html += '<span class="d-none attachRequiredField">%s</span>' % conditional_escape(i) required_str = 'Please fill in %s to attach a new file' % conditional_escape(self.required_label) html += '<span class="d-none attachDisabledLabel">%s</span>' % conditional_escape(required_str) - html += '<input type="button" class="addAttachmentWidget btn btn-primary btn-sm" value="%s">' % conditional_escape(self.label) + html += '<button type="button" class="addAttachmentWidget btn btn-primary btn-sm">%s</button>' % conditional_escape(self.label) return mark_safe(html) diff --git a/ietf/templates/iesg/agenda_charter.html b/ietf/templates/iesg/agenda_charter.html index 03b17ff1475..edc5d3290d0 100644 --- a/ietf/templates/iesg/agenda_charter.html +++ b/ietf/templates/iesg/agenda_charter.html @@ -17,7 +17,7 @@ <div class="row"> <div class="col-3 text-end fw-bold">Charter</div> <div class="col"> - <a href="{{ doc.get_href }}"> + <a href="{{ doc.get_href }}" aria-label="Content"> <i class="bi bi-file-earmark-fill"></i> </a> <a href="{{ doc.get_absolute_url }}">{{ doc.name }}-({{ doc.rev }})</a> diff --git a/ietf/templates/iesg/agenda_conflict_doc.html b/ietf/templates/iesg/agenda_conflict_doc.html index b79a2fa3399..ccd2588d9d8 100644 --- a/ietf/templates/iesg/agenda_conflict_doc.html +++ b/ietf/templates/iesg/agenda_conflict_doc.html @@ -10,7 +10,7 @@ <div class="col-3 text-end fw-bold">Conflict review</div> <div class="col"> <div class="fw-bold">{{ doc.title }}</div> - <a href="{{ doc.get_href }}"> + <a href="{{ doc.get_href }}" aria-label="Content"> <i class="bi bi-file-earmark-fill"></i> </a> <a href="{% url "ietf.doc.views_doc.document_main" name=doc.canonical_name %}">{{ doc.canonical_name }}</a> @@ -20,7 +20,7 @@ <div class="col-3 text-end fw-bold">{{ conflictdoc.stream }} {{ conflictdoc.intended_std_level }}</div> <div class="col"> <div class="fw-bold">{{ conflictdoc.title }}</div> - <a href="{{ settings.IETF_ID_ARCHIVE_URL }}{{ conflictdoc.name }}-{{ conflictdoc.rev }}.txt"> + <a href="{{ settings.IETF_ID_ARCHIVE_URL }}{{ conflictdoc.name }}-{{ conflictdoc.rev }}.txt" aria-label="Content"> <i class="bi bi-file-earmark-fill"></i> </a> <a href="{% url "ietf.doc.views_doc.document_main" name=conflictdoc.name %}">{{ conflictdoc.name }}</a> diff --git a/ietf/templates/iesg/agenda_doc.html b/ietf/templates/iesg/agenda_doc.html index 90a33a6d276..a066f568ae7 100644 --- a/ietf/templates/iesg/agenda_doc.html +++ b/ietf/templates/iesg/agenda_doc.html @@ -17,7 +17,7 @@ </div> <div class="col"> {% with doc.rfc_number as rfc_number %} - <a href="{% if rfc_number %} https://www.rfc-editor.org/rfc/rfc{{ rfc_number }}/ {% else %} {{ doc.get_href }} {% endif %}"> + <a href="{% if rfc_number %} https://www.rfc-editor.org/rfc/rfc{{ rfc_number }}/ {% else %} {{ doc.get_href }} {% endif %}" aria-label="Content"> <i class="bi bi-file-earmark-fill"></i> </a> {% endwith %} diff --git a/ietf/templates/iesg/moderator_package.html b/ietf/templates/iesg/moderator_package.html index 638a454c5f0..7b7fc9c449b 100644 --- a/ietf/templates/iesg/moderator_package.html +++ b/ietf/templates/iesg/moderator_package.html @@ -43,14 +43,14 @@ <title>Moderator Package for {{ date }} IESG Telechat @@ -60,7 +60,7 @@

    Moderator Package for {{ date }} IESG Telechat

    Generated at {% now "Y-m-d H:i:s T" %}.

    {% for num, section in sections %} -

    +

    {% for parent_num, parent_section in section.parents %} {{ parent_num }} {% if parent_num|sectionlevel == 1 %}.{% endif %} @@ -70,7 +70,7 @@

    {{ num }} {% if num|sectionlevel == 1 %}.{% endif %} {{ section.title }} -

    + {% if num == "1.1" %} {% filter linebreaks_crlf %}
    {{ section.text }}
    diff --git a/ietf/templates/iesg/past_documents.html b/ietf/templates/iesg/past_documents.html index 802dcc4745c..c6df8f9139e 100644 --- a/ietf/templates/iesg/past_documents.html +++ b/ietf/templates/iesg/past_documents.html @@ -23,9 +23,9 @@

    DocumentTelechat DateTelechat Date StatusResponsible ADResponsible AD Discusses
    + + + + + + + + + + + + {% for key in person.apikeys.all %} - {% if forloop.first %} - - - - - - - - - - - - {% endif %} {% endfor %} +
    EndpointCreatedLast useCountValidKey hash
    EndpointCreatedLast useCountValidKey hash
    {{ key.endpoint }} @@ -55,6 +54,7 @@

    You have no personal API keys.
    diff --git a/ietf/templates/ipr/search_doc_result.html b/ietf/templates/ipr/search_doc_result.html index 333b1e33fb4..1d2ef54bcaa 100644 --- a/ietf/templates/ipr/search_doc_result.html +++ b/ietf/templates/ipr/search_doc_result.html @@ -57,7 +57,7 @@ {% for doc in docs %}
    + Results for {{ doc.name|rfcspace|lstrip:"0"|urlize_ietf_docs }} ("{{ doc.document.title }}"){% if not forloop.first %}{% if doc.related %}, which was {{ doc.relation|lower }} {{ doc.related.source|rfcspace|lstrip:"0"|urlize_ietf_docs }} ("{{ doc.related.source.title }}"){% endif %}{% endif %}
    + IPR that is related to {{ alias.name|lstrip:"0"|rfcnospace|urlize_ietf_docs }} ("{{ alias.document.title }}") {% if alias.related %} that was {{ alias.relation|lower }} {{ alias.related.source.name|lstrip:"0"|rfcnospace|urlize_ietf_docs }} ("{{ alias.related.source.title }}") diff --git a/ietf/templates/liaisons/detail.html b/ietf/templates/liaisons/detail.html index a2f5f8e0ebf..121fa228c54 100644 --- a/ietf/templates/liaisons/detail.html +++ b/ietf/templates/liaisons/detail.html @@ -15,6 +15,7 @@

    {% include "liaisons/detail_tabs.html" %} + @@ -84,10 +85,11 @@

    {% if can_take_care %}
    {% csrf_token %} - + name="do_action_taken"> + Mark as action taken + {% endif %} @@ -203,8 +205,9 @@

    {% endif %} +
    State {{ liaison.state }}
    -
    + {% if liaison.state.slug == 'pending' and can_edit or liaison.state.slug == 'dead' and can_edit %}{% endif %} {% csrf_token %} {% if liaison.state.slug == 'pending' and can_edit %} {% endif %} {% if liaison.state.slug == 'pending' and can_edit %} - - Approve + {% endif %} {% if liaison.state.slug == 'posted' and user|has_role:"Secretariat" %} {% endif %} {% if liaison.state.slug == 'dead' and can_edit %} - + name="resurrect">Resurrect {% endif %} -
    + {% if liaison.state.slug == 'pending' and can_edit or liaison.state.slug == 'dead' and can_edit %}{% endif %} {% endblock %} \ No newline at end of file diff --git a/ietf/templates/liaisons/edit.html b/ietf/templates/liaisons/edit.html index 58dd800c60d..ac48859deee 100644 --- a/ietf/templates/liaisons/edit.html +++ b/ietf/templates/liaisons/edit.html @@ -37,7 +37,7 @@

    Fields marked with - + are required. For detailed descriptions of the fields see the field help.

    diff --git a/ietf/templates/liaisons/field_help.html b/ietf/templates/liaisons/field_help.html index 08eaee62c6a..799dee2a987 100644 --- a/ietf/templates/liaisons/field_help.html +++ b/ietf/templates/liaisons/field_help.html @@ -45,6 +45,7 @@

    Liaison statement field help

    Comments
    From Groups
    {% endblock %} {% block js %} diff --git a/ietf/templates/liaisons/guide_from_ietf.html b/ietf/templates/liaisons/guide_from_ietf.html index bbca71d12fd..6dee086f283 100644 --- a/ietf/templates/liaisons/guide_from_ietf.html +++ b/ietf/templates/liaisons/guide_from_ietf.html @@ -42,6 +42,7 @@

    The IAB @@ -108,6 +109,7 @@

    (1) Please see Section 4., "Approval and Transmission of Liaison Statements," diff --git a/ietf/templates/liaisons/guide_to_ietf.html b/ietf/templates/liaisons/guide_to_ietf.html index 0602b4c000b..ff0ae590c2f 100644 --- a/ietf/templates/liaisons/guide_to_ietf.html +++ b/ietf/templates/liaisons/guide_to_ietf.html @@ -31,6 +31,7 @@

    The IAB The IAB Chair <iab-chair@iab.org>

    (1) The diff --git a/ietf/templates/liaisons/liaison_table.html b/ietf/templates/liaisons/liaison_table.html index ed97d3ce25d..3fe439ef071 100644 --- a/ietf/templates/liaisons/liaison_table.html +++ b/ietf/templates/liaisons/liaison_table.html @@ -5,8 +5,8 @@

    Date FromToDeadlineToDeadline Title
    {{ meeting.number }}
    {{ meeting.group.acronym }} {{ meeting.date }}
    {% if item.session_keyword %} + @@ -201,10 +206,15 @@

    {% if personalize %}

    {% if item.session_keyword %} + diff --git a/ietf/templates/meeting/agenda_by_type.html b/ietf/templates/meeting/agenda_by_type.html index d387f7542fc..87b91567550 100644 --- a/ietf/templates/meeting/agenda_by_type.html +++ b/ietf/templates/meeting/agenda_by_type.html @@ -23,6 +23,7 @@

    {{ type.grouper|title }}

    {{ day.grouper }}

    + {% for ss in day.list %} @@ -37,6 +38,7 @@

    {{ day.grouper }}

    {% endfor %} +
    {{ ss.timeslot.time|date:"H:i" }}-{{ ss.timeslot.end_time|date:"H:i" }}
    {% endfor %} diff --git a/ietf/templates/meeting/agenda_filter.html b/ietf/templates/meeting/agenda_filter.html index 6839fee36d4..44f4014115b 100644 --- a/ietf/templates/meeting/agenda_filter.html +++ b/ietf/templates/meeting/agenda_filter.html @@ -60,16 +60,14 @@

    aria-label="{% firstof area.label area.keyword %}"> {% for group in area.children %} {% endfor %} diff --git a/ietf/templates/meeting/delete_schedule.html b/ietf/templates/meeting/delete_schedule.html index 728ffb2ce58..334479ba795 100644 --- a/ietf/templates/meeting/delete_schedule.html +++ b/ietf/templates/meeting/delete_schedule.html @@ -17,10 +17,9 @@

    {% csrf_token %} {# Null Form #} - + name="save">Delete schedule Back
    diff --git a/ietf/templates/meeting/edit_meeting_schedule.html b/ietf/templates/meeting/edit_meeting_schedule.html index 98650e6771a..e0b6f6a540a 100644 --- a/ietf/templates/meeting/edit_meeting_schedule.html +++ b/ietf/templates/meeting/edit_meeting_schedule.html @@ -130,6 +130,7 @@

    data-rooms="{% for r in rgroup %}{{ r.room.pk }}{% if not forloop.last %},{% endif %}{% endfor %}">
    {# All rooms in a group have same timeslots; grab the first for the labels #} + {% for t in rgroup.0.timeslots %}
    + {% for t in room_data.timeslots %}
    - + + Show: {% for p in session_parents %} @@ -224,6 +226,7 @@

    {% if session_purposes|length > 1 %}

    Last updated: {% firstof note.get_update_time "unknown" %}

    View on notes.ietf.org

    -
    diff --git a/ietf/templates/meeting/interim_announce.html b/ietf/templates/meeting/interim_announce.html index 2cfec08c8ea..d90d91cebfe 100644 --- a/ietf/templates/meeting/interim_announce.html +++ b/ietf/templates/meeting/interim_announce.html @@ -37,11 +37,11 @@

    Interim Meetings to be Announced

    {% else %} -

    No interim meetings awaiting announcement

    +

    No interim meetings awaiting announcement.

    {% endif %} {% endblock %} {% block js %} -{% endblock %} +{% endblock %} \ No newline at end of file diff --git a/ietf/templates/meeting/interim_request.html b/ietf/templates/meeting/interim_request.html index a215f0546c5..9957c45e57b 100644 --- a/ietf/templates/meeting/interim_request.html +++ b/ietf/templates/meeting/interim_request.html @@ -19,7 +19,7 @@

    Interim Meeting Request

    {% render_field form.approved class="form-check-input" %} - {% bootstrap_label "Preapproved by AD" label_for=form.approved.id %} + {% bootstrap_label "Preapproved by AD" label_for="id_approved" %}
    {% endif %} diff --git a/ietf/templates/meeting/interim_request_details.html b/ietf/templates/meeting/interim_request_details.html index d3b4702e356..e921ff6d830 100644 --- a/ietf/templates/meeting/interim_request_details.html +++ b/ietf/templates/meeting/interim_request_details.html @@ -103,7 +103,7 @@

    Interim Meeting Request Details

    {% endif %} {% endfor %} - + {% if can_approve and status_slug == 'apprw' %}{% endif %} {% csrf_token %} {% with meeting_status.slug as status_slug %} {% if can_edit %} @@ -111,11 +111,8 @@

    Interim Meeting Request Details

    href="{% url 'ietf.meeting.views.interim_request_edit' number=meeting.number %}">Edit {% endif %} {% if can_approve and status_slug == 'apprw' %} - - + + {% endif %} {% if user|has_role:"Secretariat" and status_slug == 'scheda' %} Interim Meeting Request Details href="{% url 'ietf.meeting.views.upcoming' %}">Back {% endif %} {% endwith %} - + {% if can_approve and status_slug == 'apprw' %}{% endif %} {% endblock %} {% block js %} diff --git a/ietf/templates/meeting/interim_request_edit.html b/ietf/templates/meeting/interim_request_edit.html index d98237640c5..df202bd6304 100644 --- a/ietf/templates/meeting/interim_request_edit.html +++ b/ietf/templates/meeting/interim_request_edit.html @@ -19,7 +19,7 @@

    Edit Interim Meeting Request

    {% render_field form.approved class="form-check-input" %} - {% bootstrap_label "Preapproved by AD" label_for=form.approved.id %} + {% bootstrap_label "Preapproved by AD" label_for=form.approved.id_for_label %}
    {% bootstrap_field form.city layout='horizontal' %} diff --git a/ietf/templates/meeting/interim_send_announcement.html b/ietf/templates/meeting/interim_send_announcement.html index c2097ba83fc..fa05c72346d 100644 --- a/ietf/templates/meeting/interim_send_announcement.html +++ b/ietf/templates/meeting/interim_send_announcement.html @@ -12,26 +12,26 @@

    Announce Interim Meeting

    {% csrf_token %}
    - +
    {% render_field form.to class="form-control" readonly="readonly" %}
    - +
    {% render_field form.cc class="form-control" %}
    - +
    {% render_field form.frm class="form-control" readonly="readonly" %}
    - +
    {% render_field form.subject class="form-control" readonly="readonly" %}
    - +
    {% render_field form.body class="form-control" %}
    - + Back diff --git a/ietf/templates/meeting/interim_session_buttons.html b/ietf/templates/meeting/interim_session_buttons.html index 111e61b5f48..62e461fd2d2 100644 --- a/ietf/templates/meeting/interim_session_buttons.html +++ b/ietf/templates/meeting/interim_session_buttons.html @@ -12,18 +12,21 @@ {# materials tar file #} {# materials PDF file #} @@ -32,6 +35,7 @@ {% if use_codimd %} @@ -41,6 +45,7 @@ {# Jabber #} @@ -48,18 +53,21 @@ {% if session.agenda_note|first_url|conference_url %} {% elif session.remote_instructions|first_url|conference_url %} {% elif item.timeslot.location.webex_url %} @@ -67,12 +75,14 @@ {% elif item.timeslot.location.video_stream_url %} {% else %} @@ -80,6 +90,7 @@ {# iCalendar item #} @@ -87,6 +98,7 @@ {# Jabber #} @@ -99,6 +111,7 @@ {% if 'audio' in href %} @@ -111,6 +124,7 @@ {% if 'youtu' in href %} @@ -123,6 +137,7 @@ {% if not 'audio' in href and not 'youtu' in href %} @@ -132,6 +147,7 @@ {% elif item.timeslot.location.video_stream_url %} diff --git a/ietf/templates/meeting/interim_skip_announce.html b/ietf/templates/meeting/interim_skip_announce.html index b3dc7ddb549..5c2ca23ee02 100644 --- a/ietf/templates/meeting/interim_skip_announce.html +++ b/ietf/templates/meeting/interim_skip_announce.html @@ -11,7 +11,7 @@

    Interim Meetings Skip Announcement

    {% csrf_token %} - + Back
    diff --git a/ietf/templates/meeting/make_schedule_official.html b/ietf/templates/meeting/make_schedule_official.html index 9c95a1b3650..59bccaa967b 100644 --- a/ietf/templates/meeting/make_schedule_official.html +++ b/ietf/templates/meeting/make_schedule_official.html @@ -15,10 +15,9 @@

    {% csrf_token %} {# Null Form #} - + name="save">Make this schedule official Back
    diff --git a/ietf/templates/meeting/past.html b/ietf/templates/meeting/past.html index 8a257426bb8..f63d4daf438 100644 --- a/ietf/templates/meeting/past.html +++ b/ietf/templates/meeting/past.html @@ -16,7 +16,7 @@

    Past Meetings

    Date Group Name
    + {% for form in formset %} {% endfor %} +
    @@ -37,6 +38,7 @@

    {% bootstrap_form form %}
    Back diff --git a/ietf/templates/meeting/proceedings/material_details.html b/ietf/templates/meeting/proceedings/material_details.html index 98b8bf0f062..0b5f048c99a 100644 --- a/ietf/templates/meeting/proceedings/material_details.html +++ b/ietf/templates/meeting/proceedings/material_details.html @@ -92,7 +92,7 @@

    function onAdd(event) { var old_session = event.from.getAttribute(data-'session'); var new_session = event.to.getAttribute('data-session'); - $.post(event.to.getAttribute('data-addToSession'), { + $.post(event.to.getAttribute('data-add-to-session'), { 'order': event.newIndex + 1, 'name': event.item.getAttribute('name') }); @@ -103,7 +103,7 @@

    function onRemove(event) { var old_session = event.from.getAttribute('data-session'); - $.post(event.from.getAttribute('data-removeFromSession'), { + $.post(event.from.getAttribute('data-remove-from-session'), { 'oldIndex': event.oldIndex + 1, 'name': event.item.getAttribute('name') }); @@ -111,7 +111,7 @@

    function onEnd(event) { if (event.to == event.from) { - $.post(event.from.getAttribute('data-reorderInSession'), { + $.post(event.from.getAttribute('data-reorder-in-session'), { 'oldIndex': event.oldIndex + 1, 'newIndex': event.newIndex + 1 }); diff --git a/ietf/templates/meeting/proceedings_overview.html b/ietf/templates/meeting/proceedings_overview.html index c0297824e58..8fb283b9ab2 100644 --- a/ietf/templates/meeting/proceedings_overview.html +++ b/ietf/templates/meeting/proceedings_overview.html @@ -11,5 +11,6 @@

    IETF overview

    + {{ template|safe }} {% endblock %} \ No newline at end of file diff --git a/ietf/templates/meeting/properties_edit.html b/ietf/templates/meeting/properties_edit.html index 86db0eb5d14..a6b6fc477f1 100644 --- a/ietf/templates/meeting/properties_edit.html +++ b/ietf/templates/meeting/properties_edit.html @@ -25,7 +25,7 @@

    IETF {{ meeting.number }} Schedule
    {% csrf_token %} {% bootstrap_form form layout="horizontal" %} - + Back
    diff --git a/ietf/templates/meeting/requests.html b/ietf/templates/meeting/requests.html index 9174a953149..1ccc6640bb4 100644 --- a/ietf/templates/meeting/requests.html +++ b/ietf/templates/meeting/requests.html @@ -32,8 +32,8 @@

    Group Length SizeRequesterADRequesterAD Constraints Special requests
    {{ session.current_status_name|capfirst }}{{ session.current_status_name|capfirst }}
    {% if cell_ts %} {% for ts in cell_ts %} {% include 'meeting/timeslot_edit_timeslot.html' with ts=ts in_use=ts_with_any_assignments in_official_use=ts_with_official_assignments only %} {% endfor %} {% endif %} - - {% endwith %} - {% endfor %} -
    + {% if form.non_field_errors %}{{ form.non_field_errors }}{% endif %} {% for field in form.visible_fields %} @@ -20,11 +21,12 @@

    Announcement

    {% endfor %} +
    {{ field.errors }}{{ field }}{% if field.help_text %}
    {{ field.help_text }}{% endif %}
    • -
    • +
    diff --git a/ietf/secr/templates/areas/people.html b/ietf/secr/templates/areas/people.html index ba30c36c3aa..c5598f911d5 100644 --- a/ietf/secr/templates/areas/people.html +++ b/ietf/secr/templates/areas/people.html @@ -3,7 +3,7 @@ {% block title %}Areas - People{% endblock %} {% block extrahead %}{{ block.super }} - + {% endblock %} @@ -21,15 +21,15 @@

    Area Directors ({{ area.acronym }})

    {% for director in directors %} {% csrf_token %} - + + {% endif %} - + {% endfor %} @@ -40,18 +40,21 @@

    Add new Director

    {% csrf_token %}

    {{ director.person.name }} {% if director.name.slug == "ad" %} Voting Enabled {% else %} -
    + + {{ form.as_table }} - + +
      -
    • +
    diff --git a/ietf/secr/templates/areas/view.html b/ietf/secr/templates/areas/view.html index 559bc55742d..0205f77f721 100644 --- a/ietf/secr/templates/areas/view.html +++ b/ietf/secr/templates/areas/view.html @@ -16,7 +16,7 @@

    Area - View

    - + @@ -24,25 +24,28 @@

    Area - View

    +
    Area Acronym:{{ area.acronym }}
    Area Name:{{ area.name }}
    Status:{{ area.state }}
    Concluded Date:{{ area.concluded_date|date:"Y-m-d" }}
    Last Modified Date:{{ area.time|date:"Y-m-d" }}
    Comments:{{ area.comments}}
      - -
    • -
    • -
    • + +
    • +
    • +
    -{% endblock %} +{% endblock %} \ No newline at end of file diff --git a/ietf/secr/templates/base_secr.html b/ietf/secr/templates/base_secr.html index 40434cef01e..47b893f0439 100644 --- a/ietf/secr/templates/base_secr.html +++ b/ietf/secr/templates/base_secr.html @@ -2,17 +2,17 @@ {% load staticfiles %} - - - + + + {% block title %}{% endblock %} - - - + + + {% if not server_mode == "production" %} - + {% endif %} {% block extrastyle %}{% endblock %} @@ -20,7 +20,7 @@ {% endblock %} - {% block blockbots %}{% endblock %} + {% block blockbots %}{% endblock %} @@ -41,6 +41,7 @@ @@ -65,6 +67,7 @@
    + {% block pretitle %}{% endblock %} {% block content_title %}{% if title %}

    {{ title }}

    {% endif %}{% endblock %} {% block content %} @@ -72,7 +75,7 @@ {{ content }} {% endblock %} {% block sidebar %}{% endblock %} -
    +
    diff --git a/ietf/secr/templates/base_secr_bootstrap.html b/ietf/secr/templates/base_secr_bootstrap.html index abaeb2d0d5b..2eee566a121 100644 --- a/ietf/secr/templates/base_secr_bootstrap.html +++ b/ietf/secr/templates/base_secr_bootstrap.html @@ -2,16 +2,16 @@ {% load staticfiles %} - - - + + + {% block title %}{% endblock %} - - - - + + + + {% if not server_mode == "production" %} - + {% endif %} {% block extrastyle %}{% endblock %} @@ -19,7 +19,7 @@ {% endblock %} - {% block blockbots %}{% endblock %} + {% block blockbots %}{% endblock %} @@ -40,6 +40,7 @@ @@ -64,6 +66,7 @@
    + {% block pretitle %}{% endblock %} {% block content_title %}{% if title %}

    {{ title }}

    {% endif %}{% endblock %} {% block content %} @@ -71,7 +74,7 @@ {{ content }} {% endblock %} {% block sidebar %}{% endblock %} -
    +
    diff --git a/ietf/secr/templates/base_site.html b/ietf/secr/templates/base_site.html index 3408bb34fef..6ebd77bbc06 100644 --- a/ietf/secr/templates/base_site.html +++ b/ietf/secr/templates/base_site.html @@ -7,6 +7,7 @@ {% block branding %} + +

    {% if user|has_role:"Secretariat" %} Secretariat Dashboard {% else %} IETF Dashboard {% endif %}

    @@ -16,6 +17,7 @@

    {% if user|has_role:"Secretariat" %} Secretariat Dashboard {%

    {% endblock %} @@ -31,7 +33,7 @@

    {% if user|has_role:"Secretariat" %} Secretariat Dashboard {% {% endblock %} \ No newline at end of file diff --git a/ietf/secr/templates/base_site_bootstrap.html b/ietf/secr/templates/base_site_bootstrap.html index b8445d25d6c..b784362ee95 100644 --- a/ietf/secr/templates/base_site_bootstrap.html +++ b/ietf/secr/templates/base_site_bootstrap.html @@ -7,6 +7,7 @@ {% block branding %} + +

    {% if user|has_role:"Secretariat" %} Secretariat Dashboard {% else %} WG Chair Dashboard {% endif %}

    @@ -16,6 +17,7 @@

    {% if user|has_role:"Secretariat" %} Secretariat Dashboard {%

    {% endblock %} @@ -31,7 +33,7 @@

    {% if user|has_role:"Secretariat" %} Secretariat Dashboard {% {% endblock %} \ No newline at end of file diff --git a/ietf/secr/templates/confirm_cancel.html b/ietf/secr/templates/confirm_cancel.html index c846712396c..bffe951a4d0 100644 --- a/ietf/secr/templates/confirm_cancel.html +++ b/ietf/secr/templates/confirm_cancel.html @@ -16,11 +16,11 @@

    Are you sure?

    - + Take me back

    -{% endblock %} +{% endblock %} \ No newline at end of file diff --git a/ietf/secr/templates/confirm_delete.html b/ietf/secr/templates/confirm_delete.html index be89ef75a06..0a74724e13f 100644 --- a/ietf/secr/templates/confirm_delete.html +++ b/ietf/secr/templates/confirm_delete.html @@ -16,11 +16,11 @@

    Are you sure?

    - + Take me back

    -{% endblock %} +{% endblock %} \ No newline at end of file diff --git a/ietf/secr/templates/console/main.html b/ietf/secr/templates/console/main.html index efd2ab940da..34a6ff66669 100644 --- a/ietf/secr/templates/console/main.html +++ b/ietf/secr/templates/console/main.html @@ -12,7 +12,9 @@

    Console

    + +
    Latest DocEvent{{ latest_docevent }}
    diff --git a/ietf/secr/templates/groups/people.html b/ietf/secr/templates/groups/people.html index 874b4db70e2..ac51beafc4a 100644 --- a/ietf/secr/templates/groups/people.html +++ b/ietf/secr/templates/groups/people.html @@ -4,7 +4,7 @@ {% block title %}Groups - People{% endblock %} {% block extrahead %}{{ block.super }} - + {% endblock %} @@ -49,19 +49,21 @@

    Add Role

    {{ form.non_field_errors }} {{ form.group_acronym }} + - - - - + + + + +
    {{ form.name.errors }}{{ form.name }}{{ form.person.errors }}{{ form.person }}{% if form.person.help_text %}
    {{ form.person.help_text }}{% endif %}
    {{ form.email.errors }}{{ form.email }}{% if form.email.help_text %}
    {{ form.email.help_text }}{% endif %}
    {{ form.name.errors }}{{ form.name }}{{ form.person.errors }}{{ form.person }}{% if form.person.help_text %}
    {{ form.person.help_text }}{% endif %}
    {{ form.email.errors }}{{ form.email }}{% if form.email.help_text %}
    {{ form.email.help_text }}{% endif %}
      -
    • +
    diff --git a/ietf/secr/templates/groups/search.html b/ietf/secr/templates/groups/search.html index ce70ad50bb4..4a1de0e4aef 100644 --- a/ietf/secr/templates/groups/search.html +++ b/ietf/secr/templates/groups/search.html @@ -19,7 +19,10 @@

    Groups - Search

    {% csrf_token %} - {{ form.as_table }} + + + {{ form.as_table }} +
    {% include "includes/buttons_search.html" %} diff --git a/ietf/secr/templates/groups/view.html b/ietf/secr/templates/groups/view.html index 6ec9be5025a..a0509b0630b 100644 --- a/ietf/secr/templates/groups/view.html +++ b/ietf/secr/templates/groups/view.html @@ -18,7 +18,7 @@

    Groups - View

    - + @@ -56,6 +56,7 @@

    Groups - View

    {% endif %} +
    Group Acronym:{{ group.acronym }}
    Group Name:{{ group.name }}
    Status:{{ group.state }}
    Comments:{{ group.comments }}
    Last Modified Date:{{ group.time }}
    @@ -109,11 +110,11 @@

    Secretary(ies)

      -
    • -
    • +
    • +
    • {% comment %} -
    • -
    • +
    • +
    • {% endcomment %}
    diff --git a/ietf/secr/templates/includes/buttons_back.html b/ietf/secr/templates/includes/buttons_back.html index 8af99be1738..cd6a89adf6a 100644 --- a/ietf/secr/templates/includes/buttons_back.html +++ b/ietf/secr/templates/includes/buttons_back.html @@ -1,5 +1,5 @@
      -
    • +
    diff --git a/ietf/secr/templates/includes/proceedings_functions.html b/ietf/secr/templates/includes/proceedings_functions.html index 4dab4cb563c..33e11a14890 100644 --- a/ietf/secr/templates/includes/proceedings_functions.html +++ b/ietf/secr/templates/includes/proceedings_functions.html @@ -2,12 +2,12 @@

    Use this to process meeting materials files that have been converted to PDF and uploaded to the server.

    • - +   {{ ppt_count }} PowerPoint files waiting to be converted

    Use this to input session recording information.

      -
    • +
    diff --git a/ietf/secr/templates/includes/sessions_request_form.html b/ietf/secr/templates/includes/sessions_request_form.html index 1e596104ea4..74327d480c9 100755 --- a/ietf/secr/templates/includes/sessions_request_form.html +++ b/ietf/secr/templates/includes/sessions_request_form.html @@ -5,7 +5,7 @@ {{ form.non_field_errors }} {% endif %} - + @@ -31,6 +31,7 @@ @@ -77,22 +79,23 @@ + @@ -106,9 +109,10 @@ {% endif %} - + +
    Working Group Name:{{ group.name }} ({{ group.acronym }})
    Area Name:{% if group.parent %}{{ group.parent.name }} ({{ group.parent.acronym }}){% endif %}
    Number of Sessions:*{{ form.num_session.errors }}{{ form.num_session }}
    Conflicts to Avoid: + @@ -40,7 +41,7 @@ {% if forloop.first %}{% endif %} @@ -64,6 +65,7 @@ +
    Other WGs that included {{ group.name }} in their conflict lists: {{ session_conflicts.inbound|default:"None" }}WG Sessions:
    You may select multiple WGs within each category
    {{ cname|title }} {{ cselector }} -
    +
    {{ cfield.errors }}{{ cfield }}
    BOF Sessions: If the sessions can not be found in the fields above, please enter free form requests in the Special Requests field below.
    Times during which this WG can not meet: {{ form.timeranges.errors }}{{ form.timeranges }}
    - Plan session adjacent with another WG:
    + Plan session adjacent with another WG:
    (Immediately before or after another WG, no break in between, in the same room.)
    {{ form.adjacent_with_wg.errors }}{{ form.adjacent_with_wg }}
    - Joint session with:
    + Joint session with:
    (To request one session for multiple WGs together.)
    {{ form.joint_with_groups_selector }} -
    +
    {{ form.joint_with_groups.errors }}{{ form.joint_with_groups }}
    Special Requests:
     
    i.e. restrictions on meeting times / days, etc.
    (limit 200 characters)
    Special Requests:
     
    i.e. restrictions on meeting times / days, etc.
    (limit 200 characters)
    {{ form.comments.errors }}{{ form.comments }}
    diff --git a/ietf/secr/templates/includes/sessions_request_view.html b/ietf/secr/templates/includes/sessions_request_view.html index 5d30e4d64a9..f2b39f38fae 100644 --- a/ietf/secr/templates/includes/sessions_request_view.html +++ b/ietf/secr/templates/includes/sessions_request_view.html @@ -1,6 +1,6 @@ {% load ams_filters %} - + @@ -15,9 +15,11 @@ @@ -57,4 +59,5 @@ {% endif %} +
    Working Group Name:{{ group.name }} ({{ group.acronym }})
    Area Name:{{ group.parent }}
    Number of Sessions Requested:{% if session.third_session %}3{% else %}{{ session.num_session }}{% endif %}
    {% if session_conflicts.outbound %} + {% for conflict in session_conflicts.outbound %} {% endfor %} +
    {{ conflict.name|title }}: {{ conflict.groups }}
    {% else %}None{% endif %}
    Special Requests:{{ session.comments }}
    \ No newline at end of file diff --git a/ietf/secr/templates/includes/upload_footer.html b/ietf/secr/templates/includes/upload_footer.html index d2faf02c951..48f12b118c9 100755 --- a/ietf/secr/templates/includes/upload_footer.html +++ b/ietf/secr/templates/includes/upload_footer.html @@ -2,5 +2,5 @@
  • Instructions.
  • If you require assistance in using this tool, or wish to report a bug, then please send a message to ietf-action@ietf.org.
  • To submit your materials via email, please send agendas to agenda@ietf.org and minutes/presentation slides to proceedings@ietf.org.
  • -
  • Note: Normal session materials materials management is now performed using the {% if meeting.number %}{% endif %}materials page{% if meeting.number %}{% endif %} +
  • Note: Normal session materials materials management is now performed using the {% if meeting.number %}{% endif %}materials page{% if meeting.number %}{% endif %}
  • \ No newline at end of file diff --git a/ietf/secr/templates/main.html b/ietf/secr/templates/main.html index 1419579e277..dcda4718dee 100644 --- a/ietf/secr/templates/main.html +++ b/ietf/secr/templates/main.html @@ -7,9 +7,10 @@ {% if user|has_role:"Secretariat" %} + + {% else %} + + {% endif %} diff --git a/ietf/secr/templates/meetings/add.html b/ietf/secr/templates/meetings/add.html index 64259bb97c7..12b5cd47b69 100644 --- a/ietf/secr/templates/meetings/add.html +++ b/ietf/secr/templates/meetings/add.html @@ -18,7 +18,10 @@

    Proceedings - Add

    {% csrf_token %} + + {{ form.as_table }} +
    {% include "includes/buttons_save_cancel.html"%} diff --git a/ietf/secr/templates/meetings/base_rooms_times.html b/ietf/secr/templates/meetings/base_rooms_times.html index f03eaafaa30..dc08e9eb50f 100644 --- a/ietf/secr/templates/meetings/base_rooms_times.html +++ b/ietf/secr/templates/meetings/base_rooms_times.html @@ -4,7 +4,7 @@ {% block title %}Meetings{% endblock %} {% block extrahead %}{{ block.super }} - + diff --git a/ietf/secr/templates/meetings/blue_sheet.html b/ietf/secr/templates/meetings/blue_sheet.html index 6f5f629992b..629f8e93e4a 100644 --- a/ietf/secr/templates/meetings/blue_sheet.html +++ b/ietf/secr/templates/meetings/blue_sheet.html @@ -22,7 +22,7 @@

    IETF {{ meeting.number }} - Blue Sheet

    • {% csrf_token %} - +
        Last run: {% if last_run %} @@ -35,11 +35,11 @@

      IETF {{ meeting.number }} - Blue Sheet

      Use this to download the blue sheets from the server.

      • - +
      -
      +

      Use the session details page for a group to upload scanned bluesheets. The session details pages for a group can be reached from the meeting's materials page.

      diff --git a/ietf/secr/templates/meetings/edit_meeting.html b/ietf/secr/templates/meetings/edit_meeting.html index dc1599e96df..54c02e40070 100644 --- a/ietf/secr/templates/meetings/edit_meeting.html +++ b/ietf/secr/templates/meetings/edit_meeting.html @@ -19,7 +19,10 @@
      {% csrf_token %}

      Meetings - Edit

      + + {{ form.as_table }} +
      {% include "includes/buttons_save_cancel.html"%} @@ -27,5 +30,4 @@

      Meetings - Edit

    -{% endblock %} - +{% endblock %} \ No newline at end of file diff --git a/ietf/secr/templates/meetings/main.html b/ietf/secr/templates/meetings/main.html index 404603dc061..e4cfa5ce8ec 100755 --- a/ietf/secr/templates/meetings/main.html +++ b/ietf/secr/templates/meetings/main.html @@ -29,9 +29,12 @@

    Select a meeting to manage


    {% csrf_token %} - {{ form }} + + + {{ form.as_table }} +
    - +
    diff --git a/ietf/secr/templates/meetings/misc_session_edit.html b/ietf/secr/templates/meetings/misc_session_edit.html index cb47b156a26..af4d1bdbd71 100755 --- a/ietf/secr/templates/meetings/misc_session_edit.html +++ b/ietf/secr/templates/meetings/misc_session_edit.html @@ -7,7 +7,10 @@

    Meeting - {{ meeting }}

    Session: {{ slot.name }}

    {% csrf_token %} + + {{ form.as_table }} +
    diff --git a/ietf/secr/templates/meetings/misc_sessions.html b/ietf/secr/templates/meetings/misc_sessions.html index 69e00fec295..9f9eb0f7aaf 100644 --- a/ietf/secr/templates/meetings/misc_sessions.html +++ b/ietf/secr/templates/meetings/misc_sessions.html @@ -51,21 +51,23 @@

    TimeSlots

    {% else %}

    No timeslots exist for this meeting. Add rooms with the "duplicate timeslots" option enabled to copy timeslots from the last meeting.

    {% endif %} -

    +

    {% csrf_token %} - + + {{ form.as_table }} - + +
      -
    • +
    diff --git a/ietf/secr/templates/meetings/notifications.html b/ietf/secr/templates/meetings/notifications.html index dd96b779a83..948ad763b1d 100644 --- a/ietf/secr/templates/meetings/notifications.html +++ b/ietf/secr/templates/meetings/notifications.html @@ -19,35 +19,12 @@

    IETF {{ meeting.number }} - Send Notifications

    {% csrf_token %}

    The following groups are in state 'schedw' (Waiting for scheduling). Pressing the Send Now button will change them to be in state 'sched' (Scheduled), and send email notifications each of them that their session has been scheduled. The last time this button was pressed was {{ last_notice.time|date:"Y-m-d" }}:

    -

    {% if not groups %}(none){% endif %}{% for group in groups %}{{ group.acronym }}{% if not forloop.last %}, {% endif %}{% endfor %}

    - +

    {% if not groups %}(none){% endif %}{% for group in groups %}{{ group.acronym }}{% if not forloop.last %}, {% endif %}{% endfor %}

    +
    {% include "includes/buttons_back.html" %}
    -{% endblock %} - - - - - - - - - - - - - - - - - - - - - - - +{% endblock %} \ No newline at end of file diff --git a/ietf/secr/templates/meetings/regular_session_edit.html b/ietf/secr/templates/meetings/regular_session_edit.html index fbb18dc4b6a..479cef8af83 100644 --- a/ietf/secr/templates/meetings/regular_session_edit.html +++ b/ietf/secr/templates/meetings/regular_session_edit.html @@ -20,7 +20,7 @@

    Edit Session

    {% csrf_token %}
    - + @@ -37,7 +37,9 @@

    Edit Session

    - {{ form }} + + {{ form.as_table }} +
    Day: {% if timeslot %}{{ timeslot.time|date:"l" }}{% endif %} Status: {{ current_status_name }}
    diff --git a/ietf/secr/templates/meetings/rooms.html b/ietf/secr/templates/meetings/rooms.html index 732475aed82..ea1deedb24e 100644 --- a/ietf/secr/templates/meetings/rooms.html +++ b/ietf/secr/templates/meetings/rooms.html @@ -8,6 +8,7 @@

    Rooms

    + - + +
    Day
    {{ form.day.errors }}{{ form.day }}
    Time
    {{ form.time.errors }}{{ form.time }}
    Duration
    {{ form.duration.errors }}{{ form.duration }}
    Name
    {{ form.name.errors }}{{ form.name }}
      -
    • +
    diff --git a/ietf/secr/templates/meetings/times_edit.html b/ietf/secr/templates/meetings/times_edit.html index d36097c6ce5..082d37233d3 100755 --- a/ietf/secr/templates/meetings/times_edit.html +++ b/ietf/secr/templates/meetings/times_edit.html @@ -7,7 +7,10 @@

    Meeting - {{ meeting }}

    TimeSlot:

    {% csrf_token %} - {{ form.as_table }} + + + {{ form.as_table }} +
    {% include "includes/buttons_save_cancel.html" %} @@ -15,4 +18,4 @@

    Meeting - {{ meeting }}

    -{% endblock %} +{% endblock %} \ No newline at end of file diff --git a/ietf/secr/templates/meetings/view.html b/ietf/secr/templates/meetings/view.html index b883ca006ba..d552d38dcae 100644 --- a/ietf/secr/templates/meetings/view.html +++ b/ietf/secr/templates/meetings/view.html @@ -20,6 +20,7 @@

    IETF {{ meeting.number }} - View

    {% endif %} + @@ -28,16 +29,18 @@

    IETF {{ meeting.number }} - View

    +
    Start Date: {{ meeting.date }}
    City: {{ meeting.city }}
    Country: {{ meeting.country }}
    Venue Address: {{ meeting.venue_addr }}
    Break Area: {{ meeting.break_area }}
    Registration Area: {{ meeting.reg_area }}
      -
    • -
    • -
    • -
    • +
    • +
    • +
    • +
    • +
      + {% if not proceeding.frozen %} Active Proceeding - + {% endif %} {% if proceeding.frozen %} Frozen Proceeding - + {% endif %}
      @@ -39,10 +39,9 @@

      IETF {{ meeting.meeting_num }}

        -
      • +
    -{% endblock %} - +{% endblock %} \ No newline at end of file diff --git a/ietf/secr/templates/proceedings/view.html b/ietf/secr/templates/proceedings/view.html index d4b44549e65..c21d5c94b0e 100644 --- a/ietf/secr/templates/proceedings/view.html +++ b/ietf/secr/templates/proceedings/view.html @@ -19,34 +19,38 @@

    IETF {{meeting.number}} Meeting - View

    {% endif %} + +
    Meeting Start Date: {{ meeting.date }}
    Meeting End Date: {{ meeting.end_date }}
    Meeting City: {{ meeting.city }}
    Meeting Country: {{ meeting.country }}
    {% if meeting.frozen == 0 %}
      -
    • -
    • -
    • +
    • +
    • +
    {% endif %} {% if meeting.frozen == 1 %}
      -
    • +
    {% endif %}
    diff --git a/ietf/secr/templates/proceedings/wait.html b/ietf/secr/templates/proceedings/wait.html index 1ec707271aa..9590f78541b 100644 --- a/ietf/secr/templates/proceedings/wait.html +++ b/ietf/secr/templates/proceedings/wait.html @@ -14,9 +14,9 @@

    Proceedings

    -
    +

    {{ message }}

    - loading... + loading...
    {% endblock %} diff --git a/ietf/secr/templates/roles/main.html b/ietf/secr/templates/roles/main.html index c5fd48730a5..88be7cdccf6 100755 --- a/ietf/secr/templates/roles/main.html +++ b/ietf/secr/templates/roles/main.html @@ -4,7 +4,7 @@ {% block title %}Roles{% endblock %} {% block extrahead %}{{ block.super }} - + @@ -16,7 +16,7 @@ $('#id_group').change(function(){ var loadUrl = "/secr/roles/ajax/get-roles/" + $(this).val() + "/"; - var ajax_load = 'loading...'; + var ajax_load = 'loading...'; var text = $(this).val(); $("#id_group_acronym").val(text); $("#roles-list").html(ajax_load).load(loadUrl); @@ -59,13 +59,15 @@

    Add Role

    {% with role_form as form %} {{ role_form.non_field_errors }} + - + +
    {{ form.group_acronym.errors }}{{ form.group_acronym }} {{ form.name.errors }}{{ form.name }} {{ form.person.errors }}{{ form.person }}{% if form.person.help_text %}
    {{ form.person.help_text }}{% endif %}
    {{ form.email.errors }}{{ form.email }}{% if form.email.help_text %}
    {{ form.email.help_text }}{% endif %}
    {% endwith %} @@ -73,7 +75,7 @@

    Add Role

      -
    • +
    diff --git a/ietf/secr/templates/rolodex/add.html b/ietf/secr/templates/rolodex/add.html index 7e83cf313e7..2225ec4bdbb 100644 --- a/ietf/secr/templates/rolodex/add.html +++ b/ietf/secr/templates/rolodex/add.html @@ -27,7 +27,7 @@

    Adding {{ name }}

      -
    • +
    @@ -40,8 +40,10 @@

    Adding {{ name }}

    Name

    {% csrf_token %} - + + {{ form.as_table }} +
    {% include "includes/buttons_proceed.html" %} @@ -51,4 +53,4 @@

    Name

    {% endif %} -{% endblock %} +{% endblock %} \ No newline at end of file diff --git a/ietf/secr/templates/rolodex/add_proceed.html b/ietf/secr/templates/rolodex/add_proceed.html index bbdcbe7040b..fd14d26bc41 100644 --- a/ietf/secr/templates/rolodex/add_proceed.html +++ b/ietf/secr/templates/rolodex/add_proceed.html @@ -8,13 +8,16 @@ {% endblock %} {% block content %} -

    Adding {{ name }}

    +

    Adding {{ name }}

    {% csrf_token %}
    -

    Rolodex - Add

    +

    Rolodex - Add

    + + {{ form.as_table }} +
    @@ -23,4 +26,4 @@

    Rolodex - Add

    -{% endblock %} +{% endblock %} \ No newline at end of file diff --git a/ietf/secr/templates/rolodex/delete.html b/ietf/secr/templates/rolodex/delete.html index 4049bae5684..06a173494d9 100644 --- a/ietf/secr/templates/rolodex/delete.html +++ b/ietf/secr/templates/rolodex/delete.html @@ -23,7 +23,7 @@

    Are you sure?

    {% csrf_token %} - - + +
    -{% endblock %} +{% endblock %} \ No newline at end of file diff --git a/ietf/secr/templates/rolodex/edit.html b/ietf/secr/templates/rolodex/edit.html index 4d22a654738..ee7a4db5e5d 100644 --- a/ietf/secr/templates/rolodex/edit.html +++ b/ietf/secr/templates/rolodex/edit.html @@ -18,7 +18,10 @@

    Rolodex - Edit

    + + {{ person_form.as_table }} +
    diff --git a/ietf/secr/templates/rolodex/search.html b/ietf/secr/templates/rolodex/search.html index f2e5d90b091..476debe045c 100644 --- a/ietf/secr/templates/rolodex/search.html +++ b/ietf/secr/templates/rolodex/search.html @@ -16,8 +16,10 @@

    Rolodex - Search Add

    {% csrf_token %} - + + {{ form.as_table }} +
    {% include "includes/buttons_search.html" %} @@ -32,4 +34,4 @@

    Search Results

    {% if not_found %}{{ not_found }}{% endif %}
    -{% endblock %} +{% endblock %} \ No newline at end of file diff --git a/ietf/secr/templates/rolodex/view.html b/ietf/secr/templates/rolodex/view.html index 29f78c21822..3951ecf58a1 100644 --- a/ietf/secr/templates/rolodex/view.html +++ b/ietf/secr/templates/rolodex/view.html @@ -13,59 +13,60 @@

    {{ person.name }} ({{ person.id }})

    - + - - - - {% for email in person.emails %} - - {% endfor %} -
    Name:{{ person.name }}
    Ascii Name:{{ person.ascii }}
    Short Name:{{ person.ascii_short }}
    Aliases:{% for alias in person.alias_set.all %}{% if not forloop.first %}, {% endif %}{{ alias.name }}{% endfor %}
    User:{{ person.user }}
    Email {{ forloop.counter }}:{{ email }}
    -
    + Aliases:{% for alias in person.alias_set.all %}{% if not forloop.first %}, {% endif %}{{ alias.name }}{% endfor %} + User:{{ person.user }} + + {% for email in person.emails %} + Email {{ forloop.counter }}:{{ email }} + {% endfor %} + + +
    - + {% endfor %} + + {% endif %} + +
    -
    -
      -
    • -
    • - {% comment %} - Removed per Glen -
    • - {% endcomment %} -
    -
    +
    +
      +
    • +
    • + {% comment %} +Removed per Glen +
    • +{% endcomment %} +
    +
    - + {% endblock %} \ No newline at end of file diff --git a/ietf/secr/templates/sreq/confirm.html b/ietf/secr/templates/sreq/confirm.html index f313eca0a53..4bf26dd8589 100755 --- a/ietf/secr/templates/sreq/confirm.html +++ b/ietf/secr/templates/sreq/confirm.html @@ -32,15 +32,13 @@

    Sessions - Confirm

    {% if group.features.acts_like_wg and form.session_forms.forms_to_keep|length > 2 %}
    - -

    - - Note: Your request for a third session must be approved by an area director before - being submitted to agenda@ietf.org. Click "Submit" below to email an approval - request to the area directors. - -

    -
    +

    + + Note: Your request for a third session must be approved by an area director before + being submitted to agenda@ietf.org. Click "Submit" below to email an approval + request to the area directors. + +


    {% endif %} diff --git a/ietf/secr/templates/sreq/locked.html b/ietf/secr/templates/sreq/locked.html index 79e7b5a4d8a..cc3efe00a59 100755 --- a/ietf/secr/templates/sreq/locked.html +++ b/ietf/secr/templates/sreq/locked.html @@ -20,7 +20,7 @@

    Sessions - Status

      -
    • +
    diff --git a/ietf/secr/templates/sreq/new.html b/ietf/secr/templates/sreq/new.html index 979fbb4536d..2c6afb55767 100755 --- a/ietf/secr/templates/sreq/new.html +++ b/ietf/secr/templates/sreq/new.html @@ -28,8 +28,8 @@

    IETF {{ meeting.number }}: New Session Request

    {% include "includes/sessions_request_form.html" %} diff --git a/ietf/secr/templates/sreq/tool_status.html b/ietf/secr/templates/sreq/tool_status.html index a657b21d197..cd66174db35 100755 --- a/ietf/secr/templates/sreq/tool_status.html +++ b/ietf/secr/templates/sreq/tool_status.html @@ -19,7 +19,10 @@

    Sessions - Status

    Enter the message that you would like displayed to the WG Chair when this tool is locked.

    {% csrf_token %} - {{ form.as_table }} + + + {{ form.as_table }} +
      @@ -36,4 +39,4 @@

      Sessions - Status

    -{% endblock %} +{% endblock %} \ No newline at end of file diff --git a/ietf/secr/templates/sreq/view.html b/ietf/secr/templates/sreq/view.html index f383b7d293e..67996fa7b7e 100644 --- a/ietf/secr/templates/sreq/view.html +++ b/ietf/secr/templates/sreq/view.html @@ -29,12 +29,12 @@

    Sessions - View (meeting: {{ meeting.number }})

      -
    • +
    • {% if show_approve_button %} -
    • +
    • {% endif %} -
    • -
    • +
    • +
    @@ -43,4 +43,4 @@

    Sessions - View (meeting: {{ meeting.number }})

    {% block footer-extras %} {% include "includes/sessions_footer.html" %} -{% endblock %} +{% endblock %} \ No newline at end of file diff --git a/ietf/secr/templates/telechat/base_telechat.html b/ietf/secr/templates/telechat/base_telechat.html index bb74bcd42af..73d42ea71e2 100644 --- a/ietf/secr/templates/telechat/base_telechat.html +++ b/ietf/secr/templates/telechat/base_telechat.html @@ -5,7 +5,7 @@ {% block extrahead %}{{ block.super }} - + {% endblock %} {% block breadcrumbs %}{{ block.super }} diff --git a/ietf/secr/templates/telechat/doc.html b/ietf/secr/templates/telechat/doc.html index 025b0e8e181..71a0c3f0f1a 100644 --- a/ietf/secr/templates/telechat/doc.html +++ b/ietf/secr/templates/telechat/doc.html @@ -10,23 +10,23 @@ {% if document %} {% if not nav_start %}« Previous{% endif %} {% if not nav_end %}Next »{% endif %} -
    +

    {% for line in header %} - {{ line }}
    + {{ line }}
    {% endfor %}

    -
    +

    {{ document.name }}-{{ document.rev }} ({{ document.intended_std_level }})

    - {% if conflictdoc %}References: {{ conflictdoc }}
    {% endif %} - Ballot Writeup
    - Token: {{ document.ad.name }}
    + {% if conflictdoc %}References: {{ conflictdoc }}
    {% endif %} + Ballot Writeup
    + Token: {{ document.ad.name }}
    {% if document.type_id == "draft" %} - Consensus: {{ document|consensus }}
    - Has downref: {% if downrefs %}Yes{% else %}No{% endif %}
    + Consensus: {{ document|consensus }}
    + Has downref: {% if downrefs %}Yes{% else %}No{% endif %}
    {% endif %} - Number of Open Positions: {{ open_positions }}
    -
    + Number of Open Positions: {{ open_positions }}
    +
    {% csrf_token %} {{ formset.management_form }} @@ -41,7 +41,7 @@

    {{ document.name }}-{{ document.rev }} ({{ document.intended_std_level }}){{ form.initial.name }}{{ form.name }}{{ form.id }} {% with form.position as field %} {% for choice in field.field.choices %} - + {% endfor %} {% endwith %} @@ -54,22 +54,25 @@

    {{ document.name }}-{{ document.rev }} ({{ document.intended_std_level }})

    -

    +

    {% csrf_token %} + + {{ state_form.as_table }} +
    -

    +

    {% if document.type_id == "charter" %} {% include "telechat/group.html" %} -


    +


    {% endif %}

    Ballot Writeup

    @@ -82,12 +85,12 @@

    Downward References

    {% for ref in downrefs %}

    Add {{ref.target.document.canonical_name}} ({{ref.target.document.std_level}} - {{ref.target.document.stream.desc}}) - to downref registry.
    + to downref registry.
    {% if not ref.target.document.std_level %} - +++ Warning: The standards level has not been set yet!!!
    + +++ Warning: The standards level has not been set yet!!!
    {% endif %} {% if not ref.target.document.stream %} - +++ Warning: document stream has not been set yet!!!
    + +++ Warning: document stream has not been set yet!!!
    {% endif %} {% endfor %}

    {% endif %} diff --git a/ietf/secr/templates/telechat/roll_call.html b/ietf/secr/templates/telechat/roll_call.html index 11bd74e1031..63d0405c6ec 100644 --- a/ietf/secr/templates/telechat/roll_call.html +++ b/ietf/secr/templates/telechat/roll_call.html @@ -9,14 +9,14 @@

    This feature is pending

    Roll Call

    -
    +
    {% csrf_token %} {% for person in people %} - {{ person.name }}
    + {{ person.name }}
    {% endfor %} - +
    -{% endblock %} +{% endblock %} \ No newline at end of file diff --git a/ietf/templates/doc/document_html.html b/ietf/templates/doc/document_html.html index 67d3fee0490..1f0ed51fcc0 100644 --- a/ietf/templates/doc/document_html.html +++ b/ietf/templates/doc/document_html.html @@ -36,7 +36,7 @@ {% endif %} {% endblock %} {% block content %} - + {% origin %}
    diff --git a/ietf/templates/group/reset_charter_milestones.html b/ietf/templates/group/reset_charter_milestones.html index 9db9a5dba1b..520819f1e86 100644 --- a/ietf/templates/group/reset_charter_milestones.html +++ b/ietf/templates/group/reset_charter_milestones.html @@ -25,18 +25,18 @@

    type="checkbox" name="milestone" value="{{ milestone.id }}" - id="{{ milestone.id }}" + id="id-{{ milestone.id }}" {% if not milestone.resolved %}checked{% endif %}> -

    {% endfor %}
    diff --git a/ietf/templates/meeting/edit_timeslot.html b/ietf/templates/meeting/edit_timeslot.html index abe32979538..c969f171dc7 100644 --- a/ietf/templates/meeting/edit_timeslot.html +++ b/ietf/templates/meeting/edit_timeslot.html @@ -21,7 +21,7 @@

    {% endif %}
    {% csrf_token %} - + {% bootstrap_form form %}

    IETF overview

    - + {{ template|safe }} {% endblock %} \ No newline at end of file diff --git a/ietf/templates/meeting/session_details_form.html b/ietf/templates/meeting/session_details_form.html index 6a438e303fd..321305f497d 100644 --- a/ietf/templates/meeting/session_details_form.html +++ b/ietf/templates/meeting/session_details_form.html @@ -4,6 +4,7 @@ {{ form.name.as_hidden }}{{ form.purpose.as_hidden }}{{ form.type.as_hidden }}{{ form.requested_duration.as_hidden }} {% else %} + {% comment %} The form-group class is used by session_details_form.js to identify the correct element to hide the name / purpose / type fields when not needed. This is a bootstrap class - the @@ -25,6 +26,7 @@ +
    {{ form.requested_duration.label_tag }} {{ form.requested_duration }}{{ form.requested_duration.errors }}
    {% endif %} {# hidden fields shown whether or not the whole form is hidden #} diff --git a/ietf/templates/meeting/timeslot_edit.html b/ietf/templates/meeting/timeslot_edit.html index 3812a0e77e2..5c31c819503 100644 --- a/ietf/templates/meeting/timeslot_edit.html +++ b/ietf/templates/meeting/timeslot_edit.html @@ -133,7 +133,7 @@

    {% with slots=slot_slices|lookup:day %} {% for slice in date_slices|lookup:day %} {% with cell_ts=ts_list.popleft slot=slots|index:forloop.counter0 %} - + {% if cell_ts %} {% for ts in cell_ts %} diff --git a/ietf/templates/nomcom/edit_nomcom.html b/ietf/templates/nomcom/edit_nomcom.html index cdc449233a3..be9b4fbb6e5 100644 --- a/ietf/templates/nomcom/edit_nomcom.html +++ b/ietf/templates/nomcom/edit_nomcom.html @@ -21,7 +21,7 @@

    Reminder Dates

    The valid format: YYYY-MM-DD

    {% bootstrap_formset formset %} - + {% endblock %} {% block js %} diff --git a/ietf/templates/nomcom/edit_nominee.html b/ietf/templates/nomcom/edit_nominee.html index da46707f8aa..aa9f6a80464 100644 --- a/ietf/templates/nomcom/edit_nominee.html +++ b/ietf/templates/nomcom/edit_nominee.html @@ -14,7 +14,7 @@

    {% csrf_token %} {% bootstrap_form form %} - + Back
    diff --git a/ietf/templates/nomcom/edit_position.html b/ietf/templates/nomcom/edit_position.html index b6c70d4c11e..3dfa62fe1c8 100644 --- a/ietf/templates/nomcom/edit_position.html +++ b/ietf/templates/nomcom/edit_position.html @@ -26,9 +26,9 @@

    {% csrf_token %} {% bootstrap_form form %} - + Back
    {% endblock %} diff --git a/ietf/templates/nomcom/edit_template.html b/ietf/templates/nomcom/edit_template.html index 4830a1e6f79..5c6ba618df1 100644 --- a/ietf/templates/nomcom/edit_template.html +++ b/ietf/templates/nomcom/edit_template.html @@ -61,7 +61,7 @@

    {% endif %} {% csrf_token %} {% bootstrap_form form %} - + Back diff --git a/ietf/templates/nomcom/edit_topic.html b/ietf/templates/nomcom/edit_topic.html index a7e6bfb6556..d8738490637 100644 --- a/ietf/templates/nomcom/edit_topic.html +++ b/ietf/templates/nomcom/edit_topic.html @@ -26,9 +26,10 @@

    {% csrf_token %} {% bootstrap_form form %} - + Back
    {% endblock %} diff --git a/ietf/templates/nomcom/feedback.html b/ietf/templates/nomcom/feedback.html index 9d52529e75b..880fb42dfd6 100644 --- a/ietf/templates/nomcom/feedback.html +++ b/ietf/templates/nomcom/feedback.html @@ -93,7 +93,7 @@

    {% csrf_token %} {% bootstrap_form form %} - +
    {% endif %} diff --git a/ietf/templates/nomcom/history.html b/ietf/templates/nomcom/history.html index e6328bde279..74e7efff7b8 100644 --- a/ietf/templates/nomcom/history.html +++ b/ietf/templates/nomcom/history.html @@ -11,7 +11,7 @@

    NomCom Membership History

    Note: The data for concluded NomComs is occasionally incorrect.

    {% for regime in regimes %} -

    {{ regime.label }}

    +

    {{ regime.label }}

    {% for slug, label, roles in regime.nomcom.personnel %}
    @@ -25,7 +25,7 @@

    {{ regime.label }}

    {% endfor %}
    {% endfor %} -

    2012/2013

    +

    2012/2013

    Chair @@ -64,7 +64,7 @@

    2012/2013

    Rudi Vansnick (ISOC Liaison)
    -

    2011/2012

    +

    2011/2012

    Chair @@ -104,7 +104,7 @@

    2011/2012

    Jason Livingood (ISOC Liaison)
    -

    2010/2011

    +

    2010/2011

    Chair @@ -143,7 +143,7 @@

    2010/2011

    Eric Burger (ISOC Liaison)
    -

    2009/2010

    +

    2009/2010

    Chair @@ -183,9 +183,9 @@

    2009/2010

    TBA (ISOC Liaison)
    -

    +

    2008/2009 -

    +
    Chair @@ -223,9 +223,9 @@

    Bert Wijnen (ISOC Liaison)

    -

    +

    2007/2008 -

    +
    Chair @@ -263,9 +263,9 @@

    Fred Baker (ISOC Liaison)

    -

    +

    2006/2007 -

    +
    Chair @@ -303,9 +303,9 @@

    Fred Baker (ISOC Liaison)

    -

    +

    2005/2006 -

    +
    Chair @@ -343,9 +343,9 @@

    Steve Crocker (ISOC Liaison)

    -

    +

    2004/2005 -

    +
    Chair @@ -384,9 +384,9 @@

    Richard Draves (Previous Chair/Advisor)

    -

    +

    2003/2004 -

    +
    Chair @@ -423,9 +423,9 @@

    Bill Fenner (IESG liaison)

    -

    +

    2002/2003 -

    +
    Chair @@ -462,9 +462,9 @@

    Allison Mankin (IETF liaison)

    -

    +

    2001/2002 -

    +
    Chair @@ -501,9 +501,9 @@

    Thomas Narten (IESG Liaison)

    -

    +

    2000/2001 -

    +
    Chair @@ -540,9 +540,9 @@

    Allison Mankin (IESG Liaison)

    -

    +

    1999/2000 -

    +
    Chair @@ -579,9 +579,9 @@

    Thomas Narten (IESG Liaison)

    -

    +

    1998/1999 -

    +
    Chair @@ -619,9 +619,9 @@

    Michael St Johns (Previous Chair)

    -

    +

    1997/1998 -

    +
    Chair @@ -658,9 +658,9 @@

    Scott Bradner (IESG Liaison),

    -

    +

    1996/1997 -

    +
    Chair @@ -699,9 +699,9 @@

    Guy Almes (Previous Chair),

    -

    +

    1995/1996 -

    +
    Chair @@ -738,9 +738,9 @@

    Harald Alvestrand (IESG Liaison),

    -

    +

    1994/1995 -

    +
    Chair @@ -770,9 +770,9 @@

    Steven Waldbusser,

    -

    +

    1993/1994 -

    +
    Chair @@ -801,9 +801,9 @@

    Jon Postel (IRSG Liaison),

    -

    +

    1992/1993 -

    +
    Members diff --git a/ietf/templates/nomcom/iesg_position_requirements.html b/ietf/templates/nomcom/iesg_position_requirements.html index 774f44df401..5943135a247 100644 --- a/ietf/templates/nomcom/iesg_position_requirements.html +++ b/ietf/templates/nomcom/iesg_position_requirements.html @@ -2,30 +2,30 @@

    -
    {{ generic_iesg_reqs|safe }}
    -
    +

    -
    {{ specific_reqs|safe }}
    -
    +
    \ No newline at end of file diff --git a/ietf/templates/nomcom/private_feedback_email.html b/ietf/templates/nomcom/private_feedback_email.html index c120f47bd81..3bb628ab2f6 100644 --- a/ietf/templates/nomcom/private_feedback_email.html +++ b/ietf/templates/nomcom/private_feedback_email.html @@ -10,11 +10,12 @@
    {% csrf_token %} {% bootstrap_form form %} - + {% if submit_disabled %}disabled{% endif %}> + Save +
    {% endif %} {% endblock %} \ No newline at end of file diff --git a/ietf/templates/nomcom/private_index.html b/ietf/templates/nomcom/private_index.html index b268c1eeb55..2e718253121 100644 --- a/ietf/templates/nomcom/private_index.html +++ b/ietf/templates/nomcom/private_index.html @@ -76,7 +76,7 @@

    Nomination status

    Unique nominee totals - + @@ -109,10 +109,10 @@

    -
    -
    - +
    {% if is_chair and nomcom.group.state_id == 'active' %}
    @@ -175,9 +175,11 @@

    {% if is_chair and nomcom.group.state_id == 'active' %} + @@ -217,10 +219,10 @@

    {% if is_chair %} {% if nomcom.group.state_id == 'active' %}
    -

    {% if not forloop.last %}
    {% endif %} {% endfor %} - + name="end">Save feedback Back {% else %} @@ -108,10 +107,12 @@

    Feedback pending from email list

    {{ form.instance.time|date:"r" }}{{ form.id }} {% for choice in form.type.field.choices %} + @@ -156,7 +157,7 @@

    Feedback pending from email list

    - + {% endif %} {% else %} diff --git a/ietf/templates/nomcom/view_feedback_topic.html b/ietf/templates/nomcom/view_feedback_topic.html index a460e74e8e5..c2c6e12db6a 100644 --- a/ietf/templates/nomcom/view_feedback_topic.html +++ b/ietf/templates/nomcom/view_feedback_topic.html @@ -11,7 +11,7 @@

    Feedback about {{ topic.subject }}

    - {% if flavor == 'top' %} -
  • - -
  • - {% endif %} + {% if flavor == 'top' %}
  • {% endif %}
  • New work
  • - {% if flavor == 'top' %} -
  • - -
  • - {% endif %} + {% if flavor == 'top' %}
  • {% endif %}
  • Other groups
  • {% if user|has_role:"Area Director,Secretariat" %} - {% if flavor == 'top' %} -
  • - -
  • - {% endif %} + {% if flavor == 'top' %}
  • {% endif %}
  • @@ -127,11 +115,7 @@
  • {% endif %} - {% if flavor == 'top' %} -
  • - -
  • - {% endif %} + {% if flavor == 'top' %}
  • {% endif %}
  • @@ -139,11 +123,7 @@
  • {% if user|has_role:"WG Chair,RG Chair" %} - {% if flavor == 'top' %} -
  • - -
  • - {% endif %} + {% if flavor == 'top' %}
  • {% endif %}
  • Manage
  • - +
  • {% endif %} -
  • Review Teams
  • +
  • + Review Teams +
  • {% for g in user|managed_review_groups %}
  • - +
  • {% endif %} -
  • NomComs
  • +
  • + NomComs +
  • {% for g in user|active_nomcoms %}
  • - +
  • {% endif %}
  • @@ -291,8 +272,7 @@
  • {% if flavor == 'top' %} {% if flavor == 'top' %} -
  • - +
  • {% endif %}
  • @@ -307,8 +287,7 @@
  • {% if flavor == 'top' %} {% if flavor == 'top' %} -
  • - +
  • {% endif %}
  • @@ -424,8 +403,7 @@
  • {% if flavor == 'top' %} -
  • - +
  • {% endif %}
  • diff --git a/ietf/templates/base/menu_user.html b/ietf/templates/base/menu_user.html index 29ecf098cda..972bd9ef709 100644 --- a/ietf/templates/base/menu_user.html +++ b/ietf/templates/base/menu_user.html @@ -125,11 +125,7 @@
  • {% endif %} {% if user|has_role:"Area Director" %} - {% if flavor == "top" %} -
  • - -
  • - {% endif %} + {% if flavor == "top" %}
  • {% endif %}
  • AD dashboard
  • {% endif %} {% if user|has_role:"Secretariat" %} - {% if flavor == "top" %} -
  • - -
  • - {% endif %} + {% if flavor == "top" %}
  • {% endif %}
  • IETF secretariat
  • @@ -204,8 +196,7 @@ {% endif %} {% if user|has_role:"IANA" %} {% if flavor == "top" %} -
  • - +
  • {% endif %}
  • @@ -220,8 +211,7 @@ {% endif %} {% if user|has_role:"RFC Editor" %} {% if flavor == "top" %} -
  • - +
  • {% endif %}
  • @@ -234,4 +224,4 @@
  • {% endif %} - {% if flavor == "top" %}{% endif %} \ No newline at end of file + {% if flavor == "top" %}{% endif %} diff --git a/ietf/templates/community/track_document.html b/ietf/templates/community/track_document.html index 91b1cb284ef..59974573e21 100644 --- a/ietf/templates/community/track_document.html +++ b/ietf/templates/community/track_document.html @@ -11,4 +11,4 @@

    -{% endblock %} \ No newline at end of file +{% endblock %} diff --git a/ietf/templates/community/untrack_document.html b/ietf/templates/community/untrack_document.html index f4f4d91d0a0..985dcad89b1 100644 --- a/ietf/templates/community/untrack_document.html +++ b/ietf/templates/community/untrack_document.html @@ -14,4 +14,4 @@ value="Remove tracking of document"> Remove tracking of document - \ No newline at end of file + diff --git a/ietf/templates/doc/ballot/writeupnotes.html b/ietf/templates/doc/ballot/writeupnotes.html index 8b9a8b4b462..481e00e134b 100644 --- a/ietf/templates/doc/ballot/writeupnotes.html +++ b/ietf/templates/doc/ballot/writeupnotes.html @@ -36,4 +36,4 @@

    Back -{% endblock %} \ No newline at end of file +{% endblock %} diff --git a/ietf/templates/doc/document_references.html b/ietf/templates/doc/document_references.html index 32f041a7d8a..4578d6b8cec 100644 --- a/ietf/templates/doc/document_references.html +++ b/ietf/templates/doc/document_references.html @@ -67,8 +67,8 @@

    References from {{ doc.canonical_name }}

    {% endwith %} {% endfor %} - -{% endblock %} -{% block js %} - -{% endblock %} \ No newline at end of file + + {% endblock %} + {% block js %} + + {% endblock %} diff --git a/ietf/templates/doc/draft/release_draft.html b/ietf/templates/doc/draft/release_draft.html index ed56291dc6f..de6f0343407 100644 --- a/ietf/templates/doc/draft/release_draft.html +++ b/ietf/templates/doc/draft/release_draft.html @@ -27,4 +27,4 @@

    Back -{% endblock %} \ No newline at end of file +{% endblock %} diff --git a/ietf/templates/doc/material/presentations-row.html b/ietf/templates/doc/material/presentations-row.html index 450de59369b..015c6404ec3 100644 --- a/ietf/templates/doc/material/presentations-row.html +++ b/ietf/templates/doc/material/presentations-row.html @@ -62,6 +62,6 @@ {% endif %} - {% endfor %} - - \ No newline at end of file + {% endfor %} + + From a3afeeaca2ae09266cdcfbfa7d137352bef906fd Mon Sep 17 00:00:00 2001 From: Lars Eggert Date: Wed, 6 Apr 2022 09:51:43 +0300 Subject: [PATCH 23/26] Fix csrf_token outside form. Fix scope for colspans. --- ietf/templates/doc/document_draft.html | 4 ++-- ietf/templates/doc/drafts_in_iesg_process.html | 4 ++-- ietf/templates/doc/search/search_results.html | 6 +++--- ietf/templates/doc/status_change/status_changes.html | 4 ++-- ietf/templates/group/active_adm.html | 4 ++-- ietf/templates/group/active_iabgroups.html | 4 ++-- ietf/templates/group/review_requests.html | 10 +++++----- ietf/templates/ipr/search_doc_result.html | 4 ++-- ietf/templates/ipr/search_doctitle_result.html | 4 ++-- ietf/templates/ipr/search_result.html | 6 +++--- ietf/templates/ipr/search_wg_result.html | 4 ++-- ietf/templates/liaisons/detail.html | 6 ++++-- ietf/templates/meeting/agenda.html | 4 ++-- ietf/templates/meeting/interim_request_details.html | 6 ++++-- ietf/templates/meeting/requests.html | 4 ++-- 15 files changed, 39 insertions(+), 35 deletions(-) diff --git a/ietf/templates/doc/document_draft.html b/ietf/templates/doc/document_draft.html index a59cca55149..80c3f293fb0 100644 --- a/ietf/templates/doc/document_draft.html +++ b/ietf/templates/doc/document_draft.html @@ -612,7 +612,7 @@ {% if published and started_iesg_process and published.time < started_iesg_process.time %} - + This information refers to IESG processing after the RFC was initially published: @@ -1173,4 +1173,4 @@ - {% endblock %} \ No newline at end of file + {% endblock %} diff --git a/ietf/templates/doc/drafts_in_iesg_process.html b/ietf/templates/doc/drafts_in_iesg_process.html index 10313cde133..4fbb6e06a55 100644 --- a/ietf/templates/doc/drafts_in_iesg_process.html +++ b/ietf/templates/doc/drafts_in_iesg_process.html @@ -29,7 +29,7 @@

    {{ title }}

    {% for state, docs in grouped_docs %} - {{ state.name }} + {{ state.name }} @@ -79,4 +79,4 @@

    {{ title }}

    {% endblock %} {% block js %} -{% endblock %} \ No newline at end of file +{% endblock %} diff --git a/ietf/templates/doc/search/search_results.html b/ietf/templates/doc/search/search_results.html index 342ae8df852..b20470c9859 100644 --- a/ietf/templates/doc/search/search_results.html +++ b/ietf/templates/doc/search/search_results.html @@ -47,9 +47,9 @@ {% if color_ad_position %} - + {% else %} - + {% endif %} {{ doc_group.grouper|plural:doc_group.list }} ({{ doc_group.list|length }} {{"hit"|plural:doc_group.list }}) @@ -61,4 +61,4 @@ {% endfor %} {% endfor %} -{% if end_table %}{% endif %} \ No newline at end of file +{% if end_table %}{% endif %} diff --git a/ietf/templates/doc/status_change/status_changes.html b/ietf/templates/doc/status_change/status_changes.html index cda38e900fa..31d6130a3e9 100644 --- a/ietf/templates/doc/status_change/status_changes.html +++ b/ietf/templates/doc/status_change/status_changes.html @@ -28,7 +28,7 @@

    RFC status changes

    {% for state in state_groups %} - {{ state.grouper }} + {{ state.grouper }} @@ -46,4 +46,4 @@

    RFC status changes

    {% endblock %} {% block js %} -{% endblock %} \ No newline at end of file +{% endblock %} diff --git a/ietf/templates/group/active_adm.html b/ietf/templates/group/active_adm.html index 4efb32e3e7c..e6000597854 100644 --- a/ietf/templates/group/active_adm.html +++ b/ietf/templates/group/active_adm.html @@ -19,7 +19,7 @@

    Active administrative groups

    {% for grouptype in grouped_groups %} - + Active {% firstof grouptype.grouper.verbose_name grouptype.grouper.name 'Top-level Administration' %} @@ -39,4 +39,4 @@

    Active administrative groups

    {% endblock %} {% block js %} -{% endblock %} \ No newline at end of file +{% endblock %} diff --git a/ietf/templates/group/active_iabgroups.html b/ietf/templates/group/active_iabgroups.html index 82edb421262..ac542cd3c3e 100644 --- a/ietf/templates/group/active_iabgroups.html +++ b/ietf/templates/group/active_iabgroups.html @@ -20,7 +20,7 @@

    Active IAB groups

    {% regroup iabgroups by type as grouped_groups %} {% for grouptype in grouped_groups %} - + {% firstof grouptype.grouper.verbose_name grouptype.grouper.name %}{{ grouptype.list|pluralize }} @@ -44,4 +44,4 @@

    Active IAB groups

    {% endblock %} {% block js %} -{% endblock %} \ No newline at end of file +{% endblock %} diff --git a/ietf/templates/group/review_requests.html b/ietf/templates/group/review_requests.html index 3eafbd04cb7..7d75cf71939 100644 --- a/ietf/templates/group/review_requests.html +++ b/ietf/templates/group/review_requests.html @@ -30,7 +30,7 @@

    Unassigned and open re - Unassigned review requests + Unassigned review requests @@ -80,7 +80,7 @@

    Unassigned and open re - Open review requests + Open review requests @@ -149,7 +149,7 @@

    Closed review requests and assignme - + Closed review requests @@ -210,7 +210,7 @@

    Closed review requests and assignme - + Closed review assignments @@ -252,4 +252,4 @@

    Closed review requests and assignme {% block js %} - {% endblock %} \ No newline at end of file + {% endblock %} diff --git a/ietf/templates/ipr/search_doc_result.html b/ietf/templates/ipr/search_doc_result.html index 1d2ef54bcaa..7b415b087e6 100644 --- a/ietf/templates/ipr/search_doc_result.html +++ b/ietf/templates/ipr/search_doc_result.html @@ -57,7 +57,7 @@ {% for doc in docs %} - + Results for {{ doc.name|rfcspace|lstrip:"0"|urlize_ietf_docs }} ("{{ doc.document.title }}"){% if not forloop.first %}{% if doc.related %}, which was {{ doc.relation|lower }} {{ doc.related.source|rfcspace|lstrip:"0"|urlize_ietf_docs }} ("{{ doc.related.source.title }}"){% endif %}{% endif %} @@ -122,4 +122,4 @@ {% block js %} -{% endblock %} \ No newline at end of file +{% endblock %} diff --git a/ietf/templates/ipr/search_doctitle_result.html b/ietf/templates/ipr/search_doctitle_result.html index 8efd96f7e79..8d0ecbadb4f 100644 --- a/ietf/templates/ipr/search_doctitle_result.html +++ b/ietf/templates/ipr/search_doctitle_result.html @@ -27,7 +27,7 @@ {% for alias in docs %} - + IPR that is related to {{ alias.name|lstrip:"0"|rfcnospace|urlize_ietf_docs }} ("{{ alias.document.title }}") {% if alias.related %} that was {{ alias.relation|lower }} {{ alias.related.source.name|lstrip:"0"|rfcnospace|urlize_ietf_docs }} ("{{ alias.related.source.title }}") @@ -68,4 +68,4 @@ {% endblock %} {% block js %} -{% endblock %} \ No newline at end of file +{% endblock %} diff --git a/ietf/templates/ipr/search_result.html b/ietf/templates/ipr/search_result.html index 2ce225517a3..a104e45c070 100644 --- a/ietf/templates/ipr/search_result.html +++ b/ietf/templates/ipr/search_result.html @@ -37,14 +37,14 @@

    {% ifchanged %} - {{ ipr.state.name }} + {{ ipr.state.name }} {% endifchanged %} {% endif %} - + {% block intro_prefix %}IPR that was submitted by "{{ q }}" and{% endblock %} {% block related %} {% with ipr.iprdocrel_set.all as iprdocrels %} @@ -100,4 +100,4 @@

    {% block js %} -{% endblock %} \ No newline at end of file +{% endblock %} diff --git a/ietf/templates/ipr/search_wg_result.html b/ietf/templates/ipr/search_wg_result.html index 25cfc148ed2..20bf592f22c 100644 --- a/ietf/templates/ipr/search_wg_result.html +++ b/ietf/templates/ipr/search_wg_result.html @@ -23,7 +23,7 @@ {% for alias in docs %} - + IPR related to {{ alias.name|rfcspace|lstrip:"0"|urlize_ietf_docs }} ("{{ alias.document.title }}") {% if alias.related %} that was {{ alias.relation|lower }} {{ alias.related.source|rfcspace|lstrip:"0"|urlize_ietf_docs }} ("{{ alias.related.source.title|escape }}") @@ -68,4 +68,4 @@ {% endblock %} {% block js %} -{% endblock %} \ No newline at end of file +{% endblock %} diff --git a/ietf/templates/liaisons/detail.html b/ietf/templates/liaisons/detail.html index 121fa228c54..2c024c5dc35 100644 --- a/ietf/templates/liaisons/detail.html +++ b/ietf/templates/liaisons/detail.html @@ -207,8 +207,10 @@

    {% endif %} - {% if liaison.state.slug == 'pending' and can_edit or liaison.state.slug == 'dead' and can_edit %}
    {% endif %} + {% if liaison.state.slug == 'pending' and can_edit or liaison.state.slug == 'dead' and can_edit %} + {% csrf_token %} + {% endif %} {% if liaison.state.slug == 'pending' and can_edit %} @@ -244,4 +246,4 @@

    name="resurrect">Resurrect {% endif %} {% if liaison.state.slug == 'pending' and can_edit or liaison.state.slug == 'dead' and can_edit %}{% endif %} -{% endblock %} \ No newline at end of file +{% endblock %} diff --git a/ietf/templates/meeting/agenda.html b/ietf/templates/meeting/agenda.html index 9655bb7ebb3..32d29fb7a10 100644 --- a/ietf/templates/meeting/agenda.html +++ b/ietf/templates/meeting/agenda.html @@ -109,7 +109,7 @@

    {% for item in filtered_assignments %} {% ifchanged item.timeslot.time|date:"Y-m-d" %} - {{ item.timeslot.time|date:"l, F j, Y" }} @@ -488,4 +488,4 @@

    } ); -{% endblock %} \ No newline at end of file +{% endblock %} diff --git a/ietf/templates/meeting/interim_request_details.html b/ietf/templates/meeting/interim_request_details.html index e921ff6d830..0cfec501be1 100644 --- a/ietf/templates/meeting/interim_request_details.html +++ b/ietf/templates/meeting/interim_request_details.html @@ -103,8 +103,10 @@

    Interim Meeting Request Details

    {% endif %} {% endfor %} - {% if can_approve and status_slug == 'apprw' %}
    {% endif %} + {% if can_approve and status_slug == 'apprw' %} + {% csrf_token %} + {% endif %} {% with meeting_status.slug as status_slug %} {% if can_edit %} Interim Meeting Request Details

    {% block js %} -{% endblock %} \ No newline at end of file +{% endblock %} diff --git a/ietf/templates/meeting/requests.html b/ietf/templates/meeting/requests.html index 1ccc6640bb4..86b8c26f972 100644 --- a/ietf/templates/meeting/requests.html +++ b/ietf/templates/meeting/requests.html @@ -43,7 +43,7 @@

    {% if not forloop.first %}{% endif %} - {{ session.current_status_name|capfirst }} + {{ session.current_status_name|capfirst }} @@ -104,4 +104,4 @@

    {% endblock %} {% block js %} -{% endblock %} \ No newline at end of file +{% endblock %} From a5ee6b579d6249255c2735964bd389e58cb4fba6 Mon Sep 17 00:00:00 2001 From: Lars Eggert Date: Wed, 6 Apr 2022 10:12:41 +0300 Subject: [PATCH 24/26] Address review comments by @jennifer-richards. --- ietf/utils/test_runner.py | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/ietf/utils/test_runner.py b/ietf/utils/test_runner.py index 1eacf8abc7a..a5d652d80b0 100644 --- a/ietf/utils/test_runner.py +++ b/ietf/utils/test_runner.py @@ -152,7 +152,7 @@ def __init__(self, test_runner=None, **kwargs): @unittest.skipIf(sys.version_info[0] < 3, "Mypy and django-stubs not available under Py2") def mypy_test(self): - return # FIXME + return # FIXME: fails with error: Module 'django.template.backends.django' has no attribute 'Template'" self.maxDiff = None from mypy import api out, err, code = api.run(['ietf', ]) @@ -166,7 +166,7 @@ class ValidatingTemplates(DjangoTemplates): def __init__(self, params): super().__init__(params) - if settings.validate_html is False: + if not settings.validate_html: return self.validation_cache = set() self.cwd = str(pathlib.Path.cwd()) @@ -182,7 +182,7 @@ def __init__(self, template, backend): def render(self, context=None, request=None): content = super().render(context, request) - if settings.validate_html is False: + if not settings.validate_html: return content if not self.origin.name.endswith("html"): @@ -586,17 +586,17 @@ def add_arguments(cls, parser): action='store_true', default=False, help='Show logging output going to LOG_USER in production mode') parser.add_argument('--no-validate-html', - action='store_true', dest="no_validate_html", default=False, + action='store_false', dest="validate_html", default=True, help='Do not validate all generated HTML with html-validate.org') - def __init__(self, skip_coverage=False, save_version_coverage=None, html_report=None, permit_mixed_migrations=None, show_logging=None, no_validate_html=None, **kwargs): + def __init__(self, skip_coverage=False, save_version_coverage=None, html_report=None, permit_mixed_migrations=None, show_logging=None, validate_html=None, **kwargs): # self.check_coverage = not skip_coverage self.save_version_coverage = save_version_coverage self.html_report = html_report self.permit_mixed_migrations = permit_mixed_migrations self.show_logging = show_logging - settings.validate_html = self if no_validate_html is False else False + settings.validate_html = self if validate_html else None settings.show_logging = show_logging # self.root_dir = os.path.dirname(settings.BASE_DIR) @@ -712,7 +712,7 @@ def setup_test_environment(self, **kwargs): s[1] = tuple(s[1]) # random.setstate() won't accept a list in lieu of a tuple factory.random.set_random_state(s) - if settings.validate_html is False: + if not settings.validate_html: print(" Not validating any generated HTML; " "please do so at least once before committing changes") else: @@ -745,7 +745,7 @@ def setup_test_environment(self, **kwargs): config["doc"]["extends"].append("html-validate:document") # FIXME: we should find a way to use SRI, but ignore for now: config["doc"]["rules"]["require-sri"] = "off" - # permit discontinuous heading numbering in cards + # permit discontinuous heading numbering in cards, modals and dialogs: config["doc"]["rules"]["heading-level"] = [ "error", { @@ -758,7 +758,7 @@ def setup_test_environment(self, **kwargs): ] self.config_file = {} - for kind in ["doc", "frag"]: + for kind in self.batches: self.config_file[kind] = tempfile.NamedTemporaryFile( prefix="html-validate-config-" ) @@ -789,8 +789,7 @@ def teardown_test_environment(self, **kwargs): super(IetfTestRunner, self).teardown_test_environment(**kwargs) if settings.validate_html: - # self.queue.put(None) - for kind in ["doc", "frag"]: + for kind in self.batches: self.validate(kind) self.config_file[kind].close() @@ -1000,4 +999,4 @@ def tearDownClass(cls): def tearDown(self): for k, v in self.replaced_settings.items(): setattr(settings, k, v) - super().tearDown() \ No newline at end of file + super().tearDown() From fb449b0464aaf2181c66fc6c774ee8814cf3898d Mon Sep 17 00:00:00 2001 From: Lars Eggert Date: Thu, 7 Apr 2022 15:51:00 +0300 Subject: [PATCH 25/26] Fix quotes --- ietf/ietfauth/views.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ietf/ietfauth/views.py b/ietf/ietfauth/views.py index e359969baad..892e3c64679 100644 --- a/ietf/ietfauth/views.py +++ b/ietf/ietfauth/views.py @@ -749,7 +749,7 @@ def login(request, extra_context=None): You have personal information associated with your account which is not derived from draft submissions or other ietf work, namely: %s. Please go to your account profile and review your - personal information, then scoll to the bottom and check the "confirm" + personal information, then scoll to the bottom and check the 'confirm' checkbox and submit the form, in order to to indicate that that the provided personal information may be used and displayed within the IETF datatracker. @@ -816,4 +816,4 @@ def clean_key(self): messages.error(request, "Key validation failed; key not disabled") else: form = KeyDeleteForm(request.GET) - return render(request, 'form.html', {'form':form, 'title':"Disable a personal API key", 'description':'', 'button':'Disable key'}) \ No newline at end of file + return render(request, 'form.html', {'form':form, 'title':"Disable a personal API key", 'description':'', 'button':'Disable key'}) From ee3e87fc888048c1b67703f76ee7e5bcc45ecc05 Mon Sep 17 00:00:00 2001 From: Lars Eggert Date: Thu, 7 Apr 2022 16:20:22 +0300 Subject: [PATCH 26/26] Re-enable mypy test and suppress attribute error on "import Template" --- ietf/utils/test_runner.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ietf/utils/test_runner.py b/ietf/utils/test_runner.py index a5d652d80b0..96979831a3e 100644 --- a/ietf/utils/test_runner.py +++ b/ietf/utils/test_runner.py @@ -69,7 +69,8 @@ from django.test.runner import DiscoverRunner from django.core.management import call_command from django.urls import URLResolver # type: ignore -from django.template.backends.django import DjangoTemplates, Template +from django.template.backends.django import DjangoTemplates +from django.template.backends.django import Template # type: ignore[attr-defined] # from django.utils.safestring import mark_safe import debug # pyflakes:ignore @@ -152,7 +153,6 @@ def __init__(self, test_runner=None, **kwargs): @unittest.skipIf(sys.version_info[0] < 3, "Mypy and django-stubs not available under Py2") def mypy_test(self): - return # FIXME: fails with error: Module 'django.template.backends.django' has no attribute 'Template'" self.maxDiff = None from mypy import api out, err, code = api.run(['ietf', ])