feat: follow up events collect inputs
Browse files- app/dead.py +11 -3
- app/followup_events.py +41 -12
- app/main_multianimal.py +43 -9
- app/wounded.py +10 -4
app/dead.py
CHANGED
@@ -1,6 +1,6 @@
|
|
1 |
import gradio as gr
|
2 |
from circumstances import create_causes
|
3 |
-
from followup_events import
|
4 |
from utils_json import add_data_to_individual
|
5 |
|
6 |
def show_section_dead(visible):
|
@@ -14,6 +14,14 @@ def show_section_dead(visible):
|
|
14 |
|
15 |
button_collision, button_deliberate_destruction, button_indirect_destruction, button_natural_cause, dropdown, dropdown_level2, openfield_level2, dropdown_extra_level2 = create_causes(visible)
|
16 |
|
17 |
-
|
|
|
|
|
|
|
|
|
|
|
18 |
|
19 |
-
|
|
|
|
|
|
|
|
1 |
import gradio as gr
|
2 |
from circumstances import create_causes
|
3 |
+
from followup_events import create_followup_dropdowns, create_followup_open
|
4 |
from utils_json import add_data_to_individual
|
5 |
|
6 |
def show_section_dead(visible):
|
|
|
14 |
|
15 |
button_collision, button_deliberate_destruction, button_indirect_destruction, button_natural_cause, dropdown, dropdown_level2, openfield_level2, dropdown_extra_level2 = create_causes(visible)
|
16 |
|
17 |
+
gr.Markdown("## Follow-Up Events", label="Title")
|
18 |
+
gr.Markdown("Please tell us what you did with the animal.", label="description")
|
19 |
+
with gr.Row():
|
20 |
+
fe_collection_dropdown, fe_recepient_dropdown, fe_radio_dropdown, fe_answer_dropdown = create_followup_dropdowns(visible, "dead")
|
21 |
+
with gr.Row():
|
22 |
+
fe_name_recipient, fe_collection_ref = create_followup_open(visible, "dead")
|
23 |
|
24 |
+
|
25 |
+
return section_dead, button_collision, button_deliberate_destruction, button_indirect_destruction, button_natural_cause, \
|
26 |
+
dropdown, dropdown_level2, openfield_level2, dropdown_extra_level2, \
|
27 |
+
fe_collection_dropdown, fe_recepient_dropdown, fe_radio_dropdown, fe_answer_dropdown, fe_name_recipient, fe_collection_ref
|
app/followup_events.py
CHANGED
@@ -1,17 +1,46 @@
|
|
1 |
import gradio as gr
|
2 |
from utils_config import get_custom_config_dropdowns
|
|
|
3 |
|
4 |
-
def
|
5 |
followup_config = get_custom_config_dropdowns("config_followup.json")
|
6 |
followup_config = followup_config["Event follow-up"]
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
|
12 |
-
|
13 |
-
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
import gradio as gr
|
2 |
from utils_config import get_custom_config_dropdowns
|
3 |
+
from utils_json import add_data_to_individual
|
4 |
|
5 |
+
def create_followup_dropdowns(visible, elem_id):
|
6 |
followup_config = get_custom_config_dropdowns("config_followup.json")
|
7 |
followup_config = followup_config["Event follow-up"]
|
8 |
+
fe_collection_dropdown = create_fe_collection_dropdown(followup_config, visible, elem_id)
|
9 |
+
fe_recipient_dropdown = create_fe_recipient_dropdown(followup_config, visible, elem_id)
|
10 |
+
fe_radio_dropdown = create_fe_radio_dropdown(followup_config, visible, elem_id)
|
11 |
+
fe_answer_dropdown = create_fe_answer_dropdown(followup_config, visible, elem_id)
|
12 |
+
return fe_collection_dropdown, fe_recipient_dropdown, fe_radio_dropdown, fe_answer_dropdown
|
13 |
+
|
14 |
+
def create_followup_open(visible, elem_id):
|
15 |
+
fe_name_recipient = gr.Textbox(label="Name of recipient / museum", visible=visible,
|
16 |
+
elem_id=elem_id, interactive=True)
|
17 |
+
fe_collection_ref = gr.Textbox(label="Collection reference", visible=visible,
|
18 |
+
elem_id=elem_id, interactive=True)
|
19 |
+
return fe_name_recipient, fe_collection_ref
|
20 |
+
|
21 |
+
|
22 |
+
def create_fe_collection_dropdown(followup_config, visible, elem_id):
|
23 |
+
fe_collection_dropdown = gr.Dropdown(choices=followup_config["Animal collected"]["Options"], label="Animal collected",
|
24 |
+
visible=visible, elem_id=elem_id, interactive=True)
|
25 |
+
return fe_collection_dropdown
|
26 |
+
|
27 |
+
def create_fe_recipient_dropdown(followup_config, visible, elem_id):
|
28 |
+
fe_recipient_dropdown = gr.Dropdown(choices=followup_config["Recipient"]["Options"], label="Recipient",
|
29 |
+
visible=visible, elem_id=elem_id, interactive=True)
|
30 |
+
return fe_recipient_dropdown
|
31 |
+
|
32 |
+
def create_fe_radio_dropdown(followup_config, visible, elem_id):
|
33 |
+
fe_radio_dropdown = gr.Dropdown(choices=followup_config["Radiography"]["Options"], label="Radiography",
|
34 |
+
visible=visible, elem_id=elem_id, interactive=True)
|
35 |
+
return fe_radio_dropdown
|
36 |
+
|
37 |
+
def create_fe_answer_dropdown(followup_config, visible, elem_id):
|
38 |
+
fe_answer_dropdown = gr.Dropdown(choices=followup_config["Given answer"]["Options"], label="Given answer",
|
39 |
+
visible=visible, elem_id=elem_id, interactive=True)
|
40 |
+
return fe_answer_dropdown
|
41 |
+
|
42 |
+
def save_fe(value, key):
|
43 |
+
add_data_to_individual(key, value)
|
44 |
+
|
45 |
+
|
46 |
+
|
app/main_multianimal.py
CHANGED
@@ -12,6 +12,7 @@ from circumstances_dropdowns import *
|
|
12 |
from physical_select_animal import show_physical, find_bounding_box
|
13 |
from physical_checkbox import on_select_body_part, hide_physical
|
14 |
from behavior_checkbox import show_behavior, on_select_behavior
|
|
|
15 |
from style import *
|
16 |
from theme import theme, css
|
17 |
|
@@ -77,15 +78,19 @@ with gr.Blocks(theme=theme, css=css) as demo:
|
|
77 |
# Initiate sections
|
78 |
section_dead, \
|
79 |
button_collision_dead, button_deliberate_destruction_dead, button_indirect_destruction_dead, button_natural_cause_dead, \
|
80 |
-
dropdown_dead, dropdown_level2_dead, openfield_level2_dead, dropdown_extra_level2_dead \
|
|
|
|
|
81 |
= show_section_dead(False)
|
82 |
section_wounded, radio_cause_wounded, radio_behavior_wounded, radio_physical_wounded, \
|
83 |
button_collision_wounded, button_deliberate_destruction_wounded, button_indirect_destruction_wounded, button_natural_cause_wounded, \
|
84 |
dropdown_wounded, dropdown_level2_wounded, openfield_level2_wounded, dropdown_extra_level2_wounded, \
|
85 |
behavior_checkbox, behavior_text, \
|
86 |
physical_boxes_wounded, \
|
87 |
-
checkbox_beak, text_beak, checkbox_body, text_body, checkbox_feathers, text_feathers, checkbox_head, text_head, checkbox_legs, text_legs \
|
88 |
-
|
|
|
|
|
89 |
|
90 |
# ---------------------------------------------------------
|
91 |
# ---------------------------------------------------------
|
@@ -97,7 +102,9 @@ with gr.Blocks(theme=theme, css=css) as demo:
|
|
97 |
inputs=None,
|
98 |
outputs=[section_dead,
|
99 |
button_collision_dead, button_deliberate_destruction_dead, button_indirect_destruction_dead, button_natural_cause_dead,
|
100 |
-
dropdown_dead, dropdown_level2_dead, openfield_level2_dead, dropdown_extra_level2_dead
|
|
|
|
|
101 |
])
|
102 |
butt_dead.click(partial_hide_section_wounded,
|
103 |
inputs=None,
|
@@ -107,7 +114,9 @@ with gr.Blocks(theme=theme, css=css) as demo:
|
|
107 |
dropdown_wounded, dropdown_level2_wounded, openfield_level2_wounded, dropdown_extra_level2_wounded,
|
108 |
behavior_checkbox, behavior_text,
|
109 |
physical_boxes_wounded,
|
110 |
-
checkbox_beak, text_beak, checkbox_body, text_body, checkbox_feathers, text_feathers, checkbox_head, text_head, checkbox_legs, text_legs
|
|
|
|
|
111 |
])
|
112 |
# ---------------------------------------------------------
|
113 |
# Wounded Button Logic
|
@@ -122,11 +131,15 @@ with gr.Blocks(theme=theme, css=css) as demo:
|
|
122 |
dropdown_wounded, dropdown_level2_wounded, openfield_level2_wounded, dropdown_extra_level2_wounded,
|
123 |
behavior_checkbox, behavior_text,
|
124 |
physical_boxes_wounded,
|
125 |
-
checkbox_beak, text_beak, checkbox_body, text_body, checkbox_feathers, text_feathers, checkbox_head, text_head, checkbox_legs, text_legs
|
|
|
|
|
126 |
])
|
127 |
butt_wounded.click(partial_hide_section_dead, inputs=None, outputs=[section_dead,
|
128 |
button_collision_dead, button_deliberate_destruction_dead, button_indirect_destruction_dead, button_natural_cause_dead,
|
129 |
-
dropdown_dead, dropdown_level2_dead, openfield_level2_dead, dropdown_extra_level2_dead
|
|
|
|
|
130 |
])
|
131 |
# ---------------------------------------------------------
|
132 |
# Dropdowns Dead
|
@@ -186,6 +199,24 @@ with gr.Blocks(theme=theme, css=css) as demo:
|
|
186 |
checkbox_feathers.select(on_select_body_part, inputs=[checkbox_feathers, gr.Text("feathers", visible=False)])
|
187 |
checkbox_head.select(on_select_body_part, inputs=[checkbox_head, gr.Text("head", visible=False)])
|
188 |
checkbox_legs.select(on_select_body_part, inputs=[checkbox_legs, gr.Text("legs", visible=False)])
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
189 |
|
190 |
# ---------------------------------------------------------
|
191 |
# Add One Individual's Data to the Dataframe
|
@@ -198,14 +229,17 @@ with gr.Blocks(theme=theme, css=css) as demo:
|
|
198 |
location, identified_location,
|
199 |
button_collision_dead, button_deliberate_destruction_dead, button_indirect_destruction_dead, button_natural_cause_dead,
|
200 |
dropdown_dead, dropdown_level2_dead, openfield_level2_dead, dropdown_extra_level2_dead,
|
|
|
|
|
201 |
radio_cause_wounded, radio_behavior_wounded, radio_physical_wounded,
|
202 |
button_collision_wounded, button_deliberate_destruction_wounded, button_indirect_destruction_wounded, button_natural_cause_wounded,
|
203 |
dropdown_wounded, dropdown_level2_wounded, openfield_level2_wounded, dropdown_extra_level2_wounded,
|
204 |
behavior_checkbox, behavior_text,
|
205 |
physical_boxes_wounded,
|
206 |
-
checkbox_beak, text_beak, checkbox_body, text_body, checkbox_feathers, text_feathers, checkbox_head, text_head, checkbox_legs, text_legs
|
|
|
|
|
207 |
])
|
208 |
-
|
209 |
button_clear.click()
|
210 |
button_clear.click(hide_physical,
|
211 |
outputs=[checkbox_beak, text_beak, checkbox_body, text_body, checkbox_feathers, text_feathers, checkbox_head, text_head, checkbox_legs, text_legs])
|
|
|
12 |
from physical_select_animal import show_physical, find_bounding_box
|
13 |
from physical_checkbox import on_select_body_part, hide_physical
|
14 |
from behavior_checkbox import show_behavior, on_select_behavior
|
15 |
+
from followup_events import save_fe
|
16 |
from style import *
|
17 |
from theme import theme, css
|
18 |
|
|
|
78 |
# Initiate sections
|
79 |
section_dead, \
|
80 |
button_collision_dead, button_deliberate_destruction_dead, button_indirect_destruction_dead, button_natural_cause_dead, \
|
81 |
+
dropdown_dead, dropdown_level2_dead, openfield_level2_dead, dropdown_extra_level2_dead, \
|
82 |
+
fe_collection_dropdown_dead, fe_recepient_dropdown_dead, fe_radio_dropdown_dead, fe_answer_dropdown_dead, \
|
83 |
+
fe_name_recipient_dead, fe_collection_ref_dead \
|
84 |
= show_section_dead(False)
|
85 |
section_wounded, radio_cause_wounded, radio_behavior_wounded, radio_physical_wounded, \
|
86 |
button_collision_wounded, button_deliberate_destruction_wounded, button_indirect_destruction_wounded, button_natural_cause_wounded, \
|
87 |
dropdown_wounded, dropdown_level2_wounded, openfield_level2_wounded, dropdown_extra_level2_wounded, \
|
88 |
behavior_checkbox, behavior_text, \
|
89 |
physical_boxes_wounded, \
|
90 |
+
checkbox_beak, text_beak, checkbox_body, text_body, checkbox_feathers, text_feathers, checkbox_head, text_head, checkbox_legs, text_legs, \
|
91 |
+
fe_collection_dropdown_wounded, fe_recepient_dropdown_wounded, fe_radio_dropdown_wounded, fe_answer_dropdown_wounded, \
|
92 |
+
fe_name_recipient_wounded, fe_collection_ref_wounded \
|
93 |
+
= show_section_wounded(False)
|
94 |
|
95 |
# ---------------------------------------------------------
|
96 |
# ---------------------------------------------------------
|
|
|
102 |
inputs=None,
|
103 |
outputs=[section_dead,
|
104 |
button_collision_dead, button_deliberate_destruction_dead, button_indirect_destruction_dead, button_natural_cause_dead,
|
105 |
+
dropdown_dead, dropdown_level2_dead, openfield_level2_dead, dropdown_extra_level2_dead, \
|
106 |
+
fe_collection_dropdown_dead, fe_recepient_dropdown_dead, fe_radio_dropdown_dead, fe_answer_dropdown_dead, \
|
107 |
+
fe_name_recipient_dead, fe_collection_ref_dead \
|
108 |
])
|
109 |
butt_dead.click(partial_hide_section_wounded,
|
110 |
inputs=None,
|
|
|
114 |
dropdown_wounded, dropdown_level2_wounded, openfield_level2_wounded, dropdown_extra_level2_wounded,
|
115 |
behavior_checkbox, behavior_text,
|
116 |
physical_boxes_wounded,
|
117 |
+
checkbox_beak, text_beak, checkbox_body, text_body, checkbox_feathers, text_feathers, checkbox_head, text_head, checkbox_legs, text_legs, \
|
118 |
+
fe_collection_dropdown_wounded, fe_recepient_dropdown_wounded, fe_radio_dropdown_wounded, fe_answer_dropdown_wounded, \
|
119 |
+
fe_name_recipient_wounded, fe_collection_ref_wounded \
|
120 |
])
|
121 |
# ---------------------------------------------------------
|
122 |
# Wounded Button Logic
|
|
|
131 |
dropdown_wounded, dropdown_level2_wounded, openfield_level2_wounded, dropdown_extra_level2_wounded,
|
132 |
behavior_checkbox, behavior_text,
|
133 |
physical_boxes_wounded,
|
134 |
+
checkbox_beak, text_beak, checkbox_body, text_body, checkbox_feathers, text_feathers, checkbox_head, text_head, checkbox_legs, text_legs, \
|
135 |
+
fe_collection_dropdown_wounded, fe_recepient_dropdown_wounded, fe_radio_dropdown_wounded, fe_answer_dropdown_wounded, \
|
136 |
+
fe_name_recipient_wounded, fe_collection_ref_wounded \
|
137 |
])
|
138 |
butt_wounded.click(partial_hide_section_dead, inputs=None, outputs=[section_dead,
|
139 |
button_collision_dead, button_deliberate_destruction_dead, button_indirect_destruction_dead, button_natural_cause_dead,
|
140 |
+
dropdown_dead, dropdown_level2_dead, openfield_level2_dead, dropdown_extra_level2_dead, \
|
141 |
+
fe_collection_dropdown_dead, fe_recepient_dropdown_dead, fe_radio_dropdown_dead, fe_answer_dropdown_dead, \
|
142 |
+
fe_name_recipient_dead, fe_collection_ref_dead \
|
143 |
])
|
144 |
# ---------------------------------------------------------
|
145 |
# Dropdowns Dead
|
|
|
199 |
checkbox_feathers.select(on_select_body_part, inputs=[checkbox_feathers, gr.Text("feathers", visible=False)])
|
200 |
checkbox_head.select(on_select_body_part, inputs=[checkbox_head, gr.Text("head", visible=False)])
|
201 |
checkbox_legs.select(on_select_body_part, inputs=[checkbox_legs, gr.Text("legs", visible=False)])
|
202 |
+
|
203 |
+
# ---------------------------------------------------------
|
204 |
+
# Follow Up Events Wounded
|
205 |
+
fe_collection_dropdown_wounded.select(save_fe, inputs=[fe_collection_dropdown_wounded, gr.Textbox("fe_collection", visible=False)])
|
206 |
+
fe_recepient_dropdown_wounded.select(save_fe, inputs=[fe_recepient_dropdown_wounded, gr.Textbox("fe_recipient", visible=False)])
|
207 |
+
fe_radio_dropdown_wounded.select(save_fe, inputs=[fe_radio_dropdown_wounded, gr.Textbox("fe_radio", visible=False)])
|
208 |
+
fe_answer_dropdown_wounded.select(save_fe, inputs=[fe_answer_dropdown_wounded, gr.Textbox("fe_answer", visible=False)])
|
209 |
+
fe_name_recipient_wounded.input(save_fe, inputs=[fe_name_recipient_wounded, gr.Textbox("fe_name_recipient", visible=False)])
|
210 |
+
fe_collection_ref_wounded.input(save_fe, inputs=[fe_collection_ref_wounded, gr.Textbox("fe_collection_ref", visible=False)])
|
211 |
+
|
212 |
+
# ---------------------------------------------------------
|
213 |
+
# Follow Up Events Dead
|
214 |
+
fe_collection_dropdown_dead.select(save_fe, inputs=[fe_collection_dropdown_dead, gr.Textbox("fe_collection", visible=False)])
|
215 |
+
fe_recepient_dropdown_dead.select(save_fe, inputs=[fe_recepient_dropdown_dead, gr.Textbox("fe_recipient", visible=False)])
|
216 |
+
fe_radio_dropdown_dead.select(save_fe, inputs=[fe_radio_dropdown_dead, gr.Textbox("fe_radio", visible=False)])
|
217 |
+
fe_answer_dropdown_dead.select(save_fe, inputs=[fe_answer_dropdown_dead, gr.Textbox("fe_answer", visible=False)])
|
218 |
+
fe_name_recipient_dead.input(save_fe, inputs=[fe_name_recipient_dead, gr.Textbox("fe_name_recipient", visible=False)])
|
219 |
+
fe_collection_ref_dead.input(save_fe, inputs=[fe_collection_ref_dead, gr.Textbox("fe_collection_ref", visible=False)])
|
220 |
|
221 |
# ---------------------------------------------------------
|
222 |
# Add One Individual's Data to the Dataframe
|
|
|
229 |
location, identified_location,
|
230 |
button_collision_dead, button_deliberate_destruction_dead, button_indirect_destruction_dead, button_natural_cause_dead,
|
231 |
dropdown_dead, dropdown_level2_dead, openfield_level2_dead, dropdown_extra_level2_dead,
|
232 |
+
fe_collection_dropdown_dead, fe_recepient_dropdown_dead, fe_radio_dropdown_dead, fe_answer_dropdown_dead,
|
233 |
+
fe_name_recipient_dead, fe_collection_ref_dead,
|
234 |
radio_cause_wounded, radio_behavior_wounded, radio_physical_wounded,
|
235 |
button_collision_wounded, button_deliberate_destruction_wounded, button_indirect_destruction_wounded, button_natural_cause_wounded,
|
236 |
dropdown_wounded, dropdown_level2_wounded, openfield_level2_wounded, dropdown_extra_level2_wounded,
|
237 |
behavior_checkbox, behavior_text,
|
238 |
physical_boxes_wounded,
|
239 |
+
checkbox_beak, text_beak, checkbox_body, text_body, checkbox_feathers, text_feathers, checkbox_head, text_head, checkbox_legs, text_legs,
|
240 |
+
fe_collection_dropdown_wounded, fe_recepient_dropdown_wounded, fe_radio_dropdown_wounded, fe_answer_dropdown_wounded,
|
241 |
+
fe_name_recipient_wounded, fe_collection_ref_wounded
|
242 |
])
|
|
|
243 |
button_clear.click()
|
244 |
button_clear.click(hide_physical,
|
245 |
outputs=[checkbox_beak, text_beak, checkbox_body, text_body, checkbox_feathers, text_feathers, checkbox_head, text_head, checkbox_legs, text_legs])
|
app/wounded.py
CHANGED
@@ -3,7 +3,7 @@ from circumstances import create_causes
|
|
3 |
from physical_select_animal import create_bird_anatomy
|
4 |
from physical_checkbox import process_body_parts
|
5 |
from behavior_checkbox import create_behavior_checkbox
|
6 |
-
from followup_events import
|
7 |
from utils_json import add_data_to_individual
|
8 |
|
9 |
def show_section_wounded(visible):
|
@@ -30,9 +30,14 @@ def show_section_wounded(visible):
|
|
30 |
with gr.Column():
|
31 |
checkbox_beak, text_beak, checkbox_body, text_body, checkbox_feathers, text_feathers, checkbox_head, text_head, checkbox_legs, text_legs = process_body_parts("wounded", "None")
|
32 |
|
33 |
-
|
34 |
gr.Markdown("## Follow-Up Events", label="Title")
|
35 |
-
|
|
|
|
|
|
|
|
|
|
|
36 |
|
37 |
# Change variables and names
|
38 |
return wounded_section, radio_cause, radio_behaviour, radio_physical, \
|
@@ -40,4 +45,5 @@ def show_section_wounded(visible):
|
|
40 |
dropdown, dropdown_level2, openfield_level2, dropdown_extra_level2, \
|
41 |
behavior_checkbox, behavior_text, \
|
42 |
physical_boxes, \
|
43 |
-
checkbox_beak, text_beak, checkbox_body, text_body, checkbox_feathers, text_feathers, checkbox_head, text_head, checkbox_legs, text_legs
|
|
|
|
3 |
from physical_select_animal import create_bird_anatomy
|
4 |
from physical_checkbox import process_body_parts
|
5 |
from behavior_checkbox import create_behavior_checkbox
|
6 |
+
from followup_events import create_followup_dropdowns, create_followup_open
|
7 |
from utils_json import add_data_to_individual
|
8 |
|
9 |
def show_section_wounded(visible):
|
|
|
30 |
with gr.Column():
|
31 |
checkbox_beak, text_beak, checkbox_body, text_body, checkbox_feathers, text_feathers, checkbox_head, text_head, checkbox_legs, text_legs = process_body_parts("wounded", "None")
|
32 |
|
33 |
+
|
34 |
gr.Markdown("## Follow-Up Events", label="Title")
|
35 |
+
gr.Markdown("Please tell us what you did with the animal.", label="description")
|
36 |
+
with gr.Row():
|
37 |
+
fe_collection_dropdown, fe_recepient_dropdown, fe_radio_dropdown, fe_answer_dropdown = create_followup_dropdowns(visible, "wounded")
|
38 |
+
with gr.Row():
|
39 |
+
fe_name_recipient, fe_collection_ref = create_followup_open(visible, "wounded")
|
40 |
+
|
41 |
|
42 |
# Change variables and names
|
43 |
return wounded_section, radio_cause, radio_behaviour, radio_physical, \
|
|
|
45 |
dropdown, dropdown_level2, openfield_level2, dropdown_extra_level2, \
|
46 |
behavior_checkbox, behavior_text, \
|
47 |
physical_boxes, \
|
48 |
+
checkbox_beak, text_beak, checkbox_body, text_body, checkbox_feathers, text_feathers, checkbox_head, text_head, checkbox_legs, text_legs, \
|
49 |
+
fe_collection_dropdown, fe_recepient_dropdown, fe_radio_dropdown, fe_answer_dropdown, fe_name_recipient, fe_collection_ref
|