on master help sign in
Fix removal of hoverables and change pointerEvents to 'none' only when necessary
8a21310Evan Czaplicki
runtime/Render/Element.js+16−1
@@ -64,7 +64,6 @@ function addClick(e, handler) {
64
64
65function removeClick(e, handler) {
65function removeClick(e, handler) {
66 if (e.elm_click_trigger) {
66 if (e.elm_click_trigger) {
67− e.style.pointerEvents = 'none';
68 e.removeEventListener('click', e.elm_click_trigger);
67 e.removeEventListener('click', e.elm_click_trigger);
69 e.elm_click_trigger = null;
68 e.elm_click_trigger = null;
70 e.elm_click_handler = null;
69 e.elm_click_handler = null;
@@ -94,11 +93,14 @@ function addHover(e, handler) {
94}
93}
95
94
96function removeHover(e) {
95function removeHover(e) {
96+ e.elm_hover_handler = null;
97 if (e.elm_hover_over) {
97 if (e.elm_hover_over) {
98 e.removeEventListener('mouseover', e.elm_hover_over);
98 e.removeEventListener('mouseover', e.elm_hover_over);
99+ e.elm_hover_over = null;
99 }
100 }
100 if (e.elm_hover_out) {
101 if (e.elm_hover_out) {
101 e.removeEventListener('mouseout', e.elm_hover_out);
102 e.removeEventListener('mouseout', e.elm_hover_out);
103+ e.elm_hover_out = null;
102 }
104 }
103}
105}
104
106
@@ -419,8 +421,12 @@ function updateProps(node, curr, next) {
419 }
421 }
420 }
422 }
421
423
424+ // update click and hover handlers
425+ var removed = false;
426+
422 // update hover handlers
427 // update hover handlers
423 if (nextProps.hover.ctor === '_Tuple0') {
428 if (nextProps.hover.ctor === '_Tuple0') {
429+ removed = true;
424 removeHover(node);
430 removeHover(node);
425 } else if (node.elm_hover_handler) {
431 } else if (node.elm_hover_handler) {
426 node.elm_hover_handler = nextProps.hover;
432 node.elm_hover_handler = nextProps.hover;
@@ -430,12 +436,21 @@ function updateProps(node, curr, next) {
430
436
431 // update click handlers
437 // update click handlers
432 if (nextProps.click.ctor === '_Tuple0') {
438 if (nextProps.click.ctor === '_Tuple0') {
439+ removed = true;
433 removeClick(node);
440 removeClick(node);
434 } else if (node.elm_click_handler) {
441 } else if (node.elm_click_handler) {
435 node.elm_click_handler = nextProps.click;
442 node.elm_click_handler = nextProps.click;
436 } else {
443 } else {
437 addClick(node, nextProps.click);
444 addClick(node, nextProps.click);
438 }
445 }
446+
447+ // stop capturing clicks if
448+ if (removed
449+ && nextProps.hover.ctor === '_Tuple0'
450+ && nextProps.click.ctor === '_Tuple0')
451+ {
452+ node.style.pointerEvents = 'none';
453+ }
439}
454}
440
455
441return { render:render, update:update };
456return { render:render, update:update };