Compare commits

..

49 Commits

Author SHA1 Message Date
Corentin Sechet 7316380a38 manche: create theme (#88587)
gitea/publik-base-theme/pipeline/head This commit looks good Details
2024-04-02 11:40:43 +02:00
Frédéric Péters bec5b85a0b build: distribute variant templates content (#88848)
gitea/publik-base-theme/pipeline/head This commit looks good Details
2024-03-29 12:24:41 +01:00
Frédéric Péters 1e44f1e6e4 toodego: add alternative attribute names for silo properties (#88758)
gitea/publik-base-theme/pipeline/head This commit looks good Details
2024-03-29 08:29:35 +01:00
Frédéric Péters 177075b6c3 scss: allow for <p> tags in file widget (#88608)
gitea/publik-base-theme/pipeline/head This commit looks good Details
2024-03-25 11:38:08 +01:00
Thomas Jund 556090a4a6 css: replace sass grayscale() by native css grayscale filter (#88388)
gitea/publik-base-theme/pipeline/head This commit looks good Details
2024-03-22 09:41:34 +01:00
Thomas Jund e139dff369 scss: introduce $edge-gutter & $edge-gutter-mobile (#85848)
gitea/publik-base-theme/pipeline/head This commit looks good Details
2024-03-20 15:03:22 +01:00
Thomas NOËL adfc8d2964 build: replace Pool with ThreadPool to avoid pickle issues (#88335)
gitea/publik-base-theme/pipeline/head This commit looks good Details
2024-03-19 15:39:06 +01:00
Frédéric Péters f6d6ea0e8b build: distribute script used to create villeurbanne base file (#88322)
gitea/publik-base-theme/pipeline/head This commit looks good Details
2024-03-19 09:21:40 +01:00
Corentin Sechet 3bf4de97c3 misc: add missing files to .gitignore (#88267)
gitea/publik-base-theme/pipeline/head This commit looks good Details
2024-03-19 08:54:46 +01:00
Paul Marillonnet 1d89bbf5d0 templates/a2: provide disambiguation on registration helptext (#88148)
gitea/publik-base-theme/pipeline/head This commit looks good Details
2024-03-18 16:50:28 +01:00
Paul Marillonnet 199f2ca818 templates/a2: disambiguate password recovery helptext (#88149)
gitea/publik-base-theme/pipeline/head This commit looks good Details
2024-03-18 16:47:44 +01:00
Frédéric Péters 4e4acc0675 debian: include old symlink targets maintscript (#88299)
gitea/publik-base-theme/pipeline/head This commit looks good Details
2024-03-18 15:16:11 +01:00
Frédéric Péters 2317ed86c1 debian: do not include package name in maintscript (#88298)
gitea/publik-base-theme/pipeline/head This commit looks good Details
2024-03-18 14:48:05 +01:00
Thomas Jund aa1280d1c9 css: remove duplicated code (#88200)
gitea/publik-base-theme/pipeline/head This commit looks good Details
2024-03-18 10:30:49 +01:00
Frédéric Péters d411c6b830 debian: declare symlinks replaced by directories (#88263)
gitea/publik-base-theme/pipeline/head This commit looks good Details
2024-03-18 09:26:17 +01:00
Frédéric Péters e3cff5cc9f build: do not recreate images in install phase (#88254)
gitea/publik-base-theme/pipeline/head Build queued... Details
2024-03-18 09:26:07 +01:00
Frédéric Péters 20faa54dc6 build: adapt compile-and-reload.sh after switch to setuptools (#88256)
gitea/publik-base-theme/pipeline/head This commit looks good Details
2024-03-16 08:24:01 +01:00
Lauréline Guérin 98aaf3925f famille: widget for invoices and lines selection (#86611)
gitea/publik-base-theme/pipeline/head This commit looks good Details
2024-03-15 08:23:45 +01:00
Frédéric Péters 8e14778846 translation update
gitea/publik-base-theme/pipeline/head This commit looks good Details
2024-03-15 07:29:46 +01:00
Frédéric Péters a539379c3f ci: update for new build system (#71292) 2024-03-15 07:29:46 +01:00
Frédéric Péters 78aaf7afc2 debian: update packaging for new build system (#71292) 2024-03-15 07:29:46 +01:00
Frédéric Péters b4bcf070c0 build: switch from Makefile to setuptools (#71292) 2024-03-15 07:29:46 +01:00
Frédéric Péters f6273ca4e0 build: allow running image scripts in parallel (#71292) 2024-03-15 07:29:46 +01:00
Frédéric Péters 5b4e750b7c build: allow running image scripts from base directory (#71292) 2024-03-15 07:29:46 +01:00
Frédéric Péters 8e61577d66 add French translation file (#71292) 2024-03-15 07:29:46 +01:00
Frédéric Péters ca6bb478eb misc: do not mark French strings for translation (#71292) 2024-03-15 07:29:46 +01:00
Frédéric Péters a899695dab misc: add django app for translations (#71292) 2024-03-15 07:29:46 +01:00
Frédéric Péters 081fe9dec8 scss: use site font in leaflet maps (#88117)
gitea/publik-base-theme/pipeline/head This commit looks good Details
2024-03-14 07:57:11 +01:00
Serghei Mihai dc2f44d7be help: add doc about vertical alignment of items with images (#87921)
gitea/publik-base-theme/pipeline/head This commit looks good Details
2024-03-08 09:45:14 +01:00
Thomas Jund 1018bbbc97 famille: correct for id relation in reservation-recurentes widget (#87893)
gitea/publik-base-theme/pipeline/head This commit looks good Details
2024-03-07 16:19:48 +01:00
Thomas Jund b40f288b0b scss: apply $form-title-style only on form title (#86609)
gitea/publik-base-theme/pipeline/head This commit looks good Details
2024-03-05 12:27:11 +01:00
Thomas Jund 793b3503b6 thonon-agglomeration-2021: add .inline-links-list class option for cell links-list (#86685)
gitea/publik-base-theme/pipeline/head This commit looks good Details
2024-03-05 12:24:09 +01:00
Frédéric Péters 902869107c templates: add back_url for lingo basket (#87237)
gitea/publik-base-theme/pipeline/head This commit looks good Details
2024-03-05 11:21:52 +01:00
Thomas Jund 271f112435 scss: correct --hover-color value of mixin button-with-icon (#86012)
gitea/publik-base-theme/pipeline/head This commit looks good Details
2024-03-04 15:21:12 +01:00
Thomas Jund 2b09ec3c11 css: limits removal of ul style only to checkboxes and radios lists (#86669)
gitea/publik-base-theme/pipeline/head Build queued... Details
2024-03-04 15:20:04 +01:00
Thomas Jund 89a71ed6c2 scss: introduce .bare-list util css class (#22264)
gitea/publik-base-theme/pipeline/head This commit looks good Details
2024-03-04 15:18:22 +01:00
Thomas Jund 4c46003717 misc: modify nearby map marker display (#87183)
gitea/publik-base-theme/pipeline/head This commit looks good Details
2024-02-29 11:30:40 +01:00
Frédéric Péters 9687c89a31 general: add new theme for vendargues (#87142)
gitea/publik-base-theme/pipeline/head This commit looks good Details
2024-02-29 10:46:14 +01:00
Frédéric Péters e4d29d87da fonts: add Kumbh Sans (#87142) 2024-02-29 10:46:14 +01:00
Paul Marillonnet 361f4321e2 univ-smb: add native integration (#85691)
gitea/publik-base-theme/pipeline/head This commit looks good Details
2024-02-28 13:32:42 +01:00
Corentin Sechet c36d8200ee entrouvert: fix logo hidden in low resolutions (#78259)
gitea/publik-base-theme/pipeline/head This commit looks good Details
2024-02-27 10:22:15 +01:00
Nicolas Roche 1c2909da39 toulouse-2022: [parsifal] import json cells scss in backoffice (#86905)
gitea/publik-base-theme/pipeline/head This commit looks good Details
2024-02-26 09:53:01 +01:00
Frédéric Péters be4a066dc5 braine-l-alleud: add reference to queue fair script (#87268)
gitea/publik-base-theme/pipeline/head This commit looks good Details
2024-02-24 10:57:38 +01:00
Frédéric Péters 6f7e2e695b templates: get nearby forms intro text from a variable (#87065)
gitea/publik-base-theme/pipeline/head This commit looks good Details
2024-02-23 21:17:34 +01:00
Frédéric Péters 48de2fcff1 templates: add django blocks with no paddings to mini-base (#87202)
gitea/publik-base-theme/pipeline/head This commit looks good Details
2024-02-23 21:17:18 +01:00
Thomas Jund 82e78429c0 montpellier-2023 :add global padding to cell (#86664)
gitea/publik-base-theme/pipeline/head This commit looks good Details
2024-02-20 10:44:37 +01:00
Thomas Jund 2a55ddefcb montpellier-2023: make reporting_link json cell more generic (#86660) 2024-02-20 10:44:37 +01:00
Thomas Jund dc14527a07 montpellier-2023: change map widget height (#86896) 2024-02-20 10:44:37 +01:00
Benjamin Dauvergne f899632465 bouches-du-rhone: reorder the menu (#87140)
gitea/publik-base-theme/pipeline/head This commit looks good Details
2024-02-19 12:24:06 +01:00
79 changed files with 1544 additions and 227 deletions

4
.gitignore vendored
View File

@ -26,3 +26,7 @@ static/toulouse-2022/backoffice.css.map
/debian/publik-base-theme.debhelper.log
/debian/.debhelper/
*.patch
/tmp-*
/build
/publik_base_theme.egg-info
/publik_base_theme/locale/**/*.mo

2
Jenkinsfile vendored
View File

@ -9,7 +9,7 @@ pipeline {
script {
sh 'tox -rv' // makes pre-commit check style
if (env.GIT_BRANCH.startsWith('wip/')) {
sh 'make css'
sh 'python3 setup.py compile_scss'
}
sh '(cd help/fr/ && if [ $(yelp-build html *.page 2>&1 | wc -c) -ne 0 ]; then exit 1; fi)'
sh 'git clean -xdf'

22
MANIFEST.in Normal file
View File

@ -0,0 +1,22 @@
# static
recursive-include static *.scss *.css *.js *.ico *.gif *.svg *.png *.jpg *.jpeg *.woff *.woff2 *.ttf *.map *.json *.eot *.otf
# templates
recursive-include templates *.html *.txt *.py
# documentation
recursive-include help *.page *.png
# scripts & pictos
recursive-include src *.py *.svg
# locales
recursive-include publik_base_theme/locale *.po *.mo
include MANIFEST.in
include COPYING
include VERSION
include inkscape_wrapper.py
include themes.json
include create_themes_json.py
include make_data_uris.py

View File

@ -1,96 +0,0 @@
VERSION=`git describe | sed 's/^v//; s/-/./g' `
NAME="publik-base-theme"
INKSCAPE=$(shell pwd)/src/inkscape_wrapper.py
prefix = /usr
all: themes.json icons css
static/includes/_data_uris.scss: $(wildcard static/includes/img/*)
python3 make_data_uris.py static/includes/
static/toodego/_data_uris.scss: $(wildcard static/toodego/img/*)
python3 make_data_uris.py static/toodego/
static/lille/_data_uris.scss: $(wildcard static/lille/img/*)
python3 make_data_uris.py static/lille/
static/lomme/_data_uris.scss: $(wildcard static/lomme/img/*)
python3 make_data_uris.py static/lomme/
static/hellemmes/_data_uris.scss: $(wildcard static/hellemmes/img/*)
python3 make_data_uris.py static/hellemmes/
static/toulouse-2022/_data_uris.scss: $(wildcard static/toulouse-2022/img/*)
python3 make_data_uris.py static/toulouse-2022/
themes.json: $(wildcard static/*/config.json) help/fr/misc-scss.page
python3 create_themes_json.py
%.css: export LC_ALL=C.UTF-8
.SECONDEXPANSION:
%.css: %.scss $(wildcard static/includes/*.scss static/includes/*/*.scss) static/includes/_data_uris.scss static/lille/_data_uris.scss static/lomme/_data_uris.scss static/hellemmes/_data_uris.scss static/toodego/_data_uris.scss static/toulouse-2022/_data_uris.scss $$(wildcard $$(@D)/*.scss)
sassc --sourcemap $< $@
css: $(shell python3 get_themes.py) static/portal-agent/css/agent-portal.css static/includes/gadjo-extra.css
rm -rf static/*/.sass-cache/
icons:
# chateauroux
cd src/ && python3 render-imgs-dashboard.py ../static/chateauroux/img/ --normal 333333 --selected 0779B7 --title FFFFFF --title-width 80
# orleans
cd src/ && python3 render-imgs-categories.py ../static/orleans/img/ --primary f05923 --secondary 34697D
cd src/ && python3 render-imgs-dashboard.py ../static/orleans/img/ --normal FFFFFF --normal-width 30 --selected f05923 --selected-width 30 --title FFFFFF --title-width 80
# publik
cd src/ && python3 render-imgs-categories.py ../static/publik/img/
cd src/ && python3 render-imgs-dashboard.py ../static/publik/img/ --normal 4D4D4D --selected DF017A --title FFFFFF --title-width 80
# somme
cd src/ && python3 render-imgs-categories.py ../static/somme-cd80/img/ --primary A8002B --secondary A8002B
cd src/ && python3 render-imgs-dashboard.py ../static/somme-cd80/img/ --normal 4D4D4D --selected 87A738 --title FFFFFF --title-width 80
# tournai
cd static/tournai/ && for F in assets/*.svg; do $(INKSCAPE) --without-gui --file $$F --export-area-drawing --export-area-snap --export-png img/$$(basename $$F .svg).png --export-width 40; done
clean:
rm -rf sdist
rm -f src/tmp-*.svg
rm -f static/*/_data_uris.scss
-rm $$(python3 get_themes.py --include-map-files)
-rm static/portal-agent/css/agent-portal.css static/portal-agent/css/agent-portal.css.map static/includes/gadjo-extra.css static/includes/gadjo-extra.css.map
DIST_FILES = \
Makefile \
desc.xml \
create_themes_json.py \
get_themes.py \
make_data_uris.py \
static templates \
src \
help
dist: clean
-mkdir sdist
rm -rf sdist/$(NAME)-$(VERSION)
mkdir -p sdist/$(NAME)-$(VERSION)
for i in $(DIST_FILES); do \
cp -R "$$i" sdist/$(NAME)-$(VERSION); \
done
install:
mkdir -p $(DESTDIR)$(prefix)/share/publik/themes/publik-base
cp -r static templates themes.json desc.xml $(DESTDIR)$(prefix)/share/publik/themes/publik-base
rm $(DESTDIR)$(prefix)/share/publik/themes/publik-base/static/*/config.json
mkdir -p $(DESTDIR)$(prefix)/share/wcs/themes/
ln -s $(prefix)/share/publik/themes/publik-base $(DESTDIR)$(prefix)/share/wcs/themes/publik-base
dist-bzip2: dist
-mkdir sdist
cd sdist && tar cfj ../sdist/$(NAME)-$(VERSION).tar.bz2 $(NAME)-$(VERSION)
version:
@(echo $(VERSION))
name:
@(echo $(NAME))
fullname:
@(echo $(NAME)-$(VERSION))

7
README
View File

@ -458,6 +458,13 @@ copyright notices:
#
# https://www.fontsquirrel.com/license/arimo
* Kumbh Sans
# Copyright 2020 The KumbhSans Project Authors (https://github.com/xconsau/KumbhSans)
#
# This Font Software is licensed under the SIL Open Font License, Version 1.1.
#
# https://github.com/xconsau/KumbhSans/blob/master/OFL.txt
~~~~
Some theme variant files have their own specific licenses; refer to

View File

@ -4,4 +4,4 @@
# is stopped properly on ctrl-c
trap 'kill %1' SIGINT
./livereload-server & iwatch -r -t '.scss' -e modify -c "make css" .
./livereload-server & iwatch -r -t '.scss' -e modify -c "python3 setup.py compile_scss" .

5
debian/control vendored
View File

@ -3,8 +3,12 @@ Section: web
Priority: optional
Maintainer: Frédéric Péters <fpeters@entrouvert.com>
Build-Depends: debhelper-compat (= 12),
dh-python,
inkscape,
python3,
python3-all,
python3-django,
python3-setuptools,
sassc (>= 3.4.2),
Standards-Version: 3.9.4
Homepage: http://git.entrouvert.org/publik-base-theme.git
@ -13,6 +17,7 @@ Package: publik-base-theme
Architecture: all
Depends: python3-gadjo,
${misc:Depends},
${python3:Depends},
${shlibs:Depends},
Conflicts: python-authentic2 (<< 2.1.20.742.gb6ee096-0),
python-django (<= 1:1.11),

View File

@ -1 +1,13 @@
symlink_to_dir /usr/share/publik/themes/publik-base/templates/variants/alpes-maritimes-2022/combo/json ../../alpes-maritimes-2018/combo/json 9.28.5.g9ac5c2ba~
symlink_to_dir /usr/share/publik/themes/publik-base/templates/variants/boussu-2022/combo/json ../../braine-l-alleud/combo/json 10.47-1~
symlink_to_dir /usr/share/publik/themes/publik-base/templates/variants/boussu-2022/combo/wcs ../../braine-l-alleud/combo/wcs 10.47-1~
symlink_to_dir /usr/share/publik/themes/publik-base/templates/variants/eybens izi-ici 10.47-1~
symlink_to_dir /usr/share/publik/themes/publik-base/templates/variants/grenoble izi-ici 10.47-1~
symlink_to_dir /usr/share/publik/themes/publik-base/templates/variants/grenoble-metropole-2022 izi-ici 10.47-1~
symlink_to_dir /usr/share/publik/themes/publik-base/templates/variants/hellemmes lille 10.47-1~
symlink_to_dir /usr/share/publik/themes/publik-base/templates/variants/la-seyne-sur-mer sictiam 10.47-1~
symlink_to_dir /usr/share/publik/themes/publik-base/templates/variants/lomme lille 10.47-1~
symlink_to_dir /usr/share/publik/themes/publik-base/templates/variants/massoins sictiam 10.47-1~
symlink_to_dir /usr/share/publik/themes/publik-base/templates/variants/pays-de-grasse sictiam 10.47-1~
symlink_to_dir /usr/share/publik/themes/publik-base/templates/variants/saint-vallier-de-thiey sictiam 10.47-1~
symlink_to_dir /usr/share/publik/themes/publik-base/templates/variants/sospel sictiam 10.47-1~

9
debian/rules vendored
View File

@ -9,8 +9,9 @@
# Uncomment this to turn on verbose mode.
#export DH_VERBOSE=1
%:
dh $@
export PYBUILD_NAME=publik-django-templatetags
export PYBUILD_DISABLE=test
override_dh_auto_build:
dh_auto_build --no-parallel
%:
dh $@ --with python3 --buildsystem=pybuild

View File

@ -140,6 +140,10 @@ de classes CSS réutilisables.
<td><p><code>pk-horizontal-radiobuttons</code></p></td>
<td><p>Aligne horizontalement les boutons radio dun champ « liste ».</p></td>
</tr>
<tr>
<td><p><code>pk-vertical-items</code></p></td>
<td><p>Aligne verticalement les items des champs « liste à choix multiple » et « liste » affichés sous forme dimages.</p></td>
</tr>
</table>
</section>

View File

@ -146,6 +146,11 @@ paramètre, la deuxième sa description et la troisième la valeur par défaut.
<td><p>Espace (« gouttière ») entre la barre latérale et les colonnes.</p></td>
<td><p><var>$columns-gutter</var></p></td>
</tr>
<tr>
<td><p><code>$edge-gutter</code></p></td>
<td><p>Espace (« gouttière ») entre le contenu et le bord du navigateur.</p></td>
<td><p><var>legacy</var></p></td>
</tr>
<tr>
<td><p><code>$grid-gutter</code></p></td>
<td><p>Espace (« gouttière ») entre les éléments disposés en grille.</p></td>
@ -391,6 +396,11 @@ paramètre, la deuxième sa description et la troisième la valeur par défaut.
<td><p>Largeur maximale de la page "mobile"</p></td>
<td><p><var>null</var></p></td>
</tr>
<tr>
<td><p><code>$edge-gutter-mobile</code></p></td>
<td><p>Espace (« gouttière ») entre le contenu et le bord du navigateur.</p></td>
<td><p><var>$edge-gutter</var></p></td>
</tr>
<tr>
<td><p><code>$nav-mobile-limit</code></p></td>
<td><p>Largeur sous laquelle adopter la navigation "mobile"</p></td>

22
manage.py Executable file
View File

@ -0,0 +1,22 @@
#!/usr/bin/env python
"""Django's command-line utility for administrative tasks."""
import os
import sys
def main():
"""Run administrative tasks."""
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'publik_base_theme.settings')
try:
from django.core.management import execute_from_command_line
except ImportError as exc:
raise ImportError(
"Couldn't import Django. Are you sure it's installed and "
'available on your PYTHONPATH environment variable? Did you '
'forget to activate a virtual environment?'
) from exc
execute_from_command_line(sys.argv)
if __name__ == '__main__':
main()

View File

View File

@ -0,0 +1,348 @@
# publik-base-theme French translation
# Copyright (C) Entrouvert
# This file is distributed under the same license as the publik-base-theme package.
#
msgid ""
msgstr ""
"Project-Id-Version: publik-base-theme 0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-03-07 08:01+0100\n"
"PO-Revision-Date: 2024-03-07 08:14+0100\n"
"Language: French\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
#: templates/authentic2/base.html
msgid "there are errors in the form"
msgstr "le formulaire présente des erreurs"
#: templates/authentic2/login.html
#: templates/variants/alpes-maritimes-2018/authentic2_auth_saml/login_cd06-adfs.html
#: templates/variants/alpes-maritimes-2022/authentic2_auth_saml/login_cd06-adfs.html
#: templates/variants/marseille/authentic2_auth_saml/login_marseille-adfs.html
#: templates/variants/tournai/authentic2_auth_fedict/login.html
msgid "Login"
msgstr "Connexion"
#: templates/beid/login_form.html
#: templates/variants/grandlyon-glc/authentic2/login_password_form.html
#: templates/variants/quimper/authentic2/login_password_form.html
#: templates/variants/strasbourg-2018/authentic2/login_password_form.html
#: templates/variants/tournai/authentic2/login_password_form.html
msgid "Log in"
msgstr "Connexion"
#: templates/beid/profile.html
msgid "Belgian eID card"
msgstr "Carte eID"
#: templates/beid/profile.html
#: templates/variants/strasbourg-2018/authentic2/accounts_edit_photo.html
msgid "Delete"
msgstr "Supprimer"
#: templates/combo/json/arpege_demands.html
#: templates/variants/toulouse-2022/combo/wcs/user_all_forms.html
msgid "There are no forms."
msgstr "Il ny a aucune demande."
#: templates/combo/page_template.html
#: templates/variants/nimes/combo/page_template_2sidebars.html
msgid "Top of content"
msgstr "Haut du contenu"
#: templates/combo/page_template.html
#: templates/portal-agent/combo/page_template.html
#: templates/portal-agent/combo/page_template_sidebar.html
#: templates/variants/nimes/combo/page_template_2sidebars.html
#: templates/variants/strasbourg-2018/combo/page_template.html
msgid "Content"
msgstr "Contenu"
#: templates/combo/page_template.html
#: templates/variants/nimes/combo/page_template_2sidebars.html
msgid "Bottom of content"
msgstr "Bas du contenu"
#: templates/combo/page_template.html
#: templates/variants/avray/combo/page_template.html
#: templates/variants/coprec/combo/page_template.html
#: templates/variants/montlouis-sur-loire/combo/page_template.html
#: templates/variants/strasbourg-2018/combo/page_template.html
msgid "Footer"
msgstr "Pied de page"
#: templates/combo/page_template_2cols.html
#: templates/combo/page_template_2cols_sidebar.html
#: templates/portal-agent/combo/page_template_2cols.html
#: templates/portal-agent/combo/page_template_2cols_sidebar.html
#: templates/variants/amiens-metropole/combo/page_template_homepage.html
#: templates/variants/lille/combo/page_template_homepage.html
#: templates/variants/meudon-2021/combo/page_template_homepage.html
msgid "Left column"
msgstr "Colonne de gauche"
#: templates/combo/page_template_2cols.html
#: templates/combo/page_template_2cols_sidebar.html
#: templates/portal-agent/combo/page_template_2cols.html
#: templates/portal-agent/combo/page_template_2cols_sidebar.html
#: templates/variants/amiens-metropole/combo/page_template_homepage.html
#: templates/variants/lille/combo/page_template_homepage.html
#: templates/variants/meudon-2021/combo/page_template_homepage.html
msgid "Right column"
msgstr "Colonne de droite"
#: templates/combo/page_template_sidebar.html
#: templates/portal-agent/combo/page_template_2cols_sidebar.html
#: templates/portal-agent/combo/page_template_sidebar.html
#: templates/variants/thonon-agglomeration-2021/combo/page_template_sidebar.html
msgid "Sidebar"
msgstr "Barre latérale"
#: templates/hobo/maintenance/maintenance_page.html
msgid "This site is currently unavailable."
msgstr "Ce site est actuellement indisponible."
#: templates/qommon/forms/widgets/includes/cartads-piece.html
msgid "Drop a file or click to select one"
msgstr "Déposez un fichier ou cliquez pour en sélectionner un."
#: templates/qommon/forms/widgets/includes/cartads-piece.html
msgid "Upload done"
msgstr "Téléchargement terminé."
#: templates/qommon/forms/widgets/includes/cartads-piece.html
#: templates/variants/toodego/qommon/forms/widgets/photo-x.html
msgid "Upload in progress..."
msgstr "Téléchargement en cours…"
#: templates/qommon/forms/widgets/includes/cartads-piece.html
msgid "Error during upload."
msgstr "Erreur lors du transfert."
#: templates/qommon/forms/widgets/includes/cartads-piece.html
#: templates/variants/toodego/qommon/forms/widgets/photo-x.html
msgid "Remove this file"
msgstr "Retirer ce fichier"
#: templates/qommon/forms/widgets/includes/cartads-piece.html
#: templates/variants/toodego/qommon/forms/widgets/photo-x.html
msgid "remove"
msgstr "retirer"
#: templates/registration/password_reset_form.html
msgid "Resetting password"
msgstr "Mot de passe oublié"
#: templates/registration/password_reset_form.html
#: templates/variants/montpellier/registration/registration_form.html
#: templates/variants/pre-saint-gervais/registration/registration_completion_form.html
#: templates/variants/pre-saint-gervais/registration/registration_form.html
#: templates/variants/strasbourg-2018/registration/registration_completion_form.html
#: templates/variants/toulouse-metropole/registration/registration_form.html
msgid "Submit"
msgstr "Valider"
#: templates/registration/registration_form.html
#: templates/variants/strasbourg-2018/registration/registration_completion_form.html
#: templates/variants/tournai/registration/registration_form.html
msgid "Registration"
msgstr "Création dun compte"
#: templates/variants/alpes-maritimes-2018/authentic2_auth_fc/login.html
#: templates/variants/toulouse-metropole/authentic2_auth_fc/login.html
msgid "Log in with FranceConnect"
msgstr "Sidentifier avec FranceConnect"
#: templates/variants/alpes-maritimes-2018/authentic2_auth_saml/login_cd06-adfs.html
#: templates/variants/alpes-maritimes-2022/authentic2_auth_saml/login_cd06-adfs.html
#: templates/variants/bouches-du-rhone/authentic2_auth_saml/login_cd13-adfs.html
#: templates/variants/grandlyon-glc/authentic2/login_password_form.html
#: templates/variants/marseille/authentic2_auth_saml/login_marseille-adfs.html
#: templates/variants/strasbourg-2018/authentic2/accounts_edit_photo.html
msgid "Cancel"
msgstr "Annuler"
#: templates/variants/amiens-metropole/combo/page_template_homepage.html
msgid "Top Banner"
msgstr "Bandeau du haut"
#: templates/variants/amiens-metropole/combo/page_template_homepage.html
#: templates/variants/lille/combo/page_template_homepage.html
msgid "Middle column"
msgstr "Colonne du milieu"
#: templates/variants/blois/wcs/front/formdata_history.html
msgid "Log"
msgstr "Historique"
#: templates/variants/grandlyon-glc/authentic2_auth_fc/linking.html
msgid "Link with a FranceConnect account"
msgstr "Liaison avec un compte FranceConnect"
#: templates/variants/grandlyon-glc/authentic2_auth_fc/linking.html
msgid "opens in new window"
msgstr "(souvre dans une nouvelle fenêtre)"
#: templates/variants/grandlyon-glc/authentic2_auth_fc/linking.html
msgid "What is FranceConnect?"
msgstr "Quest-ce que FranceConnect ?"
#: templates/variants/isere-cd38/qommon/forms/widgets/select--ens-calendar.html
msgid "Monday"
msgstr "Lundi"
#: templates/variants/isere-cd38/qommon/forms/widgets/select--ens-calendar.html
msgid "Tuesday"
msgstr "Mardi"
#: templates/variants/isere-cd38/qommon/forms/widgets/select--ens-calendar.html
msgid "Wednesday"
msgstr "Mercredi"
#: templates/variants/isere-cd38/qommon/forms/widgets/select--ens-calendar.html
msgid "Thursday"
msgstr "Jeudi"
#: templates/variants/isere-cd38/qommon/forms/widgets/select--ens-calendar.html
msgid "Friday"
msgstr "Vendredi"
#: templates/variants/isere-cd38/qommon/forms/widgets/select--ens-calendar.html
msgid "Saturday"
msgstr "Samedi"
#: templates/variants/isere-cd38/qommon/forms/widgets/select--ens-calendar.html
msgid "Sunday"
msgstr "Dimanche"
#: templates/variants/izi-ici/authentic2_idp_oidc/authorization.html
msgid "Your email:"
msgstr "Votre adresse de courriel :"
#: templates/variants/izi-ici/authentic2_idp_oidc/authorization.html
msgid "Do not ask again"
msgstr "Ne plus redemander"
#: templates/variants/izi-ici/authentic2_idp_oidc/authorization.html
msgid "Accept"
msgstr "Accepter"
#: templates/variants/izi-ici/authentic2_idp_oidc/authorization.html
msgid "Refuse"
msgstr "Refuser"
#: templates/variants/lille/combo/wcs/tracking_code_input.html
#: templates/variants/metz-metropole-2019/combo/wcs/tracking_code_input.html
#: templates/variants/strasbourg-2018/combo/wcs/tracking_code_input.html
#: templates/variants/toodego/portal-user/combo/wcs/tracking_code_input.html
msgid "The tracking code could not been found."
msgstr "Le code de suivi na pas pu être trouvé."
#: templates/variants/lille/combo/wcs/tracking_code_input.html
#: templates/variants/metz-metropole-2019/combo/wcs/tracking_code_input.html
#: templates/variants/strasbourg-2018/combo/wcs/tracking_code_input.html
#: templates/variants/toodego/portal-user/combo/wcs/tracking_code_input.html
msgid "Tracking Code"
msgstr "Code de suivi"
#: templates/variants/lille/combo/wcs/tracking_code_input.html
#: templates/variants/metz-metropole-2019/combo/wcs/tracking_code_input.html
#: templates/variants/strasbourg-2018/combo/wcs/tracking_code_input.html
#: templates/variants/toodego/portal-user/combo/wcs/tracking_code_input.html
msgid "ex: CNPHNTFB"
msgstr "ex. : CNPHNTFB"
#: templates/variants/montlouis-sur-loire/combo/page_template.html
msgid "Services"
msgstr "Services"
#: templates/variants/montpellier/authentic2/logout.html
msgid "Continue logout"
msgstr "Continuer la déconnexion"
#: templates/variants/montpellier/subscriptions/subscriptions.html
msgid "Modify"
msgstr "Modifier"
#: templates/variants/orleans/calendar/booking_calendar_content.html
msgid "previous"
msgstr "précédent"
#: templates/variants/orleans/calendar/booking_calendar_content.html
msgid "next"
msgstr "suivant"
#: templates/variants/roannais-icitoyen/combo/search-cell.html
msgid "Search"
msgstr "Recherche"
#: templates/variants/rouen/combo/wcs/current_drafts.html
msgid "draft"
msgstr "brouillon"
#: templates/variants/sables-d-olonne-2022/combo/menu.html
msgid "active page"
msgstr "page active"
#: templates/variants/strasbourg-2018/qommon/forms/widgets/select_jsonp--address.html
msgid "Manually enter the address"
msgstr "Entrer ladresse manuellement"
#: templates/variants/strasbourg-2018/registration/registration_completion_form.html
msgid "Please fill the form to complete your registration"
msgstr "Veuillez remplir le formulaire afin de finir la création de votre compte."
#: templates/variants/toodego/combo/dashboardcell.html
msgid "Loading..."
msgstr "Chargement…"
#: templates/variants/toodego/combo/json/rsj-a-traiter.html
msgid "Created"
msgstr "Date de création"
#: templates/variants/toodego/combo/json/rsj-a-traiter.html
msgid "Last Modified"
msgstr "Dernière modification"
#: templates/variants/toodego/combo/json/rsj-a-traiter.html
msgid "Status"
msgstr "Statut"
#: templates/variants/toulouse-2022/authentic2/login_password_form.html
msgid "Forgot password?"
msgstr "Mot de passe perdu ?"
#: templates/variants/toulouse-2022/authentic2/login_password_form.html
msgid "Reset it!"
msgstr "Récupérez votre accès !"
#: templates/variants/toulouse-2022/authentic2/login_password_form.html
msgid "Not a member?"
msgstr "Pas de compte ?"
#: templates/variants/toulouse-2022/authentic2/login_password_form.html
msgid "Register!"
msgstr "Enregistrez-vous !"
#: templates/variants/toulouse-2022/combo/wcs/current_forms.html
msgid "Current Forms"
msgstr "Demandes en cours"
#: templates/variants/toulouse-2022/combo/wcs/current_forms.html
msgid "There are no current forms."
msgstr "Il ny a aucune demande en cours de traitement."
#: templates/variants/toulouse-2022/combo/wcs/user_all_forms.html
msgid "All Forms"
msgstr "Toutes les demandes"
#: templates/variants/toulouse-2022/combo/wcs/user_done_forms.html
msgid "Done Forms"
msgstr "Demandes terminées"
#: templates/variants/toulouse-2022/combo/wcs/user_done_forms.html
msgid "There are no done forms or they have been removed."
msgstr "Il ny a aucune demande traitée ou celles-ci ont été supprimées."

View File

View File

@ -0,0 +1,29 @@
# publik-base-theme
# Copyright (C) 2014-2024 Entr'ouvert
#
# This program is free software: you can redistribute it and/or modify it
# under the terms of the GNU Affero General Public License as published
# by the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
from django.core.management.commands import makemessages
class Command(makemessages.Command):
def handle(self, *args, **options):
if not options.get('add_location') and self.gettext_version >= (0, 19):
options['add_location'] = 'file'
return super().handle(*args, **options)
def find_files(self, root):
for file in super().find_files('templates'):
file.locale_dir = 'publik_base_theme/locale'
yield file

View File

@ -0,0 +1,23 @@
from pathlib import Path
# Build paths inside the project like this: BASE_DIR / 'subdir'.
BASE_DIR = Path(__file__).resolve().parent.parent
# Application definition
INSTALLED_APPS = ['publik_base_theme']
# Internationalization
# https://docs.djangoproject.com/en/3.2/topics/i18n/
LANGUAGE_CODE = 'fr-fr'
TIME_ZONE = 'Europe/Paris'
USE_I18N = True
USE_L10N = True
USE_TZ = True
LOCALE_PATHS = (BASE_DIR / 'publik_base_theme' / 'locale',)

300
setup.py Normal file
View File

@ -0,0 +1,300 @@
#! /usr/bin/env python
import functools
import glob
import os
import subprocess
import sys
from distutils.cmd import Command as BaseCommand
from distutils.command.build import build as _build
from distutils.command.sdist import sdist
from distutils.errors import CompileError
from distutils.spawn import find_executable
from multiprocessing.pool import ThreadPool
from setuptools import find_packages, setup
from setuptools.command.install_lib import install_lib as _install_lib
inkscape = os.path.abspath(os.path.join(os.path.dirname(__file__), 'src', 'inkscape_wrapper.py'))
class Command(BaseCommand):
user_options = []
def initialize_options(self):
pass
def finalize_options(self):
pass
class eo_sdist(sdist):
def run(self):
print('creating VERSION file')
if os.path.exists('VERSION'):
os.remove('VERSION')
version = get_version()
version_file = open('VERSION', 'w')
version_file.write(version)
version_file.close()
sdist.run(self)
print('removing VERSION file')
if os.path.exists('VERSION'):
os.remove('VERSION')
def local_findall(self, dir=os.curdir):
# override default file search to allow for duplicates (as some themes have
# multiple variants that are just symlinks)
files = [
os.path.join(base, file) for base, dirs, files in os.walk(dir, followlinks=True) for file in files
]
if dir == os.curdir:
make_rel = functools.partial(os.path.relpath, start=dir)
files = map(make_rel, files)
self.filelist.allfiles = list(filter(os.path.isfile, files))
def get_file_list(self):
self.filelist.findall = self.local_findall
super().get_file_list()
def copy_file(self, *args, **kwargs):
# do not allow hardlinking as hardlinks would get inserted as is in
# the tarball, and would not extract properly.
kwargs.pop('link', None)
super().copy_file(*args, **kwargs)
def get_version():
'''Use the VERSION, if absent generates a version with git describe, if not
tag exists, take 0.0- and add the length of the commit log.
'''
if os.path.exists('VERSION'):
with open('VERSION') as v:
return v.read()
if os.path.exists('.git'):
p = subprocess.Popen(
['git', 'describe', '--dirty=.dirty', '--match=v*'],
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
)
result = p.communicate()[0]
if p.returncode == 0:
result = result.decode('ascii').strip()[1:] # strip spaces/newlines and initial v
if '-' in result: # not a tagged version
real_number, commit_count, commit_hash = result.split('-', 2)
version = '%s.post%s+%s' % (real_number, commit_count, commit_hash)
else:
version = result.replace('.dirty', '+dirty')
return version
else:
return '0.0.post%s' % len(subprocess.check_output(['git', 'rev-list', 'HEAD']).splitlines())
return '0.0'
class compile_translations(Command):
description = 'compile message catalogs to MO files via django compilemessages'
user_options = []
def run(self):
curdir = os.getcwd()
try:
from django.core.management import call_command
for path, dirs, files in os.walk('publik_base_theme'):
if 'locale' not in dirs:
continue
os.chdir(os.path.realpath(path))
call_command('compilemessages')
os.chdir(curdir)
except ImportError:
sys.stderr.write('!!! Please install Django >= 1.4 to build translations\n')
finally:
os.chdir(curdir)
class build_themes_json(Command):
def run(self):
subprocess.run(['python3', 'create_themes_json.py'])
def get_css_files(include_map_files=False):
for dirname in sorted(os.listdir('static')):
config = os.path.join('static', dirname, 'config.json')
if not os.path.exists(config):
continue
yield 'static/%s/style.css' % dirname
if include_map_files:
yield 'static/%s/style.css.map' % dirname
if os.path.exists(os.path.join('static', dirname, 'backoffice.scss')):
yield 'static/%s/backoffice.css' % dirname
if include_map_files:
yield 'static/%s/backoffice.css.map' % dirname
yield 'static/portal-agent/css/agent-portal.css'
yield 'static/includes/gadjo-extra.css'
def subprocess_run(command):
kwargs = {
'env': {'LC_ALL': 'C.UTF-8'},
}
if isinstance(command, list):
print(' '.join(command))
else:
print(command)
kwargs['shell'] = True
return bool(subprocess.run(command, **kwargs).returncode == 0)
class compile_scss(Command):
description = 'compile scss files into css files'
def run(self):
sass_bin = find_executable('sassc')
if not sass_bin:
raise CompileError(
'A sass compiler is required but none was found. See sass-lang.com for choices.'
)
for dirname in ('includes', 'toodego', 'lille', 'lomme', 'hellemmes', 'toulouse-2022'):
subprocess.run(['python3', 'make_data_uris.py', os.path.join('static', dirname)], check=True)
def get_build_commands():
for css_filename in get_css_files():
yield ['sassc', '--sourcemap', css_filename.replace('.css', '.scss'), css_filename]
with ThreadPool() as pool:
for result in pool.imap_unordered(subprocess_run, get_build_commands()):
if not result:
raise CompileError('error compiling css')
class build_icons(Command):
def run(self):
cmds = [
'python3 src/render-imgs-dashboard.py static/chateauroux/img/ --normal 333333 '
'--selected 0779B7 --title FFFFFF --title-width 80',
'python3 src/render-imgs-categories.py static/orleans/img/ --primary f05923 --secondary 34697D',
'python3 src/render-imgs-dashboard.py static/orleans/img/ --normal FFFFFF '
'--normal-width 30 --selected f05923 --selected-width 30 --title FFFFFF --title-width 80',
'python3 src/render-imgs-categories.py static/publik/img/',
'python3 src/render-imgs-dashboard.py static/publik/img/ --normal 4D4D4D '
'--selected DF017A --title FFFFFF --title-width 80',
'python3 src/render-imgs-categories.py static/somme-cd80/img/ --primary A8002B '
'--secondary A8002B',
'python3 src/render-imgs-dashboard.py static/somme-cd80/img/ --normal 4D4D4D '
'--selected 87A738 --title FFFFFF --title-width 80',
]
if self.distribution.commands == ['install']:
cmds = [f'{x} --skip-existing' for x in cmds]
if not os.path.exists('static/tournai/img'):
os.mkdir('static/tournai/img')
for image in glob.glob('static/tournai/assets/*.svg'):
target_filename = 'static/tournai/img/' + os.path.basename(image).replace('.svg', '.png')
if (
os.path.exists(target_filename)
and os.stat(image).st_mtime < os.stat(target_filename).st_mtime
):
continue
cmds.append(
[
inkscape,
'--without-gui',
'--file',
image,
'--export-area-drawing',
'--export-area-snap',
'--export-png',
target_filename,
'--export-width',
'40',
]
)
with ThreadPool() as pool:
for result in pool.imap_unordered(subprocess_run, cmds):
if not result:
raise CompileError('error building icons')
class build(_build):
sub_commands = [
('build_themes_json', None),
('build_icons', None),
('compile_scss', None),
('compile_translations', None),
] + _build.sub_commands
class install_lib(_install_lib):
def run(self):
self.run_command('compile_translations')
super().run()
def data_tree(destdir, sourcedir):
extensions = [
'.html',
'.txt',
'.scss',
'.css',
'.js',
'.ico',
'.gif',
'.png',
'.jpg',
'.jpeg',
'.woff',
'.woff2',
'.ttf',
'.css',
'.map',
'.svg',
'.eot',
'.otf',
'.py', # prepare-template.py
]
r = []
for root, dirs, files in os.walk(sourcedir):
l = [os.path.join(root, x) for x in files if os.path.splitext(x)[1] in extensions]
r.append((root.replace(sourcedir, destdir, 1), l))
return r
setup(
name='publik_base_theme',
version=get_version(),
license='AGPLv3 or later',
description='Themes for Publik',
url='https://dev.entrouvert.org/projects/publik-base-theme/',
author='Entrouvert',
author_email='info@entrouvert.com',
packages=find_packages(),
include_package_data=True,
data_files=data_tree('share/publik/themes/publik-base/static', 'static')
+ data_tree('share/publik/themes/publik-base/templates', 'templates')
+ [('share/publik/themes/publik-base', ['themes.json'])],
setup_requires=[
'django>=2.2',
],
classifiers=[
'Development Status :: 5 - Stable',
'Environment :: Web Environment',
'Framework :: Django',
'Intended Audience :: Developers',
'License :: OSI Approved :: GNU Affero General Public License v3 or later (AGPLv3+)',
'Operating System :: OS Independent',
'Programming Language :: Python',
'Programming Language :: Python :: 3',
],
zip_safe=False,
cmdclass={
'build': build,
'build_icons': build_icons,
'build_themes_json': build_themes_json,
'compile_scss': compile_scss,
'compile_translations': compile_translations,
'install_lib': install_lib,
'sdist': eo_sdist,
},
)

View File

@ -23,7 +23,8 @@ import subprocess
import sys
import xml.etree.ElementTree as ET
inkscape = os.path.abspath(os.path.join(os.path.dirname(__file__), 'inkscape_wrapper.py'))
base_dir = os.path.dirname(__file__)
inkscape = os.path.abspath(os.path.join(base_dir, 'inkscape_wrapper.py'))
names = {
'02': 'famille',
@ -91,19 +92,25 @@ parser = argparse.ArgumentParser()
parser.add_argument('path', help='out path')
parser.add_argument('--primary', default='E0037A')
parser.add_argument('--secondary', default='6D1F80')
parser.add_argument('--skip-existing', action='store_true')
args = parser.parse_args()
path_out = args.path
if not os.path.exists(path_out):
os.makedirs(path_out)
os.makedirs(path_out, exist_ok=True)
for filename in filenames:
outname = names.get(re.search(r'\d+', filename).group())
if (
args.skip_existing
and os.path.exists(os.path.join(path_out, '%s.png' % outname))
and os.path.exists(os.path.join(path_out, '%s-on.png' % outname))
):
continue
fd = open('tmp-%s.svg' % outname, 'w')
fd.write(
open(os.path.join('pictos', filename))
open(os.path.join(base_dir, 'pictos', filename))
.read()
.replace('E0037A', args.primary)
.replace('6D1F80', args.secondary)
@ -123,7 +130,7 @@ for filename in filenames:
]
)
tree = ET.parse(open(os.path.join('pictos', filename)))
tree = ET.parse(open(os.path.join(base_dir, 'pictos', filename)))
parent_map = {c: p for p in tree.iter() for c in p}
for i in range(10):
for node in tree.iter():

View File

@ -24,6 +24,7 @@ import sys
import tempfile
import xml.etree.ElementTree as ET
base_dir = os.path.dirname(__file__)
inkscape = os.path.abspath(os.path.join(os.path.dirname(__file__), 'inkscape_wrapper.py'))
names = {
@ -55,6 +56,7 @@ parser.add_argument('--selected-width')
parser.add_argument('--title')
parser.add_argument('--title-height')
parser.add_argument('--title-width')
parser.add_argument('--skip-existing', action='store_true')
args = parser.parse_args()
path_out = args.path
@ -72,8 +74,7 @@ for variant in ('normal', 'selected', 'title'):
'width': getattr(args, variant + '_width'),
}
if not os.path.exists(path_out):
os.makedirs(path_out)
os.makedirs(path_out, exist_ok=True)
for filename in filenames:
icon_name = names.get(re.search(r'\d+', filename).group())
@ -82,12 +83,15 @@ for filename in filenames:
variant_colour = variant_data.get('colour')
variant_height = variant_data.get('height')
variant_width = variant_data.get('width')
tree = ET.parse(open(os.path.join('pictos', filename)))
tree = ET.parse(open(os.path.join(base_dir, 'pictos', filename)))
if variant_name:
out_filepath = os.path.join(path_out, '%s-%s.png' % (icon_name, variant_name))
else:
out_filepath = os.path.join(path_out, '%s.png' % icon_name)
if args.skip_existing and os.path.exists(out_filepath):
continue
for node in tree.iter():
tag_name = node.tag.split('}')[-1]
if tag_name == 'path':

View File

@ -585,6 +585,7 @@ hr {
.list-with-images {
@extend .bare-list;
display: flex;
flex-wrap: wrap;
justify-content: center;

View File

@ -66,6 +66,10 @@ a.pk-button:hover {
border: none;
box-shadow: none;
font-size: 0.812rem;
@media($max-mobile-viewport) {
display: none;
}
}
.page-index {

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

@ -636,7 +636,7 @@ div.bookingcalendar {
#login-page.methods2 > .block {
width: 50%;
width: calc(50% - 2em);
margin: 0;
margin-left: 0;
margin-right: 2em;
float: left;
}
@ -645,7 +645,7 @@ div.bookingcalendar {
#login-page.methods3 > .block {
width: 33%;
width: calc(33% - 2em);
margin: 0;
margin-left: 0;
margin-right: 2em;
float: left;
}
@ -657,7 +657,11 @@ div.bookingcalendar {
@media screen and ($max-mobile-viewport) {
width: auto;
float: none;
margin: 0.7em;
margin-right: 0;
@if $edge-gutter == legacy {
margin-left: 0.7em;
margin-right: 0.7em;
}
}
}

View File

@ -101,7 +101,7 @@ $cancel-button-icon: '\f00d' !default; /* remove icon */
background: $widget-custom-radio-checkbox-marker-color;
}
&[disabled]:checked + span::after {
background: grayscale($widget-custom-radio-checkbox-marker-color);
filter: grayscale(100%);
}
&:focus + span {
@ -366,9 +366,14 @@ CheckboxesWithImagesWidget, .RadiobuttonsWithImagesWidget {
.CheckboxesWidget,
.RadiobuttonsWidget {
.content label {
display: block;
padding-bottom: 0.7em;
.content {
label {
display: block;
padding-bottom: 0.7em;
}
ul {
@extend .bare-list;
}
}
&.widget-inline-radio .content li,
&.widget-inline-radio .content label {
@ -389,12 +394,6 @@ div.content label {
margin-right: 1em;
}
div.widget div.content ul {
padding: 0;
margin: 0;
list-style: none;
}
span.helptext,
div.hint {
display: block;
@ -729,7 +728,7 @@ div.select2-search {
&::before, &::after {
font-family: FontAwesome;
--icon-color: currentColor;
--icon-hover-color: var(--color);
--icon-hover-color: var(--icon-color);
}
@if ($position == left) {
&::before {
@ -867,7 +866,6 @@ div.select2-search {
&--result-list {
background-color: white;
font-size: 1.2em;
padding-right: 0.7em;
}

View File

@ -12,6 +12,8 @@ $sidebar-max-width: $sidebar-width !default;
$sidebar-min-width: 0 !default;
$sidebar-position: left !default;
$sidebar-columns-gutter: $columns-gutter !default;
$edge-gutter: legacy !default;
$edge-gutter-mobile: $edge-gutter !default;
// custom media queries
// @media ($max-mobile-viewport) {}
@ -41,7 +43,6 @@ div#page {
div#page div#main-content-wrapper,
div#page main {
flex: 1 0 auto;
width: 100%;
}
.page-width,
@ -54,18 +55,16 @@ div#page main {
}
@if ($mobile-width) {
.page-width,
.footer-width {
.page-width,
.footer-width {
@media ($max-mobile-viewport) {
max-width: $mobile-width;
}
}
}
}
}
div#header {
width: 100%;
position: relative;
padding: 0 0.7em;
& h1 {
margin: 0;
}
@ -118,7 +117,6 @@ div#main-content {
@media screen and ($max-mobile-viewport) {
#columns-wrapper {
padding: 0 0.7em;
max-width: 100%;
}
.column {
@ -129,13 +127,13 @@ div#main-content {
.central-content {
flex-direction: column;
#sidebar {
margin: 0;
flex: 0 0 auto;
max-width: 100%;
// don't apply min-width on mobile
@if $sidebar-min-width != 0 {
min-width: 0;
}
margin: 0 0.7em;
div.cell {
margin-left: 0;
margin-right: 0;
@ -155,16 +153,66 @@ div#main-content {
@if $footer-full-width-background {
#footer-wrapper {
padding: 0.7em 0 1.5em 0;
padding-top: 0.7em;
padding-bottom: 1.5em;
background-color: $footer-background;
}
} @else {
#footer {
padding: 0.7em 0.7em 1.5em 0.7em;
padding-top: 0.7em;
padding-bottom: 1.5em;
background-color: $footer-background;
}
}
// edge-gutter
@if $edge-gutter == legacy {
div#header {
width: 100%;
padding: 0 0.7em;
}
div#page div#main-content-wrapper,
div#page main {
width: 100%;
}
@if not $footer-full-width-background {
#footer {
padding-left: 0.7em;
padding-right: 0.7em;
}
}
@media ($max-mobile-viewport) {
.central-content #sidebar {
margin: 0 0.7em;
}
#columns-wrapper {
padding: 0 0.7em;
}
}
} @else {
.page-width,
.header-width,
.nav-width,
.footer-width {
--edge-gutter: #{$edge-gutter};
--edge-gutter-mobile: #{$edge-gutter-mobile};
box-sizing: content-box;
padding-left: var(--edge-gutter);
padding-right: var(--edge-gutter);
@media ($max-mobile-viewport) {
--edge-gutter: var(--edge-gutter-mobile);
}
}
@if ($mobile-width) {
.header-width,
.nav-width {
@media ($max-mobile-viewport) {
--edge-gutter-mobile: 0;
}
}
}
}
@media screen and ($max-mobile-viewport) {
.pk-desktop-only, .desktop-only {
display: none !important;
@ -205,10 +253,13 @@ body.pk-mini-page {
background: white;
max-width: 30em;
margin: 4em auto;
padding: 1em;
padding: 0em;
text-align: center;
border-bottom: 5px solid var(--primary-color);
}
.pk-mini-page--content {
padding: 1em
}
.loader {
margin: 2em auto;
width: 40px;

View File

@ -765,6 +765,14 @@ div.location-icon {
z-index: -100 !important;
}
.leaflet-container {
font: inherit;
}
.leaflet-control-attribution {
font-size: 80%;
}
div.leaflet-control-gps {
&.pending {
opacity: 0.5;

View File

@ -70,7 +70,6 @@ $nav-mobile-bottom-bar-badge-background: #e22 !default;
}
div.gru-nav {
padding: 0;
height: $nav-height;
border-radius: $nav-border-radius;
font-family: $nav-font-family;
@ -117,17 +116,7 @@ div.gru-nav li > a {
}
}
div.gru-nav li.selected > a {
@if $nav-item-selected-mode == background {
background-color: $nav-item-selected-background;
color: $nav-item-selected-color;
}
@if $nav-item-selected-mode == bottom-border {
border-bottom: $nav-item-selected-border;
color: $nav-color;
}
}
div.gru-nav li.selected > a,
div.gru-nav li:focus-within > a,
div.gru-nav li:hover > a {
@if $nav-item-selected-mode == background {
@ -138,7 +127,6 @@ div.gru-nav li:hover > a {
border-bottom: $nav-item-hover-border;
color: $nav-color;
}
}
div.gru-nav > ul ul {

View File

@ -141,3 +141,13 @@ $black: #000000 !default;
[hidden] {
display: none !important;
}
// bare list : for ol / ul, remove default list styles
@mixin bare-list {
padding: 0;
margin: 0;
list-style: none;
}
.bare-list {
@include bare-list();
}

View File

@ -0,0 +1,18 @@
@mixin kumbhsans-font($type, $weight) {
@font-face {
font-family: 'Kumbh Sans';
src: url('/static/fonts/KumbhSans/KumbhSans-#{$type}.woff2') format('woff2');
font-weight: $weight;
font-style: normal;
}
}
@include kumbhsans-font('Thin', 100);
@include kumbhsans-font('ExtraLight', 200);
@include kumbhsans-font('Light', 300);
@include kumbhsans-font('Regular', 400);
@include kumbhsans-font('Medium', 500);
@include kumbhsans-font('SemiBold', 600);
@include kumbhsans-font('Bold', 700);
@include kumbhsans-font('ExtraBold', 800);
@include kumbhsans-font('Black', 900);

View File

@ -60,7 +60,7 @@ div#rub_service {
}
.form-content--title,
div#rub_service h2 {
#rub_service > h2 {
@extend #{$form-title-style} !optional;
}
@ -541,6 +541,9 @@ div.file-upload-widget {
}
div.widget-message {
padding-top: 20px;
p {
margin: 0;
}
&::before {
pointer-events: none;
font-family: FontAwesome;
@ -792,6 +795,7 @@ div.section {
div.section.foldable {
margin-bottom: 1rem;
> h2:first-child {
@extend %title;
&::after {
font-family: FontAwesome;
content: "\f106"; // angle-up

View File

@ -48,15 +48,22 @@
border-radius: 3px;
}
.template-nearby-forms div.leaflet-div-icon {
box-sizing: content-box;
padding: 3px;
margin: auto;
border-radius: 3px;
display: flex;
.template-nearby-forms .nearby-marker {
a {
line-height: 1;
margin: auto;
display: block;
padding: 0 3px;
border-radius: 3px;
background: $button-background;
color: $button-color;
min-width: 1.4em;
line-height: 1.4;
text-align: center;
text-decoration: none;
font-weight: bold;
outline: 1px solid white;
&:hover {
outline-width: 3px;
}
}
}

View File

@ -41,8 +41,10 @@ $(function() {
{
pointToLayer: function (feature, latlng) {
marker = L.divIcon({
className: "nearby-marker",
iconAnchor: [0, 0],
popupAnchor: [5, -45],
iconSize: null,
html: '<a href="#nearby-' + feature.properties.counter + '" class="demand-map-marker">' +
feature.properties.counter + '</a>'
});

View File

@ -330,6 +330,11 @@ div#main-content {
// CELLS
//
%cell {
&:not(.pk-information, .pk-attention, .pk-error, .pk-success) {
padding: 0.5em;
}
}
// Links list
%cell-links-list {
& > li {
@ -748,6 +753,11 @@ label {
transform: scale(1.4);
transform-origin: left;
}
// change default map size
div.qommon-map {
height: 450px;
max-height: calc(100vh - #{$nav-mobile-bottom-bar-height * 2});
}
}
.previous-button button {
@extend %gray-button;

View File

@ -15,13 +15,14 @@
},
"JSON_CELL_TYPES.update" : {
"montpellier_reporting_links" : {
"name" : "Liste de liens signalements",
"name" : "Liste de liens fiches",
"url" : "{{eservices_url}}api/cards/{{cards_id}}/list/{{list_filter}}?full=on",
"form": [
{
"varname": "cell_title",
"type": "string",
"label": "Titre de la cellule"
"label": "Titre de la cellule",
"required": false
},
{
"varname": "cell_desc",

View File

@ -1407,6 +1407,9 @@ div#rub_service div.file-upload-widget {
}
div.widget-message {
padding-top: 30px;
p {
margin: 0;
}
&::before {
pointer-events: none;
content: "\f016"; // file-o

View File

@ -451,6 +451,36 @@ $cell-additional-padding : 10px;
}
}
// inline links list
.inline-links-list {
.gru-content &.cell {
.links-list ul {
text-align: center;
> li {
display: inline-block;
div.description {
display: none;
}
}
> li > a {
&::before {
content: none;
}
@extend %button2;
--color: #{$blue-dark};
font-weight: bold !important;
margin-right: 0;
&:hover {
box-shadow: none;
}
&:not(:hover) {
border-color: transparent;
}
}
}
}
}
#sidebar .cell {
@extend .gray-cell;
}

View File

@ -1 +1,22 @@
$cell-close-foldable-icon: "\f106";
$cell-open-foldable-icon: "\f107";
$cell-entry-border: 1px solid #ccc;
$cell-entry-border-color: #ccc;
$mobile-limit: 760px;
$max-mobile-viewport: "max-width: #{$mobile-limit}";
$min-desktop-viewport: "min-width: #{$mobile-limit + 1}";
$title-color: #161c2a;
$title-font-size: 200%;
$very-small-limit: 560px;
.cancel-button {}
.cell-items-pagination {}
@import 'encombrants';
@import 'json_cells';
.theme-activities {
&--item-label {
padding-right: 0
}
};

View File

@ -0,0 +1,105 @@
@media screen and (min-width: $mobile-limit + 1) {
.gru-nav {
display: flex;
}
#logo.has-logo {
padding-bottom: 20px;
a {
min-height: 70px;
}
}
}
div#header h1#logo {
margin-top: 1em;
display: flex;
justify-content: center;
a {
width: $width;
@media screen and (max-width: $mobile-limit) {
max-width: 720px;
min-height: 60px;
margin-bottom: 20px;
}
}
}
#toplinks {
position: relative;
a {
color: white;
}
@media screen and (min-width: $mobile-limit + 1) {
right: unset;
height: 40px;
.toplinks--list {
position: absolute;
right: 120px;
}
}
@media screen and (max-width: $mobile-limit) {
max-width: 100%;
}
}
.header-width {
max-width: unset;
}
.site-header, #header-wrapper, #header {
box-sizing: content-box;
}
@media screen and (min-width: $mobile-limit + 1) {
div#header {
width: unset;
padding: unset;
}
}
@media screen and (max-width: $mobile-limit) {
body {
border-left: 0;
}
div#header {
padding: 0;
}
}
.gru-content div.cell h2:first-child {
border-bottom: 1px solid #e1e1e1;
&::before {
background: #1e1e1e;
bottom: 0;
content: '';
display: block;
height: 1px;
position: absolute;
width: 40px;
}
}
li.contains-subentries > a.menu--link {
span.menu--label::after {
content: "";
font-size: .6em;
margin-left: 1em;
}
}
%button { font-weight: bold; }
.title label {
font-weight: bold;
.required {
color: $required-red;
}
}
#footer {
display: flex;
a[href]:hover {
text-decoration: none;
}
}

View File

@ -0,0 +1,79 @@
$primary-color: #1a3e78;
$secondary-color: #f2f2f2;
$tertiary-color: #5a6473;
$info-green: #4cad16;
$notif-orange: #ef5e3B;
$vivid-cyan-blue: #0693e3;
$required-red: #790000;
$nav-hover-blue: #4f8eda;
$width: 1160px;
$border-radius: 0px;
$box-shadow: none;
$notification_error_color: red;
$notification_warning_color: yellow;
$link-color: $primary-color;
$link-decoration: none;
$font-color: #333;
$font-size: 0.938em;
$font-family: Arimo, sans-serif;
$title-background: white;
$title-color: #7f7f7f;
$title-transform: uppercase;
$title-font-family: $font-family;
$title-font-size: 1.4em;
$title-weight: 400;
$toplinks-background: $primary-color;
$toplinks-border-radius: 0;
$toplinks-box-shadow: none;
$nav-background: white;
$nav-submenu-background: #eee;
$nav-submenu-color: #333;
$nav-button-background: $secondary-color;
$nav-button-color: $font-color;
$nav-border-color: $font-color;
$nav-color: $font-color;
$nav-active-color: $nav-hover-blue;
$nav-item-selected-color: $nav-hover-blue;
$nav-item-selected-background: white;
$nav-item-hover-color: $nav-hover-blue;
$nav-item-hover-background: white;
$nav-text-transform: uppercase;
$nav-after-image: false;
$responsive-menu: left-to-right;
$nav-font-family: $font-family;
$nav-font-size: 1em;
$nav-font-style: normal;
$nav-font-weight: 600;
$widget-focus-border: 1px solid darken($vivid-cyan-blue, 20%);
$widget-focus-box-shadow: 0 0 3px $vivid-cyan-blue;
$widget-focus-outline: none;
$widget-border: 1px solid #7f7f7f;
$widget-box-shadow: none;
$widget-border-radius: 3px;
$button-background: $primary-color;
$button-focus-outline-offset: 1px;
$button-box-shadow: none;
$button-hover-background: darken($primary-color, 10%);
$button-hover-color: white;
$button-border-radius: 5px;
$cancel-button-style: "%inverted-button";
$cell-image-position: top;
$cell-image-padding: none;
$cell-border: none;
$cell-entry-hover-background: white;
$cell-entry-hover-color: $primary-color;
$cell-entry-border: 1px solid $tertiary-color;
$cell-title-cover-border: true;
$footer-background: $secondary-color;
$footer-color: $title-color;
$footer-link-color: $footer-color;

View File

@ -0,0 +1,15 @@
{
"label": "Université Savoie Mont Blanc",
"variables": {
"theme_color": "#1A3E78",
"favicon": "univ-smb/img/favicon.png",
"include_registration_link": true
},
"settings": {
"combo": {
"COMBO_ASSET_SLOTS.update": {
"header:logo": { "label": "Têtière : logo" }
}
}
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@ -0,0 +1,6 @@
@charset "UTF-8";
@import '../includes/fonts/arimo';
@import 'vars';
@import '../includes/publik';
@import 'custom';

View File

@ -0,0 +1,44 @@
#top h1#logo a {
background: transparent url(img/logo.jpg) top left no-repeat;
background-size: contain;
height: 140px;
text-indent: 250px;
line-height: 160px;
text-transform: uppercase;
color: rgb(35, 31, 32);
font-weight: 200;
@media screen and ($max-mobile-viewport) {
margin-top: 2em;
margin-bottom: 1em;
background-size: contain;
background-position: top center;
display: inline-block;
width: 100%;
text-indent: -10000px;
}
}
@media screen and ($max-mobile-viewport) {
#logo {
padding-left: 0;
}
}
footer {
background-image: url(img/V2.svg);
background-repeat: no-repeat;
background-size: auto;
}
#footer-wrapper {
background: transparent;
}
#toplinks a {
font-family: $title-font-family;
color: white;
}
ul#evolutions li span.item {
background: white !important;
}

View File

@ -0,0 +1,40 @@
@import '../includes/fonts/roboto-slab';
@import '../includes/fonts/kumbhsans';
$darkblue: #223755;
$yellow: #d3d800;
$primary-color: $darkblue;
$border-radius: 0;
$font-family: "Roboto Slab", serif;
$title-font-family: "Kumbh Sans", sans-serif;
$font-size: 100%;
$text-color: rgb(51, 51, 51);
$width: 1300px;
$title-background: $yellow;
$button-background: $yellow;
$button-hover-background: $darkblue;
$button-color: black;
$button-hover-color: white;
$nav-font-family: $title-font-family;
$nav-font-weight: 300;
$nav-active-color: $yellow;
$nav-text-transform: uppercase;
$nav-submenu-background: white;
$nav-submenu-color: black;
$nav-item-hover-background: $yellow;
$nav-item-hover-color: black;
$title-text-transform: uppercase;
$footer-background: white;
$footer-color: rgb(51, 51, 51);
$toplinks-style: none;
$toplinks-background: $darkblue;
$toplinks-padding: 1em;
$widget-focus-outline: 2px solid $darkblue;
$widget-focus-outline-offset: 0px;

View File

@ -0,0 +1,6 @@
{
"label": "Vendargues (2024)",
"variables": {
"theme_color": "#223755"
}
}

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" id="Calque_1" data-name="Calque 1" viewBox="0 0 136 151"><title>V-b</title><polygon points="-0.19 0 33.66 0 33.66 91.12 101.34 0 135.19 0 33.66 151 -0.19 151 -0.19 0" fill="#5e82a2"/></svg>

After

Width:  |  Height:  |  Size: 229 B

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" id="Calque_1" data-name="Calque 1" viewBox="0 0 82 151"><title>V2</title><polygon points="0 151 82 151 0 0 0 151" fill="#d3d800"/></svg>

After

Width:  |  Height:  |  Size: 176 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

View File

@ -0,0 +1,5 @@
@charset "UTF-8";
@import 'vars';
@import '../includes/publik';
@import 'custom';

View File

@ -4,10 +4,18 @@
{% block registration %}
<div class="cell--body">
{% block registration-password-form-pre %}
<p>
Après validation de votre adresse électronique, un lien vous sera envoyé par courriel
pour poursuivre la création de votre compte.
</p>
{% if is_phone_authn_active %}
<p>
Après validation de votre adresse électronique ou de votre numéro de téléphone, un lien
vous sera envoyé par courriel ou un code par SMS, selon le mode d'inscription choisi,
pour poursuivre la création de votre compte.
</p>
{% else %}
<p>
Après validation de votre adresse électronique, un lien vous sera envoyé par courriel
pour poursuivre la création de votre compte.
</p>
{% endif %}
{% endblock %}
{{ block.super }}
</div>

View File

@ -10,7 +10,7 @@
</li>
{% if lingo_basket_enabled %}
<li class="toplinks--list-item">
<a href="{{ lingo_url }}basket/"><span class="lingo--basket"><span class="sr-only">Panier</span><span class="lingo--basket-items"></span></span></a>
<a href="{{ lingo_url }}basket/?back_url={{request.build_absolute_uri|urlencode }}"><span class="lingo--basket"><span class="sr-only">Panier</span><span class="lingo--basket-items"></span></span></a>
<script src="{{ lingo_url }}basket/status.js"></script>
</li>
{% endif %}

View File

@ -20,7 +20,13 @@
</head>
<body class="pk-mini-page">
<main>
{% block content %}
{% block content-top %}
{% endblock %}
<div class="pk-mini-page--content">
{% block content %}
{% endblock %}
</div>
{% block content-bottom %}
{% endblock %}
</main>
</body>

View File

@ -0,0 +1,122 @@
{% extends "qommon/forms/widget.html" %}
{% block widget-control %}
<ul class="template-invoice-lines--items" data-base-for-name="{{ widget.get_name_for_id }}_op_">
{% for option in widget.get_options %}
<li
class="template-invoice-lines--item {% if option.disabled %}disabled{% endif %} {% if option.options.is_line %}invoice-line{% else %}invoice{% endif %}"
{% if option.options.is_line %}
data-related-invoice-id="{{ option.options.invoice_id }}" style="display:none"
{% else %}
data-invoice-id="{{ option.options.id }}"
{% endif %}
data-remaining-amount="{{ option.options.remaining_amount|multiply:100 }}"
>
<label for="{{ widget.get_name_for_id }}_op_{{ forloop.counter0 }}">
<input
id="{{ widget.get_name_for_id }}_op_{{ forloop.counter0 }}"
{% if option.selected %}checked="checked"
{% elif widget.readonly or option.disabled %}disabled{% endif %}
{% for attr in widget.attrs.items %}{{attr.0}}="{{attr.1}}" {% endfor %}
type="checkbox"
{% if widget.readonly %}value="yes" disabled {% else %}name="{{ option.name }}" value="yes"{% endif %}
>
<span>
{% if option.options.is_line %}
{% if option.options.activity_label and option.options.activity_label != option.options.line_label %}
{{ option.options.activity_label }} - {{ option.options.line_label }}
{% else %}
{{ option.options.line_label }}
{% endif %}
{% if option.options.details.check_type_label %}- {{ option.options.check_type_label }}{% elif option.options.status == 'absence' %}- Absence{% endif %}
{% if option.options.line_description %}- {{ option.options.line_description }}{% endif %} :
montant à régler de {{ option.options.remaining_amount|floatformat:"2" }} €
{% else %}
{{ option.options.display_id }} - {{ option.options.invoice_label }} :
montant à régler de {{ option.options.remaining_amount|floatformat:"2" }} €
{% endif %}
</span>
</label>
{% if widget.readonly and option.selected %}<input type="hidden" name="{{ option.name }}" value="yes">{% endif %}
</li>
{% endfor %}
</ul>
<span class="template-invoice-lines--total-amount"></span>
<style>
.template-invoice-lines--item.invoice.selected {
opacity: 0.5;
}
.template-invoice-lines--item.invoice-line {
margin-left: 2em;
}
</style>
<script>
$('.template-invoice-lines--item.invoice input').on('change', function() {
// when an invoice is checked/unchecked
var $invoice = $(this);
var $li = $invoice.parents('.template-invoice-lines--item')
var invoice_id = $li.data('invoice-id');
if ($invoice.is(':checked')) {
// show and check related invoice lines
$('input', $('.template-invoice-lines--item.invoice-line[data-related-invoice-id="' + invoice_id + '"]').show()).prop('checked', true);
if ($('.template-invoice-lines--item.invoice-line').length) {
$li.addClass('selected');
} else {
$li.removeClass('selected');
}
} else {
// hide and uncheck related invoice lines
$('input', $('.template-invoice-lines--item.invoice-line[data-related-invoice-id="' + invoice_id + '"]').hide()).prop('checked', false);
$li.removeClass('selected');
}
});
$('.template-invoice-lines--item.invoice-line input').on('change', function() {
// when a line is checked/unchecked
var $line = $(this);
var invoice_id = $line.parents('.template-invoice-lines--item').data('related-invoice-id');
if (! $('.template-invoice-lines--item.invoice-line[data-related-invoice-id="' + invoice_id + '"] input').is(':checked')) {
// if all related lines are unchecked, uncheck invoice
$('.template-invoice-lines--item.invoice[data-invoice-id="' + invoice_id + '"] input').prop('checked', false).trigger('change');
}
});
compute_selected_amount = function() {
// compute selected amount
var sum = 0;
if ($('.template-invoice-lines--item.invoice-line input').is(':checked')) {
// if at least on line is checked, sum the selected lines
$('.template-invoice-lines--item.invoice-line input:checked').each(function(index) {
sum += parseFloat($(this).parents('.template-invoice-lines--item').data('remaining-amount'));
});
} else {
// if no line checked, sum the selected invoices
$('.template-invoice-lines--item.invoice input:checked').each(function(index) {
sum += parseFloat($(this).parents('.template-invoice-lines--item').data('remaining-amount'));
});
}
// sum is expressed in centimes, convert to euros
sum = sum / 100
sum = sum.toLocaleString(undefined, { maximumFractionDigits: 2, minimumFractionDigits: 2 });
$('.template-invoice-lines--total-amount').html('Montant total sélectionné : ' + sum + ' €');
};
$('.template-invoice-lines--item input').on('change', function() {
compute_selected_amount()
});
compute_selected_amount()
// init visible invoice lines
$('.template-invoice-lines--item.invoice input').each(function(index) {
var $invoice = $(this);
var $li = $invoice.parents('.template-invoice-lines--item')
var invoice_id = $li.data('invoice-id');
if ($invoice.is(':checked')) {
$('.template-invoice-lines--item.invoice-line[data-related-invoice-id="' + invoice_id + '"]').show();
if ($('.template-invoice-lines--item.invoice-line').length) {
$li.addClass('selected');
} else {
$li.removeClass('selected');
}
} else {
$li.removeClass('selected');
}
});
</script>
{% endblock %}

View File

@ -5,8 +5,8 @@
{% regroup widget.get_options by options.day as options_list %}
{% for day, options in options_list %}
{% for option in options %}
<li data-date="{{ option.options.date }}"><label for="{{ widget.get_name_for_id }}_op_{{ forloop.counter0 }}"><input
id="{{ widget.get_name_for_id }}_op_{{ forloop.counter0 }}"
<li data-date="{{ option.options.date }}"><label for="{{ widget.get_name_for_id }}_op_{{ forloop.parentloop.counter0 }}_{{ forloop.counter0 }}"><input
id="{{ widget.get_name_for_id }}_op_{{ forloop.parentloop.counter0 }}_{{ forloop.counter0 }}"
{% if option.selected %}checked="checked"
{% elif widget.readonly or option.disabled %}disabled{% endif %}
{% for attr in widget.attrs.items %}{{attr.0}}="{{attr.1}}"{% endfor %}

View File

@ -16,9 +16,7 @@
{% endlocalize %}
></div>
{% block list-header %}
<h3>Si votre signalement figure dans la liste ci-dessous, cliquez sur le
bouton +1. Dans le cas contraire, poursuivez votre demande.
</h3>
<h3>{{ nearby_forms_intro_text|default:"Si votre signalement figure dans la liste ci-dessous, cliquez sur le bouton +1. Dans le cas contraire, poursuivez votre demande." }}</h3>
{% endblock %}
<ul class="nearby-forms">
{% with distance=global_context.form_option_distance|default:100|add:50 %}

View File

@ -8,11 +8,20 @@
{% block content %}
<div class="password-reset-form">
<p>
Si vous avez égaré votre mot de passe et que vous souhaitez pouvoir vous
connecter à nouveau, indiquez votre adresse électronique. Vous recevrez un
courriel vous permettant de définir un nouveau mot de passe.
</p>
{% if is_phone_authn_active %}
<p>
Si vous avez égaré votre mot de passe et souhaitez pouvoir vous connecter à
nouveau, veuillez indiquer votre adresse électronique ou votre numéro de
téléphone. Vous recevrez alors un courriel ou un SMS vous permettant de
définir un nouveau mot de passe.
</p>
{% else %}
<p>
Si vous avez égaré votre mot de passe et que vous souhaitez pouvoir vous
connecter à nouveau, indiquez votre adresse électronique. Vous recevrez un
courriel vous permettant de définir un nouveau mot de passe.
</p>
{% endif %}
<form method="post" class="pk-mark-optional-fields">
{% csrf_token %}

View File

@ -13,8 +13,7 @@
{% block footer-top %}
<div id="footer-top-wrapper">
<div id="footer-top">
{% trans "Pied de page - haut" as name %}
{% placeholder "footer-top" acquired=True name=name optional=True %}
{% placeholder "footer-top" acquired=True name="Pied de page - haut" optional=True %}
</div>
</div>
{% endblock %}
@ -22,8 +21,7 @@
{% block footer %}
{% block footer-logo-text %}
<div id="footer-logo-text">
{% trans "Pied de page - logo et texte" as name %}
{% placeholder "footer-logo-text" acquired=True name=name optional=True %}
{% placeholder "footer-logo-text" acquired=True name="Pied de page - logo et texte" optional=True %}
</div>
{% endblock %}
{% trans "Footer" as name %}

View File

@ -2,12 +2,12 @@
<div class="links-list">
<ul>
<li><a href="{{ from }}affectations/">Affectations</a></li>
<li><a href="{{ from }}evenements/">Évènements</a></li>
<li><a href="{{ from }}contrats/">Contrats</a></li>
<li><a href="{{ from }}actions/">Actions</a></li>
<li><a href="{{ from }}transport/">Transport</a></li>
<li><a href="{{ from }}fonds-d-aide/">Fonds d'aide</a></li>
<li><a href="{{ from }}convocations/">Convocations</a></li>
<li><a href="{{ from }}pole-emploi/">Pôle Emploi</a></li>
<li><a href="{{ from }}evenements/">Évènements</a></li>
</ul>
</div>

View File

@ -5,3 +5,8 @@
<link rel="stylesheet" href="https://use.typekit.net/vxm7rsn.css">
{{ block.super }}
{% endblock %}
{% block extra_scripts %}
{{ block.super }}
{% if queuefair in "True true" %}<script data-queue-fair-client="imio" src="https://files.queue-fair.net/queue-fair-adapter.js"></script>{% endif %}
{% endblock %}

View File

@ -1,5 +1,5 @@
{% extends "combo/page_template.html" %}
{% load static i18n combo gadjo pwa %}
{% load static combo gadjo pwa %}
{% block header-title %}
<div class="col left">
@ -22,16 +22,13 @@
{% block footer %}
<div class="columns">
<div class="col col-1">
{% trans "Pied de page - colonne 1" as name %}
{% placeholder "footer-col1" acquired=True name=name optional=True %}
{% placeholder "footer-col1" acquired=True name="Pied de page - colonne 1" optional=True %}
</div>
<div class="col col-2">
{% trans "Pied de page - colonne 2" as name %}
{% placeholder "footer-col2" acquired=True name=name optional=True %}
{% placeholder "footer-col2" acquired=True name="Pied de page - colonne 2" optional=True %}
</div>
<div class="col col-3">
{% trans "Pied de page - colonne 3" as name %}
{% placeholder "footer-col3" acquired=True name=name optional=True %}
{% placeholder "footer-col3" acquired=True name="Pied de page - colonne 3" optional=True %}
</div>
<div class="col col-4">
<div class="cca-logo"></div>

View File

@ -1,11 +1,10 @@
{% extends "combo/page_template.html" %}
{% load static i18n combo gadjo %}
{% load static combo gadjo %}
{% block before-main-content %}
<div id="bandeau">
<div id="bandeau-wrapper">
{% trans "Bandeau" as name %}
{% placeholder "bandeau" acquired=True name=name %}
{% placeholder "bandeau" acquired=True name="Bandeau" %}
</div>
</div>
{% endblock %}
@ -13,8 +12,7 @@
{% block content-post %}
<div id="partners-text">
{% trans "Partenaires texte" as name %}
{% placeholder "partners-text" acquired=True name=name %}
{% placeholder "partners-text" acquired=True name="Partenaires texte" %}
</div>
<div class="partners">
<div class="partner apave"></div>
@ -25,8 +23,7 @@
<div class="partner socotec"></div>
</div>
<div id="call-to-action">
{% trans "Lien d'action" as name %}
{% placeholder "call-to-action" acquired=True name=name %}
{% placeholder "call-to-action" acquired=True name="Lien daction" %}
</div>
{% endblock %}

View File

@ -4,8 +4,7 @@
{% block before-main-content %}
<div id="bandeau">
<div id="bandeau-wrapper">
{% trans "Bandeau" as name %}
{% placeholder "bandeau" acquired=True name=name %}
{% placeholder "bandeau" acquired=True name="Bandeau" %}
</div>
</div>
{% endblock %}

View File

@ -1,5 +1,5 @@
{% extends "combo/page_template.html" %}
{% load static i18n combo gadjo pwa %}
{% load static combo gadjo pwa %}
{% block header-bottom %}
@ -15,18 +15,15 @@
{% block footer %}
<div class="col-container">
<div class="col left">
{% trans "Pied de page - colonne gauche" as name %}
{% placeholder "footer-left" acquired=True name=name optional=True %}
{% placeholder "footer-left" acquired=True name="Pied de page - colonne gauche" optional=True %}
</div>
<div class="col middle">
{% trans "Pied de page" as name %}
{% placeholder "footer" acquired=True name=name optional=True %}
{% placeholder "footer" acquired=True name="Pied de page" optional=True %}
</div>
<div class="col right"><a href="https://www.malakoff.fr/" class="logo">_</a></div>
</div>
<div class="bottom">
{% trans "Pied de page - bas - liens" as name %}
{% placeholder "footer-bottom" acquired=True name=name optional=True %}
{% placeholder "footer-bottom" acquired=True name="Pied de page - bas - liens" optional=True %}
</div>
{% endblock %}

View File

@ -1,10 +1,14 @@
<h2 class="cell--title">
{{parameters.cell_title}}
</h2>
{% if parameters.cell_title %}
<h2 class="cell--title">
{{ parameters.cell_title }}
</h2>
{% endif %}
<div class="cell--body">
<p>
{{parameters.cell_desc}}
</p>
{% if parameters.cell_desc %}
<p>
{{ parameters.cell_desc }}
</p>
{% endif %}
<div class="reporting-links">
<ul class="content">

View File

@ -172,12 +172,12 @@
<p style="">Apr&egrave;s avoir rempli les champs du formulaire ci-dessous et cliqu&eacute; sur le bouton &quot;Payer&quot;, vous serez redirig&eacute; vers le serveur de paiement s&eacute;curis&eacute; de la direction g&eacute;n&eacute;rale des finances publiques sur lequel vous pourrez finaliser votre paiement gr&acirc;ce &agrave; votre carte bancaire. Vous recevrez ensuite un courriel de confirmation de la transaction.</p>
<div id="tipi_block">
<div id="wip">
<h3>{% trans "Paiement en cours..." %}</h3>
<h3>Paiement en cours...</h3>
</div>
<form name='tipi'>
<ul>
<li>
<label>{% trans "Identifiant collectivité" %}</label>
<label>Identifiant collectivité</label>
<select id="numcli">
<option value="005955">005955</option>
<option value="005956">005956</option>
@ -188,24 +188,24 @@
</select>
</li>
<li>
<label>{% trans "Réference titre" %}</label>
<label>Réference titre</label>
<input type='text' id='exer' maxlength=4 size=4 tabindex="2" onkeyup="checkLen(this, this.value)" /> -
<input type='text' id='idpiece' maxlength=8 size=7 tabindex="3" onkeyup="checkLen(this, this.value)" /> -
<input type='text' id='idligne' maxlength=5 size=4 tabindex="4" onkeyup="checkLen(this, this.value)" />
<span class="error" id="refdet_error">{% trans "numéro invalide" %}</span>
<span class="error" id="refdet_error">numéro invalide</span>
</li>
<li>
<label>{% trans "Montant" %}</label>
<label>Montant</label>
<input type='text' id='montant_euros' size="4" maxlength="4" placeholder="0000" tabindex="5" onkeyup="checkLen(this, this.value)" /> ,
<input type='text' id='montant_cents' size="2" maxlength="2" placeholder="00" tabindex="6" onkeyup="checkLen(this, this.value)" value="00" />
<span class="error" id="montant_error">{% trans "montant invalide" %}</span>
<span class="error" id="montant_error">montant invalide</span>
</li>
<li>
<label>{% trans "Votre courriel" %}</label>
<input type='email' id='mel' {% if request.user.email %}value="{{ request.user.email }}" {% else %}placeholder="{% trans "nom@domaine.com" %}"{% endif %} />
<span class="error" id="mel_error">{% trans "courriel invalide" %}</span></li>
<label>Votre courriel</label>
<input type='email' id='mel' {% if request.user.email %}value="{{ request.user.email }}" {% else %}placeholder="nom@domaine.com"{% endif %} />
<span class="error" id="mel_error">courriel invalide</span></li>
<li>
<input type='button' value='{% trans "Payer" %}' onclick='call_tipi()'/>
<input type='button' value='Payer' onclick='call_tipi()'/>
</li>
</ul>
</form>

View File

@ -1,5 +1,5 @@
{% load i18n %}
<h2>{% trans "Mes abonnements" %}</h2>
<h2>Mes abonnements</h2>
<div id="passerelle-register-plugin-{{ instance.id }}" class="passerelle-register-plugin">
{{ form.non_field_errors }}
{% for field in form %}

View File

@ -3,8 +3,7 @@
{% block page-content %}
<div id="sidebar">
{% trans "Barre Latérale Gauche" as name %}
{% placeholder "left-sidebar" name=name %}
{% placeholder "left-sidebar" name="Barre Latérale Gauche" %}
</div>
<div id="columns-wrapper">
{% block columns-top %}
@ -21,8 +20,7 @@
{% endblock %}
</div>
<div id="right-sidebar">
{% trans "Barre Latérale Droite" as name %}
{% placeholder "right-sidebar" name=name %}
{% placeholder "right-sidebar" name="Barre Latérale Droite" %}
</div>
{% endblock %}

View File

@ -10,7 +10,10 @@
</div>
<div class="tile-content">
<div class="adresse">
{{ silo.properties.voie }} {% if silo.properties.observation and silo.properties.observation != 'None' %}({{ silo.properties.observation }}){% endif %}<br>
{% firstof silo.properties.adresse silo.properties.voie %}
{% if silo.properties.observation_localisante %}({{ silo.properties.observation_localisante }}){% endif %}
{% if silo.properties.observation and silo.properties.observation != 'None' %}({{ silo.properties.observation }}){% endif %}
<br>
{{ silo.properties.commune }}
</div>
</div>

View File

@ -0,0 +1,12 @@
{% extends "combo/page_template.html" %}
{% load combo %}
{% block top-links %}
{% endblock %}
{% block header-title %}
{% skeleton_extra_placeholder top-links %}
{% include 'includes/user-info.html' %}
{% end_skeleton_extra_placeholder %}
{{ block.super }}
{% endblock %}