Move room and calendar data to a specific folder (#52)
On met tout dans /data pour décorréler les sources du calendrier de la logique au maximum Co-authored-by: Tom Hubrecht <tom.hubrecht@ens.fr> Reviewed-on: https://git.rz.ens.wtf/Klub-RZ/metis/pulls/52 Co-authored-by: tomate <tom.hubrecht@ens.fr> Co-committed-by: tomate <tom.hubrecht@ens.fr>
This commit is contained in:
parent
26ccb5dcc9
commit
e420cdd0b4
5 changed files with 193 additions and 209 deletions
131
data/calendars.json
Normal file
131
data/calendars.json
Normal file
|
@ -0,0 +1,131 @@
|
||||||
|
{
|
||||||
|
"tree": {
|
||||||
|
"COF": {
|
||||||
|
"BdA": {},
|
||||||
|
"Évènements (COF)": {},
|
||||||
|
"Assemblées Générales (COF)": {}
|
||||||
|
},
|
||||||
|
"Clubs COF": {
|
||||||
|
"Club réseau": {},
|
||||||
|
"hackENS": {},
|
||||||
|
"Écriv'ENS": {},
|
||||||
|
"CinéClub": {},
|
||||||
|
"Ernestophone": {},
|
||||||
|
"DDR": {},
|
||||||
|
"BandarrêtdurgENS": {},
|
||||||
|
"Club Inutile ☔": {}
|
||||||
|
},
|
||||||
|
"BDS": {},
|
||||||
|
"La Nuit de l'ENS": {},
|
||||||
|
"Délégation Générale": {},
|
||||||
|
"K-Fêt": {},
|
||||||
|
"Rentrée académique": {
|
||||||
|
"Amphis de rentrée": {},
|
||||||
|
"Rentrée des départements": {},
|
||||||
|
"Conférences de recherche": {},
|
||||||
|
"Visites de bibliothèques": {},
|
||||||
|
"Réunions de rentrée des Masters": {},
|
||||||
|
"Activités pour les étudiants internationaux": {}
|
||||||
|
},
|
||||||
|
"Divers": {}
|
||||||
|
},
|
||||||
|
|
||||||
|
"sources": {
|
||||||
|
"eleves-ens": {
|
||||||
|
"LLWm8qK9iC5YGrrR": {
|
||||||
|
"name": "Délégation Générale",
|
||||||
|
"short_name": "DG"
|
||||||
|
},
|
||||||
|
"2KGkWzBJGorxzyTW": {
|
||||||
|
"name": "La Nuit de l'ENS",
|
||||||
|
"short_name": "La Nuit"
|
||||||
|
},
|
||||||
|
"w442JdS5AaQ6czrP": {
|
||||||
|
"name": "Écriv'ENS"
|
||||||
|
},
|
||||||
|
"fRtjDkjrZyn6fxd8": {
|
||||||
|
"name": "K-Fêt",
|
||||||
|
"color": "#c63b52",
|
||||||
|
"default_location": "K-Fêt"
|
||||||
|
},
|
||||||
|
"gsZtZK8c9EmREofn": {
|
||||||
|
"name": "Ernestophone"
|
||||||
|
},
|
||||||
|
"dTHrXnYgsEoSTjWB": {
|
||||||
|
"name": "Évènements (COF)",
|
||||||
|
"short_name": "COF"
|
||||||
|
},
|
||||||
|
"bCgRFByHLiCCNc55": {
|
||||||
|
"name": "Assemblées Générales (COF)",
|
||||||
|
"short_name": "AG COF"
|
||||||
|
},
|
||||||
|
"r4yJZDHjwNtH8wkR": {
|
||||||
|
"name": "BdA"
|
||||||
|
},
|
||||||
|
"ZtWm3MYSi388k2yk": {
|
||||||
|
"name": "DDR"
|
||||||
|
},
|
||||||
|
"T5WoHbs4FT5A945Z": {
|
||||||
|
"name": "CinéClub"
|
||||||
|
},
|
||||||
|
"6SHG6cg9d7S3qqwD": {
|
||||||
|
"name": "Club Inutile ☔",
|
||||||
|
"initial": false
|
||||||
|
},
|
||||||
|
"Ekjb4kDqMMqwJXZF": {
|
||||||
|
"name": "Rentrée des départements",
|
||||||
|
"short_name": "Dpt"
|
||||||
|
},
|
||||||
|
"8SKP62tQJP65K8EW": {
|
||||||
|
"name": "Conférences de recherche",
|
||||||
|
"short_name": "Conf"
|
||||||
|
},
|
||||||
|
"PnRXqeq4SsSC33FM": {
|
||||||
|
"name": "Visites de bibliothèques",
|
||||||
|
"short_name": "Bibli",
|
||||||
|
"initial": false
|
||||||
|
},
|
||||||
|
"NWPtiEiz62LTtjo2": {
|
||||||
|
"name": "Amphis de rentrée",
|
||||||
|
"short_name": "Prés. de rentrée"
|
||||||
|
},
|
||||||
|
"JiRt58aJXay9kfyk": {
|
||||||
|
"name": "Réunions de rentrée des Masters",
|
||||||
|
"short_name": "Masters"
|
||||||
|
},
|
||||||
|
"5Rb4bRjCDcsFjDdQ": {
|
||||||
|
"name": "Activités pour les étudiants internationaux",
|
||||||
|
"short_name": "Internationaux"
|
||||||
|
},
|
||||||
|
"62wKfQRrLNz2WXjt": {
|
||||||
|
"name": "Divers"
|
||||||
|
},
|
||||||
|
"TFjE83ASCMK9rfRi": {
|
||||||
|
"name": "BandarrêtdurgENS",
|
||||||
|
"short_name": "Banda"
|
||||||
|
},
|
||||||
|
"TyMrLaPPDzT7yAGC": {
|
||||||
|
"name": "BDS"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"klub-reseau": {
|
||||||
|
"5WrcagPPARQ3BD87": {
|
||||||
|
"name": "Club réseau",
|
||||||
|
"default_location": "Cave d'hackENS"
|
||||||
|
},
|
||||||
|
"TFEAKjAgNFQZpNjo": {
|
||||||
|
"name": "hackENS",
|
||||||
|
"default_location": "Cave d'hackENS"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"frama-agenda": {
|
||||||
|
"TFjE83ASCMK9rfRi": {
|
||||||
|
"name": "BandarrêtdurgENS",
|
||||||
|
"short_name": "Banda"
|
||||||
|
},
|
||||||
|
"T5WoHbs4FT5A945Z": {
|
||||||
|
"name": "CinéClub"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
44
data/locations.json
Normal file
44
data/locations.json
Normal file
|
@ -0,0 +1,44 @@
|
||||||
|
{
|
||||||
|
"nameMap": {
|
||||||
|
"Amphi Jourdan": "Amphithéâtre Jourdan",
|
||||||
|
"R2-21 (Jourdan)": "R2-21",
|
||||||
|
"Salle Jean Ibanes (Jourdan, R1-07)": "Salle Jean Ibanes (R1-07)",
|
||||||
|
"Salle Madeleine Rebérioux (Jourdan, R2-02)": "Salle Madeleine Rebérioux (R2-02)",
|
||||||
|
"Salle Marcel Roncayolo (Jourdan, R2-05)": "Salle Marcel Roncayolo (R2-05)"
|
||||||
|
},
|
||||||
|
|
||||||
|
"rooms": {
|
||||||
|
"45 rue d'Ulm": [
|
||||||
|
"Amphithéâtre Galois",
|
||||||
|
"Bibliothèque Lettres",
|
||||||
|
"Salle Histoire",
|
||||||
|
"Salle Cavaillès",
|
||||||
|
"Salle Dussane",
|
||||||
|
"Salle des Actes",
|
||||||
|
"Salle des Résistants",
|
||||||
|
"Salle Cavaillès",
|
||||||
|
"Salle Cartan",
|
||||||
|
"Salle Noether",
|
||||||
|
"Salle Bourbaki",
|
||||||
|
"Cour aux Ernests",
|
||||||
|
"Cour du NIR",
|
||||||
|
"Cour Pasteur",
|
||||||
|
"Pôt",
|
||||||
|
"Petit pôt",
|
||||||
|
"Canopée",
|
||||||
|
"K-Fêt",
|
||||||
|
"Cave d'hackENS",
|
||||||
|
"Gymnase"
|
||||||
|
],
|
||||||
|
"24 rue Lhomond": ["Salle CONF IV"],
|
||||||
|
"29 rue d'Ulm": ["Bibliothèque des sciences expérimentales", "Salle Jaurès"],
|
||||||
|
"Jourdan": [
|
||||||
|
"Bibliothèque de Jourdan",
|
||||||
|
"Salle Marcel Roncayolo (R2-05)",
|
||||||
|
"Salle Madeleine Rebérioux (R2-02)",
|
||||||
|
"Amphithéâtre Jourdan",
|
||||||
|
"R2-21",
|
||||||
|
"Salle Jean Ibanes"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
|
@ -22,7 +22,7 @@
|
||||||
import bootstrap5Plugin from '@fullcalendar/bootstrap5';
|
import bootstrap5Plugin from '@fullcalendar/bootstrap5';
|
||||||
import { Tooltip } from 'bootstrap';
|
import { Tooltip } from 'bootstrap';
|
||||||
|
|
||||||
import ENSLocations from './static-ens-locations.json';
|
import LOCATIONS from '../data/locations.json';
|
||||||
|
|
||||||
const event = writable(null);
|
const event = writable(null);
|
||||||
|
|
||||||
|
@ -95,7 +95,7 @@
|
||||||
scrollTime: '08:00:00',
|
scrollTime: '08:00:00',
|
||||||
resourceGroupField: 'building',
|
resourceGroupField: 'building',
|
||||||
resourceAreaWidth: '27%',
|
resourceAreaWidth: '27%',
|
||||||
resources: Object.entries(ENSLocations).flatMap(([building, rooms]) =>
|
resources: Object.entries(LOCATIONS.rooms).flatMap(([building, rooms]) =>
|
||||||
rooms.map(room => ({
|
rooms.map(room => ({
|
||||||
id: `${building}-${room}`,
|
id: `${building}-${room}`,
|
||||||
building,
|
building,
|
||||||
|
|
189
src/calendar.js
189
src/calendar.js
|
@ -1,4 +1,5 @@
|
||||||
import STATIC_LOCATIONS from './static-ens-locations.json'
|
import CALENDARS from '../data/calendars.json'
|
||||||
|
import LOCATIONS from '../data/locations.json'
|
||||||
|
|
||||||
// https://stackoverflow.com/a/35970186
|
// https://stackoverflow.com/a/35970186
|
||||||
function invertColor(hex) {
|
function invertColor(hex) {
|
||||||
|
@ -19,140 +20,19 @@ function invertColor(hex) {
|
||||||
return r * 0.299 + g * 0.587 + b * 0.114 > 186 ? '#000000' : '#FFFFFF'
|
return r * 0.299 + g * 0.587 + b * 0.114 > 186 ? '#000000' : '#FFFFFF'
|
||||||
}
|
}
|
||||||
|
|
||||||
const clouds = {
|
const parseCalendars = () => {
|
||||||
KLUB_RESEAU: 'klub-reseau',
|
let calendars = {};
|
||||||
ELEVES_ENS: 'eleves-ens',
|
|
||||||
FRAMA_AGENDA: 'frama-agenda'
|
for (const [cloud, cals] of Object.entries(CALENDARS.sources)) {
|
||||||
|
for (const [id, attrs] of Object.entries(cals)) {
|
||||||
|
calendars[id] = { cloud: cloud, ...attrs }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return calendars;
|
||||||
}
|
}
|
||||||
|
|
||||||
const calendars = {
|
const calendars = parseCalendars()
|
||||||
'5WrcagPPARQ3BD87': {
|
|
||||||
cloud: clouds.KLUB_RESEAU,
|
|
||||||
name: 'Club réseau',
|
|
||||||
color: null,
|
|
||||||
default_location: "Cave d'hackENS"
|
|
||||||
},
|
|
||||||
TFEAKjAgNFQZpNjo: {
|
|
||||||
cloud: clouds.KLUB_RESEAU,
|
|
||||||
name: 'hackENS',
|
|
||||||
color: null,
|
|
||||||
default_location: "Cave d'hackENS"
|
|
||||||
},
|
|
||||||
LLWm8qK9iC5YGrrR: {
|
|
||||||
cloud: clouds.ELEVES_ENS,
|
|
||||||
name: 'Délégation Générale',
|
|
||||||
short_name: 'DG',
|
|
||||||
color: null
|
|
||||||
},
|
|
||||||
'2KGkWzBJGorxzyTW': {
|
|
||||||
cloud: clouds.ELEVES_ENS,
|
|
||||||
name: "La Nuit de l'ENS",
|
|
||||||
short_name: 'La Nuit',
|
|
||||||
color: null
|
|
||||||
},
|
|
||||||
w442JdS5AaQ6czrP: {
|
|
||||||
cloud: clouds.ELEVES_ENS,
|
|
||||||
name: "Écriv'ENS",
|
|
||||||
color: null
|
|
||||||
},
|
|
||||||
fRtjDkjrZyn6fxd8: {
|
|
||||||
cloud: clouds.ELEVES_ENS,
|
|
||||||
name: 'K-Fêt',
|
|
||||||
color: '#c63b52',
|
|
||||||
default_location: 'K-Fêt'
|
|
||||||
},
|
|
||||||
gsZtZK8c9EmREofn: {
|
|
||||||
cloud: clouds.ELEVES_ENS,
|
|
||||||
name: 'Ernestophone',
|
|
||||||
color: null
|
|
||||||
},
|
|
||||||
dTHrXnYgsEoSTjWB: {
|
|
||||||
cloud: clouds.ELEVES_ENS,
|
|
||||||
name: 'Évènements (COF)',
|
|
||||||
short_name: 'COF',
|
|
||||||
color: null
|
|
||||||
},
|
|
||||||
bCgRFByHLiCCNc55: {
|
|
||||||
cloud: clouds.ELEVES_ENS,
|
|
||||||
name: 'Assemblées Générales (COF)',
|
|
||||||
short_name: 'AG COF',
|
|
||||||
color: null
|
|
||||||
},
|
|
||||||
r4yJZDHjwNtH8wkR: {
|
|
||||||
cloud: clouds.ELEVES_ENS,
|
|
||||||
name: 'BdA',
|
|
||||||
color: null
|
|
||||||
},
|
|
||||||
ZtWm3MYSi388k2yk : {
|
|
||||||
cloud: clouds.ELEVES_ENS,
|
|
||||||
name: 'DDR',
|
|
||||||
color: null
|
|
||||||
},
|
|
||||||
T5WoHbs4FT5A945Z: {
|
|
||||||
cloud: clouds.FRAMA_AGENDA,
|
|
||||||
name: 'CinéClub',
|
|
||||||
color: null
|
|
||||||
},
|
|
||||||
'6SHG6cg9d7S3qqwD': {
|
|
||||||
cloud: clouds.ELEVES_ENS,
|
|
||||||
name: 'Club Inutile ☔',
|
|
||||||
color: null,
|
|
||||||
initial: false
|
|
||||||
},
|
|
||||||
Ekjb4kDqMMqwJXZF: {
|
|
||||||
cloud: clouds.ELEVES_ENS,
|
|
||||||
name: 'Rentrée des départements',
|
|
||||||
short_name: 'Dpt',
|
|
||||||
color: null
|
|
||||||
},
|
|
||||||
'8SKP62tQJP65K8EW': {
|
|
||||||
cloud: clouds.ELEVES_ENS,
|
|
||||||
name: 'Conférences de recherche',
|
|
||||||
short_name: 'Conf',
|
|
||||||
color: null
|
|
||||||
},
|
|
||||||
PnRXqeq4SsSC33FM: {
|
|
||||||
cloud: clouds.ELEVES_ENS,
|
|
||||||
name: 'Visites de bibliothèques',
|
|
||||||
short_name: 'Bibli',
|
|
||||||
initial: false,
|
|
||||||
color: null
|
|
||||||
},
|
|
||||||
NWPtiEiz62LTtjo2: {
|
|
||||||
cloud: clouds.ELEVES_ENS,
|
|
||||||
name: 'Amphis de rentrée',
|
|
||||||
short_name: 'Prés. de rentrée',
|
|
||||||
color: null
|
|
||||||
},
|
|
||||||
JiRt58aJXay9kfyk: {
|
|
||||||
cloud: clouds.ELEVES_ENS,
|
|
||||||
name: 'Réunions de rentrée des Masters',
|
|
||||||
short_name: 'Masters',
|
|
||||||
color: null
|
|
||||||
},
|
|
||||||
'5Rb4bRjCDcsFjDdQ': {
|
|
||||||
cloud: clouds.ELEVES_ENS,
|
|
||||||
name: 'Activités pour les étudiants internationaux',
|
|
||||||
short_name: 'Internationaux',
|
|
||||||
color: null
|
|
||||||
},
|
|
||||||
'62wKfQRrLNz2WXjt': {
|
|
||||||
cloud: clouds.ELEVES_ENS,
|
|
||||||
name: 'Divers',
|
|
||||||
color: null
|
|
||||||
},
|
|
||||||
TFjE83ASCMK9rfRi: {
|
|
||||||
cloud: clouds.FRAMA_AGENDA,
|
|
||||||
name: 'BandarrêtdurgENS',
|
|
||||||
short_name: 'Banda',
|
|
||||||
color: null
|
|
||||||
},
|
|
||||||
TyMrLaPPDzT7yAGC: {
|
|
||||||
cloud: clouds.ELEVES_ENS,
|
|
||||||
name: 'BDS',
|
|
||||||
color: null
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const calendarsByName = Object.fromEntries(
|
const calendarsByName = Object.fromEntries(
|
||||||
Object.entries(calendars).map(([id, { name }]) => [name, id])
|
Object.entries(calendars).map(([id, { name }]) => [name, id])
|
||||||
|
@ -164,36 +44,7 @@ export const initialCalendars = Array.from(
|
||||||
.filter(cal => cal[1])
|
.filter(cal => cal[1])
|
||||||
.map(cal => cal[0])
|
.map(cal => cal[0])
|
||||||
|
|
||||||
export const calendarTree = {
|
export const calendarTree = CALENDARS.tree
|
||||||
COF: {
|
|
||||||
BdA: {},
|
|
||||||
'Évènements (COF)': {},
|
|
||||||
'Assemblées Générales (COF)': {}
|
|
||||||
},
|
|
||||||
'Clubs COF': {
|
|
||||||
'Club réseau': {},
|
|
||||||
hackENS: {},
|
|
||||||
"Écriv'ENS": {},
|
|
||||||
CinéClub: {},
|
|
||||||
Ernestophone: {},
|
|
||||||
DDR: {},
|
|
||||||
'BandarrêtdurgENS': {},
|
|
||||||
'Club Inutile ☔': {}
|
|
||||||
},
|
|
||||||
BDS: {},
|
|
||||||
"La Nuit de l'ENS": {},
|
|
||||||
'Délégation Générale': {},
|
|
||||||
'K-Fêt': {},
|
|
||||||
'Rentrée académique': {
|
|
||||||
'Amphis de rentrée': {},
|
|
||||||
'Rentrée des départements': {},
|
|
||||||
'Conférences de recherche': {},
|
|
||||||
'Visites de bibliothèques': {},
|
|
||||||
'Réunions de rentrée des Masters': {},
|
|
||||||
'Activités pour les étudiants internationaux': {}
|
|
||||||
},
|
|
||||||
Divers: {}
|
|
||||||
}
|
|
||||||
|
|
||||||
const dfs = (p, t, l) => {
|
const dfs = (p, t, l) => {
|
||||||
for (const [c, s] of Object.entries(t)) {
|
for (const [c, s] of Object.entries(t)) {
|
||||||
|
@ -266,17 +117,9 @@ class Calendar {
|
||||||
}
|
}
|
||||||
|
|
||||||
function findLocationId(location) {
|
function findLocationId(location) {
|
||||||
const adhocMap = {
|
const correctedLocation = LOCATIONS.nameMap[location] || location
|
||||||
'Amphi Jourdan': 'Amphithéâtre Jourdan',
|
|
||||||
'R2-21 (Jourdan)': 'R2-21',
|
|
||||||
'Salle Jean Ibanes (Jourdan, R1-07)': 'Salle Jean Ibanes (R1-07)',
|
|
||||||
'Salle Madeleine Rebérioux (Jourdan, R2-02)': 'Salle Madeleine Rebérioux (R2-02)',
|
|
||||||
'Salle Marcel Roncayolo (Jourdan, R2-05)': 'Salle Marcel Roncayolo (R2-05)'
|
|
||||||
}
|
|
||||||
|
|
||||||
const correctedLocation = adhocMap[location] || location
|
const result = Object.entries(LOCATIONS.rooms).find(([building, rooms]) =>
|
||||||
|
|
||||||
const result = Object.entries(STATIC_LOCATIONS).find(([building, rooms]) =>
|
|
||||||
rooms.includes(correctedLocation)
|
rooms.includes(correctedLocation)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -1,34 +0,0 @@
|
||||||
{
|
|
||||||
"45 rue d'Ulm": [
|
|
||||||
"Amphithéâtre Galois",
|
|
||||||
"Bibliothèque Lettres",
|
|
||||||
"Salle Histoire",
|
|
||||||
"Salle Cavaillès",
|
|
||||||
"Salle Dussane",
|
|
||||||
"Salle des Actes",
|
|
||||||
"Salle des Résistants",
|
|
||||||
"Salle Cavaillès",
|
|
||||||
"Salle Cartan",
|
|
||||||
"Salle Noether",
|
|
||||||
"Salle Bourbaki",
|
|
||||||
"Cour aux Ernests",
|
|
||||||
"Cour du NIR",
|
|
||||||
"Cour Pasteur",
|
|
||||||
"Pôt",
|
|
||||||
"Petit pôt",
|
|
||||||
"Canopée",
|
|
||||||
"K-Fêt",
|
|
||||||
"Cave d'hackENS",
|
|
||||||
"Gymnase"
|
|
||||||
],
|
|
||||||
"24 rue Lhomond": ["Salle CONF IV"],
|
|
||||||
"29 rue d'Ulm": ["Bibliothèque des sciences expérimentales", "Salle Jaurès"],
|
|
||||||
"Jourdan": [
|
|
||||||
"Bibliothèque de Jourdan",
|
|
||||||
"Salle Marcel Roncayolo (R2-05)",
|
|
||||||
"Salle Madeleine Rebérioux (R2-02)",
|
|
||||||
"Amphithéâtre Jourdan",
|
|
||||||
"R2-21",
|
|
||||||
"Salle Jean Ibanes"
|
|
||||||
]
|
|
||||||
}
|
|
Loading…
Reference in a new issue