Merge remote-tracking branch 'ietf-tools/main' into feat/postgres

This commit is contained in:
Robert Sparks 2023-03-29 10:41:47 +09:00
commit 01b4a91bfe
No known key found for this signature in database
GPG key ID: 6E2A6A5775F91318
87 changed files with 2727 additions and 3150 deletions

View file

@ -0,0 +1,115 @@
# GITHUB ACTIONS - WORKFLOW
name: Test DB Migration Build
on:
# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:
inputs:
exportDumpAsSQL:
description: 'Save PostgreSQL Debug Dump'
default: false
required: true
type: boolean
jobs:
migrate:
name: Migrate MySQL to PostgreSQL DB
runs-on: ubuntu-latest
container: ghcr.io/ietf-tools/datatracker-app-base:latest
permissions:
contents: read
packages: write
services:
db:
image: ghcr.io/ietf-tools/datatracker-db:latest
volumes:
- mariadb-data:/var/lib/mysql
env:
MYSQL_ROOT_PASSWORD: ietf
MYSQL_DATABASE: ietf_utf8
MYSQL_USER: django
MYSQL_PASSWORD: RkTkDPFnKpko
pgdb:
image: postgres:14.5
volumes:
- /pgdata:/var/lib/postgresql/data
env:
POSTGRES_PASSWORD: RkTkDPFnKpko
POSTGRES_USER: django
POSTGRES_DB: ietf
POSTGRES_HOST_AUTH_METHOD: trust
steps:
- uses: actions/checkout@v3
with:
ref: 'feat/pg-migrations'
- name: Migrate
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
with:
name: dump
path: ietf.dump
- name: Export as SQL (Debug)
if: ${{ github.event.inputs.exportDumpAsSQL == 'true' }}
run: pg_dump -h pgdb -U django ietf > ietf.sql
- name: Upload SQL DB Dump (Debug)
if: ${{ github.event.inputs.exportDumpAsSQL == 'true' }}
uses: actions/upload-artifact@v3
with:
name: dumpsql
path: ietf.sql
build:
name: Build PostgreSQL Docker Images
runs-on: ubuntu-latest
needs: [migrate]
permissions:
contents: read
packages: write
steps:
- uses: actions/checkout@v3
with:
ref: 'feat/pg-migrations'
- name: Download DB Dump
uses: actions/download-artifact@v3
with:
name: dump
- name: Set up QEMU
uses: docker/setup-qemu-action@v2
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
- name: Login to GitHub Container Registry
uses: docker/login-action@v2
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Docker Build & Push
uses: docker/build-push-action@v4
with:
context: .
file: docker/db-pg.Dockerfile
platforms: linux/amd64,linux/arm64
push: true
tags: ghcr.io/ietf-tools/datatracker-db-pg:migrate-test
provenance: false

623
.pnp.cjs generated

File diff suppressed because it is too large Load diff

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.

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.

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

@ -10,7 +10,7 @@
"license": "ISC",
"dependencies": {
"@octokit/core": "^4.2.0",
"luxon": "^3.2.1"
"luxon": "^3.3.0"
}
},
"node_modules/@octokit/auth-token": {
@ -141,9 +141,9 @@
}
},
"node_modules/luxon": {
"version": "3.2.1",
"resolved": "https://registry.npmjs.org/luxon/-/luxon-3.2.1.tgz",
"integrity": "sha512-QrwPArQCNLAKGO/C+ZIilgIuDnEnKx5QYODdDtbFaxzsbZcc/a7WFq7MhsVYgRlwawLtvOUESTlfJ+hc/USqPg==",
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/luxon/-/luxon-3.3.0.tgz",
"integrity": "sha512-An0UCfG/rSiqtAIiBPO0Y9/zAnHUZxAMiCpTd5h2smgsj7GGmcenvrvww2cqNA8/4A5ZrD1gJpHN2mIHZQF+Mg==",
"engines": {
"node": ">=12"
}
@ -315,9 +315,9 @@
"integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q=="
},
"luxon": {
"version": "3.2.1",
"resolved": "https://registry.npmjs.org/luxon/-/luxon-3.2.1.tgz",
"integrity": "sha512-QrwPArQCNLAKGO/C+ZIilgIuDnEnKx5QYODdDtbFaxzsbZcc/a7WFq7MhsVYgRlwawLtvOUESTlfJ+hc/USqPg=="
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/luxon/-/luxon-3.3.0.tgz",
"integrity": "sha512-An0UCfG/rSiqtAIiBPO0Y9/zAnHUZxAMiCpTd5h2smgsj7GGmcenvrvww2cqNA8/4A5ZrD1gJpHN2mIHZQF+Mg=="
},
"node-fetch": {
"version": "2.6.7",

View file

@ -11,6 +11,6 @@
"license": "ISC",
"dependencies": {
"@octokit/core": "^4.2.0",
"luxon": "^3.2.1"
"luxon": "^3.3.0"
}
}

View file

@ -6,18 +6,23 @@
"": {
"name": "deploy-to-container",
"dependencies": {
"dockerode": "^3.3.3",
"fs-extra": "^10.1.0",
"nanoid": "4.0.0",
"dockerode": "^3.3.5",
"fs-extra": "^11.1.0",
"nanoid": "4.0.1",
"nanoid-dictionary": "5.0.0-beta.1",
"slugify": "1.6.5",
"tar": "^6.1.11",
"tar": "^6.1.13",
"yargs": "^17.7.1"
},
"engines": {
"node": ">=16"
}
},
"node_modules/@balena/dockerignore": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/@balena/dockerignore/-/dockerignore-1.0.2.tgz",
"integrity": "sha512-wMue2Sy4GAVTk6Ic4tJVcnfdau+gx2EnG7S+uAEe+TWJFqE4YoWN4/H8MSLj4eYJKxGg26lZwboEniNiNwZQ6Q=="
},
"node_modules/ansi-regex": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
@ -163,10 +168,11 @@
}
},
"node_modules/dockerode": {
"version": "3.3.3",
"resolved": "https://registry.npmjs.org/dockerode/-/dockerode-3.3.3.tgz",
"integrity": "sha512-lvKV6/NGf2/CYLt5V4c0fd6Fl9XZSCo1Z2HBT9ioKrKLMB2o+gA62Uza8RROpzGvYv57KJx2dKu+ZwSpB//OIA==",
"version": "3.3.5",
"resolved": "https://registry.npmjs.org/dockerode/-/dockerode-3.3.5.tgz",
"integrity": "sha512-/0YNa3ZDNeLr/tSckmD69+Gq+qVNhvKfAHNeZJBnp7EOP6RGKV8ORrJHkUn20So5wU+xxT7+1n5u8PjHbfjbSA==",
"dependencies": {
"@balena/dockerignore": "^1.0.2",
"docker-modem": "^3.0.0",
"tar-fs": "~2.0.1"
},
@ -201,16 +207,16 @@
"integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow=="
},
"node_modules/fs-extra": {
"version": "10.1.0",
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz",
"integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==",
"version": "11.1.0",
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.0.tgz",
"integrity": "sha512-0rcTq621PD5jM/e0a3EJoGC/1TC5ZBCERW82LQuwfGnCa1V8w7dpYH1yNu+SLb6E5dkeCBzKEyLGlFrnr+dUyw==",
"dependencies": {
"graceful-fs": "^4.2.0",
"jsonfile": "^6.0.1",
"universalify": "^2.0.0"
},
"engines": {
"node": ">=12"
"node": ">=14.14"
}
},
"node_modules/fs-minipass": {
@ -331,9 +337,9 @@
"optional": true
},
"node_modules/nanoid": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-4.0.0.tgz",
"integrity": "sha512-IgBP8piMxe/gf73RTQx7hmnhwz0aaEXYakvqZyE302IXW3HyVNhdNGC+O2MwMAVhLEnvXlvKtGbtJf6wvHihCg==",
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-4.0.1.tgz",
"integrity": "sha512-udKGtCCUafD3nQtJg9wBhRP3KMbPglUsgV5JVsXhvyBs/oefqb4sqMEhKBBgqZncYowu58p1prsZQBYvAj/Gww==",
"bin": {
"nanoid": "bin/nanoid.js"
},
@ -471,19 +477,19 @@
}
},
"node_modules/tar": {
"version": "6.1.11",
"resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz",
"integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==",
"version": "6.1.13",
"resolved": "https://registry.npmjs.org/tar/-/tar-6.1.13.tgz",
"integrity": "sha512-jdIBIN6LTIe2jqzay/2vtYLlBHa3JF42ot3h1dW8Q0PaAG4v8rm0cvpVePtau5C6OKXGGcgO9q2AMNSWxiLqKw==",
"dependencies": {
"chownr": "^2.0.0",
"fs-minipass": "^2.0.0",
"minipass": "^3.0.0",
"minipass": "^4.0.0",
"minizlib": "^2.1.1",
"mkdirp": "^1.0.3",
"yallist": "^4.0.0"
},
"engines": {
"node": ">= 10"
"node": ">=10"
}
},
"node_modules/tar-fs": {
@ -553,6 +559,14 @@
"node": ">=10"
}
},
"node_modules/tar/node_modules/minipass": {
"version": "4.2.5",
"resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.5.tgz",
"integrity": "sha512-+yQl7SX3bIT83Lhb4BVorMAHVuqsskxRdlmO9kTpyukp8vsm2Sn/fUOV9xlnG8/a5JsypJzap21lz/y3FBMJ8Q==",
"engines": {
"node": ">=8"
}
},
"node_modules/tweetnacl": {
"version": "0.14.5",
"resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
@ -632,6 +646,11 @@
}
},
"dependencies": {
"@balena/dockerignore": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/@balena/dockerignore/-/dockerignore-1.0.2.tgz",
"integrity": "sha512-wMue2Sy4GAVTk6Ic4tJVcnfdau+gx2EnG7S+uAEe+TWJFqE4YoWN4/H8MSLj4eYJKxGg26lZwboEniNiNwZQ6Q=="
},
"ansi-regex": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
@ -730,10 +749,11 @@
}
},
"dockerode": {
"version": "3.3.3",
"resolved": "https://registry.npmjs.org/dockerode/-/dockerode-3.3.3.tgz",
"integrity": "sha512-lvKV6/NGf2/CYLt5V4c0fd6Fl9XZSCo1Z2HBT9ioKrKLMB2o+gA62Uza8RROpzGvYv57KJx2dKu+ZwSpB//OIA==",
"version": "3.3.5",
"resolved": "https://registry.npmjs.org/dockerode/-/dockerode-3.3.5.tgz",
"integrity": "sha512-/0YNa3ZDNeLr/tSckmD69+Gq+qVNhvKfAHNeZJBnp7EOP6RGKV8ORrJHkUn20So5wU+xxT7+1n5u8PjHbfjbSA==",
"requires": {
"@balena/dockerignore": "^1.0.2",
"docker-modem": "^3.0.0",
"tar-fs": "~2.0.1"
}
@ -762,9 +782,9 @@
"integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow=="
},
"fs-extra": {
"version": "10.1.0",
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz",
"integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==",
"version": "11.1.0",
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.0.tgz",
"integrity": "sha512-0rcTq621PD5jM/e0a3EJoGC/1TC5ZBCERW82LQuwfGnCa1V8w7dpYH1yNu+SLb6E5dkeCBzKEyLGlFrnr+dUyw==",
"requires": {
"graceful-fs": "^4.2.0",
"jsonfile": "^6.0.1",
@ -852,9 +872,9 @@
"optional": true
},
"nanoid": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-4.0.0.tgz",
"integrity": "sha512-IgBP8piMxe/gf73RTQx7hmnhwz0aaEXYakvqZyE302IXW3HyVNhdNGC+O2MwMAVhLEnvXlvKtGbtJf6wvHihCg=="
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-4.0.1.tgz",
"integrity": "sha512-udKGtCCUafD3nQtJg9wBhRP3KMbPglUsgV5JVsXhvyBs/oefqb4sqMEhKBBgqZncYowu58p1prsZQBYvAj/Gww=="
},
"nanoid-dictionary": {
"version": "5.0.0-beta.1",
@ -951,13 +971,13 @@
}
},
"tar": {
"version": "6.1.11",
"resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz",
"integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==",
"version": "6.1.13",
"resolved": "https://registry.npmjs.org/tar/-/tar-6.1.13.tgz",
"integrity": "sha512-jdIBIN6LTIe2jqzay/2vtYLlBHa3JF42ot3h1dW8Q0PaAG4v8rm0cvpVePtau5C6OKXGGcgO9q2AMNSWxiLqKw==",
"requires": {
"chownr": "^2.0.0",
"fs-minipass": "^2.0.0",
"minipass": "^3.0.0",
"minipass": "^4.0.0",
"minizlib": "^2.1.1",
"mkdirp": "^1.0.3",
"yallist": "^4.0.0"
@ -967,6 +987,11 @@
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz",
"integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ=="
},
"minipass": {
"version": "4.2.5",
"resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.5.tgz",
"integrity": "sha512-+yQl7SX3bIT83Lhb4BVorMAHVuqsskxRdlmO9kTpyukp8vsm2Sn/fUOV9xlnG8/a5JsypJzap21lz/y3FBMJ8Q=="
}
}
},

