Skip to content

Commit b0e2553

Browse files
authored
Merge pull request #2 from bruz/nodelist-fix
Merge upstream fix for NodeList handling
2 parents 525e651 + 39ca705 commit b0e2553

File tree

8 files changed

+66
-23
lines changed

8 files changed

+66
-23
lines changed

CHANGELOG.md

+5-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
## Change Log
22

3-
### 3.2.6 (2017/02/08 12:33 +00:00)
3+
### 3.2.7 (2017/02/17 07:24 +00:00)
4+
- [#262](https://github.com/wwayne/react-tooltip/pull/262) Fix nodelist converte in safari (@wwayne)
5+
- [#260](https://github.com/wwayne/react-tooltip/pull/260) Fix NodeList to Array convertion (@huumanoid)
6+
7+
### 3.2.6 (2017/02/08 12:34 +00:00)
48
- [#255](https://github.com/wwayne/react-tooltip/pull/255) (fix) Remove console logs (@flexpert)
59
- [#254](https://github.com/wwayne/react-tooltip/pull/254) Add support for className prop (@jonbeller)
610

dist/index.js

+5-6
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,10 @@ var _getTipContent2 = _interopRequireDefault(_getTipContent);
5757

5858
var _aria = require('./utils/aria');
5959

60+
var _nodeListToArray = require('./utils/nodeListToArray');
61+
62+
var _nodeListToArray2 = _interopRequireDefault(_nodeListToArray);
63+
6064
var _style = require('./style');
6165

6266
var _style2 = _interopRequireDefault(_style);
@@ -168,18 +172,13 @@ var ReactTooltip = (0, _staticMethods2.default)(_class = (0, _windowListener2.de
168172
key: 'getTargetArray',
169173
value: function getTargetArray(id) {
170174
var targetArray = void 0;
171-
172175
if (!id) {
173176
targetArray = document.querySelectorAll('[data-tip]:not([data-for])');
174177
} else {
175178
targetArray = document.querySelectorAll('[data-tip][data-for="' + id + '"]');
176179
}
177-
178180
// targetArray is a NodeList, convert it to a real array
179-
// I hope I can use Object.values...
180-
return Object.getOwnPropertyNames(targetArray).map(function (key) {
181-
return targetArray[key];
182-
});
181+
return (0, _nodeListToArray2.default)(targetArray);
183182
}
184183

185184
/**

dist/utils/nodeListToArray.js

+15
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
"use strict";
2+
3+
Object.defineProperty(exports, "__esModule", {
4+
value: true
5+
});
6+
7+
exports.default = function (nodeList) {
8+
var length = nodeList.length;
9+
if (nodeList.hasOwnProperty) {
10+
return Array.prototype.slice.call(nodeList);
11+
}
12+
return new Array(length).fill().map(function (index) {
13+
return nodeList[index];
14+
});
15+
};

package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "react-tooltip",
3-
"version": "3.2.6",
3+
"version": "3.2.7",
44
"description": "react tooltip component",
55
"main": "dist/index.js",
66
"scripts": {

src/index.js

+2-6
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import getEffect from './decorators/getEffect'
1515
import getPosition from './utils/getPosition'
1616
import getTipContent from './utils/getTipContent'
1717
import { parseAria } from './utils/aria'
18+
import nodeListToArray from './utils/nodeListToArray'
1819

1920
/* CSS */
2021
import cssStyle from './style'
@@ -146,18 +147,13 @@ class ReactTooltip extends Component {
146147
*/
147148
getTargetArray (id) {
148149
let targetArray
149-
150150
if (!id) {
151151
targetArray = document.querySelectorAll('[data-tip]:not([data-for])')
152152
} else {
153153
targetArray = document.querySelectorAll(`[data-tip][data-for="${id}"]`)
154154
}
155-
156155
// targetArray is a NodeList, convert it to a real array
157-
// I hope I can use Object.values...
158-
return Object.getOwnPropertyNames(targetArray).map(key => {
159-
return targetArray[key]
160-
})
156+
return nodeListToArray(targetArray)
161157
}
162158

163159
/**

src/utils/nodeListToArray.js

+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
/**
2+
* Convert nodelist to array
3+
* @see https://github.com/facebook/fbjs/blob/e66ba20ad5be433eb54423f2b097d829324d9de6/packages/fbjs/src/core/createArrayFromMixed.js#L24
4+
* NodeLists are functions in Safari
5+
*/
6+
7+
export default function (nodeList) {
8+
const length = nodeList.length
9+
if (nodeList.hasOwnProperty) {
10+
return Array.prototype.slice.call(nodeList)
11+
}
12+
return new Array(length).fill().map(index => nodeList[index])
13+
}

standalone/react-tooltip.js

+23-7
Original file line numberDiff line numberDiff line change
@@ -372,6 +372,10 @@ var _getTipContent2 = _interopRequireDefault(_getTipContent);
372372

373373
var _aria = require('./utils/aria');
374374

375+
var _nodeListToArray = require('./utils/nodeListToArray');
376+
377+
var _nodeListToArray2 = _interopRequireDefault(_nodeListToArray);
378+
375379
var _style = require('./style');
376380

377381
var _style2 = _interopRequireDefault(_style);
@@ -483,18 +487,13 @@ var ReactTooltip = (0, _staticMethods2.default)(_class = (0, _windowListener2.de
483487
key: 'getTargetArray',
484488
value: function getTargetArray(id) {
485489
var targetArray = void 0;
486-
487490
if (!id) {
488491
targetArray = document.querySelectorAll('[data-tip]:not([data-for])');
489492
} else {
490493
targetArray = document.querySelectorAll('[data-tip][data-for="' + id + '"]');
491494
}
492-
493495
// targetArray is a NodeList, convert it to a real array
494-
// I hope I can use Object.values...
495-
return Object.getOwnPropertyNames(targetArray).map(function (key) {
496-
return targetArray[key];
497-
});
496+
return (0, _nodeListToArray2.default)(targetArray);
498497
}
499498

500499
/**
@@ -898,7 +897,7 @@ var ReactTooltip = (0, _staticMethods2.default)(_class = (0, _windowListener2.de
898897
module.exports = ReactTooltip;
899898

900899
}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
901-
},{"./decorators/customEvent":3,"./decorators/getEffect":4,"./decorators/isCapture":5,"./decorators/staticMethods":6,"./decorators/windowListener":7,"./style":9,"./utils/aria":10,"./utils/getPosition":11,"./utils/getTipContent":12,"classnames":1}],9:[function(require,module,exports){
900+
},{"./decorators/customEvent":3,"./decorators/getEffect":4,"./decorators/isCapture":5,"./decorators/staticMethods":6,"./decorators/windowListener":7,"./style":9,"./utils/aria":10,"./utils/getPosition":11,"./utils/getTipContent":12,"./utils/nodeListToArray":13,"classnames":1}],9:[function(require,module,exports){
902901
'use strict';
903902

904903
Object.defineProperty(exports, "__esModule", {
@@ -1277,5 +1276,22 @@ var _react2 = _interopRequireDefault(_react);
12771276
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
12781277

12791278
}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
1279+
},{}],13:[function(require,module,exports){
1280+
"use strict";
1281+
1282+
Object.defineProperty(exports, "__esModule", {
1283+
value: true
1284+
});
1285+
1286+
exports.default = function (nodeList) {
1287+
var length = nodeList.length;
1288+
if (nodeList.hasOwnProperty) {
1289+
return Array.prototype.slice.call(nodeList);
1290+
}
1291+
return new Array(length).fill().map(function (index) {
1292+
return nodeList[index];
1293+
});
1294+
};
1295+
12801296
},{}]},{},[8])(8)
12811297
});

standalone/react-tooltip.min.js

+2-2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)