2017-04-02 15:12:07 +03:00
|
|
|
import keys from 'ramda/src/keys';
|
2017-01-26 20:05:32 +03:00
|
|
|
|
2015-11-21 16:26:17 +03:00
|
|
|
export default {
|
2017-01-26 20:05:32 +03:00
|
|
|
getMousePosition(event) {
|
2015-09-06 20:29:51 +03:00
|
|
|
return {
|
2016-06-02 20:26:04 +03:00
|
|
|
x: event.pageX - (window.scrollX || window.pageXOffset),
|
2017-01-26 20:05:32 +03:00
|
|
|
y: event.pageY - (window.scrollY || window.pageYOffset),
|
2015-09-06 20:29:51 +03:00
|
|
|
};
|
|
|
|
},
|
|
|
|
|
2017-01-26 20:05:32 +03:00
|
|
|
getTouchPosition(event) {
|
2015-09-06 20:29:51 +03:00
|
|
|
return {
|
2016-06-02 20:26:04 +03:00
|
|
|
x: event.touches[0].pageX - (window.scrollX || window.pageXOffset),
|
2017-01-26 20:05:32 +03:00
|
|
|
y: event.touches[0].pageY - (window.scrollY || window.pageYOffset),
|
2015-09-06 20:29:51 +03:00
|
|
|
};
|
|
|
|
},
|
|
|
|
|
2017-01-26 20:05:32 +03:00
|
|
|
pauseEvent(event) {
|
2015-09-06 20:29:51 +03:00
|
|
|
event.stopPropagation();
|
|
|
|
event.preventDefault();
|
|
|
|
},
|
|
|
|
|
2017-01-26 20:05:32 +03:00
|
|
|
addEventsToDocument(eventMap) {
|
|
|
|
Object.keys(eventMap).forEach((key) => {
|
2015-09-06 20:29:51 +03:00
|
|
|
document.addEventListener(key, eventMap[key], false);
|
2017-01-26 20:05:32 +03:00
|
|
|
});
|
2015-09-06 20:29:51 +03:00
|
|
|
},
|
|
|
|
|
2017-01-26 20:05:32 +03:00
|
|
|
removeEventsFromDocument(eventMap) {
|
|
|
|
Object.keys(eventMap).forEach((key) => {
|
2015-09-06 20:29:51 +03:00
|
|
|
document.removeEventListener(key, eventMap[key], false);
|
2017-01-26 20:05:32 +03:00
|
|
|
});
|
2015-10-17 22:20:15 +03:00
|
|
|
},
|
|
|
|
|
2017-01-26 20:05:32 +03:00
|
|
|
targetIsDescendant(event, parent) {
|
2015-10-17 22:20:15 +03:00
|
|
|
let node = event.target;
|
|
|
|
while (node !== null) {
|
|
|
|
if (node === parent) return true;
|
|
|
|
node = node.parentNode;
|
|
|
|
}
|
|
|
|
return false;
|
2016-04-12 22:41:28 +03:00
|
|
|
},
|
|
|
|
|
2017-01-26 20:05:32 +03:00
|
|
|
addEventListenerOnTransitionEnded(element, fn) {
|
2016-04-12 22:41:28 +03:00
|
|
|
const eventName = transitionEventNamesFor(element);
|
|
|
|
if (!eventName) return false;
|
|
|
|
element.addEventListener(eventName, fn);
|
|
|
|
return true;
|
|
|
|
},
|
|
|
|
|
2017-01-26 20:05:32 +03:00
|
|
|
removeEventListenerOnTransitionEnded(element, fn) {
|
2016-04-12 22:41:28 +03:00
|
|
|
const eventName = transitionEventNamesFor(element);
|
|
|
|
if (!eventName) return false;
|
2016-08-06 15:24:40 +03:00
|
|
|
element.removeEventListener(eventName, fn);
|
2016-04-12 22:41:28 +03:00
|
|
|
return true;
|
2017-01-26 20:05:32 +03:00
|
|
|
},
|
2015-09-05 03:03:32 +03:00
|
|
|
};
|
2016-04-12 22:41:28 +03:00
|
|
|
|
|
|
|
const TRANSITIONS = {
|
2017-01-26 20:05:32 +03:00
|
|
|
transition: 'transitionend',
|
|
|
|
OTransition: 'oTransitionEnd',
|
|
|
|
MozTransition: 'transitionend',
|
|
|
|
WebkitTransition: 'webkitTransitionEnd',
|
2016-04-12 22:41:28 +03:00
|
|
|
};
|
|
|
|
|
2017-01-26 20:05:32 +03:00
|
|
|
function transitionEventNamesFor(element) {
|
2017-04-02 15:12:07 +03:00
|
|
|
return keys(TRANSITIONS).reduce((result, transition) => (
|
2017-01-26 20:05:32 +03:00
|
|
|
!result && (element && element.style[transition] !== undefined)
|
|
|
|
? TRANSITIONS[transition]
|
|
|
|
: result
|
2017-04-02 15:12:07 +03:00
|
|
|
), null);
|
2016-04-12 22:41:28 +03:00
|
|
|
}
|