View file

@ -2,12 +2,12 @@
"name": "deploy-to-container",
"type": "module",
"dependencies": {
"dockerode": "^3.3.3",
"fs-extra": "^10.1.0",
"nanoid": "4.0.0",
"dockerode": "^3.3.5",
"fs-extra": "^11.1.0",
"nanoid": "4.0.1",
"nanoid-dictionary": "5.0.0-beta.1",
"slugify": "1.6.5",
"tar": "^6.1.11",
"tar": "^6.1.13",
"yargs": "^17.7.1"
},
"engines": {

File diff suppressed because it is too large Load diff

View file

@ -2,19 +2,19 @@
"name": "diff",
"type": "module",
"dependencies": {
"chalk": "^5.0.1",
"dockerode": "^3.3.3",
"chalk": "^5.2.0",
"dockerode": "^3.3.5",
"enquirer": "^2.3.6",
"extract-zip": "^2.0.1",
"fs-extra": "^10.1.0",
"got": "^12.3.1",
"fs-extra": "^11.1.0",
"got": "^12.6.0",
"keypress": "^0.2.1",
"listr2": "^5.0.2",
"listr2": "^5.0.8",
"lodash-es": "^4.17.21",
"luxon": "^3.2.1",
"luxon": "^3.3.0",
"pretty-bytes": "^6.1.0",
"tar": "^6.1.11",
"yargs": "^17.5.1"
"tar": "^6.1.13",
"yargs": "^17.7.1"
},
"engines": {
"node": ">=16"

View file

@ -461,7 +461,7 @@ def ad_dashboard_sort_key(doc):
def ad_workload(request):
delta = datetime.timedelta(days=30)
delta = datetime.timedelta(days=120)
right_now = timezone.now()
ads = []

View file

@ -219,6 +219,7 @@ class MeetingTests(BaseMeetingTestCase):
slot = TimeSlot.objects.get(sessionassignments__session=session,sessionassignments__schedule=meeting.schedule)
slot.location.urlresource_set.create(name_id='meetecho_onsite', url='https://onsite.example.com')
slot.location.urlresource_set.create(name_id='meetecho', url='https://meetecho.example.com')
meeting.timeslot_set.filter(type_id="break").update(show_location=False)
#
self.write_materials_files(meeting, session)
#
@ -348,9 +349,17 @@ class MeetingTests(BaseMeetingTestCase):
self.assertContains(r, session.materials.filter(type='slides').exclude(states__type__slug='slides',states__slug='deleted').first().uploaded_filename)
self.assertNotContains(r, session.materials.filter(type='slides',states__type__slug='slides',states__slug='deleted').first().uploaded_filename)
# iCal
r = self.client.get(urlreverse("ietf.meeting.views.agenda_ical", kwargs=dict(num=meeting.number))
+ "?show=" + session.group.parent.acronym.upper())
# iCal, no session filtering
ical_url = urlreverse("ietf.meeting.views.agenda_ical", kwargs=dict(num=meeting.number))
r = self.client.get(ical_url)
with open('./ical-output.ics', 'w') as f:
f.write(r.content.decode())
assert_ical_response_is_valid(self, r)
self.assertContains(r, "BEGIN:VTIMEZONE")
self.assertContains(r, "END:VTIMEZONE")
# iCal, single group
r = self.client.get(ical_url + "?show=" + session.group.parent.acronym.upper())
assert_ical_response_is_valid(self, r)
self.assertContains(r, session.group.acronym)
self.assertContains(r, session.group.name)

View file

@ -3,8 +3,6 @@
{% block title %}Areas - People{% endblock %}
{% block extrahead %}{{ block.super }}
<link rel="stylesheet" href="{% static 'ietf/css/jquery-ui.css' %}">
<script src="{% static 'ietf/js/jquery-ui.js' %}"></script>
<script src="{% static 'secr/js/utils.js' %}"></script>
{% endblock %}

View file

@ -4,8 +4,6 @@
{% block title %}Meetings{% endblock %}
{% block extrahead %}{{ block.super }}
<link rel="stylesheet" href="{% static 'ietf/css/jquery-ui.css' %}">
<script src="{% static 'ietf/js/jquery-ui.js' %}"></script>
<script src="{% static 'secr/js/utils.js' %}"></script>
<script src="{% static 'secr/js/dynamic_inlines.js' %}"></script>
{% endblock %}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

View file

@ -1,41 +0,0 @@
// Copyright The IETF Trust 2021, All Rights Reserved
/**
* Agenda personalization JS methods
*
* Requires agenda_timezone.js and timezone.js be included.
*/
'use strict';
/**
* Update the checkbox state to match the filter parameters
*/
function updateAgendaCheckboxes(filter_params) {
var selection_inputs = document.getElementsByName('selected-sessions');
selection_inputs.forEach((inp) => {
const item_keywords = inp.dataset.filterKeywords.toLowerCase()
.split(',');
if (
agenda_filter.keyword_match(item_keywords, filter_params.show) &&
!agenda_filter.keyword_match(item_keywords, filter_params.hide)
) {
inp.checked = true;
} else {
inp.checked = false;
}
});
}
window.handleFilterParamUpdate = function (filter_params) {
updateAgendaCheckboxes(filter_params);
};
window.handleTableClick = function (event) {
if (event.target.name === 'selected-sessions') {
// hide the tooltip after clicking on a checkbox
const jqElt = jQuery(event.target);
if (jqElt.tooltip) {
jqElt.tooltip('hide');
}
}
};

View file

@ -1,306 +0,0 @@
// Copyright The IETF Trust 2021, All Rights Reserved
/*
Timezone support specific to the agenda page
To properly handle timezones other than local, needs a method to retrieve
the current timezone. Set this by passing a method taking no parameters and
returning the current timezone to the set_current_tz_cb() method.
This should be done before calling anything else in the file.
*/
(function() {
'use strict';
const local_timezone = moment.tz.guess();
// get_current_tz_cb must be overwritten using set_current_tz_cb
let get_current_tz_cb = function() {
throw new Error('Tried to get current timezone before callback registered. Use set_current_tz_cb().');
};
// Initialize moments
function initialize_moments() {
const times = $('.time');
$.each(times, function (i, item) {
item.start_ts = moment.unix(this.getAttribute("data-start-time"))
.utc();
item.end_ts = moment.unix(this.getAttribute("data-end-time"))
.utc();
if (this.hasAttribute("data-weekday")) {
item.format = 2;
} else {
item.format = 1;
}
if (this.hasAttribute("format")) {
item.format = +this.getAttribute("format");
}
});
const things_with_slots = $('[data-slot-start-ts]');
$.each(things_with_slots, function (i, item) {
item.slot_start_ts = moment.unix(this.getAttribute("data-slot-start-ts"))
.utc();
item.slot_end_ts = moment.unix(this.getAttribute("data-slot-end-ts"))
.utc();
});
}
function format_time(t, tz, fmt) {
let out;
const mtz = window.meeting_timezone || "UTC";
switch (fmt) {
case 0:
out = t.tz(tz)
.format('dddd, ') + '<span>' +
t.tz(tz)
.format('MMMM Do YYYY, ') + '</span>' +
t.tz(tz)
.format('HH:mm') + '<span>' +
t.tz(tz)
.format(' Z z') + '</span>';
break;
case 1:
// Note, this code does not work if the meeting crosses the
// year boundary.
out = t.tz(tz)
.format("HH:mm");
if (+t.tz(tz)
.dayOfYear() < +t.tz(mtz)
.dayOfYear()) {
out = out + " (-1)";
} else if (+t.tz(tz)
.dayOfYear() > +t.tz(mtz)
.dayOfYear()) {
out = out + " (+1)";
}
break;
case 2:
out = t.tz(mtz)
.format("dddd, ")
.toUpperCase() +
t.tz(tz)
.format("HH:mm");
if (+t.tz(tz)
.dayOfYear() < +t.tz(mtz)
.dayOfYear()) {
out = out + " (-1)";
} else if (+t.tz(tz)
.dayOfYear() > +t.tz(mtz)
.dayOfYear()) {
out = out + " (+1)";
}
break;
case 3:
out = t.utc()
.format("YYYY-MM-DD");
break;
case 4:
out = t.tz(tz)
.format("YYYY-MM-DD HH:mm");
break;
case 5:
out = t.tz(tz)
.format("HH:mm");
break;
}
return out;
}
// Format tooltip notice
function format_tooltip_notice(start, end) {
let notice = "";
if (end.isBefore()) {
notice = "Event ended " + end.fromNow();
} else if (start.isAfter()) {
notice = "Event will start " + start.fromNow();
} else {
notice = "Event started " + start.fromNow() + " and will end " +
end.fromNow();
}
return '<span class="tooltipnotice">' + notice + '</span>';
}
// Format tooltip table
function format_tooltip_table(start, end) {
const current_timezone = get_current_tz_cb();
let out = '<div class="text-start"><table class="table table-sm"><thead><tr><th scope="col"></th><th scope="col">Session start</th><th scope="col">Session end</th></tr></thead>';
if (window.meeting_timezone !== "") {
out += '<tr><th class="timehead">Meeting timezone</th><td>' +
format_time(start, window.meeting_timezone, 0) + '</td><td>' +
format_time(end, window.meeting_timezone, 0) + '</td></tr>';
}
out += '<tr><th class="timehead">Local timezone</th><td>' +
format_time(start, local_timezone, 0) + '</td><td>' +
format_time(end, local_timezone, 0) + '</td></tr>';
if (current_timezone !== 'UTC') {
out += '<tr><th class="timehead">Selected Timezone</th><td>' +
format_time(start, current_timezone, 0) + '</td><td>' +
format_time(end, current_timezone, 0) + '</td></tr>';
}
out += '<tr><th class="timehead">UTC</th><td>' +
format_time(start, 'UTC', 0) + '</td><td>' +
format_time(end, 'UTC', 0) + '</td></tr>';
out += '</table>' + format_tooltip_notice(start, end) + '</div>';
return out;
}
// Format tooltip for item
function format_tooltip(start, end) {
return '<div class="timetooltiptext">' +
format_tooltip_table(start, end) +
'</div>';
}
// Add tooltips
function add_tooltips() {
$('.time')
.each(function () {
const tooltip = $(format_tooltip(this.start_ts, this.end_ts));
tooltip[0].start_ts = this.start_ts;
tooltip[0].end_ts = this.end_ts;
tooltip[0].ustart_ts = moment(this.start_ts)
.add(-2, 'hours');
tooltip[0].uend_ts = moment(this.end_ts)
.add(2, 'hours');
$(this)
.closest("th, td")
.attr("data-bs-toggle", "popover")
.attr("data-bs-content", $(tooltip)
.html())
.popover({
html: true,
sanitize: false,
trigger: "hover"
});
});
}
// Update times on the agenda based on the selected timezone
function update_times(newtz) {
$('.current-tz')
.html(newtz.replaceAll("_", " ").replaceAll("/", " / "));
$('.time')
.each(function () {
if (this.format === 4) {
const tz = this.start_ts.tz(newtz).format(" z");
const start_doy = this.start_ts.tz(newtz).dayOfYear();
const end_doy = this.end_ts.tz(newtz).dayOfYear();
if (start_doy === end_doy) {
$(this)
.html(format_time(this.start_ts, newtz, this.format) +
'<span class="d-lg-none"><br></span>-' + format_time(this.end_ts, newtz, 5) + tz);
} else {
$(this)
.html(format_time(this.start_ts, newtz, this.format) +
'<span class="d-lg-none"><br></span>-' +
format_time(this.end_ts, newtz, this.format) + tz);
}
} else {
$(this)
.html(format_time(this.start_ts, newtz, this.format) + '<span class="d-lg-none"><br></span>-' +
format_time(this.end_ts, newtz, this.format));
}
});
update_tooltips_all();
update_clock();
}
// Update hrefs in anchor tags with the "now-link" class. Mark the target with the "current-session" class.
function update_now_link(agenda_rows, ongoing_rows, later_rows) {
agenda_rows.removeClass('current-session');
const links_to_update = $('a.now-link');
if (ongoing_rows.length > 0) {
// sessions are ongoing - find those with the latest start time and mark the first of them as "now"
const last_start_time = ongoing_rows[ongoing_rows.length - 1].slot_start_ts;
for (let ii=0; ii < ongoing_rows.length; ii++) {
const dt = ongoing_rows[ii].slot_start_ts.diff(last_start_time, 'seconds');
if (Math.abs(dt) < 1) {
$(ongoing_rows[ii]).addClass('current-session');
links_to_update.attr('href', '#' + ongoing_rows[ii].id);
break;
}
}
} else if (later_rows.length > 0) {
// There were no ongoing sessions, look for the next one to start and mark as current
$(later_rows[0]).addClass('current-session');
links_to_update.attr('href', '#' + later_rows[0].id);
} else {
// No sessions in the future - meeting has apparently ended
links_to_update.attr('href', '#');
links_to_update.addClass('disabled'); // mark link
}
}
function update_ongoing_sessions() {
const agenda_rows = $('[data-slot-start-ts]');
const now_moment = moment();
const ongoing_rows = agenda_rows.filter(function () {
return now_moment.isBetween(this.slot_start_ts, this.slot_end_ts);
});
const later_rows = agenda_rows.filter(function() { return now_moment.isBefore(this.slot_start_ts); });
// Highlight ongoing based on the current time
agenda_rows.removeClass("table-warning");
ongoing_rows.addClass("table-warning");
update_now_link(agenda_rows, ongoing_rows, later_rows); // update any "now-link" anchors
}
// Update tooltips
function update_tooltips() {
const tooltips = $('.timetooltiptext');
tooltips.filter(function () {
return moment()
.isBetween(this.ustart_ts, this.uend_ts);
})
.each(function () {
$(this)
.html(format_tooltip_table(this.start_ts, this.end_ts));
});
}
// Update all tooltips
function update_tooltips_all() {
const tooltips = $('.timetooltiptext');
tooltips.each(function () {
$(this)
.html(format_tooltip_table(this.start_ts, this.end_ts));
});
}
// Update clock
function update_clock() {
$('span.current-time')
.html(format_time(moment(), get_current_tz_cb(), 0));
}
function urlParam(name) {
const results = new RegExp('[\?&]' + name + '=([^&#]*)')
.exec(window.location.href);
if (results === null) {
return null;
} else {
return results[1] || 0;
}
}
function init_timers(speedup) {
speedup = speedup || 1;
const fast_timer = 60000 / (speedup > 600 ? 600 : speedup);
update_clock();
update_ongoing_sessions();
setInterval(function () { update_clock(); }, fast_timer);
setInterval(function () { update_ongoing_sessions(); }, fast_timer);
setInterval(function () { update_tooltips(); }, fast_timer);
setInterval(function () { update_tooltips_all(); }, 3600000 / speedup);
}
/***** make public interface available on window *****/
window.initialize_moments = initialize_moments;
window.add_tooltips = add_tooltips;
window.update_times = update_times;
window.urlParam = urlParam;
window.init_timers = init_timers;
// set method used to find current time zone
window.set_current_tz_cb = function (fn) {
get_current_tz_cb = fn;
};
})();

View file

@ -141,10 +141,8 @@ $(document)
attachTo.append(menu.join(""));
}
if (!("ontouchstart" in document.documentElement)) {
$("ul.nav li.dropdown, ul.nav li.dropend")
.on("mouseenter mouseleave", dropdown_hover);
}
$("ul.nav li.dropdown, ul.nav li.dropend")
.on("mouseenter mouseleave", dropdown_hover);
}
});
});

