Spaces:
Running
on
CPU Upgrade
Running
on
CPU Upgrade
Commit
•
c1f3539
1
Parent(s):
c713636
update wtsp number
Browse files- locales/ar/LC_MESSAGES/messages.po +3 -3
- locales/fr/LC_MESSAGES/messages.po +3 -3
- messages.pot +3 -3
- src/components.py +45 -31
- src/dataframes.py +4 -4
- src/filters.py +4 -3
- src/map_utils.py +17 -10
- src/markers.py +3 -2
- src/text_content.py +4 -5
locales/ar/LC_MESSAGES/messages.po
CHANGED
@@ -123,7 +123,7 @@ msgid ""
|
|
123 |
"assistance for everyone affected. How do we achieve this? We assist those in "
|
124 |
"need by allowing them to communicate their location and the specific aid "
|
125 |
"they require, either by completing a form or sending a voice message via "
|
126 |
-
"WhatsApp to the number <b>
|
127 |
"information, it can be viewed in our dashboard, which allows NGOs to "
|
128 |
"organize and precisely target their interventions, ensuring swift assistance "
|
129 |
"reaches those in need. Any organization that has taken initiative in a "
|
@@ -160,7 +160,7 @@ msgid ""
|
|
160 |
"الأخير في المغرب. مهمتنا هي تسهيل تقديم المساعدة في الوقت المناسب و بفاعلية "
|
161 |
"و تنظيم لجميع المتضررين. كيفاش؟ كنعاونو الناس لي محتاجين للمساعدة إعلمونا "
|
162 |
"بمكانهم و نوع المساعدة لي محتاجين ليها سواء عن طريق ملأ الاستمارة أو عن طريق "
|
163 |
-
"إرسال تسجيل صوتي عبر واتساب إلى رقم مخصص<b>
|
164 |
"المعلومات، كنجمعوهم فخريطة كتمكن الجمعيات من تنظيم و استهداف تدخلاتهم بدقة "
|
165 |
"باش توصل المساعدة للناس لي محتاجين في وقت أسرع. و كل جمعية قامت باللازم في "
|
166 |
"منطقة معينة تقدر تعلمنا عن طريق ملأ استمارة مخصصة لهاد الأمر. هاد المعلومات "
|
@@ -198,7 +198,7 @@ msgid ""
|
|
198 |
"nous ? Nous aidons les personnes dans le besoin en leur permettant de "
|
199 |
"communiquer leur localisation et l'aide spécifique dont elles ont besoin, "
|
200 |
"soit en remplissant un formulaire, soit en envoyant un message vocal via "
|
201 |
-
"WhatsApp à un numéro <b>
|
202 |
"informations peuvent être consultées dans notre tableau de bord, qui permet "
|
203 |
"aux associations d'organiser et de cibler précisément leurs interventions, "
|
204 |
"afin que l'aide parvienne rapidement à ceux qui en ont besoin. Toute "
|
|
|
123 |
"assistance for everyone affected. How do we achieve this? We assist those in "
|
124 |
"need by allowing them to communicate their location and the specific aid "
|
125 |
"they require, either by completing a form or sending a voice message via "
|
126 |
+
"WhatsApp to the number <b>0602838166</b>. Once we receive and process this "
|
127 |
"information, it can be viewed in our dashboard, which allows NGOs to "
|
128 |
"organize and precisely target their interventions, ensuring swift assistance "
|
129 |
"reaches those in need. Any organization that has taken initiative in a "
|
|
|
160 |
"الأخير في المغرب. مهمتنا هي تسهيل تقديم المساعدة في الوقت المناسب و بفاعلية "
|
161 |
"و تنظيم لجميع المتضررين. كيفاش؟ كنعاونو الناس لي محتاجين للمساعدة إعلمونا "
|
162 |
"بمكانهم و نوع المساعدة لي محتاجين ليها سواء عن طريق ملأ الاستمارة أو عن طريق "
|
163 |
+
"إرسال تسجيل صوتي عبر واتساب إلى رقم مخصص<b>0602838166</b>. بعد معالجة هاد "
|
164 |
"المعلومات، كنجمعوهم فخريطة كتمكن الجمعيات من تنظيم و استهداف تدخلاتهم بدقة "
|
165 |
"باش توصل المساعدة للناس لي محتاجين في وقت أسرع. و كل جمعية قامت باللازم في "
|
166 |
"منطقة معينة تقدر تعلمنا عن طريق ملأ استمارة مخصصة لهاد الأمر. هاد المعلومات "
|
|
|
198 |
"nous ? Nous aidons les personnes dans le besoin en leur permettant de "
|
199 |
"communiquer leur localisation et l'aide spécifique dont elles ont besoin, "
|
200 |
"soit en remplissant un formulaire, soit en envoyant un message vocal via "
|
201 |
+
"WhatsApp à un numéro <b>0602838166</b>. Une fois reçues et traitées, ces "
|
202 |
"informations peuvent être consultées dans notre tableau de bord, qui permet "
|
203 |
"aux associations d'organiser et de cibler précisément leurs interventions, "
|
204 |
"afin que l'aide parvienne rapidement à ceux qui en ont besoin. Toute "
|
locales/fr/LC_MESSAGES/messages.po
CHANGED
@@ -123,7 +123,7 @@ msgid ""
|
|
123 |
"assistance for everyone affected. How do we achieve this? We assist those in "
|
124 |
"need by allowing them to communicate their location and the specific aid "
|
125 |
"they require, either by completing a form or sending a voice message via "
|
126 |
-
"WhatsApp to the number <b>
|
127 |
"information, it can be viewed in our dashboard, which allows NGOs to "
|
128 |
"organize and precisely target their interventions, ensuring swift assistance "
|
129 |
"reaches those in need. Any organization that has taken initiative in a "
|
@@ -160,7 +160,7 @@ msgid ""
|
|
160 |
"الأخير في المغرب. مهمتنا هي تسهيل تقديم المساعدة في الوقت المناسب و بفاعلية "
|
161 |
"و تنظيم لجميع المتضررين. كيفاش؟ كنعاونو الناس لي محتاجين للمساعدة إعلمونا "
|
162 |
"بمكانهم و نوع المساعدة لي محتاجين ليها سواء عن طريق ملأ الاستمارة أو عن طريق "
|
163 |
-
"إرسال تسجيل صوتي عبر واتساب إلى رقم مخصص<b>
|
164 |
"المعلومات، كنجمعوهم فخريطة كتمكن الجمعيات من تنظيم و استهداف تدخلاتهم بدقة "
|
165 |
"باش توصل المساعدة للناس لي محتاجين في وقت أسرع. و كل جمعية قامت باللازم في "
|
166 |
"منطقة معينة تقدر تعلمنا عن طريق ملأ استمارة مخصصة لهاد الأمر. هاد المعلومات "
|
@@ -198,7 +198,7 @@ msgid ""
|
|
198 |
"nous ? Nous aidons les personnes dans le besoin en leur permettant de "
|
199 |
"communiquer leur localisation et l'aide spécifique dont elles ont besoin, "
|
200 |
"soit en remplissant un formulaire, soit en envoyant un message vocal via "
|
201 |
-
"WhatsApp à un numéro <b>
|
202 |
"informations peuvent être consultées dans notre tableau de bord, qui permet "
|
203 |
"aux associations d'organiser et de cibler précisément leurs interventions, "
|
204 |
"afin que l'aide parvienne rapidement à ceux qui en ont besoin. Toute "
|
|
|
123 |
"assistance for everyone affected. How do we achieve this? We assist those in "
|
124 |
"need by allowing them to communicate their location and the specific aid "
|
125 |
"they require, either by completing a form or sending a voice message via "
|
126 |
+
"WhatsApp to the number <b>0602838166</b>. Once we receive and process this "
|
127 |
"information, it can be viewed in our dashboard, which allows NGOs to "
|
128 |
"organize and precisely target their interventions, ensuring swift assistance "
|
129 |
"reaches those in need. Any organization that has taken initiative in a "
|
|
|
160 |
"الأخير في المغرب. مهمتنا هي تسهيل تقديم المساعدة في الوقت المناسب و بفاعلية "
|
161 |
"و تنظيم لجميع المتضررين. كيفاش؟ كنعاونو الناس لي محتاجين للمساعدة إعلمونا "
|
162 |
"بمكانهم و نوع المساعدة لي محتاجين ليها سواء عن طريق ملأ الاستمارة أو عن طريق "
|
163 |
+
"إرسال تسجيل صوتي عبر واتساب إلى رقم مخصص<b>0602838166</b>. بعد معالجة هاد "
|
164 |
"المعلومات، كنجمعوهم فخريطة كتمكن الجمعيات من تنظيم و استهداف تدخلاتهم بدقة "
|
165 |
"باش توصل المساعدة للناس لي محتاجين في وقت أسرع. و كل جمعية قامت باللازم في "
|
166 |
"منطقة معينة تقدر تعلمنا عن طريق ملأ استمارة مخصصة لهاد الأمر. هاد المعلومات "
|
|
|
198 |
"nous ? Nous aidons les personnes dans le besoin en leur permettant de "
|
199 |
"communiquer leur localisation et l'aide spécifique dont elles ont besoin, "
|
200 |
"soit en remplissant un formulaire, soit en envoyant un message vocal via "
|
201 |
+
"WhatsApp à un numéro <b>0602838166</b>. Une fois reçues et traitées, ces "
|
202 |
"informations peuvent être consultées dans notre tableau de bord, qui permet "
|
203 |
"aux associations d'organiser et de cibler précisément leurs interventions, "
|
204 |
"afin que l'aide parvienne rapidement à ceux qui en ont besoin. Toute "
|
messages.pot
CHANGED
@@ -123,7 +123,7 @@ msgid ""
|
|
123 |
"assistance for everyone affected. How do we achieve this? We assist those in "
|
124 |
"need by allowing them to communicate their location and the specific aid "
|
125 |
"they require, either by completing a form or sending a voice message via "
|
126 |
-
"WhatsApp to the number <b>
|
127 |
"information, it can be viewed in our dashboard, which allows NGOs to "
|
128 |
"organize and precisely target their interventions, ensuring swift assistance "
|
129 |
"reaches those in need. Any organization that has taken initiative in a "
|
@@ -160,7 +160,7 @@ msgid ""
|
|
160 |
"الأخير في المغرب. مهمتنا هي تسهيل تقديم المساعدة في الوقت المناسب و بفاعلية "
|
161 |
"و تنظيم لجميع المتضررين. كيفاش؟ كنعاونو الناس لي محتاجين للمساعدة إعلمونا "
|
162 |
"بمكانهم و نوع المساعدة لي محتاجين ليها سواء عن طريق ملأ الاستمارة أو عن طريق "
|
163 |
-
"إرسال تسجيل صوتي عبر واتساب إلى رقم مخصص<b>
|
164 |
"المعلومات، كنجمعوهم فخريطة كتمكن الجمعيات من تنظيم و استهداف تدخلاتهم بدقة "
|
165 |
"باش توصل المساعدة للناس لي محتاجين في وقت أسرع. و كل جمعية قامت باللازم في "
|
166 |
"منطقة معينة تقدر تعلمنا عن طريق ملأ استمارة مخصصة لهاد الأمر. هاد المعلومات "
|
@@ -198,7 +198,7 @@ msgid ""
|
|
198 |
"nous ? Nous aidons les personnes dans le besoin en leur permettant de "
|
199 |
"communiquer leur localisation et l'aide spécifique dont elles ont besoin, "
|
200 |
"soit en remplissant un formulaire, soit en envoyant un message vocal via "
|
201 |
-
"WhatsApp à un numéro <b>
|
202 |
"informations peuvent être consultées dans notre tableau de bord, qui permet "
|
203 |
"aux associations d'organiser et de cibler précisément leurs interventions, "
|
204 |
"afin que l'aide parvienne rapidement à ceux qui en ont besoin. Toute "
|
|
|
123 |
"assistance for everyone affected. How do we achieve this? We assist those in "
|
124 |
"need by allowing them to communicate their location and the specific aid "
|
125 |
"they require, either by completing a form or sending a voice message via "
|
126 |
+
"WhatsApp to the number <b>0602838166</b>. Once we receive and process this "
|
127 |
"information, it can be viewed in our dashboard, which allows NGOs to "
|
128 |
"organize and precisely target their interventions, ensuring swift assistance "
|
129 |
"reaches those in need. Any organization that has taken initiative in a "
|
|
|
160 |
"الأخير في المغرب. مهمتنا هي تسهيل تقديم المساعدة في الوقت المناسب و بفاعلية "
|
161 |
"و تنظيم لجميع المتضررين. كيفاش؟ كنعاونو الناس لي محتاجين للمساعدة إعلمونا "
|
162 |
"بمكانهم و نوع المساعدة لي محتاجين ليها سواء عن طريق ملأ الاستمارة أو عن طريق "
|
163 |
+
"إرسال تسجيل صوتي عبر واتساب إلى رقم مخصص<b>0602838166</b>. بعد معالجة هاد "
|
164 |
"المعلومات، كنجمعوهم فخريطة كتمكن الجمعيات من تنظيم و استهداف تدخلاتهم بدقة "
|
165 |
"باش توصل المساعدة للناس لي محتاجين في وقت أسرع. و كل جمعية قامت باللازم في "
|
166 |
"منطقة معينة تقدر تعلمنا عن طريق ملأ استمارة مخصصة لهاد الأمر. هاد المعلومات "
|
|
|
198 |
"nous ? Nous aidons les personnes dans le besoin en leur permettant de "
|
199 |
"communiquer leur localisation et l'aide spécifique dont elles ont besoin, "
|
200 |
"soit en remplissant un formulaire, soit en envoyant un message vocal via "
|
201 |
+
"WhatsApp à un numéro <b>0602838166</b>. Une fois reçues et traitées, ces "
|
202 |
"informations peuvent être consultées dans notre tableau de bord, qui permet "
|
203 |
"aux associations d'organiser et de cibler précisément leurs interventions, "
|
204 |
"afin que l'aide parvienne rapidement à ceux qui en ont besoin. Toute "
|
src/components.py
CHANGED
@@ -7,6 +7,7 @@ from src.utils import parse_gg_sheet
|
|
7 |
|
8 |
import plotly.express as px
|
9 |
|
|
|
10 |
def id_review_submission(api: HfApi):
|
11 |
"""Id review submission form"""
|
12 |
# collapse the text
|
@@ -121,64 +122,77 @@ def show_dataframes_metrics(len_requests, len_interventions, len_solved_verified
|
|
121 |
"# Nombre de demandes résolues",
|
122 |
len_solved_verified_requests,
|
123 |
)
|
124 |
-
|
|
|
|
|
125 |
def cached_parse_gg_sheet(url):
|
126 |
return parse_gg_sheet(url)
|
127 |
|
|
|
128 |
def show_charts():
|
129 |
st.subheader(_("📊 **Charts**"))
|
130 |
col1, col2 = st.columns([1, 1])
|
131 |
|
132 |
# interventions_categories
|
133 |
interventions_processed_df = cached_parse_gg_sheet(INTERVENTIONS_PROCESSED_URL)
|
134 |
-
supply_data =
|
135 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
136 |
interv_fig.update_layout(
|
137 |
autosize=True,
|
138 |
legend=dict(
|
139 |
-
|
140 |
-
|
141 |
-
|
142 |
-
|
143 |
-
|
144 |
-
|
145 |
-
|
146 |
-
|
147 |
-
|
148 |
-
|
|
|
|
|
149 |
),
|
150 |
-
|
151 |
-
))
|
152 |
with col1:
|
153 |
st.subheader(_("Supplies Categories"))
|
154 |
st.plotly_chart(interv_fig, use_container_width=True)
|
155 |
|
156 |
# requests_categories
|
157 |
requests_processed_df = cached_parse_gg_sheet(VERIFIED_REQUESTS_PROCESSED_URL)
|
158 |
-
need_data =
|
159 |
-
|
|
|
|
|
160 |
req_fig.update_layout(
|
161 |
autosize=True,
|
162 |
legend=dict(
|
163 |
-
|
164 |
-
|
165 |
-
|
166 |
-
|
167 |
-
|
168 |
-
|
169 |
-
|
170 |
-
|
171 |
-
|
172 |
-
|
|
|
|
|
173 |
),
|
174 |
-
|
175 |
-
))
|
176 |
with col2:
|
177 |
st.subheader(_("Needs Categories"))
|
178 |
st.plotly_chart(req_fig, use_container_width=True)
|
179 |
|
180 |
|
181 |
-
|
182 |
def show_donations(lang):
|
183 |
st.subheader(_("📝 **Donations**"))
|
184 |
if lang == "en":
|
@@ -229,4 +243,4 @@ def show_donations(lang):
|
|
229 |
<br>
|
230 |
""",
|
231 |
unsafe_allow_html=True,
|
232 |
-
)
|
|
|
7 |
|
8 |
import plotly.express as px
|
9 |
|
10 |
+
|
11 |
def id_review_submission(api: HfApi):
|
12 |
"""Id review submission form"""
|
13 |
# collapse the text
|
|
|
122 |
"# Nombre de demandes résolues",
|
123 |
len_solved_verified_requests,
|
124 |
)
|
125 |
+
|
126 |
+
|
127 |
+
@st.cache_data(ttl=60 * 60 * 24)
|
128 |
def cached_parse_gg_sheet(url):
|
129 |
return parse_gg_sheet(url)
|
130 |
|
131 |
+
|
132 |
def show_charts():
|
133 |
st.subheader(_("📊 **Charts**"))
|
134 |
col1, col2 = st.columns([1, 1])
|
135 |
|
136 |
# interventions_categories
|
137 |
interventions_processed_df = cached_parse_gg_sheet(INTERVENTIONS_PROCESSED_URL)
|
138 |
+
supply_data = (
|
139 |
+
interventions_processed_df["supplies_category"]
|
140 |
+
.str.split(",")
|
141 |
+
.explode()
|
142 |
+
.str.strip("[] '")
|
143 |
+
.dropna()
|
144 |
+
.astype("category")
|
145 |
+
)
|
146 |
+
interv_fig = px.pie(supply_data, names="supplies_category")
|
147 |
interv_fig.update_layout(
|
148 |
autosize=True,
|
149 |
legend=dict(
|
150 |
+
orientation="h",
|
151 |
+
# entrywidth=40,
|
152 |
+
yanchor="bottom",
|
153 |
+
y=1.02,
|
154 |
+
xanchor="right",
|
155 |
+
x=1,
|
156 |
+
font=dict(
|
157 |
+
# family="Courier",
|
158 |
+
# size=10,
|
159 |
+
# color="black"
|
160 |
+
),
|
161 |
+
itemwidth=100,
|
162 |
),
|
163 |
+
)
|
|
|
164 |
with col1:
|
165 |
st.subheader(_("Supplies Categories"))
|
166 |
st.plotly_chart(interv_fig, use_container_width=True)
|
167 |
|
168 |
# requests_categories
|
169 |
requests_processed_df = cached_parse_gg_sheet(VERIFIED_REQUESTS_PROCESSED_URL)
|
170 |
+
need_data = (
|
171 |
+
requests_processed_df["need_category"].str.split(",").explode().str.strip("[] '").dropna().astype("category")
|
172 |
+
)
|
173 |
+
req_fig = px.pie(need_data, names="need_category")
|
174 |
req_fig.update_layout(
|
175 |
autosize=True,
|
176 |
legend=dict(
|
177 |
+
orientation="h",
|
178 |
+
# entrywidth=40,
|
179 |
+
yanchor="bottom",
|
180 |
+
y=1.02,
|
181 |
+
xanchor="right",
|
182 |
+
x=1,
|
183 |
+
font=dict(
|
184 |
+
# family="Courier",
|
185 |
+
# size=10,
|
186 |
+
# color="black"
|
187 |
+
),
|
188 |
+
itemwidth=100,
|
189 |
),
|
190 |
+
)
|
|
|
191 |
with col2:
|
192 |
st.subheader(_("Needs Categories"))
|
193 |
st.plotly_chart(req_fig, use_container_width=True)
|
194 |
|
195 |
|
|
|
196 |
def show_donations(lang):
|
197 |
st.subheader(_("📝 **Donations**"))
|
198 |
if lang == "en":
|
|
|
243 |
<br>
|
244 |
""",
|
245 |
unsafe_allow_html=True,
|
246 |
+
)
|
src/dataframes.py
CHANGED
@@ -1,4 +1,3 @@
|
|
1 |
-
|
2 |
import streamlit as st
|
3 |
from src.utils import add_latlng_col, parse_gg_sheet, parse_json_file, is_request_in_list
|
4 |
import pandas as pd
|
@@ -10,6 +9,7 @@ INTERVENTIONS_PROCESSED_URL = st.secrets["INTERVENTIONS_PROCESSED_URL"]
|
|
10 |
VERIFIED_REQUESTS_PROCESSED_URL = st.secrets["VERIFIED_REQUESTS_PROCESSED_URL"]
|
11 |
DOUARS_URL = "data/regions.json"
|
12 |
|
|
|
13 |
def load_data(show_unverified, selected_options, options):
|
14 |
df = parse_gg_sheet(REQUESTS_URL)
|
15 |
if show_unverified:
|
@@ -32,7 +32,9 @@ def load_data(show_unverified, selected_options, options):
|
|
32 |
verified_df["id"] = verified_df.index # Needed to display request id
|
33 |
# keep rows with at least one request in selected_options
|
34 |
filtered_df = df[
|
35 |
-
df["ما هي احتياجاتك؟ (أضفها إذا لم يتم ذكرها)"].apply(
|
|
|
|
|
36 |
]
|
37 |
filtered_verified_df = verified_df[
|
38 |
verified_df["Help Details"].apply(lambda x: is_request_in_list(x, selected_options, options))
|
@@ -51,7 +53,6 @@ def load_data(show_unverified, selected_options, options):
|
|
51 |
)
|
52 |
|
53 |
|
54 |
-
|
55 |
def display_dataframe(df, drop_cols, data_url, search_id=True, status=False, for_help_requests=False, show_link=True):
|
56 |
"""Display the dataframe in a table"""
|
57 |
col_1, col_2 = st.columns([1, 1])
|
@@ -115,4 +116,3 @@ def display_dataframe(df, drop_cols, data_url, search_id=True, status=False, for
|
|
115 |
""",
|
116 |
unsafe_allow_html=True,
|
117 |
)
|
118 |
-
|
|
|
|
|
1 |
import streamlit as st
|
2 |
from src.utils import add_latlng_col, parse_gg_sheet, parse_json_file, is_request_in_list
|
3 |
import pandas as pd
|
|
|
9 |
VERIFIED_REQUESTS_PROCESSED_URL = st.secrets["VERIFIED_REQUESTS_PROCESSED_URL"]
|
10 |
DOUARS_URL = "data/regions.json"
|
11 |
|
12 |
+
|
13 |
def load_data(show_unverified, selected_options, options):
|
14 |
df = parse_gg_sheet(REQUESTS_URL)
|
15 |
if show_unverified:
|
|
|
32 |
verified_df["id"] = verified_df.index # Needed to display request id
|
33 |
# keep rows with at least one request in selected_options
|
34 |
filtered_df = df[
|
35 |
+
df["ما هي احتياجاتك؟ (أضفها إذا لم يتم ذكرها)"].apply(
|
36 |
+
lambda x: is_request_in_list(x, selected_options, options)
|
37 |
+
)
|
38 |
]
|
39 |
filtered_verified_df = verified_df[
|
40 |
verified_df["Help Details"].apply(lambda x: is_request_in_list(x, selected_options, options))
|
|
|
53 |
)
|
54 |
|
55 |
|
|
|
56 |
def display_dataframe(df, drop_cols, data_url, search_id=True, status=False, for_help_requests=False, show_link=True):
|
57 |
"""Display the dataframe in a table"""
|
58 |
col_1, col_2 = st.columns([1, 1])
|
|
|
116 |
""",
|
117 |
unsafe_allow_html=True,
|
118 |
)
|
|
src/filters.py
CHANGED
@@ -1,9 +1,9 @@
|
|
1 |
-
|
2 |
import streamlit as st
|
3 |
|
|
|
4 |
def show_requests_filters():
|
5 |
HEADERS_MAPPING = {
|
6 |
-
"إغاثة"
|
7 |
"مساعدة طبية": _("Medical Assistance"),
|
8 |
"مأوى": _("Shelter"),
|
9 |
"طعام وماء": _("Food & Water"),
|
@@ -39,9 +39,10 @@ def show_requests_filters():
|
|
39 |
format_func=lambda x: HEADERS_MAPPING[x],
|
40 |
label_visibility="collapsed",
|
41 |
)
|
42 |
-
|
43 |
return selected_options, options, show_unverified, show_interventions
|
44 |
|
|
|
45 |
def show_interventions_filters():
|
46 |
st.markdown(
|
47 |
_("👉 **State of villages visited by NGOs**"),
|
|
|
|
|
1 |
import streamlit as st
|
2 |
|
3 |
+
|
4 |
def show_requests_filters():
|
5 |
HEADERS_MAPPING = {
|
6 |
+
"إغاثة": _("Rescue"),
|
7 |
"مساعدة طبية": _("Medical Assistance"),
|
8 |
"مأوى": _("Shelter"),
|
9 |
"طعام وماء": _("Food & Water"),
|
|
|
39 |
format_func=lambda x: HEADERS_MAPPING[x],
|
40 |
label_visibility="collapsed",
|
41 |
)
|
42 |
+
|
43 |
return selected_options, options, show_unverified, show_interventions
|
44 |
|
45 |
+
|
46 |
def show_interventions_filters():
|
47 |
st.markdown(
|
48 |
_("👉 **State of villages visited by NGOs**"),
|
src/map_utils.py
CHANGED
@@ -2,7 +2,8 @@ from branca.element import Template, MacroElement
|
|
2 |
|
3 |
|
4 |
def get_legend_macro(show_unverified):
|
5 |
-
|
|
|
6 |
<li><span style='background:#CE3C28;opacity:0.7;'></span>Rescue</li>
|
7 |
<li><span style='background:#ED922E;opacity:0.7;'></span>Medical Assistance</li>
|
8 |
<li><span style='background:#FFCA92;opacity:0.7;'></span>Shelter</li>
|
@@ -11,17 +12,20 @@ def get_legend_macro(show_unverified):
|
|
11 |
<li><span style='background:#6EAA25;opacity:0.7;'></span>Done</li>
|
12 |
<li><span style='background:#023020;opacity:0.7;'></span>Partial</li>
|
13 |
<li><span style='background:#FF91E8;opacity:0.7;'></span>Planned</li>
|
14 |
-
"""
|
15 |
-
|
|
|
|
|
16 |
<li><span style='background:#CE3C28;opacity:0.7;'></span>High Emergency</li>
|
17 |
<li><span style='background:#ED922E;opacity:0.7;'></span>Medium Emergency</li>
|
18 |
<li><span style='background:#FFCA92;opacity:0.7;'></span>Low Emergency</li>
|
19 |
<li><span style='background:#6EAA25;opacity:0.7;'></span>Done</li>
|
20 |
<li><span style='background:#023020;opacity:0.7;'></span>Partial</li>
|
21 |
<li><span style='background:#FF91E8;opacity:0.7;'></span>Planned</li>
|
22 |
-
"""
|
|
|
23 |
|
24 |
-
|
25 |
{% macro html(this, kwargs) %}
|
26 |
|
27 |
<!doctype html>
|
@@ -62,7 +66,7 @@ def get_legend_macro(show_unverified):
|
|
62 |
<ul class='legend-labels'>
|
63 |
|
64 |
"""
|
65 |
-
|
66 |
</ul>
|
67 |
</div>
|
68 |
</div>
|
@@ -118,8 +122,11 @@ def get_legend_macro(show_unverified):
|
|
118 |
</style>
|
119 |
{% endmacro %}"""
|
120 |
|
121 |
-
|
122 |
-
|
123 |
-
|
|
|
|
|
|
|
124 |
|
125 |
-
__all__ = ["get_legend_macro"]
|
|
|
2 |
|
3 |
|
4 |
def get_legend_macro(show_unverified):
|
5 |
+
labels_unverified_requests = _(
|
6 |
+
"""
|
7 |
<li><span style='background:#CE3C28;opacity:0.7;'></span>Rescue</li>
|
8 |
<li><span style='background:#ED922E;opacity:0.7;'></span>Medical Assistance</li>
|
9 |
<li><span style='background:#FFCA92;opacity:0.7;'></span>Shelter</li>
|
|
|
12 |
<li><span style='background:#6EAA25;opacity:0.7;'></span>Done</li>
|
13 |
<li><span style='background:#023020;opacity:0.7;'></span>Partial</li>
|
14 |
<li><span style='background:#FF91E8;opacity:0.7;'></span>Planned</li>
|
15 |
+
"""
|
16 |
+
)
|
17 |
+
labels_verified = _(
|
18 |
+
"""
|
19 |
<li><span style='background:#CE3C28;opacity:0.7;'></span>High Emergency</li>
|
20 |
<li><span style='background:#ED922E;opacity:0.7;'></span>Medium Emergency</li>
|
21 |
<li><span style='background:#FFCA92;opacity:0.7;'></span>Low Emergency</li>
|
22 |
<li><span style='background:#6EAA25;opacity:0.7;'></span>Done</li>
|
23 |
<li><span style='background:#023020;opacity:0.7;'></span>Partial</li>
|
24 |
<li><span style='background:#FF91E8;opacity:0.7;'></span>Planned</li>
|
25 |
+
"""
|
26 |
+
)
|
27 |
|
28 |
+
template_1 = """
|
29 |
{% macro html(this, kwargs) %}
|
30 |
|
31 |
<!doctype html>
|
|
|
66 |
<ul class='legend-labels'>
|
67 |
|
68 |
"""
|
69 |
+
template_2 = """
|
70 |
</ul>
|
71 |
</div>
|
72 |
</div>
|
|
|
122 |
</style>
|
123 |
{% endmacro %}"""
|
124 |
|
125 |
+
legend_macro = MacroElement()
|
126 |
+
legend_macro._template = Template(
|
127 |
+
template_1 + (labels_unverified_requests if show_unverified else labels_verified) + template_2
|
128 |
+
)
|
129 |
+
return legend_macro
|
130 |
+
|
131 |
|
132 |
+
__all__ = ["get_legend_macro"]
|
src/markers.py
CHANGED
@@ -18,7 +18,8 @@ ICON_MAPPING = {
|
|
18 |
"طعام وماء": "cutlery", # cutlery (fork and knife) for food & water
|
19 |
"مخاطر (تسرب الغاز، تلف في الخدمات العامة...)": "Warning" # warning triangle for dangers
|
20 |
}
|
21 |
-
numcol
|
|
|
22 |
|
23 |
def marker_request(request):
|
24 |
# in case of multiple requests we use the first one for the marker's icon
|
@@ -82,7 +83,7 @@ def display_interventions(interventions_df, selected_statuses, map_obj, interven
|
|
82 |
douar_name = row[interventions_df.columns[numcol("M")]]
|
83 |
commune = row[interventions_df.columns[numcol("N")]]
|
84 |
caidat = row[interventions_df.columns[numcol("O")]]
|
85 |
-
|
86 |
accessibility_to_douar = row[interventions_df.columns[numcol("Q")]]
|
87 |
type_of_accessibility = row[interventions_df.columns[numcol("R")]]
|
88 |
population = row[interventions_df.columns[numcol("S")]]
|
|
|
18 |
"طعام وماء": "cutlery", # cutlery (fork and knife) for food & water
|
19 |
"مخاطر (تسرب الغاز، تلف في الخدمات العامة...)": "Warning" # warning triangle for dangers
|
20 |
}
|
21 |
+
def numcol(x):
|
22 |
+
return ord(x) - ord("A")
|
23 |
|
24 |
def marker_request(request):
|
25 |
# in case of multiple requests we use the first one for the marker's icon
|
|
|
83 |
douar_name = row[interventions_df.columns[numcol("M")]]
|
84 |
commune = row[interventions_df.columns[numcol("N")]]
|
85 |
caidat = row[interventions_df.columns[numcol("O")]]
|
86 |
+
row[interventions_df.columns[numcol("P")]]
|
87 |
accessibility_to_douar = row[interventions_df.columns[numcol("Q")]]
|
88 |
type_of_accessibility = row[interventions_df.columns[numcol("R")]]
|
89 |
population = row[interventions_df.columns[numcol("S")]]
|
src/text_content.py
CHANGED
@@ -1,7 +1,6 @@
|
|
1 |
-
|
2 |
INTRO_TEXT_EN = """
|
3 |
<div style="text-align: left;">
|
4 |
-
Nt3awnou نتعاونو is a non-profit organization and a collaborative platform dedicated to aiding individuals impacted by the recent earthquake in Morocco. Our core mission is to streamline and coordinate timely assistance for everyone affected. How do we achieve this? We assist those in need by allowing them to communicate their location and the specific aid they require, either by completing a form or sending a voice message via WhatsApp to the number <b>
|
5 |
<br>⚠️ Warning : There are still rocks falling down the mountains, making the roads to the affected areas very dangerous. We advise volunteers to donate directly to specialized NGOs.<br>
|
6 |
<br>
|
7 |
<b>✉️ You can contact us via email at </b><a href="mailto:[email protected]">[email protected]</a> or via Instagram <a href="https://www.instagram.com/nt3awnou_morocco/">@nt3awnou_morocco</a> <br>
|
@@ -15,7 +14,7 @@ INTRO_TEXT_EN = """
|
|
15 |
INTRO_TEXT_AR = """
|
16 |
<div style="text-align: right;-webkit-rtl-ordering: logical;">
|
17 |
|
18 |
-
نتعاونو هي منصة تعاونية غير ربحية لمساعدة الأفراد المتضررين من الزلزال الأخير في المغرب. مهمتنا هي تسهيل تقديم المساعدة في الوقت المناسب و بفاعلية و تنظيم لجميع المتضررين. كيفاش؟ كنعاونو الناس لي محتاجين للمساعدة إعلمونا بمكانهم و نوع المساعدة لي محتاجين ليها سواء عن طريق ملأ الاستمارة أو عن طريق إرسال تسجيل صوتي عبر واتساب إلى رقم مخصص<b>
|
19 |
<br> تحذير : نظرا لخطورة الطرقان بسبب الحجر اللي كيطيح من الجبال، ننصح المتطوعين اللي بغاو ي��اعدو المناطق المتضررة يتبرعو عن طريق الجمعيات المختصة⚠️
|
20 |
<br>
|
21 |
<br>
|
@@ -28,10 +27,10 @@ INTRO_TEXT_AR = """
|
|
28 |
</div>
|
29 |
<br>
|
30 |
"""
|
31 |
-
|
32 |
INTRO_TEXT_FR = """
|
33 |
<div style="text-align: left;">
|
34 |
-
Nt3awnou نتعاونو est une plateforme collaborative à but non-lucratif dédiée à l'aide aux personnes touchées par le récent tremblement de terre au Maroc. Notre mission principale est de rationaliser et de coordonner une assistance rapide pour toutes les personnes touchées. Comment y parvenons-nous ? Nous aidons les personnes dans le besoin en leur permettant de communiquer leur localisation et l'aide spécifique dont elles ont besoin, soit en remplissant un formulaire, soit en envoyant un message vocal via WhatsApp à un numéro <b>
|
35 |
<br> ⚠️ Avertissement : Il y a encore des chutes de pierres dans les montagnes, ce qui rend les routes vers les zones touchées très dangereuses. Nous conseillons aux volontaires de faire des dons directement aux associations spécialisées.
|
36 |
<br>
|
37 |
<br>
|
|
|
|
|
1 |
INTRO_TEXT_EN = """
|
2 |
<div style="text-align: left;">
|
3 |
+
Nt3awnou نتعاونو is a non-profit organization and a collaborative platform dedicated to aiding individuals impacted by the recent earthquake in Morocco. Our core mission is to streamline and coordinate timely assistance for everyone affected. How do we achieve this? We assist those in need by allowing them to communicate their location and the specific aid they require, either by completing a form or sending a voice message via WhatsApp to the number <b>0602838166</b>. Once we receive and process this information, it can be viewed in our dashboard, which allows NGOs to organize and precisely target their interventions, ensuring swift assistance reaches those in need. Any organization that has taken initiative in a particular area can notify us by completing a dedicated form. This data is also incorporated into the dashboard so that other NGOs can help affected areas that still haven't received help.
|
4 |
<br>⚠️ Warning : There are still rocks falling down the mountains, making the roads to the affected areas very dangerous. We advise volunteers to donate directly to specialized NGOs.<br>
|
5 |
<br>
|
6 |
<b>✉️ You can contact us via email at </b><a href="mailto:[email protected]">[email protected]</a> or via Instagram <a href="https://www.instagram.com/nt3awnou_morocco/">@nt3awnou_morocco</a> <br>
|
|
|
14 |
INTRO_TEXT_AR = """
|
15 |
<div style="text-align: right;-webkit-rtl-ordering: logical;">
|
16 |
|
17 |
+
نتعاونو هي منصة تعاونية غير ربحية لمساعدة الأفراد المتضررين من الزلزال الأخير في المغرب. مهمتنا هي تسهيل تقديم المساعدة في الوقت المناسب و بفاعلية و تنظيم لجميع المتضررين. كيفاش؟ كنعاونو الناس لي محتاجين للمساعدة إعلمونا بمكانهم و نوع المساعدة لي محتاجين ليها سواء عن طريق ملأ الاستمارة أو عن طريق إرسال تسجيل صوتي عبر واتساب إلى رقم مخصص<b>0602838166</b>. بعد معالجة هاد المعلومات، كنجمعوهم فخريطة كتمكن الجمعيات من تنظيم و استهداف تدخلاتهم بدقة باش توصل المساعدة للناس لي محتاجين في وقت أسرع. و كل جمعية قامت باللازم في منطقة معينة تقدر تعلمنا عن طريق ملأ استمارة مخصصة لهاد الأمر. هاد المعلومات كذلك كتضاف للخريطة باش باقي الجمعيات يتاجهو لمناطق أخرى مازال ماوصلاتهم مساعدة.
|
18 |
<br> تحذير : نظرا لخطورة الطرقان بسبب الحجر اللي كيطيح من الجبال، ننصح المتطوعين اللي بغاو ي��اعدو المناطق المتضررة يتبرعو عن طريق الجمعيات المختصة⚠️
|
19 |
<br>
|
20 |
<br>
|
|
|
27 |
</div>
|
28 |
<br>
|
29 |
"""
|
30 |
+
|
31 |
INTRO_TEXT_FR = """
|
32 |
<div style="text-align: left;">
|
33 |
+
Nt3awnou نتعاونو est une plateforme collaborative à but non-lucratif dédiée à l'aide aux personnes touchées par le récent tremblement de terre au Maroc. Notre mission principale est de rationaliser et de coordonner une assistance rapide pour toutes les personnes touchées. Comment y parvenons-nous ? Nous aidons les personnes dans le besoin en leur permettant de communiquer leur localisation et l'aide spécifique dont elles ont besoin, soit en remplissant un formulaire, soit en envoyant un message vocal via WhatsApp à un numéro <b>0602838166</b>. Une fois reçues et traitées, ces informations peuvent être consultées dans notre tableau de bord, qui permet aux associations d'organiser et de cibler précisément leurs interventions, afin que l'aide parvienne rapidement à ceux qui en ont besoin. Toute organisation ayant pris une initiative dans une zone particulière peut nous en informer en remplissant un formulaire prévu à cet effet. Ces données sont également intégrées au tableau de bord afin que d'autres associations puissent aider les zones touchées qui n'ont pas encore reçu d'aide.
|
34 |
<br> ⚠️ Avertissement : Il y a encore des chutes de pierres dans les montagnes, ce qui rend les routes vers les zones touchées très dangereuses. Nous conseillons aux volontaires de faire des dons directement aux associations spécialisées.
|
35 |
<br>
|
36 |
<br>
|