@@ -21,47 +21,67 @@ Elm.Native.Graphics.Input.make = function(elm) {
21 return { _:{}, signal:signal, handle:signal };
21 return { _:{}, signal:signal, handle:signal };
24− function renderDropDown(signal, values) {
24+ function renderDropDown(model) {
26− var entries = List.toArray(values);
28− var drop = newNode('select');
25+ var drop = newNode('select');
29− drop.style.border = '0 solid';
26+ drop.style.border = '0 solid';
30− drop.style.pointerEvents = 'auto';
27+ drop.style.pointerEvents = 'auto';
31− drop.style.display = 'block';
28+ drop.style.display = 'block';
30+ drop.elm_signal = model.signal;
31+ drop.elm_values = List.toArray(model.values);
32+ var values = drop.elm_values;
32− for (var i = 0; i < entries.length; ++i) {
34+ for (var i = 0; i < values.length; ++i) {
33− var option = newNode('option');
35+ var option = newNode('option');
34− var name = entries[i]._0;
36+ var name = values[i]._0;
35− option.value = name;
37+ option.value = name;
36− option.innerHTML = name;
38+ option.innerHTML = name;
37− drop.appendChild(option);
39+ drop.appendChild(option);
39− drop.addEventListener('change', function() {
41+ drop.addEventListener('change', function() {
40− elm.notify(signal.id, entries[drop.selectedIndex]._1);
42+ elm.notify(drop.elm_signal.id, drop.elm_values[drop.selectedIndex]._1);
43− var t = drop.cloneNode(true);
44− t.style.visibility = "hidden";
46− elm.node.appendChild(t);
47− var style = window.getComputedStyle(t, null);
48− var w = Math.ceil(style.getPropertyValue("width").slice(0,-2) - 0);
49− var h = Math.ceil(style.getPropertyValue("height").slice(0,-2) - 0);
50− elm.node.removeChild(t);
51− return drop;
45+ return drop;
55 function updateDropDown(node, oldModel, newModel) {
48 function updateDropDown(node, oldModel, newModel) {
49+ node.elm_signal = newModel.signal;
50+ node.elm_values = List.toArray(newModel.values);
52+ var values = node.elm_values;
53+ var kids = node.childNodes;
54+ var kidsLength = kids.length;
57+ for (; i < kidsLength && i < values.length; ++i) {
58+ var option = kids[i];
59+ var name = values[i]._0;
61+ option.innerHTML = name;
63+ for (; i < kidsLength; ++i) {
64+ node.removeChild(node.lastChild);
66+ for (; i < values.length; ++i) {
67+ var option = newNode('option');
68+ var name = values[i]._0;
70+ option.innerHTML = name;
71+ node.appendChild(option);
58 function dropDown(signal, values) {
75 function dropDown(signal, values) {
59 return A3(newElement, 100, 24, {
76 return A3(newElement, 100, 24, {
60 ctor: 'Custom',
77 ctor: 'Custom',
61 type: 'DropDown',
78 type: 'DropDown',
62− render: renderDropDown(signal,values),
79+ render: renderDropDown,
63 update: updateDropDown,
80 update: updateDropDown,
64− model: {}
81+ model: {