View file

@ -1 +0,0 @@
import "jquery-ui-dist/jquery-ui.js";

View file

@ -1,188 +0,0 @@
var verbose = 0;
// Given a name like "foo-ab" or "foo-X-and-Y", change it to the "list-of-room-names" format, "foo-a/foo-b".
window.suffixmap = function (nm) {
var andsuffix = /^(.*-)([^-]+)-and-(.*)$/;
var andMatch = andsuffix.exec(nm);
if (andMatch && andMatch[0] != '') {
nm = andMatch[1] + andMatch[2] + "-" + andMatch[3];
}
// xyz-a/b/c => xyz-a/xyz-b/xyz-c
var abcsuffix = /^(.*)-([a-h0-9]+)[-/]([a-h0-9]+)([-/][a-h0-9]+)?$/;
var suffixMatch = abcsuffix.exec(nm);
// if (verbose) console.log("nm=" + nm);
if (suffixMatch && suffixMatch[0] != '') {
// if (verbose) console.log("matched");
nm = suffixMatch[1] + "-" + suffixMatch[2] + "/" +
suffixMatch[1] + "-" + suffixMatch[3];
// if (verbose) console.log("nm=>" + nm);
if (suffixMatch[4] && suffixMatch[4] != '')
nm += "/" + suffixMatch[1] + "-" + suffixMatch[4];
// if (verbose) console.log("nm=>" + nm);
}
// xyz-abc => xyz-a/xyz-b/xyz-c
abcsuffix = /^(.*)-([a-h])([a-h]+)([a-h])?$/;
var suffixMatch = abcsuffix.exec(nm);
if (suffixMatch && suffixMatch[0] != '') {
nm = suffixMatch[1] + "-" + suffixMatch[2] + "/" +
suffixMatch[1] + "-" + suffixMatch[3];
if (suffixMatch[4] && suffixMatch[4] != '')
nm += "/" + suffixMatch[1] + "-" + suffixMatch[4];
}
// if (verbose) console.log("suffixmap returning: " + nm);
return nm;
};
// Find the coordinates of a room or list of room names separated by "/".
// Calls the function findroom() to get the coordinates for a specific room.
window.roomcoords = function (nm) {
if (!nm) return null;
if (nm.match("/")) {
var nms = nm.split("/");
var nm0 = findroom(nms[0]);
if (!nm0) return null;
for (var i = 1; i < nms.length; i++) {
var nmi = roomcoords(nms[i]);
if (!nmi) return null;
if (nmi[0] < nm0[0]) nm0[0] = nmi[0];
if (nmi[1] < nm0[1]) nm0[1] = nmi[1];
if (nmi[2] > nm0[2]) nm0[2] = nmi[2];
if (nmi[3] > nm0[3]) nm0[3] = nmi[3];
}
return [nm0[0], nm0[1], nm0[2], nm0[3], nm0[4], nm0[5]];
} else {
return findroom(nm);
}
};
// Place an arrow at the center of a given room name (or list of room names separated by "/").
window.setarrow = function (nm) {
for (var f = 0; f < floorlist.length; f++) {
floor = floorlist[f];
for (var i = 0; i < arrowsuffixlist.length; i++) {
removearrow(arrowsuffixlist[i], floor);
}
}
for (i = 0; i < arguments.length; i += 2) {
nm = roommap(arguments[i]);
// if (verbose) console.log("nm=" + nm);
var rooms = nm.split(/[|]/);
for (var j = 0; j < rooms.length; j++) {
var room = rooms[j];
var ret = roomcoords(room);
// if (verbose) console.log("roomcoords returned: " + ret);
if (!ret) continue;
var left = ret[0],
top = ret[1],
right = ret[2],
bottom = ret[3],
floor = ret[4],
width = ret[5],
offsetleft = -25,
offsettop = -25;
// if (verbose) console.log("left=" + left + ", top=" + top + ", right=" + right + ", bottom=" + bottom + ", floor=" + floor + ", width=" + width);
// calculate arrow position
var arrow_left = (left + (right - left) / 2);
var arrow_top = (top + (bottom - top) / 2);
// scale the coordinates to match image scaling
// if (verbose) console.log(floor + "-image");
var img = document.getElementById(floor + "-image");
var scale = img.width / width;
arrow_left = arrow_left * scale;
arrow_top = arrow_top * scale;
var arrowdiv = floor + '-arrowdiv' + j;
// if (verbose) console.log("arrowdiv: " + arrowdiv);
var adiv = document.getElementById(arrowdiv);
if (adiv) {
adiv.style.left = arrow_left + offsetleft + "px";
adiv.style.top = arrow_top + offsettop + "px";
adiv.hidden = false;
window.location.hash = floor;
const url = new URL(location.href);
url.searchParams.set('room', nm);
history.pushState(null, '', url);
}
}
}
};
window.removearrow = function (which, fl) {
for (var i = 0; i < arguments.length; i++) {
which = arguments[i];
var arrowdiv = fl + '-arrowdiv' + (which ? which : "");
var adiv = document.getElementById(arrowdiv);
// if (verbose) console.log("looking for '" + arrowdiv + "'");
if (adiv) {
// if (verbose) console.log("adiv found");
adiv.style.left = -500;
adiv.style.top = -500;
adiv.hidden = true;
}
}
};
window.setarrowlist = function (which, names) {
for (var i = 1; i < arguments.length; i++) {
setarrow(arguments[i], which);
}
};
// Create a QueryString object
window.QueryString = function () {
// get the query string, ignore the ? at the front.
var querystring = location.search.substring(1);
// parse out name/value pairs separated via &
var args = querystring.split('&');
// split out each name = value pair
for (var i = 0; i < args.length; i++) {
var pair = args[i].split('=');
// Fix broken unescaping
var temp = unescape(pair[0])
.split('+');
var name_ = temp.join(' ');
var value_ = '';
if (typeof pair[1] == 'string') {
temp = unescape(pair[1])
.split('+');
value_ = temp.join(' ');
}
this[name_] = value_;
}
this.get = function (nm, def) {
var value_ = this[nm];
if (value_ == null) return def;
else return value_;
};
};
// Check the parameters for one named "room". If found, call setarrow(room).
window.checkParams = function () {
var querystring = new QueryString();
var room = querystring.get("room");
if (room && room != "") setarrow(room);
};
// new functions
window.located = function (loc) {
if (loc.civic && loc.civic.ROOM) {
// map from "TerminalRoom" to "terminal-room" as necessary.
setarrow(loc.civic.ROOM.replace(/([a-z])([A-Z])/g, '$1-$2')
.toLowerCase(), "-green");
}
};
// this needs to be called onload
window.automaticarrow = function () {
// if (navigator.geolocation) {
// navigator.geolocation.getCurrentPosition(located);
// }
};

View file

