Merge remote-tracking branch 'origin/main' into feat/postgres

This commit is contained in:
Robert Sparks 2023-01-23 10:28:14 -06:00
commit 2351629fcc
No known key found for this signature in database
GPG key ID: 6E2A6A5775F91318
47 changed files with 764 additions and 527 deletions

3
.github/semantic.yml vendored Normal file
View file

@ -0,0 +1,3 @@
enabled: true
titleOnly: true
targetUrl: "https://www.conventionalcommits.org/en/v1.0.0/#summary"

View file

@ -82,7 +82,7 @@ jobs:
echo "NEXT_VERSION=$nextStrict" >> $GITHUB_ENV
- name: Create Draft Release
uses: ncipollo/release-action@v1.11.1
uses: ncipollo/release-action@v1.12.0
if: ${{ github.event.inputs.publish == 'true' && github.event.inputs.dryrun == 'false' }}
with:
prerelease: true
@ -368,10 +368,11 @@ jobs:
histCoveragePath: historical-coverage.json
- name: Create Release
uses: ncipollo/release-action@v1.11.1
uses: ncipollo/release-action@v1.12.0
if: ${{ env.SHOULD_DEPLOY == 'true' && github.event.inputs.dryrun == 'false' }}
with:
allowUpdates: true
makeLatest: true
draft: false
tag: ${{ env.PKG_VERSION }}
name: ${{ env.PKG_VERSION }}
@ -384,7 +385,6 @@ jobs:
if: ${{ github.event.inputs.updateCoverage == 'true' && github.event.inputs.dryrun == 'false' }}
with:
allowUpdates: true
makeLatest: true
tag: baseline
omitBodyDuringUpdate: true
omitNameDuringUpdate: true

View file

@ -122,11 +122,18 @@ jobs:
- uses: actions/checkout@v3
with:
ref: 'feat/postgres'
- name: Migrate
run: |
chmod +x ./docker/scripts/db-pg-migrate.sh
sh ./docker/scripts/db-pg-migrate.sh
uses: nick-fields/retry@v2
with:
timeout_minutes: 30
max_attempts: 3
command: |
chmod +x ./docker/scripts/db-pg-migrate.sh
sh ./docker/scripts/db-pg-migrate.sh
on_retry_command: |
psql -U django -h pgdb -d ietf -v ON_ERROR_STOP=1 -c '\x' -c 'DROP SCHEMA ietf_utf8 CASCADE;'
rm -f cast.load
- name: Upload DB Dump
uses: actions/upload-artifact@v3

258
.pnp.cjs generated
View file

