Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3177451a9c | ||
|
|
1fe6bcf5c9 | ||
|
|
3cc5d00587 | ||
|
|
f620cae4f9 | ||
|
|
6c4ea07e6e | ||
|
|
b95944701e | ||
|
|
2f8701c2e0 | ||
|
|
f47142c465 | ||
|
|
3105f2e7a0 | ||
|
|
0ea43d0c6b | ||
|
|
99b6876ce2 | ||
|
|
4e26b8acc0 | ||
|
|
0b2a16d117 | ||
|
|
b41b19d4c6 | ||
|
|
f9142e3080 | ||
|
|
9660149c67 | ||
|
|
2b957e1887 | ||
|
|
57a2503da2 | ||
|
|
f5f84ad98e | ||
|
|
de37186706 | ||
|
|
4d3fc69faa | ||
|
|
022819cbe6 | ||
|
|
1b0d7ce1a9 | ||
|
|
a6ed60462d | ||
|
|
a8d2852313 | ||
|
|
8907233ef5 | ||
|
|
7a3d3a3a96 | ||
|
|
23a3430ea5 | ||
|
|
a15c7578c3 | ||
|
|
08f6633507 | ||
|
|
dbe33ec760 | ||
|
|
145f7de781 | ||
|
|
287ec30cf7 | ||
|
|
c29634b0d2 | ||
|
|
ffa2038acb | ||
|
|
febbf8dd1d | ||
|
|
09610ab3cd | ||
|
|
33328074b0 | ||
|
|
1dc14a193a | ||
|
|
2fc7ffe458 | ||
|
|
52ee6b26b1 | ||
|
|
d77f92b6f0 | ||
|
|
e65cd3a96e | ||
|
|
80569e0977 | ||
|
|
66d0f511df | ||
|
|
93201fbd20 | ||
|
|
b2fccae431 | ||
|
|
8c99fba6fa | ||
|
|
d207bc74cb | ||
|
|
bcf75ce3c3 | ||
|
|
d08d9dbb9f | ||
|
|
33f0cb04e0 | ||
|
|
3fb95cab92 | ||
|
|
b768af15fe | ||
|
|
00889318ee | ||
|
|
f023bd9772 | ||
|
|
4ec1935eef | ||
|
|
ee8c6a6545 | ||
|
|
02b1cbfd6c | ||
|
|
97f88d5eeb | ||
|
|
5561a24050 | ||
|
|
bdf8cffd04 | ||
|
|
fa7e5c2091 | ||
|
|
f1a5d478f3 | ||
|
|
de4dadb9e5 | ||
|
|
b18b09d4a5 | ||
|
|
3f66cb89e6 | ||
|
|
495c130e79 | ||
|
|
7dfbc06bd1 | ||
|
|
132dfc6860 | ||
|
|
e647b6c1f0 | ||
|
|
8b3ef0df95 | ||
|
|
224673a2c4 | ||
|
|
eaff989bdd | ||
|
|
8ac62d2a02 | ||
|
|
1fa8f88a6d | ||
|
|
d211425ff2 | ||
|
|
5b16a515f3 | ||
|
|
259cbd02c5 | ||
|
|
014a057164 | ||
|
|
9ebfdb3d95 | ||
|
|
4f6b82daa8 | ||
|
|
77ad96baf9 | ||
|
|
68900dd4ea | ||
|
|
c0c8ad515c | ||
|
|
287c299c41 | ||
|
|
a2bcedafc4 | ||
|
|
daf89f9189 | ||
|
|
2f96af9254 | ||
|
|
18a97394e8 | ||
|
|
e4ef2f7adc | ||
|
|
df7885ca1c | ||
|
|
d5dfb6c550 | ||
|
|
9b84893d88 | ||
|
|
a1f68ec11d | ||
|
|
b9c6ace1da | ||
|
|
c1c7466dc7 | ||
|
|
02a1640b51 | ||
|
|
083e68ee4d | ||
|
|
4f7cd2c025 | ||
|
|
80969d1da0 | ||
|
|
5a0bf11c81 | ||
|
|
ca6e38cb9c | ||
|
|
ca5a604a3e | ||
|
|
0fcecc9c58 | ||
|
|
4e925171b3 | ||
|
|
41e2fe19bc | ||
|
|
a927d6bf59 | ||
|
|
c0cc183c59 | ||
|
|
b68c4ff9b4 | ||
|
|
132329361f | ||
|
|
4d86629315 | ||
|
|
d1c92f2957 | ||
|
|
0d2cc5b998 | ||
|
|
fdfd5d56c9 | ||
|
|
059c520a50 | ||
|
|
d8818dc435 | ||
|
|
2baa147afa | ||
|
|
e179bbe259 | ||
|
|
16cab4b768 | ||
|
|
6ab34fa87c | ||
|
|
fcfd366dec | ||
|
|
98dd685679 | ||
|
|
2597318488 | ||
|
|
aa997826f8 | ||
|
|
69705052b3 | ||
|
|
f903f17ebd | ||
|
|
95d50e9833 | ||
|
|
63e8a068b3 | ||
|
|
dbc0b4acee | ||
|
|
f31ac660d2 | ||
|
|
8b72f8c277 | ||
|
|
ca052682bb | ||
|
|
1b0e479e49 | ||
|
|
f22ceae41c | ||
|
|
346256f895 | ||
|
|
a0cbd5a23f | ||
|
|
803b0608cc | ||
|
|
7eb1cbdabd | ||
|
|
ca873a99f4 | ||
|
|
8d666baf28 | ||
|
|
be0c9d67bb | ||
|
|
f0594ba09c | ||
|
|
fce6d1615a | ||
|
|
a264526127 | ||
|
|
fbfffbb31a | ||
|
|
bca3610cff | ||
|
|
facd91375c | ||
|
|
96321005e0 | ||
|
|
6f07678f04 | ||
|
|
3b6ee90a7e | ||
|
|
909e8a1d8e | ||
|
|
8f2baca339 | ||
|
|
637166bfd6 | ||
|
|
45af3a21b7 | ||
|
|
7e686cef6b | ||
|
|
be43d30cc7 | ||
|
|
77b16f287a | ||
|
|
bc7fb794bf | ||
|
|
c1ab6d8687 | ||
|
|
ccfafc5da4 | ||
|
|
502281e219 | ||
|
|
b81cc58d5e | ||
|
|
05ac07d656 | ||
|
|
3234c78f0d | ||
|
|
3849ae306c | ||
|
|
301b14f518 | ||
|
|
df8566e1b5 | ||
|
|
45d05786da | ||
|
|
6a6bebb2d1 | ||
|
|
ea76c808de | ||
|
|
f9069540a9 | ||
|
|
8a9868b644 | ||
|
|
d1e2bf3e7d | ||
|
|
66c55f0722 | ||
|
|
ca7d0b6965 | ||
|
|
02ff28acdd | ||
|
|
cb56a4fe46 | ||
|
|
752e6752b4 | ||
|
|
00df76269a | ||
|
|
99483b3506 | ||
|
|
5619a6f22f | ||
|
|
c510cbf590 | ||
|
|
6d9265de0f | ||
|
|
49ea562322 | ||
|
|
1f087b6c08 | ||
|
|
37c839600e | ||
|
|
cef2e4fa49 | ||
|
|
11ff2b9084 | ||
|
|
69f16b59cb | ||
|
|
0e644260b6 | ||
|
|
33609ab534 | ||
|
|
1cc7a025a1 | ||
|
|
709b0ff61e | ||
|
|
0d7d90a442 | ||
|
|
5cbdc5eaf2 | ||
|
|
a7c3064df6 | ||
|
|
f63d52c9d6 | ||
|
|
b752256bda | ||
|
|
474d171779 | ||
|
|
51ce9b6e45 | ||
|
|
9cef24f827 | ||
|
|
e6880b7fed | ||
|
|
e505eba111 | ||
|
|
4e067d13b3 | ||
|
|
40c0042158 | ||
|
|
6abfa122e4 | ||
|
|
032540a712 | ||
|
|
cf95048f2b | ||
|
|
29a1ce7de7 | ||
|
|
1670b8b8d2 | ||
|
|
3644b935fd | ||
|
|
20162cceef | ||
|
|
44a9de7db7 | ||
|
|
f99a2d99a2 | ||
|
|
f795a3ea21 | ||
|
|
f8a56b7de2 | ||
|
|
8a667ccaba | ||
|
|
6ddd0b00bd | ||
|
|
c597cfda51 | ||
|
|
f673bc59d0 | ||
|
|
78b925daa6 | ||
|
|
4e05c94912 | ||
|
|
acb599b760 | ||
|
|
c7b70dbd56 | ||
|
|
b4f7299f27 | ||
|
|
6fd5a218a3 | ||
|
|
a1518c06fb | ||
|
|
c517a0b41f | ||
|
|
ded904fac8 | ||
|
|
abea6bff7b | ||
|
|
06f53ba6eb | ||
|
|
eda0919f52 | ||
|
|
1f27c744d2 | ||
|
|
bbc011ddb9 | ||
|
|
c2054a1ef6 | ||
|
|
f9d420fecd | ||
|
|
3e1d719512 | ||
|
|
f685bd18ab | ||
|
|
f46cc59041 | ||
|
|
380b1ed329 | ||
|
|
1056b4fba6 | ||
|
|
19031dba99 | ||
|
|
028db7a7ee | ||
|
|
a1764faaeb | ||
|
|
8529bb0e21 | ||
|
|
9eefdd1858 | ||
|
|
e5803860df | ||
|
|
2754d734aa | ||
|
|
3487ca4822 | ||
|
|
02ebddc34a | ||
|
|
3957f6bd09 | ||
|
|
11ab98b3d8 | ||
|
|
e24403949c | ||
|
|
288f6b91d0 | ||
|
|
8ca105966d | ||
|
|
592cd517ff | ||
|
|
586b410a66 | ||
|
|
a444940db2 | ||
|
|
afe5aef9f7 | ||
|
|
21a3e8fafc | ||
|
|
26bbba5a2e | ||
|
|
b68d5c9398 | ||
|
|
c1425f0562 | ||
|
|
e1f1b60608 | ||
|
|
ea1c95528c | ||
|
|
0cac2969ae | ||
|
|
b856c51389 | ||
|
|
aa3b23ecb8 | ||
|
|
1e653e213a | ||
|
|
7d91dcfb70 | ||
|
|
8e7e6266f0 | ||
|
|
167ccf5151 | ||
|
|
c582e0820a | ||
|
|
7d3a63d744 | ||
|
|
0a0987873f | ||
|
|
18d60c8781 | ||
|
|
7708ea6a0f | ||
|
|
71a46c6b63 | ||
|
|
667324df69 | ||
|
|
957e20d763 | ||
|
|
029a87c6ca | ||
|
|
baa4609102 | ||
|
|
875943e4da | ||
|
|
10e674cdd0 | ||
|
|
0bf78b0b81 | ||
|
|
c90b93556a | ||
|
|
f45718ea06 | ||
|
|
6d418ee8cc | ||
|
|
4851b1b72d | ||
|
|
dfb6f88be9 | ||
|
|
f28227384d | ||
|
|
cef9be92f3 | ||
|
|
f849d67a79 | ||
|
|
fba3becb06 | ||
|
|
a23ff6d119 | ||
|
|
384744c958 | ||
|
|
70c6617e88 | ||
|
|
9afe3b334e | ||
|
|
ad67d4c7ae | ||
|
|
b7eaed3ac3 | ||
|
|
136e2d68a2 | ||
|
|
bdcd54687d | ||
|
|
99190b0ef1 | ||
|
|
c7702b0c37 | ||
|
|
9b88a2c14d | ||
|
|
6a945e6a08 | ||
|
|
9c7cf0778f | ||
|
|
dd0f1a25d0 | ||
|
|
7f4cf3060e | ||
|
|
30496a4875 | ||
|
|
027508f495 | ||
|
|
b5e2b2a2ad | ||
|
|
9c9db05b86 | ||
|
|
1fa17a7df7 | ||
|
|
e09e5858d8 | ||
|
|
6ede062a66 | ||
|
|
b351b4042f | ||
|
|
95d0ce33d4 | ||
|
|
75366167e8 | ||
|
|
7fa7e4be45 | ||
|
|
d14dafbade | ||
|
|
e222f448bb | ||
|
|
f55ed3dc4c | ||
|
|
fedfcc247e | ||
|
|
8186adfaeb | ||
|
|
00304facba | ||
|
|
ff241f437f | ||
|
|
4a6b9cd64d | ||
|
|
8646dfbf02 | ||
|
|
d6f2681c61 | ||
|
|
5a47ca6053 | ||
|
|
d7fd273475 | ||
|
|
ce828a6ef5 | ||
|
|
15dbd72f93 | ||
|
|
e3bdd8737f | ||
|
|
7942656026 | ||
|
|
1fe8a2cb17 | ||
|
|
ab48b1f867 | ||
|
|
3043842254 | ||
|
|
249e326de4 | ||
|
|
b3cace3b43 | ||
|
|
ad578179d8 | ||
|
|
c57351f8b5 | ||
|
|
c5934e4c5b | ||
|
|
06e64bd3b8 | ||
|
|
48572812a9 | ||
|
|
46b610370a | ||
|
|
96d4b8ed45 | ||
|
|
c18ba3d815 | ||
|
|
fd81079247 | ||
|
|
e5781fbabc | ||
|
|
8887b06583 | ||
|
|
9955ff7df9 | ||
|
|
db74b6049c | ||
|
|
0b5c7af4be | ||
|
|
721016a00e | ||
|
|
563522d261 | ||
|
|
04f4455491 | ||
|
|
b976ce480a | ||
|
|
6d5f7cfd22 | ||
|
|
9baed0987e | ||
|
|
b76d17d35c | ||
|
|
4e182612e8 | ||
|
|
645729a518 | ||
|
|
9ee4c1cd5c | ||
|
|
02742aef5b | ||
|
|
87af2c3855 | ||
|
|
ea1ce4a029 | ||
|
|
2fe9185a6f | ||
|
|
ef191c55be | ||
|
|
abd74a127a | ||
|
|
52ac269b8d | ||
|
|
643f65ce3b | ||
|
|
465ce3e69a | ||
|
|
207b648f36 | ||
|
|
7f2d52a5ce | ||
|
|
f1eaa95c44 | ||
|
|
e203de172d | ||
|
|
79b7e2aaa5 | ||
|
|
3c2ade9299 | ||
|
|
f3f2dc6cec | ||
|
|
12b69bd681 | ||
|
|
8f542ff448 | ||
|
|
80c81c11fb | ||
|
|
e3809bd930 | ||
|
|
d755e29459 | ||
|
|
105eb5a9cd | ||
|
|
65f8436aa7 | ||
|
|
4afdd79252 | ||
|
|
d1e807b11f | ||
|
|
ee84690cd9 | ||
|
|
c7a27f1dc7 | ||
|
|
1fd9f8d1f8 | ||
|
|
b57d849ecd | ||
|
|
654ae4dc0b | ||
|
|
3984a623bf | ||
|
|
96619c6cec | ||
|
|
3dd92ccdb4 | ||
|
|
b111a615a9 | ||
|
|
2372958713 | ||
|
|
82a8541af1 | ||
|
|
ea162972fa | ||
|
|
094d6858d1 | ||
|
|
65398d59d4 | ||
|
|
3df9659ce2 | ||
|
|
c4f4f53fd6 | ||
|
|
b567b6a840 | ||
|
|
ab18e5f134 | ||
|
|
929115c02b | ||
|
|
e26884c099 | ||
|
|
077bcdcaf5 | ||
|
|
685ac5a94a | ||
|
|
3d1b75b591 | ||
|
|
e1bfe9b93c | ||
|
|
5b75a165ce | ||
|
|
e12fbc85d4 | ||
|
|
6bbef0a975 | ||
|
|
bc175ca438 | ||
|
|
ef15772b97 | ||
|
|
da5b913757 | ||
|
|
6b5a51f652 | ||
|
|
af2620c8b3 | ||
|
|
15fdfdc42e | ||
|
|
ce88e1f97b | ||
|
|
a67e3a5eac | ||
|
|
cc747f0690 | ||
|
|
a6d2661562 | ||
|
|
4b95b12a7b | ||
|
|
cca8554e3d | ||
|
|
28c426ca3c | ||
|
|
be83a4295a | ||
|
|
87439ee509 | ||
|
|
36ef54d541 | ||
|
|
400407358d | ||
|
|
502b121e43 | ||
|
|
61447ced4f | ||
|
|
1e107c68b4 | ||
|
|
602fb31f27 | ||
|
|
2a8531a025 | ||
|
|
980589e190 | ||
|
|
4a2d1f4a02 | ||
|
|
39e6cc4d68 | ||
|
|
e5018432cb | ||
|
|
dbf0b03bac | ||
|
|
01060035bc | ||
|
|
fa0cf5a654 | ||
|
|
4f1a1cad8e | ||
|
|
8c8aae9a1e | ||
|
|
230c53875f | ||
|
|
2e40cbc7c7 | ||
|
|
cd1ffc3e9a | ||
|
|
4db2cd7eda | ||
|
|
f230b36382 | ||
|
|
b872f2a5db | ||
|
|
c6678d16a6 | ||
|
|
b73a02048e | ||
|
|
1f2f2751e4 | ||
|
|
85998534fe | ||
|
|
8e7b8bd75f | ||
|
|
fb983f23dd | ||
|
|
7df99521c4 | ||
|
|
a8c0a1aa61 | ||
|
|
fc05350ae4 | ||
|
|
ba7de8fa01 | ||
|
|
778cf80e6b | ||
|
|
f01bb7d271 | ||
|
|
6a031e5a71 | ||
|
|
37924841e1 | ||
|
|
be90248fc7 | ||
|
|
cb38beb32c | ||
|
|
cc8500d0f4 | ||
|
|
61d4e36f1f | ||
|
|
5c5f164aa2 | ||
|
|
5275e6c732 | ||
|
|
f3ea6734a1 | ||
|
|
bb20176c76 | ||
|
|
beee44a10e | ||
|
|
43823dbda1 | ||
|
|
ff39bf365c | ||
|
|
5d69e4a8aa | ||
|
|
142db19627 | ||
|
|
7b84ecbb56 | ||
|
|
dc6de1734a | ||
|
|
1e464cef0a | ||
|
|
4decaa6789 | ||
|
|
a057088808 | ||
|
|
e46053a7b7 | ||
|
|
91d9e82d84 | ||
|
|
608f5ed3e9 | ||
|
|
9b2e209b4f | ||
|
|
bae1582631 | ||
|
|
c3fe76d78c | ||
|
|
8abab0e379 | ||
|
|
d31204188b | ||
|
|
a74f34b559 | ||
|
|
37cda348b0 | ||
|
|
38656e73c5 | ||
|
|
03ac430be4 | ||
|
|
89979d6ce4 | ||
|
|
54a3145710 | ||
|
|
7aea149b6c | ||
|
|
f50aa55e8b | ||
|
|
6c0d7c30c6 | ||
|
|
af163d597e | ||
|
|
d0c8302d21 | ||
|
|
44e2d76525 | ||
|
|
8f274bbb44 | ||
|
|
8436124cbc | ||
|
|
647fa8e212 | ||
|
|
6cc5886073 | ||
|
|
513c889926 | ||
|
|
9c6f4d59b3 | ||
|
|
a0d5768752 | ||
|
|
4f951cdf8a | ||
|
|
619e2ba1ee | ||
|
|
7d6a80eefa | ||
|
|
2403f8fb29 | ||
|
|
b485112ed3 | ||
|
|
1f5c835f8a | ||
|
|
a3d7ee63d3 | ||
|
|
a8cf67728b | ||
|
|
c830fc7841 | ||
|
|
5ef3bb9cbf | ||
|
|
b882175f36 | ||
|
|
d20215929d | ||
|
|
ea312b9986 | ||
|
|
0559341f31 | ||
|
|
1f4dc2d4a2 | ||
|
|
14ca0f5c59 | ||
|
|
e51c4843c5 | ||
|
|
32a9fac9ed | ||
|
|
de8cbf6178 | ||
|
|
33e1aea80c | ||
|
|
83589ee677 | ||
|
|
023ecdebc9 | ||
|
|
2d9cb2c0b9 | ||
|
|
5c0814ef9b | ||
|
|
28831a3b06 | ||
|
|
0d073a36a3 | ||
|
|
069600d602 | ||
|
|
d70a27f2fd | ||
|
|
e330626b03 | ||
|
|
0f4b16c194 | ||
|
|
c89bda86b7 | ||
|
|
56fa5355fd | ||
|
|
7ea52670b9 | ||
|
|
ee264e88d4 | ||
|
|
3f7db4e772 | ||
|
|
3d9fc18a83 | ||
|
|
9eeed7f992 | ||
|
|
ba0a86cbea | ||
|
|
41d8d65d82 | ||
|
|
57843b8a6f | ||
|
|
d6258d0ca1 | ||
|
|
66ccebb02b | ||
|
|
e3081e56f8 | ||
|
|
201b223813 | ||
|
|
08d534e39b | ||
|
|
4489169553 | ||
|
|
16c239716b | ||
|
|
f5913eb947 | ||
|
|
f2681af9ee | ||
|
|
66dd51d75a | ||
|
|
5f78361533 | ||
|
|
3c1192298b | ||
|
|
0bd9d79bbe | ||
|
|
a2e055f313 | ||
|
|
ca1d5c4303 | ||
|
|
e6eebc00a3 | ||
|
|
29bdf794f3 | ||
|
|
4ba81b8f03 | ||
|
|
8af7f0e797 | ||
|
|
c67fa18ad3 | ||
|
|
6c9da6537e | ||
|
|
241785b428 | ||
|
|
411166ffba | ||
|
|
203c9ebbca | ||
|
|
ede37d5d0f | ||
|
|
4f02529b15 | ||
|
|
0f6b73340e | ||
|
|
96c53cc173 | ||
|
|
7ce3bc18b2 | ||
|
|
82b47e314b | ||
|
|
9d2474c1e3 | ||
|
|
787f69fc46 | ||
|
|
054d4e52b2 | ||
|
|
0d1ef6d40e | ||
|
|
ead448b8d4 | ||
|
|
7ff10e6792 | ||
|
|
3d6c94e7c5 | ||
|
|
7673e64738 | ||
|
|
4230c53812 | ||
|
|
3198e03cc4 | ||
|
|
1e48e107fc | ||
|
|
ed7c889c4f | ||
|
|
84f4481ef0 | ||
|
|
b84997d058 | ||
|
|
3063a7c05f | ||
|
|
36fe4c9e9a | ||
|
|
5c5134b69f | ||
|
|
e7fb764158 | ||
|
|
fe624cfd1c | ||
|
|
81b8237570 | ||
|
|
a019c7dae0 | ||
|
|
552dd029fa | ||
|
|
bd5c6359fe | ||
|
|
6bd483d768 | ||
|
|
7003c0d81b | ||
|
|
b038d9a41f | ||
|
|
89c42cf7e4 | ||
|
|
cd1e5ad3ad | ||
|
|
f36c761c28 | ||
|
|
0f7d95d31b | ||
|
|
4b92f56ed7 | ||
|
|
b54fb07e84 | ||
|
|
11825191cf | ||
|
|
d719b17aec | ||
|
|
65a33922cf | ||
|
|
727ee9b014 | ||
|
|
4d51f0334f | ||
|
|
86e4866d6a | ||
|
|
e75276ed88 | ||
|
|
bfdf4c0453 | ||
|
|
f90902c5e3 | ||
|
|
d0d6844fbd | ||
|
|
cd7a724e62 | ||
|
|
1f5877460b | ||
|
|
8da77ee13b | ||
|
|
d205cd09ef | ||
|
|
b44d8505b2 | ||
|
|
9d99fe9272 | ||
|
|
431839d36d | ||
|
|
cce1f688b9 |
No files matched your search
@@ -1,9 +0,0 @@
|
|||||||
{
|
|
||||||
"permissions": {
|
|
||||||
"allow": [
|
|
||||||
"Bash(php -l:*)",
|
|
||||||
"Bash(php:*)"
|
|
||||||
],
|
|
||||||
"deny": []
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,45 +1,51 @@
|
|||||||
name: myep-next
|
|
||||||
type: php
|
type: php
|
||||||
docroot: public
|
docroot: public
|
||||||
php_version: "8.2"
|
php_version: "8.3"
|
||||||
webserver_type: apache-fpm
|
webserver_type: apache-fpm
|
||||||
xdebug_enabled: false
|
xdebug_enabled: false
|
||||||
additional_hostnames: []
|
additional_hostnames:
|
||||||
|
- mysnz
|
||||||
|
- mysbw
|
||||||
|
- myser
|
||||||
additional_fqdns: []
|
additional_fqdns: []
|
||||||
database:
|
database:
|
||||||
type: mariadb
|
type: mysql
|
||||||
version: "10.11"
|
version: "8.4"
|
||||||
use_dns_when_possible: true
|
use_dns_when_possible: true
|
||||||
composer_version: "2"
|
composer_version: "2"
|
||||||
web_environment: []
|
web_environment: []
|
||||||
corepack_enable: false
|
corepack_enable: false
|
||||||
|
nodejs_version: "22"
|
||||||
|
|
||||||
# Key features of DDEV's config.yaml:
|
# Key features of DDEV's config.yaml:
|
||||||
|
|
||||||
# name: <projectname> # Name of the project, automatically provides
|
# name: <projectname> # Name of the project, automatically provides
|
||||||
# http://projectname.ddev.site and https://projectname.ddev.site
|
# http://projectname.ddev.site and https://projectname.ddev.site
|
||||||
|
# If the name is omitted, the project will take the name of the enclosing directory,
|
||||||
|
# which is useful if you want to have a copy of the project side by side with this one.
|
||||||
|
|
||||||
# type: <projecttype> # backdrop, craftcms, django4, drupal, drupal6, drupal7, laravel, magento, magento2, php, python, shopware6, silverstripe, typo3, wordpress
|
# type: <projecttype> # backdrop, cakephp, craftcms, drupal, drupal6, drupal7, drupal8, drupal9, drupal10, drupal11, generic, laravel, magento, magento2, php, shopware6, silverstripe, symfony, typo3, wordpress
|
||||||
# See https://ddev.readthedocs.io/en/stable/users/quickstart/ for more
|
# See https://docs.ddev.com/en/stable/users/quickstart/ for more
|
||||||
# information on the different project types
|
# information on the different project types
|
||||||
# "drupal" covers recent Drupal 8+
|
|
||||||
|
|
||||||
# docroot: <relative_path> # Relative path to the directory containing index.php.
|
# docroot: <relative_path> # Relative path to the directory containing index.php.
|
||||||
|
|
||||||
# php_version: "8.2" # PHP version to use, "5.6", "7.0", "7.1", "7.2", "7.3", "7.4", "8.0", "8.1", "8.2", "8.3", "8.4"
|
# php_version: "8.3" # PHP version to use, "5.6" through "8.5"
|
||||||
|
|
||||||
# You can explicitly specify the webimage but this
|
# You can explicitly specify the webimage but this
|
||||||
# is not recommended, as the images are often closely tied to DDEV's' behavior,
|
# is not recommended, as the images are often closely tied to DDEV's' behavior,
|
||||||
# so this can break upgrades.
|
# so this can break upgrades.
|
||||||
|
|
||||||
# webimage: <docker_image> # nginx/php docker image.
|
# webimage: <docker_image>
|
||||||
|
# It’s unusual to change this option, and we don’t recommend it without Docker experience and a good reason.
|
||||||
|
# Typically, this means additions to the existing web image using a .ddev/web-build/Dockerfile.*
|
||||||
|
|
||||||
# database:
|
# database:
|
||||||
# type: <dbtype> # mysql, mariadb, postgres
|
# type: <dbtype> # mysql, mariadb, postgres
|
||||||
# version: <version> # database version, like "10.11" or "8.0"
|
# version: <version> # database version, like "10.11" or "8.0"
|
||||||
# MariaDB versions can be 5.5-10.8, 10.11, and 11.4.
|
# MariaDB versions can be 5.5-10.8, 10.11, 11.4, 11.8
|
||||||
# MySQL versions can be 5.5-8.0.
|
# MySQL versions can be 5.5-8.0, 8.4
|
||||||
# PostgreSQL versions can be 9-17.
|
# PostgreSQL versions can be 9-18
|
||||||
|
|
||||||
# router_http_port: <port> # Port to be used for http (defaults to global configuration, usually 80)
|
# router_http_port: <port> # Port to be used for http (defaults to global configuration, usually 80)
|
||||||
# router_https_port: <port> # Port for https (defaults to global configuration, usually 443)
|
# router_https_port: <port> # Port for https (defaults to global configuration, usually 443)
|
||||||
@@ -49,12 +55,21 @@ corepack_enable: false
|
|||||||
# "ddev xdebug" to enable Xdebug and "ddev xdebug off" to disable it work better,
|
# "ddev xdebug" to enable Xdebug and "ddev xdebug off" to disable it work better,
|
||||||
# as leaving Xdebug enabled all the time is a big performance hit.
|
# as leaving Xdebug enabled all the time is a big performance hit.
|
||||||
|
|
||||||
# xhprof_enabled: false # Set to true to enable Xhprof and "ddev start" or "ddev restart"
|
# xhgui_http_port: "8143"
|
||||||
# Note that for most people the commands
|
# xhgui_https_port: "8142"
|
||||||
# "ddev xhprof" to enable Xhprof and "ddev xhprof off" to disable it work better,
|
# The XHGui ports can be changed from the default 8143 and 8142
|
||||||
# as leaving Xhprof enabled all the time is a big performance hit.
|
# Very rarely used
|
||||||
|
|
||||||
# webserver_type: nginx-fpm, apache-fpm, or nginx-gunicorn
|
# host_xhgui_port: "8142"
|
||||||
|
# Can be used to change the host binding port of the XHGui
|
||||||
|
# application. Rarely used; only when port conflict and
|
||||||
|
# bind_all_ports is used (normally with router disabled)
|
||||||
|
|
||||||
|
# xhprof_mode: [prepend|xhgui|global]
|
||||||
|
# Set to "xhgui" to enable XHGui features
|
||||||
|
# "xhgui" will become default in a future major release
|
||||||
|
|
||||||
|
# webserver_type: nginx-fpm, apache-fpm, generic
|
||||||
|
|
||||||
# timezone: Europe/Berlin
|
# timezone: Europe/Berlin
|
||||||
# If timezone is unset, DDEV will attempt to derive it from the host system timezone
|
# If timezone is unset, DDEV will attempt to derive it from the host system timezone
|
||||||
@@ -80,9 +95,9 @@ corepack_enable: false
|
|||||||
# Alternatively, an explicit Composer version may be specified, for example "2.2.18".
|
# Alternatively, an explicit Composer version may be specified, for example "2.2.18".
|
||||||
# To reinstall Composer after the image was built, run "ddev debug rebuild".
|
# To reinstall Composer after the image was built, run "ddev debug rebuild".
|
||||||
|
|
||||||
# nodejs_version: "20"
|
# nodejs_version: "22"
|
||||||
# change from the default system Node.js version to any other version.
|
# change from the default system Node.js version to any other version.
|
||||||
# See https://ddev.readthedocs.io/en/stable/users/configuration/config/#nodejs_version for more information
|
# See https://docs.ddev.com/en/stable/users/configuration/config/#nodejs_version for more information
|
||||||
# and https://www.npmjs.com/package/n#specifying-nodejs-versions for the full documentation,
|
# and https://www.npmjs.com/package/n#specifying-nodejs-versions for the full documentation,
|
||||||
# Note that using of 'ddev nvm' is discouraged because "nodejs_version" is much easier to use,
|
# Note that using of 'ddev nvm' is discouraged because "nodejs_version" is much easier to use,
|
||||||
# can specify any version, and is more robust than using 'nvm'.
|
# can specify any version, and is more robust than using 'nvm'.
|
||||||
@@ -118,7 +133,7 @@ corepack_enable: false
|
|||||||
|
|
||||||
# ddev_version_constraint: ""
|
# ddev_version_constraint: ""
|
||||||
# Example:
|
# Example:
|
||||||
# ddev_version_constraint: ">= 1.22.4"
|
# ddev_version_constraint: ">= 1.24.8"
|
||||||
# This will enforce that the running ddev version is within this constraint.
|
# This will enforce that the running ddev version is within this constraint.
|
||||||
# See https://github.com/Masterminds/semver#checking-version-constraints for
|
# See https://github.com/Masterminds/semver#checking-version-constraints for
|
||||||
# supported constraint formats
|
# supported constraint formats
|
||||||
@@ -147,8 +162,8 @@ corepack_enable: false
|
|||||||
# - "mutagen": enables Mutagen for this project.
|
# - "mutagen": enables Mutagen for this project.
|
||||||
# - "nfs": enables NFS for this project.
|
# - "nfs": enables NFS for this project.
|
||||||
#
|
#
|
||||||
# See https://ddev.readthedocs.io/en/stable/users/install/performance/#nfs
|
# See https://docs.ddev.com/en/stable/users/install/performance/#nfs
|
||||||
# See https://ddev.readthedocs.io/en/stable/users/install/performance/#mutagen
|
# See https://docs.ddev.com/en/stable/users/install/performance/#mutagen
|
||||||
|
|
||||||
# fail_on_hook_fail: False
|
# fail_on_hook_fail: False
|
||||||
# Decide whether 'ddev start' should be interrupted by a failing hook
|
# Decide whether 'ddev start' should be interrupted by a failing hook
|
||||||
@@ -197,7 +212,7 @@ corepack_enable: false
|
|||||||
|
|
||||||
# ngrok_args: --basic-auth username:pass1234
|
# ngrok_args: --basic-auth username:pass1234
|
||||||
# Provide extra flags to the "ngrok http" command, see
|
# Provide extra flags to the "ngrok http" command, see
|
||||||
# https://ngrok.com/docs/ngrok-agent/config or run "ngrok http -h"
|
# https://ngrok.com/docs/agent/config/v3/#agent-configuration or run "ngrok http -h"
|
||||||
|
|
||||||
# disable_settings_management: false
|
# disable_settings_management: false
|
||||||
# If true, DDEV will not create CMS-specific settings files like
|
# If true, DDEV will not create CMS-specific settings files like
|
||||||
@@ -275,7 +290,7 @@ corepack_enable: false
|
|||||||
# Many DDEV commands can be extended to run tasks before or after the
|
# Many DDEV commands can be extended to run tasks before or after the
|
||||||
# DDEV command is executed, for example "post-start", "post-import-db",
|
# DDEV command is executed, for example "post-start", "post-import-db",
|
||||||
# "pre-composer", "post-composer"
|
# "pre-composer", "post-composer"
|
||||||
# See https://ddev.readthedocs.io/en/stable/users/extend/custom-commands/ for more
|
# See https://docs.ddev.com/en/stable/users/extend/custom-commands/ for more
|
||||||
# information on the commands that can be extended and the tasks you can define
|
# information on the commands that can be extended and the tasks you can define
|
||||||
# for them. Example:
|
# for them. Example:
|
||||||
#hooks:
|
#hooks:
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
services:
|
||||||
|
web:
|
||||||
|
external_links:
|
||||||
|
- "ddev-router:ep-reisen.ddev.site"
|
||||||
@@ -25,7 +25,7 @@ APP_SECRET=642ead390b8a38f0a017ec84d5362129
|
|||||||
#
|
#
|
||||||
# DATABASE_URL="sqlite:///%kernel.project_dir%/var/data.db"
|
# DATABASE_URL="sqlite:///%kernel.project_dir%/var/data.db"
|
||||||
# DATABASE_URL="mysql://app:[email protected]:3306/app?serverVersion=8.0.32&charset=utf8mb4"
|
# DATABASE_URL="mysql://app:[email protected]:3306/app?serverVersion=8.0.32&charset=utf8mb4"
|
||||||
DATABASE_URL="mysql://db:db@db:3306/db?serverVersion=10.11.11-MariaDB&charset=utf8mb4"
|
DATABASE_URL="mysql://db:db@db:3306/db?serverVersion=8.4.0&charset=utf8mb4"
|
||||||
# DATABASE_URL="postgresql://app:[email protected]:5432/app?serverVersion=16&charset=utf8"
|
# DATABASE_URL="postgresql://app:[email protected]:5432/app?serverVersion=16&charset=utf8"
|
||||||
###< doctrine/doctrine-bundle ###
|
###< doctrine/doctrine-bundle ###
|
||||||
|
|
||||||
@@ -40,29 +40,74 @@ MESSENGER_TRANSPORT_DSN=doctrine://default?auto_setup=0
|
|||||||
MAILER_DSN=null://null
|
MAILER_DSN=null://null
|
||||||
###< symfony/mailer ###
|
###< symfony/mailer ###
|
||||||
|
|
||||||
|
MAILJET_API_KEY=
|
||||||
|
MAILJET_API_SECRET=
|
||||||
|
MAILJET_API_BASE_URL=https://api.mailjet.com/v3/REST
|
||||||
|
MAILJET_DEFAULT_LIST_ID=
|
||||||
|
# Development default for HTTP Basic Auth password; override in production secrets.
|
||||||
|
MAILJET_WEBHOOK_BASIC_PASSWORD=secret
|
||||||
|
APP_NEWSLETTER_CONFIRMATION_TTL_HOURS=1
|
||||||
|
|
||||||
APP_BPN_USER=
|
APP_BPN_USER=
|
||||||
APP_BPN_PASSWORD=
|
APP_BPN_PASSWORD=
|
||||||
APP_BPN_IP=
|
APP_BPN_IP=
|
||||||
APP_BPN_PORT=
|
APP_BPN_PORTS=
|
||||||
APP_BPN_DEBUG=false
|
APP_BPN_DEBUG=false
|
||||||
|
APP_BPN_CONNECTION_TIMEOUT=5
|
||||||
|
APP_BPN_STREAM_TIMEOUT=30
|
||||||
|
APP_BPN_TOTAL_TIMEOUT=45
|
||||||
|
|
||||||
APP_TRAVEL_INFO_BASE_URL=https://www.ep-reisen.de/reiseinformationen/
|
APP_TRAVEL_INFO_BASE_URL="https://www.ep-reisen.de/reiseinformationen/"
|
||||||
|
APP_LEGAL_NOTICE_URL="https://www.ep-reisen.de/unternehmen/impressum-skireiseveranstalter/"
|
||||||
|
APP_TERMS_AND_CONDITIONS_URL="https://www.ep-reisen.de/skireisen/infos/allgemeine-infos/agb/"
|
||||||
|
APP_PRIVACY_POLICY_URL="https://www.ep-reisen.de/unternehmen/impressum-skireiseveranstalter/datenschutz-winterreisen/"
|
||||||
|
APP_CMS_API_BASE_URL="https://www.ep-reisen.de/"
|
||||||
|
APP_WEBSITE_BASE_URL="https://www.ep-reisen.de/"
|
||||||
|
APP_BASE_URL="https://my.ep-reisen.de"
|
||||||
|
APP_CUSTOMER_SERVICE_EMAIL="[email protected]"
|
||||||
|
APP_INSURANCE_REVOCATION_URL="https://www.hmrv.de/daten-aendern/vertrag-beenden/widerruf"
|
||||||
|
|
||||||
# Travel Data Service Configuration
|
# Travel Data Service Configuration
|
||||||
APP_TRAVEL_PREFER_REMOTE=false
|
APP_TRAVEL_PREFER_REMOTE=false
|
||||||
APP_TRAVEL_ENABLE_FALLBACK=true
|
APP_TRAVEL_ENABLE_FALLBACK=true
|
||||||
|
APP_TRAVEL_SNAPSHOT_RETENTION_BUFFER_DAYS=14
|
||||||
|
|
||||||
|
# Feature Flags
|
||||||
|
FEATURE_TRAVEL_SNAPSHOT=true
|
||||||
|
|
||||||
|
# Emails
|
||||||
|
APP_DEFAULT_EMAIL_FROM=[email protected]
|
||||||
|
APP_DEFAULT_EMAIL_TO=[email protected]
|
||||||
|
|
||||||
|
# Booking Configuration
|
||||||
|
# Status for new bookings: 'F' (Fixed/Final), 'O' (Option - requires agency confirmation)
|
||||||
|
# Use 'O' during beta phase, switch to 'F' for production
|
||||||
|
DEFAULT_BOOKING_STATUS=F
|
||||||
|
|
||||||
API_KEYS=
|
API_KEYS=
|
||||||
|
|
||||||
XML_EXPORT_PATH="%kernel.project_dir%/var/xmlexport"
|
XML_EXPORT_PATH="%kernel.project_dir%/var/xmlexport"
|
||||||
|
XML_EXPORT_CONTINGENTS_PATH="%kernel.project_dir%/var/xmlexportzimmer"
|
||||||
|
JSON_EXPORT_PATH="%kernel.project_dir%/var/jsonexport"
|
||||||
|
|
||||||
SFTP_XML_EXPORT_HOST=
|
SFTP_XML_EXPORT_HOST=
|
||||||
SFTP_XML_EXPORT_PORT=
|
SFTP_XML_EXPORT_PORT=
|
||||||
SFTP_XML_EXPORT_USER=
|
SFTP_XML_EXPORT_USER=
|
||||||
SFTP_XML_EXPORT_PASSWORD=
|
SFTP_XML_EXPORT_PASSWORD=
|
||||||
|
|
||||||
|
SFTP_XML_EXPORT_CONTINGENTS_HOST=
|
||||||
|
SFTP_XML_EXPORT_CONTINGENTS_PORT=
|
||||||
|
SFTP_XML_EXPORT_CONTINGENTS_USER=
|
||||||
|
SFTP_XML_EXPORT_CONTINGENTS_PASSWORD=
|
||||||
|
|
||||||
###> league/oauth2-server-bundle ###
|
###> league/oauth2-server-bundle ###
|
||||||
OAUTH_PRIVATE_KEY=%kernel.project_dir%/config/secret/private.key
|
OAUTH_PRIVATE_KEY=%kernel.project_dir%/config/secret/private.key
|
||||||
OAUTH_PUBLIC_KEY=%kernel.project_dir%/config/secret/public.key
|
OAUTH_PUBLIC_KEY=%kernel.project_dir%/config/secret/public.key
|
||||||
OAUTH_ENCRYPTION_KEY=580084fd179e67399467f59ee96658ac
|
OAUTH_ENCRYPTION_KEY=580084fd179e67399467f59ee96658ac
|
||||||
###< league/oauth2-server-bundle ###
|
###< league/oauth2-server-bundle ###
|
||||||
|
|
||||||
|
###> symfony/lock ###
|
||||||
|
# Choose one of the stores below
|
||||||
|
# postgresql+advisory://db_user:db_password@localhost/db_name
|
||||||
|
LOCK_DSN=flock
|
||||||
|
###< symfony/lock ###
|
||||||
@@ -4,3 +4,4 @@ APP_SECRET='$ecretf0rt3st'
|
|||||||
SYMFONY_DEPRECATIONS_HELPER=999999
|
SYMFONY_DEPRECATIONS_HELPER=999999
|
||||||
PANTHER_APP_ENV=panther
|
PANTHER_APP_ENV=panther
|
||||||
PANTHER_ERROR_SCREENSHOT_DIR=./var/error-screenshots
|
PANTHER_ERROR_SCREENSHOT_DIR=./var/error-screenshots
|
||||||
|
MAILJET_WEBHOOK_BASIC_PASSWORD=secret
|
||||||
@@ -31,3 +31,9 @@ yarn-error.log
|
|||||||
/.php-cs-fixer.php
|
/.php-cs-fixer.php
|
||||||
/.php-cs-fixer.cache
|
/.php-cs-fixer.cache
|
||||||
###< friendsofphp/php-cs-fixer ###
|
###< friendsofphp/php-cs-fixer ###
|
||||||
|
|
||||||
|
/ray.php
|
||||||
|
|
||||||
|
###> phpstan/phpstan ###
|
||||||
|
phpstan.neon
|
||||||
|
###< phpstan/phpstan ###
|
||||||
@@ -2,12 +2,11 @@
|
|||||||
|
|
||||||
$finder = (new PhpCsFixer\Finder())
|
$finder = (new PhpCsFixer\Finder())
|
||||||
->in(__DIR__)
|
->in(__DIR__)
|
||||||
->exclude('var')
|
->exclude('var');
|
||||||
;
|
|
||||||
|
|
||||||
return (new PhpCsFixer\Config())
|
return (new PhpCsFixer\Config())
|
||||||
->setRules([
|
->setRules([
|
||||||
'@Symfony' => true,
|
'@Symfony' => true,
|
||||||
|
'@DoctrineAnnotation' => true,
|
||||||
])
|
])
|
||||||
->setFinder($finder)
|
->setFinder($finder);
|
||||||
;
|
|
||||||
@@ -1,70 +1,138 @@
|
|||||||
### user profile minimum
|
### user profile minimum
|
||||||
|
# @no-cookie-jar
|
||||||
GET {{base_url}}/api/userinfo
|
GET {{base_url}}/api/userinfo
|
||||||
Accept: application/json
|
Accept: application/json
|
||||||
Authorization: Bearer {{$auth.token("oauth2_email")}}
|
Authorization: Bearer {{$auth.token("oauth2_email")}}
|
||||||
|
|
||||||
### user profile full
|
### user profile full
|
||||||
|
# @no-cookie-jar
|
||||||
GET {{base_url}}/api/userinfo
|
GET {{base_url}}/api/userinfo
|
||||||
Accept: application/json
|
Accept: application/json
|
||||||
Authorization: Bearer {{$auth.token("oauth2_profile")}}
|
Authorization: Bearer {{$auth.token("oauth2_profile")}}
|
||||||
|
|
||||||
### user crm attributes
|
### user crm attributes
|
||||||
|
# @no-cookie-jar
|
||||||
GET {{base_url}}/api/crm-attributes
|
GET {{base_url}}/api/crm-attributes
|
||||||
Accept: application/json
|
Accept: application/json
|
||||||
Authorization: Bearer {{$auth.token("oauth2_profile")}}
|
Authorization: Bearer {{$auth.token("oauth2_profile")}}
|
||||||
|
|
||||||
### API last update at
|
### API last update at
|
||||||
|
# @no-cookie-jar
|
||||||
GET {{base_url}}/api/last-update
|
GET {{base_url}}/api/last-update
|
||||||
Accept: application/json
|
Accept: application/json
|
||||||
Authorization: Bearer {{$auth.token("oauth2_api")}}
|
Authorization: Bearer {{$auth.token("oauth2_api")}}
|
||||||
|
|
||||||
### API countries
|
### API countries
|
||||||
|
# @no-cookie-jar
|
||||||
GET {{base_url}}/api/countries
|
GET {{base_url}}/api/countries
|
||||||
Accept: application/json
|
Accept: application/json
|
||||||
Authorization: Bearer {{$auth.token("oauth2_api")}}
|
Authorization: Bearer {{$auth.token("oauth2_api")}}
|
||||||
|
|
||||||
### API hotels
|
### API hotels
|
||||||
|
# @no-cookie-jar
|
||||||
GET {{base_url}}/api/hotels
|
GET {{base_url}}/api/hotels
|
||||||
Accept: application/json
|
Accept: application/json
|
||||||
Authorization: Bearer {{$auth.token("oauth2_api")}}
|
Authorization: Bearer {{$auth.token("oauth2_api")}}
|
||||||
|
|
||||||
### API hotel
|
### API hotel
|
||||||
|
# @no-cookie-jar
|
||||||
GET {{base_url}}/api/hotels/198924
|
GET {{base_url}}/api/hotels/198924
|
||||||
Accept: application/json
|
Accept: application/json
|
||||||
Authorization: Bearer {{$auth.token("oauth2_api")}}
|
Authorization: Bearer {{$auth.token("oauth2_api")}}
|
||||||
|
|
||||||
### API pickups
|
### API pickups
|
||||||
|
# @no-cookie-jar
|
||||||
GET {{base_url}}/api/pickups
|
GET {{base_url}}/api/pickups
|
||||||
Accept: application/json
|
Accept: application/json
|
||||||
Authorization: Bearer {{$auth.token("oauth2_api")}}
|
Authorization: Bearer {{$auth.token("oauth2_api")}}
|
||||||
|
|
||||||
### API pickup
|
### API pickup
|
||||||
|
# @no-cookie-jar
|
||||||
GET {{base_url}}/api/pickups/1
|
GET {{base_url}}/api/pickups/1
|
||||||
Accept: application/json
|
Accept: application/json
|
||||||
Authorization: Bearer {{$auth.token("oauth2_api")}}
|
Authorization: Bearer {{$auth.token("oauth2_api")}}
|
||||||
|
|
||||||
### API travels
|
### API travels
|
||||||
|
# @no-cookie-jar
|
||||||
GET {{base_url}}/api/travels
|
GET {{base_url}}/api/travels
|
||||||
Accept: application/json
|
Accept: application/json
|
||||||
Authorization: Bearer {{$auth.token("oauth2_api")}}
|
Authorization: Bearer {{$auth.token("oauth2_api")}}
|
||||||
|
|
||||||
### API travel
|
### API travel
|
||||||
GET {{base_url}}/api/travels/DWWWE211125
|
# @no-cookie-jar
|
||||||
|
GET {{base_url}}/api/travels/DPWMP140326
|
||||||
Accept: application/json
|
Accept: application/json
|
||||||
Authorization: Bearer {{$auth.token("oauth2_api")}}
|
Authorization: Bearer {{$auth.token("oauth2_api")}}
|
||||||
|
|
||||||
### API travel remote
|
### API travel remote
|
||||||
|
# @no-cookie-jar
|
||||||
GET {{base_url}}/api/travels/11603
|
GET {{base_url}}/api/travels/11603
|
||||||
Accept: application/json
|
Accept: application/json
|
||||||
Authorization: Bearer {{$auth.token("oauth2_api")}}
|
Authorization: Bearer {{$auth.token("oauth2_api")}}
|
||||||
|
|
||||||
### API hotel availability remote
|
### API hotel availability remote
|
||||||
GET {{base_url}}/api/travels/11603/152546/2026-01-03/availability
|
# @no-cookie-jar
|
||||||
|
GET {{base_url}}/api/travels/11606/152546/2026-01-24/availability
|
||||||
Accept: application/json
|
Accept: application/json
|
||||||
Authorization: Bearer {{$auth.token("oauth2_api")}}
|
Authorization: Bearer {{$auth.token("oauth2_api")}}
|
||||||
|
|
||||||
### API products remote
|
### API products remote
|
||||||
|
# @no-cookie-jar
|
||||||
GET {{base_url}}/api/products
|
GET {{base_url}}/api/products
|
||||||
Accept: application/json
|
Accept: application/json
|
||||||
Authorization: Bearer {{$auth.token("oauth2_api")}}
|
Authorization: Bearer {{$auth.token("oauth2_api")}}
|
||||||
|
|
||||||
|
### API contact form
|
||||||
|
# @no-cookie-jar
|
||||||
|
POST {{base_url}}/api/contactform
|
||||||
|
Accept: application/json
|
||||||
|
Content-Type: application/json
|
||||||
|
Authorization: Bearer {{$auth.token("oauth2_api")}}
|
||||||
|
|
||||||
|
{
|
||||||
|
"lastName": "{{$random.name.lastName}}",
|
||||||
|
"firstName": "{{$random.name.firstName}}",
|
||||||
|
"gender": "d",
|
||||||
|
"street": "{{$random.address.streetAddress}}",
|
||||||
|
"zipCode": "{{$random.address.zipCode}}",
|
||||||
|
"city": "{{$random.address.city}}",
|
||||||
|
"email": "{{$random.email}}",
|
||||||
|
"phone": "{{$random.phoneNumber.cellPhone}}"
|
||||||
|
}
|
||||||
|
|
||||||
|
### API newsletter lists map
|
||||||
|
# @no-cookie-jar
|
||||||
|
GET {{base_url}}/api/newsletters
|
||||||
|
Accept: application/json
|
||||||
|
Content-Type: application/json
|
||||||
|
Authorization: Bearer {{$auth.token("oauth2_newsletter")}}
|
||||||
|
|
||||||
|
### API newsletter subscriptions
|
||||||
|
# @no-cookie-jar
|
||||||
|
POST {{base_url}}/api/newsletter-subscriptions
|
||||||
|
Accept: application/json
|
||||||
|
Content-Type: application/json
|
||||||
|
Authorization: Bearer {{$auth.token("oauth2_newsletter")}}
|
||||||
|
|
||||||
|
{
|
||||||
|
"email": "{{$random.email}}",
|
||||||
|
"firstName": "{{$random.address.firstName}}",
|
||||||
|
"lastName": "{{$random.address.lastName}}",
|
||||||
|
"listIds": [10321569,10321382,10321383]
|
||||||
|
}
|
||||||
|
|
||||||
|
### API pickups planning webhook
|
||||||
|
# @no-cookie-jar
|
||||||
|
POST {{base_url}}/api/pickups-planning
|
||||||
|
Accept: application/json
|
||||||
|
Content-Type: application/json
|
||||||
|
Authorization: Bearer {{$auth.token("oauth2_api")}}
|
||||||
|
|
||||||
|
< ./assets/json/zustiegplanung.json
|
||||||
|
|
||||||
|
### API pickups planning
|
||||||
|
# @no-cookie-jar
|
||||||
|
GET {{base_url}}/api/pickups-planning/DPWWTS191125
|
||||||
|
Accept: application/json
|
||||||
|
Content-Type: application/json
|
||||||
|
Authorization: Bearer {{$auth.token("oauth2_api")}}
|
||||||
@@ -1,13 +1,24 @@
|
|||||||
import './bootstrap.js'
|
import './bootstrap.js'
|
||||||
|
import './loading.js'
|
||||||
|
|
||||||
import './styles/app.css'
|
import './styles/app.css'
|
||||||
|
|
||||||
import '@iframe-resizer/child'
|
|
||||||
|
|
||||||
import htmx from 'htmx.org'
|
import htmx from 'htmx.org'
|
||||||
|
|
||||||
window.htmx = htmx
|
window.htmx = htmx
|
||||||
htmx.config.includeIndicatorStyles = false
|
htmx.config.includeIndicatorStyles = false
|
||||||
htmx.config.historyEnabled = false
|
htmx.config.historyEnabled = true
|
||||||
htmx.config.historyCacheSize = 0
|
htmx.config.historyCacheSize = 10
|
||||||
htmx.config.allowScriptTags = false
|
htmx.config.allowScriptTags = false
|
||||||
htmx.config.withCredentials = true
|
htmx.config.withCredentials = true
|
||||||
htmx.config.selfRequestsOnly = false
|
htmx.config.selfRequestsOnly = false
|
||||||
|
htmx.config.timeout = 50000 // 50 seconds - slightly higher than backend timeout (45s)
|
||||||
|
|
||||||
|
document.body.addEventListener('htmx:beforeSwap', (event) => {
|
||||||
|
// Symfony renders invalid forms with 422; let HTMX swap those responses so inline
|
||||||
|
// validation errors are actually shown to the user.
|
||||||
|
if (event.detail?.xhr?.status === 422) {
|
||||||
|
event.detail.shouldSwap = true
|
||||||
|
event.detail.isError = false
|
||||||
|
}
|
||||||
|
})
|
||||||
@@ -0,0 +1,59 @@
|
|||||||
|
import { Controller } from '@hotwired/stimulus'
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Monitors birthday input fields (day, month, year) and dispatches a custom event
|
||||||
|
* only when all three fields are filled with valid values.
|
||||||
|
*
|
||||||
|
* This prevents premature HTMX refreshes when users are still entering the date,
|
||||||
|
* improving UX by waiting until the complete date is entered.
|
||||||
|
*/
|
||||||
|
export default class extends Controller {
|
||||||
|
static targets = ['day', 'month', 'year']
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks if all birthday fields are filled and dispatches a completion event.
|
||||||
|
*
|
||||||
|
* Called on input/change events from the day, month, and year fields.
|
||||||
|
* Only dispatches the 'birthday:complete' event when all three fields
|
||||||
|
* contain valid values that could form a complete date.
|
||||||
|
*/
|
||||||
|
check() {
|
||||||
|
const day = this.dayTarget.value.trim()
|
||||||
|
const month = this.monthTarget.value.trim()
|
||||||
|
const year = this.yearTarget.value.trim()
|
||||||
|
|
||||||
|
if (false === this.isComplete(day, month, year)) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
this.element.dispatchEvent(new CustomEvent('birthday:complete', { bubbles: true }))
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Validates that all date components are filled with plausible values.
|
||||||
|
*
|
||||||
|
* @param {string} day The day value
|
||||||
|
* @param {string} month The month value
|
||||||
|
* @param {string} year The year value
|
||||||
|
*
|
||||||
|
* @returns {boolean} True if all fields contain complete values
|
||||||
|
*/
|
||||||
|
isComplete(day, month, year) {
|
||||||
|
// Day: 1-2 digits
|
||||||
|
if (0 === day.length || day.length > 2) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
// Month: 1-2 digits
|
||||||
|
if (0 === month.length || month.length > 2) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
// Year: exactly 4 digits for a complete year
|
||||||
|
if (4 !== year.length) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,29 +0,0 @@
|
|||||||
import { Controller } from '@hotwired/stimulus'
|
|
||||||
|
|
||||||
export default class extends Controller {
|
|
||||||
static targets = ['field']
|
|
||||||
static values = { availabilities: Object }
|
|
||||||
|
|
||||||
toggle(event) {
|
|
||||||
let field = event.target
|
|
||||||
let id = field.value
|
|
||||||
let availabilities = this.availabilitiesValue
|
|
||||||
if (field.checked) {
|
|
||||||
availabilities[id].available--
|
|
||||||
} else {
|
|
||||||
availabilities[id].available++
|
|
||||||
}
|
|
||||||
field.disabled = 0 >= availabilities[id].available
|
|
||||||
field.classList.toggle('cursor-not-allowed', field.disabled)
|
|
||||||
this.availabilitiesValue = availabilities
|
|
||||||
}
|
|
||||||
|
|
||||||
availabilitiesValueChanged(availabilities) {
|
|
||||||
this.fieldTargets.forEach((field) => {
|
|
||||||
let id = field.value
|
|
||||||
if (false === field.checked && 0 >= availabilities[id].available) {
|
|
||||||
field.disabled = true
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
import { Controller } from '@hotwired/stimulus'
|
||||||
|
|
||||||
|
export default class extends Controller {
|
||||||
|
|
||||||
|
static classes = [ 'hidden' ]
|
||||||
|
static targets = [ 'container', 'checkboxGroup' ]
|
||||||
|
static values = { visible: Boolean }
|
||||||
|
|
||||||
|
connect() {
|
||||||
|
this.updateVisibility()
|
||||||
|
}
|
||||||
|
|
||||||
|
check() {
|
||||||
|
this.updateVisibility()
|
||||||
|
}
|
||||||
|
|
||||||
|
updateVisibility() {
|
||||||
|
if (!this.hasCheckboxGroupTarget) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
const checkboxes = this.checkboxGroupTarget.querySelectorAll('input[type="checkbox"]')
|
||||||
|
const hasChecked = Array.from(checkboxes).some(checkbox => checkbox.checked)
|
||||||
|
this.visibleValue = hasChecked
|
||||||
|
}
|
||||||
|
|
||||||
|
visibleValueChanged(visible) {
|
||||||
|
if (this.hasContainerTarget) {
|
||||||
|
this.containerTarget.classList.toggle(this.hiddenClass, false === visible)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
import { Controller } from '@hotwired/stimulus';
|
||||||
|
|
||||||
|
export default class extends Controller {
|
||||||
|
static values = {
|
||||||
|
payload: Object
|
||||||
|
};
|
||||||
|
|
||||||
|
connect() {
|
||||||
|
if (typeof window.dataLayer !== 'undefined') {
|
||||||
|
window.dataLayer.push(this.payloadValue);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,23 +1,23 @@
|
|||||||
import { Controller } from '@hotwired/stimulus'
|
import {Controller} from '@hotwired/stimulus'
|
||||||
|
|
||||||
export default class extends Controller {
|
export default class extends Controller {
|
||||||
|
|
||||||
static targets = [ 'fields', 'field', 'addButton', 'index' ]
|
static targets = ['fields', 'field', 'addButton', 'index']
|
||||||
static values = {
|
static values = {
|
||||||
prototype: String,
|
prototype: String,
|
||||||
maxItems: Number,
|
maxItems: Number,
|
||||||
itemsCount: Number,
|
itemsCount: Number,
|
||||||
}
|
}
|
||||||
|
|
||||||
connect () {
|
connect() {
|
||||||
this.index = this.itemsCountValue = this.fieldTargets.length
|
this.itemsCountValue = this.fieldTargets.length
|
||||||
}
|
}
|
||||||
|
|
||||||
addItem() {
|
addItem() {
|
||||||
let prototype = JSON.parse(this.prototypeValue)
|
const index = this.fieldTargets.length + 1
|
||||||
const newField = prototype.replace(/__name__/g, this.index)
|
const prototype = JSON.parse(this.prototypeValue)
|
||||||
|
const newField = prototype.replace(/__name__/g, index)
|
||||||
this.fieldsTarget.insertAdjacentHTML('beforeend', newField)
|
this.fieldsTarget.insertAdjacentHTML('beforeend', newField)
|
||||||
this.index++
|
|
||||||
this.itemsCountValue++
|
this.itemsCountValue++
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,14 +0,0 @@
|
|||||||
import { Controller } from '@hotwired/stimulus'
|
|
||||||
|
|
||||||
export default class extends Controller {
|
|
||||||
static values = { offsetTop: { type: Number}}
|
|
||||||
connect() {
|
|
||||||
if ('parentIframe' in window) {
|
|
||||||
window.iFrameResizer = {
|
|
||||||
onReady: function () {
|
|
||||||
window.parentIFrame.scrollTo(0, this.offsetTopValue)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,12 +0,0 @@
|
|||||||
import { Controller} from '@hotwired/stimulus'
|
|
||||||
|
|
||||||
export default class extends Controller {
|
|
||||||
|
|
||||||
static targets = [ 'indicator' ]
|
|
||||||
static classes = [ 'hidden' ]
|
|
||||||
|
|
||||||
toggle() {
|
|
||||||
this.indicatorTarget.classList.remove(this.hiddenClass)
|
|
||||||
this.element.scrollIntoView({ block: 'start', behavior: 'smooth'})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
import { Controller } from '@hotwired/stimulus'
|
||||||
|
|
||||||
|
export default class extends Controller {
|
||||||
|
static outlets = [ 'mobilenav' ]
|
||||||
|
static classes = [ 'closed' ]
|
||||||
|
|
||||||
|
trigger({ params: { mode } }) {
|
||||||
|
this.mobilenavOutlet.toggle(mode)
|
||||||
|
}
|
||||||
|
|
||||||
|
toggle(mode) {
|
||||||
|
// Add animation classes only now to avoid fouc
|
||||||
|
this.element.classList.add('transition-transform', 'duration-300')
|
||||||
|
this.element.classList.toggle(this.closedClass, 'close' === mode)
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
import { Controller } from '@hotwired/stimulus'
|
||||||
|
|
||||||
|
export default class extends Controller {
|
||||||
|
|
||||||
|
static targets = [ 'field' ]
|
||||||
|
|
||||||
|
toggle() {
|
||||||
|
let type = this.fieldTarget.getAttribute('type') === 'password' ? 'text' : 'password'
|
||||||
|
this.fieldTarget.setAttribute('type', type)
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
import { Controller } from '@hotwired/stimulus'
|
||||||
|
|
||||||
|
export default class extends Controller {
|
||||||
|
|
||||||
|
static classes = ['closed', 'iconClosed', 'iconExpanded']
|
||||||
|
static targets = ['submenu', 'button', 'icon']
|
||||||
|
static values = { expanded: Boolean }
|
||||||
|
|
||||||
|
toggleSubmenu() {
|
||||||
|
this.expandedValue = !this.expandedValue
|
||||||
|
}
|
||||||
|
|
||||||
|
expandedValueChanged(expanded) {
|
||||||
|
this.submenuTarget.classList.toggle(this.closedClass, false === expanded)
|
||||||
|
if (false === this.hasButtonTarget) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
this.buttonTarget.setAttribute('aria-expanded', expanded)
|
||||||
|
if (false === this.hasIconTarget) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if (true === expanded) {
|
||||||
|
this.iconTarget.classList.add(...this.iconExpandedClasses)
|
||||||
|
this.iconTarget.classList.remove(...this.iconClosedClasses)
|
||||||
|
} else {
|
||||||
|
this.iconTarget.classList.add(...this.iconClosedClasses)
|
||||||
|
this.iconTarget.classList.remove(...this.iconExpandedClasses)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,44 @@
|
|||||||
|
import {Controller} from '@hotwired/stimulus'
|
||||||
|
|
||||||
|
export default class extends Controller {
|
||||||
|
|
||||||
|
static targets = ['field', 'display', 'buttonInc', 'buttonDec']
|
||||||
|
|
||||||
|
static values = {
|
||||||
|
current: Number,
|
||||||
|
min: Number,
|
||||||
|
max: Number
|
||||||
|
}
|
||||||
|
|
||||||
|
connect() {
|
||||||
|
this.currentValue = parseInt(this.fieldTarget.value) || 0
|
||||||
|
this.updateForm()
|
||||||
|
}
|
||||||
|
|
||||||
|
increase() {
|
||||||
|
if (null !== this.maxValue && this.currentValue >= this.maxValue) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
this.currentValue = this.currentValue + 1
|
||||||
|
this.updateForm()
|
||||||
|
}
|
||||||
|
|
||||||
|
decrease() {
|
||||||
|
if (null !== this.minValue && this.currentValue <= this.minValue) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
this.currentValue = this.currentValue - 1
|
||||||
|
this.updateForm()
|
||||||
|
}
|
||||||
|
|
||||||
|
updateForm() {
|
||||||
|
this.displayTarget.innerText = this.currentValue
|
||||||
|
this.fieldTarget.value = this.currentValue
|
||||||
|
|
||||||
|
this.buttonIncTarget.disabled = null !== this.maxValue && this.currentValue >= this.maxValue
|
||||||
|
this.buttonDecTarget.disabled = null !== this.minValue && this.currentValue <= this.minValue
|
||||||
|
|
||||||
|
// Trigger change event to fire HTMX request
|
||||||
|
this.fieldTarget.dispatchEvent(new Event('change', {bubbles: true}))
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,60 @@
|
|||||||
|
import { Controller } from '@hotwired/stimulus'
|
||||||
|
import Toastify from 'toastify-js'
|
||||||
|
|
||||||
|
export default class extends Controller {
|
||||||
|
|
||||||
|
static values = { text: String, class: String }
|
||||||
|
|
||||||
|
connect() {
|
||||||
|
// Show toast from Stimulus values (existing functionality)
|
||||||
|
if (this.hasTextValue) {
|
||||||
|
this.showToast(this.textValue, this.classValue)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Bind handler for proper cleanup
|
||||||
|
this.boundHandleNotifications = this.handleNotifications.bind(this)
|
||||||
|
|
||||||
|
// Listen for custom HTMX notification events on document.body
|
||||||
|
// Events from HX-Trigger response headers bubble up to document.body
|
||||||
|
document.body.addEventListener('showNotifications', this.boundHandleNotifications)
|
||||||
|
}
|
||||||
|
|
||||||
|
disconnect() {
|
||||||
|
document.body.removeEventListener('showNotifications', this.boundHandleNotifications)
|
||||||
|
}
|
||||||
|
|
||||||
|
handleNotifications(event) {
|
||||||
|
// HTMX wraps the trigger value in an object with 'value' and 'elt' properties
|
||||||
|
// event.detail.value contains the actual array from the HX-Trigger header
|
||||||
|
const notifications = event.detail?.value || event.detail || []
|
||||||
|
|
||||||
|
if (Array.isArray(notifications)) {
|
||||||
|
notifications.forEach((notification, index) => {
|
||||||
|
const className = this.getClassForType(notification.type)
|
||||||
|
this.showToast(notification.message, className)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
showToast(text, className = '') {
|
||||||
|
Toastify({
|
||||||
|
duration: 5000,
|
||||||
|
text: text,
|
||||||
|
gravity: 'top',
|
||||||
|
position: 'right',
|
||||||
|
className: className,
|
||||||
|
close: true,
|
||||||
|
}).showToast()
|
||||||
|
}
|
||||||
|
|
||||||
|
getClassForType(type) {
|
||||||
|
const typeMap = {
|
||||||
|
'success': 'toastify--success',
|
||||||
|
'warning': 'toastify--warning',
|
||||||
|
'error': 'toastify--error',
|
||||||
|
'info': 'toastify--info',
|
||||||
|
}
|
||||||
|
|
||||||
|
return typeMap[type] || 'toastify--info'
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,18 +1,26 @@
|
|||||||
import { Controller } from '@hotwired/stimulus'
|
import {Controller} from '@hotwired/stimulus'
|
||||||
|
|
||||||
export default class extends Controller {
|
export default class extends Controller {
|
||||||
|
static classes = ['closed', 'open', 'iconOpen']
|
||||||
static classes = [ 'closed' ]
|
static targets = ['content', 'icon', 'container']
|
||||||
static targets = [ 'toggle', 'icon' ]
|
|
||||||
static values = {
|
static values = {
|
||||||
open: {
|
open: {
|
||||||
type: Boolean,
|
type: Boolean,
|
||||||
default: true,
|
default: true,
|
||||||
},
|
},
|
||||||
|
storageKey: {
|
||||||
|
type: String,
|
||||||
|
default: ''
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
initialize() {
|
initialize() {
|
||||||
this.target = this.hasToggleTarget ? this.toggleTarget : this.element
|
this.target = this.hasContentTarget ? this.contentTarget : this.element
|
||||||
|
|
||||||
|
// Restore state from storage if storageKey is provided
|
||||||
|
if (this.hasStorageKey()) {
|
||||||
|
this.restoreState()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
toggle() {
|
toggle() {
|
||||||
@@ -30,10 +38,37 @@ export default class extends Controller {
|
|||||||
openValueChanged(open) {
|
openValueChanged(open) {
|
||||||
this.target.classList.toggle(this.closedClass, false === open)
|
this.target.classList.toggle(this.closedClass, false === open)
|
||||||
|
|
||||||
if (false === this.hasIconTarget) {
|
if (this.hasIconTarget) {
|
||||||
return
|
let iconClass = this.hasIconOpenClass ? this.iconOpenClass : 'rotate-90'
|
||||||
|
this.iconTarget.classList.toggle(iconClass, true === open)
|
||||||
}
|
}
|
||||||
|
|
||||||
this.iconTarget.classList.toggle('rotate-90', true === open)
|
// Toggle class on container element (or controller element) if specified
|
||||||
|
if (this.hasOpenClass) {
|
||||||
|
const container = this.hasContainerTarget ? this.containerTarget : this.element
|
||||||
|
this.openClasses.forEach(cls => {
|
||||||
|
container.classList.toggle(cls, true === open)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// Save state to storage if storageKey is provided
|
||||||
|
if (this.hasStorageKey()) {
|
||||||
|
this.saveState()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
hasStorageKey() {
|
||||||
|
return this.storageKeyValue && this.storageKeyValue.trim() !== ''
|
||||||
|
}
|
||||||
|
|
||||||
|
saveState() {
|
||||||
|
sessionStorage.setItem(`toggle_${this.storageKeyValue}`, this.openValue.toString())
|
||||||
|
}
|
||||||
|
|
||||||
|
restoreState() {
|
||||||
|
const savedState = sessionStorage.getItem(`toggle_${this.storageKeyValue}`)
|
||||||
|
if (savedState !== null) {
|
||||||
|
this.openValue = savedState === 'true'
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -16,14 +16,17 @@ export default class extends Controller {
|
|||||||
trigger: 'click',
|
trigger: 'click',
|
||||||
allowHTML: true,
|
allowHTML: true,
|
||||||
interactive: true,
|
interactive: true,
|
||||||
|
appendTo: document.body,
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
options = {
|
options = {
|
||||||
content: this.contentValue,
|
content: this.contentValue,
|
||||||
placement,
|
placement,
|
||||||
touch: false,
|
touch: false,
|
||||||
|
trigger: 'mouseenter focus',
|
||||||
allowHTML: true,
|
allowHTML: true,
|
||||||
interactive: true,
|
interactive: true,
|
||||||
|
appendTo: document.body,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (this.hasTriggerTarget) {
|
if (this.hasTriggerTarget) {
|
||||||
|
|||||||
|
After Width: | Height: | Size: 10 KiB |
|
After Width: | Height: | Size: 5.3 KiB |
|
After Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 44 KiB |
@@ -0,0 +1,9 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<svg viewBox="0 0 130 130" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<g transform="translate(3, 28)">
|
||||||
|
<path d="M107,0.3c-36.4,5.5 -81.6,19.1 -81.6,38.2c0,17.7 41.8,13.2 41.8,13.2c0,0 -67,22.3 -67,-7c0,-33.2 84.5,-44.4 106.8,-44.4Z" fill="#0084d4"/>
|
||||||
|
<path d="M17,73.5c36.4,-5.4 81.6,-19.1 81.6,-38.2c0,-17.7 -41.8,-13.2 -41.8,-13.2c0,0 67,-22.3 67,7c0,33.3 -84.5,44.4 -106.8,44.4Z" fill="#f8c62f"/>
|
||||||
|
<path d="M60.7,34.3l-12.8,4l12.2,0.8l-0.4,-2.4l1,-2.4Z" fill="#0084d4"/>
|
||||||
|
<path d="M75.9,35.2l-9.2,2.9l-3.5,9.7l-1.7,-11.3l4,-10.7l1.7,7.9l8.7,1.5Z" fill="#f8c62f"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 628 B |
|
After Width: | Height: | Size: 285 KiB |
|
After Width: | Height: | Size: 245 KiB |
|
After Width: | Height: | Size: 313 KiB |
|
After Width: | Height: | Size: 417 KiB |
|
After Width: | Height: | Size: 384 KiB |
|
After Width: | Height: | Size: 466 KiB |
|
After Width: | Height: | Size: 480 KiB |
|
After Width: | Height: | Size: 339 KiB |
@@ -1,4 +1,7 @@
|
|||||||
<svg xmlns="http://www.w3.org/2000/svg">
|
<svg xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<symbol id="icon-table" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor">
|
||||||
|
<path stroke-linecap="round" stroke-linejoin="round" d="M3.375 19.5h17.25m-17.25 0a1.125 1.125 0 0 1-1.125-1.125M3.375 19.5h7.5c.621 0 1.125-.504 1.125-1.125m-9.75 0V5.625m0 12.75v-1.5c0-.621.504-1.125 1.125-1.125m18.375 2.625V5.625m0 12.75c0 .621-.504 1.125-1.125 1.125m1.125-1.125v-1.5c0-.621-.504-1.125-1.125-1.125m0 3.75h-7.5A1.125 1.125 0 0 1 12 18.375m9.75-12.75c0-.621-.504-1.125-1.125-1.125H3.375c-.621 0-1.125.504-1.125 1.125m19.5 0v1.5c0 .621-.504 1.125-1.125 1.125M2.25 5.625v1.5c0 .621.504 1.125 1.125 1.125m0 0h17.25m-17.25 0h7.5c.621 0 1.125.504 1.125 1.125M3.375 8.25c-.621 0-1.125.504-1.125 1.125v1.5c0 .621.504 1.125 1.125 1.125m17.25-3.75h-7.5c-.621 0-1.125.504-1.125 1.125m8.625-1.125c.621 0 1.125.504 1.125 1.125v1.5c0 .621-.504 1.125-1.125 1.125m-17.25 0h7.5m-7.5 0c-.621 0-1.125.504-1.125 1.125v1.5c0 .621.504 1.125 1.125 1.125M12 10.875v-1.5m0 1.5c0 .621-.504 1.125-1.125 1.125M12 10.875c0 .621.504 1.125 1.125 1.125m-2.25 0c.621 0 1.125.504 1.125 1.125M13.125 12h7.5m-7.5 0c-.621 0-1.125.504-1.125 1.125M20.625 12c.621 0 1.125.504 1.125 1.125v1.5c0 .621-.504 1.125-1.125 1.125m-17.25 0h7.5M12 14.625v-1.5m0 1.5c0 .621-.504 1.125-1.125 1.125M12 14.625c0 .621.504 1.125 1.125 1.125m-2.25 0c.621 0 1.125.504 1.125 1.125m0 1.5v-1.5m0 0c0-.621.504-1.125 1.125-1.125m0 0h7.5" />
|
||||||
|
</symbol>
|
||||||
<symbol id="icon-dots" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor">
|
<symbol id="icon-dots" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor">
|
||||||
<path stroke-linecap="round" stroke-linejoin="round" d="M12 6.75a.75.75 0 1 1 0-1.5.75.75 0 0 1 0 1.5ZM12 12.75a.75.75 0 1 1 0-1.5.75.75 0 0 1 0 1.5ZM12 18.75a.75.75 0 1 1 0-1.5.75.75 0 0 1 0 1.5Z" />
|
<path stroke-linecap="round" stroke-linejoin="round" d="M12 6.75a.75.75 0 1 1 0-1.5.75.75 0 0 1 0 1.5ZM12 12.75a.75.75 0 1 1 0-1.5.75.75 0 0 1 0 1.5ZM12 18.75a.75.75 0 1 1 0-1.5.75.75 0 0 1 0 1.5Z" />
|
||||||
</symbol>
|
</symbol>
|
||||||
@@ -114,6 +117,12 @@
|
|||||||
<symbol id="icon-unlocked" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor">
|
<symbol id="icon-unlocked" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor">
|
||||||
<path stroke-linecap="round" stroke-linejoin="round" d="M13.5 10.5V6.75a4.5 4.5 0 119 0v3.75M3.75 21.75h10.5a2.25 2.25 0 002.25-2.25v-6.75a2.25 2.25 0 00-2.25-2.25H3.75a2.25 2.25 0 00-2.25 2.25v6.75a2.25 2.25 0 002.25 2.25z" />
|
<path stroke-linecap="round" stroke-linejoin="round" d="M13.5 10.5V6.75a4.5 4.5 0 119 0v3.75M3.75 21.75h10.5a2.25 2.25 0 002.25-2.25v-6.75a2.25 2.25 0 00-2.25-2.25H3.75a2.25 2.25 0 00-2.25 2.25v6.75a2.25 2.25 0 002.25 2.25z" />
|
||||||
</symbol>
|
</symbol>
|
||||||
|
<symbol id="icon-external-link" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor">
|
||||||
|
<path d="M10 6V8H5V19H16V14H18V20C18 20.5523 17.5523 21 17 21H4C3.44772 21 3 20.5523 3 20V7C3 6.44772 3.44772 6 4 6H10ZM21 3V11H19L18.9999 6.413L11.2071 14.2071L9.79289 12.7929L17.5849 5H13V3H21Z"/>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="icon-cookie" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor">
|
||||||
|
<path d="M21.1634 10.9711C21.5132 10.8204 21.9579 11.0073 21.9811 11.3875C22.1494 14.1467 21.1794 16.9625 19.071 19.0709C15.1657 22.976 8.83405 22.9761 4.92886 19.0709C1.02367 15.1657 1.02377 8.83405 4.92885 4.9288C7.03704 2.82061 9.8525 1.85015 12.6115 2.01806C12.9916 2.04119 13.1787 2.48598 13.028 2.83576C12.4774 4.11367 12.7239 5.65275 13.7677 6.69657C14.3307 7.25963 15.038 7.58971 15.7706 7.68848C16.0483 7.72594 16.2738 7.95144 16.3113 8.2292C16.4101 8.96178 16.7402 9.66905 17.3032 10.2321C18.347 11.2759 19.8857 11.5218 21.1634 10.9711ZM19.7845 13.8397C19.8558 13.5362 19.6123 13.2603 19.3017 13.2337C18.0569 13.1271 16.8417 12.599 15.889 11.6463C15.3166 11.0739 14.8979 10.4061 14.6309 9.69455C14.5744 9.54422 14.4556 9.42534 14.3052 9.36892C13.5936 9.10186 12.9259 8.68322 12.3535 8.11078C11.4005 7.15778 10.8715 5.94208 10.7648 4.69683C10.7381 4.38618 10.4621 4.14264 10.1586 4.2141C8.76039 4.54327 7.43341 5.25267 6.34306 6.34301C3.21903 9.46721 3.21893 14.5326 6.34307 17.6567C9.46721 20.7809 14.5326 20.7808 17.6568 17.6567C18.7474 16.566 19.4557 15.2384 19.7845 13.8397ZM9.8786 14.1212C10.4644 14.707 10.4644 15.6567 9.8786 16.2425C9.29281 16.8283 8.34307 16.8283 7.75728 16.2425C7.17149 15.6567 7.17149 14.707 7.75728 14.1212C8.34306 13.5354 9.29281 13.5354 9.8786 14.1212ZM10.2321 8.11078C10.8179 8.69657 10.8179 9.64631 10.2321 10.2321C9.64636 10.8179 8.69661 10.8179 8.11083 10.2321C7.52504 9.64631 7.52504 8.69656 8.11083 8.11078C8.69661 7.52499 9.64636 7.52499 10.2321 8.11078ZM15.889 13.7676C16.4748 14.3534 16.4748 15.3032 15.889 15.889C15.3032 16.4747 14.3535 16.4747 13.7677 15.889C13.1819 15.3032 13.1819 14.3534 13.7677 13.7676C14.3535 13.1818 15.3032 13.1818 15.889 13.7676Z"/>
|
||||||
|
</symbol>
|
||||||
<symbol id="icon-mask" fill="currentColor" stroke="none" viewBox="0 0 576 512">
|
<symbol id="icon-mask" fill="currentColor" stroke="none" viewBox="0 0 576 512">
|
||||||
<!--! Font Awesome Pro 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2022 Fonticons, Inc. -->
|
<!--! Font Awesome Pro 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2022 Fonticons, Inc. -->
|
||||||
<path d="M288 64C39.52 64 0 182.1 0 273.5C0 379.5 78.8 448 176 448c27.33 0 51.21-6.516 66.11-36.79l19.93-40.5C268.3 358.6 278.1 352.4 288 352.1c9.9 .3711 19.7 6.501 25.97 18.63l19.93 40.5C348.8 441.5 372.7 448 400 448c97.2 0 176-68.51 176-174.5C576 182.1 536.5 64 288 64zM400 400c-18.12 0-19.56-2.924-23.04-9.986l-20.35-41.33c-13.87-26.86-38.85-43.53-66.82-44.57L288 304L286.2 304.1c-27.96 1.049-52.94 17.71-67.24 45.41l-19.93 40.49C195.6 397.1 194.1 400 176 400c-75.36 0-128-52.04-128-126.5C48 229.3 48 112 288 112s240 117.3 240 161.5C528 347.1 475.4 400 400 400zM160 192C124.7 192 96 220.7 96 256s28.65 64 64 64c35.35 0 64-28.65 64-64S195.3 192 160 192zM416 192c-35.35 0-64 28.65-64 64s28.65 64 64 64c35.35 0 64-28.65 64-64S451.3 192 416 192z"/>
|
<path d="M288 64C39.52 64 0 182.1 0 273.5C0 379.5 78.8 448 176 448c27.33 0 51.21-6.516 66.11-36.79l19.93-40.5C268.3 358.6 278.1 352.4 288 352.1c9.9 .3711 19.7 6.501 25.97 18.63l19.93 40.5C348.8 441.5 372.7 448 400 448c97.2 0 176-68.51 176-174.5C576 182.1 536.5 64 288 64zM400 400c-18.12 0-19.56-2.924-23.04-9.986l-20.35-41.33c-13.87-26.86-38.85-43.53-66.82-44.57L288 304L286.2 304.1c-27.96 1.049-52.94 17.71-67.24 45.41l-19.93 40.49C195.6 397.1 194.1 400 176 400c-75.36 0-128-52.04-128-126.5C48 229.3 48 112 288 112s240 117.3 240 161.5C528 347.1 475.4 400 400 400zM160 192C124.7 192 96 220.7 96 256s28.65 64 64 64c35.35 0 64-28.65 64-64S195.3 192 160 192zM416 192c-35.35 0-64 28.65-64 64s28.65 64 64 64c35.35 0 64-28.65 64-64S451.3 192 416 192z"/>
|
||||||
@@ -138,6 +147,9 @@
|
|||||||
<!--! Font Awesome Pro 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2022 Fonticons, Inc. -->
|
<!--! Font Awesome Pro 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2022 Fonticons, Inc. -->
|
||||||
<path d="M376.1 71.03c-9.375-9.375-24.56-9.375-33.94 0l-336 336c-9.375 9.375-9.375 24.56 0 33.94C11.72 445.7 17.84 448 24 448s12.28-2.344 16.97-7.031l336-336C386.3 95.59 386.3 80.41 376.1 71.03zM64 176c26.51 0 48-21.49 48-48S90.51 80 64 80C37.49 80 16 101.5 16 128S37.49 176 64 176zM320 336c-26.51 0-48 21.49-48 48s21.49 48 48 48c26.51 0 48-21.49 48-48S346.5 336 320 336z"/>
|
<path d="M376.1 71.03c-9.375-9.375-24.56-9.375-33.94 0l-336 336c-9.375 9.375-9.375 24.56 0 33.94C11.72 445.7 17.84 448 24 448s12.28-2.344 16.97-7.031l336-336C386.3 95.59 386.3 80.41 376.1 71.03zM64 176c26.51 0 48-21.49 48-48S90.51 80 64 80C37.49 80 16 101.5 16 128S37.49 176 64 176zM320 336c-26.51 0-48 21.49-48 48s21.49 48 48 48c26.51 0 48-21.49 48-48S346.5 336 320 336z"/>
|
||||||
</symbol>
|
</symbol>
|
||||||
|
<symbol id="icon-chair" fill="currentColor" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512">
|
||||||
|
<!--! Font Awesome Pro 6.4.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2023 Fonticons, Inc. --><path d="M288 16c26.5 0 48 21.5 48 48V256h16V64c0-35.3-28.7-64-64-64H160C124.7 0 96 28.7 96 64V256h16V64c0-26.5 21.5-48 48-48H288zM48 168c0-4.4-3.6-8-8-8s-8 3.6-8 8v80c0 4.4 3.6 8 8 8s8-3.6 8-8V168zm368 0c0-4.4-3.6-8-8-8s-8 3.6-8 8v80c0 4.4 3.6 8 8 8s8-3.6 8-8V168zM80 304H368c6.1 0 11.6 3.4 14.3 8.8l16 32c2.5 5 2.2 10.9-.7 15.6s-8.1 7.6-13.6 7.6H224 64c-5.5 0-10.7-2.9-13.6-7.6s-3.2-10.6-.7-15.6l16-32c2.7-5.4 8.3-8.8 14.3-8.8zm152 80H384c11.1 0 21.4-5.7 27.2-15.2s6.4-21.2 1.4-31.1l-16-32C391.2 294.8 380.1 288 368 288H80c-12.1 0-23.2 6.8-28.6 17.7l-16 32c-5 9.9-4.4 21.7 1.4 31.1S52.9 384 64 384H216v64H184c-30.9 0-56 25.1-56 56c0 4.4 3.6 8 8 8s8-3.6 8-8c0-22.1 17.9-40 40-40h32v40c0 4.4 3.6 8 8 8s8-3.6 8-8V464h32c22.1 0 40 17.9 40 40c0 4.4 3.6 8 8 8s8-3.6 8-8c0-30.9-25.1-56-56-56H232V384z"/>
|
||||||
|
</symbol>
|
||||||
<symbol id="icon-eye" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" xmlns="http://www.w3.org/2000/svg">
|
<symbol id="icon-eye" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" xmlns="http://www.w3.org/2000/svg">
|
||||||
<path stroke-linecap="round" stroke-linejoin="round" d="M2.036 12.322a1.012 1.012 0 010-.639C3.423 7.51 7.36 4.5 12 4.5c4.638 0 8.573 3.007 9.963 7.178.07.207.07.431 0 .639C20.577 16.49 16.64 19.5 12 19.5c-4.638 0-8.573-3.007-9.963-7.178z" />
|
<path stroke-linecap="round" stroke-linejoin="round" d="M2.036 12.322a1.012 1.012 0 010-.639C3.423 7.51 7.36 4.5 12 4.5c4.638 0 8.573 3.007 9.963 7.178.07.207.07.431 0 .639C20.577 16.49 16.64 19.5 12 19.5c-4.638 0-8.573-3.007-9.963-7.178z" />
|
||||||
<path stroke-linecap="round" stroke-linejoin="round" d="M15 12a3 3 0 11-6 0 3 3 0 016 0z" />
|
<path stroke-linecap="round" stroke-linejoin="round" d="M15 12a3 3 0 11-6 0 3 3 0 016 0z" />
|
||||||
@@ -191,11 +203,13 @@
|
|||||||
<!--! Font Awesome Pro 6.4.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2023 Fonticons, Inc. -->
|
<!--! Font Awesome Pro 6.4.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2023 Fonticons, Inc. -->
|
||||||
<path d="M24 0C10.7 0 0 10.7 0 24S10.7 48 24 48h8V67c0 40.3 16 79 44.5 107.5L158.1 256 76.5 337.5C48 366 32 404.7 32 445v19H24c-13.3 0-24 10.7-24 24s10.7 24 24 24H360c13.3 0 24-10.7 24-24s-10.7-24-24-24h-8V445c0-40.3-16-79-44.5-107.5L225.9 256l81.5-81.5C336 146 352 107.3 352 67V48h8c13.3 0 24-10.7 24-24s-10.7-24-24-24H24zM192 289.9l81.5 81.5C293 391 304 417.4 304 445v19H80V445c0-27.6 11-54 30.5-73.5L192 289.9zm0-67.9l-81.5-81.5C91 121 80 94.6 80 67V48H304V67c0 27.6-11 54-30.5 73.5L192 222.1z"/>
|
<path d="M24 0C10.7 0 0 10.7 0 24S10.7 48 24 48h8V67c0 40.3 16 79 44.5 107.5L158.1 256 76.5 337.5C48 366 32 404.7 32 445v19H24c-13.3 0-24 10.7-24 24s10.7 24 24 24H360c13.3 0 24-10.7 24-24s-10.7-24-24-24h-8V445c0-40.3-16-79-44.5-107.5L225.9 256l81.5-81.5C336 146 352 107.3 352 67V48h8c13.3 0 24-10.7 24-24s-10.7-24-24-24H24zM192 289.9l81.5 81.5C293 391 304 417.4 304 445v19H80V445c0-27.6 11-54 30.5-73.5L192 289.9zm0-67.9l-81.5-81.5C91 121 80 94.6 80 67V48H304V67c0 27.6-11 54-30.5 73.5L192 222.1z"/>
|
||||||
</symbol>
|
</symbol>
|
||||||
|
<symbol id="icon-car" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 256 256"><rect width="256" height="256" fill="none"/><circle cx="64" cy="176" r="24" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="16"/><circle cx="192" cy="176" r="24" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="16"/><line x1="88" y1="176" x2="168" y2="176" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="16"/><path d="M216,176h24a8,8,0,0,0,8-8V128a8,8,0,0,0-8-8H208L162.34,74.34A8,8,0,0,0,156.69,72H44.28a8,8,0,0,0-6.65,3.56L8,120v48a8,8,0,0,0,8,8H40" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="16"/><line x1="208" y1="120" x2="8" y2="120" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="16"/></symbol>
|
||||||
<symbol id="icon-flag-a" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 480"><g fill-rule="evenodd"><path fill="#fff" d="M640 480H0V0h640z"/><path fill="#ed2939" d="M640 480H0V320h640zm0-319.9H0V.1h640z"/></g></symbol>
|
<symbol id="icon-flag-a" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 480"><g fill-rule="evenodd"><path fill="#fff" d="M640 480H0V0h640z"/><path fill="#ed2939" d="M640 480H0V320h640zm0-319.9H0V.1h640z"/></g></symbol>
|
||||||
<symbol id="icon-flag-ch" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 480"><g fill-rule="evenodd" stroke-width="1pt"><path fill="#d52b1e" d="M0 0h640v480H0z"/><g fill="#fff"><path d="M170 195h300v90H170z"/><path d="M275 90h90v300h-90z"/></g></g></symbol>
|
<symbol id="icon-flag-ch" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 480"><g fill-rule="evenodd" stroke-width="1pt"><path fill="#d52b1e" d="M0 0h640v480H0z"/><g fill="#fff"><path d="M170 195h300v90H170z"/><path d="M275 90h90v300h-90z"/></g></g></symbol>
|
||||||
<symbol id="icon-flag-d" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 480"><path fill="#ffce00" d="M0 320h640v160H0z"/><path d="M0 0h640v160H0z"/><path fill="#d00" d="M0 160h640v160H0z"/></symbol>
|
<symbol id="icon-flag-d" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 480"><path fill="#ffce00" d="M0 320h640v160H0z"/><path d="M0 0h640v160H0z"/><path fill="#d00" d="M0 160h640v160H0z"/></symbol>
|
||||||
<symbol id="icon-flag-f" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 480"><g fill-rule="evenodd" stroke-width="1pt"><path fill="#fff" d="M0 0h640v480H0z"/><path fill="#00267f" d="M0 0h213.3v480H0z"/><path fill="#f31830" d="M426.7 0H640v480H426.7z"/></g></symbol>
|
<symbol id="icon-flag-f" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 480"><g fill-rule="evenodd" stroke-width="1pt"><path fill="#fff" d="M0 0h640v480H0z"/><path fill="#00267f" d="M0 0h213.3v480H0z"/><path fill="#f31830" d="M426.7 0H640v480H426.7z"/></g></symbol>
|
||||||
<symbol id="icon-flag-i" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 480"><g fill-rule="evenodd" stroke-width="1pt"><path fill="#fff" d="M0 0h640v480H0z"/><path fill="#009246" d="M0 0h213.3v480H0z"/><path fill="#ce2b37" d="M426.7 0H640v480H426.7z"/></g></symbol>
|
<symbol id="icon-flag-i" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 480"><g fill-rule="evenodd" stroke-width="1pt"><path fill="#fff" d="M0 0h640v480H0z"/><path fill="#009246" d="M0 0h213.3v480H0z"/><path fill="#ce2b37" d="M426.7 0H640v480H426.7z"/></g></symbol>
|
||||||
|
<symbol id="icon-flag-nl" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 480"><g fill-rule="evenodd"><path fill="#21468b" d="M0 320h640v160H0z"/><path fill="#fff" d="M0 160h640v160H0z"/><path fill="#ae1c28" d="M0 0h640v160H0z"/></g></symbol>
|
||||||
<!-- By Sam Herbert (@sherb), for everyone. More @ http://goo.gl/7AJzbL -->
|
<!-- By Sam Herbert (@sherb), for everyone. More @ http://goo.gl/7AJzbL -->
|
||||||
<symbol id="icon-spinner" viewBox="0 0 44 44" xmlns="http://www.w3.org/2000/svg" stroke="currentColor">
|
<symbol id="icon-spinner" viewBox="0 0 44 44" xmlns="http://www.w3.org/2000/svg" stroke="currentColor">
|
||||||
<g fill="none" fill-rule="evenodd" stroke-width="2">
|
<g fill="none" fill-rule="evenodd" stroke-width="2">
|
||||||
@@ -233,4 +247,4 @@
|
|||||||
</circle>
|
</circle>
|
||||||
</g>
|
</g>
|
||||||
</symbol>
|
</symbol>
|
||||||
</svg>
|
</svg>
|
||||||
|
Before Width: | Height: | Size: 31 KiB After Width: | Height: | Size: 37 KiB |
|
After Width: | Height: | Size: 7.3 KiB |
|
Before Width: | Height: | Size: 4.0 KiB After Width: | Height: | Size: 4.0 KiB |
@@ -0,0 +1,673 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!-- Generator: Adobe Illustrator 20.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
|
<svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||||
|
viewBox="0 0 502.8 337.7" style="enable-background:new 0 0 502.8 337.7;" xml:space="preserve">
|
||||||
|
<style type="text/css">
|
||||||
|
.st0{clip-path:url(#SVGID_2_);fill:url(#SVGID_3_);}
|
||||||
|
.st1{fill:url(#SVGID_4_);}
|
||||||
|
.st2{clip-path:url(#SVGID_6_);fill:url(#SVGID_7_);}
|
||||||
|
.st3{fill:url(#SVGID_8_);}
|
||||||
|
.st4{fill:url(#SVGID_9_);}
|
||||||
|
.st5{fill:url(#SVGID_10_);}
|
||||||
|
.st6{fill:#F3A21A;}
|
||||||
|
.st7{fill:url(#SVGID_11_);}
|
||||||
|
.st8{fill:url(#SVGID_12_);}
|
||||||
|
.st9{fill:url(#SVGID_13_);}
|
||||||
|
.st10{fill:#EB9D18;}
|
||||||
|
.st11{fill:url(#SVGID_14_);}
|
||||||
|
.st12{fill:url(#SVGID_15_);}
|
||||||
|
.st13{fill:#FFFFFF;}
|
||||||
|
.st14{fill:#ADACB0;}
|
||||||
|
.st15{fill:#494948;}
|
||||||
|
.st16{fill:#C10A27;}
|
||||||
|
</style>
|
||||||
|
<g id="Blason">
|
||||||
|
<g>
|
||||||
|
<g>
|
||||||
|
<defs>
|
||||||
|
<path id="SVGID_1_" d="M186.7,1.6c-7.7,3.8-8.3,11.4-6.8,19c1.4,6.9,4.8,14.1,8,20.4c26.6,48.7,52.7,97.6,78,147
|
||||||
|
c7.3,14.2,14.5,28.4,21.6,42.6c6.8-4.7,13.7-9.5,20.5-14.3c-7.2-14.5-14.4-29.1-21.4-43.6C262.8,124,240,75,217.3,25.7
|
||||||
|
c-3.4-7-7.5-14.4-13.1-20c-2.6-2.6-5.4-4.5-8.5-5.3C192.9-0.3,189.9,0,186.7,1.6"/>
|
||||||
|
</defs>
|
||||||
|
<clipPath id="SVGID_2_">
|
||||||
|
<use xlink:href="#SVGID_1_" style="overflow:visible;"/>
|
||||||
|
</clipPath>
|
||||||
|
|
||||||
|
<linearGradient id="SVGID_3_" gradientUnits="userSpaceOnUse" x1="185.9588" y1="703.2838" x2="298.626" y2="480.6175" gradientTransform="matrix(1 0 0 -1 0 707.5911)">
|
||||||
|
<stop offset="1.840490e-02" style="stop-color:#2E2E2D"/>
|
||||||
|
<stop offset="6.957448e-02" style="stop-color:#414140"/>
|
||||||
|
<stop offset="0.1472" style="stop-color:#5F5E5E"/>
|
||||||
|
<stop offset="0.2218" style="stop-color:#494948"/>
|
||||||
|
<stop offset="0.3098" style="stop-color:#373636"/>
|
||||||
|
<stop offset="0.4193" style="stop-color:#1E1D1D"/>
|
||||||
|
<stop offset="0.5731" style="stop-color:#070707"/>
|
||||||
|
<stop offset="1" style="stop-color:#000000"/>
|
||||||
|
</linearGradient>
|
||||||
|
<polygon class="st0" points="181.3,-3.2 352.9,40.6 303.4,234.6 131.7,190.8 "/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<g>
|
||||||
|
<path d="M283.2,191.8c-2.4-7.3-4.6-14.7-7-21.8c-8.5-25.5-15.8-51.1-24.2-76.3c-3.6-10.6-6.6-21.3-10.1-31.7
|
||||||
|
c-1.1-3.4-2.1-6.7-3.1-9.8c-0.7-2.1-0.8-4.4-1.9-6c0.1-0.9,0.4-1,0.5-1.9h0.5c0.5,2.2,1.6,3.7,2.6,5.3c1.4,0.3,2.1,0.3,3.8,0.2
|
||||||
|
c0.4-0.4,0.9-0.4,1.4-0.7c1.9-1.3,3.7-4.7,4.3-7.2c0.5-2-0.2-6.2,0.7-7.7c-0.2-0.9-0.3-1-1-1.4c0-0.9,0.1-1.4,0.5-1.9
|
||||||
|
c-0.4-0.7-1.1-0.6-1.4-1.2c-0.1-0.6-0.2-1.1-0.2-1.7c-1-2.5-2-6.2-3.6-8.4c-0.7-1-2.3-1.6-3.4-2.4c-1.7-1.3-2.8-3.6-4.1-5.3
|
||||||
|
c-0.7-0.9-2-1.4-2.9-2.2c-3.2,0.1-4.3,1.8-6.7,2.2c0-0.6,0-0.9-0.2-1.2v-0.5c-5.9-0.2-6.9,1.9-10.6,4.3c0.6,2.3,3.8,2.1,4.6,4.6
|
||||||
|
c0.7,1,0.4,2.3-0.2,2.9c0.3,1,2.1,1.9,2.9,2.4c0.3,1.9,0.5,3.2-0.2,4.8c1.3,0.7,2.7,1.6,3.1,3.1c0.4,1.4-0.7,3.4-0.5,4.1
|
||||||
|
c0.3,0.2,0.6,0.5,1,0.7c0.8,1.2,2.1,4.5,1.2,5.8c0.3,2.1,1,0.7,2.2,1.7c0.5,0.4,0.6,1.4,1,1.9c0.2,0.3,1,0.4,1.2,0.7
|
||||||
|
c0.6,2.2,1.3,4.5,1.9,6.7c1.9,4.8,3.6,10.4,5.3,15.4c10.1,30.2,18.9,60.3,29,90.5c3.4,10.2,6.6,20.7,10.1,31.2
|
||||||
|
c1.3,3.9,4.1,9.8,4.6,13.9l0.2,0.2h3.1C286.5,200.5,284.6,196.1,283.2,191.8z M233.5,27.4c-2.1-2.7-2-8.2-4.3-10.8
|
||||||
|
c0.2-1.2,0.8-1.2,1.4-1.9h1.2c1,2,1.9,4.5,2.4,7C232.7,23.1,233.4,24.7,233.5,27.4z M234.7,14.9c-0.8-0.5-1.6-1-2.4-1.4h-0.2
|
||||||
|
c0.3-1,0.8-1.3,1.4-1.9h1.7c2.2,2.3,4.4,4.7,6.7,7c0.9,0.9,2.2,1.6,2.9,2.6c3.8,6.1,1.7,20.5-1.7,26.4c-0.7,0-1.1,0-1.4-0.2
|
||||||
|
c-1.7-2.2-1.4-8.1-2.2-11.3c-1.3-5.7-2-12-3.6-17C235.5,17.6,235.5,16.1,234.7,14.9z"/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
|
||||||
|
<linearGradient id="SVGID_4_" gradientUnits="userSpaceOnUse" x1="134.3743" y1="628.9778" x2="244.3741" y2="544.978" gradientTransform="matrix(1 0 0 -1 0 707.5911)">
|
||||||
|
<stop offset="1.840490e-02" style="stop-color:#2E2E2D"/>
|
||||||
|
<stop offset="9.394112e-02" style="stop-color:#414140"/>
|
||||||
|
<stop offset="0.2086" style="stop-color:#5F5E5E"/>
|
||||||
|
<stop offset="0.2778" style="stop-color:#494948"/>
|
||||||
|
<stop offset="0.3594" style="stop-color:#373636"/>
|
||||||
|
<stop offset="0.4611" style="stop-color:#1E1D1D"/>
|
||||||
|
<stop offset="0.6038" style="stop-color:#070707"/>
|
||||||
|
<stop offset="1" style="stop-color:#000000"/>
|
||||||
|
</linearGradient>
|
||||||
|
<path class="st1" d="M254.8,140.4c0,0-48.7-35.8-63.8-52.3c-15.1-16.6-31.7-21.6-40.6-20.6s-14.6,7.1-14.6,7.1s-7,7.2-7.7,13.3
|
||||||
|
c-0.7,5.8-1.1,7.6,0.1,12c1.2,4.4,2.2,14.9,27.2,28.7c35.9,19.7,83.3,56.8,83.3,56.8L254.8,140.4z"/>
|
||||||
|
<g>
|
||||||
|
<g>
|
||||||
|
<defs>
|
||||||
|
<path id="SVGID_5_" d="M369.8,1.6c7.7,3.8,8.3,11.4,6.8,19c-1.4,6.9-4.8,14.1-8,20.4c-26.6,48.7-52.7,97.6-78,147
|
||||||
|
c-7.3,14.2-14.5,28.4-21.6,42.6c-6.8-4.7-13.7-9.5-20.5-14.3c7.2-14.5,14.4-29.1,21.4-43.6c23.8-48.7,46.6-97.7,69.3-147
|
||||||
|
c3.4-7,7.5-14.4,13-20c2.6-2.6,5.4-4.5,8.5-5.3C363.6-0.3,366.6,0,369.8,1.6"/>
|
||||||
|
</defs>
|
||||||
|
<clipPath id="SVGID_6_">
|
||||||
|
<use xlink:href="#SVGID_5_" style="overflow:visible;"/>
|
||||||
|
</clipPath>
|
||||||
|
|
||||||
|
<linearGradient id="SVGID_7_" gradientUnits="userSpaceOnUse" x1="-15.0273" y1="703.2908" x2="97.6398" y2="480.6245" gradientTransform="matrix(-1 0 0 -1 355.5174 707.5911)">
|
||||||
|
<stop offset="1.840490e-02" style="stop-color:#2E2E2D"/>
|
||||||
|
<stop offset="6.957448e-02" style="stop-color:#414140"/>
|
||||||
|
<stop offset="0.1472" style="stop-color:#5F5E5E"/>
|
||||||
|
<stop offset="0.2218" style="stop-color:#494948"/>
|
||||||
|
<stop offset="0.3098" style="stop-color:#373636"/>
|
||||||
|
<stop offset="0.4193" style="stop-color:#1E1D1D"/>
|
||||||
|
<stop offset="0.5731" style="stop-color:#070707"/>
|
||||||
|
<stop offset="1" style="stop-color:#000000"/>
|
||||||
|
</linearGradient>
|
||||||
|
<polygon class="st2" points="375.2,-3.2 203.6,40.6 253.1,234.6 424.8,190.8 "/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<g>
|
||||||
|
<path d="M269,205h3.1l0.2-0.2c0.4-4.2,3.3-10,4.6-13.9c3.5-10.5,6.7-21,10.1-31.2c10.1-30.2,19-60.3,29-90.5
|
||||||
|
c1.7-5,3.3-10.5,5.3-15.4c0.6-2.2,1.3-4.5,1.9-6.7c0.2-0.3,1-0.4,1.2-0.7c0.4-0.5,0.5-1.5,1-1.9c1.1-1,1.9,0.4,2.2-1.7
|
||||||
|
c-0.9-1.3,0.4-4.5,1.2-5.8c0.3-0.2,0.6-0.5,1-0.7c0.2-0.7-0.9-2.7-0.5-4.1c0.5-1.5,1.8-2.4,3.1-3.1c-0.8-1.6-0.5-2.9-0.2-4.8
|
||||||
|
c0.8-0.5,2.6-1.4,2.9-2.4c-0.6-0.6-0.9-1.9-0.2-2.9c0.7-2.5,4-2.2,4.6-4.6c-3.6-2.4-4.6-4.5-10.6-4.3v0.5
|
||||||
|
c-0.2,0.3-0.2,0.6-0.2,1.2c-2.4-0.4-3.5-2-6.7-2.2c-0.9,0.8-2.2,1.2-2.9,2.2c-1.3,1.7-2.4,4-4.1,5.3c-1,0.8-2.6,1.4-3.4,2.4
|
||||||
|
c-1.6,2.2-2.6,5.9-3.6,8.4c-0.1,0.6-0.2,1.1-0.2,1.7c-0.3,0.6-1.1,0.5-1.4,1.2c0.4,0.5,0.5,1,0.5,1.9c-0.6,0.4-0.8,0.5-1,1.4
|
||||||
|
c0.9,1.5,0.2,5.7,0.7,7.7c0.7,2.5,2.4,5.9,4.3,7.2c0.5,0.4,1,0.3,1.4,0.7c1.7,0.1,2.4,0.1,3.8-0.2c1-1.6,2.1-3,2.6-5.3h0.5
|
||||||
|
c0.1,0.9,0.3,1,0.5,1.9c-1.2,1.6-1.2,3.9-1.9,6c-1.1,3.2-2,6.5-3.1,9.8c-3.5,10.4-6.5,21.1-10.1,31.7
|
||||||
|
c-8.4,25.2-15.7,50.9-24.2,76.3c-2.4,7.1-4.5,14.5-7,21.8C271.9,196.1,270.1,200.5,269,205z M322.3,21.7c0.5-2.4,1.4-4.9,2.4-7
|
||||||
|
h1.2c0.7,0.7,1.2,0.7,1.4,1.9c-2.4,2.6-2.2,8.1-4.3,10.8C323.1,24.7,323.8,23.1,322.3,21.7z M320.6,19c-1.6,5-2.3,11.3-3.6,17
|
||||||
|
c-0.8,3.2-0.5,9.1-2.2,11.3c-0.3,0.2-0.8,0.2-1.4,0.2c-3.4-5.9-5.5-20.3-1.7-26.4c0.7-1.1,2-1.8,2.9-2.6c2.3-2.3,4.5-4.7,6.7-7
|
||||||
|
h1.7c0.6,0.6,1.1,0.9,1.4,1.9h-0.2c-0.8,0.5-1.6,1-2.4,1.4C321,16.1,321.1,17.6,320.6,19z"/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
|
||||||
|
<linearGradient id="SVGID_8_" gradientUnits="userSpaceOnUse" x1="-66.6074" y1="629.002" x2="43.393" y2="545.0015" gradientTransform="matrix(-1 0 0 -1 355.5174 707.5911)">
|
||||||
|
<stop offset="1.840490e-02" style="stop-color:#2E2E2D"/>
|
||||||
|
<stop offset="9.394112e-02" style="stop-color:#414140"/>
|
||||||
|
<stop offset="0.2086" style="stop-color:#5F5E5E"/>
|
||||||
|
<stop offset="0.2778" style="stop-color:#494948"/>
|
||||||
|
<stop offset="0.3594" style="stop-color:#373636"/>
|
||||||
|
<stop offset="0.4611" style="stop-color:#1E1D1D"/>
|
||||||
|
<stop offset="0.6038" style="stop-color:#070707"/>
|
||||||
|
<stop offset="1" style="stop-color:#000000"/>
|
||||||
|
</linearGradient>
|
||||||
|
<path class="st3" d="M317.8,185.3c0,0,47.4-37.1,83.3-56.8c25.1-13.7,26-24.2,27.2-28.7c1.2-4.4,0.8-6.2,0.1-12
|
||||||
|
c-0.7-6.1-7.7-13.3-7.7-13.3s-5.8-6.1-14.6-7.1c-8.9-1-25.4,4.1-40.6,20.6c-15.1,16.6-63.8,52.3-63.8,52.3L317.8,185.3z"/>
|
||||||
|
|
||||||
|
<linearGradient id="SVGID_9_" gradientUnits="userSpaceOnUse" x1="278.3112" y1="431.7694" x2="278.3112" y2="615.46" gradientTransform="matrix(1 0 0 -1 0 707.5911)">
|
||||||
|
<stop offset="0" style="stop-color:#DA9B24"/>
|
||||||
|
<stop offset="1" style="stop-color:#FDC762"/>
|
||||||
|
</linearGradient>
|
||||||
|
<path class="st4" d="M277.9,92.2c4.7,0.1,28.4-1.5,66.9,14.2c3,1.2,3.4,1.7,4.6,4.6c6.2,18.9,8.7,44.3,7.2,60.2
|
||||||
|
c-1.5,32.2-20.5,68.7-43.8,84.7c-4.2,3.4-23.2,16.3-30.9,19.4c-2.9,1.5-4.3,1.8-8.6-0.4c-4.3-2.2-17.5-8.1-29.1-18.3
|
||||||
|
c-11.3-8.9-41.2-33.7-44.6-85.9c-0.1-41.9,5.4-52.6,7.1-59.2c1.9-3.3,1.4-4.5,5.7-5.8C216.7,104.3,247.7,91.8,277.9,92.2z"/>
|
||||||
|
|
||||||
|
<linearGradient id="SVGID_10_" gradientUnits="userSpaceOnUse" x1="278.349" y1="605.4353" x2="278.349" y2="441.3781" gradientTransform="matrix(1 0 0 -1 0 707.5911)">
|
||||||
|
<stop offset="0" style="stop-color:#F2BF4B"/>
|
||||||
|
<stop offset="1" style="stop-color:#EBAE24"/>
|
||||||
|
</linearGradient>
|
||||||
|
<path class="st5" d="M278,99.6c4.3,0.1,26.2-1.4,61.6,13c2.8,1.1,3.1,1.6,4.2,4.3c5.7,17.4,8,40.7,6.6,55.4
|
||||||
|
c-1.4,29.7-18.9,63.2-40.3,78c-3.8,3.1-21.4,15-28.4,17.8c-2.7,1.3-3.9,1.6-7.9-0.4c-3.9-2-16.1-7.5-26.8-16.8
|
||||||
|
c-10.4-8.2-37.9-31-41.1-79.1c-0.1-38.5,5-48.4,6.5-54.5c1.7-3,1.3-4.1,5.2-5.4C221.6,110.7,250.1,99.2,278,99.6z"/>
|
||||||
|
<path class="st6" d="M278.5,245.6c-0.9,0.1-1.9-0.2-3.4-1c-2.8-1.5-11.6-5.4-19.4-12.1c-7.5-5.9-27.3-22.4-29.7-57.1
|
||||||
|
c0-27.8,3.6-34.9,4.7-39.3c0.6-1.1,0.8-1.8,1.3-2.4l46.5,44.9V245.6z"/>
|
||||||
|
|
||||||
|
<linearGradient id="SVGID_11_" gradientUnits="userSpaceOnUse" x1="304.4899" y1="551.4356" x2="304.4899" y2="478.9356" gradientTransform="matrix(1 0 0 -1 0 707.5911)">
|
||||||
|
<stop offset="0" style="stop-color:#F8B640"/>
|
||||||
|
<stop offset="1" style="stop-color:#F9C660"/>
|
||||||
|
</linearGradient>
|
||||||
|
<path class="st7" d="M278.5,245.6c0.7,0,1.4-0.3,2.2-0.8c5.1-2,17.7-10.6,20.5-12.9c15.5-10.7,28.1-34.9,29.1-56.3
|
||||||
|
c1-10.6-0.7-27.4-4.8-40c-0.4-1.1-0.7-1.6-1.2-2.1l-45.9,44.9L278.5,245.6L278.5,245.6z"/>
|
||||||
|
|
||||||
|
<linearGradient id="SVGID_12_" gradientUnits="userSpaceOnUse" x1="232" y1="556.7395" x2="324.4" y2="556.7395" gradientTransform="matrix(1 0 0 -1 0 707.5911)">
|
||||||
|
<stop offset="0" style="stop-color:#F8B640"/>
|
||||||
|
<stop offset="1" style="stop-color:#F9C660"/>
|
||||||
|
</linearGradient>
|
||||||
|
<path class="st8" d="M324.4,133.6c-0.4-0.4-0.9-0.6-1.8-1c-25.6-10.4-41.4-9.3-44.5-9.4c-20.1-0.3-40.7,8.1-43.6,9
|
||||||
|
c-1.4,0.5-2.1,0.9-2.5,1.5l46.5,44.9L324.4,133.6z"/>
|
||||||
|
|
||||||
|
<radialGradient id="SVGID_13_" cx="278.2325" cy="523.2651" r="49.5127" gradientTransform="matrix(1 0 0 -1 0 707.5911)" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop offset="0" style="stop-color:#C2172D"/>
|
||||||
|
<stop offset="1" style="stop-color:#951922"/>
|
||||||
|
</radialGradient>
|
||||||
|
<path class="st9" d="M278.1,131.2c2.7,0.1,16.4-0.9,38.6,8.2c1.7,0.7,1.9,1,2.6,2.7c3.6,10.9,5,25.6,4.1,34.7
|
||||||
|
c-0.9,18.6-11.8,39.6-25.3,48.9c-2.4,2-13.4,9.4-17.8,11.2c-1.7,0.8-2.5,1-4.9-0.2c-2.5-1.3-10.1-4.7-16.8-10.5
|
||||||
|
c-6.5-5.1-23.8-19.4-25.8-49.6c0-24.2,3.1-30.3,4.1-34.2c1.1-1.9,0.8-2.6,3.3-3.4C242.7,138.2,260.6,130.9,278.1,131.2z"/>
|
||||||
|
<path class="st10" d="M281.3,219.5l-4-0.2c0,0-9.2,0.2-14-12.6l-20-57.6c0,0,17,7.2,21.5,22L281.3,219.5z"/>
|
||||||
|
<path class="st10" d="M307.2,158.7h-4.1l-6.5,24.8c-3.6,14.4-14.2,17.2-14.2,17.2l11.1-42h-12.9c0,0,1.2-8.8,10.5-8.8h27.2
|
||||||
|
C318.3,149.9,315,158.7,307.2,158.7z"/>
|
||||||
|
|
||||||
|
<linearGradient id="SVGID_14_" gradientUnits="userSpaceOnUse" x1="278.3005" y1="510.4355" x2="278.3005" y2="573.277" gradientTransform="matrix(1 0 0 -1 0 707.5911)">
|
||||||
|
<stop offset="0.3006" style="stop-color:#FFFFFF;stop-opacity:0.15"/>
|
||||||
|
<stop offset="1" style="stop-color:#EBAE24;stop-opacity:0"/>
|
||||||
|
</linearGradient>
|
||||||
|
<path class="st11" d="M209.6,174.2c0,0,18.2,7.8,24,8.7c5.4,4.7,15.7,10.2,21.8,12.2c10.4,2.9,17.3,3.3,22.6,3.3
|
||||||
|
c5.3,0,15.7-0.2,24.9-4.2c5.7-2.5,14.9-7.1,20.5-13.3c7-1.6,23.7-9.7,23.7-9.7s0.9-31.3-6.8-49.4c-0.7-1.6-1.7-1.7-1.7-1.7
|
||||||
|
s-28.1-12.2-59.9-12.2s-60.5,11.9-60.5,11.9s-0.8,0-1.6,1.9C215.8,123.5,208.4,144.6,209.6,174.2z"/>
|
||||||
|
|
||||||
|
<linearGradient id="SVGID_15_" gradientUnits="userSpaceOnUse" x1="278.9793" y1="525.4617" x2="205.7293" y2="544.7117" gradientTransform="matrix(1 0 0 -1 0 707.5911)">
|
||||||
|
<stop offset="0" style="stop-color:#FFFFFF;stop-opacity:8.000000e-02"/>
|
||||||
|
<stop offset="1" style="stop-color:#EBAE24;stop-opacity:0"/>
|
||||||
|
</linearGradient>
|
||||||
|
<path class="st12" d="M281.6,268.1c-2.7,1.3-3.9,1.6-7.9-0.4c-3.9-2-16.1-7.5-26.8-16.8c-10.4-8.2-37.9-31-41.1-79.1
|
||||||
|
c-0.1-38.5,5-48.4,6.5-54.5c1.7-3,1.3-4.1,5.2-5.4c4-1.3,32.5-12.8,60.3-12.4c4.3,0.1,26.2-1.4,61.6,13c1.4,0.6,1.4,0.6,2.7,1.6
|
||||||
|
C237.8,167.7,281.6,268.1,281.6,268.1z"/>
|
||||||
|
<path class="st13" d="M248.8,34c0,0-1.3,8.4-2.7,12.1C244.7,49.9,251.8,41.9,248.8,34z"/>
|
||||||
|
<path class="st13" d="M307.8,34c0,0,1.3,8.4,2.7,12.1C311.9,49.9,304.7,41.9,307.8,34z"/>
|
||||||
|
</g>
|
||||||
|
<g id="Calque_6">
|
||||||
|
</g>
|
||||||
|
<g id="Fond_texte">
|
||||||
|
<g>
|
||||||
|
<path class="st13" d="M233.4,242.3c-12.2,0-17.7-9.7-17.7-16.5c0-5.7,2.5-10.8,7.1-14.6c-0.9-2.1-1.4-4.2-1.4-6.4
|
||||||
|
c0-6.8,6.6-14.5,16.2-14.5c3.4,0,6.6,0.7,8.8,1.9c2.9,1.7,2.9,4.3,2.9,5.1c0,1.5-0.2,5.9-0.5,7.2c-0.8,4-3.8,4.4-4.7,4.4
|
||||||
|
c-0.5,0-4.6-0.1-4.6-5.3c0-0.8-0.2-1.4-0.5-1.8c-0.5-0.5-1.3-1.1-2.5-1.1c-2.8,0-2.8,2.3-2.8,3c0,2.6,2.3,5.5,7.6,11.3
|
||||||
|
c0.9,1,3.4,3.4,5.8,5.6c0.1-0.5,0.1-0.9,0.2-1.4c-2.5-0.2-4.4-2.2-4.4-4.6c0-2.2,1.8-4.6,5.1-4.6c2.2,0,4.6,0.1,7.1,0.4h0.1
|
||||||
|
c2.8,0.4,4.7,2.5,4.7,5.3c0,4.3-2,8.9-4,12.3c1.7,1.3,3,2.1,4,2.7c1.6,1,3.6,1.6,4.5,1.6c3.7,0,5,2.8,5,4.6c0,2.6-2.2,4.6-5.2,4.6
|
||||||
|
h-5.4c-4.5,0-6.9-0.7-11.4-4C243.3,240.7,238.6,242.3,233.4,242.3z M228.9,220.4c-0.3,0.8-0.5,1.7-0.5,2.8c0,4.5,2.9,7.7,6.9,7.7
|
||||||
|
c1.3,0,2.4-0.2,3.4-0.5c-2.6-2.4-5.1-4.9-6.1-5.9C232.3,224.2,230.7,222.4,228.9,220.4z"/>
|
||||||
|
<path class="st14" d="M219.9,225.8c0-6.5,4.2-10.8,8.5-13.4c-2.1-2.9-2.7-5.2-2.7-7.7c0-4.4,4.5-10.2,11.9-10.2
|
||||||
|
c2.8,0,5.2,0.6,6.7,1.4c0.7,0.4,0.7,0.7,0.7,1.4c0,1.7-0.2,5.6-0.4,6.4c-0.2,0.8-0.3,0.9-0.6,0.9c-0.3,0-0.3-0.2-0.3-1.1
|
||||||
|
c0-1.4-0.3-3.3-1.7-4.7c-1.2-1.3-3.1-2.4-5.6-2.4c-3.3,0-7.1,2.1-7.1,7.3c0,4.3,3,7.9,8.8,14.2c1.9,2.1,8.7,8.4,10.5,9.9
|
||||||
|
c1.6-2.1,2.8-5.8,2.8-9.2c0-0.8-0.2-1.9-1.1-2.7c-0.7-0.7-1.9-0.9-2.7-0.9c-0.3,0-0.7-0.1-0.7-0.4s0.4-0.4,0.9-0.4
|
||||||
|
c1.3,0,3.6,0.1,6.7,0.4c0.8,0.1,1,0.6,1,1.1c0,4.5-3.1,10.1-5.5,13.1c3.7,3.1,6.1,4.6,7.7,5.5c1.8,1.1,4.6,2.2,6.6,2.2
|
||||||
|
c0.5,0,0.8,0.1,0.8,0.4c0,0.2-0.4,0.4-0.9,0.4h-5.4c-4.1,0-5.4-0.4-11.5-5.2c-1.3,1.3-5.7,6-13.9,6
|
||||||
|
C223.6,238,219.9,230.6,219.9,225.8z M245.8,231c-3.1-2.6-8.6-7.8-10.1-9.4c-1.4-1.6-5-5.5-6.6-7.8c-2.9,1.9-5,4.9-5,9.3
|
||||||
|
c0,6.9,4.9,11.9,11.1,11.9C240.5,235.1,243.9,232.9,245.8,231z"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<path class="st14" d="M219.9,225.8c0-6.5,4.2-10.8,8.5-13.4c-2.1-2.9-2.7-5.2-2.7-7.7c0-4.4,4.5-10.2,11.9-10.2
|
||||||
|
c2.8,0,5.2,0.6,6.7,1.4c0.7,0.4,0.7,0.7,0.7,1.4c0,1.7-0.2,5.6-0.4,6.4c-0.2,0.8-0.3,0.9-0.6,0.9c-0.3,0-0.3-0.2-0.3-1.1
|
||||||
|
c0-1.4-0.3-3.3-1.7-4.7c-1.2-1.3-3.1-2.4-5.6-2.4c-3.3,0-7.1,2.1-7.1,7.3c0,4.3,3,7.9,8.8,14.2c1.9,2.1,8.7,8.4,10.5,9.9
|
||||||
|
c1.6-2.1,2.8-5.8,2.8-9.2c0-0.8-0.2-1.9-1.1-2.7c-0.7-0.7-1.9-0.9-2.7-0.9c-0.3,0-0.7-0.1-0.7-0.4s0.4-0.4,0.9-0.4
|
||||||
|
c1.3,0,3.6,0.1,6.7,0.4c0.8,0.1,1,0.6,1,1.1c0,4.5-3.1,10.1-5.5,13.1c3.7,3.1,6.1,4.6,7.7,5.5c1.8,1.1,4.6,2.2,6.6,2.2
|
||||||
|
c0.5,0,0.8,0.1,0.8,0.4c0,0.2-0.4,0.4-0.9,0.4h-5.4c-4.1,0-5.4-0.4-11.5-5.2c-1.3,1.3-5.7,6-13.9,6
|
||||||
|
C223.6,238,219.9,230.6,219.9,225.8z M245.8,231c-3.1-2.6-8.6-7.8-10.1-9.4c-1.4-1.6-5-5.5-6.6-7.8c-2.9,1.9-5,4.9-5,9.3
|
||||||
|
c0,6.9,4.9,11.9,11.1,11.9C240.5,235.1,243.9,232.9,245.8,231z"/>
|
||||||
|
</g>
|
||||||
|
<path class="st14" d="M110.2,249.4v-26.6c-0.9-1.3-1.7-2.7-2.3-4.2c-1.2-2.8-1.8-5.8-1.8-8.9s0.6-6.1,1.8-8.9
|
||||||
|
c1.2-2.7,2.8-5.1,4.8-7.2c2-2,4.5-3.7,7.2-4.8c2.8-1.2,5.8-1.8,8.9-1.8h35.6v26.6c0.9,1.3,1.7,2.7,2.3,4.2c1.2,2.8,1.8,5.8,1.8,8.9
|
||||||
|
s-0.6,6.1-1.8,8.9c-1.2,2.7-2.8,5.2-4.9,7.2c-2.1,2.1-4.5,3.7-7.2,4.9c-2.8,1.2-5.8,1.8-8.9,1.8L110.2,249.4L110.2,249.4z"/>
|
||||||
|
<path class="st13" d="M114.8,244.9v-19.7h4.4c-1.2-0.7-2.3-1.6-3.2-2.6c-1.6-1.6-2.9-3.6-3.8-5.8c-1-2.2-1.4-4.6-1.4-7.2
|
||||||
|
c0-2.5,0.5-4.9,1.4-7.2c0.9-2.2,2.2-4.1,3.9-5.8c1.6-1.6,3.6-2.9,5.8-3.9s4.6-1.4,7.2-1.4h31.1V211h-4.5c1.1,0.7,2.2,1.5,3.2,2.5
|
||||||
|
c1.7,1.6,3,3.6,4,5.8c1,2.2,1.4,4.6,1.4,7.2c0,2.5-0.5,4.9-1.4,7.2c-0.9,2.2-2.3,4.1-3.9,5.8c-1.7,1.7-3.6,3-5.8,3.9
|
||||||
|
c-2.2,1-4.6,1.4-7.2,1.4h-31.2V244.9z"/>
|
||||||
|
<path d="M154.3,197v8.4h-25.4c-1.2,0-2.2,0.4-3,1.2c-0.8,0.8-1.2,1.8-1.2,3s0.4,2.2,1.2,3.1c0.8,0.8,1.8,1.3,3,1.3h16.9
|
||||||
|
c1.8,0,3.4,0.3,4.9,1s2.9,1.5,4,2.7c1.2,1.1,2.1,2.5,2.7,4c0.7,1.5,1,3.2,1,4.9c0,1.8-0.3,3.4-1,4.9s-1.6,2.9-2.7,4
|
||||||
|
c-1.2,1.2-2.5,2.1-4,2.7c-1.5,0.7-3.2,1-4.9,1h-25.3v-8.4h25.3c1.3,0,2.3-0.4,3.1-1.2c0.8-0.8,1.2-1.8,1.2-3.1c0-1.2-0.4-2.2-1.2-3
|
||||||
|
s-1.8-1.2-3.1-1.2h-16.9c-1.8,0-3.4-0.3-4.9-1s-2.9-1.6-4-2.7c-1.1-1.2-2-2.5-2.7-4s-1-3.2-1-4.9c0-1.8,0.3-3.4,1-4.9
|
||||||
|
s1.5-2.9,2.7-4c1.1-1.1,2.5-2,4-2.7s3.2-1,4.9-1L154.3,197L154.3,197z"/>
|
||||||
|
<polygon class="st14" points="195.8,241 195.8,186.8 224.6,186.8 224.6,244.2 "/>
|
||||||
|
<polygon class="st13" points="200.4,236.9 200.4,191.4 220,191.4 220,239.1 "/>
|
||||||
|
<path d="M206,231.9v-34.8h8.4v35.7"/>
|
||||||
|
<path class="st14" d="M193.4,294.4c-4.3,0-8.4-0.8-12.2-2.5c-3.8-1.6-7.1-3.9-10-6.7c-2.9-2.9-5.1-6.2-6.7-10
|
||||||
|
c-1.6-3.8-2.5-7.9-2.5-12.2c0-4.3,0.8-8.5,2.5-12.3c1.6-3.7,3.9-7.1,6.8-9.9c2.8-2.8,6.2-5,9.9-6.6c3.8-1.6,7.9-2.5,12.2-2.5h2.5
|
||||||
|
v-16.9h28.7v48.1c0,4.2-0.8,8.3-2.5,12.2c-1.6,3.7-3.8,7.1-6.6,9.9c-2.8,2.9-6.2,5.2-10,6.8C201.7,293.6,197.6,294.4,193.4,294.4z
|
||||||
|
M193.4,260.6c-0.4,0-0.7,0.1-1,0.2s-0.6,0.3-0.8,0.5s-0.4,0.5-0.6,0.8c-0.1,0.2-0.2,0.4-0.2,0.9c0,0.4,0.1,0.7,0.2,1
|
||||||
|
c0.1,0.3,0.3,0.6,0.5,0.8c0.2,0.2,0.5,0.4,0.8,0.5s0.6,0.2,1,0.2c0.5,0,0.7-0.1,0.9-0.2c0.3-0.1,0.6-0.3,0.8-0.6
|
||||||
|
c0.2-0.2,0.4-0.5,0.5-0.8s0.2-0.6,0.2-1v-2.5h-2.3V260.6z"/>
|
||||||
|
<path class="st13" d="M193.4,289.9c-3.6,0-7.1-0.7-10.4-2.1c-3.2-1.4-6.1-3.3-8.5-5.8c-2.4-2.4-4.4-5.3-5.8-8.5
|
||||||
|
c-1.4-3.3-2.1-6.8-2.1-10.4c0-3.7,0.7-7.2,2.1-10.5c1.4-3.2,3.3-6,5.8-8.5c2.4-2.4,5.3-4.3,8.5-5.7c3.3-1.4,6.8-2.1,10.4-2.1h7
|
||||||
|
v-16.9h19.7V263c0,3.6-0.7,7.1-2.1,10.4c-1.4,3.2-3.3,6.1-5.7,8.5c-2.4,2.5-5.3,4.4-8.5,5.8C200.5,289.1,197,289.9,193.4,289.9z
|
||||||
|
M193.4,256.1c-1,0-1.9,0.2-2.8,0.5c-0.9,0.4-1.6,0.9-2.3,1.5c-0.7,0.7-1.1,1.4-1.5,2.3c-0.4,0.8-0.5,1.7-0.5,2.7s0.2,1.9,0.5,2.8
|
||||||
|
c0.4,0.9,0.9,1.6,1.5,2.3c0.6,0.6,1.4,1.1,2.3,1.5c0.9,0.4,1.8,0.5,2.8,0.5s1.9-0.2,2.7-0.5c0.9-0.4,1.6-0.9,2.3-1.5
|
||||||
|
c0.6-0.6,1.1-1.4,1.5-2.3s0.5-1.8,0.5-2.8v-7H193.4z"/>
|
||||||
|
<path d="M214.4,225.1V263c0,2.9-0.5,5.6-1.6,8.2s-2.6,4.8-4.5,6.8c-1.9,1.9-4.1,3.5-6.7,4.6c-2.6,1.1-5.3,1.6-8.2,1.6
|
||||||
|
s-5.6-0.5-8.2-1.6c-2.6-1.1-4.8-2.6-6.8-4.6c-1.9-1.9-3.5-4.2-4.6-6.8c-1.1-2.6-1.6-5.3-1.6-8.2c0-2.9,0.5-5.7,1.6-8.2
|
||||||
|
c1.1-2.5,2.6-4.8,4.6-6.7c1.9-1.9,4.2-3.4,6.8-4.5s5.3-1.6,8.2-1.6h12.7v-16.9 M193.4,275.8c1.8,0,3.4-0.3,4.9-1s2.9-1.6,4-2.7
|
||||||
|
c1.2-1.2,2.1-2.5,2.7-4.1c0.7-1.6,1-3.2,1-5v-12.7h-12.7c-1.8,0-3.4,0.3-5,1s-2.9,1.6-4.1,2.7c-1.2,1.2-2.1,2.5-2.7,4
|
||||||
|
c-0.7,1.5-1,3.2-1,4.9c0,1.8,0.3,3.4,1,5s1.6,2.9,2.7,4.1c1.2,1.2,2.5,2.1,4.1,2.7C189.9,275.5,191.6,275.8,193.4,275.8z"/>
|
||||||
|
<path class="st14" d="M31.4,294.6c-4.3,0-8.3-0.8-12.2-2.5c-3.8-1.6-7.1-3.9-10-6.7c-2.9-2.8-5.1-6.2-6.7-10
|
||||||
|
c-1.6-3.8-2.5-7.9-2.5-12.2v-48.1h28.8V232h2.6c4.3,0,8.4,0.8,12.3,2.5c3.7,1.6,7,3.8,9.8,6.7c2.8,2.8,5.1,6.1,6.7,9.8
|
||||||
|
c1.6,3.8,2.5,7.9,2.5,12.3c0,4.2-0.8,8.3-2.5,12.2c-1.6,3.7-3.8,7.1-6.6,9.9c-2.8,2.9-6.2,5.1-9.9,6.8
|
||||||
|
C39.8,293.7,35.7,294.6,31.4,294.6z M28.8,263.3c0,0.4,0.1,0.7,0.2,1c0.1,0.4,0.3,0.6,0.5,0.8c0.2,0.2,0.5,0.4,0.8,0.5
|
||||||
|
s0.6,0.2,1,0.2c0.5,0,0.7-0.1,0.9-0.2c0.3-0.1,0.6-0.3,0.8-0.6c0.2-0.2,0.4-0.5,0.5-0.8s0.2-0.6,0.2-1c0-0.5-0.1-0.7-0.2-0.9
|
||||||
|
c-0.1-0.3-0.3-0.6-0.6-0.8c-0.2-0.2-0.5-0.4-0.8-0.6c-0.2-0.1-0.4-0.2-0.9-0.2h-2.6v2.6H28.8z"/>
|
||||||
|
<path class="st13" d="M31.4,290c-3.6,0-7.1-0.7-10.4-2.1c-3.2-1.4-6.1-3.3-8.5-5.8c-2.4-2.4-4.4-5.3-5.8-8.5
|
||||||
|
c-1.4-3.3-2.1-6.8-2.1-10.4v-43.6h19.7v16.9h7.1c3.7,0,7.2,0.7,10.5,2.1c3.2,1.4,6,3.3,8.4,5.7c2.4,2.4,4.3,5.2,5.7,8.4
|
||||||
|
c1.4,3.2,2.1,6.8,2.1,10.5c0,3.6-0.7,7.1-2.1,10.4c-1.4,3.2-3.3,6.1-5.7,8.5c-2.4,2.5-5.3,4.4-8.5,5.8
|
||||||
|
C38.6,289.3,35.1,290,31.4,290z M24.3,263.3c0,1,0.2,1.9,0.5,2.8c0.4,0.9,0.9,1.6,1.5,2.3c0.6,0.6,1.4,1.1,2.3,1.5s1.8,0.5,2.8,0.5
|
||||||
|
s1.9-0.2,2.7-0.5c0.9-0.4,1.6-0.9,2.3-1.5c0.6-0.6,1.1-1.4,1.5-2.3s0.5-1.8,0.5-2.8s-0.2-1.9-0.5-2.7c-0.4-0.9-0.9-1.6-1.5-2.3
|
||||||
|
c-0.6-0.6-1.4-1.1-2.3-1.5c-0.8-0.4-1.7-0.5-2.7-0.5h-7.1C24.3,256.3,24.3,263.3,24.3,263.3z"/>
|
||||||
|
<path d="M39.6,243.9c2.5,1.1,4.8,2.6,6.7,4.5c1.9,1.9,3.4,4.1,4.5,6.7c1.1,2.5,1.6,5.3,1.6,8.2c0,2.9-0.5,5.6-1.6,8.2
|
||||||
|
s-2.6,4.8-4.5,6.8c-1.9,1.9-4.1,3.5-6.7,4.6c-2.5,1.1-5.3,1.6-8.2,1.6c-2.9,0-5.6-0.5-8.2-1.6s-4.8-2.6-6.8-4.6
|
||||||
|
c-1.9-1.9-3.5-4.2-4.6-6.8c-1.1-2.6-1.6-5.3-1.6-8.2v-37.9h8.4v16.8h12.8C34.3,242.2,37,242.8,39.6,243.9z M31.4,276
|
||||||
|
c1.8,0,3.4-0.3,4.9-1s2.9-1.6,4-2.7c1.2-1.2,2.1-2.5,2.7-4.1c0.7-1.6,1-3.2,1-5s-0.3-3.4-1-4.9s-1.6-2.9-2.7-4
|
||||||
|
c-1.2-1.2-2.5-2.1-4-2.7c-1.5-0.7-3.2-1-4.9-1H18.6v12.7c0,1.8,0.3,3.4,1,5s1.6,2.9,2.7,4.1c1.2,1.2,2.5,2.1,4.1,2.7
|
||||||
|
C27.9,275.7,29.6,276,31.4,276z"/>
|
||||||
|
<path class="st14" d="M75.9,294.6c-4.3,0-8.3-0.8-12.2-2.5c-3.8-1.6-7.1-3.9-10-6.8c-2.8-2.8-5-6.2-6.6-9.9
|
||||||
|
c-1.6-3.8-2.5-7.9-2.5-12.2c0-4.3,0.8-8.5,2.5-12.3c1.6-3.7,3.8-7,6.7-9.8c2.8-2.8,6.2-5.1,9.9-6.7c3.8-1.6,7.9-2.5,12.2-2.5
|
||||||
|
c4.3,0,8.4,0.8,12.3,2.5c3.7,1.6,7,3.8,9.8,6.6c2.9,2.8,5.2,6.2,6.8,9.9c1.6,3.8,2.5,7.9,2.5,12.3c0,4.2-0.8,8.3-2.5,12.2
|
||||||
|
c-1.6,3.8-3.9,7.1-6.7,10c-2.8,2.8-6.2,5.1-9.9,6.7C84.4,293.7,80.3,294.6,75.9,294.6z M75.9,260.8c-0.4,0-0.7,0.1-1,0.2
|
||||||
|
s-0.6,0.3-0.8,0.5c-0.2,0.2-0.4,0.5-0.6,0.8c-0.1,0.2-0.2,0.4-0.2,0.9c0,0.4,0.1,0.7,0.2,1c0.1,0.3,0.3,0.6,0.5,0.8
|
||||||
|
c0.2,0.2,0.5,0.4,0.8,0.5s0.6,0.2,1,0.2c0.4,0,0.7-0.1,1-0.2s0.6-0.3,0.8-0.5c0.2-0.2,0.4-0.5,0.5-0.8c0.1-0.3,0.2-0.6,0.2-1
|
||||||
|
c0-0.5-0.1-0.7-0.2-0.9c-0.1-0.3-0.3-0.6-0.6-0.8c-0.2-0.2-0.5-0.4-0.8-0.5C76.6,260.8,76.3,260.8,75.9,260.8z"/>
|
||||||
|
<path class="st13" d="M75.9,290c-3.6,0-7.1-0.7-10.4-2.1c-3.2-1.4-6.1-3.3-8.5-5.8c-2.4-2.4-4.3-5.3-5.7-8.5
|
||||||
|
c-1.4-3.3-2.1-6.8-2.1-10.4c0-3.7,0.7-7.2,2.1-10.5c1.4-3.2,3.3-6,5.7-8.4c2.4-2.4,5.3-4.3,8.5-5.7c3.3-1.4,6.8-2.1,10.4-2.1
|
||||||
|
c3.7,0,7.2,0.7,10.5,2.1c3.2,1.4,6,3.3,8.4,5.7c2.5,2.4,4.4,5.3,5.8,8.5c1.4,3.2,2.1,6.8,2.1,10.5c0,3.6-0.7,7.1-2.1,10.4
|
||||||
|
c-1.4,3.2-3.3,6.1-5.8,8.5c-2.4,2.4-5.3,4.4-8.5,5.7C83.2,289.3,79.6,290,75.9,290z M75.9,256.3c-1,0-1.9,0.2-2.8,0.5
|
||||||
|
c-0.9,0.4-1.6,0.9-2.3,1.5c-0.6,0.6-1.1,1.4-1.5,2.3c-0.4,0.8-0.5,1.7-0.5,2.7s0.2,1.9,0.5,2.8c0.4,0.9,0.9,1.6,1.5,2.3
|
||||||
|
c0.6,0.6,1.4,1.1,2.3,1.5c0.9,0.4,1.8,0.5,2.8,0.5s1.9-0.2,2.8-0.5c0.9-0.4,1.6-0.9,2.3-1.5c0.6-0.6,1.1-1.4,1.5-2.3
|
||||||
|
s0.5-1.8,0.5-2.8s-0.2-1.9-0.5-2.7c-0.4-0.9-0.9-1.6-1.5-2.3c-0.6-0.6-1.4-1.1-2.3-1.5S76.9,256.3,75.9,256.3z"/>
|
||||||
|
<path d="M54.9,263.3c0-2.9,0.5-5.7,1.6-8.2c1.1-2.5,2.6-4.8,4.5-6.7c1.9-1.9,4.1-3.4,6.7-4.5c2.6-1.1,5.3-1.6,8.2-1.6
|
||||||
|
s5.7,0.5,8.2,1.6s4.8,2.6,6.7,4.5s3.5,4.1,4.6,6.7c1.1,2.5,1.6,5.3,1.6,8.2c0,2.9-0.5,5.6-1.6,8.2s-2.6,4.8-4.6,6.8
|
||||||
|
c-1.9,1.9-4.2,3.5-6.7,4.6s-5.3,1.6-8.2,1.6s-5.6-0.5-8.2-1.6c-2.6-1.1-4.8-2.6-6.7-4.6c-1.9-1.9-3.4-4.2-4.5-6.8
|
||||||
|
C55.5,268.9,54.9,266.1,54.9,263.3z M63.2,263.3c0,1.8,0.3,3.4,1,5c0.7,1.6,1.6,2.9,2.7,4.1c1.2,1.2,2.5,2.1,4.1,2.7
|
||||||
|
c1.6,0.7,3.2,1,5,1s3.4-0.3,5-1c1.6-0.7,2.9-1.6,4.1-2.7c1.2-1.2,2.1-2.5,2.7-4.1c0.7-1.6,1-3.2,1-5s-0.3-3.4-1-4.9s-1.6-2.9-2.7-4
|
||||||
|
c-1.2-1.2-2.5-2.1-4.1-2.7c-1.6-0.7-3.2-1-5-1s-3.4,0.3-5,1c-1.6,0.7-2.9,1.6-4.1,2.7c-1.2,1.2-2.1,2.5-2.7,4
|
||||||
|
C63.5,259.9,63.2,261.5,63.2,263.3z"/>
|
||||||
|
<path class="st14" d="M120.9,294.4c-4.3,0-8.3-0.8-12.2-2.5c-3.8-1.6-7.1-3.9-10-6.7c-2.9-2.8-5.1-6.2-6.7-10
|
||||||
|
c-1.6-3.8-2.5-7.9-2.5-12.2c0-4.3,0.8-8.5,2.5-12.3c1.6-3.7,3.9-7.1,6.8-9.9c2.8-2.8,6.2-5,9.9-6.6c3.8-1.6,7.9-2.5,12.2-2.5
|
||||||
|
s8.5,0.8,12.3,2.5c3.7,1.6,7,3.8,9.8,6.7c2.8,2.8,5.1,6.1,6.7,9.8c1.6,3.8,2.5,7.9,2.5,12.3v31.3h-31.3V294.4z M120.9,260.6
|
||||||
|
c-0.4,0-0.7,0.1-1,0.2s-0.6,0.3-0.8,0.5s-0.4,0.5-0.6,0.8c-0.1,0.2-0.2,0.4-0.2,0.9c0,0.4,0.1,0.7,0.2,1c0.1,0.3,0.3,0.6,0.5,0.8
|
||||||
|
c0.2,0.2,0.5,0.4,0.8,0.5s0.6,0.2,1,0.2h2.5v-2.6c0-0.5-0.1-0.7-0.2-0.9c-0.1-0.3-0.3-0.6-0.6-0.8c-0.2-0.2-0.5-0.4-0.8-0.6
|
||||||
|
C121.6,260.7,121.4,260.6,120.9,260.6z"/>
|
||||||
|
<path class="st13" d="M120.9,289.9c-3.6,0-7.1-0.7-10.4-2.1c-3.2-1.4-6.1-3.3-8.5-5.8c-2.4-2.4-4.4-5.3-5.8-8.5
|
||||||
|
c-1.4-3.3-2.1-6.8-2.1-10.4c0-3.7,0.7-7.2,2.1-10.5c1.4-3.2,3.3-6,5.8-8.5c2.4-2.4,5.3-4.3,8.5-5.7c3.3-1.4,6.8-2.1,10.4-2.1
|
||||||
|
c3.7,0,7.2,0.7,10.5,2.1c3.2,1.4,6,3.3,8.4,5.7c2.4,2.4,4.3,5.2,5.7,8.4c1.4,3.2,2.1,6.8,2.1,10.5v26.8h-26.7V289.9z M120.9,256.1
|
||||||
|
c-1,0-1.9,0.2-2.8,0.5c-0.9,0.4-1.6,0.9-2.3,1.5c-0.7,0.7-1.1,1.4-1.5,2.3c-0.4,0.8-0.5,1.7-0.5,2.7s0.2,1.9,0.5,2.8
|
||||||
|
c0.4,0.9,0.9,1.6,1.5,2.3c0.6,0.6,1.4,1.1,2.3,1.5c0.9,0.4,1.8,0.5,2.8,0.5h7v-7.1c0-1-0.2-1.9-0.5-2.7c-0.4-0.9-0.9-1.6-1.5-2.3
|
||||||
|
c-0.6-0.6-1.4-1.1-2.3-1.5C122.8,256.2,121.9,256.1,120.9,256.1z"/>
|
||||||
|
<path d="M120.9,242c2.9,0,5.7,0.5,8.2,1.6s4.8,2.6,6.7,4.5s3.4,4.1,4.5,6.7c1.1,2.5,1.6,5.3,1.6,8.2v21.2h-21
|
||||||
|
c-2.9,0-5.6-0.5-8.2-1.6c-2.6-1.1-4.8-2.6-6.8-4.6c-1.9-1.9-3.5-4.2-4.6-6.8c-1.1-2.6-1.6-5.3-1.6-8.2c0-2.9,0.5-5.7,1.6-8.2
|
||||||
|
c1.1-2.5,2.6-4.8,4.6-6.7c1.9-1.9,4.2-3.4,6.8-4.5C115.3,242.6,118,242,120.9,242z M133.6,275.8V263c0-1.8-0.3-3.4-1-4.9
|
||||||
|
s-1.6-2.9-2.7-4c-1.2-1.2-2.5-2.1-4-2.7c-1.5-0.7-3.2-1-4.9-1c-1.8,0-3.4,0.3-5,1s-2.9,1.6-4.1,2.7c-1.2,1.2-2.1,2.5-2.7,4
|
||||||
|
c-0.7,1.5-1,3.2-1,4.9c0,1.8,0.3,3.4,1,5s1.6,2.9,2.7,4.1c1.2,1.2,2.5,2.1,4.1,2.7c1.6,0.7,3.2,1,5,1L133.6,275.8L133.6,275.8z"/>
|
||||||
|
<g>
|
||||||
|
<path class="st14" d="M150.9,169.9h28.7v33.9c0.8-0.1,1.7-0.1,2.6-0.1c0.5,0,0.7-0.1,0.9-0.2c0.3-0.1,0.6-0.3,0.8-0.6
|
||||||
|
c0.2-0.2,0.4-0.5,0.5-0.8s0.2-0.6,0.2-1v-14.3h28.8v14.4c0,5.2-1.2,10-3.5,14.4c-0.5,0.9-1,1.7-1.5,2.5c0.5,0.8,1,1.7,1.5,2.6
|
||||||
|
c2.3,4.4,3.5,9.2,3.5,14.3v14.4h-28.8V235c0-0.5-0.1-0.7-0.2-0.9c-0.1-0.3-0.3-0.6-0.6-0.8c-0.2-0.2-0.5-0.4-0.8-0.6
|
||||||
|
c-0.2-0.1-0.4-0.2-0.9-0.2l0,0c-0.4,0-0.7,0.1-1,0.2s-0.6,0.3-0.8,0.5s-0.4,0.5-0.6,0.8c-0.1,0.2-0.2,0.4-0.2,0.9v16.7l-28.8,1.6
|
||||||
|
v-83.3H150.9z"/>
|
||||||
|
<path class="st13" d="M155.4,174.5h19.7v34.7c2.3-0.6,4.7-1,7.1-1c1,0,1.9-0.2,2.7-0.5c0.9-0.4,1.6-0.9,2.3-1.5
|
||||||
|
c0.6-0.6,1.1-1.4,1.5-2.3s0.5-1.8,0.5-2.8v-9.8h19.7v9.8c0,4.4-1,8.5-3,12.3c-0.9,1.7-1.9,3.2-3.1,4.6c1.2,1.4,2.2,3,3.1,4.7
|
||||||
|
c2,3.8,2.9,7.9,2.9,12.2v9.9h-19.7v-9.9c0-1-0.2-1.9-0.5-2.7c-0.4-0.9-0.9-1.6-1.5-2.3c-0.6-0.6-1.4-1.1-2.3-1.5
|
||||||
|
c-0.8-0.4-1.7-0.5-2.7-0.5s-1.9,0.2-2.8,0.5c-0.9,0.4-1.6,0.9-2.3,1.5c-0.6,0.6-1.1,1.4-1.5,2.3c-0.4,0.8-0.5,1.7-0.5,2.7v12.4
|
||||||
|
l-19.7,1.1v-73.9H155.4z"/>
|
||||||
|
<path d="M161.1,242.5V235v-54.8h8.4v38.1c1.8-1.4,3.8-2.4,6-3.2c2.2-0.8,4.4-1.1,6.8-1.1c1.8,0,3.4-0.3,4.9-1s2.9-1.6,4-2.7
|
||||||
|
c1.2-1.2,2.1-2.5,2.7-4.1c0.7-1.6,1-3.2,1-5v-4.1h8.4v4.1c0,3.5-0.8,6.7-2.3,9.6s-3.6,5.3-6.2,7.3c2.6,1.9,4.7,4.4,6.2,7.3
|
||||||
|
s2.3,6.1,2.3,9.6v4.2h-8.4V235c0-1.8-0.3-3.4-1-4.9s-1.6-2.9-2.7-4c-1.2-1.2-2.5-2.1-4-2.7c-1.5-0.7-3.2-1-4.9-1
|
||||||
|
c-1.8,0-3.4,0.3-5,1s-2.9,1.6-4.1,2.7c-1.2,1.2-2.1,2.5-2.7,4c-0.7,1.5-1,3.2-1,4.9v7.1"/>
|
||||||
|
<path class="st14" d="M134.2,294.4v-31.3c0-4.3,0.8-8.5,2.5-12.3c1.6-3.7,3.9-7.1,6.8-9.9c2.8-2.8,6.2-5,9.9-6.6
|
||||||
|
c1.8-0.8,3.7-1.4,5.6-1.8l0.8-0.2l19.9-1.1v29.3h-14.2c-0.5,0-0.7,0.1-0.9,0.2c-0.3,0.1-0.6,0.3-0.8,0.6c-0.2,0.2-0.4,0.5-0.6,0.8
|
||||||
|
c-0.1,0.2-0.2,0.4-0.2,0.9v31.3h-28.8V294.4z"/>
|
||||||
|
<path class="st13" d="M138.7,289.9v-26.8c0-3.7,0.7-7.2,2.1-10.5c1.4-3.2,3.3-6,5.8-8.5c2.4-2.4,5.3-4.3,8.5-5.7
|
||||||
|
c1.5-0.7,3.2-1.2,4.8-1.5l0.4-0.1l14.8-0.8v20h-9.6c-1,0-1.9,0.2-2.7,0.5c-0.9,0.4-1.6,0.9-2.3,1.5c-0.7,0.7-1.2,1.4-1.5,2.3
|
||||||
|
c-0.4,0.8-0.5,1.7-0.5,2.7v26.8h-19.8V289.9z"/>
|
||||||
|
<path d="M169.4,242v8.4h-3.9c-1.8,0-3.4,0.3-4.9,1s-2.9,1.6-4,2.7c-1.2,1.2-2.1,2.5-2.7,4c-0.7,1.5-1,3.2-1,4.9v21.2h-8.4v-21.1
|
||||||
|
c0-2.9,0.5-5.7,1.6-8.2c1.1-2.5,2.6-4.8,4.6-6.7c1.9-1.9,4.2-3.4,6.8-4.5c1.2-0.5,2.5-0.9,3.8-1.2"/>
|
||||||
|
</g>
|
||||||
|
<path class="st14" d="M238.4,294.6c-4.2,0-8.2-0.8-12-2.4s-7.2-3.9-10.2-6.8c-3.1-3.1-5.4-6.6-6.9-10.5c-1.4-3.8-2.2-7.7-2.2-11.6
|
||||||
|
c0-4,0.7-7.9,2.2-11.6c1.5-3.9,3.8-7.4,6.9-10.4c3-3,6.6-5.4,10.4-6.9s7.7-2.3,11.7-2.3s7.9,0.8,11.7,2.3c3.9,1.5,7.4,3.9,10.4,6.9
|
||||||
|
l10.1,10.1l-12,12l12,12l-10.1,10.1c-2.9,2.9-6.4,5.2-10.2,6.8C246.6,293.8,242.6,294.6,238.4,294.6z"/>
|
||||||
|
<path class="st13" d="M238.4,290c-3.6,0-7-0.7-10.2-2s-6.2-3.3-8.7-5.8c-2.6-2.6-4.6-5.6-5.9-9c-1.2-3.2-1.9-6.6-1.9-10
|
||||||
|
s0.6-6.7,1.9-9.9c1.3-3.3,3.3-6.3,5.9-8.9s5.6-4.6,8.9-5.9s6.6-1.9,10-1.9s6.8,0.7,10,1.9c3.3,1.3,6.3,3.3,8.9,5.9l6.9,6.9l-12,12
|
||||||
|
l12,12l-6.9,6.9c-2.5,2.5-5.4,4.5-8.7,5.8C245.4,289.4,242,290,238.4,290z"/>
|
||||||
|
<path d="M250.3,269.4l5.9,5.9l-2.9,2.9c-2,2-4.3,3.5-6.9,4.6s-5.3,1.6-8.1,1.6c-2.8,0-5.5-0.5-8.1-1.6s-4.9-2.6-6.9-4.6
|
||||||
|
c-2.1-2.1-3.6-4.4-4.6-7s-1.5-5.2-1.5-7.9c0-2.7,0.5-5.3,1.5-7.9c1-2.6,2.5-4.9,4.6-6.9c2.1-2.1,4.4-3.6,7-4.6s5.2-1.5,7.9-1.5
|
||||||
|
c2.7,0,5.3,0.5,7.9,1.5s4.9,2.6,7,4.6l2.9,2.9l-23.4,23.4c2.4,1.2,4.9,1.6,7.6,1.2s5-1.6,7-3.6L250.3,269.4z M229.4,254.2
|
||||||
|
c-2.5,2.5-3.8,5.5-3.8,9c0,1.9,0.4,3.8,1.3,5.5c0.8-0.8,1.9-1.9,3.4-3.4s3.2-3.2,4.9-4.9c1.7-1.7,3.4-3.4,5-4.9
|
||||||
|
c1.6-1.6,2.8-2.8,3.7-3.7c-2.4-1.2-4.9-1.6-7.6-1.2C233.7,251.1,231.4,252.2,229.4,254.2z"/>
|
||||||
|
<path class="st14" d="M248.8,294.4v-31.3c0-4.3,0.8-8.5,2.5-12.3c1.6-3.7,3.9-7.1,6.8-9.9c2.8-2.8,6.2-5,9.9-6.6
|
||||||
|
c3.8-1.6,7.9-2.5,12.2-2.5h14.4v28.8h-14.4c-0.5,0-0.7,0.1-0.9,0.2c-0.3,0.1-0.6,0.3-0.8,0.6c-0.2,0.2-0.4,0.5-0.6,0.8
|
||||||
|
c-0.1,0.2-0.2,0.4-0.2,0.9v31.3H248.8z"/>
|
||||||
|
<path class="st13" d="M253.4,289.9v-26.8c0-3.7,0.7-7.2,2.1-10.5c1.4-3.2,3.3-6,5.8-8.5c2.4-2.4,5.3-4.3,8.5-5.7
|
||||||
|
c3.3-1.4,6.8-2.1,10.4-2.1h9.9V256h-9.9c-1,0-1.9,0.2-2.7,0.5c-0.9,0.4-1.6,0.9-2.3,1.5c-0.6,0.6-1.1,1.4-1.5,2.3
|
||||||
|
c-0.4,0.8-0.5,1.7-0.5,2.7v26.8h-19.8V289.9z"/>
|
||||||
|
<path d="M284.4,242v8.4h-4.2c-1.8,0-3.4,0.3-4.9,1s-2.9,1.6-4,2.7c-1.2,1.2-2.1,2.5-2.7,4c-0.7,1.5-1,3.2-1,4.9v21.2h-8.4v-21.1
|
||||||
|
c0-2.9,0.5-5.7,1.6-8.2c1.1-2.5,2.6-4.8,4.6-6.7c1.9-1.9,4.2-3.4,6.8-4.5c2.6-1.1,5.3-1.6,8.2-1.6L284.4,242L284.4,242z"/>
|
||||||
|
<path class="st14" d="M341.7,294.5c-5.1,0-9.9-1.2-14.3-3.5c-0.9-0.5-1.8-1-2.6-1.5c-0.8,0.5-1.7,1-2.5,1.5
|
||||||
|
c-4.4,2.3-9.2,3.5-14.4,3.5c-4.3,0-8.3-0.8-12.2-2.5c-3.8-1.6-7.1-3.9-10-6.7c-2.9-2.9-5.1-6.2-6.7-10s-2.5-7.9-2.5-12.2v-31.2
|
||||||
|
h28.9v31.3c0,0.4,0.1,0.7,0.2,1s0.3,0.6,0.5,0.8c0.2,0.2,0.5,0.4,0.8,0.6c0.2,0.1,0.4,0.2,0.9,0.2c0.4,0,0.7-0.1,1-0.2
|
||||||
|
c0.4-0.1,0.6-0.3,0.8-0.5c0.2-0.2,0.4-0.5,0.5-0.8s0.2-0.6,0.2-1v-31.2h28.8v31.1c0,0.4,0.1,0.7,0.2,1c0.1,0.4,0.3,0.6,0.5,0.8
|
||||||
|
c0.2,0.2,0.5,0.4,0.8,0.6c0.2,0.1,0.4,0.2,0.9,0.2c0.4,0,0.7-0.1,1-0.2s0.6-0.3,0.8-0.5c0.2-0.2,0.4-0.5,0.5-0.8s0.2-0.6,0.2-1
|
||||||
|
v-31.2h28.8v31.1c0,4.2-0.8,8.3-2.5,12.2c-1.6,3.8-3.9,7.1-6.7,10c-2.8,2.8-6.2,5.1-9.9,6.7C350.2,293.6,346.1,294.5,341.7,294.5z"
|
||||||
|
/>
|
||||||
|
<path class="st13" d="M341.7,289.9c-4.3,0-8.5-1-12.2-2.9c-1.7-0.9-3.3-1.9-4.7-3.1c-1.4,1.2-3,2.2-4.6,3.1c-3.7,2-7.8,3-12.3,3
|
||||||
|
c-3.6,0-7.1-0.7-10.4-2.1c-3.2-1.4-6.1-3.3-8.5-5.8c-2.4-2.4-4.4-5.3-5.8-8.5c-1.4-3.3-2.1-6.8-2.1-10.4v-26.7h19.8v26.7
|
||||||
|
c0,1,0.2,1.9,0.5,2.8c0.4,0.9,0.9,1.6,1.5,2.3c0.6,0.6,1.4,1.1,2.3,1.5c0.8,0.4,1.7,0.5,2.7,0.5s1.9-0.2,2.8-0.5
|
||||||
|
c0.9-0.4,1.6-0.9,2.3-1.5c0.6-0.6,1.1-1.4,1.5-2.3s0.5-1.8,0.5-2.8v-26.7h19.7v26.7c0,1,0.2,1.9,0.5,2.8c0.4,0.9,0.9,1.6,1.5,2.3
|
||||||
|
c0.6,0.6,1.4,1.1,2.3,1.5c0.8,0.4,1.7,0.5,2.7,0.5s1.9-0.2,2.8-0.5c0.9-0.4,1.6-0.9,2.3-1.5c0.6-0.6,1.1-1.4,1.5-2.3
|
||||||
|
s0.5-1.8,0.5-2.8v-26.7h19.7v26.7c0,3.6-0.7,7.1-2.1,10.4c-1.4,3.2-3.3,6.1-5.8,8.5c-2.4,2.4-5.3,4.4-8.5,5.7
|
||||||
|
C349,289.2,345.4,289.9,341.7,289.9z"/>
|
||||||
|
<path d="M362.9,242.1v21c0,2.9-0.5,5.6-1.6,8.2s-2.6,4.8-4.6,6.8c-1.9,1.9-4.2,3.5-6.7,4.6s-5.3,1.6-8.2,1.6
|
||||||
|
c-3.4,0-6.6-0.8-9.6-2.3c-2.9-1.5-5.4-3.6-7.3-6.2c-1.9,2.6-4.4,4.7-7.3,6.2s-6.1,2.3-9.6,2.3c-2.9,0-5.6-0.5-8.2-1.6
|
||||||
|
s-4.8-2.6-6.8-4.6c-1.9-1.9-3.5-4.2-4.6-6.8c-1.1-2.6-1.6-5.3-1.6-8.2v-21h8.4v21c0,1.8,0.3,3.4,1,5s1.6,2.9,2.7,4.1s2.5,2.1,4,2.7
|
||||||
|
c1.5,0.7,3.2,1,4.9,1c1.8,0,3.4-0.3,5-1s2.9-1.6,4.1-2.7c1.2-1.2,2.1-2.5,2.7-4.1c0.7-1.6,1-3.2,1-5v-21h8.4v21c0,1.8,0.3,3.4,1,5
|
||||||
|
s1.6,2.9,2.7,4.1c1.2,1.2,2.5,2.1,4,2.7c1.5,0.7,3.2,1,4.9,1c1.8,0,3.4-0.3,5-1s2.9-1.6,4.1-2.7s2.1-2.5,2.7-4.1c0.7-1.6,1-3.2,1-5
|
||||||
|
v-21H362.9z"/>
|
||||||
|
<path class="st14" d="M387,294.6c-4.2,0-8.2-0.8-12-2.4s-7.2-3.9-10.2-6.8c-3.1-3.1-5.4-6.6-6.9-10.5c-1.4-3.8-2.2-7.7-2.2-11.6
|
||||||
|
c0-4,0.7-7.9,2.2-11.6c1.5-3.9,3.8-7.4,6.9-10.4c3-3,6.6-5.4,10.4-6.9s7.7-2.3,11.7-2.3s7.9,0.8,11.7,2.3c3.9,1.5,7.4,3.9,10.4,6.9
|
||||||
|
l10.1,10.1l-12,12l12,12L409,285.5c-2.9,2.9-6.4,5.2-10.2,6.8C395.2,293.8,391.1,294.6,387,294.6z"/>
|
||||||
|
<path class="st13" d="M387,290c-3.6,0-7-0.7-10.2-2s-6.2-3.3-8.7-5.8c-2.6-2.6-4.6-5.6-5.9-9c-1.2-3.2-1.9-6.6-1.9-10
|
||||||
|
s0.6-6.7,1.9-9.9c1.3-3.3,3.3-6.3,5.9-8.9s5.6-4.6,8.9-5.9s6.6-1.9,10-1.9s6.8,0.7,10,1.9c3.3,1.3,6.3,3.3,8.9,5.9l6.9,6.9l-12,12
|
||||||
|
l12,12l-6.9,6.9c-2.5,2.5-5.4,4.5-8.7,5.8C394,289.4,390.5,290,387,290z"/>
|
||||||
|
<path d="M398.9,269.4l5.9,5.9l-2.9,2.9c-2,2-4.3,3.5-6.9,4.6s-5.3,1.6-8.1,1.6s-5.5-0.5-8.1-1.6s-4.8-2.6-6.9-4.6
|
||||||
|
c-2.1-2.1-3.6-4.4-4.6-7s-1.5-5.2-1.5-7.9c0-2.7,0.5-5.3,1.5-7.9c1-2.6,2.5-4.9,4.6-6.9c2.1-2.1,4.4-3.6,7-4.6s5.2-1.5,7.9-1.5
|
||||||
|
c2.7,0,5.3,0.5,7.9,1.5s4.9,2.6,7,4.6l2.9,2.9l-23.4,23.4c2.4,1.2,4.9,1.6,7.6,1.2s5-1.6,7-3.6L398.9,269.4z M378,254.2
|
||||||
|
c-2.5,2.5-3.8,5.5-3.8,9c0,1.9,0.4,3.8,1.3,5.5c0.8-0.8,1.9-1.9,3.4-3.4s3.2-3.2,4.9-4.9c1.7-1.7,3.4-3.4,5-4.9
|
||||||
|
c1.6-1.6,2.8-2.8,3.7-3.7c-2.4-1.2-4.9-1.6-7.6-1.2C382.3,251.1,380,252.2,378,254.2z"/>
|
||||||
|
<path class="st14" d="M428.8,294.6c-4.2,0-8.2-0.8-12-2.4s-7.2-3.9-10.2-6.8c-3.1-3.1-5.4-6.6-6.9-10.5c-1.4-3.8-2.2-7.7-2.2-11.6
|
||||||
|
c0-4,0.7-7.9,2.2-11.6c1.5-3.9,3.8-7.4,6.9-10.4c3-3,6.6-5.4,10.4-6.9s7.7-2.3,11.7-2.3s7.9,0.8,11.7,2.3c3.9,1.5,7.4,3.9,10.4,6.9
|
||||||
|
l10.1,10.1l-12,12l12,12l-10.1,10.1c-2.9,2.9-6.4,5.2-10.2,6.8C436.9,293.8,432.9,294.6,428.8,294.6z"/>
|
||||||
|
<path class="st13" d="M428.8,290c-3.6,0-7-0.7-10.2-2s-6.2-3.3-8.7-5.8c-2.6-2.6-4.6-5.6-5.9-9c-1.2-3.2-1.9-6.6-1.9-10
|
||||||
|
s0.6-6.7,1.9-9.9c1.3-3.3,3.3-6.3,5.9-8.9s5.6-4.6,8.9-5.9s6.6-1.9,10-1.9s6.8,0.7,10,1.9c3.3,1.3,6.3,3.3,8.9,5.9l6.9,6.9l-12,12
|
||||||
|
l12,12l-6.9,6.9c-2.5,2.5-5.4,4.5-8.7,5.8C435.7,289.4,432.3,290,428.8,290z"/>
|
||||||
|
<path d="M440.7,269.4l5.9,5.9l-2.9,2.9c-2,2-4.3,3.5-6.9,4.6s-5.3,1.6-8.1,1.6c-2.8,0-5.5-0.5-8.1-1.6s-4.8-2.6-6.9-4.6
|
||||||
|
c-2.1-2.1-3.6-4.4-4.6-7s-1.5-5.2-1.5-7.9c0-2.7,0.5-5.3,1.5-7.9c1-2.6,2.5-4.9,4.6-6.9c2.1-2.1,4.4-3.6,7-4.6s5.2-1.5,7.9-1.5
|
||||||
|
c2.7,0,5.3,0.5,7.9,1.5s4.9,2.6,7,4.6l2.9,2.9L423,274.8c2.4,1.2,4.9,1.6,7.6,1.2s5-1.6,7-3.6L440.7,269.4z M419.7,254.2
|
||||||
|
c-2.5,2.5-3.8,5.5-3.8,9c0,1.9,0.4,3.8,1.3,5.5c0.8-0.8,1.9-1.9,3.4-3.4s3.2-3.2,4.9-4.9c1.7-1.7,3.4-3.4,5-4.9
|
||||||
|
c1.6-1.6,2.8-2.8,3.7-3.7c-2.4-1.2-4.9-1.6-7.6-1.2C424.1,251.1,421.7,252.2,419.7,254.2z"/>
|
||||||
|
<path class="st14" d="M473,294.4V280c0-0.5-0.1-0.7-0.2-0.9c-0.1-0.3-0.3-0.6-0.6-0.8c-0.2-0.2-0.5-0.4-0.8-0.6
|
||||||
|
c-0.2-0.1-0.4-0.2-0.9-0.2c-0.4,0-0.7,0.1-1,0.2s-0.6,0.3-0.8,0.5s-0.4,0.5-0.6,0.8c-0.1,0.2-0.2,0.4-0.2,0.9v14.4h-28.8v-79.4
|
||||||
|
h28.8v33.9c0.8-0.1,1.7-0.1,2.6-0.1c0.5,0,0.7-0.1,0.9-0.2c0.3-0.1,0.6-0.3,0.8-0.6c0.2-0.2,0.4-0.5,0.5-0.8s0.2-0.6,0.2-1v-14.3
|
||||||
|
h28.8v14.4c0,5.2-1.2,10-3.5,14.4c-0.5,0.9-1,1.7-1.5,2.5c0.5,0.8,1,1.7,1.5,2.6c2.3,4.4,3.5,9.2,3.5,14.3v14.4L473,294.4
|
||||||
|
L473,294.4z"/>
|
||||||
|
<path class="st13" d="M477.5,289.9V280c0-1-0.2-1.9-0.5-2.7c-0.4-0.9-0.9-1.6-1.5-2.3c-0.6-0.6-1.4-1.1-2.3-1.5
|
||||||
|
c-0.8-0.4-1.7-0.5-2.7-0.5s-1.9,0.2-2.8,0.5c-0.9,0.4-1.6,0.9-2.3,1.5c-0.7,0.7-1.1,1.4-1.5,2.3c-0.4,0.8-0.5,1.7-0.5,2.7v9.9
|
||||||
|
h-19.7v-70.4h19.7v34.7c2.3-0.6,4.7-1,7.1-1c1,0,1.9-0.2,2.7-0.5c0.9-0.4,1.6-0.9,2.3-1.5c0.6-0.6,1.1-1.4,1.5-2.3s0.5-1.8,0.5-2.8
|
||||||
|
v-9.8h19.7v9.8c0,4.4-1,8.5-3,12.3c-0.9,1.7-1.9,3.2-3.1,4.6c1.2,1.4,2.2,3,3.1,4.7c2,3.7,2.9,7.9,2.9,12.2v9.9L477.5,289.9
|
||||||
|
L477.5,289.9z"/>
|
||||||
|
<path d="M489.2,255.8c-1.5,2.9-3.6,5.3-6.2,7.3c2.6,1.9,4.7,4.4,6.2,7.3s2.3,6.1,2.3,9.6v4.2h-8.4V280c0-1.8-0.3-3.4-1-4.9
|
||||||
|
s-1.6-2.9-2.7-4c-1.2-1.2-2.5-2.1-4-2.7c-1.5-0.7-3.2-1-4.9-1c-1.8,0-3.4,0.3-5,1c-1.6,0.7-2.9,1.6-4.1,2.7c-1.2,1.2-2.1,2.5-2.7,4
|
||||||
|
c-0.7,1.5-1,3.2-1,4.9v4.2h-8.4V280v-54.8h8.4v38.1c1.8-1.4,3.8-2.4,6-3.2s4.4-1.1,6.8-1.1c1.8,0,3.4-0.3,4.9-1s2.9-1.6,4-2.7
|
||||||
|
c1.2-1.2,2.1-2.5,2.7-4.1c0.7-1.6,1-3.2,1-5v-4.1h8.4v4.1C491.5,249.7,490.8,252.9,489.2,255.8z"/>
|
||||||
|
</g>
|
||||||
|
<g id="Fond_texte_1_">
|
||||||
|
<path class="st13" d="M114.8,244.9v-19.7h4.4c-1.2-0.7-2.3-1.6-3.2-2.6c-1.6-1.6-2.9-3.6-3.8-5.8c-1-2.2-1.4-4.6-1.4-7.2
|
||||||
|
c0-2.5,0.5-4.9,1.4-7.2c0.9-2.2,2.2-4.1,3.9-5.8c1.6-1.6,3.6-2.9,5.8-3.9s4.6-1.4,7.2-1.4h31.1V211h-4.5c1.1,0.7,2.2,1.5,3.2,2.5
|
||||||
|
c1.7,1.6,3,3.6,4,5.8c1,2.2,1.4,4.6,1.4,7.2c0,2.5-0.5,4.9-1.4,7.2c-0.9,2.2-2.3,4.1-3.9,5.8c-1.7,1.7-3.6,3-5.8,3.9
|
||||||
|
c-2.2,1-4.6,1.4-7.2,1.4h-31.2V244.9z"/>
|
||||||
|
<path d="M154.3,197v8.4h-25.4c-1.2,0-2.2,0.4-3,1.2c-0.8,0.8-1.2,1.8-1.2,3s0.4,2.2,1.2,3.1c0.8,0.8,1.8,1.3,3,1.3h16.9
|
||||||
|
c1.8,0,3.4,0.3,4.9,1s2.9,1.5,4,2.7c1.2,1.1,2.1,2.5,2.7,4c0.7,1.5,1,3.2,1,4.9c0,1.8-0.3,3.4-1,4.9s-1.6,2.9-2.7,4
|
||||||
|
c-1.2,1.2-2.5,2.1-4,2.7c-1.5,0.7-3.2,1-4.9,1h-25.3v-8.4h25.3c1.3,0,2.3-0.4,3.1-1.2c0.8-0.8,1.2-1.8,1.2-3.1c0-1.2-0.4-2.2-1.2-3
|
||||||
|
s-1.8-1.2-3.1-1.2h-16.9c-1.8,0-3.4-0.3-4.9-1s-2.9-1.6-4-2.7c-1.1-1.2-2-2.5-2.7-4s-1-3.2-1-4.9c0-1.8,0.3-3.4,1-4.9
|
||||||
|
s1.5-2.9,2.7-4c1.1-1.1,2.5-2,4-2.7s3.2-1,4.9-1L154.3,197L154.3,197z"/>
|
||||||
|
<polygon class="st13" points="200.4,236.9 200.4,191.4 220,191.4 220,239.1 "/>
|
||||||
|
<path d="M206,231.9v-34.8h8.4v35.7"/>
|
||||||
|
<path class="st13" d="M193.4,289.9c-3.6,0-7.1-0.7-10.4-2.1c-3.2-1.4-6.1-3.3-8.5-5.8c-2.4-2.4-4.4-5.3-5.8-8.5
|
||||||
|
c-1.4-3.3-2.1-6.8-2.1-10.4c0-3.7,0.7-7.2,2.1-10.5c1.4-3.2,3.3-6,5.8-8.5c2.4-2.4,5.3-4.3,8.5-5.7c3.3-1.4,6.8-2.1,10.4-2.1h7
|
||||||
|
v-16.9h19.7V263c0,3.6-0.7,7.1-2.1,10.4c-1.4,3.2-3.3,6.1-5.7,8.5c-2.4,2.5-5.3,4.4-8.5,5.8C200.5,289.1,197,289.9,193.4,289.9z
|
||||||
|
M193.4,256.1c-1,0-1.9,0.2-2.8,0.5c-0.9,0.4-1.6,0.9-2.3,1.5c-0.7,0.7-1.1,1.4-1.5,2.3c-0.4,0.8-0.5,1.7-0.5,2.7s0.2,1.9,0.5,2.8
|
||||||
|
c0.4,0.9,0.9,1.6,1.5,2.3c0.6,0.6,1.4,1.1,2.3,1.5c0.9,0.4,1.8,0.5,2.8,0.5s1.9-0.2,2.7-0.5c0.9-0.4,1.6-0.9,2.3-1.5
|
||||||
|
c0.6-0.6,1.1-1.4,1.5-2.3s0.5-1.8,0.5-2.8v-7H193.4z"/>
|
||||||
|
<path d="M214.4,225.1V263c0,2.9-0.5,5.6-1.6,8.2s-2.6,4.8-4.5,6.8c-1.9,1.9-4.1,3.5-6.7,4.6c-2.6,1.1-5.3,1.6-8.2,1.6
|
||||||
|
s-5.6-0.5-8.2-1.6c-2.6-1.1-4.8-2.6-6.8-4.6c-1.9-1.9-3.5-4.2-4.6-6.8c-1.1-2.6-1.6-5.3-1.6-8.2c0-2.9,0.5-5.7,1.6-8.2
|
||||||
|
c1.1-2.5,2.6-4.8,4.6-6.7c1.9-1.9,4.2-3.4,6.8-4.5s5.3-1.6,8.2-1.6h12.7v-16.9 M193.4,275.8c1.8,0,3.4-0.3,4.9-1s2.9-1.6,4-2.7
|
||||||
|
c1.2-1.2,2.1-2.5,2.7-4.1c0.7-1.6,1-3.2,1-5v-12.7h-12.7c-1.8,0-3.4,0.3-5,1s-2.9,1.6-4.1,2.7c-1.2,1.2-2.1,2.5-2.7,4
|
||||||
|
c-0.7,1.5-1,3.2-1,4.9c0,1.8,0.3,3.4,1,5s1.6,2.9,2.7,4.1c1.2,1.2,2.5,2.1,4.1,2.7C189.9,275.5,191.6,275.8,193.4,275.8z"/>
|
||||||
|
<path class="st13" d="M31.4,290c-3.6,0-7.1-0.7-10.4-2.1c-3.2-1.4-6.1-3.3-8.5-5.8c-2.4-2.4-4.4-5.3-5.8-8.5
|
||||||
|
c-1.4-3.3-2.1-6.8-2.1-10.4v-43.6h19.7v16.9h7.1c3.7,0,7.2,0.7,10.5,2.1c3.2,1.4,6,3.3,8.4,5.7c2.4,2.4,4.3,5.2,5.7,8.4
|
||||||
|
c1.4,3.2,2.1,6.8,2.1,10.5c0,3.6-0.7,7.1-2.1,10.4c-1.4,3.2-3.3,6.1-5.7,8.5c-2.4,2.5-5.3,4.4-8.5,5.8
|
||||||
|
C38.6,289.3,35.1,290,31.4,290z M24.3,263.3c0,1,0.2,1.9,0.5,2.8c0.4,0.9,0.9,1.6,1.5,2.3c0.6,0.6,1.4,1.1,2.3,1.5s1.8,0.5,2.8,0.5
|
||||||
|
s1.9-0.2,2.7-0.5c0.9-0.4,1.6-0.9,2.3-1.5c0.6-0.6,1.1-1.4,1.5-2.3s0.5-1.8,0.5-2.8s-0.2-1.9-0.5-2.7c-0.4-0.9-0.9-1.6-1.5-2.3
|
||||||
|
c-0.6-0.6-1.4-1.1-2.3-1.5c-0.8-0.4-1.7-0.5-2.7-0.5h-7.1C24.3,256.3,24.3,263.3,24.3,263.3z"/>
|
||||||
|
<path d="M39.6,243.9c2.5,1.1,4.8,2.6,6.7,4.5c1.9,1.9,3.4,4.1,4.5,6.7c1.1,2.5,1.6,5.3,1.6,8.2c0,2.9-0.5,5.6-1.6,8.2
|
||||||
|
s-2.6,4.8-4.5,6.8c-1.9,1.9-4.1,3.5-6.7,4.6c-2.5,1.1-5.3,1.6-8.2,1.6c-2.9,0-5.6-0.5-8.2-1.6s-4.8-2.6-6.8-4.6
|
||||||
|
c-1.9-1.9-3.5-4.2-4.6-6.8c-1.1-2.6-1.6-5.3-1.6-8.2v-37.9h8.4v16.8h12.8C34.3,242.2,37,242.8,39.6,243.9z M31.4,276
|
||||||
|
c1.8,0,3.4-0.3,4.9-1s2.9-1.6,4-2.7c1.2-1.2,2.1-2.5,2.7-4.1c0.7-1.6,1-3.2,1-5s-0.3-3.4-1-4.9s-1.6-2.9-2.7-4
|
||||||
|
c-1.2-1.2-2.5-2.1-4-2.7c-1.5-0.7-3.2-1-4.9-1H18.6v12.7c0,1.8,0.3,3.4,1,5s1.6,2.9,2.7,4.1c1.2,1.2,2.5,2.1,4.1,2.7
|
||||||
|
C27.9,275.7,29.6,276,31.4,276z"/>
|
||||||
|
<path class="st13" d="M75.9,290c-3.6,0-7.1-0.7-10.4-2.1c-3.2-1.4-6.1-3.3-8.5-5.8c-2.4-2.4-4.3-5.3-5.7-8.5
|
||||||
|
c-1.4-3.3-2.1-6.8-2.1-10.4c0-3.7,0.7-7.2,2.1-10.5c1.4-3.2,3.3-6,5.7-8.4c2.4-2.4,5.3-4.3,8.5-5.7c3.3-1.4,6.8-2.1,10.4-2.1
|
||||||
|
c3.7,0,7.2,0.7,10.5,2.1c3.2,1.4,6,3.3,8.4,5.7c2.5,2.4,4.4,5.3,5.8,8.5c1.4,3.2,2.1,6.8,2.1,10.5c0,3.6-0.7,7.1-2.1,10.4
|
||||||
|
c-1.4,3.2-3.3,6.1-5.8,8.5c-2.4,2.4-5.3,4.4-8.5,5.7C83.2,289.3,79.6,290,75.9,290z M75.9,256.3c-1,0-1.9,0.2-2.8,0.5
|
||||||
|
c-0.9,0.4-1.6,0.9-2.3,1.5c-0.6,0.6-1.1,1.4-1.5,2.3c-0.4,0.8-0.5,1.7-0.5,2.7s0.2,1.9,0.5,2.8c0.4,0.9,0.9,1.6,1.5,2.3
|
||||||
|
c0.6,0.6,1.4,1.1,2.3,1.5c0.9,0.4,1.8,0.5,2.8,0.5s1.9-0.2,2.8-0.5c0.9-0.4,1.6-0.9,2.3-1.5c0.6-0.6,1.1-1.4,1.5-2.3
|
||||||
|
s0.5-1.8,0.5-2.8s-0.2-1.9-0.5-2.7c-0.4-0.9-0.9-1.6-1.5-2.3c-0.6-0.6-1.4-1.1-2.3-1.5S76.9,256.3,75.9,256.3z"/>
|
||||||
|
<path d="M54.9,263.3c0-2.9,0.5-5.7,1.6-8.2c1.1-2.5,2.6-4.8,4.5-6.7c1.9-1.9,4.1-3.4,6.7-4.5c2.6-1.1,5.3-1.6,8.2-1.6
|
||||||
|
s5.7,0.5,8.2,1.6s4.8,2.6,6.7,4.5s3.5,4.1,4.6,6.7c1.1,2.5,1.6,5.3,1.6,8.2c0,2.9-0.5,5.6-1.6,8.2s-2.6,4.8-4.6,6.8
|
||||||
|
c-1.9,1.9-4.2,3.5-6.7,4.6s-5.3,1.6-8.2,1.6s-5.6-0.5-8.2-1.6c-2.6-1.1-4.8-2.6-6.7-4.6c-1.9-1.9-3.4-4.2-4.5-6.8
|
||||||
|
C55.5,268.9,54.9,266.1,54.9,263.3z M63.2,263.3c0,1.8,0.3,3.4,1,5c0.7,1.6,1.6,2.9,2.7,4.1c1.2,1.2,2.5,2.1,4.1,2.7
|
||||||
|
c1.6,0.7,3.2,1,5,1s3.4-0.3,5-1c1.6-0.7,2.9-1.6,4.1-2.7c1.2-1.2,2.1-2.5,2.7-4.1c0.7-1.6,1-3.2,1-5s-0.3-3.4-1-4.9s-1.6-2.9-2.7-4
|
||||||
|
c-1.2-1.2-2.5-2.1-4.1-2.7c-1.6-0.7-3.2-1-5-1s-3.4,0.3-5,1c-1.6,0.7-2.9,1.6-4.1,2.7c-1.2,1.2-2.1,2.5-2.7,4
|
||||||
|
C63.5,259.9,63.2,261.5,63.2,263.3z"/>
|
||||||
|
<path class="st13" d="M120.9,289.9c-3.6,0-7.1-0.7-10.4-2.1c-3.2-1.4-6.1-3.3-8.5-5.8c-2.4-2.4-4.4-5.3-5.8-8.5
|
||||||
|
c-1.4-3.3-2.1-6.8-2.1-10.4c0-3.7,0.7-7.2,2.1-10.5c1.4-3.2,3.3-6,5.8-8.5c2.4-2.4,5.3-4.3,8.5-5.7c3.3-1.4,6.8-2.1,10.4-2.1
|
||||||
|
c3.7,0,7.2,0.7,10.5,2.1c3.2,1.4,6,3.3,8.4,5.7c2.4,2.4,4.3,5.2,5.7,8.4c1.4,3.2,2.1,6.8,2.1,10.5v26.8h-26.7V289.9z M120.9,256.1
|
||||||
|
c-1,0-1.9,0.2-2.8,0.5c-0.9,0.4-1.6,0.9-2.3,1.5c-0.7,0.7-1.1,1.4-1.5,2.3c-0.4,0.8-0.5,1.7-0.5,2.7s0.2,1.9,0.5,2.8
|
||||||
|
c0.4,0.9,0.9,1.6,1.5,2.3c0.6,0.6,1.4,1.1,2.3,1.5c0.9,0.4,1.8,0.5,2.8,0.5h7v-7.1c0-1-0.2-1.9-0.5-2.7c-0.4-0.9-0.9-1.6-1.5-2.3
|
||||||
|
c-0.6-0.6-1.4-1.1-2.3-1.5C122.8,256.2,121.9,256.1,120.9,256.1z"/>
|
||||||
|
<path d="M120.9,242c2.9,0,5.7,0.5,8.2,1.6s4.8,2.6,6.7,4.5s3.4,4.1,4.5,6.7c1.1,2.5,1.6,5.3,1.6,8.2v21.2h-21
|
||||||
|
c-2.9,0-5.6-0.5-8.2-1.6c-2.6-1.1-4.8-2.6-6.8-4.6c-1.9-1.9-3.5-4.2-4.6-6.8c-1.1-2.6-1.6-5.3-1.6-8.2c0-2.9,0.5-5.7,1.6-8.2
|
||||||
|
c1.1-2.5,2.6-4.8,4.6-6.7c1.9-1.9,4.2-3.4,6.8-4.5C115.3,242.6,118,242,120.9,242z M133.6,275.8V263c0-1.8-0.3-3.4-1-4.9
|
||||||
|
s-1.6-2.9-2.7-4c-1.2-1.2-2.5-2.1-4-2.7c-1.5-0.7-3.2-1-4.9-1c-1.8,0-3.4,0.3-5,1s-2.9,1.6-4.1,2.7c-1.2,1.2-2.1,2.5-2.7,4
|
||||||
|
c-0.7,1.5-1,3.2-1,4.9c0,1.8,0.3,3.4,1,5s1.6,2.9,2.7,4.1c1.2,1.2,2.5,2.1,4.1,2.7c1.6,0.7,3.2,1,5,1L133.6,275.8L133.6,275.8z"/>
|
||||||
|
<g>
|
||||||
|
<path class="st13" d="M155.4,174.5h19.7v34.7c2.3-0.6,4.7-1,7.1-1c1,0,1.9-0.2,2.7-0.5c0.9-0.4,1.6-0.9,2.3-1.5
|
||||||
|
c0.6-0.6,1.1-1.4,1.5-2.3s0.5-1.8,0.5-2.8v-9.8h19.7v9.8c0,4.4-1,8.5-3,12.3c-0.9,1.7-1.9,3.2-3.1,4.6c1.2,1.4,2.2,3,3.1,4.7
|
||||||
|
c2,3.8,2.9,7.9,2.9,12.2v9.9h-19.7v-9.9c0-1-0.2-1.9-0.5-2.7c-0.4-0.9-0.9-1.6-1.5-2.3c-0.6-0.6-1.4-1.1-2.3-1.5
|
||||||
|
c-0.8-0.4-1.7-0.5-2.7-0.5s-1.9,0.2-2.8,0.5c-0.9,0.4-1.6,0.9-2.3,1.5c-0.6,0.6-1.1,1.4-1.5,2.3c-0.4,0.8-0.5,1.7-0.5,2.7v12.4
|
||||||
|
l-19.7,1.1v-73.9H155.4z"/>
|
||||||
|
<path d="M161.1,242.5V235v-54.8h8.4v38.1c1.8-1.4,3.8-2.4,6-3.2c2.2-0.8,4.4-1.1,6.8-1.1c1.8,0,3.4-0.3,4.9-1s2.9-1.6,4-2.7
|
||||||
|
c1.2-1.2,2.1-2.5,2.7-4.1c0.7-1.6,1-3.2,1-5v-4.1h8.4v4.1c0,3.5-0.8,6.7-2.3,9.6s-3.6,5.3-6.2,7.3c2.6,1.9,4.7,4.4,6.2,7.3
|
||||||
|
s2.3,6.1,2.3,9.6v4.2h-8.4V235c0-1.8-0.3-3.4-1-4.9s-1.6-2.9-2.7-4c-1.2-1.2-2.5-2.1-4-2.7c-1.5-0.7-3.2-1-4.9-1
|
||||||
|
c-1.8,0-3.4,0.3-5,1s-2.9,1.6-4.1,2.7c-1.2,1.2-2.1,2.5-2.7,4c-0.7,1.5-1,3.2-1,4.9v7.1"/>
|
||||||
|
<path class="st13" d="M138.7,289.9v-26.8c0-3.7,0.7-7.2,2.1-10.5c1.4-3.2,3.3-6,5.8-8.5c2.4-2.4,5.3-4.3,8.5-5.7
|
||||||
|
c1.5-0.7,3.2-1.2,4.8-1.5l0.4-0.1l14.8-0.8v20h-9.6c-1,0-1.9,0.2-2.7,0.5c-0.9,0.4-1.6,0.9-2.3,1.5c-0.7,0.7-1.2,1.4-1.5,2.3
|
||||||
|
c-0.4,0.8-0.5,1.7-0.5,2.7v26.8h-19.8V289.9z"/>
|
||||||
|
<path d="M169.4,242v8.4h-3.9c-1.8,0-3.4,0.3-4.9,1s-2.9,1.6-4,2.7c-1.2,1.2-2.1,2.5-2.7,4c-0.7,1.5-1,3.2-1,4.9v21.2h-8.4v-21.1
|
||||||
|
c0-2.9,0.5-5.7,1.6-8.2c1.1-2.5,2.6-4.8,4.6-6.7c1.9-1.9,4.2-3.4,6.8-4.5c1.2-0.5,2.5-0.9,3.8-1.2"/>
|
||||||
|
</g>
|
||||||
|
<path class="st13" d="M238.4,290c-3.6,0-7-0.7-10.2-2s-6.2-3.3-8.7-5.8c-2.6-2.6-4.6-5.6-5.9-9c-1.2-3.2-1.9-6.6-1.9-10
|
||||||
|
s0.6-6.7,1.9-9.9c1.3-3.3,3.3-6.3,5.9-8.9s5.6-4.6,8.9-5.9s6.6-1.9,10-1.9s6.8,0.7,10,1.9c3.3,1.3,6.3,3.3,8.9,5.9l6.9,6.9l-12,12
|
||||||
|
l12,12l-6.9,6.9c-2.5,2.5-5.4,4.5-8.7,5.8C245.4,289.4,242,290,238.4,290z"/>
|
||||||
|
<path d="M250.3,269.4l5.9,5.9l-2.9,2.9c-2,2-4.3,3.5-6.9,4.6s-5.3,1.6-8.1,1.6c-2.8,0-5.5-0.5-8.1-1.6s-4.9-2.6-6.9-4.6
|
||||||
|
c-2.1-2.1-3.6-4.4-4.6-7s-1.5-5.2-1.5-7.9c0-2.7,0.5-5.3,1.5-7.9c1-2.6,2.5-4.9,4.6-6.9c2.1-2.1,4.4-3.6,7-4.6s5.2-1.5,7.9-1.5
|
||||||
|
c2.7,0,5.3,0.5,7.9,1.5s4.9,2.6,7,4.6l2.9,2.9l-23.4,23.4c2.4,1.2,4.9,1.6,7.6,1.2s5-1.6,7-3.6L250.3,269.4z M229.4,254.2
|
||||||
|
c-2.5,2.5-3.8,5.5-3.8,9c0,1.9,0.4,3.8,1.3,5.5c0.8-0.8,1.9-1.9,3.4-3.4s3.2-3.2,4.9-4.9c1.7-1.7,3.4-3.4,5-4.9
|
||||||
|
c1.6-1.6,2.8-2.8,3.7-3.7c-2.4-1.2-4.9-1.6-7.6-1.2C233.7,251.1,231.4,252.2,229.4,254.2z"/>
|
||||||
|
<path class="st13" d="M253.4,289.9v-26.8c0-3.7,0.7-7.2,2.1-10.5c1.4-3.2,3.3-6,5.8-8.5c2.4-2.4,5.3-4.3,8.5-5.7
|
||||||
|
c3.3-1.4,6.8-2.1,10.4-2.1h9.9V256h-9.9c-1,0-1.9,0.2-2.7,0.5c-0.9,0.4-1.6,0.9-2.3,1.5c-0.6,0.6-1.1,1.4-1.5,2.3
|
||||||
|
c-0.4,0.8-0.5,1.7-0.5,2.7v26.8h-19.8V289.9z"/>
|
||||||
|
<path d="M284.4,242v8.4h-4.2c-1.8,0-3.4,0.3-4.9,1s-2.9,1.6-4,2.7c-1.2,1.2-2.1,2.5-2.7,4c-0.7,1.5-1,3.2-1,4.9v21.2h-8.4v-21.1
|
||||||
|
c0-2.9,0.5-5.7,1.6-8.2c1.1-2.5,2.6-4.8,4.6-6.7c1.9-1.9,4.2-3.4,6.8-4.5c2.6-1.1,5.3-1.6,8.2-1.6L284.4,242L284.4,242z"/>
|
||||||
|
<path class="st13" d="M341.7,289.9c-4.3,0-8.5-1-12.2-2.9c-1.7-0.9-3.3-1.9-4.7-3.1c-1.4,1.2-3,2.2-4.6,3.1c-3.7,2-7.8,3-12.3,3
|
||||||
|
c-3.6,0-7.1-0.7-10.4-2.1c-3.2-1.4-6.1-3.3-8.5-5.8c-2.4-2.4-4.4-5.3-5.8-8.5c-1.4-3.3-2.1-6.8-2.1-10.4v-26.7h19.8v26.7
|
||||||
|
c0,1,0.2,1.9,0.5,2.8c0.4,0.9,0.9,1.6,1.5,2.3c0.6,0.6,1.4,1.1,2.3,1.5c0.8,0.4,1.7,0.5,2.7,0.5s1.9-0.2,2.8-0.5
|
||||||
|
c0.9-0.4,1.6-0.9,2.3-1.5c0.6-0.6,1.1-1.4,1.5-2.3s0.5-1.8,0.5-2.8v-26.7h19.7v26.7c0,1,0.2,1.9,0.5,2.8c0.4,0.9,0.9,1.6,1.5,2.3
|
||||||
|
c0.6,0.6,1.4,1.1,2.3,1.5c0.8,0.4,1.7,0.5,2.7,0.5s1.9-0.2,2.8-0.5c0.9-0.4,1.6-0.9,2.3-1.5c0.6-0.6,1.1-1.4,1.5-2.3
|
||||||
|
s0.5-1.8,0.5-2.8v-26.7h19.7v26.7c0,3.6-0.7,7.1-2.1,10.4c-1.4,3.2-3.3,6.1-5.8,8.5c-2.4,2.4-5.3,4.4-8.5,5.7
|
||||||
|
C349,289.2,345.4,289.9,341.7,289.9z"/>
|
||||||
|
<path d="M362.9,242.1v21c0,2.9-0.5,5.6-1.6,8.2s-2.6,4.8-4.6,6.8c-1.9,1.9-4.2,3.5-6.7,4.6s-5.3,1.6-8.2,1.6
|
||||||
|
c-3.4,0-6.6-0.8-9.6-2.3c-2.9-1.5-5.4-3.6-7.3-6.2c-1.9,2.6-4.4,4.7-7.3,6.2s-6.1,2.3-9.6,2.3c-2.9,0-5.6-0.5-8.2-1.6
|
||||||
|
s-4.8-2.6-6.8-4.6c-1.9-1.9-3.5-4.2-4.6-6.8c-1.1-2.6-1.6-5.3-1.6-8.2v-21h8.4v21c0,1.8,0.3,3.4,1,5s1.6,2.9,2.7,4.1s2.5,2.1,4,2.7
|
||||||
|
c1.5,0.7,3.2,1,4.9,1c1.8,0,3.4-0.3,5-1s2.9-1.6,4.1-2.7c1.2-1.2,2.1-2.5,2.7-4.1c0.7-1.6,1-3.2,1-5v-21h8.4v21c0,1.8,0.3,3.4,1,5
|
||||||
|
s1.6,2.9,2.7,4.1c1.2,1.2,2.5,2.1,4,2.7c1.5,0.7,3.2,1,4.9,1c1.8,0,3.4-0.3,5-1s2.9-1.6,4.1-2.7s2.1-2.5,2.7-4.1c0.7-1.6,1-3.2,1-5
|
||||||
|
v-21H362.9z"/>
|
||||||
|
<path class="st13" d="M387,290c-3.6,0-7-0.7-10.2-2s-6.2-3.3-8.7-5.8c-2.6-2.6-4.6-5.6-5.9-9c-1.2-3.2-1.9-6.6-1.9-10
|
||||||
|
s0.6-6.7,1.9-9.9c1.3-3.3,3.3-6.3,5.9-8.9s5.6-4.6,8.9-5.9s6.6-1.9,10-1.9s6.8,0.7,10,1.9c3.3,1.3,6.3,3.3,8.9,5.9l6.9,6.9l-12,12
|
||||||
|
l12,12l-6.9,6.9c-2.5,2.5-5.4,4.5-8.7,5.8C394,289.4,390.5,290,387,290z"/>
|
||||||
|
<path d="M398.9,269.4l5.9,5.9l-2.9,2.9c-2,2-4.3,3.5-6.9,4.6s-5.3,1.6-8.1,1.6s-5.5-0.5-8.1-1.6s-4.8-2.6-6.9-4.6
|
||||||
|
c-2.1-2.1-3.6-4.4-4.6-7s-1.5-5.2-1.5-7.9c0-2.7,0.5-5.3,1.5-7.9c1-2.6,2.5-4.9,4.6-6.9c2.1-2.1,4.4-3.6,7-4.6s5.2-1.5,7.9-1.5
|
||||||
|
c2.7,0,5.3,0.5,7.9,1.5s4.9,2.6,7,4.6l2.9,2.9l-23.4,23.4c2.4,1.2,4.9,1.6,7.6,1.2s5-1.6,7-3.6L398.9,269.4z M378,254.2
|
||||||
|
c-2.5,2.5-3.8,5.5-3.8,9c0,1.9,0.4,3.8,1.3,5.5c0.8-0.8,1.9-1.9,3.4-3.4s3.2-3.2,4.9-4.9c1.7-1.7,3.4-3.4,5-4.9
|
||||||
|
c1.6-1.6,2.8-2.8,3.7-3.7c-2.4-1.2-4.9-1.6-7.6-1.2C382.3,251.1,380,252.2,378,254.2z"/>
|
||||||
|
<path class="st13" d="M428.8,290c-3.6,0-7-0.7-10.2-2s-6.2-3.3-8.7-5.8c-2.6-2.6-4.6-5.6-5.9-9c-1.2-3.2-1.9-6.6-1.9-10
|
||||||
|
s0.6-6.7,1.9-9.9c1.3-3.3,3.3-6.3,5.9-8.9s5.6-4.6,8.9-5.9s6.6-1.9,10-1.9s6.8,0.7,10,1.9c3.3,1.3,6.3,3.3,8.9,5.9l6.9,6.9l-12,12
|
||||||
|
l12,12l-6.9,6.9c-2.5,2.5-5.4,4.5-8.7,5.8C435.7,289.4,432.3,290,428.8,290z"/>
|
||||||
|
<path d="M440.7,269.4l5.9,5.9l-2.9,2.9c-2,2-4.3,3.5-6.9,4.6s-5.3,1.6-8.1,1.6c-2.8,0-5.5-0.5-8.1-1.6s-4.8-2.6-6.9-4.6
|
||||||
|
c-2.1-2.1-3.6-4.4-4.6-7s-1.5-5.2-1.5-7.9c0-2.7,0.5-5.3,1.5-7.9c1-2.6,2.5-4.9,4.6-6.9c2.1-2.1,4.4-3.6,7-4.6s5.2-1.5,7.9-1.5
|
||||||
|
c2.7,0,5.3,0.5,7.9,1.5s4.9,2.6,7,4.6l2.9,2.9L423,274.8c2.4,1.2,4.9,1.6,7.6,1.2s5-1.6,7-3.6L440.7,269.4z M419.7,254.2
|
||||||
|
c-2.5,2.5-3.8,5.5-3.8,9c0,1.9,0.4,3.8,1.3,5.5c0.8-0.8,1.9-1.9,3.4-3.4s3.2-3.2,4.9-4.9c1.7-1.7,3.4-3.4,5-4.9
|
||||||
|
c1.6-1.6,2.8-2.8,3.7-3.7c-2.4-1.2-4.9-1.6-7.6-1.2C424.1,251.1,421.7,252.2,419.7,254.2z"/>
|
||||||
|
<path class="st13" d="M477.5,289.9V280c0-1-0.2-1.9-0.5-2.7c-0.4-0.9-0.9-1.6-1.5-2.3c-0.6-0.6-1.4-1.1-2.3-1.5
|
||||||
|
c-0.8-0.4-1.7-0.5-2.7-0.5s-1.9,0.2-2.8,0.5c-0.9,0.4-1.6,0.9-2.3,1.5c-0.7,0.7-1.1,1.4-1.5,2.3c-0.4,0.8-0.5,1.7-0.5,2.7v9.9
|
||||||
|
h-19.7v-70.4h19.7v34.7c2.3-0.6,4.7-1,7.1-1c1,0,1.9-0.2,2.7-0.5c0.9-0.4,1.6-0.9,2.3-1.5c0.6-0.6,1.1-1.4,1.5-2.3s0.5-1.8,0.5-2.8
|
||||||
|
v-9.8h19.7v9.8c0,4.4-1,8.5-3,12.3c-0.9,1.7-1.9,3.2-3.1,4.6c1.2,1.4,2.2,3,3.1,4.7c2,3.7,2.9,7.9,2.9,12.2v9.9L477.5,289.9
|
||||||
|
L477.5,289.9z"/>
|
||||||
|
<path d="M489.2,255.8c-1.5,2.9-3.6,5.3-6.2,7.3c2.6,1.9,4.7,4.4,6.2,7.3s2.3,6.1,2.3,9.6v4.2h-8.4V280c0-1.8-0.3-3.4-1-4.9
|
||||||
|
s-1.6-2.9-2.7-4c-1.2-1.2-2.5-2.1-4-2.7c-1.5-0.7-3.2-1-4.9-1c-1.8,0-3.4,0.3-5,1c-1.6,0.7-2.9,1.6-4.1,2.7c-1.2,1.2-2.1,2.5-2.7,4
|
||||||
|
c-0.7,1.5-1,3.2-1,4.9v4.2h-8.4V280v-54.8h8.4v38.1c1.8-1.4,3.8-2.4,6-3.2s4.4-1.1,6.8-1.1c1.8,0,3.4-0.3,4.9-1s2.9-1.6,4-2.7
|
||||||
|
c1.2-1.2,2.1-2.5,2.7-4.1c0.7-1.6,1-3.2,1-5v-4.1h8.4v4.1C491.5,249.7,490.8,252.9,489.2,255.8z"/>
|
||||||
|
</g>
|
||||||
|
<g id="Texte">
|
||||||
|
<path d="M154.3,197v8.4h-25.4c-1.2,0-2.2,0.4-3,1.2c-0.8,0.8-1.2,1.8-1.2,3s0.4,2.2,1.2,3.1c0.8,0.8,1.8,1.3,3,1.3h16.9
|
||||||
|
c1.8,0,3.4,0.3,4.9,1s2.9,1.5,4,2.7c1.2,1.1,2.1,2.5,2.7,4c0.7,1.5,1,3.2,1,4.9c0,1.8-0.3,3.4-1,4.9s-1.6,2.9-2.7,4
|
||||||
|
c-1.2,1.2-2.5,2.1-4,2.7c-1.5,0.7-3.2,1-4.9,1h-25.3v-8.4h25.3c1.3,0,2.3-0.4,3.1-1.2c0.8-0.8,1.2-1.8,1.2-3.1c0-1.2-0.4-2.2-1.2-3
|
||||||
|
s-1.8-1.2-3.1-1.2h-16.9c-1.8,0-3.4-0.3-4.9-1s-2.9-1.6-4-2.7c-1.1-1.2-2-2.5-2.7-4s-1-3.2-1-4.9c0-1.8,0.3-3.4,1-4.9
|
||||||
|
s1.5-2.9,2.7-4c1.1-1.1,2.5-2,4-2.7s3.2-1,4.9-1L154.3,197L154.3,197z"/>
|
||||||
|
<path d="M206,231.9v-34.8h8.4v35.7"/>
|
||||||
|
<path d="M214.4,225.1V263c0,2.9-0.5,5.6-1.6,8.2s-2.6,4.8-4.5,6.8c-1.9,1.9-4.1,3.5-6.7,4.6c-2.6,1.1-5.3,1.6-8.2,1.6
|
||||||
|
s-5.6-0.5-8.2-1.6c-2.6-1.1-4.8-2.6-6.8-4.6c-1.9-1.9-3.5-4.2-4.6-6.8c-1.1-2.6-1.6-5.3-1.6-8.2c0-2.9,0.5-5.7,1.6-8.2
|
||||||
|
c1.1-2.5,2.6-4.8,4.6-6.7c1.9-1.9,4.2-3.4,6.8-4.5s5.3-1.6,8.2-1.6h12.7v-16.9 M193.4,275.8c1.8,0,3.4-0.3,4.9-1s2.9-1.6,4-2.7
|
||||||
|
c1.2-1.2,2.1-2.5,2.7-4.1c0.7-1.6,1-3.2,1-5v-12.7h-12.7c-1.8,0-3.4,0.3-5,1s-2.9,1.6-4.1,2.7c-1.2,1.2-2.1,2.5-2.7,4
|
||||||
|
c-0.7,1.5-1,3.2-1,4.9c0,1.8,0.3,3.4,1,5s1.6,2.9,2.7,4.1c1.2,1.2,2.5,2.1,4.1,2.7C189.9,275.5,191.6,275.8,193.4,275.8z"/>
|
||||||
|
<path d="M39.6,243.9c2.5,1.1,4.8,2.6,6.7,4.5c1.9,1.9,3.4,4.1,4.5,6.7c1.1,2.5,1.6,5.3,1.6,8.2c0,2.9-0.5,5.6-1.6,8.2
|
||||||
|
s-2.6,4.8-4.5,6.8c-1.9,1.9-4.1,3.5-6.7,4.6c-2.5,1.1-5.3,1.6-8.2,1.6c-2.9,0-5.6-0.5-8.2-1.6s-4.8-2.6-6.8-4.6
|
||||||
|
c-1.9-1.9-3.5-4.2-4.6-6.8c-1.1-2.6-1.6-5.3-1.6-8.2v-37.9h8.4v16.8h12.8C34.3,242.2,37,242.8,39.6,243.9z M31.4,276
|
||||||
|
c1.8,0,3.4-0.3,4.9-1s2.9-1.6,4-2.7c1.2-1.2,2.1-2.5,2.7-4.1c0.7-1.6,1-3.2,1-5s-0.3-3.4-1-4.9s-1.6-2.9-2.7-4
|
||||||
|
c-1.2-1.2-2.5-2.1-4-2.7c-1.5-0.7-3.2-1-4.9-1H18.6v12.7c0,1.8,0.3,3.4,1,5s1.6,2.9,2.7,4.1c1.2,1.2,2.5,2.1,4.1,2.7
|
||||||
|
C27.9,275.7,29.6,276,31.4,276z"/>
|
||||||
|
<path d="M54.9,263.3c0-2.9,0.5-5.7,1.6-8.2c1.1-2.5,2.6-4.8,4.5-6.7c1.9-1.9,4.1-3.4,6.7-4.5c2.6-1.1,5.3-1.6,8.2-1.6
|
||||||
|
s5.7,0.5,8.2,1.6s4.8,2.6,6.7,4.5s3.5,4.1,4.6,6.7c1.1,2.5,1.6,5.3,1.6,8.2c0,2.9-0.5,5.6-1.6,8.2s-2.6,4.8-4.6,6.8
|
||||||
|
c-1.9,1.9-4.2,3.5-6.7,4.6s-5.3,1.6-8.2,1.6s-5.6-0.5-8.2-1.6c-2.6-1.1-4.8-2.6-6.7-4.6c-1.9-1.9-3.4-4.2-4.5-6.8
|
||||||
|
C55.5,268.9,54.9,266.1,54.9,263.3z M63.2,263.3c0,1.8,0.3,3.4,1,5c0.7,1.6,1.6,2.9,2.7,4.1c1.2,1.2,2.5,2.1,4.1,2.7
|
||||||
|
c1.6,0.7,3.2,1,5,1s3.4-0.3,5-1c1.6-0.7,2.9-1.6,4.1-2.7c1.2-1.2,2.1-2.5,2.7-4.1c0.7-1.6,1-3.2,1-5s-0.3-3.4-1-4.9s-1.6-2.9-2.7-4
|
||||||
|
c-1.2-1.2-2.5-2.1-4.1-2.7c-1.6-0.7-3.2-1-5-1s-3.4,0.3-5,1c-1.6,0.7-2.9,1.6-4.1,2.7c-1.2,1.2-2.1,2.5-2.7,4
|
||||||
|
C63.5,259.9,63.2,261.5,63.2,263.3z"/>
|
||||||
|
<path d="M120.9,242c2.9,0,5.7,0.5,8.2,1.6s4.8,2.6,6.7,4.5s3.4,4.1,4.5,6.7c1.1,2.5,1.6,5.3,1.6,8.2v21.2h-21
|
||||||
|
c-2.9,0-5.6-0.5-8.2-1.6c-2.6-1.1-4.8-2.6-6.8-4.6c-1.9-1.9-3.5-4.2-4.6-6.8c-1.1-2.6-1.6-5.3-1.6-8.2c0-2.9,0.5-5.7,1.6-8.2
|
||||||
|
c1.1-2.5,2.6-4.8,4.6-6.7c1.9-1.9,4.2-3.4,6.8-4.5C115.3,242.6,118,242,120.9,242z M133.6,275.8V263c0-1.8-0.3-3.4-1-4.9
|
||||||
|
s-1.6-2.9-2.7-4c-1.2-1.2-2.5-2.1-4-2.7c-1.5-0.7-3.2-1-4.9-1c-1.8,0-3.4,0.3-5,1s-2.9,1.6-4.1,2.7c-1.2,1.2-2.1,2.5-2.7,4
|
||||||
|
c-0.7,1.5-1,3.2-1,4.9c0,1.8,0.3,3.4,1,5s1.6,2.9,2.7,4.1c1.2,1.2,2.5,2.1,4.1,2.7c1.6,0.7,3.2,1,5,1L133.6,275.8L133.6,275.8z"/>
|
||||||
|
<g>
|
||||||
|
<path d="M161.1,242.5V235v-54.8h8.4v38.1c1.8-1.4,3.8-2.4,6-3.2c2.2-0.8,4.4-1.1,6.8-1.1c1.8,0,3.4-0.3,4.9-1s2.9-1.6,4-2.7
|
||||||
|
c1.2-1.2,2.1-2.5,2.7-4.1c0.7-1.6,1-3.2,1-5v-4.1h8.4v4.1c0,3.5-0.8,6.7-2.3,9.6s-3.6,5.3-6.2,7.3c2.6,1.9,4.7,4.4,6.2,7.3
|
||||||
|
s2.3,6.1,2.3,9.6v4.2h-8.4V235c0-1.8-0.3-3.4-1-4.9s-1.6-2.9-2.7-4c-1.2-1.2-2.5-2.1-4-2.7c-1.5-0.7-3.2-1-4.9-1
|
||||||
|
c-1.8,0-3.4,0.3-5,1s-2.9,1.6-4.1,2.7c-1.2,1.2-2.1,2.5-2.7,4c-0.7,1.5-1,3.2-1,4.9v7.1"/>
|
||||||
|
<path d="M169.4,242v8.4h-3.9c-1.8,0-3.4,0.3-4.9,1s-2.9,1.6-4,2.7c-1.2,1.2-2.1,2.5-2.7,4c-0.7,1.5-1,3.2-1,4.9v21.2h-8.4v-21.1
|
||||||
|
c0-2.9,0.5-5.7,1.6-8.2c1.1-2.5,2.6-4.8,4.6-6.7c1.9-1.9,4.2-3.4,6.8-4.5c1.2-0.5,2.5-0.9,3.8-1.2"/>
|
||||||
|
</g>
|
||||||
|
<path d="M250.3,269.4l5.9,5.9l-2.9,2.9c-2,2-4.3,3.5-6.9,4.6s-5.3,1.6-8.1,1.6c-2.8,0-5.5-0.5-8.1-1.6s-4.9-2.6-6.9-4.6
|
||||||
|
c-2.1-2.1-3.6-4.4-4.6-7s-1.5-5.2-1.5-7.9c0-2.7,0.5-5.3,1.5-7.9c1-2.6,2.5-4.9,4.6-6.9c2.1-2.1,4.4-3.6,7-4.6s5.2-1.5,7.9-1.5
|
||||||
|
c2.7,0,5.3,0.5,7.9,1.5s4.9,2.6,7,4.6l2.9,2.9l-23.4,23.4c2.4,1.2,4.9,1.6,7.6,1.2s5-1.6,7-3.6L250.3,269.4z M229.4,254.2
|
||||||
|
c-2.5,2.5-3.8,5.5-3.8,9c0,1.9,0.4,3.8,1.3,5.5c0.8-0.8,1.9-1.9,3.4-3.4s3.2-3.2,4.9-4.9c1.7-1.7,3.4-3.4,5-4.9
|
||||||
|
c1.6-1.6,2.8-2.8,3.7-3.7c-2.4-1.2-4.9-1.6-7.6-1.2C233.7,251.1,231.4,252.2,229.4,254.2z"/>
|
||||||
|
<path d="M284.4,242v8.4h-4.2c-1.8,0-3.4,0.3-4.9,1s-2.9,1.6-4,2.7c-1.2,1.2-2.1,2.5-2.7,4c-0.7,1.5-1,3.2-1,4.9v21.2h-8.4v-21.1
|
||||||
|
c0-2.9,0.5-5.7,1.6-8.2c1.1-2.5,2.6-4.8,4.6-6.7c1.9-1.9,4.2-3.4,6.8-4.5c2.6-1.1,5.3-1.6,8.2-1.6L284.4,242L284.4,242z"/>
|
||||||
|
<path d="M362.9,242.1v21c0,2.9-0.5,5.6-1.6,8.2s-2.6,4.8-4.6,6.8c-1.9,1.9-4.2,3.5-6.7,4.6s-5.3,1.6-8.2,1.6
|
||||||
|
c-3.4,0-6.6-0.8-9.6-2.3c-2.9-1.5-5.4-3.6-7.3-6.2c-1.9,2.6-4.4,4.7-7.3,6.2s-6.1,2.3-9.6,2.3c-2.9,0-5.6-0.5-8.2-1.6
|
||||||
|
s-4.8-2.6-6.8-4.6c-1.9-1.9-3.5-4.2-4.6-6.8c-1.1-2.6-1.6-5.3-1.6-8.2v-21h8.4v21c0,1.8,0.3,3.4,1,5s1.6,2.9,2.7,4.1s2.5,2.1,4,2.7
|
||||||
|
c1.5,0.7,3.2,1,4.9,1c1.8,0,3.4-0.3,5-1s2.9-1.6,4.1-2.7c1.2-1.2,2.1-2.5,2.7-4.1c0.7-1.6,1-3.2,1-5v-21h8.4v21c0,1.8,0.3,3.4,1,5
|
||||||
|
s1.6,2.9,2.7,4.1c1.2,1.2,2.5,2.1,4,2.7c1.5,0.7,3.2,1,4.9,1c1.8,0,3.4-0.3,5-1s2.9-1.6,4.1-2.7s2.1-2.5,2.7-4.1c0.7-1.6,1-3.2,1-5
|
||||||
|
v-21H362.9z"/>
|
||||||
|
<path d="M398.9,269.4l5.9,5.9l-2.9,2.9c-2,2-4.3,3.5-6.9,4.6s-5.3,1.6-8.1,1.6s-5.5-0.5-8.1-1.6s-4.8-2.6-6.9-4.6
|
||||||
|
c-2.1-2.1-3.6-4.4-4.6-7s-1.5-5.2-1.5-7.9c0-2.7,0.5-5.3,1.5-7.9c1-2.6,2.5-4.9,4.6-6.9c2.1-2.1,4.4-3.6,7-4.6s5.2-1.5,7.9-1.5
|
||||||
|
c2.7,0,5.3,0.5,7.9,1.5s4.9,2.6,7,4.6l2.9,2.9l-23.4,23.4c2.4,1.2,4.9,1.6,7.6,1.2s5-1.6,7-3.6L398.9,269.4z M378,254.2
|
||||||
|
c-2.5,2.5-3.8,5.5-3.8,9c0,1.9,0.4,3.8,1.3,5.5c0.8-0.8,1.9-1.9,3.4-3.4s3.2-3.2,4.9-4.9c1.7-1.7,3.4-3.4,5-4.9
|
||||||
|
c1.6-1.6,2.8-2.8,3.7-3.7c-2.4-1.2-4.9-1.6-7.6-1.2C382.3,251.1,380,252.2,378,254.2z"/>
|
||||||
|
<path d="M440.7,269.4l5.9,5.9l-2.9,2.9c-2,2-4.3,3.5-6.9,4.6s-5.3,1.6-8.1,1.6c-2.8,0-5.5-0.5-8.1-1.6s-4.8-2.6-6.9-4.6
|
||||||
|
c-2.1-2.1-3.6-4.4-4.6-7s-1.5-5.2-1.5-7.9c0-2.7,0.5-5.3,1.5-7.9c1-2.6,2.5-4.9,4.6-6.9c2.1-2.1,4.4-3.6,7-4.6s5.2-1.5,7.9-1.5
|
||||||
|
c2.7,0,5.3,0.5,7.9,1.5s4.9,2.6,7,4.6l2.9,2.9L423,274.8c2.4,1.2,4.9,1.6,7.6,1.2s5-1.6,7-3.6L440.7,269.4z M419.7,254.2
|
||||||
|
c-2.5,2.5-3.8,5.5-3.8,9c0,1.9,0.4,3.8,1.3,5.5c0.8-0.8,1.9-1.9,3.4-3.4s3.2-3.2,4.9-4.9c1.7-1.7,3.4-3.4,5-4.9
|
||||||
|
c1.6-1.6,2.8-2.8,3.7-3.7c-2.4-1.2-4.9-1.6-7.6-1.2C424.1,251.1,421.7,252.2,419.7,254.2z"/>
|
||||||
|
<path d="M489.2,255.8c-1.5,2.9-3.6,5.3-6.2,7.3c2.6,1.9,4.7,4.4,6.2,7.3s2.3,6.1,2.3,9.6v4.2h-8.4V280c0-1.8-0.3-3.4-1-4.9
|
||||||
|
s-1.6-2.9-2.7-4c-1.2-1.2-2.5-2.1-4-2.7c-1.5-0.7-3.2-1-4.9-1c-1.8,0-3.4,0.3-5,1c-1.6,0.7-2.9,1.6-4.1,2.7c-1.2,1.2-2.1,2.5-2.7,4
|
||||||
|
c-0.7,1.5-1,3.2-1,4.9v4.2h-8.4V280v-54.8h8.4v38.1c1.8-1.4,3.8-2.4,6-3.2s4.4-1.1,6.8-1.1c1.8,0,3.4-0.3,4.9-1s2.9-1.6,4-2.7
|
||||||
|
c1.2-1.2,2.1-2.5,2.7-4.1c0.7-1.6,1-3.2,1-5v-4.1h8.4v4.1C491.5,249.7,490.8,252.9,489.2,255.8z"/>
|
||||||
|
</g>
|
||||||
|
<g id="Ebene_7">
|
||||||
|
<g>
|
||||||
|
<g>
|
||||||
|
<path class="st15" d="M497.8,327.5c-1.5,0-2.8-0.2-3.7-1.4l1-0.9l0.5-0.5c0,0,0.3-0.2,0.5,0s0.4,0.3,0.6,0.4
|
||||||
|
c0.5,0.2,1.1,0.3,1.6,0.3c0.8,0,1.7-0.3,1.9-1c0.1-0.5-0.1-0.8-0.8-0.9l-1.5-0.1c-1.7-0.2-2.6-0.9-2.2-2.7c0.4-2,2.1-2.9,4-3
|
||||||
|
c1.3,0,2.7,0.5,3,1.2c0.5,0.9-1.3,1.5-1.3,1.5c-0.1-0.1-0.2-0.3-0.3-0.4c-0.4-0.3-0.9-0.4-1.5-0.4c-0.9,0-1.4,0.4-1.5,0.9
|
||||||
|
c-0.1,0.4,0,0.8,0.8,0.8l1.5,0.1c1.8,0.2,2.6,1.2,2.2,2.8C502,326.5,500,327.5,497.8,327.5"/>
|
||||||
|
<path class="st15" d="M426.3,318.3c-1.3,2.4-5.5,9.3-5.5,9.3h-1.9l-0.8-13.2c0,0,2.7,1.3,2.7,4.1l0.2,4.5l4.9-8.6
|
||||||
|
C426,314.4,427.6,315.9,426.3,318.3"/>
|
||||||
|
<path class="st15" d="M431,323.5h-1.9c-0.9,0-1.4,0.4-1.6,1.1s0.1,1.1,1.1,1.1c0.7,0,1.1-0.1,1.6-0.5c0.3-0.2,0.5-0.6,0.7-1.2
|
||||||
|
L431,323.5 M431.6,327.6c-1,0-1.4-0.8-1.4-0.8c-0.8,0.6-1.5,0.9-2.6,0.9s-1.8-0.3-2.2-0.9c-0.4-0.5-0.4-1.3-0.2-2.2
|
||||||
|
c0.4-1.5,1.8-2.8,4-2.8h2.2l0.1-0.5c0.3-1.1-0.1-1.5-1.4-1.5c-0.9,0-1.3,0.2-2,0c-0.6-0.2-1.1-0.7-1.1-0.7c1.2-1,2.2-1.3,3.8-1.3
|
||||||
|
c2.6,0,3.7,1.1,3.1,3.4l-1.7,6.4H431.6z"/>
|
||||||
|
<path class="st15" d="M449.8,316.7h-1.1l-1.7,6.4c-0.9,3.7-3.7,4.5-3.7,4.5l2.9-10.9h-3.4c0,0,0.3-2.3,2.7-2.3h7.1
|
||||||
|
C452.7,314.4,451.8,316.7,449.8,316.7"/>
|
||||||
|
<path class="st15" d="M455.3,327.6l1.6-5.9c0.3-1.3-0.3-1.7-1.1-1.7c-0.7,0-1.6,0.4-2,1.7l-0.7,2.7c-0.8,2.8-3.2,3.2-3.2,3.2
|
||||||
|
l3.5-13.2h2.3l-1.2,4.4c0.8-0.7,1.7-1,2.5-1c2.1,0,2.8,1.5,2.2,3.5l-0.6,2.1l-1.1,4.2L455.3,327.6"/>
|
||||||
|
<path class="st15" d="M437.6,324.3c-0.8,2.8-3.2,3.2-3.2,3.2l3.5-13.2h2.3L437.6,324.3"/>
|
||||||
|
<path class="st15" d="M465.9,320.3c-0.2-0.3-0.5-0.4-1-0.4s-0.9,0.1-1.2,0.4c-0.6,0.5-0.9,1.3-1.2,2.3c-0.3,1-0.4,1.9-0.1,2.4
|
||||||
|
c0.2,0.3,0.5,0.4,1,0.4s0.9-0.1,1.2-0.4c0.6-0.5,0.9-1.4,1.2-2.4S466.3,320.8,465.9,320.3 M466.2,326.4c-0.7,0.6-1.9,1.2-3.2,1.2
|
||||||
|
c-1.4,0-2.2-0.6-2.6-1.2c-0.6-0.9-0.5-2-0.1-3.8c0.5-1.7,1-2.8,2.1-3.7c0.7-0.6,1.8-1.2,3.2-1.2s2.2,0.6,2.6,1.2
|
||||||
|
c0.6,0.9,0.5,2,0.1,3.7C467.7,324.4,467.2,325.4,466.2,326.4"/>
|
||||||
|
<path class="st15" d="M475.6,320.4c-0.3-0.4-0.5-0.6-1.1-0.6c-0.7,0-1.7,0.6-2,1.8l-0.6,2.3c-0.8,3.2-3.3,3.5-3.3,3.5l2.6-9.7
|
||||||
|
h2.3l-0.2,0.9c0.6-0.6,1.6-1,2.6-1c0.9,0,1.5,0.2,2,0.9L475.6,320.4"/>
|
||||||
|
<path class="st15" d="M482.8,320.7c-0.1-0.6-0.5-1-1.3-1s-1.4,0.4-1.8,1c-0.2,0.4-0.4,0.6-0.5,1h3.6
|
||||||
|
C482.8,321.3,482.8,321,482.8,320.7 M483,323.3h-4.3c-0.3,1.2,0.2,2.2,1.5,2.2c1,0,1.6-0.3,2.4-0.9l1,1.4c-1.2,1-2.3,1.5-4,1.5
|
||||||
|
c-2.2,0-4.1-1-3-4.9c0.8-3.2,3-4.9,5.4-4.9c2.6,0,3.6,2,2.9,4.6C484.9,322.3,484.6,323.3,483,323.3"/>
|
||||||
|
<path class="st15" d="M491.3,324.2l0.7-2.6c0.3-1.3-0.3-1.8-1.1-1.8c-0.7,0-1.7,0.4-2,1.8l-1.2,4.3l-0.4,1.5H485l2.6-9.7h2.3
|
||||||
|
l-0.2,0.9c0.8-0.7,1.8-1,2.6-1c0.9,0,1.6,0.3,2,0.9c0.6,0.8,0.5,1.7,0.2,2.7l-1.6,6.2C492.8,327.4,490.3,327.5,491.3,324.2"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<path class="st16" d="M392.4,304.3c-7.4,0-13.7,4.8-15.9,11.5c-2.2-6.7-8.4-11.5-15.8-11.5c-9.2,0-16.7,7.5-16.7,16.7
|
||||||
|
s7.5,16.7,16.7,16.7c7.4,0,13.7-4.8,15.8-11.5c2.2,6.7,8.5,11.5,15.9,11.5c9.2,0,16.7-7.5,16.7-16.7S401.6,304.3,392.4,304.3z
|
||||||
|
M392.4,336c-8.3,0-15.1-6.7-15.1-15s6.7-15,15.1-15c8.3,0,15.1,6.7,15.1,15C407.5,329.3,400.7,336,392.4,336z"/>
|
||||||
|
<g>
|
||||||
|
<rect x="353.5" y="319.6" class="st13" width="14.4" height="0.7"/>
|
||||||
|
<rect x="357.1" y="327.5" class="st13" width="8.3" height="0.7"/>
|
||||||
|
<path class="st13" d="M349,325v-3.3h1.8v3.4c0,1.2-0.8,1.8-2.2,1.8c-1.4,0-2.2-0.6-2.2-1.8v-3.4h1.8v3.3c0,0.3,0.1,0.4,0.4,0.4
|
||||||
|
C348.9,325.4,349,325.3,349,325"/>
|
||||||
|
<polygon class="st13" points="354.7,326.8 353.7,324.8 353.6,324.8 353.6,326.8 352.1,326.8 352.1,321.7 353.8,321.7
|
||||||
|
354.8,323.8 354.8,323.8 354.8,321.7 356.4,321.7 356.4,326.8 "/>
|
||||||
|
<rect x="358" y="321.7" class="st13" width="1.7" height="5.1"/>
|
||||||
|
<polygon class="st13" points="363.7,323.1 363.7,326.8 362,326.8 362,323.1 360.8,323.1 360.9,321.7 364.9,321.7 364.8,323.1
|
||||||
|
"/>
|
||||||
|
<polygon class="st13" points="366,326.8 366,321.7 369.4,321.7 369.3,323 367.8,323 367.8,323.7 369.1,323.7 369.1,324.8
|
||||||
|
367.8,324.8 367.8,325.6 369.4,325.6 369.3,326.8 "/>
|
||||||
|
<path class="st13" d="M372.6,323h-0.2v2.5h0.2c0.6,0,0.7-0.5,0.7-1.2C373.3,323.4,373.2,323,372.6,323 M372.6,326.8h-2v-5.1h2
|
||||||
|
c1.8,0,2.4,1,2.4,2.5C375.1,325.6,374.5,326.8,372.6,326.8"/>
|
||||||
|
<polygon class="st13" points="353.5,318.9 353.5,313.7 355.2,313.7 355.2,317.5 356.7,317.5 356.5,318.9 "/>
|
||||||
|
<rect x="357.1" y="313.7" class="st13" width="1.7" height="5.1"/>
|
||||||
|
<polygon class="st13" points="363.1,318.9 360.5,318.9 359.5,313.7 361.4,313.7 361.8,316.9 361.9,316.9 362.2,313.7 364,313.7
|
||||||
|
"/>
|
||||||
|
<polygon class="st13" points="364.6,318.9 364.6,313.7 368,313.7 367.9,315.1 366.4,315.1 366.4,315.7 367.7,315.7 367.7,316.9
|
||||||
|
366.4,316.9 366.4,317.6 368,317.6 367.9,318.9 "/>
|
||||||
|
</g>
|
||||||
|
<path class="st16" d="M393.4,331.8h-1.1c0,0-2.5,0.1-3.8-3.4l-5.5-15.7c0,0,4.7,2,5.9,6L393.4,331.8"/>
|
||||||
|
<path class="st16" d="M400.5,315.2h-1.1l-1.8,6.8c-1,3.9-3.9,4.7-3.9,4.7l3-11.5h-3.5c0,0,0.3-2.4,2.9-2.4h7.5
|
||||||
|
C403.5,312.8,402.6,315.2,400.5,315.2"/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g id="masque">
|
||||||
|
<polygon class="st13" points="179.6,226.6 175.1,228.7 172.2,232 172.2,240.4 172.2,244.9 174,245.8 186.7,240.7 191.1,236.5
|
||||||
|
190.4,231.3 186.4,226.6 "/>
|
||||||
|
<polygon class="st13" points="140,242 139.3,245.8 141.9,249.4 143.7,251.6 147,246.8 148.2,242.7 143.2,242.2 "/>
|
||||||
|
<polygon class="st13" points="251.2,260.2 251.2,264.8 253.4,267.3 255.7,264.8 255.7,261 253.6,259.5 "/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 60 KiB |
@@ -0,0 +1,58 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
|
<svg width="100%" height="100%" viewBox="0 0 250 35" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-miterlimit:10;">
|
||||||
|
<g id="Ebene-1" serif:id="Ebene 1">
|
||||||
|
<g>
|
||||||
|
<path d="M7.532,12.709L7.532,13.161L5.771,13.161L5.771,12.614C5.771,11.115 5.2,10.234 3.867,10.234C2.535,10.234 1.964,11.115 1.964,12.59C1.964,16.326 7.555,16.683 7.555,21.37C7.555,23.893 6.342,25.534 3.796,25.534C1.25,25.534 0.06,23.893 0.06,21.37L0.06,20.418L1.797,20.418L1.797,21.465C1.797,22.964 2.416,23.845 3.748,23.845C5.081,23.845 5.699,22.964 5.699,21.465C5.699,17.753 0.131,17.396 0.131,12.709C0.131,10.139 1.321,8.545 3.819,8.545C6.342,8.545 7.532,10.187 7.532,12.709" style="fill:rgb(90,150,200);fill-rule:nonzero;"/>
|
||||||
|
<path d="M16.288,16.088L16.288,17.753L12.219,17.753L12.219,23.678L17.216,23.678L17.216,25.368L10.363,25.368L10.363,8.711L17.216,8.711L17.216,10.401L12.219,10.401L12.219,16.088L16.288,16.088Z" style="fill:rgb(90,150,200);fill-rule:nonzero;"/>
|
||||||
|
<path d="M26.258,25.344L24.473,25.344L21.713,12.09L21.713,25.368L20.095,25.368L20.095,8.711L22.689,8.711L25.425,22.013L28.066,8.711L30.66,8.711L30.66,25.368L28.899,25.368L28.899,11.971L26.258,25.344Z" style="fill:rgb(90,150,200);fill-rule:nonzero;"/>
|
||||||
|
<path d="M39.678,16.088L39.678,17.753L35.609,17.753L35.609,23.678L40.606,23.678L40.606,25.368L33.753,25.368L33.753,8.711L40.606,8.711L40.606,10.401L35.609,10.401L35.609,16.088L39.678,16.088Z" style="fill:rgb(90,150,200);fill-rule:nonzero;"/>
|
||||||
|
<path d="M50.719,12.709L50.719,13.161L48.958,13.161L48.958,12.614C48.958,11.115 48.387,10.234 47.054,10.234C45.722,10.234 45.151,11.115 45.151,12.59C45.151,16.326 50.742,16.683 50.742,21.37C50.742,23.893 49.529,25.534 46.983,25.534C44.437,25.534 43.247,23.893 43.247,21.37L43.247,20.418L44.984,20.418L44.984,21.465C44.984,22.964 45.603,23.845 46.935,23.845C48.268,23.845 48.886,22.964 48.886,21.465C48.886,17.753 43.318,17.396 43.318,12.709C43.318,10.139 44.508,8.545 47.007,8.545C49.529,8.545 50.719,10.187 50.719,12.709" style="fill:rgb(90,150,200);fill-rule:nonzero;"/>
|
||||||
|
<path d="M55.977,25.368L55.977,10.401L52.908,10.401L52.908,8.711L60.903,8.711L60.903,10.401L57.833,10.401L57.833,25.368L55.977,25.368Z" style="fill:rgb(90,150,200);fill-rule:nonzero;"/>
|
||||||
|
<path d="M69.302,16.088L69.302,17.753L65.233,17.753L65.233,23.678L70.23,23.678L70.23,25.368L63.377,25.368L63.377,8.711L70.23,8.711L70.23,10.401L65.233,10.401L65.233,16.088L69.302,16.088Z" style="fill:rgb(90,150,200);fill-rule:nonzero;"/>
|
||||||
|
<path d="M76.369,16.564C77.844,16.564 78.725,16.088 78.725,14.279L78.725,12.685C78.725,11.186 78.177,10.401 76.797,10.401L74.989,10.401L74.989,16.564L76.369,16.564ZM76.845,8.711C79.462,8.711 80.557,10.044 80.557,12.519L80.557,13.875C80.557,15.707 79.915,16.849 78.487,17.301C80.01,17.753 80.581,18.991 80.581,20.775L80.581,23.369C80.581,24.107 80.604,24.797 80.914,25.368L79.034,25.368C78.82,24.892 78.725,24.464 78.725,23.345L78.725,20.728C78.725,18.848 77.844,18.253 76.298,18.253L74.989,18.253L74.989,25.368L73.133,25.368L73.133,8.711L76.845,8.711Z" style="fill:rgb(90,150,200);fill-rule:nonzero;"/>
|
||||||
|
<path d="M89.623,16.088L89.623,17.753L85.554,17.753L85.554,23.678L90.551,23.678L90.551,25.368L83.698,25.368L83.698,8.711L90.551,8.711L90.551,10.401L85.554,10.401L85.554,16.088L89.623,16.088Z" style="fill:rgb(90,150,200);fill-rule:nonzero;"/>
|
||||||
|
<path d="M95.095,25.368L93.43,25.368L93.43,8.711L95.785,8.711L99.64,20.752L99.64,8.711L101.282,8.711L101.282,25.368L99.355,25.368L95.095,11.9L95.095,25.368Z" style="fill:rgb(90,150,200);fill-rule:nonzero;"/>
|
||||||
|
<path d="M108.254,23.678C109.586,23.678 110.229,22.845 110.229,21.323L110.229,12.756C110.229,11.234 109.586,10.401 108.23,10.401L106.231,10.401L106.231,23.678L108.254,23.678ZM108.278,8.711C110.871,8.711 112.061,10.282 112.061,12.852L112.061,21.251C112.061,23.797 110.871,25.368 108.278,25.368L104.375,25.368L104.375,8.711L108.278,8.711Z" style="fill:rgb(90,150,200);fill-rule:nonzero;"/>
|
||||||
|
<path d="M120.913,16.088L120.913,17.753L116.844,17.753L116.844,23.678L121.841,23.678L121.841,25.368L114.988,25.368L114.988,8.711L121.841,8.711L121.841,10.401L116.844,10.401L116.844,16.088L120.913,16.088Z" style="fill:rgb(90,150,200);fill-rule:nonzero;"/>
|
||||||
|
<path d="M178.95,12.681L178.95,13.13L177.201,13.13L177.201,12.586C177.201,11.097 176.634,10.223 175.31,10.223C173.986,10.223 173.419,11.097 173.419,12.563C173.419,16.273 178.973,16.627 178.973,21.283C178.973,23.789 177.768,25.419 175.239,25.419C172.71,25.419 171.529,23.789 171.529,21.283L171.529,20.338L173.254,20.338L173.254,21.378C173.254,22.867 173.868,23.741 175.192,23.741C176.515,23.741 177.13,22.867 177.13,21.378C177.13,17.691 171.599,17.336 171.599,12.681C171.599,10.128 172.781,8.545 175.263,8.545C177.768,8.545 178.95,10.176 178.95,12.681" style="fill:rgb(233,84,66);fill-rule:nonzero;"/>
|
||||||
|
<path d="M184.574,18.069L183.605,19.7L183.605,25.254L181.762,25.254L181.762,8.71L183.605,8.71L183.605,16.698L188.001,8.71L189.868,8.71L185.685,16.25L190.01,25.254L188.119,25.254L184.574,18.069Z" style="fill:rgb(233,84,66);fill-rule:nonzero;"/>
|
||||||
|
<rect x="192.609" y="8.71" width="1.843" height="16.544" style="fill:rgb(233,84,66);"/>
|
||||||
|
<path d="M200.739,16.509C202.204,16.509 203.078,16.037 203.078,14.241L203.078,12.657C203.078,11.168 202.535,10.388 201.164,10.388L199.368,10.388L199.368,16.509L200.739,16.509ZM201.211,8.71C203.811,8.71 204.898,10.034 204.898,12.492L204.898,13.839C204.898,15.659 204.26,16.793 202.842,17.242C204.355,17.691 204.922,18.92 204.922,20.693L204.922,23.269C204.922,24.001 204.946,24.686 205.253,25.254L203.386,25.254C203.173,24.781 203.078,24.356 203.078,23.245L203.078,20.645C203.078,18.778 202.204,18.187 200.668,18.187L199.368,18.187L199.368,25.254L197.525,25.254L197.525,8.71L201.211,8.71Z" style="fill:rgb(233,84,66);fill-rule:nonzero;"/>
|
||||||
|
<path d="M213.902,16.037L213.902,17.691L209.861,17.691L209.861,23.576L214.824,23.576L214.824,25.254L208.018,25.254L208.018,8.71L214.824,8.71L214.824,10.388L209.861,10.388L209.861,16.037L213.902,16.037Z" style="fill:rgb(233,84,66);fill-rule:nonzero;"/>
|
||||||
|
<rect x="217.707" y="8.71" width="1.843" height="16.544" style="fill:rgb(233,84,66);"/>
|
||||||
|
<path d="M229.783,12.681L229.783,13.13L228.034,13.13L228.034,12.586C228.034,11.097 227.467,10.223 226.144,10.223C224.82,10.223 224.253,11.097 224.253,12.563C224.253,16.273 229.807,16.627 229.807,21.283C229.807,23.789 228.602,25.419 226.073,25.419C223.544,25.419 222.362,23.789 222.362,21.283L222.362,20.338L224.088,20.338L224.088,21.378C224.088,22.867 224.702,23.741 226.026,23.741C227.349,23.741 227.964,22.867 227.964,21.378C227.964,17.691 222.433,17.336 222.433,12.681C222.433,10.128 223.615,8.545 226.096,8.545C228.602,8.545 229.783,10.176 229.783,12.681" style="fill:rgb(233,84,66);fill-rule:nonzero;"/>
|
||||||
|
<path d="M238.48,16.037L238.48,17.691L234.439,17.691L234.439,23.576L239.402,23.576L239.402,25.254L232.595,25.254L232.595,8.71L239.402,8.71L239.402,10.388L234.439,10.388L234.439,16.037L238.48,16.037Z" style="fill:rgb(233,84,66);fill-rule:nonzero;"/>
|
||||||
|
<path d="M243.915,25.254L242.261,25.254L242.261,8.71L244.601,8.71L248.429,20.669L248.429,8.71L250.06,8.71L250.06,25.254L248.146,25.254L243.915,11.877L243.915,25.254Z" style="fill:rgb(233,84,66);fill-rule:nonzero;"/>
|
||||||
|
<path d="M162.932,17.573C162.932,26.334 155.83,33.436 147.069,33.436C138.308,33.436 131.206,26.334 131.206,17.573C131.206,8.812 138.308,1.71 147.069,1.71C155.83,1.71 162.932,8.812 162.932,17.573" style="fill:rgb(91,150,199);fill-rule:nonzero;"/>
|
||||||
|
<path d="M162.932,17.573C162.932,8.818 155.824,1.71 147.069,1.71C138.314,1.71 131.206,8.818 131.206,17.573C131.206,26.328 138.314,33.436 147.069,33.436C155.824,33.436 162.932,26.328 162.932,17.573Z" style="fill:none;stroke:rgb(232,82,66);stroke-width:2.09px;"/>
|
||||||
|
<path d="M146.221,10.769C146.221,10.769 146.157,10.739 146.125,10.721L143.056,8.949C142.695,8.74 142.541,8.332 142.711,8.037L142.819,7.85C142.99,7.555 143.42,7.484 143.781,7.692L146.221,9.105L146.221,10.769Z" style="fill:white;fill-rule:nonzero;"/>
|
||||||
|
<path d="M147.73,10.769C147.73,10.769 147.794,10.739 147.826,10.721L150.895,8.949C151.256,8.74 151.41,8.332 151.24,8.037L151.132,7.85C150.961,7.555 150.531,7.484 150.17,7.692L147.73,9.105L147.73,10.769Z" style="fill:white;fill-rule:nonzero;"/>
|
||||||
|
<path d="M146.221,24.277C146.221,24.277 146.157,24.307 146.125,24.325L143.056,26.097C142.695,26.306 142.541,26.714 142.711,27.009L142.819,27.196C142.99,27.491 143.42,27.562 143.781,27.354L146.221,25.941L146.221,24.277Z" style="fill:white;fill-rule:nonzero;"/>
|
||||||
|
<path d="M147.73,24.277C147.73,24.277 147.794,24.307 147.826,24.325L150.895,26.097C151.256,26.306 151.41,26.714 151.24,27.009L151.132,27.196C150.961,27.491 150.531,27.562 150.17,27.354L147.73,25.941L147.73,24.277Z" style="fill:white;fill-rule:nonzero;"/>
|
||||||
|
<path d="M140.753,14.727C140.753,14.727 140.695,14.767 140.664,14.785L137.596,16.56C137.235,16.769 136.804,16.699 136.634,16.404L136.526,16.217C136.355,15.922 136.509,15.513 136.869,15.305L139.312,13.896L140.753,14.727Z" style="fill:white;fill-rule:nonzero;"/>
|
||||||
|
<path d="M141.507,13.419C141.507,13.419 141.513,13.348 141.513,13.312L141.51,9.768C141.509,9.351 141.233,9.014 140.892,9.014L140.676,9.014C140.335,9.015 140.059,9.352 140.059,9.769L140.065,12.589L141.507,13.419Z" style="fill:white;fill-rule:nonzero;"/>
|
||||||
|
<path d="M152.457,21.471C152.457,21.471 152.451,21.541 152.451,21.578L152.454,25.122C152.455,25.539 152.731,25.876 153.072,25.876L153.288,25.876C153.629,25.875 153.905,25.537 153.905,25.121L153.899,22.301L152.457,21.471Z" style="fill:white;fill-rule:nonzero;"/>
|
||||||
|
<path d="M153.211,20.163C153.211,20.163 153.269,20.122 153.3,20.104L156.368,18.329C156.729,18.121 157.16,18.191 157.33,18.486L157.438,18.673C157.609,18.968 157.455,19.377 157.095,19.585L154.652,20.994L153.211,20.163Z" style="fill:white;fill-rule:nonzero;"/>
|
||||||
|
<path d="M152.418,13.383C152.418,13.383 152.411,13.312 152.411,13.276L152.391,9.732C152.389,9.315 152.664,8.976 153.004,8.974L153.22,8.973C153.561,8.971 153.84,9.307 153.842,9.724L153.854,12.544L152.418,13.383Z" style="fill:white;fill-rule:nonzero;"/>
|
||||||
|
<path d="M153.18,14.686C153.18,14.686 153.238,14.726 153.269,14.744L156.349,16.499C156.71,16.706 157.14,16.633 157.309,16.337L157.416,16.149C157.585,15.853 157.429,15.445 157.067,15.239L154.616,13.846L153.18,14.686Z" style="fill:white;fill-rule:nonzero;"/>
|
||||||
|
<path d="M140.756,20.201C140.756,20.201 140.698,20.161 140.667,20.143L137.587,18.388C137.226,18.181 136.796,18.254 136.627,18.551L136.52,18.738C136.351,19.034 136.507,19.442 136.869,19.648L139.32,21.042L140.756,20.201Z" style="fill:white;fill-rule:nonzero;"/>
|
||||||
|
<path d="M141.519,21.505C141.519,21.505 141.525,21.575 141.525,21.611L141.545,25.155C141.547,25.572 141.272,25.911 140.932,25.913L140.716,25.914C140.375,25.916 140.096,25.58 140.094,25.163L140.082,22.344L141.519,21.505Z" style="fill:white;fill-rule:nonzero;"/>
|
||||||
|
<path d="M146.976,13.856L149.161,12.606C149.522,12.398 149.697,12.027 149.553,11.777L149.462,11.619C149.318,11.37 148.909,11.336 148.548,11.545L146.976,12.423L146.976,13.856Z" style="fill:white;fill-rule:nonzero;stroke:rgb(89,149,199);stroke-width:0.25px;"/>
|
||||||
|
<path d="M146.976,13.856L144.866,12.606C144.505,12.398 144.329,12.027 144.473,11.777L144.565,11.619C144.709,11.37 145.118,11.336 145.479,11.545L146.976,12.423L146.976,13.856Z" style="fill:white;fill-rule:nonzero;stroke:rgb(89,149,199);stroke-width:0.25px;"/>
|
||||||
|
<path d="M146.976,21.174L149.161,22.424C149.522,22.632 149.697,23.003 149.553,23.253L149.462,23.411C149.318,23.661 148.909,23.694 148.548,23.486L146.976,22.607L146.976,21.174Z" style="fill:white;fill-rule:nonzero;stroke:rgb(89,149,199);stroke-width:0.25px;"/>
|
||||||
|
<path d="M146.976,21.174L144.866,22.424C144.505,22.632 144.329,23.003 144.473,23.253L144.565,23.411C144.709,23.661 145.118,23.694 145.479,23.486L146.976,22.607L146.976,21.174Z" style="fill:white;fill-rule:nonzero;stroke:rgb(89,149,199);stroke-width:0.25px;"/>
|
||||||
|
<path d="M150.105,15.659L150.084,13.142C150.082,12.726 150.314,12.387 150.602,12.386L150.785,12.385C151.073,12.384 151.308,12.72 151.31,13.137L151.343,14.938L150.105,15.659Z" style="fill:white;fill-rule:nonzero;stroke:rgb(89,149,199);stroke-width:0.25px;"/>
|
||||||
|
<path d="M150.105,15.659L152.248,16.852C152.609,17.059 153.019,17.024 153.161,16.774L153.252,16.615C153.395,16.365 153.218,15.995 152.856,15.788L151.343,14.938L150.105,15.659Z" style="fill:white;fill-rule:nonzero;stroke:rgb(89,149,199);stroke-width:0.25px;"/>
|
||||||
|
<path d="M143.77,15.594L141.591,16.853C141.229,17.06 140.82,17.026 140.677,16.776L140.586,16.617C140.443,16.367 140.62,15.997 140.982,15.79L142.532,14.873L143.77,15.594Z" style="fill:white;fill-rule:nonzero;stroke:rgb(89,149,199);stroke-width:0.25px;"/>
|
||||||
|
<path d="M143.77,15.594L143.752,13.142C143.753,12.725 143.521,12.387 143.233,12.386L143.05,12.385C142.762,12.384 142.528,12.721 142.526,13.137L142.532,14.873L143.77,15.594Z" style="fill:white;fill-rule:nonzero;stroke:rgb(89,149,199);stroke-width:0.25px;"/>
|
||||||
|
<path d="M143.77,19.358L141.591,18.099C141.229,17.892 140.82,17.927 140.677,18.177L140.586,18.335C140.443,18.585 140.62,18.956 140.982,19.163L142.532,20.079L143.77,19.358Z" style="fill:white;fill-rule:nonzero;stroke:rgb(89,149,199);stroke-width:0.25px;"/>
|
||||||
|
<path d="M143.77,19.358L143.752,21.811C143.753,22.227 143.521,22.566 143.233,22.567L143.05,22.567C142.762,22.568 142.528,22.232 142.526,21.815L142.532,20.079L143.77,19.358Z" style="fill:white;fill-rule:nonzero;stroke:rgb(89,149,199);stroke-width:0.25px;"/>
|
||||||
|
<path d="M150.416,19.505L150.463,22.023C150.473,22.439 150.714,22.771 151.002,22.764L151.185,22.76C151.473,22.754 151.698,22.411 151.689,21.994L151.673,20.193L150.416,19.505Z" style="fill:white;fill-rule:nonzero;stroke:rgb(89,149,199);stroke-width:0.25px;"/>
|
||||||
|
<path d="M150.416,19.505L152.526,18.255C152.881,18.038 153.291,18.062 153.441,18.308L153.536,18.465C153.686,18.711 153.518,19.086 153.162,19.302L151.673,20.193L150.416,19.505Z" style="fill:white;fill-rule:nonzero;stroke:rgb(89,149,199);stroke-width:0.25px;"/>
|
||||||
|
<path d="M146.976,30.184C146.559,30.184 146.221,29.846 146.221,29.429L146.221,5.485C146.221,5.069 146.559,4.731 146.976,4.731C147.392,4.731 147.73,5.069 147.73,5.485L147.73,29.429C147.73,29.846 147.392,30.184 146.976,30.184" style="fill:white;fill-rule:nonzero;"/>
|
||||||
|
<path d="M136.006,23.849C135.795,23.49 135.917,23.028 136.276,22.818L156.95,10.729C157.31,10.519 157.772,10.64 157.982,10.999C158.192,11.359 158.071,11.821 157.712,12.031L137.037,24.12C136.678,24.33 136.216,24.209 136.006,23.849" style="fill:white;fill-rule:nonzero;"/>
|
||||||
|
<path d="M158.042,23.816L158.042,23.816C157.835,24.177 157.373,24.301 157.013,24.093L136.243,12.125C135.882,11.917 135.758,11.456 135.966,11.095C136.174,10.734 136.635,10.61 136.996,10.818L157.766,22.786C158.127,22.994 158.25,23.455 158.042,23.816" style="fill:white;fill-rule:nonzero;"/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 15 KiB |
@@ -0,0 +1 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg width="100%" height="100%" viewBox="0 0 330 200" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;"><g id="star"><g><g><path d="M27.732,120.059l-2.21,5.727c-2.713,-1.005 -6.13,-1.809 -9.546,-1.809c-4.119,0 -6.23,1.508 -6.23,3.618c0,6.33 19.493,3.617 19.493,14.971c0,6.129 -5.526,10.852 -14.368,10.852c-5.225,0 -10.751,-1.608 -14.871,-4.12l3.115,-5.627c3.517,2.211 7.737,3.517 11.655,3.517c4.823,0 6.933,-1.909 6.933,-3.919c0,-6.129 -19.492,-3.918 -19.492,-15.172c0,-5.828 5.023,-10.148 13.966,-10.148c4.622,0.1 8.943,1.205 11.555,2.11Z" style="fill:#64c2c8;fill-rule:nonzero;"/><path d="M71.039,130.81l0,21.703l-7.436,0l0,-19.191c0,-6.23 -1.005,-9.043 -7.335,-9.043c-3.617,0 -6.933,0.603 -10.249,1.607l0,26.527l-7.536,0l0,-30.244c4.221,-2.01 11.757,-4.22 18.388,-4.22c9.244,0.1 14.168,4.722 14.168,12.861Z" style="fill:#64c2c8;fill-rule:nonzero;"/><path d="M79.579,135.733c0,-9.947 7.938,-17.583 18.69,-17.583c11.354,0 18.689,7.636 18.689,17.583c0,10.048 -7.938,17.685 -18.689,17.685c-11.254,0 -18.69,-7.637 -18.69,-17.685Zm29.742,0.101c0,-6.33 -4.119,-11.555 -11.052,-11.555c-6.934,0 -10.953,5.225 -10.953,11.555c0,6.33 4.321,11.454 10.953,11.454c6.631,0 11.052,-5.124 11.052,-11.454Z" style="fill:#64c2c8;fill-rule:nonzero;"/><path d="M176.441,118.953l-16.981,34.163l-1.808,0l-8.642,-18.689l-8.942,18.689l-1.909,0l-16.378,-34.163l8.44,0l9.344,21.905l6.13,-13.364l-3.919,-8.541l7.837,0l9.244,21.905l9.747,-21.905l7.837,0Z" style="fill:#64c2c8;fill-rule:nonzero;"/></g><g><path d="M94.149,192.705l19.593,0l0,6.129l-31.952,0l-0.101,-0.703l20.398,-27.029l-17.785,0l0.301,-5.828l29.541,0l0.101,0.704l-20.096,26.727Z" style="fill:#64c2c8;fill-rule:nonzero;"/><path d="M119.671,181.954c0,-9.948 7.937,-17.584 18.689,-17.584c11.354,0 18.689,7.636 18.689,17.584c0,10.048 -7.938,17.684 -18.689,17.684c-11.354,0 -18.689,-7.636 -18.689,-17.684Zm29.741,0.201c0,-6.33 -4.119,-11.555 -11.052,-11.555c-6.933,0 -10.953,5.225 -10.953,11.555c0,6.33 4.321,11.454 10.953,11.454c6.631,0 11.052,-5.124 11.052,-11.454Z" style="fill:#64c2c8;fill-rule:nonzero;"/><path d="M198.245,177.131l0,21.703l-7.435,0l0,-19.191c0,-6.23 -1.005,-9.043 -7.335,-9.043c-3.617,0 -6.933,0.602 -10.249,1.607l0,26.527l-7.536,0l0,-30.244c4.22,-2.01 11.756,-4.221 18.388,-4.221c9.344,0.101 14.167,4.622 14.167,12.862Z" style="fill:#64c2c8;fill-rule:nonzero;"/><path d="M226.48,193.408c4.119,0 6.43,-0.301 11.856,-1.607l1.005,5.325c-1.909,0.904 -7.536,2.613 -13.364,2.613c-11.957,0 -19.091,-7.838 -19.091,-17.584c0,-10.249 6.833,-17.785 18.087,-17.785c10.349,0 16.378,6.732 16.378,15.775c0,1.306 -0.101,3.316 -0.302,4.421l-26.325,0c0.904,5.627 4.823,8.842 11.756,8.842Zm-11.857,-14.469l19.292,0c-0.201,-4.722 -2.411,-8.54 -9.244,-8.54c-6.229,0 -9.244,3.315 -10.048,8.54Z" style="fill:#64c2c8;fill-rule:nonzero;"/></g><g><path d="M146.699,82.982l4.622,1.005l0.101,0c0.201,0 0.402,-0.201 0.502,-0.402c0.101,-0.302 -0.1,-0.503 -0.402,-0.603l-4.622,-1.005c-0.301,-0.1 -0.502,0.101 -0.602,0.402c-0.101,0.301 0.1,0.502 0.401,0.603Z" style="fill:#b0def1;fill-rule:nonzero;"/><path d="M149.111,73.838l12.459,4.019l0.101,0c0.1,0 0.201,-0.1 0.201,-0.201c0,-0.1 0,-0.301 -0.201,-0.301l-12.46,-4.019c-0.1,0 -0.301,0 -0.301,0.201c0,0.1 0,0.301 0.201,0.301Z" style="fill:#b0def1;fill-rule:nonzero;"/><path d="M165.991,62.786l6.13,3.516c0.1,0 0.201,0.101 0.201,0.101c0.201,0 0.301,-0.101 0.402,-0.201c0.1,-0.201 0.1,-0.503 -0.201,-0.703l-6.13,-3.517c-0.201,-0.101 -0.502,-0.101 -0.703,0.201c0,0.201 0,0.502 0.301,0.603Z" style="fill:#b0def1;fill-rule:nonzero;"/><path d="M189.805,69.92l0.1,0c0.101,0 0.101,0 0.201,-0.101c0.101,-0.1 0.101,-0.301 -0.1,-0.301l-23.01,-16.68c-0.1,-0.1 -0.301,-0.1 -0.301,0.101c-0.101,0.1 -0.101,0.301 0.1,0.301l23.01,16.68Z" style="fill:#b0def1;fill-rule:nonzero;"/><path d="M163.982,51.13l0.1,0c0.101,0 0.101,0 0.201,-0.1c0.101,-0.101 0.101,-0.302 -0.1,-0.302l-2.512,-1.809c-0.101,-0.1 -0.302,-0.1 -0.302,0.101c-0.1,0.1 -0.1,0.301 0.101,0.301l2.512,1.809Z" style="fill:#b0def1;fill-rule:nonzero;"/><path d="M180.058,43.293c0.101,0.201 0.302,0.201 0.503,0.201c0.201,0 0.402,-0.101 0.502,-0.201c0.302,-0.302 0.302,-0.704 0.101,-1.005l-6.632,-7.335c-0.301,-0.302 -0.703,-0.302 -1.005,-0.101c-0.301,0.302 -0.301,0.704 -0.1,1.005l6.631,7.436Z" style="fill:#b0def1;fill-rule:nonzero;"/><path d="M207.791,47.111c0.201,0.402 0.502,0.603 0.904,0.603c0.101,0 0.301,0 0.402,-0.101c0.502,-0.201 0.703,-0.804 0.502,-1.306l-13.062,-29.239c-0.201,-0.503 -0.804,-0.704 -1.306,-0.503c-0.503,0.201 -0.704,0.804 -0.503,1.306l13.063,29.24Z" style="fill:#b0def1;fill-rule:nonzero;"/><path d="M192.216,12.144c0.201,0.402 0.503,0.603 0.905,0.603c0.1,0 0.301,0 0.402,-0.1c0.502,-0.201 0.703,-0.804 0.502,-1.307l-4Line truncated
|
||||||
|
After Width: | Height: | Size: 16 KiB |
@@ -0,0 +1,116 @@
|
|||||||
|
const INDICATOR_ID = 'loading-indicator'
|
||||||
|
const HIDDEN_CLASS = 'invisible'
|
||||||
|
const GRACE_PERIOD_MS = 500
|
||||||
|
const DEBOUNCE_MS = 200
|
||||||
|
|
||||||
|
let debounceTimeout = null
|
||||||
|
let historyRestoreGracePeriod = false
|
||||||
|
let savedScrollPosition = null
|
||||||
|
let activeRequests = 0
|
||||||
|
|
||||||
|
function getIndicator() {
|
||||||
|
return document.getElementById(INDICATOR_ID)
|
||||||
|
}
|
||||||
|
|
||||||
|
function show() {
|
||||||
|
const indicator = getIndicator()
|
||||||
|
if (indicator) {
|
||||||
|
indicator.classList.remove(HIDDEN_CLASS)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function hide() {
|
||||||
|
if (debounceTimeout) {
|
||||||
|
clearTimeout(debounceTimeout)
|
||||||
|
debounceTimeout = null
|
||||||
|
}
|
||||||
|
const indicator = getIndicator()
|
||||||
|
if (indicator) {
|
||||||
|
indicator.classList.add(HIDDEN_CLASS)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function handleBeforeRequest(event) {
|
||||||
|
// Ignore requests triggered during history restore grace period
|
||||||
|
if (true === historyRestoreGracePeriod) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
activeRequests++
|
||||||
|
|
||||||
|
// Save scroll position of the target container before HTMX request
|
||||||
|
const target = event.detail?.target || document.getElementById('main-content')
|
||||||
|
if (target && typeof target.scrollTop === 'number') {
|
||||||
|
savedScrollPosition = { element: target, top: target.scrollTop }
|
||||||
|
}
|
||||||
|
|
||||||
|
// Don't start a new debounce if already pending
|
||||||
|
if (debounceTimeout) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// Show indicator after delay
|
||||||
|
debounceTimeout = setTimeout(() => {
|
||||||
|
show()
|
||||||
|
}, DEBOUNCE_MS)
|
||||||
|
}
|
||||||
|
|
||||||
|
function handleRequestEnd() {
|
||||||
|
// Counter may already be 0 if a force-reset (history save, page show) fired
|
||||||
|
// before this afterRequest — ignore the stale completion in that case
|
||||||
|
if (0 === activeRequests) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
activeRequests--
|
||||||
|
if (0 === activeRequests) {
|
||||||
|
hide()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function handleAfterSwap() {
|
||||||
|
// Restore scroll position after HTMX swaps content
|
||||||
|
if (savedScrollPosition !== null && savedScrollPosition.element) {
|
||||||
|
savedScrollPosition.element.scrollTop = savedScrollPosition.top
|
||||||
|
savedScrollPosition = null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function handleHistoryRestore() {
|
||||||
|
activeRequests = 0
|
||||||
|
hide()
|
||||||
|
|
||||||
|
// Set grace period to ignore change events triggered by history restore
|
||||||
|
historyRestoreGracePeriod = true
|
||||||
|
setTimeout(() => {
|
||||||
|
historyRestoreGracePeriod = false
|
||||||
|
}, GRACE_PERIOD_MS)
|
||||||
|
}
|
||||||
|
|
||||||
|
function handleTimeout() {
|
||||||
|
// Don't decrement here — htmx:afterRequest always fires alongside htmx:timeout
|
||||||
|
// and handles the counter. This handler only shows the alert.
|
||||||
|
alert('Die Anfrage hat zu lange gedauert. Bitte versuchen Sie es erneut. Falls das Problem weiterhin besteht, kontaktieren Sie bitte unseren Support.')
|
||||||
|
}
|
||||||
|
|
||||||
|
function handleBeforeHistorySave() {
|
||||||
|
// Hide indicator before HTMX saves the page to history cache
|
||||||
|
activeRequests = 0
|
||||||
|
hide()
|
||||||
|
}
|
||||||
|
|
||||||
|
function handlePageShow() {
|
||||||
|
activeRequests = 0
|
||||||
|
hide()
|
||||||
|
}
|
||||||
|
|
||||||
|
// Initialize event listeners
|
||||||
|
document.body.addEventListener('htmx:beforeRequest', handleBeforeRequest)
|
||||||
|
document.body.addEventListener('htmx:afterRequest', handleRequestEnd)
|
||||||
|
document.body.addEventListener('htmx:afterSwap', handleAfterSwap)
|
||||||
|
document.body.addEventListener('htmx:timeout', handleTimeout)
|
||||||
|
document.body.addEventListener('htmx:historyRestore', handleHistoryRestore)
|
||||||
|
document.body.addEventListener('htmx:beforeHistorySave', handleBeforeHistorySave)
|
||||||
|
|
||||||
|
window.addEventListener('pageshow', handlePageShow)
|
||||||
|
window.addEventListener('popstate', handleHistoryRestore)
|
||||||
@@ -40,3 +40,27 @@
|
|||||||
.htmx-request.htmx-indicator{
|
.htmx-request.htmx-indicator{
|
||||||
@apply visible;
|
@apply visible;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.bg-outer {
|
||||||
|
@apply bg-blend-multiply bg-right-top bg-cover;
|
||||||
|
}
|
||||||
|
|
||||||
|
.bg-outer--1 {
|
||||||
|
background-image: url('../images/bg_4.jpg'), linear-gradient(190deg, rgba(24, 82, 123, 1) 0%, rgba(22, 88, 131, 1) 62%, rgba(0, 112, 224, 1) 100%);;
|
||||||
|
}
|
||||||
|
|
||||||
|
.bg-outer--2 {
|
||||||
|
background-image: url('../images/bg_5.jpg'), linear-gradient(190deg, rgba(24, 82, 123, 1) 0%, rgba(22, 88, 131, 1) 62%, rgba(0, 112, 224, 1) 100%);;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sbw .bg-outer--2 {
|
||||||
|
background-image: url('../images/bg_7.jpg'), linear-gradient(190deg, rgba(24, 82, 123, 1) 0%, rgba(22, 88, 131, 1) 62%, rgba(0, 112, 224, 1) 100%);;
|
||||||
|
}
|
||||||
|
|
||||||
|
.snz .bg-outer--2 {
|
||||||
|
background-image: url('../images/bg_6.jpg'), linear-gradient(190deg, rgba(24, 82, 123, 1) 0%, rgba(22, 88, 131, 1) 62%, rgba(0, 112, 224, 1) 100%);;
|
||||||
|
}
|
||||||
|
|
||||||
|
.bg-inner {
|
||||||
|
background-image: linear-gradient(190deg, rgba(24, 82, 123, 0.8) 0%, rgba(22, 88, 131, 0.8) 62%, rgba(0, 112, 224, 0.8) 100%);;
|
||||||
|
}
|
||||||
@@ -1,6 +1,7 @@
|
|||||||
@import "components/typography.css";
|
|
||||||
@import "components/forms.css";
|
|
||||||
@import "components/button.css";
|
@import "components/button.css";
|
||||||
@import "components/menu.css";
|
@import "components/datatable.css";
|
||||||
|
@import "components/forms.css";
|
||||||
|
@import "components/pagination.css";
|
||||||
|
@import "components/toast.css";
|
||||||
@import "components/tooltip.css";
|
@import "components/tooltip.css";
|
||||||
@import "components/table-responsive.css";
|
@import "components/typography.css";
|
||||||
@@ -1,45 +1,71 @@
|
|||||||
.button {
|
.button {
|
||||||
@apply inline-flex items-center justify-center space-x-2 px-4 py-2 md:px-8 cursor-pointer;
|
@apply inline-flex items-center justify-center space-x-2 h-8 leading-8 md:h-10 md:leading-10 px-4 md:px-8 cursor-pointer;
|
||||||
@apply uppercase leading-none text-center;
|
@apply uppercase leading-none text-center text-sm md:text-base;
|
||||||
@apply transition-colors outline-none focus:outline-2 focus:outline-offset-2 focus:outline-primary-light;
|
@apply transition-colors outline-none focus:outline-2 focus:outline-offset-2 focus:outline-primary-dark;
|
||||||
|
@apply rounded-md;
|
||||||
}
|
}
|
||||||
|
|
||||||
.button--small {
|
.button--small {
|
||||||
@apply px-2 py-1 md:px-4 text-xs sm:text-sm;
|
@apply px-2 py-1 md:px-4 text-xs sm:text-sm;
|
||||||
}
|
}
|
||||||
|
|
||||||
.button--full {
|
.button--primary {
|
||||||
@apply block w-full;
|
background: linear-gradient(120deg, #960167 0%, #9e036a 40%, #fa1a8c 100%);
|
||||||
|
@apply text-white;
|
||||||
|
@apply hover:bg-none hover:bg-pink/80;
|
||||||
}
|
}
|
||||||
|
|
||||||
.bg-button {
|
.button[disabled] {
|
||||||
@apply bg-none bg-primary-dark text-white;
|
@apply cursor-not-allowed;
|
||||||
@apply hover:bg-badge-gradient;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.button--secondary {
|
||||||
.bg-button--active,
|
@apply bg-none bg-primary-light text-white;
|
||||||
.bg-button--secondary {
|
@apply hover:bg-primary-light/50;
|
||||||
@apply bg-badge-gradient;
|
|
||||||
@apply hover:bg-none hover:bg-pink;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.bg-button--muted {
|
.button--neutral {
|
||||||
@apply bg-zinc-300 hover:bg-zinc-300;
|
@apply bg-none bg-gray-200;
|
||||||
|
@apply hover:bg-gray-200/50;
|
||||||
}
|
}
|
||||||
|
|
||||||
.bg-button--dark {
|
.button--warning {
|
||||||
@apply bg-primary-dark;
|
@apply bg-none bg-red-500 text-white;
|
||||||
|
@apply hover:bg-red-500/50;
|
||||||
}
|
}
|
||||||
|
|
||||||
.bg-button--light {
|
.sbw {
|
||||||
@apply bg-white border-2;
|
.button--primary {
|
||||||
@apply font-bold;
|
@apply bg-none bg-sbw-secondary text-white;
|
||||||
@apply border-primary-light text-primary;
|
@apply hover:bg-none hover:bg-sbw-primary/50;
|
||||||
|
}
|
||||||
|
|
||||||
|
.button--secondary {
|
||||||
|
@apply bg-none bg-sbw-primary-dark text-white;
|
||||||
|
@apply hover:bg-none hover:bg-sbw-primary/50;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.bg-button--light:hover,
|
.snz {
|
||||||
.bg-button--light.button--active {
|
.button--primary {
|
||||||
@apply bg-white;
|
@apply bg-none bg-snz-secondary text-white;
|
||||||
@apply border-secondary text-secondary;
|
@apply hover:bg-none hover:bg-snz-primary/50;
|
||||||
|
}
|
||||||
|
|
||||||
|
.button--secondary {
|
||||||
|
@apply bg-none bg-snz-primary-dark text-white;
|
||||||
|
@apply hover:bg-none hover:bg-snz-primary/50;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.ser {
|
||||||
|
.button--primary {
|
||||||
|
@apply bg-none bg-ser-secondary text-white;
|
||||||
|
@apply hover:bg-none hover:bg-ser-primary/50;
|
||||||
|
}
|
||||||
|
|
||||||
|
.button--secondary {
|
||||||
|
@apply bg-none bg-ser-primary text-white;
|
||||||
|
@apply hover:bg-none hover:bg-ser-primary/50;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,31 @@
|
|||||||
|
.data-table-wrapper {
|
||||||
|
@apply overflow-x-auto lg:overflow-x-visible mb-8;
|
||||||
|
}
|
||||||
|
|
||||||
|
.data-table-wrapper__inner {
|
||||||
|
@apply align-middle inline-block min-w-full overflow-hidden lg:overflow-visible;
|
||||||
|
}
|
||||||
|
|
||||||
|
.data-table {
|
||||||
|
@apply min-w-full;
|
||||||
|
}
|
||||||
|
|
||||||
|
.data-table tbody {
|
||||||
|
@apply bg-white;
|
||||||
|
}
|
||||||
|
|
||||||
|
.data-table tr {
|
||||||
|
@apply border border-gray-300;
|
||||||
|
}
|
||||||
|
|
||||||
|
.data-table th {
|
||||||
|
@apply px-4 py-2 bg-gray-200 text-left leading-4 font-bold text-primary align-top;
|
||||||
|
}
|
||||||
|
|
||||||
|
.data-table td {
|
||||||
|
@apply px-4 py-2 leading-5 align-top;
|
||||||
|
}
|
||||||
|
|
||||||
|
.data-table tbody tr {
|
||||||
|
@apply hover:bg-gray-100;
|
||||||
|
}
|
||||||
@@ -4,7 +4,13 @@ label.required:after {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.form-field {
|
.form-field {
|
||||||
@apply border-zinc-400 focus:border-zinc-800 ring-0 focus:outline-2 focus:outline-offset-2 focus:outline-primary-light mt-1 block w-full;
|
@apply border-zinc-400 ring-0 mt-1 block w-full rounded-md;
|
||||||
|
@apply focus:outline-primary-light focus:border-zinc-800 focus:outline-2 focus:outline-offset-2;
|
||||||
|
}
|
||||||
|
|
||||||
|
#participant-form .form-field,
|
||||||
|
#form-payment .form-field {
|
||||||
|
@apply bg-primary-bg border-primary-bg;
|
||||||
}
|
}
|
||||||
|
|
||||||
.form-field--has-error {
|
.form-field--has-error {
|
||||||
@@ -27,3 +33,24 @@ select[readonly] {
|
|||||||
input[readonly] {
|
input[readonly] {
|
||||||
@apply cursor-not-allowed;
|
@apply cursor-not-allowed;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.sbw {
|
||||||
|
.form-checkbox,
|
||||||
|
.form-radio {
|
||||||
|
@apply text-sbw-secondary;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.snz {
|
||||||
|
.form-checkbox,
|
||||||
|
.form-radio {
|
||||||
|
@apply text-snz-primary;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.ser {
|
||||||
|
.form-checkbox,
|
||||||
|
.form-radio {
|
||||||
|
@apply text-ser-secondary;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,11 +0,0 @@
|
|||||||
.menu--main {
|
|
||||||
@apply flex items-center m-0 divide-x divide-white;
|
|
||||||
}
|
|
||||||
|
|
||||||
.menu--main a {
|
|
||||||
@apply block py-2 px-4 text-white hover:bg-secondary hover:text-zinc-800 text-sm md:text-base;
|
|
||||||
}
|
|
||||||
|
|
||||||
.menu--main .current a {
|
|
||||||
@apply bg-secondary text-zinc-800;
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,90 @@
|
|||||||
|
:root {
|
||||||
|
--pagination-skew: 2rem;
|
||||||
|
--pagination-border-width: 1px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pagination {
|
||||||
|
@apply flex h-12 lg:h-16 overflow-hidden bg-primary-bg shadow-md;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pagination-item {
|
||||||
|
flex: 1 1 0;
|
||||||
|
margin-right: calc(-1 * var(--pagination-skew));
|
||||||
|
@apply relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pagination-item:last-child {
|
||||||
|
@apply mr-0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Outer clip-path for button shape */
|
||||||
|
.pagination-item:first-child {
|
||||||
|
clip-path: polygon(0 0, calc(100% - var(--pagination-skew)) 0, 100% 100%, 0 100%);
|
||||||
|
}
|
||||||
|
|
||||||
|
.pagination-item:not(:first-child):not(:last-child) {
|
||||||
|
clip-path: polygon(0 0, calc(100% - var(--pagination-skew)) 0, 100% 100%, var(--pagination-skew) 100%);
|
||||||
|
}
|
||||||
|
|
||||||
|
.pagination-item:last-child {
|
||||||
|
clip-path: polygon(0 0, 100% 0, 100% 100%, var(--pagination-skew) 100%);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Border and content wrappers */
|
||||||
|
.pagination-item__border {
|
||||||
|
@apply w-full h-full flex items-center justify-center bg-primary-dark/10;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pagination-item__inner {
|
||||||
|
@apply w-full h-full flex items-center justify-center;
|
||||||
|
@apply lg:text-2xl font-bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
a.pagination-item__border > .pagination-item__inner:hover {
|
||||||
|
@apply bg-primary-light text-white;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Inner clip-path for border effect */
|
||||||
|
.pagination-item:first-child .pagination-item__inner {
|
||||||
|
clip-path: polygon(0 0, calc(100% - var(--pagination-skew)) 0, 100% 100%, 0 100%);
|
||||||
|
}
|
||||||
|
|
||||||
|
.pagination-item:not(:first-child) .pagination-item__inner {
|
||||||
|
/* No left/bottom-left border on overlapping edge to prevent double borders */
|
||||||
|
clip-path: polygon(0 0, calc(100% - var(--pagination-skew) - var(--pagination-border-width)) 0, calc(100% - var(--pagination-border-width)) 100%, var(--pagination-skew) 100%);
|
||||||
|
}
|
||||||
|
|
||||||
|
.pagination-item:last-child .pagination-item__inner {
|
||||||
|
/* No left/bottom-left border on overlapping edge, no right border */
|
||||||
|
clip-path: polygon(0 0, 100% 0, 100% 100%, var(--pagination-skew) 100%);
|
||||||
|
}
|
||||||
|
|
||||||
|
.sbw {
|
||||||
|
.pagination-item__border {
|
||||||
|
@apply bg-sbw-primary-dark/10;
|
||||||
|
}
|
||||||
|
|
||||||
|
a.pagination-item__border > .pagination-item__inner:hover {
|
||||||
|
@apply bg-sbw-primary;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.snz {
|
||||||
|
.pagination-item__border {
|
||||||
|
@apply bg-snz-primary-dark/10;
|
||||||
|
}
|
||||||
|
|
||||||
|
a.pagination-item__border > .pagination-item__inner:hover {
|
||||||
|
@apply bg-snz-primary;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.ser {
|
||||||
|
.pagination-item__border {
|
||||||
|
@apply bg-ser-primary/10;
|
||||||
|
}
|
||||||
|
|
||||||
|
a.pagination-item__border > .pagination-item__inner:hover {
|
||||||
|
@apply bg-ser-primary;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,20 +0,0 @@
|
|||||||
.responsive {
|
|
||||||
@apply text-sm md:text-base;
|
|
||||||
}
|
|
||||||
|
|
||||||
.responsive thead {
|
|
||||||
@apply hidden md:table-header-group;
|
|
||||||
}
|
|
||||||
|
|
||||||
.responsive tbody tr {
|
|
||||||
@apply block mb-2 md:table-row;
|
|
||||||
}
|
|
||||||
|
|
||||||
.responsive td {
|
|
||||||
@apply grid grid-cols-2 gap-x-2 last:col-span-2 md:table-cell;
|
|
||||||
}
|
|
||||||
|
|
||||||
.responsive td:before {
|
|
||||||
content: attr(data-label);
|
|
||||||
@apply block font-bold last:hidden md:hidden;
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
@import "toastify-js/src/toastify.css";
|
||||||
|
|
||||||
|
.toastify {
|
||||||
|
@apply shadow-lg rounded;
|
||||||
|
}
|
||||||
|
|
||||||
|
.toastify--success {
|
||||||
|
@apply text-gray-100;
|
||||||
|
background: theme('colors.emerald.600');
|
||||||
|
}
|
||||||
|
|
||||||
|
.toastify--warning {
|
||||||
|
@apply text-gray-100;
|
||||||
|
background: theme('colors.red.600');
|
||||||
|
}
|
||||||
|
|
||||||
|
.toastify--error {
|
||||||
|
@apply text-gray-100;
|
||||||
|
background: theme('colors.red.700');
|
||||||
|
}
|
||||||
|
|
||||||
|
.toastify--info {
|
||||||
|
@apply text-gray-100;
|
||||||
|
background: theme('colors.primary');
|
||||||
|
}
|
||||||
@@ -3,7 +3,6 @@
|
|||||||
.tippy-box {
|
.tippy-box {
|
||||||
background-color: theme('colors.primary');
|
background-color: theme('colors.primary');
|
||||||
}
|
}
|
||||||
|
|
||||||
.tippy-box[data-placement^='top'] > .tippy-arrow::before {
|
.tippy-box[data-placement^='top'] > .tippy-arrow::before {
|
||||||
border-top-color: theme('colors.primary');
|
border-top-color: theme('colors.primary');
|
||||||
}
|
}
|
||||||
@@ -16,3 +15,57 @@
|
|||||||
.tippy-box[data-placement^='right'] > .tippy-arrow::before {
|
.tippy-box[data-placement^='right'] > .tippy-arrow::before {
|
||||||
border-right-color: theme('colors.primary');
|
border-right-color: theme('colors.primary');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.sbw {
|
||||||
|
.tippy-box {
|
||||||
|
background-color: theme('colors.sbw.secondary');
|
||||||
|
}
|
||||||
|
.tippy-box[data-placement^='top'] > .tippy-arrow::before {
|
||||||
|
border-top-color: theme('colors.sbw.secondary');
|
||||||
|
}
|
||||||
|
.tippy-box[data-placement^='bottom'] > .tippy-arrow::before {
|
||||||
|
border-bottom-color: theme('colors.sbw.secondary');
|
||||||
|
}
|
||||||
|
.tippy-box[data-placement^='left'] > .tippy-arrow::before {
|
||||||
|
border-left-color: theme('colors.sbw.secondary');
|
||||||
|
}
|
||||||
|
.tippy-box[data-placement^='right'] > .tippy-arrow::before {
|
||||||
|
border-right-color: theme('colors.sbw.secondary');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.snz {
|
||||||
|
.tippy-box {
|
||||||
|
background-color: theme('colors.snz.primary-dark');
|
||||||
|
}
|
||||||
|
.tippy-box[data-placement^='top'] > .tippy-arrow::before {
|
||||||
|
border-top-color: theme('colors.snz.primary-dark');
|
||||||
|
}
|
||||||
|
.tippy-box[data-placement^='bottom'] > .tippy-arrow::before {
|
||||||
|
border-bottom-color: theme('colors.snz.primary-dark');
|
||||||
|
}
|
||||||
|
.tippy-box[data-placement^='left'] > .tippy-arrow::before {
|
||||||
|
border-left-color: theme('colors.snz.primary-dark');
|
||||||
|
}
|
||||||
|
.tippy-box[data-placement^='right'] > .tippy-arrow::before {
|
||||||
|
border-right-color: theme('colors.snz.primary-dark');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.ser {
|
||||||
|
.tippy-box {
|
||||||
|
background-color: theme('colors.ser.secondary');
|
||||||
|
}
|
||||||
|
.tippy-box[data-placement^='top'] > .tippy-arrow::before {
|
||||||
|
border-top-color: theme('colors.ser.secondary');
|
||||||
|
}
|
||||||
|
.tippy-box[data-placement^='bottom'] > .tippy-arrow::before {
|
||||||
|
border-bottom-color: theme('colors.ser.secondary');
|
||||||
|
}
|
||||||
|
.tippy-box[data-placement^='left'] > .tippy-arrow::before {
|
||||||
|
border-left-color: theme('colors.ser.secondary');
|
||||||
|
}
|
||||||
|
.tippy-box[data-placement^='right'] > .tippy-arrow::before {
|
||||||
|
border-right-color: theme('colors.ser.secondary');
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,126 +1,140 @@
|
|||||||
{
|
{
|
||||||
"type": "project",
|
"type": "project",
|
||||||
"license": "proprietary",
|
"license": "proprietary",
|
||||||
"minimum-stability": "stable",
|
"minimum-stability": "stable",
|
||||||
"prefer-stable": true,
|
"prefer-stable": true,
|
||||||
"require": {
|
"require": {
|
||||||
"php": ">=8.1",
|
"php": ">=8.1",
|
||||||
"ext-ctype": "*",
|
"ext-ctype": "*",
|
||||||
"ext-iconv": "*",
|
"ext-dom": "*",
|
||||||
"ext-simplexml": "*",
|
"ext-iconv": "*",
|
||||||
"ext-sockets": "*",
|
"ext-simplexml": "*",
|
||||||
"doctrine/dbal": "^3",
|
"ext-sockets": "*",
|
||||||
"doctrine/doctrine-bundle": "^2.13",
|
"doctrine/dbal": "^3",
|
||||||
"doctrine/doctrine-migrations-bundle": "^3.3",
|
"doctrine/doctrine-bundle": "^2.13",
|
||||||
"doctrine/orm": "^3.3",
|
"doctrine/doctrine-migrations-bundle": "^3.3",
|
||||||
"knplabs/knp-menu-bundle": "^3.4",
|
"doctrine/orm": "^3.3",
|
||||||
"league/flysystem-bundle": "^3.4",
|
"fakerphp/faker": "^1.24",
|
||||||
"league/flysystem-sftp-v3": "^3.29",
|
"flagception/flagception-bundle": "^6.1",
|
||||||
"league/oauth2-server-bundle": "^0.11.0",
|
"knplabs/knp-menu-bundle": "^3.7",
|
||||||
"nelexa/zip": "^4.0",
|
"knplabs/knp-paginator-bundle": "^6.10",
|
||||||
"nesbot/carbon": "^3.8",
|
"league/flysystem-bundle": "^3.4",
|
||||||
"phpdocumentor/reflection-docblock": "^5.6",
|
"league/flysystem-sftp-v3": "^3.29",
|
||||||
"phpstan/phpdoc-parser": "^2.0",
|
"league/oauth2-server-bundle": "^1.0",
|
||||||
"spatie/crypto": "^2.1",
|
"nelexa/zip": "^4.0",
|
||||||
"symfony/apache-pack": "^1.0",
|
"nesbot/carbon": "^3.8",
|
||||||
"symfony/asset": "6.4.*",
|
"phpdocumentor/reflection-docblock": "^5.6",
|
||||||
"symfony/console": "6.4.*",
|
"phpoffice/phpspreadsheet": "^5.4",
|
||||||
"symfony/doctrine-messenger": "6.4.*",
|
"phpstan/phpdoc-parser": "^2.0",
|
||||||
"symfony/dom-crawler": "6.4.*",
|
"spatie/crypto": "^2.1",
|
||||||
"symfony/dotenv": "6.4.*",
|
"symfony/apache-pack": "^1.0",
|
||||||
"symfony/expression-language": "6.4.*",
|
"symfony/asset": "6.4.*",
|
||||||
"symfony/flex": "^2",
|
"symfony/console": "6.4.*",
|
||||||
"symfony/form": "6.4.*",
|
"symfony/doctrine-messenger": "6.4.*",
|
||||||
"symfony/framework-bundle": "6.4.*",
|
"symfony/dom-crawler": "6.4.*",
|
||||||
"symfony/http-client": "6.4.*",
|
"symfony/dotenv": "6.4.*",
|
||||||
"symfony/intl": "6.4.*",
|
"symfony/expression-language": "6.4.*",
|
||||||
"symfony/mailer": "6.4.*",
|
"symfony/flex": "^2",
|
||||||
"symfony/mime": "6.4.*",
|
"symfony/form": "6.4.*",
|
||||||
"symfony/monolog-bundle": "^3.0",
|
"symfony/framework-bundle": "6.4.*",
|
||||||
"symfony/notifier": "6.4.*",
|
"symfony/html-sanitizer": "6.4.*",
|
||||||
"symfony/process": "6.4.*",
|
"symfony/http-client": "6.4.*",
|
||||||
"symfony/property-access": "6.4.*",
|
"symfony/intl": "6.4.*",
|
||||||
"symfony/property-info": "6.4.*",
|
"symfony/lock": "6.4.*",
|
||||||
"symfony/runtime": "6.4.*",
|
"symfony/mailer": "6.4.*",
|
||||||
"symfony/security-bundle": "6.4.*",
|
"symfony/mime": "6.4.*",
|
||||||
"symfony/serializer": "6.4.*",
|
"symfony/monolog-bundle": "^3.0",
|
||||||
"symfony/stimulus-bundle": "^2.21",
|
"symfony/notifier": "6.4.*",
|
||||||
"symfony/string": "6.4.*",
|
"symfony/process": "6.4.*",
|
||||||
"symfony/translation": "6.4.*",
|
"symfony/property-access": "6.4.*",
|
||||||
"symfony/twig-bundle": "6.4.*",
|
"symfony/property-info": "6.4.*",
|
||||||
"symfony/uid": "6.4.*",
|
"symfony/runtime": "6.4.*",
|
||||||
"symfony/validator": "6.4.*",
|
"symfony/security-bundle": "6.4.*",
|
||||||
"symfony/web-link": "6.4.*",
|
"symfony/serializer": "6.4.*",
|
||||||
"symfony/webpack-encore-bundle": "^2.2",
|
"symfony/stimulus-bundle": "^2.21",
|
||||||
"symfony/yaml": "6.4.*",
|
"symfony/string": "6.4.*",
|
||||||
"twig/extra-bundle": "^2.12|^3.0",
|
"symfony/translation": "6.4.*",
|
||||||
"twig/html-extra": "^3.15",
|
"symfony/twig-bundle": "6.4.*",
|
||||||
"twig/intl-extra": "*",
|
"symfony/uid": "6.4.*",
|
||||||
"twig/twig": "^2.12|^3.0",
|
"symfony/validator": "6.4.*",
|
||||||
"voku/anti-xss": "^4.1"
|
"symfony/web-link": "6.4.*",
|
||||||
|
"symfony/webpack-encore-bundle": "^2.2",
|
||||||
|
"symfony/yaml": "6.4.*",
|
||||||
|
"twig/extra-bundle": "^2.12|^3.0",
|
||||||
|
"twig/html-extra": "^3.15",
|
||||||
|
"twig/intl-extra": "*",
|
||||||
|
"twig/string-extra": "^3.24",
|
||||||
|
"twig/twig": "^2.12|^3.0",
|
||||||
|
"zenstruck/schedule-bundle": "^1.8"
|
||||||
|
},
|
||||||
|
"config": {
|
||||||
|
"allow-plugins": {
|
||||||
|
"php-http/discovery": true,
|
||||||
|
"symfony/flex": true,
|
||||||
|
"symfony/runtime": true
|
||||||
},
|
},
|
||||||
"config": {
|
"sort-packages": true,
|
||||||
"allow-plugins": {
|
"platform": {
|
||||||
"php-http/discovery": true,
|
"php": "8.3.30"
|
||||||
"symfony/flex": true,
|
|
||||||
"symfony/runtime": true
|
|
||||||
},
|
|
||||||
"sort-packages": true,
|
|
||||||
"platform": {
|
|
||||||
"php": "8.2.28"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"autoload": {
|
|
||||||
"psr-4": {
|
|
||||||
"App\\": "src/"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"autoload-dev": {
|
|
||||||
"psr-4": {
|
|
||||||
"App\\Tests\\": "tests/"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"replace": {
|
|
||||||
"symfony/polyfill-ctype": "*",
|
|
||||||
"symfony/polyfill-iconv": "*",
|
|
||||||
"symfony/polyfill-php72": "*",
|
|
||||||
"symfony/polyfill-php73": "*",
|
|
||||||
"symfony/polyfill-php74": "*",
|
|
||||||
"symfony/polyfill-php80": "*",
|
|
||||||
"symfony/polyfill-php81": "*"
|
|
||||||
},
|
|
||||||
"scripts": {
|
|
||||||
"auto-scripts": {
|
|
||||||
"cache:clear": "symfony-cmd",
|
|
||||||
"assets:install %PUBLIC_DIR%": "symfony-cmd"
|
|
||||||
},
|
|
||||||
"post-install-cmd": [
|
|
||||||
"@auto-scripts"
|
|
||||||
],
|
|
||||||
"post-update-cmd": [
|
|
||||||
"@auto-scripts"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"conflict": {
|
|
||||||
"symfony/symfony": "*"
|
|
||||||
},
|
|
||||||
"extra": {
|
|
||||||
"symfony": {
|
|
||||||
"allow-contrib": true,
|
|
||||||
"require": "6.4.*",
|
|
||||||
"docker": true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"require-dev": {
|
|
||||||
"deployer/deployer": "^7.5",
|
|
||||||
"friendsofphp/php-cs-fixer": "^3.75",
|
|
||||||
"phpunit/phpunit": "^9.5",
|
|
||||||
"symfony/browser-kit": "6.4.*",
|
|
||||||
"symfony/css-selector": "6.4.*",
|
|
||||||
"symfony/debug-bundle": "6.4.*",
|
|
||||||
"symfony/maker-bundle": "^1.0",
|
|
||||||
"symfony/phpunit-bridge": "^7.1",
|
|
||||||
"symfony/stopwatch": "6.4.*",
|
|
||||||
"symfony/web-profiler-bundle": "6.4.*"
|
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"App\\": "src/"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"autoload-dev": {
|
||||||
|
"psr-4": {
|
||||||
|
"App\\Tests\\": "tests/"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"replace": {
|
||||||
|
"symfony/polyfill-ctype": "*",
|
||||||
|
"symfony/polyfill-iconv": "*",
|
||||||
|
"symfony/polyfill-php72": "*",
|
||||||
|
"symfony/polyfill-php73": "*",
|
||||||
|
"symfony/polyfill-php74": "*",
|
||||||
|
"symfony/polyfill-php80": "*",
|
||||||
|
"symfony/polyfill-php81": "*"
|
||||||
|
},
|
||||||
|
"scripts": {
|
||||||
|
"rector": "vendor/bin/rector process",
|
||||||
|
"rector:dry-run": "vendor/bin/rector process --dry-run",
|
||||||
|
"auto-scripts": {
|
||||||
|
"cache:clear": "symfony-cmd",
|
||||||
|
"assets:install %PUBLIC_DIR%": "symfony-cmd"
|
||||||
|
},
|
||||||
|
"post-install-cmd": [
|
||||||
|
"@auto-scripts"
|
||||||
|
],
|
||||||
|
"post-update-cmd": [
|
||||||
|
"@auto-scripts"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"conflict": {
|
||||||
|
"symfony/symfony": "*"
|
||||||
|
},
|
||||||
|
"extra": {
|
||||||
|
"symfony": {
|
||||||
|
"allow-contrib": true,
|
||||||
|
"require": "6.4.*",
|
||||||
|
"docker": true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"deployer/deployer": "^7.5",
|
||||||
|
"friendsofphp/php-cs-fixer": "^3.75",
|
||||||
|
"phpstan/phpstan": "^2.1",
|
||||||
|
"phpstan/phpstan-doctrine": "^2.0",
|
||||||
|
"phpstan/phpstan-symfony": "^2.0",
|
||||||
|
"phpunit/phpunit": "^9.5",
|
||||||
|
"rector/rector": "^2.4",
|
||||||
|
"symfony/browser-kit": "6.4.*",
|
||||||
|
"symfony/css-selector": "6.4.*",
|
||||||
|
"symfony/debug-bundle": "6.4.*",
|
||||||
|
"symfony/maker-bundle": "^1.0",
|
||||||
|
"symfony/phpunit-bridge": "^7.1",
|
||||||
|
"symfony/stopwatch": "6.4.*",
|
||||||
|
"symfony/web-profiler-bundle": "6.4.*"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -13,7 +13,10 @@ return [
|
|||||||
Symfony\Bundle\MakerBundle\MakerBundle::class => ['dev' => true],
|
Symfony\Bundle\MakerBundle\MakerBundle::class => ['dev' => true],
|
||||||
Symfony\UX\StimulusBundle\StimulusBundle::class => ['all' => true],
|
Symfony\UX\StimulusBundle\StimulusBundle::class => ['all' => true],
|
||||||
Symfony\WebpackEncoreBundle\WebpackEncoreBundle::class => ['all' => true],
|
Symfony\WebpackEncoreBundle\WebpackEncoreBundle::class => ['all' => true],
|
||||||
Knp\Bundle\MenuBundle\KnpMenuBundle::class => ['all' => true],
|
|
||||||
League\FlysystemBundle\FlysystemBundle::class => ['all' => true],
|
League\FlysystemBundle\FlysystemBundle::class => ['all' => true],
|
||||||
League\Bundle\OAuth2ServerBundle\LeagueOAuth2ServerBundle::class => ['all' => true],
|
League\Bundle\OAuth2ServerBundle\LeagueOAuth2ServerBundle::class => ['all' => true],
|
||||||
|
Zenstruck\ScheduleBundle\ZenstruckScheduleBundle::class => ['all' => true],
|
||||||
|
Flagception\Bundle\FlagceptionBundle\FlagceptionBundle::class => ['all' => true],
|
||||||
|
Knp\Bundle\MenuBundle\KnpMenuBundle::class => ['all' => true],
|
||||||
|
Knp\Bundle\PaginatorBundle\KnpPaginatorBundle::class => ['all' => true],
|
||||||
];
|
];
|
||||||
@@ -15,5 +15,7 @@ framework:
|
|||||||
#app: cache.adapter.apcu
|
#app: cache.adapter.apcu
|
||||||
|
|
||||||
# Namespaced pools use the above "app" backend by default
|
# Namespaced pools use the above "app" backend by default
|
||||||
#pools:
|
pools:
|
||||||
#my.dedicated.cache: null
|
bpn.cache:
|
||||||
|
adapter: cache.adapter.filesystem
|
||||||
|
tags: true
|
||||||
@@ -11,10 +11,11 @@ doctrine:
|
|||||||
orm:
|
orm:
|
||||||
auto_generate_proxy_classes: true
|
auto_generate_proxy_classes: true
|
||||||
enable_lazy_ghost_objects: true
|
enable_lazy_ghost_objects: true
|
||||||
report_fields_where_declared: true
|
|
||||||
validate_xml_mapping: true
|
validate_xml_mapping: true
|
||||||
naming_strategy: doctrine.orm.naming_strategy.underscore_number_aware
|
naming_strategy: doctrine.orm.naming_strategy.underscore_number_aware
|
||||||
auto_mapping: true
|
auto_mapping: true
|
||||||
|
controller_resolver:
|
||||||
|
auto_mapping: false
|
||||||
mappings:
|
mappings:
|
||||||
App:
|
App:
|
||||||
type: attribute
|
type: attribute
|
||||||
|
|||||||
@@ -0,0 +1,2 @@
|
|||||||
|
flagception:
|
||||||
|
features: {}
|
||||||
@@ -1,16 +1,17 @@
|
|||||||
flysystem:
|
flysystem:
|
||||||
storages:
|
storages:
|
||||||
xml_export.storage:
|
xml_export.storage:
|
||||||
adapter: 'local'
|
local:
|
||||||
options:
|
|
||||||
directory: '%env(resolve:XML_EXPORT_PATH)%'
|
directory: '%env(resolve:XML_EXPORT_PATH)%'
|
||||||
|
xml_source.storage:
|
||||||
|
sftp:
|
||||||
|
host: '%env(SFTP_XML_EXPORT_HOST)%'
|
||||||
|
port: '%env(int:SFTP_XML_EXPORT_PORT)%'
|
||||||
|
username: '%env(SFTP_XML_EXPORT_USER)%'
|
||||||
|
password: '%env(SFTP_XML_EXPORT_PASSWORD)%'
|
||||||
xml_dump.storage:
|
xml_dump.storage:
|
||||||
adapter: 'local'
|
local:
|
||||||
options:
|
|
||||||
directory: '%kernel.project_dir%/var/bpn'
|
directory: '%kernel.project_dir%/var/bpn'
|
||||||
# adapter: 'sftp'
|
json_export.storage:
|
||||||
# options:
|
local:
|
||||||
# host: '%env(SFTP_XML_EXPORT_HOST)%'
|
directory: '%env(resolve:JSON_EXPORT_PATH)%'
|
||||||
# port: '%env(int:SFTP_XML_EXPORT_PORT)%'
|
|
||||||
# username: '%env(SFTP_XML_EXPORT_USER)%'
|
|
||||||
# password: '%env(SFTP_XML_EXPORT_PASSWORD)%'
|
|
||||||
@@ -9,15 +9,21 @@ framework:
|
|||||||
# Remove or comment this section to explicitly disable session support.
|
# Remove or comment this section to explicitly disable session support.
|
||||||
session:
|
session:
|
||||||
handler_id: null
|
handler_id: null
|
||||||
cookie_secure: auto
|
cookie_secure: true
|
||||||
# cookie_samesite: lax
|
cookie_samesite: lax
|
||||||
cookie_samesite: none # this is to make login work in staging environment. to be removed when going live!
|
|
||||||
|
|
||||||
#esi: true
|
#esi: true
|
||||||
#fragments: true
|
#fragments: true
|
||||||
php_errors:
|
php_errors:
|
||||||
log: true
|
log: true
|
||||||
|
|
||||||
|
http_client:
|
||||||
|
scoped_clients:
|
||||||
|
typo3.client:
|
||||||
|
base_uri: '%env(resolve:APP_CMS_API_BASE_URL)%'
|
||||||
|
headers:
|
||||||
|
accept: 'text/json'
|
||||||
|
|
||||||
when@test:
|
when@test:
|
||||||
framework:
|
framework:
|
||||||
test: true
|
test: true
|
||||||
|
|||||||
@@ -0,0 +1,3 @@
|
|||||||
|
knp_menu:
|
||||||
|
twig:
|
||||||
|
template: _partials/_menu.html.twig
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
knp_paginator:
|
||||||
|
default_options:
|
||||||
|
page_name: page
|
||||||
|
sort_field_name: sort
|
||||||
|
sort_direction_name: direction
|
||||||
|
distinct: true
|
||||||
|
filter_field_name: filterField
|
||||||
|
filter_value_name: filterValue
|
||||||
|
template:
|
||||||
|
pagination: '_partials/_paginator_sliding.html.twig'
|
||||||
|
sortable: '_partials/_paginator_sortable_link.html.twig'
|
||||||
@@ -3,15 +3,16 @@ league_oauth2_server:
|
|||||||
private_key: '%env(resolve:OAUTH_PRIVATE_KEY)%'
|
private_key: '%env(resolve:OAUTH_PRIVATE_KEY)%'
|
||||||
private_key_passphrase: null
|
private_key_passphrase: null
|
||||||
encryption_key: '%env(resolve:OAUTH_ENCRYPTION_KEY)%'
|
encryption_key: '%env(resolve:OAUTH_ENCRYPTION_KEY)%'
|
||||||
|
require_code_challenge_for_public_clients: true
|
||||||
enable_client_credentials_grant: true
|
enable_client_credentials_grant: true
|
||||||
enable_auth_code_grant: true
|
enable_auth_code_grant: true
|
||||||
enable_refresh_token_grant: false
|
enable_refresh_token_grant: true
|
||||||
enable_password_grant: false
|
enable_password_grant: false
|
||||||
access_token_ttl: PT10M
|
access_token_ttl: PT10M
|
||||||
resource_server:
|
resource_server:
|
||||||
public_key: '%env(resolve:OAUTH_PUBLIC_KEY)%'
|
public_key: '%env(resolve:OAUTH_PUBLIC_KEY)%'
|
||||||
scopes:
|
scopes:
|
||||||
available: ['email','profile','api']
|
available: ['email','id','profile','roles','api']
|
||||||
default: ['email']
|
default: ['email']
|
||||||
persistence:
|
persistence:
|
||||||
doctrine: null
|
doctrine: null
|
||||||
|
|||||||
@@ -0,0 +1,2 @@
|
|||||||
|
framework:
|
||||||
|
lock: '%env(LOCK_DSN)%'
|
||||||
@@ -13,7 +13,7 @@ framework:
|
|||||||
max_retries: 3
|
max_retries: 3
|
||||||
multiplier: 2
|
multiplier: 2
|
||||||
failed: 'doctrine://default?queue_name=failed'
|
failed: 'doctrine://default?queue_name=failed'
|
||||||
# sync: 'sync://'
|
sync: 'sync://'
|
||||||
|
|
||||||
default_bus: messenger.bus.default
|
default_bus: messenger.bus.default
|
||||||
|
|
||||||
@@ -21,9 +21,10 @@ framework:
|
|||||||
messenger.bus.default: []
|
messenger.bus.default: []
|
||||||
|
|
||||||
routing:
|
routing:
|
||||||
Symfony\Component\Mailer\Messenger\SendEmailMessage: async
|
Symfony\Component\Mailer\Messenger\SendEmailMessage: sync
|
||||||
Symfony\Component\Notifier\Message\ChatMessage: async
|
Symfony\Component\Notifier\Message\ChatMessage: async
|
||||||
Symfony\Component\Notifier\Message\SmsMessage: async
|
Symfony\Component\Notifier\Message\SmsMessage: async
|
||||||
|
App\Message\MailjetNewsletterEventMessage: async
|
||||||
|
|
||||||
# Route your messages to the transports
|
# Route your messages to the transports
|
||||||
# 'App\Message\YourMessage': async
|
# 'App\Message\YourMessage': async
|
||||||
@@ -4,6 +4,7 @@ monolog:
|
|||||||
- bpn
|
- bpn
|
||||||
- core
|
- core
|
||||||
- auth
|
- auth
|
||||||
|
- admin
|
||||||
|
|
||||||
when@dev:
|
when@dev:
|
||||||
monolog:
|
monolog:
|
||||||
@@ -27,11 +28,16 @@ when@dev:
|
|||||||
path: "%kernel.logs_dir%/%kernel.environment%.core.log"
|
path: "%kernel.logs_dir%/%kernel.environment%.core.log"
|
||||||
level: debug
|
level: debug
|
||||||
channels: ["core"]
|
channels: ["core"]
|
||||||
|
admin:
|
||||||
|
type: stream
|
||||||
|
path: "%kernel.logs_dir%/%kernel.environment%.admin.log"
|
||||||
|
level: debug
|
||||||
|
channels: ["admin"]
|
||||||
main:
|
main:
|
||||||
type: stream
|
type: stream
|
||||||
path: "%kernel.logs_dir%/%kernel.environment%.log"
|
path: "%kernel.logs_dir%/%kernel.environment%.log"
|
||||||
level: debug
|
level: debug
|
||||||
channels: ["!event", "!bpn", "!core", "!auth"]
|
channels: ["!event", "!bpn", "!core", "!auth", "!admin"]
|
||||||
# uncomment to get logging in your browser
|
# uncomment to get logging in your browser
|
||||||
# you may have to allow bigger header sizes in your Web server configuration
|
# you may have to allow bigger header sizes in your Web server configuration
|
||||||
#firephp:
|
#firephp:
|
||||||
@@ -59,7 +65,7 @@ when@test:
|
|||||||
path: "%kernel.logs_dir%/%kernel.environment%.log"
|
path: "%kernel.logs_dir%/%kernel.environment%.log"
|
||||||
level: debug
|
level: debug
|
||||||
|
|
||||||
when@prod:
|
when@prod: &prod_config
|
||||||
monolog:
|
monolog:
|
||||||
handlers:
|
handlers:
|
||||||
database:
|
database:
|
||||||
@@ -73,9 +79,10 @@ when@prod:
|
|||||||
level: info
|
level: info
|
||||||
channels: ["bpn"]
|
channels: ["bpn"]
|
||||||
auth:
|
auth:
|
||||||
type: stream
|
type: rotating_file
|
||||||
|
max_files: 7
|
||||||
path: "%kernel.logs_dir%/%kernel.environment%.auth.log"
|
path: "%kernel.logs_dir%/%kernel.environment%.auth.log"
|
||||||
level: debug
|
level: info
|
||||||
channels: ["auth"]
|
channels: ["auth"]
|
||||||
core:
|
core:
|
||||||
type: rotating_file
|
type: rotating_file
|
||||||
@@ -83,13 +90,19 @@ when@prod:
|
|||||||
path: "%kernel.logs_dir%/%kernel.environment%.core.log"
|
path: "%kernel.logs_dir%/%kernel.environment%.core.log"
|
||||||
level: info
|
level: info
|
||||||
channels: ["core"]
|
channels: ["core"]
|
||||||
|
admin:
|
||||||
|
type: rotating_file
|
||||||
|
max_files: 7
|
||||||
|
path: "%kernel.logs_dir%/%kernel.environment%.admin.log"
|
||||||
|
level: info
|
||||||
|
channels: ["admin"]
|
||||||
main:
|
main:
|
||||||
type: fingers_crossed
|
type: fingers_crossed
|
||||||
action_level: error
|
action_level: error
|
||||||
handler: nested
|
handler: nested
|
||||||
excluded_http_codes: [404, 405]
|
excluded_http_codes: [404, 405]
|
||||||
buffer_size: 50 # How many messages should be saved? Prevent memory leaks
|
buffer_size: 50 # How many messages should be saved? Prevent memory leaks
|
||||||
channels: ["!bpn", "!core", "!auth"]
|
channels: ["!bpn", "!core", "!auth", "!admin"]
|
||||||
nested:
|
nested:
|
||||||
type: rotating_file
|
type: rotating_file
|
||||||
path: "%kernel.logs_dir%/%kernel.environment%.framework.log"
|
path: "%kernel.logs_dir%/%kernel.environment%.framework.log"
|
||||||
@@ -104,3 +117,5 @@ when@prod:
|
|||||||
channels: [deprecation]
|
channels: [deprecation]
|
||||||
path: php://stderr
|
path: php://stderr
|
||||||
formatter: monolog.formatter.json
|
formatter: monolog.formatter.json
|
||||||
|
|
||||||
|
when@staging: *prod_config
|
||||||
@@ -1,6 +1,7 @@
|
|||||||
security:
|
security:
|
||||||
# https://symfony.com/doc/current/security.html#registering-the-user-hashing-passwords
|
# https://symfony.com/doc/current/security.html#registering-the-user-hashing-passwords
|
||||||
password_hashers:
|
password_hashers:
|
||||||
|
Symfony\Component\Security\Core\User\InMemoryUser: 'plaintext'
|
||||||
Symfony\Component\Security\Core\User\PasswordAuthenticatedUserInterface: 'auto'
|
Symfony\Component\Security\Core\User\PasswordAuthenticatedUserInterface: 'auto'
|
||||||
# https://symfony.com/doc/current/security.html#loading-the-user-the-user-provider
|
# https://symfony.com/doc/current/security.html#loading-the-user-the-user-provider
|
||||||
providers:
|
providers:
|
||||||
@@ -8,6 +9,12 @@ security:
|
|||||||
entity:
|
entity:
|
||||||
class: App\Entity\User
|
class: App\Entity\User
|
||||||
property: email
|
property: email
|
||||||
|
mailjet_webhook_provider:
|
||||||
|
memory:
|
||||||
|
users:
|
||||||
|
mailjet:
|
||||||
|
password: '%env(MAILJET_WEBHOOK_BASIC_PASSWORD)%'
|
||||||
|
roles: ['ROLE_MAILJET_WEBHOOK']
|
||||||
firewalls:
|
firewalls:
|
||||||
dev:
|
dev:
|
||||||
pattern: ^/(_(profiler|wdt)|css|images|js)/
|
pattern: ^/(_(profiler|wdt)|css|images|js)/
|
||||||
@@ -19,7 +26,15 @@ security:
|
|||||||
pattern: ^/api
|
pattern: ^/api
|
||||||
security: true
|
security: true
|
||||||
stateless: true
|
stateless: true
|
||||||
|
provider: app_user_provider
|
||||||
oauth2: true
|
oauth2: true
|
||||||
|
mailjet_webhook:
|
||||||
|
pattern: ^/webhooks/mailjet/newsletter$
|
||||||
|
security: true
|
||||||
|
stateless: true
|
||||||
|
provider: mailjet_webhook_provider
|
||||||
|
http_basic:
|
||||||
|
realm: 'Mailjet Webhook'
|
||||||
main:
|
main:
|
||||||
lazy: true
|
lazy: true
|
||||||
provider: app_user_provider
|
provider: app_user_provider
|
||||||
@@ -32,7 +47,10 @@ security:
|
|||||||
# Easy way to control access for large sections of your site
|
# Easy way to control access for large sections of your site
|
||||||
# Note: Only the *first* access control that matches will be used
|
# Note: Only the *first* access control that matches will be used
|
||||||
access_control:
|
access_control:
|
||||||
- { path: ^/authorize, roles: IS_AUTHENTICATED_REMEMBERED }
|
- { path: ^/webhooks/mailjet/newsletter$, roles: ROLE_MAILJET_WEBHOOK, requires_channel: https }
|
||||||
|
- { path: ^/authorize, roles: IS_AUTHENTICATED_REMEMBERED, requires_channel: https }
|
||||||
|
- { path: ^/admin, roles: ROLE_ADMIN, requires_channel: https }
|
||||||
|
- { path: ^/, roles: PUBLIC_ACCESS, requires_channel: https }
|
||||||
|
|
||||||
when@test:
|
when@test:
|
||||||
security:
|
security:
|
||||||
@@ -41,6 +59,7 @@ when@test:
|
|||||||
# important to generate secure password hashes. In tests however, secure hashes
|
# important to generate secure password hashes. In tests however, secure hashes
|
||||||
# are not important, waste resources and increase test times. The following
|
# are not important, waste resources and increase test times. The following
|
||||||
# reduces the work factor to the lowest possible values.
|
# reduces the work factor to the lowest possible values.
|
||||||
|
Symfony\Component\Security\Core\User\InMemoryUser: 'plaintext'
|
||||||
Symfony\Component\Security\Core\User\PasswordAuthenticatedUserInterface:
|
Symfony\Component\Security\Core\User\PasswordAuthenticatedUserInterface:
|
||||||
algorithm: auto
|
algorithm: auto
|
||||||
cost: 4 # Lowest possible value for bcrypt
|
cost: 4 # Lowest possible value for bcrypt
|
||||||
|
|||||||
@@ -1,6 +1,16 @@
|
|||||||
twig:
|
twig:
|
||||||
file_name_pattern: '*.twig'
|
file_name_pattern: '*.twig'
|
||||||
form_themes: ['forms.html.twig']
|
form_themes: ['forms.html.twig']
|
||||||
|
paths:
|
||||||
|
'%kernel.project_dir%/assets/images': images
|
||||||
|
globals:
|
||||||
|
htmx_change_trigger: 'change delay:100ms'
|
||||||
|
website_base_url: '%env(APP_WEBSITE_BASE_URL)%'
|
||||||
|
customer_service_email: '%env(APP_CUSTOMER_SERVICE_EMAIL)%'
|
||||||
|
legal_notice_url: '%env(APP_LEGAL_NOTICE_URL)%'
|
||||||
|
terms_and_conditions_url: '%env(APP_TERMS_AND_CONDITIONS_URL)%'
|
||||||
|
privacy_policy_url: '%env(APP_PRIVACY_POLICY_URL)%'
|
||||||
|
insurance_revocation_url: '%env(APP_INSURANCE_REVOCATION_URL)%'
|
||||||
|
|
||||||
when@test:
|
when@test:
|
||||||
twig:
|
twig:
|
||||||
|
|||||||
@@ -0,0 +1,60 @@
|
|||||||
|
zenstruck_schedule:
|
||||||
|
timezone: Europe/Berlin
|
||||||
|
|
||||||
|
mailer:
|
||||||
|
service: mailer
|
||||||
|
default_to: [email protected]
|
||||||
|
default_from: [email protected]
|
||||||
|
subject_prefix: "[MyE&P]"
|
||||||
|
|
||||||
|
schedule_extensions:
|
||||||
|
email_on_failure:
|
||||||
|
enabled: true
|
||||||
|
|
||||||
|
tasks:
|
||||||
|
- task: app:cleanup:xml-dumps
|
||||||
|
frequency: "0 1 * * *"
|
||||||
|
description: "Removes outdated XML dumps of requests/responses to BPN API for debugging"
|
||||||
|
|
||||||
|
- task: app:cleanup:log-entries
|
||||||
|
frequency: "15 1 * * *"
|
||||||
|
description: "Removes outdated log entries with a retention period of 6 months"
|
||||||
|
|
||||||
|
- task: app:draft:cleanup
|
||||||
|
frequency: "30 1 * * *"
|
||||||
|
description: "Removes expired drafts"
|
||||||
|
|
||||||
|
- task: app:cleanup:newsletter-opt-in-requests
|
||||||
|
frequency: "45 1 * * *"
|
||||||
|
description: "Removes expired pending newsletter double opt-in requests"
|
||||||
|
|
||||||
|
- task: league:oauth2-server:clear-expired-tokens
|
||||||
|
frequency: "0 * * * *"
|
||||||
|
description: "Removes expired oauth2 tokens hourly"
|
||||||
|
|
||||||
|
- task: app:bpn:refresh-travel-snapshot --refresh-after 60
|
||||||
|
frequency: "10 8-19 * * *"
|
||||||
|
description: "Syncs travel data snapshots with BusPro XML data hourly during peak hours"
|
||||||
|
|
||||||
|
- task: app:bpn:refresh-travel-snapshot --refresh-after 180
|
||||||
|
frequency: "10 20-23,0-7 * * *"
|
||||||
|
description: "Syncs travel data snapshots with BusPro XML data every 3 hours outside peak hours"
|
||||||
|
|
||||||
|
when@staging:
|
||||||
|
zenstruck_schedule:
|
||||||
|
mailer:
|
||||||
|
subject_prefix: "[MyE&P STAGING]"
|
||||||
|
|
||||||
|
when@prod:
|
||||||
|
zenstruck_schedule:
|
||||||
|
mailer:
|
||||||
|
subject_prefix: "[MyE&P PROD]"
|
||||||
|
|
||||||
|
tasks:
|
||||||
|
- task: app:bpn:xml-sync
|
||||||
|
frequency: "*/15 8-19 * * *"
|
||||||
|
description: "Syncs BusPro XML data every 15 min. during peak hours"
|
||||||
|
|
||||||
|
- task: app:bpn:xml-sync
|
||||||
|
frequency: "0 20-23,0-7 * * *"
|
||||||
|
description: "Syncs BusPro XML data hourly outside peak hours"
|
||||||
@@ -5,7 +5,62 @@
|
|||||||
# https://symfony.com/doc/current/best_practices.html#use-parameters-for-application-configuration
|
# https://symfony.com/doc/current/best_practices.html#use-parameters-for-application-configuration
|
||||||
parameters:
|
parameters:
|
||||||
travel_info_base_url: '%env(APP_TRAVEL_INFO_BASE_URL)%'
|
travel_info_base_url: '%env(APP_TRAVEL_INFO_BASE_URL)%'
|
||||||
|
terms_and_conditions_url: '%env(APP_TERMS_AND_CONDITIONS_URL)%'
|
||||||
path_to_keys: '%kernel.project_dir%/config/secret'
|
path_to_keys: '%kernel.project_dir%/config/secret'
|
||||||
|
bpn_debug: '%env(APP_BPN_DEBUG)%'
|
||||||
|
default_booking_status: '%env(DEFAULT_BOOKING_STATUS)%'
|
||||||
|
newsletter_confirmation_ttl_hours: '%env(int:APP_NEWSLETTER_CONFIRMATION_TTL_HOURS)%'
|
||||||
|
travel_snapshot_retention_buffer_days: '%env(int:APP_TRAVEL_SNAPSHOT_RETENTION_BUFFER_DAYS)%'
|
||||||
|
default_email_from: '%env(APP_DEFAULT_EMAIL_FROM)%'
|
||||||
|
default_email_to: '%env(APP_DEFAULT_EMAIL_TO)%'
|
||||||
|
|
||||||
|
# MailJet list ids and their labels
|
||||||
|
mailjet_lists:
|
||||||
|
10321569: 'E&P Newsletter'
|
||||||
|
10321382: 'Reisen-Alert Ahrntal'
|
||||||
|
10321383: 'Reisen-Alert Davos'
|
||||||
|
10321391: 'Reisen-Alert Familienreisen'
|
||||||
|
10321384: 'Reisen-Alert Arosa-Lenzerheide'
|
||||||
|
10321385: 'Reisen-Alert Les Deux Alpes'
|
||||||
|
10321386: 'Reisen-Alert Montafon'
|
||||||
|
10321387: 'Reisen-Alert Portes du Soleil'
|
||||||
|
10321388: 'Reisen-Alert Saalbach-Hinterglemm'
|
||||||
|
10538809: 'Reisen-Alert Scuol'
|
||||||
|
10321389: 'Reisen-Alert Stubaital'
|
||||||
|
10554990: 'Reisen-Alert Ski & Boarderweek'
|
||||||
|
|
||||||
|
# MailJet contact metadata names for name synchronization
|
||||||
|
mailjet_contact_metadata_fields:
|
||||||
|
firstName: 'vorname'
|
||||||
|
lastName: 'nachname'
|
||||||
|
|
||||||
|
# Body dimensions ranges for BodyDimensionsType and ParticipantValidator
|
||||||
|
body_dimension_ranges:
|
||||||
|
height_min: 145
|
||||||
|
height_max: 210
|
||||||
|
weight_min: 40
|
||||||
|
weight_max: 120
|
||||||
|
shoe_size_min: 35
|
||||||
|
shoe_size_max: 50
|
||||||
|
|
||||||
|
# domain mapping for theme, gtm id and cmp url
|
||||||
|
domain_config:
|
||||||
|
ep-reisen.de:
|
||||||
|
theme: base
|
||||||
|
gtm_id: GTM-56LWRF
|
||||||
|
cmp_url: https://consent.cookiefirst.com/sites/my.ep-reisen.de-28eabc35-7085-4d8f-b450-522bd1a5247c/consent.js
|
||||||
|
ski-boarderweek.de:
|
||||||
|
theme: sbw
|
||||||
|
gtm_id: GTM-MS2C8CH
|
||||||
|
cmp_url: https://consent.cookiefirst.com/sites/my.ski-boarderweek.de-d3641c34-8183-4b8d-b56e-c052e7a9223e/consent.js
|
||||||
|
semesterende-skireisen.de:
|
||||||
|
theme: ser
|
||||||
|
gtm_id: GTM-MNKDKL9
|
||||||
|
cmp_url: https://consent.cookiefirst.com/sites/my.semesterende-skireisen.de-c9b3422d-eb62-4ce4-b8f7-91e9b509e26f/consent.js
|
||||||
|
snowzone.net:
|
||||||
|
theme: snz
|
||||||
|
gtm_id: GTM-M96CKL
|
||||||
|
cmp_url: https://consent.cookiefirst.com/sites/my.snowzone.net-8e6aea0c-7d93-42a0-a822-29fff2aa5613/consent.js
|
||||||
|
|
||||||
services:
|
services:
|
||||||
# default configuration for services in *this* file
|
# default configuration for services in *this* file
|
||||||
@@ -14,9 +69,13 @@ services:
|
|||||||
autoconfigure: true # Automatically registers your services as commands, event subscribers, etc.
|
autoconfigure: true # Automatically registers your services as commands, event subscribers, etc.
|
||||||
bind:
|
bind:
|
||||||
$xmlExport: '@xml_export.storage'
|
$xmlExport: '@xml_export.storage'
|
||||||
|
$xmlSource: '@xml_source.storage'
|
||||||
$xmlDump: '@xml_dump.storage'
|
$xmlDump: '@xml_dump.storage'
|
||||||
|
$jsonExport: '@json_export.storage'
|
||||||
$travelInfoBaseUrl: '%env(APP_TRAVEL_INFO_BASE_URL)%'
|
$travelInfoBaseUrl: '%env(APP_TRAVEL_INFO_BASE_URL)%'
|
||||||
|
$termsAndConditionsUrl: '%terms_and_conditions_url%'
|
||||||
$logger: '@monolog.logger.core'
|
$logger: '@monolog.logger.core'
|
||||||
|
$environment: '%kernel.environment%'
|
||||||
|
|
||||||
# makes classes in src/ available to be used as services
|
# makes classes in src/ available to be used as services
|
||||||
# this creates a service per class whose id is the fully-qualified class name
|
# this creates a service per class whose id is the fully-qualified class name
|
||||||
@@ -25,6 +84,7 @@ services:
|
|||||||
exclude:
|
exclude:
|
||||||
- '../src/DependencyInjection/'
|
- '../src/DependencyInjection/'
|
||||||
- '../src/Entity/'
|
- '../src/Entity/'
|
||||||
|
- '../src/Model'
|
||||||
- '../src/Kernel.php'
|
- '../src/Kernel.php'
|
||||||
|
|
||||||
App\BusProNet\ApiClient:
|
App\BusProNet\ApiClient:
|
||||||
@@ -34,31 +94,170 @@ services:
|
|||||||
bpn_username: '%env(APP_BPN_USER)%'
|
bpn_username: '%env(APP_BPN_USER)%'
|
||||||
bpn_password: '%env(APP_BPN_PASSWORD)%'
|
bpn_password: '%env(APP_BPN_PASSWORD)%'
|
||||||
bpn_api_ip: '%env(APP_BPN_IP)%'
|
bpn_api_ip: '%env(APP_BPN_IP)%'
|
||||||
bpn_api_port: '%env(APP_BPN_PORT)%'
|
bpn_api_ports: '%env(csv:APP_BPN_PORTS)%'
|
||||||
debug: '%env(bool:APP_BPN_DEBUG)%'
|
debug: '%env(bool:APP_BPN_DEBUG)%'
|
||||||
|
connection_timeout: '%env(int:APP_BPN_CONNECTION_TIMEOUT)%'
|
||||||
|
stream_timeout: '%env(int:APP_BPN_STREAM_TIMEOUT)%'
|
||||||
|
total_timeout: '%env(int:APP_BPN_TOTAL_TIMEOUT)%'
|
||||||
|
|
||||||
App\Twig\AppRuntime:
|
App\Twig\AppRuntime:
|
||||||
arguments:
|
arguments:
|
||||||
$intlExtension: '@twig.extension.intl'
|
$intlExtension: '@twig.extension.intl'
|
||||||
|
|
||||||
App\Menu\MenuBuilder:
|
App\Command\GenerateKeysCommand:
|
||||||
|
arguments:
|
||||||
|
$path: '%path_to_keys%'
|
||||||
|
|
||||||
|
App\Menu\AdminMenuBuilder:
|
||||||
arguments:
|
arguments:
|
||||||
$factory: '@knp_menu.factory'
|
$factory: '@knp_menu.factory'
|
||||||
tags:
|
tags:
|
||||||
- name: knp_menu.menu_builder
|
- name: knp_menu.menu_builder
|
||||||
method: createMainMenu
|
method: createMainMenu
|
||||||
alias: main
|
alias: admin_main
|
||||||
|
|
||||||
App\Command\GenerateKeysCommand:
|
App\Service\BpnXmlSyncManager:
|
||||||
arguments:
|
arguments:
|
||||||
$path: '%path_to_keys%'
|
$xmlSource: '@xml_source.storage'
|
||||||
|
$xmlExport: '@xml_export.storage'
|
||||||
|
$bpnCache: '@bpn.cache'
|
||||||
|
|
||||||
|
App\Command\BpnXmlCacheInvalidateCommand:
|
||||||
|
arguments:
|
||||||
|
$xmlExport: '@xml_export.storage'
|
||||||
|
$bpnCache: '@bpn.cache'
|
||||||
|
$cache: '@cache.app'
|
||||||
|
|
||||||
App\Security\Crypt:
|
App\Security\Crypt:
|
||||||
arguments:
|
arguments:
|
||||||
$path: '%path_to_keys%'
|
$path: '%path_to_keys%'
|
||||||
|
|
||||||
App\Service\TravelDataService:
|
App\Service\TravelSnapshotManager:
|
||||||
|
arguments:
|
||||||
|
$retentionBufferDays: '%travel_snapshot_retention_buffer_days%'
|
||||||
|
|
||||||
|
App\Service\TravelDataProvider:
|
||||||
arguments:
|
arguments:
|
||||||
$logger: '@monolog.logger.core'
|
$logger: '@monolog.logger.core'
|
||||||
$preferRemote: '%env(bool:APP_TRAVEL_PREFER_REMOTE)%'
|
$preferRemote: '%env(bool:APP_TRAVEL_PREFER_REMOTE)%'
|
||||||
$enableFallback: '%env(bool:APP_TRAVEL_ENABLE_FALLBACK)%'
|
$enableFallback: '%env(bool:APP_TRAVEL_ENABLE_FALLBACK)%'
|
||||||
|
|
||||||
|
App\Service\ParticipantFormSupport:
|
||||||
|
arguments:
|
||||||
|
$bodyDimensionRanges: '%body_dimension_ranges%'
|
||||||
|
|
||||||
|
App\Service\BookingEditDataLoader:
|
||||||
|
arguments:
|
||||||
|
$bpnCache: '@bpn.cache'
|
||||||
|
|
||||||
|
App\BusProNet\XmlLoader\TravelLoader:
|
||||||
|
arguments:
|
||||||
|
$cache: '@bpn.cache'
|
||||||
|
|
||||||
|
App\BusProNet\XmlLoader\HotelLoader:
|
||||||
|
arguments:
|
||||||
|
$cache: '@bpn.cache'
|
||||||
|
|
||||||
|
App\BusProNet\XmlLoader\PickupLoader:
|
||||||
|
arguments:
|
||||||
|
$cache: '@bpn.cache'
|
||||||
|
|
||||||
|
App\BusProNet\XmlLoader\InsuranceLoader:
|
||||||
|
arguments:
|
||||||
|
$cache: '@bpn.cache'
|
||||||
|
|
||||||
|
App\Service\VoucherValidator:
|
||||||
|
arguments:
|
||||||
|
$cache: '@cache.app'
|
||||||
|
$logger: '@monolog.logger.bpn'
|
||||||
|
|
||||||
|
# Field Handlers with dependencies
|
||||||
|
App\Form\Service\ParticipantInsuranceFieldHandler: ~
|
||||||
|
App\Form\Service\ParticipantBulkInsuranceFieldHandler: ~
|
||||||
|
App\Form\Service\ParticipantTransportationDiscountReplacementFieldHandler: ~
|
||||||
|
App\Form\Service\ParticipantPurchaseVoucherFieldHandler: ~
|
||||||
|
App\Form\Service\ParticipantPromoVoucherFieldHandler: ~
|
||||||
|
|
||||||
|
# Participant Field Handler Registry - most handlers instantiate dependencies directly, some use services
|
||||||
|
App\Form\Service\ParticipantFieldHandlerRegistry:
|
||||||
|
arguments:
|
||||||
|
$handlers:
|
||||||
|
# Simple handlers with no external dependencies - instantiated directly
|
||||||
|
- 'App\Form\Service\ParticipantAssignedRoomFieldHandler'
|
||||||
|
- 'App\Form\Service\ParticipantRemarksRoomFieldHandler'
|
||||||
|
- 'App\Form\Service\ParticipantAdditionalServicesFieldHandler'
|
||||||
|
- 'App\Form\Service\ParticipantCoursesFieldHandler'
|
||||||
|
- 'App\Form\Service\ParticipantBoardFieldHandler'
|
||||||
|
- 'App\Form\Service\ParticipantVegFieldHandler'
|
||||||
|
- 'App\Form\Service\ParticipantRentalsFieldHandler'
|
||||||
|
- 'App\Form\Service\ParticipantSkiPassFieldHandler'
|
||||||
|
- 'App\Form\Service\ParticipantTransportationOutboundFieldHandler'
|
||||||
|
- 'App\Form\Service\ParticipantTransportationInboundFieldHandler'
|
||||||
|
- 'App\Form\Service\ParticipantPickupFieldHandler'
|
||||||
|
- 'App\Form\Service\ParticipantDropOffFieldHandler'
|
||||||
|
- 'App\Form\Service\ParticipantParkingFieldHandler'
|
||||||
|
- 'App\Form\Service\ParticipantRentalInsuranceFieldHandler'
|
||||||
|
- 'App\Form\Service\ParticipantLicensePlateFieldHandler'
|
||||||
|
# Complex handlers with dependencies - use service references
|
||||||
|
- '@App\Form\Service\ParticipantDateOfBirthFieldHandler'
|
||||||
|
- '@App\Form\Service\ParticipantTransportationDiscountReplacementFieldHandler'
|
||||||
|
- '@App\Form\Service\ParticipantBulkInsuranceFieldHandler'
|
||||||
|
- '@App\Form\Service\ParticipantInsuranceFieldHandler'
|
||||||
|
- '@App\Form\Service\ParticipantPurchaseVoucherFieldHandler'
|
||||||
|
- '@App\Form\Service\ParticipantPromoVoucherFieldHandler'
|
||||||
|
|
||||||
|
# Booking Status Rules
|
||||||
|
App\BusProNet\Service\StatusRule\Selection1473StatusRule: ~
|
||||||
|
App\BusProNet\Service\StatusRule\ChaperonServiceStatusRule: ~
|
||||||
|
|
||||||
|
# Booking Status Rule Registry
|
||||||
|
App\BusProNet\Service\BookingStatusRuleRegistry:
|
||||||
|
arguments:
|
||||||
|
$rules:
|
||||||
|
- '@App\BusProNet\Service\StatusRule\Selection1473StatusRule'
|
||||||
|
- '@App\BusProNet\Service\StatusRule\ChaperonServiceStatusRule'
|
||||||
|
|
||||||
|
App\Service\CmsDataProvider:
|
||||||
|
arguments:
|
||||||
|
$httpClient: '@typo3.client'
|
||||||
|
$apiKey: 'AbcAbc123'# dummy key, not yet implemented
|
||||||
|
|
||||||
|
App\Logger\RequestIdProcessor:
|
||||||
|
tags:
|
||||||
|
- { name: monolog.processor }
|
||||||
|
|
||||||
|
App\Service\NewsletterManager:
|
||||||
|
arguments:
|
||||||
|
$newsletterConfirmationTtlHours: '%newsletter_confirmation_ttl_hours%'
|
||||||
|
$mailjetLists: '%mailjet_lists%'
|
||||||
|
$defaultMailjetListId: '%env(default::MAILJET_DEFAULT_LIST_ID)%'
|
||||||
|
|
||||||
|
App\Controller\Api\NewsletterSubscriptionController:
|
||||||
|
arguments:
|
||||||
|
$mailjetLists: '%mailjet_lists%'
|
||||||
|
|
||||||
|
App\Controller\Webhook\MailjetNewsletterWebhookController:
|
||||||
|
arguments:
|
||||||
|
$mailjetLists: '%mailjet_lists%'
|
||||||
|
|
||||||
|
App\Service\DomainConfigProvider:
|
||||||
|
arguments:
|
||||||
|
$domainConfig: '%domain_config%'
|
||||||
|
|
||||||
|
App\Email\Mailer:
|
||||||
|
arguments:
|
||||||
|
$defaults:
|
||||||
|
from: '%default_email_from%'
|
||||||
|
to: '%default_email_to%'
|
||||||
|
|
||||||
|
App\Validator\Constraints\ParticipantValidator:
|
||||||
|
arguments:
|
||||||
|
$bodyDimensionRanges: '%body_dimension_ranges%'
|
||||||
|
|
||||||
|
App\Service\MailjetApiClient:
|
||||||
|
arguments:
|
||||||
|
$apiKey: '%env(default::MAILJET_API_KEY)%'
|
||||||
|
$apiSecret: '%env(default::MAILJET_API_SECRET)%'
|
||||||
|
$apiBaseUrl: '%env(default::MAILJET_API_BASE_URL)%'
|
||||||
|
$defaultListId: '%env(default::MAILJET_DEFAULT_LIST_ID)%'
|
||||||
|
$contactMetadataFields: '%mailjet_contact_metadata_fields%'
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
parameters:
|
||||||
|
# domain mapping for theme, gtm id and cmp url
|
||||||
|
domain_config:
|
||||||
|
myep.ddev.site:
|
||||||
|
theme: base
|
||||||
|
gtm_id: GTM-56LWRF
|
||||||
|
cmp_url: https://consent.cookiefirst.com/sites/my.ep-reisen.de-28eabc35-7085-4d8f-b450-522bd1a5247c/consent.js
|
||||||
|
myswb.ddev.site:
|
||||||
|
theme: sbw
|
||||||
|
gtm_id: GTM-MS2C8CH
|
||||||
|
cmp_url: https://consent.cookiefirst.com/sites/my.ski-boarderweek.de-d3641c34-8183-4b8d-b56e-c052e7a9223e/consent.js
|
||||||
|
myser.ddev.site:
|
||||||
|
theme: ser
|
||||||
|
gtm_id: GTM-MNKDKL9
|
||||||
|
cmp_url: https://consent.cookiefirst.com/sites/my.semesterende-skireisen.de-c9b3422d-eb62-4ce4-b8f7-91e9b509e26f/consent.js
|
||||||
|
mysnz.ddev.site:
|
||||||
|
theme: snz
|
||||||
|
gtm_id: GTM-M96CKL
|
||||||
|
cmp_url: https://consent.cookiefirst.com/sites/my.snowzone.net-8e6aea0c-7d93-42a0-a822-29fff2aa5613/consent.js
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
const {defineConfig} = require("cypress");
|
||||||
|
|
||||||
|
module.exports = defineConfig({
|
||||||
|
e2e: {
|
||||||
|
baseUrl: 'https://myep-next-booking.ddev.site',
|
||||||
|
supportFile: false,
|
||||||
|
},
|
||||||
|
});
|
||||||
@@ -0,0 +1,61 @@
|
|||||||
|
describe('Booking test', () => {
|
||||||
|
it('Books a double room on test travel 1', () => {
|
||||||
|
cy.visit('/bookings/create/11946/157047')
|
||||||
|
cy.contains('Neue Buchung')
|
||||||
|
|
||||||
|
// await form refresh after selecting registration type
|
||||||
|
cy.intercept('POST', '/bookings/create/refresh').as('htmxRequest')
|
||||||
|
cy.get('#booking_create_step1_roomSelections_76_quantity').select('1')
|
||||||
|
cy.wait('@htmxRequest')
|
||||||
|
|
||||||
|
cy.intercept('POST', '/bookings/create').as('htmxRequest')
|
||||||
|
cy.get('[data-qa-btn-submit]').click()
|
||||||
|
cy.wait('@htmxRequest')
|
||||||
|
|
||||||
|
cy.intercept('GET', '/bookings/create/participants/0').as('htmxRequest')
|
||||||
|
cy.get('[data-qa-btn-edit-participant="0"]').click()
|
||||||
|
cy.wait('@htmxRequest')
|
||||||
|
|
||||||
|
cy.get('#booking_participant_firstName').type('Theo')
|
||||||
|
cy.get('#booking_participant_lastName').type('Test')
|
||||||
|
cy.get('#booking_participant_email').type('[email protected]')
|
||||||
|
cy.get('#booking_participant_mobile').type('1234567890')
|
||||||
|
cy.get('#booking_participant_address_street').type('Teststraße 1')
|
||||||
|
cy.get('#booking_participant_address_postCode').type('12345')
|
||||||
|
cy.get('#booking_participant_address_city').type('Testhausen')
|
||||||
|
|
||||||
|
cy.intercept('POST', '/bookings/create/participants/0/refresh').as('htmxRequest')
|
||||||
|
cy.get('#booking_participant_dateOfBirth').type('1980-11-11')
|
||||||
|
cy.get('#booking_participant_dateOfBirth').trigger('change')
|
||||||
|
cy.wait('@htmxRequest')
|
||||||
|
|
||||||
|
cy.get('#booking_participant_skiPass_0').check()
|
||||||
|
|
||||||
|
cy.intercept('POST', '/bookings/create/participants/0/refresh').as('htmxRequest')
|
||||||
|
cy.get('#booking_participant_courses_0').check()
|
||||||
|
cy.wait('@htmxRequest')
|
||||||
|
|
||||||
|
cy.intercept('POST', '/bookings/create/participants/0/refresh').as('htmxRequest')
|
||||||
|
cy.get('#booking_participant_insurance_0').check()
|
||||||
|
cy.wait('@htmxRequest')
|
||||||
|
|
||||||
|
cy.intercept('POST', '/bookings/create/participants/0/refresh').as('htmxRequest')
|
||||||
|
cy.get('#booking_participant_transportationOutbound_1').check()
|
||||||
|
cy.wait('@htmxRequest')
|
||||||
|
|
||||||
|
cy.intercept('POST', '/bookings/create/participants/0/refresh').as('htmxRequest')
|
||||||
|
cy.get('#booking_participant_transportationInbound_1').check()
|
||||||
|
cy.wait('@htmxRequest')
|
||||||
|
|
||||||
|
cy.intercept('POST', '/bookings/create/participants/0').as('htmxRequest')
|
||||||
|
cy.get('[data-qa-btn-submit]').click()
|
||||||
|
cy.wait('@htmxRequest')
|
||||||
|
|
||||||
|
cy.intercept('POST', '/bookings/create/participants').as('htmxRequest')
|
||||||
|
cy.get('[data-qa-btn-submit]').click()
|
||||||
|
cy.wait('@htmxRequest')
|
||||||
|
|
||||||
|
cy.get('[data-qa-alert-form-errors]').should('be.visible')
|
||||||
|
cy.get('[data-qa-participant-incomplete="1"]').should('be.visible')
|
||||||
|
})
|
||||||
|
})
|
||||||
@@ -11,23 +11,28 @@ add('shared_dirs', [
|
|||||||
'var/bpn',
|
'var/bpn',
|
||||||
'var/log',
|
'var/log',
|
||||||
'var/sessions',
|
'var/sessions',
|
||||||
|
'var/jsonexport',
|
||||||
|
'var/xmlexport',
|
||||||
]);
|
]);
|
||||||
|
|
||||||
add('shared_files', [
|
add('shared_files', [
|
||||||
'public/.htaccess',
|
'public/.htaccess',
|
||||||
'.env.local.php',
|
|
||||||
'var/data.db',
|
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
set('keep_releases', 3);
|
||||||
|
|
||||||
// Rsync options, mainly files/dirs to exclude
|
// Rsync options, mainly files/dirs to exclude
|
||||||
$rsyncOptions = [
|
$rsyncOptions = [
|
||||||
'exclude' => [
|
'exclude' => [
|
||||||
|
'.claude',
|
||||||
|
'.cursor',
|
||||||
'.idea',
|
'.idea',
|
||||||
'.vscode',
|
'.vscode',
|
||||||
'.DS_Store',
|
'.DS_Store',
|
||||||
'.ddev',
|
'.ddev',
|
||||||
'.git',
|
'.git',
|
||||||
'.github',
|
'.github',
|
||||||
|
'.jj',
|
||||||
'node_modules',
|
'node_modules',
|
||||||
'.editorconfig',
|
'.editorconfig',
|
||||||
'.env.dev.local',
|
'.env.dev.local',
|
||||||
@@ -40,14 +45,18 @@ $rsyncOptions = [
|
|||||||
'.php-cs-fixer.dist.php',
|
'.php-cs-fixer.dist.php',
|
||||||
'.phpunit.result.cache',
|
'.phpunit.result.cache',
|
||||||
'config/secret/',
|
'config/secret/',
|
||||||
|
'CLAUDE.md',
|
||||||
|
'cypress*',
|
||||||
'deploy.php',
|
'deploy.php',
|
||||||
|
'docs',
|
||||||
'package.json',
|
'package.json',
|
||||||
'package-lock.json',
|
'package-lock.json',
|
||||||
'*.http',
|
'*.http',
|
||||||
'http-client.private.env.json',
|
'http-client*.json',
|
||||||
'postcss.config.js',
|
'postcss.config.js',
|
||||||
'phpunit.xml.dist',
|
'phpunit.xml.dist',
|
||||||
'public/.htaccess',
|
'public/.htaccess',
|
||||||
|
'ray.php',
|
||||||
'tailwind.config.js',
|
'tailwind.config.js',
|
||||||
'webpack.config.js',
|
'webpack.config.js',
|
||||||
'bin/.phpunit',
|
'bin/.phpunit',
|
||||||
@@ -68,31 +77,31 @@ $rsyncOptions = [
|
|||||||
];
|
];
|
||||||
|
|
||||||
host('prod')
|
host('prod')
|
||||||
->setHostname('92.205.212.39')
|
->setHostname('185.243.135.29')
|
||||||
->setRemoteUser('ssh-53857-root')
|
->setRemoteUser('p704161')
|
||||||
->setForwardAgent(true)
|
->setForwardAgent(true)
|
||||||
->setSshMultiplexing(true)
|
->setSshMultiplexing(true)
|
||||||
->setDeployPath('/kunden/tiefschnee.de/myep-next')
|
->setDeployPath('/home/www/p704161/html/myep')
|
||||||
->set('writable_mode', 'chmod')
|
|
||||||
->set('http_user', 'ssh-53857-root')
|
|
||||||
->set('bin/php', '/usr/bin/php82')
|
|
||||||
->set('rsync_src', __DIR__)
|
|
||||||
->set('rsync', $rsyncOptions)
|
|
||||||
->set('cachetool_args', '--web=SymfonyHttpClient --web-path={{release_or_current_path}}/public/ --web-url=https://myep.ep-reisen.de')
|
|
||||||
;
|
|
||||||
|
|
||||||
host('staging')
|
|
||||||
->setHostname('185.243.132.170')
|
|
||||||
->setRemoteUser('p546473')
|
|
||||||
->setForwardAgent(true)
|
|
||||||
->setSshMultiplexing(true)
|
|
||||||
->setDeployPath('/home/www/p546473/html/myep')
|
|
||||||
->set('writable_mode', 'chmod')
|
->set('writable_mode', 'chmod')
|
||||||
|
->set('http_user', 'p704161')
|
||||||
->set('bin/php', '/usr/local/bin/php')
|
->set('bin/php', '/usr/local/bin/php')
|
||||||
->set('rsync_src', __DIR__)
|
->set('rsync_src', __DIR__)
|
||||||
->set('rsync', $rsyncOptions)
|
->set('rsync', $rsyncOptions)
|
||||||
->set('keep_releases', 5)
|
->set('cachetool_args', '--web=SymfonyHttpClient --web-path={{current_path}}/public/ --web-url=https://my.ep-reisen.de')
|
||||||
->set('cachetool_args', '--web=SymfonyHttpClient --web-path={{release_or_current_path}}/public/ --web-url=https://myep.dreipunktnull.net')
|
;
|
||||||
|
|
||||||
|
host('staging')
|
||||||
|
->setHostname('185.243.135.29')
|
||||||
|
->setRemoteUser('p704161')
|
||||||
|
->setForwardAgent(true)
|
||||||
|
->setSshMultiplexing(true)
|
||||||
|
->setDeployPath('/home/www/p704161/html/myep-staging')
|
||||||
|
->set('writable_mode', 'chmod')
|
||||||
|
->set('http_user', 'p704161')
|
||||||
|
->set('bin/php', '/usr/local/bin/php')
|
||||||
|
->set('rsync_src', __DIR__)
|
||||||
|
->set('rsync', $rsyncOptions)
|
||||||
|
->set('cachetool_args', '--web=SymfonyHttpClient --web-path={{current_path}}/public/ --web-url=https://my.ep-reisen.net --web-basic-auth=myep:staging')
|
||||||
;
|
;
|
||||||
|
|
||||||
task('deploy', [
|
task('deploy', [
|
||||||
@@ -100,15 +109,22 @@ task('deploy', [
|
|||||||
'deploy:setup',
|
'deploy:setup',
|
||||||
'deploy:lock',
|
'deploy:lock',
|
||||||
'deploy:release',
|
'deploy:release',
|
||||||
|
'deploy:assets',
|
||||||
'rsync',
|
'rsync',
|
||||||
'deploy:shared',
|
'deploy:shared',
|
||||||
'deploy:writable',
|
'deploy:writable',
|
||||||
|
'deploy:cache:clear',
|
||||||
'database:migrate',
|
'database:migrate',
|
||||||
'deploy:publish',
|
|
||||||
'cachetool:clear:opcache',
|
'cachetool:clear:opcache',
|
||||||
|
'deploy:publish',
|
||||||
'deploy:stop-workers',
|
'deploy:stop-workers',
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
task('deploy:assets', function () {
|
||||||
|
runLocally('ddev exec npm ci');
|
||||||
|
runLocally('ddev exec npm run build');
|
||||||
|
});
|
||||||
|
|
||||||
task('deploy:stop-workers', function () {
|
task('deploy:stop-workers', function () {
|
||||||
run('{{bin/console}} messenger:stop-workers');
|
run('{{bin/console}} messenger:stop-workers');
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -0,0 +1,120 @@
|
|||||||
|
# Body Dimensions Transition Plan (Stakeholder Draft)
|
||||||
|
|
||||||
|
## Goal
|
||||||
|
|
||||||
|
Prevent edit-form failures for existing bookings while we transition from legacy body-dimension values to a better long-term field model.
|
||||||
|
|
||||||
|
This plan introduces a temporary compatibility phase and keeps sunsetting manual and straightforward.
|
||||||
|
|
||||||
|
## Current Problem
|
||||||
|
|
||||||
|
- Existing bookings may contain legacy values such as `-148`, `149-157`, or `195+`.
|
||||||
|
- Integer-only form fields can fail when these legacy strings are loaded.
|
||||||
|
- Result: participant edit forms can crash before submit.
|
||||||
|
|
||||||
|
## Proposed Transition Strategy
|
||||||
|
|
||||||
|
Use **text input fields** for body dimensions during transition, with explicit server-side format validation.
|
||||||
|
|
||||||
|
### Key Decisions
|
||||||
|
|
||||||
|
- No gating by booking create date.
|
||||||
|
- One unified behavior for all bookings.
|
||||||
|
- Accept both legacy and numeric formats during transition.
|
||||||
|
- Keep manual sunsetting later (no automated migration switch).
|
||||||
|
|
||||||
|
## Functional Scope
|
||||||
|
|
||||||
|
Affected fields:
|
||||||
|
|
||||||
|
- `height`
|
||||||
|
- `weight`
|
||||||
|
- `shoeSize`
|
||||||
|
|
||||||
|
Affected components:
|
||||||
|
|
||||||
|
- `src/Form/BodyDimensionsType.php`
|
||||||
|
- `src/Validator/Constraints/ParticipantValidator.php`
|
||||||
|
- `src/Form/BookingParticipantType.php` (option passthrough already in place)
|
||||||
|
- `config/services.yaml` (ranges remain as validation/config source)
|
||||||
|
|
||||||
|
## Validation Rules During Transition
|
||||||
|
|
||||||
|
### Accepted formats
|
||||||
|
|
||||||
|
- Numeric value: `^\d+$` (e.g. `176`)
|
||||||
|
- Legacy lower/open/range tokens:
|
||||||
|
- `^-\d+$` (e.g. `-148`)
|
||||||
|
- `^\d+\+$` (e.g. `195+`)
|
||||||
|
- `^\d+\s*-\s*\d+$` (e.g. `149-157`)
|
||||||
|
|
||||||
|
### Requiredness
|
||||||
|
|
||||||
|
- Keep existing rule: body dimensions required when rentals are selected.
|
||||||
|
|
||||||
|
### Range checks
|
||||||
|
|
||||||
|
- Keep current numeric range checks based on `body_dimension_ranges`.
|
||||||
|
- Apply range checks only to plain numeric values in transition phase.
|
||||||
|
|
||||||
|
## UX/Behavior Expectations
|
||||||
|
|
||||||
|
- Existing legacy values render without form initialization errors.
|
||||||
|
- New numeric entries are accepted and validated.
|
||||||
|
- Invalid free text (e.g. `abc`, `17x`) shows clear validation errors.
|
||||||
|
- HTMX refresh behavior remains unchanged.
|
||||||
|
|
||||||
|
## Implementation Steps
|
||||||
|
|
||||||
|
1. **Form type change**
|
||||||
|
- In `BodyDimensionsType`, replace integer fields with text fields for all three body dimensions.
|
||||||
|
- Keep labels/help text; keep placeholders based on configured ranges.
|
||||||
|
|
||||||
|
2. **Validator extension**
|
||||||
|
- Add format validation for all three fields in `ParticipantValidator`.
|
||||||
|
- Keep existing required-when-rentals logic.
|
||||||
|
- Keep existing range validation for numeric values.
|
||||||
|
|
||||||
|
3. **Message tuning**
|
||||||
|
- Add one clear message for invalid format.
|
||||||
|
- Retain existing range message for numeric out-of-range values.
|
||||||
|
|
||||||
|
4. **Testing and QA**
|
||||||
|
- Validate old bookings with legacy values open/edit successfully.
|
||||||
|
- Validate numeric path (valid and invalid range).
|
||||||
|
- Validate invalid format handling.
|
||||||
|
- Validate rental-required behavior.
|
||||||
|
|
||||||
|
## Acceptance Criteria
|
||||||
|
|
||||||
|
- No 500 error when editing participants with legacy body-dimension values.
|
||||||
|
- Legacy values can be loaded and submitted in transition phase.
|
||||||
|
- Numeric values are accepted and range-validated.
|
||||||
|
- Invalid text is rejected with a user-facing validation message.
|
||||||
|
- Existing participant edit/refresh flows continue to work.
|
||||||
|
|
||||||
|
## Risks and Mitigations
|
||||||
|
|
||||||
|
- **Risk:** Free-text field semantics are less strict than integer fields.
|
||||||
|
- **Mitigation:** strict server-side regex + range checks.
|
||||||
|
|
||||||
|
- **Risk:** Inconsistent data representations during transition.
|
||||||
|
- **Mitigation:** explicit acceptance policy and manual sunset plan.
|
||||||
|
|
||||||
|
## Effort Estimate
|
||||||
|
|
||||||
|
- Implementation: 0.5 day
|
||||||
|
- Validation/message tuning: 0.25 day
|
||||||
|
- QA/manual testing: 0.5 day
|
||||||
|
- **Total:** ~1 to 1.5 days
|
||||||
|
|
||||||
|
## Manual Sunset Plan (Later)
|
||||||
|
|
||||||
|
When stakeholders approve end of transition:
|
||||||
|
|
||||||
|
1. Replace text fields with final semantic field type(s).
|
||||||
|
2. Remove legacy format acceptance from validator.
|
||||||
|
3. Keep only final numeric/range validation behavior.
|
||||||
|
4. Remove transition-specific tests and copy.
|
||||||
|
|
||||||
|
Expected cleanup effort: ~0.25 to 0.5 day.
|
||||||
@@ -0,0 +1,196 @@
|
|||||||
|
# Booking Flow Reference
|
||||||
|
|
||||||
|
Last updated: 2026-04-16
|
||||||
|
|
||||||
|
This document traces the booking create and edit flows from controller entry point through to session/DTO state. It is intended as orientation for developers unfamiliar with the flow, not as a substitute for reading the code.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Shared Concepts
|
||||||
|
|
||||||
|
### `BookingDto`
|
||||||
|
|
||||||
|
The central data object for both flows. Holds room selections, participants, payment method, and travel reference. Lives in the HTTP session between requests. Has two modes: `MODE_CREATE` and `MODE_EDIT`.
|
||||||
|
|
||||||
|
### `BookingSessionManager`
|
||||||
|
|
||||||
|
Owns all reads and writes to session-stored `BookingDto` instances. Also manages the baseline room snapshot used for change detection in the create flow.
|
||||||
|
|
||||||
|
### `BookingCreateContextFactory`
|
||||||
|
|
||||||
|
Assembles the view model (`BookingCreateContext`) passed to create-flow templates. Handles room grouping (by-pax vs. by-room) and wires summary sidebar data.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Create Flow
|
||||||
|
|
||||||
|
```
|
||||||
|
Step 1 (room selection)
|
||||||
|
→ Step 2 (participants)
|
||||||
|
→ Step 2 sub-form (per-participant, HTMX)
|
||||||
|
→ Step 3 (payment + API pre-validation)
|
||||||
|
→ Step 4 (confirmation + final submission)
|
||||||
|
→ Success
|
||||||
|
```
|
||||||
|
|
||||||
|
### Entry / Bootstrap
|
||||||
|
|
||||||
|
`BookingExceptionHandlerTrait::getOrCreateBookingCreateDto()` is called by every step controller. If no DTO exists in session, it calls `BookingConfigurator::startFreshBooking()` which loads travel data and initialises a fresh `BookingDto`.
|
||||||
|
|
||||||
|
### Step 1 — Room Selection
|
||||||
|
|
||||||
|
**Controller:** `Create/Step1Controller`
|
||||||
|
**Route:** `GET|POST /bookings/create/rooms`
|
||||||
|
|
||||||
|
1. Load or create DTO via `getOrCreateBookingCreateDto()`
|
||||||
|
2. `BookingSessionManager::getOrCreateBaselineSnapshot()` — saves the current room selection as a comparison point for change detection
|
||||||
|
3. Render `BookingCreateStep1Type` form
|
||||||
|
4. On submit:
|
||||||
|
- If room selection changed from baseline: `BookingDto::resetParticipantAssignments()` — clears stale assignments
|
||||||
|
- `BookingConfigurator::updateBookingStatusFromRoomSelection()` — may switch booking to inquiry mode if capacity constraints require it
|
||||||
|
- `BookingSessionManager::saveBookingDto()`, advance `currentStep` to 2
|
||||||
|
- `BookingSessionManager::clearBaselineSnapshot()`
|
||||||
|
- Redirect to Step 2
|
||||||
|
|
||||||
|
HTMX refresh (`/bookings/create/refresh`): processes the form without validation and returns updated room selection + summary sidebar blocks.
|
||||||
|
|
||||||
|
### Step 2 — Participants (Card Overview)
|
||||||
|
|
||||||
|
**Controller:** `Create/Step2Controller`
|
||||||
|
**Route:** `GET|POST /bookings/create/participants`
|
||||||
|
|
||||||
|
1. Load DTO from session (or redirect to Step 1 if missing)
|
||||||
|
2. `TravelDataProvider::enrichWithFreshAvailabilities()` — refreshes room availability
|
||||||
|
3. `ensureCorrectNumberOfParticipants()` — syncs the `BookingDto::participants` array length with the room selections (e.g., 2× double room → 4 participants). Preserves existing participant data for slots that still exist.
|
||||||
|
4. `ParticipantDataPrefiller::shouldPrepopulateApplicant()` + `prepopulateApplicantFromUser()` — prefills participant[0] from user profile on first visit
|
||||||
|
5. `RoomAssigner::validateAndResetInvalidAssignments()` — clears any room assignments that no longer match the current room selection (handles back-navigation from Step 2 → Step 1 → Step 2)
|
||||||
|
6. `RoomAssigner::assignRoomsIfNeeded()` — auto-assigns participants to rooms
|
||||||
|
7. `BookingConfigurator::preselectDefaultServices()` — selects mandatory and auto-book services for all participants
|
||||||
|
8. `BookingConfigurator::applyCreateBookingStatusRules()` — re-evaluates booking status (book / inquiry / not-bookable)
|
||||||
|
9. `BookingSessionManager::saveBookingDto()`
|
||||||
|
10. On form submit (all participants valid): advance to Step 3, redirect
|
||||||
|
|
||||||
|
### Step 2 — Individual Participant Form (HTMX)
|
||||||
|
|
||||||
|
**Controller:** `Create/Step2ParticipantController`
|
||||||
|
**Routes:** `GET|POST /bookings/create/participants/{index}` and `/participants/{index}/refresh`
|
||||||
|
|
||||||
|
Each participant card lazy-loads its form via HTMX. The controller:
|
||||||
|
|
||||||
|
1. Verifies the participant slot exists
|
||||||
|
2. Refreshes availability
|
||||||
|
3. Handles dummy data fill (`ParticipantDataPrefiller::isDummyDataFillRequested()` / `fillDummyParticipant()`)
|
||||||
|
4. On submit: re-applies status rules, saves to session, redirects to card overview
|
||||||
|
5. `ParticipantFormSupport` is used for form creation options and notification draining
|
||||||
|
|
||||||
|
### Step 3 — Payment + API Pre-Validation
|
||||||
|
|
||||||
|
**Controller:** `Create/Step3Controller`
|
||||||
|
**Route:** `GET|POST /bookings/create/payment`
|
||||||
|
|
||||||
|
1. Load DTO from session
|
||||||
|
2. `BookingConfigurator::applyCreateBookingStatusRules()`
|
||||||
|
3. On submit:
|
||||||
|
- `ApiClient::createBookingInquiry()` — submits booking to API for validation without committing it
|
||||||
|
- If inquiry fails with "nicht möglich" + "Anfrage" in message: auto-switch to inquiry mode, advance to Step 4
|
||||||
|
- If inquiry fails otherwise: show error, stay on step
|
||||||
|
- Price verification: `BookingPriceCalculator::calculateGrandTotal()` is compared against the API response total (accounting for promotional/goodwill voucher discounts and API-applied group discounts). Mismatch triggers `BookingPriceMismatchAnalyzer` for detailed logging.
|
||||||
|
- On success: advance `currentStep` to 4, redirect
|
||||||
|
|
||||||
|
### Step 4 — Confirmation + Final Submission
|
||||||
|
|
||||||
|
**Controller:** `Create/Step4Controller`
|
||||||
|
**Route:** `GET|POST /bookings/create/confirmation`
|
||||||
|
|
||||||
|
1. Load DTO from session
|
||||||
|
2. Newsletter subscription check for opt-in display
|
||||||
|
3. On submit:
|
||||||
|
- `BookingConfigurator::applyCreateBookingStatusRules()`
|
||||||
|
- `ApiClient::createBooking()` — final booking submission (already validated in Step 3)
|
||||||
|
- Newsletter double-opt-in if selected
|
||||||
|
- On success: store booking number + total in flash (for analytics), clear travel data cache, `BookingSessionManager::clearBookingDto()`, redirect to success page
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Edit Flow
|
||||||
|
|
||||||
|
```
|
||||||
|
Entry (start)
|
||||||
|
→ Load (session or API + draft restore)
|
||||||
|
→ Participant sub-forms (HTMX, per-participant)
|
||||||
|
→ Submission
|
||||||
|
```
|
||||||
|
|
||||||
|
### Entry
|
||||||
|
|
||||||
|
**Controller:** `Edit/IndexController::start()`
|
||||||
|
**Route:** `GET /bookings/{id}/edit/start`
|
||||||
|
|
||||||
|
Clears any existing session DTO for edit mode and invalidates the API booking cache, then redirects to the edit page. This ensures a clean load from API on every intentional re-entry.
|
||||||
|
|
||||||
|
### Load
|
||||||
|
|
||||||
|
**Controller:** `Edit/IndexController::index()`
|
||||||
|
**Route:** `GET|POST /bookings/{id}/edit`
|
||||||
|
|
||||||
|
Loading is delegated entirely to `BookingEditDataLoader::loadFormData()`:
|
||||||
|
|
||||||
|
**If session DTO exists and matches the requested booking ID:**
|
||||||
|
- `TravelDataProvider::enrichWithFreshAvailabilities()` — refreshes room availability
|
||||||
|
- `TravelDataProvider::getMutabilityData()` + `patchMutability()` — applies cached mutability state to DTO
|
||||||
|
|
||||||
|
**If no session DTO (first load or after `start`):**
|
||||||
|
|
||||||
|
`initializeFromApi()`:
|
||||||
|
1. `fetchBookingData()` — `ApiClient::getBooking()` with 5-minute cache (tagged by user ID for bulk invalidation)
|
||||||
|
2. `TravelDataProvider::getTravelData()` — loads travel data (XML or snapshot)
|
||||||
|
3. `TravelDataProvider::getAvailabilityData(forceRefresh: true)` + `patchAvailabilities()` — force-refreshes availability at edit start, populates cache for subsequent loads within the session
|
||||||
|
4. `TravelDataProvider::getMutabilityData(cached: true)` + `patchMutability()` — applies which service categories are currently editable
|
||||||
|
5. `BookingDataProcessor::createBookingDtoFromBooking()` — hydrates `BookingDto` from API booking entity
|
||||||
|
6. Agency code resolved via `AgencyLoader` (used by field state conditions)
|
||||||
|
7. `BookingChangeTracker::generateFingerprint()` — sets `originalFingerprint` on DTO **before** draft is applied, so dirty detection compares against original API data
|
||||||
|
8. `BookingEditDraftManager::findDraft()` + `applyDraftToDto()` — if draft exists, merges user edits on top of fresh API data. Sets `draftWasRestored = true` if successful.
|
||||||
|
9. `BookingSessionManager::saveBookingDto()`
|
||||||
|
|
||||||
|
Back in the controller: shows "draft restored" flash if applicable, fetches booking data for surcharge/status display, renders the card overview with `BookingEditContextFactory::createOverviewContext()`.
|
||||||
|
|
||||||
|
### Individual Participant Form (HTMX)
|
||||||
|
|
||||||
|
**Controller:** `Edit/ParticipantController`
|
||||||
|
**Routes:** `GET|POST /bookings/{id}/edit/participants/{index}` and `/{index}/refresh`
|
||||||
|
|
||||||
|
Per-participant forms are lazy-loaded, matching the create flow pattern.
|
||||||
|
|
||||||
|
1. `BookingEditContextFactory::prepareBookingDto()` — refreshes availabilities on the DTO travel object
|
||||||
|
2. `ParticipantFormSupport` — form creation, notification draining
|
||||||
|
3. On submit: `BookingSessionManager::saveBookingDto()` + `BookingEditDraftManager::saveDraft()` — persists participant edits to both session and draft
|
||||||
|
|
||||||
|
### Submission
|
||||||
|
|
||||||
|
**Service:** `BookingEditSubmitter::handleSubmission()`
|
||||||
|
Called from `Edit/IndexController` on valid form submit.
|
||||||
|
|
||||||
|
1. Invalidate API cache, fetch fresh booking data
|
||||||
|
2. Force-refresh mutability data (`TravelDataProvider::getMutabilityData(forceRefresh: true)`) and patch DTO travel
|
||||||
|
3. `BookingEditSubmitGuard::reconcileImmutableCategories()` — reverts any DTO fields that have become immutable since the session was loaded. Shows flash if anything was reverted.
|
||||||
|
4. `ApiClient::updateBooking()` — submit
|
||||||
|
5. On success: invalidate cache again, `BookingSessionManager::clearBookingDto()`, `BookingEditDraftManager::deleteDraft()`
|
||||||
|
|
||||||
|
### Other Edit Routes
|
||||||
|
|
||||||
|
| Route | Action |
|
||||||
|
|-------|--------|
|
||||||
|
| `GET /bookings/{id}/edit/reload` | Shows confirmation modal |
|
||||||
|
| `POST /bookings/{id}/edit/reload` | Clears session + **deletes draft**, reloads from API |
|
||||||
|
| `GET /bookings/{id}/edit/cancel` | Clears session, **preserves draft**, redirects to booking list |
|
||||||
|
|
||||||
|
The distinction between reload and cancel is intentional: cancel keeps the draft so the user can return to their changes later; reload discards everything.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Key Invariants
|
||||||
|
|
||||||
|
- `currentStep` on the DTO gates forward navigation in create mode; controllers redirect to the current step if a higher step is requested directly.
|
||||||
|
- The original fingerprint is set before draft application in edit mode. Dirty detection (`BookingChangeTracker::isDirty()`) always compares the live session DTO against the original API state, not against the draft.
|
||||||
|
- Mutability is always patched from fresh or cached data before rendering. The DTO travel object is the authoritative source of which fields are editable at render time.
|
||||||
|
- Drafts survive cancel but not reload, and are deleted on successful submission.
|
||||||
@@ -7,8 +7,8 @@
|
|||||||
"Grant Type": "Authorization Code",
|
"Grant Type": "Authorization Code",
|
||||||
"Client ID": "{{oauth2_client_id}}",
|
"Client ID": "{{oauth2_client_id}}",
|
||||||
"Client Secret": "{{oauth2_client_secret}}",
|
"Client Secret": "{{oauth2_client_secret}}",
|
||||||
"Auth URL": "https://myep-next.ddev.site/authorize",
|
"Auth URL": "https://myep.ddev.site/authorize",
|
||||||
"Token URL": "https://myep-next.ddev.site/token",
|
"Token URL": "https://myep.ddev.site/token",
|
||||||
"Redirect URL": "https://myep-team.ddev.site/auth/check",
|
"Redirect URL": "https://myep-team.ddev.site/auth/check",
|
||||||
"Scope": "email"
|
"Scope": "email"
|
||||||
},
|
},
|
||||||
@@ -17,8 +17,8 @@
|
|||||||
"Grant Type": "Authorization Code",
|
"Grant Type": "Authorization Code",
|
||||||
"Client ID": "{{oauth2_client_id}}",
|
"Client ID": "{{oauth2_client_id}}",
|
||||||
"Client Secret": "{{oauth2_client_secret}}",
|
"Client Secret": "{{oauth2_client_secret}}",
|
||||||
"Auth URL": "https://myep-next.ddev.site/authorize",
|
"Auth URL": "https://myep.ddev.site/authorize",
|
||||||
"Token URL": "https://myep-next.ddev.site/token",
|
"Token URL": "https://myep.ddev.site/token",
|
||||||
"Redirect URL": "https://myep-team.ddev.site/auth/check",
|
"Redirect URL": "https://myep-team.ddev.site/auth/check",
|
||||||
"Scope": "email profile"
|
"Scope": "email profile"
|
||||||
},
|
},
|
||||||
@@ -27,8 +27,61 @@
|
|||||||
"Grant Type": "Client Credentials",
|
"Grant Type": "Client Credentials",
|
||||||
"Client ID": "{{oauth2_api_client_id}}",
|
"Client ID": "{{oauth2_api_client_id}}",
|
||||||
"Client Secret": "{{oauth2_api_client_secret}}",
|
"Client Secret": "{{oauth2_api_client_secret}}",
|
||||||
"Auth URL": "https://myep-next.ddev.site/authorize",
|
"Auth URL": "https://myep.ddev.site/authorize",
|
||||||
"Token URL": "https://myep-next.ddev.site/token",
|
"Token URL": "https://myep.ddev.site/token",
|
||||||
|
"Scope": "api"
|
||||||
|
},
|
||||||
|
"oauth2_newsletter": {
|
||||||
|
"Type": "OAuth2",
|
||||||
|
"Grant Type": "Client Credentials",
|
||||||
|
"Client ID": "{{oauth2_api_client_id}}",
|
||||||
|
"Client Secret": "{{oauth2_api_client_secret}}",
|
||||||
|
"Auth URL": "https://myep.ddev.site/authorize",
|
||||||
|
"Token URL": "https://myep.ddev.site/token",
|
||||||
|
"Scope": "api"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"staging": {
|
||||||
|
"Security": {
|
||||||
|
"Auth": {
|
||||||
|
"oauth2_email": {
|
||||||
|
"Type": "OAuth2",
|
||||||
|
"Grant Type": "Authorization Code",
|
||||||
|
"Client ID": "{{oauth2_client_id}}",
|
||||||
|
"Client Secret": "{{oauth2_client_secret}}",
|
||||||
|
"Auth URL": "https://my.ep-reisen.net/authorize",
|
||||||
|
"Token URL": "https://my.ep-reisen.net/token",
|
||||||
|
"Redirect URL": "https://myep-team.ep-reisen.de/auth/check",
|
||||||
|
"Scope": "email"
|
||||||
|
},
|
||||||
|
"oauth2_profile": {
|
||||||
|
"Type": "OAuth2",
|
||||||
|
"Grant Type": "Authorization Code",
|
||||||
|
"Client ID": "{{oauth2_client_id}}",
|
||||||
|
"Client Secret": "{{oauth2_client_secret}}",
|
||||||
|
"Auth URL": "https://my.ep-reisen.net/authorize",
|
||||||
|
"Token URL": "https://my.ep-reisen.net/token",
|
||||||
|
"Redirect URL": "https://myep-team.ep-reisen.de/auth/check",
|
||||||
|
"Scope": "email profile"
|
||||||
|
},
|
||||||
|
"oauth2_api": {
|
||||||
|
"Type": "OAuth2",
|
||||||
|
"Grant Type": "Client Credentials",
|
||||||
|
"Client ID": "{{oauth2_api_client_id}}",
|
||||||
|
"Client Secret": "{{oauth2_api_client_secret}}",
|
||||||
|
"Auth URL": "https://my.ep-reisen.net/authorize",
|
||||||
|
"Token URL": "https://my.ep-reisen.net/token",
|
||||||
|
"Scope": "api"
|
||||||
|
},
|
||||||
|
"oauth2_newsletter": {
|
||||||
|
"Type": "OAuth2",
|
||||||
|
"Grant Type": "Client Credentials",
|
||||||
|
"Client ID": "{{oauth2_api_client_id}}",
|
||||||
|
"Client Secret": "{{oauth2_api_client_secret}}",
|
||||||
|
"Auth URL": "https://my.ep-reisen.net/authorize",
|
||||||
|
"Token URL": "https://my.ep-reisen.net/token",
|
||||||
"Scope": "api"
|
"Scope": "api"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -42,8 +95,8 @@
|
|||||||
"Grant Type": "Authorization Code",
|
"Grant Type": "Authorization Code",
|
||||||
"Client ID": "{{oauth2_client_id}}",
|
"Client ID": "{{oauth2_client_id}}",
|
||||||
"Client Secret": "{{oauth2_client_secret}}",
|
"Client Secret": "{{oauth2_client_secret}}",
|
||||||
"Auth URL": "https://myep.ep-reisen.de/authorize",
|
"Auth URL": "https://my.ep-reisen.de/authorize",
|
||||||
"Token URL": "https://myep.ep-reisen.de/token",
|
"Token URL": "https://my.ep-reisen.de/token",
|
||||||
"Redirect URL": "https://myep-team.ep-reisen.de/auth/check",
|
"Redirect URL": "https://myep-team.ep-reisen.de/auth/check",
|
||||||
"Scope": "email"
|
"Scope": "email"
|
||||||
},
|
},
|
||||||
@@ -52,8 +105,8 @@
|
|||||||
"Grant Type": "Authorization Code",
|
"Grant Type": "Authorization Code",
|
||||||
"Client ID": "{{oauth2_client_id}}",
|
"Client ID": "{{oauth2_client_id}}",
|
||||||
"Client Secret": "{{oauth2_client_secret}}",
|
"Client Secret": "{{oauth2_client_secret}}",
|
||||||
"Auth URL": "https://myep.ep-reisen.de/authorize",
|
"Auth URL": "https://my.ep-reisen.de/authorize",
|
||||||
"Token URL": "https://myep.ep-reisen.de/token",
|
"Token URL": "https://my.ep-reisen.de/token",
|
||||||
"Redirect URL": "https://myep-team.ep-reisen.de/auth/check",
|
"Redirect URL": "https://myep-team.ep-reisen.de/auth/check",
|
||||||
"Scope": "email profile"
|
"Scope": "email profile"
|
||||||
},
|
},
|
||||||
@@ -62,8 +115,17 @@
|
|||||||
"Grant Type": "Client Credentials",
|
"Grant Type": "Client Credentials",
|
||||||
"Client ID": "{{oauth2_api_client_id}}",
|
"Client ID": "{{oauth2_api_client_id}}",
|
||||||
"Client Secret": "{{oauth2_api_client_secret}}",
|
"Client Secret": "{{oauth2_api_client_secret}}",
|
||||||
"Auth URL": "https://myep.ep-reisen.de/authorize",
|
"Auth URL": "https://my.ep-reisen.de/authorize",
|
||||||
"Token URL": "https://myep.ep-reisen.de/token",
|
"Token URL": "https://my.ep-reisen.de/token",
|
||||||
|
"Scope": "api"
|
||||||
|
},
|
||||||
|
"oauth2_newsletter": {
|
||||||
|
"Type": "OAuth2",
|
||||||
|
"Grant Type": "Client Credentials",
|
||||||
|
"Client ID": "{{oauth2_api_client_id}}",
|
||||||
|
"Client Secret": "{{oauth2_api_client_secret}}",
|
||||||
|
"Auth URL": "https://my.ep-reisen.de/authorize",
|
||||||
|
"Token URL": "https://my.ep-reisen.de/token",
|
||||||
"Scope": "api"
|
"Scope": "api"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,172 @@
|
|||||||
|
###
|
||||||
|
# Mailjet API test requests for IntelliJ HTTP Client
|
||||||
|
#
|
||||||
|
# 1) Fill in variables below (or move them to http-client.private.env.json).
|
||||||
|
# 2) Set `mailjet_api_key` and `mailjet_api_secret` in your env file.
|
||||||
|
# IntelliJ HTTP Client will inject them into the Authorization header below.
|
||||||
|
#
|
||||||
|
# Required variables:
|
||||||
|
# - mailjet_base_url (example: https://api.mailjet.com/v3/REST)
|
||||||
|
# - mailjet_api_key
|
||||||
|
# - mailjet_api_secret
|
||||||
|
# - mailjet_contact_email
|
||||||
|
# - mailjet_list_id
|
||||||
|
#
|
||||||
|
# @no-cookie-jar
|
||||||
|
|
||||||
|
### Mailjet health check (authenticated)
|
||||||
|
# @no-cookie-jar
|
||||||
|
GET {{mailjet_base_url}}/apikey
|
||||||
|
Accept: application/json
|
||||||
|
Authorization: Basic {{mailjet_api_key}} {{mailjet_api_secret}}
|
||||||
|
|
||||||
|
|
||||||
|
### Find contact by email
|
||||||
|
# @no-cookie-jar
|
||||||
|
GET {{mailjet_base_url}}/contact?Email={{mailjet_contact_email}}
|
||||||
|
Accept: application/json
|
||||||
|
Authorization: Basic {{mailjet_api_key}} {{mailjet_api_secret}}
|
||||||
|
|
||||||
|
> {%
|
||||||
|
if (response.body && response.body.Data && response.body.Data.length > 0) {
|
||||||
|
client.global.set("contact_id", String(response.body.Data[0].ID));
|
||||||
|
}
|
||||||
|
%}
|
||||||
|
|
||||||
|
|
||||||
|
### Create contact (run if not found)
|
||||||
|
# @no-cookie-jar
|
||||||
|
POST {{mailjet_base_url}}/contact
|
||||||
|
Accept: application/json
|
||||||
|
Content-Type: application/json
|
||||||
|
Authorization: Basic {{mailjet_api_key}} {{mailjet_api_secret}}
|
||||||
|
|
||||||
|
{
|
||||||
|
"Email": "{{mailjet_contact_email}}"
|
||||||
|
}
|
||||||
|
|
||||||
|
> {%
|
||||||
|
if (response.body && response.body.Data && response.body.Data.length > 0) {
|
||||||
|
client.global.set("contact_id", String(response.body.Data[0].ID));
|
||||||
|
}
|
||||||
|
%}
|
||||||
|
|
||||||
|
|
||||||
|
### Get contact by ID (after find/create)
|
||||||
|
# @no-cookie-jar
|
||||||
|
GET {{mailjet_base_url}}/contact/{{contact_id}}
|
||||||
|
Accept: application/json
|
||||||
|
Authorization: Basic {{mailjet_api_key}} {{mailjet_api_secret}}
|
||||||
|
|
||||||
|
|
||||||
|
### Get contact metadata by ID (after find/create)
|
||||||
|
# @no-cookie-jar
|
||||||
|
GET {{mailjet_base_url}}/contactdata/{{contact_id}}
|
||||||
|
Accept: application/json
|
||||||
|
Authorization: Basic {{mailjet_api_key}} {{mailjet_api_secret}}
|
||||||
|
|
||||||
|
### Get newsletter list by ID
|
||||||
|
# @no-cookie-jar
|
||||||
|
GET {{mailjet_base_url}}/contactslist/{{mailjet_list_id}}
|
||||||
|
Accept: application/json
|
||||||
|
Authorization: Basic {{mailjet_api_key}} {{mailjet_api_secret}}
|
||||||
|
|
||||||
|
|
||||||
|
### List all available contact lists
|
||||||
|
# @no-cookie-jar
|
||||||
|
GET {{mailjet_base_url}}/contactslist?Limit=1000
|
||||||
|
Accept: application/json
|
||||||
|
Authorization: Basic {{mailjet_api_key}} {{mailjet_api_secret}}
|
||||||
|
|
||||||
|
|
||||||
|
### Check list recipient status (before actions)
|
||||||
|
# @no-cookie-jar
|
||||||
|
GET {{mailjet_base_url}}/listrecipient?ContactsList={{mailjet_list_id}}&Contact={{contact_id}}
|
||||||
|
Accept: application/json
|
||||||
|
Authorization: Basic {{mailjet_api_key}} {{mailjet_api_secret}}
|
||||||
|
|
||||||
|
> {%
|
||||||
|
if (response.body && response.body.Data && response.body.Data.length > 0) {
|
||||||
|
client.global.set("listrecipient_id", String(response.body.Data[0].ID));
|
||||||
|
}
|
||||||
|
%}
|
||||||
|
|
||||||
|
|
||||||
|
### Subscribe to list (addnoforce)
|
||||||
|
# @no-cookie-jar
|
||||||
|
POST {{mailjet_base_url}}/contactslist/{{mailjet_list_id}}/managecontact
|
||||||
|
Accept: application/json
|
||||||
|
Content-Type: application/json
|
||||||
|
Authorization: Basic {{mailjet_api_key}} {{mailjet_api_secret}}
|
||||||
|
|
||||||
|
{
|
||||||
|
"Action": "addnoforce",
|
||||||
|
"Email": "{{mailjet_contact_email}}"
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
### Verify list recipient after addnoforce
|
||||||
|
# @no-cookie-jar
|
||||||
|
GET {{mailjet_base_url}}/listrecipient?ContactsList={{mailjet_list_id}}&Contact={{contact_id}}
|
||||||
|
Accept: application/json
|
||||||
|
Authorization: Basic {{mailjet_api_key}} {{mailjet_api_secret}}
|
||||||
|
|
||||||
|
|
||||||
|
### Unsubscribe from list (unsub)
|
||||||
|
# @no-cookie-jar
|
||||||
|
POST {{mailjet_base_url}}/contactslist/{{mailjet_list_id}}/managecontact
|
||||||
|
Accept: application/json
|
||||||
|
Content-Type: application/json
|
||||||
|
Authorization: Basic {{mailjet_api_key}} {{mailjet_api_secret}}
|
||||||
|
|
||||||
|
{
|
||||||
|
"Action": "unsub",
|
||||||
|
"Email": "{{mailjet_contact_email}}"
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
### Verify list recipient after unsub
|
||||||
|
# @no-cookie-jar
|
||||||
|
GET {{mailjet_base_url}}/listrecipient?ContactsList={{mailjet_list_id}}&Contact={{contact_id}}
|
||||||
|
Accept: application/json
|
||||||
|
Authorization: Basic {{mailjet_api_key}} {{mailjet_api_secret}}
|
||||||
|
|
||||||
|
|
||||||
|
### Re-subscribe attempt with addnoforce (expected to keep unsubscribed state)
|
||||||
|
# @no-cookie-jar
|
||||||
|
POST {{mailjet_base_url}}/contactslist/{{mailjet_list_id}}/managecontact
|
||||||
|
Accept: application/json
|
||||||
|
Content-Type: application/json
|
||||||
|
Authorization: Basic {{mailjet_api_key}} {{mailjet_api_secret}}
|
||||||
|
|
||||||
|
{
|
||||||
|
"Action": "addnoforce",
|
||||||
|
"Email": "{{mailjet_contact_email}}"
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
### Verify list recipient after addnoforce re-subscribe attempt
|
||||||
|
# @no-cookie-jar
|
||||||
|
GET {{mailjet_base_url}}/listrecipient?ContactsList={{mailjet_list_id}}&Contact={{contact_id}}
|
||||||
|
Accept: application/json
|
||||||
|
Authorization: Basic {{mailjet_api_key}} {{mailjet_api_secret}}
|
||||||
|
|
||||||
|
|
||||||
|
### Re-subscribe with addforce (expected to re-subscribe)
|
||||||
|
# @no-cookie-jar
|
||||||
|
POST {{mailjet_base_url}}/contactslist/{{mailjet_list_id}}/managecontact
|
||||||
|
Accept: application/json
|
||||||
|
Content-Type: application/json
|
||||||
|
Authorization: Basic {{mailjet_api_key}} {{mailjet_api_secret}}
|
||||||
|
|
||||||
|
{
|
||||||
|
"Action": "addforce",
|
||||||
|
"Email": "{{mailjet_contact_email}}"
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
### Verify list recipient after addforce
|
||||||
|
# @no-cookie-jar
|
||||||
|
GET {{mailjet_base_url}}/listrecipient?ContactsList={{mailjet_list_id}}&Contact={{contact_id}}
|
||||||
|
Accept: application/json
|
||||||
|
Authorization: Basic {{mailjet_api_key}} {{mailjet_api_secret}}
|
||||||
@@ -0,0 +1,31 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace DoctrineMigrations;
|
||||||
|
|
||||||
|
use Doctrine\DBAL\Schema\Schema;
|
||||||
|
use Doctrine\Migrations\AbstractMigration;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Auto-generated Migration: Please modify to your needs!
|
||||||
|
*/
|
||||||
|
final class Version20251212162836 extends AbstractMigration
|
||||||
|
{
|
||||||
|
public function getDescription(): string
|
||||||
|
{
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
|
||||||
|
public function up(Schema $schema): void
|
||||||
|
{
|
||||||
|
// this up() migration is auto-generated, please modify it to your needs
|
||||||
|
$this->addSql('ALTER TABLE user ADD hotel_codes JSON NOT NULL COMMENT \'(DC2Type:json)\'');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function down(Schema $schema): void
|
||||||
|
{
|
||||||
|
// this down() migration is auto-generated, please modify it to your needs
|
||||||
|
$this->addSql('ALTER TABLE user DROP hotel_codes');
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace DoctrineMigrations;
|
||||||
|
|
||||||
|
use Doctrine\DBAL\Schema\Schema;
|
||||||
|
use Doctrine\Migrations\AbstractMigration;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Auto-generated Migration: Please modify to your needs!
|
||||||
|
*/
|
||||||
|
final class Version20260106091117 extends AbstractMigration
|
||||||
|
{
|
||||||
|
public function getDescription(): string
|
||||||
|
{
|
||||||
|
return 'Create booking_edit_draft table for persisting user edits during booking edit flow';
|
||||||
|
}
|
||||||
|
|
||||||
|
public function up(Schema $schema): void
|
||||||
|
{
|
||||||
|
// this up() migration is auto-generated, please modify it to your needs
|
||||||
|
$this->addSql('CREATE TABLE booking_edit_draft (id INT AUTO_INCREMENT NOT NULL, user_id INT NOT NULL, booking_id INT NOT NULL, form_data JSON NOT NULL COMMENT \'(DC2Type:json)\', created_at DATETIME NOT NULL COMMENT \'(DC2Type:datetime_immutable)\', updated_at DATETIME NOT NULL COMMENT \'(DC2Type:datetime_immutable)\', INDEX IDX_E6548098A76ED395 (user_id), UNIQUE INDEX user_booking_unique (user_id, booking_id), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB');
|
||||||
|
$this->addSql('ALTER TABLE booking_edit_draft ADD CONSTRAINT FK_E6548098A76ED395 FOREIGN KEY (user_id) REFERENCES user (id) ON DELETE CASCADE');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function down(Schema $schema): void
|
||||||
|
{
|
||||||
|
// this down() migration is auto-generated, please modify it to your needs
|
||||||
|
$this->addSql('ALTER TABLE booking_edit_draft DROP FOREIGN KEY FK_E6548098A76ED395');
|
||||||
|
$this->addSql('DROP TABLE booking_edit_draft');
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace DoctrineMigrations;
|
||||||
|
|
||||||
|
use Doctrine\DBAL\Schema\Schema;
|
||||||
|
use Doctrine\Migrations\AbstractMigration;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Auto-generated Migration: Please modify to your needs!
|
||||||
|
*/
|
||||||
|
final class Version20260109081315 extends AbstractMigration
|
||||||
|
{
|
||||||
|
public function getDescription(): string
|
||||||
|
{
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
|
||||||
|
public function up(Schema $schema): void
|
||||||
|
{
|
||||||
|
// this up() migration is auto-generated, please modify it to your needs
|
||||||
|
$this->addSql('ALTER TABLE booking_edit_draft ADD travel_date DATE NOT NULL COMMENT \'(DC2Type:date_immutable)\'');
|
||||||
|
$this->addSql('CREATE INDEX IDX_DRAFT_TRAVEL_DATE ON booking_edit_draft (travel_date)');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function down(Schema $schema): void
|
||||||
|
{
|
||||||
|
// this down() migration is auto-generated, please modify it to your needs
|
||||||
|
$this->addSql('DROP INDEX IDX_DRAFT_TRAVEL_DATE ON booking_edit_draft');
|
||||||
|
$this->addSql('ALTER TABLE booking_edit_draft DROP travel_date');
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace DoctrineMigrations;
|
||||||
|
|
||||||
|
use Doctrine\DBAL\Schema\Schema;
|
||||||
|
use Doctrine\Migrations\AbstractMigration;
|
||||||
|
|
||||||
|
final class Version20260110105253 extends AbstractMigration
|
||||||
|
{
|
||||||
|
public function getDescription(): string
|
||||||
|
{
|
||||||
|
return 'Add booking_number column to booking_edit_draft table';
|
||||||
|
}
|
||||||
|
|
||||||
|
public function up(Schema $schema): void
|
||||||
|
{
|
||||||
|
$this->addSql('ALTER TABLE booking_edit_draft ADD booking_number INT DEFAULT NULL');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function down(Schema $schema): void
|
||||||
|
{
|
||||||
|
$this->addSql('ALTER TABLE booking_edit_draft DROP booking_number');
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace DoctrineMigrations;
|
||||||
|
|
||||||
|
use Doctrine\DBAL\Schema\Schema;
|
||||||
|
use Doctrine\Migrations\AbstractMigration;
|
||||||
|
|
||||||
|
final class Version20260113140000 extends AbstractMigration
|
||||||
|
{
|
||||||
|
public function getDescription(): string
|
||||||
|
{
|
||||||
|
return 'Add date_id and hotel_id columns to booking_edit_draft table for export functionality';
|
||||||
|
}
|
||||||
|
|
||||||
|
public function up(Schema $schema): void
|
||||||
|
{
|
||||||
|
$this->addSql('ALTER TABLE booking_edit_draft ADD date_id INT DEFAULT NULL');
|
||||||
|
$this->addSql('ALTER TABLE booking_edit_draft ADD hotel_id INT DEFAULT NULL');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function down(Schema $schema): void
|
||||||
|
{
|
||||||
|
$this->addSql('ALTER TABLE booking_edit_draft DROP date_id');
|
||||||
|
$this->addSql('ALTER TABLE booking_edit_draft DROP hotel_id');
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,29 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace DoctrineMigrations;
|
||||||
|
|
||||||
|
use Doctrine\DBAL\Schema\Schema;
|
||||||
|
use Doctrine\Migrations\AbstractMigration;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Auto-generated Migration: Please modify to your needs!
|
||||||
|
*/
|
||||||
|
final class Version20260119174522 extends AbstractMigration
|
||||||
|
{
|
||||||
|
public function getDescription(): string
|
||||||
|
{
|
||||||
|
return 'Add profile_complete flag to user table';
|
||||||
|
}
|
||||||
|
|
||||||
|
public function up(Schema $schema): void
|
||||||
|
{
|
||||||
|
$this->addSql('ALTER TABLE user ADD profile_complete TINYINT(1) NOT NULL');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function down(Schema $schema): void
|
||||||
|
{
|
||||||
|
$this->addSql('ALTER TABLE user DROP profile_complete');
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace DoctrineMigrations;
|
||||||
|
|
||||||
|
use Doctrine\DBAL\Schema\Schema;
|
||||||
|
use Doctrine\Migrations\AbstractMigration;
|
||||||
|
|
||||||
|
final class Version20260318113000 extends AbstractMigration
|
||||||
|
{
|
||||||
|
public function getDescription(): string
|
||||||
|
{
|
||||||
|
return 'Create newsletter_opt_in_confirmation table for double opt-in confirmations';
|
||||||
|
}
|
||||||
|
|
||||||
|
public function up(Schema $schema): void
|
||||||
|
{
|
||||||
|
$this->addSql("CREATE TABLE newsletter_opt_in_confirmation (id INT AUTO_INCREMENT NOT NULL, email VARCHAR(255) NOT NULL, token_hash VARCHAR(64) NOT NULL, expires_at DATETIME NOT NULL COMMENT '(DC2Type:datetime_immutable)', confirmed_at DATETIME DEFAULT NULL COMMENT '(DC2Type:datetime_immutable)', created_at DATETIME NOT NULL COMMENT '(DC2Type:datetime_immutable)', UNIQUE INDEX UNIQ_NEWSLETTER_OPT_IN_TOKEN_HASH (token_hash), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB");
|
||||||
|
}
|
||||||
|
|
||||||
|
public function down(Schema $schema): void
|
||||||
|
{
|
||||||
|
$this->addSql('DROP TABLE newsletter_opt_in_confirmation');
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace DoctrineMigrations;
|
||||||
|
|
||||||
|
use Doctrine\DBAL\Schema\Schema;
|
||||||
|
use Doctrine\Migrations\AbstractMigration;
|
||||||
|
|
||||||
|
final class Version20260320071724 extends AbstractMigration
|
||||||
|
{
|
||||||
|
public function getDescription(): string
|
||||||
|
{
|
||||||
|
return 'Add error_code column and index to log_entry table';
|
||||||
|
}
|
||||||
|
|
||||||
|
public function up(Schema $schema): void
|
||||||
|
{
|
||||||
|
$this->addSql('ALTER TABLE log_entry ADD error_code VARCHAR(12) DEFAULT NULL');
|
||||||
|
$this->addSql('CREATE INDEX IDX_LOG_ENTRY_ERROR_CODE ON log_entry (error_code)');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function down(Schema $schema): void
|
||||||
|
{
|
||||||
|
$this->addSql('DROP INDEX IDX_LOG_ENTRY_ERROR_CODE ON log_entry');
|
||||||
|
$this->addSql('ALTER TABLE log_entry DROP error_code');
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace DoctrineMigrations;
|
||||||
|
|
||||||
|
use Doctrine\DBAL\Schema\Schema;
|
||||||
|
use Doctrine\Migrations\AbstractMigration;
|
||||||
|
|
||||||
|
final class Version20260321120000 extends AbstractMigration
|
||||||
|
{
|
||||||
|
public function getDescription(): string
|
||||||
|
{
|
||||||
|
return 'Create travel_snapshot table for DB-primary travel persistence';
|
||||||
|
}
|
||||||
|
|
||||||
|
public function up(Schema $schema): void
|
||||||
|
{
|
||||||
|
$this->addSql('CREATE TABLE travel_snapshot (id INT AUTO_INCREMENT NOT NULL, date_id INT NOT NULL, hotel_id INT NOT NULL, date_code VARCHAR(64) DEFAULT NULL, label VARCHAR(255) DEFAULT NULL, product_id INT DEFAULT NULL, product_code VARCHAR(64) DEFAULT NULL, hotel_code VARCHAR(64) DEFAULT NULL, hotel_label VARCHAR(255) DEFAULT NULL, date_from DATE DEFAULT NULL COMMENT \'(DC2Type:date_immutable)\', date_to DATE DEFAULT NULL COMMENT \'(DC2Type:date_immutable)\', payload LONGTEXT NOT NULL, payload_hash VARCHAR(64) NOT NULL, captured_at DATETIME NOT NULL COMMENT \'(DC2Type:datetime_immutable)\', updated_at DATETIME NOT NULL COMMENT \'(DC2Type:datetime_immutable)\', extended_refreshed_at DATETIME DEFAULT NULL COMMENT \'(DC2Type:datetime_immutable)\', UNIQUE INDEX uniq_snapshot_date_hotel (date_id, hotel_id), INDEX idx_snapshot_date_code (date_code), INDEX idx_snapshot_product_id (product_id), INDEX idx_snapshot_date_to (date_to), INDEX idx_snapshot_extended_refreshed_at (extended_refreshed_at), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function down(Schema $schema): void
|
||||||
|
{
|
||||||
|
$this->addSql('DROP TABLE travel_snapshot');
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,45 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace DoctrineMigrations;
|
||||||
|
|
||||||
|
use Doctrine\DBAL\Schema\Schema;
|
||||||
|
use Doctrine\Migrations\AbstractMigration;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Auto-generated Migration: Please modify to your needs!
|
||||||
|
*/
|
||||||
|
final class Version20260323182524 extends AbstractMigration
|
||||||
|
{
|
||||||
|
public function getDescription(): string
|
||||||
|
{
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
|
||||||
|
public function up(Schema $schema): void
|
||||||
|
{
|
||||||
|
// this up() migration is auto-generated, please modify it to your needs
|
||||||
|
$this->addSql('ALTER TABLE booking_edit_draft CHANGE form_data form_data JSON NOT NULL');
|
||||||
|
$this->addSql('ALTER TABLE log_entry CHANGE context context JSON DEFAULT NULL, CHANGE extra extra JSON DEFAULT NULL');
|
||||||
|
$this->addSql('ALTER TABLE newsletter_opt_in_confirmation RENAME INDEX uniq_newsletter_opt_in_token_hash TO UNIQ_70505214B3BC57DA');
|
||||||
|
$this->addSql('ALTER TABLE user CHANGE roles roles JSON NOT NULL, CHANGE hotel_codes hotel_codes JSON NOT NULL');
|
||||||
|
$this->addSql('DROP INDEX IDX_75EA56E0FB7336F0 ON messenger_messages');
|
||||||
|
$this->addSql('DROP INDEX IDX_75EA56E0E3BD61CE ON messenger_messages');
|
||||||
|
$this->addSql('DROP INDEX IDX_75EA56E016BA31DB ON messenger_messages');
|
||||||
|
$this->addSql('CREATE INDEX IDX_75EA56E0FB7336F0E3BD61CE16BA31DBBF396750 ON messenger_messages (queue_name, available_at, delivered_at, id)');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function down(Schema $schema): void
|
||||||
|
{
|
||||||
|
// this down() migration is auto-generated, please modify it to your needs
|
||||||
|
$this->addSql('ALTER TABLE newsletter_opt_in_confirmation RENAME INDEX uniq_70505214b3bc57da TO UNIQ_NEWSLETTER_OPT_IN_TOKEN_HASH');
|
||||||
|
$this->addSql('ALTER TABLE user CHANGE roles roles JSON NOT NULL COLLATE `utf8mb4_bin`, CHANGE hotel_codes hotel_codes JSON NOT NULL COLLATE `utf8mb4_bin`');
|
||||||
|
$this->addSql('DROP INDEX IDX_75EA56E0FB7336F0E3BD61CE16BA31DBBF396750 ON messenger_messages');
|
||||||
|
$this->addSql('CREATE INDEX IDX_75EA56E0FB7336F0 ON messenger_messages (queue_name)');
|
||||||
|
$this->addSql('CREATE INDEX IDX_75EA56E0E3BD61CE ON messenger_messages (available_at)');
|
||||||
|
$this->addSql('CREATE INDEX IDX_75EA56E016BA31DB ON messenger_messages (delivered_at)');
|
||||||
|
$this->addSql('ALTER TABLE log_entry CHANGE context context JSON DEFAULT NULL COLLATE `utf8mb4_bin`, CHANGE extra extra JSON DEFAULT NULL COLLATE `utf8mb4_bin`');
|
||||||
|
$this->addSql('ALTER TABLE booking_edit_draft CHANGE form_data form_data JSON NOT NULL COLLATE `utf8mb4_bin`');
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace DoctrineMigrations;
|
||||||
|
|
||||||
|
use Doctrine\DBAL\Schema\Schema;
|
||||||
|
use Doctrine\Migrations\AbstractMigration;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Changes travel_snapshot.payload from TEXT to LONGTEXT so large
|
||||||
|
* plain JSON snapshot payloads can be stored safely.
|
||||||
|
*/
|
||||||
|
final class Version20260324120000 extends AbstractMigration
|
||||||
|
{
|
||||||
|
public function getDescription(): string
|
||||||
|
{
|
||||||
|
return 'Change travel_snapshot.payload from TEXT to LONGTEXT for plain JSON snapshot payloads';
|
||||||
|
}
|
||||||
|
|
||||||
|
public function up(Schema $schema): void
|
||||||
|
{
|
||||||
|
$this->addSql('ALTER TABLE travel_snapshot CHANGE payload payload LONGTEXT NOT NULL');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function down(Schema $schema): void
|
||||||
|
{
|
||||||
|
$this->addSql('ALTER TABLE travel_snapshot CHANGE payload payload TEXT NOT NULL');
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace DoctrineMigrations;
|
||||||
|
|
||||||
|
use Doctrine\DBAL\Schema\Schema;
|
||||||
|
use Doctrine\Migrations\AbstractMigration;
|
||||||
|
|
||||||
|
final class Version20260422120000 extends AbstractMigration
|
||||||
|
{
|
||||||
|
public function getDescription(): string
|
||||||
|
{
|
||||||
|
return 'Store requested Mailjet list IDs on newsletter opt-in confirmations';
|
||||||
|
}
|
||||||
|
|
||||||
|
public function up(Schema $schema): void
|
||||||
|
{
|
||||||
|
$this->addSql("ALTER TABLE newsletter_opt_in_confirmation ADD mailjet_list_ids JSON DEFAULT NULL COMMENT '(DC2Type:json)'");
|
||||||
|
$this->addSql('UPDATE newsletter_opt_in_confirmation SET mailjet_list_ids = JSON_ARRAY(10321569) WHERE mailjet_list_ids IS NULL');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function down(Schema $schema): void
|
||||||
|
{
|
||||||
|
$this->addSql('ALTER TABLE newsletter_opt_in_confirmation DROP mailjet_list_ids');
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace DoctrineMigrations;
|
||||||
|
|
||||||
|
use Doctrine\DBAL\Schema\Schema;
|
||||||
|
use Doctrine\Migrations\AbstractMigration;
|
||||||
|
|
||||||
|
final class Version20260423120000 extends AbstractMigration
|
||||||
|
{
|
||||||
|
public function getDescription(): string
|
||||||
|
{
|
||||||
|
return 'Store optional first and last names on newsletter opt-in confirmations';
|
||||||
|
}
|
||||||
|
|
||||||
|
public function up(Schema $schema): void
|
||||||
|
{
|
||||||
|
$this->addSql("ALTER TABLE newsletter_opt_in_confirmation ADD first_name VARCHAR(255) DEFAULT NULL, ADD last_name VARCHAR(255) DEFAULT NULL");
|
||||||
|
}
|
||||||
|
|
||||||
|
public function down(Schema $schema): void
|
||||||
|
{
|
||||||
|
$this->addSql('ALTER TABLE newsletter_opt_in_confirmation DROP first_name, DROP last_name');
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace DoctrineMigrations;
|
||||||
|
|
||||||
|
use Doctrine\DBAL\Schema\Schema;
|
||||||
|
use Doctrine\Migrations\AbstractMigration;
|
||||||
|
|
||||||
|
final class Version20260424110732 extends AbstractMigration
|
||||||
|
{
|
||||||
|
public function getDescription(): string
|
||||||
|
{
|
||||||
|
return 'Track newsletter revocations on opt-in confirmations';
|
||||||
|
}
|
||||||
|
|
||||||
|
public function up(Schema $schema): void
|
||||||
|
{
|
||||||
|
$this->addSql("ALTER TABLE newsletter_opt_in_confirmation ADD revoked_at DATETIME DEFAULT NULL COMMENT '(DC2Type:datetime_immutable)'");
|
||||||
|
}
|
||||||
|
|
||||||
|
public function down(Schema $schema): void
|
||||||
|
{
|
||||||
|
$this->addSql('ALTER TABLE newsletter_opt_in_confirmation DROP revoked_at');
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,29 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace DoctrineMigrations;
|
||||||
|
|
||||||
|
use Doctrine\DBAL\Schema\Schema;
|
||||||
|
use Doctrine\Migrations\AbstractMigration;
|
||||||
|
|
||||||
|
final class Version20260429120000 extends AbstractMigration
|
||||||
|
{
|
||||||
|
public function getDescription(): string
|
||||||
|
{
|
||||||
|
return 'Create per-list newsletter consent table and backfill confirmed opt-ins';
|
||||||
|
}
|
||||||
|
|
||||||
|
public function up(Schema $schema): void
|
||||||
|
{
|
||||||
|
$this->addSql("CREATE TABLE newsletter_consent (id INT AUTO_INCREMENT NOT NULL, email VARCHAR(255) NOT NULL, mailjet_list_id INT NOT NULL, confirmed_at DATETIME DEFAULT NULL COMMENT '(DC2Type:datetime_immutable)', revoked_at DATETIME DEFAULT NULL COMMENT '(DC2Type:datetime_immutable)', first_name VARCHAR(255) DEFAULT NULL, last_name VARCHAR(255) DEFAULT NULL, created_at DATETIME NOT NULL COMMENT '(DC2Type:datetime_immutable)', updated_at DATETIME NOT NULL COMMENT '(DC2Type:datetime_immutable)', UNIQUE INDEX UNIQ_NEWSLETTER_CONSENT_EMAIL_LIST (email, mailjet_list_id), INDEX IDX_NEWSLETTER_CONSENT_EMAIL (email), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB");
|
||||||
|
$this->addSql("INSERT IGNORE INTO newsletter_consent (email, mailjet_list_id, confirmed_at, revoked_at, first_name, last_name, created_at, updated_at) SELECT email, 10321569, confirmed_at, revoked_at, first_name, last_name, created_at, COALESCE(confirmed_at, created_at) FROM newsletter_opt_in_confirmation WHERE confirmed_at IS NOT NULL AND (mailjet_list_ids IS NULL OR JSON_LENGTH(mailjet_list_ids) = 0)");
|
||||||
|
$this->addSql("INSERT IGNORE INTO newsletter_consent (email, mailjet_list_id, confirmed_at, revoked_at, first_name, last_name, created_at, updated_at) SELECT c.email, CAST(j.list_id AS UNSIGNED), c.confirmed_at, c.revoked_at, c.first_name, c.last_name, c.created_at, COALESCE(c.confirmed_at, c.created_at) FROM newsletter_opt_in_confirmation c JOIN JSON_TABLE(c.mailjet_list_ids, '$[*]' COLUMNS (list_id VARCHAR(32) PATH '$')) j WHERE c.confirmed_at IS NOT NULL");
|
||||||
|
$this->addSql('DELETE FROM newsletter_opt_in_confirmation WHERE confirmed_at IS NOT NULL');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function down(Schema $schema): void
|
||||||
|
{
|
||||||
|
$this->addSql('DROP TABLE newsletter_consent');
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace DoctrineMigrations;
|
||||||
|
|
||||||
|
use Doctrine\DBAL\Schema\Schema;
|
||||||
|
use Doctrine\Migrations\AbstractMigration;
|
||||||
|
|
||||||
|
final class Version20260429130000 extends AbstractMigration
|
||||||
|
{
|
||||||
|
public function getDescription(): string
|
||||||
|
{
|
||||||
|
return 'Rename newsletter opt-in confirmation table to newsletter opt-in request';
|
||||||
|
}
|
||||||
|
|
||||||
|
public function up(Schema $schema): void
|
||||||
|
{
|
||||||
|
$this->addSql('RENAME TABLE newsletter_opt_in_confirmation TO newsletter_opt_in_request');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function down(Schema $schema): void
|
||||||
|
{
|
||||||
|
$this->addSql('RENAME TABLE newsletter_opt_in_request TO newsletter_opt_in_confirmation');
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,35 +1,34 @@
|
|||||||
{
|
{
|
||||||
"name": "myep-next",
|
"name": "myep",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@babel/core": "^7.17.0",
|
"@babel/core": "^7.17.0",
|
||||||
"@babel/preset-env": "^7.16.0",
|
"@babel/preset-env": "^7.16.0",
|
||||||
"@hotwired/stimulus": "^3.0.0",
|
"@hotwired/stimulus": "^3.0.0",
|
||||||
"@symfony/stimulus-bridge": "^3.2.0",
|
"@symfony/stimulus-bridge": "^3.2.0",
|
||||||
"@symfony/webpack-encore": "^5.0.0",
|
"@symfony/webpack-encore": "^6.0.0",
|
||||||
"@tailwindcss/forms": "^0.5.9",
|
"@tailwindcss/forms": "^0.5.9",
|
||||||
"@tailwindcss/typography": "^0.5.15",
|
"@tailwindcss/typography": "^0.5.15",
|
||||||
"autoprefixer": "^10.4.20",
|
"autoprefixer": "^10.4.20",
|
||||||
"core-js": "^3.38.0",
|
"core-js": "^3.38.0",
|
||||||
"file-loader": "^6.2.0",
|
"cypress": "^15.5.0",
|
||||||
"htmx.org": "^1.9.12",
|
"file-loader": "^6.2.0",
|
||||||
"postcss": "^8.4.49",
|
"htmx.org": "^1.9.12",
|
||||||
"postcss-loader": "^8.1.1",
|
"postcss": "^8.4.49",
|
||||||
"regenerator-runtime": "^0.13.9",
|
"postcss-loader": "^8.1.1",
|
||||||
"tailwindcss": "^3.4.15",
|
"regenerator-runtime": "^0.13.9",
|
||||||
"webpack": "^5.74.0",
|
"tailwindcss": "^3.4.15",
|
||||||
"webpack-cli": "^5.1.0",
|
"tippy.js": "^6.3.7",
|
||||||
"webpack-notifier": "^1.15.0"
|
"toastify-js": "^1.12.0",
|
||||||
},
|
"webpack": "^5.74.0",
|
||||||
"license": "WTFPL",
|
"webpack-cli": "^6.0.1"
|
||||||
"private": true,
|
},
|
||||||
"scripts": {
|
"license": "WTFPL",
|
||||||
"dev-server": "encore dev-server",
|
"private": true,
|
||||||
"dev": "encore dev",
|
"scripts": {
|
||||||
"watch": "encore dev --watch",
|
"dev-server": "encore dev-server",
|
||||||
"build": "encore production --progress"
|
"dev": "encore dev",
|
||||||
},
|
"watch": "encore dev --watch",
|
||||||
"dependencies": {
|
"build": "encore production --progress",
|
||||||
"@iframe-resizer/child": "^5.3.2",
|
"cy:open": "cypress open"
|
||||||
"tippy.js": "^6.3.7"
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
includes:
|
||||||
|
- vendor/phpstan/phpstan-symfony/extension.neon
|
||||||
|
- vendor/phpstan/phpstan-doctrine/extension.neon
|
||||||
|
|
||||||
|
parameters:
|
||||||
|
level: 6
|
||||||
|
paths:
|
||||||
|
- src
|
||||||
|
tmpDir: var/phpstan
|
||||||
|
parallel:
|
||||||
|
maximumNumberOfProcesses: 1
|
||||||
|
symfony:
|
||||||
|
containerXmlPath: var/cache/dev/App_KernelDevDebugContainer.xml
|
||||||
|
doctrine:
|
||||||
|
objectManagerLoader: tests/doctrine-object-manager.php
|
||||||