@ -1,637 +0,0 @@
var color = {
'app': { fg: "#008", bg: "#eef" },
'art': { fg: "#808", bg: "#fef" },
'gen': { fg: "#080", bg: "#efe" },
'int': { fg: "#088", bg: "#eff" },
'ops': { fg: "#800", bg: "#fee" },
'rai': { fg: "#808", bg: "#fef" },
'rtg': { fg: "#880", bg: "#ffe" },
'sec': { fg: "#488", bg: "#dff" },
'tsv': { fg: "#484", bg: "#dfd" },
'irtf': { fg: "#448", bg: "#ddf" },
'break': { fg: "#000", bg: "#fff" },
}
var day = [
'Saturday',
'Sunday',
'Monday',
'Tuesday',
'Wednesday',
'Thursday',
'Friday'
];
var padding = 2;
var border = 1;
//===========================================================================
function compute_swimlanes(items) {
var start_map = items.map(function (el, i) {
return { day: parseInt(el.day, 10), start_time: el.start_time, index: i };
});
start_map.sort(function (a, b) {
if (a.day != b.day) { return (a.day - b.day); }
return (a.start_time - b.start_time);
});
var end_map = items.map(function (el, i) {
return { day: parseInt(el.day, 10), end_time: el.end_time, index: i };
});
end_map.sort(function (a, b) {
if (a.day != b.day) { return (a.day - b.day); }
return (a.end_time - b.end_time);
});
var si = 0; // start index
var ei = 0; // end index
var overlap = 0;
var max_lanes = 0;
var next_lane = [];
var start_overlap = si;
while (si < items.length) {
var start_day_change = false;
while (!start_day_change &&
si < items.length &&
start_map[si].start_time < end_map[ei].end_time) {
overlap++;
// Set item.lane - the lane in which it is located (cf. item.lanes)
if (next_lane.length > 0) {
items[start_map[si].index].lane = next_lane.shift();
} else {
items[start_map[si].index].lane = max_lanes;
max_lanes++;
}
start_day_change = (si + 1 == items.length ||
start_map[si].day != start_map[si + 1].day);
si++;
}
var end_day_change = false;
while (ei < items.length &&
!end_day_change &&
(start_day_change ||
si == items.length ||
start_map[si].start_time >= end_map[ei].end_time)) {
next_lane.push(items[end_map[ei].index].lane);
overlap--;
end_day_change = (ei + 1 == items.length ||
end_map[ei].day != end_map[ei + 1].day);
ei++;
}
if (overlap == 0) {
// set item.lanes - the number of lanes it covers when expanded (cf. item.lane)
for (var i = start_overlap; i < si; i++) {
items[start_map[i].index].lanes = max_lanes;
}
max_lanes = 0;
next_lane = [];
start_overlap = si;
}
}
}
//===========================================================================
function is_visible(filter_params) {
// Returns a method to filter objects for visibility
// Accepts show and hide filters. No longer accepts
// '@<state>' to show sessions in a particular state (e.g., @bof).
return function (item) {
var filter_keywords = item.filter_keywords.split(',');
return (!agenda_filter.keyword_match(filter_keywords, filter_params.hide) &&
agenda_filter.keyword_match(filter_keywords, filter_params.show));
}
}
//===========================================================================
window.draw_calendar = function (items, filter_params) {
var width = document.body.clientWidth;
var height = document.body.clientHeight;
var visible_items = items;
if (agenda_filter.filtering_is_enabled(filter_params)) {
visible_items = visible_items.filter(is_visible(filter_params));
}
var start_day;
var day_start;
if (visible_items.length > 0) {
start_day = visible_items[0].day;
day_start = visible_items[0].start_time;
} else {
// fallback in case all items were filtered
start_day = items[0].day;
day_start = items[0].start_time;
}
var end_day = start_day;
var day_end = 0;
compute_swimlanes(visible_items);
/* Find our boundaries */
visible_items.forEach(function (item) {
day_start = Math.min(day_start, item.start_time);
day_end = Math.max(day_end, item.end_time);
start_day = Math.min(start_day, item.day)
end_day = Math.max(start_day, item.day)
});
var header_height = height * 0.05;
var num_days = end_day - start_day + 1;
var num_minutes = day_end - day_start;
var day_width = width / num_days;
var minute_height = (height - header_height) / num_minutes;
while (document.body.firstChild) {
document.body.removeChild(document.body.firstChild);
}
var j = start_day;
for (var i = 0; i < num_days; i++) {
//-----------------------------------------------------------------
// Draw weekday name
//-----------------------------------------------------------------
var e = document.createElement("div");
e.style.border = "solid";
e.style.borderWidth = border;
e.style.background = "#2647a0";
e.style.color = "#fff";
e.style.borderColor = "#000 #fff";
e.style.borderColor = "#2647a0 #2647a0 #000 #2647a0";
e.style.display = "block";
e.style.overflow = "hidden";
e.style.position = "absolute";
e.style.top = 0;
e.style.left = i * day_width;
e.style.width = day_width - 2 * (padding + border);
e.style.height = header_height;
e.style.margin = 0;
e.style.padding = padding;
e.style.fontFamily = "sans-serif";
e.style.fontSize = header_height * 0.6;
e.style.textAlign = "center";
e.classList.add('agenda-weekview-day'); // for cypress tests
var div = document.createElement("div");
div.appendChild(document.createTextNode(day[((j + 1) % 7 + 7) % 7])); // js % is remainder, not modulus
j++;
e.appendChild(div);
document.body.appendChild(e);
//-----------------------------------------------------------------
// Draw weekday column border
//-----------------------------------------------------------------
e = document.createElement("div");
e.style.border = "solid";
e.style.borderWidth = border;
e.style.background = "#fff";
e.style.color = "#000";
e.style.borderColor = "#fff #000";
e.style.display = "block";
e.style.overflow = "hidden";
e.style.position = "absolute";
e.style.top = header_height;
e.style.left = i * day_width;
e.style.width = day_width - 2 * (padding + border);
e.style.height = height -
2 * (padding + border) - header_height;
e.style.margin = 0;
e.style.padding = padding;
e.classList.add('agenda-weekview-column'); // for cypress tests
document.body.appendChild(e);
}
//-----------------------------------------------------------------
// Draw a block for each meeting
//-----------------------------------------------------------------
visible_items.forEach(function (item) {
var sess_width = day_width / item.lanes;
var sess_height = ((item.end_time - item.start_time) * minute_height) -
2 * (padding + border);
var day_left = ((item.day - start_day) * day_width);
var sess_left = day_left + sess_width * item.lane;
var sess_top = ((item.start_time - day_start) * minute_height) + header_height;
sess_width = sess_width - 2 * (padding + border);
var e = document.createElement("div");
e.style.border = "solid";
e.style.borderWidth = border;
if (item.area && color[item.area]) {
e.style.background = color[item.area].bg;
e.style.color = color[item.area].fg;
e.style.borderColor = color[item.area].fg;
} else {
if (item.area) {
console.log("No color for " + item.area + ": using default");
}
e.style.background = "#e0e0e0";
e.style.color = "#000000";
e.style.borderColor = "#000000";
}
e.style.display = "block";
e.style.overflow = "hidden";
e.style.position = "absolute";
e.style.top = sess_top;
e.style.left = sess_left;
e.style.width = sess_width;
e.style.height = sess_height;
e.style.margin = 0;
e.style.padding = padding;
e.style.fontFamily = "sans-serif";
e.style.fontSize = "8pt";
e.item = item;
// for cypress tests
e.classList.add('agenda-weekview-meeting');
if (day_width !== sess_width) {
e.classList.add('agenda-weekview-meeting-mini');
}
e.onmouseenter = function () {
resize(e, sess_top, day_left,
day_width - 2 * (padding + border),
sess_height, true)
};
e.onmouseleave = function () { resize(e, sess_top, sess_left, sess_width, sess_height, false) };
if (item.agenda) {
e.onclick = function () { maximize(e) };
e.style.cursor = "pointer";
}
var div = document.createElement("div");
div.appendChild(document.createTextNode(item.time));
div.appendChild(document.createElement("br"));
var label = item.name;
if (label.length === 0) {
label = "Free Slot";
}
if (item.group && color[item.area]) {
label = label + " (" + item.group + ")";
}
var bold = document.createElement("span");
bold.appendChild(document.createTextNode(label));
bold.style.fontWeight = "bold";
div.appendChild(bold);
if (item.room) {
div.appendChild(document.createElement("br"));
var italics = document.createElement("span");
italics.appendChild(document.createTextNode(item.room));
italics.style.fontStyle = "oblique";
div.appendChild(italics);
}
e.appendChild(div);
document.body.appendChild(e);
});
// Div to indicate rendering has occurred, for testing purposes.
var elt = document.createElement('div');
elt.id = 'wv-end';
document.body.appendChild(elt);
}
//===========================================================================
// Note: if "to_fit" is true and the text won't fit in the dimensions
// provided, then the height parameter is ignored, and the item is resized to
// be tall enough to contain the entire contents
var animation_counter = 0;
function resize(div, top, left, width, height, to_fit) {
var from_top = (div.style.top.replace("px", ""));
var from_left = (div.style.left.replace("px", ""));
var from_width = (div.style.width.replace("px", ""));
var from_height = (div.style.height.replace("px", ""));
// If we're fitting the height to the content, and there is overflow,
// calculate the new (larger) height
if (to_fit) {
div.style.removeProperty("height");
div.style.width = width;
var clientHeight = div.clientHeight;
div.style.height = from_height;
div.style.width = from_width;
if (clientHeight > height) {
height = clientHeight;
}
}
var animationId = "animation-" + (animation_counter++);
// Move the element to the front
div.style.zIndex = animation_counter;
var style = document.createElement('style');
style.textContent = "@keyframes " + animationId + " {" +
" from {" +
" top: " + from_top + ";" +
" left: " + from_left + ";" +
" width: " + from_width + ";" +
" height: " + from_height + ";" +
" }" +
" to {" +
" top: " + top + ";" +
" left: " + left + ";" +
" width: " + width + ";" +
" height: " + height + ";" +
" }" +
"}";
document.head.appendChild(style);
var callback = function () {
div.removeEventListener('animationend', callback);
document.head.removeChild(style);
div.style.top = top;
div.style.left = left;
div.style.width = width;
div.style.height = height;
if (div.callback) {
div.callback();
div.callback = undefined;
}
};
div.addEventListener('animationend', callback, false);
div.style.animationName = animationId;
div.style.animationDuration = "0.25s";
div.style.animationIterationCount = "1";
div.style.animationFillMode = "forwards";
}
//===========================================================================
function finish_maximize(e) {
if (!e.item.agenda) {
console.log("Element has no agenda: " + JSON.stringify(e.item));
return;
}
e.insertBefore(document.createElement("br"), e.firstChild);
var i = document.createElement("i");
i.classList.add('bi', 'bi-x-lg');
i.style.cssFloat = "right";
i.onclick = function () { minimize(e); };
i.style.cursor = "pointer";
e.insertBefore(i, e.firstChild);
var h = document.createElement("span");
h.appendChild(document.createTextNode(e.item.dayname));
h.style.fontWeight = "bold";
e.insertBefore(h, e.firstChild);
e.style.fontSize = "10pt";
var tmp = e.style.height;
e.style.removeProperty("height");
var used_height = e.clientHeight;
e.style.height = tmp;
var frame = document.createElement("iframe");
frame.setAttribute("src", e.item.agenda);
frame.style.position = "absolute";
frame.style.left = 8;
frame.style.width = e.clientWidth - 16 - 2 * (padding + border);
frame.style.top = used_height + 8;
frame.style.height = e.clientHeight - used_height - 16 - 2 * (padding + border);
frame.style.background = "#fff";
frame.style.overflow = "auto";
frame.id = "agenda";
frame.style.border = e.style.border;
frame.style.borderWidth = border;
frame.style.padding = padding;
frame.style.borderColor = e.style.borderColor;
e.appendChild(frame);
e.keyHandler = function (event) {
console.log(event.code);
if (event.code === "Escape") {
minimize(e);
}
};
document.addEventListener('keydown', e.keyHandler, false);
}
//===========================================================================
function finish_minimize(e) {
e.onmouseenter = e.oldmouseenter;
e.onmouseleave = e.oldmouseleave;
e.oldmouseenter = undefined;
e.oldmouseleave = undefined;
e.style.cursor = "pointer";
}
//===========================================================================
function maximize(e) {
if (e.onmouseenter) {
e.oldmouseenter = e.onmouseenter;
e.oldmouseleave = e.onmouseleave;
e.onmouseenter = undefined;
e.onmouseleave = undefined;
e.style.cursor = "auto";
e.callback = function () { finish_maximize(e); }
resize(e, 0, 0,
document.body.clientWidth - 2 * (padding + border),
document.body.clientHeight - 2 * (padding + border), false);
}
}
//===========================================================================
function minimize(e) {
var agenda = document.getElementById("agenda");
if (agenda) {
e.removeChild(agenda);
}
document.removeEventListener('keydown', e.keyHandler, false);
e.callback = function () { finish_minimize(e); };
e.oldmouseleave();
e.removeChild(e.firstChild);
e.removeChild(e.firstChild);
e.removeChild(e.firstChild);
e.style.fontSize = "8pt";
}
//===========================================================================
//
function get_first_item(items, type) {
var earliest;
for (var ii = 0; ii < items.length; ii++) {
var this_item = items[ii];
if (type && (this_item.type !== type)) {
continue;
}
// Update earliest if we don't have an earliest item yet or this_item is earlier
if (!earliest || (items[ii].utc_time < earliest.utc_time)) {
earliest = items[ii];
}
}
return earliest;
}
//===========================================================================
//
window.prepare_items = function (items, timezone_name) {
/**
* @param item item to render
* @param day day of meeting
* @param start_time starting time in minutes since start-of-day
* @param duration duration in minutes
* @param formatted_time time label for rendered event
* @param dayname day name label for rendered event
* @returns {{area, end_time: *, type, agenda, room, start_time, dayname, name, time, filter_keywords: ([string]|*), day, key, group}}
*/
function make_display_item(item, day, start_time, duration, formatted_time, dayname) {
return {
name: item.name,
group: item.group,
area: item.area,
room: item.room,
agenda: item.agenda,
key: item.key,
type: item.type,
filter_keywords: item.filter_keywords,
day: day,
start_time: start_time,
end_time: start_time + duration,
time: formatted_time,
dayname: dayname
}
}
/* Ported from Django view, which had the following comment:
* Only show assignments from the traditional meeting "week" (Sat-Fri).
* We'll determine this using the saturday before the first scheduled regular session. */
var first_session = get_first_item(items, 'Regular');
if (!first_session) {
first_session = get_first_item(items); // any type
}
var first_session_time = moment(first_session.utc_time)
.utc();
if (timezone_name) {
first_session_time.tz(timezone_name); // mutates the moment
}
// Moment.js day() uses 0 == Sunday, 6 == Saturday
days_since_saturday = first_session_time.day() - 6;
if (days_since_saturday < 0) {
days_since_saturday += 7;
}
saturday_before = first_session_time.clone()
.startOf('day')
.subtract(days_since_saturday, 'days');
var display_items = [];
for (var ii = 0; ii < items.length; ii++) {
var this_item = items[ii];
/* It's possible an event overlaps the moment of a daylight savings shift.
* Calculate the end_moment in utc() time, which has no DST. Once we switch
* to a time zone, end time minus start time may not equal duration. */
var start_moment = moment(this_item.utc_time)
.utc();
var end_moment = start_moment.clone()
.add(this_item.duration, 'seconds');
if (timezone_name) {
start_moment.tz(timezone_name);
end_moment.tz(timezone_name);
}
// Avoid off-by-one day number calculations if a session ends at midnight
var just_before_end_moment = end_moment.clone()
.subtract(1, 'millisecond');
var start_day = start_moment.diff(saturday_before, 'days') - 1; // shift so sunday = 0
var end_day = just_before_end_moment.diff(saturday_before, 'days') - 1; // shift so sunday = 0
/* Generate display item or items
*
* Around DST switchover, days may be 23 or 25 hours long instead of 24 hours, and events
* may end at a clock time that is before they started. To prevent problems, do not do
* direct math between start_moment and end_moment.
*/
const formatted_time = start_moment.format('HHmm') + '-' + end_moment.format('HHmm');
const dayname = start_moment.format('dddd, ')
.toUpperCase() +
start_moment.format('MMMM D, Y');
if (start_day === end_day) {
// one day - add a single display item
const start_of_day = start_moment.clone().startOf('day');
display_items.push(make_display_item(
this_item,
start_day,
start_moment.diff(start_of_day, 'minutes'),
this_item.duration / 60,
formatted_time,
dayname
));
} else {
// split across days - add multiple items
for (var day = start_day; day <= end_day; day++) {
let start_time;
let duration;
if (day === start_day) {
// First day of session - start at correct start time position
const start_of_day = start_moment.clone().startOf('day');
const end_of_day = start_moment.clone().endOf('day');
start_time = start_moment.diff(start_of_day, 'minutes');
duration = end_of_day.diff(start_moment, 'minutes');
} else {
// Not the first day of session
const start_of_day = just_before_end_moment.clone().startOf('day');
start_time = 0;
if (day === end_day) {
// Last day of session - end at correct end time position
duration = just_before_end_moment.diff(start_of_day, 'minutes');
} else {
// Not the last day of the session - end at the end of the day
const end_of_day = just_before_end_moment.clone().endOf('day');
duration = end_of_day.clone().diff(start_of_day, 'minutes');
}
}
const display_item = make_display_item(this_item, day, start_time, duration, formatted_time, dayname);
if (day !== start_day) {
display_item.name += " - continued";
}
display_items.push(display_item);
}
}
}
return display_items;
}