@ -50,41 +50,41 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
["@twuni/emojify", "npm:1.0.2"],\
["@vitejs/plugin-vue", "virtual:dc3fc578bfa5e06182a4d2be39ede0bc5b74940b1ffe0d70c26892ab140a4699787750fba175dc306292e80b4aa2c8c5f68c2a821e69b2c37e360c0dff36ff66#npm:3.2.0"],\
["bootstrap", "virtual:dc3fc578bfa5e06182a4d2be39ede0bc5b74940b1ffe0d70c26892ab140a4699787750fba175dc306292e80b4aa2c8c5f68c2a821e69b2c37e360c0dff36ff66#npm:5.2.3"],\
["bootstrap-icons", "npm:1.10.2"],\
["bootstrap-icons", "npm:1.10.3"],\
["browser-fs-access", "npm:0.31.1"],\
["browserlist", "npm:1.0.1"],\
["c8", "npm:7.12.0"],\
["caniuse-lite", "npm:1.0.30001439"],\
["d3", "npm:7.7.0"],\
["eslint", "npm:8.29.0"],\
["caniuse-lite", "npm:1.0.30001442"],\
["d3", "npm:7.8.0"],\
["eslint", "npm:8.31.0"],\
["eslint-config-standard", "virtual:dc3fc578bfa5e06182a4d2be39ede0bc5b74940b1ffe0d70c26892ab140a4699787750fba175dc306292e80b4aa2c8c5f68c2a821e69b2c37e360c0dff36ff66#npm:17.0.0"],\
["eslint-plugin-cypress", "virtual:dc3fc578bfa5e06182a4d2be39ede0bc5b74940b1ffe0d70c26892ab140a4699787750fba175dc306292e80b4aa2c8c5f68c2a821e69b2c37e360c0dff36ff66#npm:2.12.1"],\
["eslint-plugin-import", "virtual:dc3fc578bfa5e06182a4d2be39ede0bc5b74940b1ffe0d70c26892ab140a4699787750fba175dc306292e80b4aa2c8c5f68c2a821e69b2c37e360c0dff36ff66#npm:2.26.0"],\
["eslint-plugin-n", "virtual:dc3fc578bfa5e06182a4d2be39ede0bc5b74940b1ffe0d70c26892ab140a4699787750fba175dc306292e80b4aa2c8c5f68c2a821e69b2c37e360c0dff36ff66#npm:15.6.0"],\
["eslint-plugin-n", "virtual:dc3fc578bfa5e06182a4d2be39ede0bc5b74940b1ffe0d70c26892ab140a4699787750fba175dc306292e80b4aa2c8c5f68c2a821e69b2c37e360c0dff36ff66#npm:15.6.1"],\
["eslint-plugin-node", "virtual:dc3fc578bfa5e06182a4d2be39ede0bc5b74940b1ffe0d70c26892ab140a4699787750fba175dc306292e80b4aa2c8c5f68c2a821e69b2c37e360c0dff36ff66#npm:11.1.0"],\
["eslint-plugin-promise", "virtual:dc3fc578bfa5e06182a4d2be39ede0bc5b74940b1ffe0d70c26892ab140a4699787750fba175dc306292e80b4aa2c8c5f68c2a821e69b2c37e360c0dff36ff66#npm:6.1.1"],\
["eslint-plugin-vue", "virtual:dc3fc578bfa5e06182a4d2be39ede0bc5b74940b1ffe0d70c26892ab140a4699787750fba175dc306292e80b4aa2c8c5f68c2a821e69b2c37e360c0dff36ff66#npm:9.8.0"],\
["file-saver", "npm:2.0.5"],\
["highcharts", "npm:10.3.2"],\
["html-validate", "virtual:dc3fc578bfa5e06182a4d2be39ede0bc5b74940b1ffe0d70c26892ab140a4699787750fba175dc306292e80b4aa2c8c5f68c2a821e69b2c37e360c0dff36ff66#npm:7.10.1"],\
["jquery", "npm:3.6.2"],\
["html-validate", "virtual:dc3fc578bfa5e06182a4d2be39ede0bc5b74940b1ffe0d70c26892ab140a4699787750fba175dc306292e80b4aa2c8c5f68c2a821e69b2c37e360c0dff36ff66#npm:7.12.2"],\
["jquery", "npm:3.6.3"],\
["jquery-migrate", "virtual:dc3fc578bfa5e06182a4d2be39ede0bc5b74940b1ffe0d70c26892ab140a4699787750fba175dc306292e80b4aa2c8c5f68c2a821e69b2c37e360c0dff36ff66#npm:3.4.0"],\
["jquery-ui-dist", "npm:1.13.2"],\
["js-cookie", "npm:3.0.1"],\
["list.js", "npm:2.3.1"],\
["lodash", "npm:4.17.21"],\
["lodash-es", "npm:4.17.21"],\
["luxon", "npm:3.1.1"],\
["luxon", "npm:3.2.1"],\
["moment", "npm:2.29.4"],\
["moment-timezone", "npm:0.5.40"],\
["ms", "npm:2.1.3"],\
["murmurhash-js", "npm:1.0.0"],\
["naive-ui", "virtual:dc3fc578bfa5e06182a4d2be39ede0bc5b74940b1ffe0d70c26892ab140a4699787750fba175dc306292e80b4aa2c8c5f68c2a821e69b2c37e360c0dff36ff66#npm:2.34.2"],\
["naive-ui", "virtual:dc3fc578bfa5e06182a4d2be39ede0bc5b74940b1ffe0d70c26892ab140a4699787750fba175dc306292e80b4aa2c8c5f68c2a821e69b2c37e360c0dff36ff66#npm:2.34.3"],\
["parcel", "virtual:dc3fc578bfa5e06182a4d2be39ede0bc5b74940b1ffe0d70c26892ab140a4699787750fba175dc306292e80b4aa2c8c5f68c2a821e69b2c37e360c0dff36ff66#npm:2.8.2"],\
["pinia", "virtual:dc3fc578bfa5e06182a4d2be39ede0bc5b74940b1ffe0d70c26892ab140a4699787750fba175dc306292e80b4aa2c8c5f68c2a821e69b2c37e360c0dff36ff66#npm:2.0.28"],\
["pinia-plugin-persist", "virtual:dc3fc578bfa5e06182a4d2be39ede0bc5b74940b1ffe0d70c26892ab140a4699787750fba175dc306292e80b4aa2c8c5f68c2a821e69b2c37e360c0dff36ff66#npm:1.0.0"],\
["pug", "npm:3.0.2"],\
["sass", "npm:1.56.2"],\
["sass", "npm:1.57.1"],\
["seedrandom", "npm:3.0.5"],\
["select2", "npm:4.1.0-rc.0"],\
["select2-bootstrap-5-theme", "npm:1.3.0"],\
@ -169,10 +169,10 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
],\
"linkType": "SOFT"\
}],\
["virtual:fbe7528a5ca5bae03aee1ecb3bd12568e1a4061d2923a771668e8a940ef9ad64125dd8cc7324107ffbd6e34ffa123be3bcd813b79ff7b2db2cb2572affe66874#npm:0.15.10", {\
"packageLocation": "./.yarn/__virtual__/@css-render-plugin-bem-virtual-ca2408adfb/0/cache/@css-render-plugin-bem-npm-0.15.10-41ccecaa2f-cbab72a7b5.zip/node_modules/@css-render/plugin-bem/",\
["virtual:4fa5810747c131dcf20cc36c17e835ba5fa42265b3b1f99a6712420e8672195f31ac73d077125c82af29bde6232df6ecc61b1f3ff0dde337b62085ef712e7d6a#npm:0.15.10", {\
"packageLocation": "./.yarn/__virtual__/@css-render-plugin-bem-virtual-1bbf78173b/0/cache/@css-render-plugin-bem-npm-0.15.10-41ccecaa2f-cbab72a7b5.zip/node_modules/@css-render/plugin-bem/",\
"packageDependencies": [\
["@css-render/plugin-bem", "virtual:fbe7528a5ca5bae03aee1ecb3bd12568e1a4061d2923a771668e8a940ef9ad64125dd8cc7324107ffbd6e34ffa123be3bcd813b79ff7b2db2cb2572affe66874#npm:0.15.10"],\
["@css-render/plugin-bem", "virtual:4fa5810747c131dcf20cc36c17e835ba5fa42265b3b1f99a6712420e8672195f31ac73d077125c82af29bde6232df6ecc61b1f3ff0dde337b62085ef712e7d6a#npm:0.15.10"],\
["@types/css-render", null],\
["css-render", "npm:0.15.10"]\
],\
@ -191,10 +191,10 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
],\
"linkType": "SOFT"\
}],\
["virtual:fbe7528a5ca5bae03aee1ecb3bd12568e1a4061d2923a771668e8a940ef9ad64125dd8cc7324107ffbd6e34ffa123be3bcd813b79ff7b2db2cb2572affe66874#npm:0.15.10", {\
"packageLocation": "./.yarn/__virtual__/@css-render-vue3-ssr-virtual-864cfc3967/0/cache/@css-render-vue3-ssr-npm-0.15.10-b8526cc313-7977e0c440.zip/node_modules/@css-render/vue3-ssr/",\
["virtual:4fa5810747c131dcf20cc36c17e835ba5fa42265b3b1f99a6712420e8672195f31ac73d077125c82af29bde6232df6ecc61b1f3ff0dde337b62085ef712e7d6a#npm:0.15.10", {\
"packageLocation": "./.yarn/__virtual__/@css-render-vue3-ssr-virtual-75d553c878/0/cache/@css-render-vue3-ssr-npm-0.15.10-b8526cc313-7977e0c440.zip/node_modules/@css-render/vue3-ssr/",\
"packageDependencies": [\
["@css-render/vue3-ssr", "virtual:fbe7528a5ca5bae03aee1ecb3bd12568e1a4061d2923a771668e8a940ef9ad64125dd8cc7324107ffbd6e34ffa123be3bcd813b79ff7b2db2cb2572affe66874#npm:0.15.10"],\
["@css-render/vue3-ssr", "virtual:4fa5810747c131dcf20cc36c17e835ba5fa42265b3b1f99a6712420e8672195f31ac73d077125c82af29bde6232df6ecc61b1f3ff0dde337b62085ef712e7d6a#npm:0.15.10"],\
["@types/vue", null],\
["vue", "npm:3.2.45"]\
],\
@ -233,14 +233,14 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
}]\
]],\
["@eslint/eslintrc", [\
["npm:1.3.3", {\
"packageLocation": "./.yarn/cache/@eslint-eslintrc-npm-1.3.3-9e3a462140-f03e9d6727.zip/node_modules/@eslint/eslintrc/",\
["npm:1.4.1", {\
"packageLocation": "./.yarn/cache/@eslint-eslintrc-npm-1.4.1-007f670de2-cd3e5a8683.zip/node_modules/@eslint/eslintrc/",\
"packageDependencies": [\
["@eslint/eslintrc", "npm:1.3.3"],\
["@eslint/eslintrc", "npm:1.4.1"],\
["ajv", "npm:6.12.6"],\
["debug", "virtual:b86a9fb34323a98c6519528ed55faa0d9b44ca8879307c0b29aa384bde47ff59a7d0c9051b31246f14521dfb71ba3c5d6d0b35c29fffc17bf875aa6ad977d9e8#npm:4.3.4"],\
["espree", "npm:9.4.0"],\
["globals", "npm:13.15.0"],\
["globals", "npm:13.19.0"],\
["ignore", "npm:5.2.0"],\
["import-fresh", "npm:3.3.0"],\
["js-yaml", "npm:4.1.0"],\
@ -339,7 +339,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
["@fullcalendar/luxon2", "virtual:dc3fc578bfa5e06182a4d2be39ede0bc5b74940b1ffe0d70c26892ab140a4699787750fba175dc306292e80b4aa2c8c5f68c2a821e69b2c37e360c0dff36ff66#npm:5.11.3"],\
["@fullcalendar/common", "npm:5.11.3"],\
["@types/luxon", null],\
["luxon", "npm:3.1.1"],\
["luxon", "npm:3.2.1"],\
["tslib", "npm:2.4.0"]\
],\
"packagePeers": [\
@ -405,10 +405,10 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
}]\
]],\
["@humanwhocodes/config-array", [\
["npm:0.11.7", {\
"packageLocation": "./.yarn/cache/@humanwhocodes-config-array-npm-0.11.7-fa83ecd27f-cf506dc45d.zip/node_modules/@humanwhocodes/config-array/",\
["npm:0.11.8", {\
"packageLocation": "./.yarn/cache/@humanwhocodes-config-array-npm-0.11.8-7955bfecc2-0fd6b3c54f.zip/node_modules/@humanwhocodes/config-array/",\
"packageDependencies": [\
["@humanwhocodes/config-array", "npm:0.11.7"],\
["@humanwhocodes/config-array", "npm:0.11.8"],\
["@humanwhocodes/object-schema", "npm:1.2.1"],\
["debug", "virtual:b86a9fb34323a98c6519528ed55faa0d9b44ca8879307c0b29aa384bde47ff59a7d0c9051b31246f14521dfb71ba3c5d6d0b35c29fffc17bf875aa6ad977d9e8#npm:4.3.4"],\
["minimatch", "npm:3.1.2"]\
@ -1883,10 +1883,10 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
],\
"linkType": "SOFT"\
}],\
["virtual:fdf68f1c9ed6d3f4d0cc171ccde72d64c557f4597d23823af77249d92d02fba30826705ed7601dac52f4b714700e596a202b388b79b16ac8ce3faf54eb780dd1#npm:2.0.0", {\
"packageLocation": "./.yarn/__virtual__/@sidvind-better-ajv-errors-virtual-db57922bf1/0/cache/@sidvind-better-ajv-errors-npm-2.0.0-3531bddef9-12b0d87855.zip/node_modules/@sidvind/better-ajv-errors/",\
["virtual:ef051354894d83cc0cda7d7a4a6eca604681f35eb8f2a25fe305435ac599a4d71af04fcaa26daa3f5aa064e73442d202ba9dfbda5c3f8c7b1daf472f3a17da86#npm:2.0.0", {\
"packageLocation": "./.yarn/__virtual__/@sidvind-better-ajv-errors-virtual-65bece6091/0/cache/@sidvind-better-ajv-errors-npm-2.0.0-3531bddef9-12b0d87855.zip/node_modules/@sidvind/better-ajv-errors/",\
"packageDependencies": [\
["@sidvind/better-ajv-errors", "virtual:fdf68f1c9ed6d3f4d0cc171ccde72d64c557f4597d23823af77249d92d02fba30826705ed7601dac52f4b714700e596a202b388b79b16ac8ce3faf54eb780dd1#npm:2.0.0"],\
["@sidvind/better-ajv-errors", "virtual:ef051354894d83cc0cda7d7a4a6eca604681f35eb8f2a25fe305435ac599a4d71af04fcaa26daa3f5aa064e73442d202ba9dfbda5c3f8c7b1daf472f3a17da86#npm:2.0.0"],\
["@babel/code-frame", "npm:7.16.7"],\
["@types/ajv", null],\
["ajv", "npm:8.11.0"],\
@ -2549,10 +2549,10 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
}]\
]],\
["bootstrap-icons", [\
["npm:1.10.2", {\
"packageLocation": "./.yarn/cache/bootstrap-icons-npm-1.10.2-09a829eafa-1d73556a70.zip/node_modules/bootstrap-icons/",\
["npm:1.10.3", {\
"packageLocation": "./.yarn/cache/bootstrap-icons-npm-1.10.3-d595a95ca4-bef7f83ce0.zip/node_modules/bootstrap-icons/",\
"packageDependencies": [\
["bootstrap-icons", "npm:1.10.2"]\
["bootstrap-icons", "npm:1.10.3"]\
],\
"linkType": "HARD"\
}]\
@ -2714,10 +2714,10 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
],\
"linkType": "HARD"\
}],\
["npm:1.0.30001439", {\
"packageLocation": "./.yarn/cache/caniuse-lite-npm-1.0.30001439-dd9478bf75-3912dd536c.zip/node_modules/caniuse-lite/",\
["npm:1.0.30001442", {\
"packageLocation": "./.yarn/cache/caniuse-lite-npm-1.0.30001442-4206643829-c1bff65bd4.zip/node_modules/caniuse-lite/",\
"packageDependencies": [\
["caniuse-lite", "npm:1.0.30001439"]\
["caniuse-lite", "npm:1.0.30001442"]\
],\
"linkType": "HARD"\
}]\
@ -3024,10 +3024,10 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
}]\
]],\
["d3", [\
["npm:7.7.0", {\
"packageLocation": "./.yarn/cache/d3-npm-7.7.0-af244e0e9d-ed1308674f.zip/node_modules/d3/",\
["npm:7.8.0", {\
"packageLocation": "./.yarn/cache/d3-npm-7.8.0-43f19bbccd-383d2c8aa6.zip/node_modules/d3/",\
"packageDependencies": [\
["d3", "npm:7.7.0"],\
["d3", "npm:7.8.0"],\
["d3-array", "npm:3.1.6"],\
["d3-axis", "npm:3.0.0"],\
["d3-brush", "npm:3.0.0"],\
@ -3410,10 +3410,10 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
],\
"linkType": "SOFT"\
}],\
["virtual:fbe7528a5ca5bae03aee1ecb3bd12568e1a4061d2923a771668e8a940ef9ad64125dd8cc7324107ffbd6e34ffa123be3bcd813b79ff7b2db2cb2572affe66874#npm:1.3.3", {\
"packageLocation": "./.yarn/__virtual__/date-fns-tz-virtual-fb0179cea3/0/cache/date-fns-tz-npm-1.3.3-4b42de3dcf-52111dffb4.zip/node_modules/date-fns-tz/",\
["virtual:4fa5810747c131dcf20cc36c17e835ba5fa42265b3b1f99a6712420e8672195f31ac73d077125c82af29bde6232df6ecc61b1f3ff0dde337b62085ef712e7d6a#npm:1.3.3", {\
"packageLocation": "./.yarn/__virtual__/date-fns-tz-virtual-ec6b2c4cf2/0/cache/date-fns-tz-npm-1.3.3-4b42de3dcf-52111dffb4.zip/node_modules/date-fns-tz/",\
"packageDependencies": [\
["date-fns-tz", "virtual:fbe7528a5ca5bae03aee1ecb3bd12568e1a4061d2923a771668e8a940ef9ad64125dd8cc7324107ffbd6e34ffa123be3bcd813b79ff7b2db2cb2572affe66874#npm:1.3.3"],\
["date-fns-tz", "virtual:4fa5810747c131dcf20cc36c17e835ba5fa42265b3b1f99a6712420e8672195f31ac73d077125c82af29bde6232df6ecc61b1f3ff0dde337b62085ef712e7d6a#npm:1.3.3"],\
["@types/date-fns", null],\
["date-fns", "npm:2.28.0"]\
],\
@ -4055,12 +4055,12 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
}]\
]],\
["eslint", [\
["npm:8.29.0", {\
"packageLocation": "./.yarn/cache/eslint-npm-8.29.0-289be12b40-e05204b059.zip/node_modules/eslint/",\
["npm:8.31.0", {\
"packageLocation": "./.yarn/cache/eslint-npm-8.31.0-da99c7e469-5e5688bb86.zip/node_modules/eslint/",\
"packageDependencies": [\
["eslint", "npm:8.29.0"],\
["@eslint/eslintrc", "npm:1.3.3"],\
["@humanwhocodes/config-array", "npm:0.11.7"],\
["eslint", "npm:8.31.0"],\
["@eslint/eslintrc", "npm:1.4.1"],\
["@humanwhocodes/config-array", "npm:0.11.8"],\
["@humanwhocodes/module-importer", "npm:1.0.1"],\
["@nodelib/fs.walk", "npm:1.2.8"],\
["ajv", "npm:6.12.6"],\
@ -4070,7 +4070,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
["doctrine", "npm:3.0.0"],\
["escape-string-regexp", "npm:4.0.0"],\
["eslint-scope", "npm:7.1.1"],\
["eslint-utils", "virtual:289be12b405674cebfe9f1aad885baa35bb9c6cc913399fbdf01ae783a453de6030ce46c02728e37888c5ed9f57187791e3f7e39ace8be01102f7c43152bb92a#npm:3.0.0"],\
["eslint-utils", "virtual:da99c7e4695a5fca5898fad31d2872f7fe46acc9506643f9acaa2915e169293c951732a239e9f38aa784a4d9e0c1021cee45cb2a8bcf8008a11e40816a14adaa#npm:3.0.0"],\
["eslint-visitor-keys", "npm:3.3.0"],\
["espree", "npm:9.4.0"],\
["esquery", "npm:1.4.0"],\
@ -4079,7 +4079,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
["file-entry-cache", "npm:6.0.1"],\
["find-up", "npm:5.0.0"],\
["glob-parent", "npm:6.0.2"],\
["globals", "npm:13.15.0"],\
["globals", "npm:13.19.0"],\
["grapheme-splitter", "npm:1.0.4"],\
["ignore", "npm:5.2.0"],\
["import-fresh", "npm:3.3.0"],\
@ -4118,9 +4118,9 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
["@types/eslint-plugin-import", null],\
["@types/eslint-plugin-n", null],\
["@types/eslint-plugin-promise", null],\
["eslint", "npm:8.29.0"],\
["eslint", "npm:8.31.0"],\
["eslint-plugin-import", "virtual:dc3fc578bfa5e06182a4d2be39ede0bc5b74940b1ffe0d70c26892ab140a4699787750fba175dc306292e80b4aa2c8c5f68c2a821e69b2c37e360c0dff36ff66#npm:2.26.0"],\
["eslint-plugin-n", "virtual:dc3fc578bfa5e06182a4d2be39ede0bc5b74940b1ffe0d70c26892ab140a4699787750fba175dc306292e80b4aa2c8c5f68c2a821e69b2c37e360c0dff36ff66#npm:15.6.0"],\
["eslint-plugin-n", "virtual:dc3fc578bfa5e06182a4d2be39ede0bc5b74940b1ffe0d70c26892ab140a4699787750fba175dc306292e80b4aa2c8c5f68c2a821e69b2c37e360c0dff36ff66#npm:15.6.1"],\
["eslint-plugin-promise", "virtual:dc3fc578bfa5e06182a4d2be39ede0bc5b74940b1ffe0d70c26892ab140a4699787750fba175dc306292e80b4aa2c8c5f68c2a821e69b2c37e360c0dff36ff66#npm:6.1.1"]\
],\
"packagePeers": [\
@ -4196,7 +4196,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
"packageDependencies": [\
["eslint-plugin-cypress", "virtual:dc3fc578bfa5e06182a4d2be39ede0bc5b74940b1ffe0d70c26892ab140a4699787750fba175dc306292e80b4aa2c8c5f68c2a821e69b2c37e360c0dff36ff66#npm:2.12.1"],\
["@types/eslint", null],\
["eslint", "npm:8.29.0"],\
["eslint", "npm:8.31.0"],\
["globals", "npm:11.12.0"]\
],\
"packagePeers": [\
@ -4226,7 +4226,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
"packageDependencies": [\
["eslint-plugin-es", "virtual:5cccaf00e87dfff96dbbb5eaf7a3055373358b8114d6a1adfb32f54ed6b40ba06068d3aa1fdd8062899a0cad040f68c17cc6b72bac2cdbe9700f3d6330d112f3#npm:3.0.1"],\
["@types/eslint", null],\
["eslint", "npm:8.29.0"],\
["eslint", "npm:8.31.0"],\
["eslint-utils", "npm:2.1.0"],\
["regexpp", "npm:3.2.0"]\
],\
@ -4236,12 +4236,12 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
],\
"linkType": "HARD"\
}],\
["virtual:658a9afbd516149c6b89f8c02ca059f939b9effd6e1985f93fe95b2fc69ff85f0fce97fdb597120caf8f55668982ff4610a3873febcfef8a1fc18348d5149188#npm:4.1.0", {\
"packageLocation": "./.yarn/__virtual__/eslint-plugin-es-virtual-264027714f/0/cache/eslint-plugin-es-npm-4.1.0-a4cf26d3cd-26b87a216d.zip/node_modules/eslint-plugin-es/",\
["virtual:75c7efde890fd11a780800acb1cde469ae49edf8842af9f91484f93337ad61713574973ccf7c8eb0a0a15f7ed6c372fd23697f1d4d519b2d7a42f92c04a56cff#npm:4.1.0", {\
"packageLocation": "./.yarn/__virtual__/eslint-plugin-es-virtual-c640ae95c4/0/cache/eslint-plugin-es-npm-4.1.0-a4cf26d3cd-26b87a216d.zip/node_modules/eslint-plugin-es/",\
"packageDependencies": [\
["eslint-plugin-es", "virtual:658a9afbd516149c6b89f8c02ca059f939b9effd6e1985f93fe95b2fc69ff85f0fce97fdb597120caf8f55668982ff4610a3873febcfef8a1fc18348d5149188#npm:4.1.0"],\
["eslint-plugin-es", "virtual:75c7efde890fd11a780800acb1cde469ae49edf8842af9f91484f93337ad61713574973ccf7c8eb0a0a15f7ed6c372fd23697f1d4d519b2d7a42f92c04a56cff#npm:4.1.0"],\
["@types/eslint", null],\
["eslint", "npm:8.29.0"],\
["eslint", "npm:8.31.0"],\
["eslint-utils", "npm:2.1.0"],\
["regexpp", "npm:3.2.0"]\
],\
@ -4271,7 +4271,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
["array.prototype.flat", "npm:1.3.0"],\
["debug", "virtual:faadf6353f98b703db6d695690b392666015d2aab4b710ea086196f4598c68e2b84944d3717503cadb554811494ac27c376eca728086556897f6a7cdb35eaef5#npm:2.6.9"],\
["doctrine", "npm:2.1.0"],\
["eslint", "npm:8.29.0"],\
["eslint", "npm:8.31.0"],\
["eslint-import-resolver-node", "npm:0.3.6"],\
["eslint-module-utils", "virtual:c0858ad0a599e687a7d876de5591e3b098ca550f5c1ad46e7d0e2b6f5720a919cb228a47405daf7d626be1747e41a5b93e4b4d748f16d5e7c36c433aed618452#npm:2.7.3"],\
["has", "npm:1.0.3"],\
@ -4292,22 +4292,22 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
}]\
]],\
["eslint-plugin-n", [\
["npm:15.6.0", {\
"packageLocation": "./.yarn/cache/eslint-plugin-n-npm-15.6.0-2f5a6f5e8e-629dc3e8c8.zip/node_modules/eslint-plugin-n/",\
["npm:15.6.1", {\
"packageLocation": "./.yarn/cache/eslint-plugin-n-npm-15.6.1-e4ab4703b3-269d6f2896.zip/node_modules/eslint-plugin-n/",\
"packageDependencies": [\
["eslint-plugin-n", "npm:15.6.0"]\
["eslint-plugin-n", "npm:15.6.1"]\
],\
"linkType": "SOFT"\
}],\
["virtual:dc3fc578bfa5e06182a4d2be39ede0bc5b74940b1ffe0d70c26892ab140a4699787750fba175dc306292e80b4aa2c8c5f68c2a821e69b2c37e360c0dff36ff66#npm:15.6.0", {\
"packageLocation": "./.yarn/__virtual__/eslint-plugin-n-virtual-658a9afbd5/0/cache/eslint-plugin-n-npm-15.6.0-2f5a6f5e8e-629dc3e8c8.zip/node_modules/eslint-plugin-n/",\
["virtual:dc3fc578bfa5e06182a4d2be39ede0bc5b74940b1ffe0d70c26892ab140a4699787750fba175dc306292e80b4aa2c8c5f68c2a821e69b2c37e360c0dff36ff66#npm:15.6.1", {\
"packageLocation": "./.yarn/__virtual__/eslint-plugin-n-virtual-75c7efde89/0/cache/eslint-plugin-n-npm-15.6.1-e4ab4703b3-269d6f2896.zip/node_modules/eslint-plugin-n/",\
"packageDependencies": [\
["eslint-plugin-n", "virtual:dc3fc578bfa5e06182a4d2be39ede0bc5b74940b1ffe0d70c26892ab140a4699787750fba175dc306292e80b4aa2c8c5f68c2a821e69b2c37e360c0dff36ff66#npm:15.6.0"],\
["eslint-plugin-n", "virtual:dc3fc578bfa5e06182a4d2be39ede0bc5b74940b1ffe0d70c26892ab140a4699787750fba175dc306292e80b4aa2c8c5f68c2a821e69b2c37e360c0dff36ff66#npm:15.6.1"],\
["@types/eslint", null],\
["builtins", "npm:5.0.1"],\
["eslint", "npm:8.29.0"],\
["eslint-plugin-es", "virtual:658a9afbd516149c6b89f8c02ca059f939b9effd6e1985f93fe95b2fc69ff85f0fce97fdb597120caf8f55668982ff4610a3873febcfef8a1fc18348d5149188#npm:4.1.0"],\
["eslint-utils", "virtual:289be12b405674cebfe9f1aad885baa35bb9c6cc913399fbdf01ae783a453de6030ce46c02728e37888c5ed9f57187791e3f7e39ace8be01102f7c43152bb92a#npm:3.0.0"],\
["eslint", "npm:8.31.0"],\
["eslint-plugin-es", "virtual:75c7efde890fd11a780800acb1cde469ae49edf8842af9f91484f93337ad61713574973ccf7c8eb0a0a15f7ed6c372fd23697f1d4d519b2d7a42f92c04a56cff#npm:4.1.0"],\
["eslint-utils", "virtual:da99c7e4695a5fca5898fad31d2872f7fe46acc9506643f9acaa2915e169293c951732a239e9f38aa784a4d9e0c1021cee45cb2a8bcf8008a11e40816a14adaa#npm:3.0.0"],\
["ignore", "npm:5.2.0"],\
["is-core-module", "npm:2.11.0"],\
["minimatch", "npm:3.1.2"],\
@ -4334,7 +4334,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
"packageDependencies": [\
["eslint-plugin-node", "virtual:dc3fc578bfa5e06182a4d2be39ede0bc5b74940b1ffe0d70c26892ab140a4699787750fba175dc306292e80b4aa2c8c5f68c2a821e69b2c37e360c0dff36ff66#npm:11.1.0"],\
["@types/eslint", null],\
["eslint", "npm:8.29.0"],\
["eslint", "npm:8.31.0"],\
["eslint-plugin-es", "virtual:5cccaf00e87dfff96dbbb5eaf7a3055373358b8114d6a1adfb32f54ed6b40ba06068d3aa1fdd8062899a0cad040f68c17cc6b72bac2cdbe9700f3d6330d112f3#npm:3.0.1"],\
["eslint-utils", "npm:2.1.0"],\
["ignore", "npm:5.2.0"],\
@ -4362,7 +4362,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
"packageDependencies": [\
["eslint-plugin-promise", "virtual:dc3fc578bfa5e06182a4d2be39ede0bc5b74940b1ffe0d70c26892ab140a4699787750fba175dc306292e80b4aa2c8c5f68c2a821e69b2c37e360c0dff36ff66#npm:6.1.1"],\
["@types/eslint", null],\
["eslint", "npm:8.29.0"]\
["eslint", "npm:8.31.0"]\
],\
"packagePeers": [\
"@types/eslint",\
@ -4384,8 +4384,8 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
"packageDependencies": [\
["eslint-plugin-vue", "virtual:dc3fc578bfa5e06182a4d2be39ede0bc5b74940b1ffe0d70c26892ab140a4699787750fba175dc306292e80b4aa2c8c5f68c2a821e69b2c37e360c0dff36ff66#npm:9.8.0"],\
["@types/eslint", null],\
["eslint", "npm:8.29.0"],\
["eslint-utils", "virtual:289be12b405674cebfe9f1aad885baa35bb9c6cc913399fbdf01ae783a453de6030ce46c02728e37888c5ed9f57187791e3f7e39ace8be01102f7c43152bb92a#npm:3.0.0"],\
["eslint", "npm:8.31.0"],\
["eslint-utils", "virtual:da99c7e4695a5fca5898fad31d2872f7fe46acc9506643f9acaa2915e169293c951732a239e9f38aa784a4d9e0c1021cee45cb2a8bcf8008a11e40816a14adaa#npm:3.0.0"],\
["natural-compare", "npm:1.4.0"],\
["nth-check", "npm:2.1.1"],\
["postcss-selector-parser", "npm:6.0.10"],\
@ -4427,12 +4427,12 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
],\
"linkType": "SOFT"\
}],\
["virtual:289be12b405674cebfe9f1aad885baa35bb9c6cc913399fbdf01ae783a453de6030ce46c02728e37888c5ed9f57187791e3f7e39ace8be01102f7c43152bb92a#npm:3.0.0", {\
"packageLocation": "./.yarn/__virtual__/eslint-utils-virtual-7a7c69068b/0/cache/eslint-utils-npm-3.0.0-630b3a4013-0668fe02f5.zip/node_modules/eslint-utils/",\
["virtual:da99c7e4695a5fca5898fad31d2872f7fe46acc9506643f9acaa2915e169293c951732a239e9f38aa784a4d9e0c1021cee45cb2a8bcf8008a11e40816a14adaa#npm:3.0.0", {\
"packageLocation": "./.yarn/__virtual__/eslint-utils-virtual-e17c8db5e4/0/cache/eslint-utils-npm-3.0.0-630b3a4013-0668fe02f5.zip/node_modules/eslint-utils/",\
"packageDependencies": [\
["eslint-utils", "virtual:289be12b405674cebfe9f1aad885baa35bb9c6cc913399fbdf01ae783a453de6030ce46c02728e37888c5ed9f57187791e3f7e39ace8be01102f7c43152bb92a#npm:3.0.0"],\
["eslint-utils", "virtual:da99c7e4695a5fca5898fad31d2872f7fe46acc9506643f9acaa2915e169293c951732a239e9f38aa784a4d9e0c1021cee45cb2a8bcf8008a11e40816a14adaa#npm:3.0.0"],\
["@types/eslint", null],\
["eslint", "npm:8.29.0"],\
["eslint", "npm:8.31.0"],\
["eslint-visitor-keys", "npm:2.1.0"]\
],\
"packagePeers": [\
@ -4840,6 +4840,14 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
["type-fest", "npm:0.20.2"]\
],\
"linkType": "HARD"\
}],\
["npm:13.19.0", {\
"packageLocation": "./.yarn/cache/globals-npm-13.19.0-a63c75a2dd-a000dbd00b.zip/node_modules/globals/",\
"packageDependencies": [\
["globals", "npm:13.19.0"],\
["type-fest", "npm:0.20.2"]\
],\
"linkType": "HARD"\
}]\
]],\
["graceful-fs", [\
@ -4961,20 +4969,20 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
}]\
]],\
["html-validate", [\
["npm:7.10.1", {\
"packageLocation": "./.yarn/cache/html-validate-npm-7.10.1-c3b507b154-7a7dbc0a57.zip/node_modules/html-validate/",\
["npm:7.12.2", {\
"packageLocation": "./.yarn/cache/html-validate-npm-7.12.2-4a7c5f12a3-04bccd1680.zip/node_modules/html-validate/",\
"packageDependencies": [\
["html-validate", "npm:7.10.1"]\
["html-validate", "npm:7.12.2"]\
],\
"linkType": "SOFT"\
}],\
["virtual:dc3fc578bfa5e06182a4d2be39ede0bc5b74940b1ffe0d70c26892ab140a4699787750fba175dc306292e80b4aa2c8c5f68c2a821e69b2c37e360c0dff36ff66#npm:7.10.1", {\
"packageLocation": "./.yarn/__virtual__/html-validate-virtual-fdf68f1c9e/0/cache/html-validate-npm-7.10.1-c3b507b154-7a7dbc0a57.zip/node_modules/html-validate/",\
["virtual:dc3fc578bfa5e06182a4d2be39ede0bc5b74940b1ffe0d70c26892ab140a4699787750fba175dc306292e80b4aa2c8c5f68c2a821e69b2c37e360c0dff36ff66#npm:7.12.2", {\
"packageLocation": "./.yarn/__virtual__/html-validate-virtual-ef05135489/0/cache/html-validate-npm-7.12.2-4a7c5f12a3-04bccd1680.zip/node_modules/html-validate/",\
"packageDependencies": [\
["html-validate", "virtual:dc3fc578bfa5e06182a4d2be39ede0bc5b74940b1ffe0d70c26892ab140a4699787750fba175dc306292e80b4aa2c8c5f68c2a821e69b2c37e360c0dff36ff66#npm:7.10.1"],\
["html-validate", "virtual:dc3fc578bfa5e06182a4d2be39ede0bc5b74940b1ffe0d70c26892ab140a4699787750fba175dc306292e80b4aa2c8c5f68c2a821e69b2c37e360c0dff36ff66#npm:7.12.2"],\
["@babel/code-frame", "npm:7.16.7"],\
["@html-validate/stylish", "npm:3.0.0"],\
["@sidvind/better-ajv-errors", "virtual:fdf68f1c9ed6d3f4d0cc171ccde72d64c557f4597d23823af77249d92d02fba30826705ed7601dac52f4b714700e596a202b388b79b16ac8ce3faf54eb780dd1#npm:2.0.0"],\
["@sidvind/better-ajv-errors", "virtual:ef051354894d83cc0cda7d7a4a6eca604681f35eb8f2a25fe305435ac599a4d71af04fcaa26daa3f5aa064e73442d202ba9dfbda5c3f8c7b1daf472f3a17da86#npm:2.0.0"],\
["@types/jest", null],\
["@types/jest-diff", null],\
["@types/jest-snapshot", null],\
@ -5573,10 +5581,10 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
],\
"linkType": "HARD"\
}],\
["npm:3.6.2", {\
"packageLocation": "./.yarn/cache/jquery-npm-3.6.2-73fded3d09-b8ca408b94.zip/node_modules/jquery/",\
["npm:3.6.3", {\
"packageLocation": "./.yarn/cache/jquery-npm-3.6.3-cbc34d2330-0fd366bdca.zip/node_modules/jquery/",\
"packageDependencies": [\
["jquery", "npm:3.6.2"]\
["jquery", "npm:3.6.3"]\
],\
"linkType": "HARD"\
}]\
@ -5594,7 +5602,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
"packageDependencies": [\
["jquery-migrate", "virtual:dc3fc578bfa5e06182a4d2be39ede0bc5b74940b1ffe0d70c26892ab140a4699787750fba175dc306292e80b4aa2c8c5f68c2a821e69b2c37e360c0dff36ff66#npm:3.4.0"],\
["@types/jquery", null],\
["jquery", "npm:3.6.2"]\
["jquery", "npm:3.6.3"]\
],\
"packagePeers": [\
"@types/jquery",\
@ -5951,10 +5959,10 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
}]\
]],\
["luxon", [\
["npm:3.1.1", {\
"packageLocation": "./.yarn/cache/luxon-npm-3.1.1-64fe977c1d-388fb35d3c.zip/node_modules/luxon/",\
["npm:3.2.1", {\
"packageLocation": "./.yarn/cache/luxon-npm-3.2.1-56f8d97395-3fa3def2c5.zip/node_modules/luxon/",\
"packageDependencies": [\
["luxon", "npm:3.1.1"]\
["luxon", "npm:3.2.1"]\
],\
"linkType": "HARD"\
}]\
@ -6225,19 +6233,19 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
}]\
]],\
["naive-ui", [\
["npm:2.34.2", {\
"packageLocation": "./.yarn/cache/naive-ui-npm-2.34.2-e423e7211e-48871bb068.zip/node_modules/naive-ui/",\
["npm:2.34.3", {\
"packageLocation": "./.yarn/cache/naive-ui-npm-2.34.3-ba2dfb08d8-792d9e6c51.zip/node_modules/naive-ui/",\
"packageDependencies": [\
["naive-ui", "npm:2.34.2"]\
["naive-ui", "npm:2.34.3"]\
],\
"linkType": "SOFT"\
}],\
["virtual:dc3fc578bfa5e06182a4d2be39ede0bc5b74940b1ffe0d70c26892ab140a4699787750fba175dc306292e80b4aa2c8c5f68c2a821e69b2c37e360c0dff36ff66#npm:2.34.2", {\
"packageLocation": "./.yarn/__virtual__/naive-ui-virtual-fbe7528a5c/0/cache/naive-ui-npm-2.34.2-e423e7211e-48871bb068.zip/node_modules/naive-ui/",\
["virtual:dc3fc578bfa5e06182a4d2be39ede0bc5b74940b1ffe0d70c26892ab140a4699787750fba175dc306292e80b4aa2c8c5f68c2a821e69b2c37e360c0dff36ff66#npm:2.34.3", {\
"packageLocation": "./.yarn/__virtual__/naive-ui-virtual-4fa5810747/0/cache/naive-ui-npm-2.34.3-ba2dfb08d8-792d9e6c51.zip/node_modules/naive-ui/",\
"packageDependencies": [\
["naive-ui", "virtual:dc3fc578bfa5e06182a4d2be39ede0bc5b74940b1ffe0d70c26892ab140a4699787750fba175dc306292e80b4aa2c8c5f68c2a821e69b2c37e360c0dff36ff66#npm:2.34.2"],\
["@css-render/plugin-bem", "virtual:fbe7528a5ca5bae03aee1ecb3bd12568e1a4061d2923a771668e8a940ef9ad64125dd8cc7324107ffbd6e34ffa123be3bcd813b79ff7b2db2cb2572affe66874#npm:0.15.10"],\
["@css-render/vue3-ssr", "virtual:fbe7528a5ca5bae03aee1ecb3bd12568e1a4061d2923a771668e8a940ef9ad64125dd8cc7324107ffbd6e34ffa123be3bcd813b79ff7b2db2cb2572affe66874#npm:0.15.10"],\
["naive-ui", "virtual:dc3fc578bfa5e06182a4d2be39ede0bc5b74940b1ffe0d70c26892ab140a4699787750fba175dc306292e80b4aa2c8c5f68c2a821e69b2c37e360c0dff36ff66#npm:2.34.3"],\
["@css-render/plugin-bem", "virtual:4fa5810747c131dcf20cc36c17e835ba5fa42265b3b1f99a6712420e8672195f31ac73d077125c82af29bde6232df6ecc61b1f3ff0dde337b62085ef712e7d6a#npm:0.15.10"],\
["@css-render/vue3-ssr", "virtual:4fa5810747c131dcf20cc36c17e835ba5fa42265b3b1f99a6712420e8672195f31ac73d077125c82af29bde6232df6ecc61b1f3ff0dde337b62085ef712e7d6a#npm:0.15.10"],\
["@types/katex", "npm:0.14.0"],\
["@types/lodash", "npm:4.14.182"],\
["@types/lodash-es", "npm:4.17.6"],\
@ -6245,17 +6253,17 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
["async-validator", "npm:4.1.1"],\
["css-render", "npm:0.15.10"],\
["date-fns", "npm:2.28.0"],\
["date-fns-tz", "virtual:fbe7528a5ca5bae03aee1ecb3bd12568e1a4061d2923a771668e8a940ef9ad64125dd8cc7324107ffbd6e34ffa123be3bcd813b79ff7b2db2cb2572affe66874#npm:1.3.3"],\
["date-fns-tz", "virtual:4fa5810747c131dcf20cc36c17e835ba5fa42265b3b1f99a6712420e8672195f31ac73d077125c82af29bde6232df6ecc61b1f3ff0dde337b62085ef712e7d6a#npm:1.3.3"],\
["evtd", "npm:0.2.4"],\
["highlight.js", "npm:11.5.1"],\
["lodash", "npm:4.17.21"],\
["lodash-es", "npm:4.17.21"],\
["seemly", "npm:0.3.6"],\
["treemate", "npm:0.3.11"],\
["vdirs", "virtual:fbe7528a5ca5bae03aee1ecb3bd12568e1a4061d2923a771668e8a940ef9ad64125dd8cc7324107ffbd6e34ffa123be3bcd813b79ff7b2db2cb2572affe66874#npm:0.1.8"],\
["vooks", "virtual:fbe7528a5ca5bae03aee1ecb3bd12568e1a4061d2923a771668e8a940ef9ad64125dd8cc7324107ffbd6e34ffa123be3bcd813b79ff7b2db2cb2572affe66874#npm:0.2.12"],\
["vdirs", "virtual:4fa5810747c131dcf20cc36c17e835ba5fa42265b3b1f99a6712420e8672195f31ac73d077125c82af29bde6232df6ecc61b1f3ff0dde337b62085ef712e7d6a#npm:0.1.8"],\
["vooks", "virtual:4fa5810747c131dcf20cc36c17e835ba5fa42265b3b1f99a6712420e8672195f31ac73d077125c82af29bde6232df6ecc61b1f3ff0dde337b62085ef712e7d6a#npm:0.2.12"],\
["vue", "npm:3.2.45"],\
["vueuc", "virtual:fbe7528a5ca5bae03aee1ecb3bd12568e1a4061d2923a771668e8a940ef9ad64125dd8cc7324107ffbd6e34ffa123be3bcd813b79ff7b2db2cb2572affe66874#npm:0.4.47"]\
["vueuc", "virtual:4fa5810747c131dcf20cc36c17e835ba5fa42265b3b1f99a6712420e8672195f31ac73d077125c82af29bde6232df6ecc61b1f3ff0dde337b62085ef712e7d6a#npm:0.4.47"]\
],\
"packagePeers": [\
"@types/vue",\
@ -7280,41 +7288,41 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
["@twuni/emojify", "npm:1.0.2"],\
["@vitejs/plugin-vue", "virtual:dc3fc578bfa5e06182a4d2be39ede0bc5b74940b1ffe0d70c26892ab140a4699787750fba175dc306292e80b4aa2c8c5f68c2a821e69b2c37e360c0dff36ff66#npm:3.2.0"],\
["bootstrap", "virtual:dc3fc578bfa5e06182a4d2be39ede0bc5b74940b1ffe0d70c26892ab140a4699787750fba175dc306292e80b4aa2c8c5f68c2a821e69b2c37e360c0dff36ff66#npm:5.2.3"],\
["bootstrap-icons", "npm:1.10.2"],\
["bootstrap-icons", "npm:1.10.3"],\
["browser-fs-access", "npm:0.31.1"],\
["browserlist", "npm:1.0.1"],\
["c8", "npm:7.12.0"],\
["caniuse-lite", "npm:1.0.30001439"],\
["d3", "npm:7.7.0"],\
["eslint", "npm:8.29.0"],\
["caniuse-lite", "npm:1.0.30001442"],\
["d3", "npm:7.8.0"],\
["eslint", "npm:8.31.0"],\
["eslint-config-standard", "virtual:dc3fc578bfa5e06182a4d2be39ede0bc5b74940b1ffe0d70c26892ab140a4699787750fba175dc306292e80b4aa2c8c5f68c2a821e69b2c37e360c0dff36ff66#npm:17.0.0"],\
["eslint-plugin-cypress", "virtual:dc3fc578bfa5e06182a4d2be39ede0bc5b74940b1ffe0d70c26892ab140a4699787750fba175dc306292e80b4aa2c8c5f68c2a821e69b2c37e360c0dff36ff66#npm:2.12.1"],\
["eslint-plugin-import", "virtual:dc3fc578bfa5e06182a4d2be39ede0bc5b74940b1ffe0d70c26892ab140a4699787750fba175dc306292e80b4aa2c8c5f68c2a821e69b2c37e360c0dff36ff66#npm:2.26.0"],\
["eslint-plugin-n", "virtual:dc3fc578bfa5e06182a4d2be39ede0bc5b74940b1ffe0d70c26892ab140a4699787750fba175dc306292e80b4aa2c8c5f68c2a821e69b2c37e360c0dff36ff66#npm:15.6.0"],\
["eslint-plugin-n", "virtual:dc3fc578bfa5e06182a4d2be39ede0bc5b74940b1ffe0d70c26892ab140a4699787750fba175dc306292e80b4aa2c8c5f68c2a821e69b2c37e360c0dff36ff66#npm:15.6.1"],\
["eslint-plugin-node", "virtual:dc3fc578bfa5e06182a4d2be39ede0bc5b74940b1ffe0d70c26892ab140a4699787750fba175dc306292e80b4aa2c8c5f68c2a821e69b2c37e360c0dff36ff66#npm:11.1.0"],\
["eslint-plugin-promise", "virtual:dc3fc578bfa5e06182a4d2be39ede0bc5b74940b1ffe0d70c26892ab140a4699787750fba175dc306292e80b4aa2c8c5f68c2a821e69b2c37e360c0dff36ff66#npm:6.1.1"],\
["eslint-plugin-vue", "virtual:dc3fc578bfa5e06182a4d2be39ede0bc5b74940b1ffe0d70c26892ab140a4699787750fba175dc306292e80b4aa2c8c5f68c2a821e69b2c37e360c0dff36ff66#npm:9.8.0"],\
["file-saver", "npm:2.0.5"],\
["highcharts", "npm:10.3.2"],\
["html-validate", "virtual:dc3fc578bfa5e06182a4d2be39ede0bc5b74940b1ffe0d70c26892ab140a4699787750fba175dc306292e80b4aa2c8c5f68c2a821e69b2c37e360c0dff36ff66#npm:7.10.1"],\
["jquery", "npm:3.6.2"],\
["html-validate", "virtual:dc3fc578bfa5e06182a4d2be39ede0bc5b74940b1ffe0d70c26892ab140a4699787750fba175dc306292e80b4aa2c8c5f68c2a821e69b2c37e360c0dff36ff66#npm:7.12.2"],\
["jquery", "npm:3.6.3"],\
["jquery-migrate", "virtual:dc3fc578bfa5e06182a4d2be39ede0bc5b74940b1ffe0d70c26892ab140a4699787750fba175dc306292e80b4aa2c8c5f68c2a821e69b2c37e360c0dff36ff66#npm:3.4.0"],\
["jquery-ui-dist", "npm:1.13.2"],\
["js-cookie", "npm:3.0.1"],\
["list.js", "npm:2.3.1"],\
["lodash", "npm:4.17.21"],\
["lodash-es", "npm:4.17.21"],\
["luxon", "npm:3.1.1"],\
["luxon", "npm:3.2.1"],\
["moment", "npm:2.29.4"],\
["moment-timezone", "npm:0.5.40"],\
["ms", "npm:2.1.3"],\
["murmurhash-js", "npm:1.0.0"],\
["naive-ui", "virtual:dc3fc578bfa5e06182a4d2be39ede0bc5b74940b1ffe0d70c26892ab140a4699787750fba175dc306292e80b4aa2c8c5f68c2a821e69b2c37e360c0dff36ff66#npm:2.34.2"],\
["naive-ui", "virtual:dc3fc578bfa5e06182a4d2be39ede0bc5b74940b1ffe0d70c26892ab140a4699787750fba175dc306292e80b4aa2c8c5f68c2a821e69b2c37e360c0dff36ff66#npm:2.34.3"],\
["parcel", "virtual:dc3fc578bfa5e06182a4d2be39ede0bc5b74940b1ffe0d70c26892ab140a4699787750fba175dc306292e80b4aa2c8c5f68c2a821e69b2c37e360c0dff36ff66#npm:2.8.2"],\
["pinia", "virtual:dc3fc578bfa5e06182a4d2be39ede0bc5b74940b1ffe0d70c26892ab140a4699787750fba175dc306292e80b4aa2c8c5f68c2a821e69b2c37e360c0dff36ff66#npm:2.0.28"],\
["pinia-plugin-persist", "virtual:dc3fc578bfa5e06182a4d2be39ede0bc5b74940b1ffe0d70c26892ab140a4699787750fba175dc306292e80b4aa2c8c5f68c2a821e69b2c37e360c0dff36ff66#npm:1.0.0"],\
["pug", "npm:3.0.2"],\
["sass", "npm:1.56.2"],\
["sass", "npm:1.57.1"],\
["seedrandom", "npm:3.0.5"],\
["select2", "npm:4.1.0-rc.0"],\
["select2-bootstrap-5-theme", "npm:1.3.0"],\
@ -7385,10 +7393,10 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
],\
"linkType": "HARD"\
}],\
["npm:1.56.2", {\
"packageLocation": "./.yarn/cache/sass-npm-1.56.2-bd3179d6b5-7b1f524d04.zip/node_modules/sass/",\
["npm:1.57.1", {\
"packageLocation": "./.yarn/cache/sass-npm-1.57.1-bafdba484f-734a08781b.zip/node_modules/sass/",\
"packageDependencies": [\
["sass", "npm:1.56.2"],\
["sass", "npm:1.57.1"],\
["chokidar", "npm:3.5.3"],\
["immutable", "npm:4.0.0"],\
["source-map-js", "npm:1.0.2"]\
@ -8086,10 +8094,10 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
],\
"linkType": "SOFT"\
}],\
["virtual:fbe7528a5ca5bae03aee1ecb3bd12568e1a4061d2923a771668e8a940ef9ad64125dd8cc7324107ffbd6e34ffa123be3bcd813b79ff7b2db2cb2572affe66874#npm:0.1.8", {\
"packageLocation": "./.yarn/__virtual__/vdirs-virtual-9a95e8a1b4/0/cache/vdirs-npm-0.1.8-59a32a98d6-a7be8ccad3.zip/node_modules/vdirs/",\
["virtual:4fa5810747c131dcf20cc36c17e835ba5fa42265b3b1f99a6712420e8672195f31ac73d077125c82af29bde6232df6ecc61b1f3ff0dde337b62085ef712e7d6a#npm:0.1.8", {\
"packageLocation": "./.yarn/__virtual__/vdirs-virtual-f3d9f623fd/0/cache/vdirs-npm-0.1.8-59a32a98d6-a7be8ccad3.zip/node_modules/vdirs/",\
"packageDependencies": [\
["vdirs", "virtual:fbe7528a5ca5bae03aee1ecb3bd12568e1a4061d2923a771668e8a940ef9ad64125dd8cc7324107ffbd6e34ffa123be3bcd813b79ff7b2db2cb2572affe66874#npm:0.1.8"],\
["vdirs", "virtual:4fa5810747c131dcf20cc36c17e835ba5fa42265b3b1f99a6712420e8672195f31ac73d077125c82af29bde6232df6ecc61b1f3ff0dde337b62085ef712e7d6a#npm:0.1.8"],\
["@types/vue", null],\
["evtd", "npm:0.2.3"],\
["vue", "npm:3.2.45"]\
@ -8125,7 +8133,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
["postcss", "npm:8.4.18"],\
["resolve", "patch:resolve@npm%3A1.22.1#~builtin<compat/resolve>::version=1.22.1&hash=07638b"],\
["rollup", "npm:2.79.1"],\
["sass", "npm:1.56.2"],\
["sass", "npm:1.57.1"],\
["stylus", null],\
["sugarss", null],\
["terser", null]\
@ -8163,10 +8171,10 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
],\
"linkType": "SOFT"\
}],\
["virtual:fbe7528a5ca5bae03aee1ecb3bd12568e1a4061d2923a771668e8a940ef9ad64125dd8cc7324107ffbd6e34ffa123be3bcd813b79ff7b2db2cb2572affe66874#npm:0.2.12", {\
"packageLocation": "./.yarn/__virtual__/vooks-virtual-1f1870e5c2/0/cache/vooks-npm-0.2.12-0d1a2d856b-e6841ec5b6.zip/node_modules/vooks/",\
["virtual:4fa5810747c131dcf20cc36c17e835ba5fa42265b3b1f99a6712420e8672195f31ac73d077125c82af29bde6232df6ecc61b1f3ff0dde337b62085ef712e7d6a#npm:0.2.12", {\
"packageLocation": "./.yarn/__virtual__/vooks-virtual-f44f5b55b4/0/cache/vooks-npm-0.2.12-0d1a2d856b-e6841ec5b6.zip/node_modules/vooks/",\
"packageDependencies": [\
["vooks", "virtual:fbe7528a5ca5bae03aee1ecb3bd12568e1a4061d2923a771668e8a940ef9ad64125dd8cc7324107ffbd6e34ffa123be3bcd813b79ff7b2db2cb2572affe66874#npm:0.2.12"],\
["vooks", "virtual:4fa5810747c131dcf20cc36c17e835ba5fa42265b3b1f99a6712420e8672195f31ac73d077125c82af29bde6232df6ecc61b1f3ff0dde337b62085ef712e7d6a#npm:0.2.12"],\
["@types/vue", null],\
["evtd", "npm:0.2.3"],\
["vue", "npm:3.2.45"]\
@ -8256,7 +8264,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
["vue-eslint-parser", "virtual:b1db986ed39a80a226fbfa4d653465b173f10958eed2dd2079c16424a052a437a3b029f3b0228d6df47b4f864f76b70bc3e54b0b37aaac5dc8f4ae6650567a27#npm:9.0.3"],\
["@types/eslint", null],\
["debug", "virtual:b86a9fb34323a98c6519528ed55faa0d9b44ca8879307c0b29aa384bde47ff59a7d0c9051b31246f14521dfb71ba3c5d6d0b35c29fffc17bf875aa6ad977d9e8#npm:4.3.4"],\
["eslint", "npm:8.29.0"],\
["eslint", "npm:8.31.0"],\
["eslint-scope", "npm:7.1.1"],\
["eslint-visitor-keys", "npm:3.3.0"],\
["espree", "npm:9.3.2"],\
@ -8302,18 +8310,18 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
],\
"linkType": "SOFT"\
}],\
["virtual:fbe7528a5ca5bae03aee1ecb3bd12568e1a4061d2923a771668e8a940ef9ad64125dd8cc7324107ffbd6e34ffa123be3bcd813b79ff7b2db2cb2572affe66874#npm:0.4.47", {\
"packageLocation": "./.yarn/__virtual__/vueuc-virtual-e7a7bcc64e/0/cache/vueuc-npm-0.4.47-ad081ddd15-b82b77a882.zip/node_modules/vueuc/",\
["virtual:4fa5810747c131dcf20cc36c17e835ba5fa42265b3b1f99a6712420e8672195f31ac73d077125c82af29bde6232df6ecc61b1f3ff0dde337b62085ef712e7d6a#npm:0.4.47", {\
"packageLocation": "./.yarn/__virtual__/vueuc-virtual-326ef48c83/0/cache/vueuc-npm-0.4.47-ad081ddd15-b82b77a882.zip/node_modules/vueuc/",\
"packageDependencies": [\
["vueuc", "virtual:fbe7528a5ca5bae03aee1ecb3bd12568e1a4061d2923a771668e8a940ef9ad64125dd8cc7324107ffbd6e34ffa123be3bcd813b79ff7b2db2cb2572affe66874#npm:0.4.47"],\
["@css-render/vue3-ssr", "virtual:fbe7528a5ca5bae03aee1ecb3bd12568e1a4061d2923a771668e8a940ef9ad64125dd8cc7324107ffbd6e34ffa123be3bcd813b79ff7b2db2cb2572affe66874#npm:0.15.10"],\
["vueuc", "virtual:4fa5810747c131dcf20cc36c17e835ba5fa42265b3b1f99a6712420e8672195f31ac73d077125c82af29bde6232df6ecc61b1f3ff0dde337b62085ef712e7d6a#npm:0.4.47"],\
["@css-render/vue3-ssr", "virtual:4fa5810747c131dcf20cc36c17e835ba5fa42265b3b1f99a6712420e8672195f31ac73d077125c82af29bde6232df6ecc61b1f3ff0dde337b62085ef712e7d6a#npm:0.15.10"],\
["@juggle/resize-observer", "npm:3.3.1"],\
["@types/vue", null],\
["css-render", "npm:0.15.10"],\
["evtd", "npm:0.2.3"],\
["seemly", "npm:0.3.3"],\
["vdirs", "virtual:fbe7528a5ca5bae03aee1ecb3bd12568e1a4061d2923a771668e8a940ef9ad64125dd8cc7324107ffbd6e34ffa123be3bcd813b79ff7b2db2cb2572affe66874#npm:0.1.8"],\
["vooks", "virtual:fbe7528a5ca5bae03aee1ecb3bd12568e1a4061d2923a771668e8a940ef9ad64125dd8cc7324107ffbd6e34ffa123be3bcd813b79ff7b2db2cb2572affe66874#npm:0.2.12"],\
["vdirs", "virtual:4fa5810747c131dcf20cc36c17e835ba5fa42265b3b1f99a6712420e8672195f31ac73d077125c82af29bde6232df6ecc61b1f3ff0dde337b62085ef712e7d6a#npm:0.1.8"],\
["vooks", "virtual:4fa5810747c131dcf20cc36c17e835ba5fa42265b3b1f99a6712420e8672195f31ac73d077125c82af29bde6232df6ecc61b1f3ff0dde337b62085ef712e7d6a#npm:0.2.12"],\
["vue", "npm:3.2.45"]\
],\
"packagePeers": [\

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View file

@ -14,14 +14,16 @@ from django.utils import timezone
from ietf.doc.models import ( Document, DocEvent, NewRevisionDocEvent, DocAlias, State, DocumentAuthor,
StateDocEvent, BallotPositionDocEvent, BallotDocEvent, BallotType, IRSGBallotDocEvent, TelechatDocEvent,
DocumentActionHolder, BofreqEditorDocEvent, BofreqResponsibleDocEvent )
DocumentActionHolder, BofreqEditorDocEvent, BofreqResponsibleDocEvent, DocExtResource )
from ietf.group.models import Group
from ietf.person.factories import PersonFactory
from ietf.group.factories import RoleFactory
from ietf.name.models import ExtResourceName
from ietf.utils.text import xslugify
from ietf.utils.timezone import date_today
def draft_name_generator(type_id,group,n):
return '%s-%s-%s-%s%d'%(
type_id,
@ -520,3 +522,12 @@ class ProceedingsMaterialDocFactory(BaseDocumentFactory):
obj.set_state(State.objects.get(type_id=state_type_id,slug=state_slug))
else:
obj.set_state(State.objects.get(type_id='procmaterials', slug='active'))
class DocExtResourceFactory(factory.django.DjangoModelFactory):
name = factory.Iterator(ExtResourceName.objects.filter(type_id='url'))
value = factory.Faker('url')
doc = factory.SubFactory('ietf.doc.factories.BaseDocumentFactory')
class Meta:
model = DocExtResource

View file

@ -40,7 +40,7 @@ from ietf.doc.factories import ( DocumentFactory, DocEventFactory, CharterFactor
ConflictReviewFactory, WgDraftFactory, IndividualDraftFactory, WgRfcFactory,
IndividualRfcFactory, StateDocEventFactory, BallotPositionDocEventFactory,
BallotDocEventFactory, DocumentAuthorFactory, NewRevisionDocEventFactory,
StatusChangeFactory, BofreqFactory)
StatusChangeFactory, BofreqFactory, DocExtResourceFactory)
from ietf.doc.forms import NotifyForm
from ietf.doc.fields import SearchableDocumentsField
from ietf.doc.utils import create_ballot_if_not_open, uppercase_std_abbreviated_name
@ -602,6 +602,8 @@ Man Expires September 22, 2015 [Page 3]
updated_by = IndividualDraftFactory()
updated_by.relateddocument_set.create(relationship_id='updates',source=obsoleted_by,target=draft.docalias.first())
external_resource = DocExtResourceFactory(doc=draft)
# these tests aren't testing all attributes yet, feel free to
# expand them
@ -622,6 +624,7 @@ Man Expires September 22, 2015 [Page 3]
self.assertNotContains(r, updated.title)
self.assertNotContains(r, updated_by.canonical_name())
self.assertNotContains(r, updated_by.title)
self.assertContains(r, external_resource.value)
r = self.client.get(urlreverse("ietf.doc.views_doc.document_main", kwargs=dict(name=draft.name)) + "?include_text=0")
self.assertEqual(r.status_code, 200)

View file

@ -26,8 +26,8 @@ from ietf.utils.aliases import dump_sublist
DEFAULT_YEARS = 5
ACTIVE_STATES=['active', 'bof', 'proposed']
GROUP_TYPES=['wg', 'rg', 'dir', 'team', 'review', 'program', 'rfcedtyp']
NO_AD_GROUP_TYPES=['rg', 'team', 'program', 'rfcedtyp']
GROUP_TYPES=['wg', 'rg', 'rag', 'dir', 'team', 'review', 'program', 'rfcedtyp']
NO_AD_GROUP_TYPES=['rg', 'rag', 'team', 'program', 'rfcedtyp']
IETF_DOMAIN=['ietf.org', ]
IRTF_DOMAIN=['irtf.org', ]
IAB_DOMAIN=['iab.org', ]
@ -61,7 +61,7 @@ class Command(BaseCommand):
for g in GROUP_TYPES:
domains = []
domains += IETF_DOMAIN
if g == 'rg':
if g in ('rg', 'rag'):
domains += IRTF_DOMAIN
if g == 'program':
domains += IAB_DOMAIN

View file

@ -142,6 +142,9 @@ class GenerateGroupAliasesTests(TestCase):
testrg = GroupFactory(type_id='rg', acronym='testrg', parent=irtf)
testrgchair = PersonFactory(user__username='testrgchair')
testrg.role_set.create(name_id='chair', person=testrgchair, email=testrgchair.email())
testrag = GroupFactory(type_id='rg', acronym='testrag', parent=irtf)
testragchair = PersonFactory(user__username='testragchair')
testrag.role_set.create(name_id='chair', person=testragchair, email=testragchair.email())
individual = PersonFactory()
args = [ ]
@ -184,6 +187,7 @@ class GenerateGroupAliasesTests(TestCase):
ameschair.email_address(),
recentchair.email_address(),
testrgchair.email_address(),
testragchair.email_address(),
]]))
self.assertFalse(all([x in vcontent for x in [
done_ad.email_address(),
@ -200,8 +204,11 @@ class GenerateGroupAliasesTests(TestCase):
'xfilter-' + recent.acronym + '-ads',
'xfilter-' + recent.acronym + '-chairs',
'xfilter-' + testrg.acronym + '-chairs',
'xfilter-' + testrag.acronym + '-chairs',
testrg.acronym + '-chairs@ietf.org',
testrg.acronym + '-chairs@irtf.org',
testrag.acronym + '-chairs@ietf.org',
testrag.acronym + '-chairs@irtf.org',
]]))
self.assertFalse(all([x in vcontent for x in [
'xfilter-' + done.acronym + '-ads',

View file

@ -7315,7 +7315,12 @@ class ProceedingsTests(BaseMeetingTestCase):
)
def test_proceedings(self):
"""Proceedings should be displayed correctly"""
"""Proceedings should be displayed correctly
Currently only tests that the view responds with a 200 response code and checks the ProceedingsMaterials
at the top of the proceedings. Ought to actually test the display of the individual group/session
materials as well.
"""
meeting = make_meeting_test_data(meeting=MeetingFactory(type_id='ietf', number='100'))
session = Session.objects.filter(meeting=meeting, group__acronym="mars").first()
GroupEventFactory(group=session.group,type='status_update')
@ -7369,6 +7374,65 @@ class ProceedingsTests(BaseMeetingTestCase):
self._assertMeetingHostsDisplayed(r, meeting)
self._assertProceedingsMaterialsDisplayed(r, meeting)
def test_named_session(self):
"""Session with a name should appear separately in the proceedings"""
meeting = MeetingFactory(type_id='ietf', number='100')
group = GroupFactory()
plain_session = SessionFactory(meeting=meeting, group=group)
named_session = SessionFactory(meeting=meeting, group=group, name='I Got a Name')
for doc_type_id in ('agenda', 'minutes', 'bluesheets', 'recording', 'slides', 'draft'):
# Set up sessions materials that will have distinct URLs for each session.
# This depends on settings.MEETING_DOC_HREFS and may need updating if that changes.
SessionPresentationFactory(
session=plain_session,
document__type_id=doc_type_id,
document__uploaded_filename=f'upload-{doc_type_id}-plain',
document__external_url=f'external_url-{doc_type_id}-plain',
)
SessionPresentationFactory(
session=named_session,
document__type_id=doc_type_id,
document__uploaded_filename=f'upload-{doc_type_id}-named',
document__external_url=f'external_url-{doc_type_id}-named',
)
url = urlreverse('ietf.meeting.views.proceedings', kwargs={'num': meeting.number})
r = self.client.get(url)
self.assertEqual(r.status_code, 200)
q = PyQuery(r.content)
plain_label = q(f'div#{group.acronym}')
self.assertEqual(plain_label.text(), group.acronym)
plain_row = plain_label.closest('tr')
self.assertTrue(plain_row)
named_label = q(f'div#{slugify(named_session.name)}')
self.assertEqual(named_label.text(), named_session.name)
named_row = named_label.closest('tr')
self.assertTrue(named_row)
for material in (sp.document for sp in plain_session.sessionpresentation_set.all()):
if material.type_id == 'draft':
expected_url = urlreverse(
'ietf.doc.views_doc.document_main',
kwargs={'name': material.canonical_name()},
)
else:
expected_url = material.get_href(meeting)
self.assertTrue(plain_row.find(f'a[href="{expected_url}"]'))
self.assertFalse(named_row.find(f'a[href="{expected_url}"]'))
for material in (sp.document for sp in named_session.sessionpresentation_set.all()):
if material.type_id == 'draft':
expected_url = urlreverse(
'ietf.doc.views_doc.document_main',
kwargs={'name': material.canonical_name()},
)
else:
expected_url = material.get_href(meeting)
self.assertFalse(plain_row.find(f'a[href="{expected_url}"]'))
self.assertTrue(named_row.find(f'a[href="{expected_url}"]'))
def test_proceedings_no_agenda(self):
# Meeting number must be larger than the last special-cased proceedings (currently 96)
meeting = MeetingFactory(type_id='ietf',populate_schedule=False,date=date_today(), number='100')

View file

@ -3586,6 +3586,74 @@ def upcoming_json(request):
response = HttpResponse(json.dumps(data, indent=2, sort_keys=False), content_type='application/json;charset=%s'%settings.DEFAULT_CHARSET)
return response
def organize_proceedings_sessions(sessions):
# Collect sessions by Group, then bin by session name (including sessions with blank names).
# If all of a group's sessions are 'notmeet', the processed data goes in not_meeting_sessions.
# Otherwise, the data goes in meeting_sessions.
meeting_groups = []
not_meeting_groups = []
for group_acronym, group_sessions in itertools.groupby(sessions, key=lambda s: s.group.acronym):
by_name = {}
is_meeting = False
all_canceled = True
group = None
for s in sorted(
group_sessions,
key=lambda gs: (
gs.official_timeslotassignment().timeslot.time
if gs.official_timeslotassignment() else datetime.datetime(datetime.MAXYEAR, 1, 1)
),
):
group = s.group
if s.current_status != 'notmeet':
is_meeting = True
if s.current_status != 'canceled':
all_canceled = False
by_name.setdefault(s.name, [])
if s.current_status != 'notmeet' or s.sessionpresentation_set.exists():
by_name[s.name].append(s) # for notmeet, only include sessions with materials
for sess_name, ss in by_name.items():
def _format_materials(items):
"""Format session/material for template
Input is a list of (session, materials) pairs. The materials value can be a single value or a list.
"""
material_times = {} # key is material, value is first timestamp it appeared
for s, mats in items:
timestamp = s.official_timeslotassignment().timeslot.time
if not isinstance(mats, list):
mats = [mats]
for mat in mats:
if mat and mat not in material_times:
material_times[mat] = timestamp
n_mats = len(material_times)
result = []
if n_mats == 1:
result.append({'material': list(material_times)[0]}) # no 'time' when only a single material
elif n_mats > 1:
for mat, timestamp in material_times.items():
result.append({'material': mat, 'time': timestamp})
return result
entry = {
'group': group,
'name': sess_name,
'canceled': all_canceled,
# pass sessions instead of the materials here so session data (like time) is easily available
'agendas': _format_materials((s, s.agenda()) for s in ss),
'minutes': _format_materials((s, s.minutes()) for s in ss),
'bluesheets': _format_materials((s, s.bluesheets()) for s in ss),
'recordings': _format_materials((s, s.recordings()) for s in ss),
'slides': _format_materials((s, s.slides()) for s in ss),
'drafts': _format_materials((s, s.drafts()) for s in ss),
}
if is_meeting:
meeting_groups.append(entry)
else:
not_meeting_groups.append(entry)
return meeting_groups, not_meeting_groups
def proceedings(request, num=None):
meeting = get_meeting(num)
@ -3606,36 +3674,48 @@ def proceedings(request, num=None):
today_utc = date_today(datetime.timezone.utc)
schedule = get_schedule(meeting, None)
sessions = add_event_info_to_session_qs(
Session.objects.filter(meeting__number=meeting.number)
).filter(
Q(timeslotassignments__schedule__in=[schedule, schedule.base if schedule else None]) | Q(current_status='notmeet')
).select_related().order_by('-current_status')
plenaries = sessions.filter(name__icontains='plenary').exclude(current_status='notmeet')
ietf = sessions.filter(group__parent__type__slug = 'area').exclude(group__acronym='edu')
irtf = sessions.filter(group__parent__acronym = 'irtf')
training = sessions.filter(group__acronym__in=['edu','iaoc'], type_id__in=['regular', 'other',]).exclude(current_status='notmeet')
iab = sessions.filter(group__parent__acronym = 'iab').exclude(current_status='notmeet')
sessions = (
meeting.session_set.with_current_status()
.filter(Q(timeslotassignments__schedule__in=[schedule, schedule.base if schedule else None])
| Q(current_status='notmeet'))
.select_related()
.order_by('-current_status')
)
plenaries, _ = organize_proceedings_sessions(
sessions.filter(name__icontains='plenary')
.exclude(current_status='notmeet')
)
irtf, _ = organize_proceedings_sessions(
sessions.filter(group__parent__acronym = 'irtf').order_by('group__acronym')
)
training, _ = organize_proceedings_sessions(
sessions.filter(group__acronym__in=['edu','iaoc'], type_id__in=['regular', 'other',])
.exclude(current_status='notmeet')
)
iab, _ = organize_proceedings_sessions(
sessions.filter(group__parent__acronym = 'iab')
.exclude(current_status='notmeet')
)
ietf = sessions.filter(group__parent__type__slug = 'area').exclude(group__acronym='edu').order_by('group__parent__acronym', 'group__acronym')
ietf_areas = []
for area, area_sessions in itertools.groupby(
ietf,
key=lambda s: s.group.parent
):
meeting_groups, not_meeting_groups = organize_proceedings_sessions(area_sessions)
ietf_areas.append((area, meeting_groups, not_meeting_groups))
cache_version = Document.objects.filter(session__meeting__number=meeting.number).aggregate(Max('time'))["time__max"]
ietf_areas = []
for area, sessions in itertools.groupby(sorted(ietf, key=lambda s: (s.group.parent.acronym, s.group.acronym)), key=lambda s: s.group.parent):
sessions = list(sessions)
meeting_groups = set(s.group_id for s in sessions if s.current_status != 'notmeet')
meeting_sessions = []
not_meeting_sessions = []
for s in sessions:
if s.current_status == 'notmeet' and s.group_id not in meeting_groups:
not_meeting_sessions.append(s)
else:
meeting_sessions.append(s)
ietf_areas.append((area, meeting_sessions, not_meeting_sessions))
with timezone.override(meeting.tz()):
return render(request, "meeting/proceedings.html", {
'meeting': meeting,
'plenaries': plenaries, 'ietf': ietf, 'training': training, 'irtf': irtf, 'iab': iab,
'plenaries': plenaries,
'training': training,
'irtf': irtf,
'iab': iab,
'ietf_areas': ietf_areas,
'cut_off_date': cut_off_date,
'cor_cut_off_date': cor_cut_off_date,

View file

@ -166,6 +166,11 @@ $tooltip-margin: inherit !default;
.rfcmarkup {
pre {
width: 72ch;
white-space: pre-wrap;
}
h1,
h2,
h3,

View file

@ -43,6 +43,12 @@
margin-bottom: var(--line);
margin-left: 3ch;
/* Really long lines can wrap when all else fails.
* This won't affect <pre> or <table>, or cases where soft-wrapping occurs.
* Mostly this exists so that long URLs wrap properly in Safari, which
* doesn't break words at '/' like other browsers. */
overflow-wrap: break-word;
h1, h2, h3, h4, h5 {
font-weight: bold;
font-size: inherit;

View file

@ -220,6 +220,12 @@ th,
}
}
.charter.revision-list {
.page-item {
width: auto;
}
}
// Style the photo cards
.photo {
width: 12em;

View file

@ -38,7 +38,7 @@ export function populate_nav(nav, heading_selector, classes) {
while (level < cur_level) {
let nav = nav_stack.pop();
cur_level--;
nav_stack[level].appendChild(nav);
nav_stack[cur_level].appendChild(nav);
}
} else {
while (level > cur_level) {

View file

@ -18,7 +18,7 @@
{{ top|safe }}
{% if diff_revisions and diff_revisions|length > 1 or doc.name|rfcbis %}
<h2 class="my-3">Revision differences</h2>
{% include "doc/document_history_form.html" with doc=doc diff_revisions=diff_revisions action=rfcdiff_base_url only %}
{% include "doc/document_history_form.html" with doc=doc diff_revisions=diff_revisions action=rfcdiff_base_url snapshot=snapshot only %}
{% endif %}
<h2 class="my-3">Document history</h2>
{% if can_add_comment %}

View file

@ -11,22 +11,34 @@
<label for="url1" class="col-form-label col-sm-2 fw-bold">From revision</label>
<div class="col-sm-10">
{% endif %}
{% with prev_rev=doc.rev|add:"-1"|stringformat:"02d" %}
<select class="form-select{% if document_html %} form-select-sm mb-1{% endif %} select2-field"
data-max-entries="1"
data-width="resolve"
data-allow-clear="false"
data-minimum-input-length="0"
{% if not document_html %}id="url1"{% else %}aria-label="From revision"{% endif %}
name="url1">
{% for name, rev, time, url in diff_revisions %}
<option value="{{ url }}"
{% if diff_revisions|length > 1 and forloop.counter == 2 %} selected="selected"{% endif %}>
{% if document_html %}
{% if name == doc.name %}
{% if rev == prev_rev or doc.rev == "00" and rev == "00" %} selected{% endif %}
{% endif %}
{% else %}
{% if diff_revisions|length > 1 and forloop.counter == 2 %} selected{% endif %}
{% endif %}>
{{ name|prettystdname }}{% if rev %}-{{ rev }}{% endif %}
{% if not document_html %}({{ time|date:"Y-m-d" }}){% endif %}
</option>
{% endfor %}
{% if doc.name|rfcbis %}
<option value="{{ doc.name|rfcbis }}"
{% if diff_revisions and diff_revisions|length == 1 %} selected="selected"{% endif %}>
{% if document_html %}
{% if rev == prev_rev %} selected{% endif %}
{% else %}
{% if diff_revisions and diff_revisions|length == 1 %} selected{% endif %}
{% endif %}>
{{ doc.name|rfcbis|prettystdname }}
</option>
{% endif %}
@ -40,13 +52,18 @@
{% endif %}
<select class="form-select{% if document_html %} form-select-sm mb-1{% endif %} select2-field"
data-max-entries="1"
data-width="resolve"
data-allow-clear="false"
data-minimum-input-length="0"
{% if not document_html %}id="url2"{% else %}aria-label="To revision"{% endif %}
name="url2">
{% for name, rev, time, url in diff_revisions %}
<option value="{{ url }}"
{% if forloop.counter == 1 %} selected="selected"{% endif %}>
{% if document_html %}
{% if not snapshot and doc.get_state_slug == "rfc" and name == "rfc"|add:doc.rfc_number or snapshot and name == doc.name and rev == doc.rev %} selected{% endif %}
{% else %}
{% if forloop.counter == 1 %} selected{% endif %}
{% endif %}>
{{ name|prettystdname }}{% if rev %}-{{ rev }}{% endif %}
{% if not document_html %}({{ time|date:"Y-m-d" }}){% endif %}
</option>
@ -90,6 +107,7 @@
name="difftype">
Inline
</button>
{% endwith %}
{% if not document_html %}
</div>
</div>

View file

@ -41,6 +41,14 @@
{% include "base/icons.html" %}
{% include "doc/opengraph.html" %}
{% analytical_head_bottom %}
<style>
{# Force "text-overflow: ellipsis" to hide the beginning of a doc name #}
.diff-form .select2-selection__rendered {
direction: rtl;
text-align: left;
}
}
</style>
</head>
<body>
{% analytical_body_top %}
@ -93,6 +101,17 @@
</tr>
</tbody>
{% include "doc/document_info.html" with sidebar=False %}
<tr>
<th scope="row"></th>
<td>
<a class="btn btn-sm btn-warning mb-3"
target="_blank"
href="https://github.com/ietf-tools/datatracker/issues/new/choose">
Report a bug
<i class="bi bi-bug"></i>
</a>
</td>
</tr>
</table>
</div>
</div>
@ -131,8 +150,8 @@
<i class="bi bi-arrow-bar-up"></i>
</button>
<div class="pt-2 pt-lg-3 px-md-2 px-lg-3">
<p>
<a href="{% url 'ietf.doc.views_doc.document_main' name=doc.canonical_name %}">
<a class="btn btn-primary btn-sm" href="{% url 'ietf.doc.views_doc.document_main' name=doc.canonical_name %}">Datatracker</a>
<p class="fw-bold pt-2">
{% if not snapshot and doc.get_state_slug == "rfc" %}
RFC {{ doc.rfc_number }}
{% else %}
@ -146,7 +165,7 @@
Internet-Draft
{% endif %}
</span>
</a>
</p>
{% if request.COOKIES.htmlconf != 'html' and html %}
<div class="alert alert-info small">
@ -209,6 +228,12 @@
<table class="table table-sm table-borderless">
{% include "doc/document_info.html" with sidebar=True %}
</table>
<a class="btn btn-sm btn-warning mb-3"
target="_blank"
href="https://github.com/ietf-tools/datatracker/issues/new/choose">
Report a bug
<i class="bi bi-bug"></i>
</a>
</div>
<div class="tab-pane mb-5"
id="toc-tab-pane"

View file

@ -85,7 +85,7 @@
<th scope="row">Compare versions</th>
<td class="edit"></td>
<td>
{% include "doc/document_history_form.html" with doc=doc diff_revisions=diff_revisions action=rfcdiff_base_url document_html=document_html only %}
{% include "doc/document_history_form.html" with doc=doc diff_revisions=diff_revisions action=rfcdiff_base_url document_html=document_html snapshot=snapshot only %}
</td>
</tr>
{% endif %}
@ -394,7 +394,6 @@ href="{% url 'ietf.doc.views_draft.review_possibly_replaces' name=doc.name %}">E
{% endif %}
{% endif %}
{% with doc.docextresource_set.all as resources %}
{% if document_html and resources or document_html and doc.group and doc.group.list_archive %}
{% if resources or doc.group and doc.group.list_archive or can_edit_stream_info or can_edit_individual %}
<tr>
<td>
@ -443,6 +442,5 @@ href="{% url 'ietf.doc.views_draft.review_possibly_replaces' name=doc.name %}">E
</td>
</tr>
{% endif %}
{% endif %}
{% endwith %}
</tbody>

View file

@ -1,16 +1,16 @@
{# Copyright The IETF Trust 2015, All Rights Reserved #}
{% load origin %}
{% load origin ietf_filters %}
{% origin %}
{% if not document_html %}
<label class="my-1 fw-bold">Versions:</label>
<nav class="mb-3">
{% endif %}
<ul class="revision-list pagination pagination-sm text-center flex-wrap{% if document_html %} my-0{% endif %}">
<ul class="revision-list{%if doc.type.slug == 'charter' %} charter{% endif %} pagination pagination-sm text-center flex-wrap{% if document_html %} my-0{% endif %}">
{% for rev in revisions %}
{% if rev %}
<li class="page-item {% if rev == doc.rev %}{% if snapshot or doc.get_state_slug != 'rfc' %}active{% endif %}{% endif %}">
<li class="page-item {%if doc.type.slug == 'charter' and rev == rev|charter_major_rev %}fw-bold {% endif %}{% if rev == doc.rev %}{% if snapshot or doc.get_state_slug != 'rfc' %}active{% endif %}{% endif %}">
<a class="page-link"
href="{% if snapshot and doc.get_state_slug == 'rfc' %}{% if document_html %}{% url 'ietf.doc.views_doc.document_html' name=doc.doc.name %}{% else %}{% url 'ietf.doc.views_doc.document_main' name=doc.doc.name %}{% endif %}{% else %}{% if document_html %}{% url 'ietf.doc.views_doc.document_html' name=doc.name rev=rev %}{% else %}{% url 'ietf.doc.views_doc.document_main' name=doc.name rev=rev %}{% endif %}{% endif %}"
href="{% if document_html %}{% url 'ietf.doc.views_doc.document_html' name=doc.name rev=rev %}{% else %}{% url 'ietf.doc.views_doc.document_main' name=doc.name rev=rev %}{% endif %}"
{% if rev != '00' and rev != latest_rev %}rel="nofollow"{% endif %}>
{{ rev }}
</a>

View file

@ -45,48 +45,48 @@
</p>
{% endif %}
{% if num == "3.4" %}
<p class="alert alert-info my-3">
The IESG will use RFC 5742 responses:
</p>
<ol>
<li>
The IESG has concluded
that there is no conflict between this document and IETF work;
</li>
<li>
The IESG has concluded that this work is related to IETF work done
in WG &lt;X&gt;, but this relationship does not prevent
publishing;
</li>
<li>
The IESG has concluded that publication could
potentially disrupt the IETF work done in WG &lt;X&gt; and
recommends not publishing the document at this time;
</li>
<li>
The IESG
has concluded that this document violates IETF procedures for
&lt;Y&gt; and should therefore not be published without IETF
review and IESG approval; or
</li>
<li>
The IESG has concluded that this
document extends an IETF protocol in a way that requires IETF
review and should therefore not be published without IETF review
and IESG approval.
</li>
</ol>
<p>
The document shepherd must propose one of these responses in the
conflict-review document, and the document shepherd may supply text
for an IESG Note in that document. The Area Director ballot positions
indicate consensus with the response proposed by the document shepherd
and agreement that the IESG should request inclusion of the IESG Note.
</p>
<p>
Other matters may be recorded in comments, and the comments will
be passed on to the RFC Editor as community review of the document.
</p>
<div class="alert alert-info my-3">
<p>The IESG will use RFC 5742 responses:</p>
<ol>
<li>
The IESG has concluded
that there is no conflict between this document and IETF work;
</li>
<li>
The IESG has concluded that this work is related to IETF work done
in WG &lt;X&gt;, but this relationship does not prevent
publishing;
</li>
<li>
The IESG has concluded that publication could
potentially disrupt the IETF work done in WG &lt;X&gt; and
recommends not publishing the document at this time;
</li>
<li>
The IESG
has concluded that this document violates IETF procedures for
&lt;Y&gt; and should therefore not be published without IETF
review and IESG approval; or
</li>
<li>
The IESG has concluded that this
document extends an IETF protocol in a way that requires IETF
review and should therefore not be published without IETF review
and IESG approval.
</li>
</ol>
<p>
The document shepherd must propose one of these responses in the
conflict-review document, and the document shepherd may supply text
for an IESG Note in that document. The Area Director ballot positions
indicate consensus with the response proposed by the document shepherd
and agreement that the IESG should request inclusion of the IESG Note.
</p>
<p class="mb-0">
Other matters may be recorded in comments, and the comments will
be passed on to the RFC Editor as community review of the document.
</p>
</div>
{% endif %}
{% if "docs" in section %}
{% for doc in section.docs %}
@ -111,4 +111,4 @@
{% endif %}
{% endfor %}
{% endblock %}
{% block js %}<script>// automatically generate a right-hand navigation tab for long pages</script>{% endblock %}
{% block js %}<script>// automatically generate a right-hand navigation tab for long pages</script>{% endblock %}

View file

@ -5,111 +5,85 @@
{% load proceedings_filters %}
<tr>
<td>
{% if session.name %}
<div id="{{ session.name|slugify }}">{{ session.name }}</div>
{% else %}
<div id="{{ session.group.acronym }}">
<a href="{% url 'ietf.group.views.group_home' acronym=session.group.acronym %}">{{ session.group.acronym }}</a>
{% if entry.name %}
<div id="{{ entry.name|slugify }}">{{ entry.name }}</div>
{% elif entry.group.acronym %}
<div id="{{ entry.group.acronym }}">
<a href="{% url 'ietf.group.views.group_home' acronym=entry.group.acronym %}">{{ entry.group.acronym }}</a>
</div>
{% if session.group.state_id == "bof" %}<span class="badge rounded-pill bg-success">BOF</span>{% endif %}
{% if entry.group.state_id == "bof" %}<span class="badge rounded-pill bg-success">BOF</span>{% endif %}
{% else %}
<h1>{{ entry.group }}</h1>
{% endif %}
</td>
{% if session.all_meeting_sessions_cancelled %}
{% if entry.canceled %}
<td colspan="4">
<span class="badge rounded-pill bg-danger">Session cancelled</span>
</td>
{% else %}
{# artifacts #}
<td>
{% if session.all_meeting_agendas %}
{% if session.all_meeting_agendas|length == 1 %}
<a href="{{ session.all_meeting_agendas.0|meeting_href:meeting }}">Agenda</a>
<br>
{% else %}
{% for agenda in session.all_meeting_agendas %}
<a href="{{ agenda|meeting_href:meeting }}">
Agenda {{ agenda.sessionpresentation_set.first.session.official_timeslotassignment.timeslot.time|date:"D G:i" }}
</a>
<br>
{% endfor %}
{% endif %}
{% else %}
{% if show_agenda == "True" and not meeting.proceedings_final %}
{% for agenda in entry.agendas %}
<a href="{{ agenda.material|meeting_href:meeting }}">
Agenda
{% if agenda.time %}{{agenda.time|date:"D G:i"}}{% endif %}
</a>
<br>
{% empty %}
{% if show_agenda and not meeting.proceedings_final %}
<span class="badge rounded-pill bg-warning">No agenda</span>
<br>
{% endif %}
{% endif %}
{% if session.all_meeting_minutes %}
{% if session.all_meeting_minutes|length == 1 %}
<a href="{{ session.all_meeting_minutes.0|meeting_href:meeting }}">Minutes</a>
<br>
{% else %}
{% for minutes in session.all_meeting_minutes %}
<a href="{{ minutes|meeting_href:meeting }}">
Minutes {{ minutes.sessionpresentation_set.first.session.official_timeslotassignment.timeslot.time|date:"D G:i" }}
</a>
<br>
{% endfor %}
{% endif %}
{% else %}
{% if show_agenda == "True" and not meeting.proceedings_final %}
{% endfor %}
{% for minutes in entry.minutes %}
<a href="{{ minutes.material|meeting_href:meeting }}">
Minutes
{% if minutes.time %}{{minutes.time|date:"D G:i"}}{% endif %}
</a>
<br>
{% empty %}
{% if show_agenda and not meeting.proceedings_final %}
<span class="badge rounded-pill bg-warning">No minutes</span>
<br>
{% endif %}
{% endif %}
{% if session.all_meeting_bluesheets %}
{% if session.all_meeting_bluesheets|length == 1 %}
<a href="{{ session.all_meeting_bluesheets.0|meeting_href:meeting }}">Bluesheets</a>
<br>
{% else %}
{% for bs in session.all_meeting_bluesheets %}
<a href="{{ bs|meeting_href:meeting }}">
Bluesheets {{ bs.sessionpresentation_set.first.session.official_timeslotassignment.timeslot.time|date:"D G:i" }}
</a>
<br>
{% endfor %}
{% endif %}
{% endif %}
{% with session.group|status_for_meeting:meeting as status %}
{% if status %}
<a href="{% url 'ietf.group.views.group_about_status_meeting' acronym=session.group.acronym num=meeting.number %}">
Status
</a>
<br>
{% endif %}
{% endwith %}
{% endfor %}
{% for bs in entry.bluesheets %}
<a href="{{ bs.material|meeting_href:meeting }}">
Bluesheets
{% if bs.time %}{{ bs.time|date:"D G:i" }}{% endif %}
</a>
<br>
{% endfor %}
</td>
{# recordings #}
<td>
{% if session.all_meeting_sessions_for_group|length == 1 %}
{% for rec in session.all_meeting_recordings %}
<a href="{{ rec|meeting_href:meeting|default:"#" }}">{{ rec|hack_recording_title:False }}</a>
<br>
{% endfor %}
{% else %}
{% for rec in session.all_meeting_recordings %}
<a href="{{ rec|meeting_href:meeting|default:"#" }}">{{ rec|hack_recording_title:True }}</a>
<br>
{% endfor %}
{% endif %}
{% for rec in entry.recordings %}
<a href="{{ rec.material|meeting_href:meeting|default:"#" }}">
{{ rec.material|hack_recording_title }}
{% if rec.time %}{{ rec.time|date:"D G:i"}}{% endif %}
</a>
<br>
{% endfor %}
</td>
{# slides #}
<td>
{% with session.all_meeting_slides as slides %}
{% for slide in slides %}
<a href="{{ slide|meeting_href:meeting }}">{{ slide.title|clean_whitespace }}</a>
<br>
{% empty %}
{% if not meeting.proceedings_final %}<span class="badge rounded-pill bg-warning">No slides</span>{% endif %}
{% endfor %}
{% endwith %}
{% for slide in entry.slides %}
<a href="{{ slide.material|meeting_href:meeting }}">{{ slide.material.title|clean_whitespace }}</a>
<br>
{% empty %}
{% if not meeting.proceedings_final %}<span class="badge rounded-pill bg-warning">No slides</span>{% endif %}
{% endfor %}
</td>
{# drafts #}
<td>
{% with session.all_meeting_drafts as drafts %}
{% for draft in drafts %}
<a href="{% url "ietf.doc.views_doc.document_main" name=draft.canonical_name %}">{{ draft.canonical_name }}</a>
<br>
{% empty %}
{% if not meeting.proceedings_final %}<span class="badge rounded-pill bg-warning">No drafts</span>{% endif %}
{% endfor %}
{% endwith %}
{% for draft in entry.drafts %}
<a href="{% url "ietf.doc.views_doc.document_main" name=draft.material.canonical_name %}">
{{ draft.material.canonical_name }}
</a>
<br>
{% empty %}
{% if not meeting.proceedings_final %}<span class="badge rounded-pill bg-warning">No drafts</span>{% endif %}
{% endfor %}
</td>
{% endif %}
</tr>
</tr>

View file

@ -23,10 +23,32 @@
{% load cache %}
{% cache 900 ietf_meeting_proceedings meeting.number cache_version %}
{% include 'meeting/proceedings/introduction.html' with meeting=meeting only %}
{% with "True" as show_agenda %}
<!-- Plenaries -->
{% if plenaries %}
<h2 class="mt-5" id="plenaries">Plenaries</h2>
<!-- Plenaries -->
{% if plenaries %}
<h2 class="mt-5" id="plenaries">Plenaries</h2>
<table class="table table-sm table-striped tablesorter">
<thead>
<tr>
<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>
{% for entry in plenaries %}
{% include "meeting/group_proceedings.html" with entry=entry meeting=meeting show_agenda=True only %}
{% endfor %}
</tbody>
</table>
{% endif %}
<!-- Working groups -->
{% for area, meeting_groups, not_meeting_groups in ietf_areas %}
<h2 class="mt-5" id="{{ area.acronym }}">
{{ area.acronym|upper }} <small class="text-muted">{{ area.name }}</small>
</h2>
{% if meeting_groups %}
<table class="table table-sm table-striped tablesorter">
<thead>
<tr>
@ -38,161 +60,125 @@
</tr>
</thead>
<tbody>
{% for session in plenaries %}
{% include "meeting/group_proceedings.html" %}
{% for entry in meeting_groups %}
{% include "meeting/group_proceedings.html" with entry=entry meeting=meeting show_agenda=True only %}
{% endfor %}
</tbody>
</table>
{% endif %}
<!-- Working groups -->
{% for area, meeting_sessions, not_meeting_sessions in ietf_areas %}
<h2 class="mt-5" id="{{ area.acronym }}">
{{ area.acronym|upper }} <small class="text-muted">{{ area.name }}</small>
</h2>
{% if meeting_sessions %}
<table class="table table-sm table-striped tablesorter">
<thead>
<tr>
<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>
{% for session in meeting_sessions %}
{% ifchanged session.group.acronym %}
{% include "meeting/group_proceedings.html" %}
{% endifchanged %}
{% endfor %}
</tbody>
</table>
{% endif %}
{% if not_meeting_sessions %}
<p>
{{ area.name }} groups not meeting:
{% for session in not_meeting_sessions %}
{% ifchanged session.group.acronym %}
<a href="{% url 'ietf.group.views.group_home' acronym=session.group.acronym %}">{{ session.group.acronym }}</a>{% if not forloop.last %},{% endif %}
{% endifchanged %}
{% endfor %}
</p>
<table class="table table-sm table-striped">
<thead>
<tr>
<th scope="col"></th>
<th scope="col"></th>
<th scope="col"></th>
<th scope="col"></th>
<th scope="col"></th>
</tr>
</thead>
<tbody>
{% for session in not_meeting_sessions %}
{% ifchanged session.group.acronym %}
{% if session.sessionpresentation_set.exists %}
{% include "meeting/group_proceedings.html" %}
{% endif %}
{% endifchanged %}
{% endfor %}
</tbody>
</table>
{% endif %}
{% endfor %}
<!-- Training Sessions -->
{% if training %}
{% with "False" as show_agenda %}
<h2 class="mt-5" id="training">Training</h2>
<table class="table table-sm table-striped tablesorter">
<thead>
<tr>
<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>
{% for session in training %}
{% ifchanged %}
{% include "meeting/group_proceedings.html" %}
{% endifchanged %}
{% endfor %}
</tbody>
</table>
{% endwith %}
{% endif %}
<!-- IAB Sessions -->
{% if iab %}
<h2 class="mt-5" id="iab">
IAB <small class="text-muted">Internet Architecture Board</small>
</h2>
<table class="table table-sm table-striped tablesorter">
{% if not_meeting_groups %}
<p>
{{ area.name }} groups not meeting:
{% for entry in not_meeting_groups %}
{% if entry.name == "" %}{# do not show named sessions in this list #}
<a href="{% url 'ietf.group.views.group_home' acronym=entry.group.acronym %}">
{{ entry.group.acronym }}
</a>{% if not forloop.last %},{% endif %}
{% endif %}
{% endfor %}
</p>
<table class="table table-sm table-striped">
<thead>
<tr>
<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>
<th scope="col"></th>
<th scope="col"></th>
<th scope="col"></th>
<th scope="col"></th>
<th scope="col"></th>
</tr>
</thead>
<tbody>
{% for session in iab %}
{% ifchanged %}
{% include "meeting/group_proceedings.html" %}
{% endifchanged %}
{% endfor %}
{% for entry in not_meeting_groups %}{% if entry.sessions_with_materials %}
{% include "meeting/group_proceedings.html" with entry=entry meeting=meeting show_agenda=True only %}
{% endif %}{% endfor %}
</tbody>
</table>
{% endif %}
<!-- IRTF Sessions -->
{% if irtf %}
<h2 class="mt-5" id="irtf">
IRTF <small class="text-muted">Internet Research Task Force</small>
</h2>
<table class="table table-sm table-striped tablesorter">
<thead>
<tr>
<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>
{% for session in irtf|dictsort:"group.acronym" %}
{% ifchanged %}
{% include "meeting/group_proceedings.html" %}
{% endifchanged %}
{% endfor %}
</tbody>
</table>
{% endif %}
{% endwith %}
{% endfor %}
<!-- Training Sessions -->
{% if training %}
<h2 class="mt-5" id="training">Training</h2>
<table class="table table-sm table-striped tablesorter">
<thead>
<tr>
<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>
{% for entry in training %}
{% include "meeting/group_proceedings.html" with entry=entry meeting=meeting show_agenda=False only %}
{% endfor %}
</tbody>
</table>
{% endif %}
<!-- IAB Sessions -->
{% if iab %}
<h2 class="mt-5" id="iab">
IAB <small class="text-muted">Internet Architecture Board</small>
</h2>
<table class="table table-sm table-striped tablesorter">
<thead>
<tr>
<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>
{% for entry in iab %}
{% include "meeting/group_proceedings.html" with entry=entry meeting=meeting show_agenda=True only %}
{% endfor %}
</tbody>
</table>
{% endif %}
<!-- IRTF Sessions -->
{% if irtf %}
<h2 class="mt-5" id="irtf">
IRTF <small class="text-muted">Internet Research Task Force</small>
</h2>
<table class="table table-sm table-striped tablesorter">
<thead>
<tr>
<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>
{% for entry in irtf %}
{% include "meeting/group_proceedings.html" with entry=entry meeting=meeting show_agenda=True only %}
{% endfor %}
</tbody>
</table>
{% endif %}
{% endcache %}
{% endblock %}
{% block js %}

View file

@ -873,6 +873,8 @@ class IetfTestRunner(DiscoverRunner):
"attribute-empty-style": "off",
# For fragments, don't check that elements are in the proper ancestor element
"element-required-ancestor": "off",
# This is allowed by the HTML spec
"form-dup-name": "off",
},
}

View file

@ -25,6 +25,7 @@ from tempfile import mkdtemp
from django.apps import apps
from django.contrib.auth.models import User
from django.conf import settings
from django.forms import Form
from django.template import Context
from django.template import Template # pyflakes:ignore
from django.template.defaulttags import URLNode
@ -37,6 +38,7 @@ import debug # pyflakes:ignore
from ietf.person.name import name_parts, unidecode_name
from ietf.submit.tests import submission_file
from ietf.utils.draft import PlaintextDraft, getmeta
from ietf.utils.fields import SearchableField
from ietf.utils.log import unreachable, assertion
from ietf.utils.mail import send_mail_preformatted, send_mail_text, send_mail_mime, outbox, get_payload_text
from ietf.utils.test_runner import get_template_paths, set_coverage_checking
@ -517,3 +519,25 @@ class TimezoneTests(TestCase):
):
with self.assertRaises(RuntimeError):
timezone_not_near_midnight()
class SearchableFieldTests(TestCase):
def test_has_changed_single_value(self):
"""Should work with initial as a single value or list when max_entries == 1"""
class TestSearchableField(SearchableField):
model = "fake model" # needs to be not-None to allow field init
class TestForm(Form):
test_field = TestSearchableField(max_entries=1)
# single value in initial (e.g., when used as a single-valued field in a formset)
changed_form = TestForm(initial={'test_field': 1}, data={'test_field': [2]})
self.assertTrue(changed_form.has_changed())
unchanged_form = TestForm(initial={'test_field': 1}, data={'test_field': [1]})
self.assertFalse(unchanged_form.has_changed())
# list value in initial (usual situation for a MultipleChoiceField subclass like SearchableField)
changed_form = TestForm(initial={'test_field': [1]}, data={'test_field': [2]})
self.assertTrue(changed_form.has_changed())
unchanged_form = TestForm(initial={'test_field': [1]}, data={'test_field': [1]})
self.assertFalse(unchanged_form.has_changed())

View file

@ -51,7 +51,8 @@ validate_url = URLValidator()
def check_url_validity(attrs, new=False):
if (None, "href") not in attrs:
return None
# rfc2html creates a tags without href
return attrs
url = attrs[(None, "href")]
try:
if url.startswith("http"):

View file

@ -18,24 +18,24 @@
"@popperjs/core": "2.11.6",
"@twuni/emojify": "1.0.2",
"bootstrap": "5.2.3",
"bootstrap-icons": "1.10.2",
"bootstrap-icons": "1.10.3",
"browser-fs-access": "0.31.1",
"caniuse-lite": "1.0.30001439",
"d3": "7.7.0",
"caniuse-lite": "1.0.30001442",
"d3": "7.8.0",
"file-saver": "2.0.5",
"highcharts": "10.3.2",
"jquery": "3.6.2",
"jquery": "3.6.3",
"jquery-ui-dist": "1.13.2",
"js-cookie": "3.0.1",
"list.js": "2.3.1",
"lodash": "4.17.21",
"lodash-es": "4.17.21",
"luxon": "3.1.1",
"luxon": "3.2.1",
"moment": "2.29.4",
"moment-timezone": "0.5.40",
"ms": "2.1.3",
"murmurhash-js": "1.0.0",
"naive-ui": "2.34.2",
"naive-ui": "2.34.3",
"pinia": "2.0.28",
"pinia-plugin-persist": "1.0.0",
"select2": "4.1.0-rc.0",
@ -57,19 +57,19 @@
"@vitejs/plugin-vue": "3.2.0",
"browserlist": "latest",
"c8": "7.12.0",
"eslint": "8.29.0",
"eslint": "8.31.0",
"eslint-config-standard": "17.0.0",
"eslint-plugin-cypress": "2.12.1",
"eslint-plugin-import": "2.26.0",
"eslint-plugin-n": "15.6.0",
"eslint-plugin-n": "15.6.1",
"eslint-plugin-node": "11.1.0",
"eslint-plugin-promise": "6.1.1",
"eslint-plugin-vue": "9.8.0",
"html-validate": "7.10.1",
"html-validate": "7.12.2",
"jquery-migrate": "3.4.0",
"parcel": "2.8.2",
"pug": "3.0.2",
"sass": "1.56.2",
"sass": "1.57.1",
"seedrandom": "3.0.5",
"vite": "3.2.5"
},

135
yarn.lock
View file

@ -97,20 +97,20 @@ __metadata:
languageName: node
linkType: hard
"@eslint/eslintrc@npm:^1.3.3":
version: 1.3.3
resolution: "@eslint/eslintrc@npm:1.3.3"
"@eslint/eslintrc@npm:^1.4.1":
version: 1.4.1
resolution: "@eslint/eslintrc@npm:1.4.1"
dependencies:
ajv: ^6.12.4
debug: ^4.3.2
espree: ^9.4.0
globals: ^13.15.0
globals: ^13.19.0
ignore: ^5.2.0
import-fresh: ^3.2.1
js-yaml: ^4.1.0
minimatch: ^3.1.2
strip-json-comments: ^3.1.1
checksum: f03e9d6727efd3e0719da2051ea80c0c73d20e28c171121527dbb868cd34232ca9c1d0525a66e517a404afea26624b1e47895b6a92474678418c2f50c9566694
checksum: cd3e5a8683db604739938b1c1c8b77927dc04fce3e28e0c88e7f2cd4900b89466baf83dfbad76b2b9e4d2746abdd00dd3f9da544d3e311633d8693f327d04cd7
languageName: node
linkType: hard
@ -232,14 +232,14 @@ __metadata:
languageName: node
linkType: hard
"@humanwhocodes/config-array@npm:^0.11.6":
version: 0.11.7
resolution: "@humanwhocodes/config-array@npm:0.11.7"
"@humanwhocodes/config-array@npm:^0.11.8":
version: 0.11.8
resolution: "@humanwhocodes/config-array@npm:0.11.8"
dependencies:
"@humanwhocodes/object-schema": ^1.2.1
debug: ^4.1.1
minimatch: ^3.0.5
checksum: cf506dc45d9488af7fbf108ea6ac2151ba1a25e6d2b94b9b4fc36d2c1e4099b89ff560296dbfa13947e44604d4ca4a90d97a4fb167370bf8dd01a6ca2b6d83ac
checksum: 0fd6b3c54f1674ce0a224df09b9c2f9846d20b9e54fabae1281ecfc04f2e6ad69bf19e1d6af6a28f88e8aa3990168b6cb9e1ef755868c3256a630605ec2cb1d3
languageName: node
linkType: hard
@ -1919,10 +1919,10 @@ __metadata:
languageName: node
linkType: hard
"bootstrap-icons@npm:1.10.2":
version: 1.10.2
resolution: "bootstrap-icons@npm:1.10.2"
checksum: 1d73556a70b05c1b219c379243c24ea8186c773990b3bc5e8248825e7eae1c8137be90a2b7dd81fd46060a99558763886a069587a65a7f70a362bf5934e795e7
"bootstrap-icons@npm:1.10.3":
version: 1.10.3
resolution: "bootstrap-icons@npm:1.10.3"
checksum: bef7f83ce09f0ae0b2a92d61b69f3c6d04ba2307e9051ab3f175613837e0dc5252d22e2b3a0403b59995be4e06ebe00f17d0335be6f2cffdbfdbefa9268b6abd
languageName: node
linkType: hard
@ -2095,10 +2095,10 @@ browserlist@latest:
languageName: node
linkType: hard
"caniuse-lite@npm:1.0.30001439":
version: 1.0.30001439
resolution: "caniuse-lite@npm:1.0.30001439"
checksum: 3912dd536c9735713ca85e47721988bbcefb881ddb4886b0b9923fa984247fd22cba032cf268e57d158af0e8a2ae2eae042ae01942a1d6d7849fa9fa5d62fb82
"caniuse-lite@npm:1.0.30001442":
version: 1.0.30001442
resolution: "caniuse-lite@npm:1.0.30001442"
checksum: c1bff65bd4f53da2d288e7f55be40706ee0119b983eae5a9dcc884046990476891630aef72d708f7989f8f1964200c44e4c37ea40deecaa2fb4a480df23e6317
languageName: node
linkType: hard
@ -2671,9 +2671,9 @@ browserlist@latest:
languageName: node
linkType: hard
"d3@npm:7.7.0":
version: 7.7.0
resolution: "d3@npm:7.7.0"
"d3@npm:7.8.0":
version: 7.8.0
resolution: "d3@npm:7.8.0"
dependencies:
d3-array: 3
d3-axis: 3
@ -2705,7 +2705,7 @@ browserlist@latest:
d3-timer: 3
d3-transition: 3
d3-zoom: 3
checksum: ed1308674fe0eda2ee14218f3d8ead5025204367c1881acf794d7eb99b0940883108520c35e053d5b23707a4ce858a5af422eea299bc0d24ce7d7fe13e7f9f38
checksum: 383d2c8aa6a66f3a6c6977b629de8fa1bf3bce829b15c4a769a59096691730a39e7763eb17b0ff4abbf4d1b577212160d7e5d5f1da35591e5ef5399e8398cefa
languageName: node
linkType: hard
@ -3384,9 +3384,9 @@ browserlist@latest:
languageName: node
linkType: hard
"eslint-plugin-n@npm:15.6.0":
version: 15.6.0
resolution: "eslint-plugin-n@npm:15.6.0"
"eslint-plugin-n@npm:15.6.1":
version: 15.6.1
resolution: "eslint-plugin-n@npm:15.6.1"
dependencies:
builtins: ^5.0.1
eslint-plugin-es: ^4.1.0
@ -3398,7 +3398,7 @@ browserlist@latest:
semver: ^7.3.8
peerDependencies:
eslint: ">=7.0.0"
checksum: 629dc3e8c83010cf8aced555f4d36f6fceeea65b0c580123ca36e44b7cb6a19a71718c30168a506a569d205b1f961a74ebe9e44148c33ed923116180b04be45b
checksum: 269d6f28967acadaaf6b6bb362d564bf5772545b1990053fb2a3c18f8683f9ffe708cda8c0de3dfddb4e86b63e738ab93634915b84649f51d3bb1783253d4b91
languageName: node
linkType: hard
@ -3495,12 +3495,12 @@ browserlist@latest:
languageName: node
linkType: hard
"eslint@npm:8.29.0":
version: 8.29.0
resolution: "eslint@npm:8.29.0"
"eslint@npm:8.31.0":
version: 8.31.0
resolution: "eslint@npm:8.31.0"
dependencies:
"@eslint/eslintrc": ^1.3.3
"@humanwhocodes/config-array": ^0.11.6
"@eslint/eslintrc": ^1.4.1
"@humanwhocodes/config-array": ^0.11.8
"@humanwhocodes/module-importer": ^1.0.1
"@nodelib/fs.walk": ^1.2.8
ajv: ^6.10.0
@ -3519,7 +3519,7 @@ browserlist@latest:
file-entry-cache: ^6.0.1
find-up: ^5.0.0
glob-parent: ^6.0.2
globals: ^13.15.0
globals: ^13.19.0
grapheme-splitter: ^1.0.4
ignore: ^5.2.0
import-fresh: ^3.0.0
@ -3540,7 +3540,7 @@ browserlist@latest:
text-table: ^0.2.0
bin:
eslint: bin/eslint.js
checksum: e05204b05907b82d910983995cb946e0ba62ca514eb2b6791c43f623333b143564a2eee0139909d31c10935c21877d815b1f76dd674a59cb91c471064325c4ab
checksum: 5e5688bb864edc6b12d165849994812eefa67fb3fc44bb26f53659b63edcd8bcc68389d27cc6cc9e5b79ee22f24b6f311fa3ed047bddcafdec7d84c1b5561e4f
languageName: node
linkType: hard
@ -3879,7 +3879,16 @@ browserlist@latest:
languageName: node
linkType: hard
"globals@npm:^13.15.0, globals@npm:^13.2.0":
"globals@npm:^13.19.0":
version: 13.19.0
resolution: "globals@npm:13.19.0"
dependencies:
type-fest: ^0.20.2
checksum: a000dbd00bcf28f0941d8a29c3522b1c3b8e4bfe4e60e262c477a550c3cbbe8dbe2925a6905f037acd40f9a93c039242e1f7079c76b0fd184bc41dcc3b5c8e2e
languageName: node
linkType: hard
"globals@npm:^13.2.0":
version: 13.15.0
resolution: "globals@npm:13.15.0"
dependencies:
@ -3985,9 +3994,9 @@ browserlist@latest:
languageName: node
linkType: hard
"html-validate@npm:7.10.1":
version: 7.10.1
resolution: "html-validate@npm:7.10.1"
"html-validate@npm:7.12.2":
version: 7.12.2
resolution: "html-validate@npm:7.12.2"
dependencies:
"@babel/code-frame": ^7.10.0
"@html-validate/stylish": ^3.0.0
@ -4015,7 +4024,7 @@ browserlist@latest:
optional: true
bin:
html-validate: bin/html-validate.js
checksum: 7a7dbc0a573e3f359a42eeab67e37b39965a3895b9c7354f065547d0f2e7264b5bea7f78db122c42f42ca72427c6c812c2500251846a5322ad7b502aca09b625
checksum: 04bccd168057045fcc824ca9ce02ae195acd9a6723926655a085d74efc0dfcc69ef53822c9633a38241512d656ec05c2e045612c6313ae316b32dbb8bf96af80
languageName: node
linkType: hard
@ -4513,10 +4522,10 @@ browserlist@latest:
languageName: node
linkType: hard
"jquery@npm:3.6.2":
version: 3.6.2
resolution: "jquery@npm:3.6.2"
checksum: b8ca408b9447e67e614204dbc4b2e71c6ea76eff281942d233769d969eed97fe28ffa34976e9ad9d3faad9b0a0d947d7e326ed272243679a9f5812a586c84168
"jquery@npm:3.6.3":
version: 3.6.3
resolution: "jquery@npm:3.6.3"
checksum: 0fd366bdcaa0c84a7a8751ce20f8192290141913978b5059574426d9b01f4365daa675f95aab3eec94fd794d27b08d32078a2236bef404b8ba78073009988ce6
languageName: node
linkType: hard
@ -4850,10 +4859,10 @@ browserlist@latest:
languageName: node
linkType: hard
"luxon@npm:3.1.1":
version: 3.1.1
resolution: "luxon@npm:3.1.1"
checksum: 388fb35d3c51a19d8b305a3338e7e74634b08562e7d2f9ed5c05a7f4bc9ee1c1ab6a2546b6d9c4c104516b24043757d65f5f3fe3d78b206fbf55a9586ab62230
"luxon@npm:3.2.1":
version: 3.2.1
resolution: "luxon@npm:3.2.1"
checksum: 3fa3def2c5f5d3032b4c46220c4da8aeb467ac979888fc9d2557adcd22195f93516b4ad5909a75862bec8dc6ddc0953b0f38e6d2f4a8ab8450ddc531a83cf20d
languageName: node
linkType: hard
@ -5120,9 +5129,9 @@ browserlist@latest:
languageName: node
linkType: hard
"naive-ui@npm:2.34.2":
version: 2.34.2
resolution: "naive-ui@npm:2.34.2"
"naive-ui@npm:2.34.3":
version: 2.34.3
resolution: "naive-ui@npm:2.34.3"
dependencies:
"@css-render/plugin-bem": ^0.15.10
"@css-render/vue3-ssr": ^0.15.10
@ -5144,7 +5153,7 @@ browserlist@latest:
vueuc: ^0.4.47
peerDependencies:
vue: ^3.0.0
checksum: 48871bb06803bbe4dafc88a37eadcb4c3e91e96767fd47d1da331b65a7630a70b1fc2978e1f8668267e199c78e4284753f16535130f87b1bca866384f024e5bb
checksum: 792d9e6c51c5f577b787dedf90d60ea02bbb9c962bf58aac140aab18dcde8f1717d49a417a77a54e2959a3a743442d55b32152a3134ce8b7d29880ec2ae7cb55
languageName: node
linkType: hard
@ -6055,41 +6064,41 @@ browserlist@latest:
"@twuni/emojify": 1.0.2
"@vitejs/plugin-vue": 3.2.0
bootstrap: 5.2.3
bootstrap-icons: 1.10.2
bootstrap-icons: 1.10.3
browser-fs-access: 0.31.1
browserlist: latest
c8: 7.12.0
caniuse-lite: 1.0.30001439
d3: 7.7.0
eslint: 8.29.0
caniuse-lite: 1.0.30001442
d3: 7.8.0
eslint: 8.31.0
eslint-config-standard: 17.0.0
eslint-plugin-cypress: 2.12.1
eslint-plugin-import: 2.26.0
eslint-plugin-n: 15.6.0
eslint-plugin-n: 15.6.1
eslint-plugin-node: 11.1.0
eslint-plugin-promise: 6.1.1
eslint-plugin-vue: 9.8.0
file-saver: 2.0.5
highcharts: 10.3.2
html-validate: 7.10.1
jquery: 3.6.2
html-validate: 7.12.2
jquery: 3.6.3
jquery-migrate: 3.4.0
jquery-ui-dist: 1.13.2
js-cookie: 3.0.1
list.js: 2.3.1
lodash: 4.17.21
lodash-es: 4.17.21
luxon: 3.1.1
luxon: 3.2.1
moment: 2.29.4
moment-timezone: 0.5.40
ms: 2.1.3
murmurhash-js: 1.0.0
naive-ui: 2.34.2
naive-ui: 2.34.3
parcel: 2.8.2
pinia: 2.0.28
pinia-plugin-persist: 1.0.0
pug: 3.0.2
sass: 1.56.2
sass: 1.57.1
seedrandom: 3.0.5
select2: 4.1.0-rc.0
select2-bootstrap-5-theme: 1.3.0
@ -6141,16 +6150,16 @@ browserlist@latest:
languageName: node
linkType: hard
"sass@npm:1.56.2":
version: 1.56.2
resolution: "sass@npm:1.56.2"
"sass@npm:1.57.1":
version: 1.57.1
resolution: "sass@npm:1.57.1"
dependencies:
chokidar: ">=3.0.0 <4.0.0"
immutable: ^4.0.0
source-map-js: ">=0.6.2 <2.0.0"
bin:
sass: sass.js
checksum: 7b1f524d04bc42df3bac6dc5201ff7475635b7df9a1390430ed5bd58b6a73ea1ae58b83ccea8da293cb77b85b4c848faf5f2779ca4b91b9303948c251d0ddca4
checksum: 734a08781bcbe0e8defb2d54864e7012014ed3e68ba5fcb766189b002929019fc37b2f83a18d4be0b5f69ad77317c92396ce6112447ab47a194ed600ae1afb27
languageName: node
linkType: hard