-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcontrols.js
110 lines (89 loc) · 2.95 KB
/
controls.js
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
106
107
108
109
110
/* global currentGroup:true simulation showInfluence */
function createControls(controls) { // eslint-disable-line no-unused-vars
var controlDiv = d3.select('#main-controls'); //.append('div');
createGroupControls(controlDiv);
createSliders(controlDiv, controls);
}
function createSliders (controlDiv, controls) {
var sliders = controlDiv.append('div')
.classed('sliders-container', true)
.selectAll('.slider-container')
.data(controls)
.enter()
.append('div')
.attr('class', d => d[0])
.classed('slider-container', true);
sliders.append('label')
.classed('slider-label', true)
.text(d => d[1]);
sliders.append('input')
.classed('slider', true)
.property('type', 'range')
.property('min', d => d[2])
.property('max', d => d[3])
.property('step', d => d[4])
.property('value', d => simulation.group(currentGroup)[d[0]])
.on('input', function (d) {
this.nextSibling.textContent = this.value;
simulation.group(currentGroup)[d[0]] = +this.value;
});
sliders.append('span')
.classed('slider-value', true)
.text(d => simulation.group(currentGroup)[d[0]]);
d3.select('.slider-container.influenceRadius')
.on('mouseenter', () => simulation.showInfluence = true)
.on('mouseleave', () => simulation.showInfluence = showInfluence);
}
function createGroupControls(controlDiv) {
var controlContainerGroup = controlDiv.append('div').classed('control-container-group', true);
createDropdown(controlContainerGroup);
updateDropdown();
controlContainerGroup
.append('button')
.classed('add-btn', true)
.text('Add')
.on('click', function () {
simulation.addGroup();
updateDropdown();
});
controlContainerGroup
.append('button')
.classed('rmv-btn', true)
.text('Remove')
.on('click', function () {
var next = simulation.nextGroup(currentGroup) || simulation.previousGroup(currentGroup);
if (next == null) return;
simulation.removeGroup(currentGroup);
currentGroup = next.uid;
updateDropdown();
});
}
function createDropdown (controlContainerGroup) {
var dropdownContainerGroup = controlContainerGroup.append('div').classed('dropdown', true);
dropdownContainerGroup.append('button')
.classed('drop-btn', true)
.text('Group ' + currentGroup);
dropdownContainerGroup.append('div')
.classed('dropdown-content', true);
}
function updateDropdown() {
d3.select('.drop-btn')
.text('Group ' + currentGroup);
var a = d3.select('.dropdown-content')
.selectAll('a')
.data(simulation.groups, g => g.uid);
a.enter()
.append('a')
.text(g => 'Group ' + g.uid)
.on('click', (group) => {
currentGroup = group.uid; // Incorrect
d3.select('.drop-btn').text('Group ' + currentGroup);
var sliders_container = d3.select('.sliders-container')
.selectAll('.slider-container');
sliders_container.select('.slider')
.property('value', d => simulation.group(currentGroup)[d[0]]);
sliders_container.select('.slider-value')
.text(d => simulation.group(currentGroup)[d[0]]);
});
a.exit().remove();
}