forked from ScoDoc/ScoDoc
Compare commits
6 Commits
0a767ed475
...
313be66b5e
Author | SHA1 | Date | |
---|---|---|---|
|
313be66b5e | ||
|
0873ed8226 | ||
1e53aa21cb | |||
66859c53ba | |||
e943e7f283 | |||
be30cf66fa |
@ -1,13 +1,14 @@
|
|||||||
# -*- mode: python -*-
|
# -*- mode: python -*-
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
SCOVERSION = "7.25"
|
SCOVERSION = "7.25m"
|
||||||
|
|
||||||
SCONAME = "ScoDoc"
|
SCONAME = "ScoDoc"
|
||||||
|
|
||||||
SCONEWS = """
|
SCONEWS = """
|
||||||
<h4>Année 2021</h4>
|
<h4>Année 2021</h4>
|
||||||
<ul>
|
<ul>
|
||||||
|
<li>Version mobile (en test)</li>
|
||||||
<li>Évaluations de type "deuxième session"</li>
|
<li>Évaluations de type "deuxième session"</li>
|
||||||
<li>Gestion du genre neutre (pas d'affichage de la civilité)</li>
|
<li>Gestion du genre neutre (pas d'affichage de la civilité)</li>
|
||||||
<li>Diverses corrections (PV de jurys, ...)</li>
|
<li>Diverses corrections (PV de jurys, ...)</li>
|
||||||
|
@ -504,6 +504,11 @@ class ZScoDoc(ObjectManager, PropertyManager, RoleManager, Item, Persistent, Imp
|
|||||||
% REQUEST.BASE0
|
% REQUEST.BASE0
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# Lien expérimental temporaire:
|
||||||
|
H.append(
|
||||||
|
'<p><a href="/ScoDoc/static/mobile">Version mobile (expérimentale, à vos risques et périls)</a></p>'
|
||||||
|
)
|
||||||
|
|
||||||
H.append(
|
H.append(
|
||||||
"""
|
"""
|
||||||
<div id="scodoc_attribution">
|
<div id="scodoc_attribution">
|
||||||
|
@ -45,9 +45,16 @@ def bonus_iutv(notes_sport, coefs, infos=None):
|
|||||||
return bonus
|
return bonus
|
||||||
|
|
||||||
|
|
||||||
def bonus_iut_stdenis(notes_sport, coefs, infos=None):
|
def bonus_direct(notes_sport, coefs, infos=None):
|
||||||
"""Semblable à bonus_iutv mais sans coefficients et total limité à 0.5 points.
|
"""Un bonus direct et sans chichis: les points sont directement ajoutés à la moyenne générale.
|
||||||
|
Les coefficients sont ignorés: tous les points de bonus sont sommés.
|
||||||
|
(rappel: la note est ramenée sur 20 avant application).
|
||||||
"""
|
"""
|
||||||
|
return sum(notes_sport)
|
||||||
|
|
||||||
|
|
||||||
|
def bonus_iut_stdenis(notes_sport, coefs, infos=None):
|
||||||
|
"""Semblable à bonus_iutv mais sans coefficients et total limité à 0.5 points."""
|
||||||
points = sum([x - 10 for x in notes_sport if x > 10]) # points au dessus de 10
|
points = sum([x - 10 for x in notes_sport if x > 10]) # points au dessus de 10
|
||||||
bonus = points * 0.05 # ou / 20
|
bonus = points * 0.05 # ou / 20
|
||||||
return min(bonus, 0.5) # bonus limité à 1/2 point
|
return min(bonus, 0.5) # bonus limité à 1/2 point
|
||||||
@ -93,35 +100,6 @@ def bonus_iutva(notes_sport, coefs, infos=None):
|
|||||||
return 0
|
return 0
|
||||||
|
|
||||||
|
|
||||||
# XXX Inutilisé (mai 2020) ? à confirmer avant suppression XXX
|
|
||||||
# def bonus_iut1grenoble_v0(notes_sport, coefs, infos=None):
|
|
||||||
# """Calcul bonus sport IUT Grenoble sur la moyenne générale
|
|
||||||
#
|
|
||||||
# La note de sport de nos étudiants va de 0 à 5 points.
|
|
||||||
# Chaque point correspond à un % qui augmente la moyenne de chaque UE et la moyenne générale.
|
|
||||||
# Par exemple : note de sport 2/5 : chaque UE sera augmentée de 2%, ainsi que la moyenne générale.
|
|
||||||
#
|
|
||||||
# Calcul ici du bonus sur moyenne générale et moyennes d'UE non capitalisées.
|
|
||||||
# """
|
|
||||||
# # les coefs sont ignorés
|
|
||||||
# # notes de 0 à 5
|
|
||||||
# points = sum([x for x in notes_sport])
|
|
||||||
# factor = (points / 4.0) / 100.0
|
|
||||||
# bonus = infos["moy"] * factor
|
|
||||||
# # Modifie les moyennes de toutes les UE:
|
|
||||||
# for ue_id in infos["moy_ues"]:
|
|
||||||
# ue_status = infos["moy_ues"][ue_id]
|
|
||||||
# if ue_status["sum_coefs"] > 0:
|
|
||||||
# # modifie moyenne UE ds semestre courant
|
|
||||||
# ue_status["cur_moy_ue"] = ue_status["cur_moy_ue"] * (1.0 + factor)
|
|
||||||
# if not ue_status["is_capitalized"]:
|
|
||||||
# # si non capitalisee, modifie moyenne prise en compte
|
|
||||||
# ue_status["moy"] = ue_status["cur_moy_ue"]
|
|
||||||
#
|
|
||||||
# # open('/tmp/log','a').write( pprint.pformat(ue_status) + '\n\n' )
|
|
||||||
# return bonus
|
|
||||||
|
|
||||||
|
|
||||||
def bonus_iut1grenoble_2017(notes_sport, coefs, infos=None):
|
def bonus_iut1grenoble_2017(notes_sport, coefs, infos=None):
|
||||||
"""Calcul bonus sport IUT Grenoble sur la moyenne générale (version 2017)
|
"""Calcul bonus sport IUT Grenoble sur la moyenne générale (version 2017)
|
||||||
|
|
||||||
@ -162,14 +140,14 @@ def bonus_lille(notes_sport, coefs, infos=None):
|
|||||||
def bonus_iutlh(notes_sport, coefs, infos=None):
|
def bonus_iutlh(notes_sport, coefs, infos=None):
|
||||||
"""Calcul bonus sport IUT du Havre sur moyenne générale et UE
|
"""Calcul bonus sport IUT du Havre sur moyenne générale et UE
|
||||||
|
|
||||||
La note de sport de nos étudiants va de 0 à 20 points.
|
La note de sport de nos étudiants va de 0 à 20 points.
|
||||||
m2=m1*(1+0.005*((10-N1)+(10-N2))
|
m2=m1*(1+0.005*((10-N1)+(10-N2))
|
||||||
m2 : Nouvelle moyenne de l'unité d'enseignement si note de sport et/ou de langue supérieure à 10
|
m2 : Nouvelle moyenne de l'unité d'enseignement si note de sport et/ou de langue supérieure à 10
|
||||||
m1 : moyenne de l'unité d'enseignement avant bonification
|
m1 : moyenne de l'unité d'enseignement avant bonification
|
||||||
N1 : note de sport si supérieure à 10
|
N1 : note de sport si supérieure à 10
|
||||||
N2 : note de seconde langue si supérieure à 10
|
N2 : note de seconde langue si supérieure à 10
|
||||||
Par exemple : sport 15/20 et langue 12/20 : chaque UE sera multipliée par 1+0.005*7, ainsi que la moyenne générale.
|
Par exemple : sport 15/20 et langue 12/20 : chaque UE sera multipliée par 1+0.005*7, ainsi que la moyenne générale.
|
||||||
Calcul ici de la moyenne générale et moyennes d'UE non capitalisées.
|
Calcul ici de la moyenne générale et moyennes d'UE non capitalisées.
|
||||||
"""
|
"""
|
||||||
# les coefs sont ignorés
|
# les coefs sont ignorés
|
||||||
points = sum([x - 10 for x in notes_sport if x > 10])
|
points = sum([x - 10 for x in notes_sport if x > 10])
|
||||||
@ -205,8 +183,8 @@ def bonus_tours(notes_sport, coefs, infos=None):
|
|||||||
def bonus_iutr(notes_sport, coefs, infos=None):
|
def bonus_iutr(notes_sport, coefs, infos=None):
|
||||||
"""Calcul du bonus , regle de l'IUT de Roanne (contribuée par Raphael C., nov 2012)
|
"""Calcul du bonus , regle de l'IUT de Roanne (contribuée par Raphael C., nov 2012)
|
||||||
|
|
||||||
Le bonus est compris entre 0 et 0.35 point.
|
Le bonus est compris entre 0 et 0.35 point.
|
||||||
cette procédure modifie la moyenne de chaque UE capitalisable.
|
cette procédure modifie la moyenne de chaque UE capitalisable.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
# modifie les moyennes de toutes les UE:
|
# modifie les moyennes de toutes les UE:
|
||||||
|
6
debug.py
6
debug.py
@ -67,7 +67,11 @@ def go(app, n=0, verbose=True):
|
|||||||
def go_dept(app, dept, verbose=True):
|
def go_dept(app, dept, verbose=True):
|
||||||
objs = app.ScoDoc.objectValues("Folder")
|
objs = app.ScoDoc.objectValues("Folder")
|
||||||
for o in objs:
|
for o in objs:
|
||||||
context = o.Scolarite
|
try:
|
||||||
|
context = o.Scolarite
|
||||||
|
except AttributeError:
|
||||||
|
# ignore other folders, like old "icons"
|
||||||
|
continue
|
||||||
if context.DeptId() == dept:
|
if context.DeptId() == dept:
|
||||||
if verbose:
|
if verbose:
|
||||||
print("context in dept ", context.DeptId())
|
print("context in dept ", context.DeptId())
|
||||||
|
74
scotests/test_scenario1_formation.py
Executable file
74
scotests/test_scenario1_formation.py
Executable file
@ -0,0 +1,74 @@
|
|||||||
|
# -*- mode: python -*-
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
import sco_formations
|
||||||
|
import random
|
||||||
|
# La variable context est définie par le script de lancement
|
||||||
|
# l'affecte ainsi pour évietr les warnins pylint:
|
||||||
|
context = context # pylint: disable=undefined-variable
|
||||||
|
REQUEST = REQUEST # pylint: disable=undefined-variable
|
||||||
|
import scotests.sco_fake_gen as sco_fake_gen # pylint: disable=import-error
|
||||||
|
import sco_moduleimpl
|
||||||
|
|
||||||
|
G = sco_fake_gen.ScoFake(context.Notes)
|
||||||
|
G.verbose = False
|
||||||
|
|
||||||
|
file = open("scotests/export_formation1.xml")
|
||||||
|
doc = file.read()
|
||||||
|
file.close()
|
||||||
|
|
||||||
|
|
||||||
|
# --- Création de la formation
|
||||||
|
|
||||||
|
f = sco_formations.formation_import_xml(REQUEST=REQUEST, doc=doc, context=context.Notes)
|
||||||
|
|
||||||
|
# --- Création des semestres
|
||||||
|
|
||||||
|
sem1 = G.create_formsemestre(
|
||||||
|
formation_id=f[0],
|
||||||
|
semestre_id=1,
|
||||||
|
date_debut="01/09/2020",
|
||||||
|
date_fin="01/02/2021",
|
||||||
|
)
|
||||||
|
|
||||||
|
sem3 = G.create_formsemestre(
|
||||||
|
formation_id=f[0],
|
||||||
|
semestre_id=3,
|
||||||
|
date_debut="01/09/2020",
|
||||||
|
date_fin="01/02/2021",
|
||||||
|
)
|
||||||
|
|
||||||
|
sem2 = G.create_formsemestre(
|
||||||
|
formation_id=f[0],
|
||||||
|
semestre_id=2,
|
||||||
|
date_debut="02/02/2021",
|
||||||
|
date_fin="01/06/2021",
|
||||||
|
)
|
||||||
|
|
||||||
|
sem4 = G.create_formsemestre(
|
||||||
|
formation_id=f[0],
|
||||||
|
semestre_id=4,
|
||||||
|
date_debut="02/02/2021",
|
||||||
|
date_fin="01/06/2021",
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
# --- Implémentation des modules
|
||||||
|
|
||||||
|
li_module = context.Notes.do_module_list()
|
||||||
|
mods_imp = []
|
||||||
|
for mod in li_module :
|
||||||
|
if mod["semestre_id"] == 1 :
|
||||||
|
formsemestre_id = sem1["formsemestre_id"]
|
||||||
|
elif mod["semestre_id"] == 2 :
|
||||||
|
formsemestre_id = sem2["formsemestre_id"]
|
||||||
|
elif mod["semestre_id"] == 3 :
|
||||||
|
formsemestre_id = sem3["formsemestre_id"]
|
||||||
|
else :
|
||||||
|
formsemestre_id = sem4["formsemestre_id"]
|
||||||
|
|
||||||
|
mi = G.create_moduleimpl(
|
||||||
|
module_id=mod["module_id"],
|
||||||
|
formsemestre_id=formsemestre_id,
|
||||||
|
responsable_id="bach",
|
||||||
|
)
|
||||||
|
mods_imp.append(mi)
|
105
scotests/test_scenario2_formation.py
Executable file
105
scotests/test_scenario2_formation.py
Executable file
@ -0,0 +1,105 @@
|
|||||||
|
import sco_formations
|
||||||
|
import random
|
||||||
|
# La variable context est définie par le script de lancement
|
||||||
|
# l'affecte ainsi pour évietr les warnins pylint:
|
||||||
|
context = context # pylint: disable=undefined-variable
|
||||||
|
REQUEST = REQUEST # pylint: disable=undefined-variable
|
||||||
|
import scotests.sco_fake_gen as sco_fake_gen # pylint: disable=import-error
|
||||||
|
import sco_moduleimpl
|
||||||
|
|
||||||
|
G = sco_fake_gen.ScoFake(context.Notes)
|
||||||
|
G.verbose = False
|
||||||
|
|
||||||
|
file = open("scotests/export_formation1.xml")
|
||||||
|
doc = file.read()
|
||||||
|
file.close()
|
||||||
|
|
||||||
|
|
||||||
|
# --- Création de la formation
|
||||||
|
|
||||||
|
f = sco_formations.formation_import_xml(REQUEST=REQUEST, doc=doc, context=context.Notes)
|
||||||
|
|
||||||
|
# --- Création des semestres
|
||||||
|
|
||||||
|
sem1 = G.create_formsemestre(
|
||||||
|
formation_id=f[0],
|
||||||
|
semestre_id=1,
|
||||||
|
date_debut="01/09/2020",
|
||||||
|
date_fin="01/02/2021",
|
||||||
|
)
|
||||||
|
|
||||||
|
sem3 = G.create_formsemestre(
|
||||||
|
formation_id=f[0],
|
||||||
|
semestre_id=3,
|
||||||
|
date_debut="01/09/2020",
|
||||||
|
date_fin="01/02/2021",
|
||||||
|
)
|
||||||
|
|
||||||
|
sem2 = G.create_formsemestre(
|
||||||
|
formation_id=f[0],
|
||||||
|
semestre_id=2,
|
||||||
|
date_debut="02/02/2021",
|
||||||
|
date_fin="01/06/2021",
|
||||||
|
)
|
||||||
|
|
||||||
|
sem4 = G.create_formsemestre(
|
||||||
|
formation_id=f[0],
|
||||||
|
semestre_id=4,
|
||||||
|
date_debut="02/02/2021",
|
||||||
|
date_fin="01/06/2021",
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
# --- Implémentation des modules
|
||||||
|
|
||||||
|
li_module = context.Notes.do_module_list()
|
||||||
|
mods_imp = []
|
||||||
|
for mod in li_module :
|
||||||
|
if mod["semestre_id"] == 1 :
|
||||||
|
formsemestre_id = sem1["formsemestre_id"]
|
||||||
|
elif mod["semestre_id"] == 2 :
|
||||||
|
formsemestre_id = sem2["formsemestre_id"]
|
||||||
|
elif mod["semestre_id"] == 3 :
|
||||||
|
formsemestre_id = sem3["formsemestre_id"]
|
||||||
|
else :
|
||||||
|
formsemestre_id = sem4["formsemestre_id"]
|
||||||
|
|
||||||
|
mi = G.create_moduleimpl(
|
||||||
|
module_id=mod["module_id"],
|
||||||
|
formsemestre_id=formsemestre_id,
|
||||||
|
responsable_id="bach",
|
||||||
|
)
|
||||||
|
mods_imp.append(mi)
|
||||||
|
|
||||||
|
# --- Création des étudiants
|
||||||
|
|
||||||
|
etuds=[]
|
||||||
|
for nom, prenom in [
|
||||||
|
("Semestre1", "EtudiantNumero1"),
|
||||||
|
("Semestre1", "EtudiantNumero2"),
|
||||||
|
("Semestre2", "EtudiantNumero3"),
|
||||||
|
("Semestre2", "EtudiantNumero4"),
|
||||||
|
("Semestre3", "EtudiantNumero5"),
|
||||||
|
("Semestre3", "EtudiantNumero6"),
|
||||||
|
("Semestre4", "EtudiantNumero7"),
|
||||||
|
("Semestre4", "EtudiantNumero8")
|
||||||
|
] :
|
||||||
|
etud = G.create_etud(
|
||||||
|
nom=nom,
|
||||||
|
prenom=prenom,
|
||||||
|
)
|
||||||
|
etuds.append(etud)
|
||||||
|
|
||||||
|
# --- Inscription des étudiants
|
||||||
|
|
||||||
|
for etud in etuds[0:2]:
|
||||||
|
G.inscrit_etudiant(sem1, etud)
|
||||||
|
|
||||||
|
for etud in etuds[2:4]:
|
||||||
|
G.inscrit_etudiant(sem2, etud)
|
||||||
|
|
||||||
|
for etud in etuds[4:6]:
|
||||||
|
G.inscrit_etudiant(sem3, etud)
|
||||||
|
|
||||||
|
for etud in etuds[6:]:
|
||||||
|
G.inscrit_etudiant(sem4, etud)
|
135
scotests/test_scenario3_formation.py
Executable file
135
scotests/test_scenario3_formation.py
Executable file
@ -0,0 +1,135 @@
|
|||||||
|
import sco_formations
|
||||||
|
import json
|
||||||
|
import random
|
||||||
|
# La variable context est définie par le script de lancement
|
||||||
|
# l'affecte ainsi pour évietr les warnins pylint:
|
||||||
|
context = context # pylint: disable=undefined-variable
|
||||||
|
REQUEST = REQUEST # pylint: disable=undefined-variable
|
||||||
|
import scotests.sco_fake_gen as sco_fake_gen # pylint: disable=import-error
|
||||||
|
import sco_moduleimpl
|
||||||
|
|
||||||
|
G = sco_fake_gen.ScoFake(context.Notes)
|
||||||
|
G.verbose = False
|
||||||
|
|
||||||
|
file = open("scotests/export_formation1.xml")
|
||||||
|
doc = file.read()
|
||||||
|
file.close()
|
||||||
|
|
||||||
|
|
||||||
|
# --- Création de la formation
|
||||||
|
|
||||||
|
f = sco_formations.formation_import_xml(REQUEST=REQUEST, doc=doc, context=context.Notes)
|
||||||
|
|
||||||
|
# --- Création des semestres
|
||||||
|
|
||||||
|
sem1 = G.create_formsemestre(
|
||||||
|
formation_id=f[0],
|
||||||
|
semestre_id=1,
|
||||||
|
date_debut="01/09/2020",
|
||||||
|
date_fin="01/02/2021",
|
||||||
|
)
|
||||||
|
|
||||||
|
sem3 = G.create_formsemestre(
|
||||||
|
formation_id=f[0],
|
||||||
|
semestre_id=3,
|
||||||
|
date_debut="01/09/2020",
|
||||||
|
date_fin="01/02/2021",
|
||||||
|
)
|
||||||
|
|
||||||
|
sem2 = G.create_formsemestre(
|
||||||
|
formation_id=f[0],
|
||||||
|
semestre_id=2,
|
||||||
|
date_debut="02/02/2021",
|
||||||
|
date_fin="01/06/2021",
|
||||||
|
)
|
||||||
|
|
||||||
|
sem4 = G.create_formsemestre(
|
||||||
|
formation_id=f[0],
|
||||||
|
semestre_id=4,
|
||||||
|
date_debut="02/02/2021",
|
||||||
|
date_fin="01/06/2021",
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
# --- Implémentation des modules
|
||||||
|
|
||||||
|
li_module = context.Notes.do_module_list()
|
||||||
|
mods_imp = []
|
||||||
|
for mod in li_module :
|
||||||
|
if mod["semestre_id"] == 1 :
|
||||||
|
formsemestre_id = sem1["formsemestre_id"]
|
||||||
|
elif mod["semestre_id"] == 2 :
|
||||||
|
formsemestre_id = sem2["formsemestre_id"]
|
||||||
|
elif mod["semestre_id"] == 3 :
|
||||||
|
formsemestre_id = sem3["formsemestre_id"]
|
||||||
|
else :
|
||||||
|
formsemestre_id = sem4["formsemestre_id"]
|
||||||
|
|
||||||
|
mi = G.create_moduleimpl(
|
||||||
|
module_id=mod["module_id"],
|
||||||
|
formsemestre_id=formsemestre_id,
|
||||||
|
responsable_id="bach",
|
||||||
|
)
|
||||||
|
mods_imp.append(mi)
|
||||||
|
|
||||||
|
# --- Création des étudiants
|
||||||
|
|
||||||
|
etuds=[]
|
||||||
|
for nom, prenom in [
|
||||||
|
("Semestre1", "EtudiantNumero1"),
|
||||||
|
("Semestre1", "EtudiantNumero2"),
|
||||||
|
("Semestre2", "EtudiantNumero3"),
|
||||||
|
("Semestre2", "EtudiantNumero4"),
|
||||||
|
("Semestre3", "EtudiantNumero5"),
|
||||||
|
("Semestre3", "EtudiantNumero6"),
|
||||||
|
("Semestre4", "EtudiantNumero7"),
|
||||||
|
("Semestre4", "EtudiantNumero8")
|
||||||
|
] :
|
||||||
|
etud = G.create_etud(
|
||||||
|
nom=nom,
|
||||||
|
prenom=prenom,
|
||||||
|
)
|
||||||
|
etuds.append(etud)
|
||||||
|
|
||||||
|
# --- Inscription des étudiants
|
||||||
|
|
||||||
|
for etud in etuds[0:2]:
|
||||||
|
G.inscrit_etudiant(sem1, etud)
|
||||||
|
|
||||||
|
for etud in etuds[2:4]:
|
||||||
|
G.inscrit_etudiant(sem2, etud)
|
||||||
|
|
||||||
|
for etud in etuds[4:6]:
|
||||||
|
G.inscrit_etudiant(sem3, etud)
|
||||||
|
|
||||||
|
for etud in etuds[6:]:
|
||||||
|
G.inscrit_etudiant(sem4, etud)
|
||||||
|
|
||||||
|
# --- Création d'une évaluation pour chaque UE
|
||||||
|
|
||||||
|
lim_sem1 = sco_moduleimpl.do_moduleimpl_list(context.Notes, formsemestre_id=sem1["formsemestre_id"], REQUEST=REQUEST)
|
||||||
|
load_lim_sem1 = json.loads(lim_sem1)
|
||||||
|
|
||||||
|
lim_sem2 = sco_moduleimpl.do_moduleimpl_list(context.Notes, formsemestre_id=sem2["formsemestre_id"], REQUEST=REQUEST)
|
||||||
|
load_lim_sem2 = json.loads(lim_sem2)
|
||||||
|
|
||||||
|
lim_sem3 = sco_moduleimpl.do_moduleimpl_list(context.Notes, formsemestre_id=sem3["formsemestre_id"], REQUEST=REQUEST)
|
||||||
|
load_lim_sem3 = json.loads(lim_sem3)
|
||||||
|
|
||||||
|
lim_sem4 = sco_moduleimpl.do_moduleimpl_list(context.Notes, formsemestre_id=sem4["formsemestre_id"], REQUEST=REQUEST)
|
||||||
|
load_lim_sem4 = json.loads(lim_sem4)
|
||||||
|
|
||||||
|
|
||||||
|
for moduleimpl_id, jour, description, coefficient in [
|
||||||
|
(load_lim_sem1[1]["moduleimpl_id"], "02/09/2020", "InterroTestSemestre1", 1.0),
|
||||||
|
(load_lim_sem1[2]["moduleimpl_id"], "03/09/2020", "InterroTestSemestre1", 1.0),
|
||||||
|
(load_lim_sem2[1]["moduleimpl_id"], "03/02/2021", "InterroTestSemestre2", 1.0),
|
||||||
|
(load_lim_sem2[8]["moduleimpl_id"], "04/02/2021", "InterroTestSemestre2", 1.0),
|
||||||
|
(load_lim_sem3[3]["moduleimpl_id"], "02/09/2020", "InterroTestSemestre3", 1.0),
|
||||||
|
(load_lim_sem3[9]["moduleimpl_id"], "03/09/2020", "InterroTestSemestre3", 1.0),
|
||||||
|
(load_lim_sem3[15]["moduleimpl_id"], "04/09/2020", "InterroTestSemestre3", 1.0),
|
||||||
|
(load_lim_sem4[3]["moduleimpl_id"], "03/02/2021", "InterroTestSemestre4", 1.0),
|
||||||
|
(load_lim_sem4[9]["moduleimpl_id"], "04/02/2021", "InterroTestSemestre4", 1.0),
|
||||||
|
(load_lim_sem4[13]["moduleimpl_id"], "05/02/2021", "InterroTestSemestre4", 1.0),
|
||||||
|
] :
|
||||||
|
e = G.create_evaluation(moduleimpl_id=moduleimpl_id, jour=jour, description=description, coefficient=coefficient)
|
172
scotests/test_scenario4_formation.py
Executable file
172
scotests/test_scenario4_formation.py
Executable file
@ -0,0 +1,172 @@
|
|||||||
|
import sco_formations
|
||||||
|
import json
|
||||||
|
import random
|
||||||
|
# La variable context est définie par le script de lancement
|
||||||
|
# l'affecte ainsi pour évietr les warnins pylint:
|
||||||
|
context = context # pylint: disable=undefined-variable
|
||||||
|
REQUEST = REQUEST # pylint: disable=undefined-variable
|
||||||
|
import scotests.sco_fake_gen as sco_fake_gen # pylint: disable=import-error
|
||||||
|
import sco_moduleimpl
|
||||||
|
|
||||||
|
G = sco_fake_gen.ScoFake(context.Notes)
|
||||||
|
G.verbose = False
|
||||||
|
|
||||||
|
file = open("scotests/export_formation1.xml")
|
||||||
|
doc = file.read()
|
||||||
|
file.close()
|
||||||
|
|
||||||
|
|
||||||
|
# --- Création de la formation
|
||||||
|
|
||||||
|
f = sco_formations.formation_import_xml(REQUEST=REQUEST, doc=doc, context=context.Notes)
|
||||||
|
|
||||||
|
# --- Création des semestres
|
||||||
|
|
||||||
|
sem1 = G.create_formsemestre(
|
||||||
|
formation_id=f[0],
|
||||||
|
semestre_id=1,
|
||||||
|
date_debut="01/09/2020",
|
||||||
|
date_fin="01/02/2021",
|
||||||
|
)
|
||||||
|
|
||||||
|
sem3 = G.create_formsemestre(
|
||||||
|
formation_id=f[0],
|
||||||
|
semestre_id=3,
|
||||||
|
date_debut="01/09/2020",
|
||||||
|
date_fin="01/02/2021",
|
||||||
|
)
|
||||||
|
|
||||||
|
sem2 = G.create_formsemestre(
|
||||||
|
formation_id=f[0],
|
||||||
|
semestre_id=2,
|
||||||
|
date_debut="02/02/2021",
|
||||||
|
date_fin="01/06/2021",
|
||||||
|
)
|
||||||
|
|
||||||
|
sem4 = G.create_formsemestre(
|
||||||
|
formation_id=f[0],
|
||||||
|
semestre_id=4,
|
||||||
|
date_debut="02/02/2021",
|
||||||
|
date_fin="01/06/2021",
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
# --- Implémentation des modules
|
||||||
|
|
||||||
|
li_module = context.Notes.do_module_list()
|
||||||
|
mods_imp = []
|
||||||
|
for mod in li_module :
|
||||||
|
if mod["semestre_id"] == 1 :
|
||||||
|
formsemestre_id = sem1["formsemestre_id"]
|
||||||
|
elif mod["semestre_id"] == 2 :
|
||||||
|
formsemestre_id = sem2["formsemestre_id"]
|
||||||
|
elif mod["semestre_id"] == 3 :
|
||||||
|
formsemestre_id = sem3["formsemestre_id"]
|
||||||
|
else :
|
||||||
|
formsemestre_id = sem4["formsemestre_id"]
|
||||||
|
|
||||||
|
mi = G.create_moduleimpl(
|
||||||
|
module_id=mod["module_id"],
|
||||||
|
formsemestre_id=formsemestre_id,
|
||||||
|
responsable_id="bach",
|
||||||
|
)
|
||||||
|
mods_imp.append(mi)
|
||||||
|
|
||||||
|
# --- Création des étudiants
|
||||||
|
|
||||||
|
etuds=[]
|
||||||
|
for nom, prenom in [
|
||||||
|
("Semestre1", "EtudiantNumero1"),
|
||||||
|
("Semestre1", "EtudiantNumero2"),
|
||||||
|
("Semestre2", "EtudiantNumero3"),
|
||||||
|
("Semestre2", "EtudiantNumero4"),
|
||||||
|
("Semestre3", "EtudiantNumero5"),
|
||||||
|
("Semestre3", "EtudiantNumero6"),
|
||||||
|
("Semestre4", "EtudiantNumero7"),
|
||||||
|
("Semestre4", "EtudiantNumero8")
|
||||||
|
] :
|
||||||
|
etud = G.create_etud(
|
||||||
|
nom=nom,
|
||||||
|
prenom=prenom,
|
||||||
|
)
|
||||||
|
etuds.append(etud)
|
||||||
|
|
||||||
|
# --- Inscription des étudiants
|
||||||
|
|
||||||
|
for etud in etuds[0:2]:
|
||||||
|
G.inscrit_etudiant(sem1, etud)
|
||||||
|
|
||||||
|
for etud in etuds[2:4]:
|
||||||
|
G.inscrit_etudiant(sem2, etud)
|
||||||
|
|
||||||
|
for etud in etuds[4:6]:
|
||||||
|
G.inscrit_etudiant(sem3, etud)
|
||||||
|
|
||||||
|
for etud in etuds[6:]:
|
||||||
|
G.inscrit_etudiant(sem4, etud)
|
||||||
|
|
||||||
|
# --- Création d'une évaluation pour chaque UE
|
||||||
|
|
||||||
|
lim_sem1 = sco_moduleimpl.do_moduleimpl_list(context.Notes, formsemestre_id=sem1["formsemestre_id"], REQUEST=REQUEST)
|
||||||
|
load_lim_sem1 = json.loads(lim_sem1)
|
||||||
|
|
||||||
|
lim_sem2 = sco_moduleimpl.do_moduleimpl_list(context.Notes, formsemestre_id=sem2["formsemestre_id"], REQUEST=REQUEST)
|
||||||
|
load_lim_sem2 = json.loads(lim_sem2)
|
||||||
|
|
||||||
|
lim_sem3 = sco_moduleimpl.do_moduleimpl_list(context.Notes, formsemestre_id=sem3["formsemestre_id"], REQUEST=REQUEST)
|
||||||
|
load_lim_sem3 = json.loads(lim_sem3)
|
||||||
|
|
||||||
|
lim_sem4 = sco_moduleimpl.do_moduleimpl_list(context.Notes, formsemestre_id=sem4["formsemestre_id"], REQUEST=REQUEST)
|
||||||
|
load_lim_sem4 = json.loads(lim_sem4)
|
||||||
|
|
||||||
|
|
||||||
|
for moduleimpl_id, jour, description, coefficient in [
|
||||||
|
(load_lim_sem1[1]["moduleimpl_id"], "02/09/2020", "InterroTestSemestre1", 1.0),
|
||||||
|
(load_lim_sem1[2]["moduleimpl_id"], "03/09/2020", "InterroTestSemestre1", 1.0),
|
||||||
|
(load_lim_sem2[1]["moduleimpl_id"], "03/02/2021", "InterroTestSemestre2", 1.0),
|
||||||
|
(load_lim_sem2[8]["moduleimpl_id"], "04/02/2021", "InterroTestSemestre2", 1.0),
|
||||||
|
(load_lim_sem3[3]["moduleimpl_id"], "02/09/2020", "InterroTestSemestre3", 1.0),
|
||||||
|
(load_lim_sem3[9]["moduleimpl_id"], "03/09/2020", "InterroTestSemestre3", 1.0),
|
||||||
|
(load_lim_sem3[15]["moduleimpl_id"], "04/09/2020", "InterroTestSemestre3", 1.0),
|
||||||
|
(load_lim_sem4[3]["moduleimpl_id"], "03/02/2021", "InterroTestSemestre4", 1.0),
|
||||||
|
(load_lim_sem4[9]["moduleimpl_id"], "04/02/2021", "InterroTestSemestre4", 1.0),
|
||||||
|
(load_lim_sem4[13]["moduleimpl_id"], "05/02/2021", "InterroTestSemestre4", 1.0),
|
||||||
|
] :
|
||||||
|
e = G.create_evaluation(moduleimpl_id=moduleimpl_id, jour=jour, description=description, coefficient=coefficient)
|
||||||
|
|
||||||
|
|
||||||
|
# --- Saisie des notes des étudiants (un élève a 12, un autre a 7 pour chaque semestre)
|
||||||
|
|
||||||
|
lie1 = context.Notes.do_evaluation_list_in_formsemestre(formsemestre_id=sem1["formsemestre_id"])
|
||||||
|
lie2 = context.Notes.do_evaluation_list_in_formsemestre(formsemestre_id=sem2["formsemestre_id"])
|
||||||
|
lie3 = context.Notes.do_evaluation_list_in_formsemestre(formsemestre_id=sem3["formsemestre_id"])
|
||||||
|
lie4 = context.Notes.do_evaluation_list_in_formsemestre(formsemestre_id=sem4["formsemestre_id"])
|
||||||
|
|
||||||
|
for eval in lie1 :
|
||||||
|
for etud in etuds[:2] :
|
||||||
|
if etud == etuds[0] :
|
||||||
|
nb_changed, nb_suppress, existing_decisions = G.create_note(evaluation=eval, etud=etud, note=12.0)
|
||||||
|
else :
|
||||||
|
nb_changed, nb_suppress, existing_decisions = G.create_note(evaluation=eval, etud=etud, note=7.0)
|
||||||
|
|
||||||
|
for eval in lie2 :
|
||||||
|
for etud in etuds[2:4] :
|
||||||
|
if etud == etuds[2] :
|
||||||
|
nb_changed, nb_suppress, existing_decisions = G.create_note(evaluation=eval, etud=etud, note=12.0)
|
||||||
|
else :
|
||||||
|
nb_changed, nb_suppress, existing_decisions = G.create_note(evaluation=eval, etud=etud, note=7.0)
|
||||||
|
|
||||||
|
|
||||||
|
for eval in lie3 :
|
||||||
|
for etud in etuds[4:6] :
|
||||||
|
if etud == etuds[4] :
|
||||||
|
nb_changed, nb_suppress, existing_decisions = G.create_note(evaluation=eval, etud=etud, note=12.0)
|
||||||
|
else :
|
||||||
|
nb_changed, nb_suppress, existing_decisions = G.create_note(evaluation=eval, etud=etud, note=7.0)
|
||||||
|
|
||||||
|
for eval in lie4 :
|
||||||
|
for etud in etuds[6:] :
|
||||||
|
if etud == etuds[6] :
|
||||||
|
nb_changed, nb_suppress, existing_decisions = G.create_note(evaluation=eval, etud=etud, note=12.0)
|
||||||
|
else :
|
||||||
|
nb_changed, nb_suppress, existing_decisions = G.create_note(evaluation=eval, etud=etud, note=7.0)
|
25
static/mobile/asset-manifest.json
Normal file
25
static/mobile/asset-manifest.json
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
{
|
||||||
|
"files": {
|
||||||
|
"main.css": "./static/css/main.6be5a531.chunk.css",
|
||||||
|
"main.js": "./static/js/main.9d1150c9.chunk.js",
|
||||||
|
"main.js.map": "./static/js/main.9d1150c9.chunk.js.map",
|
||||||
|
"runtime-main.js": "./static/js/runtime-main.b827b16d.js",
|
||||||
|
"runtime-main.js.map": "./static/js/runtime-main.b827b16d.js.map",
|
||||||
|
"static/css/2.4c97ca4f.chunk.css": "./static/css/2.4c97ca4f.chunk.css",
|
||||||
|
"static/js/2.68967b49.chunk.js": "./static/js/2.68967b49.chunk.js",
|
||||||
|
"static/js/2.68967b49.chunk.js.map": "./static/js/2.68967b49.chunk.js.map",
|
||||||
|
"static/js/3.d2558866.chunk.js": "./static/js/3.d2558866.chunk.js",
|
||||||
|
"static/js/3.d2558866.chunk.js.map": "./static/js/3.d2558866.chunk.js.map",
|
||||||
|
"index.html": "./index.html",
|
||||||
|
"static/css/2.4c97ca4f.chunk.css.map": "./static/css/2.4c97ca4f.chunk.css.map",
|
||||||
|
"static/css/main.6be5a531.chunk.css.map": "./static/css/main.6be5a531.chunk.css.map",
|
||||||
|
"static/js/2.68967b49.chunk.js.LICENSE.txt": "./static/js/2.68967b49.chunk.js.LICENSE.txt"
|
||||||
|
},
|
||||||
|
"entrypoints": [
|
||||||
|
"static/js/runtime-main.b827b16d.js",
|
||||||
|
"static/css/2.4c97ca4f.chunk.css",
|
||||||
|
"static/js/2.68967b49.chunk.js",
|
||||||
|
"static/css/main.6be5a531.chunk.css",
|
||||||
|
"static/js/main.9d1150c9.chunk.js"
|
||||||
|
]
|
||||||
|
}
|
BIN
static/mobile/favicon.ico
Normal file
BIN
static/mobile/favicon.ico
Normal file
Binary file not shown.
After Width: | Height: | Size: 15 KiB |
1
static/mobile/index.html
Normal file
1
static/mobile/index.html
Normal file
@ -0,0 +1 @@
|
|||||||
|
<!doctype html><html lang="en"><head><meta charset="utf-8"/><link rel="icon" href="./favicon.ico"/><meta name="viewport" content="width=device-width,initial-scale=1"/><meta name="theme-color" content="#000000"/><meta name="description" content="Scodoc Mobile"/><link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous"><link rel="apple-touch-icon" href="./scologo.png"/><link rel="manifest" href="./manifest.json"/><title>Scodoc Mobile</title><link href="./static/css/2.4c97ca4f.chunk.css" rel="stylesheet"><link href="./static/css/main.6be5a531.chunk.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div><script>!function(e){function r(r){for(var n,i,a=r[0],c=r[1],l=r[2],s=0,p=[];s<a.length;s++)i=a[s],Object.prototype.hasOwnProperty.call(o,i)&&o[i]&&p.push(o[i][0]),o[i]=0;for(n in c)Object.prototype.hasOwnProperty.call(c,n)&&(e[n]=c[n]);for(f&&f(r);p.length;)p.shift()();return u.push.apply(u,l||[]),t()}function t(){for(var e,r=0;r<u.length;r++){for(var t=u[r],n=!0,a=1;a<t.length;a++){var c=t[a];0!==o[c]&&(n=!1)}n&&(u.splice(r--,1),e=i(i.s=t[0]))}return e}var n={},o={1:0},u=[];function i(r){if(n[r])return n[r].exports;var t=n[r]={i:r,l:!1,exports:{}};return e[r].call(t.exports,t,t.exports,i),t.l=!0,t.exports}i.e=function(e){var r=[],t=o[e];if(0!==t)if(t)r.push(t[2]);else{var n=new Promise((function(r,n){t=o[e]=[r,n]}));r.push(t[2]=n);var u,a=document.createElement("script");a.charset="utf-8",a.timeout=120,i.nc&&a.setAttribute("nonce",i.nc),a.src=function(e){return i.p+"static/js/"+({}[e]||e)+"."+{3:"d2558866"}[e]+".chunk.js"}(e);var c=new Error;u=function(r){a.onerror=a.onload=null,clearTimeout(l);var t=o[e];if(0!==t){if(t){var n=r&&("load"===r.type?"missing":r.type),u=r&&r.target&&r.target.src;c.message="Loading chunk "+e+" failed.\n("+n+": "+u+")",c.name="ChunkLoadError",c.type=n,c.request=u,t[1](c)}o[e]=void 0}};var l=setTimeout((function(){u({type:"timeout",target:a})}),12e4);a.onerror=a.onload=u,document.head.appendChild(a)}return Promise.all(r)},i.m=e,i.c=n,i.d=function(e,r,t){i.o(e,r)||Object.defineProperty(e,r,{enumerable:!0,get:t})},i.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.t=function(e,r){if(1&r&&(e=i(e)),8&r)return e;if(4&r&&"object"==typeof e&&e&&e.__esModule)return e;var t=Object.create(null);if(i.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:e}),2&r&&"string"!=typeof e)for(var n in e)i.d(t,n,function(r){return e[r]}.bind(null,n));return t},i.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return i.d(r,"a",r),r},i.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},i.p="./",i.oe=function(e){throw console.error(e),e};var a=this.webpackJsonpscodocmobile=this.webpackJsonpscodocmobile||[],c=a.push.bind(a);a.push=r,a=a.slice();for(var l=0;l<a.length;l++)r(a[l]);var f=c;t()}([])</script><script src="./static/js/2.68967b49.chunk.js"></script><script src="./static/js/main.9d1150c9.chunk.js"></script></body></html>
|
20
static/mobile/manifest.json
Normal file
20
static/mobile/manifest.json
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
{
|
||||||
|
"short_name": "React App",
|
||||||
|
"name": "Create React App Sample",
|
||||||
|
"icons": [
|
||||||
|
{
|
||||||
|
"src": "favicon.ico",
|
||||||
|
"sizes": "64x64 32x32 24x24 16x16",
|
||||||
|
"type": "image/x-icon"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "scologo.png",
|
||||||
|
"type": "image/png",
|
||||||
|
"sizes": "84x126"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"start_url": ".",
|
||||||
|
"display": "standalone",
|
||||||
|
"theme_color": "#000000",
|
||||||
|
"background_color": "#ffffff"
|
||||||
|
}
|
3
static/mobile/robots.txt
Normal file
3
static/mobile/robots.txt
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
# https://www.robotstxt.org/robotstxt.html
|
||||||
|
User-agent: *
|
||||||
|
Disallow:
|
BIN
static/mobile/scologo.png
Normal file
BIN
static/mobile/scologo.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 28 KiB |
7
static/mobile/static/css/2.4c97ca4f.chunk.css
Normal file
7
static/mobile/static/css/2.4c97ca4f.chunk.css
Normal file
File diff suppressed because one or more lines are too long
1
static/mobile/static/css/2.4c97ca4f.chunk.css.map
Normal file
1
static/mobile/static/css/2.4c97ca4f.chunk.css.map
Normal file
File diff suppressed because one or more lines are too long
2
static/mobile/static/css/main.6be5a531.chunk.css
Normal file
2
static/mobile/static/css/main.6be5a531.chunk.css
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
body{font-family:"Poppins",sans-serif;height:100vh}a{color:#92badd;display:inline-block;text-decoration:none;font-weight:400}#pageTitle{font-size:25px;color:#aaa}#loginTitle,#pageTitle{text-align:center;font-weight:600}#loginTitle{font-size:20px;text-transform:uppercase;display:inline-block;margin:40px 8px 10px;color:#ccc}.wrapper{display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;-webkit-flex-direction:column;flex-direction:column;-webkit-justify-content:center;justify-content:center;width:100%;min-height:100%;padding:10px}#formContent{padding:0}#errorMsg,#formContent{border-radius:10px 10px 10px 10px;background:#fff;width:90%;max-width:450px;position:relative;box-shadow:0 30px 60px 0 rgba(0,0,0,.3);text-align:center}#errorMsg{margin-bottom:10px;padding:0 0 20px}#wrapDept{border-radius:10px 10px 10px 10px;background:#fff;width:90%;max-width:450px;position:relative;box-shadow:0 10px 20px 0 rgba(0,0,0,.3);text-align:center;margin:10px;padding:10px}#formFooter{background-color:#f6f6f6;border-top:1px solid #dce8f1;padding:25px;text-align:center;border-radius:0 0 10px 10px}button[type=submit],input[type=button],input[type=reset]{background-color:#56baed;border:none;color:#fff;padding:15px 80px;text-align:center;text-decoration:none;display:inline-block;text-transform:uppercase;font-size:13px;box-shadow:0 10px 30px 0 rgba(95,186,233,.4);border-radius:5px 5px 5px 5px;margin:5px 20px 40px;transition:all .3s ease-in-out}button[type=submit]:hover,input[type=button]:hover,input[type=reset]:hover{background-color:#39ace7}button[type=submit]:active,input[type=button]:active,input[type=reset]:active{-webkit-transform:scale(.95);transform:scale(.95)}input[type=password],input[type=text]{background-color:#f6f6f6;color:#0d0d0d;padding:15px 32px;text-decoration:none;display:inline-block;font-size:16px;margin:5px;width:85%;border:2px solid #f6f6f6;transition:all .5s ease-in-out;border-radius:5px 5px 5px 5px}input[type=password]:focus,input[type=text]:focus{background-color:#fff;border-bottom:2px solid #5fbae9}input[type=password]::-webkit-input-placeholder,input[type=text]::-webkit-input-placeholder{color:#ccc}input[type=password]:-ms-input-placeholder,input[type=text]:-ms-input-placeholder{color:#ccc}input[type=password]::placeholder,input[type=text]::placeholder{color:#ccc}.underlineHover:hover{color:#0d0d0d}.underlineHover:hover:after{width:100%}:focus{outline:none}#icon{width:60%}.mySelect{min-width:200px}.smallRow{line-height:60%;font-size:70%}.ueRow{background:#5bc0de;color:#fff;font-weight:700}thead{background:#d3d3d3}
|
||||||
|
/*# sourceMappingURL=main.6be5a531.chunk.css.map */
|
1
static/mobile/static/css/main.6be5a531.chunk.css.map
Normal file
1
static/mobile/static/css/main.6be5a531.chunk.css.map
Normal file
File diff suppressed because one or more lines are too long
3
static/mobile/static/js/2.68967b49.chunk.js
Normal file
3
static/mobile/static/js/2.68967b49.chunk.js
Normal file
File diff suppressed because one or more lines are too long
65
static/mobile/static/js/2.68967b49.chunk.js.LICENSE.txt
Normal file
65
static/mobile/static/js/2.68967b49.chunk.js.LICENSE.txt
Normal file
@ -0,0 +1,65 @@
|
|||||||
|
/*
|
||||||
|
object-assign
|
||||||
|
(c) Sindre Sorhus
|
||||||
|
@license MIT
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Copyright (c) 2018 Jed Watson.
|
||||||
|
Licensed under the MIT License (MIT), see
|
||||||
|
http://jedwatson.github.io/classnames
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*!@license
|
||||||
|
* UAParser.js v0.7.28
|
||||||
|
* Lightweight JavaScript-based User-Agent string parser
|
||||||
|
* https://github.com/faisalman/ua-parser-js
|
||||||
|
*
|
||||||
|
* Copyright © 2012-2021 Faisal Salman <f@faisalman.com>
|
||||||
|
* Licensed under MIT License
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @license React v0.20.2
|
||||||
|
* scheduler.production.min.js
|
||||||
|
*
|
||||||
|
* Copyright (c) Facebook, Inc. and its affiliates.
|
||||||
|
*
|
||||||
|
* This source code is licensed under the MIT license found in the
|
||||||
|
* LICENSE file in the root directory of this source tree.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @license React v16.13.1
|
||||||
|
* react-is.production.min.js
|
||||||
|
*
|
||||||
|
* Copyright (c) Facebook, Inc. and its affiliates.
|
||||||
|
*
|
||||||
|
* This source code is licensed under the MIT license found in the
|
||||||
|
* LICENSE file in the root directory of this source tree.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @license React v17.0.2
|
||||||
|
* react-dom.production.min.js
|
||||||
|
*
|
||||||
|
* Copyright (c) Facebook, Inc. and its affiliates.
|
||||||
|
*
|
||||||
|
* This source code is licensed under the MIT license found in the
|
||||||
|
* LICENSE file in the root directory of this source tree.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @license React v17.0.2
|
||||||
|
* react-jsx-runtime.production.min.js
|
||||||
|
*
|
||||||
|
* Copyright (c) Facebook, Inc. and its affiliates.
|
||||||
|
*
|
||||||
|
* This source code is licensed under the MIT license found in the
|
||||||
|
* LICENSE file in the root directory of this source tree.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @license React v17.0.2
|
||||||
|
* react.production.min.js
|
||||||
|
*
|
||||||
|
* Copyright (c) Facebook, Inc. and its affiliates.
|
||||||
|
*
|
||||||
|
* This source code is licensed under the MIT license found in the
|
||||||
|
* LICENSE file in the root directory of this source tree.
|
||||||
|
*/
|
1
static/mobile/static/js/2.68967b49.chunk.js.map
Normal file
1
static/mobile/static/js/2.68967b49.chunk.js.map
Normal file
File diff suppressed because one or more lines are too long
2
static/mobile/static/js/3.d2558866.chunk.js
Normal file
2
static/mobile/static/js/3.d2558866.chunk.js
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
(this.webpackJsonpscodocmobile=this.webpackJsonpscodocmobile||[]).push([[3],{116:function(t,e,n){"use strict";n.r(e),n.d(e,"getCLS",(function(){return p})),n.d(e,"getFCP",(function(){return g})),n.d(e,"getFID",(function(){return F})),n.d(e,"getLCP",(function(){return k})),n.d(e,"getTTFB",(function(){return C}));var i,a,r,o,c=function(t,e){return{name:t,value:void 0===e?-1:e,delta:0,entries:[],id:"v1-".concat(Date.now(),"-").concat(Math.floor(8999999999999*Math.random())+1e12)}},u=function(t,e){try{if(PerformanceObserver.supportedEntryTypes.includes(t)){var n=new PerformanceObserver((function(t){return t.getEntries().map(e)}));return n.observe({type:t,buffered:!0}),n}}catch(t){}},s=function(t,e){var n=function n(i){"pagehide"!==i.type&&"hidden"!==document.visibilityState||(t(i),e&&(removeEventListener("visibilitychange",n,!0),removeEventListener("pagehide",n,!0)))};addEventListener("visibilitychange",n,!0),addEventListener("pagehide",n,!0)},f=function(t){addEventListener("pageshow",(function(e){e.persisted&&t(e)}),!0)},d="function"==typeof WeakSet?new WeakSet:new Set,m=function(t,e,n){var i;return function(){e.value>=0&&(n||d.has(e)||"hidden"===document.visibilityState)&&(e.delta=e.value-(i||0),(e.delta||void 0===i)&&(i=e.value,t(e)))}},p=function(t,e){var n,i=c("CLS",0),a=function(t){t.hadRecentInput||(i.value+=t.value,i.entries.push(t),n())},r=u("layout-shift",a);r&&(n=m(t,i,e),s((function(){r.takeRecords().map(a),n()})),f((function(){i=c("CLS",0),n=m(t,i,e)})))},v=-1,l=function(){return"hidden"===document.visibilityState?0:1/0},h=function(){s((function(t){var e=t.timeStamp;v=e}),!0)},S=function(){return v<0&&(v=l(),h(),f((function(){setTimeout((function(){v=l(),h()}),0)}))),{get timeStamp(){return v}}},g=function(t,e){var n,i=S(),a=c("FCP"),r=u("paint",(function(t){"first-contentful-paint"===t.name&&(r&&r.disconnect(),t.startTime<i.timeStamp&&(a.value=t.startTime,a.entries.push(t),d.add(a),n()))}));r&&(n=m(t,a,e),f((function(i){a=c("FCP"),n=m(t,a,e),requestAnimationFrame((function(){requestAnimationFrame((function(){a.value=performance.now()-i.timeStamp,d.add(a),n()}))}))})))},y={passive:!0,capture:!0},w=new Date,E=function(t,e){i||(i=e,a=t,r=new Date,b(removeEventListener),L())},L=function(){if(a>=0&&a<r-w){var t={entryType:"first-input",name:i.type,target:i.target,cancelable:i.cancelable,startTime:i.timeStamp,processingStart:i.timeStamp+a};o.forEach((function(e){e(t)})),o=[]}},T=function(t){if(t.cancelable){var e=(t.timeStamp>1e12?new Date:performance.now())-t.timeStamp;"pointerdown"==t.type?function(t,e){var n=function(){E(t,e),a()},i=function(){a()},a=function(){removeEventListener("pointerup",n,y),removeEventListener("pointercancel",i,y)};addEventListener("pointerup",n,y),addEventListener("pointercancel",i,y)}(e,t):E(e,t)}},b=function(t){["mousedown","keydown","touchstart","pointerdown"].forEach((function(e){return t(e,T,y)}))},F=function(t,e){var n,r=S(),p=c("FID"),v=function(t){t.startTime<r.timeStamp&&(p.value=t.processingStart-t.startTime,p.entries.push(t),d.add(p),n())},l=u("first-input",v);n=m(t,p,e),l&&s((function(){l.takeRecords().map(v),l.disconnect()}),!0),l&&f((function(){var r;p=c("FID"),n=m(t,p,e),o=[],a=-1,i=null,b(addEventListener),r=v,o.push(r),L()}))},k=function(t,e){var n,i=S(),a=c("LCP"),r=function(t){var e=t.startTime;e<i.timeStamp&&(a.value=e,a.entries.push(t)),n()},o=u("largest-contentful-paint",r);if(o){n=m(t,a,e);var p=function(){d.has(a)||(o.takeRecords().map(r),o.disconnect(),d.add(a),n())};["keydown","click"].forEach((function(t){addEventListener(t,p,{once:!0,capture:!0})})),s(p,!0),f((function(i){a=c("LCP"),n=m(t,a,e),requestAnimationFrame((function(){requestAnimationFrame((function(){a.value=performance.now()-i.timeStamp,d.add(a),n()}))}))}))}},C=function(t){var e,n=c("TTFB");e=function(){try{var e=performance.getEntriesByType("navigation")[0]||function(){var t=performance.timing,e={entryType:"navigation",startTime:0};for(var n in t)"navigationStart"!==n&&"toJSON"!==n&&(e[n]=Math.max(t[n]-t.navigationStart,0));return e}();n.value=n.delta=e.responseStart,n.entries=[e],t(n)}catch(t){}},"complete"===document.readyState?setTimeout(e,0):addEventListener("pageshow",e)}}}]);
|
||||||
|
//# sourceMappingURL=3.d2558866.chunk.js.map
|
1
static/mobile/static/js/3.d2558866.chunk.js.map
Normal file
1
static/mobile/static/js/3.d2558866.chunk.js.map
Normal file
File diff suppressed because one or more lines are too long
2
static/mobile/static/js/main.9d1150c9.chunk.js
Normal file
2
static/mobile/static/js/main.9d1150c9.chunk.js
Normal file
File diff suppressed because one or more lines are too long
1
static/mobile/static/js/main.9d1150c9.chunk.js.map
Normal file
1
static/mobile/static/js/main.9d1150c9.chunk.js.map
Normal file
File diff suppressed because one or more lines are too long
2
static/mobile/static/js/runtime-main.b827b16d.js
Normal file
2
static/mobile/static/js/runtime-main.b827b16d.js
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
!function(e){function r(r){for(var n,i,a=r[0],c=r[1],l=r[2],s=0,p=[];s<a.length;s++)i=a[s],Object.prototype.hasOwnProperty.call(o,i)&&o[i]&&p.push(o[i][0]),o[i]=0;for(n in c)Object.prototype.hasOwnProperty.call(c,n)&&(e[n]=c[n]);for(f&&f(r);p.length;)p.shift()();return u.push.apply(u,l||[]),t()}function t(){for(var e,r=0;r<u.length;r++){for(var t=u[r],n=!0,a=1;a<t.length;a++){var c=t[a];0!==o[c]&&(n=!1)}n&&(u.splice(r--,1),e=i(i.s=t[0]))}return e}var n={},o={1:0},u=[];function i(r){if(n[r])return n[r].exports;var t=n[r]={i:r,l:!1,exports:{}};return e[r].call(t.exports,t,t.exports,i),t.l=!0,t.exports}i.e=function(e){var r=[],t=o[e];if(0!==t)if(t)r.push(t[2]);else{var n=new Promise((function(r,n){t=o[e]=[r,n]}));r.push(t[2]=n);var u,a=document.createElement("script");a.charset="utf-8",a.timeout=120,i.nc&&a.setAttribute("nonce",i.nc),a.src=function(e){return i.p+"static/js/"+({}[e]||e)+"."+{3:"d2558866"}[e]+".chunk.js"}(e);var c=new Error;u=function(r){a.onerror=a.onload=null,clearTimeout(l);var t=o[e];if(0!==t){if(t){var n=r&&("load"===r.type?"missing":r.type),u=r&&r.target&&r.target.src;c.message="Loading chunk "+e+" failed.\n("+n+": "+u+")",c.name="ChunkLoadError",c.type=n,c.request=u,t[1](c)}o[e]=void 0}};var l=setTimeout((function(){u({type:"timeout",target:a})}),12e4);a.onerror=a.onload=u,document.head.appendChild(a)}return Promise.all(r)},i.m=e,i.c=n,i.d=function(e,r,t){i.o(e,r)||Object.defineProperty(e,r,{enumerable:!0,get:t})},i.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.t=function(e,r){if(1&r&&(e=i(e)),8&r)return e;if(4&r&&"object"===typeof e&&e&&e.__esModule)return e;var t=Object.create(null);if(i.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:e}),2&r&&"string"!=typeof e)for(var n in e)i.d(t,n,function(r){return e[r]}.bind(null,n));return t},i.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return i.d(r,"a",r),r},i.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},i.p="./",i.oe=function(e){throw console.error(e),e};var a=this.webpackJsonpscodocmobile=this.webpackJsonpscodocmobile||[],c=a.push.bind(a);a.push=r,a=a.slice();for(var l=0;l<a.length;l++)r(a[l]);var f=c;t()}([]);
|
||||||
|
//# sourceMappingURL=runtime-main.b827b16d.js.map
|
1
static/mobile/static/js/runtime-main.b827b16d.js.map
Normal file
1
static/mobile/static/js/runtime-main.b827b16d.js.map
Normal file
File diff suppressed because one or more lines are too long
Loading…
Reference in New Issue
Block a user