wonder.js
Version:
202 lines (184 loc) • 6.92 kB
JavaScript
;
var Caml_array = require("bs-platform/lib/js/caml_array.js");
var Caml_int32 = require("bs-platform/lib/js/caml_int32.js");
var Log$WonderLog = require("wonder-log/lib/js/src/Log.js");
var MouseEventService$Wonderjs = require("../../../../record/main/event/MouseEventService.js");
var ArrayService$WonderCommonlib = require("wonder-commonlib/lib/js/src/ArrayService.js");
var RecordAllBrowserDetectService$Wonderjs = require("../../../../record/all/browserDetect/RecordAllBrowserDetectService.js");
var HandlePointDomEventMainService$Wonderjs = require("./HandlePointDomEventMainService.js");
var MutableSparseMapService$WonderCommonlib = require("wonder-commonlib/lib/js/src/MutableSparseMapService.js");
function getLocation(mouseDomEvent, param) {
var browser = param[/* browserDetectRecord */42][/* browser */0];
if (browser >= 2) {
return RecordAllBrowserDetectService$Wonderjs.fatalUnknownBrowser("getLocation", browser);
} else {
return /* tuple */[
mouseDomEvent.pageX,
mouseDomEvent.pageY
];
}
}
function getLocationInView(mouseDomEvent, state) {
return HandlePointDomEventMainService$Wonderjs.getLocationInView(mouseDomEvent, getLocation, state);
}
function getButton(mouseDomEvent, state) {
var browser = state[/* browserDetectRecord */42][/* browser */0];
if (browser >= 2) {
return RecordAllBrowserDetectService$Wonderjs.fatalUnknownBrowser("getButton", browser);
} else {
var button = mouseDomEvent.which;
switch (button) {
case 0 :
return /* NoButton */0;
case 1 :
return /* Left */1;
case 2 :
return /* Center */3;
case 3 :
return /* Right */2;
default:
return Log$WonderLog.fatal(Log$WonderLog.buildFatalMessage("getButton", "not support multi mouse button", "", "", "button: " + (String(button) + "")));
}
}
}
function _getFromWheelDelta(mouseDomEvent) {
var match = mouseDomEvent.wheelDelta;
if (match == null) {
return 0;
} else {
return match / 120 | 0;
}
}
function getWheel(mouseDomEvent) {
var match = mouseDomEvent.detail;
if (!(match == null) && match !== 0) {
return Caml_int32.imul(-1, match);
} else {
return _getFromWheelDelta(mouseDomEvent);
}
}
function _isPointerLocked (){
return !!(
document.pointerLockElement
|| document.mozPointerLockElement
|| document.webkitPointerLockElement
);
};
function _getMovementDeltaWhenPointerLocked(mouseDomEvent) {
var match = mouseDomEvent.movementX;
var tmp;
if (match == null) {
var match$1 = mouseDomEvent.webkitMovementX;
if (match$1 == null) {
var match$2 = mouseDomEvent.mozMovementX;
tmp = (match$2 == null) ? 0 : match$2;
} else {
tmp = match$1;
}
} else {
tmp = match;
}
var match$3 = mouseDomEvent.movementY;
var tmp$1;
if (match$3 == null) {
var match$4 = mouseDomEvent.webkitMovementY;
if (match$4 == null) {
var match$5 = mouseDomEvent.mozMovementY;
tmp$1 = (match$5 == null) ? 0 : match$5;
} else {
tmp$1 = match$4;
}
} else {
tmp$1 = match$3;
}
return /* tuple */[
tmp,
tmp$1
];
}
function getMovementDelta(mouseDomEvent, state) {
var match = _isPointerLocked();
if (match) {
return _getMovementDeltaWhenPointerLocked(mouseDomEvent);
} else {
return HandlePointDomEventMainService$Wonderjs.getMovementDelta(getLocation(mouseDomEvent, state), MouseEventService$Wonderjs.getLastXY(state[/* eventRecord */43]), state);
}
}
function convertMouseDomEventToMouseEvent(eventName, mouseDomEvent, state) {
return /* record */[
/* name */eventName,
/* location */getLocation(mouseDomEvent, state),
/* locationInView */getLocationInView(mouseDomEvent, state),
/* button */getButton(mouseDomEvent, state),
/* wheel */getWheel(mouseDomEvent),
/* movementDelta */getMovementDelta(mouseDomEvent, state),
/* event */mouseDomEvent
];
}
function execEventHandle(mouseEvent, state) {
var match = MutableSparseMapService$WonderCommonlib.get(mouseEvent[/* name */0], state[/* eventRecord */43][/* mouseDomEventDataArrMap */1]);
if (match !== undefined) {
return ArrayService$WonderCommonlib.reduceOneParam((function (state, param) {
return param[/* handleFunc */1](mouseEvent, state);
}), state, match);
} else {
return state;
}
}
function setLastXY(lastX, lastY, state) {
var newrecord = Caml_array.caml_array_dup(state);
newrecord[/* eventRecord */43] = MouseEventService$Wonderjs.setLastXY(lastX, lastY, state[/* eventRecord */43]);
return newrecord;
}
function setLastXYByLocation(mouseEvent, state) {
var $$location = mouseEvent[/* location */1];
return setLastXY($$location[0], $$location[1], state);
}
function getIsDrag(state) {
return state[/* eventRecord */43][/* mouseEventData */6][/* isDrag */2];
}
function setIsDrag(isDrag, state) {
var eventRecord = state[/* eventRecord */43];
var newrecord = Caml_array.caml_array_dup(state);
var init = eventRecord[/* mouseEventData */6];
newrecord[/* eventRecord */43] = /* record */[
/* domEventStreamSubscription */eventRecord[/* domEventStreamSubscription */0],
/* mouseDomEventDataArrMap */eventRecord[/* mouseDomEventDataArrMap */1],
/* keyboardDomEventDataArrMap */eventRecord[/* keyboardDomEventDataArrMap */2],
/* touchDomEventDataArrMap */eventRecord[/* touchDomEventDataArrMap */3],
/* customGlobalEventArrMap */eventRecord[/* customGlobalEventArrMap */4],
/* customGameObjectEventArrMap */eventRecord[/* customGameObjectEventArrMap */5],
/* mouseEventData : record */[
/* lastX */init[/* lastX */0],
/* lastY */init[/* lastY */1],
/* isDrag */isDrag
],
/* keyboardEventData */eventRecord[/* keyboardEventData */7],
/* touchEventData */eventRecord[/* touchEventData */8]
];
return newrecord;
}
function setLastXYWhenMouseMove(mouseEvent, state) {
var match = getIsDrag(state);
if (match) {
return state;
} else {
return setLastXYByLocation(mouseEvent, state);
}
}
exports.getLocation = getLocation;
exports.getLocationInView = getLocationInView;
exports.getButton = getButton;
exports._getFromWheelDelta = _getFromWheelDelta;
exports.getWheel = getWheel;
exports._isPointerLocked = _isPointerLocked;
exports._getMovementDeltaWhenPointerLocked = _getMovementDeltaWhenPointerLocked;
exports.getMovementDelta = getMovementDelta;
exports.convertMouseDomEventToMouseEvent = convertMouseDomEventToMouseEvent;
exports.execEventHandle = execEventHandle;
exports.setLastXY = setLastXY;
exports.setLastXYByLocation = setLastXYByLocation;
exports.getIsDrag = getIsDrag;
exports.setIsDrag = setIsDrag;
exports.setLastXYWhenMouseMove = setLastXYWhenMouseMove;
/* Log-WonderLog Not a pure module */