View file

@ -6,7 +6,7 @@ PRODID:-//IETF//datatracker.ietf.org ical agenda//EN
UID:ietf-{{schedule.meeting.number}}-{{item.timeslot.pk}}-{{item.session.group.acronym}}
SUMMARY:{% if item.session.name %}{{item.session.name|ics_esc}}{% else %}{{item.session.group_at_the_time.acronym|lower}} - {{item.session.group_at_the_time.name}}{%endif%}{% if item.session.agenda_note %} ({{item.session.agenda_note}}){% endif %}
{% if item.timeslot.show_location %}LOCATION:{{item.timeslot.get_location}}
STATUS:{{item.session.ical_status}}
{% endif %}STATUS:{{item.session.ical_status}}
CLASS:PUBLIC
DTSTART{% ics_date_time item.timeslot.local_start_time schedule.meeting.time_zone %}
DTEND{% ics_date_time item.timeslot.local_end_time schedule.meeting.time_zone %}
@ -29,4 +29,4 @@ DESCRIPTION:{{item.timeslot.name|ics_esc}}\n{% if item.session.agenda_note %}
\n{# link agenda for ietf meetings #}
See in schedule: {% absurl 'agenda' num=schedule.meeting.number %}#row-{{ item.slug }}\n{% endif %}
END:VEVENT
{% endif %}{% endfor %}END:VCALENDAR{% endcache %}{% endtimezone %}{% endautoescape %}
{% endfor %}END:VCALENDAR{% endcache %}{% endtimezone %}{% endautoescape %}

View file

@ -516,7 +516,7 @@
</a>
{% endif %}
{% if show_send_full_url %}
<div class="alert alert-danger my-3">
<div class="alert alert-info my-3">
<p>
You are not allowed to modify or cancel this submission. You can
only modify or cancel this submission from the same URL you were
@ -535,7 +535,7 @@
<form class="mt-3" method="post">
{% csrf_token %}
<input type="hidden" name="action" value="sendfullurl">
<button class="btn btn-danger" type="submit">
<button class="btn btn-primary" type="submit">
Request full access URL
</button>
</form>

View file

@ -176,6 +176,7 @@ def vnu_filter_message(msg, filter_db_issues, filter_test_issues):
"True if the vnu message is a known false positive"
if re.search(
r"""^Document\ uses\ the\ Unicode\ Private\ Use\ Area|
^Trailing\ slash\ on\ void\ elements\ has\ no\ effect|
^Element\ 'h.'\ not\ allowed\ as\ child\ of\ element\ 'pre'""",
msg["message"],
flags=re.VERBOSE,

View file

@ -118,7 +118,7 @@ def assert_ical_response_is_valid(test_inst, response, expected_event_summaries=
expected_event_uids=None, expected_event_count=None):
"""Validate an HTTP response containing iCal data
Based on RFC2445, but not exhaustive by any means. Assumes a single iCalendar object. Checks that
Based on RFC5545, but not exhaustive by any means. Assumes a single iCalendar object. Checks that
expected_event_summaries/_uids are found, but other events are allowed to be present. Specify the
expected_event_count if you want to reject additional events. If any of these are None,
the check for that property is skipped.
@ -132,18 +132,43 @@ def assert_ical_response_is_valid(test_inst, response, expected_event_summaries=
test_inst.assertContains(response, 'VERSION', count=1)
# Validate event objects
event_count = 0
uids_found = set()
summaries_found = set()
got_begin = False
cur_event_props = set()
for line_num, line in enumerate(response.content.decode().split("\n")):
line = line.rstrip()
if line == 'BEGIN:VEVENT':
test_inst.assertFalse(got_begin, f"Nested BEGIN:VEVENT found on line {line_num + 1}")
got_begin = True
elif line == 'END:VEVENT':
test_inst.assertTrue(got_begin, f"Unexpected END:VEVENT on line {line_num + 1}")
test_inst.assertIn("uid", cur_event_props, f"Found END:VEVENT without UID on line {line_num + 1}")
got_begin = False
cur_event_props.clear()
event_count += 1
elif got_begin:
# properties in an event
if line.startswith("UID:"):
# mandatory, not more than once
test_inst.assertNotIn("uid", cur_event_props, f"Two UID properties in single event on line {line_num + 1}")
cur_event_props.add("uid")
uids_found.add(line.split(":", 1)[1])
elif line.startswith("SUMMARY:"):
# optional, not more than once
test_inst.assertNotIn("summary", cur_event_props, f"Two SUMMARY properties in single event on line {line_num + 1}")
cur_event_props.add("summary")
summaries_found.add(line.split(":", 1)[1])
if expected_event_summaries is not None:
for summary in expected_event_summaries:
test_inst.assertContains(response, 'SUMMARY:' + summary)
test_inst.assertCountEqual(summaries_found, set(expected_event_summaries))
if expected_event_uids is not None:
for uid in expected_event_uids:
test_inst.assertContains(response, 'UID:' + uid)
test_inst.assertCountEqual(uids_found, set(expected_event_uids))
if expected_event_count is not None:
test_inst.assertContains(response, 'BEGIN:VEVENT', count=expected_event_count)
test_inst.assertContains(response, 'END:VEVENT', count=expected_event_count)
test_inst.assertContains(response, 'UID', count=expected_event_count)
test_inst.assertEqual(event_count, expected_event_count)
# make sure no doubled colons after timestamp properties
test_inst.assertNotContains(response, 'DTSTART::')

View file

@ -7,34 +7,33 @@
"legacy:build": "parcel build"
},
"dependencies": {
"@fullcalendar/bootstrap5": "6.1.4",
"@fullcalendar/core": "6.1.4",
"@fullcalendar/daygrid": "6.1.4",
"@fullcalendar/icalendar": "6.1.4",
"@fullcalendar/interaction": "6.1.4",
"@fullcalendar/list": "6.1.4",
"@fullcalendar/luxon2": "6.1.4",
"@fullcalendar/timegrid": "6.1.4",
"@fullcalendar/vue3": "6.1.4",
"@popperjs/core": "2.11.6",
"@fullcalendar/bootstrap5": "6.1.5",
"@fullcalendar/core": "6.1.5",
"@fullcalendar/daygrid": "6.1.5",
"@fullcalendar/icalendar": "6.1.5",
"@fullcalendar/interaction": "6.1.5",
"@fullcalendar/list": "6.1.5",
"@fullcalendar/luxon2": "6.1.5",
"@fullcalendar/timegrid": "6.1.5",
"@fullcalendar/vue3": "6.1.5",
"@popperjs/core": "2.11.7",
"@twuni/emojify": "1.0.2",
"bootstrap": "5.2.3",
"bootstrap-icons": "1.10.3",
"browser-fs-access": "0.33.0",
"caniuse-lite": "1.0.30001451",
"d3": "7.8.2",
"caniuse-lite": "1.0.30001469",
"d3": "7.8.3",
"file-saver": "2.0.5",
"highcharts": "10.3.3",
"ical.js": "1.5.0",
"jquery": "3.6.3",
"jquery-ui-dist": "1.13.2",
"jquery": "3.6.4",
"js-cookie": "3.0.1",
"list.js": "2.3.1",
"lodash": "4.17.21",
"lodash-es": "4.17.21",
"luxon": "3.3.0",
"moment": "2.29.4",
"moment-timezone": "0.5.41",
"moment-timezone": "0.5.42",
"ms": "2.1.3",
"murmurhash-js": "1.0.0",
"naive-ui": "2.34.3",
@ -57,24 +56,24 @@
"@parcel/transformer-inline-string": "2.8.3",
"@parcel/transformer-sass": "2.8.3",
"@rollup/pluginutils": "5.0.2",
"@vitejs/plugin-vue": "4.0.0",
"@vitejs/plugin-vue": "4.1.0",
"browserlist": "latest",
"c8": "7.13.0",
"eslint": "8.35.0",
"eslint": "8.36.0",
"eslint-config-standard": "17.0.0",
"eslint-plugin-cypress": "2.12.1",
"eslint-plugin-import": "2.27.5",
"eslint-plugin-n": "15.6.1",
"eslint-plugin-node": "11.1.0",
"eslint-plugin-promise": "6.1.1",
"eslint-plugin-vue": "9.9.0",
"html-validate": "7.13.2",
"eslint-plugin-vue": "9.10.0",
"html-validate": "7.13.3",
"jquery-migrate": "3.4.1",
"parcel": "2.8.3",
"pug": "3.0.2",
"sass": "1.58.3",
"sass": "1.60.0",
"seedrandom": "3.0.5",
"vite": "4.1.4"
"vite": "4.2.1"
},
"targets": {
"ietf": {
@ -85,11 +84,9 @@
"ietf/static/css/document_html_referenced.scss",
"ietf/static/css/document_html_txt.scss",
"ietf/static/css/ietf.scss",
"ietf/static/css/jquery-ui.scss",
"ietf/static/css/liaisons.css",
"ietf/static/css/list.scss",
"ietf/static/css/select2.scss",
"ietf/static/images/arrow-ani.webp",
"ietf/static/images/iab-logo-card.png",
"ietf/static/images/iab-logo.svg",
"ietf/static/images/iesg-draft-state-diagram.png",
@ -112,8 +109,6 @@
"ietf/static/images/irtf-logo.svg",
"ietf/static/js/agenda_filter.js",
"ietf/static/js/agenda_materials.js",
"ietf/static/js/agenda_personalize.js",
"ietf/static/js/agenda_timezone.js",
"ietf/static/js/complete-review.js",
"ietf/static/js/create_timeslot.js",
"ietf/static/js/create_timeslot.js",
@ -135,7 +130,6 @@
"ietf/static/js/ietf.js",
"ietf/static/js/ipr-edit.js",
"ietf/static/js/ipr-search.js",
"ietf/static/js/jquery-ui.js",
"ietf/static/js/js-cookie.js",
"ietf/static/js/liaisons.js",
"ietf/static/js/list.js",
@ -144,7 +138,6 @@
"ietf/static/js/meeting-interim-request.js",
"ietf/static/js/moment.js",
"ietf/static/js/password_strength.js",
"ietf/static/js/room_params.js",
"ietf/static/js/select2.js",
"ietf/static/js/session_details_form.js",
"ietf/static/js/sortable.js",
@ -155,7 +148,6 @@
"ietf/static/js/upcoming.js",
"ietf/static/js/upload-material.js",
"ietf/static/js/upload_bofreq.js",
"ietf/static/js/week-view.js",
"ietf/static/js/zxcvbn.js"
]
},

File diff suppressed because it is too large Load diff

View file

@ -8,19 +8,19 @@
},
"devDependencies": {
"@playwright/test": "1.31.2",
"eslint": "8.28.0",
"eslint": "8.35.0",
"eslint-config-standard": "17.0.0",
"eslint-plugin-import": "2.26.0",
"eslint-plugin-import": "2.27.5",
"eslint-plugin-n": "15.6.1",
"eslint-plugin-node": "11.1.0",
"eslint-plugin-promise": "6.1.1",
"npm-check-updates": "16.4.1"
"npm-check-updates": "16.7.10"
},
"dependencies": {
"@faker-js/faker": "7.6.0",
"lodash": "4.17.21",
"lodash-es": "4.17.21",
"luxon": "3.2.1",
"luxon": "3.3.0",
"ms": "2.1.3",
"seedrandom": "3.0.5",
"slugify": "1.6.5"

494
yarn.lock
View file

@ -83,161 +83,179 @@ __metadata:
languageName: node
linkType: hard
"@esbuild/android-arm64@npm:0.16.17":
version: 0.16.17
resolution: "@esbuild/android-arm64@npm:0.16.17"
"@esbuild/android-arm64@npm:0.17.13":
version: 0.17.13
resolution: "@esbuild/android-arm64@npm:0.17.13"
conditions: os=android & cpu=arm64
languageName: node
linkType: hard
"@esbuild/android-arm@npm:0.16.17":
version: 0.16.17
resolution: "@esbuild/android-arm@npm:0.16.17"
"@esbuild/android-arm@npm:0.17.13":
version: 0.17.13
resolution: "@esbuild/android-arm@npm:0.17.13"
conditions: os=android & cpu=arm
languageName: node
linkType: hard
"@esbuild/android-x64@npm:0.16.17":
version: 0.16.17
resolution: "@esbuild/android-x64@npm:0.16.17"
"@esbuild/android-x64@npm:0.17.13":
version: 0.17.13
resolution: "@esbuild/android-x64@npm:0.17.13"
conditions: os=android & cpu=x64
languageName: node
linkType: hard
"@esbuild/darwin-arm64@npm:0.16.17":
version: 0.16.17
resolution: "@esbuild/darwin-arm64@npm:0.16.17"
"@esbuild/darwin-arm64@npm:0.17.13":
version: 0.17.13
resolution: "@esbuild/darwin-arm64@npm:0.17.13"
conditions: os=darwin & cpu=arm64
languageName: node
linkType: hard
"@esbuild/darwin-x64@npm:0.16.17":
version: 0.16.17
resolution: "@esbuild/darwin-x64@npm:0.16.17"
"@esbuild/darwin-x64@npm:0.17.13":
version: 0.17.13
resolution: "@esbuild/darwin-x64@npm:0.17.13"
conditions: os=darwin & cpu=x64
languageName: node
linkType: hard
"@esbuild/freebsd-arm64@npm:0.16.17":
version: 0.16.17
resolution: "@esbuild/freebsd-arm64@npm:0.16.17"
"@esbuild/freebsd-arm64@npm:0.17.13":
version: 0.17.13
resolution: "@esbuild/freebsd-arm64@npm:0.17.13"
conditions: os=freebsd & cpu=arm64
languageName: node
linkType: hard
"@esbuild/freebsd-x64@npm:0.16.17":
version: 0.16.17
resolution: "@esbuild/freebsd-x64@npm:0.16.17"
"@esbuild/freebsd-x64@npm:0.17.13":
version: 0.17.13
resolution: "@esbuild/freebsd-x64@npm:0.17.13"
conditions: os=freebsd & cpu=x64
languageName: node
linkType: hard
"@esbuild/linux-arm64@npm:0.16.17":
version: 0.16.17
resolution: "@esbuild/linux-arm64@npm:0.16.17"
"@esbuild/linux-arm64@npm:0.17.13":
version: 0.17.13
resolution: "@esbuild/linux-arm64@npm:0.17.13"
conditions: os=linux & cpu=arm64
languageName: node
linkType: hard
"@esbuild/linux-arm@npm:0.16.17":
version: 0.16.17
resolution: "@esbuild/linux-arm@npm:0.16.17"
"@esbuild/linux-arm@npm:0.17.13":
version: 0.17.13
resolution: "@esbuild/linux-arm@npm:0.17.13"
conditions: os=linux & cpu=arm
languageName: node
linkType: hard
"@esbuild/linux-ia32@npm:0.16.17":
version: 0.16.17
resolution: "@esbuild/linux-ia32@npm:0.16.17"
"@esbuild/linux-ia32@npm:0.17.13":
version: 0.17.13
resolution: "@esbuild/linux-ia32@npm:0.17.13"
conditions: os=linux & cpu=ia32
languageName: node
linkType: hard
"@esbuild/linux-loong64@npm:0.16.17":
version: 0.16.17
resolution: "@esbuild/linux-loong64@npm:0.16.17"
"@esbuild/linux-loong64@npm:0.17.13":
version: 0.17.13
resolution: "@esbuild/linux-loong64@npm:0.17.13"
conditions: os=linux & cpu=loong64
languageName: node
linkType: hard
"@esbuild/linux-mips64el@npm:0.16.17":
version: 0.16.17
resolution: "@esbuild/linux-mips64el@npm:0.16.17"
"@esbuild/linux-mips64el@npm:0.17.13":
version: 0.17.13
resolution: "@esbuild/linux-mips64el@npm:0.17.13"
conditions: os=linux & cpu=mips64el
languageName: node
linkType: hard
"@esbuild/linux-ppc64@npm:0.16.17":
version: 0.16.17
resolution: "@esbuild/linux-ppc64@npm:0.16.17"
"@esbuild/linux-ppc64@npm:0.17.13":
version: 0.17.13
resolution: "@esbuild/linux-ppc64@npm:0.17.13"
conditions: os=linux & cpu=ppc64
languageName: node
linkType: hard
"@esbuild/linux-riscv64@npm:0.16.17":
version: 0.16.17
resolution: "@esbuild/linux-riscv64@npm:0.16.17"
"@esbuild/linux-riscv64@npm:0.17.13":
version: 0.17.13
resolution: "@esbuild/linux-riscv64@npm:0.17.13"
conditions: os=linux & cpu=riscv64
languageName: node
linkType: hard
"@esbuild/linux-s390x@npm:0.16.17":
version: 0.16.17
resolution: "@esbuild/linux-s390x@npm:0.16.17"
"@esbuild/linux-s390x@npm:0.17.13":
version: 0.17.13
resolution: "@esbuild/linux-s390x@npm:0.17.13"
conditions: os=linux & cpu=s390x
languageName: node
linkType: hard
"@esbuild/linux-x64@npm:0.16.17":
version: 0.16.17
resolution: "@esbuild/linux-x64@npm:0.16.17"
"@esbuild/linux-x64@npm:0.17.13":
version: 0.17.13
resolution: "@esbuild/linux-x64@npm:0.17.13"
conditions: os=linux & cpu=x64
languageName: node
linkType: hard
"@esbuild/netbsd-x64@npm:0.16.17":
version: 0.16.17
resolution: "@esbuild/netbsd-x64@npm:0.16.17"
"@esbuild/netbsd-x64@npm:0.17.13":
version: 0.17.13
resolution: "@esbuild/netbsd-x64@npm:0.17.13"
conditions: os=netbsd & cpu=x64
languageName: node
linkType: hard
"@esbuild/openbsd-x64@npm:0.16.17":
version: 0.16.17
resolution: "@esbuild/openbsd-x64@npm:0.16.17"
"@esbuild/openbsd-x64@npm:0.17.13":
version: 0.17.13
resolution: "@esbuild/openbsd-x64@npm:0.17.13"
conditions: os=openbsd & cpu=x64
languageName: node
linkType: hard
"@esbuild/sunos-x64@npm:0.16.17":
version: 0.16.17
resolution: "@esbuild/sunos-x64@npm:0.16.17"
"@esbuild/sunos-x64@npm:0.17.13":
version: 0.17.13
resolution: "@esbuild/sunos-x64@npm:0.17.13"
conditions: os=sunos & cpu=x64
languageName: node
linkType: hard
"@esbuild/win32-arm64@npm:0.16.17":
version: 0.16.17
resolution: "@esbuild/win32-arm64@npm:0.16.17"
"@esbuild/win32-arm64@npm:0.17.13":
version: 0.17.13
resolution: "@esbuild/win32-arm64@npm:0.17.13"
conditions: os=win32 & cpu=arm64
languageName: node
linkType: hard
"@esbuild/win32-ia32@npm:0.16.17":
version: 0.16.17
resolution: "@esbuild/win32-ia32@npm:0.16.17"
"@esbuild/win32-ia32@npm:0.17.13":
version: 0.17.13
resolution: "@esbuild/win32-ia32@npm:0.17.13"
conditions: os=win32 & cpu=ia32
languageName: node
linkType: hard
"@esbuild/win32-x64@npm:0.16.17":
version: 0.16.17
resolution: "@esbuild/win32-x64@npm:0.16.17"
"@esbuild/win32-x64@npm:0.17.13":
version: 0.17.13
resolution: "@esbuild/win32-x64@npm:0.17.13"
conditions: os=win32 & cpu=x64
languageName: node
linkType: hard
"@eslint/eslintrc@npm:^2.0.0":
"@eslint-community/eslint-utils@npm:^4.2.0, @eslint-community/eslint-utils@npm:^4.3.0":
version: 4.4.0
resolution: "@eslint-community/eslint-utils@npm:4.4.0"
dependencies:
eslint-visitor-keys: ^3.3.0
peerDependencies:
eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
checksum: cdfe3ae42b4f572cbfb46d20edafe6f36fc5fb52bf2d90875c58aefe226892b9677fef60820e2832caf864a326fe4fc225714c46e8389ccca04d5f9288aabd22
languageName: node
linkType: hard
"@eslint-community/regexpp@npm:^4.4.0":
version: 4.4.1
resolution: "@eslint-community/regexpp@npm:4.4.1"
checksum: db97d8d08e784147b55ab0dda5892503c1a0eebad94d1c4646d89a94f02ca70b25f05d8e021fc05a075e7eb312e03e21f63d84f0b327719f8cf3bb64e66917cb
languageName: node
linkType: hard
"@eslint/eslintrc@npm:^2.0.1":
version: 2.0.1
resolution: "@eslint/eslintrc@npm:2.0.1"
dependencies:
@ -254,10 +272,10 @@ __metadata:
languageName: node
linkType: hard
"@eslint/js@npm:8.35.0":
version: 8.35.0
resolution: "@eslint/js@npm:8.35.0"
checksum: 6687ceff659a6d617e37823f809dc9c4b096535961a81acead27d26b1a51a4cf608a5e59d831ddd57f24f6f8bb99340a4a0e19f9c99b390fbb4b275f51ed5f5e
"@eslint/js@npm:8.36.0":
version: 8.36.0
resolution: "@eslint/js@npm:8.36.0"
checksum: b7d6b84b823c8c7784be390741196617565527b1f7c0977fde9455bfb57fd88f81c074a03dd878757d2c33fa29f24291e9ecbc1425710f067917324b55e1bf3a
languageName: node
linkType: hard
@ -284,89 +302,89 @@ __metadata:
languageName: node
linkType: hard
"@fullcalendar/bootstrap5@npm:6.1.4":
version: 6.1.4
resolution: "@fullcalendar/bootstrap5@npm:6.1.4"
"@fullcalendar/bootstrap5@npm:6.1.5":
version: 6.1.5
resolution: "@fullcalendar/bootstrap5@npm:6.1.5"
peerDependencies:
"@fullcalendar/core": ~6.1.4
checksum: e4a5dd281d95d0cd24ee8ecb6b0454b1a081c5236cb9ac8d2b0ddac777160d0bd31a7f489368c7d0c33a1ac026cec9e8d62cc4e7f1980a11d84165a271860371
"@fullcalendar/core": ~6.1.5
checksum: c2f886582344e268bdb342ef6ae2152a9ffe42f4ba48ab1eaa54414413cf52dbe3fb2c423efb44ca491318a53bb17bc476602b9a21672b07dd3bec48eec9345d
languageName: node
linkType: hard
"@fullcalendar/core@npm:6.1.4":
version: 6.1.4
resolution: "@fullcalendar/core@npm:6.1.4"
"@fullcalendar/core@npm:6.1.5":
version: 6.1.5
resolution: "@fullcalendar/core@npm:6.1.5"
dependencies:
preact: ^10.0.5
checksum: 3c659bbaf814a1f084ddd3e2eeaf68bb48f268a36560abb399c4aa29a40d6017c5bb1cd87c43664f333a1f6682c32b6a85ffb661538ea0faa78a1c119760a381
preact: ~10.12.1
checksum: 6892c11c40899fc986edc3d36b8e764c8e78f1c53df2c6e23d418d0191fc0bd1562bd0d9cfc74fd986d02ac1e18c8a4a9d34a40b8329964cc9fb9f8ab8367635
languageName: node
linkType: hard
"@fullcalendar/daygrid@npm:6.1.4, @fullcalendar/daygrid@npm:~6.1.4":
version: 6.1.4
resolution: "@fullcalendar/daygrid@npm:6.1.4"
"@fullcalendar/daygrid@npm:6.1.5, @fullcalendar/daygrid@npm:~6.1.5":
version: 6.1.5
resolution: "@fullcalendar/daygrid@npm:6.1.5"
peerDependencies:
"@fullcalendar/core": ~6.1.4
checksum: 24b3c6e521c5e5288cb05d34e080daace1138b4b421a5dd059938a8c9b7730374b7f07908984b124d48e810276a3c24f1e1c7b6080d375ca80e4d7ef387d7774
"@fullcalendar/core": ~6.1.5
checksum: f62aa7364d0c51bb8121da988ba5784dc0ce775e15d87bfa7b4f52f0f0d12fd338aa634de93b43332167c105b6848dba47d184f23d12572235ebd16101f2b109
languageName: node
linkType: hard
"@fullcalendar/icalendar@npm:6.1.4":
version: 6.1.4
resolution: "@fullcalendar/icalendar@npm:6.1.4"
"@fullcalendar/icalendar@npm:6.1.5":
version: 6.1.5
resolution: "@fullcalendar/icalendar@npm:6.1.5"
peerDependencies:
"@fullcalendar/core": ~6.1.4
"@fullcalendar/core": ~6.1.5
ical.js: ^1.4.0
checksum: 4ec2ed9092bf963dd889ffb01dd5ec6c956810e3b791a16a3d5c4bd0b303850757ad03b000c79d026ed8f7a9dbc53b673743c4eec0b8901bc4030a56d718f94c
checksum: c7d53f932860dceac8d69ef9280c2f9990de976ff060871f13b40c3ff69b951104dfa283cecb233bb03bffd71766c4b31687f76904e9d18ff5fa28b36d04ae3b
languageName: node
linkType: hard
"@fullcalendar/interaction@npm:6.1.4":
version: 6.1.4
resolution: "@fullcalendar/interaction@npm:6.1.4"
"@fullcalendar/interaction@npm:6.1.5":
version: 6.1.5
resolution: "@fullcalendar/interaction@npm:6.1.5"
peerDependencies:
"@fullcalendar/core": ~6.1.4
checksum: 5e282ba36bfbc306e8e36ea88b9df0c5a11b7bcdf4c8952377396da24a3ca058b436a39e9002eba9fc1ca8ce70ca23ef2fd74ef08f48d4b8b45576f7e30a6bea
"@fullcalendar/core": ~6.1.5
checksum: dd3d7fb8ba33b13b79ee0788f81fd6831f90d3663e04467fd4b72f1c82af6d6e7d1a91ea8ea8c2c203c39d7f6a388d1bbfd501f79f7198629da03c9c9385588d
languageName: node
linkType: hard
"@fullcalendar/list@npm:6.1.4":
version: 6.1.4
resolution: "@fullcalendar/list@npm:6.1.4"
"@fullcalendar/list@npm:6.1.5":
version: 6.1.5
resolution: "@fullcalendar/list@npm:6.1.5"
peerDependencies:
"@fullcalendar/core": ~6.1.4
checksum: 0338a8bb1546e103921d1d6a5baf54b9d43759d9aaf905357c2272e01cbd42e120812128b2f2661d0ef82abc0b8447b16e6f1618968487ffa4c6f0a570f907d5
"@fullcalendar/core": ~6.1.5
checksum: 4879294b57445a47a15c0316b3fa79265afaf02155b4fd250429a9af9fcb90eadf0842b105fa2a984efe2f044b205dbd48dffe7237d5ec9341c549fea251ad08
languageName: node
linkType: hard
"@fullcalendar/luxon2@npm:6.1.4":
version: 6.1.4
resolution: "@fullcalendar/luxon2@npm:6.1.4"
"@fullcalendar/luxon2@npm:6.1.5":
version: 6.1.5
resolution: "@fullcalendar/luxon2@npm:6.1.5"
peerDependencies:
"@fullcalendar/core": ~6.1.4
"@fullcalendar/core": ~6.1.5
luxon: ^2.0.0
checksum: 577283ad7cd555c25143f64c865554aebaa957b0bc51bcece7114bb7282abb448a8450b23863fb6287c6e91f7f89cc261beb51c8e0542c5b0df6c853fe3bd9c3
checksum: 6253f7d06695a73745c719b44d4048ec2aca1dc0dbf24c57ad7721cf540cff1672e9ccc9e595bb2ec822c5f54b066a259fb5280feb778dce779288417c668085
languageName: node
linkType: hard
"@fullcalendar/timegrid@npm:6.1.4":
version: 6.1.4
resolution: "@fullcalendar/timegrid@npm:6.1.4"
"@fullcalendar/timegrid@npm:6.1.5":
version: 6.1.5
resolution: "@fullcalendar/timegrid@npm:6.1.5"
dependencies:
"@fullcalendar/daygrid": ~6.1.4
"@fullcalendar/daygrid": ~6.1.5
peerDependencies:
"@fullcalendar/core": ~6.1.4
checksum: 1329b941f94e2c17a866e612e7d92adacbca0364ba7e76908caa2a936f526c0cde43fa050f571634dd2db2e779f1cbd3115b64cbc0b524d34f0c4d61243659b8
"@fullcalendar/core": ~6.1.5
checksum: 236aabb57a3a8e8f41c43bf3a76b074731fee8a4e815b3c32a3532a7503678d488bbc1b2c74c270580ef37fb2d9ed9edf0b4646943812a5c238cd1cd7104e5f8
languageName: node
linkType: hard
"@fullcalendar/vue3@npm:6.1.4":
version: 6.1.4
resolution: "@fullcalendar/vue3@npm:6.1.4"
"@fullcalendar/vue3@npm:6.1.5":
version: 6.1.5
resolution: "@fullcalendar/vue3@npm:6.1.5"
peerDependencies:
"@fullcalendar/core": ~6.1.4
"@fullcalendar/core": ~6.1.5
vue: ^3.0.11
checksum: 3e11102fbf09e2e62d52c03f7fc42435c816faeefd57c1e551271af6bfdeb52be7380b6d9b199e652a742626c17a21227092b83039f30a48f76d9d26ffae9beb
checksum: bf426f3668ec813174b33c7151555299ee40176f53a481e72f5352002da257a9182c6b1c6cc0083f5e10f76601ccbe25af814fe0ae741516149e078dccc7efd1
languageName: node
linkType: hard
@ -1588,10 +1606,10 @@ __metadata:
languageName: node
linkType: hard
"@popperjs/core@npm:2.11.6":
version: 2.11.6
resolution: "@popperjs/core@npm:2.11.6"
checksum: 47fb328cec1924559d759b48235c78574f2d71a8a6c4c03edb6de5d7074078371633b91e39bbf3f901b32aa8af9b9d8f82834856d2f5737a23475036b16817f0
"@popperjs/core@npm:2.11.7":
version: 2.11.7
resolution: "@popperjs/core@npm:2.11.7"
checksum: 5b6553747899683452a1d28898c1b39173a4efd780e74360bfcda8eb42f1c5e819602769c81a10920fc68c881d07fb40429604517d499567eac079cfa6470f19
languageName: node
linkType: hard
@ -1721,13 +1739,13 @@ __metadata:
languageName: node
linkType: hard
"@vitejs/plugin-vue@npm:4.0.0":
version: 4.0.0
resolution: "@vitejs/plugin-vue@npm:4.0.0"
"@vitejs/plugin-vue@npm:4.1.0":
version: 4.1.0
resolution: "@vitejs/plugin-vue@npm:4.1.0"
peerDependencies:
vite: ^4.0.0
vue: ^3.2.25
checksum: 5a53414912db644ca7a663d87c8d4838841dbf794772105c9b3bc3fb10214fc86c2f1f1a47350f264370e9a5fd2475f3b6882778b2440b5085d3fe7550ced542
checksum: 532192a3da39f3fd6ba9d4fa9de74533cf6e222785c26bcb75bde9f826c5c4a22ad6f0bb09fae83e3393f9d8d24b6982d547683b1967972a4350e8e76aecf3cb
languageName: node
linkType: hard
@ -2314,10 +2332,10 @@ browserlist@latest:
languageName: node
linkType: hard
"caniuse-lite@npm:1.0.30001451":
version: 1.0.30001451
resolution: "caniuse-lite@npm:1.0.30001451"
checksum: 48a06a7881093bb4d8a08ed5428f24a1cbdaa544b0a6f0c3614287d4f34b6c853e79a0f608a5bd901c27995f5e951825606fba11e7930251cc422bd61de9d849
"caniuse-lite@npm:1.0.30001469":
version: 1.0.30001469
resolution: "caniuse-lite@npm:1.0.30001469"
checksum: 8e496509d7e9ff189c72205675b5db0c5f1b6a09917027441e835efae0848a468a8c4e7d2b409ffc202438fcd23ae53e017f976a03c22c04d12d3c0e1e33e5de
languageName: node
linkType: hard
@ -2890,9 +2908,9 @@ browserlist@latest:
languageName: node
linkType: hard
"d3@npm:7.8.2":
version: 7.8.2
resolution: "d3@npm:7.8.2"
"d3@npm:7.8.3":
version: 7.8.3
resolution: "d3@npm:7.8.3"
dependencies:
d3-array: 3
d3-axis: 3
@ -2924,7 +2942,7 @@ browserlist@latest:
d3-timer: 3
d3-transition: 3
d3-zoom: 3
checksum: e7bf5918f2a97d0c0cc489d64348b323446aa824c32b65f0888846c26f80ed05dbee18a4b7c9a487b3e60d9d404e4672d169573fe63439e3e53abd5812bcd766
checksum: d3291a8f487a96a57bef54af40728da82dedd52e6abd033f93835f1ca5fdc8daad8c6e9e10b324d8e67680205da9ae32ee5bb679cc97ef79527c57dea3b78dd8
languageName: node
linkType: hard
@ -3274,32 +3292,32 @@ browserlist@latest:
languageName: node
linkType: hard
"esbuild@npm:^0.16.14":
version: 0.16.17
resolution: "esbuild@npm:0.16.17"
"esbuild@npm:^0.17.5":
version: 0.17.13
resolution: "esbuild@npm:0.17.13"
dependencies:
"@esbuild/android-arm": 0.16.17
"@esbuild/android-arm64": 0.16.17
"@esbuild/android-x64": 0.16.17
"@esbuild/darwin-arm64": 0.16.17
"@esbuild/darwin-x64": 0.16.17
"@esbuild/freebsd-arm64": 0.16.17
"@esbuild/freebsd-x64": 0.16.17
"@esbuild/linux-arm": 0.16.17
"@esbuild/linux-arm64": 0.16.17
"@esbuild/linux-ia32": 0.16.17
"@esbuild/linux-loong64": 0.16.17
"@esbuild/linux-mips64el": 0.16.17
"@esbuild/linux-ppc64": 0.16.17
"@esbuild/linux-riscv64": 0.16.17
"@esbuild/linux-s390x": 0.16.17
"@esbuild/linux-x64": 0.16.17
"@esbuild/netbsd-x64": 0.16.17
"@esbuild/openbsd-x64": 0.16.17
"@esbuild/sunos-x64": 0.16.17
"@esbuild/win32-arm64": 0.16.17
"@esbuild/win32-ia32": 0.16.17
"@esbuild/win32-x64": 0.16.17
"@esbuild/android-arm": 0.17.13
"@esbuild/android-arm64": 0.17.13
"@esbuild/android-x64": 0.17.13
"@esbuild/darwin-arm64": 0.17.13
"@esbuild/darwin-x64": 0.17.13
"@esbuild/freebsd-arm64": 0.17.13
"@esbuild/freebsd-x64": 0.17.13
"@esbuild/linux-arm": 0.17.13
"@esbuild/linux-arm64": 0.17.13
"@esbuild/linux-ia32": 0.17.13
"@esbuild/linux-loong64": 0.17.13
"@esbuild/linux-mips64el": 0.17.13
"@esbuild/linux-ppc64": 0.17.13
"@esbuild/linux-riscv64": 0.17.13
"@esbuild/linux-s390x": 0.17.13
"@esbuild/linux-x64": 0.17.13
"@esbuild/netbsd-x64": 0.17.13
"@esbuild/openbsd-x64": 0.17.13
"@esbuild/sunos-x64": 0.17.13
"@esbuild/win32-arm64": 0.17.13
"@esbuild/win32-ia32": 0.17.13
"@esbuild/win32-x64": 0.17.13
dependenciesMeta:
"@esbuild/android-arm":
optional: true
@ -3347,7 +3365,7 @@ browserlist@latest:
optional: true
bin:
esbuild: bin/esbuild
checksum: 4c2cc609ecfb426554bc3f75beb92d89eb2d0c515cfceebaa36c7599d7dcaab7056b70f6d6b51e72b45951ddf9021ee28e356cf205f8e42cc055d522312ea30c
checksum: c3be8d41a36504fbfee7ad1206df5cf3464dc9a057a417b66dbf1cdf9a180d299df8eee5d2ffa428ad0303f5f4e3ea238bd50087876daa28f709722035165c8c
languageName: node
linkType: hard
@ -3535,11 +3553,11 @@ browserlist@latest:
languageName: node
linkType: hard
"eslint-plugin-vue@npm:9.9.0":
version: 9.9.0
resolution: "eslint-plugin-vue@npm:9.9.0"
"eslint-plugin-vue@npm:9.10.0":
version: 9.10.0
resolution: "eslint-plugin-vue@npm:9.10.0"
dependencies:
eslint-utils: ^3.0.0
"@eslint-community/eslint-utils": ^4.3.0
natural-compare: ^1.4.0
nth-check: ^2.0.1
postcss-selector-parser: ^6.0.9
@ -3548,7 +3566,7 @@ browserlist@latest:
xml-name-validator: ^4.0.0
peerDependencies:
eslint: ^6.2.0 || ^7.0.0 || ^8.0.0
checksum: 059f9c1915504d074adf64bc3371d1e174f8844088d0e08800c958cbef09d7fdf2a0a949634187231645435a1ef31595c8c81f441000ec43589bb58a1282fe3c
checksum: 91c6f1ab59433cfa3ade0e6003ca4a9f3ee50e1fd6b49ad9487805dc582f1865ef27796ff18b89e92f37f9ed39d7bfb8c8ccd029c2b77bb3e26ce9b705713070
languageName: node
linkType: hard
@ -3603,12 +3621,14 @@ browserlist@latest:
languageName: node
linkType: hard
"eslint@npm:8.35.0":
version: 8.35.0
resolution: "eslint@npm:8.35.0"
"eslint@npm:8.36.0":
version: 8.36.0
resolution: "eslint@npm:8.36.0"
dependencies:
"@eslint/eslintrc": ^2.0.0
"@eslint/js": 8.35.0
"@eslint-community/eslint-utils": ^4.2.0
"@eslint-community/regexpp": ^4.4.0
"@eslint/eslintrc": ^2.0.1
"@eslint/js": 8.36.0
"@humanwhocodes/config-array": ^0.11.8
"@humanwhocodes/module-importer": ^1.0.1
"@nodelib/fs.walk": ^1.2.8
@ -3619,9 +3639,8 @@ browserlist@latest:
doctrine: ^3.0.0
escape-string-regexp: ^4.0.0
eslint-scope: ^7.1.1
eslint-utils: ^3.0.0
eslint-visitor-keys: ^3.3.0
espree: ^9.4.0
espree: ^9.5.0
esquery: ^1.4.2
esutils: ^2.0.2
fast-deep-equal: ^3.1.3
@ -3643,13 +3662,12 @@ browserlist@latest:
minimatch: ^3.1.2
natural-compare: ^1.4.0
optionator: ^0.9.1
regexpp: ^3.2.0
strip-ansi: ^6.0.1
strip-json-comments: ^3.1.0
text-table: ^0.2.0
bin:
eslint: bin/eslint.js
checksum: 6212173691d90b1bc94dd3d640e1f210374b30c3905fc0a15e501cf71c6ca52aa3d80ea7a9a245adaaed26d6019169e01fb6881b3f2885b188d37069c749308c
checksum: e9a961fc3b3de5cff5a1cb2c92eeffaa7e155a715489e30b3e1e76f186bd1255e0481e09564f2094733c0b1dbd3453499fb72ae7c043c83156e11e6d965b2304
languageName: node
linkType: hard
@ -3664,17 +3682,6 @@ browserlist@latest:
languageName: node
linkType: hard
"espree@npm:^9.4.0":
version: 9.4.0
resolution: "espree@npm:9.4.0"
dependencies:
acorn: ^8.8.0
acorn-jsx: ^5.3.2
eslint-visitor-keys: ^3.3.0
checksum: 2e3020dde67892d2ba3632413b44d0dc31d92c29ce72267d7ec24216a562f0a6494d3696e2fa39a3ec8c0e0088d773947ab2925fbb716801a11eb8dd313ac89c
languageName: node
linkType: hard
"espree@npm:^9.5.0":
version: 9.5.0
resolution: "espree@npm:9.5.0"
@ -4178,9 +4185,9 @@ browserlist@latest:
languageName: node
linkType: hard
"html-validate@npm:7.13.2":
version: 7.13.2
resolution: "html-validate@npm:7.13.2"
"html-validate@npm:7.13.3":
version: 7.13.3
resolution: "html-validate@npm:7.13.3"
dependencies:
"@babel/code-frame": ^7.10.0
"@html-validate/stylish": ^3.0.0
@ -4208,7 +4215,7 @@ browserlist@latest:
optional: true
bin:
html-validate: bin/html-validate.js
checksum: 891e03479e8c66b45734d49b9bd2a60a5b9c774a35972b545a3996df264f47b15f112b17a02e3660ecddb21f2161963fcf1000d149dcd9c97c30c15ff58d5e53
checksum: d58b7eff726e5351b5f9ed54674b741f94f29b210e8f854e299eab8f2cd6a25d008c19aa57838403beb19e64ca771747ad8e53d4e460bb9d72c6265db26c1fa1
languageName: node
linkType: hard
@ -4735,26 +4742,10 @@ browserlist@latest:
languageName: node
linkType: hard
"jquery-ui-dist@npm:1.13.2":
version: 1.13.2
resolution: "jquery-ui-dist@npm:1.13.2"
dependencies:
jquery: ">=1.8.0 <4.0.0"
checksum: 4f3a3a2ff8ff659aaa48cfce11dc06bbd396676c175dd8429a0aaa327fc055855ab2159624d9493cb236b28a9c669b26d1de8215415ddcf068191add4740729d
languageName: node
linkType: hard
"jquery@npm:3.6.3":
version: 3.6.3
resolution: "jquery@npm:3.6.3"
checksum: 0fd366bdcaa0c84a7a8751ce20f8192290141913978b5059574426d9b01f4365daa675f95aab3eec94fd794d27b08d32078a2236bef404b8ba78073009988ce6
languageName: node
linkType: hard
"jquery@npm:>=1.8.0 <4.0.0":
version: 3.6.0
resolution: "jquery@npm:3.6.0"
checksum: 8fd5fef4aa48fd374ec716dd1c1df1af407814a228e15c1260ca140de3a697c2a77c30c54ff1d238b6a3ab4ddc445ddeef9adce6c6d28e4869d85eb9d3951c0e
"jquery@npm:3.6.4":
version: 3.6.4
resolution: "jquery@npm:3.6.4"
checksum: 8354f7bd0a0424aa714ee1b6b1ef74b410f834eb5c8501682289b358bc151f11677f11188b544f3bb49309d6ec4d15d1a5de175661250c206b06185a252f706f
languageName: node
linkType: hard
@ -5242,12 +5233,12 @@ browserlist@latest:
languageName: node
linkType: hard
"moment-timezone@npm:0.5.41":
version: 0.5.41
resolution: "moment-timezone@npm:0.5.41"
"moment-timezone@npm:0.5.42":
version: 0.5.42
resolution: "moment-timezone@npm:0.5.42"
dependencies:
moment: ^2.29.4
checksum: 30bf42265f749d4d17e78cf94f49d8354d9fbf2dea060a5b89895979642035734512a23cb7a90c0e93593bc11eb698b78b601b7dd5d9a708eb7c4f733a927a71
checksum: d4d5d68d4b98e4309e8692ddb6b790ab6b375414ea4e45ef3144bfbc689ab14e3089c4561aea43471fd58595328f43fc554231c9d8fc753b460ca0a29a105693
languageName: node
linkType: hard
@ -5833,10 +5824,10 @@ browserlist@latest:
languageName: node
linkType: hard
"preact@npm:^10.0.5":
version: 10.7.2
resolution: "preact@npm:10.7.2"
checksum: 2f0655e0430f1c6927b40cb4abffb2c0ee4fe63e3201d44e37d0992c0ab534346f206cf23c0405572b70908e3eba2f7f60ab8e4531f409ebcbc35af06920cd60
"preact@npm:~10.12.1":
version: 10.12.1
resolution: "preact@npm:10.12.1"
checksum: 0de99f477563ab7f94a0f964952ad216375973c0dcd9eb49881f8eb5effc5ed6948da062548c87d5bb0d82f1a1e516b649020e760eab3a0503dfdd8e64d34a26
languageName: node
linkType: hard
@ -6101,7 +6092,7 @@ browserlist@latest:
languageName: node
linkType: hard
"regexpp@npm:^3.0.0, regexpp@npm:^3.2.0":
"regexpp@npm:^3.0.0":
version: 3.2.0
resolution: "regexpp@npm:3.2.0"
checksum: a78dc5c7158ad9ddcfe01aa9144f46e192ddbfa7b263895a70a5c6c73edd9ce85faf7c0430e59ac38839e1734e275b9c3de5c57ee3ab6edc0e0b1bdebefccef8
@ -6213,9 +6204,9 @@ browserlist@latest:
languageName: node
linkType: hard
"rollup@npm:^3.10.0":
version: 3.19.1
resolution: "rollup@npm:3.19.1"
"rollup@npm:^3.18.0":
version: 3.20.2
resolution: "rollup@npm:3.20.2"
dependencies:
fsevents: ~2.3.2
dependenciesMeta:
@ -6223,7 +6214,7 @@ browserlist@latest:
optional: true
bin:
rollup: dist/bin/rollup
checksum: f78198c6de224b26650c70b16db156762d1fcceeb375d34fb2c76fc5b23a78f712c3c881d3248e6f277a511589e20d50c247bcf5c7920f1ddc0a43cadf9f0140
checksum: 34b0932839b7c2a5d1742fb21ce95a47e0b49a0849f4abee2dccf25833187aa7babb898ca90d4fc761cffa4102b9ed0ac6ad7f6f6b96c8b8e2d67305abc5da65
languageName: node
linkType: hard
@ -6232,51 +6223,50 @@ browserlist@latest:
resolution: "root-workspace-0b6124@workspace:."
dependencies:
"@faker-js/faker": 7.6.0
"@fullcalendar/bootstrap5": 6.1.4
"@fullcalendar/core": 6.1.4
"@fullcalendar/daygrid": 6.1.4
"@fullcalendar/icalendar": 6.1.4
"@fullcalendar/interaction": 6.1.4
"@fullcalendar/list": 6.1.4
"@fullcalendar/luxon2": 6.1.4
"@fullcalendar/timegrid": 6.1.4
"@fullcalendar/vue3": 6.1.4
"@fullcalendar/bootstrap5": 6.1.5
"@fullcalendar/core": 6.1.5
"@fullcalendar/daygrid": 6.1.5
"@fullcalendar/icalendar": 6.1.5
"@fullcalendar/interaction": 6.1.5
"@fullcalendar/list": 6.1.5
"@fullcalendar/luxon2": 6.1.5
"@fullcalendar/timegrid": 6.1.5
"@fullcalendar/vue3": 6.1.5
"@parcel/optimizer-data-url": 2.8.3
"@parcel/transformer-inline-string": 2.8.3
"@parcel/transformer-sass": 2.8.3
"@popperjs/core": 2.11.6
"@popperjs/core": 2.11.7
"@rollup/pluginutils": 5.0.2
"@twuni/emojify": 1.0.2
"@vitejs/plugin-vue": 4.0.0
"@vitejs/plugin-vue": 4.1.0
bootstrap: 5.2.3
bootstrap-icons: 1.10.3
browser-fs-access: 0.33.0
browserlist: latest
c8: 7.13.0
caniuse-lite: 1.0.30001451
d3: 7.8.2
eslint: 8.35.0
caniuse-lite: 1.0.30001469
d3: 7.8.3
eslint: 8.36.0
eslint-config-standard: 17.0.0
eslint-plugin-cypress: 2.12.1
eslint-plugin-import: 2.27.5
eslint-plugin-n: 15.6.1
eslint-plugin-node: 11.1.0
eslint-plugin-promise: 6.1.1
eslint-plugin-vue: 9.9.0
eslint-plugin-vue: 9.10.0
file-saver: 2.0.5
highcharts: 10.3.3
html-validate: 7.13.2
html-validate: 7.13.3
ical.js: 1.5.0
jquery: 3.6.3
jquery: 3.6.4
jquery-migrate: 3.4.1
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.3.0
moment: 2.29.4
moment-timezone: 0.5.41
moment-timezone: 0.5.42
ms: 2.1.3
murmurhash-js: 1.0.0
naive-ui: 2.34.3
@ -6284,7 +6274,7 @@ browserlist@latest:
pinia: 2.0.33
pinia-plugin-persist: 1.0.0
pug: 3.0.2
sass: 1.58.3
sass: 1.60.0
seedrandom: 3.0.5
select2: 4.1.0-rc.0
select2-bootstrap-5-theme: 1.3.0
@ -6293,7 +6283,7 @@ browserlist@latest:
slugify: 1.6.5
sortablejs: 1.15.0
vanillajs-datepicker: 1.3.1
vite: 4.1.4
vite: 4.2.1
vue: 3.2.47
vue-router: 4.1.6
zxcvbn: 4.4.2
@ -6348,16 +6338,16 @@ browserlist@latest:
languageName: node
linkType: hard
"sass@npm:1.58.3":
version: 1.58.3
resolution: "sass@npm:1.58.3"
"sass@npm:1.60.0":
version: 1.60.0
resolution: "sass@npm:1.60.0"
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: 35a2b98c037ef80fdc93c9b0be846e6ccc7d75596351a37ee79c397e66666d0a754c52c4696e746c0aff32327471e185343ca349e998a58340411adc9d0489a5
checksum: 06e163c37af466ec194cf2ed8dab616372afeb19322d356947d48ea664fc38398ae77c4d91bea9cb0ace954ce289d5518d0f8555ecc49f6bf2539a8ef52fc580
languageName: node
linkType: hard
@ -6988,15 +6978,15 @@ browserlist@latest:
languageName: node
linkType: hard
"vite@npm:4.1.4":
version: 4.1.4
resolution: "vite@npm:4.1.4"
"vite@npm:4.2.1":
version: 4.2.1
resolution: "vite@npm:4.2.1"
dependencies:
esbuild: ^0.16.14
esbuild: ^0.17.5
fsevents: ~2.3.2
postcss: ^8.4.21
resolve: ^1.22.1
rollup: ^3.10.0
rollup: ^3.18.0
peerDependencies:
"@types/node": ">= 14"
less: "*"
@ -7022,7 +7012,7 @@ browserlist@latest:
optional: true
bin:
vite: bin/vite.js
checksum: 50a9a1f2e29e0ee8fefdec60314d38fb9b746df0bb6ae5a8114014b5bfd95e0fc9b29c0d5e73939361ba53af7eb66c7d20c5656bbe53a783e96540bd3b907c47
checksum: 70eb162ffc299017a3c310e3adc95e9661def6b17aafd1f8e5e02e516766060435590dbe3df1e4e95acc3583c728a76e91f07c546221d1e701f1b2b021293f45
languageName: node
linkType: hard