1508 Commits

Author SHA1 Message Date
SBD
e74731b789 0.0.185 route forms 2025-03-05 14:46:06 +03:00
SBD
8694856fc9 Merge remote-tracking branch 'origin/v2' into v2 2025-03-05 14:31:28 +03:00
SBD
3d2b70609d 0.0.184 w_route_card 2025-03-05 14:30:00 +03:00
SDE
dd260e229a 2.1.46 get_routes_Dict change sort routes 2025-02-28 17:53:50 +03:00
SBD
0bc8f85bee 0.0.183 routes 2025-02-28 17:51:42 +03:00
SBD
496534f76a 0.0.182 routes 2025-02-28 17:37:20 +03:00
SBD
d681f6739b 0.0.181 routes 2025-02-28 17:24:17 +03:00
SDE
64de7ea34c 2.1.45 country short_code > code 2025-02-28 17:22:50 +03:00
SBD
25c913c572 0.0.180 routes 2025-02-28 17:21:37 +03:00
SBD
f34a54a33c 0.0.179 routes 2025-02-28 17:14:58 +03:00
SBD
b511cbbdaf 0.0.178 routes 2025-02-28 17:09:16 +03:00
SBD
17c040f0d3 Merge remote-tracking branch 'origin/v2' into v2 2025-02-28 17:06:01 +03:00
SBD
f4a1da9ded 0.0.177 routes 2025-02-28 17:05:56 +03:00
SDE
79de035ae7 2.1.45 fixes text in create routes forms 2025-02-28 16:49:43 +03:00
SDE
ddc844456d 2.1.44 get_routes_Dict add now_DT 2025-02-28 16:24:50 +03:00
SBD
fef72df927 Merge remote-tracking branch 'origin/v2' into v2 2025-02-28 16:07:58 +03:00
SBD
134216c5f5 0.0.176 routes 2025-02-28 16:07:53 +03:00
SDE
685c201840 2.1.43 fix 2025-02-28 15:42:44 +03:00
SBD
fd343f098e 0.0.175 routes 2025-02-28 15:26:10 +03:00
SBD
053d7f79da Merge remote-tracking branch 'origin/v2' into v2 2025-02-28 15:17:05 +03:00
SBD
60a088236b 0.0.174 routes 2025-02-28 15:16:49 +03:00
SDE
768d82a026 2.1.42 elements_on_page set 25 2025-02-28 15:15:48 +03:00
SDE
1c51c7fbf5 2.1.41 create_or_change_route_ajax get route_id by POST 2025-02-28 15:12:58 +03:00
SBD
2196890105 0.0.173 routes 2025-02-28 15:12:04 +03:00
SBD
4bf27702a4 Merge remote-tracking branch 'origin/v2' into v2 2025-02-28 14:53:31 +03:00
SBD
4bf65b6eef 0.0.172 routes 2025-02-28 14:53:26 +03:00
SDE
98c6622e1f 2.1.40 cargo_type default change 2025-02-28 14:43:34 +03:00
SBD
e0baa07c4f 0.0.171 routes 2025-02-28 14:42:21 +03:00
SBD
e2d951ccbf Merge remote-tracking branch 'origin/v2' into v2 2025-02-28 14:33:00 +03:00
SBD
cdff6c1966 0.0.170 routes 2025-02-28 14:32:54 +03:00
SDE
00fe34bc0e 2.1.40 cargo_type_for_show сге 2025-02-28 14:24:44 +03:00
SBD
910ea908c3 0.0.169 routes 2025-02-24 17:49:24 +03:00
SBD
017d3b18ef 0.0.168 routes 2025-02-24 17:46:38 +03:00
SBD
61efc14b9a 0.0.167 routes 2025-02-24 17:44:03 +03:00
SBD
f3a28ddb30 0.0.166 routes 2025-02-24 17:13:29 +03:00
SBD
1dc8a64f9f 0.0.164 routes 2025-02-17 20:16:48 +03:00
SBD
56371267bc 0.0.163 routes 2025-02-17 20:01:54 +03:00
SBD
a68fe3970f 0.0.162 routes 2025-02-17 19:16:54 +03:00
SBD
217b1d89ea Merge remote-tracking branch 'origin/v2' into v2 2025-02-17 17:20:10 +03:00
SBD
4f2e3776ed 0.0.161 routes 2025-02-17 17:20:04 +03:00
SDE
3c6f90f103 2.1.38 find_routes paging 2025-02-17 17:05:39 +03:00
SBD
e3fd8457c0 0.0.160 routes 2025-02-17 16:53:45 +03:00
SBD
8119955f52 0.0.159 routes 2025-02-17 16:13:53 +03:00
SBD
b4b79e185e 0.0.158 routes 2025-02-17 15:59:04 +03:00
SDE
fb07005e9a 2.1.36 route is_highlighted_now 2025-02-17 15:51:52 +03:00
SBD
cd7bfa07bb 0.0.157 routes 2025-02-17 15:37:06 +03:00
SDE
48a21b319a Merge remote-tracking branch 'origin/v2' into v2 2025-02-17 15:23:20 +03:00
SDE
808d44555c 2.1.35 route_search_results_View fix cities 2025-02-17 15:23:11 +03:00
SBD
f7857cb5c2 0.0.156 routes 2025-02-17 15:21:12 +03:00
SBD
15b5911013 Merge remote-tracking branch 'origin/v2' into v2 2025-02-17 15:18:22 +03:00
SBD
8e6111dfb1 0.0.155 routes 2025-02-17 15:18:16 +03:00
SDE
c476fa6d77 2.1.34 route_search_results_View fix cities 2025-02-17 15:14:35 +03:00
SBD
c59c5d929b 0.0.153 routes 2025-02-17 14:59:02 +03:00
SBD
e1053073a1 0.0.152 routes 2025-02-14 16:20:26 +03:00
SBD
0a56555f35 0.0.151 routes 2025-02-05 19:19:31 +03:00
SBD
1188b45c20 0.0.150 routes 2025-02-05 18:47:30 +03:00
SBD
97ffcf417e 0.0.149 routes 2025-02-05 18:17:31 +03:00
SBD
5801e10f80 0.0.148 routes 2025-02-04 21:54:27 +03:00
SBD
3c08686f21 0.0.147 routes 2025-02-04 20:06:22 +03:00
SBD
eff021b4e2 0.0.146 routes 2025-02-04 19:27:36 +03:00
SDE
8e2f5f6bac Merge remote-tracking branch 'origin/v2' into v2 2025-02-04 18:08:38 +03:00
SDE
05798c4b49 2.1.33 short names for type_trasport and cargo_type in route widget 2025-02-04 18:08:29 +03:00
SBD
876d91de01 0.0.145 routes 2025-02-04 18:07:53 +03:00
SBD
a67436b854 0.0.144 routes 2025-02-04 17:28:43 +03:00
SDE
6e8db45cb8 Merge remote-tracking branch 'origin/v2' into v2 2025-02-04 17:02:15 +03:00
SDE
51abe338c0 2.1.32 avatar in admin 2025-02-04 17:02:04 +03:00
SBD
84aecc715e 0.0.143 routes 2025-02-03 19:08:21 +03:00
SBD
93764163d4 0.0.142 routes 2025-02-03 16:45:42 +03:00
SBD
9e3888bccf 0.0.141 routes 2025-02-02 21:38:03 +03:00
SBD
293b7c9f6f 0.0.140 routes 2025-02-01 14:07:30 +03:00
SBD
70dd911445 0.0.139 routes 2025-01-31 20:00:42 +03:00
SBD
8496a0844c 0.0.138 scroll search route results 2025-01-31 19:15:37 +03:00
SBD
fe110b1eb9 0.0.137 scroll search route results 2025-01-31 19:03:01 +03:00
SBD
0407cadd50 0.0.136 scroll search route results 2025-01-28 15:10:45 +03:00
SBD
b825504063 0.0.136 scroll search route results 2025-01-25 23:20:24 +03:00
SBD
ec55fa787f 0.0.135 scroll search route results 2025-01-25 21:37:23 +03:00
SBD
cd55111003 0.0.134 fix form textarea 2025-01-25 13:43:37 +03:00
SBD
ee31eb045f 0.0.134 search routes 2025-01-25 13:34:20 +03:00
SBD
56bcd5bee9 0.0.133 search routes 2025-01-25 00:50:06 +03:00
SBD
b5155e7ce2 0.0.132 search routes 2025-01-25 00:05:00 +03:00
SBD
ca05de3d7d 0.0.131 search routes 2025-01-24 21:43:03 +03:00
SDE
04af851875 2.1.28 editable_routes property 2025-01-24 19:54:53 +03:00
SBD
4c7126f414 0.0.130 search routes 2025-01-24 18:14:22 +03:00
SBD
e217506627 0.0.56 p search res 2025-01-24 07:44:18 +03:00
SBD
6e0c5d1662 0.0.55 p search res 2025-01-23 19:43:08 +03:00
SBD
15143188b7 0.0.54 p search res 2025-01-23 19:35:11 +03:00
SDE
da9dc4bb03 2.1.27 route_search_results_View change tpl 2025-01-23 18:17:35 +03:00
SBD
ad34c1b670 0.0.53 p search res 2025-01-23 18:13:51 +03:00
SBD
bb691a6ad0 0.0.52 w route card 2025-01-23 18:10:44 +03:00
SBD
2c00a38ceb 0.0.51 w route card 2025-01-21 16:48:19 +03:00
SBD
8291f956c2 0.0.50 w route card 2025-01-21 00:10:01 +03:00
SBD
a8335f10ee 0.0.49 w route card 2025-01-20 23:40:34 +03:00
SBD
db135af725 Merge remote-tracking branch 'origin/v2' into v2 2025-01-18 15:08:35 +03:00
SBD
feb2b9d697 0.0.48 w route card 2025-01-18 15:08:26 +03:00
SDE
2f0e1bb396 2.1.26 check_post_request_and_get_data 2025-01-18 13:55:49 +03:00
SBD
2a7a666f7d Merge remote-tracking branch 'origin/v2' into v2 2025-01-18 13:31:47 +03:00
SBD
9bfcb00861 0.0.47 w route card 2025-01-18 13:31:38 +03:00
SDE
06eba5ff25 2.1.25 fix edit_route 2025-01-18 04:33:30 +03:00
SBD
3c1f03de26 0.0.46 w route card 2025-01-17 20:49:35 +03:00
SBD
01ffddf9ef 0.0.45 w route card 2025-01-17 19:52:01 +03:00
SBD
b3f4eec2e9 0.0.44 w route card 2025-01-17 19:43:35 +03:00
SBD
34ef2f23b7 0.0.43 w route card 2025-01-16 18:27:06 +03:00
SBD
529b324817 0.0.42 fix form 2025-01-16 17:18:12 +03:00
SBD
b3e8d75539 0.0.41 fix form 2025-01-16 16:27:29 +03:00
SBD
81e0812c66 0.0.40 fix form 2025-01-16 16:20:25 +03:00
SBD
e667e5a0c9 0.0.39 fix form 2025-01-16 15:58:22 +03:00
SBD
6f9bfb38f5 Merge remote-tracking branch 'origin/v2' into v2 2025-01-16 15:53:07 +03:00
SBD
6656457bcc 0.0.38 fix form 2025-01-16 15:52:49 +03:00
SDE
07ee30f360 2.1.24 fix send support mail 2025-01-16 15:29:30 +03:00
SDE
5f4ea5910d 2.1.22 routes funcs 2025-01-16 15:08:58 +03:00
SBD
c568494a8e 0.0.38 forms 2025-01-15 21:46:24 +03:00
SBD
fd211c464f 0.0.37 forms 2025-01-15 21:35:50 +03:00
SBD
ff58c07ca6 0.0.36 forms 2025-01-15 21:07:52 +03:00
SBD
2ea6d61d39 0.0.35 forms 2025-01-15 21:05:51 +03:00
SBD
c5214d830f Merge remote-tracking branch 'origin/v2' into v2 2025-01-15 20:51:59 +03:00
SBD
8f3bba620c 0.0.34 forms 2025-01-15 20:51:50 +03:00
SDE
9116b9efe1 2.1.21 fix cargo_type choices 2025-01-15 19:55:09 +03:00
SDE
575ee074b1 2.1.20 reference_data_tags 2025-01-15 19:17:26 +03:00
SBD
2d650cd51f Merge remote-tracking branch 'origin/v2' into v2 2025-01-15 18:40:48 +03:00
SBD
4fab7ba2c0 0.0.33 forms 2025-01-15 18:40:11 +03:00
SDE
72c658c594 Merge remote-tracking branch 'origin/v2' into v2 2025-01-15 18:12:24 +03:00
SDE
89058ed264 2.1.19 route form 2025-01-15 18:12:12 +03:00
SBD
c247bfcefa 0.0.32 forms 2025-01-15 18:11:01 +03:00
SBD
74742c3e8e 0.0.31 forms 2025-01-15 18:04:57 +03:00
SBD
33239e3c90 0.0.30 forms 2025-01-15 18:00:11 +03:00
SBD
97be421ee3 Merge remote-tracking branch 'origin/v2' into v2 2025-01-14 20:09:25 +03:00
SBD
8484e48c56 0.0.29 forms 2025-01-14 20:09:16 +03:00
SDE
c07bf2538d 2.1.18 route form 2025-01-14 20:09:05 +03:00
SDE
8ac11d6234 2.1.17 route form 2025-01-14 19:56:36 +03:00
SBD
a0b08a9a94 0.0.28 my routes 2025-01-14 19:25:52 +03:00
SBD
9bc6d488f1 Merge remote-tracking branch 'origin/v2' into v2 2025-01-14 19:11:29 +03:00
SBD
b7a830ab6f 0.0.27 my routes 2025-01-14 19:11:20 +03:00
SDE
7b915f0c6c 2.1.16 change cargo_type and transport_type names 2025-01-14 19:00:19 +03:00
SBD
a68d469eda 0.0.26 my routes 2025-01-14 18:41:07 +03:00
SBD
a5b106edfe 0.0.25 my routes 2025-01-14 18:39:12 +03:00
SDE
a40ae5d37d 2.1.15 change cargo_type and transport_type names 2025-01-14 18:38:38 +03:00
SBD
4b57ad3f8b 0.0.24 my routes 2025-01-14 18:23:00 +03:00
SBD
cdedebd9f6 0.0.23 my routes 2025-01-14 17:50:56 +03:00
SBD
c237875732 0.0.22 form mover 2025-01-14 17:06:06 +03:00
SBD
7f7a3d19fb 0.0.21 form mover 2025-01-14 17:05:41 +03:00
SBD
1db2b0edb9 0.0.20 form mover 2025-01-14 16:52:29 +03:00
SDE
9280025f1c 2.1.15 get_cargo_type_by_transport_type_ajax 2025-01-14 16:31:18 +03:00
SBD
9666c9dbf4 0.0.19 form mover 2025-01-14 16:28:32 +03:00
SBD
aac673f212 0.0.18 form mover 2025-01-14 16:27:45 +03:00
SBD
9a2a2d9aa2 0.0.17 form mover 2025-01-14 16:23:14 +03:00
SBD
9e8a5d1f37 Merge remote-tracking branch 'origin/v2' into v2 2025-01-14 16:19:52 +03:00
SBD
e938d5915a 0.0.16 form mover 2025-01-14 16:19:40 +03:00
SDE
b35ff27654 2.1.14 get_cargo_type_by_transport_type_ajax 2025-01-14 16:05:53 +03:00
SDE
cfe1a9d585 2.1.13 get_cargo_type_by_transport_type_ajax 2025-01-14 16:04:16 +03:00
SDE
04f097c1a9 Merge remote-tracking branch 'origin/v2' into v2 2025-01-14 11:30:58 +03:00
SDE
c81448e43d 2.1.12 create mover route form fix type_transport 2025-01-14 11:30:49 +03:00
SBD
6947d1c958 0.0.15 form mover 2025-01-13 19:43:02 +03:00
SBD
ee803a94e2 0.0.14 form mover 2025-01-13 17:32:19 +03:00
SDE
b2a76abe01 2.1.11 split mover and customer forms 2025-01-13 02:04:16 +03:00
SDE
0b03bdc81a 2.1.10 split mover and customer forms 2025-01-13 01:58:47 +03:00
SBD
eabfe3ab27 0.0.13 form mover 2025-01-12 20:15:53 +03:00
SBD
7357e750ae 0.0.12 form poster 2025-01-12 18:21:08 +03:00
SBD
4231e85a8e 0.0.11 form poster 2025-01-10 22:34:32 +03:00
SBD
1324c63d20 0.0.10 form poster 2025-01-10 22:30:27 +03:00
SBD
3f0fffda46 0.0.09 form poster 2025-01-10 22:27:58 +03:00
SBD
d397e765df Merge remote-tracking branch 'origin/v2' into v2 2025-01-10 22:14:09 +03:00
SBD
8f43ede3f0 0.0.08 form poster 2025-01-10 22:13:59 +03:00
SDE
e09743b474 2.1.9 get_splited_cargo_type 2025-01-10 21:48:20 +03:00
SBD
4c96c94549 0.0.07 form poster 2025-01-10 21:32:17 +03:00
SBD
66e00af171 Merge remote-tracking branch 'origin/v2' into v2 2025-01-10 21:19:11 +03:00
SBD
0ad3f2eb9a 0.0.06 form poster 2025-01-10 21:18:43 +03:00
SDE
b8ee9697f6 2.1.8 create_or_change_route_ajax 2025-01-10 21:14:12 +03:00
SBD
0ac84ed6e0 0.0.05 form poster 2025-01-10 20:58:13 +03:00
SBD
72f04e0d48 0.0.04 form poster 2025-01-10 00:57:31 +03:00
SBD
75a312c1d6 0.0.03 form poster 2025-01-08 23:07:12 +03:00
SBD
446aa9a0e8 0.0.2 form poster 2025-01-08 23:02:31 +03:00
SDE
48f8d1b08e 2.1.7 search_city request 2025-01-08 21:38:48 +03:00
SBD
2b809ae9a6 0.0.1 new functional twb 2025-01-08 21:33:19 +03:00
SDE
a76663ea81 2.1.6 cancel artem coddings 2025-01-08 19:59:39 +03:00
SBD
ed1383622f 1 2025-01-08 18:56:36 +03:00
5ea5529c67 TRI-293: edit form 2024-12-27 17:50:17 +03:00
SDE
04c4e8c791 2.1.5 get_routes_Dict fix from\to city v2 2024-12-26 17:27:17 +03:00
SDE
c94c1a9202 2.1.4 get_routes_Dict fix from\to city v2 2024-12-26 16:54:39 +03:00
SDE
0a67a1bb04 2.1.4 def create_or_change_route_ajax v2 2024-12-26 16:37:39 +03:00
6274190e09 TRI-293: edit adaptive 2024-12-26 13:31:36 +03:00
7d00e92aac TRI-293: edit form-poster + page styles 2024-12-25 16:55:11 +03:00
SDE
951315a1a4 2.1.3 def create_or_change_route_ajax change by ref v2 2024-12-23 20:44:44 +03:00
SDE
1e6c70122f 2.1.2 get_address_point_ajax change by ref v2 2024-12-23 20:42:06 +03:00
b867ab7d02 TRI-293: add custom and mover handler + mover page poster 2024-12-21 22:24:15 +03:00
6044b302bb TRI-293: add customer-form + adaptive 2024-12-18 18:47:12 +03:00
SDE
e56d29c322 2.1.1 import country flags 2024-12-05 17:38:08 +03:00
SDE
a140ffe523 2.1.0 change model route 2024-12-05 16:14:07 +03:00
SDE
b6c56b4890 2.0.0 DB for v2 2024-12-05 15:20:22 +03:00
SDE
ab767233ec 1.8.12 DB for v2 2024-12-05 15:19:56 +03:00
4b13a7ed02 v2 activation 2024-12-05 15:07:55 +03:00
7ba65e73ae TRI-283: fix video2 2024-12-04 15:00:44 +03:00
4a58a47a8e TRI-283: fix video1 2024-12-04 10:02:23 +03:00
e8506e1b4e TRI-297 add facebook pixel 2024-12-03 23:33:09 +03:00
61805df66b TRI-297 add facebook pixel 2024-12-03 12:47:18 +03:00
e98d426324 TRI-297 add facebook pixel 2024-12-03 12:46:13 +03:00
6c062ce3c8 TRI-297 add facebook pixel 2024-12-03 12:43:29 +03:00
8f47d4fb65 TRI-283: reload images 2024-12-02 13:38:09 +03:00
63e507d0ff TRI-283: reload images + text edit 2024-11-29 13:39:44 +03:00
5a16466766 Merge remote-tracking branch 'origin/dev' into dev 2024-11-28 13:37:30 +03:00
4b0c923ec0 1.3.6 recovery password TRI-261 2024-11-28 13:37:14 +03:00
87f67aa24a TRI-283: fix nags 2024-11-28 07:47:48 +03:00
93e48f3cbc TRI-283: fix scroll 2024-11-27 16:23:28 +03:00
baadc67fcf Merge remote-tracking branch 'origin/dev' into dev 2024-11-27 16:14:00 +03:00
bc16aea3a4 1.3.5 registration TRI-265 2024-11-27 16:13:50 +03:00
8041e3eb4d TRI-283: edit fixed 2024-11-27 15:54:51 +03:00
3e4c0b2ab5 1.3.4 TRI-288 phone in my routes 2024-11-27 15:50:47 +03:00
960c9ba5b0 Merge remote-tracking branch 'origin/dev' into dev 2024-11-27 15:38:19 +03:00
3efec91d74 1.3.3 TRI-288 phone in my routes 2024-11-27 15:38:05 +03:00
9e48c72245 TRI-283: edit bg 2024-11-27 15:31:03 +03:00
4dac9a5eec TRI-283: edit sticky2 2024-11-27 15:09:34 +03:00
bf25c67f1e TRI-283: edit sticky 2024-11-27 15:04:29 +03:00
1245899c07 TRI-283: edit ыешслн 2024-11-27 15:02:24 +03:00
66f25b6937 TRI-283: edit img 2024-11-27 14:55:46 +03:00
2d44edf5ab TRI-283: edit some code 2024-11-27 14:41:38 +03:00
7062c756b6 TRI-283: edit customer 2024-11-27 12:24:21 +03:00
7c173c9195 TRI-283: edit mover 2024-11-27 12:06:11 +03:00
e070ab15ac TRI-283: edit 2 height btn, text, image 2024-11-27 10:15:51 +03:00
400498c6fa TRI-283: edit height btn, text, image 2024-11-27 10:14:03 +03:00
3c5331c2d3 TRI-283: edit images xs 2024-11-23 09:00:55 +03:00
800b7ba493 TRI-283: edit dropdown 2024-11-22 15:21:54 +03:00
bc2689d1cf TRI-283: edit logo 2024-11-22 13:55:53 +03:00
ce9be11c0a TRI-283: post btns 2024-11-22 12:44:54 +03:00
43ba192496 TRI-283: edit footer 2024-11-22 12:38:11 +03:00
ee410315ee TRI-283: edit btns 2024-11-22 12:20:27 +03:00
f3c78f0575 TRI-283: end editors pages 2024-11-22 08:59:49 +03:00
b98a4a5364 TRI-283: edits btns reg landing_page 2024-11-22 07:24:46 +03:00
68aad97e46 TRI-283: save for show p_customer_landing_page 2024-11-22 06:38:22 +03:00
8de6676b40 TRI-283: end p_mover_landing_page 2024-11-21 19:49:38 +03:00
7a345a6c80 TRI-283: edit chatterbox 2024-11-21 14:24:47 +03:00
e3adbeeea4 TRI-283: start 768> 2024-11-21 13:10:25 +03:00
b0db3534f2 TRI-283: add feader fixed 2024-11-20 22:55:34 +03:00
6f646264dc TRI-283: end 1280 2024-11-20 22:00:18 +03:00
d83940b47d TRI-283: end header + start adaptive 1400> 2024-11-20 01:38:34 +03:00
4996d02f71 TRI-283: end adaptive 1920 + start header 2024-11-19 00:25:47 +03:00
SDE
da6f47f439 1.8.9 p_customer_landing_page.html media_items 2024-11-18 15:46:07 +03:00
SDE
54fbc3f4b2 1.8.8 p_mover_landing_page.html media_items 2024-11-18 15:38:28 +03:00
SDE
6e2c54eccf 1.8.7 Billing migrations 2024-11-17 16:48:38 +03:00
89166100e3 TRI-283: start adaptive 1920 2024-11-16 20:03:47 +03:00
3d28a1ee86 TRI-283: end pade move 2024-11-16 18:28:26 +03:00
034d5faa0d TRI-283: add scss posterinvideo 2024-11-16 15:02:40 +03:00
f58038ab90 TRI-283: add benefits animate about 2024-11-15 21:07:29 +03:00
SDE
ad25cc67ec 1.8.6 search_matches fix weight params 2024-11-15 18:21:17 +03:00
SDE
384d1e8aec 1.8.5 search_matches fix weight params 2024-11-15 17:12:40 +03:00
SDE
b0a1007a76 1.8.4 media for landing 2024-11-15 16:21:40 +03:00
SDE
0419ba7847 1.8.3 media for landing 2024-11-15 16:05:07 +03:00
SDE
c52dbca9a1 1.8.2 media for landing 2024-11-15 15:14:50 +03:00
SDE
43153a9fdf Merge remote-tracking branch 'origin/dev' into dev 2024-11-15 13:55:04 +03:00
SDE
c23dd1ff4c 1.8.1 landing_customer 2024-11-15 13:54:53 +03:00
67d9528614 TRI-283: добавил и настроил видео 2024-11-15 13:48:11 +03:00
1151744247 TRI-283: вёрстка лендинга 2024-11-14 21:10:53 +03:00
9dd3fbe47d youtube link repair 2024-11-14 14:39:39 +03:00
f42e155f2b add some code 2024-11-13 23:49:01 +03:00
SDE
f5a084684a 1.8.0 landing_mover 2024-11-12 20:05:07 +03:00
SDE
b22adac365 1.7.19 get_my_routes_ajax log fail 2024-11-12 17:34:49 +03:00
SDE
a329720f1c 1.7.18 w_carrier_card.html fix route.highlight_end_DT 2024-11-12 16:04:12 +03:00
SDE
e03f4a015a 1.7.18 generate routes 2024-11-12 14:06:58 +03:00
SDE
94f677ae6f 1.7.17 get_routes_Dict send techmail if user undefined 2024-11-12 12:52:46 +03:00
SDE
8afdfc87c5 1.7.16 registration send mail test 2024-11-12 12:42:10 +03:00
cc3739f701 Merge remote-tracking branch 'origin/dev' into dev 2024-11-12 12:33:27 +03:00
dbee8dabb1 1.3.2 phone is not required TRI-249, TRI-265 2024-11-12 12:33:10 +03:00
SDE
cfb7acfddb 1.7.15 fix user_profile.js 1312 2024-11-12 12:15:52 +03:00
SDE
e14072e829 1.7.15 fix registration.js 71 2024-11-12 12:01:28 +03:00
SDE
f80f8d8c7e 1.7.14 route phone is not exists 2024-11-12 10:51:40 +03:00
SDE
e9b3dc1da9 1.7.13 route phone is not exists 2024-11-12 10:50:15 +03:00
63137188e5 instagram link repair 2024-11-11 07:38:36 +03:00
Rewardio
07031d693c TRI-265 adding checks to eliminate getting null at classList.add 2024-11-08 17:01:44 +03:00
SDE
531955bdc7 Merge remote-tracking branch 'origin/dev' into dev 2024-11-06 15:52:02 +03:00
SDE
2cfa314c3c 1.7.12 fix search_matches sendmail link 2024-11-06 15:51:54 +03:00
cfe37ec57d 1.3.1 counters in footer TRI-276 2024-11-01 14:58:11 +03:00
995733d6e3 TRI-275 disable googlesindicator script in head section 2024-10-25 13:04:25 +03:00
aec622831d TRI-275 disable googlesindicator script in head section 2024-10-25 13:03:17 +03:00
e8f092a88b TRI-275 disable googlesindicator script in head section 2024-10-24 10:39:15 +03:00
a1da574c04 TRI-274 replace password recovery text 2024-10-23 13:54:33 +03:00
08e28d14c9 TRI-274 replace password recovery text 2024-10-23 13:44:47 +03:00
cffd810184 TRI-274 replace password recovery text 2024-10-23 13:31:28 +03:00
SDE
774ee85f8d 1.7.11 Admin_Route add search_fields 2024-10-22 17:11:34 +03:00
SDE
a1c6db28a8 1.7.10 Admin_Route add search_fields 2024-10-22 17:06:29 +03:00
SDE
bcd0c8900d 1.7.9 fix html b_profile call to select_tab_profile 2024-10-21 14:15:57 +03:00
SDE
f3e3b608f1 1.7.8 fix js dublicates login section 2024-10-21 13:42:32 +03:00
SDE
a839114cdf 1.7.7 fix js dublicates login section 2024-10-21 13:24:08 +03:00
SDE
a315a52791 Merge remote-tracking branch 'origin/dev' into dev 2024-10-21 12:53:00 +03:00
SDE
fc0d9f07c0 1.7.6 fix get_profile_change_page_content_html 2024-10-21 12:52:51 +03:00
26b4b77271 TRI-262 replace invocation in subscription mail template 2024-10-18 00:46:08 +03:00
SDE
09cfe8938f Merge remote-tracking branch 'origin/dev' into dev 2024-10-17 17:58:05 +03:00
SDE
8989d13928 1.7.5 admin search for Admin_SubscribeForUser 2024-10-17 17:56:47 +03:00
a39c96cc61 TRI-260 replace placeholder login 2024-10-10 14:30:19 +03:00
db8beca609 TRI-260 replace placeholder login 2024-10-10 14:28:35 +03:00
94e7881aa0 fix tiktok link 2024-10-05 11:23:33 +03:00
e4a07e2c88 TRI-258 Replace logo in email templates 2024-10-02 13:36:32 +03:00
1414003e3f TRI-258 Replace logo in email templates 2024-10-02 13:30:56 +03:00
b9f4804d74 Merge pull request 'main' (#13) from main into dev
Reviewed-on: #13
2024-10-02 13:22:01 +03:00
e2b63f6706 Merge remote-tracking branch 'origin/dev' into dev 2024-09-24 15:05:13 +03:00
393f165095 1.3.0 get_routes in my_routes TRI-251 2024-09-24 15:05:01 +03:00
547e4e8f9f TRI-258 Replace logo in email templates 2024-09-24 02:28:59 +03:00
ffeab227c9 TRI-258 Replace logo in email templates 2024-09-23 23:35:51 +03:00
4452398773 TRI-258 Replace logo in email templates 2024-09-23 23:34:03 +03:00
454f4711f3 TRI-258 Replace logo in email templates 2024-09-23 23:31:52 +03:00
46c456af2c TRI-258 Replace logo in email templates 2024-09-23 23:29:26 +03:00
2f459e982a TRI-258 Replace logo in email templates 2024-09-23 23:25:40 +03:00
b8d934fa28 TRI-258 Replace logo in email templates 2024-09-23 23:22:14 +03:00
1107c01d5c TRI-258 Replace logo in email templates 2024-09-23 23:18:21 +03:00
b8ca85c20e TRI-258 Replace logo in email templates 2024-09-23 23:16:57 +03:00
a29cf29041 TRI-258 Replace logo in email templates 2024-09-23 23:13:55 +03:00
05bf1d59df TRI-258 Replace logo in email templates 2024-09-23 23:08:01 +03:00
2cf129d0b9 TRI-258 Replace logo in email templates 2024-09-23 23:03:01 +03:00
488cd72f2c 1.2.9 add favicon TRI-255 2024-09-23 23:01:07 +03:00
6fab07fd79 1.2.8 add favicon TRI-255 2024-09-23 16:32:23 +03:00
382b2d122c 1.2.7 comment popup TRI-257 2024-09-23 16:08:11 +03:00
b4beac26a7 1.2.6 password recovery TRI-108 2024-09-23 16:02:27 +03:00
SDE
86d78fdd06 1.7.4 password recovery 2024-09-20 20:41:42 +03:00
SDE
92ad985355 1.7.3 password recovery 2024-09-20 18:51:53 +03:00
SDE
eaf94f0ceb 1.7.2 password recovery 2024-09-20 18:43:37 +03:00
SDE
acee0ccec5 1.7.1 password recovery 2024-09-20 18:32:18 +03:00
fddea097d3 1.2.6 password recovery TRI-108 2024-09-20 18:16:00 +03:00
SDE
7dc25532a3 1.7.0 password recovery 2024-09-20 16:43:33 +03:00
SDE
19721cf5da Merge remote-tracking branch 'origin/dev' into dev 2024-09-10 13:51:14 +03:00
SDE
a6d9d1595a 1.6.19 generate routes w change date 2024-09-10 13:51:04 +03:00
5e0d5f4b91 TRI-254 Replace placeholder text for registration form 2024-09-09 23:49:40 +03:00
09a6de1544 TRI-254 Replace placeholder text for registration form 2024-09-09 23:42:13 +03:00
a20b502b70 TRI-254 Replace placeholder text for registration form 2024-09-09 23:40:15 +03:00
8bb8013f67 TRI-254 Replace placeholder text for registration form 2024-09-09 23:37:37 +03:00
94c7c54cc1 TRI-254 Replace placeholder text for registration form 2024-09-09 23:36:19 +03:00
c257d22618 TRI-254 Replace placeholder text for registration form 2024-09-09 23:34:14 +03:00
b57dbb75e8 TRI-254 Replace placeholder text for registration form 2024-09-09 23:30:22 +03:00
9781f33440 TRI-254 Replace placeholder text for registration form 2024-09-09 23:29:33 +03:00
45b4236748 TRI-254 Replace placeholder text for registration form 2024-09-09 23:23:33 +03:00
8b0c82c3ca TRI-254 Replace placeholder text for registration form 2024-09-09 23:21:46 +03:00
5518a99ee9 TRI-254 Replace placeholder text for registration form 2024-09-09 23:20:39 +03:00
63124a350e Replace Main text on main page 2024-09-09 23:16:25 +03:00
SDE
c7de08ca49 Merge remote-tracking branch 'origin/dev' into dev 2024-09-09 16:45:29 +03:00
SDE
41e4b23317 1.6.18 fix reset highlight after change route 2024-09-09 16:45:20 +03:00
b23f379db0 1.2.5 new init for calendar in create_route TRI-247 2024-09-05 11:26:50 +03:00
SDE
1faf9e0cc7 Merge remote-tracking branch 'origin/dev' into dev 2024-09-02 15:14:17 +03:00
SDE
90e1a87bf4 1.6.17 registration not required phone 2024-09-02 15:14:06 +03:00
9ec8d4189f Replace Main text on main page 2024-08-29 23:53:13 +03:00
8f08e360ef Replace Main text on main page 2024-08-29 23:52:18 +03:00
SDE
4371cd1a85 1.6.16 generate routes road 2024-08-26 17:55:49 +03:00
SDE
f6ba0ab1ad 1.6.15 split send mail to user and copy for dev 2024-08-23 15:19:33 +03:00
SDE
c60b9942f6 Merge remote-tracking branch 'origin/dev' into dev 2024-08-22 13:41:47 +03:00
SDE
85f6e69d63 1.6.14 generate routes 2024-08-22 13:41:34 +03:00
83aeab9341 1.2.4 upd meta_OpenGraph_Schema.html TRI-200 2024-08-20 13:27:29 +03:00
8a539a2868 1.2.2 limitation of color selection for 24 hours TRI-228 2024-08-20 12:18:52 +03:00
379db1cb39 Merge pull request '1.2.2 upd mover search card TRI-246' (#12) from dev into main
Reviewed-on: #12
2024-08-19 18:03:25 +03:00
e51b23cb91 1.2.2 upd mover search card TRI-246 2024-08-19 16:27:31 +03:00
e824a258ea Merge pull request 'dev' (#11) from dev into main
Reviewed-on: #11
2024-08-18 17:48:09 +03:00
SDE
526f035659 1.6.13 fix next package for my_routes 2024-08-13 15:03:20 +03:00
SDE
42c2843cab 1.6.12 fix next package for my_routes 2024-08-13 14:41:11 +03:00
SDE
a99ffcc9d2 1.6.11 fix next package for my_routes 2024-08-13 12:58:41 +03:00
40a2412b9b 1.2.2 add url check for my_route dynamic_loading_routes.js 2024-08-13 12:49:08 +03:00
cd2985a170 Merge pull request 'Add text if email in spam and translate it' (#10) from dev into main
Reviewed-on: #10
2024-08-09 23:50:40 +03:00
cb84352475 Add text if email in spam and translate it 2024-08-09 23:49:10 +03:00
a19b4fe212 Merge pull request 'dev' (#9) from dev into main
Reviewed-on: #9
2024-08-09 22:44:34 +03:00
SDE
f718df47c8 Merge remote-tracking branch 'origin/dev' into dev 2024-08-09 21:53:33 +03:00
SDE
7620f97042 1.6.10 adds for search timezone for cities 2024-08-09 21:53:25 +03:00
3bfb7d040d Merge pull request 'replace tb_base.html' (#8) from dev into main
Reviewed-on: #8
2024-08-09 21:08:58 +03:00
aea50ed806 replace tb_base.html 2024-08-09 21:08:02 +03:00
7dab17905b Merge pull request 'dev' (#7) from dev into main
Reviewed-on: #7
2024-08-09 18:55:31 +03:00
a3a3565189 add rightpaneluser from dev 2024-08-09 18:53:53 +03:00
3f82f42e1e add chatsocketfunctions from dev 2024-08-09 18:52:23 +03:00
0de00c5a34 add chatsocketfunctions from dev 2024-08-09 18:51:14 +03:00
0daee07086 add models.py from dev 2024-08-09 18:49:10 +03:00
2619539415 add django.po from dev 2024-08-09 18:46:00 +03:00
aa8bed6efb add tb_base from main 2024-08-09 18:42:48 +03:00
9b01d79955 1.0.25 password text in registration mail 2024-08-09 18:30:03 +03:00
17f21a25bb 1.0.26 translate 2024-08-09 18:29:41 +03:00
8c523e8c65 1.6.3 parsing timezones 2024-08-09 18:25:07 +03:00
d7956e24a6 1.6.2 parsing timezones 2024-08-09 18:23:52 +03:00
eaafbec1ea 1.6.1 parsing timezones 2024-08-09 18:23:29 +03:00
4ba5f6492f 1.6.0 parsing timezones 2024-08-09 18:21:12 +03:00
SDE
4355586afc Merge remote-tracking branch 'origin/dev' into dev 2024-08-09 14:33:52 +03:00
SDE
ed4dce4bf2 1.6.9 admin routes search by cities 2024-08-09 14:33:41 +03:00
a8c4d22b51 1.2.1 add Telegram icon 2024-08-08 08:52:08 +03:00
92f08b5174 1.1.60 add Meta Pixel Code 2024-08-06 21:22:24 +03:00
a7128908f4 1.1.59 upd the calendar initialization after receiving an error when submitting the form 2024-08-02 17:35:17 +03:00
d86a531495 1.1.58 add TikTok Pixel Code to registration.js 2024-08-02 15:55:28 +03:00
f894cec38b 1.1.57 add TikTok Pixel Code 2024-08-01 17:26:14 +03:00
0ef2f9aeb1 1.1.56 upd meta OG 2024-08-01 17:17:58 +03:00
312a706d00 1.1.55 fix function selectItemAddrPoint on main page 2024-08-01 17:06:05 +03:00
d1ad6cfa24 1.1.54 add readonly for departure/arrival input 2024-08-01 11:12:26 +03:00
2bc9aa7a1c 1.1.53 added a local time reference when editing route 2024-08-01 11:04:23 +03:00
3a497d09df 1.1.51 upd initialization for init_departure_DT() init_arrival_DT() 2024-08-01 10:44:18 +03:00
1301af9d84 1.1.51 upd the local time check of the selected city 2024-08-01 10:22:44 +03:00
SDE
822a029104 Merge remote-tracking branch 'origin/dev' into dev 2024-07-31 23:13:41 +03:00
SDE
257ae371f9 1.6.8 user admin add fields to list 2024-07-31 23:13:34 +03:00
ec1d52f694 1.1.50 add pagination for b_my_routes.html && upd conditional rendering for carrier card based on departure date 2024-07-31 16:13:28 +03:00
SDE
46c7b6327d Merge remote-tracking branch 'origin/dev' into dev 2024-07-31 12:02:22 +03:00
SDE
72d8ae6616 1.6.7 get_address_point_ajax add cur time for city 2024-07-31 12:02:13 +03:00
b905fab6c5 1.1.50 add pagination for b_my_routes.html && upd conditional rendering for carrier card based on departure date 2024-07-29 19:32:13 +03:00
3b10299249 1.1.49 add new gtag to MAIN branch 2024-07-29 14:43:19 +03:00
2098032d81 1.1.48 add new gtag to MAIN branch 2024-07-29 13:20:44 +03:00
d37b694d5a 1.1.47 add new gtag 2024-07-29 12:41:07 +03:00
345969fd61 1.1.46 upd poup url 2024-07-25 17:41:02 +03:00
632ff3c812 1.1.44 setTimeout for popup display 2024-07-25 17:19:45 +03:00
bb60f9d914 1.1.43 add popup display functionality with cookie-based visibility control 2024-07-25 16:55:35 +03:00
111a7eaff7 1.1.43 add popup display functionality with cookie-based visibility control 2024-07-25 16:55:13 +03:00
61161e6335 1.0.26 translate 2024-07-25 01:22:12 +03:00
327681d3db 1.0.26 translate 2024-07-25 01:17:57 +03:00
68c5bfe275 1.0.26 translate 2024-07-25 01:08:27 +03:00
10814e9e5f Merge remote-tracking branch 'origin/dev' into dev 2024-07-25 01:03:20 +03:00
617f90e1ac 1.0.26 translate 2024-07-25 01:03:05 +03:00
81af5990ae 1.1.42 Fix date formatting issue in template 2024-07-23 14:28:41 +03:00
92e9b1ce63 1.1.41 show/hide unanswered_msgs_count 2024-07-23 13:41:41 +03:00
87b21c5f55 1.1.40 show/hide unanswered_msgs_count 2024-07-18 12:53:04 +03:00
f61482ded6 1.1.39 show/hide unanswered_msgs_count 2024-07-18 12:05:54 +03:00
c999d994d6 1.1.38 show/hide unanswered_msgs_count 2024-07-18 11:42:29 +03:00
f609361ee9 1.1.37 show/hide unanswered_msgs_count 2024-07-17 15:24:42 +03:00
c3f116fbc3 1.1.36 show/hide unanswered_msgs_count 2024-07-17 13:58:21 +03:00
79059796c8 Merge remote-tracking branch 'origin/dev' into dev 2024-07-17 13:10:27 +03:00
61facdb5fb 1.1.35 refactor date comparison logic in Django template 2024-07-17 13:10:15 +03:00
SDE
b007c3ad23 1.6.6 parsing timezones 2024-07-16 15:53:12 +03:00
SDE
0b5e37281b 1.6.5 parsing timezones 2024-07-16 15:34:35 +03:00
SDE
6e5e82401b 1.6.4 parsing timezones 2024-07-16 15:19:40 +03:00
d419131eab 1.1.34 upd chat_counter 2024-07-16 15:10:43 +03:00
b8b3c19bfc 1.1.33 upd chat_socket 2024-07-16 09:47:58 +03:00
e95062c6eb Merge remote-tracking branch 'origin/main' 2024-07-16 09:34:37 +03:00
2f4c472a41 1.1.32 upd chat_socket 2024-07-16 09:34:13 +03:00
3f0f1d4408 1.0.25 password text in registration mail 2024-07-15 23:55:17 +03:00
f23ad1a33a 1.0.25 password text in registration mail 2024-07-15 23:40:42 +03:00
SDE
1486879a58 1.6.3 parsing timezones 2024-07-13 01:29:36 +03:00
SDE
3d6fb38937 1.6.2 parsing timezones 2024-07-12 21:07:07 +03:00
SDE
d981a83652 1.6.1 parsing timezones 2024-07-12 19:01:58 +03:00
SDE
3bfe64d57c Merge remote-tracking branch 'origin/dev' into dev 2024-07-12 18:54:24 +03:00
SDE
1ad58b05ef 1.6.0 parsing timezones 2024-07-12 18:54:14 +03:00
225a958cb4 1.0.24 robots 2024-07-10 17:58:30 +03:00
0ac8e906a2 1.0.24 robots 2024-07-10 17:56:29 +03:00
a42f3c7e71 1.0.24 robots 2024-07-10 17:38:02 +03:00
ddf8428884 Merge pull request 'dev в main' (#1) from dev into main
Reviewed-on: #1
2024-07-10 17:34:03 +03:00
807edecbf4 1.0.23 add tenge currency 2024-07-10 16:34:37 +03:00
6254b1dcda 1.0.23 add tenge currency 2024-07-10 16:21:35 +03:00
SDE
9df1bf2743 1.5.2 change currency pay 2024-07-10 16:20:48 +03:00
a678fb467d 1.0.22 robots.txt modify 2024-07-09 21:25:20 +03:00
SDE
c24b7107a7 Merge remote-tracking branch 'origin/main' 2024-07-09 16:59:23 +03:00
SDE
c0596871da 1.5.1 rosetta translate 2024-07-09 16:59:13 +03:00
f0ad2d654d 0.0.22 translate 2024-07-09 16:54:35 +03:00
SDE
c2ef76b69b 1.5.0 rosetta translate 2024-07-09 16:51:05 +03:00
SDE
96f58732ba 1.4.8 bank res log w full info 2024-07-09 16:19:55 +03:00
SDE
15340d254c 1.4.7 bank res log w full info 2024-07-09 16:17:00 +03:00
SDE
890986c5de 1.4.6 bank res log w full info 2024-07-09 16:12:33 +03:00
SDE
3d137aefad 1.4.5 move pay_system sets to settings 2024-07-09 16:09:01 +03:00
SDE
6c911dde43 1.4.4 move pay_system sets to settings 2024-07-09 16:07:16 +03:00
SDE
37981602dd 1.4.3 move pay_system sets to settings 2024-07-09 16:03:16 +03:00
SDE
d64d858f15 Merge remote-tracking branch 'origin/main' 2024-07-09 13:40:42 +03:00
SDE
f9906ea8fc 1.4.2 move pay_system url to settings 2024-07-09 13:40:32 +03:00
c660831146 1.1.31 upd chats markers 2024-07-04 14:42:27 +03:00
a8ba3f9a3a 1.1.30 upd chats markers 2024-07-04 13:49:42 +03:00
8439fc8736 1.1.29 upd tik tok url 2024-07-04 09:44:25 +03:00
04f7fbdbb2 1.1.29 upd msg counter 2024-07-03 21:54:40 +03:00
e2b205240e 1.1.28 upd msg counter and news 2024-07-03 18:24:35 +03:00
2695738ae3 1.1.27 hide .advertisement_block_news 2024-07-03 17:22:17 +03:00
5a3336a657 Merge remote-tracking branch 'origin/main' 2024-07-03 17:18:56 +03:00
b67b290279 1.1.26 upd msg counter and styles for news 2024-07-03 17:18:40 +03:00
f34664cbb3 0.0.19 add articles indexing 2024-07-02 20:48:03 +03:00
4919560500 0.0.19 add articles indexing 2024-07-02 19:07:47 +03:00
c2b6890311 1.1.24 upd msg counter 2024-07-02 15:30:34 +03:00
38c4f3426d 1.1.23 add h1 for all pages 2024-07-01 17:53:54 +03:00
2400c334a9 1.1.23 upd title and description 2024-07-01 16:52:08 +03:00
SDE
114675703b 1.4.1 sitemap 2024-06-29 16:46:37 +03:00
SDE
0be38ac466 1.4.0 sitemap 2024-06-29 16:34:36 +03:00
SDE
0e184f0b87 1.3.6 add unanswered_msgs_count to all responses 2024-06-29 14:44:19 +03:00
SDE
75258f1706 1.3.5 send_mail_for_user_subscribes_that_is_going_to_finish 2024-06-28 18:24:23 +03:00
SDE
ce591345d3 1.3.4 send_mail_for_user_subscribes_that_is_going_to_finish 2024-06-28 18:12:01 +03:00
SDE
0770009443 1.3.3 send_mail_for_user_subscribes_that_is_going_to_finish 2024-06-28 18:10:35 +03:00
SDE
bf39639acc 1.3.2 send_mail_for_user_subscribes_that_is_going_to_finish 2024-06-28 18:02:57 +03:00
SDE
947f46c5ff 1.3.1 receive_finish_subscribe_msg 2024-06-28 15:27:29 +03:00
651423ce90 1.1.22 fix function for checking the status of the switch finish_subscribe_msg 2024-06-28 15:24:58 +03:00
afb0ea0bed 1.1.21 add function for checking the status of the switch finish_subscribe_msg 2024-06-28 15:17:39 +03:00
SDE
e2b7b0d356 Merge remote-tracking branch 'origin/main' 2024-06-27 19:15:02 +03:00
SDE
c55d5c6676 1.3.0 receive_finish_subscribe_msg, find errors by tickets 2024-06-27 19:14:52 +03:00
eb60bcec56 1.1.20 upd css for .menu_profile right 2024-06-26 13:02:52 +03:00
62325eb9fa 1.1.19 upd css for block-chat 2024-06-26 12:32:53 +03:00
18aae945ae 1.1.18 fix height for container_inf_about_moving 2024-06-25 18:33:54 +03:00
4afe61546a 1.1.17 add YandexMetrika tag for create_routes, registration button in header/footer v2 2024-06-25 13:10:32 +03:00
b6a0fcdf07 1.1.17 add YandexMetrika tag for create_routes, registration button in header/footer v2 2024-06-21 15:41:19 +03:00
2fc153843f 1.1.16 add YandexMetrika tag for create_routes, registration button in header/footer 2024-06-21 14:54:30 +03:00
729f03ca47 1.1.15 add YandexMetrika tag for feedback form v4 2024-06-21 13:48:37 +03:00
96c0111428 1.1.14 add YandexMetrika tag for feedback form v3 2024-06-21 13:17:35 +03:00
d0ccbb494f 1.1.13 add YandexMetrika tag for feedback form v2 2024-06-20 17:10:20 +03:00
f8aa0162a5 1.1.12 add YandexMetrika tag for feedback form 2024-06-20 16:56:21 +03:00
2b94d3f851 1.1.12 add YandexMetrika tag for registration page 2024-06-20 16:00:23 +03:00
fddda1ef0a 1.1.11 fix height for cards in search 2024-06-20 14:28:42 +03:00
035634df67 0.0.18 add footer social networks 2024-06-18 11:57:13 +03:00
8267d99b4a 0.0.18 add footer social networks 2024-06-18 11:56:14 +03:00
854faf56f5 0.0.18 add footer social networks 2024-06-18 11:52:15 +03:00
4bbb3428c0 0.0.18 add footer social networks 2024-06-18 11:46:31 +03:00
7a40ca0986 0.0.18 add footer social networks 2024-06-18 11:44:49 +03:00
c93a15025b 0.0.18 add footer social networks 2024-06-18 11:43:38 +03:00
57a1c82db2 0.0.18 add social network icons 2024-06-18 11:39:40 +03:00
b6af2c7997 0.0.18 add social network icons 2024-06-18 11:37:35 +03:00
df7b3e1a8b 0.0.17 social network link added 2024-06-15 18:07:41 +03:00
b7a6163251 0.0.17 social network link added 2024-06-15 18:06:15 +03:00
9c39f9e07c 0.0.17 social network link added 2024-06-15 17:57:04 +03:00
d33eff4935 0.0.17 social network link added 2024-06-15 17:55:34 +03:00
11ea66f576 0.0.17 social network link added 2024-06-15 17:53:45 +03:00
d31f019afb 0.0.17 social network instagram link added 2024-06-15 17:42:55 +03:00
52361a6a16 0.0.17 social network instagram link added 2024-06-15 17:37:58 +03:00
e04ec83877 0.0.17 social network instagram link added 2024-06-15 17:35:46 +03:00
SDE
301f301868 1.2.7 reset rising_DT in past routes 2024-06-15 17:18:07 +03:00
SDE
b2cb5463ef Merge remote-tracking branch 'origin/main' 2024-06-15 17:15:05 +03:00
SDE
d2754db97a 1.2.6 reset rirsing_DT in past routes 2024-06-15 17:14:57 +03:00
568906b2df 0.0.16 twb-tripwb replace 2024-06-14 09:32:27 +03:00
fbae553657 1.1.10 fix webpush button footer 2024-06-12 23:33:24 +03:00
03ecd45316 1.1.9 fix webpush button footer 2024-06-12 22:45:36 +03:00
b8aba1d951 1.1.9 fix width for container-carrier 2024-06-12 15:38:28 +03:00
SDE
4d76569131 Merge remote-tracking branch 'origin/main' 2024-06-11 16:48:50 +03:00
SDE
f90d87a301 1.2.5 fix get_routes_Dict rising 2024-06-11 16:48:39 +03:00
fe6375b6f9 1.1.8 add registration message 2024-06-11 14:54:15 +03:00
SDE
a30156cc1c 1.2.5 add get_permission_for_highlight 2024-06-11 01:09:40 +03:00
SDE
f8a8aa7577 Merge remote-tracking branch 'origin/main' 2024-06-11 01:03:34 +03:00
SDE
b527d18a3c 1.2.4 add get_permission_for_highlight 2024-06-11 01:03:25 +03:00
fc6a864f7c 0.0.15 robots.txt add allow/disallow options 2024-06-10 23:37:54 +03:00
8eaff8ebbc 0.0.15 robots.txt add allow/disallow options 2024-06-10 23:35:37 +03:00
SDE
3a18688143 Merge remote-tracking branch 'origin/main' 2024-06-10 18:47:07 +03:00
SDE
0e40bae701 1.2.3 get_my_routes_ajax add remains_routes_count operations 2024-06-10 18:46:50 +03:00
7aa7e32fda 1.1.8 upd raise and highlight function in my_routes 2024-06-10 17:48:10 +03:00
SDE
1aced3d20b 1.2.2 get_my_routes_ajax add remains_routes_count operations 2024-06-10 16:58:59 +03:00
SDE
9566082283 Merge remote-tracking branch 'origin/main' 2024-06-10 16:56:43 +03:00
SDE
152c92bf65 1.2.1 get_my_routes_ajax add remains_routes_count operations 2024-06-10 16:56:19 +03:00
4622424b9b Merge remote-tracking branch 'origin/main' 2024-06-10 12:40:31 +03:00
ef8337582f 1.1.6 upd raise and highlight function in my_routes 2024-06-10 12:40:20 +03:00
SDE
133fa7ea5f Merge remote-tracking branch 'origin/main' 2024-06-09 16:37:20 +03:00
SDE
74e76fe6e7 1.2.0 confirm email after registration 2024-06-09 16:37:08 +03:00
2996e84433 1.1.5 fix show_contact if user is not authenticated 2024-06-06 14:25:25 +03:00
f8d1de5d30 1.1.4 update rising and highlight my_routes 2024-06-05 17:47:01 +03:00
d33278faff 1.1.3 update meta_names.html 2024-06-05 16:55:09 +03:00
22e40409d7 1.1.3 rising and highlight my_route counter 2024-06-05 16:48:12 +03:00
632cf0b9b4 1.1.3 change meta_names.html 2024-06-05 16:47:10 +03:00
a9ed3e0bef 0.0.14 add yandex and google verification meta 2024-06-05 15:06:46 +03:00
28b505310d 0.0.14 add yandex and google verification meta 2024-06-05 15:00:58 +03:00
c9aea0b778 1.1.3 rising and highlight my_route 2024-06-05 14:26:36 +03:00
e1694cdc9c 1.1.3 update dropdown-content lang 2024-06-05 14:22:19 +03:00
SDE
3a235b4f60 1.1.13 not send to pay system if subscribe price is null 2024-06-05 12:03:00 +03:00
SDE
90405f64de 1.1.12 funcs for raise and highlight routes 2024-06-04 22:28:43 +03:00
35073f77c8 1.1.3 rising and highlight my_route 2024-06-04 20:02:54 +03:00
5cd0146c8c 1.1.2 upd description for user_profile 2024-06-04 11:09:28 +03:00
SDE
ffabffb2ef 1.1.11 funcs for raise and highlight routes 2024-06-04 00:19:10 +03:00
bb1e3e9691 Merge remote-tracking branch 'origin/main' 2024-06-03 21:35:30 +03:00
d89730ffbf 1.1.1 highlighting and raising routes 2024-06-03 21:35:15 +03:00
431ab2f9b0 0.0.14 add yandex and google verification meta 2024-06-03 15:55:12 +03:00
c444055bd7 0.0.14 add yandex and google verification meta 2024-06-03 15:38:40 +03:00
a0dd229c12 0.0.14 add yandex and google verification meta 2024-06-03 15:25:11 +03:00
074e141a22 0.0.13 fix metrika 2024-06-03 15:04:39 +03:00
SDE
40951fdfcb 1.1.10 funcs for raise and highlight routes 2024-06-03 02:57:36 +03:00
SDE
e319a8af46 1.1.9 funcs for raise and highlight routes 2024-06-03 02:46:58 +03:00
SDE
a83ff0e080 1.1.8 change settings for ws 2024-06-03 02:01:26 +03:00
SDE
22ae4b1563 1.1.7 rising and select for routes by subscribe 2024-06-03 01:47:44 +03:00
SDE
23fe1c3647 1.1.6 rising and select for routes by subscribe 2024-06-03 01:45:04 +03:00
SDE
079a7d3925 1.1.5 rising and select for routes by subscribe 2024-06-02 17:10:56 +03:00
SDE
69373925cd 1.1.4 rising and select for routes by subscribe 2024-06-02 17:07:53 +03:00
SDE
dbfc39639b 1.1.3 autoextension and autofinish subscribes 2024-05-31 15:03:15 +03:00
11bbfd0e73 Merge remote-tracking branch 'origin/main' 2024-05-31 13:08:46 +03:00
0075b474d7 1.0.11 upd subscribe_current 2024-05-31 13:08:36 +03:00
SDE
99090a8a95 Merge remote-tracking branch 'origin/main' 2024-05-31 13:07:13 +03:00
SDE
0e5ed13794 1.1.2 fix dublicates subscribe_for_user 2024-05-31 13:07:00 +03:00
ffa6ba2c47 1.0.10 add description for news create_route_for_customer, create_route_for_mover 2024-05-31 12:43:46 +03:00
4ae8f09430 1.0.9 add title for news create_route_for_customer, create_route_for_mover 2024-05-31 11:40:16 +03:00
SDE
17024d7350 1.1.1 autosubscribe to null price subscribe 2024-05-29 12:25:27 +03:00
SDE
efec0754cd 1.1.0 autosubscribe to null price subscribe 2024-05-29 07:53:32 +03:00
5a893faa43 1.0.8 fix view bugs in my_routes, my_subscribe, main 2024-05-20 13:27:51 +03:00
5981f982f3 0.0.12 replace link to login page on carrier widget 2024-05-17 12:23:55 +03:00
fd81675ee9 1.0.7 upd view for error_message for subscribe 2024-05-10 18:48:51 +03:00
SDE
3575391d3f 1.0.12 subscribe buy routines 2024-05-10 15:34:56 +03:00
SDE
563a4fde3c 1.0.11 subscribe buy routines 2024-05-10 13:55:49 +03:00
SDE
148d182e5e 1.0.10 subscribe buy routines 2024-05-10 13:52:47 +03:00
SDE
aab8cf69fb 1.0.9 subscribe buy routines 2024-05-10 13:44:30 +03:00
3900cb1382 1.0.7 upd view for error_message for subscribe 2024-05-08 18:08:56 +03:00
d77fe01795 1.0.6 view for error_message for subscribe 2024-05-08 17:04:37 +03:00
47eb056f87 Merge remote-tracking branch 'origin/main' 2024-05-08 14:24:19 +03:00
14691d0ee4 1.0.5 add error_message for subscribe 2024-05-08 14:24:06 +03:00
SDE
d6487d81c9 1.0.7 push routines 2024-05-08 11:33:24 +03:00
SDE
2f421bb0ac 1.0.6 push routines 2024-05-08 11:23:01 +03:00
SDE
4b588eb6e4 1.0.5 subscribe page w dynamically load 2024-05-08 00:44:36 +03:00
SDE
3a911d928f 1.0.4 subscribe page w dynamically load 2024-05-07 18:51:17 +03:00
69c037b30d 1.0.4 upd select_tab_profile 2024-05-07 18:18:27 +03:00
SDE
c84e884a7c 1.0.3 subscribe page w dynamically load 2024-05-07 18:07:43 +03:00
0a38314003 1.0.3 upd select_tab_profile 2024-05-07 17:59:11 +03:00
2d86f36a91 1.0.2 upd select_tab_profile 2024-05-07 17:52:16 +03:00
a0eeb7b642 1.0.1 upd select_tab_profile 2024-05-07 17:40:07 +03:00
SDE
9eb5936690 1.0.2 subscribe page w dynamically load 2024-05-07 16:23:40 +03:00
SDE
cbe5271426 1.0.1 subscribe page w dynamically load 2024-05-07 15:28:47 +03:00
SDE
34827af5be 1.0.0 subscribe page w dynamically load 2024-05-07 15:23:45 +03:00
6ed5652f16 1.0.0 upd view for my_routes 2024-05-07 15:21:40 +03:00
SDE
8ed567496b 0.12.52 subscribe page w dynamically load 2024-05-07 15:01:13 +03:00
SDE
b374e7aeca 0.12.51 subscribe page w dynamically load 2024-05-07 14:21:52 +03:00
SDE
a0ee72bc81 0.12.50 subscribe page w dynamically load 2024-05-07 13:51:20 +03:00
SDE
e8e4bf466b 0.12.49 fix push messages 2024-05-07 11:43:58 +03:00
SDE
ec01d11426 0.12.48 fix push messages 2024-05-07 11:39:36 +03:00
SBD
c088d25033 14 2024-05-05 14:57:28 +03:00
SBD
e9f3cdbc59 14 2024-05-05 14:05:09 +03:00
SBD
72f754e89c 14 2024-05-05 13:45:45 +03:00
SDE
c365f3274a Merge remote-tracking branch 'origin/main' 2024-05-05 13:37:56 +03:00
SDE
f8caafb2a9 0.12.47 fix push messages 2024-05-05 13:37:39 +03:00
2d147d5f09 0.0.11 insert yandex and google counter 2024-04-27 11:26:50 +03:00
7c4b554aea 0.0.11 insert yandex and google counter 2024-04-27 11:23:09 +03:00
0091919b93 0.0.11 insert yandex and google counter 2024-04-27 11:21:17 +03:00
d46e5cc238 0.0.10 style bold for text in tarif plans 2024-04-25 17:22:14 +03:00
97116a2070 Merge remote-tracking branch 'origin/main' 2024-04-25 11:36:46 +03:00
27aaff4a4b 0.1.379 update carrier_card info in search 2024-04-25 11:36:36 +03:00
32c2fd4e6c 0.0.10 style bold for text in tarif plans 2024-04-25 11:09:50 +03:00
51b86323d8 0.0.10 style bold for text in tarif plans 2024-04-25 11:04:53 +03:00
f0bd3ce088 0.0.10 style bold for text in tarif plans 2024-04-25 10:57:24 +03:00
SDE
474bb9f02e Merge remote-tracking branch 'origin/main' 2024-04-24 14:11:40 +03:00
SDE
a2175f9110 0.12.46 fix validation dates for route in localization 2024-04-24 14:11:25 +03:00
aec0218787 0.1.378 update carrier_card info in search 2024-04-24 12:25:35 +03:00
567ee01619 0.1.377 hide img in carrier_card info in search 2024-04-23 20:57:35 +03:00
SDE
e4a929cfd6 0.12.45 favicon 2024-04-23 13:29:21 +03:00
SDE
27b0840704 0.12.44 favicon 2024-04-23 13:17:12 +03:00
SDE
525da42ae9 0.12.43 favicon 2024-04-23 12:55:14 +03:00
SDE
8d1199bc4f 0.12.42 favicon 2024-04-23 12:49:49 +03:00
SDE
dac8f602d8 0.12.41 favicon 2024-04-23 12:42:00 +03:00
SDE
26d04dfaa0 0.12.40 favicon 2024-04-23 12:36:49 +03:00
SDE
22306371a0 0.12.39 favicon 2024-04-23 12:33:15 +03:00
SDE
881f0cdbfa 0.12.39 favicon 2024-04-23 12:30:28 +03:00
SDE
314d342f5c Merge remote-tracking branch 'origin/main' 2024-04-23 10:18:00 +03:00
SDE
d627b6a780 0.12.38 fix static pages w subscribes 2024-04-23 10:17:49 +03:00
9528572f37 0.1.376 update carrier_card info in search 2024-04-22 13:59:55 +03:00
273caa5c5d 0.1.375 update carrier_card info in search 2024-04-22 12:40:00 +03:00
c9f04057a7 0.1.374 update carrier_card info in search 2024-04-22 11:10:10 +03:00
SBD
8599030ccb 14 2024-04-20 12:30:55 +03:00
SDE
3fe5970811 0.12.37 pays and subscribes 2024-04-20 12:26:12 +03:00
SDE
723229d595 0.12.36 pays and subscribes 2024-04-20 12:24:37 +03:00
SDE
bb319780b6 0.12.36 pays and subscribes 2024-04-20 12:15:55 +03:00
5c06aceb27 0.1.373 fix carrier_card in my_routes 2024-04-19 12:44:07 +03:00
27b4dd072e 0.1.372 fix maegin for curtain and for inf_carrier 2024-04-19 12:27:22 +03:00
SDE
2c1f70018e 0.12.36 fix webpush 2024-04-16 17:07:32 +03:00
SDE
698f4578fc 0.12.35 fix webpush 2024-04-15 17:19:12 +03:00
SDE
fd70e388a7 0.12.34 fix redirect to subscribe after login 2024-04-13 11:23:44 +03:00
SDE
07b06a4177 0.12.33 fix redirect to subscribe after login 2024-04-12 18:40:06 +03:00
SBD
10e8d477e5 14 2024-04-12 17:29:35 +03:00
7daadc816c 0.1.371 hide name_carrier if user not registered 2024-04-12 16:21:11 +03:00
89db74c782 0.1.370 upd compare with current_date 2024-04-12 15:52:10 +03:00
01f6136798 0.1.369 compare with current_date 2024-04-12 15:43:09 +03:00
SDE
1bb4aa04a6 0.12.33 m_found_matched_routes change 2024-04-12 14:39:45 +03:00
6b63f8b87e 0.0.9 style search field fix 2024-04-11 09:49:56 +03:00
cd6fde962b 0.0.8 promotion block bottom_block_static commented 2024-04-09 09:49:27 +03:00
SDE
607a0f8245 0.12.32 fix switch langs 2024-04-08 18:08:05 +03:00
SBD
ad1db581a7 14 2024-04-08 17:32:14 +03:00
SBD
ca5b0039a1 14 2024-04-08 17:24:19 +03:00
214ee3bd58 0.0.7 text fix 2024-04-08 10:53:27 +03:00
b1f2cc2376 0.0.7 text fix 2024-04-08 10:48:45 +03:00
f1f523209b 0.0.7 text fix 2024-04-08 10:41:43 +03:00
9c23fd02fe 0.0.7 text fix 2024-04-08 10:39:31 +03:00
eee30b50db 0.0.7 text fix 2024-04-08 10:35:41 +03:00
6ba35ccd96 0.0.7 text fix 2024-04-08 10:22:59 +03:00
5916d5d038 0.0.7 text fix 2024-04-08 10:04:40 +03:00
3eb0b499c6 0.0.6 header menu item translate 2024-04-04 23:56:52 +03:00
SDE
c2d021a516 0.12.31 fix switch langs 2024-04-04 23:16:26 +03:00
SDE
46fdda269f 0.12.30 fix login_required 2024-04-04 22:45:20 +03:00
SDE
536a1e967e 0.12.29 fix trans 2024-04-04 15:21:36 +03:00
SDE
ac4fcb634d Merge remote-tracking branch 'origin/main' 2024-04-04 11:26:57 +03:00
SDE
d92fe4c22c 0.12.28 fix trans 2024-04-04 11:26:50 +03:00
3d49100656 0.0.5 fix footer logo 2024-04-04 09:50:51 +03:00
9841524ec0 0.0.5 fix footer logo 2024-04-04 09:44:24 +03:00
0fe8cb1bfb 0.0.5 fix unsubscribe text decoration 2024-04-03 13:17:55 +03:00
910b211840 0.1.368 centered the logo in the footer 2024-04-03 11:33:47 +03:00
4f7d6d05bd Merge remote-tracking branch 'origin/main' 2024-04-03 11:29:15 +03:00
b8feec88a7 0.1.367 add text in subscribe block 2024-04-03 11:29:04 +03:00
6043e1f5a7 0.0.4 fix text for contact page 2024-04-03 10:38:14 +03:00
SDE
4981bdcaa6 Merge remote-tracking branch 'origin/main' 2024-04-02 16:06:56 +03:00
SDE
c29cc25581 0.12.28 localization routines 2024-04-02 16:06:45 +03:00
0ce03ca73f Merge remote-tracking branch 'origin/main' 2024-04-02 14:14:45 +03:00
80a226a302 0.1.366 add text in subscribe block 2024-04-02 14:14:29 +03:00
0d41bd40e5 0.0.4 fix text for about page 2024-04-02 13:48:11 +03:00
d2fe96a599 0.0.4 center footer logo 2024-04-02 13:06:42 +03:00
d0d41a4d2b 0.0.3 replace footer logo max-width desktop 2024-04-02 10:44:46 +03:00
5e7a153d6d 0.0.3 replace footer logo max-width desktop 2024-04-02 10:40:04 +03:00
55d414c1d0 0.0.3 replace footer logo max-width desktop 2024-04-02 10:37:45 +03:00
ac6a440151 0.0.3 replace footer logo max-width desktop 2024-04-02 10:32:58 +03:00
ff48ca83e2 0.0.2 replace footer logo max-width 2024-04-02 10:27:09 +03:00
358577745f 0.0.2 replace Logo in footer 2024-04-02 10:14:45 +03:00
087a913a48 0.0.2 replace word in contact form about service 2024-04-02 09:42:13 +03:00
a9dedb7869 0.0.1 replace twb to tripwithbonus on main page 2024-04-02 09:31:58 +03:00
SDE
92e3d76b7e 0.12.27 fix auth 2024-03-27 12:59:38 +03:00
2da7195dd0 0.1.365 add img 2024-03-15 15:38:42 +03:00
18f7fedbc2 0.1.365 add img 2024-03-15 15:37:10 +03:00
aa93813ba5 0.1.364 add new logo fix old css 2024-03-15 15:35:58 +03:00
def3d770ed 0.1.363 add new logo 2024-03-08 16:07:51 +03:00
6b8bcb8ebb 0.1.363 fix misspell 2024-03-07 19:47:50 +03:00
SBD
ff5afe518a 14 2024-03-06 18:22:48 +03:00
SBD
6f42251f5f Merge remote-tracking branch 'origin/main' 2024-03-06 18:11:58 +03:00
SBD
06917078ae 14 2024-03-06 18:11:46 +03:00
4331b26542 0.1.362 fix language bug redirect to main page 2024-02-22 18:54:15 +03:00
SDE
dd8a8ddd53 0.12.26 get_phone_valid_error change 2024-02-21 17:12:45 +03:00
SBD
abb0d488eb 14 2024-02-21 15:10:34 +03:00
SBD
be97b848d0 14 2024-02-21 14:56:25 +03:00
SBD
6bc112d689 13 2024-02-21 14:37:31 +03:00
SBD
dc534a0c51 12 2024-02-21 14:21:48 +03:00
SDE
e71ed05e6c 0.12.25 timezone in chat messages 2024-02-21 14:12:03 +03:00
SBD
2048ed6baf 11 2024-02-20 19:31:10 +03:00
SBD
c146bd6155 10 2024-02-20 18:57:17 +03:00
SBD
98665abf4d 9 2024-02-20 18:27:36 +03:00
SBD
9954140d3a 9 2024-02-20 17:43:08 +03:00
SBD
fafee63a64 7 2024-02-20 17:35:01 +03:00
c623d69767 0.1.361 comment red marker on mobile_header temp 2024-02-12 17:22:24 +03:00
670eb28bc0 0.1.360 add red marker on mobile_header temp 2024-02-12 17:17:21 +03:00
144ff286f6 0.1.359 add red marker on mobile_header temp 2024-02-12 17:12:44 +03:00
05f94de0b4 Merge remote-tracking branch 'origin/main' 2024-02-12 16:09:24 +03:00
c4650ce603 0.1.358 upd profile_button width 2024-02-12 16:09:13 +03:00
SDE
3971a8ee23 0.12.24 timezone in chat messages 2024-02-09 20:33:04 +03:00
SDE
a3ba6bc783 0.12.23 timezone in chat messages 2024-02-09 18:18:21 +03:00
SDE
b87df02714 0.12.22 timezone in chat messages 2024-02-09 18:01:11 +03:00
SDE
713695cf7d 0.12.21 timezone in chat messages 2024-02-09 17:00:28 +03:00
SDE
a25f30eda7 0.12.20 timezone in chat messages 2024-02-09 16:57:27 +03:00
SDE
eddb3a1858 0.12.19 timezone in chat messages 2024-02-09 15:12:10 +03:00
SDE
5a89200f1d Merge remote-tracking branch 'origin/main' 2024-02-08 14:51:27 +03:00
SDE
2f47a9e3db 0.12.18 registration mail to user 2024-02-08 14:51:19 +03:00
155b6272ec 0.1.357 upd mobile_styles.css for menu_profile 2024-02-08 14:20:50 +03:00
SDE
1479584bfc 0.12.17 change_avatar_confirm_ajax RequestDataTooBig 2024-02-05 23:02:11 +03:00
SDE
f86be5bd97 Merge remote-tracking branch 'origin/main' 2024-02-05 22:41:58 +03:00
SDE
c87a7095ad 0.12.16 change_avatar_confirm_ajax RequestDataTooBig 2024-02-05 22:41:50 +03:00
ac4df7a5f7 0.1.356 upd text_block 2024-02-05 14:34:15 +03:00
SDE
c48839ff8c 0.12.15 subscribe mailing 2024-02-02 18:50:51 +03:00
SDE
ea296e3f05 0.12.14 subscribe mailing 2024-02-02 18:15:51 +03:00
SDE
8124ed62fe 0.12.13 subscribe mailing 2024-02-02 18:08:28 +03:00
SDE
cc643d2641 0.12.12 subscribe mailing 2024-02-02 18:06:35 +03:00
SDE
6de42c5ba9 Merge remote-tracking branch 'origin/main' 2024-02-02 17:44:50 +03:00
SDE
36b7f4dee7 0.12.11 subscribe mailing 2024-02-02 17:44:43 +03:00
2328f09023 0.1.355 mailingSubscribeRequired functional UPD 2024-02-02 17:41:01 +03:00
60faeeace9 Merge remote-tracking branch 'origin/main' 2024-02-02 17:37:35 +03:00
abe53dd88b 0.1.354 mailingSubscribeRequired functional 2024-02-02 17:37:25 +03:00
SDE
c76a18c5ff Merge remote-tracking branch 'origin/main' 2024-02-02 15:51:45 +03:00
SDE
3725ce1882 0.12.10 routes order 2024-02-02 15:51:37 +03:00
6a69ff02b1 0.1.353 add font-display for lcp test 2024-02-02 15:04:30 +03:00
6ba41af305 0.1.352 small bug_fix 2024-02-02 12:50:59 +03:00
SDE
5815a08b55 0.12.9 subscribe mailing 2024-02-01 19:13:26 +03:00
SDE
7805161829 0.12.8 subscribe mailing 2024-02-01 19:07:48 +03:00
6fa31f3866 Merge remote-tracking branch 'origin/main' 2024-02-01 18:51:01 +03:00
0763faf224 0.1.351 upd footer 2024-02-01 18:50:28 +03:00
SDE
a3d3e12467 0.12.7 subscribe mailing 2024-02-01 18:43:16 +03:00
SDE
ab22a3ec88 0.12.6 subscribe mailing 2024-02-01 18:32:29 +03:00
SDE
9d0a059909 0.12.5 subscribe mailing 2024-02-01 18:24:02 +03:00
SDE
1011f112b2 0.12.4 subscribe mailing 2024-02-01 17:49:57 +03:00
SDE
d07ab2c71f Merge remote-tracking branch 'origin/main' 2024-02-01 17:46:55 +03:00
SDE
96bfef04a8 0.12.3 subscribe mailing 2024-02-01 17:46:44 +03:00
SBD
779dd7e93d 7 2024-02-01 15:06:05 +03:00
SBD
0abcb34829 7 2024-02-01 14:58:26 +03:00
SBD
33c028207a 6 2024-02-01 14:36:08 +03:00
SBD
64b3e40ed0 6 2024-02-01 14:14:35 +03:00
SBD
0023676b28 Merge remote-tracking branch 'origin/main' 2024-02-01 13:26:53 +03:00
SBD
b90039f21a 5 2024-02-01 13:26:42 +03:00
b5f24ebf2e 0.1.350 small upd for .css 2024-01-31 17:49:03 +03:00
SBD
f99a010e4a 5 2024-01-31 17:17:53 +03:00
SBD
a4944360a6 5 2024-01-31 17:13:15 +03:00
SBD
a2b5d81c98 5 2024-01-31 17:11:12 +03:00
SBD
13b7c2572d Merge remote-tracking branch 'origin/main' 2024-01-31 16:57:06 +03:00
SBD
47b12882ba 5 2024-01-31 16:56:57 +03:00
SDE
c008aa585b Merge remote-tracking branch 'origin/main' 2024-01-31 16:39:12 +03:00
SDE
406b5e8480 0.12.2 registration mail 2024-01-31 16:39:03 +03:00
SBD
584a196784 5 2024-01-31 15:20:50 +03:00
SBD
618f7751d1 5 2024-01-31 15:20:20 +03:00
SBD
faaea1129a 5 2024-01-31 15:11:39 +03:00
SBD
dd7afc28f7 5 2024-01-31 15:00:48 +03:00
SBD
9ecf5ce073 5 2024-01-31 14:55:04 +03:00
SBD
422373f00e 5 2024-01-31 14:46:18 +03:00
SBD
60636daeb8 Merge remote-tracking branch 'origin/main' 2024-01-31 14:40:19 +03:00
SBD
9d47f4c2bc 5 2024-01-31 14:40:11 +03:00
SDE
4d6dbddd28 Merge remote-tracking branch 'origin/main' 2024-01-31 14:37:49 +03:00
SDE
3f00ff39d2 0.12.1 fix form from and to place fields choices 2024-01-31 14:37:41 +03:00
SBD
bff6a81586 Merge remote-tracking branch 'origin/main' 2024-01-31 14:12:55 +03:00
SBD
9cb8036d3c 3 2024-01-31 14:12:44 +03:00
SDE
a43de1fa91 Merge remote-tracking branch 'origin/main' 2024-01-31 13:44:18 +03:00
SDE
93717bee2d 0.12.11 del mobile markers for response 2024-01-31 13:44:08 +03:00
SBD
8db1d6fdce 3 2024-01-31 13:41:47 +03:00
SBD
b41f8c7eca 3 2024-01-31 13:37:31 +03:00
SBD
c19405d32a Merge remote-tracking branch 'origin/main' 2024-01-31 13:24:02 +03:00
SBD
7b75c533a8 3 2024-01-31 13:23:50 +03:00
SDE
649dbab901 0.12.10 fix allauth google cancel 2024-01-26 19:02:17 +03:00
SDE
1a4498d19f 0.12.9 fix allauth google cancel 2024-01-26 19:00:47 +03:00
SDE
2786ef454d Merge remote-tracking branch 'origin/main' 2024-01-26 18:26:52 +03:00
SDE
961c0dd2a5 0.12.8 switch off push for static pages 2024-01-26 18:26:37 +03:00
SBD
0a0835d3a6 3 2024-01-26 18:20:25 +03:00
SBD
bc87d10d59 Merge remote-tracking branch 'origin/main' 2024-01-26 18:14:50 +03:00
SBD
792693848b 2 2024-01-26 18:14:41 +03:00
SDE
de229c5f78 0.12.7 chat fixes 2024-01-26 17:45:48 +03:00
SDE
03f9a836e6 0.12.6 chat fixes 2024-01-26 17:09:42 +03:00
SBD
91751574cc 1 2024-01-26 16:31:58 +03:00
d5453dada6 0.1.349 small upd 2024-01-26 14:37:50 +03:00
22adb18a39 Merge remote-tracking branch 'origin/main' 2024-01-26 13:59:36 +03:00
0a3c40dd5d 0.1.348 upd input_list for main page 2024-01-26 13:58:51 +03:00
SBD
b29825d62b correct titles 2024-01-26 13:29:05 +03:00
c9bda8aab2 Merge remote-tracking branch 'origin/main' 2024-01-26 13:06:30 +03:00
284a4b064a 0.1.347 update show_contact button behavior 2024-01-26 13:06:17 +03:00
SBD
6f20f53d75 ws changes 2024-01-26 12:47:46 +03:00
SDE
473a047af9 Merge remote-tracking branch 'origin/main' 2024-01-25 18:36:29 +03:00
SDE
481f9a881f 0.12.5 google auth fix 2024-01-25 18:36:15 +03:00
6ceedddbc1 0.1.346 add border for input_list. Change color and width for scroll-bar v2 2024-01-25 17:05:01 +03:00
bd9e0fad48 0.1.345 add border for input_list. Change color and width for scroll-bar 2024-01-25 16:50:36 +03:00
6b118d00b6 0.1.344 hide div with phone number 2024-01-25 15:39:15 +03:00
01e221196f 0.1.343 small bug fix with buttons style v.2 2024-01-25 14:57:26 +03:00
ccf016999b 0.1.342 small bug fix with buttons style 2024-01-25 14:51:49 +03:00
SBD
cb79e47796 Merge remote-tracking branch 'origin/main' 2024-01-23 18:05:57 +03:00
SBD
4076bd6065 ws changes 2024-01-23 18:05:45 +03:00
e54c258007 Merge remote-tracking branch 'origin/main' 2024-01-23 17:15:15 +03:00
c3b7401255 0.1.341 upd text for main page, customer/mover page. Add new png for main page 2024-01-23 17:15:04 +03:00
SDE
9af72d30f4 0.12.4 ws fix 2024-01-22 18:10:32 +03:00
SDE
dbe948ae5f Merge remote-tracking branch 'origin/main' 2024-01-22 18:09:04 +03:00
SDE
885d36a90c 0.12.3 ws fix 2024-01-22 18:08:55 +03:00
SBD
7acfbc0113 Merge remote-tracking branch 'origin/main' 2024-01-22 17:41:33 +03:00
SBD
43c5faf988 took wss 2024-01-22 17:41:17 +03:00
SDE
437142fba0 Merge remote-tracking branch 'origin/main' 2024-01-22 17:32:10 +03:00
SDE
acf7b702ee 0.12.2 ws fix 2024-01-22 17:32:03 +03:00
74ca1be884 Merge remote-tracking branch 'origin/main' 2024-01-19 13:18:30 +03:00
26b987d6ce 0.1.340 upd text and add href for customer button 2024-01-19 13:18:09 +03:00
SDE
3f7f1d88ed 0.12.1 addsense register 2024-01-18 20:13:52 +03:00
SDE
59225b1688 Merge remote-tracking branch 'origin/main' 2024-01-18 20:11:54 +03:00
SDE
108aee2c43 0.12.0 addsense register 2024-01-18 20:11:45 +03:00
9062ce32a1 Merge remote-tracking branch 'origin/main' 2024-01-18 14:09:46 +03:00
7c74a0f3fe 0.1.339 slice name/surname if it longer then 5 character 2024-01-18 14:08:48 +03:00
SDE
4fb3a12f47 0.11.22 push w link 2024-01-18 13:15:28 +03:00
SDE
59bc25f31c 0.11.21 push w link 2024-01-16 17:25:40 +03:00
SDE
87fbe7852c 0.11.20 push w link 2024-01-16 16:53:01 +03:00
SDE
793d283d97 0.11.19 Google Auth 2024-01-15 19:31:30 +03:00
SDE
651ae18345 0.11.18 Google Auth 2024-01-15 17:44:59 +03:00
SDE
67eb32968e 0.11.17 Google Auth 2024-01-15 17:43:18 +03:00
SDE
c6d41513c0 0.11.16 Google Auth 2024-01-15 17:27:48 +03:00
SDE
67ba698b60 0.11.15 Google Auth 2024-01-15 17:06:53 +03:00
SDE
15d1c00ac6 0.11.14 Google Auth 2024-01-15 16:56:18 +03:00
SDE
9e9a82ffc0 0.11.13 Google Auth 2024-01-15 16:51:38 +03:00
SDE
a0eb5210ab 0.11.12 Google Auth 2024-01-15 16:47:53 +03:00
SDE
3dacc0316e Merge remote-tracking branch 'origin/main' 2024-01-15 16:36:59 +03:00
SDE
e2c347c912 0.11.11 Google Auth 2024-01-15 16:36:51 +03:00
758f8b1f55 0.1.338 upd style for cards_item 2024-01-15 13:43:38 +03:00
SDE
b446a8f519 0.11.10 Google Auth 2024-01-13 21:24:58 +03:00
SDE
c8ba0dd770 0.11.9 Google Auth 2024-01-13 21:15:05 +03:00
SDE
f13a1329ca 0.11.8 Google Auth 2024-01-13 21:13:06 +03:00
SDE
4b3604098f 0.11.7 Google Auth 2024-01-13 21:12:04 +03:00
SDE
defbf6746f 0.11.6 Google Auth 2024-01-13 18:04:01 +03:00
SDE
bf3f26ec4f 0.11.5 Google Auth 2024-01-13 18:01:34 +03:00
SDE
76018333b0 0.11.4 Google Auth 2024-01-13 17:29:21 +03:00
SDE
e6e345b9fe 0.11.3 Google Auth 2024-01-13 17:27:32 +03:00
SDE
eafccabb66 0.11.2 Google Auth 2024-01-13 17:26:25 +03:00
SDE
f2e0628de1 0.11.1 Google Auth 2024-01-13 17:05:57 +03:00
SDE
2e1f3a10ab 0.11.0 Google Auth 2024-01-13 14:49:32 +03:00
bf18c96dbd 0.1.337 add google authorization button 2024-01-13 14:12:25 +03:00
23718a5f3f 0.1.336 upd cards_item for main page 2024-01-13 13:46:58 +03:00
c6a1d5bdcf Merge remote-tracking branch 'origin/main' 2024-01-12 17:42:00 +03:00
f75e94f706 0.1.335 upd cards_wrapper on main page 2024-01-12 17:41:48 +03:00
SBD
11c9bb6c23 took wss 2024-01-12 17:01:50 +03:00
SBD
b1ff9c47da Merge remote-tracking branch 'origin/main' 2024-01-12 16:49:47 +03:00
SBD
35c09dc70b check post csrf8 2024-01-12 16:49:38 +03:00
SDE
f0efae5987 0.10.7 fix 403 2024-01-12 16:44:51 +03:00
SDE
65120cd2d4 0.10.6 fix 403 2024-01-12 16:41:43 +03:00
SBD
231d062814 check post csrf7 2024-01-12 16:32:00 +03:00
SBD
615922a881 check post csrf6 2024-01-12 16:28:49 +03:00
SBD
61b2b824d5 check post csrf5 2024-01-12 16:21:11 +03:00
SBD
317445998a check post csrf4 2024-01-12 16:16:27 +03:00
SBD
4ad3813499 check post csrf3 2024-01-12 16:11:35 +03:00
SBD
9a88243323 Merge remote-tracking branch 'origin/main' 2024-01-12 15:58:42 +03:00
SBD
df0f32c71a check post csrf2 2024-01-12 15:58:34 +03:00
SDE
4ddd402442 0.10.5 fix 403 2024-01-12 15:55:09 +03:00
SBD
a05c4b3898 Merge remote-tracking branch 'origin/main' 2024-01-12 15:50:54 +03:00
SBD
a3ab0973c9 check post csrf1 2024-01-12 15:50:43 +03:00
SDE
0f801aa44b 0.10.4 monkey patching fix 403 2024-01-12 02:28:51 +03:00
SBD
7bc386bc44 Merge remote-tracking branch 'origin/main' 2024-01-11 19:37:48 +03:00
SBD
e148c60d70 add cookie 3 2024-01-11 19:37:39 +03:00
SDE
4667352ec4 0.10.3 fix websocet with ssl 2024-01-11 19:34:34 +03:00
SBD
e7cf694d88 add cookie 2 2024-01-11 19:31:14 +03:00
SBD
b2abb3046b add cookie 2024-01-11 19:10:30 +03:00
SDE
6c1011e59e 0.10.2 mail alert by new routes 2024-01-11 19:03:25 +03:00
ad909b98bf 0.1.334 save checked after reload in receive_msg_by_email 2024-01-11 15:27:14 +03:00
9d2e35246a 0.1.333 upd 404_page and create conditions for unfound routes 2024-01-11 15:14:45 +03:00
48dc573c0f 0.1.334 upd text for unfinded routes 2024-01-11 13:45:20 +03:00
SBD
e559660912 Merge remote-tracking branch 'origin/main' 2024-01-09 22:01:13 +03:00
SBD
aa3bec304a correct work curtain 2024-01-09 22:01:00 +03:00
c7bc22813f 0.1.333 upd 404_page and create conditions for unfound routes 2024-01-09 13:03:30 +03:00
SDE
46e73db10a 0.10.1 browser push messages 2024-01-08 15:08:46 +03:00
SDE
ad451c2ae0 0.10.0 browser push messages 2024-01-08 14:54:59 +03:00
SDE
0b5b557a35 0.9.0 404 prepare 2024-01-08 13:22:11 +03:00
SBD
fb9228c432 correct work curtain 2024-01-06 14:48:31 +03:00
SBD
fbcbe93042 correct work curtain 2024-01-06 14:37:34 +03:00
ca44deb077 0.0.332 upd text on main_page 2024-01-04 14:50:25 +03:00
61403bfac2 0.0.331 set white background-color for input_list 2024-01-03 13:20:25 +03:00
SBD
190efa4b74 mobile === false 2023-12-29 21:30:03 +05:00
SBD
ca06836b11 mobile === false 2023-12-29 21:06:08 +05:00
SBD
b31241872f mobile === false 2023-12-29 19:45:43 +05:00
SBD
f80e2844bf mobile === false 2023-12-29 12:49:13 +05:00
1dae86f0e7 0.0.330 add color for title in my_routes 2023-12-21 16:28:42 +03:00
0c146caeef 0.0.329 upd logic for from_to_country inputs in b_new_route 2023-12-20 14:18:31 +03:00
410733211b 0.0.328 fix bug in lalble b_new_route.html | upd style title for routes on main page | commented out the code in b_chats.html for i icon 2023-12-20 14:03:59 +03:00
14df8969c2 0.0.327 upd title on main page 2023-12-18 16:08:09 +03:00
SBD
4388414ac2 correct work icons right or left of the curtain 2023-12-17 08:42:50 +03:00
SBD
791ac8d436 correct work curtain at routes_find_routes 2023-12-17 08:39:47 +03:00
a3d6f498b1 0.0.326 upd change_profile 2023-12-15 16:56:14 +03:00
SDE
b8fdd61948 0.8.43 change profile validation 2023-12-15 16:12:34 +03:00
SDE
4437372d7c 0.8.42 change profile validation 2023-12-15 16:03:27 +03:00
SDE
f8d29d80b7 0.8.41 change profile validation 2023-12-15 15:56:51 +03:00
SDE
36fd9599af 0.8.40 change profile validation 2023-12-15 15:46:46 +03:00
65eccde487 0.0.326 upd change_profile 2023-12-15 15:44:23 +03:00
SDE
037b4cc562 0.8.39 change profile validation 2023-12-15 15:28:29 +03:00
SDE
9c971a6fa4 0.8.38 change profile validation 2023-12-15 15:11:35 +03:00
SBD
a3faa17754 Merge remote-tracking branch 'origin/main' 2023-12-13 17:59:25 +03:00
SBD
085f905125 correct work curtain at routes_find_routes 2023-12-13 17:57:00 +03:00
dc16ced786 0.0.325 hide scroll for mozilla 2023-12-12 17:06:05 +03:00
d5cba26098 0.0.324 2023-12-12 16:50:52 +03:00
001dd2cb87 0.0.323 2023-12-12 16:34:00 +03:00
16e860a29f 0.0.322 upd lable for b_new_route.html 2023-12-12 16:01:01 +03:00
SDE
6a5331d8eb 0.8.37 owner_type initial 2023-12-07 18:35:06 +03:00
aff0b0fe98 0.0.321 2023-12-07 16:54:57 +03:00
fd3612c370 0.0.320 2023-12-06 18:03:48 +03:00
d14a46d3d7 0.0.319 upd create_route, header_buttons alight 2023-12-06 15:51:55 +03:00
SBD
d7ace77de8 0.8.482 2023-12-05 22:17:49 +03:00
SBD
885e4722af 0.8.481 2023-12-05 21:11:36 +03:00
SBD
72ed6369d8 0.8.479 2023-12-05 20:24:07 +03:00
b23e440efd 0.0.318 work with datarangepicker.js 2023-12-05 20:16:44 +03:00
75ddb002fd Merge remote-tracking branch 'origin/main' 2023-12-05 18:52:58 +03:00
28a36335ce 0.0.317 locale for datarangepicker.js 2023-12-05 18:52:52 +03:00
SDE
fba225aa70 Merge remote-tracking branch 'origin/main' 2023-12-05 17:43:09 +03:00
SDE
af800ac84c 0.8.36 check dates when route create 2023-12-05 17:43:01 +03:00
87e90d7152 0.0.316 add new language flags 2023-12-05 16:58:32 +03:00
c25942a6ca 0.0.315 test with viewport 2023-12-05 15:24:46 +03:00
692419816f 0.0.314 test with viewport 2023-12-05 15:21:21 +03:00
3a109340fd 0.0.313 test with viewport 2023-12-05 14:59:44 +03:00
5925ecb975 0.0.312 test with viewport 2023-12-05 14:54:21 +03:00
325acd3580 0.0.311 add red color for changed input in from_to_addres_point 2023-12-05 14:38:25 +03:00
3ac85784a9 0.0.310 2023-12-05 13:48:41 +03:00
5c4e715970 Merge remote-tracking branch 'origin/main' 2023-12-05 13:39:38 +03:00
89b57feb4e 0.0.309 upd avatar for routes 2023-12-05 13:37:17 +03:00
SDE
fc194d3f85 0.8.35 order for city / country 2023-12-05 13:25:31 +03:00
SDE
12af0ea238 Merge remote-tracking branch 'origin/main' 2023-12-05 12:47:30 +03:00
SDE
6e758cf62e 0.8.34 fix route_search 2023-12-05 12:47:23 +03:00
f7783c070b Merge remote-tracking branch 'origin/main' 2023-12-05 12:45:26 +03:00
SBD
fb3cd30db4 0.8.478 2023-12-04 17:23:27 +03:00
ff949a8205 0.0.308 2023-12-03 21:02:13 +03:00
SBD
624653f581 Merge remote-tracking branch 'origin/main' 2023-12-03 20:57:56 +03:00
SBD
f3e5f02f07 0.8.477 2023-12-03 20:57:38 +03:00
d0792e9e84 Merge remote-tracking branch 'origin/main' 2023-12-03 20:56:38 +03:00
f752eb5d4a 0.0.307 clear errors for DT in create route. Change default select for main 2023-12-03 20:56:29 +03:00
SBD
f0861fde84 Merge remote-tracking branch 'origin/main' 2023-12-03 20:53:59 +03:00
SBD
4e7aa09c21 0.8.476 2023-12-03 20:53:48 +03:00
SDE
e68a0dc151 Merge remote-tracking branch 'origin/main' 2023-12-03 20:49:14 +03:00
SDE
fc37bea98a 0.8.33 tickets text 2023-12-03 20:49:07 +03:00
SBD
8a91e611ac Merge remote-tracking branch 'origin/main' 2023-12-03 20:43:24 +03:00
SBD
7208db6981 0.8.475 2023-12-03 20:43:13 +03:00
SDE
447a78cd3a 0.8.32 tickets text 2023-12-03 20:37:01 +03:00
SBD
95dff519b8 0.8.474 2023-12-03 20:36:20 +03:00
SBD
62aeebae95 0.8.473 2023-12-03 20:22:20 +03:00
SBD
c2e03728f8 0.8.472 2023-12-03 20:00:32 +03:00
SBD
a64fbab270 0.8.471 2023-12-03 19:59:15 +03:00
SBD
00ea16f631 0.8.470 2023-12-03 19:50:51 +03:00
SBD
e3aafcdfe9 0.8.469 2023-12-03 19:35:52 +03:00
SBD
421a3a2dab Merge remote-tracking branch 'origin/main' 2023-12-03 19:27:11 +03:00
SBD
61e4f7e450 0.8.468 2023-12-03 19:26:56 +03:00
SDE
3b52cab162 0.8.31 fix registration form 2023-12-03 19:07:49 +03:00
fe9be61772 Merge remote-tracking branch 'origin/main' 2023-12-03 18:59:00 +03:00
0818f880cc 0.0.306 upd registration error_msg 2023-12-03 18:58:54 +03:00
SBD
cca062efec Merge remote-tracking branch 'origin/main' 2023-12-03 18:33:34 +03:00
SBD
2eb7ac85d3 0.8.467 2023-12-03 18:33:23 +03:00
SDE
3469a3923c 0.8.30 fix registration form 2023-12-03 18:07:39 +03:00
SDE
20fb49b3e4 0.8.30 fix registration form 2023-12-03 17:47:29 +03:00
SDE
afe8feebc2 Merge remote-tracking branch 'origin/main' 2023-12-03 17:43:13 +03:00
SDE
ae6a68d85b 0.8.30 check password 2023-12-03 17:43:01 +03:00
SBD
d80c45acd5 0.8.466 2023-12-03 17:40:28 +03:00
3a9ac2c289 Merge remote-tracking branch 'origin/main' 2023-12-03 17:38:59 +03:00
2d68836724 0.0.305 set test_banners for news 2023-12-03 17:38:53 +03:00
SDE
0deb85b5a3 0.8.29 admin airport change city 2023-12-03 17:25:21 +03:00
SBD
7b38f6e3b3 Merge remote-tracking branch 'origin/main' 2023-12-03 17:21:23 +03:00
SBD
43f050f070 0.8.465 2023-12-03 17:21:12 +03:00
098b7c4fb5 Merge remote-tracking branch 'origin/main' 2023-12-03 17:15:32 +03:00
eae56199e0 0.0.304 rewrite news widget 2023-12-03 17:15:23 +03:00
SDE
71e8f0f465 Merge remote-tracking branch 'origin/main' 2023-12-03 17:12:49 +03:00
SBD
66d7183278 0.8.464 2023-12-03 17:12:35 +03:00
SDE
92b92f2d65 0.8.29 admin airport change city 2023-12-03 17:12:32 +03:00
SBD
d5ab7d82eb 0.8.463 2023-12-03 17:09:16 +03:00
SBD
1ebd9f9c0b Merge remote-tracking branch 'origin/main' 2023-12-03 16:53:30 +03:00
SBD
7fd2c60ddb 0.8.462 2023-12-03 16:53:23 +03:00
SDE
f068182557 0.8.28 switch off passanger in airport route 2023-12-03 16:37:24 +03:00
SBD
02945b0691 Merge remote-tracking branch 'origin/main' 2023-12-03 16:09:32 +03:00
SBD
21b959e6a3 0.8.461 2023-12-03 16:09:24 +03:00
SDE
747091c744 0.8.27 one article breadcrumbs 2023-12-03 15:39:52 +03:00
7b70052ff1 0.0.303 2023-12-03 15:26:08 +03:00
SBD
49fd26bc4c Merge remote-tracking branch 'origin/main' 2023-12-03 15:12:18 +03:00
SBD
77f365ef45 Merge remote-tracking branch 'origin/main' 2023-12-03 15:12:11 +03:00
SDE
6d34d46e38 0.8.26 one article breadcrumbs 2023-12-03 15:12:04 +03:00
SBD
970c2e0837 0.8.460 2023-12-03 15:11:33 +03:00
SDE
b87549d567 0.8.25 msgs admin list change 2023-12-03 15:06:47 +03:00
SBD
78abdb2fef 0.8.459 2023-12-03 14:46:34 +03:00
SBD
f73ebb08c9 Merge remote-tracking branch 'origin/main' 2023-12-03 14:39:16 +03:00
SBD
628e8eec09 0.8.458 2023-12-03 14:39:07 +03:00
66ddcaec5b Merge remote-tracking branch 'origin/main' 2023-12-03 14:38:29 +03:00
3901c82aae 0.0.302 clear ID of hide inputs in create/find routes 2023-12-03 14:38:23 +03:00
SBD
9f682b66a5 0.8.457 2023-12-03 14:24:15 +03:00
SBD
c74aff7b91 0.8.456 2023-12-03 13:52:49 +03:00
SBD
1be50b1277 Merge remote-tracking branch 'origin/main' 2023-12-03 13:34:01 +03:00
SDE
af00d1a54b 0.8.25 profile unredeaded messages 2023-12-03 13:32:21 +03:00
SBD
dd4ad82248 0.8.455 2023-12-03 13:18:49 +03:00
SBD
38c08cbced Merge remote-tracking branch 'origin/main' 2023-12-03 12:59:15 +03:00
SBD
ed2c74a280 0.8.454 2023-12-03 12:59:05 +03:00
SDE
90ab1bb6b4 Merge remote-tracking branch 'origin/main' 2023-12-03 12:55:22 +03:00
SDE
3e2220e5f2 0.8.24 articles main 3 elements 2023-12-03 12:55:10 +03:00
SBD
33e27620b1 0.8.453 2023-12-03 12:46:44 +03:00
SBD
fbdef2a1ec 0.8.452 2023-12-03 12:34:24 +03:00
SBD
1834639b50 0.8.451 2023-12-03 12:22:05 +03:00
f9606a3c88 0.0.301 initialization in com_of 2023-12-02 17:07:25 +03:00
SDE
c803d7abbb 0.8.23 fix png black bg 2023-12-02 16:26:53 +03:00
SDE
efd75817bc 0.8.22 admin options change 2023-12-02 16:09:56 +03:00
SDE
36fff15e2b 0.8.21 admin options change 2023-12-02 16:07:12 +03:00
SDE
7573bfb344 Merge remote-tracking branch 'origin/main' 2023-12-02 15:59:40 +03:00
SDE
0c33d638ba 0.8.21 fix problem ckeditor uploads images 2023-12-02 15:59:29 +03:00
SBD
7d3da34e22 0.8.450 2023-12-02 15:55:47 +03:00
SDE
0e2723a367 Merge remote-tracking branch 'origin/main' 2023-12-02 15:42:34 +03:00
SDE
b102c44031 0.8.20 fix problem ckeditor uploads images 2023-12-02 15:42:25 +03:00
SBD
4b480c35e5 Merge remote-tracking branch 'origin/main' 2023-12-02 15:32:00 +03:00
SBD
8e7bcd8fd8 0.8.449 2023-12-02 15:31:50 +03:00
SDE
c60c545031 0.8.19 enable for subscribe in admin 2023-12-02 15:12:23 +03:00
SDE
51d075f799 0.8.18 enable for subscribe in admin 2023-12-02 15:10:17 +03:00
SDE
db54ec1650 Merge remote-tracking branch 'origin/main' 2023-12-02 15:02:48 +03:00
SDE
14b362442f 0.8.18 change pillow version for ckeditor 2023-12-02 15:02:39 +03:00
SBD
fcfbeece87 0.8.448 2023-12-02 15:01:48 +03:00
SBD
aea501aedb 0.8.447 2023-12-02 14:58:16 +03:00
SBD
f1d175fe84 Merge remote-tracking branch 'origin/main' 2023-12-02 14:56:40 +03:00
SBD
0f432c4fd9 0.8.446 2023-12-02 14:56:30 +03:00
b53e19c439 0.0.301 initialization in com_of 2023-12-02 14:43:23 +03:00
SDE
bebd20abf0 Merge remote-tracking branch 'origin/main' 2023-12-02 14:06:05 +03:00
SDE
5dc2293212 0.8.17 admin switch off functional 2023-12-02 14:05:57 +03:00
37f480c01e Merge remote-tracking branch 'origin/main' 2023-12-02 14:05:19 +03:00
f16efa24b0 0.0.300 fix errors in console 2023-12-02 14:05:14 +03:00
SDE
e11d05eb02 Merge remote-tracking branch 'origin/main' 2023-12-02 13:55:34 +03:00
SDE
32cd45106d 0.8.16 admin switch off functional 2023-12-02 13:55:26 +03:00
7b95893b34 Merge remote-tracking branch 'origin/main' 2023-12-02 13:52:50 +03:00
b6769f6350 0.0.299 2023-12-02 13:52:43 +03:00
SDE
5650b2d6b9 Merge remote-tracking branch 'origin/main' 2023-12-02 13:46:02 +03:00
SDE
f0fe8edf80 0.8.15 fix options 2023-12-02 13:45:54 +03:00
b30df5b6ed 0.0.298 2023-12-02 13:44:07 +03:00
0ef26556a2 0.0.297 remove errors after typing in ALL fields 2023-12-02 00:19:15 +03:00
ea92feab27 0.0.296 remove errors after typing in fields 2023-12-02 00:06:17 +03:00
1720e156d2 0.0.295 fix disabled buttons in different forms 2023-12-01 21:34:57 +03:00
9ed06e741e 0.0.294 2023-12-01 17:09:56 +03:00
d39a3a78d0 0.0.293 add loader for buttons when form send 2023-12-01 17:06:09 +03:00
09dc2984f3 0.0.292 upd error messages for forms 2023-12-01 15:28:14 +03:00
SDE
660e3f8a99 0.8.14
processing forms
2023-12-01 12:51:30 +03:00
SDE
cc9797eb71 0.8.13
processing forms
2023-12-01 12:30:34 +03:00
6a8aa73e63 0.0.291 2023-12-01 12:16:52 +03:00
689495e410 0.0.290 2023-12-01 12:10:17 +03:00
415fad4f4e Merge remote-tracking branch 'origin/main' 2023-12-01 12:02:59 +03:00
396db7a439 0.0.289 2023-12-01 12:02:52 +03:00
SDE
61bea5639b 0.8.12
processing forms
2023-12-01 11:36:11 +03:00
SDE
c9d6812d11 0.8.11
processing forms
2023-12-01 11:32:52 +03:00
18dd435678 0.0.288 2023-12-01 11:24:32 +03:00
a7a4112312 0.0.287 2023-12-01 11:14:04 +03:00
cf8cb9a6a4 0.0.286 2023-12-01 10:55:47 +03:00
b31f1ddb0f Merge remote-tracking branch 'origin/main' 2023-12-01 10:53:17 +03:00
382ddd48e4 0.0.285 2023-12-01 10:53:08 +03:00
SDE
0b57fa9238 0.8.10
fix send_message_ajax
2023-12-01 02:10:42 +03:00
SDE
fe7721270b 0.8.9
fix ResponseInterceptionMiddleware
2023-12-01 02:07:17 +03:00
49b35abb0b 0.0.284 2023-12-01 01:57:00 +03:00
41dbb6bad7 0.0.284 add send form from footer 2023-12-01 01:13:49 +03:00
fde640e997 0.0.283 add success_msg for forms, clear forms 2023-12-01 00:34:42 +03:00
SBD
fd1f4ff9b1 Merge remote-tracking branch 'origin/main' 2023-11-30 18:11:33 +03:00
SBD
3a4c1b12a6 0.8.445 2023-11-30 18:11:18 +03:00
ce68dbee8a 0.0.282 2023-11-30 18:07:04 +03:00
SDE
1976a4c1dc 0.8.8
processing send messages by mail
2023-11-30 17:46:18 +03:00
0dc3419651 0.0.281 2023-11-30 17:43:25 +03:00
7769608e03 Merge remote-tracking branch 'origin/main' 2023-11-30 17:26:02 +03:00
9772d7670b 0.0.280 upd confirm_remove button 2023-11-30 17:25:56 +03:00
SDE
36e9edb51b 0.8.7
processing send messages by mail
2023-11-30 16:03:37 +03:00
6191980dc7 0.0.278 2023-11-30 15:01:22 +03:00
7179b67137 0.0.278 2023-11-30 14:56:25 +03:00
65362e34b8 Merge remote-tracking branch 'origin/main' 2023-11-30 14:43:46 +03:00
ec76d336f3 0.0.277 upd carrier_card 2023-11-30 14:43:39 +03:00
SBD
12d5e4546d 0.8.444 2023-11-30 14:42:50 +03:00
SBD
4a97b02010 0.8.443 2023-11-30 14:28:37 +03:00
SDE
aa492f6ca4 0.8.6
fix find routes
2023-11-30 14:24:50 +03:00
SBD
7547d2cb89 0.8.442 2023-11-30 14:22:01 +03:00
SBD
3febf729b6 0.8.441 2023-11-30 14:13:25 +03:00
SDE
fbfdec2380 0.8.5
create_or_change_route_ajax return route_id
2023-11-30 14:06:57 +03:00
SBD
fb665b409c 0.8.440 2023-11-30 14:04:30 +03:00
SBD
f86e76615d 0.8.439 2023-11-30 13:49:45 +03:00
SBD
7cfe3f699a Merge remote-tracking branch 'origin/main' 2023-11-30 13:43:18 +03:00
SBD
03ab2ae2cd 0.8.438 2023-11-30 13:43:07 +03:00
SDE
ad1016a427 0.8.4
mail request_offer_ajax
2023-11-30 13:19:47 +03:00
SDE
6fc40452d9 0.8.3
request_offer_ajax
2023-11-30 08:15:02 +03:00
SDE
de098bdf55 0.8.2
fix articles
2023-11-30 07:41:22 +03:00
dcfd66324e Merge remote-tracking branch 'origin/main' 2023-11-29 22:09:17 +03:00
ff962b9658 0.0.276 2023-11-29 22:09:12 +03:00
SBD
006ff44858 Merge remote-tracking branch 'origin/main' 2023-11-29 22:03:42 +03:00
SBD
f9fdcc5314 0.8.437 2023-11-29 22:03:31 +03:00
e49605dea6 0.0.275 add data-set for forms in advertisement and partners pages 2023-11-29 22:00:03 +03:00
e429f48320 0.0.274 2023-11-29 21:48:25 +03:00
43ef016751 0.0.273 2023-11-29 21:28:42 +03:00
SBD
4a59adc73f Merge remote-tracking branch 'origin/main' 2023-11-29 21:24:07 +03:00
SBD
2ebc28519e 0.8.436 2023-11-29 21:23:59 +03:00
SDE
23de94b8cd 0.8.1
options init
2023-11-29 20:51:36 +03:00
42cf20137b 0.0.272 2023-11-29 20:50:24 +03:00
d5bb15e695 Merge remote-tracking branch 'origin/main' 2023-11-29 20:39:58 +03:00
039985fe5f 0.0.271 2023-11-29 20:39:49 +03:00
SBD
d618c10e8b Merge remote-tracking branch 'origin/main' 2023-11-29 20:34:10 +03:00
SBD
069f2094f0 0.8.434 2023-11-29 20:34:01 +03:00
SDE
2b6bbba265 0.8.0
options init
2023-11-29 20:18:22 +03:00
f7e032a5bc Merge remote-tracking branch 'origin/main' 2023-11-29 20:11:56 +03:00
0d394fb6b7 0.0.270 2023-11-29 20:11:51 +03:00
SBD
9635a1dcf2 0.8.433 2023-11-29 20:06:33 +03:00
SBD
6ae3a88d7b Merge remote-tracking branch 'origin/main' 2023-11-29 20:05:45 +03:00
SBD
512499ab12 0.8.432 2023-11-29 20:05:37 +03:00
b8e3092fc4 0.0.269 2023-11-29 20:03:49 +03:00
4b9e5e5f34 Merge remote-tracking branch 'origin/main' 2023-11-29 19:44:26 +03:00
a7d9dfe79a 0.0.268 all child are replaced 2023-11-29 19:44:20 +03:00
SDE
cc503ec6d1 Merge remote-tracking branch 'origin/main' 2023-11-29 19:21:22 +03:00
SDE
7eb8edbe1f 0.7.96
fix articles page
2023-11-29 19:21:15 +03:00
SBD
1f4ccaec4a 0.8.431 2023-11-29 19:11:26 +03:00
SBD
66e0edebc5 0.8.430 2023-11-29 19:11:08 +03:00
SBD
ebdc84f7e1 0.8.429 2023-11-29 19:05:40 +03:00
SBD
cd1b8d4579 0.8.428 2023-11-29 19:04:57 +03:00
SBD
a733649521 Merge remote-tracking branch 'origin/main' 2023-11-29 18:28:41 +03:00
SBD
01d72c5f45 0.8.427 2023-11-29 18:28:31 +03:00
SDE
55681c7fb8 0.7.95
meta names
2023-11-29 18:15:12 +03:00
SDE
4a19726a99 Merge remote-tracking branch 'origin/main' 2023-11-29 18:04:18 +03:00
SDE
61f26299b8 0.7.94
meta names
2023-11-29 18:04:06 +03:00
SBD
8a6317da2b 0.8.426 2023-11-29 18:01:03 +03:00
SBD
1124149cf8 0.8.425 2023-11-29 17:56:45 +03:00
426071fe15 Merge remote-tracking branch 'origin/main' 2023-11-29 17:52:55 +03:00
c97aa44723 0.0.267 replace all child for class or id 2023-11-29 17:52:49 +03:00
SDE
de6bd9682e Merge remote-tracking branch 'origin/main' 2023-11-29 17:51:12 +03:00
SDE
16e7ea3109 0.7.93
meta names
2023-11-29 17:50:59 +03:00
41fa14351a Merge remote-tracking branch 'origin/main' 2023-11-29 17:43:19 +03:00
35f135a10b 0.0.266 replace all child for class or id 2023-11-29 17:43:13 +03:00
SBD
037abac188 Merge remote-tracking branch 'origin/main' 2023-11-29 17:39:04 +03:00
SBD
fecd32a254 0.8.424 2023-11-29 17:38:53 +03:00
446af5e438 0.0.265 2023-11-29 17:30:26 +03:00
SDE
71ecd65814 0.7.92
FAQ show from admin
2023-11-29 17:26:59 +03:00
SBD
3e101493dc Merge remote-tracking branch 'origin/main' 2023-11-29 16:55:35 +03:00
SBD
453d4b7349 0.8.423 2023-11-29 16:55:26 +03:00
40a8bc158a Merge remote-tracking branch 'origin/main' 2023-11-29 16:55:24 +03:00
2c711ed370 0.0.264 upd previous_next_news widget 2023-11-29 16:55:17 +03:00
SDE
fc1654dedb 0.7.91
routes paging
2023-11-29 16:52:20 +03:00
SDE
dfec56fef9 0.7.90
articles paging
2023-11-29 16:38:12 +03:00
SDE
942db49daf Merge remote-tracking branch 'origin/main' 2023-11-29 16:36:18 +03:00
SDE
d4562e7ca4 0.7.89
articles paging
2023-11-29 16:36:10 +03:00
SBD
3a0845fe2a 0.8.422 2023-11-29 16:34:30 +03:00
SBD
3740ac642f Merge remote-tracking branch 'origin/main' 2023-11-29 16:33:37 +03:00
SBD
c1ccf00302 0.8.421 2023-11-29 16:33:28 +03:00
SDE
4400a6b13f 0.7.88
articles paging
2023-11-29 16:33:21 +03:00
SDE
66fbf984e9 0.7.87
articles paging
2023-11-29 16:29:48 +03:00
SBD
30ebc6037a Merge remote-tracking branch 'origin/main' 2023-11-29 16:26:17 +03:00
SBD
ac60b08f2d 0.8.420 2023-11-29 16:26:00 +03:00
f32e127148 0.0.263 resize to mobile since 1180px 2023-11-29 16:18:13 +03:00
SBD
8e3b798bce 0.8.419 2023-11-29 15:58:18 +03:00
SBD
57dddf528b 0.8.418 2023-11-29 15:52:31 +03:00
SBD
35d5e05f00 Merge remote-tracking branch 'origin/main' 2023-11-29 15:51:58 +03:00
SBD
4ecc89a4e7 0.8.417 2023-11-29 15:51:50 +03:00
SDE
87bc1be15a 0.7.86
fix left curtain arrows
2023-11-29 15:46:33 +03:00
SDE
b1c599e71d Merge remote-tracking branch 'origin/main' 2023-11-29 15:44:05 +03:00
SDE
da3fb36a22 0.7.85
fix css error
2023-11-29 15:43:45 +03:00
SBD
ded7761c91 Merge remote-tracking branch 'origin/main' 2023-11-29 15:41:59 +03:00
SBD
d4de2ef739 0.8.416 2023-11-29 15:41:45 +03:00
SDE
7637f6fdd1 Merge remote-tracking branch 'origin/main' 2023-11-29 15:38:11 +03:00
SDE
f663954f03 0.7.84
fix left curtain icon
2023-11-29 15:38:04 +03:00
SBD
f2fd95b04e 0.8.415 2023-11-29 15:24:12 +03:00
SBD
3880b97cae 0.8.414 2023-11-29 15:22:33 +03:00
SBD
2fb00ee112 0.8.413 2023-11-29 15:14:20 +03:00
SBD
dc92877beb 0.8.412 2023-11-29 15:05:13 +03:00
SBD
d9103e62a7 0.8.411 2023-11-29 15:00:28 +03:00
e5a8c3cb8f 0.0.262 add switch on main page 2023-11-29 14:59:20 +03:00
97b00d94cf 0.0.261 style updates 2023-11-28 17:47:52 +03:00
SBD
381f0a8490 0.8.410 2023-11-28 15:29:42 +03:00
SBD
b8b3fd02fa 0.8.409 2023-11-28 15:25:31 +03:00
SBD
3b244f4de0 Merge remote-tracking branch 'origin/main' 2023-11-28 14:48:23 +03:00
SBD
c4d101275a 0.8.408 2023-11-28 14:48:14 +03:00
c9b21ded98 0.0.260 bug fix 2023-11-28 14:33:24 +03:00
SBD
f5115f82fb 0.8.407 2023-11-28 14:29:29 +03:00
SBD
d6a6b4f319 0.8.406 2023-11-27 18:28:44 +03:00
SBD
f3e418cf68 Merge remote-tracking branch 'origin/main' 2023-11-27 18:24:05 +03:00
SBD
a74a0c1f57 0.8.405 2023-11-27 18:23:51 +03:00
0f10e274e6 0.0.259 small upd for styles 2023-11-27 18:21:33 +03:00
SBD
57a419eeaa 0.8.404 2023-11-27 18:17:20 +03:00
SBD
aa18a3c542 0.8.403 2023-11-25 22:03:54 +03:00
SBD
dea8d064d4 0.8.402 2023-11-25 21:54:45 +03:00
SBD
d022fb231f Merge remote-tracking branch 'origin/main' 2023-11-25 21:49:33 +03:00
SBD
415784bf06 0.8.401 2023-11-25 21:49:24 +03:00
SDE
246974c1b8 0.7.83
fix ticket first msg
2023-11-25 18:10:38 +03:00
SDE
34d2fea31f 0.7.82
correct padding
2023-11-25 17:17:10 +03:00
SDE
0571de3dd0 0.7.82
loader correct
2023-11-25 17:14:17 +03:00
SBD
4e2d453ff1 0.8.400 2023-11-25 16:48:26 +03:00
SDE
f4ba38654b 0.7.81
curtain right rule for mobile into get params
2023-11-25 16:40:07 +03:00
SDE
7831973cdb 0.7.80
FAQ admin
2023-11-25 16:31:10 +03:00
SBD
4f2c7aeb2c 0.8.399 2023-11-25 15:37:37 +03:00
SBD
237666d96f 0.8.398 2023-11-25 15:34:54 +03:00
SBD
f6d0486a19 0.8.397 2023-11-25 15:26:30 +03:00
SBD
200a9c308c 0.8.396 2023-11-25 15:14:09 +03:00
SBD
28d3138c43 0.8.395 2023-11-25 14:07:03 +03:00
SBD
0d41c95e3d 0.8.394 2023-11-25 13:53:23 +03:00
SBD
e5ea92df3d 0.8.393 2023-11-25 13:21:53 +03:00
SBD
9f7550eaae 0.8.392 2023-11-25 13:14:55 +03:00
SBD
3e88458fce 0.8.391 2023-11-25 13:08:15 +03:00
SBD
a5cbf8c128 0.8.390 2023-11-25 12:58:06 +03:00
SBD
704b88320a Merge remote-tracking branch 'origin/main' 2023-11-25 12:48:50 +03:00
SBD
0aae04eca8 0.8.398 2023-11-25 12:48:15 +03:00
3f1cd5431f 0.0.258 small_upd for articles 2023-11-24 19:35:11 +03:00
SBD
5081b6ce3e 0.8.397 2023-11-24 17:36:54 +03:00
SBD
7e7fb437a6 0.8.396 2023-11-24 17:19:45 +03:00
SBD
addca29f0f 0.8.395 2023-11-24 17:13:25 +03:00
SBD
f1775237fb Merge remote-tracking branch 'origin/main' 2023-11-24 16:49:19 +03:00
SBD
f09ff3f7df 0.8.394 2023-11-24 16:48:38 +03:00
4259f84764 Merge remote-tracking branch 'origin/main' 2023-11-24 16:39:56 +03:00
707bbf1863 0.0.257 return form in create_new_route 2023-11-24 16:38:24 +03:00
SBD
a989f85b2b 0.8.393 2023-11-24 16:37:29 +03:00
SBD
b62396a907 Merge remote-tracking branch 'origin/main' 2023-11-24 16:34:21 +03:00
SBD
998c91c727 0.8.393 2023-11-24 16:34:13 +03:00
64b8e74612 Merge remote-tracking branch 'origin/main' 2023-11-24 16:09:47 +03:00
55eff16b9c 0.0.256 2023-11-24 16:09:38 +03:00
SBD
31857131be Merge remote-tracking branch 'origin/main' 2023-11-24 16:08:18 +03:00
SBD
77de950af8 0.8.392 2023-11-24 16:08:09 +03:00
176c84cf2d 0.0.255 2023-11-24 13:33:38 +03:00
15ea6a982c 0.0.254 upd filds in support 2023-11-23 16:55:45 +03:00
6230b77473 0.0.253 small rewrite for button with name in header 2023-11-23 01:10:46 +03:00
2f81a73078 0.0.252 add type_transport icons for finded routes 2023-11-22 16:33:16 +03:00
cf83ae059e Merge remote-tracking branch 'origin/main' 2023-11-22 16:31:01 +03:00
4418d4ad6f 0.0.250 fix bug with the same icons in the filter 2023-11-22 16:30:53 +03:00
SBD
239b6a0da1 0.8.391 2023-11-22 15:24:21 +03:00
SBD
cc02495459 Merge remote-tracking branch 'origin/main' 2023-11-22 15:22:26 +03:00
SBD
153d0380de 0.8.390 2023-11-22 15:21:49 +03:00
87fb930c63 0.0.250 fix bug with menu_profile 2023-11-22 14:39:31 +03:00
SBD
38a8cef3d9 0.8.388 2023-11-21 23:14:16 +03:00
SBD
6f7551abbf 0.8.387 2023-11-21 22:43:42 +03:00
SBD
64d6860e58 0.8.386 2023-11-21 22:22:02 +03:00
SBD
88e6c7eee8 0.8.385 2023-11-21 21:53:10 +03:00
SBD
75c5553852 0.8.384 2023-11-21 21:46:03 +03:00
SBD
9d1815c21f 0.8.383 2023-11-21 21:44:22 +03:00
SBD
c93cda4eaf 0.8.382 2023-11-21 20:53:14 +03:00
SBD
cce969d870 0.8.381 2023-11-21 20:30:07 +03:00
SBD
0b177d845c 0.8.380 2023-11-21 20:23:41 +03:00
SBD
42f288e0e4 0.8.379 2023-11-21 20:19:17 +03:00
3948c79891 0.0.249 add cursor pointer 2023-11-21 19:09:13 +03:00
c8a28de46a 0.0.248 add translate for placeholders 2023-11-21 18:49:50 +03:00
c660d8cb72 0.0.247 add translate for words with letter А 2023-11-21 18:29:02 +03:00
SDE
a2688c4a15 Merge remote-tracking branch 'origin/main' 2023-11-21 17:37:21 +03:00
SDE
9d2e9b7acd 0.7.80
FAQ admin
2023-11-21 17:37:12 +03:00
f37ed72b39 0.0.246 2023-11-21 13:41:11 +03:00
6fd3c11f06 0.0.245 small upd for w_carrier_card 2023-11-20 22:42:05 +03:00
414ffc703d 0.0.244 upd w_carrier_card.html and mobile_styles.css for this widget 2023-11-20 20:58:49 +03:00
f7a587b7a5 0.0.243 upd bug from 17:11 to 17:52 2023-11-20 15:20:40 +03:00
534defa36b 0.0.242 upd css for create route 2023-11-20 00:44:07 +03:00
1fbf846270 0.0.241 upd carrier-card 2023-11-20 00:21:12 +03:00
e6a1cd967e Merge remote-tracking branch 'origin/main' 2023-11-19 22:41:46 +03:00
c9adf1a785 0.0.240 2023-11-19 22:41:41 +03:00
SBD
8380b7e66e Merge remote-tracking branch 'origin/main' 2023-11-19 21:18:32 +03:00
SBD
e01c7e81f2 0.8.378 2023-11-19 21:18:23 +03:00
4751dd9079 Merge remote-tracking branch 'origin/main' 2023-11-19 20:03:32 +03:00
f82ae16e31 0.0.239 fix menu_profile, main search widget, benefit_img, header hide menu, header, title in cusmer page 2023-11-19 20:03:26 +03:00
SBD
8a00446b5c Merge remote-tracking branch 'origin/main' 2023-11-19 19:46:40 +03:00
SBD
39f37bcd23 0.8.377 2023-11-19 19:46:30 +03:00
c8e4df8150 0.0.238 bug fix - footer, faq, my_profile 2023-11-19 19:00:23 +03:00
1e9e2cb048 Merge remote-tracking branch 'origin/main' 2023-11-19 18:12:24 +03:00
06661cb187 0.0.237 2023-11-19 18:12:19 +03:00
SBD
fade021048 Merge remote-tracking branch 'origin/main' 2023-11-19 18:04:01 +03:00
SBD
9d90138847 0.8.376 2023-11-19 18:03:49 +03:00
b7a677d79d 0.0.236 bug fix tg 14:26 2023-11-19 17:45:10 +03:00
SBD
3660f5af6d 0.8.375 2023-11-19 17:07:08 +03:00
SBD
61e1c35f02 Merge remote-tracking branch 'origin/main' 2023-11-19 17:05:30 +03:00
SBD
89721ce797 0.8.374 2023-11-19 17:05:21 +03:00
55b4c0ac11 Merge remote-tracking branch 'origin/main' 2023-11-19 16:44:32 +03:00
70df8a53c8 0.0.235 add scroll to element in static pages 2023-11-19 16:44:26 +03:00
SBD
3311ab5b37 0.8.373 2023-11-19 15:49:39 +03:00
SBD
49ad367a70 0.8.372 2023-11-19 15:26:55 +03:00
SBD
cc3a5c4a4f 0.8.371 2023-11-19 15:09:39 +03:00
SBD
f7af979b7e 0.8.370 2023-11-19 14:58:02 +03:00
SBD
6f06f96a94 0.8.369 2023-11-19 14:52:52 +03:00
a3ef86ba37 0.0.234 small bug fix 2023-11-19 14:47:21 +03:00
SBD
d6da292d5f 0.8.368 2023-11-19 14:38:10 +03:00
SBD
ccb8c6585c 0.8.367 2023-11-19 14:20:59 +03:00
SBD
ea567008c6 0.8.366 2023-11-18 21:55:28 +03:00
SBD
6cbde10b11 Merge remote-tracking branch 'origin/main' 2023-11-18 18:39:43 +03:00
SBD
7e23776501 0.8.365 2023-11-18 18:39:25 +03:00
e6a91ebc72 Merge remote-tracking branch 'origin/main' 2023-11-18 18:38:58 +03:00
06a2e883fb 0.0.233 add margin for header and main_content 2023-11-18 18:38:53 +03:00
SBD
00b0e00fd3 Merge remote-tracking branch 'origin/main' 2023-11-18 18:38:20 +03:00
SBD
8086d5344e 0.8.364 2023-11-18 18:38:07 +03:00
ea76733305 Merge remote-tracking branch 'origin/main' 2023-11-18 18:36:05 +03:00
f0f8af48b3 0.0.232 add margin for header and main_content 2023-11-18 18:35:59 +03:00
SBD
9bc02c7752 Merge remote-tracking branch 'origin/main' 2023-11-18 18:29:38 +03:00
SBD
3067535fe0 0.8.363 2023-11-18 18:29:28 +03:00
cc6bd781e0 Merge remote-tracking branch 'origin/main' 2023-11-18 18:24:30 +03:00
10a1cb096d 0.0.231 small upd for mobile_styles.css 2023-11-18 18:24:24 +03:00
SBD
47c228d048 0.8.362 2023-11-18 18:10:31 +03:00
SBD
11c35c9abd 0.8.361 2023-11-18 17:58:11 +03:00
SBD
ba8bde1153 0.8.360 2023-11-18 17:30:15 +03:00
SBD
7c991024b7 0.8.359 2023-11-18 17:12:52 +03:00
SBD
710d500980 Merge remote-tracking branch 'origin/main' 2023-11-18 16:41:11 +03:00
SBD
cde0b55aab 0.8.358 2023-11-18 16:40:50 +03:00
SDE
6660db1a89 Merge remote-tracking branch 'origin/main' 2023-11-18 16:34:41 +03:00
SBD
8f76b484ba 0.8.357 2023-11-18 16:30:27 +03:00
SDE
b8790be7fe 0.7.79
create_or_change_route_ajax add route id to response
2023-11-18 16:26:49 +03:00
bd4a2e7507 0.0.230 2023-11-18 15:51:45 +03:00
70002f4efb 0.0.229 scroll to element after edit 2023-11-18 15:02:26 +03:00
d40eed3c5d 0.0.228 2023-11-18 13:44:36 +03:00
130d601e54 Merge remote-tracking branch 'origin/main' 2023-11-18 13:43:59 +03:00
SBD
7ae8d0ce48 0.8.356 2023-11-18 13:43:52 +03:00
SBD
494ff26fdd 0.8.355 2023-11-18 13:02:18 +03:00
330a582a26 0.0.227 upd styles(boris).css 2023-11-18 12:36:14 +03:00
SBD
54d5669b3b 0.8.354 2023-11-18 12:31:48 +03:00
SBD
a7491c545c 0.8.353 2023-11-18 12:28:31 +03:00
6515979251 0.0.361 2023-11-17 19:58:09 +03:00
a97d9ec2bc 0.0.360 2023-11-17 17:10:07 +03:00
2685e80161 0.0.227 upd styles(boris).css 2023-11-16 17:27:49 +03:00
ea94031545 0.0.226 upd mobile_styles.css 2023-11-16 17:26:16 +03:00
298e3861cf 0.0.225 upd mobile_styles.css 2023-11-16 16:50:15 +03:00
ce230e80a5 0.0.224 upd mobile_styles.css 2023-11-15 17:27:02 +03:00
b12ae238d3 0.0.223 2023-11-14 19:51:57 +03:00
d482570221 0.0.359 2023-11-12 16:37:27 +03:00
dde8c5fdd9 0.0.358 2023-11-12 16:30:19 +03:00
259d6662fe 0.0.357 2023-11-12 16:06:24 +03:00
e4849ec659 0.0.356 2023-11-12 15:52:39 +03:00
88f679cd41 0.0.356 2023-11-12 15:52:32 +03:00
f97eeb83c2 0.0.355 2023-11-11 19:05:46 +03:00
155e5bdf57 0.0.354 2023-11-11 19:03:12 +03:00
SDE
e78c9a1efb 0.7.78
scroll into view commit from boris
2023-11-11 18:56:46 +03:00
4b74dd8f19 0.0.353 2023-11-11 18:49:23 +03:00
c3be6d3e83 0.0.352 2023-11-11 18:33:53 +03:00
50baa907bd Merge remote-tracking branch 'origin/main' 2023-11-11 18:27:48 +03:00
40207ab256 0.0.351 2023-11-11 18:27:29 +03:00
0733851e4e 0.0.222 upd mobile for main in 1024 2023-11-11 18:10:40 +03:00
1aea397f9a 0.0.350 2023-11-11 15:33:07 +03:00
335af09596 0.0.349 2023-11-11 15:30:32 +03:00
95c3c062fd 0.0.221 upd menu_profile under 700px 2023-11-11 15:22:36 +03:00
f47e3e550c 0.0.220 upd menu_profile under 700px 2023-11-11 15:19:54 +03:00
d3d0dc5a22 0.0.219 2023-11-11 15:15:56 +03:00
ff4c573941 0.0.218 996 px mobile 2023-11-11 15:12:13 +03:00
8d52620d32 0.0.348 2023-11-11 14:26:17 +03:00
5856fbb670 0.0.347 2023-11-11 14:14:27 +03:00
7cb8a2de39 0.0.217 add mobile 575px 2023-11-11 13:51:54 +03:00
d57be37c34 0.0.217 upd header height 2023-11-11 12:12:14 +03:00
28a14aaf76 0.0.346 new scroll in menu 2023-11-11 00:31:09 +03:00
359ed5770d 0.0.216 add mobile 575px 2023-11-10 21:12:45 +03:00
fe093aa9ac 0.0.215 add mobile 575px 2023-11-10 20:45:46 +03:00
338a9ed08a Merge remote-tracking branch 'origin/main' 2023-11-10 20:21:22 +03:00
a8c954e8d9 0.0.214 upd mobile_styles.css 2023-11-10 20:21:15 +03:00
50ee432965 0.0.346 2023-11-10 20:00:21 +03:00
4b3e3b8401 0.0.345 2023-11-10 19:55:52 +03:00
2abf0f62e9 0.0.344 2023-11-10 19:50:18 +03:00
69dd70d42d 0.0.343 2023-11-10 19:14:45 +03:00
405cae84fe 0.0.342 2023-11-10 19:14:00 +03:00
ae9902965a 0.0.213 upd for support 2023-11-10 18:33:42 +03:00
SDE
0c20d7d0f4 0.7.77
dashboard page
2023-11-10 18:06:05 +03:00
d4e3b75bcb 0.0.342 2023-11-10 17:33:58 +03:00
bbd3fd51dc 0.0.212 upd for dropdown_menu and change_language 2023-11-10 17:21:27 +03:00
9ecc961e42 0.0.341 2023-11-10 16:24:43 +03:00
dd2cc62d01 0.0.340 2023-11-10 16:21:08 +03:00
7e316bbc73 0.0.211 small upd for menu_profile 2023-11-10 14:53:12 +03:00
e455a19ff3 0.0.210 small upd for menu_profile 2023-11-10 14:27:49 +03:00
618064d16a 0.0.209 my_subscribe 360px 2023-11-09 12:16:12 +03:00
05705a91cf 0.0.208 info_profile section 360px 2023-11-08 17:40:45 +03:00
ec8ede8e28 0.0.207 small upd 2023-11-08 16:06:15 +03:00
6131d2534a 0.0.206 add media 360px for create_route, my_routes 2023-11-08 16:03:32 +03:00
775ffe42d7 0.0.205 Boris, please read my comments in 2 files 2023-11-08 13:51:13 +03:00
400621572f 0.0.339 2023-11-07 17:08:44 +03:00
fe4539c9ed 0.0.338 2023-11-07 14:56:00 +03:00
a19017351b 0.0.337 2023-11-07 14:18:25 +03:00
e1a6fdd21f 0.0.336 2023-11-07 13:17:42 +03:00
264c5ae372 0.0.335 2023-11-07 12:54:23 +03:00
0a00e950b6 0.0.334 2023-11-06 17:32:00 +03:00
b12f2e784f 0.0.333 2023-11-06 16:41:48 +03:00
bc170e982f 0.0.332 2023-11-06 16:40:29 +03:00
c68c7b6109 0.0.331 2023-11-06 16:31:07 +03:00
ac95ac04bc 0.0.330 2023-11-06 16:23:53 +03:00
a23ccb7ac4 0.0.329 2023-11-06 15:58:49 +03:00
09c74d8f85 0.0.328 2023-11-06 15:01:04 +03:00
4c747a0c5e 0.0.204 2023-11-06 14:51:20 +03:00
3aa4b774bd 0.0.327 2023-11-06 14:10:17 +03:00
93cf3aa695 0.0.203 2023-11-06 13:46:32 +03:00
e75dd6c552 0.0.326 2023-11-06 13:03:14 +03:00
6ea03098b2 Merge remote-tracking branch 'origin/main' 2023-11-06 13:00:47 +03:00
2cef14d2d8 0.0.202 2023-11-06 13:00:41 +03:00
b7b6750ad2 0.0.325 2023-11-06 12:59:44 +03:00
a729070654 0.0.201 2023-11-06 12:36:46 +03:00
af42956f60 Merge remote-tracking branch 'origin/main' 2023-11-05 21:56:44 +03:00
ad8518a4c3 0.0.200 fix interlace 2023-11-05 21:56:38 +03:00
SDE
1c1867610d 0.7.76
unread chat message markers fix
2023-11-05 21:51:47 +03:00
SDE
8c3ebb00e5 0.7.75
unread chat message markers fix
2023-11-05 21:49:41 +03:00
abba3e6e10 0.0.325 2023-11-05 19:17:30 +03:00
058fe769b9 0.0.324 2023-11-05 19:15:41 +03:00
4b037443a6 0.0.323 2023-11-05 19:04:34 +03:00
28db905e14 0.0.322 2023-11-05 18:55:48 +03:00
SDE
41d7a996fd 0.7.74
profile curtain reformat
2023-11-05 18:51:05 +03:00
SDE
114a65746c 0.7.73
profile curtain reformat
2023-11-05 18:48:58 +03:00
6dd0cf7724 0.0.321 2023-11-05 17:56:34 +03:00
8e5a018c2a 0.0.320 2023-11-05 17:49:38 +03:00
052f236206 0.0.319 2023-11-05 17:20:40 +03:00
da3774527f Merge remote-tracking branch 'origin/main' 2023-11-05 14:20:54 +03:00
93401402ca 0.0.318 2023-11-05 14:20:43 +03:00
c1ea4788a4 0.0.199 small upd for my_routes 2023-11-03 18:27:44 +03:00
b32a79f966 0.0.198 media 360px all static page 2023-11-03 14:55:44 +03:00
cd748dc371 0.0.317 2023-11-02 17:58:35 +03:00
defce7a85c 0.0.316 2023-11-02 17:53:51 +03:00
63d5b62229 0.0.315 2023-11-02 17:45:18 +03:00
1acda2bb11 0.0.314 2023-11-02 17:25:31 +03:00
db8f5e16e3 0.0.313 2023-11-02 17:24:12 +03:00
c5c8fb8689 0.0.197 media 360px for user_profile v2 2023-11-02 17:23:57 +03:00
b11478b4c0 0.0.196 media 360px for user_profile v1 2023-11-02 16:47:54 +03:00
26463c1853 Merge remote-tracking branch 'origin/main' 2023-11-02 15:35:12 +03:00
b0b6513bb7 0.0.195 media 360px for user_profile 2023-11-02 15:35:05 +03:00
0c6135d786 0.0.312 2023-11-02 14:04:29 +03:00
0167baec84 0.0.311 2023-11-02 13:54:46 +03:00
cb5ab935ee 0.0.310 2023-11-02 13:44:13 +03:00
96efd045b4 0.0.194 add header width 100% v2 2023-11-02 13:14:25 +03:00
e1846e0564 0.0.193 add header width 100% 2023-11-02 13:09:44 +03:00
ed809290ca 0.0.192 media 360px for_customers page 2023-11-01 17:41:44 +03:00
0b2b9e184f 0.0.191 media 360px login and registration pages 2023-11-01 16:06:04 +03:00
4dd32820a3 0.0.190 media 360px header for not user 2023-11-01 15:13:13 +03:00
ffa6de7138 0.0.189 media 360px header for not user 2023-11-01 15:10:21 +03:00
189b9233ab 0.0.309 2023-10-31 22:07:27 +03:00
8c05b987ed 0.0.308 2023-10-31 21:10:34 +03:00
ed00864447 0.0.188 media 360px main 2023-10-31 17:46:07 +03:00
ad9e6aa6b9 0.0.187 media 360px footer 2023-10-31 17:20:01 +03:00
04daddefa7 0.0.186 small changes in footer 2023-10-31 09:58:19 +03:00
acf51fe626 0.0.307 2023-10-30 23:52:22 +03:00
9d44384d22 0.0.306 2023-10-30 15:06:24 +03:00
a435e85d4c 0.0.305 2023-10-30 09:30:29 +03:00
c6edd2c533 0.0.304 2023-10-29 22:20:02 +03:00
928c737ead 0.0.303 2023-10-27 19:07:25 +03:00
794d30ebf1 0.0.302 2023-10-27 18:17:12 +03:00
0864a07cdf 0.0.301 2023-10-27 18:02:18 +03:00
b64f58c237 0.0.300 2023-10-27 17:59:21 +03:00
cc86400957 Merge remote-tracking branch 'origin/main'
# Conflicts:
#	static/js/user_profile.js
2023-10-27 17:21:28 +03:00
b8c282f95f 0.0.299 2023-10-27 17:19:40 +03:00
47e39a1d9c 0.0.185 media 360px v.3.3 2023-10-26 17:27:03 +03:00
308e9c1df2 0.0.184 media 360px v.3.2 2023-10-26 16:43:10 +03:00
d3fd7b7428 0.0.183 media 360px v.3.1 2023-10-26 16:26:29 +03:00
31833000bb 0.0.182 media 360px v.3 2023-10-26 13:11:51 +03:00
02f7edade5 0.0.298 2023-10-25 16:27:08 +03:00
371457735a 0.0.297 2023-10-25 13:55:25 +03:00
ea65d62be8 0.0.181 media 320px v.2.1 2023-10-24 17:44:19 +03:00
d1b8a7a4aa 0.0.180 media 320px v.2 2023-10-24 16:46:11 +03:00
9b94b56c6e 0.0.179 media 320px v.2 2023-10-24 16:42:00 +03:00
e07cf3f9d6 0.0.178 media 320px v.1 2023-10-23 19:34:16 +03:00
906856b01b 0.0.296 2023-10-22 17:46:04 +03:00
SDE
4ac3349377 0.7.71
chat avatars
2023-10-22 17:42:21 +03:00
SDE
3a9b421503 0.7.70
chat avatars
2023-10-22 17:34:33 +03:00
SDE
c844389f09 0.7.69
profile change
2023-10-22 17:12:01 +03:00
SDE
444f23f9b2 0.7.68
profile change
2023-10-22 16:52:32 +03:00
721f2916cd Merge remote-tracking branch 'origin/main' 2023-10-22 16:51:21 +03:00
5d707853b7 0.0.295 2023-10-22 16:50:58 +03:00
SDE
19621752b5 0.7.67
profile change
2023-10-22 16:46:25 +03:00
SDE
f0e8cb5101 0.7.66
profile change photo
2023-10-22 14:53:32 +03:00
ac2de4ddcc 0.0.294 2023-10-22 14:51:47 +03:00
5471696d62 0.0.293 2023-10-22 14:35:23 +03:00
SDE
adee3383ce 0.7.65
profile change photo
2023-10-22 14:21:18 +03:00
SDE
0ab9631e0f Merge remote-tracking branch 'origin/main' 2023-10-22 14:18:35 +03:00
SDE
cc377963e0 0.7.64
profile change photo
2023-10-22 14:18:22 +03:00
5c22478108 0.0.292 2023-10-22 14:13:06 +03:00
51598dc022 0.0.291 2023-10-22 13:52:44 +03:00
f620cd26af 0.0.290 2023-10-22 13:46:56 +03:00
1f3a8a258b 0.0.289 2023-10-22 13:41:12 +03:00
SDE
19983bf7a1 Merge remote-tracking branch 'origin/main' 2023-10-22 13:04:21 +03:00
SDE
47ffae4b82 0.7.63
user_subscribe in all views
2023-10-22 13:04:05 +03:00
487647029a 0.0.288
add profile page
2023-10-21 23:42:19 +03:00
SDE
89ee4960c2 0.7.62
user_subscribe in all views
2023-10-20 21:43:43 +03:00
9c95358305 0.0.286 2023-10-20 21:40:27 +03:00
SDE
71c4ce41f0 0.7.61
user_subscribe in all views
2023-10-20 20:07:11 +03:00
f60c96e9fd 0.0.177 upd header 2023-10-19 14:46:08 +03:00
9ec605bed1 0.0.176 upd header 2023-10-19 14:27:20 +03:00
6ac082c7df 0.0.175 upd header 2023-10-19 09:50:12 +03:00
f552d6c0f2 0.0.174 change width in .header_big_background 2023-10-19 09:27:32 +03:00
52c65f598d 0.0.285 2023-10-18 18:05:55 +03:00
9b12ca8ff3 0.0.284 2023-10-18 17:37:45 +03:00
31ba8a86bf 0.0.283 2023-10-18 17:36:55 +03:00
fe90ab8f50 0.0.282 2023-10-18 17:17:03 +03:00
58acad0eb8 0.0.281 2023-10-18 17:00:14 +03:00
3ce22bcb32 0.0.173 upd style.css for header, add switcher for languages 2023-10-18 16:16:45 +03:00
SDE
71846ade42 0.7.60
localization for ajax
2023-10-18 13:30:48 +03:00
SDE
9c24034776 0.7.59
localization for ajax
2023-10-18 12:06:17 +03:00
735a84bf9a 0.0.280 2023-10-06 18:50:41 +03:00
SDE
b65a668e77 0.7.58
articles paging
2023-10-06 18:49:40 +03:00
SDE
ac2b1e43df 0.7.57
articles paging
2023-10-06 18:42:08 +03:00
SDE
63cea80a20 0.7.56
articles paging
2023-10-06 18:05:26 +03:00
67a51c882a 0.0.279 2023-10-06 18:00:54 +03:00
21b873c80d 0.0.172 2023-10-05 19:46:53 +03:00
SDE
c86ebc7aa3 0.7.55
articles paging
2023-10-05 19:46:02 +03:00
SDE
32f65de458 0.7.54
articles paging
2023-10-05 19:42:13 +03:00
63d3ffddd4 0.0.278 2023-10-05 19:38:56 +03:00
70f6ccc0da 0.0.277 2023-10-05 19:37:05 +03:00
5fa470bd9c 0.0.276 2023-10-05 19:29:12 +03:00
SDE
01414ca4c6 Merge remote-tracking branch 'origin/main' 2023-10-05 19:28:05 +03:00
SDE
c781453055 0.7.53
articles page
2023-10-05 19:27:57 +03:00
8b4b06c0f7 Merge remote-tracking branch 'origin/main' 2023-10-05 19:27:15 +03:00
0737446ea1 0.0.172 2023-10-05 19:27:07 +03:00
SDE
5f71eb5e0b Merge remote-tracking branch 'origin/main'
# Conflicts:
#	templates/pages/p_articles.html
2023-10-05 19:22:10 +03:00
SDE
b89b9ed017 0.7.52
articles page
2023-10-05 19:21:27 +03:00
0df3067416 0.0.172 2023-10-05 19:12:36 +03:00
f850ef5c31 0.0.171 2023-10-05 19:02:06 +03:00
a520c3872a 0.0.275 2023-10-05 19:00:02 +03:00
16c32ebdfb 0.0.170 add button for pagination in news 2023-10-05 18:55:50 +03:00
b0640e88f9 0.0.169 add position fixed for HEADER 2023-10-05 18:20:36 +03:00
6121b6ceb1 0.0.168 add 2 block in static pages 2023-10-03 18:21:12 +03:00
2d865d9c3d 0.0.167 small upgrade for static pages 2023-10-03 17:39:50 +03:00
95f92efa70 0.0.166 change input type from select to radio for checkbox_cargo_type 2023-10-03 16:57:13 +03:00
SDE
840a61511e 0.7.51
articles breadcrumbs
2023-10-03 15:53:08 +03:00
a1ed21cd17 0.0.165 upd style for a teg for news 2023-10-03 15:19:36 +03:00
c2b9b0c85b 0.0.165 a teg for news 2023-10-03 15:14:53 +03:00
2cc45c7efc 0.0.164 add article news 2023-10-03 13:41:01 +03:00
6dfc41fc0d 0.0.163 upd news page 2023-10-02 15:37:34 +03:00
f421e31de1 0.0.162 style for public pages 2023-10-01 15:48:14 +03:00
53c5b2b53e 0.0.161 upd footer max-width 2023-10-01 13:51:32 +03:00
c024b74f5b 0.0.160 upd tab on main page 2023-10-01 13:36:35 +03:00
598bcaaea4 0.0.274 2023-09-30 14:41:51 +03:00
571c0d08e0 0.0.273 2023-09-27 17:00:24 +03:00
a56c8c2609 Merge remote-tracking branch 'origin/main' 2023-09-26 17:17:42 +03:00
724c450120 0.0.159 upd footer 2023-09-26 17:17:33 +03:00
SDE
1794911d27 0.7.50
i18n localization problem test
2023-09-26 16:33:47 +03:00
01c7b01c55 Merge remote-tracking branch 'origin/main' 2023-09-26 15:42:26 +03:00
4bf5488d79 0.0.158 2023-09-26 15:42:21 +03:00
9d2b523f29 0.0.272
sorry
2023-09-26 15:19:35 +03:00
SDE
9eb079c5bc 0.7.49
i18n makemessages
2023-09-26 14:36:27 +03:00
fc8c28203c 0.0.157 rewrite some css 2023-09-26 14:19:34 +03:00
SDE
a03d9b3dec 0.7.48
i18n makemessages
2023-09-26 12:06:46 +03:00
SDE
641e3da1d0 Merge remote-tracking branch 'origin/main' 2023-09-26 12:05:41 +03:00
SDE
15b2110617 0.7.48
i18n makemessages
2023-09-26 12:05:31 +03:00
SDE
7a8f3bdbb5 0.7.47
fix admin base models
2023-09-26 11:26:10 +03:00
65c90e1f11 0.0.271 2023-09-25 16:36:57 +03:00
dd7795d845 0.0.156 disabled from 87 to 92 line 2023-09-24 18:00:46 +03:00
5af924556e 0.0.155 upd select css 2023-09-24 17:50:11 +03:00
775 changed files with 61058 additions and 3682 deletions

4
.gitignore vendored
View File

@@ -415,3 +415,7 @@ fabric.properties
# Android studio 3.1+ serialized cache file # Android studio 3.1+ serialized cache file
.idea/caches/build_file_checksums.ser .idea/caches/build_file_checksums.ser
# packages for node
package.json
package-lock.json

View File

@@ -1,8 +1,6 @@
## -*- coding: utf8 -*- # -*- coding: utf-8 -*-
__author__ = 'SDE'
from django.contrib import admin from django.contrib import admin
from django.utils.translation import gettext_lazy as _
from ArticlesApp.models import ArticleModel, UserPageModel from ArticlesApp.models import ArticleModel, UserPageModel
from sets.admin import * from sets.admin import *
@@ -18,7 +16,7 @@ from sets.admin import *
# #
# #
# }), # }),
# (u'Управление отображением страницы', { # ('Управление отображением страницы', {
# 'classes': ['wide'], # 'classes': ['wide'],
# 'fields': ( # 'fields': (
# # ('serviceBlockStateShow'), # # ('serviceBlockStateShow'),
@@ -70,7 +68,7 @@ class Admin_Article(Admin_Trans_BaseModelViewPage):
# ('devices'), # ('devices'),
) )
}), }),
(u'Статья', { (_('Статья'), {
'classes': ['wide'], 'classes': ['wide'],
'fields': ( 'fields': (
'description', 'text', 'description', 'text',
@@ -116,7 +114,7 @@ class Admin_UserPage(Admin_Trans_BaseModelViewPage):
# ('devices'), # ('devices'),
) )
}), }),
(u'Статья', { (_('Статья'), {
'classes': ['wide'], 'classes': ['wide'],
'fields': ('picture', 'description', 'text') 'fields': ('picture', 'description', 'text')
}), }),
@@ -151,7 +149,7 @@ class Admin_UserPage(Admin_Trans_BaseModelViewPage):
if request.user.is_superuser: if request.user.is_superuser:
return True return True
if obj and obj.url in ('for-partners', 'dealers', 'about-truenergy', 'contacts'): if obj and obj.url in ('for-partners', 'dealers', 'contacts'):
return False return False
return True return True

45
ArticlesApp/funcs.py Normal file
View File

@@ -0,0 +1,45 @@
from .models import *
elements_on_page = 10
def get_articles(art_kwargs, request_Data=None, from_el=None, to_el=None):
if request_Data:
if not from_el and 'from_el' in request_Data:
from_el = request_Data['from_el']
if not to_el and 'to_el' in request_Data:
to_el = request_Data['to_el']
arts = ArticleModel.objects.filter(**art_kwargs).order_by('-createDT')
el_count = arts.count()
if from_el and to_el:
arts = arts[from_el:to_el]
elif from_el:
arts = arts[from_el:]
elif to_el:
arts = arts[:to_el]
else:
to_el = elements_on_page
arts = arts[:to_el]
last_block = False
if not to_el or to_el >= el_count:
last_block = True
if el_count - to_el > elements_on_page:
next_page_els_count = elements_on_page
else:
next_page_els_count = el_count - to_el
Dict = {
'articles': arts,
'last_block': last_block,
'last_el': to_el,
'next_page_els_count': next_page_els_count,
'elements_on_page': elements_on_page
}
return Dict

10
ArticlesApp/js_urls.py Normal file
View File

@@ -0,0 +1,10 @@
# coding=utf-8
from django.urls import path
# from AuthApp.js_views import *
# from AuthApp.import_funcs import *
from .js_views import *
urlpatterns = [
path('get_articles_block/', get_articles_block_ajax, name='get_articles_block_ajax'),
]

61
ArticlesApp/js_views.py Normal file
View File

@@ -0,0 +1,61 @@
import json
from django.shortcuts import render
from uuid import uuid1
from .models import *
from django.contrib import auth
from django.http import HttpResponse, Http404, JsonResponse
from django.template import loader, RequestContext
from django.contrib.auth.decorators import login_required
from BaseModels.mailSender import techSendMail
from django.utils.translation import gettext as _
from datetime import datetime
from django.template.loader import render_to_string
from django.urls import reverse
# from .forms import *
from .funcs import *
def get_articles_block_ajax(request):
if request.method != 'POST':
raise Http404
from GeneralApp.funcs import get_and_set_lang
lang = get_and_set_lang(request)
try:
data = request.POST.dict()
if not data and request.body:
data = json.loads(request.body)
art_kwargs = {}
Dict = get_articles(art_kwargs=art_kwargs, request_Data=data)
if 'errors' in Dict:
return JsonResponse(Dict, status=400)
html = render_to_string('blocks/articles/b_news_elements.html', Dict, request=request)
res_Dict = {
'html': html,
'last_block': Dict['last_block'],
'next_page_els_count': Dict['next_page_els_count'],
# 'form': RouteForm(initial=data)
}
from GeneralApp.funcs import get_add_to_ajax_response_Dict
res_Dict.update(get_add_to_ajax_response_Dict(request.user))
return JsonResponse(res_Dict)
except Exception as e:
errors_Dict = {
'errors': {
'all__': f'{_("ошибка в запросе")} = {str(e)}'
}
}
return JsonResponse(errors_Dict, status=400)

View File

@@ -1,4 +1,4 @@
# -*- coding: utf8 -*- # -*- coding: utf-8 -*-
__author__ = 'sync' __author__ = 'sync'
@@ -19,11 +19,11 @@ from django.utils.translation import gettext_lazy as _
class UserPageModel(BaseModelViewPage): class UserPageModel(BaseModelViewPage):
# pub_DT = models.DateTimeField(verbose_name=u'Дата и время публикации', auto_created=True) # pub_DT = models.DateTimeField(verbose_name=u'Дата и время публикации', auto_created=True)
text = RichTextUploadingField(verbose_name=u'Текст') text = RichTextUploadingField(verbose_name=_('Текст'))
class Meta: class Meta:
verbose_name=u'Пользовательская страница' verbose_name=_("Пользовательская страница")
verbose_name_plural =u'Пользовательские страницы' verbose_name_plural =_("Пользовательские страницы")
# unique_together = ('url', 'region') # unique_together = ('url', 'region')
# managed=True # managed=True
# app_label = u'ArticlesApp' # app_label = u'ArticlesApp'
@@ -31,8 +31,8 @@ class UserPageModel(BaseModelViewPage):
class ArticleModel(BaseModelViewPage): class ArticleModel(BaseModelViewPage):
# pub_DT = models.DateTimeField(verbose_name=u'Дата и время публикации', auto_created=True) # pub_DT = models.DateTimeField(verbose_name=u'Дата и время публикации', auto_created=True)
text = RichTextUploadingField(verbose_name=u'Текст') text = RichTextUploadingField(verbose_name=_("Текст"))
class Meta: class Meta:
verbose_name='Статья' verbose_name=_("Статья")
verbose_name_plural ='Статьи' verbose_name_plural =_("Статьи")

View File

@@ -0,0 +1 @@
__author__ = 'SDE'

View File

@@ -0,0 +1,48 @@
__author__ = 'SDE'
from django import template
from django.template.defaultfilters import stringfilter
register = template.Library()
# @register.filter('get_side_art')
@register.simple_tag
def get_side_art(last_el, counter, els_on_page):
cur_el = last_el - els_on_page + counter
if els_on_page < 4:
first_left_el = els_on_page + 1
else:
first_left_el = 4
if (cur_el - first_left_el) % 2:
return 'even'
else:
return 'odd'
# @register.filter()
# def get_numbers_list(from_el, to_el):
# res = range(from_el, to_el+1)
# return res
#
#
# def val_type(value):
# res = type(value)
# return res.__name__
# register.filter('val_type', val_type)
#
# @register.filter()
# def get_cols_table_data_for_row_when_cols3(value, row):
# el_count = 3
# from_el = (row-1) * el_count
# to_el = row * el_count
# part = list(value)[from_el:to_el]
# return part
# # register.filter('val_type', val_type)
#
#
# @register.filter
# @stringfilter
# def correct_for_tables(value):
# if value in ['None', '0.0']:
# return '-'
# return value

View File

@@ -1,10 +1,13 @@
# -*- coding: utf8 -*- # -*- coding: utf-8 -*-
from .models import * from .models import *
from datetime import datetime, date from datetime import datetime, date
from django.http import Http404, HttpResponse from django.http import Http404, HttpResponse
from django.template import loader from django.template import loader
from .funcs import *
from GeneralApp.funcs import get_inter_http_response
from django.utils.translation import gettext_lazy as _
# from django.contrib.auth.decorators import login_required # from django.contrib.auth.decorators import login_required
# from BaseModels.search_optimization.ld_json.ld_article_news import get_ld_article_news # from BaseModels.search_optimization.ld_json.ld_article_news import get_ld_article_news
@@ -15,7 +18,7 @@ from django.template import loader
def get_flat_pages_links_Dict(site): def get_flat_pages_links_Dict(site):
flat_pages_links = UserPageModel.objects.filter( flat_pages_links = UserPageModel.objects.filter(
url__in=('about-truenergy', 'for-partners', 'contacts'), url__in=('for-partners', 'contacts'),
sites=site sites=site
).values_list('url', flat=True) ).values_list('url', flat=True)
@@ -25,21 +28,25 @@ def get_flat_pages_links_Dict(site):
def get_article_breadcrumbs(request, art): def get_article_breadcrumbs(request, art):
# print('get_article_breadcrumbs') # print('get_article_breadcrumbs')
half_count = art.articlesCountInBlock / 2 articles_add_count = 3
# half_count = articlesCountInBlock / 2
art_List = ArticleModel.objects.filter(enable=True, article_DT__gte=art.article_DT).order_by( # arts_top = ArticleModel.objects.filter(enable=True, createDT__gt=art.createDT).order_by(
'article_DT')[:half_count] # 'createDT')[:articles_add_count]
artListDown = ArticleModel.objects.filter(enable=True, article_DT__lt=art.article_DT).order_by( # arts_down = ArticleModel.objects.filter(enable=True, createDT__lt=art.createDT).order_by(
'-article_DT')[:art.articlesCountInBlock-len(art_List)] # '-createDT')[:articles_add_count]
if len(artListDown)<half_count: # if len(artListDown)<half_count:
art_List = ArticleModel.objects.filter(enable=True, article_DT__gte=art.article_DT).order_by( # art_List = ArticleModel.objects.filter(enable=True, article_DT__gte=art.article_DT).order_by(
'article_DT')[:art.articlesCountInBlock-len(artListDown)] # 'article_DT')[:art.articlesCountInBlock-len(artListDown)]
art_List = list(art_List) breadcrumbs_arts = ArticleModel.objects.exclude(id=art.id).order_by('?')[:3]
art_List.reverse()
artlist = art_List + list(artListDown) Dict = {
# print('artlist',artlist) 'breadcrumbs_arts': breadcrumbs_arts
return artlist # 'arts_top': arts_top,
# 'arts_down': arts_down
}
return Dict
def get_user_pages_breadcrumbs(request, art): def get_user_pages_breadcrumbs(request, art):
@@ -75,14 +82,18 @@ def ArticlesPageView(request, year=None):
raise Http404 raise Http404
arts = ArticleModel.objects.filter(**kwargs).order_by('-createDT') Dict = get_articles(art_kwargs=kwargs)
Dict.update({
Dict = { 'page': {
'articles': arts 'title': _('Новости сервиса доставки посылок | TripWB'),
} 'description': _('Обновления, полезные статьи и свежие новости от TripWB ✓ Актуальные новости в мире доставок по всему СНГ ➡️ Следите за нашими новостями'),
'keywords': _('Все новости сайта tripwb.com'),
}
})
t = loader.get_template('pages/p_articles.html') t = loader.get_template('pages/p_articles.html')
return HttpResponse(t.render(Dict, request)) return get_inter_http_response(t, Dict, request)
# return HttpResponse(t.render(Dict, request))
@@ -105,7 +116,7 @@ def UserPageView(request, page_url):
# print('article_breadcrumbs',article_breadcrumbs) # print('article_breadcrumbs',article_breadcrumbs)
Dict = { Dict = {
'art' : art, 'page' : art,
'user_page' : True, 'user_page' : True,
# 'service' : service, # 'service' : service,
# 'article_breadcrumbs' : article_breadcrumbs # 'article_breadcrumbs' : article_breadcrumbs
@@ -114,7 +125,8 @@ def UserPageView(request, page_url):
t = loader.get_template('pages/p_user_page.html') t = loader.get_template('pages/p_user_page.html')
return HttpResponse(t.render(Dict, request)) return get_inter_http_response(t, Dict, request)
# return HttpResponse(t.render(Dict, request))
@@ -131,15 +143,17 @@ def ArticlesOnePageView(request, art_url):
raise Http404 raise Http404
# article_breadcrumbs = get_article_breadcrumbs(request, art)
# print('article_breadcrumbs',article_breadcrumbs) # print('article_breadcrumbs',article_breadcrumbs)
Dict = { Dict = {
'art' : art, 'page' : art,
# 'article_breadcrumbs' : article_breadcrumbs
} }
Dict.update(get_article_breadcrumbs(request, art))
t = loader.get_template('pages/p_article.html') t = loader.get_template('pages/p_article.html')
return HttpResponse(t.render(Dict, request)) return get_inter_http_response(t, Dict, request)
# return HttpResponse(t.render(Dict, request))

View File

@@ -39,16 +39,18 @@ class Admin_ProfileInline(admin.StackedInline):
(None, { (None, {
'classes': ['wide'], 'classes': ['wide'],
'fields': ( 'fields': (
('account_type',), # ('account_type',),
('enable',), ('enable',),
('avatar',),
('phone',), ('phone',),
('country', 'city'), ('country', 'city'),
('mailing_on', ),
('authMailCode',), ('authMailCode',),
('birthdate'), ('birthdate'),
'comment', 'creator' 'comment', 'creator'
) )
}), }),
('Дополнительно', { (_('Дополнительно'), {
'classes': ['wide'], 'classes': ['wide'],
'fields': ( 'fields': (
('json_data',) ('json_data',)
@@ -71,6 +73,10 @@ class Admin_ProfileInline(admin.StackedInline):
class Admin_User(UserAdmin): class Admin_User(UserAdmin):
def mailing_on(self, obj):
return obj.user_profile.mailing_on
mailing_on.boolean = True
fieldsets = ( fieldsets = (
(None, { (None, {
'classes': ['wide'], 'classes': ['wide'],
@@ -91,61 +97,65 @@ class Admin_User(UserAdmin):
save_on_top = True save_on_top = True
list_display = ['id', 'last_name', 'first_name', 'email', 'is_staff', list_display = ['id', 'last_name', 'first_name', 'mailing_on', 'email', 'is_staff',
'is_active'] 'is_active', 'date_joined', 'last_login']
list_editable = ['is_staff', 'is_active'] list_editable = ['is_staff', 'is_active']
list_display_links = ['first_name', 'last_name', 'email'] list_display_links = ['first_name', 'last_name', 'email']
search_fields = ['first_name', 'last_name', 'email'] search_fields = ['first_name', 'last_name', 'email']
readonly_fields = ['date_joined', 'last_login']
list_filter = ['user_profile__mailing_on', 'is_staff', 'is_active', 'date_joined', 'last_login']
inlines = (Admin_ProfileInline,) inlines = (Admin_ProfileInline,)
# actions = ['del_all_temp_users', ] # actions = ['del_all_temp_users', ]
ordering = ['is_staff', 'last_name', 'first_name'] ordering = ['is_staff', '-id', 'last_name', 'first_name']
# Re-register UserAdmin # Re-register UserAdmin
admin.site.unregister(User) admin.site.unregister(User)
admin.site.register(User, Admin_User) admin.site.register(User, Admin_User)
class Admin_UserProfile(Admin_BaseIconModel): # class Admin_UserProfile(Admin_BaseIconModel):
#
fieldsets = ( # fieldsets = (
(None, { # (None, {
'classes': ['wide'], # 'classes': ['wide'],
'fields': ( # 'fields': (
'user', 'enable', # 'user', 'enable',
('account_type',), # ('account_type',),
('phone',), # ('phone',),
('country', 'city'), # ('country', 'city'),
('authMailCode',), # ('authMailCode',),
('birthdate'), # ('birthdate'),
'creator' # 'creator'
) # )
}), # }),
('1С', { # ('1С', {
'classes': ['wide'], # 'classes': ['wide'],
'fields': ( # 'fields': (
('name',), # ('name',),
) # )
}), # }),
) # )
#
save_on_top = True # save_on_top = True
#
list_display = [ # list_display = [
'id', 'user', 'enable', 'birthdate', 'modifiedDT', 'createDT' # 'id', 'user', 'enable', 'birthdate', 'modifiedDT', 'createDT'
] # ]
list_editable = ['enable', 'birthdate'] # list_editable = ['enable', 'birthdate']
list_display_links = ['id', ] # 'user__last_name', 'user__first_name'] # list_display_links = ['id', ] # 'user__last_name', 'user__first_name']
search_fields = [ # search_fields = [
'id', 'user__last_name', 'user__first_name', 'user__email', # 'id', 'user__last_name', 'user__first_name', 'user__email',
] # ]
#
list_filter = ['enable', 'account_type'] # list_filter = ['enable', 'account_type']
#
# filter_horizontal = ['connected_mailings'] # # filter_horizontal = ['connected_mailings']
# raw_id_fields = ("favourites",) # # raw_id_fields = ("favourites",)
verbose_name_plural = _(u'Профиль пользователя') # verbose_name_plural = _(u'Профиль пользователя')
#
#
admin.site.register(UserProfile, Admin_UserProfile) # admin.site.register(UserProfile, Admin_UserProfile)

View File

@@ -14,17 +14,78 @@ class LoginForm(forms.Form):
username = forms.CharField(required=True) username = forms.CharField(required=True)
password = forms.CharField(required=True) password = forms.CharField(required=True)
class RegistrationForm(forms.Form): class RegistrationForm(forms.Form):
from .models import account_type_choices from .models import account_type_choices
account_type = forms.ChoiceField(choices=account_type_choices, initial='sender', required=True) # account_type = forms.ChoiceField(choices=account_type_choices, initial='sender', required=True)
firstname = forms.CharField(required=False) firstname = forms.CharField(required=False)
lastname = forms.CharField(required=False) lastname = forms.CharField(required=False)
country = forms.CharField(required=False)
city = forms.CharField(required=False)
email = forms.EmailField() email = forms.EmailField()
password = forms.CharField(widget=forms.PasswordInput()) password = forms.CharField(widget=forms.PasswordInput())
confirm_password = forms.CharField(widget=forms.PasswordInput()) confirm_password = forms.CharField(widget=forms.PasswordInput())
tel = forms.CharField() tel = forms.CharField(required=False)
agreement = forms.BooleanField(initial=False, required=True) agreement = forms.BooleanField(initial=False, required=True)
def __init__(self, *args, **kwargs):
required_password = True
required_agreement = True
required_email = True
create_new_account = True
if 'not_required_password' in kwargs.keys() and kwargs['not_required_password']:
required_password = False
del kwargs['not_required_password']
if 'not_required_agreement' in kwargs.keys() and kwargs['not_required_agreement']:
required_agreement = False
del kwargs['not_required_agreement']
if 'not_required_email' in kwargs.keys() and kwargs['not_required_email']:
required_email = False
del kwargs['not_required_email']
if 'create_new_account' in kwargs.keys() and not kwargs['create_new_account']:
create_new_account = False
del kwargs['create_new_account']
super(RegistrationForm, self).__init__(*args, **kwargs)
self.fields['password'].required = required_password
self.fields['confirm_password'].required = required_password
self.fields['agreement'].required = required_agreement
self.fields['email'].required = required_email
self.create_new_account = create_new_account
def clean(self):
cleaned_data = super().clean()
# i = 0
# names = list(cleaned_data.keys())
# while i < len(names):
# if not cleaned_data[names[i]]:
# if self.fields[names[i]].required:
# self.add_error(names[i], _('Обязательное поле'))
# i += 1
if 'tel' in cleaned_data and 'tel' in cleaned_data:
from BaseModels.validators.form_field_validators import get_phone_valid_error
error = get_phone_valid_error(cleaned_data["tel"])
if error:
self.add_error('tel', error)
if cleaned_data and 'confirm_password' in cleaned_data and 'password' in cleaned_data:
if cleaned_data['confirm_password'] != cleaned_data['password']:
self.add_error("password", _('Пароль и подтверждение пароля не совпадают'))
self.add_error("confirm_password", _('Пароль и подтверждение пароля не совпадают'))
if self.create_new_account and cleaned_data and 'email' in cleaned_data:
users = User.objects.filter(email=cleaned_data['email'])
if users:
self.add_error('email', _("Пользователь с указанным email уже существует"))
# # class PersonForm(NgModelFormMixin, NgFormValidationMixin, NgModelForm, Bootstrap3ModelForm): # # class PersonForm(NgModelFormMixin, NgFormValidationMixin, NgModelForm, Bootstrap3ModelForm):
# # # #

View File

@@ -1,32 +1,99 @@
from django.http import QueryDict
from django.template.loader import render_to_string from django.template.loader import render_to_string
from SubscribesApp.funcs import check_option_in_cur_user_subscribe
def get_user_timezone_Dict(user, request=None):
tz = None
if request:
tz = request.COOKIES.get("user_tz")
if not tz and user.is_authenticated:
tz = user.user_profile.get_timezone()
if not tz:
from django.conf import settings
tz = settings.TIME_ZONE
return {'user_tz': tz}
def get_dashboard_page_content_html(request):
from ChatServiceApp.funcs import get_unanswered_msgs_count_for_user
Dict = {
'unanswered_msgs_count': get_unanswered_msgs_count_for_user(request.user)
}
html = render_to_string('blocks/profile/b_profile_first_page.html', Dict, request=request)
return html
def get_profile_page_content_html(request, page_name, data): def get_profile_page_content_html(request, page_name, data):
if page_name == 'chat': if page_name == 'chat':
from ChatServiceApp.funcs import get_chat_page_content_html from ChatServiceApp.funcs import get_chat_page_content_html
return get_chat_page_content_html(request, data) return get_chat_page_content_html(request, data)
elif page_name == 'create_route_for_customer': elif (page_name == 'create_route_for_customer' and
check_option_in_cur_user_subscribe(request.user, 'размещение заявок')):
from RoutesApp.funcs import get_profile_new_route_page_html from RoutesApp.funcs import get_profile_new_route_page_html
return get_profile_new_route_page_html(request, {}) return get_profile_new_route_page_html(request, {'owner_type': 'customer'})
elif page_name == 'create_route_for_mover': elif (page_name == 'create_route_for_mover' and
check_option_in_cur_user_subscribe(request.user, 'размещение заявок')):
from RoutesApp.funcs import get_profile_new_route_page_html from RoutesApp.funcs import get_profile_new_route_page_html
return get_profile_new_route_page_html(request, {}) return get_profile_new_route_page_html(request, {'owner_type': 'mover'})
elif page_name == 'my_routes': elif page_name == 'my_routes':
from RoutesApp.funcs import get_profile_my_routes_page_content_html from RoutesApp.funcs import get_profile_my_routes_page_content_html
return get_profile_my_routes_page_content_html(request) return get_profile_my_routes_page_content_html(request)
elif page_name == 'support': elif page_name == 'support':
return get_profile_support_page_content_html(request, data) return get_profile_support_page_content_html(request, data)
elif page_name == 'my_subscribe': elif page_name == 'my_subscribe':
from SubscribesApp.funcs import get_profile_subscribe_page_content_html from SubscribesApp.funcs import get_profile_subscribe_page_content_Dict
return get_profile_subscribe_page_content_html(request) res = get_profile_subscribe_page_content_Dict(request, check_orders_required=True)
return res['html']
elif page_name == 'change_profile': elif page_name == 'change_profile':
return get_profile_change_page_content_html(request) return get_profile_change_page_content_html(request)
elif page_name == 'dashboard':
return get_dashboard_page_content_html(request)
else: else:
return None return None
def get_profile_change_page_content_html(request): def get_profile_change_page_content_html(request, data=None):
init_Dict = {
'firstname': request.user.first_name,
'lastname': request.user.last_name,
'email': request.user.email,
'tel': request.user.user_profile.phone,
'country': request.user.user_profile.country,
'city': request.user.user_profile.city,
}
if data:
if type(data) == QueryDict:
data = data.dict()
init_Dict.update(data)
# if 'firstname' in data:
# init_Dict.update({'first_name': data['firstname']})
# if 'lastname' in data:
# init_Dict.update({'last_name': data['lastname']})
# if 'email' in data:
# init_Dict.update({'email': data['email']})
# init_Dict.update({'username': data['email']})
# if 'country' in data:
# init_Dict.update({'country': data['country']})
# if 'city' in data:
# init_Dict.update({'city': data['city']})
# if 'tel' in data:
# init_Dict.update({'tel': data['tel']})
from .forms import RegistrationForm
form = RegistrationForm(initial=init_Dict)
from SubscribesApp.funcs import get_cur_user_subscribe
Dict = { Dict = {
'profileForm': form,
'user_subscribe': get_cur_user_subscribe(request.user)
} }
html = render_to_string('blocks/profile/b_profile.html', Dict, request=request) html = render_to_string('blocks/profile/b_profile.html', Dict, request=request)
@@ -47,5 +114,7 @@ def get_profile_support_page_content_html(request, data=None):
} }
tpl_name = 'blocks/profile/b_support_tickets.html' tpl_name = 'blocks/profile/b_support_tickets.html'
Dict.update(get_user_timezone_Dict(request.user, request=request))
html = render_to_string(tpl_name, Dict, request=request) html = render_to_string(tpl_name, Dict, request=request)
return html return html

View File

@@ -14,6 +14,8 @@ urlpatterns = [
path('new_route_view/', new_route_view_ajax, name='new_route_view_ajax'), path('new_route_view/', new_route_view_ajax, name='new_route_view_ajax'),
path('dashboard/', dashboard_ajax, name='dashboard_ajax'),
path('my_routes/', my_routes_ajax, name='my_routes_ajax'), path('my_routes/', my_routes_ajax, name='my_routes_ajax'),
# path('subscribe/', subscribe_ajax, name='subscribe_ajax'), # path('subscribe/', subscribe_ajax, name='subscribe_ajax'),
@@ -21,6 +23,15 @@ urlpatterns = [
path('support_tickets/', support_tickets_ajax, name='support_tickets_ajax'), path('support_tickets/', support_tickets_ajax, name='support_tickets_ajax'),
path('password_recovery/', password_recovery_ajax, name='password_recovery_ajax'),
path('password_recovery_confirm/', password_recovery_confirm_ajax, name='password_recovery_confirm_ajax'),
path('change_profile/', change_profile_ajax, name='change_profile_ajax'), path('change_profile/', change_profile_ajax, name='change_profile_ajax'),
path('change_profile_confirm/', change_profile_confirm_ajax, name='change_profile_confirm_ajax'),
path('change_avatar_confirm/', change_avatar_confirm_ajax, name='change_avatar_confirm_ajax'),
path('send_message/', send_message_ajax, name='send_message_ajax'),
path('mailing_subscribe/', mailing_subscribe_ajax, name='mailing_subscribe_ajax')
] ]

View File

@@ -12,9 +12,15 @@ from datetime import datetime
from django.template.loader import render_to_string from django.template.loader import render_to_string
from django.urls import reverse from django.urls import reverse
from .funcs import * from .funcs import *
from django.core.exceptions import ValidationError
import json
from django.core.files import File
import base64
from django.core.validators import validate_email
from django.urls import reverse
from GeneralApp.funcs import get_and_set_lang
# @login_required()#login_url='/profile/login/')
# @login_required(login_url='/profile/login/')
# def subscribe_ajax(request): # def subscribe_ajax(request):
# if request.method != 'POST': # if request.method != 'POST':
# raise Http404 # raise Http404
@@ -25,11 +31,332 @@ from .funcs import *
# html = render_to_string('blocks/profile/b_subscribe.html', Dict, request=request) # html = render_to_string('blocks/profile/b_subscribe.html', Dict, request=request)
# return JsonResponse({'html': html}, status=200) # return JsonResponse({'html': html}, status=200)
@login_required(login_url='/profile/login/') def password_recovery_confirm_ajax(request):
if request.method != 'POST':
raise Http404
if not 'pass' in request.POST or not 'pass_confirm' in request.POST or not 'user_id' in request.POST:
raise Http404
lang = get_and_set_lang(request)
try:
if not request.POST['pass'] or request.POST['pass'] != request.POST['pass_confirm']:
return JsonResponse({
'status': 'error',
'error': _('Пароли не совпадают')
}, status=400)
user = User.objects.get(id=request.POST['user_id'])
user.set_password(request.POST['pass'])
user.user_profile.authMailCode = None
user.user_profile.save(update_fields=['authMailCode'])
user.is_active = True
user.save()
return JsonResponse({
'status': 'success',
'message': _('Пароль был успешно изменен')
})
except Exception as e:
return JsonResponse({
'status': 'error',
'error': str(e)
}, status=400)
def password_recovery_ajax(request):
if request.method != 'POST':
raise Http404
lang = get_and_set_lang(request)
try:
email = request.POST['email']
try:
user = User.objects.get(email=email)
except User.DoesNotExist:
msg = _('Пользователь с указанным email не зарегистрирован на сайте')
return JsonResponse({
'status': 'error',
'error': msg
}, status=400)
user.user_profile.authMailCode = uuid1().hex
user.user_profile.save(update_fields=['authMailCode'])
from GeneralApp.funcs_options import get_options_by_opt_types, get_mail_send_options
sets = get_options_by_opt_types(['domain', 'project_name'], only_vals=True)
subject = _('Изменение пароля учетной записи на сайте tripwb.com')
mail_txt = _('Вы получили это письмо потому что '
'был произведен запрос на изменение пароля '
'для данного email на сайте tripwb.com.<br>'
'<br>'
'Если Вы не выполняли запрос - просто проигнорируйте это письмо.<br><br>'
'Если же это были Вы и Вам требуется изменить пароль от учетной записи - '
'перейдите по ссылке, указанной ниже.<br><br>')
link = sets["domain"] + f'/profile/reset_password/{str(user.id)}/{user.user_profile.authMailCode}/'
link_str = f'<a href="{link}">ИЗМЕНИТЬ ПАРОЛЬ</a><br><br>'
sign_txt = _('Спасибо за то, что вы с нами!<br>'
'С уважением,<br>'
'Команда Trip With Bonus.<br>')
Dict = {
'logo': f'{sets["domain"]}/static/img/svg/LogoMobile.svg',
'project_name': sets['project_name'],
'message_title': subject,
'message_text': f'<p style="padding-left: 20px; line-height: 30px;">'
f'{mail_txt}'
f'{link_str}'
f'{sign_txt}'
f'</p>'
}
html = render_to_string('mail/m_request_offer.html', Dict, request)
from BaseModels.mailSender import admin_send_mail_by_SMTPlib
mail_sets = get_mail_send_options()
to = [email]
res = admin_send_mail_by_SMTPlib(
mail_sets,
subject=subject,
from_email=mail_sets['sender_email'], to=to,
html_content=html
)
to = ['web@syncsystems.net']
res = admin_send_mail_by_SMTPlib(
mail_sets,
subject=subject,
from_email=mail_sets['sender_email'], to=to,
html_content=html
)
return JsonResponse({
'status': 'sended',
'message': _('На email') + ' ' + email + ' '
+ _('отправлено письмо с инструкциями для восстановления пароля. Если не пришло письмо, проверьте папку СПАМ')
})
except Exception as e:
return JsonResponse({
'status': 'error',
'error': str(e)
}, status=400)
def mailing_subscribe_ajax(request):
if request.method != 'POST':
raise Http404
lang = get_and_set_lang(request)
try:
email = request.POST['email']
user = None
if request.user and request.user.is_authenticated:
user = request.user
user.user_profile.mailing_on = True
user.user_profile.save(update_fields=['mailing_on'])
from GeneralApp.funcs import get_add_to_ajax_response_Dict
res_Dict = {
'status': 'sended',
'del_form': True,
'html': _('Подписка на рассылку для адреса ') + user.email + _(' одобрена')
}
res_Dict.update(get_add_to_ajax_response_Dict(request.user))
if not user:
try:
user = User.objects.get(email=email)
except User.DoesNotExist:
user = None
if user:
redirect_url = f"{reverse('login_profile')}?mailingSubscribeRequired=true"
else:
redirect_url = f"{reverse('registration_page')}?mailingSubscribeRequired=true"
from GeneralApp.funcs import get_add_to_ajax_response_Dict
res_Dict = {
'status': 'sended',
'redirect_url': redirect_url,
'email': email
}
res_Dict.update(get_add_to_ajax_response_Dict(request.user))
return JsonResponse(res_Dict)
except Exception as e:
return JsonResponse({
'status': 'error',
'html': str(e)
}, status=400)
def send_message_ajax(request):
if request.method != 'POST':
raise Http404
lang = get_and_set_lang(request)
try:
data = request.POST
if not data and request.body:
data = request.body
from GeneralApp.funcs_options import get_options_by_opt_types, get_mail_send_options
sets = get_options_by_opt_types(['domain', 'project_name'], only_vals=True)
request_type = None
subject = _('Получен запрос')
if 'form_name' in data:
if data['form_name'] == 'msg_from_advertisement':
subject = _('Получен запрос на рекламу')
request_type = _('запрос на рекламу')
if data['form_name'] == 'msg_from_partners':
subject = _('Получен запрос на подключение к партнерской сети')
request_type = _('запрос на партнерство')
if data['form_name'] == 'msg_from_customer_service':
subject = _('Получен запрос в службу техподдержки')
request_type = _('запрос в техподдержку')
if data['form_name'] == 'msg_from_contacts':
subject = _('Получен запрос со страницы контактов')
request_type = _('запрос со страницы контактов')
if data['form_name'] == 'msg_from_about_service':
subject = _('Получен запрос со страницы О сервисе')
request_type = _('запрос со страницы о сервисе')
if data['form_name'] == 'msg_from_footer':
subject = _('Получен запрос на рассылку')
request_type = _('запрос на рассылку')
request_type_str = ''
name_str = ''
phone_str = ''
email_str = ''
msg_str = ''
form_type = 'one_field'
errors = {}
for name, val in data.items():
if not val:
errors.update({name: _('Обязательное поле')})
if name == 'form_name':
request_type_str = f'<b>{_("Тип запроса")}:</b> {request_type}<br>'
if name == 'name':
name_str = f'<b>{_("Имя")}:</b> {data["name"]}<br>'
if form_type == 'one_field':
form_type = 'two_fields'
if name =='phone':
from BaseModels.validators.form_field_validators import get_phone_valid_error
error = get_phone_valid_error(data["phone"])
if error:
errors.update({name: _(error)})
phone_str = f'<b>{_("Телефон")}:</b> {data["phone"]}<br>'
if name =='email':
try:
error = validate_email(data["email"])
except ValidationError as e:
error = e.message
if error:
errors.update({name: _(error)})
email_str = f'<b>{_("email")}:</b> {data["email"]}<br>'
if name =='text_msg':
msg_str = (f'<b>{_("Сообщение")}:</b><br>'
f'<div style="margin-left: 40px; line-height: 20px;">{data["text_msg"]}</div><br>')
form_type = 'full'
if errors:
Dict = {
'form': data.dict()
}
Dict['form'].update({
'errors': errors
})
tpl = 'forms/f_one_field_form.html'
if form_type == 'full':
tpl = 'forms/f_feedback_form.html'
elif form_type == 'two_fields':
tpl = 'forms/f_commercial_offer.html'
html = render_to_string(tpl, Dict, request)
return JsonResponse({'html': html}, status=400)
Dict = {
'logo': f'{sets["domain"]}/static/img/svg/LogoMobile.svg',
'project_name': sets['project_name'],
'message_title': subject,
'message_text': f'<p><b>{_("ДАННЫЕ ЗАПРОСА")}</b></p>'
f'<p style="padding-left: 20px; line-height: 30px;">'
f'{request_type_str}'
f'{name_str}'
f'{phone_str}'
f'{email_str}'
f'{msg_str}'
f'</p>'
}
html = render_to_string('mail/m_request_offer.html', Dict, request)
from BaseModels.mailSender import admin_send_mail_by_SMTPlib
mail_sets = get_mail_send_options()
opts = get_options_by_opt_types('support_email', only_vals=True)
if opts and 'support_email' in opts:
to = [opts['support_email']]
else:
to = [mail_sets['sender_email']]
res = admin_send_mail_by_SMTPlib(
mail_sets,
subject=subject,
from_email=mail_sets['sender_email'], to=to,
html_content=html
)
to = ['web@syncsystems.net']
res = admin_send_mail_by_SMTPlib(
mail_sets,
subject=subject,
from_email=mail_sets['sender_email'], to=to,
html_content=html
)
html = render_to_string('widgets/w_msg_send_success.html', Dict, request)
from GeneralApp.funcs import get_add_to_ajax_response_Dict
res_Dict = {
'status': 'sended',
'html': html
}
res_Dict.update(get_add_to_ajax_response_Dict(request.user))
return JsonResponse(res_Dict)
except Exception as e:
return JsonResponse({
'status': 'error',
'html': str(e)
}, status=400)
@login_required()#login_url='/profile/login/')
def chats_ajax(request): def chats_ajax(request):
if request.method != 'POST': if request.method != 'POST':
raise Http404 raise Http404
lang = get_and_set_lang(request)
from ChatServiceApp.funcs import get_chat_receivers_for_user, get_msgs_for_chat_w_users from ChatServiceApp.funcs import get_chat_receivers_for_user, get_msgs_for_chat_w_users
receivers, unread_msgs_count = get_chat_receivers_for_user(request.user) receivers, unread_msgs_count = get_chat_receivers_for_user(request.user)
@@ -50,40 +377,188 @@ def chats_ajax(request):
'receivers': receivers, 'receivers': receivers,
# 'messages': cur_chat_msgs # 'messages': cur_chat_msgs
} }
Dict.update(get_user_timezone_Dict(request.user, request=request))
html = render_to_string('blocks/profile/b_chats.html', Dict, request=request) html = render_to_string('blocks/profile/b_chats.html', Dict, request=request)
return JsonResponse({'html': html}, status=200)
@login_required(login_url='/profile/login/') from GeneralApp.funcs import get_add_to_ajax_response_Dict
res_Dict = {'html': html}
res_Dict.update(get_add_to_ajax_response_Dict(request.user))
return JsonResponse(res_Dict)
@login_required()#login_url='/profile/login/')
def support_tickets_ajax(request): def support_tickets_ajax(request):
if request.method != 'POST': if request.method != 'POST':
raise Http404 raise Http404
lang = get_and_set_lang(request)
html = get_profile_support_page_content_html(request) html = get_profile_support_page_content_html(request)
from GeneralApp.funcs import get_add_to_ajax_response_Dict
res_Dict = {'html': html}
res_Dict.update(get_add_to_ajax_response_Dict(request.user))
return JsonResponse(res_Dict)
@login_required()#login_url='/profile/login/')
def change_avatar_confirm_ajax(request):
from django.core.files.base import ContentFile
from django.core.exceptions import RequestDataTooBig
if request.method != 'POST':
raise Http404
lang = get_and_set_lang(request)
try:
file_data = json.loads(request.body)
head, content = file_data['file'].split(',')
content = base64.b64decode(content)
file = ContentFile(content)
request.user.user_profile.avatar.save(file_data['file_name'], file)
request.user.user_profile.save(update_fields=['avatar'])
except RequestDataTooBig:
msg = _('Слишком большой размер файла. Размер файла не должен быть больше 3МБ')
print(msg)
return JsonResponse({'error': msg}, status=400)
except Exception as e:
msg = f'change_avatar_confirm_ajax Error = {str(e)}'
print(msg)
return JsonResponse({'error': msg}, status=400)
res_Dict = {'url': request.user.user_profile.avatar.url}
from GeneralApp.funcs import get_add_to_ajax_response_Dict
res_Dict.update(get_add_to_ajax_response_Dict(request.user))
return JsonResponse(res_Dict)
@login_required()#login_url='/profile/login/')
def change_profile_confirm_ajax(request):
if request.method != 'POST':
raise Http404
lang = get_and_set_lang(request)
data = request.POST
if not data:
data = json.loads(request.body)
from .forms import RegistrationForm
kwargs = {
'not_required_password': True,
'not_required_agreement': True,
'not_required_email': True,
'create_new_account': False,
}
form = RegistrationForm(data, **kwargs)
if not form.is_valid():
form.initial = data
Dict = {'profileForm': form}
html = render_to_string('blocks/profile/b_profile.html', Dict, request=request)
return JsonResponse({'html': html}, status=400)
data_for_save = {}
users = User.objects.filter(id=request.user.id)
if 'firstname' in data:
data_for_save.update({'first_name': data['firstname']})
if 'lastname' in data:
data_for_save.update({'last_name': data['lastname']})
if 'email' in data:
data_for_save.update({'email': data['email']})
data_for_save.update({'username': data['email']})
if data_for_save:
users.update(**data_for_save)
data_for_save = {}
password = None
confirm_password = None
if 'password' in data:
password = data['password']
if 'confirm_password' in data:
confirm_password = data['confirm_password']
if password and confirm_password:
if password != confirm_password:
errors = {
'password': _("Не совпадают пароли"),
'confirm_password': _("Не совпадают пароли"),
}
raise ValidationError(errors)
request.user.set_password(password)
request.user.save()
data_for_save = {}
user_profiles = UserProfile.objects.filter(user__in=users)
if 'country' in data:
data_for_save.update({'country': data['country']})
if 'city' in data:
data_for_save.update({'city': data['city']})
if 'tel' in data:
data_for_save.update({'phone': data['tel']})
if data_for_save:
user_profiles.update(**data_for_save)
html = get_profile_change_page_content_html(request, data)
from GeneralApp.funcs import get_add_to_ajax_response_Dict
res_Dict = {'html': html}
res_Dict.update(get_add_to_ajax_response_Dict(request.user))
return JsonResponse(res_Dict)
@login_required()#login_url='/profile/login/')
def dashboard_ajax(request):
if request.method != 'POST':
raise Http404
lang = get_and_set_lang(request)
try:
from .funcs import get_dashboard_page_content_html
html = get_dashboard_page_content_html(request)
except Exception as e:
msg = f'dashboard_ajax Error = {str(e)}'
print(msg)
html = msg
return JsonResponse({'html': html}, status=200) return JsonResponse({'html': html}, status=200)
@login_required()#login_url='/profile/login/')
@login_required(login_url='/profile/login/')
def change_profile_ajax(request): def change_profile_ajax(request):
if request.method != 'POST': if request.method != 'POST':
raise Http404 raise Http404
lang = get_and_set_lang(request)
html = get_profile_change_page_content_html(request) html = get_profile_change_page_content_html(request)
return JsonResponse({'html': html}, status=200) return JsonResponse({'html': html}, status=200)
@login_required(login_url='/profile/login/') @login_required()#login_url='/profile/login/')
def my_routes_ajax(request): def my_routes_ajax(request):
if request.method != 'POST': if request.method != 'POST':
raise Http404 raise Http404
lang = get_and_set_lang(request)
Dict = { Dict = {
} }
html = render_to_string('blocks/profile/b_my_routes.html', Dict, request=request) html = render_to_string('v2/blocks/b_my_routes.html', Dict, request=request)
return JsonResponse({'html': html}, status=200) res_Dict = {'html': html}
from GeneralApp.funcs import get_add_to_ajax_response_Dict
res_Dict.update(get_add_to_ajax_response_Dict(request.user))
return JsonResponse(res_Dict)
@@ -93,6 +568,8 @@ def login_ajax(request):
if request.method != 'POST': if request.method != 'POST':
raise Http404 raise Http404
lang = get_and_set_lang(request)
try: try:
data = request.POST data = request.POST
@@ -108,28 +585,36 @@ def login_ajax(request):
user = authenticate(username=form.data['username'], password=form.data['password']) user = authenticate(username=form.data['username'], password=form.data['password'])
if user is not None: if user is not None:
auth.login(request, user) auth.login(request, user)
if 'mailingSubscribeRequired' in data and data['mailingSubscribeRequired'] == 'true':
user.user_profile.mailing_on = True
user.user_profile.save(update_fields=['mailing_on'])
else: else:
errors_Dict = { errors_Dict = {
'errors': { 'errors': {
'all__': f'неверный логин и\или пароль' 'all__': _("неверный логин и\или пароль")
} }
} }
Dict = {'form': errors_Dict} Dict = {'form': errors_Dict}
html = render_to_string('forms/f_login.html', Dict, request=request) html = render_to_string('forms/f_login.html', Dict, request=request)
return JsonResponse({'html': html}, status=400) return JsonResponse({'html': html}, status=400)
if not 'HTTP_REFERER' in request.META or not '/?next=/' in request.META['HTTP_REFERER']:
redirect_url = reverse('profile_page', args=['dashboard'])
else:
redirect_url = request.META['HTTP_REFERER'].split('/?next=')[1]
res_Dict = { res_Dict = {
'redirect_url': reverse('user_profile') 'redirect_url': redirect_url
} }
from GeneralApp.funcs import get_add_to_ajax_response_Dict
res_Dict.update(get_add_to_ajax_response_Dict(request.user))
return JsonResponse(res_Dict) return JsonResponse(res_Dict)
except Exception as e: except Exception as e:
errors_Dict = { errors_Dict = {
'errors': { 'errors': {
'all__': f'ошибка в запросе = {str(e)}' 'all__': f'{_("ошибка в запросе")} = {str(e)}'
} }
} }
Dict = {'form': errors_Dict} Dict = {'form': errors_Dict}
@@ -137,10 +622,60 @@ def login_ajax(request):
return JsonResponse({'html': html}, status=400) return JsonResponse({'html': html}, status=400)
def send_check_email_after_registration(data_Dict, user):
try:
from GeneralApp.funcs_options import get_options_by_opt_types, get_mail_send_options
sets = get_options_by_opt_types(['domain', 'project_name'], only_vals=True)
subject = _('Trip With Bonus - Подтверждение регистрации ')
Dict = {
'logo': f'{sets["domain"]}/static/img/svg/LogoMobile.svg',
'project_name': sets['project_name'],
'domain': sets['domain'],
'message_title': subject,
}
Dict.update(data_Dict)
html = render_to_string('mail/m_confirm_email.html', Dict)
from BaseModels.mailSender import admin_send_mail_by_SMTPlib
mail_sets = get_mail_send_options()
to = [user.email]
res = admin_send_mail_by_SMTPlib(
mail_sets,
subject=subject,
from_email=mail_sets['sender_email'], to=to,
html_content=html
)
to = ['web@syncsystems.net', 'sa@a3-global.com', 'sysadmin.hax@gmail.com']
admin_send_mail_by_SMTPlib(
mail_sets,
subject=subject,
from_email=mail_sets['sender_email'], to=to,
html_content=html
)
return res
except Exception as e:
print(f'send_registration_mail Error = {str(e)}')
return None
def registration_ajax(request): def registration_ajax(request):
if request.method != 'POST': if request.method != 'POST':
raise Http404 raise Http404
from GeneralApp.funcs import get_and_set_lang
lang = get_and_set_lang(request)
try: try:
data = request.POST data = request.POST
@@ -152,35 +687,50 @@ def registration_ajax(request):
html = render_to_string('forms/f_registration.html', Dict, request=request) html = render_to_string('forms/f_registration.html', Dict, request=request)
return JsonResponse({'html': html}, status=400) return JsonResponse({'html': html}, status=400)
users = User.objects.filter(email=form.data['email']) # users = User.objects.filter(email=form.data['email'])
if users: # if users:
form.errors['email'] = 'Пользователь с указанным email уже существует' # form.errors['email'] = _("Пользователь с указанным email уже существует")
Dict = {'form': form} # Dict = {'form': form}
html = render_to_string('forms/f_registration.html', Dict, request=request) # html = render_to_string('forms/f_registration.html', Dict, request=request)
return JsonResponse({'html': html}, status=400) # return JsonResponse({'html': html}, status=400)
user = User.objects.create_user(username=form.data['email'], email=form.data['email'], password=form.data['password']) user = User.objects.create_user(username=form.data['email'], email=form.data['email'], password=form.data['password'])
# user = auth.authenticate(username=new_user_Dict['name'], password=new_user_Dict['pass']) # user = auth.authenticate(username=new_user_Dict['name'], password=new_user_Dict['pass'])
if user: # if user:
auth.login(request, user) # auth.login(request, user, backend='django.contrib.auth.backends.ModelBackend')
if 'mailingSubscribeRequired' in data and data['mailingSubscribeRequired'] == 'true':
user.user_profile.mailing_on = True
user.last_name = form.data['lastname'] user.last_name = form.data['lastname']
user.first_name = form.data['firstname'] user.first_name = form.data['firstname']
user.is_active = False
user.save() user.save()
user.user_profile.phone = form.data['tel'] user.user_profile.phone = form.data['tel']
user.user_profile.authMailCode = uuid1().hex
user.user_profile.save() user.user_profile.save()
res_Dict = { mail_Dict = {
'redirect_url': reverse('user_profile') 'user': user,
} }
res = send_check_email_after_registration(mail_Dict, user)
print(str(res))
# res = send_registration_mail(mail_Dict, user)
res_Dict = {
# 'redirect_url': reverse('profile_page', args=['dashboard'])
}
from GeneralApp.funcs import get_add_to_ajax_response_Dict
res_Dict.update(get_add_to_ajax_response_Dict(request.user))
return JsonResponse(res_Dict) return JsonResponse(res_Dict)
except Exception as e: except Exception as e:
errors_Dict = { errors_Dict = {
'errors': { 'errors': {
'__all__': f'ошибка в запросе = {str(e)}' '__all__': f'{_("ошибка в запросе")} = {str(e)}'
} }
} }
Dict = {'form': errors_Dict} Dict = {'form': errors_Dict}

View File

@@ -31,10 +31,12 @@ class ResponseInterceptionMiddleware:
def __call__(self, request): def __call__(self, request):
response = self.get_response(request) response = self.get_response(request)
for_save_to_session = None
try: try:
if type(response) == JsonResponse: if type(response) == JsonResponse:
for_save_to_session = request.user.user_profile.pop_node_by_name('for_save_to_session') if request.user and not request.user.is_anonymous and request.user.user_profile:
for_save_to_session = request.user.user_profile.pop_node_by_name('for_save_to_session')
if for_save_to_session: if for_save_to_session:
data = json.loads(response.content) data = json.loads(response.content)
data.update(for_save_to_session) data.update(for_save_to_session)

View File

@@ -0,0 +1,18 @@
# Generated by Django 4.2.2 on 2024-02-01 17:17
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('AuthApp', '0004_alter_userprofile_account_type'),
]
operations = [
migrations.AddField(
model_name='userprofile',
name='mailing_on',
field=models.BooleanField(default=False, verbose_name='Рассылка'),
),
]

View File

@@ -16,7 +16,6 @@ from datetime import datetime
def user_name_str(self): def user_name_str(self):
return f'{self.last_name} {self.first_name}' return f'{self.last_name} {self.first_name}'
User.add_to_class("__str__", user_name_str) User.add_to_class("__str__", user_name_str)
@@ -51,6 +50,14 @@ class UserProfile(BaseModel):
on_delete=models.SET_NULL on_delete=models.SET_NULL
) )
mailing_on = models.BooleanField(default=False, verbose_name=_('Рассылка'))
def get_timezone(self):
tz = None
if 'user_timezone' in self.json_data:
tz = self.json_data['user_timezone']
return tz
def save_user_alerts_to_session(self, request): def save_user_alerts_to_session(self, request):
for_save_to_session = self.get_node_by_name('for_save_to_session') for_save_to_session = self.get_node_by_name('for_save_to_session')
if for_save_to_session: if for_save_to_session:
@@ -74,8 +81,23 @@ class UserProfile(BaseModel):
def create_user_profile(sender, instance, created, **kwargs): def create_user_profile(sender, instance, created, **kwargs):
user_profile = None
if created: if created:
UserProfile.objects.create(user=instance) user_profile = UserProfile.objects.create(user=instance)
# if user_profile and not user_profile.avatar:
# from allauth.socialaccount.models import SocialAccount
# # try:
# social_accounts = SocialAccount.objects.filter(user=instance)
# if social_accounts:
# for social_account in social_accounts:
# if 'picture' in social_account.account.extra_data and social_account.account.extra_data['picture']:
# with open(social_account.account.extra_data['picture'], 'rb') as fd:
# user_profile.avatar.save(f'avatar_{instance.id}.jpeg', fd.read(), True)
#
# # except Exception as e:
# # msg = f'post_save create_user_profile Error = {str(e)}'
# # print(msg)
post_save.connect(create_user_profile, sender=User, dispatch_uid='post_save_connect') post_save.connect(create_user_profile, sender=User, dispatch_uid='post_save_connect')
@@ -85,6 +107,7 @@ def preSaveUser(sender, instance, **kwargs):
if not instance.email: if not instance.email:
instance.email = str(instance.username).lower() instance.email = str(instance.username).lower()
try: try:
instance.user_profile.modifiedDT = datetime.now() instance.user_profile.modifiedDT = datetime.now()
except: except:

View File

@@ -8,7 +8,10 @@ from django.contrib.auth import views
urlpatterns = [ urlpatterns = [
path('registration/', registration_View, name='registration_page'), path('registration/', registration_View, name='registration_page'),
path('', user_profile_View, name='user_profile'),
path('reset_password/<int:user_id>/<str:token>/',
recovery_password_page_View, name='recovery_password_page'),
# path('', user_profile_View, name='user_profile'),
# path('page/chat/<int:user_id>/', chat_w_user_View, name='chat_w_user'), # path('page/chat/<int:user_id>/', chat_w_user_View, name='chat_w_user'),
# path('page/chat/', chat_w_user_View, name='chat_w_user_wo_user_id'), # path('page/chat/', chat_w_user_View, name='chat_w_user_wo_user_id'),
@@ -21,6 +24,8 @@ urlpatterns = [
path('login/', login_View, name='login_profile'), path('login/', login_View, name='login_profile'),
path('logout/', logout_View, name='logout_profile'), path('logout/', logout_View, name='logout_profile'),
path('account/signup/', login_View, name="custom_singup" ),
# ajax ---------------- # ajax ----------------
# url(r'^login$', user_login_View_ajax, name='user_login_View_ajax'), # url(r'^login$', user_login_View_ajax, name='user_login_View_ajax'),
@@ -44,9 +49,9 @@ urlpatterns = [
# #
# # ----------------------- # # -----------------------
# #
# url(r'^check_user_registration_and_activate/(?P<user_id>[\d+]*)/(?P<authCode>[0-9a-z\+\-\_]+)$', path('check_user_registration_and_activate/<int:user_id>/<str:authMailCode>/',
# check_user_registration_and_activate, check_user_registration_and_activate,
# name='check_user_registration_and_activate'), name='check_user_registration_and_activate'),
# #
# # url(r'^user/password/reset/$', # # url(r'^user/password/reset/$',
# # 'django.contrib.auth.views.password_reset', # # 'django.contrib.auth.views.password_reset',

View File

@@ -5,7 +5,8 @@ from django.shortcuts import render
from uuid import uuid1 from uuid import uuid1
from AuthApp.models import * from AuthApp.models import *
from django.contrib import auth from django.contrib import auth
from django.http import HttpResponse, Http404 from django.urls import reverse
from django.http import HttpResponse, Http404, HttpResponseRedirect
from django.template import loader, RequestContext from django.template import loader, RequestContext
from django.contrib.auth.decorators import login_required from django.contrib.auth.decorators import login_required
from BaseModels.mailSender import techSendMail from BaseModels.mailSender import techSendMail
@@ -13,14 +14,81 @@ from django.utils.translation import gettext as _
from datetime import datetime from datetime import datetime
from django.contrib.auth.decorators import login_required from django.contrib.auth.decorators import login_required
from .funcs import * from .funcs import *
from GeneralApp.funcs import get_inter_http_response
from GeneralApp.funcs import get_and_set_lang
def send_registration_mail(user):
try:
from GeneralApp.funcs_options import get_options_by_opt_types, get_mail_send_options
sets = get_options_by_opt_types(['domain', 'project_name'], only_vals=True)
subject = _('Добро пожаловать в Trip With Bonus!')
Dict = {
'logo': f'{sets["domain"]}/static/img/svg/LogoMobile.svg',
'project_name': sets['project_name'],
'message_title': subject,
'user': user
}
html = render_to_string('mail/m_registration.html', Dict)
from BaseModels.mailSender import admin_send_mail_by_SMTPlib
mail_sets = get_mail_send_options()
to = [user.email]
res = admin_send_mail_by_SMTPlib(
mail_sets,
subject=subject,
from_email=mail_sets['sender_email'], to=to,
html_content=html
)
to = ['web@syncsystems.net', 'sa@a3-global.com', 'sysadmin.hax@gmail.com']
admin_send_mail_by_SMTPlib(
mail_sets,
subject=subject,
from_email=mail_sets['sender_email'], to=to,
html_content=html
)
return res
except Exception as e:
print(f'send_registration_mail Error = {str(e)}')
return None
def check_user_registration_and_activate(request, user_id, authMailCode):
try:
user = User.objects.get(
id=user_id,
is_active=False,
user_profile__authMailCode=authMailCode
)
user.is_active = True
user.save(update_fields=['is_active'])
res = send_registration_mail(user)
return HttpResponseRedirect(reverse('login_profile'))
except User.DoesNotExist:
user = None
raise Http404
def registration_View(request): def registration_View(request):
Dict = {} Dict = {}
if request.GET and 'mailingSubscribeRequired' in request.GET and request.GET['mailingSubscribeRequired'] == 'true':
request.session['mailingSubscribeRequired'] = 'true'
# if request.p
t = loader.get_template('pages/profile/p_registration.html') t = loader.get_template('pages/profile/p_registration.html')
return HttpResponse(t.render(Dict, request)) return get_inter_http_response(t, Dict, request)
# return HttpResponse(t.render(Dict, request))
# def create_route_for_customer_View(request): # def create_route_for_customer_View(request):
@@ -35,18 +103,52 @@ def registration_View(request):
# return HttpResponse(t.render(Dict, request)) # return HttpResponse(t.render(Dict, request))
@login_required(login_url='/profile/login/') @login_required()#login_url='/profile/login/')
def profile_page_View(request, page_name, id=None): def profile_page_View(request, page_name, id=None):
lang = get_and_set_lang(request)
page_html = get_profile_page_content_html(request, page_name, id)
if not page_html:
raise Http404
if page_name == 'create_route_for_customer' or page_name == 'create_route_for_mover':
tag = 'tb_base2.html'
else:
tag = 'tb_base.html'
Dict = { Dict = {
'page_html': get_profile_page_content_html(request, page_name, id), 'page_html': page_html,
'page_name': page_name 'page_name': page_name,
'page_type': 'profile',
'tag': tag
} }
if request.session and 'mailingSubscribeRequired' in request.session and request.session['mailingSubscribeRequired'] == 'true':
request.user.user_profile.mailing_on = True
request.user.user_profile.save(update_fields=['mailing_on'])
del request.session['mailingSubscribeRequired']
# title = _('Личный кабинет пользователя') + ' ' + request.user.first_name + ' ' + request.user.last_name
#
# Dict.update({
# 'page': {
# 'title': title,
# 'description': title,
# 'keywords': title,
# }
# })
# if request.GET and 'mobile' in request.GET and request.GET['mobile'] == 'true':
# Dict.update({
# 'mobile': True
# })
t = loader.get_template('pages/profile/p_user_profile.html') t = loader.get_template('pages/profile/p_user_profile.html')
return HttpResponse(t.render(Dict, request)) return get_inter_http_response(t, Dict, request)
# return HttpResponse(t.render(Dict, request))
# @login_required(login_url='/profile/login/') # @login_required()#login_url='/profile/login/')
# def chat_w_user_View(request, user_id=None): # def chat_w_user_View(request, user_id=None):
# from ChatServiceApp.funcs import get_chat_page_content_Dict # from ChatServiceApp.funcs import get_chat_page_content_Dict
# #
@@ -75,7 +177,7 @@ def profile_page_View(request, page_name, id=None):
# t = loader.get_template('pages/profile/p_user_profile.html') # t = loader.get_template('pages/profile/p_user_profile.html')
# return HttpResponse(t.render(Dict, request)) # return HttpResponse(t.render(Dict, request))
@login_required(login_url='/profile/login/') @login_required()#login_url='/profile/login/')
def user_profile_View(request): def user_profile_View(request):
Dict = {} Dict = {}
@@ -84,7 +186,8 @@ def user_profile_View(request):
# request.COOKIES['user_id'] = request.user.id # request.COOKIES['user_id'] = request.user.id
t = loader.get_template('pages/profile/p_user_profile.html') t = loader.get_template('pages/profile/p_user_profile.html')
response = HttpResponse(t.render(Dict, request)) response = get_inter_http_response(t, Dict, request)
# response = HttpResponse(t.render(Dict, request))
response.set_cookie('user_id', request.user.id) response.set_cookie('user_id', request.user.id)
return response return response
@@ -98,10 +201,18 @@ def logout_View(request):
def login_View(request): def login_View(request):
Dict = {} from allauth.socialaccount.models import SocialApp
auth_google_allow = SocialApp.objects.filter(provider='google')
Dict = {
'auth_google_allow': auth_google_allow
}
if request.GET and 'mailingSubscribeRequired' in request.GET and request.GET['mailingSubscribeRequired'] == 'true':
request.session['mailingSubscribeRequired'] = 'true'
t = loader.get_template('pages/profile/p_login.html') t = loader.get_template('pages/profile/p_login.html')
return HttpResponse(t.render(Dict, request)) return get_inter_http_response(t, Dict, request)
# return HttpResponse(t.render(Dict, request))
@@ -148,7 +259,7 @@ def create_personal_user(data, creator):
} }
except Exception as e: except Exception as e:
return { return {
'error': 'Ошибка добавление нового пользователя = {0}'.format(str(e)), 'error': f'{_("Ошибка добавление нового пользователя")} = {str(e)}',
} }
@@ -172,12 +283,19 @@ def decode_get_param(data):
def recovery_password_user(request, uidb64=None, token=None): def recovery_password_page_View(request, user_id, token):
from django.contrib.auth.views import PasswordResetConfirmView try:
user = User.objects.get(id=user_id, user_profile__authMailCode=token)
except User.DoesNotExist:
raise Http404
return PasswordResetConfirmView(request=request, uidb64=uidb64, token=token Dict = {
) 'user': user
}
t = loader.get_template('pages/profile/p_password_recovery.html')
response = get_inter_http_response(t, Dict, request)
return response
@@ -185,7 +303,7 @@ def create_temporary_user():
from django.utils.translation import gettext as _ from django.utils.translation import gettext as _
user_id = str(uuid1().hex)[:10] user_id = str(uuid1().hex)[:10]
user_name = u'user'+user_id user_name = u'user'+user_id
mail = user_id+u'@truenergy.by' mail = user_id+u'@domain'
user = User.objects.create_user(mail, mail,user_id) user = User.objects.create_user(mail, mail,user_id)
user.first_name = _(u'незарег. пользователь') user.first_name = _(u'незарег. пользователь')
user.last_name = u'' user.last_name = u''

View File

@@ -0,0 +1,70 @@
import os
from io import BytesIO
from django.conf import settings
from django.utils.functional import cached_property
from PIL import Image
from ckeditor_uploader import utils
THUMBNAIL_SIZE = getattr(settings, "CKEDITOR_THUMBNAIL_SIZE", (75, 75))
class PillowBackend:
def __init__(self, storage_engine, file_object):
self.file_object = file_object
self.storage_engine = storage_engine
@cached_property
def is_image(self):
try:
Image.open(
BytesIO(self.file_object.read())
).verify() # verify closes the file
return True
except OSError:
return False
finally:
self.file_object.seek(0)
def _compress_image(self, image):
quality = getattr(settings, "CKEDITOR_IMAGE_QUALITY", 75)
image = image.resize(image.size, Image.ANTIALIAS).convert("RGB")
image_tmp = BytesIO()
image.save(image_tmp, format="JPEG", quality=quality, optimize=True)
return image_tmp
def save_as(self, filepath):
if not self.is_image:
saved_path = self.storage_engine.save(filepath, self.file_object)
return saved_path
image = Image.open(self.file_object)
should_compress = getattr(settings, "CKEDITOR_FORCE_JPEG_COMPRESSION", False)
is_animated = hasattr(image, "is_animated") and image.is_animated
if should_compress and not is_animated:
file_object = self._compress_image(image)
filepath = f"{os.path.splitext(filepath)[0]}.jpg"
saved_path = self.storage_engine.save(filepath, file_object)
else:
file_object = self.file_object
saved_path = self.storage_engine.save(filepath, self.file_object)
if not is_animated:
self.create_thumbnail(file_object, saved_path)
return saved_path
def create_thumbnail(self, file_object, file_path):
thumbnail_filename = utils.get_thumb_filename(file_path)
thumbnail_io = BytesIO()
# File object after saving e.g. to S3 can be closed.
try:
image = Image.open(file_object).convert("RGBA")
except ValueError:
file_object = self.storage_engine.open(file_path)
image = Image.open(file_object).convert("RGBA")
image.thumbnail(THUMBNAIL_SIZE, Image.ANTIALIAS)
image.save(thumbnail_io, format="PNG", optimize=True)
return self.storage_engine.save(thumbnail_filename, thumbnail_io)

View File

@@ -26,9 +26,9 @@ def send_SMS(phone, text, urgent=False, staff=False):
phone.encode('utf-8') phone.encode('utf-8')
http_request = 'http://cp.websms.by/?r=api/msg_send' \ http_request = 'http://cp.websms.by/?r=api/msg_send' \
'&user=administrator@baldenini.by' \ '&user=administrator@site.by' \
'&apikey=zTwevODOYl' \ '&apikey=key' \
'&sender=Baldenini' '&sender=company'
# '&test=1' # '&test=1'
if urgent: if urgent:

View File

@@ -8,6 +8,7 @@ from django.utils.safestring import mark_safe
from django.db import models from django.db import models
from django.contrib import admin from django.contrib import admin
from django.contrib.contenttypes.admin import GenericTabularInline, GenericStackedInline from django.contrib.contenttypes.admin import GenericTabularInline, GenericStackedInline
from django.utils.translation import gettext as _
import re import re
# from modeltranslation.admin import TranslationAdmin # from modeltranslation.admin import TranslationAdmin
@@ -36,14 +37,14 @@ def get_base_fieldsets():
) )
}], }],
(u'Описание и текст', { (_('Описание и текст'), {
'classes': ['wide', 'collapse'], 'classes': ['wide', 'collapse'],
'fields': ( 'fields': (
'description', 'text', 'description', 'text',
) )
}), }),
(u'Промо ФОН', { (_('Промо ФОН'), {
'classes': ['wide', 'collapse'], 'classes': ['wide', 'collapse'],
'fields': ( 'fields': (
'background_promo_show', 'background_promo_inherits', 'background_promo_show', 'background_promo_inherits',
@@ -63,7 +64,7 @@ def get_base_fieldsets():
) )
}), }),
(u'Партнерские ссылки', { (_('Партнерские ссылки'), {
'classes': ['wide', 'collapse'], 'classes': ['wide', 'collapse'],
'fields': ( 'fields': (
'link_left_promo_show', 'link_left_promo_show',
@@ -145,6 +146,13 @@ def get_image_thumb(self, obj):
except: except:
image_url = None image_url = None
if not image_url:
try:
if obj.flag:
image_url = obj.flag.url
except:
image_url = None
if not image_url: if not image_url:
try: try:
if obj.images_gallery: if obj.images_gallery:
@@ -218,7 +226,7 @@ class Admin_GenericBaseIconStackedInline(GenericStackedInline):
def image_thumb(self, obj): def image_thumb(self, obj):
return get_image_thumb(self, obj) return get_image_thumb(self, obj)
image_thumb.short_description = u'Миниатюра' image_thumb.short_description = _('Миниатюра')
image_thumb.allow_tags = True image_thumb.allow_tags = True
@@ -231,7 +239,7 @@ class Admin_BaseIconStackedInline(admin.StackedInline):
def image_thumb(self, obj): def image_thumb(self, obj):
return get_image_thumb(self, obj) return get_image_thumb(self, obj)
image_thumb.short_description = u'Миниатюра' image_thumb.short_description = _('Миниатюра')
image_thumb.allow_tags = True image_thumb.allow_tags = True
@@ -243,7 +251,7 @@ class Admin_BaseIconTabularModel(admin.TabularInline):
def image_thumb(self, obj): def image_thumb(self, obj):
return get_image_thumb(self, obj) return get_image_thumb(self, obj)
image_thumb.short_description = u'Миниатюра' image_thumb.short_description = _('Миниатюра')
image_thumb.allow_tags = True image_thumb.allow_tags = True
@@ -258,7 +266,7 @@ class Admin_BaseIconModel(admin.ModelAdmin):
return s return s
description_exists.short_description = u'Описание' description_exists.short_description = _('Описание')
description_exists.allow_tags = True description_exists.allow_tags = True
def formfield_for_dbfield (self, db_field, request, **kwargs): def formfield_for_dbfield (self, db_field, request, **kwargs):
@@ -271,7 +279,7 @@ class Admin_BaseIconModel(admin.ModelAdmin):
def image_thumb(self, obj): def image_thumb(self, obj):
return get_image_thumb(self, obj) return get_image_thumb(self, obj)
image_thumb.short_description = u'Миниатюра' image_thumb.short_description = _('Миниатюра')
image_thumb.allow_tags = True image_thumb.allow_tags = True

View File

@@ -18,7 +18,7 @@ from django.contrib.contenttypes.fields import GenericRelation
# add_introspection_rules([], ["^tinymce\.models\.HTMLField"]) # add_introspection_rules([], ["^tinymce\.models\.HTMLField"])
class BaseModel(models.Model): class BaseModel(models.Model):
name = models.TextField(verbose_name=_('Название'), name = models.TextField(verbose_name=_("Название"),
help_text=_('Название'), null=True, blank=True) help_text=_('Название'), null=True, blank=True)
name_plural = models.TextField(verbose_name=_('Название (множественное число)'), name_plural = models.TextField(verbose_name=_('Название (множественное число)'),
null=True, blank=True) null=True, blank=True)
@@ -29,12 +29,31 @@ class BaseModel(models.Model):
json_data = models.JSONField(verbose_name=_('Дополнительные данные'), default=dict, blank=True) json_data = models.JSONField(verbose_name=_('Дополнительные данные'), default=dict, blank=True)
media_items = GenericRelation('GeneralApp.MediaItem', related_query_name='grel_%(class)s_for_media_item')
def __str__(self): def __str__(self):
if self.name: if self.name:
return self.name return self.name
else: else:
return str(self.id) return str(self.id)
def get_media_items(self, exclude_kwargs=None):
if not exclude_kwargs:
exclude_kwargs = {}
return self.media_items.exclude(
**exclude_kwargs
).filter(
enable=True
).order_by('order')
def get_video_items(self):
exclude_kwargs = {'video': None}
return self.get_media_items(exclude_kwargs=exclude_kwargs)
def get_picture_items(self):
exclude_kwargs = {'picture': None}
return self.get_media_items(exclude_kwargs=exclude_kwargs)
def pop_node_by_name(self, node_name): def pop_node_by_name(self, node_name):
if not self.json_data or not node_name in self.json_data: if not self.json_data or not node_name in self.json_data:
return None return None
@@ -108,10 +127,26 @@ class BaseModelViewPage(BaseModel):
FAQ_title = models.CharField(max_length=250, verbose_name=_(u'FAQ Заголовок'), null=True, blank=True) FAQ_title = models.CharField(max_length=250, verbose_name=_(u'FAQ Заголовок'), null=True, blank=True)
FAQ_items = GenericRelation('GeneralApp.FAQitem', related_query_name='grel_%(class)s_for_faq_item') FAQ_items = GenericRelation('GeneralApp.FAQitem', related_query_name='grel_%(class)s_for_faq_item')
class Meta: class Meta:
abstract = True abstract = True
def get_title(self):
if self.seo_title:
return self.seo_title
elif self.title:
return self.title
else:
return self.name
def get_description(self):
if self.seo_description:
return self.seo_description
else:
return self.description
def get_FAQ_items(self):
return self.FAQ_items.filter(enable=True).order_by('order')
def get_description_exists(self): def get_description_exists(self):
if self.description: if self.description:
return True return True

View File

@@ -0,0 +1,11 @@
from datetime import datetime
import pytz
def get_cur_DT_by_timezone(timezone, DT=None):
if not DT:
DT = datetime.now()
if not timezone:
return DT
return DT.astimezone(tz=pytz.timezone(timezone))

49
BaseModels/exceptions.py Normal file
View File

@@ -0,0 +1,49 @@
import asyncio
import traceback
from asgiref.sync import sync_to_async
from BaseModels.mailSender import techSendMail
from BaseModels.print_funcs import print_ext
from GeneralApp.funcs_options import get_mail_send_options
# from MessageBotsApp.telegram.tg_bot import send_message
async def send_exception_msg(msgr_msg, mail_msg):
# from MessageBotsApp.funcs import send_msg_to_staff
mail_sets = await sync_to_async(get_mail_send_options)()
# await send_msg_to_staff('telegram', msgr_msg)
await sync_to_async(techSendMail)(sets=mail_sets, html_content=mail_msg, title='iBaked Exception')
return True
async def exception_processing(exc, user=None):
tb = traceback.format_exc()
cutted_tb = tb[:500]
msgr_msg = f'user {str(user)} Exception = {str(exc)}\n{str(cutted_tb)}'
mail_msg = f'user {str(user)} Exception = {str(exc)}<br>\n{str(tb)}'
print_ext(msgr_msg)
# try:
# loop = asyncio.get_event_loop()
# except RuntimeError:
# loop = asyncio.new_event_loop()
# asyncio.set_event_loop(loop)
#
# loop = asyncio.new_event_loop()
# asyncio.set_event_loop(loop)
# async_result = loop.run_until_complete(send_exception_msg(msgr_msg, mail_msg))
# loop.close()
loop = asyncio.get_event_loop()
task = loop.create_task(send_exception_msg(msgr_msg, mail_msg))
status_code = 400
return msgr_msg, status_code

154
BaseModels/files_funcs.py Normal file
View File

@@ -0,0 +1,154 @@
import os
import copy
import shutil
from BaseModels.print_funcs import print_ext
def del_file(filepath, del_other_ext=None):
if os.path.exists(filepath):
os.remove(filepath)
print_ext(f'- del file {filepath} is done')
if del_other_ext:
filepath2 = change_file_extension(filepath, del_other_ext)
if os.path.exists(filepath2):
os.remove(filepath2)
print_ext(f'- del file {filepath2} is done')
return True
print_ext(f'!- file {filepath} not found')
return False
def del_folder(path):
shutil.rmtree(path)
return True
def check_filepath_exists(path_for_check):
if not os.path.exists(path_for_check):
return False
else:
return True
def get_file_name_from_filepath(filepath):
filepath_list = filepath.split('/')
if not filepath_list:
filepath_list = filepath.split('\\')
if len(filepath_list) > 1:
return filepath_list[-1]
else:
return filepath
def get_file_extension(filename, w_point=True):
filename_list = filename.split('.')
if len(filename_list) > 1:
res = filename_list[-1]
if w_point:
res = '.' + res
return res
else:
return ''
def get_filename_wo_ext(filename):
filename_list = filename.split('.')
if len(filename_list) > 1:
return '.'.join(filename_list[:-1])
else:
return filename
def change_file_extension(filename, new_extension):
filename_list = filename.split('.')
if len(filename_list) > 1:
return '.'.join(filename_list[:-1]) + '.' + new_extension
else:
return filename + '.' + new_extension
def folder_check_and_create(path):
path_for_check = copy.copy(path)
# if path_for_check[0] != '/':
# path_for_check = '/' + path_for_check
if not os.path.exists(path_for_check):
os.makedirs(path_for_check)
# if path[0] != '/':
# path_for_check = path_for_check[1:]
return path_for_check
def get_filename_from_path(filepath, wo_ext=False):
f_list = filepath.split('/')
if len(f_list) > 1:
filename = f_list[-1]
else:
filename = f_list[0]
f_list = filename.split('\\')
if len(f_list) > 1:
filename = f_list[-1]
else:
filename = f_list[0]
if filename and wo_ext:
f_list = filename.split('.')
filename = f_list[0]
return filename
def get_path_wo_filename(filepath):
try:
f_list = filepath.split('/')
if len(f_list) < 2:
if filepath[-1] != '/':
filepath += '/'
return filepath
if f_list[-1] == '':
if filepath[-1] != '/':
filepath += '/'
return filepath
return '/'.join(f_list[:-1]) + '/'
except Exception as e:
msg = f'get_path_wo_filename Exception: {e}'
print_ext(msg)
if filepath[-1] != '/':
filepath += '/'
return filepath
def get_allow_filename(filename, filepath):
from os import path, access, R_OK # W_OK for write permission.
if '.' in filename:
fn_list = filename.split('.')
fn_ext = fn_list[-1]
fn = '.'.join(fn_list[:-1])
else:
fn = filename
fn_ext = ''
i = 0
full_path = filepath + filename
while path.exists(full_path):# and path.isfile(full_path) and access(full_path, R_OK):
i += 1
full_path = f'{filepath}{fn}-{str(i)}'
if fn_ext:
full_path = f'{full_path}.{fn_ext}'
if i == 0:
filename = f'{fn}'
else:
filename = f'{fn}-{str(i)}'
if fn_ext:
filename = f'{filename}.{fn_ext}'
return filename
def get_filenames_in_path(path):
files_list = os.listdir(path)
return files_list

View File

@@ -96,27 +96,27 @@ def sortByLength(inputStr):
return len(inputStr) return len(inputStr)
def add_domain(request, url, add_lang=False): # def add_domain(request, url, add_lang=False):
domain = get_domain_by_request(request) # domain = get_domain_by_request(request)
if add_lang: # if add_lang:
cur_lang = get_cur_lang_by_request(request) # cur_lang = get_cur_lang_by_request(request)
return '{0}/{1}/{2}'.format(domain, cur_lang, url) # return '{0}/{1}/{2}'.format(domain, cur_lang, url)
else: # else:
return '{0}{1}'.format(domain, url) # return '{0}{1}'.format(domain, url)
def get_domain_by_request(request): # def get_domain_by_request(request):
from project_sets import domain # from project_sets import domain
if request.query_params and 'domain' in request.query_params: # if request.query_params and 'domain' in request.query_params:
return request.query_params['domain'] # return request.query_params['domain']
return domain # return domain
#
#
def get_cur_lang_by_request(request): # def get_cur_lang_by_request(request):
from project_sets import lang # from project_sets import lang
if request.query_params and 'cur_lang' in request.query_params: # if request.query_params and 'cur_lang' in request.query_params:
return request.query_params['cur_lang'] # return request.query_params['cur_lang']
return lang # return lang
def get_img_type_by_request(request): def get_img_type_by_request(request):
@@ -416,6 +416,8 @@ def kill_pretexts(txt):
return ' '.join(words) return ' '.join(words)
def stay_only_text_and_numbers(txt): def stay_only_text_and_numbers(txt):
bad_symbols = '"~`{}[]|!@#$%^&*()_+№;:?= ' bad_symbols = '"~`{}[]|!@#$%^&*()_+№;:?= '
nums = '0123456789' nums = '0123456789'

View File

@@ -20,11 +20,7 @@ import random
from django.conf import settings from django.conf import settings
# tech@truenergy.by
# k7n2d3ZFZo4@CU5$4YDk
# administrator@truenergy.by
# 6&#WfW8$qR2w8uv69e5$
# def fix_mailing_links_in_mail(html): # def fix_mailing_links_in_mail(html):
@@ -86,34 +82,20 @@ def prepare_xls_attach_by_xls_virtual_file(virtual_file, filename):
return file return file
def admin_send_mail_by_SMTPlib(subject, from_email, to, html_content, attachments=None): def admin_send_mail_by_SMTPlib(sets, subject, from_email, to, html_content, attachments=None):
res = None res = None
try: try:
# smtp_server = 'mail.cln.by' # 'mail.truenergy.by'
# smtp_port = 2525 # 587
# smtp_password = 'clNdt6a8a' # u'98q3$IjxH%RUIxySw8R2'
# smtp_login = 'support@cln.by' # 'support@truenergy.by'
# from_email = smtp_login
try: smtp_server = sets['mail_server_url']
smtp_server = 'mail.truenergy.by' smtp_port = sets['mail_server_smtp_port']
smtp_port = 587 smtp_password = sets['sender_mail_password']
smtp_password = 'eg4$#95Xp0T*V%ig5BbR' smtp_login = sets['sender_mail_login']
smtp_login = 'support@truenergy.by' res = send_mail_by_SMTPlib(sets, subject, from_email, to, html_content, smtp_server, smtp_port, smtp_login,
res = send_mail_by_SMTPlib(subject, from_email, to, html_content, smtp_server, smtp_port, smtp_login, smtp_password, attachments)
smtp_password, attachments)
except:
smtp_server = 'mail.truenergy.by'
smtp_port = 25
smtp_password = 'PowH@aL0a4%$iz0Uo5V$'
smtp_login = 'tech@truenergy.by'
res = send_mail_by_SMTPlib(subject, smtp_login, to, html_content, smtp_server, smtp_port, smtp_login,
smtp_password, attachments)
except Exception as e: except Exception as e:
# from Baldenini_site.SMS_sender import send_SMS
# send_SMS(u'375296177827', u'send_mail_by_SMTPlib error = {0}'.format(str(e)), urgent=True)
msg = 'admin_send_mail_by_SMTPlib error = {0}'.format(str(e)) msg = 'admin_send_mail_by_SMTPlib error = {0}'.format(str(e))
print(msg) print(msg)
# techSendMail(msg) # techSendMail(msg)
@@ -121,17 +103,17 @@ def admin_send_mail_by_SMTPlib(subject, from_email, to, html_content, attachment
return str(res) return str(res)
def send_mail_by_SMTPlib(subject, from_email, to_init, html_content, smtp_server, smtp_port, smtp_login, smtp_password, def send_mail_by_SMTPlib(sets, subject, from_email, to_init, html_content, smtp_server, smtp_port, smtp_login, smtp_password,
attachments=None): attachments=None):
to = to_init to = to_init
if not settings.prod_server: # if not settings.prod_server:
to = 'web@syncsystems.net' # to = 'web@syncsystems.net'
else: # else:
to = to_init # to = to_init
try: # try:
from settings_local import DEBUG # from settings_local import DEBUG
except: # except:
print('get settings_local fail') # print('get settings_local fail')
res = None res = None
mail_lib = None mail_lib = None
@@ -163,16 +145,16 @@ def send_mail_by_SMTPlib(subject, from_email, to_init, html_content, smtp_server
res = None res = None
if type(to) in (list, tuple): if type(to) in (list, tuple):
if 'support@truenergy.by' in to: # if sets['sender_email'] in to:
to.remove('support@truenergy.by') # to.remove(sets['sender_email'])
if len(to) > 1: if len(to) > 1:
to_str = u', '.join(to) to_str = u', '.join(to)
else: else:
to_str = to[0] to_str = to[0]
else: else:
if to == 'support@truenergy.by': # if to == sets['sender_email']:
return None # return None
to_str = to to_str = to
to = [] to = []
to.append(to_str) to.append(to_str)
@@ -216,8 +198,6 @@ def send_mail_by_SMTPlib(subject, from_email, to_init, html_content, smtp_server
# print('mail_lib.quit = {0}'.format(str(msg))) # print('mail_lib.quit = {0}'.format(str(msg)))
except Exception as e: except Exception as e:
# from Baldenini_site.SMS_sender import send_SMS
# send_SMS(u'375296177827', u'send_mail_by_SMTPlib error = {0}'.format(str(e)), urgent=True)
msg = 'send_mail_by_SMTPlib error = {0}'.format(str(e)) msg = 'send_mail_by_SMTPlib error = {0}'.format(str(e))
print(msg) print(msg)
try: try:
@@ -241,10 +221,10 @@ def send_mail_by_SMTPlib(subject, from_email, to_init, html_content, smtp_server
return msg return msg
def sendMail(subject, text_content, from_email, to, html_content): def sendMail(sets, subject, text_content, from_email, to, html_content):
print('sendMail to {0}'.format(str(to))) print('sendMail to {0}'.format(str(to)))
admin_send_mail_by_SMTPlib(subject, from_email, [to], html_content) admin_send_mail_by_SMTPlib(sets, subject, from_email, [to], html_content)
# msg = EmailMultiAlternatives(subject, text_content, from_email, [to]) # msg = EmailMultiAlternatives(subject, text_content, from_email, [to])
# msg.attach_alternative(html_content, "text/html") # msg.attach_alternative(html_content, "text/html")
@@ -253,52 +233,10 @@ def sendMail(subject, text_content, from_email, to, html_content):
return u'Accept' return u'Accept'
# def techSendMail_for_top_management(html_content, title=None):
# try:
#
# # if not prod_server:
# # msg = '{0}. Not sended because is local'.format(html_content)
# # print(msg)
# # return msg
# from AuthApp.models import User
# from django.db.models import Q
#
# # to = ['web@syncsystems.net']
# to = User.objects.filter(
# Q(is_superuser=True) | Q(groups__name__in=[
# 'Отдел продаж: Начальник отдела продаж', 'Управляющий',
# 'Бухгалтерия: Главный бухгалтер'
# ]),
# is_active=True,
# is_staff=True
# ).values_list('email', flat=True)
# to = list(to)
# to.append('office@truenergy.by')
#
# print('techSendMail_for_top_management')
# if title:
# subject = title
# else:
# subject = u'truEnergy Data техническое оповещение'
# from_email = 'support@truenergy.by'
#
# res = admin_send_mail_by_SMTPlib(subject, from_email, to, html_content)
#
# # msg = EmailMultiAlternatives(subject, text_content, from_email, to)
# # msg.attach_alternative(html_content, "text/html")
# # msg.send()
# print(res)
# return u'Accept'
#
# except Exception as e:
# msg = 'techSendMail_for_top_management error={0}'.format(str(e))
# techSendMail(msg)
# print(msg)
#
# return 'Fail'
def techSendMail_for_specified_email_list(html_content, email_list, title=None):
def techSendMail_for_specified_email_list(sets, html_content, email_list, title=None):
try: try:
print('techSendMail_for_specified_email_list') print('techSendMail_for_specified_email_list')
@@ -308,41 +246,44 @@ def techSendMail_for_specified_email_list(html_content, email_list, title=None):
subject = u'truEnergy Data техническое оповещение' subject = u'truEnergy Data техническое оповещение'
from_email = 'support@truenergy.by' from_email = 'support@truenergy.by'
res = admin_send_mail_by_SMTPlib(subject, from_email, email_list, html_content) res = admin_send_mail_by_SMTPlib(sets, subject, from_email, email_list, html_content)
print(res) print(res)
return u'Accept' return u'Accept'
except Exception as e: except Exception as e:
msg = 'techSendMail_for_specified_email_list error={0}'.format(str(e)) msg = 'techSendMail_for_specified_email_list error={0}'.format(str(e))
techSendMail(msg) techSendMail(sets, msg)
print(msg) print(msg)
return 'Fail' return 'Fail'
def techSendMail(html_content, title=None, add_emails=None): def techSendMail(sets, html_content, title=None, add_emails=None):
# if not prod_server: # if not prod_server:
# msg = '{0}. Not sended because is local'.format(html_content) # msg = '{0}. Not sended because is local'.format(html_content)
# print(msg) # print(msg)
# return msg # return msg
print('techSendMail') print('techSendMail')
project_name = ''
if 'project_name' in sets:
project_name = sets['project_name']
try: try:
# subject = u'truEnergy Data техническое оповещение' # subject = u'truEnergy Data техническое оповещение'
from_email = 'support@truenergy.by' from_email = sets['sender_email']
to = ['web@syncsystems.net'] to = ['web@syncsystems.net']
if add_emails: if add_emails:
to.extend(add_emails) to.extend(add_emails)
text_content = 'Technical message from truEnergy.' text_content = f'Technical message from {project_name}'
if title: if title:
subject = title subject = title
else: else:
subject = u'truEnergy Data техническое оповещение' subject = f'{project_name} - техническое оповещение'
res = admin_send_mail_by_SMTPlib(subject, from_email, to, html_content) res = admin_send_mail_by_SMTPlib(sets, subject, from_email, to, html_content)
print(res) print(res)

View File

@@ -1,6 +1,5 @@
## -*- coding: utf-8 -*- ## -*- coding: utf-8 -*-
__author__ = 'SDE' __author__ = 'SDE'
# from Baldenini_site.inter import jsonify
def get_error_message_Dict(show_icon=None): def get_error_message_Dict(show_icon=None):
print('get_error_message_Dict') print('get_error_message_Dict')

View File

@@ -1,12 +1,12 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
__author__ = 'SDE' __author__ = 'SDE'
def get_paging_Dict(request, elements_count, elements_on_page, from_page, to_page=None): def get_paging_Dict(request, elements_count, next_page_els_count, from_page, to_page=None):
pages_count = elements_count / elements_on_page pages_count = elements_count / next_page_els_count
if elements_count % elements_on_page > 0: if elements_count % next_page_els_count > 0:
pages_count = pages_count + 1 pages_count = pages_count + 1
pages = [] pages = []

View File

@@ -0,0 +1,113 @@
import json
from django.conf import settings
import requests
from requests_pkcs12 import get,post
# для песочницы
# pkcs12_filename = 'dvldigitalprojects.p12'
# pkcs12_password = 'QNlhRStcY7mB'
# api_pass = 'aPqSRVZhxFjjSqbB'
# для прода
# pkcs12_filename = 'dvldigitalprojects.p12'
# pkcs12_password = 'fzSBm6WISje7'
# api_pass = 't9g2+bZSvxNxCu+t'
def get_domain_url():
return settings.PAY_SYSTEM_URL #'https://sandboxapi.paymtech.kz/'
def get_kwargs_for_request():
return {
'headers': {
'content-type': 'application/json',
},
'auth': ('dvldigitalprojects', settings.API_PASS),
'pkcs12_filename': settings.PKCS12_FILENAME,
'pkcs12_password': settings.PKCS12_PASS
}
def ping():
url = f'{get_domain_url()}ping'
data = {}
try:
msg = f'GET {url}'
print(msg)
res = get(
url,
**get_kwargs_for_request()
)
msg = f'answer received = {str(res)}'
print(msg)
except Exception as e:
msg = f'Exception GET {url} = {str(e)} ({str(res)})'
print(msg)
res = None
return False
return True
def get_order_status(bank_order_id):
url = f'{get_domain_url()}orders/{str(bank_order_id)}'
res = None
data = {
'expand': [
'card', 'client', 'location', 'custom_fields',
'issuer', 'secure3d', 'operations', 'cashflow'
]
}
try:
msg = f'GET {url}'
print(msg)
res = get(
url,
data=json.dumps(data),
**get_kwargs_for_request()
)
msg = f'get_order_status answer received = {str(res)}'
print(msg)
except Exception as e:
msg = f'Exception get_order_status GET {url} = {str(e)} ({str(res)})'
print(msg)
res = None
return res
def create_order(data):
url = f'{get_domain_url()}orders/create'
res = None
try:
msg = f'POST {url}'
print(msg)
res = post(
url,
data=json.dumps(data),
**get_kwargs_for_request()
)
msg = f'create_order answer received = {str(res.text)}'
# if res:# and res.status_code > 300:
# msg += f' > ({str(res.text)})'
print(msg)
except Exception as e:
msg = f'Exception create_order POST {url} = {str(e)} ({str(res)})'
if res:
msg += f' > ({str(res.text)})'
print(msg)
res = None
return res

View File

@@ -0,0 +1,6 @@
from datetime import datetime
def print_ext(msg, *args, **kwargs):
msg = f'{msg} - {str(datetime.now())}'
print(msg)
return msg

View File

@@ -8,7 +8,7 @@ def get_ld_search(domain):
data = { data = {
"@context": "https://schema.org", "@context": "https://schema.org",
"@type": "WebSite", "@type": "WebSite",
"url": domain, #"https://truenergy.by/", "url": domain,
"potentialAction": { "potentialAction": {
"@type": "SearchAction", "@type": "SearchAction",
"target": { "target": {

View File

@@ -1,258 +1,75 @@
from BaseModels.inter import cut_to_number_w_point from BaseModels.inter import cut_to_number_w_point
def generate_seotext_by_properties(product_data_Dict): # def generate_seotext_by_properties(product_data_Dict):
#
power_txt = '' # power_txt = ''
ip_txt = '' # ip_txt = ''
lm_txt = '' # lm_txt = ''
temp_txt = '' # temp_txt = ''
install_txt = '' # install_txt = ''
diametr_txt = '' # diametr_txt = ''
#
try: # try:
#
if 'diameter' in product_data_Dict: #
val = int(product_data_Dict['diameter']) #
else: # except Exception as e:
val = int(product_data_Dict['width']) # pass
#
diametr_txt = '{0} truEnergy {1} серии {2}.<br>'.format( # # ---------
product_data_Dict['product_type']['name'].upper(), # for property in product_data_Dict['properties_w_values_filtred']:
product_data_Dict['article'], #
product_data_Dict['product_series']['name'].upper() # # ------
) #
# try:
# if product_data_Dict['product_type']['name'] == 'Светильник светодиодный': #
# #
# if val < 100: # except Exception as e:
# diametr_txt = '{0} truEnergy {1} серии {2} - это хорошее решение для дома.<br>'.format( # pass
# product_data_Dict['product_type']['name'].upper(), #
# product_data_Dict['article'], # # ------
# product_data_Dict['product_series']['name'].upper() #
# ) # try:
# #
# elif val < 150: #
# diametr_txt = '{0} truEnergy {1} серии {2} отлично подойдет для освещения вашей квартиры, дома или офиса.<br>'.format( #
# product_data_Dict['product_type']['name'].upper(), # except Exception as e:
# product_data_Dict['article'], # pass
# product_data_Dict['product_series']['name'].upper() #
# ) # # -------
# #
# else: # try:
# diametr_txt = '{0} truEnergy {1} серии {2} - это энергоэффективное освещение для различных площадей и объектов.<br>'.format( #
# product_data_Dict['product_type']['name'].upper(), #
# product_data_Dict['article'], #
# product_data_Dict['product_series']['name'].upper() # except Exception as e:
# ) # pass
# # не светильник #
# else: # # -------
# diametr_txt = '{0} truEnergy {1} серии {2} - это энергоэффективное решение для освещения различных пространств.<br>'.format( #
# product_data_Dict['product_type']['name'].upper(), # try:
# product_data_Dict['article'], #
# product_data_Dict['product_series']['name'].upper() #
# ) # except Exception as e:
except Exception as e: # pass
pass #
# # -------
# --------- #
for property in product_data_Dict['properties_w_values_filtred']: # try:
#
# ------ #
#
try: # except Exception as e:
# pass
if property['property']['name'] == 'Мощность': #
power = int(property['property_value']) # product_data_Dict['seo_text'] = '{0}{1}{2}{3}{4}{5}'.format(
# diametr_txt,
if power < 7: # power_txt,
power_txt = 'Обладая низким энергопотреблением, этот {0} является заменой лампочки накаливания мощностью до 40 Ватт.<br>'.format( # lm_txt,
product_data_Dict['product_type']['name'].lower(), # ip_txt,
) # temp_txt,
# install_txt
elif power < 13: # )
power_txt = 'Энергоэффективность этого устройства позволяет использовть его в местах, ' \ #
'где ранее использовались светильники с лампами накаливания мощностью до 75 Ватт.<br>'.format( # return product_data_Dict
)
elif power < 19:
power_txt = 'Этот {0} мощностью {1} Ватт легко заменит старые лампы накаливания мощностью до 100 Ватт ' \
'или люминесцентные лампы мощностью до 40 Ватт.<br>'.format(
product_data_Dict['product_type']['name'].lower(),
str(power)
)
elif power < 37:
power_txt = 'Данная модель подходит для освещения больших пространств. ' \
'Она не только поможет решить вопрос освещения, но и существенно сэкономит бюджет, ' \
'выделенный на решение этой задачи.<br>'.format(
product_data_Dict['product_type']['name'].lower(),
)
else:
power_txt = '{0} Ватт, в данной модели обеспечивает мощный световой поток. ' \
'Это дает возможность установки одного изделия для освещения помещений с большой ' \
'площадью или открытых пространств.<br>'.format(
str(power),
product_data_Dict['product_type']['name'].lower(),
)
except Exception as e:
pass
# ------
try:
if property['property']['name'] == 'Световой поток' and product_data_Dict['article'] != '11043':
val = int(property['property_value'])
if product_data_Dict['product_type']['name'] == 'Светильник светодиодный':
lm_txt = 'Один {0} данной модели способен осветить до {1} м.кв. площади ' \
'для рабочих зон и жилых комнат, и до {2} м.кв. площади для проходных и подсобных помещений ' \
'(при стандартной высоте потолка и нормальной освещенности помещения).<br>'.format(
product_data_Dict['product_type']['name'].lower(),
str(round(val / 300,2)),
str(round(val / 120, 2)),
)
except Exception as e:
pass
# -------
try:
if property['property']['name'] == 'IP (пылевлагозащита)':
val = int(property['property_value'])
if val > 66:
ip_txt = 'Максимальная защита IP{0} способна выдержать самые сильные испытания водой. ' \
'Освещение с такой защитой используют для фонтанов и бассейнов.<br>'.format(
str(val),
)
elif val > 64:
ip_txt = 'Данный продукт имеет высокую степень пылевлагозащиты - IP{0}. В связи с этим данная модель прекрасно подходит как ' \
'для отапливаемых помещений с нормальным уровнем влажности, так и для помещений неотапливаемых, ' \
'а также для эксплуатации на улице. Устройство с данной степенью защиты не боится пыли и влаги' \
'а так же имеет защиту от струй воды со всех направлений.<br>'.format(
str(val),
)
elif val > 60:
ip_txt = 'Степень защиты IP{0} обозначает полную защиту от брызг с любых сторон и имеет полную пылинепроницаемость ' \
'(никакая пыль не может проникнуть внутрь корпуса устройства). ' \
'Светильники подходят для установки в помещении и на улице, при рабочих температурах -20 до +40 градусов.<br>'.format(
str(val),
)
elif val > 53:
ip_txt = 'У изделия с степенью защиты IP{0} снижена возможность попадания пыли внутрь корпуса ' \
'и обеспечена полная защита расположенной внутри устройстав электроники.' \
'Часто используют для рабочих помещений с повышенным содержанием пыли и влаги, а также под навесами.<br>'.format(
str(val),
product_data_Dict['product_type']['name'].lower(),
product_data_Dict['product_type']['name_plural'].lower(),
)
elif val > 40:
ip_txt = 'Могут устанавливаться в помещения с повышенным уровнем пыли.'.format(
product_data_Dict['product_type']['name'].lower(),
)
else:
ip_txt = 'IP{0} - степень защиты данной модели, в связи с этим могут устанавливаться в' \
' отапливаемые помещения с умеренным уровнем влажности.<br>'.format(
str(val),
)
except Exception as e:
pass
# -------
try:
if property['property']['name'] == 'Цветовая температура':
val = int(property['property_value'])
if val < 3001:
temp_txt = 'Теплый свет, генерируемый этой моделью способствует отдыху и расслаблению. ' \
'Он приятен для глаз. В связи с этим рекомендуется устанавливать {0} ' \
'с температурой {1}К в зоны отдыха, жилые комнаты и спальни, кафе, лаундж зоны. ' \
'Очень удачное решение для обеденных и гостинных комнат.<br>'.format(
product_data_Dict['product_type']['name_plural'].lower(),
str(val),
)
elif val < 4601:
temp_txt = 'Модель обладает нейтральным цветом свечения, который прекрасно подходит и как для жилых помещений и комнат, ' \
'так и для рабочих зон (офисов, кабинетов, производств) . ' \
'Данный свет стимулирует к работе не вызывая перенапряжения глаз и не искажая цветопередачу. ' \
'Универсальное и наиболее распространенное решение.<br>'.format(
str(val),
)
elif val < 7001:
temp_txt = 'Цветовая температура {0}К - наиболее оптимально использование в помещениях промышленного назначения, ' \
'административных зданиях, на производствах, складах, гаражах, паркингах. ' \
'Однако могут применяться и в интерьере для создания акцентов в дизайне, ' \
'либо если предпочтения потребителя отданы в пользу белого света. <br>'.format(
str(val),
)
else:
temp_txt = 'От показателя цветовой температуры зависит то, как Вы будут воспринимать предметы и другие объекты освещенные устройством. ' \
'С помощью цветовой температуры можно сделать более приятным отдых и улучшить эффективность работы. ' \
'Отниситесь внимательно к выбору устройства по этому параметру.<br>'.format(
str(val),
)
except Exception as e:
pass
# -------
try:
if property['property']['name'] == 'Тип монтажа':
val = property['property_value']
if val == 'встраиваемый':
install_txt = 'Устройство устанавливается в предварительно вырезанное в поверхности отверстие. ' \
'Этот вариант монтажа используется для подвесных и натяжных потолков, а так же для фальш-стен и ниш.'.format(
str(val),
)
elif val == 'накладной':
install_txt = 'Способ крепления - накладной. Значит эта модель может быть закреплена на любую ровную поверхность.'.format(
str(val),
)
elif val == 'встраиваемый/накладной':
install_txt = '{0} обладает возможностью монтажа как в отверстия на поверхности плоскостей, так и на любую ровную поверхность.'.format(
product_data_Dict['article'],
)
else:
pass
if 'height_visible_part' in product_data_Dict and product_data_Dict['height_visible_part']:
install_txt = install_txt + ' Высота видимой части устройства после монтажа составит {0}мм.<br>'.format(
str(round(product_data_Dict['height_visible_part']))
)
else:
install_txt = install_txt + '<br>'
except Exception as e:
pass
product_data_Dict['seo_text'] = '{0}{1}{2}{3}{4}{5}'.format(
diametr_txt,
power_txt,
lm_txt,
ip_txt,
temp_txt,
install_txt
)
return product_data_Dict

View File

@@ -0,0 +1,24 @@
from django.utils.translation import gettext as _
from django.utils.safestring import mark_safe
def get_phone_valid_error(val):
allow_chars = '01234567890()+ -'
error_msg = mark_safe(_('Некорректные символы в номере, введите номер в международном формате с кодом страны'))
if not val:
return None
if len(val) < 10:
return error_msg
if '+' in val and val[0] != '+':
return error_msg
i = 0
while i < len(val):
if val[i] not in allow_chars:
return error_msg
i += 1
return None

0
BillingApp/__init__.py Normal file
View File

39
BillingApp/admin.py Normal file
View File

@@ -0,0 +1,39 @@
from sets.admin import *
from .models import *
from django.contrib import admin
class Admin_SubscribeOrder(Admin_BaseModel):
fieldsets = (
(None, {
'classes': ['wide'],
'fields': (
('user', 'subscribe', 'subscribe_for_user'),
('enable', 'order'),
('sum', 'currency'),
('status', 'last_operation_status'),
('bank_order_id', 'pay_page'),
'json_data',
)
}),
)
list_display = [
'id', 'enable',
'user', 'subscribe', 'subscribe_for_user',
'bank_order_id',
'sum', 'currency',
'status', 'last_operation_status',
'order', 'modifiedDT', 'createDT'
]
list_display_links = ['id', 'user', 'subscribe']
list_editable = ['enable']
readonly_fields = ['subscribe_for_user', 'sum', 'currency', 'modifiedDT', 'createDT']
list_filter = ['enable', 'status', 'modifiedDT', 'createDT']
search_fields = ['id', 'last_operation_status', 'status']
# filter_horizontal = ['options']
admin.site.register(SubscribeOrder, Admin_SubscribeOrder)

6
BillingApp/apps.py Normal file
View File

@@ -0,0 +1,6 @@
from django.apps import AppConfig
class BillingappConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'BillingApp'

101
BillingApp/funcs.py Normal file
View File

@@ -0,0 +1,101 @@
from datetime import datetime, timedelta
from .models import *
import json
def get_order_status(order):
from BaseModels.pay_systems.DVL_Group_kaz.api.funcs import get_order_status
res_status = None
if not order or not order.bank_order_id:
return order
try:
res_data = get_order_status(order.bank_order_id)
res = json.loads(res_data.text)
res = res['orders'][0]
order.json_data['status'] = res
order.status = res['status']
# if res['amount'] == res['amount_charged'] and res['status'] == 'charged':
order.save()
# return order.status
except Exception as e:
msg = f'Exception get_order_status = {str(e)}'
if order:
msg = f'Exception get_order_status (data = {str(order.id)}) = {str(e)}'
print(msg)
return order
def get_orders_for_user(user):
orders = SubscribeOrder.objects.filter(
enable=True,
user=user,
subscribe_for_user=None,
createDT__gt=datetime.now() - timedelta(hours=1)
).order_by('subscribe', '-createDT').distinct('subscribe')
SubscribeOrder.objects.filter(
user=user
).exclude(
id__in=orders.values_list('id', flat=True)
).update(enable=False)
return orders
def create_subscribe_order(data):
order = None
try:
order = SubscribeOrder.objects.create(**data)
from GeneralApp.funcs_options import get_options_by_opt_types, get_mail_send_options
sets = get_options_by_opt_types(['domain', 'project_name'], only_vals=True)
from BaseModels.pay_systems.DVL_Group_kaz.api.funcs import create_order
data = {
'currency': data['currency'],
'amount': data['sum'],
'description': f'Заказ {order.id} на подписку '
f'{data["subscribe"].name} '
f'для пользователя {data["user"].username}',
'options': {
'force3d': 1,
'auto_charge': 1,
'return_url': f'{sets["domain"]}/profile/page/my_subscribe/'
}
}
res_data = create_order(data)
order.pay_page = res_data.headers.get('location')
res = json.loads(res_data.text)
res = res['orders'][0]
order.json_data['create_order'] = res
order.modifiedDT = datetime.strptime(res['updated'], '%Y-%m-%d %H:%M:%S')
order.status = res['status']
order.bank_order_id = res['id']
if 'segment' in res:
order.segment = res['segment']
if 'merchant_order_id' in res:
order.merchant_order_id = res['merchant_order_id']
order.save()
except Exception as e:
msg = f'Exception create_subscribe_order (data = {str(data)}) = {str(e)}'
print(msg)
return order

View File

@@ -0,0 +1,42 @@
# Generated by Django 4.2.2 on 2024-04-19 16:24
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
initial = True
dependencies = [
('SubscribesApp', '0003_alter_subscribe_bg_color_alter_subscribe_text_color'),
]
operations = [
migrations.CreateModel(
name='SubscribeOrder',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.TextField(blank=True, help_text='Название', null=True, verbose_name='Название')),
('name_plural', models.TextField(blank=True, null=True, verbose_name='Название (множественное число)')),
('order', models.IntegerField(blank=True, null=True, verbose_name='Очередность отображения')),
('createDT', models.DateTimeField(auto_now_add=True, verbose_name='Дата и время создания')),
('modifiedDT', models.DateTimeField(blank=True, null=True, verbose_name='Дата и время последнего изменения')),
('enable', models.BooleanField(db_index=True, default=True, verbose_name='Включено')),
('json_data', models.JSONField(blank=True, default=dict, verbose_name='Дополнительные данные')),
('sum', models.PositiveSmallIntegerField(verbose_name='Сумма')),
('currency', models.CharField(max_length=3, verbose_name='Валюта')),
('segment', models.CharField(verbose_name='ID Сегмента')),
('merchant_order_id', models.CharField(verbose_name='merchant_order_id')),
('bank_order_id', models.CharField(verbose_name='ID заказа в банке')),
('status', models.CharField(verbose_name='Статус заказа в банке')),
('subscribe', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='subscribe_orders_for_subscribe', to='SubscribesApp.subscribe', verbose_name='Подписка')),
('subscribe_for_user', models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='subscribe_orders_for_user_subscribe', to='SubscribesApp.subscribeforuser', verbose_name='Подписка пользователя')),
('user', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='subscribe_orders_for_user', to='SubscribesApp.subscribe', verbose_name='Пользователь')),
],
options={
'verbose_name': 'Заказ на подписку',
'verbose_name_plural': 'Заказы на подписки',
},
),
]

View File

@@ -0,0 +1,21 @@
# Generated by Django 4.2.2 on 2024-04-19 16:29
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('BillingApp', '0001_initial'),
]
operations = [
migrations.AlterField(
model_name='subscribeorder',
name='user',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='subscribe_orders_for_user', to=settings.AUTH_USER_MODEL, verbose_name='Пользователь'),
),
]

View File

@@ -0,0 +1,43 @@
# Generated by Django 4.2.2 on 2024-04-19 16:36
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('BillingApp', '0002_alter_subscribeorder_user'),
]
operations = [
migrations.AddField(
model_name='subscribeorder',
name='pay_page',
field=models.URLField(blank=True, default=None, null=True, verbose_name='Ссылка на страницу оплаты'),
),
migrations.AlterField(
model_name='subscribeorder',
name='bank_order_id',
field=models.CharField(default='', verbose_name='ID заказа в банке'),
),
migrations.AlterField(
model_name='subscribeorder',
name='merchant_order_id',
field=models.CharField(default='', verbose_name='merchant_order_id'),
),
migrations.AlterField(
model_name='subscribeorder',
name='segment',
field=models.CharField(default='', verbose_name='ID Сегмента'),
),
migrations.AlterField(
model_name='subscribeorder',
name='status',
field=models.CharField(default='', verbose_name='Статус заказа в банке'),
),
migrations.AlterField(
model_name='subscribeorder',
name='sum',
field=models.PositiveSmallIntegerField(default=0, verbose_name='Сумма'),
),
]

View File

@@ -0,0 +1,38 @@
# Generated by Django 4.2.2 on 2024-04-19 16:47
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('BillingApp', '0003_subscribeorder_pay_page_and_more'),
]
operations = [
migrations.AlterField(
model_name='subscribeorder',
name='bank_order_id',
field=models.CharField(default=None, null=True, verbose_name='ID заказа в банке'),
),
migrations.AlterField(
model_name='subscribeorder',
name='currency',
field=models.CharField(default='USD', max_length=3, verbose_name='Валюта'),
),
migrations.AlterField(
model_name='subscribeorder',
name='merchant_order_id',
field=models.CharField(default=None, null=True, verbose_name='merchant_order_id'),
),
migrations.AlterField(
model_name='subscribeorder',
name='segment',
field=models.CharField(default=None, null=True, verbose_name='ID Сегмента'),
),
migrations.AlterField(
model_name='subscribeorder',
name='status',
field=models.CharField(default=None, null=True, verbose_name='Статус заказа в банке'),
),
]

View File

@@ -0,0 +1,18 @@
# Generated by Django 4.2.2 on 2024-04-19 17:57
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('BillingApp', '0004_alter_subscribeorder_bank_order_id_and_more'),
]
operations = [
migrations.AddField(
model_name='subscribeorder',
name='last_operation_status',
field=models.CharField(default=None, null=True, verbose_name='Статус последней операции'),
),
]

View File

@@ -0,0 +1,18 @@
# Generated by Django 4.2.2 on 2024-07-12 17:23
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('BillingApp', '0005_subscribeorder_last_operation_status'),
]
operations = [
migrations.AlterField(
model_name='subscribeorder',
name='currency',
field=models.CharField(default='KZT', max_length=3, verbose_name='Валюта'),
),
]

View File

75
BillingApp/models.py Normal file
View File

@@ -0,0 +1,75 @@
from django.db import models
from BaseModels.base_models import BaseModel
from SubscribesApp.models import Subscribe, SubscribeForUser
from AuthApp.models import User
from django.utils.translation import gettext as _
class SubscribeOrder(BaseModel):
subscribe = models.ForeignKey(
Subscribe, verbose_name=_('Подписка'),
on_delete=models.SET_NULL, blank=True, null=True,
related_name='subscribe_orders_for_subscribe'
)
user = models.ForeignKey(
User, verbose_name=_('Пользователь'),
on_delete=models.SET_NULL, blank=True, null=True,
related_name='subscribe_orders_for_user'
)
subscribe_for_user = models.OneToOneField(
SubscribeForUser, verbose_name=_('Подписка пользователя'),
on_delete=models.SET_NULL, blank=True, null=True,
related_name='subscribe_orders_for_user_subscribe'
)
sum = models.PositiveSmallIntegerField(verbose_name=_('Сумма'), default=0)
currency = models.CharField(verbose_name=_('Валюта'), max_length=3, default='KZT')
segment = models.CharField(verbose_name=_('ID Сегмента'), null=True, default=None)
merchant_order_id = models.CharField(verbose_name=_('merchant_order_id'), null=True, default=None)
bank_order_id = models.CharField(verbose_name=_('ID заказа в банке'), null=True, default=None)
status = models.CharField(verbose_name=_('Статус заказа в банке'), null=True, default=None)
last_operation_status = models.CharField(verbose_name=_('Статус последней операции'), null=True, default=None)
pay_page = models.URLField(verbose_name=_('Ссылка на страницу оплаты'), null=True, blank=True, default=None)
class Meta:
verbose_name = _('Заказ на подписку')
verbose_name_plural = _('Заказы на подписки')
def activate_subscribe_for_user(self):
from datetime import datetime, timedelta
kwargs = {
'user': self.user,
'subscribe': self.subscribe,
'last_paid_DT': datetime.now(),
'receive_finish_subscribe_msg': True,
# 'enable': True,
}
from SubscribesApp.funcs import create_subscribe_by_data
subscribe_for_user = create_subscribe_by_data(kwargs)
self.subscribe_for_user = subscribe_for_user
self.enable = False
self.save()
subscribe_for_user.activate(
paid_period_from_DT=datetime.now(),
paid_period_to_DT=datetime.now() + timedelta(hours=self.subscribe.period)
)
return self
def __str__(self):
res = 'Заказ'
if self.subscribe:
res += f' на подписку {self.subscribe.name}'
if self.user:
res += f' для {self.user.username}'
if not res:
res += f' {str(self.id)}'
return res

3
BillingApp/tests.py Normal file
View File

@@ -0,0 +1,3 @@
from django.test import TestCase
# Create your tests here.

3
BillingApp/views.py Normal file
View File

@@ -0,0 +1,3 @@
from django.shortcuts import render
# Create your views here.

View File

@@ -1,6 +1,11 @@
from sets.admin import * from sets.admin import *
from .models import * from .models import *
from django.contrib import admin from django.contrib import admin
from django import forms
from django.forms import widgets
class Admin_MsgGroup(Admin_BaseModel): class Admin_MsgGroup(Admin_BaseModel):
list_display = [ list_display = [
@@ -11,8 +16,33 @@ class Admin_MsgGroup(Admin_BaseModel):
admin.site.register(MsgGroup,Admin_MsgGroup) admin.site.register(MsgGroup,Admin_MsgGroup)
class Admin_Message(Admin_BaseModel): class Admin_Message(Admin_BaseModel):
def cut_group_text(self, obj):
if obj.group:
return obj.group.name[:10]
return '-'
cut_group_text.allow_tags = True
cut_group_text.short_description = 'ticket'
def cut_text(self, obj):
if obj.text:
if len(obj.text) > 20:
return f'{obj.text[:20]}...'
else:
return obj.text
return '-'
cut_text.allow_tags = True
cut_text.short_description = 'сообщение'
search_fields = ['group__name', 'text', 'name', 'id']
list_filter = ['status']
list_display = [ list_display = [
'id', 'msg_type', 'group', 'status', 'sender', 'receiver', 'text', 'id',
# 'msg_type',
'cut_group_text', 'status', 'sender', 'receiver', 'cut_text',
'name', 'name',
'order', 'modifiedDT', 'createDT' 'order', 'modifiedDT', 'createDT'
] ]

View File

@@ -1,3 +1,5 @@
import copy
from .models import * from .models import *
from django.db.models import Q, Value as V, Count, OuterRef, Subquery from django.db.models import Q, Value as V, Count, OuterRef, Subquery
from django.http import HttpResponse, Http404, JsonResponse from django.http import HttpResponse, Http404, JsonResponse
@@ -10,6 +12,16 @@ from django.template.loader import render_to_string
from django.urls import reverse from django.urls import reverse
import json import json
from datetime import datetime, time from datetime import datetime, time
from django.conf import settings
from AuthApp.funcs import get_user_timezone_Dict
def get_unanswered_msgs_count_for_user(user):
if not user or not user.is_authenticated:
return 0
msgs = Message.objects.filter(receiver=user, status='sended', group=None)
return msgs.count()
@@ -45,11 +57,22 @@ def get_update_chat_Dict(data):
receiver = User.objects.get(id=data['receiver']) receiver = User.objects.get(id=data['receiver'])
if data['sender'] == data['cur_user']: if data['sender'] == data['cur_user']:
context_Dict.update({'user': sender}) user = copy.copy(sender)
cur_receiver = copy.copy(receiver)
else: else:
context_Dict.update({'user': receiver}) user = copy.copy(receiver)
cur_receiver = copy.copy(sender)
# context_Dict.update({'user': receiver})
context_Dict.update({'cur_receiver': receiver}) # context_Dict.update({'cur_receiver': receiver})
context_Dict.update({
'cur_receiver': cur_receiver,
'user': user,
})
context_Dict.update(get_user_timezone_Dict(user))
if sender == receiver:
print('!')
required_beep = data['required_beep'] required_beep = data['required_beep']
@@ -63,7 +86,10 @@ def get_update_chat_Dict(data):
# формируем правую панель # формируем правую панель
context_Dict.update({'receivers': receivers}) context_Dict.update({
'receivers': receivers,
'MEDIA_URL': settings.MEDIA_URL
})
users_list_html = render_to_string( users_list_html = render_to_string(
'blocks/profile/b_list_of_users_messenger.html', context_Dict) 'blocks/profile/b_list_of_users_messenger.html', context_Dict)
res_Dict.update({ res_Dict.update({
@@ -87,7 +113,10 @@ def get_update_chat_Dict(data):
if ticket.manager: if ticket.manager:
context_Dict.update({'new_msg_allow': True}) context_Dict.update({'new_msg_allow': True})
context_Dict.update({'messages': msgs}) context_Dict.update({
'messages': msgs,
'MEDIA_URL': settings.MEDIA_URL,
})
html = render_to_string(tpl_name, context_Dict) html = render_to_string(tpl_name, context_Dict)
if required_full_support_chat_html: if required_full_support_chat_html:
res_Dict.update({'support_chat_html': html}) res_Dict.update({'support_chat_html': html})
@@ -262,6 +291,7 @@ def send_msg(data):
def get_chat_page_content_html(request, receiver_id=None): def get_chat_page_content_html(request, receiver_id=None):
from AuthApp.models import User from AuthApp.models import User
from AuthApp.funcs import get_user_timezone_Dict
msgs = [] msgs = []
try: try:
@@ -281,6 +311,7 @@ def get_chat_page_content_html(request, receiver_id=None):
'receivers': receivers, 'receivers': receivers,
'page': 'chat', 'page': 'chat',
} }
Dict.update(get_user_timezone_Dict(request.user, request=request))
tpl_name = 'blocks/profile/b_chats.html' tpl_name = 'blocks/profile/b_chats.html'
html = render_to_string(tpl_name, Dict, request=request) html = render_to_string(tpl_name, Dict, request=request)

View File

@@ -18,12 +18,15 @@ from channels.layers import get_channel_layer
from asgiref.sync import async_to_sync from asgiref.sync import async_to_sync
@login_required(login_url='/profile/login/') @login_required()#login_url='/profile/login/')
def get_file_from_msg_ajax(request): def get_file_from_msg_ajax(request):
if request.method != 'POST': if request.method != 'POST':
raise Http404 raise Http404
from GeneralApp.funcs import get_and_set_lang
lang = get_and_set_lang(request)
try: try:
data = json.loads(request.body) data = json.loads(request.body)
@@ -35,7 +38,9 @@ def get_file_from_msg_ajax(request):
res_Dict = file res_Dict = file
break break
return JsonResponse(res_Dict, status=200) from GeneralApp.funcs import get_add_to_ajax_response_Dict
res_Dict.update(get_add_to_ajax_response_Dict(request.user))
return JsonResponse(res_Dict)
except Exception as e: except Exception as e:
msg = f'get_file_from_msg_ajax Error = {str(e)}' msg = f'get_file_from_msg_ajax Error = {str(e)}'
@@ -43,23 +48,29 @@ def get_file_from_msg_ajax(request):
@login_required(login_url='/profile/login/') @login_required()#login_url='/profile/login/')
def show_chat_w_user_ajax(request): def show_chat_w_user_ajax(request):
if request.method != 'POST': if request.method != 'POST':
raise Http404 raise Http404
from GeneralApp.funcs import get_and_set_lang
lang = get_and_set_lang(request)
try: try:
data = json.loads(request.body) data = json.loads(request.body)
Dict = get_chat_page_content_Dict(request, data['user_id']) Dict = get_chat_page_content_Dict(request, data['user_id'])
Dict.update(get_user_timezone_Dict(request.user, request=request))
tpl_name = 'blocks/profile/b_chats.html' tpl_name = 'blocks/profile/b_chats.html'
html = render_to_string(tpl_name, Dict, request=request) html = render_to_string(tpl_name, Dict, request=request)
return JsonResponse({'html': html}, status=200)
res_Dict = {'html': html}
from GeneralApp.funcs import get_add_to_ajax_response_Dict
res_Dict.update(get_add_to_ajax_response_Dict(request.user))
return JsonResponse(res_Dict)
except Exception as e: except Exception as e:
msg = f'show_chat_w_user_ajax Error = {str(e)}' msg = f'show_chat_w_user_ajax Error = {str(e)}'
@@ -73,6 +84,9 @@ def update_chat_ajax2(request):
if request.method != 'POST': if request.method != 'POST':
raise Http404 raise Http404
from GeneralApp.funcs import get_and_set_lang
lang = get_and_set_lang(request)
res_Dict = {} res_Dict = {}
msgs = [] msgs = []
Dict = {} Dict = {}
@@ -99,7 +113,7 @@ def update_chat_ajax2(request):
receiver = User.objects.get(id=data['receiver']) receiver = User.objects.get(id=data['receiver'])
context_Dict.update({'cur_receiver': receiver}) context_Dict.update({'cur_receiver': receiver})
context_Dict.update(get_user_timezone_Dict(request.user, request=request))
if not ticket: if not ticket:
@@ -123,6 +137,7 @@ def update_chat_ajax2(request):
# формируем правую панель # формируем правую панель
context_Dict.update({'receivers': receivers}) context_Dict.update({'receivers': receivers})
users_list_html = render_to_string( users_list_html = render_to_string(
'blocks/profile/b_list_of_users_messenger.html', context_Dict, request=request) 'blocks/profile/b_list_of_users_messenger.html', context_Dict, request=request)
res_Dict.update({ res_Dict.update({
@@ -146,7 +161,9 @@ def update_chat_ajax2(request):
res_Dict.update({ res_Dict.update({
'required_beep': required_beep, 'required_beep': required_beep,
}) })
return JsonResponse(res_Dict, status=200) from GeneralApp.funcs import get_add_to_ajax_response_Dict
res_Dict.update(get_add_to_ajax_response_Dict(request.user))
return JsonResponse(res_Dict)
except Exception as e: except Exception as e:
msg = f'update_chat_ajax2 Error = {str(e)}' msg = f'update_chat_ajax2 Error = {str(e)}'
@@ -161,6 +178,9 @@ def update_chat_ajax(request):
if request.method != 'POST': if request.method != 'POST':
raise Http404 raise Http404
from GeneralApp.funcs import get_and_set_lang
lang = get_and_set_lang(request)
res_Dict = {} res_Dict = {}
msgs = [] msgs = []
Dict = {} Dict = {}
@@ -190,6 +210,7 @@ def update_chat_ajax(request):
receiver = User.objects.get(id=data['receiver']) receiver = User.objects.get(id=data['receiver'])
context_Dict.update({'cur_receiver': receiver}) context_Dict.update({'cur_receiver': receiver})
context_Dict.update(get_user_timezone_Dict(request.user, request=request))
if ticket: if ticket:
@@ -201,6 +222,8 @@ def update_chat_ajax(request):
context_Dict.update({'messages': msgs}) context_Dict.update({'messages': msgs})
context_Dict = get_ticketsDict_for_staff(request.user) context_Dict = get_ticketsDict_for_staff(request.user)
context_Dict.update(get_user_timezone_Dict(request.user))
tickets_list_html = render_to_string( tickets_list_html = render_to_string(
'blocks/profile/b_list_of_tickets_support_chat.html', context_Dict, request=request) 'blocks/profile/b_list_of_tickets_support_chat.html', context_Dict, request=request)
res_Dict.update({ res_Dict.update({
@@ -220,6 +243,8 @@ def update_chat_ajax(request):
required_beep = True required_beep = True
context_Dict.update({'receivers': receivers}) context_Dict.update({'receivers': receivers})
context_Dict.update(get_user_timezone_Dict(request.user))
users_list_html = render_to_string( users_list_html = render_to_string(
'blocks/profile/b_list_of_users_messenger.html', context_Dict, request=request) 'blocks/profile/b_list_of_users_messenger.html', context_Dict, request=request)
res_Dict.update({ res_Dict.update({
@@ -249,14 +274,17 @@ def update_chat_ajax(request):
res_Dict.update({ res_Dict.update({
'required_beep': required_beep, 'required_beep': required_beep,
}) })
return JsonResponse(res_Dict, status=200)
from GeneralApp.funcs import get_add_to_ajax_response_Dict
res_Dict.update(get_add_to_ajax_response_Dict(request.user))
return JsonResponse(res_Dict)
except Exception as e: except Exception as e:
msg = f'update_chat_ajax Error = {str(e)}' msg = f'update_chat_ajax Error = {str(e)}'
return JsonResponse({'error': msg}, status=400) return JsonResponse({'error': msg}, status=400)
# @login_required(login_url='/profile/login/') # @login_required()#login_url='/profile/login/')
# def send_msg_ajax(request): # def send_msg_ajax(request):
# from AuthApp.models import User # from AuthApp.models import User
# #
@@ -368,12 +396,15 @@ def update_chat_ajax(request):
@login_required(login_url='/profile/login/') @login_required()#login_url='/profile/login/')
def support_show_chat_by_ticket_ajax(request): def support_show_chat_by_ticket_ajax(request):
if request.method != 'POST': if request.method != 'POST':
raise Http404 raise Http404
from GeneralApp.funcs import get_and_set_lang
lang = get_and_set_lang(request)
try: try:
data = json.loads(request.body) data = json.loads(request.body)
@@ -402,44 +433,64 @@ def support_show_chat_by_ticket_ajax(request):
'ticket': ticket, 'ticket': ticket,
'messages': msgs, 'messages': msgs,
'cur_receiver': cur_receiver, 'cur_receiver': cur_receiver,
'new_msg_allow': new_msg_allow 'new_msg_allow': new_msg_allow,
'staff': request.user.is_staff,
# 'mobile': data['mobile']
} }
Dict.update(get_ticketsDict_for_staff(request.user)) Dict.update(get_ticketsDict_for_staff(request.user))
tpl_name = 'blocks/profile/b_support_chat.html' Dict.update(get_user_timezone_Dict(request.user))
tpl_name = 'blocks/profile/b_support_chat.html'
Dict.update(get_user_timezone_Dict(request.user, request=request))
html = render_to_string(tpl_name, Dict, request=request) html = render_to_string(tpl_name, Dict, request=request)
return JsonResponse({'html': html}, status=200)
res_Dict = {'html': html}
from GeneralApp.funcs import get_add_to_ajax_response_Dict
res_Dict.update(get_add_to_ajax_response_Dict(request.user))
return JsonResponse(res_Dict)
except Exception as e: except Exception as e:
msg = f'support_show_chat_by_ticket_ajax Error = {str(e)}' msg = f'support_show_chat_by_ticket_ajax Error = {str(e)}'
return JsonResponse({'error': msg}, status=400) return JsonResponse({'error': msg}, status=400)
@login_required(login_url='/profile/login/') @login_required()#login_url='/profile/login/')
def support_create_ticket_form_ajax(request): def support_create_ticket_form_ajax(request):
from ChatServiceApp.forms import TicketForm from ChatServiceApp.forms import TicketForm
if request.method != 'POST': if request.method != 'POST':
raise Http404 raise Http404
from GeneralApp.funcs import get_and_set_lang
lang = get_and_set_lang(request)
Dict = { Dict = {
'form': TicketForm() 'form': TicketForm()
} }
Dict.update(get_user_timezone_Dict(request.user))
tpl_name = 'blocks/profile/b_create_ticket.html' tpl_name = 'blocks/profile/b_create_ticket.html'
html = render_to_string(tpl_name, Dict, request=request) html = render_to_string(tpl_name, Dict, request=request)
return JsonResponse({'html': html}, status=200)
res_Dict = {'html': html}
from GeneralApp.funcs import get_add_to_ajax_response_Dict
res_Dict.update(get_add_to_ajax_response_Dict(request.user))
return JsonResponse(res_Dict)
@login_required(login_url='/profile/login/') @login_required()#login_url='/profile/login/')
def create_ticket_ajax(request): def create_ticket_ajax(request):
from ChatServiceApp.forms import TicketForm from ChatServiceApp.forms import TicketForm
if request.method != 'POST': if request.method != 'POST':
raise Http404 raise Http404
from GeneralApp.funcs import get_and_set_lang
lang = get_and_set_lang(request)
try: try:
data = request.POST data = request.POST
@@ -448,6 +499,8 @@ def create_ticket_ajax(request):
if not form.is_valid(): if not form.is_valid():
form.initial = form.cleaned_data form.initial = form.cleaned_data
Dict = {'form': form} Dict = {'form': form}
Dict.update(get_user_timezone_Dict(request.user))
html = render_to_string('blocks/profile/b_create_ticket.html', Dict, request=request) html = render_to_string('blocks/profile/b_create_ticket.html', Dict, request=request)
return JsonResponse({'html': html}, status=400) return JsonResponse({'html': html}, status=400)
@@ -488,19 +541,25 @@ def create_ticket_ajax(request):
'messages': msgs_for_ticket 'messages': msgs_for_ticket
} }
Dict.update(get_user_timezone_Dict(request.user))
html = render_to_string('blocks/profile/b_support_chat.html', Dict, request=request) html = render_to_string('blocks/profile/b_support_chat.html', Dict, request=request)
res_Dict = { res_Dict = {
'html': html 'html': html
} }
from GeneralApp.funcs import get_add_to_ajax_response_Dict
res_Dict.update(get_add_to_ajax_response_Dict(request.user))
return JsonResponse(res_Dict) return JsonResponse(res_Dict)
except Exception as e: except Exception as e:
msg = f'{_("ошибка в запросе")} = {str(e)}'
errors_Dict = { errors_Dict = {
'errors': { 'errors': {
'all__': f'ошибка в запросе = {str(e)}' 'all__': msg
} }
} }
Dict = {'form': errors_Dict} Dict = {'form': errors_Dict}

View File

@@ -3,41 +3,53 @@ from BaseModels.base_models import BaseModel
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
msg_type_choices = ( msg_type_choices = (
('support', 'техподдержка'), ('support', _('техподдержка')),
('private', 'личное') ('private', _('личное'))
) )
msg_status_choices = ( msg_status_choices = (
('sended', 'Отправлено'), ('sended', _('Отправлено')),
('seen', 'Просмотрено') ('seen', _('Просмотрено'))
) )
grp_msg_status = ( grp_msg_status = (
('open', 'Открыт'), ('open', _('Открыт')),
('answered', 'Отвечен'), ('answered', _('Отвечен')),
('closed', 'Закрыт') ('closed', _('Закрыт'))
) )
grp_msg_department = ( grp_msg_department = (
('support', 'Отдел: Техническая поддержка'), ('support', _('Отдел: Техническая поддержка')),
('finance', 'Отдел: Финансовый департамент'), ('finance', _('Отдел: Финансовый департамент')),
) )
class MsgGroup(BaseModel): class MsgGroup(BaseModel):
from AuthApp.models import User from AuthApp.models import User
department = models.CharField(verbose_name='Отдел', default='support', choices=grp_msg_department) department = models.CharField(verbose_name=_('Отдел'), default='support', choices=grp_msg_department)
status = models.CharField(verbose_name='Статус', default='open', choices=grp_msg_status) status = models.CharField(verbose_name=_('Статус'), default='open', choices=grp_msg_status)
text = models.TextField(verbose_name='Сообщение') text = models.TextField(verbose_name=_('Сообщение'))
owner = models.ForeignKey(User, verbose_name=_('Владелец'), related_name='rel_msgGroups_for_owner', owner = models.ForeignKey(User, verbose_name=_('Владелец'), related_name='rel_msgGroups_for_owner',
on_delete=models.SET_NULL, null=True) on_delete=models.SET_NULL, null=True)
manager = models.ForeignKey(User, verbose_name=_('Менеджер'), related_name='rel_msgGroups_for_manager', manager = models.ForeignKey(User, verbose_name=_('Менеджер'), related_name='rel_msgGroups_for_manager',
on_delete=models.SET_NULL, null=True) on_delete=models.SET_NULL, null=True)
def get_last_msg_txt(self):
msg = self.rel_messages_for_group.all().order_by('-createDT').first()
if not msg:
return self.text
if msg.text:
return msg.text
elif msg.files:
return msg.files[0]['file_name']
return self.name
class Meta: class Meta:
verbose_name = _('Тикет') verbose_name = _('Тикет')
verbose_name_plural = _('Тикеты') verbose_name_plural = _('Тикеты')
@@ -46,23 +58,23 @@ class MsgGroup(BaseModel):
class Message(BaseModel): class Message(BaseModel):
from AuthApp.models import User from AuthApp.models import User
msg_type = models.CharField(max_length=50, verbose_name='Тип сообщения', default='private', choices=msg_type_choices) msg_type = models.CharField(max_length=50, verbose_name=_('Тип сообщения'), default='private', choices=msg_type_choices)
group = models.ForeignKey( group = models.ForeignKey(
MsgGroup, verbose_name='Группа сообщений', related_name='rel_messages_for_group', MsgGroup, verbose_name=_('Группа сообщений'), related_name='rel_messages_for_group',
on_delete=models.SET_NULL, null=True) on_delete=models.SET_NULL, null=True)
sender = models.ForeignKey( sender = models.ForeignKey(
User, verbose_name='Отправитель', on_delete=models.CASCADE, related_name='rel_messages_for_sender' User, verbose_name=_('Отправитель'), on_delete=models.CASCADE, related_name='rel_messages_for_sender'
) )
receiver = models.ForeignKey( receiver = models.ForeignKey(
User, verbose_name='Получатель', on_delete=models.CASCADE, related_name='rel_messages_for_receiver' User, verbose_name=_('Получатель'), on_delete=models.CASCADE, related_name='rel_messages_for_receiver'
) )
text = models.TextField(verbose_name='Сообщение') text = models.TextField(verbose_name=_('Сообщение'))
status = models.CharField(verbose_name='Статус', default='sended', choices=msg_status_choices) status = models.CharField(verbose_name=_('Статус'), default='sended', choices=msg_status_choices)
files = models.JSONField(verbose_name='Прикрепленные файлы', default=dict) files = models.JSONField(verbose_name=_('Прикрепленные файлы'), default=dict)
class Meta: class Meta:
verbose_name = _('Сообщение') verbose_name = _('Сообщение')

View File

@@ -41,6 +41,10 @@ def get_filesize(size):
@register.simple_tag @register.simple_tag
def get_msg_side(cur_user, ticket, msg): def get_msg_side(cur_user, ticket, msg):
if msg: if msg:
# if msg.sender == cur_user:
# return 'left'
# else:
# return 'right'
if msg.sender == cur_user: if msg.sender == cur_user:
return 'right' return 'right'
else: else:

15
Flagpack/AD - Andorra.svg Normal file
View File

@@ -0,0 +1,15 @@
<svg width="32" height="24" viewBox="0 0 32 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_270_67315)">
<rect width="32" height="24" fill="white"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M8 0H24V24H8V0Z" fill="#FFD018"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M0 0H8V24H0V0Z" fill="#2E42A5"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M24 0H32V24H24V0Z" fill="#E31D1C"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M16.2991 19.4236C16.5201 19.3615 16.7102 18.9772 16.7102 18.9772C16.7102 18.9772 16.8545 19.09 17.0834 19.2048C17.3122 19.3195 17.5501 18.9772 17.5501 18.9772C17.5501 18.9772 17.8751 18.9772 18.0176 18.5937C18.1602 18.2103 17.7332 18.046 17.7332 18.046C17.7332 18.046 18.2323 17.5217 19.0749 17.5217C19.9176 17.5217 20.5734 17.5217 21.1232 17.2883C21.6731 17.0549 22.2073 16.6536 22.4072 15.8203C22.6071 14.9869 21.9744 14.4621 21.9744 14.4621C21.9744 14.4621 22.1145 14.5064 22.4072 14.267C22.6999 14.0276 22.2281 13.2572 21.9744 13.2572C21.7208 13.2572 21.6906 13.3998 21.6906 13.3998C21.6906 13.3998 21.5339 13.2638 21.3192 12.8014C21.1044 12.339 21.5339 11.933 21.5339 11.933C21.5339 11.933 21.7692 12.0679 21.9744 11.8454C22.1797 11.623 21.8678 11.2821 21.8678 11.2821C21.8678 11.2821 22.8559 10.9458 22.713 9.68177C22.5702 8.41774 21.2673 8.48963 21.2673 8.48963C21.2673 8.48963 21.3068 8.27946 21.1232 8.15968C20.9397 8.03991 20.8036 8.27946 20.8036 8.27946C20.6596 7.94606 21.082 7.48997 21.42 7.12497C21.5247 7.01186 21.6214 6.90751 21.6906 6.81826C21.983 6.44099 21.7994 5.9749 20.731 5.46617C19.6625 4.95744 19.0792 5.64116 18.9936 5.88344C18.908 6.12571 19.2395 6.27563 19.2395 6.27563C18.9691 6.51292 18.4461 6.60353 18.0897 6.43958C17.7332 6.27563 17.8912 5.77705 17.9649 5.64116C17.973 5.62629 17.9837 5.60827 17.9961 5.58746C18.0968 5.4181 18.3075 5.06401 18.0897 4.71967C17.8451 4.33302 17.4216 4.33302 17.0834 4.55258C16.7938 4.74051 16.3823 4.84015 16.2696 4.86497C16.157 4.84015 15.7455 4.74051 15.4559 4.55258C15.1177 4.33302 14.6942 4.33302 14.4496 4.71967C14.2318 5.06401 14.4424 5.4181 14.5432 5.58746C14.5556 5.60827 14.5663 5.62629 14.5744 5.64116C14.6481 5.77705 14.8061 6.27563 14.4496 6.43958C14.0931 6.60353 13.5702 6.51292 13.2998 6.27563C13.2998 6.27563 13.6313 6.12571 13.5457 5.88344C13.4601 5.64116 12.8768 4.95744 11.8083 5.46617C10.7399 5.9749 10.5563 6.44099 10.8487 6.81826C10.9179 6.90751 11.0145 7.01186 11.1193 7.12497C11.4573 7.48997 11.8797 7.94606 11.7356 8.27946C11.7356 8.27946 11.5996 8.03991 11.4161 8.15968C11.2325 8.27946 11.272 8.48963 11.272 8.48963C11.272 8.48963 9.9691 8.41774 9.82625 9.68177C9.68341 10.9458 10.6715 11.2821 10.6715 11.2821C10.6715 11.2821 10.3596 11.623 10.5648 11.8454C10.7701 12.0679 11.0054 11.933 11.0054 11.933C11.0054 11.933 11.4348 12.339 11.2201 12.8014C11.0054 13.2638 10.8487 13.3998 10.8487 13.3998C10.8487 13.3998 10.8185 13.2572 10.5648 13.2572C10.3112 13.2572 9.83938 14.0276 10.1321 14.267C10.4247 14.5064 10.5648 14.4621 10.5648 14.4621C10.5648 14.4621 9.93218 14.9869 10.1321 15.8203C10.332 16.6536 10.8662 17.0549 11.4161 17.2883C11.9659 17.5217 12.6217 17.5217 13.4644 17.5217C14.307 17.5217 14.8061 18.046 14.8061 18.046C14.8061 18.046 14.3791 18.2103 14.5217 18.5937C14.6642 18.9772 14.9891 18.9772 14.9891 18.9772C14.9891 18.9772 15.2271 19.3195 15.4559 19.2048C15.6847 19.09 15.8291 18.9772 15.8291 18.9772C15.8291 18.9772 16.0192 19.3615 16.2402 19.4236V19.4321C16.25 19.4321 16.2599 19.4313 16.2696 19.4299C16.2794 19.4313 16.2892 19.4321 16.2991 19.4321V19.4236Z" fill="#BF9937"/>
<path d="M12.1102 15.9978L12.2153 15.7437C13.423 16.2614 14.7973 16.5206 16.3392 16.5206C17.8802 16.5206 19.2176 16.2617 20.3521 15.7449L20.4627 15.9966C19.2913 16.5301 17.9165 16.7963 16.3392 16.7963C14.7626 16.7963 13.3526 16.5304 12.1102 15.9978Z" fill="#805440"/>
</g>
<defs>
<clipPath id="clip0_270_67315">
<rect width="32" height="24" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 3.8 KiB

View File

@@ -0,0 +1,14 @@
<svg width="32" height="24" viewBox="0 0 32 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_270_67414)">
<rect width="32" height="24" fill="white"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M0 0H32V24H0V0Z" fill="#F7FCFF"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M0 0V8H32V0H0Z" fill="#5EAA22"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M0 16V24H32V16H0Z" fill="#272727"/>
<rect width="10" height="24" fill="#E31D1C"/>
</g>
<defs>
<clipPath id="clip0_270_67414">
<rect width="32" height="24" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 589 B

View File

@@ -0,0 +1,21 @@
<svg width="32" height="24" viewBox="0 0 32 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_270_67316)">
<rect width="32" height="24" fill="white"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M22 0H32V24H22V0Z" fill="#67BD38"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M10 0H22V24H10V0Z" fill="#D51700"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M0 0H10V24H0V0Z" fill="#272727"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M12.4877 7.97687L12.8337 8.19402C12.2571 9.16451 11.8698 10.0538 11.6695 10.8622C11.7542 10.9404 11.8073 11.0088 11.8616 11.1028C12.018 11.3738 12.1496 11.6368 12.2562 11.892L11.7964 12.0878C11.7242 11.915 11.6391 11.7374 11.5412 11.5549C11.4943 11.9492 11.4975 12.3219 11.5505 12.6728C11.6346 12.6814 11.7052 12.6991 11.7869 12.7288C12.0809 12.8358 12.3508 12.9528 12.5965 13.0797L12.3701 13.5253C12.1606 13.417 11.9305 13.316 11.6798 13.2222L11.6848 13.2374C11.8985 13.8833 12.2256 14.4776 12.667 15.0205C12.736 15.0056 12.8002 15 12.8754 15C13.1882 15 13.4818 15.0176 13.7562 15.0528L13.6958 15.549C13.509 15.525 13.3115 15.5098 13.1033 15.5034C13.4999 15.9003 13.9655 16.2663 14.5005 16.6016L14.2895 16.9574C13.626 16.5416 13.0614 16.078 12.5962 15.5669C12.5356 15.5906 12.4618 15.6219 12.3678 15.663L12.3325 15.6783C12.7385 16.104 13.2185 16.4955 13.773 16.853L13.5576 17.206C12.9168 16.7929 12.3683 16.334 11.9127 15.8296C11.6952 15.8854 11.5118 15.8843 11.2973 15.8213L11.4308 15.3405C11.463 15.35 11.4946 15.357 11.5263 15.3615C11.1032 14.7985 10.7844 14.1845 10.5707 13.5199C10.5329 13.4025 10.5006 13.283 10.4736 13.1614C10.3079 13.1298 10.1681 13.0676 10.0231 12.9609L10.313 12.5547C10.338 12.5731 10.3632 12.5894 10.3892 12.6036C10.3373 11.9912 10.4088 11.33 10.6029 10.6202C10.4814 10.4803 10.407 10.3353 10.3612 10.1468L10.786 10.0371C11.0149 9.38877 11.3387 8.70275 11.7566 7.9791L12.1053 8.19178C11.6495 8.98088 11.3119 9.71805 11.0913 10.4034C11.1531 10.4595 11.2287 10.5196 11.3214 10.5883C11.5429 9.78224 11.9323 8.9117 12.4877 7.97687ZM11.1981 11.1185C11.1532 11.0835 11.0992 11.0431 11.0336 10.9947C11.0021 10.9715 10.972 10.9489 10.9431 10.9268C10.7886 11.5626 10.7431 12.1502 10.8055 12.6895C10.88 12.6901 10.9643 12.6869 11.0617 12.6808L11.141 12.6759C11.0748 12.1893 11.0941 11.6702 11.1981 11.1185ZM11.0832 13.1782C11.1426 13.1745 11.1945 13.1715 11.2403 13.1694C11.2586 13.2374 11.2789 13.3048 11.3009 13.3715C11.5154 14.0198 11.8354 14.6183 12.2601 15.167L12.1774 15.2029C12.1065 15.2339 12.0426 15.2604 11.9842 15.2824C11.5194 14.7081 11.1769 14.0772 10.9556 13.3891C10.9342 13.3226 10.9147 13.2552 10.8972 13.187C10.9556 13.1854 11.0174 13.1824 11.0832 13.1782Z" fill="#F7FCFF"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M19.499 7.97687L19.153 8.19402C19.7296 9.16451 20.1169 10.0538 20.3172 10.8622C20.2325 10.9404 20.1794 11.0088 20.1251 11.1028C19.9687 11.3738 19.8371 11.6368 19.7305 11.892L20.1903 12.0878C20.2625 11.915 20.3476 11.7374 20.4455 11.5549C20.4924 11.9492 20.4892 12.3219 20.4362 12.6728C20.3521 12.6814 20.2815 12.6991 20.1998 12.7288C19.9058 12.8358 19.6359 12.9528 19.3902 13.0797L19.6166 13.5253C19.8261 13.417 20.0562 13.316 20.3069 13.2222L20.3019 13.2374C20.0882 13.8833 19.7611 14.4776 19.3197 15.0205C19.2507 15.0056 19.1865 15 19.1113 15C18.7985 15 18.5049 15.0176 18.2305 15.0528L18.2909 15.549C18.4776 15.525 18.6752 15.5098 18.8834 15.5034C18.4868 15.9003 18.0212 16.2663 17.4861 16.6016L17.6972 16.9574C18.3607 16.5416 18.9253 16.078 19.3905 15.5669C19.4511 15.5906 19.5249 15.6219 19.6189 15.663L19.6542 15.6783C19.2482 16.104 18.7682 16.4955 18.2137 16.853L18.4291 17.206C19.0699 16.7929 19.6184 16.334 20.074 15.8296C20.2915 15.8854 20.4749 15.8843 20.6894 15.8213L20.5559 15.3405C20.5236 15.35 20.4921 15.357 20.4604 15.3615C20.8835 14.7985 21.2023 14.1845 21.416 13.5199C21.4538 13.4025 21.4861 13.283 21.5131 13.1614C21.6788 13.1298 21.8185 13.0676 21.9636 12.9609L21.6737 12.5547C21.6487 12.5731 21.6235 12.5894 21.5975 12.6036C21.6494 11.9912 21.5779 11.33 21.3838 10.6202C21.5053 10.4803 21.5797 10.3353 21.6254 10.1468L21.2007 10.0371C20.9718 9.38877 20.648 8.70275 20.23 7.9791L19.8814 8.19178C20.3372 8.98088 20.6748 9.71805 20.8954 10.4034C20.8336 10.4595 20.758 10.5196 20.6653 10.5883C20.4438 9.78224 20.0544 8.9117 19.499 7.97687ZM20.7886 11.1185C20.8335 11.0835 20.8875 11.0431 20.9531 10.9947C20.9846 10.9715 21.0147 10.9489 21.0436 10.9268C21.198 11.5626 21.2436 12.1502 21.1811 12.6895C21.1067 12.6901 21.0224 12.6869 20.925 12.6808L20.8457 12.6759C20.9118 12.1893 20.8926 11.6702 20.7886 11.1185ZM20.9035 13.1782C20.8441 13.1745 20.7922 13.1715 20.7464 13.1694C20.728 13.2374 20.7078 13.3048 20.6858 13.3715C20.4712 14.0198 20.1513 14.6183 19.7266 15.167L19.8093 15.2029C19.8802 15.2339 19.9441 15.2604 20.0025 15.2824C20.4673 14.7081 20.8098 14.0772 21.0311 13.3891C21.0525 13.3226 21.072 13.2552 21.0895 13.187C21.0311 13.1854 20.9693 13.1824 20.9035 13.1782Z" fill="#F7FCFF"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M14.253 16.2641L13.1367 17.3687C13.1367 17.3687 14.0994 17.9582 15.9137 17.9582C17.728 17.9582 18.7844 17.3687 18.7844 17.3687L17.9358 16.2641C17.9358 16.2641 16.7795 16.7122 15.9606 16.7122C15.1416 16.7122 14.253 16.2641 14.253 16.2641Z" fill="#F7FCFF"/>
<path d="M14.2764 16.969C14.2764 16.969 15.2215 17.192 15.946 17.192C16.6705 17.192 17.6156 16.969 17.6156 16.969" stroke="#C00001" stroke-width="0.5"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M16.8919 9.45835C16.8919 9.89558 16.4926 10.25 16 10.25C15.5074 10.25 15.1081 9.89558 15.1081 9.45835C15.1081 9.02113 15.5074 8.66669 16 8.66669C16.4926 8.66669 16.8919 9.02113 16.8919 9.45835ZM16 10.25H15.0398L14.7753 10.4527H14.7238V8.86802H14.2373V10.4527H13.8108V10.723H14.2373V13.5806C14.1796 14.0371 14.0463 14.2952 13.8594 14.3849L12.8662 14.8614H18.8436L18.414 14.4321C18.0367 14.0551 17.8564 13.7652 17.8564 13.5965V10.723H18.027V10.4527H17.8564V8.86802H17.3699V10.4527H17.2127L16.8992 10.25H16ZM14.7238 10.723H17.3699V13.5965C17.3699 13.8282 17.4795 14.0797 17.6935 14.3614H14.5231C14.621 14.1643 14.6865 13.9186 14.7238 13.612V10.723ZM16.0811 12H15.027V14.0834H17.1351L16.0811 12Z" fill="#F7FCFF"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M17.1696 6.15619L17.1714 6.15922L17.171 6.15807L17.1696 6.15619ZM18.7108 6.69781L18.7117 6.7071L18.7111 6.70034L18.7108 6.69781ZM19.0101 6.7347L19.0116 6.73014L19.0109 6.73238L19.0101 6.7347ZM17.7983 7.34837L17.8039 7.34832L17.8013 7.34867L17.7983 7.34837Z" fill="#F7FCFF"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M12.9929 10.6681L12.7936 10.8115L12.9991 11.113C12.8231 11.1762 12.5401 11.3361 12.5401 11.712C12.5401 12.2575 12.3485 12.7044 12.3485 12.7044L12.9207 13.0719C12.9207 13.0719 12.9804 12.4357 13.1362 12.0738C13.2143 11.8924 13.3358 11.802 13.4377 11.7569L14.3272 13.0625L14.5264 12.9191L12.9929 10.6681Z" fill="#F7FCFF"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M19.0712 10.6681L19.2705 10.8115L19.065 11.113C19.241 11.1762 19.524 11.3361 19.524 11.712C19.524 12.2575 19.7156 12.7044 19.7156 12.7044L19.1434 13.0719C19.1434 13.0719 19.0837 12.4357 18.9279 12.0738C18.8498 11.8924 18.7282 11.802 18.6264 11.7569L17.7369 13.0625L17.5377 12.9191L19.0712 10.6681Z" fill="#F7FCFF"/>
</g>
<defs>
<clipPath id="clip0_270_67316">
<rect width="32" height="24" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 7.2 KiB

View File

@@ -0,0 +1,15 @@
<svg width="32" height="24" viewBox="0 0 32 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_270_67431)">
<rect width="32" height="24" fill="white"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M0 0H32V24H0V0Z" fill="#1B1B1B"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M16 14L13.9973 17.7994L14.0475 13.6039L10.3886 16.2547L12.4818 12.494L7.89128 13.4711L11.6128 10.8901L7 10L11.6128 9.10992L7.89128 6.52893L12.4818 7.50604L10.3886 3.74535L14.0475 6.39612L13.9973 2.20058L16 6L18.0027 2.20058L17.9525 6.39612L21.6114 3.74535L19.5182 7.50604L24.1087 6.52893L20.3872 9.10992L25 10L20.3872 10.8901L24.1087 13.4711L19.5182 12.494L21.6114 16.2547L17.9525 13.6039L18.0027 17.7994L16 14Z" fill="#F9D313"/>
<rect x="6" y="14" width="20" height="10" fill="#F1F9FF"/>
<rect x="2" y="10" width="28" height="4" fill="#4A80E8"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M0 6L16 24L32 6V24H0V6Z" fill="#E31D1C"/>
</g>
<defs>
<clipPath id="clip0_270_67431">
<rect width="32" height="24" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

@@ -0,0 +1,37 @@
<svg width="32" height="24" viewBox="0 0 32 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_270_67318)">
<rect width="32" height="24" fill="white"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M0 0V24H32V0H0Z" fill="#2E42A5"/>
<mask id="mask0_270_67318" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="0" y="0" width="32" height="24">
<path fill-rule="evenodd" clip-rule="evenodd" d="M0 0V24H32V0H0Z" fill="white"/>
</mask>
<g mask="url(#mask0_270_67318)">
<path fill-rule="evenodd" clip-rule="evenodd" d="M20.943 11.8562L20.9462 12.2066C20.9731 15.1566 21.0819 17.0865 21.2756 18.011C21.4364 18.7787 22.0208 20.0518 22.7082 21.0726C23.5724 22.3561 24.4945 23.1368 25.377 23.1368C26.2627 23.1368 27.1855 22.4108 28.046 21.2011C28.7524 20.2082 29.3573 18.9486 29.5981 18.0204C29.8963 16.8714 30.0352 14.9356 30.0183 12.2035L30.0162 11.8556L29.6983 12.0202C29.0576 12.3518 28.3678 12.5174 27.6257 12.5174C26.8922 12.5174 26.1843 12.2982 25.4977 11.8563L25.3799 11.7805L25.2605 11.8537C24.5359 12.2979 23.855 12.5174 23.2168 12.5174C22.5705 12.5174 21.9205 12.3521 21.2646 12.0194L20.943 11.8562ZM21.4886 17.9695C21.2986 17.0627 21.1902 15.1411 21.1635 12.2048C21.8495 12.5529 22.534 12.7269 23.2168 12.7269C23.8997 12.7269 24.6197 12.4948 25.377 12.0306C26.0984 12.4948 26.8479 12.7269 27.6257 12.7269C28.4035 12.7269 29.1286 12.5529 29.801 12.2048C29.8178 14.9205 29.6799 16.842 29.3874 17.9695C28.9485 19.6607 27.1083 22.9273 25.377 22.9273C23.6458 22.9273 21.7735 19.3297 21.4886 17.9695Z" fill="#FBE625"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M21.1635 12.2048C21.1635 12.2048 21.2036 16.6093 21.4886 17.9695C21.7735 19.3297 23.6458 22.9273 25.377 22.9273C27.1083 22.9273 28.9485 19.6607 29.3873 17.9695C29.8262 16.2783 29.801 12.2048 29.801 12.2048C29.801 12.2048 28.7923 12.7269 27.6257 12.7269C26.459 12.7269 25.377 12.0306 25.377 12.0306C25.377 12.0306 24.2411 12.7269 23.2168 12.7269C22.1926 12.7269 21.1635 12.2048 21.1635 12.2048Z" fill="#F5FBFF"/>
<mask id="mask1_270_67318" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="21" y="12" width="9" height="11">
<path fill-rule="evenodd" clip-rule="evenodd" d="M21.1635 12.2048C21.1635 12.2048 21.2036 16.6093 21.4886 17.9695C21.7735 19.3297 23.6458 22.9273 25.377 22.9273C27.1083 22.9273 28.9485 19.6607 29.3873 17.9695C29.8262 16.2783 29.801 12.2048 29.801 12.2048C29.801 12.2048 28.7923 12.7269 27.6257 12.7269C26.459 12.7269 25.377 12.0306 25.377 12.0306C25.377 12.0306 24.2411 12.7269 23.2168 12.7269C22.1926 12.7269 21.1635 12.2048 21.1635 12.2048Z" fill="white"/>
</mask>
<g mask="url(#mask1_270_67318)">
<path fill-rule="evenodd" clip-rule="evenodd" d="M24.6398 15.4882C24.6398 15.7759 24.2288 16.6134 23.9906 16.8277C23.8144 16.9863 23.8688 16.6178 23.909 16.3458L23.909 16.3458C23.9231 16.2503 23.9354 16.1668 23.9354 16.122L23.9355 16.1024C23.9355 16.0459 23.9355 16.0151 23.9299 15.9854C23.9231 15.9499 23.9082 15.9158 23.8753 15.8411L23.8753 15.8411C23.863 15.813 23.8482 15.7793 23.8303 15.7375C23.4488 14.9237 23.7187 14.5339 23.8386 14.3608C23.857 14.3343 23.8718 14.3129 23.8802 14.2958C23.8983 14.2592 23.9324 14.2263 23.9705 14.1897C24.0662 14.0973 24.187 13.9808 24.1415 13.7195C24.0778 13.3543 24.4639 12.8859 24.4639 12.8859C24.4639 12.8859 24.3702 13.7943 24.814 13.5718C25.1024 13.4271 25.6251 13.6347 26.09 13.8193C26.3403 13.9187 26.5739 14.0114 26.7452 14.0389C27.091 14.0945 27.2804 13.9493 27.3977 13.8594C27.4463 13.8221 27.4825 13.7943 27.5123 13.7943C27.6139 13.7943 27.7339 13.8147 27.7339 13.8889C27.7339 13.9632 27.2785 14.1805 27.0495 14.2483C26.8769 14.2993 27.054 14.4401 27.2024 14.5581C27.2509 14.5967 27.2963 14.6328 27.3254 14.6625C27.4437 14.7832 27.552 15.4416 27.2785 15.0274C27.0049 14.6133 26.4227 14.3364 25.9278 14.2958C25.4329 14.2553 24.8088 14.6309 24.7339 15.0274C24.659 15.4239 25.3193 15.3513 25.3193 15.3513C25.3193 15.3513 25.2711 15.4131 25.0581 15.4882C24.8452 15.5634 24.6398 15.4882 24.6398 15.4882ZM24.1419 15.4571C24.1419 15.515 24.0933 15.5619 24.0333 15.5619C23.9733 15.5619 23.9247 15.515 23.9247 15.4571C23.9247 15.3992 23.9733 15.3523 24.0333 15.3523C24.0933 15.3523 24.1419 15.3992 24.1419 15.4571ZM26.582 17.401C26.2791 17.2966 25.3474 17.3431 25.0957 17.4826C25.0957 17.4826 25.0619 17.2666 24.8929 17.1167C24.724 16.9669 24.6465 16.9547 24.6465 16.9547C24.6465 16.9547 25.0302 17.497 24.6471 17.6237C24.264 17.7504 23.6329 17.3867 23.4284 16.9342C23.224 16.4817 23.1839 15.8382 23.4135 15.3982C23.6431 14.9582 23.1198 15.3721 23.0715 15.534C23.0597 15.5739 23.0501 15.6312 23.0399 15.6923C23.0086 15.8792 22.9713 16.1024 22.843 15.9762C22.6727 15.8088 22.2619 15.5158 22.1969 15.5518C22.132 15.5878 22.1723 15.7026 22.2216 15.7915C22.2361 15.8176 22.2779 15.8358 22.3341 15.8602C22.4695 15.9192 22.6884 16.0144 22.8075 16.3439C22.8664 16.507 22.8985 16.7562 22.933 17.0234C22.9969 17.5195 23.0688 18.0772 23.3351 18.2594C23.7449 18.5396 22.905 18.8981 22.905 18.8981C22.905 18.8981 23.5018 19.0087 23.7904 18.776C23.9968 18.6094 24.1573 18.6586 24.2845 18.6976L24.2845 18.6976C24.335 18.7131 24.3803 18.727 24.4211 18.725C24.4401 18.7241 24.4661 18.7267 24.4981 18.7299C24.7076 18.7509 25.1794 18.798 25.7062 18.0698C25.7341 18.0339 25.7564 18.0046 25.775 17.9802L25.775 17.9802C25.8245 17.9152 25.847 17.8856 25.8748 17.8625C25.898 17.8431 25.925 17.8282 25.9744 17.8009L25.9916 17.7914C26.0307 17.7697 26.1098 17.74 26.2001 17.706L26.2001 17.706L26.2001 17.706C26.4575 17.6093 26.8062 17.4783 26.582 17.401ZM25.3287 17.8816C25.3793 17.8535 25.4439 17.8734 25.473 17.9258C25.5021 17.9783 25.4847 18.0436 25.4341 18.0716C25.3835 18.0997 25.3189 18.0799 25.2898 18.0274C25.2607 17.9749 25.2781 17.9096 25.3287 17.8816ZM25.8417 14.8742C25.9192 15.1851 26.4656 15.9412 26.7196 16.0763C26.7196 16.0763 26.5569 16.2223 26.5233 16.4456C26.4896 16.6689 26.5216 16.7406 26.5216 16.7406C26.5216 16.7406 26.7674 16.1234 27.0823 16.3757C27.3972 16.628 27.436 17.3553 27.1678 17.7733C26.8997 18.1912 26.3818 18.5753 25.8877 18.6224C25.3936 18.6695 26.0258 18.8829 26.1879 18.8352C26.2278 18.8234 26.281 18.8003 26.3379 18.7755C26.5116 18.6999 26.7191 18.6097 26.6832 18.786C26.6355 19.02 26.6136 19.5242 26.6791 19.559C26.7447 19.5939 26.819 19.4975 26.8667 19.4077C26.8807 19.3814 26.8732 19.3364 26.8631 19.276C26.8388 19.1303 26.7994 18.8949 27.0109 18.6156C27.1156 18.4773 27.3071 18.3146 27.5124 18.1403C27.8937 17.8164 28.3223 17.4524 28.33 17.1298C28.3418 16.6335 29.0999 17.1427 29.0999 17.1427C29.0999 17.1427 28.8676 16.5819 28.5153 16.4666C28.2632 16.3842 28.217 16.2228 28.1804 16.0949C28.1659 16.0441 28.1529 15.9986 28.1291 15.9654C28.1179 15.9499 28.106 15.9268 28.0912 15.8981C27.9947 15.711 27.7773 15.2897 26.8796 15.2445C26.8343 15.2406 26.7975 15.2379 26.767 15.2356C26.6856 15.2295 26.6485 15.2267 26.6139 15.216C26.585 15.2071 26.5579 15.1926 26.508 15.166C26.5025 15.1631 26.4968 15.16 26.4907 15.1568C26.4512 15.1358 26.3832 15.0856 26.3055 15.0284L26.3055 15.0284C26.0842 14.8652 25.7845 14.6441 25.8417 14.8742ZM26.9619 15.7033C26.9108 15.6762 26.8922 15.6112 26.9204 15.5582C26.9485 15.5052 27.0128 15.4843 27.0639 15.5115C27.1149 15.5386 27.1335 15.6036 27.1054 15.6566C27.0772 15.7096 27.0129 15.7305 26.9619 15.7033Z" fill="#FF9800"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M21.4259 19.7524H28.7049V23.2095H21.4259V19.7524Z" fill="#36C6FF"/>
</g>
<g clip-path="url(#clip1_270_67318)">
<rect width="18" height="14" fill="#2E42A5"/>
<path d="M-2.00427 12.9998L1.95668 14.737L18.0899 1.88872L20.1792 -0.69281L15.9435 -1.27343L9.36317 4.26326L4.06667 7.99369L-2.00427 12.9998Z" fill="#F7FCFF"/>
<path d="M-1.46204 14.2169L0.555885 15.225L19.4289 -0.932678H16.5955L-1.46204 14.2169Z" fill="#F50100"/>
<path d="M20.0043 12.9998L16.0433 14.737L-0.0898743 1.88872L-2.17919 -0.69281L2.05648 -1.27343L8.63683 4.26326L13.9333 7.99369L20.0043 12.9998Z" fill="#F7FCFF"/>
<path d="M19.8691 13.8733L17.8512 14.8815L9.81489 7.96351L7.43229 7.19059L-2.3802 -0.683947H0.453194L10.2602 7.00368L12.8651 7.9305L19.8691 13.8733Z" fill="#F50100"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M9.98451 0H7.98451V6H0V8H7.98451V14H9.98451V8H18V6H9.98451V0Z" fill="#F50100"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M6.48451 0H11.4845V4.5H18V9.5H11.4845L11.5 14H6.5L6.48451 9.5H0V4.5H6.48451V0ZM7.98451 6H0V8H7.98451V14H9.98451V8H18V6H9.98451V0H7.98451V6Z" fill="#F7FCFF"/>
</g>
</g>
</g>
<defs>
<clipPath id="clip0_270_67318">
<rect width="32" height="24" fill="white"/>
</clipPath>
<clipPath id="clip1_270_67318">
<rect width="18" height="14" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 8.4 KiB

12
Flagpack/AL - Albania.svg Normal file

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 12 KiB

18
Flagpack/AM - Armenia.svg Normal file
View File

@@ -0,0 +1,18 @@
<svg width="32" height="24" viewBox="0 0 32 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_270_67563)">
<rect width="32" height="24" fill="white"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M0 0V24H32V0H0Z" fill="#2E42A5"/>
<mask id="mask0_270_67563" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="0" y="0" width="32" height="24">
<path fill-rule="evenodd" clip-rule="evenodd" d="M0 0V24H32V0H0Z" fill="white"/>
</mask>
<g mask="url(#mask0_270_67563)">
<path fill-rule="evenodd" clip-rule="evenodd" d="M0 0V8H32V0H0Z" fill="#E31D1C"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M0 16V24H32V16H0Z" fill="#FECA00"/>
</g>
</g>
<defs>
<clipPath id="clip0_270_67563">
<rect width="32" height="24" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 788 B

43
Flagpack/AO - Angola.svg Normal file
View File

@@ -0,0 +1,43 @@
<svg width="32" height="24" viewBox="0 0 32 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_270_67342)">
<rect width="32" height="24" fill="white"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M0 0V24H32V0H0Z" fill="#1D1D1D"/>
<mask id="mask0_270_67342" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="0" y="0" width="32" height="24">
<path fill-rule="evenodd" clip-rule="evenodd" d="M0 0V24H32V0H0Z" fill="white"/>
</mask>
<g mask="url(#mask0_270_67342)">
<path fill-rule="evenodd" clip-rule="evenodd" d="M0 0V12H32V0H0Z" fill="#F50100"/>
<path d="M9.93302 5.89667L10.3598 4.49182C13.56 5.46852 15.4893 7.18076 16.032 9.62351C16.3921 11.244 16.2284 12.6925 15.6462 13.9824C15.2313 14.9014 14.7044 15.5874 13.9468 16.3597C12.6834 17.6476 10.6054 18.4694 8.72927 18.1209C7.42156 17.8781 6.2169 17.4194 5.11975 16.7455L5.88521 15.4934C6.82784 16.0723 7.86335 16.4666 8.99619 16.677C10.3509 16.9286 11.9571 16.2934 12.9021 15.3302C13.5494 14.6702 13.9815 14.1077 14.3113 13.377C14.7648 12.3724 14.8919 11.2477 14.6019 9.94272C14.1879 8.07902 12.6701 6.73203 9.93302 5.89667Z" fill="#FFEA42"/>
<g filter="url(#filter0_d_270_67342)">
<path fill-rule="evenodd" clip-rule="evenodd" d="M9.8461 9.46429L8.8966 10.1216L9.23157 9.02009L8.30978 8.3248L9.4663 8.30135L9.8461 7.21429L10.2259 8.30135L11.3824 8.3248L10.4606 9.02009L10.7956 10.1216L9.8461 9.46429Z" fill="#FCFF01"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M9.8461 9.46429L8.8966 10.1216L9.23157 9.02009L8.30978 8.3248L9.4663 8.30135L9.8461 7.21429L10.2259 8.30135L11.3824 8.3248L10.4606 9.02009L10.7956 10.1216L9.8461 9.46429Z" fill="#FFEA42"/>
</g>
<g filter="url(#filter1_d_270_67342)">
<path fill-rule="evenodd" clip-rule="evenodd" d="M7.61405 9.85974C7.61405 9.85974 5.9302 12.3283 7.25611 13.2308C8.58203 14.1332 15.5933 17.9375 15.5933 17.9375C15.5933 17.9375 17.042 17.9291 17.2481 18.2373C17.4542 18.5455 17.883 18.908 18.0637 18.908C18.2445 18.908 18.7114 18.5815 18.7114 18.5815C18.7114 18.5815 19.0753 18.2837 18.7114 17.9375C18.3474 17.5912 16.4239 16.4057 16.4239 16.4057C16.4239 16.4057 8.9159 11.6142 8.27747 11.1398C7.63904 10.6654 7.61405 9.85974 7.61405 9.85974Z" fill="#FCFF01"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M7.61405 9.85974C7.61405 9.85974 5.9302 12.3283 7.25611 13.2308C8.58203 14.1332 15.5933 17.9375 15.5933 17.9375C15.5933 17.9375 17.042 17.9291 17.2481 18.2373C17.4542 18.5455 17.883 18.908 18.0637 18.908C18.2445 18.908 18.7114 18.5815 18.7114 18.5815C18.7114 18.5815 19.0753 18.2837 18.7114 17.9375C18.3474 17.5912 16.4239 16.4057 16.4239 16.4057C16.4239 16.4057 8.9159 11.6142 8.27747 11.1398C7.63904 10.6654 7.61405 9.85974 7.61405 9.85974Z" fill="#FFEA42"/>
</g>
<path fill-rule="evenodd" clip-rule="evenodd" d="M11.7118 4.07422L11.322 4.95707L12.6002 5.51046L12.9627 4.62738L11.7118 4.07422ZM14.3246 5.48414L13.6208 6.14449L14.5812 7.15334L15.2599 6.4821L14.3246 5.48414ZM15.2861 8.13652L16.186 7.78789L16.6793 9.06356L15.7986 9.43169L15.2861 8.13652ZM17.039 10.6362L16.0744 10.6055L16.0402 11.9979L16.9947 12.0032L17.039 10.6362ZM15.8471 13.1941L16.73 13.5839L16.1768 14.8348L15.2938 14.4723L15.8471 13.1941ZM15.3236 16.202L14.6633 15.4983L13.6544 16.4587L14.3257 17.1374L15.3236 16.202ZM12.6765 17.1671L13.0252 18.067L11.7495 18.5604L11.3814 17.6797L12.6765 17.1671ZM10.1832 18.9214L10.2139 17.9568L8.82142 17.9225L8.81615 18.8771L10.1832 18.9214ZM7.63156 17.7283L7.24175 18.6111L5.99084 18.058L6.35331 17.1749L7.63156 17.7283Z" fill="#FFEA42"/>
</g>
</g>
<defs>
<filter id="filter0_d_270_67342" x="8.30981" y="7.21429" width="3.07263" height="2.90735" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
<feOffset/>
<feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.2 0"/>
<feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_270_67342"/>
<feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_270_67342" result="shape"/>
</filter>
<filter id="filter1_d_270_67342" x="6.74719" y="9.85974" width="12.1259" height="9.04822" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
<feOffset/>
<feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.2 0"/>
<feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_270_67342"/>
<feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_270_67342" result="shape"/>
</filter>
<clipPath id="clip0_270_67342">
<rect width="32" height="24" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 4.7 KiB

View File

@@ -0,0 +1,17 @@
<svg width="32" height="24" viewBox="0 0 32 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_270_67403)">
<rect width="32" height="24" fill="white"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M0 0V24H32V0H0Z" fill="#5196ED"/>
<mask id="mask0_270_67403" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="0" y="0" width="32" height="24">
<path fill-rule="evenodd" clip-rule="evenodd" d="M0 0V24H32V0H0Z" fill="white"/>
</mask>
<g mask="url(#mask0_270_67403)">
<path fill-rule="evenodd" clip-rule="evenodd" d="M8.71741 7.89376C8.71741 7.89376 10.7815 9.02624 11.0686 9.33948C11.3555 9.65278 11.8155 10.8032 12.5328 10.1526C13.2502 9.50226 13.9675 10.0079 13.9675 8.9717C13.9675 7.93558 15.0385 5.53204 16.5926 6.13434C18.1469 6.73658 19.4247 6.35982 19.7832 6.6006C20.142 6.84154 21.0028 8.03802 21.6722 8.03802C22.3419 8.03802 22.6764 8.7367 22.7244 9.74876C22.772 10.7609 22.5093 10.8576 23.1308 10.9782C23.7526 11.0986 23.9916 11.5566 23.681 12.1589C23.3701 12.7613 23.3938 12.4962 23.4417 13.1228C23.4897 13.7493 22.8202 17.444 20.7634 17.8058C18.7069 18.1671 16.7576 17.9745 17.2839 17.2754C17.8099 16.5768 18.5381 15.7727 17.4623 15.604C16.386 15.4351 15.7078 15.2915 14.6317 15.5806C13.5555 15.8698 12.4317 16.3274 11.7619 15.4602C11.0924 14.5926 11.2361 13.9661 10.6861 13.5564C10.1362 13.1468 9.46638 13.2191 10.0166 12.4239C10.5663 11.6287 11.0206 11.9256 10.5663 11.2991C10.1123 10.6728 8.39739 10.3998 8.39739 9.77352C8.39739 9.14674 7.30659 7.77324 8.71741 7.89376Z" fill="#F5F8FB"/>
</g>
</g>
<defs>
<clipPath id="clip0_270_67403">
<rect width="32" height="24" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 1.6 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 163 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 21 KiB

18
Flagpack/AT - Austria.svg Normal file
View File

@@ -0,0 +1,18 @@
<svg width="32" height="24" viewBox="0 0 32 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_270_67484)">
<rect width="32" height="24" fill="white"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M0 0V24H32V0H0Z" fill="#F7FCFF"/>
<mask id="mask0_270_67484" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="0" y="0" width="32" height="24">
<path fill-rule="evenodd" clip-rule="evenodd" d="M0 0V24H32V0H0Z" fill="white"/>
</mask>
<g mask="url(#mask0_270_67484)">
<path fill-rule="evenodd" clip-rule="evenodd" d="M0 0V8H32V0H0Z" fill="#C51918"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M0 16V24H32V16H0Z" fill="#C51918"/>
</g>
</g>
<defs>
<clipPath id="clip0_270_67484">
<rect width="32" height="24" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 788 B

View File

@@ -0,0 +1,34 @@
<svg width="32" height="24" viewBox="0 0 32 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_270_67322)">
<rect width="32" height="24" fill="white"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M0 0V24H32V0H0Z" fill="#2E42A5"/>
<g clip-path="url(#clip1_270_67322)">
<rect width="18" height="14" fill="#2E42A5"/>
<path d="M-2.00427 12.9998L1.95668 14.737L18.0899 1.88872L20.1792 -0.69281L15.9435 -1.27343L9.36317 4.26326L4.06667 7.99369L-2.00427 12.9998Z" fill="#F7FCFF"/>
<path d="M-1.46204 14.2169L0.555885 15.225L19.4289 -0.932678H16.5955L-1.46204 14.2169Z" fill="#F50100"/>
<path d="M20.0043 12.9998L16.0433 14.737L-0.0898743 1.88872L-2.17919 -0.69281L2.05648 -1.27343L8.63683 4.26326L13.9333 7.99369L20.0043 12.9998Z" fill="#F7FCFF"/>
<path d="M19.8691 13.8733L17.8512 14.8815L9.81489 7.96351L7.43229 7.19059L-2.3802 -0.683947H0.453194L10.2602 7.00368L12.8651 7.9305L19.8691 13.8733Z" fill="#F50100"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M9.98451 0H7.98451V6H0V8H7.98451V14H9.98451V8H18V6H9.98451V0Z" fill="#F50100"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M6.48451 0H11.4845V4.5H18V9.5H11.4845L11.5 14H6.5L6.48451 9.5H0V4.5H6.48451V0ZM7.98451 6H0V8H7.98451V14H9.98451V8H18V6H9.98451V0H7.98451V6Z" fill="#F7FCFF"/>
</g>
<g clip-path="url(#clip2_270_67322)">
<path d="M9 20.5L7.69835 21.7029L7.82725 19.9352L6.07522 19.6676L7.53761 18.6662L6.65451 17.1295L8.34917 17.6485L9 16L9.65083 17.6485L11.3455 17.1295L10.4624 18.6662L11.9248 19.6676L10.1727 19.9352L10.3017 21.7029L9 20.5Z" fill="#F7FCFF"/>
<path d="M22 13L21.1322 13.8019L21.2182 12.6235L20.0501 12.445L21.0251 11.7775L20.4363 10.753L21.5661 11.099L22 10L22.4339 11.099L23.5637 10.753L22.9749 11.7775L23.9499 12.445L22.7818 12.6235L22.8678 13.8019L22 13Z" fill="#F7FCFF"/>
<path d="M24 5L23.1322 5.80194L23.2182 4.62349L22.0501 4.44504L23.0251 3.77748L22.4363 2.75302L23.5661 3.09903L24 2L24.4339 3.09903L25.5637 2.75302L24.9749 3.77748L25.9499 4.44504L24.7818 4.62349L24.8678 5.80194L24 5Z" fill="#F7FCFF"/>
<path d="M29 9L28.1322 9.80194L28.2182 8.62349L27.0501 8.44504L28.0251 7.77748L27.4363 6.75302L28.5661 7.09903L29 6L29.4339 7.09903L30.5637 6.75302L29.9749 7.77748L30.9499 8.44504L29.7818 8.62349L29.8678 9.80194L29 9Z" fill="#F7FCFF"/>
<path d="M25 22L24.1322 22.8019L24.2182 21.6235L23.0501 21.445L24.0251 20.7775L23.4363 19.753L24.5661 20.099L25 19L25.4339 20.099L26.5637 19.753L25.9749 20.7775L26.9499 21.445L25.7818 21.6235L25.8678 22.8019L25 22Z" fill="#F7FCFF"/>
<path d="M28.5 14.25L27.6183 14.7135L27.7867 13.7318L27.0734 13.0365L28.0592 12.8932L28.5 12L28.9408 12.8932L29.9266 13.0365L29.2133 13.7318L29.3817 14.7135L28.5 14.25Z" fill="#F7FCFF"/>
</g>
</g>
<defs>
<clipPath id="clip0_270_67322">
<rect width="32" height="24" fill="white"/>
</clipPath>
<clipPath id="clip1_270_67322">
<rect width="18" height="14" fill="white"/>
</clipPath>
<clipPath id="clip2_270_67322">
<rect width="25" height="21" fill="white" transform="translate(6 2)"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 2.9 KiB

18
Flagpack/AW - Aruba.svg Normal file
View File

@@ -0,0 +1,18 @@
<svg width="32" height="24" viewBox="0 0 32 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_270_67333)">
<rect width="32" height="24" fill="white"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M0 0V24H32V0H0Z" fill="#5BA3DA"/>
<mask id="mask0_270_67333" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="0" y="0" width="32" height="24">
<path fill-rule="evenodd" clip-rule="evenodd" d="M0 0V24H32V0H0Z" fill="white"/>
</mask>
<g mask="url(#mask0_270_67333)">
<path fill-rule="evenodd" clip-rule="evenodd" d="M5.77333 7.9597L1.39233 7.03498L5.82733 6.15741L7.11018 1.56757L8.12183 6.12015L12.0812 7.03943L8.16838 7.9597L7.03936 11.7032L5.77333 7.9597Z" fill="#FF0000" stroke="#F7FCFF" stroke-width="0.35"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M32.0002 14H0.00012207V16.0001H32.0002V14ZM32.0002 18.0001H0.00012207V20.0001H32.0002V18.0001Z" fill="#FAD615"/>
</g>
</g>
<defs>
<clipPath id="clip0_270_67333">
<rect width="32" height="24" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

@@ -0,0 +1,17 @@
<svg width="32" height="24" viewBox="0 0 32 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_270_67529)">
<rect width="32" height="24" fill="white"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M0 0V24H32V0H0Z" fill="#0061C1"/>
<mask id="mask0_270_67529" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="0" y="0" width="32" height="24">
<path fill-rule="evenodd" clip-rule="evenodd" d="M0 0V24H32V0H0Z" fill="white"/>
</mask>
<g mask="url(#mask0_270_67529)">
<path d="M10 -1H9V0V9H0H-1V10V14V15H0H9V24V25H10H14H15V24V15H32H33V14V10V9H32H15V0V-1H14H10Z" fill="#D21034" stroke="#FFCE00" stroke-width="2"/>
</g>
</g>
<defs>
<clipPath id="clip0_270_67529">
<rect width="32" height="24" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 766 B

View File

@@ -0,0 +1,19 @@
<svg width="32" height="24" viewBox="0 0 32 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_270_67323)">
<rect width="32" height="24" fill="white"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M0 0V24H32V0H0Z" fill="#AF0100"/>
<mask id="mask0_270_67323" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="0" y="0" width="32" height="24">
<path fill-rule="evenodd" clip-rule="evenodd" d="M0 0V24H32V0H0Z" fill="white"/>
</mask>
<g mask="url(#mask0_270_67323)">
<path fill-rule="evenodd" clip-rule="evenodd" d="M0 0V8H32V0H0Z" fill="#3CA5D9"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M0 16V24H32V16H0Z" fill="#73BE4A"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M17.1399 15.024C15.7929 14.7134 14.6103 13.5539 14.6243 12C14.6374 10.5454 15.4933 9.36784 16.9747 9.03345C18.4562 8.69905 19.9922 9.33448 19.9922 9.33448C19.5839 8.42657 18.1625 7.78992 16.9966 7.79298C14.8263 7.79867 12.511 9.4555 12.4882 11.9856C12.4646 14.6086 14.961 16.0999 17.1581 16.0941C18.9194 16.0895 19.7561 14.9559 19.9297 14.4739C19.9297 14.4739 18.4869 15.3345 17.1399 15.024ZM18.0178 13.4207L19.1933 12.6027L20.3689 13.4207L19.9542 12.0499L21.0955 11.1846L19.6636 11.1554L19.1933 9.80266L18.7231 11.1554L17.2912 11.1846L18.4325 12.0499L18.0178 13.4207Z" fill="#F7FCFF"/>
</g>
</g>
<defs>
<clipPath id="clip0_270_67323">
<rect width="32" height="24" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

@@ -0,0 +1,18 @@
<svg width="32" height="24" viewBox="0 0 32 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_270_67491)">
<rect width="32" height="24" fill="white"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M0 0H32V24H0V0Z" fill="#2E42A5"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M9 0H29V24L9 0Z" fill="#FECA00"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M6.10805 2.79376L4.93248 3.4118L5.15699 2.10278L4.20593 1.17573L5.52026 0.984745L6.10805 -0.206238L6.69583 0.984745L8.01016 1.17573L7.0591 2.10278L7.28362 3.4118L6.10805 2.79376Z" fill="#F7FCFF"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M9.59474 7.07391L8.41917 7.69195L8.64368 6.38293L7.69263 5.45588L9.00695 5.2649L9.59474 4.07391L10.1825 5.2649L11.4969 5.45588L10.5458 6.38293L10.7703 7.69195L9.59474 7.07391Z" fill="#F7FCFF"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M12.8634 11.2384L11.6878 11.8564L11.9124 10.5474L10.9613 9.62037L12.2756 9.42939L12.8634 8.2384L13.4512 9.42939L14.7655 9.62037L13.8145 10.5474L14.039 11.8564L12.8634 11.2384Z" fill="#F7FCFF"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M16.0653 15.2292L14.8898 15.8473L15.1143 14.5383L14.1632 13.6112L15.4775 13.4202L16.0653 12.2292L16.6531 13.4202L17.9674 13.6112L17.0164 14.5383L17.2409 15.8473L16.0653 15.2292Z" fill="#F7FCFF"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M19.5144 19.3368L18.3388 19.9548L18.5634 18.6458L17.6123 17.7188L18.9266 17.5278L19.5144 16.3368L20.1022 17.5278L21.4165 17.7188L20.4655 18.6458L20.69 19.9548L19.5144 19.3368Z" fill="#F7FCFF"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M23.3269 23.311L22.1513 23.9291L22.3759 22.6201L21.4248 21.693L22.7391 21.502L23.3269 20.311L23.9147 21.502L25.229 21.693L24.278 22.6201L24.5025 23.9291L23.3269 23.311Z" fill="#F7FCFF"/>
</g>
<defs>
<clipPath id="clip0_270_67491">
<rect width="32" height="24" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 1.9 KiB

View File

@@ -0,0 +1,14 @@
<svg width="32" height="24" viewBox="0 0 32 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_270_67571)">
<rect width="32" height="24" fill="white"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M22 0H32V24H22V0Z" fill="#2E42A5"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M10 0H22V24H10V0Z" fill="#FECA00"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M0 0H10V24H0V0Z" fill="#2E42A5"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M18.612 15.6678C18.8 14.3782 20.1328 11.5753 20.1328 11.5753L20.7509 9.93074L18.3012 10.7256L18.8809 11.0273L17.7464 14.2258L16.8895 14.0212V7.85251L17.5674 7.80301L15.8953 5.37152L14.2628 7.85251H15.0505V14.0212L14.0852 14.1826L13.3967 10.9479L13.7942 10.6147L11.1289 10.1233L11.9246 11.5916C11.9246 11.5916 12.9956 14.1082 13.3967 15.6678L15.0505 15.5404V17.9375H16.8895V15.5404L18.612 15.6678Z" fill="black"/>
</g>
<defs>
<clipPath id="clip0_270_67571">
<rect width="32" height="24" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 1008 B

View File

@@ -0,0 +1,12 @@
<svg width="32" height="24" viewBox="0 0 32 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_270_67546)">
<rect width="32" height="24" fill="white"/>
<rect width="32" height="24" fill="#38A17E"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M13 19C16.866 19 20 15.866 20 12C20 8.13401 16.866 5 13 5C9.13401 5 6 8.13401 6 12C6 15.866 9.13401 19 13 19Z" fill="#F72E45"/>
</g>
<defs>
<clipPath id="clip0_270_67546">
<rect width="32" height="24" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 516 B

13
Flagpack/BE - Belgium.svg Normal file
View File

@@ -0,0 +1,13 @@
<svg width="32" height="24" viewBox="0 0 32 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_270_67324)">
<rect width="32" height="24" fill="white"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M10 0H21V24H10V0Z" fill="#FECA00"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M21 0H32V24H21V0Z" fill="#E31D1C"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M0 0H11V24H0V0Z" fill="#1D1D1D"/>
</g>
<defs>
<clipPath id="clip0_270_67324">
<rect width="32" height="24" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 546 B

View File

@@ -0,0 +1,18 @@
<svg width="32" height="24" viewBox="0 0 32 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_270_67325)">
<rect width="32" height="24" fill="white"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M0 0V24H32V0H0Z" fill="#5EAA22"/>
<mask id="mask0_270_67325" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="0" y="0" width="32" height="24">
<path fill-rule="evenodd" clip-rule="evenodd" d="M0 0V24H32V0H0Z" fill="white"/>
</mask>
<g mask="url(#mask0_270_67325)">
<path fill-rule="evenodd" clip-rule="evenodd" d="M0 0V12H32V0H0Z" fill="#C51918"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M16.0354 15.7706L11.3325 19.3299L12.8373 13.533L8.42633 10.0036H13.6836L16.0348 4.85773L18.3859 10.0036H23.6432L19.1855 13.5376L20.7371 19.3299L16.0354 15.7706Z" fill="#FECA00"/>
</g>
</g>
<defs>
<clipPath id="clip0_270_67325">
<rect width="32" height="24" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 932 B

View File

@@ -0,0 +1,18 @@
<svg width="32" height="24" viewBox="0 0 32 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_270_67326)">
<rect width="32" height="24" fill="white"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M0 0V24H32V0H0Z" fill="#5EAA22"/>
<mask id="mask0_270_67326" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="0" y="0" width="32" height="24">
<path fill-rule="evenodd" clip-rule="evenodd" d="M0 0V24H32V0H0Z" fill="white"/>
</mask>
<g mask="url(#mask0_270_67326)">
<path fill-rule="evenodd" clip-rule="evenodd" d="M0 0V8H32V0H0Z" fill="#F7FCFF"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M0 16V24H32V16H0Z" fill="#E22C18"/>
</g>
</g>
<defs>
<clipPath id="clip0_270_67326">
<rect width="32" height="24" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 788 B

12
Flagpack/BH - Bahrain.svg Normal file
View File

@@ -0,0 +1,12 @@
<svg width="32" height="24" viewBox="0 0 32 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_270_67327)">
<rect width="32" height="24" fill="white"/>
<rect width="32" height="24" fill="#E31D1C"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M0 0H6.79999L12 2L6.79999 4L12 6L6.79999 8L12 10L6.79999 12L12 14L6.79999 16L12 18L6.79999 20L12 22L6.79999 24H0V0Z" fill="#F7FCFF"/>
</g>
<defs>
<clipPath id="clip0_270_67327">
<rect width="32" height="24" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 522 B

21
Flagpack/BI - Burundi.svg Normal file
View File

@@ -0,0 +1,21 @@
<svg width="32" height="24" viewBox="0 0 32 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_270_67328)">
<rect width="32" height="24" fill="white"/>
<rect width="32" height="24" rx="2" fill="#5EAA22"/>
<mask id="path-2-outside-1_270_67328" maskUnits="userSpaceOnUse" x="-8" y="-3" width="48" height="30" fill="black">
<rect fill="white" x="-8" y="-3" width="48" height="30"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M16 12L32 0H0L16 12ZM16 12L0 24H32L16 12Z"/>
</mask>
<path fill-rule="evenodd" clip-rule="evenodd" d="M16 12L32 0H0L16 12ZM16 12L0 24H32L16 12Z" fill="#DD2C2B"/>
<path d="M32 0L33.5 2L39.5 -2.5H32V0ZM0 0V-2.5H-7.5L-1.5 2L0 0ZM0 24L-1.5 22L-7.5 26.5H0V24ZM32 24V26.5H39.5L33.5 22L32 24ZM30.5 -2L14.5 10L17.5 14L33.5 2L30.5 -2ZM0 2.5H32V-2.5H0V2.5ZM17.5 10L1.5 -2L-1.5 2L14.5 14L17.5 10ZM14.5 10L-1.5 22L1.5 26L17.5 14L14.5 10ZM0 26.5H32V21.5H0V26.5ZM33.5 22L17.5 10L14.5 14L30.5 26L33.5 22Z" fill="white" mask="url(#path-2-outside-1_270_67328)"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M16 18C19.3137 18 22 15.3137 22 12C22 8.68629 19.3137 6 16 6C12.6863 6 10 8.68629 10 12C10 15.3137 12.6863 18 16 18Z" fill="white"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M15.43 10.3873L14.2679 10.4L14.86 9.40002L14.2679 8.40002L15.43 8.41275L16 7.40002L16.57 8.41275L17.732 8.40002L17.14 9.40002L17.732 10.4L16.57 10.3873L16 11.4L15.43 10.3873Z" fill="#DD2C2B" stroke="#5EAA22" stroke-width="0.25"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M12.93 14.4873L11.7679 14.5L12.36 13.5L11.7679 12.5L12.93 12.5127L13.5 11.5L14.07 12.5127L15.232 12.5L14.64 13.5L15.232 14.5L14.07 14.4873L13.5 15.5L12.93 14.4873Z" fill="#DD2C2B" stroke="#5EAA22" stroke-width="0.25"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M17.93 14.4873L16.7679 14.5L17.36 13.5L16.7679 12.5L17.93 12.5127L18.5 11.5L19.07 12.5127L20.232 12.5L19.64 13.5L20.232 14.5L19.07 14.4873L18.5 15.5L17.93 14.4873Z" fill="#DD2C2B" stroke="#5EAA22" stroke-width="0.25"/>
</g>
<defs>
<clipPath id="clip0_270_67328">
<rect width="32" height="24" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 2.1 KiB

13
Flagpack/BJ - Benin.svg Normal file
View File

@@ -0,0 +1,13 @@
<svg width="32" height="24" viewBox="0 0 32 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_270_67329)">
<rect width="32" height="24" fill="white"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M0 0H32V24H0V0Z" fill="#DD2C2B"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M0 0V14H32V0H0Z" fill="#FECA00"/>
<rect width="14" height="24" fill="#5EAA22"/>
</g>
<defs>
<clipPath id="clip0_270_67329">
<rect width="32" height="24" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 505 B

View File

@@ -0,0 +1,13 @@
<svg width="32" height="24" viewBox="0 0 32 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_270_67330)">
<rect width="32" height="24" fill="white"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M22 0H32V24H22V0Z" fill="#F50100"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M0 0H12V24H0V0Z" fill="#2E42A5"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M10 0H22V24H10V0Z" fill="#F7FCFF"/>
</g>
<defs>
<clipPath id="clip0_270_67330">
<rect width="32" height="24" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 546 B

47
Flagpack/BM - Bermuda.svg Normal file
View File

@@ -0,0 +1,47 @@
<svg width="32" height="24" viewBox="0 0 32 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_270_67338)">
<rect width="32" height="24" fill="white"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M0 0V24H32V0H0Z" fill="#AF0100"/>
<mask id="mask0_270_67338" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="0" y="0" width="32" height="24">
<path fill-rule="evenodd" clip-rule="evenodd" d="M0 0V24H32V0H0Z" fill="white"/>
</mask>
<g mask="url(#mask0_270_67338)">
<path fill-rule="evenodd" clip-rule="evenodd" d="M21.0298 11.0427L29.9185 11.0427V20.0326C29.9185 20.0326 29.6426 21.2702 27.9315 22.0874C26.2205 22.9046 25.4742 22.9046 25.4742 22.9046C25.4742 22.9046 22.7487 22.2349 22.1852 21.6078C21.6217 20.9807 21.0298 20.7487 21.0298 19.6525C21.0298 18.5563 21.0298 11.0427 21.0298 11.0427Z" fill="white"/>
<mask id="mask1_270_67338" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="21" y="11" width="9" height="12">
<path fill-rule="evenodd" clip-rule="evenodd" d="M21.0298 11.0427L29.9185 11.0427V20.0326C29.9185 20.0326 29.6426 21.2702 27.9315 22.0874C26.2205 22.9046 25.4742 22.9046 25.4742 22.9046C25.4742 22.9046 22.7487 22.2349 22.1852 21.6078C21.6217 20.9807 21.0298 20.7487 21.0298 19.6525C21.0298 18.5563 21.0298 11.0427 21.0298 11.0427Z" fill="white"/>
</mask>
<g mask="url(#mask1_270_67338)">
<path fill-rule="evenodd" clip-rule="evenodd" d="M25.4554 11.57C25.4888 11.5219 25.5063 11.4758 25.5063 11.4758L25.5032 11.6262C25.535 11.6557 25.574 11.6778 25.6199 11.6778L25.8169 11.5611C25.8169 11.5611 25.7716 11.819 25.8311 11.8117C25.8311 11.8117 26.0148 11.6903 26.0877 11.7558C26.0877 11.7558 25.8738 12.0008 26.1313 12.0024C26.1313 12.0024 26.455 11.9503 26.427 12.1006C26.427 12.1006 26.1844 12.546 26.2863 12.5743L26.6868 12.5625C26.6868 12.5625 26.4184 12.796 26.4256 12.8942L26.5593 12.9992C26.5593 12.9992 26.6343 12.8146 26.6974 12.9656C26.6974 12.9656 26.7056 13.2398 26.6636 13.2398L26.3076 13.3538C26.3076 13.3538 26.2845 13.4878 26.4118 13.4878C26.4118 13.4878 26.7064 13.3631 26.7148 13.4898C26.7148 13.4898 26.676 13.6362 26.6589 13.7599C26.6589 13.7599 26.6401 14.2085 26.6373 14.2471C26.6373 14.2471 26.6606 14.2303 26.8847 14.4943C26.8847 14.4943 27.4502 14.8516 27.5538 14.7694C27.5824 14.7467 27.6011 14.7002 27.6222 14.6477C27.6777 14.5098 27.75 14.33 28.0627 14.427L28.0655 14.4279C28.4951 14.5612 28.5995 14.5936 28.4909 14.7694C28.382 14.9456 27.9685 15.3653 27.9685 15.3653L27.61 16.8034H28.3779C28.6096 16.8034 28.8224 16.8932 28.8632 17.0853C28.9041 17.2773 28.9147 17.6506 28.9147 17.6952C28.9147 17.7012 28.9137 17.7095 28.9126 17.7193C28.9053 17.7816 28.8907 17.9054 29.0741 17.9054C29.0741 17.9054 29.4414 17.9528 29.3653 17.9795C29.3653 17.9795 29.105 17.9293 29.1032 18.1584C29.1032 18.1584 29.0032 18.1879 29.0516 18.4708C29.0516 18.4708 29.2535 19.0905 29.1195 18.9628C29.1195 18.9628 28.845 18.6406 28.845 18.5033C28.845 18.5033 28.649 18.5806 28.6551 18.7825C28.6551 18.7825 28.4696 19.0307 28.4752 18.7881C28.4752 18.7881 28.7894 18.192 28.6138 18.327C28.6138 18.327 28.3863 18.8193 28.3565 18.7446L27.5125 18.5164L27.191 19.9311C27.191 19.9311 27.2766 20.1966 27.5125 20.1966C27.598 20.1966 27.6739 20.1632 27.7432 20.1327C27.865 20.0792 27.9662 20.0347 28.0627 20.1966C28.2141 20.4506 28.2815 20.4743 28.3565 20.4743C28.4314 20.4743 28.519 20.5717 28.4752 20.7207C28.4314 20.8697 28.2347 20.9818 28.1487 20.9818C28.1171 20.9818 28.1255 21.0087 28.136 21.0427C28.1542 21.1011 28.1789 21.1805 28.0187 21.1805C27.8917 21.1805 27.8282 21.1653 27.7648 21.1501C27.7016 21.135 27.6384 21.1199 27.5125 21.1199C27.483 21.1199 27.4537 21.1202 27.4249 21.1205C27.2082 21.123 27.024 21.1251 27.024 20.9818C27.024 20.8428 26.857 20.7197 26.7092 20.6108C26.6844 20.5925 26.6601 20.5746 26.6373 20.5571C26.4783 20.4354 26.1313 19.0592 26.1313 19.0592L25.475 14.926L25.4554 13.9667L25.4358 14.926L24.7796 19.0592C24.7796 19.0592 24.4326 20.4354 24.2735 20.5571C24.2507 20.5746 24.2265 20.5925 24.2017 20.6107C24.0538 20.7197 23.8868 20.8428 23.8868 20.9818C23.8868 21.1251 23.7026 21.123 23.4859 21.1205C23.4572 21.1202 23.4279 21.1199 23.3984 21.1199C23.2725 21.1199 23.2093 21.135 23.146 21.1501C23.0826 21.1653 23.0191 21.1805 22.8922 21.1805C22.7319 21.1805 22.7566 21.1011 22.7748 21.0427C22.7854 21.0087 22.7938 20.9818 22.7621 20.9818C22.6761 20.9818 22.4794 20.8697 22.4356 20.7207C22.3919 20.5717 22.4794 20.4743 22.5544 20.4743C22.6294 20.4743 22.6967 20.4506 22.8481 20.1966C22.9446 20.0347 23.0459 20.0792 23.1677 20.1327C23.2369 20.1632 23.3129 20.1966 23.3984 20.1966C23.6343 20.1966 23.7199 19.9311 23.7199 19.9311L23.3984 18.5164L22.5544 18.7446C22.5245 18.8193 22.297 18.327 22.297 18.327C22.1214 18.192 22.4356 18.7881 22.4356 18.7881C22.4413 19.0307 22.2558 18.7825 22.2558 18.7825C22.2618 18.5806 22.0659 18.5033 22.0659 18.5033C22.0659 18.6406 21.7913 18.9628 21.7913 18.9628C21.6573 19.0905 21.8593 18.4708 21.8593 18.4708C21.9077 18.1879 21.8077 18.1584 21.8077 18.1584C21.8059 17.9293 21.5455 17.9795 21.5455 17.9795C21.4694 17.9528 21.8367 17.9054 21.8367 17.9054C22.0202 17.9054 22.0056 17.7816 21.9983 17.7193C21.9971 17.7095 21.9961 17.7012 21.9961 17.6952C21.9961 17.6506 22.0068 17.2773 22.0476 17.0853C22.0884 16.8932 22.3013 16.8034 22.5329 16.8034H23.3008L22.9423 15.3653C22.9423 15.3653 22.5288 14.9456 22.42 14.7694C22.3114 14.5936 22.4158 14.5612 22.8453 14.4279L22.8481 14.427C23.1608 14.33 23.2332 14.5098 23.2886 14.6477C23.3098 14.7002 23.3284 14.7467 23.357 14.7694C23.4607 14.8516 24.0261 14.4943 24.0261 14.4943C24.2502 14.2303 24.2735 14.2471 24.2735 14.2471C24.2707 14.2085 24.252 13.7599 24.252 13.7599C24.2349 13.6362 24.196 13.4898 24.196 13.4898C24.2044 13.3631 24.499 13.4878 24.499 13.4878C24.6263 13.4878 24.6033 13.3538 24.6033 13.3538L24.2472 13.2398C24.2053 13.2398 24.2135 12.9656 24.2135 12.9656C24.2766 12.8146 24.3516 12.9992 24.3516 12.9992L24.4852 12.8942C24.4924 12.796 24.224 12.5625 24.224 12.5625L24.6245 12.5743C24.7265 12.546 24.4839 12.1006 24.4839 12.1006C24.4559 11.9503 24.7796 12.0024 24.7796 12.0024C25.0371 12.0008 24.8232 11.7558 24.8232 11.7558C24.896 11.6903 25.0797 11.8117 25.0797 11.8117C25.1393 11.819 25.0939 11.5611 25.0939 11.5611L25.291 11.6778C25.3368 11.6778 25.3759 11.6557 25.4076 11.6262L25.4046 11.4758C25.4046 11.4758 25.4221 11.5219 25.4554 11.57Z" fill="#CF142B"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M21.2224 20L20.8954 19.6786V23.3214H24.7675H26.1279H30V19.6786L29.673 20C29.722 19.6158 29.6478 19.7393 29.5591 19.887C29.5171 19.9569 29.4719 20.0321 29.435 20.0615C29.4003 20.0892 29.3924 19.9769 29.3846 19.8669C29.3778 19.7696 29.371 19.674 29.346 19.6786C29.346 19.6786 29.2469 19.5206 29.1861 19.5804C29.174 19.5923 29.1649 19.6803 29.1546 19.7798C29.1435 19.8873 29.1311 20.0083 29.1118 20.0615C29.0894 20.1235 29.0189 20 29.0189 20C29.0189 20 29.0225 19.5332 28.951 19.4629C28.8795 19.3926 28.8724 20 28.8724 20C28.8724 20 28.7628 19.5501 28.6522 19.5804C28.6336 19.5855 28.624 19.7031 28.6136 19.8297C28.6035 19.9528 28.5927 20.0843 28.5723 20.1289C28.5306 20.2204 28.4327 19.5804 28.4327 19.5804C28.4327 19.5804 28.4036 20.1046 28.3059 20.1289C28.2896 20.133 28.2745 20.0482 28.2578 19.9547C28.2418 19.8648 28.2243 19.7669 28.2029 19.7314C28.1577 19.6565 27.9445 19.9495 27.9445 19.9495L27.7954 19.3447L27.3838 19.6786H26.1279H24.7675H23.5117L23.1 19.3447L22.9509 19.9495C22.9509 19.9495 22.7378 19.6565 22.6925 19.7314C22.6711 19.7669 22.6537 19.8648 22.6377 19.9547C22.621 20.0482 22.6059 20.133 22.5895 20.1289C22.4918 20.1046 22.4627 19.5804 22.4627 19.5804C22.4627 19.5804 22.3649 20.2204 22.3231 20.1289C22.3027 20.0843 22.2919 19.9528 22.2818 19.8297C22.2715 19.7031 22.2618 19.5855 22.2432 19.5804C22.1326 19.5501 22.023 20 22.023 20C22.023 20 22.0159 19.3926 21.9444 19.4629C21.8729 19.5332 21.8765 20 21.8765 20C21.8765 20 21.806 20.1235 21.7836 20.0615C21.7644 20.0083 21.7519 19.8873 21.7408 19.7798C21.7305 19.6803 21.7215 19.5923 21.7093 19.5804C21.6485 19.5206 21.5495 19.6786 21.5495 19.6786C21.5244 19.674 21.5177 19.7696 21.5108 19.8669C21.503 19.9769 21.4951 20.0892 21.4604 20.0615C21.4235 20.0321 21.3783 19.9569 21.3363 19.887C21.2476 19.7393 21.1734 19.6158 21.2224 20Z" fill="#5DC852"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M28.1804 14.94C28.1804 14.94 28.2233 15.0503 28.1804 15.1591V14.94ZM25.4859 14.7626C25.5596 14.7737 25.6257 14.7916 25.6822 14.8069C25.814 14.8425 25.8934 14.864 25.8934 14.752C25.8934 14.6703 26.1097 14.776 26.4079 14.9216C26.7964 15.1114 27.3241 15.3691 27.6938 15.3691C28.0159 15.3691 28.1386 15.2648 28.1804 15.1591V15.5843C28.1804 15.6602 28.1971 15.7503 28.2128 15.835C28.2416 15.9904 28.2671 16.1278 28.1804 16.1278C28.0463 16.1278 27.4458 16.5501 27.4458 17.0365C27.4458 17.5229 28.1804 17.9225 28.1804 17.9225C28.1804 17.9225 27.6938 19.6349 27.2681 19.8965C27.0098 20.0553 26.8566 19.925 26.7761 19.8565C26.724 19.8121 26.7023 19.7937 26.7023 19.8965C26.7023 20.1581 26.3334 20.5271 25.8934 20.6727C25.609 20.7669 25.6923 20.8391 25.7868 20.921C25.8384 20.9657 25.8934 21.0134 25.8934 21.069C25.8934 21.1949 25.5463 21.0189 25.407 20.9432C25.2677 21.0189 24.9206 21.1949 24.9206 21.069C24.9206 21.0134 24.9756 20.9657 25.0273 20.921C25.1217 20.8391 25.2051 20.7669 24.9206 20.6727C24.4807 20.5271 24.1117 20.1581 24.1117 19.8965C24.1117 19.7937 24.0901 19.8121 24.0379 19.8565C23.9574 19.925 23.8043 20.0553 23.5459 19.8965C23.1203 19.6349 22.6337 17.9225 22.6337 17.9225C22.6337 17.9225 23.3682 17.5229 23.3682 17.0365C23.3682 16.5501 22.7678 16.1278 22.6337 16.1278C22.5469 16.1278 22.5724 15.9904 22.6013 15.835C22.617 15.7503 22.6337 15.6602 22.6337 15.5843V15.1591C22.6754 15.2648 22.7982 15.3691 23.1203 15.3691C23.49 15.3691 24.0176 15.1114 24.4062 14.9216C24.7044 14.776 24.9206 14.6703 24.9206 14.752C24.9206 14.864 25 14.8425 25.1318 14.8069C25.1883 14.7916 25.2545 14.7737 25.3281 14.7626C25.3351 14.7556 25.3425 14.752 25.3502 14.752C25.3695 14.752 25.3884 14.7526 25.407 14.7539C25.4256 14.7526 25.4445 14.752 25.4638 14.752C25.4716 14.752 25.4789 14.7556 25.4859 14.7626ZM22.6337 14.94C22.6337 14.94 22.5908 15.0503 22.6337 15.1591V14.94Z" fill="#4ABCE6"/>
<mask id="mask2_270_67338" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="22" y="14" width="7" height="8">
<path fill-rule="evenodd" clip-rule="evenodd" d="M28.1804 14.94C28.1804 14.94 28.2233 15.0503 28.1804 15.1591V14.94ZM25.4859 14.7626C25.5596 14.7737 25.6257 14.7916 25.6822 14.8069C25.814 14.8425 25.8934 14.864 25.8934 14.752C25.8934 14.6703 26.1097 14.776 26.4079 14.9216C26.7964 15.1114 27.3241 15.3691 27.6938 15.3691C28.0159 15.3691 28.1386 15.2648 28.1804 15.1591V15.5843C28.1804 15.6602 28.1971 15.7503 28.2128 15.835C28.2416 15.9904 28.2671 16.1278 28.1804 16.1278C28.0463 16.1278 27.4458 16.5501 27.4458 17.0365C27.4458 17.5229 28.1804 17.9225 28.1804 17.9225C28.1804 17.9225 27.6938 19.6349 27.2681 19.8965C27.0098 20.0553 26.8566 19.925 26.7761 19.8565C26.724 19.8121 26.7023 19.7937 26.7023 19.8965C26.7023 20.1581 26.3334 20.5271 25.8934 20.6727C25.609 20.7669 25.6923 20.8391 25.7868 20.921C25.8384 20.9657 25.8934 21.0134 25.8934 21.069C25.8934 21.1949 25.5463 21.0189 25.407 20.9432C25.2677 21.0189 24.9206 21.1949 24.9206 21.069C24.9206 21.0134 24.9756 20.9657 25.0273 20.921C25.1217 20.8391 25.2051 20.7669 24.9206 20.6727C24.4807 20.5271 24.1117 20.1581 24.1117 19.8965C24.1117 19.7937 24.0901 19.8121 24.0379 19.8565C23.9574 19.925 23.8043 20.0553 23.5459 19.8965C23.1203 19.6349 22.6337 17.9225 22.6337 17.9225C22.6337 17.9225 23.3682 17.5229 23.3682 17.0365C23.3682 16.5501 22.7678 16.1278 22.6337 16.1278C22.5469 16.1278 22.5724 15.9904 22.6013 15.835C22.617 15.7503 22.6337 15.6602 22.6337 15.5843V15.1591C22.6754 15.2648 22.7982 15.3691 23.1203 15.3691C23.49 15.3691 24.0176 15.1114 24.4062 14.9216C24.7044 14.776 24.9206 14.6703 24.9206 14.752C24.9206 14.864 25 14.8425 25.1318 14.8069C25.1883 14.7916 25.2545 14.7737 25.3281 14.7626C25.3351 14.7556 25.3425 14.752 25.3502 14.752C25.3695 14.752 25.3884 14.7526 25.407 14.7539C25.4256 14.7526 25.4445 14.752 25.4638 14.752C25.4716 14.752 25.4789 14.7556 25.4859 14.7626ZM22.6337 14.94C22.6337 14.94 22.5908 15.0503 22.6337 15.1591V14.94Z" fill="white"/>
</mask>
<g mask="url(#mask2_270_67338)">
<path fill-rule="evenodd" clip-rule="evenodd" d="M22.4652 16.8928C22.4652 16.8928 24.6518 16.6599 25.9357 16.6599C27.2197 16.6599 26.5293 16.7389 27.0228 16.7943C27.5163 16.8497 28.0117 16.8928 28.0117 16.8928V21.2857H22.4652V16.8928Z" fill="white"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M22.9849 16.2727C22.9849 16.2727 22.8062 15.9226 23.5312 15.7973C24.2561 15.6721 24.4804 15.6194 24.7551 15.946C25.0299 16.2727 25.5882 17.6792 25.1717 18.0571C24.7551 18.435 24.4649 18.8327 24.3001 18.6944C24.1353 18.5561 24.4878 18.0571 23.6162 18.0571C22.7447 18.0571 22.4469 18.0571 22.4469 18.0571L22.9849 16.2727Z" fill="#FFDA3A"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M26.6573 16.6123L25.0945 17.0915C25.0945 17.0915 25.2361 18.1583 24.833 18.1583C24.4299 18.1583 24.2582 15.8491 24.2582 15.8491H24.0917L24.6227 18.3886L24.2582 18.6245L25.3745 19.1207L27.267 18.1583L26.6573 16.6123Z" fill="#B35A1F"/>
</g>
<path fill-rule="evenodd" clip-rule="evenodd" d="M24.4062 14.9216C24.0176 15.1114 23.49 15.3691 23.1203 15.3691C22.8619 15.3691 22.6997 15.3188 22.6337 15.2181V15.5843C22.6337 15.6602 22.617 15.7503 22.6013 15.835C22.5724 15.9904 22.5469 16.1278 22.6337 16.1278C22.7678 16.1278 23.3682 16.5501 23.3682 17.0365C23.3682 17.3608 23.1234 17.6561 22.6337 17.9225C22.9581 19.0641 23.2622 19.7221 23.5459 19.8965C23.7743 20.0369 23.9204 19.9513 24.0108 19.8791C24.0207 19.8712 24.0297 19.8635 24.0379 19.8565C24.0901 19.8121 24.1117 19.7937 24.1117 19.8965C24.1117 19.906 24.1122 19.9157 24.1138 19.9313C24.144 20.1898 24.4998 20.5334 24.9206 20.6727C25.2051 20.7669 25.1217 20.8391 25.0273 20.921C24.9756 20.9657 24.9206 21.0134 24.9206 21.069C24.9206 21.1684 25.0828 21.1267 25.407 20.9441C25.7313 21.1267 25.8934 21.1684 25.8934 21.069C25.8934 21.0134 25.8384 20.9657 25.7868 20.921C25.6923 20.8391 25.609 20.7669 25.8934 20.6727C26.3142 20.5334 26.6701 20.1898 26.7009 19.9254C26.7019 19.9157 26.7023 19.906 26.7023 19.8965C26.7023 19.7937 26.724 19.8121 26.7786 19.8585C26.7873 19.8658 26.7968 19.8739 26.8071 19.8823C26.8936 19.9513 27.0398 20.0369 27.2681 19.8965C27.5519 19.7221 27.856 19.0641 28.1804 17.9225C27.6907 17.6561 27.4458 17.3608 27.4458 17.0365C27.4458 16.5501 28.0463 16.1278 28.1804 16.1278C28.2671 16.1278 28.2416 15.9904 28.2128 15.835C28.1971 15.7503 28.1804 15.6602 28.1804 15.5843V15.2181C28.2256 15.1491 28.2256 15.0564 28.1804 14.94V15.2181C28.1144 15.3188 27.9522 15.3691 27.6938 15.3691C27.3241 15.3691 26.7964 15.1114 26.4079 14.9216C26.1097 14.776 25.8934 14.6703 25.8934 14.752C25.8934 14.864 25.814 14.8425 25.6822 14.8069C25.6268 14.7918 25.562 14.7743 25.49 14.7632C25.4816 14.7557 25.4729 14.752 25.4638 14.752C25.4445 14.752 25.4256 14.7526 25.407 14.7539C25.3884 14.7526 25.3695 14.752 25.3502 14.752C25.3411 14.752 25.3324 14.7557 25.3241 14.7632C25.252 14.7743 25.1873 14.7918 25.1318 14.8069C25 14.8425 24.9206 14.864 24.9206 14.752C24.9206 14.6703 24.7044 14.776 24.4062 14.9216Z" fill="#FFD129"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M29.9185 11.0427H21.0298V19.6525C21.0298 20.4978 21.3818 20.8292 21.8013 21.2242C21.9258 21.3414 22.0562 21.4642 22.1852 21.6078C22.5609 22.0259 23.6572 22.4581 25.4742 22.9046C25.9717 22.9046 26.7908 22.6322 27.9315 22.0874C29.0722 21.5426 29.7346 20.8577 29.9185 20.0326V11.0427ZM21.8093 20.9395C21.3898 20.5338 21.2391 20.2392 21.2391 19.6525V11.257H29.7092V20.0078C29.5344 20.7493 28.9194 21.3791 27.8431 21.8932C26.7477 22.4163 25.9596 22.6811 25.498 22.69C23.7384 22.2562 22.6742 21.8355 22.3392 21.4627C22.3128 21.4332 22.2856 21.4039 22.2576 21.3745C22.1877 21.301 22.1166 21.2309 22.0245 21.1434C22.0294 21.1481 21.8551 20.9839 21.8093 20.9395Z" fill="black"/>
</g>
<g clip-path="url(#clip1_270_67338)">
<rect width="18" height="14" fill="#2E42A5"/>
<path d="M-2.00427 12.9998L1.95668 14.737L18.0899 1.88872L20.1792 -0.69281L15.9435 -1.27343L9.36317 4.26326L4.06667 7.99369L-2.00427 12.9998Z" fill="#F7FCFF"/>
<path d="M-1.46204 14.2169L0.555885 15.225L19.4289 -0.932678H16.5955L-1.46204 14.2169Z" fill="#F50100"/>
<path d="M20.0043 12.9998L16.0433 14.737L-0.0898743 1.88872L-2.17919 -0.69281L2.05648 -1.27343L8.63683 4.26326L13.9333 7.99369L20.0043 12.9998Z" fill="#F7FCFF"/>
<path d="M19.8691 13.8733L17.8512 14.8815L9.81489 7.96351L7.43229 7.19059L-2.3802 -0.683947H0.453194L10.2602 7.00368L12.8651 7.9305L19.8691 13.8733Z" fill="#F50100"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M9.98451 0H7.98451V6H0V8H7.98451V14H9.98451V8H18V6H9.98451V0Z" fill="#F50100"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M6.48451 0H11.4845V4.5H18V9.5H11.4845L11.5 14H6.5L6.48451 9.5H0V4.5H6.48451V0ZM7.98451 6H0V8H7.98451V14H9.98451V8H18V6H9.98451V0H7.98451V6Z" fill="#F7FCFF"/>
</g>
</g>
</g>
<defs>
<clipPath id="clip0_270_67338">
<rect width="32" height="24" fill="white"/>
</clipPath>
<clipPath id="clip1_270_67338">
<rect width="18" height="14" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 17 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 18 KiB

56
Flagpack/BO - Bolivia.svg Normal file
View File

@@ -0,0 +1,56 @@
<svg width="32" height="24" viewBox="0 0 32 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_270_67389)">
<rect width="32" height="24" fill="white"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M0 0V24H32V0H0Z" fill="#FECA00"/>
<mask id="mask0_270_67389" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="0" y="0" width="32" height="24">
<path fill-rule="evenodd" clip-rule="evenodd" d="M0 0V24H32V0H0Z" fill="white"/>
</mask>
<g mask="url(#mask0_270_67389)">
<path fill-rule="evenodd" clip-rule="evenodd" d="M0 0V8H32V0H0Z" fill="#DB501C"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M0 16V24H32V16H0Z" fill="#5EAA22"/>
<path d="M12.446 9.95908L12.4824 9.92383L19.702 16.8686L19.6657 16.9038L12.446 9.95908Z" fill="#864C26"/>
<path d="M20.2213 16.4173L20.1901 16.4569L11.791 10.2874L11.8222 10.2478L20.2213 16.4173Z" fill="#864C26"/>
<path d="M20.3983 15.8017L20.373 15.845L11.03 10.7595L11.0553 10.7161L20.3983 15.8017Z" fill="#A05A2C"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M11.6018 9.11224L12.3093 9.58032L12.2698 9.60729C12.2859 9.61656 12.3026 9.62651 12.3197 9.63712C12.3396 9.64946 12.3536 9.66433 12.3618 9.68142C12.3761 9.63916 12.3758 9.58784 12.3605 9.52666L12.3233 9.37762L12.4072 9.50826C12.5405 9.71585 12.5604 9.86438 12.4567 9.94843C12.3554 10.0305 12.196 10.0091 11.9806 9.89077L11.8931 9.84268L11.9929 9.84419C12.075 9.84543 12.1453 9.83575 12.2041 9.81534L12.1633 9.8044C12.1287 9.79513 12.1031 9.77091 12.0857 9.73295L12.0163 9.7803L11.6018 9.11224ZM10.7533 9.64132L11.5314 9.97942L11.4963 10.0137C11.5144 10.0203 11.5333 10.0274 11.5528 10.0352C11.5745 10.0439 11.5909 10.0561 11.6019 10.0715C11.6086 10.0275 11.5993 9.97711 11.5737 9.91964L11.5112 9.77933L11.6165 9.89341C11.7839 10.0747 11.8292 10.2175 11.7417 10.3183C11.6562 10.4167 11.4955 10.4233 11.2628 10.3442L11.1683 10.312L11.2669 10.2962C11.3481 10.2831 11.4158 10.2613 11.4703 10.2309L11.4278 10.2271C11.3915 10.224 11.3617 10.2039 11.3378 10.1685L11.2776 10.2272L10.7533 9.64132ZM10.8046 10.4531L10 10.1841L10.5733 10.7221L10.628 10.6585C10.6551 10.6922 10.6867 10.7099 10.7235 10.7099H10.7662C10.7146 10.745 10.649 10.7727 10.5691 10.7928L10.4723 10.8172L10.5693 10.841C10.8079 10.8995 10.9674 10.8789 11.044 10.7734C11.1224 10.6654 11.0648 10.5271 10.8823 10.3611L10.7674 10.2566L10.8419 10.3909C10.8724 10.4459 10.8861 10.4952 10.8833 10.5396C10.8709 10.5253 10.8536 10.5145 10.8312 10.5078C10.8107 10.5016 10.791 10.496 10.772 10.491L10.8046 10.4531ZM10.7166 10.4776L10.7174 10.4766L10.202 10.3043L10.5693 10.6489L10.5995 10.6138C10.5941 10.6033 10.5889 10.5921 10.5839 10.58L10.5873 10.5787L10.5628 10.5523L10.6614 10.4669L10.6738 10.4691C10.6875 10.4715 10.7018 10.4743 10.7166 10.4776Z" fill="#E7E7E7"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M13.4713 16.2132L14.306 14.7244L15.4769 15.0397L14.6343 16.3985H14.306V16.5467L13.4713 16.2132Z" fill="#925229"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M13.1135 10.4886L12.561 11.0628L12.36 14.857L14.3508 15.1472C14.3508 15.1472 13.4833 14.3855 13.3554 13.9155C13.2275 13.4454 13.1867 11.6906 13.4286 11.4238L13.6176 11.5341L13.7696 11.0826" fill="#FFE000"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M11.1892 10.7474C11.1892 10.7474 10.9752 13.71 10.9752 14.2304C10.9752 14.7507 11.417 15.9897 12.424 15.9897C13.431 15.9897 14.8127 15.4353 14.8127 15.2092C14.8127 14.9832 14.4002 14.8212 14.4002 14.8212C14.4002 14.8212 12.5483 14.9478 12.5483 14.2304C12.5483 13.5129 12.6741 11.3892 12.784 11.1388C12.894 10.8884 13.275 10.5108 13.275 10.5108L12.5483 9.9707L12.424 10.5108L11.958 10.3522L11.8158 11.1388L11.1892 10.7474Z" fill="#D52C1E"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M13.7765 11.0761L13.6426 11.4951L13.3721 11.381C13.3721 11.381 12.9677 13.2772 13.3721 14.0715C13.7765 14.8659 14.7948 14.9235 14.7948 14.9235L14.3646 11.4951L13.7765 11.0761Z" fill="#027934"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M13.7171 13.6382L12.7466 14.4057C12.7466 14.4057 12.4804 14.7872 12.7466 15.076C13.0128 15.3648 13.7507 15.6593 13.9248 15.3107C14.0989 14.962 14.6161 14.5537 14.6161 14.5537L13.7171 13.6382Z" fill="#E8A30C"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M14.4787 10.7425C14.7148 10.5372 14.8332 10.2868 14.7431 10.1831C14.6529 10.0794 14.3884 10.1618 14.1523 10.367C13.9162 10.5723 13.7978 10.8228 13.8879 10.9264C13.9781 11.0301 14.2426 10.9478 14.4787 10.7425Z" fill="#E1E5E8"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M13.8833 9.30331C13.8833 9.30331 13.7882 9.28385 13.7452 9.27733C13.4383 9.2308 13.2848 9.2934 13.2848 9.46512C13.2848 9.75879 13.4805 10.0759 13.4805 10.2977C13.4805 10.5195 13.49 10.8648 13.584 10.6922C13.6781 10.5195 14.1568 10.0007 14.1568 10.0007L13.8833 9.55058C13.8833 9.55058 14.5621 9.62693 14.2641 9.46512" fill="#D52C1E"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M15.9699 15.3782L15.4608 15.3731C15.0828 15.7468 15.048 16.2497 15.3456 16.857C15.3456 16.857 15.4432 16.9982 15.4774 16.985C15.5253 16.9665 15.5919 16.762 15.5919 16.762C15.5692 16.169 15.9472 15.7762 15.9699 15.3782Z" fill="#D52C1E"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M15.3252 15.3936L15.5083 15.3085C15.6887 15.6833 15.5983 16.0714 15.2502 16.4569L15.0988 16.3248C15.2502 15.8827 15.2502 15.6995 15.3252 15.3936Z" fill="#FFE000"/>
<path d="M15.0914 15.3816L15.2824 15.3257C15.3742 15.6396 15.3283 15.9634 15.148 16.292L14.9735 16.1963C15.1295 15.9122 15.1677 15.6424 15.0914 15.3816Z" fill="#027934"/>
<path d="M19.554 9.95908L19.5176 9.92383L12.298 16.8686L12.3343 16.9038L19.554 9.95908Z" fill="#864C26"/>
<path d="M11.7787 16.4173L11.8099 16.4569L20.209 10.2874L20.1778 10.2478L11.7787 16.4173Z" fill="#864C26"/>
<path d="M11.6017 15.8017L11.627 15.845L20.97 10.7595L20.9447 10.7161L11.6017 15.8017Z" fill="#A05A2C"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M20.3982 9.11224L19.6907 9.58032L19.7302 9.60729C19.7141 9.61656 19.6974 9.62651 19.6803 9.63712C19.6604 9.64946 19.6464 9.66433 19.6382 9.68142C19.6239 9.63916 19.6242 9.58784 19.6395 9.52666L19.6767 9.37762L19.5928 9.50826C19.4595 9.71585 19.4396 9.86438 19.5433 9.94843C19.6446 10.0305 19.804 10.0091 20.0194 9.89077L20.1069 9.84268L20.0071 9.84419C19.925 9.84543 19.8547 9.83575 19.7959 9.81534L19.8367 9.8044C19.8713 9.79513 19.8969 9.77091 19.9143 9.73295L19.9837 9.7803L20.3982 9.11224ZM21.2467 9.64132L20.4686 9.97942L20.5037 10.0137C20.4856 10.0203 20.4667 10.0274 20.4472 10.0352C20.4255 10.0439 20.4091 10.0561 20.3981 10.0715C20.3914 10.0275 20.4007 9.97711 20.4263 9.91964L20.4888 9.77933L20.3835 9.89341C20.2161 10.0747 20.1708 10.2175 20.2583 10.3183C20.3438 10.4167 20.5045 10.4233 20.7372 10.3442L20.8317 10.312L20.7331 10.2962C20.6519 10.2831 20.5842 10.2613 20.5297 10.2309L20.5722 10.2271C20.6085 10.224 20.6383 10.2039 20.6622 10.1685L20.7224 10.2272L21.2467 9.64132ZM21.1954 10.4531L22 10.1841L21.4267 10.7221L21.372 10.6585C21.3449 10.6922 21.3133 10.7099 21.2765 10.7099H21.2338C21.2854 10.745 21.351 10.7727 21.4309 10.7928L21.5277 10.8172L21.4307 10.841C21.1921 10.8995 21.0326 10.8789 20.956 10.7734C20.8776 10.6654 20.9352 10.5271 21.1177 10.3611L21.2326 10.2566L21.1581 10.3909C21.1276 10.4459 21.1139 10.4952 21.1167 10.5396C21.1291 10.5253 21.1464 10.5145 21.1688 10.5078C21.1893 10.5016 21.209 10.496 21.228 10.491L21.1954 10.4531ZM21.2834 10.4776L21.2826 10.4766L21.798 10.3043L21.4307 10.6489L21.4005 10.6138C21.4059 10.6033 21.4111 10.5921 21.4161 10.58L21.4127 10.5787L21.4372 10.5523L21.3386 10.4669L21.3262 10.4691C21.3125 10.4715 21.2982 10.4743 21.2834 10.4776Z" fill="#E7E7E7"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M18.5287 16.2132L17.694 14.7244L16.5231 15.0397L17.3657 16.3985H17.694V16.5467L18.5287 16.2132Z" fill="#925229"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M18.8865 10.4886L19.439 11.0628L19.64 14.857L17.6492 15.1472C17.6492 15.1472 18.5167 14.3855 18.6446 13.9155C18.7725 13.4454 18.8133 11.6906 18.5714 11.4238L18.3824 11.5341L18.2304 11.0826" fill="#FFE000"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M20.8108 10.7474C20.8108 10.7474 21.0248 13.71 21.0248 14.2304C21.0248 14.7507 20.583 15.9897 19.576 15.9897C18.569 15.9897 17.1873 15.4353 17.1873 15.2092C17.1873 14.9832 17.5998 14.8212 17.5998 14.8212C17.5998 14.8212 19.4517 14.9478 19.4517 14.2304C19.4517 13.5129 19.3259 11.3892 19.216 11.1388C19.106 10.8884 18.725 10.5108 18.725 10.5108L19.4517 9.9707L19.576 10.5108L20.042 10.3522L20.1842 11.1388L20.8108 10.7474Z" fill="#D52C1E"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M18.2235 11.0762L18.3574 11.4952L18.6279 11.3811C18.6279 11.3811 19.0323 13.2773 18.6279 14.0716C18.2235 14.8659 17.2052 14.9236 17.2052 14.9236L17.6354 11.4952L18.2235 11.0762Z" fill="#027934"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M18.2829 13.6382L19.2534 14.4057C19.2534 14.4057 19.5196 14.7872 19.2534 15.076C18.9872 15.3648 18.2493 15.6593 18.0752 15.3107C17.9011 14.962 17.3839 14.5537 17.3839 14.5537L18.2829 13.6382Z" fill="#E8A30C"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M17.5213 10.7425C17.2852 10.5372 17.1668 10.2868 17.2569 10.1831C17.3471 10.0794 17.6116 10.1618 17.8477 10.367C18.0838 10.5723 18.2022 10.8228 18.1121 10.9264C18.0219 11.0301 17.7574 10.9478 17.5213 10.7425Z" fill="#E1E5E8"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M16.0301 15.3782L16.5392 15.3731C16.9172 15.7468 16.952 16.2497 16.6544 16.857C16.6544 16.857 16.5568 16.9982 16.5226 16.985C16.4747 16.9665 16.4081 16.762 16.4081 16.762C16.4308 16.169 16.0528 15.7762 16.0301 15.3782Z" fill="#D52C1E"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M16.6748 15.3936L16.4917 15.3085C16.3113 15.6833 16.4017 16.0714 16.7498 16.4569L16.9012 16.3248C16.7498 15.8827 16.7498 15.6995 16.6748 15.3936Z" fill="#FFE000"/>
<path d="M16.9086 15.3816L16.7176 15.3257C16.6258 15.6396 16.6717 15.9634 16.852 16.292L17.0265 16.1963C16.8705 15.9122 16.8323 15.6424 16.9086 15.3816Z" fill="#027934"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M13.5536 12.8209C13.5536 14.2601 14.6163 15.4577 15.9742 15.4577C17.3321 15.4577 18.3948 14.2601 18.3948 12.8209C18.3948 11.3817 17.3321 10.1841 15.9742 10.1841C14.6163 10.1841 13.5536 11.3817 13.5536 12.8209ZM17.8283 12.8209C17.8283 13.9749 16.9982 14.9104 15.9742 14.9104C14.9502 14.9104 14.1201 13.9749 14.1201 12.8209C14.1201 11.6669 14.9502 10.7313 15.9742 10.7313C16.9982 10.7313 17.8283 11.6669 17.8283 12.8209Z" fill="#00A6DE"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M15.9741 12.4478L15.7335 12.944L15.7395 12.396L15.2998 12.7422L15.5513 12.2511L14.9997 12.3787L15.4469 12.0416L14.8926 11.9254L15.4469 11.8091L14.9997 11.4721L15.5513 11.5997L15.2998 11.1086L15.7395 11.4547L15.7335 10.9068L15.9741 11.403L16.2148 10.9068L16.2088 11.4547L16.6485 11.1086L16.3969 11.5997L16.9486 11.4721L16.5013 11.8091L17.0557 11.9254L16.5013 12.0416L16.9486 12.3787L16.3969 12.2511L16.6485 12.7422L16.2088 12.396L16.2148 12.944L15.9741 12.4478Z" fill="#D52C1E"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M14.0411 12.9411C14.0411 12.9411 15.491 11.9201 15.8472 11.9201C16.2034 11.9201 17.7229 12.9466 18.0338 13.0863C18.3446 13.2259 18.0338 15.9642 18.0338 15.9642H13.9209L14.0411 12.9411Z" fill="#027934"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M14.0304 11.7258L14.1198 11.7753C14.6083 10.9508 15.23 10.5419 15.9882 10.5419C16.8371 10.5891 17.4729 11.0525 17.8972 11.9384L17.9907 11.8966C17.5511 10.9789 16.883 10.492 15.9911 10.4424C15.1898 10.4424 14.5361 10.8724 14.0304 11.7258ZM13.6704 13.3159L13.8369 13.204L14.0034 13.3159L13.9447 13.1284L14.1063 13.01L13.9035 13.006L13.8369 12.8209L13.7703 13.006L13.5675 13.01L13.7291 13.1284L13.6704 13.3159ZM14.0429 13.9503L13.8764 14.0622L13.9352 13.8746L13.7735 13.7563L13.9763 13.7523L14.0429 13.5672L14.1095 13.7523L14.3123 13.7563L14.1507 13.8746L14.2094 14.0622L14.0429 13.9503ZM14.2884 14.6592L14.4549 14.5473L14.6214 14.6592L14.5627 14.4717L14.7243 14.3533L14.5215 14.3493L14.4549 14.1642L14.3883 14.3493L14.1855 14.3533L14.3472 14.4717L14.2884 14.6592ZM15.073 15.0448L14.9065 15.1567L14.9652 14.9692L14.8036 14.8508L15.0064 14.8468L15.073 14.6617L15.1396 14.8468L15.3424 14.8508L15.1807 14.9692L15.2395 15.1567L15.073 15.0448ZM15.782 15.4055L15.9485 15.2936L16.115 15.4055L16.0563 15.2179L16.2179 15.0995L16.0151 15.0956L15.9485 14.9105L15.8819 15.0956L15.6791 15.0995L15.8407 15.2179L15.782 15.4055ZM18.1116 13.204L18.2781 13.3159L18.2193 13.1284L18.381 13.01L18.1782 13.006L18.1116 12.8209L18.045 13.006L17.8422 13.01L18.0038 13.1284L17.9451 13.3159L18.1116 13.204ZM18.0721 14.0622L17.9056 13.9503L17.7391 14.0622L17.7978 13.8746L17.6362 13.7563L17.839 13.7523L17.9056 13.5672L17.9722 13.7523L18.175 13.7563L18.0133 13.8746L18.0721 14.0622ZM17.4936 14.5473L17.6601 14.6592L17.6013 14.4717L17.763 14.3533L17.5602 14.3493L17.4936 14.1642L17.427 14.3493L17.2242 14.3533L17.3858 14.4717L17.3271 14.6592L17.4936 14.5473ZM17.042 15.1567L16.8755 15.0448L16.709 15.1567L16.7678 14.9692L16.6061 14.8508L16.8089 14.8468L16.8755 14.6617L16.9421 14.8468L17.1449 14.8508L16.9833 14.9692L17.042 15.1567Z" fill="#FFC036"/>
<path d="M14.6834 7.00702L14.8821 7.15164C14.3727 7.60873 14.2769 8.11845 14.3745 8.55634C14.4761 9.01255 14.9278 9.49919 15.7491 9.99892L15.4472 10.462C14.5094 9.89134 13.9693 9.36332 13.8292 8.7345C13.685 8.08737 14.0389 7.58523 14.6834 7.00702Z" fill="#036A2D"/>
<path d="M17.3866 7.00702L17.1878 7.15164C17.6973 7.60873 17.793 8.11845 17.6955 8.55634C17.5939 9.01255 17.1421 9.49919 16.3208 9.99892L16.6228 10.462C17.5606 9.89134 18.1007 9.36332 18.2408 8.7345C18.3849 8.08737 18.031 7.58523 17.3866 7.00702Z" fill="#036A2D"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M12.7751 8.86155C12.7751 8.86155 13.6445 8.26042 14.057 8.26042C14.4696 8.26042 15.0202 8.12273 15.1065 8.43899C15.1928 8.75526 15.356 8.66366 15.6755 8.66366C15.9951 8.66366 16.6229 8.66366 16.6229 8.66366C16.6229 8.66366 16.4354 8.26042 16.783 8.26042C17.1305 8.26042 18.5819 8.46578 19.02 8.66366C19.4581 8.86155 19.4801 8.97853 19.4801 8.97853C19.4801 8.97853 19.0747 8.74457 18.6262 8.86155C18.1776 8.97853 17.3641 9.49359 16.9935 9.49359C16.6229 9.49359 16.3264 9.89173 16.3264 9.89173C16.3264 9.89173 16.3508 9.68765 16.0132 9.78969C15.6755 9.89173 15.6834 10.3724 15.395 10.2842C15.1065 10.1959 15.4781 9.49359 15.395 9.49359C15.3119 9.49359 14.7229 9.26275 14.7229 9.26275C14.7229 9.26275 14.1514 8.74457 13.3028 8.86155C12.4542 8.97853 12.7751 8.86155 12.7751 8.86155Z" fill="#452C24"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M15.8713 9.2886C16.0419 9.2886 16.1803 9.16609 16.1803 9.01496C16.1803 8.86384 16.0419 8.74133 15.8713 8.74133C15.7006 8.74133 15.5623 8.86384 15.5623 9.01496C15.5623 9.16609 15.7006 9.2886 15.8713 9.2886Z" fill="#E7E7E7"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M15.2037 9.00719C15.2037 9.00719 15.3036 8.81824 15.5017 8.81824C15.6998 8.81824 16.0711 8.81824 16.0711 8.91272C16.0711 9.00719 16.1009 9.13061 15.8013 9.13061C15.5017 9.13061 15.6937 9.00719 15.5017 9.00719C15.3097 9.00719 15.2037 9.00719 15.2037 9.00719Z" fill="#E8A30C"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M18.7363 10.2834C18.8514 10.1628 18.9158 9.87043 18.9158 9.87043C18.9158 9.87043 18.4016 9.95273 18.2819 9.87043C18.1622 9.78813 18.1001 9.54694 18.1001 9.54694C18.1001 9.54694 17.6369 9.75861 17.8135 9.75861C17.9902 9.75861 18.1001 9.91516 18.1001 9.91516L18.4596 10.0476C18.4596 10.0476 18.2209 10.2834 18.3403 10.2834C18.4596 10.2834 18.6212 10.404 18.7363 10.2834Z" fill="#E1E5E8"/>
<path d="M17.8307 10.3838L17.766 10.3065L18.2177 9.95294L18.2824 10.0303L17.8307 10.3838Z" fill="#925229"/>
</g>
</g>
<defs>
<clipPath id="clip0_270_67389">
<rect width="32" height="24" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 15 KiB

View File

@@ -0,0 +1,19 @@
<svg width="32" height="24" viewBox="0 0 32 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_270_67331)">
<rect width="32" height="24" fill="white"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M0 0H32V24H0V0Z" fill="white"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M0 10.9333V0H16L0 10.9333Z" fill="#FEDA00"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M0 24H32.009V0L0 24Z" fill="#00268D"/>
<mask id="path-4-inside-1_270_67331" fill="white">
<path fill-rule="evenodd" clip-rule="evenodd" d="M9.35333 5L9.88021 6.13122C12.026 6.38728 13.6976 8.18766 13.752 10.3893L14.7067 10.8667L13.6636 11.3882C13.29 13.2109 11.7892 14.6229 9.92151 14.8637L9.35333 16L8.78516 14.8637C6.91744 14.6229 5.41664 13.2109 5.04302 11.3882L4 10.8667L4.9547 10.3893C5.00875 8.19991 6.66211 6.40732 8.79069 6.13564L9.35333 5Z"/>
</mask>
<path fill-rule="evenodd" clip-rule="evenodd" d="M9.35333 5L9.88021 6.13122C12.026 6.38728 13.6976 8.18766 13.752 10.3893L14.7067 10.8667L13.6636 11.3882C13.29 13.2109 11.7892 14.6229 9.92151 14.8637L9.35333 16L8.78516 14.8637C6.91744 14.6229 5.41664 13.2109 5.04302 11.3882L4 10.8667L4.9547 10.3893C5.00875 8.19991 6.66211 6.40732 8.79069 6.13564L9.35333 5Z" fill="white"/>
<path d="M9.88021 6.13122L9.16226 6.46561L9.34846 6.86538L9.78637 6.91764L9.88021 6.13122ZM9.35333 5L10.0713 4.66561L9.37538 3.17149L8.64366 4.6484L9.35333 5ZM13.752 10.3893L12.9602 10.4089L12.972 10.8848L13.3978 11.0977L13.752 10.3893ZM14.7067 10.8667L15.0609 11.5751L16.4776 10.8667L15.0609 10.1583L14.7067 10.8667ZM13.6636 11.3882L13.3095 10.6798L12.9651 10.852L12.8878 11.2291L13.6636 11.3882ZM9.92151 14.8637L9.82024 14.0782L9.4018 14.1321L9.21312 14.5095L9.92151 14.8637ZM9.35333 16L8.64495 16.3542L9.35333 17.771L10.0617 16.3542L9.35333 16ZM8.78516 14.8637L9.49355 14.5095L9.30487 14.1321L8.88643 14.0782L8.78516 14.8637ZM5.04302 11.3882L5.81889 11.2291L5.74158 10.852L5.39721 10.6798L5.04302 11.3882ZM4 10.8667L3.64581 10.1583L2.22903 10.8667L3.64581 11.5751L4 10.8667ZM4.9547 10.3893L5.30889 11.0977L5.73471 10.8848L5.74646 10.4089L4.9547 10.3893ZM8.79069 6.13564L8.89097 6.92126L9.31196 6.86753L9.50037 6.48724L8.79069 6.13564ZM10.5982 5.79683L10.0713 4.66561L8.63539 5.33439L9.16226 6.46561L10.5982 5.79683ZM14.5437 10.3698C14.4796 7.77083 12.507 5.64707 9.97405 5.3448L9.78637 6.91764C11.545 7.1275 12.9157 8.60448 12.9602 10.4089L14.5437 10.3698ZM15.0609 10.1583L14.1062 9.68093L13.3978 11.0977L14.3525 11.5751L15.0609 10.1583ZM14.0178 12.0966L15.0609 11.5751L14.3525 10.1583L13.3095 10.6798L14.0178 12.0966ZM10.0228 15.6492C12.2285 15.3648 13.9984 13.6991 14.4395 11.5472L12.8878 11.2291C12.5816 12.7228 11.3499 13.8809 9.82024 14.0782L10.0228 15.6492ZM9.21312 14.5095L8.64495 15.6458L10.0617 16.3542L10.6299 15.2178L9.21312 14.5095ZM10.0617 15.6458L9.49355 14.5095L8.07677 15.2178L8.64495 16.3542L10.0617 15.6458ZM4.26715 11.5472C4.70822 13.6991 6.47813 15.3648 8.68389 15.6492L8.88643 14.0782C7.35675 13.8809 6.12506 12.7228 5.81889 11.2291L4.26715 11.5472ZM3.64581 11.5751L4.68882 12.0966L5.39721 10.6798L4.35419 10.1583L3.64581 11.5751ZM4.6005 9.68093L3.64581 10.1583L4.35419 11.5751L5.30889 11.0977L4.6005 9.68093ZM8.69042 5.35001C6.17777 5.67072 4.22675 7.78525 4.16294 10.3698L5.74646 10.4089C5.79076 8.61457 7.14645 7.14393 8.89097 6.92126L8.69042 5.35001ZM8.64366 4.6484L8.08102 5.78403L9.50037 6.48724L10.063 5.3516L8.64366 4.6484Z" fill="black" mask="url(#path-4-inside-1_270_67331)"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M9.37578 8.29999L8.72675 9.38905H7.44666L8.08496 10.5332L7.44666 11.6307H8.72675L9.37578 12.7505L10.0347 11.6307H11.3033L10.6806 10.5332L11.3033 9.38905H10.0347L9.37578 8.29999Z" fill="#F00A17"/>
</g>
<defs>
<clipPath id="clip0_270_67331">
<rect width="32" height="24" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 3.7 KiB

16
Flagpack/BQ-SA - Saba.svg Normal file
View File

@@ -0,0 +1,16 @@
<svg width="32" height="24" viewBox="0 0 32 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_270_67332)">
<rect width="32" height="24" fill="white"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M0 0H32V24H0V0Z" fill="white"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M0 11.664V0H16L0 11.664Z" fill="#F00000"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M32 11.664V0H16L32 11.664Z" fill="#F00000"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M0 11.664V24H16L0 11.664Z" fill="#00268D"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M32 11.664V24.336L16 24L32 11.664Z" fill="#00268D"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M15.714 14.2563L12.1965 16.7633L13.4873 12.622L10 10.087H14.3446L15.714 6L17.1655 10.087H21.3918L17.9349 12.622L19.2489 16.7633L15.714 14.2563Z" fill="#FEDA00"/>
</g>
<defs>
<clipPath id="clip0_270_67332">
<rect width="32" height="24" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 966 B

View File

@@ -0,0 +1,16 @@
<svg width="32" height="24" viewBox="0 0 32 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_270_67564)">
<rect width="32" height="24" fill="white"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M0 0H32V24H0V0Z" fill="#00268D"/>
<path d="M1 1H31V23H1V1Z" fill="#00268D" stroke="#E31D1C" stroke-width="2"/>
<rect x="15" width="2" height="24" fill="#E31D1C"/>
<rect y="13" width="2" height="32" transform="rotate(-90 0 13)" fill="#E31D1C"/>
<path d="M11.6088 16C11.8778 16 25 16 25 16L23.5841 14.7239C23.5841 14.7239 20.7528 12.2005 20.5706 12.0849C20.3884 11.9692 20.0874 11.9193 19.7449 12.2869C19.4023 12.6544 19.2059 12.0849 18.9207 12.0849C18.6355 12.0849 18.5149 12.0849 18.1011 12.5565C17.6874 13.028 16.1973 14.7239 16.1973 14.7239H14.0075C14.0075 14.7239 13.6381 14.4453 13.4276 14.5447C13.2171 14.6441 12.0312 13.4452 11.6088 13.3557C11.1864 13.2661 10.9085 13.6806 10.9085 14.0105C10.9085 14.3404 10.7098 13.7082 10.3056 13.8938C9.90147 14.0794 10.0318 14.5447 10.0318 14.5447C10.0318 14.5447 11.3398 16 11.6088 16Z" fill="#059334"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M15.5048 11.3012L14.5785 12L14.9184 10.8457L14 10.1391H15.1441L15.5048 9L15.887 10.1391H17L16.0896 10.8457L16.4357 12L15.5048 11.3012Z" fill="#FEDA00"/>
</g>
<defs>
<clipPath id="clip0_270_67564">
<rect width="32" height="24" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

48
Flagpack/BR - Brazil.svg Normal file
View File

@@ -0,0 +1,48 @@
<svg width="32" height="24" viewBox="0 0 32 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_270_67334)">
<rect width="32" height="24" fill="white"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M0 0V24H32V0H0Z" fill="#009933"/>
<mask id="mask0_270_67334" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="0" y="0" width="32" height="24">
<path fill-rule="evenodd" clip-rule="evenodd" d="M0 0V24H32V0H0Z" fill="white"/>
</mask>
<g mask="url(#mask0_270_67334)">
<g filter="url(#filter0_d_270_67334)">
<path fill-rule="evenodd" clip-rule="evenodd" d="M15.9268 3.70404L28.1286 12.2075L15.7608 20.1713L3.80893 12.0427L15.9268 3.70404Z" fill="#FFD221"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M15.9268 3.70404L28.1286 12.2075L15.7608 20.1713L3.80893 12.0427L15.9268 3.70404Z" fill="url(#paint0_linear_270_67334)"/>
</g>
<path fill-rule="evenodd" clip-rule="evenodd" d="M16 17.2C18.7614 17.2 21 14.9614 21 12.2C21 9.43859 18.7614 7.20001 16 7.20001C13.2386 7.20001 11 9.43859 11 12.2C11 14.9614 13.2386 17.2 16 17.2Z" fill="#2E42A5"/>
<mask id="mask1_270_67334" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="11" y="7" width="10" height="11">
<path fill-rule="evenodd" clip-rule="evenodd" d="M16 17.2C18.7614 17.2 21 14.9614 21 12.2C21 9.43859 18.7614 7.20001 16 7.20001C13.2386 7.20001 11 9.43859 11 12.2C11 14.9614 13.2386 17.2 16 17.2Z" fill="white"/>
</mask>
<g mask="url(#mask1_270_67334)">
<path fill-rule="evenodd" clip-rule="evenodd" d="M14.38 14.57L14.1566 14.6874L14.1993 14.4387L14.0186 14.2626L14.2683 14.2263L14.38 14L14.4917 14.2263L14.7414 14.2626L14.5607 14.4387L14.6034 14.6874L14.38 14.57Z" fill="#F7FCFF"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M16.38 14.57L16.1566 14.6874L16.1993 14.4387L16.0186 14.2626L16.2683 14.2263L16.38 14L16.4917 14.2263L16.7414 14.2626L16.5607 14.4387L16.6034 14.6874L16.38 14.57Z" fill="#F7FCFF"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M16.38 15.77L16.1566 15.8874L16.1993 15.6387L16.0186 15.4626L16.2683 15.4263L16.38 15.2L16.4917 15.4263L16.7414 15.4626L16.5607 15.6387L16.6034 15.8874L16.38 15.77Z" fill="#F7FCFF"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M15.38 11.57L15.1566 11.6874L15.1993 11.4387L15.0186 11.2626L15.2683 11.2263L15.38 11L15.4917 11.2263L15.7414 11.2626L15.5607 11.4387L15.6034 11.6874L15.38 11.57Z" fill="#F7FCFF"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M15.38 13.57L15.1566 13.6874L15.1993 13.4387L15.0186 13.2626L15.2683 13.2263L15.38 13L15.4917 13.2263L15.7414 13.2626L15.5607 13.4387L15.6034 13.6874L15.38 13.57Z" fill="#F7FCFF"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M13.98 12.57L13.7566 12.6874L13.7993 12.4387L13.6186 12.2626L13.8683 12.2263L13.98 12L14.0917 12.2263L14.3414 12.2626L14.1607 12.4387L14.2033 12.6874L13.98 12.57Z" fill="#F7FCFF"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M12.58 13.37L12.3566 13.4874L12.3993 13.2387L12.2185 13.0626L12.4683 13.0263L12.58 12.8L12.6916 13.0263L12.9414 13.0626L12.7607 13.2387L12.8033 13.4874L12.58 13.37Z" fill="#F7FCFF"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M17.18 9.97002L16.9567 10.0875L16.9993 9.83874L16.8186 9.6626L17.0684 9.62631L17.18 9.40002L17.2917 9.62631L17.5415 9.6626L17.3607 9.83874L17.4034 10.0875L17.18 9.97002Z" fill="#F7FCFF"/>
<path d="M9.9248 10.9971L10.0752 9.00281C14.8731 9.36459 18.66 10.9422 21.3882 13.7484L19.9542 15.1425C17.5896 12.7103 14.2624 11.3242 9.9248 10.9971Z" fill="#F7FCFF"/>
<path d="M12.2894 10.6028L12.3409 10.1055C15.4339 10.4259 18.0868 11.6105 20.2917 13.657L19.9516 14.0234C17.8269 12.0515 15.2755 10.9121 12.2894 10.6028Z" fill="#009933"/>
</g>
</g>
</g>
<defs>
<filter id="filter0_d_270_67334" x="3.80896" y="3.70404" width="24.3197" height="16.4672" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
<feOffset/>
<feColorMatrix type="matrix" values="0 0 0 0 0.0313726 0 0 0 0 0.368627 0 0 0 0 0 0 0 0 0.28 0"/>
<feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_270_67334"/>
<feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_270_67334" result="shape"/>
</filter>
<linearGradient id="paint0_linear_270_67334" x1="32" y1="24" x2="32" y2="0" gradientUnits="userSpaceOnUse">
<stop stop-color="#FFC600"/>
<stop offset="1" stop-color="#FFDE42"/>
</linearGradient>
<clipPath id="clip0_270_67334">
<rect width="32" height="24" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 4.5 KiB

14
Flagpack/BS - Bahamas.svg Normal file
View File

@@ -0,0 +1,14 @@
<svg width="32" height="24" viewBox="0 0 32 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_270_67335)">
<rect width="32" height="24" fill="white"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M0 0H32V24H0V0Z" fill="#FECA00"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M0 0V8H32V0H0Z" fill="#3CB1CF"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M0 16V24H32V16H0Z" fill="#3CB1CF"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M0 0L16 12L0 24V0Z" fill="#272727"/>
</g>
<defs>
<clipPath id="clip0_270_67335">
<rect width="32" height="24" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 629 B

27
Flagpack/BT - Bhutan.svg Normal file

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 172 KiB

View File

@@ -0,0 +1,17 @@
<svg width="32" height="24" viewBox="0 0 32 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_270_67337)">
<rect width="32" height="24" fill="white"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M0 0V24H32V0H0Z" fill="#E31D1C"/>
<mask id="mask0_270_67337" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="0" y="0" width="32" height="24">
<path fill-rule="evenodd" clip-rule="evenodd" d="M0 0V24H32V0H0Z" fill="white"/>
</mask>
<g mask="url(#mask0_270_67337)">
<path d="M10 -1H9V0V9H0H-1V10V14V15H0H9V24V25H10H14H15V24V15H32H33V14V10V9H32H15V0V-1H14H10Z" fill="#2E42A5" stroke="#F7FCFF" stroke-width="2"/>
</g>
</g>
<defs>
<clipPath id="clip0_270_67337">
<rect width="32" height="24" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 766 B

View File

@@ -0,0 +1,18 @@
<svg width="32" height="24" viewBox="0 0 32 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_270_67339)">
<rect width="32" height="24" fill="white"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M0 0V24H32V0H0Z" fill="#42ADDF"/>
<mask id="mask0_270_67339" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="0" y="0" width="32" height="24">
<path fill-rule="evenodd" clip-rule="evenodd" d="M0 0V24H32V0H0Z" fill="white"/>
</mask>
<g mask="url(#mask0_270_67339)">
<path fill-rule="evenodd" clip-rule="evenodd" d="M0 0V8H32V0H0Z" fill="#58A5FF"/>
<path d="M0 9H-1V10V14V15H0H32H33V14V10V9H32H0Z" fill="#272727" stroke="#F7FCFF" stroke-width="2"/>
</g>
</g>
<defs>
<clipPath id="clip0_270_67339">
<rect width="32" height="24" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 803 B

40
Flagpack/BY - Belarus.svg Normal file
View File

@@ -0,0 +1,40 @@
<svg width="32" height="24" viewBox="0 0 32 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_270_67340)">
<rect width="32" height="24" fill="white"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M0 0H32V24H0V0Z" fill="#73BE4A"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M0 0V16H32V0H0Z" fill="#AF0100"/>
<rect width="6" height="24" fill="#F7FCFF"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M0.444214 2.23605L1.89684 0.0568237L3.31207 2.23599L1.8968 4.31536L0.444214 2.23605ZM1.89149 3.42535L2.70566 2.22914L1.89145 0.975423L1.05579 2.22908L1.89149 3.42535ZM2 2.06451H1.75V2.58064H2V2.06451Z" fill="#B20000"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M1.13706 4.18585L0.444214 5.17654L1.13704 6.1218L1.81207 5.17651L1.13706 4.18585ZM1.46111 5.19333L1.14893 5.61712L0.832999 5.16805L1.14809 4.70299L1.46111 5.19333Z" fill="#B20000"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M2.63706 4.18585L1.94421 5.17654L2.63704 6.1218L3.31207 5.17651L2.63706 4.18585ZM2.96111 5.19333L2.64893 5.61712L2.333 5.16805L2.64809 4.70299L2.96111 5.19333Z" fill="#B20000"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M3.63706 4.18585L2.94421 5.17654L3.63704 6.1218L4.31207 5.17651L3.63706 4.18585ZM3.96111 5.19333L3.64893 5.61712L3.333 5.16805L3.64809 4.70299L3.96111 5.19333Z" fill="#B20000"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M5.13706 4.18585L4.44421 5.17654L5.13704 6.1218L5.81207 5.17651L5.13706 4.18585ZM5.46111 5.19333L5.14893 5.61712L4.833 5.16805L5.14809 4.70299L5.46111 5.19333Z" fill="#B20000"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M2.94421 2.23605L4.39684 0.0568237L5.81207 2.23599L4.3968 4.31536L2.94421 2.23605ZM4.39149 3.42535L5.20566 2.22914L4.39145 0.975423L3.55579 2.22908L4.39149 3.42535ZM4.5 2.06451H4.25V2.58064H4.5V2.06451Z" fill="#B20000"/>
<path d="M1.65615 12.4061L0.0369873 9.68705L0.462947 9.41676L1.63673 11.3879L3.06895 8.75592L4.53676 11.3942L5.57384 9.67285L5.99843 9.94543L4.51967 12.3998L3.07377 9.80095L1.65615 12.4061Z" fill="#B20000"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M0.75 0.516113H1.01882V1.03224H0.75V0.516113Z" fill="#B20000"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M3 0H3.26882V0.516129H3V0Z" fill="#B20000"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M5.25 0.516113H5.51882V1.03224H5.25V0.516113Z" fill="#B20000"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M0.75 3.61292H1V4.12904H0.75V3.61292ZM3 3.61292H3.25V4.12904H3V3.61292ZM5.5 3.61292H5.25V4.12904H5.5V3.61292Z" fill="#B20000"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M0.75 6.19354H1V6.70967H0.75V6.19354ZM3 6.19354H3.25V6.70967H3V6.19354ZM5.5 6.19354H5.25V6.70967H5.5V6.19354Z" fill="#B20000"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M2.2082 8.95476L1.544 9.92298L0.496338 8.03608L1.8761 5.88025L3.06266 7.75944L4.24923 5.88025L5.62899 8.03608L4.58133 9.92298L3.91713 8.95476L4.44153 7.86449L4.24923 7.4215L3.12899 9.23859V9.45376L3.06266 9.34618L2.99634 9.45376V9.23859L1.8761 7.4215L1.6838 7.86449L2.2082 8.95476Z" fill="#B20000"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M3 10.5806H3.25V11.0968H3V10.5806ZM3 13.1613H3.25V13.6774H3V13.1613ZM3 11.3548H2.75V11.8709H3V12.129H2.75V12.6451H3V12.3871H3.25V12.6451H3.5V12.129H3.25V11.8709H3.5V11.3548H3.25V11.8709H3V11.3548ZM2.25 11.8709H2.5V12.3871H2.25V11.8709ZM4 11.8709H3.75V12.3871H4V11.8709ZM0.5 11.8709H0.75V12.3871H0.5V11.8709ZM5.75 11.8709H5.5V12.3871H5.75V11.8709Z" fill="#B20000"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M0.444214 21.7639L1.89684 23.9432L3.31207 21.764L1.8968 19.6846L0.444214 21.7639ZM1.89149 20.5747L2.70566 21.7709L1.89145 23.0246L1.05579 21.7709L1.89149 20.5747ZM2 21.9355H1.75V21.4194H2V21.9355Z" fill="#B20000"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M1.13706 19.8141L0.444214 18.8235L1.13704 17.8782L1.81207 18.8235L1.13706 19.8141ZM1.46111 18.8067L1.14893 18.3829L0.832999 18.8319L1.14809 19.297L1.46111 18.8067Z" fill="#B20000"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M2.63706 19.8141L1.94421 18.8235L2.63704 17.8782L3.31207 18.8235L2.63706 19.8141ZM2.96111 18.8067L2.64893 18.3829L2.333 18.8319L2.64809 19.297L2.96111 18.8067Z" fill="#B20000"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M3.63706 19.8141L2.94421 18.8235L3.63704 17.8782L4.31207 18.8235L3.63706 19.8141ZM3.96111 18.8067L3.64893 18.3829L3.333 18.8319L3.64809 19.297L3.96111 18.8067Z" fill="#B20000"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M5.13706 19.8141L4.44421 18.8235L5.13704 17.8782L5.81207 18.8235L5.13706 19.8141ZM5.46111 18.8067L5.14893 18.3829L4.833 18.8319L5.14809 19.297L5.46111 18.8067Z" fill="#B20000"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M2.94421 21.7639L4.39684 23.9432L5.81207 21.764L4.3968 19.6846L2.94421 21.7639ZM4.39149 20.5747L5.20566 21.7709L4.39145 23.0246L3.55579 21.7709L4.39149 20.5747ZM4.5 21.9355H4.25V21.4194H4.5V21.9355Z" fill="#B20000"/>
<path d="M1.65615 11.5939L0.0369873 14.313L0.462947 14.5832L1.63673 12.6121L3.06895 15.2441L4.53676 12.6058L5.57384 14.3271L5.99843 14.0546L4.51967 11.6002L3.07377 14.1991L1.65615 11.5939Z" fill="#B20000"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M0.75 23.4839H1.01882V22.9678H0.75V23.4839Z" fill="#B20000"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M3 24H3.26882V23.4839H3V24Z" fill="#B20000"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M5.25 23.4839H5.51882V22.9678H5.25V23.4839Z" fill="#B20000"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M0.75 20.3871H1V19.871H0.75V20.3871ZM3 20.3871H3.25V19.871H3V20.3871ZM5.5 20.3871H5.25V19.871H5.5V20.3871Z" fill="#B20000"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M0.75 17.8065H1V17.2903H0.75V17.8065ZM3 17.8065H3.25V17.2903H3V17.8065ZM5.5 17.8065H5.25V17.2903H5.5V17.8065Z" fill="#B20000"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M2.2082 15.1928L1.544 14.2246L0.496338 16.1115L1.8761 18.2673L3.06266 16.3881L4.24923 18.2673L5.62899 16.1115L4.58133 14.2246L3.91713 15.1928L4.44153 16.2831L4.24923 16.7261L3.12899 14.909V14.6938L3.06266 14.8014L2.99634 14.6938V14.909L1.8761 16.7261L1.6838 16.2831L2.2082 15.1928Z" fill="#B20000"/>
</g>
<defs>
<clipPath id="clip0_270_67340">
<rect width="32" height="24" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 6.1 KiB

60
Flagpack/BZ - Belize.svg Normal file

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 41 KiB

14
Flagpack/CA - Canada.svg Normal file
View File

@@ -0,0 +1,14 @@
<svg width="32" height="24" viewBox="0 0 32 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_270_67341)">
<rect width="32" height="24" fill="white"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M8 0H24V24H8V0Z" fill="#F7FCFF"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M15.9764 7L16 19H15.4005L15.7683 16.0303C13.0782 16.5144 11.8443 16.6343 12.0667 16.3902C12.2891 16.146 12.4644 15.8 12.5925 15.3521L9 12.9553C9.37779 12.9506 9.72035 12.8568 10.0277 12.674C10.335 12.4912 10.1814 11.8578 9.56668 10.7737L11.3805 11.0376L12.0667 10.2918L13.4352 11.7241H14.0503L13.4352 8.44343L14.5378 9.05932L15.9764 7ZM15.9764 7L17.4622 9.05932L18.5648 8.44343L17.9497 11.7241H18.5648L19.9333 10.2918L20.6195 11.0376L22.4333 10.7737C21.8186 11.8578 21.665 12.4912 21.9723 12.674C22.2796 12.8568 22.6222 12.9506 23 12.9553L19.4075 15.3521C19.5356 15.8 19.7109 16.146 19.9333 16.3902C20.1557 16.6343 18.9218 16.5144 16.2317 16.0303L16.5995 19H16L15.9764 7Z" fill="#E31D1C"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M24 0H32V24H24V0Z" fill="#E31D1C"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M0 0H8V24H0V0Z" fill="#E31D1C"/>
</g>
<defs>
<clipPath id="clip0_270_67341">
<rect width="32" height="24" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

@@ -0,0 +1,19 @@
<svg width="32" height="24" viewBox="0 0 32 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_270_67426)">
<rect width="32" height="24" fill="white"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M0 0H32V24H0V0Z" fill="#5EAA22"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M24 7L23 7.73205L23.134 6.5L22 6L23.134 5.5L23 4.26795L24 5L25 4.26795L24.866 5.5L26 6L24.866 6.5L25 7.73205L24 7Z" fill="#FECA00"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M22.9628 13.6786L21.9628 14.4107L22.0967 13.1786L20.9628 12.6786L22.0967 12.1786L21.9628 10.9466L22.9628 11.6786L23.9628 10.9466L23.8288 12.1786L24.9628 12.6786L23.8288 13.1786L23.9628 14.4107L22.9628 13.6786Z" fill="#FECA00"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M26 19L25 19.7321L25.134 18.5L24 18L25.134 17.5L25 16.2679L26 17L27 16.2679L26.866 17.5L28 18L26.866 18.5L27 19.7321L26 19Z" fill="#FECA00"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M27 9.5L26.5 9.86603L26.567 9.25L26 9L26.567 8.75L26.5 8.13397L27 8.5L27.5 8.13397L27.433 8.75L28 9L27.433 9.25L27.5 9.86603L27 9.5Z" fill="#FECA00"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M7 14C9.76142 14 12 11.7614 12 9C12 6.23858 9.76142 4 7 4C4.23858 4 2 6.23858 2 9C2 11.7614 4.23858 14 7 14Z" fill="#FECA00"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M19.8977 14.945C19.2396 16.0745 18.1936 16.5872 16.7936 16.5872C14.6984 16.5872 13 14.8887 13 12.7936C13 10.6984 14.6984 9 16.7936 9C18.3921 9 19.6676 9.55928 20.2527 11.0826C19.7895 10.6232 19.0725 10.3081 18 10.3481C16.3431 10.3481 15.2653 11.6389 15.2653 12.7434C15.2653 13.848 16.3431 15.3495 18 15.3495C18.8333 15.337 19.4489 15.1846 19.8977 14.945Z" fill="#FECA00"/>
<path d="M7.58247 8.6937C7.58247 8.6937 6.60483 12.2746 6.20116 12.6135C6.02247 12.6923 7.81981 12.6135 7.81981 12.6135C7.81981 12.6135 7.14604 12.3187 7.38338 11.9263C7.62072 11.534 7.93076 9.00954 7.81981 8.14967C7.70886 7.2898 7.58247 8.6937 7.58247 8.6937Z" fill="#915E2B"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M7.79047 8.82665C7.79047 8.82665 8.8388 9.14147 8.8388 9.67717C8.8388 10.2129 9.71091 10.9658 9.71091 10.2528C9.71091 9.53971 9.54776 8.82665 9.19328 8.82665C8.8388 8.82665 9.36666 8.34726 9.66981 8.74537C9.97295 9.14348 11.0359 8.70793 10.82 8.42854C10.6041 8.14915 9.83772 7.80099 9.71091 7.80099C9.58409 7.80099 10.583 7.12043 9.71091 7.12043C8.8388 7.12043 9.33895 7.70175 8.74793 7.08458C8.15692 6.46741 8.99955 7.38584 8.99955 6.34943C8.99955 5.31301 8.76046 4.88954 7.97103 5.4713C7.18159 6.05306 7.33295 5.68408 7.05198 5.46473C6.771 5.24538 6.52442 6.26781 6.83363 6.47653C7.14284 6.68524 7.48562 7.20253 7.17641 7.20253C6.8672 7.20253 6.64889 6.90402 6.64889 6.69028C6.64889 6.47653 5.80751 6.099 5.00894 6.099C4.21037 6.099 4.72705 6.69028 5.00894 6.69028C5.29083 6.69028 6.55317 7.12043 5.922 7.12043C5.29083 7.12043 5.97075 6.80217 5.17517 6.80217C4.3796 6.80217 3.45479 6.43988 3.45479 7.12043C3.45479 7.80099 4.24974 8.10248 4.49808 7.80099C4.74642 7.4995 5.03353 6.99124 5.03353 7.49867C5.03353 8.0061 4.40076 7.79893 3.45479 8.11373C2.50882 8.42854 2.78028 9.25849 3.90876 9.0558C5.03725 8.85311 4.91515 8.86415 5.36821 8.54934C5.82127 8.23454 6.38199 8.3223 5.922 8.82665C5.462 9.331 5.00201 10.2528 5.462 10.2528C5.922 10.2528 6.21853 10.3782 6.21853 9.89092C6.21853 9.40365 6.48555 8.45499 6.48555 9.0558C6.48555 9.6566 6.83363 10.1095 7.14284 9.89092C7.45205 9.67238 7.07083 8.98857 7.42382 8.98857C7.7768 8.98857 7.79047 8.82665 7.79047 8.82665Z" fill="#5EAA22"/>
</g>
<defs>
<clipPath id="clip0_270_67426">
<rect width="32" height="24" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 3.6 KiB

View File

@@ -0,0 +1,18 @@
<svg width="32" height="24" viewBox="0 0 32 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_270_67445)">
<rect width="32" height="24" fill="white"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M0 0V24H32V0H0Z" fill="#3195F9"/>
<mask id="mask0_270_67445" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="0" y="0" width="32" height="24">
<path fill-rule="evenodd" clip-rule="evenodd" d="M0 0V24H32V0H0Z" fill="white"/>
</mask>
<g mask="url(#mask0_270_67445)">
<path d="M-1.82168 25.4392L-1.12772 26.4789L-0.0880487 25.7849L36.1729 1.58147L37.2126 0.887505L36.5186 -0.152167L34.2979 -3.47912L33.604 -4.51879L32.5643 -3.82483L-3.69665 20.3786L-4.73632 21.0726L-4.04236 22.1123L-1.82168 25.4392Z" fill="#E31D1C" stroke="#FECA00" stroke-width="2.5"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M4.93065 8.60629L1.44503 11.024L2.55881 6.88304L0 4.23781L3.46478 4.09478L4.93065 0L6.39653 4.09478H9.85541L7.3025 6.88304L8.58104 10.7796L4.93065 8.60629Z" fill="#FECA00"/>
</g>
</g>
<defs>
<clipPath id="clip0_270_67445">
<rect width="32" height="24" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@@ -0,0 +1,16 @@
<svg width="32" height="24" viewBox="0 0 32 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_270_67542)">
<rect width="32" height="24" fill="white"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M0 0H32V6H0V0Z" fill="#3D58DB"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M0 6H32V12H0V6Z" fill="#F7FCFF"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M0 12H32V18H0V12Z" fill="#73BE4A"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M0 18H32V24H0V18Z" fill="#FFD018"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M4.5294 5.41612L2.10486 7.09783L2.87959 4.21747L1.09973 2.37749L3.50977 2.278L4.5294 -0.570251L5.54904 2.278H7.95498L6.17921 4.21747L7.06854 6.92782L4.5294 5.41612Z" fill="#FECA00"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M12 0H20V24H12V0Z" fill="#E11C1B"/>
</g>
<defs>
<clipPath id="clip0_270_67542">
<rect width="32" height="24" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 945 B

View File

@@ -0,0 +1,18 @@
<svg width="32" height="24" viewBox="0 0 32 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_270_67344)">
<rect width="32" height="24" fill="white"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M32 0V24H0L32 0Z" fill="#FA1111"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M0 24V0H32L0 24Z" fill="#07A907"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M29.4918 -5.79999L-1 23.5761L5.05163 26.588L34.6407 -0.211975L29.4918 -5.79999Z" fill="#FBCD17"/>
<mask id="mask0_270_67344" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="-1" y="-6" width="36" height="33">
<path fill-rule="evenodd" clip-rule="evenodd" d="M29.4918 -5.79999L-1 23.5761L5.05163 26.588L34.6407 -0.211975L29.4918 -5.79999Z" fill="white"/>
</mask>
<g mask="url(#mask0_270_67344)">
</g>
</g>
<defs>
<clipPath id="clip0_270_67344">
<rect width="32" height="24" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 919 B

View File

@@ -0,0 +1,17 @@
<svg width="32" height="24" viewBox="0 0 32 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_270_67345)">
<rect width="32" height="24" fill="white"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M0 0V24H32V0H0Z" fill="#E31D1C"/>
<mask id="mask0_270_67345" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="0" y="0" width="32" height="24">
<path fill-rule="evenodd" clip-rule="evenodd" d="M0 0V24H32V0H0Z" fill="white"/>
</mask>
<g mask="url(#mask0_270_67345)">
<path fill-rule="evenodd" clip-rule="evenodd" d="M18 6H14V10H10V14H14V18H18V14H22V10H18V6Z" fill="#F1F9FF"/>
</g>
</g>
<defs>
<clipPath id="clip0_270_67345">
<rect width="32" height="24" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 730 B

View File

@@ -0,0 +1,13 @@
<svg width="32" height="24" viewBox="0 0 32 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_270_67346)">
<rect width="32" height="24" fill="white"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M22 0H32V24H22V0Z" fill="#67BD38"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M0 0H10V24H0V0Z" fill="#E47E00"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M10 0H22V24H10V0Z" fill="#F7FCFF"/>
</g>
<defs>
<clipPath id="clip0_270_67346">
<rect width="32" height="24" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 546 B

Some files were not shown because too many files have changed in this diff Show More