Skip to content

Commit 035b9b9

Browse files
maartenbreddelsmariobuikhuizen
authored andcommitted
feat: support serialization of more event data
useful for getting key event data, mouse event data, etc.
1 parent 7b26688 commit 035b9b9

File tree

1 file changed

+24
-19
lines changed

1 file changed

+24
-19
lines changed

js/src/VueRenderer.js

Lines changed: 24 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -51,29 +51,34 @@ export function createObjectForNestedModel(model, parentView) {
5151
};
5252
}
5353

54+
// based on https://stackoverflow.com/a/58416333/5397207
55+
function pickSerializable(object, depth=0, max_depth=2) {
56+
// change max_depth to see more levels, for a touch event, 2 is good
57+
if (depth > max_depth)
58+
return 'Object';
59+
60+
const obj = {};
61+
for (let key in object) {
62+
let value = object[key];
63+
if (value instanceof Node)
64+
// specify which properties you want to see from the node
65+
value = {id: value.id};
66+
else if (value instanceof Window)
67+
value = 'Window';
68+
else if (value instanceof Object)
69+
value = pickSerializable(value, depth+1, max_depth);
70+
71+
obj[key] = value;
72+
}
73+
74+
return obj;
75+
}
76+
5477
export function eventToObject(event) {
5578
if (event == null) {
5679
return event;
5780
}
58-
let props;
59-
switch (event.constructor) {
60-
case MouseEvent:
61-
props = ['altKey', 'ctrlKey', 'metaKey', 'shiftKey', 'offsetX', 'offsetY', 'clientX', 'clientY', 'pageX', 'pageY', 'screenX', 'screenY', 'shiftKey', 'x', 'y'];
62-
break;
63-
case WheelEvent:
64-
props = ['altKey', 'ctrlKey', 'metaKey', 'shiftKey', 'offsetX', 'offsetY', 'clientX', 'clientY', 'pageX', 'pageY', 'screenX', 'screenY', 'shiftKey', 'x', 'y', 'wheelDelta', 'wheelDeltaX', 'wheelDeltaY'];
65-
break;
66-
// TODO: More events
67-
default:
68-
return event;
69-
}
70-
71-
return props.reduce(
72-
(result, key) => {
73-
result[key] = event[key]; // eslint-disable-line no-param-reassign
74-
return result;
75-
}, {},
76-
);
81+
return pickSerializable(event);
7782
}
7883

7984
export function vueRender(createElement, model, parentView, slotScopes) {

0 commit comments

Comments
 (0)