Последняя версия с сервера прошлого разработчика
This commit is contained in:
54
nova/resources/js/polyfills/composedPath.js
vendored
Executable file
54
nova/resources/js/polyfills/composedPath.js
vendored
Executable file
@@ -0,0 +1,54 @@
|
||||
/**
|
||||
* Returns an array with all DOM elements affected by an event.
|
||||
* The function serves as a polyfill for
|
||||
* [`Event.composedPath()`](https://dom.spec.whatwg.org/#dom-event-composedpath).
|
||||
*
|
||||
* @category Event
|
||||
* @param {Event} evt The triggered event.
|
||||
* @return {Array.<HTMLElement>} The DOM elements affected by the event.
|
||||
*
|
||||
* @example
|
||||
* let domChild = document.createElement("div"),
|
||||
* domParent = document.createElement("div"),
|
||||
* domGrandparent = document.createElement("div"),
|
||||
* body = document.body,
|
||||
* html = document.querySelector("html");
|
||||
*
|
||||
* domParent.appendChild(domChild);
|
||||
* domGrandparent.appendChild(domParent);
|
||||
* body.appendChild(domGrandparent);
|
||||
*
|
||||
* domChild.addEventListener("click", dealWithClick);
|
||||
* const dealWithClick = evt => getEventPath(evt);
|
||||
*
|
||||
* // when domChild is clicked:
|
||||
* // => [domChild, domParent, domGrandparent, body, html, document, window]
|
||||
*/
|
||||
|
||||
export default function composedPath(evt) {
|
||||
var path = (evt.composedPath && evt.composedPath()) || evt.path,
|
||||
target = evt.target
|
||||
|
||||
if (path != null) {
|
||||
// Safari doesn't include Window, and it should.
|
||||
path = path.indexOf(window) < 0 ? path.concat([window]) : path
|
||||
return path
|
||||
}
|
||||
|
||||
if (target === window) {
|
||||
return [window]
|
||||
}
|
||||
|
||||
function getParents(node, memo) {
|
||||
memo = memo || []
|
||||
var parentNode = node.parentNode
|
||||
|
||||
if (!parentNode) {
|
||||
return memo
|
||||
} else {
|
||||
return getParents(parentNode, memo.concat([parentNode]))
|
||||
}
|
||||
}
|
||||
|
||||
return [target].concat(getParents(target)).concat([window])
|
||||
}
|
||||
Reference in New Issue
Block a user