@reactpy/client 1.1.0 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components.d.ts.map +1 -1
- package/dist/components.js +282 -14
- package/dist/components.js.map +1 -1
- package/dist/handler.d.ts +19 -0
- package/dist/handler.d.ts.map +1 -0
- package/dist/handler.js +19 -0
- package/dist/handler.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/mount.d.ts.map +1 -1
- package/dist/mount.js +2 -2
- package/dist/mount.js.map +1 -1
- package/dist/types.d.ts +3 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/vdom.d.ts +1 -1
- package/dist/vdom.d.ts.map +1 -1
- package/dist/vdom.js +35 -3
- package/dist/vdom.js.map +1 -1
- package/dist/websocket.d.ts.map +1 -1
- package/dist/websocket.js +13 -0
- package/dist/websocket.js.map +1 -1
- package/package.json +1 -1
- package/src/components.tsx +317 -14
- package/src/handler.ts +33 -0
- package/src/index.ts +1 -0
- package/src/mount.tsx +2 -5
- package/src/types.ts +3 -1
- package/src/vdom.tsx +62 -12
- package/src/websocket.ts +14 -0
package/dist/components.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"components.d.ts","sourceRoot":"","sources":["../src/components.tsx"],"names":[],"mappings":"AAEA,OAAO,EAIL,KAAK,GAAG,EAET,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"components.d.ts","sourceRoot":"","sources":["../src/components.tsx"],"names":[],"mappings":"AAEA,OAAO,EAIL,KAAK,GAAG,EAET,MAAM,QAAQ,CAAC;AAShB,OAAO,KAAK,EAGV,WAAW,EACZ,MAAM,SAAS,CAAC;AAEjB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAmH9C,wBAAgB,MAAM,CAAC,KAAK,EAAE;IAAE,MAAM,EAAE,aAAa,CAAA;CAAE,GAAG,GAAG,CAAC,OAAO,CAsBpE;AAED,wBAAgB,OAAO,CAAC,EAAE,KAAK,EAAE,EAAE;IAAE,KAAK,EAAE,WAAW,CAAA;CAAE,GAAG,GAAG,CAAC,OAAO,GAAG,IAAI,CAoB7E"}
|
package/dist/components.js
CHANGED
|
@@ -2,8 +2,105 @@ import { jsx as _jsx } from "preact/jsx-runtime";
|
|
|
2
2
|
import { set as setJsonPointer } from "json-pointer";
|
|
3
3
|
import { createContext, createElement, Fragment, } from "preact";
|
|
4
4
|
import { useContext, useEffect, useRef, useState } from "preact/hooks";
|
|
5
|
+
import { HANDLER_DEBOUNCE, HANDLER_MARKER, HANDLER_THROTTLE, isValidDebounce, } from "./handler";
|
|
5
6
|
import { createAttributes, createChildren, loadImportSource } from "./vdom";
|
|
6
7
|
const ClientContext = createContext(null);
|
|
8
|
+
/**
|
|
9
|
+
* Wrap ``handler`` so its outgoing call is throttled to at most once per
|
|
10
|
+
* ``intervalMs`` milliseconds. Subsequent calls inside the window are
|
|
11
|
+
* collapsed and the trailing call (with the most recent arguments) fires
|
|
12
|
+
* once the window expires.
|
|
13
|
+
*
|
|
14
|
+
* Returns the original handler unchanged when ``intervalMs`` is missing or
|
|
15
|
+
* invalid.
|
|
16
|
+
*/
|
|
17
|
+
function throttleHandler(handler, intervalMs) {
|
|
18
|
+
if (!isValidDebounce(intervalMs)) {
|
|
19
|
+
return handler;
|
|
20
|
+
}
|
|
21
|
+
let pendingArgs = null;
|
|
22
|
+
let timer = null;
|
|
23
|
+
let lastFireTime = 0;
|
|
24
|
+
const wrapped = function (...args) {
|
|
25
|
+
const now = Date.now();
|
|
26
|
+
const elapsed = now - lastFireTime;
|
|
27
|
+
if (elapsed >= intervalMs) {
|
|
28
|
+
// Leading edge: fire immediately, then start a cooldown.
|
|
29
|
+
lastFireTime = now;
|
|
30
|
+
handler(...args);
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
// Trailing edge: remember the latest args and schedule a fire at the
|
|
34
|
+
// end of the cooldown so no event is silently dropped.
|
|
35
|
+
pendingArgs = args;
|
|
36
|
+
if (timer === null) {
|
|
37
|
+
timer = window.setTimeout(() => {
|
|
38
|
+
timer = null;
|
|
39
|
+
if (pendingArgs !== null) {
|
|
40
|
+
const callArgs = pendingArgs;
|
|
41
|
+
pendingArgs = null;
|
|
42
|
+
lastFireTime = Date.now();
|
|
43
|
+
handler(...callArgs);
|
|
44
|
+
}
|
|
45
|
+
}, Math.max(0, intervalMs - elapsed));
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
// Preserve the tag markers so downstream code can still introspect the
|
|
49
|
+
// wrapped function.
|
|
50
|
+
wrapped[HANDLER_MARKER] = true;
|
|
51
|
+
const debounce = handler[HANDLER_DEBOUNCE];
|
|
52
|
+
if (typeof debounce === "number") {
|
|
53
|
+
wrapped[HANDLER_DEBOUNCE] = debounce;
|
|
54
|
+
}
|
|
55
|
+
return wrapped;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Wrap ``handler`` so its outgoing call is debounced by
|
|
59
|
+
* ``delayMs`` milliseconds. The first call schedules a fire after
|
|
60
|
+
* the delay; subsequent calls inside the window reset the timer and
|
|
61
|
+
* pass their arguments to the trailing call. Only one call lands
|
|
62
|
+
* on the wrapped handler per debounce window.
|
|
63
|
+
*
|
|
64
|
+
* Returns the original handler unchanged when ``delayMs`` is missing
|
|
65
|
+
* or invalid, so callers can pass a 0 / negative value to opt out.
|
|
66
|
+
*
|
|
67
|
+
* Unlike ``throttleHandler`` (which fires on the leading edge),
|
|
68
|
+
* this strictly trailing-edge debounce is the right semantics for
|
|
69
|
+
* text inputs: the server only sees the final state after the user
|
|
70
|
+
* pauses typing, which is exactly when the reconcile can safely apply
|
|
71
|
+
* a server-side transformation (normalisation, validation, etc.).
|
|
72
|
+
*/
|
|
73
|
+
function debounceHandler(handler, delayMs) {
|
|
74
|
+
if (!isValidDebounce(delayMs) || delayMs === 0) {
|
|
75
|
+
return handler;
|
|
76
|
+
}
|
|
77
|
+
let timer = null;
|
|
78
|
+
let pendingArgs = null;
|
|
79
|
+
const wrapped = function (...args) {
|
|
80
|
+
pendingArgs = args;
|
|
81
|
+
if (timer !== null) {
|
|
82
|
+
window.clearTimeout(timer);
|
|
83
|
+
}
|
|
84
|
+
timer = window.setTimeout(() => {
|
|
85
|
+
timer = null;
|
|
86
|
+
if (pendingArgs !== null) {
|
|
87
|
+
const callArgs = pendingArgs;
|
|
88
|
+
pendingArgs = null;
|
|
89
|
+
handler(...callArgs);
|
|
90
|
+
}
|
|
91
|
+
}, delayMs);
|
|
92
|
+
};
|
|
93
|
+
// Preserve the tag markers so downstream code can still introspect
|
|
94
|
+
// the wrapped function.
|
|
95
|
+
wrapped[HANDLER_MARKER] = true;
|
|
96
|
+
if (typeof handler[HANDLER_THROTTLE] === "number") {
|
|
97
|
+
wrapped[HANDLER_THROTTLE] = handler[HANDLER_THROTTLE];
|
|
98
|
+
}
|
|
99
|
+
if (typeof handler[HANDLER_DEBOUNCE] === "number") {
|
|
100
|
+
wrapped[HANDLER_DEBOUNCE] = handler[HANDLER_DEBOUNCE];
|
|
101
|
+
}
|
|
102
|
+
return wrapped;
|
|
103
|
+
}
|
|
7
104
|
export function Layout(props) {
|
|
8
105
|
const currentModel = useState({ tagName: "" })[0];
|
|
9
106
|
const forceUpdate = useForceUpdate();
|
|
@@ -42,36 +139,207 @@ export function Element({ model }) {
|
|
|
42
139
|
}
|
|
43
140
|
function StandardElement({ model }) {
|
|
44
141
|
const client = useContext(ClientContext);
|
|
142
|
+
const attrs = createAttributes(model, client);
|
|
143
|
+
// Apply the throttle wrapper to tagged handlers. ``throttle`` works on
|
|
144
|
+
// every element; ``debounce`` is intentionally only applied by
|
|
145
|
+
// ``UserInputElement`` (the only place where coalescing keystrokes
|
|
146
|
+
// is meaningful — click handlers don't benefit from trailing-edge
|
|
147
|
+
// coalescing, and applying debounce here would just delay
|
|
148
|
+
// non-input events for no reason).
|
|
149
|
+
for (const [name, prop] of Object.entries(attrs)) {
|
|
150
|
+
if (typeof prop !== "function") {
|
|
151
|
+
continue;
|
|
152
|
+
}
|
|
153
|
+
const handler = prop;
|
|
154
|
+
if (!handler[HANDLER_MARKER]) {
|
|
155
|
+
continue;
|
|
156
|
+
}
|
|
157
|
+
const throttle = handler[HANDLER_THROTTLE];
|
|
158
|
+
if (isValidDebounce(throttle)) {
|
|
159
|
+
attrs[name] = throttleHandler(handler, throttle);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
45
162
|
// Use createElement here to avoid warning about variable numbers of children not
|
|
46
163
|
// having keys. Warning about this must now be the responsibility of the client
|
|
47
164
|
// providing the models instead of the client rendering them.
|
|
48
|
-
return createElement(model.tagName === "" ? Fragment : model.tagName,
|
|
165
|
+
return createElement(model.tagName === "" ? Fragment : model.tagName, attrs, ...createChildren(model, (child) => {
|
|
49
166
|
return _jsx(Element, { model: child }, child.attributes?.key);
|
|
50
167
|
}));
|
|
51
168
|
}
|
|
52
169
|
function UserInputElement({ model }) {
|
|
53
170
|
const client = useContext(ClientContext);
|
|
54
171
|
const props = createAttributes(model, client);
|
|
55
|
-
|
|
172
|
+
// ``_reactpy_ack_seq`` is set by the server to the highest sequence
|
|
173
|
+
// number it has received from this element's event handlers. We use
|
|
174
|
+
// it (instead of a time-based debounce) to decide whether the server
|
|
175
|
+
// has caught up to the user's keystrokes.
|
|
176
|
+
const serverAckSeq = typeof model.attributes?.["_reactpy_ack_seq"] === "number"
|
|
177
|
+
? model.attributes["_reactpy_ack_seq"]
|
|
178
|
+
: -1;
|
|
179
|
+
// Strip the internal key from props so it never reaches the DOM.
|
|
180
|
+
delete props["_reactpy_ack_seq"];
|
|
181
|
+
const [, setValue] = useState(props.value);
|
|
182
|
+
// Reference to the underlying DOM element. We read its current
|
|
183
|
+
// ``value`` from the reconcile effect to compare against the
|
|
184
|
+
// server's proposed value — reading from Preact state is not
|
|
185
|
+
// enough because the browser mutates the DOM directly between
|
|
186
|
+
// renders (especially during fast typing).
|
|
187
|
+
const inputRef = useRef(null);
|
|
188
|
+
// Per-element (NOT per-handler) monotonic counter for outgoing
|
|
189
|
+
// events. The wrapper below installs this counter onto every
|
|
190
|
+
// handler via ``_reactpy_set_seq`` so the counter survives
|
|
191
|
+
// handler recreation on every server re-render. Each handler
|
|
192
|
+
// has its own per-handler ``outgoingSeq`` (used as the default
|
|
193
|
+
// when no wrapper is installed), but we override it here so the
|
|
194
|
+
// element owns a single monotonic counter across handlers.
|
|
195
|
+
const sharedOutgoingSeq = useRef(0);
|
|
196
|
+
// Highest sequence number actually sent. The server's
|
|
197
|
+
// ``_reactpy_ack_seq`` will catch up to this. ``sharedOutgoingSeq``
|
|
198
|
+
// is incremented optimistically in the wrapper; ``lastSentSeq``
|
|
199
|
+
// is the high-water mark.
|
|
200
|
+
const lastSentSeq = useRef(-1);
|
|
56
201
|
// honor changes to value from the client via props
|
|
57
|
-
useEffect(() =>
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
202
|
+
useEffect(() => {
|
|
203
|
+
// The sequence number is the single source of truth for whether
|
|
204
|
+
// to apply the server's value. Time-based heuristics (debounce
|
|
205
|
+
// windows, submit-event detection) are not used here because they
|
|
206
|
+
// cannot reliably distinguish a server snapshot from before some
|
|
207
|
+
// keystrokes were processed from a snapshot taken after all
|
|
208
|
+
// keystrokes were processed. The sequence number can,
|
|
209
|
+
// deterministically.
|
|
210
|
+
//
|
|
211
|
+
// If the server has acknowledged every event the user has sent
|
|
212
|
+
// (``serverAckSeq >= lastSentSeq.current``), the server's value
|
|
213
|
+
// is the authoritative one and is applied directly. This
|
|
214
|
+
// includes clears (Enter handlers that reset the input),
|
|
215
|
+
// normalizations, and same-value confirmations.
|
|
216
|
+
// If the server is behind, its value is necessarily a stale
|
|
217
|
+
// snapshot and is ignored; the next layout-update will be
|
|
218
|
+
// applied once the server catches up.
|
|
219
|
+
//
|
|
220
|
+
// We additionally compare against the DOM's actual current
|
|
221
|
+
// value via ``inputRef`` — when the server is supposedly
|
|
222
|
+
// caught up but its snapshot is shorter than what the user
|
|
223
|
+
// has in the DOM (a stale snapshot racing with the user's
|
|
224
|
+
// most recent keystroke), skip applying so we don't clobber
|
|
225
|
+
// the user's text. This handles the realistic case where the
|
|
226
|
+
// user types faster than the server can ack.
|
|
227
|
+
if (serverAckSeq < lastSentSeq.current) {
|
|
228
|
+
return;
|
|
229
|
+
}
|
|
230
|
+
// Apply server's value to the DOM directly via the ref, NOT
|
|
231
|
+
// through Preact's render path. Preact would otherwise set
|
|
232
|
+
// ``inputRef.current.value`` on every render, racing with the
|
|
233
|
+
// browser's own mutations of the DOM value during fast typing
|
|
234
|
+
// and silently dropping keystrokes. By using a ref and writing
|
|
235
|
+
// only when we know the server has caught up, we let the
|
|
236
|
+
// browser manage the DOM value during typing and only override
|
|
237
|
+
// it when it's safe to do so.
|
|
238
|
+
//
|
|
239
|
+
// Crucially, only write when ``props.value`` is a real string.
|
|
240
|
+
// Inputs without a ``value`` attribute in their VDOM (e.g.
|
|
241
|
+
// uncontrolled inputs in the user_data and channel_layer tests)
|
|
242
|
+
// arrive with ``props.value === undefined``; assigning
|
|
243
|
+
// ``input.value = undefined`` coerces to the literal string
|
|
244
|
+
// ``"undefined"`` and seeds the field with garbage that the
|
|
245
|
+
// user's first keystroke will then append to (``test`` becomes
|
|
246
|
+
// ``testundefined``). Skipping the write in that case leaves
|
|
247
|
+
// the DOM at its default empty value, which is what the user
|
|
248
|
+
// actually typed into.
|
|
249
|
+
if (inputRef.current &&
|
|
250
|
+
typeof inputRef.current.value === "string" &&
|
|
251
|
+
typeof props.value === "string" &&
|
|
252
|
+
inputRef.current.value !== props.value) {
|
|
253
|
+
inputRef.current.value = props.value;
|
|
254
|
+
}
|
|
255
|
+
setValue(props.value);
|
|
256
|
+
}, [props.value, serverAckSeq]);
|
|
257
|
+
for (const [name, prop] of Object.entries(props)) {
|
|
258
|
+
if (typeof prop !== "function") {
|
|
259
|
+
continue;
|
|
260
|
+
}
|
|
261
|
+
const givenHandler = prop;
|
|
262
|
+
if (!givenHandler[HANDLER_MARKER]) {
|
|
263
|
+
continue;
|
|
264
|
+
}
|
|
265
|
+
// Apply ``throttle`` and/or ``debounce`` wrappers when the
|
|
266
|
+
// handler opts into them. Throttle fires on the leading edge
|
|
267
|
+
// (good for click-style events); debounce fires on the
|
|
268
|
+
// trailing edge (good for typing, where you want the server
|
|
269
|
+
// to see only the final state after the user pauses). Both
|
|
270
|
+
// are no-ops when the corresponding keyword is absent, which
|
|
271
|
+
// is the common case — the per-element seq reconcile is
|
|
272
|
+
// already responsible for input coherency, so we don't apply
|
|
273
|
+
// a debounce by default.
|
|
274
|
+
const handlerDebounce = givenHandler[HANDLER_DEBOUNCE];
|
|
275
|
+
const handlerThrottle = givenHandler[HANDLER_THROTTLE];
|
|
276
|
+
let wrapped = givenHandler;
|
|
277
|
+
if (isValidDebounce(handlerThrottle)) {
|
|
278
|
+
wrapped = throttleHandler(wrapped, handlerThrottle);
|
|
279
|
+
}
|
|
280
|
+
if (isValidDebounce(handlerDebounce)) {
|
|
281
|
+
wrapped = debounceHandler(wrapped, handlerDebounce);
|
|
282
|
+
}
|
|
283
|
+
props[name] = (event) => {
|
|
284
|
+
// Use a per-element (shared across all handlers on this
|
|
285
|
+
// element) monotonic counter for outgoing events. We
|
|
286
|
+
// overwrite the handler's own ``outgoingSeq`` with this
|
|
287
|
+
// counter so the wire-format seq number reflects the
|
|
288
|
+
// element-wide sequence. The handler closure's own
|
|
289
|
+
// ``outgoingSeq`` is unused for sequencing purposes now
|
|
290
|
+
// (it still exists as a default for non-wrapped callers).
|
|
291
|
+
//
|
|
292
|
+
// Critically, we increment the seq counter and update
|
|
293
|
+
// ``lastSentSeq`` on every *user* event, not on every
|
|
294
|
+
// server dispatch. If the handler is wrapped in a
|
|
295
|
+
// debounce that coalesces several events into one server
|
|
296
|
+
// dispatch, ``lastSentSeq`` will be higher than the seq
|
|
297
|
+
// actually sent to the server, which is fine — the seq
|
|
298
|
+
// we sent is the LATEST user-typed value, which is the
|
|
299
|
+
// one the server actually processed.
|
|
300
|
+
const seq = sharedOutgoingSeq.current++;
|
|
301
|
+
if (seq > lastSentSeq.current) {
|
|
302
|
+
lastSentSeq.current = seq;
|
|
64
303
|
}
|
|
65
|
-
|
|
66
|
-
|
|
304
|
+
const taggedHandler = givenHandler;
|
|
305
|
+
if (typeof taggedHandler._reactpy_set_seq === "function") {
|
|
306
|
+
// Push the handler's internal counter past our seq so
|
|
307
|
+
// the next (possibly debounced) dispatch uses a seq
|
|
308
|
+
// number that matches what the user just typed, not
|
|
309
|
+
// whatever stale value the handler closure happened
|
|
310
|
+
// to have left over.
|
|
311
|
+
taggedHandler._reactpy_set_seq(seq + 1);
|
|
312
|
+
}
|
|
313
|
+
// ``onKeyPress`` fires before the DOM has been updated with
|
|
314
|
+
// the new keystroke — ``event.target.value`` is the value
|
|
315
|
+
// BEFORE the character was added. We deliberately do NOT
|
|
316
|
+
// trust it for value-tracking. ``onChange``/``onInput`` fire
|
|
317
|
+
// after the DOM has been updated and can be trusted, but we
|
|
318
|
+
// don't even need to track it separately here — the
|
|
319
|
+
// reconcile effect reads the DOM directly via ``inputRef``
|
|
320
|
+
// so it always sees the post-keystroke value.
|
|
321
|
+
wrapped(event);
|
|
67
322
|
};
|
|
68
323
|
}
|
|
69
324
|
// Use createElement here to avoid warning about variable numbers of children not
|
|
70
325
|
// having keys. Warning about this must now be the responsibility of the client
|
|
71
326
|
// providing the models instead of the client rendering them.
|
|
72
|
-
|
|
73
|
-
//
|
|
74
|
-
|
|
327
|
+
// Drop ``value`` from the props we pass to Preact — we want the
|
|
328
|
+
// input to be fully uncontrolled. Preact would otherwise set
|
|
329
|
+
// ``inputRef.current.value`` on every render (because ``value``
|
|
330
|
+
// is a known DOM property), racing with the browser's own
|
|
331
|
+
// mutations of the DOM value during fast typing and silently
|
|
332
|
+
// dropping keystrokes. We instead update the DOM value via the
|
|
333
|
+
// ``inputRef`` in the reconcile effect above, only when the
|
|
334
|
+
// server has caught up and the proposed value is not shorter
|
|
335
|
+
// than what the user has already typed.
|
|
336
|
+
const controlledProps = {};
|
|
337
|
+
for (const key of Object.keys(props)) {
|
|
338
|
+
if (key !== "value") {
|
|
339
|
+
controlledProps[key] = props[key];
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
return createElement(model.tagName, { ...controlledProps, ref: inputRef }, ...createChildren(model, (child) => (_jsx(Element, { model: child }, child.attributes?.key))));
|
|
75
343
|
}
|
|
76
344
|
function ScriptElement({ model }) {
|
|
77
345
|
const ref = useRef(null);
|
package/dist/components.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"components.js","sourceRoot":"","sources":["../src/components.tsx"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"components.js","sourceRoot":"","sources":["../src/components.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export declare const HANDLER_MARKER: "isHandler";
|
|
2
|
+
export declare const HANDLER_DEBOUNCE: "debounce";
|
|
3
|
+
export declare const HANDLER_THROTTLE: "throttle";
|
|
4
|
+
export type HandlerMarker = typeof HANDLER_MARKER;
|
|
5
|
+
export type HandlerDebounce = typeof HANDLER_DEBOUNCE;
|
|
6
|
+
export type HandlerThrottle = typeof HANDLER_THROTTLE;
|
|
7
|
+
export type TaggedEventHandler = ((event: Event) => void) & {
|
|
8
|
+
[HANDLER_MARKER]: true;
|
|
9
|
+
[HANDLER_DEBOUNCE]?: number;
|
|
10
|
+
[HANDLER_THROTTLE]?: number;
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* Returns true when the given value is a finite, non-negative integer.
|
|
14
|
+
* Used to validate debounce/throttle values arriving over the wire from the
|
|
15
|
+
* Python layout.
|
|
16
|
+
*/
|
|
17
|
+
export declare function isValidDebounce(value: unknown): value is number;
|
|
18
|
+
export declare const isValidThrottle: typeof isValidDebounce;
|
|
19
|
+
//# sourceMappingURL=handler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../src/handler.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,cAAc,EAAG,WAAoB,CAAC;AACnD,eAAO,MAAM,gBAAgB,EAAG,UAAmB,CAAC;AACpD,eAAO,MAAM,gBAAgB,EAAG,UAAmB,CAAC;AAEpD,MAAM,MAAM,aAAa,GAAG,OAAO,cAAc,CAAC;AAClD,MAAM,MAAM,eAAe,GAAG,OAAO,gBAAgB,CAAC;AACtD,MAAM,MAAM,eAAe,GAAG,OAAO,gBAAgB,CAAC;AAEtD,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC,GAAG;IAC1D,CAAC,cAAc,CAAC,EAAE,IAAI,CAAC;IACvB,CAAC,gBAAgB,CAAC,CAAC,EAAE,MAAM,CAAC;IAC5B,CAAC,gBAAgB,CAAC,CAAC,EAAE,MAAM,CAAC;CAC7B,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAO/D;AAED,eAAO,MAAM,eAAe,wBAAkB,CAAC"}
|
package/dist/handler.js
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
// Shared marker property names attached to event handler functions created by
|
|
2
|
+
// `vdom.tsx::createEventHandler`. Centralizing these strings keeps `components.tsx`
|
|
3
|
+
// and `vdom.tsx` in sync without relying on ad-hoc property names.
|
|
4
|
+
export const HANDLER_MARKER = "isHandler";
|
|
5
|
+
export const HANDLER_DEBOUNCE = "debounce";
|
|
6
|
+
export const HANDLER_THROTTLE = "throttle";
|
|
7
|
+
/**
|
|
8
|
+
* Returns true when the given value is a finite, non-negative integer.
|
|
9
|
+
* Used to validate debounce/throttle values arriving over the wire from the
|
|
10
|
+
* Python layout.
|
|
11
|
+
*/
|
|
12
|
+
export function isValidDebounce(value) {
|
|
13
|
+
return (typeof value === "number" &&
|
|
14
|
+
Number.isFinite(value) &&
|
|
15
|
+
Number.isInteger(value) &&
|
|
16
|
+
value >= 0);
|
|
17
|
+
}
|
|
18
|
+
export const isValidThrottle = isValidDebounce;
|
|
19
|
+
//# sourceMappingURL=handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handler.js","sourceRoot":"","sources":["../src/handler.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,oFAAoF;AACpF,mEAAmE;AAEnE,MAAM,CAAC,MAAM,cAAc,GAAG,WAAoB,CAAC;AACnD,MAAM,CAAC,MAAM,gBAAgB,GAAG,UAAmB,CAAC;AACpD,MAAM,CAAC,MAAM,gBAAgB,GAAG,UAAmB,CAAC;AAYpD;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,KAAc;IAC5C,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ;QACzB,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;QACtB,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC;QACvB,KAAK,IAAI,CAAC,CACX,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,eAAe,GAAG,eAAe,CAAC"}
|
package/dist/index.d.ts
CHANGED
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC;AAC7B,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC;AACvB,cAAc,aAAa,CAAC;AAC5B,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC;AACvB,cAAc,aAAa,CAAC;AAC5B,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC"}
|
package/dist/index.js
CHANGED
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC;AAC7B,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC;AACvB,cAAc,aAAa,CAAC;AAC5B,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC;AACvB,cAAc,aAAa,CAAC;AAC5B,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC"}
|
package/dist/mount.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mount.d.ts","sourceRoot":"","sources":["../src/mount.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAE1C,wBAAgB,YAAY,CAAC,KAAK,EAAE,UAAU,
|
|
1
|
+
{"version":3,"file":"mount.d.ts","sourceRoot":"","sources":["../src/mount.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAE1C,wBAAgB,YAAY,CAAC,KAAK,EAAE,UAAU,QA+B7C"}
|
package/dist/mount.js
CHANGED
|
@@ -8,9 +8,9 @@ export function mountReactPy(props) {
|
|
|
8
8
|
const wsOrigin = `${wsProtocol}//${window.location.host}`;
|
|
9
9
|
const componentUrl = new URL(`${wsOrigin}${props.pathPrefix}${props.componentPath || ""}`);
|
|
10
10
|
// Embed the initial HTTP path into the WebSocket URL
|
|
11
|
-
componentUrl.searchParams.append("
|
|
11
|
+
componentUrl.searchParams.append("path", window.location.pathname);
|
|
12
12
|
if (window.location.search) {
|
|
13
|
-
componentUrl.searchParams.append("
|
|
13
|
+
componentUrl.searchParams.append("qs", window.location.search);
|
|
14
14
|
}
|
|
15
15
|
// Configure a new ReactPy client
|
|
16
16
|
const client = new ReactPyClient({
|
package/dist/mount.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mount.js","sourceRoot":"","sources":["../src/mount.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAGtC,MAAM,UAAU,YAAY,CAAC,KAAiB;IAC5C,0CAA0C;IAC1C,MAAM,UAAU,GAAG,KAAK,MAAM,CAAC,QAAQ,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC;IAC5E,MAAM,QAAQ,GAAG,GAAG,UAAU,KAAK,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;IAC1D,MAAM,YAAY,GAAG,IAAI,GAAG,CAC1B,GAAG,QAAQ,GAAG,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC,aAAa,IAAI,EAAE,EAAE,CAC7D,CAAC;IAEF,qDAAqD;IACrD,YAAY,CAAC,YAAY,CAAC,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"mount.js","sourceRoot":"","sources":["../src/mount.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAGtC,MAAM,UAAU,YAAY,CAAC,KAAiB;IAC5C,0CAA0C;IAC1C,MAAM,UAAU,GAAG,KAAK,MAAM,CAAC,QAAQ,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC;IAC5E,MAAM,QAAQ,GAAG,GAAG,UAAU,KAAK,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;IAC1D,MAAM,YAAY,GAAG,IAAI,GAAG,CAC1B,GAAG,QAAQ,GAAG,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC,aAAa,IAAI,EAAE,EAAE,CAC7D,CAAC;IAEF,qDAAqD;IACrD,YAAY,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACnE,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;QAC3B,YAAY,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACjE,CAAC;IAED,iCAAiC;IACjC,MAAM,MAAM,GAAG,IAAI,aAAa,CAAC;QAC/B,IAAI,EAAE;YACJ,YAAY,EAAE,YAAY;YAC1B,aAAa,EAAE,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,KAAK,CAAC,UAAU,UAAU;SACtE;QACD,gBAAgB,EAAE;YAChB,QAAQ,EAAE,KAAK,CAAC,iBAAiB,IAAI,GAAG;YACxC,WAAW,EAAE,KAAK,CAAC,oBAAoB,IAAI,KAAK;YAChD,UAAU,EAAE,KAAK,CAAC,mBAAmB,IAAI,GAAG;YAC5C,iBAAiB,EAAE,KAAK,CAAC,0BAA0B,IAAI,IAAI;SAC5D;QACD,YAAY,EAAE,KAAK,CAAC,YAAY;KACjC,CAAC,CAAC;IAEH,gCAAgC;IAChC,MAAM,CAAC,KAAC,MAAM,IAAC,MAAM,EAAE,MAAM,GAAI,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;AACzD,CAAC"}
|
package/dist/types.d.ts
CHANGED
|
@@ -40,7 +40,7 @@ export type ReactPyComponent = ComponentType<{
|
|
|
40
40
|
export type ReactPyVdom = {
|
|
41
41
|
tagName: string;
|
|
42
42
|
attributes?: {
|
|
43
|
-
[key: string]:
|
|
43
|
+
[key: string]: any;
|
|
44
44
|
};
|
|
45
45
|
children?: (ReactPyVdom | string)[];
|
|
46
46
|
error?: string;
|
|
@@ -56,6 +56,8 @@ export type ReactPyVdomEventHandler = {
|
|
|
56
56
|
target: string;
|
|
57
57
|
preventDefault?: boolean;
|
|
58
58
|
stopPropagation?: boolean;
|
|
59
|
+
debounce?: number;
|
|
60
|
+
throttle?: number;
|
|
59
61
|
};
|
|
60
62
|
export type ReactPyVdomImportSource = {
|
|
61
63
|
source: string;
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAI5C,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,MAAM,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,gCAAgC,GAAG;IAC7C,GAAG,EAAE,GAAG,CAAC;IACT,YAAY,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,SAAS,EAAE,CAAC,OAAO,EAAE,YAAY,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC;IAChD,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,MAAM,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,YAAY,EAAE,GAAG,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG;IACtC,IAAI,EAAE,WAAW,CAAC;IAClB,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,YAAY,EAAE,WAAW,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,YAAY,EAAE,WAAW,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,0BAA0B,CAAC,EAAE,MAAM,CAAC;CACrC,CAAC;AAIF,MAAM,MAAM,gBAAgB,GAAG,aAAa,CAAC;IAAE,KAAK,EAAE,WAAW,CAAA;CAAE,CAAC,CAAC;AAErE,MAAM,MAAM,WAAW,GAAG;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/vdom.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { ReactPyVdom, ReactPyVdomImportSource, BindImportSource } from "./types";
|
|
2
1
|
import type { ReactPyClient } from "./client";
|
|
2
|
+
import type { BindImportSource, ReactPyVdom, ReactPyVdomImportSource } from "./types";
|
|
3
3
|
export declare function loadImportSource(vdomImportSource: ReactPyVdomImportSource, client: ReactPyClient): Promise<BindImportSource>;
|
|
4
4
|
export declare function createChildren<Child>(model: ReactPyVdom, createChild: (child: ReactPyVdom) => Child): (Child | string)[];
|
|
5
5
|
export declare function createAttributes(model: ReactPyVdom, client: ReactPyClient): {
|
package/dist/vdom.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vdom.d.ts","sourceRoot":"","sources":["../src/vdom.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"vdom.d.ts","sourceRoot":"","sources":["../src/vdom.tsx"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAC9C,OAAO,KAAK,EACV,gBAAgB,EAIhB,WAAW,EAEX,uBAAuB,EACxB,MAAM,SAAS,CAAC;AAEjB,wBAAsB,gBAAgB,CACpC,gBAAgB,EAAE,uBAAuB,EACzC,MAAM,EAAE,aAAa,GACpB,OAAO,CAAC,gBAAgB,CAAC,CA2C3B;AAsGD,wBAAgB,cAAc,CAAC,KAAK,EAClC,KAAK,EAAE,WAAW,EAClB,WAAW,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,KAAK,GACzC,CAAC,KAAK,GAAG,MAAM,CAAC,EAAE,CAapB;AAED,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,WAAW,EAClB,MAAM,EAAE,aAAa,GACpB;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,CAmBxB"}
|
package/dist/vdom.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import eventToObject from "event-to-object";
|
|
2
2
|
import { Fragment } from "preact";
|
|
3
|
+
import { HANDLER_DEBOUNCE, HANDLER_MARKER, HANDLER_THROTTLE, isValidDebounce, isValidThrottle, } from "./handler";
|
|
3
4
|
import { infer_bind_from_environment } from "./bind";
|
|
4
5
|
import log from "./logger";
|
|
5
6
|
export async function loadImportSource(vdomImportSource, client) {
|
|
@@ -129,7 +130,15 @@ export function createAttributes(model, client) {
|
|
|
129
130
|
...Object.fromEntries(Object.entries(model.inlineJavaScript || {}).map(([name, inlineJavaScript]) => createInlineJavaScript(name, inlineJavaScript))),
|
|
130
131
|
}));
|
|
131
132
|
}
|
|
132
|
-
function createEventHandler(client, name, { target, preventDefault, stopPropagation }) {
|
|
133
|
+
function createEventHandler(client, name, { target, preventDefault, stopPropagation, debounce, throttle, }) {
|
|
134
|
+
// Sequence number for the next outgoing event on this handler.
|
|
135
|
+
// The wrapper in ``UserInputElement`` may overwrite this before
|
|
136
|
+
// the event is actually sent (so that the wrapper, not this
|
|
137
|
+
// closure, owns the per-element monotonic counter and survives
|
|
138
|
+
// handler recreation on every server re-render). The default
|
|
139
|
+
// behavior (no wrapper) is to use a per-handler counter starting
|
|
140
|
+
// at 0.
|
|
141
|
+
let outgoingSeq = 0;
|
|
133
142
|
const eventHandler = function (...args) {
|
|
134
143
|
const data = Array.from(args).map((value) => {
|
|
135
144
|
const event = value;
|
|
@@ -147,9 +156,32 @@ function createEventHandler(client, name, { target, preventDefault, stopPropagat
|
|
|
147
156
|
return event;
|
|
148
157
|
}
|
|
149
158
|
});
|
|
150
|
-
|
|
159
|
+
const seq = outgoingSeq++;
|
|
160
|
+
client.sendMessage({ type: "layout-event", data, target, seq });
|
|
151
161
|
};
|
|
152
|
-
eventHandler
|
|
162
|
+
eventHandler[HANDLER_MARKER] = true;
|
|
163
|
+
eventHandler._reactpy_peek_seq = () => outgoingSeq;
|
|
164
|
+
eventHandler._reactpy_set_seq = (n) => {
|
|
165
|
+
outgoingSeq = n;
|
|
166
|
+
};
|
|
167
|
+
if (debounce !== undefined) {
|
|
168
|
+
if (!isValidDebounce(debounce)) {
|
|
169
|
+
log.warn(`Ignoring invalid debounce value ${JSON.stringify(debounce)} ` +
|
|
170
|
+
`on event handler "${name}": expected a non-negative integer.`);
|
|
171
|
+
}
|
|
172
|
+
else {
|
|
173
|
+
eventHandler[HANDLER_DEBOUNCE] = debounce;
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
if (throttle !== undefined) {
|
|
177
|
+
if (!isValidThrottle(throttle)) {
|
|
178
|
+
log.warn(`Ignoring invalid throttle value ${JSON.stringify(throttle)} ` +
|
|
179
|
+
`on event handler "${name}": expected a non-negative integer.`);
|
|
180
|
+
}
|
|
181
|
+
else {
|
|
182
|
+
eventHandler[HANDLER_THROTTLE] = throttle;
|
|
183
|
+
}
|
|
184
|
+
}
|
|
153
185
|
return [name, eventHandler];
|
|
154
186
|
}
|
|
155
187
|
function createInlineJavaScript(name, inlineJavaScript) {
|