wonder.js
Version:
318 lines (285 loc) • 19.2 kB
JavaScript
'use strict';
var Most = require("most");
var Curry = require("bs-platform/lib/js/curry.js");
var Caml_option = require("bs-platform/lib/js/caml_option.js");
var Log$WonderLog = require("wonder-log/lib/js/src/Log.js");
var StateDataMain$Wonderjs = require("../../service/state/main/data/StateDataMain.js");
var NameEventService$Wonderjs = require("../../service/record/main/event/NameEventService.js");
var IsDebugMainService$Wonderjs = require("../../service/state/main/state/IsDebugMainService.js");
var StateDataMainService$Wonderjs = require("../../service/state/main/state/StateDataMainService.js");
var ManageEventMainService$Wonderjs = require("../../service/state/main/event/ManageEventMainService.js");
var HandleDomEventMainService$Wonderjs = require("../../service/state/main/event/handle/HandleDomEventMainService.js");
var HandleMouseEventMainService$Wonderjs = require("../../service/state/main/event/handle/HandleMouseEventMainService.js");
var HandleTouchEventMainService$Wonderjs = require("../../service/state/main/event/handle/HandleTouchEventMainService.js");
var CreateCustomEventMainService$Wonderjs = require("../../service/state/main/event/event/CreateCustomEventMainService.js");
var HandleKeyboardEventMainService$Wonderjs = require("../../service/state/main/event/handle/HandleKeyboardEventMainService.js");
var HandlePointDomEventMainService$Wonderjs = require("../../service/state/main/event/handle/HandlePointDomEventMainService.js");
function _getBody(param) {
return document.body;
}
function _fromPointDomEvent(eventName, state) {
return Most.fromEvent(eventName, document.body, false);
}
function _fromMobilePointDomEvent(eventName) {
return Most.fromEvent(eventName, document.body, {
passive: false
});
}
function _fromTouchMoveDomEventAndPreventnDefault(state) {
return Most.tap(HandlePointDomEventMainService$Wonderjs.preventDefault, _fromMobilePointDomEvent("touchmove"));
}
function _fromKeyboardDomEvent(eventName, state) {
return Most.fromEvent(eventName, document.body, false);
}
function _convertMouseEventToPointEvent(eventName, param) {
return /* record */[
/* name */eventName,
/* location */param[/* location */1],
/* locationInView */param[/* locationInView */2],
/* button */param[/* button */3],
/* wheel */param[/* wheel */4],
/* movementDelta */param[/* movementDelta */5],
/* event */param[/* event */6]
];
}
function _bindDomEventToTriggerPointEvent(param, param$1, state) {
var convertDomEventToPointEventFunc = param$1[1];
var pointEventName = param[2];
var customEventName = param[1];
return Curry._4(param$1[0], param[0], (function (mouseEvent, state) {
return ManageEventMainService$Wonderjs.triggerCustomGlobalEvent(CreateCustomEventMainService$Wonderjs.create(customEventName, Caml_option.some(Curry._2(convertDomEventToPointEventFunc, pointEventName, mouseEvent))), state)[0];
}), state, /* () */0);
}
function _bindMouseEventToTriggerPointEvent(mouseEventName, customEventName, pointEventName, state) {
return _bindDomEventToTriggerPointEvent(/* tuple */[
mouseEventName,
customEventName,
pointEventName
], /* tuple */[
(function (param) {
var func = function (param$1, param$2, param$3, param$4) {
return ManageEventMainService$Wonderjs.onMouseEvent(param, param$1, param$2, param$3, param$4);
};
return (function (param) {
var func$1 = Curry._1(func, param);
return (function (param) {
return Curry._2(func$1, param, 0);
});
});
}),
_convertMouseEventToPointEvent
], state);
}
function _convertTouchEventToPointEvent(eventName, param) {
return /* record */[
/* name */eventName,
/* location */param[/* location */1],
/* locationInView */param[/* locationInView */2],
/* button */undefined,
/* wheel */undefined,
/* movementDelta */param[/* movementDelta */4],
/* event */param[/* event */5]
];
}
function _bindTouchEventToTriggerPointEvent(touchEventName, customEventName, pointEventName, state) {
return _bindDomEventToTriggerPointEvent(/* tuple */[
touchEventName,
customEventName,
pointEventName
], /* tuple */[
(function (param) {
var func = function (param$1, param$2, param$3, param$4) {
return ManageEventMainService$Wonderjs.onTouchEvent(param, param$1, param$2, param$3, param$4);
};
return (function (param) {
var func$1 = Curry._1(func, param);
return (function (param) {
return Curry._2(func$1, param, 0);
});
});
}),
_convertTouchEventToPointEvent
], state);
}
function bindDomEventToTriggerPointEvent(state) {
var browser = state[/* browserDetectRecord */42][/* browser */0];
if (browser >= 2) {
if (browser >= 4) {
return Log$WonderLog.fatal(Log$WonderLog.buildFatalMessage("bindDomEventToTriggerPointEvent", "unknown browser", "", "", "browser:" + (String(browser) + "")));
} else {
return _bindTouchEventToTriggerPointEvent(/* TouchDragDrop */18, NameEventService$Wonderjs.getPointDragDropEventName(/* () */0), /* PointDragDrop */7, _bindTouchEventToTriggerPointEvent(/* TouchDragOver */17, NameEventService$Wonderjs.getPointDragOverEventName(/* () */0), /* PointDragOver */6, _bindTouchEventToTriggerPointEvent(/* TouchDragStart */16, NameEventService$Wonderjs.getPointDragStartEventName(/* () */0), /* PointDragStart */5, _bindTouchEventToTriggerPointEvent(/* TouchMove */14, NameEventService$Wonderjs.getPointMoveEventName(/* () */0), /* PointMove */3, _bindTouchEventToTriggerPointEvent(/* TouchStart */15, NameEventService$Wonderjs.getPointDownEventName(/* () */0), /* PointDown */1, _bindTouchEventToTriggerPointEvent(/* TouchEnd */13, NameEventService$Wonderjs.getPointUpEventName(/* () */0), /* PointUp */2, _bindTouchEventToTriggerPointEvent(/* TouchTap */12, NameEventService$Wonderjs.getPointTapEventName(/* () */0), /* PointTap */0, state)))))));
}
} else {
return _bindMouseEventToTriggerPointEvent(/* MouseDragDrop */8, NameEventService$Wonderjs.getPointDragDropEventName(/* () */0), /* PointDragDrop */7, _bindMouseEventToTriggerPointEvent(/* MouseDragOver */7, NameEventService$Wonderjs.getPointDragOverEventName(/* () */0), /* PointDragOver */6, _bindMouseEventToTriggerPointEvent(/* MouseDragStart */6, NameEventService$Wonderjs.getPointDragStartEventName(/* () */0), /* PointDragStart */5, _bindMouseEventToTriggerPointEvent(/* MouseMove */4, NameEventService$Wonderjs.getPointMoveEventName(/* () */0), /* PointMove */3, _bindMouseEventToTriggerPointEvent(/* MouseWheel */5, NameEventService$Wonderjs.getPointScaleEventName(/* () */0), /* PointScale */4, _bindMouseEventToTriggerPointEvent(/* MouseDown */2, NameEventService$Wonderjs.getPointDownEventName(/* () */0), /* PointDown */1, _bindMouseEventToTriggerPointEvent(/* MouseUp */3, NameEventService$Wonderjs.getPointUpEventName(/* () */0), /* PointUp */2, _bindMouseEventToTriggerPointEvent(/* Click */1, NameEventService$Wonderjs.getPointTapEventName(/* () */0), /* PointTap */0, state))))))));
}
}
function _preventContextMenuEvent($$event) {
HandleDomEventMainService$Wonderjs.preventDefault($$event);
return /* () */0;
}
function _execMouseEventHandle(eventName, $$event) {
var state = StateDataMainService$Wonderjs.unsafeGetState(StateDataMain$Wonderjs.stateData);
StateDataMainService$Wonderjs.setState(StateDataMain$Wonderjs.stateData, HandleMouseEventMainService$Wonderjs.execEventHandle(HandleMouseEventMainService$Wonderjs.convertMouseDomEventToMouseEvent(eventName, $$event, state), state));
return /* () */0;
}
function _execMouseChangePositionEventHandle(mouseEventName, $$event, setPositionFunc) {
var state = StateDataMainService$Wonderjs.unsafeGetState(StateDataMain$Wonderjs.stateData);
var mouseEvent = HandleMouseEventMainService$Wonderjs.convertMouseDomEventToMouseEvent(mouseEventName, $$event, state);
StateDataMainService$Wonderjs.setState(StateDataMain$Wonderjs.stateData, Curry._2(setPositionFunc, mouseEvent, HandleMouseEventMainService$Wonderjs.execEventHandle(mouseEvent, state)));
return /* () */0;
}
function _execMouseMoveEventHandle(mouseEventName, $$event) {
return _execMouseChangePositionEventHandle(mouseEventName, $$event, HandleMouseEventMainService$Wonderjs.setLastXYWhenMouseMove);
}
function _execMouseDragingEventHandle(mouseEventName, $$event) {
return _execMouseChangePositionEventHandle(mouseEventName, $$event, HandleMouseEventMainService$Wonderjs.setLastXYByLocation);
}
function _execMouseDragStartEventHandle($$event) {
var state = StateDataMainService$Wonderjs.unsafeGetState(StateDataMain$Wonderjs.stateData);
StateDataMainService$Wonderjs.setState(StateDataMain$Wonderjs.stateData, HandleMouseEventMainService$Wonderjs.setLastXY(undefined, undefined, HandleMouseEventMainService$Wonderjs.setIsDrag(true, HandleMouseEventMainService$Wonderjs.execEventHandle(HandleMouseEventMainService$Wonderjs.convertMouseDomEventToMouseEvent(/* MouseDragStart */6, $$event, state), state))));
return /* () */0;
}
function _execMouseDragDropEventHandle($$event) {
var state = StateDataMainService$Wonderjs.unsafeGetState(StateDataMain$Wonderjs.stateData);
StateDataMainService$Wonderjs.setState(StateDataMain$Wonderjs.stateData, HandleMouseEventMainService$Wonderjs.setIsDrag(false, HandleMouseEventMainService$Wonderjs.execEventHandle(HandleMouseEventMainService$Wonderjs.convertMouseDomEventToMouseEvent(/* MouseDragDrop */8, $$event, state), state)));
return /* () */0;
}
function _execTouchEventHandle(touchEventName, $$event) {
StateDataMainService$Wonderjs.setState(StateDataMain$Wonderjs.stateData, HandleTouchEventMainService$Wonderjs.execEventHandle(touchEventName, $$event, StateDataMainService$Wonderjs.unsafeGetState(StateDataMain$Wonderjs.stateData)));
return /* () */0;
}
function _execTouchChangePositionEventHandle(touchEventName, $$event, setPositonFunc) {
StateDataMainService$Wonderjs.setState(StateDataMain$Wonderjs.stateData, Curry._3(setPositonFunc, touchEventName, $$event, HandleTouchEventMainService$Wonderjs.execEventHandle(touchEventName, $$event, StateDataMainService$Wonderjs.unsafeGetState(StateDataMain$Wonderjs.stateData))));
return /* () */0;
}
function _execTouchMoveEventHandle(touchEventName, $$event) {
return _execTouchChangePositionEventHandle(touchEventName, $$event, HandleTouchEventMainService$Wonderjs.setLastXYWhenTouchMove);
}
function _execTouchDragingEventHandle(touchEventName, $$event) {
return _execTouchChangePositionEventHandle(touchEventName, $$event, HandleTouchEventMainService$Wonderjs.setLastXYByLocation);
}
function _execTouchDragStartEventHandle($$event) {
StateDataMainService$Wonderjs.setState(StateDataMain$Wonderjs.stateData, HandleTouchEventMainService$Wonderjs.setLastXY(undefined, undefined, HandleTouchEventMainService$Wonderjs.setIsDrag(true, HandleTouchEventMainService$Wonderjs.execEventHandle(/* TouchDragStart */16, $$event, StateDataMainService$Wonderjs.unsafeGetState(StateDataMain$Wonderjs.stateData)))));
return /* () */0;
}
function _execTouchDragDropEventHandle($$event) {
StateDataMainService$Wonderjs.setState(StateDataMain$Wonderjs.stateData, HandleTouchEventMainService$Wonderjs.setIsDrag(false, HandleTouchEventMainService$Wonderjs.execEventHandle(/* TouchDragDrop */18, $$event, StateDataMainService$Wonderjs.unsafeGetState(StateDataMain$Wonderjs.stateData))));
return /* () */0;
}
function _execKeyboardEventHandle(keyboardEventName, $$event) {
StateDataMainService$Wonderjs.setState(StateDataMain$Wonderjs.stateData, HandleKeyboardEventMainService$Wonderjs.execEventHandle(keyboardEventName, $$event, StateDataMainService$Wonderjs.unsafeGetState(StateDataMain$Wonderjs.stateData)));
return /* () */0;
}
function _fromPCDomEventArr(state) {
return /* array */[
Most.tap(_preventContextMenuEvent, Most.fromEvent("contextmenu", document.body, false)),
Most.tap((function ($$event) {
return _execMouseEventHandle(/* Click */1, $$event);
}), _fromPointDomEvent("click", state)),
Most.tap((function ($$event) {
return _execMouseEventHandle(/* MouseDown */2, $$event);
}), _fromPointDomEvent("mousedown", state)),
Most.tap((function ($$event) {
return _execMouseEventHandle(/* MouseUp */3, $$event);
}), _fromPointDomEvent("mouseup", state)),
Most.tap((function ($$event) {
return _execMouseChangePositionEventHandle(/* MouseMove */4, $$event, HandleMouseEventMainService$Wonderjs.setLastXYWhenMouseMove);
}), _fromPointDomEvent("mousemove", state)),
Most.tap((function ($$event) {
return _execMouseEventHandle(/* MouseWheel */5, $$event);
}), _fromPointDomEvent("mousewheel", state)),
Most.tap((function ($$event) {
return _execMouseChangePositionEventHandle(/* MouseDragOver */7, $$event, HandleMouseEventMainService$Wonderjs.setLastXYByLocation);
}), Most.flatMap((function ($$event) {
return Most.until(Most.tap(_execMouseDragDropEventHandle, _fromPointDomEvent("mouseup", state)), Most.skip(2, _fromPointDomEvent("mousemove", state)));
}), Most.tap(_execMouseDragStartEventHandle, _fromPointDomEvent("mousedown", state)))),
Most.tap((function ($$event) {
return _execKeyboardEventHandle(/* KeyUp */9, $$event);
}), _fromKeyboardDomEvent("keyup", state)),
Most.tap((function ($$event) {
return _execKeyboardEventHandle(/* KeyDown */10, $$event);
}), _fromKeyboardDomEvent("keydown", state)),
Most.tap((function ($$event) {
return _execKeyboardEventHandle(/* KeyPress */11, $$event);
}), _fromKeyboardDomEvent("keypress", state))
];
}
function _fromMobileDomEventArr(state) {
return /* array */[
Most.tap((function ($$event) {
return _execTouchEventHandle(/* TouchTap */12, $$event);
}), Most.since(_fromMobilePointDomEvent("touchstart"), _fromMobilePointDomEvent("touchend"))),
Most.tap((function ($$event) {
return _execTouchEventHandle(/* TouchEnd */13, $$event);
}), _fromMobilePointDomEvent("touchend")),
Most.tap((function ($$event) {
return _execTouchEventHandle(/* TouchStart */15, $$event);
}), _fromMobilePointDomEvent("touchstart")),
Most.tap((function ($$event) {
return _execTouchChangePositionEventHandle(/* TouchMove */14, $$event, HandleTouchEventMainService$Wonderjs.setLastXYWhenTouchMove);
}), _fromTouchMoveDomEventAndPreventnDefault(state)),
Most.tap((function ($$event) {
return _execTouchChangePositionEventHandle(/* TouchDragOver */17, $$event, HandleTouchEventMainService$Wonderjs.setLastXYByLocation);
}), Most.flatMap((function ($$event) {
return Most.until(Most.tap(_execTouchDragDropEventHandle, _fromMobilePointDomEvent("touchend")), _fromTouchMoveDomEventAndPreventnDefault(state));
}), Most.tap(_execTouchDragStartEventHandle, _fromMobilePointDomEvent("touchstart"))))
];
}
function fromDomEvent(state) {
var browser = state[/* browserDetectRecord */42][/* browser */0];
return Most.mergeArray(browser >= 2 ? (
browser >= 4 ? Log$WonderLog.fatal(Log$WonderLog.buildFatalMessage("fromDomEvent", "unknown browser", "", "", "browser:" + (String(browser) + ""))) : _fromMobileDomEventArr(state)
) : _fromPCDomEventArr(state));
}
function handleDomEventStreamError(e) {
var message = e.message;
var stack = e.stack;
var partial_arg = "message:" + (String(message) + ("\nstack:" + (String(stack) + "")));
var partial_arg$1 = "from dom event stream error";
return Log$WonderLog.debug((function (param) {
return Log$WonderLog.buildDebugMessage(partial_arg$1, partial_arg, param);
}), IsDebugMainService$Wonderjs.getIsDebug(StateDataMain$Wonderjs.stateData));
}
function initEvent(state) {
var domEventStreamSubscription = fromDomEvent(state).subscribe({
next: (function (param) {
return /* () */0;
}),
error: handleDomEventStreamError,
complete: (function (param) {
return /* () */0;
})
});
return bindDomEventToTriggerPointEvent(ManageEventMainService$Wonderjs.setDomEventStreamSubscription(domEventStreamSubscription, state));
}
exports._getBody = _getBody;
exports._fromPointDomEvent = _fromPointDomEvent;
exports._fromMobilePointDomEvent = _fromMobilePointDomEvent;
exports._fromTouchMoveDomEventAndPreventnDefault = _fromTouchMoveDomEventAndPreventnDefault;
exports._fromKeyboardDomEvent = _fromKeyboardDomEvent;
exports._convertMouseEventToPointEvent = _convertMouseEventToPointEvent;
exports._bindDomEventToTriggerPointEvent = _bindDomEventToTriggerPointEvent;
exports._bindMouseEventToTriggerPointEvent = _bindMouseEventToTriggerPointEvent;
exports._convertTouchEventToPointEvent = _convertTouchEventToPointEvent;
exports._bindTouchEventToTriggerPointEvent = _bindTouchEventToTriggerPointEvent;
exports.bindDomEventToTriggerPointEvent = bindDomEventToTriggerPointEvent;
exports._preventContextMenuEvent = _preventContextMenuEvent;
exports._execMouseEventHandle = _execMouseEventHandle;
exports._execMouseChangePositionEventHandle = _execMouseChangePositionEventHandle;
exports._execMouseMoveEventHandle = _execMouseMoveEventHandle;
exports._execMouseDragingEventHandle = _execMouseDragingEventHandle;
exports._execMouseDragStartEventHandle = _execMouseDragStartEventHandle;
exports._execMouseDragDropEventHandle = _execMouseDragDropEventHandle;
exports._execTouchEventHandle = _execTouchEventHandle;
exports._execTouchChangePositionEventHandle = _execTouchChangePositionEventHandle;
exports._execTouchMoveEventHandle = _execTouchMoveEventHandle;
exports._execTouchDragingEventHandle = _execTouchDragingEventHandle;
exports._execTouchDragStartEventHandle = _execTouchDragStartEventHandle;
exports._execTouchDragDropEventHandle = _execTouchDragDropEventHandle;
exports._execKeyboardEventHandle = _execKeyboardEventHandle;
exports._fromPCDomEventArr = _fromPCDomEventArr;
exports._fromMobileDomEventArr = _fromMobileDomEventArr;
exports.fromDomEvent = fromDomEvent;
exports.handleDomEventStreamError = handleDomEventStreamError;
exports.initEvent = initEvent;
/* most Not a pure module */