on master help sign in
Fix #668, #672, and make link+customButton work
1c6dfdeEvan Czaplicki
libraries/Native/Graphics/Input.js+34−23
@@ -106,52 +106,63 @@ Elm.Native.Graphics.Input.make = function(elm) {
106 btn.elm_hover = Render.render(model.hover);
106 btn.elm_hover = Render.render(model.hover);
107 btn.elm_down = Render.render(model.down);
107 btn.elm_down = Render.render(model.down);
108
108
109− function replace(node) {
109+ btn.elm_up.style.display = 'block';
110− if (node !== btn.firstChild) {
110+ btn.elm_hover.style.display = 'none';
111− btn.replaceChild(node, btn.firstChild);
111+ btn.elm_down.style.display = 'none';
112− }
112+
113+ btn.appendChild(btn.elm_up);
114+ btn.appendChild(btn.elm_hover);
115+ btn.appendChild(btn.elm_down);
116+
117+ function swap(visibleNode, hiddenNode1, hiddenNode2) {
118+ visibleNode.style.display = 'block';
119+ hiddenNode1.style.display = 'none';
120+ hiddenNode2.style.display = 'none';
113 }
121 }
122+
114 var overCount = 0;
123 var overCount = 0;
115 function over(e) {
124 function over(e) {
116 if (overCount++ > 0) return;
125 if (overCount++ > 0) return;
117− replace(btn.elm_hover);
126+ swap(btn.elm_hover, btn.elm_down, btn.elm_up);
118 }
127 }
119 function out(e) {
128 function out(e) {
120 if (btn.contains(e.toElement || e.relatedTarget)) return;
129 if (btn.contains(e.toElement || e.relatedTarget)) return;
121 overCount = 0;
130 overCount = 0;
122− replace(btn.elm_up);
131+ swap(btn.elm_up, btn.elm_down, btn.elm_hover);
123 }
132 }
124 function up() {
133 function up() {
125− replace(btn.elm_hover);
134+ swap(btn.elm_hover, btn.elm_down, btn.elm_up);
126 elm.notify(btn.elm_signal.id, btn.elm_value);
135 elm.notify(btn.elm_signal.id, btn.elm_value);
127 }
136 }
128 function down() {
137 function down() {
129− replace(btn.elm_down);
138+ swap(btn.elm_down, btn.elm_hover, btn.elm_up);
130 }
139 }
140+
131 btn.addEventListener('mouseover', over);
141 btn.addEventListener('mouseover', over);
132 btn.addEventListener('mouseout' , out);
142 btn.addEventListener('mouseout' , out);
133 btn.addEventListener('mousedown', down);
143 btn.addEventListener('mousedown', down);
134 btn.addEventListener('mouseup' , up);
144 btn.addEventListener('mouseup' , up);
135
145
136− btn.appendChild(btn.elm_up);
137−
138 return btn;
146 return btn;
139 }
147 }
140
148
141 function updateCustomButton(node, oldModel, newModel) {
149 function updateCustomButton(node, oldModel, newModel) {
142− var signal = newModel.signal;
143− node.elm_up.elm_signal = signal;
150+ node.elm_signal = newModel.signal;
144− node.elm_hover.elm_signal = signal;
151+ node.elm_value = newModel.value;
145− node.elm_down.elm_signal = signal;
152+
146−
153+ var kids = node.childNodes;
147− var value = newModel.value;
154+ var styleUp = kids[0].style.display;
148− node.elm_up.elm_value = value;
155+ var styleHover = kids[1].style.display;
149− node.elm_hover.elm_value = value;
156+ var styleDown = kids[2].style.display;
150− node.elm_down.elm_value = value;
157+
151−
152− Render.update(node.elm_up, oldModel.up, newModel.up)
158+ Render.update(kids[0], oldModel.up, newModel.up);
153− Render.update(node.elm_hover, oldModel.hover, newModel.hover)
159+ Render.update(kids[1], oldModel.hover, newModel.hover);
154− Render.update(node.elm_down, oldModel.down, newModel.down)
160+ Render.update(kids[2], oldModel.down, newModel.down);
161+
162+ var kids = node.childNodes;
163+ kids[0].style.display = styleUp;
164+ kids[1].style.display = styleHover;
165+ kids[2].style.display = styleDown;
155 }
166 }
156
167
157 function max3(a,b,c) {
168 function max3(a,b,c) {