Skip to content
This repository was archived by the owner on Sep 1, 2020. It is now read-only.

Commit a5325c5

Browse files
committed
better event handling for contextmenu
1 parent 8099850 commit a5325c5

File tree

2 files changed

+41
-31
lines changed

2 files changed

+41
-31
lines changed

modules/contextmenu-layer.js

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -33,14 +33,18 @@ exports["default"] = function (identifier, configure) {
3333
(0, _invariant2["default"])(typeof configure === "function", "Expected configure to be a function. See %s", displayName);
3434

3535
return _react2["default"].createClass({
36-
displayName: displayName + "ContextMenuLayer",
37-
componentDidMount: function componentDidMount() {
38-
_react2["default"].findDOMNode(this).addEventListener("contextmenu", this.handleContextClick);
39-
},
40-
componentWillUnmount: function componentWillUnmount() {
41-
_react2["default"].findDOMNode(this).removeEventListener("contextmenu", this.handleContextClick);
42-
},
43-
handleContextClick: function handleContextClick(event) {
36+
displayName: displayName + "ContextMenuLayer",
37+
componentDidMount: function componentDidMount() {
38+
document.addEventListener("contextmenu", this.handleContextClick);
39+
},
40+
componentWillUnmount: function componentWillUnmount() {
41+
document.addEventListener("contextmenu", this.handleContextClick);
42+
},
43+
handleContextClick: function handleContextClick(event) {
44+
var target = event.target;
45+
var domNode = _react2["default"].findDOMNode(this);
46+
47+
if(target == domNode || domNode.contains(target)) {
4448
var currentItem = configure(this.props);
4549

4650
(0, _invariant2["default"])((0, _lodashIsobject2["default"])(currentItem), "Expected configure to return an object. See %s", displayName);
@@ -53,12 +57,14 @@ exports["default"] = function (identifier, configure) {
5357
currentItem: currentItem,
5458
isVisible: typeof identifier === "function" ? identifier(this.props) : identifier
5559
});
56-
},
57-
render: function render() {
58-
return _react2["default"].createElement(Component, _extends({}, this.props, { identifier: identifier }));
59-
}
60-
});
60+
}
61+
62+
},
63+
render: function render() {
64+
return _react2["default"].createElement(Component, _extends({}, this.props, { identifier: identifier }));
65+
}
66+
});
6167
};
6268
};
6369

64-
module.exports = exports["default"];
70+
module.exports = exports["default"];

src/contextmenu-layer.js

Lines changed: 21 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -28,30 +28,34 @@ export default function (identifier, configure) {
2828
return React.createClass({
2929
displayName: `${displayName}ContextMenuLayer`,
3030
componentDidMount() {
31-
React.findDOMNode(this)
31+
document
3232
.addEventListener("contextmenu", this.handleContextClick);
3333
},
3434
componentWillUnmount() {
35-
React.findDOMNode(this)
35+
document
3636
.removeEventListener("contextmenu", this.handleContextClick);
3737
},
3838
handleContextClick(event) {
39-
let currentItem = configure(this.props);
39+
let target = event.target;
40+
let domNode = React.findDOMNode(this);
41+
if(target == domNode || domNode.contains(target)) {
42+
let currentItem = configure(this.props);
43+
44+
invariant(
45+
_isObject(currentItem),
46+
"Expected configure to return an object. See %s",
47+
displayName
48+
);
4049

41-
invariant(
42-
_isObject(currentItem),
43-
"Expected configure to return an object. See %s",
44-
displayName
45-
);
46-
47-
event.preventDefault();
48-
const actions = flux.getActions("menu");
49-
actions.setParams({
50-
x: event.clientX,
51-
y: event.clientY,
52-
currentItem,
53-
isVisible: typeof identifier === "function" ? identifier(this.props) : identifier
54-
});
50+
event.preventDefault();
51+
const actions = flux.getActions("menu");
52+
actions.setParams({
53+
x: event.clientX,
54+
y: event.clientY,
55+
currentItem,
56+
isVisible: typeof identifier === "function" ? identifier(this.props) : identifier
57+
});
58+
}
5559
},
5660
render() {
5761
return (

0 commit comments

Comments
 (0)