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

Commit 5f5447f

Browse files
committed
Merge pull request #2 from meikoudras/master
Enhancements for various devices
2 parents 62fdd6c + 0ad6fcc commit 5f5447f

File tree

4 files changed

+75
-55
lines changed

4 files changed

+75
-55
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.removeEventListener("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"];

modules/menu-container.js

Lines changed: 19 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -47,8 +47,8 @@ var MenuContainer = _react2["default"].createClass({
4747
getMenuPosition: function getMenuPosition(x, y) {
4848
var menu = _react2["default"].findDOMNode(this.refs.menu);
4949
var screen = window.screen;
50-
var scrollX = window.scrollX;
51-
var scrollY = window.scrollY;
50+
var scrollX = document.documentElement.scrollTop;
51+
var scrollY = document.documentElement.scrollLeft;
5252
var AvailWidth = screen.AvailWidth;
5353
var AvailHeight = screen.AvailHeight;
5454
var offsetWidth = menu.offsetWidth;
@@ -70,21 +70,26 @@ var MenuContainer = _react2["default"].createClass({
7070
return menuStyles;
7171
},
7272
_outsideClickHandler: function _outsideClickHandler(event) {
73-
var localNode = this.localNode,
74-
source = event.target,
75-
found = false;
73+
var _props = this.props;
74+
var isVisible = _props.isVisible;
75+
var identifier = _props.identifier;
76+
if(isVisible === identifier) {
77+
var localNode = this.localNode,
78+
source = event.target,
79+
found = false;
7680

77-
while (source.parentNode) {
78-
found = source === localNode;
81+
while (source.parentNode) {
82+
found = source === localNode;
7983

80-
if (found) {
81-
return;
82-
}
84+
if (found) {
85+
return;
86+
}
8387

84-
source = source.parentNode;
85-
}
88+
source = source.parentNode;
89+
}
8690

87-
this._hideMenu();
91+
this._hideMenu();
92+
}
8893
},
8994
_hideMenu: function _hideMenu() {
9095
this.props.flux.getActions("menu").setParams({
@@ -132,4 +137,4 @@ var MenuContainer = _react2["default"].createClass({
132137
});
133138

134139
exports["default"] = MenuContainer;
135-
module.exports = exports["default"];
140+
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 (

src/menu-container.js

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,9 @@ const MenuContainer = React.createClass({
3535
},
3636
getMenuPosition(x, y) {
3737
let menu = React.findDOMNode(this.refs.menu);
38-
let { screen, scrollX, scrollY } = window,
38+
let scrollX = document.documentElement.scrollTop;
39+
let scrollY = document.documentElement.scrollLeft;
40+
let { screen } = window,
3941
{ AvailWidth, AvailHeight } = screen,
4042
{ offsetWidth, offsetHeight } = menu,
4143
menuStyles = {};
@@ -55,19 +57,22 @@ const MenuContainer = React.createClass({
5557
return menuStyles;
5658
},
5759
_outsideClickHandler(event) {
58-
let localNode = this.localNode,
59-
source = event.target,
60-
found = false;
60+
let { isVisible, identifier } = this.props;
61+
if(isVisible === identifier) {
62+
let localNode = this.localNode,
63+
source = event.target,
64+
found = false;
6165

62-
while (source.parentNode) {
63-
found = (source === localNode);
66+
while (source.parentNode) {
67+
found = (source === localNode);
6468

65-
if (found) { return; }
69+
if (found) { return; }
6670

67-
source = source.parentNode;
68-
}
71+
source = source.parentNode;
72+
}
6973

70-
this._hideMenu();
74+
this._hideMenu();
75+
}
7176
},
7277
_hideMenu() {
7378
this.props.flux.getActions("menu").setParams({

0 commit comments

Comments
 (0)