forked from ScoDoc/ScoDoc
73 lines
1.9 KiB
Python
73 lines
1.9 KiB
Python
|
"""
|
||
|
Formulaire configuration liens personalisés (menu "Liens")
|
||
|
"""
|
||
|
|
||
|
from flask import g, url_for
|
||
|
from flask_wtf import FlaskForm
|
||
|
from wtforms import FieldList, Form, validators
|
||
|
from wtforms.fields.simple import BooleanField, StringField, SubmitField
|
||
|
|
||
|
from app.models import ScoDocSiteConfig
|
||
|
|
||
|
|
||
|
class _PersonalizedLinksForm(FlaskForm):
|
||
|
"form. définition des liens personnalisés"
|
||
|
# construit dynamiquement ci-dessous
|
||
|
|
||
|
|
||
|
def PersonalizedLinksForm() -> _PersonalizedLinksForm:
|
||
|
"Création d'un formulaire pour éditer les liens"
|
||
|
|
||
|
# Formulaire dynamique, on créé une classe ad-hoc
|
||
|
class F(_PersonalizedLinksForm):
|
||
|
pass
|
||
|
|
||
|
F.links_by_id = dict(enumerate(ScoDocSiteConfig.get_perso_links()))
|
||
|
|
||
|
def _gen_link_form(idx):
|
||
|
setattr(
|
||
|
F,
|
||
|
f"link_{idx}",
|
||
|
StringField(
|
||
|
f"Titre",
|
||
|
validators=[
|
||
|
validators.Optional(),
|
||
|
validators.Length(min=1, max=80),
|
||
|
],
|
||
|
default="",
|
||
|
render_kw={"size": 6},
|
||
|
),
|
||
|
)
|
||
|
setattr(
|
||
|
F,
|
||
|
f"link_url_{idx}",
|
||
|
StringField(
|
||
|
f"URL",
|
||
|
description="adresse, incluant le http.",
|
||
|
validators=[
|
||
|
validators.Optional(),
|
||
|
validators.URL(),
|
||
|
validators.Length(min=1, max=256),
|
||
|
],
|
||
|
default="",
|
||
|
),
|
||
|
)
|
||
|
setattr(
|
||
|
F,
|
||
|
f"link_with_args_{idx}",
|
||
|
BooleanField(
|
||
|
f"ajouter arguments",
|
||
|
description="query string avec ids",
|
||
|
),
|
||
|
)
|
||
|
|
||
|
# Initialise un champ de saisie par lien
|
||
|
for idx in F.links_by_id:
|
||
|
_gen_link_form(idx)
|
||
|
_gen_link_form("new")
|
||
|
|
||
|
F.submit = SubmitField("Valider")
|
||
|
F.cancel = SubmitField("Annuler", render_kw={"formnovalidate": True})
|
||
|
|
||
|
return F()
|