commit 2030381b45108a722b55674b427b35d576d80b19 Author: Thibaud Date: Fri Sep 13 17:26:06 2024 +0200 initialisation with SMETI code diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..f60060a --- /dev/null +++ b/.gitignore @@ -0,0 +1,6 @@ +backend/data/* +backend/vendor/* +frontend/index.html +frontend/src/index.html +frontend/scripts/* +frontend/styles/* diff --git a/frontend/fonts/Assistant.woff2 b/frontend/fonts/Assistant.woff2 new file mode 100644 index 0000000..2afabe2 Binary files /dev/null and b/frontend/fonts/Assistant.woff2 differ diff --git a/frontend/fonts/Fonte-Texte.woff2 b/frontend/fonts/Fonte-Texte.woff2 new file mode 100644 index 0000000..2afabe2 Binary files /dev/null and b/frontend/fonts/Fonte-Texte.woff2 differ diff --git a/frontend/fonts/Fonte-Titre.woff2 b/frontend/fonts/Fonte-Titre.woff2 new file mode 100644 index 0000000..89d60ab Binary files /dev/null and b/frontend/fonts/Fonte-Titre.woff2 differ diff --git a/frontend/fonts/Garamond.woff2 b/frontend/fonts/Garamond.woff2 new file mode 100644 index 0000000..cb17696 Binary files /dev/null and b/frontend/fonts/Garamond.woff2 differ diff --git a/frontend/fonts/Marianne.woff2 b/frontend/fonts/Marianne.woff2 new file mode 100644 index 0000000..fb45e42 Binary files /dev/null and b/frontend/fonts/Marianne.woff2 differ diff --git a/frontend/fonts/original/Bangers_font.zip b/frontend/fonts/original/Bangers_font.zip new file mode 100644 index 0000000..11a82ea Binary files /dev/null and b/frontend/fonts/original/Bangers_font.zip differ diff --git a/frontend/fonts/original/Garamond_font.zip b/frontend/fonts/original/Garamond_font.zip new file mode 100644 index 0000000..f9113a2 Binary files /dev/null and b/frontend/fonts/original/Garamond_font.zip differ diff --git a/frontend/fonts/original/Marianne.otf b/frontend/fonts/original/Marianne.otf new file mode 100644 index 0000000..241bee9 Binary files /dev/null and b/frontend/fonts/original/Marianne.otf differ diff --git a/frontend/fonts/original/Marianne/.DS_Store b/frontend/fonts/original/Marianne/.DS_Store new file mode 100644 index 0000000..6ea2e22 Binary files /dev/null and b/frontend/fonts/original/Marianne/.DS_Store differ diff --git a/frontend/fonts/original/Marianne/fontes desktop/.DS_Store b/frontend/fonts/original/Marianne/fontes desktop/.DS_Store new file mode 100644 index 0000000..77d460d Binary files /dev/null and b/frontend/fonts/original/Marianne/fontes desktop/.DS_Store differ diff --git a/frontend/fonts/original/Marianne/fontes desktop/Marianne-Bold.otf b/frontend/fonts/original/Marianne/fontes desktop/Marianne-Bold.otf new file mode 100644 index 0000000..6b23c24 Binary files /dev/null and b/frontend/fonts/original/Marianne/fontes desktop/Marianne-Bold.otf differ diff --git a/frontend/fonts/original/Marianne/fontes desktop/Marianne-BoldItalic.otf b/frontend/fonts/original/Marianne/fontes desktop/Marianne-BoldItalic.otf new file mode 100644 index 0000000..b4d7d50 Binary files /dev/null and b/frontend/fonts/original/Marianne/fontes desktop/Marianne-BoldItalic.otf differ diff --git a/frontend/fonts/original/Marianne/fontes desktop/Marianne-ExtraBold.otf b/frontend/fonts/original/Marianne/fontes desktop/Marianne-ExtraBold.otf new file mode 100644 index 0000000..7f7a1a7 Binary files /dev/null and b/frontend/fonts/original/Marianne/fontes desktop/Marianne-ExtraBold.otf differ diff --git a/frontend/fonts/original/Marianne/fontes desktop/Marianne-ExtraBoldItalic.otf b/frontend/fonts/original/Marianne/fontes desktop/Marianne-ExtraBoldItalic.otf new file mode 100644 index 0000000..17ec3fe Binary files /dev/null and b/frontend/fonts/original/Marianne/fontes desktop/Marianne-ExtraBoldItalic.otf differ diff --git a/frontend/fonts/original/Marianne/fontes desktop/Marianne-Light.otf b/frontend/fonts/original/Marianne/fontes desktop/Marianne-Light.otf new file mode 100644 index 0000000..32b0eaf Binary files /dev/null and b/frontend/fonts/original/Marianne/fontes desktop/Marianne-Light.otf differ diff --git a/frontend/fonts/original/Marianne/fontes desktop/Marianne-LightItalic.otf b/frontend/fonts/original/Marianne/fontes desktop/Marianne-LightItalic.otf new file mode 100644 index 0000000..901412c Binary files /dev/null and b/frontend/fonts/original/Marianne/fontes desktop/Marianne-LightItalic.otf differ diff --git a/frontend/fonts/original/Marianne/fontes desktop/Marianne-Medium.otf b/frontend/fonts/original/Marianne/fontes desktop/Marianne-Medium.otf new file mode 100644 index 0000000..6a28cfa Binary files /dev/null and b/frontend/fonts/original/Marianne/fontes desktop/Marianne-Medium.otf differ diff --git a/frontend/fonts/original/Marianne/fontes desktop/Marianne-MediumItalic.otf b/frontend/fonts/original/Marianne/fontes desktop/Marianne-MediumItalic.otf new file mode 100644 index 0000000..6e1f74d Binary files /dev/null and b/frontend/fonts/original/Marianne/fontes desktop/Marianne-MediumItalic.otf differ diff --git a/frontend/fonts/original/Marianne/fontes desktop/Marianne-RegularItalic.otf b/frontend/fonts/original/Marianne/fontes desktop/Marianne-RegularItalic.otf new file mode 100644 index 0000000..6875d99 Binary files /dev/null and b/frontend/fonts/original/Marianne/fontes desktop/Marianne-RegularItalic.otf differ diff --git a/frontend/fonts/original/Marianne/fontes desktop/Marianne-Thin.otf b/frontend/fonts/original/Marianne/fontes desktop/Marianne-Thin.otf new file mode 100644 index 0000000..3e4f595 Binary files /dev/null and b/frontend/fonts/original/Marianne/fontes desktop/Marianne-Thin.otf differ diff --git a/frontend/fonts/original/Marianne/fontes desktop/Marianne-ThinItalic.otf b/frontend/fonts/original/Marianne/fontes desktop/Marianne-ThinItalic.otf new file mode 100644 index 0000000..1a56ff2 Binary files /dev/null and b/frontend/fonts/original/Marianne/fontes desktop/Marianne-ThinItalic.otf differ diff --git a/frontend/fonts/original/Marianne/fontes web/.DS_Store b/frontend/fonts/original/Marianne/fontes web/.DS_Store new file mode 100644 index 0000000..5008ddf Binary files /dev/null and b/frontend/fonts/original/Marianne/fontes web/.DS_Store differ diff --git a/frontend/fonts/original/Marianne/fontes web/Marianne-Bold.woff b/frontend/fonts/original/Marianne/fontes web/Marianne-Bold.woff new file mode 100644 index 0000000..335e348 Binary files /dev/null and b/frontend/fonts/original/Marianne/fontes web/Marianne-Bold.woff differ diff --git a/frontend/fonts/original/Marianne/fontes web/Marianne-Bold.woff2 b/frontend/fonts/original/Marianne/fontes web/Marianne-Bold.woff2 new file mode 100644 index 0000000..4a5b7b2 Binary files /dev/null and b/frontend/fonts/original/Marianne/fontes web/Marianne-Bold.woff2 differ diff --git a/frontend/fonts/original/Marianne/fontes web/Marianne-Bold_Italic.woff b/frontend/fonts/original/Marianne/fontes web/Marianne-Bold_Italic.woff new file mode 100644 index 0000000..72878fc Binary files /dev/null and b/frontend/fonts/original/Marianne/fontes web/Marianne-Bold_Italic.woff differ diff --git a/frontend/fonts/original/Marianne/fontes web/Marianne-Bold_Italic.woff2 b/frontend/fonts/original/Marianne/fontes web/Marianne-Bold_Italic.woff2 new file mode 100644 index 0000000..31494ac Binary files /dev/null and b/frontend/fonts/original/Marianne/fontes web/Marianne-Bold_Italic.woff2 differ diff --git a/frontend/fonts/original/Marianne/fontes web/Marianne-ExtraBold.woff b/frontend/fonts/original/Marianne/fontes web/Marianne-ExtraBold.woff new file mode 100644 index 0000000..ad85a55 Binary files /dev/null and b/frontend/fonts/original/Marianne/fontes web/Marianne-ExtraBold.woff differ diff --git a/frontend/fonts/original/Marianne/fontes web/Marianne-ExtraBold.woff2 b/frontend/fonts/original/Marianne/fontes web/Marianne-ExtraBold.woff2 new file mode 100644 index 0000000..b98ec4f Binary files /dev/null and b/frontend/fonts/original/Marianne/fontes web/Marianne-ExtraBold.woff2 differ diff --git a/frontend/fonts/original/Marianne/fontes web/Marianne-ExtraBold_Italic.woff b/frontend/fonts/original/Marianne/fontes web/Marianne-ExtraBold_Italic.woff new file mode 100644 index 0000000..af92ea7 Binary files /dev/null and b/frontend/fonts/original/Marianne/fontes web/Marianne-ExtraBold_Italic.woff differ diff --git a/frontend/fonts/original/Marianne/fontes web/Marianne-ExtraBold_Italic.woff2 b/frontend/fonts/original/Marianne/fontes web/Marianne-ExtraBold_Italic.woff2 new file mode 100644 index 0000000..c4ec1c0 Binary files /dev/null and b/frontend/fonts/original/Marianne/fontes web/Marianne-ExtraBold_Italic.woff2 differ diff --git a/frontend/fonts/original/Marianne/fontes web/Marianne-Light.woff b/frontend/fonts/original/Marianne/fontes web/Marianne-Light.woff new file mode 100644 index 0000000..9ef49df Binary files /dev/null and b/frontend/fonts/original/Marianne/fontes web/Marianne-Light.woff differ diff --git a/frontend/fonts/original/Marianne/fontes web/Marianne-Light.woff2 b/frontend/fonts/original/Marianne/fontes web/Marianne-Light.woff2 new file mode 100644 index 0000000..b29a01f Binary files /dev/null and b/frontend/fonts/original/Marianne/fontes web/Marianne-Light.woff2 differ diff --git a/frontend/fonts/original/Marianne/fontes web/Marianne-Light_Italic.woff b/frontend/fonts/original/Marianne/fontes web/Marianne-Light_Italic.woff new file mode 100644 index 0000000..5ae0dbe Binary files /dev/null and b/frontend/fonts/original/Marianne/fontes web/Marianne-Light_Italic.woff differ diff --git a/frontend/fonts/original/Marianne/fontes web/Marianne-Light_Italic.woff2 b/frontend/fonts/original/Marianne/fontes web/Marianne-Light_Italic.woff2 new file mode 100644 index 0000000..ccf9c8e Binary files /dev/null and b/frontend/fonts/original/Marianne/fontes web/Marianne-Light_Italic.woff2 differ diff --git a/frontend/fonts/original/Marianne/fontes web/Marianne-Medium.woff b/frontend/fonts/original/Marianne/fontes web/Marianne-Medium.woff new file mode 100644 index 0000000..692476e Binary files /dev/null and b/frontend/fonts/original/Marianne/fontes web/Marianne-Medium.woff differ diff --git a/frontend/fonts/original/Marianne/fontes web/Marianne-Medium.woff2 b/frontend/fonts/original/Marianne/fontes web/Marianne-Medium.woff2 new file mode 100644 index 0000000..8877ade Binary files /dev/null and b/frontend/fonts/original/Marianne/fontes web/Marianne-Medium.woff2 differ diff --git a/frontend/fonts/original/Marianne/fontes web/Marianne-Medium_Italic.woff b/frontend/fonts/original/Marianne/fontes web/Marianne-Medium_Italic.woff new file mode 100644 index 0000000..8e32b88 Binary files /dev/null and b/frontend/fonts/original/Marianne/fontes web/Marianne-Medium_Italic.woff differ diff --git a/frontend/fonts/original/Marianne/fontes web/Marianne-Medium_Italic.woff2 b/frontend/fonts/original/Marianne/fontes web/Marianne-Medium_Italic.woff2 new file mode 100644 index 0000000..28b5040 Binary files /dev/null and b/frontend/fonts/original/Marianne/fontes web/Marianne-Medium_Italic.woff2 differ diff --git a/frontend/fonts/original/Marianne/fontes web/Marianne-Regular.woff b/frontend/fonts/original/Marianne/fontes web/Marianne-Regular.woff new file mode 100644 index 0000000..a95a2d0 Binary files /dev/null and b/frontend/fonts/original/Marianne/fontes web/Marianne-Regular.woff differ diff --git a/frontend/fonts/original/Marianne/fontes web/Marianne-Regular.woff2 b/frontend/fonts/original/Marianne/fontes web/Marianne-Regular.woff2 new file mode 100644 index 0000000..5d6517c Binary files /dev/null and b/frontend/fonts/original/Marianne/fontes web/Marianne-Regular.woff2 differ diff --git a/frontend/fonts/original/Marianne/fontes web/Marianne-Regular_Italic.woff b/frontend/fonts/original/Marianne/fontes web/Marianne-Regular_Italic.woff new file mode 100644 index 0000000..1880c5d Binary files /dev/null and b/frontend/fonts/original/Marianne/fontes web/Marianne-Regular_Italic.woff differ diff --git a/frontend/fonts/original/Marianne/fontes web/Marianne-Regular_Italic.woff2 b/frontend/fonts/original/Marianne/fontes web/Marianne-Regular_Italic.woff2 new file mode 100644 index 0000000..30e8934 Binary files /dev/null and b/frontend/fonts/original/Marianne/fontes web/Marianne-Regular_Italic.woff2 differ diff --git a/frontend/fonts/original/Marianne/fontes web/Marianne-Thin.woff b/frontend/fonts/original/Marianne/fontes web/Marianne-Thin.woff new file mode 100644 index 0000000..6c8bc5a Binary files /dev/null and b/frontend/fonts/original/Marianne/fontes web/Marianne-Thin.woff differ diff --git a/frontend/fonts/original/Marianne/fontes web/Marianne-Thin.woff2 b/frontend/fonts/original/Marianne/fontes web/Marianne-Thin.woff2 new file mode 100644 index 0000000..1ec57f7 Binary files /dev/null and b/frontend/fonts/original/Marianne/fontes web/Marianne-Thin.woff2 differ diff --git a/frontend/fonts/original/Marianne/fontes web/Marianne-Thin_Italic.woff b/frontend/fonts/original/Marianne/fontes web/Marianne-Thin_Italic.woff new file mode 100644 index 0000000..4c23d6b Binary files /dev/null and b/frontend/fonts/original/Marianne/fontes web/Marianne-Thin_Italic.woff differ diff --git a/frontend/fonts/original/Marianne/fontes web/Marianne-Thin_Italic.woff2 b/frontend/fonts/original/Marianne/fontes web/Marianne-Thin_Italic.woff2 new file mode 100644 index 0000000..d3978b9 Binary files /dev/null and b/frontend/fonts/original/Marianne/fontes web/Marianne-Thin_Italic.woff2 differ diff --git a/frontend/fonts/original/Marianne/pdfs/.DS_Store b/frontend/fonts/original/Marianne/pdfs/.DS_Store new file mode 100644 index 0000000..e03553f Binary files /dev/null and b/frontend/fonts/original/Marianne/pdfs/.DS_Store differ diff --git a/frontend/fonts/original/Marianne/pdfs/Marianne 11.01.46.pdf b/frontend/fonts/original/Marianne/pdfs/Marianne 11.01.46.pdf new file mode 100644 index 0000000..72944b0 Binary files /dev/null and b/frontend/fonts/original/Marianne/pdfs/Marianne 11.01.46.pdf differ diff --git a/frontend/fonts/original/Marianne/pdfs/Marianne Bold 11.01.46.pdf b/frontend/fonts/original/Marianne/pdfs/Marianne Bold 11.01.46.pdf new file mode 100644 index 0000000..2be7d22 Binary files /dev/null and b/frontend/fonts/original/Marianne/pdfs/Marianne Bold 11.01.46.pdf differ diff --git a/frontend/fonts/original/Marianne/pdfs/Marianne Bold Italic 11.01.46.pdf b/frontend/fonts/original/Marianne/pdfs/Marianne Bold Italic 11.01.46.pdf new file mode 100644 index 0000000..04285b5 Binary files /dev/null and b/frontend/fonts/original/Marianne/pdfs/Marianne Bold Italic 11.01.46.pdf differ diff --git a/frontend/fonts/original/Marianne/pdfs/Marianne ExtraBold 11.01.46.pdf b/frontend/fonts/original/Marianne/pdfs/Marianne ExtraBold 11.01.46.pdf new file mode 100644 index 0000000..7090c3b Binary files /dev/null and b/frontend/fonts/original/Marianne/pdfs/Marianne ExtraBold 11.01.46.pdf differ diff --git a/frontend/fonts/original/Marianne/pdfs/Marianne ExtraBold Italic 11.01.46.pdf b/frontend/fonts/original/Marianne/pdfs/Marianne ExtraBold Italic 11.01.46.pdf new file mode 100644 index 0000000..10ec68b Binary files /dev/null and b/frontend/fonts/original/Marianne/pdfs/Marianne ExtraBold Italic 11.01.46.pdf differ diff --git a/frontend/fonts/original/Marianne/pdfs/Marianne Italic 11.01.46.pdf b/frontend/fonts/original/Marianne/pdfs/Marianne Italic 11.01.46.pdf new file mode 100644 index 0000000..663cc3f Binary files /dev/null and b/frontend/fonts/original/Marianne/pdfs/Marianne Italic 11.01.46.pdf differ diff --git a/frontend/fonts/original/Marianne/pdfs/Marianne Light 11.01.46.pdf b/frontend/fonts/original/Marianne/pdfs/Marianne Light 11.01.46.pdf new file mode 100644 index 0000000..f7b03a6 Binary files /dev/null and b/frontend/fonts/original/Marianne/pdfs/Marianne Light 11.01.46.pdf differ diff --git a/frontend/fonts/original/Marianne/pdfs/Marianne Light Italic 11.01.46.pdf b/frontend/fonts/original/Marianne/pdfs/Marianne Light Italic 11.01.46.pdf new file mode 100644 index 0000000..99e5e96 Binary files /dev/null and b/frontend/fonts/original/Marianne/pdfs/Marianne Light Italic 11.01.46.pdf differ diff --git a/frontend/fonts/original/Marianne/pdfs/Marianne Medium 11.01.46.pdf b/frontend/fonts/original/Marianne/pdfs/Marianne Medium 11.01.46.pdf new file mode 100644 index 0000000..a121be2 Binary files /dev/null and b/frontend/fonts/original/Marianne/pdfs/Marianne Medium 11.01.46.pdf differ diff --git a/frontend/fonts/original/Marianne/pdfs/Marianne Medium Italic 11.01.46.pdf b/frontend/fonts/original/Marianne/pdfs/Marianne Medium Italic 11.01.46.pdf new file mode 100644 index 0000000..e7732a3 Binary files /dev/null and b/frontend/fonts/original/Marianne/pdfs/Marianne Medium Italic 11.01.46.pdf differ diff --git a/frontend/fonts/original/Marianne/pdfs/Marianne Thin 11.01.46.pdf b/frontend/fonts/original/Marianne/pdfs/Marianne Thin 11.01.46.pdf new file mode 100644 index 0000000..f2c7ded Binary files /dev/null and b/frontend/fonts/original/Marianne/pdfs/Marianne Thin 11.01.46.pdf differ diff --git a/frontend/fonts/original/Marianne/pdfs/Marianne Thin Italic 11.01.46.pdf b/frontend/fonts/original/Marianne/pdfs/Marianne Thin Italic 11.01.46.pdf new file mode 100644 index 0000000..09476e5 Binary files /dev/null and b/frontend/fonts/original/Marianne/pdfs/Marianne Thin Italic 11.01.46.pdf differ diff --git a/frontend/fonts/original/Marianne_fd0ba9c190.zip b/frontend/fonts/original/Marianne_fd0ba9c190.zip new file mode 100644 index 0000000..66de5f4 Binary files /dev/null and b/frontend/fonts/original/Marianne_fd0ba9c190.zip differ diff --git a/frontend/fonts/original/Source-sans-pro.zip b/frontend/fonts/original/Source-sans-pro.zip new file mode 100644 index 0000000..93e9493 Binary files /dev/null and b/frontend/fonts/original/Source-sans-pro.zip differ diff --git a/frontend/fonts/original/Spectral_2a059d2f08.zip b/frontend/fonts/original/Spectral_2a059d2f08.zip new file mode 100644 index 0000000..e55ea38 Binary files /dev/null and b/frontend/fonts/original/Spectral_2a059d2f08.zip differ diff --git a/frontend/fonts/process_fonts.sh b/frontend/fonts/process_fonts.sh new file mode 100755 index 0000000..165af21 --- /dev/null +++ b/frontend/fonts/process_fonts.sh @@ -0,0 +1,7 @@ +#!/bin/bash +# que le charset pour le Français +#pyftsubset $1 --unicodes="U+20-5F, U+61-7A, U+7C, U+A0, U+A7, U+A9, U+AB, U+B2-B3, U+BB, U+C0, U+C2, U+C6-CB, U+CE-CF, U+D4, U+D9, U+DB-DC, U+E0, U+E2, U+E6-EB, U+EE-EF, U+F4, U+F9, U+FB-FC, U+FF, U+152-153, U+178, U+2B3, U+2E2, U+1D48-1D49, U+2010-2011, U+2013-2014, U+2019, U+201C-201D, U+2020-2021, U+2026, U+202F-2030, U+20AC, U+2212" --layout-features='*' --flavor=woff2 --output-file=$2 + +# que les majuscules +pyftsubset $1 --unicodes="U+41-5A" --layout-features='*' --flavor=woff2 --output-file=$2 + diff --git a/frontend/images/LoginBanner.jpg b/frontend/images/LoginBanner.jpg new file mode 100644 index 0000000..5967b39 Binary files /dev/null and b/frontend/images/LoginBanner.jpg differ diff --git a/frontend/images/anonymous.svg b/frontend/images/anonymous.svg new file mode 100644 index 0000000..e56320c --- /dev/null +++ b/frontend/images/anonymous.svg @@ -0,0 +1,7 @@ + + + + + Svg Vector Icons : http://www.onlinewebfonts.com/icon + + \ No newline at end of file diff --git a/frontend/images/filter.svg b/frontend/images/filter.svg new file mode 100644 index 0000000..b442968 --- /dev/null +++ b/frontend/images/filter.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frontend/images/logo.svg b/frontend/images/logo.svg new file mode 100644 index 0000000..3255e3c --- /dev/null +++ b/frontend/images/logo.svg @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/frontend/images/setup.svg b/frontend/images/setup.svg new file mode 100644 index 0000000..e4ba571 --- /dev/null +++ b/frontend/images/setup.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frontend/images/topisto.svg b/frontend/images/topisto.svg new file mode 100644 index 0000000..5b356ed --- /dev/null +++ b/frontend/images/topisto.svg @@ -0,0 +1,351 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/frontend/images/user.svg b/frontend/images/user.svg new file mode 100644 index 0000000..d99ce5a --- /dev/null +++ b/frontend/images/user.svg @@ -0,0 +1,12 @@ + + + + + > + + + + diff --git a/frontend/src/html/index.html b/frontend/src/html/index.html new file mode 100644 index 0000000..36db215 --- /dev/null +++ b/frontend/src/html/index.html @@ -0,0 +1,298 @@ + + + + + + + + template TOPISTO + + + + + + + + +
+
TEMPLATE
+ +
+ + + +
+
 
+
+
 
+
+ +
+ + + + +
+
+
+
+
+
+ +
+ This is a modal footer +
+
+
+ + +
+
This is a modal header
+
+
+
+ +
This is a modal footer
+
+ + + + + + + + + + + + + + + + + + diff --git a/frontend/src/html/logo.html b/frontend/src/html/logo.html new file mode 100644 index 0000000..f7f28c9 --- /dev/null +++ b/frontend/src/html/logo.html @@ -0,0 +1,381 @@ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + \ No newline at end of file diff --git a/frontend/src/scripts/UI/IntersectionObserver/footer.js b/frontend/src/scripts/UI/IntersectionObserver/footer.js new file mode 100644 index 0000000..934a261 --- /dev/null +++ b/frontend/src/scripts/UI/IntersectionObserver/footer.js @@ -0,0 +1,19 @@ +// Create a function that will handle any intersection between some elements and the viewport. +const handleFooterIntersection = function (entries) { + // Loop through all the observed elements + for (let entry of entries) { + // Check if the element is intersecting the viewport + if (entry.isIntersecting) { + console.log("The footer is visible in the viewport"); + if (typeof footerIsNowVisible === 'function') footerIsNowVisible(entry); + } else { + console.log("The footer is invisible in the viewport"); + if (typeof footerIsNowInvisible === 'function') footerIsNowInvisible(entry); + } + } +} +const footer = document.querySelector("#footer"); +if (footer) { + const footerObserver = new IntersectionObserver(handleFooterIntersection); + footerObserver.observe(footer); +} \ No newline at end of file diff --git a/frontend/src/scripts/UI/IntersectionObserver/header.js b/frontend/src/scripts/UI/IntersectionObserver/header.js new file mode 100644 index 0000000..4e6ada9 --- /dev/null +++ b/frontend/src/scripts/UI/IntersectionObserver/header.js @@ -0,0 +1,12 @@ +const headerObserver = new IntersectionObserver(entries => { + entries.forEach(entry => { + if (typeof headerIsVisible === 'function') headerIsVisible(entry.isIntersecting); + }); +}); + +const header = document.querySelector("header"); +if (header) headerObserver.observe(header); +else myLog('No header to observe'); + + + diff --git a/frontend/src/scripts/UI/IntersectionObserver/synthesis.js b/frontend/src/scripts/UI/IntersectionObserver/synthesis.js new file mode 100644 index 0000000..6c4121c --- /dev/null +++ b/frontend/src/scripts/UI/IntersectionObserver/synthesis.js @@ -0,0 +1,17 @@ +const synthesisTopObserver = new IntersectionObserver(entries => { + entries.forEach(entry => { + // Check if the element is intersecting the viewport + if (entry.isIntersecting) { + myLog("The synthesis is visible in the viewport"); + if (typeof synthesisTopIsNowVisible === 'function') synthesisTopIsNowVisible(entry); + } else { + myLog("The synthesis is invisible in the viewport"); + if (typeof synthesisTopIsNowInvisible === 'function') synthesisTopIsNowInvisible(entry); + } + }); +}); + +const synthesis_top = document.querySelector("#synthesis_top"); +if (synthesis_top) synthesisTopObserver.observe(synthesis_top); +else myLog('No #synthesis_top to obseve'); + diff --git a/frontend/src/scripts/UI/calendrier.js b/frontend/src/scripts/UI/calendrier.js new file mode 100644 index 0000000..ed7fdd7 --- /dev/null +++ b/frontend/src/scripts/UI/calendrier.js @@ -0,0 +1,855 @@ +// Affichage une colonne par intervenant +//function afficher_planning_atos_2(unModeAffichage) { + + +function ajouterClientColonne(client, colonne, indexCol) { + if (colonne[indexCol].indexOf(client) == -1) { + colonne[indexCol] += '/' + client; + } +} + +datagrid_hooks['calendar_intervenants'] = function(){ + let element = document.querySelector("#datagrid"); + + let filtre = getTrigrammeCollaborateur(getContexteValeur('intervenant')); + + let lebreak = 0; + let annee = new Date().getFullYear(); + let ladate = dateGetPrevMonday(new Date(annee, 0, 1)); + let ladateToString; + let intervenants = []; + let jours_semaine = ["D", "L", "M", "M", "J", "V", "S"]; + let lastWeekNumber = 99; + let tamponWeek = ""; + let tamponWeekFlag = false; + let header = ''; + + let jours_feries = []; + + let contenu = ''; + + // Tout le calendirer est encapsulé dans une cellule d'un tableau + // Permet de garantir le comportement du scroll avec le sticky des thead et tfoot + /* + contenu += ''; + contenu += ''; + contenu += ''; + intervenants.forEach((intervenant) => { + let trigramme = getTrigrammeCollaborateur(intervenant); + header += '"; + }); + + contenu += '
Calendrier
'; + */ + + sortItemsByStartDate(); + + setItemsVisibility(); + + if (getContexteValeur('debut')) + { + ladate = stringdateToDate(getContexteValeur('debut')); + ladate = dateGetPrevMonday(ladate); + } + + ladateToString = formatDatetoStringDate(ladate); + + // Se limiter à un an + annee = ladate.getFullYear() + 1; + annee += 1; + // Et à 2 ans si calendrier glissant + // TODO : ajouter un contexte qui indique si on est en calendrier annuel ou glissant + //if (select_date_debut == 2) annee += 1; + + // Définir la liste des intervenants + items.forEach(element => { + let item = getItemFromElement(element); + let debut = item['debut'].substring(0,8); + let fin = item['fin'].substring(0,8); + + // On ne s'occupe que des feuilles + if (item.childs.length != 0) return true; + + // Au passage alimenter les jours fériés , mais ne pas les compter + if (item['client'] == 'FER') { + jours_feries.push(item['fin'].substring(0,8)); + return true; + } + + // On élimine ce qui est masqué + if (!item["visible"]) return true; + + // On élimine les items non affectés + if (parseInt(item["intervenant"]) == 0) return true; + + // Ne pas compter les Releases + if (item['client'] == 'REL') return true; + + // Appliquer le filtre + if (filtre != 'ANO') + if (getTrigrammeCollaborateur(item['intervenant']) != filtre) return true; + + // On ne compte pas ce qui n'est pas dans la période concernée + if (fin < ladateToString ) return true; + if (fin == '99999999' ) return true; + if (debut > (annee+'1231') ) return true; + + if (intervenants.indexOf(item["intervenant"]) == -1) { + intervenants.push(item["intervenant"]); + } + }); + intervenants.sort(); + + header += ' Calendrier
' + trigramme + "
'; + + contenu += " " + header +""; + + contenu += " "; + + let semaine_vide = ""; + let semaine_paire = false; + let couleur = ''; + semaine_vide += ''; + semaine_vide += ''; + semaine_vide += ''; + semaine_vide += ""; + + while (annee > ladate.getFullYear()) { + let bgcolor = "white"; + let font_weight = 'normal'; + let jour = ladate.getDay(); + let jour_courant = formatDatetoStringDate(ladate); + let weekNumber = stringdateGetWeekOfYear(jour_courant)%100; + let colonnes = []; + let colonnes_bw = []; // Before Work + let colonnes_am = []; // Matin + let colonnes_md = []; // Midi + let colonnes_pm = []; // Après-Midi + let colonnes_aw = []; // After Work + let style_tr = ''; + let style_td = ''; + let jour_libelle = ''; + + intervenants.forEach((intervenant) => { + colonnes.push(""); + colonnes_bw.push(""); + colonnes_am.push(""); + colonnes_md.push(""); + colonnes_pm.push(""); + colonnes_aw.push(""); + }); + + // On change de semaine + // Si la semaine est vide, tamponWeekFlag == false + if (weekNumber != lastWeekNumber) { + let semaine = ''; + if (lastWeekNumber != 99) semaine = semaine_vide.replace("SXX", "S" + stringDatePadDigits(lastWeekNumber,2)); + if (tamponWeekFlag) { + semaine = tamponWeek; + semaine_paire = !semaine_paire; + } + contenu += semaine; + tamponWeek = ""; + tamponWeekFlag = false; + } + + // Couleur pour les samedi et dimanche + if (jour == 0 || jour == 6) bgcolor = "#f1d4af"; + // Couleur pour les lundi et vendredi + if (jour == 1 || jour == 5) bgcolor = "#eeeeee"; + // Couleur pour les jours fériés + if (jours_feries.includes(jour_courant)) bgcolor = "#f1d4af"; + + // Couleur d'aujourd'hui + if (jour_courant == todayStringDate){ + bgcolor='#87cefa'; + font_weight='bold'; + tamponWeekFlag = true; + } + + items.forEach((element) => { + let item = getItemFromElement(element); + + let debut = item["debut"]; + let fin = item["fin"]; + let jour_debut; + let jour_fin; + + let ajout = false; + + if (isDebugItem(item)){ + myLog('item ICI'); + } + + if (!item["visible"]) return true; // Invisible + if (item["intervenant"] == 0) return true; // Non affecté + if (item.childs.length != 0) return true; // Noeud + + if ((fin.substring(8,12) == '0000')||(fin.substring(8,12) == '9999')) fin = fin.substring(0,8)+'2000'; + + if (item['type'] == 'TODO') debut = fin; // Un TODO est un jalon + + jour_debut = debut.substring(0,8); + jour_fin = fin.substring(0,8); + + // if (jour_debut > jour_courant) return false; + + // Ceci n'est pas réellement planifié + if ((jour_debut == '00000000') && (jour_fin.substring(0,8) == (1+parseInt(todayStringDate.substring(0,4))+'1231'))) { + return true; + } + + // L'item débute ou finit le jour courant + if (jour_debut == jour_courant) ajout = true; + if (jour_fin == jour_courant) ajout = true; + + // Le jour courant est entièrement contenu dans l'item + if (jour_debut < jour_courant && jour_fin > jour_courant) ajout = true; + + if (ajout) { + let indexCol = intervenants.indexOf(item["intervenant"]); + let client = item["client"]; + let horaire_debut = 0; + let horaire_fin = 20; + let colonne = null; + + tamponWeekFlag = true; + + if (jour_courant == jour_debut) horaire_debut = parseInt(debut.substring(8, 10)); + if (jour_courant == jour_fin) horaire_fin = parseInt(fin.substring(8, 10)); + + // Pour les releases et les jour fériés, on affiche le libellé + if ((client == 'REL')||(client == 'FER')) { + jour_libelle = item['libelle']; + return true; + } + + if (client == 'REL') return true; + if (client == 'FER') return true; + + //if (client == "ABS") bgcolor = "#f1d4af"; + //if (client == "CGI") font_weight += ";color:blue"; + + if (indexCol == -1) { + myLog(item["intervenant"] + " inconnu"); + return true; + } + + if ((horaire_debut <= 9) && (horaire_fin<=9)) ajouterClientColonne(client, colonnes_bw, indexCol); + if ((horaire_debut >= 12) && (horaire_fin<=14)) ajouterClientColonne(client, colonnes_md, indexCol); + if ((horaire_debut >= 17) && (horaire_fin<=21)) ajouterClientColonne(client, colonnes_aw, indexCol); + + if ((horaire_debut < 12) && (horaire_fin > 9)) ajouterClientColonne(client, colonnes_am, indexCol); + if ((horaire_debut < 17) && (horaire_fin > 14)) ajouterClientColonne(client ,colonnes_pm, indexCol); + } + }); + + style_tr = 'background:'+bgcolor+';font-weight:'+font_weight; + tamponWeek += ''; + + if (weekNumber != lastWeekNumber) { + if (semaine_paire) couleur = '#eeeeee'; + else couleur = 'white'; + lastWeekNumber = weekNumber; + /* + tamponWeek += '"; + */ + } + + + if (jour == 1) style_td = 'border-top:1px solid black'; // Le lundi + + tamponWeek += ''; + + tamponWeek += ''; + + if (jour_libelle != '' ) { + tamponWeek += ''; + } else { + tamponWeek += '"; + } + + intervenants.forEach((intervenant) => { + let index = intervenants.indexOf(intervenant); + let aligne = "center"; + let colonne = colonnes[index].substring(1); + let colonne_bw = colonnes_bw[index]; + let colonne_am = colonnes_am[index]; + let colonne_md = colonnes_md[index]; + let colonne_pm = colonnes_pm[index]; + let colonne_aw = colonnes_aw[index]; + let style_am = ""; + let style_pm = ""; + let style_tr_td = ""; + + // if (colonne_bw != '' || colonne_am != '' || colonne_md != '' || colonne_pm != '' || colonne_aw != '') { + //tamponWeekFlag = true; + if (colonne != '') { + let tempo = colonne.replace('',''); + let valeurs = tempo.split('/'); + valeurs.forEach(valeur => { + if (!colonne_am.includes(valeur)) colonne_am += '/'+valeur+''; + if (!colonne_pm.includes(valeur)) colonne_pm += '/'+valeur+''; + // if (!colonne_aw.includes(valeur)) colonne_aw += '/'+valeur+''; + }) + } + + colonne_bw = colonne_bw.substring(1); + colonne_am = colonne_am.substring(1); + colonne_md = colonne_md.substring(1); + colonne_pm = colonne_pm.substring(1); + colonne_aw = colonne_aw.substring(1); + + if (jour == 0 || jour ==6) { + colonne_bw = ""; + colonne_am = ""; + colonne_md = ""; + colonne_pm = ""; + colonne_aw = ""; + } + + style_tr = 'overflow: hidden;white-space: nowrap;text-overflow:ellipsis'; + style_tr += ';border-color:black;border-width:1px'; + style_tr += ';padding-left: 5px; padding-right: 5px'; + style_tr += ';background:' + bgcolor; + + style_tr_td = style_tr+";"+style_td; + + if (colonne_am.includes("ABS")) style_am+=";background:#f004"; + if (colonne_pm.includes("ABS")) style_pm+=";background:#f004"; + + if (colonne_am.includes("CGI")) style_am+=";color:blue"; + if (colonne_pm.includes("CGI")) style_pm+=";color:blue"; + + tamponWeek += '"; + tamponWeek += '"; + tamponWeek += '"; + tamponWeek += '"; + tamponWeek += '"; + + /*} else { + //if (colonne != '') tamponWeekFlag = true; + tamponWeek += '"; + } + */ + }); + + tamponWeek += ""; + + // Pour ne pas boucler indéfiniment + if (++lebreak > 400) break; + + /* + if (select_date_debut == 1) { + // Planning glissant + // Stop au dimanche suivant anniversaire + if (intJourCourant > intValToDay + 10000) if (jour == 0) break; + } + */ + + ladate.setDate(ladate.getDate() + 1); + } + + contenu += tamponWeek; + + contenu += " " + header +""; + contenu += "
SXX 
'; + tamponWeek += "S" + lastWeekNumber.toLocaleString(undefined, { minimumIntegerDigits: 2 }); + tamponWeek += "'; + if (jour == 4) tamponWeek += 'S'+lastWeekNumber.toLocaleString(undefined, { minimumIntegerDigits: 2 }); + tamponWeek += ' '+jours_semaine[jour]+''+ jour_libelle +''; + tamponWeek += + ladate.getDate().toLocaleString(undefined, { minimumIntegerDigits: 2 }) + + " / " + + (ladate.getMonth() + 1).toLocaleString(undefined, { minimumIntegerDigits: 2 }); + tamponWeek += "
' + colonne_bw + "
' + colonne_am + "
' + colonne_md + "
' + colonne_pm + "
' + colonne_aw + "
' + colonne + "
"; + + /* + contenu += ""; + contenu += "Calendrier"; + contenu += ""; + */ + + //element.innerHTML = '
'+contenu+'
'; + + element.innerHTML = contenu; +} + +datagrid_hooks['calendar_clients'] = function(){ + let element = document.querySelector("#datagrid"); + + let filtre = getContexteValeur('client'); + + let lebreak = 0; + let annee = new Date().getFullYear(); + let ladate = dateGetPrevMonday(new Date(annee, 0, 1)); + let ladateToString; + let entetes = []; + let jours_semaine = ["D", "L", "M", "M", "J", "V", "S"]; + let lastWeekNumber = 99; + let tamponWeek = ""; + let tamponWeekFlag = false; + let header = ''; + + let jours_feries = []; + + let contenu = ''; + + sortItemsByStartDate(); + + setItemsVisibility(); + + if (getContexteValeur('debut')) + { + ladate = stringdateToDate(getContexteValeur('debut')); + ladate = dateGetPrevMonday(ladate); + } + + ladateToString = formatDatetoStringDate(ladate); + + // Se limiter à un an + annee = ladate.getFullYear() + 1; + annee += 1; + // Et à 2 ans si calendrier glissant + // TODO : ajouter un contexte qui indique si on est en calendrier annuel ou glissant + //if (select_date_debut == 2) annee += 1; + + // Définir la liste des intervenants + items.forEach(element => { + let item = getItemFromElement(element); + let debut = item['debut'].substring(0,8); + let fin = item['fin'].substring(0,8); + + // On ne s'occupe que des feuilles + if (item.childs.length != 0) return true; + + // Au passage alimenter les jours fériés , mais ne pas les compter + if (item['client'] == 'FER') { + jours_feries.push(item['fin'].substring(0,8)); + return true; + } + + // Ne pas compter les Releases + if (item['client'] == 'REL') return true; + + if (filtre != '') + if (item['client'] != filtre) return true; + + // On élimine ce qui est masqué + if (!item["visible"]) return true; + + // On élimine les items non affectés + if (parseInt(item["client"]) == 0) return true; + + // On ne compte pas ce qui n'est pas dans la période concernée + if (fin < ladateToString ) return true; + if (fin == '99999999' ) return true; + if (debut > (annee+'1231') ) return true; + + if (entetes.indexOf(item['client']) == -1) { + entetes.push(item['client']); + } + }); + entetes.sort(); + + header += ' Calendrier'; + entetes.forEach((entete) => { + header += '
' + entete + "
"; + }); + + contenu += ''; + + contenu += " " + header +""; + + contenu += " "; + + let semaine_vide = ""; + let semaine_paire = false; + let couleur = ''; + semaine_vide += ''; + semaine_vide += ''; + semaine_vide += ''; + semaine_vide += ""; + + while (annee > ladate.getFullYear()) { + let bgcolor = "white"; + let font_weight = 'normal'; + let jour = ladate.getDay(); + let jour_courant = formatDatetoStringDate(ladate); + let weekNumber = stringdateGetWeekOfYear(jour_courant)%100; + let colonnes = []; + let colonnes_bw = []; // Before Work + let colonnes_am = []; // Matin + let colonnes_md = []; // Midi + let colonnes_pm = []; // Après-Midi + let colonnes_aw = []; // After Work + let style_tr = ''; + let style_td = ''; + let jour_libelle = ''; + + entetes.forEach((intervenant) => { + colonnes.push(""); + colonnes_bw.push(""); + colonnes_am.push(""); + colonnes_md.push(""); + colonnes_pm.push(""); + colonnes_aw.push(""); + }); + + // On change de semaine + // Si la semaine est vide, tamponWeekFlag == false + if (weekNumber != lastWeekNumber) { + let semaine = ''; + if (lastWeekNumber != 99) semaine = semaine_vide.replace("SXX", "S" + stringDatePadDigits(lastWeekNumber,2)); + if (tamponWeekFlag) { + semaine = tamponWeek; + semaine_paire = !semaine_paire; + } + contenu += semaine; + tamponWeek = ""; + tamponWeekFlag = false; + } + + // Couleur pour les samedi et dimanche + if (jour == 0 || jour == 6) bgcolor = "#f1d4af"; + // Couleur pour les lundi et vendredi + if (jour == 1 || jour == 5) bgcolor = "#eeeeee"; + // Couleur pour les jours fériés + if (jours_feries.includes(jour_courant)) bgcolor = "#f1d4af"; + + // Couleur d'aujourd'hui + if (jour_courant == todayStringDate){ + bgcolor='#87cefa'; + font_weight='bold'; + tamponWeekFlag = true; + } + + items.forEach((element) => { + let item = getItemFromElement(element); + + let debut = item["debut"]; + let fin = item["fin"]; + let jour_debut; + let jour_fin; + + let ajout = false; + + if (isDebugItem(item)){ + myLog('item ICI'); + } + + if (!item["visible"]) return true; // Invisible + if (item["client"] == 0) return true; // Non affecté + if (item.childs.length != 0) return true; // Noeud + + if ((fin.substring(8,12) == '0000')||(fin.substring(8,12) == '9999')) fin = fin.substring(0,8)+'2000'; + + if (item['type'] == 'TODO') debut = fin; // Un TODO est un jalon + + jour_debut = debut.substring(0,8); + jour_fin = fin.substring(0,8); + + // if (jour_debut > jour_courant) return false; + + // Ceci n'est pas réellement planifié + if ((jour_debut == '00000000') && (jour_fin.substring(0,8) == (1+parseInt(todayStringDate.substring(0,4))+'1231'))) { + return true; + } + + // L'item débute ou finit le jour courant + if (jour_debut == jour_courant) ajout = true; + if (jour_fin == jour_courant) ajout = true; + + // Le jour courant est entièrement contenu dans l'item + if (jour_debut < jour_courant && jour_fin > jour_courant) ajout = true; + + if (ajout) { + let indexCol = entetes.indexOf(item["client"]); + let intervenant = getTrigrammeCollaborateur(item["intervenant"]); + let client = item["client"]; + let horaire_debut = 0; + let horaire_fin = 20; + let colonne = null; + + tamponWeekFlag = true; + + if (jour_courant == jour_debut) horaire_debut = parseInt(debut.substring(8, 10)); + if (jour_courant == jour_fin) horaire_fin = parseInt(fin.substring(8, 10)); + + // Pour les releases et les jour fériés, on affiche le libellé + if ((client == 'REL')||(client == 'FER')) { + jour_libelle = item['libelle']; + return true; + } + + if (client == 'REL') return true; + if (client == 'FER') return true; + + if (client == "ABS") bgcolor = "#f1d4af"; + if (client == "CGI") font_weight += ";color:blue"; + + if (indexCol == -1) { + myLog(item["client"] + " inconnu"); + return true; + } + + if ((horaire_debut <= 9) && (horaire_fin<=9)) ajouterClientColonne(intervenant, colonnes_bw, indexCol); + if ((horaire_debut >= 12) && (horaire_fin<=14)) ajouterClientColonne(intervenant, colonnes_md, indexCol); + if ((horaire_debut >= 17) && (horaire_fin<=21)) ajouterClientColonne(intervenant, colonnes_aw, indexCol); + + if ((horaire_debut < 12) && (horaire_fin > 9)) ajouterClientColonne(intervenant, colonnes_am, indexCol); + if ((horaire_debut < 17) && (horaire_fin > 14)) ajouterClientColonne(intervenant ,colonnes_pm, indexCol); + } + }); + + style_tr = 'background:'+bgcolor+';font-weight:'+font_weight; + tamponWeek += ''; + + if (weekNumber != lastWeekNumber) { + if (semaine_paire) couleur = '#eeeeee'; + else couleur = 'white'; + lastWeekNumber = weekNumber; + /* + tamponWeek += '"; + */ + } + + + if (jour == 1) style_td = 'border-top:1px solid black'; // Le lundi + + tamponWeek += ''; + + tamponWeek += ''; + + if (jour_libelle != '' ) { + tamponWeek += ''; + } else { + tamponWeek += '"; + } + + entetes.forEach((entete) => { + let index = entetes.indexOf(entete); + let aligne = "center"; + let colonne = colonnes[index].substring(1); + let colonne_bw = colonnes_bw[index]; + let colonne_am = colonnes_am[index]; + let colonne_md = colonnes_md[index]; + let colonne_pm = colonnes_pm[index]; + let colonne_aw = colonnes_aw[index]; + + // if (colonne_bw != '' || colonne_am != '' || colonne_md != '' || colonne_pm != '' || colonne_aw != '') { + //tamponWeekFlag = true; + if (colonne != '') { + let tempo = colonne.replace('',''); + let valeurs = tempo.split('/'); + valeurs.forEach(valeur => { + if (!colonne_am.includes(valeur)) colonne_am += '/'+valeur+''; + if (!colonne_pm.includes(valeur)) colonne_pm += '/'+valeur+''; + // if (!colonne_aw.includes(valeur)) colonne_aw += '/'+valeur+''; + }) + } + + colonne_bw = colonne_bw.substring(1); + colonne_am = colonne_am.substring(1); + colonne_md = colonne_md.substring(1); + colonne_pm = colonne_pm.substring(1); + colonne_aw = colonne_aw.substring(1); + + style_tr = 'overflow: hidden;white-space: nowrap;text-overflow:ellipsis'; + style_tr += ';border-color:black;border-width:1px'; + style_tr += ';padding-left: 5px; padding-right: 5px'; + style_tr += ';background:' + bgcolor; + + tamponWeek += '"; + tamponWeek += '"; + tamponWeek += '"; + tamponWeek += '"; + tamponWeek += '"; + + /*} else { + //if (colonne != '') tamponWeekFlag = true; + tamponWeek += '"; + } + */ + }); + + tamponWeek += ""; + + // Pour ne pas boucler indéfiniment + if (++lebreak > 400) break; + + /* + if (select_date_debut == 1) { + // Planning glissant + // Stop au dimanche suivant anniversaire + if (intJourCourant > intValToDay + 10000) if (jour == 0) break; + } + */ + + ladate.setDate(ladate.getDate() + 1); + } + + contenu += tamponWeek; + + contenu += " " + header +""; + contenu += "
SXX 
'; + tamponWeek += "S" + lastWeekNumber.toLocaleString(undefined, { minimumIntegerDigits: 2 }); + tamponWeek += "'; + if (jour == 4) tamponWeek += 'S'+lastWeekNumber.toLocaleString(undefined, { minimumIntegerDigits: 2 }); + tamponWeek += ' '+jours_semaine[jour]+''+ jour_libelle +''; + tamponWeek += + ladate.getDate().toLocaleString(undefined, { minimumIntegerDigits: 2 }) + + " / " + + (ladate.getMonth() + 1).toLocaleString(undefined, { minimumIntegerDigits: 2 }); + tamponWeek += "
' + colonne_bw + "
' + colonne_am + "
' + colonne_md + "
' + colonne_pm + "
' + colonne_aw + "
' + colonne + "
"; + + element.innerHTML = contenu; +} + + +modal_hooks['calendrier'] = function(parametres){ + let jour_courant='00000000'; + let paramSplit = parametres.split(':'); + + paramSplit.forEach(element => { + let elemSplit=element.split('='); + if (elemSplit[0]==='jour') jourInfo(elemSplit[1].substring(0,8)); + }); +}; + +function testDateItem(item, jour_courant) +{ + let retour = false; + let jour_debut = item["debut"].substring(0,8); + let jour_fin = item["fin"].substring(0,8); + + // Les TODO sont des jalons + if (item['type']=='TODO') jour_debut = jour_fin; + + // Se limiter aux items réellement entièrement plannifiés + if ((jour_debut != '00000000') && (jour_fin != (1+parseInt(todayStringDate.substring(0,4))+'1231'))) { + // L'item débute ou finit le jour courant + if (jour_debut == jour_courant) retour = true; + if (jour_fin == jour_courant) retour = true; + + // Le jour courant est entièrement contenu dans l'item + if (jour_debut < jour_courant && jour_fin > jour_courant) retour = true; + } + + return retour; +} + +function jourInfo(jour_courant) { + let modal_header='Détail '+formatLocaleDateFromStringDate(jour_courant)+''; + let modal_body='TODO inconnu !'; + let modal_footer=''; + + let start = 7; // Mettre un contexte ... + let finish = 14; // Mettre un contexte ... + + let horaires = []; + + for(i=0;i { + let resultat = getItemFromElement(element); + + let debut = resultat["debut"]; + let fin = resultat["fin"]; + let jour_debut; + let jour_fin; + let heure_debut; + let heure_fin; + + if (isDebugItem(resultat)){ + myLog('item ICI'); + } + + // L'item concerne-t-il bien la date courante ? + if (!testDateItem(resultat, jour_courant)) return true; + + heure_fin=fin.substring(8,12); + if (heure_fin =='0000') fin=fin.substring(0,8)+'2000'; + + // Les TODO sont des jalons + if (resultat.type=='TODO') debut = fin; + + jour_debut = debut.substring(0,8); + jour_fin = fin.substring(0,8); + heure_debut = parseInt(debut.substring(8,12)); + heure_fin = parseInt(fin.substring(8,12)); + + // L'item commence avant le jour courant + if (jour_debut < jour_courant) heure_debut = '0900'; + + // L'item termine après le jour courant + if (jour_fin > jour_courant) heure_fin = '1800'; + + // Recalibrer les heures de debut et de fin + if (heure_debut=='0000') heure_debut='0900'; + if (heure_fin=='0000') heure_fin='2000'; + + for(i=0;i= cur_fin)) flag = true; + if ((heure_debut >= cur_debut)&&(heure_fin <= cur_fin)) flag = true; + if ((heure_debut == heure_fin)&&(heure_fin == cur_fin)) flag = false; + // Cas particulier de la pause de midi + if (cur_debut == '1300') + if ((heure_debut<'1230')&&(heure_fin>'1330')) flag = false; + if (flag) horaires[(i*2)] += resultat.libelle+'
'; + + cur_debut = parseInt((start+i)+'30'); + cur_fin = parseInt((start+i)+1+'00'); + flag = false; + if ((heure_debut <= cur_debut)&&(heure_fin >= cur_fin)) flag = true; + if ((heure_debut >= cur_debut)&&(heure_fin <= cur_fin)) flag = true; + if ((heure_debut == heure_fin)&&(heure_fin == cur_fin)) flag = false; + // Cas particulier de la pause de midi + if (cur_debut == '1230') + if ((heure_debut<'1230')&&(heure_fin>'1330')) flag = false; + if (flag) horaires[(i*2)+1] += resultat.libelle+'
'; + } + }); + + modal_body = ''; + for(i=0;i '18:00') style_tr=' class="tr2"'; + if (debut == '13:00') style_tr=' class="tr2"'; + modal_body += ''; + modal_body += ''; + modal_body += ''; + modal_body += ''; + + debut = stringDatePadDigits((i+start),2)+':30'; + fin = stringDatePadDigits((i+start)+1,2)+':00'; + style_tr=' class="tr1"'; + if (debut < '09:00') style_tr=' class="tr2"'; + if (fin > '18:00') style_tr=' class="tr2"'; + if (debut == '12:30') style_tr=' class="tr2"'; + modal_body += ''; + modal_body += ''; + modal_body += ''; + modal_body += ''; + } + modal_body += ''; + + modalSetHeader(modal_header); + modalSetBody(modal_body); + modalSetFooter(modal_footer); +} diff --git a/frontend/src/scripts/UI/datagrid.js b/frontend/src/scripts/UI/datagrid.js new file mode 100644 index 0000000..d4ab6e6 --- /dev/null +++ b/frontend/src/scripts/UI/datagrid.js @@ -0,0 +1,147 @@ +// --------------------------------------------------------------------------------------- +// ---- Fonctions pour charger des lignes identiques dans le tableau +// --------------------------------------------------------------------------------------- +function datagridLignesIdentiques(nblignes, valeur) { + let element = document.querySelector('#datagrid'); + let contenu=''; + + contenu += ''; + contenu += ' '; + contenu += ' '; + contenu += ' '; + contenu += ' '; + contenu += ' '; + + contenu += ' '; + for(let i=0; i'; + contenu += ' '; + } + + contenu += ' '; + contenu += ' '; + contenu += ' '; + contenu += ' '; + contenu += ' '; + contenu += '
 
 
'; + + element.innerHTML = contenu; +} +// --------------------------------------------------------------------------------------- +// ---- Fonctions pour charger des lignes vides +// --------------------------------------------------------------------------------------- +function datagridEmptyLines(nblignes) { + return datagridLignesIdentiques(nblignes,' '); +} + +// --------------------------------------------------------------------------------------- +// ---- Fonctions utilitaires +// --------------------------------------------------------------------------------------- +function datagridLoading() { + let nblignes = 25 + Math.floor(Math.random() * 475); // Nbre entre ntre 25 et 500 + return datagridLignesIdentiques(nblignes, 'Loading data ..'); +} + +// --------------------------------------------------------------------------------------- +// ---- Fonctions pour charger des données au hasard dans le datagrid +// --------------------------------------------------------------------------------------- + +var nbCols = 5; + +function setDatagridRandomValues(element, nbcols, nblignes) +{ + let contenu=''; + + contenu += ''; + contenu += ' '; + contenu += ' '; + contenu += ' '; + for(let i= 0; i'; + } + contenu += ' '; + contenu += ' '; + + + contenu += ' '; + for(let i=0; i'; + contenu += ' '; + for(let ii= 0; ii'; + } + contenu += ' '; + } + // Rejouter 2 lignes vides + for(let i=0; i<2; i++) + { + contenu += ' '; + contenu += ' '; + for(let ii= 0; ii'; + } + contenu += ' '; + contenu += ' '; + contenu += '
ID HEAD
ID
 
'; + + element.innerHTML = contenu; + + init_modal(); + nbCols = nbcols; +} + +modal_hooks['random'] = function(parametres){ + let paramSplit = parametres.split(','); + paramSplit.forEach(element => { + let elemSplit=element.split('='); + if (elemSplit[0] === 'idligne') { + let ligne = elemSplit[1]; + let modal_header='Détail de la ligne '+ligne; + let modal_body=''; + let modal_footer='