1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
|
function remove_children(element) {
Array.from(element.children).forEach(child => {
element.removeChild(child);
});
}
function trigger_change_event(element) {
evt = new Event("change");
element.dispatchEvent(evt);
}
function setup_groups(group_data) {
elt = document.getElementById("group");
remove_children(elt);
the_groups = group_data.reduce(
function(acc, row) {
grouping = row[2].slice(7).trim();
if(acc[grouping] === undefined) {
acc[grouping] = [];
}
acc[grouping].push([row[0], row[1]]);
return acc;
},
{});
for(grouping in the_groups) {
optgrp = document.createElement("optgroup");
optgrp.setAttribute("label", grouping);
the_groups[grouping].forEach(group => {
opt = document.createElement("option");
opt.setAttribute("value", group[0]);
opt.appendChild(document.createTextNode(group[1]));
optgrp.appendChild(opt);
});
elt.appendChild(optgrp);
}
trigger_change_event(elt);
}
function setup_types(type_data) {
elt = document.getElementById("type");
remove_children(elt);
the_types = type_data.reduce(function(acc, row) {
grp = row[2];
if(acc[grp] === undefined) {
acc[grp] = [];
}
acc[grp].push([row[0], row[1]]);
return acc;
}, {});
for(type_group in the_types) {
optgrp = document.createElement("optgroup");
optgrp.setAttribute("label", type_group);
the_types[type_group].forEach(type => {
opt = document.createElement("option");
opt.setAttribute("value", type[0]);
opt.appendChild(document.createTextNode(type[1]));
optgrp.appendChild(opt);
});
elt.appendChild(optgrp);
}
trigger_change_event(elt);
}
function setup_datasets(dataset_data) {
console.info("DATASET DATA:", dataset_data);
elt = document.getElementById("dataset");
remove_children(elt);
dataset_data.forEach(dataset => {
opt = document.createElement("option");
opt.setAttribute("value", dataset[0]);
opt.appendChild(document.createTextNode(
"[" + dataset[1] + "] " + dataset[2]));
elt.appendChild(opt);
});
trigger_change_event(elt);
}
function menu_contents() {
return JSON.parse(
document.getElementsByTagName("form")[0].getAttribute(
"data-menu-content"));
}
function update_menu(event) {
menu = menu_contents();
species_elt = document.getElementById("species");
group_elt = document.getElementById("group");
type_elt = document.getElementById("type");
dataset_elt = document.getElementById("dataset");
if(event.target == species_elt) {
setup_groups(menu["groups"][species_elt.value]);
}
if(event.target == group_elt) {
setup_types(menu["types"][species_elt.value][group_elt.value]);
}
if(event.target == type_elt) {
setup_datasets(
menu["datasets"][species_elt.value][group_elt.value][type_elt.value]
);
}
}
|